summaryrefslogtreecommitdiff
path: root/parts/django
diff options
context:
space:
mode:
authorNishanth Amuluru2011-01-11 22:41:51 +0530
committerNishanth Amuluru2011-01-11 22:41:51 +0530
commitb03203c8cb991c16ac8a3d74c8c4078182d0bb48 (patch)
tree7cf13b2deacbfaaec99edb431b83ddd5ea734a52 /parts/django
parent0c50203cd9eb94b819883c3110922e873f003138 (diff)
downloadpytask-b03203c8cb991c16ac8a3d74c8c4078182d0bb48.tar.gz
pytask-b03203c8cb991c16ac8a3d74c8c4078182d0bb48.tar.bz2
pytask-b03203c8cb991c16ac8a3d74c8c4078182d0bb48.zip
removed all the buildout files
Diffstat (limited to 'parts/django')
-rw-r--r--parts/django/AUTHORS530
-rw-r--r--parts/django/Django.egg-info/PKG-INFO23
-rw-r--r--parts/django/Django.egg-info/SOURCES.txt2381
-rw-r--r--parts/django/Django.egg-info/dependency_links.txt1
-rw-r--r--parts/django/Django.egg-info/top_level.txt1
-rw-r--r--parts/django/INSTALL16
-rw-r--r--parts/django/LICENSE27
-rw-r--r--parts/django/MANIFEST.in29
-rw-r--r--parts/django/PKG-INFO23
-rw-r--r--parts/django/README37
-rw-r--r--parts/django/django/__init__.py16
-rw-r--r--parts/django/django/bin/__init__.py0
-rwxr-xr-xparts/django/django/bin/compile-messages.py11
-rwxr-xr-xparts/django/django/bin/daily_cleanup.py13
-rwxr-xr-xparts/django/django/bin/django-admin.py5
-rwxr-xr-xparts/django/django/bin/make-messages.py11
-rw-r--r--parts/django/django/bin/profiling/__init__.py0
-rw-r--r--parts/django/django/bin/profiling/gather_profile_stats.py36
-rwxr-xr-xparts/django/django/bin/unique-messages.py28
-rw-r--r--parts/django/django/conf/__init__.py136
-rw-r--r--parts/django/django/conf/app_template/__init__.py0
-rw-r--r--parts/django/django/conf/app_template/models.py3
-rw-r--r--parts/django/django/conf/app_template/tests.py23
-rw-r--r--parts/django/django/conf/app_template/views.py1
-rw-r--r--parts/django/django/conf/global_settings.py524
-rw-r--r--parts/django/django/conf/locale/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ar/LC_MESSAGES/django.mobin68894 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ar/LC_MESSAGES/django.po5159
-rw-r--r--parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.mobin1859 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.po118
-rw-r--r--parts/django/django/conf/locale/ar/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ar/formats.py18
-rw-r--r--parts/django/django/conf/locale/bg/LC_MESSAGES/django.mobin63935 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/bg/LC_MESSAGES/django.po5326
-rw-r--r--parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.mobin1725 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.po106
-rw-r--r--parts/django/django/conf/locale/bg/__init__.py0
-rw-r--r--parts/django/django/conf/locale/bg/formats.py18
-rw-r--r--parts/django/django/conf/locale/bn/LC_MESSAGES/django.mobin50191 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/bn/LC_MESSAGES/django.po4041
-rw-r--r--parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.mobin2230 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.po114
-rw-r--r--parts/django/django/conf/locale/bn/__init__.py0
-rw-r--r--parts/django/django/conf/locale/bn/formats.py18
-rw-r--r--parts/django/django/conf/locale/bs/LC_MESSAGES/django.mobin53222 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/bs/LC_MESSAGES/django.po5183
-rw-r--r--parts/django/django/conf/locale/bs/__init__.py0
-rw-r--r--parts/django/django/conf/locale/bs/formats.py18
-rw-r--r--parts/django/django/conf/locale/ca/LC_MESSAGES/django.mobin67366 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ca/LC_MESSAGES/django.po4490
-rw-r--r--parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.mobin1684 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.po115
-rw-r--r--parts/django/django/conf/locale/ca/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ca/formats.py30
-rw-r--r--parts/django/django/conf/locale/cs/LC_MESSAGES/django.mobin77011 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/cs/LC_MESSAGES/django.po5153
-rw-r--r--parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.mobin2695 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.po159
-rw-r--r--parts/django/django/conf/locale/cs/__init__.py0
-rw-r--r--parts/django/django/conf/locale/cs/formats.py32
-rw-r--r--parts/django/django/conf/locale/cy/LC_MESSAGES/django.mobin22756 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/cy/LC_MESSAGES/django.po1990
-rw-r--r--parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.mobin1009 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.po111
-rw-r--r--parts/django/django/conf/locale/cy/__init__.py0
-rw-r--r--parts/django/django/conf/locale/cy/formats.py18
-rw-r--r--parts/django/django/conf/locale/da/LC_MESSAGES/django.mobin73112 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/da/LC_MESSAGES/django.po5105
-rw-r--r--parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.mobin2587 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.po155
-rw-r--r--parts/django/django/conf/locale/da/__init__.py0
-rw-r--r--parts/django/django/conf/locale/da/formats.py26
-rw-r--r--parts/django/django/conf/locale/de/LC_MESSAGES/django.mobin77651 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/de/LC_MESSAGES/django.po5225
-rw-r--r--parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.mobin2723 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.po160
-rw-r--r--parts/django/django/conf/locale/de/__init__.py0
-rw-r--r--parts/django/django/conf/locale/de/formats.py32
-rw-r--r--parts/django/django/conf/locale/el/LC_MESSAGES/django.mobin38998 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/el/LC_MESSAGES/django.po2766
-rw-r--r--parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.mobin1801 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.po108
-rw-r--r--parts/django/django/conf/locale/el/__init__.py0
-rw-r--r--parts/django/django/conf/locale/el/formats.py18
-rw-r--r--parts/django/django/conf/locale/en/LC_MESSAGES/django.mobin572 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/en/LC_MESSAGES/django.po5002
-rw-r--r--parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.mobin358 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.po145
-rw-r--r--parts/django/django/conf/locale/en/__init__.py0
-rw-r--r--parts/django/django/conf/locale/en/formats.py38
-rw-r--r--parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.mobin762 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.po4996
-rw-r--r--parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.mobin344 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.po114
-rw-r--r--parts/django/django/conf/locale/en_GB/__init__.py0
-rw-r--r--parts/django/django/conf/locale/en_GB/formats.py39
-rw-r--r--parts/django/django/conf/locale/es/LC_MESSAGES/django.mobin71672 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/es/LC_MESSAGES/django.po5574
-rw-r--r--parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.mobin1622 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.po117
-rw-r--r--parts/django/django/conf/locale/es/__init__.py0
-rw-r--r--parts/django/django/conf/locale/es/formats.py30
-rw-r--r--parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.mobin77720 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.po5186
-rw-r--r--parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mobin2512 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po132
-rw-r--r--parts/django/django/conf/locale/es_AR/__init__.py0
-rw-r--r--parts/django/django/conf/locale/es_AR/formats.py29
-rw-r--r--parts/django/django/conf/locale/et/LC_MESSAGES/django.mobin64652 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/et/LC_MESSAGES/django.po4414
-rw-r--r--parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.mobin1636 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.po117
-rw-r--r--parts/django/django/conf/locale/et/__init__.py0
-rw-r--r--parts/django/django/conf/locale/et/formats.py18
-rw-r--r--parts/django/django/conf/locale/eu/LC_MESSAGES/django.mobin44912 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/eu/LC_MESSAGES/django.po4248
-rw-r--r--parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.mobin1560 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.po117
-rw-r--r--parts/django/django/conf/locale/eu/__init__.py0
-rw-r--r--parts/django/django/conf/locale/eu/formats.py18
-rw-r--r--parts/django/django/conf/locale/fa/LC_MESSAGES/django.mobin41548 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fa/LC_MESSAGES/django.po4006
-rw-r--r--parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.mobin1889 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.po118
-rw-r--r--parts/django/django/conf/locale/fa/__init__.py0
-rw-r--r--parts/django/django/conf/locale/fa/formats.py18
-rw-r--r--parts/django/django/conf/locale/fi/LC_MESSAGES/django.mobin74561 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fi/LC_MESSAGES/django.po5558
-rw-r--r--parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.mobin2703 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.po157
-rw-r--r--parts/django/django/conf/locale/fi/__init__.py0
-rw-r--r--parts/django/django/conf/locale/fi/formats.py18
-rw-r--r--parts/django/django/conf/locale/fr/LC_MESSAGES/django.mobin78477 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fr/LC_MESSAGES/django.po5198
-rw-r--r--parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.mobin2726 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.po162
-rw-r--r--parts/django/django/conf/locale/fr/__init__.py0
-rw-r--r--parts/django/django/conf/locale/fr/formats.py36
-rw-r--r--parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.mobin4885 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.po4997
-rw-r--r--parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.mobin367 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.po119
-rw-r--r--parts/django/django/conf/locale/fy_NL/__init__.py0
-rw-r--r--parts/django/django/conf/locale/fy_NL/formats.py18
-rw-r--r--parts/django/django/conf/locale/ga/LC_MESSAGES/django.mobin78750 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ga/LC_MESSAGES/django.po5223
-rw-r--r--parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.mobin2639 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.po156
-rw-r--r--parts/django/django/conf/locale/ga/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ga/formats.py18
-rw-r--r--parts/django/django/conf/locale/gl/LC_MESSAGES/django.mobin49175 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/gl/LC_MESSAGES/django.po3028
-rw-r--r--parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.mobin1519 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.po109
-rw-r--r--parts/django/django/conf/locale/gl/__init__.py0
-rw-r--r--parts/django/django/conf/locale/gl/formats.py18
-rw-r--r--parts/django/django/conf/locale/he/LC_MESSAGES/django.mobin83367 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/he/LC_MESSAGES/django.po5064
-rw-r--r--parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.mobin2938 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.po159
-rw-r--r--parts/django/django/conf/locale/he/__init__.py0
-rw-r--r--parts/django/django/conf/locale/he/formats.py18
-rw-r--r--parts/django/django/conf/locale/hi/LC_MESSAGES/django.mobin69628 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/hi/LC_MESSAGES/django.po4121
-rw-r--r--parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.mobin2094 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.po116
-rw-r--r--parts/django/django/conf/locale/hi/__init__.py0
-rw-r--r--parts/django/django/conf/locale/hi/formats.py18
-rw-r--r--parts/django/django/conf/locale/hr/LC_MESSAGES/django.mobin75854 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/hr/LC_MESSAGES/django.po5199
-rw-r--r--parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.mobin1740 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.po119
-rw-r--r--parts/django/django/conf/locale/hr/__init__.py0
-rw-r--r--parts/django/django/conf/locale/hr/formats.py42
-rw-r--r--parts/django/django/conf/locale/hu/LC_MESSAGES/django.mobin68796 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/hu/LC_MESSAGES/django.po4423
-rw-r--r--parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.mobin1638 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.po111
-rw-r--r--parts/django/django/conf/locale/hu/__init__.py0
-rw-r--r--parts/django/django/conf/locale/hu/formats.py18
-rw-r--r--parts/django/django/conf/locale/id/LC_MESSAGES/django.mobin74754 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/id/LC_MESSAGES/django.po5127
-rw-r--r--parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.mobin2579 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.po157
-rw-r--r--parts/django/django/conf/locale/id/__init__.py0
-rw-r--r--parts/django/django/conf/locale/id/formats.py43
-rw-r--r--parts/django/django/conf/locale/is/LC_MESSAGES/django.mobin36864 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/is/LC_MESSAGES/django.po4285
-rw-r--r--parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.mobin1603 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.po109
-rw-r--r--parts/django/django/conf/locale/is/__init__.py0
-rw-r--r--parts/django/django/conf/locale/is/formats.py18
-rw-r--r--parts/django/django/conf/locale/it/LC_MESSAGES/django.mobin75958 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/it/LC_MESSAGES/django.po5124
-rw-r--r--parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.mobin1729 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.po124
-rw-r--r--parts/django/django/conf/locale/it/__init__.py0
-rw-r--r--parts/django/django/conf/locale/it/formats.py41
-rw-r--r--parts/django/django/conf/locale/ja/LC_MESSAGES/django.mobin75882 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ja/LC_MESSAGES/django.po5116
-rw-r--r--parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.mobin2696 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.po144
-rw-r--r--parts/django/django/conf/locale/ja/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ja/formats.py18
-rw-r--r--parts/django/django/conf/locale/ka/LC_MESSAGES/django.mobin93456 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ka/LC_MESSAGES/django.po4176
-rw-r--r--parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.mobin2217 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.po117
-rw-r--r--parts/django/django/conf/locale/ka/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ka/formats.py42
-rw-r--r--parts/django/django/conf/locale/km/LC_MESSAGES/django.mobin68554 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/km/LC_MESSAGES/django.po2508
-rw-r--r--parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.mobin1938 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.po108
-rw-r--r--parts/django/django/conf/locale/km/__init__.py0
-rw-r--r--parts/django/django/conf/locale/km/formats.py18
-rw-r--r--parts/django/django/conf/locale/kn/LC_MESSAGES/django.mobin56739 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/kn/LC_MESSAGES/django.po2536
-rw-r--r--parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.mobin2198 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.po116
-rw-r--r--parts/django/django/conf/locale/kn/__init__.py0
-rw-r--r--parts/django/django/conf/locale/kn/formats.py18
-rw-r--r--parts/django/django/conf/locale/ko/LC_MESSAGES/django.mobin74546 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ko/LC_MESSAGES/django.po5124
-rw-r--r--parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.mobin2485 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.po154
-rw-r--r--parts/django/django/conf/locale/ko/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ko/formats.py44
-rw-r--r--parts/django/django/conf/locale/lt/LC_MESSAGES/django.mobin44186 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/lt/LC_MESSAGES/django.po2868
-rw-r--r--parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.mobin1667 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.po116
-rw-r--r--parts/django/django/conf/locale/lt/__init__.py0
-rw-r--r--parts/django/django/conf/locale/lt/formats.py18
-rw-r--r--parts/django/django/conf/locale/lv/LC_MESSAGES/django.mobin58805 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/lv/LC_MESSAGES/django.po5471
-rw-r--r--parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.mobin2853 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.po164
-rw-r--r--parts/django/django/conf/locale/lv/__init__.py0
-rw-r--r--parts/django/django/conf/locale/lv/formats.py36
-rw-r--r--parts/django/django/conf/locale/mk/LC_MESSAGES/django.mobin93415 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/mk/LC_MESSAGES/django.po5140
-rw-r--r--parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.mobin1926 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.po126
-rw-r--r--parts/django/django/conf/locale/mk/__init__.py0
-rw-r--r--parts/django/django/conf/locale/mk/formats.py18
-rw-r--r--parts/django/django/conf/locale/ml/LC_MESSAGES/django.mobin64084 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ml/LC_MESSAGES/django.po5044
-rw-r--r--parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.mobin4350 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.po156
-rw-r--r--parts/django/django/conf/locale/ml/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ml/formats.py38
-rw-r--r--parts/django/django/conf/locale/mn/LC_MESSAGES/django.mobin69940 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/mn/LC_MESSAGES/django.po5243
-rw-r--r--parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.mobin367 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.po149
-rw-r--r--parts/django/django/conf/locale/mn/__init__.py0
-rw-r--r--parts/django/django/conf/locale/mn/formats.py18
-rw-r--r--parts/django/django/conf/locale/nb/LC_MESSAGES/django.mobin68407 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/nb/LC_MESSAGES/django.po5132
-rw-r--r--parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.mobin1539 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.po119
-rw-r--r--parts/django/django/conf/locale/nb/__init__.py0
-rw-r--r--parts/django/django/conf/locale/nb/formats.py34
-rw-r--r--parts/django/django/conf/locale/nl/LC_MESSAGES/django.mobin65480 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/nl/LC_MESSAGES/django.po4443
-rw-r--r--parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.mobin1609 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.po118
-rw-r--r--parts/django/django/conf/locale/nl/__init__.py0
-rw-r--r--parts/django/django/conf/locale/nl/formats.py48
-rw-r--r--parts/django/django/conf/locale/nn/LC_MESSAGES/django.mobin72359 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/nn/LC_MESSAGES/django.po5150
-rw-r--r--parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.mobin2506 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.po155
-rw-r--r--parts/django/django/conf/locale/nn/__init__.py0
-rw-r--r--parts/django/django/conf/locale/nn/formats.py34
-rw-r--r--parts/django/django/conf/locale/no/LC_MESSAGES/django.mobin68407 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/no/LC_MESSAGES/django.po5133
-rw-r--r--parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.mobin1539 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.po120
-rw-r--r--parts/django/django/conf/locale/no/__init__.py0
-rw-r--r--parts/django/django/conf/locale/no/formats.py34
-rw-r--r--parts/django/django/conf/locale/pl/LC_MESSAGES/django.mobin69963 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/pl/LC_MESSAGES/django.po5172
-rw-r--r--parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.mobin1733 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.po120
-rw-r--r--parts/django/django/conf/locale/pl/__init__.py0
-rw-r--r--parts/django/django/conf/locale/pl/formats.py32
-rw-r--r--parts/django/django/conf/locale/pt/LC_MESSAGES/django.mobin52977 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/pt/LC_MESSAGES/django.po5149
-rw-r--r--parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.mobin1596 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.po125
-rw-r--r--parts/django/django/conf/locale/pt/__init__.py0
-rw-r--r--parts/django/django/conf/locale/pt/formats.py35
-rw-r--r--parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.mobin75625 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.po5119
-rw-r--r--parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mobin1662 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po113
-rw-r--r--parts/django/django/conf/locale/pt_BR/__init__.py0
-rw-r--r--parts/django/django/conf/locale/pt_BR/formats.py35
-rw-r--r--parts/django/django/conf/locale/ro/LC_MESSAGES/django.mobin66590 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ro/LC_MESSAGES/django.po4268
-rw-r--r--parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.mobin1476 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.po116
-rw-r--r--parts/django/django/conf/locale/ro/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ro/formats.py18
-rw-r--r--parts/django/django/conf/locale/ru/LC_MESSAGES/django.mobin96144 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ru/LC_MESSAGES/django.po5069
-rw-r--r--parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.mobin3735 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.po144
-rw-r--r--parts/django/django/conf/locale/ru/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ru/formats.py35
-rw-r--r--parts/django/django/conf/locale/sk/LC_MESSAGES/django.mobin77069 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sk/LC_MESSAGES/django.po5183
-rw-r--r--parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.mobin2659 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.po156
-rw-r--r--parts/django/django/conf/locale/sk/__init__.py0
-rw-r--r--parts/django/django/conf/locale/sk/formats.py32
-rw-r--r--parts/django/django/conf/locale/sl/LC_MESSAGES/django.mobin76473 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sl/LC_MESSAGES/django.po5182
-rw-r--r--parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.mobin2794 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.po165
-rw-r--r--parts/django/django/conf/locale/sl/__init__.py0
-rw-r--r--parts/django/django/conf/locale/sl/formats.py18
-rw-r--r--parts/django/django/conf/locale/sq/LC_MESSAGES/django.mobin5125 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sq/LC_MESSAGES/django.po5011
-rw-r--r--parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.mobin367 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.po119
-rw-r--r--parts/django/django/conf/locale/sq/__init__.py0
-rw-r--r--parts/django/django/conf/locale/sq/formats.py18
-rw-r--r--parts/django/django/conf/locale/sr/LC_MESSAGES/django.mobin57173 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sr/LC_MESSAGES/django.po5152
-rw-r--r--parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.mobin2683 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.po144
-rw-r--r--parts/django/django/conf/locale/sr/__init__.py0
-rw-r--r--parts/django/django/conf/locale/sr/formats.py44
-rw-r--r--parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.mobin45656 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.po5037
-rw-r--r--parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.mobin2580 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.po153
-rw-r--r--parts/django/django/conf/locale/sr_Latn/__init__.py0
-rw-r--r--parts/django/django/conf/locale/sr_Latn/formats.py44
-rw-r--r--parts/django/django/conf/locale/sv/LC_MESSAGES/django.mobin63220 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sv/LC_MESSAGES/django.po4804
-rw-r--r--parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.mobin1688 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.po121
-rw-r--r--parts/django/django/conf/locale/sv/__init__.py0
-rw-r--r--parts/django/django/conf/locale/sv/formats.py35
-rw-r--r--parts/django/django/conf/locale/ta/LC_MESSAGES/django.mobin60018 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ta/LC_MESSAGES/django.po2136
-rw-r--r--parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.mobin2334 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.po112
-rw-r--r--parts/django/django/conf/locale/ta/__init__.py0
-rw-r--r--parts/django/django/conf/locale/ta/formats.py18
-rw-r--r--parts/django/django/conf/locale/te/LC_MESSAGES/django.mobin66372 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/te/LC_MESSAGES/django.po4112
-rw-r--r--parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.mobin2330 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.po117
-rw-r--r--parts/django/django/conf/locale/te/__init__.py0
-rw-r--r--parts/django/django/conf/locale/te/formats.py18
-rw-r--r--parts/django/django/conf/locale/th/LC_MESSAGES/django.mobin83394 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/th/LC_MESSAGES/django.po3932
-rw-r--r--parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.mobin2322 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.po117
-rw-r--r--parts/django/django/conf/locale/th/__init__.py0
-rw-r--r--parts/django/django/conf/locale/th/formats.py18
-rw-r--r--parts/django/django/conf/locale/tr/LC_MESSAGES/django.mobin75061 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/tr/LC_MESSAGES/django.po5113
-rw-r--r--parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.mobin1747 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.po123
-rw-r--r--parts/django/django/conf/locale/tr/__init__.py0
-rw-r--r--parts/django/django/conf/locale/tr/formats.py32
-rw-r--r--parts/django/django/conf/locale/uk/LC_MESSAGES/django.mobin87474 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/uk/LC_MESSAGES/django.po4774
-rw-r--r--parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.mobin1892 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.po118
-rw-r--r--parts/django/django/conf/locale/uk/__init__.py0
-rw-r--r--parts/django/django/conf/locale/uk/formats.py18
-rw-r--r--parts/django/django/conf/locale/vi/LC_MESSAGES/django.mobin33952 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/vi/LC_MESSAGES/django.po5058
-rw-r--r--parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.mobin1049 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.po115
-rw-r--r--parts/django/django/conf/locale/vi/__init__.py0
-rw-r--r--parts/django/django/conf/locale/vi/formats.py18
-rw-r--r--parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.mobin61710 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.po4208
-rw-r--r--parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mobin1517 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po105
-rw-r--r--parts/django/django/conf/locale/zh_CN/__init__.py0
-rw-r--r--parts/django/django/conf/locale/zh_CN/formats.py18
-rw-r--r--parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.mobin38115 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.po4147
-rw-r--r--parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mobin358 -> 0 bytes
-rw-r--r--parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po118
-rw-r--r--parts/django/django/conf/locale/zh_TW/__init__.py0
-rw-r--r--parts/django/django/conf/locale/zh_TW/formats.py18
-rw-r--r--parts/django/django/conf/project_template/__init__.py0
-rwxr-xr-xparts/django/django/conf/project_template/manage.py11
-rw-r--r--parts/django/django/conf/project_template/settings.py96
-rw-r--r--parts/django/django/conf/project_template/urls.py16
-rw-r--r--parts/django/django/conf/urls/__init__.py0
-rw-r--r--parts/django/django/conf/urls/defaults.py42
-rw-r--r--parts/django/django/conf/urls/i18n.py5
-rw-r--r--parts/django/django/conf/urls/shortcut.py5
-rw-r--r--parts/django/django/contrib/__init__.py0
-rw-r--r--parts/django/django/contrib/admin/__init__.py36
-rw-r--r--parts/django/django/contrib/admin/actions.py73
-rw-r--r--parts/django/django/contrib/admin/filterspecs.py179
-rw-r--r--parts/django/django/contrib/admin/helpers.py344
-rw-r--r--parts/django/django/contrib/admin/media/css/base.css759
-rw-r--r--parts/django/django/contrib/admin/media/css/changelists.css286
-rw-r--r--parts/django/django/contrib/admin/media/css/dashboard.css24
-rw-r--r--parts/django/django/contrib/admin/media/css/forms.css354
-rw-r--r--parts/django/django/contrib/admin/media/css/ie.css57
-rw-r--r--parts/django/django/contrib/admin/media/css/login.css54
-rw-r--r--parts/django/django/contrib/admin/media/css/rtl.css221
-rw-r--r--parts/django/django/contrib/admin/media/css/widgets.css506
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/arrow-down.gifbin80 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/arrow-up.gifbin838 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/changelist-bg.gifbin58 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/changelist-bg_rtl.gifbin75 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/chooser-bg.gifbin199 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/chooser_stacked-bg.gifbin212 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/default-bg-reverse.gifbin843 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/default-bg.gifbin844 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/deleted-overlay.gifbin45 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon-no.gifbin176 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon-unknown.gifbin130 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon-yes.gifbin299 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_addlink.gifbin119 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_alert.gifbin145 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_calendar.gifbin192 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_changelink.gifbin119 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_clock.gifbin390 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_deletelink.gifbin181 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_error.gifbin319 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_searchbox.pngbin667 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/icon_success.gifbin341 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/inline-delete-8bit.pngbin477 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/inline-delete.pngbin781 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/inline-restore-8bit.pngbin447 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/inline-restore.pngbin623 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/inline-splitter-bg.gifbin102 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/nav-bg-grabber.gifbin116 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/nav-bg-reverse.gifbin186 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/nav-bg.gifbin273 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/selector-add.gifbin606 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/selector-addall.gifbin358 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/selector-remove.gifbin398 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/selector-removeall.gifbin355 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/selector-search.gifbin552 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/selector_stacked-add.gifbin612 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/selector_stacked-remove.gifbin401 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tool-left.gifbin197 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tool-left_over.gifbin203 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tool-right.gifbin198 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tool-right_over.gifbin200 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tooltag-add.gifbin932 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tooltag-add_over.gifbin336 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright.gifbin351 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright_over.gifbin354 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/gis/move_vertex_off.pngbin711 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/img/gis/move_vertex_on.pngbin506 -> 0 bytes
-rw-r--r--parts/django/django/contrib/admin/media/js/LICENSE-JQUERY.txt20
-rw-r--r--parts/django/django/contrib/admin/media/js/SelectBox.js111
-rw-r--r--parts/django/django/contrib/admin/media/js/SelectFilter2.js117
-rw-r--r--parts/django/django/contrib/admin/media/js/actions.js139
-rw-r--r--parts/django/django/contrib/admin/media/js/actions.min.js7
-rw-r--r--parts/django/django/contrib/admin/media/js/admin/DateTimeShortcuts.js274
-rw-r--r--parts/django/django/contrib/admin/media/js/admin/RelatedObjectLookups.js96
-rw-r--r--parts/django/django/contrib/admin/media/js/admin/ordering.js137
-rw-r--r--parts/django/django/contrib/admin/media/js/calendar.js156
-rw-r--r--parts/django/django/contrib/admin/media/js/collapse.js27
-rw-r--r--parts/django/django/contrib/admin/media/js/collapse.min.js2
-rw-r--r--parts/django/django/contrib/admin/media/js/compress.py47
-rw-r--r--parts/django/django/contrib/admin/media/js/core.js221
-rw-r--r--parts/django/django/contrib/admin/media/js/dateparse.js233
-rw-r--r--parts/django/django/contrib/admin/media/js/getElementsBySelector.js167
-rw-r--r--parts/django/django/contrib/admin/media/js/inlines.js148
-rw-r--r--parts/django/django/contrib/admin/media/js/inlines.min.js6
-rw-r--r--parts/django/django/contrib/admin/media/js/jquery.init.js4
-rw-r--r--parts/django/django/contrib/admin/media/js/jquery.js6240
-rw-r--r--parts/django/django/contrib/admin/media/js/jquery.min.js154
-rw-r--r--parts/django/django/contrib/admin/media/js/prepopulate.js34
-rw-r--r--parts/django/django/contrib/admin/media/js/prepopulate.min.js1
-rw-r--r--parts/django/django/contrib/admin/media/js/timeparse.js94
-rw-r--r--parts/django/django/contrib/admin/media/js/urlify.js140
-rw-r--r--parts/django/django/contrib/admin/models.py54
-rw-r--r--parts/django/django/contrib/admin/options.py1306
-rw-r--r--parts/django/django/contrib/admin/sites.py534
-rw-r--r--parts/django/django/contrib/admin/templates/admin/404.html12
-rw-r--r--parts/django/django/contrib/admin/templates/admin/500.html12
-rw-r--r--parts/django/django/contrib/admin/templates/admin/actions.html16
-rw-r--r--parts/django/django/contrib/admin/templates/admin/app_index.html15
-rw-r--r--parts/django/django/contrib/admin/templates/admin/auth/user/add_form.html14
-rw-r--r--parts/django/django/contrib/admin/templates/admin/auth/user/change_password.html54
-rw-r--r--parts/django/django/contrib/admin/templates/admin/base.html82
-rw-r--r--parts/django/django/contrib/admin/templates/admin/base_site.html10
-rw-r--r--parts/django/django/contrib/admin/templates/admin/change_form.html67
-rw-r--r--parts/django/django/contrib/admin/templates/admin/change_list.html102
-rw-r--r--parts/django/django/contrib/admin/templates/admin/change_list_results.html22
-rw-r--r--parts/django/django/contrib/admin/templates/admin/date_hierarchy.html10
-rw-r--r--parts/django/django/contrib/admin/templates/admin/delete_confirmation.html32
-rw-r--r--parts/django/django/contrib/admin/templates/admin/delete_selected_confirmation.html37
-rw-r--r--parts/django/django/contrib/admin/templates/admin/edit_inline/stacked.html82
-rw-r--r--parts/django/django/contrib/admin/templates/admin/edit_inline/tabular.html128
-rw-r--r--parts/django/django/contrib/admin/templates/admin/filter.html8
-rw-r--r--parts/django/django/contrib/admin/templates/admin/includes/fieldset.html29
-rw-r--r--parts/django/django/contrib/admin/templates/admin/index.html80
-rw-r--r--parts/django/django/contrib/admin/templates/admin/invalid_setup.html8
-rw-r--r--parts/django/django/contrib/admin/templates/admin/login.html34
-rw-r--r--parts/django/django/contrib/admin/templates/admin/object_history.html42
-rw-r--r--parts/django/django/contrib/admin/templates/admin/pagination.html12
-rw-r--r--parts/django/django/contrib/admin/templates/admin/prepopulated_fields_js.html23
-rw-r--r--parts/django/django/contrib/admin/templates/admin/search_form.html18
-rw-r--r--parts/django/django/contrib/admin/templates/admin/submit_line.html8
-rw-r--r--parts/django/django/contrib/admin/templates/registration/logged_out.html12
-rw-r--r--parts/django/django/contrib/admin/templates/registration/password_change_done.html14
-rw-r--r--parts/django/django/contrib/admin/templates/registration/password_change_form.html50
-rw-r--r--parts/django/django/contrib/admin/templates/registration/password_reset_complete.html16
-rw-r--r--parts/django/django/contrib/admin/templates/registration/password_reset_confirm.html32
-rw-r--r--parts/django/django/contrib/admin/templates/registration/password_reset_done.html14
-rw-r--r--parts/django/django/contrib/admin/templates/registration/password_reset_email.html15
-rw-r--r--parts/django/django/contrib/admin/templates/registration/password_reset_form.html19
-rw-r--r--parts/django/django/contrib/admin/templatetags/__init__.py0
-rw-r--r--parts/django/django/contrib/admin/templatetags/admin_list.py304
-rw-r--r--parts/django/django/contrib/admin/templatetags/admin_modify.py42
-rw-r--r--parts/django/django/contrib/admin/templatetags/adminmedia.py15
-rw-r--r--parts/django/django/contrib/admin/templatetags/log.py57
-rw-r--r--parts/django/django/contrib/admin/util.py340
-rw-r--r--parts/django/django/contrib/admin/validation.py379
-rw-r--r--parts/django/django/contrib/admin/views/__init__.py0
-rw-r--r--parts/django/django/contrib/admin/views/decorators.py73
-rw-r--r--parts/django/django/contrib/admin/views/main.py251
-rw-r--r--parts/django/django/contrib/admin/widgets.py293
-rw-r--r--parts/django/django/contrib/admindocs/__init__.py0
-rw-r--r--parts/django/django/contrib/admindocs/models.py1
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/bookmarklets.html31
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/index.html28
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/missing_docutils.html16
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/model_detail.html46
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/model_index.html44
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/template_detail.html21
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/template_filter_index.html47
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/template_tag_index.html47
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/view_detail.html25
-rw-r--r--parts/django/django/contrib/admindocs/templates/admin_doc/view_index.html43
-rw-r--r--parts/django/django/contrib/admindocs/tests/__init__.py30
-rw-r--r--parts/django/django/contrib/admindocs/tests/fields.py7
-rw-r--r--parts/django/django/contrib/admindocs/urls.py41
-rw-r--r--parts/django/django/contrib/admindocs/utils.py105
-rw-r--r--parts/django/django/contrib/admindocs/views.py387
-rw-r--r--parts/django/django/contrib/auth/__init__.py105
-rw-r--r--parts/django/django/contrib/auth/admin.py153
-rw-r--r--parts/django/django/contrib/auth/backends.py121
-rw-r--r--parts/django/django/contrib/auth/context_processors.py33
-rw-r--r--parts/django/django/contrib/auth/create_superuser.py8
-rw-r--r--parts/django/django/contrib/auth/decorators.py52
-rw-r--r--parts/django/django/contrib/auth/fixtures/authtestdata.json56
-rw-r--r--parts/django/django/contrib/auth/forms.py214
-rw-r--r--parts/django/django/contrib/auth/handlers/__init__.py0
-rw-r--r--parts/django/django/contrib/auth/handlers/modpython.py56
-rw-r--r--parts/django/django/contrib/auth/management/__init__.py50
-rw-r--r--parts/django/django/contrib/auth/management/commands/__init__.py0
-rw-r--r--parts/django/django/contrib/auth/management/commands/changepassword.py48
-rw-r--r--parts/django/django/contrib/auth/management/commands/createsuperuser.py136
-rw-r--r--parts/django/django/contrib/auth/middleware.py81
-rw-r--r--parts/django/django/contrib/auth/models.py474
-rw-r--r--parts/django/django/contrib/auth/tests/__init__.py12
-rw-r--r--parts/django/django/contrib/auth/tests/auth_backends.py268
-rw-r--r--parts/django/django/contrib/auth/tests/basic.py92
-rw-r--r--parts/django/django/contrib/auth/tests/decorators.py25
-rw-r--r--parts/django/django/contrib/auth/tests/forms.py252
-rw-r--r--parts/django/django/contrib/auth/tests/models.py35
-rw-r--r--parts/django/django/contrib/auth/tests/remote_user.py170
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/logged_out.html1
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/login.html1
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/password_change_form.html1
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/password_reset_complete.html1
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/password_reset_confirm.html5
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/password_reset_done.html1
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/password_reset_email.html1
-rw-r--r--parts/django/django/contrib/auth/tests/templates/registration/password_reset_form.html1
-rw-r--r--parts/django/django/contrib/auth/tests/tokens.py63
-rw-r--r--parts/django/django/contrib/auth/tests/urls.py18
-rw-r--r--parts/django/django/contrib/auth/tests/views.py286
-rw-r--r--parts/django/django/contrib/auth/tokens.py66
-rw-r--r--parts/django/django/contrib/auth/urls.py17
-rw-r--r--parts/django/django/contrib/auth/views.py188
-rw-r--r--parts/django/django/contrib/comments/__init__.py91
-rw-r--r--parts/django/django/contrib/comments/admin.py73
-rw-r--r--parts/django/django/contrib/comments/feeds.py38
-rw-r--r--parts/django/django/contrib/comments/forms.py190
-rw-r--r--parts/django/django/contrib/comments/managers.py22
-rw-r--r--parts/django/django/contrib/comments/models.py191
-rw-r--r--parts/django/django/contrib/comments/moderation.py353
-rw-r--r--parts/django/django/contrib/comments/signals.py21
-rw-r--r--parts/django/django/contrib/comments/templates/comments/400-debug.html53
-rw-r--r--parts/django/django/contrib/comments/templates/comments/approve.html15
-rw-r--r--parts/django/django/contrib/comments/templates/comments/approved.html8
-rw-r--r--parts/django/django/contrib/comments/templates/comments/base.html10
-rw-r--r--parts/django/django/contrib/comments/templates/comments/delete.html15
-rw-r--r--parts/django/django/contrib/comments/templates/comments/deleted.html8
-rw-r--r--parts/django/django/contrib/comments/templates/comments/flag.html15
-rw-r--r--parts/django/django/contrib/comments/templates/comments/flagged.html8
-rw-r--r--parts/django/django/contrib/comments/templates/comments/form.html20
-rw-r--r--parts/django/django/contrib/comments/templates/comments/list.html10
-rw-r--r--parts/django/django/contrib/comments/templates/comments/posted.html8
-rw-r--r--parts/django/django/contrib/comments/templates/comments/preview.html36
-rw-r--r--parts/django/django/contrib/comments/templatetags/__init__.py0
-rw-r--r--parts/django/django/contrib/comments/templatetags/comments.py333
-rw-r--r--parts/django/django/contrib/comments/urls.py16
-rw-r--r--parts/django/django/contrib/comments/views/__init__.py0
-rw-r--r--parts/django/django/contrib/comments/views/comments.py136
-rw-r--r--parts/django/django/contrib/comments/views/moderation.py159
-rw-r--r--parts/django/django/contrib/comments/views/utils.py58
-rw-r--r--parts/django/django/contrib/contenttypes/__init__.py0
-rw-r--r--parts/django/django/contrib/contenttypes/generic.py409
-rw-r--r--parts/django/django/contrib/contenttypes/management.py60
-rw-r--r--parts/django/django/contrib/contenttypes/models.py105
-rw-r--r--parts/django/django/contrib/contenttypes/tests.py69
-rw-r--r--parts/django/django/contrib/contenttypes/views.py71
-rw-r--r--parts/django/django/contrib/csrf/__init__.py0
-rw-r--r--parts/django/django/contrib/csrf/middleware.py7
-rw-r--r--parts/django/django/contrib/databrowse/__init__.py1
-rw-r--r--parts/django/django/contrib/databrowse/datastructures.py215
-rw-r--r--parts/django/django/contrib/databrowse/plugins/__init__.py0
-rw-r--r--parts/django/django/contrib/databrowse/plugins/calendars.py86
-rw-r--r--parts/django/django/contrib/databrowse/plugins/fieldchoices.py74
-rw-r--r--parts/django/django/contrib/databrowse/plugins/objects.py14
-rw-r--r--parts/django/django/contrib/databrowse/sites.py149
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/base.html61
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/base_site.html1
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/calendar_day.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/calendar_homepage.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/calendar_main.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/calendar_month.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/calendar_year.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/choice_detail.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/choice_list.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_detail.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_homepage.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_list.html17
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/homepage.html21
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/model_detail.html19
-rw-r--r--parts/django/django/contrib/databrowse/templates/databrowse/object_detail.html41
-rw-r--r--parts/django/django/contrib/databrowse/urls.py20
-rw-r--r--parts/django/django/contrib/databrowse/views.py19
-rw-r--r--parts/django/django/contrib/flatpages/__init__.py0
-rw-r--r--parts/django/django/contrib/flatpages/admin.py28
-rw-r--r--parts/django/django/contrib/flatpages/fixtures/sample_flatpages.json32
-rw-r--r--parts/django/django/contrib/flatpages/middleware.py18
-rw-r--r--parts/django/django/contrib/flatpages/models.py26
-rw-r--r--parts/django/django/contrib/flatpages/tests/__init__.py3
-rw-r--r--parts/django/django/contrib/flatpages/tests/csrf.py73
-rw-r--r--parts/django/django/contrib/flatpages/tests/middleware.py59
-rw-r--r--parts/django/django/contrib/flatpages/tests/templates/404.html1
-rw-r--r--parts/django/django/contrib/flatpages/tests/templates/flatpages/default.html2
-rw-r--r--parts/django/django/contrib/flatpages/tests/templates/registration/login.html0
-rw-r--r--parts/django/django/contrib/flatpages/tests/urls.py8
-rw-r--r--parts/django/django/contrib/flatpages/tests/views.py53
-rw-r--r--parts/django/django/contrib/flatpages/urls.py5
-rw-r--r--parts/django/django/contrib/flatpages/views.py64
-rw-r--r--parts/django/django/contrib/formtools/__init__.py0
-rw-r--r--parts/django/django/contrib/formtools/models.py1
-rw-r--r--parts/django/django/contrib/formtools/preview.py127
-rw-r--r--parts/django/django/contrib/formtools/templates/formtools/form.html15
-rw-r--r--parts/django/django/contrib/formtools/templates/formtools/preview.html36
-rw-r--r--parts/django/django/contrib/formtools/test_urls.py10
-rw-r--r--parts/django/django/contrib/formtools/tests.py216
-rw-r--r--parts/django/django/contrib/formtools/utils.py39
-rw-r--r--parts/django/django/contrib/formtools/wizard.py262
-rw-r--r--parts/django/django/contrib/gis/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/admin/__init__.py12
-rw-r--r--parts/django/django/contrib/gis/admin/options.py124
-rw-r--r--parts/django/django/contrib/gis/admin/widgets.py107
-rw-r--r--parts/django/django/contrib/gis/db/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/db/backend/__init__.py11
-rw-r--r--parts/django/django/contrib/gis/db/backends/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/db/backends/adapter.py17
-rw-r--r--parts/django/django/contrib/gis/db/backends/base.py336
-rw-r--r--parts/django/django/contrib/gis/db/backends/mysql/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/db/backends/mysql/base.py13
-rw-r--r--parts/django/django/contrib/gis/db/backends/mysql/creation.py18
-rw-r--r--parts/django/django/contrib/gis/db/backends/mysql/introspection.py32
-rw-r--r--parts/django/django/contrib/gis/db/backends/mysql/operations.py65
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/adapter.py5
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/base.py12
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/compiler.py44
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/creation.py42
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/introspection.py39
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/models.py65
-rw-r--r--parts/django/django/contrib/gis/db/backends/oracle/operations.py293
-rw-r--r--parts/django/django/contrib/gis/db/backends/postgis/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/db/backends/postgis/adapter.py35
-rw-r--r--parts/django/django/contrib/gis/db/backends/postgis/base.py12
-rw-r--r--parts/django/django/contrib/gis/db/backends/postgis/creation.py60
-rw-r--r--parts/django/django/contrib/gis/db/backends/postgis/introspection.py95
-rw-r--r--parts/django/django/contrib/gis/db/backends/postgis/models.py66
-rw-r--r--parts/django/django/contrib/gis/db/backends/postgis/operations.py589
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/adapter.py8
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/base.py77
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/client.py5
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/creation.py96
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/introspection.py51
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/models.py60
-rw-r--r--parts/django/django/contrib/gis/db/backends/spatialite/operations.py343
-rw-r--r--parts/django/django/contrib/gis/db/backends/util.py56
-rw-r--r--parts/django/django/contrib/gis/db/models/__init__.py14
-rw-r--r--parts/django/django/contrib/gis/db/models/aggregates.py17
-rw-r--r--parts/django/django/contrib/gis/db/models/fields.py294
-rw-r--r--parts/django/django/contrib/gis/db/models/manager.py103
-rw-r--r--parts/django/django/contrib/gis/db/models/proxy.py64
-rw-r--r--parts/django/django/contrib/gis/db/models/query.py777
-rw-r--r--parts/django/django/contrib/gis/db/models/sql/__init__.py3
-rw-r--r--parts/django/django/contrib/gis/db/models/sql/aggregates.py61
-rw-r--r--parts/django/django/contrib/gis/db/models/sql/compiler.py278
-rw-r--r--parts/django/django/contrib/gis/db/models/sql/conversion.py27
-rw-r--r--parts/django/django/contrib/gis/db/models/sql/query.py119
-rw-r--r--parts/django/django/contrib/gis/db/models/sql/where.py89
-rw-r--r--parts/django/django/contrib/gis/feeds.py135
-rw-r--r--parts/django/django/contrib/gis/forms/__init__.py2
-rw-r--r--parts/django/django/contrib/gis/forms/fields.py67
-rw-r--r--parts/django/django/contrib/gis/gdal/LICENSE28
-rw-r--r--parts/django/django/contrib/gis/gdal/__init__.py54
-rw-r--r--parts/django/django/contrib/gis/gdal/base.py35
-rw-r--r--parts/django/django/contrib/gis/gdal/datasource.py128
-rw-r--r--parts/django/django/contrib/gis/gdal/driver.py65
-rw-r--r--parts/django/django/contrib/gis/gdal/envelope.py175
-rw-r--r--parts/django/django/contrib/gis/gdal/error.py42
-rw-r--r--parts/django/django/contrib/gis/gdal/feature.py110
-rw-r--r--parts/django/django/contrib/gis/gdal/field.py178
-rw-r--r--parts/django/django/contrib/gis/gdal/geometries.py737
-rw-r--r--parts/django/django/contrib/gis/gdal/geomtype.py85
-rw-r--r--parts/django/django/contrib/gis/gdal/layer.py212
-rw-r--r--parts/django/django/contrib/gis/gdal/libgdal.py104
-rw-r--r--parts/django/django/contrib/gis/gdal/prototypes/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/gdal/prototypes/ds.py71
-rw-r--r--parts/django/django/contrib/gis/gdal/prototypes/errcheck.py127
-rw-r--r--parts/django/django/contrib/gis/gdal/prototypes/generation.py119
-rw-r--r--parts/django/django/contrib/gis/gdal/prototypes/geom.py106
-rw-r--r--parts/django/django/contrib/gis/gdal/prototypes/srs.py72
-rw-r--r--parts/django/django/contrib/gis/gdal/srs.py337
-rw-r--r--parts/django/django/contrib/gis/gdal/tests/__init__.py25
-rw-r--r--parts/django/django/contrib/gis/gdal/tests/test_driver.py40
-rw-r--r--parts/django/django/contrib/gis/gdal/tests/test_ds.py226
-rw-r--r--parts/django/django/contrib/gis/gdal/tests/test_envelope.py94
-rw-r--r--parts/django/django/contrib/gis/gdal/tests/test_geom.py490
-rw-r--r--parts/django/django/contrib/gis/gdal/tests/test_srs.py169
-rw-r--r--parts/django/django/contrib/gis/geometry/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/geometry/backend/__init__.py21
-rw-r--r--parts/django/django/contrib/gis/geometry/backend/geos.py3
-rw-r--r--parts/django/django/contrib/gis/geometry/regex.py12
-rw-r--r--parts/django/django/contrib/gis/geometry/test_data.py105
-rw-r--r--parts/django/django/contrib/gis/geos/LICENSE27
-rw-r--r--parts/django/django/contrib/gis/geos/__init__.py14
-rw-r--r--parts/django/django/contrib/gis/geos/base.py52
-rw-r--r--parts/django/django/contrib/gis/geos/collections.py123
-rw-r--r--parts/django/django/contrib/gis/geos/coordseq.py156
-rw-r--r--parts/django/django/contrib/gis/geos/error.py20
-rw-r--r--parts/django/django/contrib/gis/geos/factory.py23
-rw-r--r--parts/django/django/contrib/gis/geos/geometry.py661
-rw-r--r--parts/django/django/contrib/gis/geos/io.py20
-rw-r--r--parts/django/django/contrib/gis/geos/libgeos.py141
-rw-r--r--parts/django/django/contrib/gis/geos/linestring.py152
-rw-r--r--parts/django/django/contrib/gis/geos/mutable_list.py309
-rw-r--r--parts/django/django/contrib/gis/geos/point.py135
-rw-r--r--parts/django/django/contrib/gis/geos/polygon.py166
-rw-r--r--parts/django/django/contrib/gis/geos/prepared.py30
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/__init__.py30
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/coordseq.py83
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/errcheck.py95
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/geom.py119
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/io.py242
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/misc.py28
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/predicates.py44
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/prepared.py25
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/threadsafe.py90
-rw-r--r--parts/django/django/contrib/gis/geos/prototypes/topology.py51
-rw-r--r--parts/django/django/contrib/gis/geos/tests/__init__.py25
-rw-r--r--parts/django/django/contrib/gis/geos/tests/test_geos.py926
-rw-r--r--parts/django/django/contrib/gis/geos/tests/test_geos_mutation.py137
-rw-r--r--parts/django/django/contrib/gis/geos/tests/test_io.py112
-rw-r--r--parts/django/django/contrib/gis/geos/tests/test_mutable_list.py398
-rw-r--r--parts/django/django/contrib/gis/management/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/management/base.py15
-rw-r--r--parts/django/django/contrib/gis/management/commands/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/management/commands/inspectdb.py32
-rw-r--r--parts/django/django/contrib/gis/management/commands/ogrinspect.py122
-rw-r--r--parts/django/django/contrib/gis/maps/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/maps/google/__init__.py61
-rw-r--r--parts/django/django/contrib/gis/maps/google/gmap.py226
-rw-r--r--parts/django/django/contrib/gis/maps/google/overlays.py301
-rw-r--r--parts/django/django/contrib/gis/maps/google/zoom.py161
-rw-r--r--parts/django/django/contrib/gis/maps/openlayers/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/measure.py336
-rw-r--r--parts/django/django/contrib/gis/models.py9
-rw-r--r--parts/django/django/contrib/gis/shortcuts.py32
-rw-r--r--parts/django/django/contrib/gis/sitemaps/__init__.py4
-rw-r--r--parts/django/django/contrib/gis/sitemaps/georss.py53
-rw-r--r--parts/django/django/contrib/gis/sitemaps/kml.py63
-rw-r--r--parts/django/django/contrib/gis/sitemaps/views.py111
-rw-r--r--parts/django/django/contrib/gis/templates/gis/admin/openlayers.html37
-rw-r--r--parts/django/django/contrib/gis/templates/gis/admin/openlayers.js167
-rw-r--r--parts/django/django/contrib/gis/templates/gis/admin/osm.html2
-rw-r--r--parts/django/django/contrib/gis/templates/gis/admin/osm.js2
-rw-r--r--parts/django/django/contrib/gis/templates/gis/google/google-map.html12
-rw-r--r--parts/django/django/contrib/gis/templates/gis/google/google-map.js35
-rw-r--r--parts/django/django/contrib/gis/templates/gis/google/google-multi.js8
-rw-r--r--parts/django/django/contrib/gis/templates/gis/google/google-single.js2
-rw-r--r--parts/django/django/contrib/gis/templates/gis/kml/base.kml6
-rw-r--r--parts/django/django/contrib/gis/templates/gis/kml/placemarks.kml8
-rw-r--r--parts/django/django/contrib/gis/templates/gis/sitemaps/geo_sitemap.xml17
-rw-r--r--parts/django/django/contrib/gis/tests/__init__.py141
-rw-r--r--parts/django/django/contrib/gis/tests/data/cities/cities.dbfbin533 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/cities/cities.prj1
-rw-r--r--parts/django/django/contrib/gis/tests/data/cities/cities.shpbin184 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/cities/cities.shxbin124 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/counties/counties.dbfbin3961 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/counties/counties.shpbin37364 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/counties/counties.shxbin292 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/geometries.json.gzbin9100 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/interstates/interstates.dbfbin412 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/interstates/interstates.prj1
-rw-r--r--parts/django/django/contrib/gis/tests/data/interstates/interstates.shpbin892 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/interstates/interstates.shxbin124 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_point/test_point.dbfbin749 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_point/test_point.prj1
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_point/test_point.shpbin240 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_point/test_point.shxbin140 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_poly/test_poly.dbfbin501 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_poly/test_poly.prj1
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shpbin620 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shxbin124 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.csv4
-rw-r--r--parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.vrt7
-rw-r--r--parts/django/django/contrib/gis/tests/distapp/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/tests/distapp/models.py50
-rw-r--r--parts/django/django/contrib/gis/tests/distapp/tests.py358
-rw-r--r--parts/django/django/contrib/gis/tests/geo3d/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/tests/geo3d/models.py69
-rw-r--r--parts/django/django/contrib/gis/tests/geo3d/tests.py231
-rw-r--r--parts/django/django/contrib/gis/tests/geo3d/views.py1
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/feeds.py63
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/fixtures/initial_data.json.gzbin131252 -> 0 bytes
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/models.py45
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/sitemaps.py8
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/test_feeds.py78
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/test_regress.py37
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/test_sitemaps.py86
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/tests.py735
-rw-r--r--parts/django/django/contrib/gis/tests/geoapp/urls.py14
-rw-r--r--parts/django/django/contrib/gis/tests/geogapp/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/tests/geogapp/fixtures/initial_data.json98
-rw-r--r--parts/django/django/contrib/gis/tests/geogapp/models.py20
-rw-r--r--parts/django/django/contrib/gis/tests/geogapp/tests.py87
-rw-r--r--parts/django/django/contrib/gis/tests/layermap/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/tests/layermap/models.py66
-rw-r--r--parts/django/django/contrib/gis/tests/layermap/tests.py268
-rw-r--r--parts/django/django/contrib/gis/tests/relatedapp/__init__.py0
-rw-r--r--parts/django/django/contrib/gis/tests/relatedapp/models.py49
-rw-r--r--parts/django/django/contrib/gis/tests/relatedapp/tests.py284
-rw-r--r--parts/django/django/contrib/gis/tests/test_geoforms.py65
-rw-r--r--parts/django/django/contrib/gis/tests/test_geoip.py103
-rw-r--r--parts/django/django/contrib/gis/tests/test_measure.py336
-rw-r--r--parts/django/django/contrib/gis/tests/test_spatialrefsys.py113
-rw-r--r--parts/django/django/contrib/gis/tests/utils.py26
-rw-r--r--parts/django/django/contrib/gis/utils/__init__.py25
-rw-r--r--parts/django/django/contrib/gis/utils/geoip.py361
-rw-r--r--parts/django/django/contrib/gis/utils/layermapping.py602
-rw-r--r--parts/django/django/contrib/gis/utils/ogrinfo.py53
-rw-r--r--parts/django/django/contrib/gis/utils/ogrinspect.py225
-rw-r--r--parts/django/django/contrib/gis/utils/srs.py77
-rw-r--r--parts/django/django/contrib/gis/utils/wkt.py55
-rw-r--r--parts/django/django/contrib/humanize/__init__.py0
-rw-r--r--parts/django/django/contrib/humanize/templatetags/__init__.py0
-rw-r--r--parts/django/django/contrib/humanize/templatetags/humanize.py102
-rw-r--r--parts/django/django/contrib/localflavor/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/ar/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/ar/ar_provinces.py36
-rw-r--r--parts/django/django/contrib/localflavor/ar/forms.py115
-rw-r--r--parts/django/django/contrib/localflavor/at/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/at/at_states.py14
-rw-r--r--parts/django/django/contrib/localflavor/at/forms.py69
-rw-r--r--parts/django/django/contrib/localflavor/au/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/au/au_states.py17
-rw-r--r--parts/django/django/contrib/localflavor/au/forms.py50
-rw-r--r--parts/django/django/contrib/localflavor/br/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/br/br_states.py37
-rw-r--r--parts/django/django/contrib/localflavor/br/forms.py163
-rw-r--r--parts/django/django/contrib/localflavor/ca/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/ca/ca_provinces.py59
-rw-r--r--parts/django/django/contrib/localflavor/ca/forms.py134
-rw-r--r--parts/django/django/contrib/localflavor/ch/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/ch/ch_states.py31
-rw-r--r--parts/django/django/contrib/localflavor/ch/forms.py119
-rw-r--r--parts/django/django/contrib/localflavor/cl/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/cl/cl_regions.py25
-rw-r--r--parts/django/django/contrib/localflavor/cl/forms.py95
-rw-r--r--parts/django/django/contrib/localflavor/cz/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/cz/cz_regions.py22
-rw-r--r--parts/django/django/contrib/localflavor/cz/forms.py141
-rw-r--r--parts/django/django/contrib/localflavor/de/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/de/de_states.py21
-rw-r--r--parts/django/django/contrib/localflavor/de/forms.py84
-rw-r--r--parts/django/django/contrib/localflavor/es/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/es/es_provinces.py58
-rw-r--r--parts/django/django/contrib/localflavor/es/es_regions.py23
-rw-r--r--parts/django/django/contrib/localflavor/es/forms.py185
-rw-r--r--parts/django/django/contrib/localflavor/fi/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/fi/fi_municipalities.py353
-rw-r--r--parts/django/django/contrib/localflavor/fi/forms.py51
-rw-r--r--parts/django/django/contrib/localflavor/fr/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/fr/forms.py51
-rw-r--r--parts/django/django/contrib/localflavor/fr/fr_department.py110
-rw-r--r--parts/django/django/contrib/localflavor/generic/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/generic/forms.py48
-rw-r--r--parts/django/django/contrib/localflavor/id/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/id/forms.py211
-rw-r--r--parts/django/django/contrib/localflavor/id/id_choices.py101
-rw-r--r--parts/django/django/contrib/localflavor/ie/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/ie/forms.py13
-rw-r--r--parts/django/django/contrib/localflavor/ie/ie_counties.py40
-rw-r--r--parts/django/django/contrib/localflavor/in_/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/in_/forms.py56
-rw-r--r--parts/django/django/contrib/localflavor/in_/in_states.py84
-rw-r--r--parts/django/django/contrib/localflavor/is_/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/is_/forms.py83
-rw-r--r--parts/django/django/contrib/localflavor/is_/is_postalcodes.py151
-rw-r--r--parts/django/django/contrib/localflavor/it/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/it/forms.py84
-rw-r--r--parts/django/django/contrib/localflavor/it/it_province.py114
-rw-r--r--parts/django/django/contrib/localflavor/it/it_region.py24
-rw-r--r--parts/django/django/contrib/localflavor/it/util.py44
-rw-r--r--parts/django/django/contrib/localflavor/jp/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/jp/forms.py37
-rw-r--r--parts/django/django/contrib/localflavor/jp/jp_prefectures.py51
-rw-r--r--parts/django/django/contrib/localflavor/kw/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/kw/forms.py63
-rw-r--r--parts/django/django/contrib/localflavor/mx/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/mx/forms.py14
-rw-r--r--parts/django/django/contrib/localflavor/mx/mx_states.py45
-rw-r--r--parts/django/django/contrib/localflavor/nl/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/nl/forms.py101
-rw-r--r--parts/django/django/contrib/localflavor/nl/nl_provinces.py16
-rw-r--r--parts/django/django/contrib/localflavor/no/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/no/forms.py82
-rw-r--r--parts/django/django/contrib/localflavor/no/no_municipalities.py32
-rw-r--r--parts/django/django/contrib/localflavor/pe/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/pe/forms.py72
-rw-r--r--parts/django/django/contrib/localflavor/pe/pe_region.py35
-rw-r--r--parts/django/django/contrib/localflavor/pl/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/pl/forms.py160
-rw-r--r--parts/django/django/contrib/localflavor/pl/pl_administrativeunits.py385
-rw-r--r--parts/django/django/contrib/localflavor/pl/pl_voivodeships.py24
-rw-r--r--parts/django/django/contrib/localflavor/pt/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/pt/forms.py48
-rw-r--r--parts/django/django/contrib/localflavor/ro/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/ro/forms.py206
-rw-r--r--parts/django/django/contrib/localflavor/ro/ro_counties.py52
-rw-r--r--parts/django/django/contrib/localflavor/se/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/se/forms.py157
-rw-r--r--parts/django/django/contrib/localflavor/se/se_counties.py36
-rw-r--r--parts/django/django/contrib/localflavor/se/utils.py84
-rw-r--r--parts/django/django/contrib/localflavor/sk/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/sk/forms.py43
-rw-r--r--parts/django/django/contrib/localflavor/sk/sk_districts.py87
-rw-r--r--parts/django/django/contrib/localflavor/sk/sk_regions.py16
-rw-r--r--parts/django/django/contrib/localflavor/uk/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/uk/forms.py53
-rw-r--r--parts/django/django/contrib/localflavor/uk/uk_regions.py97
-rw-r--r--parts/django/django/contrib/localflavor/us/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/us/forms.py113
-rw-r--r--parts/django/django/contrib/localflavor/us/models.py27
-rw-r--r--parts/django/django/contrib/localflavor/us/us_states.py234
-rw-r--r--parts/django/django/contrib/localflavor/uy/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/uy/forms.py60
-rw-r--r--parts/django/django/contrib/localflavor/uy/util.py12
-rw-r--r--parts/django/django/contrib/localflavor/uy/uy_departaments.py24
-rw-r--r--parts/django/django/contrib/localflavor/za/__init__.py0
-rw-r--r--parts/django/django/contrib/localflavor/za/forms.py60
-rw-r--r--parts/django/django/contrib/localflavor/za/za_provinces.py13
-rw-r--r--parts/django/django/contrib/markup/__init__.py0
-rw-r--r--parts/django/django/contrib/markup/models.py0
-rw-r--r--parts/django/django/contrib/markup/templatetags/__init__.py0
-rw-r--r--parts/django/django/contrib/markup/templatetags/markup.py91
-rw-r--r--parts/django/django/contrib/markup/tests.py78
-rw-r--r--parts/django/django/contrib/messages/__init__.py2
-rw-r--r--parts/django/django/contrib/messages/api.py114
-rw-r--r--parts/django/django/contrib/messages/constants.py13
-rw-r--r--parts/django/django/contrib/messages/context_processors.py8
-rw-r--r--parts/django/django/contrib/messages/middleware.py26
-rw-r--r--parts/django/django/contrib/messages/models.py1
-rw-r--r--parts/django/django/contrib/messages/storage/__init__.py31
-rw-r--r--parts/django/django/contrib/messages/storage/base.py181
-rw-r--r--parts/django/django/contrib/messages/storage/cookie.py152
-rw-r--r--parts/django/django/contrib/messages/storage/fallback.py54
-rw-r--r--parts/django/django/contrib/messages/storage/session.py33
-rw-r--r--parts/django/django/contrib/messages/storage/user_messages.py64
-rw-r--r--parts/django/django/contrib/messages/tests/__init__.py6
-rw-r--r--parts/django/django/contrib/messages/tests/base.py402
-rw-r--r--parts/django/django/contrib/messages/tests/cookie.py106
-rw-r--r--parts/django/django/contrib/messages/tests/fallback.py175
-rw-r--r--parts/django/django/contrib/messages/tests/middleware.py18
-rw-r--r--parts/django/django/contrib/messages/tests/session.py38
-rw-r--r--parts/django/django/contrib/messages/tests/urls.py39
-rw-r--r--parts/django/django/contrib/messages/tests/user_messages.py65
-rw-r--r--parts/django/django/contrib/messages/utils.py11
-rw-r--r--parts/django/django/contrib/redirects/__init__.py0
-rw-r--r--parts/django/django/contrib/redirects/admin.py11
-rw-r--r--parts/django/django/contrib/redirects/middleware.py27
-rw-r--r--parts/django/django/contrib/redirects/models.py20
-rw-r--r--parts/django/django/contrib/sessions/__init__.py0
-rw-r--r--parts/django/django/contrib/sessions/backends/__init__.py0
-rw-r--r--parts/django/django/contrib/sessions/backends/base.py287
-rw-r--r--parts/django/django/contrib/sessions/backends/cache.py56
-rw-r--r--parts/django/django/contrib/sessions/backends/cached_db.py42
-rw-r--r--parts/django/django/contrib/sessions/backends/db.py78
-rw-r--r--parts/django/django/contrib/sessions/backends/file.py147
-rw-r--r--parts/django/django/contrib/sessions/middleware.py42
-rw-r--r--parts/django/django/contrib/sessions/models.py67
-rw-r--r--parts/django/django/contrib/sessions/tests.py388
-rw-r--r--parts/django/django/contrib/sitemaps/__init__.py109
-rw-r--r--parts/django/django/contrib/sitemaps/management/__init__.py0
-rw-r--r--parts/django/django/contrib/sitemaps/management/commands/__init__.py0
-rw-r--r--parts/django/django/contrib/sitemaps/management/commands/ping_google.py14
-rw-r--r--parts/django/django/contrib/sitemaps/models.py1
-rw-r--r--parts/django/django/contrib/sitemaps/templates/sitemap.xml13
-rw-r--r--parts/django/django/contrib/sitemaps/templates/sitemap_index.xml4
-rw-r--r--parts/django/django/contrib/sitemaps/tests/__init__.py1
-rw-r--r--parts/django/django/contrib/sitemaps/tests/basic.py126
-rw-r--r--parts/django/django/contrib/sitemaps/tests/urls.py33
-rw-r--r--parts/django/django/contrib/sitemaps/views.py47
-rw-r--r--parts/django/django/contrib/sites/__init__.py0
-rw-r--r--parts/django/django/contrib/sites/admin.py9
-rw-r--r--parts/django/django/contrib/sites/management.py17
-rw-r--r--parts/django/django/contrib/sites/managers.py41
-rw-r--r--parts/django/django/contrib/sites/models.py95
-rw-r--r--parts/django/django/contrib/sites/tests.py56
-rw-r--r--parts/django/django/contrib/syndication/__init__.py0
-rw-r--r--parts/django/django/contrib/syndication/feeds.py38
-rw-r--r--parts/django/django/contrib/syndication/views.py217
-rw-r--r--parts/django/django/contrib/webdesign/__init__.py0
-rw-r--r--parts/django/django/contrib/webdesign/lorem_ipsum.py101
-rw-r--r--parts/django/django/contrib/webdesign/models.py0
-rw-r--r--parts/django/django/contrib/webdesign/templatetags/__init__.py0
-rw-r--r--parts/django/django/contrib/webdesign/templatetags/webdesign.py67
-rw-r--r--parts/django/django/contrib/webdesign/tests.py21
-rw-r--r--parts/django/django/core/__init__.py0
-rw-r--r--parts/django/django/core/cache/__init__.py79
-rw-r--r--parts/django/django/core/cache/backends/__init__.py0
-rw-r--r--parts/django/django/core/cache/backends/base.py144
-rw-r--r--parts/django/django/core/cache/backends/db.py145
-rw-r--r--parts/django/django/core/cache/backends/dummy.py37
-rw-r--r--parts/django/django/core/cache/backends/filebased.py171
-rw-r--r--parts/django/django/core/cache/backends/locmem.py143
-rw-r--r--parts/django/django/core/cache/backends/memcached.py104
-rw-r--r--parts/django/django/core/context_processors.py104
-rw-r--r--parts/django/django/core/exceptions.py87
-rw-r--r--parts/django/django/core/files/__init__.py1
-rw-r--r--parts/django/django/core/files/base.py134
-rw-r--r--parts/django/django/core/files/images.py62
-rw-r--r--parts/django/django/core/files/locks.py70
-rw-r--r--parts/django/django/core/files/move.py88
-rw-r--r--parts/django/django/core/files/storage.py244
-rw-r--r--parts/django/django/core/files/temp.py56
-rw-r--r--parts/django/django/core/files/uploadedfile.py128
-rw-r--r--parts/django/django/core/files/uploadhandler.py215
-rw-r--r--parts/django/django/core/files/utils.py29
-rw-r--r--parts/django/django/core/handlers/__init__.py0
-rw-r--r--parts/django/django/core/handlers/base.py220
-rw-r--r--parts/django/django/core/handlers/modpython.py228
-rw-r--r--parts/django/django/core/handlers/profiler-hotshot.py22
-rw-r--r--parts/django/django/core/handlers/wsgi.py260
-rw-r--r--parts/django/django/core/mail/__init__.py111
-rw-r--r--parts/django/django/core/mail/backends/__init__.py1
-rw-r--r--parts/django/django/core/mail/backends/base.py39
-rw-r--r--parts/django/django/core/mail/backends/console.py37
-rw-r--r--parts/django/django/core/mail/backends/dummy.py9
-rw-r--r--parts/django/django/core/mail/backends/filebased.py59
-rw-r--r--parts/django/django/core/mail/backends/locmem.py24
-rw-r--r--parts/django/django/core/mail/backends/smtp.py112
-rw-r--r--parts/django/django/core/mail/message.py289
-rw-r--r--parts/django/django/core/mail/utils.py19
-rw-r--r--parts/django/django/core/management/__init__.py438
-rw-r--r--parts/django/django/core/management/base.py431
-rw-r--r--parts/django/django/core/management/color.py50
-rw-r--r--parts/django/django/core/management/commands/__init__.py0
-rw-r--r--parts/django/django/core/management/commands/cleanup.py11
-rw-r--r--parts/django/django/core/management/commands/compilemessages.py63
-rw-r--r--parts/django/django/core/management/commands/createcachetable.py53
-rw-r--r--parts/django/django/core/management/commands/dbshell.py28
-rw-r--r--parts/django/django/core/management/commands/diffsettings.py32
-rw-r--r--parts/django/django/core/management/commands/dumpdata.py167
-rw-r--r--parts/django/django/core/management/commands/flush.py83
-rw-r--r--parts/django/django/core/management/commands/inspectdb.py164
-rw-r--r--parts/django/django/core/management/commands/loaddata.py243
-rw-r--r--parts/django/django/core/management/commands/makemessages.py321
-rw-r--r--parts/django/django/core/management/commands/reset.py57
-rw-r--r--parts/django/django/core/management/commands/runfcgi.py20
-rw-r--r--parts/django/django/core/management/commands/runserver.py84
-rw-r--r--parts/django/django/core/management/commands/shell.py69
-rw-r--r--parts/django/django/core/management/commands/sql.py19
-rw-r--r--parts/django/django/core/management/commands/sqlall.py19
-rw-r--r--parts/django/django/core/management/commands/sqlclear.py19
-rw-r--r--parts/django/django/core/management/commands/sqlcustom.py19
-rw-r--r--parts/django/django/core/management/commands/sqlflush.py19
-rw-r--r--parts/django/django/core/management/commands/sqlindexes.py20
-rw-r--r--parts/django/django/core/management/commands/sqlinitialdata.py7
-rw-r--r--parts/django/django/core/management/commands/sqlreset.py20
-rw-r--r--parts/django/django/core/management/commands/sqlsequencereset.py20
-rw-r--r--parts/django/django/core/management/commands/startapp.py47
-rw-r--r--parts/django/django/core/management/commands/startproject.py39
-rw-r--r--parts/django/django/core/management/commands/syncdb.py152
-rw-r--r--parts/django/django/core/management/commands/test.py40
-rw-r--r--parts/django/django/core/management/commands/testserver.py33
-rw-r--r--parts/django/django/core/management/commands/validate.py9
-rw-r--r--parts/django/django/core/management/sql.py182
-rw-r--r--parts/django/django/core/management/validation.py293
-rw-r--r--parts/django/django/core/paginator.py120
-rw-r--r--parts/django/django/core/serializers/__init__.py113
-rw-r--r--parts/django/django/core/serializers/base.py172
-rw-r--r--parts/django/django/core/serializers/json.py65
-rw-r--r--parts/django/django/core/serializers/python.py142
-rw-r--r--parts/django/django/core/serializers/pyyaml.py59
-rw-r--r--parts/django/django/core/serializers/xml_serializer.py297
-rw-r--r--parts/django/django/core/servers/__init__.py0
-rw-r--r--parts/django/django/core/servers/basehttp.py721
-rw-r--r--parts/django/django/core/servers/fastcgi.py183
-rw-r--r--parts/django/django/core/signals.py5
-rw-r--r--parts/django/django/core/template_loader.py7
-rw-r--r--parts/django/django/core/urlresolvers.py396
-rw-r--r--parts/django/django/core/validators.py172
-rw-r--r--parts/django/django/core/xheaders.py24
-rw-r--r--parts/django/django/db/__init__.py103
-rw-r--r--parts/django/django/db/backends/__init__.py592
-rw-r--r--parts/django/django/db/backends/creation.py456
-rw-r--r--parts/django/django/db/backends/dummy/__init__.py0
-rw-r--r--parts/django/django/db/backends/dummy/base.py56
-rw-r--r--parts/django/django/db/backends/mysql/__init__.py0
-rw-r--r--parts/django/django/db/backends/mysql/base.py318
-rw-r--r--parts/django/django/db/backends/mysql/client.py40
-rw-r--r--parts/django/django/db/backends/mysql/compiler.py27
-rw-r--r--parts/django/django/db/backends/mysql/creation.py65
-rw-r--r--parts/django/django/db/backends/mysql/introspection.py98
-rw-r--r--parts/django/django/db/backends/mysql/validation.py26
-rw-r--r--parts/django/django/db/backends/oracle/__init__.py0
-rw-r--r--parts/django/django/db/backends/oracle/base.py711
-rw-r--r--parts/django/django/db/backends/oracle/client.py16
-rw-r--r--parts/django/django/db/backends/oracle/compiler.py66
-rw-r--r--parts/django/django/db/backends/oracle/creation.py257
-rw-r--r--parts/django/django/db/backends/oracle/introspection.py121
-rw-r--r--parts/django/django/db/backends/postgresql/__init__.py0
-rw-r--r--parts/django/django/db/backends/postgresql/base.py179
-rw-r--r--parts/django/django/db/backends/postgresql/client.py23
-rw-r--r--parts/django/django/db/backends/postgresql/creation.py75
-rw-r--r--parts/django/django/db/backends/postgresql/introspection.py88
-rw-r--r--parts/django/django/db/backends/postgresql/operations.py179
-rw-r--r--parts/django/django/db/backends/postgresql/version.py31
-rw-r--r--parts/django/django/db/backends/postgresql_psycopg2/__init__.py0
-rw-r--r--parts/django/django/db/backends/postgresql_psycopg2/base.py198
-rw-r--r--parts/django/django/db/backends/postgresql_psycopg2/introspection.py21
-rw-r--r--parts/django/django/db/backends/signals.py3
-rw-r--r--parts/django/django/db/backends/sqlite3/__init__.py0
-rw-r--r--parts/django/django/db/backends/sqlite3/base.py247
-rw-r--r--parts/django/django/db/backends/sqlite3/client.py16
-rw-r--r--parts/django/django/db/backends/sqlite3/creation.py70
-rw-r--r--parts/django/django/db/backends/sqlite3/introspection.py141
-rw-r--r--parts/django/django/db/backends/util.py128
-rw-r--r--parts/django/django/db/models/__init__.py33
-rw-r--r--parts/django/django/db/models/aggregates.py67
-rw-r--r--parts/django/django/db/models/base.py998
-rw-r--r--parts/django/django/db/models/expressions.py113
-rw-r--r--parts/django/django/db/models/fields/__init__.py1141
-rw-r--r--parts/django/django/db/models/fields/files.py403
-rw-r--r--parts/django/django/db/models/fields/proxy.py17
-rw-r--r--parts/django/django/db/models/fields/related.py1165
-rw-r--r--parts/django/django/db/models/fields/subclassing.py117
-rw-r--r--parts/django/django/db/models/loading.py227
-rw-r--r--parts/django/django/db/models/manager.py216
-rw-r--r--parts/django/django/db/models/options.py485
-rw-r--r--parts/django/django/db/models/query.py1518
-rw-r--r--parts/django/django/db/models/query_utils.py278
-rw-r--r--parts/django/django/db/models/related.py50
-rw-r--r--parts/django/django/db/models/signals.py16
-rw-r--r--parts/django/django/db/models/sql/__init__.py7
-rw-r--r--parts/django/django/db/models/sql/aggregates.py128
-rw-r--r--parts/django/django/db/models/sql/compiler.py979
-rw-r--r--parts/django/django/db/models/sql/constants.py37
-rw-r--r--parts/django/django/db/models/sql/datastructures.py46
-rw-r--r--parts/django/django/db/models/sql/expressions.py87
-rw-r--r--parts/django/django/db/models/sql/query.py1860
-rw-r--r--parts/django/django/db/models/sql/subqueries.py212
-rw-r--r--parts/django/django/db/models/sql/where.py345
-rw-r--r--parts/django/django/db/transaction.py351
-rw-r--r--parts/django/django/db/utils.py170
-rw-r--r--parts/django/django/dispatch/__init__.py9
-rw-r--r--parts/django/django/dispatch/dispatcher.py256
-rw-r--r--parts/django/django/dispatch/license.txt36
-rw-r--r--parts/django/django/dispatch/saferef.py250
-rw-r--r--parts/django/django/forms/__init__.py17
-rw-r--r--parts/django/django/forms/extras/__init__.py1
-rw-r--r--parts/django/django/forms/extras/widgets.py121
-rw-r--r--parts/django/django/forms/fields.py898
-rw-r--r--parts/django/django/forms/forms.py520
-rw-r--r--parts/django/django/forms/formsets.py346
-rw-r--r--parts/django/django/forms/models.py1046
-rw-r--r--parts/django/django/forms/util.py54
-rw-r--r--parts/django/django/forms/widgets.py785
-rw-r--r--parts/django/django/http/__init__.py496
-rw-r--r--parts/django/django/http/multipartparser.py638
-rw-r--r--parts/django/django/http/utils.py84
-rw-r--r--parts/django/django/middleware/__init__.py0
-rw-r--r--parts/django/django/middleware/cache.py156
-rw-r--r--parts/django/django/middleware/common.py147
-rw-r--r--parts/django/django/middleware/csrf.py298
-rw-r--r--parts/django/django/middleware/doc.py19
-rw-r--r--parts/django/django/middleware/gzip.py38
-rw-r--r--parts/django/django/middleware/http.py51
-rw-r--r--parts/django/django/middleware/locale.py25
-rw-r--r--parts/django/django/middleware/transaction.py27
-rw-r--r--parts/django/django/shortcuts/__init__.py104
-rw-r--r--parts/django/django/template/__init__.py1052
-rw-r--r--parts/django/django/template/context.py149
-rw-r--r--parts/django/django/template/debug.py101
-rw-r--r--parts/django/django/template/defaultfilters.py938
-rw-r--r--parts/django/django/template/defaulttags.py1218
-rw-r--r--parts/django/django/template/loader.py198
-rw-r--r--parts/django/django/template/loader_tags.py220
-rw-r--r--parts/django/django/template/loaders/__init__.py0
-rw-r--r--parts/django/django/template/loaders/app_directories.py74
-rw-r--r--parts/django/django/template/loaders/cached.py59
-rw-r--r--parts/django/django/template/loaders/eggs.py39
-rw-r--r--parts/django/django/template/loaders/filesystem.py61
-rw-r--r--parts/django/django/template/smartif.py206
-rw-r--r--parts/django/django/templatetags/__init__.py0
-rw-r--r--parts/django/django/templatetags/cache.py63
-rw-r--r--parts/django/django/templatetags/i18n.py274
-rw-r--r--parts/django/django/test/__init__.py7
-rw-r--r--parts/django/django/test/_doctest.py2693
-rw-r--r--parts/django/django/test/client.py499
-rw-r--r--parts/django/django/test/signals.py3
-rw-r--r--parts/django/django/test/simple.py410
-rw-r--r--parts/django/django/test/testcases.py546
-rw-r--r--parts/django/django/test/utils.py124
-rw-r--r--parts/django/django/utils/__init__.py0
-rw-r--r--parts/django/django/utils/_os.py46
-rw-r--r--parts/django/django/utils/_threading_local.py240
-rw-r--r--parts/django/django/utils/autoreload.py119
-rw-r--r--parts/django/django/utils/cache.py218
-rw-r--r--parts/django/django/utils/checksums.py22
-rw-r--r--parts/django/django/utils/copycompat.py14
-rw-r--r--parts/django/django/utils/daemonize.py58
-rw-r--r--parts/django/django/utils/datastructures.py473
-rw-r--r--parts/django/django/utils/dateformat.py286
-rw-r--r--parts/django/django/utils/dates.py33
-rw-r--r--parts/django/django/utils/datetime_safe.py89
-rw-r--r--parts/django/django/utils/decorators.py90
-rw-r--r--parts/django/django/utils/encoding.py162
-rw-r--r--parts/django/django/utils/feedgenerator.py373
-rw-r--r--parts/django/django/utils/formats.py147
-rw-r--r--parts/django/django/utils/functional.py367
-rw-r--r--parts/django/django/utils/hashcompat.py20
-rw-r--r--parts/django/django/utils/html.py167
-rw-r--r--parts/django/django/utils/http.py124
-rw-r--r--parts/django/django/utils/importlib.py36
-rw-r--r--parts/django/django/utils/itercompat.py45
-rw-r--r--parts/django/django/utils/module_loading.py60
-rw-r--r--parts/django/django/utils/numberformat.py48
-rw-r--r--parts/django/django/utils/regex_helper.py328
-rw-r--r--parts/django/django/utils/safestring.py119
-rw-r--r--parts/django/django/utils/simplejson/LICENSE.txt19
-rw-r--r--parts/django/django/utils/simplejson/__init__.py349
-rw-r--r--parts/django/django/utils/simplejson/decoder.py345
-rw-r--r--parts/django/django/utils/simplejson/encoder.py430
-rw-r--r--parts/django/django/utils/simplejson/scanner.py65
-rw-r--r--parts/django/django/utils/simplejson/tool.py35
-rw-r--r--parts/django/django/utils/stopwords.py42
-rw-r--r--parts/django/django/utils/synch.py87
-rw-r--r--parts/django/django/utils/termcolors.py198
-rw-r--r--parts/django/django/utils/text.py282
-rw-r--r--parts/django/django/utils/thread_support.py12
-rw-r--r--parts/django/django/utils/timesince.py69
-rw-r--r--parts/django/django/utils/translation/__init__.py104
-rw-r--r--parts/django/django/utils/translation/trans_null.py72
-rw-r--r--parts/django/django/utils/translation/trans_real.py550
-rw-r--r--parts/django/django/utils/tree.py153
-rw-r--r--parts/django/django/utils/tzinfo.py77
-rw-r--r--parts/django/django/utils/version.py42
-rw-r--r--parts/django/django/utils/xmlutils.py14
-rw-r--r--parts/django/django/views/__init__.py0
-rw-r--r--parts/django/django/views/csrf.py102
-rw-r--r--parts/django/django/views/debug.py857
-rw-r--r--parts/django/django/views/decorators/__init__.py0
-rw-r--r--parts/django/django/views/decorators/cache.py81
-rw-r--r--parts/django/django/views/decorators/csrf.py64
-rw-r--r--parts/django/django/views/decorators/gzip.py6
-rw-r--r--parts/django/django/views/decorators/http.py143
-rw-r--r--parts/django/django/views/decorators/vary.py41
-rw-r--r--parts/django/django/views/defaults.py43
-rw-r--r--parts/django/django/views/generic/__init__.py3
-rw-r--r--parts/django/django/views/generic/create_update.py215
-rw-r--r--parts/django/django/views/generic/date_based.py368
-rw-r--r--parts/django/django/views/generic/list_detail.py145
-rw-r--r--parts/django/django/views/generic/simple.py41
-rw-r--r--parts/django/django/views/i18n.py264
-rw-r--r--parts/django/django/views/static.py143
-rw-r--r--parts/django/docs/Makefile130
-rw-r--r--parts/django/docs/_ext/applyxrefs.py88
-rw-r--r--parts/django/docs/_ext/djangodocs.py265
-rw-r--r--parts/django/docs/_ext/literals_to_xrefs.py171
-rw-r--r--parts/django/docs/_theme/djangodocs/genindex.html4
-rw-r--r--parts/django/docs/_theme/djangodocs/layout.html124
-rw-r--r--parts/django/docs/_theme/djangodocs/modindex.html3
-rw-r--r--parts/django/docs/_theme/djangodocs/search.html3
-rw-r--r--parts/django/docs/_theme/djangodocs/static/default.css3
-rw-r--r--parts/django/docs/_theme/djangodocs/static/djangodocs.css135
-rw-r--r--parts/django/docs/_theme/djangodocs/static/docicons-behindscenes.pngbin2269 -> 0 bytes
-rw-r--r--parts/django/docs/_theme/djangodocs/static/docicons-note.pngbin1013 -> 0 bytes
-rw-r--r--parts/django/docs/_theme/djangodocs/static/docicons-philosophy.pngbin1523 -> 0 bytes
-rw-r--r--parts/django/docs/_theme/djangodocs/static/homepage.css22
-rw-r--r--parts/django/docs/_theme/djangodocs/static/reset-fonts-grids.css8
-rw-r--r--parts/django/docs/_theme/djangodocs/theme.conf4
-rw-r--r--parts/django/docs/conf.py269
-rw-r--r--parts/django/docs/contents.txt41
-rw-r--r--parts/django/docs/faq/admin.txt96
-rw-r--r--parts/django/docs/faq/contributing.txt102
-rw-r--r--parts/django/docs/faq/general.txt192
-rw-r--r--parts/django/docs/faq/help.txt73
-rw-r--r--parts/django/docs/faq/index.txt14
-rw-r--r--parts/django/docs/faq/install.txt102
-rw-r--r--parts/django/docs/faq/models.txt105
-rw-r--r--parts/django/docs/faq/usage.txt77
-rw-r--r--parts/django/docs/glossary.txt81
-rw-r--r--parts/django/docs/howto/apache-auth.txt120
-rw-r--r--parts/django/docs/howto/auth-remote-user.txt100
-rw-r--r--parts/django/docs/howto/custom-file-storage.txt90
-rw-r--r--parts/django/docs/howto/custom-management-commands.txt253
-rw-r--r--parts/django/docs/howto/custom-model-fields.txt745
-rw-r--r--parts/django/docs/howto/custom-template-tags.txt939
-rw-r--r--parts/django/docs/howto/deployment/fastcgi.txt400
-rw-r--r--parts/django/docs/howto/deployment/index.txt25
-rw-r--r--parts/django/docs/howto/deployment/modpython.txt418
-rw-r--r--parts/django/docs/howto/deployment/modwsgi.txt118
-rw-r--r--parts/django/docs/howto/error-reporting.txt78
-rw-r--r--parts/django/docs/howto/i18n.txt103
-rw-r--r--parts/django/docs/howto/index.txt34
-rw-r--r--parts/django/docs/howto/initial-data.txt142
-rw-r--r--parts/django/docs/howto/jython.txt73
-rw-r--r--parts/django/docs/howto/legacy-databases.txt66
-rw-r--r--parts/django/docs/howto/outputting-csv.txt137
-rw-r--r--parts/django/docs/howto/outputting-pdf.txt160
-rw-r--r--parts/django/docs/howto/static-files.txt162
-rw-r--r--parts/django/docs/index.txt213
-rw-r--r--parts/django/docs/internals/_images/djangotickets.pngbin52003 -> 0 bytes
-rw-r--r--parts/django/docs/internals/committers.txt344
-rw-r--r--parts/django/docs/internals/contributing.txt1294
-rw-r--r--parts/django/docs/internals/deprecation.txt106
-rw-r--r--parts/django/docs/internals/documentation.txt221
-rw-r--r--parts/django/docs/internals/index.txt24
-rw-r--r--parts/django/docs/internals/release-process.txt205
-rw-r--r--parts/django/docs/internals/svn.txt254
-rw-r--r--parts/django/docs/intro/_images/admin01.pngbin18233 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin02.pngbin64260 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin02t.pngbin24726 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin03.pngbin75434 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin03t.pngbin28131 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin04.pngbin57718 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin04t.pngbin22806 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin05.pngbin28875 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin05t.pngbin22754 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin06.pngbin22780 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin06t.pngbin18156 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin07.pngbin19804 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin08.pngbin31552 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin08t.pngbin23883 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin09.pngbin16318 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin10.pngbin10914 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin11.pngbin33563 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin11t.pngbin26365 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin12.pngbin12682 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin13.pngbin22062 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin13t.pngbin18690 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin14.pngbin28987 -> 0 bytes
-rw-r--r--parts/django/docs/intro/_images/admin14t.pngbin23460 -> 0 bytes
-rw-r--r--parts/django/docs/intro/index.txt36
-rw-r--r--parts/django/docs/intro/install.txt84
-rw-r--r--parts/django/docs/intro/overview.txt324
-rw-r--r--parts/django/docs/intro/tutorial01.txt690
-rw-r--r--parts/django/docs/intro/tutorial02.txt465
-rw-r--r--parts/django/docs/intro/tutorial03.txt546
-rw-r--r--parts/django/docs/intro/tutorial04.txt346
-rw-r--r--parts/django/docs/intro/whatsnext.txt231
-rw-r--r--parts/django/docs/man/daily_cleanup.134
-rw-r--r--parts/django/docs/man/django-admin.1226
-rw-r--r--parts/django/docs/man/gather_profile_stats.126
-rw-r--r--parts/django/docs/misc/api-stability.txt152
-rw-r--r--parts/django/docs/misc/design-philosophies.txt314
-rw-r--r--parts/django/docs/misc/distributions.txt36
-rw-r--r--parts/django/docs/misc/index.txt12
-rw-r--r--parts/django/docs/obsolete/_images/formrow.pngbin16601 -> 0 bytes
-rw-r--r--parts/django/docs/obsolete/_images/module.pngbin10072 -> 0 bytes
-rw-r--r--parts/django/docs/obsolete/_images/objecttools_01.pngbin1398 -> 0 bytes
-rw-r--r--parts/django/docs/obsolete/_images/objecttools_02.pngbin2268 -> 0 bytes
-rw-r--r--parts/django/docs/obsolete/admin-css.txt186
-rw-r--r--parts/django/docs/obsolete/index.txt12
-rw-r--r--parts/django/docs/ref/authbackends.txt35
-rw-r--r--parts/django/docs/ref/contrib/admin/_images/article_actions.pngbin38545 -> 0 bytes
-rw-r--r--parts/django/docs/ref/contrib/admin/_images/article_actions_message.pngbin22098 -> 0 bytes
-rw-r--r--parts/django/docs/ref/contrib/admin/_images/flatfiles_admin.pngbin42243 -> 0 bytes
-rw-r--r--parts/django/docs/ref/contrib/admin/_images/user_actions.pngbin27047 -> 0 bytes
-rw-r--r--parts/django/docs/ref/contrib/admin/_images/users_changelist.pngbin59355 -> 0 bytes
-rw-r--r--parts/django/docs/ref/contrib/admin/actions.txt351
-rw-r--r--parts/django/docs/ref/contrib/admin/admindocs.txt161
-rw-r--r--parts/django/docs/ref/contrib/admin/index.txt1613
-rw-r--r--parts/django/docs/ref/contrib/auth.txt4
-rw-r--r--parts/django/docs/ref/contrib/comments/custom.txt202
-rw-r--r--parts/django/docs/ref/contrib/comments/example.txt208
-rw-r--r--parts/django/docs/ref/contrib/comments/forms.txt46
-rw-r--r--parts/django/docs/ref/contrib/comments/index.txt302
-rw-r--r--parts/django/docs/ref/contrib/comments/models.txt80
-rw-r--r--parts/django/docs/ref/contrib/comments/moderation.txt230
-rw-r--r--parts/django/docs/ref/contrib/comments/settings.txt33
-rw-r--r--parts/django/docs/ref/contrib/comments/signals.txt91
-rw-r--r--parts/django/docs/ref/contrib/comments/upgrade.txt78
-rw-r--r--parts/django/docs/ref/contrib/contenttypes.txt385
-rw-r--r--parts/django/docs/ref/contrib/csrf.txt433
-rw-r--r--parts/django/docs/ref/contrib/databrowse.txt90
-rw-r--r--parts/django/docs/ref/contrib/flatpages.txt167
-rw-r--r--parts/django/docs/ref/contrib/formtools/form-preview.txt121
-rw-r--r--parts/django/docs/ref/contrib/formtools/form-wizard.txt312
-rw-r--r--parts/django/docs/ref/contrib/formtools/index.txt10
-rw-r--r--parts/django/docs/ref/contrib/gis/admin.txt72
-rw-r--r--parts/django/docs/ref/contrib/gis/commands.txt83
-rwxr-xr-xparts/django/docs/ref/contrib/gis/create_template_postgis-1.3.sh9
-rwxr-xr-xparts/django/docs/ref/contrib/gis/create_template_postgis-1.4.sh9
-rwxr-xr-xparts/django/docs/ref/contrib/gis/create_template_postgis-1.5.sh10
-rwxr-xr-xparts/django/docs/ref/contrib/gis/create_template_postgis-debian.sh9
-rw-r--r--parts/django/docs/ref/contrib/gis/db-api.txt349
-rw-r--r--parts/django/docs/ref/contrib/gis/deployment.txt99
-rw-r--r--parts/django/docs/ref/contrib/gis/feeds.txt95
-rw-r--r--parts/django/docs/ref/contrib/gis/gdal.txt1114
-rw-r--r--parts/django/docs/ref/contrib/gis/geoip.txt223
-rw-r--r--parts/django/docs/ref/contrib/gis/geoquerysets.txt1256
-rw-r--r--parts/django/docs/ref/contrib/gis/geos.txt911
-rw-r--r--parts/django/docs/ref/contrib/gis/index.txt33
-rw-r--r--parts/django/docs/ref/contrib/gis/install.txt1190
-rw-r--r--parts/django/docs/ref/contrib/gis/layermapping.txt220
-rw-r--r--parts/django/docs/ref/contrib/gis/measure.txt180
-rw-r--r--parts/django/docs/ref/contrib/gis/model-api.txt265
-rw-r--r--parts/django/docs/ref/contrib/gis/ogrinspect.txt21
-rw-r--r--parts/django/docs/ref/contrib/gis/sitemaps.txt27
-rw-r--r--parts/django/docs/ref/contrib/gis/testing.txt268
-rw-r--r--parts/django/docs/ref/contrib/gis/tutorial.txt758
-rw-r--r--parts/django/docs/ref/contrib/gis/utils.txt32
-rw-r--r--parts/django/docs/ref/contrib/humanize.txt100
-rw-r--r--parts/django/docs/ref/contrib/index.txt207
-rw-r--r--parts/django/docs/ref/contrib/localflavor.txt842
-rw-r--r--parts/django/docs/ref/contrib/markup.txt42
-rw-r--r--parts/django/docs/ref/contrib/messages.txt411
-rw-r--r--parts/django/docs/ref/contrib/redirects.txt70
-rw-r--r--parts/django/docs/ref/contrib/sitemaps.txt351
-rw-r--r--parts/django/docs/ref/contrib/sites.txt415
-rw-r--r--parts/django/docs/ref/contrib/syndication.txt949
-rw-r--r--parts/django/docs/ref/contrib/webdesign.txt56
-rw-r--r--parts/django/docs/ref/databases.txt682
-rw-r--r--parts/django/docs/ref/django-admin.txt1293
-rw-r--r--parts/django/docs/ref/exceptions.txt128
-rw-r--r--parts/django/docs/ref/files/file.txt152
-rw-r--r--parts/django/docs/ref/files/index.txt12
-rw-r--r--parts/django/docs/ref/files/storage.txt119
-rw-r--r--parts/django/docs/ref/forms/api.txt791
-rw-r--r--parts/django/docs/ref/forms/fields.txt939
-rw-r--r--parts/django/docs/ref/forms/index.txt13
-rw-r--r--parts/django/docs/ref/forms/validation.txt366
-rw-r--r--parts/django/docs/ref/forms/widgets.txt247
-rw-r--r--parts/django/docs/ref/generic-views.txt1095
-rw-r--r--parts/django/docs/ref/index.txt24
-rw-r--r--parts/django/docs/ref/middleware.txt212
-rw-r--r--parts/django/docs/ref/models/fields.txt1063
-rw-r--r--parts/django/docs/ref/models/index.txt14
-rw-r--r--parts/django/docs/ref/models/instances.txt570
-rw-r--r--parts/django/docs/ref/models/options.txt269
-rw-r--r--parts/django/docs/ref/models/querysets.txt1888
-rw-r--r--parts/django/docs/ref/models/relations.txt105
-rw-r--r--parts/django/docs/ref/request-response.txt646
-rw-r--r--parts/django/docs/ref/settings.txt1836
-rw-r--r--parts/django/docs/ref/signals.txt475
-rw-r--r--parts/django/docs/ref/templates/api.txt815
-rw-r--r--parts/django/docs/ref/templates/builtins.txt2107
-rw-r--r--parts/django/docs/ref/templates/index.txt19
-rw-r--r--parts/django/docs/ref/unicode.txt362
-rw-r--r--parts/django/docs/ref/utils.txt504
-rw-r--r--parts/django/docs/ref/validators.txt158
-rw-r--r--parts/django/docs/releases/0.95.txt124
-rw-r--r--parts/django/docs/releases/0.96.txt264
-rw-r--r--parts/django/docs/releases/1.0-alpha-1.txt161
-rw-r--r--parts/django/docs/releases/1.0-alpha-2.txt136
-rw-r--r--parts/django/docs/releases/1.0-beta-2.txt119
-rw-r--r--parts/django/docs/releases/1.0-beta.txt153
-rw-r--r--parts/django/docs/releases/1.0-porting-guide.txt772
-rw-r--r--parts/django/docs/releases/1.0.1.txt65
-rw-r--r--parts/django/docs/releases/1.0.2.txt51
-rw-r--r--parts/django/docs/releases/1.0.txt246
-rw-r--r--parts/django/docs/releases/1.1-alpha-1.txt163
-rw-r--r--parts/django/docs/releases/1.1-beta-1.txt208
-rw-r--r--parts/django/docs/releases/1.1-rc-1.txt109
-rw-r--r--parts/django/docs/releases/1.1.2.txt56
-rw-r--r--parts/django/docs/releases/1.1.txt463
-rw-r--r--parts/django/docs/releases/1.2-alpha-1.txt578
-rw-r--r--parts/django/docs/releases/1.2-beta-1.txt173
-rw-r--r--parts/django/docs/releases/1.2-rc-1.txt101
-rw-r--r--parts/django/docs/releases/1.2.2.txt29
-rw-r--r--parts/django/docs/releases/1.2.4.txt52
-rw-r--r--parts/django/docs/releases/1.2.txt1139
-rw-r--r--parts/django/docs/releases/index.txt70
-rw-r--r--parts/django/docs/topics/auth.txt1612
-rw-r--r--parts/django/docs/topics/cache.txt917
-rw-r--r--parts/django/docs/topics/conditional-view-processing.txt199
-rw-r--r--parts/django/docs/topics/db/aggregation.txt378
-rw-r--r--parts/django/docs/topics/db/index.txt18
-rw-r--r--parts/django/docs/topics/db/managers.txt376
-rw-r--r--parts/django/docs/topics/db/models.txt1234
-rw-r--r--parts/django/docs/topics/db/multi-db.txt574
-rw-r--r--parts/django/docs/topics/db/optimization.txt260
-rw-r--r--parts/django/docs/topics/db/queries.txt1110
-rw-r--r--parts/django/docs/topics/db/sql.txt279
-rw-r--r--parts/django/docs/topics/db/transactions.txt328
-rw-r--r--parts/django/docs/topics/email.txt618
-rw-r--r--parts/django/docs/topics/files.txt147
-rw-r--r--parts/django/docs/topics/forms/formsets.txt440
-rw-r--r--parts/django/docs/topics/forms/index.txt402
-rw-r--r--parts/django/docs/topics/forms/media.txt309
-rw-r--r--parts/django/docs/topics/forms/modelforms.txt885
-rw-r--r--parts/django/docs/topics/generic-views.txt501
-rw-r--r--parts/django/docs/topics/http/_images/middleware.pngbin56301 -> 0 bytes
-rw-r--r--parts/django/docs/topics/http/file-uploads.txt394
-rw-r--r--parts/django/docs/topics/http/generic-views.txt5
-rw-r--r--parts/django/docs/topics/http/index.txt15
-rw-r--r--parts/django/docs/topics/http/middleware.txt179
-rw-r--r--parts/django/docs/topics/http/sessions.txt529
-rw-r--r--parts/django/docs/topics/http/shortcuts.txt229
-rw-r--r--parts/django/docs/topics/http/urls.txt890
-rw-r--r--parts/django/docs/topics/http/views.txt202
-rw-r--r--parts/django/docs/topics/i18n/deployment.txt191
-rw-r--r--parts/django/docs/topics/i18n/index.txt113
-rw-r--r--parts/django/docs/topics/i18n/internationalization.txt624
-rw-r--r--parts/django/docs/topics/i18n/localization.txt317
-rw-r--r--parts/django/docs/topics/index.txt27
-rw-r--r--parts/django/docs/topics/install.txt298
-rw-r--r--parts/django/docs/topics/pagination.txt281
-rw-r--r--parts/django/docs/topics/serialization.txt402
-rw-r--r--parts/django/docs/topics/settings.txt255
-rw-r--r--parts/django/docs/topics/signals.txt255
-rw-r--r--parts/django/docs/topics/templates.txt617
-rw-r--r--parts/django/docs/topics/testing.txt1613
-rw-r--r--parts/django/extras/README.TXT1
-rw-r--r--parts/django/extras/csrf_migration_helper.py357
-rwxr-xr-xparts/django/extras/django_bash_completion72
-rw-r--r--parts/django/scripts/rpm-install.sh28
-rw-r--r--parts/django/setup.cfg4
-rw-r--r--parts/django/setup.py98
-rw-r--r--parts/django/tests/modeltests/__init__.py0
-rw-r--r--parts/django/tests/modeltests/aggregation/__init__.py0
-rw-r--r--parts/django/tests/modeltests/aggregation/fixtures/initial_data.json243
-rw-r--r--parts/django/tests/modeltests/aggregation/models.py42
-rw-r--r--parts/django/tests/modeltests/aggregation/tests.py565
-rw-r--r--parts/django/tests/modeltests/basic/__init__.py0
-rw-r--r--parts/django/tests/modeltests/basic/models.py17
-rw-r--r--parts/django/tests/modeltests/basic/tests.py562
-rw-r--r--parts/django/tests/modeltests/choices/__init__.py0
-rw-r--r--parts/django/tests/modeltests/choices/models.py24
-rw-r--r--parts/django/tests/modeltests/choices/tests.py23
-rw-r--r--parts/django/tests/modeltests/custom_columns/__init__.py0
-rw-r--r--parts/django/tests/modeltests/custom_columns/models.py40
-rw-r--r--parts/django/tests/modeltests/custom_columns/tests.py71
-rw-r--r--parts/django/tests/modeltests/custom_managers/__init__.py0
-rw-r--r--parts/django/tests/modeltests/custom_managers/models.py59
-rw-r--r--parts/django/tests/modeltests/custom_managers/tests.py71
-rw-r--r--parts/django/tests/modeltests/custom_methods/__init__.py0
-rw-r--r--parts/django/tests/modeltests/custom_methods/models.py36
-rw-r--r--parts/django/tests/modeltests/custom_methods/tests.py42
-rw-r--r--parts/django/tests/modeltests/custom_pk/__init__.py0
-rw-r--r--parts/django/tests/modeltests/custom_pk/fields.py55
-rw-r--r--parts/django/tests/modeltests/custom_pk/models.py42
-rw-r--r--parts/django/tests/modeltests/custom_pk/tests.py183
-rw-r--r--parts/django/tests/modeltests/defer/__init__.py0
-rw-r--r--parts/django/tests/modeltests/defer/models.py24
-rw-r--r--parts/django/tests/modeltests/defer/tests.py137
-rw-r--r--parts/django/tests/modeltests/delete/__init__.py1
-rw-r--r--parts/django/tests/modeltests/delete/models.py42
-rw-r--r--parts/django/tests/modeltests/delete/tests.py135
-rw-r--r--parts/django/tests/modeltests/empty/__init__.py0
-rw-r--r--parts/django/tests/modeltests/empty/models.py12
-rw-r--r--parts/django/tests/modeltests/empty/tests.py15
-rw-r--r--parts/django/tests/modeltests/expressions/__init__.py0
-rw-r--r--parts/django/tests/modeltests/expressions/models.py27
-rw-r--r--parts/django/tests/modeltests/expressions/tests.py218
-rw-r--r--parts/django/tests/modeltests/field_defaults/__init__.py0
-rw-r--r--parts/django/tests/modeltests/field_defaults/models.py21
-rw-r--r--parts/django/tests/modeltests/field_defaults/tests.py16
-rw-r--r--parts/django/tests/modeltests/field_subclassing/__init__.py0
-rw-r--r--parts/django/tests/modeltests/field_subclassing/fields.py74
-rw-r--r--parts/django/tests/modeltests/field_subclassing/models.py22
-rw-r--r--parts/django/tests/modeltests/field_subclassing/tests.py81
-rw-r--r--parts/django/tests/modeltests/files/__init__.py1
-rw-r--r--parts/django/tests/modeltests/files/models.py34
-rw-r--r--parts/django/tests/modeltests/files/tests.py100
-rw-r--r--parts/django/tests/modeltests/fixtures/__init__.py2
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/db_fixture_1.default.json10
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/db_fixture_2.default.json.gzbin175 -> 0 bytes
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/db_fixture_3.nosuchdb.json10
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture1.json34
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture2.json18
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture2.xml11
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture3.xml11
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture4.json.zipbin282 -> 0 bytes
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.gzbin169 -> 0 bytes
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.zipbin295 -> 0 bytes
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture6.json41
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture7.xml27
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture8.json32
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/fixture9.xml48
-rw-r--r--parts/django/tests/modeltests/fixtures/fixtures/initial_data.json10
-rw-r--r--parts/django/tests/modeltests/fixtures/models.py92
-rw-r--r--parts/django/tests/modeltests/fixtures/tests.py277
-rw-r--r--parts/django/tests/modeltests/fixtures_model_package/__init__.py2
-rw-r--r--parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture1.json18
-rw-r--r--parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.json18
-rw-r--r--parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.xml11
-rw-r--r--parts/django/tests/modeltests/fixtures_model_package/fixtures/initial_data.json10
-rw-r--r--parts/django/tests/modeltests/fixtures_model_package/models/__init__.py14
-rw-r--r--parts/django/tests/modeltests/fixtures_model_package/tests.py71
-rw-r--r--parts/django/tests/modeltests/force_insert_update/__init__.py0
-rw-r--r--parts/django/tests/modeltests/force_insert_update/models.py13
-rw-r--r--parts/django/tests/modeltests/force_insert_update/tests.py38
-rw-r--r--parts/django/tests/modeltests/generic_relations/__init__.py0
-rw-r--r--parts/django/tests/modeltests/generic_relations/models.py80
-rw-r--r--parts/django/tests/modeltests/generic_relations/tests.py223
-rw-r--r--parts/django/tests/modeltests/get_latest/__init__.py0
-rw-r--r--parts/django/tests/modeltests/get_latest/models.py30
-rw-r--r--parts/django/tests/modeltests/get_latest/tests.py53
-rw-r--r--parts/django/tests/modeltests/get_object_or_404/__init__.py0
-rw-r--r--parts/django/tests/modeltests/get_object_or_404/models.py34
-rw-r--r--parts/django/tests/modeltests/get_object_or_404/tests.py80
-rw-r--r--parts/django/tests/modeltests/get_or_create/__init__.py0
-rw-r--r--parts/django/tests/modeltests/get_or_create/models.py21
-rw-r--r--parts/django/tests/modeltests/get_or_create/tests.py52
-rw-r--r--parts/django/tests/modeltests/invalid_models/__init__.py1
-rw-r--r--parts/django/tests/modeltests/invalid_models/models.py335
-rw-r--r--parts/django/tests/modeltests/lookup/__init__.py0
-rw-r--r--parts/django/tests/modeltests/lookup/models.py16
-rw-r--r--parts/django/tests/modeltests/lookup/tests.py547
-rw-r--r--parts/django/tests/modeltests/m2m_and_m2o/__init__.py0
-rw-r--r--parts/django/tests/modeltests/m2m_and_m2o/models.py21
-rw-r--r--parts/django/tests/modeltests/m2m_and_m2o/tests.py75
-rw-r--r--parts/django/tests/modeltests/m2m_intermediary/__init__.py0
-rw-r--r--parts/django/tests/modeltests/m2m_intermediary/models.py36
-rw-r--r--parts/django/tests/modeltests/m2m_intermediary/tests.py38
-rw-r--r--parts/django/tests/modeltests/m2m_multiple/__init__.py0
-rw-r--r--parts/django/tests/modeltests/m2m_multiple/models.py30
-rw-r--r--parts/django/tests/modeltests/m2m_multiple/tests.py84
-rw-r--r--parts/django/tests/modeltests/m2m_recursive/__init__.py0
-rw-r--r--parts/django/tests/modeltests/m2m_recursive/models.py28
-rw-r--r--parts/django/tests/modeltests/m2m_recursive/tests.py253
-rw-r--r--parts/django/tests/modeltests/m2m_signals/__init__.py1
-rw-r--r--parts/django/tests/modeltests/m2m_signals/models.py36
-rw-r--r--parts/django/tests/modeltests/m2m_signals/tests.py427
-rw-r--r--parts/django/tests/modeltests/m2m_through/__init__.py2
-rw-r--r--parts/django/tests/modeltests/m2m_through/models.py65
-rw-r--r--parts/django/tests/modeltests/m2m_through/tests.py343
-rw-r--r--parts/django/tests/modeltests/m2o_recursive/__init__.py0
-rw-r--r--parts/django/tests/modeltests/m2o_recursive/models.py28
-rw-r--r--parts/django/tests/modeltests/m2o_recursive/tests.py38
-rw-r--r--parts/django/tests/modeltests/many_to_many/__init__.py0
-rw-r--r--parts/django/tests/modeltests/many_to_many/models.py29
-rw-r--r--parts/django/tests/modeltests/many_to_many/tests.py384
-rw-r--r--parts/django/tests/modeltests/many_to_one/__init__.py0
-rw-r--r--parts/django/tests/modeltests/many_to_one/models.py26
-rw-r--r--parts/django/tests/modeltests/many_to_one/tests.py371
-rw-r--r--parts/django/tests/modeltests/many_to_one_null/__init__.py0
-rw-r--r--parts/django/tests/modeltests/many_to_one_null/models.py24
-rw-r--r--parts/django/tests/modeltests/many_to_one_null/tests.py84
-rw-r--r--parts/django/tests/modeltests/model_forms/__init__.py0
-rw-r--r--parts/django/tests/modeltests/model_forms/mforms.py39
-rw-r--r--parts/django/tests/modeltests/model_forms/models.py1575
-rw-r--r--parts/django/tests/modeltests/model_forms/test.pngbin482 -> 0 bytes
-rw-r--r--parts/django/tests/modeltests/model_forms/test2.pngbin2072 -> 0 bytes
-rw-r--r--parts/django/tests/modeltests/model_forms/tests.py185
-rw-r--r--parts/django/tests/modeltests/model_formsets/__init__.py0
-rw-r--r--parts/django/tests/modeltests/model_formsets/models.py193
-rw-r--r--parts/django/tests/modeltests/model_formsets/tests.py1159
-rw-r--r--parts/django/tests/modeltests/model_inheritance/__init__.py0
-rw-r--r--parts/django/tests/modeltests/model_inheritance/models.py145
-rw-r--r--parts/django/tests/modeltests/model_inheritance/tests.py281
-rw-r--r--parts/django/tests/modeltests/model_inheritance_same_model_name/__init__.py0
-rw-r--r--parts/django/tests/modeltests/model_inheritance_same_model_name/models.py19
-rw-r--r--parts/django/tests/modeltests/model_inheritance_same_model_name/tests.py32
-rw-r--r--parts/django/tests/modeltests/model_package/__init__.py1
-rw-r--r--parts/django/tests/modeltests/model_package/models/__init__.py3
-rw-r--r--parts/django/tests/modeltests/model_package/models/article.py10
-rw-r--r--parts/django/tests/modeltests/model_package/models/publication.py7
-rw-r--r--parts/django/tests/modeltests/model_package/tests.py72
-rw-r--r--parts/django/tests/modeltests/mutually_referential/__init__.py0
-rw-r--r--parts/django/tests/modeltests/mutually_referential/models.py19
-rw-r--r--parts/django/tests/modeltests/mutually_referential/tests.py20
-rw-r--r--parts/django/tests/modeltests/one_to_one/__init__.py0
-rw-r--r--parts/django/tests/modeltests/one_to_one/models.py47
-rw-r--r--parts/django/tests/modeltests/one_to_one/tests.py119
-rw-r--r--parts/django/tests/modeltests/or_lookups/__init__.py0
-rw-r--r--parts/django/tests/modeltests/or_lookups/models.py22
-rw-r--r--parts/django/tests/modeltests/or_lookups/tests.py232
-rw-r--r--parts/django/tests/modeltests/order_with_respect_to/__init__.py0
-rw-r--r--parts/django/tests/modeltests/order_with_respect_to/models.py29
-rw-r--r--parts/django/tests/modeltests/order_with_respect_to/tests.py71
-rw-r--r--parts/django/tests/modeltests/ordering/__init__.py0
-rw-r--r--parts/django/tests/modeltests/ordering/models.py26
-rw-r--r--parts/django/tests/modeltests/ordering/tests.py137
-rw-r--r--parts/django/tests/modeltests/pagination/__init__.py0
-rw-r--r--parts/django/tests/modeltests/pagination/models.py17
-rw-r--r--parts/django/tests/modeltests/pagination/tests.py132
-rw-r--r--parts/django/tests/modeltests/properties/__init__.py0
-rw-r--r--parts/django/tests/modeltests/properties/models.py21
-rw-r--r--parts/django/tests/modeltests/properties/tests.py20
-rw-r--r--parts/django/tests/modeltests/proxy_model_inheritance/__init__.py0
-rw-r--r--parts/django/tests/modeltests/proxy_model_inheritance/app1/__init__.py0
-rw-r--r--parts/django/tests/modeltests/proxy_model_inheritance/app1/models.py5
-rw-r--r--parts/django/tests/modeltests/proxy_model_inheritance/app2/__init__.py0
-rw-r--r--parts/django/tests/modeltests/proxy_model_inheritance/app2/models.py4
-rw-r--r--parts/django/tests/modeltests/proxy_model_inheritance/models.py0
-rw-r--r--parts/django/tests/modeltests/proxy_model_inheritance/tests.py36
-rw-r--r--parts/django/tests/modeltests/proxy_models/__init__.py0
-rw-r--r--parts/django/tests/modeltests/proxy_models/fixtures/mypeople.json9
-rw-r--r--parts/django/tests/modeltests/proxy_models/models.py164
-rw-r--r--parts/django/tests/modeltests/proxy_models/tests.py314
-rw-r--r--parts/django/tests/modeltests/raw_query/__init__.py0
-rw-r--r--parts/django/tests/modeltests/raw_query/fixtures/raw_query_books.json110
-rw-r--r--parts/django/tests/modeltests/raw_query/models.py30
-rw-r--r--parts/django/tests/modeltests/raw_query/tests.py236
-rw-r--r--parts/django/tests/modeltests/reserved_names/__init__.py0
-rw-r--r--parts/django/tests/modeltests/reserved_names/models.py25
-rw-r--r--parts/django/tests/modeltests/reserved_names/tests.py48
-rw-r--r--parts/django/tests/modeltests/reverse_lookup/__init__.py0
-rw-r--r--parts/django/tests/modeltests/reverse_lookup/models.py28
-rw-r--r--parts/django/tests/modeltests/reverse_lookup/tests.py49
-rw-r--r--parts/django/tests/modeltests/save_delete_hooks/__init__.py0
-rw-r--r--parts/django/tests/modeltests/save_delete_hooks/models.py32
-rw-r--r--parts/django/tests/modeltests/save_delete_hooks/tests.py30
-rw-r--r--parts/django/tests/modeltests/select_related/__init__.py0
-rw-r--r--parts/django/tests/modeltests/select_related/models.py59
-rw-r--r--parts/django/tests/modeltests/select_related/tests.py166
-rw-r--r--parts/django/tests/modeltests/serializers/__init__.py0
-rw-r--r--parts/django/tests/modeltests/serializers/models.py117
-rw-r--r--parts/django/tests/modeltests/serializers/tests.py417
-rw-r--r--parts/django/tests/modeltests/signals/__init__.py0
-rw-r--r--parts/django/tests/modeltests/signals/models.py13
-rw-r--r--parts/django/tests/modeltests/signals/tests.py148
-rw-r--r--parts/django/tests/modeltests/str/__init__.py0
-rw-r--r--parts/django/tests/modeltests/str/models.py33
-rw-r--r--parts/django/tests/modeltests/str/tests.py23
-rw-r--r--parts/django/tests/modeltests/test_client/__init__.py0
-rw-r--r--parts/django/tests/modeltests/test_client/fixtures/testdata.json56
-rw-r--r--parts/django/tests/modeltests/test_client/models.py459
-rw-r--r--parts/django/tests/modeltests/test_client/tests.py20
-rw-r--r--parts/django/tests/modeltests/test_client/urls.py29
-rw-r--r--parts/django/tests/modeltests/test_client/views.py214
-rw-r--r--parts/django/tests/modeltests/transactions/__init__.py0
-rw-r--r--parts/django/tests/modeltests/transactions/models.py21
-rw-r--r--parts/django/tests/modeltests/transactions/tests.py155
-rw-r--r--parts/django/tests/modeltests/unmanaged_models/__init__.py2
-rw-r--r--parts/django/tests/modeltests/unmanaged_models/models.py125
-rw-r--r--parts/django/tests/modeltests/unmanaged_models/tests.py58
-rw-r--r--parts/django/tests/modeltests/update/__init__.py0
-rw-r--r--parts/django/tests/modeltests/update/models.py35
-rw-r--r--parts/django/tests/modeltests/update/tests.py116
-rw-r--r--parts/django/tests/modeltests/user_commands/__init__.py0
-rw-r--r--parts/django/tests/modeltests/user_commands/management/__init__.py0
-rw-r--r--parts/django/tests/modeltests/user_commands/management/commands/__init__.py0
-rw-r--r--parts/django/tests/modeltests/user_commands/management/commands/dance.py14
-rw-r--r--parts/django/tests/modeltests/user_commands/models.py14
-rw-r--r--parts/django/tests/modeltests/user_commands/tests.py21
-rw-r--r--parts/django/tests/modeltests/validation/__init__.py21
-rw-r--r--parts/django/tests/modeltests/validation/models.py65
-rw-r--r--parts/django/tests/modeltests/validation/test_custom_messages.py13
-rw-r--r--parts/django/tests/modeltests/validation/test_unique.py85
-rw-r--r--parts/django/tests/modeltests/validation/tests.py114
-rw-r--r--parts/django/tests/modeltests/validation/validators.py18
-rw-r--r--parts/django/tests/modeltests/validators/__init__.py0
-rw-r--r--parts/django/tests/modeltests/validators/models.py0
-rw-r--r--parts/django/tests/modeltests/validators/tests.py159
-rw-r--r--parts/django/tests/regressiontests/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_changelist/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_changelist/models.py9
-rw-r--r--parts/django/tests/regressiontests/admin_changelist/tests.py103
-rw-r--r--parts/django/tests/regressiontests/admin_inlines/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_inlines/fixtures/admin-views-users.xml17
-rw-r--r--parts/django/tests/regressiontests/admin_inlines/models.py125
-rw-r--r--parts/django/tests/regressiontests/admin_inlines/tests.py121
-rw-r--r--parts/django/tests/regressiontests/admin_ordering/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_ordering/models.py10
-rw-r--r--parts/django/tests/regressiontests/admin_ordering/tests.py39
-rw-r--r--parts/django/tests/regressiontests/admin_registration/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_registration/models.py11
-rw-r--r--parts/django/tests/regressiontests/admin_registration/tests.py54
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/app_with_import/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/app_with_import/models.py7
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/broken_app/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/broken_app/models.py1
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/complex_app/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/complex_app/admin/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/complex_app/admin/foo.py3
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/complex_app/models/__init__.py4
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/complex_app/models/bar.py7
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/complex_app/models/foo.py6
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/management/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/management/commands/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/management/commands/app_command.py10
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/management/commands/base_command.py15
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/management/commands/label_command.py9
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/management/commands/noargs_command.py9
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/models.py12
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/simple_app/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/simple_app/models.py1
-rw-r--r--parts/django/tests/regressiontests/admin_scripts/tests.py1199
-rw-r--r--parts/django/tests/regressiontests/admin_util/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_util/models.py33
-rw-r--r--parts/django/tests/regressiontests/admin_util/tests.py239
-rw-r--r--parts/django/tests/regressiontests/admin_validation/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_validation/models.py47
-rw-r--r--parts/django/tests/regressiontests/admin_validation/tests.py247
-rw-r--r--parts/django/tests/regressiontests/admin_views/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_views/customadmin.py34
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/admin-views-actions.xml15
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml19
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml12
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/admin-views-person.xml18
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/admin-views-unicode.xml63
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/admin-views-users.xml93
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/deleted-objects.xml53
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/multiple-child-classes.json107
-rw-r--r--parts/django/tests/regressiontests/admin_views/fixtures/string-primary-key.xml6
-rw-r--r--parts/django/tests/regressiontests/admin_views/models.py636
-rw-r--r--parts/django/tests/regressiontests/admin_views/tests.py2287
-rw-r--r--parts/django/tests/regressiontests/admin_views/urls.py11
-rw-r--r--parts/django/tests/regressiontests/admin_views/views.py6
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml43
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/models.py68
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/tests.py316
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/urls.py7
-rw-r--r--parts/django/tests/regressiontests/admin_widgets/widgetadmin.py30
-rw-r--r--parts/django/tests/regressiontests/aggregation_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/aggregation_regress/fixtures/initial_data.json257
-rw-r--r--parts/django/tests/regressiontests/aggregation_regress/models.py65
-rw-r--r--parts/django/tests/regressiontests/aggregation_regress/tests.py757
-rw-r--r--parts/django/tests/regressiontests/app_loading/__init__.py0
-rwxr-xr-xparts/django/tests/regressiontests/app_loading/eggs/brokenapp.eggbin1605 -> 0 bytes
-rwxr-xr-xparts/django/tests/regressiontests/app_loading/eggs/modelapp.eggbin3347 -> 0 bytes
-rwxr-xr-xparts/django/tests/regressiontests/app_loading/eggs/nomodelapp.eggbin1211 -> 0 bytes
-rwxr-xr-xparts/django/tests/regressiontests/app_loading/eggs/omelet.eggbin9020 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/app_loading/models.py0
-rw-r--r--parts/django/tests/regressiontests/app_loading/parent/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/app_loading/parent/app/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/app_loading/parent/app1/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/app_loading/parent/app_2/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/app_loading/test_settings.py3
-rw-r--r--parts/django/tests/regressiontests/app_loading/tests.py83
-rw-r--r--parts/django/tests/regressiontests/backends/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/backends/models.py37
-rw-r--r--parts/django/tests/regressiontests/backends/tests.py208
-rw-r--r--parts/django/tests/regressiontests/bash_completion/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/bash_completion/management/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/bash_completion/management/commands/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/bash_completion/management/commands/test_command.py14
-rw-r--r--parts/django/tests/regressiontests/bash_completion/models.py1
-rw-r--r--parts/django/tests/regressiontests/bash_completion/tests.py87
-rw-r--r--parts/django/tests/regressiontests/bug639/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/bug639/models.py26
-rw-r--r--parts/django/tests/regressiontests/bug639/test.jpgbin1780 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/bug639/tests.py41
-rw-r--r--parts/django/tests/regressiontests/bug8245/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/bug8245/admin.py7
-rw-r--r--parts/django/tests/regressiontests/bug8245/models.py4
-rw-r--r--parts/django/tests/regressiontests/bug8245/tests.py29
-rw-r--r--parts/django/tests/regressiontests/builtin_server/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/builtin_server/models.py0
-rw-r--r--parts/django/tests/regressiontests/builtin_server/tests.py51
-rw-r--r--parts/django/tests/regressiontests/cache/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/cache/liberal_backend.py9
-rw-r--r--parts/django/tests/regressiontests/cache/models.py11
-rw-r--r--parts/django/tests/regressiontests/cache/tests.py652
-rw-r--r--parts/django/tests/regressiontests/comment_tests/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/comment_tests/custom_comments/__init__.py32
-rw-r--r--parts/django/tests/regressiontests/comment_tests/custom_comments/forms.py4
-rw-r--r--parts/django/tests/regressiontests/comment_tests/custom_comments/models.py4
-rw-r--r--parts/django/tests/regressiontests/comment_tests/custom_comments/views.py13
-rw-r--r--parts/django/tests/regressiontests/comment_tests/fixtures/comment_tests.json53
-rw-r--r--parts/django/tests/regressiontests/comment_tests/fixtures/comment_utils.xml15
-rw-r--r--parts/django/tests/regressiontests/comment_tests/models.py34
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/__init__.py89
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/app_api_tests.py71
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/comment_form_tests.py84
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py75
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/comment_view_tests.py258
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/model_tests.py49
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/moderation_view_tests.py203
-rw-r--r--parts/django/tests/regressiontests/comment_tests/tests/templatetag_tests.py97
-rw-r--r--parts/django/tests/regressiontests/comment_tests/urls.py9
-rw-r--r--parts/django/tests/regressiontests/comment_tests/urls_admin.py19
-rw-r--r--parts/django/tests/regressiontests/conditional_processing/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/conditional_processing/models.py128
-rw-r--r--parts/django/tests/regressiontests/conditional_processing/urls.py10
-rw-r--r--parts/django/tests/regressiontests/conditional_processing/views.py26
-rw-r--r--parts/django/tests/regressiontests/context_processors/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/context_processors/fixtures/context-processors-users.xml17
-rw-r--r--parts/django/tests/regressiontests/context_processors/models.py1
-rw-r--r--parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html1
-rw-r--r--parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html1
-rw-r--r--parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html1
-rw-r--r--parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html1
-rw-r--r--parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html1
-rw-r--r--parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html4
-rw-r--r--parts/django/tests/regressiontests/context_processors/templates/context_processors/request_attrs.html13
-rw-r--r--parts/django/tests/regressiontests/context_processors/tests.py112
-rw-r--r--parts/django/tests/regressiontests/context_processors/urls.py14
-rw-r--r--parts/django/tests/regressiontests/context_processors/views.py37
-rw-r--r--parts/django/tests/regressiontests/csrf_tests/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/csrf_tests/models.py1
-rw-r--r--parts/django/tests/regressiontests/csrf_tests/tests.py375
-rw-r--r--parts/django/tests/regressiontests/custom_columns_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/custom_columns_regress/models.py36
-rw-r--r--parts/django/tests/regressiontests/custom_columns_regress/tests.py84
-rw-r--r--parts/django/tests/regressiontests/custom_managers_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/custom_managers_regress/models.py40
-rw-r--r--parts/django/tests/regressiontests/custom_managers_regress/tests.py47
-rw-r--r--parts/django/tests/regressiontests/datatypes/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/datatypes/models.py25
-rw-r--r--parts/django/tests/regressiontests/datatypes/tests.py93
-rw-r--r--parts/django/tests/regressiontests/db_typecasts/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/db_typecasts/models.py0
-rw-r--r--parts/django/tests/regressiontests/db_typecasts/tests.py62
-rw-r--r--parts/django/tests/regressiontests/decorators/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/decorators/models.py2
-rw-r--r--parts/django/tests/regressiontests/decorators/tests.py141
-rw-r--r--parts/django/tests/regressiontests/defaultfilters/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/defaultfilters/models.py0
-rw-r--r--parts/django/tests/regressiontests/defaultfilters/tests.py485
-rw-r--r--parts/django/tests/regressiontests/defer_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/defer_regress/models.py36
-rw-r--r--parts/django/tests/regressiontests/defer_regress/tests.py163
-rw-r--r--parts/django/tests/regressiontests/delete_regress/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/delete_regress/models.py37
-rw-r--r--parts/django/tests/regressiontests/delete_regress/tests.py116
-rw-r--r--parts/django/tests/regressiontests/dispatch/__init__.py2
-rw-r--r--parts/django/tests/regressiontests/dispatch/models.py0
-rw-r--r--parts/django/tests/regressiontests/dispatch/tests/__init__.py6
-rw-r--r--parts/django/tests/regressiontests/dispatch/tests/test_dispatcher.py123
-rw-r--r--parts/django/tests/regressiontests/dispatch/tests/test_saferef.py79
-rw-r--r--parts/django/tests/regressiontests/expressions_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/expressions_regress/models.py12
-rw-r--r--parts/django/tests/regressiontests/expressions_regress/tests.py195
-rw-r--r--parts/django/tests/regressiontests/extra_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/extra_regress/models.py40
-rw-r--r--parts/django/tests/regressiontests/extra_regress/tests.py314
-rw-r--r--parts/django/tests/regressiontests/file_storage/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/file_storage/models.py0
-rw-r--r--parts/django/tests/regressiontests/file_storage/test.pngbin482 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/file_storage/test1.pngbin480 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/file_storage/tests.py382
-rw-r--r--parts/django/tests/regressiontests/file_uploads/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/file_uploads/models.py10
-rw-r--r--parts/django/tests/regressiontests/file_uploads/tests.py305
-rw-r--r--parts/django/tests/regressiontests/file_uploads/uploadhandler.py34
-rw-r--r--parts/django/tests/regressiontests/file_uploads/urls.py13
-rw-r--r--parts/django/tests/regressiontests/file_uploads/views.py114
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/absolute.json9
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/animal.xml9
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture1.unkn1
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture2.xml7
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/big-fixture.json83
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/empty.json1
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/forward_ref_lookup.json32
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/model-inheritance.json4
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance.json18
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance2.xml23
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_1.json25
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_2.xml16
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/pretty.xml11
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/sequence.json12
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/fixtures/thingy.json9
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/models.py225
-rw-r--r--parts/django/tests/regressiontests/fixtures_regress/tests.py611
-rw-r--r--parts/django/tests/regressiontests/forms/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/ar.py99
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/at.py45
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/au.py50
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/br.py144
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/ca.py95
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/ch.py75
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/cl.py56
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/cz.py126
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/de.py49
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/es.py172
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/fi.py382
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/fr.py145
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/generic.py88
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/id.py181
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/ie.py43
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/is_.py199
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/it.py70
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/jp.py73
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/kw.py16
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/nl.py62
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/pl.py462
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/pt.py32
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/ro.py142
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/se.py331
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/sk.py116
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/uk.py30
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/us.py126
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/utils.py51
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/uy.py52
-rw-r--r--parts/django/tests/regressiontests/forms/localflavor/za.py29
-rw-r--r--parts/django/tests/regressiontests/forms/localflavortests.py37
-rw-r--r--parts/django/tests/regressiontests/forms/models.py74
-rw-r--r--parts/django/tests/regressiontests/forms/tests/__init__.py43
-rw-r--r--parts/django/tests/regressiontests/forms/tests/error_messages.py253
-rw-r--r--parts/django/tests/regressiontests/forms/tests/extra.py610
-rw-r--r--parts/django/tests/regressiontests/forms/tests/fields.py862
-rw-r--r--parts/django/tests/regressiontests/forms/tests/forms.py1700
-rw-r--r--parts/django/tests/regressiontests/forms/tests/formsets.py763
-rw-r--r--parts/django/tests/regressiontests/forms/tests/input_formats.py894
-rw-r--r--parts/django/tests/regressiontests/forms/tests/media.py460
-rw-r--r--parts/django/tests/regressiontests/forms/tests/models.py169
-rw-r--r--parts/django/tests/regressiontests/forms/tests/regressions.py145
-rw-r--r--parts/django/tests/regressiontests/forms/tests/util.py57
-rw-r--r--parts/django/tests/regressiontests/forms/tests/validators.py17
-rw-r--r--parts/django/tests/regressiontests/forms/tests/widgets.py1070
-rw-r--r--parts/django/tests/regressiontests/formwizard/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/formwizard/forms.py18
-rw-r--r--parts/django/tests/regressiontests/formwizard/models.py0
-rw-r--r--parts/django/tests/regressiontests/formwizard/templates/forms/wizard.html13
-rw-r--r--parts/django/tests/regressiontests/formwizard/tests.py59
-rw-r--r--parts/django/tests/regressiontests/formwizard/urls.py6
-rw-r--r--parts/django/tests/regressiontests/generic_inline_admin/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/generic_inline_admin/fixtures/users.xml17
-rw-r--r--parts/django/tests/regressiontests/generic_inline_admin/models.py108
-rw-r--r--parts/django/tests/regressiontests/generic_inline_admin/tests.py214
-rw-r--r--parts/django/tests/regressiontests/generic_inline_admin/urls.py6
-rw-r--r--parts/django/tests/regressiontests/generic_relations_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/generic_relations_regress/models.py79
-rw-r--r--parts/django/tests/regressiontests/generic_relations_regress/tests.py74
-rw-r--r--parts/django/tests/regressiontests/get_or_create_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/get_or_create_regress/models.py13
-rw-r--r--parts/django/tests/regressiontests/get_or_create_regress/tests.py53
-rw-r--r--parts/django/tests/regressiontests/httpwrappers/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/httpwrappers/models.py0
-rw-r--r--parts/django/tests/regressiontests/httpwrappers/tests.py266
-rw-r--r--parts/django/tests/regressiontests/humanize/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/humanize/models.py0
-rw-r--r--parts/django/tests/regressiontests/humanize/tests.py76
-rw-r--r--parts/django/tests/regressiontests/i18n/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/i18n/forms.py22
-rw-r--r--parts/django/tests/regressiontests/i18n/models.py12
-rw-r--r--parts/django/tests/regressiontests/i18n/other/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/i18n/other/locale/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mobin469 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po22
-rw-r--r--parts/django/tests/regressiontests/i18n/other/locale/de/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/i18n/other/locale/de/formats.py0
-rw-r--r--parts/django/tests/regressiontests/i18n/resolution/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.mobin460 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po22
-rw-r--r--parts/django/tests/regressiontests/i18n/resolution/models.py1
-rw-r--r--parts/django/tests/regressiontests/i18n/tests.py667
-rw-r--r--parts/django/tests/regressiontests/initial_sql_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/initial_sql_regress/models.py11
-rw-r--r--parts/django/tests/regressiontests/initial_sql_regress/sql/simple.sql8
-rw-r--r--parts/django/tests/regressiontests/initial_sql_regress/tests.py8
-rw-r--r--parts/django/tests/regressiontests/inline_formsets/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/inline_formsets/models.py28
-rw-r--r--parts/django/tests/regressiontests/inline_formsets/tests.py163
-rw-r--r--parts/django/tests/regressiontests/introspection/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/introspection/models.py21
-rw-r--r--parts/django/tests/regressiontests/introspection/tests.py111
-rw-r--r--parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.mobin464 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.po22
-rw-r--r--parts/django/tests/regressiontests/localflavor/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/localflavor/models.py0
-rw-r--r--parts/django/tests/regressiontests/localflavor/tests.py5
-rw-r--r--parts/django/tests/regressiontests/localflavor/us/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/localflavor/us/forms.py7
-rw-r--r--parts/django/tests/regressiontests/localflavor/us/models.py13
-rw-r--r--parts/django/tests/regressiontests/localflavor/us/tests.py82
-rw-r--r--parts/django/tests/regressiontests/m2m_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/m2m_regress/models.py58
-rw-r--r--parts/django/tests/regressiontests/m2m_regress/tests.py82
-rw-r--r--parts/django/tests/regressiontests/m2m_through_regress/__init__.py2
-rw-r--r--parts/django/tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json34
-rw-r--r--parts/django/tests/regressiontests/m2m_through_regress/models.py55
-rw-r--r--parts/django/tests/regressiontests/m2m_through_regress/tests.py128
-rw-r--r--parts/django/tests/regressiontests/mail/__init__.py2
-rw-r--r--parts/django/tests/regressiontests/mail/custombackend.py15
-rw-r--r--parts/django/tests/regressiontests/mail/models.py1
-rw-r--r--parts/django/tests/regressiontests/mail/tests.py375
-rw-r--r--parts/django/tests/regressiontests/makemessages/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/makemessages/extraction.py109
-rw-r--r--parts/django/tests/regressiontests/makemessages/ignore_dir/ignored.html2
-rw-r--r--parts/django/tests/regressiontests/makemessages/javascript.js4
-rw-r--r--parts/django/tests/regressiontests/makemessages/locale/dummy0
-rw-r--r--parts/django/tests/regressiontests/makemessages/models.py0
-rw-r--r--parts/django/tests/regressiontests/makemessages/templates/test.html4
-rw-r--r--parts/django/tests/regressiontests/makemessages/tests.py40
-rw-r--r--parts/django/tests/regressiontests/managers_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/managers_regress/models.py100
-rw-r--r--parts/django/tests/regressiontests/managers_regress/tests.py54
-rw-r--r--parts/django/tests/regressiontests/many_to_one_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/many_to_one_regress/models.py46
-rw-r--r--parts/django/tests/regressiontests/many_to_one_regress/tests.py105
-rw-r--r--parts/django/tests/regressiontests/max_lengths/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/max_lengths/models.py13
-rw-r--r--parts/django/tests/regressiontests/max_lengths/tests.py36
-rw-r--r--parts/django/tests/regressiontests/middleware/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/middleware/extra_urls.py7
-rw-r--r--parts/django/tests/regressiontests/middleware/models.py1
-rw-r--r--parts/django/tests/regressiontests/middleware/tests.py249
-rw-r--r--parts/django/tests/regressiontests/middleware/urls.py7
-rw-r--r--parts/django/tests/regressiontests/middleware_exceptions/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/middleware_exceptions/models.py1
-rw-r--r--parts/django/tests/regressiontests/middleware_exceptions/tests.py40
-rw-r--r--parts/django/tests/regressiontests/middleware_exceptions/urls.py8
-rw-r--r--parts/django/tests/regressiontests/middleware_exceptions/views.py4
-rw-r--r--parts/django/tests/regressiontests/model_fields/4x8.pngbin87 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/model_fields/8x4.pngbin87 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/model_fields/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/model_fields/imagefield.py420
-rw-r--r--parts/django/tests/regressiontests/model_fields/models.py154
-rw-r--r--parts/django/tests/regressiontests/model_fields/tests.py313
-rw-r--r--parts/django/tests/regressiontests/model_forms_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/model_forms_regress/models.py59
-rw-r--r--parts/django/tests/regressiontests/model_forms_regress/tests.py311
-rw-r--r--parts/django/tests/regressiontests/model_formsets_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/model_formsets_regress/models.py19
-rw-r--r--parts/django/tests/regressiontests/model_formsets_regress/tests.py218
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_regress/models.py148
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_regress/tests.py388
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_select_related/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_select_related/models.py29
-rw-r--r--parts/django/tests/regressiontests/model_inheritance_select_related/tests.py29
-rw-r--r--parts/django/tests/regressiontests/model_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/model_regress/models.py59
-rw-r--r--parts/django/tests/regressiontests/model_regress/tests.py175
-rw-r--r--parts/django/tests/regressiontests/modeladmin/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/modeladmin/models.py36
-rw-r--r--parts/django/tests/regressiontests/modeladmin/tests.py1226
-rw-r--r--parts/django/tests/regressiontests/multiple_database/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/multiple_database/fixtures/multidb-common.json10
-rw-r--r--parts/django/tests/regressiontests/multiple_database/fixtures/multidb.default.json26
-rw-r--r--parts/django/tests/regressiontests/multiple_database/fixtures/multidb.other.json26
-rw-r--r--parts/django/tests/regressiontests/multiple_database/fixtures/pets.json18
-rw-r--r--parts/django/tests/regressiontests/multiple_database/models.py76
-rw-r--r--parts/django/tests/regressiontests/multiple_database/tests.py1681
-rw-r--r--parts/django/tests/regressiontests/null_fk/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/null_fk/models.py33
-rw-r--r--parts/django/tests/regressiontests/null_fk/tests.py42
-rw-r--r--parts/django/tests/regressiontests/null_fk_ordering/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/null_fk_ordering/models.py49
-rw-r--r--parts/django/tests/regressiontests/null_fk_ordering/tests.py39
-rw-r--r--parts/django/tests/regressiontests/null_queries/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/null_queries/models.py25
-rw-r--r--parts/django/tests/regressiontests/null_queries/tests.py69
-rw-r--r--parts/django/tests/regressiontests/one_to_one_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/one_to_one_regress/models.py43
-rw-r--r--parts/django/tests/regressiontests/one_to_one_regress/tests.py130
-rw-r--r--parts/django/tests/regressiontests/pagination_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/pagination_regress/models.py1
-rw-r--r--parts/django/tests/regressiontests/pagination_regress/tests.py157
-rw-r--r--parts/django/tests/regressiontests/queries/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/queries/models.py276
-rw-r--r--parts/django/tests/regressiontests/queries/tests.py1586
-rw-r--r--parts/django/tests/regressiontests/queryset_pickle/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/queryset_pickle/models.py34
-rw-r--r--parts/django/tests/regressiontests/queryset_pickle/tests.py36
-rw-r--r--parts/django/tests/regressiontests/requests/__init__.py3
-rw-r--r--parts/django/tests/regressiontests/requests/models.py1
-rw-r--r--parts/django/tests/regressiontests/requests/tests.py59
-rw-r--r--parts/django/tests/regressiontests/reverse_single_related/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/reverse_single_related/models.py12
-rw-r--r--parts/django/tests/regressiontests/reverse_single_related/tests.py36
-rw-r--r--parts/django/tests/regressiontests/select_related_onetoone/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/select_related_onetoone/models.py54
-rw-r--r--parts/django/tests/regressiontests/select_related_onetoone/tests.py94
-rw-r--r--parts/django/tests/regressiontests/select_related_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/select_related_regress/models.py86
-rw-r--r--parts/django/tests/regressiontests/select_related_regress/tests.py134
-rw-r--r--parts/django/tests/regressiontests/serializers_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/serializers_regress/models.py266
-rw-r--r--parts/django/tests/regressiontests/serializers_regress/tests.py421
-rw-r--r--parts/django/tests/regressiontests/servers/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/servers/models.py0
-rw-r--r--parts/django/tests/regressiontests/servers/tests.py68
-rw-r--r--parts/django/tests/regressiontests/settings_tests/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/settings_tests/models.py0
-rw-r--r--parts/django/tests/regressiontests/settings_tests/tests.py17
-rw-r--r--parts/django/tests/regressiontests/signals_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/signals_regress/models.py14
-rw-r--r--parts/django/tests/regressiontests/signals_regress/tests.py96
-rw-r--r--parts/django/tests/regressiontests/sites_framework/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/sites_framework/models.py36
-rw-r--r--parts/django/tests/regressiontests/sites_framework/tests.py34
-rw-r--r--parts/django/tests/regressiontests/special_headers/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/special_headers/fixtures/data.xml20
-rw-r--r--parts/django/tests/regressiontests/special_headers/models.py4
-rw-r--r--parts/django/tests/regressiontests/special_headers/templates/special_headers/article_detail.html1
-rw-r--r--parts/django/tests/regressiontests/special_headers/tests.py40
-rw-r--r--parts/django/tests/regressiontests/special_headers/urls.py10
-rw-r--r--parts/django/tests/regressiontests/special_headers/views.py10
-rw-r--r--parts/django/tests/regressiontests/string_lookup/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/string_lookup/models.py45
-rw-r--r--parts/django/tests/regressiontests/string_lookup/tests.py78
-rw-r--r--parts/django/tests/regressiontests/syndication/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/syndication/feeds.py142
-rw-r--r--parts/django/tests/regressiontests/syndication/fixtures/feeddata.json42
-rw-r--r--parts/django/tests/regressiontests/syndication/models.py23
-rw-r--r--parts/django/tests/regressiontests/syndication/templates/syndication/description.html1
-rw-r--r--parts/django/tests/regressiontests/syndication/templates/syndication/title.html1
-rw-r--r--parts/django/tests/regressiontests/syndication/tests.py356
-rw-r--r--parts/django/tests/regressiontests/syndication/urls.py24
-rw-r--r--parts/django/tests/regressiontests/templates/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/templates/context.py17
-rw-r--r--parts/django/tests/regressiontests/templates/custom.py12
-rwxr-xr-xparts/django/tests/regressiontests/templates/eggs/tagsegg.eggbin2581 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/templates/filters.py350
-rw-r--r--parts/django/tests/regressiontests/templates/loaders.py150
-rw-r--r--parts/django/tests/regressiontests/templates/models.py0
-rw-r--r--parts/django/tests/regressiontests/templates/nodelist.py30
-rw-r--r--parts/django/tests/regressiontests/templates/parser.py84
-rw-r--r--parts/django/tests/regressiontests/templates/smartif.py53
-rw-r--r--parts/django/tests/regressiontests/templates/templates/broken_base.html1
-rw-r--r--parts/django/tests/regressiontests/templates/templates/first/test.html1
-rw-r--r--parts/django/tests/regressiontests/templates/templates/second/test.html1
-rwxr-xr-xparts/django/tests/regressiontests/templates/templates/test_extends_error.html1
-rw-r--r--parts/django/tests/regressiontests/templates/templatetags/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/templates/templatetags/broken_tag.py1
-rw-r--r--parts/django/tests/regressiontests/templates/templatetags/custom.py11
-rw-r--r--parts/django/tests/regressiontests/templates/tests.py1389
-rw-r--r--parts/django/tests/regressiontests/templates/unicode.py30
-rw-r--r--parts/django/tests/regressiontests/templates/urls.py17
-rw-r--r--parts/django/tests/regressiontests/templates/views.py13
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/bad_templates/404.html3
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/fixtures/testdata.json56
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/models.py864
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/session.py30
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/templates/unicode.html5
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/urls.py29
-rw-r--r--parts/django/tests/regressiontests/test_client_regress/views.py93
-rw-r--r--parts/django/tests/regressiontests/test_runner/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/test_runner/models.py0
-rw-r--r--parts/django/tests/regressiontests/test_runner/tests.py120
-rw-r--r--parts/django/tests/regressiontests/test_utils/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/test_utils/models.py0
-rw-r--r--parts/django/tests/regressiontests/test_utils/tests.py72
-rw-r--r--parts/django/tests/regressiontests/text/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/text/models.py0
-rw-r--r--parts/django/tests/regressiontests/text/tests.py81
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/extra_urls.py13
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/included_namespace_urls.py13
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/included_urls.py8
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/included_urls2.py14
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/middleware.py11
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/models.py0
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/namespace_urls.py38
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/no_urls.py2
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/tests.py330
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_inner.py12
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_outer.py9
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/urls.py63
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers.py8
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers_callables.py9
-rw-r--r--parts/django/tests/regressiontests/urlpatterns_reverse/views.py8
-rw-r--r--parts/django/tests/regressiontests/utils/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/utils/checksums.py29
-rw-r--r--parts/django/tests/regressiontests/utils/datastructures.py256
-rw-r--r--parts/django/tests/regressiontests/utils/dateformat.py129
-rw-r--r--parts/django/tests/regressiontests/utils/datetime_safe.py42
-rw-r--r--parts/django/tests/regressiontests/utils/decorators.py19
-rw-r--r--parts/django/tests/regressiontests/utils/eggs/test_egg.eggbin4844 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/utils/feedgenerator.py63
-rw-r--r--parts/django/tests/regressiontests/utils/functional.py10
-rw-r--r--parts/django/tests/regressiontests/utils/html.py111
-rw-r--r--parts/django/tests/regressiontests/utils/models.py1
-rw-r--r--parts/django/tests/regressiontests/utils/module_loading.py114
-rw-r--r--parts/django/tests/regressiontests/utils/simplelazyobject.py77
-rw-r--r--parts/django/tests/regressiontests/utils/termcolors.py149
-rw-r--r--parts/django/tests/regressiontests/utils/test_module/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/utils/test_module/bad_module.py3
-rw-r--r--parts/django/tests/regressiontests/utils/test_module/good_module.py1
-rw-r--r--parts/django/tests/regressiontests/utils/tests.py18
-rw-r--r--parts/django/tests/regressiontests/utils/text.py20
-rw-r--r--parts/django/tests/regressiontests/utils/timesince.py107
-rw-r--r--parts/django/tests/regressiontests/utils/tzinfo.py18
-rw-r--r--parts/django/tests/regressiontests/utils/urls.py8
-rw-r--r--parts/django/tests/regressiontests/utils/views.py17
-rw-r--r--parts/django/tests/regressiontests/views/__init__.py10
-rw-r--r--parts/django/tests/regressiontests/views/app0/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.mobin482 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.po20
-rw-r--r--parts/django/tests/regressiontests/views/app1/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.mobin482 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.po20
-rw-r--r--parts/django/tests/regressiontests/views/app2/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.mobin482 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.po20
-rw-r--r--parts/django/tests/regressiontests/views/app3/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.mobin483 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.po20
-rw-r--r--parts/django/tests/regressiontests/views/app4/__init__.py1
-rw-r--r--parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.mobin483 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.po20
-rw-r--r--parts/django/tests/regressiontests/views/fixtures/testdata.json75
-rw-r--r--parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mobin490 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po25
-rw-r--r--parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mobin484 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po24
-rw-r--r--parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.mobin489 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.po24
-rw-r--r--parts/django/tests/regressiontests/views/media/file.txt1
-rw-r--r--parts/django/tests/regressiontests/views/media/file.txt.gzbin51 -> 0 bytes
-rw-r--r--parts/django/tests/regressiontests/views/media/file.unknown1
-rw-r--r--parts/django/tests/regressiontests/views/models.py49
-rw-r--r--parts/django/tests/regressiontests/views/templates/debug/template_exception.html2
-rw-r--r--parts/django/tests/regressiontests/views/templatetags/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/views/templatetags/debugtags.py10
-rw-r--r--parts/django/tests/regressiontests/views/tests/__init__.py7
-rw-r--r--parts/django/tests/regressiontests/views/tests/debug.py50
-rw-r--r--parts/django/tests/regressiontests/views/tests/defaults.py85
-rw-r--r--parts/django/tests/regressiontests/views/tests/generic/__init__.py0
-rw-r--r--parts/django/tests/regressiontests/views/tests/generic/create_update.py211
-rw-r--r--parts/django/tests/regressiontests/views/tests/generic/date_based.py140
-rw-r--r--parts/django/tests/regressiontests/views/tests/i18n.py149
-rw-r--r--parts/django/tests/regressiontests/views/tests/specials.py35
-rw-r--r--parts/django/tests/regressiontests/views/tests/static.py77
-rw-r--r--parts/django/tests/regressiontests/views/urls.py131
-rw-r--r--parts/django/tests/regressiontests/views/views.py59
-rwxr-xr-xparts/django/tests/runtests.py336
-rw-r--r--parts/django/tests/templates/404.html1
-rw-r--r--parts/django/tests/templates/500.html1
-rw-r--r--parts/django/tests/templates/base.html8
-rw-r--r--parts/django/tests/templates/comments/comment_notification_email.txt3
-rw-r--r--parts/django/tests/templates/custom_admin/add_form.html1
-rw-r--r--parts/django/tests/templates/custom_admin/change_form.html1
-rw-r--r--parts/django/tests/templates/custom_admin/change_list.html7
-rw-r--r--parts/django/tests/templates/custom_admin/delete_confirmation.html1
-rw-r--r--parts/django/tests/templates/custom_admin/delete_selected_confirmation.html1
-rw-r--r--parts/django/tests/templates/custom_admin/index.html6
-rw-r--r--parts/django/tests/templates/custom_admin/login.html6
-rw-r--r--parts/django/tests/templates/custom_admin/logout.html6
-rw-r--r--parts/django/tests/templates/custom_admin/object_history.html1
-rw-r--r--parts/django/tests/templates/custom_admin/password_change_done.html6
-rw-r--r--parts/django/tests/templates/custom_admin/password_change_form.html6
-rw-r--r--parts/django/tests/templates/extended.html5
-rw-r--r--parts/django/tests/templates/form_view.html15
-rw-r--r--parts/django/tests/templates/login.html17
-rw-r--r--parts/django/tests/templates/views/article_archive_day.html1
-rw-r--r--parts/django/tests/templates/views/article_archive_month.html1
-rw-r--r--parts/django/tests/templates/views/article_confirm_delete.html1
-rw-r--r--parts/django/tests/templates/views/article_detail.html1
-rw-r--r--parts/django/tests/templates/views/article_form.html3
-rw-r--r--parts/django/tests/templates/views/datearticle_archive_month.html1
-rw-r--r--parts/django/tests/templates/views/urlarticle_detail.html1
-rw-r--r--parts/django/tests/templates/views/urlarticle_form.html3
-rw-r--r--parts/django/tests/test_sqlite.py22
-rw-r--r--parts/django/tests/urls.py44
2382 files changed, 0 insertions, 535442 deletions
diff --git a/parts/django/AUTHORS b/parts/django/AUTHORS
deleted file mode 100644
index 5929e5c..0000000
--- a/parts/django/AUTHORS
+++ /dev/null
@@ -1,530 +0,0 @@
-Django was originally created in late 2003 at World Online, the Web division
-of the Lawrence Journal-World newspaper in Lawrence, Kansas.
-
-The PRIMARY AUTHORS are (and/or have been):
-
- * Adrian Holovaty
- * Simon Willison
- * Jacob Kaplan-Moss
- * Wilson Miner
- * Malcolm Tredinnick
- * Georg "Hugo" Bauer
- * Luke Plant
- * Russell Keith-Magee
- * Robert Wittams
- * Gary Wilson
- * Brian Rosner
- * Justin Bronn
- * Karen Tracey
- * Jannis Leidel
- * James Tauber
- * Alex Gaynor
- * Andrew Godwin
- * Carl Meyer
- * Ramiro Morales
- * Chris Beaven
-
-More information on the main contributors to Django can be found in
-docs/internals/committers.txt.
-
-And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS --
-people who have submitted patches, reported bugs, added translations, helped
-answer newbie questions, and generally made Django that much better:
-
- Gisle Aas <gisle@aas.no>
- ajs <adi@sieker.info>
- alang@bright-green.com
- Andi Albrecht <albrecht.andi@gmail.com>
- Marty Alchin <gulopine@gamemusic.org>
- Ahmad Alhashemi <trans@ahmadh.com>
- Ahmad Al-Ibrahim
- Antoni Aloy
- Daniel Alves Barbosa de Oliveira Vaz <danielvaz@gmail.com>
- AgarFu <heaven@croasanaso.sytes.net>
- Dagur Páll Ammendrup <dagurp@gmail.com>
- Collin Anderson <cmawebsite@gmail.com>
- Jeff Anderson <jefferya@programmerq.net>
- Marian Andre <django@andre.sk>
- Andreas
- Victor Andrée
- andy@jadedplanet.net
- Fabrice Aneche <akh@nobugware.com>
- ant9000@netwise.it
- Florian Apolloner <florian@apolloner.eu>
- arien <regexbot@gmail.com>
- David Ascher <http://ascher.ca/>
- atlithorn <atlithorn@gmail.com>
- Jökull Sólberg Auðunsson <jokullsolberg@gmail.com>
- Arthur <avandorp@gmail.com>
- av0000@mail.ru
- David Avsajanishvili <avsd05@gmail.com>
- Mike Axiak <axiak@mit.edu>
- Niran Babalola <niran@niran.org>
- Vitaly Babiy <vbabiy86@gmail.com>
- Morten Bagai <m@bagai.com>
- Jeff Balogh <jbalogh@mozilla.com>
- Mikaël Barbero <mikael.barbero nospam at nospam free.fr>
- Randy Barlow <randy@electronsweatshop.com>
- Scott Barr <scott@divisionbyzero.com.au>
- Jiri Barton
- Ned Batchelder <http://www.nedbatchelder.com/>
- batiste@dosimple.ch
- Batman
- Brian Beck <http://blog.brianbeck.com/>
- Shannon -jj Behrens <http://jjinux.blogspot.com/>
- Esdras Beleza <linux@esdrasbeleza.com>
- Chris Bennett <chrisrbennett@yahoo.com>
- James Bennett
- Julian Bez
- Arvis Bickovskis <viestards.lists@gmail.com>
- Natalia Bidart <nataliabidart@gmail.com>
- Paul Bissex <http://e-scribe.com/>
- Simon Blanchard
- David Blewett <david@dawninglight.net>
- Matt Boersma <matt@sprout.org>
- boobsd@gmail.com
- Matías Bordese
- Sean Brant
- Andrew Brehaut <http://brehaut.net/blog>
- David Brenneman <http://davidbrenneman.com>
- brut.alll@gmail.com
- bthomas
- btoll@bestweb.net
- Jonathan Buchanan <jonathan.buchanan@gmail.com>
- Keith Bussell <kbussell@gmail.com>
- C8E
- Chris Cahoon <chris.cahoon@gmail.com>
- Juan Manuel Caicedo <juan.manuel.caicedo@gmail.com>
- Trevor Caira <trevor@caira.com>
- Brett Cannon <brett@python.org>
- Ricardo Javier Cárdenes Medina <ricardo.cardenes@gmail.com>
- Jeremy Carbaugh <jcarbaugh@gmail.com>
- Graham Carlyle <graham.carlyle@maplecroft.net>
- Antonio Cavedoni <http://cavedoni.com/>
- cedric@terramater.net
- Chris Chamberlin <dja@cdc.msbx.net>
- Amit Chakradeo <http://amit.chakradeo.net/>
- ChaosKCW
- Kowito Charoenratchatabhan <kowito@felspar.com>
- Sengtha Chay <sengtha@e-khmer.com>
- ivan.chelubeev@gmail.com
- Bryan Chow <bryan at verdjn dot com>
- Antonis Christofides <anthony@itia.ntua.gr>
- Michal Chruszcz <troll@pld-linux.org>
- Can Burak Çilingir <canburak@cs.bilgi.edu.tr>
- Ian Clelland <clelland@gmail.com>
- Travis Cline <travis.cline@gmail.com>
- Russell Cloran <russell@rucus.net>
- colin@owlfish.com
- crankycoder@gmail.com
- Paul Collier <paul@paul-collier.com>
- Robert Coup
- Pete Crosier <pete.crosier@gmail.com>
- Matt Croydon <http://www.postneo.com/>
- Leah Culver <leah@pownce.com>
- flavio.curella@gmail.com
- Jure Cuhalev <gandalf@owca.info>
- John D'Agostino <john.dagostino@gmail.com>
- dackze+django@gmail.com
- Mihai Damian <yang_damian@yahoo.com>
- David Danier <goliath.mailinglist@gmx.de>
- Dirk Datzert <dummy@habmalnefrage.de>
- Jonathan Daugherty (cygnus) <http://www.cprogrammer.org/>
- dave@thebarproject.com
- david@kazserve.org
- Jason Davies (Esaj) <http://www.jasondavies.com/>
- Richard Davies <richard.davies@elastichosts.com>
- Alex Dedul
- Matt Dennenbaum
- deric@monowerks.com
- Max Derkachev <mderk@yandex.ru>
- Rajesh Dhawan <rajesh.dhawan@gmail.com>
- Sander Dijkhuis <sander.dijkhuis@gmail.com>
- Jordan Dimov <s3x3y1@gmail.com>
- Nebojša Dorđević
- dne@mayonnaise.net
- dready <wil@mojipage.com>
- Maximillian Dornseif <md@hudora.de>
- Jeremy Dunck <http://dunck.us/>
- Andrew Durdin <adurdin@gmail.com>
- dusk@woofle.net
- Andy Dustman <farcepest@gmail.com>
- Alexander Dutton <dev@alexdutton.co.uk>
- J. Clifford Dyer <jcd@sdf.lonestar.org>
- Clint Ecker
- Nick Efford <nick@efford.org>
- eibaan@gmail.com
- Julia Elman
- enlight
- Enrico <rico.bl@gmail.com>
- A. Murat Eren <meren@pardus.org.tr>
- Ludvig Ericson <ludvig.ericson@gmail.com>
- eriks@win.tue.nl
- Tomáš Ehrlich <tomas.ehrlich@gmail.com>
- Dirk Eschler <dirk.eschler@gmx.net>
- Marc Fargas <telenieko@telenieko.com>
- Szilveszter Farkas <szilveszter.farkas@gmail.com>
- Grigory Fateyev <greg@dial.com.ru>
- favo@exoweb.net
- fdr <drfarina@gmail.com>
- Dmitri Fedortchenko <zeraien@gmail.com>
- Jonathan Feignberg <jdf@pobox.com>
- Liang Feng <hutuworm@gmail.com>
- Bill Fenner <fenner@gmail.com>
- Stefane Fermgier <sf@fermigier.com>
- J. Pablo Fernandez <pupeno@pupeno.com>
- Maciej Fijalkowski
- Ben Firshman <ben@firshman.co.uk>
- Matthew Flanagan <http://wadofstuff.blogspot.com>
- Eric Floehr <eric@intellovations.com>
- Eric Florenzano <floguy@gmail.com>
- Vincent Foley <vfoleybourgon@yahoo.ca>
- Alcides Fonseca
- Rudolph Froger <rfroger@estrate.nl>
- Jorge Gajon <gajon@gajon.org>
- gandalf@owca.info
- Marc Garcia <marc.garcia@accopensys.com>
- Andy Gayton <andy-django@thecablelounge.com>
- Idan Gazit
- geber@datacollect.com
- Baishampayan Ghose
- Dimitris Glezos <dimitris@glezos.com>
- glin@seznam.cz
- martin.glueck@gmail.com
- Artyom Gnilov <boobsd@gmail.com>
- Ben Godfrey <http://aftnn.org>
- GomoX <gomo@datafull.com>
- Guilherme Mesquita Gondim <semente@taurinus.org>
- Mario Gonzalez <gonzalemario@gmail.com>
- David Gouldin <dgouldin@gmail.com>
- pradeep.gowda@gmail.com
- Collin Grady <collin@collingrady.com>
- Gabriel Grant <g@briel.ca>
- Simon Greenhill <dev@simon.net.nz>
- Owen Griffiths
- Espen Grindhaug <http://grindhaug.org/>
- Janos Guljas
- Thomas Güttler <hv@tbz-pariv.de>
- Horst Gutmann <zerok@zerokspot.com>
- Scot Hacker <shacker@birdhouse.org>
- dAniel hAhler
- hambaloney
- Brian Harring <ferringb@gmail.com>
- Brant Harris
- Ronny Haryanto <http://ronny.haryan.to/>
- Hawkeye
- Joe Heck <http://www.rhonabwy.com/wp/>
- Joel Heenan <joelh-django@planetjoel.com>
- Mikko Hellsing <mikko@sorl.net>
- Sebastian Hillig <sebastian.hillig@gmail.com>
- hipertracker@gmail.com
- Deryck Hodge <http://www.devurandom.org/>
- Brett Hoerner <bretthoerner@bretthoerner.com>
- Eric Holscher <http://ericholscher.com>
- Ian Holsman <http://feh.holsman.net/>
- Kieran Holland <http://www.kieranholland.com>
- Sung-Jin Hong <serialx.net@gmail.com>
- Leo "hylje" Honkanen <sealage@gmail.com>
- Tareque Hossain <http://www.codexn.com>
- Richard House <Richard.House@i-logue.com>
- Robert Rock Howard <http://djangomojo.com/>
- John Huddleston <huddlej@wwu.edu>
- Rob Hudson <http://rob.cogit8.org/>
- Jason Huggins <http://www.jrandolph.com/blog/>
- Gabriel Hurley <gabriel@strikeawe.com>
- Hyun Mi Ae
- Ibon <ibonso@gmail.com>
- Tom Insam
- Baurzhan Ismagulov <ibr@radix50.net>
- Stephan Jaekel <steph@rdev.info>
- james_027@yahoo.com
- jcrasta@gmail.com
- jdetaeye
- jhenry <jhenry@theonion.com>
- Zak Johnson <zakj@nox.cx>
- Nis Jørgensen <nis@superlativ.dk>
- Michael Josephson <http://www.sdjournal.com/>
- jpellerin@gmail.com
- junzhang.jn@gmail.com
- Antti Kaihola <http://djangopeople.net/akaihola/>
- Bahadır Kandemir <bahadir@pardus.org.tr>
- Karderio <karderio@gmail.com>
- Nagy Károly <charlie@rendszergazda.com>
- Erik Karulf <erik@karulf.com>
- Ben Dean Kawamura <ben.dean.kawamura@gmail.com>
- Ian G. Kelly <ian.g.kelly@gmail.com>
- Niall Kelly <duke.sam.vimes@gmail.com>
- Ryan Kelly <ryan@rfk.id.au>
- Thomas Kerpe <thomas@kerpe.net>
- Wiley Kestner <wiley.kestner@gmail.com>
- Ossama M. Khayat <okhayat@yahoo.com>
- Ben Khoo <khoobks@westnet.com.au>
- Garth Kidd <http://www.deadlybloodyserious.com/>
- kilian <kilian.cavalotti@lip6.fr>
- Sune Kirkeby <http://ibofobi.dk/>
- Bastian Kleineidam <calvin@debian.org>
- Cameron Knight (ckknight)
- Nena Kojadin <nena@kiberpipa.org>
- Igor Kolar <ike@email.si>
- Tomáš Kopeček <permonik@m6.cz>
- Gasper Koren
- Martin Kosír <martin@martinkosir.net>
- Arthur Koziel <http://arthurkoziel.com>
- Honza Král <honza.kral@gmail.com>
- Meir Kriheli <http://mksoft.co.il/>
- Bruce Kroeze <http://coderseye.com/>
- krzysiek.pawlik@silvermedia.pl
- Joseph Kocherhans
- konrad@gwu.edu
- knox <christobzr@gmail.com>
- David Krauth
- Kevin Kubasik <kevin@kubasik.net>
- kurtiss@meetro.com
- Denis Kuzmichyov <kuzmichyov@gmail.com>
- Panos Laganakos <panos.laganakos@gmail.com>
- Nick Lane <nick.lane.au@gmail.com>
- Stuart Langridge <http://www.kryogenix.org/>
- Paul Lanier <planier@google.com>
- David Larlet <http://david.larlet.fr>
- Nicolas Lara <nicolaslara@gmail.com>
- Nicola Larosa <nico@teknico.net>
- Finn Gruwier Larsen <finn@gruwier.dk>
- Lau Bech Lauritzen
- Rune Rønde Laursen <runerl@skjoldhoej.dk>
- Mark Lavin <markdlavin@gmail.com>
- Eugene Lazutkin <http://lazutkin.com/blog/>
- lcordier@point45.com
- Jeong-Min Lee <falsetru@gmail.com>
- Tai Lee <real.human@mrmachine.net>
- Christopher Lenz <http://www.cmlenz.net/>
- lerouxb@gmail.com
- Piotr Lewandowski <piotr.lewandowski@gmail.com>
- Charlie Leifer <coleifer@gmail.com>
- Justin Lilly <justinlilly@gmail.com>
- Waylan Limberg <waylan@gmail.com>
- limodou
- Philip Lindborg <philip.lindborg@gmail.com>
- Simon Litchfield <simon@quo.com.au>
- Daniel Lindsley <daniel@toastdriven.com>
- Trey Long <trey@ktrl.com>
- Laurent Luce <http://www.laurentluce.com>
- Martin Mahner <http://www.mahner.org/>
- Matt McClanahan <http://mmcc.cx/>
- Stanislaus Madueke
- Yann Malet
- Frantisek Malina <vizualbod@vizualbod.com>
- Mike Malone <mjmalone@gmail.com>
- Martin Maney <http://www.chipy.org/Martin_Maney>
- masonsimon+django@gmail.com
- Manuzhai
- Petr Marhoun <petr.marhoun@gmail.com>
- Petar Marić <http://www.petarmaric.com/>
- Nuno Mariz <nmariz@gmail.com>
- mark@junklight.com
- Orestis Markou <orestis@orestis.gr>
- Takashi Matsuo <matsuo.takashi@gmail.com>
- Yasushi Masuda <whosaysni@gmail.com>
- mattycakes@gmail.com
- Glenn Maynard <glenn@zewt.org>
- Jason McBrayer <http://www.carcosa.net/jason/>
- Kevin McConnell <kevin.mcconnell@gmail.com>
- mccutchen@gmail.com
- michael.mcewan@gmail.com
- Paul McLanahan <paul@mclanahan.net>
- Tobias McNulty <http://www.caktusgroup.com/blog>
- Zain Memon
- Christian Metts
- michal@plovarna.cz
- Slawek Mikula <slawek dot mikula at gmail dot com>
- mitakummaa@gmail.com
- mmarshall
- Andreas Mock <andreas.mock@web.de>
- Reza Mohammadi <reza@zeerak.ir>
- Aljosa Mohorovic <aljosa.mohorovic@gmail.com>
- Eric Moritz <http://eric.themoritzfamily.com/>
- msaelices <msaelices@gmail.com>
- Gregor Müllegger <gregor@muellegger.de>
- Robin Munn <http://www.geekforgod.com/>
- James Murty
- msundstr
- Robert Myers <myer0052@gmail.com>
- Alexander Myodov <alex@myodov.com>
- Doug Napoleone <doug@dougma.com>
- Gopal Narayanan <gopastro@gmail.com>
- Fraser Nevett <mail@nevett.org>
- Sam Newman <http://www.magpiebrain.com/>
- Filip Noetzel <http://filip.noetzel.co.uk/>
- Afonso Fernández Nogueira <fonzzo.django@gmail.com>
- Neal Norwitz <nnorwitz@google.com>
- Todd O'Bryan <toddobryan@mac.com>
- Selwin Ong <selwin@ui.co.id>
- Christian Oudard <christian.oudard@gmail.com>
- oggie rob <oz.robharvey@gmail.com>
- oggy <ognjen.maric@gmail.com>
- Jay Parlar <parlar@gmail.com>
- Claude Paroz <claude@2xlibre.net>
- Carlos Eduardo de Paula <carlosedp@gmail.com>
- pavithran s <pavithran.s@gmail.com>
- Barry Pederson <bp@barryp.org>
- Andreas Pelme <andreas@pelme.se>
- permonik@mesias.brnonet.cz
- peter@mymart.com
- pgross@thoughtworks.com
- phaedo <http://phaedo.cx/>
- Julien Phalip <http://www.julienphalip.com>
- phil@produxion.net
- phil.h.smith@gmail.com
- Gustavo Picon
- Michael Placentra II <someone@michaelplacentra2.net>
- plisk
- Daniel Poelzleithner <http://poelzi.org/>
- polpak@yahoo.com
- Ross Poulton <ross@rossp.org>
- Mihai Preda <mihai_preda@yahoo.com>
- Matthias Pronk <django@masida.nl>
- Jyrki Pulliainen <jyrki.pulliainen@gmail.com>
- Thejaswi Puthraya <thejaswi.puthraya@gmail.com>
- Johann Queuniet <johann.queuniet@adh.naellia.eu>
- Jan Rademaker
- Michael Radziej <mir@noris.de>
- Laurent Rahuel <laurent.rahuel@gmail.com>
- Stéphane Raimbault <stephane.raimbault@gmail.com>
- Luciano Ramalho
- Amit Ramon <amit.ramon@gmail.com>
- Philippe Raoult <philippe.raoult@n2nsoft.com>
- Massimiliano Ravelli <massimiliano.ravelli@gmail.com>
- Brian Ray <http://brianray.chipy.org/>
- remco@diji.biz
- Marc Remolt <m.remolt@webmasters.de>
- Bruno Renié <buburno@gmail.com>
- David Reynolds <david@reynoldsfamily.org.uk>
- rhettg@gmail.com
- ricardojbarrios@gmail.com
- Mike Richardson
- Matt Riggott
- Alex Robbins <alexander.j.robbins@gmail.com>
- Henrique Romano <onaiort@gmail.com>
- Armin Ronacher
- Daniel Roseman <http://roseman.org.uk/>
- Rozza <ross.lawley@gmail.com>
- Oliver Rutherfurd <http://rutherfurd.net/>
- ryankanno
- Gonzalo Saavedra <gonzalosaavedra@gmail.com>
- Manuel Saelices <msaelices@yaco.es>
- Ivan Sagalaev (Maniac) <http://www.softwaremaniacs.org/>
- Vinay Sajip <vinay_sajip@yahoo.co.uk>
- Kadesarin Sanjek
- Massimo Scamarcia <massimo.scamarcia@gmail.com>
- Paulo Scardine <paulo@scardine.com.br>
- David Schein
- Bernd Schlapsi
- schwank@gmail.com
- scott@staplefish.com
- Ilya Semenov <semenov@inetss.com>
- serbaut@gmail.com
- John Shaffer <jshaffer2112@gmail.com>
- Pete Shinners <pete@shinners.org>
- Leo Shklovskii
- jason.sidabras@gmail.com
- Brenton Simpson <http://theillustratedlife.com>
- Jozko Skrablin <jozko.skrablin@gmail.com>
- Ben Slavin <benjamin.slavin@gmail.com>
- sloonz <simon.lipp@insa-lyon.fr>
- Paul Smith <blinkylights23@gmail.com>
- Warren Smith <warren@wandrsmith.net>
- smurf@smurf.noris.de
- Vsevolod Solovyov
- sopel
- Leo Soto <leo.soto@gmail.com>
- Wiliam Alves de Souza <wiliamsouza83@gmail.com>
- Don Spaulding <donspauldingii@gmail.com>
- Bjørn Stabell <bjorn@exoweb.net>
- Georgi Stanojevski <glisha@gmail.com>
- starrynight <cmorgh@gmail.com>
- Vasiliy Stavenko <stavenko@gmail.com>
- Thomas Steinacher <http://www.eggdrop.ch/>
- Johan C. Stöver <johan@nilling.nl>
- Nowell Strite <http://nowell.strite.org/>
- Thomas Stromberg <tstromberg@google.com>
- Pascal Varet
- SuperJared
- Radek Švarz <http://www.svarz.cz/translate/>
- Swaroop C H <http://www.swaroopch.info>
- Aaron Swartz <http://www.aaronsw.com/>
- Ville Säävuori <http://www.unessa.net/>
- Mart Sõmermaa <http://mrts.pri.ee/>
- Christian Tanzer <tanzer@swing.co.at>
- Tyler Tarabula <tyler.tarabula@gmail.com>
- Tyson Tate <tyson@fallingbullets.com>
- Aryeh Leib Taurog <http://www.aryehleib.com/>
- Frank Tegtmeyer <fte@fte.to>
- Marcel Telka <marcel@telka.sk>
- Terry Huang <terryh.tp@gmail.com>
- Travis Terry <tdterry7@gmail.com>
- thebjorn <bp@datakortet.no>
- Zach Thompson <zthompson47@gmail.com>
- Michael Thornhill <michael.thornhill@gmail.com>
- Deepak Thukral <deep.thukral@gmail.com>
- tibimicu@gmx.net
- tobias@neuyork.de
- Tom Tobin
- Joe Topjian <http://joe.terrarum.net/geek/code/python/django/>
- torne-django@wolfpuppy.org.uk
- Jeff Triplett <jeff.triplett@gmail.com>
- tstromberg@google.com
- Makoto Tsuyuki <mtsuyuki@gmail.com>
- tt@gurgle.no
- David Tulig <david.tulig@gmail.com>
- Amit Upadhyay <http://www.amitu.com/blog/>
- Adam Vandenberg
- Geert Vanderkelen
- Vasil Vangelovski
- I.S. van Oostveen <v.oostveen@idca.nl>
- viestards.lists@gmail.com
- George Vilches <gav@thataddress.com>
- Vlado <vlado@labath.org>
- Zachary Voase <zacharyvoase@gmail.com>
- Marijn Vriens <marijn@metronomo.cl>
- Milton Waddams
- Chris Wagner <cw264701@ohio.edu>
- Rick Wagner <rwagner@physics.ucsd.edu>
- wam-djangobug@wamber.net
- Wang Chun <wangchun@exoweb.net>
- Filip Wasilewski <filip.wasilewski@gmail.com>
- Dan Watson <http://theidioteque.net/>
- Joel Watts <joel@joelwatts.com>
- Lakin Wecker <lakin@structuredabstraction.com>
- Chris Wesseling <Chris.Wesseling@cwi.nl>
- James Wheare <django@sparemint.com>
- Mike Wiacek <mjwiacek@google.com>
- Frank Wierzbicki
- charly.wilhelm@gmail.com
- Derek Willis <http://blog.thescoop.org/>
- Rachel Willmer <http://www.willmer.com/kb/>
- Jakub Wilk <ubanus@users.sf.net>
- Jakub Wiśniowski <restless.being@gmail.com>
- Maciej Wiśniowski <pigletto@gmail.com>
- wojtek
- Jason Yan <tailofthesun@gmail.com>
- Lars Yencken <lars.yencken@gmail.com>
- ye7cakf02@sneakemail.com
- ymasuda@ethercube.com
- Jesse Young <adunar@gmail.com>
- Mykola Zamkovoi <nickzam@gmail.com>
- zegor
- Gasper Zejn <zejn@kiberpipa.org>
- Jarek Zgoda <jarek.zgoda@gmail.com>
- Cheng Zhang
-
-A big THANK YOU goes to:
-
- Rob Curley and Ralph Gage for letting us open-source Django.
-
- Frank Wiles for making excellent arguments for open-sourcing, and for
- his sage sysadmin advice.
-
- Ian Bicking for convincing Adrian to ditch code generation.
-
- Mark Pilgrim for diveintopython.org.
-
- Guido van Rossum for creating Python.
diff --git a/parts/django/Django.egg-info/PKG-INFO b/parts/django/Django.egg-info/PKG-INFO
deleted file mode 100644
index f4b637d..0000000
--- a/parts/django/Django.egg-info/PKG-INFO
+++ /dev/null
@@ -1,23 +0,0 @@
-Metadata-Version: 1.0
-Name: Django
-Version: 1.2.4
-Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
-Home-page: http://www.djangoproject.com/
-Author: Django Software Foundation
-Author-email: foundation@djangoproject.com
-License: UNKNOWN
-Download-URL: http://media.djangoproject.com/releases/1.2/Django-1.2.4.tar.gz
-Description: UNKNOWN
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Web Environment
-Classifier: Framework :: Django
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: BSD License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Topic :: Internet :: WWW/HTTP
-Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
-Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
-Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff --git a/parts/django/Django.egg-info/SOURCES.txt b/parts/django/Django.egg-info/SOURCES.txt
deleted file mode 100644
index 3eee5fa..0000000
--- a/parts/django/Django.egg-info/SOURCES.txt
+++ /dev/null
@@ -1,2381 +0,0 @@
-AUTHORS
-INSTALL
-LICENSE
-MANIFEST.in
-README
-setup.cfg
-setup.py
-Django.egg-info/PKG-INFO
-Django.egg-info/SOURCES.txt
-Django.egg-info/dependency_links.txt
-Django.egg-info/top_level.txt
-django/__init__.py
-django/bin/__init__.py
-django/bin/compile-messages.py
-django/bin/daily_cleanup.py
-django/bin/django-admin.py
-django/bin/make-messages.py
-django/bin/unique-messages.py
-django/bin/profiling/__init__.py
-django/bin/profiling/gather_profile_stats.py
-django/conf/__init__.py
-django/conf/global_settings.py
-django/conf/app_template/__init__.py
-django/conf/app_template/models.py
-django/conf/app_template/tests.py
-django/conf/app_template/views.py
-django/conf/locale/__init__.py
-django/conf/locale/ar/__init__.py
-django/conf/locale/ar/formats.py
-django/conf/locale/ar/LC_MESSAGES/django.mo
-django/conf/locale/ar/LC_MESSAGES/django.po
-django/conf/locale/ar/LC_MESSAGES/djangojs.mo
-django/conf/locale/ar/LC_MESSAGES/djangojs.po
-django/conf/locale/bg/__init__.py
-django/conf/locale/bg/formats.py
-django/conf/locale/bg/LC_MESSAGES/django.mo
-django/conf/locale/bg/LC_MESSAGES/django.po
-django/conf/locale/bg/LC_MESSAGES/djangojs.mo
-django/conf/locale/bg/LC_MESSAGES/djangojs.po
-django/conf/locale/bn/__init__.py
-django/conf/locale/bn/formats.py
-django/conf/locale/bn/LC_MESSAGES/django.mo
-django/conf/locale/bn/LC_MESSAGES/django.po
-django/conf/locale/bn/LC_MESSAGES/djangojs.mo
-django/conf/locale/bn/LC_MESSAGES/djangojs.po
-django/conf/locale/bs/__init__.py
-django/conf/locale/bs/formats.py
-django/conf/locale/bs/LC_MESSAGES/django.mo
-django/conf/locale/bs/LC_MESSAGES/django.po
-django/conf/locale/ca/__init__.py
-django/conf/locale/ca/formats.py
-django/conf/locale/ca/LC_MESSAGES/django.mo
-django/conf/locale/ca/LC_MESSAGES/django.po
-django/conf/locale/ca/LC_MESSAGES/djangojs.mo
-django/conf/locale/ca/LC_MESSAGES/djangojs.po
-django/conf/locale/cs/__init__.py
-django/conf/locale/cs/formats.py
-django/conf/locale/cs/LC_MESSAGES/django.mo
-django/conf/locale/cs/LC_MESSAGES/django.po
-django/conf/locale/cs/LC_MESSAGES/djangojs.mo
-django/conf/locale/cs/LC_MESSAGES/djangojs.po
-django/conf/locale/cy/__init__.py
-django/conf/locale/cy/formats.py
-django/conf/locale/cy/LC_MESSAGES/django.mo
-django/conf/locale/cy/LC_MESSAGES/django.po
-django/conf/locale/cy/LC_MESSAGES/djangojs.mo
-django/conf/locale/cy/LC_MESSAGES/djangojs.po
-django/conf/locale/da/__init__.py
-django/conf/locale/da/formats.py
-django/conf/locale/da/LC_MESSAGES/django.mo
-django/conf/locale/da/LC_MESSAGES/django.po
-django/conf/locale/da/LC_MESSAGES/djangojs.mo
-django/conf/locale/da/LC_MESSAGES/djangojs.po
-django/conf/locale/de/__init__.py
-django/conf/locale/de/formats.py
-django/conf/locale/de/LC_MESSAGES/django.mo
-django/conf/locale/de/LC_MESSAGES/django.po
-django/conf/locale/de/LC_MESSAGES/djangojs.mo
-django/conf/locale/de/LC_MESSAGES/djangojs.po
-django/conf/locale/el/__init__.py
-django/conf/locale/el/formats.py
-django/conf/locale/el/LC_MESSAGES/django.mo
-django/conf/locale/el/LC_MESSAGES/django.po
-django/conf/locale/el/LC_MESSAGES/djangojs.mo
-django/conf/locale/el/LC_MESSAGES/djangojs.po
-django/conf/locale/en/__init__.py
-django/conf/locale/en/formats.py
-django/conf/locale/en/LC_MESSAGES/django.mo
-django/conf/locale/en/LC_MESSAGES/django.po
-django/conf/locale/en/LC_MESSAGES/djangojs.mo
-django/conf/locale/en/LC_MESSAGES/djangojs.po
-django/conf/locale/en_GB/__init__.py
-django/conf/locale/en_GB/formats.py
-django/conf/locale/en_GB/LC_MESSAGES/django.mo
-django/conf/locale/en_GB/LC_MESSAGES/django.po
-django/conf/locale/en_GB/LC_MESSAGES/djangojs.mo
-django/conf/locale/en_GB/LC_MESSAGES/djangojs.po
-django/conf/locale/es/__init__.py
-django/conf/locale/es/formats.py
-django/conf/locale/es/LC_MESSAGES/django.mo
-django/conf/locale/es/LC_MESSAGES/django.po
-django/conf/locale/es/LC_MESSAGES/djangojs.mo
-django/conf/locale/es/LC_MESSAGES/djangojs.po
-django/conf/locale/es_AR/__init__.py
-django/conf/locale/es_AR/formats.py
-django/conf/locale/es_AR/LC_MESSAGES/django.mo
-django/conf/locale/es_AR/LC_MESSAGES/django.po
-django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
-django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
-django/conf/locale/et/__init__.py
-django/conf/locale/et/formats.py
-django/conf/locale/et/LC_MESSAGES/django.mo
-django/conf/locale/et/LC_MESSAGES/django.po
-django/conf/locale/et/LC_MESSAGES/djangojs.mo
-django/conf/locale/et/LC_MESSAGES/djangojs.po
-django/conf/locale/eu/__init__.py
-django/conf/locale/eu/formats.py
-django/conf/locale/eu/LC_MESSAGES/django.mo
-django/conf/locale/eu/LC_MESSAGES/django.po
-django/conf/locale/eu/LC_MESSAGES/djangojs.mo
-django/conf/locale/eu/LC_MESSAGES/djangojs.po
-django/conf/locale/fa/__init__.py
-django/conf/locale/fa/formats.py
-django/conf/locale/fa/LC_MESSAGES/django.mo
-django/conf/locale/fa/LC_MESSAGES/django.po
-django/conf/locale/fa/LC_MESSAGES/djangojs.mo
-django/conf/locale/fa/LC_MESSAGES/djangojs.po
-django/conf/locale/fi/__init__.py
-django/conf/locale/fi/formats.py
-django/conf/locale/fi/LC_MESSAGES/django.mo
-django/conf/locale/fi/LC_MESSAGES/django.po
-django/conf/locale/fi/LC_MESSAGES/djangojs.mo
-django/conf/locale/fi/LC_MESSAGES/djangojs.po
-django/conf/locale/fr/__init__.py
-django/conf/locale/fr/formats.py
-django/conf/locale/fr/LC_MESSAGES/django.mo
-django/conf/locale/fr/LC_MESSAGES/django.po
-django/conf/locale/fr/LC_MESSAGES/djangojs.mo
-django/conf/locale/fr/LC_MESSAGES/djangojs.po
-django/conf/locale/fy_NL/__init__.py
-django/conf/locale/fy_NL/formats.py
-django/conf/locale/fy_NL/LC_MESSAGES/django.mo
-django/conf/locale/fy_NL/LC_MESSAGES/django.po
-django/conf/locale/fy_NL/LC_MESSAGES/djangojs.mo
-django/conf/locale/fy_NL/LC_MESSAGES/djangojs.po
-django/conf/locale/ga/__init__.py
-django/conf/locale/ga/formats.py
-django/conf/locale/ga/LC_MESSAGES/django.mo
-django/conf/locale/ga/LC_MESSAGES/django.po
-django/conf/locale/ga/LC_MESSAGES/djangojs.mo
-django/conf/locale/ga/LC_MESSAGES/djangojs.po
-django/conf/locale/gl/__init__.py
-django/conf/locale/gl/formats.py
-django/conf/locale/gl/LC_MESSAGES/django.mo
-django/conf/locale/gl/LC_MESSAGES/django.po
-django/conf/locale/gl/LC_MESSAGES/djangojs.mo
-django/conf/locale/gl/LC_MESSAGES/djangojs.po
-django/conf/locale/he/__init__.py
-django/conf/locale/he/formats.py
-django/conf/locale/he/LC_MESSAGES/django.mo
-django/conf/locale/he/LC_MESSAGES/django.po
-django/conf/locale/he/LC_MESSAGES/djangojs.mo
-django/conf/locale/he/LC_MESSAGES/djangojs.po
-django/conf/locale/hi/__init__.py
-django/conf/locale/hi/formats.py
-django/conf/locale/hi/LC_MESSAGES/django.mo
-django/conf/locale/hi/LC_MESSAGES/django.po
-django/conf/locale/hi/LC_MESSAGES/djangojs.mo
-django/conf/locale/hi/LC_MESSAGES/djangojs.po
-django/conf/locale/hr/__init__.py
-django/conf/locale/hr/formats.py
-django/conf/locale/hr/LC_MESSAGES/django.mo
-django/conf/locale/hr/LC_MESSAGES/django.po
-django/conf/locale/hr/LC_MESSAGES/djangojs.mo
-django/conf/locale/hr/LC_MESSAGES/djangojs.po
-django/conf/locale/hu/__init__.py
-django/conf/locale/hu/formats.py
-django/conf/locale/hu/LC_MESSAGES/django.mo
-django/conf/locale/hu/LC_MESSAGES/django.po
-django/conf/locale/hu/LC_MESSAGES/djangojs.mo
-django/conf/locale/hu/LC_MESSAGES/djangojs.po
-django/conf/locale/id/__init__.py
-django/conf/locale/id/formats.py
-django/conf/locale/id/LC_MESSAGES/django.mo
-django/conf/locale/id/LC_MESSAGES/django.po
-django/conf/locale/id/LC_MESSAGES/djangojs.mo
-django/conf/locale/id/LC_MESSAGES/djangojs.po
-django/conf/locale/is/__init__.py
-django/conf/locale/is/formats.py
-django/conf/locale/is/LC_MESSAGES/django.mo
-django/conf/locale/is/LC_MESSAGES/django.po
-django/conf/locale/is/LC_MESSAGES/djangojs.mo
-django/conf/locale/is/LC_MESSAGES/djangojs.po
-django/conf/locale/it/__init__.py
-django/conf/locale/it/formats.py
-django/conf/locale/it/LC_MESSAGES/django.mo
-django/conf/locale/it/LC_MESSAGES/django.po
-django/conf/locale/it/LC_MESSAGES/djangojs.mo
-django/conf/locale/it/LC_MESSAGES/djangojs.po
-django/conf/locale/ja/__init__.py
-django/conf/locale/ja/formats.py
-django/conf/locale/ja/LC_MESSAGES/django.mo
-django/conf/locale/ja/LC_MESSAGES/django.po
-django/conf/locale/ja/LC_MESSAGES/djangojs.mo
-django/conf/locale/ja/LC_MESSAGES/djangojs.po
-django/conf/locale/ka/__init__.py
-django/conf/locale/ka/formats.py
-django/conf/locale/ka/LC_MESSAGES/django.mo
-django/conf/locale/ka/LC_MESSAGES/django.po
-django/conf/locale/ka/LC_MESSAGES/djangojs.mo
-django/conf/locale/ka/LC_MESSAGES/djangojs.po
-django/conf/locale/km/__init__.py
-django/conf/locale/km/formats.py
-django/conf/locale/km/LC_MESSAGES/django.mo
-django/conf/locale/km/LC_MESSAGES/django.po
-django/conf/locale/km/LC_MESSAGES/djangojs.mo
-django/conf/locale/km/LC_MESSAGES/djangojs.po
-django/conf/locale/kn/__init__.py
-django/conf/locale/kn/formats.py
-django/conf/locale/kn/LC_MESSAGES/django.mo
-django/conf/locale/kn/LC_MESSAGES/django.po
-django/conf/locale/kn/LC_MESSAGES/djangojs.mo
-django/conf/locale/kn/LC_MESSAGES/djangojs.po
-django/conf/locale/ko/__init__.py
-django/conf/locale/ko/formats.py
-django/conf/locale/ko/LC_MESSAGES/django.mo
-django/conf/locale/ko/LC_MESSAGES/django.po
-django/conf/locale/ko/LC_MESSAGES/djangojs.mo
-django/conf/locale/ko/LC_MESSAGES/djangojs.po
-django/conf/locale/lt/__init__.py
-django/conf/locale/lt/formats.py
-django/conf/locale/lt/LC_MESSAGES/django.mo
-django/conf/locale/lt/LC_MESSAGES/django.po
-django/conf/locale/lt/LC_MESSAGES/djangojs.mo
-django/conf/locale/lt/LC_MESSAGES/djangojs.po
-django/conf/locale/lv/__init__.py
-django/conf/locale/lv/formats.py
-django/conf/locale/lv/LC_MESSAGES/django.mo
-django/conf/locale/lv/LC_MESSAGES/django.po
-django/conf/locale/lv/LC_MESSAGES/djangojs.mo
-django/conf/locale/lv/LC_MESSAGES/djangojs.po
-django/conf/locale/mk/__init__.py
-django/conf/locale/mk/formats.py
-django/conf/locale/mk/LC_MESSAGES/django.mo
-django/conf/locale/mk/LC_MESSAGES/django.po
-django/conf/locale/mk/LC_MESSAGES/djangojs.mo
-django/conf/locale/mk/LC_MESSAGES/djangojs.po
-django/conf/locale/ml/__init__.py
-django/conf/locale/ml/formats.py
-django/conf/locale/ml/LC_MESSAGES/django.mo
-django/conf/locale/ml/LC_MESSAGES/django.po
-django/conf/locale/ml/LC_MESSAGES/djangojs.mo
-django/conf/locale/ml/LC_MESSAGES/djangojs.po
-django/conf/locale/mn/__init__.py
-django/conf/locale/mn/formats.py
-django/conf/locale/mn/LC_MESSAGES/django.mo
-django/conf/locale/mn/LC_MESSAGES/django.po
-django/conf/locale/mn/LC_MESSAGES/djangojs.mo
-django/conf/locale/mn/LC_MESSAGES/djangojs.po
-django/conf/locale/nb/__init__.py
-django/conf/locale/nb/formats.py
-django/conf/locale/nb/LC_MESSAGES/django.mo
-django/conf/locale/nb/LC_MESSAGES/django.po
-django/conf/locale/nb/LC_MESSAGES/djangojs.mo
-django/conf/locale/nb/LC_MESSAGES/djangojs.po
-django/conf/locale/nl/__init__.py
-django/conf/locale/nl/formats.py
-django/conf/locale/nl/LC_MESSAGES/django.mo
-django/conf/locale/nl/LC_MESSAGES/django.po
-django/conf/locale/nl/LC_MESSAGES/djangojs.mo
-django/conf/locale/nl/LC_MESSAGES/djangojs.po
-django/conf/locale/nn/__init__.py
-django/conf/locale/nn/formats.py
-django/conf/locale/nn/LC_MESSAGES/django.mo
-django/conf/locale/nn/LC_MESSAGES/django.po
-django/conf/locale/nn/LC_MESSAGES/djangojs.mo
-django/conf/locale/nn/LC_MESSAGES/djangojs.po
-django/conf/locale/no/__init__.py
-django/conf/locale/no/formats.py
-django/conf/locale/no/LC_MESSAGES/django.mo
-django/conf/locale/no/LC_MESSAGES/django.po
-django/conf/locale/no/LC_MESSAGES/djangojs.mo
-django/conf/locale/no/LC_MESSAGES/djangojs.po
-django/conf/locale/pl/__init__.py
-django/conf/locale/pl/formats.py
-django/conf/locale/pl/LC_MESSAGES/django.mo
-django/conf/locale/pl/LC_MESSAGES/django.po
-django/conf/locale/pl/LC_MESSAGES/djangojs.mo
-django/conf/locale/pl/LC_MESSAGES/djangojs.po
-django/conf/locale/pt/__init__.py
-django/conf/locale/pt/formats.py
-django/conf/locale/pt/LC_MESSAGES/django.mo
-django/conf/locale/pt/LC_MESSAGES/django.po
-django/conf/locale/pt/LC_MESSAGES/djangojs.mo
-django/conf/locale/pt/LC_MESSAGES/djangojs.po
-django/conf/locale/pt_BR/__init__.py
-django/conf/locale/pt_BR/formats.py
-django/conf/locale/pt_BR/LC_MESSAGES/django.mo
-django/conf/locale/pt_BR/LC_MESSAGES/django.po
-django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo
-django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po
-django/conf/locale/ro/__init__.py
-django/conf/locale/ro/formats.py
-django/conf/locale/ro/LC_MESSAGES/django.mo
-django/conf/locale/ro/LC_MESSAGES/django.po
-django/conf/locale/ro/LC_MESSAGES/djangojs.mo
-django/conf/locale/ro/LC_MESSAGES/djangojs.po
-django/conf/locale/ru/__init__.py
-django/conf/locale/ru/formats.py
-django/conf/locale/ru/LC_MESSAGES/django.mo
-django/conf/locale/ru/LC_MESSAGES/django.po
-django/conf/locale/ru/LC_MESSAGES/djangojs.mo
-django/conf/locale/ru/LC_MESSAGES/djangojs.po
-django/conf/locale/sk/__init__.py
-django/conf/locale/sk/formats.py
-django/conf/locale/sk/LC_MESSAGES/django.mo
-django/conf/locale/sk/LC_MESSAGES/django.po
-django/conf/locale/sk/LC_MESSAGES/djangojs.mo
-django/conf/locale/sk/LC_MESSAGES/djangojs.po
-django/conf/locale/sl/__init__.py
-django/conf/locale/sl/formats.py
-django/conf/locale/sl/LC_MESSAGES/django.mo
-django/conf/locale/sl/LC_MESSAGES/django.po
-django/conf/locale/sl/LC_MESSAGES/djangojs.mo
-django/conf/locale/sl/LC_MESSAGES/djangojs.po
-django/conf/locale/sq/__init__.py
-django/conf/locale/sq/formats.py
-django/conf/locale/sq/LC_MESSAGES/django.mo
-django/conf/locale/sq/LC_MESSAGES/django.po
-django/conf/locale/sq/LC_MESSAGES/djangojs.mo
-django/conf/locale/sq/LC_MESSAGES/djangojs.po
-django/conf/locale/sr/__init__.py
-django/conf/locale/sr/formats.py
-django/conf/locale/sr/LC_MESSAGES/django.mo
-django/conf/locale/sr/LC_MESSAGES/django.po
-django/conf/locale/sr/LC_MESSAGES/djangojs.mo
-django/conf/locale/sr/LC_MESSAGES/djangojs.po
-django/conf/locale/sr_Latn/__init__.py
-django/conf/locale/sr_Latn/formats.py
-django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
-django/conf/locale/sr_Latn/LC_MESSAGES/django.po
-django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.mo
-django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.po
-django/conf/locale/sv/__init__.py
-django/conf/locale/sv/formats.py
-django/conf/locale/sv/LC_MESSAGES/django.mo
-django/conf/locale/sv/LC_MESSAGES/django.po
-django/conf/locale/sv/LC_MESSAGES/djangojs.mo
-django/conf/locale/sv/LC_MESSAGES/djangojs.po
-django/conf/locale/ta/__init__.py
-django/conf/locale/ta/formats.py
-django/conf/locale/ta/LC_MESSAGES/django.mo
-django/conf/locale/ta/LC_MESSAGES/django.po
-django/conf/locale/ta/LC_MESSAGES/djangojs.mo
-django/conf/locale/ta/LC_MESSAGES/djangojs.po
-django/conf/locale/te/__init__.py
-django/conf/locale/te/formats.py
-django/conf/locale/te/LC_MESSAGES/django.mo
-django/conf/locale/te/LC_MESSAGES/django.po
-django/conf/locale/te/LC_MESSAGES/djangojs.mo
-django/conf/locale/te/LC_MESSAGES/djangojs.po
-django/conf/locale/th/__init__.py
-django/conf/locale/th/formats.py
-django/conf/locale/th/LC_MESSAGES/django.mo
-django/conf/locale/th/LC_MESSAGES/django.po
-django/conf/locale/th/LC_MESSAGES/djangojs.mo
-django/conf/locale/th/LC_MESSAGES/djangojs.po
-django/conf/locale/tr/__init__.py
-django/conf/locale/tr/formats.py
-django/conf/locale/tr/LC_MESSAGES/django.mo
-django/conf/locale/tr/LC_MESSAGES/django.po
-django/conf/locale/tr/LC_MESSAGES/djangojs.mo
-django/conf/locale/tr/LC_MESSAGES/djangojs.po
-django/conf/locale/uk/__init__.py
-django/conf/locale/uk/formats.py
-django/conf/locale/uk/LC_MESSAGES/django.mo
-django/conf/locale/uk/LC_MESSAGES/django.po
-django/conf/locale/uk/LC_MESSAGES/djangojs.mo
-django/conf/locale/uk/LC_MESSAGES/djangojs.po
-django/conf/locale/vi/__init__.py
-django/conf/locale/vi/formats.py
-django/conf/locale/vi/LC_MESSAGES/django.mo
-django/conf/locale/vi/LC_MESSAGES/django.po
-django/conf/locale/vi/LC_MESSAGES/djangojs.mo
-django/conf/locale/vi/LC_MESSAGES/djangojs.po
-django/conf/locale/zh_CN/__init__.py
-django/conf/locale/zh_CN/formats.py
-django/conf/locale/zh_CN/LC_MESSAGES/django.mo
-django/conf/locale/zh_CN/LC_MESSAGES/django.po
-django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
-django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
-django/conf/locale/zh_TW/__init__.py
-django/conf/locale/zh_TW/formats.py
-django/conf/locale/zh_TW/LC_MESSAGES/django.mo
-django/conf/locale/zh_TW/LC_MESSAGES/django.po
-django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo
-django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po
-django/conf/project_template/__init__.py
-django/conf/project_template/manage.py
-django/conf/project_template/settings.py
-django/conf/project_template/urls.py
-django/conf/urls/__init__.py
-django/conf/urls/defaults.py
-django/conf/urls/i18n.py
-django/conf/urls/shortcut.py
-django/contrib/__init__.py
-django/contrib/admin/__init__.py
-django/contrib/admin/actions.py
-django/contrib/admin/filterspecs.py
-django/contrib/admin/helpers.py
-django/contrib/admin/models.py
-django/contrib/admin/options.py
-django/contrib/admin/sites.py
-django/contrib/admin/util.py
-django/contrib/admin/validation.py
-django/contrib/admin/widgets.py
-django/contrib/admin/media/css/base.css
-django/contrib/admin/media/css/changelists.css
-django/contrib/admin/media/css/dashboard.css
-django/contrib/admin/media/css/forms.css
-django/contrib/admin/media/css/ie.css
-django/contrib/admin/media/css/login.css
-django/contrib/admin/media/css/rtl.css
-django/contrib/admin/media/css/widgets.css
-django/contrib/admin/media/img/admin/arrow-down.gif
-django/contrib/admin/media/img/admin/arrow-up.gif
-django/contrib/admin/media/img/admin/changelist-bg.gif
-django/contrib/admin/media/img/admin/changelist-bg_rtl.gif
-django/contrib/admin/media/img/admin/chooser-bg.gif
-django/contrib/admin/media/img/admin/chooser_stacked-bg.gif
-django/contrib/admin/media/img/admin/default-bg-reverse.gif
-django/contrib/admin/media/img/admin/default-bg.gif
-django/contrib/admin/media/img/admin/deleted-overlay.gif
-django/contrib/admin/media/img/admin/icon-no.gif
-django/contrib/admin/media/img/admin/icon-unknown.gif
-django/contrib/admin/media/img/admin/icon-yes.gif
-django/contrib/admin/media/img/admin/icon_addlink.gif
-django/contrib/admin/media/img/admin/icon_alert.gif
-django/contrib/admin/media/img/admin/icon_calendar.gif
-django/contrib/admin/media/img/admin/icon_changelink.gif
-django/contrib/admin/media/img/admin/icon_clock.gif
-django/contrib/admin/media/img/admin/icon_deletelink.gif
-django/contrib/admin/media/img/admin/icon_error.gif
-django/contrib/admin/media/img/admin/icon_searchbox.png
-django/contrib/admin/media/img/admin/icon_success.gif
-django/contrib/admin/media/img/admin/inline-delete-8bit.png
-django/contrib/admin/media/img/admin/inline-delete.png
-django/contrib/admin/media/img/admin/inline-restore-8bit.png
-django/contrib/admin/media/img/admin/inline-restore.png
-django/contrib/admin/media/img/admin/inline-splitter-bg.gif
-django/contrib/admin/media/img/admin/nav-bg-grabber.gif
-django/contrib/admin/media/img/admin/nav-bg-reverse.gif
-django/contrib/admin/media/img/admin/nav-bg.gif
-django/contrib/admin/media/img/admin/selector-add.gif
-django/contrib/admin/media/img/admin/selector-addall.gif
-django/contrib/admin/media/img/admin/selector-remove.gif
-django/contrib/admin/media/img/admin/selector-removeall.gif
-django/contrib/admin/media/img/admin/selector-search.gif
-django/contrib/admin/media/img/admin/selector_stacked-add.gif
-django/contrib/admin/media/img/admin/selector_stacked-remove.gif
-django/contrib/admin/media/img/admin/tool-left.gif
-django/contrib/admin/media/img/admin/tool-left_over.gif
-django/contrib/admin/media/img/admin/tool-right.gif
-django/contrib/admin/media/img/admin/tool-right_over.gif
-django/contrib/admin/media/img/admin/tooltag-add.gif
-django/contrib/admin/media/img/admin/tooltag-add_over.gif
-django/contrib/admin/media/img/admin/tooltag-arrowright.gif
-django/contrib/admin/media/img/admin/tooltag-arrowright_over.gif
-django/contrib/admin/media/img/gis/move_vertex_off.png
-django/contrib/admin/media/img/gis/move_vertex_on.png
-django/contrib/admin/media/js/LICENSE-JQUERY.txt
-django/contrib/admin/media/js/SelectBox.js
-django/contrib/admin/media/js/SelectFilter2.js
-django/contrib/admin/media/js/actions.js
-django/contrib/admin/media/js/actions.min.js
-django/contrib/admin/media/js/calendar.js
-django/contrib/admin/media/js/collapse.js
-django/contrib/admin/media/js/collapse.min.js
-django/contrib/admin/media/js/compress.py
-django/contrib/admin/media/js/core.js
-django/contrib/admin/media/js/dateparse.js
-django/contrib/admin/media/js/getElementsBySelector.js
-django/contrib/admin/media/js/inlines.js
-django/contrib/admin/media/js/inlines.min.js
-django/contrib/admin/media/js/jquery.init.js
-django/contrib/admin/media/js/jquery.js
-django/contrib/admin/media/js/jquery.min.js
-django/contrib/admin/media/js/prepopulate.js
-django/contrib/admin/media/js/prepopulate.min.js
-django/contrib/admin/media/js/timeparse.js
-django/contrib/admin/media/js/urlify.js
-django/contrib/admin/media/js/admin/DateTimeShortcuts.js
-django/contrib/admin/media/js/admin/RelatedObjectLookups.js
-django/contrib/admin/media/js/admin/ordering.js
-django/contrib/admin/templates/admin/404.html
-django/contrib/admin/templates/admin/500.html
-django/contrib/admin/templates/admin/actions.html
-django/contrib/admin/templates/admin/app_index.html
-django/contrib/admin/templates/admin/base.html
-django/contrib/admin/templates/admin/base_site.html
-django/contrib/admin/templates/admin/change_form.html
-django/contrib/admin/templates/admin/change_list.html
-django/contrib/admin/templates/admin/change_list_results.html
-django/contrib/admin/templates/admin/date_hierarchy.html
-django/contrib/admin/templates/admin/delete_confirmation.html
-django/contrib/admin/templates/admin/delete_selected_confirmation.html
-django/contrib/admin/templates/admin/filter.html
-django/contrib/admin/templates/admin/index.html
-django/contrib/admin/templates/admin/invalid_setup.html
-django/contrib/admin/templates/admin/login.html
-django/contrib/admin/templates/admin/object_history.html
-django/contrib/admin/templates/admin/pagination.html
-django/contrib/admin/templates/admin/prepopulated_fields_js.html
-django/contrib/admin/templates/admin/search_form.html
-django/contrib/admin/templates/admin/submit_line.html
-django/contrib/admin/templates/admin/auth/user/add_form.html
-django/contrib/admin/templates/admin/auth/user/change_password.html
-django/contrib/admin/templates/admin/edit_inline/stacked.html
-django/contrib/admin/templates/admin/edit_inline/tabular.html
-django/contrib/admin/templates/admin/includes/fieldset.html
-django/contrib/admin/templates/registration/logged_out.html
-django/contrib/admin/templates/registration/password_change_done.html
-django/contrib/admin/templates/registration/password_change_form.html
-django/contrib/admin/templates/registration/password_reset_complete.html
-django/contrib/admin/templates/registration/password_reset_confirm.html
-django/contrib/admin/templates/registration/password_reset_done.html
-django/contrib/admin/templates/registration/password_reset_email.html
-django/contrib/admin/templates/registration/password_reset_form.html
-django/contrib/admin/templatetags/__init__.py
-django/contrib/admin/templatetags/admin_list.py
-django/contrib/admin/templatetags/admin_modify.py
-django/contrib/admin/templatetags/adminmedia.py
-django/contrib/admin/templatetags/log.py
-django/contrib/admin/views/__init__.py
-django/contrib/admin/views/decorators.py
-django/contrib/admin/views/main.py
-django/contrib/admindocs/__init__.py
-django/contrib/admindocs/models.py
-django/contrib/admindocs/urls.py
-django/contrib/admindocs/utils.py
-django/contrib/admindocs/views.py
-django/contrib/admindocs/templates/admin_doc/bookmarklets.html
-django/contrib/admindocs/templates/admin_doc/index.html
-django/contrib/admindocs/templates/admin_doc/missing_docutils.html
-django/contrib/admindocs/templates/admin_doc/model_detail.html
-django/contrib/admindocs/templates/admin_doc/model_index.html
-django/contrib/admindocs/templates/admin_doc/template_detail.html
-django/contrib/admindocs/templates/admin_doc/template_filter_index.html
-django/contrib/admindocs/templates/admin_doc/template_tag_index.html
-django/contrib/admindocs/templates/admin_doc/view_detail.html
-django/contrib/admindocs/templates/admin_doc/view_index.html
-django/contrib/admindocs/tests/__init__.py
-django/contrib/admindocs/tests/fields.py
-django/contrib/auth/__init__.py
-django/contrib/auth/admin.py
-django/contrib/auth/backends.py
-django/contrib/auth/context_processors.py
-django/contrib/auth/create_superuser.py
-django/contrib/auth/decorators.py
-django/contrib/auth/forms.py
-django/contrib/auth/middleware.py
-django/contrib/auth/models.py
-django/contrib/auth/tokens.py
-django/contrib/auth/urls.py
-django/contrib/auth/views.py
-django/contrib/auth/fixtures/authtestdata.json
-django/contrib/auth/handlers/__init__.py
-django/contrib/auth/handlers/modpython.py
-django/contrib/auth/management/__init__.py
-django/contrib/auth/management/commands/__init__.py
-django/contrib/auth/management/commands/changepassword.py
-django/contrib/auth/management/commands/createsuperuser.py
-django/contrib/auth/tests/__init__.py
-django/contrib/auth/tests/auth_backends.py
-django/contrib/auth/tests/basic.py
-django/contrib/auth/tests/decorators.py
-django/contrib/auth/tests/forms.py
-django/contrib/auth/tests/models.py
-django/contrib/auth/tests/remote_user.py
-django/contrib/auth/tests/tokens.py
-django/contrib/auth/tests/urls.py
-django/contrib/auth/tests/views.py
-django/contrib/auth/tests/templates/registration/logged_out.html
-django/contrib/auth/tests/templates/registration/login.html
-django/contrib/auth/tests/templates/registration/password_change_form.html
-django/contrib/auth/tests/templates/registration/password_reset_complete.html
-django/contrib/auth/tests/templates/registration/password_reset_confirm.html
-django/contrib/auth/tests/templates/registration/password_reset_done.html
-django/contrib/auth/tests/templates/registration/password_reset_email.html
-django/contrib/auth/tests/templates/registration/password_reset_form.html
-django/contrib/comments/__init__.py
-django/contrib/comments/admin.py
-django/contrib/comments/feeds.py
-django/contrib/comments/forms.py
-django/contrib/comments/managers.py
-django/contrib/comments/models.py
-django/contrib/comments/moderation.py
-django/contrib/comments/signals.py
-django/contrib/comments/urls.py
-django/contrib/comments/templates/comments/400-debug.html
-django/contrib/comments/templates/comments/approve.html
-django/contrib/comments/templates/comments/approved.html
-django/contrib/comments/templates/comments/base.html
-django/contrib/comments/templates/comments/delete.html
-django/contrib/comments/templates/comments/deleted.html
-django/contrib/comments/templates/comments/flag.html
-django/contrib/comments/templates/comments/flagged.html
-django/contrib/comments/templates/comments/form.html
-django/contrib/comments/templates/comments/list.html
-django/contrib/comments/templates/comments/posted.html
-django/contrib/comments/templates/comments/preview.html
-django/contrib/comments/templatetags/__init__.py
-django/contrib/comments/templatetags/comments.py
-django/contrib/comments/views/__init__.py
-django/contrib/comments/views/comments.py
-django/contrib/comments/views/moderation.py
-django/contrib/comments/views/utils.py
-django/contrib/contenttypes/__init__.py
-django/contrib/contenttypes/generic.py
-django/contrib/contenttypes/management.py
-django/contrib/contenttypes/models.py
-django/contrib/contenttypes/tests.py
-django/contrib/contenttypes/views.py
-django/contrib/csrf/__init__.py
-django/contrib/csrf/middleware.py
-django/contrib/databrowse/__init__.py
-django/contrib/databrowse/datastructures.py
-django/contrib/databrowse/sites.py
-django/contrib/databrowse/urls.py
-django/contrib/databrowse/views.py
-django/contrib/databrowse/plugins/__init__.py
-django/contrib/databrowse/plugins/calendars.py
-django/contrib/databrowse/plugins/fieldchoices.py
-django/contrib/databrowse/plugins/objects.py
-django/contrib/databrowse/templates/databrowse/base.html
-django/contrib/databrowse/templates/databrowse/base_site.html
-django/contrib/databrowse/templates/databrowse/calendar_day.html
-django/contrib/databrowse/templates/databrowse/calendar_homepage.html
-django/contrib/databrowse/templates/databrowse/calendar_main.html
-django/contrib/databrowse/templates/databrowse/calendar_month.html
-django/contrib/databrowse/templates/databrowse/calendar_year.html
-django/contrib/databrowse/templates/databrowse/choice_detail.html
-django/contrib/databrowse/templates/databrowse/choice_list.html
-django/contrib/databrowse/templates/databrowse/fieldchoice_detail.html
-django/contrib/databrowse/templates/databrowse/fieldchoice_homepage.html
-django/contrib/databrowse/templates/databrowse/fieldchoice_list.html
-django/contrib/databrowse/templates/databrowse/homepage.html
-django/contrib/databrowse/templates/databrowse/model_detail.html
-django/contrib/databrowse/templates/databrowse/object_detail.html
-django/contrib/flatpages/__init__.py
-django/contrib/flatpages/admin.py
-django/contrib/flatpages/middleware.py
-django/contrib/flatpages/models.py
-django/contrib/flatpages/urls.py
-django/contrib/flatpages/views.py
-django/contrib/flatpages/fixtures/sample_flatpages.json
-django/contrib/flatpages/tests/__init__.py
-django/contrib/flatpages/tests/csrf.py
-django/contrib/flatpages/tests/middleware.py
-django/contrib/flatpages/tests/urls.py
-django/contrib/flatpages/tests/views.py
-django/contrib/flatpages/tests/templates/404.html
-django/contrib/flatpages/tests/templates/flatpages/default.html
-django/contrib/flatpages/tests/templates/registration/login.html
-django/contrib/formtools/__init__.py
-django/contrib/formtools/models.py
-django/contrib/formtools/preview.py
-django/contrib/formtools/test_urls.py
-django/contrib/formtools/tests.py
-django/contrib/formtools/utils.py
-django/contrib/formtools/wizard.py
-django/contrib/formtools/templates/formtools/form.html
-django/contrib/formtools/templates/formtools/preview.html
-django/contrib/gis/__init__.py
-django/contrib/gis/feeds.py
-django/contrib/gis/measure.py
-django/contrib/gis/models.py
-django/contrib/gis/shortcuts.py
-django/contrib/gis/admin/__init__.py
-django/contrib/gis/admin/options.py
-django/contrib/gis/admin/widgets.py
-django/contrib/gis/db/__init__.py
-django/contrib/gis/db/backend/__init__.py
-django/contrib/gis/db/backends/__init__.py
-django/contrib/gis/db/backends/adapter.py
-django/contrib/gis/db/backends/base.py
-django/contrib/gis/db/backends/util.py
-django/contrib/gis/db/backends/mysql/__init__.py
-django/contrib/gis/db/backends/mysql/base.py
-django/contrib/gis/db/backends/mysql/creation.py
-django/contrib/gis/db/backends/mysql/introspection.py
-django/contrib/gis/db/backends/mysql/operations.py
-django/contrib/gis/db/backends/oracle/__init__.py
-django/contrib/gis/db/backends/oracle/adapter.py
-django/contrib/gis/db/backends/oracle/base.py
-django/contrib/gis/db/backends/oracle/compiler.py
-django/contrib/gis/db/backends/oracle/creation.py
-django/contrib/gis/db/backends/oracle/introspection.py
-django/contrib/gis/db/backends/oracle/models.py
-django/contrib/gis/db/backends/oracle/operations.py
-django/contrib/gis/db/backends/postgis/__init__.py
-django/contrib/gis/db/backends/postgis/adapter.py
-django/contrib/gis/db/backends/postgis/base.py
-django/contrib/gis/db/backends/postgis/creation.py
-django/contrib/gis/db/backends/postgis/introspection.py
-django/contrib/gis/db/backends/postgis/models.py
-django/contrib/gis/db/backends/postgis/operations.py
-django/contrib/gis/db/backends/spatialite/__init__.py
-django/contrib/gis/db/backends/spatialite/adapter.py
-django/contrib/gis/db/backends/spatialite/base.py
-django/contrib/gis/db/backends/spatialite/client.py
-django/contrib/gis/db/backends/spatialite/creation.py
-django/contrib/gis/db/backends/spatialite/introspection.py
-django/contrib/gis/db/backends/spatialite/models.py
-django/contrib/gis/db/backends/spatialite/operations.py
-django/contrib/gis/db/models/__init__.py
-django/contrib/gis/db/models/aggregates.py
-django/contrib/gis/db/models/fields.py
-django/contrib/gis/db/models/manager.py
-django/contrib/gis/db/models/proxy.py
-django/contrib/gis/db/models/query.py
-django/contrib/gis/db/models/sql/__init__.py
-django/contrib/gis/db/models/sql/aggregates.py
-django/contrib/gis/db/models/sql/compiler.py
-django/contrib/gis/db/models/sql/conversion.py
-django/contrib/gis/db/models/sql/query.py
-django/contrib/gis/db/models/sql/where.py
-django/contrib/gis/forms/__init__.py
-django/contrib/gis/forms/fields.py
-django/contrib/gis/gdal/LICENSE
-django/contrib/gis/gdal/__init__.py
-django/contrib/gis/gdal/base.py
-django/contrib/gis/gdal/datasource.py
-django/contrib/gis/gdal/driver.py
-django/contrib/gis/gdal/envelope.py
-django/contrib/gis/gdal/error.py
-django/contrib/gis/gdal/feature.py
-django/contrib/gis/gdal/field.py
-django/contrib/gis/gdal/geometries.py
-django/contrib/gis/gdal/geomtype.py
-django/contrib/gis/gdal/layer.py
-django/contrib/gis/gdal/libgdal.py
-django/contrib/gis/gdal/srs.py
-django/contrib/gis/gdal/prototypes/__init__.py
-django/contrib/gis/gdal/prototypes/ds.py
-django/contrib/gis/gdal/prototypes/errcheck.py
-django/contrib/gis/gdal/prototypes/generation.py
-django/contrib/gis/gdal/prototypes/geom.py
-django/contrib/gis/gdal/prototypes/srs.py
-django/contrib/gis/gdal/tests/__init__.py
-django/contrib/gis/gdal/tests/test_driver.py
-django/contrib/gis/gdal/tests/test_ds.py
-django/contrib/gis/gdal/tests/test_envelope.py
-django/contrib/gis/gdal/tests/test_geom.py
-django/contrib/gis/gdal/tests/test_srs.py
-django/contrib/gis/geometry/__init__.py
-django/contrib/gis/geometry/regex.py
-django/contrib/gis/geometry/test_data.py
-django/contrib/gis/geometry/backend/__init__.py
-django/contrib/gis/geometry/backend/geos.py
-django/contrib/gis/geos/LICENSE
-django/contrib/gis/geos/__init__.py
-django/contrib/gis/geos/base.py
-django/contrib/gis/geos/collections.py
-django/contrib/gis/geos/coordseq.py
-django/contrib/gis/geos/error.py
-django/contrib/gis/geos/factory.py
-django/contrib/gis/geos/geometry.py
-django/contrib/gis/geos/io.py
-django/contrib/gis/geos/libgeos.py
-django/contrib/gis/geos/linestring.py
-django/contrib/gis/geos/mutable_list.py
-django/contrib/gis/geos/point.py
-django/contrib/gis/geos/polygon.py
-django/contrib/gis/geos/prepared.py
-django/contrib/gis/geos/prototypes/__init__.py
-django/contrib/gis/geos/prototypes/coordseq.py
-django/contrib/gis/geos/prototypes/errcheck.py
-django/contrib/gis/geos/prototypes/geom.py
-django/contrib/gis/geos/prototypes/io.py
-django/contrib/gis/geos/prototypes/misc.py
-django/contrib/gis/geos/prototypes/predicates.py
-django/contrib/gis/geos/prototypes/prepared.py
-django/contrib/gis/geos/prototypes/threadsafe.py
-django/contrib/gis/geos/prototypes/topology.py
-django/contrib/gis/geos/tests/__init__.py
-django/contrib/gis/geos/tests/test_geos.py
-django/contrib/gis/geos/tests/test_geos_mutation.py
-django/contrib/gis/geos/tests/test_io.py
-django/contrib/gis/geos/tests/test_mutable_list.py
-django/contrib/gis/management/__init__.py
-django/contrib/gis/management/base.py
-django/contrib/gis/management/commands/__init__.py
-django/contrib/gis/management/commands/inspectdb.py
-django/contrib/gis/management/commands/ogrinspect.py
-django/contrib/gis/maps/__init__.py
-django/contrib/gis/maps/google/__init__.py
-django/contrib/gis/maps/google/gmap.py
-django/contrib/gis/maps/google/overlays.py
-django/contrib/gis/maps/google/zoom.py
-django/contrib/gis/maps/openlayers/__init__.py
-django/contrib/gis/sitemaps/__init__.py
-django/contrib/gis/sitemaps/georss.py
-django/contrib/gis/sitemaps/kml.py
-django/contrib/gis/sitemaps/views.py
-django/contrib/gis/templates/gis/admin/openlayers.html
-django/contrib/gis/templates/gis/admin/openlayers.js
-django/contrib/gis/templates/gis/admin/osm.html
-django/contrib/gis/templates/gis/admin/osm.js
-django/contrib/gis/templates/gis/google/google-map.html
-django/contrib/gis/templates/gis/google/google-map.js
-django/contrib/gis/templates/gis/google/google-multi.js
-django/contrib/gis/templates/gis/google/google-single.js
-django/contrib/gis/templates/gis/kml/base.kml
-django/contrib/gis/templates/gis/kml/placemarks.kml
-django/contrib/gis/templates/gis/sitemaps/geo_sitemap.xml
-django/contrib/gis/tests/__init__.py
-django/contrib/gis/tests/test_geoforms.py
-django/contrib/gis/tests/test_geoip.py
-django/contrib/gis/tests/test_measure.py
-django/contrib/gis/tests/test_spatialrefsys.py
-django/contrib/gis/tests/utils.py
-django/contrib/gis/tests/data/geometries.json.gz
-django/contrib/gis/tests/data/cities/cities.dbf
-django/contrib/gis/tests/data/cities/cities.prj
-django/contrib/gis/tests/data/cities/cities.shp
-django/contrib/gis/tests/data/cities/cities.shx
-django/contrib/gis/tests/data/counties/counties.dbf
-django/contrib/gis/tests/data/counties/counties.shp
-django/contrib/gis/tests/data/counties/counties.shx
-django/contrib/gis/tests/data/interstates/interstates.dbf
-django/contrib/gis/tests/data/interstates/interstates.prj
-django/contrib/gis/tests/data/interstates/interstates.shp
-django/contrib/gis/tests/data/interstates/interstates.shx
-django/contrib/gis/tests/data/test_point/test_point.dbf
-django/contrib/gis/tests/data/test_point/test_point.prj
-django/contrib/gis/tests/data/test_point/test_point.shp
-django/contrib/gis/tests/data/test_point/test_point.shx
-django/contrib/gis/tests/data/test_poly/test_poly.dbf
-django/contrib/gis/tests/data/test_poly/test_poly.prj
-django/contrib/gis/tests/data/test_poly/test_poly.shp
-django/contrib/gis/tests/data/test_poly/test_poly.shx
-django/contrib/gis/tests/data/test_vrt/test_vrt.csv
-django/contrib/gis/tests/data/test_vrt/test_vrt.vrt
-django/contrib/gis/tests/distapp/__init__.py
-django/contrib/gis/tests/distapp/models.py
-django/contrib/gis/tests/distapp/tests.py
-django/contrib/gis/tests/geo3d/__init__.py
-django/contrib/gis/tests/geo3d/models.py
-django/contrib/gis/tests/geo3d/tests.py
-django/contrib/gis/tests/geo3d/views.py
-django/contrib/gis/tests/geoapp/__init__.py
-django/contrib/gis/tests/geoapp/feeds.py
-django/contrib/gis/tests/geoapp/models.py
-django/contrib/gis/tests/geoapp/sitemaps.py
-django/contrib/gis/tests/geoapp/test_feeds.py
-django/contrib/gis/tests/geoapp/test_regress.py
-django/contrib/gis/tests/geoapp/test_sitemaps.py
-django/contrib/gis/tests/geoapp/tests.py
-django/contrib/gis/tests/geoapp/urls.py
-django/contrib/gis/tests/geoapp/fixtures/initial_data.json.gz
-django/contrib/gis/tests/geogapp/__init__.py
-django/contrib/gis/tests/geogapp/models.py
-django/contrib/gis/tests/geogapp/tests.py
-django/contrib/gis/tests/geogapp/fixtures/initial_data.json
-django/contrib/gis/tests/layermap/__init__.py
-django/contrib/gis/tests/layermap/models.py
-django/contrib/gis/tests/layermap/tests.py
-django/contrib/gis/tests/relatedapp/__init__.py
-django/contrib/gis/tests/relatedapp/models.py
-django/contrib/gis/tests/relatedapp/tests.py
-django/contrib/gis/utils/__init__.py
-django/contrib/gis/utils/geoip.py
-django/contrib/gis/utils/layermapping.py
-django/contrib/gis/utils/ogrinfo.py
-django/contrib/gis/utils/ogrinspect.py
-django/contrib/gis/utils/srs.py
-django/contrib/gis/utils/wkt.py
-django/contrib/humanize/__init__.py
-django/contrib/humanize/templatetags/__init__.py
-django/contrib/humanize/templatetags/humanize.py
-django/contrib/localflavor/__init__.py
-django/contrib/localflavor/ar/__init__.py
-django/contrib/localflavor/ar/ar_provinces.py
-django/contrib/localflavor/ar/forms.py
-django/contrib/localflavor/at/__init__.py
-django/contrib/localflavor/at/at_states.py
-django/contrib/localflavor/at/forms.py
-django/contrib/localflavor/au/__init__.py
-django/contrib/localflavor/au/au_states.py
-django/contrib/localflavor/au/forms.py
-django/contrib/localflavor/br/__init__.py
-django/contrib/localflavor/br/br_states.py
-django/contrib/localflavor/br/forms.py
-django/contrib/localflavor/ca/__init__.py
-django/contrib/localflavor/ca/ca_provinces.py
-django/contrib/localflavor/ca/forms.py
-django/contrib/localflavor/ch/__init__.py
-django/contrib/localflavor/ch/ch_states.py
-django/contrib/localflavor/ch/forms.py
-django/contrib/localflavor/cl/__init__.py
-django/contrib/localflavor/cl/cl_regions.py
-django/contrib/localflavor/cl/forms.py
-django/contrib/localflavor/cz/__init__.py
-django/contrib/localflavor/cz/cz_regions.py
-django/contrib/localflavor/cz/forms.py
-django/contrib/localflavor/de/__init__.py
-django/contrib/localflavor/de/de_states.py
-django/contrib/localflavor/de/forms.py
-django/contrib/localflavor/es/__init__.py
-django/contrib/localflavor/es/es_provinces.py
-django/contrib/localflavor/es/es_regions.py
-django/contrib/localflavor/es/forms.py
-django/contrib/localflavor/fi/__init__.py
-django/contrib/localflavor/fi/fi_municipalities.py
-django/contrib/localflavor/fi/forms.py
-django/contrib/localflavor/fr/__init__.py
-django/contrib/localflavor/fr/forms.py
-django/contrib/localflavor/fr/fr_department.py
-django/contrib/localflavor/generic/__init__.py
-django/contrib/localflavor/generic/forms.py
-django/contrib/localflavor/id/__init__.py
-django/contrib/localflavor/id/forms.py
-django/contrib/localflavor/id/id_choices.py
-django/contrib/localflavor/ie/__init__.py
-django/contrib/localflavor/ie/forms.py
-django/contrib/localflavor/ie/ie_counties.py
-django/contrib/localflavor/in_/__init__.py
-django/contrib/localflavor/in_/forms.py
-django/contrib/localflavor/in_/in_states.py
-django/contrib/localflavor/is_/__init__.py
-django/contrib/localflavor/is_/forms.py
-django/contrib/localflavor/is_/is_postalcodes.py
-django/contrib/localflavor/it/__init__.py
-django/contrib/localflavor/it/forms.py
-django/contrib/localflavor/it/it_province.py
-django/contrib/localflavor/it/it_region.py
-django/contrib/localflavor/it/util.py
-django/contrib/localflavor/jp/__init__.py
-django/contrib/localflavor/jp/forms.py
-django/contrib/localflavor/jp/jp_prefectures.py
-django/contrib/localflavor/kw/__init__.py
-django/contrib/localflavor/kw/forms.py
-django/contrib/localflavor/mx/__init__.py
-django/contrib/localflavor/mx/forms.py
-django/contrib/localflavor/mx/mx_states.py
-django/contrib/localflavor/nl/__init__.py
-django/contrib/localflavor/nl/forms.py
-django/contrib/localflavor/nl/nl_provinces.py
-django/contrib/localflavor/no/__init__.py
-django/contrib/localflavor/no/forms.py
-django/contrib/localflavor/no/no_municipalities.py
-django/contrib/localflavor/pe/__init__.py
-django/contrib/localflavor/pe/forms.py
-django/contrib/localflavor/pe/pe_region.py
-django/contrib/localflavor/pl/__init__.py
-django/contrib/localflavor/pl/forms.py
-django/contrib/localflavor/pl/pl_administrativeunits.py
-django/contrib/localflavor/pl/pl_voivodeships.py
-django/contrib/localflavor/pt/__init__.py
-django/contrib/localflavor/pt/forms.py
-django/contrib/localflavor/ro/__init__.py
-django/contrib/localflavor/ro/forms.py
-django/contrib/localflavor/ro/ro_counties.py
-django/contrib/localflavor/se/__init__.py
-django/contrib/localflavor/se/forms.py
-django/contrib/localflavor/se/se_counties.py
-django/contrib/localflavor/se/utils.py
-django/contrib/localflavor/sk/__init__.py
-django/contrib/localflavor/sk/forms.py
-django/contrib/localflavor/sk/sk_districts.py
-django/contrib/localflavor/sk/sk_regions.py
-django/contrib/localflavor/uk/__init__.py
-django/contrib/localflavor/uk/forms.py
-django/contrib/localflavor/uk/uk_regions.py
-django/contrib/localflavor/us/__init__.py
-django/contrib/localflavor/us/forms.py
-django/contrib/localflavor/us/models.py
-django/contrib/localflavor/us/us_states.py
-django/contrib/localflavor/uy/__init__.py
-django/contrib/localflavor/uy/forms.py
-django/contrib/localflavor/uy/util.py
-django/contrib/localflavor/uy/uy_departaments.py
-django/contrib/localflavor/za/__init__.py
-django/contrib/localflavor/za/forms.py
-django/contrib/localflavor/za/za_provinces.py
-django/contrib/markup/__init__.py
-django/contrib/markup/models.py
-django/contrib/markup/tests.py
-django/contrib/markup/templatetags/__init__.py
-django/contrib/markup/templatetags/markup.py
-django/contrib/messages/__init__.py
-django/contrib/messages/api.py
-django/contrib/messages/constants.py
-django/contrib/messages/context_processors.py
-django/contrib/messages/middleware.py
-django/contrib/messages/models.py
-django/contrib/messages/utils.py
-django/contrib/messages/storage/__init__.py
-django/contrib/messages/storage/base.py
-django/contrib/messages/storage/cookie.py
-django/contrib/messages/storage/fallback.py
-django/contrib/messages/storage/session.py
-django/contrib/messages/storage/user_messages.py
-django/contrib/messages/tests/__init__.py
-django/contrib/messages/tests/base.py
-django/contrib/messages/tests/cookie.py
-django/contrib/messages/tests/fallback.py
-django/contrib/messages/tests/middleware.py
-django/contrib/messages/tests/session.py
-django/contrib/messages/tests/urls.py
-django/contrib/messages/tests/user_messages.py
-django/contrib/redirects/__init__.py
-django/contrib/redirects/admin.py
-django/contrib/redirects/middleware.py
-django/contrib/redirects/models.py
-django/contrib/sessions/__init__.py
-django/contrib/sessions/middleware.py
-django/contrib/sessions/models.py
-django/contrib/sessions/tests.py
-django/contrib/sessions/backends/__init__.py
-django/contrib/sessions/backends/base.py
-django/contrib/sessions/backends/cache.py
-django/contrib/sessions/backends/cached_db.py
-django/contrib/sessions/backends/db.py
-django/contrib/sessions/backends/file.py
-django/contrib/sitemaps/__init__.py
-django/contrib/sitemaps/models.py
-django/contrib/sitemaps/views.py
-django/contrib/sitemaps/management/__init__.py
-django/contrib/sitemaps/management/commands/__init__.py
-django/contrib/sitemaps/management/commands/ping_google.py
-django/contrib/sitemaps/templates/sitemap.xml
-django/contrib/sitemaps/templates/sitemap_index.xml
-django/contrib/sitemaps/tests/__init__.py
-django/contrib/sitemaps/tests/basic.py
-django/contrib/sitemaps/tests/urls.py
-django/contrib/sites/__init__.py
-django/contrib/sites/admin.py
-django/contrib/sites/management.py
-django/contrib/sites/managers.py
-django/contrib/sites/models.py
-django/contrib/sites/tests.py
-django/contrib/syndication/__init__.py
-django/contrib/syndication/feeds.py
-django/contrib/syndication/views.py
-django/contrib/webdesign/__init__.py
-django/contrib/webdesign/lorem_ipsum.py
-django/contrib/webdesign/models.py
-django/contrib/webdesign/tests.py
-django/contrib/webdesign/templatetags/__init__.py
-django/contrib/webdesign/templatetags/webdesign.py
-django/core/__init__.py
-django/core/context_processors.py
-django/core/exceptions.py
-django/core/paginator.py
-django/core/signals.py
-django/core/template_loader.py
-django/core/urlresolvers.py
-django/core/validators.py
-django/core/xheaders.py
-django/core/cache/__init__.py
-django/core/cache/backends/__init__.py
-django/core/cache/backends/base.py
-django/core/cache/backends/db.py
-django/core/cache/backends/dummy.py
-django/core/cache/backends/filebased.py
-django/core/cache/backends/locmem.py
-django/core/cache/backends/memcached.py
-django/core/files/__init__.py
-django/core/files/base.py
-django/core/files/images.py
-django/core/files/locks.py
-django/core/files/move.py
-django/core/files/storage.py
-django/core/files/temp.py
-django/core/files/uploadedfile.py
-django/core/files/uploadhandler.py
-django/core/files/utils.py
-django/core/handlers/__init__.py
-django/core/handlers/base.py
-django/core/handlers/modpython.py
-django/core/handlers/profiler-hotshot.py
-django/core/handlers/wsgi.py
-django/core/mail/__init__.py
-django/core/mail/message.py
-django/core/mail/utils.py
-django/core/mail/backends/__init__.py
-django/core/mail/backends/base.py
-django/core/mail/backends/console.py
-django/core/mail/backends/dummy.py
-django/core/mail/backends/filebased.py
-django/core/mail/backends/locmem.py
-django/core/mail/backends/smtp.py
-django/core/management/__init__.py
-django/core/management/base.py
-django/core/management/color.py
-django/core/management/sql.py
-django/core/management/validation.py
-django/core/management/commands/__init__.py
-django/core/management/commands/cleanup.py
-django/core/management/commands/compilemessages.py
-django/core/management/commands/createcachetable.py
-django/core/management/commands/dbshell.py
-django/core/management/commands/diffsettings.py
-django/core/management/commands/dumpdata.py
-django/core/management/commands/flush.py
-django/core/management/commands/inspectdb.py
-django/core/management/commands/loaddata.py
-django/core/management/commands/makemessages.py
-django/core/management/commands/reset.py
-django/core/management/commands/runfcgi.py
-django/core/management/commands/runserver.py
-django/core/management/commands/shell.py
-django/core/management/commands/sql.py
-django/core/management/commands/sqlall.py
-django/core/management/commands/sqlclear.py
-django/core/management/commands/sqlcustom.py
-django/core/management/commands/sqlflush.py
-django/core/management/commands/sqlindexes.py
-django/core/management/commands/sqlinitialdata.py
-django/core/management/commands/sqlreset.py
-django/core/management/commands/sqlsequencereset.py
-django/core/management/commands/startapp.py
-django/core/management/commands/startproject.py
-django/core/management/commands/syncdb.py
-django/core/management/commands/test.py
-django/core/management/commands/testserver.py
-django/core/management/commands/validate.py
-django/core/serializers/__init__.py
-django/core/serializers/base.py
-django/core/serializers/json.py
-django/core/serializers/python.py
-django/core/serializers/pyyaml.py
-django/core/serializers/xml_serializer.py
-django/core/servers/__init__.py
-django/core/servers/basehttp.py
-django/core/servers/fastcgi.py
-django/db/__init__.py
-django/db/transaction.py
-django/db/utils.py
-django/db/backends/__init__.py
-django/db/backends/creation.py
-django/db/backends/signals.py
-django/db/backends/util.py
-django/db/backends/dummy/__init__.py
-django/db/backends/dummy/base.py
-django/db/backends/mysql/__init__.py
-django/db/backends/mysql/base.py
-django/db/backends/mysql/client.py
-django/db/backends/mysql/compiler.py
-django/db/backends/mysql/creation.py
-django/db/backends/mysql/introspection.py
-django/db/backends/mysql/validation.py
-django/db/backends/oracle/__init__.py
-django/db/backends/oracle/base.py
-django/db/backends/oracle/client.py
-django/db/backends/oracle/compiler.py
-django/db/backends/oracle/creation.py
-django/db/backends/oracle/introspection.py
-django/db/backends/postgresql/__init__.py
-django/db/backends/postgresql/base.py
-django/db/backends/postgresql/client.py
-django/db/backends/postgresql/creation.py
-django/db/backends/postgresql/introspection.py
-django/db/backends/postgresql/operations.py
-django/db/backends/postgresql/version.py
-django/db/backends/postgresql_psycopg2/__init__.py
-django/db/backends/postgresql_psycopg2/base.py
-django/db/backends/postgresql_psycopg2/introspection.py
-django/db/backends/sqlite3/__init__.py
-django/db/backends/sqlite3/base.py
-django/db/backends/sqlite3/client.py
-django/db/backends/sqlite3/creation.py
-django/db/backends/sqlite3/introspection.py
-django/db/models/__init__.py
-django/db/models/aggregates.py
-django/db/models/base.py
-django/db/models/expressions.py
-django/db/models/loading.py
-django/db/models/manager.py
-django/db/models/options.py
-django/db/models/query.py
-django/db/models/query_utils.py
-django/db/models/related.py
-django/db/models/signals.py
-django/db/models/fields/__init__.py
-django/db/models/fields/files.py
-django/db/models/fields/proxy.py
-django/db/models/fields/related.py
-django/db/models/fields/subclassing.py
-django/db/models/sql/__init__.py
-django/db/models/sql/aggregates.py
-django/db/models/sql/compiler.py
-django/db/models/sql/constants.py
-django/db/models/sql/datastructures.py
-django/db/models/sql/expressions.py
-django/db/models/sql/query.py
-django/db/models/sql/subqueries.py
-django/db/models/sql/where.py
-django/dispatch/__init__.py
-django/dispatch/dispatcher.py
-django/dispatch/license.txt
-django/dispatch/saferef.py
-django/forms/__init__.py
-django/forms/fields.py
-django/forms/forms.py
-django/forms/formsets.py
-django/forms/models.py
-django/forms/util.py
-django/forms/widgets.py
-django/forms/extras/__init__.py
-django/forms/extras/widgets.py
-django/http/__init__.py
-django/http/multipartparser.py
-django/http/utils.py
-django/middleware/__init__.py
-django/middleware/cache.py
-django/middleware/common.py
-django/middleware/csrf.py
-django/middleware/doc.py
-django/middleware/gzip.py
-django/middleware/http.py
-django/middleware/locale.py
-django/middleware/transaction.py
-django/shortcuts/__init__.py
-django/template/__init__.py
-django/template/context.py
-django/template/debug.py
-django/template/defaultfilters.py
-django/template/defaulttags.py
-django/template/loader.py
-django/template/loader_tags.py
-django/template/smartif.py
-django/template/loaders/__init__.py
-django/template/loaders/app_directories.py
-django/template/loaders/cached.py
-django/template/loaders/eggs.py
-django/template/loaders/filesystem.py
-django/templatetags/__init__.py
-django/templatetags/cache.py
-django/templatetags/i18n.py
-django/test/__init__.py
-django/test/_doctest.py
-django/test/client.py
-django/test/signals.py
-django/test/simple.py
-django/test/testcases.py
-django/test/utils.py
-django/utils/__init__.py
-django/utils/_os.py
-django/utils/_threading_local.py
-django/utils/autoreload.py
-django/utils/cache.py
-django/utils/checksums.py
-django/utils/copycompat.py
-django/utils/daemonize.py
-django/utils/datastructures.py
-django/utils/dateformat.py
-django/utils/dates.py
-django/utils/datetime_safe.py
-django/utils/decorators.py
-django/utils/encoding.py
-django/utils/feedgenerator.py
-django/utils/formats.py
-django/utils/functional.py
-django/utils/hashcompat.py
-django/utils/html.py
-django/utils/http.py
-django/utils/importlib.py
-django/utils/itercompat.py
-django/utils/module_loading.py
-django/utils/numberformat.py
-django/utils/regex_helper.py
-django/utils/safestring.py
-django/utils/stopwords.py
-django/utils/synch.py
-django/utils/termcolors.py
-django/utils/text.py
-django/utils/thread_support.py
-django/utils/timesince.py
-django/utils/tree.py
-django/utils/tzinfo.py
-django/utils/version.py
-django/utils/xmlutils.py
-django/utils/simplejson/LICENSE.txt
-django/utils/simplejson/__init__.py
-django/utils/simplejson/decoder.py
-django/utils/simplejson/encoder.py
-django/utils/simplejson/scanner.py
-django/utils/simplejson/tool.py
-django/utils/translation/__init__.py
-django/utils/translation/trans_null.py
-django/utils/translation/trans_real.py
-django/views/__init__.py
-django/views/csrf.py
-django/views/debug.py
-django/views/defaults.py
-django/views/i18n.py
-django/views/static.py
-django/views/decorators/__init__.py
-django/views/decorators/cache.py
-django/views/decorators/csrf.py
-django/views/decorators/gzip.py
-django/views/decorators/http.py
-django/views/decorators/vary.py
-django/views/generic/__init__.py
-django/views/generic/create_update.py
-django/views/generic/date_based.py
-django/views/generic/list_detail.py
-django/views/generic/simple.py
-docs/Makefile
-docs/conf.py
-docs/contents.txt
-docs/glossary.txt
-docs/index.txt
-docs/_ext/applyxrefs.py
-docs/_ext/djangodocs.py
-docs/_ext/literals_to_xrefs.py
-docs/_theme/djangodocs/genindex.html
-docs/_theme/djangodocs/layout.html
-docs/_theme/djangodocs/modindex.html
-docs/_theme/djangodocs/search.html
-docs/_theme/djangodocs/theme.conf
-docs/_theme/djangodocs/static/default.css
-docs/_theme/djangodocs/static/djangodocs.css
-docs/_theme/djangodocs/static/docicons-behindscenes.png
-docs/_theme/djangodocs/static/docicons-note.png
-docs/_theme/djangodocs/static/docicons-philosophy.png
-docs/_theme/djangodocs/static/homepage.css
-docs/_theme/djangodocs/static/reset-fonts-grids.css
-docs/faq/admin.txt
-docs/faq/contributing.txt
-docs/faq/general.txt
-docs/faq/help.txt
-docs/faq/index.txt
-docs/faq/install.txt
-docs/faq/models.txt
-docs/faq/usage.txt
-docs/howto/apache-auth.txt
-docs/howto/auth-remote-user.txt
-docs/howto/custom-file-storage.txt
-docs/howto/custom-management-commands.txt
-docs/howto/custom-model-fields.txt
-docs/howto/custom-template-tags.txt
-docs/howto/error-reporting.txt
-docs/howto/i18n.txt
-docs/howto/index.txt
-docs/howto/initial-data.txt
-docs/howto/jython.txt
-docs/howto/legacy-databases.txt
-docs/howto/outputting-csv.txt
-docs/howto/outputting-pdf.txt
-docs/howto/static-files.txt
-docs/howto/deployment/fastcgi.txt
-docs/howto/deployment/index.txt
-docs/howto/deployment/modpython.txt
-docs/howto/deployment/modwsgi.txt
-docs/internals/committers.txt
-docs/internals/contributing.txt
-docs/internals/deprecation.txt
-docs/internals/documentation.txt
-docs/internals/index.txt
-docs/internals/release-process.txt
-docs/internals/svn.txt
-docs/internals/_images/djangotickets.png
-docs/intro/index.txt
-docs/intro/install.txt
-docs/intro/overview.txt
-docs/intro/tutorial01.txt
-docs/intro/tutorial02.txt
-docs/intro/tutorial03.txt
-docs/intro/tutorial04.txt
-docs/intro/whatsnext.txt
-docs/intro/_images/admin01.png
-docs/intro/_images/admin02.png
-docs/intro/_images/admin02t.png
-docs/intro/_images/admin03.png
-docs/intro/_images/admin03t.png
-docs/intro/_images/admin04.png
-docs/intro/_images/admin04t.png
-docs/intro/_images/admin05.png
-docs/intro/_images/admin05t.png
-docs/intro/_images/admin06.png
-docs/intro/_images/admin06t.png
-docs/intro/_images/admin07.png
-docs/intro/_images/admin08.png
-docs/intro/_images/admin08t.png
-docs/intro/_images/admin09.png
-docs/intro/_images/admin10.png
-docs/intro/_images/admin11.png
-docs/intro/_images/admin11t.png
-docs/intro/_images/admin12.png
-docs/intro/_images/admin13.png
-docs/intro/_images/admin13t.png
-docs/intro/_images/admin14.png
-docs/intro/_images/admin14t.png
-docs/man/daily_cleanup.1
-docs/man/django-admin.1
-docs/man/gather_profile_stats.1
-docs/misc/api-stability.txt
-docs/misc/design-philosophies.txt
-docs/misc/distributions.txt
-docs/misc/index.txt
-docs/obsolete/admin-css.txt
-docs/obsolete/index.txt
-docs/obsolete/_images/formrow.png
-docs/obsolete/_images/module.png
-docs/obsolete/_images/objecttools_01.png
-docs/obsolete/_images/objecttools_02.png
-docs/ref/authbackends.txt
-docs/ref/databases.txt
-docs/ref/django-admin.txt
-docs/ref/exceptions.txt
-docs/ref/generic-views.txt
-docs/ref/index.txt
-docs/ref/middleware.txt
-docs/ref/request-response.txt
-docs/ref/settings.txt
-docs/ref/signals.txt
-docs/ref/unicode.txt
-docs/ref/utils.txt
-docs/ref/validators.txt
-docs/ref/contrib/auth.txt
-docs/ref/contrib/contenttypes.txt
-docs/ref/contrib/csrf.txt
-docs/ref/contrib/databrowse.txt
-docs/ref/contrib/flatpages.txt
-docs/ref/contrib/humanize.txt
-docs/ref/contrib/index.txt
-docs/ref/contrib/localflavor.txt
-docs/ref/contrib/markup.txt
-docs/ref/contrib/messages.txt
-docs/ref/contrib/redirects.txt
-docs/ref/contrib/sitemaps.txt
-docs/ref/contrib/sites.txt
-docs/ref/contrib/syndication.txt
-docs/ref/contrib/webdesign.txt
-docs/ref/contrib/admin/actions.txt
-docs/ref/contrib/admin/admindocs.txt
-docs/ref/contrib/admin/index.txt
-docs/ref/contrib/admin/_images/article_actions.png
-docs/ref/contrib/admin/_images/article_actions_message.png
-docs/ref/contrib/admin/_images/flatfiles_admin.png
-docs/ref/contrib/admin/_images/user_actions.png
-docs/ref/contrib/admin/_images/users_changelist.png
-docs/ref/contrib/comments/custom.txt
-docs/ref/contrib/comments/example.txt
-docs/ref/contrib/comments/forms.txt
-docs/ref/contrib/comments/index.txt
-docs/ref/contrib/comments/models.txt
-docs/ref/contrib/comments/moderation.txt
-docs/ref/contrib/comments/settings.txt
-docs/ref/contrib/comments/signals.txt
-docs/ref/contrib/comments/upgrade.txt
-docs/ref/contrib/formtools/form-preview.txt
-docs/ref/contrib/formtools/form-wizard.txt
-docs/ref/contrib/formtools/index.txt
-docs/ref/contrib/gis/admin.txt
-docs/ref/contrib/gis/commands.txt
-docs/ref/contrib/gis/create_template_postgis-1.3.sh
-docs/ref/contrib/gis/create_template_postgis-1.4.sh
-docs/ref/contrib/gis/create_template_postgis-1.5.sh
-docs/ref/contrib/gis/create_template_postgis-debian.sh
-docs/ref/contrib/gis/db-api.txt
-docs/ref/contrib/gis/deployment.txt
-docs/ref/contrib/gis/feeds.txt
-docs/ref/contrib/gis/gdal.txt
-docs/ref/contrib/gis/geoip.txt
-docs/ref/contrib/gis/geoquerysets.txt
-docs/ref/contrib/gis/geos.txt
-docs/ref/contrib/gis/index.txt
-docs/ref/contrib/gis/install.txt
-docs/ref/contrib/gis/layermapping.txt
-docs/ref/contrib/gis/measure.txt
-docs/ref/contrib/gis/model-api.txt
-docs/ref/contrib/gis/ogrinspect.txt
-docs/ref/contrib/gis/sitemaps.txt
-docs/ref/contrib/gis/testing.txt
-docs/ref/contrib/gis/tutorial.txt
-docs/ref/contrib/gis/utils.txt
-docs/ref/files/file.txt
-docs/ref/files/index.txt
-docs/ref/files/storage.txt
-docs/ref/forms/api.txt
-docs/ref/forms/fields.txt
-docs/ref/forms/index.txt
-docs/ref/forms/validation.txt
-docs/ref/forms/widgets.txt
-docs/ref/models/fields.txt
-docs/ref/models/index.txt
-docs/ref/models/instances.txt
-docs/ref/models/options.txt
-docs/ref/models/querysets.txt
-docs/ref/models/relations.txt
-docs/ref/templates/api.txt
-docs/ref/templates/builtins.txt
-docs/ref/templates/index.txt
-docs/releases/0.95.txt
-docs/releases/0.96.txt
-docs/releases/1.0-alpha-1.txt
-docs/releases/1.0-alpha-2.txt
-docs/releases/1.0-beta-2.txt
-docs/releases/1.0-beta.txt
-docs/releases/1.0-porting-guide.txt
-docs/releases/1.0.1.txt
-docs/releases/1.0.2.txt
-docs/releases/1.0.txt
-docs/releases/1.1-alpha-1.txt
-docs/releases/1.1-beta-1.txt
-docs/releases/1.1-rc-1.txt
-docs/releases/1.1.2.txt
-docs/releases/1.1.txt
-docs/releases/1.2-alpha-1.txt
-docs/releases/1.2-beta-1.txt
-docs/releases/1.2-rc-1.txt
-docs/releases/1.2.2.txt
-docs/releases/1.2.4.txt
-docs/releases/1.2.txt
-docs/releases/index.txt
-docs/topics/auth.txt
-docs/topics/cache.txt
-docs/topics/conditional-view-processing.txt
-docs/topics/email.txt
-docs/topics/files.txt
-docs/topics/generic-views.txt
-docs/topics/index.txt
-docs/topics/install.txt
-docs/topics/pagination.txt
-docs/topics/serialization.txt
-docs/topics/settings.txt
-docs/topics/signals.txt
-docs/topics/templates.txt
-docs/topics/testing.txt
-docs/topics/db/aggregation.txt
-docs/topics/db/index.txt
-docs/topics/db/managers.txt
-docs/topics/db/models.txt
-docs/topics/db/multi-db.txt
-docs/topics/db/optimization.txt
-docs/topics/db/queries.txt
-docs/topics/db/sql.txt
-docs/topics/db/transactions.txt
-docs/topics/forms/formsets.txt
-docs/topics/forms/index.txt
-docs/topics/forms/media.txt
-docs/topics/forms/modelforms.txt
-docs/topics/http/file-uploads.txt
-docs/topics/http/generic-views.txt
-docs/topics/http/index.txt
-docs/topics/http/middleware.txt
-docs/topics/http/sessions.txt
-docs/topics/http/shortcuts.txt
-docs/topics/http/urls.txt
-docs/topics/http/views.txt
-docs/topics/http/_images/middleware.png
-docs/topics/i18n/deployment.txt
-docs/topics/i18n/index.txt
-docs/topics/i18n/internationalization.txt
-docs/topics/i18n/localization.txt
-extras/README.TXT
-extras/csrf_migration_helper.py
-extras/django_bash_completion
-scripts/rpm-install.sh
-tests/runtests.py
-tests/test_sqlite.py
-tests/urls.py
-tests/modeltests/__init__.py
-tests/modeltests/aggregation/__init__.py
-tests/modeltests/aggregation/models.py
-tests/modeltests/aggregation/tests.py
-tests/modeltests/aggregation/fixtures/initial_data.json
-tests/modeltests/basic/__init__.py
-tests/modeltests/basic/models.py
-tests/modeltests/basic/tests.py
-tests/modeltests/choices/__init__.py
-tests/modeltests/choices/models.py
-tests/modeltests/choices/tests.py
-tests/modeltests/custom_columns/__init__.py
-tests/modeltests/custom_columns/models.py
-tests/modeltests/custom_columns/tests.py
-tests/modeltests/custom_managers/__init__.py
-tests/modeltests/custom_managers/models.py
-tests/modeltests/custom_managers/tests.py
-tests/modeltests/custom_methods/__init__.py
-tests/modeltests/custom_methods/models.py
-tests/modeltests/custom_methods/tests.py
-tests/modeltests/custom_pk/__init__.py
-tests/modeltests/custom_pk/fields.py
-tests/modeltests/custom_pk/models.py
-tests/modeltests/custom_pk/tests.py
-tests/modeltests/defer/__init__.py
-tests/modeltests/defer/models.py
-tests/modeltests/defer/tests.py
-tests/modeltests/delete/__init__.py
-tests/modeltests/delete/models.py
-tests/modeltests/delete/tests.py
-tests/modeltests/empty/__init__.py
-tests/modeltests/empty/models.py
-tests/modeltests/empty/tests.py
-tests/modeltests/expressions/__init__.py
-tests/modeltests/expressions/models.py
-tests/modeltests/expressions/tests.py
-tests/modeltests/field_defaults/__init__.py
-tests/modeltests/field_defaults/models.py
-tests/modeltests/field_defaults/tests.py
-tests/modeltests/field_subclassing/__init__.py
-tests/modeltests/field_subclassing/fields.py
-tests/modeltests/field_subclassing/models.py
-tests/modeltests/field_subclassing/tests.py
-tests/modeltests/files/__init__.py
-tests/modeltests/files/models.py
-tests/modeltests/files/tests.py
-tests/modeltests/fixtures/__init__.py
-tests/modeltests/fixtures/models.py
-tests/modeltests/fixtures/tests.py
-tests/modeltests/fixtures/fixtures/db_fixture_1.default.json
-tests/modeltests/fixtures/fixtures/db_fixture_2.default.json.gz
-tests/modeltests/fixtures/fixtures/db_fixture_3.nosuchdb.json
-tests/modeltests/fixtures/fixtures/fixture1.json
-tests/modeltests/fixtures/fixtures/fixture2.json
-tests/modeltests/fixtures/fixtures/fixture2.xml
-tests/modeltests/fixtures/fixtures/fixture3.xml
-tests/modeltests/fixtures/fixtures/fixture4.json.zip
-tests/modeltests/fixtures/fixtures/fixture5.json.gz
-tests/modeltests/fixtures/fixtures/fixture5.json.zip
-tests/modeltests/fixtures/fixtures/fixture6.json
-tests/modeltests/fixtures/fixtures/fixture7.xml
-tests/modeltests/fixtures/fixtures/fixture8.json
-tests/modeltests/fixtures/fixtures/fixture9.xml
-tests/modeltests/fixtures/fixtures/initial_data.json
-tests/modeltests/fixtures_model_package/__init__.py
-tests/modeltests/fixtures_model_package/tests.py
-tests/modeltests/fixtures_model_package/fixtures/fixture1.json
-tests/modeltests/fixtures_model_package/fixtures/fixture2.json
-tests/modeltests/fixtures_model_package/fixtures/fixture2.xml
-tests/modeltests/fixtures_model_package/fixtures/initial_data.json
-tests/modeltests/fixtures_model_package/models/__init__.py
-tests/modeltests/force_insert_update/__init__.py
-tests/modeltests/force_insert_update/models.py
-tests/modeltests/force_insert_update/tests.py
-tests/modeltests/generic_relations/__init__.py
-tests/modeltests/generic_relations/models.py
-tests/modeltests/generic_relations/tests.py
-tests/modeltests/get_latest/__init__.py
-tests/modeltests/get_latest/models.py
-tests/modeltests/get_latest/tests.py
-tests/modeltests/get_object_or_404/__init__.py
-tests/modeltests/get_object_or_404/models.py
-tests/modeltests/get_object_or_404/tests.py
-tests/modeltests/get_or_create/__init__.py
-tests/modeltests/get_or_create/models.py
-tests/modeltests/get_or_create/tests.py
-tests/modeltests/invalid_models/__init__.py
-tests/modeltests/invalid_models/models.py
-tests/modeltests/lookup/__init__.py
-tests/modeltests/lookup/models.py
-tests/modeltests/lookup/tests.py
-tests/modeltests/m2m_and_m2o/__init__.py
-tests/modeltests/m2m_and_m2o/models.py
-tests/modeltests/m2m_and_m2o/tests.py
-tests/modeltests/m2m_intermediary/__init__.py
-tests/modeltests/m2m_intermediary/models.py
-tests/modeltests/m2m_intermediary/tests.py
-tests/modeltests/m2m_multiple/__init__.py
-tests/modeltests/m2m_multiple/models.py
-tests/modeltests/m2m_multiple/tests.py
-tests/modeltests/m2m_recursive/__init__.py
-tests/modeltests/m2m_recursive/models.py
-tests/modeltests/m2m_recursive/tests.py
-tests/modeltests/m2m_signals/__init__.py
-tests/modeltests/m2m_signals/models.py
-tests/modeltests/m2m_signals/tests.py
-tests/modeltests/m2m_through/__init__.py
-tests/modeltests/m2m_through/models.py
-tests/modeltests/m2m_through/tests.py
-tests/modeltests/m2o_recursive/__init__.py
-tests/modeltests/m2o_recursive/models.py
-tests/modeltests/m2o_recursive/tests.py
-tests/modeltests/many_to_many/__init__.py
-tests/modeltests/many_to_many/models.py
-tests/modeltests/many_to_many/tests.py
-tests/modeltests/many_to_one/__init__.py
-tests/modeltests/many_to_one/models.py
-tests/modeltests/many_to_one/tests.py
-tests/modeltests/many_to_one_null/__init__.py
-tests/modeltests/many_to_one_null/models.py
-tests/modeltests/many_to_one_null/tests.py
-tests/modeltests/model_forms/__init__.py
-tests/modeltests/model_forms/mforms.py
-tests/modeltests/model_forms/models.py
-tests/modeltests/model_forms/test.png
-tests/modeltests/model_forms/test2.png
-tests/modeltests/model_forms/tests.py
-tests/modeltests/model_formsets/__init__.py
-tests/modeltests/model_formsets/models.py
-tests/modeltests/model_formsets/tests.py
-tests/modeltests/model_inheritance/__init__.py
-tests/modeltests/model_inheritance/models.py
-tests/modeltests/model_inheritance/tests.py
-tests/modeltests/model_inheritance_same_model_name/__init__.py
-tests/modeltests/model_inheritance_same_model_name/models.py
-tests/modeltests/model_inheritance_same_model_name/tests.py
-tests/modeltests/model_package/__init__.py
-tests/modeltests/model_package/tests.py
-tests/modeltests/model_package/models/__init__.py
-tests/modeltests/model_package/models/article.py
-tests/modeltests/model_package/models/publication.py
-tests/modeltests/mutually_referential/__init__.py
-tests/modeltests/mutually_referential/models.py
-tests/modeltests/mutually_referential/tests.py
-tests/modeltests/one_to_one/__init__.py
-tests/modeltests/one_to_one/models.py
-tests/modeltests/one_to_one/tests.py
-tests/modeltests/or_lookups/__init__.py
-tests/modeltests/or_lookups/models.py
-tests/modeltests/or_lookups/tests.py
-tests/modeltests/order_with_respect_to/__init__.py
-tests/modeltests/order_with_respect_to/models.py
-tests/modeltests/order_with_respect_to/tests.py
-tests/modeltests/ordering/__init__.py
-tests/modeltests/ordering/models.py
-tests/modeltests/ordering/tests.py
-tests/modeltests/pagination/__init__.py
-tests/modeltests/pagination/models.py
-tests/modeltests/pagination/tests.py
-tests/modeltests/properties/__init__.py
-tests/modeltests/properties/models.py
-tests/modeltests/properties/tests.py
-tests/modeltests/proxy_model_inheritance/__init__.py
-tests/modeltests/proxy_model_inheritance/models.py
-tests/modeltests/proxy_model_inheritance/tests.py
-tests/modeltests/proxy_model_inheritance/app1/__init__.py
-tests/modeltests/proxy_model_inheritance/app1/models.py
-tests/modeltests/proxy_model_inheritance/app2/__init__.py
-tests/modeltests/proxy_model_inheritance/app2/models.py
-tests/modeltests/proxy_models/__init__.py
-tests/modeltests/proxy_models/models.py
-tests/modeltests/proxy_models/tests.py
-tests/modeltests/proxy_models/fixtures/mypeople.json
-tests/modeltests/raw_query/__init__.py
-tests/modeltests/raw_query/models.py
-tests/modeltests/raw_query/tests.py
-tests/modeltests/raw_query/fixtures/raw_query_books.json
-tests/modeltests/reserved_names/__init__.py
-tests/modeltests/reserved_names/models.py
-tests/modeltests/reserved_names/tests.py
-tests/modeltests/reverse_lookup/__init__.py
-tests/modeltests/reverse_lookup/models.py
-tests/modeltests/reverse_lookup/tests.py
-tests/modeltests/save_delete_hooks/__init__.py
-tests/modeltests/save_delete_hooks/models.py
-tests/modeltests/save_delete_hooks/tests.py
-tests/modeltests/select_related/__init__.py
-tests/modeltests/select_related/models.py
-tests/modeltests/select_related/tests.py
-tests/modeltests/serializers/__init__.py
-tests/modeltests/serializers/models.py
-tests/modeltests/serializers/tests.py
-tests/modeltests/signals/__init__.py
-tests/modeltests/signals/models.py
-tests/modeltests/signals/tests.py
-tests/modeltests/str/__init__.py
-tests/modeltests/str/models.py
-tests/modeltests/str/tests.py
-tests/modeltests/test_client/__init__.py
-tests/modeltests/test_client/models.py
-tests/modeltests/test_client/tests.py
-tests/modeltests/test_client/urls.py
-tests/modeltests/test_client/views.py
-tests/modeltests/test_client/fixtures/testdata.json
-tests/modeltests/transactions/__init__.py
-tests/modeltests/transactions/models.py
-tests/modeltests/transactions/tests.py
-tests/modeltests/unmanaged_models/__init__.py
-tests/modeltests/unmanaged_models/models.py
-tests/modeltests/unmanaged_models/tests.py
-tests/modeltests/update/__init__.py
-tests/modeltests/update/models.py
-tests/modeltests/update/tests.py
-tests/modeltests/user_commands/__init__.py
-tests/modeltests/user_commands/models.py
-tests/modeltests/user_commands/tests.py
-tests/modeltests/user_commands/management/__init__.py
-tests/modeltests/user_commands/management/commands/__init__.py
-tests/modeltests/user_commands/management/commands/dance.py
-tests/modeltests/validation/__init__.py
-tests/modeltests/validation/models.py
-tests/modeltests/validation/test_custom_messages.py
-tests/modeltests/validation/test_unique.py
-tests/modeltests/validation/tests.py
-tests/modeltests/validation/validators.py
-tests/modeltests/validators/__init__.py
-tests/modeltests/validators/models.py
-tests/modeltests/validators/tests.py
-tests/regressiontests/__init__.py
-tests/regressiontests/admin_changelist/__init__.py
-tests/regressiontests/admin_changelist/models.py
-tests/regressiontests/admin_changelist/tests.py
-tests/regressiontests/admin_inlines/__init__.py
-tests/regressiontests/admin_inlines/models.py
-tests/regressiontests/admin_inlines/tests.py
-tests/regressiontests/admin_inlines/fixtures/admin-views-users.xml
-tests/regressiontests/admin_ordering/__init__.py
-tests/regressiontests/admin_ordering/models.py
-tests/regressiontests/admin_ordering/tests.py
-tests/regressiontests/admin_registration/__init__.py
-tests/regressiontests/admin_registration/models.py
-tests/regressiontests/admin_registration/tests.py
-tests/regressiontests/admin_scripts/__init__.py
-tests/regressiontests/admin_scripts/models.py
-tests/regressiontests/admin_scripts/tests.py
-tests/regressiontests/admin_scripts/app_with_import/__init__.py
-tests/regressiontests/admin_scripts/app_with_import/models.py
-tests/regressiontests/admin_scripts/broken_app/__init__.py
-tests/regressiontests/admin_scripts/broken_app/models.py
-tests/regressiontests/admin_scripts/complex_app/__init__.py
-tests/regressiontests/admin_scripts/complex_app/admin/__init__.py
-tests/regressiontests/admin_scripts/complex_app/admin/foo.py
-tests/regressiontests/admin_scripts/complex_app/models/__init__.py
-tests/regressiontests/admin_scripts/complex_app/models/bar.py
-tests/regressiontests/admin_scripts/complex_app/models/foo.py
-tests/regressiontests/admin_scripts/management/__init__.py
-tests/regressiontests/admin_scripts/management/commands/__init__.py
-tests/regressiontests/admin_scripts/management/commands/app_command.py
-tests/regressiontests/admin_scripts/management/commands/base_command.py
-tests/regressiontests/admin_scripts/management/commands/label_command.py
-tests/regressiontests/admin_scripts/management/commands/noargs_command.py
-tests/regressiontests/admin_scripts/simple_app/__init__.py
-tests/regressiontests/admin_scripts/simple_app/models.py
-tests/regressiontests/admin_util/__init__.py
-tests/regressiontests/admin_util/models.py
-tests/regressiontests/admin_util/tests.py
-tests/regressiontests/admin_validation/__init__.py
-tests/regressiontests/admin_validation/models.py
-tests/regressiontests/admin_validation/tests.py
-tests/regressiontests/admin_views/__init__.py
-tests/regressiontests/admin_views/customadmin.py
-tests/regressiontests/admin_views/models.py
-tests/regressiontests/admin_views/tests.py
-tests/regressiontests/admin_views/urls.py
-tests/regressiontests/admin_views/views.py
-tests/regressiontests/admin_views/fixtures/admin-views-actions.xml
-tests/regressiontests/admin_views/fixtures/admin-views-colors.xml
-tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml
-tests/regressiontests/admin_views/fixtures/admin-views-person.xml
-tests/regressiontests/admin_views/fixtures/admin-views-unicode.xml
-tests/regressiontests/admin_views/fixtures/admin-views-users.xml
-tests/regressiontests/admin_views/fixtures/deleted-objects.xml
-tests/regressiontests/admin_views/fixtures/multiple-child-classes.json
-tests/regressiontests/admin_views/fixtures/string-primary-key.xml
-tests/regressiontests/admin_widgets/__init__.py
-tests/regressiontests/admin_widgets/models.py
-tests/regressiontests/admin_widgets/tests.py
-tests/regressiontests/admin_widgets/urls.py
-tests/regressiontests/admin_widgets/widgetadmin.py
-tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml
-tests/regressiontests/aggregation_regress/__init__.py
-tests/regressiontests/aggregation_regress/models.py
-tests/regressiontests/aggregation_regress/tests.py
-tests/regressiontests/aggregation_regress/fixtures/initial_data.json
-tests/regressiontests/app_loading/__init__.py
-tests/regressiontests/app_loading/models.py
-tests/regressiontests/app_loading/test_settings.py
-tests/regressiontests/app_loading/tests.py
-tests/regressiontests/app_loading/eggs/brokenapp.egg
-tests/regressiontests/app_loading/eggs/modelapp.egg
-tests/regressiontests/app_loading/eggs/nomodelapp.egg
-tests/regressiontests/app_loading/eggs/omelet.egg
-tests/regressiontests/app_loading/parent/__init__.py
-tests/regressiontests/app_loading/parent/app/__init__.py
-tests/regressiontests/app_loading/parent/app1/__init__.py
-tests/regressiontests/app_loading/parent/app_2/__init__.py
-tests/regressiontests/backends/__init__.py
-tests/regressiontests/backends/models.py
-tests/regressiontests/backends/tests.py
-tests/regressiontests/bash_completion/__init__.py
-tests/regressiontests/bash_completion/models.py
-tests/regressiontests/bash_completion/tests.py
-tests/regressiontests/bash_completion/management/__init__.py
-tests/regressiontests/bash_completion/management/commands/__init__.py
-tests/regressiontests/bash_completion/management/commands/test_command.py
-tests/regressiontests/bug639/__init__.py
-tests/regressiontests/bug639/models.py
-tests/regressiontests/bug639/test.jpg
-tests/regressiontests/bug639/tests.py
-tests/regressiontests/bug8245/__init__.py
-tests/regressiontests/bug8245/admin.py
-tests/regressiontests/bug8245/models.py
-tests/regressiontests/bug8245/tests.py
-tests/regressiontests/builtin_server/__init__.py
-tests/regressiontests/builtin_server/models.py
-tests/regressiontests/builtin_server/tests.py
-tests/regressiontests/cache/__init__.py
-tests/regressiontests/cache/liberal_backend.py
-tests/regressiontests/cache/models.py
-tests/regressiontests/cache/tests.py
-tests/regressiontests/comment_tests/__init__.py
-tests/regressiontests/comment_tests/models.py
-tests/regressiontests/comment_tests/urls.py
-tests/regressiontests/comment_tests/urls_admin.py
-tests/regressiontests/comment_tests/custom_comments/__init__.py
-tests/regressiontests/comment_tests/custom_comments/forms.py
-tests/regressiontests/comment_tests/custom_comments/models.py
-tests/regressiontests/comment_tests/custom_comments/views.py
-tests/regressiontests/comment_tests/fixtures/comment_tests.json
-tests/regressiontests/comment_tests/fixtures/comment_utils.xml
-tests/regressiontests/comment_tests/tests/__init__.py
-tests/regressiontests/comment_tests/tests/app_api_tests.py
-tests/regressiontests/comment_tests/tests/comment_form_tests.py
-tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py
-tests/regressiontests/comment_tests/tests/comment_view_tests.py
-tests/regressiontests/comment_tests/tests/model_tests.py
-tests/regressiontests/comment_tests/tests/moderation_view_tests.py
-tests/regressiontests/comment_tests/tests/templatetag_tests.py
-tests/regressiontests/conditional_processing/__init__.py
-tests/regressiontests/conditional_processing/models.py
-tests/regressiontests/conditional_processing/urls.py
-tests/regressiontests/conditional_processing/views.py
-tests/regressiontests/context_processors/__init__.py
-tests/regressiontests/context_processors/models.py
-tests/regressiontests/context_processors/tests.py
-tests/regressiontests/context_processors/urls.py
-tests/regressiontests/context_processors/views.py
-tests/regressiontests/context_processors/fixtures/context-processors-users.xml
-tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html
-tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html
-tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html
-tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html
-tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html
-tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html
-tests/regressiontests/context_processors/templates/context_processors/request_attrs.html
-tests/regressiontests/csrf_tests/__init__.py
-tests/regressiontests/csrf_tests/models.py
-tests/regressiontests/csrf_tests/tests.py
-tests/regressiontests/custom_columns_regress/__init__.py
-tests/regressiontests/custom_columns_regress/models.py
-tests/regressiontests/custom_columns_regress/tests.py
-tests/regressiontests/custom_managers_regress/__init__.py
-tests/regressiontests/custom_managers_regress/models.py
-tests/regressiontests/custom_managers_regress/tests.py
-tests/regressiontests/datatypes/__init__.py
-tests/regressiontests/datatypes/models.py
-tests/regressiontests/datatypes/tests.py
-tests/regressiontests/db_typecasts/__init__.py
-tests/regressiontests/db_typecasts/models.py
-tests/regressiontests/db_typecasts/tests.py
-tests/regressiontests/decorators/__init__.py
-tests/regressiontests/decorators/models.py
-tests/regressiontests/decorators/tests.py
-tests/regressiontests/defaultfilters/__init__.py
-tests/regressiontests/defaultfilters/models.py
-tests/regressiontests/defaultfilters/tests.py
-tests/regressiontests/defer_regress/__init__.py
-tests/regressiontests/defer_regress/models.py
-tests/regressiontests/defer_regress/tests.py
-tests/regressiontests/delete_regress/__init__.py
-tests/regressiontests/delete_regress/models.py
-tests/regressiontests/delete_regress/tests.py
-tests/regressiontests/dispatch/__init__.py
-tests/regressiontests/dispatch/models.py
-tests/regressiontests/dispatch/tests/__init__.py
-tests/regressiontests/dispatch/tests/test_dispatcher.py
-tests/regressiontests/dispatch/tests/test_saferef.py
-tests/regressiontests/expressions_regress/__init__.py
-tests/regressiontests/expressions_regress/models.py
-tests/regressiontests/expressions_regress/tests.py
-tests/regressiontests/extra_regress/__init__.py
-tests/regressiontests/extra_regress/models.py
-tests/regressiontests/extra_regress/tests.py
-tests/regressiontests/file_storage/__init__.py
-tests/regressiontests/file_storage/models.py
-tests/regressiontests/file_storage/test.png
-tests/regressiontests/file_storage/test1.png
-tests/regressiontests/file_storage/tests.py
-tests/regressiontests/file_uploads/__init__.py
-tests/regressiontests/file_uploads/models.py
-tests/regressiontests/file_uploads/tests.py
-tests/regressiontests/file_uploads/uploadhandler.py
-tests/regressiontests/file_uploads/urls.py
-tests/regressiontests/file_uploads/views.py
-tests/regressiontests/fixtures_regress/__init__.py
-tests/regressiontests/fixtures_regress/models.py
-tests/regressiontests/fixtures_regress/tests.py
-tests/regressiontests/fixtures_regress/fixtures/absolute.json
-tests/regressiontests/fixtures_regress/fixtures/animal.xml
-tests/regressiontests/fixtures_regress/fixtures/bad_fixture1.unkn
-tests/regressiontests/fixtures_regress/fixtures/bad_fixture2.xml
-tests/regressiontests/fixtures_regress/fixtures/big-fixture.json
-tests/regressiontests/fixtures_regress/fixtures/empty.json
-tests/regressiontests/fixtures_regress/fixtures/forward_ref_lookup.json
-tests/regressiontests/fixtures_regress/fixtures/model-inheritance.json
-tests/regressiontests/fixtures_regress/fixtures/nk-inheritance.json
-tests/regressiontests/fixtures_regress/fixtures/nk-inheritance2.xml
-tests/regressiontests/fixtures_regress/fixtures/non_natural_1.json
-tests/regressiontests/fixtures_regress/fixtures/non_natural_2.xml
-tests/regressiontests/fixtures_regress/fixtures/pretty.xml
-tests/regressiontests/fixtures_regress/fixtures/sequence.json
-tests/regressiontests/fixtures_regress/fixtures/thingy.json
-tests/regressiontests/forms/__init__.py
-tests/regressiontests/forms/localflavortests.py
-tests/regressiontests/forms/models.py
-tests/regressiontests/forms/localflavor/__init__.py
-tests/regressiontests/forms/localflavor/ar.py
-tests/regressiontests/forms/localflavor/at.py
-tests/regressiontests/forms/localflavor/au.py
-tests/regressiontests/forms/localflavor/br.py
-tests/regressiontests/forms/localflavor/ca.py
-tests/regressiontests/forms/localflavor/ch.py
-tests/regressiontests/forms/localflavor/cl.py
-tests/regressiontests/forms/localflavor/cz.py
-tests/regressiontests/forms/localflavor/de.py
-tests/regressiontests/forms/localflavor/es.py
-tests/regressiontests/forms/localflavor/fi.py
-tests/regressiontests/forms/localflavor/fr.py
-tests/regressiontests/forms/localflavor/generic.py
-tests/regressiontests/forms/localflavor/id.py
-tests/regressiontests/forms/localflavor/ie.py
-tests/regressiontests/forms/localflavor/is_.py
-tests/regressiontests/forms/localflavor/it.py
-tests/regressiontests/forms/localflavor/jp.py
-tests/regressiontests/forms/localflavor/kw.py
-tests/regressiontests/forms/localflavor/nl.py
-tests/regressiontests/forms/localflavor/pl.py
-tests/regressiontests/forms/localflavor/pt.py
-tests/regressiontests/forms/localflavor/ro.py
-tests/regressiontests/forms/localflavor/se.py
-tests/regressiontests/forms/localflavor/sk.py
-tests/regressiontests/forms/localflavor/uk.py
-tests/regressiontests/forms/localflavor/us.py
-tests/regressiontests/forms/localflavor/utils.py
-tests/regressiontests/forms/localflavor/uy.py
-tests/regressiontests/forms/localflavor/za.py
-tests/regressiontests/forms/tests/__init__.py
-tests/regressiontests/forms/tests/error_messages.py
-tests/regressiontests/forms/tests/extra.py
-tests/regressiontests/forms/tests/fields.py
-tests/regressiontests/forms/tests/forms.py
-tests/regressiontests/forms/tests/formsets.py
-tests/regressiontests/forms/tests/input_formats.py
-tests/regressiontests/forms/tests/media.py
-tests/regressiontests/forms/tests/models.py
-tests/regressiontests/forms/tests/regressions.py
-tests/regressiontests/forms/tests/util.py
-tests/regressiontests/forms/tests/validators.py
-tests/regressiontests/forms/tests/widgets.py
-tests/regressiontests/formwizard/__init__.py
-tests/regressiontests/formwizard/forms.py
-tests/regressiontests/formwizard/models.py
-tests/regressiontests/formwizard/tests.py
-tests/regressiontests/formwizard/urls.py
-tests/regressiontests/formwizard/templates/forms/wizard.html
-tests/regressiontests/generic_inline_admin/__init__.py
-tests/regressiontests/generic_inline_admin/models.py
-tests/regressiontests/generic_inline_admin/tests.py
-tests/regressiontests/generic_inline_admin/urls.py
-tests/regressiontests/generic_inline_admin/fixtures/users.xml
-tests/regressiontests/generic_relations_regress/__init__.py
-tests/regressiontests/generic_relations_regress/models.py
-tests/regressiontests/generic_relations_regress/tests.py
-tests/regressiontests/get_or_create_regress/__init__.py
-tests/regressiontests/get_or_create_regress/models.py
-tests/regressiontests/get_or_create_regress/tests.py
-tests/regressiontests/httpwrappers/__init__.py
-tests/regressiontests/httpwrappers/models.py
-tests/regressiontests/httpwrappers/tests.py
-tests/regressiontests/humanize/__init__.py
-tests/regressiontests/humanize/models.py
-tests/regressiontests/humanize/tests.py
-tests/regressiontests/i18n/__init__.py
-tests/regressiontests/i18n/forms.py
-tests/regressiontests/i18n/models.py
-tests/regressiontests/i18n/tests.py
-tests/regressiontests/i18n/other/__init__.py
-tests/regressiontests/i18n/other/locale/__init__.py
-tests/regressiontests/i18n/other/locale/de/__init__.py
-tests/regressiontests/i18n/other/locale/de/formats.py
-tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo
-tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po
-tests/regressiontests/i18n/resolution/__init__.py
-tests/regressiontests/i18n/resolution/models.py
-tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.mo
-tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po
-tests/regressiontests/initial_sql_regress/__init__.py
-tests/regressiontests/initial_sql_regress/models.py
-tests/regressiontests/initial_sql_regress/tests.py
-tests/regressiontests/initial_sql_regress/sql/simple.sql
-tests/regressiontests/inline_formsets/__init__.py
-tests/regressiontests/inline_formsets/models.py
-tests/regressiontests/inline_formsets/tests.py
-tests/regressiontests/introspection/__init__.py
-tests/regressiontests/introspection/models.py
-tests/regressiontests/introspection/tests.py
-tests/regressiontests/locale/de/LC_MESSAGES/django.mo
-tests/regressiontests/locale/de/LC_MESSAGES/django.po
-tests/regressiontests/localflavor/__init__.py
-tests/regressiontests/localflavor/models.py
-tests/regressiontests/localflavor/tests.py
-tests/regressiontests/localflavor/us/__init__.py
-tests/regressiontests/localflavor/us/forms.py
-tests/regressiontests/localflavor/us/models.py
-tests/regressiontests/localflavor/us/tests.py
-tests/regressiontests/m2m_regress/__init__.py
-tests/regressiontests/m2m_regress/models.py
-tests/regressiontests/m2m_regress/tests.py
-tests/regressiontests/m2m_through_regress/__init__.py
-tests/regressiontests/m2m_through_regress/models.py
-tests/regressiontests/m2m_through_regress/tests.py
-tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json
-tests/regressiontests/mail/__init__.py
-tests/regressiontests/mail/custombackend.py
-tests/regressiontests/mail/models.py
-tests/regressiontests/mail/tests.py
-tests/regressiontests/makemessages/__init__.py
-tests/regressiontests/makemessages/extraction.py
-tests/regressiontests/makemessages/javascript.js
-tests/regressiontests/makemessages/models.py
-tests/regressiontests/makemessages/tests.py
-tests/regressiontests/makemessages/ignore_dir/ignored.html
-tests/regressiontests/makemessages/locale/dummy
-tests/regressiontests/makemessages/templates/test.html
-tests/regressiontests/managers_regress/__init__.py
-tests/regressiontests/managers_regress/models.py
-tests/regressiontests/managers_regress/tests.py
-tests/regressiontests/many_to_one_regress/__init__.py
-tests/regressiontests/many_to_one_regress/models.py
-tests/regressiontests/many_to_one_regress/tests.py
-tests/regressiontests/max_lengths/__init__.py
-tests/regressiontests/max_lengths/models.py
-tests/regressiontests/max_lengths/tests.py
-tests/regressiontests/middleware/__init__.py
-tests/regressiontests/middleware/extra_urls.py
-tests/regressiontests/middleware/models.py
-tests/regressiontests/middleware/tests.py
-tests/regressiontests/middleware/urls.py
-tests/regressiontests/middleware_exceptions/__init__.py
-tests/regressiontests/middleware_exceptions/models.py
-tests/regressiontests/middleware_exceptions/tests.py
-tests/regressiontests/middleware_exceptions/urls.py
-tests/regressiontests/middleware_exceptions/views.py
-tests/regressiontests/model_fields/4x8.png
-tests/regressiontests/model_fields/8x4.png
-tests/regressiontests/model_fields/__init__.py
-tests/regressiontests/model_fields/imagefield.py
-tests/regressiontests/model_fields/models.py
-tests/regressiontests/model_fields/tests.py
-tests/regressiontests/model_forms_regress/__init__.py
-tests/regressiontests/model_forms_regress/models.py
-tests/regressiontests/model_forms_regress/tests.py
-tests/regressiontests/model_formsets_regress/__init__.py
-tests/regressiontests/model_formsets_regress/models.py
-tests/regressiontests/model_formsets_regress/tests.py
-tests/regressiontests/model_inheritance_regress/__init__.py
-tests/regressiontests/model_inheritance_regress/models.py
-tests/regressiontests/model_inheritance_regress/tests.py
-tests/regressiontests/model_inheritance_select_related/__init__.py
-tests/regressiontests/model_inheritance_select_related/models.py
-tests/regressiontests/model_inheritance_select_related/tests.py
-tests/regressiontests/model_regress/__init__.py
-tests/regressiontests/model_regress/models.py
-tests/regressiontests/model_regress/tests.py
-tests/regressiontests/modeladmin/__init__.py
-tests/regressiontests/modeladmin/models.py
-tests/regressiontests/modeladmin/tests.py
-tests/regressiontests/multiple_database/__init__.py
-tests/regressiontests/multiple_database/models.py
-tests/regressiontests/multiple_database/tests.py
-tests/regressiontests/multiple_database/fixtures/multidb-common.json
-tests/regressiontests/multiple_database/fixtures/multidb.default.json
-tests/regressiontests/multiple_database/fixtures/multidb.other.json
-tests/regressiontests/multiple_database/fixtures/pets.json
-tests/regressiontests/null_fk/__init__.py
-tests/regressiontests/null_fk/models.py
-tests/regressiontests/null_fk/tests.py
-tests/regressiontests/null_fk_ordering/__init__.py
-tests/regressiontests/null_fk_ordering/models.py
-tests/regressiontests/null_fk_ordering/tests.py
-tests/regressiontests/null_queries/__init__.py
-tests/regressiontests/null_queries/models.py
-tests/regressiontests/null_queries/tests.py
-tests/regressiontests/one_to_one_regress/__init__.py
-tests/regressiontests/one_to_one_regress/models.py
-tests/regressiontests/one_to_one_regress/tests.py
-tests/regressiontests/pagination_regress/__init__.py
-tests/regressiontests/pagination_regress/models.py
-tests/regressiontests/pagination_regress/tests.py
-tests/regressiontests/queries/__init__.py
-tests/regressiontests/queries/models.py
-tests/regressiontests/queries/tests.py
-tests/regressiontests/queryset_pickle/__init__.py
-tests/regressiontests/queryset_pickle/models.py
-tests/regressiontests/queryset_pickle/tests.py
-tests/regressiontests/requests/__init__.py
-tests/regressiontests/requests/models.py
-tests/regressiontests/requests/tests.py
-tests/regressiontests/reverse_single_related/__init__.py
-tests/regressiontests/reverse_single_related/models.py
-tests/regressiontests/reverse_single_related/tests.py
-tests/regressiontests/select_related_onetoone/__init__.py
-tests/regressiontests/select_related_onetoone/models.py
-tests/regressiontests/select_related_onetoone/tests.py
-tests/regressiontests/select_related_regress/__init__.py
-tests/regressiontests/select_related_regress/models.py
-tests/regressiontests/select_related_regress/tests.py
-tests/regressiontests/serializers_regress/__init__.py
-tests/regressiontests/serializers_regress/models.py
-tests/regressiontests/serializers_regress/tests.py
-tests/regressiontests/servers/__init__.py
-tests/regressiontests/servers/models.py
-tests/regressiontests/servers/tests.py
-tests/regressiontests/settings_tests/__init__.py
-tests/regressiontests/settings_tests/models.py
-tests/regressiontests/settings_tests/tests.py
-tests/regressiontests/signals_regress/__init__.py
-tests/regressiontests/signals_regress/models.py
-tests/regressiontests/signals_regress/tests.py
-tests/regressiontests/sites_framework/__init__.py
-tests/regressiontests/sites_framework/models.py
-tests/regressiontests/sites_framework/tests.py
-tests/regressiontests/special_headers/__init__.py
-tests/regressiontests/special_headers/models.py
-tests/regressiontests/special_headers/tests.py
-tests/regressiontests/special_headers/urls.py
-tests/regressiontests/special_headers/views.py
-tests/regressiontests/special_headers/fixtures/data.xml
-tests/regressiontests/special_headers/templates/special_headers/article_detail.html
-tests/regressiontests/string_lookup/__init__.py
-tests/regressiontests/string_lookup/models.py
-tests/regressiontests/string_lookup/tests.py
-tests/regressiontests/syndication/__init__.py
-tests/regressiontests/syndication/feeds.py
-tests/regressiontests/syndication/models.py
-tests/regressiontests/syndication/tests.py
-tests/regressiontests/syndication/urls.py
-tests/regressiontests/syndication/fixtures/feeddata.json
-tests/regressiontests/syndication/templates/syndication/description.html
-tests/regressiontests/syndication/templates/syndication/title.html
-tests/regressiontests/templates/__init__.py
-tests/regressiontests/templates/context.py
-tests/regressiontests/templates/custom.py
-tests/regressiontests/templates/filters.py
-tests/regressiontests/templates/loaders.py
-tests/regressiontests/templates/models.py
-tests/regressiontests/templates/nodelist.py
-tests/regressiontests/templates/parser.py
-tests/regressiontests/templates/smartif.py
-tests/regressiontests/templates/tests.py
-tests/regressiontests/templates/unicode.py
-tests/regressiontests/templates/urls.py
-tests/regressiontests/templates/views.py
-tests/regressiontests/templates/eggs/tagsegg.egg
-tests/regressiontests/templates/templates/broken_base.html
-tests/regressiontests/templates/templates/test_extends_error.html
-tests/regressiontests/templates/templates/first/test.html
-tests/regressiontests/templates/templates/second/test.html
-tests/regressiontests/templates/templatetags/__init__.py
-tests/regressiontests/templates/templatetags/broken_tag.py
-tests/regressiontests/templates/templatetags/custom.py
-tests/regressiontests/test_client_regress/__init__.py
-tests/regressiontests/test_client_regress/models.py
-tests/regressiontests/test_client_regress/session.py
-tests/regressiontests/test_client_regress/urls.py
-tests/regressiontests/test_client_regress/views.py
-tests/regressiontests/test_client_regress/bad_templates/404.html
-tests/regressiontests/test_client_regress/fixtures/testdata.json
-tests/regressiontests/test_client_regress/templates/unicode.html
-tests/regressiontests/test_runner/__init__.py
-tests/regressiontests/test_runner/models.py
-tests/regressiontests/test_runner/tests.py
-tests/regressiontests/test_utils/__init__.py
-tests/regressiontests/test_utils/models.py
-tests/regressiontests/test_utils/tests.py
-tests/regressiontests/text/__init__.py
-tests/regressiontests/text/models.py
-tests/regressiontests/text/tests.py
-tests/regressiontests/urlpatterns_reverse/__init__.py
-tests/regressiontests/urlpatterns_reverse/extra_urls.py
-tests/regressiontests/urlpatterns_reverse/included_namespace_urls.py
-tests/regressiontests/urlpatterns_reverse/included_urls.py
-tests/regressiontests/urlpatterns_reverse/included_urls2.py
-tests/regressiontests/urlpatterns_reverse/middleware.py
-tests/regressiontests/urlpatterns_reverse/models.py
-tests/regressiontests/urlpatterns_reverse/namespace_urls.py
-tests/regressiontests/urlpatterns_reverse/no_urls.py
-tests/regressiontests/urlpatterns_reverse/tests.py
-tests/regressiontests/urlpatterns_reverse/urlconf_inner.py
-tests/regressiontests/urlpatterns_reverse/urlconf_outer.py
-tests/regressiontests/urlpatterns_reverse/urls.py
-tests/regressiontests/urlpatterns_reverse/urls_error_handlers.py
-tests/regressiontests/urlpatterns_reverse/urls_error_handlers_callables.py
-tests/regressiontests/urlpatterns_reverse/views.py
-tests/regressiontests/utils/__init__.py
-tests/regressiontests/utils/checksums.py
-tests/regressiontests/utils/datastructures.py
-tests/regressiontests/utils/dateformat.py
-tests/regressiontests/utils/datetime_safe.py
-tests/regressiontests/utils/decorators.py
-tests/regressiontests/utils/feedgenerator.py
-tests/regressiontests/utils/functional.py
-tests/regressiontests/utils/html.py
-tests/regressiontests/utils/models.py
-tests/regressiontests/utils/module_loading.py
-tests/regressiontests/utils/simplelazyobject.py
-tests/regressiontests/utils/termcolors.py
-tests/regressiontests/utils/tests.py
-tests/regressiontests/utils/text.py
-tests/regressiontests/utils/timesince.py
-tests/regressiontests/utils/tzinfo.py
-tests/regressiontests/utils/urls.py
-tests/regressiontests/utils/views.py
-tests/regressiontests/utils/eggs/test_egg.egg
-tests/regressiontests/utils/test_module/__init__.py
-tests/regressiontests/utils/test_module/bad_module.py
-tests/regressiontests/utils/test_module/good_module.py
-tests/regressiontests/views/__init__.py
-tests/regressiontests/views/models.py
-tests/regressiontests/views/urls.py
-tests/regressiontests/views/views.py
-tests/regressiontests/views/app0/__init__.py
-tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/app1/__init__.py
-tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/app2/__init__.py
-tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/app3/__init__.py
-tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/app4/__init__.py
-tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/fixtures/testdata.json
-tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.mo
-tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.po
-tests/regressiontests/views/media/file.txt
-tests/regressiontests/views/media/file.txt.gz
-tests/regressiontests/views/media/file.unknown
-tests/regressiontests/views/templates/debug/template_exception.html
-tests/regressiontests/views/templatetags/__init__.py
-tests/regressiontests/views/templatetags/debugtags.py
-tests/regressiontests/views/tests/__init__.py
-tests/regressiontests/views/tests/debug.py
-tests/regressiontests/views/tests/defaults.py
-tests/regressiontests/views/tests/i18n.py
-tests/regressiontests/views/tests/specials.py
-tests/regressiontests/views/tests/static.py
-tests/regressiontests/views/tests/generic/__init__.py
-tests/regressiontests/views/tests/generic/create_update.py
-tests/regressiontests/views/tests/generic/date_based.py
-tests/templates/404.html
-tests/templates/500.html
-tests/templates/base.html
-tests/templates/extended.html
-tests/templates/form_view.html
-tests/templates/login.html
-tests/templates/comments/comment_notification_email.txt
-tests/templates/custom_admin/add_form.html
-tests/templates/custom_admin/change_form.html
-tests/templates/custom_admin/change_list.html
-tests/templates/custom_admin/delete_confirmation.html
-tests/templates/custom_admin/delete_selected_confirmation.html
-tests/templates/custom_admin/index.html
-tests/templates/custom_admin/login.html
-tests/templates/custom_admin/logout.html
-tests/templates/custom_admin/object_history.html
-tests/templates/custom_admin/password_change_done.html
-tests/templates/custom_admin/password_change_form.html
-tests/templates/views/article_archive_day.html
-tests/templates/views/article_archive_month.html
-tests/templates/views/article_confirm_delete.html
-tests/templates/views/article_detail.html
-tests/templates/views/article_form.html
-tests/templates/views/datearticle_archive_month.html
-tests/templates/views/urlarticle_detail.html
-tests/templates/views/urlarticle_form.html \ No newline at end of file
diff --git a/parts/django/Django.egg-info/dependency_links.txt b/parts/django/Django.egg-info/dependency_links.txt
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/Django.egg-info/dependency_links.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/Django.egg-info/top_level.txt b/parts/django/Django.egg-info/top_level.txt
deleted file mode 100644
index d3e4ba5..0000000
--- a/parts/django/Django.egg-info/top_level.txt
+++ /dev/null
@@ -1 +0,0 @@
-django
diff --git a/parts/django/INSTALL b/parts/django/INSTALL
deleted file mode 100644
index 644c524..0000000
--- a/parts/django/INSTALL
+++ /dev/null
@@ -1,16 +0,0 @@
-Thanks for downloading Django.
-
-To install it, make sure you have Python 2.4 or greater installed. Then run
-this command from the command prompt:
-
- python setup.py install
-
-AS AN ALTERNATIVE, you can just copy the entire "django" directory to Python's
-site-packages directory, which is located wherever your Python installation
-lives. Some places you might check are:
-
- /usr/lib/python2.5/site-packages (Unix, Python 2.5)
- /usr/lib/python2.4/site-packages (Unix, Python 2.4)
- C:\\PYTHON\site-packages (Windows)
-
-For more detailed instructions, see docs/intro/install.txt.
diff --git a/parts/django/LICENSE b/parts/django/LICENSE
deleted file mode 100644
index d0c3f28..0000000
--- a/parts/django/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) Django Software Foundation and individual contributors.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. Neither the name of Django nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/parts/django/MANIFEST.in b/parts/django/MANIFEST.in
deleted file mode 100644
index d12b252..0000000
--- a/parts/django/MANIFEST.in
+++ /dev/null
@@ -1,29 +0,0 @@
-include README
-include AUTHORS
-include INSTALL
-include LICENSE
-include MANIFEST.in
-include django/contrib/gis/gdal/LICENSE
-include django/contrib/gis/geos/LICENSE
-include django/dispatch/license.txt
-include django/utils/simplejson/LICENSE.txt
-recursive-include docs *
-recursive-include scripts *
-recursive-include extras *
-recursive-include tests *
-recursive-include django/conf/locale *
-recursive-include django/contrib/admin/templates *
-recursive-include django/contrib/admin/media *
-recursive-include django/contrib/admindocs/templates *
-recursive-include django/contrib/auth/fixtures *
-recursive-include django/contrib/auth/tests/templates *
-recursive-include django/contrib/comments/templates *
-recursive-include django/contrib/databrowse/templates *
-recursive-include django/contrib/formtools/templates *
-recursive-include django/contrib/flatpages/fixtures *
-recursive-include django/contrib/flatpages/tests/templates *
-recursive-include django/contrib/gis/templates *
-recursive-include django/contrib/gis/tests/data *
-recursive-include django/contrib/gis/tests/geoapp/fixtures *
-recursive-include django/contrib/gis/tests/geogapp/fixtures *
-recursive-include django/contrib/sitemaps/templates *
diff --git a/parts/django/PKG-INFO b/parts/django/PKG-INFO
deleted file mode 100644
index f4b637d..0000000
--- a/parts/django/PKG-INFO
+++ /dev/null
@@ -1,23 +0,0 @@
-Metadata-Version: 1.0
-Name: Django
-Version: 1.2.4
-Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
-Home-page: http://www.djangoproject.com/
-Author: Django Software Foundation
-Author-email: foundation@djangoproject.com
-License: UNKNOWN
-Download-URL: http://media.djangoproject.com/releases/1.2/Django-1.2.4.tar.gz
-Description: UNKNOWN
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Web Environment
-Classifier: Framework :: Django
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: BSD License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Topic :: Internet :: WWW/HTTP
-Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
-Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
-Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff --git a/parts/django/README b/parts/django/README
deleted file mode 100644
index e748d9b..0000000
--- a/parts/django/README
+++ /dev/null
@@ -1,37 +0,0 @@
-Django is a high-level Python Web framework that encourages rapid development
-and clean, pragmatic design.
-
-All documentation is in the "docs" directory and online at
-http://docs.djangoproject.com/en/dev/. If you're just getting started, here's
-how we recommend you read the docs:
-
- * First, read docs/intro/install.txt for instructions on installing Django.
-
- * Next, work through the tutorials in order (docs/intro/tutorial01.txt,
- docs/intro/tutorial02.txt, etc.).
-
- * If you want to set up an actual deployment server, read
- docs/howto/deployment/index.txt for instructions.
-
- * You'll probably want to read through the topical guides (in docs/topics)
- next; from there you can jump to the HOWTOs (in docs/howto) for specific
- problems, and check out the reference (docs/ref) for gory details.
-
-Docs are updated rigorously. If you find any problems in the docs, or think they
-should be clarified in any way, please take 30 seconds to fill out a ticket
-here:
-
-http://code.djangoproject.com/newticket
-
-To get more help:
-
- * Join the #django channel on irc.freenode.net. Lots of helpful people
- hang out there. Read the archives at http://botland.oebfare.com/logger/django/.
-
- * Join the django-users mailing list, or read the archives, at
- http://groups.google.com/group/django-users.
-
-To contribute to Django:
-
- * Check out http://www.djangoproject.com/community/ for information
- about getting involved.
diff --git a/parts/django/django/__init__.py b/parts/django/django/__init__.py
deleted file mode 100644
index 232578d..0000000
--- a/parts/django/django/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-VERSION = (1, 2, 4, 'final', 0)
-
-def get_version():
- version = '%s.%s' % (VERSION[0], VERSION[1])
- if VERSION[2]:
- version = '%s.%s' % (version, VERSION[2])
- if VERSION[3:] == ('alpha', 0):
- version = '%s pre-alpha' % version
- else:
- if VERSION[3] != 'final':
- version = '%s %s %s' % (version, VERSION[3], VERSION[4])
- from django.utils.version import get_svn_revision
- svn_rev = get_svn_revision()
- if svn_rev != u'SVN-unknown':
- version = "%s %s" % (version, svn_rev)
- return version
diff --git a/parts/django/django/bin/__init__.py b/parts/django/django/bin/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/bin/__init__.py
+++ /dev/null
diff --git a/parts/django/django/bin/compile-messages.py b/parts/django/django/bin/compile-messages.py
deleted file mode 100755
index 0deaf6a..0000000
--- a/parts/django/django/bin/compile-messages.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-if __name__ == "__main__":
- import sys
- name = sys.argv[0]
- args = ' '.join(sys.argv[1:])
- print >> sys.stderr, "%s has been moved into django-admin.py" % name
- print >> sys.stderr, 'Please run "django-admin.py compilemessages %s" instead.'% args
- print >> sys.stderr
- sys.exit(1)
-
diff --git a/parts/django/django/bin/daily_cleanup.py b/parts/django/django/bin/daily_cleanup.py
deleted file mode 100755
index c9f4cb9..0000000
--- a/parts/django/django/bin/daily_cleanup.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Daily cleanup job.
-
-Can be run as a cronjob to clean out old data from the database (only expired
-sessions at the moment).
-"""
-
-from django.core import management
-
-if __name__ == "__main__":
- management.call_command('cleanup')
diff --git a/parts/django/django/bin/django-admin.py b/parts/django/django/bin/django-admin.py
deleted file mode 100755
index f518cdc..0000000
--- a/parts/django/django/bin/django-admin.py
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-from django.core import management
-
-if __name__ == "__main__":
- management.execute_from_command_line()
diff --git a/parts/django/django/bin/make-messages.py b/parts/django/django/bin/make-messages.py
deleted file mode 100755
index 1c84416..0000000
--- a/parts/django/django/bin/make-messages.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-if __name__ == "__main__":
- import sys
- name = sys.argv[0]
- args = ' '.join(sys.argv[1:])
- print >> sys.stderr, "%s has been moved into django-admin.py" % name
- print >> sys.stderr, 'Please run "django-admin.py makemessages %s" instead.'% args
- print >> sys.stderr
- sys.exit(1)
-
diff --git a/parts/django/django/bin/profiling/__init__.py b/parts/django/django/bin/profiling/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/bin/profiling/__init__.py
+++ /dev/null
diff --git a/parts/django/django/bin/profiling/gather_profile_stats.py b/parts/django/django/bin/profiling/gather_profile_stats.py
deleted file mode 100644
index 0fd2b7f..0000000
--- a/parts/django/django/bin/profiling/gather_profile_stats.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-
-"""
-gather_profile_stats.py /path/to/dir/of/profiles
-
-Note that the aggregated profiles must be read with pstats.Stats, not
-hotshot.stats (the formats are incompatible)
-"""
-
-from hotshot import stats
-import pstats
-import sys, os
-
-def gather_stats(p):
- profiles = {}
- for f in os.listdir(p):
- if f.endswith('.agg.prof'):
- path = f[:-9]
- prof = pstats.Stats(os.path.join(p, f))
- elif f.endswith('.prof'):
- bits = f.split('.')
- path = ".".join(bits[:-3])
- prof = stats.load(os.path.join(p, f))
- else:
- continue
- print "Processing %s" % f
- if path in profiles:
- profiles[path].add(prof)
- else:
- profiles[path] = prof
- os.unlink(os.path.join(p, f))
- for (path, prof) in profiles.items():
- prof.dump_stats(os.path.join(p, "%s.agg.prof" % path))
-
-if __name__ == '__main__':
- gather_stats(sys.argv[1])
diff --git a/parts/django/django/bin/unique-messages.py b/parts/django/django/bin/unique-messages.py
deleted file mode 100755
index c601a9e..0000000
--- a/parts/django/django/bin/unique-messages.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-
-def unique_messages():
- basedir = None
-
- if os.path.isdir(os.path.join('conf', 'locale')):
- basedir = os.path.abspath(os.path.join('conf', 'locale'))
- elif os.path.isdir('locale'):
- basedir = os.path.abspath('locale')
- else:
- print "this script should be run from the django svn tree or your project or app tree"
- sys.exit(1)
-
- for (dirpath, dirnames, filenames) in os.walk(basedir):
- for f in filenames:
- if f.endswith('.po'):
- sys.stderr.write('processing file %s in %s\n' % (f, dirpath))
- pf = os.path.splitext(os.path.join(dirpath, f))[0]
- cmd = 'msguniq "%s.po"' % pf
- stdout = os.popen(cmd)
- msg = stdout.read()
- open('%s.po' % pf, 'w').write(msg)
-
-if __name__ == "__main__":
- unique_messages()
diff --git a/parts/django/django/conf/__init__.py b/parts/django/django/conf/__init__.py
deleted file mode 100644
index d94f6e9..0000000
--- a/parts/django/django/conf/__init__.py
+++ /dev/null
@@ -1,136 +0,0 @@
-"""
-Settings and configuration for Django.
-
-Values will be read from the module specified by the DJANGO_SETTINGS_MODULE environment
-variable, and then from django.conf.global_settings; see the global settings file for
-a list of all possible variables.
-"""
-
-import os
-import re
-import time # Needed for Windows
-
-from django.conf import global_settings
-from django.utils.functional import LazyObject
-from django.utils import importlib
-
-ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
-
-class LazySettings(LazyObject):
- """
- A lazy proxy for either global Django settings or a custom settings object.
- The user can manually configure settings prior to using them. Otherwise,
- Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
- """
- def _setup(self):
- """
- Load the settings module pointed to by the environment variable. This
- is used the first time we need any settings at all, if the user has not
- previously configured the settings manually.
- """
- try:
- settings_module = os.environ[ENVIRONMENT_VARIABLE]
- if not settings_module: # If it's set but is an empty string.
- raise KeyError
- except KeyError:
- # NOTE: This is arguably an EnvironmentError, but that causes
- # problems with Python's interactive help.
- raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
-
- self._wrapped = Settings(settings_module)
-
- def configure(self, default_settings=global_settings, **options):
- """
- Called to manually configure the settings. The 'default_settings'
- parameter sets where to retrieve any unspecified values from (its
- argument must support attribute access (__getattr__)).
- """
- if self._wrapped != None:
- raise RuntimeError('Settings already configured.')
- holder = UserSettingsHolder(default_settings)
- for name, value in options.items():
- setattr(holder, name, value)
- self._wrapped = holder
-
- def configured(self):
- """
- Returns True if the settings have already been configured.
- """
- return bool(self._wrapped)
- configured = property(configured)
-
-class Settings(object):
- def __init__(self, settings_module):
- # update this dict from global settings (but only for ALL_CAPS settings)
- for setting in dir(global_settings):
- if setting == setting.upper():
- setattr(self, setting, getattr(global_settings, setting))
-
- # store the settings module in case someone later cares
- self.SETTINGS_MODULE = settings_module
-
- try:
- mod = importlib.import_module(self.SETTINGS_MODULE)
- except ImportError, e:
- raise ImportError("Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e))
-
- # Settings that should be converted into tuples if they're mistakenly entered
- # as strings.
- tuple_settings = ("INSTALLED_APPS", "TEMPLATE_DIRS")
-
- for setting in dir(mod):
- if setting == setting.upper():
- setting_value = getattr(mod, setting)
- if setting in tuple_settings and type(setting_value) == str:
- setting_value = (setting_value,) # In case the user forgot the comma.
- setattr(self, setting, setting_value)
-
- # Expand entries in INSTALLED_APPS like "django.contrib.*" to a list
- # of all those apps.
- new_installed_apps = []
- for app in self.INSTALLED_APPS:
- if app.endswith('.*'):
- app_mod = importlib.import_module(app[:-2])
- appdir = os.path.dirname(app_mod.__file__)
- app_subdirs = os.listdir(appdir)
- app_subdirs.sort()
- name_pattern = re.compile(r'[a-zA-Z]\w*')
- for d in app_subdirs:
- if name_pattern.match(d) and os.path.isdir(os.path.join(appdir, d)):
- new_installed_apps.append('%s.%s' % (app[:-2], d))
- else:
- new_installed_apps.append(app)
- self.INSTALLED_APPS = new_installed_apps
-
- if hasattr(time, 'tzset') and getattr(self, 'TIME_ZONE'):
- # Move the time zone info into os.environ. See ticket #2315 for why
- # we don't do this unconditionally (breaks Windows).
- os.environ['TZ'] = self.TIME_ZONE
- time.tzset()
-
-class UserSettingsHolder(object):
- """
- Holder for user configured settings.
- """
- # SETTINGS_MODULE doesn't make much sense in the manually configured
- # (standalone) case.
- SETTINGS_MODULE = None
-
- def __init__(self, default_settings):
- """
- Requests for configuration variables not in this class are satisfied
- from the module specified in default_settings (if possible).
- """
- self.default_settings = default_settings
-
- def __getattr__(self, name):
- return getattr(self.default_settings, name)
-
- def __dir__(self):
- return self.__dict__.keys() + dir(self.default_settings)
-
- # For Python < 2.6:
- __members__ = property(lambda self: self.__dir__())
-
-settings = LazySettings()
-
diff --git a/parts/django/django/conf/app_template/__init__.py b/parts/django/django/conf/app_template/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/app_template/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/app_template/models.py b/parts/django/django/conf/app_template/models.py
deleted file mode 100644
index 71a8362..0000000
--- a/parts/django/django/conf/app_template/models.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.db import models
-
-# Create your models here.
diff --git a/parts/django/django/conf/app_template/tests.py b/parts/django/django/conf/app_template/tests.py
deleted file mode 100644
index 2247054..0000000
--- a/parts/django/django/conf/app_template/tests.py
+++ /dev/null
@@ -1,23 +0,0 @@
-"""
-This file demonstrates two different styles of tests (one doctest and one
-unittest). These will both pass when you run "manage.py test".
-
-Replace these with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-class SimpleTest(TestCase):
- def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
- self.failUnlessEqual(1 + 1, 2)
-
-__test__ = {"doctest": """
-Another way to test that 1 + 1 is equal to 2.
-
->>> 1 + 1 == 2
-True
-"""}
-
diff --git a/parts/django/django/conf/app_template/views.py b/parts/django/django/conf/app_template/views.py
deleted file mode 100644
index 60f00ef..0000000
--- a/parts/django/django/conf/app_template/views.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create your views here.
diff --git a/parts/django/django/conf/global_settings.py b/parts/django/django/conf/global_settings.py
deleted file mode 100644
index 86f59f0..0000000
--- a/parts/django/django/conf/global_settings.py
+++ /dev/null
@@ -1,524 +0,0 @@
-# Default Django settings. Override these with settings in the module
-# pointed-to by the DJANGO_SETTINGS_MODULE environment variable.
-
-# This is defined here as a do-nothing function because we can't import
-# django.utils.translation -- that module depends on the settings.
-gettext_noop = lambda s: s
-
-####################
-# CORE #
-####################
-
-DEBUG = False
-TEMPLATE_DEBUG = False
-
-# Whether the framework should propagate raw exceptions rather than catching
-# them. This is useful under some testing siutations and should never be used
-# on a live site.
-DEBUG_PROPAGATE_EXCEPTIONS = False
-
-# Whether to use the "Etag" header. This saves bandwidth but slows down performance.
-USE_ETAGS = False
-
-# People who get code error notifications.
-# In the format (('Full Name', 'email@domain.com'), ('Full Name', 'anotheremail@domain.com'))
-ADMINS = ()
-
-# Tuple of IP addresses, as strings, that:
-# * See debug comments, when DEBUG is true
-# * Receive x-headers
-INTERNAL_IPS = ()
-
-# Local time zone for this installation. All choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all
-# systems may support all possibilities).
-TIME_ZONE = 'America/Chicago'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
-
-# Languages we provide translations for, out of the box. The language name
-# should be the utf-8 encoded local name for the language.
-LANGUAGES = (
- ('ar', gettext_noop('Arabic')),
- ('bg', gettext_noop('Bulgarian')),
- ('bn', gettext_noop('Bengali')),
- ('bs', gettext_noop('Bosnian')),
- ('ca', gettext_noop('Catalan')),
- ('cs', gettext_noop('Czech')),
- ('cy', gettext_noop('Welsh')),
- ('da', gettext_noop('Danish')),
- ('de', gettext_noop('German')),
- ('el', gettext_noop('Greek')),
- ('en', gettext_noop('English')),
- ('en-gb', gettext_noop('British English')),
- ('es', gettext_noop('Spanish')),
- ('es-ar', gettext_noop('Argentinian Spanish')),
- ('et', gettext_noop('Estonian')),
- ('eu', gettext_noop('Basque')),
- ('fa', gettext_noop('Persian')),
- ('fi', gettext_noop('Finnish')),
- ('fr', gettext_noop('French')),
- ('fy-nl', gettext_noop('Frisian')),
- ('ga', gettext_noop('Irish')),
- ('gl', gettext_noop('Galician')),
- ('he', gettext_noop('Hebrew')),
- ('hi', gettext_noop('Hindi')),
- ('hr', gettext_noop('Croatian')),
- ('hu', gettext_noop('Hungarian')),
- ('id', gettext_noop('Indonesian')),
- ('is', gettext_noop('Icelandic')),
- ('it', gettext_noop('Italian')),
- ('ja', gettext_noop('Japanese')),
- ('ka', gettext_noop('Georgian')),
- ('km', gettext_noop('Khmer')),
- ('kn', gettext_noop('Kannada')),
- ('ko', gettext_noop('Korean')),
- ('lt', gettext_noop('Lithuanian')),
- ('lv', gettext_noop('Latvian')),
- ('mk', gettext_noop('Macedonian')),
- ('ml', gettext_noop('Malayalam')),
- ('mn', gettext_noop('Mongolian')),
- ('nl', gettext_noop('Dutch')),
- ('no', gettext_noop('Norwegian')),
- ('nb', gettext_noop('Norwegian Bokmal')),
- ('nn', gettext_noop('Norwegian Nynorsk')),
- ('pl', gettext_noop('Polish')),
- ('pt', gettext_noop('Portuguese')),
- ('pt-br', gettext_noop('Brazilian Portuguese')),
- ('ro', gettext_noop('Romanian')),
- ('ru', gettext_noop('Russian')),
- ('sk', gettext_noop('Slovak')),
- ('sl', gettext_noop('Slovenian')),
- ('sq', gettext_noop('Albanian')),
- ('sr', gettext_noop('Serbian')),
- ('sr-latn', gettext_noop('Serbian Latin')),
- ('sv', gettext_noop('Swedish')),
- ('ta', gettext_noop('Tamil')),
- ('te', gettext_noop('Telugu')),
- ('th', gettext_noop('Thai')),
- ('tr', gettext_noop('Turkish')),
- ('uk', gettext_noop('Ukrainian')),
- ('vi', gettext_noop('Vietnamese')),
- ('zh-cn', gettext_noop('Simplified Chinese')),
- ('zh-tw', gettext_noop('Traditional Chinese')),
-)
-
-# Languages using BiDi (right-to-left) layout
-LANGUAGES_BIDI = ("he", "ar", "fa")
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-LOCALE_PATHS = ()
-LANGUAGE_COOKIE_NAME = 'django_language'
-
-# If you set this to True, Django will format dates, numbers and calendars
-# according to user current locale
-USE_L10N = False
-
-# Not-necessarily-technical managers of the site. They get broken link
-# notifications and other various e-mails.
-MANAGERS = ADMINS
-
-# Default content type and charset to use for all HttpResponse objects, if a
-# MIME type isn't manually specified. These are used to construct the
-# Content-Type header.
-DEFAULT_CONTENT_TYPE = 'text/html'
-DEFAULT_CHARSET = 'utf-8'
-
-# Encoding of files read from disk (template and initial SQL files).
-FILE_CHARSET = 'utf-8'
-
-# E-mail address that error messages come from.
-SERVER_EMAIL = 'root@localhost'
-
-# Whether to send broken-link e-mails.
-SEND_BROKEN_LINK_EMAILS = False
-
-# Database connection info.
-# Legacy format
-DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-DATABASE_NAME = '' # Or path to database file if using sqlite3.
-DATABASE_USER = '' # Not used with sqlite3.
-DATABASE_PASSWORD = '' # Not used with sqlite3.
-DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
-DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
-DATABASE_OPTIONS = {} # Set to empty dictionary for default.
-
-# New format
-DATABASES = {
-}
-
-# Classes used to implement db routing behaviour
-DATABASE_ROUTERS = []
-
-# The email backend to use. For possible shortcuts see django.core.mail.
-# The default is to use the SMTP backend.
-# Third-party backends can be specified by providing a Python path
-# to a module that defines an EmailBackend class.
-EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
-
-# Host for sending e-mail.
-EMAIL_HOST = 'localhost'
-
-# Port for sending e-mail.
-EMAIL_PORT = 25
-
-# Optional SMTP authentication information for EMAIL_HOST.
-EMAIL_HOST_USER = ''
-EMAIL_HOST_PASSWORD = ''
-EMAIL_USE_TLS = False
-
-# List of strings representing installed apps.
-INSTALLED_APPS = ()
-
-# List of locations of the template source files, in search order.
-TEMPLATE_DIRS = ()
-
-# List of callables that know how to import templates from various sources.
-# See the comments in django/core/template/loader.py for interface
-# documentation.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-# 'django.template.loaders.eggs.Loader',
-)
-
-# List of processors used by RequestContext to populate the context.
-# Each one should be a callable that takes the request object as its
-# only parameter and returns a dictionary to add to the context.
-TEMPLATE_CONTEXT_PROCESSORS = (
- 'django.contrib.auth.context_processors.auth',
- 'django.core.context_processors.debug',
- 'django.core.context_processors.i18n',
- 'django.core.context_processors.media',
-# 'django.core.context_processors.request',
- 'django.contrib.messages.context_processors.messages',
-)
-
-# Output to use in template system for invalid (e.g. misspelled) variables.
-TEMPLATE_STRING_IF_INVALID = ''
-
-# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
-# trailing slash.
-# Examples: "http://foo.com/media/", "/media/".
-ADMIN_MEDIA_PREFIX = '/media/'
-
-# Default e-mail address to use for various automated correspondence from
-# the site managers.
-DEFAULT_FROM_EMAIL = 'webmaster@localhost'
-
-# Subject-line prefix for email messages send with django.core.mail.mail_admins
-# or ...mail_managers. Make sure to include the trailing space.
-EMAIL_SUBJECT_PREFIX = '[Django] '
-
-# Whether to append trailing slashes to URLs.
-APPEND_SLASH = True
-
-# Whether to prepend the "www." subdomain to URLs that don't have it.
-PREPEND_WWW = False
-
-# Override the server-derived value of SCRIPT_NAME
-FORCE_SCRIPT_NAME = None
-
-# List of compiled regular expression objects representing User-Agent strings
-# that are not allowed to visit any page, systemwide. Use this for bad
-# robots/crawlers. Here are a few examples:
-# import re
-# DISALLOWED_USER_AGENTS = (
-# re.compile(r'^NaverBot.*'),
-# re.compile(r'^EmailSiphon.*'),
-# re.compile(r'^SiteSucker.*'),
-# re.compile(r'^sohu-search')
-# )
-DISALLOWED_USER_AGENTS = ()
-
-ABSOLUTE_URL_OVERRIDES = {}
-
-# Tuple of strings representing allowed prefixes for the {% ssi %} tag.
-# Example: ('/home/html', '/var/www')
-ALLOWED_INCLUDE_ROOTS = ()
-
-# If this is a admin settings module, this should be a list of
-# settings modules (in the format 'foo.bar.baz') for which this admin
-# is an admin.
-ADMIN_FOR = ()
-
-# 404s that may be ignored.
-IGNORABLE_404_STARTS = ('/cgi-bin/', '/_vti_bin', '/_vti_inf')
-IGNORABLE_404_ENDS = ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')
-
-# A secret key for this particular Django installation. Used in secret-key
-# hashing algorithms. Set this in your settings, or Django will complain
-# loudly.
-SECRET_KEY = ''
-
-# Default file storage mechanism that holds media.
-DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT.
-# Example: "http://media.lawrence.com"
-MEDIA_URL = ''
-
-# List of upload handler classes to be applied in order.
-FILE_UPLOAD_HANDLERS = (
- 'django.core.files.uploadhandler.MemoryFileUploadHandler',
- 'django.core.files.uploadhandler.TemporaryFileUploadHandler',
-)
-
-# Maximum size, in bytes, of a request before it will be streamed to the
-# file system instead of into memory.
-FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB
-
-# Directory in which upload streamed files will be temporarily saved. A value of
-# `None` will make Django use the operating system's default temporary directory
-# (i.e. "/tmp" on *nix systems).
-FILE_UPLOAD_TEMP_DIR = None
-
-# The numeric mode to set newly-uploaded files to. The value should be a mode
-# you'd pass directly to os.chmod; see http://docs.python.org/lib/os-file-dir.html.
-FILE_UPLOAD_PERMISSIONS = None
-
-# Python module path where user will place custom format definition.
-# The directory where this setting is pointing should contain subdirectories
-# named as the locales, containing a formats.py file
-# (i.e. "myproject.locale" for myproject/locale/en/formats.py etc. use)
-FORMAT_MODULE_PATH = None
-
-# Default formatting for date objects. See all available format strings here:
-# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'N j, Y'
-
-# Default formatting for datetime objects. See all available format strings here:
-# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATETIME_FORMAT = 'N j, Y, P'
-
-# Default formatting for time objects. See all available format strings here:
-# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-TIME_FORMAT = 'P'
-
-# Default formatting for date objects when only the year and month are relevant.
-# See all available format strings here:
-# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-YEAR_MONTH_FORMAT = 'F Y'
-
-# Default formatting for date objects when only the month and day are relevant.
-# See all available format strings here:
-# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-MONTH_DAY_FORMAT = 'F j'
-
-# Default short formatting for date objects. See all available format strings here:
-# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-SHORT_DATE_FORMAT = 'm/d/Y'
-
-# Default short formatting for datetime objects.
-# See all available format strings here:
-# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-SHORT_DATETIME_FORMAT = 'm/d/Y P'
-
-# Default formats to be used when parsing dates from input boxes, in order
-# See all available format string here:
-# http://docs.python.org/library/datetime.html#strftime-behavior
-# * Note that these format strings are different from the ones to display dates
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
- '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
- '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
- '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
-)
-
-# Default formats to be used when parsing times from input boxes, in order
-# See all available format string here:
-# http://docs.python.org/library/datetime.html#strftime-behavior
-# * Note that these format strings are different from the ones to display dates
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-
-# Default formats to be used when parsing dates and times from input boxes,
-# in order
-# See all available format string here:
-# http://docs.python.org/library/datetime.html#strftime-behavior
-# * Note that these format strings are different from the ones to display dates
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
- '%m/%d/%Y %H:%M', # '10/25/2006 14:30'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
-)
-
-# First day of week, to be used on calendars
-# 0 means Sunday, 1 means Monday...
-FIRST_DAY_OF_WEEK = 0
-
-# Decimal separator symbol
-DECIMAL_SEPARATOR = '.'
-
-# Boolean that sets whether to add thousand separator when formatting numbers
-USE_THOUSAND_SEPARATOR = False
-
-# Number of digits that will be together, when spliting them by
-# THOUSAND_SEPARATOR. 0 means no grouping, 3 means splitting by thousands...
-NUMBER_GROUPING = 0
-
-# Thousand separator symbol
-THOUSAND_SEPARATOR = ','
-
-# Do you want to manage transactions manually?
-# Hint: you really don't!
-TRANSACTIONS_MANAGED = False
-
-# The User-Agent string to use when checking for URL validity through the
-# isExistingURL validator.
-from django import get_version
-URL_VALIDATOR_USER_AGENT = "Django/%s (http://www.djangoproject.com)" % get_version()
-
-# The tablespaces to use for each model when not specified otherwise.
-DEFAULT_TABLESPACE = ''
-DEFAULT_INDEX_TABLESPACE = ''
-
-##############
-# MIDDLEWARE #
-##############
-
-# List of middleware classes to use. Order is important; in the request phase,
-# this middleware classes will be applied in the order given, and in the
-# response phase the middleware will be applied in reverse order.
-MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
-# 'django.middleware.http.ConditionalGetMiddleware',
-# 'django.middleware.gzip.GZipMiddleware',
-)
-
-############
-# SESSIONS #
-############
-
-SESSION_COOKIE_NAME = 'sessionid' # Cookie name. This can be whatever you want.
-SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 # Age of cookie, in seconds (default: 2 weeks).
-SESSION_COOKIE_DOMAIN = None # A string like ".lawrence.com", or None for standard domain cookie.
-SESSION_COOKIE_SECURE = False # Whether the session cookie should be secure (https:// only).
-SESSION_COOKIE_PATH = '/' # The path of the session cookie.
-SESSION_SAVE_EVERY_REQUEST = False # Whether to save the session data on every request.
-SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Whether a user's session cookie expires when the Web browser is closed.
-SESSION_ENGINE = 'django.contrib.sessions.backends.db' # The module to store session data
-SESSION_FILE_PATH = None # Directory to store session files if using the file session module. If None, the backend will use a sensible default.
-
-#########
-# CACHE #
-#########
-
-# The cache backend to use. See the docstring in django.core.cache for the
-# possible values.
-CACHE_BACKEND = 'locmem://'
-CACHE_MIDDLEWARE_KEY_PREFIX = ''
-CACHE_MIDDLEWARE_SECONDS = 600
-
-####################
-# COMMENTS #
-####################
-
-COMMENTS_ALLOW_PROFANITIES = False
-
-# The profanities that will trigger a validation error in the
-# 'hasNoProfanities' validator. All of these should be in lowercase.
-PROFANITIES_LIST = ('asshat', 'asshead', 'asshole', 'cunt', 'fuck', 'gook', 'nigger', 'shit')
-
-# The group ID that designates which users are banned.
-# Set to None if you're not using it.
-COMMENTS_BANNED_USERS_GROUP = None
-
-# The group ID that designates which users can moderate comments.
-# Set to None if you're not using it.
-COMMENTS_MODERATORS_GROUP = None
-
-# The group ID that designates the users whose comments should be e-mailed to MANAGERS.
-# Set to None if you're not using it.
-COMMENTS_SKETCHY_USERS_GROUP = None
-
-# The system will e-mail MANAGERS the first COMMENTS_FIRST_FEW comments by each
-# user. Set this to 0 if you want to disable it.
-COMMENTS_FIRST_FEW = 0
-
-# A tuple of IP addresses that have been banned from participating in various
-# Django-powered features.
-BANNED_IPS = ()
-
-##################
-# AUTHENTICATION #
-##################
-
-AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
-
-LOGIN_URL = '/accounts/login/'
-
-LOGOUT_URL = '/accounts/logout/'
-
-LOGIN_REDIRECT_URL = '/accounts/profile/'
-
-# The number of days a password reset link is valid for
-PASSWORD_RESET_TIMEOUT_DAYS = 3
-
-########
-# CSRF #
-########
-
-# Dotted path to callable to be used as view when a request is
-# rejected by the CSRF middleware.
-CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
-
-# Name and domain for CSRF cookie.
-CSRF_COOKIE_NAME = 'csrftoken'
-CSRF_COOKIE_DOMAIN = None
-
-############
-# MESSAGES #
-############
-
-# Class to use as messges backend
-MESSAGE_STORAGE = 'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'
-
-# Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within
-# django.contrib.messages to avoid imports in this settings file.
-
-###########
-# TESTING #
-###########
-
-# The name of the class to use to run the test suite
-TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
-
-# The name of the database to use for testing purposes.
-# If None, a name of 'test_' + DATABASE_NAME will be assumed
-TEST_DATABASE_NAME = None
-
-# Strings used to set the character set and collation order for the test
-# database. These values are passed literally to the server, so they are
-# backend-dependent. If None, no special settings are sent (system defaults are
-# used).
-TEST_DATABASE_CHARSET = None
-TEST_DATABASE_COLLATION = None
-
-############
-# FIXTURES #
-############
-
-# The list of directories to search for fixtures
-FIXTURE_DIRS = ()
diff --git a/parts/django/django/conf/locale/__init__.py b/parts/django/django/conf/locale/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ar/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ar/LC_MESSAGES/django.mo
deleted file mode 100644
index 77bc44d..0000000
--- a/parts/django/django/conf/locale/ar/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ar/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ar/LC_MESSAGES/django.po
deleted file mode 100644
index 28e2153..0000000
--- a/parts/django/django/conf/locale/ar/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5159 +0,0 @@
-# translation of django.po to Arabic
-# This file is distributed under the same license as the django package.
-#
-# Ossama M. Khayat <okhayat@yahoo.com>, 2009, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-12 11:16+0300\n"
-"PO-Revision-Date: 2010-05-12 11:20+0300\n"
-"Last-Translator: Ossama M. Khayat <okhayat@yahoo.com>\n"
-"Language-Team: Arabic <support@arabeyes.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
-"Plural-Forms: nplurals=4; plural=(n == 1? 0 : (n == 2? 1 : (n <= 10? 2 : 3)))\n"
-"\n"
-"\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "العربيّة"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "البلغاريّة"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "البنغاليّة"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "البوسنيّة"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "الكتلانيّة"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "التشيكيّة"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "الويلز"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "الدنماركيّة"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "الألمانيّة"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "اليونانيّة"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "الإنجليزيّة"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "الإنجليزيّة البريطانيّة"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "الإسبانيّة"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "الإسبانيّة الأرجنتينيّة"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "الإستونيّة"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "الباسك"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "الفارسيّة"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "الفنلنديّة"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "الفرنسيّة"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "الفريزيّة"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "الإيرلنديّة"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "الجليقيّة"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "العبريّة"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "الهندية"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "الكرواتيّة"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "الهنغاريّة"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "الإندونيسيّة"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "الآيسلنديّة"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "الإيطاليّة"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "اليابانيّة"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "الجورجيّة"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "الخمر"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "الهنديّة (كنّادا)"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "الكوريّة"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "اللتوانيّة"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "اللاتفيّة"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "المقدونيّة"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "المنغوليّة"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "الهولنديّة"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "النرويجيّة"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "البوكمال نرويجيّة"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "النينورسك نرويجيّة"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "البولنديّة"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "البرتغاليّة"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "البرتغاليّة البرازيليّة"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "الرومانيّة"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "الروسيّة"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "السلوفاكيّة"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "السلوفانيّة"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "الألبانيّة"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "الصربيّة"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "اللاتينيّة الصربيّة"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "السويديّة"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "التاميل"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "التيلوغو"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "التايلنديّة"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "التركيّة"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "الأكرانيّة"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "الفيتناميّة"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "الصينيّة المبسطة"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "الصينيّة التقليدية"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "تم حذف %(count)d %(items)s بنجاح."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "هل أنت متأكد؟"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "حذف سجلات %(verbose_name_plural)s المحددة"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>حسب %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "الكل"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "أي تاريخ"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "اليوم"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "الأيام السبعة الماضية"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "هذا الشهر"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "هذه السنة"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "نعم"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "لا"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "مجهول"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "إجراء:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "وقت الإجراء"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "معرف العنصر"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "ممثل العنصر"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "علامة الإجراء"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "غيّر الرسالة"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "مُدخل السجل"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "مُدخلات السجل"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "لاشيء"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "عدّل %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "و"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "أضاف %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "غيّر %(list)s في %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "حذف %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "لم يتم تغيير أية حقول."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "تم اضافة %(name)s \"%(obj)s\" بنجاح."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "يمكنك تعديله مجددا في الأسفل."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "يمكنك إضافة %s آخر بالأسفل."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "تم تغيير %(name)s \"%(obj)s\" بنجاح."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "تمت إضافة %(name)s \"%(obj)s\" بنجاح، يمكنك تعديله مرة أخرى بالأسفل."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr "يجب تحديد العناصر لتطبيق الإجراءات عليها. لم يتم تغيير أية عناصر."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "لم يحدد أي إجراء."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "أضف %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "العنصر %(name)s الذي به الحقل الأساسي %(key)r غير موجود."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "عدّل %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "خطـأ في قاعدة البيانات"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "تم تغيير %(name)s بنجاح."
-msgstr[1] "تم تغيير عنصري %(name)s بنجاح."
-msgstr[2] "تم تغيير %(count)s %(name)s بنجاح."
-msgstr[3] "تم تغيير %(count)s %(name)s بنجاح."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s تم تحديده"
-msgstr[1] "%(total_count)s تم تحديدهما"
-msgstr[2] "%(total_count)s تم تحديدهم"
-msgstr[3] "%(total_count)s تم تحديدهم"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "لا شيء محدد من %(cnt)s"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "تم حذف %(name)s \"%(obj)s\" بنجاح."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "تاريخ التغيير: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"رجاءً أدخل اسم مستخدم وكلمة مرور صحيحين، وانتبه إلى أن كلا الحقلين حساس لحالة "
-"الأحرف."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "رجاءً ادخل مرةً أخرى لأن جلستك انتهت."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"يبدو بأن متصفحك غير معد لقبول الكوكيز، قم بتفعيل الكوكيز من فضلك ثم تحديث "
-"هذه الصفحة والمحاولة مرة أخرى."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "اسم المستخدم يجب أن لا يحتوي على علامة '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "بريدك الإلكتروني ليس اسم المستخدم الخاص بك، جرب استخدام '%s' بدلا من ذلك."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "إدارة الموقع"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "ادخل"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "إدارة %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "التاريخ:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "الوقت:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "حالياً:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "تغيير:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "ابحث"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "أضف آخر"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "تعذر العثور على الصفحة"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "نحن آسفون، لكننا لم نعثر على الصفحة المطلوبة."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "الرئيسية"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "خطأ في المزود"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "خطأ في المزود (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "خطأ في المزود <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"حدث خطأ، وقم تم الابلاغ عنه إلى مدراء الموقع عبر البريد الإلكتروني وسيتم حل "
-"المشكلة قريبا. شكرا لك على صبرك."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "نفذ الإجراء المحدّد"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "نفّذ"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "اضغط هنا لتحديد جميع العناصر في جميع الصفحات"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "اختيار %(total_count)s %(module_name)s جميعها"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "إزالة الاختيار"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "أهلا، "
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "الوثائق"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "غيّر كلمة المرور"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "اخرج"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "إدارة موقع جانغو"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "إدارة جانغو"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "أضف"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "تاريخ"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "مشاهدة على الموقع"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "رجاءً صحّح الخطأ التالي."
-msgstr[1] "رجاءً صحّح الخطأين التاليين."
-msgstr[2] "رجاءً صحّح الأخطاء التالية."
-msgstr[3] "رجاءً صحّح الأخطاء التالية."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "أضف %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "مرشّح"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "احذف"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"حذف العنصر %(object_name)s '%(escaped_object)s' سيتسبب بحذف العناصر المرتبطة "
-"به، إلا أنك لا تملك صلاحية حذف العناصر التالية:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"متأكد أنك تريد حذف العنصر %(object_name)s \"%(escaped_object)s\"؟ سيتم حذف "
-"جميع العناصر التالية المرتبطة به:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "نعم، أنا متأكد"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "حذف عدّة عناصر"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"حذف %(object_name)s قد يؤدي إلى حذف العناصر المرتبطة به، إلا أن حساب "
-"المستخدم الخاص بك ليست له صلاحية حذف أنواع العناصر التالية:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"متأكد أنك تريد حذف سجلات %(object_name)s المحددة؟ جميع العناصر التالية "
-"والسجلات المتعلقة بها سيتم حذفها:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " حسب %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "النماذج المتوفرة في التطبيق %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "عدّل"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "ليست لديك الصلاحية لتعديل أي شيء."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "آخر الإجراءات"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "إجراءاتي"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "لا يوجد"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "مُحتوى مجهول"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"هنالك أمر خاطئ في تركيب قاعدة بياناتك، تأكد من أنه تم انشاء جداول قاعدة "
-"البيانات الملائمة، وأن قاعدة البيانات قابلة للقراءة من قبل المستخدم الملائم."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "اسم المستخدم:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "كلمة المرور:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "التاريخ/الوقت"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "المستخدم"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "إجراء"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"ليس لهذا العنصر سجلّ تغييرات، على الأغلب أنه لم يُنشأ من خلال نظام إدارة "
-"الموقع."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "أظهر الكل"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "احفظ"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "ابحث"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "نتيجة واحدة"
-msgstr[1] "نتيجتان"
-msgstr[2] "%(counter)s نتائج"
-msgstr[3] "%(counter)s نتيجة"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "المجموع %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "احفظ كجديد"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "احفظ وأضف آخر"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "احفظ واستمر بالتعديل"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"أولاً، أدخل اسم مستخدم وكلمة مرور. ومن ثم تستطيع تعديل المزيد من خيارات "
-"المستخدم."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "أدخل كلمة مرور جديدة للمستخدم <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "كلمة المرور"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "كلمة المرور (مجدداً)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "أدخل كلمة المرور ذاتها التي أعلاه لتأكيدها."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "إضافة سجل %(verbose_name)s آخر"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "أزل"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "احذفه؟"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "شكراً لك على قضائك بعض الوقت مع الموقع اليوم."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "ادخل مجدداً"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "غيّر كلمة مرورك"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "تم تغيير كلمة المرور بنجاح"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "تمّ تغيير كلمة مرورك."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"رجاءً أدخل كلمة مرورك القديمة، للأمان، ثم أدخل كلمة مرور الجديدة مرتين كي "
-"تتأكّد من كتابتها بشكل صحيح."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "كلمة المرور القديمة"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "كلمة المرور الجديدة"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "غيّر كلمة مروري"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "استعادة كلمة المرور"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "تم استعادة كلمة المرور"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "تم تعيين كلمة مرورك. يمكن الاستمرار وتسجيل دخولك الآن."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "تأكيد استعادة كلمة المرور"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "أدخل كلمة المرور الجديدة"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "رجاءً أدخل كلمة مرورك الجديدة مرتين كي تتأكّد من كتابتها بشكل صحيح."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "كلمة المرور الجديدة:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "أكّد كلمة المرور:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "تم إعادة تعيين كلمة المرور بنجاح"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"رابط استعادة كلمة المرور غير صحيح، ربما لأنه استُخدم من قبل. رجاءً اطلب "
-"استعادة كلمة المرور مرة أخرى."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "تم إعادة ضبط كلمة المرور بنجاح"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"لقد قمنا بإرسال تعليمات تعيين كلمة مرورك إلى عنوان البريد الإلكتروني الذي "
-"كتبته. يجب أن تصلك رسالتنا قريباً."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "لقد وصلتك رسالة البريد الإلكتروني هذه لأنك طلبت إعادة تعيين كلمة المرور."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "لحساب المستخدم الخاص بك في %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "رجاءً اذهب إلى الصفحة التالية واختر كلمة مرور جديدة:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "اسم المستخدم الخاص بك، في حال كنت قد نسيته:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "شكراً لاستخدامك موقعنا!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "فريق %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"نسيت كلمة مرورك؟ أدخل عنوان بريدك الإلكتروني بالأسفل وسنقوم بإرسال تعليمات "
-"تعيين كلمة مرور جديدة."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "عنوان البريد الإلكتروني:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "استعد كلمة مروري"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "كافة التواريخ"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "اختر %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "اختر %s لتغييره"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "موقع"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "قالب"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "وسم:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "مرشّح"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "عرض:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "التطبيق %r غير موجود"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "النموذج %(model_name)r غير موجود في التطبيق %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "العنصر `%(app_label)s.%(data_type)s` المرتبط"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "نموذج:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "عناصر `%(app_label)s.%(object_name)s` مرتبطة"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "كل %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "عدد %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "الحقول في عناصر %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "يبدو أن %s ليس عنصر urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "أوامر المفضلة"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "أوامر مفضلة الوثائق"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">لتركيب أوامر المفضلة، قم بسحب الوصلة إلى\n"
-"شريط أدات المفضلات في متصفحك، أو قم بالضغط عليها بالزر الأيمن وأضفها إلى "
-"مفضلاتك.\n"
-"سيمكنك الآن أن اختيار أوامر المفضلة من أي صفحة في الموقع، لاحظ بأن بعض\n"
-"أوامر المفضلة هذه معدة لتعمل على أجهزة كمبيوتر تعتبر على أنها \"داخلية\"\n"
-"(تحدث إلى مسؤول النظم إذا لم تكن متأكدا ما إذا كان كمبيوتر يعتبر \"داخليا\")."
-"</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "الوثائق لهذه الصفحة"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "ينتقل بك من أي صفحة إلى وثائق العرض الذي أنشأ هذه الصفحة."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "أظهر معرف الكائن"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "عرض نوع البيانات والمعرف الفريد للصفحات التي تمثل كائناً واحداً."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "عدّل هذا العنصر (النافذة الحالية)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "ينتقل بك إلى صفحة الإدارة للصفحات التي تمثل عنصراً واحداً."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "عدّل هذا العنصر (نافذة جديدة)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "كما سبق، لكن يفتح صفحة الإدارة في نافذة جديدة."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "المعلومات الشخصية"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "الصلاحيات"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "تواريخ مهمة"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "المجموعات"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "تم تغيير كلمة المرور بنجاح."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "غيّر كلمة المرور: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "اسم المستخدم"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "مطلوب. 30 حرف أو أقل. يتكوّن من حروف، وأرقام، والرموز @/./+/-/_ فقط."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "هذه القيمة يجب أن تحتوي الأحرف، والأرقام، والرموز @/./+/-/_ فقط."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "تأكيد كلمة المرور"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "هناك مستخدم موجود مسبقاً بهذا الاسم."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "حقلا كلمتي المرور غير متطابقين."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "هذا الحساب غير نشط."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "يبدو بأن الكوكيز غير مفعله في متصفحك، الكوكيز مطلوبة للتمكن من الدخول."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "عنوان بريد إلكتروني"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"عنوان البريد الإلكتروني هذا ليس مرتبط بأي حساب مستخدم. أأنت متأكد أنك قمت "
-"بالتسجيل؟"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "استعادة كلمة المرور في %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "تأكيد كلمة المرور الجديدة"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "كلمة مرورك القديمة غير صحيحة. رجاءً أدخلها مرة أخرى."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "الاسم"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "الاسم الرمزي"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "الصلاحية"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "الصلاحيات"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "مجموعة"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "المجموعات"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "اسم المستخدم"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "مطلوب. 30 حرف أو أقل. يتكوّن من حروف، وأرقام، والرموز @/./+/-/_ فقط."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "الاسم الأول"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "الاسم الأخير"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "عنوان البريد الإلكتروني"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "كلمة المرور"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"استخدم '[algo]$[salt]$[hexdigest]' أو استخدم <a href=\"password/\">استمارة "
-"تغيير كلمة المرور</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "حالة الطاقم"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "يحدد ما إذا كان المستخدم يستطيع الدخول إلى موقع الإدارة هذا."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "نشط"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"يحدد ما إذا كان المستخدم سيُعامل على أنّه نشط. أزل تحديد ها الخيار بدلاً من حذف "
-"الحسابات."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "حالة المستخدم الخارق"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "حدد بأن هذا المستخدم يمتلك كافة الصلاحيات دون الحاجة لتحديدها له تصريحا."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "آخر دخول"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "تاريخ الانضمام"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"بالإضافة إلى الصلاحيات المحددة للمستخدم يدويا، فإن المستخدم يحصل أيضا على "
-"كافة صلاحيات المجموعة التي ينتمي إليها."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "صلاحيات المستخدم"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "مستخدم"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "المستخدمين"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "رسالة"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "تم الخروج"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "أدخل عنوان بريد إلكتروني صحيح."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "محتوى"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "ميتاداتا"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "مُعلّم"
-msgstr[1] "مُعلّمان"
-msgstr[2] "مُعلّمة"
-msgstr[3] "مُعلّمة"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "تعليم التعليقات المحددة"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "مُعتمد"
-msgstr[1] "مُعتمدان"
-msgstr[2] "مُعتمدة"
-msgstr[3] "مُعتمد"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "اعتماد التعليقات المحددة"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "تم حذفه"
-msgstr[1] "تم حذفهما"
-msgstr[2] "تم حذفها"
-msgstr[3] "تم حذفها"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "احذف التعليقات المحددة"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "تم %(action)s التعليق بنجاح."
-msgstr[1] "تم %(action)s التعليقين بنجاح."
-msgstr[2] "%(count)s تعليقات تم %(action)s بنجاح."
-msgstr[3] "%(count)s تعليق تم %(action)s بنجاح."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "تعليقات %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "آخر التعليقات على %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "الاسم"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "عنوان بريد إلكتروني"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "رابط"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "تعليق"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "انتبه إلى ما تقول! الكلمة %s غير مسموح بها هنا."
-msgstr[1] "انتبه إلى ما تقول! الكلمتان %s غير مسموح بهما هنا."
-msgstr[2] "انتبه إلى ما تقول! الكلمات %s غير مسموح بها هنا."
-msgstr[3] "انتبه إلى ما تقول! الكلمات %s غير مسموح بها هنا."
-
-#: contrib/comments/forms.py:182
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "إن كتبت أي شيء في هذا الحقل فسيُعتبر تعليقك غير مرغوب به"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "نوع البيانات"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "معرف العنصر"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "اسم المستخدم"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "عنوان البريد الإلكتروني للمستخدم"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "عنوان URL للمستخدم"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "تعليق"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "تاريخ ووقت الإرسال"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "عنوان IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "عام"
-
-#: contrib/comments/models.py:62
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "أزل اختيار هذا المربّع كي تُزيل التعليق نهائياً من الموقع."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "محذوف"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"انتق هذا المربع إذا كان التعليق غير لائق، سيتم عرض الرسالة \"تم حذف هذا "
-"التعليق\" بدلا منه."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "تعليقات"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "كتب هذا التعليق مستخدم مُسجّل ولذا كان اسمهللقراءة فقط."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"كتب هذا التعليق مستخدم مُسجّل ولذا كان عنوان بريده الالكتروني للقراءة فقط."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"كتبه %(user)s في %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "علم"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "التاريخ"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "علَم التعليق"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "أعلام التعليقات"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "وافق على تعليق"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "تريد فعلاً جعل هذا التعليق عامّاً؟"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "وافق"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "شكراً لموافقتك"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "شكراً لك على قضاء وقتك في تحسين جودة النقاش على موقعنا"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "أزل تعليق"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "تريد فعلاً إزالة هذا التعليق؟"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "شكراً لإزالته"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "سِم هذا التعليق"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "تريد فعلاً وسم هذا التعليق؟"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "سٍم"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "شكراً لك على الوَسم"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "أرسل "
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "عاين"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "شكراً على تعليقك"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "شكراً لك على تعليقك"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "عاين تعليقك"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "رجاءً صحّح الخطأ التالي."
-msgstr[1] "رجاءً صحّح الخطأين التاليين."
-msgstr[2] "رجاءً صحّح الأخطاء التالية."
-msgstr[3] "رجاءً صحّح الأخطاء التالية."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "أرسال تعليقك"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "أو قم ببعض التغيير"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "اسم صنف النموذج في python"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "أنواع البيانات"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "مثال: '/about/contact/'. تأكد من وضع شرطات في البداية والنهاية."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"هذه القيمة يجب أن تحتوي فقط على الأحرف والأرقام والشرطات السفلية والشرطة "
-"العادية والشرطات المائلة."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "خيارات متقدّمة"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "العنوان"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "المحتوى"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "السماح بالتعليقات"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "اسم القالب"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"مثال: 'flatpages/contact_page.html'. إن لم تكن الصفحة موجودة، فسوف يستخدم "
-"النظام 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "التسجيل مطلوب"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"إذا كان هذا الخيار محددا، فإن المستخدمين الداخلين فقط سيتمكنون من مشاهدة "
-"الصفحة."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "صفحة مسطحة"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "صفحات مسطحة"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"نعتذر، لكنّ استمارتك انتهت صلاحيتها. رجاء أكمل تعبئة الاستمارة من هذه الصفحة."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "حقل GIS الأساسي -- مُرتبط بنوع مواصفات OpenGIS الهندسية."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "نقطة إحداثية"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "سطر تسلسل أحرف"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "مُضلّع إحداثي"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "نقاط إحداثية"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "تسلسل أحرف متعدد الأسطر"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "مجموعة مُضلعات إحداثية"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "مجموعة إحداثية"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "لم تُدخل أي أحداثيات."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "الإحداثيات غير صحيحة."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "نوع الإحداثيات غير صحيح."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr "حدث خطأ أثناء تحويل geometry إلى حقل SRID."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr " "
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr " "
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr " "
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr " "
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "مليون"
-msgstr[1] "مليونان"
-msgstr[2] "%(value).1f ملايين"
-msgstr[3] "%(value).1f مليون"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "مليار"
-msgstr[1] "ملياران"
-msgstr[2] "%(value).1f مليارات"
-msgstr[3] "%(value).1f مليار"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "بليار"
-msgstr[1] "بلياران"
-msgstr[2] "%(value).1f بليارات"
-msgstr[3] "%(value).1f بليار"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "واحد"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "إثنان"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "ثلالثة"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "أربعة"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "خمسة"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "ستة"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "سبعة"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "ثمانية"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "تسعة"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "اليوم"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "غداً"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "أمس"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "أدخل رمزاً بريدياً بالنسق NNNN أو ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "يتطلب هذا الحقل أرقاماً فقط."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "يتطلب الحقل 7 أو 8 أعداد."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "أدخل رمز CUIT صحيح بالنسق XX-XXXXXXXX-X أو XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "رمز CUIT غير صحيح."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "برغنلاند"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "كارينثيا"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "أدنى النمسا"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "أقصى النمسا"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "سالزبورغ"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "تايرُل"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "فيينا"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "أدخل رمز zip بالنسق XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "أدخل رقم ضمان اجتماعي سويدي صحيح بالنسق XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "أدخل رمزاً بريدياً من 4 أعداد."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "أدخل رمزاً بريدياً بالنسق XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "أرقام الهاتف يجب أن تكون بالنسق XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "انتق ولايةً برازيلية صحيحة. تلك الولاية ليست ضمن الولايات المتاحة."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "رقم CPF غير صحيح."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "يتطلب هذا الحقل 11 رقماً أو 14 حرفاً كحد أقصى."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "رقم CNPJ غير صحيح."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "يتطلب هذا الحقل 14 رقماً على الأقل."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "أدخل رمزاً بريدياً بنسق XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "أدخل رقم ضمان اجتماعي كندي صحيح بالنسق XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "أرجاو"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "جنيف"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "زيورخ"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"أدخل رقم هوية سويسرية صحيح أو رقم جواز سفر بالنسق X1234567<0 أو 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "أدخل رمز RUT تشيلي صحيح."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "أدخل رمز RUT تشيلي صحيح. النسق هو XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "قيمة RUT التشيلية غير صحيحة."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "براغ"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "وسط منطقة بوهيميا"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "جنوب منطقة بوهيميا"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "منطقة جنوب مورافيا"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "أدخل رمزاً بريدياً بالنسق XXXXX أو XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "أدخل رقم الميلاد بالنسق XXXXXX/XXXX أو XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "مُعطى غير صحيح للجنس، الرجاء إدخال القيمة 'f' أو 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "أدخل رقم ميلاد صحيح."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "أدخل رقم IC صحيح."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "بافاريا"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "برلين"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "هامبورغ"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "أدخل رمز zip بالنسق XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr "أدخل رقم بطاقة هوية ألمانية صحيحة بالنسق XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "برشلونة"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "قرطبة"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "غرناطة"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "جوادالاخارا"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "ليون"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "مدريد"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "لاس بالماس"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "سالامانكا"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "توليدو"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "فالنسيا"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "أراغون"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "جزر الكناري"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "كتالونيا"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "جليقية"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "أدخل رمزاً بريدياً صحيحاً بالمدى والنسق 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr "أدخل رقم هاتف صحيح بأحد الأنساق 6XXXXXXXX، 8XXXXXXXX أو 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "رجاءً أدخل قيمة NIF، NIE أو CIF صحيحة."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "رجاءً أدخل قيمة NIF أو NIE صحيحة."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "تدقيق مجموع NIF غير صحيح."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "تدقيق مجموع NIE غير صحيح."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "تدقيق مجموع CIF غير صحيح."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "رجاءً أدخل رقم حساب بنكي صحيح بالنسق XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "تدقيق مجموع رقم حساب البنك غير صحيح."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "أدخل رقم ضمان اجتماع فنلندي صحيح."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "أرقام الهاتف يجب أن تكون بالنسق 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "أدخل رمزاً بريدياً صحيحاً"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "أدخل رقم هاتف صحيح"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "أدخل رقم لوحة رخصة مركبة صحيح"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "أدخل رقم NIK/KTP صحيح"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "بالي"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "بانتن"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "بنجكولو"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "جاكرتا"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "جامبي"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "جاوة الغربية"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "جاوة الوسطى"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "جاوة الشرقية"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "غرب كاليمانتان"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "جنوب كاليمانتان"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "وسط كاليمانتان"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "شرق كاليمانتان"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "جزر بانكا بليتانج"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "جزر رياو"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "لامبونج"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "مالوكو"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "سومطرة الغربية"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "سومطرة الشرقية"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "سومطرة الشمالية"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "باتي"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "سورابايا"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "الحكومة الاتحادية"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "أدخل رمز zip بالنسق XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "رجاءً أدخل رقم مُعرّف آيسلندي صحيح. النسق هو XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "رقم المُعرّف الآيسلندي غير صحيح."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "أدخل رمز zip صحيح."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "أدخل رقم ضمان اجتماعي صحيح."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "أدخل رقم ضريبة VAT صحيح."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "أدخل رمزاً بريدياً بالنسق XXXXXXX أو XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "هوكايدو"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "أوموري"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "ياماغاتا"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "فوكوشيما"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "طوكيو"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "ياماناشي"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "شيغا"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "كيوتو"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "أُساكا"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "هَيوغو"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "نارا"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "واكاياما"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "أوكاياما"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "هيروشيما"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "ياماغوشي"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "توكوشيما"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "كاغاوا"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "ساغا"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "ناجاساكي"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "كوماموتو"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "ميازاكي"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "كاغوشيما"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "أوكيناوا"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "أدخل رقم بطاقة مدنيّة كويتيّة صحيح"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "دورانجو"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "ولاية مكسيكو"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "ميتشواكان"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "موريلوس"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "ناياريت"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "نويفو ليون"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "اواكساكا"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "بويبلا"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "كويريتارو"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "كينتانا رو"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "سونورا"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "تاباسكو"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "تاماوليباس"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "تلاكسكالا"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "أدخل رمزاً بريدياً صحيحاً."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "أدخل رقم SoFi صحيح."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "أدخل رقم ضمان اجتماعي نرويجي صحيح."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "يتطلب هذا الحقل 8 أرقام."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "يتطلب هذا الحقل 11 أرقام."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "يتكون رقم الهوية الوطني من 11 رقماً."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "تدقيق مجموع خاطئ لرقم الهوية الوطنية."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "أدخل حقل رقم الضريبة (NIP) بالنسق XXX-XXX-XX-XX أو XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "تدقيق مجموع خاطئ لرقم الضريبة (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "رقم السجل التجاري الوطني (REGON) يتكون من 9 أو 14 رقم."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "تدقيق مجموع خاطئ لرقم السجل التجاري الوطني (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "أدخل رمزاً بريدياً بالنسق XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "أدخل رمزاً بريدياً بالنسق XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "يجب أن تحتوي أرقام الهواتف 9 أرقام، أو أن تبدأ بعلامة + أو صفرين."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "أدخل قيمة CIF صحيحة."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "أدخل قيمة CNP صحيحة."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "أدخل رمز IBAN صحيحاً بالنسق ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "أرقام الهاتف يجب أن تكون بالنسق XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "أدخل رمزاً بريدياً صحيحاً بالنسق XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "أدخل رقم تنظيم سويدي صحيح."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "أدخل رقم مُعرّف شخصي سويدي صحيح."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "أرقام Co-ordination غير مسموح بها."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "أدخل رمز بريدي سويدي بالنسبق XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "ستوكهولم"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "براتيسلافا I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "براتيسلافا II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "براتيسلافا III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "براتيسلافا IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "براتيسلافا V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "تشادسا"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "كوشيتسه I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "كوشيتسه II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "كوشيتسه III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "كوشيتسه IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "كوشيتسه - أوكولي"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "أدخل رمزاً بريدياً صحيحاً."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "أوكسفوردشاير"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "جنوب يوركشاير"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "ستافوردشاير"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "سوفولك"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "مقاطعة ارماغ"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "مقاطعة داون"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "مقاطعة فيرماناغ"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "مقاطعة لندنديري"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "مقاطعة تيرون"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "غوِنْت"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "غوينيد"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "وسط غلامورغان"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "جنوب غلامورغان"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "غرب غلامورغان"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "وسط اسكتلندا"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "لوثيان"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "جزر أوركني"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "جزر شتلاند"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "ستراثكلايد"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "الجزر الغربية"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "إنجلترا"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "شمال ايرلندا"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "اسكوتلندة"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "ويلز"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "أدخل رمز zip بالنسق XXXXX أو XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "أرقام الهاتف يجب أن تكون بالنسق XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "أدخل رقم ضمان اجتماعي أميركي صحيح بالنسق XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "أدخل اسم ولاية أو إقليم أميركي."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "ولاية أمريكية (حرفان كبيران)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "رقم هاتف"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "أدخل رقم CI صحيح بالنسق X.XXX.XXX-X,XXXXXXX-X أو XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "أدخل رقم CI صحيح."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "أدخل رقم هويّة جنوب إفريقيّة صحيح"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "أدخل رمز بريد جنوب إفريقي صحيح"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "شرق كيب"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "شمال كيب"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "شمال شرق"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "غير كيب"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "إعادة التوجيه من"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "يجب أن يكون هذا مساراً مطلقاً وبدون اسم النطاق. مثال: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "إعادة التوجيه إلى"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"يجب أن يكون هذا مسارا مطلقا (كما هو أعلاه) أو عنوانا كاملا يبدأ بالمقطع "
-"'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "إعادة التوجيه"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "إعادات التوجيه"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "مفتاح الجلسة"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "بيانات الجلسة"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "تاريخ الانتهاء"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "جلسة"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "جلسات"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "اسم النطاق"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "اسم العرض"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "المواقع"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "أدخل قيمة صحيحة."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "أدخل رابطاً صحيحاً."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "يبدو أن هذا الرابط غير متوفر."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "أدخل اختصار 'slug' صحيح يتكوّن من أحرف، أرقام، شرطات سفلية وعاديّة."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "أدخل عنوان IPv4 صحيح."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "أدخل أرقاما فقط مفصول بينها بفواصل."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "تحقق من أن هذه القيمة هي %(limit_value)s (إنها %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "تحقق من أن تكون هذه القيمة أقل من %(limit_value)s أو مساوية لها."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "تحقق من أن تكون هذه القيمة أكثر من %(limit_value)s أو مساوية لها."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"تحقق من أن هذه القيمة تحتوي %(limit_value)d أحرف على الأقل (عدد أحرفها %"
-"(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"تحقق من أن هذه القيمة مكونة من %(limit_value)d أحرف كحد أقصى (عدد أحرفها "
-"الآن %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s يجب أن يكون مُميّزاً مع %(date_field)s %(lookup)s."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "النموذج %(model_name)s والحقل %(field_label)s موجود مسبقاً."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "القيمة %r ليست خياراً صالحاً."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "لا يمكن تعيين null كقيمة لهذا الحقل."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "لا يمكن ترك هذا الحقل فارغاً."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "حقل نوع: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "عدد صحيح"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "هذه القيمة يجب أن تكون رقما صحيحا."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "هذه القيمة يجب أن تكون إما True أو False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "ثنائي (إما True أو False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "سلسلة نص (%(max_length)s كحد أقصى)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "أرقام صحيحة مفصولة بفواصل"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "التاريخ (دون الوقت)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "أدخل تاريخا صحيحا بالنسق YYYY-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "تاريخ غير صحيح: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "أدخل تاريخ/وقت صحيح بالنسق YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "التاريخ (مع الوقت)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "يجب أن تكون هذه القيمة رقماً عشرياً."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "رقم عشري"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "عنوان بريد إلكتروني"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "مسار الملف"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "هذه القيمة يجب أن تكون عدد فاصلة عائمة."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "رقم فاصلة عائمة"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "عدد صحيح كبير (8 بايت)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "يجب أن تكون هذه القيمة None، أو True أو False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "ثنائي (إما True أو False أو None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "نص"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "وقت"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "أدخل توقيتاً صحيحاً بالنسق HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "نص XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "النموذج %(model)s ذو الحقل الرئيسي %(pk)r غير موجود."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "الحقل المرتبط (تم تحديد النوع وفقاً للحقل المرتبط)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "علاقة واحد إلى واحد"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "علاقة متعدد إلى متعدد"
-
-#: db/models/fields/related.py:1000
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"اضغط زر التحكم \"Control\", أو \"Command\" على أجهزة Mac لاختيار أكثر من "
-"واحد."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "رجاءً إدخال مُعرف %(self)s صحيح. القيمة %(value)r غير صحيحة."
-msgstr[1] "الرجاء إدخال معرّفي %(self)s صحيحين. القيمتان %(value)r غير صحيحتين."
-msgstr[2] "الرجاء إدخال مُعرفات %(self)s صحيحة. القيم %(value)r غير صحيحة."
-msgstr[3] "الرجاء إدخال مُعرفات %(self)s صحيحة. القيم %(value)r غير صحيحة."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "هذا الحقل مطلوب."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "أدخل رقما صحيحا."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "أدخل رقماً."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "تحقق من أن تدخل %s أرقام لا أكثر."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "تحقق من أن تدخل %s خانات عشرية لا أكثر."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "تحقق من أن تدخل %s أرقام قبل الفاصل العشري لا أكثر."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "أدخل تاريخاً صحيحاً."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "أدخل وقتاً صحيحاً."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "أدخل تاريخاً/وقتاً صحيحاً."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "لم يتم ارسال ملف، الرجاء التأكد من نوع ترميز الاستمارة."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "لم يتم إرسال اي ملف."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "الملف الذي قمت بإرساله فارغ."
-
-#: forms/fields.py:438
-#, python-format
-msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"تحقق من أن اسم الملف يتكون بحد أقصى من %(max)d أحرف (يتكون حالياً من %(length)"
-"d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"قم برفع صورة صحيحة، الملف الذي قمت برفعه إما أنه ليس ملفا لصورة أو أنه ملف "
-"معطوب."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "انتق خياراً صحيحاً. %(value)s ليس أحد الخيارات المتاحة."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "أدخل قائمة من القيم."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "الترتيب"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "رجاء صحّح بيانات %(field)s المتكررة."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "رجاء صحّح بيانات %(field)s المتكررة والتي يجب أن تكون مُميّزة."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"رجاء صحّح بيانات %(field_name)s المتكررة والتي يجب أن تكون مُميّزة لـ%(lookup)s "
-"في %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "رجاءً صحّح القيم المُكرّرة أدناه."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "حقل foreign key المحدد لا يطابق الحقل الرئيسي له."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "انتق خياراً صحيحاً. اختيارك ليس أحد الخيارات المتاحة."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "انتق خياراً صحيحاً. %s ليس أحد الخيارات المتاحة."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "القيمة \"%s\" هي صحيحة للحقل المرجعي."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "نعم,لا,ربما"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "بايت واحد"
-msgstr[1] "بايتان"
-msgstr[2] "%(size)d بايتات"
-msgstr[3] "%(size)d بايت"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f ك.ب"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f م.ب"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f ج.ب"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "م"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "ص"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "م"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "ص"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "منتصف الليل"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "ظهراً"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "الاثنين"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "الثلاثاء"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "الأربعاء"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "الخميس"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "الجمعة"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "السبت"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "الأحد"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "إثنين"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "ثلاثاء"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "أربعاء"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "خميس"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "جمعة"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "سبت"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "أحد"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "يناير"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "فبراير"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "مارس"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "إبريل"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "مايو"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "يونيو"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "يوليو"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "أغسطس"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "سبتمبر"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "أكتوبر"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "نوفمبر"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "ديسمبر"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "يناير"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "فبراير"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "مارس"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "إبريل"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "مايو"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "يونيو"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "يوليو"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "أغسطس"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "سبتمبر"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "أكتوبر"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "نوفمبر"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "ديسمبر"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "يناير"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "فبراير"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "أغسطس"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "سبتمبر"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "أكتوبر"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "نوفمبر"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "ديسمبر"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "أو"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "سنة"
-msgstr[1] "سنتان"
-msgstr[2] "سنوات"
-msgstr[3] "سنة"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "شهر"
-msgstr[1] "شهران"
-msgstr[2] "أشهر"
-msgstr[3] "شهر"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "أسبوع"
-msgstr[1] "أسبوعان"
-msgstr[2] "أسابيع"
-msgstr[3] "أسبوع"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "يوم"
-msgstr[1] "يومان"
-msgstr[2] "أيام"
-msgstr[3] "يوم"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ساعة"
-msgstr[1] "ساعتان"
-msgstr[2] "ساعات"
-msgstr[3] "ساعة"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "دقيقة"
-msgstr[1] "دقيقتان"
-msgstr[2] "دقائق"
-msgstr[3] "دقيقة"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "دقائق"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr "، %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j F Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j F Y، G:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "G:i:s"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s تم إنشاءه بنجاح."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s تم تحديثه بنجاح."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s تم حذفه."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "%(fieldname)s واحد أو أكثر في %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "%(fieldname)s واحد أو أكثر في %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "كلمة المرور القديمة:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "العلاقة بالنموذج الأب"
-
-#~ msgid "Add user"
-#~ msgstr "أضف مستخدم"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "صف الموافقة على التعليقات"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "لا يوجد تعليقات بحاجة لموافقة"
-
-#~ msgid "Email"
-#~ msgstr "عنوان بريد إلكتروني"
-
-#~ msgid "Authenticated?"
-#~ msgstr "مُصادَق؟"
-
-#~ msgid "IP Address"
-#~ msgstr "عنوان IP"
-
-#~ msgid "Date posted"
-#~ msgstr "تاريخ الإضافة"
-
-#~ msgid "yes"
-#~ msgstr "نعم"
-
-#~ msgid "no"
-#~ msgstr "لا"
diff --git a/parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index c9878a2..0000000
--- a/parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 0eca3f4..0000000
--- a/parts/django/django/conf/locale/ar/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,118 +0,0 @@
-# translation of djangojs.po to Arabic
-# This file is distributed under the same license as the django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: djangojs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-11-29 10:58-0600\n"
-"PO-Revision-Date: 2008-09-02 00:53+0300\n"
-"Last-Translator: Ossama M. Khayat <okhayat@yahoo.com>\n"
-"Language-Team: Arabic <support@arabeyes.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=4; plural=(n == 1? 0 : (n == 2? 1 : (n <= 10? 2 : 3)))\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s المتوفرة"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "اختر الكل"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "أضف"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "احذف"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s المُختارة"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "حدد خياراتك واضغط"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "امسح الكل"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "يناير فبراير مارس إبريل مايو يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر ديسمبر"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "أ إ ث أ خ ج س"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "الأحد الإثنين الثلاثاء الأربعاء الخميس الجمعة السبت"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "أظهر"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "اخف"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "الآن"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "الساعة"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "اختر وقتاً"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "منتصف الليل"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 ص."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "الظهر"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "ألغ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "اليوم"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "التقويم"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "أمس"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "غداً"
-
diff --git a/parts/django/django/conf/locale/ar/__init__.py b/parts/django/django/conf/locale/ar/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ar/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ar/formats.py b/parts/django/django/conf/locale/ar/formats.py
deleted file mode 100644
index d8d627f..0000000
--- a/parts/django/django/conf/locale/ar/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F، Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd‏/m‏/Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/bg/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/bg/LC_MESSAGES/django.mo
deleted file mode 100644
index c1993c6..0000000
--- a/parts/django/django/conf/locale/bg/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/bg/LC_MESSAGES/django.po b/parts/django/django/conf/locale/bg/LC_MESSAGES/django.po
deleted file mode 100644
index eae6c2b..0000000
--- a/parts/django/django/conf/locale/bg/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5326 +0,0 @@
-# translation of django.po to Bulgarian
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-02-25 12:38+0200\n"
-"PO-Revision-Date: 2008-03-12 13:01+0200\n"
-"Last-Translator: Vladislav <vladislav.mitov@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:39
-#: django/conf/global_settings.py:39
-msgid "Arabic"
-msgstr "арабски"
-
-#: conf/global_settings.py:40
-#: django/conf/global_settings.py:40
-msgid "Bengali"
-msgstr "бенгалски"
-
-#: conf/global_settings.py:41
-#: django/conf/global_settings.py:41
-msgid "Bulgarian"
-msgstr "български"
-
-#: conf/global_settings.py:42
-#: django/conf/global_settings.py:42
-msgid "Catalan"
-msgstr "каталонски"
-
-#: conf/global_settings.py:43
-#: django/conf/global_settings.py:43
-msgid "Czech"
-msgstr "чешки"
-
-#: conf/global_settings.py:44
-#: django/conf/global_settings.py:44
-msgid "Welsh"
-msgstr "уелски"
-
-#: conf/global_settings.py:45
-#: django/conf/global_settings.py:45
-msgid "Danish"
-msgstr "датски"
-
-#: conf/global_settings.py:46
-#: django/conf/global_settings.py:46
-msgid "German"
-msgstr "немски"
-
-#: conf/global_settings.py:47
-#: django/conf/global_settings.py:47
-msgid "Greek"
-msgstr "гръцки"
-
-#: conf/global_settings.py:48
-#: django/conf/global_settings.py:48
-msgid "English"
-msgstr "английски"
-
-#: conf/global_settings.py:49
-#: django/conf/global_settings.py:49
-msgid "Spanish"
-msgstr "испански"
-
-#: conf/global_settings.py:50
-#: django/conf/global_settings.py:50
-msgid "Argentinean Spanish"
-msgstr "аржентински испански"
-
-#: conf/global_settings.py:51
-#: django/conf/global_settings.py:51
-msgid "Basque"
-msgstr "Баски"
-
-#: conf/global_settings.py:52
-#: django/conf/global_settings.py:52
-msgid "Persian"
-msgstr "персийски"
-
-#: conf/global_settings.py:53
-#: django/conf/global_settings.py:53
-msgid "Finnish"
-msgstr "финландски"
-
-#: conf/global_settings.py:54
-#: django/conf/global_settings.py:54
-msgid "French"
-msgstr "френски"
-
-#: conf/global_settings.py:55
-#: django/conf/global_settings.py:55
-msgid "Irish"
-msgstr "ирландски"
-
-#: conf/global_settings.py:56
-#: django/conf/global_settings.py:56
-msgid "Galician"
-msgstr "галицейски"
-
-#: conf/global_settings.py:57
-#: django/conf/global_settings.py:57
-msgid "Hungarian"
-msgstr "унгарски"
-
-#: conf/global_settings.py:58
-#: django/conf/global_settings.py:58
-msgid "Hebrew"
-msgstr "еврит"
-
-#: conf/global_settings.py:59
-#: django/conf/global_settings.py:59
-msgid "Croatian"
-msgstr "хърватски"
-
-#: conf/global_settings.py:60
-#: django/conf/global_settings.py:60
-msgid "Icelandic"
-msgstr "исландски"
-
-#: conf/global_settings.py:61
-#: django/conf/global_settings.py:61
-msgid "Italian"
-msgstr "италиански"
-
-#: conf/global_settings.py:62
-#: django/conf/global_settings.py:62
-msgid "Japanese"
-msgstr "японски"
-
-#: conf/global_settings.py:63
-#: django/conf/global_settings.py:63
-msgid "Georgian"
-msgstr "грузински"
-
-#: conf/global_settings.py:64
-#: django/conf/global_settings.py:64
-msgid "Korean"
-msgstr "корейски"
-
-#: conf/global_settings.py:65
-#: django/conf/global_settings.py:65
-msgid "Khmer"
-msgstr "Кхмерски"
-
-#: conf/global_settings.py:66
-#: django/conf/global_settings.py:66
-msgid "Kannada"
-msgstr "каннада (индийски)"
-
-#: conf/global_settings.py:67
-#: django/conf/global_settings.py:67
-msgid "Latvian"
-msgstr "латвийски"
-
-#: conf/global_settings.py:68
-#: django/conf/global_settings.py:68
-msgid "Macedonian"
-msgstr "македонски"
-
-#: conf/global_settings.py:69
-#: django/conf/global_settings.py:69
-msgid "Dutch"
-msgstr "холандски"
-
-#: conf/global_settings.py:70
-#: django/conf/global_settings.py:70
-msgid "Norwegian"
-msgstr "норвежки"
-
-#: conf/global_settings.py:71
-#: django/conf/global_settings.py:71
-msgid "Polish"
-msgstr "полски"
-
-#: conf/global_settings.py:72
-#: django/conf/global_settings.py:72
-msgid "Portugese"
-msgstr "португалски"
-
-#: conf/global_settings.py:73
-#: django/conf/global_settings.py:73
-msgid "Brazilian"
-msgstr "бразилски"
-
-#: conf/global_settings.py:74
-#: django/conf/global_settings.py:74
-msgid "Romanian"
-msgstr "ромънски"
-
-#: conf/global_settings.py:75
-#: django/conf/global_settings.py:75
-msgid "Russian"
-msgstr "руски"
-
-#: conf/global_settings.py:76
-#: django/conf/global_settings.py:76
-msgid "Slovak"
-msgstr "словашки"
-
-#: conf/global_settings.py:77
-#: django/conf/global_settings.py:77
-msgid "Slovenian"
-msgstr "словенски"
-
-#: conf/global_settings.py:78
-#: django/conf/global_settings.py:78
-msgid "Serbian"
-msgstr "сръбски"
-
-#: conf/global_settings.py:79
-#: django/conf/global_settings.py:79
-msgid "Swedish"
-msgstr "шведски"
-
-#: conf/global_settings.py:80
-#: django/conf/global_settings.py:80
-msgid "Tamil"
-msgstr "тамил (индийски)"
-
-#: conf/global_settings.py:81
-#: django/conf/global_settings.py:81
-msgid "Telugu"
-msgstr "телугу (индийски)"
-
-#: conf/global_settings.py:82
-#: django/conf/global_settings.py:82
-msgid "Turkish"
-msgstr "турски"
-
-#: conf/global_settings.py:83
-#: django/conf/global_settings.py:83
-msgid "Ukrainian"
-msgstr "украински"
-
-#: conf/global_settings.py:84
-#: django/conf/global_settings.py:84
-msgid "Simplified Chinese"
-msgstr "китайски"
-
-#: conf/global_settings.py:85
-#: django/conf/global_settings.py:85
-msgid "Traditional Chinese"
-msgstr "традиционен китайски"
-
-#: contrib/admin/filterspecs.py:44
-#: django/contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>По %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-#: django/contrib/admin/filterspecs.py:74
-#: django/contrib/admin/filterspecs.py:92
-#: django/contrib/admin/filterspecs.py:147
-#: django/contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Всички"
-
-#: contrib/admin/filterspecs.py:113
-#: django/contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Коя-да-е дата"
-
-#: contrib/admin/filterspecs.py:114
-#: django/contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Днес"
-
-#: contrib/admin/filterspecs.py:117
-#: django/contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Последните 7 дни"
-
-#: contrib/admin/filterspecs.py:119
-#: django/contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Този месец"
-
-#: contrib/admin/filterspecs.py:121
-#: django/contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Тази година"
-
-#: contrib/admin/filterspecs.py:147
-#: django/contrib/admin/filterspecs.py:147
-#: django/newforms/widgets.py:231
-#: django/oldforms/__init__.py:592
-#: newforms/widgets.py:231
-#: oldforms/__init__.py:592
-msgid "Yes"
-msgstr "Да"
-
-#: contrib/admin/filterspecs.py:147
-#: django/contrib/admin/filterspecs.py:147
-#: django/newforms/widgets.py:231
-#: django/oldforms/__init__.py:592
-#: newforms/widgets.py:231
-#: oldforms/__init__.py:592
-msgid "No"
-msgstr "Не"
-
-#: contrib/admin/filterspecs.py:154
-#: django/contrib/admin/filterspecs.py:154
-#: django/newforms/widgets.py:231
-#: django/oldforms/__init__.py:592
-#: newforms/widgets.py:231
-#: oldforms/__init__.py:592
-msgid "Unknown"
-msgstr "Неизвестно"
-
-#: contrib/admin/models.py:18
-#: django/contrib/admin/models.py:18
-msgid "action time"
-msgstr "време на действие"
-
-#: contrib/admin/models.py:21
-#: django/contrib/admin/models.py:21
-msgid "object id"
-msgstr "id на обекта"
-
-#: contrib/admin/models.py:22
-#: django/contrib/admin/models.py:22
-msgid "object repr"
-msgstr "repr на обекта"
-
-#: contrib/admin/models.py:23
-#: django/contrib/admin/models.py:23
-msgid "action flag"
-msgstr "флаг за действие"
-
-#: contrib/admin/models.py:24
-#: django/contrib/admin/models.py:24
-msgid "change message"
-msgstr "смени съобщение"
-
-#: contrib/admin/models.py:27
-#: django/contrib/admin/models.py:27
-msgid "log entry"
-msgstr "записка"
-
-#: contrib/admin/models.py:28
-#: django/contrib/admin/models.py:28
-msgid "log entries"
-msgstr "записки"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-#: django/contrib/admin/templates/admin/404.html:4
-#: django/contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Няма такава страница"
-
-#: contrib/admin/templates/admin/404.html:10
-#: django/contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Сори, ама тая страничка липсва. "
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/base.html:37
-#: contrib/admin/templates/admin/change_form.html:12
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/delete_confirmation.html:5
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:4
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: django/contrib/admin/templates/admin/500.html:4
-#: django/contrib/admin/templates/admin/base.html:37
-#: django/contrib/admin/templates/admin/change_form.html:12
-#: django/contrib/admin/templates/admin/change_list.html:5
-#: django/contrib/admin/templates/admin/delete_confirmation.html:5
-#: django/contrib/admin/templates/admin/invalid_setup.html:4
-#: django/contrib/admin/templates/admin/object_history.html:4
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:11
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: django/contrib/admin/templates/registration/logged_out.html:4
-#: django/contrib/admin/templates/registration/password_change_done.html:3
-#: django/contrib/admin/templates/registration/password_change_form.html:3
-#: django/contrib/admin/templates/registration/password_reset_done.html:4
-#: django/contrib/admin/templates/registration/password_reset_form.html:4
-msgid "Home"
-msgstr "Начало"
-
-#: contrib/admin/templates/admin/500.html:4
-#: django/contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Сървърна грешка"
-
-#: contrib/admin/templates/admin/500.html:6
-#: django/contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Сървърна грешка (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-#: django/contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Server Error <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-#: django/contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Малък проблем. Администраторът на сайта е уведомен за случилото се. Благодарим за проявеното разбиране. "
-
-#: contrib/admin/templates/admin/base.html:26
-#: django/contrib/admin/templates/admin/base.html:26
-msgid "Welcome,"
-msgstr "Добре дошли,"
-
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: django/contrib/admin/templates/admin/base.html:28
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Документация"
-
-#: contrib/admin/templates/admin/base.html:29
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:45
-#: django/contrib/admin/templates/admin/base.html:29
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:14
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:45
-msgid "Change password"
-msgstr "Промени парола"
-
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/comments/templates/comments/form.html:6
-#: django/contrib/admin/templates/admin/base.html:30
-#: django/contrib/comments/templates/comments/form.html:6
-msgid "Log out"
-msgstr "Изход"
-
-#: contrib/admin/templates/admin/base_site.html:4
-#: django/contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Административен панел"
-
-#: contrib/admin/templates/admin/base_site.html:7
-#: django/contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Административен панел"
-
-#: contrib/admin/templates/admin/change_form.html:14
-#: contrib/admin/templates/admin/index.html:28
-#: django/contrib/admin/templates/admin/change_form.html:14
-#: django/contrib/admin/templates/admin/index.html:28
-msgid "Add"
-msgstr "Добави"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/object_history.html:4
-#: django/contrib/admin/templates/admin/change_form.html:20
-#: django/contrib/admin/templates/admin/object_history.html:4
-msgid "History"
-msgstr "История"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: django/contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "Разгледай в сайта"
-
-#: contrib/admin/templates/admin/change_form.html:31
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
-#: django/contrib/admin/templates/admin/change_form.html:31
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:23
-msgid "Please correct the error below."
-msgstr "Коригирайте долу допуснатата грешка. "
-
-#: contrib/admin/templates/admin/change_form.html:49
-#: django/contrib/admin/templates/admin/change_form.html:49
-msgid "Ordering"
-msgstr "Подреждане"
-
-#: contrib/admin/templates/admin/change_form.html:52
-#: django/contrib/admin/templates/admin/change_form.html:52
-msgid "Order:"
-msgstr "Подредба:"
-
-#: contrib/admin/templates/admin/change_list.html:11
-#: django/contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Добави %(name)s"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:8
-#: contrib/admin/templates/admin/submit_line.html:3
-#: django/contrib/admin/templates/admin/delete_confirmation.html:8
-#: django/contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "Изтрий"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:13
-#: django/contrib/admin/templates/admin/delete_confirmation.html:13
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Изтриването на обекта %(object_name)s '%(escaped_object)s' не може да бъде извършено без да се изтрият и някой свързани обекти, върху които обаче нямате права: "
-
-#: contrib/admin/templates/admin/delete_confirmation.html:20
-#: django/contrib/admin/templates/admin/delete_confirmation.html:20
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "Наистина ли искате да затрием обектите %(object_name)s \"%(escaped_object)s\"? Следните свързани елементи също ще бъдат изтрити:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:25
-#: django/contrib/admin/templates/admin/delete_confirmation.html:25
-msgid "Yes, I'm sure"
-msgstr "Абсолютно"
-
-#: contrib/admin/templates/admin/filter.html:2
-#: django/contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " По %(filter_title)s "
-
-#: contrib/admin/templates/admin/filters.html:4
-#: django/contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "Филтър"
-
-#: contrib/admin/templates/admin/index.html:17
-#: django/contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Модели в приложението %(name)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#: django/contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/index.html:34
-#: django/contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Промени"
-
-#: contrib/admin/templates/admin/index.html:44
-#: django/contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Нямате права да редактирате каквото и да е."
-
-#: contrib/admin/templates/admin/index.html:52
-#: django/contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Пресни действия"
-
-#: contrib/admin/templates/admin/index.html:53
-#: django/contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "Моите действия"
-
-#: contrib/admin/templates/admin/index.html:57
-#: django/contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Няма налични"
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-#: django/contrib/admin/templates/admin/invalid_setup.html:8
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Има някакъв проблем с базата данни. Проверете дали необходимите таблици са създадени и дали съответния потребител има необходимите права за достъп. "
-
-#: contrib/admin/templates/admin/login.html:17
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: django/contrib/admin/templates/admin/login.html:17
-#: django/contrib/comments/templates/comments/form.html:6
-#: django/contrib/comments/templates/comments/form.html:8
-msgid "Username:"
-msgstr "Потребител:"
-
-#: contrib/admin/templates/admin/login.html:20
-#: contrib/comments/templates/comments/form.html:8
-#: django/contrib/admin/templates/admin/login.html:20
-#: django/contrib/comments/templates/comments/form.html:8
-msgid "Password:"
-msgstr "Парола:"
-
-#: contrib/admin/templates/admin/login.html:25
-#: contrib/admin/views/decorators.py:25
-#: django/contrib/admin/templates/admin/login.html:25
-#: django/contrib/admin/views/decorators.py:31
-msgid "Log in"
-msgstr "Вход"
-
-#: contrib/admin/templates/admin/object_history.html:17
-#: django/contrib/admin/templates/admin/object_history.html:17
-msgid "Date/time"
-msgstr "Дата/час"
-
-#: contrib/admin/templates/admin/object_history.html:18
-#: django/contrib/admin/templates/admin/object_history.html:18
-msgid "User"
-msgstr "Потребител"
-
-#: contrib/admin/templates/admin/object_history.html:19
-#: django/contrib/admin/templates/admin/object_history.html:19
-msgid "Action"
-msgstr "Действие"
-
-#: contrib/admin/templates/admin/object_history.html:25
-#: django/contrib/admin/templates/admin/object_history.html:25
-msgid "DATE_WITH_TIME_FULL"
-msgstr "j N, Y, P"
-
-#: contrib/admin/templates/admin/object_history.html:35
-#: django/contrib/admin/templates/admin/object_history.html:35
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Този обект няма исторя на промените. Вероятно не е добавен чрез административния панел. "
-
-#: contrib/admin/templates/admin/pagination.html:10
-#: django/contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Покажи всички"
-
-#: contrib/admin/templates/admin/search_form.html:8
-#: django/contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Давай"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#: django/contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgstr "1 резултат"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#: django/contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s общо"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-#: django/contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Запис като нов"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-#: django/contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Запис и нов"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-#: django/contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Запис и продължение"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-#: django/contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Запис"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-#: django/contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Първо, въведете потребител и парола. След това ще можете да редактирате повече детайли. "
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-#: django/contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "Потребител"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: django/contrib/admin/templates/admin/auth/user/add_form.html:18
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:33
-msgid "Password"
-msgstr "Парола"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-#: contrib/admin/templates/admin/auth/user/change_password.html:38
-#: django/contrib/admin/templates/admin/auth/user/add_form.html:23
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:38
-msgid "Password (again)"
-msgstr "Парола (пак)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: django/contrib/admin/templates/admin/auth/user/add_form.html:24
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:39
-msgid "Enter the same password as above, for verification."
-msgstr "Въведете същата парола още веднъж за проверка. "
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
-#: django/contrib/admin/templates/admin/auth/user/change_password.html:27
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Въведете нова парола за потребител <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklet-и"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklet-и за документация"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:8
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">За да инсталирате bookmarklet-и, задърпайте линка в bookmarks\n"
-"toolbar-а, или щракнете с десния бутон и добавете линка в отметките. Сега можете да\n"
-"изберете bookmarklet-а от която и да е страница. Някой от тези\n"
-"bookmarklet-и могат да се разглеждат само от компютър, който е маркиран \n"
-"като \"вътрешен\" (приказвайте с администратора ако не сте сигурни дали\n"
-"компютърът ви е \"вътрешен\").</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:18
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Документация за тази страница"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Препраща от която и да е страница към документацията за изгледа, който я е генерирал. "
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:21
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "ID на обекта"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Показва типът на съдържанието и ID-то на страници, които представляват единичен обект. "
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:24
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Редактирай този обект (в този прозорец)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Отива в админската страница за страници, които представляват единичен обект. "
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:27
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Редактирай този обект (в нов прозорец)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-#: django/contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Като горното, но отваря администраторската страница в нов прозорец."
-
-#: contrib/admin/templates/registration/logged_out.html:8
-#: django/contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Благодарим Ви, че използвахте този сайт днес. "
-
-#: contrib/admin/templates/registration/logged_out.html:10
-#: django/contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Влез пак"
-
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:9
-#: django/contrib/admin/templates/registration/password_change_done.html:3
-#: django/contrib/admin/templates/registration/password_change_form.html:3
-#: django/contrib/admin/templates/registration/password_change_form.html:5
-#: django/contrib/admin/templates/registration/password_change_form.html:9
-msgid "Password change"
-msgstr "Промяна на парола"
-
-#: contrib/admin/templates/registration/password_change_done.html:5
-#: contrib/admin/templates/registration/password_change_done.html:9
-#: django/contrib/admin/templates/registration/password_change_done.html:5
-#: django/contrib/admin/templates/registration/password_change_done.html:9
-msgid "Password change successful"
-msgstr "Паролата е сменена успешно"
-
-#: contrib/admin/templates/registration/password_change_done.html:11
-#: django/contrib/admin/templates/registration/password_change_done.html:11
-msgid "Your password was changed."
-msgstr "Паролата ви е сменена."
-
-#: contrib/admin/templates/registration/password_change_form.html:11
-#: django/contrib/admin/templates/registration/password_change_form.html:11
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Въведете си старата парола (за сигурност), след което въведете желаната нова парола два пъти за да не стават грешки. "
-
-#: contrib/admin/templates/registration/password_change_form.html:16
-#: django/contrib/admin/templates/registration/password_change_form.html:16
-msgid "Old password:"
-msgstr "Стара парола:"
-
-#: contrib/admin/templates/registration/password_change_form.html:18
-#: django/contrib/admin/templates/registration/password_change_form.html:18
-msgid "New password:"
-msgstr "Нова парола:"
-
-#: contrib/admin/templates/registration/password_change_form.html:20
-#: django/contrib/admin/templates/registration/password_change_form.html:20
-msgid "Confirm password:"
-msgstr "Потвърдете паролата:"
-
-#: contrib/admin/templates/registration/password_change_form.html:22
-#: django/contrib/admin/templates/registration/password_change_form.html:22
-msgid "Change my password"
-msgstr "Промяна на парола"
-
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-#: django/contrib/admin/templates/registration/password_reset_done.html:4
-#: django/contrib/admin/templates/registration/password_reset_form.html:4
-#: django/contrib/admin/templates/registration/password_reset_form.html:6
-#: django/contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Нова парола"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-#: django/contrib/admin/templates/registration/password_reset_done.html:6
-#: django/contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Паролата е успешно обновена"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-#: django/contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Пратихме ви нова парола на адреса, който указахте. Скоро трябва да пристигне. "
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-#: django/contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Получавате този e-mail, защото сте поръчали да Ви бъде издадена нова парола "
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#: django/contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "за Вашия потребителски акаунт в %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#: django/contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "Новата Ви парола е: %(new_password)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-#: django/contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Тази парола може да си я смените като щракнете тук: "
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-#: django/contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "Вашето потребителско име (ако не го помните): "
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#: django/contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "Много се радваме, че използвате сайта ни!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#: django/contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Готините хора от %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-#: django/contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
-msgstr "Забравена парола? Няма проблеми. Въведете си e-mail адреса по-долу и ще ви изпратим нова!"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-#: django/contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mail адрес:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-#: django/contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Нова парола"
-
-#: contrib/admin/templates/widget/date_time.html:3
-#: django/contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Дата:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-#: django/contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Час:"
-
-#: contrib/admin/templates/widget/file.html:2
-#: django/contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Сега:"
-
-#: contrib/admin/templates/widget/file.html:3
-#: django/contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Промяна:"
-
-#: contrib/admin/templatetags/admin_list.py:257
-#: django/contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Всички дати"
-
-#: contrib/admin/views/auth.py:20
-#: contrib/admin/views/main.py:267
-#: django/contrib/admin/views/auth.py:20
-#: django/contrib/admin/views/main.py:267
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Обектът %(name)s \"%(obj)s\" бе успешно добавен. "
-
-#: contrib/admin/views/auth.py:25
-#: contrib/admin/views/main.py:271
-#: contrib/admin/views/main.py:356
-#: django/contrib/admin/views/auth.py:25
-#: django/contrib/admin/views/main.py:271
-#: django/contrib/admin/views/main.py:356
-msgid "You may edit it again below."
-msgstr "Може да го редактирате пак по-долу. "
-
-#: contrib/admin/views/auth.py:31
-#: django/contrib/admin/views/auth.py:31
-msgid "Add user"
-msgstr "Добави потребител"
-
-#: contrib/admin/views/auth.py:58
-#: django/contrib/admin/views/auth.py:58
-msgid "Password changed successfully."
-msgstr "Паролата бе успешно сменена. "
-
-#: contrib/admin/views/auth.py:65
-#: django/contrib/admin/views/auth.py:65
-#, python-format
-msgid "Change password: %s"
-msgstr "Смени парола: %s"
-
-#: contrib/admin/views/decorators.py:11
-#: contrib/auth/forms.py:60
-#: django/contrib/admin/views/decorators.py:17
-#: django/contrib/auth/forms.py:60
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Въведете правилно потребителско име и парола. И двете полета правят разлика между малки и големи букви!"
-
-#: contrib/admin/views/decorators.py:63
-#: django/contrib/admin/views/decorators.py:69
-msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
-msgstr "Влезте пак, понеже сесията ви изтече. Не се притеснявайте -- данните ви са записани. "
-
-#: contrib/admin/views/decorators.py:70
-#: django/contrib/admin/views/decorators.py:76
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Браузерът ви май не е настроен да приема cookies. Пуснете ги и заредете страницата на ново. "
-
-#: contrib/admin/views/decorators.py:84
-#: django/contrib/admin/views/decorators.py:90
-msgid "Usernames cannot contain the '@' character."
-msgstr "Потребителските имена не могат да съдържат символа '@'."
-
-#: contrib/admin/views/decorators.py:86
-#: django/contrib/admin/views/decorators.py:92
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "E-mail адресът ти не ти е потребителско име. Пробвай '%s'."
-
-#: contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-#: contrib/admin/views/doc.py:52
-#: django/contrib/admin/views/doc.py:48
-#: django/contrib/admin/views/doc.py:50
-#: django/contrib/admin/views/doc.py:52
-msgid "tag:"
-msgstr "таг:"
-
-#: contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-#: contrib/admin/views/doc.py:83
-#: django/contrib/admin/views/doc.py:79
-#: django/contrib/admin/views/doc.py:81
-#: django/contrib/admin/views/doc.py:83
-msgid "filter:"
-msgstr "филтър:"
-
-#: contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-#: contrib/admin/views/doc.py:141
-#: django/contrib/admin/views/doc.py:137
-#: django/contrib/admin/views/doc.py:139
-#: django/contrib/admin/views/doc.py:141
-msgid "view:"
-msgstr "изглед:"
-
-#: contrib/admin/views/doc.py:166
-#: django/contrib/admin/views/doc.py:166
-#, python-format
-msgid "App %r not found"
-msgstr "Приложението %r липсва"
-
-#: contrib/admin/views/doc.py:173
-#: django/contrib/admin/views/doc.py:173
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "Моделът %(name)r го няма в приложение %(label)r"
-
-#: contrib/admin/views/doc.py:185
-#: django/contrib/admin/views/doc.py:185
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr "свързаният обект `%(label)s.%(type)s` "
-
-#: contrib/admin/views/doc.py:185
-#: contrib/admin/views/doc.py:207
-#: contrib/admin/views/doc.py:221
-#: contrib/admin/views/doc.py:226
-#: django/contrib/admin/views/doc.py:185
-#: django/contrib/admin/views/doc.py:207
-#: django/contrib/admin/views/doc.py:221
-#: django/contrib/admin/views/doc.py:226
-msgid "model:"
-msgstr "модел:"
-
-#: contrib/admin/views/doc.py:216
-#: django/contrib/admin/views/doc.py:216
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "свързани `%(label)s.%(name)s` обекти"
-
-#: contrib/admin/views/doc.py:221
-#: django/contrib/admin/views/doc.py:221
-#, python-format
-msgid "all %s"
-msgstr "всички %s"
-
-#: contrib/admin/views/doc.py:226
-#: django/contrib/admin/views/doc.py:226
-#, python-format
-msgid "number of %s"
-msgstr "брой %s"
-
-#: contrib/admin/views/doc.py:231
-#: django/contrib/admin/views/doc.py:231
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Полета на %s обекти"
-
-#: contrib/admin/views/doc.py:293
-#: contrib/admin/views/doc.py:304
-#: contrib/admin/views/doc.py:306
-#: contrib/admin/views/doc.py:312
-#: contrib/admin/views/doc.py:313
-#: contrib/admin/views/doc.py:315
-#: django/contrib/admin/views/doc.py:293
-#: django/contrib/admin/views/doc.py:304
-#: django/contrib/admin/views/doc.py:306
-#: django/contrib/admin/views/doc.py:312
-#: django/contrib/admin/views/doc.py:313
-#: django/contrib/admin/views/doc.py:315
-msgid "Integer"
-msgstr "Цяло число"
-
-#: contrib/admin/views/doc.py:294
-#: django/contrib/admin/views/doc.py:294
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (True или False)"
-
-#: contrib/admin/views/doc.py:295
-#: contrib/admin/views/doc.py:314
-#: django/contrib/admin/views/doc.py:295
-#: django/contrib/admin/views/doc.py:314
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Символен низ (до %(max_length)s символа)"
-
-#: contrib/admin/views/doc.py:296
-#: django/contrib/admin/views/doc.py:296
-msgid "Comma-separated integers"
-msgstr "Цели числа, разделени с запетая"
-
-#: contrib/admin/views/doc.py:297
-#: django/contrib/admin/views/doc.py:297
-msgid "Date (without time)"
-msgstr "Дата (без час)"
-
-#: contrib/admin/views/doc.py:298
-#: django/contrib/admin/views/doc.py:298
-msgid "Date (with time)"
-msgstr "Дата (и час)"
-
-#: contrib/admin/views/doc.py:299
-#: django/contrib/admin/views/doc.py:299
-msgid "Decimal number"
-msgstr "Десетична дроб"
-
-#: contrib/admin/views/doc.py:300
-#: django/contrib/admin/views/doc.py:300
-msgid "E-mail address"
-msgstr "E-mail адрес"
-
-#: contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:302
-#: contrib/admin/views/doc.py:305
-#: django/contrib/admin/views/doc.py:301
-#: django/contrib/admin/views/doc.py:302
-#: django/contrib/admin/views/doc.py:305
-msgid "File path"
-msgstr "Път към файл"
-
-#: contrib/admin/views/doc.py:303
-#: django/contrib/admin/views/doc.py:303
-msgid "Floating point number"
-msgstr "Число с плаваща запетая"
-
-#: contrib/admin/views/doc.py:307
-#: contrib/comments/models.py:89
-#: django/contrib/admin/views/doc.py:307
-#: django/contrib/comments/models.py:89
-msgid "IP address"
-msgstr "IP адрес"
-
-#: contrib/admin/views/doc.py:309
-#: django/contrib/admin/views/doc.py:309
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (Възможните стойности са True, False или None)"
-
-#: contrib/admin/views/doc.py:310
-#: django/contrib/admin/views/doc.py:310
-msgid "Relation to parent model"
-msgstr "Връзка с родителския обект"
-
-#: contrib/admin/views/doc.py:311
-#: django/contrib/admin/views/doc.py:311
-msgid "Phone number"
-msgstr "Телефонен номер"
-
-#: contrib/admin/views/doc.py:316
-#: django/contrib/admin/views/doc.py:316
-msgid "Text"
-msgstr "Текст"
-
-#: contrib/admin/views/doc.py:317
-#: django/contrib/admin/views/doc.py:317
-msgid "Time"
-msgstr "Час"
-
-#: contrib/admin/views/doc.py:318
-#: contrib/flatpages/models.py:7
-#: django/contrib/admin/views/doc.py:318
-#: django/contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:319
-#: django/contrib/admin/views/doc.py:319
-msgid "U.S. state (two uppercase letters)"
-msgstr "американски щат (две главни букви)"
-
-#: contrib/admin/views/doc.py:320
-#: django/contrib/admin/views/doc.py:320
-msgid "XML text"
-msgstr "XML текст"
-
-#: contrib/admin/views/doc.py:346
-#: django/contrib/admin/views/doc.py:346
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s не прилича на обект от тип urlpattern"
-
-#: contrib/admin/views/main.py:233
-#: django/contrib/admin/views/main.py:233
-msgid "Site administration"
-msgstr "Администрация на сайта"
-
-#: contrib/admin/views/main.py:280
-#: contrib/admin/views/main.py:365
-#: django/contrib/admin/views/main.py:280
-#: django/contrib/admin/views/main.py:365
-#, python-format
-msgid "You may add another %s below."
-msgstr "Може да добавите още един обект %s по-долу. "
-
-#: contrib/admin/views/main.py:298
-#: django/contrib/admin/views/main.py:298
-#, python-format
-msgid "Add %s"
-msgstr "Добави %s"
-
-#: contrib/admin/views/main.py:344
-#: django/contrib/admin/views/main.py:344
-#, python-format
-msgid "Added %s."
-msgstr "Добавен %s."
-
-#: contrib/admin/views/main.py:344
-#: contrib/admin/views/main.py:346
-#: contrib/admin/views/main.py:348
-#: core/validators.py:283
-#: db/models/manipulators.py:309
-#: django/contrib/admin/views/main.py:344
-#: django/contrib/admin/views/main.py:346
-#: django/contrib/admin/views/main.py:348
-#: django/core/validators.py:283
-#: django/db/models/manipulators.py:309
-msgid "and"
-msgstr "и"
-
-#: contrib/admin/views/main.py:346
-#: django/contrib/admin/views/main.py:346
-#, python-format
-msgid "Changed %s."
-msgstr "Променен %s."
-
-#: contrib/admin/views/main.py:348
-#: django/contrib/admin/views/main.py:348
-#, python-format
-msgid "Deleted %s."
-msgstr "Изтрит %s."
-
-#: contrib/admin/views/main.py:351
-#: django/contrib/admin/views/main.py:351
-msgid "No fields changed."
-msgstr "Няма променени полета."
-
-#: contrib/admin/views/main.py:354
-#: django/contrib/admin/views/main.py:354
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Обектът %(name)s \"%(obj)s\" бе успешно актуализиран. "
-
-#: contrib/admin/views/main.py:362
-#: django/contrib/admin/views/main.py:362
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "Обектът %(name)s \"%(obj)s\" бе успешно добавен. Може да го редактирате по-долу. "
-
-#: contrib/admin/views/main.py:400
-#: django/contrib/admin/views/main.py:400
-#, python-format
-msgid "Change %s"
-msgstr "Промени %s"
-
-#: contrib/admin/views/main.py:487
-#: django/contrib/admin/views/main.py:487
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Едно или повече %(fieldname)s в %(name)s: %(obj)s"
-
-#: contrib/admin/views/main.py:492
-#: django/contrib/admin/views/main.py:492
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Едно или повече %(fieldname)s в %(name)s:"
-
-#: contrib/admin/views/main.py:524
-#: django/contrib/admin/views/main.py:524
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Обектът %(name)s \"%(obj)s\" бе успешно изтрит. "
-
-#: contrib/admin/views/main.py:527
-#: django/contrib/admin/views/main.py:527
-msgid "Are you sure?"
-msgstr "Сериозно?"
-
-#: contrib/admin/views/main.py:549
-#: django/contrib/admin/views/main.py:549
-#, python-format
-msgid "Change history: %s"
-msgstr "История на промените: %s"
-
-#: contrib/admin/views/main.py:583
-#: django/contrib/admin/views/main.py:583
-#, python-format
-msgid "Select %s"
-msgstr "Изберете %s"
-
-#: contrib/admin/views/main.py:583
-#: django/contrib/admin/views/main.py:583
-#, python-format
-msgid "Select %s to change"
-msgstr "Изберете %s за промяна"
-
-#: contrib/admin/views/main.py:784
-#: django/contrib/admin/views/main.py:784
-msgid "Database error"
-msgstr "Грешка с базата данни"
-
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:138
-#: django/contrib/auth/forms.py:17
-#: django/contrib/auth/forms.py:138
-msgid "The two password fields didn't match."
-msgstr "Двете полета за паролата не съвпадат. "
-
-#: contrib/auth/forms.py:25
-#: django/contrib/auth/forms.py:25
-msgid "A user with that username already exists."
-msgstr "Потребител с това потребителско име вече съществува. "
-
-#: contrib/auth/forms.py:53
-#: django/contrib/auth/forms.py:53
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Браузерът, който използвате не поддържа cookies, а те са необходими за да можете да се логнете. "
-
-#: contrib/auth/forms.py:62
-#: django/contrib/auth/forms.py:62
-msgid "This account is inactive."
-msgstr "Този акаунт е деактивиран."
-
-#: contrib/auth/forms.py:84
-#: django/contrib/auth/forms.py:84
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "С този email адрес няма обвързан потребителски акаунт. Сигурни ли сте, че сте се регистрирали?"
-
-#: contrib/auth/forms.py:107
-#: django/contrib/auth/forms.py:107
-#, python-format
-msgid "Password reset on %s"
-msgstr "Паролата се сменя на %s"
-
-#: contrib/auth/forms.py:117
-#: django/contrib/auth/forms.py:117
-msgid "The two 'new password' fields didn't match."
-msgstr "Двете полета за нова парола не съвпадат. "
-
-#: contrib/auth/forms.py:124
-#: django/contrib/auth/forms.py:124
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Въвели сте погрешна стара парола. Въведете я пак. "
-
-#: contrib/auth/models.py:73
-#: contrib/auth/models.py:93
-#: django/contrib/auth/models.py:73
-#: django/contrib/auth/models.py:93
-msgid "name"
-msgstr "име"
-
-#: contrib/auth/models.py:75
-#: django/contrib/auth/models.py:75
-msgid "codename"
-msgstr "код"
-
-#: contrib/auth/models.py:78
-#: django/contrib/auth/models.py:78
-msgid "permission"
-msgstr "право"
-
-#: contrib/auth/models.py:79
-#: contrib/auth/models.py:94
-#: django/contrib/auth/models.py:79
-#: django/contrib/auth/models.py:94
-msgid "permissions"
-msgstr "права"
-
-#: contrib/auth/models.py:97
-#: django/contrib/auth/models.py:97
-msgid "group"
-msgstr "група"
-
-#: contrib/auth/models.py:98
-#: contrib/auth/models.py:141
-#: django/contrib/auth/models.py:98
-#: django/contrib/auth/models.py:141
-msgid "groups"
-msgstr "групи"
-
-#: contrib/auth/models.py:131
-#: django/contrib/auth/models.py:131
-msgid "username"
-msgstr "потребител"
-
-#: contrib/auth/models.py:131
-#: django/contrib/auth/models.py:131
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "Въведете не-повече от 30 символа (само букви, цифри, и подчертавка)"
-
-#: contrib/auth/models.py:132
-#: django/contrib/auth/models.py:132
-msgid "first name"
-msgstr "собствено име"
-
-#: contrib/auth/models.py:133
-#: django/contrib/auth/models.py:133
-msgid "last name"
-msgstr "фамилно име"
-
-#: contrib/auth/models.py:134
-#: django/contrib/auth/models.py:134
-msgid "e-mail address"
-msgstr "e-mail адрес"
-
-#: contrib/auth/models.py:135
-#: django/contrib/auth/models.py:135
-msgid "password"
-msgstr "парола"
-
-#: contrib/auth/models.py:135
-#: django/contrib/auth/models.py:135
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Въведете '[algo]$[salt]$[hexdigest]' или използвайте <a href=\"password/\">формата за смяна на парола</a>."
-
-#: contrib/auth/models.py:136
-#: django/contrib/auth/models.py:136
-msgid "staff status"
-msgstr "персонал"
-
-#: contrib/auth/models.py:136
-#: django/contrib/auth/models.py:136
-msgid "Designates whether the user can log into this admin site."
-msgstr "Указва дали този потребител има достъп до административния панел."
-
-#: contrib/auth/models.py:137
-#: django/contrib/auth/models.py:137
-msgid "active"
-msgstr "активен"
-
-#: contrib/auth/models.py:137
-#: django/contrib/auth/models.py:137
-msgid "Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."
-msgstr "Указва дали този потребител може да влезе в административния панел . Премахнете тази маркировка вместо да изтривате акаунти. "
-
-#: contrib/auth/models.py:138
-#: django/contrib/auth/models.py:138
-msgid "superuser status"
-msgstr "статут на супер-потребител"
-
-#: contrib/auth/models.py:138
-#: django/contrib/auth/models.py:138
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Указва, че този потребител има всички права (без да има нужда да се указват изрично)."
-
-#: contrib/auth/models.py:139
-#: django/contrib/auth/models.py:139
-msgid "last login"
-msgstr "последен логин"
-
-#: contrib/auth/models.py:140
-#: django/contrib/auth/models.py:140
-msgid "date joined"
-msgstr "дата на регистриране"
-
-#: contrib/auth/models.py:142
-#: django/contrib/auth/models.py:142
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Освен ръчно указаните права, този потребител също ще получи правата на всяка група, към която принадлежи. "
-
-#: contrib/auth/models.py:143
-#: django/contrib/auth/models.py:143
-msgid "user permissions"
-msgstr "потребителски права"
-
-#: contrib/auth/models.py:147
-#: django/contrib/auth/models.py:147
-msgid "user"
-msgstr "потребител"
-
-#: contrib/auth/models.py:148
-#: django/contrib/auth/models.py:148
-msgid "users"
-msgstr "потребители"
-
-#: contrib/auth/models.py:154
-#: django/contrib/auth/models.py:154
-msgid "Personal info"
-msgstr "Лична информация"
-
-#: contrib/auth/models.py:155
-#: django/contrib/auth/models.py:155
-msgid "Permissions"
-msgstr "Права"
-
-#: contrib/auth/models.py:156
-#: django/contrib/auth/models.py:156
-msgid "Important dates"
-msgstr "Важни дати"
-
-#: contrib/auth/models.py:157
-#: django/contrib/auth/models.py:157
-msgid "Groups"
-msgstr "Групи"
-
-#: contrib/auth/models.py:316
-#: django/contrib/auth/models.py:316
-msgid "message"
-msgstr "съобщение"
-
-#: contrib/auth/views.py:47
-#: django/contrib/auth/views.py:47
-msgid "Logged out"
-msgstr "Извън системата"
-
-#: contrib/comments/models.py:71
-#: contrib/comments/models.py:176
-#: django/contrib/comments/models.py:71
-#: django/contrib/comments/models.py:176
-msgid "object ID"
-msgstr "ID на обекта"
-
-#: contrib/comments/models.py:72
-#: django/contrib/comments/models.py:72
-msgid "headline"
-msgstr "заглавие"
-
-#: contrib/comments/models.py:73
-#: contrib/comments/models.py:95
-#: contrib/comments/models.py:177
-#: django/contrib/comments/models.py:73
-#: django/contrib/comments/models.py:95
-#: django/contrib/comments/models.py:177
-msgid "comment"
-msgstr "коментар"
-
-#: contrib/comments/models.py:74
-#: django/contrib/comments/models.py:74
-msgid "rating #1"
-msgstr "рейтинг #1"
-
-#: contrib/comments/models.py:75
-#: django/contrib/comments/models.py:75
-msgid "rating #2"
-msgstr "рейтинг #2"
-
-#: contrib/comments/models.py:76
-#: django/contrib/comments/models.py:76
-msgid "rating #3"
-msgstr "рейтинг #3"
-
-#: contrib/comments/models.py:77
-#: django/contrib/comments/models.py:77
-msgid "rating #4"
-msgstr "рейтинг #4"
-
-#: contrib/comments/models.py:78
-#: django/contrib/comments/models.py:78
-msgid "rating #5"
-msgstr "рейтинг #5"
-
-#: contrib/comments/models.py:79
-#: django/contrib/comments/models.py:79
-msgid "rating #6"
-msgstr "рейтинг #6"
-
-#: contrib/comments/models.py:80
-#: django/contrib/comments/models.py:80
-msgid "rating #7"
-msgstr "рейтинг #7"
-
-#: contrib/comments/models.py:81
-#: django/contrib/comments/models.py:81
-msgid "rating #8"
-msgstr "рейтинг #8"
-
-#: contrib/comments/models.py:86
-#: django/contrib/comments/models.py:86
-msgid "is valid rating"
-msgstr "е валиден рейтинг"
-
-#: contrib/comments/models.py:87
-#: contrib/comments/models.py:179
-#: django/contrib/comments/models.py:87
-#: django/contrib/comments/models.py:179
-msgid "date/time submitted"
-msgstr "дата и час на подаване"
-
-#: contrib/comments/models.py:88
-#: contrib/comments/models.py:180
-#: django/contrib/comments/models.py:88
-#: django/contrib/comments/models.py:180
-msgid "is public"
-msgstr "е публичен"
-
-#: contrib/comments/models.py:90
-#: django/contrib/comments/models.py:90
-msgid "is removed"
-msgstr "е премахнат"
-
-#: contrib/comments/models.py:90
-#: django/contrib/comments/models.py:90
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Щтракнете тази кутийка ако коментарът е неподходящ. Вместо съдържанието на коментара, ще се покаже надписът \"Този коментар бе премахнат.\""
-
-#: contrib/comments/models.py:96
-#: django/contrib/comments/models.py:96
-msgid "comments"
-msgstr "коментари"
-
-#: contrib/comments/models.py:140
-#: contrib/comments/models.py:222
-#: django/contrib/comments/models.py:140
-#: django/contrib/comments/models.py:222
-msgid "Content object"
-msgstr "Content обект"
-
-#: contrib/comments/models.py:168
-#: django/contrib/comments/models.py:168
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Пуснат от %(user)s на %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:178
-#: django/contrib/comments/models.py:178
-msgid "person's name"
-msgstr "име на човека"
-
-#: contrib/comments/models.py:181
-#: django/contrib/comments/models.py:181
-msgid "ip address"
-msgstr "ip адрес"
-
-#: contrib/comments/models.py:183
-#: django/contrib/comments/models.py:183
-msgid "approved by staff"
-msgstr "одобрен от персонала"
-
-#: contrib/comments/models.py:187
-#: django/contrib/comments/models.py:187
-msgid "free comment"
-msgstr "свободен коментар"
-
-#: contrib/comments/models.py:188
-#: django/contrib/comments/models.py:188
-msgid "free comments"
-msgstr "свободни коментари"
-
-#: contrib/comments/models.py:250
-#: django/contrib/comments/models.py:250
-msgid "score"
-msgstr "точки"
-
-#: contrib/comments/models.py:251
-#: django/contrib/comments/models.py:251
-msgid "score date"
-msgstr "дата на точкуване"
-
-#: contrib/comments/models.py:255
-#: django/contrib/comments/models.py:255
-msgid "karma score"
-msgstr "кармична точка"
-
-#: contrib/comments/models.py:256
-#: django/contrib/comments/models.py:256
-msgid "karma scores"
-msgstr "кармични точки"
-
-#: contrib/comments/models.py:260
-#: django/contrib/comments/models.py:260
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d рейтинг от %(user)s"
-
-#: contrib/comments/models.py:277
-#: django/contrib/comments/models.py:277
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Този коментар бе флагнат от %(user)s:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:285
-#: django/contrib/comments/models.py:285
-msgid "flag date"
-msgstr "дата на флагване"
-
-#: contrib/comments/models.py:289
-#: django/contrib/comments/models.py:289
-msgid "user flag"
-msgstr "потребителски флаг"
-
-#: contrib/comments/models.py:290
-#: django/contrib/comments/models.py:290
-msgid "user flags"
-msgstr "потребителски флагове"
-
-#: contrib/comments/models.py:294
-#: django/contrib/comments/models.py:294
-#, python-format
-msgid "Flag by %r"
-msgstr "Флаг от %r"
-
-#: contrib/comments/models.py:300
-#: django/contrib/comments/models.py:300
-msgid "deletion date"
-msgstr "дата на изтриване"
-
-#: contrib/comments/models.py:303
-#: django/contrib/comments/models.py:303
-msgid "moderator deletion"
-msgstr "изтриване от модератор"
-
-#: contrib/comments/models.py:304
-#: django/contrib/comments/models.py:304
-msgid "moderator deletions"
-msgstr "изтривания от модератор"
-
-#: contrib/comments/models.py:308
-#: django/contrib/comments/models.py:308
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Изтриване от модератор %r"
-
-#: contrib/comments/templates/comments/form.html:8
-#: django/contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "Забравена парола?"
-
-#: contrib/comments/templates/comments/form.html:12
-#: django/contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Рейтинги"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-#: django/contrib/comments/templates/comments/form.html:12
-#: django/contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Задължително"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-#: django/contrib/comments/templates/comments/form.html:12
-#: django/contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Не-задължително"
-
-#: contrib/comments/templates/comments/form.html:23
-#: django/contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Качете снимка"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-#: django/contrib/comments/templates/comments/form.html:28
-#: django/contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Коментар:"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-#: django/contrib/comments/templates/comments/form.html:35
-#: django/contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "Преглед на коментара"
-
-#: contrib/comments/templates/comments/freeform.html:4
-#: django/contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Вашето име:"
-
-#: contrib/comments/views/comments.py:28
-#: django/contrib/comments/views/comments.py:28
-msgid "This rating is required because you've entered at least one other rating."
-msgstr "Този рейтинг е задължителен, понеже сте въвели поне един друг рейтинг. "
-
-#: contrib/comments/views/comments.py:112
-#: django/contrib/comments/views/comments.py:112
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s comment:\n"
-"\n"
-"%(text)sThis comment was posted by a user who has posted fewer than %(count)s comments:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Този коментар е от потребител, който има по-малко от %(count)s коментар:\n"
-"\n"
-"%(text)sТози коментар е от потребител, който има по-малко от %(count)s коментара:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:117
-#: django/contrib/comments/views/comments.py:117
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Този коментар е от съмнителен потребител:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:190
-#: contrib/comments/views/comments.py:283
-#: django/contrib/comments/views/comments.py:190
-#: django/contrib/comments/views/comments.py:283
-msgid "Only POSTs are allowed"
-msgstr "Само POST заявките са позволени"
-
-#: contrib/comments/views/comments.py:194
-#: contrib/comments/views/comments.py:287
-#: django/contrib/comments/views/comments.py:194
-#: django/contrib/comments/views/comments.py:287
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Едно или повече от задължителните полета липсва"
-
-#: contrib/comments/views/comments.py:198
-#: contrib/comments/views/comments.py:289
-#: django/contrib/comments/views/comments.py:198
-#: django/contrib/comments/views/comments.py:289
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Някой е променял формата за коментари (нарушение на сигурността)"
-
-#: contrib/comments/views/comments.py:208
-#: contrib/comments/views/comments.py:295
-#: django/contrib/comments/views/comments.py:208
-#: django/contrib/comments/views/comments.py:295
-msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
-msgstr "Формата за коментарите има невалиден параметър 'target' -- ID-то на обекта е невалидно"
-
-#: contrib/comments/views/comments.py:259
-#: contrib/comments/views/comments.py:324
-#: django/contrib/comments/views/comments.py:259
-#: django/contrib/comments/views/comments.py:324
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Формата за коментарите не предоставя нито преглед нито постване. "
-
-#: contrib/comments/views/karma.py:21
-#: django/contrib/comments/views/karma.py:21
-msgid "Anonymous users cannot vote"
-msgstr "Анонимните потребители не могат да гласуват"
-
-#: contrib/comments/views/karma.py:25
-#: django/contrib/comments/views/karma.py:25
-msgid "Invalid comment ID"
-msgstr "Невалидно ID на коментар"
-
-#: contrib/comments/views/karma.py:27
-#: django/contrib/comments/views/karma.py:27
-msgid "No voting for yourself"
-msgstr "Не можете да гласувате за себе си"
-
-#: contrib/contenttypes/models.py:37
-#: django/contrib/contenttypes/models.py:37
-msgid "python model class name"
-msgstr "има на класа на модела в Python"
-
-#: contrib/contenttypes/models.py:40
-#: django/contrib/contenttypes/models.py:40
-msgid "content type"
-msgstr "тип на съдържанието"
-
-#: contrib/contenttypes/models.py:41
-#: django/contrib/contenttypes/models.py:41
-msgid "content types"
-msgstr "типове съдържание"
-
-#: contrib/flatpages/models.py:8
-#: django/contrib/flatpages/models.py:8
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Пример: '/about/contact/'. Началната и крайната наклонена чертичка са задължителни. "
-
-#: contrib/flatpages/models.py:9
-#: django/contrib/flatpages/models.py:9
-msgid "title"
-msgstr "заглавие"
-
-#: contrib/flatpages/models.py:10
-#: django/contrib/flatpages/models.py:10
-msgid "content"
-msgstr "съдържание"
-
-#: contrib/flatpages/models.py:11
-#: django/contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "позволяване на коментари"
-
-#: contrib/flatpages/models.py:12
-#: django/contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "име на шаблон"
-
-#: contrib/flatpages/models.py:13
-#: django/contrib/flatpages/models.py:13
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Пример: 'flatpages/contact_page.html'. Ако това не е указано, системата ще използва 'flatpages/default.html'. "
-
-#: contrib/flatpages/models.py:14
-#: django/contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "изисква се регистрация"
-
-#: contrib/flatpages/models.py:14
-#: django/contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Ако това е чекнато, само логнати потребители ще могат да виждат страницата. "
-
-#: contrib/flatpages/models.py:18
-#: django/contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "информативна страница"
-
-#: contrib/flatpages/models.py:19
-#: django/contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "информативни страници"
-
-#: contrib/humanize/templatetags/humanize.py:19
-#: django/contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "и"
-
-#: contrib/humanize/templatetags/humanize.py:19
-#: django/contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "ви"
-
-#: contrib/humanize/templatetags/humanize.py:19
-#: django/contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "ри"
-
-#: contrib/humanize/templatetags/humanize.py:19
-#: django/contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "ти"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#: django/contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgstr "%(value).1f милион"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#: django/contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgstr "%(value).1f милиард"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#: django/contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgstr "%(value).1f трилион"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "един"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "два"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "три"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "четири"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "пет"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "шест"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "седем"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "осем"
-
-#: contrib/humanize/templatetags/humanize.py:73
-#: django/contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "девет"
-
-#: contrib/humanize/templatetags/humanize.py:93
-#: django/contrib/humanize/templatetags/humanize.py:93
-#: tests/regressiontests/humanize/tests.py:65
-msgid "today"
-msgstr "днес"
-
-#: contrib/humanize/templatetags/humanize.py:95
-#: django/contrib/humanize/templatetags/humanize.py:95
-#: tests/regressiontests/humanize/tests.py:65
-msgid "tomorrow"
-msgstr "Утре"
-
-#: contrib/humanize/templatetags/humanize.py:97
-#: django/contrib/humanize/templatetags/humanize.py:97
-#: tests/regressiontests/humanize/tests.py:65
-msgid "yesterday"
-msgstr "вчера"
-
-#: contrib/localflavor/ar/forms.py:27
-#: django/contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Въведете пощенския код във формат NNNN или ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-#: django/contrib/localflavor/ar/forms.py:49
-#: django/contrib/localflavor/br/forms.py:96
-#: django/contrib/localflavor/br/forms.py:135
-#: django/contrib/localflavor/pe/forms.py:23
-#: django/contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Това поле изисква число."
-
-#: contrib/localflavor/ar/forms.py:50
-#: django/contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Това поле изисква 7 или 8 цифри."
-
-#: contrib/localflavor/ar/forms.py:79
-#: django/contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Въведете валиден номер на германска лична карта в формат XX-XXXXXXXX-X или XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:80
-#: django/contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "Невалиден CUIT."
-
-#: contrib/localflavor/au/forms.py:16
-#: django/contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Въведете 4 цифрен пощенски код"
-
-#: contrib/localflavor/br/forms.py:21
-#: django/contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Въведете пощенски код в формат XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-#: django/contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Телефонните номера трябва да бъдат в формат XX-XXXX-XXXX. "
-
-#: contrib/localflavor/br/forms.py:58
-#: django/contrib/localflavor/br/forms.py:58
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Изберете валиден бразилски щат. Този, не е един отвалидните щати."
-
-#: contrib/localflavor/br/forms.py:94
-#: django/contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Невалиден CPF номер"
-
-#: contrib/localflavor/br/forms.py:95
-#: django/contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Това поле изисква поне 11 цифри или 14 символа."
-
-#: contrib/localflavor/br/forms.py:134
-#: django/contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Невалиден CNPJ номер"
-
-#: contrib/localflavor/br/forms.py:136
-#: django/contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Това поле изисква поне 14 цифри."
-
-#: contrib/localflavor/ca/forms.py:17
-#: django/contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Въведете пощенски код в формат XXX XXХ."
-
-#: contrib/localflavor/ca/forms.py:88
-#: django/contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Въведете валиден номер на канадската социална осигуровка в формата XXX-XX-XXXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-#: django/contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Ааргау"
-
-#: contrib/localflavor/ch/ch_states.py:6
-#: django/contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-#: django/contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-#: django/contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-#: django/contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-#: django/contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-#: django/contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-#: django/contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Женева"
-
-#: contrib/localflavor/ch/ch_states.py:13
-#: django/contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-#: django/contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-#: django/contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-#: django/contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-#: django/contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-#: django/contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-#: django/contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-#: django/contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-#: django/contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-#: django/contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-#: django/contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-#: django/contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-#: django/contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-#: django/contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-#: django/contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-#: django/contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-#: django/contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-#: django/contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-#: django/contrib/localflavor/ch/forms.py:16
-#: django/contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Въведете пощенски код в формат XXXX."
-
-#: contrib/localflavor/ch/forms.py:64
-#: django/contrib/localflavor/ch/forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "Въведете валиден швейцарски индентификационен номер в X1234567<0 или 1234567890 формат"
-
-#: contrib/localflavor/cl/forms.py:29
-#: django/contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Въведете валиден чилийски RUT."
-
-#: contrib/localflavor/cl/forms.py:30
-#: django/contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Въведете валиден чилийски RUT. Форпатът представлява ХХ ХХХ ХХХ-Х."
-
-#: contrib/localflavor/cl/forms.py:31
-#: django/contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "Чилийският RUT не е валиден."
-
-#: contrib/localflavor/de/de_states.py:5
-#: django/contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-#: django/contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Бавария"
-
-#: contrib/localflavor/de/de_states.py:7
-#: django/contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Берлин"
-
-#: contrib/localflavor/de/de_states.py:8
-#: django/contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Бранденбург"
-
-#: contrib/localflavor/de/de_states.py:9
-#: django/contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Бремен"
-
-#: contrib/localflavor/de/de_states.py:10
-#: django/contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Хамбург"
-
-#: contrib/localflavor/de/de_states.py:11
-#: django/contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Хесен "
-
-#: contrib/localflavor/de/de_states.py:12
-#: django/contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-#: django/contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Долна Саксония "
-
-#: contrib/localflavor/de/de_states.py:14
-#: django/contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "North Rhine-Westphalia"
-
-#: contrib/localflavor/de/de_states.py:15
-#: django/contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-#: django/contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-#: django/contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Саксония"
-
-#: contrib/localflavor/de/de_states.py:18
-#: django/contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Саксония-Анхалт"
-
-#: contrib/localflavor/de/de_states.py:19
-#: django/contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-#: django/contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-#: django/contrib/localflavor/de/forms.py:14
-#: django/contrib/localflavor/fi/forms.py:12
-#: django/contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Въведете пощенски код в формат XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-#: django/contrib/localflavor/de/forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Въведете валиден номер на германска лична карта в формат XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-#: django/contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-#: django/contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-#: django/contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-#: django/contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-#: django/contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-#: django/contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-#: django/contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-#: django/contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Барселона"
-
-#: contrib/localflavor/es/es_provinces.py:13
-#: django/contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-#: django/contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-#: django/contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-#: django/contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-#: django/contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-#: django/contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Кордоба"
-
-#: contrib/localflavor/es/es_provinces.py:19
-#: django/contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-#: django/contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-#: django/contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-#: django/contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Гранада"
-
-#: contrib/localflavor/es/es_provinces.py:23
-#: django/contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-#: django/contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-#: django/contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-#: django/contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-#: django/contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-#: django/contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-#: django/contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-#: django/contrib/localflavor/es/es_provinces.py:30
-#: django/contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-#: django/contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-#: django/contrib/localflavor/es/es_provinces.py:32
-#: django/contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Мадрид"
-
-#: contrib/localflavor/es/es_provinces.py:33
-#: django/contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Малага"
-
-#: contrib/localflavor/es/es_provinces.py:34
-#: django/contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Мурсия "
-
-#: contrib/localflavor/es/es_provinces.py:35
-#: django/contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Навара"
-
-#: contrib/localflavor/es/es_provinces.py:36
-#: django/contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-#: django/contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-#: django/contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-#: django/contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-#: django/contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-#: django/contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-#: django/contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-#: django/contrib/localflavor/es/es_provinces.py:43
-#: django/contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-#: django/contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-#: django/contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-#: django/contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-#: django/contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-#: django/contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-#: django/contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-#: django/contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Валенсия"
-
-#: contrib/localflavor/es/es_provinces.py:51
-#: django/contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-#: django/contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-#: django/contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-#: django/contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Сарагоса"
-
-#: contrib/localflavor/es/es_provinces.py:55
-#: django/contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-#: django/contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-#: django/contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-#: django/contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Арагон"
-
-#: contrib/localflavor/es/es_regions.py:7
-#: django/contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-#: django/contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Балеарските острови"
-
-#: contrib/localflavor/es/es_regions.py:9
-#: django/contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-#: django/contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Канарските острови"
-
-#: contrib/localflavor/es/es_regions.py:12
-#: django/contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-#: django/contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-#: django/contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Каталония"
-
-#: contrib/localflavor/es/es_regions.py:15
-#: django/contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-#: django/contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-#: django/contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-#: django/contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-#: django/contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:19
-#: django/contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Въведете валиден пощенски код в интервала 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:39
-#: django/contrib/localflavor/es/forms.py:39
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "Въведевалиден телефонен номер в един от форматите 6XXXXXXXX, 8XXXXXXXX или 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
-#: django/contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Въведете валиден НИФ, НИЕ, или ЦИФ."
-
-#: contrib/localflavor/es/forms.py:67
-#: django/contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Въведете валиден НИГ или НИЕ."
-
-#: contrib/localflavor/es/forms.py:68
-#: django/contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Невалидна чексума за НИФ"
-
-#: contrib/localflavor/es/forms.py:69
-#: django/contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Невалидна чексума за НИЕ"
-
-#: contrib/localflavor/es/forms.py:70
-#: django/contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Невалидна чексума за ЦИФ"
-
-#: contrib/localflavor/es/forms.py:142
-#: django/contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Въведете валиден номер на банковата ви сметка във формат XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:143
-#: django/contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Невалидна чексума за номер на банковата сметка"
-
-#: contrib/localflavor/fi/forms.py:28
-#: django/contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Въведете валиден финландски номер на социалната осигуровка."
-
-#: contrib/localflavor/in_/forms.py:14
-#: django/contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Въведете пощенски код в формат XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-#: django/contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Въведете валиден исландски номер. Форматът представлява XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-#: django/contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Исландския номер за индентификация е невлиден"
-
-#: contrib/localflavor/it/forms.py:14
-#: django/contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Въведете валиден пощенски код."
-
-#: contrib/localflavor/it/forms.py:43
-#: django/contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Въведете валиден номер на социалната ви осигуровка."
-
-#: contrib/localflavor/it/forms.py:68
-#: django/contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Въведете валиден VAT номер."
-
-#: contrib/localflavor/jp/forms.py:17
-#: django/contrib/localflavor/jp/forms.py:17
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Въведете пощенски код в формат XXXXXXX или XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-#: django/contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Хокайдо"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-#: django/contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Амори"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-#: django/contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-#: django/contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-#: django/contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Акита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-#: django/contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Ямагата"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-#: django/contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Фукушима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-#: django/contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ибараки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-#: django/contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-#: django/contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-#: django/contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Сайтама"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-#: django/contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Чиба"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-#: django/contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Токио"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-#: django/contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Канагава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-#: django/contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Яманаши"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-#: django/contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Нагано"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-#: django/contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-#: django/contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-#: django/contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ишикава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-#: django/contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-#: django/contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-#: django/contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-#: django/contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-#: django/contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-#: django/contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Шига"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-#: django/contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Киато"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-#: django/contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Осака"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-#: django/contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-#: django/contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Нара"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-#: django/contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-#: django/contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-#: django/contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-#: django/contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Окаяма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-#: django/contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Хирошима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-#: django/contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Ямагучи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-#: django/contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Токушима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-#: django/contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-#: django/contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-#: django/contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Кочи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-#: django/contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Фукуока"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-#: django/contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Сага"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-#: django/contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Нагазаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-#: django/contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Кумамото"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-#: django/contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-#: django/contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Миазаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-#: django/contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-#: django/contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Окинава"
-
-#: contrib/localflavor/mx/mx_states.py:12
-#: django/contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-#: django/contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-#: django/contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-#: django/contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-#: django/contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Чихуахуа"
-
-#: contrib/localflavor/mx/mx_states.py:17
-#: django/contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-#: django/contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-#: django/contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-#: django/contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-#: django/contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-#: django/contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-#: django/contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-#: django/contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Хидалго"
-
-#: contrib/localflavor/mx/mx_states.py:25
-#: django/contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-#: django/contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-#: django/contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-#: django/contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-#: django/contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-#: django/contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-#: django/contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-#: django/contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-#: django/contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-#: django/contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-#: django/contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-#: django/contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-#: django/contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-#: django/contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Табаско"
-
-#: contrib/localflavor/mx/mx_states.py:39
-#: django/contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-#: django/contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-#: django/contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-#: django/contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-#: django/contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:21
-#: django/contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Въведете валиден пощенски код."
-
-#: contrib/localflavor/nl/forms.py:52
-#: django/contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Въведете валиден телефонен номер"
-
-#: contrib/localflavor/nl/forms.py:78
-#: django/contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Въведете валиден SoFi номер"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-#: django/contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drente"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-#: django/contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-#: django/contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-#: django/contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-#: django/contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-#: django/contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-#: django/contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-#: django/contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-#: django/contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-#: django/contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-#: django/contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-#: django/contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:33
-#: django/contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Въведете валиден норвежки номер на социалната осигуровка."
-
-#: contrib/localflavor/pe/forms.py:24
-#: django/contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Това поле изисква 8 цифри."
-
-#: contrib/localflavor/pe/forms.py:52
-#: django/contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Това поле изисква 11 цифри."
-
-#: contrib/localflavor/pl/forms.py:39
-#: django/contrib/localflavor/pl/forms.py:39
-msgid "National Identification Number consists of 11 digits."
-msgstr "Националният индентификационен номер се състои от 11 цифри"
-
-#: contrib/localflavor/pl/forms.py:40
-#: django/contrib/localflavor/pl/forms.py:40
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Грешна чексума за Националния индентификационен номер"
-
-#: contrib/localflavor/pl/forms.py:72
-#: django/contrib/localflavor/pl/forms.py:72
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Въведете данъчен номер (НИП) във формат XXX-XXX-XX-XX или XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:73
-#: django/contrib/localflavor/pl/forms.py:73
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Грешна чексума за данъчен номер (НИП)"
-
-#: contrib/localflavor/pl/forms.py:112
-#: django/contrib/localflavor/pl/forms.py:112
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr "Националният Бизнес Регистрационен номер (REGON) се състои от 7 или 9 цифри."
-
-#: contrib/localflavor/pl/forms.py:113
-#: django/contrib/localflavor/pl/forms.py:113
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Грешна чексума за Националния Бизнес Регистрационен Номер (REGON)"
-
-#: contrib/localflavor/pl/forms.py:156
-#: django/contrib/localflavor/pl/forms.py:156
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Въведете пощенски код в формат XX-ХXXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-#: django/contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-#: django/contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-#: django/contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-#: django/contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-#: django/contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-#: django/contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-#: django/contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-#: django/contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-#: django/contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-#: django/contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-#: django/contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-#: django/contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-#: django/contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-#: django/contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-#: django/contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-#: django/contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/sk/forms.py:30
-#: django/contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Въведете пощенски код в формат XXXXX или XXX XX."
-
-#: contrib/localflavor/sk/sk_districts.py:8
-#: django/contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Банска Бистрица"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-#: django/contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Банска Стиавница"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-#: django/contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-#: django/contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-#: django/contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-#: django/contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-#: django/contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-#: django/contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-#: django/contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-#: django/contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-#: django/contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-#: django/contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-#: django/contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-#: django/contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-#: django/contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-#: django/contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-#: django/contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-#: django/contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-#: django/contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-#: django/contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-#: django/contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-#: django/contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-#: django/contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-#: django/contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-#: django/contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-#: django/contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-#: django/contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-#: django/contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-#: django/contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-#: django/contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-#: django/contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-#: django/contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-#: django/contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-#: django/contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-#: django/contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-#: django/contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-#: django/contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-#: django/contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-#: django/contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-#: django/contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-#: django/contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-#: django/contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-#: django/contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-#: django/contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-#: django/contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-#: django/contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-#: django/contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-#: django/contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-#: django/contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-#: django/contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-#: django/contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-#: django/contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-#: django/contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-#: django/contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-#: django/contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-#: django/contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-#: django/contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-#: django/contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-#: django/contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-#: django/contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-#: django/contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-#: django/contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-#: django/contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-#: django/contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-#: django/contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-#: django/contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-#: django/contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-#: django/contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-#: django/contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-#: django/contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-#: django/contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-#: django/contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-#: django/contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-#: django/contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-#: django/contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-#: django/contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-#: django/contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-#: django/contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-#: django/contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-#: django/contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-#: django/contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-#: django/contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-#: django/contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-#: django/contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-#: django/contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-#: django/contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-#: django/contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-#: django/contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Въведете валиден пощенски код."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-#: django/contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Бедфордшър"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-#: django/contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-#: django/contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-#: django/contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-#: django/contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-#: django/contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-#: django/contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-#: django/contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-#: django/contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-#: django/contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Источен Съсек "
-
-#: contrib/localflavor/uk/uk_regions.py:22
-#: django/contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Есекс"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-#: django/contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-#: django/contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Велик Лондон"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-#: django/contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Велик Манчестер "
-
-#: contrib/localflavor/uk/uk_regions.py:26
-#: django/contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-#: django/contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-#: django/contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Кент"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-#: django/contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-#: django/contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-#: django/contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-#: django/contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-#: django/contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-#: django/contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-#: django/contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-#: django/contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-#: django/contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-#: django/contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-#: django/contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-#: django/contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-#: django/contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Южен Йорксър"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-#: django/contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-#: django/contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-#: django/contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-#: django/contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-#: django/contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-#: django/contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-#: django/contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-#: django/contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-#: django/contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-#: django/contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-#: django/contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-#: django/contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-#: django/contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-#: django/contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-#: django/contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-#: django/contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-#: django/contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-#: django/contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-#: django/contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-#: django/contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-#: django/contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-#: django/contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-#: django/contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-#: django/contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-#: django/contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-#: django/contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-#: django/contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-#: django/contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-#: django/contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-#: django/contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-#: django/contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-#: django/contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-#: django/contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-#: django/contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-#: django/contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-#: django/contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-#: django/contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Англия"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-#: django/contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-#: django/contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-#: django/contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Уелс"
-
-#: contrib/localflavor/us/forms.py:16
-#: django/contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Въведете zip код в формат XXXXX или XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:54
-#: django/contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Въведете валиден номер на социалната осигуровка в формат XXX-XX-XXXX."
-
-#: contrib/localflavor/za/forms.py:20
-#: django/contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Въведете валиден южно-африкански номер за индентификация"
-
-#: contrib/localflavor/za/forms.py:54
-#: django/contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Въведете валиден пощенски код за Южна Африка"
-
-#: contrib/localflavor/za/za_provinces.py:4
-#: django/contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-#: django/contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-#: django/contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-#: django/contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-#: django/contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-#: django/contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-#: django/contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-#: django/contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-#: django/contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-#: django/contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "препратка от"
-
-#: contrib/redirects/models.py:8
-#: django/contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Това трябва да бъде абсолютен път, без името на домейна. Пример: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-#: django/contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "препратка към"
-
-#: contrib/redirects/models.py:10
-#: django/contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Това може да бъде или абсолютен път (като горното) или пълен URL, започващ с 'http://'."
-
-#: contrib/redirects/models.py:13
-#: django/contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "препратка"
-
-#: contrib/redirects/models.py:14
-#: django/contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "препратки"
-
-#: contrib/sessions/models.py:41
-#: django/contrib/sessions/models.py:41
-msgid "session key"
-msgstr "ключ на сесията"
-
-#: contrib/sessions/models.py:42
-#: django/contrib/sessions/models.py:42
-msgid "session data"
-msgstr "данни от сесията"
-
-#: contrib/sessions/models.py:43
-#: django/contrib/sessions/models.py:43
-msgid "expire date"
-msgstr "дата на валидност"
-
-#: contrib/sessions/models.py:48
-#: django/contrib/sessions/models.py:48
-msgid "session"
-msgstr "сесия"
-
-#: contrib/sessions/models.py:49
-#: django/contrib/sessions/models.py:49
-msgid "sessions"
-msgstr "сесии"
-
-#: contrib/sites/models.py:32
-#: django/contrib/sites/models.py:32
-msgid "domain name"
-msgstr "име на домейна"
-
-#: contrib/sites/models.py:33
-#: django/contrib/sites/models.py:33
-msgid "display name"
-msgstr "наименование"
-
-#: contrib/sites/models.py:37
-#: django/contrib/sites/models.py:37
-msgid "site"
-msgstr "сайт"
-
-#: contrib/sites/models.py:38
-#: django/contrib/sites/models.py:38
-msgid "sites"
-msgstr "сайтове"
-
-#: core/validators.py:72
-#: django/core/validators.py:72
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Тази стойност може да съдържа само букви, цифри и подчертавки. "
-
-#: core/validators.py:76
-#: django/core/validators.py:76
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Тази стойност може да съдържа само букви, цифри, подчертавки, тиренца и наклонени чертички. "
-
-#: core/validators.py:80
-#: django/core/validators.py:80
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "Тази стойност трябва да съдържа само букви, цифри, подчертавки или тиренца. "
-
-#: core/validators.py:84
-#: django/core/validators.py:84
-msgid "Uppercase letters are not allowed here."
-msgstr "Тук не се допускат главни букви. "
-
-#: core/validators.py:88
-#: django/core/validators.py:88
-msgid "Lowercase letters are not allowed here."
-msgstr "Тук не се допускат малки букви. "
-
-#: core/validators.py:95
-#: django/core/validators.py:95
-msgid "Enter only digits separated by commas."
-msgstr "Въведете само цифри, разделени със запетая. "
-
-#: core/validators.py:107
-#: django/core/validators.py:107
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Въведете валидни e-mail адреси разделени със запетая. "
-
-#: core/validators.py:111
-#: django/core/validators.py:111
-msgid "Please enter a valid IP address."
-msgstr "Въведете валиден IP адрес. "
-
-#: core/validators.py:115
-#: django/core/validators.py:115
-msgid "Empty values are not allowed here."
-msgstr "Тук не се допускат празни стойности. "
-
-#: core/validators.py:119
-#: django/core/validators.py:119
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Тук не се допускат символи, които не са цифри. "
-
-#: core/validators.py:123
-#: django/core/validators.py:123
-msgid "This value can't be comprised solely of digits."
-msgstr "Тази стойност не може да бъде само цифри. "
-
-#: core/validators.py:128
-#: django/core/validators.py:128
-#: django/newforms/fields.py:151
-#: newforms/fields.py:151
-msgid "Enter a whole number."
-msgstr "Въведете цяло число. "
-
-#: core/validators.py:132
-#: django/core/validators.py:132
-msgid "Only alphabetical characters are allowed here."
-msgstr "Само букви и цифри се допускат тук. "
-
-#: core/validators.py:147
-#: django/core/validators.py:147
-msgid "Year must be 1900 or later."
-msgstr "Годината трябва да бъде от 1900 нагоре."
-
-#: core/validators.py:151
-#: django/core/validators.py:151
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Невалидна дата: %s"
-
-#: core/validators.py:156
-#: db/models/fields/__init__.py:522
-#: django/core/validators.py:156
-#: django/db/models/fields/__init__.py:522
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Въведете валидна дата в формат ГГГГ-ММ-ДД."
-
-#: core/validators.py:161
-#: django/core/validators.py:161
-msgid "Enter a valid time in HH:MM format."
-msgstr "Въведете валиден час във формат ЧЧ:ММ. "
-
-#: core/validators.py:165
-#: db/models/fields/__init__.py:599
-#: django/core/validators.py:165
-#: django/db/models/fields/__init__.py:599
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Въведете валидна дата и час в формат ГГГГ-ММ-ДД ЧЧ:ММ."
-
-#: core/validators.py:170
-#: django/core/validators.py:170
-#: django/newforms/fields.py:402
-#: newforms/fields.py:402
-msgid "Enter a valid e-mail address."
-msgstr "Въведете валиден e-mail адрес. "
-
-#: core/validators.py:182
-#: core/validators.py:474
-#: django/core/validators.py:182
-#: django/core/validators.py:474
-#: django/newforms/fields.py:432
-#: django/oldforms/__init__.py:687
-#: newforms/fields.py:432
-#: oldforms/__init__.py:687
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Не е получен файл. Проверете типът кодиране на формата. "
-
-#: core/validators.py:193
-#: django/core/validators.py:193
-#: django/newforms/fields.py:458
-#: newforms/fields.py:458
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Качете валидна картинка. Файлът, който сте качили или не е картинка или е развалена. "
-
-#: core/validators.py:200
-#: django/core/validators.py:200
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "URL %s не сочи към валидна картинка. "
-
-#: core/validators.py:204
-#: django/core/validators.py:204
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Телефонните номера трябва да бъдат във формат XXX-XXX-XXXX. \"%s\" не е валиден. "
-
-#: core/validators.py:212
-#: django/core/validators.py:212
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "URL %s не сочи към валиден QuickTime видео клип."
-
-#: core/validators.py:216
-#: django/core/validators.py:216
-msgid "A valid URL is required."
-msgstr "Изисква се валиден URL."
-
-#: core/validators.py:230
-#: django/core/validators.py:230
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Изисква се валиден HTML. Конкретните грешки са:\n"
-"%s"
-
-#: core/validators.py:237
-#: django/core/validators.py:237
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "Неправилно форматиран XML: %s"
-
-#: core/validators.py:254
-#: django/core/validators.py:254
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "Невалиден URL: %s"
-
-#: core/validators.py:259
-#: core/validators.py:261
-#: django/core/validators.py:259
-#: django/core/validators.py:261
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "Този URL %s е счупен линк. "
-
-#: core/validators.py:267
-#: django/core/validators.py:267
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Въведете валидно съкращение на американски щат. "
-
-#: core/validators.py:281
-#: django/core/validators.py:281
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgstr "Ей-шш! Думичката %s не е позволена тук. "
-
-#: core/validators.py:288
-#: django/core/validators.py:288
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Това поле трябва да съвпада с полето '%s' ."
-
-#: core/validators.py:307
-#: django/core/validators.py:307
-msgid "Please enter something for at least one field."
-msgstr "Въведете нещичко поне за едното поле. "
-
-#: core/validators.py:316
-#: core/validators.py:327
-#: django/core/validators.py:316
-#: django/core/validators.py:327
-msgid "Please enter both fields or leave them both empty."
-msgstr "Или въведете и двете полета или ги оставете празни."
-
-#: core/validators.py:335
-#: django/core/validators.py:335
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Това поле трябва да е зададено ако %(field)s е %(value)s"
-
-#: core/validators.py:348
-#: django/core/validators.py:348
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Това поле трябва да е зададено ако %(field)s не е %(value)s"
-
-#: core/validators.py:367
-#: django/core/validators.py:367
-msgid "Duplicate values are not allowed."
-msgstr "Не са позволени стойности, които се повтарят. "
-
-#: core/validators.py:382
-#: django/core/validators.py:382
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Тази стойност трябва да бъде между %(lower)s и %(upper)s."
-
-#: core/validators.py:384
-#: django/core/validators.py:384
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Тази стойност трябва да бъде поне %s. "
-
-#: core/validators.py:386
-#: django/core/validators.py:386
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Тази стойност не трябва да надвишава %s."
-
-#: core/validators.py:427
-#: django/core/validators.py:427
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Тази стойност трябва да е точна степен на %s."
-
-#: core/validators.py:437
-#: django/core/validators.py:437
-msgid "Please enter a valid decimal number."
-msgstr "Въведете валидна десетична дроб. "
-
-#: core/validators.py:444
-#: django/core/validators.py:444
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit.Please enter a valid decimal number with at most %s total digits."
-msgstr "Въведете валидна десетична дроб с не-повече от %s цифра. Въведете валидна десетична дроб с не-повече от %s цифра."
-
-#: core/validators.py:447
-#: django/core/validators.py:447
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit.Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr "Въведете валидна десетична дроб, цялата част на която да не надхвърля %s цифра.Въведете валидна десетична дроб, цялата част на която да не надхвърля %s цифри. "
-
-#: core/validators.py:450
-#: django/core/validators.py:450
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place.Please enter a valid decimal number with at most %s decimal places."
-msgstr "Въведете валидна десетична дроб с не-повече от %s цифра след десетичната точка.Въведете валидна десетична дроб с не-повече от %s цифри след десетичната точка. "
-
-#: core/validators.py:458
-#: django/core/validators.py:458
-msgid "Please enter a valid floating point number."
-msgstr "Въведете валидно число с плаваща зашетая."
-
-#: core/validators.py:467
-#: django/core/validators.py:467
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Файлът, който сте качили трябва да бъде поне %s байта."
-
-#: core/validators.py:468
-#: django/core/validators.py:468
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Размерът на файла, който сте качили не трябва да надхвърля %s байта. "
-
-#: core/validators.py:485
-#: django/core/validators.py:485
-msgid "The format for this field is wrong."
-msgstr "Форматът на това поле е грешен."
-
-#: core/validators.py:500
-#: django/core/validators.py:500
-msgid "This field is invalid."
-msgstr "Това поле не е валидно"
-
-#: core/validators.py:536
-#: django/core/validators.py:536
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Не получихме нищо от %s."
-
-#: core/validators.py:539
-#: django/core/validators.py:539
-#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "URL %(url)s върна невалиден Content-Type хедър '%(contenttype)s'."
-
-#: core/validators.py:572
-#: django/core/validators.py:572
-#, python-format
-msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
-msgstr "Затворете тага %(tag)s , който е отворен на ред %(line)s. (Редът започва с \"%(start)s\".)"
-
-#: core/validators.py:576
-#: django/core/validators.py:576
-#, python-format
-msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
-msgstr "Некъв текст на ред %(line)s не е позволен в този контекст. (Редът започва с \"%(start)s\".)"
-
-#: core/validators.py:581
-#: django/core/validators.py:581
-#, python-format
-msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
-msgstr "\"%(attr)s\" на ред %(line)s е невалиден атрибут. (Редът започва с \"%(start)s\".)"
-
-#: core/validators.py:586
-#: django/core/validators.py:586
-#, python-format
-msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
-msgstr "\"<%(tag)s>\" на ред %(line)s е невалиден таг. (Редът започва с \"%(start)s\".)"
-
-#: core/validators.py:590
-#: django/core/validators.py:590
-#, python-format
-msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
-msgstr "На някой от таговете на ред %(line)s му липсват един или повече задължителни атрибута. (Редът започва с \"%(start)s\".)"
-
-#: core/validators.py:595
-#: django/core/validators.py:595
-#, python-format
-msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
-msgstr "Атрибутът \"%(attr)s\" на ред %(line)s има невалидна стойност. (Редът започва с \"%(start)s\".)"
-
-#: db/models/manipulators.py:308
-#: django/db/models/manipulators.py:308
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s с този %(type)s вече съществува за зададеното %(field)s.s"
-
-#: db/models/fields/__init__.py:52
-#: django/db/models/fields/__init__.py:52
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s с този %(fieldname)s вече съществува."
-
-#: db/models/fields/__init__.py:161
-#: db/models/fields/__init__.py:322
-#: db/models/fields/__init__.py:754
-#: db/models/fields/__init__.py:765
-#: django/db/models/fields/__init__.py:161
-#: django/db/models/fields/__init__.py:322
-#: django/db/models/fields/__init__.py:754
-#: django/db/models/fields/__init__.py:765
-#: django/newforms/fields.py:45
-#: django/oldforms/__init__.py:374
-#: newforms/fields.py:45
-#: oldforms/__init__.py:374
-msgid "This field is required."
-msgstr "Това поле е задължително."
-
-#: db/models/fields/__init__.py:422
-#: django/db/models/fields/__init__.py:422
-msgid "This value must be an integer."
-msgstr "Тази стойност трябва да бъде цяло число"
-
-#: db/models/fields/__init__.py:461
-#: django/db/models/fields/__init__.py:461
-msgid "This value must be either True or False."
-msgstr "Тази стойност трябва да бъде True или False."
-
-#: db/models/fields/__init__.py:485
-#: django/db/models/fields/__init__.py:485
-msgid "This field cannot be null."
-msgstr "Това поле не може да има празна стойност."
-
-#: db/models/fields/__init__.py:663
-#: django/db/models/fields/__init__.py:663
-msgid "This value must be a decimal number."
-msgstr "Тази стойност трябва да бъде число с плаваща запетая."
-
-#: db/models/fields/__init__.py:774
-#: django/db/models/fields/__init__.py:774
-msgid "Enter a valid filename."
-msgstr "Въведете валидно име на файл."
-
-#: db/models/fields/__init__.py:945
-#: django/db/models/fields/__init__.py:945
-msgid "This value must be either None, True or False."
-msgstr "Тази стойност трябва да бъде None, True, или False."
-
-#: db/models/fields/related.py:55
-#: django/db/models/fields/related.py:55
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Въведете валиден %s."
-
-#: db/models/fields/related.py:658
-#: django/db/models/fields/related.py:658
-msgid "Separate multiple IDs with commas."
-msgstr "Множество ID-та се разделят с запетайки"
-
-#: db/models/fields/related.py:660
-#: django/db/models/fields/related.py:660
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Задръжте натиснат клавиша \"Control\" (или \"Command\" на Mac-а) за да направите повече от един избор. "
-
-#: db/models/fields/related.py:707
-#: django/db/models/fields/related.py:707
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid.Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr "Въведете валидни %(self)s ID-та. Стойността %(value)r не е валидна."
-
-#: django/newforms/fields.py:46
-#: newforms/fields.py:46
-msgid "Enter a valid value."
-msgstr "Въведете валидна стойност. "
-
-#: django/newforms/fields.py:123
-#: newforms/fields.py:123
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Уверете се, че стойността съдържа максимално %(max)d символа (в момента %(length)d)."
-
-#: django/newforms/fields.py:124
-#: newforms/fields.py:124
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Уверете се, че тази стойност съдържа поне %(min)d символа (в момента %(length)d)."
-
-#: django/newforms/fields.py:152
-#: django/newforms/fields.py:181
-#: django/newforms/fields.py:210
-#: newforms/fields.py:152
-#: newforms/fields.py:181
-#: newforms/fields.py:210
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Тази стойност трябва да е по-малка или равна на %s. "
-
-#: django/newforms/fields.py:153
-#: django/newforms/fields.py:182
-#: django/newforms/fields.py:211
-#: newforms/fields.py:153
-#: newforms/fields.py:182
-#: newforms/fields.py:211
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Тази стойност трябва да е по-голяма или равна на %s."
-
-#: django/newforms/fields.py:180
-#: django/newforms/fields.py:209
-#: newforms/fields.py:180
-#: newforms/fields.py:209
-msgid "Enter a number."
-msgstr "Въведечисло."
-
-#: django/newforms/fields.py:212
-#: newforms/fields.py:212
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Уверете си че не сте въвели повече от %s цифри."
-
-#: django/newforms/fields.py:213
-#: newforms/fields.py:213
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Уверете се, че няма повече от %s знака след запетаята."
-
-#: django/newforms/fields.py:214
-#: newforms/fields.py:214
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Уверете се, че няма повече от %s цифри преди десетичната запетая."
-
-#: django/newforms/fields.py:262
-#: django/newforms/fields.py:723
-#: newforms/fields.py:262
-#: newforms/fields.py:723
-msgid "Enter a valid date."
-msgstr "Въведете валидна дата. "
-
-#: django/newforms/fields.py:295
-#: django/newforms/fields.py:724
-#: newforms/fields.py:295
-#: newforms/fields.py:724
-msgid "Enter a valid time."
-msgstr "Въведете валиден час."
-
-#: django/newforms/fields.py:334
-#: newforms/fields.py:334
-msgid "Enter a valid date/time."
-msgstr "Въведете валидна дата / час. "
-
-#: django/newforms/fields.py:433
-#: newforms/fields.py:433
-msgid "No file was submitted."
-msgstr "Няма изпратен фаил."
-
-#: django/newforms/fields.py:434
-#: django/oldforms/__init__.py:689
-#: newforms/fields.py:434
-#: oldforms/__init__.py:689
-msgid "The submitted file is empty."
-msgstr "Каченият файл е празен. "
-
-#: django/newforms/fields.py:496
-#: newforms/fields.py:496
-msgid "Enter a valid URL."
-msgstr "Въведете валиден URL. "
-
-#: django/newforms/fields.py:497
-#: newforms/fields.py:497
-msgid "This URL appears to be a broken link."
-msgstr "Този URL май е счупен линк. "
-
-#: django/newforms/fields.py:559
-#: django/newforms/models.py:300
-#: newforms/fields.py:559
-#: newforms/models.py:300
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Направете валиден избор. Този не е един от възможните избори. "
-
-#: django/newforms/fields.py:598
-#: newforms/fields.py:598
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Направете валиден избор. %(value)s не е един от възможните избори."
-
-#: django/newforms/fields.py:599
-#: django/newforms/fields.py:661
-#: django/newforms/models.py:360
-#: newforms/fields.py:599
-#: newforms/fields.py:661
-#: newforms/models.py:360
-msgid "Enter a list of values."
-msgstr "Въведете списък от стойности"
-
-#: django/newforms/fields.py:752
-#: newforms/fields.py:752
-msgid "Enter a valid IPv4 address."
-msgstr "Въведете валиден IPv4 адрес."
-
-#: django/newforms/models.py:361
-#: newforms/models.py:361
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Направете валиден избор. %s не е един от възможните избори. "
-
-#: django/oldforms/__init__.py:409
-#: oldforms/__init__.py:409
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgstr "Въведеният текст не трябва да надвишава %s символа."
-
-#: django/oldforms/__init__.py:414
-#: oldforms/__init__.py:414
-msgid "Line breaks are not allowed here."
-msgstr "Тук не се допускат нови редове."
-
-#: django/oldforms/__init__.py:512
-#: django/oldforms/__init__.py:586
-#: django/oldforms/__init__.py:625
-#: oldforms/__init__.py:512
-#: oldforms/__init__.py:586
-#: oldforms/__init__.py:625
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Направете валиден избор; '%(data)s' не е сред %(choices)s."
-
-#: django/oldforms/__init__.py:745
-#: oldforms/__init__.py:745
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Въведете цяло число между -32768 и 32767."
-
-#: django/oldforms/__init__.py:755
-#: oldforms/__init__.py:755
-msgid "Enter a positive number."
-msgstr "Въведете положително число. "
-
-#: django/oldforms/__init__.py:765
-#: oldforms/__init__.py:765
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Въведете цяло число между 0 и 32767."
-
-#: django/template/defaultfilters.py:695
-#: template/defaultfilters.py:691
-msgid "yes,no,maybe"
-msgstr "да,не,може-би"
-
-#: django/template/defaultfilters.py:726
-#: template/defaultfilters.py:722
-#, python-format
-msgid "%(size)d byte"
-msgstr "%(size)d байт"
-
-#: django/template/defaultfilters.py:728
-#: template/defaultfilters.py:724
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f КБ"
-
-#: django/template/defaultfilters.py:730
-#: template/defaultfilters.py:726
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f МБ"
-
-#: django/template/defaultfilters.py:731
-#: template/defaultfilters.py:727
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f ГБ"
-
-#: django/utils/dateformat.py:41
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "p.m."
-
-#: django/utils/dateformat.py:42
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "a.m."
-
-#: django/utils/dateformat.py:47
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "PM"
-
-#: django/utils/dateformat.py:48
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "AM"
-
-#: django/utils/dateformat.py:97
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "полунощ"
-
-#: django/utils/dateformat.py:99
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "обяд"
-
-#: django/utils/dates.py:6
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "понеделник"
-
-#: django/utils/dates.py:6
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "вторник"
-
-#: django/utils/dates.py:6
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "сряда"
-
-#: django/utils/dates.py:6
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "четвъртък"
-
-#: django/utils/dates.py:6
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "петък"
-
-#: django/utils/dates.py:7
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "събота"
-
-#: django/utils/dates.py:7
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "неделя"
-
-#: django/utils/dates.py:10
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Пон"
-
-#: django/utils/dates.py:10
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Вто"
-
-#: django/utils/dates.py:10
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Сря"
-
-#: django/utils/dates.py:10
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Чет"
-
-#: django/utils/dates.py:10
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Пет"
-
-#: django/utils/dates.py:11
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Съб"
-
-#: django/utils/dates.py:11
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Нед"
-
-#: django/utils/dates.py:18
-#: utils/dates.py:18
-msgid "January"
-msgstr "Януари"
-
-#: django/utils/dates.py:18
-#: utils/dates.py:18
-msgid "February"
-msgstr "Февруари"
-
-#: django/utils/dates.py:18
-#: django/utils/dates.py:31
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "Март"
-
-#: django/utils/dates.py:18
-#: django/utils/dates.py:31
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "Април"
-
-#: django/utils/dates.py:18
-#: django/utils/dates.py:31
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "Май"
-
-#: django/utils/dates.py:18
-#: django/utils/dates.py:31
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "Юни"
-
-#: django/utils/dates.py:19
-#: django/utils/dates.py:31
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "Юли"
-
-#: django/utils/dates.py:19
-#: utils/dates.py:19
-msgid "August"
-msgstr "Август"
-
-#: django/utils/dates.py:19
-#: utils/dates.py:19
-msgid "September"
-msgstr "Септември"
-
-#: django/utils/dates.py:19
-#: utils/dates.py:19
-msgid "October"
-msgstr "Октомври"
-
-#: django/utils/dates.py:19
-#: utils/dates.py:19
-msgid "November"
-msgstr "Ноември"
-
-#: django/utils/dates.py:20
-#: utils/dates.py:20
-msgid "December"
-msgstr "Декември"
-
-#: django/utils/dates.py:23
-#: utils/dates.py:23
-msgid "jan"
-msgstr "яну"
-
-#: django/utils/dates.py:23
-#: utils/dates.py:23
-msgid "feb"
-msgstr "фев"
-
-#: django/utils/dates.py:23
-#: utils/dates.py:23
-msgid "mar"
-msgstr "мар"
-
-#: django/utils/dates.py:23
-#: utils/dates.py:23
-msgid "apr"
-msgstr "апр"
-
-#: django/utils/dates.py:23
-#: utils/dates.py:23
-msgid "may"
-msgstr "май"
-
-#: django/utils/dates.py:23
-#: utils/dates.py:23
-msgid "jun"
-msgstr "юни"
-
-#: django/utils/dates.py:24
-#: utils/dates.py:24
-msgid "jul"
-msgstr "юли"
-
-#: django/utils/dates.py:24
-#: utils/dates.py:24
-msgid "aug"
-msgstr "авг"
-
-#: django/utils/dates.py:24
-#: utils/dates.py:24
-msgid "sep"
-msgstr "сеп"
-
-#: django/utils/dates.py:24
-#: utils/dates.py:24
-msgid "oct"
-msgstr "окт"
-
-#: django/utils/dates.py:24
-#: utils/dates.py:24
-msgid "nov"
-msgstr "ное"
-
-#: django/utils/dates.py:24
-#: utils/dates.py:24
-msgid "dec"
-msgstr "дек"
-
-#: django/utils/dates.py:31
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Яну."
-
-#: django/utils/dates.py:31
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Фев."
-
-#: django/utils/dates.py:32
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Авг."
-
-#: django/utils/dates.py:32
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Септ."
-
-#: django/utils/dates.py:32
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Окт."
-
-#: django/utils/dates.py:32
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Ное."
-
-#: django/utils/dates.py:32
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Дек."
-
-#: django/utils/text.py:127
-#: utils/text.py:127
-msgid "or"
-msgstr "или"
-
-#: django/utils/timesince.py:21
-#: utils/timesince.py:21
-msgid "year"
-msgstr "година"
-
-#: django/utils/timesince.py:22
-#: utils/timesince.py:22
-msgid "month"
-msgstr "месец"
-
-#: django/utils/timesince.py:23
-#: utils/timesince.py:23
-msgid "week"
-msgstr "седмица"
-
-#: django/utils/timesince.py:24
-#: utils/timesince.py:24
-msgid "day"
-msgstr "ден"
-
-#: django/utils/timesince.py:25
-#: utils/timesince.py:25
-msgid "hour"
-msgstr "час"
-
-#: django/utils/timesince.py:26
-#: utils/timesince.py:26
-msgid "minute"
-msgstr "минута"
-
-#: django/utils/timesince.py:46
-#: utils/timesince.py:46
-msgid "minutes"
-msgstr "минути"
-
-#: django/utils/timesince.py:51
-#: utils/timesince.py:51
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: django/utils/timesince.py:57
-#: utils/timesince.py:57
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: django/utils/translation/trans_real.py:404
-#: utils/translation/trans_real.py:404
-msgid "DATE_FORMAT"
-msgstr "j N, Y"
-
-#: django/utils/translation/trans_real.py:405
-#: utils/translation/trans_real.py:405
-msgid "DATETIME_FORMAT"
-msgstr "j N, Y, P"
-
-#: django/utils/translation/trans_real.py:406
-#: utils/translation/trans_real.py:406
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: django/utils/translation/trans_real.py:422
-#: utils/translation/trans_real.py:422
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: django/utils/translation/trans_real.py:423
-#: utils/translation/trans_real.py:423
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: django/views/generic/create_update.py:43
-#: views/generic/create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Обектът %(verbose_name)s бе успешно създаден. "
-
-#: django/views/generic/create_update.py:117
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Обектът %(verbose_name)s бе успешно актуализиран."
-
-#: django/views/generic/create_update.py:184
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Обектът %(verbose_name)s бе затрит."
-
-#: tests/regressiontests/i18n/models.py:5
-msgid "Anything"
-msgstr "Нещо"
-
-#: tests/regressiontests/views/tests/i18n.py:26
-msgid "this is to be translated"
-msgstr "това трябва да се преведе"
-
-#~ msgid ""
-#~ "Enter a postcode. A space is required between the two postcode parts."
-#~ msgstr ""
-#~ "Въведете пощенски код. Между двете части на пощенския код трябва да има "
-#~ "разстояние. "
-
diff --git a/parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index dba4555..0000000
--- a/parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 9f5f197..0000000
--- a/parts/django/django/conf/locale/bg/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,106 +0,0 @@
-# translation of djangojs.po to Bulgarian
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2007-05-12 17:51+0300\n"
-"Last-Translator: Jordan Dimov <s3x3y1@gmail.com>\n"
-"Language-Team: Bulgarian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Налични %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Избери всички"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Добави"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Премахни"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Избрахме %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Направете своя избор и щракнете "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Изчисти всички"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "Януари Февруари Март Април Май Юни Юли Август Септември Октомври Ноември Декември"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Неделя Понеделник Вторник Сряда Четвъртък Петък Събота"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "Н П В С Ч П С"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "Сега"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "Часовник"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "Избери време"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "Полунощ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "По обяд"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "Отказ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "Днес"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "Календар"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "Вчера"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "Утре"
-
diff --git a/parts/django/django/conf/locale/bg/__init__.py b/parts/django/django/conf/locale/bg/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/bg/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/bg/formats.py b/parts/django/django/conf/locale/bg/formats.py
deleted file mode 100644
index ea5f300..0000000
--- a/parts/django/django/conf/locale/bg/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = u' ' # Non-breaking space
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/bn/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/bn/LC_MESSAGES/django.mo
deleted file mode 100644
index 770a846..0000000
--- a/parts/django/django/conf/locale/bn/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/bn/LC_MESSAGES/django.po b/parts/django/django/conf/locale/bn/LC_MESSAGES/django.po
deleted file mode 100644
index dfdaa35..0000000
--- a/parts/django/django/conf/locale/bn/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4041 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-02 22:36-0700\n"
-"PO-Revision-Date: 2009-07-19 22:49+0000\n"
-"Last-Translator: Nasimul Haque <nasim.haque@gmail.com>\n"
-"Language-Team: Nasimul Haque <nasim.haque@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "আরবী"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "বাংলা"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "বুলগেরিয়ান"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "ক্যাটালান"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "চেক"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "ওয়েল্স"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "ড্যানিশ"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "জার্মান"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "গ্রিক"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "ইংলিশ"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "স্প্যানিশ"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "এস্তোনিয়ান"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "আর্জেন্টিনিয়ান স্প্যানিশ"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "বাস্ক"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "ফারসি"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "ফিনিশ"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "ফ্রেঞ্চ"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "আইরিশ"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "গ্যালিসিয়ান"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "হাঙ্গেরিয়ান"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "হিব্রু"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr "ক্রোয়েশিয়ান"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "আইসল্যান্ডিক"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "ইটালিয়ান"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "জাপানিজ"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "জর্জিয়ান"
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "কোরিয়ান"
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "খমার"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "কান্নাড়া"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "লাটভিয়ান"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "লিথুয়ানিয়ান"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "ম্যাসাডোনিয়ান"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "ডাচ"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "নরওয়েজিয়ান"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "পোলিশ"
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "পর্তুগীজ"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "ব্রাজিলিয়ান পর্তুগীজ"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "রোমানিয়ান"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "রাশান"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "স্লোভাক"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "স্লোভেনিয়ান"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "সার্বিয়ান"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "সুইডিশ"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "তামিল"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "তেলেগু"
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "তুর্কি"
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "ইউক্রেনিয়ান"
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "সরলীকৃত চাইনীজ"
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "প্রচলিত চাইনীজ"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr "<h3>%s অনুযায়ী:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "সকল"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "যে কোন তারিখ"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "‍আজ"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "শেষ ৭ দিন"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "এ মাসে"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "এ বছরে"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "Yes"
-msgstr "হ্যাঁ"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "No"
-msgstr "না"
-
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:391
-msgid "Unknown"
-msgstr "অজানা"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "কার্য সময়"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "অবজেক্ট আইডি"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "অবজেক্ট উপস্থাপক"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "কার্যচিহ্ন"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "বার্তা পরিবর্তন করুন"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "লগ এন্ট্রি"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "লগ এন্ট্রিসমূহ"
-
-#: contrib/admin/options.py:60
-#: contrib/admin/options.py:121
-msgid "None"
-msgstr "কিছু না"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "%s পরিবর্তিত হয়েছে।"
-
-#: contrib/admin/options.py:338
-#: contrib/admin/options.py:348
-#: forms/models.py:275
-msgid "and"
-msgstr "এবং"
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" যুক্ত হয়েছে।"
-
-#: contrib/admin/options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" এর জন্য %(list)s পরিবর্তিত হয়েছে।"
-
-#: contrib/admin/options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" মোছা হয়েছে।"
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "কোন ফিল্ড পরিবর্তন হয়নি।"
-
-#: contrib/admin/options.py:417
-#: contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" সফলতার সাথে যুক্ত হয়েছে।"
-
-#: contrib/admin/options.py:421
-#: contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "আপনি নিচে থেকে এটি পুনরায় সম্পাদন করতে পারেন।"
-
-#: contrib/admin/options.py:431
-#: contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "আপনি নিচে থেকে আরেকটি %s যোগ করতে পারেন।"
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" সফলতার সাথে পরিবর্তিত হয়েছে।"
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" সফলতার সাথে যুক্ত হয়েছে। আপনি নিচে থেকে এটি পুনরায় সম্পাদন করতে পারেন।"
-
-#: contrib/admin/options.py:536
-#, python-format
-msgid "Add %s"
-msgstr "%s যোগ করুন"
-
-#: contrib/admin/options.py:614
-#, python-format
-msgid "Change %s"
-msgstr "%s পরিবর্তন করুন"
-
-#: contrib/admin/options.py:646
-msgid "Database error"
-msgstr "ডাটাবেস সমস্যা"
-
-#: contrib/admin/options.py:696
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" সফলতার সাথে মুছে ফেলা হয়েছে।"
-
-#: contrib/admin/options.py:703
-msgid "Are you sure?"
-msgstr "আপনি কি নিশ্চিত?"
-
-#: contrib/admin/options.py:732
-#, python-format
-msgid "Change history: %s"
-msgstr "ইতিহাস পরিবর্তনঃ %s"
-
-#: contrib/admin/sites.py:16
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "অনুগ্রহপূর্বক সঠিক সদস্যনাম ও পাসওয়ার্ড প্রবেশ করান।"
-
-#: contrib/admin/sites.py:227
-#: contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "অনুগ্রহ করে পুনরায় প্রবেশ করুন, কেননা আপনার সেশনের মেয়াদ শেষ।"
-
-#: contrib/admin/sites.py:234
-#: contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr "আপনার ব্রাউজার কুকি গ্রহণ করছে না। অনুগ্রহ করে কুকি কার্যকর করুন।"
-
-#: contrib/admin/sites.py:250
-#: contrib/admin/sites.py:256
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "সদস্যনামে @ থাকতে পারবে না।"
-
-#: contrib/admin/sites.py:253
-#: contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "আপনার ইমেইল ঠিকানা, আপনার সদস্যনাম নয়। ’%s' চেষ্টা করতে পারেন।"
-
-#: contrib/admin/sites.py:313
-msgid "Site administration"
-msgstr "সাইট প্রশাসন"
-
-#: contrib/admin/sites.py:326
-#: contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "প্রবেশ করুন"
-
-#: contrib/admin/sites.py:373
-#, python-format
-msgid "%s administration"
-msgstr "%s প্রশাসন"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "%(name)s: %(obj)s -এ এক একাধিক %(fieldname)s রয়েছে"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "%(name)s -এ এক একাধিক %(fieldname)s রয়েছেঃ"
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "তারিখঃ"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "সময়ঃ"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "চলতিঃ"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "পরিবর্তিতঃ"
-
-#: contrib/admin/widgets.py:121
-msgid "Lookup"
-msgstr "খুঁজুন"
-
-#: contrib/admin/widgets.py:228
-msgid "Add Another"
-msgstr "আরেকটি যোগ করুন"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "পৃষ্ঠা পাওয়া যায়নি"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "দুঃখিত, অনুরোধকৃত পাতাটি পাওয়া যায়নি।"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "নীড়পাতা"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "সার্ভার সমস্যা"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "সার্ভার সমস্যা (৫০০)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "সার্ভার সমস্যা <em>(৫০০)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr "একটি সমস্যা দেখা গিয়েছে। সাইট প্রশাসনকে ইমেইলের মাধ্যমে অবহিত করা হয়েছে। খুব শীঘ্রই সমস্যার সমাধান হবে আশা করা যাচ্ছে। অনুগ্রহপূর্বক অপেক্ষা করুন।"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "স্বাগতম,"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "সহায়িকা"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "পাসওয়ার্ড বদলান"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "প্রস্থান"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "জ্যাঙ্গো সাইট প্রশাসক"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "জ্যাঙ্গো প্রশাসন"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "যোগ করুন"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "ইতিহাস"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "সাইটে দেখুন"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "অনুগ্রহ করে নিচের ভুলটি সংশোধন করুন।"
-msgstr[1] "অনুগ্রহ করে নিচের ভুলগুলো সংশোধন করুন।"
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s যোগ করুন"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "ফিল্টার"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:246
-msgid "Delete"
-msgstr "মুছুন"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr "%(object_name)s '%(escaped_object)s' মুছে ফেললে এর সম্পর্কিত অবজেক্টগুলোও মুছে যাবে, কিন্তু আপনার নিম্নবর্ণিত অবজেক্টগুলো মোছার অধিকার নেইঃ"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr "আপনি কি %(object_name)s \"%(escaped_object)s\" মুছে ফেলার ব্যাপারে নিশ্চিত? নিম্নে বর্ণিত সকল আইটেম মুছে যাবেঃ"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "হ্যা়ঁ, আমি নিশ্চিত"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s অনুযায়ী "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s এ্যপ্লিকেশনে অবস্থিত মডেলসমূহ"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "পরিবর্তন"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "কোন কিছু পরিবর্তনে আপনার অধিকার নেই।"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "সাম্প্রতিক কার্যাবলী"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "আমার কার্যাবলী"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "কিছুই পাওয়া যায়নি"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr "আপনার ডাটাবেস ইনস্টলে সমস্যা হয়েছে। নিশ্চিত করুন যে, ডাটাবেস টেবিলগুলো সঠিকভাবে তৈরী হয়েছে, এবং যথাযথ সদস্যের ডাটাবেস পড়ার অধিকার রয়েছে।"
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "সদস্যনামঃ"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "পাসওয়ার্ডঃ"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "তারিখ/সময়"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "সদস্য"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "কার্য"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr "এই অবজেক্টের কোন ইতিহাস নেই। সম্ভবত এটি প্রশাসন সাইট দিয়ে তৈরী করা হয়নি।"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "সব দেখান"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "যান"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "একটি ফলাফল"
-msgstr[1] "%(counter)s ফলাফল"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "মোট %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "সংরক্ষণ করুন"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "নতুনভাবে সংরক্ষণ করুন"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "সংরক্ষণ করুন এবং আরেকটি যোগ করুন"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "সংরক্ষণ করুন এবং সম্পাদনা চালিয়ে যান"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "প্রথমে একটি সদস্যনাম ও পাসওয়ার্ড প্রবেশ করান। তারপরে আপনি ‍আরও সদস্য-অপশন যুক্ত করতে পারবেন।"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:47
-#: contrib/auth/forms.py:59
-msgid "Username"
-msgstr "সদস্যনাম"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:60
-#: contrib/auth/forms.py:184
-msgid "Password"
-msgstr "পাসওয়ার্ড"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "পাসওয়ার্ড (পুনরায়)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "উপরের পাসওয়ার্ডটি পুনরায় প্রবেশ করান, যাচাইয়ের জন্য।"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "<strong>%(username)s</strong> সদস্যের জন্য নতুন পাসওয়ার্ড দিন।"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "মুছে ফেলুন?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "ওয়েবসাইটে কিছু সময় কাটানোর জন্য আপনাকে আন্তরিক ধন্যবাদ।"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "পুনরায় প্রবেশ করুন"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "পাসওয়ার্ড বদলান"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "পাসওয়ার্ড বদল সফল হয়েছে"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "আপনার পাসওয়ার্ড বদলানো হয়েছে।"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr "অনুগ্রহ করে আপনার পুরনো পাসওয়ার্ড প্রবেশ করান, নিরাপত্তার কাতিরে, এবং পরপর দু’বার নতুন পাসওয়ার্ড প্রবেশ করান, যাচাই করার জন্য।"
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "পুরনো পাসওয়ার্ডঃ"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "নতুন পাসওয়ার্ডঃ"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "পাসওয়ার্ড নিশ্চিতকরণঃ"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "আমার পাসওয়ার্ড পরিবর্তন করুন"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "পাসওয়ার্ড রিসেট করুন"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "পাসওয়ার্ড রিসেট সম্পন্ন হয়েছে"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "আপনার পাসওয়ার্ড দেয়া হয়েছে। আপনি এখন প্রবেশ (লগইন) করতে পারেন।"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "পাসওয়ার্ড রিসেট নিশ্চিত করুন"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "নতুন পাসওয়ার্ড দিন"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "অনুগ্রহ করে আপনার পাসওয়ার্ড দুবার প্রবেশ করান, যাতে আমরা যাচাই করতে পারি আপনি সঠিকভাবে টাইপ করেছেন।"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "পাসওয়ার্ড রিসেট সফল হয়নি"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr "পাসওয়ার্ড রিসেট লিঙ্কটি ঠিক নয়, হয়তো এটা ইতোমধ্যে ব্যবহৃত হয়েছে। পাসওয়ার্ড রিসেটের জন্য অনুগ্রহ করে নতুনভাবে আবেদন করুন।"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "পাসওয়ার্ড রিসেট সফল হয়েছে"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr "আপনার পাসওয়ার্ড ঠিক করার নিয়ম আপনাকে ইমেইল করা হয়েছে। শীঘ্রই আপনি ইমেইল পাবেন।"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "আপনি পাসওয়ার্ড রিসেট করতে চেয়েছেন বিধায় এই ইমেইল পাঠানো হয়েছে"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "%(site_name)s -এ আপনার একাউন্টের জন্য"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "অনুগ্রহ করে নিচের পাতাটিতে যান এবং নতুন পাসওয়ার্ড বাছাই করুনঃ"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "আপনার সদস্যনাম, যদি ভুলে গিয়ে থাকেনঃ"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "আমাদের সাইট ব্যবহারের জন্য ধন্যবাদ!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s দল"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr "পাসওয়ার্ড ভুলে গেছেন? আপনার ইমেইল ঠিকানা দিন, আমরা নতুন পাসওয়ার্ড দেয়ার নিয়ম আপনাকে মেইল করে দেবো।"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "ইমেইল ঠিকানঃ"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "আমার পাসওয়ার্ড রিসেট করুন"
-
-#: contrib/admin/templatetags/admin_list.py:288
-msgid "All dates"
-msgstr "সকল তারিখ"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "%s বাছাই করুন"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "%s পরিবর্তনের জন্য বাছাই করুন"
-
-#: contrib/admin/views/template.py:36
-#: contrib/sites/models.py:38
-msgid "site"
-msgstr "সাইট"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "টেমপ্লেট"
-
-#: contrib/admindocs/views.py:57
-#: contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "ট্যাগঃ"
-
-#: contrib/admindocs/views.py:90
-#: contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "ফিল্টারঃ"
-
-#: contrib/admindocs/views.py:154
-#: contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "ভিউঃ"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "%r এ্যপটি পাওয়া যায়নি"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "%(app_label)r এ্যপে %(model_name)r মডেলটি পাওয়া যায়নি"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "`%(app_label)s.%(data_type)s` সম্পর্কিত অবজেক্ট"
-
-#: contrib/admindocs/views.py:205
-#: contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241
-#: contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "মডেলঃ"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "`%(app_label)s.%(object_name)s` সম্পর্কিত অবজেক্ট সমূহ"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "সকল %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "%s সংখ্যা"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s অবজেক্টে ফিল্ডগুলো"
-
-#: contrib/admindocs/views.py:314
-#: contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327
-#: contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "ইন্টিজার"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "বুলিয়ান (হয় True অথবা False)"
-
-#: contrib/admindocs/views.py:316
-#: contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "স্ট্রিং (সর্বোচ্চ %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "কমা দিয়ে আলাদা করা ইন্টিজার"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "তারিখ (সময় বাদে)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "তারিখ (সময় সহ)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "দশমিক সংখ্যা"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "ইমেইল ঠিকানা"
-
-#: contrib/admindocs/views.py:322
-#: contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "ফাইল পথ"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "ফ্লোটিং পয়েন্ট সংখ্যা"
-
-#: contrib/admindocs/views.py:328
-#: contrib/comments/models.py:58
-msgid "IP address"
-msgstr "আইপি ঠিকানা"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "বুলিয়ান (হয় True, False অথবা None)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "পৈতৃক মডলের সাথে সম্পর্ক"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "ফোন নাম্বার"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "টেক্সট"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "সময়"
-
-#: contrib/admindocs/views.py:339
-#: contrib/comments/forms.py:22
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "ইউআরএল (URL)"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "ইউ, এস, রাজ্য (দুটো আপারকেস অক্ষর)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "XML টেক্সট"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ইউআরএল -এর মত নয়"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "বুকমার্কলেট"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "সহায়িকা বুকমার্কলেট"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr "\n"
-"<p class=\"help\">বুকমার্ক ইনস্টলের জন্য লিঙ্কটি আপনার বুকমার্ক টুলবারে টেনে নিয়ে যান, অথবা রাইট-ক্লিক করে বুকমার্কে যোগ করুন। এখন আপনি\n"
-"সাইটের যেকোন পাতা থেকে বুকমার্কলেটটি ব্যবহার করতে পারবেন। লক্ষ্য করুন যে, বেশ কিছু বুকমার্কলেট দেখার জন্য \"internal\" কম্পিউটার থেকে\nদেখতে হবে (আপনার প্রশাসনের কাছ থেকে জানুন যে আপনার কম্পিউটার \"internal\" কিনা)।</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "এই পাতার সহায়িকা"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "যেকোন পাতা থেকে ভিউ সহায়িকাতে নিয়ে যান।"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "অবজেক্ট আইডি দেখান"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "কনটেন্ট-টাইপ এবং একক আইডি দেখায়, যা কিনা একটি নির্দিষ্ট অবজেক্টকে বোঝায়।"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "এই অবজেক্টটি সম্পাদন করুন (বর্তমান উইন্ডো)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "প্রশাসন পাতায় নিয়ে যান, যা কিনা একটি নির্দিষ্ট পাতা অবজেক্টকে বোঝায়।"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "এই অবজেক্টটি সম্পাদন করুন (নতুন উইন্ডো)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "উপরের মতই, কিন্তু নতুন উইন্ডোতে খুলুন।"
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "ব্যক্তিগত তথ্য"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "অনুমোদন"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "গুরুত্বপূর্ণ তারিখ"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "দল"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "সদস্য যোগ করুন"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "পাসওয়ার্ড বদল সফল হয়েছে।"
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "পাসওয়ার্ড বদলানঃ %s"
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr "আবশ্যক। সর্বোচ্চ ৩০ অক্ষর। শুধুমাত্র আলফানিউম্যারিক অক্ষর প্রযোজ্য (ইংরেজী বর্ণ, অঙ্ক এবং আন্ডারস্কোর)।"
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "এটি শুধুমাত্র ইংরেজী বর্ণ, অঙ্ক এবং আন্ডারস্কোর ধারণ করতে পারে।"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "পাসওয়ার্ড নিশ্চিত করুন"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "এই সদস্যনামে একজন সদস্য আছেন।"
-
-#: contrib/auth/forms.py:36
-#: contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "পাসওয়ার্ড দুটো মেলেনি।"
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "এই একাউন্টটি কার্যকর নয়।"
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "আপনার ব্রাউজার কুকি গ্রহণে সক্ষম নয়। লগইন করার জন্য কুকি আবশ্যক।"
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "ইমেইল"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "এই ইমেইল ঠিকানা কোন সদস্য একাউন্টের সাথে সম্পর্কিত নয়। আপনি কি নিবন্ধন করেছেন?"
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "পাসওয়ার্ড রিসেট হয়েছে %s"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "নতুন পাসওয়ার্ড"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "নতুন পাসওয়ার্ড নিশ্চিতকরণ"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "পুরনো পাসওয়ার্ড"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "আপনার পুরনো পাসওয়ার্ড ঠিকভাবে প্রবেশ করানো হয়নি। অনুগ্রহপূর্বক সঠিক পাসওয়ার্ড দিন।"
-
-#: contrib/auth/models.py:72
-#: contrib/auth/models.py:95
-msgid "name"
-msgstr "নাম"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "কোডনাম"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "অনুমোদন"
-
-#: contrib/auth/models.py:78
-#: contrib/auth/models.py:96
-msgid "permissions"
-msgstr "অনুমোদন"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "দল"
-
-#: contrib/auth/models.py:100
-#: contrib/auth/models.py:146
-msgid "groups"
-msgstr "দল সমূহ"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "সদস্যনাম"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "প্রথম নাম"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "শেষ নাম"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "ইমেইল ঠিকানা"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "পাসওয়ার্ড"
-
-#: contrib/auth/models.py:140
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr "'[algo]$[salt]$[hexdigest]' ব্যবহার করুন অথবা <a href=\"password/\">পাসওয়ার্ড বদল করুন</a>।"
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "স্টাফ মর্যাদা"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr "সদস্যকে প্রশাসন সাইটে প্রবেশাধিকার প্রদান।"
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "সচল"
-
-#: contrib/auth/models.py:142
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr "সদস্যকে সচল হিসেবে নির্ধারণ করুন। একাউন্ট মুছে ফেলার বদলে এটি ব্যবহার করুন।"
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr "সুপারইউজার মর্যাদা"
-
-#: contrib/auth/models.py:143
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "সদস্যকে সকল ধরণের অনুমতি প্রদান করে।"
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "সর্বশেষ প্রবেশ"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "যোগদানের তারিখ"
-
-#: contrib/auth/models.py:147
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "এই সদস্যকে দেয়া সকল অনুমোদনের পাশাপাশি অন্যান্য সকল দলের, যেখানে এই সদস্য রয়েছেন, অনুমতিও তিনি পাবেন।"
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "সদস্যের অনুমোদন সমূহ"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "সদস্য"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "সদস্যগণ"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "বার্তা"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "প্রস্থান সম্পন্ন"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "বৈধ ইমেইল ঠিকানা দিন।"
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "কনটেন্ট"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "মেটাডাটা"
-
-#: contrib/comments/forms.py:20
-msgid "Name"
-msgstr "নাম"
-
-#: contrib/comments/forms.py:21
-msgid "Email address"
-msgstr "ইমেইল ঠিকানা"
-
-#: contrib/comments/forms.py:23
-msgid "Comment"
-msgstr "মন্তব্য"
-
-#: contrib/comments/forms.py:26
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "আপনি যদি এখানে কোনকিছু লিখেন তবে আপনার মন্তব্যকে স্প্যাম হিসেবে ধরা হবে"
-
-#: contrib/comments/forms.py:126
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "সাবধান! %s শব্দটি এখানে প্রযোজ্য নয়।"
-msgstr[1] "সাবধান! %s শব্দগুলো এখানে প্রযোজ্য নয়।"
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "অবজেক্ট আইডি"
-
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "সদস্যের নাম"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "সদস্যের ইমেইল ঠিকানা"
-
-#: contrib/comments/models.py:52
-msgid "user's URL"
-msgstr "সদস্যের ইউআরএল (URL)"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "মন্তব্য"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "দাখিলের তারিখ/সময়"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "সার্বজনীন"
-
-#: contrib/comments/models.py:60
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "সাইট থেকে মন্তব্য মুছে ফেলতে এখানে আনচেক করুন।"
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "মোছা হয়েছে"
-
-#: contrib/comments/models.py:63
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr "এই বাক্সে চেক করুন যদি মন্তব্যটি যথাযথ না হয়। মন্তব্যের পরিবর্তে \"মন্তব্যদি মুছে ফেলা হয়েছে\" দেখানো হবে।"
-
-#: contrib/comments/models.py:115
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "এই মন্তব্যটি একজন নিবন্ধনকৃত সদস্য করেছেন, সেজন্যই নামটি শুধুমাত্র পড়ার যোগ্য।"
-
-#: contrib/comments/models.py:124
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr "এই মন্তব্যটি একজন নিবন্ধনকৃত সদস্য করেছেন, সেজন্যই ইমেইল ঠিকানা শুধুমাত্র পড়ার যোগ্য।"
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr "লিখেছেন %(user)s - %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "পাইথন মডেল ক্লাসের নাম"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "কনটেন্ট টাইপ"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "কনটেন্ট টাইপ সমূহ"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "উদাহরণঃ '/about/contact/'। শুরু এবং শেষের স্ল্যাশগুলো আবশ্যক।"
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "এটি শুধুমাত্র ইংরেজী বর্ণ, সংখ্যা, আন্ডারস্কোর, ড্যাশ অথবা স্ল্যাশ ব্যবহার সম্ভব।"
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "এডভান্সড অপশন"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "শিরোনাম"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "কনটেন্ট"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "মন্তব্য প্রদান সচল করুন"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "টেমপ্লেট নাম"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr "উদাহরণঃ ’flatpage/contact_page.html'। এটি যদি খালি থাকে, তবে সিস্টেম ’flatpage/default.html' ব্যবহার করবে।"
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "নিবন্ধন আবশ্যক"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "এটি চেক করা হলে, শুধুমাত্র লগইন করা সদস্যরা পাতাটি দেখতে সমর্থ হবেন।"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "ফ্লাট পাতা"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "ফ্লাট পাতা সমূহ"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr "আমরা দুঃখিত, আপনার ফর্মের মেয়াদ শেষ। অনুগ্রহপূর্বক এই পাতা থেকে ফর্ম পূরণ করতে থাকুন।"
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "কোন জ্যামিতিক মান দেয়া হয়নি।"
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "জ্যামিতিক মানটি বৈধ নয়।"
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "জ্যামিতিক নমুনাটি বৈধ নয়।"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "তম"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "ম"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "য়"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "য়"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f মিলিয়ন"
-msgstr[1] "%(value).1f মিলিয়ন"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f বিলিয়ন"
-msgstr[1] "%(value).1f বিলিয়ন"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f ট্রিলিয়ন"
-msgstr[1] "%(value).1f ট্রিলিয়ন"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "এক"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "দুই"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "তিন"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "চার"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "পাঁচ"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "ছয়"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "সাত"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "আট"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "নয়"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "আজ"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "আগামীকাল"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "গতকাল"
-
-#, fuzzy
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr ""
-
-#, fuzzy
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "রিডাইরেক্ট করা হবে"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "এর মান অবশ্যই এবসল্যুট পথ, ডোমেইন নাম বাদ দিয়ে, হতে হবে, উদাহরণঃ '/events/search/'।"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "রিডাইরেক্ট করুন"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "এর মান এবসল্যুট পথ (উপরের মত) অথবা পুরো URL পাথ ('http://' সহ) হতে পারে।"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "রিডাইরেক্ট"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "রিডাইরেক্ট"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "সেশন কি"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "সেশন ডাটা"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "মেয়াদ শেষের তারিখ"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "সেশন"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "সেশনসমূহ"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "ডোমেইন নাম"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "ডিসপ্লে নাম"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "সাইটসমূহ"
-
-#: db/models/fields/__init__.py:348
-#: db/models/fields/__init__.py:683
-msgid "This value must be an integer."
-msgstr "এর মান অবশ্যই ইন্টিজার হতে হবে।"
-
-#: db/models/fields/__init__.py:379
-msgid "This value must be either True or False."
-msgstr "এর মান অবশ্যই True অথবা False হতে হবে।"
-
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "এর মান null হতে পারবে না।"
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "শুধুমাত্র কমা দিয়ে সংখ্যা দিন।"
-
-#: db/models/fields/__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "একটি বৈধ তারিখ দিন (ফরম্যাট YYYY-MM-DD)।"
-
-#: db/models/fields/__init__.py:468
-#, python-format
-msgid "Invalid date: %s"
-msgstr "অবৈধ তারিখঃ %s"
-
-#: db/models/fields/__init__.py:532
-#: db/models/fields/__init__.py:550
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "বৈধ তারিখ/সময় প্রবেশ করান (ফরম্যাট YYYY-MM-DD HH:MM[:ss[.uuuuuu]])।"
-
-#: db/models/fields/__init__.py:586
-msgid "This value must be a decimal number."
-msgstr "এর মান অবশ্যই ডেসিমাল সংখ্যা হতে হবে।"
-
-#: db/models/fields/__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr "এর মান অবশ্যই True, False অথবা None হতে হবে।"
-
-#: db/models/fields/__init__.py:817
-#: db/models/fields/__init__.py:831
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "বৈধ সময় প্রবেশ করান (ফরম্যাট HH:MM[:ss[:uuuuuu]])।"
-
-#: db/models/fields/related.py:761
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "একাধিক বাছাই করতে \"কন্ট্রোল\", অথবা ম্যাকে \"কমান্ড\", চেপে ধরুন।"
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "অনুগ্রহ করে বৈধ %(self)s ID দিন। %(value)r বৈধ নয়।"
-msgstr[1] "অনুগ্রহ করে বৈধ %(self)s ID দিন। %(value)r বৈধ নয়।"
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "এটি আবশ্যক।"
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "একটি বৈধ মান দিন।"
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "নিশ্চিত করুন যে এটি সর্বোচ্চ %(max)d সংখ্যক বর্ণ আছে (এর আছে %(length)d)।"
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "নিশ্চিত করুন যে এটি কমপক্ষে %(min)d সংখ্যক বর্ণ আছে (এর আছে %(length)d)।"
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "একটি পূর্ণসংখ্যা দিন"
-
-#: forms/fields.py:167
-#: forms/fields.py:196
-#: forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "নিশ্চিত করুন যে, সংখ্যাটি %s -এর কম অথবা সমান।"
-
-#: forms/fields.py:168
-#: forms/fields.py:197
-#: forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "নিশ্চিত করুন যে, সংখ্যাটি %s -এর বেশি অথবা সমান।"
-
-#: forms/fields.py:195
-#: forms/fields.py:224
-msgid "Enter a number."
-msgstr "একটি সংখ্যা প্রবেশ করান।"
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "নিশ্চিত করুন যে, এখানে %s সংখ্যক দশমিক অঙ্ক রয়েছে।"
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "নিশ্চিত করুন যে, এখানে %s -এর বেশি দশমিক সংখ্যা নেই।"
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "নিশ্চিত করুন যে, এখানে %s -এর বেশি দশমিক সংখ্যা নেই।"
-
-#: forms/fields.py:287
-#: forms/fields.py:848
-msgid "Enter a valid date."
-msgstr "বৈধ তারিখ দিন।"
-
-#: forms/fields.py:321
-#: forms/fields.py:849
-msgid "Enter a valid time."
-msgstr "বৈধ সময় দিন।"
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "বৈধ ডারিখ/সময় দিন।"
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "কোন ফাইল দেয়া হয়নি। ফর্মের এনকোডিং ঠিক আছে কিনা দেখুন।"
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "কোন ফাইল দেয়া হয়নি।"
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "ফাইলটি খালি।"
-
-#: forms/fields.py:477
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "সঠিক ছবি আপলোড করুন। যে ফাইলটি আপলোড করা হয়েছে তা হয় ছবি নয় অথবা নষ্ট হয়ে যাওয়া ছবি।"
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "বৈধ URL দিন"
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "এই URL টি সঠিক নয়।"
-
-#: forms/fields.py:618
-#: forms/fields.py:696
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "%(value)s বৈধ নয়। অনুগ্রহ করে আরেকটি সিলেক্ট করুন।"
-
-#: forms/fields.py:697
-#: forms/fields.py:758
-#: forms/models.py:654
-msgid "Enter a list of values."
-msgstr "কয়েকটি মানের তালিকা দিন।"
-
-#: forms/fields.py:877
-msgid "Enter a valid IPv4 address."
-msgstr "একটি বৈধ IPv4 ঠিকানা দিন।"
-
-#: forms/fields.py:887
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "বৈধ ’slug' প্রবেশ করান যাতে শুধুমাত্র ইংরেজী বর্ণ, অঙ্ক, আন্ডারস্কোর অথবা হাইফেন রয়েছে।"
-
-#: forms/formsets.py:242
-#: forms/formsets.py:244
-msgid "Order"
-msgstr "ক্রম"
-
-#: forms/models.py:268
-#: forms/models.py:277
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(field_label)s সহ %(model_name)s আরেকটি রয়েছে।"
-
-#: forms/models.py:584
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "এটি বৈধ নয়। অনুগ্রহ করে আরেকটি সিলেক্ট করুন।"
-
-#: forms/models.py:655
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "%s বৈধ নয়। অনুগ্রহ করে আরেকটি সিলেক্ট করুন।"
-
-#: template/defaultfilters.py:706
-msgid "yes,no,maybe"
-msgstr "হ্যাঁ,না,হয়তো"
-
-#: template/defaultfilters.py:737
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d বাইট"
-msgstr[1] "%(size)d বাইট"
-
-#: template/defaultfilters.py:739
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f কেবি"
-
-#: template/defaultfilters.py:741
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f এমবি"
-
-#: template/defaultfilters.py:742
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f জিবি"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "অপরাহ্ন"
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "পূর্বাহ্ন"
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "অপরাহ্ন"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "পূর্বাহ্ন"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "মধ্যরাত"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "দুপুর"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "সোমবার"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "মঙ্গলবার"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "বুধবার"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "বৃহঃ"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "শুক্রবার"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "শনিবার"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "রবিবার"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "সোম"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "মঙ্গল"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "বুধ"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "বৃহঃ"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "শুক্র"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "শনি"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "রবি"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "জানুয়ারি"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "ফেব্রুয়ারি"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "মার্চ"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "এপ্রিল"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "মে"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "জুন"
-
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "জুলাই"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "আগস্ট"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "সেপ্টেম্বর"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "অক্টোবর"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "নভেম্বর"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "ডিসেম্বর"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "জান."
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "ফেব."
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "মার্চ"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "এপ্রি."
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "মে"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "জুন"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "জুল."
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "আগ."
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "সেপ্টে."
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "অক্টো."
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "নভে."
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "ডিসে."
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "জান."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "ফেব."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "আগ."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "সেপ্টে."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "অক্টো."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "নভে."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "ডিসে."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "অথবা"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "বছর"
-msgstr[1] "বছর"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "মাস"
-msgstr[1] "মাস"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "সপ্তাহ"
-msgstr[1] "সপ্তাহ"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "দিন"
-msgstr[1] "দিন"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ঘন্টা"
-msgstr[1] "ঘন্টা"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "মিনিট"
-msgstr[1] "মিনিট"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "মিনিট"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s তৈরী সফল হয়েছে।"
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s হালনাগাদ সফল হয়েছে।"
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s মুছে ফেলা হয়েছে।"
diff --git a/parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index acb90fb..0000000
--- a/parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.po
deleted file mode 100644
index eefa948..0000000
--- a/parts/django/django/conf/locale/bn/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,114 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-02 22:36-0700\n"
-"PO-Revision-Date: 2009-07-19 22:49+0000\n"
-"Last-Translator: Nasimul Haque <nasim.haque@gmail.com>\n"
-"Language-Team: Nasimul Haque <nasim.haque@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s বিদ্যমান"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "সব বাছাই করুন"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "যোগ করুন"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "মুছে ফেলুন"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s বাছাই করা হয়েছে"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "আপনার পছন্দ বাছাই এবং ক্লিক করুন"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "সব পরিষ্কার করুন"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "জানুয়ারি ফেব্রুয়ারি মার্চ এপ্রিল মে জুন জুলাই অাগস্ট সেপ্টেম্বর অক্টোবর নভেম্বর ডিসেম্বর"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "র স ম ব ব শ শ"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "রবিবার সোমবার মঙ্গলবার বুধবার বৃহস্পতিবার শুক্রবার শনিবার"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "দেখান"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "লুকান"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "এখন"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "ঘড়ি"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "সময় নির্বাচন করুন"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "মধ্যরাত"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "৬ পূর্বাহ্ন"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "দুপুর"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "বাতিল"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "আজ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "দিনপঞ্জিকা"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "গতকাল"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "আগামীকাল"
diff --git a/parts/django/django/conf/locale/bn/__init__.py b/parts/django/django/conf/locale/bn/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/bn/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/bn/formats.py b/parts/django/django/conf/locale/bn/formats.py
deleted file mode 100644
index 46e5da9..0000000
--- a/parts/django/django/conf/locale/bn/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F, Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M, Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/bs/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/bs/LC_MESSAGES/django.mo
deleted file mode 100644
index 8ca7255..0000000
--- a/parts/django/django/conf/locale/bs/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/bs/LC_MESSAGES/django.po b/parts/django/django/conf/locale/bs/LC_MESSAGES/django.po
deleted file mode 100644
index 31b68e6..0000000
--- a/parts/django/django/conf/locale/bs/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5183 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-28 13:48+0200\n"
-"PO-Revision-Date: 2010-04-28 13:45+0100\n"
-"Last-Translator: Filip Dupanović <kron@kron.ba>\n"
-"Language-Team: Filip Dupanović <kron@kron.ba>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#: .\conf\global_settings.py:44
-msgid "Arabic"
-msgstr "arapski"
-
-#: .\conf\global_settings.py:45
-msgid "Bulgarian"
-msgstr "bugarski"
-
-#: .\conf\global_settings.py:46
-msgid "Bengali"
-msgstr "bengalski"
-
-#: .\conf\global_settings.py:47
-msgid "Bosnian"
-msgstr "bosanski"
-
-#: .\conf\global_settings.py:48
-msgid "Catalan"
-msgstr "katalonski"
-
-#: .\conf\global_settings.py:49
-msgid "Czech"
-msgstr "češki"
-
-#: .\conf\global_settings.py:50
-msgid "Welsh"
-msgstr "velški"
-
-#: .\conf\global_settings.py:51
-msgid "Danish"
-msgstr "danski"
-
-#: .\conf\global_settings.py:52
-msgid "German"
-msgstr "njemački"
-
-#: .\conf\global_settings.py:53
-msgid "Greek"
-msgstr "grčki"
-
-#: .\conf\global_settings.py:54
-msgid "English"
-msgstr "engleski"
-
-#: .\conf\global_settings.py:55
-msgid "Spanish"
-msgstr "španski"
-
-#: .\conf\global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "argentinski španski"
-
-#: .\conf\global_settings.py:57
-msgid "Estonian"
-msgstr "estonski"
-
-#: .\conf\global_settings.py:58
-msgid "Basque"
-msgstr "baskijski"
-
-#: .\conf\global_settings.py:59
-msgid "Persian"
-msgstr "persijski"
-
-#: .\conf\global_settings.py:60
-msgid "Finnish"
-msgstr "finski"
-
-#: .\conf\global_settings.py:61
-msgid "French"
-msgstr "francuski"
-
-#: .\conf\global_settings.py:62
-msgid "Frisian"
-msgstr "frišanski"
-
-#: .\conf\global_settings.py:63
-msgid "Irish"
-msgstr "irski"
-
-#: .\conf\global_settings.py:64
-msgid "Galician"
-msgstr "galski"
-
-#: .\conf\global_settings.py:65
-msgid "Hebrew"
-msgstr "hebrejski"
-
-#: .\conf\global_settings.py:66
-msgid "Hindi"
-msgstr "hindi"
-
-#: .\conf\global_settings.py:67
-msgid "Croatian"
-msgstr "hrvatski"
-
-#: .\conf\global_settings.py:68
-msgid "Hungarian"
-msgstr "mađarski"
-
-#: .\conf\global_settings.py:69
-msgid "Icelandic"
-msgstr "islandski"
-
-#: .\conf\global_settings.py:70
-msgid "Italian"
-msgstr "italijanski"
-
-#: .\conf\global_settings.py:71
-msgid "Japanese"
-msgstr "japanski"
-
-#: .\conf\global_settings.py:72
-msgid "Georgian"
-msgstr "gruzijski"
-
-#: .\conf\global_settings.py:73
-msgid "Khmer"
-msgstr "kambođanski"
-
-#: .\conf\global_settings.py:74
-msgid "Kannada"
-msgstr "kanada"
-
-#: .\conf\global_settings.py:75
-msgid "Korean"
-msgstr "korejski"
-
-#: .\conf\global_settings.py:76
-msgid "Lithuanian"
-msgstr "litvanski"
-
-#: .\conf\global_settings.py:77
-msgid "Latvian"
-msgstr "latvijski"
-
-#: .\conf\global_settings.py:78
-msgid "Macedonian"
-msgstr "makedonski"
-
-#: .\conf\global_settings.py:79
-msgid "Dutch"
-msgstr "holandski"
-
-#: .\conf\global_settings.py:80
-msgid "Norwegian"
-msgstr "norveški"
-
-#: .\conf\global_settings.py:81
-msgid "Polish"
-msgstr "poljski"
-
-#: .\conf\global_settings.py:82
-msgid "Portuguese"
-msgstr "portugalski"
-
-#: .\conf\global_settings.py:83
-msgid "Brazilian Portuguese"
-msgstr "brazilski portugalski"
-
-#: .\conf\global_settings.py:84
-msgid "Romanian"
-msgstr "rumunski"
-
-#: .\conf\global_settings.py:85
-msgid "Russian"
-msgstr "ruski"
-
-#: .\conf\global_settings.py:86
-msgid "Slovak"
-msgstr "slovački"
-
-#: .\conf\global_settings.py:87
-msgid "Slovenian"
-msgstr "slovenački"
-
-#: .\conf\global_settings.py:88
-msgid "Albanian"
-msgstr "albanski"
-
-#: .\conf\global_settings.py:89
-msgid "Serbian"
-msgstr "srpski"
-
-#: .\conf\global_settings.py:90
-msgid "Serbian Latin"
-msgstr "srpski latinski"
-
-#: .\conf\global_settings.py:91
-msgid "Swedish"
-msgstr "švedski"
-
-#: .\conf\global_settings.py:92
-msgid "Tamil"
-msgstr "tamilski"
-
-#: .\conf\global_settings.py:93
-msgid "Telugu"
-msgstr "telugu"
-
-#: .\conf\global_settings.py:94
-msgid "Thai"
-msgstr "tajlandski"
-
-#: .\conf\global_settings.py:95
-msgid "Turkish"
-msgstr "turski"
-
-#: .\conf\global_settings.py:96
-msgid "Ukrainian"
-msgstr "ukrajinski"
-
-#: .\conf\global_settings.py:97
-msgid "Vietnamese"
-msgstr "vijetnamežanski"
-
-#: .\conf\global_settings.py:98
-msgid "Simplified Chinese"
-msgstr "novokineski"
-
-#: .\conf\global_settings.py:99
-msgid "Traditional Chinese"
-msgstr "starokineski"
-
-#: .\contrib\admin\actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Uspješno obrisano: %(count)d %(items)s."
-
-#: .\contrib\admin\actions.py:59 .\contrib\admin\options.py:1100
-msgid "Are you sure?"
-msgstr "Da li ste sigurni?"
-
-#: .\contrib\admin\actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Briši označene objekte klase %(verbose_name_plural)s"
-
-#: .\contrib\admin\filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s:</h3>\n"
-"<ul>\n"
-
-#: .\contrib\admin\filterspecs.py:75 .\contrib\admin\filterspecs.py:92
-#: .\contrib\admin\filterspecs.py:147 .\contrib\admin\filterspecs.py:173
-msgid "All"
-msgstr "Svi"
-
-#: .\contrib\admin\filterspecs.py:113
-msgid "Any date"
-msgstr "Svi datumi"
-
-#: .\contrib\admin\filterspecs.py:114
-msgid "Today"
-msgstr "Danas"
-
-#: .\contrib\admin\filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Poslednjih 7 dana"
-
-#: .\contrib\admin\filterspecs.py:119
-msgid "This month"
-msgstr "Ovaj mesec"
-
-#: .\contrib\admin\filterspecs.py:121
-msgid "This year"
-msgstr "Ova godina"
-
-#: .\contrib\admin\filterspecs.py:147 .\forms\widgets.py:469
-msgid "Yes"
-msgstr "Da"
-
-#: .\contrib\admin\filterspecs.py:147 .\forms\widgets.py:469
-msgid "No"
-msgstr "Ne"
-
-#: .\contrib\admin\filterspecs.py:154 .\forms\widgets.py:469
-msgid "Unknown"
-msgstr "Nepoznato"
-
-#: .\contrib\admin\helpers.py:20
-msgid "Action:"
-msgstr "Radnja:"
-
-#: .\contrib\admin\models.py:19
-msgid "action time"
-msgstr "vrijeme radnje"
-
-#: .\contrib\admin\models.py:22
-msgid "object id"
-msgstr "id objekta"
-
-#: .\contrib\admin\models.py:23
-msgid "object repr"
-msgstr "opis objekta"
-
-#: .\contrib\admin\models.py:24
-msgid "action flag"
-msgstr "oznaka radnje"
-
-#: .\contrib\admin\models.py:25
-msgid "change message"
-msgstr "opis izmjene"
-
-#: .\contrib\admin\models.py:28
-msgid "log entry"
-msgstr "zapis u logovima"
-
-#: .\contrib\admin\models.py:29
-msgid "log entries"
-msgstr "zapisi u logovima"
-
-#: .\contrib\admin\options.py:142 .\contrib\admin\options.py:157
-msgid "None"
-msgstr "Ništa"
-
-#: .\contrib\admin\options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr "Izmjenjena polja %s"
-
-#: .\contrib\admin\options.py:563 .\contrib\admin\options.py:573
-#: .\contrib\comments\templates\comments\preview.html.py:16
-#: .\db\models\base.py:844 .\forms\models.py:573
-msgid "and"
-msgstr "i"
-
-#: .\contrib\admin\options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Sačuvan objekat „%(object)s“ klase %(name)s."
-
-#: .\contrib\admin\options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Izmjenjena polja %(list)s objekata „%(object)s“ klase %(name)s ."
-
-#: .\contrib\admin\options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Obrisan objekat „%(object)s“ klase %(name)s."
-
-#: .\contrib\admin\options.py:581
-msgid "No fields changed."
-msgstr "Bez izmjena u poljima."
-
-#: .\contrib\admin\options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Objekat „%(obj)s“ klase %(name)s sačuvan je uspješno."
-
-#: .\contrib\admin\options.py:651 .\contrib\admin\options.py:684
-msgid "You may edit it again below."
-msgstr "Dole možete ponovo unositi izmjene."
-
-#: .\contrib\admin\options.py:661 .\contrib\admin\options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr "Dole možete dodati novi objekat klase %s"
-
-#: .\contrib\admin\options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Objekat „%(obj)s“ klase %(name)s izmjenjen je uspješno."
-
-#: .\contrib\admin\options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Objekat „%(obj)s“ klase %(name)s dodat je uspješno. Dole možete unjeti "
-"dodatne izmjene."
-
-#: .\contrib\admin\options.py:744
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Predmeti moraju biti izabrani da bi se mogla obaviti akcija nad njima. "
-"Nijedan predmet nije bio izmjenjen."
-
-#: .\contrib\admin\options.py:762
-msgid "No action selected."
-msgstr "Nijedna akcija nije izabrana."
-
-#: .\contrib\admin\options.py:842
-#, python-format
-msgid "Add %s"
-msgstr "Dodaj objekat klase %s"
-
-#: .\contrib\admin\options.py:868 .\contrib\admin\options.py:1080
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Objekat klase %(name)s sa primarnim ključem %(key)r ne postoji."
-
-#: .\contrib\admin\options.py:933
-#, python-format
-msgid "Change %s"
-msgstr "Izmjeni objekat klase %s"
-
-#: .\contrib\admin\options.py:978
-msgid "Database error"
-msgstr "Greška u bazi podataka"
-
-#: .\contrib\admin\options.py:1014
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s objekat klase %(name)s izmjenjen je uspješno."
-msgstr[1] "%(count)s objekata klase %(name)s izmjenjeni su uspješno."
-msgstr[2] "%(count)s objekta klase %(name)s izmjenjeno je uspješno."
-
-#: .\contrib\admin\options.py:1041
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s izabran"
-msgstr[1] "%(total_count)s izabrana"
-msgstr[2] "%(total_count)s izabrani"
-
-#: .\contrib\admin\options.py:1046
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 od %(cnt)s izabrani"
-
-#: .\contrib\admin\options.py:1093
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Objekat „%(obj)s“ klase %(name)s obrisan je uspješno."
-
-#: .\contrib\admin\options.py:1130
-#, python-format
-msgid "Change history: %s"
-msgstr "Historijat izmjena: %s"
-
-#: .\contrib\admin\sites.py:22 .\contrib\admin\views\decorators.py:14
-#: .\contrib\auth\forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Unesite tačno korisničko ime i lozinku. Pazite na razliku izmjeđu malih i "
-"velikih slova u oba polja"
-
-#: .\contrib\admin\sites.py:311 .\contrib\admin\views\decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Prijavite se ponovo pošto je vaša sesija istekla."
-
-#: .\contrib\admin\sites.py:318 .\contrib\admin\views\decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Izgleda da vaš browser nije podešen da prima kolačiće. Uključite kolačiće, "
-"osvježite ovu stranicu i probajte ponovo."
-
-#: .\contrib\admin\sites.py:334 .\contrib\admin\sites.py:340
-#: .\contrib\admin\views\decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Korisnička imena ne smiju sadržati znak „@“."
-
-#: .\contrib\admin\sites.py:337 .\contrib\admin\views\decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Vaša email adresa nije vaše korisničko ime. Probajte sa „%s“."
-
-#: .\contrib\admin\sites.py:393
-msgid "Site administration"
-msgstr "Administracija sistema"
-
-#: .\contrib\admin\sites.py:407
-#: .\contrib\admin\templates\admin\login.html.py:26
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:14
-#: .\contrib\admin\views\decorators.py:20
-msgid "Log in"
-msgstr "Prijava"
-
-#: .\contrib\admin\sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "Administracija %s"
-
-#: .\contrib\admin\widgets.py:75
-msgid "Date:"
-msgstr "Datum:"
-
-#: .\contrib\admin\widgets.py:75
-msgid "Time:"
-msgstr "Vrijeme:"
-
-#: .\contrib\admin\widgets.py:99
-msgid "Currently:"
-msgstr "Trenutno:"
-
-#: .\contrib\admin\widgets.py:99
-msgid "Change:"
-msgstr "Izmjena:"
-
-#: .\contrib\admin\widgets.py:129
-msgid "Lookup"
-msgstr "Pretraži"
-
-#: .\contrib\admin\widgets.py:244
-msgid "Add Another"
-msgstr "Dodaj još jedan"
-
-#: .\contrib\admin\templates\admin\404.html.py:4
-#: .\contrib\admin\templates\admin\404.html.py:8
-msgid "Page not found"
-msgstr "Stranica nije pronađena"
-
-#: .\contrib\admin\templates\admin\404.html.py:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Žao nam je, tražena stranica nije pronađena."
-
-#: .\contrib\admin\templates\admin\500.html.py:4
-#: .\contrib\admin\templates\admin\app_index.html.py:8
-#: .\contrib\admin\templates\admin\base.html.py:55
-#: .\contrib\admin\templates\admin\change_form.html.py:18
-#: .\contrib\admin\templates\admin\change_list.html.py:42
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:6
-#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:6
-#: .\contrib\admin\templates\admin\invalid_setup.html.py:4
-#: .\contrib\admin\templates\admin\object_history.html.py:6
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:11
-#: .\contrib\admin\templates\registration\logged_out.html.py:4
-#: .\contrib\admin\templates\registration\password_change_done.html.py:4
-#: .\contrib\admin\templates\registration\password_change_form.html.py:5
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
-msgid "Home"
-msgstr "Početna"
-
-#: .\contrib\admin\templates\admin\500.html.py:4
-msgid "Server error"
-msgstr "Greška na serveru"
-
-#: .\contrib\admin\templates\admin\500.html.py:6
-msgid "Server error (500)"
-msgstr "Greška na serveru (500)"
-
-#: .\contrib\admin\templates\admin\500.html.py:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Greška na serveru <em>(500)</em>"
-
-#: .\contrib\admin\templates\admin\500.html.py:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Došlo je do greške. Administrator sajta je obavešten emailom i greška će "
-"biti uskoro otklonjena. Hvala na strpljenju."
-
-#: .\contrib\admin\templates\admin\actions.html.py:4
-msgid "Run the selected action"
-msgstr "Pokreni odabranu radnju"
-
-#: .\contrib\admin\templates\admin\actions.html.py:4
-msgid "Go"
-msgstr "Počni"
-
-#: .\contrib\admin\templates\admin\actions.html.py:11
-msgid "Click here to select the objects across all pages"
-msgstr "Kliknite ovdje da izaberete objekte preko svih stranica"
-
-#: .\contrib\admin\templates\admin\actions.html.py:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Izaberite svih %(total_count)s %(module_name)s"
-
-#: .\contrib\admin\templates\admin\actions.html.py:13
-msgid "Clear selection"
-msgstr "Izbrišite izbor"
-
-#: .\contrib\admin\templates\admin\app_index.html.py:10
-#: .\contrib\admin\templates\admin\index.html.py:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: .\contrib\admin\templates\admin\base.html.py:28
-msgid "Welcome,"
-msgstr "Dobrodošli,"
-
-#: .\contrib\admin\templates\admin\base.html.py:33
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:4
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
-msgid "Documentation"
-msgstr "Dokumentacija"
-
-#: .\contrib\admin\templates\admin\base.html.py:41
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:15
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:48
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:4
-msgid "Change password"
-msgstr "Promjena lozinke"
-
-#: .\contrib\admin\templates\admin\base.html.py:48
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:4
-msgid "Log out"
-msgstr "Odjava"
-
-#: .\contrib\admin\templates\admin\base_site.html.py:4
-msgid "Django site admin"
-msgstr "Django administracija sajta"
-
-#: .\contrib\admin\templates\admin\base_site.html.py:7
-msgid "Django administration"
-msgstr "Django administracija"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:21
-#: .\contrib\admin\templates\admin\index.html.py:29
-msgid "Add"
-msgstr "Dodaj"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:28
-#: .\contrib\admin\templates\admin\object_history.html.py:10
-msgid "History"
-msgstr "Historijat"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:29
-#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:9
-#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:28
-msgid "View on site"
-msgstr "Pregled na sajtu"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:39
-#: .\contrib\admin\templates\admin\change_list.html.py:71
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:24
-#: .\contrib\admin\templates\registration\password_change_form.html.py:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Ispravite grešku dole."
-msgstr[1] "Ispravite greške dole."
-msgstr[2] "Ispravite greške dole."
-
-#: .\contrib\admin\templates\admin\change_list.html.py:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Dodaj objekat klase %(name)s"
-
-#: .\contrib\admin\templates\admin\change_list.html.py:82
-msgid "Filter"
-msgstr "Filter"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:10
-#: .\contrib\admin\templates\admin\submit_line.html.py:4
-#: .\forms\formsets.py:302
-msgid "Delete"
-msgstr "Obriši"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih "
-"objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za "
-"brisanje slijedećih tipova objekata:"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Da li ste sigurni da želite da obrišete %(object_name)s „%(escaped_object)"
-"s“? Slijedeći objekti koji su u vezi sa ovim objektom će također biti "
-"obrisani:"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:28
-#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:33
-msgid "Yes, I'm sure"
-msgstr "Da, siguran sam"
-
-#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:9
-msgid "Delete multiple objects"
-msgstr "Brisanje više objekata"
-
-#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Uklanjanje %(object_name)s povlači uklanjanje svih objekata koji su povezani "
-"sa ovim objektom, ali vaš nalog nema dozvole za brisanje slijedećih tipova "
-"objekata:"
-
-#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Da li ste sigurni da želite da obrišete odabrane %(object_name)s? Slijedeći "
-"objekti koji su u vezi sa ovim objektom će također biti obrisani:"
-
-#: .\contrib\admin\templates\admin\filter.html.py:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s "
-
-#: .\contrib\admin\templates\admin\index.html.py:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeli dostupni u aplikaciji %(name)s."
-
-#: .\contrib\admin\templates\admin\index.html.py:35
-msgid "Change"
-msgstr "Izmjeni"
-
-#: .\contrib\admin\templates\admin\index.html.py:45
-msgid "You don't have permission to edit anything."
-msgstr "Nemate dozvole da unosite bilo kakve izmjene."
-
-#: .\contrib\admin\templates\admin\index.html.py:53
-msgid "Recent Actions"
-msgstr "Posjlednje radnje"
-
-#: .\contrib\admin\templates\admin\index.html.py:54
-msgid "My Actions"
-msgstr "Moje radnje"
-
-#: .\contrib\admin\templates\admin\index.html.py:58
-msgid "None available"
-msgstr "Nema podataka"
-
-#: .\contrib\admin\templates\admin\index.html.py:72
-msgid "Unknown content"
-msgstr "Nepoznat sadržaj"
-
-#: .\contrib\admin\templates\admin\invalid_setup.html.py:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Nešto nije uredu sa vašom bazom podataka. Provjerite da li postoje "
-"odgovarajuće tabele i da li odgovarajući korisnik ima pristup bazi."
-
-#: .\contrib\admin\templates\admin\login.html.py:19
-msgid "Username:"
-msgstr "Korisnik:"
-
-#: .\contrib\admin\templates\admin\login.html.py:22
-msgid "Password:"
-msgstr "Lozinka:"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:22
-msgid "Date/time"
-msgstr "Datum/vrijeme"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:23
-msgid "User"
-msgstr "Korisnik"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:24
-msgid "Action"
-msgstr "Radnja"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Ovaj objekat nema zabilježen historijat izmjena. Vjerovatno nije dodan kroz "
-"ovaj sajt za administraciju."
-
-#: .\contrib\admin\templates\admin\pagination.html.py:10
-msgid "Show all"
-msgstr "Prikaži sve"
-
-#: .\contrib\admin\templates\admin\pagination.html.py:11
-#: .\contrib\admin\templates\admin\submit_line.html.py:3
-msgid "Save"
-msgstr "Sačuvaj"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:8
-msgid "Search"
-msgstr "Pretraga"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 rezultat"
-msgstr[1] "%(counter)s rezultata"
-msgstr[2] "%(counter)s rezultata"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "ukupno %(full_result_count)s"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:5
-msgid "Save as new"
-msgstr "Sačuvaj kao novi"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:6
-msgid "Save and add another"
-msgstr "Sačuvaj i dodaj slijedeći"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:7
-msgid "Save and continue editing"
-msgstr "Sačuvaj i nastavi sa izmjenama"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Prvo unesite korisničko ime i lozinku. Potom ćete moći da mijenjate još "
-"korisničkih podešavanja."
-
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Unesite novu lozinku za korisnika <strong>%(username)s</strong>."
-
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:35
-#: .\contrib\auth\forms.py:17 .\contrib\auth\forms.py:61
-#: .\contrib\auth\forms.py:186
-msgid "Password"
-msgstr "Lozinka"
-
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:41
-#: .\contrib\admin\templates\registration\password_change_form.html.py:37
-#: .\contrib\auth\forms.py:187
-msgid "Password (again)"
-msgstr "Lozinka (ponovite)"
-
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:42
-#: .\contrib\auth\forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Radi provjere tačnosti ponovo unesite lozinku koju ste unijeli gore."
-
-#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:64
-#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Dodaj još jedan %(verbose_name)s"
-
-#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:67
-#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:113
-#: .\contrib\comments\templates\comments\delete.html.py:12
-msgid "Remove"
-msgstr "Obriši"
-
-#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:15
-msgid "Delete?"
-msgstr "Brisanje?"
-
-#: .\contrib\admin\templates\registration\logged_out.html.py:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Hvala što ste danas proveli vrijeme na ovom sajtu."
-
-#: .\contrib\admin\templates\registration\logged_out.html.py:10
-msgid "Log in again"
-msgstr "Ponovna prijava"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:4
-#: .\contrib\admin\templates\registration\password_change_form.html.py:5
-#: .\contrib\admin\templates\registration\password_change_form.html.py:7
-#: .\contrib\admin\templates\registration\password_change_form.html.py:19
-msgid "Password change"
-msgstr "Izmjena lozinke"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:6
-#: .\contrib\admin\templates\registration\password_change_done.html.py:10
-msgid "Password change successful"
-msgstr "uspješna izmjena lozinke"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:12
-msgid "Your password was changed."
-msgstr "Vaša lozinka je izmjenjena."
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Iz bezbjednosnih razloga prvo unesite svoju staru lozinku, a novu zatim "
-"unesite dva puta da bismo mogli da provjerimo da li ste je pravilno unijeli."
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:27
-#: .\contrib\auth\forms.py:170
-msgid "Old password"
-msgstr "Stara lozinka"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:32
-#: .\contrib\auth\forms.py:144
-msgid "New password"
-msgstr "Nova lozinka"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:43
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:21
-msgid "Change my password"
-msgstr "Izmijeni moju lozinku"
-
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:10
-msgid "Password reset"
-msgstr "Resetovanje lozinke"
-
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:10
-msgid "Password reset complete"
-msgstr "Resetovanje lozinke uspješno"
-
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Vaša lozinka je postavljena. Možete se prijaviti."
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:4
-msgid "Password reset confirmation"
-msgstr "Potvrda resetovanja lozinke"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:12
-msgid "Enter new password"
-msgstr "Unesite novu lozinku"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Unesite novu lozinku dva puta kako bismo mogli da provjerimo da li ste je "
-"pravilno unijeli."
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:18
-msgid "New password:"
-msgstr "Nova lozinka:"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:20
-msgid "Confirm password:"
-msgstr "Potvrda lozinke:"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:26
-msgid "Password reset unsuccessful"
-msgstr "Resetovanje lozinke neuspješno"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Link za resetovanje lozinke nije važeći, vjerovatno zato što je već "
-"iskorišćen. Ponovo zatražite resetovanje lozinke."
-
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:10
-msgid "Password reset successful"
-msgstr "Resetovanje lozinke uspješno."
-
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Poslali smo uputstva za postavljanje nove lozinke na email adresu koju ste "
-"nam dali. Uputstva ćete dobiti uskoro."
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Ovu poruku ste primili zato što ste zahtijevali resetovanje lozinke"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "za vaš korisnički nalog na sajtu %(site_name)s"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Idite na slijedeću stranicu i postavite novu lozinku."
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Ukoliko ste zaboravili, vaše korisničko ime:"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:11
-msgid "Thanks for using our site!"
-msgstr "Hvala što koristite naš sajt!"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Uredništvo sajta %(site_name)s"
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Zaboravili ste lozinku? Unesite svoju email adresu dole i poslaćemo vam "
-"uputstva za postavljanje nove."
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
-msgid "E-mail address:"
-msgstr "Email adresa:"
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
-msgid "Reset my password"
-msgstr "Resetuj moju lozinku"
-
-#: .\contrib\admin\templatetags\admin_list.py:239
-msgid "All dates"
-msgstr "Svi datumi"
-
-#: .\contrib\admin\views\main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Odaberi objekat klase %s"
-
-#: .\contrib\admin\views\main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Odaberi objekat klase %s za izmjenu"
-
-#: .\contrib\admin\views\template.py:38 .\contrib\sites\models.py:38
-msgid "site"
-msgstr "sajt"
-
-#: .\contrib\admin\views\template.py:40
-msgid "template"
-msgstr "obrazac"
-
-#: .\contrib\admindocs\views.py:61 .\contrib\admindocs\views.py:63
-#: .\contrib\admindocs\views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: .\contrib\admindocs\views.py:94 .\contrib\admindocs\views.py:96
-#: .\contrib\admindocs\views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: .\contrib\admindocs\views.py:158 .\contrib\admindocs\views.py:160
-#: .\contrib\admindocs\views.py:162
-msgid "view:"
-msgstr "pogled:"
-
-#: .\contrib\admindocs\views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikacija %r nije pronađena"
-
-#: .\contrib\admindocs\views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r"
-
-#: .\contrib\admindocs\views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "povezani objekti klase `%(app_label)s.%(data_type)s`"
-
-#: .\contrib\admindocs\views.py:209 .\contrib\admindocs\views.py:228
-#: .\contrib\admindocs\views.py:233 .\contrib\admindocs\views.py:247
-#: .\contrib\admindocs\views.py:261 .\contrib\admindocs\views.py:266
-msgid "model:"
-msgstr "model:"
-
-# WARN: possible breakage in future
-# This string is interpolated in strings below, which can cause breakage in
-# future releases.
-#: .\contrib\admindocs\views.py:224 .\contrib\admindocs\views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "klase `%(app_label)s.%(object_name)s`"
-
-# WARN: possible breakage in future
-#: .\contrib\admindocs\views.py:228 .\contrib\admindocs\views.py:261
-#, python-format
-msgid "all %s"
-msgstr "svi povezani objekti %s"
-
-# WARN: possible breakage in future
-#: .\contrib\admindocs\views.py:233 .\contrib\admindocs\views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "broj povezanih objekata %s"
-
-# WARN: possible breakage in future
-#: .\contrib\admindocs\views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Polja u povezanim objektima %s"
-
-#: .\contrib\admindocs\views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ne izgleda kao urlpattern objekat"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
-msgid "Bookmarklets"
-msgstr "Bookmarkleti"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:4
-msgid "Documentation bookmarklets"
-msgstr "Bookmarkleti dokumentacije"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Da biste instalirali bookmarklet, prevucite link do "
-"svojih\n"
-"bookmarka ili kliknite desnim dugmetom i dodajte među bookmarke. Nakon toga\n"
-"bookmarkletima možete pristupiti sa svake stranice na sajtu. Imajte na umu\n"
-"da neki bookmarkleti zahtijevaju da sajtu pristupite sa računara koji su\n"
-"označeni kao „interni“ (pitajte administratora vašeg sistema ukoliko niste\n"
-"sigurni da li je vaš računar „interni“).</p>\n"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:18
-msgid "Documentation for this page"
-msgstr "Dokumentacija za ovu stranicu"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Vodi od bilo koje stranice do dokumentacije za pogled koji generiše tu "
-"stranicu."
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:21
-msgid "Show object ID"
-msgstr "Prikaži ID objekta"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Prikazuje content-type i jedinstveni ID za stranicu koja predstavlja jedan "
-"objekat."
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:24
-msgid "Edit this object (current window)"
-msgstr "Izmjeni ovaj objekat (u ovom prozoru)"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Vodi u administracioni stranicu za stranice koje prestavljaju jedan objekat"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:27
-msgid "Edit this object (new window)"
-msgstr "Izmjeni ovaj objekat (novi prozor)"
-
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"Isto kao prethodni, ali otvara administracionu stranicu u novom prozoru."
-
-#: .\contrib\auth\admin.py:29
-msgid "Personal info"
-msgstr "Lični podaci"
-
-#: .\contrib\auth\admin.py:30
-msgid "Permissions"
-msgstr "Dozvole"
-
-#: .\contrib\auth\admin.py:31
-msgid "Important dates"
-msgstr "Važni datumi"
-
-#: .\contrib\auth\admin.py:32
-msgid "Groups"
-msgstr "Grupe"
-
-#: .\contrib\auth\admin.py:114
-msgid "Password changed successfully."
-msgstr "Lozinka uspješno izmjenjena."
-
-#: .\contrib\auth\admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Izmjeni lozinku: %s"
-
-#: .\contrib\auth\forms.py:14 .\contrib\auth\forms.py:48
-#: .\contrib\auth\forms.py:60
-msgid "Username"
-msgstr "Korisnik"
-
-#: .\contrib\auth\forms.py:15 .\contrib\auth\forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Neophodno. Najviše 30 slovnih mesta. Samo slova, brojke i @/./+/-/_ only."
-
-#: .\contrib\auth\forms.py:16 .\contrib\auth\forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-"Ova vrijednost može sadržati samo slova, brojke i digits and @/./+/-/_ "
-"znamenke."
-
-#: .\contrib\auth\forms.py:18
-msgid "Password confirmation"
-msgstr "Potvrda lozinke"
-
-#: .\contrib\auth\forms.py:31
-msgid "A user with that username already exists."
-msgstr "Korisnik sa tim korisničkim imenom već postoji."
-
-#: .\contrib\auth\forms.py:37 .\contrib\auth\forms.py:156
-#: .\contrib\auth\forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Dva polja za lozinku se nisu poklopila."
-
-#: .\contrib\auth\forms.py:83
-msgid "This account is inactive."
-msgstr "Ovaj nalog je neaktivan."
-
-#: .\contrib\auth\forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Izgleda da su kolačići isključeni u vašem browser-u. Oni moraju biti "
-"uključeni da bi ste se prijavili."
-
-#: .\contrib\auth\forms.py:101
-msgid "E-mail"
-msgstr "Email adresa"
-
-#: .\contrib\auth\forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Ta email adresa nije u vezi ni sa jednim nalogom. Da li ste sigurni da ste "
-"se već registrovali?"
-
-#: .\contrib\auth\forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Resetovanje lozinke na %s"
-
-#: .\contrib\auth\forms.py:145
-msgid "New password confirmation"
-msgstr "Potvrda nove lozinke"
-
-#: .\contrib\auth\forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Vaša stara lozinka nije pravilno unesena. Unesite je ponovo."
-
-#: .\contrib\auth\models.py:66 .\contrib\auth\models.py:94
-msgid "name"
-msgstr "ime"
-
-#: .\contrib\auth\models.py:68
-msgid "codename"
-msgstr "šifra dozvole"
-
-#: .\contrib\auth\models.py:72
-msgid "permission"
-msgstr "dozvola"
-
-#: .\contrib\auth\models.py:73 .\contrib\auth\models.py:95
-msgid "permissions"
-msgstr "dozvole"
-
-#: .\contrib\auth\models.py:98
-msgid "group"
-msgstr "grupa"
-
-#: .\contrib\auth\models.py:99 .\contrib\auth\models.py:206
-msgid "groups"
-msgstr "grupe"
-
-#: .\contrib\auth\models.py:196
-msgid "username"
-msgstr "korisničko ime"
-
-#: .\contrib\auth\models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Neophodno. Najviše 30 slovnih mesta. Slova, brojke i @/./+/-/_ karakteri"
-
-#: .\contrib\auth\models.py:197
-msgid "first name"
-msgstr "ime"
-
-#: .\contrib\auth\models.py:198
-msgid "last name"
-msgstr "prezime"
-
-#: .\contrib\auth\models.py:199
-msgid "e-mail address"
-msgstr "email adresa"
-
-#: .\contrib\auth\models.py:200
-msgid "password"
-msgstr "lozinka"
-
-#: .\contrib\auth\models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Koristite '[algo]$[salt]$[hexdigest]' ili <a href=\"password/\">formular za "
-"unos lozinke</a>."
-
-#: .\contrib\auth\models.py:201
-msgid "staff status"
-msgstr "status člana uredništva"
-
-#: .\contrib\auth\models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Označava da li korisnik može da se prijavi na ovaj sajt za administraciju."
-
-#: .\contrib\auth\models.py:202
-msgid "active"
-msgstr "aktivan"
-
-#: .\contrib\auth\models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Označava da li se korisnik smatra aktivnim. Uklnote izbor sa ovog polja "
-"umjesto da brišete nalog."
-
-#: .\contrib\auth\models.py:203
-msgid "superuser status"
-msgstr "status administratora"
-
-#: .\contrib\auth\models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Označava da li korisnik ima sve dozvole bez dodjeljivanja pojedinačnih "
-"dozvola."
-
-#: .\contrib\auth\models.py:204
-msgid "last login"
-msgstr "posljednja prijava"
-
-#: .\contrib\auth\models.py:205
-msgid "date joined"
-msgstr "datum registracije"
-
-#: .\contrib\auth\models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Pored ručno dodijeljenih dozvola, ovaj korisnik će imati i dozvole "
-"dodijeljene gurpama kojima pripada."
-
-#: .\contrib\auth\models.py:208
-msgid "user permissions"
-msgstr "korisničke dozvole"
-
-#: .\contrib\auth\models.py:212 .\contrib\comments\models.py:50
-#: .\contrib\comments\models.py:168
-msgid "user"
-msgstr "korisnik"
-
-#: .\contrib\auth\models.py:213
-msgid "users"
-msgstr "korisnici"
-
-#: .\contrib\auth\models.py:394
-msgid "message"
-msgstr "poruka"
-
-#: .\contrib\auth\views.py:79
-msgid "Logged out"
-msgstr "Odjavljen"
-
-#: .\contrib\auth\management\commands\createsuperuser.py:23
-#: .\core\validators.py:120 .\forms\fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Unesite važeću email adresu."
-
-#: .\contrib\comments\admin.py:12
-msgid "Content"
-msgstr "Sadržaj"
-
-#: .\contrib\comments\admin.py:15
-msgid "Metadata"
-msgstr "Metapodaci"
-
-#: .\contrib\comments\admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "oznaka"
-msgstr[1] "oznake"
-msgstr[2] "oznaka"
-
-#: .\contrib\comments\admin.py:41
-msgid "Flag selected comments"
-msgstr "Označite izabrane komentare"
-
-#: .\contrib\comments\admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "odobren"
-msgstr[1] "odobrena"
-msgstr[2] "odobreno"
-
-#: .\contrib\comments\admin.py:46
-msgid "Approve selected comments"
-msgstr "Odobri izabrane komentare"
-
-#: .\contrib\comments\admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "uklonjen"
-msgstr[1] "uklonjena"
-msgstr[2] "uklonjeno"
-
-#: .\contrib\comments\admin.py:51
-msgid "Remove selected comments"
-msgstr "Obriši izabrane komentare"
-
-#: .\contrib\comments\admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 komentar je uspješno %(action)s."
-msgstr[1] "%(count)s komentara su uspješno %(action)s."
-msgstr[2] "%(count)s komentara su uspješno %(action)s."
-
-#: .\contrib\comments\feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Komentari na sajtu %(site_name)s"
-
-#: .\contrib\comments\feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Skoriji komentari na sajtu %(site_name)s"
-
-#: .\contrib\comments\forms.py:93
-msgid "Name"
-msgstr "Ime"
-
-#: .\contrib\comments\forms.py:94
-msgid "Email address"
-msgstr "Email adresa"
-
-#: .\contrib\comments\forms.py:95 .\contrib\flatpages\admin.py:8
-#: .\contrib\flatpages\models.py:7 .\db\models\fields\__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: .\contrib\comments\forms.py:96
-msgid "Comment"
-msgstr "Komentari"
-
-#: .\contrib\comments\forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pazi na jezik! Riječ „%s“ ovdje nije dozvoljena."
-msgstr[1] "Pazi na jezik! Riječi „%s“ ovdje nisu dozvoljene."
-msgstr[2] "Pazi na jezik! Riječi „%s“ ovdje nisu dozvoljene."
-
-#: .\contrib\comments\forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Ako bilo šta unesete u ovo polje, Vaš komentar će se smatrati spamom."
-
-#: .\contrib\comments\models.py:22 .\contrib\contenttypes\models.py:81
-msgid "content type"
-msgstr "tip sadržaja"
-
-#: .\contrib\comments\models.py:24
-msgid "object ID"
-msgstr "ID objekta"
-
-#: .\contrib\comments\models.py:52
-msgid "user's name"
-msgstr "korisnikovo ime"
-
-#: .\contrib\comments\models.py:53
-msgid "user's email address"
-msgstr "korisnikova email adresa"
-
-#: .\contrib\comments\models.py:54
-msgid "user's URL"
-msgstr "korisnikov URL"
-
-#: .\contrib\comments\models.py:56 .\contrib\comments\models.py:76
-#: .\contrib\comments\models.py:169
-msgid "comment"
-msgstr "komentar"
-
-#: .\contrib\comments\models.py:59
-msgid "date/time submitted"
-msgstr "datum/vrijeme postavljanja"
-
-#: .\contrib\comments\models.py:60 .\db\models\fields\__init__.py:896
-msgid "IP address"
-msgstr "IP adresa"
-
-#: .\contrib\comments\models.py:61
-msgid "is public"
-msgstr "javno"
-
-#: .\contrib\comments\models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Uklonite izbor ovog polja ako želite da poruka faktični nestane sa ovog "
-"sajta."
-
-#: .\contrib\comments\models.py:64
-msgid "is removed"
-msgstr "uklonjen"
-
-#: .\contrib\comments\models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Obilježite ovu polje ako je komentar neprikladan. Poruka o uklanjanju će "
-"biti prikazana umjesto komentara."
-
-#: .\contrib\comments\models.py:77
-msgid "comments"
-msgstr "komentari"
-
-#: .\contrib\comments\models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Ovaj komentar je postavio prijavljen korisnik i zato je polje sa imenom "
-"zaključano."
-
-#: .\contrib\comments\models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Ovaj komentar je postavio prijavljen korisnik i zato je polje sa email "
-"adresom zaključano."
-
-#: .\contrib\comments\models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Postavio %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: .\contrib\comments\models.py:170
-msgid "flag"
-msgstr "oznaka"
-
-#: .\contrib\comments\models.py:171
-msgid "date"
-msgstr "datum"
-
-#: .\contrib\comments\models.py:181
-msgid "comment flag"
-msgstr "oznaka komentara"
-
-#: .\contrib\comments\models.py:182
-msgid "comment flags"
-msgstr "oznake komentara"
-
-#: .\contrib\comments\templates\comments\approve.html.py:4
-msgid "Approve a comment"
-msgstr "Odobrenje komentara"
-
-#: .\contrib\comments\templates\comments\approve.html.py:7
-msgid "Really make this comment public?"
-msgstr "Da li zaista želite da označite ovaj komentar javnim?"
-
-#: .\contrib\comments\templates\comments\approve.html.py:12
-msgid "Approve"
-msgstr "Odobri"
-
-#: .\contrib\comments\templates\comments\approved.html.py:4
-msgid "Thanks for approving"
-msgstr "Hvala na odobrenju!"
-
-#: .\contrib\comments\templates\comments\approved.html.py:7
-#: .\contrib\comments\templates\comments\deleted.html.py:7
-#: .\contrib\comments\templates\comments\flagged.html.py:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Hvala na učešću u unapređenju kvaliteta diskusija na našem sajtu."
-
-#: .\contrib\comments\templates\comments\delete.html.py:4
-msgid "Remove a comment"
-msgstr "Obriši komentar"
-
-#: .\contrib\comments\templates\comments\delete.html.py:7
-msgid "Really remove this comment?"
-msgstr "Da li zaista želite da obrišete ovaj komentar?"
-
-#: .\contrib\comments\templates\comments\deleted.html.py:4
-msgid "Thanks for removing"
-msgstr "Hvala što koristite naš sajt!"
-
-#: .\contrib\comments\templates\comments\flag.html.py:4
-msgid "Flag this comment"
-msgstr "Označavanje komentara"
-
-#: .\contrib\comments\templates\comments\flag.html.py:7
-msgid "Really flag this comment?"
-msgstr "Da li zaista želite da označite ovaj komentar?"
-
-#: .\contrib\comments\templates\comments\flag.html.py:12
-msgid "Flag"
-msgstr "Označi"
-
-#: .\contrib\comments\templates\comments\flagged.html.py:4
-msgid "Thanks for flagging"
-msgstr "Hvala što ste označili komentar."
-
-#: .\contrib\comments\templates\comments\form.html.py:17
-#: .\contrib\comments\templates\comments\preview.html.py:32
-msgid "Post"
-msgstr "Postavi"
-
-#: .\contrib\comments\templates\comments\form.html.py:18
-#: .\contrib\comments\templates\comments\preview.html.py:33
-msgid "Preview"
-msgstr "Pregled"
-
-#: .\contrib\comments\templates\comments\posted.html.py:4
-msgid "Thanks for commenting"
-msgstr "Hvala na komentaru"
-
-#: .\contrib\comments\templates\comments\posted.html.py:7
-msgid "Thank you for your comment"
-msgstr "Hvala što ste ostavili svoj komentar"
-
-#: .\contrib\comments\templates\comments\preview.html.py:4
-#: .\contrib\comments\templates\comments\preview.html.py:13
-msgid "Preview your comment"
-msgstr "Pregledaj komentar"
-
-#: .\contrib\comments\templates\comments\preview.html.py:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Ispravite grešku dole."
-msgstr[1] "Ispravite greške dole."
-msgstr[2] "Ispravite greške dole."
-
-#: .\contrib\comments\templates\comments\preview.html.py:16
-msgid "Post your comment"
-msgstr "Postavi komentar"
-
-#: .\contrib\comments\templates\comments\preview.html.py:16
-msgid "or make changes"
-msgstr "ili izvrši izmjene"
-
-#: .\contrib\contenttypes\models.py:77
-msgid "python model class name"
-msgstr "ime python klase modela"
-
-#: .\contrib\contenttypes\models.py:82
-msgid "content types"
-msgstr "tipovi sadržaja"
-
-#: .\contrib\flatpages\admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Primjer: '/about/contact/'. Pazite na to da postoje i početne i završne kose "
-"crte."
-
-#: .\contrib\flatpages\admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Ova vrijednost može sadržati samo slova, brojke, donje crte, crtice ili kose "
-"crte."
-
-#: .\contrib\flatpages\admin.py:22
-msgid "Advanced options"
-msgstr "Napredne postavke"
-
-#: .\contrib\flatpages\models.py:8
-msgid "title"
-msgstr "naslov"
-
-#: .\contrib\flatpages\models.py:9
-msgid "content"
-msgstr "sadržaj"
-
-#: .\contrib\flatpages\models.py:10
-msgid "enable comments"
-msgstr "omogući komentare"
-
-#: .\contrib\flatpages\models.py:11
-msgid "template name"
-msgstr "naziv obrazca"
-
-#: .\contrib\flatpages\models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Primjer: 'flatpages/contact_page.html'. Ako ovo ostavite praznim, sistem će "
-"koristiti 'flatpages/default.html'."
-
-#: .\contrib\flatpages\models.py:13
-msgid "registration required"
-msgstr "potrebna registracija"
-
-#: .\contrib\flatpages\models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ako je ovo obilježeno, samo će prijavljeni korisnici moći da vide ovu "
-"stranicu."
-
-#: .\contrib\flatpages\models.py:18
-msgid "flat page"
-msgstr "flat stranica"
-
-#: .\contrib\flatpages\models.py:19
-msgid "flat pages"
-msgstr "flat stranice"
-
-#: .\contrib\formtools\wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Žao nam je, ali Vaša sesija je istekla. Popunjavanje formulara nastavite na "
-"ovoj stranici."
-
-#: .\contrib\gis\db\models\fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Osnovno GIS polje -- mapiran je za OpenGIS Specification Geometry tip polja."
-
-#: .\contrib\gis\db\models\fields.py:270
-msgid "Point"
-msgstr "Tačka"
-
-#: .\contrib\gis\db\models\fields.py:274
-msgid "Line string"
-msgstr "Linijska nit"
-
-#: .\contrib\gis\db\models\fields.py:278
-msgid "Polygon"
-msgstr "Poligon"
-
-#: .\contrib\gis\db\models\fields.py:282
-msgid "Multi-point"
-msgstr "Multi-point"
-
-#: .\contrib\gis\db\models\fields.py:286
-msgid "Multi-line string"
-msgstr "Višelinijska nit"
-
-#: .\contrib\gis\db\models\fields.py:290
-msgid "Multi polygon"
-msgstr "Multi poligon"
-
-#: .\contrib\gis\db\models\fields.py:294
-msgid "Geometry collection"
-msgstr "Geometrijska kolekcija"
-
-#: .\contrib\gis\forms\fields.py:17
-msgid "No geometry value provided."
-msgstr "Niste zadali parametre za geometriju."
-
-#: .\contrib\gis\forms\fields.py:18
-msgid "Invalid geometry value."
-msgstr "Neispravan parametar za geometriju."
-
-#: .\contrib\gis\forms\fields.py:19
-msgid "Invalid geometry type."
-msgstr "Nepostojeći tip geometrije."
-
-#: .\contrib\gis\forms\fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Došlo je do greške tokom pretvaranje geometrije u SRID geometrijskom polja "
-"obrazca."
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "th"
-msgstr "-i"
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "st"
-msgstr "-vi"
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "nd"
-msgstr "-i"
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "rd"
-msgstr "-i"
-
-#: .\contrib\humanize\templatetags\humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milion"
-msgstr[1] "%(value).1f miliona"
-msgstr[2] "%(value).1f miliona"
-
-#: .\contrib\humanize\templatetags\humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milijarda"
-msgstr[1] "%(value).1f milijarde"
-msgstr[2] "%(value).1f milijardi"
-
-#: .\contrib\humanize\templatetags\humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilion"
-msgstr[1] "%(value).1f triliona"
-msgstr[2] "%(value).1f triliona"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "one"
-msgstr "jedan"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "two"
-msgstr "dva"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "three"
-msgstr "tri"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "four"
-msgstr "četiri"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "five"
-msgstr "pet"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "six"
-msgstr "šest"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "seven"
-msgstr "sedam"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "eight"
-msgstr "osam"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "nine"
-msgstr "devet"
-
-#: .\contrib\humanize\templatetags\humanize.py:93
-msgid "today"
-msgstr "deset"
-
-#: .\contrib\humanize\templatetags\humanize.py:95
-msgid "tomorrow"
-msgstr "sutra"
-
-#: .\contrib\humanize\templatetags\humanize.py:97
-msgid "yesterday"
-msgstr "jučer"
-
-#: .\contrib\localflavor\ar\forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Unesite poštanski broj u formatu NNNN ili ANNNNAAA."
-
-#: .\contrib\localflavor\ar\forms.py:50 .\contrib\localflavor\br\forms.py:97
-#: .\contrib\localflavor\br\forms.py:136 .\contrib\localflavor\pe\forms.py:24
-#: .\contrib\localflavor\pe\forms.py:52
-msgid "This field requires only numbers."
-msgstr "Ovo polje mora sadržati samo brojke."
-
-#: .\contrib\localflavor\ar\forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Ovo polje mora sadržati 7 ili 8 cifara"
-
-#: .\contrib\localflavor\ar\forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Unestie važeći CUIT u formatu XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: .\contrib\localflavor\ar\forms.py:81
-msgid "Invalid CUIT."
-msgstr "Nevažeći CUIT"
-
-#: .\contrib\localflavor\at\at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: .\contrib\localflavor\at\at_states.py:6
-msgid "Carinthia"
-msgstr "Karintija"
-
-#: .\contrib\localflavor\at\at_states.py:7
-msgid "Lower Austria"
-msgstr "Donja Austrija"
-
-#: .\contrib\localflavor\at\at_states.py:8
-msgid "Upper Austria"
-msgstr "Gornja Austrija"
-
-#: .\contrib\localflavor\at\at_states.py:9
-msgid "Salzburg"
-msgstr "Salcburg"
-
-#: .\contrib\localflavor\at\at_states.py:10
-msgid "Styria"
-msgstr "Stirija"
-
-#: .\contrib\localflavor\at\at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: .\contrib\localflavor\at\at_states.py:12
-msgid "Vorarlberg"
-msgstr "Voralber"
-
-#: .\contrib\localflavor\at\at_states.py:13
-msgid "Vienna"
-msgstr "Beč"
-
-#: .\contrib\localflavor\at\forms.py:20 .\contrib\localflavor\ch\forms.py:17
-#: .\contrib\localflavor\no\forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Unesite poštanski broj u formatu XXXX."
-
-#: .\contrib\localflavor\at\forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Unesite važeći austrijski broj socijalnog osiguranja u formatu XXXX XXXXXX."
-
-#: .\contrib\localflavor\au\forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Unesite četvorocifreni poštanski broj"
-
-#: .\contrib\localflavor\br\forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Unesite poštanski broj u formatu XXXXX-XXX."
-
-#: .\contrib\localflavor\br\forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Broj telefona mora biti u formatu XX-XXXX-XXXX."
-
-#: .\contrib\localflavor\br\forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Odaberite postojeću brazilsku državu. Ta država nije među ponuđenima."
-
-#: .\contrib\localflavor\br\forms.py:95
-msgid "Invalid CPF number."
-msgstr "Nevažeći CPF broj"
-
-#: .\contrib\localflavor\br\forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Polje zahtijeva najviše 11 cifri ili 14 znamenki."
-
-#: .\contrib\localflavor\br\forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Neispravan CNPJ broj."
-
-#: .\contrib\localflavor\br\forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Polje zahtijeva najmanje 14 cifri"
-
-#: .\contrib\localflavor\ca\forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Unesite poštanski broj u formtu XXX XXX."
-
-#: .\contrib\localflavor\ca\forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Unesite ispravan kanadski Social Insurance broj u XXX-XXX-XXX formatu."
-
-#: .\contrib\localflavor\ch\ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: .\contrib\localflavor\ch\ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: .\contrib\localflavor\ch\forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Unesite ispravan broj švicarske lične karte ili pasoša oblika X1234567<0 ili "
-"u 1234567890 formatu."
-
-#: .\contrib\localflavor\cl\forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Unesite ispravan čileanski RUT."
-
-#: .\contrib\localflavor\cl\forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Unesite ispravan čileanski RUT. Format je XX.XXX.XXX-X."
-
-#: .\contrib\localflavor\cl\forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Čileanski RUT nije ispravan."
-
-#: .\contrib\localflavor\cz\cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: .\contrib\localflavor\cz\forms.py:28 .\contrib\localflavor\sk\forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Unesite poštanski broj u formatu XXXXX ili XX XX."
-
-#: .\contrib\localflavor\cz\forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Unesite datum rođenja u formatu XXXXXX/XXXX ili XXXXXXXXXX."
-
-#: .\contrib\localflavor\cz\forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Neispravan parametar Pol; ispravne vrijednosti su 'f' i 'm'"
-
-#: .\contrib\localflavor\cz\forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Unesite ispravan broj rođendana."
-
-#: .\contrib\localflavor\cz\forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Unsite ispravan IC broj."
-
-#: .\contrib\localflavor\de\de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: .\contrib\localflavor\de\de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: .\contrib\localflavor\de\forms.py:15 .\contrib\localflavor\fi\forms.py:13
-#: .\contrib\localflavor\fr\forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Unesite poštanski broj u formatu XXXXX."
-
-#: .\contrib\localflavor\de\forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Unesite ispravan broj njemačke identifikacijske kartice u XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X formatu."
-
-#: .\contrib\localflavor\es\es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:30
-#: .\contrib\localflavor\es\es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:32
-#: .\contrib\localflavor\es\es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:43
-#: .\contrib\localflavor\es\es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: .\contrib\localflavor\es\es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: .\contrib\localflavor\es\forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Unesite ispravan poštanski broj u nizu i formatu 01XXX - 52XXX."
-
-#: .\contrib\localflavor\es\forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Unesite ispravan telefonski broj u jednom od formata 6XXXXXXXX, 8XXXXXXXX "
-"ili 9XXXXXXXX."
-
-#: .\contrib\localflavor\es\forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Unesite ispravan NIF, NIE ili CIF."
-
-#: .\contrib\localflavor\es\forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Unesite ispravan NIF ili NIE."
-
-#: .\contrib\localflavor\es\forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Neispravan checksum za NIF."
-
-#: .\contrib\localflavor\es\forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Neispravan checksum za NIE."
-
-#: .\contrib\localflavor\es\forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Neispravan checksum za CIF."
-
-#: .\contrib\localflavor\es\forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Unesite isravan broj bankovnog računa u obliku XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: .\contrib\localflavor\es\forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Neispravan checksum za broj bankovnog računa."
-
-#: .\contrib\localflavor\fi\forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Unesite ispravni finski identifikacijski broj."
-
-#: .\contrib\localflavor\fr\forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Broj telefona mora biti u formatu 0X XX XX XX XX."
-
-#: .\contrib\localflavor\id\forms.py:28
-msgid "Enter a valid post code"
-msgstr "Unesite ispravni poštansku kod"
-
-#: .\contrib\localflavor\id\forms.py:68 .\contrib\localflavor\nl\forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Unesite ispravan telefonski broj"
-
-#: .\contrib\localflavor\id\forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Unesite ispravan broj automobilske tablice"
-
-#: .\contrib\localflavor\id\forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Unesite ispravan NIK/KTP broj"
-
-#: .\contrib\localflavor\id\id_choices.py:9
-#: .\contrib\localflavor\id\id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:10
-#: .\contrib\localflavor\id\id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:11
-#: .\contrib\localflavor\id\id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:12
-#: .\contrib\localflavor\id\id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:13
-#: .\contrib\localflavor\id\id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:14
-#: .\contrib\localflavor\id\id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:15
-#: .\contrib\localflavor\id\id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:19
-#: .\contrib\localflavor\id\id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:20
-#: .\contrib\localflavor\id\id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:21
-#: .\contrib\localflavor\id\id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:22
-#: .\contrib\localflavor\id\id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:24
-#: .\contrib\localflavor\id\id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:25
-#: .\contrib\localflavor\id\id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:26
-#: .\contrib\localflavor\id\id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:27
-#: .\contrib\localflavor\id\id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:28
-#: .\contrib\localflavor\id\id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:33
-#: .\contrib\localflavor\id\id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:34
-#: .\contrib\localflavor\id\id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:35
-#: .\contrib\localflavor\id\id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:36
-#: .\contrib\localflavor\id\id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:37
-#: .\contrib\localflavor\id\id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:39
-#: .\contrib\localflavor\id\id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:40
-#: .\contrib\localflavor\id\id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:41
-#: .\contrib\localflavor\id\id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: .\contrib\localflavor\id\id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: .\contrib\localflavor\ie\ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: .\contrib\localflavor\in_\forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Unesite zip kod u formatu XXXXXXX."
-
-#: .\contrib\localflavor\is_\forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Unesite ispravan islandski identifikacijski broj. Format je XXXXXX-XXXX."
-
-#: .\contrib\localflavor\is_\forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Islanski identifikacijski broj nije ispravan."
-
-#: .\contrib\localflavor\it\forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Unesite ispravnu zip adresu."
-
-#: .\contrib\localflavor\it\forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Unesite ispravan Social Security broj."
-
-#: .\contrib\localflavor\it\forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Unesite ispravan VAT broj."
-
-#: .\contrib\localflavor\jp\forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Unesite poštanski broj u formatu XXXXXXX ili XXX-XXXX."
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: .\contrib\localflavor\kw\forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Unesite ispravan kuvajtski Civil ID broj"
-
-#: .\contrib\localflavor\mx\mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: .\contrib\localflavor\mx\mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: .\contrib\localflavor\nl\forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Unesite ispravnu poštansku adresu"
-
-#: .\contrib\localflavor\nl\forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Unesite ispravan SoFi broj"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: .\contrib\localflavor\nl\nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: .\contrib\localflavor\no\forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Unesite ispravan norveški jedinstveni matični broj građana."
-
-#: .\contrib\localflavor\pe\forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Polje zahtijeva 8 cifri."
-
-#: .\contrib\localflavor\pe\forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Polje zahtijeva 11 cifri."
-
-#: .\contrib\localflavor\pl\forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "National Identification Number sastoji se od 11 cifri."
-
-#: .\contrib\localflavor\pl\forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Pogrešan checksum za National Identification Number."
-
-#: .\contrib\localflavor\pl\forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Unesite poreski broj (NIP) u formatu XXX-XXX-XX-XX ili XX-XX-XXX-XXX."
-
-#: .\contrib\localflavor\pl\forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Pogrešan checksum za Tax Number (NIP)."
-
-#: .\contrib\localflavor\pl\forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"National Business Register Number (REGON) sastoji se od 9 ili 14 cifri."
-
-#: .\contrib\localflavor\pl\forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Pogrešan checksum za National Business Register Number (REGON)."
-
-#: .\contrib\localflavor\pl\forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Unesite ispravnu poštansku adresu u formatu XX-XXX."
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: .\contrib\localflavor\pt\forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Unesite zup kod u formatu XXXX-XXX"
-
-#: .\contrib\localflavor\pt\forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Telefonski brojevi moraju imati 9 cifri, ili početi sa + ili 00."
-
-#: .\contrib\localflavor\ro\forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Unesite ispravan CIF."
-
-#: .\contrib\localflavor\ro\forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Unesite ispravan CNP."
-
-#: .\contrib\localflavor\ro\forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Unesite ispravan IBAN ROXX-XXXX-XXXX-XXXX-XXXX-XXXX formatu"
-
-#: .\contrib\localflavor\ro\forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonski brojevi moraju biti u XXXX-XXXXXX formatu."
-
-#: .\contrib\localflavor\ro\forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Unesite ispravan poštanski broj u formatu XXXXXX"
-
-#: .\contrib\localflavor\se\forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Unesite ispravan švedski organizacijski broj."
-
-#: .\contrib\localflavor\se\forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Unesite ispravan švedski identifikacijski broj"
-
-#: .\contrib\localflavor\se\forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Koordinatni brojevi nisu dozvoljeni."
-
-#: .\contrib\localflavor\se\forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Unesite švedsku poštansku adresu u formatu XXXXX."
-
-#: .\contrib\localflavor\se\se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: .\contrib\localflavor\se\se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: .\contrib\localflavor\sk\sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: .\contrib\localflavor\uk\forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: .\contrib\localflavor\uk\uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: .\contrib\localflavor\us\forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Unesite poštansku adresu u formatu XXXXX ili XXXXX-XXXX"
-
-#: .\contrib\localflavor\us\forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Broj telefona mora biti u formatu XX-XXXX-XXXX."
-
-#: .\contrib\localflavor\us\forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Unesite ispravan američki Social Security broj u XXX-XX-XXXX formatu."
-
-#: .\contrib\localflavor\us\forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Unesite U.S. državu ili teritorij"
-
-#: .\contrib\localflavor\us\models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Država u SAD (dva velika slova)"
-
-#: .\contrib\localflavor\us\models.py:17
-msgid "Phone number"
-msgstr "Broj telefona"
-
-#: .\contrib\localflavor\uy\forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Unestie važeći CUIT u formatu XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: .\contrib\localflavor\uy\forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Unsite ispravan IC broj."
-
-#: .\contrib\localflavor\za\forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Unesite ispravan južnoafrički ID broj"
-
-#: .\contrib\localflavor\za\forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Unesite ispravnu južnoafričku poštansku adresu"
-
-#: .\contrib\localflavor\za\za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: .\contrib\localflavor\za\za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: .\contrib\messages\tests\base.py:101
-msgid "lazy message"
-msgstr "lijena poruka"
-
-#: .\contrib\redirects\models.py:7
-msgid "redirect from"
-msgstr "preusmjeren sa"
-
-#: .\contrib\redirects\models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ovo mora biti apsolutna putanja bez imena domena. Na primjer: '/events/"
-"search/'."
-
-#: .\contrib\redirects\models.py:9
-msgid "redirect to"
-msgstr "preusmjeri ka"
-
-#: .\contrib\redirects\models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ovo može biti ili apsolutna putanja (kao gore) ili pun URL koji počinje sa "
-"'http://'."
-
-#: .\contrib\redirects\models.py:13
-msgid "redirect"
-msgstr "preusmjeravanje"
-
-#: .\contrib\redirects\models.py:14
-msgid "redirects"
-msgstr "preusmjeravanja"
-
-#: .\contrib\sessions\models.py:45
-msgid "session key"
-msgstr "ključ sesije"
-
-#: .\contrib\sessions\models.py:47
-msgid "session data"
-msgstr "podaci sesije"
-
-#: .\contrib\sessions\models.py:48
-msgid "expire date"
-msgstr "datum isteka"
-
-#: .\contrib\sessions\models.py:53
-msgid "session"
-msgstr "sesija"
-
-#: .\contrib\sessions\models.py:54
-msgid "sessions"
-msgstr "sesije"
-
-#: .\contrib\sites\models.py:32
-msgid "domain name"
-msgstr "ime domena"
-
-#: .\contrib\sites\models.py:33
-msgid "display name"
-msgstr "prikazano ime"
-
-#: .\contrib\sites\models.py:39
-msgid "sites"
-msgstr "sajtovi"
-
-#: .\core\validators.py:20 .\forms\fields.py:66
-msgid "Enter a valid value."
-msgstr "Unesite ispravnu vrijednost."
-
-#: .\core\validators.py:87 .\forms\fields.py:529
-msgid "Enter a valid URL."
-msgstr "Unesite ispravan URL."
-
-#: .\core\validators.py:89 .\forms\fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Ovaj URL izgleda ne vodi nikuda."
-
-#: .\core\validators.py:123 .\forms\fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Unesite ispravan „slug“, koji se sastoji od slova, brojki, donjih crta ili "
-"crtica."
-
-#: .\core\validators.py:126 .\forms\fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Unesite ispravnu IPv4 adresu."
-
-#: .\core\validators.py:129 .\db\models\fields\__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Unesite samo brojke razdvojene zapetama."
-
-#: .\core\validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Pobrinite se da je ova vrijednost %(limit_value)s (trenutno je %(show_value)s)."
-
-#: .\core\validators.py:153 .\forms\fields.py:205 .\forms\fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Ova vrijednost mora da bude manja ili jednaka %(limit_value)s."
-
-#: .\core\validators.py:158 .\forms\fields.py:206 .\forms\fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Ova vrijednost mora biti veća ili jednaka %(limit_value)s."
-
-#: .\core\validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Pobrinite se da ova vrijednost ima najmanje %(limit_value)d znamenki (trenutno ima %"
-"(show_value)d)."
-
-#: .\core\validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Pobrinite se da ova vrijednost ima najviše %(limit_value)d znamenki (ima %"
-"(show_value)d)."
-
-#: .\db\models\base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s mora da bude jedinstven za %(date_field)s %(lookup)s."
-
-#: .\db\models\base.py:837 .\db\models\base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s sa ovom vrijednošću %(field_label)s već postoji."
-
-#: .\db\models\fields\__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Vrijednost %r nije dozvoljen izbor."
-
-#: .\db\models\fields\__init__.py:64
-msgid "This field cannot be null."
-msgstr "Ovo polje ne može ostati prazno."
-
-#: .\db\models\fields\__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Ovo polje ne može biti prazno."
-
-#: .\db\models\fields\__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Polje tipa: %(field_type)s"
-
-#: .\db\models\fields\__init__.py:451 .\db\models\fields\__init__.py:852
-#: .\db\models\fields\__init__.py:961 .\db\models\fields\__init__.py:972
-#: .\db\models\fields\__init__.py:999
-msgid "Integer"
-msgstr "Cijeo broj"
-
-#: .\db\models\fields\__init__.py:455 .\db\models\fields\__init__.py:850
-msgid "This value must be an integer."
-msgstr "Ova vrijednost mora biti cijelobrojna."
-
-#: .\db\models\fields\__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Ova vrijednost mora biti True ili False."
-
-#: .\db\models\fields\__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Bulova vrijednost (True ili False)"
-
-#: .\db\models\fields\__init__.py:539 .\db\models\fields\__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (najviše %(max_length)s znakova)"
-
-#: .\db\models\fields\__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Cijeli brojevi razdvojeni zapetama"
-
-#: .\db\models\fields\__init__.py:581
-msgid "Date (without time)"
-msgstr "Datum (bez vremena)"
-
-#: .\db\models\fields\__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Unesite ispravan datum u formatu GGGG-MM-DD."
-
-#: .\db\models\fields\__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Neispravan datum: %s"
-
-#: .\db\models\fields\__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Unesite ispravan datum/vrijeme u formatu GGGG-MM-DD ČČ:MM[:ss[.uuuuuu]."
-
-#: .\db\models\fields\__init__.py:669
-msgid "Date (with time)"
-msgstr "Datum (sa vremenom)"
-
-#: .\db\models\fields\__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Ova vrijednost mora biti decimalni broj"
-
-#: .\db\models\fields\__init__.py:737
-msgid "Decimal number"
-msgstr "Decimalni broj"
-
-#: .\db\models\fields\__init__.py:792
-msgid "E-mail address"
-msgstr "Email adresa"
-
-#: .\db\models\fields\__init__.py:799 .\db\models\fields\files.py:220
-#: .\db\models\fields\files.py:331
-msgid "File path"
-msgstr "Putanja fajla"
-
-#: .\db\models\fields\__init__.py:822
-msgid "This value must be a float."
-msgstr "Ova vrijednost mora biti broj sa klizećom zapetom"
-
-#: .\db\models\fields\__init__.py:824
-msgid "Floating point number"
-msgstr "Broj sa pokrenom zapetom"
-
-#: .\db\models\fields\__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Big (8 bajtni) integer"
-
-#: .\db\models\fields\__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Ova vrijednost mora biti ili None, ili True, ili False."
-
-#: .\db\models\fields\__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Bulova vrijednost (True, False ili None)"
-
-#: .\db\models\fields\__init__.py:1005
-msgid "Text"
-msgstr "Tekst"
-
-#: .\db\models\fields\__init__.py:1021
-msgid "Time"
-msgstr "Vrijeme"
-
-#: .\db\models\fields\__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Unesite ispravno vrijeme u formatu ČČ:MM[:ss[.uuuuuu]]."
-
-#: .\db\models\fields\__init__.py:1109
-msgid "XML text"
-msgstr "XML tekst"
-
-#: .\db\models\fields\related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Model %(model)s sa pk %(pk)r ne postoji."
-
-#: .\db\models\fields\related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Strani ključ (tip određen povezanim poljem)"
-
-#: .\db\models\fields\related.py:918
-msgid "One-to-one relationship"
-msgstr "Jedan-na-jedan odnos"
-
-#: .\db\models\fields\related.py:980
-msgid "Many-to-many relationship"
-msgstr "Više-na-više odsnos"
-
-#: .\db\models\fields\related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Držite „Control“, ili „Command“ na Mac-u da biste obilježili više od jedne "
-"stavke."
-
-#: .\db\models\fields\related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Unesite ispravan %(self)s IDs. Crijednost %(value)r je neispravna."
-msgstr[1] "Unesite ispravan %(self)s IDs. Vrijednosti %(value)r su neispravne."
-msgstr[2] "Unesite ispravan %(self)s IDs. Vrijednosti %(value)r su neispravne."
-
-#: .\forms\fields.py:65
-msgid "This field is required."
-msgstr "Ovo polje se mora popuniti."
-
-#: .\forms\fields.py:204
-msgid "Enter a whole number."
-msgstr "Unesite cijeo broj."
-
-#: .\forms\fields.py:235 .\forms\fields.py:256
-msgid "Enter a number."
-msgstr "Unesite broj."
-
-#: .\forms\fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Ne smije biti ukupno više od %s cifara. Provjerite."
-
-#: .\forms\fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Ne smije biti ukupno više od %s decimalnih mijesta. Provjerite."
-
-#: .\forms\fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Ne smije biti ukupno više od %s cifara prije zapete. Provjerite."
-
-#: .\forms\fields.py:323 .\forms\fields.py:838
-msgid "Enter a valid date."
-msgstr "Unesite ispravan datum."
-
-#: .\forms\fields.py:351 .\forms\fields.py:839
-msgid "Enter a valid time."
-msgstr "Unesite ispravno vrijeme"
-
-#: .\forms\fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Unesite ispravan datum/vrijeme."
-
-#: .\forms\fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Fajl nije prebačen. Provjerite tip enkodiranja formulara."
-
-#: .\forms\fields.py:436
-msgid "No file was submitted."
-msgstr "Fajl nije prebačen."
-
-#: .\forms\fields.py:437
-msgid "The submitted file is empty."
-msgstr "Prebačen fajl je prazan."
-
-#: .\forms\fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Naziv fajla mora da sadrži bar %(max)d slovnih mijesta (trenutno ima %"
-"(length)d)."
-
-#: .\forms\fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Prebacite ispravan fajl. Fajl koji je prebačen ili nije slika, ili je "
-"oštećen."
-
-#: .\forms\fields.py:596 .\forms\fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"%(value)s nije među ponuđenim vrijednostima. Odaberite jednu od ponuđenih."
-
-#: .\forms\fields.py:672 .\forms\fields.py:734 .\forms\models.py:1007
-msgid "Enter a list of values."
-msgstr "Unesite listu vrijednosti."
-
-#: .\forms\formsets.py:298 .\forms\formsets.py:300
-msgid "Order"
-msgstr "Redoslijed"
-
-#: .\forms\models.py:567
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Ispravite dupli sadržaj za polja: %(field)s."
-
-#: .\forms\models.py:571
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Ispravite dupli sadržaj za polja: %(field)s, koji mora da bude jedinstven."
-
-#: .\forms\models.py:577
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Ispravite dupli sadržaj za polja: %(field_name)s, koji mora da bude "
-"jedinstven za %(lookup)s u %(date_field)s."
-
-#: .\forms\models.py:585
-msgid "Please correct the duplicate values below."
-msgstr "Ispravite duple vrijednosti dole."
-
-#: .\forms\models.py:860
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Strani ključ se nije poklopio sa instancom roditeljskog ključa."
-
-#: .\forms\models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Odabrana vrijednost nije među ponuđenima. Odaberite jednu od ponuđenih."
-
-#: .\forms\models.py:1008
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "%s nije među ponuđenim vrijednostima. Odaberite jednu od ponuđenih."
-
-#: .\forms\models.py:1010
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "„%s“ nije ispravna vrijednost za primarni ključ."
-
-#: .\template\defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "da,ne,možda"
-
-#: .\template\defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bajt"
-msgstr[1] "%(size)d bajta"
-msgstr[2] "%(size)d bajtova"
-
-#: .\template\defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: .\template\defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: .\template\defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: .\utils\dateformat.py:42
-msgid "p.m."
-msgstr "po p."
-
-#: .\utils\dateformat.py:43
-msgid "a.m."
-msgstr "prije p."
-
-#: .\utils\dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: .\utils\dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: .\utils\dateformat.py:98
-msgid "midnight"
-msgstr "ponoć"
-
-#: .\utils\dateformat.py:100
-msgid "noon"
-msgstr "podne"
-
-#: .\utils\dates.py:6
-msgid "Monday"
-msgstr "ponedjeljak"
-
-#: .\utils\dates.py:6
-msgid "Tuesday"
-msgstr "utorak"
-
-#: .\utils\dates.py:6
-msgid "Wednesday"
-msgstr "srijeda"
-
-#: .\utils\dates.py:6
-msgid "Thursday"
-msgstr "četvrtak"
-
-#: .\utils\dates.py:6
-msgid "Friday"
-msgstr "petak"
-
-#: .\utils\dates.py:7
-msgid "Saturday"
-msgstr "subota"
-
-#: .\utils\dates.py:7
-msgid "Sunday"
-msgstr "nedjelja"
-
-#: .\utils\dates.py:10
-msgid "Mon"
-msgstr "pon."
-
-#: .\utils\dates.py:10
-msgid "Tue"
-msgstr "uto."
-
-#: .\utils\dates.py:10
-msgid "Wed"
-msgstr "sri."
-
-#: .\utils\dates.py:10
-msgid "Thu"
-msgstr "čet."
-
-#: .\utils\dates.py:10
-msgid "Fri"
-msgstr "pet."
-
-#: .\utils\dates.py:11
-msgid "Sat"
-msgstr "sub."
-
-#: .\utils\dates.py:11
-msgid "Sun"
-msgstr "ned."
-
-#: .\utils\dates.py:18
-msgid "January"
-msgstr "januar"
-
-#: .\utils\dates.py:18
-msgid "February"
-msgstr "februar"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "March"
-msgstr "mart"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "April"
-msgstr "april"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "May"
-msgstr "maj"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "June"
-msgstr "juni"
-
-#: .\utils\dates.py:19 .\utils\dates.py:31
-msgid "July"
-msgstr "juli"
-
-#: .\utils\dates.py:19
-msgid "August"
-msgstr "august"
-
-#: .\utils\dates.py:19
-msgid "September"
-msgstr "septembar"
-
-#: .\utils\dates.py:19
-msgid "October"
-msgstr "oktobar"
-
-#: .\utils\dates.py:19
-msgid "November"
-msgstr "novembar"
-
-#: .\utils\dates.py:20
-msgid "December"
-msgstr "decembar"
-
-#: .\utils\dates.py:23
-msgid "jan"
-msgstr "jan."
-
-#: .\utils\dates.py:23
-msgid "feb"
-msgstr "feb."
-
-#: .\utils\dates.py:23
-msgid "mar"
-msgstr "mar."
-
-#: .\utils\dates.py:23
-msgid "apr"
-msgstr "apr."
-
-#: .\utils\dates.py:23
-msgid "may"
-msgstr "maj."
-
-#: .\utils\dates.py:23
-msgid "jun"
-msgstr "jun."
-
-#: .\utils\dates.py:24
-msgid "jul"
-msgstr "jul."
-
-#: .\utils\dates.py:24
-msgid "aug"
-msgstr "aug."
-
-#: .\utils\dates.py:24
-msgid "sep"
-msgstr "sep."
-
-#: .\utils\dates.py:24
-msgid "oct"
-msgstr "okt."
-
-#: .\utils\dates.py:24
-msgid "nov"
-msgstr "nov."
-
-#: .\utils\dates.py:24
-msgid "dec"
-msgstr "dec."
-
-#: .\utils\dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: .\utils\dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: .\utils\dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: .\utils\dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: .\utils\dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: .\utils\dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: .\utils\dates.py:32
-msgid "Dec."
-msgstr "dec."
-
-#: .\utils\text.py:130
-msgid "or"
-msgstr "ili"
-
-#: .\utils\timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "godina"
-msgstr[1] "godine"
-msgstr[2] "godina"
-
-#: .\utils\timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mjesec"
-msgstr[1] "mjeseca"
-msgstr[2] "mjeseci"
-
-#: .\utils\timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "nedelja"
-msgstr[1] "nedelje"
-msgstr[2] "nedelja"
-
-#: .\utils\timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dan"
-msgstr[1] "dana"
-msgstr[2] "dana"
-
-#: .\utils\timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "sat"
-msgstr[1] "sata"
-msgstr[2] "sati"
-
-#: .\utils\timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minut"
-msgstr[1] "minute"
-msgstr[2] "minuta"
-
-#: .\utils\timesince.py:45
-msgid "minutes"
-msgstr "minuta"
-
-#: .\utils\timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: .\utils\timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: .\utils\translation\trans_real.py:512
-msgid "DATE_FORMAT"
-msgstr "j. N Y."
-
-#: .\utils\translation\trans_real.py:513
-msgid "DATETIME_FORMAT"
-msgstr "j. N. Y. G:i T"
-
-#: .\utils\translation\trans_real.py:514
-msgid "TIME_FORMAT"
-msgstr "G:i"
-
-#: .\utils\translation\trans_real.py:535
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y."
-
-#: .\utils\translation\trans_real.py:536
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: .\views\generic\create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s je uspješno kreiran."
-
-#: .\views\generic\create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s je uspješno ažuriran."
-
-#: .\views\generic\create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s je obrisan."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Jedno ili više polja %(fieldname)s u %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Jedno ili više polja %(fieldname)s u %(name)s"
-
-#~ msgid "Old password:"
-#~ msgstr "Stara lozinka:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Veza sa roditeljskim modelom"
-
-#~ msgid "Add user"
-#~ msgstr "Dodaj korisnika"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Komentari koji čekaju na odobrenje"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "Nema komentara na čekanju"
-
-#~ msgid "Email"
-#~ msgstr "Imejl adresa"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Prijavljen?"
-
-#~ msgid "IP Address"
-#~ msgstr "IP adresa"
-
-#~ msgid "Date posted"
-#~ msgstr "Datum postavljanja"
-
-#~ msgid "yes"
-#~ msgstr "da"
-
-#~ msgid "no"
-#~ msgstr "ne"
diff --git a/parts/django/django/conf/locale/bs/__init__.py b/parts/django/django/conf/locale/bs/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/bs/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/bs/formats.py b/parts/django/django/conf/locale/bs/formats.py
deleted file mode 100644
index fc21ff8..0000000
--- a/parts/django/django/conf/locale/bs/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. N Y.'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j. N. Y. G:i T'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'Y M j'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/ca/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ca/LC_MESSAGES/django.mo
deleted file mode 100644
index 457a828..0000000
--- a/parts/django/django/conf/locale/ca/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ca/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ca/LC_MESSAGES/django.po
deleted file mode 100644
index f8cd8aa..0000000
--- a/parts/django/django/conf/locale/ca/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4490 +0,0 @@
-# translation of django.po to
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-30 11:19+0100\n"
-"PO-Revision-Date: 2009-03-24 13:28+0100\n"
-"Last-Translator: Django Catalan Group <django-cat@googlegroups.com>\n"
-"Language-Team: Catalan <ca@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "aràbic"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "bengalí"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "búlgar"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "català"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "txec"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "galès"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "danès"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "alemany"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "grec"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "anglès"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "espanyol"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estonià"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "castellà argentí"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "euskera"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "persa"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "finlandès"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "francès"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "irlandès"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "gallec"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "húngar"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "hebreu"
-
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "hindi"
-
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "croat"
-
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandès"
-
-#: conf/global_settings.py:68
-msgid "Italian"
-msgstr "italià"
-
-#: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "japonès"
-
-#: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "georgià"
-
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "coreà"
-
-#: conf/global_settings.py:72
-msgid "Khmer"
-msgstr "khmer"
-
-#: conf/global_settings.py:73
-msgid "Kannada"
-msgstr "canès"
-
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "letó"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "lituà"
-
-#: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "macedoni"
-
-#: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "holandès"
-
-#: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "norueg"
-
-#: conf/global_settings.py:79
-msgid "Polish"
-msgstr "polac"
-
-#: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr "portuguès"
-
-#: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "portuguès de brasil"
-
-#: conf/global_settings.py:82
-msgid "Romanian"
-msgstr "rumanès"
-
-#: conf/global_settings.py:83
-msgid "Russian"
-msgstr "rús"
-
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "eslovac"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "esloveni"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "serbi"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "suec"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "tàmil"
-
-#: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:90
-msgid "Thai"
-msgstr "tailandès"
-
-#: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "turc"
-
-#: conf/global_settings.py:92
-msgid "Ukrainian"
-msgstr "ucranià"
-
-#: conf/global_settings.py:93
-msgid "Simplified Chinese"
-msgstr "xinès simplificat"
-
-#: conf/global_settings.py:94
-msgid "Traditional Chinese"
-msgstr "xinès tradicional"
-
-#: contrib/admin/actions.py:60
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Eliminat/s %(count)d %(items)s satisfactòriament."
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1033
-msgid "Are you sure?"
-msgstr "Esteu segurs?"
-
-#: contrib/admin/actions.py:85
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Eliminar els %(verbose_name_plural)s seleccionats"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Per %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Tots"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Qualsevol data"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Avui"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Últims 7 dies"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Aquest mes"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Aquest any"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "Yes"
-msgstr "Si"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "No"
-msgstr "No"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
-msgid "Unknown"
-msgstr "Desconegut"
-
-#: contrib/admin/helpers.py:14
-msgid "Action:"
-msgstr "Acció:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "moment de l'acció"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id del objecte"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "'repr' de l'objecte"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "marca de l'acció"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "missatge del canvi"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "entrada del registre"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "entrades del registre"
-
-#: contrib/admin/options.py:134 contrib/admin/options.py:148
-msgid "None"
-msgstr "cap"
-
-#: contrib/admin/options.py:521
-#, python-format
-msgid "Changed %s."
-msgstr "Modificat %s."
-
-#: contrib/admin/options.py:521 contrib/admin/options.py:531
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:384
-#: forms/models.py:596
-msgid "and"
-msgstr "i"
-
-#: contrib/admin/options.py:526
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Afegit %(name)s \"%(object)s\""
-
-#: contrib/admin/options.py:530
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Modificat %(list)s per a %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:535
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Eliminat %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:539
-msgid "No fields changed."
-msgstr "Cap camp canviat."
-
-#: contrib/admin/options.py:601 contrib/auth/admin.py:67
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "El/la %(name)s \"%(obj)s\".ha estat afegit/da amb èxit."
-
-#: contrib/admin/options.py:605 contrib/admin/options.py:638
-#: contrib/auth/admin.py:75
-msgid "You may edit it again below."
-msgstr "Podeu editar-lo de nou a baix."
-
-#: contrib/admin/options.py:615 contrib/admin/options.py:648
-#, python-format
-msgid "You may add another %s below."
-msgstr "Podeu afegir un altre %s a baix."
-
-#: contrib/admin/options.py:636
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "S'ha modificat amb èxit el/la %(name)s \"%(obj)s."
-
-#: contrib/admin/options.py:644
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"S'ha afegit exitosament el/la %(name)s \"%(obj)s\". Pot editar-lo de nou "
-"abaix."
-
-#: contrib/admin/options.py:777
-#, python-format
-msgid "Add %s"
-msgstr "Afegir %s"
-
-#: contrib/admin/options.py:809 contrib/admin/options.py:1011
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "No existèix cap objecte %(name)s amb la clau primària %(key)r."
-
-#: contrib/admin/options.py:866
-#, python-format
-msgid "Change %s"
-msgstr "Modificar %s"
-
-#: contrib/admin/options.py:910
-msgid "Database error"
-msgstr "Error de base de dades"
-
-#: contrib/admin/options.py:946
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s s'ha modificat amb èxit."
-msgstr[1] "%(count)s %(name)s s'han modificat amb èxit."
-
-#: contrib/admin/options.py:1026
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "El/la %(name)s \"%(obj)s\" ha estat eliminat amb èxit."
-
-#: contrib/admin/options.py:1063
-#, python-format
-msgid "Change history: %s"
-msgstr "Modificar històric: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Si us plau, introduïu un nom d'usuari i contrasenya vàlids. Tingueu en "
-"compte que tots dos camps son sensibles a majúscules i minúscules."
-
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Si us plau, identifiqueu-vos de nou doncs la vostra sessió ha expirat."
-
-#: contrib/admin/sites.py:299 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Sembla ser que el vostre navegador no està configurat per acceptar "
-"'cookies' (galetes). Si us plau, habiliteu les 'cookies', recarregueu "
-"aquesta pàgina i proveu-ho de nou. "
-
-#: contrib/admin/sites.py:315 contrib/admin/sites.py:321
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Els noms d'usuari no poden contenir el caracter '@'."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"La vostra adreça de correu no és el vostre nom d'usuari. Provi '%s' en tot "
-"cas."
-
-#: contrib/admin/sites.py:374
-msgid "Site administration"
-msgstr "Lloc administratiu"
-
-#: contrib/admin/sites.py:388 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Iniciar sessió"
-
-#: contrib/admin/sites.py:433
-#, python-format
-msgid "%s administration"
-msgstr "Administració de %s"
-
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Un o més %(fieldname)s en %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Un o més %(fieldname)s en %(name)s:"
-
-#: contrib/admin/widgets.py:72
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/widgets.py:72
-msgid "Time:"
-msgstr "Hora:"
-
-#: contrib/admin/widgets.py:96
-msgid "Currently:"
-msgstr "Actualment:"
-
-#: contrib/admin/widgets.py:96
-msgid "Change:"
-msgstr "Modificar:"
-
-#: contrib/admin/widgets.py:125
-msgid "Lookup"
-msgstr "Cercar"
-
-#: contrib/admin/widgets.py:237
-msgid "Add Another"
-msgstr "Afegir un altre"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "No s'ha pogut trobar la pàgina"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Ho sentim, però no s'ha pogut trobar la pàgina sol·licitada"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Inici"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Error del servidor"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Error del servidor (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Error del servidor <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Ha ocorregut un error. S'ha informat als administradors del lloc per correu "
-"electrònic y hauria d'arreglar-se en breu. Gràcies per la vostra paciència."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Executar la acció seleccionada"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Anar"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr "Benvingut/da,"
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentació"
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "Canviar contrasenya"
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "Finalitzar sessió"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Lloc administratiu de Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administració de Django"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Afegir"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Històric"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Veure al lloc"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Si us plau, corregiu l'error mostrat a baix."
-msgstr[1] "Si us plau, corregiu els errors mostrats a baix."
-
-#: contrib/admin/templates/admin/change_list.html:46
-#, python-format
-msgid "Add %(name)s"
-msgstr "Afegir %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:65
-msgid "Filter"
-msgstr "Filtre"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
-msgid "Delete"
-msgstr "Eliminar"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Eliminar el/la %(object_name)s '%(escaped_object)s' provocaria l'eliminació "
-"d'objectes relacionats, però el vostre compte no te permissos per a esborrar "
-"els tipus d'objecte següents:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Esteu segurs de voler esborrar els/les %(object_name)s \"%(escaped_object)s"
-"\"? S'esborraran els següents elements relacionats:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Si, estic segur"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Eliminar multiples objectes"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Eliminar el/la %(object_name)s provocaria l'eliminació d'objectes "
-"relacionats, però el vostre compte no te permissos per a esborrar els tipus "
-"d'objecte següents:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Esteu segurs de voler esborrar els/les %(object_name)s seleccionats? Tots "
-"aquests objectes i els seus elements relacionats s'esborraran:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Per %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Models disponibles a l'aplicació %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Modificar"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "No teniu permís per editar res."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Accions recents"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Les meves accions"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Cap disponible"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Contingut desconegut"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Alguna cosa està malament en la instal·lació de la vostra base de dades. "
-"Assegureu-vos de que s'han creat les taules, i de que la base de dades és "
-"llegible per l'usuari apropiat."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Usuari:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Contrasenya:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Data/hora"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Usuari"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Acció"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j \\de F \\de Y, H:i"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Aquest objecte no té historial de canvis. Probablement no va ser afegit "
-"utilitzant aquest lloc administratiu."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Mostrar tots"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Desar"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Cerca"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultat"
-msgstr[1] "%(counter)s resultats"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s en total"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Desar com a nou"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Desar i afegir-ne un de nou"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Desar i continuar editant"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Primer, entreu un usuari i una contrasenya. Després podreu editar més "
-"opcions de l'usuari."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Usuari"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Contrasenya"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Contrasenya (de nou)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Introduïu la mateixa contrasenya de dalt, per fer-ne la verificació."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Introduïu una contrasenya per l'usuari <strong>%(username)s</strong>"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Eliminar?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Gràcies per destinar el vostre temps en el web durant el dia d'avui."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Iniciar sessió de nou"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Canvi de contrasenya"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Contrasenya canviada amb èxit"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "La seva contrasenya ha estat canviada."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Si us plau, introduïu la vostra contrasenya antiga, per seguretat, i tot "
-"seguit introduïu la vostra contrasenya nova dues vegades per verificar que "
-"l'heu escrit correctament."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Contrasenya antiga:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Contrasenya nova:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirmar contrasenya:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Canviar la meva clau:"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Restablir contrasenya"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Contrasenya restablerta"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-"La seva contrasenya ha estat canviada. Ara pot continuar i iniciar sessió."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Confirmació de reestabliment de contrasenya"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Introdueixi la nova contrasenya"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Si us plau, introduïu la vostra nova contrasenya dues vegades, per verificar "
-"que l'heu escrit correctament."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Restabliment de contrasenya fallit"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"L'enllaç de restabliment de contrasenya era invàlid, segurament ja deu haver "
-"estat utilitzat. Per favor, soliciti un nou reestabliment de contrasenya."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Restabliment de contrasenya exitós"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Us hem enviat les instruccions per canviar la vostra contrasenya a l'adreça "
-"de correu electrònic que ens heu indicat. L'haurieu de rebre en breu."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Esteu rebent aquest missatge degut a que veu solicitar un restabliment de "
-"contrasenya."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "del vostre compte d'usuari a %(site_name)s."
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Si us plau, adrecis a la pàgina següen i esculli una nova contrasenya:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "El vostre nom d'usuari, en cas d'haver-lo oblidat:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Gràcies per fer us del nostre lloc!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "L'equip de %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Heu oblidat la vostra contrasenya? Introduïu la vostra adreça de correu "
-"electrònic i li enviarem instruccions per canviar-la."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Adreça de correu electrònic:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Restablir la meva contrasenya"
-
-#: contrib/admin/templatetags/admin_list.py:304
-msgid "All dates"
-msgstr "Totes les dates"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Seleccioneu %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Seleccioneu %s per modificar"
-
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
-msgid "site"
-msgstr "lloc"
-
-#: contrib/admin/views/template.py:39
-msgid "template"
-msgstr "plantilla"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "etiqueta:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtre:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "vista:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "No s'ha pogut trobar l'aplicació %r"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "El model %(model_name)r no s'ha trobat en l'aplicació %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "l'objecte relacionat `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "objectes relacionats `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "tots %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "nombre de %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Camps en objectes %s"
-
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Enter"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Booleà (Verdader o Fals)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Cadena (de fins a %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Enters separats per comes"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Data (sense hora)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Data (amb hora)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "Adreça de correu electrònic"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Ruta del fitxer"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Número amb punt de coma flotant"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "Adreça IP"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleà (Verdader, Fals o 'None' (cap))"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relació amb el model pare"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Número de telèfon"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Text"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Hora"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estat dels E.U.A. (dues lletres majúscules)"
-
-#: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "Text XML"
-
-#: contrib/admindocs/views.py:387
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s no sembla ser un objecte 'urlpattern'"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "'Bookmarklets'"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "'Bookmarklets' de documentació"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Per a instal·lar 'bookmarklets', arrosegueu l'enllaç a la "
-"seva barra de\n"
-"marcadors, o feu click amb el botó dret en l'enllaç i afegeixi'l als "
-"marcadors.\n"
-"Ara podeu escollir el 'bookmarklet' des de qualsevol pàgina del lloc.\n"
-"Observeu que alguns d'aquests 'bookmarklets' precisen que estigui veient\n"
-"el lloc des de un ordinador senyalat com a \"intern\" (parleu\n"
-"amb el vostre administrador de sistemes si no esteu segurs de la condició "
-"del vostre).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentació d'aquesta pàgina"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Us porta des de qualsevol pàgina de la documentació a la vista que la genera."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Mostra el ID de l'objecte"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Mostra el 'content-type' (tipus de contingut) i el ID inequívoc de les "
-"pàgines que representen un únic objecte."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Editar aquest objecte (finestra actual)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"El porta a la pàgina d'administració de pàgines que representen un únic "
-"objecte."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Editar aquest objecte (nova finestra)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Com abans, però obre la pàgina d'administració en una nova finestra."
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "Informació personal"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "permisos"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "Dates importants"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "Grups"
-
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Afegir usuari"
-
-#: contrib/auth/admin.py:106
-msgid "Password changed successfully."
-msgstr "Contrasenya cambiada amb èxit"
-
-#: contrib/auth/admin.py:112
-#, python-format
-msgid "Change password: %s"
-msgstr "Canviar contrasenya: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Obligatori. 30 o menys caràcters. Només caràcters alfanumèrics (lletres, "
-"dígits i el guió baix)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Aquest valor ha de contenir només lletres, números i guions baixos."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Confirmació de contrasenya"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "Ja existeix un usuari amb aquest nom."
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
-msgid "The two password fields didn't match."
-msgstr "Els dos camps de contrasenya no coincideixen."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "Aquest compte està inactiu"
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"El seu navegador no sembla tenir les 'cookies' (galetes) activades. Aquestes "
-"són necessàries per iniciar la sessió."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "Correu electrònic"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Aquesta adreça de correu no té associada cap compte d'usuari. Esteu segurs "
-"de que s'ha registrat?"
-
-#: contrib/auth/forms.py:135
-#, python-format
-msgid "Password reset on %s"
-msgstr "Restablir contrasenya en %s"
-
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Contrasenya nova"
-
-#: contrib/auth/forms.py:144
-msgid "New password confirmation"
-msgstr "Contrasenya nova confirmada"
-
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Contrasenya antiga"
-
-#: contrib/auth/forms.py:177
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"La seva antiga contrasenya no és correcte. Si el plau, introduïu-la de nou."
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
-msgid "name"
-msgstr "nom"
-
-#: contrib/auth/models.py:65
-msgid "codename"
-msgstr "nom en clau"
-
-#: contrib/auth/models.py:68
-msgid "permission"
-msgstr "permís"
-
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
-msgid "permissions"
-msgstr "permisos"
-
-#: contrib/auth/models.py:90
-msgid "group"
-msgstr "grup"
-
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
-msgid "groups"
-msgstr "grups"
-
-#: contrib/auth/models.py:128
-msgid "username"
-msgstr "nom d'usuari"
-
-#: contrib/auth/models.py:129
-msgid "first name"
-msgstr "nom propi"
-
-#: contrib/auth/models.py:130
-msgid "last name"
-msgstr "cognoms"
-
-#: contrib/auth/models.py:131
-msgid "e-mail address"
-msgstr "adreça de correu electrònic"
-
-#: contrib/auth/models.py:132
-msgid "password"
-msgstr "contrasenya"
-
-#: contrib/auth/models.py:132
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Utilitzeu '[algo]$[salt]$[hexdigest]' o el <a href=\"password/\">formulari "
-"de canvi de contrasenya</a>."
-
-#: contrib/auth/models.py:133
-msgid "staff status"
-msgstr "membre del personal"
-
-#: contrib/auth/models.py:133
-msgid "Designates whether the user can log into this admin site."
-msgstr "Indica si l'usuari pot entrar en el lloc administratiu."
-
-#: contrib/auth/models.py:134
-msgid "active"
-msgstr "actiu"
-
-#: contrib/auth/models.py:134
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Designa si aquest usuari ha de ser tractat com a actiu. Deseleccioneu-ho "
-"enlloc d'esborrar comptes d'usuari."
-
-#: contrib/auth/models.py:135
-msgid "superuser status"
-msgstr "estat de superusuari"
-
-#: contrib/auth/models.py:135
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Designa que aquest usuari té tots els permissos sense assignar-los "
-"explícitament."
-
-#: contrib/auth/models.py:136
-msgid "last login"
-msgstr "últim inici de sessió"
-
-#: contrib/auth/models.py:137
-msgid "date joined"
-msgstr "data de creació"
-
-#: contrib/auth/models.py:139
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els "
-"permissos dels grups dels que sigui membre."
-
-#: contrib/auth/models.py:140
-msgid "user permissions"
-msgstr "permissos de l'usuari"
-
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "usuari"
-
-#: contrib/auth/models.py:145
-msgid "users"
-msgstr "usuaris"
-
-#: contrib/auth/models.py:301
-msgid "message"
-msgstr "missatge"
-
-#: contrib/auth/views.py:60
-msgid "Logged out"
-msgstr "Sessió finalitzada"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Introduïu una adreça de correu vàlida."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "contingut"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "metadades"
-
-# Context problem... waitting for comments from django-i18n
-#: contrib/comments/admin.py:39
-msgid "flagged"
-msgstr "marcat"
-
-#: contrib/comments/admin.py:40
-msgid "Flag selected comments"
-msgstr "Marcar els comentaris seleccionats"
-
-#: contrib/comments/admin.py:43
-msgid "approved"
-msgstr "aprovat"
-
-#: contrib/comments/admin.py:44
-msgid "Approve selected comments"
-msgstr "Aprovar els comentaris seleccionats"
-
-#: contrib/comments/admin.py:47
-msgid "removed"
-msgstr "eliminat"
-
-#: contrib/comments/admin.py:48
-msgid "Remove selected comments"
-msgstr "Eliminar els comentaris seleccionats"
-
-#: contrib/comments/admin.py:60
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 comentari ha estat %(action)s satisfactòriament."
-msgstr[1] "%(count)s comentaris han estat %(action)s satisfactòriament."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "comentaris de %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Últims comentaris a %(site_name)s."
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "nom"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Adreça de correu electrònic"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Comentari"
-
-#: contrib/comments/forms.py:173
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Vigileu amb el vostre llenguatge! Aquí no s'admet la paraula: %s."
-msgstr[1] ""
-"Vigileu amb el vostre llenguatge! Aquí no s'admeten les paraules: %s."
-
-#: contrib/comments/forms.py:180
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Si entreu cualsevol cosa en aquest camp el vostre comentari es tractarà com "
-"a spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
-msgid "content type"
-msgstr "tipus de contingut"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID de l'objecte"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nom d'usuari"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "adreça de correu electrònic del usuari"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL del usuari"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "comentari"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "data/hora d'enviament"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "és públic"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Desmarqui aquesta casella per fer desaparèixar aquest comentari del lloc web "
-"de forma efectiva."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "està eliminat"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Marqueu aquesta caixa si el comentari no és apropiat. En lloc seu es "
-"mostrarà \"Aquest comentari ha estat eliminat\" "
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "comentaris"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Aquest comentari va ser publicat per un usuari autentificat, per això el seu "
-"nom no es modificable."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Aquest comentari va ser publicat per un usuari autentificat, per això la "
-"seva adreça de correu electrònic no es pot modificar."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Enviat per %(user)s el %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-# Context problem... waitting for comments from django-i18n
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "marcar"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "data"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "marca del comentari"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "marques de comentari"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Aprovar un comentari"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Realment vol fer aquest comentari públic?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Aprovar"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Gràcies per aprovar"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Gràcies per dedicar el temps a millorar la qualitat del debat al nostre lloc"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Eliminar un comentaris"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Realment vol eliminar aquest comentari?"
-
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Eliminar"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Gràcies per eliminar"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Marcar aquest comentari"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Realment vol marcar aquest comentari?"
-
-# Context problem... waitting for comments from django-i18n
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Marcar"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Gràcies per marcar"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Publicar"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Vista prèvia"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Gràcies per comentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Gràcies pel seu comentari"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Previsualitzar el seu comentari"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Si us plau, corregiu l'error mostrat a baix."
-msgstr[1] "Si us plau, corregiu els errors mostrats a baix."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Enviar el seu comentari"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "o faci canvis."
-
-#: contrib/contenttypes/models.py:70
-msgid "python model class name"
-msgstr "nom de la classe del model en python"
-
-#: contrib/contenttypes/models.py:75
-msgid "content types"
-msgstr "tipus de continguts"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Exemple: '/about/contact/'. Assegureu-vos de posar les barres al principi i "
-"al final."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Aquest valor ha de contenir només lletres, números, guions baixos, guions i "
-"barres (/)."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opcions avançades"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "títol"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "contingut"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "habilitar comentaris"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nom de la plantilla"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Exemple: 'flatpages/contact_page.html'. Si no es proporciona, el sistema "
-"utilitzarà 'flatpages/default.htmlt'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "cal estar registrat"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Si està marcat, només els usuaris registrats podran veure la pàgina."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "pàgina estàtica"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "pàgines estàtiques"
-
-#: contrib/formtools/wizard.py:132
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Ho sentim, pero el seu formulari ha expirat. Per favor, continui omplint el "
-"formulari en aquesta pàgina."
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "No s'ha indicat cap valor de geometria."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Valor de geometria invàlid."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tipus de geometria invàlid."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Ha ocurregut un error al transformar la geometria al SRID de la geometria "
-"del camp de formulari."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "rt"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "r"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "n"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "r"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milió"
-msgstr[1] "%(value).1f milions"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f bilió"
-msgstr[1] "%(value).1f bilions"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilió"
-msgstr[1] "%(value).1f trilions"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "un"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dos"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tres"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "quatre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cinc"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "sis"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "set"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "vuit"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "nou"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "avui"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "demà"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "ahir"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Introduïu un codi postal en el format NNNN o ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Aquest camp precisa només números."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Aquest camp precisa 7 o 8 dígits."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-"Introduïu un número CUIT vàlid en el format XX-XXXXXXXX-X o XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "Invàlid CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Lower Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Upper Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Viena"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Introduïu un codi zip en el format XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Introduïu un número vàlid de la Seguretat Social Austriaca en el format XXXX "
-"XXXXXX."
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Introduïu un codi postal de 4 dígits."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Introduïu un codi zip en el format XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "El número de telèfon ha de estar en el format XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Seleccioneu un estat brasiler vàlid. Aquest estat no és un dels estats "
-"disponibles."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Número CPF invàlid."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Aquest camp precisa com a màxim 11 dígits o 14 caracters."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Número CNPJ invàlid."
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Aquest camp precisa almenys 14 dígits."
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Introduïu un codi postal en el format XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Introduïu un número vàlid de la Assegurança Social de Canadà en el format "
-"XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Argau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Inner-Rhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausser-Rhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Ciutat"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Camp"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berna"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Friburg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Ginebra"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerna"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zuric"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Introduïu un número d'identificació o de passaport Suïssos en els formats "
-"1234567890 o X1234567<0."
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Introduïu un RUT Xilè vàlid."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Introduïu un RUT Xilè vàlid. El format és XX.XXX.XXX-X"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "El RUT Xilè no és vàlid."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Regió Bohèmia Central"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Regió Bohèmia Sur"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Regió Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Regió Carlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Regió Usti"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Regió Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Regió Hradec"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Regió Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Regió Vysocina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Regió Moràvia Sur"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Regió Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Regió Zlin"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Regió Moràvia-Silesiana"
-
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Introduïu un codi postal en el format XXXXX or XXX XX."
-
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"Introduïu un número de naixement en el format XXXXXX/XXXX o XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"El paràmetre opcional 'Gènere' és invàlid, els valors vàlids son 'f' i 'm'."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Enter a valid birth number."
-msgstr "Introduïu un número de naixement vàlid."
-
-#: contrib/localflavor/cz/forms.py:106
-msgid "Enter a valid IC number."
-msgstr "Intrduïu un número de IC vàlid."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Baviera"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlín"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Pomerània Occidental"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Baixa Saxònia"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Renània del Nord-Westfàlia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Renània-Palatinat"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxònia"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxònia-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Slesvig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Turíngia"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Introduïu un codi zip en el format XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Introduïu un número de tarjeta d'identificació alemany vàlid en el format "
-"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Àlaba"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Àvila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Càceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadis"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castelló"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Còrdova"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "La Corunya"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Conca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúscoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Osca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Lleó"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Màlaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Múrcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Astúries"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palència"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantàbria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segòvia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Sòria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Terol"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "València"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Biscaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Saragossa"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragó"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principat d'Astúries"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Euskadi"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canàries"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castella-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castella i Lleó"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalunya"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galícia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Regió de Múrcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Comunitat Foral de Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Comunitat Valenciana"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Introduïu un codi postal en rang i format 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Introduïu un número de telèfon vàlid en un dels formats 6XXXXXXXX, 8XXXXXXXX "
-"o 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Si us plau, introduïu un NIF, NIE o CIF vàlid."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Si us plau, introduïu un NIF o NIE vàlid."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Validació invàlida del NIF."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Validació invàlida del NIE."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Validació invàlida del CIF."
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Introduïu un número de compte bancari vàlid en el format XXXX-XXXX-XX-"
-"XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Validació invàlida del número de compte bancari."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Introduïu un número vàlid de la seguretat social finlandesa."
-
-#: contrib/localflavor/fr/forms.py:30
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Els números de telèfon han de estar en el format 0X XX XX XX XX."
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Introduïu un codi zip en el format XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Introduïu un número de identificació d'Islàndia. El format és XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "El número de identificació d'Islàndia no és vàlid."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Introduïu un codi zip vàlid."
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Introduïu un número valid de la Seguretat Social."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Introduïu un número de IVA (VAT) vàlid."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Introduïu un codi postal en el format XXXXXXX o XX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baixa California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baixa California Sud"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Districte Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estat de Mèxic"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Introduïu un codi postal vàlid."
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Introduïu un número de telèfon vàlid."
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Introduïu un número SoFi vàlid."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Introduïu un número de la seguretat social Noruega vàlid."
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Aquest camp precisa 8 dígits."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Aquest camp precisa 11 dígits."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "El número d'identidicació nacional està compost de 11 digits."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Validació invàlida del número d'identificació nacional."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Introduïu un número NIP en el format XXX-XXX-XX-XX o XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Validació invàlida del número tributari (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"El número nacional de registre de negocis (REGON) consisteix en 9 o 14 "
-"dígits."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Validació invàlida del número nacional de registre de negocis."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Introduïu un codi postal en el format XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Introduïu un CIF vàlid."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Introduïu un CNP vàlid."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Introduïu un IBAN vàlid en el format ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "El número de telèfon ha de estar en el format XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Introduïu un codi postal vàlid en el format XXXXXX."
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Regió de Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Regió de Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Regió de Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Regió de Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Regió de Presov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Regió de Trencin"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Regió de Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Regió de Zilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Introdueix un codi postal vàlid."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Comptat de Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Glamorgan Sud"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Glamorgan Oest"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Escòcia central"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Anglaterra"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlanda del Nord"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Escòcia"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Gal·les"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Introduïu un codi zip en el format XXXXX o XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Introduïu un número vàlid de la Seguretat Social dels E.U.A. en el format "
-"XXX-XX-XXXX."
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Introduïu un número d'Identitat Sud Africà valid"
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Introduïu un codi postal Sud Africà vàlid."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Cap Oriental"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Estat lliure"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Cap Nord"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Cap Oest"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Cap Occidental"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redreçar des de"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Aquesta ruta hauria de ser el camí absolut, excloent-ne el nom del domini. "
-"Exemple '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redreçar a"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Això pot ser bé una ruta absoluta (com a dalt) o una URL completa que "
-"comenci per http:// ."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redreçament"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redreçaments"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "clau de la sessió"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "dades de la sessió"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "data de caducitat"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sessió"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessions"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nom del domini"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "nom per mostrar"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "llocs"
-
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Aquest valor ha de ser un enter."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)"
-
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "Aquest camp no pot ser nul."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Introduïu només dígits separats per comes."
-
-#: db/models/fields/__init__.py:474
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduïu una data vàlida en el forma AAAA-MM-DD."
-
-#: db/models/fields/__init__.py:483
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Data invàlida: %s"
-
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Introduïu un data/hora vàlida en format YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:601
-msgid "This value must be a decimal number."
-msgstr "Aquest valor ha de ser un número decimal."
-
-#: db/models/fields/__init__.py:686
-msgid "This value must be a float."
-msgstr "Aquest valor ha de ser un número amb punt de coma flotant."
-
-#: db/models/fields/__init__.py:746
-msgid "This value must be either None, True or False."
-msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)"
-
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Introduïu una hora vàlida en el format HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/related.py:869
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Premeu la tecla \"Control\" -o \"Command\" en un Mac- per seleccionar més "
-"d'un valor."
-
-#: db/models/fields/related.py:930
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Si us plau, introduïu els IDs de %(self)s vàlids. El valor %(value)r és "
-"invàlid."
-msgstr[1] ""
-"Si us plau, introduïu IDs de %(self)s vàlids. Els valors %(value)r són "
-"invàlids."
-
-#: forms/fields.py:53
-msgid "This field is required."
-msgstr "Aquest camp és obligatori."
-
-#: forms/fields.py:54
-msgid "Enter a valid value."
-msgstr "Introduïu un valor vàlid."
-
-#: forms/fields.py:137
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Assegureu-vos de que el valor té com a màxim %(max)d caràcters (en té %"
-"(length)d)."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Assegureu-vos de que el valor té com a mínim %(min)d caràcters (en té %"
-"(length)d)."
-
-#: forms/fields.py:165
-msgid "Enter a whole number."
-msgstr "Introduïu un número sencer."
-
-#: forms/fields.py:166 forms/fields.py:195 forms/fields.py:224
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Aquest valor ha de ser menor o igual a %s."
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Assegureu-vos de que aquest valor sigui superior o igual a %s."
-
-#: forms/fields.py:194 forms/fields.py:223
-msgid "Enter a number."
-msgstr "Introduïu un número."
-
-#: forms/fields.py:226
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Assegureu-vos de que no hi ha més de %s dígits en total."
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Assegureu-vos de que no hi ha més de %s decimals."
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Assegureu-vos de que no hi ha més de %s dígits decimals."
-
-#: forms/fields.py:287 forms/fields.py:862
-msgid "Enter a valid date."
-msgstr "Introduïu una data vàlida."
-
-#: forms/fields.py:321 forms/fields.py:863
-msgid "Enter a valid time."
-msgstr "Introduïu una hora vàlida."
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "Introduïu una data/hora vàlides."
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"No s'ha enviat cap fitxer. Comprovi el tipus de codificació del formulari."
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "No s'ha enviat cap fitxer."
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "El fitxer enviat està buit."
-
-#: forms/fields.py:449
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Assegureu-vos de que el valor té com a màxim %(max)d caràcters (en té %"
-"(length)d)."
-
-#: forms/fields.py:482
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Envieu una imatge vàlida. El fitxer que heu enviat no era una imatge o "
-"estava corrupte."
-
-#: forms/fields.py:543
-msgid "Enter a valid URL."
-msgstr "Introduïu una URL vàlida."
-
-#: forms/fields.py:544
-msgid "This URL appears to be a broken link."
-msgstr "Aquesta URL sembla ser un enllaç trencat."
-
-#: forms/fields.py:624 forms/fields.py:702
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Esculliu una opció vàlida. %(value)s no és una de les opcions vàlides."
-
-#: forms/fields.py:703 forms/fields.py:764 forms/models.py:999
-msgid "Enter a list of values."
-msgstr "Introduïu una llista de valors."
-
-#: forms/fields.py:891
-msgid "Enter a valid IPv4 address."
-msgstr "Introduïu una adreça IPv4 vàlida."
-
-#: forms/fields.py:901
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Introduïu un 'slug' vàlid, consistent en lletres, números, guions o guions "
-"baixos."
-
-#: forms/formsets.py:271 forms/formsets.py:273
-msgid "Order"
-msgstr "Ordre"
-
-#: forms/models.py:363
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "El camp %(field_name)s ha de ser únic per a %(lookup)s %(date_field)s."
-
-#: forms/models.py:377 forms/models.py:385
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Ja existeix %(model_name)s amb aquest %(field_label)s."
-
-#: forms/models.py:590
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Si us plau, corregiu la dada duplicada per a %(field)s."
-
-#: forms/models.py:594
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Si us plau, corregiu la dada duplicada per a %(field)s, la qual ha de ser "
-"única."
-
-#: forms/models.py:600
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Si us plau, corregiu la dada duplicada per a %(field_name)s, la qual ha de "
-"ser única per a la cerca %(lookup)s en %(date_field)s."
-
-#: forms/models.py:608
-msgid "Please correct the duplicate values below."
-msgstr "Si us plau, corregiu els valors duplicats a baix."
-
-#: forms/models.py:863
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"La clau forànea en línea no coincideix amb la clau primària de la instància "
-"del pare"
-
-#: forms/models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Escolli una opció vàlida; Aquesta opció no és una de les opcions disponibles."
-
-#: forms/models.py:1000
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Escolliu una opció vàlida; %s' no és una de les opcions vàlides."
-
-#: forms/models.py:1002
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" no és un valor vàlid per a una clau primària."
-
-#: template/defaultfilters.py:767
-msgid "yes,no,maybe"
-msgstr "si,no,potser"
-
-#: template/defaultfilters.py:798
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:800
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:802
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:803
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "mitja nit"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "mig dia"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Dilluns"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Dimarts"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Dimecres"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Dijous"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Divendres"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Dissabte"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Diumenge"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Dl"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Dm"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Dmx"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Dj"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Dv"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Ds"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Dg"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "gener"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "febrer"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "març"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "abril"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "maig"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juny"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juliol"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "agost"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "setembre"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "octubre"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "novembre"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "desembre"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "gen"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "abr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ago"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "set"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "oct"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "des"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "gen."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ago."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "set."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "oct."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "des."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "o"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "any"
-msgstr[1] "anys"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mes"
-msgstr[1] "mesos"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "setmana"
-msgstr[1] "setmanes"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dia"
-msgstr[1] "dies"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "hores"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minut"
-msgstr[1] "minuts"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuts"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:399
-msgid "DATE_FORMAT"
-msgstr "j \\de F \\de Y"
-
-#: utils/translation/trans_real.py:401
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:417
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F \\de Y"
-
-#: utils/translation/trans_real.py:418
-msgid "MONTH_DAY_FORMAT"
-msgstr "j \\de F"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "El/la %(verbose_name)s s'ha creat amb èxit."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "El/la %(verbose_name)s s'ha actualtzat amb èxit."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "El %(verbose_name)s s'ha eliminat."
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Cua de moderació de comentaris"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "No hi ha comentaris per a moderar"
-
-#~ msgid "Email"
-#~ msgstr "Correu electrònic"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Autentificat?"
-
-#~ msgid "IP Address"
-#~ msgstr "Adreça IP"
-
-#~ msgid "Date posted"
-#~ msgstr "Data d'enviament"
-
-#~ msgid "yes"
-#~ msgstr "si"
-
-#~ msgid "no"
-#~ msgstr "no"
-
-#, fuzzy
-#~ msgid "verbose_name"
-#~ msgid_plural "verbose_name_plural"
-#~ msgstr[0] "verbose_name"
-#~ msgstr[1] "verbose_name_plural"
diff --git a/parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 0df69ae..0000000
--- a/parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 67c50c6..0000000
--- a/parts/django/django/conf/locale/ca/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,115 +0,0 @@
-# translation of djangojs.po to catalan
-# This file is distributed under the same license as the Django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-15 01:00+0200\n"
-"PO-Revision-Date: 2008-03-25 18:54+0100\n"
-"Last-Translator: Django Catalan Group <django-cat@googlegroups.com>\n"
-"Language-Team: Catalan <ca@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: VIM 7.1\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s Disponibles"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Seleccionar tots"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Afegir"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Eliminar"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s Escollits"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Faci les seves seleccions i faci click a"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Deseleccionar tots"
-
-#: contrib/admin/media/js/dateparse.js:32
-#: contrib/admin/media/js/calendar.js:24
-msgid "January February March April May June July August September October November December"
-msgstr "Gener Febrer Març Abril Maig Juny Juliol Agost Setembre Octubre Novembre Desembre"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Diumenge Dilluns Dimarts Dimecres Dijous Divendres Dissabte"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "Dg Dl Dt Dc Dj Dv Ds"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Ara"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Rellotje"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Esculli una hora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Mitja nit"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Migdia"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Cancel·lar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Avui"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Calendari"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Ahir"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Demà"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Mostrar"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Ocultar"
-
diff --git a/parts/django/django/conf/locale/ca/__init__.py b/parts/django/django/conf/locale/ca/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ca/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ca/formats.py b/parts/django/django/conf/locale/ca/formats.py
deleted file mode 100644
index 171f48f..0000000
--- a/parts/django/django/conf/locale/ca/formats.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'j \de F \de Y'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = r'j \de F \de Y \a \le\s G:i'
-YEAR_MONTH_FORMAT = r'F \de\l Y'
-MONTH_DAY_FORMAT = r'j \de F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y G:i'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- # '31/12/2009', '31/12/09'
- '%d/%m/%Y', '%d/%m/%y'
-)
-TIME_INPUT_FORMATS = (
- # '14:30:59', '14:30'
- '%H:%M:%S', '%H:%M'
-)
-DATETIME_INPUT_FORMATS = (
- '%d/%m/%Y %H:%M:%S',
- '%d/%m/%Y %H:%M',
- '%d/%m/%y %H:%M:%S',
- '%d/%m/%y %H:%M',
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
-
diff --git a/parts/django/django/conf/locale/cs/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/cs/LC_MESSAGES/django.mo
deleted file mode 100644
index 82e12e8..0000000
--- a/parts/django/django/conf/locale/cs/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/cs/LC_MESSAGES/django.po b/parts/django/django/conf/locale/cs/LC_MESSAGES/django.po
deleted file mode 100644
index b1a2e69..0000000
--- a/parts/django/django/conf/locale/cs/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5153 +0,0 @@
-# Translation of django.po to Czech
-# This file is distributed under the same license as the DJANGO package.
-# Radek Svarz <translate@svarz.cz>, 2005,
-# Tomáš Ehrlich <tomas.ehrlich@gmail.com>, 2009,
-# Vlada Macek <macek@sandbox.cz>, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 18:35+0200\n"
-"PO-Revision-Date: 2010-08-06 18:33+0100\n"
-"Last-Translator: Vlada Macek <macek@sandbox.cz>\n"
-"Language-Team: Czech\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>1 && n<5 ? 1 : 2;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "arabsky"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "bulharsky"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengálsky"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosensky"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "katalánsky"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "česky"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "welšsky"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "dánsky"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "německy"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "řecky"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "anglicky"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "anglicky (Británie)"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "španělsky"
-
-#: conf/global_settings.py:57
-msgid "Argentinian Spanish"
-msgstr "španělsky (Argentina)"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "estonsky"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "baskicky"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "persky"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "finsky"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "francouzsky"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "frísky"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "irsky"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "galicijsky"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "hebrejsky"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "hindsky"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "chorvatsky"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "maďarsky"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "indonésky"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "islandsky"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "italsky"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "japonsky"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "gruzínsky"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "khmersky"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "kannadsky"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "korejsky"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "litevsky"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "lotyšsky"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "makedonsky"
-
-#: conf/global_settings.py:81
-msgid "Malayalam"
-msgstr "malajálamsky"
-
-#: conf/global_settings.py:82
-msgid "Mongolian"
-msgstr "mongolsky"
-
-#: conf/global_settings.py:83
-msgid "Dutch"
-msgstr "holandsky"
-
-#: conf/global_settings.py:84
-msgid "Norwegian"
-msgstr "norsky"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Bokmal"
-msgstr "norsky (Bokmål)"
-
-#: conf/global_settings.py:86
-msgid "Norwegian Nynorsk"
-msgstr "norsky (Nynorsk)"
-
-#: conf/global_settings.py:87
-msgid "Polish"
-msgstr "polsky"
-
-#: conf/global_settings.py:88
-msgid "Portuguese"
-msgstr "portugalsky"
-
-#: conf/global_settings.py:89
-msgid "Brazilian Portuguese"
-msgstr "portugalsky (Brazílie)"
-
-#: conf/global_settings.py:90
-msgid "Romanian"
-msgstr "rumunsky"
-
-#: conf/global_settings.py:91
-msgid "Russian"
-msgstr "rusky"
-
-#: conf/global_settings.py:92
-msgid "Slovak"
-msgstr "slovensky"
-
-#: conf/global_settings.py:93
-msgid "Slovenian"
-msgstr "slovinsky"
-
-#: conf/global_settings.py:94
-msgid "Albanian"
-msgstr "albánsky"
-
-#: conf/global_settings.py:95
-msgid "Serbian"
-msgstr "srbsky"
-
-#: conf/global_settings.py:96
-msgid "Serbian Latin"
-msgstr "srbsky (latinkou)"
-
-#: conf/global_settings.py:97
-msgid "Swedish"
-msgstr "švédsky"
-
-#: conf/global_settings.py:98
-msgid "Tamil"
-msgstr "tamilsky"
-
-#: conf/global_settings.py:99
-msgid "Telugu"
-msgstr "telužsky"
-
-#: conf/global_settings.py:100
-msgid "Thai"
-msgstr "thajsky"
-
-#: conf/global_settings.py:101
-msgid "Turkish"
-msgstr "turecky"
-
-#: conf/global_settings.py:102
-msgid "Ukrainian"
-msgstr "ukrajinsky"
-
-#: conf/global_settings.py:103
-msgid "Vietnamese"
-msgstr "vietnamsky"
-
-#: conf/global_settings.py:104
-msgid "Simplified Chinese"
-msgstr "čínsky (zjednodušeně)"
-
-#: conf/global_settings.py:105
-msgid "Traditional Chinese"
-msgstr "čínsky (tradičně)"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Úspěšně odstraněno: %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Jste si jisti?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Odstranit vybrané %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Vše"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Libovolné datum"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Dnes"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Posledních 7 dní"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Tento měsíc"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Tento rok"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "Yes"
-msgstr "Ano"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "No"
-msgstr "Ne"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
-msgid "Unknown"
-msgstr "Neznámé"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Operace:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "čas operace"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id položky"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "reprez. položky"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "příznak operace"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "zpráva o změně"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "položka protokolu"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "položky protokolu"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Žádný"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Změněno: %s"
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "a"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Položka \"%(object)s\" typu %(name)s byla přidána."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr ""
-"Pole \"%(list)s\" pro položku \"%(object)s\" typu %(name)s změněno/změněna."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Položka \"%(object)s\" typu %(name)s byla odstraněna."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Nebyla změněna žádná pole."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně přidána."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "V úpravách můžete pokračovat níže."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Níže můžete přidat další položku typu %s."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně změněna."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Položka \"%(obj)s\" typu %(name)s byla úspěšně přidána. Níže můžete v "
-"úpravách pokračovat."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"K provedení hromadných operací je třeba vybrat nějaké položky. Nedošlo k "
-"žádným změnám."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Nebyla vybrána žádná operace."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "%s: přidat"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Položka \"%(name)s\" s primárním klíčem \"%(key)r\" neexistuje."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "%s: změnit"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Chyba databáze"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "Položka %(name)s byla úspěšně změněna."
-msgstr[1] "%(count)s položky %(name)s byly úspěšně změněny."
-msgstr[2] "%(count)s položek %(name)s bylo úspěšně změněno."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s položka vybrána."
-msgstr[1] "Všechny %(total_count)s položky vybrány."
-msgstr[2] "Vybráno všech %(total_count)s položek."
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "Vybraných je 0 položek z celkem %(cnt)s."
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně odstraněna."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Historie změn: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Vložte správné uživatelské jméno a heslo (u obou položek se rozlišují malá a "
-"velká písmena)."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Přihlaste se znovu, vaše sezení vypršelo."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Vypadá to, že váš prohlížeč nepřijímá cookies. Změňte mu toto nastavení, "
-"obnovte tuto stránku a požadavek opakujte."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Uživatelská jména nemohou obsahovat znak \"@\"."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Vaše e-mailová adresa není vaše uživatelské jméno. Zkuste místo toho \"%s\"."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Správa webu"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Přihlášení"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "Správa aplikace %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Datum:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Čas:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Aktuálně:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Změna:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Hledat"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Přidat další"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Stránka nenalezena"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Požadovaná stránka nebyla bohužel nalezena."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Domů"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Chyba serveru"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Chyba serveru (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Chyba serveru <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Došlo k chybě. Byla oznámena správci serveru e-mailem a měla by být brzy "
-"odstraněna. Děkujeme za trpělivost."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Provést vybranou operaci"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Provést"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Klepnutím zde vyberete položky ze všech stránek."
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Vybrat všechny položky typu %(module_name)s, celkem %(total_count)s."
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Zrušit výběr"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Vítejte, uživateli"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentace"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Změnit heslo"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Odhlásit se"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Správa webu Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Správa systému Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Přidat"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historie"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Zobrazení na webu"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Opravte níže uvedenou chybu."
-msgstr[1] "Opravte níže uvedené chyby."
-msgstr[2] "Opravte níže uvedené chyby."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s: přidat"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtr"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Odstranit"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Odstranění položky \"%(escaped_object)s\" typu %(object_name)s by vyústilo v "
-"odstranění souvisejících položek. Nemáte však oprávnění k odstranění položek "
-"následujících typů:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Opravdu má být odstraněna položka \"%(escaped_object)s\" typu %(object_name)"
-"s? Následující související položky budou všechny odstraněny:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ano, jsem si jist(a)"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Odstranit vybrané položky"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Odstranění položky \"%(object_name)s\" by vyústilo v odstranění "
-"souvisejících položek. Nemáte však oprávnění k odstranění položek "
-"následujících typů:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Opravdu mají být odstraněny vybrané položky typu %(object_name)s? "
-"Následující položky a položky s nimi související budou všechny odstraněny:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Dle: %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Dostupné modely v aplikaci %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Změnit"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Nemáte oprávnění nic měnit."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Poslední operace"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Vaše operace"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nic"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Neznámý obsah"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Potíže s nainstalovanou databází. Ujistěte se, že byly vytvořeny "
-"odpovídající tabulky a že databáze je přístupná pro čtení příslušným "
-"uživatelem."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Uživatelské jméno:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Heslo:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datum a čas"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Uživatel"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Operace"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Tato položka nemá historii změn. Pravděpodobně nebyla přidána tímto "
-"administračním rozhraním."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Zobrazit vše"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Uložit"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Hledat"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 výsledek"
-msgstr[1] "%(counter)s výsledky"
-msgstr[2] "%(counter)s výsledků"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "Celkem %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Uložit jako novou položku"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Uložit a přidat další položku"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Uložit a pokračovat v úpravách"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Nejdříve vložte uživatelské jméno a heslo. Poté budete moci upravovat více "
-"uživatelských nastavení."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:8
-msgid "Enter a username and password."
-msgstr "Vložte uživatelské jméno a heslo."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Vložte nové heslo pro uživatele <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Heslo"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Heslo (znovu)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Pro ověření vložte stejné heslo znovu."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Přidat %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Odebrat"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Odstranit?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Děkujeme za čas strávený s tímto webem."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Přihlaste se znovu"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Změna hesla"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Změna hesla byla úspěšná"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Vaše heslo bylo změněno."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Vložte svoje současné heslo a poté vložte dvakrát heslo nové. Omezíme tak "
-"možnost překlepu."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Současné heslo"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nové heslo"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Změnit heslo"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Obnovení hesla"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Heslo bylo obnoveno"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Vaše heslo bylo nastaveno. Nyní se můžete přihlásit."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Potvrzení obnovy hesla"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Vložte nové heslo"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "Vložte dvakrát nové heslo. Tak ověříme, že bylo zadáno správně."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nové heslo:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potvrdit heslo:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Obnovení hesla bylo neúspěšné"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Odkaz pro obnovení hesla byl neplatný, možná již byl použit. Požádejte o "
-"obnovení hesla znovu."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Obnovení hesla bylo úspěšné"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Poslali jsme vám e-mailem pokyny pro nastavení hesla na vámi zadanou e-"
-"mailovou adresu. Za chvíli by měly dorazit do vaší schránky."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Tento e-mail vám byl doručen, protože jste požádal(a) o obnovení hesla"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "k vašemu uživatelskému účtu v systému %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Přejděte na následující stránku a zadejte nové heslo:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Pro jistotu vaše uživatelské jméno:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Děkujeme za používání našeho webu!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Tým aplikace %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Zapomněl(a) jste své současné heslo? Vložte svou e-mailovou adresu a e-"
-"mailem obdržíte pokyny pro nastavení nového."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mailová adresa:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Obnovit heslo"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Všechna data"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "%s: vybrat"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Vyberte položku %s ke změně"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "web"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "šablona"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtr:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "pohled (view):"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikace %r nenalezena"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r v aplikaci %(app_label)r nenalezen"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "související položka `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "související položky `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "Vše: %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "Počet: %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Pole položek typu %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "Objekt %s patrně není typu urlpattern."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklety"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentační bookmarklety"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Pro nainstalování bookmarkletů, přetáhněte odkaz na vaše "
-"záložky (oblíbené),\n"
-"nebo klepněte pravým tlačítkem na odkaz a přidejte ho k vašim záložkám "
-"(oblíbeným). Nyní můžete\n"
-"zvolit bookmarklet z libovolné stránky. Poznámka: Některé tyto\n"
-"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je "
-"nastaven jako\n"
-"\"\"interní\" (promluvte si s vaším správcem, jestli si nejste jisti,\n"
-"zda je váš počítač \"interní\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentace k této stránce"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Z libovolné stránky otevře dokumentaci pohledu (view), který generoval tuto "
-"stránku."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Ukázat id položky"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Zobrazí content-type a unikátní ID stránek reprezentujících jedinou položku."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Upravit tuto položku (ve stávajícím okně)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Přepne do administračního rozhraní stránek reprezentujících jedinou položku."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Upravit tuto položku (v novém okně)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Jako výše, ale otevře prostředí správy v novém okně."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Osobní údaje"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Oprávnění"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Důležitá data"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Skupiny"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Změna hesla byla úspěšná."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Heslo pro uživatele %s: změnit"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Uživatelské jméno"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Požadováno. 30 znaků nebo méně. Pouze písmena, číslice a znaky @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Hodnota může obsahovat pouze písmena, číslice a znaky @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Potvrzení hesla"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Uživatel s tímto jménem již existuje."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Hesla se neshodují."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Tento účet je neaktivní."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Váš prohlížeč zřejmě nemá povoleno přijímat cookies, které jsou ale potřeba "
-"pro přihlášení."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"K této e-mailové adrese není přiřazen žádný uživatelský účet. Určitě jste "
-"zde registrováni?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Obnovení hesla na webu %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Potvrzení nového hesla"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Vaše současné heslo nebylo vloženo správně. Zkuste to znovu."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "název"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kódový název"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "oprávnění"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "oprávnění"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "skupina"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "skupiny"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "uživatelské jméno"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Požadováno. 30 znaků nebo méně. Pouze písmena, číslice a znaky @/./+/-/_."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "křestní jméno"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "příjmení"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-mailová adresa"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "heslo"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Použijte buď tvar \"[algo]$[salt]$[hexdigest]\" nebo <a href=\"password/"
-"\">formulář pro změnu hesla</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "administrační přístup"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Určuje, zda se uživatel může přihlásit do správy tohoto webu."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktivní"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Určuje, zda bude uživatel považován za aktivního. Použijte tuto možnost "
-"místo odstranění účtů."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "superuživatel"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Určuje, že uživatel má veškerá oprávnění bez jejich explicitního přiřazení."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "poslední přihlášení"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "datum registrace"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Kromě manuálně přidělených oprávnění bude uživatel mít všechna oprávnění pro "
-"každou skupinu, jejímž je členem."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "uživatelská oprávnění"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "uživatel"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "uživatelé"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "zpráva"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Odhlášeno"
-
-#: contrib/auth/management/commands/createsuperuser.py:24
-#: core/validators.py:120 forms/fields.py:427
-msgid "Enter a valid e-mail address."
-msgstr "Vložte platnou e-mailovou adresu."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Obsah"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "označen"
-msgstr[1] "označeny"
-msgstr[2] "označeno"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Označit vybrané komentáře"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "schválen"
-msgstr[1] "schváleny"
-msgstr[2] "schváleno"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Schválit vybrané komentáře"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "odebrán"
-msgstr[1] "odebrány"
-msgstr[2] "odebráno"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Odebrat vybrané komentáře"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 komentář byl úspěšně %(action)s."
-msgstr[1] "%(count)s komentáře byly úspěšně %(action)s."
-msgstr[2] "%(count)s komentářů bylo úspěšně %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Komentáře z webu %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Poslední komentáře na webu %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Jméno"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-mailová adresa"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentář"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Mluvte slušně! Slovo %s je zde nepřípustné."
-msgstr[1] "Mluvte slušně! Slova %s jsou zde nepřípustná."
-msgstr[2] "Mluvte slušně! Slova %s jsou zde nepřípustná."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Jestliže do tohoto pole cokoli zadáte, bude komentář považován za spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "typ obsahu"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID položky"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "jméno uživatele"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "e-mailová adresa uživatele"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL uživatele"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentář"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "datum a čas byly zaslané"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
-msgid "IP address"
-msgstr "Adresa IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "je veřejný"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Pokud zrušíte zaškrtnutí tohoto políčka, komentář se na stránce nezobrazí."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "je odebrán"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Zaškrtněte, pokud je komentář nevhodný. Místo něj bude zobrazena zpráva "
-"\"Tento komentář byl odebrán\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentář"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Tento komentář zaslal přihlášený uživatel, jméno tedy není možné změnit."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Tento komentář zaslal přihlášený uživatel, e-mail tedy není možné změnit."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Zadal uživatel %(user)s dne %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "značka"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "datum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "značka komentáře"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "značky komentáře"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Schválit komentář"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Opravdu chcete zveřejnit tento komentář?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Schválit"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Děkujeme za schválení"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Děkujeme za váš čas věnovaný zlepšení kvality diskuze na našich stránkách"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Odebrat komentář"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Opravdu chcete odebrat tento komentář?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Děkujeme za odebrání"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Označit tento komentář"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Opravdu chcete označit tento komentář?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Označit"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Děkujeme za označení komentáře"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Odeslat"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Náhled"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Děkujeme za vložení komentáře"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Děkujeme za komentář"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Zobrazit náhled komentáře"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Opravte níže uvedenou chybu."
-msgstr[1] "Opravte níže uvedené chyby."
-msgstr[2] "Opravte níže uvedené chyby."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Komentář odeslat"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "nebo upravit"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "název třídy modelu v Pythonu"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "typy obsahu"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Příklad: \"/o/kontakt/\". Ujistěte se, že máte počáteční a konečná lomítka."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Hodnota smí obsahovat pouze písmena, číslice, podtržítka, pomlčky nebo "
-"lomítka."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Pokročilá nastavení"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titulek"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "obsah"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "povolit komentáře"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "název šablony"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Příklad: \"flatpages/kontaktni_stranka.html\". Pokud toto není zadáno, bude "
-"použita šablona \"flatpages/default.html\"."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "nutná registrace"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Určuje, že tuto stránku uvidí pouze přihlášení uživatelé."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "statická stránka"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "statické stránky"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Platnost formuláře bohužel vypršela. Pokračujte vyplněním formuláře z této "
-"stránky."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Základní GIS pole -- mapováno na typ Geometry podle specifikace OpenGIS."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Bod"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Úsek čáry"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Mnohonásobný bod"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Mnohonásobný úsek čáry"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Mnohonásobný polygon"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Kolekce geometrií"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Hodnota geometrie nezadána."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Neplatná hodnota geometrie."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Neplatný typ geometrie."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Nastala chyba při transformaci geometrie na identifikátor SRID geometrického "
-"formulářového pole."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milion"
-msgstr[1] "%(value).1f miliony"
-msgstr[2] "%(value).1f milionů"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miliarda"
-msgstr[1] "%(value).1f miliardy"
-msgstr[2] "%(value).1f miliard"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f bilion"
-msgstr[1] "%(value).1f biliony"
-msgstr[2] "%(value).1f bilionů"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "jedna"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dvě"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tři"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "čtyři"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "pět"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "šest"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sedm"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "osm"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "devět"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "dnes"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "zítra"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "včera"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru NNNN nebo ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Pole smí obsahovat pouze číslice."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Pole smí obsahovat jen 7 nebo 8 číslic."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-"Zadejte platné identifikační číslo CUIT ve tvaru XX-XXXXXXXX-X nebo "
-"XXXXXXXXXXXX"
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Neplatné CUIT"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Hradsko"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Korutany"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Dolní Rakousko"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Horní Rakousko"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salcbursko"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Štýrsko"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrolsko"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlbersko"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vídeň"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Zadejte platné rodné číslo (ASSN) ve tvaru XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Zadejte čtyřmístné poštovní směrovací číslo."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonní číslo smí být pouze ve tvaru XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Neplatný brazilský stát. Vyberte jeden z nabízených států."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Neplatné číslo CPF."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Pole smí obsahovat nejvýše 11 číslic nebo 14 znaků."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Neplatné číslo CNPJ."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Pole smí obsahovat nejméně 14 číslic."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Zadejte platné kanadské číslo soc. pojištění (SID) ve tvaru XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basilej-město"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basilej-venkov"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Ženeva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubünden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucern"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchâtel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Curych"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Zadejte platné švýcarské identifikační číslo nebo číslo cestovního pasu ve "
-"tvaru X1234567<0 nebo 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Zadejte platné chilské RUT."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Zadejte platné chilské RUT ve tvaru XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Neplatné RUT."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Středočeský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Jihočeský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Plzeňský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karlovarský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Ústecký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberecký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Královéhradecký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubický kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysočina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Jihomoravský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomoucký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlínský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravskoslezský kraj"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXX nebo XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Zadejte rodné číslo ve tvaru XXXXXX/XXXX nebo XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Neplatný nepovinný parametr Gender, platné hodnoty jsou 'f' a 'm'."
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Zadejte platné rodné číslo."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Zadejte platné IČ."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Bádensko-Württembersko"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavorsko"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlín"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Braniborsko"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Brémy"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburk"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hesensko"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Meklenbursko-Přední Pomořansko"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Dolní Sasko"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Severní Porýní-Vestfálsko"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Porýní-Falc"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Sársko"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sasko"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Sasko-Anhaltsko"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Šlesvicko-Holštýnsko"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Durynsko"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Zadejte platné německé identifikační číslo ve tvaru XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Araba"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Baleáry"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruña"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúzcoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lérida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcie"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Orense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturie"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Kantábrie"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencie"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Biskajsko"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusie"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragonie"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturské knížectví"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Baleáry"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskicko"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanárské ostrovy"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastilie-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastilie a León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalánsko"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicie"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcie"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencie"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Zadejte platné poštovní směrovací číslo ve tvaru 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Zadejte platné telefonní číslo v jednom ze tvarů 6XXXXXXXX, 8XXXXXXXX nebo "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Zadejte platné hodnoty NIF, NIE nebo CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Zadejte platné hodnoty NIF nebo NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Neplatný kontrolní součet pro NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Neplatný kontrolní součet pro NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Neplatný kontrolní součet pro CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Zadejte platné číslo bankovního účtu ve tvaru XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Neplatný kontrolní součet pro číslo bankovního účtu."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Zadejte platné finské rodné číslo."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonní číslo musí být ve tvaru 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Zadejte platné poštovní směrovací číslo."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Zadejte platné telefonní číslo"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Vložte platné číslo poznávací značky vozu"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Vložte platné číslo NIK/KTP"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federální vláda"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Zadejte platné islandské identifikační číslo ve tvaru XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Neplatné islandské identifikační číslo."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Zadejte platné poštovní směrovací číslo."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Zadejte platné číslo SSN."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Zadejte platné daňové identifikační číslo."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXXXX nebo XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaidó"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Mijagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Jamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukušima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Točigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Čiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Jamanaši"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Tojama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Išikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Šizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aiči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Šiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kjóto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Ósaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hjógo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakajama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Šimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okajama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hirošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Jamaguči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokušima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kóči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Óita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Mijazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Vložte platné kuvajtské občanské identifikační číslo"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Zadejte platné poštovní směrovací číslo"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Zadejte platné číslo SoFi"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburk"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Severní Brabantsko"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Severní Holandsko"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Jižní Holandsko"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Zadejte platné norské číslo sociálního pojištěni (SSN)."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Pole musí obsahovat 8 číslic."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Pole musí obsahovat 11 číslic."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Národní identifikační číslo obsahuje 11 číslic."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Neplatný kontrolní součet pro Národní identifikační číslo."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Zadejte daňové identifikační číslo (NIP) ve tvaru XXX-XXX-XX-XX nebo XX-XX-"
-"XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Neplatný kontrolní součet pro daňové identifikační číslo."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Identifikační číslo podnikatele (REGON) obsahuje 9 až 14 číslic."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Neplatný kontrolní součet pro identifikační číslo podnikatele (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Dolnoslezské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kujavsko-pomořské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublinské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubušské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodžské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Malopolské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Mazovské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opolské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Podkarpatské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podleské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomořské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Slezské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Svatokřížské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Varmijsko-mazurské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Velkopolské vojvodství"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Západopomořanské vojvodství"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Telefonní číslo musí mít 9 číslo nebo začínat + či 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Zadejte platné CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Zadejte platné CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Zadejte platné IBAN ve tvaru ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonní číslo musí být ve tvaru XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Zadejte platné poštovní směrovací číslo ve tvaru XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Vložte platné číslo švédské organizace."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Vložte platné švédské osobní identifikační číslo."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Koordinační čísla nejsou povolena."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Vložte švédské poštovní směrovací číslo ve tvaru XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banská Štiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Bánovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytča"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Čadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolný Kubín"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajská Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenné"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kežmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komárno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Košice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Košice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Košice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Košice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Košice-okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucké Nové Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoča"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovský Mikuláš"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lučenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Námestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nové Mesto nad Váhom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nové Zámky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizánske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piešťany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltár"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Považská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Prešov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Púchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revúca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavská Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Rožňava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ružomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spišská Nová Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stará Ľubovňa"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidník"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Šaľa"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topoľčany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebišov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trenčín"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turčianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdošín"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Veľký Krtíš"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Topľou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlaté Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Žarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Žiar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Žilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banskobystrický kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislavský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Košický kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitranský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešovský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenčínský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnavský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilinský kraj"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Zadejte platné poštovní směrovací číslo."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Velký Londýn"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Velký Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne a Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Střední Skotsko"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries a Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkneje"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetlandy"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Západní ostrovy"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Anglie"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Severní Irsko"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Skotsko"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXX nebo XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonní číslo musí být ve tvaru XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Zadejte platné osobní číslo (U.S. SSN) ve tvaru XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Vložte stát USA nebo teritorium."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stát v USA (dvě velká písmena)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonní číslo"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Vložte platné číslo CI ve tvaru X.XXX.XXX-X,XXXXXXX-X nebo XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Vložte platné číslo CI."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Zadejte platné jihoafrické identifikační číslo"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Zadejte platné jihoafrické poštovní směrovací číslo"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Východní Kapsko"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Svobodný stát"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Severní Kapsko"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Severozápadní provincie"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Západní Kapsko"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "opožděně vyhodnocená zpráva"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "přesměrovat z"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Toto by měla být absolutní cesta bez domény. Příklad: \"/udalosti/hledat/\"."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "přesměrovat na"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na "
-"\"http://\"."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "přesměrování"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "přesměrování"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "klíč sezení"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "data sezení"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "datum expirace"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sezení"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sezení"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "název domény"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "zobrazený název"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "weby"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Vložte platnou hodnotu."
-
-#: core/validators.py:87 forms/fields.py:528
-msgid "Enter a valid URL."
-msgstr "Vložte platnou adresu URL."
-
-#: core/validators.py:89 forms/fields.py:529
-msgid "This URL appears to be a broken link."
-msgstr "Tato adresa URL je zřejmě neplatný odkaz."
-
-#: core/validators.py:123 forms/fields.py:877
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Vložte platný identifikátor složený pouze z písmen, čísel, podtržítek a "
-"pomlček."
-
-#: core/validators.py:126 forms/fields.py:870
-msgid "Enter a valid IPv4 address."
-msgstr "Vložte platnou adresu typu IPv4."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Vložte pouze číslice oddělené čárkami."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Hodnota musí být %(limit_value)s (nyní je %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:204 forms/fields.py:256
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Hodnota musí být menší nebo rovna %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Hodnota musí být větší nebo rovna %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Hodnota musí mít alespoň %(limit_value)d znaků, ale nyní jich má %"
-"(show_value)d."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Hodnota smí mít nejvýše %(limit_value)d znaků, ale nyní jich má %(show_value)"
-"d."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"Pole %(field_name)s musí být unikátní testem %(lookup)s pole %(date_field)s."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr ""
-"Položka %(model_name)s s touto hodnotou v poli %(field_label)s již existuje."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Hodnota %r není platnou volbou."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Pole nemůže být null."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Pole nemůže být prázdné."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Pole typu: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:860
-#: db/models/fields/__init__.py:969 db/models/fields/__init__.py:980
-#: db/models/fields/__init__.py:1007
-msgid "Integer"
-msgstr "Celé číslo"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:858
-msgid "This value must be an integer."
-msgstr "Hodnota musí být celé číslo."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Hodnota musí být buď Ano (True) nebo Ne (False)."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Pravdivost (buď Ano (True), nebo Ne (False))"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:990
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Řetězec (max. %(max_length)s znaků)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Celá čísla oddělená čárkou"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Datum (bez času)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Vložte platné datum ve tvaru RRRR-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Neplatné datum: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Vložte platné datum a čas ve tvaru RRRR-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Datum (s časem)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Hodnota musí být desetinné číslo."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Desetinné číslo"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-mailová adresa"
-
-#: db/models/fields/__init__.py:807 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Cesta k souboru"
-
-#: db/models/fields/__init__.py:830
-msgid "This value must be a float."
-msgstr "Hodnota musí být desetinné číslo."
-
-#: db/models/fields/__init__.py:832
-msgid "Floating point number"
-msgstr "Číslo s pohyblivou řádovou čárkou"
-
-#: db/models/fields/__init__.py:891
-msgid "Big (8 byte) integer"
-msgstr "Velké číslo (8 bajtů)"
-
-#: db/models/fields/__init__.py:920
-msgid "This value must be either None, True or False."
-msgstr "Hodnota musí být buď Nic (None), Ano (True) nebo Ne (False)."
-
-#: db/models/fields/__init__.py:922
-msgid "Boolean (Either True, False or None)"
-msgstr "Pravdivost (buď Ano (True), Ne (False) nebo Nic (None))"
-
-#: db/models/fields/__init__.py:1013
-msgid "Text"
-msgstr "Text"
-
-#: db/models/fields/__init__.py:1029
-msgid "Time"
-msgstr "Čas"
-
-#: db/models/fields/__init__.py:1033
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Vložte platný čas ve tvaru HH:MM[:ss[.uuuuuu]]"
-
-#: db/models/fields/__init__.py:1125
-msgid "XML text"
-msgstr "XML text"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Položka typu %(model)s s primárním klíčem %(pk)r neexistuje."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Cizí klíč (typ určen pomocí souvisejícího pole)"
-
-#: db/models/fields/related.py:919
-msgid "One-to-one relationship"
-msgstr "Vazba jedna-jedna"
-
-#: db/models/fields/related.py:981
-msgid "Many-to-many relationship"
-msgstr "Vazba mnoho-mnoho"
-
-#: db/models/fields/related.py:1001
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Výběr více než jedné položky je možný přidržením klávesy \"Control\" (nebo "
-"\"Command\" na Macu)."
-
-#: db/models/fields/related.py:1062
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Vložte platné ID položky %(self)s. Hodnota %(value)r je neplatná."
-msgstr[1] "Vložte platné ID položky %(self)s. Hodnoty %(value)r jsou neplatné."
-msgstr[2] "Vložte platné ID položky %(self)s. Hodnoty %(value)r jsou neplatné."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Pole je povinné."
-
-#: forms/fields.py:203
-msgid "Enter a whole number."
-msgstr "Vložte celé číslo."
-
-#: forms/fields.py:234 forms/fields.py:255
-msgid "Enter a number."
-msgstr "Vložte číslo."
-
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Hodnota nesmí celkem mít více než %s cifer."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Hodnota nesmí mít za desetinnou čárkou více než %s cifer."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Hodnota nesmí mít před desetinnou čárkou více než %s cifer."
-
-#: forms/fields.py:322 forms/fields.py:837
-msgid "Enter a valid date."
-msgstr "Vložte platné datum."
-
-#: forms/fields.py:350 forms/fields.py:838
-msgid "Enter a valid time."
-msgstr "Vložte platný čas."
-
-#: forms/fields.py:376
-msgid "Enter a valid date/time."
-msgstr "Vložte platné datum a čas."
-
-#: forms/fields.py:434
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Soubor nebyl odeslán. Zkontrolujte parametr \"encoding type\" formuláře."
-
-#: forms/fields.py:435
-msgid "No file was submitted."
-msgstr "Žádný soubor nebyl odeslán."
-
-#: forms/fields.py:436
-msgid "The submitted file is empty."
-msgstr "Odeslaný soubor je prázdný."
-
-#: forms/fields.py:437
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Délka názvu souboru má být nejvýše %(max)d znaků, ale nyní je %(length)d."
-
-#: forms/fields.py:472
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Nahrajte platný obrázek. Odeslaný soubor buď nebyl obrázek nebo byl poškozen."
-
-#: forms/fields.py:595 forms/fields.py:670
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Vyberte platnou možnost, \"%(value)s\" není k dispozici."
-
-#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Vložte seznam hodnot."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Pořadí"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Opravte duplicitní data v poli %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Opravte duplicitní data v poli %(field)s, které musí být unikátní."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Opravte duplicitní data v poli %(field_name)s, které musí být unikátní "
-"testem %(lookup)s pole %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Odstraňte duplicitní hodnoty níže."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Cizí klíč typu inline neodpovídá primárnímu klíči v rodičovské položce."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Vyberte platnou možnost. Tato není k dispozici."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Vyberte platnou možnost, \"%s\" není k dispozici."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "Hodnota \"%s\" není platný primární klíč."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "ano, ne, možná"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bajt"
-msgstr[1] "%(size)d bajty"
-msgstr[2] "%(size)d bajtů"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "odp."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "dop."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "odp."
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "dop."
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "půlnoc"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "poledne"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "pondělí"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "úterý"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "středa"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "čtvrtek"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "pátek"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "sobota"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "neděle"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "po"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "út"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "st"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "čt"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "pá"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "so"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "ne"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "leden"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "únor"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "březen"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "duben"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "květen"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "červen"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "červenec"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "srpen"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "září"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "říjen"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "listopad"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "prosinec"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "led"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "úno"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "bře"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "dub"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "kvě"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "čen"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "čec"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "srp"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "zář"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "říj"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "lis"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "pro"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "leden"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "únor"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "srpen"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "září"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "říjen"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "listopad"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "prosinec"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "nebo"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "rok"
-msgstr[1] "roky"
-msgstr[2] "let"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "měsíc"
-msgstr[1] "měsíce"
-msgstr[2] "měsíců"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "týden"
-msgstr[1] "týdny"
-msgstr[2] "týdnů"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "den"
-msgstr[1] "dny"
-msgstr[2] "dnů"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hodina"
-msgstr[1] "hodiny"
-msgstr[2] "hodin"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuta"
-msgstr[1] "minuty"
-msgstr[2] "minut"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuty"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. n. Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. n. Y H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Položka typu %(verbose_name)s byla úspěšně vytvořena."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Položka typu %(verbose_name)s byla úspěšně aktualizována."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Položka typu %(verbose_name)s byla odstraněna."
diff --git a/parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 8efa6f6..0000000
--- a/parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.po
deleted file mode 100644
index e4f06a9..0000000
--- a/parts/django/django/conf/locale/cs/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,159 +0,0 @@
-# Translation of djangojs.po to Czech
-# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the DJANGO package.
-# Radek Svarz <translate@svarz.cz>, 2005,
-# Vlada Macek <macek@sandbox.cz>, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 18:35+0200\n"
-"PO-Revision-Date: 2010-08-06 18:34+0100\n"
-"Last-Translator: Vlada Macek <macek@sandbox.cz>\n"
-"Language-Team: Czech\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>1 && n<5 ? 1 : 2;\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Dostupné položky: %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Vybrat vše"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Přidat"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Odebrat"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Vybrané položky: %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Vyberte si a klikněte "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Odebrat vše"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "Vybrána je %(sel)s položka z celkem %(cnt)s."
-msgstr[1] "Vybrány jsou %(sel)s položky z celkem %(cnt)s."
-msgstr[2] "Vybraných je %(sel)s položek z celkem %(cnt)s."
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"V jednotlivých polích jsou neuložené změny, které budou ztraceny, pokud "
-"operaci provedete."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Byla vybrána operace, ale dosud nedošlo k uložení změn jednotlivých polí. "
-"Uložíte klepnutím na tlačítko OK. Pak bude třeba operaci spustit znovu."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Byla vybrána operace a jednotlivá pole nejsou změněná. Patrně hledáte "
-"tlačítko Provést spíše než Uložit."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"leden únor březen duben květen červen červenec srpen září říjen listopad "
-"prosinec"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "n p ú s č p s"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Zobrazit"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Skrýt"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Nyní"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Hodiny"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Vyberte čas"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Půlnoc"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6h ráno"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Poledne"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Storno"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Dnes"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalendář"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Včera"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Zítra"
diff --git a/parts/django/django/conf/locale/cs/__init__.py b/parts/django/django/conf/locale/cs/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/cs/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/cs/formats.py b/parts/django/django/conf/locale/cs/formats.py
deleted file mode 100644
index bf90c1a..0000000
--- a/parts/django/django/conf/locale/cs/formats.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = 'j. F Y G:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y G:i:s'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06'
- '%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
- # '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%d.%m.%Y', # '25.10.2006'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/cy/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/cy/LC_MESSAGES/django.mo
deleted file mode 100644
index 6c92b2b..0000000
--- a/parts/django/django/conf/locale/cy/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/cy/LC_MESSAGES/django.po b/parts/django/django/conf/locale/cy/LC_MESSAGES/django.po
deleted file mode 100644
index ab07be6..0000000
--- a/parts/django/django/conf/locale/cy/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,1990 +0,0 @@
-# Translation of Django to Welsh.
-# Copyright (C) 2005 Django.
-# This file is distributed under the same license as the Django package.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:12+0200\n"
-"PO-Revision-Date: 2005-11-05 HO:MI+ZONE\n"
-"Last-Translator: Jason Davies <jason@jasondavies.com>\n"
-"Language-Team: Cymraeg <cy@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
-msgid "object ID"
-msgstr "ID gwrthrych"
-
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "pennawd"
-
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "sylw"
-
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "cyfraddiad #1"
-
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "cyfraddiad #2"
-
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "cyfraddiad #3"
-
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "cyfraddiad #4"
-
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "cyfraddiad #5"
-
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "cyfraddiad #6"
-
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "cyfraddiad #7"
-
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "cyfraddiad #8"
-
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "yn gyfraddiad dilys"
-
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "dyddiad/amser wedi ymostwng"
-
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
-msgid "is public"
-msgstr "yn gyhoeddus"
-
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
-msgid "IP address"
-msgstr "cyfeiriad IP"
-
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "wedi diddymu"
-
-#: contrib/comments/models.py:86
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-
-#: contrib/comments/models.py:91
-#, fuzzy
-msgid "comments"
-msgstr "sylw"
-
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
-msgid "Content object"
-msgstr "Gwrthrych cynnwys"
-
-#: contrib/comments/models.py:159
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Postiwyd gan %(user)s ar %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "enw'r person"
-
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "cyfeiriad ip"
-
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr ""
-
-#: contrib/comments/models.py:176
-#, fuzzy
-msgid "free comment"
-msgstr "Sylw rhydd"
-
-#: contrib/comments/models.py:177
-#, fuzzy
-msgid "free comments"
-msgstr "Sylwadau rhydd"
-
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "sgôr"
-
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "dyddiad sgôr"
-
-#: contrib/comments/models.py:237
-#, fuzzy
-msgid "karma score"
-msgstr "Sgôr Carma"
-
-#: contrib/comments/models.py:238
-#, fuzzy
-msgid "karma scores"
-msgstr "Sgorau Carma"
-
-#: contrib/comments/models.py:242
-#, python-format
-#, fuzzy
-msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d"
-
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "fflagio dyddiad"
-
-#: contrib/comments/models.py:268
-#, fuzzy
-msgid "user flag"
-msgstr "Fflag defnyddiwr"
-
-#: contrib/comments/models.py:269
-#, fuzzy
-msgid "user flags"
-msgstr "Fflagiau defnyddwyr"
-
-#: contrib/comments/models.py:273
-#, python-format
-msgid "Flag by %r"
-msgstr "Fflagio hefo %r"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "dyddiad dilead"
-
-#: contrib/comments/models.py:280
-#, fuzzy
-msgid "moderator deletion"
-msgstr "Dilead cymedrolwr"
-
-#: contrib/comments/models.py:281
-#, fuzzy
-msgid "moderator deletions"
-msgstr "Dileadau cymedrolwr"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Dilead cymedrolwr gan %r"
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "Ni gellir defnyddwyr dienw pleidleisio"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "ID sylw annilys"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "Dim pleidleisio ar gyfer eich hun"
-
-#: contrib/comments/views/comments.py:28
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr ""
-
-#: contrib/comments/views/comments.py:112
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/views/comments.py:117
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-
-#: contrib/comments/views/comments.py:189
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "Caniateir POSTiau yn unig"
-
-#: contrib/comments/views/comments.py:193
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr ""
-
-#: contrib/comments/views/comments.py:197
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr ""
-
-#: contrib/comments/views/comments.py:207
-#: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "Enw defnyddiwr:"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Cyfrinair:"
-
-#: contrib/comments/templates/comments/form.html:6
-#, fuzzy
-msgid "Forgotten your password?"
-msgstr "Newidio fy nghyfrinair"
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Log out"
-msgstr "Allgofnodi"
-
-#: contrib/comments/templates/comments/form.html:12
-#, fuzzy
-msgid "Ratings"
-msgstr "cyfraddiad #1"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:27
-#: contrib/comments/templates/comments/freeform.html:5
-#, fuzzy
-msgid "Comment:"
-msgstr "Sylw"
-
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-#, fuzzy
-msgid "Preview comment"
-msgstr "Sylw rhydd"
-
-#: contrib/comments/templates/comments/freeform.html:4
-#, fuzzy
-msgid "Your name:"
-msgstr "enw defnyddiwr"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
-msgid "All"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
-msgstr "Unrhyw dyddiad"
-
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
-msgstr "Heddiw"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
-msgstr "7 diwrnod gorffennol"
-
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
-msgstr "Mis yma"
-
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
-msgstr "Blwyddyn yma"
-
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "Ie"
-
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "Na"
-
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr ""
-
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "amser gweithred"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "id gwrthrych"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "repr gwrthrych"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "fflag gweithred"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr "neges newid"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "cofnod"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "cofnodion"
-
-#: contrib/admin/templatetags/admin_list.py:228
-msgid "All dates"
-msgstr "Dyddiadau i gyd"
-
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-
-#: contrib/admin/views/decorators.py:23
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-msgstr "Mewngofnodi"
-
-#: contrib/admin/views/decorators.py:61
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-
-#: contrib/admin/views/decorators.py:68
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-
-#: contrib/admin/views/decorators.py:82
-msgid "Usernames cannot contain the '@' character."
-msgstr ""
-
-#: contrib/admin/views/decorators.py:84
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-
-#: contrib/admin/views/main.py:226
-msgid "Site administration"
-msgstr "Gweinyddiad safle"
-
-#: contrib/admin/views/main.py:260
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
-
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
-msgid "You may edit it again below."
-msgstr ""
-
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
-#, python-format
-msgid "You may add another %s below."
-msgstr ""
-
-#: contrib/admin/views/main.py:290
-#, python-format
-msgid "Add %s"
-msgstr "Ychwanegu %s"
-
-#: contrib/admin/views/main.py:336
-#, python-format
-msgid "Added %s."
-msgstr "Ychwanegwyd %s."
-
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "ac"
-
-#: contrib/admin/views/main.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "Newidiwyd %s."
-
-#: contrib/admin/views/main.py:340
-#, python-format
-msgid "Deleted %s."
-msgstr "Dileuwyd %s."
-
-#: contrib/admin/views/main.py:343
-msgid "No fields changed."
-msgstr ""
-
-#: contrib/admin/views/main.py:346
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
-
-#: contrib/admin/views/main.py:354
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-
-#: contrib/admin/views/main.py:392
-#, python-format
-msgid "Change %s"
-msgstr "Newidio %s"
-
-#: contrib/admin/views/main.py:470
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr ""
-
-#: contrib/admin/views/main.py:475
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr ""
-
-#: contrib/admin/views/main.py:508
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
-
-#: contrib/admin/views/main.py:511
-msgid "Are you sure?"
-msgstr "Ydych yn sicr?"
-
-#: contrib/admin/views/main.py:533
-#, python-format
-msgid "Change history: %s"
-msgstr "Hanes newid: %s"
-
-#: contrib/admin/views/main.py:565
-#, python-format
-msgid "Select %s"
-msgstr "Dewis %s"
-
-#: contrib/admin/views/main.py:565
-#, python-format
-msgid "Select %s to change"
-msgstr "Dewis %s i newid"
-
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
-msgid "Integer"
-msgstr ""
-
-#: contrib/admin/views/doc.py:278
-msgid "Boolean (Either True or False)"
-msgstr ""
-
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr ""
-
-#: contrib/admin/views/doc.py:280
-msgid "Comma-separated integers"
-msgstr ""
-
-#: contrib/admin/views/doc.py:281
-msgid "Date (without time)"
-msgstr "Dyddiad (heb amser)"
-
-#: contrib/admin/views/doc.py:282
-msgid "Date (with time)"
-msgstr "Dyddiad (gyda amser)"
-
-#: contrib/admin/views/doc.py:283
-msgid "E-mail address"
-msgstr "Cyfeiriad e-bost"
-
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
-msgid "File path"
-msgstr "Llwybr ffeil"
-
-#: contrib/admin/views/doc.py:285
-msgid "Decimal number"
-msgstr "Rhif degol"
-
-#: contrib/admin/views/doc.py:291
-msgid "Boolean (Either True, False or None)"
-msgstr "Boole (Naill ai True, False neu None)"
-
-#: contrib/admin/views/doc.py:292
-msgid "Relation to parent model"
-msgstr "Perthynas i model rhiant"
-
-#: contrib/admin/views/doc.py:293
-msgid "Phone number"
-msgstr "Rhif ffôn"
-
-#: contrib/admin/views/doc.py:298
-msgid "Text"
-msgstr "Testun"
-
-#: contrib/admin/views/doc.py:299
-msgid "Time"
-msgstr "Amser"
-
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:301
-msgid "U.S. state (two uppercase letters)"
-msgstr "Talaith U.D. (dwy briflythyren)"
-
-#: contrib/admin/views/doc.py:302
-msgid "XML text"
-msgstr "Testun XML"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dogfennaeth"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Change password"
-msgstr "Newid cyfrinair"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Adref"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
-msgid "History"
-msgstr "Hanes"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "Dyddiad/amser"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "Defnyddiwr"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "Gweithred"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "N j, Y, P"
-
-#: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Does dim hanes newid gan y gwrthrych yma. Mae'n debyg ni ychwanegwyd drwy'r "
-"safle gweinydd yma."
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Gweinyddiad safle Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Gweinyddiad Django"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Gwall gweinyddwr"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Gwall gweinyddwr (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Gwall Gweinyddwr <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Mae gwall wedi digwydd. Adroddwyd i weinyddwyr y safle drwy e-bost ac ddylai "
-"cael ei drwsio cyn bo hir."
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Tudalen heb ei ddarganfod"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Mae'n ddrwg gennym, ond nid darganfwyd y dudalen a dymunwyd"
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:28
-#: contrib/admin/templates/admin/change_form.html:15
-msgid "Add"
-msgstr "Ychwanegu"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Newidio"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Does genych ddim hawl i olygu unrhywbeth."
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Gweithredau Diweddar"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "Fy Ngweithredau"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Dim ar gael"
-
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Ychwanegu %(name)s"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Ydych wedi <a href=\"/password_reset/\">anghofio eich cyfrinair</a>?"
-
-#: contrib/admin/templates/admin/base.html:23
-msgid "Welcome,"
-msgstr "Croeso,"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "Dileu"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
-msgstr ""
-"Bydda dileu'r %(object_name)s '%(object)s' yn ddilyn i dileu'r wrthrychau "
-"perthynol, ond ni chaniateir eich cyfrif ddileu'r mathau o wrthrych canlynol:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
-msgstr ""
-"Ydych yn sicr chi eiso ddileu'r %(object_name)s \"%(object)s\"? Bydd y cwbl "
-"o'r eitemau perthynol canlynol yn cae eu ddileu:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "Yndw, rwy'n sicr"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(title)s "
-msgstr " Gan %(title)s"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Ewch"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "Gweld ar safle"
-
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "Trefnu"
-
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "Trefn:"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Cadw fel newydd"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Cadw ac ychwanegu un arall"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Cadw ac parhau i olygu"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Cadw"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Newid cyfrinair"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Newid cyfrinair yn lwyddianus"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Newidwyd eich cyfrinair."
-
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-#: contrib/admin/templates/registration/password_reset_done.html:4
-msgid "Password reset"
-msgstr "Ailosod cyfrinair"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll reset "
-"your password and e-mail the new one to you."
-msgstr ""
-"Wedi anghofio eich cyfrinair? Rhowch eich cyfeiriad e-bost isod, ac "
-"ailosodan eich cyfrinair ac e-bostio'r un newydd i chi."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Cyfeiriad e-bost:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Ailosodi fy nghyfrinair"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Diolch am dreulio amser ansawdd gyda'r safle we heddiw 'ma."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Ailmewngofnodi"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Ailosod cyfrinair yn lwyddianus"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed a new password to the e-mail address you submitted. You "
-"should be receiving it shortly."
-msgstr "Wedi e-bostio cyfrinair newydd i'r gyfeiriad e-bost "
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Rhowch eich cyfrinair hen, er mwyn gwarchodaeth, yna rhowch eich cyfrinair "
-"newydd dwywaith er mwyn i ni wirio y teipiwyd yn gywir."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Cyfrinair hen:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "Cyfrinair newydd:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "Cadarnhewch cyfrinair:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "Newidio fy nghyfrinair"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Chi'n derbyn yr e-bost yma achos ddymunwyd ailosod cyfrinair"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "er mwyn eich cyfrif defnyddiwr ar %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "Eich cyfrinair newydd yw: %(new_password)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Mae croeso i chi newid y gyfrinair hon wrth fynd i'r dudalen yma:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "Eich enw defnyddiwr, rhag ofn chi wedi anghofio:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "Diolch am ddefnyddio ein safle!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Y tîm %(site_name)s"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Dalennau gofnod"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "Dogfennaeth dalennau gofnod"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "Dogfennaeth er mwyn y dudalen yma"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "Dangos ID gwrthrych"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Yn dangos y fath-cynnwys a'r ID unigryw ar gyfer tudalennau sy'n "
-"cynrychioligwrthrych sengl."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "Golygu'r gwrthrych yma (ffenestr cyfoes)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Yn neidio i'r dudalen weinyddiad ar gyfer tudalennau sy'n cynrychioli "
-"gwrthrych sengl."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "Golygu'r gwrthrych yma (ffenestr newydd)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr "Fel uwchben, ond yn agor y dudalen weinyddiad mewn ffenestr newydd."
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Dyddiad:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Amser:"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr ""
-
-#: contrib/admin/templates/widget/file.html:3
-#, fuzzy
-msgid "Change:"
-msgstr "Newidio"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "ailgyfeirio o"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ddylai hon bod yn lwybr hollol, heb y parth-enw. Er enghraifft: '/"
-"digwyddiadau/chwilio/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "ailgyfeirio i"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Gellir fod naill ai llwybr hollol (fel uwch) neu URL hollol yn ddechrau â "
-"'http://'."
-
-#: contrib/redirects/models.py:12
-msgid "redirect"
-msgstr "ailgyfeiriad"
-
-#: contrib/redirects/models.py:13
-msgid "redirects"
-msgstr "ailgyfeiriadau"
-
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Er enghraifft: '/amdan/cyswllt/'. Sicrhewch gennych slaesau arweiniol ac "
-"trywyddiol."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "teitl"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "cynnwys"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "galluogi sylwadau"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "enw'r templed"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Er enghraifft: 'flatpages/tudalen_cyswllt'. Os nid darparwyd, ddefnyddia'r "
-"system 'flatpages/default'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "cofrestriad gofynnol"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Os wedi dewis, dim ond defnyddwyr a mewngofnodwyd bydd yn gallu gweld y "
-"tudalen."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "tudalen fflat"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "tudalennau fflat"
-
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
-msgid "name"
-msgstr "enw"
-
-#: contrib/auth/models.py:15
-msgid "codename"
-msgstr "enw arwyddol"
-
-#: contrib/auth/models.py:17
-#, fuzzy
-msgid "permission"
-msgstr "Hawl"
-
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
-msgid "permissions"
-msgstr "Hawliau"
-
-#: contrib/auth/models.py:29
-#, fuzzy
-msgid "group"
-msgstr "Grŵp"
-
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
-msgid "groups"
-msgstr "Grwpiau"
-
-#: contrib/auth/models.py:55
-msgid "username"
-msgstr "enw defnyddiwr"
-
-#: contrib/auth/models.py:56
-msgid "first name"
-msgstr "enw cyntaf"
-
-#: contrib/auth/models.py:57
-msgid "last name"
-msgstr "enw olaf"
-
-#: contrib/auth/models.py:58
-msgid "e-mail address"
-msgstr "cyfeiriad e-bost"
-
-#: contrib/auth/models.py:59
-msgid "password"
-msgstr "cyfrinair"
-
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Defnyddiwch '[algo]$[salt]$[hexdigest]'"
-
-#: contrib/auth/models.py:60
-msgid "staff status"
-msgstr "statws staff"
-
-#: contrib/auth/models.py:60
-msgid "Designates whether the user can log into this admin site."
-msgstr "Dylunio ai'r defnyddiwr yn gally mewngofnodi i'r safle weinyddiad yma."
-
-#: contrib/auth/models.py:61
-msgid "active"
-msgstr "gweithredol"
-
-#: contrib/auth/models.py:62
-msgid "superuser status"
-msgstr "statws defnyddiwr swper"
-
-#: contrib/auth/models.py:63
-msgid "last login"
-msgstr "mewngofnod olaf"
-
-#: contrib/auth/models.py:64
-msgid "date joined"
-msgstr "Dyddiad"
-
-#: contrib/auth/models.py:66
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Yn ogystal â'r hawliau trosglwyddwyd dros law, byddai'r defnyddiwr yma hefyd "
-"yn cael y cwbl hawliau a addefwyd i pob grŵp mae o/hi mewn."
-
-#: contrib/auth/models.py:67
-#, fuzzy
-msgid "user permissions"
-msgstr "Hawliau"
-
-#: contrib/auth/models.py:70
-#, fuzzy
-msgid "user"
-msgstr "Defnyddiwr"
-
-#: contrib/auth/models.py:71
-#, fuzzy
-msgid "users"
-msgstr "Defnyddwyr"
-
-#: contrib/auth/models.py:76
-msgid "Personal info"
-msgstr "Gwybodaeth personol"
-
-#: contrib/auth/models.py:77
-msgid "Permissions"
-msgstr "Hawliau"
-
-#: contrib/auth/models.py:78
-msgid "Important dates"
-msgstr "Dyddiadau pwysig"
-
-#: contrib/auth/models.py:79
-msgid "Groups"
-msgstr "Grwpiau"
-
-#: contrib/auth/models.py:219
-#, fuzzy
-msgid "message"
-msgstr "Neges"
-
-#: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/contenttypes/models.py:25
-#, fuzzy
-msgid "python model class name"
-msgstr "enw modwl python"
-
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "math cynnwys"
-
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "mathau cynnwys"
-
-#: contrib/sessions/models.py:35
-msgid "session key"
-msgstr "goriad sesiwn"
-
-#: contrib/sessions/models.py:36
-msgid "session data"
-msgstr "data sesiwn"
-
-#: contrib/sessions/models.py:37
-msgid "expire date"
-msgstr "dyddiad darfod"
-
-#: contrib/sessions/models.py:41
-msgid "session"
-msgstr "sesiwn"
-
-#: contrib/sessions/models.py:42
-msgid "sessions"
-msgstr "sesiynau"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "parth-enw"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "enw arddangos"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "safle"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "safleoedd"
-
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr ""
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr ""
-
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Dydd Llun"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Dydd Mawrth"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Dydd Mercher"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Dydd Iau"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Dydd Gwener"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Dydd Sadwrn"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Dydd Sul"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "Ionawr"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "Chwefror"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
-msgstr "Mawrth"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
-msgstr "Ebrill"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
-msgstr "Mai"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
-msgstr "Mehefin"
-
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
-msgstr "Gorffenaf"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "Awst"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "Medi"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "Hydref"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "Tachwedd"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "Rhagfyr"
-
-#: utils/dates.py:19
-#, fuzzy
-msgid "jan"
-msgstr "ac"
-
-#: utils/dates.py:19
-msgid "feb"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "mar"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "apr"
-msgstr ""
-
-#: utils/dates.py:19
-#, fuzzy
-msgid "may"
-msgstr "diwrnod"
-
-#: utils/dates.py:19
-msgid "jun"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "jul"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "aug"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "sep"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "oct"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "nov"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "dec"
-msgstr ""
-
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "Ion."
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "Chwe."
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "Awst"
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "Medi"
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "Hyd."
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "Tach."
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "Rhag."
-
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "blwyddyn"
-msgstr[1] "blynyddoedd"
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mis"
-msgstr[1] "misoedd"
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "diwrnod"
-msgstr[1] "diwrnodau"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "awr"
-msgstr[1] "oriau"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "munud"
-msgstr[1] "munudau"
-
-#: conf/global_settings.py:37
-msgid "Bengali"
-msgstr "Bengaleg"
-
-#: conf/global_settings.py:38
-msgid "Czech"
-msgstr "Tsieceg"
-
-#: conf/global_settings.py:39
-msgid "Welsh"
-msgstr "Cymraeg"
-
-#: conf/global_settings.py:40
-msgid "Danish"
-msgstr "Daneg"
-
-#: conf/global_settings.py:41
-msgid "German"
-msgstr "Almaeneg"
-
-#: conf/global_settings.py:42
-msgid "Greek"
-msgstr ""
-
-#: conf/global_settings.py:43
-msgid "English"
-msgstr "Saesneg"
-
-#: conf/global_settings.py:44
-msgid "Spanish"
-msgstr "Spaeneg"
-
-#: conf/global_settings.py:45
-msgid "French"
-msgstr "Ffrangeg"
-
-#: conf/global_settings.py:46
-msgid "Galician"
-msgstr "Galisieg"
-
-#: conf/global_settings.py:47
-msgid "Hungarian"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Hebrew"
-msgstr ""
-
-#: conf/global_settings.py:49
-msgid "Icelandic"
-msgstr "Islandeg"
-
-#: conf/global_settings.py:50
-msgid "Italian"
-msgstr "Eidaleg"
-
-#: conf/global_settings.py:51
-msgid "Japanese"
-msgstr ""
-
-#: conf/global_settings.py:52
-msgid "Dutch"
-msgstr ""
-
-#: conf/global_settings.py:53
-msgid "Norwegian"
-msgstr "Norwyeg"
-
-#: conf/global_settings.py:54
-msgid "Brazilian"
-msgstr "Brasileg"
-
-#: conf/global_settings.py:55
-msgid "Romanian"
-msgstr "Romaneg"
-
-#: conf/global_settings.py:56
-msgid "Russian"
-msgstr "Rwsieg"
-
-#: conf/global_settings.py:57
-msgid "Slovak"
-msgstr "Slofaceg"
-
-#: conf/global_settings.py:58
-#, fuzzy
-msgid "Slovenian"
-msgstr "Slofaceg"
-
-#: conf/global_settings.py:59
-msgid "Serbian"
-msgstr "Serbeg"
-
-#: conf/global_settings.py:60
-msgid "Swedish"
-msgstr "Swedeg"
-
-#: conf/global_settings.py:61
-#, fuzzy
-msgid "Ukrainian"
-msgstr "Brasileg"
-
-#: conf/global_settings.py:62
-msgid "Simplified Chinese"
-msgstr "Tsieinëeg Symledig"
-
-#: conf/global_settings.py:63
-msgid "Traditional Chinese"
-msgstr ""
-
-#: core/validators.py:60
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Rhaid i'r werth yma cynnwys lythrennau, rhifau ac tanlinellau yn unig."
-
-#: core/validators.py:64
-#, fuzzy
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Rhaid i'r werth yma cynnwys lythrennau, rhifau, tanlinellau ac slaesau yn "
-"unig."
-
-#: core/validators.py:72
-msgid "Uppercase letters are not allowed here."
-msgstr "Ni chaniateir priflythrennau yma."
-
-#: core/validators.py:76
-msgid "Lowercase letters are not allowed here."
-msgstr "Ni chaniateir lythrennau bach yma."
-
-#: core/validators.py:83
-msgid "Enter only digits separated by commas."
-msgstr "Rhowch digidau gwahanu gyda atalnodau yn unig."
-
-#: core/validators.py:95
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Rhowch cyfeiriad e-bost dilys gwahanu gyda atalnodau."
-
-#: core/validators.py:99
-msgid "Please enter a valid IP address."
-msgstr "Rhowch cyfeiriad IP dilys, os gwelwch yn dda."
-
-#: core/validators.py:103
-msgid "Empty values are not allowed here."
-msgstr "Ni chaniateir gwerthau gwag yma."
-
-#: core/validators.py:107
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Ni chaniateir nodau anrhifol yma."
-
-#: core/validators.py:111
-msgid "This value can't be comprised solely of digits."
-msgstr "Ni gellir y werth yma"
-
-#: core/validators.py:116
-msgid "Enter a whole number."
-msgstr "Rhowch rhif cyfan."
-
-#: core/validators.py:120
-msgid "Only alphabetical characters are allowed here."
-msgstr "Caniateir nodau gwyddorol un unig yma."
-
-#: core/validators.py:124
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Rhowch dyddiad dilys mewn fformat YYYY-MM-DD."
-
-#: core/validators.py:128
-msgid "Enter a valid time in HH:MM format."
-msgstr "Rhowch amser ddilys mewn fformat HH:MM."
-
-#: core/validators.py:132 db/models/fields/__init__.py:468
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Rhowch dyddiad/amser ddilys mewn fformat YYYY-MM-DD HH:MM."
-
-#: core/validators.py:136
-msgid "Enter a valid e-mail address."
-msgstr "Rhowch cyfeiriad e-bost ddilys."
-
-#: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Llwythwch delwedd dilys. Doedd y delwedd a llwythwyd dim yn ddelwedd dilys, "
-"neu roedd o'n ddelwedd llwgr."
-
-#: core/validators.py:155
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "Dydy'r URL %s dim yn pwyntio at delwedd dilys."
-
-#: core/validators.py:159
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Rhaid rifau ffon bod mewn fformat XXX-XXX-XXXX. Mae \"%s\" yn annilys."
-
-#: core/validators.py:167
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "Dydy'r URL %s dim yn pwyntio at fideo Quicktime dilys."
-
-#: core/validators.py:171
-msgid "A valid URL is required."
-msgstr "Mae URL dilys yn ofynnol."
-
-#: core/validators.py:185
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Mae HTML dilys yn ofynnol. Gwallau penodol yw:\n"
-"%s"
-
-#: core/validators.py:192
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "XML wedi ffurfio'n wael: %s"
-
-#: core/validators.py:202
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL annilys: %s"
-
-#: core/validators.py:206 core/validators.py:208
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "Mae'r URL %s yn gyswllt toredig."
-
-#: core/validators.py:214
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Rhowch talfyriad dalaith U.S. dilys."
-
-#: core/validators.py:229
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Gwyliwch eich ceg! Ni chaniateir y gair %s yma."
-msgstr[1] "Gwyliwch eich ceg! Ni chaniateir y geiriau %s yma."
-
-#: core/validators.py:236
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Rhaid i'r faes yma cydweddu'r faes '%s'."
-
-#: core/validators.py:255
-msgid "Please enter something for at least one field."
-msgstr "Rhowch rhywbeth am un maes o leiaf, os gwelwch yn dda."
-
-#: core/validators.py:264 core/validators.py:275
-msgid "Please enter both fields or leave them both empty."
-msgstr "Llenwch y ddwy faes, neu gadewch nhw'n wag, os gwelwch yn dda."
-
-#: core/validators.py:282
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Rhaid roi'r faes yma os mae %(field)s yn %(value)s"
-
-#: core/validators.py:294
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Rhaid roi'r faes yma os mae %(field)s dim yn %(value)s"
-
-#: core/validators.py:313
-msgid "Duplicate values are not allowed."
-msgstr "Ni chaniateir gwerthau ddyblyg."
-
-#: core/validators.py:336
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Rhaid i'r gwerth yma fod yn bŵer o %s."
-
-#: core/validators.py:347
-msgid "Please enter a valid decimal number."
-msgstr "Rhowch rhif degol dilys, os gwelwch yn dda."
-
-#: core/validators.py:349
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Rhowch rhif degol dilys gyda cyfanswm %s digidau o fwyaf."
-msgstr[1] "Rhowch rhif degol dilys gyda cyfanswm %s digid o fwyaf."
-
-#: core/validators.py:352
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] ""
-"Rhowch rif degol dilydd gyda o fwyaf %s lle degol, os gwelwch yn dda."
-msgstr[1] ""
-"Rhowch rif degol dilydd gyda o fwyaf %s lleoedd degol, os gwelwch yn dda."
-
-#: core/validators.py:362
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Sicrhewch bod yr ffeil a llwythwyd yn o leiaf %s beit."
-
-#: core/validators.py:363
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Sicrhewch bod yr ffeil a llwythwyd yn %s beit o fwyaf."
-
-#: core/validators.py:376
-msgid "The format for this field is wrong."
-msgstr "Mae'r fformat i'r faes yma yn anghywir."
-
-#: core/validators.py:391
-msgid "This field is invalid."
-msgstr "Mae'r faes yma yn annilydd."
-
-#: core/validators.py:426
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Ni gellir adalw unrhywbeth o %s."
-
-#: core/validators.py:429
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"Dychwelodd yr URL %(url)s y pennawd Content-Type annilys '%(contenttype)s'."
-
-#: core/validators.py:462
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Caewch y tag anghaedig %(tag)s o linell %(line)s. (Linell yn ddechrau â \"%"
-"(start)s\".)"
-
-#: core/validators.py:466
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Ni chaniateir rhai o'r destun ar linell %(line)s yn y gyd-destun yna. "
-"(Linell yn ddechrau â \"%(start)s\".)"
-
-#: core/validators.py:471
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"Mae \"%(attr)s\" ar lein %(line)s yn priodoledd annilydd. (Linell yn "
-"ddechrau â \"%(start)s\".)"
-
-#: core/validators.py:476
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"Mae \"<%(tag)s>\" ar lein %(line)s yn tag annilydd. (Linell yn ddechrau â \"%"
-"(start)s\".)"
-
-#: core/validators.py:480
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Mae tag ar lein %(line)s yn eisiau un new fwy priodoleddau gofynnol. (Linell "
-"yn ddechrau â \"%(start)s\".)"
-
-#: core/validators.py:485
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Mae gan y priodoledd \"%(attr)s\" ar lein %(line)s gwerth annilydd. (Linell "
-"yn ddechrau â \"%(start)s\".)"
-
-#: db/models/manipulators.py:302
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr ""
-
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "Mae angen y faes yma."
-
-#: db/models/fields/__init__.py:337
-#, fuzzy
-msgid "This value must be an integer."
-msgstr "Rhaid i'r gwerth yma fod yn bŵer o %s."
-
-#: db/models/fields/__init__.py:369
-#, fuzzy
-msgid "This value must be either True or False."
-msgstr "Rhaid i'r gwerth yma fod yn bŵer o %s."
-
-#: db/models/fields/__init__.py:385
-#, fuzzy
-msgid "This field cannot be null."
-msgstr "Mae'r faes yma yn annilydd."
-
-#: db/models/fields/__init__.py:562
-msgid "Enter a valid filename."
-msgstr "Rhowch enw ffeil dilys."
-
-#: db/models/fields/related.py:43
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Rhowch %s dilys, os gwelwch yn dda."
-
-#: db/models/fields/related.py:579
-#, fuzzy
-msgid "Separate multiple IDs with commas."
-msgstr " Gwahanwch mwy nag un ID gyda atalnodau."
-
-#: db/models/fields/related.py:581
-#, fuzzy
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Gafaelwch lawr \"Control\", neu \"Command\" ar Fac, i ddewis mwy nag un."
-
-#: db/models/fields/related.py:625
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-msgstr[1] ""
-
-#: forms/__init__.py:380
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] ""
-msgstr[1] ""
-
-#: forms/__init__.py:385
-msgid "Line breaks are not allowed here."
-msgstr "Ni chaniateir toriadau llinell yma."
-
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Dewisiwch dewis dilys; dydy '%(data)s' dim mewn %(choices)s."
-
-#: forms/__init__.py:645
-msgid "The submitted file is empty."
-msgstr "Mae'r ffeil yn wag."
-
-#: forms/__init__.py:699
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Rhowch rhif cyfan rhwng -32,768 a 32,767."
-
-#: forms/__init__.py:708
-msgid "Enter a positive number."
-msgstr "Rhowch rhif positif."
-
-#: forms/__init__.py:717
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Rhowch rhif cyfan rhwng 0 a 32,767."
-
-#: template/defaultfilters.py:379
-msgid "yes,no,maybe"
-msgstr "ie,na,efallai"
-
-#~ msgid "Comment"
-#~ msgstr "Sylw"
-
-#~ msgid "Comments"
-#~ msgstr "Sylwadau"
-
-#~ msgid "String (up to 50)"
-#~ msgstr "Llinyn (i fyny at 50)"
-
-#~ msgid "label"
-#~ msgstr "label"
-
-#~ msgid "package"
-#~ msgstr "pecyn"
-
-#~ msgid "packages"
-#~ msgstr "pecynau"
-
-#, fuzzy
-#~ msgid "count"
-#~ msgstr "cynnwys"
diff --git a/parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index c35e11b..0000000
--- a/parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 1da646b..0000000
--- a/parts/django/django/conf/locale/cy/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,111 +0,0 @@
-# Translation of Django admin JS to Welsh.
-# Copyright (C) 2005 Django project
-# This file is distributed under the same license as the Django package.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2005-12-04 16:53+0000\n"
-"Last-Translator: Jason Davies <jason@jasondavies.com>\n"
-"Language-Team: Cymraeg <cy@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-#, fuzzy
-msgid "Choose all"
-msgstr "Dewis amser"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Ionawr Chwefror Mawrth Ebrill Mai Mehefin Gorffennaf Medi Hydref Tachwedd "
-"Rhagfyr"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S Ll M M I G S"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "Nawr"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "Cloc"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "Dewis amser"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "Hanner nos"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "6 y.b."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "Hanner dydd"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "Diddymu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "Heddiw"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "Calendr"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "Ddoe"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "Yfory"
diff --git a/parts/django/django/conf/locale/cy/__init__.py b/parts/django/django/conf/locale/cy/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/cy/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/cy/formats.py b/parts/django/django/conf/locale/cy/formats.py
deleted file mode 100644
index a58d81f..0000000
--- a/parts/django/django/conf/locale/cy/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-SHORT_DATE_FORMAT = 'j M Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/da/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/da/LC_MESSAGES/django.mo
deleted file mode 100644
index 99f6002..0000000
--- a/parts/django/django/conf/locale/da/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/da/LC_MESSAGES/django.po b/parts/django/django/conf/locale/da/LC_MESSAGES/django.po
deleted file mode 100644
index 63526f9..0000000
--- a/parts/django/django/conf/locale/da/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5105 +0,0 @@
-# Translation of django.po to Danish
-# This file is distributed under the same license as the Django package.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django 1.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-26 15:48+0200\n"
-"PO-Revision-Date: 2010-02-20 20:41+0200\n"
-"Last-Translator: Finn Gruwier Larsen<finn@gruwier.dk>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabisk"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgarsk"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalsk"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosnisk"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Catalansk"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Tjekkisk"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Walisisk"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dansk"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Tysk"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Græsk"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Engelsk"
-
-#: conf/global_settings.py:55
-msgid "Spanish"
-msgstr "Spansk"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Argentisk spansk"
-
-#: conf/global_settings.py:57
-msgid "Estonian"
-msgstr "Estisk"
-
-#: conf/global_settings.py:58
-msgid "Basque"
-msgstr "Baskisk"
-
-#: conf/global_settings.py:59
-msgid "Persian"
-msgstr "Persisk"
-
-#: conf/global_settings.py:60
-msgid "Finnish"
-msgstr "Finsk"
-
-#: conf/global_settings.py:61
-msgid "French"
-msgstr "Fransk"
-
-#: conf/global_settings.py:62
-msgid "Frisian"
-msgstr "Frisisk"
-
-#: conf/global_settings.py:63
-msgid "Irish"
-msgstr "Irsk"
-
-#: conf/global_settings.py:64
-msgid "Galician"
-msgstr "Galicisk"
-
-#: conf/global_settings.py:65
-msgid "Hebrew"
-msgstr "Hebræisk"
-
-#: conf/global_settings.py:66
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:67
-msgid "Croatian"
-msgstr "Kroatisk"
-
-#: conf/global_settings.py:68
-msgid "Hungarian"
-msgstr "Ungarsk"
-
-#: conf/global_settings.py:69
-msgid "Icelandic"
-msgstr "Islandsk"
-
-#: conf/global_settings.py:70
-msgid "Italian"
-msgstr "Italiensk"
-
-#: conf/global_settings.py:71
-msgid "Japanese"
-msgstr "Japansk"
-
-#: conf/global_settings.py:72
-msgid "Georgian"
-msgstr "Georgisk"
-
-#: conf/global_settings.py:73
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:74
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:75
-msgid "Korean"
-msgstr "Koreansk"
-
-#: conf/global_settings.py:76
-msgid "Lithuanian"
-msgstr "Litauisk"
-
-#: conf/global_settings.py:77
-msgid "Latvian"
-msgstr "Lettisk"
-
-#: conf/global_settings.py:78
-msgid "Macedonian"
-msgstr "Makedonsk"
-
-#: conf/global_settings.py:79
-msgid "Dutch"
-msgstr "Hollandsk"
-
-#: conf/global_settings.py:80
-msgid "Norwegian"
-msgstr "Norsk"
-
-#: conf/global_settings.py:81
-msgid "Polish"
-msgstr "Polsk"
-
-#: conf/global_settings.py:82
-msgid "Portuguese"
-msgstr "Portugisisk"
-
-#: conf/global_settings.py:83
-msgid "Brazilian Portuguese"
-msgstr "Brasiliansk portugisisk"
-
-#: conf/global_settings.py:84
-msgid "Romanian"
-msgstr "Rumænsk"
-
-#: conf/global_settings.py:85
-msgid "Russian"
-msgstr "Russisk"
-
-#: conf/global_settings.py:86
-msgid "Slovak"
-msgstr "Slovakisk"
-
-#: conf/global_settings.py:87
-msgid "Slovenian"
-msgstr "Slovensk"
-
-#: conf/global_settings.py:88
-msgid "Albanian"
-msgstr "Albansk"
-
-#: conf/global_settings.py:89
-msgid "Serbian"
-msgstr "Serbisk"
-
-#: conf/global_settings.py:90
-msgid "Serbian Latin"
-msgstr "Serbisk (latin)"
-
-#: conf/global_settings.py:91
-msgid "Swedish"
-msgstr "Svensk"
-
-#: conf/global_settings.py:92
-msgid "Tamil"
-msgstr "Tamil"
-
-#: conf/global_settings.py:93
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:94
-msgid "Thai"
-msgstr "Thai"
-
-#: conf/global_settings.py:95
-msgid "Turkish"
-msgstr "Tyrkisk"
-
-#: conf/global_settings.py:96
-msgid "Ukrainian"
-msgstr "Ukrainsk"
-
-#: conf/global_settings.py:97
-msgid "Vietnamese"
-msgstr "Vietnamesisk"
-
-#: conf/global_settings.py:98
-msgid "Simplified Chinese"
-msgstr "Forenklet kinesisk"
-
-#: conf/global_settings.py:99
-msgid "Traditional Chinese"
-msgstr "Traditionelt kinesisk"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d %(items)s blev slettet."
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
-msgid "Are you sure?"
-msgstr "Er du sikker?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Slet valgte %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Efter %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Alle"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Når som helst"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "De sidste 7 dage"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Denne måned"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Dette år"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Nej"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Ukendt"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Handling"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "handlingstid"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objekt-ID"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objekt repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "handlingsflag"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "ændringsmeddelelse"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "logmeddelelse"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "logmeddelelser"
-
-#: contrib/admin/options.py:142 contrib/admin/options.py:157
-msgid "None"
-msgstr "Ingen"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr "Ændrede %s."
-
-#: contrib/admin/options.py:563 contrib/admin/options.py:573
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:562
-msgid "and"
-msgstr "og"
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Tilføjede %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Ændrede %(list)s for %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Slettede %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:581
-msgid "No fields changed."
-msgstr "Ingen felter ændret."
-
-#: contrib/admin/options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" blev tilføjet i databasen."
-
-#: contrib/admin/options.py:651 contrib/admin/options.py:684
-msgid "You may edit it again below."
-msgstr "Du kan redigere det igen herunder."
-
-#: contrib/admin/options.py:661 contrib/admin/options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr "Du kan tilføje endnu en %s herunder."
-
-#: contrib/admin/options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" blev ændret."
-
-#: contrib/admin/options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" blev tilføjet. Du kan redigere det igen herunder."
-
-#: contrib/admin/options.py:744
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-
-#: contrib/admin/options.py:762
-msgid "No action selected."
-msgstr "Ingen handling valgt."
-
-#: contrib/admin/options.py:842
-#, python-format
-msgid "Add %s"
-msgstr "Tilføj %s"
-
-#: contrib/admin/options.py:868 contrib/admin/options.py:1080
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Der findes ikke et %(name)s-objekt med primærnøgle %(key)r."
-
-#: contrib/admin/options.py:933
-#, python-format
-msgid "Change %s"
-msgstr "Ret %s"
-
-#: contrib/admin/options.py:978
-msgid "Database error"
-msgstr "databasefejl"
-
-#: contrib/admin/options.py:1014
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s blev ændret."
-msgstr[1] "%(count)s %(name)s blev ændret."
-
-#: contrib/admin/options.py:1041
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s valgt"
-msgstr[1] "Alle %(total_count)s valgt"
-
-#: contrib/admin/options.py:1046
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 af %(cnt)s valgt"
-
-#: contrib/admin/options.py:1093
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" blev slettet."
-
-#: contrib/admin/options.py:1130
-#, python-format
-msgid "Change history: %s"
-msgstr "Ændringshistorik: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Indtast venligst et korrekt brugernavn og adgangskode. Bemærk, at begge "
-"felter er versalfølsomme."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Log venligst ind igen, da din session er udløbet."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Det ser ud til din browser ikke er indstillet til at acceptere cookies. Slå "
-"venligst cookies til, genindlæs denne side og prøv igen."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Brugernavne kan ikke indeholde tegnet '@'."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Din e-mail-adresse er ikke dit brugernavn. Prøv '%s' i stedet."
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Website-administration"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Log ind"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "Administration af %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Dato:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Tid:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Nuværende:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Ret:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Slå op"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Tilføj endnu en"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Siden blev ikke fundet"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Vi beklager, men den ønskede side kunne ikke findes"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Hjem"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serverfejl"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serverfejl (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serverfejl <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Der opstod en fejl. Fejlen er rapporteret til website-administratoren via e-"
-"mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Udfør den valgte handling"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Udfør"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr ""
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Velkommen,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentation"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Skift adgangskode"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Log ud"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django website-administration"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administration"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Tilføj"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historik"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Se på website"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Ret venligst fejlen herunder."
-msgstr[1] "Ret venligst fejlene herunder."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Tilføj %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrer"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Slet"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Hvis du sletter %(object_name)s '%(escaped_object)s', vil du også slette "
-"relaterede objekter, men din konto har ikke rettigheder til at slette "
-"følgende objekttyper:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Er du sikker på du vil slette %(object_name)s \"%(escaped_object)s\"? Alle "
-"de følgende relaterede objekter vil blive slettet:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, jeg er sikker"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Slet flere objekter"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Hvis du sletter %(object_name)s, vil du også slette relaterede objekter, men "
-"din konto har ikke rettigheder til at slette følgende objekttyper:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Er du sikker på du vil slette de valgte %(object_name)s-objekter? Alle de "
-"følgende relaterede objekter vil blive slettet:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Efter %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeller til rådighed i %(name)s-applikationen."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Ret"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Du har ikke rettigheder til at foretage ændringer."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Seneste handlinger"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mine handlinger"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ingen tilgængelige"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Ukendt indhold"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Der er noget galt med databaseinstallationen. Kontroller om "
-"databasetabellerne er blevet oprettet og at databasen er læsbar for den "
-"pågældende bruger."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Brugernavn:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Adgangskode:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dato/tid"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Bruger"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Funktion"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Dette objekt har ingen ændringshistorik. Det blev formentlig ikke tilføjet "
-"via dette administrations-site"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Vis alle"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Gem"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Søg"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultat"
-msgstr[1] "%(counter)s resultater"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s i alt"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Gem som ny"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Gem og tilføj endnu en"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Gem og fortsæt med at redigere"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Indtast først et brugernavn og en adgangskode. Derefter får du yderligere "
-"redigeringsmuligheder."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Indtast en ny adgangskode for brugeren <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Adgangskode"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Adgangskode (igen)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Indtast den samme adgangskode som ovenfor for verifikation."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Tilføj endnu en %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Fjern"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Slet?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Tak for den kvalitetstid du brugte på websitet i dag."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Log ind igen"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Skift adgangskode"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Adgangskoden blev ændret"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Din adgangskode blev ændret."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Indtast venligst din gamle adgangskode for en sikkerheds skyld og indtast så "
-"din nye adgangskode to gange, så vi kan være sikre på, at den er indtastet "
-"korrekt."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Gammel adgangskode"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Ny adgangskode"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Skift min adgangskode"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Nulstil adgangskode"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Adgangskoden blev nulstillet"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Din adgangskode er blevet sat. Du kan logge ind med den nu."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Bekræftelse for nulstilling af adgangskode"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Indtast ny adgangskode"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Indtast venligst din nye adgangskode to gange, så vi kan være sikre på, at "
-"den er indtastet korrekt."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Ny adgangskode:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Bekræft ny adgangskode:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Adgangskoden blev ikke nulstillet"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Linket for nulstilling af adgangskoden er ugyldigt, måske fordi det allerede "
-"har været brugt. Anmod venligst påny om nulstilling af adgangskoden."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Adgangskoden blev nulstillet"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Vi har sendt en instruktion til din e-mail-adresse. Du skulle modtage den om "
-"ganske kort tid."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Du modtager denne e-mail, fordi du har bedt om at få nulstillet din "
-"adgangskode"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "til din brugerkonto ved %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Gå venligst til denne side og vælg en ny adgangskode:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "For det tilfælde at du skulle have glemt dit brugernavn er det:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Tak fordi du brugte vores website!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Med venlig hilsen %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Har du glemt din adgangskode? Indtast din e-mail-adresse herunder, så sender "
-"vi dig en instruktion vedrørende ny adgangskode."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mail-adresse:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Nulstil min adgangskode"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Alle datoer"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Vælg %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Vælg %s, der skal ændres"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "website"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "skabelon"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Applikationen %r blev ikke fundet"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Modellen %(model_name)r ikke fundet i applikationen %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "det relaterede `%(app_label)s.%(data_type)s`-objekt"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "relaterede `%(app_label)s.%(object_name)s`-objekter"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "alle %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "antal %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Felter på %s-objekter"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ser ikke ud til at være et urlpattern-objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentations-bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">For at installere bookmarklets, træk linket til din\n"
-"bogmærkelinje eller højreklik på linket og tilføj det til dine bogmærker.\n"
-"Du kan nu markere bookmarkletten fra enhver side på websitet.\n"
-"Bemærk, at nogle af disse bookmarkletter kræver, at du ser på websitet fra\n"
-"en computer der opfattes som \"intern\" (tal med din systemadministrator,\n"
-"hvis du ikke er sikker på om din computer er \"intern\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentation for denne side"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Bringer dig fra en hvilken som helst side til dokumentationen for det view, "
-"der genererer den pågældende side."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Vis objekt-ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Viser indholdstypen og det unikke ID for sider, der repræsenterer et enkelt "
-"objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Rediger dette objekt (i det aktuelle vindue)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Springer til administrationssiden for sider, der repræsenterer et enkelt "
-"objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Rediger dette objekt (i nyt vindue)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Som ovenfor, men åbner administrationssiden i et nyt vindue."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Personlig information"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Rettigheder"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Vigtige datoer"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupper"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Adgangskoden blev ændret."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Skift adgangskode: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Brugernavn"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Påkrævet. Højst 30 tegn. Kun bogstaver og cifre samt @/./+/-/_"
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-"Dette felt må kun indeholde bogstaver og cifre samt disse tegn: @/./+/-/_"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Bekræftelse af adgangskode"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "En bruger med dette brugernavn findes allerede."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "De to adgangskoder var ikke identiske."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Denne konto er inaktiv."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Din browser ser ud til ikke at have cookies aktiveret. Cookies er påkrævet "
-"for at kunne logge ind."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Den e-mail-adresse er ikke tilknyttet en konto. Er du sikker på at du har "
-"registreret dig?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Adgangskode nulstillet på %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Bekræftelse af ny adgangskode"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"Din gamle adgangskode blev ikke indtastet korrekt. Indtast den venligst igen."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "navn"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kodenavn"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "rettighed"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "rettigheder"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "gruppe"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupper"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "brugernavn"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Påkrævet. Højst 30 tegn. Kun bogstaver og cifre samt disse tegn: @/./+/-/_"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "fornavn"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "efternavn"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-mail-adresse"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "adgangskode"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Brug '[algo]$[salt]$[hexdigest]' eller brug <a href=\"password/\">formularen "
-"til skift af adgangskode</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "admin-status"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Bestemmer om brugeren kan logge ind på dette administrationswebsite."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktiv"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Bestemmer om brugeren skal behandles som aktiv. Fravælg dette frem for at "
-"slette en konto."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "superbrugerstatus"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Bestemmer at denne bruger har alle rettigheder uden at tildele dem eksplicit."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "sidst logget ind"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "dato for registrering"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Udover de rettigheder, der manuelt er tildelt brugeren, vil denne også få "
-"alle rettigheder, der er tildelt hver gruppe, brugeren er medlem af."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "Rettigheder"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "bruger"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "brugere"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "meddelelse"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Logget ud"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Indtast en gyldig e-mail-adresse."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Indhold"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "Markeret"
-msgstr[1] "Markeret"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Marker valgte kommentarer"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "Godkendt"
-msgstr[1] "Godkendt"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Godkend valgte kommentarer"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "fjernet"
-msgstr[1] "fjernet"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Fjern valgte kommentarer"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 kommentar blev %(action)s"
-msgstr[1] "%(count)s kommentarer blev %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "kommentarer på %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Seneste kommentarer på %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Navn"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-mail-adresse"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Kommentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Var din mund! Ordet %s er ikke tilladt her."
-msgstr[1] "Var din mund! Ordene %s er ikke tilladt her."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Hvis du indtaster noget i dette felt, vil din kommentar blive betragtet som "
-"spam."
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "indholdstype"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "objekt-ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "brugerens navn"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "brugerens e-mail-adresse"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "brugerens URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "kommentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "dato/tidspunkt for oprettelse"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP-adresse"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "er offentlig"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Hvis du fjerner afkrydsningen her, bliver din kommentar slettet fra sitet."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "er fjernet"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Afkryds denne boks, hvis kommentaren er upassende. Beskeden \"Denne "
-"kommentar er blevet fjernet\" vil blive vist i stedet."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "kommentarer"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Denne kommentar blev indsendt af en autenticeret bruger; derfor er navnet "
-"skrivebeskyttet."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Denne kommentar blev indsendt af en autenticeret bruger; derfor er e-mail-"
-"adressen skrivebeskyttet."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Indsendt af %(user)s den %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "Flag"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "dato"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "kommentarflag"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "kommentarflag"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Godkend en kommentar"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Vil du godkende denne kommentar?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Godkend"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Tak for godkendelsen"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Tak fordi du tog dig tid til at højne kvaliteten af diskussionen på vores "
-"website"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Fjern en kommentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Skal kommentaren fjernes?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Tak for fjernelsen"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Flag denne kommentar"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Skal kommentaren flages?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Flag"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Tak for markeringen"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Indsend"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Forhåndsvis"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Tak for kommenteringen"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Tak for kommentaren"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Forhåndsvis kommentar"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Ret venligst fejlen herunder."
-msgstr[1] "Ret venligst fejlene herunder."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Indsend din kommentar"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "eller gennemfør ændringer"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "klassenavn i Python-model"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "indholdstyper"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Eksempel: '/om/kontakt/'. Vær opmærksom på, at der skal være skråstreg både "
-"først og sidst."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Dette felt må kun indeholde bogstaver, cifre, understreger, bindestreger og "
-"skråstreger."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Avancerede muligheder"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titel"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "indhold"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "tillad kommentarer"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "skabelonnavn"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Eksempel: 'flatpages/kontaktside'. Hvis dette ikke tilbydes, bruger systemet "
-"'flatpages/default'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "registrering påkrævet"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Hvis denne boks er markeret, vil kun brugere der er logget ind, kunne se "
-"siden."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flad side"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flade sider"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Tiden er udløbet - vi beklager. Vær venlig at fortsætte med at udfylde "
-"formularen på denne side."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punkt"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Linjesegment"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Multipunkt"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Multilinjesegment"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Multipolygon"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Geometrisamling"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Ingen værdi givet for geometri."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Ugyldig geometriværdi."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Ugyldig gemometritype."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Der opstod en fejl ved transformation af geometrien til formularfeltets SRID"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f million"
-msgstr[1] "%(value).1f millioner"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milliard"
-msgstr[1] "%(value).1f milliarder"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billion"
-msgstr[1] "%(value).1f billioner"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "en"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "to"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "fire"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "fem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seks"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "syv"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "otte"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "ni"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "i dag"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "i morgen"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "i går"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Indtast et postnummer i formatet NNNN eller ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "I dette felt skal kun indtastes cifre."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Dette felt kræver 7 eller 8 cifre."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Indtast en gyldig CUIT i format XX-XXXXXXXX-X eller XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Ugyldig CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Lower Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Upper Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vienna"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Indtast et postnummer i formatet XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Indtast et gyldigt østrigsk sygesikringsnummer i format XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Indtast et firecifret postnummer."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Indtast et postnummer i formatet XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefinnumre skal være i formatet XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Vælg en gyldig brasiliansk provins. Denne provins er ikke gyldig."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Ugyldigt CPF-nummer."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Dette felt kræver mindst 11 og højst 14 tegn."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Ugyldigt CNPJ-nummer."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "dette felt kræver mindst 14 cifre."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Indtast et postnummer i formatet XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Indtast et gyldigt kanadisk sygesikringsnummer i formatet XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Indtast et svejtsisk identitets- eller pasnr. i format X1234567<0 eller "
-"1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Indtast en gyldig chilensk RUT"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Indtast en gyldig chilensk RUT. Formatet er XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Den chilenske RUT er ugyldig."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prag"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Centrale Böhmen"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Sydlige Böhmen"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilsen-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Carlsbad-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Usti-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice-region"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysocina region"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Sydmoravien"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomuc-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlin-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravien-Silesien"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Indtast et postnr. i format XXXXX eller XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Indtast et fødselsnr. i formatet XXXXXX/XXXX or XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Ugyldig værdi for køn. Gyldige værdier er 'f' og 'm'."
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Indtast et gyldigt fødselsnummer."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Indtast et IC-nummer."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lower Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "North Rhine-Westphalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Indtast et postnummer i formatet XXXXX"
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Indtast et tysk identiteskortsnr. i formatet XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principality of Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearic Islands"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Basque Country"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canary Islands"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castile-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castile and Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Region of Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Indtast et gyldigt postnr. i området 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Indtast et gyldigt telefonnr. i et af disse formater: 6XXXXXXXX, 8XXXXXXXX, "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Indtast venligst gyldig NIF, NIE eller CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Indtast venligst gyldig NIF eller NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Ugyldig kontrolsum for NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Ugyldig kontrolsum for NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Ugyldig kontrolsum for CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Indtast venligst et gyldigt bankkontonr. i formatet XXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Ugyldig kontrolsum for bankkontonr."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Indtast et gyldigt finsk sygesikringsnummer."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonnumre skal være i formatet 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Indtast et gyldigt postnummer"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Indtast et gyldigt telefonnummer"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Indtast et gyldigt bilnummer"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Indtast et gyldigt NIK/KTP-nummer."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federal Government"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Shigo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrol"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Indtast et postnr. i formatet XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Indtast et gyldigt islandsk identifikationsnr. Formatet er XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Det islandske identifikationsnummer er ikke gyldigt."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Indtast et gyldigt postnummer."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Indtast et gyldigt sygesikringsnummer."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Indtast et gyldigt momsnummer."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Indtast et gyldigt postnr. i formatet XXXXXXX eller XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Indtast et gyldigt kuwaitisk personnummer."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Indtast et gyldigt postnummer"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Indtast et gyldigt SoFi-nummer"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Indtast et gyldigt norsk sygesikringsnummer."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Dette felt kræver 8 cifre."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Dette felt kræver 11 cifre."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Nationale identifikationsnumre kræver 11 cifre."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Forkert kontrolsum for nationalt identifikationsnummer."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Indtast et NIP i formatet XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Forkert kontrolsum for NIP. "
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "National Business Register Number (REGON) består af 9 eller 14 cifre."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Forkert kontrolsum for REGON-nr."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Indtast et postnummer i formatet XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Indtast et postnummer i formatet XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Indtast et gyldigt CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Indtast et gyldigt CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Indtast et gyldigt IBAN i formatet ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefinnumre skal være i formatet XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Indtast et gyldigt postnummer i formatet XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Indtast et gyldigt svensk organisationsnummer."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Indtast et gyldigt svensk personnummer."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Koordinationsnumre er ikke tilladt."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Indtast et svensk postnummer i formatet XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "nov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Slovakisk"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Fransk"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica region"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava region"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kosice region"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra region"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Presov region"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trencin region"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava region"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zilina region"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Indtast et gyldigt postnummer."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Northern Ireland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Walisisk"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Indtast et postnr. i format XXXXX eller XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonnumre skal være i formatet XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Indtast et gyldigt U. S sygesikringsnummer i format XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Indtast en amerikansk stat."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stat (i USA, to store bogstaver)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Indtast et gyldigt CI-nummer i formatet X.XXX.XXX-X,XXXXXXX-X eller XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Indtast et gyldigt CI-nummer."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Indtast et gyldigt sydafrikansk sygesikringsnummer."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Indtast et gyldigt sydafrikansk postnummer."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "doven meddelelse"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "rediriger fra"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Dette skal være en absolut sti uden domænenavnet. For eksempel: '/nyheder/"
-"soeg/'"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "rediriger til"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Dette kan enten være en absolut sti (som ovenfor), eller en komplet URL "
-"startende med 'http://'"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "rediriger"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redirigeringer"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sessionsnøgle"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sessionsdata"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "udløbsdato"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "session"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessioner"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domænenavn"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "vist navn"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "websites"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Indtast en gyldig værdi."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Indtast en gyldig URL."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Denne URL henviser ikke til en gyldig side eller fil."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Dette felt må kun indeholde bogstaver, cifre, understreger og bindestreger."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Indtast en gyldig IPv4-adresse."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Indtast kun cifre adskilt af kommaer."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Denne værdi skal være %(limit_value)s (den er %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Denne værdi skal være mindre end eller lig %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Denne værdi skal være større end eller lig %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Denne værdi skal mindst indeholde %(limit_value)d tegn (den indeholder %"
-"(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Denne værdi må maksimalt indeholde %(limit_value)d tegn (den har %"
-"(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s skal være unik for %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s med dette %(field_label)s eksisterer allerede."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Værdien %r er ikke et gyldigt valg."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Dette felt kan ikke være null."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Dette felt kan ikke være tomt."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Felt af type: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Heltal"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Denne værdi skal et heltal."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Denne værdi skal være enten True eller False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolsk (enten True eller False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Streng (op til %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Kommaseparerede heltal"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Dato (uden tid)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Indtast en gyldig dato i formatet ÅÅÅÅ-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ugyldig dato: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Indtast gyldig dato og tid i formatet ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Dato (med tid)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Denne værdi skal et decimaltal."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Decimaltal"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-mail-adresse"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Sti"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Denne værdi skal være et kommatal."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Flydende-komma-tal"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Stort heltal (8 byte)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Denne værdi skal være None, True eller False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolsk (True, False eller None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Tekst"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Tid"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Indtast en gyldig tid i formatet TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML-tekst"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "En model %(model)s med primærnøgle %(pk)r eksisterer ikke."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Fremmednøgle (type bestemt af relateret felt)"
-
-#: db/models/fields/related.py:923
-msgid "One-to-one relationship"
-msgstr "En-til-en-relation"
-
-#: db/models/fields/related.py:983
-msgid "Many-to-many relationship"
-msgstr "Mange-til-mange-relation"
-
-#: db/models/fields/related.py:1003
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Hold \"Ctrl\" (eller \"Æbletasten\" på Mac) nede for at vælge mere end en."
-
-#: db/models/fields/related.py:1064
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Indtast venligst gyldige %(self)s-ID'er. Værdien %(value)r er ugyldig."
-msgstr[1] ""
-"Indtast venligst gyldige %(self)s-ID'er. Værdierne %(value)r er ugyldige."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Dette felt er påkrævet."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Indtast et heltal."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Indtast et tal."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Der må maksimalt være %s cifre i alt."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Der må højst være %s decimalpladser."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Der må maksimalt være %s cifre før decimaltegnet."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Indtast en gyldig dato."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Indtast en gyldig tid."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Indtast gyldig dato/tid."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Ingen fil blev indsendt. Kontroller kodningstypen i formularen."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Ingen fil blev indsendt."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Den indsendte fil er tom."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Denne værdi må maksimalt indeholde %(max)d tegn (den har %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Indsend en billedfil. Filen, du indsendte, var enten ikke et billede eller "
-"en defekt billedfil."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Marker en gyldigt valgmulighed; '%(value)s' er ikke en af de tilgængelige "
-"valgmuligheder."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:995
-msgid "Enter a list of values."
-msgstr "Indtast en liste af værdier."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Rækkefølge"
-
-#: forms/models.py:556
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Ret venligst duplikerede data for %(field)s."
-
-#: forms/models.py:560
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Ret venligst de duplikerede data for %(field)s, som skal være unik."
-
-#: forms/models.py:566
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Ret venligst de duplikerede data for %(field_name)s, som skal være unik for %"
-"(lookup)s i %(date_field)s."
-
-#: forms/models.py:574
-msgid "Please correct the duplicate values below."
-msgstr "Ret venligst de duplikerede data herunder."
-
-#: forms/models.py:848
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Den indlejrede fremmednøgle passede ikke med forælderinstansens primærnøgle."
-
-#: forms/models.py:914
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Marker en gyldig valgmulighed. Det valg, du har foretaget, er ikke blandt de "
-"tilgængelige valgmuligheder."
-
-#: forms/models.py:996
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-"Marker et gyldigt valg. %s er ikke en af de tilgængelige valgmuligheder."
-
-#: forms/models.py:998
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" er ikke en gyldig værdi for en primærnøgle."
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "ja,nej,måske"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "midnat"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "middag"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Mandag"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Tirsdag"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Onsdag"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Torsdag"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Fredag"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Lørdag"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Søndag"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Man"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Tir"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Ons"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Tor"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Fre"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Lør"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Søn"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februar"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "marts"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "maj"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "august"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "december"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "maj"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sept"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dec."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "eller"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "år"
-msgstr[1] "år"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "måned"
-msgstr[1] "måneder"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "uge"
-msgstr[1] "uger"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dag"
-msgstr[1] "dage"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "time"
-msgstr[1] "timer"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minut"
-msgstr[1] "minutter"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutter"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:512
-msgid "DATE_FORMAT"
-msgstr "j. F Y"
-
-#: utils/translation/trans_real.py:513
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y H:i"
-
-#: utils/translation/trans_real.py:514
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:535
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:536
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s blev oprettet."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s blev opdateret."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s blev slettet."
diff --git a/parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 47490d8..0000000
--- a/parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.po
deleted file mode 100644
index f220938..0000000
--- a/parts/django/django/conf/locale/da/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,155 +0,0 @@
-# Translation of djangojs.po to Danish
-# This file is distributed under the same license as the Django package.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 11:57+0200\n"
-"PO-Revision-Date: 2010-08-07 22:00+0200\n"
-"Last-Translator: Finn Gruwier Larsen<finngruwierlarsen@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Tilgængelige %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Vælg alle"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Tilføj"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Fjern"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valgte %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Foretag dit/dine valg og klik "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Fravælg alle"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s af %(cnt)s valgt"
-msgstr[1] "%(sel)s af %(cnt)s valgt"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Du har ugemte ændringer af et eller flere redigerbare felter. Hvis du "
-"udfører en handling fra drop-down-menuen, vil du miste disse ændringer."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Du har valgt en handling, men du har ikke gemt dine ændringer til et eller "
-"flere felter. Klik venligst OK for at gemme og vælg dernæst handlingen igen."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Du har valgt en handling, og du har ikke udført nogen ændringer på felter. "
-"Det, du søger er formentlig Udfør-knappen i stedet for Gem-knappen."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januar Februar Marts April Maj Juni Juli August September Oktober November "
-"December"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M T O T F L"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Vis"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Skjul"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Nu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Ur"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Vælg et tidspunkt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Midnat"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 morgen"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Middag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Annuller"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "I går"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "I morgen"
diff --git a/parts/django/django/conf/locale/da/__init__.py b/parts/django/django/conf/locale/da/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/da/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/da/formats.py b/parts/django/django/conf/locale/da/formats.py
deleted file mode 100644
index ae34907..0000000
--- a/parts/django/django/conf/locale/da/formats.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
-FIRST_DAY_OF_WEEK = 1
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y', # '25.10.2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/de/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/de/LC_MESSAGES/django.mo
deleted file mode 100644
index fcc537c..0000000
--- a/parts/django/django/conf/locale/de/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/de/LC_MESSAGES/django.po b/parts/django/django/conf/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index fbd9ce1..0000000
--- a/parts/django/django/conf/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5225 +0,0 @@
-# Translation of django.po to German
-#
-# Copyright (C) 2005-2009,
-# This file is distributed under the same license as the django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 18:48+0200\n"
-"PO-Revision-Date: 2010-04-26 13:53+0100\n"
-"Last-Translator: Jannis Leidel <jannis@leidel.info>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: German\n"
-"X-Poedit-Country: GERMANY\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabisch"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgarisch"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengali"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosnisch"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Katalanisch"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Tschechisch"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Walisisch"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dänisch"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Deutsch"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Griechisch"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Englisch"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Britisches Englisch"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Spanisch"
-
-#: conf/global_settings.py:57
-msgid "Argentinian Spanish"
-msgstr "Argentinisches Spanisch"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estnisch"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Baskisch"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Persisch"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Finnisch"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Französisch"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Friesisch"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irisch"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galicisch"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hebräisch"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Kroatisch"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Ungarisch"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Indonesisch"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Isländisch"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Italienisch"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Japanisch"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Georgisch"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Koreanisch"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Litauisch"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Lettisch"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Mazedonisch"
-
-#: conf/global_settings.py:81
-msgid "Malayalam"
-msgstr "Malayalam"
-
-#: conf/global_settings.py:82
-msgid "Mongolian"
-msgstr "Mongolisch"
-
-#: conf/global_settings.py:83
-msgid "Dutch"
-msgstr "Holländisch"
-
-#: conf/global_settings.py:84
-msgid "Norwegian"
-msgstr "Norwegisch"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Bokmal"
-msgstr "Norwegisch (Bokmål)"
-
-#: conf/global_settings.py:86
-msgid "Norwegian Nynorsk"
-msgstr "Norwegisch (Nynorsk)"
-
-#: conf/global_settings.py:87
-msgid "Polish"
-msgstr "Polnisch"
-
-#: conf/global_settings.py:88
-msgid "Portuguese"
-msgstr "Portugiesisch"
-
-#: conf/global_settings.py:89
-msgid "Brazilian Portuguese"
-msgstr "Brasilianisches Portugiesisch"
-
-#: conf/global_settings.py:90
-msgid "Romanian"
-msgstr "Rumänisch"
-
-#: conf/global_settings.py:91
-msgid "Russian"
-msgstr "Russisch"
-
-#: conf/global_settings.py:92
-msgid "Slovak"
-msgstr "Slowakisch"
-
-#: conf/global_settings.py:93
-msgid "Slovenian"
-msgstr "Slowenisch"
-
-#: conf/global_settings.py:94
-msgid "Albanian"
-msgstr "Albanisch"
-
-#: conf/global_settings.py:95
-msgid "Serbian"
-msgstr "Serbisch"
-
-#: conf/global_settings.py:96
-msgid "Serbian Latin"
-msgstr "Serbisch (Latein)"
-
-#: conf/global_settings.py:97
-msgid "Swedish"
-msgstr "Schwedisch"
-
-#: conf/global_settings.py:98
-msgid "Tamil"
-msgstr "Tamilisch"
-
-#: conf/global_settings.py:99
-msgid "Telugu"
-msgstr "Telugisch"
-
-#: conf/global_settings.py:100
-msgid "Thai"
-msgstr "Thailändisch"
-
-#: conf/global_settings.py:101
-msgid "Turkish"
-msgstr "Türkisch"
-
-#: conf/global_settings.py:102
-msgid "Ukrainian"
-msgstr "Ukrainisch"
-
-#: conf/global_settings.py:103
-msgid "Vietnamese"
-msgstr "Vietnamesisch"
-
-#: conf/global_settings.py:104
-msgid "Simplified Chinese"
-msgstr "Vereinfachtes Chinesisch"
-
-#: conf/global_settings.py:105
-msgid "Traditional Chinese"
-msgstr "Traditionelles Chinesisch"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Erfolgreich %(count)d %(items)s gelöscht."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Sind Sie sicher?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Ausgewählte %(verbose_name_plural)s löschen"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Nach %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Alle"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Alle Daten"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Heute"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Letzte 7 Tage"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Diesen Monat"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Dieses Jahr"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "No"
-msgstr "Nein"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
-msgid "Unknown"
-msgstr "Unbekannt"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Aktion:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "Zeitpunkt der Aktion"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "Objekt-ID"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "Objekt Darst."
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "Aktionskennzeichen"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "Änderungsmeldung"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "Logeintrag"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "Logeinträge"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "-"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "%s geändert."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "und"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" hinzugefügt."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s von %(name)s \"%(object)s\" geändert."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" gelöscht."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Keine Felder geändert."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Das Element kann jetzt erneut bearbeitet werden."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Es kann ein weiteres Element des Typs %s angelegt werden."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" wurde erfolgreich geändert."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt. Das Element kann jetzt "
-"geändert werden."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Es müssen Objekte aus der Liste ausgewählt werden, um Aktionen "
-"durchzuführen. Es wurden keine Objekte geändert."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Keine Aktion ausgewählt."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "%s hinzufügen"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-"Das %(name)s-Objekt mit dem Primärschlüssel %(key)r ist nicht vorhanden."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "%s ändern"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Datenbankfehler"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s \"%(name)s\" wurde erfolgreich geändert."
-msgstr[1] "%(count)s \"%(name)s\" wurden erfolgreich geändert."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s ausgewählt"
-msgstr[1] "Alle %(total_count)s ausgewählt"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 von %(cnt)s ausgewählt"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gelöscht."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Änderungsgeschichte: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Bitte einen gültigen Benutzernamen und ein Passwort eingeben. Beide Felder "
-"berücksichtigen die Groß-/Kleinschreibung."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Bitte melden Sie sich erneut an, da Ihre Sitzung abgelaufen ist."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Ihr Browser scheint keine Cookies zu akzeptieren. Bitte aktivieren Sie diese "
-"und laden Sie die Seite neu."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Benutzernamen dürfen das Zeichen '@' nicht enthalten."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Die E-Mail-Adresse entspricht nicht Ihrem Benutzernamen. Bitte stattdessen '%"
-"s' versuchen."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Website-Verwaltung"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Anmelden"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s-Verwaltung"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Datum:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Zeit:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Derzeit:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Ändern:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Suchen"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Neu hinzufügen"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Seite nicht gefunden"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-"Es tut uns leid, aber die angeforderte Seite konnte nicht gefunden werden."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Start"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serverfehler"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serverfehler (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serverfehler <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Ein Fehler ist aufgetreten. Dieser Fehler wurde an die Serververwalter per E-"
-"Mail gemeldet und sollte in Kürze behoben sein. Vielen Dank für Ihr "
-"Verständnis."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Ausgewählte Aktion ausführen"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Ausführen"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Hier klicken, um die Objekte aller Seiten auszuwählen"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Alle %(total_count)s %(module_name)s auswählen"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Auswahl widerrufen"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Willkommen,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentation"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Passwort ändern"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Abmelden"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django-Systemverwaltung"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django-Verwaltung"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Hinzufügen"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Geschichte"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Auf der Website anzeigen"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Bitte den aufgeführten Fehler korrigieren."
-msgstr[1] "Bitte die aufgeführten Fehler korrigieren."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s hinzufügen"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filter"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Löschen"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Das Löschen des %(object_name)s '%(escaped_object)s' hätte das Löschen davon "
-"abhängiger Daten zur Folge, aber Sie haben nicht die nötigen Rechte, um die "
-"folgenden davon abhängigen Daten zu löschen:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Sind Sie sicher, dass Sie %(object_name)s \"%(escaped_object)s\" löschen "
-"wollen? Es werden zusätzlich die folgenden davon abhängigen Daten gelöscht:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, ich bin sicher"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Mehrere Objekte löschen"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Das Löschen von %(object_name)s hätte das Löschen davon abhängiger Daten zur "
-"Folge, aber Sie haben nicht die nötigen Rechte, um die folgenden davon "
-"abhängigen Daten zu löschen:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Sind Sie sicher, dass Sie die ausgewählten %(object_name)s-Objekte löschen "
-"wollen? Die folgenden Objekte und und die von ihnen abhängigen Daten werden "
-"gelöscht:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Nach %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelle, die in der Anwendung %(name)s vorhanden sind."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Ändern"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Sie haben keine Berechtigung, irgendetwas zu ändern."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Kürzliche Aktionen"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Meine Aktionen"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Keine vorhanden"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Unbekannter Inhalt"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Etwas stimmt nicht mit der Datenbankkonfiguration. Bitte sicherstellen, dass "
-"die richtigen Datenbanktabellen angelegt wurden und die Datenbank vom "
-"verwendeten Datenbankbenutzer auch lesbar ist."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Benutzername:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Passwort:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datum/Zeit"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Benutzer"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Aktion"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Dieses Objekt hat keine Änderungsgeschichte. Es wurde möglicherweise nicht "
-"über diese Verwaltungsseiten angelegt."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Zeige alle"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Sichern"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Suchen"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 Ergebnis"
-msgstr[1] "%(counter)s Ergebnisse"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s gesamt"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Als neu sichern"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Sichern und neu hinzufügen"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Sichern und weiter bearbeiten"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Zuerst einen Benutzer und ein Passwort eingeben. Danach können weitere "
-"Optionen für den Benutzer geändert werden."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:8
-msgid "Enter a username and password."
-msgstr "Bitte einen Benutzernamen und ein Passwort eingeben."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-"Bitte geben Sie ein neues Passwort für den Benutzer <strong>%(username)s</"
-"strong> ein."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Passwort"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Passwort (wiederholen)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Bitte das gleiche Passwort zur Überprüfung nochmal eingeben."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "%(verbose_name)s hinzufügen"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Entfernen"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Löschen?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Vielen Dank, dass Sie hier ein paar nette Minuten verbracht haben."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Erneut anmelden"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Passwort ändern"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Passwort erfolgreich geändert"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Ihr Passwort wurde geändert."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Bitte geben Sie aus Sicherheitsgründen erst Ihr altes Passwort und darunter "
-"dann zweimal (um sicherzustellen, dass Sie es korrekt eingegeben haben) das "
-"neue Passwort ein."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Altes Passwort"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Neues Passwort"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Mein Passwort ändern"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Passwort zurücksetzen"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Passwort zurücksetzen beendet"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Ihr Passwort wurde zurückgesetzt. Sie können sich nun anmelden."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Zurücksetzen des Passworts bestätigen"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Neues Passwort eingeben"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Bitte geben Sie Ihr neues Passwort zweimal ein, damit wir überprüfen können, "
-"ob es richtig eingetippt wurde."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Neues Passwort:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Passwort wiederholen:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Passwort wurde nicht erfolgreich zurückgesetzt"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Der Link zum Zurücksetzen Ihres Passworts ist ungültig, wahrscheinlich weil "
-"er schon einmal benutzt wurde. Bitte setzen Sie Ihr Passwort erneut zurück."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Passwort wurde erfolgreich zurückgesetzt"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Wir haben Ihnen eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passwort "
-"an die von Ihnen angegebene E-Mail-Adresse geschickt. Sie sollten diese in "
-"Kürze erhalten."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Sie erhalten diese E-Mail, weil Sie ein neues Passwort"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "für Ihren Benutzer bei %(site_name)s angefordert haben"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Bitte öffnen Sie folgende Seite, um Ihr neues Passwort einzugeben:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Ihr Benutzername, falls Sie ihn vergessen haben:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Vielen Dank, dass Sie unsere Website benutzen!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Das Team von %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Passwort vergessen? Einfach Ihre E-Mail-Adresse eingeben und wir senden "
-"Ihnen Anweisungen zum Zurücksetzen Ihres Passworts."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-Mail-Adresse:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Mein Passwort zurücksetzen"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Alle Daten"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "%s auswählen"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "%s zur Änderung auswählen"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "Site"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "Template"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "Schlagwort:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "Filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "Ansicht:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Anwendung %r nicht gefunden"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Modell %(model_name)r wurde nicht in Anwendung %(app_label)r gefunden"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "Das verknüpfte `%(app_label)s.%(data_type)s` Objekt"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "Modell:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "verknüpftes `%(app_label)s.%(object_name)s` Objekt"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "Alle %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "Anzahl von %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Felder am %s Objekt"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ist scheinbar kein urlpattern-Objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentations-Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Um Bookmarklets zu installieren, müssen diese Links in "
-"die\n"
-"Browser-Werkzeugleiste gezogen werden, oder mittels rechter Maustaste in "
-"die\n"
-"Bookmarks gespeichert werden. Danach können die Bookmarklets von jeder "
-"Seite\n"
-"aufgerufen werden. Einige Bookmarklets sind auf den Zugriff von 'internen'\n"
-"Rechnern beschränkt. Falls nicht klar ist, ob ein Rechner als 'intern'\n"
-"bewertet wird, bitte den Administrator fragen.</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentation für diese Seite"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Springt von jeder Seite zu der Dokumentation für den View, der diese Seite "
-"erzeugt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Objekt-ID anzeigen"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Zeigt den Content-Type und die eindeutige ID für Seiten, die ein einzelnes "
-"Objekt repräsentieren."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Dieses Objekt ändern (Aktives Fenster)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Springt zu der Administrationsseite für dieses Objekt, wenn diese Seite ein "
-"Objekt repräsentiert."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Dieses Objekt ändern (Neues Fenster)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"Wie zuvor, aber öffnet die Administrationsseite in einem neuen Fenster."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Persönliche Infos"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Berechtigungen"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Wichtige Daten"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Gruppen"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Passwort erfolgreich geändert."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Passwort ändern: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Benutzername"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Erforderlich. 30 Zeichen oder weniger. Nur alphanumerische Zeichen "
-"(Buchstaben, Ziffern und @/./+/-/_) sind erlaubt."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Dieser Wert darf nur Buchstaben, Ziffern und @/./+/-/_ enthalten."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Passwort bestätigen"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Dieser Benutzername ist bereits vergeben."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Die beiden Passwörter sind nicht identisch."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Dieser Benutzer ist inaktiv."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Der Webbrowser scheint keine Cookies aktiviert zu haben. Cookies sind für "
-"die Anmeldung zwingend erforderlich."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-Mail-Adresse"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Zu dieser E-Mail-Adresse existiert kein Benutzer. Sicher, dass Sie sich mit "
-"dieser Adresse registriert haben?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Passwort auf %s zurücksetzen"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Neues Passwort bestätigen"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Das alte Passwort war falsch. Bitte neu eingeben."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "Name"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "Codename"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "Berechtigung"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "Berechtigungen"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "Gruppe"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "Gruppen"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "Benutzername"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Erforderlich. 30 Zeichen oder weniger. Nur alphanumerische Zeichen "
-"(Buchstaben, Ziffern und @/./+/-/_) sind erlaubt."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "Vorname"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "Nachname"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "E-Mail-Adresse"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "Passwort"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Die Form '[algo]$[salt]$[hexdigest]' verwenden, oder das <a href=\"password/"
-"\">Passwort ändern Formular</a> benutzen."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "Redakteur-Status"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "Aktiv"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Legt fest, ob dieser Benutzer aktiv ist. Kann deaktiviert werden, anstatt "
-"Benutzer zu löschen."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "Administrator-Status"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Legt fest, dass der Benutzer alle Berechtigungen hat, ohne diese einzeln "
-"zuweisen zu müssen."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "Letzte Anmeldung"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "Mitglied seit"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Zusätzlich zu den manuell angelegten Rechten erhält dieser Benutzer auch "
-"alle Rechte, die seine zugewiesenen Gruppen haben."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "Berechtigungen"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "Benutzer"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "Benutzer"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "Mitteilung"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Abgemeldet"
-
-#: contrib/auth/management/commands/createsuperuser.py:24
-#: core/validators.py:120 forms/fields.py:427
-msgid "Enter a valid e-mail address."
-msgstr "Bitte eine gültige E-Mail-Adresse eingeben."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Inhalt"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadaten"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "markiert"
-msgstr[1] "markiert"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Ausgewählte Kommentare markieren"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "freigegeben"
-msgstr[1] "freigegeben"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Ausgewählte Kommentare freigeben"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "entfernt"
-msgstr[1] "entfernt"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Ausgewählte Kommentare entfernen"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 Kommentar wurde erfolgreich %(action)s."
-msgstr[1] "%(count)s Kommentare wurden erfolgreich %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s-Kommentare"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Die neuesten Kommentare auf %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Name"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-Mail-Adresse"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
-msgid "URL"
-msgstr "Adresse (URL)"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Kommentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Keine Schimpfworte! Das Wort %s ist hier nicht erlaubt!"
-msgstr[1] "Keine Schimpfworte! Die Wörter %s sind hier nicht erlaubt!"
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Wenn Sie irgendetwas in dieses Feld eintragen, wird der Kommentar als Spam "
-"betrachtet"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "Inhaltstyp"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "Objekt-ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "Benutzername"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "E-Mail-Adresse"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "Kommentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "Datum/Zeit Erstellung"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
-msgid "IP address"
-msgstr "IP-Adresse"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "ist öffentlich"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Deaktivieren, um den Kommentar sofort von der Website zu entfernen."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "ist gelöscht"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Hier einen Haken setzen, wenn der Kommentar unpassend ist. Stattdessen wird "
-"dann \"Dieser Kommentar wurde entfernt\" Meldung angezeigt."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "Kommentare"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Dieser Kommentar wurde von einem authentifizierten Benutzer geschrieben.\n"
-"Der Name ist daher schreibgeschützt.\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Dieser Kommentar wurde von einem authentifizierten Benutzer geschrieben.\n"
-"Die E-Mail-Adresse ist daher schreibgeschützt.\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Geschrieben von %(user)s am %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "Markierung"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "Datum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "Kommentar-Markierung"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "Kommentar-Markierungen"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Kommentar freigeben"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Wollen Sie diesen Kommentar wirklich freigeben?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Freigeben"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Vielen Dank, dass Sie den Kommentar freigegeben haben"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Vielen Dank, dass Sie dabei mithelfen, die Qualität der Diskussion auf "
-"unserer Website zu verbessern"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Kommentar entfernen"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Wollen Sie diesen Kommentar wirklich entfernen?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Vielen Dank, dass Sie diesen Kommentar entfernt haben"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Diesen Kommentar markieren"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Wollen Sie diesen Kommentar wirklich markieren?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Markierung"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Vielen Dank, dass Sie diesen Kommentar markiert haben"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Abschicken"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Vorschau"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Vielen Dank, dass Sie einen Kommentar geschrieben haben"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Vielen Dank für Ihren Kommentar"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Kommentarvorschau"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Bitte den unten aufgeführten Fehler korrigieren."
-msgstr[1] "Bitte die unten aufgeführten Fehler korrigieren."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Kommentar abschicken"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "oder Änderungen vornehmen"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "Python Modell-Klassenname"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "Inhaltstypen"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Beispiel: '/about/contact/'. Wichtig: Am Anfang und Ende muss ein / stehen."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Schrägstriche "
-"enthalten."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Erweiterte Optionen"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "Titel"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "Inhalt"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "Kommentare aktivieren"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "Name des Template"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Beispiel: 'flatpages/contact_page.html'. Wenn dieses Feld nicht gesetzt ist, "
-"wird standardmäßig 'flatpages/default.html' benutzt."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "Registrierung erforderlich"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Wenn hier ein Haken gesetzt ist, können nur angemeldete Benutzer diese Seite "
-"sehen."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "Seite"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "Seiten"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Es tut uns leid, aber das Formular hat seine Gültigkeit verloren. Bitte "
-"füllen Sie es erneut aus."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Das Basis-GIS-Feld, das dem OpenGIS-Geometrie-Typ entspricht."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punkt"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Linienzug"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Mehrere Punkte"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Mehrere Linienzüge"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Mehrere Polygone"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Sammlung geometrischer Objekte"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Kein geometrischer Wert gegeben."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Ungültiger geometrischer Wert."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Ungültiger geometrischer Typ."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Ein Fehler ist beim Umwandeln der Geometrie-Werte in die SRID des Geometrie-"
-"Formularfeldes aufgetreten."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f Million"
-msgstr[1] "%(value).1f Millionen"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f Milliarde"
-msgstr[1] "%(value).1f Milliarden"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f Billion"
-msgstr[1] "%(value).1f Billionen"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "ein"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "zwei"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "drei"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "vier"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "fünf"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "sechs"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sieben"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "acht"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "neun"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "heute"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "morgen"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "gestern"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Bitte eine gültige Postleitzahl im Format NNNN oder ANNNNAAA eingeben."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Dieses Feld darf nur Ziffern enthalten."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Dieses Feld benötigt 7 oder 8 Ziffern."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-"Bitte eine gültige CUIT im Format XX-XXXXXXXX-X oder XXXXXXXXXXXX eingeben."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Ungültige CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Kärnten"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Niederösterreich"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Oberösterreich"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Steiermark"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wien"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXX eingeben."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Bitte eine gültige österreichische Sozialversicherungsnummer im Format XXXX "
-"XXXXXX eingeben."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Bitte eine gültige vierstellige Postleitzahl eingeben."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX-XXX eingeben."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonnummern müssen das Format XX-XXXX-XXXX haben."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Bitte einen gültigen brasilianischen Bundesstaat auswählen."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Ungültige CPF-Nummer."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Dieses Feld benötigt mindestens 11 Ziffern oder 14 Zeichen."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Ungültige CNPJ-Nummer."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Dieses Feld benötigt mindestens 14 Ziffern"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXX XXX eingeben."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Bitte eine gültige kanadische Sozialversicherungsnummer im Format XXX-XXX-"
-"XXX eingeben."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Freiburg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genf"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubünden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Luzern"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Bitte eine gültige Schweizer Identifikations- oder Reisepassnummer im "
-"FormatX1234567<0 oder 1234567890 eingeben."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Bitte eine gültige chilenische RUT eingeben."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Bitte eine chilenische RUT im Format XX.XXX.XXX-X eingeben."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Diese chilenische RUT ist ungültig."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prag"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Mittelböhmische Region"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Südböhmische Region"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Region Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Region Karlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Region Ústí"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Region Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Region Königgrätz"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Region Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Region Vysočina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Südmährische Region"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Region Olmütz"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Region Zlín"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Mährisch-Schlesische Region"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX oder XXX XX eingeben."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"Bitte eine Geburtsnummer im Format XXXXXX/XXXX oder XXXXXXXXXX eingeben."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Ungültiger Wert für Geschlecht, gültig sind: 'f' und 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Bitte eine gültige Geburtsnummer eingeben."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Bitte eine gültige IC-Nummer eingeben."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bayern"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Vorpommern"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Niedersachsen"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Nordrhein-Westfalen"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rheinland-Pfalz"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sachsen"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Sachsen-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thüringen"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXX eingeben."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Bitte eine gültige deutsche Personalausweisnummer im Format XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X eingeben."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Balearische Inseln"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruña"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturien"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Kantabrien"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusien"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragonien"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Fürstentum Asturien"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearische Inseln"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskenland"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanarische Inseln"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastilien-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastilien-León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalonien"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicien"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foralgemeinschaft Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format 01XXX bis 52XXX eingeben."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Bitte eine gültige Telefonnummer in einem der folgenden Formate eingeben "
-"6XXXXXXXX, 8XXXXXXXX oder 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Bitte eine gültige NIF, NIE oder CIF eingeben."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Bitte eine gültige NIF oder NIE eingeben."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Ungültige Prüfsumme für NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Ungültige Prüfsumme für NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Ungültige Prüfsumme für CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Bitte eine gültige Kontonummer im Format XXXX-XXXX-XX-XXXXXXXXXX eingeben."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Ungültige Prüfsumme für Kontonummer."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Bitte eine gültige finnische Sozialversicherungsnummer eingeben."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonnummern müssen das Format 0X XX XX XX XX haben."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Bitte eine gültige Postleitzahl eingeben"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Bitte eine gültige Telefonnummer eingeben"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Bitte eine gültige Nummernschildnummer eingeben"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Bitte eine gültige NIK/KTP-Nummer eingeben."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Bundesregierung"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX eingeben."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Bitte eine gültige isländische Identifikationsnummer im Format XXXXXX-XXXX "
-"eingeben."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Die isländische Identifikationsnummer ist nicht gültig."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Bitte eine gültige Postleitzahl eingeben."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Bitte eine gültige Sozialversicherungsnummer eingeben."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Bitte eine gültige Umsatzsteuernummer eingeben."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-"Bitte eine gültige Postleitzahl im Format XXXXXXX oder XXX-XXXX eingeben."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaidō"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyōto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Ōsaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyōgo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Ōita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Bitte eine gültige Kuwaitische Identifikationsnummer eingeben"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Bitte eine gültige Postleitzahl eingeben"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Bitte eine gültige SoFi-Nummer eingeben"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drente"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Nordbrabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Nordholland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Südholland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Bitte eine gültige norwegische Sozialversicherungsnummer eingeben."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Dieses Feld benötigt 8 Zeichen."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Dieses Feld benötigt 11 Zeichen."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Nationale Identifikationsnummer besteht aus 11 Ziffern."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Falsche Prüfsumme für die nationale Identifikationsnummer."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Bitte eine Steuernummer (NIP) im Format XXX-XXX-XX-XX oder XX-XX-XXX-XXX "
-"eingeben."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Falsche Prüfsumme für die Steuernummer (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Nationale Geschäftsregistrierungsnummer (REGON) besteht aus 9 oder 14 "
-"Zeichen."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Falsche Prüfsumme für die nationale Geschäftsregistrierungsnummer (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XX-XXX eingeben."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Niederschlesien"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kujawien-Pommern"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Land Lebus"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Łódź"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Kleinpolen"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masowien"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Oppeln"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Karpatenvorland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pommern"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Schlesien"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Heiligkreuz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Ermland-Masuren"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Großpolen"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Vorpommern"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Bitte eine gültige Postleitzahl im Format XXXX-XXX eingeben."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-"Telefonnummern müssen aus 9 Ziffern bestehen, oder mit + oder 00 beginnen."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Bitte eine gültige CIF eingeben."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Bitte eine gültige CNP eingeben."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-"Bitte eine gültige IBAN im Format ROXX-XXXX-XXXX-XXXX-XXXX-XXXX eingeben."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonnummern müssen das Format XXXX-XXXXXX haben."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Bitte eine gültige Postleitzahl im Format XXXXXX eingeben"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Bitte eine gültige Schwedische Organisationsnummer eingeben."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Bitte eine gültige schwedische Personenidentifikationsnummer eingeben."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Ordnungsnummern sind nicht erlaubt."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Bitte eine gültige schwedische Postleitzahl im Format XXXXX eingeben."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banská Štiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Bánovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytča"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Čadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolný Kubín"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajská Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenné"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kežmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucké Nové Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoča"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovský Mikuláš"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lučenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Námestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nové Mesto nad Váhom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nové Zámky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizánske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piešťany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltár"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Považská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Prešov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Púchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revúca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Rožňava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ružomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spišská Nová Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stará Ľubovňa"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidník"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topoľčany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebišov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trenčín"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turčianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdošín"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Veľký Krtíš"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Topľou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Žarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Žiar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Žilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banská Bystrica Region"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislavský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenčín"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Bitte eine gültige Postleitzahl eingeben."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Nordirland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Schottland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-"Bitte eine gültige Postleitzahl im Format XXXXX oder XXXXX-XXXX eingeben."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonnummern müssen das Format XXX-XXX-XXXX haben."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Bitte eine gültige US-amerikanische Sozialversicherungsnummer im Format XXX-"
-"XX-XXXX eingeben."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Geben Sie einen US-Bundesstaat oder Territorium ein."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S.-Bundesstaat (zwei Großbuchstaben)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Bitte eine gültige CI im Format X.XXX.XXX-X,XXXXXXX-X oder XXXXXXXX eingeben."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Bitte eine gültige CI-Nummer eingeben."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Bitte eine gültige südafrikanische Identifikationsnummer eingeben"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Bitte eine gültige südafrikanische Postleitzahl eingeben"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Ostkap"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Freistaat"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Nordkap"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Nordwest"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Westkap"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "Lazy Nachricht"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "Umleitung von"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: '/"
-"events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "Umleitung nach"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Hier muss entweder ein absoluter Pfad oder eine komplette URL mit http:// am "
-"Anfang stehen."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "Umleitung"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "Umleitungen"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "Sitzungs-ID"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "Sitzungsdaten"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "Verfallsdatum"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "Sitzung"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "Sitzungen"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "Domainname"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "Anzeigename"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "Sites"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Bitte einen gültigen Wert eingeben."
-
-#: core/validators.py:87 forms/fields.py:528
-msgid "Enter a valid URL."
-msgstr "Bitte eine gültige Adresse eingeben."
-
-#: core/validators.py:89 forms/fields.py:529
-msgid "This URL appears to be a broken link."
-msgstr "Diese Adresse scheint nicht gültig zu sein."
-
-#: core/validators.py:123 forms/fields.py:877
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Bitte ein gültiges Kürzel, bestehend aus Buchstaben, Ziffern, Unterstrichen "
-"und Bindestrichen, eingeben."
-
-#: core/validators.py:126 forms/fields.py:870
-msgid "Enter a valid IPv4 address."
-msgstr "Bitte eine gültige IPv4-Adresse eingeben."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Bitte nur durch Komma getrennte Ziffern eingeben."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Bitte sicherstellen, dass der Wert %(limit_value)s ist. (Er ist %(show_value)"
-"s)"
-
-#: core/validators.py:153 forms/fields.py:204 forms/fields.py:256
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Dieser Wert muss kleiner oder gleich %(limit_value)s sein."
-
-#: core/validators.py:158 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Dieser Wert muss größer oder gleich %(limit_value)s sein."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Bitte sicherstellen, dass der Wert mindestens %(limit_value)d Zeichen hat. "
-"(Er hat %(show_value)d)"
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Bitte sicherstellen, dass der Wert maximal %(limit_value)d Zeichen hat. (Er "
-"hat %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s muss für %(date_field)s %(lookup)s eindeutig sein."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s mit diesem %(field_label)s existiert bereits."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Wert %r ist keine gültige Option."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Dieses Feld darf nicht leer sein."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Dieses Feld darf nicht leer sein."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Feldtyp: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:860
-#: db/models/fields/__init__.py:969 db/models/fields/__init__.py:980
-#: db/models/fields/__init__.py:1007
-msgid "Integer"
-msgstr "Ganzzahl"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:858
-msgid "This value must be an integer."
-msgstr "Dieser Wert muss eine Ganzzahl sein."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Dieser Wert muss True oder False sein."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolescher Wert (True oder False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:990
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Zeichenkette (bis zu %(max_length)s Zeichen)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Kommaseparierte Liste von Ganzzahlen"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Datum (ohne Uhrzeit)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Bitte ein gültiges Datum im Format JJJJ-MM-TT eingeben."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ungültiges Datum: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Bitte eine gültige Datums- und Zeitangabe im Format JJJJ-MM-TT SS:MM[ss[."
-"uuuuuu]] eingeben."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Datum (mit Uhrzeit)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Dieser Wert muss eine Dezimalzahl sein."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Dezimalzahl"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-Mail-Adresse"
-
-#: db/models/fields/__init__.py:807 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Dateipfad"
-
-#: db/models/fields/__init__.py:830
-msgid "This value must be a float."
-msgstr "Dieser Wert muss eine Gleitkommazahl sein."
-
-#: db/models/fields/__init__.py:832
-msgid "Floating point number"
-msgstr "Gleitkommazahl"
-
-#: db/models/fields/__init__.py:891
-msgid "Big (8 byte) integer"
-msgstr "Große Ganzzahl (8 Byte)"
-
-#: db/models/fields/__init__.py:920
-msgid "This value must be either None, True or False."
-msgstr "Dieser Wert muss None, True oder False sein."
-
-#: db/models/fields/__init__.py:922
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolescher Wert (True, False oder None)"
-
-#: db/models/fields/__init__.py:1013
-msgid "Text"
-msgstr "Text"
-
-#: db/models/fields/__init__.py:1029
-msgid "Time"
-msgstr "Zeit"
-
-#: db/models/fields/__init__.py:1033
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Bitte eine gültige Zeit im Format HH:MM[:ss[.uuuuuu]] eingeben."
-
-#: db/models/fields/__init__.py:1125
-msgid "XML text"
-msgstr "XML-Text"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Modell %(model)s mit dem Primärschlüssel %(pk)r ist nicht vorhanden."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Fremdschlüssel (Typ definiert durch verknüpftes Feld)"
-
-#: db/models/fields/related.py:919
-msgid "One-to-one relationship"
-msgstr "One-to-one-Beziehung"
-
-#: db/models/fields/related.py:981
-msgid "Many-to-many relationship"
-msgstr "Many-to-many-Beziehung"
-
-#: db/models/fields/related.py:1001
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Halten Sie die Strg-Taste (⌘ für Mac) während des Klickens gedrückt, um "
-"mehrere Einträge auszuwählen."
-
-#: db/models/fields/related.py:1062
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Bitte gültige IDs für %(self)s eingeben. Der Wert %(value)r ist ungültig."
-msgstr[1] ""
-"Bitte gültige IDs für %(self)s eingeben. Die Werte %(value)r sind ungültig."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Dieses Feld ist zwingend erforderlich."
-
-#: forms/fields.py:203
-msgid "Enter a whole number."
-msgstr "Bitte eine ganze Zahl eingeben."
-
-#: forms/fields.py:234 forms/fields.py:255
-msgid "Enter a number."
-msgstr "Bitte eine Zahl eingeben."
-
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Bitte geben Sie nicht mehr als insgesamt %s Ziffern ein."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Bitte geben Sie nicht mehr als %s Dezimalstellen ein."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Bitte geben Sie nicht mehr als %s Ziffern vor dem Komma ein."
-
-#: forms/fields.py:322 forms/fields.py:837
-msgid "Enter a valid date."
-msgstr "Bitte ein gültiges Datum eingeben."
-
-#: forms/fields.py:350 forms/fields.py:838
-msgid "Enter a valid time."
-msgstr "Bitte eine gültige Uhrzeit eingeben."
-
-#: forms/fields.py:376
-msgid "Enter a valid date/time."
-msgstr "Bitte ein gültiges Datum und Uhrzeit eingeben."
-
-#: forms/fields.py:434
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Es wurde keine Datei übermittelt. Überprüfen Sie das Encoding des Formulars."
-
-#: forms/fields.py:435
-msgid "No file was submitted."
-msgstr "Es wurde keine Datei übertragen."
-
-#: forms/fields.py:436
-msgid "The submitted file is empty."
-msgstr "Die ausgewählte Datei ist leer."
-
-#: forms/fields.py:437
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Bitte sicherstellen, dass der Dateiname maximal %(max)d Zeichen hat. (Er hat "
-"%(length)d)."
-
-#: forms/fields.py:472
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Bitte ein Bild hochladen. Die hochgeladene Datei ist kein Bild oder ist "
-"defekt."
-
-#: forms/fields.py:595 forms/fields.py:670
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Bitte eine gültige Auswahl treffen. %(value)s ist keine gültige Auswahl."
-
-#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Bitte eine Liste mit Werten eingeben."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Reihenfolge"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Bitte die doppelten Daten für %(field)s korrigieren."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Bitte die doppelten Daten für %(field)s korrigieren, das eindeutig sein muss."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Bitte die doppelten Daten für %(field_name)s korrigieren, da es für %(lookup)"
-"s in %(date_field)s eindeutig sein muss."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Bitte die unten aufgeführten doppelten Werte korrigieren."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Der Inline-Fremdschlüssel passt nicht zum Primärschlüssel der übergeordneten "
-"Instanz."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Bitte eine gültige Auswahl treffen. Dies ist keine gültige Auswahl."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Bitte eine gültige Auswahl treffen. %s ist keine gültige Auswahl."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" ist kein gültiger Wert für einen Primärschlüssel."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "Ja,Nein,Vielleicht"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d Byte"
-msgstr[1] "%(size)d Bytes"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "nachm."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "vorm."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "nachm."
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "vorm."
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "Mitternacht"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "Mittag"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Montag"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Dienstag"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Mittwoch"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Donnerstag"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Freitag"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Samstag"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Sonntag"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Mo"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Di"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Mi"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Do"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Fr"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Sa"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "So"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Januar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Februar"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "März"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "April"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Mai"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "August"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "September"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "November"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Dezember"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "Jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "Feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "Mär"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "Apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "Mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "Jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "Jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "Aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "Sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "Okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "Nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "Dez"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dez."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "oder"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "Jahr"
-msgstr[1] "Jahre"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "Monat"
-msgstr[1] "Monate"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "Woche"
-msgstr[1] "Wochen"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "Tag"
-msgstr[1] "Tage"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "Stunde"
-msgstr[1] "Stunden"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "Minute"
-msgstr[1] "Minuten"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "Minuten"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. N Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. N Y, H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s wurde erfolgreich angelegt."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s wurde erfolgreich aktualisiert."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s wurde gelöscht."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Ein oder mehrere %(fieldname)s in %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Ein oder mehrere %(fieldname)s in %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Altes Passwort:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Beziehung zum Eltern-Modell"
-
-#~ msgid "Add user"
-#~ msgstr "Benutzer hinzufügen"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Kommentar-Moderation"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "Es sind keine Kommentare zu moderieren"
-
-#~ msgid "Email"
-#~ msgstr "E-Mail-Adresse"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Authentifiziert?"
-
-#~ msgid "IP Address"
-#~ msgstr "IP-Adresse"
-
-#~ msgid "Date posted"
-#~ msgstr "Verfassungsdatum"
-
-#~ msgid "yes"
-#~ msgstr "ja"
-
-#~ msgid "no"
-#~ msgstr "nein"
diff --git a/parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 403ca38..0000000
--- a/parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.po
deleted file mode 100644
index baabbd8..0000000
--- a/parts/django/django/conf/locale/de/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,160 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-05 00:38+0200\n"
-"PO-Revision-Date: 2008-06-23 21:02+0100\n"
-"Last-Translator: Jannis Leidel <jannis@leidel.info>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Verfügbare %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Alles auswählen"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Hinzufügen"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Entfernen"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Ausgewählte %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Auswahl treffen und Klick auf"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Alles abwählen"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s von %(cnt)s ausgewählt"
-msgstr[1] "%(sel)s von %(cnt)s ausgewählt"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Sie haben Änderungen an editierbaren Feldern vorgenommen und nicht "
-"gespeichert. Wollen Sie die Aktion trotzdem ausführen und Ihre Änderungen "
-"verwerfen?"
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Sie haben eine Aktion ausgewählt, aber ihre vorgenommenen Änderungen nicht "
-"gespeichert. Klicken Sie OK, um dennoch zu speichern. Danach müssen Sie die "
-"Aktion erneut ausführen."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Sie haben eine Aktion ausgewählt, aber keine Änderungen an editierbaren "
-"Feldern vorgenommen. Sie wollten wahrscheinlich auf 'Ausführen' und nicht "
-"auf 'Speichern' klicken."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januar Februar März April Mai Juni Juli August September Oktober November "
-"Dezember"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M D M D F S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Einblenden"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Ausblenden"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Jetzt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Uhr"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Uhrzeit"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Mitternacht"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 Uhr"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Mittag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Heute"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Gestern"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Morgen"
diff --git a/parts/django/django/conf/locale/de/__init__.py b/parts/django/django/conf/locale/de/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/de/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/de/formats.py b/parts/django/django/conf/locale/de/formats.py
deleted file mode 100644
index 7ea1d63..0000000
--- a/parts/django/django/conf/locale/de/formats.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = 'j. F Y H:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i:s'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06'
- '%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
- # '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%d.%m.%Y', # '25.10.2006'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/el/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/el/LC_MESSAGES/django.mo
deleted file mode 100644
index cd60509..0000000
--- a/parts/django/django/conf/locale/el/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/el/LC_MESSAGES/django.po b/parts/django/django/conf/locale/el/LC_MESSAGES/django.po
deleted file mode 100644
index d9793c8..0000000
--- a/parts/django/django/conf/locale/el/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,2766 +0,0 @@
-# translation of django.po to el
-# Copyright (C) 2006 and beyond
-# This file is distributed under the same license as the DJANGO package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-04-05 01:32+1000\n"
-"PO-Revision-Date: 2007-09-03 04:19+0100\n"
-"Last-Translator: Dimitris Glezos <dimitris@glezos.com>\n"
-"Language-Team: el <fedora-trans-el@redhat.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: db/models/manipulators.py:307
-#, fuzzy, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "αντικείμενο με τύπος για πεδίο."
-
-#: db/models/manipulators.py:308 contrib/admin/views/main.py:335
-#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339
-msgid "and"
-msgstr "και"
-
-#: db/models/fields/related.py:53
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Παρακαλούμε εισάγετε ένα έγκυρο %s."
-
-#: db/models/fields/related.py:642
-msgid "Separate multiple IDs with commas."
-msgstr "Ξεχωρίστε πολλαπλά ΙD με κόμματα."
-
-#: db/models/fields/related.py:644
-#, fuzzy
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Αναμονή Έλεγχος ή Εντολή ενεργό a επιλογή περισσότερα ένα."
-
-#: db/models/fields/related.py:691
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Παρακαλούμε εισάγετε ένα έγκυρο %(self)s IDs. Η τιμή %(value)r δεν είναι "
-"έγκυρη."
-msgstr[1] ""
-"Παρακαλούμε εισάγετε ένα έγκυρο %(self)s IDs. Οι τιμές %(value)r δεν είναι "
-"έγκυρες."
-
-#: db/models/fields/__init__.py:42
-#, fuzzy, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "με."
-
-#: db/models/fields/__init__.py:117 db/models/fields/__init__.py:274
-#: db/models/fields/__init__.py:610 db/models/fields/__init__.py:621
-#: oldforms/__init__.py:357 newforms/fields.py:80 newforms/fields.py:376
-#: newforms/fields.py:452 newforms/fields.py:463 newforms/models.py:178
-msgid "This field is required."
-msgstr "Αυτό το πεδίο είναι απαραίτητο."
-
-#: db/models/fields/__init__.py:367
-msgid "This value must be an integer."
-msgstr "Αυτή η τιμή πρέπει να είναι ένας ακέραιος."
-
-#: db/models/fields/__init__.py:402
-msgid "This value must be either True or False."
-msgstr "Αυτή η τιμή πρέπει να είναι Αληθές ή Ψευδές."
-
-#: db/models/fields/__init__.py:423
-msgid "This field cannot be null."
-msgstr "Αυτό το πεδίο δεν μπορεί να είναι κενό (null)."
-
-#: db/models/fields/__init__.py:457 core/validators.py:148
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Εισάγετε μία έγκυρη ημερομηνία στη μορφή ΧΧΧΧ-MM-ΗΗ."
-
-#: db/models/fields/__init__.py:526 core/validators.py:157
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Εισάγετε μία έγκυρη ημερομηνία/ώρα στη μορφή ΧΧΧΧ-MM-ΗΗ ΩΩ:ΛΛ."
-
-#: db/models/fields/__init__.py:630
-msgid "Enter a valid filename."
-msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου."
-
-#: db/models/fields/__init__.py:751
-#, fuzzy
-msgid "This value must be either None, True or False."
-msgstr "Αυτή η τιμή πρέπει να είναι Αληθές ή Ψευδές."
-
-#: conf/global_settings.py:39
-msgid "Arabic"
-msgstr "Αραβικά"
-
-#: conf/global_settings.py:40
-msgid "Bengali"
-msgstr "Μπενγκάλι"
-
-#: conf/global_settings.py:41
-msgid "Catalan"
-msgstr "Καταλανικά"
-
-#: conf/global_settings.py:42
-msgid "Czech"
-msgstr "Τσέχικα"
-
-#: conf/global_settings.py:43
-msgid "Welsh"
-msgstr "Ουαλικά"
-
-#: conf/global_settings.py:44
-msgid "Danish"
-msgstr "Δανέζικα"
-
-#: conf/global_settings.py:45
-msgid "German"
-msgstr "Γερμανικά"
-
-#: conf/global_settings.py:46
-msgid "Greek"
-msgstr "Ελληνικά"
-
-#: conf/global_settings.py:47
-msgid "English"
-msgstr "Αγγλικά"
-
-#: conf/global_settings.py:48
-msgid "Spanish"
-msgstr "Ισπανικά"
-
-#: conf/global_settings.py:49
-msgid "Argentinean Spanish"
-msgstr "Ισπανικά Αργεντινής"
-
-#: conf/global_settings.py:50
-msgid "Finnish"
-msgstr "Φινλανδικά"
-
-#: conf/global_settings.py:51
-msgid "French"
-msgstr "Γαλλικά"
-
-#: conf/global_settings.py:52
-msgid "Galician"
-msgstr ""
-
-#: conf/global_settings.py:53
-msgid "Hungarian"
-msgstr "Ουγγρικά"
-
-#: conf/global_settings.py:54
-msgid "Hebrew"
-msgstr "Εβραϊκά"
-
-#: conf/global_settings.py:55
-msgid "Icelandic"
-msgstr "Ισλανδικά"
-
-#: conf/global_settings.py:56
-msgid "Italian"
-msgstr "Ιταλικά"
-
-#: conf/global_settings.py:57
-msgid "Japanese"
-msgstr "Γιαπωνέζικα"
-
-#: conf/global_settings.py:58
-msgid "Kannada"
-msgstr ""
-
-#: conf/global_settings.py:59
-msgid "Latvian"
-msgstr ""
-
-#: conf/global_settings.py:60
-msgid "Macedonian"
-msgstr "Μακεδονικά"
-
-#: conf/global_settings.py:61
-msgid "Dutch"
-msgstr "Ολλανδικά"
-
-#: conf/global_settings.py:62
-msgid "Norwegian"
-msgstr "Νορβηγικά"
-
-#: conf/global_settings.py:63
-msgid "Polish"
-msgstr "Πολωνικά"
-
-#: conf/global_settings.py:64
-msgid "Portugese"
-msgstr "Πορτογαλικά"
-
-#: conf/global_settings.py:65
-msgid "Brazilian"
-msgstr "Βραζιλιάνικα"
-
-#: conf/global_settings.py:66
-msgid "Romanian"
-msgstr "Ρουμανικά"
-
-#: conf/global_settings.py:67
-msgid "Russian"
-msgstr "Ρωσικά"
-
-#: conf/global_settings.py:68
-msgid "Slovak"
-msgstr "Σλοβακικά"
-
-#: conf/global_settings.py:69
-msgid "Slovenian"
-msgstr "Σλοβενικά"
-
-#: conf/global_settings.py:70
-msgid "Serbian"
-msgstr "Σερβικά"
-
-#: conf/global_settings.py:71
-msgid "Swedish"
-msgstr "Σουηδικά"
-
-#: conf/global_settings.py:72
-msgid "Tamil"
-msgstr "Ταμιλικά"
-
-#: conf/global_settings.py:73
-msgid "Telugu"
-msgstr ""
-
-#: conf/global_settings.py:74
-msgid "Turkish"
-msgstr "Τουρκικά"
-
-#: conf/global_settings.py:75
-msgid "Ukrainian"
-msgstr "Ουκρανικά"
-
-#: conf/global_settings.py:76
-msgid "Simplified Chinese"
-msgstr "Απλοποιημένα Κινέζικα"
-
-#: conf/global_settings.py:77
-msgid "Traditional Chinese"
-msgstr "Παραδοσιακά Κινέζικα"
-
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "χρόνος"
-msgstr[1] "χρόνια"
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "μήνας"
-msgstr[1] "μήνες"
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "εβδομάδα"
-msgstr[1] "εβδομάδες"
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "ημέρα"
-msgstr[1] "ημέρες"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ώρα"
-msgstr[1] "ώρες"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "λεπτό"
-msgstr[1] "λεπτά"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Δευτέρα"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Τρίτη"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Τετάρτη"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Πέμπτη"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Παρασκευή"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Σάββατο"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Κυριακή"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "Ιανουάριος"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "Φεβρουάριος"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
-msgstr "Μάρτιος"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
-msgstr "Απρίλιος"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
-msgstr "Μάιος"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
-msgstr "Ιούνιος"
-
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
-msgstr "Ιούλιος"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "Αύγουστος"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "Σεπτέμβριος"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "Οκτώβριος"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "Νοέμβριος"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "Δεκέμβριος"
-
-#: utils/dates.py:19
-msgid "jan"
-msgstr "Ιαν"
-
-#: utils/dates.py:19
-msgid "feb"
-msgstr "Φεβ"
-
-#: utils/dates.py:19
-msgid "mar"
-msgstr "Μάρ"
-
-#: utils/dates.py:19
-msgid "apr"
-msgstr "Απρ"
-
-#: utils/dates.py:19
-msgid "may"
-msgstr "Μάι"
-
-#: utils/dates.py:19
-msgid "jun"
-msgstr "Ιούν"
-
-#: utils/dates.py:20
-msgid "jul"
-msgstr "Ιούλ"
-
-#: utils/dates.py:20
-msgid "aug"
-msgstr "Αύγ"
-
-#: utils/dates.py:20
-msgid "sep"
-msgstr "Σεπ"
-
-#: utils/dates.py:20
-msgid "oct"
-msgstr "Οκτ"
-
-#: utils/dates.py:20
-msgid "nov"
-msgstr "Νοέ"
-
-#: utils/dates.py:20
-msgid "dec"
-msgstr "Δεκ"
-
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "Ιάν."
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "Φεβ."
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "Αύγ."
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "Σεπτ."
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "Οκτ."
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "Νοέ."
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "Δεκ."
-
-#: utils/dateformat.py:40
-msgid "p.m."
-msgstr "μμ."
-
-#: utils/dateformat.py:41
-msgid "a.m."
-msgstr "πμ."
-
-#: utils/dateformat.py:46
-msgid "PM"
-msgstr "ΜΜ"
-
-#: utils/dateformat.py:47
-msgid "AM"
-msgstr "ΠΜ"
-
-#: utils/dateformat.py:95
-msgid "midnight"
-msgstr "μεσάνυχτα"
-
-#: utils/dateformat.py:97
-msgid "noon"
-msgstr "μεσημέρι"
-
-#: utils/translation/trans_real.py:358
-msgid "DATE_FORMAT"
-msgstr "j N Y"
-
-#: utils/translation/trans_real.py:359
-msgid "DATETIME_FORMAT"
-msgstr "j N Y, P"
-
-#: utils/translation/trans_real.py:360
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:376
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:377
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: oldforms/__init__.py:392
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Βεβαιωθείτε ότι το κείμενο σας έχει μέγεθος μικρότερο από %s χαρακτήρα."
-msgstr[1] "Βεβαιωθείτε ότι το κείμενο σας έχει μέγεθος μικρότερο από %s χαρακτήρες."
-
-#: oldforms/__init__.py:397
-msgid "Line breaks are not allowed here."
-msgstr "Δεν επιτρέπονται αλλαγές γραμμών εδώ."
-
-#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Επιλέξτε μια έγκυρη επιλογή; Το '%(data)s' δεν είναι στα %(choices)s."
-
-#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:150
-#: newforms/widgets.py:174
-msgid "Unknown"
-msgstr "Άγνωστο"
-
-#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143
-#: newforms/widgets.py:174
-msgid "Yes"
-msgstr "Ναι"
-
-#: oldforms/__init__.py:577 contrib/admin/filterspecs.py:143
-#: newforms/widgets.py:174
-msgid "No"
-msgstr "Όχι"
-
-#: oldforms/__init__.py:672 core/validators.py:174 core/validators.py:445
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-
-#: oldforms/__init__.py:674
-msgid "The submitted file is empty."
-msgstr "Το αρχείο που υποβλήθηκε είναι κενό."
-
-#: oldforms/__init__.py:730
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Εισάγετε έναν ακέραιο αριθμό μεταξύ -32,768 και 32,767."
-
-#: oldforms/__init__.py:740
-msgid "Enter a positive number."
-msgstr "Εισάγετε ένα θετικό αριθμό."
-
-#: oldforms/__init__.py:750
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Εισάγετε έναν ακέραιο αριθμό μεταξύ 0 και 32,767."
-
-#: contrib/localflavor/no/forms.py:15
-#, fuzzy
-msgid "Enter a zip code in the format XXXX."
-msgstr "Εισάγετε μία έγκυρη ώρα στη μορφή ΩΩ-ΛΛ."
-
-#: contrib/localflavor/no/forms.py:36
-#, fuzzy
-msgid "Enter a valid Norwegian social security number."
-msgstr "Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό."
-
-#: contrib/localflavor/it/forms.py:14 contrib/localflavor/fr/forms.py:17
-#: contrib/localflavor/fi/forms.py:14 contrib/localflavor/de/forms.py:16
-#, fuzzy
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Εισάγετε μία έγκυρη ώρα στη μορφή ΩΩ-ΛΛ."
-
-#: contrib/localflavor/jp/forms.py:21
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-#, fuzzy
-msgid "Iwate"
-msgstr "Ημ/νία:"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-#, fuzzy
-msgid "Tokyo"
-msgstr "Σήμερα"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:18
-#, fuzzy
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Εισάγετε μία έγκυρη ώρα στη μορφή ΩΩ-ΛΛ."
-
-#: contrib/localflavor/br/forms.py:30
-#, fuzzy
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Τηλέφωνο μέσα είναι."
-
-#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:46
-#, fuzzy
-msgid "Enter a valid Finnish social security number."
-msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου."
-
-#: contrib/localflavor/uk/forms.py:18
-msgid "Enter a postcode. A space is required between the two postcode parts."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:63
-#, fuzzy
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format"
-msgstr "Γερμανικά"
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-#, fuzzy
-msgid "Berlin"
-msgstr "Βραζιλιάνικα"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-#, fuzzy
-msgid "Hamburg"
-msgstr "Αύγ"
-
-#: contrib/localflavor/de/de_states.py:11
-#, fuzzy
-msgid "Hessen"
-msgstr "μήνυμα"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/usa/forms.py:18
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/usa/forms.py:51
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/sessions/models.py:68
-msgid "session key"
-msgstr "κλειδί συνεδρίας"
-
-#: contrib/sessions/models.py:69
-msgid "session data"
-msgstr "δεδομένα συνεδρίας"
-
-#: contrib/sessions/models.py:70
-msgid "expire date"
-msgstr "ημερομηνία λήξης"
-
-#: contrib/sessions/models.py:74
-msgid "session"
-msgstr "συνεδρία"
-
-#: contrib/sessions/models.py:75
-msgid "sessions"
-msgstr "συνεδρίες"
-
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
-msgid "The two password fields didn't match."
-msgstr "Τα δύο πεδία συνθηματικών δεν ταιριάζουν."
-
-#: contrib/auth/forms.py:25
-msgid "A user with that username already exists."
-msgstr "Ένας χρήστης με αυτό το όνομα χρήστη υπάρχει ήδη."
-
-#: contrib/auth/forms.py:53
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Ο πλοηγητής σας δεν φαίνεται να έχει ενεργοποιημένα τα αρχεία cookie. Τα "
-"αρχεία cookie απαιτούνται για να συνδεθείτε."
-
-#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Παρακαλούμε εισάγετε ένα σωστό όνομα χρήστη και συνθηματικό. Να σημειωθεί "
-"ότι και τα δύο πεδία κάνουν διάκριση μεταξύ πεζών και κεφαλαίων."
-
-#: contrib/auth/forms.py:62
-msgid "This account is inactive."
-msgstr "Αυτός ο λογαριασμός είναι ανενεργός."
-
-#: contrib/auth/forms.py:85
-#, fuzzy
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "χρήστης?"
-
-#: contrib/auth/forms.py:117
-#, fuzzy
-msgid "The two 'new password' fields didn't match."
-msgstr "συνθηματικό."
-
-#: contrib/auth/forms.py:124
-#, fuzzy
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "συνθηματικό."
-
-#: contrib/auth/views.py:39
-msgid "Logged out"
-msgstr "Έγινε αποσύνδεση"
-
-#: contrib/auth/models.py:38 contrib/auth/models.py:57
-msgid "name"
-msgstr "όνομα"
-
-#: contrib/auth/models.py:40
-msgid "codename"
-msgstr "κωδικό όνομα"
-
-#: contrib/auth/models.py:42
-msgid "permission"
-msgstr "δικαίωμα"
-
-#: contrib/auth/models.py:43 contrib/auth/models.py:58
-msgid "permissions"
-msgstr "διακαιώματα"
-
-#: contrib/auth/models.py:60
-msgid "group"
-msgstr "ομάδα"
-
-#: contrib/auth/models.py:61 contrib/auth/models.py:100
-msgid "groups"
-msgstr "ομάδες"
-
-#: contrib/auth/models.py:90
-msgid "username"
-msgstr "όνομα χρήστη"
-
-#: contrib/auth/models.py:90
-#, fuzzy
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr "Απαραίτητο."
-
-#: contrib/auth/models.py:91
-msgid "first name"
-msgstr "όνομα"
-
-#: contrib/auth/models.py:92
-msgid "last name"
-msgstr "επώνυμο"
-
-#: contrib/auth/models.py:93
-msgid "e-mail address"
-msgstr "ηλεκτρονική διεύθυνση"
-
-#: contrib/auth/models.py:94
-msgid "password"
-msgstr "συνθηματικό"
-
-#: contrib/auth/models.py:94
-#, fuzzy
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr "<a href=\"password/\"> συνθηματικό</a>."
-
-#: contrib/auth/models.py:95
-msgid "staff status"
-msgstr "Κατάσταση προσωπικού"
-
-#: contrib/auth/models.py:95
-msgid "Designates whether the user can log into this admin site."
-msgstr "Ορίζει αν ο χρήστης μπορεί να συνδεθεί στο χώρο διαχείρισης."
-
-#: contrib/auth/models.py:96
-msgid "active"
-msgstr "ενεργό"
-
-#: contrib/auth/models.py:96
-#, fuzzy
-msgid ""
-"Designates whether this user can log into the Django admin. Unselect this "
-"instead of deleting accounts."
-msgstr "Ορίζει αν ο χρήστης μπορεί να συνδεθεί στο χώρο διαχείρισης."
-
-#: contrib/auth/models.py:97
-msgid "superuser status"
-msgstr "κατάσταση υπερχρήστη"
-
-#: contrib/auth/models.py:97
-#, fuzzy
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "χρήστης διακαιώματα."
-
-#: contrib/auth/models.py:98
-msgid "last login"
-msgstr "τελευταία σύνδεση"
-
-#: contrib/auth/models.py:99
-msgid "date joined"
-msgstr "ημερομηνία σύνδεσης"
-
-#: contrib/auth/models.py:101
-#, fuzzy
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "Μέσα διακαιώματα χειρωνακτικά χρήστης get όλα διακαιώματα ομάδα είναι μέσα."
-
-#: contrib/auth/models.py:102
-msgid "user permissions"
-msgstr "δικαιώματα χρήστη"
-
-#: contrib/auth/models.py:105
-msgid "user"
-msgstr "χρήστης"
-
-#: contrib/auth/models.py:106
-msgid "users"
-msgstr "χρήστες"
-
-#: contrib/auth/models.py:111
-msgid "Personal info"
-msgstr "Προσωπικές πληροφορίες"
-
-#: contrib/auth/models.py:112
-msgid "Permissions"
-msgstr "Δικαιώματα"
-
-#: contrib/auth/models.py:113
-msgid "Important dates"
-msgstr "Σημαντικές ημερομηνίες"
-
-#: contrib/auth/models.py:114
-msgid "Groups"
-msgstr "Ομάδες"
-
-#: contrib/auth/models.py:258
-msgid "message"
-msgstr "μήνυμα"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "th"
-msgstr "η"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "st"
-msgstr "η"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "nd"
-msgstr "η"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "rd"
-msgstr "η"
-
-#: contrib/humanize/templatetags/humanize.py:47
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f εκατομμύριο"
-msgstr[1] "%(value).1f εκατομμύρια"
-
-#: contrib/humanize/templatetags/humanize.py:50
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f δισεκατομμύριο"
-msgstr[1] "%(value).1f δισεκατομμύρια"
-
-#: contrib/humanize/templatetags/humanize.py:53
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f τρισεκατομμύριο"
-msgstr[1] "%(value).1f τρισεκατομμύρια"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "one"
-msgstr "ένα"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "two"
-msgstr "δύο"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "three"
-msgstr "τρία"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "four"
-msgstr "τέσσερα"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "five"
-msgstr "πέντε"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "six"
-msgstr "έξι"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "seven"
-msgstr "εφτά"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "eight"
-msgstr "οκτώ"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "nine"
-msgstr "εννιά"
-
-#: contrib/contenttypes/models.py:36
-msgid "python model class name"
-msgstr "όνομα python model class"
-
-#: contrib/contenttypes/models.py:39
-msgid "content type"
-msgstr "τύπος περιεχομένου"
-
-#: contrib/contenttypes/models.py:40
-msgid "content types"
-msgstr "τύποι περιεχομένου"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "ανακατεύθυνση από"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Αυτό πρέπει να είναι ένα απόλυτο μονοπάτι, με εξαίρεση το όνομα χώρου. "
-"Παράδειγμα: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "ανακατεύθυνση προς"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Αυτό πρέπει να είναι ένα απόλυτο μονοπάτι (όπως παραπάνω), ή ένα πλήρες URL "
-"που αρχίζει με 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "ανακατεύθυνση"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "ανακατευθύνσεις"
-
-#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315
-msgid "URL"
-msgstr "URL"
-
-#: contrib/flatpages/models.py:8
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Παράδειγμα: '/about/contact/'. Βεβαιωθείτε ότι περιέχει καθέτους στην αρχή "
-"και το τέλος."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "τίτλος"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "περιεχόμενο"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "ενεργοποίηση σχολίων"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "όνομα προτύπου"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Παράδειγμα: 'flatpages/contact_page.html'. Αν δεν εισαχθεί, το σύστημα θα "
-"χρησιμοποιήσει το 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "απαιτείται εγγραφή"
-
-#: contrib/flatpages/models.py:14
-#, fuzzy
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "είναι μέσα χρήστες σελίδα."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "απλή σελίδα"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "απλές σελίδες"
-
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
-msgid "object ID"
-msgstr "ID αντικειμένου"
-
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "Επικεφαλίδα"
-
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "σχόλιο"
-
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "βαθμολογία #1"
-
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "βαθμολογία #2"
-
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "βαθμολογία #3"
-
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "βαθμολογία #4"
-
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "βαθμολογία #5"
-
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "βαθμολογία #6"
-
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "βαθμολογία #7"
-
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "βαθμολογία #8"
-
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "είναι έγκυρη βαθμολογία"
-
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "ημερομηνία/ώρα υποβολής"
-
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
-msgid "is public"
-msgstr "είναι δημόσιο"
-
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
-msgid "IP address"
-msgstr "διεύθυνση IP"
-
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "είναι διαγραμμένο"
-
-#: contrib/comments/models.py:86
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Επιλέξτε αυτό το κουτί ελέγχου εάν το σχόλιο είναι ανάρμοστο. Ένα μήνυμα "
-"\"Αυτό το σχόλιο διαγράφηκε\" θα εμφανιστεί στη θέση του."
-
-#: contrib/comments/models.py:91
-msgid "comments"
-msgstr "σχόλια"
-
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
-msgid "Content object"
-msgstr "Αντικείμενο περιεχομένου"
-
-#: contrib/comments/models.py:159
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Σχόλιο από %(user)s στις %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "όνομα ατόμου"
-
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "διεύθυνση ip"
-
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr "εγκεκριμένο από το προσωπικό"
-
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "ελεύθερο σχόλιο"
-
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "ελεύθερα σχόλια"
-
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "βαθμολογία"
-
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "ημερομηνία βαθμολόγησης"
-
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "σκορ κάρμα"
-
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "σκορ κάρμα"
-
-#: contrib/comments/models.py:242
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d βαθμολογία από %(user)s"
-
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Αυτό το σχόλιο σημειώθηκε από %(user)s\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "ημερομηνία σημείωσης"
-
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "σημείωση χρήστη"
-
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "σημειώσεις χρήστη"
-
-#: contrib/comments/models.py:273
-#, python-format
-msgid "Flag by %r"
-msgstr "Σημείωση από %r"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "ημερομηνία διαγραφής"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "διαγραφή συντονιστή"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "διαγραφές συντονιστή"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Διαγραφή συντονιστή από %r"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "Όνομα χρήστη:"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-msgid "Log out"
-msgstr "Αποσύνδεση"
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Συνθηματικό:"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "Ξεχάσατε το συνθηματικό σας;"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Βαθμολογίες"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Απαραίτητο"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Προαιρετικό"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Στείλτε μια φωτογραφία"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Σχόλιο:"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "Προεπισκόπηση σχολίου"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Το όνομα σας:"
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "Ανώνυμοι χρήστες δεν μπορούν να ψηφίσουν"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "Μη έγκυρο ID σχολίου"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "Δεν επιτρέπεται ψήφος για τον εαυτό σας"
-
-#: contrib/comments/views/comments.py:27
-msgid "This rating is required because you've entered at least one other rating."
-msgstr ""
-"Αυτή η βαθμολογία απαιτείται επειδή έχετε εισάγει τουλάχιστον μία ακόμη "
-"βαθμολογία."
-
-#: contrib/comments/views/comments.py:111
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] ""
-"Αυτό το σχόλιο έχει αναρτηθεί από ένα χρήστη με λιγότερα από %(count)s "
-"σχόλιο:\n"
-"\n"
-"%(text)s"
-msgstr[1] ""
-"Αυτό το σχόλιο έχει αναρτηθεί από ένα χρήστη με λιγότερα από %(count)s "
-"σχόλια:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:116
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Αυτό το σχόλιο αναρτήθηκε από έναν sketchy χρήστη:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:188
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "Επιτρέπονται μόνο POST υποβολές"
-
-#: contrib/comments/views/comments.py:192
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν έχουν υποβληθεί"
-
-#: contrib/comments/views/comments.py:196
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Κάποιος έχει πειράξει τη φόρμα σχολιασμού (παραβίαση ασφάλειας)"
-
-#: contrib/comments/views/comments.py:206
-#: contrib/comments/views/comments.py:292
-#, fuzzy
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr "σχόλιο αντικείμενο ID"
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-#, fuzzy
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "σχόλιο t προεπισκόπηση ή"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "όνομα χώρου"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "εμφανιζόμενο όνομα"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "ιστότοπος"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "ιστότοποι"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Από %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
-msgid "All"
-msgstr "Όλα"
-
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
-msgstr "Οποιαδήποτε ημερομηνία"
-
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
-msgstr "Σήμερα"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
-msgstr "Τελευταίες 7 ημέρες"
-
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
-msgstr "Αυτόν το μήνα"
-
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
-msgstr "Αυτόν το χρόνο"
-
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "ώρα ενέργειας"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "id αντικειμένου"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "repr αντικειμένου"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "σημαία ενέργειας"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr "αλλαγή μηνύματος"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "εγγραφή καταγραφής"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "εγγραφές καταγραφής"
-
-#: contrib/admin/templatetags/admin_list.py:247
-msgid "All dates"
-msgstr "Όλες οι ημερομηνίες"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/auth/user/change_password.html:12
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-msgid "Home"
-msgstr "Αρχική"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-msgid "Documentation"
-msgstr "Τεκμηρίωση"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Σελιδοδείκτες"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-msgid "Change password"
-msgstr "Αλλαγή συνθηματικού"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "Σελιδοδείκτες τεκμηρίωσης"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-#, fuzzy
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\"> δεσμός ή δεξιά δεσμός και αύξηση Τώρα υποφαινόμενο από "
-"κάθε σελίδα μέσα site Σημείωση από υποφαινόμενο site από a σύστημα "
-"υποφαινόμενο t είναι</p> n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "Τεκμηρίωση για αυτήν τη σελίδα"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-#, fuzzy
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "Άλματα υποφαινόμενο από κάθε σελίδα τεκμηρίωση για σελίδα."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "Εμφάνιση ID αντικειμένου"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-#, fuzzy
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "Περιεχόμενο τύπος και μοναδικό ID για σελίδες a single αντικείμενο."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "Επεξεργασία αυτού του αντικειμένου (τρέχον παράθυρο)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-#, fuzzy
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Άλματα σελίδα για σελίδες a single αντικείμενο."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "Επεξεργασία αυτού του αντικειμένου (νέο παράθυρο)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-#, fuzzy
-msgid "As above, but opens the admin page in a new window."
-msgstr "σελίδα μέσα a νέο παράθυρο."
-
-#: contrib/admin/templates/admin/submit_line.html:3
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-msgid "Delete"
-msgstr "Διαγραφή"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Αποθήκευση ως νέο"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Αποθήκευση και προσθήκη καινούριου"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Αποθήκευση και συνέχεια επεξεργασίας"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Αποθήκευση"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Σφάλμα εξυπηρετητή"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Σφάλμα εξυπηρετητή (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Σφάλμα εξυπηρετητή <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Υπήρξε ένα σφάλμα. Έχει αναφερθεί στους διαχειριστές του ιστότοπου μέσω ηλ. "
-"ταχυδρομείου και θα πρέπει να επιδιορθωθεί σύντομα. Ευχαριστούμε για την "
-"υπομονή σας."
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Ανά %(filter_title)s "
-
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "Φίλτρο"
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-#, fuzzy
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr "χρήστης."
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Μετάβαση"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 αποτέλεσμα"
-msgstr[1] "%(counter)s αποτελέσματα"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s συνολικά"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "History"
-msgstr "Ιστορικό"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "Ημερομηνία/ώρα"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "Χρήστης"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "Ενέργεια"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "N j, Y, P"
-
-#: contrib/admin/templates/admin/object_history.html:36
-#, fuzzy
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr "αντικείμενο t a t site."
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, fuzzy, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr "Διαγραφή αντικείμενο μέσα λογαριασμός t δικαίωμα διαγραφή από:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, fuzzy, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr "υποφαινόμενο υποφαινόμενο διαγραφή αντικείμενο Όλα από διαγράφηκε:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "Ναι, είμαι βέβαιος"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Εμφάνιση όλων"
-
-#: contrib/admin/templates/admin/change_list.html:12
-#, python-format
-msgid "Add %(name)s"
-msgstr "Προσθήκη %(name)s"
-
-#: contrib/admin/templates/admin/change_form.html:15
-#: contrib/admin/templates/admin/index.html:28
-msgid "Add"
-msgstr "Προσθήκη"
-
-#: contrib/admin/templates/admin/change_form.html:22
-msgid "View on site"
-msgstr "Προβολή στην ιστοσελίδα"
-
-#: contrib/admin/templates/admin/change_form.html:32
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Παρακαλούμε διορθώστε το παρακάτω λάθος."
-msgstr[1] "Παρακαλούμε διορθώστε τα παρακάτω λάθη."
-
-#: contrib/admin/templates/admin/change_form.html:50
-msgid "Ordering"
-msgstr "Ταξινόμηση"
-
-#: contrib/admin/templates/admin/change_form.html:53
-msgid "Order:"
-msgstr "Ταξινόμηση:"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "Καλωσήρθατε,"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Η σελίδα δε βρέθηκε"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Λυπόμαστε, αλλά η σελίδα που ζητήθηκε δε μπόρεσε να βρεθεί."
-
-#: contrib/admin/templates/admin/login.html:25
-#: contrib/admin/views/decorators.py:24
-msgid "Log in"
-msgstr "Σύνδεση"
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Διαθέσιμα μοντέλα στην εφαρμογή %(name)s."
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Επεξεργασία"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Δεν έχετε δικαίωμα να επεξεργαστείτε τίποτα."
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Πρόσφατες ενέργειες"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "Οι ενέργειες μου"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Κανένα διαθέσιμο"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Διαχειριστής ιστότοπου Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Διαχείριση Django"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-#, fuzzy
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "όνομα χρήστη συνθηματικό χρήστης."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "Όνομα χρήστη"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-msgid "Password"
-msgstr "Συνθηματικό"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-msgid "Password (again)"
-msgstr "Συνθηματικό (ξανά)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "Εισάγετε το ίδιο συνθηματικό όπως παραπάνω, για λόγους επιβεβαίωσης."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-#, fuzzy
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "συνθηματικό χρήστης<strong> όνομα χρήστη</strong>."
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Τρέχουσα:"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Αλλαγή:"
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Ημ/νία:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Ώρα:"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Ευχαριστούμε που διαθέσατε κάποιο ποιοτικό χρόνο στον ιστότοπο σήμερα."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Σύνδεση ξανά"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-#, fuzzy
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "συνθηματικό"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, fuzzy, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "για χρήστης λογαριασμός σε"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, fuzzy, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "νέο συνθηματικό είναι"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-#, fuzzy
-msgid "Feel free to change this password by going to this page:"
-msgstr "συνθηματικό από σελίδα:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-#, fuzzy
-msgid "Your username, in case you've forgotten:"
-msgstr "όνομα χρήστη μέσα υποφαινόμενο:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, fuzzy
-msgid "Thanks for using our site!"
-msgstr "Ευχαριστώ για site!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-#, fuzzy
-msgid "The %(site_name)s team"
-msgstr "ιστότοπος όνομα"
-
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Επαναφορά συνθηματικού"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Επιτυχής επαναφορά συνθηματικού"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed a new password to the e-mail address you submitted. You "
-"should be receiving it shortly."
-msgstr ""
-"Ένα νέο συνθηματικό έχει αποσταλεί στην ηλεκτρονική διεύθυνση που έχετε "
-"επιλέξει. Θα πρέπει να το παραλάβετε πολύ σύντομα."
-
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:4
-msgid "Password change"
-msgstr "Αλλαγή συνθηματικού"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Παρακαλούμε εισάγετε το παλιό σας συνθηματικό, για λόγους ασφάλειας, και "
-"κατόπιν εισάγετε το νέο σας συνθηματικό δύο φορές ούτως ώστε να "
-"πιστοποιήσουμε ότι το πληκτρολογήσατε σωστά."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Παλιό συνθηματικό:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "Νέο συνθηματικό:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "Επιβεβαίωση συνθηματικού:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "Αλλαγή του συνθηματικού μου"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Επιτυχής αλλαγή συνθηματικού"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Το συνθηματικό σας έχει αλλαχτεί."
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll reset "
-"your password and e-mail the new one to you."
-msgstr ""
-"Έχετε ξεχάσει το συνθηματικό σας; Εισάγετε παρακάτω την ηλεκτρονική σας "
-"διεύθυνση, και θα επαναφέρουμε το συνθηματικό σας, αποστέλλοντας το "
-"καινούριο στην ηλ. σας διεύθυνση."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Ηλεκτρονική διεύθυνση:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Επαναφορά του συνθηματικού μου"
-
-#: contrib/admin/views/main.py:223
-msgid "Site administration"
-msgstr "Διαχείριση του ιστότοπου"
-
-#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Το %(name)s \"%(obj)s\" αποθηκεύτηκε με επιτυχία."
-
-#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
-#: contrib/admin/views/auth.py:24
-msgid "You may edit it again below."
-msgstr "Μπορείτε να το επεξεργαστείτε ξανά παρακάτω."
-
-#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
-#, python-format
-msgid "You may add another %s below."
-msgstr "Μπορείτε να προσθέσετε ακόμα ένα %s παρακάτω."
-
-#: contrib/admin/views/main.py:289
-#, python-format
-msgid "Add %s"
-msgstr "Προσθήκη %s"
-
-#: contrib/admin/views/main.py:335
-#, python-format
-msgid "Added %s."
-msgstr "Το %s προστέθηκε."
-
-#: contrib/admin/views/main.py:337
-#, python-format
-msgid "Changed %s."
-msgstr "Έγινε επεξεργασία του %s."
-
-#: contrib/admin/views/main.py:339
-#, python-format
-msgid "Deleted %s."
-msgstr "Το %s διεγράφη."
-
-#: contrib/admin/views/main.py:342
-msgid "No fields changed."
-msgstr "Κανένα πεδίο δεν άλλαξε."
-
-#: contrib/admin/views/main.py:345
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Το %(name)s \"%(obj)s\" αλλάχτηκε με επιτυχία."
-
-#: contrib/admin/views/main.py:353
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Το %(name)s \"%(obj)s\" αποθηκεύτηκε με επιτυχία. Μπορείτε να το "
-"επεξεργαστείτε πάλι παρακάτω."
-
-#: contrib/admin/views/main.py:391
-#, python-format
-msgid "Change %s"
-msgstr "Αλλαγή του %s"
-
-#: contrib/admin/views/main.py:476
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Ένα ή περισσότερα %(fieldname)s στο %(name)s: %(obj)s"
-
-#: contrib/admin/views/main.py:481
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Ένα ή περισσότερα %(fieldname)s στο %(name)s:"
-
-#: contrib/admin/views/main.py:514
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Το %(name)s \"%(obj)s\" διαγράφηκε με επιτυχία."
-
-#: contrib/admin/views/main.py:517
-msgid "Are you sure?"
-msgstr "Είστε σίγουροι;"
-
-#: contrib/admin/views/main.py:539
-#, python-format
-msgid "Change history: %s"
-msgstr "Ιστορικό αλλαγών: %s"
-
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s"
-msgstr "Επιλέξτε %s"
-
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s to change"
-msgstr "Επιλέξτε %s προς αλλαγή"
-
-#: contrib/admin/views/main.py:768
-msgid "Database error"
-msgstr "Σφάλμα βάσης δεδομένων"
-
-#: contrib/admin/views/decorators.py:62
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Παρακαλούμε συνδεθείτε εκ νέου, γιατί η συνεδρία σας έχει λήξει. Μην "
-"ανησυχείτε: Η υποβολή σας έχει αποθηκευτεί."
-
-#: contrib/admin/views/decorators.py:69
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Από ότι φαίνεται, ο πλοηγητής σας δεν έχει ρυθμιστεί να δέχεται cookies. "
-"Παρακαλούμε ενεργοποιείστε τα cookies, φορτώστε ξανά αυτήν τη σελίδα και "
-"δοκιμάστε ξανά."
-
-#: contrib/admin/views/decorators.py:83
-msgid "Usernames cannot contain the '@' character."
-msgstr "Τα ονόματα χρηστών δεν επιτρέπεται να περιέχουν το χαρακτήρα '@'."
-
-#: contrib/admin/views/decorators.py:85
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Η ηλεκτρονική σας διεύθυνση δεν είναι το όνομα χρήστη σας. Δοκιμάστε '%s' "
-"στη θέση αυτού."
-
-#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-msgid "tag:"
-msgstr "ετικέτα:"
-
-#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-msgid "filter:"
-msgstr "φίλτρο:"
-
-#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-msgid "view:"
-msgstr "προβολή:"
-
-#: contrib/admin/views/doc.py:164
-#, fuzzy, python-format
-msgid "App %r not found"
-msgstr "Η σελίδα δε βρέθηκε"
-
-#: contrib/admin/views/doc.py:171
-#, python-format
-#, fuzzy
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "όνομα"
-
-#: contrib/admin/views/doc.py:183
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr ""
-
-#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
-#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
-msgid "model:"
-msgstr "μοντέλο:"
-
-#: contrib/admin/views/doc.py:214
-#, python-format
-#, fuzzy
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "όνομα"
-
-#: contrib/admin/views/doc.py:219
-#, python-format
-msgid "all %s"
-msgstr "όλα %s"
-
-#: contrib/admin/views/doc.py:224
-#, python-format
-msgid "number of %s"
-msgstr ""
-
-#: contrib/admin/views/doc.py:229
-#, python-format
-msgid "Fields on %s objects"
-msgstr ""
-
-#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
-#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
-msgid "Integer"
-msgstr "Ακέραιος"
-
-#: contrib/admin/views/doc.py:292
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (Είτε Αληθές ή Ψευδές)"
-
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "Συμβολοσειρά (μέχρι %(maxlength)s χαρακτήρες)"
-
-#: contrib/admin/views/doc.py:294
-msgid "Comma-separated integers"
-msgstr "Ακέραιοι χωρισμένοι με κόμματα"
-
-#: contrib/admin/views/doc.py:295
-msgid "Date (without time)"
-msgstr "Ημερομηνία (χωρίς την ώρα)"
-
-#: contrib/admin/views/doc.py:296
-msgid "Date (with time)"
-msgstr "Ημερομηνία (με την ώρα)"
-
-#: contrib/admin/views/doc.py:297
-msgid "E-mail address"
-msgstr "Ηλεκτρονική διεύθυνση"
-
-#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
-#: contrib/admin/views/doc.py:302
-msgid "File path"
-msgstr "Τοποθεσία αρχείου"
-
-#: contrib/admin/views/doc.py:300
-msgid "Decimal number"
-msgstr "Δεκαδικός αριθμός"
-
-#: contrib/admin/views/doc.py:306
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (Αληθές, Ψευδές, ή τίποτα)"
-
-#: contrib/admin/views/doc.py:307
-msgid "Relation to parent model"
-msgstr "Σχέση με το γονικό μοντέλο"
-
-#: contrib/admin/views/doc.py:308
-msgid "Phone number"
-msgstr "Αριθμός τηλεφώνου"
-
-#: contrib/admin/views/doc.py:313
-msgid "Text"
-msgstr "Κείμενο"
-
-#: contrib/admin/views/doc.py:314
-msgid "Time"
-msgstr "Ώρα"
-
-#: contrib/admin/views/doc.py:316
-msgid "U.S. state (two uppercase letters)"
-msgstr "Πολιτεία ΗΠΑ. (δύο κεφαλαία γράμματα)"
-
-#: contrib/admin/views/doc.py:317
-msgid "XML text"
-msgstr "Κείμενο XML"
-
-#: contrib/admin/views/doc.py:343
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "Το %s δε φαίνεται να είναι ένα αντικείμενο urlpattern"
-
-#: contrib/admin/views/auth.py:30
-msgid "Add user"
-msgstr "Προσθήκη χρήστη"
-
-#: contrib/admin/views/auth.py:57
-msgid "Password changed successfully."
-msgstr "Το συνθηματικό αλλάχτηκε με επιτυχία."
-
-#: contrib/admin/views/auth.py:64
-#, python-format
-msgid "Change password: %s"
-msgstr "Αλλαγή συνθηματικού: %s"
-
-#: newforms/fields.py:103 newforms/fields.py:256
-#, python-format
-msgid "Ensure this value has at most %d characters."
-msgstr "Βεβαιωθείτε ότι το κείμενο σας έχει μέγεθος το πολύ %d χαρακτήρες."
-
-#: newforms/fields.py:105 newforms/fields.py:258
-#, python-format
-msgid "Ensure this value has at least %d characters."
-msgstr "Βεβαιωθείτε ότι το κείμενο σας έχει μέγεθος τουλάχιστον %d χαρακτήρες."
-
-#: newforms/fields.py:128 core/validators.py:120
-msgid "Enter a whole number."
-msgstr "Εισάγετε έναν ακέραιο αριθμό."
-
-#: newforms/fields.py:130
-#, fuzzy, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "τιμή a από."
-
-#: newforms/fields.py:132
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr ""
-
-#: newforms/fields.py:165
-msgid "Enter a valid date."
-msgstr "Εισάγετε μια έγκυρη ημερομηνία."
-
-#: newforms/fields.py:192
-msgid "Enter a valid time."
-msgstr "Εισάγετε μια έγκυρη ώρα."
-
-#: newforms/fields.py:228
-msgid "Enter a valid date/time."
-msgstr "Εισάγετε μια έγκυρη ημερομηνία/ώρα."
-
-#: newforms/fields.py:242
-msgid "Enter a valid value."
-msgstr "Εισάγετε μια έγκυρη τιμή."
-
-#: newforms/fields.py:271 core/validators.py:162
-msgid "Enter a valid e-mail address."
-msgstr "Εισάγετε μια έγκυρη διεύθυνση ηλ. ταχυδρομείου."
-
-#: newforms/fields.py:289 newforms/fields.py:311
-msgid "Enter a valid URL."
-msgstr "Εισάγετε ένα έγκυρο URL."
-
-#: newforms/fields.py:313
-#, fuzzy
-msgid "This URL appears to be a broken link."
-msgstr "Το URL %s είναι χαλασμένος σύνδεσμος."
-
-#: newforms/fields.py:362 newforms/models.py:165
-#, fuzzy
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Επιλέξτε μια έγκυρη επιλογή; Το '%(data)s' δεν είναι στα %(choices)s."
-
-#: newforms/fields.py:380 newforms/fields.py:456 newforms/models.py:182
-#, fuzzy
-msgid "Enter a list of values."
-msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου."
-
-#: newforms/fields.py:389 newforms/models.py:188
-#, fuzzy, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Επιλέξτε μια έγκυρη επιλογή; Το '%(data)s' δεν είναι στα %(choices)s."
-
-#: template/defaultfilters.py:491
-msgid "yes,no,maybe"
-msgstr "ναι,όχι,ίσως"
-
-#: views/generic/create_update.py:43
-#, fuzzy, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Το %(name)s \"%(obj)s\" αλλάχτηκε με επιτυχία."
-
-#: views/generic/create_update.py:117
-#, fuzzy, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Το %(name)s \"%(obj)s\" διαγράφηκε με επιτυχία."
-
-#: views/generic/create_update.py:184
-#, fuzzy, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Το %(name)s \"%(obj)s\" διαγράφηκε με επιτυχία."
-
-#: core/validators.py:64
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Αυτή η τιμή πρέπει να περιέχει μόνο γράμματα, αριθμούς και υπογεγραμμένες."
-
-#: core/validators.py:68
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Αυτή η τιμή πρέπει να περιέχει μόνο γράμματα, αριθμούς, υπογεγραμμένες, "
-"παύλες ή καθέτους."
-
-#: core/validators.py:72
-#, fuzzy
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr ""
-"Αυτή η τιμή πρέπει να περιέχει μόνο γράμματα, αριθμούς, υπογεγραμμένες, "
-"παύλες ή καθέτους."
-
-#: core/validators.py:76
-msgid "Uppercase letters are not allowed here."
-msgstr "Τα κεφαλαία γράμματα δεν επιτρέπονται εδώ."
-
-#: core/validators.py:80
-msgid "Lowercase letters are not allowed here."
-msgstr "Τα πεζά γράμματα δεν επιτρέπονται εδώ."
-
-#: core/validators.py:87
-msgid "Enter only digits separated by commas."
-msgstr "Εισάγετε μόνο ψηφία χωρισμένα με κόμματα."
-
-#: core/validators.py:99
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Εισάγετε έγκυρες ηλ. διευθύνσεις χωρισμένες με κόμματα."
-
-#: core/validators.py:103
-msgid "Please enter a valid IP address."
-msgstr "Παρακαλούμε εισάγετε μια έγκυρη διεύθυνση IP."
-
-#: core/validators.py:107
-msgid "Empty values are not allowed here."
-msgstr "Δεν επιτρέπονται κενές τιμές εδώ."
-
-#: core/validators.py:111
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Δεν επιτρέπονται μη-αριθμητικοί χαρακτήρες εδώ."
-
-#: core/validators.py:115
-msgid "This value can't be comprised solely of digits."
-msgstr "Αυτή η τιμή δεν μπορεί να αποτελείται μόνο από ψηφία."
-
-#: core/validators.py:124
-msgid "Only alphabetical characters are allowed here."
-msgstr "Μόνο αλφαβητικοί χαρακτήρες επιτρέπονται εδώ."
-
-#: core/validators.py:139
-msgid "Year must be 1900 or later."
-msgstr ""
-
-#: core/validators.py:143
-#, fuzzy, python-format
-msgid "Invalid date: %s"
-msgstr "Μη έγκυρο URL: %s"
-
-#: core/validators.py:153
-msgid "Enter a valid time in HH:MM format."
-msgstr "Εισάγετε μία έγκυρη ώρα στη μορφή ΩΩ-ΛΛ."
-
-#: core/validators.py:178
-#, fuzzy
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "a εικόνα αρχείο υποφαινόμενο όχι εικόνα ή a εικόνα."
-
-#: core/validators.py:185
-#, fuzzy, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "URL όχι σημείο a εικόνα."
-
-#: core/validators.py:189
-#, fuzzy, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Τηλέφωνο μέσα είναι."
-
-#: core/validators.py:197
-#, fuzzy, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "URL όχι σημείο a."
-
-#: core/validators.py:201
-msgid "A valid URL is required."
-msgstr "Απαιτείται ένα έγκυρο URL."
-
-#: core/validators.py:215
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Απαιτείται έγκυρη HTML. Συγκεκριμένα σφάλματα είναι τα εξής:\n"
-"%s"
-
-#: core/validators.py:222
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "Κακώς δομημένη XML: %s"
-
-#: core/validators.py:239
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "Μη έγκυρο URL: %s"
-
-#: core/validators.py:244 core/validators.py:246
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "Το URL %s είναι χαλασμένος σύνδεσμος."
-
-#: core/validators.py:252
-#, fuzzy
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "a U συντομογραφία."
-
-#: core/validators.py:266
-#, fuzzy, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Παρακολούθηση είναι όχι."
-msgstr[1] "Παρακολούθηση είναι όχι."
-
-#: core/validators.py:273
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Αυτό το πεδίο πρέπει να ταιριάζει με το πεδίο '%s'."
-
-#: core/validators.py:292
-#, fuzzy
-msgid "Please enter something for at least one field."
-msgstr "για σε ένα πεδίο."
-
-#: core/validators.py:301 core/validators.py:312
-msgid "Please enter both fields or leave them both empty."
-msgstr "Παρακαλούμε συμπληρώστε και τα δύο πεδία ή αφήστε τα και τα δύο άδεια."
-
-#: core/validators.py:320
-#, fuzzy, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "πεδίο πεδίο είναι τιμή"
-
-#: core/validators.py:333
-#, fuzzy, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "πεδίο πεδίο είναι όχι τιμή"
-
-#: core/validators.py:352
-msgid "Duplicate values are not allowed."
-msgstr "Δεν επιτρέπονται διπλές τιμές."
-
-#: core/validators.py:367
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Αυτή η τιμή πρέπει να είναι μεταξύ %(lower)s και %(upper)s."
-
-#: core/validators.py:369
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Αυτή η τιμή πρέπει να είναι τουλάχιστον %s."
-
-#: core/validators.py:371
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Αυτή η τιμή πρέπει να είναι το πολύ %s."
-
-#: core/validators.py:407
-#, fuzzy, python-format
-msgid "This value must be a power of %s."
-msgstr "τιμή a από."
-
-#: core/validators.py:418
-msgid "Please enter a valid decimal number."
-msgstr "Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό."
-
-#: core/validators.py:422
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] ""
-"Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό με το πολύ %s ψηφίο "
-"συνολικά."
-msgstr[1] ""
-"Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό με το πολύ %s ψηφία "
-"συνολικά."
-
-#: core/validators.py:425
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] ""
-"Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό με ακέραιο μέρος το πολύ %s ψηφίο "
-"συνολικά."
-msgstr[1] ""
-"Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό με ακέραιο μέρος το πολύ %s ψηφία "
-"συνολικά."
-
-#: core/validators.py:428
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό με το πολύ %s δεκαδική θέση."
-msgstr[1] ""
-"Παρακαλούμε εισάγετε έναν έγκυρο δεκαδικό αριθμό με το πολύ %s δεκαδικές "
-"θέσεις."
-
-#: core/validators.py:438
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Βεβαιωθείτε ότι το αρχείο που στέλνετε έχει μέγεθος τουλάχιστον %s ψηφία."
-
-#: core/validators.py:439
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Βεβαιωθείτε ότι το αρχείο που στέλνετε έχει μέγεθος το πολύ μέχρι %s ψηφία."
-
-#: core/validators.py:456
-msgid "The format for this field is wrong."
-msgstr "Η μορφή αυτού του πεδίου είναι λανθασμένη."
-
-#: core/validators.py:471
-msgid "This field is invalid."
-msgstr "Αυτό το πεδίο είναι μη έγκυρο."
-
-#: core/validators.py:507
-#, fuzzy, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "όχι Οτιδήποτε από."
-
-#: core/validators.py:510
-#, fuzzy, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "URL url Περιεχόμενο Τύπος."
-
-#: core/validators.py:543
-#, fuzzy, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr "close από Γραμμή με έναρξη"
-
-#: core/validators.py:547
-#, fuzzy, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr "κείμενο ενεργό είναι όχι μέσα Γραμμή με έναρξη"
-
-#: core/validators.py:552
-#, fuzzy, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr "ενεργό είναι χαρακτηριστικό Γραμμή με έναρξη"
-
-#: core/validators.py:557
-#, fuzzy, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr "ενεργό είναι Γραμμή με έναρξη"
-
-#: core/validators.py:561
-#, fuzzy, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr "ενεργό είναι αγνοείται ένα ή περισσότερα Γραμμή με έναρξη"
-
-#: core/validators.py:566
-#, fuzzy, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr "χαρακτηριστικό ενεργό τιμή Γραμμή με έναρξη"
-
diff --git a/parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index b689bf8..0000000
--- a/parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 28c06e3..0000000
--- a/parts/django/django/conf/locale/el/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,108 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) 2006 and beyond.
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Orestis Markou <orestis@orestis.gr>\n"
-"Language-Team: Greek\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Διαθέσιμο %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Επιλογή Όλων"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Προσθήκη"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Αφαίρεση"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Επιλεχθέντα %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Επιλέξτε και κάντε κλικ."
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Καθαρισμός όλων"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "Ιανουάριος Φεβρουάριος Μάρτιος Απρίλιος Μάιος Ιούνιος Ιούλιος Αύγουστος Σεπτέμβριος Οκτώβριος Νοέμβριος "
-"Δεκέμβριος"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Κυριακή Δευτέρα Τρίτη Τετάρτη Πέμπτη Παρασκευή Σάββατο"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "Κ Δ Τ Τ Π Π Σ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "Τώρα"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "Ρολόι"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "Διαλέξτε ώρα"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "Μεσάνυχτα"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "6 π.μ."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "Μεσημέρι"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "Άκυρο"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "Σήμερα"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "Ημερολόγιο"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "Χθες"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "Αύριο"
diff --git a/parts/django/django/conf/locale/el/__init__.py b/parts/django/django/conf/locale/el/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/el/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/el/formats.py b/parts/django/django/conf/locale/el/formats.py
deleted file mode 100644
index d476ab3..0000000
--- a/parts/django/django/conf/locale/el/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd M Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/en/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/en/LC_MESSAGES/django.mo
deleted file mode 100644
index c498c9a..0000000
--- a/parts/django/django/conf/locale/en/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/en/LC_MESSAGES/django.po b/parts/django/django/conf/locale/en/LC_MESSAGES/django.po
deleted file mode 100644
index c478432..0000000
--- a/parts/django/django/conf/locale/en/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5002 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-13 15:35+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr ""
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr ""
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr ""
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr ""
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr ""
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr ""
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr ""
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr ""
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr ""
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr ""
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr ""
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr ""
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr ""
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr ""
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr ""
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr ""
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr ""
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr ""
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr ""
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr ""
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr ""
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr ""
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr ""
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr ""
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr ""
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr ""
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr ""
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr ""
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr ""
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr ""
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr ""
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr ""
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr ""
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr ""
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr ""
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr ""
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr ""
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr ""
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr ""
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr ""
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr ""
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr ""
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr ""
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr ""
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr ""
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr ""
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr ""
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr ""
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr ""
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr ""
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr ""
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr ""
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr ""
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr ""
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr ""
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr ""
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr ""
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr ""
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr ""
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr ""
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr ""
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr ""
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr ""
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr ""
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr ""
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr ""
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr ""
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr ""
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr ""
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr ""
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr ""
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr ""
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr ""
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr ""
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr ""
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr ""
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr ""
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr ""
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr ""
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr ""
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr ""
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr ""
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr ""
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr ""
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr ""
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr ""
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr ""
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr ""
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr ""
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr ""
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr ""
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr ""
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr ""
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr ""
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr ""
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr ""
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr ""
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr ""
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr ""
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr ""
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr ""
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr ""
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr ""
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr ""
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr ""
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr ""
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr ""
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr ""
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr ""
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr ""
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr ""
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr ""
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr ""
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr ""
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr ""
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr ""
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr ""
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr ""
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr ""
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr ""
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr ""
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr ""
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr ""
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr ""
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr ""
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr ""
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr ""
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr ""
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr ""
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr ""
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr ""
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr ""
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr ""
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr ""
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr ""
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr ""
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr ""
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr ""
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr ""
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr ""
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr ""
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr ""
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr ""
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr ""
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr ""
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr ""
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr ""
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr ""
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr ""
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr ""
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr ""
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr ""
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr ""
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr ""
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr ""
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr ""
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr ""
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr ""
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr ""
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr ""
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr ""
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr ""
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr ""
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr ""
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr ""
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr ""
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr ""
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr ""
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr ""
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr ""
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr ""
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr ""
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr ""
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr ""
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr ""
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr ""
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr ""
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr ""
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr ""
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr ""
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr ""
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr ""
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr ""
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr ""
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr ""
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr ""
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr ""
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr ""
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr ""
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr ""
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr ""
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr ""
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr ""
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr ""
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr ""
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr ""
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr ""
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr ""
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr ""
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr ""
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr ""
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr ""
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr ""
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr ""
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr ""
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr ""
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr ""
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr ""
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr ""
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr ""
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr ""
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr ""
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr ""
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr ""
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr ""
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr ""
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr ""
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr ""
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr ""
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr ""
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr ""
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr ""
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr ""
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-msgstr[1] ""
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr ""
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr ""
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr ""
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr ""
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr ""
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr ""
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr ""
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr ""
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr ""
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr ""
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr ""
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr ""
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr ""
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr ""
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr ""
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr ""
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr ""
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr ""
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr ""
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr ""
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr ""
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr ""
-
-#: utils/dates.py:18
-msgid "January"
-msgstr ""
-
-#: utils/dates.py:18
-msgid "February"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr ""
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "August"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "September"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "October"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "November"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "December"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "may"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr ""
-
-#: utils/text.py:130
-msgid "or"
-msgstr ""
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr ""
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr ""
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr ""
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr ""
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr ""
diff --git a/parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 2eda56d..0000000
--- a/parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.po
deleted file mode 100644
index bbd692a..0000000
--- a/parts/django/django/conf/locale/en/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,145 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-13 15:39+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr ""
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr ""
diff --git a/parts/django/django/conf/locale/en/__init__.py b/parts/django/django/conf/locale/en/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/en/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/en/formats.py b/parts/django/django/conf/locale/en/formats.py
deleted file mode 100644
index c59a94a..0000000
--- a/parts/django/django/conf/locale/en/formats.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'N j, Y'
-TIME_FORMAT = 'P'
-DATETIME_FORMAT = 'N j, Y, P'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'F j'
-SHORT_DATE_FORMAT = 'm/d/Y'
-SHORT_DATETIME_FORMAT = 'm/d/Y P'
-FIRST_DAY_OF_WEEK = 0 # Sunday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
- # '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
- # '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- # '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
- # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
- '%m/%d/%Y %H:%M', # '10/25/2006 14:30'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
-)
-DECIMAL_SEPARATOR = u'.'
-THOUSAND_SEPARATOR = u','
-NUMBER_GROUPING = 3
-
diff --git a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.mo
deleted file mode 100644
index 7252fa2..0000000
--- a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.po b/parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.po
deleted file mode 100644
index 226824a..0000000
--- a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4996 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-29 16:32+0200\n"
-"PO-Revision-Date: 2010-03-25 08:00+1000\n"
-"Last-Translator: Simon Meers <DrMeers@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr ""
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr ""
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr ""
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr ""
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr ""
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr ""
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr ""
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr ""
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr ""
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr ""
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr ""
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr ""
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr ""
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr ""
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr ""
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr ""
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr ""
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr ""
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr ""
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr ""
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr ""
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr ""
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr ""
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr ""
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr ""
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr ""
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr ""
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr ""
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr ""
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr ""
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr ""
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr ""
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr ""
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr ""
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr ""
-
-#: conf/global_settings.py:80
-msgid "Dutch"
-msgstr ""
-
-#: conf/global_settings.py:81
-msgid "Norwegian"
-msgstr ""
-
-#: conf/global_settings.py:82
-msgid "Norwegian Bokmal"
-msgstr ""
-
-#: conf/global_settings.py:83
-msgid "Norwegian Nynorsk"
-msgstr ""
-
-#: conf/global_settings.py:84
-msgid "Polish"
-msgstr ""
-
-#: conf/global_settings.py:85
-msgid "Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:86
-msgid "Brazilian Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:87
-msgid "Romanian"
-msgstr ""
-
-#: conf/global_settings.py:88
-msgid "Russian"
-msgstr ""
-
-#: conf/global_settings.py:89
-msgid "Slovak"
-msgstr ""
-
-#: conf/global_settings.py:90
-msgid "Slovenian"
-msgstr ""
-
-#: conf/global_settings.py:91
-msgid "Albanian"
-msgstr ""
-
-#: conf/global_settings.py:92
-msgid "Serbian"
-msgstr ""
-
-#: conf/global_settings.py:93
-msgid "Serbian Latin"
-msgstr ""
-
-#: conf/global_settings.py:94
-msgid "Swedish"
-msgstr ""
-
-#: conf/global_settings.py:95
-msgid "Tamil"
-msgstr ""
-
-#: conf/global_settings.py:96
-msgid "Telugu"
-msgstr ""
-
-#: conf/global_settings.py:97
-msgid "Thai"
-msgstr ""
-
-#: conf/global_settings.py:98
-msgid "Turkish"
-msgstr ""
-
-#: conf/global_settings.py:99
-msgid "Ukrainian"
-msgstr ""
-
-#: conf/global_settings.py:100
-msgid "Vietnamese"
-msgstr ""
-
-#: conf/global_settings.py:101
-msgid "Simplified Chinese"
-msgstr ""
-
-#: conf/global_settings.py:102
-msgid "Traditional Chinese"
-msgstr ""
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr ""
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
-msgid "Are you sure?"
-msgstr ""
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr ""
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr ""
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr ""
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr ""
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr ""
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr ""
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr ""
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr ""
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr ""
-
-#: contrib/admin/options.py:142 contrib/admin/options.py:157
-msgid "None"
-msgstr ""
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr ""
-
-#: contrib/admin/options.py:563 contrib/admin/options.py:573
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:573
-msgid "and"
-msgstr ""
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:581
-msgid "No fields changed."
-msgstr ""
-
-#: contrib/admin/options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
-
-#: contrib/admin/options.py:651 contrib/admin/options.py:684
-msgid "You may edit it again below."
-msgstr ""
-
-#: contrib/admin/options.py:661 contrib/admin/options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr ""
-
-#: contrib/admin/options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
-
-#: contrib/admin/options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-
-#: contrib/admin/options.py:744
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-
-#: contrib/admin/options.py:762
-msgid "No action selected."
-msgstr ""
-
-#: contrib/admin/options.py:842
-#, python-format
-msgid "Add %s"
-msgstr ""
-
-#: contrib/admin/options.py:868 contrib/admin/options.py:1080
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-
-#: contrib/admin/options.py:933
-#, python-format
-msgid "Change %s"
-msgstr ""
-
-#: contrib/admin/options.py:978
-msgid "Database error"
-msgstr ""
-
-#: contrib/admin/options.py:1014
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/options.py:1041
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/options.py:1046
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr ""
-
-#: contrib/admin/options.py:1093
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
-
-#: contrib/admin/options.py:1130
-#, python-format
-msgid "Change history: %s"
-msgstr ""
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr ""
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr ""
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr ""
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr ""
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr ""
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr ""
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr ""
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr ""
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr ""
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr ""
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr ""
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr ""
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr ""
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr ""
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr ""
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr ""
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr ""
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr ""
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr ""
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr ""
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr ""
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr ""
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr ""
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr ""
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr ""
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr ""
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr ""
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr ""
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr ""
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr ""
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr ""
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr ""
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr ""
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr ""
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr ""
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr ""
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr ""
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr ""
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr ""
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr ""
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr ""
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr ""
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr ""
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr ""
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr ""
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr ""
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr ""
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr ""
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr ""
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr ""
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr ""
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr ""
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr ""
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr ""
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr ""
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr ""
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr ""
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr ""
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr ""
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr ""
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr ""
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr ""
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr ""
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr ""
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr ""
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr ""
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr ""
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr ""
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr ""
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr ""
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr ""
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr ""
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr ""
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr ""
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr ""
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr ""
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr ""
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr ""
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr ""
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr ""
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr ""
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr ""
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr ""
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr ""
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr ""
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr ""
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr ""
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr ""
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr ""
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr ""
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr ""
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr ""
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr ""
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr ""
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr ""
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr ""
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"We apologise, but your form has expired. Please continue filling out the "
-"form from this page."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr ""
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr ""
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr ""
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr ""
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr ""
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr ""
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr ""
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr ""
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr ""
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr ""
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr ""
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr ""
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr ""
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr ""
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr ""
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr ""
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr ""
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr ""
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr ""
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr ""
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr ""
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr ""
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr ""
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr ""
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr ""
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr ""
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr ""
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr ""
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr ""
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr ""
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr ""
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr ""
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr ""
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr ""
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr ""
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr ""
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr ""
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr ""
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr ""
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr ""
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr ""
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr ""
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr ""
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr ""
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr ""
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr ""
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-msgstr[1] ""
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr ""
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr ""
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr ""
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr ""
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr ""
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr ""
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr ""
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr ""
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr ""
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr ""
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
-msgid "Enter a list of values."
-msgstr ""
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr ""
-
-#: forms/models.py:567
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr ""
-
-#: forms/models.py:571
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-
-#: forms/models.py:577
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-
-#: forms/models.py:585
-msgid "Please correct the duplicate values below."
-msgstr ""
-
-#: forms/models.py:860
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: forms/models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-
-#: forms/models.py:1008
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-
-#: forms/models.py:1010
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr ""
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr ""
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr ""
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr ""
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr ""
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr ""
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr ""
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr ""
-
-#: utils/dates.py:18
-msgid "January"
-msgstr ""
-
-#: utils/dates.py:18
-msgid "February"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr ""
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "August"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "September"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "October"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "November"
-msgstr ""
-
-#: utils/dates.py:20
-msgid "December"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "may"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr ""
-
-#: utils/text.py:130
-msgid "or"
-msgstr ""
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr ""
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr ""
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr ""
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr ""
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr ""
diff --git a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index de52e2b..0000000
--- a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 52d3bc7..0000000
--- a/parts/django/django/conf/locale/en_GB/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,114 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-02 22:36-0700\n"
-"PO-Revision-Date: 2010-03-25 08:00+1000\n"
-"Last-Translator: Simon Meers <DrMeers@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr ""
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr ""
diff --git a/parts/django/django/conf/locale/en_GB/__init__.py b/parts/django/django/conf/locale/en_GB/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/en_GB/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/en_GB/formats.py b/parts/django/django/conf/locale/en_GB/formats.py
deleted file mode 100644
index b099797..0000000
--- a/parts/django/django/conf/locale/en_GB/formats.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'N j, Y' # 'Oct. 25, 2006'
-TIME_FORMAT = 'P' # '2:30 pm'
-DATETIME_FORMAT = 'N j, Y, P' # 'Oct. 25, 2006, 2:30 pm'
-YEAR_MONTH_FORMAT = 'F Y' # 'October 2006'
-MONTH_DAY_FORMAT = 'F j' # 'October 25'
-SHORT_DATE_FORMAT = 'd/m/Y' # '25/10/2006'
-SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 pm'
-FIRST_DAY_OF_WEEK = 0 # Sunday
-DATE_INPUT_FORMATS = (
- '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
- '%Y-%m-%d', # '2006-10-25'
- # '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
- # '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- # '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
- # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
- '%d/%m/%Y %H:%M', # '25/10/2006 14:30'
- '%d/%m/%Y', # '25/10/2006'
- '%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
- '%d/%m/%y %H:%M', # '25/10/06 14:30'
- '%d/%m/%y', # '25/10/06'
-)
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-NUMBER_GROUPING = 3
-
diff --git a/parts/django/django/conf/locale/es/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/es/LC_MESSAGES/django.mo
deleted file mode 100644
index e456b62..0000000
--- a/parts/django/django/conf/locale/es/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/es/LC_MESSAGES/django.po b/parts/django/django/conf/locale/es/LC_MESSAGES/django.po
deleted file mode 100644
index 90136b6..0000000
--- a/parts/django/django/conf/locale/es/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5574 +0,0 @@
-# Spanish translation for the django project
-# Copyright (C) 2008, The Django Project
-# This file is distributed under the same license as the django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-08 09:11-0700\n"
-"PO-Revision-Date: 2009-11-30 11:31+0100\n"
-"Last-Translator: Django Spanish Team <django-cat@googlegroups.com>Language-"
-"Team: Django Spanish Team <django-cat@googlegroups.com>MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "árabe"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "búlgaro"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengalí"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosnio"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "catalán"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "checo"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "galés"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "danés"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "alemán"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "griego"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "inglés"
-
-#: conf/global_settings.py:55
-msgid "Spanish"
-msgstr "español"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "español de Argentina"
-
-#: conf/global_settings.py:57
-msgid "Estonian"
-msgstr "estonio"
-
-#: conf/global_settings.py:58
-msgid "Basque"
-msgstr "vasco"
-
-#: conf/global_settings.py:59
-msgid "Persian"
-msgstr "persa"
-
-#: conf/global_settings.py:60
-msgid "Finnish"
-msgstr "finés"
-
-#: conf/global_settings.py:61
-msgid "French"
-msgstr "francés"
-
-#: conf/global_settings.py:62
-msgid "Frisian"
-msgstr ""
-
-#: conf/global_settings.py:63
-msgid "Irish"
-msgstr "irlandés"
-
-#: conf/global_settings.py:64
-msgid "Galician"
-msgstr "gallego"
-
-#: conf/global_settings.py:65
-msgid "Hebrew"
-msgstr "hebreo"
-
-#: conf/global_settings.py:66
-msgid "Hindi"
-msgstr "hindi"
-
-#: conf/global_settings.py:67
-msgid "Croatian"
-msgstr "croata"
-
-#: conf/global_settings.py:68
-msgid "Hungarian"
-msgstr "húngaro"
-
-#: conf/global_settings.py:69
-msgid "Icelandic"
-msgstr "islandés"
-
-#: conf/global_settings.py:70
-msgid "Italian"
-msgstr "italiano"
-
-#: conf/global_settings.py:71
-msgid "Japanese"
-msgstr "japonés"
-
-#: conf/global_settings.py:72
-msgid "Georgian"
-msgstr "georgiano"
-
-#: conf/global_settings.py:73
-msgid "Khmer"
-msgstr "khmer"
-
-#: conf/global_settings.py:74
-msgid "Kannada"
-msgstr "kannada"
-
-#: conf/global_settings.py:75
-msgid "Korean"
-msgstr "koreano"
-
-#: conf/global_settings.py:76
-msgid "Lithuanian"
-msgstr "lituano"
-
-#: conf/global_settings.py:77
-msgid "Latvian"
-msgstr "letón"
-
-#: conf/global_settings.py:78
-msgid "Macedonian"
-msgstr "macedonio"
-
-#: conf/global_settings.py:79
-msgid "Dutch"
-msgstr "holandés"
-
-#: conf/global_settings.py:80
-msgid "Norwegian"
-msgstr "noruego"
-
-#: conf/global_settings.py:81
-msgid "Polish"
-msgstr "polaco"
-
-#: conf/global_settings.py:82
-msgid "Portuguese"
-msgstr "portugués"
-
-#: conf/global_settings.py:83
-msgid "Brazilian Portuguese"
-msgstr "portugués de Brasil"
-
-#: conf/global_settings.py:84
-msgid "Romanian"
-msgstr "rumano"
-
-#: conf/global_settings.py:85
-msgid "Russian"
-msgstr "ruso"
-
-#: conf/global_settings.py:86
-msgid "Slovak"
-msgstr "eslovaco"
-
-#: conf/global_settings.py:87
-msgid "Slovenian"
-msgstr "esloveno"
-
-#: conf/global_settings.py:88
-msgid "Albanian"
-msgstr "albanés"
-
-#: conf/global_settings.py:89
-msgid "Serbian"
-msgstr "serbio"
-
-#: conf/global_settings.py:90
-#, fuzzy
-msgid "Serbian Latin"
-msgstr "serbio"
-
-#: conf/global_settings.py:91
-msgid "Swedish"
-msgstr "sueco"
-
-#: conf/global_settings.py:92
-msgid "Tamil"
-msgstr "tamil"
-
-#: conf/global_settings.py:93
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:94
-msgid "Thai"
-msgstr "tailandés"
-
-#: conf/global_settings.py:95
-msgid "Turkish"
-msgstr "turco"
-
-#: conf/global_settings.py:96
-msgid "Ukrainian"
-msgstr "ucraniano"
-
-#: conf/global_settings.py:97
-msgid "Vietnamese"
-msgstr "vietnamita"
-
-#: conf/global_settings.py:98
-msgid "Simplified Chinese"
-msgstr "chino simplificado"
-
-#: conf/global_settings.py:99
-msgid "Traditional Chinese"
-msgstr "chino tradicional"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Eliminado/s %(count)d %(items)s satisfactoriamente."
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1101
-msgid "Are you sure?"
-msgstr "¿Está seguro?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Eliminar %(verbose_name_plural)s seleccionado/s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Por %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Todo"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Cualquier fecha"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Hoy"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Últimos 7 días"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Este mes"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Este año"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
-msgid "Yes"
-msgstr "Sí"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
-msgid "No"
-msgstr "No"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:470
-msgid "Unknown"
-msgstr "Desconocido"
-
-#: contrib/admin/helpers.py:19
-msgid "Action:"
-msgstr "Acción:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "hora de acción"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id de objeto"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "repr de objeto"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "marca de acción"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "mensaje de cambio"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "entrada de registro"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "entradas de registro"
-
-#: contrib/admin/options.py:139 contrib/admin/options.py:154
-msgid "None"
-msgstr "Ninguno"
-
-#: contrib/admin/options.py:558
-#, python-format
-msgid "Changed %s."
-msgstr "Modificado/a %s."
-
-#: contrib/admin/options.py:558 contrib/admin/options.py:568
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:802
-#: forms/models.py:553
-msgid "and"
-msgstr "y"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Añadido/a \"%(object)s\" %(name)s."
-
-#: contrib/admin/options.py:567
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Modificados %(list)s para \"%(object)s\" %(name)s."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Eliminado/a \"%(object)s\" %(name)s."
-
-#: contrib/admin/options.py:576
-msgid "No fields changed."
-msgstr "No ha cambiado ningún campo."
-
-#: contrib/admin/options.py:642
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Se añadió con éxito el %(name)s \"%(obj)s\"."
-
-#: contrib/admin/options.py:646 contrib/admin/options.py:679
-msgid "You may edit it again below."
-msgstr "Puede editarlo de nuevo abajo."
-
-#: contrib/admin/options.py:656 contrib/admin/options.py:689
-#, python-format
-msgid "You may add another %s below."
-msgstr "Puede añadir otro %s abajo."
-
-#: contrib/admin/options.py:677
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Se modificó con éxito el %(name)s \"%(obj)s\"."
-
-#: contrib/admin/options.py:685
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Se añadió con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo."
-
-#: contrib/admin/options.py:743
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Se deben seleccionar elementos para poder realizar acciones sobre estos. No "
-"se han modificado elementos."
-
-#: contrib/admin/options.py:761
-msgid "No action selected."
-msgstr "No se seleccionó ninguna acción."
-
-#: contrib/admin/options.py:841
-#, python-format
-msgid "Add %s"
-msgstr "Añadir %s"
-
-#: contrib/admin/options.py:867 contrib/admin/options.py:1081
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "No existe ningún objeto %(name)s con la clave primaria %(key)r."
-
-#: contrib/admin/options.py:932
-#, python-format
-msgid "Change %s"
-msgstr "Modificar %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Error en la base de datos"
-
-#: contrib/admin/options.py:1013
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s fué modificado con éxito."
-msgstr[1] "%(count)s %(name)s fueron modificados con éxito."
-
-#: contrib/admin/options.py:1040
-#, python-format
-msgid "of %(count)d selected"
-msgid_plural "of %(count)d selected"
-msgstr[0] "de %(count)d seleccionado"
-msgstr[1] "de %(count)d seleccionados"
-
-#: contrib/admin/options.py:1042
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s seleccionado"
-msgstr[1] "Todos %(total_count)s seleccionados"
-
-#: contrib/admin/options.py:1094
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"."
-
-#: contrib/admin/options.py:1131
-#, python-format
-msgid "Change history: %s"
-msgstr "Histórico de modificaciones: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Por favor, introduzca un nombre de usuario y contraseña correctos. Note que "
-"ambos campos son sensibles a mayúsculas/minúsculas."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Por favor, inicie sesión de nuevo, ya que su sesión ha caducado."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Parece que su navegador no está configurado para aceptar cookies. "
-"Actívelas , recargue esta página, e inténtelo de nuevo."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Los nombres de usuario no pueden contener el carácter '@'."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Su dirección de correo no es su nombre de usuario. Pruebe con '%s' en su "
-"lugar."
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Sitio administrativo"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Iniciar sesión"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "Administración de %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Fecha:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Hora:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Actualmente:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Modificar:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Buscar"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Añadir otro"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Página no encontrada"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Lo sentimos, pero no se encuentra la página solicitada."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:39
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Inicio"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Error del servidor"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Error del servidor (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Error de servidor <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Ha ocurrido un error. Se ha informado a los administradores del sitio "
-"mediante correo electrónico y debería arreglarse en breve. Gracias por su "
-"paciencia."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Ejecutar la acción seleccionada"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Ir"
-
-#: contrib/admin/templates/admin/actions.html:10
-msgid "Click here to select the objects across all pages"
-msgstr "Pulse aquí para seleccionar los objetos a través de todas las páginas"
-
-#: contrib/admin/templates/admin/actions.html:10
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Seleccionar todos los %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:12
-msgid "Clear selection"
-msgstr "Limpiar selección"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr "Bienvenido/a,"
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentación"
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Cambiar contraseña"
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Terminar sesión"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Sitio de administración de Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administración de Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Añadir"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Histórico"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Ver en el sitio"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:68
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Por favor, corrija el siguiente error."
-msgstr[1] "Por favor, corrija los siguientes errores."
-
-#: contrib/admin/templates/admin/change_list.html:60
-#, python-format
-msgid "Add %(name)s"
-msgstr "Añadir %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:79
-msgid "Filter"
-msgstr "Filtro"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:294
-msgid "Delete"
-msgstr "Eliminar"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación "
-"de objetos relacionados, pero su cuenta no tiene permiso para borrar los "
-"siguientes tipos de objetos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"¿Está seguro de que quiere borrar los %(object_name)s \"%(escaped_object)s"
-"\"? Se borrarán los siguientes objetos relacionados:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Sí, estoy seguro"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Eliminar múltiples objetos."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Eliminar el %(object_name)s provocaría la eliminación de objetos "
-"relacionados, pero su cuenta no tiene permiso para borrar los siguientes "
-"tipos de objetos:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"¿Está seguro de que quiere eliminar los %(object_name)s seleccionados? Los "
-"siguientes objetos y sus elementos relacionados serán eliminados:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Por %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelos disponibles en la aplicación %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Modificar"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "No tiene permiso para editar nada."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Acciones recientes"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mis acciones"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ninguno disponible"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Contenido desconocido"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Algo va mal con la instalación de la base de datos. Asegúrese que las tablas "
-"necesarias han sido creadas, y que la base de datos puede ser leída por el "
-"usuario apropiado."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Usuario:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Contraseña:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Fecha/hora"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Usuario"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Acción"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Este objeto no tiene histórico de cambios. Probablemente no fue añadido "
-"usando este sitio de administración."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Mostrar todo"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Grabar"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Buscar"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultado"
-msgstr[1] "%(counter)s resultados"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s total"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Grabar como nuevo"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Grabar y añadir otro"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Grabar y continuar editando"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Primero introduzca un nombre de usuario y una contraseña. Luego podrá editar "
-"el resto de opciones del usuario."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-"Introduzca una nueva contraseña para el usuario <strong>%(username)s</"
-"strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Contraseña"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Contraseña (de nuevo)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Introduzca la misma contraseña que arriba, para verificación."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:53
-#: contrib/admin/templates/admin/edit_inline/tabular.html:99
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Agregar otro %(verbose_name)s."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:56
-#: contrib/admin/templates/admin/edit_inline/tabular.html:102
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Eliminar"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Eliminar?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Gracias por el tiempo que ha dedicado hoy al sitio web."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Iniciar sesión de nuevo"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Cambio de contraseña"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Cambio de contraseña exitoso"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Su contraseña ha sido cambiada."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Por favor, introduzca su contraseña antigua, por seguridad, y después "
-"introduzca la nueva contraseña dos veces para verificar que la ha escrito "
-"correctamente."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Contraseña antigua"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Contraseña nueva"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Cambiar mi contraseña"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Restablecer contraseña"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Restablecimiento de contraseña completado"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-"Su contraseña ha sido establecida. Ahora puede seguir adelante e iniciar "
-"sesión."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Confirmación de restablecimiento de contraseña"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Introduzca una nueva contraseña"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Por favor, introduzca su contraseña nueva dos veces para verificar que la ha "
-"escrito correctamente."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Contraseña nueva:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirme contraseña:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Restablecimiento de contraseña fallido"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"El enlace de restablecimiento de contraseña era invalido, seguramente por "
-"haberse utilizado previamente. Por favor, solicite un nuevo restablecimiento "
-"de contraseña."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Restablecimiento de contraseña exitoso"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Le hemos enviado un correo electrónico con instrucciones para cambiar su "
-"contraseña a la dirección que nos ha suministrado. Debería recibirlo en "
-"breve."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Está recibiendo este mensaje debido a que solicitó restablecer la contraseña"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "para su cuenta de usuario en %(site_name)s."
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Por favor, vaya a la página siguiente y escoja una nueva contraseña."
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Su nombre de usuario, en caso de haberlo olvidado:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "¡Gracias por usar nuestro sitio!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "El equipo de %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"¿Ha olvidado su contraseña? Introduzca su dirección de correo electrónico, y "
-"le enviaremos instrucciones para cambiarla por una nueva."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Dirección de correo electrónico:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Restablecer mi contraseña"
-
-#: contrib/admin/templatetags/admin_list.py:240
-msgid "All dates"
-msgstr "Todas las fechas"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Escoja %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Escoja %s a modificar"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "sitio"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "plantilla"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "etiqueta:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtro:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "vista:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplicación %r no encontrada"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-"El modelo %(model_name)r no se ha encontrado en la aplicación %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "el objeto relacionado `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modelo:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "los objetos relacionados `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "todo %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "número de %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Campos en %s objetos"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s no parece ser un objeto urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklets de documentación"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Para instalar bookmarklets, arrastre el enlace a su barra\n"
-"de favoritos, o pulse con el botón derecho el enlace y añádalo a sus "
-"favoritos.\n"
-"Ahora puede escoger el bookmarklet desde cualquier página del sitio.\n"
-"Observe que algunos de estos bookmarklets precisan que esté viendo\n"
-"el sitio desde un ordenador señalado como \"interno\" (hable\n"
-"con su administrador de sistemas si no está seguro si el suyo lo es).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentación para esta página"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Lleva desde cualquier página a la documentación de la vista que la genera."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Mostrar ID de objeto"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Muestra el tipo de contenido e ID único de las páginas que representan un "
-"simple objeto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Editar este objeto (ventana actual)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Lleva a la página de administración de páginas que representan un único "
-"objeto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Editar este objeto (nueva ventana)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"Como antes, pero abre la página de administración en una nueva ventana."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Información personal"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Permisos"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Fechas importantes"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupos"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "La contraseña se ha cambiado con éxito."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Cambiar contraseña: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Nombre de usuario"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Requerido. 30 caracteres o menos. Letras, dígitos y @/./+/-/_ solamente."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Este valor puede contener sólo letras, números y @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Contraseña (confirmación)"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Ya existe un usuario con este nombre."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Las dos contraseñas no coinciden."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Esta cuenta está inactiva."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Su navegador no parece tener las cookies habilitadas. Las cookies se "
-"necesitan para poder ingresar."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Correo electrónico"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Esta dirección de correo electrónico no tiene una cuenta de usuario "
-"asociada. ¿Está seguro de que se ha registrado?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Contraseña restablecida en %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Contraseña nueva (confirmación):"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"Su contraseña antigua es incorrecta. Por favor, vuelva a introducirla "
-"correctamente."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nombre"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "nombre en código"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "permiso"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "permisos"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupo"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupos"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "nombre de usuario"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Requerido. 30 caracteres o menos. Letras, números y @/./+/-/_"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "nombre propio"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "apellidos"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "dirección de correo electrónico"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "contraseña"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Use'[algo]$[sal]$[hash hexadecimal]' o use <a href=\"password/\">el "
-"formulario para cambiar la contraseña</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "es staff"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Indica si el usuario puede entrar en este sitio de administración."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "activo"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Indica si el usuario puede ser tratado como activo. Desmarque esta opción en "
-"lugar de borrar la cuenta."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "es superusuario"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Indica que este usuario tiene todos los permisos sin asignárselos "
-"explícitamente."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "último inicio de sesión"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "fecha de alta"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Además de los permisos asignados manualmente, este usuario también tendrá "
-"todos los permisos de los grupos en los que esté."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "permisos de usuario"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "usuario"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "usuarios"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "mensaje"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Sesión terminada"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:416
-msgid "Enter a valid e-mail address."
-msgstr "Introduzca una dirección de correo electrónico válida."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "contenido"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "metadatos"
-
-#: contrib/comments/admin.py:39
-msgid "flagged"
-msgstr "marcado"
-
-#: contrib/comments/admin.py:40
-msgid "Flag selected comments"
-msgstr "Marcar los comentarios seleccionados"
-
-#: contrib/comments/admin.py:43
-msgid "approved"
-msgstr "aprobado"
-
-#: contrib/comments/admin.py:44
-msgid "Approve selected comments"
-msgstr "aprobar los comentarios seleccionados"
-
-#: contrib/comments/admin.py:47
-msgid "removed"
-msgstr "eliminado"
-
-#: contrib/comments/admin.py:48
-msgid "Remove selected comments"
-msgstr "Eliminar los comentarios seleccionados"
-
-#: contrib/comments/admin.py:60
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 comentarios ha sido %(action)s satisfactoriamente."
-msgstr[1] "%(count)s comentarios han sido %(action)s satisfactoriamente."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "comentarios de %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Últimos comentarios en %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nombre"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "dirección de correo electrónico"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1120
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Comentario"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "¡Cuide su vocabulario! Aquí no admitimos la palabra %s."
-msgstr[1] "¡Cuide su vocabulario! Aquí no admitimos las palabras %s."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Si introduce algo en este campo su comentario será tratado como spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tipo de contenido"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID de objeto"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nombre del usuario"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "dirección de correo electrónico del usuario"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL del usuario"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "comentario"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "fecha/hora de envío"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:916
-msgid "IP address"
-msgstr "Dirección IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "es público"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Desmarque esta casilla para hacer desaparecer el comentario del sitio web de "
-"forma efectiva."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "está eliminado"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Marque esta opción si el comentario es inapropiado. En su lugar se mostrará "
-"el mensaje \"Este comentario ha sido eliminado\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "comentarios"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Este comentario ha sido enviado por un usuario autentificado: de modo que su "
-"nombre no es modificable."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Este comentario ha sido colocado por un usuario autentificado: de modo que "
-"su dirección de correo electrónico no es modificable."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Enviado por %(user)s en %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "marcar"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "fecha"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "marca de comentario"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "marcas de comentario"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Aprobar un comentario"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Realmente desea hacer este comentario público?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Aprobar"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Gracias por aprobar"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Gracias por tomarse el tiempo para mejorar la calidad del debate en nuestro "
-"sitio"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Eliminar un comentario"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "¿Realmente desea eliminar este comentario?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Gracias por eliminar"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Marcar este comentario"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "¿Realmente desea marcar este comentario?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Marcar"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Graciar por marcar"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Enviar"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Previsualizar"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Gracias por comentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Gracias por su comentario"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Previsualizar su comentario"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Por favor, corrija el siguiente error."
-msgstr[1] "Por favor, corrija los siguientes errores."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Envie su comentario"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "o haga cambios"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "nombre de la clase modelo de python"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipos de contenido"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Ejemplo: '/about/contact/'. Asegúrese de que pone barras al principio y al "
-"final."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "Este valor debe contener sólo letras, números, guiones bajos y barras."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opciones avanzadas"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "título"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "contenido"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "habilitar comentarios"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nombre de plantilla"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Ejemplo: 'flatpages/contact_page.html'. Si no es proporcionado, el sistema "
-"usará 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "debe estar registrado"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "página estática"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "páginas estáticas"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Lo sentimos, pero su formulario ha expirado. Por favor, continue rellenando "
-"el formulario en esta página."
-
-#: contrib/gis/db/models/fields.py:50
-#, fuzzy
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"El campo GIS base -- se relaciona con el tipo Geometry de la especificación "
-"de OpenGIS."
-
-#: contrib/gis/db/models/fields.py:269
-msgid "Point"
-msgstr "Punto"
-
-#: contrib/gis/db/models/fields.py:273
-msgid "Line string"
-msgstr "Cadena de línea"
-
-#: contrib/gis/db/models/fields.py:277
-msgid "Polygon"
-msgstr "Polígono"
-
-#: contrib/gis/db/models/fields.py:281
-msgid "Multi-point"
-msgstr "Punto múltiple"
-
-#: contrib/gis/db/models/fields.py:285
-msgid "Multi-line string"
-msgstr "Cadena de línea múltiple"
-
-#: contrib/gis/db/models/fields.py:289
-msgid "Multi polygon"
-msgstr "Polígono múltiple"
-
-#: contrib/gis/db/models/fields.py:293
-msgid "Geometry collection"
-msgstr "Colección de \"Geometry\""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "No se indico ningún valor de geometría."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Valor de geometría inválido."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tipo de geometría inválido."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Ocurrió un error al transformar la geometria al SRID de la geometria del "
-"campo de formulario."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f millón"
-msgstr[1] "%(value).1f millón"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f mil millones"
-msgstr[1] "%(value).1f mil millones"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billón"
-msgstr[1] "%(value).1f billón"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "uno"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dos"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tres"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "cuatro"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cinco"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seis"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "siete"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "ocho"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "nueve"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "hoy"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "mañana"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "ayer"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Introduzca un código postal en el formato NNNN or ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Este campo sólo acepta números."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Este campo necesita 7 u 8 dígitos."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Introduzca un CUIT válido en el formato XX-XXXXXXXX-X o XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT inválido."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Australia Baja"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Australia Alta"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Viena"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Introduzca un código postal en el formato XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Introduzca un número de la Seguridad Social Austriaca válido en el formato "
-"XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Introduzca un código postal de 4 dígitos."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Introduzca un código postal en el formato XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Los números de teléfono deben tener el formato XXX-XXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Seleccione un estado brasileño válido. Este estado no es uno de los estados "
-"disponibles."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Número CPF inválido."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Este campo necesita un máximo de 11 dígitos o 14 caracteres."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Número CNPJ inválido."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Este campo necesita 14 dígitos como mínimo"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Introduzca un código postal en el formato XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Introduzca un Número del Seguro Social de Canadá válido en el formato XXX-"
-"XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Introduzca un número de identificación o pasaporte suizos válidos en el "
-"formato X1234567<0 o 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Introduzca un RUT chileno válido."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Introduzca un RUT chileno válido. El formato es XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "El RUT chileno no es válido."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Región Bohemia Central"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Región Bohemia Sur"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Región Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Región Carlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Región Usti"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Región Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Región Hradec"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Región Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Región Vysocina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Región Moravia Sur"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Región Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Región Zlin"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Región Moravia-Silesiana"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Introduzca un código postal en el formato XXXXX o XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"Introduzca un número de nacimiento en el formato XXXXXX/XXXX o XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"El parámetro opcional 'Género' es inválido, los valores válidos son 'f' y 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Introduzca un número de nacimiento válido."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Introduzca un número IC válido."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlín"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburgo"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lower Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "North Rhine-Westphalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Introduzca un código postal en el formato XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Introduzca un número de tarjeta de identidad de Alemania válida en el "
-"formato XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Islas Baleares"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "La Coruña"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Gerona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúzcoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lérida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Orense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Vizcaya"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalucía"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragón"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principado de Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Islas Baleares"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "País Vasco"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canarias"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilla-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilla y León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Cataluña"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Región de Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Comunidad Foral de Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Comunidad Valenciana"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Introduzca un código postal en el rango y formato 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Introduzca un número de teléfono válido en el formato 6XXXXXXXX, 8XXXXXXXX o "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Por favor introduzca un NIF, NIE o CIF válido."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Por favor, introduzca un NIF o NIE válido."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "El NIF es incorrecto."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "El NIE es incorrecto."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "El CIF es incorrecto."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Introduzca un número de cuenta bancaria en el formato XXXX-XXXX-XX-"
-"XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "El número de cuenta bancaria es incorrecto."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Introduzca un número de seguro social finlandés válido."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Los números de teléfono deben tener el formato 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Introduzca un código postal válido"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Introduzca un número de teléfono válido"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Introduzca un número de placa vehicular válido"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Introduzca un número NIK/KTP válido."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jacarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "de Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "sesión"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Introduzca un código postal en el formato XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Introduzca un número de identificación de Islandia válido. El formato es "
-"XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "El número de identificación de Islandia no es válido."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Introduzca un código postal válido."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Introduzca un número de Seguro Social válido."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Introduzca un número VAT válido."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Introduzca un código postal en el formato XXXXX o XXXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Introduzca un ID Civil kuwaití válido"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Introduzca un código postal válido"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Introduzca un número SoFi válido"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Introduzca un número de seguro social de Noruega válido."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Este campo necesita 8 dígitos."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Este campo necesita 11 dígitos."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Número de Identificación Nacional consiste en 11 dígitos"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "El Número de Identificación Nacional es incorrecto."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Introduzca un número de impuesto (NIP) en el formato XXX-XXX-XX-XX o XX-XX-"
-"XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "El Número de Identificación Tributaria (NIP) es incorrecto."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"El Número Nacional de Registro de Negocios (REGON) consiste en 9 o 14 "
-"dígitos."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "El Número Nacional de Registro de Negocios (REGON) es incorrecto."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Introduzca un código postal en el formato XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Introduzca un código postal en el formato XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Los números de teléfono deben ser de 9 dígitos, o comenzar con + o 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Introduzca un CIF válido."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Introduzca un CNP válido."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Introduzca un IBAN válido en el formato ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Los números de teléfono deben tener el formato XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Introduzca un código postal válido en el formato XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Introduzca un número de organización sueca válido."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Introduzca un número de identidad personal sueco válido."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "No se admiten número de Co-ordinación."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Introduzca un código postal en el formato XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Estocolmo"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Región de Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Región de Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Región de Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Región de Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Región de Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Región de Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Región de Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Región de Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Región de Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Región de Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Región de Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Región de Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Región de Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Región de Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Región de Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Región de Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Región de Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Región de Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Región de Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Región de Presov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Región de Trencin"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Región de Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Región de Zilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Introduzca un código postal válido."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Londres (área metropolitana)"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Manchester (área metropolitana)"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Condado de Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Condado de Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Condado de Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Condado de Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Condado de Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Condado de Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Inglaterra"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlanda del Norte"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Escocia"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Gales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Introduzca un código postal en el formato XXXXX o XXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Los números de teléfono deben tener el formato XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Introduzca un Número Seguro Social de EEUU válido en el formato XXX-XX-XXXX"
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Introduzca un estado o territorio de los EEUU."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado de los EEUU (dos letras mayúsculas)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Número de teléfono"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Introduzca un número de CI válido en el formato X.XXX.XXX-X,XXXXXXX-X o XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Introduzca un número CI válido."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Introduzca un ID surafricano válido"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Introduzca un código postal surafricano válido"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "mensaje vago"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirigir desde"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/"
-"events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirigir a"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Esto puede ser bien una ruta absoluta (como antes) o una URL completa que "
-"empiece con 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redirección"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redirecciones"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "clave de sesión"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "datos de sesión"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "fecha de caducidad"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesión"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesiones"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nombre de dominio"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "nombre para mostrar"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sitios"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Introduzca un valor correcto."
-
-#: core/validators.py:87 forms/fields.py:517
-msgid "Enter a valid URL."
-msgstr "Introduzca una URL válida."
-
-#: core/validators.py:89 forms/fields.py:518
-msgid "This URL appears to be a broken link."
-msgstr "La URL parece ser un enlace roto."
-
-#: core/validators.py:123 forms/fields.py:861
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Introduzca un 'slug' válido, consistente en letras, números, guiones bajos o "
-"medios."
-
-#: core/validators.py:126 forms/fields.py:854
-msgid "Enter a valid IPv4 address."
-msgstr "Introduzca una dirección IPv4 válida."
-
-#: core/validators.py:129 db/models/fields/__init__.py:598
-msgid "Enter only digits separated by commas."
-msgstr "Introduzca sólo dígitos separados por comas."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Asegúrese de que este valor es %(limit_value)s (actualmente es "
-"%(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:196 forms/fields.py:246
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Asegúrese de que este valor es menor o igual a %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:197 forms/fields.py:247
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Asegúrese de que este valor es mayor o igual a %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Asegúrese de que este valor tiene al menos %(limit_value)d caracteres ("
-"actualmente tiene %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Asegúrese de que este valor tiene a lo más %(limit_value)d caracteres ("
-"actualmente tiene %(show_value)d)."
-
-#: db/models/base.py:780
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "El campo %(field_name)s debe ser único para %(lookup)s %(date_field)s"
-
-#: db/models/base.py:795 db/models/base.py:803
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Ya existe %(model_name)s con este %(field_label)s."
-
-#: db/models/fields/__init__.py:62
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "El valor %r no es una opción válida."
-
-#: db/models/fields/__init__.py:63
-msgid "This field cannot be null."
-msgstr "Este campo no puede estar vacío."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be blank."
-msgstr "Este campo no puede estar vacío."
-
-#: db/models/fields/__init__.py:69
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Campo de tipo: %(field_type)s"
-
-#: db/models/fields/__init__.py:477 db/models/fields/__init__.py:878
-#: db/models/fields/__init__.py:980 db/models/fields/__init__.py:991
-#: db/models/fields/__init__.py:1018
-msgid "Integer"
-msgstr "Entero"
-
-#: db/models/fields/__init__.py:481 db/models/fields/__init__.py:876
-msgid "This value must be an integer."
-msgstr "Este valor debe ser un entero."
-
-#: db/models/fields/__init__.py:516
-msgid "This value must be either True or False."
-msgstr "Este valor debe ser Verdadero o Falso."
-
-#: db/models/fields/__init__.py:518
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (Verdadero o Falso)"
-
-#: db/models/fields/__init__.py:565 db/models/fields/__init__.py:1001
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Cadena (máximo %(max_length)s)"
-
-#: db/models/fields/__init__.py:593
-msgid "Comma-separated integers"
-msgstr "Enteros separados por comas"
-
-#: db/models/fields/__init__.py:607
-msgid "Date (without time)"
-msgstr "Fecha (sin hora)"
-
-#: db/models/fields/__init__.py:611
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
-
-#: db/models/fields/__init__.py:612
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Fecha no válida: %s"
-
-#: db/models/fields/__init__.py:693
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Introduzca una fecha/hora válida en formato AAAA-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:695
-msgid "Date (with time)"
-msgstr "Fecha (con hora)"
-
-#: db/models/fields/__init__.py:761
-msgid "This value must be a decimal number."
-msgstr "Este valor debe ser un entero."
-
-#: db/models/fields/__init__.py:763
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: db/models/fields/__init__.py:818
-msgid "E-mail address"
-msgstr "Dirección de correo electrónico"
-
-#: db/models/fields/__init__.py:825 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Ruta de fichero"
-
-#: db/models/fields/__init__.py:848
-msgid "This value must be a float."
-msgstr "Este valor debe ser un número con coma flotante."
-
-#: db/models/fields/__init__.py:850
-msgid "Floating point number"
-msgstr "Número en coma flotante"
-
-#: db/models/fields/__init__.py:903
-msgid "Big (8 byte) integer"
-msgstr "Entero grande (8 bytes)"
-
-#: db/models/fields/__init__.py:932
-msgid "This value must be either None, True or False."
-msgstr "Este valor debe ser Verdadero, Falso o Ninguno."
-
-#: db/models/fields/__init__.py:934
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (Verdadero, Falso o Nulo)"
-
-#: db/models/fields/__init__.py:1024
-msgid "Text"
-msgstr "Texto"
-
-#: db/models/fields/__init__.py:1040
-msgid "Time"
-msgstr "Hora"
-
-#: db/models/fields/__init__.py:1044
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Introduzca una hora válida en formato HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1128
-msgid "XML text"
-msgstr "Texto XML"
-
-#: db/models/fields/related.py:755
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "No existe ningún objeto %(model)s con la clave primaria %(pk)r."
-
-#: db/models/fields/related.py:757
-msgid "Foreign Key (type determined by related field)"
-msgstr "Llave foránea (tipo determinado por el campo relacionado)"
-
-#: db/models/fields/related.py:879
-msgid "One-to-one relationship"
-msgstr "Relación uno-a-uno"
-
-#: db/models/fields/related.py:939
-msgid "Many-to-many relationship"
-msgstr "Relación muchos-a-muchos"
-
-#: db/models/fields/related.py:959
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Mantenga presionado \"Control\", o \"Command\" en un Mac, para seleccionar "
-"más de una opción."
-
-#: db/models/fields/related.py:1020
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Por favor, introduzca IDs de %(self)s válidos. El valor %(value)r no es "
-"válido."
-msgstr[1] ""
-"Por favor, introduzca IDs de %(self)s válidos. Los valores %(value)r no son "
-"válidos."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Este campo es obligatorio."
-
-#: forms/fields.py:195
-msgid "Enter a whole number."
-msgstr "Introduzca un número entero."
-
-#: forms/fields.py:225 forms/fields.py:245
-msgid "Enter a number."
-msgstr "Introduzca un número."
-
-#: forms/fields.py:248
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Asegúrese de que no hay más de %s dígitos en total."
-
-#: forms/fields.py:249
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Asegúrese de que no hay más de %s decimales."
-
-#: forms/fields.py:250
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Asegúrese de que no hay más de %s dígitos antes de la coma decimal."
-
-#: forms/fields.py:311 forms/fields.py:826
-msgid "Enter a valid date."
-msgstr "Introduzca una fecha válida."
-
-#: forms/fields.py:339 forms/fields.py:827
-msgid "Enter a valid time."
-msgstr "Introduzca una hora válida."
-
-#: forms/fields.py:365
-msgid "Enter a valid date/time."
-msgstr "Introduzca una fecha/hora válida."
-
-#: forms/fields.py:423
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"No se ha enviado ningún fichero. Compruebe el tipo de codificación en el "
-"formulario."
-
-#: forms/fields.py:424
-msgid "No file was submitted."
-msgstr "No se ha enviado ningún fichero"
-
-#: forms/fields.py:425
-msgid "The submitted file is empty."
-msgstr "El fichero enviado está vacío."
-
-#: forms/fields.py:426
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Asegúrese de que su texto tiene no más de %(max)d caracteres (actualmente "
-"tiene %(length)d)."
-
-#: forms/fields.py:461
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se "
-"trataba de una imagen corrupta."
-
-#: forms/fields.py:584 forms/fields.py:659
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Escoja una opción válida. %(value)s no es una de las opciones disponibles."
-
-#: forms/fields.py:660 forms/fields.py:722 forms/models.py:980
-msgid "Enter a list of values."
-msgstr "Introduzca una lista de valores."
-
-#: forms/formsets.py:290 forms/formsets.py:292
-msgid "Order"
-msgstr "Orden"
-
-#: forms/models.py:547
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Por favor, corrija el dato duplicado para %(field)s."
-
-#: forms/models.py:551
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Por favor corriga el dato duplicado para %(field)s, el cual debe ser único."
-
-#: forms/models.py:557
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Por favor corriga los datos duplicados para %(field_name)s el cual debe ser "
-"único para %(lookup)s en %(date_field)s."
-
-#: forms/models.py:565
-msgid "Please correct the duplicate values below."
-msgstr "Por favor, corrija los valores duplicados abajo."
-
-#: forms/models.py:839
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"La clave foránea en linea no coincide con la clave primaria de la instancia "
-"padre."
-
-#: forms/models.py:905
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Escoja una opción válida. Esa opción no está entre las disponibles."
-
-#: forms/models.py:981
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Escoja una opción válida; '%s' no es una de las opciones disponibles."
-
-#: forms/models.py:983
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" no es un valor válido para una clave primaria."
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "sí,no,tal vez"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "media noche"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "medio día"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "lunes"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "martes"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "miércoles"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "jueves"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "viernes"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "sábado"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "domingo"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "lun"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "mar"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "mié"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "jue"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "vie"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "sáb"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "dom"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "enero"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "febrero"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "marzo"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "abril"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "mayo"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "junio"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "julio"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "agosto"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "septiembre"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "octubre"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "noviembre"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "diciembre"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "ene"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "abr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "may"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ago"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "oct"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dic"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "ene."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ago."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "oct."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dic."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "o"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "año"
-msgstr[1] "años"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mes"
-msgstr[1] "meses"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "semana"
-msgstr[1] "semanas"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "día"
-msgstr[1] "días"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "horas"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minutos"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutos"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:512
-msgid "DATE_FORMAT"
-msgstr "j N Y"
-
-#: utils/translation/trans_real.py:513
-msgid "DATETIME_FORMAT"
-msgstr "j N Y P"
-
-#: utils/translation/trans_real.py:514
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:535
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:536
-msgid "MONTH_DAY_FORMAT"
-msgstr "j \\de F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "El/La %(verbose_name)s se ha creado exitosamente."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Se actualizó con éxito el %(verbose_name)s."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "El/La %(verbose_name)s ha sido borrado."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Uno o más %(fieldname)s en %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Uno o más %(fieldname)s en %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Contraseña antigua:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Relación con el modelo padre"
-
-#~ msgid "Add user"
-#~ msgstr "Añadir usuario"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Cola de moderación de comentarios"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "No hay comentarios por moderar"
-
-#~ msgid "Email"
-#~ msgstr "Correo electrónico"
-
-#~ msgid "Authenticated?"
-#~ msgstr "¿Autentificado?"
-
-#~ msgid "IP Address"
-#~ msgstr "Dirección IP"
-
-#~ msgid "Date posted"
-#~ msgstr "Fecha de envío"
-
-#~ msgid "yes"
-#~ msgstr "sí"
-
-#~ msgid "no"
-#~ msgstr "no"
-
-#~ msgid "verbose_name"
-#~ msgid_plural "verbose_name_plural"
-#~ msgstr[0] "verbose_name"
-#~ msgstr[1] "verbose_name_plural"
-
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "j M Y P"
-
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "Su nueva contraseña es: %(new_password)s"
-
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr "Puede cambiarla accediendo a esta página:"
-
-#~ msgid "headline"
-#~ msgstr "encabezado"
-
-#~ msgid "rating #1"
-#~ msgstr "puntuación 1"
-
-#~ msgid "rating #2"
-#~ msgstr "puntuación 2"
-
-#~ msgid "rating #3"
-#~ msgstr "puntuación 3"
-
-#~ msgid "rating #4"
-#~ msgstr "puntuación 4"
-
-#~ msgid "rating #5"
-#~ msgstr "puntuación 5"
-
-#~ msgid "rating #6"
-#~ msgstr "puntuación 6"
-
-#~ msgid "rating #7"
-#~ msgstr "puntuación 7"
-
-#~ msgid "rating #8"
-#~ msgstr "puntuación 8"
-
-#~ msgid "is valid rating"
-#~ msgstr "puntuación válida"
-
-#~ msgid "Content object"
-#~ msgstr "Objeto contenido"
-
-#~ msgid "ip address"
-#~ msgstr "dirección ip"
-
-#~ msgid "approved by staff"
-#~ msgstr "aprobado por el staff"
-
-#~ msgid "free comments"
-#~ msgstr "comentarios libres"
-
-#~ msgid "score"
-#~ msgstr "puntuación"
-
-#~ msgid "score date"
-#~ msgstr "fecha de la puntuación"
-
-#~ msgid "karma score"
-#~ msgstr "punto karma"
-
-#~ msgid "karma scores"
-#~ msgstr "puntos karma"
-
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "puntuado %(score)d por %(user)s"
-
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Este comentario fue marcado por %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "flag date"
-#~ msgstr "fecha de la marca"
-
-#~ msgid "user flag"
-#~ msgstr "marca de usuario"
-
-#~ msgid "user flags"
-#~ msgstr "marcas de usuario"
-
-#~ msgid "Flag by %r"
-#~ msgstr "Marca de %r"
-
-#~ msgid "deletion date"
-#~ msgstr "fecha de eliminación"
-
-#~ msgid "moderator deletions"
-#~ msgstr "eliminaciones del moderador"
-
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Eliminación del moderador %r"
-
-#~ msgid "Forgotten your password?"
-#~ msgstr "¿Ha olvidado su contraseña?"
-
-#~ msgid "Ratings"
-#~ msgstr "Puntuaciones"
-
-#~ msgid "Required"
-#~ msgstr "Requerido"
-
-#~ msgid "Optional"
-#~ msgstr "Opcional"
-
-#~ msgid "Post a photo"
-#~ msgstr "Publica una fotografía"
-
-#~ msgid "Your name:"
-#~ msgstr "Su nombre:"
-
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr "Se precisa esta puntuación porque ha introducido al menos otra más."
-
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "Este comentario lo envió un usuario que ha enviado menos de %(count)s "
-#~ "comentario:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[1] ""
-#~ "Este comentario lo envió un usuario que ha enviado menos de %(count)s "
-#~ "comentarios:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Sólo se admiten POSTs"
-
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "No se proporcionó uno o más de los siguientes campos requeridos"
-
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr ""
-#~ "Alguien manipuló el formulario de comentarios (violación de seguridad)"
-
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "El formulario de comentarios tiene un parámetro 'target' no válido (el ID "
-#~ "de objeto era inválido)"
-
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr ""
-#~ "El formulario de comentario no proporcionó 'previsualizar' ni 'enviar'"
-
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Los usuarios anónimos no pueden votar"
-
-#~ msgid "No voting for yourself"
-#~ msgstr "No puede votarse a sí mismo"
-
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "No se admiten letras mayúsculas."
-
-#~ msgid "Lowercase letters are not allowed here."
-#~ msgstr "No se admiten letras minúsculas."
-
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Introduzca direcciones de correo válidas separadas por comas."
-
-#~ msgid "Please enter a valid IP address."
-#~ msgstr "Por favor introduzca una dirección IP válida."
-
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "No se admiten valores vacíos."
-
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "No se admiten caracteres no numéricos."
-
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Este valor no puede comprender sólo dígitos."
-
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "Sólo se admiten caracteres alfabéticos."
-
-#~ msgid "The URL %s does not point to a valid image."
-#~ msgstr "La URL %s no apunta a una imagen válida."
-
-#~ msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-#~ msgstr ""
-#~ "Los números de teléfono deben guardar el formato XXX-XXX-XXXX. \"%s\" no "
-#~ "es válido."
-
-#~ msgid "The URL %s does not point to a valid QuickTime video."
-#~ msgstr "La URL %s no apunta a un vídeo QuickTime válido."
-
-#~ msgid "A valid URL is required."
-#~ msgstr "Se precisa una URL válida."
-
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Se precisa HTML válido. Los errores específicos son:\n"
-#~ "%s"
-
-#~ msgid "Badly formed XML: %s"
-#~ msgstr "XML mal formado: %s"
-
-#~ msgid "Invalid URL: %s"
-#~ msgstr "URL no válida: %s"
-
-#~ msgid "The URL %s is a broken link."
-#~ msgstr "La URL %s es un enlace roto."
-
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "Este campo debe concordar con el campo '%s'."
-
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "Por favor, introduzca algo en al menos un campo."
-
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr "Por favor, rellene ambos campos o deje ambos vacíos."
-
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s"
-
-#~ msgid "This value must be between %(lower)s and %(upper)s."
-#~ msgstr "Este valor debe estar entre %(lower)s y %(upper)s."
-
-#~ msgid "This value must be no more than %s."
-#~ msgstr "Este valor no debe ser mayor que %s."
-
-#~ msgid "This value must be a power of %s."
-#~ msgstr "Este valor debe ser una potencia de %s."
-
-#~ msgid "Please enter a valid decimal number."
-#~ msgstr "Por favor, introduzca un número decimal válido."
-
-#~ msgid "Please enter a valid decimal number with at most %s total digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s total digits."
-#~ msgstr[0] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígito en "
-#~ "total."
-#~ msgstr[1] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígitos en "
-#~ "total."
-
-#~ msgid ""
-#~ "Please enter a valid decimal number with a whole part of at most %s digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with a whole part of at most %s "
-#~ "digits."
-#~ msgstr[0] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígito en "
-#~ "su parte entera."
-#~ msgstr[1] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígitos en "
-#~ "su parte entera."
-
-#~ msgid "Please enter a valid decimal number with at most %s decimal place."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s decimal places."
-#~ msgstr[0] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígito "
-#~ "decimal."
-#~ msgstr[1] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígitos "
-#~ "decimales."
-
-#~ msgid "Please enter a valid floating point number."
-#~ msgstr "Por favor, introduzca un número de coma flotante válido."
-
-#~ msgid "Make sure your uploaded file is at least %s bytes big."
-#~ msgstr "Asegúrese de que el fichero que envía tiene al menos %s bytes."
-
-#~ msgid "Make sure your uploaded file is at most %s bytes big."
-#~ msgstr "Asegúrese de que el fichero que envía tiene como máximo %s bytes."
-
-#~ msgid "The format for this field is wrong."
-#~ msgstr "El formato de este campo es incorrecto."
-
-#~ msgid "This field is invalid."
-#~ msgstr "Este campo no es válido."
-
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "No se pudo obtener nada de %s."
-
-#~ msgid ""
-#~ "The URL %(url)s returned the invalid Content-Type header '%(contenttype)"
-#~ "s'."
-#~ msgstr ""
-#~ "La URL %(url)s devolvió la cabecera Content-Type '%(contenttype)s', que "
-#~ "no es válida."
-
-#~ msgid ""
-#~ "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts "
-#~ "with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Por favor, cierre la etiqueta %(tag)s de la línea %(line)s. (La línea "
-#~ "empieza por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "Some text starting on line %(line)s is not allowed in that context. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Parte del texto que comienza en la línea %(line)s no está permitido en "
-#~ "ese contexto. (La línea empieza por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
-#~ "\"%(start)s\".)"
-#~ msgstr ""
-#~ "El \"%(attr)s\" de la línea %(line)s no es un atributo válido. (La línea "
-#~ "empieza por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-#~ "(start)s\".)"
-#~ msgstr ""
-#~ "La \"<%(tag)s>\" de la línea %(line)s no es una etiqueta válida. (La "
-#~ "línea empieza por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "A tag on line %(line)s is missing one or more required attributes. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "A una etiqueta de la línea %(line)s le faltan uno o más atributos "
-#~ "requeridos. (La línea empieza por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "El atributo \"%(attr)s\" de la línea %(line)s tiene un valor que no es "
-#~ "válido. (La línea empieza por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "%(object)s with this %(type)s already exists for the given %(field)s."
-#~ msgstr "%(object)s de este %(type)s ya existen en este %(field)s."
-
-#~ msgid "Enter a valid filename."
-#~ msgstr "Introduzca un nombre de fichero válido"
-
-#~ msgid "Please enter a valid %s."
-#~ msgstr "Por favor, introduzca un %s válido."
-
-#~ msgid "Ensure your text is less than %s character."
-#~ msgid_plural "Ensure your text is less than %s characters."
-#~ msgstr[0] "Asegúrese de que su texto tiene menos de %s carácter."
-#~ msgstr[1] "Asegúrese de que su texto tiene menos de %s caracteres."
-
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "No se permiten saltos de línea."
-
-#~ msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-#~ msgstr "Escoja una opción válida; '%(data)s' no está en %(choices)s."
-
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr "Introduzca un número entero entre -32.768 y 32.767."
-
-#~ msgid "Enter a positive number."
-#~ msgstr "Introduzca un número positivo."
-
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "Introduzca un número entero entre 0 y 32.767."
-
-#~ msgid "Ordering"
-#~ msgstr "Ordenación"
-
-#~ msgid "Added %s."
-#~ msgstr "Añadido %s."
-
-#~ msgid "Deleted %s."
-#~ msgstr "Borrado %s."
-
-#~ msgid "The two 'new password' fields didn't match."
-#~ msgstr "Los dos campos 'nueva contraseña' no coinciden."
-
-#~ msgid "Year must be 1900 or later."
-#~ msgstr "El año debe ser 1900 o posterior."
-
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "Separe múltiples IDs con comas."
diff --git a/parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index b42ebb3..0000000
--- a/parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 4ad90fa..0000000
--- a/parts/django/django/conf/locale/es/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,117 +0,0 @@
-# Spanish translation for the django-admin JS files.
-# Copyright (C) 2008, The Django Project
-# This file is distributed under the same license as the django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-10-04 00:00+0200\n"
-"PO-Revision-Date: 2008-03-30 00:54+0100\n"
-"Last-Translator: Django Spanish Group <django-i18n@googlegroups.com>\n"
-"Language-Team: Spanish <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre "
-"Noviembre Diciembre"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M M J V S"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Domingo Lunes Martes Miércoles Jueves Viernes Sábado"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s Disponibles"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Selecciona todos"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Agregar"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Remover"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s Elegidos"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Haz tus elecciones y da click en "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Elimina todos"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Ahora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Reloj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Elige una hora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Medianoche"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Mediodía"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Hoy"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Calendario"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Ayer"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Mañana"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Mostrar"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Esconder"
diff --git a/parts/django/django/conf/locale/es/__init__.py b/parts/django/django/conf/locale/es/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/es/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/es/formats.py b/parts/django/django/conf/locale/es/formats.py
deleted file mode 100644
index 58fd5fc..0000000
--- a/parts/django/django/conf/locale/es/formats.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'j \de F \de Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = r'j \de F \de Y \a \l\a\s H:i'
-YEAR_MONTH_FORMAT = r'F \de Y'
-MONTH_DAY_FORMAT = r'j \de F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- # '31/12/2009', '31/12/09'
- '%d/%m/%Y', '%d/%m/%y'
-)
-TIME_INPUT_FORMATS = (
- # '14:30:59', '14:30'
- '%H:%M:%S', '%H:%M'
-)
-DATETIME_INPUT_FORMATS = (
- '%d/%m/%Y %H:%M:%S',
- '%d/%m/%Y %H:%M',
- '%d/%m/%y %H:%M:%S',
- '%d/%m/%y %H:%M',
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
-
diff --git a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.mo
deleted file mode 100644
index 692171d..0000000
--- a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.po b/parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.po
deleted file mode 100644
index dad102e..0000000
--- a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5186 +0,0 @@
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 16:06-0300\n"
-"PO-Revision-Date: 2010-09-10 16:42-0300\n"
-"Last-Translator: Ramiro <rm0@gmx.net>\n"
-"Language-Team: Django-I18N <django-i18n@googlegroups.com>\n"
-"Language: es_AR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.1\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "árabe"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "búlgaro"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengalí"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosnio"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "catalán"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "checo"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "galés"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "danés"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "alemán"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "griego"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "inglés"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "inglés británico"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "español"
-
-#: conf/global_settings.py:57
-msgid "Argentinian Spanish"
-msgstr "español de Argentina"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "estonio"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "vasco"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "persa"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "finlandés"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "francés"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "frisón"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "irlandés"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "gallego"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "hebreo"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "croata"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "húngaro"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "indonesio"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "islandés"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "italiano"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "japonés"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "georgiano"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "jémer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "canarés"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "coreano"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "lituano"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "letón"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "macedonio"
-
-#: conf/global_settings.py:81
-msgid "Malayalam"
-msgstr "Malayalam"
-
-#: conf/global_settings.py:82
-msgid "Mongolian"
-msgstr "mongol"
-
-#: conf/global_settings.py:83
-msgid "Dutch"
-msgstr "holandés"
-
-#: conf/global_settings.py:84
-msgid "Norwegian"
-msgstr "noruego"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Bokmal"
-msgstr "bokmål"
-
-#: conf/global_settings.py:86
-msgid "Norwegian Nynorsk"
-msgstr "nynorsk"
-
-#: conf/global_settings.py:87
-msgid "Polish"
-msgstr "polaco"
-
-#: conf/global_settings.py:88
-msgid "Portuguese"
-msgstr "portugués"
-
-#: conf/global_settings.py:89
-msgid "Brazilian Portuguese"
-msgstr "portugués de Brasil"
-
-#: conf/global_settings.py:90
-msgid "Romanian"
-msgstr "rumano"
-
-#: conf/global_settings.py:91
-msgid "Russian"
-msgstr "ruso"
-
-#: conf/global_settings.py:92
-msgid "Slovak"
-msgstr "eslovaco"
-
-#: conf/global_settings.py:93
-msgid "Slovenian"
-msgstr "esloveno"
-
-#: conf/global_settings.py:94
-msgid "Albanian"
-msgstr "albanés"
-
-#: conf/global_settings.py:95
-msgid "Serbian"
-msgstr "serbio"
-
-#: conf/global_settings.py:96
-msgid "Serbian Latin"
-msgstr "Latín de Serbia"
-
-#: conf/global_settings.py:97
-msgid "Swedish"
-msgstr "sueco"
-
-#: conf/global_settings.py:98
-msgid "Tamil"
-msgstr "tamil"
-
-#: conf/global_settings.py:99
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:100
-msgid "Thai"
-msgstr "tailandés"
-
-#: conf/global_settings.py:101
-msgid "Turkish"
-msgstr "turco"
-
-#: conf/global_settings.py:102
-msgid "Ukrainian"
-msgstr "ucraniano"
-
-#: conf/global_settings.py:103
-msgid "Vietnamese"
-msgstr "vietnamita"
-
-#: conf/global_settings.py:104
-msgid "Simplified Chinese"
-msgstr "chino simplificado"
-
-#: conf/global_settings.py:105
-msgid "Traditional Chinese"
-msgstr "chino tradicional"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Se eliminaron con éxito %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "¿Está seguro?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Eliminar %(verbose_name_plural)s seleccionados/as"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Por %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Todos/as"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Cualquier fecha"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Hoy"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Últimos 7 días"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Este mes"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Este año"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "Yes"
-msgstr "Sí"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "No"
-msgstr "No"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
-msgid "Unknown"
-msgstr "Desconocido"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Acción:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "hora de la acción"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id de objeto"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "repr de objeto"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "marca de acción"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "mensaje de cambio"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "entrada de registro"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "entradas de registro"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Ninguno"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Modifica %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "y"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Se agregó %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Se modificaron %(list)s en %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Se eliminó %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "No ha modificado ningún campo."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Se agregó con éxito %(name)s \"%(obj)s\"."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Puede modificarlo/a nuevamente abajo."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Puede agregar otro/a %s abajo."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Se modificó con éxito %(name)s \"%(obj)s\"."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Se agregó con éxito %(name)s \"%(obj)s\". Puede modificarlo/a nuevamente "
-"abajo."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Deben existir items seleccionados para poder realizar acciones sobre los "
-"mismos. No se modificó ningún item."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "No se ha seleccionado ninguna acción."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Agregar %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "No existe un objeto %(name)s con una clave primaria %(key)r."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Modificar %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Error de base de datos"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "Se ha modificado con éxito %(count)s %(name)s."
-msgstr[1] "Se han modificado con éxito %(count)s %(name)s."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s seleccionados/as"
-msgstr[1] "Todos/as (%(total_count)s en total) han sido seleccionados/as"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 de %(cnt)s seleccionados/as"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Se eliminó con éxito %(name)s \"%(obj)s\"."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Historia de modificaciones: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Por favor introduzca un nombre de usuario y una contraseña correctos. Note "
-"que ambos campos son sensibles a mayúsculas/minúsculas."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Por favor, identifíquese de nuevo porque su sesión ha caducado."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Parece que su navegador no está configurado para aceptar cookies. Por favor "
-"actívelas, recargue esta página e inténtelo de nuevo."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Los nombres de usuario no pueden contener el carácter '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Su dirección de correo electrónico no es su nombre de usuario. Intente "
-"nuevamente usando '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Administración de sitio"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Identificarse"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "Administración de %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Fecha:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Hora:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Actualmente"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Modificar:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Buscar"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Agregar otro/a"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Página no encontrada"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Lo sentimos, pero no se encuentra la página solicitada."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Inicio"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Error del servidor"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Error del servidor (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Error de servidor <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Ha ocurrido un error. Se ha informado a los administradores del sitio "
-"mediante correo electrónico y debería ser solucionado en breve. Gracias por "
-"su paciencia."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Ejecutar la acción seleccionada"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Ejecutar"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Haga click aquí para seleccionar los objetos de todas las páginas"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Seleccionar lo(s)/a(s) %(total_count)s de %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Borrar selección"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Bienvenido,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentación"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Cambiar contraseña"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Cerrar sesión"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Sitio de administración de Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administración de Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Agregar"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historia"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Ver en el sitio"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Por favor, corrija el siguiente error."
-msgstr[1] "Por favor, corrija los siguientes errores."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Agregar %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrar"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Eliminar"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación "
-"de objetos relacionados, pero su cuenta no tiene permiso para eliminar los "
-"siguientes tipos de objetos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"¿Está seguro de que quiere eliminar los %(object_name)s \"%(escaped_object)s"
-"\"? Se eliminarán los siguientes objetos relacionados:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Sí, estoy seguro"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Eliminar múltiples objetos"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"El eliminar %(object_name)s provocaría la eliminación de objetos "
-"relacionados, pero su cuenta no tiene permiso para eliminar los siguientes "
-"tipos de objetos:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"¿Está seguro de que quiere eliminar los objetos %(object_name)s "
-"seleccionados? Se eliminarán todos los siguientes objetos y sus items "
-"relacionados:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Por %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelos disponibles en la aplicación %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Modificar"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "No tiene permiso para editar nada."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Acciones recientes"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mis acciones"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ninguna disponible"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Contenido desconocido"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Hay algún problema con su instalación de base de datos. Asegúrese de que las "
-"tablas de la misma hayan sido creadas, y asegúrese de que el usuario "
-"apropiado tenga permisos de lectura en la base de datos."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Usuario:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Contraseña:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Fecha/hora"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Usuario"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Acción"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Este objeto no tiene historia de modificaciones. Probablemente no fue "
-"añadido usando este sitio de administración."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Mostrar todos/as"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Guardar"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Buscar"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "un resultado"
-msgstr[1] "%(counter)s resultados"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "total: %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Guardar como nuevo"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Guardar y agregar otro"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Guardar y continuar editando"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Primero introduzca un nombre de usuario y una contraseña. Luego podrá "
-"configurar opciones adicionales acerca del usuario."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:8
-msgid "Enter a username and password."
-msgstr "Introduzca un nombre de usuario y una contraseña."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-"Introduzca una nueva contraseña para el usuario <strong>%(username)s</"
-"strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Contraseña"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Contraseña (de nuevo)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr ""
-"Para verificación, introduzca la misma contraseña que introdujo arriba."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Agregar otro/a %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Eliminar"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Eliminar?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Identificarse de nuevo"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Cambio de contraseña"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Cambio de contraseña exitoso"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Su contraseña ha sido cambiada."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Por favor, por razones de seguridad, introduzca primero su contraseña "
-"antigua y luego introduzca la nueva contraseña dos veces para verificar que "
-"la ha escrito correctamente."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Contraseña antigua"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Contraseña nueva"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Cambiar mi contraseña"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Recuperar contraseña"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Reinicialización de contraseña completada"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Se le ha enviado su contraseña. Ahora puede continuar e ingresar."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Confirmación de reincialización de contraseña"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Introduzca la nueva contraseña"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Por favor introduzca su nueva contraseña dos veces de manera que podamos "
-"verificar que la ha escrito correctamente."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Contraseña nueva:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirme contraseña:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Reinicialización de contraseña exitosa"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"El enlace de reinicialización de contraseña es inválido, posiblemente debido "
-"a que ya ha sido usado. Por favor solicite una nueva reinicialización de "
-"contraseña."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Recuperación de contraseña exitosa"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Le hemos enviado instrucciones sobre como establecer su contraseña a la "
-"dirección de correo electrónico que ha suministrado. Debería recibir las "
-"mismas en breve."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Recibe este mensaje debido a que solicitó recuperar la contraseña"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "de su cuenta de usuario en %(site_name)s."
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr ""
-"Por favor visite la página que se muestra a continuación y elija una nueva "
-"contraseña:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Su nombre de usuario, en caso de haberlo olvidado:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "¡Gracias por usar nuestro sitio!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "El equipo de %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"¿Ha olvidado su contraseña?. Introduzca su dirección de correo electrónico "
-"mas abajo y le enviaremos instrucciones para establecer una nueva."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Dirección de correo electrónico:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Recuperar mi contraseña"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Todas las fechas"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Seleccione %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Seleccione %s a modificar"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "sitio"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "plantilla"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "etiqueta:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtrar:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "ver:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplicación %r no encontrada"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Modelo %(model_name)r no encontrado en aplicación %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "el objeto `%(app_label)s.%(data_type)s` relacionado"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modelo:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "objetos `%(app_label)s.%(object_name)s` relacionados"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "todos los %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "número de %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Campos en objetos %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s no parece ser un objeto urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklets de documentación"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Para instalar bookmarklets, arrastre el enlace a su barra\n"
-"de favoritos, o pulse con el botón derecho el enlace y añádalo a sus "
-"favoritos.\n"
-"Ahora puede seleccionar el bookmarklet desde cualquier página en el sitio.\n"
-"Tenga en cuenta que algunos de estos bookmarklets precisan que esté viendo\n"
-"el sitio desde un equipo señalado como \"interno\" (hable\n"
-"con su administrador de sistemas si no está seguro de si el suyo lo es).</"
-"p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentación de esta página"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Le lleva desde cualquier página a la documentación de la vista que la genera."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Mostrar ID de objeto"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Muestra el tipo de contenido e ID unívoco de las páginas que representan un "
-"único objeto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Editar este objeto (ventana actual)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Le lleva a la página de administración de páginas que representan un único "
-"objeto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Editar este objeto (nueva ventana)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Ídem, pero abre la página de administración en una nueva ventana."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Información personal"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Permisos"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Fechas importantes"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupos"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Cambio de contraseña exitoso"
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Cambiar contraseña: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Nombre de usuario"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Obligatorio. Longitud máxima 30 caracteres alfanuméricos (letras, dígitos y "
-"@/./+/-/_) solamente."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Este valor solo puede contener letras, números y @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Confirmación de contraseña"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Ya existe un usuario con ese nombre."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Los dos campos de contraseñas no coinciden entre si."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Esta cuenta está inactiva"
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Su navegador Web aparenta no estar configurado para aceptar cookies. Las "
-"cookies son un requerimiento para poder ingresar."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Correo electrónico"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Esa dirección de correo electrónico no está asociada a ninguna cuenta de "
-"usuario. ¿Está seguro de que ya se ha registrado?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Reinicialización de contraseña en %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Confirmación de contraseña nueva"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"La antigua contraseña introducida es incorrecta. Por favor introdúzcala "
-"nuevamente."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nombre"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "nombre en código"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "permiso"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "permisos"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupo"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupos"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "nombre de usuario"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Obligatorio. Longitud máxima de 30 caracteres alfanuméricos (letras, dígitos "
-"y @/./+/-/_)."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "nombre"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "apellido"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "dirección de correo electrónico"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "contraseña"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Use '[algo]$[salt]$[hexdigest]' o use el <a href=\"password/\">formulario de "
-"cambio de contraseña</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "es staff"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Indica si el usuario puede ingresar a este sitio de administración."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "activo"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Indica si el usuario debe ser tratado como un usuario activo. Desactive este "
-"campo en lugar de eliminar usuarios."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "es superusuario"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Indica que este usuario posee todos los permisos sin que sea necesario "
-"asignarle los mismos en forma explícita."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "último ingreso"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "fecha de creación"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Además de los permisos asignados manualmente, este usuario también poseerá "
-"todos los permisos de los grupos a los que pertenezca."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "permisos de usuario"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "usuario"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "usuarios"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "mensaje"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Sesión cerrada"
-
-#: contrib/auth/management/commands/createsuperuser.py:24
-#: core/validators.py:120 forms/fields.py:427
-msgid "Enter a valid e-mail address."
-msgstr "Introduzca una dirección de correo electrónico válida"
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Contenido"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadatos"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "marcado"
-msgstr[1] "marcados"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Marcar comentarios seleccionados"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "aprobado"
-msgstr[1] "aprobados"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Aprobar comentario seleccionado"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "eliminado"
-msgstr[1] "eliminados"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Eliminar comentarios seleccionados"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "un comentario fue %(action)s satisfactoriamente."
-msgstr[1] "%(count)s comentarios fueron %(action)s satisfactoriamente"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "comentarios en %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Últimos comentarios en %(site_name)s."
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nombre"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Dirección de correo electrónico"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Comentario"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "¡Controla tu lenguaje! Aquí no admitimos la palabra %s."
-msgstr[1] "¡Controla tu lenguaje! Aquí no admitimos las palabras %s."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Si introduce algo en este campo su comentario será tratado como spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tipo de contenido"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID de objeto"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nombre de usuario"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "dirección de correo electrónico del usuario"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL del usuario"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "comentario"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "fecha/hora de envío"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
-msgid "IP address"
-msgstr "Dirección IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "es público"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "desmarque este ítem para que el comentario desaparezca del sitio."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "se ha eliminado"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Marque este ítem si el comentario es inapropiado. En su lugar se mostrará un "
-"mensaje \"Este comentario ha sido eliminado\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "comentarios"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Este comentario ha sido enviado por un usuario identificado, por lo tanto el "
-"nombre no puede modificarse."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Este comentario ha sido enviado por un usuario identificado, por lo tanto la "
-"dirección de correo electrónico no puede modificarse."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Enviado por %(user)s el %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "marca"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "fecha"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "marca de comentario"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "marcas de comentario"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Aprobar un comentario"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "¿Confirma que realmente desea hacer este comentario público?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Aprobar"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "¡Gracias por aprobar!"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Gracias por tomarse el tiempo de mejorar la calidad de la discusión en "
-"nuestro sitio"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Eliminar un comentario"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "¿Confirma que realmente desea eliminar este comentario?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "¡Gracias por eliminar!"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Marcar este comentario"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "¿Confirma que realmente desde marcar este comentario?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Marcar"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "¡Gracias por marcar!"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Remitir"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Previsualización"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Gracias por dejar su comentario"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Gracias por dejar su comentario"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Ver una copia previa de su comentario"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Por favor, corrija el siguiente error."
-msgstr[1] "Por favor, corrija los siguientes errores."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Enviar su comentario"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "o realice modificaciones"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "nombre de la clase python del modelo"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipos de contenido"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Ejemplo: '/about/contact/'. Asegúrese de usar barras '/' al principio y al "
-"final."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Este valor debe contener sólo letras, números, guiones bajos, guiones o "
-"barras (/)"
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opciones avanzadas"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "título"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "contenido"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "activar comentarios"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nombre de plantilla"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Ejemplo: 'flatpages/contact_page.html'. Si no lo proporciona, el sistema "
-"usará 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "debe estar registrado"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "página estática"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "páginas estáticas"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Lamentablemente su formulario ha caducado. Por favor continúe rellenando el "
-"formulario en esta página."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"El campo GIS base -- corresponde al tipo Geometry de la especificación "
-"OpenGIS."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punto"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Secuencia de líneas"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polígono"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Multi-punto"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Cadena multi-línea"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Multi polígono"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Colección de Geometry's"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "No se ha proporcionado un valor de geometría."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Valor de geometría no válido."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tipo de geometría no válido."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Ha ocurrido un error mientras se transformaba la geometría al SRID del campo "
-"de formulario de la misma."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "to"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "ro"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "do"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "ro"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f millón"
-msgstr[1] "%(value).1f millones"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f millardo"
-msgstr[1] "%(value).1f millardos"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billón"
-msgstr[1] "%(value).1f billones"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "uno"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dos"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tres"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "cuatro"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cinco"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seis"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "siete"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "ocho"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "nueve"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "hoy"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "mañana"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "ayer"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Introduzca un código postal en formato NNNN o ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Este campo sólo permite valores numéricos."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Este campo requiere 7 u 8 dígitos."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Introduzca un CUIT válido en formato XX-XXXXXXXX-X o XXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT inválido."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carintia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Baja Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Alta Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburgo"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Estiria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Viena"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Introduzca un zip code en formato XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Introduzca un Número de Seguridad Social austríaco válido en formato XXXX "
-"XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Introduzca un post code de 4 dígitos."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Introduzca un zip code en formato XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Los números telefónicos deben respetar el formato XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Seleccione un estado Brasileño válido. Ese estado no es uno de los estados "
-"disponibles."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Número CPF inválido."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Este campo requiere como máximo 11 dígitos o 14 caracteres."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Número CNPJ inválido."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Este campo requiere al menos 14 dígitos."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Introduzca un código postal en formato XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Introduzca un Número de Seguridad Social Canadiense válido en formato XXX-"
-"XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Introduzca un número válido de tarjeta de identidad o pasaporte Suizos en "
-"formato X1234567<0 o 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Introduzca un RUT chileno válido."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Introduzca un RUT chileno válido. EL formato es XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "El RUT chileno no es válido."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "región Bohemia Central"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "región Bohemia Meridional"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "región Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "región Karlovy Vary"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "región Ústí nad Labem"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "región Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "región Hradec Králové"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "región Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "región Vysočina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "región Moravia Meridional"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "región Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "región Zlín"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "región Moravia-Silesia"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Introduzca un código postal en formato XXXXX o XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"Introduzca un número de nacimiento en formato XXXXXX/XXXX o XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Valor erróneo para el parámetro opcional género. Los valores válidos son 'f' "
-"y 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Introduzca un número de nacimiento válido."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Introduzca un número IC válido."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlín"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburgo"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lower Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Renania septentrional-Westfalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Introduzca un zip code en formato XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Introduzca un número de tarjeta de identidad alemán válido en formato "
-"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Islas Baleares"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "La Coruña"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Gerona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúzcoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lérida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Orense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Vizcaya"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalucía"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragón"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principado de Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Islas Baleares"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "País Vasco"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Islas Canarias"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilla-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilla y León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Cataluña"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Región de Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Comunidad Foral de Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Comunidad Valenciana"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-"Introduzca un código postal en el siguiente rango y con el siguiente "
-"formato: 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Introduzca un número telefónico en uno de los siguientes formatos: "
-"6XXXXXXXX, 8XXXXXXXX o 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Por favor introduzca un NIF, NIE o CIF válidos."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Por favor, introduzca un NIF o CIE válidos."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Código de verificación de NIF inválido."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Código de verificación de NIE inválido."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Código de verificación de CIF inválido."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Por favor introduzca un número de cuenta bancaria válido en formato XXXX-"
-"XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Código de verificación de número de cuenta bancaria inválido."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Introduzca un número de seguridad social finlandés válido."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Los números telefónicos deben respetar el formato 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Introduzca un código postal válido."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Introduzca un número telefónico válido."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Introduzca un número de placa de licencia de vehículo válido."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Introduzca un número NIK/KTP válido."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Java Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Java Central"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Java Oriental"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Occidental"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Meridional"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Central"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Oriental"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Islas Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Molucas"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Molucas Septentrional"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Aceh"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusatenggara Occidental"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusatenggara Oriental"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papúa"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Provincia de Papúa Occidental"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Célebes Occidental"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Célebes Meridional"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Célebes Central"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Célebes Suroriental"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Molucas Septentrional"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatra Occidental"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatra Meridional"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatra Septentrional"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federal Government"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Introduzca un zip code en formato XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Introduzca un número de identificación islandés válido. El formato es XXXXXX-"
-"XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "El número de identificación islandés no es válido."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Introduzca un zip code válido."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Introduzca un número de Seguridad Social válido."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Introduzca un número VAT válido."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Introduzca un código postal en formato XXXXXX o XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Introduzca un número de ID civil kuwaití válido."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Introduzca un código postal válido."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Introduzca un número SoFi válido."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drente"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevolanda"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Frisia"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Güeldres"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groninga"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburgo"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Brabante Septentrional"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Holanda Septentrional"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zelanda"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Holanda Meridional"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Introduzca un número de seguridad social Noruego válido."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Este campo requiere 8 dígitos."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Este campo requiere 11 dígitos."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Los Números Nacionales de Identificación constan de 11 dígitos."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Código de verificación de Número Nacional de Identificación inválido."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Introduzca un campo de número impositivo en formato XXX-XXX-XX-XX o XX-XX-"
-"XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Código de verificación de Número Impositivo (NIP) inválido."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Los Números Nacionales de Registro de Negocios (REGON) constan de 9 o 14 "
-"dígitos."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Código de verificación de Número Nacional de Registro de Negocios (REGON) "
-"inválido."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Introduzca un código postal en formato XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Baja Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Cuyavia y Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubus"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Pequeña Polonia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpacia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlaquia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Varmia y Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Gran Polonia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Pomerania Occidental"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Introduzca un zip code en formato XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Los números telefónicos deben ser de 9 dígitos o comenzar con + o 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Introduzca un CIF válido."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Introduzca un CNP válido."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Introduzca un IBAN válido en formato ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Los números telefónicos deben respetar el formato XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Introduzca un código postal válido en formato XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Introduzca un número de organización sueco válido."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Introduzca un número de identidad personal sueco válido."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "No se admiten números de co-ordinación"
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Introduzca un código postal sueco en formato XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Estocolmo"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergrötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Escania"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "región Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "región Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "región Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "región Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "región Presov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "región Trencin"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "región Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "región Zilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Introduzca un postcode válido."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall e Islas de Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermarmagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Escocia Central"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Inglaterra"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlanda del Norte"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Escocia"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Gales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Introduzca un zip code en el formato XXXXX o XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Los números telefónicos deben respetar el formato XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Introduzca un Número de Seguridad Social en formato XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Introduzca un estado de EE.UU. o un territorio."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado de los EE.UU. (dos letras mayúsculas)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Número de teléfono"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Introduzca un número CI válido en formato X.XXX.XXX-X,XXXXXXX-X o XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Introduzca un número CI válido."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Introduzca un número de ID de Sudáfrica válido."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Introduzca un código postal de Sudáfrica válido."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "mensaje lazy"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirigir desde"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Esta ruta debe ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/"
-"events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirigir a"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Esto puede ser bien una ruta absoluta (como arriba) o una URL completa que "
-"empiece con 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redirección"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redirecciones"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "clave de sesión"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "datos de la sesión"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "fecha de caducidad"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesión"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesiones"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nombre de dominio"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "nombre para visualizar"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sitios"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Introduzca un valor válido."
-
-#: core/validators.py:87 forms/fields.py:528
-msgid "Enter a valid URL."
-msgstr "Introduzca una URL válida."
-
-#: core/validators.py:89 forms/fields.py:529
-msgid "This URL appears to be a broken link."
-msgstr "La URL parece ser un enlace roto."
-
-#: core/validators.py:123 forms/fields.py:877
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Introduzca un 'slug' válido consistente de letras, números o guiones."
-
-#: core/validators.py:126 forms/fields.py:870
-msgid "Enter a valid IPv4 address."
-msgstr "Introduzca una dirección IPv4 válida"
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Introduzca sólo dígitos separados por comas."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Asegúrese de que este valor sea %(limit_value)s (actualmente es "
-"%(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:204 forms/fields.py:256
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Asegúrese de que este valor sea menor o igual a %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Asegúrese de que este valor sea mayor o igual a %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has "
-"%(show_value)d)."
-msgstr ""
-"Asegúrese de que este valor tenga al menos %(limit_value)d caracteres (tiene "
-"%(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has "
-"%(show_value)d)."
-msgstr ""
-"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres "
-"(tiene %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"%(field_name)s debe ser único/a para un %(lookup)s %(date_field)s "
-"determinado."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Ya existe un/a %(model_name)s con este/a %(field_label)s."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "El valor %r no es una opción válida."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Este campo no puede ser nulo."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Este campo no puede estar en blanco."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Campo tipo: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:860
-#: db/models/fields/__init__.py:969 db/models/fields/__init__.py:980
-#: db/models/fields/__init__.py:1007
-msgid "Integer"
-msgstr "Entero"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:858
-msgid "This value must be an integer."
-msgstr "Este valor debe ser un número entero."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Este valor debe ser True o False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (Verdadero o Falso)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:990
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Cadena (máximo %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Enteros separados por comas"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Fecha (sin hora)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Fecha no válida: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Introduzca un valor de fecha/hora válido en formato AAAA-MM-DD HH:MM[:ss[."
-"uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Fecha (con hora)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Este valor debe ser un número decimal."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Dirección de correo electrónico"
-
-#: db/models/fields/__init__.py:807 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Ruta de archivo"
-
-#: db/models/fields/__init__.py:830
-msgid "This value must be a float."
-msgstr "Este valor debe ser un valor en representación de punto flotante."
-
-#: db/models/fields/__init__.py:832
-msgid "Floating point number"
-msgstr "Número de punto flotante"
-
-#: db/models/fields/__init__.py:891
-msgid "Big (8 byte) integer"
-msgstr "Entero grande (8 bytes)"
-
-#: db/models/fields/__init__.py:920
-msgid "This value must be either None, True or False."
-msgstr "Este valor debe ser None, True o False."
-
-#: db/models/fields/__init__.py:922
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (Verdadero, Falso o Nulo)"
-
-#: db/models/fields/__init__.py:1013
-msgid "Text"
-msgstr "Texto"
-
-#: db/models/fields/__init__.py:1029
-msgid "Time"
-msgstr "Hora"
-
-#: db/models/fields/__init__.py:1033
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Introduzca un valor de hora válido en formato HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1125
-msgid "XML text"
-msgstr "Texto XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "No existe un modelo %(model)s con una clave primaria %(pk)r."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Clave foránea (el tipo está determinado por el campo relacionado)"
-
-#: db/models/fields/related.py:919
-msgid "One-to-one relationship"
-msgstr "Relación uno-a-uno"
-
-#: db/models/fields/related.py:981
-msgid "Many-to-many relationship"
-msgstr "Relación muchos-a-muchos"
-
-#: db/models/fields/related.py:1001
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Mantenga presionada \"Control\" (\"Command\" en una Mac) para seleccionar "
-"más de uno."
-
-#: db/models/fields/related.py:1062
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Por favor, introduzca IDs de %(self)s válidos. El valor %(value)r no es "
-"válido."
-msgstr[1] ""
-"Por favor, introduzca IDs de %(self)s válidos. Los valores %(value)r no son "
-"válidos."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Este campo es obligatorio."
-
-#: forms/fields.py:203
-msgid "Enter a whole number."
-msgstr "Introduzca un número entero."
-
-#: forms/fields.py:234 forms/fields.py:255
-msgid "Enter a number."
-msgstr "Introduzca un número."
-
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Asegúrese de que no existan en total mas de %s dígitos."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Asegúrese de que no existan mas de %s lugares decimales."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Asegúrese de que no existan mas de %s dígitos antes del punto decimal."
-
-#: forms/fields.py:322 forms/fields.py:837
-msgid "Enter a valid date."
-msgstr "Introduzca una fecha válida."
-
-#: forms/fields.py:350 forms/fields.py:838
-msgid "Enter a valid time."
-msgstr "Introduzca un valor de hora válido."
-
-#: forms/fields.py:376
-msgid "Enter a valid date/time."
-msgstr "Introduzca un valor de fecha/hora válido."
-
-#: forms/fields.py:434
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"No se envió un archivo. Verifique el tipo de codificación en el formulario."
-
-#: forms/fields.py:435
-msgid "No file was submitted."
-msgstr "No se envió ningún archivo."
-
-#: forms/fields.py:436
-msgid "The submitted file is empty."
-msgstr "El archivo enviado está vacío."
-
-#: forms/fields.py:437
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracteres "
-"(tiene %(length)d)."
-
-#: forms/fields.py:472
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Seleccione una imagen válida. El archivo que ha seleccionado no es una "
-"imagen o es un un archivo de imagen corrupto."
-
-#: forms/fields.py:595 forms/fields.py:670
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Seleccione una opción válida. %(value)s no es una de las opciones "
-"disponibles."
-
-#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Introduzca una lista de valores."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Ordenar"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Por favor, corrija la información duplicada en %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Por favor corrija la información duplicada en %(field)s, que debe ser única."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Por favor corrija la información duplicada en %(field_name)s que debe ser "
-"única para el %(lookup)s en %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Por favor, corrija los valores duplicados detallados mas abajo."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"La clave foránea del modelo inline no coincide con la clave primaria de la "
-"instancia padre."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Seleccione una opción válida. La opción seleccionada no es una de las "
-"disponibles."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-"Seleccione una opción válida. %s no es una de las opciones disponibles."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" no es un valor válido para una clave primaria."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "si,no,talvez"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "medianoche"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "mediodía"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Lunes"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Martes"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Miércoles"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Jueves"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Viernes"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Sábado"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Domingo"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Lun"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Mar"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Mie"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Jue"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Vie"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Sab"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Dom"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Enero"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Febrero"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Marzo"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Abril"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Mayo"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Junio"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Julio"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Agosto"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Setiembre"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Octubre"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Noviembre"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Diciembre"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "ene"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "abr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "may"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ago"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "set"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "oct"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dic"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Enero"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Ago."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Set."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Oct."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dic."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "o"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "año"
-msgstr[1] "años"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mes"
-msgstr[1] "meses"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "semana"
-msgstr[1] "semanas"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "día"
-msgstr[1] "días"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "horas"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minutos"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutos"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j N Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j N Y P"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j \\de F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Se creó con éxito %(verbose_name)s."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Se actualizó con éxito %(verbose_name)s."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Se eliminó %(verbose_name)s."
diff --git a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index db805c5..0000000
--- a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
deleted file mode 100644
index ddb54e4..0000000
--- a/parts/django/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,132 +0,0 @@
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 16:09-0300\n"
-"PO-Revision-Date: 2010-08-06 15:59-0300\n"
-"Last-Translator: Ramiro Morales <rm0@gmx.net>\n"
-"Language-Team: Django-I18N <django-i18n@googlegroups.com>\n"
-"Language: es_AR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.1\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Eliminar todos"
-
-#: contrib/admin/media/js/actions.js:18
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s de %(cnt)s seleccionado/a"
-msgstr[1] "%(sel)s de %(cnt)s seleccionados/as"
-
-#: contrib/admin/media/js/actions.js:109
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Tiene modificaciones sin guardar en campos modificables individuales. Si "
-"ejecuta una acción las mismas se perderán."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Ha seleccionado una acción, pero todavía no ha grabado las modificaciones "
-"que ha realizado en campos individuales. Por favor haga click en Aceptar "
-"para grabarlas. Necesitará ejecutar la acción nuevamente."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Ha seleccionado una acción pero no ha realizado ninguna modificación en "
-"campos individuales. Es probable que lo que necesite usar en realidad sea el "
-"botón Ejecutar y no el botón Guardar."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Setiembre Octubre "
-"Noviembre Diciembre"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M M J V S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Mostrar"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Ocultar"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Domingo Lunes Martes Miércoles Jueves Viernes Sábado"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Ahora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Reloj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Elija una hora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Medianoche"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Mediodía"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Hoy"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Calendario"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Ayer"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Mañana"
diff --git a/parts/django/django/conf/locale/es_AR/__init__.py b/parts/django/django/conf/locale/es_AR/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/es_AR/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/es_AR/formats.py b/parts/django/django/conf/locale/es_AR/formats.py
deleted file mode 100644
index ac8c2eb..0000000
--- a/parts/django/django/conf/locale/es_AR/formats.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'j N Y'
-TIME_FORMAT = r'H:i:s'
-DATETIME_FORMAT = r'j N Y H:i:s'
-YEAR_MONTH_FORMAT = r'F Y'
-MONTH_DAY_FORMAT = r'j \de F'
-SHORT_DATE_FORMAT = r'd/m/Y'
-SHORT_DATETIME_FORMAT = r'd/m/Y H:i'
-FIRST_DAY_OF_WEEK = 0 # 0: Sunday, 1: Monday
-DATE_INPUT_FORMATS = (
- '%d/%m/%Y', # '31/12/2009'
- '%d/%m/%y', # '31/12/09'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d/%m/%Y %H:%M:%S',
- '%d/%m/%Y %H:%M',
- '%d/%m/%y %H:%M:%S',
- '%d/%m/%y %H:%M',
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/et/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/et/LC_MESSAGES/django.mo
deleted file mode 100644
index 426ee9c..0000000
--- a/parts/django/django/conf/locale/et/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/et/LC_MESSAGES/django.po b/parts/django/django/conf/locale/et/LC_MESSAGES/django.po
deleted file mode 100644
index 9b8ae9e..0000000
--- a/parts/django/django/conf/locale/et/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4414 +0,0 @@
-# Estonian translation for the Django Project.
-# Copyright (C) 2008, Django Project
-# This file is distributed under the same license as the django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-24 22:06+0300\n"
-"PO-Revision-Date: 2008-09-03 00:35+0200\n"
-"Last-Translator: Erik Allik <removethis-eallik_at_gmail-com>\n"
-"Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "araabia"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "bengali"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "bulgaaria"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "katalaani"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "tšehhi"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "uelsi"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "taani"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "saksa"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "kreeka"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "inglise"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "hispaania"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "eesti"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "argentiina hispaania"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "baski"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "pärsia"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "soome"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "prantsuse"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "iiri"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "galiitsia"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "ungari"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "heebrea"
-
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "hindi"
-
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "horvaatia"
-
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandi"
-
-#: conf/global_settings.py:68
-msgid "Italian"
-msgstr "itaalia"
-
-#: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "jaapani"
-
-#: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "gruusia"
-
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "korea"
-
-#: conf/global_settings.py:72
-msgid "Khmer"
-msgstr "khmeri"
-
-#: conf/global_settings.py:73
-msgid "Kannada"
-msgstr "kannada"
-
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "läti"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "leedu"
-
-#: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "makedoonia"
-
-#: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "hollandi"
-
-#: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "norra"
-
-#: conf/global_settings.py:79
-msgid "Polish"
-msgstr "poola"
-
-#: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr "portugali"
-
-#: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "brasiilia portugali"
-
-#: conf/global_settings.py:82
-msgid "Romanian"
-msgstr "rumeenia"
-
-#: conf/global_settings.py:83
-msgid "Russian"
-msgstr "vene"
-
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "slovaki"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "sloveeni"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "serbia"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "rootsi"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "tamiili"
-
-#: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:90
-msgid "Thai"
-msgstr "tai"
-
-#: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "türgi"
-
-#: conf/global_settings.py:92
-msgid "Ukrainian"
-msgstr "ukrania"
-
-#: conf/global_settings.py:93
-msgid "Simplified Chinese"
-msgstr "lihtsustatud hiina"
-
-#: conf/global_settings.py:94
-msgid "Traditional Chinese"
-msgstr "traditsiooniline hiina"
-
-#: contrib/admin/actions.py:60
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d %(items)s kustutamine õnnestus"
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
-msgid "Are you sure?"
-msgstr "Kas olete kindel?"
-
-#: contrib/admin/actions.py:85
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Kustuta valitud %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Kõik"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Suvaline kuupäev"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Täna"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Viimased 7 päeva"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Käesolev kuu"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Käesolev aasta"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
-msgid "Yes"
-msgstr "Jah"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
-msgid "No"
-msgstr "Ei"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
-msgid "Unknown"
-msgstr "Tundmatu"
-
-#: contrib/admin/helpers.py:14
-msgid "Action:"
-msgstr "Toiming:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "toimingu aeg"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objekti id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objekti esitus"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "toimingu lipp"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "muudatuse tekst"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "logisissekanne"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "logisissekanded"
-
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
-msgid "None"
-msgstr "Puudub"
-
-#: contrib/admin/options.py:519
-#, python-format
-msgid "Changed %s."
-msgstr "Muutsin %s."
-
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
-msgid "and"
-msgstr "ja"
-
-#: contrib/admin/options.py:524
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Lisatud %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:528
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Muudetud %(list)s objektil %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:533
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Kustutatud %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:537
-msgid "No fields changed."
-msgstr "Ühtegi välja ei muudetud."
-
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" lisamine õnnestus."
-
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
-msgid "You may edit it again below."
-msgstr "Võite jätkata redigeerimist."
-
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
-#, python-format
-msgid "You may add another %s below."
-msgstr "Võite jätkata uue %s lisamisega."
-
-#: contrib/admin/options.py:634
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" muutmine õnnestus."
-
-#: contrib/admin/options.py:642
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" lisamine õnnestus. Te võite seda muuta."
-
-#: contrib/admin/options.py:773
-#, python-format
-msgid "Add %s"
-msgstr "Lisa %s"
-
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s primaarvõtmega %(key)r ei eksisteeri."
-
-#: contrib/admin/options.py:861
-#, python-format
-msgid "Change %s"
-msgstr "Muuda %s"
-
-#: contrib/admin/options.py:905
-msgid "Database error"
-msgstr "Andmebaasi viga"
-
-#: contrib/admin/options.py:941
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s muutmine õnnestus."
-msgstr[1] "%(count)s %(name)s muutmine õnnestus."
-
-#: contrib/admin/options.py:1020
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" kustutati."
-
-#: contrib/admin/options.py:1057
-#, python-format
-msgid "Change history: %s"
-msgstr "Muudatuste ajalugu: %s"
-
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Palun sisestage korrektne kasutajatunnus ja salasõna. Mõlemad väljad on "
-"tõstutundlikud."
-
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Teie sessioon on aegunud. Palun logige uuesti sisse."
-
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Paistab, et Teie brauser ei aktsepteeri küpsiseid. Palun võimaldage küpsised "
-"ning seejärel laadige see leht uuesti."
-
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Kasutajatunnused ei tohi sisaldada '@' märki."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Teie e-posti aadress ei ole Teie kasutajatunnus. Proovige '%s'."
-
-#: contrib/admin/sites.py:367
-msgid "Site administration"
-msgstr "Saidi administreerimine"
-
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Sisene"
-
-#: contrib/admin/sites.py:426
-#, python-format
-msgid "%s administration"
-msgstr "%s - administreerimine"
-
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Üks või enam %(fieldname)s objektis %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Üks või enam %(fieldname)s objektis %(name)s"
-
-#: contrib/admin/widgets.py:71
-msgid "Date:"
-msgstr "Kuupäev:"
-
-#: contrib/admin/widgets.py:71
-msgid "Time:"
-msgstr "Aeg:"
-
-#: contrib/admin/widgets.py:95
-msgid "Currently:"
-msgstr "Hetkel:"
-
-#: contrib/admin/widgets.py:95
-msgid "Change:"
-msgstr "Muuda:"
-
-#: contrib/admin/widgets.py:124
-msgid "Lookup"
-msgstr "Otsi"
-
-#: contrib/admin/widgets.py:236
-msgid "Add Another"
-msgstr "Lisa Uus"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Lehte ei leitud"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Vabandame, kuid soovitud lehte ei leitud."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Kodu"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serveri viga"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serveri viga (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serveri Viga <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"On tekkinud viga. Vastavasisuline teavitus on saadetud süsteemi haldajale "
-"ning vea parandamisega tegeletakse esimesel võimalusel. Täname mõistva "
-"suhtumise eest!"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Käivita valitud toiming"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Mine"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr "Tere tulemast,"
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentatsioon"
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "Muuda salasõna"
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "Logi välja"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administreerimisliides"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administreerimisliides"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Lisa"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Ajalugu"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
-msgid "View on site"
-msgstr "Näida lehel"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Palun parandage allolev viga"
-msgstr[1] "Palun parandage allolevad vead"
-
-#: contrib/admin/templates/admin/change_list.html:46
-#, python-format
-msgid "Add %(name)s"
-msgstr "Lisa %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:65
-msgid "Filter"
-msgstr "Filtreeri"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
-msgid "Delete"
-msgstr "Kustuta"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Selleks, et kustutada %(object_name)s '%(escaped_object)s', on vaja "
-"kustutada lisaks ka kõik seotud objecktid, aga teil puudub õigus järgnevat "
-"tüüpi objektide kustutamiseks:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Kas olete kindel, et soovite kustutada objekti %(object_name)s \"%"
-"(escaped_object)s\"? Kõik järgnevad seotud objektid kustutatakse koos "
-"sellega:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Jah, olen kindel"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Kustuta mitu objekti"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"%(object_name)s kustutamiseks on vaja kustutada ka seotud objektid, aga teil "
-"puudub õigus järgnevat tüüpi objektide kustutamiseks:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
-msgstr ""
-"Kas olete kindel, et soovite kustutada valitud %(object_name)s objektid? "
-"Kõik järgnevad objektid ja seotud objektid kustutatakse:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Rakenduses %(name)s leitud mudelid"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Muuda"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Teil ei ole õigust midagi muuta."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Hiljutised Toimingud"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Minu Toimingud"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ei leitud ühtegi"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Tundmatu sisu"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"On tekkinud viga seoses andmebaasiga. Veenduge, et kõik vajalikud "
-"andmebaasitabelid on loodud ning et andmebaas on vastava kasutaja poolt "
-"loetav."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Kasutajatunnus:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Salasõna:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Kuupäev/kellaaeg"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Kasutaja"
-
-#: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
-msgid "Action"
-msgstr "Toiming"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j. N Y, H:i"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Sellel objektil puudub muudatuste ajalugu. Tõenäoliselt ei kasutatud selle "
-"objekti lisamisel käesolevat administreerimislidest."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Näita kõiki"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Salvesta"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Otsing"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 tulemus"
-msgstr[1] "%(counter)s tulemust"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "Kokku %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Salvesta uuena"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Salvesta ja lisa uus"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Salvesta ja jätka muutmist"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Kõige pealt sisestage kasutajatunnus ja salasõna, seejärel on võimalik muuta "
-"täiendavaid kasutajaandmeid."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Kasutajatunnus"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Salasõna"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Salasõna (uuesti)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr ""
-"Sisestage sama salasõna uuesti veendumaks, et sisestamisel ei tekkinud vigu"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Sisestage uus salasõna kasutajale <strong>%(username)s</strong>"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Kustutan?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Tänan, et veetsite aega meie lehel."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Logi uuesti sisse"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Salasõna muutmine"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Salasõna muutmine õnnestus"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Teie salasõna on vahetatud."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Turvalisuse tagamiseks palun sisestage oma praegune salasõna ning seejärel "
-"uus salasõna.Veendumaks, et uue salasõna sisestamisel ei tekkinud vigu, "
-"palun sisestage see kaks korda."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Senine salasõna:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Uus salasõna:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Kinnita salasõna:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Muuda salasõna"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Uue parooli loomine"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Uue salasõna loomine valmis"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Teie salasõna on määratud. Võite nüüd sisse logida."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Uue salasõna loomise kinnitamine"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Sisestage uus salasõna"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Palun sisestage uus salasõna kaks korda, et saaksime veenduda, et "
-"sisestamisel ei tekkinud vigu."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Uue salasõna loomine ebaõnnestus"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Uue salasõna loomise link ei olnud korrektne. Võimalik, et seda on varem "
-"kasutatud. Esitage uue salasõna taotlus uuesti."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Uue parooli loomine õnnestus"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Teie poolt sisestatud e-posti aadressile on saadetud juhised uue salasõna "
-"määramiseks. Kiri peaks kohale jõudma varsti."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "See kiri saadeti teile, sest soovisite uut salasõna"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "teie kasutajakontole lehel %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Palun minge järmisele lehele ning sisestage uus salasõna"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Teie kasutajatunnus juhul, kui olete unustanud:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Täname meie lehte külastamast!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s meeskond"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Unustasid parool? Sisesta oma e-posti aadress ning me saadame sulle juhised "
-"uue parooli määramiseks."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-posti aadress:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Reseti parool"
-
-#: contrib/admin/templatetags/admin_list.py:299
-msgid "All dates"
-msgstr "Kõik kuupäevad"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Vali %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Vali %s mida muuta"
-
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
-msgid "site"
-msgstr "sait"
-
-#: contrib/admin/views/template.py:39
-msgid "template"
-msgstr "mall"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "lipik:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtreeri:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "vaade:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Rakendust %r ei leitud"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Mudelit %(model_name)r ei leitud rakendusest %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "seotud `%(app_label)s.%(data_type)s` objekt"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "mudel:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "seotud `%(app_label)s.%(object_name)s` objektid"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "kõik %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%s arv"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Objekti %s väljad"
-
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Täisarv"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Tõeväärtus (Kas tõene või väär)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (kuni %(max_length)s märki)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Komaga eraldatud täisarvud"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Kuupäev (kellaajata)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Kuupäev (kellaajaga)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Kümnendmurd"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "E-posti aadress"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Faili asukoht"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Ujukomaarv"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP aadress"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Tõeväärtus (Kas tõene, väär või tühi)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Seos ülem-mudeliga"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Telefoninumber"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Tekst"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Aeg"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S.A. osariik (kaks suurt tähte)"
-
-#: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "XML tekst"
-
-#: contrib/admindocs/views.py:387
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ei tundu olevat urlpattern objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Järjehoidjandid"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentatsiooni järjehoidjandid"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Järjehoidjandite paigaldamiseks lisa link "
-"järjehoidjatesse.\n"
-"Seejärel võite järjehoidjandi aktiveerida suvaliselt lehelt saidil. Mõned "
-"järgnevatest\n"
-"järjehoidjanditest eeldavad, et külastate saiti arvutist, mis kuulub "
-"\"sisemiste\" arvutite nimekirja.\n"
-"(konsulteerige süsteemiadministraatoriga, kui te ei tea, mida tähendab "
-"\"sisemine\")</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Selle lehekülje dokumentatsioon"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Suunab teid suvalisel lehel asudes selle vaate dokumentatsioonile, mis antud "
-"lehe genereerib."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Näita objekti ID-d"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Näitab sisutüüpi ning unikaalset ID'd lehtedel, mis esitavad mingit kindlat "
-"objekti."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Muuda seda objekti (samas aknas)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Suunab administreeimislehele lehtedelt, mis esitavad mingit kindlat objekti."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Muuda seda objekti (uues aknas)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Sama, mis üleval, kuid avab admin. lehe uues aknas."
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "Isiklikud andmd"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "Õigused"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "Tähtsad kuupäevad"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "Grupid"
-
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Lisa kasutaja"
-
-#: contrib/auth/admin.py:106
-msgid "Password changed successfully."
-msgstr "Salasõna edukalt muudetud."
-
-#: contrib/auth/admin.py:112
-#, python-format
-msgid "Change password: %s"
-msgstr "Muuda salasõna: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr "Nõutav. 30 tähemärki või vähem. Ainult tähed, numbrid ja alakriipsud."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "See väärtus võib sisaldada ainult tähti, numbreid ja alakriipse."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Salasõna kinnitus"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "Sama kasutajatunnusega kasutaja on juba olemas."
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
-msgid "The two password fields didn't match."
-msgstr "Kaks sisestatud parooli ei olnud identsed."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "See konto ei ole aktiivne."
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Teie veebibrauser ei aktsepteeri küpsiseid, aga küpsised on sisselogimiseks "
-"vajalikud."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "E-posti aadress"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Selle e-posti aadressiga ei ole seotud ühtegi kasutajakontot. Veenduge, et "
-"olete registreerunud."
-
-#: contrib/auth/forms.py:135
-#, python-format
-msgid "Password reset on %s"
-msgstr "Salasõna vahetatud saidil %s"
-
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Uus salasõna"
-
-#: contrib/auth/forms.py:144
-msgid "New password confirmation"
-msgstr "Uue salasõna kinnitus"
-
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Vana salasõna"
-
-#: contrib/auth/forms.py:177
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Te sisestasite oma vana parooli vigaselt. Palun sisestage see uuesti."
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
-msgid "name"
-msgstr "nimi"
-
-#: contrib/auth/models.py:65
-msgid "codename"
-msgstr "koodnimi"
-
-#: contrib/auth/models.py:68
-msgid "permission"
-msgstr "õigus"
-
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
-msgid "permissions"
-msgstr "õigused"
-
-#: contrib/auth/models.py:90
-msgid "group"
-msgstr "grupp"
-
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
-msgid "groups"
-msgstr "grupid"
-
-#: contrib/auth/models.py:128
-msgid "username"
-msgstr "kasutajatunnus"
-
-#: contrib/auth/models.py:129
-msgid "first name"
-msgstr "eesnimi"
-
-#: contrib/auth/models.py:130
-msgid "last name"
-msgstr "perenimi"
-
-#: contrib/auth/models.py:131
-msgid "e-mail address"
-msgstr "e-posti aadress"
-
-#: contrib/auth/models.py:132
-msgid "password"
-msgstr "salasõna"
-
-#: contrib/auth/models.py:132
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Formaat '[algoritm]$[sool]$[kuueteistkümnendtulend]' või kasutage <a href="
-"\"password/\">salasõna muutmise vormi</a>."
-
-#: contrib/auth/models.py:133
-msgid "staff status"
-msgstr "personalistaatus"
-
-#: contrib/auth/models.py:133
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Määrab, kas kasutaja saab sisse logida sellesse admininistreerimisliidesesse."
-
-#: contrib/auth/models.py:134
-msgid "active"
-msgstr "aktiivne"
-
-#: contrib/auth/models.py:134
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Määrab, kas see konto on aktiivne. Kustutamise asemel lihtsalt deaktiveerige "
-"konto."
-
-#: contrib/auth/models.py:135
-msgid "superuser status"
-msgstr "superkasutaja staatus"
-
-#: contrib/auth/models.py:135
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "Määrab, kas see kasutaja omab automaatselt ja alati kõiki õigus."
-
-#: contrib/auth/models.py:136
-msgid "last login"
-msgstr "viimane sisenemine"
-
-#: contrib/auth/models.py:137
-msgid "date joined"
-msgstr "liitumise kuupäev"
-
-#: contrib/auth/models.py:139
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Lisaks neile õigustele, mis kasutajale on määratud, omab kasutaja ka neid "
-"õigusi, mis on nendel gruppidel, millesse ta kuulub."
-
-#: contrib/auth/models.py:140
-msgid "user permissions"
-msgstr "kasutajaõigused"
-
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "kasutaja"
-
-#: contrib/auth/models.py:145
-msgid "users"
-msgstr "kasutajad"
-
-#: contrib/auth/models.py:301
-msgid "message"
-msgstr "sõnum"
-
-#: contrib/auth/views.py:56
-msgid "Logged out"
-msgstr "Välja logitud"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
-msgid "Enter a valid e-mail address."
-msgstr "Sisestage korrektne e-posti aadress:"
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "Sisu"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "Meta-andmed"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Saidi %(site_name)s kommentaarid"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Viimased kommentaarid saidil %(site_name)s"
-
-#: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
-msgid "Name"
-msgstr "Nimi"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-posti aadress"
-
-#: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
-msgid "Comment"
-msgstr "Kommentaar"
-
-#: contrib/comments/forms.py:173
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Jälgige oma keelekasutust. Sõna %s ei ole lubatud."
-msgstr[1] "Jälgige oma keelekasutust. Sõnad %s ei ole lubatud."
-
-#: contrib/comments/forms.py:180
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Kui sisestate sellesse lahtrisse midagi, loetakse kommentaar rämpsuks"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
-msgid "content type"
-msgstr "sisutüüp"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "objekti ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "kasutaja pärisnimi"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "kasutaja e-posti aadress"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "kasutaja URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "kommentaar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "loomise kuupäev/kellaaeg"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "on avalik"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Eemaldage siit linnuke, et varjata kommentaar saidilt."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "on eemaldatud"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Märkige siia linnuke, kui see kommentaar on ebasobiv. Kommentaari asemel "
-"kuvatakse kirja \"Kommentaar on kustutatud\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "kommentaarid"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Selle kommentaari postitas sisselogitud kasutaja, mistõttu ei ole nimetus "
-"muudetav."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Selle kommentaari postitas sisselogitud kasutaja, mistõttu ei ole e-posti "
-"aadress muudetav."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Postitatud kasutaja %(user)s poolt %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "märge"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "kuupäev"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "kommentaari märge"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "kommentaari märked"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Märgi kommentaar sobivaks"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Oled kindel, et soovid teha selle kommentaari avalikuks?"
-
-#: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
-msgid "Approve"
-msgstr "Sobib"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Aitäh, et märkisid kommentaari sobivaks"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Aitäh, et leidsid aega parandamaks arutelude kvaliteeti meie lehel"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Eemalda kommentaar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Oled kindel, et soovid selle kommentaari eemaldada?"
-
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Eemalda"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Aitäh, et eemaldasid kommentaari"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Märgi see kommentaar"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Oled kindel, et soovid selle kommentaari märkida?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Märge"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Aitäh, et märkisid kommentaari"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Postita"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Eelvaade"
-
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Kommentaaride modereerimise nimekiri"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Ei leidnud modereerimiseks sobivaid kommentaare"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-posti aadress"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Sisselogitud?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP aadress"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Postitamise kuupäev"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "jah"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "ei"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Tänan kommenteerimast"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Aitäh kommentaari eest"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Kommentaari eelvaade"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Palun parandage allolev viga"
-msgstr[1] "Palun parandage allolevad vead"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Postita kommentaar"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "või tee muudatused"
-
-#: contrib/contenttypes/models.py:70
-msgid "python model class name"
-msgstr "pythoni mudeli klassinimi"
-
-#: contrib/contenttypes/models.py:75
-msgid "content types"
-msgstr "sisutüübid"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Näide: '/about/contact/'. Veenduge, et URL algaks ja lõppeks kaldkriipsuga."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"See väärtus võib sisaldada ainult tähti, numbreid, alakriipse, mõttekriipse "
-"või kaldkriipse."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Lisavalikud"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "pealkiri"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "sisu"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "võimalda kommentaarid"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "mall"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Näide: 'flatpages/contact_page.html'. Kui mall on määramata, kasutatakse "
-"vaikimisi malli 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "registreerumine nõutav"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Kui see on valitud, näevad lehte ainult sisselogitud kasutajad"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "sisuleht"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "sisulehed"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Vabandame, kuid vorm on aegunud. Palun jätkake vormi täitmist käesolevalt "
-"lehelt."
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Geomeetriline väärtus puudub."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Vigane geomeetriline väärtus."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Vigane geomeetriline tüüp."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Geomeetria teisendamisel geomeetria vormivälja SRID-ks tekkis viga."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f miljon"
-msgstr[1] "%(value).11f miljonit"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miljard"
-msgstr[1] "%(value).1f miljardit"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f triljon"
-msgstr[1] "%(value).1f triljonit"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "üks"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "kaks"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "kolm"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "neli"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "viis"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "kuus"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "seitse"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "kaheksa"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "üheksa"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "täna"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "homme"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "eile"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Sisesta postiindeks kujul NNNN või ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "See väli peab koosnema ainult numbritest."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Siin väljal peab olema kas 7 või 8 numbrit."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Sisesta korrektne CUIT kujul XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "Vale CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Kärnten"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Alam-Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Ülem-Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Steiermark"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirool"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Viin"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Sisesta postiindeks kujul XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Sisesta kehtiv Austria sotsiaalkindlustusnumber formaadis XXX-XX-XXXX."
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Sisesta neljakohaline postiindeks."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Sisesta postiindeks kujul XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefoninumbrid peavad olema kujul XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Vali korrektne Brasiilia osariik. Valitud osariik ei ole korrektne."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Mittekorrektne CPF number."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "See väli võib olla maksimaalselt 11 või 14 sümbolit."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Mittekorrektne CNPJ number."
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "See väli peab olema vähemalt 14-kohaline arv."
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Sisesta postiindeks kujul XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Sisesta korrektne Kanada sotsiaalturvatunnus formaadis XXX-XXX-XXXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Sisesta kehtiv Šveitsi isiku- või passinumber kujul X1234567<0 või "
-"1234567890."
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Sisesta korrektne Tšiili RUT."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Sisesta korrektne Tšiili RUT formaadis XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "Tšiili RUT on ebakorrektne."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Kesk-Boheemia regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Lõuna-Boheemia regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilseni regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Carlsbadi regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Usti regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Libereci regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradeci regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysocina regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Lõuna-Moraavia regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouci regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlini regioon"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moraavia-Sileesia regioon"
-
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Sisesta postiindeks kujul XXXXX või XXX XX."
-
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Sisesta sünninumber formaadis XXXXXX/XXXX või XXXXXXXXXX"
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Ebasobiv valikuline parameeter Sugu, sobivad väärtused on 'f' (naine) ja "
-"'m' (mees)"
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Enter a valid birth number."
-msgstr "Sisesta sobiv sünninumber."
-
-#: contrib/localflavor/cz/forms.py:106
-msgid "Enter a valid IC number."
-msgstr "Sisesta ID kaardi number."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Baieri"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berliin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Vorpommern"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Alam-Saksi"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Nordrhein-Westfalen"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rheinland-Pfalz"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarimaa"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saksimaa"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saksi-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Tüüringi"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Sisesta postiindeks kujul XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Sisesta kehtiv Saksamaa ID-kaardi number kujul XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Baleaarid"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúzcoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Orense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Astuuria"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Vizcaya"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andaluusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragón"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Astuuria"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Baleaarid"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskimaa"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanaari saared"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilla-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilla-León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Kataloonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Sisesta korrektne postiindeks vahemikus 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Sisesta korrektne telefoninumber, mis on formaadis 6XXXXXXXX, 8XXXXXXXX või "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Palun sisesta korrektne NIF, NIE või CIF."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Palun sisesta korrektne NIF või NIE."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Vale NIF-i kontrollsumma."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Vale NIE kontrollsumma."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Vale CIF-i kontrollsumma."
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Palun sisesta korrektne kontonumber formaadis XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Pangakonto numbri kontrollsumma on vale."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Sisesta korrektne Soome sotsiaalturvatunnus."
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Sisesta postiindeks kujul XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Sisesta kehtiv Islandi isikukood formaadis XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Islandi isikukood ei ole korrektne."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Sisesta korrektne postiindeks."
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Sisesta korrektne sotsiaalturvatunnus."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Sisesta korrektne käibemaksukohuslase kood."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Sisesta postiindeks kujul XXXXXXX või XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Sisesta kehtiv postiindeks"
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Sisesta kehtiv telefoninumber"
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Sisesta kehtiv SoFi number"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friisimaa"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningeni provints"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburgi provints"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Põhja-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Põhja-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrechti provints"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Lõuna-Holland"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Sisesta kehtiv Norra sotsiaalturvatunnus."
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Sellel väljal peab olema 8 numbrit."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Sellel väljal peab olema 11 numbrit."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Riiklik isikukood koosneb 11 numbrist."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Isikukoodil on vale kontrollsumma."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Sisesta maksumaksja number (NIP) formaadis XXX-XXX-XX-XX või XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Maksukohustusnumbril (NIP) on vale kontrollsumma."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Riikliku Äriregistri Number (REGON) koosneb 9 või 14 numbrist."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Riiklikul Äriregistri Numbri (REGON) kontrollsumma on vale."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Sisesta postiindeks kujul XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Alam-Sileesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kujawy-Pomorze"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Łódź"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Väike-Poola"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masoovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Podkarpacie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlaasia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomorze"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Sileesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Święty Krzyżi"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Suur-Poola"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Lääne-Pomorze"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Sisestage korrektne CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Sisestage korrektne CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Sisesta korrektne IBAN kujul ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefoninumbrid peavad olema kujul XXXX-XXXXXX"
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Sisesta postiindeks kujul XXXXXX"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banská Bystrica regioon"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava regioon"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Košice regioon"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra regioon"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešovi regioon"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenšíni regioon"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava regioon"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilina regioon"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Sisesta kehtiv postiindeks."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Suur-London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Suur-Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Lõuna-Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne ja Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "Lääne-Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "Lääne-Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Lääne-Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Piirid"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Kesk-Šotimaa"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney saared"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetlandi saared"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Inglismaa"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Põhja-Iirimaa"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Šotimaa"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Sisesta postiindeks kujul XXXXX või XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Sisesta kehtiv U.S. Social Security number formaadis XXX-XX-XXXX."
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Sisesta kehtiv Lõuna-Aafrika ID-number"
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Sisesta kehtiv Lõuna-Aafrika postiindeks"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "ümbersuunatav asukoht"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"See peaks olema absoluutne asukoht, v.a. domeeninimi. Näide: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "suuna aadressile"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"See võib olla kas absoluutne asukoht (nagu ülemine) või täielik URL algusega "
-"'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "suunamine"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "suunamised"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sessioonivõti"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sessiooni andmed"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "kehtivusaja lõpp"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sessioon"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessioonid"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domeeninimi"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "hüüdnimi"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "saidid"
-
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "See väärtus peab olema täisarv."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "See väärtus peab olema kas tõene või väär"
-
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "See lahter ei tohi olla tühi."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Sisestage ainult komaga eraldatud numbreid."
-
-#: db/models/fields/__init__.py:474
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Sisestage korrektne kuupäev formaadis AAAA-KK-PP."
-
-#: db/models/fields/__init__.py:483
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ebakorrektne kuupäev: %s"
-
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Sisestage korrektne kuupäev ja kellaaeg kujul AAAA-KK-PP TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:601
-msgid "This value must be a decimal number."
-msgstr "See väärtus peab olema kümnendarv."
-
-#: db/models/fields/__init__.py:686
-msgid "This value must be a float."
-msgstr "See väärtus peab olema murdarv."
-
-#: db/models/fields/__init__.py:746
-msgid "This value must be either None, True or False."
-msgstr "See väärtus peab olema kas tühi, tõene või väär."
-
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Sisestage korrektne kellaaeg formaadis TT:MM[:ss[.uuuuuu]]"
-
-#: db/models/fields/related.py:816
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Et valida mitu, hoidke all \"Control\"-nuppu (Maci puhul \"Command\")."
-
-#: db/models/fields/related.py:894
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Palun sisestage korrektne %(self)s ID. Väärtus %(value)r on vigane."
-msgstr[1] ""
-"Palun sisestage korrektne %(self)s ID. Väärtused %(value)r on vigased."
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "See lahter on nõutav."
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Sisestage korrektne väärtus."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Veenduge, et see väärtus sisaldab kõige rohkem %(max)d tähemärki (hetkel on %"
-"(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Veenduge, et see väärtus sisaldab vähemalt %(min)d märki (hetkel on %(length)"
-"d)."
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "Sisestage täisarv."
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Veenduge, et see väärtus on väiksem või võrdne kui %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Veenduge, et see väärtus on suurem või võrdne kui %s."
-
-#: forms/fields.py:195 forms/fields.py:224
-msgid "Enter a number."
-msgstr "Sisestage arv."
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Veenduge, et kogu numbrikohtade arv ei ületaks %s."
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Veenduge, et komakohtade arv ei ületaks %s."
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Veenduge, et komast vasakul olevaid numbreid ei oleks rohkem kui %s."
-
-#: forms/fields.py:288 forms/fields.py:863
-msgid "Enter a valid date."
-msgstr "Sisestage korrektne kuupäev."
-
-#: forms/fields.py:322 forms/fields.py:864
-msgid "Enter a valid time."
-msgstr "Sisestage korrektne kellaaeg."
-
-#: forms/fields.py:361
-msgid "Enter a valid date/time."
-msgstr "Sisestage korrektne kuupäev ja kellaaeg."
-
-#: forms/fields.py:447
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Ühtegi faili ei saadetud. Kontrollige vormi kodeeringutüüpi."
-
-#: forms/fields.py:448
-msgid "No file was submitted."
-msgstr "Ühtegi faili ei saadetud."
-
-#: forms/fields.py:449
-msgid "The submitted file is empty."
-msgstr "Saadetud fail on tühi."
-
-#: forms/fields.py:450
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Veenduge, et see failinimi sisaldab kõige rohkem %(max)d tähemärki (hetkel %"
-"(length)d)."
-
-#: forms/fields.py:483
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Laadige korrektne pilt. Fail, mille laadisite, ei olnud kas pilt või oli "
-"fail vigane."
-
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Sisestage korrektne URL."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "See URL näib olevat katkine."
-
-#: forms/fields.py:625 forms/fields.py:703
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Valige korrektne väärtus. %(value)s ei ole valitav."
-
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
-msgid "Enter a list of values."
-msgstr "Sisestage väärtuste nimekiri."
-
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Sisestage korrektne IPv4 aadress."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"See väärtus võib sisaldada ainult tähti, nubmreid, alljooni ja sidekriipse."
-
-#: forms/formsets.py:271 forms/formsets.py:273
-msgid "Order"
-msgstr "Järjestus"
-
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s peab olema unikaalne %(date_field)s %(lookup)s suhtes."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Sellise %(field_label)s-väljaga %(model_name)s on juba olemas."
-
-#: forms/models.py:594
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Palun parandage duplikaat-andmed lahtris %(field)s."
-
-#: forms/models.py:598
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Palun parandage duplikaat-andmed lahtris %(field)s, mis peab olema unikaalne."
-
-#: forms/models.py:604
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-""
-
-#: forms/models.py:612
-msgid "Please correct the duplicate values below."
-msgstr "Palun parandage allolevad duplikaat-väärtused"
-
-#: forms/models.py:867
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Pesastatud välisvõti ei sobi ülemobjekti primaarvõtmega."
-
-#: forms/models.py:930
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Valige korrektne väärtus. Valitud väärtus ei ole valitav."
-
-#: forms/models.py:1004
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Valige korrektne väärtus. %s ei ole valitav."
-
-#: forms/models.py:1006
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" ei ole sobiv väärtust primaarvõtmeks."
-
-#: template/defaultfilters.py:767
-msgid "yes,no,maybe"
-msgstr "jah,ei,võib-olla"
-
-#: template/defaultfilters.py:798
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bait"
-msgstr[1] "%(size)d baiti"
-
-#: template/defaultfilters.py:800
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:802
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:803
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.l."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "e.l."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PL"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "EL"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "südaöö"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "keskpäev"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "esmaspäev"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "teisipäev"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "kolmapäev"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "neljapäev"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "reede"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "laupäev"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "pühapäev"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "esmasp."
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "teisip."
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "kolmap."
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "neljap."
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "reede"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "laup."
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "pühap."
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "jaanuar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "veebruar"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "märts"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "aprill"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "mai"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juuni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juuli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "august"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktoober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "detsember"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jaan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "veeb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "märts"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sept"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dets"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Jaan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Veeb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dets."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "või"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "aasta"
-msgstr[1] "aastat"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "kuu"
-msgstr[1] "kuud"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "nädal"
-msgstr[1] "nädalat"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "päev"
-msgstr[1] "päeva"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "tund"
-msgstr[1] "tundi"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minut"
-msgstr[1] "minutit"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutit"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:399
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:401
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:417
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:418
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s edukalt loodud."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s edukalt muudetud."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s kustutatud."
diff --git a/parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 2dc026e..0000000
--- a/parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 5a62fe3..0000000
--- a/parts/django/django/conf/locale/et/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,117 +0,0 @@
-# Estonian translation for the Django Project.
-# Copyright (C) 2008, Django Project
-# This file is distributed under the same license as the django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: <removethis-eallik_at_gmail-com>\n"
-"POT-Creation-Date: 2008-06-02 19:42+0300\n"
-"PO-Revision-Date: 2008-06-17 12:29+0300\n"
-"Last-Translator: Erik Allik <removethis-eallik_at_gmail-com>\n"
-"Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Saadaval %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Vali kõik"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Lisa"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Eemalda"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valitud %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Tee valik(ud) ja klõpsa"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Puhasta kõik"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Jaanuar Veebruar Märts Aprill Mai Juuni Juuli August September Oktoober "
-"November Detsember"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "P E T K N R L"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Pühapäev Esmaspäev Teisipäev Kolmapäev Neljapäev Reede Laupäev"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Näita"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Varja"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Praegu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Kell"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Vali aeg"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Kesköö"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 hommikul"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Keskpäev"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Tühista"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Täna"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Eile"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Homme"
diff --git a/parts/django/django/conf/locale/et/__init__.py b/parts/django/django/conf/locale/et/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/et/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/et/formats.py b/parts/django/django/conf/locale/et/formats.py
deleted file mode 100644
index 101fcee..0000000
--- a/parts/django/django/conf/locale/et/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'G:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = u' ' # Non-breaking space
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/eu/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/eu/LC_MESSAGES/django.mo
deleted file mode 100644
index c19c321..0000000
--- a/parts/django/django/conf/locale/eu/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/eu/LC_MESSAGES/django.po b/parts/django/django/conf/locale/eu/LC_MESSAGES/django.po
deleted file mode 100644
index 37a829d..0000000
--- a/parts/django/django/conf/locale/eu/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4248 +0,0 @@
-# translation of django.po to
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-02-08 19:37+0100\n"
-"PO-Revision-Date: 2008-02-14 22:12+0100\n"
-"Last-Translator: Ibon\n"
-"Language-Team: <es@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: conf/global_settings.py:39
-msgid "Arabic"
-msgstr "Arabiera"
-
-#: conf/global_settings.py:40
-msgid "Bengali"
-msgstr "Bengalera"
-
-#: conf/global_settings.py:41
-msgid "Bulgarian"
-msgstr "Bulgariera"
-
-#: conf/global_settings.py:42
-msgid "Catalan"
-msgstr "Katalana"
-
-#: conf/global_settings.py:43
-msgid "Czech"
-msgstr "Txekiera"
-
-#: conf/global_settings.py:44
-msgid "Welsh"
-msgstr "Gales"
-
-#: conf/global_settings.py:45
-msgid "Danish"
-msgstr "Daniera"
-
-#: conf/global_settings.py:46
-msgid "German"
-msgstr "Alemaniera"
-
-#: conf/global_settings.py:47
-msgid "Greek"
-msgstr "Greziera"
-
-#: conf/global_settings.py:48
-msgid "English"
-msgstr "Ingeles"
-
-#: conf/global_settings.py:49
-msgid "Spanish"
-msgstr "Espainola"
-
-#: conf/global_settings.py:50
-msgid "Argentinean Spanish"
-msgstr "Argentinako espainola"
-
-#: conf/global_settings.py:51
-msgid "Persian"
-msgstr "Persiera"
-
-#: conf/global_settings.py:52
-msgid "Finnish"
-msgstr "Finlandesa"
-
-#: conf/global_settings.py:53
-msgid "French"
-msgstr "Frantzesa"
-
-#: conf/global_settings.py:54
-msgid "Gaeilge"
-msgstr "Gaelikoa"
-
-#: conf/global_settings.py:55
-msgid "Galician"
-msgstr "Galiziarra"
-
-#: conf/global_settings.py:56
-msgid "Hungarian"
-msgstr "Hungarierra"
-
-#: conf/global_settings.py:57
-msgid "Hebrew"
-msgstr "Hebreera"
-
-#: conf/global_settings.py:58
-msgid "Croatian"
-msgstr "Kroaziarra"
-
-#: conf/global_settings.py:59
-msgid "Icelandic"
-msgstr "Islandiera"
-
-#: conf/global_settings.py:60
-msgid "Italian"
-msgstr "Italiera"
-
-#: conf/global_settings.py:61
-msgid "Japanese"
-msgstr "Japoniera"
-
-#: conf/global_settings.py:62
-msgid "Korean"
-msgstr "Koreera"
-
-#: conf/global_settings.py:63
-msgid "Khmer"
-msgstr "khemerera"
-
-#: conf/global_settings.py:64
-msgid "Kannada"
-msgstr "Kanadiera"
-
-#: conf/global_settings.py:65
-msgid "Latvian"
-msgstr "Lituaniera"
-
-#: conf/global_settings.py:66
-msgid "Macedonian"
-msgstr "Mazedoniera"
-
-#: conf/global_settings.py:67
-msgid "Dutch"
-msgstr "Holandesa"
-
-#: conf/global_settings.py:68
-msgid "Norwegian"
-msgstr "Norvegiera"
-
-#: conf/global_settings.py:69
-msgid "Polish"
-msgstr "Poloniera"
-
-#: conf/global_settings.py:70
-msgid "Portugese"
-msgstr "Portugalera"
-
-#: conf/global_settings.py:71
-msgid "Brazilian"
-msgstr "Brasilgo portugalera"
-
-#: conf/global_settings.py:72
-msgid "Romanian"
-msgstr "Errumaniera"
-
-#: conf/global_settings.py:73
-msgid "Russian"
-msgstr "Errusiera"
-
-#: conf/global_settings.py:74
-msgid "Slovak"
-msgstr "Eslovakiera"
-
-#: conf/global_settings.py:75
-msgid "Slovenian"
-msgstr "Esloveniera"
-
-#: conf/global_settings.py:76
-msgid "Serbian"
-msgstr "Serbiera"
-
-#: conf/global_settings.py:77
-msgid "Swedish"
-msgstr "Suediera"
-
-#: conf/global_settings.py:78
-msgid "Tamil"
-msgstr "Tamilera"
-
-#: conf/global_settings.py:79
-msgid "Telugu"
-msgstr "Telegu hizkuntza"
-
-#: conf/global_settings.py:80
-msgid "Turkish"
-msgstr "Turkiera"
-
-#: conf/global_settings.py:81
-msgid "Ukrainian"
-msgstr "Ukrainera"
-
-#: conf/global_settings.py:82
-msgid "Simplified Chinese"
-msgstr "Txinera (sinpletua)"
-
-#: conf/global_settings.py:83
-msgid "Traditional Chinese"
-msgstr "Txinera (tradizionala)"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3> %s gatik:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Dena"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Edozein data"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Gaur"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Aurreko 7 egunak"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Hilabete hau"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Urte hau"
-
-#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231
-#: oldforms/__init__.py:592
-msgid "Yes"
-msgstr "Bai"
-
-#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231
-#: oldforms/__init__.py:592
-msgid "No"
-msgstr "Ez"
-
-#: contrib/admin/filterspecs.py:154 newforms/widgets.py:231
-#: oldforms/__init__.py:592
-msgid "Unknown"
-msgstr "Ezezaguna"
-
-#: contrib/admin/models.py:18
-msgid "action time"
-msgstr "Ekintz hordua"
-
-#: contrib/admin/models.py:21
-msgid "object id"
-msgstr "Objetuaren id"
-
-#: contrib/admin/models.py:22
-msgid "object repr"
-msgstr "Objeturaren repr"
-
-#: contrib/admin/models.py:23
-msgid "action flag"
-msgstr "Ekintza botoia"
-
-#: contrib/admin/models.py:24
-msgid "change message"
-msgstr "Mezua aldatu"
-
-#: contrib/admin/models.py:27
-msgid "log entry"
-msgstr "Log sarrera"
-
-#: contrib/admin/models.py:28
-msgid "log entries"
-msgstr "log sarrerak"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Ez da lekua aurkitu"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Barkatu, eskatutako lekua ezin daiteke aurkitu"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/base.html:37
-#: contrib/admin/templates/admin/change_form.html:12
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/delete_confirmation.html:5
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:4
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-msgid "Home"
-msgstr "Hasiera"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serbidore errorea"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serbidor errorea (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serbidore Errorea <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr "Arazo bat izan da. Web guneraren administradorea e-mail bidez ohartuko da eta laister konpondua egon beharko luke. Barkatu arazoak."
-
-#: contrib/admin/templates/admin/base.html:26
-msgid "Welcome,"
-msgstr "Ongi etorri."
-
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentazioa"
-
-#: contrib/admin/templates/admin/base.html:29
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:45
-msgid "Change password"
-msgstr "Hitz ezkutua aldatu"
-
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/comments/templates/comments/form.html:6
-msgid "Log out"
-msgstr "Atera"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django admin. gunea"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administradorea"
-
-#: contrib/admin/templates/admin/change_form.html:14
-#: contrib/admin/templates/admin/index.html:28
-msgid "Add"
-msgstr "Gehitu"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/object_history.html:4
-msgid "History"
-msgstr "Aurrekoak"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "Lekuaren bista"
-
-#: contrib/admin/templates/admin/change_form.html:31
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Arren zuzendu ondoko akatsa"
-msgstr[1] "Arren zuzendu ondoko akatsak"
-
-#: contrib/admin/templates/admin/change_form.html:49
-msgid "Ordering"
-msgstr "Ordenaketa"
-
-#: contrib/admin/templates/admin/change_form.html:52
-msgid "Order:"
-msgstr "Ordena:"
-
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Gehitu %(name)s"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:8
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "Ezabatu"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:13
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects: "
-"%(object_name)s '%(escaped_object)s' ezabatuz, erlazionatutako objetuak ere ezabatuko ditu, baina zure kontuak ez du baimenik, hurrengo objetuak ezabatzeko:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:20
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Ziur zaude %(object_name)s \"%(escaped_object)s\" ezabatu nai duzula ? "
-"Erlazionaturik dauden hurrengo elementuak ere ezabatuko dira:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:25
-msgid "Yes, I'm sure"
-msgstr "Bai, ziur nago"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s gatik"
-
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "Filtroa"
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s aplikazioan Modeloak."
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Aldatu"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Ezer aldatzeko baimenik ez dezu."
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Azken ekintzak"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "Nere ekintzak"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Ez dago ezer"
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr "Zerbait gaizki dago zure data-basearekin. Ziurtatu ezazu data-baseko taulak sortuak izan direla eta usuario egokiarengatik irakurriak izan daitekela"
-
-#: contrib/admin/templates/admin/login.html:17
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-msgid "Username:"
-msgstr "Usuario Izena:"
-
-#: contrib/admin/templates/admin/login.html:20
-#: contrib/comments/templates/comments/form.html:8
-msgid "Password:"
-msgstr "Hitz ezkutua:"
-
-#: contrib/admin/templates/admin/login.html:25
-#: contrib/admin/views/decorators.py:25
-msgid "Log in"
-msgstr "Sartu"
-
-#: contrib/admin/templates/admin/object_history.html:17
-msgid "Date/time"
-msgstr "Data/ordua"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "User"
-msgstr "Usuarioa"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "Action"
-msgstr "Ekintza"
-
-#: contrib/admin/templates/admin/object_history.html:25
-msgid "DATE_WITH_TIME_FULL"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:35
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr "Objetu honek ez du alketa zerrenda bat. Ziur asko, administrazio leku hau erabili gabe gehitua izan da."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Dena erakutsi"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Aurrera"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s emaitza"
-msgstr[1] "%(counter)s emaitzak"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s guztira"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Berria bezala gorde"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Gorde eta beste bat gehitu"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Gorde eta aldatzen jarraitu"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Gorde"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "Lehenengo usuario izena eta hitz ezkutua idatzi. Gero usuarioaren aukera gehiago aldatu ditzakezu"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "Usuario izena"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-msgid "Password"
-msgstr "Hitz ezkutua"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-#: contrib/admin/templates/admin/auth/user/change_password.html:38
-msgid "Password (again)"
-msgstr "Hitz ezkutua (berriro)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-msgid "Enter the same password as above, for verification."
-msgstr "Idatzi berriro hitz ezkutua."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Hitz ezkutu berria idatzi <strong>%(username)s</strong> usuarioarentzat."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Markadoreak"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentazio markadoreak"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Markadoreak instalatzeko eraman linka zure erreminta panelera (toolbar).\n"
-"Orain markadorea lekuko edozein horritik aukeratu dezakezu. Hauetako \n"
-"markadore batzu, zure ordenadorea 'barnekoa' bezala erregistratua egotea\n"
-"behar dute. Hitzegin web lekuaren administradorearekin azalpen gehiagorako.</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Web horri honentzat dokumentazioa"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "Edozein lekutik, horriaren bista sortzaileara (view) salto egiten du."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Objetuaren ID erakutsi"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "Objetu bakarra erakusten duten horrietan, eduki mota (content-type) eta horriaren ID bakarra erakutsi, ."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Objetu hau aldatu ( leiho hau)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Objetu bakarra erakusten horrietan, adminiztrazio gunera joan."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Objetu hay aldatu (leiho berria)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Goian bezala baina administrzazio gune leio berrian irekitzen."
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Mila esker gaur zure denbora web gunean erabiltzegatik."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Berrio sartu (log in)"
-
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:9
-msgid "Password change"
-msgstr "Hitz ezkutua aldatu"
-
-#: contrib/admin/templates/registration/password_change_done.html:5
-#: contrib/admin/templates/registration/password_change_done.html:9
-msgid "Password change successful"
-msgstr "Hitz ezkutuaren aldaketa arrakastatsua"
-
-#: contrib/admin/templates/registration/password_change_done.html:11
-msgid "Your password was changed."
-msgstr "Hitz ezkutua aldatua izan da"
-
-#: contrib/admin/templates/registration/password_change_form.html:11
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr "Idatzi hitz ezkutu zaharra segurtasun arrazoiengatik eta gero hitz ezkutu berria bi aldiz, akatsik egiten ez duzula ziurtatu dezagun."
-
-#: contrib/admin/templates/registration/password_change_form.html:16
-msgid "Old password:"
-msgstr "Hitz ezkutu zaharra"
-
-#: contrib/admin/templates/registration/password_change_form.html:18
-msgid "New password:"
-msgstr "Hitz ezkutu berria:"
-
-#: contrib/admin/templates/registration/password_change_form.html:20
-msgid "Confirm password:"
-msgstr "Hitz ezkutua baieztatu:"
-
-#: contrib/admin/templates/registration/password_change_form.html:22
-msgid "Change my password"
-msgstr "Nire hitz ezkutua aldatu"
-
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Hitz ezkutua ezabatu"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Hitz ezkutuaren ezabaketa zuzena"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed a new password to the e-mail address you submitted. You "
-"should be receiving it shortly."
-msgstr "Hitz ezkutu berria e-mail bidez bidali dizugu. Epe laburrean jasokor duzu."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Mezu elektroniko hau jaso dezu, hitz ezkutuaren ezabaketa eskatu duzulako"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "%(site_name)s usuario kontuarentzat"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "Zure hitz ezkutu berria %(new_password)s da"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Hitz ezkutua aldatu nai baduzu, zoaz web horri honetara joan:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "Zure usuario izena (ahaztu badezu):"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "Mila esker gure web gunea erabiltzeagatik!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s web gunearen taldea"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll reset "
-"your password and e-mail the new one to you."
-msgstr "Hitz ezkutua ahaztu dezu ? Hidatzi zure e-mail helbidea, eta hitz ezkutu berri bat bidaliko dizugu."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mail helbidea:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Hitz ezkutua ezabatu"
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Ordua:"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Orain:"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Aldatu:"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Data guztiak"
-
-#: contrib/admin/views/auth.py:20 contrib/admin/views/main.py:267
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s arrakastaz gehitua izan da."
-
-#: contrib/admin/views/auth.py:25 contrib/admin/views/main.py:271
-#: contrib/admin/views/main.py:356
-msgid "You may edit it again below."
-msgstr "Berriro alkatu zenezake beherago."
-
-#: contrib/admin/views/auth.py:31
-msgid "Add user"
-msgstr "Usuario gehitu"
-
-#: contrib/admin/views/auth.py:58
-msgid "Password changed successfully."
-msgstr "Hitz ezkutua aldaketa zuzena."
-
-#: contrib/admin/views/auth.py:65
-#, python-format
-msgid "Change password: %s"
-msgstr "Hitz ezkutua aldatu: %s"
-
-#: contrib/admin/views/decorators.py:11 contrib/auth/forms.py:60
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "Mesedez idatzi usuario izena eta hitz ezkutu egokiak. Maiskula eta minuskula ondo bereiztu."
-
-#: contrib/admin/views/decorators.py:63
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr "Mesedez berriro sar saitez, sesioa zahartu bai da. Bidalitakoa gorde egin da."
-
-#: contrib/admin/views/decorators.py:70
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr "Zure nabegatzaileak ez ditu cookie-ak onartzen. Aktiba ezazu hauen erabilera eta ekarri ezazu horria hau berriro."
-
-#: contrib/admin/views/decorators.py:84
-msgid "Usernames cannot contain the '@' character."
-msgstr "Usuario izenek ezin dezkete @ karakterea eduki."
-
-#: contrib/admin/views/decorators.py:86
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Zure e-mail helbidea ez da zure usuario izena. Ahalegindo '%s' rekin."
-
-#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
-#: contrib/admin/views/doc.py:52
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81
-#: contrib/admin/views/doc.py:83
-msgid "filter:"
-msgstr "filtroa:"
-
-#: contrib/admin/views/doc.py:137 contrib/admin/views/doc.py:139
-#: contrib/admin/views/doc.py:141
-msgid "view:"
-msgstr "bista:"
-
-#: contrib/admin/views/doc.py:166
-#, python-format
-msgid "App %r not found"
-msgstr "%r aplikazio ez da aurkitu"
-
-#: contrib/admin/views/doc.py:173
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "%(name)r modeloa ez da %(label)r aplikazioan aurkitu"
-
-#: contrib/admin/views/doc.py:185
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr "erlazionaturik `%(label)s.%(type)s` objetua"
-
-#: contrib/admin/views/doc.py:185 contrib/admin/views/doc.py:207
-#: contrib/admin/views/doc.py:221 contrib/admin/views/doc.py:226
-msgid "model:"
-msgstr "modeloa:"
-
-#: contrib/admin/views/doc.py:216
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "erlazionaturik `%(label)s.%(name)s` objetua"
-
-#: contrib/admin/views/doc.py:221
-#, python-format
-msgid "all %s"
-msgstr "%s dena"
-
-#: contrib/admin/views/doc.py:226
-#, python-format
-msgid "number of %s"
-msgstr "%s zenbakia"
-
-#: contrib/admin/views/doc.py:231
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s objetuan zutabeak"
-
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:304
-#: contrib/admin/views/doc.py:306 contrib/admin/views/doc.py:312
-#: contrib/admin/views/doc.py:313 contrib/admin/views/doc.py:315
-msgid "Integer"
-msgstr "Zenbaki osoa"
-
-#: contrib/admin/views/doc.py:294
-msgid "Boolean (Either True or False)"
-msgstr "Boolearra (egia ala gezurra)"
-
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:314
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Katea (%(max_length)s gehienez)"
-
-#: contrib/admin/views/doc.py:296
-msgid "Comma-separated integers"
-msgstr "Komaz bereiztutako zenbako osoak"
-
-#: contrib/admin/views/doc.py:297
-msgid "Date (without time)"
-msgstr "Data (ordurik gabe)"
-
-#: contrib/admin/views/doc.py:298
-msgid "Date (with time)"
-msgstr "Data (orduarekin)"
-
-#: contrib/admin/views/doc.py:299
-msgid "Decimal number"
-msgstr "Zenbaki dezimala"
-
-#: contrib/admin/views/doc.py:300
-msgid "E-mail address"
-msgstr "E-mail helbidea"
-
-#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302
-#: contrib/admin/views/doc.py:305
-msgid "File path"
-msgstr "Fitxegi bidea (path)"
-
-#: contrib/admin/views/doc.py:303
-msgid "Floating point number"
-msgstr "Zenbaki erreala (float)"
-
-#: contrib/admin/views/doc.py:307 contrib/comments/models.py:89
-msgid "IP address"
-msgstr "IP helbidea"
-
-#: contrib/admin/views/doc.py:309
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolearra (egia, gezurra edo hutsa[None])"
-
-#: contrib/admin/views/doc.py:310
-msgid "Relation to parent model"
-msgstr "Gurazo modeloarekin erlazioa"
-
-#: contrib/admin/views/doc.py:311
-msgid "Phone number"
-msgstr "Telefono zenbakia"
-
-#: contrib/admin/views/doc.py:316
-msgid "Text"
-msgstr "Textua"
-
-#: contrib/admin/views/doc.py:317
-msgid "Time"
-msgstr "Ordua"
-
-#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:319
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S statua (bi letra maiuskula)"
-
-#: contrib/admin/views/doc.py:320
-msgid "XML text"
-msgstr "XML textua"
-
-#: contrib/admin/views/doc.py:346
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ez dirudi url heredu objetua"
-
-#: contrib/admin/views/main.py:233
-msgid "Site administration"
-msgstr "Web gunearen administrazioa"
-
-#: contrib/admin/views/main.py:280 contrib/admin/views/main.py:365
-#, python-format
-msgid "You may add another %s below."
-msgstr "Beste %s gehitu dezakezu jarraian."
-
-#: contrib/admin/views/main.py:298
-#, python-format
-msgid "Add %s"
-msgstr "%s gehitu"
-
-#: contrib/admin/views/main.py:344
-#, python-format
-msgid "Added %s."
-msgstr "%s gehituta."
-
-#: contrib/admin/views/main.py:344 contrib/admin/views/main.py:346
-#: contrib/admin/views/main.py:348 core/validators.py:283
-#: db/models/manipulators.py:309
-msgid "and"
-msgstr "eta"
-
-#: contrib/admin/views/main.py:346
-#, python-format
-msgid "Changed %s."
-msgstr "%s aldatuta."
-
-#: contrib/admin/views/main.py:348
-#, python-format
-msgid "Deleted %s."
-msgstr "%s ezabatuta."
-
-#: contrib/admin/views/main.py:351
-msgid "No fields changed."
-msgstr "Ez da zutaberik aldatu."
-
-#: contrib/admin/views/main.py:354
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" aldatuta izan da."
-
-#: contrib/admin/views/main.py:362
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" arrakastarekin gehituta izan da. Jarraian aldatu dezakezu berriro."
-
-#: contrib/admin/views/main.py:400
-#, python-format
-msgid "Change %s"
-msgstr "%s aldatu"
-
-#: contrib/admin/views/main.py:487
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "%(fieldname)s bat edo gehiago %(name)s an: %(obj)s"
-
-#: contrib/admin/views/main.py:492
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "%(fieldname)s bat edo gehiago %(name)s n"
-
-#: contrib/admin/views/main.py:524
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" arrakastaz ezabatua izan da."
-
-#: contrib/admin/views/main.py:527
-msgid "Are you sure?"
-msgstr "Ziur al zaude?"
-
-#: contrib/admin/views/main.py:549
-#, python-format
-msgid "Change history: %s"
-msgstr "Aldaketa zerrenda: %s"
-
-#: contrib/admin/views/main.py:583
-#, python-format
-msgid "Select %s"
-msgstr "%s aukeratu"
-
-#: contrib/admin/views/main.py:583
-#, python-format
-msgid "Select %s to change"
-msgstr "aldaketarako %s aukeratu"
-
-#: contrib/admin/views/main.py:784
-msgid "Database error"
-msgstr "Data base errorea"
-
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
-msgid "The two password fields didn't match."
-msgstr "Hitz ezkutuak ez dira berdinak."
-
-#: contrib/auth/forms.py:25
-msgid "A user with that username already exists."
-msgstr "Usuario izen hori erabiltzen ari da."
-
-#: contrib/auth/forms.py:53
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "Zure nabegatzaileak ez ditu cookiak onartzen. Cookia-k beharrezkoak dira sistemn sartzeko."
-
-#: contrib/auth/forms.py:62
-msgid "This account is inactive."
-msgstr "Kontu hau az dago aktibatuta."
-
-#: contrib/auth/forms.py:84
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "E-mail helbide horrek ez du usariorik. Ziur al zaude erregistraturik zaudela?"
-
-#: contrib/auth/forms.py:107
-#, python-format
-msgid "Password reset on %s"
-msgstr "Hitz ezkutu ezabatua %s n"
-
-#: contrib/auth/forms.py:117
-msgid "The two 'new password' fields didn't match."
-msgstr "Bi hitz ezkutu berriak ez dira berdinak."
-
-#: contrib/auth/forms.py:124
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Zure hitz ezkutu zaharra ez zuzena. Idatzi ezazu berriro."
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:93
-msgid "name"
-msgstr "izena"
-
-#: contrib/auth/models.py:75
-msgid "codename"
-msgstr "code izena (codename)"
-
-#: contrib/auth/models.py:78
-msgid "permission"
-msgstr "baimena"
-
-#: contrib/auth/models.py:79 contrib/auth/models.py:94
-msgid "permissions"
-msgstr "baimenak"
-
-#: contrib/auth/models.py:97
-msgid "group"
-msgstr "taldea"
-
-#: contrib/auth/models.py:98 contrib/auth/models.py:141
-msgid "groups"
-msgstr "taldeak"
-
-#: contrib/auth/models.py:131
-msgid "username"
-msgstr "usuario izena"
-
-#: contrib/auth/models.py:131
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Beharrezkoa. 30 karaktere edo gutxiago. Karaktere alfanumerikoak "
-"bakarrik (letra, zembaki eta '_')"
-
-#: contrib/auth/models.py:132
-msgid "first name"
-msgstr "izena"
-
-#: contrib/auth/models.py:133
-msgid "last name"
-msgstr "abizena"
-
-#: contrib/auth/models.py:134
-msgid "e-mail address"
-msgstr "e-mail helbidea"
-
-#: contrib/auth/models.py:135
-msgid "password"
-msgstr "hitz ezkutua"
-
-#: contrib/auth/models.py:135
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr "Erabili '[algo]$[salt]$[hexdigest]' edo erabili <a href=\"password/\">hitz ezkuta aldatu </a>."
-
-#: contrib/auth/models.py:136
-msgid "staff status"
-msgstr "Arduraduen egoera"
-
-#: contrib/auth/models.py:136
-msgid "Designates whether the user can log into this admin site."
-msgstr "Usuarioak administrazio gune honetan sartu dezkeen ala ez izendatzen du."
-
-#: contrib/auth/models.py:137
-msgid "active"
-msgstr "Aktiboa"
-
-#: contrib/auth/models.py:137
-msgid ""
-"Designates whether this user can log into the Django admin. Unselect this "
-"instead of deleting accounts."
-msgstr "Usuarioak Django adminiztrazio gunean sartu daitekeen ala ez. Desaktiba ezazu aukera hau,kontua ezabatu ordez."
-
-#: contrib/auth/models.py:138
-msgid "superuser status"
-msgstr "Usuario nagusia (superuser)"
-
-#: contrib/auth/models.py:138
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "Usuario honek baimen guztiak ditu, banan banan denak zehaztu gabe."
-
-#: contrib/auth/models.py:139
-msgid "last login"
-msgstr "azken sarrera"
-
-#: contrib/auth/models.py:140
-msgid "date joined"
-msgstr "erregistro eguna"
-
-#: contrib/auth/models.py:142
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "Usuario honek, eskuz emandako baimen guztietaz aparte, berari egokitutako talde bakoitzari emandako baimenak ere izango ditu."
-
-#: contrib/auth/models.py:143
-msgid "user permissions"
-msgstr "Usuarioaren baimenak"
-
-#: contrib/auth/models.py:147
-msgid "user"
-msgstr "Usuarioa"
-
-#: contrib/auth/models.py:148
-msgid "users"
-msgstr "Usuarioak"
-
-#: contrib/auth/models.py:154
-msgid "Personal info"
-msgstr "Informazio pertsonala"
-
-#: contrib/auth/models.py:155
-msgid "Permissions"
-msgstr "Baimenak"
-
-#: contrib/auth/models.py:156
-msgid "Important dates"
-msgstr "Data garrantzitsuak"
-
-#: contrib/auth/models.py:157
-msgid "Groups"
-msgstr "Taldeak"
-
-#: contrib/auth/models.py:316
-msgid "message"
-msgstr "mezua"
-
-#: contrib/auth/views.py:47
-msgid "Logged out"
-msgstr "Sesiotik kanpo"
-
-#: contrib/comments/models.py:71 contrib/comments/models.py:176
-msgid "object ID"
-msgstr "objetuaren ID"
-
-#: contrib/comments/models.py:72
-msgid "headline"
-msgstr "izenburua"
-
-#: contrib/comments/models.py:73 contrib/comments/models.py:95
-#: contrib/comments/models.py:177
-msgid "comment"
-msgstr "komentarioa"
-
-#: contrib/comments/models.py:74
-msgid "rating #1"
-msgstr "puntaketa #1"
-
-#: contrib/comments/models.py:75
-msgid "rating #2"
-msgstr "puntaketa #2"
-
-#: contrib/comments/models.py:76
-msgid "rating #3"
-msgstr "puntaketa #3"
-
-#: contrib/comments/models.py:77
-msgid "rating #4"
-msgstr "puntaketa #4"
-
-#: contrib/comments/models.py:78
-msgid "rating #5"
-msgstr "puntaketa #5"
-
-#: contrib/comments/models.py:79
-msgid "rating #6"
-msgstr "puntaketa #6"
-
-#: contrib/comments/models.py:80
-msgid "rating #7"
-msgstr "puntaketa #7"
-
-#: contrib/comments/models.py:81
-msgid "rating #8"
-msgstr "puntaketa #8"
-
-#: contrib/comments/models.py:86
-msgid "is valid rating"
-msgstr "puntuaketa zuzena"
-
-#: contrib/comments/models.py:87 contrib/comments/models.py:179
-msgid "date/time submitted"
-msgstr "data/hordua bidalia"
-
-#: contrib/comments/models.py:88 contrib/comments/models.py:180
-msgid "is public"
-msgstr "publikoa"
-
-#: contrib/comments/models.py:90
-msgid "is removed"
-msgstr "ezabatua"
-
-#: contrib/comments/models.py:90
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr "Markatu kutxa hau komentario ezegokia bada. A \"Komentario hau ezabatua izan da\" mezua erakutsiko da bere ordez."
-
-#: contrib/comments/models.py:96
-msgid "comments"
-msgstr "Komentarioak"
-
-#: contrib/comments/models.py:140 contrib/comments/models.py:222
-msgid "Content object"
-msgstr "Eduki objetua"
-
-#: contrib/comments/models.py:168
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(user)s -k bidalia %(date)s -n\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:178
-msgid "person's name"
-msgstr "pertsonaren izena"
-
-#: contrib/comments/models.py:181
-msgid "ip address"
-msgstr "ip zenbakia"
-
-#: contrib/comments/models.py:183
-msgid "approved by staff"
-msgstr "arduradunek onartua"
-
-#: contrib/comments/models.py:187
-msgid "free comment"
-msgstr "komentario librea"
-
-#: contrib/comments/models.py:188
-msgid "free comments"
-msgstr "komentario libreak"
-
-#: contrib/comments/models.py:250
-msgid "score"
-msgstr "puntuaketa"
-
-#: contrib/comments/models.py:251
-msgid "score date"
-msgstr "puntuaketa data"
-
-#: contrib/comments/models.py:255
-msgid "karma score"
-msgstr "karma puntuaketa"
-
-#: contrib/comments/models.py:256
-msgid "karma scores"
-msgstr "karma puntuaketak"
-
-#: contrib/comments/models.py:260
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(user)s -k emandako puntaketa: %(score)d"
-
-#: contrib/comments/models.py:277
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"%(user)s -k komentario hay markatu du:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:285
-msgid "flag date"
-msgstr "markatutako eguna"
-
-#: contrib/comments/models.py:289
-msgid "user flag"
-msgstr "usuarioaren markaketa"
-
-#: contrib/comments/models.py:290
-msgid "user flags"
-msgstr "usuariaren markaketak"
-
-#: contrib/comments/models.py:294
-#, python-format
-msgid "Flag by %r"
-msgstr "%r -k markatuta"
-
-#: contrib/comments/models.py:300
-msgid "deletion date"
-msgstr "ezabatze data"
-
-#: contrib/comments/models.py:303
-msgid "moderator deletion"
-msgstr "moderatzaileak ezabatua"
-
-#: contrib/comments/models.py:304
-msgid "moderator deletions"
-msgstr "moderatzaileak ezabatuak"
-
-#: contrib/comments/models.py:308
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "%r moderatzaileak ezabatua"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "Hitz ezkutua ahaztu duzu?"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Puntuaketak"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Beharrezkoa"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Aukerakoa"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Argazkia bidali"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Komentarioa:"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "Komentarioa aurreikusi"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Zure izena:"
-
-#: contrib/comments/views/comments.py:28
-msgid "This rating is required because you've entered at least one other rating."
-msgstr "Puntuaketa hau beharrezkoa da, gutxienez beste puntaketa bat sartu duzulako"
-
-#: contrib/comments/views/comments.py:112
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] "Komentario hau, %(count)s komentario baino gutxiago egindako usuario batek bidalia da:<br><br>%(text)s"
-msgstr[1] ""
-
-#: contrib/comments/views/comments.py:117
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Komentario hau usuario 'arin' batek bidalia da:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:190
-#: contrib/comments/views/comments.py:283
-msgid "Only POSTs are allowed"
-msgstr "POST bakarrik onartzen dira"
-
-#: contrib/comments/views/comments.py:194
-#: contrib/comments/views/comments.py:287
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Beharrezko fitxategi bat edo gehiago ez dira bidali"
-
-#: contrib/comments/views/comments.py:198
-#: contrib/comments/views/comments.py:289
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Norbaitek komentario formularioa maltzurki eraldatu du (segurtasun erasoa)"
-
-#: contrib/comments/views/comments.py:208
-#: contrib/comments/views/comments.py:295
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr "Komentario formularioak 'target' parametroa okerra zuen -- objetuaren ID okerra zen"
-
-#: contrib/comments/views/comments.py:259
-#: contrib/comments/views/comments.py:324
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Komentario formularioa ez zuen ez 'berikusi' edo 'bidali'"
-
-#: contrib/comments/views/karma.py:21
-msgid "Anonymous users cannot vote"
-msgstr "Usuario ezezagunak ezin dezakete botoa eman"
-
-#: contrib/comments/views/karma.py:25
-msgid "Invalid comment ID"
-msgstr "Komentario ID okerra"
-
-#: contrib/comments/views/karma.py:27
-msgid "No voting for yourself"
-msgstr "Norberak ezin dezake botoa eman"
-
-#: contrib/contenttypes/models.py:37
-msgid "python model class name"
-msgstr "python model class izena"
-
-#: contrib/contenttypes/models.py:40
-msgid "content type"
-msgstr "edukiera moeta"
-
-#: contrib/contenttypes/models.py:41
-msgid "content types"
-msgstr "edukiera moetak"
-
-#: contrib/flatpages/models.py:8
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Adibidez: '/about/contact/'. Ziurta zaitez '/' karaktera hasieran eta bukaeran dagoela."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "izenburua"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "edukiera"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "komentarioak onartu"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "plantila izena"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr "Adibidez: 'flatpages/contact_page.html'. Hau ematen ez bada, sistema 'flatpages/default.html' erabiliko du."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "erregistratzea beharrezkoa da"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Hau markatuta badago, erregistratutako usuarioak bakarrik ikusiko dute horria."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flat page"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flat pages"
-
-#: contrib/humanize/templatetags/humanize.py:20
-msgid "th"
-msgstr "garren"
-
-#: contrib/humanize/templatetags/humanize.py:20
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:20
-msgid "nd"
-msgstr "garren"
-
-#: contrib/humanize/templatetags/humanize.py:20
-msgid "rd"
-msgstr "garren"
-
-#: contrib/humanize/templatetags/humanize.py:52
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milioi"
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:55
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f bilioi"
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:58
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilioi"
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "one"
-msgstr "bat"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "two"
-msgstr "bi"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "three"
-msgstr "hiru"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "four"
-msgstr "lau"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "five"
-msgstr "bost"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "six"
-msgstr "sei"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "seven"
-msgstr "zazpi"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "eight"
-msgstr "zortzi"
-
-#: contrib/humanize/templatetags/humanize.py:74
-msgid "nine"
-msgstr "bederatzi"
-
-#: contrib/humanize/templatetags/humanize.py:94
-msgid "today"
-msgstr "gaur"
-
-#: contrib/humanize/templatetags/humanize.py:96
-msgid "tomorrow"
-msgstr "bihar"
-
-#: contrib/humanize/templatetags/humanize.py:98
-msgid "yesterday"
-msgstr "atzo"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "NNNN edo ANNNNAAA formatoan idatzi posta kode bat."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Data honek zenbakiak bakarrik behar ditu."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Data honek 7 edo 8 digito behar ditu."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "CUIT zuzena idatzi XX-XXXXXXXX-X edo XXXXXXXXXXXX formatoan."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT okerra."
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "4 zenbaki posta kodean idatzi."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "XXXXX-XXX formatoan zip kodea idatzi."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefono zenbakiak XX-XXXX-XXXX formatoa behar dute."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Brasilgo estatu zuzen bat aukeratu. Hori ez dago aukeran."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "CPF zenbaki okerra."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Data honek gehienez 11 digito edo 14 karaktere behar ditu."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "CNPJ zenbaki okerra."
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Data honek 14 digito behar ditu gutxienez"
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Posta kodea idatzi XXX XXX formatoan."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:16 contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "zip kodea XXXX formatoan idatzi."
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Araba"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Gupuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "Errioxa"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Nafarroa"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturiaseko printzipadoa"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Euskal Herria"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canaria uharteak"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "La Mancha-Gaztela"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Gaztela eta Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalunia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Nafarroako komunitate forala"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valeciako komunitatea"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Kode postal bat idatzi hurrengo formato eta tartearekin: 01XXX - 52XXX"
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr "Telefono zenbaki bat idatzi hurrengo formato batekin: 6XXXXXXXX, 8XXXXXXXX edo 9XXXXXXXX"
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Idatzi NIF,NIE edo CIF zuzena."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Idatzi NIF edo NIE zuzena."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "NIF kontrol kode okerra."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "NIE kontrol kode okerra."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "CIF kontrl kode okerra."
-
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Mesedez idatzi banku kontu zenbaki zuzena XXXX-XXXX-XX-XXXXXXXXXX formatoarekin."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Banku kontu zenbakian kontrol digito okerra."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:19
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drente"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:40
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:73
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:113
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:156
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "nondik berbidalia"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "Hau 'bide' absolutua izan beharko luke, dominio izena kenduta. 'Adibidez: events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "Nora berbidali"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "Hau 'bide' absolutua (goian bezala) edo URL osoa , 'http://'-rekin hasiz, izan daiteke."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "berbidali"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "berbidali"
-
-#: contrib/sessions/models.py:46
-msgid "session key"
-msgstr "sesioaren giltza"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sesioaren data"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "amaiera data"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesioa"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesioak"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "dominio izena"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "erakusteko izena"
-
-#: contrib/sites/models.py:37
-msgid "site"
-msgstr "web gunea"
-
-#: contrib/sites/models.py:38
-msgid "sites"
-msgstr "web guneak"
-
-#: core/validators.py:72
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Balore honek, letrak, zenbakia eta '_' karakterak bakarrik eduki ditzazke."
-
-#: core/validators.py:76
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "Balore honek, letrak, zenbakia eta '_', '/','-' karakterak bakarrik eduki ditzazke."
-
-#: core/validators.py:80
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "Balore honek letrak, zenbakiak eta '_','-' karatereak bakarrik izan ditzazke."
-
-#: core/validators.py:84
-msgid "Uppercase letters are not allowed here."
-msgstr "Hemen letra maiuskulak ez dira onartzen."
-
-#: core/validators.py:88
-msgid "Lowercase letters are not allowed here."
-msgstr "Hemen letra minukulak ez dira onartzen."
-
-#: core/validators.py:95
-msgid "Enter only digits separated by commas."
-msgstr "Komaz bereiztutako digitoak bakarrik idatzi."
-
-#: core/validators.py:107
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "E-mail norabide zuzenak idatzi, komaz bereizturik."
-
-#: core/validators.py:111
-msgid "Please enter a valid IP address."
-msgstr "Idatzi IP zenbaki zuzena mesedez."
-
-#: core/validators.py:115
-msgid "Empty values are not allowed here."
-msgstr "Balore hutsak ez dira hemen onartzen."
-
-#: core/validators.py:119
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Zenbaki karaktereak bakarrik onartzen dira hemen."
-
-#: core/validators.py:123
-msgid "This value can't be comprised solely of digits."
-msgstr "Balore honek ezin daiteke digitoz bakarrik osatua egon."
-
-#: core/validators.py:128 newforms/fields.py:151
-msgid "Enter a whole number."
-msgstr "Zenbaki bat idatzi."
-
-#: core/validators.py:132
-msgid "Only alphabetical characters are allowed here."
-msgstr "Karaktere alfabetikoak bakarrik onartzen dira hemen."
-
-#: core/validators.py:147
-msgid "Year must be 1900 or later."
-msgstr "Urtea 1900 edo haundiagoa izan behar du."
-
-#: core/validators.py:151
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Data okerra: %s"
-
-#: core/validators.py:156 db/models/fields/__init__.py:509
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Data zuzena idatzi, YYY-MM-DD formatoan."
-
-#: core/validators.py:161
-msgid "Enter a valid time in HH:MM format."
-msgstr "Hordu zuzena idatzi HH:MM formatoan."
-
-#: core/validators.py:165 db/models/fields/__init__.py:583
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Idatzi data/hordua zuzena YYYY-MM-DD HH:MM formatoan."
-
-#: core/validators.py:170 newforms/fields.py:402
-msgid "Enter a valid e-mail address."
-msgstr "e-mail helbide zuzena idatzi."
-
-#: core/validators.py:182 core/validators.py:474 newforms/fields.py:432
-#: oldforms/__init__.py:687
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Ez da fitxategirik bidali. Baiztatu ezazu formularioren kode formatoa."
-
-#: core/validators.py:193 newforms/fields.py:458
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "Bidali irudi zuzena. Zuk bidalitako fitxategia ez da irudi motako edo akatsa du."
-
-#: core/validators.py:200
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "%s URLa ez da irudi zuzena."
-
-#: core/validators.py:204
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Telefono zenbakiak XXX-XXX-XXXX formatoa eduki behar dute. \"%s\" okerra."
-
-#: core/validators.py:212
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "%s URLa ez da QuickTime bideo zuzena."
-
-#: core/validators.py:216
-msgid "A valid URL is required."
-msgstr "URL zuzena behar da."
-
-#: core/validators.py:230
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"HTML zuzena behar da. Erroreak daude:\n"
-"%s"
-
-#: core/validators.py:237
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "XML okerra: %s"
-
-#: core/validators.py:254
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL okerra: %s"
-
-#: core/validators.py:259 core/validators.py:261
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "%s URLa ez dabil ondo."
-
-#: core/validators.py:267
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "U.S estatu laburpen zuzen idatzi."
-
-#: core/validators.py:281
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Kontuz ibili! %s hitza ez dago hemen onartua."
-msgstr[1] ""
-
-#: core/validators.py:288
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Data hau '%s' data berdindu behar du."
-
-#: core/validators.py:307
-msgid "Please enter something for at least one field."
-msgstr "Idatzi gutxienez data bat."
-
-#: core/validators.py:316 core/validators.py:327
-msgid "Please enter both fields or leave them both empty."
-msgstr "Hidatzi bi datuak edo utzi biak hutsik."
-
-#: core/validators.py:335
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Data hau idatzi behar da, %(field)s %(value)s balorea badu."
-
-#: core/validators.py:348
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Data hau idatzi behar da %(field)s %(value)s balorea ez bada."
-
-#: core/validators.py:367
-msgid "Duplicate values are not allowed."
-msgstr "Errepikatutako datak ez dira onartzen."
-
-#: core/validators.py:382
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Balore hau %(lower)s eta %(upper)s artean egon behar du."
-
-#: core/validators.py:384
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Gutxienez %s izan behar du."
-
-#: core/validators.py:386
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Balore hau %s baino txikiagoa izan behar du."
-
-#: core/validators.py:427
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Balore hau %s-ren multiploa izan behar du."
-
-#: core/validators.py:437
-msgid "Please enter a valid decimal number."
-msgstr "Idatzi zenbaki dezimal zuzena mesedez."
-
-#: core/validators.py:444
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Idatzi zenbaki dezimal zuzena gehienez %s digitorekin."
-msgstr[1] ""
-
-#: core/validators.py:447
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "Idatzi zenbaki digital zuzena, %s digitorekin gutxienez alde osoan."
-msgstr[1] ""
-
-#: core/validators.py:450
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Idatzi zenbaki dezimal zuzena, %s digitorekin dezimalean."
-msgstr[1] ""
-
-#: core/validators.py:458
-msgid "Please enter a valid floating point number."
-msgstr "Idatzi zenbaki erreal zuzena."
-
-#: core/validators.py:467
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Ziurta zaitez bidalitako fitxategia gutxienex %s byte tamaina duela."
-
-#: core/validators.py:468
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Ziurta zaitez bidalitako fitxategia gehienez %s byte dituela."
-
-#: core/validators.py:485
-msgid "The format for this field is wrong."
-msgstr "Data honen formatoa okerra da."
-
-#: core/validators.py:500
-msgid "This field is invalid."
-msgstr "Data okerra."
-
-#: core/validators.py:536
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Ezin daiteke ezer lortu %s-tik."
-
-#: core/validators.py:539
-#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "%(url)s URLak content-type okerra itzuli du: '%(contenttype)s'."
-
-#: core/validators.py:572
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr "Mesedez itxi itxigabeko %(tag)s elementoa %(line)s lerroan. Lerroa hasiera: \"%(start)s\"."
-
-#: core/validators.py:576
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr "Texturen bat %(line)s lerroan ez da onartzen contextu horretan. Lerro hasiera: \"%(start)s\"."
-
-#: core/validators.py:581
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr "\"%(attr)s\" %(line)s lerroan atribitu okerra da. Lerro hasiera: \"%(start)s\"."
-
-#: core/validators.py:586
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr "\"%(tag)s\" %(line)s lerroan elementu okerra da. Lerro hasiera: \"%(start)s\"."
-
-#: core/validators.py:590
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr "%(line)s lerroan elementu atributu bat edo gehiago faltan ditu. Lerro hasiera:\"%(start)s\"."
-
-#: core/validators.py:595
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr "\"%(attr)s\" atributoa %(line)s lerroan balore okerra du. (Lerro hasiera: \"%(start)s\".)"
-
-#: db/models/manipulators.py:308
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s with this %(type)s already exists for the given %(field)s."
-
-#: db/models/fields/__init__.py:52
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "Badago %(optname)s izenarekin %(fieldname)s-n."
-
-#: db/models/fields/__init__.py:161 db/models/fields/__init__.py:318
-#: db/models/fields/__init__.py:735 db/models/fields/__init__.py:746
-#: newforms/fields.py:45 oldforms/__init__.py:374
-msgid "This field is required."
-msgstr "Kanpo hau beharrezkoa da."
-
-#: db/models/fields/__init__.py:418
-msgid "This value must be an integer."
-msgstr "Balore hau zenbaki osoa izan behar du."
-
-#: db/models/fields/__init__.py:454
-msgid "This value must be either True or False."
-msgstr "Balore hau egia ala gezurra izan behar du (True/False)."
-
-#: db/models/fields/__init__.py:475
-msgid "This field cannot be null."
-msgstr "Datu hau ezin daiteke hutsa izan (null)."
-
-#: db/models/fields/__init__.py:644
-msgid "This value must be a decimal number."
-msgstr "Balore hau zenbaki dezimala izan begar du."
-
-#: db/models/fields/__init__.py:755
-msgid "Enter a valid filename."
-msgstr "Idatzi fitxategi izen zuzena"
-
-#: db/models/fields/__init__.py:908
-msgid "This value must be either None, True or False."
-msgstr "Balore hau hutsa, egia edo gezurra izan behar du (None, True,False)"
-
-#: db/models/fields/related.py:55
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Mesades idatzi %s zuzena."
-
-#: db/models/fields/related.py:658
-msgid "Separate multiple IDs with commas."
-msgstr "Bereiztu ID zerrenda koma bidez."
-
-#: db/models/fields/related.py:660
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Zapaldu \"Control\" karakterea edo \"Command\" Mac batean, bat baino gehiago aukeratzeko."
-
-#: db/models/fields/related.py:707
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Mesedez idatzi %(self)s ID zuzena. %(value)r okerra da."
-msgstr[1] ""
-
-#: newforms/fields.py:46
-msgid "Enter a valid value."
-msgstr "Idatzi balio zuzena."
-
-#: newforms/fields.py:123
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Ziurta zaitez balore honek gehienez %(max)d karactere dituela, %(length)d ditu orain."
-
-#: newforms/fields.py:124
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Ziurta zaitez balore honek gutxienez %(min)d karaktere dituela ,%(length)d ditu orain."
-
-#: newforms/fields.py:152 newforms/fields.py:181 newforms/fields.py:210
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Ziurta zaitez balore hau %s baino txikiagoa edo berdina dela."
-
-#: newforms/fields.py:153 newforms/fields.py:182 newforms/fields.py:211
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Ziurta zaitez balore hau %s baino haundiagoa edo berdina dela."
-
-#: newforms/fields.py:180 newforms/fields.py:209
-msgid "Enter a number."
-msgstr "Idatzi zenbaki bat."
-
-#: newforms/fields.py:212
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Ziurta zaitez %s baino digito gehiago ez dagoela."
-
-#: newforms/fields.py:213
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Ziurta zaitez %s baino dezimale gehiago ez dagoela."
-
-#: newforms/fields.py:214
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Ziurta zaitez %s digitu baino gehiago ez dagoela puntu dezimalaren aurretik."
-
-#: newforms/fields.py:262 newforms/fields.py:723
-msgid "Enter a valid date."
-msgstr "Data zuzen bat idatzi."
-
-#: newforms/fields.py:295 newforms/fields.py:724
-msgid "Enter a valid time."
-msgstr "Ordu zuzen bat idatzi."
-
-#: newforms/fields.py:334
-msgid "Enter a valid date/time."
-msgstr "Data/Ordua zuzen bat idatzi."
-
-#: newforms/fields.py:433
-msgid "No file was submitted."
-msgstr "Ez da fitxategirik bidali."
-
-#: newforms/fields.py:434 oldforms/__init__.py:689
-msgid "The submitted file is empty."
-msgstr "Bidalitako fitxategia hutsik dago."
-
-#: newforms/fields.py:496
-msgid "Enter a valid URL."
-msgstr "URL zuzen bat idatzi."
-
-#: newforms/fields.py:497
-msgid "This URL appears to be a broken link."
-msgstr "URL hau ez dabil ondo."
-
-#: newforms/fields.py:559 newforms/models.py:317
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Aukera zuzen bat aukeratu. Aukeratutakoa ez da zuzena."
-
-#: newforms/fields.py:598
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Aukeratu aukera zuzen bat. %(value)s ez da zuzena."
-
-#: newforms/fields.py:599 newforms/fields.py:661 newforms/models.py:377
-msgid "Enter a list of values."
-msgstr "Balio zerrenda bat idatzi ezazu."
-
-#: newforms/fields.py:752
-msgid "Enter a valid IPv4 address."
-msgstr "IPv4 zuzen bat idatzi."
-
-#: newforms/models.py:378
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Aukera zuzena aukeratu. %s ez da zuzena."
-
-#: oldforms/__init__.py:409
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Ziurta zaitez textuak %s karaktere baino gutxiago duela."
-msgstr[1] ""
-
-#: oldforms/__init__.py:414
-msgid "Line breaks are not allowed here."
-msgstr "Lerro berriak (line breaks) ez dire onartzen hemen."
-
-#: oldforms/__init__.py:512 oldforms/__init__.py:586 oldforms/__init__.py:625
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Aukera zuzena aukeratu: '%(data)s' ez dago %(choices)s hartean."
-
-#: oldforms/__init__.py:745
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Idatzi -32.768 eta 32.767 arteko zenbaki osoa."
-
-#: oldforms/__init__.py:755
-msgid "Enter a positive number."
-msgstr "Zenbaki positboa idatzi."
-
-#: oldforms/__init__.py:765
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Idatzi 0 eta 32.767 arteko zenbaki osoa."
-
-#: template/defaultfilters.py:691
-msgid "yes,no,maybe"
-msgstr "bai,ez,agian"
-
-#: template/defaultfilters.py:722
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] ""
-
-#: template/defaultfilters.py:724
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:726
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:727
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "gauerdia"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "eguerdia"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Astelehena"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Asteartea"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Asteazkena"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Osteguna"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Ostirala"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Larunbata"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Igandea"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Astelehe"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Astear"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Asteaz"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Oste"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Osti"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Lar"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Iga"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Urtarrila"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Otsaila"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Martxoa"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Apirila"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Maiatza"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Ekaina"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Uztaila"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Abuztua"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Iraila"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Urria"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Azaroa"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Abendua"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "urt"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "ots"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "api"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "eka"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "uzt"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "abu"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "ira"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "urr"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "aza"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "abe"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Urt."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Ots."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Abu."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Ira."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Urr."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Aza."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Abe."
-
-#: utils/text.py:127
-msgid "or"
-msgstr "edo"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "urtea"
-msgstr[1] ""
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "hilabetea"
-msgstr[1] ""
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "astea"
-msgstr[1] ""
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "eguna"
-msgstr[1] ""
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hordua"
-msgstr[1] ""
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minutu"
-msgstr[1] ""
-
-#: utils/timesince.py:46
-msgid "minutes"
-msgstr "minutuak"
-
-#: utils/timesince.py:51
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:57
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:404
-msgid "DATE_FORMAT"
-msgstr "DATE_FORMAT"
-
-#: utils/translation/trans_real.py:405
-msgid "DATETIME_FORMAT"
-msgstr "DATETIME_FORMAT"
-
-#: utils/translation/trans_real.py:406
-msgid "TIME_FORMAT"
-msgstr "TIME_FORMAT"
-
-#: utils/translation/trans_real.py:422
-msgid "YEAR_MONTH_FORMAT"
-msgstr "YEAR_MONTH_FORMAT"
-
-#: utils/translation/trans_real.py:423
-msgid "MONTH_DAY_FORMAT"
-msgstr "MONTH_DAY_FORMAT"
-
-#: views/generic/create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s arazorik gabe sortu da"
-
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s arazorik gabe aldatua izan da."
-
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s ezabatua izan da."
-
diff --git a/parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 646aa0f..0000000
--- a/parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 2df6bd2..0000000
--- a/parts/django/django/conf/locale/eu/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,117 +0,0 @@
-# Spanish translation for the django-admin JS files.
-# Copyright (C)
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-07-14 13:47-0500\n"
-"PO-Revision-Date: 2007-07-14 13:41-0500\n"
-"Last-Translator: Jorge Gajon <gajon@gajon.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Urtarrila Otsaila Martxoa Apirila Maiatza Ekaina Uztaila Abuztua Iraila Urria "
-"Azaroa Abendua"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "I A A A O O L"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Igandea Astelehene Asteartea Asteazkena Osteguna Ostirala Larunbata"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s Erabilgarri"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Denak aukeratu"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Gehitu"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Ezabatu"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s Aukeratuak"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Egin zure aukerak eta click egin "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Denak garbitu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Orain"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Erlojua"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Aukeratu ordu bat"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Gauerdia"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Eguerdia"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Atzera"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Gaur"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Egutegia"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Atzo"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Bihar"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Erakutsi"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Izkutatu"
diff --git a/parts/django/django/conf/locale/eu/__init__.py b/parts/django/django/conf/locale/eu/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/eu/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/eu/formats.py b/parts/django/django/conf/locale/eu/formats.py
deleted file mode 100644
index 822dbfa..0000000
--- a/parts/django/django/conf/locale/eu/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'Yeko M\re\n d\a'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-SHORT_DATE_FORMAT = 'Y M j'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/fa/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/fa/LC_MESSAGES/django.mo
deleted file mode 100644
index e4f1a1e..0000000
--- a/parts/django/django/conf/locale/fa/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fa/LC_MESSAGES/django.po b/parts/django/django/conf/locale/fa/LC_MESSAGES/django.po
deleted file mode 100644
index 2536b74..0000000
--- a/parts/django/django/conf/locale/fa/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4006 +0,0 @@
-# Persian translation of Django.
-# Copyright (C) 2007 THE Django'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the Django package.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-01 02:00+0430\n"
-"PO-Revision-Date: 2008-09-01 02:00+0430\n"
-"Last-Translator: Reza Mohammadi <reza@zeerak.ir>\n"
-"Language-Team: Persian <farsi@lists.sharif.edu>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "عربی"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "بنگالی"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "بلغاری"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "کاتالونیایی"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "چکی"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "ویلزی"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "دانمارکی"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "آلمانی"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "یونانی"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "انگلیسی"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "اسپانیایی"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "استونی"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "اسپانیاییِ آرژانتین"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "باسکی"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "فارسی"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "فنلاندی"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "فرانسوی"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "ایرلندی"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "گالیسیایی"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "مجاری"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "عبری"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr "کرواتی"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "ایسلندی"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "ایتالیایی"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "ژاپنی"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "گرجی"
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "کره‌ای"
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "خمری"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "کناده‌ای"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "لتونیایی"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "لیتوانی"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "مقدونی"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "هلندی"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "نروژی"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "لهستانی"
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "پرتغالی"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "پرتغالیِ برزیل"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "رومانی"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "روسی"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "اسلواکی"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "اسلووِنی"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "صربی"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "سوئدی"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "تامیلی"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "تلوگویی"
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "ترکی"
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "اکراینی"
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "چینی ساده‌شده"
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "چینی سنتی"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>بر اساس %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "همه"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "هر تاریخی"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "امروز"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "۷ روز اخیر"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "این ماه"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "امسال"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:390
-msgid "Yes"
-msgstr "بله"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:390
-msgid "No"
-msgstr "خیر"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:390
-msgid "Unknown"
-msgstr "ناشناخته"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "زمان اتفاق"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "شناسهٔ شیء"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "صورت شیء"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "نشانه عمل"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "پیغام تغییر"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "مورد اتفاقات"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "موارد اتفاقات"
-
-#: contrib/admin/options.py:56 contrib/admin/options.py:120
-msgid "None"
-msgstr "هیچ"
-
-#: contrib/admin/options.py:334
-#, python-format
-msgid "Changed %s."
-msgstr "%s تغییر یافته."
-
-#: contrib/admin/options.py:334 contrib/admin/options.py:344
-msgid "and"
-msgstr "و"
-
-#: contrib/admin/options.py:339
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s «%(object)s» اضافه شد."
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s %(name)s «%(object)s» تغییر یافت."
-
-#: contrib/admin/options.py:348
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s «%(object)s» حذف شد."
-
-#: contrib/admin/options.py:352
-msgid "No fields changed."
-msgstr "فیلدی تغییر نیافته است."
-
-#: contrib/admin/options.py:413 contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s «%(obj)s» با موفقیت اضافه شد."
-
-#: contrib/admin/options.py:417 contrib/admin/options.py:450
-#: contrib/auth/admin.py:57
-msgid "You may edit it again below."
-msgstr "می‌توانید مجدداً آنرا در این پایین ویراش کنید."
-
-#: contrib/admin/options.py:427 contrib/admin/options.py:460
-#, python-format
-msgid "You may add another %s below."
-msgstr "می‌توانید یک %s دیگر در این پایین اضافه کنید"
-
-#: contrib/admin/options.py:448
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s·\"%(obj)s\" با موفقیت تغییر یافت."
-
-#: contrib/admin/options.py:456
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s·\"%(obj)s\" با موفقیت اضافه شد. می‌توانید در این پایین ویرایشش کنید."
-
-#: contrib/admin/options.py:532
-#, python-format
-msgid "Add %s"
-msgstr "اضافه کردن %s"
-
-#: contrib/admin/options.py:610
-#, python-format
-msgid "Change %s"
-msgstr "تغییر %s"
-
-#: contrib/admin/options.py:642
-msgid "Database error"
-msgstr "خطا در بانک اطلاعاتی"
-
-#: contrib/admin/options.py:692
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s·\"%(obj)s\" با موفقیت حذف شد."
-
-#: contrib/admin/options.py:699
-msgid "Are you sure?"
-msgstr "آیا مطمئن هستید؟"
-
-#: contrib/admin/options.py:728
-#, python-format
-msgid "Change history: %s"
-msgstr "تاریخچهٔ تغییر: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:16
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"لطفاً نام کاربری و گذرواژه صحیح را وارد کنید. توجه کنید که هر دو مقدار به "
-"حروف کوچک و بزرگ (انگلیسی) حساس هستند."
-
-#: contrib/admin/sites.py:242 contrib/admin/views/decorators.py:68
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"لطفاً مجدداً وارد شوید، چرا که مدت زیادی در وبگاه غیرفعال بوده‌اید. نگران "
-"نباشید، اطلاعات وارد شدهٔ شما ذخیره شده‌اند."
-
-#: contrib/admin/sites.py:249 contrib/admin/views/decorators.py:75
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"به نظر می‌رسد تنظیمات مرورگر شما طوری است که کوکی‌ها را قبول نمی‌کند. لطفاً "
-"کوکی‌ها را در مرورگر خود فعال نموده و مجدداً تلاش کنید."
-
-#: contrib/admin/sites.py:265 contrib/admin/sites.py:271
-#: contrib/admin/views/decorators.py:94
-msgid "Usernames cannot contain the '@' character."
-msgstr "نام کاربری نمی تواند حاوی نویسهٔ '@' باشد."
-
-#: contrib/admin/sites.py:268 contrib/admin/views/decorators.py:90
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"نشانی پست الکترونیکی شما نام کابریتان نیست. %s را به جای آن امتحان کنید."
-
-#: contrib/admin/sites.py:336
-msgid "Site administration"
-msgstr "مدیریت وبگاه"
-
-#: contrib/admin/sites.py:358 contrib/admin/templates/admin/login.html:27
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:30
-msgid "Log in"
-msgstr "ورود"
-
-#: contrib/admin/sites.py:406
-#, python-format
-msgid "%s administration"
-msgstr "مدیریت %s"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "یک و یا چند %(fieldname)s در %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "یک و یا چند %(fieldname)s در %(name)s"
-
-#: contrib/admin/widgets.py:65
-msgid "Date:"
-msgstr "تاریخ:"
-
-#: contrib/admin/widgets.py:65
-msgid "Time:"
-msgstr "زمان:"
-
-#: contrib/admin/widgets.py:89
-msgid "Currently:"
-msgstr "اکنون:"
-
-#: contrib/admin/widgets.py:89
-msgid "Change:"
-msgstr "تغییر:"
-
-#: contrib/admin/widgets.py:115
-msgid "Lookup"
-msgstr "جستجو"
-
-#: contrib/admin/widgets.py:195
-msgid "Add Another"
-msgstr "اضافه کردن یکی دیگر"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "صفحه یافت نشد"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "متأسفیم، صفحه مورد تقاضا یافت نشد."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "آغازه"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "خطای کارگزار"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "خطای کارگزار (۵۰۰)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "خطای کارگزار <em>(۵۰۰)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"خطایی وجود دارد. این خطا توسط پست الکترونیکی به مدیران وبگاه گزارش داده شده "
-"است و در اولین فرصت اصلاح خواهد شد. از بردباری شما متشکریم."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "خوش آمدید،"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "مستندات"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "تغییر گذرواژه"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "خروج"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "وب‌گاه مدیریت Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "مدیریت Django"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "اضافه کردن"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "تاریخچه"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "مشاهده در وبگاه"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "لطفاً خطای زیر را حل کنید."
-msgstr[1] "لطفاً خطاهای زیر را حل کنید."
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "اضافه‌کردن %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "فیلتر"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:246
-msgid "Delete"
-msgstr "حذف"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"حذف %(object_name)s·'%(escaped_object)s' می تواند باعث حذف اشیاء مرتبط شود. "
-"اما حساب شما دسترسی لازم برای حذف اشیای از انواع زیر را ندارد:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"آیا مطمئنید که می‌خواهید %(object_name)s·\"%(escaped_object)s\" را حذف کنید؟ "
-"کلیهٔ اشیای مرتبط زیر حذف خواهند شد:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "بله، مطمئن هستم."
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "براساس %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "مدل‌های موجود در برنامهٔ %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "تغییر"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "شما اجازهٔ ویرایش چیزی را ندارید."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "اعمال اخیر"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "اعمال من"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "چیزی در دسترس نیست"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"در نصب بانک اطلاعاتی شما مشکلی وجود دارد. مطمئن شوید که جداول مربوطه به "
-"درستی ایجاد شده‌اند و اطمینان حاصل کنید که بانک اطلاعاتی توسط کاربر مربوطه "
-"قابل خواندن می باشد."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "نام کاربری:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "گذرواژه:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "تاریخ/ساعت"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "کاربر"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "عمل"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"این شیء تاریخچهٔ تغییرات ندارد. احتمالا این شیء توسط وبگاه مدیریت ایجاد نشده "
-"است."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "نمایش همه"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "برو"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "۱ نتیجه"
-msgstr[1] "%(counter)s نتیجه"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "در مجموع %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "ذخیره"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "ذخیره به عنوان جدید"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "ذخیره و ایجاد یکی دیگر"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "ذخیره و ادامه ویرایش"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"ابتدا یک نام کاربری و گذرواژه وارد کنید. سپس می توانید مشخصات دیگر کاربر را "
-"ویرایش کنید."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "نام کاربری"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:184
-msgid "Password"
-msgstr "گذرواژه"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "گذرواژه (تکرار)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "همان گذرواژهٔ بالایی را برای اطمینان دوباره وارد کنید."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "برای کابر <strong>%(username)s</strong> یک گذرنامهٔ جدید وارد کنید."
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "حذف؟"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "متشکر از اینکه مدتی از وقت خود را به ما اختصاص دادید."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "ورود دوباره"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "تغییر گذرواژه"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "گذرواژه تغییر یافت."
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "گذرواژهٔ شما تغییر یافت."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"گذرواژهٔ قدیمی خود را، برای امنیت بیشتر، وارد کنید و سپس گذرواژهٔ جدیدتان را "
-"دوبار وارد کنید تا ما بتوانیم چک کنیم که به درستی تایپ کرده‌اید."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "گذرواژهٔ قدیمی"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "گذرواژهٔ جدید"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "تکرار گذرواژه"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "تغییر گذرواژهٔ من"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "ایجاد گذرواژهٔ جدید"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "گذرواژهٔ جدید ایجاد شد"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "گذرواژهٔ جدیدتان تنظیم شد. اکنون می‌توانید وارد وبگاه شوید."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "تصدیق گذرواژهٔ جدید"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "ورود گذرواژهٔ جدید"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"گذرواژهٔ جدیدتان را دوبار وارد کنید تا ما بتوانیم چک کنیم که به درستی تایپ "
-"کرده‌اید."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "گذرواژهٔ جدید ایجاد نشد."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"پیوند ایجاد گذرواژهٔ جدید نامعتبر بود، احتمالاً به این علت که قبلاً از آن "
-"استفاده شده است. لطفاً برای یک گذرواژهٔ جدید درخواست دهید."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "گذرواژهٔ جدید ایجاد شد."
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"ما به نشانی پست اکترونیکی‌ای که وارد کردید دستورالعملی برای تنظیم گذرواژه‌تان "
-"فرستادیم. به زودی به شما می‌رسد."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"درخواستی برای ایجاد گذرواژهٔ جدید با نشانی شما به ما رسیده است و ما این نامه "
-"را برای شما فرستادیم"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "برای حساب کاربریتان در %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "لطفاً به صفحهٔ زیر بروید و یک گذرواژهٔ جدید انتخاب کنید:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "نام کاربریتان، اگر یادتان رفته است:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "متشکر از استفادهٔ شما از وبگاه ما"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "گروه %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"گذرواژه خود را فراموش کرده‌اید؟ نشانی پست الکترونیکی خود را وارد کنید. ما "
-"دستورالعملی برای ایجاد گذرنامهٔ جدید به پست الکترونیکی‌تان خواهیم فرستاد."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "نشانی پست الکترونیکی:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "ایجاد گذرواژهٔ جدید"
-
-#: contrib/admin/templatetags/admin_list.py:284
-msgid "All dates"
-msgstr "همهٔ تاریخ‌ها"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "%s انتخاب کنید"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "%s را برای تغییر انتخاب کنید"
-
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
-msgid "site"
-msgstr "وبگاه"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "قالب"
-
-#: contrib/admindocs/views.py:57 contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "برچسب:"
-
-#: contrib/admindocs/views.py:90 contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "فیلتر"
-
-#: contrib/admindocs/views.py:154 contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "نمایش:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "برنامهٔ %r یافت نشد"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "مدل %(model_name)r در برنامهٔ %(app_label)r یافت نشد"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "شیء «%(app_label)s.%(data_type)s» مرتبط"
-
-#: contrib/admindocs/views.py:205 contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241 contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "مدل:"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "اشیاء «%(app_label)s.%(object_name)s» مرتبط"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "همهٔ %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "تعداد %s"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "فیلدهای شیء %s"
-
-#: contrib/admindocs/views.py:314 contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327 contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "عدد صحیح"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "بولی (درست یا غلط)"
-
-#: contrib/admindocs/views.py:316 contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "رشته (تا %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "اعداد صحیح جدا-شده با ویلگول"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "تاریخ (بدون زمان)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "تاریخ (با زمان)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "عدد دهدهی"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "نشانی پست الکترونیکی"
-
-#: contrib/admindocs/views.py:322 contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "مسیر پرونده"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "عدد اعشاری"
-
-#: contrib/admindocs/views.py:328 contrib/comments/models.py:57
-msgid "IP address"
-msgstr "نشانی IP"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "‌بولی (درست، نادرست یا پوچ)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "رابطه به مدل والد"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "شماره تلفن"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "متن"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "زمان"
-
-#: contrib/admindocs/views.py:339 contrib/comments/forms.py:20
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "نشانی اینترنتی"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "ایالت آمریکا(دو حرف بزرگ)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "متن XML"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "به نظر نمی رسد %s یک شیء از نوع urlpattern باشد"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "مستندات این صفحه"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"شما را از هر صفحه‌ای که باشید به مستندات نمایی که صفحه را ایجاد کرده می‌برد"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "نمایش مشخصهٔ شیء"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"نمایش محتوا و مشخصهٔ منحصر به فرد برای صفحاتی که یک شیء را نمایش می‌دهند."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "ویرایش این شیء (پنجرهٔ کنونی)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "پرش به صفحهٔ مدیر برای صفحاتی که یک شیء را نمایش می‌دهند."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "ویرایش این شیء (پنجرهٔ جدید)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "مانند بالا، اما صفحهٔ مدیر را در پنجرهٔ جدیدی باز می‌کند."
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "اطلاعات شخصی"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "اجازه‌ها"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "تاریخ‌های مهم"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "گروه‌ها"
-
-#: contrib/auth/admin.py:62
-msgid "Add user"
-msgstr "ایجاد کاربر"
-
-#: contrib/auth/admin.py:88
-msgid "Password changed successfully."
-msgstr "گذرواژه با موفقیت تغییر یافت."
-
-#: contrib/auth/admin.py:94
-#, python-format
-msgid "Change password: %s"
-msgstr "تغییر گذرواژه: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr "الزامی. ۳۰ حرف یا کمتر. فقط حروف الفبا (ارقام، الفبا و خط زیر)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "این مقدار فقط باید حاوی حروف، اعداد و یا خط زیر باشد."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "تصدیق گذرواژه"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "کاربری با این نام کاربری وجود دارد."
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "دو فیلد گذرواژه با هم مطابقت ندارند."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "این حساب غیرفعال است."
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"به نطر می رسد مرورگر شما کوکی‌ها را قبول نمی‌کند. کوکی‌ها برای ورود به وبگاه "
-"لازم هستند."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "پست الکترونیکی"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "این پست الکترونیکی در سیستم حساب ندارد. آیا مطمئن هستید که عضو شده‌اید؟"
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "ایجاد گذرواژهٔ جدید در %s"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "گذرواژهٔ جدید"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "تصدیق گذرواژهٔ جدید"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "گذرواژهٔ قدیمی"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "گذرواژهٔ قدیمی شما اشتباه بود. لطفاً دوباره وارد کنید."
-
-#: contrib/auth/models.py:72 contrib/auth/models.py:95
-msgid "name"
-msgstr "نام"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "نام کد"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "اجازه"
-
-#: contrib/auth/models.py:78 contrib/auth/models.py:96
-msgid "permissions"
-msgstr "اجازه‌ها"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "گروه"
-
-#: contrib/auth/models.py:100 contrib/auth/models.py:146
-msgid "groups"
-msgstr "گروه‌ها"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "نام کاربری"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "نام"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "نام خانوادگی"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "نشانی پست الکترونیکی"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "گذرواژه"
-
-#: contrib/auth/models.py:140
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "وضعیت کارمندی"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr "تعبیه شده برای اینکه در وبگاه مدیریت، کاربر بتواند یا نتواند وارد شود."
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "فعال"
-
-#: contrib/auth/models.py:142
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"برای نشان دادن اینکه آیا باید با این کاربر به عنوان کاربر فعال رفتار کرد "
-"تعبیه شده است. به جای حذف کاربر تیک را بردارید."
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr "ابرکاربر"
-
-#: contrib/auth/models.py:143
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"نشان می‌دهد که آیا این کاربر دسترسی نامحدود به کلیهٔ بخشهای وبگاه مدیریت دارد."
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "آخرین ورود"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "تاریخ پیوستن"
-
-#: contrib/auth/models.py:147
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"علاوه بر دسترسی‌هایی که به طور دستی تنظیم شده، این کاربر تمامی دسترسی‌های اعطا "
-"شده به گروه‌هایی که عضو آن‌ها هست را خواهد داشت."
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "اجازه‌های کاربر"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "کاربر"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "کاربرها"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "پیغام"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "خارج شدید"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:423
-msgid "Enter a valid e-mail address."
-msgstr "یک نشانی پست الکترونیکی معتبر وارد کنید."
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "محتوا"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "فوق داده"
-
-#: contrib/comments/forms.py:18
-msgid "Name"
-msgstr "نام"
-
-#: contrib/comments/forms.py:19
-msgid "Email address"
-msgstr "نشانی پست الکترونیکی"
-
-#: contrib/comments/forms.py:21
-msgid "Comment"
-msgstr "نظر:"
-
-#: contrib/comments/forms.py:24
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "اگر چیزی در این فیلد وارد کنید، نظر شما به عنوان اسپم شناخته خواهد شد"
-
-#: contrib/comments/forms.py:124
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "حرف دهنت رو بفهم! کلمهٔ %s اینجا قابل قبول نیست"
-msgstr[1] "حرف دهنت رو بفهم! کلمات %s اینجا قابل قبول نیست"
-
-#: contrib/comments/models.py:22
-msgid "object ID"
-msgstr "مشخصهٔ شیء"
-
-#: contrib/comments/models.py:49
-msgid "user's name"
-msgstr "نام کاربر"
-
-#: contrib/comments/models.py:50
-msgid "user's email address"
-msgstr "نشانی پست الکترونیکی کاربر"
-
-#: contrib/comments/models.py:51
-msgid "user's URL"
-msgstr "نشانی اینترنتی کاربر"
-
-#: contrib/comments/models.py:53
-msgid "comment"
-msgstr "نظر"
-
-#: contrib/comments/models.py:56
-msgid "date/time submitted"
-msgstr "تاریخ/زمان فرستاده شد"
-
-#: contrib/comments/models.py:58
-msgid "is public"
-msgstr "عمومی است"
-
-#: contrib/comments/models.py:59
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "تیک این جعبه را بردارید تا نظر به طور کارا از وبگاه ناپدید شود."
-
-#: contrib/comments/models.py:61
-msgid "is removed"
-msgstr "حذف شده است"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-
-#: contrib/comments/models.py:114
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "این نظر توسط یک کاربر ثبت‌شده فرستاده شده و لذا نامش فقط-خواندنی است."
-
-#: contrib/comments/models.py:123
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"این نظر توسط یک کاربر ثبت‌شده فرستاده شده و لذا پست الکترونیکی‌اش فقط-خواندنی "
-"است."
-
-#: contrib/comments/models.py:148
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"ارسال‌شده توسط %(user)s در تاریخ %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "نام پایتونی کلاس مدل"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "نوع محتوا"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "نوع‌های محتوا"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"مثال: '/about/contact/'. مطمئن شوید که خط اریب را هم در ابتدا و هم در انتها "
-"گذاشته‌اید."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"این مقدار فقط باید حاوی حروف، اعداد، خط زیر، خط تیره و یا خط اریب باشد."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "گزینه‌های پیشرفته"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "عنوان"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "محتوا"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "فعال کردن نظرات"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "نام قالب"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"مثال: 'flatpages/contact_page.html'. اگر این مشخص نشود، سیستم از 'flatpages/"
-"default.html' استفاده خواهد کرد."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "عضویت لازم است"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"اگر این انتخاب شود، فقط کاربران وارد شده خواهند توانست این صفحه را مشاهده "
-"نمایند."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "صفحه تخت"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "صفحات تخت"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"معذرت می‌خواهیم ولی فرم شما منقضی شده است. لطفاً پر کردن را از این صفحه ادامه "
-"دهید."
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "مقدار جغرافیایی‌ای مقرر نشده است."
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "مقدار جغرافیایی نامعتبر"
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "نوعِ جغرافیایی نامعتبر"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "اُم"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "اُم"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "اُم"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "اُم"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f میلیون"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f بیلیون"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f تریلون"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "یک"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "دو"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "سه"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "چهار"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "پنج"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "شش"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "هفت"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "هشت"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "نُه"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "امروز"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "فردا"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "دیروز"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "کد پستی را به شکل NNNN یا ANNNNAAA وارد کنید."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "در این فیلد فقط عدد می‌توانید وارد کنید."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "این فیلد ۷ یا ۸ رقم لازم دارد."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "کد پستی صحیح را به شکل XXXX وارد کنید."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "کد پستی ۴ رقمی را وارد کنید."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "کد پستی را به شکل XXXXX-XXX وارد کنید."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "شماره تلفنها باید به شکل XX-XXXX-XXXX باشند."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "طول این فیلد حداقل ۱۱ شماره و حداکثر ۱۴ حرف می باشد."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "فیلد حداقل باید ۱۴ شماره باشد"
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "کد پستس را به شکل XXX·XXX. وارد کنید."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "کد پستی را به شکل XXXXX وارد کنید."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "یک شماره تلفن معتبر وارد کنید."
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "این فیلد، ۸ رقم لازم دارد."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "این فیلد ۱۱ رقم لازم دارد."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "یک کد پستی وارد کنید."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "فرم ارسال به نشانی جدید"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "می‌بایست یک مسیر مطلق و بدون نام دامنه باشد. مانند: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "ارسال به نشانی"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"می‌تواند یک مسیر مطلق (همانند بالا) و یا یک آدرس کامل با 'http://‎' باشد."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "باز-ارسال"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "باز-ارسال‌ها"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "کلید نشست"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "اطلاعات نشست"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "تاریخ انقضاء"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "نشست"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "نشست‌ها"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "نام دامنه"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "نام نمایش داده شده"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "وبگاه‌ها"
-
-#: db/models/fields/__init__.py:332 db/models/fields/__init__.py:667
-msgid "This value must be an integer."
-msgstr "این مقدار باید یک عدد صحیح باشد."
-
-#: db/models/fields/__init__.py:363
-msgid "This value must be either True or False."
-msgstr "این مقدار باید درست یا غلط باشد."
-
-#: db/models/fields/__init__.py:396
-msgid "This field cannot be null."
-msgstr "این فیلد نمی تواند پوچ باشد."
-
-#: db/models/fields/__init__.py:412
-msgid "Enter only digits separated by commas."
-msgstr "فقط ارقام جدا شده با کاما وارد کنید."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "یک تاریخ معتبر در قالب YYYY-MM-DD وارد کنید."
-
-#: db/models/fields/__init__.py:452
-#, python-format
-msgid "Invalid date: %s"
-msgstr "تاریخ نامعتبر: %s"
-
-#: db/models/fields/__init__.py:516 db/models/fields/__init__.py:534
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "یک تاریخ/زمان معتبر در قالب YYYY-MM-DD HH:MM[:ss[.uuuuuu]] وارد کنید."
-
-#: db/models/fields/__init__.py:570
-msgid "This value must be a decimal number."
-msgstr "این مقدار باید یک عدد باشد."
-
-#: db/models/fields/__init__.py:703
-msgid "This value must be either None, True or False."
-msgstr "این مقدار باید یکی از مقادیر پوچ یا درست یا نادرست باشد."
-
-#: db/models/fields/__init__.py:811 db/models/fields/__init__.py:825
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "یک زمان معتبر در قالب HH:MM[:ss[.uuuuuu]] وارد کنید."
-
-#: db/models/fields/related.py:748
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"برای انتخاب بیش از یکی \"Control\"، یا \"Command\" روی Mac، را پایین نگه "
-"دارید."
-
-#: db/models/fields/related.py:825
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "لطفاً شناسهٔ %(self)s معتبر وارد کنید. مقدار %(value)r نامعتبر است."
-msgstr[1] ""
-"لطفاً شناسه‌های %(self)s معتبر وارد کنید. مقادیر %(value)r نامعتبر هستند."
-
-#: forms/fields.py:52
-msgid "This field is required."
-msgstr "این فیلد لازم است."
-
-#: forms/fields.py:53
-msgid "Enter a valid value."
-msgstr "یک مقدار معتبر وارد کنید."
-
-#: forms/fields.py:133
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"مطمئن شوید این مقدار حداکثر %(max)d نویسه دارد. (الان %(length)d دارد.)"
-
-#: forms/fields.py:134
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "مطمئن شوید این مقدار حداقل %(min)d نویسه دارد. (الان %(length)d دارد.)"
-
-#: forms/fields.py:161
-msgid "Enter a whole number."
-msgstr "به طور کامل یک عدد وارد کنید."
-
-#: forms/fields.py:162 forms/fields.py:191 forms/fields.py:220
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "مطمئن شوید این مقدار کوچکتر و یا مساوی %s است."
-
-#: forms/fields.py:163 forms/fields.py:192 forms/fields.py:221
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "مطمئن شوید این مقدار بزرگتر و یا مساوی %s است."
-
-#: forms/fields.py:190 forms/fields.py:219
-msgid "Enter a number."
-msgstr "یک عدد وارد کنید."
-
-#: forms/fields.py:222
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "مطمئن شوید در مجموع بیش از %s رقم نداشته باشد."
-
-#: forms/fields.py:223
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "مطمئن شوید بیش از %s رقم اعشاری نداشته باشد."
-
-#: forms/fields.py:224
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "مطمئن شوید بیش از %s رقم قبل ممیز نداشته باشد."
-
-#: forms/fields.py:282 forms/fields.py:815
-msgid "Enter a valid date."
-msgstr "یک تاریخ معتبر وارد کنید."
-
-#: forms/fields.py:316 forms/fields.py:816
-msgid "Enter a valid time."
-msgstr "یک زمان معتبر وارد کنید."
-
-#: forms/fields.py:355
-msgid "Enter a valid date/time."
-msgstr "یک تاریخ/زمان معتبر وارد کنید."
-
-#: forms/fields.py:441
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "پرونده‌ای ارسال نشده است. نوع کدگذاری فرم را بررسی کنید."
-
-#: forms/fields.py:442
-msgid "No file was submitted."
-msgstr "پرونده‌ای ارسال نشده است."
-
-#: forms/fields.py:443
-msgid "The submitted file is empty."
-msgstr "پروندهٔ ارسال‌شده خالیست."
-
-#: forms/fields.py:472
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"یک تصویر معتبر بارگذاری کنید. پرونده‌ای که بارگذاری کردید یا تصویر نبوده و یا "
-"تصویری مخدوش بوده است."
-
-#: forms/fields.py:533
-msgid "Enter a valid URL."
-msgstr "یک نشانی اینترنتی معتبر وارد کنید."
-
-#: forms/fields.py:534
-msgid "This URL appears to be a broken link."
-msgstr "به نظر می‌رسد این نشانی یک پیوند شکسته است."
-
-#: forms/fields.py:613 forms/fields.py:664
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "یک گزینهٔ معتبر انتخاب کنید. %(value)s از گزینه‌های موجود نیست."
-
-#: forms/fields.py:665 forms/fields.py:726 forms/models.py:537
-msgid "Enter a list of values."
-msgstr "فهرستی از مقادیر وارد کنید."
-
-#: forms/fields.py:844
-msgid "Enter a valid IPv4 address."
-msgstr "یک نشانی IPv4 معتبر وارد کنید."
-
-#: forms/fields.py:854
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "یک 'slug' معتبر شامل حروف، ارقام، خط زیر و یا خط تیره وارد کنید."
-
-#: forms/formsets.py:242 forms/formsets.py:244
-msgid "Order"
-msgstr "ترتیب:"
-
-#: forms/models.py:469
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "یک گزینهٔ معتبر انتخاب کنید. آن گزینه از گزینه‌های موجود نیست."
-
-#: forms/models.py:538
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "یک گزینهٔ معتبر انتخاب کنید. %s از گزینه‌های موجود نیست."
-
-#: template/defaultfilters.py:706
-msgid "yes,no,maybe"
-msgstr "بله،خیر،شاید"
-
-#: template/defaultfilters.py:737
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d بایت"
-
-#: template/defaultfilters.py:739
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:741
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: template/defaultfilters.py:742
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "ب.ظ."
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "صبح"
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "بعد از ظهر"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "صبح"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "نیمه شب"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "ظهر"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "دوشنبه"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "سه شنبه"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "چهارشنبه"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "پنجشنبه"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "جمعه"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "شنبه"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "یکشنبه"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "دوشنبه"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "سه‌شنبه"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "چهارشنبه"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "پنجشنبه"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "جمعه"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "شنبه"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "یکشنبه"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "ژانویه"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "فوریه"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "مارس"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "آوریل"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "مه"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "ژوئن"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "ژوئیه"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "اوت"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "سپتامبر"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "اکتبر"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "نوامبر"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "دسامبر"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "ژانویه"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "فوریه"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "مارس"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "آوریل"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "مه"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "ژوئن"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "ژوئیه"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "اوت"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "سپتامبر"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "اکتبر"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "نوامبر"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "دسامبر"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "ژانویه"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "فوریه"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "اوت"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "سپتامبر"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "اکتبر"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "نوامبر"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "دسامبر"
-
-#: utils/text.py:128
-msgid "or"
-msgstr "یا"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "سال"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "ماه"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "هفته"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "روز"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ساعت"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "دقیقه"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "دقیقه"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr "، %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr ""
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s با موفقیت ایجاد شد."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s با موفقیت به روز شد."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s حذف شد."
diff --git a/parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index ce6a1c1..0000000
--- a/parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 15252b4..0000000
--- a/parts/django/django/conf/locale/fa/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,118 +0,0 @@
-# Persian translation of Django.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-01 02:00+0430\n"
-"PO-Revision-Date: 2008-09-01 02:00+0430\n"
-"Last-Translator: Reza Mohammadi <reza@zeerak.ir>\n"
-"Language-Team: Persian <farsi@lists.sharif.edu>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s موجود"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "انتخاب همه"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "اضافه کردن"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "حذف"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s انتخاب شده"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "موارد مورد نظر را انتخاب کرده و کلیک کنید "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "پاک کردن همه"
-
-#: contrib/admin/media/js/dateparse.js:32
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "ژانویه فوریه مارس آوریل مه ژوئن ژوئیه اوت سپتامبر اکتبر نوامبر دسامبر"
-
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "یکشنبه دوشنبه سه‌شنبه چهارشنبه پنجشنبه جمعه شنبه"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "یکشنبه دوشنبه سه‌شنبه چهارشنبه پنجشنبه جمعه شنبه"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "حالا"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "ساعت"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "یک زمان انتخاب کنید"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "نیمه‌شب"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "۶ صبح"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "ظهر"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "انصراف"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "امروز"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "تقویم"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "دیروز"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "فردا"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "نمایش"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "پنهان کردن"
diff --git a/parts/django/django/conf/locale/fa/__init__.py b/parts/django/django/conf/locale/fa/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/fa/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/fa/formats.py b/parts/django/django/conf/locale/fa/formats.py
deleted file mode 100644
index dc11281..0000000
--- a/parts/django/django/conf/locale/fa/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = 'j F Y، ساعت G:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'Y/n/j'
-SHORT_DATETIME_FORMAT = 'Y/n/j،‏ G:i:s'
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/fi/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/fi/LC_MESSAGES/django.mo
deleted file mode 100644
index 316cdbb..0000000
--- a/parts/django/django/conf/locale/fi/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fi/LC_MESSAGES/django.po b/parts/django/django/conf/locale/fi/LC_MESSAGES/django.po
deleted file mode 100644
index ef87894..0000000
--- a/parts/django/django/conf/locale/fi/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5558 +0,0 @@
-# Finnish translation of Django
-# Copyright (C) 2006-2007
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-11 06:00+0300\n"
-"PO-Revision-Date: 2007-09-15 00:34+0300\n"
-"Last-Translator: Aku Kotkavuo <aku.kotkavuo@norfello.com>\n"
-"Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-Language: Finnish\n"
-"X-Poedit-Country: FINLAND\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "arabia"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "bulgaria"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengali"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosnia"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "katalaani"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "tšekki"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "wales"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "tanska"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "saksa"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "kreikka"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "englanti"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "brittienglanti"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "espanja"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Argentiinan espanja"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "viro"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "baski"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "persia"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "suomi"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "ranska"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "friisi"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "irlanti"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "galicia"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "heprea"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "kroatia"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "unkari"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "indonesia"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "islanti"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "italia"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "japani"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "georgia"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "korea"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "liettua"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "latvia"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "makedonia"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "mongolia"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "hollanti"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "norja"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "norja (kirjanorja)"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "norja (uusnorja)"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "puola"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "portugali"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "brasilian portugali"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "romania"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "venäjä"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "slovakia"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "slovenia"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "albaani"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "serbia"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "serbian latina"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "ruotsi"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "tamili"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "thain kieli"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "turkki"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "ukraina"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "vietnam"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "kiina (yksinkertaistettu)"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "kiina (perinteinen)"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Onnistuneesti poistettu %(count)d \"%(items)s\"-kohdetta."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Oletko varma?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Poista valitut \"%(verbose_name_plural)s\"-kohteet"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Kaikki"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Mikä tahansa päivä"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Tänään"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Viimeiset 7 päivää"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Tässä kuussa"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Tänä vuonna"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Kyllä"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Ei"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Tuntematon"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Toiminto:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "tapahtumahetki"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "kohteen tunniste"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "kohteen tiedot"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "tapahtumatyyppi"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "selitys"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "lokimerkintä"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "lokimerkinnät"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Ei arvoa"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Muokattu: %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "ja"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Lisätty %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Muutettu %(list)s kohteelle %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Poistettu %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Ei muutoksia kenttiin."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" on lisätty."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Voit muokata sitä edelleen alla."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Uusi %s on lisättävissä alla."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" on muutettu."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" on lisätty. Voit muokata sitä uudelleen alla."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Kohteiden täytyy olla valittuna, jotta niihin voi kohdistaa toimintoja. "
-"Kohteita ei ole muutettu."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Ei toimintoa valittuna."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Lisää %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s perusavaimella %(key)r ei ole olemassa."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Muokkaa %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Tietokantavirhe"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s on muokattu."
-msgstr[1] "%(count)s \"%(name)s\"-kohdetta on muokattu."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s valittu"
-msgstr[1] "Kaikki %(total_count)s valittu"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 valittuna %(cnt)s mahdollisesta"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" on poistettu."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Muokkaushistoria: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Käyttäjätunnus tai salasana ei kelpaa. Huomaa, että isot ja pienet kirjaimet "
-"ovat merkitseviä."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Kirjaudu uudelleen sisään, sillä istuntosi on vanhentunut."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Selaimesi ei vaikuta sallivan evästeitä. Muuta asetukset sallimaan evästeet, "
-"lataa tämä sivu uudelleen ja yritä uudestaan."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Käyttäjätunnuksessa ei saa olla '@'-merkkiä."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Sähköpostiosoitteesi ei ole käyttäjätunnuksesi. Kokeile '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Sivuston ylläpito"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Kirjaudu sisään"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s ylläpito"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Pvm:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Klo:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Tällä hetkellä:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Muokkaa:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Etsi"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Lisää seuraava"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Sivua ei löydy"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Pahoittelemme, pyydettyä sivua ei löytynyt."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Etusivu"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Palvelinvirhe"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Palvelinvirhe (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Palvelinvirhe <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Palvelimella on tapahtunut virhe. Virheestä on ilmoitettu sivuston "
-"ylläpitäjille ja se hoidetaan pian. Kiitämme kärsivällisyydestä."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Suorita valittu toiminto"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Suorita"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Klikkaa tästä valitaksesi kohteet kaikilta sivuilta"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Valitse kaikki %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Tyhjennä valinta"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Tervetuloa,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Ohjeita"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Vaihda salasana"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Kirjaudu ulos"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django-sivuston ylläpito"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Djangon ylläpito"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Lisää"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Muokkaushistoria"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Näytä lopputulos"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Korjaa allaoleva virhe."
-msgstr[1] "Korjaa allaolevat virheet."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Lisää %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Suodatin"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Poista"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Kohteen '%(escaped_object)s' (%(object_name)s) poisto poistaisi myös siihen "
-"liittyviä kohteita, mutta sinulla ei ole oikeutta näiden kohteiden "
-"poistamiseen:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Haluatko varmasti poistaa kohteen \"%(escaped_object)s\" (%(object_name)s)? "
-"Myös seuraavat kohteet poistettaisiin samalla:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Kyllä, olen varma"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Poista useita kohteita"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Kohteen (%(object_name)s) poisto poistaisi myös siihen liittyviä kohteita, "
-"mutta sinulla ei ole oikeutta näiden kohteiden poistamiseen:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Haluatko varmasti poistaa valitut (%(object_name)s) kohteet? Myös seuraavat "
-"kohteet ja niihin liittyvät kohteet poistettaisiin samalla:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Sovelluksen %(name)s mallit."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Muokkaa"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Sinulla ei ole oikeutta muokata mitään."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Viimeisimmät tapahtumat"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Omat tapahtumani"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ei yhtään"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Tuntematon sisältö"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Tietokanta-asennuksessa on jotain vialla. Varmista, että sopivat taulut on "
-"luotu ja että oikea käyttäjä voi lukea tietokantaa."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Käyttäjätunnus:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Salasana:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Pvm/klo"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Käyttäjä"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Tapahtuma"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Tällä kohteella ei ole muutoshistoriaa. Sitä ei ole ilmeisesti lisätty tämän "
-"ylläpitosivun avulla."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Näytä kaikki"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Tallenna ja poistu"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Haku"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 hakutulos"
-msgstr[1] "%(counter)s hakutulosta"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "yhteensä %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Tallenna uutena"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Tallenna ja lisää toinen"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Tallenna välillä ja jatka muokkaamista"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Syötä ensin käyttäjätunnus ja salasana. Sen jälkeen voit muokata muita "
-"käyttäjän tietoja."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Syötä käyttäjän <strong>%(username)s</strong> uusi salasana."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Salasana"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Salasana toistamiseen"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Syötä sama salasana tarkistuksen vuoksi toistamiseen."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Lisää toinen %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Poista"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Poista?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Kiitos sivuillamme viettämästäsi ajasta."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Kirjaudu uudelleen sisään"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Salasanan vaihtaminen"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Salasanan vaihtaminen onnistui"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Salasanasi on vaihdettu."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Syötä vanha salasanasi varmistukseksi, ja syötä sitten uusi salasanasi kaksi "
-"kertaa, jotta se tulee varmasti oikein."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Vanha salasana"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Uusi salasana"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Vaihda salasana"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Salasanan nollaus"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Salasanan nollaus valmis"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Salasanasi on asetettu. Nyt voit kirjautua sisään."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Salasanan nollauksen vahvistus"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Syötä uusi salasana"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Syötä uusi salasanasi kaksi kertaa, jotta voimme varmistaa että syötit sen "
-"oikein."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Uusi salasana:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Varmista uusi salasana:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Salasanan nollaus ei onnistunut"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Salasanan nollauslinkki oli virheellinen, mahdollisesti siksi että se on jo "
-"käytetty. Ole hyvä ja pyydä uusi salasanan nollaus."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Salasanan nollaus onnistui"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Uusi salasanasi on lähetetty antamaasi sähköpostiosoitteeseen. Se saapuu "
-"tuota pikaa."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Sait tämän viestin, koska pyysit uutta salasanaa"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "sivuston %(site_name)s käyttäjätilillesi"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Määrittele uusi salasanasi oheisella sivulla:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Käyttäjätunnuksesi siltä varalta, että olet unohtanut sen:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Kiitos vierailustasi sivuillamme!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s -sivuston ylläpitäjät"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Unohditko salasanasi? Syötä alle sähköpostiosoitteesi, niin \n"
-"lähetämme sinulle uuden salasanan."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Sähköpostiosoite:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Nollaa salasanani"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Kaikki päivät"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Valitse %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Valitse muokattava %s"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "sivusto"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "mallipohjan nimi"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tagi:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "suodatin:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "näkymä:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Sovellusta %r ei löydy"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Sovelluksesta %(app_label)r ei löydy mallia %(model_name)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "tähän liittyvä `%(app_label)s.%(data_type)s`-kohde"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "malli:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "tähän liittyvät `%(app_label)s.%(object_name)s`-kohteet"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "kaikki %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%s-kohteiden lukumäärä"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s-kohteiden kentät"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ei näytä olevan urlpattern-olio"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Kirjanmerkkiset"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Ohjeiden kirjanmerkkiset"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Asenna kirjanmerkkinen raahaamalla linkki kirjanmerkkien "
-"työkalupalkkiin tai napsauttamalla linkkiä oikeanpuoleisella hiiren "
-"painikkeella ja valitsemalla kirjanmerkkeihin lisäämisen. Sen jälkeen voit "
-"valita kirjanmerkkisen miltä tahansa sivuston sivulta. Huomaa, että jotkin "
-"näistä kirjanmerkkisistä toimivat vain, jos selaat sivustoa \"paikalliseksi"
-"\" määritellyltä tietokoneelta (kysy lisätietoja verkkonne ylläpitäjältä).</"
-"p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Tämän sivun ohjeita"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "Näyttää ohjeet, jotka koskevat ko. sivun luonutta näkymää."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Näytä kohteen tunniste"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Näyttää yksittäistä kohdetta vastaavilla sivuilla kohteen tyypin ja "
-"tunnisteen."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Muokkaa tätä kohdetta (tässä ikkunassa)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Siirtyy yksittäistä kohdetta vastaavalta sivulta kohteen ylläpitosivulle."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Muokkaa tätä kohdetta (uudessa ikkunassa)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Kuten yllä, mutta avaa ylläpitosivun uuteen ikkunaan."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Henkilökohtaiset tiedot"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Oikeudet"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Tärkeät päivämäärät"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Ryhmät"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Salasana muutettu onnistuneesti."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Vaihda salasana: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Käyttäjätunnus"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-" Vaaditaan. Enintään 30 merkkiä. Vain kirjaimet, numerot ja @/./+/-/_ ovat "
-"sallittuja."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Tässä voidaan käyttää vain kirjaimia, numeroita ja @/./+/-/_ merkkejä."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Salasanan vahvistaminen"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Käyttäjätunnus on jo rekisteröity."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Salasanat eivät täsmää."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Tämä käyttäjätili ei ole voimassa."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Selaimesi ei näytä sallivan evästeitä. Sisäänkirjautuminen vaatii evästeen."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Sähköposti"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Sähköpostiosoitetta vastaavaa käyttäjätunnusta ei löydy. Oletko varmasti jo "
-"rekisteröitynyt?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Salasanan nollaus sivustolla %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Uusi salasana uudelleen"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Vanha salasana on virheellinen. Yritä uudelleen."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nimi"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "tunniste"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "oikeus"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "oikeudet"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "ryhmä"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "ryhmät"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "käyttäjätunnus"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-" Vaaditaan. Enintään 30 merkkiä. Vain kirjaimet, numerot ja @/./+/-/_ ovat "
-"sallittuja."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "etunimi"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "sukunimi"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "sähköposti"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "salasana"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Syötä muodossa '[algo]$[suola]$[heksa-digest]' tai käytä <a href=\"password/"
-"\">muutoslomaketta</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "ylläpitäjä"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Määrittää, pääseekö käyttäjä tähän sivuston ylläpito-osioon."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "voimassa"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Määrää, voiko käyttäjä kirjautua sisään. Tällä voi estää käyttäjätilin "
-"käytön poistamatta sitä."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "pääkäyttäjä"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Antaa käyttäjälle kaikki oikeudet ilman, että niitä täytyy erikseen luetella."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "viimeisin kirjautuminen"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "liittynyt"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Erikseen mainittujen oikeuksien lisäksi käyttäjä saa myös kaikki niiden "
-"ryhmien oikeudet, joiden jäsen hän on."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "käyttäjän oikeudet"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "käyttäjä"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "käyttäjät"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "viesti"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Kirjautunut ulos"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Syötä kelvollinen sähköpostiosoite."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Sisältö"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metatieto"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "merkitty"
-msgstr[1] "merkitty"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Merkitse valitut kommentit"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "hyväksytty"
-msgstr[1] "hyväksytty"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Hyväksy valitut kommentit"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "poistettu"
-msgstr[1] "poistettu"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Poista valitut kommentit"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 kommentti %(count)s onnistuneesti."
-msgstr[1] "%(count)s kommenttia %(action)s onnistuneesti."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Kommentit sivustolle %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Sivuston %(site_name)s viimeisimmät kommentit"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nimi"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Sähköpostiosoite"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL-osoite"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Kommentti"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Siivoa suusi! Sanaa \"%s\" ei saa käyttää tässä."
-msgstr[1] "Siivoa suusi! Sanoja \"%s\" ei saa käyttää tässä."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Jos syötät tähän kenttään jotain, kommenttisi luokitellaan roskapostiksi"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "sisältötyyppi"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "kohteen tunniste"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "käyttäjän nimi"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "käyttäjän sähköpostiosoite"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "käyttäjän URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "kommentti"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "lähettämishetki"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP-osoite"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "on julkinen"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Piilottaaksesi kommentin näkymästä sivustolta, poista tämä ruksi."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "on poistettu"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Rastita jos kommentti on asiaankuulumaton. Kommentin tilalla näytetään\n"
-"viesti \"Tämä kommentti on poistettu\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "kommentit"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Kommentin lähettäjän nimeä ei voi muuttaa, koska lähettäjä on kirjautunut "
-"käyttäjä."
-
-# Mitä "sketchy user" tarkoittaa?
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Kommentin lähettäjän sähköpostiosoitetta ei voi muuttaa, koska lähettäjä on "
-"kirjautunut käyttäjä."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-" Kirjoittanut %(user)s, pvm %(date)s\\n\n"
-" \\n\n"
-" %(comment)s\\n\n"
-" \\n\n"
-" http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "merkintä"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "päivä"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "kommentin merkintä"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "kommenttien merkinnät"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Hyväksy kommentti"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Haluatko varmasti tehdä kommentista julkisen?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Hyväksy"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Kiitos hyväksynnästäsi"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Kiitos sivustomme keskusteluihin panostamastasi ajasta"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Poista kommentti"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Haluatko varmasti poistaa tämän kommentin?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Kiitos poistamisesta"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Merkitse tämä kommentti"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Haluatko varmasti merkitä tämän kommentin?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Merkitse"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Kiitos merkitsemisestä"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Lähetä"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Esikatsele"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Kiitos kommentista"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Kiitos kommentistasi"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Esikatsele kommenttia"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Korjaa allaoleva virhe"
-msgstr[1] "Korjaa allaolevat virheet"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Lähetä kommentti"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "tai tee muutoksia"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "mallin python-luokan nimi"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "sisältötyypit"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Esimerkki: '/tietoja/yhteystiedot/'. Varmista, että sekä alussa että lopussa "
-"on kauttaviiva."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Tässä voidaan käyttää vain kirjaimia (a-z, A-Z), numeroita (0-9) sekä ala-, "
-"tavu- ja kauttaviivoja (_ - /)."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Lisäasetukset"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "otsikko"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "sisältö"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "salli kommentit"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "mallipohjan nimi"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Esimerkiksi: 'flatpages/yhteydenotto.html'. Jos tämä jätetään tyhjäksi, "
-"käytetään oletuspohjaa 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "vaaditaan rekisteröityminen"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Jos tämä kohta on valittu, vain sisäänkirjautuneet käyttäjät näkevät sivun."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "tekstisivu"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "tekstisivut"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Pahoittelumme, mutta sessiosi on vanhentunut. Ole hyvä ja jatka lomakkeen "
-"täyttämistä tältä sivulta."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Piste"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Murtoviiva"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygoni"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Monipiste"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Monimurtoviiva"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Monipolygoni"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Geometriakokoelma"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Geometria-arvoa ei annettu."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Virheellinen geometria-arvo."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Virheellinen geometriatyyppi."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr "Kentän SRID-muunnoksessa tapahtui virhe."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f miljoona"
-msgstr[1] "%(value).1f miljoonaa"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miljardi"
-msgstr[1] "%(value).1f miljardia"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f biljoona"
-msgstr[1] "%(value).1f biljoonaa"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "yksi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "kaksi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "kolme"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "neljä"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "viisi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "kuusi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "seitsemän"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "kahdeksan"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "yhdeksän"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "tänään"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "huomenna"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "eilen"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Syötä postinumero muodossa NNNN tai ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Tähän kenttään kelpaavat vain numerot."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Tähän kenttään vaaditaan 7 tai 8 numeroa."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Syötä oikea CUIT joko XX-XXXXXXXX-X tai XXXXXXXXXXXX -muodossa."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Virheellinen CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Kärnten"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Ala-Itävalta"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Ylä-Itävalta"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Steiermark"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tiroli"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wien"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Syötä postinumero muodossa XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Syötä oikea itävaltalainen henkilötunnus muodossa XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Syötä nelinumeroinen postinumero."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Syötä postinumero muodossa XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Puhelinnumeron tulee olla muodossa XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Valitse oikea brasilialainen osavaltio. Valitsemasi osavaltio ei ole yksi "
-"sallituista osavaltiosta."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Virheellinen CPF-numero."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Tämä kenttä vaatii vähintään 11 ja enintään 14 merkkiä."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Virheellinen CNPJ-numero."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Tähän kenttään vaaditaan ainakin 14 numeroa."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Syötä postinumero muodossa XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Syötä oikea kanadalainen henkilötunnus muodossa XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Syötä oikea chileläinen RUT"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "The Chilean RUT is not valid."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Central Bohemian Region"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "South Bohemian Region"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilsen Region"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Carlsbad Region"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Usti Region"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec Region"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Region"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice Region"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysocina Region"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "South Moravian Region"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc Region"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zilin region"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravian-Silesian Region"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Syötä postinumero muodossa XXXXX tai XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Syötä henkilötunnus muodossa XXXXXX/XXXX tai XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Virheellinen valinnainen sukupuoli, valitse 'f' (nainen) tai 'm' (mies)"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Syötä oikea henkilötunnus."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Syötä oikea IC-tunnus."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lower Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "North Rhine-Westphalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Syötä postinumero muodossa XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Syötä oikea saksalainen henkilötunnus muodossa XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Baleaarit"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruña"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúzcoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturia"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Vizcaya"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragonia"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturian ruhtinaskunta"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Baleaarit"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskimaa"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanariansaaret"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastilia-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastilia ja León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Syötä oikea postinumero väliltä ja muodossa 01XXX-52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Syötä oikea puhelinnumero muodoissa 6XXXXXXXX, 8XXXXXXXX tai 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Syötä oikea NIF, NIE tai CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Syötä oikea NIF tai NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Väärä tarkistusnumero NIF:lle."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Väärä tarkistusnumero NIE:lle."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Väärä tarkistusnumero CIF:lle."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Syötä oikea pankin tilinumero muodossa XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Väärä tarkistusnumero pankin tilinumerolle."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Syötä oikea suomalainen henkilötunnus."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Puhelinnumeroiden on ontava muodossa 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Syötä oikea postinumero"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Syötä oikea puhelinnumero"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Syötä oikea rekisterikilpi"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Syötä oikea NIK/KTP numero"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federal Government"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Syötä postinumero muodossa XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Syötä oikea islantilainen henkilötunnus muodossa XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Islantilainen henkilötunnus on virheellinen."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Syötä oikea postinumero."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Syötä oikea henkilötunnus."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Syötä oikea ALV-tunnus."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Syötä postinumero muodossa XXXXXXX tai XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kioto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Syötä oikea kuwaitilainen henkilötunnus"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Syötä oikea postinumero"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Syötä ikea SoFi-numero"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Syötä oikea norjalainen henkilötunnus."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Tähän kenttään vaaditaan 8 numeroa."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Tähän kenttään vaaditaan 11 numeroa."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Henkilötunnus koostuu 11 numerosta."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Virheellinen tarkistusnumero henkilötunnukselle."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Syötä verotusnumero (NIP) muodossa XXX-XXX-XX-XX tai XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Väärä tarkistusnumero veronumerolle (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "National Business Register -numerossa (REGON) on 9 tai 14 numeroa."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Wrong checksum for the National Business Register Number (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Syötä postinumero muodossa XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Syötä postinumero muodossa XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-"Puhelinnumeroissa tulee olla 9 numeroa tai niiden kuuluu alkaa +:lla tai "
-" 00:lla."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Syötä oikea CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Syötä oikea CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Syötä oikea IBAN muodossa ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Puhelinnumeron tulee olla muodossa XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Syötä postinumero muodossa XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Syötä oikea ruotsalainen yritystunnus."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Syötä oikea ruotsalainen henkilötunnus."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Co-ordination numbers are not allowed."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Syötä ruotsalainen postinumero muodossa XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Tukholma"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banská Bystrican alue"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislavan alue"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Košicen alue"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitran alue"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešovin alue"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenčínin alue"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava region"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zilina region"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Syötä oikea postinumero."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Northern Ireland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Scotland"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Phone numbers must be in XXX-XXX-XXXX format."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Enter a U.S. state or territory."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "USA:n osavaltio (suuraakkosin, kaksi kirjainta)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Puhelinnumero"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Enter a valid CI number."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Enter a valid South African ID number"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Enter a valid South African postal code"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "laiska viesti"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "ohjaa osoitteesta"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Tässä on käytettävä absoluuttista polkua ilman verkkotunnusta. Esimerkki: '/"
-"tapahtumat/haku/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "ohjaa osoitteeseen"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Tässä on käytettävä joko absoluuttista polkua (kuten yllä) tai täydellistä "
-"'http://'-alkuista URL-osoitetta."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "edelleenohjaus"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "edelleenohjaukset"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "istunnon avain"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "istunnon tiedot"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "vanhenee"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "istunto"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "istunnot"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "verkkotunnus"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "näyttönimi"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sivustot"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Syötä oikea arvo."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Syötä oikea URL-osoite."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Tämä URL-osoite on rikkinäinen linkki."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Tässä voidaan käyttää vain kirjaimia (a-z), numeroita (0-9) sekä ala- ja "
-"tavuviivoja (_ -)."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Syötä kelvollinen IPv4-osoite."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Vain pilkulla erotetut kokonaisluvut kelpaavat tässä."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Tämän arvon on oltava %(limit_value)s (nyt %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Tämän arvon on oltava enintään %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Tämän luvun on oltava vähintään %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Tähän tarvitaan vähintään %(limit_value)d merkkiä (nyt on vain %(show_value)"
-"d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "Tähän kelpaa enintään %(limit_value)d merkkiä (nyt on %(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"\"%(field_name)s\"-kentän on oltava uniikki suhteessa: %(date_field)s %"
-"(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s jolla on tämä %(field_label)s, on jo olemassa."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Arvo %r ei kelpaa."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Tämän kentän arvo ei voi olla \"null\"."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Tämän kenttä ei voi olla tyhjä."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Kenttä tyyppiä: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Kokonaisluku"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Tarvitaan kokonaisluku."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Tarvitaan tosi (True) tai epätosi (False)."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Totuusarvo: joko tosi (True) tai epätosi (False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Merkkijono (enintään %(max_length)s merkkiä)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Pilkulla erotetut kokonaisluvut"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Päivämäärä (ilman kellonaikaa)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Päivämäärän pitää olla muodossa VVVV-KK-PP."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Päivämäärä %s ei kelpaa"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Ajankohdan pitää olla muodossa VVVV-KK-PP TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Päivämäärä ja kellonaika"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Tähän tarvitaan desimaaliluku."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Desimaaliluku"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Sähköpostiosoite"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Tiedostopolku"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Tämän luvun on oltava liukuluku."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Liukuluku"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Suuri (8-tavuinen) kokonaisluku"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Tähän tarvitaan tyhjä (None), tosi (True) tai epätosi (False)."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Totuusarvo: joko tosi (True), epätosi (False) tai ei mikään (None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Tekstiä"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Kellonaika"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Ajan täytyy olla muodossa TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML-teksti"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Mallia %(model)s pääavaimella %(pk)r ei ole olemassa."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Vierasavain (tyyppi määräytyy liittyvän kentän mukaan)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Yksi-yhteen relaatio"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Moni-moneen relaatio"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Pidä \"Ctrl\"-näppäin (tai Macin \"Command\") pohjassa valitaksesi useita "
-"vaihtoehtoja."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Syöttämäsi %(self)s-tunniste %(value)r ei kelpaa."
-msgstr[1] "Syöttämäsi %(self)s-tunnisteet %(value)r eivät kelpaa."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Tämä kenttä vaaditaan."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Syötä kokonaisluku."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Syötä kokonaisluku."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Tässä luvussa voi olla yhteensä enintään %s numeroa."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Tässä luvussa saa olla enintään %s desimaalia."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Tässä luvussa saa olla enintään %s numeroa ennen desimaalipilkkua."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Syötä oikea päivämäärä."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Syötä oikea kellonaika."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Syötä oikea pvm/kellonaika."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Tiedostoa ei lähetetty. Tarkista lomakkeen koodaus (encoding)."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Yhtään tiedostoa ei ole lähetetty."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Lähetetty tiedosto on tyhjä."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Tähän tiedostonimeen kelpaa enintään %(max)d merkkiä (nyt niitä on %(length)"
-"d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Kuva ei kelpaa. Lähettämäsi tiedosto ei ole kuva, tai tiedosto on vioittunut."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Valitse oikea vaihtoehto. %(value)s ei ole vaihtoehtojen joukossa."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Syötä lista."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Järjestys"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Korjaa kaksoisarvo kentälle %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Ole hyvä ja korjaa uniikin kentän %(field)s kaksoisarvo."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Korjaa allaolevat kaksoisarvot."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Liittyvä perusavain ei vastannut vanhemman perusavainta."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Valitse oikea vaihtoehto. Valintasi ei löydy vaihtoehtojen joukosta."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Valitse oikea vaihtoehto. %s ei löydy vaihtoehtojen joukosta."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" ei kelpaa perusavaimeksi."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "kyllä,ei,ehkä"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d tavu"
-msgstr[1] "%(size)d tavua"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f Kt"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f Mt"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f Gt"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "ip"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "ap"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "IP"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AP"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "keskiyö"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "keskipäivä"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "maanantai"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "tiistai"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "keskiviikko"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "torstai"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "perjantai"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "lauantai"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "sunnuntai"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Ma"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Ti"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Ke"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "To"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Pe"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "La"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Su"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "tammikuu"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "helmikuu"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "maaliskuu"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "huhtikuu"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "toukokuu"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "kesäkuu"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "heinäkuu"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "elokuu"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "syyskuu"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "lokakuu"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "marraskuu"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "joulukuu"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "tam"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "hel"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "maa"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "huh"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "tou"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "kes"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "hei"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "elo"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "syy"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "lok"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "mar"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "jou"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "tammi"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "helmi"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "elo"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "syys"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "loka"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "marras"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "joulu"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "tai"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "vuosi"
-msgstr[1] "vuotta"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "kuukausi"
-msgstr[1] "kuukautta"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "viikko"
-msgstr[1] "viikkoa"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "päivä"
-msgstr[1] "päivää"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "tunti"
-msgstr[1] "tuntia"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuutti"
-msgstr[1] "minuuttia"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuuttia"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j.n.Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j.n.Y H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "N Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "N j, Y"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s luotiin onnistuneesti."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s päivitettiin onnistuneesti."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s on poistettu."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Vanha salasana:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Relaatio emomalliin"
-
-#~ msgid "Add user"
-#~ msgstr "Uusi käyttäjä"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Kommenttien valvontajono"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "Ei valvottavia kommentteja"
-
-#~ msgid "Email"
-#~ msgstr "Sähköposti"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Kirjautunut?"
-
-#~ msgid "IP Address"
-#~ msgstr "IP-osoite"
-
-#~ msgid "Date posted"
-#~ msgstr "Lähettämispvm"
-
-#~ msgid "yes"
-#~ msgstr "kyllä"
-
-#~ msgid "no"
-#~ msgstr "ei"
-
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "N j, Y, P"
-
-#~ msgid "headline"
-#~ msgstr "otsikko"
-
-#~ msgid "rating #1"
-#~ msgstr "1. pisteytys"
-
-#~ msgid "rating #2"
-#~ msgstr "2. pisteytys"
-
-#~ msgid "rating #3"
-#~ msgstr "3. pisteytys"
-
-#~ msgid "rating #4"
-#~ msgstr "4. pisteytys"
-
-#~ msgid "rating #5"
-#~ msgstr "5. pisteytys"
-
-#~ msgid "rating #6"
-#~ msgstr "6. pisteytys"
-
-#~ msgid "rating #7"
-#~ msgstr "7. pisteytys"
-
-#~ msgid "rating #8"
-#~ msgstr "8. pisteytys"
-
-#~ msgid "is valid rating"
-#~ msgstr "on sallittu pisteytys"
-
-#~ msgid "Content object"
-#~ msgstr "Kommentoitu kohde"
-
-#~ msgid "person's name"
-#~ msgstr "henkilön nimi"
-
-#~ msgid "ip address"
-#~ msgstr "IP-osoite"
-
-#~ msgid "approved by staff"
-#~ msgstr "ylläpidon hyväksymä"
-
-#~ msgid "free comments"
-#~ msgstr "vapaat kommentit"
-
-#~ msgid "score"
-#~ msgstr "pisteet"
-
-#~ msgid "score date"
-#~ msgstr "pisteytyspäivä"
-
-#~ msgid "karma score"
-#~ msgstr "karma-pisteytys"
-
-#~ msgid "karma scores"
-#~ msgstr "karma-pisteytykset"
-
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "%(score)d pistettä käyttäjältä %(user)s"
-
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "%(user)s on merkinnyt tämän kommentin:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "flag date"
-#~ msgstr "merkintäpäivä"
-
-#~ msgid "user flag"
-#~ msgstr "käyttäjän merkki"
-
-#~ msgid "user flags"
-#~ msgstr "käyttäjien merkit"
-
-#~ msgid "Flag by %r"
-#~ msgstr "Käyttäjän %r merkki"
-
-#~ msgid "deletion date"
-#~ msgstr "poistamispäivä"
-
-#~ msgid "moderator deletions"
-#~ msgstr "valvojien poistot"
-
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Valvojan %r poisto"
-
-#~ msgid "Forgotten your password?"
-#~ msgstr "Unohditko salasanasi?"
-
-#~ msgid "Ratings"
-#~ msgstr "Pisteytykset"
-
-#~ msgid "Required"
-#~ msgstr "Vaaditaan"
-
-#~ msgid "Optional"
-#~ msgstr "Vapaavalintainen"
-
-#~ msgid "Post a photo"
-#~ msgstr "Lähetä valokuva"
-
-#~ msgid "Your name:"
-#~ msgstr "Nimesi:"
-
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr ""
-#~ "Tämä pisteytys on annettava, koska olet syöttänyt ainakin yhden muunkin "
-#~ "pisteytyksen."
-
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "Kommentin kirjoittanut käyttäjä on kirjoittanut vain yhden kommentin:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[1] ""
-#~ "Kommentin kirjoittanut käyttäjä on kirjoittanut alle %(count)s "
-#~ "kommenttia:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Vain POST-kutsut sallittu"
-
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "Yksi tai useampi vaadittu kenttä on jäänyt täyttämättä"
-
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr "Kommenttilomaketta on käpälöity (turvallisuusrike)"
-
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "Kommenttilomakkeen 'target'-parametri ei kelpaa -- kohteen ID oli "
-#~ "virheellinen"
-
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr "Kommenttilomake ei pyytänyt esikatselua tai lähettämistä"
-
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Anonyymit käyttäjät eivät voi äänestää"
-
-#~ msgid "Invalid comment ID"
-#~ msgstr "Kommentin tunniste on virheellinen"
-
-#~ msgid "No voting for yourself"
-#~ msgstr "Itseään ei voi äänestää"
-
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "Isot kirjaimet (ABC) eivät kelpaa tässä."
-
-#~ msgid "Lowercase letters are not allowed here."
-#~ msgstr "Pienet kirjaimet (abc) eivät kelpaa tässä."
-
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Syötä sähköpostiosoitteita pilkuilla erotettuina."
-
-#~ msgid "Please enter a valid IP address."
-#~ msgstr "IP-osoite ei kelpaa."
-
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "Tätä kohtaa ei voi jättää tyhjäksi."
-
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "Vain numerot (0-9) kelpaavat tässä."
-
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Tarvitaan vähintään yksi merkki, joka ei ole numero (0-9)."
-
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "Vain kirjaimet kelpaavat tässä."
-
-#~ msgid "Enter a valid time in HH:MM format."
-#~ msgstr "Ajan täytyy olla muodossa TT:MM."
-
-#~ msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-#~ msgstr "Ajankohdan pitää olla muodossa VVVV-KK-PP TT:MM."
-
-#~ msgid "The URL %s does not point to a valid image."
-#~ msgstr "Osoittessa %s ei ole kuvaa tai se on vioittunut."
-
-#~ msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-#~ msgstr "Puhelinnumeron tulee olla muodossa XXX-XXX-XXXX. \"%s\" ei kelpaa."
-
-#~ msgid "The URL %s does not point to a valid QuickTime video."
-#~ msgstr "Osoitteessa %s ei ole QuickTime-videota tai se on vioittunut."
-
-#~ msgid "A valid URL is required."
-#~ msgstr "URL-osoite ei kelpaa."
-
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "HTML-koodi ei kelpaa. Virheilmoitus on:\n"
-#~ "%s"
-
-#~ msgid "Badly formed XML: %s"
-#~ msgstr "Vääränmuotoinen XML: %s"
-
-#~ msgid "Invalid URL: %s"
-#~ msgstr "URL-osoite %s ei kelpaa."
-
-#~ msgid "The URL %s is a broken link."
-#~ msgstr "Osoite %s on rikkoutunut tai väärä linkki."
-
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "Arvon täytyy olla sama kuin kentässä '%s'."
-
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "Täytä ainakin yksi kenttä."
-
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr "Täytä tai jätä tyhjäksi kummatkin kentät."
-
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr "Tämä kenttä pitää täyttää, jos %(field)s ei ole %(value)s."
-
-#~ msgid "This value must be between %(lower)s and %(upper)s."
-#~ msgstr "Tämän luvun on oltava välillä %(lower)s–%(upper)s."
-
-#~ msgid "This value must be no more than %s."
-#~ msgstr "Tämän luvun on oltava enintään %s."
-
-#~ msgid "This value must be a power of %s."
-#~ msgstr "Tämän luvun on oltava %s:n potenssi."
-
-#~ msgid "Please enter a valid decimal number."
-#~ msgstr "Desimaaliluku ei kelpaa."
-
-#~ msgid "Please enter a valid decimal number with at most %s total digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s total digits."
-#~ msgstr[0] ""
-#~ "Desimaaliluvussa saa tässä olla yhteensä vain %s merkitsevä numero. "
-#~ "Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä "
-#~ "(.)."
-#~ msgstr[1] ""
-#~ "Desimaaliluvussa saa tässä olla yhteensä vain %s merkitsevää numeroa. "
-#~ "Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä "
-#~ "(.)."
-
-#~ msgid ""
-#~ "Please enter a valid decimal number with a whole part of at most %s digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with a whole part of at most %s "
-#~ "digits."
-#~ msgstr[0] ""
-#~ "Desimaaliluvun kokonaisosassa saa tässä olla vain %s numero. Huomaa, että "
-#~ "desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
-#~ msgstr[1] ""
-#~ "Desimaaliluvun kokonaisosassa saa tässä olla vain %s numeroa. Huomaa, "
-#~ "että desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
-
-#~ msgid "Please enter a valid decimal number with at most %s decimal place."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s decimal places."
-#~ msgstr[0] ""
-#~ "Tässä saa olla vain %s desimaali. Huomaa, että desimaalierottimena "
-#~ "käytetään pilkun (,) sijasta pistettä (.)."
-#~ msgstr[1] ""
-#~ "Tässä saa olla vain %s desimaalia. Huomaa, että desimaalierottimena "
-#~ "käytetään pilkun (,) sijasta pistettä (.)."
-
-#~ msgid "Please enter a valid floating point number."
-#~ msgstr "Syötä liukuluku."
-
-#~ msgid "Make sure your uploaded file is at least %s bytes big."
-#~ msgstr "Lähetä vähintään %s tavun kokoinen tiedosto."
-
-#~ msgid "Make sure your uploaded file is at most %s bytes big."
-#~ msgstr "Lähetä enintään %s tavun kokoinen tiedosto."
-
-#~ msgid "The format for this field is wrong."
-#~ msgstr "Muoto ei kelpaa."
-
-#~ msgid "This field is invalid."
-#~ msgstr "Tämä arvo ei kelpaa."
-
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "Tietoja ei voida noutaa kohteesta: %s."
-
-#~ msgid ""
-#~ "The URL %(url)s returned the invalid Content-Type header '%(contenttype)"
-#~ "s'."
-#~ msgstr ""
-#~ "Osoitteesta %(url)s saatiin virheellinen Content-Type '%(contenttype)s'."
-
-#~ msgid ""
-#~ "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts "
-#~ "with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Rivillä %(line)s oleva tagi %(tag)s pitää sulkea. (Rivi alkaa \"%(start)s"
-#~ "\")"
-
-#~ msgid ""
-#~ "Some text starting on line %(line)s is not allowed in that context. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Rivillä %(line)s on tekstiä, joka ei kelpaa tässä yhteydessä. (Rivi alkaa "
-#~ "\"%(start)s\")"
-
-#~ msgid ""
-#~ "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
-#~ "\"%(start)s\".)"
-#~ msgstr ""
-#~ "Rivillä %(line)s attribuutti %(attr)s ei kelpaa. (Rivi alkaa \"%(start)s"
-#~ "\")"
-
-#~ msgid ""
-#~ "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-#~ "(start)s\".)"
-#~ msgstr ""
-#~ "Rivillä %(line)s tagi \"<%(tag)s>\" ei kelpaa. (Rivi alkaa \"%(start)s\")"
-
-#~ msgid ""
-#~ "A tag on line %(line)s is missing one or more required attributes. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Rivillä %(line)s yhdestä tagista puuttuu yksi tai useampi attribuutti. "
-#~ "(Rivi alkaa \"%(start)s\")"
-
-#~ msgid ""
-#~ "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Rivillä %(line)s attribuutin %(attr)s arvo ei kelpaa. (Rivi alkaa \"%"
-#~ "(start)s\")"
-
-#~ msgid ""
-#~ "%(object)s with this %(type)s already exists for the given %(field)s."
-#~ msgstr "%(field)s omaa jo kohteen %(object)s, joka on tyyppiä %(type)s."
-
-#~ msgid "Enter a valid filename."
-#~ msgstr "Tiedostonimi ei kelpaa."
-
-#~ msgid "Please enter a valid %s."
-#~ msgstr "Syöttämäsi %s ei kelpaa."
-
-#~ msgid "Ensure your text is less than %s character."
-#~ msgid_plural "Ensure your text is less than %s characters."
-#~ msgstr[0] "Varmista, että tekstin pituus on vähemmän kuin %s merkki."
-#~ msgstr[1] "Varmista, että teksti pituus on vähemmän kuin %s merkkiä."
-
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "Rivinvaihtoja ei voi käyttää."
-
-#~ msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-#~ msgstr ""
-#~ "Valinta ei kelpaa; '%(data)s' ei löydy vaihtoehtojen %(choices)s joukosta."
-
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr "Syötä kokonaisluku väliltä -32768 ja 32767."
-
-#~ msgid "Enter a positive number."
-#~ msgstr "Syötä positiivinen kokonaisluku."
-
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "Syötä kokonaisluku väliltä 0 ja 32767."
-
-#~ msgid "Year must be 1900 or later."
-#~ msgstr "Vuosiluvuksi kelpaa vain 1900 tai myöhempi."
-
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "Erottele tunnisteet pilkuilla."
-
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "Uusi salasanasi on: %(new_password)s"
-
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr "Voit vaihtaa salasanan sivulla:"
-
-#~ msgid "Added %s."
-#~ msgstr "Lisätty %s."
-
-#~ msgid "Deleted %s."
-#~ msgstr "Poistettu %s."
-
-#~ msgid "The two 'new password' fields didn't match."
-#~ msgstr "Salasanat eivät täsmää."
-
-#~ msgid "Brazilian"
-#~ msgstr "Brazilian"
diff --git a/parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 35db1a2..0000000
--- a/parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 7a5ca00..0000000
--- a/parts/django/django/conf/locale/fi/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,157 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-11 04:38+0300\n"
-"PO-Revision-Date: 2006-08-05 15:27+0300\n"
-"Last-Translator: Aku Kotkavuo <aku.kotkavuo@norfello.com>\n"
-"Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Mahdolliset %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Valitse kaikki"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Lisää uusi"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Poista"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valitut %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Valitse vasemmalta ja napsauta "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Tyhjennä kaikki"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s valittuna %(cnt)s mahdollisesta"
-msgstr[1] "%(sel)s valittuna %(cnt)s mahdollisesta"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Sinulla on tallentamattomia muutoksia yksittäisissä muokattavissa kentissä. "
-"Jos suoritat toiminnon, tallentamattomat muutoksesi katoavat."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Olet valinnut toiminnon, mutta et ole vielä tallentanut muutoksiasi "
-"yksittäisiin kenttiin. Paina OK tallentaaksesi. Sinun pitää suorittaa "
-"toiminto uudelleen."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Olet valinnut toiminnon etkä ole tehnyt yhtään muutosta yksittäisissä "
-"kentissä. Etsit todennäköisesti Suorita-nappia Tallenna-napin sijaan."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Tammikuu Helmikuu Maaliskuu Huhtikuu Toukokuu Kesäkuu Heinäkuu Elokuu "
-"Syyskuu Lokakuu Marraskuu Joulukuu"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M T K T P L"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Näytä"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Piilota"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Sunnuntai Maanantai Tiistai Keskiviikko Torstai Perjantai Lauantai"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Nyt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Kello"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Valitse kellonaika"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "24"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "06"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "12"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Peruuta"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Tänään"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalenteri"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Eilen"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Huomenna"
diff --git a/parts/django/django/conf/locale/fi/__init__.py b/parts/django/django/conf/locale/fi/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/fi/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/fi/formats.py b/parts/django/django/conf/locale/fi/formats.py
deleted file mode 100644
index d6cc7d7..0000000
--- a/parts/django/django/conf/locale/fi/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'G.i.s'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.n.Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = u' ' # Non-breaking space
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/fr/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/fr/LC_MESSAGES/django.mo
deleted file mode 100644
index e0c7259..0000000
--- a/parts/django/django/conf/locale/fr/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fr/LC_MESSAGES/django.po b/parts/django/django/conf/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index e9ec95e..0000000
--- a/parts/django/django/conf/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5198 +0,0 @@
-# French translation of Django.
-# This file is distributed under the same license as the Django package.
-# Copyright (C) 2008 Django Software Foundation and individual contributors.
-#
-# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2009-2010.
-# Claude Paroz <claude@2xlibre.net>, 2009
-# David Larlet <http://larlet.fr>, 2009-2010
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-09 12:11+0200\n"
-"PO-Revision-Date: 2010-08-09 14:38+0200\n"
-"Last-Translator: Stéphane Raimbault <stephane.raimbault@gmail.com>\n"
-"Language-Team: French <http://django-fr.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n>1;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabe"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgare"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalî"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosniaque"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Catalan"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Tchèque"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Gallois"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dannois"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Allemand"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Grec"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Anglais"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Anglais britannique"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Espagnol"
-
-#: conf/global_settings.py:57
-msgid "Argentinian Spanish"
-msgstr "Espagnol argentin"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estonien"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Basque"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Perse"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Finlandais"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Français"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frise"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irlandais"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galicien"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hébreu"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Croate"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Hongrois"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Indonésien"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Islandais"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Italien"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Japonais"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Géorgien"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Coréen"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Lituanien"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Letton"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Macédonien"
-
-#: conf/global_settings.py:81
-msgid "Malayalam"
-msgstr "Malayâlam"
-
-#: conf/global_settings.py:82
-msgid "Mongolian"
-msgstr "Mongole"
-
-#: conf/global_settings.py:83
-msgid "Dutch"
-msgstr "Hollandais"
-
-#: conf/global_settings.py:84
-msgid "Norwegian"
-msgstr "Norvégien"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Bokmal"
-msgstr "Norvégien Bokmal"
-
-#: conf/global_settings.py:86
-msgid "Norwegian Nynorsk"
-msgstr "Norvégien Nynorsk"
-
-#: conf/global_settings.py:87
-msgid "Polish"
-msgstr "Polonais"
-
-#: conf/global_settings.py:88
-msgid "Portuguese"
-msgstr "Portugais"
-
-#: conf/global_settings.py:89
-msgid "Brazilian Portuguese"
-msgstr "Portugais brésilien"
-
-#: conf/global_settings.py:90
-msgid "Romanian"
-msgstr "Roumain"
-
-#: conf/global_settings.py:91
-msgid "Russian"
-msgstr "Russe"
-
-#: conf/global_settings.py:92
-msgid "Slovak"
-msgstr "Slovaque"
-
-#: conf/global_settings.py:93
-msgid "Slovenian"
-msgstr "Slovène"
-
-#: conf/global_settings.py:94
-msgid "Albanian"
-msgstr "Albanais"
-
-#: conf/global_settings.py:95
-msgid "Serbian"
-msgstr "Serbe"
-
-#: conf/global_settings.py:96
-msgid "Serbian Latin"
-msgstr "Serbe latin"
-
-#: conf/global_settings.py:97
-msgid "Swedish"
-msgstr "Suédois"
-
-#: conf/global_settings.py:98
-msgid "Tamil"
-msgstr "Tamoul"
-
-#: conf/global_settings.py:99
-msgid "Telugu"
-msgstr "Télougou"
-
-#: conf/global_settings.py:100
-msgid "Thai"
-msgstr "Thaï"
-
-#: conf/global_settings.py:101
-msgid "Turkish"
-msgstr "Turc"
-
-#: conf/global_settings.py:102
-msgid "Ukrainian"
-msgstr "Ukrainien"
-
-#: conf/global_settings.py:103
-msgid "Vietnamese"
-msgstr "Vietnamien"
-
-#: conf/global_settings.py:104
-msgid "Simplified Chinese"
-msgstr "Chinois simplifié"
-
-#: conf/global_settings.py:105
-msgid "Traditional Chinese"
-msgstr "Chinois traditionnel"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d %(items)s supprimés avec succès."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Êtes-vous sûr ?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Supprimer les %(verbose_name_plural)s sélectionnés"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Par %s&nbsp;:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Tout"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Toutes les dates"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Aujourd'hui"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Les 7 derniers jours"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Ce mois-ci"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Cette année"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "Yes"
-msgstr "Oui"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "No"
-msgstr "Non"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
-msgid "Unknown"
-msgstr "Inconnu"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Action :"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "heure de l'action"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id de l'objet"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "représentation de l'objet"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "indicateur de l'action"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "message de modification"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "entrée d'historique"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "entrées d'historique"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Aucun(e)"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Modifié %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "et"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s « %(object)s » ajouté."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s modifié pour %(name)s « %(object)s »."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s « %(object)s » supprimé."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Aucun champ modifié."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "L'objet %(name)s « %(obj)s » a été ajouté avec succès."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Vous pouvez continuer l'édition ci-dessous."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Vous pouvez ajouter un autre %s ci-dessous."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "L'objet %(name)s « %(obj)s » a été modifié avec succès."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"L'objet %(name)s « %(obj)s » a été ajouté avec succès. Vous pouvez continuer "
-"l'édition ci-dessous."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Des éléments doivent être sélectionnés afin d'appliquer les actions. Aucun "
-"élément n'a été modifié."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Aucune action sélectionnée."
-
-# Titre
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Ajout %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "L'objet %(name)s avec la clef primaire %(key)r n'existe pas."
-
-# Titre
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Modification de %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Erreur de base de données"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s objet %(name)s a été modifié avec succès."
-msgstr[1] "%(count)s objets %(name)s ont été modifiés avec succès."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s sélectionné"
-msgstr[1] "Tous les %(total_count)s sélectionnés"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 sur %(cnt)s sélectionné"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "L'objet %(name)s « %(obj)s » a été supprimé avec succès."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Historique des changements : %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Saisissez un nom d'utilisateur et un mot de passe valide. Remarquez que "
-"chacun de ces champs est sensible à la casse (différenciation des majuscules/"
-"minuscules)."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Reconnectez-vous car votre session a expiré."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Il semblerait que votre navigateur n'accepte pas les cookies. Activez-les, "
-"rechargez cette page puis essayez à nouveau."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Les noms d'utilisateur ne peuvent contenir le caractère « @ »."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Votre adresse électronique n'est pas votre nom d'utilisateur. Essayez « %s » "
-"à la place."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Administration du site"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Connexion"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "Administration %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Date :"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Heure :"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Actuellement :"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Modification :"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Recherche"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Ajouter un autre"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Cette page n'a pas été trouvée"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Nous sommes désolés, mais la page demandée est introuvable."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Accueil"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Erreur du serveur"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Erreur du serveur (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Erreur du serveur <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Une erreur est survenue. Elle a été transmise par courriel aux "
-"administrateurs du site et sera corrigée dans les meilleurs délais. Merci "
-"pour votre patience."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Exécuter l'action sélectionnée"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Envoyer"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Cliquez ici pour sélectionner tous les objets sur l'ensemble des pages"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Sélectionner tous les %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Effacer la sélection"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Bienvenue,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentation"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Modifier votre mot de passe"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Déconnexion"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Site d'administration de Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administration de Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Ajouter"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historique"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Voir sur le site"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Corrigez l'erreur suivante."
-msgstr[1] "Corrigez les erreurs suivantes."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Ajouter %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtre"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:300
-msgid "Delete"
-msgstr "Supprimer"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Supprimer l'objet %(object_name)s « %(escaped_object)s » provoquerait la "
-"suppression des objets qui lui sont liés, mais votre compte ne possède pas "
-"la permission de supprimer les types d'objets suivants :"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Voulez-vous vraiment supprimer l'objet %(object_name)s « %(escaped_object)"
-"s » ? Les éléments suivants sont liés à celui-ci et seront aussi supprimés :"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Oui, je suis sûr"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Supprimer plusieurs objets"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Supprimer l'objet %(object_name)s provoquerait la suppression des objets qui "
-"lui sont liés, mais votre compte ne possède pas la permission de supprimer "
-"les types d'objets suivants :"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Voulez-vous vraiment supprimer les objets %(object_name)s sélectionnés ? "
-"Tous les objets suivants et leurs éléments liés seront aussi supprimés :"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Par %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modèles disponibles dans l'application %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Modifier"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Vous n'avez pas la permission de modifier quoi que ce soit."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Actions récentes"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mes actions"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Aucun(e) disponible"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Contenu inconnu"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"L'installation de votre base de données est incorrecte. Vérifiez que les "
-"tables utiles ont été créées, et que la base est accessible par "
-"l'utilisateur concerné."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Nom d'utilisateur :"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Mot de passe :"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Date/heure"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Utilisateur"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Action"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Cet objet n'a pas d'historique de modification. Il n'a probablement pas été "
-"ajouté au moyen de ce site d'administration."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Tout afficher"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Enregistrer"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Rechercher"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 résultat"
-msgstr[1] "%(counter)s résultats"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s résultats"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Enregistrer en tant que nouveau"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Enregistrer et ajouter un nouveau"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Enregistrer et continuer les modifications"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Saisissez tout d'abord un nom d'utilisateur et un mot de passe. Vous pourrez "
-"ensuite modifier plus d'options."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:8
-msgid "Enter a username and password."
-msgstr "Saisissez un nom d'utilisateur et un mot de passe."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-"Saisissez un nouveau mot de passe pour l'utilisateur <strong>%(username)s</"
-"strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Mot de passe"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Mot de passe (à nouveau)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Saisissez le même mot de passe que précédemment, pour vérification."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Ajouter un objet %(verbose_name)s supplémentaire"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Supprimer"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Supprimer ?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Merci pour le temps que vous avez accordé à ce site aujourd'hui."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Connectez-vous à nouveau"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Modification de votre mot de passe"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Mot de passe modifié avec succès"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Votre mot de passe a été modifié."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Pour des raisons de sécurité, saisissez votre ancien mot de passe puis votre "
-"nouveau mot de passe à deux reprises afin de vérifier qu'il est correctement "
-"saisi."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Ancien mot de passe"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nouveau mot de passe"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Modifier mon mot de passe"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Réinitialisation du mot de passe"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Mise à jour du mot de passe effectuée avec succès"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-"Votre mot de passe a été défini. Vous pouvez maintenant vous authentifier."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Confirmation de mise à jour du mot de passe"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Saisissez un nouveau mot de passe"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Saisissez deux fois votre nouveau mot de passe afin de vérifier qu'il est "
-"correctement saisi."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nouveau mot de passe :"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirmation du mot de passe :"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Échec lors de la mise à jour du mot de passe"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Le lien de mise à jour du mot de passe n'était pas valide, probablement en "
-"raison de sa précédente utilisation. Veuillez renouveler votre demande de "
-"mise à jour de mot de passe."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Mot de passe mis à jour avec succès"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Nous vous avons envoyé par courriel les instructions pour changer de mot de "
-"passe à l'adresse que vous avez indiquée. Vous devriez le recevoir "
-"rapidement."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Vous recevez ce courriel car vous avez demandé un changement de mot de passe"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "pour votre compte sur le site %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr ""
-"Veuillez vous rendre sur cette page et choisir un nouveau mot de passe :"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Votre nom d'utilisateur, en cas d'oubli :"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Merci d'utiliser notre site !"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "L'équipe %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Mot de passe perdu ? Saisissez votre adresse électronique ci-dessous et nous "
-"vous enverrons les instructions pour en créer un nouveau."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Adresse électronique :"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Réinitialiser mon mot de passe"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Toutes les dates"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Sélectionnez %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Sélectionnez l'objet %s à changer"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "site"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "template"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "mot-clé :"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtre :"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "vue :"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "L'application %r n'a pas été trouvée"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-"Le modèle %(model_name)r n'a pas été trouvé dans l'application %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "l'objet « %(app_label)s.%(data_type)s » en relation"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modèle :"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "les objets « %(app_label)s.%(object_name)s » en relation"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "tous les %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "nombre de %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Champs sur les objets %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ne semble pas être un objet urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Signets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Documentation des signets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Pour installer des signets, faites glisser le lien vers "
-"votre barre \n"
-"de marques-pages, ou effectuez un clic droit dessus et ajoutez-le.\n"
-"Maintenant, vous pouvez le sélectionner depuis n'importe quelle page\n"
-"du site. Notez que certains d'entre eux nécessitent que vous visionniez\n"
-"le site depuis un ordinateur dit « interne » (contactez votre administrateur\n"
-"système si vous n'êtes pas sûr que votre ordinateur le soit).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentation pour cette page"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Vous envoie de n'importe quelle page vers la documentation de la vue qui a "
-"généré cette page."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Afficher l'identifiant de l'objet"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Affiche le content-type et l'identifiant unique pour les pages qui "
-"représentent un objet unique."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Modifier cet objet (fenêtre actuelle)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Renvoie à la page d'administration qui représente un objet seul."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Modifier cet objet (nouvelle fenêtre)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"Comme ci-dessus, mais ouvre la page d'administration dans une nouvelle "
-"fenêtre."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Information personnelle"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Permissions"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Dates importantes"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Groupes"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Mot de passe modifié avec succès"
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Modifier le mot de passe : %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Nom d'utilisateur"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Requis. 30 caractères maximum. Uniquement des lettres, nombres et les "
-"caractères « @ », « . », « + », « - » et « _ »."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-"Cette valeur peut uniquement contenir des lettres, nombres et les caractères "
-"« @ », « . », « + », « - » et « _ »."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Confirmation de votre mot de passe"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Un utilisateur avec ce nom existe déjà."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Les deux mots de passe ne correspondent pas."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Ce compte est inactif."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Votre navigateur ne semble pas avoir activé les cookies. Les cookies sont "
-"nécessaires pour se connecter."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Courriel"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Cette adresse électronique ne correspond à aucun compte utilisateur. Êtes-"
-"vous sûr de vous être enregistré ?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Mise à jour du mot de passe sur %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Confirmation du nouveau mot de passe"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Votre ancien mot de passe est incorrect. Veuillez le rectifier."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nom"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "nom de code"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "permission"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "permissions"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "groupe"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "groupes"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "nom d'utilisateur"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Requis. 30 caractères maximum. Uniquement des lettres, nombres et les "
-"caractères « @ », « . », « + », « - » et « _ »."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "prénom"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "nom"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "adresse électronique"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "mot de passe"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Utilisez « [algo]$[salt]$[hexdigest] » ou le <a href=\"password/\">formulaire "
-"de changement de mot de passe</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "statut équipe"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Précise si l'utilisateur peut se connecter à ce site d'administration."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "actif"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Précise si l'utilisateur doit être considéré comme actif. Décochez ceci "
-"plutôt que de supprimer le compte."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "statut super-utilisateur"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Précise que l'utilisateur possède toutes les permissions sans les assigner "
-"explicitement."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "dernière connexion"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "date d'inscription"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"En plus des permissions qui lui sont manuellement assignées, cet utilisateur "
-"recevra aussi toutes les permissions de tous les groupes auxquels il "
-"appartient. "
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "permissions de l'utilisateur"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "utilisateur"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "utilisateurs"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "message"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Déconnecté"
-
-#: contrib/auth/management/commands/createsuperuser.py:24
-#: core/validators.py:120 forms/fields.py:427
-msgid "Enter a valid e-mail address."
-msgstr "Entrez une adresse de courriel valide."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Contenu"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Métadonnées"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "marqué"
-msgstr[1] "marqués"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Marquer les commentaires sélectionnés"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "approuvé"
-msgstr[1] "approuvés"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Approuver les commentaires sélectionnés"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "supprimé"
-msgstr[1] "supprimés"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Supprimer les commentaires sélectionnés"
-
-# Nous avons artificiellement ajouté un « s » à l'action de la forme plurielle
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 commentaire a été %(action)s avec succès."
-msgstr[1] "%(count)s commentaires ont été %(action)ss avec succès."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Commentaires sur %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Derniers commentaires sur %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nom"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Adresse électronique"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1112
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Commentaire"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Attention à votre langage ! Le terme %s n'est pas autorisé ici."
-msgstr[1] ""
-"Attention à votre langage ! Les termes %s ne sont pas autorisés ici."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Si vous saisissez quelque chose dans ce champ, votre commentaire sera "
-"considéré comme étant indésirable"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "type de contenu"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID de l'objet"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nom de l'utilisateur"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "adresse électronique de l'utilisateur"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL de l'utilisateur"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "commentaire"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "date et heure soumises"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:907
-msgid "IP address"
-msgstr "adresse IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "est public"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Décochez cette case pour faire vraiment disparaître ce commentaire du site."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "est supprimé"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Cochez cette case si le commentaire est inadéquat. Un message type « Ce "
-"commentaire a été supprimé » sera affiché en lieu et place de celui-ci."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "commentaires"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Ce commentaire a été posté par un utilisateur authentifié, le nom est donc "
-"en lecture seule."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Ce commentaire a été posté par un utilisateur authentifié et le courriel est "
-"donc en lecture seule"
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Posté par %(user)s le %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "indicateur"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "date"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "indicateur de commentaire"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "indicateurs de commentaire"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Valider un commentaire"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Voulez-vous rendre ce commentaire public ?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Valider"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Merci pour cette validation"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Merci d'avoir pris le temps d'améliorer la qualité de la discussion sur "
-"notre site"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Supprimer un commentaire"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Voulez-vous supprimer définitivement ce commentaire ?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Merci pour cette suppression"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Signaler ce commentaire"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Voulez-vous vraiment signaler ce commentaire ?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Signaler"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Merci d'avoir signalé ce commentaire"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Envoyer"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Prévisualiser"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Merci pour votre commentaire"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Merci pour votre commentaire"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Prévisualiser votre commentaire"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Veuillez corriger l'erreur suivante."
-msgstr[1] "Veuillez corriger les erreurs suivantes."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Envoyer votre commentaire"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "ou le modifier"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "nom de la classe python du modèle"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "types de contenu"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Par exemple, « /a_propos/contact/ ». Vérifiez la présence du caractère « / » "
-"en début et en fin de chaîne."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas « _ », "
-"des traits d'union et des « / »."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Options avancées"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titre"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "contenu"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "autoriser les commentaires"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nom du template"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Par exemple, « flatpages/contact_page.html ». Sans définition, le système "
-"utilisera « flatpages/default.html »."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "enregistrement requis"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Si coché, seuls les utilisateurs connectés auront la possibilité de voir "
-"cette page."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "page statique"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "pages statiques"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Nous sommes désolés, mais votre formulaire a expiré. Veuillez compléter le "
-"formulaire sur cette page."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Le champ GIS -- convertit dans le type de spécification géométrique "
-"d'OpenGIS."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Point"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Chaîne de segment"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygone"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Multipoint"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Chaîne multisegment"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Multipolygone"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Collection géométrique"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Acune valeur géométrique fournie."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Valeur géométrique non valide."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Type de géométrie non valide."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Une erreur est survenue lors de la transformation de l'objet géométrique "
-"dans le SRID du champ de formulaire géométrique."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "<sup>e</sup>"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "<sup>er</sup>"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "<sup>e</sup>"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "<sup>e</sup>"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f million"
-msgstr[1] "%(value).1f millions"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milliard"
-msgstr[1] "%(value).1f milliards"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billion"
-msgstr[1] "%(value).1f billions"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "un"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "deux"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "trois"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "quatre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cinq"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "six"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sept"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "huit"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "neuf"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "aujourd'hui"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "demain"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "hier"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Saisissez un code postal au format NNNN ou ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Ce champ ne doit contenir que des nombres."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Ce champ requiert 7 ou 8 chiffres."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Saisissez un numéro CUIT au format XX-XXXXXXXX-X ou XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT non valide."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthie"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Basse-Autriche"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Haute-Autriche"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styrie"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vienne"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Saisissez un code postal norvégien au format XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Saisissez un numéro de sécurité sociale autrichien valide au format XXXX "
-"XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Saisissez un code postal australien (4 chiffres)."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Saisissez un code postal brésilien au format XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Les numéros de téléphone doivent être au format XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Sélectionnez un état brésilien valide. Cet état ne fait pas partie de ceux "
-"disponibles."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Numéro CPF non valide."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Ce champ requiert au plus 11 chiffres ou 14 caractères."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Numéro CNPJ non valide."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Ce champ requiert au minimum 14 chiffres"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Saisissez un code postal au format XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Saisissez un numéro de sécurité sociale canadien au format XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Argovie"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Rhodes-Intérieures"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Rhodes-Extérieures"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Bâle-Ville"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Bâle-Campagne"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genève"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glaris"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Grisons"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchâtel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwald"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwald"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhouse"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Soleure"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "Saint Gall"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgovie"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Tessin"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zoug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Saisissez un numéro de passeport ou de carte d'identité suisse valide au "
-"format X1234567<0 ou 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Saisissez un RUT chilien valide."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Saisissez un RUT chilien valide au format XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Ce RUT chilien est non valide."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prague"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Bohême du Centre"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Bohême du Sud"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Carlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Usti"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysocina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Moravie du Sud"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlin"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravie-Silésie"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Saisissez un code postal au format XXXXX ou XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Saisissez une date de naissance au format XXXXXX/XXXX ou XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Le paramètre optionnel du genre est non valide, les valeurs autorisées sont "
-"« f » et « m »"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Saisissez une date de naissance valide."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Saisissez un numéro IC valide."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Bade-Wurtemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavière"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandebourg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Brême"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hambourg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hess"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklembourg-Poméranie occidentale"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Basse Saxe"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Rhénanie-du-Nord-Westphalie"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhénanie-Palatinat"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Sarre"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxe"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxe-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringe"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Saisissez un code postal au format XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Saisissez un numéro de carte d'identité allemande au format XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Îles Baléares"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelone"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadix"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "La Corogne"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Gérone"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Grenade"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúzcoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lérida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcie"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Orense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Ténérife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabrie"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Ségovie"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Séville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragone"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valence"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Biscaye"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Saragosse"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalousie"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principauté des Asturies"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Îles Baléares"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Pays basque"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Îles Canaries"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castille-La Manche"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castille-et-León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalogne"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Estrémadure"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galice"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcie"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Communauté valencienne"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Saisissez un code postal dans l'intervalle et au format 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Saisissez un numéro de téléphone au format 6XXXXXXXX, 8XXXXXXXX ou 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Saisissez une adresse NIF, NIE ou CIF valide."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Saisissez un NIF ou NIE valide."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Mauvais checksum pour NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Mauvais checksum pour NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Mauvais checksum pour CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Saisissez un numéro de compte bancaire valide au format XXXXX-XXXX-XX-"
-"XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Somme de contrôle non valide pour le numéro de compte bancaire."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Saisissez un numéro de sécurité sociale finlandais."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Les numéros de téléphone doivent être au format 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Saisissez un code postal valide"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Saisissez un numéro de téléphone valide"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Saisissez un numéro de plaque d'immatriculation valide"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Saisissez un numéro NIK/KTP valide"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Java occidental"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Java central"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Java oriental"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan occidental"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan du sud"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan central"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan oriental"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Île Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Île Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Moluques"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Moluques du nord"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara occidental"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara oriental"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papouasie"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papouasie occidentale"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi occidental"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi du Sud"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi central"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi du Sud-Est"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi du Nord"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumaratera occidental"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera du Sud"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera du Nord"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Megelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-# http://en.wikipedia.org/wiki/Consular_corps
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps consulaire"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps diplomatique"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi du Nord"
-
-# NTT signifie Nusa Tenggara Timur
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Îles de Sulawesi du Nord"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Florès"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Gouvernement fédéral"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Saisissez un code postal au format XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Saisissez un code postal islandais valide au format XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Le numéro d'identification islandais est non valide."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Saisissez un code postal valide."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Saisissez un numéro valide de Sécurité Sociale."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Saisissez un numéro de TVA valide."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Saisissez un code postal japonais au format XXXXXXX ou XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaidō"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyōto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyōgo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Ōita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Saisissez un numéro d'identification civil koweïtien valide"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "District fédéral"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "État de Mexico"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Saisissez un code postal valide."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Saisissez un numéro SoFi valide."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Frise"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gueldre"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningue"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limbourg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Brabant-du-Nord"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Hollande-du-Nord"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Hollande-Méridionale"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Saisissez un numéro de sécurité sociale norvégien valide."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Ce champ requiert 8 chiffres."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Ce champ requiert 11 chiffres."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Le numéro national d'identification (NIN) comporte 11 chiffres."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Somme de contrôle non valide pour le numéro d'identification national."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Saisissez un code NIP (impôts) au format XXX-XXX-XX-XX ou XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Somme de contrôle non valide du numéro de taxe (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Le numéro de registre du commerce national (REGON) comporte 9 ou 14 chiffres."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Somme de contrôle non valide pour le numéro de registre du commerce national "
-"(REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Saisissez un code postal au format XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Basse-Silésie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Cujavie-Poméranie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Łódź"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Petite-Pologne"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Mazovie "
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Basses-Carpates"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlachie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Poméranie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silésie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Varmie-Mazurie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Grande-Pologne"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Poméranie Occidentale"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Saisissez un code postal au format XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-"Les numéros de téléphone doivent comporter 9 chiffres, ou débuter par un + "
-"ou 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Saisissez une CIF valide."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Saisissez une CNP valide."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Saisissez un IBAN valide au format ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Les numéros de téléphone doivent être au format XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Saisissez un code postal valide au format XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Saisissez un numéro d'organisation suédois valide."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Saisissez un numéro d'identité personnelle suédois valide."
-
-# The source code doesn't offer any help to explain the term
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Le nombres de co-ordination ne sont pas autorisés."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Saisissez un code postal suédois au format XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banská Štiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Bánovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytča"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Čadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolný Kubín"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajská Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenné"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kežmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komárno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Košice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Košice·II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Košice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Košice·IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Košice–okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucké Nové Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoča"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovský Mikuláš"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lučenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Námestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nové Mesto nad Váhom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nové Zámky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizánske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piešťany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltár"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Považská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Prešov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Púchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revúca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavská Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Rožňava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ružomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spišská Nová Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stará Ľubovňa"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidník"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Šaľa"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topoľčany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebišov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trenčín"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turčianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdošín"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Veľký Krtíš"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Topľou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlaté Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Žarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Žiar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Žilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Région de Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Région de Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Région de Košice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenčín"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Saisissez un code postal valide."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornouailles et les îles Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbrie"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Sussex de l'Est"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Grand Londres"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Grand Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancastre"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "Yorkshire du Nord"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Yorkshire du Su"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne et Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "Midlands de l'Ouest"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "Sussex de l'Ouest"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "Yorkshire de l'Ouest"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Comté d'Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Comté d'Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Comté de Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Comté de Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Comté de Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Comté de Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid·Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Écosse centrale"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orcades"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Îles Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Hébrides extérieures"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Angleterre"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlande du Nord"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Écosse"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Pays de Galles"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Saisissez un code postal américain au format XXXXX ou XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Les numéros de téléphone doivent être au format XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Saisissez un numéro de sécurité sociale américain au format XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Saisissez un état ou un territoire américain."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "État Américain (deux lettres majuscules)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Numéro de téléphone"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Saisissez un numéro de CI valide au format X.XXX.XXX-X,XXXXXXX-X ou XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Saisissez un numéro CI valide."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Saisissez un numéro d'identification sud-africain valide."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Saisissez un code postal sud-africain valide."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Cap-Oriental"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "État-Libre"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Cap-du-Nord"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Nord-Ouest"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Cap-Occidental"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "message « lazy »"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirigé depuis"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ceci doit être un chemin absolu, sans nom de domaine. Par exemple, « /"
-"evenements/rechercher/ »."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirigé vers"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ceci peut être soit un chemin absolu (voir ci-dessus) soit une URL complète "
-"débutant par « http:// »."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redirige"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redirige"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "clé de session"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "données de session"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "date d'expiration"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "session"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessions"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nom de domaine"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "nom à afficher"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sites"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Saisissez une valeur valide."
-
-#: core/validators.py:87 forms/fields.py:528
-msgid "Enter a valid URL."
-msgstr "Saisissez une URL valide."
-
-#: core/validators.py:89 forms/fields.py:529
-msgid "This URL appears to be a broken link."
-msgstr "Cette URL semble être cassée."
-
-#: core/validators.py:123 forms/fields.py:877
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et "
-"des traits d'union."
-
-#: core/validators.py:126 forms/fields.py:870
-msgid "Enter a valid IPv4 address."
-msgstr "Saisissez une adresse IPv4 valide."
-
-#: core/validators.py:129 db/models/fields/__init__.py:575
-msgid "Enter only digits separated by commas."
-msgstr "Saisissez uniquement des chiffres séparés par des virgules."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Assurez-vous que cette valeur est %(limit_value)s (actuellement %(show_value)"
-"s)."
-
-#: core/validators.py:153 forms/fields.py:204 forms/fields.py:256
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-"Assurez-vous que cette valeur est inférieure ou égale à %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-"Assurez-vous que cette valeur est supérieure ou égale à %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Assurez-vous que cette valeur comporte au moins %(limit_value)d caractères "
-"(actuellement %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Assurez-vous que cette valeur comporte au maximum %(limit_value)d caractères "
-"(actuellement %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"%(field_name)s doit être unique pour la partie %(lookup)s de %(date_field)s."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Un(e) %(model_name)s avec ce %(field_label)s existe déjà."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "La valeur « %r » n'est pas un choix valide."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Ce champ ne peut pas être vide."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Ce champ ne peut pas être vide."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Champ de type : %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:863
-#: db/models/fields/__init__.py:972 db/models/fields/__init__.py:983
-#: db/models/fields/__init__.py:1010
-msgid "Integer"
-msgstr "Entier"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:861
-msgid "This value must be an integer."
-msgstr "Cette valeur doit être un entier."
-
-#: db/models/fields/__init__.py:493
-msgid "This value must be either True or False."
-msgstr "Cette valeur doit être soit vraie (True) soit fausse (False)."
-
-#: db/models/fields/__init__.py:495
-msgid "Boolean (Either True or False)"
-msgstr "Booléen (soit vrai ou faux)"
-
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:993
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Chaîne de caractère (jusqu'à %(max_length)s)"
-
-#: db/models/fields/__init__.py:570
-msgid "Comma-separated integers"
-msgstr "Des entiers séparés par une virgule"
-
-#: db/models/fields/__init__.py:584
-msgid "Date (without time)"
-msgstr "Date (sans l'heure)"
-
-#: db/models/fields/__init__.py:588
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Saisissez une date valide au format AAAA-MM-JJ."
-
-#: db/models/fields/__init__.py:589
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Date non valide : %s"
-
-#: db/models/fields/__init__.py:670
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Saisissez une date et une heure valides au format AAAA-MM-JJ HH:MM[:ss[."
-"uuuuuu]]."
-
-#: db/models/fields/__init__.py:672
-msgid "Date (with time)"
-msgstr "Date (avec l'heure)"
-
-#: db/models/fields/__init__.py:738
-msgid "This value must be a decimal number."
-msgstr "Cette valeur doit être un nombre décimal."
-
-#: db/models/fields/__init__.py:740
-msgid "Decimal number"
-msgstr "Nombre décimal"
-
-#: db/models/fields/__init__.py:795
-msgid "E-mail address"
-msgstr "Adresse électronique"
-
-#: db/models/fields/__init__.py:810 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Chemin vers le fichier"
-
-#: db/models/fields/__init__.py:833
-msgid "This value must be a float."
-msgstr "Cette valeur doit être un nombre réel."
-
-#: db/models/fields/__init__.py:835
-msgid "Floating point number"
-msgstr "Nombre à virgule flottante"
-
-#: db/models/fields/__init__.py:894
-msgid "Big (8 byte) integer"
-msgstr "Grand entier (8 octets)"
-
-#: db/models/fields/__init__.py:923
-msgid "This value must be either None, True or False."
-msgstr "Cette valeur doit être nulle (None), vraie (True) ou fausse (False)."
-
-#: db/models/fields/__init__.py:925
-msgid "Boolean (Either True, False or None)"
-msgstr "Booléen (soit vrai, faux ou nul)"
-
-#: db/models/fields/__init__.py:1016
-msgid "Text"
-msgstr "Texte"
-
-#: db/models/fields/__init__.py:1032
-msgid "Time"
-msgstr "Heure"
-
-#: db/models/fields/__init__.py:1036
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Saisissez une heure valide au format HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1128
-msgid "XML text"
-msgstr "Texte XML"
-
-#: db/models/fields/related.py:801
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Le modèle %(model)s avec la clef primaire %(pk)r n'existe pas."
-
-#: db/models/fields/related.py:803
-msgid "Foreign Key (type determined by related field)"
-msgstr "Clé étrangère (type défini par le champ lié)"
-
-#: db/models/fields/related.py:921
-msgid "One-to-one relationship"
-msgstr "Relation un à un"
-
-#: db/models/fields/related.py:983
-msgid "Many-to-many relationship"
-msgstr "Relation plusieurs à plusieurs"
-
-#: db/models/fields/related.py:1003
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Maintenez appuyé « Ctrl », ou « Commande (touche pomme) » sur un Mac, pour en "
-"sélectionner plusieurs."
-
-#: db/models/fields/related.py:1064
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Saisissez un ID %(self)s valide. La valeur %(value)r est non valide."
-msgstr[1] ""
-"Saisissez des ID %(self)s valides. Les valeurs %(value)r sont non valides."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Ce champ est obligatoire."
-
-#: forms/fields.py:203
-msgid "Enter a whole number."
-msgstr "Saisissez un nombre entier."
-
-#: forms/fields.py:234 forms/fields.py:255
-msgid "Enter a number."
-msgstr "Saisissez un nombre."
-
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres au total."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres après la virgule."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres avant la virgule."
-
-#: forms/fields.py:322 forms/fields.py:837
-msgid "Enter a valid date."
-msgstr "Saisissez une date valide."
-
-#: forms/fields.py:350 forms/fields.py:838
-msgid "Enter a valid time."
-msgstr "Saisissez une heure valide."
-
-#: forms/fields.py:376
-msgid "Enter a valid date/time."
-msgstr "Saisissez une date et une heure valides."
-
-#: forms/fields.py:434
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Aucun fichier n'a été soumis. Vérifiez le type d'encodage du formulaire."
-
-#: forms/fields.py:435
-msgid "No file was submitted."
-msgstr "Aucun fichier n'a été soumis."
-
-#: forms/fields.py:436
-msgid "The submitted file is empty."
-msgstr "Le fichier soumis est vide."
-
-#: forms/fields.py:437
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Assurez-vous que ce nom de fichier ne contient pas plus de %(max)d "
-"caractères (actuellement %(length)d caractères)."
-
-#: forms/fields.py:472
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Téléversez une image valide. Le fichier que vous avez transféré n'est pas "
-"une image ou bien est corrompu."
-
-#: forms/fields.py:595 forms/fields.py:670
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Sélectionnez un choix valide. %(value)s n'en fait pas partie."
-
-#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Saisissez une liste de valeurs."
-
-# Si « : » est requis, créer un ticket
-#: forms/formsets.py:296 forms/formsets.py:298
-msgid "Order"
-msgstr "Ordre"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Corrigez les données à double dans %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Corrigez les données à double dans %(field)s qui doit contenir des valeurs "
-"uniques."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Corrigez les données à double dans %(field_name)s qui doit contenir des "
-"valeurs uniques pour la partie %(lookup)s de %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Corrigez les valeurs à double ci-dessous."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"La clé étrangère en ligne ne correspond pas à la clé primaire de l'instance "
-"parente."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Sélectionnez un choix valide. Ce choix ne fait pas partie de ceux "
-"disponibles."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Sélectionnez un choix valide ; %s n'en fait pas partie."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "« %s » n'est pas une valeur correcte pour une clé primaire."
-
-#: template/defaultfilters.py:780
-msgid "yes,no,maybe"
-msgstr "oui, non, peut-être"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d octet"
-msgstr[1] "%(size)d octets"
-
-#: template/defaultfilters.py:813
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f Ko"
-
-#: template/defaultfilters.py:815
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f Mo"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f Go"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "après-midi"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "matin"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "Après-midi"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "Matin"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "minuit"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "midi"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "lundi"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "mardi"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "mercredi"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "jeudi"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "vendredi"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "samedi"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "dimanche"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "lun"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "mar"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "mer"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "jeu"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "ven"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "sam"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "dim"
-
-# Les mois ne sont pas correctement traduisibles
-# http://code.djangoproject.com/ticket/9988
-#: utils/dates.py:18
-msgid "January"
-msgstr "janvier"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "février"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "mars"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "avril"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "mai"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juin"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juillet"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "août"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "septembre"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "octobre"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "novembre"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "décembre"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "fév"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "avr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jui"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aoû"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "oct"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "déc"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "fév."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "août"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "oct."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "déc."
-
-#: utils/text.py:136
-msgid "or"
-msgstr "ou"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "an"
-msgstr[1] "ans"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mois"
-msgstr[1] "mois"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "semaine"
-msgstr[1] "semaines"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "jour"
-msgstr[1] "jours"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "heure"
-msgstr[1] "heures"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minute"
-msgstr[1] "minutes"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutes"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j F Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, G:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "G:i:s"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "L'objet %(verbose_name)s a été créé avec succès."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "L'objet %(verbose_name)s a été mis à jour avec succès."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "L'objet %(verbose_name)s a été supprimé."
diff --git a/parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index c30a709..0000000
--- a/parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 3a8b0bc..0000000
--- a/parts/django/django/conf/locale/fr/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,162 +0,0 @@
-# French translation for Django Javascript.
-# Copyright (C) 2005-2010 Django Software Foundation and individual contributors.
-# This file is distributed under the same license as the Django package.
-#
-# Mikaël Barbero, 2005.
-# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2010.
-# David Larlet <http://larlet.fr>, 2009-2010
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-14 11:02+0200\n"
-"PO-Revision-Date: 2010-04-16 23:56+0200\n"
-"Last-Translator: David Larlet <http://larlet.fr>\n"
-"Language-Team: French <http://django-fr.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n>1\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "%s disponible(s)"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Tout choisir"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Ajouter"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Enlever"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s choisi(es)"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Sélectionnez un ou plusieurs choix et cliquez "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Tout enlever"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s sur %(cnt)s sélectionné"
-msgstr[1] "%(sel)s sur %(cnt)s sélectionnés"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Vous avez des modifications non sauvegardées sur certains champs éditables. "
-"Si vous lancez une action, ces modifications vont être perdues."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Vous avez sélectionné une action, mais vous n'avez pas encore sauvegardé "
-"certains champs modifiés. Cliquez sur OK pour sauver. Vous devrez "
-"réappliquer l'action."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Vous avez sélectionné une action, et vous n'avez fait aucune modification "
-"sur des champs. Vous cherchez probablement le bouton Envoyer et non le "
-"bouton Sauvegarder."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre "
-"Décembre"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M M J V S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Afficher"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Masquer"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Maintenant"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Horloge"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Choisir une heure"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Minuit"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Midi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Annuler"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Aujourd'hui"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Calendrier"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Hier"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Demain"
diff --git a/parts/django/django/conf/locale/fr/__init__.py b/parts/django/django/conf/locale/fr/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/fr/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/fr/formats.py b/parts/django/django/conf/locale/fr/formats.py
deleted file mode 100644
index 121bb9b..0000000
--- a/parts/django/django/conf/locale/fr/formats.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = 'j F Y H:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j N Y'
-SHORT_DATETIME_FORMAT = 'j N Y H:i:s'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
- '%d.%m.%Y', '%d.%m.%y', # Swiss (fr_CH), '25.10.2006', '25.10.06'
- '%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
- # '%d %B %Y', '%d %b %Y', # '25 octobre 2006', '25 oct. 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
- '%d/%m/%Y %H:%M', # '25/10/2006 14:30'
- '%d/%m/%Y', # '25/10/2006'
- '%d.%m.%Y %H:%M:%S', # Swiss (fr_CH), '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # Swiss (fr_CH), '25.10.2006 14:30'
- '%d.%m.%Y', # Swiss (fr_CH), '25.10.2006'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.mo
deleted file mode 100644
index 7b518a8..0000000
--- a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.po b/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.po
deleted file mode 100644
index a975658..0000000
--- a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4997 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-27 09:58-0800\n"
-"PO-Revision-Date: 2010-01-27 22:36-0700\n"
-"Last-Translator: Wim Benes <fryskefirefox@gmail.com>\n"
-"Language-Team: FRISIAN <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr ""
-
-#: forms/models.py:964
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr ""
-
-#: contrib/admin/options.py:1006
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] ""
-msgstr[1] ""
-
-#: db/models/base.py:775
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr ""
-
-#: db/models/base.py:790 db/models/base.py:798
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s mei dit %(field_label)s bestiet al."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr ""
-
-#: contrib/admin/options.py:860 contrib/admin/options.py:1072
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr ""
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr ""
-
-#: template/defaultfilters.py:806
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: template/defaultfilters.py:808
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:810
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: contrib/admin/sites.py:447
-#, python-format
-msgid "%s administration"
-msgstr ""
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr ""
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: contrib/comments/admin.py:60
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:7
-#, python-format
-msgid ""
-"<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr ""
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr ""
-
-#: contrib/admin/helpers.py:19
-msgid "Action:"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_list.html:57
-#, python-format
-msgid "Add %(name)s"
-msgstr ""
-
-#: contrib/admin/options.py:834
-#, python-format
-msgid "Add %s"
-msgstr ""
-
-#: contrib/admin/widgets.py:238
-msgid "Add Another"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:33
-#: contrib/admin/templates/admin/edit_inline/tabular.html:78
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr ""
-
-#: contrib/admin/options.py:561
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "All %(total_count)s %(module_name)s selected"
-msgstr ""
-
-#: contrib/admin/templatetags/admin_list.py:240
-msgid "All dates"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr ""
-
-#: contrib/comments/admin.py:44
-msgid "Approve selected comments"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr ""
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1094
-msgid "Are you sure?"
-msgstr ""
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr ""
-
-#: utils/dates.py:19
-msgid "August"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: db/models/fields/__init__.py:892
-msgid "Big (8 byte) integer"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: db/models/fields/__init__.py:512
-msgid "Boolean (Either True or False)"
-msgstr ""
-
-#: db/models/fields/__init__.py:923
-msgid "Boolean (Either True, False or None)"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr ""
-
-#: contrib/admin/options.py:925
-#, python-format
-msgid "Change %s"
-msgstr ""
-
-#: contrib/admin/options.py:1124
-#, python-format
-msgid "Change history: %s"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr ""
-
-#: contrib/auth/admin.py:121
-#, python-format
-msgid "Change password: %s"
-msgstr ""
-
-#: contrib/admin/widgets.py:96
-msgid "Change:"
-msgstr ""
-
-#: contrib/admin/options.py:565
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:556
-#, python-format
-msgid "Changed %s."
-msgstr ""
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:16
-msgid "Clear selection"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:14
-msgid "Click here to select all objects across all pages"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: db/models/fields/__init__.py:582
-msgid "Comma-separated integers"
-msgstr ""
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr ""
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/admin/widgets.py:96
-msgid "Currently:"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr ""
-
-#: utils/translation/trans_real.py:531
-msgid "DATETIME_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:530
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr ""
-
-#: contrib/admin/options.py:970
-msgid "Database error"
-msgstr ""
-
-#: db/models/fields/__init__.py:684
-msgid "Date (with time)"
-msgstr ""
-
-#: db/models/fields/__init__.py:596
-msgid "Date (without time)"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr ""
-
-#: contrib/admin/widgets.py:72
-msgid "Date:"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr ""
-
-#: utils/dates.py:20
-msgid "December"
-msgstr ""
-
-#: db/models/fields/__init__.py:752
-msgid "Decimal number"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:291
-msgid "Delete"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr ""
-
-#: contrib/admin/actions.py:85
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr ""
-
-#: contrib/admin/options.py:570
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/auth/models.py:144
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-
-#: contrib/auth/models.py:142
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-
-#: contrib/auth/models.py:143
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: conf/global_settings.py:77
-msgid "Dutch"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr ""
-
-#: db/models/fields/__init__.py:807
-msgid "E-mail address"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr ""
-
-#: forms/fields.py:251
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Wês wis dat der net mear as %s desimale plakken binne."
-
-#: forms/fields.py:252
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Wês wis dat der net mear as %s sifers foar it desimale punt."
-
-#: forms/fields.py:250
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Wês wis dat der yn totaal net mear as %s sifers binne."
-
-#: forms/fields.py:424
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: core/validators.py:129
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: core/validators.py:135
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: core/validators.py:100
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-
-#: core/validators.py:123 forms/fields.py:197 forms/fields.py:249
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:118 forms/fields.py:196 forms/fields.py:248
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: forms/fields.py:653 forms/fields.py:715 forms/models.py:961
-msgid "Enter a list of values."
-msgstr "Jou in list mei weardes."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-
-#: forms/fields.py:225 forms/fields.py:247
-msgid "Enter a number."
-msgstr "Jou in nûmer."
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: core/validators.py:88 forms/fields.py:854
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Jou in falida 'slug' gearsteld mei letters, nûmers, ûnderstreekjes of "
-"koppelteken."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: core/validators.py:91 forms/fields.py:847
-msgid "Enter a valid IPv4 address."
-msgstr "Jou in falide IPv4-adres."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: core/validators.py:69 forms/fields.py:510
-msgid "Enter a valid URL."
-msgstr "Jou in falide URL."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: db/models/fields/__init__.py:600
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Jou in falide daum yn JJJJ-MM-DD-formaat."
-
-#: forms/fields.py:309 forms/fields.py:819
-msgid "Enter a valid date."
-msgstr "Jou in falide datum."
-
-#: db/models/fields/__init__.py:682
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Jou in falide datum/tiid yn JJJ-MM-DD OO:MM[:ss[.uuuuuu]]-formaat."
-
-#: forms/fields.py:363
-msgid "Enter a valid date/time."
-msgstr "Jou in falide datum.tiid."
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:85 forms/fields.py:414
-msgid "Enter a valid e-mail address."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: db/models/fields/__init__.py:1027
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Jou in falide tiid yn OO:MM[:ss[.uuuuuu]]-formaat."
-
-#: forms/fields.py:337 forms/fields.py:820
-msgid "Enter a valid time."
-msgstr "Jou in falide tiid."
-
-#: core/validators.py:19 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Jou in falide wearde."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: forms/fields.py:195
-msgid "Enter a whole number."
-msgstr "Jou in folslein nûmer."
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr ""
-
-#: core/validators.py:94 db/models/fields/__init__.py:587
-msgid "Enter only digits separated by commas."
-msgstr "Jou allinnich sifers, skieden troch komma's."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr ""
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr ""
-
-#: utils/dates.py:18
-msgid "February"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: db/models/fields/__init__.py:72
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr ""
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: db/models/fields/__init__.py:814 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_list.html:76
-msgid "Filter"
-msgstr ""
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr ""
-
-#: contrib/comments/admin.py:40
-msgid "Flag selected comments"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: db/models/fields/__init__.py:839
-msgid "Floating point number"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: db/models/fields/related.py:757
-msgid "Foreign Key (type determined by related field)"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:293
-msgid "Geometry collection"
-msgstr ""
-
-#: conf/global_settings.py:70
-msgid "Georgian"
-msgstr ""
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/auth/admin.py:29
-msgid "Groups"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: db/models/fields/related.py:959
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Hâld \"Control\", of \"Command\" op in Mac del, om mear as ien te "
-"selektearjen."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:36
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:905
-msgid "IP address"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/auth/admin.py:28
-msgid "Important dates"
-msgstr ""
-
-#: contrib/auth/models.py:148
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-
-#: db/models/fields/__init__.py:471 db/models/fields/__init__.py:867
-#: db/models/fields/__init__.py:963 db/models/fields/__init__.py:974
-#: db/models/fields/__init__.py:1001
-msgid "Integer"
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: db/models/fields/__init__.py:601
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Foute datum: %s"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: conf/global_settings.py:68
-msgid "Italian"
-msgstr ""
-
-#: contrib/admin/options.py:736
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr ""
-
-#: utils/dates.py:18
-msgid "January"
-msgstr ""
-
-#: conf/global_settings.py:69
-msgid "Japanese"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: conf/global_settings.py:73
-msgid "Kannada"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: conf/global_settings.py:72
-msgid "Khmer"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr ""
-
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:273
-msgid "Line string"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/admin/sites.py:402 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr ""
-
-#: contrib/auth/views.py:60
-msgid "Logged out"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/admin/sites.py:313 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-
-#: contrib/admin/widgets.py:126
-msgid "Lookup"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: utils/translation/trans_real.py:554
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: db/models/fields/related.py:939
-msgid "Many-to-many relationship"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: db/models/fields/related.py:755
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr ""
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:289
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:285
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:281
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr ""
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "No"
-msgstr ""
-
-#: contrib/admin/options.py:754
-msgid "No action selected."
-msgstr ""
-
-#: contrib/admin/options.py:574
-msgid "No fields changed."
-msgstr ""
-
-#: forms/fields.py:422
-msgid "No file was submitted."
-msgstr "Der is gjin bestân yntsjinne."
-
-#: forms/fields.py:421
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Der is gjin bestân yntsjinne. Kontrolearje it kodearringstype op it "
-"formulier."
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr ""
-
-#: contrib/admin/options.py:137 contrib/admin/options.py:152
-msgid "None"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "November"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr ""
-
-#: utils/dates.py:19
-msgid "October"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/admin/util.py:175
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr ""
-
-#: contrib/admin/util.py:170
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr ""
-
-#: db/models/fields/related.py:879
-msgid "One-to-one relationship"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: forms/formsets.py:287 forms/formsets.py:289
-msgid "Order"
-msgstr "Oarder"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr ""
-
-#: contrib/auth/admin.py:111
-msgid "Password changed successfully."
-msgstr ""
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr ""
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/auth/admin.py:27
-msgid "Permissions"
-msgstr ""
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr ""
-
-#: contrib/auth/admin.py:26
-msgid "Personal info"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: forms/models.py:542
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-
-#: forms/models.py:538
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr ""
-
-#: forms/models.py:548
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-
-#: forms/models.py:556
-msgid "Please correct the duplicate values below."
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:65
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: db/models/fields/related.py:1020
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Jou asjobleaft falide %(self)s IDs. De wearde %(value)r is net goed."
-msgstr[1] ""
-"Jou asjobleaft falide %(self)s IDs. De wearden %(value)r binne net goed."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr ""
-
-#: contrib/admin/sites.py:306 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:269
-msgid "Point"
-msgstr ""
-
-#: conf/global_settings.py:79
-msgid "Polish"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:277
-msgid "Polygon"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr ""
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:36
-#: contrib/admin/templates/admin/edit_inline/tabular.html:81
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr ""
-
-#: contrib/comments/admin.py:48
-msgid "Remove selected comments"
-msgstr ""
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-#: contrib/auth/models.py:137
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: conf/global_settings.py:82
-msgid "Romanian"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr ""
-
-#: conf/global_settings.py:83
-msgid "Russian"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr ""
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: forms/fields.py:577 forms/fields.py:652
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Selektearje in falide kar. %(value)s is net ien fan de beskikbere karren."
-
-#: forms/models.py:962
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Selektearje in falide kar. %s is net ien fan de beskikbere karren."
-
-#: forms/models.py:886
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Selektearje in falide kar. Dizze kar is net ien fan de beskikbere karren."
-
-#: contrib/admin/templates/admin/actions.html:14
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr ""
-
-#: utils/dates.py:19
-msgid "September"
-msgstr ""
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr ""
-
-#: conf/global_settings.py:87
-msgid "Serbian Latin"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: conf/global_settings.py:94
-msgid "Simplified Chinese"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/admin/sites.py:388
-msgid "Site administration"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr ""
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: db/models/fields/__init__.py:554 db/models/fields/__init__.py:984
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/admin/actions.py:60
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: conf/global_settings.py:88
-msgid "Swedish"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: utils/translation/trans_real.py:532
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: conf/global_settings.py:89
-msgid "Tamil"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: conf/global_settings.py:90
-msgid "Telugu"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: db/models/fields/__init__.py:1007
-msgid "Text"
-msgstr ""
-
-#: conf/global_settings.py:91
-msgid "Thai"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr ""
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr ""
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr ""
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-
-#: contrib/admin/options.py:640
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
-
-#: contrib/admin/options.py:683
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-
-#: contrib/admin/options.py:675
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
-
-#: contrib/admin/options.py:1087
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr ""
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "De %(verbose_name)s is súksesfol oanmakke."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "De %(verbose_name)s is fuortsmiten."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "De %(verbose_name)s is súksesfol fernijd."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: forms/models.py:820
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-
-#: forms/fields.py:423
-msgid "The submitted file is empty."
-msgstr "It yntsjinne bestân is leech."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-
-#: core/validators.py:71 forms/fields.py:511
-msgid "This URL appears to be a broken link."
-msgstr "Dit URL liket in ferbrutsen keppeling."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr ""
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-
-#: db/models/fields/__init__.py:67
-msgid "This field cannot be blank."
-msgstr ""
-
-#: db/models/fields/__init__.py:66
-msgid "This field cannot be null."
-msgstr "Dit fjild kin net leech wêze."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Dit fjild is fereaske."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr ""
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-
-#: db/models/fields/__init__.py:750
-msgid "This value must be a decimal number."
-msgstr "Dizze wearde moat in desimaal nûmer wêze."
-
-#: db/models/fields/__init__.py:837 db/models/fields/__init__.py:865
-msgid "This value must be a float."
-msgstr ""
-
-#: db/models/fields/__init__.py:475
-msgid "This value must be an integer."
-msgstr "Dizze wearde moat in integer wêze."
-
-#: db/models/fields/__init__.py:921
-msgid "This value must be either None, True or False."
-msgstr "Dizze wearde moat of Gjin, of Wier of Net wier wêze."
-
-#: db/models/fields/__init__.py:510
-msgid "This value must be either True or False."
-msgstr "Dizze wearde moat of Wier of Net wier wêze."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value must contain only letters, numbers and underscores."
-msgstr ""
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: db/models/fields/__init__.py:1023
-msgid "Time"
-msgstr ""
-
-#: contrib/admin/widgets.py:72
-msgid "Time:"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: conf/global_settings.py:95
-msgid "Traditional Chinese"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: conf/global_settings.py:92
-msgid "Turkish"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr ""
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1103
-msgid "URL"
-msgstr ""
-
-#: conf/global_settings.py:93
-msgid "Ukrainian"
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
-msgid "Unknown"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr ""
-
-#: forms/fields.py:459
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Laad in falide ôfbylding op. It bestân dy't jo opladen hawwe wie net in "
-"ôfbylding of in skansearre ôfbylding."
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/auth/models.py:141
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr ""
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr ""
-
-#: contrib/admin/sites.py:329 contrib/admin/sites.py:335
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: db/models/fields/__init__.py:65
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/formtools/wizard.py:132
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr ""
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: db/models/fields/__init__.py:1111
-msgid "XML text"
-msgstr ""
-
-#: utils/translation/trans_real.py:553
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "Yes"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr ""
-
-#: contrib/admin/options.py:654 contrib/admin/options.py:687
-#, python-format
-msgid "You may add another %s below."
-msgstr ""
-
-#: contrib/admin/options.py:644 contrib/admin/options.py:677
-msgid "You may edit it again below."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/admin/sites.py:332 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr ""
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr ""
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr ""
-
-#: contrib/auth/models.py:143
-msgid "active"
-msgstr ""
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr ""
-
-#: contrib/admin/options.py:556 contrib/admin/options.py:566
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:797
-#: forms/models.py:544
-msgid "and"
-msgstr ""
-
-#: contrib/comments/admin.py:43
-msgid "approved"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr ""
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr ""
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr ""
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr ""
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr ""
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr ""
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr ""
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr ""
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr ""
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr ""
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr ""
-
-#: contrib/auth/models.py:146
-msgid "date joined"
-msgstr ""
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr ""
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr ""
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr ""
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr ""
-
-#: contrib/auth/models.py:140
-msgid "e-mail address"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr ""
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr ""
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr ""
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr ""
-
-#: contrib/auth/models.py:138
-msgid "first name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr ""
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr ""
-
-#: contrib/comments/admin.py:39
-msgid "flagged"
-msgstr ""
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr ""
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr ""
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr ""
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:147
-msgid "groups"
-msgstr ""
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr ""
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr ""
-
-#: contrib/auth/models.py:145
-msgid "last login"
-msgstr ""
-
-#: contrib/auth/models.py:139
-msgid "last name"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr ""
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr ""
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "may"
-msgstr ""
-
-#: contrib/auth/models.py:347
-msgid "message"
-msgstr ""
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr ""
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr ""
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr ""
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr ""
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr ""
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr ""
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr ""
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr ""
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr ""
-
-#: utils/text.py:128
-msgid "or"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr ""
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr ""
-
-#: contrib/auth/models.py:141
-msgid "password"
-msgstr ""
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr ""
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr ""
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr ""
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr ""
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr ""
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr ""
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr ""
-
-#: contrib/comments/admin.py:47
-msgid "removed"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr ""
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr ""
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr ""
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr ""
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr ""
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr ""
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr ""
-
-#: contrib/auth/models.py:142
-msgid "staff status"
-msgstr ""
-
-#: contrib/auth/models.py:144
-msgid "superuser status"
-msgstr ""
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr ""
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr ""
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr ""
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr ""
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr ""
-
-#: contrib/auth/models.py:153 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr ""
-
-#: contrib/auth/models.py:149
-msgid "user permissions"
-msgstr ""
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr ""
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr ""
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr ""
-
-#: contrib/auth/models.py:137
-msgid "username"
-msgstr ""
-
-#: contrib/auth/models.py:154
-msgid "users"
-msgstr ""
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr ""
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:775
-msgid "yes,no,maybe"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#~ msgid ""
-#~ "Ensure this value has at least %(min)d characters (it has %(length)d)."
-#~ msgstr ""
-#~ "Wês wis dat dizze wearde minstens %(min)d karakters hat (it hat %(length)"
-#~ "d)."
-
-#~ msgid ""
-#~ "Ensure this value has at most %(max)d characters (it has %(length)d)."
-#~ msgstr ""
-#~ "Wês wis dat dizze wearde maksimaal %(max)d karakters hat (it hat %(length)"
-#~ "d)."
-
-#~ msgid "Ensure this value is greater than or equal to %s."
-#~ msgstr "Wês wis dat dizze wearde grutter of lyk is oan %s."
-
-#~ msgid "Ensure this value is less than or equal to %s."
-#~ msgstr "Wês wis dat dizze wearde minder of lyk is oan %s."
diff --git a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 28a9765..0000000
--- a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.po
deleted file mode 100644
index f75ffaa..0000000
--- a/parts/django/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,119 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-27 09:59-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Now"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Midnight"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "6 a.m."
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Noon"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:89
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Cancel"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:129
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:178
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-msgid "Calendar"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:176
-msgid "Yesterday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Tomorrow"
-msgstr ""
diff --git a/parts/django/django/conf/locale/fy_NL/__init__.py b/parts/django/django/conf/locale/fy_NL/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/fy_NL/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/fy_NL/formats.py b/parts/django/django/conf/locale/fy_NL/formats.py
deleted file mode 100644
index 6d71786..0000000
--- a/parts/django/django/conf/locale/fy_NL/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-# DATE_FORMAT =
-# TIME_FORMAT =
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-# SHORT_DATE_FORMAT =
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/ga/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ga/LC_MESSAGES/django.mo
deleted file mode 100644
index 5f41030..0000000
--- a/parts/django/django/conf/locale/ga/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ga/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ga/LC_MESSAGES/django.po
deleted file mode 100644
index 913583c..0000000
--- a/parts/django/django/conf/locale/ga/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5223 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-07 17:14+0100\n"
-"PO-Revision-Date: 2010-05-07 17:33+0100\n"
-"Last-Translator: Michael Thornhill <michael@maithu.com>\n"
-"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? 3 : 4\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabach"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgárach"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Beangáilis"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosnian"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Catalóinis"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Seiceach"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Breatnach"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dainmhairgis"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Gearmánach"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Gréigis"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Béarla"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Béarla na Breataine"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Spáinneach"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Spáinnis Airgintín"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Eastóinis"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Bascais"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Peirsis"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Fionlainnis"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Francach"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frisian"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Gaeilge"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Gailísis"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Eabhrach"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hiondúis"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Cróitis"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Ungáiris"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "Mórlainnis"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "Iodáilis"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "Seapáinis"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "Seoirseach"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "Ciméiris"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "Cannadais"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "Cóiréis"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "Liotuáinis"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "Laitvis"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "Macadóinis"
-
-#: conf/global_settings.py:80
-msgid "Mongolian"
-msgstr "Mongóilis"
-
-#: conf/global_settings.py:81
-msgid "Dutch"
-msgstr "Ollannach"
-
-#: conf/global_settings.py:82
-msgid "Norwegian"
-msgstr "Ioruais"
-
-#: conf/global_settings.py:83
-msgid "Norwegian Bokmal"
-msgstr "Bokmal Ioruais"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Nynorsk"
-msgstr "Nynorsk Ioruais"
-
-#: conf/global_settings.py:85
-msgid "Polish"
-msgstr "Polainnis"
-
-#: conf/global_settings.py:86
-msgid "Portuguese"
-msgstr "Portaingéilis"
-
-#: conf/global_settings.py:87
-msgid "Brazilian Portuguese"
-msgstr "Portaingéilis Bhrasaíleach"
-
-#: conf/global_settings.py:88
-msgid "Romanian"
-msgstr "Rómáinis"
-
-#: conf/global_settings.py:89
-msgid "Russian"
-msgstr "Rúiseach"
-
-#: conf/global_settings.py:90
-msgid "Slovak"
-msgstr "Slóvaicis"
-
-#: conf/global_settings.py:91
-msgid "Slovenian"
-msgstr "Slóivéinis"
-
-#: conf/global_settings.py:92
-msgid "Albanian"
-msgstr "Albanian"
-
-#: conf/global_settings.py:93
-msgid "Serbian"
-msgstr "Seirbiach"
-
-#: conf/global_settings.py:94
-msgid "Serbian Latin"
-msgstr "Laidin Seirbiach"
-
-#: conf/global_settings.py:95
-msgid "Swedish"
-msgstr "Sualainnis"
-
-#: conf/global_settings.py:96
-msgid "Tamil"
-msgstr "Tamailis"
-
-#: conf/global_settings.py:97
-msgid "Telugu"
-msgstr "Teileagúis"
-
-#: conf/global_settings.py:98
-msgid "Thai"
-msgstr "Tamailis"
-
-#: conf/global_settings.py:99
-msgid "Turkish"
-msgstr "Tuircis"
-
-#: conf/global_settings.py:100
-msgid "Ukrainian"
-msgstr "Úcráinis"
-
-#: conf/global_settings.py:101
-msgid "Vietnamese"
-msgstr "Vitneaimis"
-
-#: conf/global_settings.py:102
-msgid "Simplified Chinese"
-msgstr "Sínis"
-
-#: conf/global_settings.py:103
-msgid "Traditional Chinese"
-msgstr "Sínis Tradisúinta"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "D'éirigh le scriosadh %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55
-#: contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "An bhfuil tú cinnte?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Scrios %(verbose_name_plural) roghnaithe"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Trí %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Gach"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Aon dáta"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Inniu"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "7 lá a chuaigh thart"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Táim cinnte"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "An blian seo"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:469
-msgid "Yes"
-msgstr "Tá"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:469
-msgid "No"
-msgstr "Níl"
-
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:469
-msgid "Unknown"
-msgstr "Gan aithne"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Aicsean:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "am aicsean"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id oibiacht"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "repr oibiacht"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "brat an aicsean"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "teachtaireacht athrú"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "loga iontráil"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "loga iontrálacha"
-
-#: contrib/admin/options.py:138
-#: contrib/admin/options.py:153
-msgid "None"
-msgstr "Dada"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Athraithe %s"
-
-#: contrib/admin/options.py:559
-#: contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16
-#: db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "agus"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Suimithe %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Athraithe %(list)s le %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Scriosaithe %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Dada réimse aithraithe"
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Bhí %(name)s \"%(obj)s\" breisithe go rathúil"
-
-#: contrib/admin/options.py:647
-#: contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Is féidir leat é a cuir in eagar thíos."
-
-#: contrib/admin/options.py:657
-#: contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Is féidir le ceann eile %s a cuir le thíos."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Bhí an %(name)s \"%(obj)s\" aithraithe to rathúil"
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "Chuir an %(name)s·\"%(obj)s\"·go rathúil.·Is féidir leat é a cuir in eagar thíos."
-
-#: contrib/admin/options.py:740
-#: contrib/admin/options.py:997
-msgid "Items must be selected in order to perform actions on them. No items have been changed."
-msgstr "Ní mór Míreanna a roghnú chun caingne a dhéanamh orthu. Níl aon mhíreanna a athrú."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Uimh gníomh roghnaithe."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Cuir %s le"
-
-#: contrib/admin/options.py:866
-#: contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Níl réad le hainm %(name)s agus eochair %(key)r ann."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Aithrigh %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Botún bunachar sonraí"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "Bhí %(count)s %(name)s aithraithe go rathúil."
-msgstr[1] "Bhí %(count)s %(name)s aithraithe to rathúil"
-msgstr[2] "Bhí %(count)s %(name)s aithraithe to rathúil"
-msgstr[3] "Bhí %(count)s %(name)s aithraithe to rathúil"
-msgstr[4] "Bhí %(count)s %(name)s aithraithe to rathúil"
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "Gach %(total_count)s roghnaithe"
-msgstr[1] "Gach %(total_count)s roghnaithe"
-msgstr[2] "Gach %(total_count)s roghnaithe"
-msgstr[3] "Gach %(total_count)s roghnaithe"
-msgstr[4] "Gach %(total_count)s roghnaithe"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 as %(cnt)s roghnaithe."
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Bhí %(name)s \"%(obj)s\" scrioste go rathúil."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Athraigh stáir %s"
-
-#: contrib/admin/sites.py:18
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Le do thoil, iontráil aihm úsaideora agus focal faire ceart. Bí cúramach go bhfuil an beirt acu cásíogair."
-
-#: contrib/admin/sites.py:307
-#: contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Le do thoil, logáil isteach arís cé go bhfuil to seisúin críochnaithe."
-
-#: contrib/admin/sites.py:314
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Feictear nach bhfuil do brabhsálaí réidh le cuaiche a glacadh. Le do thoil, cumasaigh cuaiche, athlódáil an leathanach seo, agus déan iarracht arís."
-
-#: contrib/admin/sites.py:330
-#: contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Níl an carachtar '@' ceadaithe in ainmeacha úsaideora."
-
-#: contrib/admin/sites.py:333
-#: contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Níl do ríomhseoladh do ainm úsaideora. Bain trial as '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Riaracháin an suíomh"
-
-#: contrib/admin/sites.py:403
-#: contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Logáil isteach"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s riaracháin"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Dáta:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Am:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Ag an am seo."
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Athraigh:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Cuardach"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Cuir le"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Ní bhfuarthas an leathanach"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Tá brón orainn, ach ní bhfuarthas an leathanach iarraite."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Baile"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Botún freastalaí"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Botún freastalaí (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Botún Freastalaí <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Bhí botún. Seolah é go dtí riarthóirí an suíomh agus beidh sé ceartaithe i gceann tamallín. Go raibh maith agat le hadhaigh do foighne."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Rith an gníomh roghnaithe"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Té"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Cliceáil anseo chun na hobiacht go léir a roghnú ar fud gach leathanach"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Roghnaigh gach %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Scroiseadh modhnóir"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Fáilte"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Doiciméadúchán"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Athraigh focal faire"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Logáil amach"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Riarthóir suíomh Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Riarachán Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Cuir le"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Stair"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Breath ar suíomh"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Le do thoil ceartaigh an botún thíos."
-msgstr[1] "Le do thoil ceartaigh na botúin thíos."
-msgstr[2] "Le do thoil ceartaigh na botúin thíos."
-msgstr[3] "Le do thoil ceartaigh na botúin thíos."
-msgstr[4] "Le do thoil ceartaigh na botúin thíos."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Cuir %(name)s le"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Scagaire"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:302
-msgid "Delete"
-msgstr "Cealaigh"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Má scriossan tú %(object_name)s '%(escaped_object)s' scriosfaidh oibiachtí gaolta. Ach níl cead ag do cuntas na oibiacht a leanúint a scriosadh:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "An bhfuil tú cinnte na %(object_name)s \"%(escaped_object)s\" a scroiseadh?Beidh gach oibiacht a leanúint scroiste freisin:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Táim cinnte"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Scrios na réadanna"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid "Deleting the %(object_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Má scriossan tú %(object_name)s scriosfaidh oibiachtí gaolta. Ach níl cead ag do cuntas na oibiacht a leanúint a scriosadh:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid "Are you sure you want to delete the selected %(object_name)s objects? All of the following objects and their related items will be deleted:"
-msgstr "An bhfuil tú cinnte na %(object_name)s a scroiseadh? Beidh gach oibiacht a leanúint agus na oibiachta gaolta scroiste freisin:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Trí %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Samhla ar fáil ins an feidhmchlár %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Athraigh"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Níl cead agat aon rud a cuir in eagar."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Aicsean úrnua"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mo Aicseain"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Dada ar fáil"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Inneachair anaithnid"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Tá rud éigin mícheart le suitéail do bunachar sonraí. Déan cinnte go bhfuil boird an bunachar sonraI cruthaithe cheana, agus déan cinnte go bhfuil do úsaideoir in ann an bunacchar sonraí a léamh."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Ainm úsaideor:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Focal faire:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dáta/am"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Úsaideoir"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Aicsean"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Níl stáir aitraithe ag an oibiacht seo agús is dócha ná cuir le tríd an an suíomh riarachán."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Taispéan gach rud"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Sábháil"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Cuardach"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "toradh 1"
-msgstr[1] "%(counter)s torthaí"
-msgstr[2] "%(counter)s torthaí"
-msgstr[3] "%(counter)s torthaí"
-msgstr[4] "%(counter)s torthaí"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s iomlán"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Sabháil mar nua"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Sabháil agus cuir le ceann eile"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Sábhail agus lean ag cuir in eagar"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Ar dtús, iontráil ainm úsaideoir agus focal faire. Ansin, beidh tú in ann cuir in eagar níos mó roghaí úsaideoira."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Iontráil focal faire nua le hadhaigh an úsaideor <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:61
-#: contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Focal faire"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Focal faire (arís)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Iontráíl an focal faire céanna mar thuas, le fíorúchán."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Cuir eile %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Tóg amach"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Cealaigh?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Go raibh maith agat le hadhaigh do cuairt ar an suíomh idirlínn inniú."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Logáil isteacj arís"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Athrú focal faire"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Athrú an focal faire rathúil"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Bhí do focal faire aithraithe."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Le do thoil, iontráil do sean-focal faire, ar son slándáil, agus ansin iontráil do focal faire dhá uaire cé go mbeimid in ann a seiceal go bhfuil sé scríobhte isteach i gceart."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Sean-focal faire "
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Focal faire nua"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Athraigh mo focal faire"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Athsocraigh focal faire"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Athshocraigh an focal faire críochnaithe"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Tá do focal faire réidh. Is féidir leat logáil isteach anois."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Deimhniú athshocraigh focal faire"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Cuir isteach focal faire nua"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "Le do thoil, iontráil do focal faire dhá uaire cé go mbeimid in ann a seiceal go bhfuil sé scríobhte isteach i gceart."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Focal faire nua:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Deimhnigh focal faire:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Athshocraigh focal faire mí-rathúil"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr "Bhí nasc athshocraigh an focal faire mícheart, b'fheidir mar go raibh sé úsaidte cheana. Le do thoil, iarr ar athsocraigh focal faire nua."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Athshocraigh focal faire mí-rathúil"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Seolamar teagasca chugat le hadhaigh do r-phost a úsaid mar to focal faire. Gheobaidh tú an r-phost i gceann tamallín."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Tá tú ag fáil an r-phost seo mar iarr tú ar athshocraigh an focal faire."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "Le do cuntas úsaideor ar %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Le do thoil té go dtí an leathanach a leanúint agus roghmaigh focal faire nua:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Do ainm úsaideoir, má tá dearmad déanta agat."
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Go raibh maith agat le hadhaigh do cuairt!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Foireann an %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "Dearmad déanta ar do focal faire? Iontráil do r-phost thíos agus seolfaimid teagasca chun ceann nua a fháil."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "R-phost:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Athsocraigh mo focal faire"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Gach dáta"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Roghnaigh %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Roghnaigh %s a athrú"
-
-#: contrib/admin/views/template.py:38
-#: contrib/sites/models.py:38
-msgid "site"
-msgstr "suíomh"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "teimpléad"
-
-#: contrib/admindocs/views.py:61
-#: contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "clib:"
-
-#: contrib/admindocs/views.py:94
-#: contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "scag:"
-
-#: contrib/admindocs/views.py:158
-#: contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "radharc:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Ní bhfuarthas feidhmchlár %r "
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Ní bhfuarthas samhail %(model_name)r i bhfeidhmclár %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "An oibiacht gaolmhara `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209
-#: contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233
-#: contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261
-#: contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "samhail:"
-
-#: contrib/admindocs/views.py:224
-#: contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "Oibiachtí gaolmhara `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "gach %s"
-
-#: contrib/admindocs/views.py:233
-#: contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "líon %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Réimse ar oibiachtí %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "Feiceann sé nach bhfuil %s oibiacht urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Leabharmharcín"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Leabharmharcín doiciméadúchán"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Chun leabharmarcín a suitéal, Tarraing an nasc go dtí do barra uirlisí leabhairmairc\n"
-", nó deaschliceáil and nasc agus cuir leis do leabharmairc. Anois is féidir\n"
-"leat an leabharmarcín a roghnaigh ón aon leathanach ar an suíomh. Bí cúramach go dteastaíonn cuid de na leabharmarcín go bhfuil tú ag féachaint ar an suíomh ó ríomhaire inmheánach\n"
-"(leabhar le do riarthóir córais muna bhfuil tú cinnte).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Doiciméadúchán le hadhaigh an leathanach seo"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Tógann se tusa ón aon leathanach go dtí an doiciméadúchán le hadhaigh an radharc a rinne an leathanach."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Taispéain oibiacht ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Taispéain an content-type agus ID uathúil le leathanaigh le hadhaigh oibiacht amháin."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Cuir in eagar an oibiacht seo (fuinneog láthair)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Léimeann go dtí an leathanach riaracháin le leathainaigh le hadhaigh oibiacht amháin."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Cuir in eagar an oibiacht seo (fuinneog nua)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Mar thuas, ach osclaíonn sé an leathanach riarachán if fuinneog nua"
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Eolas pearsantach"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Ceada"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Dáta tábhactach"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grúpa"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Focal faire aithraithe rathúil"
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Athraigh focal faire: %s"
-
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:48
-#: contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Ainm úsaideoir"
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Riachtanach. 30 carachtair nó níos lú. Litreacha, digite agus @/./+/-/_ amháin."
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Cathaigh litreacha, digite agus na carachtair @/./+/-/_ amhain le hadhaigh an méid seo."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Focal faire deimhniú"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "In ann do úsáideoir leis an ainm úsáideora."
-
-#: contrib/auth/forms.py:37
-#: contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Níl an dá focla faire comhoiriúnigh"
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Tá an cuntas seo neamhghníomhach."
-
-#: contrib/auth/forms.py:88
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Feictear nach bhfuil do brabhsálaí réidh le cuaiche a glacadh. Tá cuaiche ag teastail le logáil isteach."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "R-phost"
-
-#: contrib/auth/forms.py:110
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Níl cuntas in éineacht leis an r-phost sin. An bhfuil tú cinnte go bhfuil tú cláraithe?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Athsocraigh focal faire ar %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Deimnhiú focal faire nua"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Cuireadh do sean-focal faire isteach go mícheart. Iontráil isteach é arís."
-
-#: contrib/auth/models.py:66
-#: contrib/auth/models.py:94
-msgid "name"
-msgstr "ainm"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "Ainm cód"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "cead"
-
-#: contrib/auth/models.py:73
-#: contrib/auth/models.py:95
-msgid "permissions"
-msgstr "ceada"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grúpa"
-
-#: contrib/auth/models.py:99
-#: contrib/auth/models.py:206
-msgid "groups"
-msgstr "grúpa"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "Ainm úsáideoir"
-
-#: contrib/auth/models.py:196
-msgid "Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Riachtanach. 30 carachtair nó níos lú. Litreacha, digite agus na carachtair @/./+/-/_"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "ainm baiste"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "sloinne"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "seoladh r-phost"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "focal faire"
-
-#: contrib/auth/models.py:200
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Úsáid '[algo]$[salt]$[hexdigest]' nó <a href=\"password/\">athraigh focal faire foirm</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "stádas foirne"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Sainigh an bhfuil cead ag an úsáideoir logáil isteach go dtí an suíomh riaracháin seo."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "gníomhach"
-
-#: contrib/auth/models.py:202
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "Sainíonn an bhfuil an úsáideoir gníomhach. Míroghnaigh seo in aineonn de scriseadh cuntasí."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "stádas forúsáideoir"
-
-#: contrib/auth/models.py:203
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Sainíonn go bhfuil gach ceada ag an úsáideoir seo gan iad a cur le go díreach."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "logáil deirneach"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "Dáta teacht isteach"
-
-#: contrib/auth/models.py:207
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Breis leis na ceada sannta láimhe, faigheann an úsáideoir seo gach ceada sannta do na grúpaí a bhfuil sé/sí isteach in."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "ceada úsáideoira"
-
-#: contrib/auth/models.py:212
-#: contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "úsáideoir"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "úsáideora"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "teachtaireacht"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Logáilte amach"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120
-#: forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Cuir isteach seoladh ríomhphoist bhailí."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Inneachar"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Meiteashonraí"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "bratach curtha leis"
-msgstr[1] "bratach curtha leis"
-msgstr[2] "bratach curtha leis"
-msgstr[3] "bratach curtha leis"
-msgstr[4] "bratach curtha leis"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Bratach nótaí tráchta roghnaithe"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "ceadaithe"
-msgstr[1] "ceadaithe"
-msgstr[2] "ceadaithe"
-msgstr[3] "ceadaithe"
-msgstr[4] "ceadaithe"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Cheadú nótaí tráchta roghnaithe"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "baineadh"
-msgstr[1] "baineadh"
-msgstr[2] "baineadh"
-msgstr[3] "baineadh"
-msgstr[4] "baineadh"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Bain nótaí tráchta roghnaithe"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "bhí nóta tráchta %(action)s go rathúil."
-msgstr[1] "nótaí tráchta %(count)s a bhí sásúil %(action)s."
-msgstr[2] "nótaí tráchta %(count)s a bhí sásúil %(action)s."
-msgstr[3] "nótaí tráchta %(count)s a bhí sásúil %(action)s."
-msgstr[4] "nótaí tráchta %(count)s a bhí sásúil %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s nótaí"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Nótaí tráchtaí is déanaí ar %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Ainm"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "R-phost"
-
-#: contrib/comments/forms.py:95
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-#: db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Nóta tráchta"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Féach ar do bhéal! Níl an focal %s ceadaithe anseo."
-msgstr[1] "Féach ar do bhéal! Níl na focail %s ceadaithe anseo."
-msgstr[2] "Féach ar do bhéal! Níl na focail %s ceadaithe anseo."
-msgstr[3] "Féach ar do bhéal! Níl na focail %s ceadaithe anseo."
-msgstr[4] "Féach ar do bhéal! Níl na focail %s ceadaithe anseo."
-
-#: contrib/comments/forms.py:182
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "Má cuireann tú aon rud sa réimse seo, beidh do nóta déileálfar mar spam"
-
-#: contrib/comments/models.py:22
-#: contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tíopa inneachar "
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "oibiacht ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "Ainm úsáideoir"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "seoladh r-phost an t-úsáideoir"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL an t-úsáideora"
-
-#: contrib/comments/models.py:56
-#: contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "trácht"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "Dáta/am curtha isteach"
-
-#: contrib/comments/models.py:60
-#: db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "Seol IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "poiblí"
-
-#: contrib/comments/models.py:62
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Díthiceáil an bosca seo chun an nóta a thógáil as an suíomh."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "Scrioste"
-
-#: contrib/comments/models.py:65
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Seic an bosca seo dá bbéadh an nóta tráchta seo míchuí. Taispeantar \"Bhí an nóta tráchta scrioste\" in áit an nóta tráchta seo."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "nótaí tráchta"
-
-#: contrib/comments/models.py:119
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr "Bhí an nóta tráchta póstailte trí uaire trí úsáideoir fíordheimhnithe mar sin tá an ainm léamh-amhain."
-
-#: contrib/comments/models.py:128
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr "Bhí an nóta tráchta póstailte trí úsáideoir fíordeimhnite mar sin tá an r-phost léamh amháin."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Postáilte trí %(user)s ar %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "brat"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "dáta"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "brat nóta tráchta"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "bratacha nótaí tráchta"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Ceadaigh nóta tráchta"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Cuir an nóta seo poiblí?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Fhormheas"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Go raibh maith agait le hadhaigh to formheas"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid "Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Go raibh maith agat as an am chun feabhas a chur ar chaighdeán na díospóireachta ar ár suíomh"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Tóg amach nóta tráchta"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Dáiríre, cuir amach an nóta seo?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Go raibh maith agat le hadhaigh do thógail amach"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Cuir brat ar an nóta tráchta seo"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Go deimhin cuir brat ar an nóta tráchta seo?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Brat"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Go raibh maith agat le hadhaigh do brat"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Post"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Réamhamharc"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Go raibh maith agat le hadhaign do nóta tráchta"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Go raibh maith agat le hadhaigh do nóta tráchta"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Nóta tráchta réamhamharc"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Le do thoil ceartaigh an botún thíos."
-msgstr[1] "Le do thoil ceartaigh na botúin thíos."
-msgstr[2] "Le do thoil ceartaigh na botúin thíos."
-msgstr[3] "Le do thoil ceartaigh na botúin thíos."
-msgstr[4] "Le do thoil ceartaigh na botúin thíos."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Seol do Nóta tráchta"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "nó déan aithraithe"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "píotón samhail aicme ainm"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tíopaI inneachair"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Sampla '/about/contact/' Déan cinnte go bhfuil príomhslaid agus cúlslais agat."
-
-#: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Níl ach litreacha, uimhreacha, slaiseacha, fólíniú agus daiseanna ceadaithe."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Ard-rogha"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "teideal"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "inneachar"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "Cuir nótaí tráchta ar chumas"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "ainm an teimpléid"
-
-#: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Sampla: 'flatpages/contact_page.html'. Muna bhfuil sé ar soláthair, bainfidh an córás úsáid as 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "clárúchán riachtanach"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Dá mbéadh é seo seicailte, ní beidh ach úsáideora logáilte isteach in ann an leathanach seo a fheiceail"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "leacleathanach"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "leacleathanaigh"
-
-#: contrib/formtools/wizard.py:140
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr "Gabh ár leithscéal, ach tá do fhoirm in éag. Lean ar aghaidh le do thoil líonadh amach an fhoirm ón leathanach seo."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "GIS an bonn réimse - léarscáileanna chun an Sonraíocht OpenGIS cineál Céimseata."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Pointe"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Líne teaghrán"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polagán"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Il-phointe"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Il-líne teaghrán"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Il polagán"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Céimseata bhailiú"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Ní soláthair méid geoiméadracht"
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Méid geoiméadracht neamhbhailí"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tíopa geoiméadracht neamhbhailí"
-
-#: contrib/gis/forms/fields.py:20
-msgid "An error occurred when transforming the geometry to the SRID of the geometry form field."
-msgstr "Tharla earráid ag claochlú an geoiméadracht go dtí SRID an réimse fhoirm geoiméadracht."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "ú"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "ú"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "ú"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "ú"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milliún"
-msgstr[1] "%(value).1f milliún"
-msgstr[2] "%(value).1f milliún"
-msgstr[3] "%(value).1f milliún"
-msgstr[4] "%(value).1f milliún"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f billiún"
-msgstr[1] "%(value).1f billiún"
-msgstr[2] "%(value).1f billiún"
-msgstr[3] "%(value).1f billiún"
-msgstr[4] "%(value).1f billiún"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilliún"
-msgstr[1] "%(value).1f trilliún"
-msgstr[2] "%(value).1f trilliún"
-msgstr[3] "%(value).1f trilliún"
-msgstr[4] "%(value).1f trilliún"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "aon"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dó"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "trí"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "ceathair"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cúig"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "sé"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "seacht"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "ocht"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "naoi"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "inniu"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "amárach"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "inné"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Cuir isteach cód póstal ins an formáid NNNN nó ANNNNAAA"
-
-#: contrib/localflavor/ar/forms.py:50
-#: contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131
-#: contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Teastaíonn an réimse seo uimhreacha amháin."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Teastaíonn an réimse seo 7 nó 8 digite."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Cuir isteach CUIT bailí i formáid XX-XXXXXXXX-X nó XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT neamhbailí"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "An Ostair íochtarach"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "An Ostair uachtarach"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vín"
-
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Cuir isteach cód zip ins an formáid XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Iontráil uimhir Ostaire Slándáil Shóisialta bailí i bhformáid XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Iontráil cód poist 4 dhigit."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Iontráil zip-cód i bhformáid XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Ní mór Uimhreacha teileafóin a chur i XX-XXXX-XXXX format."
-
-#: contrib/localflavor/br/forms.py:54
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Roghnaigh stát na Brasaíle bailí. Ní thugann an Stát sin ar cheann de na stáit atá ar fáil."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Uimhir CPF neamhbhailí."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Éilíonn an réimse seo ag an chuid is mó dhigit 11 nó 14 de charachtair."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Neamhbhailí CNPJ uimhir."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Éilíonn an réimse seo ar a laghad 14 digití"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Iontráil cód poist i bhformáid XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Iontráil uimhir Cheanada Árachais Shóisialaigh bailí i bhformáid XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Talún"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "An Ghinéiv"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "Iontráil aitheantais hEilvéise bailí nó uimhir pas cárta i bhformáid X1234567<0 nó 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Iontráil RUT Chilean bailí."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Iontráil RUT bailí Chilean. Is é an fhormáid XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Níl an RUT Chilean bailí."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prague"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Réigiún Central Bohemian"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Réigiún Bohemian Theas"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilsen Réigiún"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Carlsbad Réigiún"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Usti Réigiún"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec Réigiún"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Réigiún"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice Réigiún"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysocina Réigiún"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Réigiún Moravian Theas"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Réigiún Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Réigiún Zlin"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Réigiún Moravian-Silesian"
-
-#: contrib/localflavor/cz/forms.py:28
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Iontráil cód poist i bhformáid XXXXX nó XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Iontráil uimhir breithe i bhformáid XXXXXX/XXXX nó XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Paraiméadar inscne roghnach neamhbhailí, is iad 'f' agus 'm' na luachanna bailí"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Cuir isteach uimhir breithe bailí."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Cuir isteach uimhir IC bailí."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "An Bhaváir"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Beirlín"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Pomerania Thiar"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "An tSacsain Íochtair"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Réin Thuaidh-Westphalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Dúiche na Réine-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "An tSacsain"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "An tSacsain-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15
-#: contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Iontráil zip-cód i bhformáid XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Iontráil uimhir cárta aitheantais na Gearmáine bailí i bhformáid XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruña"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Maidrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Phrionsacht Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Na hOileáin Bhailéaracha"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Tír na mBascach"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Na hOileáin Chanáracha"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilla-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilla agus Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "An Chatalóin"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Réigiún de Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Chomhphobail Foral de Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Iontráil cód poist bailí i raon agus formáid 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "Iontráil uimhir theileafóin bailí i gceann de na formáidí 6XXXXXXXX, 8XXXXXXXX nó 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Cuir isteach NIF bailí, NIE, nó CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Cuir isteach NIF bailí nó NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Sheiceála neamhbhailí do NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Sheiceála neamhbhailí do NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Sheiceála neamhbhailí do CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Cuir isteach uimhir chuntais bainc bailí i bhformáid XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Sheiceála neamhbhailí do uimhir cuntas bainc."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Cuir isteach uimhir Fionlainne slándála sóisialta bailí."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Ní mór Uimhreacha teileafóin a chur i bhformáid 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Iontráil cód poist bailí"
-
-#: contrib/localflavor/id/forms.py:68
-#: contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Iontráil uimhir theileafóin bailí"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Cuir isteach uimhir feithicle bailí pláta cheadúnas"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Cuir isteach uimhir NIK/KTP bailí"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Cór gconsalacht"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Cór Taidhleoireachta"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Rialtas Feidearálach"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Aontroim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Ard Mhacha"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Ceatharlach"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "An Cabhan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "An Clar"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Corcaigh"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Doire"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Dún na nGall"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "an Dún"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Baile Atha Cliath"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fear Manach"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Gaillimh"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Chiarrai"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Cill Dara"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Cill Chainnigh"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laoise"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Liatroim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Luimneach"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "An Longfort"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Lú"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mhaigh Eo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "an Mhí"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Muineachán"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Uíbh Fhailí"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Ros Comain"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligeach"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tiobraid Arann"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tír Eoghain"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Port Láirge"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Na hIarmhí"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Loch Garman"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Cill Mhantáin"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Iontráil zip-cód i bhformáid XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Cuir isteach uimhir aitheantais bailí hÍoslainne. Is é an fhormáid XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Níl an uimhir aitheantais hÍoslainne bailí."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Iontráil zip-cód bailí."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Iontráil uimhir Slándáil Shóisialta bailí."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Iontráil uimhir CBL bailí."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Iontráil cód poist i bhformáid XXXXXXX nó XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tóiceo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Iontráil uimhir ID Sibhialta Kuwati bailí"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California an Ridire"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Feidearálach"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Rubha"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Iontráil cód poist bailí"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Iontráil uimhir SoFi bailí"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Cuir isteach uimhir leasa na hIorua sóisialta bailí."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Éilíonn an réimse 8 digití."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Éilíonn an réimse seo 11 digití."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Náisiúnta Uimhir Aitheantais comhdhéanta de 11 digití."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Sheiceála mícheart ar an Uimhir Aitheantais Náisiúnta."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Iontráil réimse uimhir chánach (NIP) i bhformáid XXX-XXX-XX XX-nó-XX XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Sheiceála mícheart ar an Uimhir Cánach (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Uimhir Náisiúnta Clár Gnó (REGON) comhdhéanta de 9 nó 14 digití."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Sheiceála Mícheart do Uimhir Ghnó Clár Náisiúnta (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Iontráil cód poist i bhformáid XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Silesia Íochtarach"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "An Pholainn lú "
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "An Pholainn Mór"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Pomerania Thiar"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Iontráil zip-cód i bhformáid XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Ní mór líon Fón tá 9 dhigit, nó tús le + nó 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Iontráil CIF bailí."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Iontráil CNP bailí."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Iontráil IBAN bailí i bhformáid ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Ní mór uimhreacha teileafóin a chur i bhformáid XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Iontráil cód poist bailí i bhformáid XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Cuir isteach uimhir eagraíochta bailí Sualainnis."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Iontráil uimhir aitheantais bailí Sualainnis pearsanta."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Ní líon Comhordaithe Co-cheadaítear."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Iontráil cód poist na Sualainne i bhformáid XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stócólm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "An Bhratasláiv I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "An Bhratasláiv II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "An Bhratasláiv III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "An Bhratasláiv IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "An Bhratasláiv V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica réigiún"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "An Bhratasláiv réigiún"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kosice réigiún"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra réigiún"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Presov réigiún"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trencin réigiún"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava réigiún"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zilina réigiún"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Iontráil postchód bailí."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Corn na Breataine agus na Oileáin Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Contae Aontroma"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Contae Ard Mhacha"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Contae an Dúin"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Contae Fhear Manach"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Contae Dhoire"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Contae Thír Eoghain"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Albain"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries agus Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "na hOiléain Orkney"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "na hOiléain Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Oileáin Iarthair"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Sasana"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Tuaisceart Éireann"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Albain"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "An Bhreatain Bheag"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Iontráil zip-cód i bhformáid XXXXX nó XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Ní mór uimhreacha teileafóin a chur i format XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Iontráil uimhir Slándáil Shóisialta US bailí i bhformáid XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Iontráil US stát nó i gcríoch."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S. stát (dhá litreacha móra)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Uimhir telefón"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Iontráil CI bailí a roinnt i X.XXX.XXX-X, XXXXXXX-X nó XXXXXXXX formáid."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Cuir isteach uimhir IC bailí."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Iontráil uimhir ID hAfraice Theas bailí"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Iontráil cód poist na hAfraice Theas bailí"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Saorstát"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Iarthuaisceart"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "teachtaireacht leisciúil"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "atreoraigh ó"
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Teastaíonn dearbhchosán gan ainm fearainn. Sampla '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "atreoraigh go dtí"
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Is féidir dearbhchosán nó URL lán ag tosnú le 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "athsheol"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "atreoraithe"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "eochair an seisiún"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sonraíocht an seisiún"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "Data dul as feidhm"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "seisiún"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "seisúin"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "ainm fearainn"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "ainm taispeáinta"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "suíomhanna"
-
-#: core/validators.py:20
-#: forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Cuir luach bailí isteach."
-
-#: core/validators.py:87
-#: forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Cuir URL bailí isteach."
-
-#: core/validators.py:89
-#: forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Dealraíonn sé gur nasc briste é an URL seo."
-
-#: core/validators.py:123
-#: forms/fields.py:873
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Cuir 'slug' bailí isteach atá déanta as litreacha, uimhreacha, fostríoca nó fleiscíní."
-
-#: core/validators.py:126
-#: forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Cuir seoladh bailí IPv4 isteach."
-
-#: core/validators.py:129
-#: db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Ná cuir isteach ach digití scartha ag camóga."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Bí cinnte nach bhfuil níos lú ná %(limit_value)s (it is %(show_value)s)."
-
-#: core/validators.py:153
-#: forms/fields.py:205
-#: forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Bí cinnte go bhfuil an luach seo cothrom le nó níos lú ná %(limit_value)s."
-
-#: core/validators.py:158
-#: forms/fields.py:206
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Bí cinnte go bhfuil an luach seo cothrom le nó níos mó ná %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)."
-msgstr "Bí cinnte nach bhfuil níos lú ná %(limit_value)d carachtar sa luach seo (it has %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)."
-msgstr "Bí cinnte nach bhfuil níos mó ná %(limit_value)d carachtar sa luach seo %(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "Ní mór a bheith %(field_name)s uathúil don %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837
-#: db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Tá %(model_name)s leis an %(field_label)s seo ann cheana."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Níl %r luach rogha bailí."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Ní cheadaítear luach nialasach sa réimse seo."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Ní cheadaítear luach nialasach sa réimse seo."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Réimse de Cineál: %(field_type)s"
-
-#: db/models/fields/__init__.py:451
-#: db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961
-#: db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Slánuimhir"
-
-#: db/models/fields/__init__.py:455
-#: db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Ní mór don luach seo a bheith ina shlánuimhir."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Ní mór don luach seo a bheith Fíor nó Bréagach."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boole"
-
-#: db/models/fields/__init__.py:539
-#: db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Teaghrán (suas go %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Slánuimhireacha camóg-scartha"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Dáta (gan am)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Cuir dáta bailí isteach, san fhormáid BBBB-MM-LL."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Dáta neamhbhailí: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Cuir dáta/am bailí isteach, san fhormáid BBBB-MM-LL UU:NN[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Dáta (le am)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Ní mór don luach seo a bheith ina uimhir dheachúlach."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Uimhir deachúlach"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "R-phost"
-
-#: db/models/fields/__init__.py:799
-#: db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Conair comhaid"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Ní mór go mbeadh an luach snámhpointe."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Snámhphointe"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Mór (8 byte) slánuimhi"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Ní mór don luach seo a bheith Faic, Fíor nó Bréagach."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boole (Fíor, Bréagach nó Dada)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "téacs"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "am"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Cuir am bailí isteach san fhormáid UU:NN[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "Téacs XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Níl %(model)s le eochair %(pk)r ann."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Eochair Eachtracha (cineál a chinnfear de réir réimse a bhaineann)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Duine-le-duine caidreamh"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Go leor le go leor caidreamh"
-
-#: db/models/fields/related.py:1000
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Ar ríomhaire Mac, coinnigh an eochair \"Control\" nó \"Command\" síos chun níos mó ná rud amháin a roghnú."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Cuir aitheantas bailí %(self)s isteach. Tá an luach %(value)r neamhbhailí."
-msgstr[1] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
-msgstr[2] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
-msgstr[3] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
-msgstr[4] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Tá an réimse seo riachtanach."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Cuir slánuimhir isteach."
-
-#: forms/fields.py:235
-#: forms/fields.py:256
-msgid "Enter a number."
-msgstr "Cuir uimhir isteach."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Bí cinnte nach bhfuil níos mó ná %s digit ann."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Bí cinnte nach bhfuil níos mó ná %s ionad deachúlach ann."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Bí cinnte nach bhfuil níos mó ná %s digit roimh an bpointe deachúlach."
-
-#: forms/fields.py:323
-#: forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Cuir dáta bailí isteach."
-
-#: forms/fields.py:351
-#: forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Cuir am bailí isteach."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Cuir dáta/am bailí isteach."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Níor seoladh comhad. Deimhnigh cineál an ionchódaithe ar an bhfoirm."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Níor seoladh aon chomhad."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Tá an comhad a seoladh folamh."
-
-#: forms/fields.py:438
-#, python-format
-msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Cinntiú go bhfuil níos lú ná %(max)d carachtair (tá sé %(length)d) ag ainm an chomhaid seo."
-
-#: forms/fields.py:473
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Uasluchtaigh íomhá bhailí. Níorbh íomhá é an comhad a d'uasluchtaigh tú, nó b'íomhá thruaillithe é."
-
-#: forms/fields.py:596
-#: forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Déan rogha bhailí. Ní ceann de na roghanna é %(value)s."
-
-#: forms/fields.py:672
-#: forms/fields.py:734
-#: forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Cuir liosta de luachanna isteach."
-
-#: forms/formsets.py:298
-#: forms/formsets.py:300
-msgid "Order"
-msgstr "Ord"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Le do thoil ceartaigh an sonra dúbail le %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Ceart le do thoil na sonraí a dhúbailt le haghaidh %(field)s, chaithfidh a bheith uathúil."
-
-#: forms/models.py:572
-#, python-format
-msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
-msgstr "Ceart le do thoil na sonraí a dhúbailt le haghaidh %(field_name)s ní mór a bheith uaithúil le haghaidh an %(lookup)s i %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Le do thoil ceartaigh na luachanna dúbail thíos."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Ní raibh an eochair eachtrach comhoiriúnach leis an tuismitheoir ásc príomh-eochair."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Déan rogha bhailí. Ní ceann de na roghanna é do roghasa."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Déan rogha bhailí. Ní ceann de na roghanna é %s."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "Níl \"%s\" luach bailí le príomh-eochair."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "tá, níl, b'fhéidir"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d beart"
-msgstr[1] "%(size)d bearta"
-msgstr[2] "%(size)d bearta"
-msgstr[3] "%(size)d bearta"
-msgstr[4] "%(size)d bearta"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "meán oíche"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "nóin"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Luan"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Máirt"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Céadaoin"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Déardaoin"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Aoine"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Satharn"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Domhnach"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Lua"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Mai"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Céa"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Déa"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Aoi"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Sat"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Dom"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Mí Eanair"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Mí Feabhra"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "Mí Márta"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "Aibreán"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "Bealtaine"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "Mí an Mheithimh"
-
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "Mí Iúil"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Lúnasa"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Meán Fómhair"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Deireadh Fómhair"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Samhain"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Mí na Nollag"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "ean"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "fea"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "loit"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "aib"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "bealtaine"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "mei"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "iui"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "lun"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "mea"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "dei"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "sam"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "nol"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Ean"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Fea"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Lún"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Mea"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Dei"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Sam"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Nol"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "nó"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "blian"
-msgstr[1] "blianta"
-msgstr[2] "blianta"
-msgstr[3] "blianta"
-msgstr[4] "blianta"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mí"
-msgstr[1] "mhí"
-msgstr[2] "mhí"
-msgstr[3] "mhí"
-msgstr[4] "mhí"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "seachtain"
-msgstr[1] "seachtain"
-msgstr[2] "seachtain"
-msgstr[3] "seachtain"
-msgstr[4] "seachtain"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "lá"
-msgstr[1] "laethanta"
-msgstr[2] "laethanta"
-msgstr[3] "laethanta"
-msgstr[4] "laethanta"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "uair"
-msgstr[1] "uair"
-msgstr[2] "uair"
-msgstr[3] "uair"
-msgstr[4] "uair"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "nóiméad"
-msgstr[1] "nóiméad"
-msgstr[2] "nóiméad"
-msgstr[3] "nóiméad"
-msgstr[4] "nóiméad"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "nóiméad"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr "DATETIME_FORMAT"
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "D'éirigh le cruthú %(verbose_name)s."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "D'éirigh le nuashonrú %(verbose_name)s."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Scriosadh %(verbose_name)s."
-
-#~ msgid ""
-#~ "<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
-#~ msgstr ""
-#~ "<span class=\"_acnt\">0</span> de%(total_count)s %(module_name)s "
-#~ "roghnaithe"
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Ceann amhain nó níos mó %(fieldname)s in %(name)s: %(obj)s"
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Ceann amhain nó níos mó %(fieldname)s in %(name)s:"
-#~ msgid "Old password:"
-#~ msgstr "Sean-focal faire"
-#~ msgid "Add user"
-#~ msgstr "Cuir úsaideoir le"
-#~ msgid "Relation to parent model"
-#~ msgstr "Cine do samhail máthair"
-#~ msgid "Comment moderation queue"
-#~ msgstr "Ciú modhnóireacht nótaí tráchta"
-#~ msgid "No comments to moderate"
-#~ msgstr "Dada nótaí tráchta le modhnóireacht"
-#~ msgid "Email"
-#~ msgstr "R-phost"
-#~ msgid "Authenticated?"
-#~ msgstr "Fhíordheimhniú?"
-#~ msgid "IP Address"
-#~ msgstr "Seol IP"
-#~ msgid "Date posted"
-#~ msgstr "Dáta teacht isteach"
-#~ msgid "yes"
-#~ msgstr "tá"
-#~ msgid "no"
-#~ msgstr "níl"
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "DATE_WITH_TIME_FULL"
-#~ msgid "headline"
-#~ msgstr "ceannlíne"
-#~ msgid "rating #1"
-#~ msgstr "rátáil #1"
-#~ msgid "rating #2"
-#~ msgstr "rátáil #2"
-#~ msgid "rating #3"
-#~ msgstr "rátáil #3"
-#~ msgid "rating #4"
-#~ msgstr "rátáil #4"
-#~ msgid "rating #5"
-#~ msgstr "rátáil #5"
-#~ msgid "rating #6"
-#~ msgstr "rátáil #6"
-#~ msgid "rating #7"
-#~ msgstr "rátáil #7"
-#~ msgid "rating #8"
-#~ msgstr "rátáil #8"
-#~ msgid "is valid rating"
-#~ msgstr "is rátáil bailí"
-#~ msgid "Content object"
-#~ msgstr "Oibiacht inneachar"
-#~ msgid "person's name"
-#~ msgstr "Ainm"
-#~ msgid "ip address"
-#~ msgstr "seoladh ip"
-#~ msgid "approved by staff"
-#~ msgstr "ceadaithe tríd an foireann"
-#~ msgid "free comments"
-#~ msgstr "Nótaí tráchtaí saoire"
-#~ msgid "score"
-#~ msgstr "scór"
-#~ msgid "score date"
-#~ msgstr "Dáta scór"
-#~ msgid "karma score"
-#~ msgstr "Scór karma"
-#~ msgid "karma scores"
-#~ msgstr "Scóra karma"
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "%(score)d rátailte trí %(user)s"
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Bhí bratach curtha leis an nóta tráchta seo trí %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid "flag date"
-#~ msgstr "Dáta brait"
-#~ msgid "user flag"
-#~ msgstr "Brat úsáideoir"
-#~ msgid "user flags"
-#~ msgstr "Brait úsáideoira"
-#~ msgid "Flag by %r"
-#~ msgstr "Cuir brat leis roimh %r"
-#~ msgid "deletion date"
-#~ msgstr "Dáta scrioseadh"
-#~ msgid "moderator deletions"
-#~ msgstr "Scrios modhnóra"
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Scrios modhnóir trí %r"
-#~ msgid "Forgotten your password?"
-#~ msgstr "Dearmad déanta ar do focal faire?"
-#~ msgid "Ratings"
-#~ msgstr "Rátála"
-#~ msgid "Required"
-#~ msgstr "Riachtanach"
-#~ msgid "Optional"
-#~ msgstr "Roghnach"
-#~ msgid "Post a photo"
-#~ msgstr "Post griangraf"
-#~ msgid "Your name:"
-#~ msgstr "Do chuid ainm:"
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr ""
-#~ "Tá an rátáil seo ag teastail mar cuir tú rátáil amhain eile isteach ar a "
-#~ "laghad."
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)sThis comment was posted by a user who has posted fewer than %"
-#~ "(count)s comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Bhí an nóta tráchta póstailte trí úsáideoir a cuir níos lú ná %(count)s "
-#~ "nótaí tráchtaí\n"
-#~ "\n"
-#~ "%(text)sBhí an nóta tráchta póstailte trí úsáideoir a cuir níos lú ná %"
-#~ "(count)s nótaí tráchtaí\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "POSTs amhain ceadaithe"
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr ""
-#~ "Níor curtha isteach ceann amhain nó níos mó de na réimse riachtanach"
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr ""
-#~ "Cuir duine éigin isteach leis an foirm nóta tráchta (fadbh slándála)"
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "Bhí paraiméadar targaid mícheart ag an foirm nóta tráchta -- bhí ID an "
-#~ "oibiacht neamhbhailí"
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr "Níor sholáthair an foirm nóta tráchta 'réamhamharc' nó 'post'"
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Níl cead ag úsáideoira anaithnid vótáil"
-#~ msgid "Invalid comment ID"
-#~ msgstr "Nóta tráchta ID neamhbhailí"
-#~ msgid "No voting for yourself"
-#~ msgstr "Vótáil leat féin coiscthe"
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "Níl cás uachtair ceadaithe anseo."
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Cuir isteach r-phostanna bailí scartha le camóige."
-#~ msgid "Please enter a valid IP address."
-#~ msgstr "Le do thoil cuir isteach seoladh IP bailí."
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "Níl méideanna folmh ceadaithe anseo."
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "Níl ach uimhreacha ceadaithe anseo."
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Cathaigh níos mó ná digite amháin sa méid seo."
-#~ msgid "Gaeilge"
-#~ msgstr "Gaeilge"
-
diff --git a/parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 17cb0ee..0000000
--- a/parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 5838e85..0000000
--- a/parts/django/django/conf/locale/ga/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,156 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 23:57+0200\n"
-"PO-Revision-Date: 2010-05-10 16:34+0100\n"
-"Last-Translator: Michael Thornhill <michael@maithu.com>\n"
-"Language-Team: Gaeilge <ga@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "%s ar fáil"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Roghnaigh iomlán"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Cuir le"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Bain amach"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Roghnófar %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Roghnaigh do rogha agus cniog"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Glan iomlán"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s as %(cnt)s roghnaithe"
-msgstr[1] "%(sel)s as %(cnt)s roghnaithe"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Tá aithrithe nach bhfuil sabhailte ar chuid do na réimse. Má ritheann tú "
-"gníomh, caillfidh tú do chuid aithrithe."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Tá gníomh roghnaithe agat, ach níl do aithrithe sabhailte ar cuid de na "
-"réímse. Clic OK chun iad a sábháil. Caithfidh tú an gníomh a rith arís."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Tá gníomh roghnaithe agat, ach níl do aithrithe sabhailte ar cuid de na "
-"réímse. Is dócha go bhfuil tú ag iarraidh an cnaipe Té ná an cnaipe Sábháil."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Eanair Feabhra Márta Aibreán Bealtaine Meitheamh Iúil Lúnasa Mean Fómhair "
-"Deireadh Fómhair Nollaig"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M C D A S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Taispeán"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Folaigh"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Domhnaigh Luain Máirt Céadaoin Déardaoin Aoine Sathairn"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Anois"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Clog"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Roghnaigh am"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Meán oíche"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Nóin"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Cealaigh"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Inniu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Féilire"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Inné"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Amárach"
diff --git a/parts/django/django/conf/locale/ga/__init__.py b/parts/django/django/conf/locale/ga/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ga/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ga/formats.py b/parts/django/django/conf/locale/ga/formats.py
deleted file mode 100644
index f177bb2..0000000
--- a/parts/django/django/conf/locale/ga/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/gl/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/gl/LC_MESSAGES/django.mo
deleted file mode 100644
index 491d161..0000000
--- a/parts/django/django/conf/locale/gl/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/gl/LC_MESSAGES/django.po b/parts/django/django/conf/locale/gl/LC_MESSAGES/django.po
deleted file mode 100644
index f5db1f0..0000000
--- a/parts/django/django/conf/locale/gl/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,3028 +0,0 @@
-# Translation of django.po to Galego
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-05-28 12:56+0200\n"
-"PO-Revision-Date: 2007-05-28 17:29+0200\n"
-"Last-Translator: Afonso Fernández Nogueira <fonzzo.django@gmail.com>\n"
-"Language-Team: Galego\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Galician\n"
-"X-Poedit-SourceCharset: utf-8\n"
-
-#: conf/global_settings.py:39
-msgid "Arabic"
-msgstr "árabe"
-
-#: conf/global_settings.py:40
-msgid "Bengali"
-msgstr "bengalí"
-
-#: conf/global_settings.py:41
-msgid "Bulgarian"
-msgstr "búlgaro"
-
-#: conf/global_settings.py:42
-msgid "Catalan"
-msgstr "catalán"
-
-#: conf/global_settings.py:43
-msgid "Czech"
-msgstr "checo"
-
-#: conf/global_settings.py:44
-msgid "Welsh"
-msgstr "galés"
-
-#: conf/global_settings.py:45
-msgid "Danish"
-msgstr "dinamarqués"
-
-#: conf/global_settings.py:46
-msgid "German"
-msgstr "alemán"
-
-#: conf/global_settings.py:47
-msgid "Greek"
-msgstr "grego"
-
-#: conf/global_settings.py:48
-msgid "English"
-msgstr "inglés"
-
-#: conf/global_settings.py:49
-msgid "Spanish"
-msgstr "español"
-
-#: conf/global_settings.py:50
-msgid "Argentinean Spanish"
-msgstr "español de Arxentina"
-
-#: conf/global_settings.py:51
-msgid "Finnish"
-msgstr "finés"
-
-#: conf/global_settings.py:52
-msgid "French"
-msgstr "francés"
-
-#: conf/global_settings.py:53
-msgid "Galician"
-msgstr "galego"
-
-#: conf/global_settings.py:54
-msgid "Hungarian"
-msgstr "húngaro"
-
-#: conf/global_settings.py:55
-msgid "Hebrew"
-msgstr "hebreo"
-
-#: conf/global_settings.py:56
-msgid "Icelandic"
-msgstr "islandés"
-
-#: conf/global_settings.py:57
-msgid "Italian"
-msgstr "italiano"
-
-#: conf/global_settings.py:58
-msgid "Japanese"
-msgstr "xaponés"
-
-#: conf/global_settings.py:59
-msgid "Korean"
-msgstr "coreano"
-
-#: conf/global_settings.py:60
-msgid "Kannada"
-msgstr "canará"
-
-#: conf/global_settings.py:61
-msgid "Latvian"
-msgstr "letón"
-
-#: conf/global_settings.py:62
-msgid "Macedonian"
-msgstr "macedonio"
-
-#: conf/global_settings.py:63
-msgid "Dutch"
-msgstr "holandés"
-
-#: conf/global_settings.py:64
-msgid "Norwegian"
-msgstr "noruegués"
-
-#: conf/global_settings.py:65
-msgid "Polish"
-msgstr "polaco"
-
-#: conf/global_settings.py:66
-msgid "Portugese"
-msgstr "portugués"
-
-#: conf/global_settings.py:67
-msgid "Brazilian"
-msgstr "brasileiro"
-
-#: conf/global_settings.py:68
-msgid "Romanian"
-msgstr "romanés"
-
-#: conf/global_settings.py:69
-msgid "Russian"
-msgstr "ruso"
-
-#: conf/global_settings.py:70
-msgid "Slovak"
-msgstr "eslovaco"
-
-#: conf/global_settings.py:71
-msgid "Slovenian"
-msgstr "esloveno"
-
-#: conf/global_settings.py:72
-msgid "Serbian"
-msgstr "serbio"
-
-#: conf/global_settings.py:73
-msgid "Swedish"
-msgstr "sueco"
-
-#: conf/global_settings.py:74
-msgid "Tamil"
-msgstr "támil"
-
-#: conf/global_settings.py:75
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:76
-msgid "Turkish"
-msgstr "turco"
-
-#: conf/global_settings.py:77
-msgid "Ukrainian"
-msgstr "ucraíno"
-
-#: conf/global_settings.py:78
-msgid "Simplified Chinese"
-msgstr "chinés simplificado"
-
-#: conf/global_settings.py:79
-msgid "Traditional Chinese"
-msgstr "chinés tradicional"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Por %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
-msgid "All"
-msgstr "Todo"
-
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
-msgstr "Calquera data"
-
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
-msgstr "Hoxe"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
-msgstr "Últimos 7 días"
-
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
-msgstr "Este mes"
-
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
-msgstr "Este ano"
-
-#: contrib/admin/filterspecs.py:143 newforms/widgets.py:182
-#: oldforms/__init__.py:577
-msgid "Yes"
-msgstr "Si"
-
-#: contrib/admin/filterspecs.py:143 newforms/widgets.py:182
-#: oldforms/__init__.py:577
-msgid "No"
-msgstr "Non"
-
-#: contrib/admin/filterspecs.py:150 newforms/widgets.py:182
-#: oldforms/__init__.py:577
-msgid "Unknown"
-msgstr "Descoñecido"
-
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "hora da acción"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "id do obxecto"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "repr do obxecto"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "código do tipo de acción"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr "cambiar mensaxe"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "entrada de rexistro"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "entradas de rexistro"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Páxina non atopada"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Sentímolo, pero non se atopou a páxina solicitada."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/auth/user/change_password.html:12
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-msgid "Home"
-msgstr "Inicio"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Erro no servidor"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Erro no servidor (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Erro do servidor <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Houbo un erro. Xa se informou aos administradores do sitio por correo "
-"electrónico e debería quedar arranxado pronto. Grazas pola súa paciencia."
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "Benvido,"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Documentation"
-msgstr "Documentación"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "Cambiar contrasinal"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/comments/templates/comments/form.html:6
-msgid "Log out"
-msgstr "Rematar sesión"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Administración de sitio Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administración de Django"
-
-#: contrib/admin/templates/admin/change_form.html:15
-#: contrib/admin/templates/admin/index.html:28
-msgid "Add"
-msgstr "Engadir"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/object_history.html:5
-msgid "History"
-msgstr "Histórico"
-
-#: contrib/admin/templates/admin/change_form.html:22
-msgid "View on site"
-msgstr "Ver na web"
-
-#: contrib/admin/templates/admin/change_form.html:32
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Por favor, corrixa o erro de embaixo."
-msgstr[1] "Por favor, corrixa os erros de embaixo."
-
-#: contrib/admin/templates/admin/change_form.html:50
-msgid "Ordering"
-msgstr "Orde"
-
-#: contrib/admin/templates/admin/change_form.html:53
-msgid "Order:"
-msgstr "Orde:"
-
-#: contrib/admin/templates/admin/change_list.html:12
-#, python-format
-msgid "Add %(name)s"
-msgstr "Engadir %(name)s"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "Eliminar"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Borrar o %(object_name)s '%(escaped_object)s' resultaría na eliminación de elementos "
-"relacionados, pero a súa conta non ten permiso para borrar os seguintes "
-"tipos de elementos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Seguro que quere borrar o %(object_name)s \"%(escaped_object)s\"? Eliminaranse os "
-"seguintes obxectos relacionados:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "Si, estou seguro"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Por %(filter_title)s "
-
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "Filtro"
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelos dispoñíbeis na aplicación %(name)s."
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Modificar"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Non ten permiso para editar nada."
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Accións recentes"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "As miñas accións"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Ningunha dispoñíbel"
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Hai un problema coa súa instalación de base de datos. Asegúrese "
-"de que se creasen as táboas axeitadas na base de datos, e de que o usuario "
-"apropiado teña permisos para lela."
-
-#: contrib/admin/templates/admin/login.html:17
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-msgid "Username:"
-msgstr "Usuario:"
-
-#: contrib/admin/templates/admin/login.html:20
-#: contrib/comments/templates/comments/form.html:8
-msgid "Password:"
-msgstr "Contrasinal:"
-
-#: contrib/admin/templates/admin/login.html:25
-#: contrib/admin/views/decorators.py:24
-msgid "Log in"
-msgstr "Iniciar sesión"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "Data/hora"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "Usuario"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "Acción"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "j de N de Y, H:i"
-
-#: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Este obxecto non ten histórico de cambios. Posibelmente non se creou usando "
-"este sitio de administración."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Amosar todo"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Ir"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultado"
-msgstr[1] "%(counter)s resultados"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s en total"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Gardar coma novo"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Gardar e engadir outro"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Gardar e seguir editando"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Gardar"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "Primeiro insira un nome de usuario e un contrasinal. Despois poderá "
-"editar máis opcións de usuario."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "Usuario"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-msgid "Password"
-msgstr "Contrasinal"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-msgid "Password (again)"
-msgstr "Contrasinal (outra vez)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "Insira o mesmo contrasinal ca enriba para verificalo."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Insira un novo contrasinal para o usuario <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklets de documentación"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Para instalar bookmarklets, arrastre a ligazón á súa\n"
-"barra de favoritos ou marcadores, ou faga clic co botón dereito\n"
-"e engádao aos marcadores. Agora pode usar o bookmarklet dende\n"
-" calquera páxina do sitio web. Teña en conta que algúns destes\n"
-"bookmarklets precisan que estea a visitar o sitio dende un ordenador\n"
-"designado coma \"interno\" (fale co administrador do sistema se\n"
-"non está seguro de que o seu ordenador é \"interno\" .</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "Documentación para esta páxina"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "Salta á documentación para a vista que xera a páxina."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "Amosar ID do obxecto"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Amosa o tipo de contido e a ID única para páxinas que representan un obxecto "
-"determinado."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "Editar este obxecto (nesta fiestra)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Salta á páxina de administración para páxina que representan un obxecto "
-"determinado."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "Editar este obxecto (nunha nova fiestra)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr "Como enriba, pero abre a páxina de administración nunha nova fiestra."
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Grazas polo tempo que dedicou ao sitio web."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Entrar de novo"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Cambiar o contrasinal"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "O seu contrasinal cambiouse correctamente."
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Cambiouse o seu contrasinal."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Por razóns de seguridade, introduza o contrasinal actual. Despois introduza "
-"dúas veces o contrasinal para verificarmos que o escribiu correctamente."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Contrasinal actual:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "Contrasinal novo:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "Confirmar contrasinal:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "Cambiar o contrasinal"
-
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Recuperar o contrasinal"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "O contrasinal foi recuperado correctamente"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed a new password to the e-mail address you submitted. You "
-"should be receiving it shortly."
-msgstr ""
-"Acabamos de enviarlle un novo contrasinal ao enderezo de correo indicado. "
-"Debería recibilo en breve."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Recibe esta mensaxe porque solicitou recuperar o contrasinal"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "para a súa conta de usuario en %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "O seu novo contrasinal é: %(new_password)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Pode cambiar este contrasinal visitando esta páxina:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "No caso de que o esquecese, o seu nome de usuario é:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "Grazas por usar o noso sitio web!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "O equipo de %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll reset "
-"your password and e-mail the new one to you."
-msgstr ""
-"Esqueceu o contrasinal? Introduza o seu enderezo de correo electrónico "
-"embaixo e enviarémoslle un novo contrasinal."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Enderezo de correo electrónico:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Recuperar o meu contrasinal"
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Hora"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Agora:"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Modificar:"
-
-#: contrib/admin/templatetags/admin_list.py:249
-msgid "All dates"
-msgstr "Todas as datas"
-
-#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Engadiuse correctamente o/a %(name)s \"%(obj)s\"."
-
-#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261
-#: contrib/admin/views/main.py:347
-msgid "You may edit it again below."
-msgstr "Pode editalo embaixo."
-
-#: contrib/admin/views/auth.py:30
-msgid "Add user"
-msgstr "Engadir usuario"
-
-#: contrib/admin/views/auth.py:57
-msgid "Password changed successfully."
-msgstr "O contrasinal cambiouse correctamente."
-
-#: contrib/admin/views/auth.py:64
-#, python-format
-msgid "Change password: %s"
-msgstr "Cambiar contrasinal: %s"
-
-#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Insira un nome de usuario e un contrasinal correctos. Teña en conta que nos "
-"dous campos se distingue entre maiúsculas e minúsculas."
-
-#: contrib/admin/views/decorators.py:62
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Ten que identicarse outra vez porque a súa sesión expirou. Non se preocupe, "
-"o que enviou quedou gardado."
-
-#: contrib/admin/views/decorators.py:69
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Semella que o seu navegador non está configurado para aceptar 'cookies'. "
-"Por favor, habilite as 'cookies', recargue a páxina e ténteo de novo."
-
-#: contrib/admin/views/decorators.py:83
-msgid "Usernames cannot contain the '@' character."
-msgstr "Os nomes de usuario non poden conter o carácter '@'."
-
-#: contrib/admin/views/decorators.py:85
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"O seu enderezo de correo electrónico non é o seu nome de usuario. Probe con "
-"'%s'."
-
-#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-msgid "tag:"
-msgstr "etiqueta:"
-
-#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-msgid "filter:"
-msgstr "filtro:"
-
-#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-msgid "view:"
-msgstr "vista:"
-
-#: contrib/admin/views/doc.py:164
-#, python-format
-msgid "App %r not found"
-msgstr "Non se atopou a aplicación %r"
-
-#: contrib/admin/views/doc.py:171
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "Non se atopou o modelo %(name)r na aplicación %(label)r"
-
-#: contrib/admin/views/doc.py:183
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr "o obxecto `%(label)s.%(type)s` relacionado"
-
-#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
-#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
-msgid "model:"
-msgstr "modelo:"
-
-#: contrib/admin/views/doc.py:214
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "obxectos `%(label)s.%(name)s` relacionados"
-
-#: contrib/admin/views/doc.py:219
-#, python-format
-msgid "all %s"
-msgstr "todos os %s"
-
-#: contrib/admin/views/doc.py:224
-#, python-format
-msgid "number of %s"
-msgstr "número de %s"
-
-#: contrib/admin/views/doc.py:229
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Campos dos obxectos %s"
-
-#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302
-#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310
-#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313
-msgid "Integer"
-msgstr "Número enteiro"
-
-#: contrib/admin/views/doc.py:292
-msgid "Boolean (Either True or False)"
-msgstr "Valor booleano (verdadeiro ou falso)"
-
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "Cadea (ata %(maxlength)s caracteres)"
-
-#: contrib/admin/views/doc.py:294
-msgid "Comma-separated integers"
-msgstr "Números enteiros separados por comas"
-
-#: contrib/admin/views/doc.py:295
-msgid "Date (without time)"
-msgstr "Data (sen a hora)"
-
-#: contrib/admin/views/doc.py:296
-msgid "Date (with time)"
-msgstr "Data (coa hora)"
-
-#: contrib/admin/views/doc.py:297
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: contrib/admin/views/doc.py:298
-msgid "E-mail address"
-msgstr "Enderezo de correo electrónico"
-
-#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300
-#: contrib/admin/views/doc.py:303
-msgid "File path"
-msgstr "Ruta do ficheiro"
-
-#: contrib/admin/views/doc.py:301
-msgid "Floating point number"
-msgstr "Número de coma flotante"
-
-#: contrib/admin/views/doc.py:305 contrib/comments/models.py:85
-msgid "IP address"
-msgstr "Enderezo IP"
-
-#: contrib/admin/views/doc.py:307
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (verdadeiro, falso ou ningún)"
-
-#: contrib/admin/views/doc.py:308
-msgid "Relation to parent model"
-msgstr "Relación cun modelo pai"
-
-#: contrib/admin/views/doc.py:309
-msgid "Phone number"
-msgstr "Número de teléfono"
-
-#: contrib/admin/views/doc.py:314
-msgid "Text"
-msgstr "Texto"
-
-#: contrib/admin/views/doc.py:315
-msgid "Time"
-msgstr "Hora"
-
-#: contrib/admin/views/doc.py:316 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:317
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado dos Estados Unidos (dúas letras maiúsculas)"
-
-#: contrib/admin/views/doc.py:318
-msgid "XML text"
-msgstr "Texto XML"
-
-#: contrib/admin/views/doc.py:344
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s non semella ser un obxecto urlpattern"
-
-#: contrib/admin/views/main.py:223
-msgid "Site administration"
-msgstr "Administración do sitio web"
-
-#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
-#, python-format
-msgid "You may add another %s below."
-msgstr "Pode engadir outro/a %s embaixo."
-
-#: contrib/admin/views/main.py:289
-#, python-format
-msgid "Add %s"
-msgstr "Engadir %s"
-
-#: contrib/admin/views/main.py:335
-#, python-format
-msgid "Added %s."
-msgstr "Engadido/a %s."
-
-#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339 db/models/manipulators.py:308
-msgid "and"
-msgstr "e"
-
-#: contrib/admin/views/main.py:337
-#, python-format
-msgid "Changed %s."
-msgstr "Modificado(s) %s."
-
-#: contrib/admin/views/main.py:339
-#, python-format
-msgid "Deleted %s."
-msgstr "Eliminado(s) %s."
-
-#: contrib/admin/views/main.py:342
-msgid "No fields changed."
-msgstr "Non se modificou ningún campo."
-
-#: contrib/admin/views/main.py:345
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Modificouse correctamente o/a %(name)s \"%(obj)s\"."
-
-#: contrib/admin/views/main.py:353
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "Engadiuse correctamente o/a %(name)s \"%(obj)s\" Pode editalo embaixo."
-
-#: contrib/admin/views/main.py:391
-#, python-format
-msgid "Change %s"
-msgstr "Modificar %s"
-
-#: contrib/admin/views/main.py:476
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Un ou máis %(fieldname)s no/a %(name)s: %(obj)s"
-
-#: contrib/admin/views/main.py:481
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Un ou máis %(fieldname)s no/a %(name)s:"
-
-#: contrib/admin/views/main.py:514
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Eliminouse correctamente o/a %(name)s \"%(obj)s\"."
-
-#: contrib/admin/views/main.py:517
-msgid "Are you sure?"
-msgstr "Está seguro?"
-
-#: contrib/admin/views/main.py:539
-#, python-format
-msgid "Change history: %s"
-msgstr "Histórico de cambios: %s"
-
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s"
-msgstr "Seleccione un/ha %s"
-
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s to change"
-msgstr "Seleccione %s que modificar"
-
-#: contrib/admin/views/main.py:768
-msgid "Database error"
-msgstr "Erro da base de datos"
-
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
-msgid "The two password fields didn't match."
-msgstr "Os dous campos de contrasinal non coinciden."
-
-#: contrib/auth/forms.py:25
-msgid "A user with that username already exists."
-msgstr "Xa existe un usuario con ese nome de usuario."
-
-#: contrib/auth/forms.py:53
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Semella que o seu navegador non acepta 'cookies'. Requírense 'cookies' para "
-"iniciar sesión."
-
-#: contrib/auth/forms.py:62
-msgid "This account is inactive."
-msgstr "Esta conta está inactiva."
-
-#: contrib/auth/forms.py:85
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Este enderezo de correo electrónico non ten unha conta de usuario asociada. "
-"Está seguro de que está rexistrado?"
-
-#: contrib/auth/forms.py:117
-msgid "The two 'new password' fields didn't match."
-msgstr "Os dous campos 'contrasinal novo' non coinciden."
-
-#: contrib/auth/forms.py:124
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Inseriu incorrectamente o seu contrasinal actual. Por favor, insírao de novo."
-
-#: contrib/auth/models.py:44 contrib/auth/models.py:64
-msgid "name"
-msgstr "nome"
-
-#: contrib/auth/models.py:46
-msgid "codename"
-msgstr "código"
-
-#: contrib/auth/models.py:49
-msgid "permission"
-msgstr "permiso"
-
-#: contrib/auth/models.py:50 contrib/auth/models.py:65
-msgid "permissions"
-msgstr "permisos"
-
-#: contrib/auth/models.py:68
-msgid "group"
-msgstr "grupo"
-
-#: contrib/auth/models.py:69 contrib/auth/models.py:109
-msgid "groups"
-msgstr "grupos"
-
-#: contrib/auth/models.py:99
-msgid "username"
-msgstr "nome de usuario"
-
-#: contrib/auth/models.py:99
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Requirido. 30 caracteres ou menos. Soamente caracteres alfanuméricos "
-"(letras, díxitos ou guións baixos)."
-
-#: contrib/auth/models.py:100
-msgid "first name"
-msgstr "nome"
-
-#: contrib/auth/models.py:101
-msgid "last name"
-msgstr "apelidos"
-
-#: contrib/auth/models.py:102
-msgid "e-mail address"
-msgstr "enderezo de correo electrónico"
-
-#: contrib/auth/models.py:103
-msgid "password"
-msgstr "contrasinal"
-
-#: contrib/auth/models.py:103
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Use '[algo]$[salt]$[hexdigest]' ou utilice o <a href=\"password/\">formulario de "
-"cambio de contrasinal</a>."
-
-#: contrib/auth/models.py:104
-msgid "staff status"
-msgstr "membro do persoal"
-
-#: contrib/auth/models.py:104
-msgid "Designates whether the user can log into this admin site."
-msgstr "Indica se o usuario pode entrar neste sitio de administración."
-
-#: contrib/auth/models.py:105
-msgid "active"
-msgstr "activo"
-
-#: contrib/auth/models.py:105
-msgid ""
-"Designates whether this user can log into the Django admin. Unselect this "
-"instead of deleting accounts."
-msgstr "Indica se o usuario pode entrar na sección de administración. "
-"Desactíveo no canto de borrar contas de usuario."
-
-#: contrib/auth/models.py:106
-msgid "superuser status"
-msgstr "estatus de superusuario"
-
-#: contrib/auth/models.py:106
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Indica que este usuario ten todos os permisos sen asignarllos explicitamente."
-
-
-#: contrib/auth/models.py:107
-msgid "last login"
-msgstr "última sesión"
-
-#: contrib/auth/models.py:108
-msgid "date joined"
-msgstr "data de rexistro"
-
-#: contrib/auth/models.py:110
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Ademais dos permisos asignados manualmente, este usuario gozará de todos os "
-"permisos concedidos a cada un dos grupos aos que pertence."
-
-#: contrib/auth/models.py:111
-msgid "user permissions"
-msgstr "permisos de usuario"
-
-#: contrib/auth/models.py:115
-msgid "user"
-msgstr "usuario"
-
-#: contrib/auth/models.py:116
-msgid "users"
-msgstr "usuarios"
-
-#: contrib/auth/models.py:122
-msgid "Personal info"
-msgstr "Información persoal"
-
-#: contrib/auth/models.py:123
-msgid "Permissions"
-msgstr "Permisos"
-
-#: contrib/auth/models.py:124
-msgid "Important dates"
-msgstr "Datas importantes"
-
-#: contrib/auth/models.py:125
-msgid "Groups"
-msgstr "Grupos"
-
-#: contrib/auth/models.py:269
-msgid "message"
-msgstr "mensaxe"
-
-#: contrib/auth/models.py:282
-msgid "AnonymousUser"
-msgstr "UsuarioAnónimo"
-
-#: contrib/auth/views.py:40
-msgid "Logged out"
-msgstr "Rematou a sesión"
-
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
-msgid "object ID"
-msgstr "ID do obxecto"
-
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "título"
-
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "comentario"
-
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "valoración 1"
-
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "valoración 2"
-
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "valoración 3"
-
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "valoración 4"
-
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "valoración 5"
-
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "valoración 6"
-
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "valoración 7"
-
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "valoración 8"
-
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "é unha valoración válida"
-
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "data/hora do envío"
-
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
-msgid "is public"
-msgstr "é público"
-
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "está borrado"
-
-#: contrib/comments/models.py:86
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Marque esta caixa se o comentario non é apropiado. Verase a mensaxe \"Este "
-"comentario foi borrado\" no canto do seu contido."
-
-#: contrib/comments/models.py:91
-msgid "comments"
-msgstr "comentarios"
-
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
-msgid "Content object"
-msgstr "Obxecto de contido"
-
-#: contrib/comments/models.py:159
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Publicado por %(user)s o %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "nome da persoa"
-
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "enderezo IP"
-
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr "aprobado polos moderadores"
-
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "comentario libre"
-
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "comentarios libres"
-
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "puntuación"
-
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "data da puntuación"
-
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "puntos de karma"
-
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "puntos de karma"
-
-#: contrib/comments/models.py:242
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "puntuación de %(score)d por %(user)s"
-
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Este comentario foi marcado por %(user)s:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "data da marca"
-
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "marca de usuario"
-
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "marcas de usuario"
-
-#: contrib/comments/models.py:273
-#, python-format
-msgid "Flag by %r"
-msgstr "Marca por %r"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "data de borrado"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "borrado de moderador"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "borrados de moderador"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Borrado polo moderador %r"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "Esqueceu o contrasinal?"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Valoracións"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Requirido"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Opcional"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Publicar unha foto"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Comentario:"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "Previsualizar comentario"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "O seu nome:"
-
-#: contrib/comments/views/comments.py:27
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr "Requírese esta valoración porque vostede inseriu polo menos "
-"outra valoración."
-
-#: contrib/comments/views/comments.py:111
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] ""
-"Este comentario foi publicado por un usuario que ten publicados menos de %"
-"(count)s comentario:\n"
-"\n"
-"%(text)s"
-msgstr[1] ""
-"Este comentario foi publicado por un usuario que ten publicados menos de %"
-"(count)s comentarios:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:116
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Este comentario foi enviado por un usuario conflitivo:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:188
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "Soamente se permiten envíos polo método POST"
-
-#: contrib/comments/views/comments.py:192
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Non se enviaron un ou máis dos campos requiridos"
-
-#: contrib/comments/views/comments.py:196
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Alguén manipulou o formulario do comentario (violación de seguridade)"
-
-#: contrib/comments/views/comments.py:206
-#: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-"O formulario do comentario tiña un parámetro 'target' non válido: a ID do "
-"obxecto non é válida"
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "O formulario de comentario non proporciona 'preview' ou 'post'"
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "Os usuarios anónimos non poden votar"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "ID de comentario non válida"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "Vostede non se pode votar a si mesmo"
-
-#: contrib/contenttypes/models.py:36
-msgid "python model class name"
-msgstr "nome do módulo Python"
-
-#: contrib/contenttypes/models.py:39
-msgid "content type"
-msgstr "tipo de contido"
-
-#: contrib/contenttypes/models.py:40
-msgid "content types"
-msgstr "tipos de contido"
-
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Exemplo: '/about/contact/'. Lembre incluír as barras ao principio e ao final."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "título"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "contido"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "activar comentarios"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "nome da plantilla"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Exemplo: 'flatpages/contact_page.html'. Se non se especifica, o sistema usará "
-"'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "require rexistro"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Se se marca, só poderán ver a páxina os usuarios identificados."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "páxina simple"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "páxinas simples"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "th"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "st"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "nd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "rd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:47
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f millón"
-msgstr[1] "%(value).1f millóns"
-
-#: contrib/humanize/templatetags/humanize.py:50
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f mil millóns"
-msgstr[1] "%(value).1f miles de millóns"
-
-#: contrib/humanize/templatetags/humanize.py:53
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billón"
-msgstr[1] "%(value).1f billóns"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "one"
-msgstr "un"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "two"
-msgstr "dous"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "three"
-msgstr "tres"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "four"
-msgstr "catro"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "five"
-msgstr "cinco"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "six"
-msgstr "seis"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "seven"
-msgstr "sete"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "eight"
-msgstr "oito"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "nine"
-msgstr "nove"
-
-#: contrib/localflavor/au/forms.py:18
-msgid "Enter a 4 digit post code."
-msgstr "Insira un código postal de 4 díxitos."
-
-#: contrib/localflavor/br/forms.py:18
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Insira un código postal no formato XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-"Os números de teléfono deben estar no formato XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:72
-msgid "This field requires only numbers."
-msgstr "Este campo soamente admite números."
-
-#: contrib/localflavor/br/forms.py:74
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Este campo acepta como máximo 11 díxitos ou 14 caracteres."
-
-#: contrib/localflavor/br/forms.py:84
-msgid "Invalid CPF number."
-msgstr "Número de CPF non válido."
-
-#: contrib/localflavor/br/forms.py:106
-msgid "This field requires at least 14 digits"
-msgstr "Este campo require polo menos 14 díxitos."
-
-#: contrib/localflavor/br/forms.py:116
-msgid "Invalid CNPJ number."
-msgstr "Número de CNPJ non válido"
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Argovia"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Interior"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Exterior"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basilea-Cidade"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basilea-Campo"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berna"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Friburgo"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Xenebra"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Grisóns"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Xura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerna"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwald"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwald"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Soleura"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "San Galo"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Turgovia"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Tesino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:18 contrib/localflavor/no/forms.py:15
-msgid "Enter a zip code in the format XXXX."
-msgstr "Insira un código posttal no formato XXXX."
-
-#: contrib/localflavor/ch/forms.py:90
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr "Insira un número válido de tarxeta de identidade ou pasaporte no "
-"formato X1234567<0 ou 1234567890."
-
-#: contrib/localflavor/cl/forms.py:21
-msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Insira un RUT chileno válido. O formato é XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:26
-msgid "Enter valid a Chilean RUT"
-msgstr "Insira un RUT chileno válido."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Baviera"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlín"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandemburgo"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburgo"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hesse"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklemburgo-Pomerania Occidental"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Baixa Saxonia"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Renania do Norte-Westfalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Renania-Palatinado"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Sarre"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxonia"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxonia-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Turinxia"
-
-#: contrib/localflavor/de/forms.py:16 contrib/localflavor/fi/forms.py:14
-#: contrib/localflavor/fr/forms.py:17
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Insira un código postal no formato XXXXX"
-
-#: contrib/localflavor/de/forms.py:60
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr "Insira un número válido de tarxeta de identidade alemá no formato "
-"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45
-msgid "Enter a valid Finnish social security number."
-msgstr "Insira un número válido de tarxeta da seguridade social finlandesa."
-
-#: contrib/localflavor/is_/forms.py:16
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Insira un número de identificación islandés válido. O formato é XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:30
-msgid "The Icelandic identification number is not valid."
-msgstr "O número de identificación islandés non é válido."
-
-#: contrib/localflavor/it/forms.py:16
-msgid "Enter a valid zip code."
-msgstr "Insira un código postal válido."
-
-#: contrib/localflavor/it/forms.py:41
-msgid "Enter a valid Social Security number."
-msgstr "Insira un número da seguridade social válido."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Insira un número de IVE válido."
-
-#: contrib/localflavor/jp/forms.py:21
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Insira un código postal no formato XXXXXXX ou XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaidō"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Toquio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kioto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyōgo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kōchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Ōita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/no/forms.py:36
-msgid "Enter a valid Norwegian social security number."
-msgstr "Insira un número válida da seguridade social norueguesa."
-
-#: contrib/localflavor/uk/forms.py:18
-msgid "Enter a postcode. A space is required between the two postcode parts."
-msgstr "Insira un código postal. Requírese un espazo entre as dúas partes do código postal."
-
-#: contrib/localflavor/us/forms.py:18
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Insira un código postal no formato XXXXX ou XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:51
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Insira un número válido da seguridade social dos Estados Unidos no formato XXX-XX-XXXX."
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "orixe da redirección"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Debe ser unha ruta absoluta, sen o nome de dominio. Exemplo: '/events/"
-"search/'"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "destino da redirección"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Pode ser unha ruta absoluta (coma a de enriba) ou un URL completo que empece "
-"por 'http://'"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redirección"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redireccións"
-
-#: contrib/sessions/models.py:68
-msgid "session key"
-msgstr "clave da sesión"
-
-#: contrib/sessions/models.py:69
-msgid "session data"
-msgstr "datos da sesión"
-
-#: contrib/sessions/models.py:70
-msgid "expire date"
-msgstr "data de caducidade"
-
-#: contrib/sessions/models.py:74
-msgid "session"
-msgstr "sesión"
-
-#: contrib/sessions/models.py:75
-msgid "sessions"
-msgstr "sesións"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "dominio"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "nome"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "sitio"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "sitios"
-
-#: core/validators.py:65
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Este valor soamente pode conter letras, números e guións baixos (_)."
-
-#: core/validators.py:69
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Este valor soamente pode conter letras, números, guións baixos (_), guións "
-"(-) e barras inclinadas (/)."
-
-#: core/validators.py:73
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr ""
-"Este valor soamente pode conter letras, números, guións baixos (_) e guións."
-
-#: core/validators.py:77
-msgid "Uppercase letters are not allowed here."
-msgstr "Non se permiten letras maiúsculas."
-
-#: core/validators.py:81
-msgid "Lowercase letters are not allowed here."
-msgstr "Non se permiten letras minúsculas."
-
-#: core/validators.py:88
-msgid "Enter only digits separated by commas."
-msgstr "Insira só díxitos separados por comas."
-
-#: core/validators.py:100
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Insira enderezos de correo elecrónico válidos separados por comas."
-
-#: core/validators.py:104
-msgid "Please enter a valid IP address."
-msgstr "Insira un enderezo IP válido."
-
-#: core/validators.py:108
-msgid "Empty values are not allowed here."
-msgstr "Non se permiten valores en branco."
-
-#: core/validators.py:112
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Non se permiten caracteres non númericos."
-
-#: core/validators.py:116
-msgid "This value can't be comprised solely of digits."
-msgstr "Este valor non pode estar composto por díxitos soamente."
-
-#: core/validators.py:121 newforms/fields.py:135
-msgid "Enter a whole number."
-msgstr "Insira un número enteiro."
-
-#: core/validators.py:125
-msgid "Only alphabetical characters are allowed here."
-msgstr "Soamente se permiten caracteres do alfabeto."
-
-#: core/validators.py:140
-msgid "Year must be 1900 or later."
-msgstr "O ano debe ser 1900 ou posterior."
-
-#: core/validators.py:144
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Data non válida: %s"
-
-#: core/validators.py:149 db/models/fields/__init__.py:463
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Insira unha data válida en formato AAAA-MM-DD."
-
-#: core/validators.py:154
-msgid "Enter a valid time in HH:MM format."
-msgstr "Insira unha hora válida en formato HH:MM."
-
-#: core/validators.py:158 db/models/fields/__init__.py:532
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Insira unha data/hora válida en formato AAAA-MM-DD HH:MM."
-
-#: core/validators.py:163 newforms/fields.py:339
-msgid "Enter a valid e-mail address."
-msgstr "Insira un enderezo de correo electrónico válido."
-
-#: core/validators.py:175 core/validators.py:453 oldforms/__init__.py:672
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Non se enviou ficheiro ningún. Comprobe o tipo de codificación do formulario."
-
-#: core/validators.py:179
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Suba unha imaxe válida. O ficheiro subido non era unha imaxe ou esta estaba "
-"corrupta."
-
-#: core/validators.py:186
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "O URL %s non apunta a unha imaxe válida."
-
-#: core/validators.py:190
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Os números de teléfono deben estar no formato XXX-XXX-XXXX. \"%s\" non é "
-"válido."
-
-#: core/validators.py:198
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "O URL %s non apunta a unha vídeo QuickTime válido."
-
-#: core/validators.py:202
-msgid "A valid URL is required."
-msgstr "Precísase un URL válido."
-
-#: core/validators.py:216
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Precísase HTML válido. Os erros específicos son estes:\n"
-"%s"
-
-#: core/validators.py:223
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "XML mal formado: %s"
-
-#: core/validators.py:240
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL non válido: %s"
-
-#: core/validators.py:245 core/validators.py:247
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "O URL %s é unha ligazón rota."
-
-#: core/validators.py:253
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Insira unha abreviatura estatal válida para os Estados Unidos."
-
-#: core/validators.py:267
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Sen palabrotas, por favor! Aquí non se pode usar a palabra %s."
-msgstr[1] "Sen palabrotas, por favor! Aquí non se poden usar as palabras %s."
-
-#: core/validators.py:274
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Este campo ten que coincidir co campo '%s'."
-
-#: core/validators.py:293
-msgid "Please enter something for at least one field."
-msgstr "Por favor, encha polo menos un campo."
-
-#: core/validators.py:302 core/validators.py:313
-msgid "Please enter both fields or leave them both empty."
-msgstr "Por favor, encha os dous campos ou deixe ambos en branco."
-
-#: core/validators.py:321
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Débese encher este campo se %(field)s é %(value)s"
-
-#: core/validators.py:334
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Este campo débese encher se %(field)s non é %(value)s"
-
-#: core/validators.py:353
-msgid "Duplicate values are not allowed."
-msgstr "Non se permiten valores duplicados."
-
-#: core/validators.py:368
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Este valor ten que estar comprendido entre %(lower)s e %(upper)s."
-
-#: core/validators.py:370
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Este valor ten que ser polo menos %s."
-
-#: core/validators.py:372
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Este valor non pode ser superior a %s."
-
-#: core/validators.py:408
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Este valor ten que ser unha potencia de %s."
-
-#: core/validators.py:417
-msgid "Please enter a valid decimal number."
-msgstr "Insira un número decimal válido."
-
-#: core/validators.py:423
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Insira un número decimal válido cun máximo de %s díxito en total."
-msgstr[1] "Insira un número decimal válido cun máximo de %s díxitos en total."
-
-#: core/validators.py:426
-#, python-format
-msgid ""
-"Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural ""
-"Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "Insira un número decimal válido cunha parte enteira de como máximo %s díxito."
-msgstr[1] "Insira un número decimal válido cunha parte enteira de como máximo %s díxitos."
-
-#: core/validators.py:429
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Insira un número decimal válido cun máximo de %s lugar decimal."
-msgstr[1] "Insira un número decimal válido cun máximo de %s lugares decimais."
-
-#: core/validators.py:437
-msgid "Please enter a valid floating point number."
-msgstr "Insira un número de coma flotante válido."
-
-#: core/validators.py:446
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Verifique que o ficheiro subido ten un tamaño mínimo de %s bytes."
-
-#: core/validators.py:447
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Verifique que o ficheiro subido ten un tamaño máximo de %s bytes."
-
-#: core/validators.py:464
-msgid "The format for this field is wrong."
-msgstr "O formato deste campo é incorrecto."
-
-#: core/validators.py:479
-msgid "This field is invalid."
-msgstr "Este campo non é válido."
-
-#: core/validators.py:515
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Non se puido recibir ningún dato de %s."
-
-#: core/validators.py:518
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"O URL %(url)s devolveu a cabeceira Content-Type non válida '%(contenttype)s'."
-
-#: core/validators.py:551
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Por favor, peche a etiqueta %(tag)s da liña %(line)s. (A liña comeza con \"%"
-"(start)s\")."
-
-#: core/validators.py:555
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Algún texto a partir da liña %(line)s non é válido nese contexto. (A liña "
-"comeza con \"%(start)s\")."
-
-#: core/validators.py:560
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"%(attr)s\" na liña %(line)s non é un atributo válido. (A liña comeza con "
-"\"%(start)s\")."
-
-#: core/validators.py:565
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"<%(tag)s>\" na liña %(line)s non é unha etiqueta válida. (A liña comeza "
-"con \"%(start)s\")."
-
-#: core/validators.py:569
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Falta un o máis dos atributos requiridos para unha etiqueta da liña %(line)"
-"s. (A liña comeza con \"%(start)s\")."
-
-#: core/validators.py:574
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"O atributo \"%(attr)s\" na liña %(line)s contén un valor non válido. (A liña "
-"comeza con \"%(start)s\")."
-
-#: db/models/manipulators.py:307
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-"Xa existe un obxecto %(object)s con este %(type)s para o campo %(field)s."
-
-#: db/models/fields/__init__.py:46
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "Xa existe un/ha %(optname)s con este/a %(fieldname)s."
-
-#: db/models/fields/__init__.py:121 db/models/fields/__init__.py:278
-#: db/models/fields/__init__.py:675 db/models/fields/__init__.py:686
-#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:520
-#: newforms/fields.py:531 newforms/models.py:186 oldforms/__init__.py:357
-msgid "This field is required."
-msgstr "Requírese este campo."
-
-#: db/models/fields/__init__.py:373
-msgid "This value must be an integer."
-msgstr "Este valor ten que ser un número enteiro."
-
-#: db/models/fields/__init__.py:408
-msgid "This value must be either True or False."
-msgstr "Este valor ten que verdadeiro ou falso."
-
-#: db/models/fields/__init__.py:429
-msgid "This field cannot be null."
-msgstr "Este campo non pode ser nulo."
-
-#: db/models/fields/__init__.py:592
-msgid "This value must be a decimal number."
-msgstr "Este valor ten que ser un número decimal."
-
-#: db/models/fields/__init__.py:695
-msgid "Enter a valid filename."
-msgstr "Introduza un nome de ficheiro válido."
-
-#: db/models/fields/__init__.py:818
-msgid "This value must be either None, True or False."
-msgstr "Este valor ten que verdadeiro, falso ou nulo."
-
-#: db/models/fields/related.py:53
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Insira un %s válido/a."
-
-#: db/models/fields/related.py:642
-msgid "Separate multiple IDs with commas."
-msgstr "Separe varias IDs con comas."
-
-#: db/models/fields/related.py:644
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Para seleccionar máis dunha entrada, manteña premida a tecla \"Control\", "
-"ou \"Comando\" nun Mac."
-
-#: db/models/fields/related.py:691
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Insira IDs de %(self)s válidas. O valor %(value)r non é válido."
-msgstr[1] ""
-"Insira IDs de %(self)s válidas. Os valores %(value)r non son válidos."
-
-#: newforms/fields.py:110 newforms/fields.py:324
-#, python-format
-msgid "Ensure this value has at most %d characters."
-msgstr "Asegúrese de que este valor ten como máximo %d caracteres."
-
-#: newforms/fields.py:112 newforms/fields.py:326
-#, python-format
-msgid "Ensure this value has at least %d characters."
-msgstr "Asegúrese de que este valor ten polo menos %d caracteres."
-
-#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Asegúrese de que este valor é menor ou igual a %s."
-
-#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Asegúrese de que este valor é maior ou igual a %s"
-
-#: newforms/fields.py:158 newforms/fields.py:186
-msgid "Enter a number."
-msgstr "Insira un número."
-
-#: newforms/fields.py:196
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Asegñurese de que non hai máis de %s díxitos en total."
-
-#: newforms/fields.py:198
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Asegúrese de que non hai máis de %s lugares decimais."
-
-#: newforms/fields.py:200
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Asegúrese de que no hai máis de %s díxitos antes do punto ou coma decimal."
-
-#: newforms/fields.py:233
-msgid "Enter a valid date."
-msgstr "Insira unha data válida."
-
-#: newforms/fields.py:260
-msgid "Enter a valid time."
-msgstr "Insira unha hora válida."
-
-#: newforms/fields.py:296
-msgid "Enter a valid date/time."
-msgstr "Insira unha data/hora válida."
-
-#: newforms/fields.py:310
-msgid "Enter a valid value."
-msgstr "Insira un valor válido."
-
-#: newforms/fields.py:357 newforms/fields.py:379
-msgid "Enter a valid URL."
-msgstr "Insira un URL válido."
-
-#: newforms/fields.py:381
-msgid "This URL appears to be a broken link."
-msgstr "Semella que este URL é unha ligazón rota."
-
-#: newforms/fields.py:432 newforms/models.py:173
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Escolla unha opción válida. Esta opción non se atopa entre as opcións dispoñíbeis"
-
-#: newforms/fields.py:448 newforms/fields.py:524 newforms/models.py:190
-msgid "Enter a list of values."
-msgstr "Insira unha lista de valores."
-
-#: newforms/fields.py:457 newforms/models.py:196
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Escolla unha opción válida. %s non se atopa entre as opcións dispoñíbeis."
-
-#: oldforms/__init__.py:392
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Asegúrese de que o seu texto contén menos de %s carácter."
-msgstr[1] "Asegúrese de que o seu texto contén menos de %s caracteres."
-
-#: oldforms/__init__.py:397
-msgid "Line breaks are not allowed here."
-msgstr "Aquí non se permiten saltos de liña."
-
-#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Elixa unha opción válida; '%(data)s' non está en %(choices)s."
-
-#: oldforms/__init__.py:674
-msgid "The submitted file is empty."
-msgstr "O ficheiro enviado está baleiro."
-
-#: oldforms/__init__.py:730
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Insira un número enteiro entre -32.768 e 32.767."
-
-#: oldforms/__init__.py:740
-msgid "Enter a positive number."
-msgstr "Insira un número positivo."
-
-#: oldforms/__init__.py:750
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Insira un número enteiro entre 0 e 32.767."
-
-#: template/defaultfilters.py:491
-msgid "yes,no,maybe"
-msgstr "si,non,quizais"
-
-#: template/defaultfilters.py:520
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:522
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:524
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:525
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:40
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:41
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:46
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:47
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:95
-msgid "midnight"
-msgstr "medianoite"
-
-#: utils/dateformat.py:97
-msgid "noon"
-msgstr "mediodía"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "luns"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "martes"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "mércores"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "xoves"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "venres"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "sábado"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "domingo"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "xaneiro"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "febreiro"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
-msgstr "marzo"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
-msgstr "abril"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
-msgstr "maio"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
-msgstr "xuño"
-
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
-msgstr "xullo"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "agosto"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "setembro"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "outubro"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "novembro"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "decembro"
-
-#: utils/dates.py:19
-msgid "jan"
-msgstr "xan"
-
-#: utils/dates.py:19
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:19
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:19
-msgid "apr"
-msgstr "abr"
-
-#: utils/dates.py:19
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:19
-msgid "jun"
-msgstr "xuñ"
-
-#: utils/dates.py:20
-msgid "jul"
-msgstr "xul"
-
-#: utils/dates.py:20
-msgid "aug"
-msgstr "ago"
-
-#: utils/dates.py:20
-msgid "sep"
-msgstr "set"
-
-#: utils/dates.py:20
-msgid "oct"
-msgstr "out"
-
-#: utils/dates.py:20
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:20
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "xan."
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "ago."
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "set."
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "out."
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "dec."
-
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "ano"
-msgstr[1] "anos"
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mes"
-msgstr[1] "meses"
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "semana"
-msgstr[1] "semanas"
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "día"
-msgstr[1] "días"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "horas"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minutos"
-
-#: utils/timesince.py:40
-#, python-format
-msgid "%d milliseconds"
-msgstr "%d milisegundos"
-
-#: utils/timesince.py:41
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:47
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:358
-msgid "DATE_FORMAT"
-msgstr "d-m-Y"
-
-#: utils/translation/trans_real.py:359
-msgid "DATETIME_FORMAT"
-msgstr "d-m-Y H:i"
-
-#: utils/translation/trans_real.py:360
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:376
-msgid "YEAR_MONTH_FORMAT"
-msgstr "m Y"
-
-#: utils/translation/trans_real.py:377
-msgid "MONTH_DAY_FORMAT"
-msgstr "d m"
-
-#: views/generic/create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Creouse correctamente o/a %(verbose_name)s ."
-
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Actualizouse correctamente o/a %(verbose_name)s."
-
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Eliminouse o/a %(verbose_name)s"
-
-#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-#~ msgstr "<a href=\"/password_reset/\">Esqueceu o contrasinal</a>?"
-
-#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
-#~ msgstr "Use '[algo]$[salt]$[hexdigest]'"
-
-#~ msgid "Comment"
-#~ msgstr "Comentario"
-
-#~ msgid "Comments"
-#~ msgstr "Comentarios"
-
-#~ msgid "String (up to 50)"
-#~ msgstr "Cadea (ata 50 caracteres)"
-
-#~ msgid "label"
-#~ msgstr "etiqueta"
-
-#~ msgid "package"
-#~ msgstr "paquete"
-
-#~ msgid "packages"
-#~ msgstr "paquetes"
diff --git a/parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index fcb6976..0000000
--- a/parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 9d273db..0000000
--- a/parts/django/django/conf/locale/gl/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,109 +0,0 @@
-# Translation of djangojs.po to Galego.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2005-07-02 13:25+0200\n"
-"Last-Translator: Afonso Fernández Nogueira <fonzzo.django@gmail.com>\n"
-"Language-Team: Galego\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s dispoñíbeis"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Escoller todo"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Engadir"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Quitar"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s escollido/a(s)"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Seleccione unha ou varias entrada e faga clic "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Quitar todo"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"xaneiro febreiro marzo abril maio xuño xullo agosto setembro outubro novembro "
-"decembro"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "domingo luns martes mércores xoves venres sábado"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M M X V S"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "Agora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "Reloxo"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "Escolla unha hora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "Medianoite"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "6 da mañá"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "Mediodía"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "Hoxe"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "Calendario"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "Onte"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "Mañá"
diff --git a/parts/django/django/conf/locale/gl/__init__.py b/parts/django/django/conf/locale/gl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/gl/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/gl/formats.py b/parts/django/django/conf/locale/gl/formats.py
deleted file mode 100644
index e0a95d5..0000000
--- a/parts/django/django/conf/locale/gl/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M, Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/he/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/he/LC_MESSAGES/django.mo
deleted file mode 100644
index 4d7ffe0..0000000
--- a/parts/django/django/conf/locale/he/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/he/LC_MESSAGES/django.po b/parts/django/django/conf/locale/he/LC_MESSAGES/django.po
deleted file mode 100644
index 50ae4f8..0000000
--- a/parts/django/django/conf/locale/he/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5064 +0,0 @@
-# translation of Django.
-# Copyright (C) 2008 The Django Project
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 12:15+0200\n"
-"PO-Revision-Date: 2010-05-09 15:10-0500\n"
-"Last-Translator: Alex <alex.gaynor@gmail.com>\n"
-"Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-Bookmarks: -1,988,-1,-1,-1,-1,-1,-1,-1,-1\n"
-"X-Generator: Lokalize 1.0\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "ערבית"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "בולגרית"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "בנגאלית"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "בוסנית"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "קאטלונית"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "צ'כית"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "וולשית"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "דנית"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "גרמנית"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "יוונית"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "אנגלית"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "אנגלית בריטית"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "ספרדית"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "ספרדית ארגנטינאית"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "אסטונית"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "בסקית"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "פרסית"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "פינית"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "צרפתית"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "פריזית"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "אירית"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "גאליציאנית"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "עברית"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "הינדי"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "קרואטית"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "הונגרית"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "אינדונזית"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "איסלנדית"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "איטלקית"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "יפנית"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "גיאורגית"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "חמר"
-
-# זו שפה הודית, אין קשר לקנדה המדינה
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "קאנאדה"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "קוריאנית"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "ליטאית"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "לטבית"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "מקדונית"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "מונגולי"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "הולנדית"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "נורווגית"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "נורבגית ספרותית"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "נורבגית חדשה"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "פולנית"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "פורטוגזית"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "פורטוגזית ברזילאית"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "רומנית"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "רוסית"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "סלובקית"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "סלובנית"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "אלבנית"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "סרבית"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "סרבית לטינית"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "שוודית"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "טמילית"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "טלגו"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "תאילנדית"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "טורקית"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "אוקראינית"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "וייטנאמית"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "סינית פשוטה"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "סינית מסורתית"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d %(items)s נמחקו בהצלחה."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "האם את/ה בטוח/ה ?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "מחק %(verbose_name_plural)s שנבחרו"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>ע\"י %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "הכל"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "כל תאריך"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "היום"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "בשבוע האחרון"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "החודש"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "השנה"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "כן"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "לא"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "לא ידוע"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "פעולה"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "זמן פעולה"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "מזהה אובייקט"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "ייצוג אובייקט"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "דגל פעולה"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "הערה לשינוי"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "רישום יומן"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "רישומי יומן"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "ללא"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "%s שונה."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "ו"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "התווסף %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "שונה %(list)s עבור %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "נמחק %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "אף שדה לא השתנה."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "ניתן לערוך שוב מתחת"
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "ניתן להוסיף %s נוסף מתחת."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "שינוי %(name)s \"%(obj)s\" בוצע בהצלחה."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה. ניתן לערוך אותו שוב מתחת."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr "יש לסמן פריטים כדי לבצע עליהם פעולות. לא שונו פריטים."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "לא נבחרה פעולה."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "הוספת %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "הפריט %(name)s עם המפתח הראשי %(key)r אינו קיים."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "שינוי %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "שגיאת בסיס נתונים"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "שינוי %(count)s %(name)s בהצלחה."
-msgstr[1] "שינוי %(count)s %(name)s בהצלחה."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s נבחר"
-msgstr[1] "כל ה־%(total_count)s נבחרו"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 מ %(cnt)s נבחרות"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "מחיקת %(name)s \"%(obj)s\" בוצעה בהצלחה."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "היסטוריית שינוי: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"נא להזין שם משתמש וסיסמה נכונים. בשני השדות גודל האותיות האנגליות משנה."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "עליך להתחבר שנית כי פג הזמן המוקצב לך."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"נראה שהדפדפן שלך אינו מוגדר לקבל עוגיות. נא לאפשר עוגיות, לטעון מחדש את הדף "
-"ולנסות שוב."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "שם משתמש אינו יכול להכיל את התו '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "כתובת הדוא\"ל שלך אינה שם המשתמש שלך. נסה/י '%s' במקום."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "ניהול אתר"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "כניסה"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "ניהול %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "תאריך:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "שעה:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "הנוכחי:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "שינוי:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "חפש"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "הוסף עוד אחת"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "דף לא קיים"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "אנו מצטערים, לא ניתן למצוא את הדף המבוקש."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "דף הבית"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "שגיאת שרת"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "שגיאת שרת (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "שגיאת שרת <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "הפעל את הפעולה שבחרת בה."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "בצע"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "לחיצה כאן תבחר את האובייקטים בכל העמודים"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "בחירת כל %(total_count)s ה־%(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "איפוס בחירה"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "שלום,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "תיעוד"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "שינוי סיסמה"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "יציאה"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "ניהול אתר Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "ניהול Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "הוספה"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "היסטוריה"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "צפיה באתר"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "נא לתקן את השגיאה המופיעה מתחת."
-msgstr[1] "נא לתקן את השגיאות המופיעות מתחת."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "הוספת %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "סינון"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "מחיקה"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"מחיקת %(object_name)s '%(escaped_object)s' מצריכה מחיקת אובייקטים מקושרים, "
-"אך לחשבון שלך אין הרשאות למחיקת סוגי האובייקטים הבאים:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"האם ברצונך למחוק את %(object_name)s \"%(escaped_object)s\"? כל הפריטים "
-"הקשורים הבאים יימחקו:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "כן, אני בטוח/ה"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "מחק כמה פריטים"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"מחיקת %(object_name)s מצריכה מחיקת אובייקטים מקושרים, אך לחשבון שלך אין "
-"הרשאות למחיקת סוגי האובייקטים הבאים:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"האם אתה בטוח שאתה רוצה למחוק את פריטי ה %(object_name)s שנבחרו. כל הפריטים "
-"הבאים והחומר הנלווה אליהם יימחקו."
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " לפי %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "מודלים זמינים ביישום %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "שינוי"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "אין לך הרשאות לעריכה."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "פעולות אחרונות"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "הפעולות שלי"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "לא נמצאו"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "תוכן לא ידוע"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"משהו שגוי בהתקנת בסיס הנתונים שלך. נא לוודא שנוצרו טבלאות בסיס הנתונים "
-"המתאימות, ובסיס הנתונים ניתן לקריאה על ידי המשתמש המתאים."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "שם משתמש:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "סיסמה:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "תאריך/שעה"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "משתמש"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "פעולה"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול הזה להוספתו."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "הצג הכל"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "שמירה"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "חיפוש"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "תוצאה אחת"
-msgstr[1] "%(counter)s תוצאות"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s סה\"כ"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "שמירה כחדש"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "שמירה והוספת אחר"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "שמירה והמשך עריכה"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"ראשית יש להזין שם משתמש וסיסמה. לאחר מכן יהיה ביכולתך לערוך אפשרויות נוספות "
-"עבור המשתמש."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "יש להזין סיסמה חדשה עבור המשתמש <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "סיסמה"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "סיסמה (שוב)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "יש להזין את אותה סיסמה שוב,לאימות."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "הוספת %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "להסיר"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "מחיקה ?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "תודה על בילוי זמן איכות עם האתר."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "התחבר/י שוב"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "שינוי סיסמה"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "הסיסמה שונתה בהצלחה"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "סיסמתך שונתה."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"נא להזין את סיסמתך הישנה, לצרכי אבטחה, ולאחר מכן את סיסמתך החדשה פעמיים כדי "
-"שנוכל לוודא שהקלדת אותה כראוי."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "סיסמה ישנה"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "סיסמה חדשה"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "שנה את סיסמתי"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "איפוס סיסמה"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "איפוס הסיסמה הושלם"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "ססמתך נשמרה. כעת ניתן להתחבר."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "אימות איפוס סיסמה"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "הזנת סיסמה חדשה"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "נא להזין את סיסמתך החדשה פעמיים כדי שנוכל לוודא שהקלדת אותה כראוי."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "סיסמה חדשה:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "אימות סיסמה:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "איפוס הסיסמה נכשל"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"הקישור לאיפוס הסיסמה אינו חוקי. ייתכן והשתמשו בו כבר. נא לבקש איפוס סיסמה "
-"חדש."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "הסיסמה אופסה בהצלחה"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"שלחנו הוראות לקביעת הסיסמה אל כתובת הדוא\"ל שהזנת. ההודעה אמורה להתקבל בקרוב."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "הודעה זו התקבלה כי ביקשת איפוס סיסמה"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "עבור חשבון המשתמש שלך ב %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "נא להגיע לעמוד הבא ולבחור סיסמה חדשה:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "שם המשתמש שלך, במקרה ששכחת:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "תודה על השימוש באתר שלנו!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "צוות %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"שכחת את סיסמתך ? נא להזין את כתובת הדוא\"ל מתחת, ואנו נשלח הוראות לקביעת "
-"סיסמה חדשה."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "כתובת דוא\"ל:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "אפס את סיסמתי"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "כל התאריכים"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "בחירת %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "בחירת %s לשינוי"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "אתר"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "תבנית"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "תג:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "סינון:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "ה־view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "יישום %r לא נמצא"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "מודל %(model_name)r לא נמצא ביישום %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "אוביקטי `%(app_label)s.%(data_type)s` קשורים"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "מודל:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "אובייקטי `%(app_label)s.%(object_name)s` קשורים"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "כל %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "מספר %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "שדות באובייקטי %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "לא נראה ש-%s הוא אובייקט urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "ייסומניות"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "ייסומוניות תיעוד"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">כדי להתקין ייסומניות, יש לגרור את הקישור לסרגל הסימניות\n"
-"שלך, או קליק ימני והוספה לסימניות. כעת ניתן\n"
-"לבחור את הייסומניה מכל עמוד באתר. יש לשים לב כי חלק מהייסומניות\n"
-"ניתנות לצפיה רק ממחשב שמסווג\n"
-"כ\"פנימי\" (יש לדבר עם מנהל המערכת שלך אם אינך בטוח/ה\n"
-"שהמחשב מסווג ככזה).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "תיעוד לדף זה"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "מקפיץ אותך מכל עמוד לתיעוד התצוגה שייצרה אותו."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "הצג מזהה אובייקט"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "מציג את סוג התוכן והמזהה הייחודי לעמודים המייצגים אובייקט בודד."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "עריכת אובייקט זה (בחלון הנוכחי)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "קופץ לעמוד הניהול לעמודים אשר מייצגים אובייקטים בודד."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "עריכת אובייקט זה (בחלון חדש)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "כנ\"ל, אך דף הניהול ייפתח בחלון חדש."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "מידע אישי"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "הרשאות"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "תאריכים חשובים"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "קבוצות"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "הסיסמה שונתה בהצלחה."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "שינוי סיסמה: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "שם משתמש"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "שדה חובה. 30 תווים או פחות. אותיות, ספרות ו-@/./+/-/_ בלבד."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "ערך זה יכול להכיל אותיות, ספרות והתווים @/./+/-/_ בלבד."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "אימות סיסמה"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "משתמש עם שם משתמש זה קיים כבר"
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "שני שדות הסיסמה אינם זהים."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "חשבון זה אינו פעיל."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "נראה שעוגיות לא מאופשרות בדפדפן שלך. הן נדרשות כדי להתחבר."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "כתובת דוא\"ל"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "כתובת דואר אלקטרוני זו אינה משוייכת למשתמש. בטוח שנרשמת ?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "איפוס סיסמה על %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "אימות סיסמה חדשה"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "סיסמתך הישנה הוזנה בצורה שגויה. נא להזינה שוב."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "שם"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "שם קוד"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "הרשאה"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "הרשאות"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "קבוצה"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "קבוצות"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "שם משתמש"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "שדה חובה. 30 תווים או פחות. אותיות, ספרות והתווים @/./+/-/_ בלבד."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "שם פרטי"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "שם משפחה"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "כתובת דוא\"ל"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "סיסמה"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"יש להזין '[algo]$[salt]$[hexdigest]' או להשתמש ב<a href=\"password/\">טופס "
-"שינוי הסיסמה</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "סטטוס איש צוות"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "מציין האם המשתמש יכול להתחבר לאתר הניהול."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "פעיל"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"מציין האם יש להתייחס למשתמש כפעיל. יש לבטל בחירה זו במקום למחוק חשבונות "
-"משתמשים."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "סטטוס משתמש על"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "מציין שלמשתמש זה יש את כל ההרשאות ללא הצורך המפורש בהענקתן."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "כניסה אחרונה"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "תאריך הצטרפות"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"בנוסף לכל ההרשאות שהוקצו ידנית, יוענקו למשתמש גם כל ההרשאות של כל קבוצה "
-"המשוייכת אליו."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "הרשאות משתמש"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "משתמש"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "משתמשים"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "הודעה"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "יצאת מהמערכת"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "יש להזין כתובת דוא\"ל חוקית."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "תוכן"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "מטא־נתונים"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "סומנה"
-msgstr[1] "סומנו"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "סמן תגובות שנבחרו"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "אושרה"
-msgstr[1] "אושרו"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "אשר תגובות שנבחרו"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "הוסרה"
-msgstr[1] "הוסרו"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "הסר תגובות שנבחרו"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "תגובה אחת %(action)s בהצלחה"
-msgstr[1] "%(count)s תגובות %(action)s בהצלחה"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "תגובות עבור %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "התגובות האחרונות על %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "שם"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "כתובת דוא\"ל"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "תגובה"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "שמור על לשונך! המילה %s אסורה לשימוש כאן."
-msgstr[1] "שמור על לשונך! המילים %s אסורות לשימוש כאן."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "אם יוזן משהו בשדה זה תגובתך תטופל כספאם"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "סוג תוכן"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "מזהה אובייקט"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "שם משתמש"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "כתובת דוא\"ל משתמש"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "אתר המשתמש"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "תגובה"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "תאריך/שעת הגשה"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "כתובת IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "פומבי "
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "ביטול סימון התיבה יעלים בפועל את התגובה מהאתר"
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "האם הוסר"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"יש לסמן תיבה זו עבור תגובה לא נאותה. הודעת \"תגובה זו נמחקה\" תוצג במקום "
-"התגובה."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "תגובות"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "הודעה זו נשלחה ע\"י משתמש מחובר לכן השם אינו ניתן לשינוי."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr "הודעה זו נשלחה ע\"י משתמש מחובר לכן כתובת הדוא\"ל אינה ניתנת לשינוי."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"הוגש ע\"י %(user)s ב %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "סימן"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "תאריך"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "סמן הערה"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "סמני הערה"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "אשר הערה"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "באמת להפוך את התגובה לפומבית?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "אשר"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "תודה על אישור התגובה"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "תודה על שהקדשת מזמנך כדי לשפר את איכות הדיון באתר שלנו"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "הסר תגובה"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "באמת להסיר תגובה זו?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "תודה על ההסרה"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "סמן תגובה זו"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "באמת לסמן תגובה זו?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "סימן"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "תודה על הסימון"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "פוסט"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "תצוגה מקדימה"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "תודה על התגובה"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "תודה על התגובה"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "תצוגה מקדימה של התגובה"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "בבקשה לתקן את השגיאה למטה"
-msgstr[1] "אנא תקן את שגיאות למטה"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "פרסם את התגובה"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "או לבצע שינויים"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "שם ה־class של מודל פייתון"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "סוגי תוכן"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"לדוגמא: '/about/contact/'. יש לוודא הימצאות הקווים הנטויים בהתחלה ובסוף."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "ערך זה חייב להכיל אותיות, ספרות, מקפים, קווים תחתונים ונטויים בלבד."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "אפשרויות מתקדמות"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "כותרת"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "תוכן"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "אפשר תגובות"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "שם תבנית"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"דוגמא: 'flatpages/contact_page.html'. אם לא צויין, המערכת תשתמש ב-'flatpages/"
-"default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "הרשמה נדרשת"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "אם מסומן, רק משתמשים מחוברים יוכלו לצפות בדף."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "דף פשוט"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "דפים פשוטים"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"לצערנו פג תוקף הטופס שלך. עליך להמשיך למלא את הטופס מן העמוד הזה ואילך."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "שדה ה־GIS הבסיסי -- ממופה לטיפוס OpenGIS Specification Geometry."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "נקודה"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "מחרוזת קו"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "פוליגון"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "מרובה־נקודות"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "מחרוזת קו מרובת שורות"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "פוליגון מרובה"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "אוסף גיאומטרי"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "לא סופק ערך גיאומטרי."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "ערך גאומטרי שגוי."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "סוג גיאומטרי שגוי."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr "הייתה בעיה עם השינוי של הצורה לסוג של השדה."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "רביעי"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "ראשון"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "שני"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "שלישי"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f מיליון"
-msgstr[1] "%(value).1f מיליונים"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f מיליארד"
-msgstr[1] "%(value).1f מיליארדים"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f טריליון"
-msgstr[1] "%(value).1f טריליונים"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "אחד"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "שניים"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "שלושה"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "ארבעה"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "חמישה"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "שישה"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "שבעה"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "שמונה"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "תשעה"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "היום"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "מחר"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "אתמול"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "יש להזין קוד דואר בתבנית NNNN או ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "יש להזין רק ספרות בשדה זה."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "שדה זה דורש 7 או 8 ספרות."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "יש להזין מספר CUIT חוקי בתבנית XX-XXXXXXXX-X או XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT שגוי"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "\tבורגנלנד"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "קרינתיה"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "אוסטריה התחתונה"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "אוסטריה עילית"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "זלצבורג"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "שטיריה"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "טירול"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "פורארלברג"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "וינה"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "יש להזין מיקוד בתבנית XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "יש להזין מספר ביטוח לאומי אוסטרלי חוקי בתבנית XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "יש להזין קוד דואר בן 4 ספרות."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "יש להזין מיקוד בתבנית XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "מספרי טלפון חייבים להיות בתבנית XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "נא לבחור מדינה ברזילאית חוקית. מדינה זו אינה אחת מהמדינות האפשריות."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "מספר CPF לא חוקי"
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "שדה זה דורש 11 או 14 ספרות לכל היותר."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "מספר CNPJ לא חוקי"
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "שדה זה דורש לפחות 14 ספרות."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "יש להזין מיקוד בתבנית XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "יש להזין מספר ביטוח לאומי קנדי חוקי בתבנית XXX-XXX-XXXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "ארגאו"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "אפנצל אינר־רודן"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "אפנצל אוסר־רודן"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "באזל־שטאדט"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "באזל־לנדשאפט"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "ברן"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "פריבור"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "ג'נבה"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "גלרוס"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "גראובינדן"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "ז'ורה"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "לוצרן"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "נשאטל"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "נידוולדן"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "אובוולדן"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "שפהאוזן"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "שוויץ"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "זולותורן"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "סנט גלן"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "טיצ'ינו"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "אורי"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "ואלה"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "וו"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "צוג"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "ציריך"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr "יש להזין מספר זיהוי או דרכון שוויצרי בתבנית X1234567<0 או 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "יש להזין RUT צ'יליאני חוקי."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "יש להזין RUT צ'יליאני חוקי. התבנית היא XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "שדה RUT צ'יליאני אינו חוקי."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "פראג"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "מרכז בוהמיה"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "דרום בוהמיה"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "מחוז פילזן"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "מחוז או איזור קרלסבד"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "מחוז אוסטי"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "מחוז ליברץ"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "מחוז חרדץ"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "מחוז פרדוביצה"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "מחוז ויסוצ'ינה"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "דרום מורביה"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "מחוז או איזור אולומוק"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "מחוז זלין"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "איזור מורביה – שלזיה"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "יש להזין קוד דואר בתבנית XXXXX או XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "הזן מספר לידה בתבנית XXXXXX/XXXX או XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "המשתנה שהזנת בשדה מין שגוי. הערכים החוקיים הם 'f' ו־'m'."
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "הזן מספר לידה חוקי."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "הזן מספר IC חוקי."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "באדן־וירטמברג"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "באווריה"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "ברלין"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "ברנדנבורג"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "ברמן"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "המבורג"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "הסה"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "מקלנבורג-מערב פומרניה"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "סקסוניה התחתונה"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "נורדריין־וסטפאליה"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "ריינלנד־פאלץ"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "חבל הסאר"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "סקסוניה"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "סקסוניה־אנהלט"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "שלזוויג־הולשטיין"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "תורינגיה"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "יש להזין מיקוד בתבנית XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr "יש להזין מספר זיהוי גרמני חוקי בתבנית XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "אראבה"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "אלבסטה"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "אלאקאנט"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "אלמריה"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "אווילה"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "באדאג'וז"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "האיים הבלאריים"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "ברצלונה"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "בורגוס"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "קסרס"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "קדיס"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "קסטלו"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "העיר הקולוניאלית"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "קורדובה"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "א קורוניה"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "קואנקה"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "ז'ירונה"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "גרנדה"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "גוודלחרה"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "גוויפוזקואה"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "אואלבה"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "אואסקה"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "חאאן"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "לאון"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "ליידה"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "לה ריוחה"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "לוגו"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "מדריד"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "מאלאגה"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "מורסיה"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "נווארה"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "אוורנס"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "אסטוריאס"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "פלנסיה"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "לאס פאלמס"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "פונטוורדה"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "סלמנקה"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "סנטה קרוז דה טנריף"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "קנטבריה"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "סגוביה"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "סביליה"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "סוריה"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "טרגונה"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "טרואל"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "טולדו"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "ולנסיה"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "ויאדוליד"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "ביסקאיה"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "סמורה"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "סראגוסה"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "סאוטה"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "מלייה"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "אנדלוסיה"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "אראגון"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "נסיכות אסטוריאס"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "האיים הבלאריים"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "חבל הבסקים"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "האיים הקנריים"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "קסטיליה-לה מנצ'ה"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "קסטיליה ולאון"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "קאטלוניה"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "אקסטרמדורה"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "גאליציה"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "אזור מורסיה"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "הקהילה האוטונומית של נווארה"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "קהילת ולנסיה"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "נא להזין מיקוד חוקי בתחום ובתבנית 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"נא להזין מספר טלפון חוקי באחת מהתבניות 6XXXXXXXX, 8XXXXXXXX או 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "נא להזין NIF, NIE, או CIF חוקי."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "נא להזין NIF או NIE חוקי."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "סיכום ביקורת שגוי עבור NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "סיכום ביקורת שגוי עבור NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "סיכום ביקורת שגוי עבור CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "נא להזין מספר חשבון בנק חוקי בתבנית XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "סיכום ביקורת שגוי עבור מספר חשבון בנק."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "יש להזין מספר ביטוח לאומי פיני חוקי."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "מספרי טלפון חייבים להיות בתבנית 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "יש להזין מיקוד חוקי."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "יש להזין מספר טלפון חוקי"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "יש להזין מספר רישוי רכב חוקי"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "הזן מספר NIK/KTP חוקי."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "באלי"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "בנטן"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "בנגולו"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "ג'וקיירטה"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "ג'קרטה"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "גורנטלו"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "ג'מבי"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "ג'אווה מערב"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "ג'אווה מרכז"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "ג'אווה מזרח"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "בורנאו מערב"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "בורנאו דרום"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "בורנאו מרכז"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "בורנאו מזרח"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "איי בנגקה בליטונג"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "איי ריאאו"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "למפונג"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "מאלוקו"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "מאלוקו צפון"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "נגרוא אסה דרוסלם"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "איי סונדה הקטנים - מערב"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "איי סונדה הקטנים - מזרח"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "פפוא"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "פפוא מערב"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "ריאאו"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "סולבסי מערב"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "סולבסי דרום"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "סולבסי מרכז"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "סולבסי דרום־מזרח"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "סולבסי צפון"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "סומטרה מערב"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "סומטרה דרום"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "סומטרה צפון"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "מאגלנג"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "סורקרטה - סולו"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "מדיון"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "קדירי"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "טפנולי"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "בנגה-מליטנג"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "קונסוליות"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "שגרירויות"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "בנדונג"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "סולאוסי צפון"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - טימור"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "איי סולבסי צפון"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - לומבוק"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "פאפו ופאפו מערב"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "סיירבון"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - סומבאווה"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - פלורס"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - סומבה"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "בוגור"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "פקלונגאן"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "סמרנג"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "פאטי"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "סורביה"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "מדורה"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "מאלאנג"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "ג'מבר"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "בניומס"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "ממשל פדרלי"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "בוג'ונגורו"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "פורקוורטה"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "סידוארג'ו"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "גארוט"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "אנטרים"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "ארמאה"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "קארלאו"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "קאוובן"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "קלייר"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "קורק"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "דרי"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "דונגאל"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "דאון"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "דבלין"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "פרמנה"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "גולוויי"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "קרי"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "קילדאר"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "קילקני"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "ליש"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "לייטרים"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "לימריק"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "לונגפורד"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "לאות'"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "מאיו"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "מית'"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "מונהאן"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "אופלי"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "רוסקומון"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "סלייגו"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "טיפררי"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "טיירון"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "ווטפורד"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "וסטמית'"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "וקספורד"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "ויקלו"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "יש להזין מיקוד בתבנית XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "יש להזין מספר זיהוי איסלנדי חוקי. התבנית היא XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "מספר הזיהוי האיסלנדי אינו חוקי"
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "יש להזין מיקוד חוקי."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "יש להזין מספר ביטוח לאומי חוקי."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "יש להזין מספר מע\"מ חוקי"
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "יש להזין קוד דואר בתבנית XXXXXXX או XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "הוקאידו"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "אאומורי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "מיאגי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "אקיטה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "יאמאגטה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "פוקושימה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "איברקי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "טושיגי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "גונמה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "סאיטאמה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "צ'יבה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "טוקיו"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "קאנגאווה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "יאמאנשי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "נאגאנו"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "נייגטה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "טויאמה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "אישיקאוואה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "פוקוי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "גיפו"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "שיזואוקה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "אייצ'י"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "מיי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "שיגה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "קיוטו"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "אוסקה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "הייוגו"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "נארה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "ווקאייאמה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "טוטורי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "אוקייאמה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "הירושימה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "יאמאגוצ'י"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "טוקושימה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "קאגאווה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "קוצ'י"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "פוקוקה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "סגה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "נגסקי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "קומאמוטו"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "אויטה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "מיאזאקי"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "קגושימה"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "אוקינאווה"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "נא להזין מספר זיהוי כוויתי חוקי"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "אגואסקליינטס"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "באחה קליפורניה"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "באחה קליפורניה הדרומית"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "קמפצ'ה"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "צ'יוואוה"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "צ'יאפס"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "קואהווילה"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "קולימה"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "מחוז פדרלי"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "דוראנגו"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "גררו"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "גואנחואטו"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "אידלגו"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "חליסקו"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "אסטאדו דה מקסיקו"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "מיצ'ואקן"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "מורלוס"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "נייארית"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "נואבו ליאון"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "אואסקה"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "פואבלה"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "קוורטארו"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "קינטאנה רו"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "סינאלוה"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "סאן לואי פוטוסי"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "סונורה"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "טבסקו"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "טמפוליפס"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "טלקסקאלה"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "ורקרוז"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "יוקטן"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "זאקאטקס"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "יש להזין מיקוד חוקי."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "יש להזין מספר SoFi חוקי"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "דרנתה"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "פלבולנד"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "פריזלנד"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "חלדרלנד"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "חרונינגן"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "לימבורג"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "צפון בראבנט"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "צפון הולנד"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "אובראיסל"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "אוטרכט"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "זילנד"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "דרום הולנד"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "יש להזין מספר ביטוח לאומי נורבגי חוקי."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "שדה זה דורש 8 ספרות."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "שדה זה דורש 11 ספרות."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "מספר זיהוי לאומי מורכב מ-11 ספרות"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "סכום ביקורת שגוי עבור מספר הזיהוי הלאומי"
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "נא להזין שדה מספר מס (NIP) בתבנית XXX-XXX-XX-XX או XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "סיכום ביקורת שגוי עבור מספר מס (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "מספר רשומת בית עסק ארצי(REGON) מכיל או תשע או ארבע עשרה ספרות."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "סיכום שגוי National Business Register Number (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "נא להזין מיקוד בתבנית XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "סילסיה התחתונה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "קויאבויה - פומרניה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "לובלין"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "לובוש"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "לודז'"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "פולין זוטא"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "מזוביה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "אופולה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "תת קרפטיה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "פודלסיה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "פומרניה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "סילסיה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "סבייטוקזי'סקי"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "וורמיה- מזוריה"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "פולין רבתי"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "מערב פומרניה"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "יש להזין מיקוד בתבנית XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "מספרי טלפון חייבים להכיל 9 ספרות, או להתחיל ב + או 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "יש להזין CIF חוקי."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "יש להזין CNP חוקי."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "יש להזין מספר IBAN חוקי בתבנית ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "מספרי טלפון חייבים להיות בתבנית XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "נא להזין מיקוד חוקי בתבנית XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "הזן מספר ארגון שוודי חוקי."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "יש להזין מספר זיהוי אישי שוודי חוקי."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "מספרי שיתוף פעולה אינם מותרים בשימוש"
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "נא להזין מיקוד שוודי בתבנית XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "סטוקהולם"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "וסטרבוטן"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "נורבוטן"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "אופסלה"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "סדרמאנלנד"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "אסטריֶטלנד"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "ינשפין"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "קרונוברג"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "קאלמאר"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "גוטלנד"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "בלשיניה"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "סקונה"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "הלנד"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "יטאלנד המערבית"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "ורמלנד"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "ארברו"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "וסטמנלנד"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "דלארנה"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "יבלבורג"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "וסטרנורלנד"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "ימטלנד"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr " בנסקה ביסטריצה"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "בנסקה שטיאבניצה"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "ברדיוב"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "בנובץ ע\"מ בברבו"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "ברזנו"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "ברטיסלאבה 1"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "ברטיסלאבה 2"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "ברטיסלאבה 3"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "ברטיסלאבה 4"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "ברטיסלאבה 5"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "ביטצ'ה"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "צ'דקה"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "דטבה"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "דולני קובין"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "דונאייסקה סטרדה"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "גלנטה"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "גלניקה"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "הלוהובץ"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "הומנה"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "אילבה"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "קזמרוק"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "קומרנו"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "קושיצה 1"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "קושיצה 2"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "קושיצה 3"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "קושיצה 4"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "קושיצ'ה - אוקולי"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "קרופינה"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "קיוסקה נובה מסטו"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "לביצה"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "לבוצ'ה"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "ליפטובסקי מיקולס"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "לוצ'נץ'"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "מאלאקי"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "מרטין"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "מדזילבורצה"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "מיחלובצה"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "מיאווה"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "נמסטובו"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "ניטרה"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "נובה מסטו ע\"נ וה"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "נווי־זאמקי"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "פרטיזנסקה"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "פזינוק"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "פיאסטאני"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "פולטר"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "פופרד"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "פובסקה ביסטריצ'ה"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "פרשוב"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "פרבידזה"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "פוצ'וב"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "ריץ"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "רימובסקה סובוטה"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "רוזנבה"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "רוזומברוק"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "סבינוב"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "סנץ"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "סניצ'ה"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "סקליצ'ה"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "סנינה"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "סוברנס"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "ספישסקה נובה וס"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "סטרה לובובנה"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "סרטופקוב"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "סבידניק"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "סאלה"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "טופולצ'ני"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "טרביסוב"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "טרנצ'ין"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "טרנאוה"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "טורצינסק טפליץ"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "טברודוסין"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "ולקי קריץ"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "טרנוב ע\"נ טופולו"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "זלטה מורבצה"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "זבולן"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "זרנוביקה"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "ז'יר ע\"נ הרון"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "ז'ילינה"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "מחוז בטנסקה ביסטריקה"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "מחוז ברטיסלבה"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "מחוז קושיצ'ה"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "מחוז ניטרה"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "מחוז פראסוב"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "מחוז טראנצין"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "מחוז טרנאוה"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "מחוז ז'ילינה"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "יש להזין מיקוד חוקי."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr " בדפורשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "באקינגהמשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr " צ'שייר"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "קורנוול ואיי סילי"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr " קאמבריה"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "דרבישייר"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr " דבון"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "דורסט"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "דרהאם"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "מזרח אסקס"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "אסקס"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "גלוסטרשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "לונדון רבתי"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "מנצ'סטר רבתי"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "המפשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "הארטפורדשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "קנט"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "לנקשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "ליסטרשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr " לינקולנשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "מרסיסייד"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "נורפולק"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "צפון יורקשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "נורת'המפטונשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "נורת'אמברלנד"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "נוטינגהאמשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "אוקספורדשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "שרופשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "סומרסט"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "דרום יורקשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "סטאפורדשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr " סאפוק"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "סוריי"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "טיין ו־וויר"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr " וורוויקשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "מערב המידלנדס"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "מערב סאסקס"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "מערב יורקשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr " ווילטשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr " ווסטרשייר"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "מחוז אנטרים"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "ארמה"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "מחוז דאון"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "מחוז פרמאנה"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "מחוז לונדונברי"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "מחוז טיירון"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "קלוויד"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "דייפד"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "גוונט"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "גווינד"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "מרכז גלמורגן"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "ַפואיס"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "דרום גלמורגן"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "מערב גלמורגן"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "גבולות"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "מרכז סקוטלנד"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "דמפרייס וגאלוויי"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "פייף"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr " גרמפיאן"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "רמה"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "לודיאן"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "איי אורקיי"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "איי שטלנד"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "סטראת'קלייד"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "טייסייד"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "האיים המערביים"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "אנגליה"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "צפון אירלנד"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "סקוטלנד"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "וויילס"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "יש להזין מיקוד חוקי בתבנית XXXXX או XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "מספרי טלפון חייבים להיות בתבנית XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "יש להזין מספר ביטוח לאומי אמריקאי בתבנית XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "יש להזין מדינה או טריטרויה בארה\"ב"
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "מדינה בארה\"ב (שתי אותיות גדולות)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "מספר טלפון"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "יש להזין מספר CI חוקי בתבנית X.XXX.XXX-X,XXXXXXX-X או XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "יש להזין מספר CI חוקי."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "נא להזין מספר זיהוי דרום אפריקאי חוקי"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "נא להזין מיקוד דרום אפריקאי חוקי"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "הכף המזרחי"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "המדינה החופשית"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "גאוטנג"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "קווזולו־נאטאל"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "לימפופו"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "מפומלנגה"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "כף צפוני"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "דרום מערב"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "כף מערבי"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "הודעה 'עצלה'"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "הפניה מ"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "זה אמור להיות נתיב מלא, ללא שם המתחם. לדוגמא: '/‎/events/search'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "הפניה אל"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "יכול להיות נתיב מלא (כנ\"ל) או URL מלא המתחיל ב'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "הפניה"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "הפניות"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "מפתח התחברות (session key)"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "מידע התחברות (session data)"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "תאריך פג תוקף"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "התחברות"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "התחברויות"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "שם מתחם"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "שם לתצוגה"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "אתרים"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "יש להזין ערך חוקי."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "יש להזין URL חוקי."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "ה־URL הזה נראה כקישור שבור."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "יש להזין ערך המכיל אותיות, ספרות, קווים תחתונים ומקפים בלבד."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "יש להזין כתובת IPv4 חוקית."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "יש להזין רק ספרות מופרדות בפסיקים."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "יש לוודא שערך זה הינו %(limit_value)s (כרגע %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "יש לוודא שערך זה פחות מ או שווה ל־%(limit_value)s ."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "יש לוודא שהערך גדול מ או שווה ל־%(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"יש לוודא שערך זה מכיל לפחות %(limit_value)d תווים (מכיל %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"יש לוודא שערך זה מכיל %(limit_value)d תווים לכל היותר (מכיל %(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s חייב להיות ייחודי ל%(lookup)s של ה־%(date_field)s"
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s·עם·%(field_label)s·זה קיימת כבר."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "ערך %r אינו אפשרות חוקית."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "שדה זה אינו יכול להיות ריק."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "שדה זה אינו יכול להיות ריק."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "שדה מסוג: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "מספר שלם"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "ערך זה חייב להיות מספר שלם."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "ערך זה חייב להיות אמת או שקר."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "בוליאני (אמת או שקר)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "מחרוזת (עד %(max_length)s תווים)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "מספרים שלמים מופרדים בפסיקים"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "תאריך (ללא שעה)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "יש להזין תאריך במבנה YYYY-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "תאריך שגוי: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "נא להזין תאריך\\שעה חוקיים בתבנית YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "תאריך (כולל שעה)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "ערך זה חייב להיות מספר עשרוני."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "מספר עשרוני"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "כתובת דוא\"ל"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "נתיב קובץ"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "על הערך הזה להיות ערך מספר עשרוני."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "מספר עשרוני"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "מספר שלם גדול (8 בתים)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "ערך זה חייב להיות כלום, אמת או שקר."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "בוליאני (אמת, שקר או כלום)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "טקסט"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "זמן"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "נא להזין זמן חוקי בתבנית HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "טקסט XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "מודל %(model)s עם מפתח ראשי %(pk)r אינו קיים."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Foreign Key (הסוג נקבע לפי השדה המקושר)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "יחס של אחד לאחד"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "יחס של רבים לרבים"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"יש להחזיק את \"Control\", או \"Command\" על מק, לחוץ כדי לבחור יותר מאחד."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "נא להזין מזהה %(self)s חוקי. הערך %(value)r אינו חוקי."
-msgstr[1] "נא להזין מזהי %(self)s חוקיים. הערכים %(value)r אינם חוקיים."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "יש להזין תוכן בשדה זה."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "נא להזין מספר שלם."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "נא להזין מספר."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "נא לוודא שאין יותר מ־%s ספרות סה\"כ"
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "נא לוודא שאין יותר מ־%s ספרות אחרי הנקודה"
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "נא לוודא שאין יותר מ־%s ספרות לפני הנקודה העשרונית"
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "יש להזין תאריך חוקי."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "יש להזין שעה חוקית."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "יש להזין תאריך ושעה חוקיים."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "לא נשלח שום קובץ. נא לבדוק את סוג הקידוד של הטופס."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "לא נשלח שום קובץ"
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "הקובץ שנשלח ריק."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "על שם הקובץ להיות לא יותר מ־%(max)d תווים (יש לו%(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "נא להעלות תמונה חוקית. הקובץ שהעלת אינו תמונה או מכיל תמונה מקולקלת."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "יש לבחור אפשרות חוקית. %(value)s אינו בין האפשרויות הזמינות."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "יש להזין רשימת ערכים"
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "מיון"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "נא לתקן את הערכים הכפולים ל%(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "נא לתקן את הערכים הכפולים ל%(field)s, שערכים בו חייבים להיות ייחודיים."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"נא לתקן את הערכים הכפולים %(field_name)s, שחייבים להיות ייחודיים ל%(lookup)s "
-"של %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "נא לתקן את הערכים הכפולים למטה."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "המפתח הזר ה־inline לא התאים למפתח הראשי של האב."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "יש לבחור אפשרות חוקית; אפשרות זו אינה אחת מהזמינות."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "יש לבחור אפשרות חוקית. %s אינו בין האפשרויות הזמינות."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" איננו חוקי כמפתח ראשי."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "כן,לא,אולי"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "בית %(size)d "
-msgstr[1] "%(size)d בתים"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "אחר הצהריים"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "בבוקר"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "אחר הצהריים"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "בבוקר"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "חצות"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "12 בצהריים"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "שני"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "שלישי"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "רביעי"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "חמישי"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "שישי"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "שבת"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "ראשון"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "שני"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "שלישי"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "רביעי"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "חמישי"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "שישי"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "שבת"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "ראשון"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "ינואר"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "פברואר"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "מרס"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "אפריל"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "מאי"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "יוני"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "יולי"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "אוגוסט"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "ספטמבר"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "אוקטובר"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "נובמבר"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "דצמבר"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "ינו"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "פבר"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "מרס"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "אפר"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "מאי"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "יונ"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "יול"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "אוג"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "ספט"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "אוק"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "נוב"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "דצמ"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "ינו'"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "פבר'"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "אוג'"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "ספט'"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "אוק'"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "נוב'"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "דצמ'"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "או"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "שנה"
-msgstr[1] "שנים"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "חודש"
-msgstr[1] "חודשים"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "שבוע"
-msgstr[1] "שבועות"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "יום"
-msgstr[1] "ימים"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "שעה"
-msgstr[1] "שעות"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "דקה"
-msgstr[1] "דקות"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "דקות"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "d.m.Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "d.m.‏Y H:i:s"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "m.Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "d.m"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "ה־%(verbose_name)s נוצר בהצלחה."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "ה־%(verbose_name)s עודכן בהצלחה."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "ה־%(verbose_name)s נמחק."
diff --git a/parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 090d464..0000000
--- a/parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.po
deleted file mode 100644
index fab6cd6..0000000
--- a/parts/django/django/conf/locale/he/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,159 +0,0 @@
-# Hebrew translation of djangojs.
-# Copyright (C) 2006 THE djangojs'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the djangojs package.
-#
-#
-# Meir Kriheli <meir@mksoft.co.il>, 2006.
-# Shai Berger <shai@platonix.com>, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 12:16+0200\n"
-"PO-Revision-Date: 2010-05-09 15:22-0500\n"
-"Last-Translator: Alex <alex.gaynor@gmail.com>\n"
-"Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "%s זמינות"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "בחירת הכל"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "הוספה"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "הסרה"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s נבחרות"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "יש לסמן את ההרשאות המבוקשות וללחוץ על "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "איפוס הכל"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s מ %(cnt)s נבחרות"
-msgstr[1] "%(sel)s מ %(cnt)s נבחרות"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"יש לך שינויים שלא נשמרו על שדות יחידות. אם אתה מפעיל פעולה, שינויים שלא "
-"נשמרו יאבדו."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"בחרת פעולה, אבל עוד לא שמרת את השינויים לשדות בודדים. אנא לחץ על אישור כדי "
-"לשמור. יהיה עליך להפעיל את הפעולה עוד פעם."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"בחרת פעולה, ולא עשיתה שינויימ על שדות. אתה כנראה מחפש את הכפתור ללכת במקום "
-"הכפתור לשמור."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"ינואר פברואר מרץ אפריל מאי יוני יולי אוגוסט ספטמבר אוקטובר נובמבר דצמבר"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "א ב ג ד ה ו ש"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "הצג"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "הסתר"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "ראשון שני שלישי רביעי חמישי שישי שבת"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "כעת"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "שעון"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "בחירת שעה"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "חצות"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 בבוקר"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "12 בצהריים"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "ביטול"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "היום"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "לוח שנה"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "אתמול"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "מחר"
diff --git a/parts/django/django/conf/locale/he/__init__.py b/parts/django/django/conf/locale/he/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/he/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/he/formats.py b/parts/django/django/conf/locale/he/formats.py
deleted file mode 100644
index 8d7c7f2..0000000
--- a/parts/django/django/conf/locale/he/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j בF Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = 'j בF Y H:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j בF'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i:s'
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/hi/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/hi/LC_MESSAGES/django.mo
deleted file mode 100644
index 99f3186..0000000
--- a/parts/django/django/conf/locale/hi/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/hi/LC_MESSAGES/django.po b/parts/django/django/conf/locale/hi/LC_MESSAGES/django.po
deleted file mode 100644
index 65877bd..0000000
--- a/parts/django/django/conf/locale/hi/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4121 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django SVN\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-12 08:27+0530\n"
-"PO-Revision-Date: 2008-11-12 08:14+0530\n"
-"Last-Translator: Thejaswi Puthraya <thejaswi.puthraya@gmail.com>\n"
-"Language-Team: Hindi <indlinux-hindi@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Hindi\n"
-"X-Poedit-Country: INDIA\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "अरबी"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "बंगाली"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "बलगारियन"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "कटलान"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "च्चेक"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "वेल्श"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "दानिश"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "जर्मन"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "ग्रीक"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "अंग्रेज़ी "
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "स्पानिश"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "एस्टोनियन"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "अर्जेंटीनी स्पानिश"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "बास्क"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "पारसी"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "फ़िन्निश"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "फ्रेंच"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "आयरिश"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "गलिशियन"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "हंगेरियन"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "हि‍ब्रू"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr "क्रोयेशियन"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "आयिस्लान्डिक"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "इटैलियन"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "जपानी"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "ज्योर्जियन"
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "कोरियन"
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "ख्मेर"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "कन्‍नड़"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "लात्वियन"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "लिथुवेनियन"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "मेसिडोनियन"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "डच"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "नार्वेजियन"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "पोलिश"
-
-#: conf/global_settings.py:79
-#, fuzzy
-msgid "Portuguese"
-msgstr "पुर्तगाली"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "ब्रजिलियन पुर्तगाली"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "रोमानियन"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "रूसी"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "स्लोवाक"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "स्लोवेनियन"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "सर्बियन"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "स्वीडिश"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "तमिल"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "तेलुगु"
-
-#: conf/global_settings.py:89
-#, fuzzy
-msgid "Thai"
-msgstr "तमिल"
-
-#: conf/global_settings.py:90
-msgid "Turkish"
-msgstr "तुर्किश"
-
-#: conf/global_settings.py:91
-msgid "Ukrainian"
-msgstr "यूक्रानियन"
-
-#: conf/global_settings.py:92
-msgid "Simplified Chinese"
-msgstr "सरल चीनी"
-
-#: conf/global_settings.py:93
-msgid "Traditional Chinese"
-msgstr "पारम्परिक चीनी"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s द्वारा</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:91
-#: contrib/admin/filterspecs.py:146 contrib/admin/filterspecs.py:172
-msgid "All"
-msgstr "सभी"
-
-#: contrib/admin/filterspecs.py:112
-msgid "Any date"
-msgstr "कोई भी तारीख"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Today"
-msgstr "आज"
-
-#: contrib/admin/filterspecs.py:116
-msgid "Past 7 days"
-msgstr "पिछले 7 दिन"
-
-#: contrib/admin/filterspecs.py:118
-msgid "This month"
-msgstr "इस महीने"
-
-#: contrib/admin/filterspecs.py:120
-msgid "This year"
-msgstr "इस साल"
-
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
-msgid "Yes"
-msgstr "हाँ"
-
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
-msgid "No"
-msgstr "नहीं"
-
-#: contrib/admin/filterspecs.py:153 forms/widgets.py:390
-msgid "Unknown"
-msgstr "अनजान"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "कार्य समय"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "वस्तु आई डी "
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "वस्तु प्रतिनिधित्व"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "कार्य ध्वज"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "परिवर्तन सन्देश"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "लॉग प्रविष्टि"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "लॉग प्रविष्टियाँ"
-
-#: contrib/admin/options.py:60 contrib/admin/options.py:121
-msgid "None"
-msgstr "कोई नहीं"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "%s को बदला गया हैं"
-
-#: contrib/admin/options.py:338 contrib/admin/options.py:348
-#: contrib/comments/templates/comments/preview.html:15 forms/models.py:288
-msgid "and"
-msgstr "और"
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" को जोडा गया हैं"
-
-#: contrib/admin/options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" की %(list)s बदला गया है"
-
-#: contrib/admin/options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" निकाला गया है"
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "कोई क्षेत्र नहीं बदला"
-
-#: contrib/admin/options.py:417 contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" को कामयाबी से जोडा गया है"
-
-#: contrib/admin/options.py:421 contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "आप इसे फिर से संपादित कर सकते हैं"
-
-#: contrib/admin/options.py:431 contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "आप नीचे एक और %s जोड सकते हैं"
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" को कामयाबी से बदला गया हैं"
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" कामयाबी से जोडा गया हैं । आप इसे फिर से संपादित कर सकते हैं"
-
-#: contrib/admin/options.py:528
-#, python-format
-msgid "Add %s"
-msgstr "%s बढाएं"
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:673
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-
-#: contrib/admin/options.py:606
-#, python-format
-msgid "Change %s"
-msgstr "%s बदलो"
-
-#: contrib/admin/options.py:638
-msgid "Database error"
-msgstr "डेटाबेस त्रुटि"
-
-#: contrib/admin/options.py:688
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" को कामयाबी से निकाला गया है"
-
-#: contrib/admin/options.py:695
-msgid "Are you sure?"
-msgstr "क्या आप निश्चित हैं?"
-
-#: contrib/admin/options.py:724
-#, python-format
-msgid "Change history: %s"
-msgstr "चरित्र बदलो: %s"
-
-#: contrib/admin/sites.py:16 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-
-#: contrib/admin/sites.py:226 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr ""
-
-#: contrib/admin/sites.py:233 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-
-#: contrib/admin/sites.py:249 contrib/admin/sites.py:255
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr ""
-
-#: contrib/admin/sites.py:252 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-
-#: contrib/admin/sites.py:312
-msgid "Site administration"
-msgstr "साइट प्रशासन"
-
-#: contrib/admin/sites.py:325 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "लॉगिन"
-
-#: contrib/admin/sites.py:372
-#, python-format
-msgid "%s administration"
-msgstr "%s प्रशासन"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "एक अथवा अधिक %(fieldname)s के %(name)s : %(obj)s"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "एक अथ‌वा अधिक %(fieldname)s के %(name)s:"
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "तिथि:"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "समय:"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "प्रचलित रूप में:"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "परिवर्तन :"
-
-#: contrib/admin/widgets.py:123
-msgid "Lookup"
-msgstr "लुक अप"
-
-#: contrib/admin/widgets.py:230
-msgid "Add Another"
-msgstr "अन्य बढाएं"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "पृष्ठ लापता"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "क्षमा कीजिए पर निवेदित पृष्ट लापता है ।"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "गृह"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "सर्वर त्रुटि"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "सर्वर त्रुटि (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "सर्वर त्रुटि <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:26
-msgid "Welcome,"
-msgstr "स्वागत,"
-
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "दस्तावेज़ीकरण"
-
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "शब्दकूट बदलें"
-
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "लॉग आउट"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "ज्याँगो साइट प्रशासन"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "ज्याँगो प्रशासन"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "बढाएं"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "चरित्र"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
-msgid "View on site"
-msgstr "साइट पे देखें"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "कृपया नीचे पायी गयी गलती ठीक करें ।"
-msgstr[1] "कृपया नीचे पाये गये गलतियाँ ठीक करें ।"
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s बढाएं"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "छन्नी"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:246
-msgid "Delete"
-msgstr "मिटाएँ"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "हाँ, मैं निश्चित हूँ"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "%(filter_title)s द्वारा"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s अनुप्रयोग में लभ्य मॅडेल ।"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "बदलें"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "आपके पास कुछ भी संपादन करने के लिये अनुमति नहीं है ।"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "अभी के कार्य"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "मेरे कार्य"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "कुछ भी लभ्य नहीं है"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "प्रवोक्ता नाम"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "कूटशब्द"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "तिथि / समय"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "उपभोक्ता"
-
-#: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
-msgid "Action"
-msgstr "कार्य"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "तिथिसमय_प्रारूप"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "सभी दिखाएँ"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "जाएँ"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 परिणाम"
-msgstr[1] "%(counter)s परिणाम"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s कुल जोड"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "सहेजें"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "नये सा सहेजें"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "सहेजें और एक और जोडें"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "सहेजें और संपादन करें"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"पहले प्रदवोक्ता नाम और शब्दकूट दर्ज करें । उसके पश्चात ही आप अधिक प्रवोक्ता विकल्प बदल "
-"सकते हैं ।"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "प्रवोक्ता नाम"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:184
-msgid "Password"
-msgstr "कूटशब्द"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "शब्दकूट (दुबारा)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "सत्याप्ती के लिए ऊपर दर्ज किए शब्दकूट को फिर से प्रवेश करें"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "<strong>%(username)s</strong> प्रवोक्ता के लिए नयी शब्दकूट दर्ज करें ।"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "मिटाएँ ?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "आज हमारे वेब साइट पर आने के लिए धन्यवाद ।"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "फिर से लॉगिन कीजिए"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "शब्दकूट बदलें"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "शब्दकूट कदली कामयाब"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "आपके शब्दकूट को बदला गया है"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"सुरक्षा कारणों के लिए कृपया पुराना शब्दकूट दर्ज करें । उसके पश्चात नए शब्दकूट को दो बार दर्ज "
-"करें ताकि हम उसे सत्यापित कर सकें ।"
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "पुराना शब्दकूट"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "नया शब्दकूट"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "शब्दकूट पुष्टि कीजिए"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "शब्दकूट बदलें"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "शब्दकूट पुनस्थाप"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "शब्दकूट पुनस्थाप कामयाब"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "आपके शब्दकूट को स्थापित किया गया है । अब आप लॉगिन कर सकते है ।"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "कूटशब्द पुष्टि"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "नया शब्दकूट दीजिएं"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "कृपया आपके नये शब्दकूट को दो बार दर्ज करें ताकि हम उसकी सत्याप्ती कर सकते है ।"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "शब्दकूट पुनस्थाप असफल"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"शब्दकूट पुनस्थाप संपर्क अमान्य है, संभावना है कि उसे उपयोग किया गया है। कृपया फिर से शब्दकूट "
-"पुनस्थाप की आवेदन करें ।"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "शब्दकूट पुनस्थाप सफल"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"हमने आपके ईमेल पता पर शब्दकूट स्थापित करने के निर्देश भेजे है । थोडी ही देर में आप उसे प्राप्त "
-"करेंगे ।"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "आपने शब्दकूट पुनस्थाप की आवेदना दर्ज की है, इसी कारण आपको यह ईमेल भेजा गया है ।"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "%(site_name)s पर आपके प्रवोक्ता खाता के लिए"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "कृपया निम्नलिखित पृष्ठ पर नया शब्दकूट चुनिये :"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "आपका प्रवोक्ता नाम, यदि भूल गये हों :"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "हमारे साइट को उपयोग करने के लिए धन्यवाद ।"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s दल"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"क्या आप शब्दकूट भूल गये हैं? कृपया नीचे अपना ईमेल पता दर्ज करें, हम नया शब्दकूट स्थापित करने "
-"के निर्देश ईमेल के द्वारा भेजेंगे ।"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "ईमेल पता :"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "शब्दकूट पुनस्थाप"
-
-#: contrib/admin/templatetags/admin_list.py:284
-msgid "All dates"
-msgstr "सभी तारीख"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "%s चुनें"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "%s के बदली के लिए चयन करें"
-
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
-msgid "site"
-msgstr "साइट"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "टेम्पलेट"
-
-#: contrib/admindocs/views.py:57 contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "टैग:"
-
-#: contrib/admindocs/views.py:90 contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "छन्नी:"
-
-#: contrib/admindocs/views.py:154 contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "दृष्टि:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "%r अनुप्रयोग लापता है"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "%(model_name)r मॉडल %(app_label)r अनुप्रयोग में लापता है"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "`%(app_label)s.%(data_type)s` संबंधित वस्तु"
-
-#: contrib/admindocs/views.py:205 contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241 contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "मॉडल :"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "`%(app_label)s.%(object_name)s` संबंधित वस्तु"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "सभी %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "%s संख्या"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s वस्तु पर क्षेत्र"
-
-#: contrib/admindocs/views.py:314 contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327 contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "पूर्णांक"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "बूलियन (सही अथ‌वा गलत)"
-
-#: contrib/admindocs/views.py:316 contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "स्ट्रिंग (अधिकतम लम्बाई %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "अल्पविराम सीमांकित संख्या"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "तिथि (बिना समय)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "तिथि (समय के साथ)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "दशमलव संख्या"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "ईमेल पता"
-
-#: contrib/admindocs/views.py:322 contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "संचिका पथ"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "चल बिन्दु संख्या"
-
-#: contrib/admindocs/views.py:328 contrib/comments/models.py:58
-msgid "IP address"
-msgstr "आइ.पि पता"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "बूलियन (सही, गलत या कुछ नहीं)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "मूल मॉडल सम्बंध"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "टेलिफोन संख्या"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "पाठ"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "समय"
-
-#: contrib/admindocs/views.py:339 contrib/comments/forms.py:21
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "यू.आर.एल"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "अमेरिकी राज्य (दो अपरकेस अक्षर)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "एक्स.एम.एल पाठ"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s सही यू.आऱ.एल प्रतिरूप वस्तु नहीं है"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "बुकमार्कलेट्स"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "प्रलेखन बुकमार्कलेट्स"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "इस पृष्ठ की प्रलेखन"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "वस्तु आइ.डी दिखाओ"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "इस वस्तु को संपादन करें (इस खिडकी में)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "इस वस्तु को संपादन करें (नये खिडकी में)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "व्यक्तिगत सूचना"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "अनुमतियाँ"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "आवश्यक तिथियाँ"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "वर्गों"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "उपभोक्ता बढ़ाएं"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "शब्दकूट बदली कामयाब"
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "शब्दकूट बदलें: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:127
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr ""
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "कूटशब्द पुष्टि"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "इस नाम के साथ प्रवोक्ता अस्तित्व है"
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "यह दो शब्दकूट क्षेत्रों का मेल नहीं होता "
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "यस खाता सुस्त है"
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "ईमेल"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "%s पर शब्दकूट पुनस्थाप"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "नया शब्दकूट"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "नया शब्दकूट पुष्टि"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "पुराना शब्दकूट"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "आपने पुराना शब्दकूट गलत दर्ज किया है । कृपया फिर से दर्ज करें"
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
-msgid "name"
-msgstr "नाम"
-
-#: contrib/auth/models.py:65
-msgid "codename"
-msgstr "कोडनेम"
-
-#: contrib/auth/models.py:68
-msgid "permission"
-msgstr "अनुमति"
-
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
-msgid "permissions"
-msgstr "अनुमतियाँ"
-
-#: contrib/auth/models.py:90
-msgid "group"
-msgstr "वर्ग"
-
-#: contrib/auth/models.py:91 contrib/auth/models.py:137
-msgid "groups"
-msgstr "वर्गों"
-
-#: contrib/auth/models.py:127
-msgid "username"
-msgstr "प्रयोक्ता नाम"
-
-#: contrib/auth/models.py:128
-msgid "first name"
-msgstr "पहला नाम"
-
-#: contrib/auth/models.py:129
-msgid "last name"
-msgstr "आखिरी नाम"
-
-#: contrib/auth/models.py:130
-msgid "e-mail address"
-msgstr "ईमेल पता"
-
-#: contrib/auth/models.py:131
-msgid "password"
-msgstr "शब्दकूट"
-
-#: contrib/auth/models.py:131
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"'[algo]$[salt]$[hexdigest]' अथ‌वा <a href=\"password/\">शब्दकूट बदली फार्म</a> "
-"प्रयोग करें"
-
-#: contrib/auth/models.py:132
-msgid "staff status"
-msgstr "कर्मचारी स्थिति"
-
-#: contrib/auth/models.py:132
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-
-#: contrib/auth/models.py:133
-msgid "active"
-msgstr "सक्रिय"
-
-#: contrib/auth/models.py:133
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-
-#: contrib/auth/models.py:134
-msgid "superuser status"
-msgstr "सर्वोच्च प्रयोक्ता स्थिति"
-
-#: contrib/auth/models.py:134
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-
-#: contrib/auth/models.py:135
-msgid "last login"
-msgstr "पिछला लॉगिन"
-
-#: contrib/auth/models.py:136
-msgid "date joined"
-msgstr "तिथि भरती"
-
-#: contrib/auth/models.py:138
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-
-#: contrib/auth/models.py:139
-msgid "user permissions"
-msgstr "प्रयोक्ता अनुमतियाँ"
-
-#: contrib/auth/models.py:143
-msgid "user"
-msgstr "उपभोक्ता"
-
-#: contrib/auth/models.py:144
-msgid "users"
-msgstr "उपभोक्ताऐं"
-
-#: contrib/auth/models.py:300
-msgid "message"
-msgstr "सन्देश"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr ""
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "मान्य ईमेल पता भरें"
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "विषय सूची"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr ""
-
-#: contrib/comments/forms.py:19
-#: contrib/comments/templates/comments/moderation_queue.html:34
-msgid "Name"
-msgstr "नाम"
-
-#: contrib/comments/forms.py:20
-msgid "Email address"
-msgstr "ईमेल पता"
-
-#: contrib/comments/forms.py:22
-#: contrib/comments/templates/comments/moderation_queue.html:35
-msgid "Comment"
-msgstr "टिप्पणी"
-
-#: contrib/comments/forms.py:25
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-
-#: contrib/comments/forms.py:125
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "वस्तु आइ डी"
-
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "प्रयोक्ता नाम"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "प्रयोक्ता ईमेल पता"
-
-#: contrib/comments/models.py:52
-msgid "user's URL"
-msgstr "प्रयोक्ता यू.आर.एल"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "टिप्पणी"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "तिथि/समय निवेदित"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "सार्वजनिक है"
-
-#: contrib/comments/models.py:60
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "हटाया गया"
-
-#: contrib/comments/models.py:63
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-
-#: contrib/comments/models.py:115
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:124
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "टिप्पणी पसंद करें"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "क्या इस टिप्पणी को सार्वजनिक बनाएँ ?"
-
-#: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
-msgid "Approve"
-msgstr "पसंद करें"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "पसंद करने के लिए धन्यवाद"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "टिप्पणी निकालें"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "क्या आप इस टिप्पणी को हटाना चाहते हैं ?"
-
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "निकालें"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "निकालने के लिये धन्यवाद"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "टिप्पनी को फ्लैग करो"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "क्या आप इस टिप्पणी को फ्लैग करना चाहते हैं ?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "फ्लैग"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "फ्लैग करने के लिए धन्यवाद"
-
-#: contrib/comments/templates/comments/form.html:16
-#: contrib/comments/templates/comments/preview.html:31
-msgid "Post"
-msgstr "प्रस्तुत"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Preview"
-msgstr "पूर्व दर्शन"
-
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr ""
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr ""
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "ईमेल"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr ""
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "आइ.पि पता"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "प्रस्तुत तिथि"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "हाँ"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "नहीं"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "टिप्पणी के लिये धन्यवाद"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "टिप्पणी के लिये धन्यवाद"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:12
-msgid "Preview your comment"
-msgstr "आपके टिप्पणी का पूर्व दर्शन देखे`"
-
-#: contrib/comments/templates/comments/preview.html:10
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "कृपया नीचे पायी गयी गलती को ठीक करें"
-msgstr[1] "कृपया नीचे पाये गये गलतियाँ को ठीक करें"
-
-#: contrib/comments/templates/comments/preview.html:15
-msgid "Post your comment"
-msgstr "टिप्पणी प्रस्तुत करें"
-
-#: contrib/comments/templates/comments/preview.html:15
-msgid "or make changes"
-msgstr "अथवा बदलें"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "पैथॉन मॉडल क्लास नाम"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "विषय-सूची प्रकार"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "विषय-सूचियाँ प्रकार"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr ""
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "शीर्षक"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "विषय सूची"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "टिप्पणी सक्षम करें"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "टेम्प्लेट नाम"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "चपटा पृष्ट"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "चपटे पृष्ट"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "एक"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "दो"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "तीन"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "चार"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "पाँच"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "छह"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "सात"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "आठ"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "नौ"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "आज"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "कल"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "कल (बीता)"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "डाक संहिता को NNNN अथवा ANNNNAAA के प्रतिरूप में दर्ज करें ।"
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "इस क्षेत्र में संख्या भरें ।"
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "इस क्षेत्र में 7 अथवा 8 अंक दर्ज करें ।"
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "मान्य CUIT XX-XXXXXXXX-X अथवा XXXXXXXXXXXX प्रतिरूप में गर्ज करें ।"
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "अमान्य CUIT"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "बर्गनलान्ड"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "कारिन्थिया"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "निम्न आस्ट्रिया"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "ऊपरी आस्ट्रिया"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "साल्जबर्ग"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "स्टीरिया"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "टैराल"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "वोरार्लबर्ग"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "वियेन्ना"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "डाक संहिता को XXXX के प्रतिरूप में दर्ज करें ।"
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "मान्य आस्ट्रियन सोशल सेक्यूरिटी अंक को XXXX XXXXXX प्रतिरूप में भरें"
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "चार अंको की डाक संहिता भरें"
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "डाक संहिता को XXXXX-XXX के प्रतिरूप में दर्ज करें ।"
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "टेलिफ़ोन संख्या XX-XXXX-XXXX प्रतिरूप में होनी चाहिए ।"
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "मान्य ब्रजिलियन राज्य चुनिए । यह राज्य उपस्थित राज्यों में नहीं है ।"
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "अमान्य CPF संख्या ।"
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "इस क्षेत्र में 11 अथवा 14 अक्षर भरें ।"
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "अमान्य CNPJ संख्या ।"
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "इस क्षेत्र में कम से कम 14 अंक भरें"
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "डाक संहिता के XXX XXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "मान्य कनेडियन सोशल सेक्यूरिटी संख्या को XXX-XXX-XXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "आरगाव"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "अप्पेनजेल इन्नरहोडन"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "अप्पेनजेल ओसरहोडन"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "बासेल-सटाड्ट"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "बासेल-लान्ड"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "बर्न"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "फ्रीबोर्ग"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "जेनीवा"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "ग्लारस"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "ग्राबुएन्डन"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "जुरा"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "लुसेर्न"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "न्यूकाटेल"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "निड्वाल्ढेन"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "ओब्वालडेन"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "षाफहौसेन"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "ष्विज"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "सोलोथर्न"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "सन्त.गालेन"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "थुर्गाव"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "टिचिनो"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "उरी"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "वलैस"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "वौड"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "जुग"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "जूरिच"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"मान्य स्विस्स पहचान अथवा पास्सपोर्ट संख्या को X1234567<0 अथवा 1234567890 प्रतिरूप में "
-"भरें ।"
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "मान्य चिली कि RUT भरें ।"
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "मान्य चिली कि RUT भरें । XX.XXX.XXX-X प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "यह चिली का RUT अमान्य है ।"
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "बाडेन-वुएर्टेम्बर्ग"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "बवारिया"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "बर्लिन"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "ब्रान्डेनबर्ग"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "ब्रेमेन"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "हाम्बर्ग"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "हेस्सेन"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "मेकलेनबर्ग"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "लोअर साक्सोनी"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "उत्तरी रैन-वेस्टफालिया"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "रैनलान्ड-पलाटिनेट"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "सारलान्ड"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "साक्सोनी"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "साक्सोनी-अन्हाल्ट"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "ष्लेस्विग-होल्स्टैन"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "थुरिन्गिया"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "डाक संहिता को XXXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"मान्य जर्मन पहचान पत्र संख्या को XXXXXXXXXXX-XXXXXXX-XXXXXXX-X प्ततिरूप में भरें ।"
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "अरवा"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "अल्बासेट"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "अलाकान्ट"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "अल्मेरिया"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "अविला"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "बडाजोज"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "इल्लेस बालियर्स"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "बार्सिलोना"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "बर्गोस"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "कासेरेस"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "काडीज"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "कास्टेल्लो"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "स्यूडाड रियल"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "कोर्डोबा"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "आ कोरुन्या"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "कुएन्का"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "गिरोना"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "ग्रनडा"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "गुवाडलाजारा"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "गुविपुज्कोवा"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "हुएल्का"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "हुएस्का"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "जैन"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "लियोन"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "ल्लैडा"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "ला रियोजा"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "लुगो"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "माड्रिड"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "मलगा"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "मुर्किया"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "नवारे"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "अवर्सेन्स"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "अस्टुरियास"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "पलेन्शिया"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "ला पामास"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "पोन्टेवेड्रा"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "सलामन्का"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "सान्टा क्रूज द टेनेरिफे"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "कन्टाब्रिया"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "सेजोविया"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "सेविल्ला"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "सोरिया"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "तारागोना"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "तेरुवेल"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "टोलिडो"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "वलेन्शिया"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "वलाडोयिड"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "बिजकाया"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "जमोरा"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "जारागोस्सा"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "क्यूटा"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "मेलिल्ला"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "अन्डालुसिया"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "आरगोन"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "प्रिनसिपालिटी आफ अस्टुरियास"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "बलीयरिक द्वीप"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "बास्क देश"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "कनरी द्वीप"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "कास्टील-ला मान्का"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "कास्टील ओर लियोन"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "कटलोनिया"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "एक्स्ट्रीमदूरा"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "गलीशिया"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "मुर्किया प्रान्त"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "नवारे की फोरल समाज"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "वलेन्शियन समाज"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "मान्य डाक संहिता को 01XXX - 52XXX के श्रेणी और प्ततिरूप में भरें ।"
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"मान्य टेलिफोन संख्या को किसी एक प्रतिरूप में भरें : 6XXXXXXXX, 8XXXXXXXX अथवा "
-"9XXXXXXXX ।"
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "कृपया मान्य NIF, NIE अथवा CIF भरें ।"
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "कृपया मान्य NIF अथवा NIE भरें ।"
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "NIF के लिए अमान्य जाँच योग ।"
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "NIE के लिए अमान्य जाँच योग ।"
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "CIF के लिए अमान्य जाँच योग ।"
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "कृपया मान्य बैंक खाता संख्या को XXXX-XXXX-XX-XXXXXXXXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "बैंक खाता संख्या के लिए अमान्य जाँच योग ।"
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "मान्य फिन्निश सोशल सेक्यूरिटी संख्या भरें ।"
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "डाक संहिता को XXXXXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "मान्य आइस्लान्डिक पहचान संख्या भरें । उसका प्रतिरूप XXXXXX-XXXX है ।"
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "यह आइस्लान्डिक पहचान संख्या अमान्य है ।"
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "मान्य डाक संहिता भरें ।"
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "मान्य सोशल सेक्यूरिटी संख्या भरें ।"
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "मान्य VAT संख्या भरें ।"
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "डाक संहिता को XXXXXXX or XXX-XXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "होक्कायिडो"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "औमोरी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "इवाटे"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "मियागी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "अकीटा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "यमागाटा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "फुकुशीमा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "इबाराकी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "तोचिगी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "गन्मा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "सैतामा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "चीबा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "टोकियो"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "कनगावा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "यमनाशी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "नगानो"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "नीगाटा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "तोयामा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "इशीकावा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "फुकुयी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "गिफू"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "शिजुकोवा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "ऐची"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "मी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "शिगा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "क्योटो"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "ओसाका"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "ह्योगो"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "नारा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "वकायामा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "टोत्तोरी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "शिमाने"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "ओकयामा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "हिरोशीमा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "यामागुची"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "टोकुशीमा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "कगावा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "एहीमे"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "कोची"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "फुकुवोका"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "सागा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "नागासाकी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "कुमामोटो"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "ओइटा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "मियाजाकी"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "कागोशीमा"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "ओकिनावा"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "अगुवास्कालियेन्टेस"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "बाहा कालिफोर्निया"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "बाहा कालिफोर्निया सर"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "कम्पीची"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "चिहुआहुआ"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "चियापास"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "कोहुइला"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "कोलिमा"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "डिस्ट्रिटो फेड्रल"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "डुरान्गो"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "गुवेरेर्रो"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "गुवानाजुवाटो"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "हिडाल्गो"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "जलिस्को"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "एस्टादो द मेक्सिको"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "मिचोवाकान"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "मोरेलोस"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "नायारिट"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "नुवेवो लियोन"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "ओक्साका"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "पुवेब्ला"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "क्वेरेतारो"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "क्विन्ताना रू"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "सिनालोवा"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "सेन लुविस पोटोसि"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "सोनोरा"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "टबास्को"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "टमौलिपास"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "लाक्सकाला"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "वेराक्रूज"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "युकाटान"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "जकाटेकास"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "मान्य डाक संहिता भरें"
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "मान्य टेलिफोन संख्या भरें"
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "मान्य SoFi संख्या भरें"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "ड्रेनथ"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "फ्लेवोलान्ड"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "फ्रैस्लान्ड"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "जेल्डेर्लान्ड"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "ग्रोनिजेन"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "लिम्बर्ग"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "नूर्ड-ब्राबान्ट"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "नूर्ड-हालान्ड"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "ओवरिस्सेल"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "उट्रेक्क"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "जीलान्ड"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "ज्वीड-हालान्ड"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "मान्य नोर्वेजी सोशल सेक्यौरिटी संख्या भरें ।"
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "इस क्षेत्र में 8 अंक भरें ।"
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "इस क्षेंत्र में 11 अंक भरें ।"
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "राष्ट्रीय पहचान संख्या में 11 अंक भरें ।"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "राष्ट्रीय पहचान संख्या में गलत जाँच योग ।"
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "कर संख्या क्षेत्र (NIP) को XXX-XXX-XX-XX अथवा XX-XX-XXX-XXX प्रतोरूप में भरें ।"
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "कर संख्या के लिए गलत जाँच योग ।"
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "डाक संहिता को XX-XXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "लोवर सिलेसिया"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "कुयाविया-पोमेरानिया"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "लब्लिन"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "लुबुस्ज"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "लोड्ज"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "लेस्सर पोलान्ड"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "मसोविया"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "ओपोल"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "सबकारपेथिया"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "पोदलासी"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "पोमेरानिया"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "सिलेसिया"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "स्विटोक्रिस्की"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "वार्मिया-मासुरिया"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "ग्रेटर पोलान्ड"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "पश्चिम पोमेरानिया"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "मान्य CIF भरें ।"
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "मान्य CNP भरें ।"
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "मान्य IBAN को ROXX-XXXX-XXXX-XXXX-XXXX-XXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "टेलिफोन संख्या को XXXX-XXXXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "मान्य डाक संहिता को XXXXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "डाक संहिता को XXXXX अथवा XXX XX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "बान्का बिस्ट्रिका"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "बान्का स्टियानिका"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "बार्डेजोव"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "बनोव्स नाड बेब्राव"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "ब्रेजनोव"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "ब्राटिस्लावा 1"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "ब्राटिस्लावा 2"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "ब्राटिस्लावा 3"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "ब्राटिस्लावा 4"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "ब्राटिस्लावा 5"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "बैट्चा"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "काड्का"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "डेत्वा"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "डोल्नी कुबिन"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "डुनास्का स्ट्रेडा"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "गलान्टा"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "गेल्निका"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "लोहोवेक"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "हुमेन्न"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "ल्लावा"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "केजमारोक"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "कोमार्नो"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "कोसिस 1"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "कोसिस 2"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "कोसिस 3"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "कोसिस 4"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "कोसिस - ओकोली"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "क्रूपिना"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "क्यसुके नोवे मेस्तो"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "लेविस"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "लेवोका"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "लिप्टोस्की मिकुलास"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "लुसेनेक"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "मलाकी"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "मार्टिन"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "मेड्जिलाबोर्स"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "मिकालोव्स"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "मैजावा"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "नमस्तोवो"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "निट्रा"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "नोवे मेस्टो नाड वाहोम"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "नोवे जाम्की"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "पार्तिजास्के"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "पेजिनोक"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "पियेस्तानी"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "पोल्टार"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "पोप्राड"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "पोवास्का बैस्ट्रिका"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "प्रेसोव"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "प्रियेविसा"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "पुकाव"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "रेवुका"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "रिमास्का सोबोटा"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "रोजोनावा"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "रुजोम्बेरोक"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "सबिनोव"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "सेनेक"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "सेनिका"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "स्कालिका"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "स्नीना"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "सोब्रानस"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "स्पिस्का नोवा वेस"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "स्टारा लुब्नोवा"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "स्ट्रोकोव"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "स्विड्निक"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "साला"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "टोपोल्कानी"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "ट्रेबिसोव"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "ट्रेन्किन"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "ट्रनावा"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "टुर्षियान्के टेप्लिस"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "दोसिन"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "वेलकी रिटिस"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "रानोव नाड टोप्लोव"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "लाटे मोरास"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "वोलेन"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "जार्नोडिका"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "जियर नाड रोनोम"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "जिलिना"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "बान्का बिस्ट्रिका प्रान्त"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "ब्राटिस्लावा प्रान्त"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "कोसिस प्रान्त"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "निट्रा प्रान्त"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "प्रेसोव प्रान्त"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "ट्रेन्किन प्रान्त"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "नावा प्रान्त"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "जिलिना प्रान्त"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "मान्य डाक संहिता भरें ।"
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "बेडफार्डशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "बकहिन्गमशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "चेशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "कार्नवाल और सिसिली द्वीप"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "क्मब्रिया"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "डेर्बीशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "डेवोन"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "डोर्सेट"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "डर्हम"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "पूर्वी सस्सेक्स"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "एस्सेक्स"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "ग्लौसेस्टरशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "ग्रेटर लन्डन"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "ग्रेटर मानचेस्टर"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "हाम्पशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "हर्टफार्डशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "केन्ट"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "लान्काशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "लेसेस्टशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "लिन्कनशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "मेर्सीसैड"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "नोर्फोक"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "उत्तरी यार्कशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "नार्थाम्पटनशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "नार्थम्बरलान्ड"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "नाटिन्गहमशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "आक्सफर्डशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "श्रापशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "सोमर्सेट"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "दक्षिणी यार्कशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "स्टाफोर्डशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "सफ्फोक"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "सर्रे"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "टैन और वेर"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "वार्विकशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "पश्चिमी मिडलान्ड"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "पश्चिमी ससेक्स"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "पश्चिमी यार्कशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "विल्टशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "वर्सेस्टशायर"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "कौन्टी आन्ट्रिम"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "कौन्टी आर्माघ"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "कौन्टी डौन"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "कौन्टी फर्मानाघ"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "कौन्टी लन्डनडेर्री"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "कौन्टी टैरोन"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "लिविड"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "डैफेड"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "ग्वेन्ट"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "ग्वैनीड"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "मिड ग्लामोर्गान"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "पोवीस"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "दक्षिणी ग्लामोर्गान"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "पश्चिमी ग्लामोर्गान"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "बोर्डार्स"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "सेंट्रल स्काटलान्ड"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "डमफ्रैस और गालोवे"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "फिफे"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "ग्राम्पियेन"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "हैलान्ड"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "लोथियन"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "ओर्कनी द्वीप"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "शेटलान्ड द्वीप"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "स्ट्राथक्लैड"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "टेसैड"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "पश्चिमी आय्लस"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "इन्गलान्ड"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "उत्तरी आयरलान्ड"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "स्काटलान्ड"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "वेल्स"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "डाक संहिता को XXXXX अथवा XXXXX-XXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "मान्य U.S सोशल सेक्यूरिटी संख्या को XXX-XX-XXXX प्रतिरूप में भरें ।"
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "मान्य दक्षिणि आफ्रिकी आइ.डि संख्या भरें"
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "मान्य दक्षिणि आफ्रिकी डाक संहिता संख्या भरें"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "पूर्वी केप"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "फ्री स्टेट"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "गौटेन्ग"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "क्वाजूलू-नटाल"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "लिम्पोपो"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "पुमलान्गा"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "उत्तरी केप"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "उत्तर पूर्व"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "पश्चिमी केप"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr ""
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr ""
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "पुनः प्रेषित"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "पुनः प्रेषित"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr ""
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr ""
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr ""
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "सत्र"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "सत्रें"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "डोमेन नाम"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "प्रदर्शन नाम"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "साइट"
-
-#: db/models/fields/__init__.py:348 db/models/fields/__init__.py:683
-msgid "This value must be an integer."
-msgstr "यह मूल्य पूर्णांक होना चाहिए ।"
-
-#: db/models/fields/__init__.py:379
-msgid "This value must be either True or False."
-msgstr "यह मूल्य सही अथवा गलत होना चाहिए ।"
-
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "यह मूल्य खाली नहीं हो सकता ।"
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "अल्पविराम अंक मात्र ही भरें ।"
-
-#: db/models/fields/__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "वैध तिथि को सससस-मम-दिदि सरूप में भरें"
-
-#: db/models/fields/__init__.py:468
-#, python-format
-msgid "Invalid date: %s"
-msgstr "अमान्य तिथि : %s"
-
-#: db/models/fields/__init__.py:532 db/models/fields/__init__.py:550
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "वैध तिथि/समय को सससस-मम-दिदि[:सेसे[.सूसूसूसूसूसू]] सुरूप में भरें"
-
-#: db/models/fields/__init__.py:586
-msgid "This value must be a decimal number."
-msgstr "यस मूल्य दशांश संख्या मात्र ही हो सकता है ।"
-
-#: db/models/fields/__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr "यह मूल्य कोई नहीं, सही अथवा गलत ही हो सकता है ।"
-
-#: db/models/fields/__init__.py:817 db/models/fields/__init__.py:831
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-
-#: db/models/fields/related.py:761
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-msgstr[1] ""
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "यह क्षेत्र अपेक्षित हैं"
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "एक मान्य मूल्य दर्ज करें"
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "एक पूर्ण संख्या दर्ज करें ।"
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr ""
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr ""
-
-#: forms/fields.py:195 forms/fields.py:224
-msgid "Enter a number."
-msgstr "एक संख्या दर्ज करें ।"
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr ""
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr ""
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-
-#: forms/fields.py:287 forms/fields.py:849
-msgid "Enter a valid date."
-msgstr "वैध तिथि भरें ।"
-
-#: forms/fields.py:321 forms/fields.py:850
-msgid "Enter a valid time."
-msgstr "वैध समय भरें ।"
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "वैध तिथि/समय भरें ।"
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "कोई संचिका निवेदित नहीं हुई । कृपया कूटलेखन की जाँच करें ।"
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "कोई संचिका निवेदित नहीं हुई ।"
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "निवेदित संचिका खाली है ।"
-
-#: forms/fields.py:477
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "वैध चित्र निवेदन करें । आप के द्वारा निवेदित संचिका अमान्य अथवा दूषित है ।"
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "वैध यू.आर.एल भरें ।"
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr ""
-
-#: forms/fields.py:618 forms/fields.py:696
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "मान्य इच्छा चयन करें । %(value)s लभ्य इच्छाओं में उप्लब्ध नहीं हैं ।"
-
-#: forms/fields.py:697 forms/fields.py:758 forms/models.py:720
-msgid "Enter a list of values."
-msgstr "मूल्य सूची दर्ज करें ।"
-
-#: forms/fields.py:878
-msgid "Enter a valid IPv4 address."
-msgstr "वैध आइ.पि वी 4 पता भरें ।"
-
-#: forms/fields.py:888
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-
-#: forms/formsets.py:242 forms/formsets.py:244
-msgid "Order"
-msgstr "छाटें"
-
-#: forms/models.py:281 forms/models.py:290
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "इस %(field_label)s के साथ एक %(model_name)s पहले से ही उपस्थित है ।"
-
-#: forms/models.py:587
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: forms/models.py:650
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "मान्य विकल्प चयन करें । यह विकल्प उपस्थित विकल्पों में नहीं है ।"
-
-#: forms/models.py:721
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "मान्य विकल्प चयन करें । %s उपस्थित विकल्पों में नहीं है ।"
-
-#: template/defaultfilters.py:741
-msgid "yes,no,maybe"
-msgstr "हाँ, नहीं, शायद"
-
-#: template/defaultfilters.py:772
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d बाइट"
-msgstr[1] "%(size)d बाइट"
-
-#: template/defaultfilters.py:774
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f के.बी"
-
-#: template/defaultfilters.py:776
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f एम.बी"
-
-#: template/defaultfilters.py:777
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f जी.बी"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "बजे"
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "बजे"
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "बजे"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "बजे"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "मध्यरात्री"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "दोपहर"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "सोम‌वार"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "मंगलवार"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "बुधवार"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "गुरूवार"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "शुक्रवार"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "शनिवार"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "रविवार"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "सोम"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "मंगल"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "बुध"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "गुरू"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "शुक्र"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "शनि"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "रवि"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "जनवरी"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "फ़रवरी"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "मार्च"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "अप्रैल"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "मई"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "जून"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "जुलाई"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "अगस्त"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "सितमबर"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "अक्टूबर"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "नवमबर"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "दिसमबर"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "जन"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "फ़र"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "मा"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "अप्र"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "मई"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "जून"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "जुल"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "अग"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "सित"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "अक्ट"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "नव"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "दिस्"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "जन."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "फ़र."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "अग."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "सितम्."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "अक्ट."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "नव."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "दिस्."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "अथवा"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "साल"
-msgstr[1] "साल"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "महीना"
-msgstr[1] "महीना"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "सप्ताह"
-msgstr[1] "सप्ताह"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "दिन"
-msgstr[1] "दिन"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "घंटा"
-msgstr[1] "घंटा"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "मिनट"
-msgstr[1] "मिनट"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "मिनट"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "तिथि_प्रारूप"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "समय_प्रारूप"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "वर्ष_महीना_प्रारूप"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "महीना_दिन_प्रारूप"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s को कामयाबी से निर्माण किया गया हैं ।"
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s को कामयाबी से अद्यतन किया गया हैं ।"
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s को मिटाया गया हैं ।"
diff --git a/parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 6c422ef..0000000
--- a/parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 6d37095..0000000
--- a/parts/django/django/conf/locale/hi/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,116 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-27 11:30+0530\n"
-"PO-Revision-Date: 2008-09-27 12:36+0530\n"
-"Last-Translator: Thejaswi Puthraya <thejaswi.puthraya@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "उपलब्ध %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "सारे चुनें"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "जोड़ना"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "हटाना"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s चुना गया हैं"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "आपके पसंद चुनिये और क्लिक करें"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "सारे हटाओ"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid "January February March April May June July August September October November December"
-msgstr "जनवरी फ़रवरी मार्च अप्रैल मई जून जुलाई अगस्त सेप्टम्बर अक्टूबर नवंबर दिसम्‍बर"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "आ सो म बु गु शु श"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "रविवार सोमवार मंगलवार बुधवार गुरूवार शुक्रवार शनिवार"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "दिखाना"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "छिपाना"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "अब"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "घड़ी"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "एक समय चुनें"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "मध्यरात्री"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 बजे"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "दोपहर"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "रद्द करें"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "आज"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "तिथि-पत्र "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "कल (बीता)"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "कल"
-
diff --git a/parts/django/django/conf/locale/hi/__init__.py b/parts/django/django/conf/locale/hi/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/hi/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/hi/formats.py b/parts/django/django/conf/locale/hi/formats.py
deleted file mode 100644
index 6afa258..0000000
--- a/parts/django/django/conf/locale/hi/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd-m-Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/hr/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/hr/LC_MESSAGES/django.mo
deleted file mode 100644
index cb50e47..0000000
--- a/parts/django/django/conf/locale/hr/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/hr/LC_MESSAGES/django.po b/parts/django/django/conf/locale/hr/LC_MESSAGES/django.po
deleted file mode 100644
index a902004..0000000
--- a/parts/django/django/conf/locale/hr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5199 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 19:06+0200\n"
-"PO-Revision-Date: 2010-05-10 18:56+0200\n"
-"Last-Translator: Aljosa Mohorovic <aljosa.mohorovic@gmail.com>\n"
-"Language-Team: Django i18n team <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
-"n%100==4 ? 2 : 3);\n"
-"X-Generator: Lokalize 1.0\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arapski"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bugarski"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalski"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bošnjački"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Katalanski"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Češki"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Velški"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Danski"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Njemački"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Grčki"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Engleski"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Britanski engleski"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Španjolski"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Argentinski španjolski"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estonski"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Baskijski"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Perzijski"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Finski"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Francuski"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frizijski"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irski"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galičanski"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hebrejski"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Hrvatski"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Mađarski"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Indonezijski"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Islandski"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Talijanski"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Japanski"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Gruzijski"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Kambođanski"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Koreanski"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Litvanski"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Latvijski"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Makedonski"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "Mongolski"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "Nizozemski"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "Norveški"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "Norveški Bokmal"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "Norveški Nynorsk"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "Poljski"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "Portugalski"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "Brazilski portugalski"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "Rumunjski"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "Ruski"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "Slovački"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "Slovenski"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "Albanski"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "Srpski"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "Latinski srpski"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "Švedski"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "Tamilski"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "Teluški"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "Thai (tajlandski)"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "Turski"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "Ukrajinski"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "Vijetnamski"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "Pojednostavljeni kineski"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "Tradicionalni kineski"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Uspješno izbrisano %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Jeste li sigurni?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Izbrišite odabrane %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Po %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Svi"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Bilo koji datum"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Danas"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Prošlih 7 dana"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Ovaj mjesec"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Ova godina"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Da"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Ne"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Nepoznat pojam"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Akcija:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "vrijeme akcije"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id objekta"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "repr objekta"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "oznaka akcije"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "promijeni poruku"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "zapis"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "zapisi"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Nijedan"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Promijenjeno %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "i"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Dodano %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Promijeni %(list)s za %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Izbrisani %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Nije bilo promjena polja."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" uspješno je dodano."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Možete ponovo urediti unos dolje."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Možete dodati još jedan %s ispod."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" uspješno promijenjeno."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" uspješno dodan. Možete ponovo urediti unos dolje."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Unosi moraju biti odabrani da bi se nad njima mogle izvršiti akcije. Nijedan "
-"unos nije promijenjen."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Nije odabrana akcija."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Novi unos (%s)"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Unos %(name)s sa primarnim ključem %(key)r ne postoji."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Promijeni %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Pogreška u bazi"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s uspješno promijenjen."
-msgstr[1] "%(count)s %(name)s uspješno promijenjeno."
-msgstr[2] "%(count)s %(name)s uspješno promijenjeno."
-msgstr[3] "%(count)s %(name)s uspješno promijenjeno."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s odabrano"
-msgstr[1] "Svih %(total_count)s odabrano"
-msgstr[2] "Svih %(total_count)s odabrano"
-msgstr[3] "Svih %(total_count)s odabrano"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 od %(cnt)s odabrano"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" uspješno izbrisan."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Promijeni povijest: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Molim unesite ispravno korisničko ime i lozinku. Uzmite u obzir da oba polja "
-"razlikuju velika/mala slova."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Molim prijavite se ponovo jer je vaš session istekao."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Izgleda da vaš browser nije podešen da prihvaća kolačiće (cookies). Molimo "
-"promijenite postavke, ponovno učitajte stranicu i pokušajte ponovo."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Korisnička imena ne mogu sadržavati '@' znak."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Vaša e-mail adresa nije vaše korisničko ime. Pokušajte sa '%s'"
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Administracija stranica"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Prijavi se"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s administracija"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Datum:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Vrijeme:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Trenutno:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Promijeni:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Potraži"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Unesi još"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Stranica nije pronađena"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Ispričavamo se, ali tražena stranica nije pronađena."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Početna"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Greška na serveru"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Greška na serveru (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Greška na serveru <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Dogodila se greška. Administratori su obaviješteni putem e-maila te bi "
-"greška uskoro trebala biti ispravljena. Hvala na strpljenju."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Izvrši odabranu akciju"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Idi"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Klikni ovdje da bi odabrao unose kroz sve stranice"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Odaberi svih %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Očisti odabir"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Dobrodošli,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentacija"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Promijeni lozinku"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Odjava"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administracija stranica"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administracija"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Novi unos"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Povijest"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Pogledaj na stranicama"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Molimo ispravite navedenu grešku."
-msgstr[1] "Molimo ispravite navedene greške."
-msgstr[2] "Molimo ispravite navedene greške."
-msgstr[3] "Molimo ispravite navedene greške."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Novi unos - %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filter"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Izbriši"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Brisanje %(object_name)s '%(escaped_object)s' rezultiralo bi brisanjem "
-"povezanih objekta, ali vi nemate privilegije za brisanje navedenih objekta: "
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Jeste li sigurni da želite izbrisati %(object_name)s \"%(escaped_object)s\"? "
-"Svi navedeni objekti biti će izbrisani:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Da, siguran sam"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Izbriši više unosa."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Brisanje %(object_name)s rezultiralo bi brisanjem povezanih objekta, ali vi "
-"nemate privilegije za brisanje navedenih objekta: "
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Jeste li sigurni da želite izbrisati odabrane %(object_name)s? Svi navedeni "
-"objekti i povezani unosi biti će izbrisani:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Po %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeli dostupni u %(name)s aplikaciji."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Promijeni"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Nemate privilegije za promjenu podataka."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Nedavne promjene"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Moje promjene"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nije dostupno"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Sadržaj nepoznat"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Nešto nije uredu sa instalacijom/postavkama baze. Provjerite jesu li "
-"potrebne tablice u bazi kreirane i provjerite je li baza dostupna korisniku."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Korisničko ime:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Lozinka:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datum/vrijeme"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Korisnik"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Akcija"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Ovaj objekt nema povijest promjena. Moguće je da nije dodan korištenjem ove "
-"administracije."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Prikaži sve"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Spremi"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Traži"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 rezultat"
-msgstr[1] "%(counter)s rezultata"
-msgstr[2] "%(counter)s rezultata"
-msgstr[3] "%(counter)s rezultata"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s ukupno"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Spremi kao novi unos"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Spremi i unesi novi unos"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Spremi i nastavi uređivati"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Prvo, unesite korisničko ime i lozinku. Onda možete promijeniti više "
-"postavki korisnika."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Unesite novu lozinku za korisnika <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Lozinka"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Lozinka (unesi ponovo)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Unesite istu lozinku, za potvrdu."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Dodaj još jedan %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Ukloni"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Izbriši?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Hvala što ste proveli malo kvalitetnog vremena na stranicama danas."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Prijavite se ponovo"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Promjena lozinke"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Promjena lozinke uspješna"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Vaša lozinka je promijenjena."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Molim unesite staru lozinku, zbog sigurnosti, i onda unesite novu lozinku "
-"dvaput da bi mogli provjeriti jeste li je ispravno unijeli."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Stara lozinka"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nova lozinka"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Promijeni moju lozinku"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Resetiranje lozinke"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Resetiranje lozinke završeno"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Vaša lozinka je postavljena. Sada se možete prijaviti."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Potvrda promjene lozinke"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Unesite novu lozinku"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Molimo vas da unesete novu lozinku dvaput da bi mogli provjeriti jeste li je "
-"ispravno unijeli."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nova lozinka:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potvrdi lozinku:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Resetiranje lozinke neuspješno"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Link za resetiranje lozinke je neispravan, vjerojatno jer je već korišten. "
-"Molimo zatražite novo resetiranje lozinke."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Resetiranje lozinke uspješno"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Poslali smo vam upute za postavljenje vaše lozinke na e-mail adresu koju ste "
-"unijeli. Trebali bi je uskoro primiti."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Dobili ste ovaj e-mail jer ste zatražili resetiranje lozinke"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "za vaš korisnički račun na %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Molimo otiđite do sljedeće stranice i odaberite novu lozinku:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Vaše korisničko ime, u slučaju da ste zaboravili:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Hvala šta koristite naše stranice!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s tim"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Zaboravili ste lozinku? Unesite vašu e-mail adresu ispod i poslati ćemo vam "
-"upute kako postaviti novu."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mail adresa:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Resetiraj moju lozinku"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Svi datumi"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Odaberi %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Odaberi za promjenu - %s"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "stranica"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "template"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "prikaz:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikacija %r nije pronađena"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "povezani `%(app_label)s.%(data_type)s` objekt"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "povezani `%(app_label)s.%(object_name)s` objekti"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "svi %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "broj %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Polja na %s objektima"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "izgleda da %s nije urlpattern objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentacija bookmarklets-a"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Da bi instalirali bookmarklet, povucite link na svoj "
-"bookmarks\n"
-"toolbar, ili desnim klikom na link dodajte u svoje bookmarke. Sada možete\n"
-"selektirati bookmarklet sa bilo koje stranice. Zapamtite da neki "
-"bookmarkleti\n"
-"zahtjevaju da gledate stranice sa računala označenog\n"
-"kao \"internal\" (razgovarajte sa svojim sistem administratorom ako niste "
-"sigurni\n"
-"je li vaše računalo \"internal\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentacija za ovu stranicu"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Preusmjeri te sa bilo koje stranice na dokumentaciju za taj prikaz (view) "
-"koji generira stranicu."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Prikaži ID objekta"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Prikazuje tip sadržaja (content-type) i jedinstveni ID za stranice koje "
-"predstavljaju pojedinačan objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Uredi objekt (u trenutnom prozoru)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Preusmjeri na admin stranicu za stranice koje predstavljaju pojedinačan "
-"objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Uredi objekt (u novom prozoru)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Isto kao prethodno, ali otvara admin stranicu u novom prozoru."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Osobni podaci"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Privilegije"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Važni datumi"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupe"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Lozinka uspješno promijenjena."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Promijeni lozinku: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Korisničko ime"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Obavezan unos. 30 alfanumeričkih znakova ili manje. Samo slova, brojevi i "
-"@/./+/-/_ znakovi."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-"Ova vrijednost može sadržavati samo slova, brojeve i @/./+/-/_ znakove."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Potvrda lozinke"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Korisnik sa navedenim imenom već postoji."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Dva polja za lozinku nisu jednaka."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Ovaj korisnički račun nije aktivan."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Izgleda da Vaš browser ne podržava kolačiće (cookies). Kolačići su potrebni "
-"da bi se prijavili."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Za navedenu e-mail adresu ne postoji korisnički račun. Jeste li sigurni da "
-"ste registrirani?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Lozinka resetirana na %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Potvrda nove lozinke"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Vaša stara lozinka je pogrešno unesena. Molim unesite ponovo."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "ime"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kodno ime"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "privilegija"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "privilegije"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupa"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupe"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "korisničko ime"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Obavezan unos. 30 alfanumeričkih znakova ili manje. Samo slova, brojevi i "
-"@/./+/-/_ dozvoljeni."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "ime"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "prezime"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-mail adresa"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "lozinka"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Koristite '[algo]$[salt]$[hexdigest]' ili <a href=\"password/\">formu za "
-"promjenu lozinke</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "status osoblja"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Određuje može li se korisnik prijaviti na ove stranice administracije."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktivan"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Određuje treba li se ovaj korisnik tretirati kao aktivan korisnik. Koristite "
-"ovu opciju umjesto brisanja korisničkih računa."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "superuser status"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Određuje da ovaj korisnik ima sve privilegije te uklanja potrebu da se "
-"privilegije unose eksplicitno/ručno."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "posljednja prijava"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "datum učlanjenja"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Uz ručno dodane privilegije korisnik će također dobiti sve privilegije "
-"odobrene grupama kojima korisnik pripada."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "privilegije korisnika"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "korisnik"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "korisnici"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "poruka"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Niste logirani"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Unesite ispravnu e-mail adresu."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Sadržaj"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "oznaka"
-msgstr[1] "oznake"
-msgstr[2] "oznake"
-msgstr[3] "oznake"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Označi ovaj komentar"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "odobreno"
-msgstr[1] "odobrene"
-msgstr[2] "odobrene"
-msgstr[3] "odobrene"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Odobri odabrane komentare"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "uklonjeno"
-msgstr[1] "uklonjena"
-msgstr[2] "uklonjena"
-msgstr[3] "uklonjena"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Ukloni odabrane komentare"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 komentar je uspješno %(action)s."
-msgstr[1] "%(count)s komentara su uspješno %(action)s."
-msgstr[2] "%(count)s komentara su uspješno %(action)s."
-msgstr[3] "%(count)s komentara su uspješno %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "komentari za %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Najnoviji komentari na %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Ime"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-mail adresa"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pazite na izražavanje! Riječ %s nije dopuštena."
-msgstr[1] "Pazite na izražavanje! Riječi %s nisu dopuštene."
-msgstr[2] "Pazite na izražavanje! Riječi %s nisu dopuštene."
-msgstr[3] "Pazite na izražavanje! Riječi %s nisu dopuštene."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Ako unesete nešto u ovo polje vaš komentar biti će tretiran kao spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tip sadržaja"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID objekta"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "korisničko ime"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "e-mail adresa korisnika"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "korisnikov URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "datum/vrijeme unosa"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP adresa"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "javno dostupno"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Uklonite oznaku da bi komentar nestao sa stranica."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "uklonjeno"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Uključite ako je komentar neprikladan. Umjesto komentara biti će prikazana "
-"poruka \"Komentar je uklonjen.\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentari"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Ovaj komentar je napisao prijavljeni korisnik te se ime ne može mijenjati.\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Ovaj komentar je napisao prijavljeni korisnik te se email ne može "
-"mijenjati.\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Napisao %(user)s dana %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "oznaka"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "datum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "oznaka za komentar"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "oznake komentara"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Odobri komentar"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Učini komentar javno dostupnim?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Odobri"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Hvala na odobrenju"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Hvala što ste izdvojili vrijeme da poboljšate kvalitetu rasprava na "
-"stranicama"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Ukloni komentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Stvarno ukloni ovaj komentar?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Hvala na brisanju"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Označi ovaj komentar"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Stvarno označi ovaj komentar?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Oznaka"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Hvala na označavanju"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Unos"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Prikaz"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Hvala što ste komentirali"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Hvala na komentaru"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Prikaz komentara"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Molimo ispravite navedenu grešku."
-msgstr[1] "Molimo ispravite navedene greške."
-msgstr[2] "Molimo ispravite navedene greške."
-msgstr[3] "Molimo ispravite navedene greške."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Objava komentara"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "ili unesite promjene"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "ime klase (class) python modela"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipovi sadržaja"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Primjer: '/about/contact/'. Provjerite ako imate prvi i preostale slash-eve "
-"(/)."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Ova vrijednost može sadržavati samo slova, brojeve, povlaku, crtice ili "
-"slashes (/)."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Napredne opcije"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "naslov"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "sadržaj"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "uključi komentare"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "ime template-a"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Primjer: 'flatpages/contact_page.html'. Ako navedeno nije definirano sistem "
-"će koristiti 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "registracija obavezna"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ako je ovo selektirano samo logirani korisnici moći će vidjeti ovu stranicu."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "statična stranica"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "statične stranice"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Ispričavamo se, ali vaš obrazac je istekao. Molimo nastavite ispunjavati "
-"obrazac od ove stranice."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Osnovno GIS polje -- mapira OpenGIS Specification Geometry tip."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Točka"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Linija (Line string)"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Poligon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Više točaka"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Više linija (Line string)"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Više poligona"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Geometrijska kolekcija"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Geometrijska vrijednost nije priložena."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Neispravna geometrijska vrijednost."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Neispravan geometrijski tip."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Došlo je do greške pri transformaciji geometrije na SRID geometrijskog polja "
-"forme."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milijun"
-msgstr[1] "%(value).1f milijuna"
-msgstr[2] "%(value).1f milijuna"
-msgstr[3] "%(value).1f milijuna"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milijarda"
-msgstr[1] "%(value).1f milijarde"
-msgstr[2] "%(value).1f milijarde"
-msgstr[3] "%(value).1f milijarde"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f bilion"
-msgstr[1] "%(value).1f biliona"
-msgstr[2] "%(value).1f bilion"
-msgstr[3] "%(value).1f bilion"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "jedan"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dva"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "četiri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "pet"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "šest"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sedam"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "osam"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "devet"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "danas"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "sutra"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "jučer"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Unesite ispravan poštanski broj formata NNNN ili ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Ovo polje zahtjeva samo brojeve."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Ovo polje zahtjeva 7 ili 8 numeričkih znakova."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Unesite ispravan CUIT formata XX-XXXXXXXX-X ili XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Neispravan CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Donja Austrija"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Gornja Austrija"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Štajerska"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Beč"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Unesite zip kod formata XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Unesite ispravan broj socijalnog osiguranja Austrije formata XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Unesite poštanski kod sa 4 numerička znaka."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Unesite zip kod formata XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonski brojevi moraju biti formata XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Izaberite ispravnu brazilsku državu. Država nije jedna od dostupnih država."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Neispravan CPF broj."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Ovo polje zahtjeva najviše 11 numeričkih znakova ili 14 slova."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Neispravan CNPJ broj."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Ovo polje zahtjeva bar 14 numeričkih znakova"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Unesite poštanski broj formata XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Unesite valjani kanadski broj socijalnog osiguranja formata XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Ženeva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Unesite ispravan švicarski identifikacijski broj ili broj putovnice formata "
-"X1234567<0 ili 1234567890"
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Unesite ispravan čileanski RUT"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Unesite ispravan čileanski RUT formata XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Čileanski RUT nije ispravan."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prag"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Središnja Češka"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Južna Češka"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Plzeňski kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karlovarski kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Ústečki kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberečki kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Královéhradečki kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubički kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysočina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Južna Moravska"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomoučki kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlínski kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravsko-šleski kraj"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Unesi ispravan poštanski broj formata XXXXX ili XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Unesite datum rođenja formata XXXXXX/XXXX ili XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Neispravnan opcijonalni parametar spol, ispravne vrijednosti su 'f' i 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Unesite ispravan datum rodenja."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Unesite ispravan IC broj."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Donja Saska"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Sjeverno Porajnje-Zapadna Falačka"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saska"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Unesite zip kod formata XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Unesite broj njemačke identifikacijske kartice formata XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Kneževina Asturija"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearsko otočje"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskija"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanarski Otoci"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastilja-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastilja i Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalonija"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Regija Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Unesite ispravan poštanski broj u rasponu i formatu od 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Unesite ispravan broj telefona u jednom od formata 6XXXXXXXX, 8XXXXXXXX ili "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Unesite ispravan NIF, NIE ili CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Molim unesite ispravan NIF ili NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Neispravan checksum za NIF"
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Neispravan checksum za NIF"
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Neispravan checksum za CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Molim unesite ispravan broj bankovnog računa formata XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Neispravan checksum za broj bankovnog računa."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Unesite ispravan broj finskog socijalnog osiguranja."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonski brojevi moraju biti formata 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Unesite ispravan poštanski broj"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Unesite ispravan telefonski broj"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Unesite ispravanu registraciju za vozilo"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Unesite ispravan NIK/KTP broj."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Džakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federalna vlada"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wexford"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Unesi ispravan zip kod formata XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Unesite ispravan islandski identifikacijski broj formata XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Islandski identifikacijski broj nije ispravan."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Unesite ispravan zip kod."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Unesite ispravan broj socijalnog osiguranja."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Unesite ispravan VAT broj."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Unesite poštanski broj formata XXXXXXX or XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Unesi ispravan kuvajtski Civil ID broj."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Država Meksiko"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Unesite ispravan poštanski broj"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Unesite ispravan SoFi broj"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Unesite ispravan broj norveškog socijalnog osiguranja."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Ovo polje zahtjeva 8 numeričkih znakova."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Ovo polje zahtjeva 11 numeričkih znakova."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Nacionalni identifikacijski broj sadrži 11 numeričkih znakova."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Neispravan checksum za Nacionalni identifikacijski broj."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Unesite ispravan porezni broj (NIP) formata XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Neispravan checksum za porezni broj (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"National Business Register Number (REGON) sastoji se od 9 ili 14 numeričkih "
-"znakova."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Neispravan checked za National Business Register Number (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Unesi poštanski broj formata XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Donja Šleska"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Mala Poljska"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Šleska"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Unesite poštanski broj u formatu XXX-XXXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Telefonski brojevi moraju imati 9 brojeva, ili početi sa + ili 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Unesite ispravan CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Unesite ispravan CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Unesite ispravan IBAN formata ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonski brojevi moraju biti formata XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Unesite ispravan poštanski broj formata XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Unesite valjani broj švedske organizacije."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Unesite ispravan švedski osobni identifikacijski broj."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Koordinacijski brojevi nisu dozvoljeni."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Unesite švedski poštanski broj formata XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Regija Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Regija Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Regija Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Regija Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Regija Presov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Regija Trencin"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Regija Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Regija Zilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Unesite ispravan poštanski broj."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall i Otoci Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Županija Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Županija Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Županija Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Županija Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Županija Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Županija Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Južni Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Zapadni Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Centralna Škotska"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Zapadno Otočje"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Engleska"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Sjeverna irska"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Škotska"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Unesite zip kod formata XXXXX or XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonski brojevi moraju biti u XXX-XXX-XXXX formatu."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Unesi ispravan broj socijalnog osiguranja S.A.D.-a formata XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Unesite državu ili teritorij u SAD-u."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Država S.A.D.-a (dva velika slova)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonski broj"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Unesite valjani CI broj u X.XXX.XXX-X, XXXXXXX-X ili XXXXXXXX formatu."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Unesite ispravan CI broj."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Unesi ispravan južnoafrički ID broj."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Unesite ispravan južnoafrički poštanski broj."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "lijena poruka (\"lazy message\")"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "preusmjeri od"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ovo bi trebala biti apsolutna putanja, bez imena domene. Primjer: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "preusmjeri na"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ovo može biti ili apsolutna putanja (kao gore) ili potpuni URL koji počinje "
-"sa 'http://'"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "preusmjeri"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "preusmjeravanja"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "session ključ (key)"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "session podaci"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "ističe na datum"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "session"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessions"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "ime domene"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "ime za prikaz"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "stranice"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Unesite ispravnu vrijednost."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Unesite ispravan URL."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Izgleda da je URL neispravan."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Unesite ispravan 'slug' koji se sastoji samo od slova, brojeva, povlaka ili "
-"crtica."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Unesite ispravnu IPv4 adresu."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Unesite samo brojeve razdvojene zarezom."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Osigurajte da ova vrijednost ima %(limit_value)s (trenutno je %(show_value)"
-"s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Osigurajte da je ova vrijednost manja ili jednaka %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Osigurajte da je ova vrijednost veća ili jednaka %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Osigurajte da ova vrijednost ima najmanje %(limit_value)d znakova (ima %"
-"(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Osigurajte da ova vrijednost ima najviše %(limit_value)d znakova (ima %"
-"(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"%(field_name)s mora biti jedinstven pojam za %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s sa navedenim %(field_label)s već postoji."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Vrijednost %r nije ispravan izbor."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Ovo polje ne može biti null."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Ovo polje ne može biti prazno."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Polje tipa: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Cijeli broj"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Vrijednost mora biti cijeli broj."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Vrijednost mora biti True ili False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (True ili False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Slova (do %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Cijeli brojevi odvojeni zarezom"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Datum (bez vremena/sati)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Unesite ispravan datum u formatu YYYY-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Neispravan datum: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Unesite ispravan datum/vrijeme u formatu YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Datum (sa vremenom/satima)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Vrijednost mora biti decimalan broj."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Decimalni broj"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-mail adresa"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Put do datoteke"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Vrijednost mora biti float."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Broj s pomičnim zarezom (floating point number)"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Big (8 byte) integer"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Vrijednost mora biti None, True ili False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (True, False ili None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Tekst"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Vrijeme"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Unesite ispravno vrijeme formata HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML tekst"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Model %(model)s sa pk %(pk)r ne postoji."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Foreign Key (type determined by related field)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "One-to-one relationship"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Many-to-many relationship"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Držite \"Control\", ili \"Command\" na Mac-u, da bi odabrali više od jednog "
-"objekta."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Molimo unesite ispravne %(self)s ID-eve. Vrijednost %(value)r je neispravna."
-msgstr[1] ""
-"Molimo unesite ispravne %(self)s ID-eve. Vrijednosti %(value)r su neispravne."
-msgstr[2] ""
-"Molimo unesite ispravne %(self)s ID-eve. Vrijednosti %(value)r su neispravne."
-msgstr[3] ""
-"Molimo unesite ispravne %(self)s ID-eve. Vrijednosti %(value)r su neispravne."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Unos za ovo polje je obavezan."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Unesite cijeli broj."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Unesite broj."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Osigurajte da ukupno nema više od %s numeričkih znakova."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Osigurajte da ukupno nema više od %s decimalnih mjesta."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-"Osigurajte da ukupno nema više od %s numeričkih znakova prije decimalne "
-"točke."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Unesite ispravan datum."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Unesite ispravno vrijeme."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Unesite ispravan datum/vrijeme."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Datoteka nije poslana. Provjerite 'encoding type' forme."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Datoteka nije poslana."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Poslana datoteka je prazna."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Osigurajte da ova datoteka ima najviše %(max)d znakova (trenutno ima %"
-"(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Upload-ajte ispravnu sliku. Datoteka koju ste upload-ali ili nije slika ili "
-"je oštečena."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Odaberite iz ponuđenog. %(value)s nije ponuđen kao opcija."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Unesite listu vrijednosti."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Redoslijed:"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Ispravite duplicirane podatke za %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Molimo ispravite duplicirane podatke za %(field)s, koji moraju biti "
-"jedinstveni."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Molimo ispravite duplicirane podatke za %(field_name)s koji moraju biti "
-"jedinstveni za %(lookup)s u %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Molimo ispravite duplicirane vrijednosti ispod."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "The inline foreign key did not match the parent instance primary key."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Izaberite ispravnu opciju. Ta opcija nije jedna od dostupnih opcija."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Odaberite iz ponuđenog. %s nije ponuđen kao opcija."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" nije ispravna vrijednost za primarni kluč."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "da,ne,možda"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d byte-a"
-msgstr[2] "%(size)d byte-a"
-msgstr[3] "%(size)d byte-a"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "popodne"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "ujutro"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "popodne"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "ujutro"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "ponoć"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "podne"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Ponedjeljak"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Utorak"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Srijeda"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Četvrtak"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Petak"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Subota"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Nedjelja"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Pon"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Uto"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Sri"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Čet"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Pet"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Sub"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Ned"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Siječanj"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Veljača"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Ožujak"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Travanj"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Svibanj"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Lipanj"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Srpanj"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Kolovoz"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Rujan"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Listopad"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Studeni"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Prosinac"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "sij."
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "velj."
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "ožu."
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "tra."
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "svi."
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "lip."
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "srp."
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "kol."
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "ruj."
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "lis."
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "stu."
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "pro."
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Sij."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Velj."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Kol."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Ruj."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Lis."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Stu."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Pro."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "ili"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "godina"
-msgstr[1] "godine"
-msgstr[2] "godine"
-msgstr[3] "godine"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mjesec"
-msgstr[1] "mjeseci"
-msgstr[2] "mjeseci"
-msgstr[3] "mjeseci"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "tjedan"
-msgstr[1] "tjedna"
-msgstr[2] "tjedna"
-msgstr[3] "tjedna"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dan"
-msgstr[1] "dani"
-msgstr[2] "dana"
-msgstr[3] "dana"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "sat"
-msgstr[1] "sati"
-msgstr[2] "sata"
-msgstr[3] "sata"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuta"
-msgstr[1] "minute"
-msgstr[2] "minute"
-msgstr[3] "minute"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuta"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. N Y."
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. N Y. G:i T"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "G:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y."
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s je uspješno kreirano."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s je uspješno promijenjeno."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s je izbrisano."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Jedan ili više %(fieldname)s u %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Jedan ili više %(fieldname)s u %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Stara lozinka:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Relacija na roditeljski model (parent model)"
-
-#~ msgid "Add user"
-#~ msgstr "Unos novog korisnika"
diff --git a/parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 24dec5c..0000000
--- a/parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 6fff669..0000000
--- a/parts/django/django/conf/locale/hr/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,119 +0,0 @@
-# translation of djangojs.po to Hrvatski jezik
-# This file is distributed under the same license as the Django package.mmmoj testmmmoj test
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-13 15:41+0200\n"
-"PO-Revision-Date: 2009-04-13 15:43+0200\n"
-"Last-Translator: Aljosa Mohorovic <aljosa.mohorovic@gmail.com>\n"
-"Language-Team: Hrvatski Jezik <Django-i18n <django-i18n@googlegroups.com>>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Vim 7.2\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
-"n%100==4 ? 2 : 3);\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Dostupno %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Odaberi sve"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Dodaj"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Ukloni"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Odabrano %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Odaberi iz izbora i klikni "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Očisti sve"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Siječanj Veljača Ožujak Travanj Svibanj Lipanj Srpanj Kolovoz Rujan Listopad "
-"Studeni Prosinac"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "N P U S Č P S"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Nedjelja Ponedjeljak Utorak Srijeda Četvrtak Petak Subota"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Prikaži"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Sakri"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Sada"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Sat"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Izaberite vrijeme"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Ponoć"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 ujutro"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Podne"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Odustani"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Danas"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Kalendar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Jučer"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Sutra"
diff --git a/parts/django/django/conf/locale/hr/__init__.py b/parts/django/django/conf/locale/hr/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/hr/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/hr/formats.py b/parts/django/django/conf/locale/hr/formats.py
deleted file mode 100644
index 2f533a7..0000000
--- a/parts/django/django/conf/locale/hr/formats.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y.'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = 'j. F Y. H:i'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.m.Y.'
-SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
-FIRST_DAY_OF_WEEK = 1
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', # '2006-10-25'
- '%d.%m.%Y.', '%d.%m.%y.', # '25.10.2006.', '25.10.06.'
- '%d. %m. %Y.', '%d. %m. %y.', # '25. 10. 2006.', '25. 10. 06.'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%d.%m.%Y. %H:%M:%S', # '25.10.2006. 14:30:59'
- '%d.%m.%Y. %H:%M', # '25.10.2006. 14:30'
- '%d.%m.%Y.', # '25.10.2006.'
- '%d.%m.%y. %H:%M:%S', # '25.10.06. 14:30:59'
- '%d.%m.%y. %H:%M', # '25.10.06. 14:30'
- '%d.%m.%y.', # '25.10.06.'
- '%d. %m. %Y. %H:%M:%S', # '25. 10. 2006. 14:30:59'
- '%d. %m. %Y. %H:%M', # '25. 10. 2006. 14:30'
- '%d. %m. %Y.', # '25. 10. 2006.'
- '%d. %m. %y. %H:%M:%S', # '25. 10. 06. 14:30:59'
- '%d. %m. %y. %H:%M', # '25. 10. 06. 14:30'
- '%d. %m. %y.', # '25. 10. 06.'
-)
-
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/hu/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/hu/LC_MESSAGES/django.mo
deleted file mode 100644
index 2d351ee..0000000
--- a/parts/django/django/conf/locale/hu/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/hu/LC_MESSAGES/django.po b/parts/django/django/conf/locale/hu/LC_MESSAGES/django.po
deleted file mode 100644
index c4cb1a0..0000000
--- a/parts/django/django/conf/locale/hu/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4423 +0,0 @@
-# translation of django.po to Hungarian
-# This file is distributed under the same license as the django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-30 01:08+0200\n"
-"PO-Revision-Date: 2008-08-30 01:11+0200\n"
-"Last-Translator: Szilveszter Farkas <szilveszter.farkas@gmail.com>\n"
-"Language-Team: Hungarian <hu@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arab"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Bengáli"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bolgár"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Katalán"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "Cseh"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Walesi"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Dán"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "Német"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "Görög"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "Angol"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "Spanyol"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Észt"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Argentín spanyol"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "Baszk "
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "Perzsa"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "Finn"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Francia"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Ír"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Gall"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Magyar"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "Héber"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr "Horvát"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "Izlandi"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "Olasz"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "Japán"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "Grúz"
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "Koreai"
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "Lett"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "Litván"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "Macedón"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "Holland"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "Norvég"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "Lengyel"
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "Portugál"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "Brazíliai portugál"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "Román"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "Orosz"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "Szlovák"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "Szlovén"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "Szerb"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "Svéd"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "Tamil"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "Török"
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "Ukrán"
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "Egyszerű kínai"
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "Hagyományos kínai"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Szerző: %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Mind"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Bármely dátum"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Ma"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Utolsó 7 nap"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Ez a hónap"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Ez az év"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:390
-#: newforms/widgets.py:231 oldforms/__init__.py:592
-msgid "Yes"
-msgstr "Igen"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:390
-#: newforms/widgets.py:231 oldforms/__init__.py:592
-msgid "No"
-msgstr "Nem"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:390
-#: newforms/widgets.py:231 oldforms/__init__.py:592
-msgid "Unknown"
-msgstr "Ismeretlen"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "művelet időpontja"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objektum id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objektum repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "művelet jelölés"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "üzenet módosítása"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "naplóbejegyzés"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "naplóbejegyzések"
-
-#: contrib/admin/options.py:56 contrib/admin/options.py:120
-msgid "None"
-msgstr "Egyik sem"
-
-#: contrib/admin/options.py:334
-#, python-format
-msgid "Changed %s."
-msgstr "%s módosítva."
-
-#: contrib/admin/options.py:334 contrib/admin/options.py:344
-#: core/validators.py:283 db/models/manipulators.py:309
-msgid "and"
-msgstr "és"
-
-#: contrib/admin/options.py:339
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "\"%(object)s\" %(name)s létrehozva."
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "\"%(object)s\" %(name)s tulajdonságai (%(list)s) megváltoztak."
-
-#: contrib/admin/options.py:348
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "\"%(object)s\" %(name)s törlésre került."
-
-#: contrib/admin/options.py:352
-msgid "No fields changed."
-msgstr "Egy mező sem változott."
-
-# TODO
-#: contrib/admin/options.py:413 contrib/admin/views/auth.py:20
-#: contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "\"%(obj)s\" %(name)s sikeresen létrehozva."
-
-#: contrib/admin/options.py:417 contrib/admin/options.py:450
-#: contrib/admin/views/auth.py:25 contrib/auth/admin.py:57
-msgid "You may edit it again below."
-msgstr "Alább ismét szerkesztheti."
-
-#: contrib/admin/options.py:427 contrib/admin/options.py:460
-#, python-format
-msgid "You may add another %s below."
-msgstr "Alább hozzáadhat egy másikat ebből: %s."
-
-#: contrib/admin/options.py:448
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "\"%(obj)s\" %(name)s sikeresen módosítva."
-
-#: contrib/admin/options.py:456
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "\"%(obj)s\" %(name)s sikeresen létrehozva. Alább ismét szerkesztheted."
-
-#: contrib/admin/options.py:532
-#, python-format
-msgid "Add %s"
-msgstr "Új %s"
-
-#: contrib/admin/options.py:610
-#, python-format
-msgid "Change %s"
-msgstr "%s módosítása"
-
-#: contrib/admin/options.py:642
-msgid "Database error"
-msgstr "Adatbázis hiba"
-
-#: contrib/admin/options.py:692
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "\"%(obj)s\" %(name)s sikeresen törölve."
-
-#: contrib/admin/options.py:699
-msgid "Are you sure?"
-msgstr "Biztos benne?"
-
-#: contrib/admin/options.py:728
-#, python-format
-msgid "Change history: %s"
-msgstr "Változások története: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:16
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Írjon be egy helyes felhasználónevet és jelszót. Mindkét mező kisbetű-"
-"nagybetű érzékeny."
-
-#: contrib/admin/sites.py:242 contrib/admin/views/decorators.py:68
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Jelentkezzen be újra, mert a munkamenete végetért. Ne aggódjon, minden "
-"beküldött adata el van mentve."
-
-#: contrib/admin/sites.py:249 contrib/admin/views/decorators.py:75
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Úgy tűnik a böngészőjében nincs engedélyezve a cookie-k fogadása. Kérem "
-"engedélyezze és töltse újra az oldalt!"
-
-#: contrib/admin/sites.py:265 contrib/admin/sites.py:271
-#: contrib/admin/views/decorators.py:94
-msgid "Usernames cannot contain the '@' character."
-msgstr "A felhasználónév nem tartalmazhat '@' karaktert."
-
-#: contrib/admin/sites.py:268 contrib/admin/views/decorators.py:90
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Az email címe nem a felhasználóneve. Próbálja inkább ezt: %s."
-
-#: contrib/admin/sites.py:336
-msgid "Site administration"
-msgstr "Honlap karbantartás"
-
-#: contrib/admin/sites.py:358 contrib/admin/templates/admin/login.html:27
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:30
-msgid "Log in"
-msgstr "Bejelentkezés"
-
-#: contrib/admin/sites.py:406
-#, python-format
-msgid "%s administration"
-msgstr "%s adminisztráció"
-
-# TODO
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Egy vagy több %(fieldname)s a(z) %(name)s -ban: %(obj)s"
-
-# TODO
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Egy vagy több %(fieldname)s a(z) %(name)s:"
-
-#: contrib/admin/widgets.py:65 contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Dátum:"
-
-#: contrib/admin/widgets.py:65 contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Idő:"
-
-#: contrib/admin/widgets.py:89 contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Éppen:"
-
-#: contrib/admin/widgets.py:89 contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Változás:"
-
-#: contrib/admin/widgets.py:115
-msgid "Lookup"
-msgstr "Keresés"
-
-#: contrib/admin/widgets.py:195
-msgid "Add Another"
-msgstr "Újabb hozzáadása"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Nincs ilyen oldal"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Sajnáljuk, de a kért oldal nem található."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Kezdőlap"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Szerverhiba"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Szerverhiba (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Szerverhiba <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Hiba történt, melyet e-mailben jelentettünk az oldal karbantartójának. A "
-"rendszer remélhetően hamar megjavul. Köszönjük a türelmét."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "Üdvözlöm,"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentáció"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "Jelszó megváltoztatása"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "Kijelentkezés"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django honlap adminisztráció"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django adminisztráció"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Új"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Történet"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "Megtekintés a honlapon"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Kérem javítsa az alábbi hibát."
-msgstr[1] "Kérlem javítsa az alábbi hibákat."
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "Új %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:26
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "Szűrő"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:246
-msgid "Delete"
-msgstr "Törlés"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"'%(escaped_object)s' %(object_name)s törlése a kapcsolódó objektumok "
-"törlését is eredményezi, de a hozzáférése nem engedi a következő típusú "
-"objektumok törlését:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Biztos hogy törli a következőt: \"%(escaped_object)s\" (típus: %(object_name)"
-"s)? A összes további kapcsolódó elem is törlődik:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "Igen, biztos vagyok benne"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s szerint "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s alkalmazásban elérhető modellek."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Módosítás"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Nincs joga szerkeszteni."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Utolsó műveletek"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Az én műveleteim"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nincs elérhető"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Valami nem stimmel a telepített adatbázissal. Bizonyosodjon meg arról, hogy "
-"a megfelelő táblák létre lettek-e hozva, és hogy a megfelelő felhasználó "
-"tudja-e őket olvasni."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Felhasználó:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Jelszó:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dátum/idő"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Felhasználó"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Művelet"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "Y. F j., H:i"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Az objektumnak nincs változási története. Valószínűleg nem ezen a "
-"karbantartó oldalon lett rögzítve."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Mutassa mindet"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Mehet"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "Egy találat."
-msgstr[1] "%(counter)s találat."
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s összesen"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Mentés"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Mentés újként"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Mentés és másik hozzáadása"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Mentés és a szerkesztés folytatása"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Először adjon meg egy felhasználói nevet és egy jelszót. Ezek után további "
-"módosításokat is végezhet a felhasználó adatain."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Felhasználó"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:184
-msgid "Password"
-msgstr "Jelszó"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "Jelszó újra"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "Írja be a fenti jelszót ellenőrzés céljából."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Adjon meg egy új jelszót a <strong>%(username)s</strong> nevű felhasználónak."
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Törli?"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Könyvjelzők"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentum könyvjelzők"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:8
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">A könyvjelzők felvételéhez húzza a könyvjelzők linkjét az "
-"eszköztárra, vagy kattintson rájuk jobb egérgombbal és úgy adja hozzá. "
-"Ezután \n"
-"már ki tudja választani a könyvjelzőt a honlap bármely oldaláról. A "
-"könyvjelzők között néhány oldal csak \"belső\" gépekről nézhető meg.\n"
-"(Kérdezze meg rendszergazdáját, hogy az Ön gépe \"belső\" gép-e.).</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:18
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Az oldal dokumentációja"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Bármely oldalról annak a nézetnek a dokumentációjára ugrik, amely a kérdéses "
-"oldalt generálta."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:21
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Az objektum ID mutatása"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Az objektum által reprezentált oldalak 'content-type' és 'unique ID' "
-"értékeit mutatja."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:24
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Objektum szerkesztése (aktuális ablakban)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Az objektumhoz tartozó oldalak adminisztrációjához ugrik."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:27
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Objektum szerkesztése (új ablakban)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Mint fentebb, de az adminisztrációs oldalt új ablakban nyitja meg."
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Köszönjük hogy egy kis időt eltöltött ma a honlapunkon."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Jelentkezzen be újra"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Jelszó megváltoztatása"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Sikeres jelszóváltoztatás"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Megváltozott a jelszava."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Írja be a régi jelszavát biztonsági okokból, majd az újat kétszer, hogy "
-"biztosan ne gépelje el."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Régi jelszó:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Új jelszó:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Jelszó megerősítése:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Jelszavam megváltoztatása"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Jelszó beállítása"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Jelszó beállítása kész"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Jelszava beállításra került. Most már bejelentkezhet."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Jelszó beállítás megerősítése"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Írja be az új jelszavát"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Írja be az új jelszavát kétszer, hogy megbizonyosodhassunk annak "
-"helyességéről."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Sikeres jelszó beállítás"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"A jelszó beállító link érvénytelen. Ennek egyik oka az lehet, hogy már "
-"felhasználták. Kérem igényeljen új jelszó beállítást."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Sikeres jelszótörlés"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Az információkat elküldtük e-mailben a megadott címre. Hamarosan meg kell "
-"érkeznie."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Ezt az e-mail-t azért kapta, mert jelszó beállítást kért"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "hozzáféréséhez a következő honlapon: %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Kérjük látogassa meg a következő oldalt, és válasszon egy új jelszót:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Felhasználóneve, ha elfelejtette volna:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Köszönjük, hogy használta honlapunkat!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s csapat"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Elfelejtette a jelszavát? Írja be az e-mail címét, és küldünk egy levelet a "
-"teendőkről."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mail cím:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Jelszavam törlése"
-
-#: contrib/admin/templatetags/admin_list.py:284
-msgid "All dates"
-msgstr "Minden dátum"
-
-#: contrib/admin/views/auth.py:31 contrib/auth/admin.py:62
-msgid "Add user"
-msgstr "Felhasználó hozzáadása"
-
-#: contrib/admin/views/auth.py:58 contrib/auth/admin.py:88
-msgid "Password changed successfully."
-msgstr "Sikeres jelszóváltoztatás."
-
-#: contrib/admin/views/auth.py:65 contrib/auth/admin.py:94
-#, python-format
-msgid "Change password: %s"
-msgstr "Jelszó megváltoztatása: %s"
-
-#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
-#: contrib/admin/views/doc.py:52 contrib/admindocs/views.py:57
-#: contrib/admindocs/views.py:59 contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "címke:"
-
-#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81
-#: contrib/admin/views/doc.py:83 contrib/admindocs/views.py:90
-#: contrib/admindocs/views.py:92 contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "szűrő:"
-
-#: contrib/admin/views/doc.py:137 contrib/admin/views/doc.py:139
-#: contrib/admin/views/doc.py:141 contrib/admindocs/views.py:154
-#: contrib/admindocs/views.py:156 contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "nézet:"
-
-#: contrib/admin/views/doc.py:166 contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "%r alkalmazás nem található"
-
-#: contrib/admin/views/doc.py:173
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "%(name)r modell nem található a következő alkalmazásban: %(label)r"
-
-#: contrib/admin/views/doc.py:185
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr "a kapcsolódó '%(label)s.%(type)s' objektum"
-
-#: contrib/admin/views/doc.py:185 contrib/admin/views/doc.py:207
-#: contrib/admin/views/doc.py:221 contrib/admin/views/doc.py:226
-#: contrib/admindocs/views.py:205 contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241 contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "modell:"
-
-#: contrib/admin/views/doc.py:216
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "kapcsolódó '%(label)s.%(name)sí' objektumok"
-
-#: contrib/admin/views/doc.py:221 contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "minden %s"
-
-#: contrib/admin/views/doc.py:226 contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "%s mennyisége"
-
-#: contrib/admin/views/doc.py:231 contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Mezők %s objektumokban"
-
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:304
-#: contrib/admin/views/doc.py:306 contrib/admin/views/doc.py:312
-#: contrib/admin/views/doc.py:313 contrib/admin/views/doc.py:315
-#: contrib/admindocs/views.py:314 contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327 contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "Egész"
-
-#: contrib/admin/views/doc.py:294 contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "Logikai (True vagy False)"
-
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:314
-#: contrib/admindocs/views.py:316 contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Karakterlánc (%(max_length)s hosszig)"
-
-#: contrib/admin/views/doc.py:296 contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "Vesszővel elválasztott egészek"
-
-#: contrib/admin/views/doc.py:297 contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "Dátum (idő nélkül)"
-
-#: contrib/admin/views/doc.py:298 contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "Dátum (idővel)"
-
-#: contrib/admin/views/doc.py:299 contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "Tizes számrendszerű (decimális) szám"
-
-#: contrib/admin/views/doc.py:300 contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "E-mail cím"
-
-#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302
-#: contrib/admin/views/doc.py:305 contrib/admindocs/views.py:322
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "Elérési út"
-
-#: contrib/admin/views/doc.py:303 contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "Lebegőpontos szám"
-
-#: contrib/admin/views/doc.py:307 contrib/admindocs/views.py:328
-#: contrib/comments/models.py:57
-msgid "IP address"
-msgstr "IP cím"
-
-#: contrib/admin/views/doc.py:309 contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "Logikai (True, False vagy None)"
-
-#: contrib/admin/views/doc.py:310 contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "Szülőkapcsolat"
-
-#: contrib/admin/views/doc.py:311 contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "Telefonszám"
-
-#: contrib/admin/views/doc.py:316 contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "Szöveg"
-
-#: contrib/admin/views/doc.py:317 contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "Idő"
-
-#: contrib/admin/views/doc.py:318 contrib/admindocs/views.py:339
-#: contrib/comments/forms.py:20 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:319 contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "USA állam (két nagybetű)"
-
-#: contrib/admin/views/doc.py:320 contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "XML szöveg"
-
-#: contrib/admin/views/doc.py:346 contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s nem tűnik egy urlpattern objektumnak."
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Kiválasztás %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Válasszon ki egyet a módosításhoz (%s)"
-
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
-msgid "site"
-msgstr "honlap"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "sablon"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "%(model_name)r modell nem található a következő alkalmazásban: %(app_label)r"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "a kapcsolódó '%(app_label)s.%(data_type)s' objektum"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "kapcsolódó '%(app_label)s.%(object_name)s' objektumok"
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "személyes információ"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "jogosultságok"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "Fontos dátumok"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "Csoportok"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Kötelező. Legfeljebb 30 karakter. Csak alfanumerikus karaktereket "
-"tartalmazhat (betűk, számok és aláhúzás)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49 core/validators.py:72
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Az érték csak betűket, számokat és aláhúzást tartalmazhat."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Jelszó megerősítése"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "Létezik már egy felhasználó ezzel a névvel."
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "A két jelszó mező tartalma nem egyezik meg."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "Ez a fiók inaktív."
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"A böngészője úgy tűnik nem támogatja a cookie-kat. A cookie-k engedélyezése "
-"szükséges a bejelentkezéshez."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "E-mail cím"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Ehhez az e-mail címhez nem tartozik felhasználói fiók. Biztos benne, hogy "
-"regisztrált?"
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "Jelszó beállítása: %s"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "Új jelszó"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "Új jelszó megerősítése"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "Régi jelszó"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "A régi jelszó hibásan lett megadva. Írja be újra."
-
-#: contrib/auth/models.py:72 contrib/auth/models.py:95
-msgid "name"
-msgstr "név"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "kódnév"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "jogosultság"
-
-#: contrib/auth/models.py:78 contrib/auth/models.py:96
-msgid "permissions"
-msgstr "jogosultságok"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "csoport"
-
-#: contrib/auth/models.py:100 contrib/auth/models.py:146
-msgid "groups"
-msgstr "csoportok"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "felhasználónév"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "keresztnév"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "vezetéknév"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "e-mail cím"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "jelszó"
-
-#: contrib/auth/models.py:140
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Használja az \"[algo]$[salt]$[hexdigest]\" formátumot, vagy a <a href="
-"\"password/\">jelszó megváltoztatása űrlapot</a>."
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "személyzet státusz"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr "Megadja, hogy a felhasználó bejelentkezhet-e erre az adminisztrációs oldalra."
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "aktív"
-
-#: contrib/auth/models.py:142
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Megadja, hogy a felhasználó aktív-e. Állítsa át ezt az értéket a fiók "
-"törlése helyett."
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr "rendszergazda státusz"
-
-#: contrib/auth/models.py:143
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Megadja, hogy ez a felhasználó rendelkezik-e minden jogosultsággal anélkül, "
-"hogy azt külön meg kellene adni."
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "utolsó bejelentkezés"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "csatlakozás dátuma"
-
-#: contrib/auth/models.py:147
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"A kézzel beállított jogosultságok mellett a felhasználó a csoportjának "
-"jogait is megkapja."
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "felhasználói jogosultságok"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "felhasználó"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "felhasználók"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "üzenet"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "Kijelentkezve"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:170 forms/fields.py:423 newforms/fields.py:403
-msgid "Enter a valid e-mail address."
-msgstr "Írjon be egy érvényes e-mail címet."
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "Tartalom"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "Metaadat"
-
-#: contrib/comments/forms.py:18
-msgid "Name"
-msgstr "Név"
-
-#: contrib/comments/forms.py:19
-msgid "Email address"
-msgstr "E-mail cím"
-
-#: contrib/comments/forms.py:21
-msgid "Comment"
-msgstr "Hozzászólás"
-
-#: contrib/comments/forms.py:24
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Ha bármit begépel ebbe a mezőbe, akkor azt szemétként fogja kezelni a "
-"rendszer"
-
-#: contrib/comments/forms.py:124 core/validators.py:281
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Vigyázzon a szájára! Az ilyen szó (%s) itt nem megengedett."
-msgstr[1] "Vigyázzon a szájára! Az ilyen szavak (%s) itt nem megengedettek."
-
-#: contrib/comments/models.py:22
-msgid "object ID"
-msgstr "objektum ID"
-
-#: contrib/comments/models.py:49
-msgid "user's name"
-msgstr "felhasználó neve"
-
-#: contrib/comments/models.py:50
-msgid "user's email address"
-msgstr "felhasználó e-mail címe"
-
-#: contrib/comments/models.py:51
-msgid "user's URL"
-msgstr "felhasználó URL-je"
-
-#: contrib/comments/models.py:53
-msgid "comment"
-msgstr "megjegyzés"
-
-#: contrib/comments/models.py:56
-msgid "date/time submitted"
-msgstr "dátum/idő beállítva"
-
-#: contrib/comments/models.py:58
-msgid "is public"
-msgstr "publikus"
-
-#: contrib/comments/models.py:59
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Vegye ki a pipát a jelölőnégyzetből, hogy eltűntesse a hozzászólást az "
-"oldalról."
-
-#: contrib/comments/models.py:61
-msgid "is removed"
-msgstr "eltávolítva"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Jelöld be a négyzetet, ha a megjegyzés nem megfelelő. Az \"Ezt a megjegyzést "
-"törölték\" üzenet fog megjelenni helyette."
-
-#: contrib/comments/models.py:114
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Ezt a hozzászólást egy hitelesített felhasználó küldte be, ezért a név csak "
-"olvasható."
-
-#: contrib/comments/models.py:123
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Ezt a hozzászólást egy hitelesített felhasználó küldte be, ezért az e-mail "
-"csak olvasható."
-
-#: contrib/comments/models.py:148
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Beküldte %(user)s ekkor: %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Név:"
-
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Megjegyzés:"
-
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "Megjegyzés előnézete"
-
-#: contrib/comments/views/karma.py:21
-msgid "Anonymous users cannot vote"
-msgstr "Névtelen felhasználó nem szavazhat"
-
-#: contrib/comments/views/karma.py:25
-msgid "Invalid comment ID"
-msgstr "Érvénytelen megjegyzés ID"
-
-#: contrib/comments/views/karma.py:27
-msgid "No voting for yourself"
-msgstr "Nem szavazhat önmagára"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "python modell osztály neve"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "tartalom típusa"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "tartalom típusok"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Például: '/about/contact/'. Figyeljen a nyitó és záró perjelre!"
-
-#: contrib/flatpages/admin.py:11 core/validators.py:76
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "Az érték csak betűket, számokat, aláhúzást és perjelet tartalmazhat."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "További beállítások"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "cím"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "tartalom"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "megjegyzések engedélyezése"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "sablon neve"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Példa: 'flatpages/contact_page'. Ha ez nem létezik, a rendszer a 'flatpages/"
-"default.html' sablont fogja használni."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "regisztráció szükséges"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ha ez be van jelölve, csak bejelentkezett felhasználó tudja az oldalt "
-"megnézni."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "egyszerű oldal"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "egyszerű oldalak"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr "Elnézést kérünk, de az űrlap érvényessége lejárt. Kérjük folytassa a kitöltést ettől az oldaltól."
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "Geometriai adat nem került megadásra."
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "Érvénytelen geometriai érték."
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "Érvénytelen geometriai típus."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value)1f millió"
-msgstr[1] "%(value)1f millió"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value)1f milliárd"
-msgstr[1] "%(value)1f milliárd"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value)1f trilliárd"
-msgstr[1] "%(value)1f trilliárd"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "egy"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "kettő"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "három"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "négy"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "öt"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "hat"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "hét"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "nyolc"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "kilenc"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "ma"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "holnap"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "tegnap"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Írjon be egy irányítószámot 'NNNN' vagy 'ANNNNAA' alakban."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Ez a mező csak számokat tartalmazhat."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Ennek a mezőnek 7 vagy 8 számjegyet kell tartalmaznia."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Írjon be egy érvényes CUIT-t 'XX-XXXXXXXX', vagy 'XXXXXXXXXXXX' alakban."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "Érvénytelen CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Karintia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Alsó-Ausztria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Felső-Ausztria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Stájerország"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Bécs"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Írjon be egy irányítószámot 'XXXX' alakban."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Írjon be egy érvényes ausztriai társadalombiztosítási azonosítót 'XXXX "
-"XXXXXX' alakban."
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Írjon be egy négyjegyű irányítószámot."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Írjon be egy irányítószámot 'XXXXX-XXX' alakban."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "A telefonszámoknak 'XXX-XXX-XXXX' formátumúnak kell lenniük."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Válasszon ki egy érvényes brazil államot. Az Ön választása nincs az elérhető "
-"lehetőségek között."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Érvénytelen CPF szám."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Ez a mező legfeljebb 11 számjegyet vagy 14 karaktert tartalmazhat."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Érvénytelen CNPJ szám."
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Ennek a mezőnek legalább 14 számjegyet kell tartalmaznia."
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Írjon be egy irányítószámot 'XXX XXX' alakban."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Írjon be egy érvényes kanadai egészségbiztosítási számot 'XXX-XXX-XXX' "
-"alakban."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Bázel-város"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Bázel-vidék"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genf"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürich"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Írjon be egy érvényes svájci személyazonosító vagy útlevél számot "
-"\"X1234567<0\" vagy \"1234567890\" alakban."
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Írjon be egy érvényes chilei RUT-ot."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Írjon be egy érvényes chilei RUT-ot 'XX.XXX.XXX-X' alakban."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "A chilei RUT érvénytelen."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bajorország"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bréma"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Nyugat-Pomeránia"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Alsó-Szászország"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Észak-Rajna-Vesztfália"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Szárföld"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Szászország"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Szász-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Türingia"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Írjon be egy irányítószámot 'XXXXX' alakban."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Írjon be egy érvényes német személyazonosító számot \"XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X\" alakban."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Baleár szigetek"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgosz"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palenica"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalúzia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asztúriák tartománya"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Baleár-szigetek"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baszkföld"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanári-szigetek"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kasztília-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kasztília és Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalónia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galícia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murciai régió"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarrai autonóm közösség"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valenciai közösség"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Írjon be egy irányítószámot '01XXX-52XXX' alakban és tartományban."
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr "Írjon be egy telefonszámot '6XXXXXXXX', '8XXXXXXXX' vagy '9XXXXXXXX' alakban."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Írjon be egy érvényes NIF-et, NIE-t, vagy CIF-et."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Adjon meg egy érvényes NIF-et vagy NIE-t."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Érvénytelen NIF ellenőrzőösszeg."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Érvénytelen NIE ellenőrzőösszeg."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Érvénytelen CIF ellenőrzőösszeg."
-
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Írjon be egy érvényes bankszámlaszámot 'XXXX.XXXX-XX-XXXXXXXXXX' alakban."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Érvénytelen bankszámlaszám ellenőrzőösszeg."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Adjon meg egy érvényes finn társadalombiztosítási számot."
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Írjon be egy irányítószámot \"XXXXXXX\" alakban."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Írjon be egy érvényes izlandi személyazonosító számot \"XXXXXX-XXXX\" "
-"alakban."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Az izlandi személyazonosító szám érvénytelen."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Adjon meg egy érvényes irányítószámot."
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Adjon meg egy érvényes társadalombiztosítási számot."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Adjon meg egy érvényes ÁFA számot."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Írjon be egy irányítószámot \"XXXXXXX\" vagy \"XXX-XXXX\" alakban."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tókió"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kiotó"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Oszaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagaszaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distritio Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Mexikóváros"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "SOnora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Adjon meg egy érvényes irányítószámot. "
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Adjon meg egy érvényes telefonszámot."
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Adjon meg egy érvényes SoFi számot."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Írjon be egy érvényes norvég társadalombiztosítási számot."
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Ennek a mezőnek 8 számjegyet kell tartalmaznia."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Ennek a mezőnek 11 számjegyet kell tartalmaznia."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "A nemzeti azonosítószám 11 számjegyből áll."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Hibás a nemzeti azonosítószám ellenőrző kódja."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Írjon be egy adószámot \"XXX-XXX-XX-XX\" vagy \"XX-XX-XXX-XXX\" alakban."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Hibás az adószám (NIP) ellenőrzőösszege."
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr "A nemzeti üzleti azonosítószám (REGON) 7 vagy 9 számjegyből áll."
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Hibás a nemzeti üzleti azonosítószám (REGON) ellenőrzőösszege."
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Írjon be egy irányítószámot 'XX-XXX' alakban."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Alsó-Szilézia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Kis-Lengyelország"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Szubkárpátok"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomeránia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Szilézia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Nagy-Lengyelország"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Nyugat-Pomeránia"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Adjon meg egy érvényes CIF-t."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Adjon meg egy érvényes CNP-t."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-"Írjon be egy érvényes nemzetközi bankszámlaszámot 'ROXX-XXXX-XXXX-XXXX-XXXX-"
-"XXXX-XXXX' alakban."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "A telefonszámoknak 'XXXX-XXXXXX' formátumúnak kell lenniük."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Írjon be egy érvényes irányítószámot 'XXXXXX' alakban."
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Írjon be egy irányítószámot 'XXXXX' vagy 'XXX XX' alakban."
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Besztercebánya"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Pozsony I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Pozsony II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Pozsony III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Pozsony IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Pozsony V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunaszerdahely"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galánta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Késmárk"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komárom"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kassa I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kassa II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kassa III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kassa IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nyitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprád"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimaszombat"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Rozsnyó"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Rózsahegy"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Igló"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sellye"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencsén"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zsolna"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Besztercebánya régió"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Pozsony régió"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kassa régió"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nyitra régió"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Presov régió"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trencsén régió"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava régió"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zsolna régió"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Adjon meg egy érvényes irányítószámot."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertofrdshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Linclonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Aounty Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamoran"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Közép-Skócia"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkey-szigetek"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland-szigetek"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Anglia"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Észak-Írország"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Skócia"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Írjon be egy irányítószámot 'XXXXX', vagy 'XXXXX-XXXX' alakban."
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Írjon be egy érvényes USA SSN-t 'XXX-XX-XXXX' formátumban."
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Adjon meg egy érvényes dél-afrikai azonosító számot."
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Adjon meg egy érvényes dél-afrikai irányítószámot."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu -Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "átirányítva innen"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ennek abszolút elérési útnak kell lennie, a tartománynév nélkül. Példa: '/"
-"events/search/'"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "átirányítva ide"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ennek vagy abszolút elérési útnak kell lennie (mint fentebb), vagy teljes "
-"URL-nek 'http://'-vel kezdve."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "átirányítás"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "átirányít"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "munkamenet kulcs"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "munkamenet adat"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "lejárat dátuma"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "munkamenet"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "munkamenetek"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "tartománynév"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "megjelenítendő név"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "honlapok"
-
-#: core/validators.py:80
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "Az érték csak betűket, számokat, aláhúzást és kötőjelet tartalmazhat."
-
-#: core/validators.py:84
-msgid "Uppercase letters are not allowed here."
-msgstr "Nagybetűk itt nem megengedettek."
-
-#: core/validators.py:88
-msgid "Lowercase letters are not allowed here."
-msgstr "Kisbetűk itt nem megengedettek."
-
-#: core/validators.py:95 db/models/fields/__init__.py:412
-msgid "Enter only digits separated by commas."
-msgstr "Csak számokat adjon meg, vesszővel elválasztva."
-
-#: core/validators.py:107
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Érvényes e-mail címeket adjon meg, vesszővel elválasztva."
-
-#: core/validators.py:111
-msgid "Please enter a valid IP address."
-msgstr "Írjon be egy érvényes IP címet."
-
-#: core/validators.py:115
-msgid "Empty values are not allowed here."
-msgstr "Üres érték itt nem megengedett."
-
-#: core/validators.py:119
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Nem szám karakterek itt nem megengedettek."
-
-#: core/validators.py:123
-msgid "This value can't be comprised solely of digits."
-msgstr "Ez az érték nem tartalmazhat kizárólag számokat."
-
-#: core/validators.py:128 forms/fields.py:161 newforms/fields.py:152
-msgid "Enter a whole number."
-msgstr "Adjon meg egy egész számot."
-
-#: core/validators.py:132
-msgid "Only alphabetical characters are allowed here."
-msgstr "Itt csak betűk megengedettek."
-
-#: core/validators.py:147
-msgid "Year must be 1900 or later."
-msgstr "Az évnek 1900-nak vagy későbbinek kell lennie."
-
-#: core/validators.py:151 db/models/fields/__init__.py:452
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Érvénytelen dátum: %s"
-
-#: core/validators.py:156 db/models/fields/__init__.py:443
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Írjon be egy érvényes dátumot 'ÉÉÉÉ-HH-NN' alakban."
-
-#: core/validators.py:161
-msgid "Enter a valid time in HH:MM format."
-msgstr "Írjon be egy érvényes időt 'ÓÓ:PP' alakban."
-
-#: core/validators.py:165
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Írjon be egy érvényes dátumot/időt 'ÉÉÉÉ-HH-NN ÓÓ-PP' alakban."
-
-#: core/validators.py:182 core/validators.py:474 forms/fields.py:441
-#: newforms/fields.py:433 oldforms/__init__.py:687
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Nem küldött el fájlt. Ellenőrizze a kódolás típusát az űrlapon."
-
-#: core/validators.py:193 forms/fields.py:472 newforms/fields.py:459
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Töltsön fel egy érvényes képfájlt. A feltöltött fájl nem kép volt, vagy "
-"megsérült."
-
-#: core/validators.py:200
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "A hivatkozás (%s) érvénytelen képfájlra mutat."
-
-#: core/validators.py:204
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"A telefonszámoknak 'XXX-XXX-XXXX' formátumúnak kell lenniük. \"%s\" "
-"érvénytelen."
-
-#: core/validators.py:212
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "A hivatkozás (%s) érvénytelen QuickTime videóra mutat."
-
-#: core/validators.py:216
-msgid "A valid URL is required."
-msgstr "Érvényes URL szükséges."
-
-#: core/validators.py:230
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Érvényes HTML kell. A hiba:\n"
-"%s"
-
-#: core/validators.py:237
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "Rosszul formázott XML: %s"
-
-#: core/validators.py:254
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "Érvénytelen URL: %s"
-
-#: core/validators.py:259 core/validators.py:261
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "A hivatkozás (%s) egy törött link."
-
-#: core/validators.py:267
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Írja be egy érvényes USA állam rövidítését."
-
-# TODO
-#: core/validators.py:288
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Ennek a mezőnek egyeznie kell a(z) %s mezővel."
-
-#: core/validators.py:307
-msgid "Please enter something for at least one field."
-msgstr "Írjon be valamit legalább egy mezőbe."
-
-#: core/validators.py:316 core/validators.py:327
-msgid "Please enter both fields or leave them both empty."
-msgstr "Töltse ki mindkét mezőt, vagy hagyja üresen mindkettőt."
-
-#: core/validators.py:335
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Ezt a mezőt meg kell adni, ha %(field)s értéke %(value)s"
-
-#: core/validators.py:348
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Ezt a mezőt meg kell adni, ha %(field)s értéke nem %(value)s"
-
-#: core/validators.py:367
-msgid "Duplicate values are not allowed."
-msgstr "Ugyanazok az értékek nem megengedettek."
-
-#: core/validators.py:382
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Az értéknek %(lower)s és %(upper)s között kell lennie."
-
-#: core/validators.py:384
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Az értéknek legalább ennyinek kell lennie: %s."
-
-#: core/validators.py:386
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Az érték nem lehet több ennyinél: %s."
-
-#: core/validators.py:427
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Az értéknek %s hatványának kell lennie."
-
-#: core/validators.py:437
-msgid "Please enter a valid decimal number."
-msgstr "Írjon be egy érvényes decimális számot."
-
-#: core/validators.py:444
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Írjon be egy legalább %s jegyű érvényes decimális számot."
-msgstr[1] "Írjon be egy legalább %s jegyű érvényes decimális számot."
-
-#: core/validators.py:447
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "Írjon be egy érvényes decimális számot, legfeljebb %s egész számjeggyel."
-msgstr[1] "Írjon be egy érvényes decimális számot, legfeljebb %s egész számjeggyel."
-
-#: core/validators.py:450
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Írjon be egy érvényes decimális számot, legfeljebb %s tizedessel."
-msgstr[1] "Írj be egy érvényes decimális számot, legfeljebb %s tizedessel."
-
-#: core/validators.py:458
-msgid "Please enter a valid floating point number."
-msgstr "Írj be egy érvényes lebegőpontos számot."
-
-#: core/validators.py:467
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "A feltöltött fájl legalább %s bájt méretű legyen."
-
-#: core/validators.py:468
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "A feltöltött fájl legfeljebb %s bájt méretű lehet."
-
-#: core/validators.py:485
-msgid "The format for this field is wrong."
-msgstr "Ennek a mezőnek rossz a formátuma."
-
-#: core/validators.py:500
-msgid "This field is invalid."
-msgstr "A mező érvénytelen."
-
-#: core/validators.py:536
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Nem lehet semmit kinyerni innen: %s."
-
-#: core/validators.py:539
-#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"A hivatkozás (%(url)s) érvénytelen '%(contenttype)s' Content-Type fejlécet "
-"adott vissza."
-
-#: core/validators.py:572
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Zárja le a nyitott %(tag)s címkét a következő sorban: %(line)s. (A sor "
-"kezdete: \"%(start)s\".)"
-
-#: core/validators.py:576
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Valamely szöveg nem megengedett ebben a környezetben a következő sorban: %"
-"(line)s. (A sor kezdete: \"%(start)s\".)"
-
-#: core/validators.py:581
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"%(attr)s\" érvénytelen tulajdonság a következő sorban: %(line)s. (A sor "
-"kezdete: \"%(start)s\".)"
-
-#: core/validators.py:586
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"<%(tag)s>\" érvénytelen címke a következő sorban: %(line)s. (A sor "
-"kezdete: \"%(start)s\".)"
-
-#: core/validators.py:590
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"A következő sorban lévő címkéről hiányzik egy vagy több kötelező "
-"tulajdonság: %(line)s. (A sor kezdete: \"%(start)s\".)"
-
-#: core/validators.py:595
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"A tulajdonság (\"%(attr)s\") érvénytelen a következő sorban: %(line)s. (A "
-"sor kezdete: \"%(start)s\".)"
-
-#: db/models/manipulators.py:308
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "A megadott %(field)s mezőhöz már létezik %(type)s típusú %(object)s elem."
-
-#: db/models/fields/__init__.py:332 db/models/fields/__init__.py:667
-msgid "This value must be an integer."
-msgstr "Az értéknek egész számnak kell lennie."
-
-#: db/models/fields/__init__.py:363
-msgid "This value must be either True or False."
-msgstr "Az értéknek igaznak (True) vagy hamisnak (False) kell lennie."
-
-#: db/models/fields/__init__.py:396
-msgid "This field cannot be null."
-msgstr "Ez a mező nem lehet nulla."
-
-#: db/models/fields/__init__.py:516 db/models/fields/__init__.py:534
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Írjon be egy érvényes dátumot/időt 'ÉÉÉÉ-HH-NN ÓÓ-PP[:MP[.MILLIS]] alakban."
-
-#: db/models/fields/__init__.py:570
-msgid "This value must be a decimal number."
-msgstr "Az értéknek decimálisnak kell lennie."
-
-#: db/models/fields/__init__.py:703
-msgid "This value must be either None, True or False."
-msgstr ""
-"Az értéknek semminek (None), igaznak (True), vagy hamisnak (False) kell "
-"lennie."
-
-#: db/models/fields/__init__.py:811 db/models/fields/__init__.py:825
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Írjon be egy érvényes időt 'ÓÓ:PP[:MP[:MILLIS]]' alakban."
-
-#: db/models/fields/related.py:748
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Tartsa lenyomva a \"Control\"-t (vagy Mac-en a \"Command\"-ot) több elem "
-"kiválasztásához."
-
-#: db/models/fields/related.py:825
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Írjon be érvényes %(self)s ID-t. A mostani érték érvénytelen: %(value)r."
-msgstr[1] ""
-"Írjon be érvényes %(self)s ID-ket. A mostani értékek érvénytelenek: %(value)"
-"r."
-
-#: forms/fields.py:52 newforms/fields.py:46 oldforms/__init__.py:374
-msgid "This field is required."
-msgstr "Ennek a mezőnek a megadása kötelező."
-
-#: forms/fields.py:53 newforms/fields.py:47
-msgid "Enter a valid value."
-msgstr "Adjon meg egy érvényes értéket."
-
-#: forms/fields.py:133 newforms/fields.py:124
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Bizonyosodjon meg arról, hogy ez az érték legfeljebb %(max)d karaktert "
-"tartalmaz (jelenlegi hossza: %(length)d)."
-
-#: forms/fields.py:134 newforms/fields.py:125
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Bizonyosodjon meg arról, hogy ez az érték legalább %(min)d karaktert "
-"tartalmaz (jelenlegi hossza: %(length)d)."
-
-#: forms/fields.py:162 forms/fields.py:191 forms/fields.py:220
-#: newforms/fields.py:153 newforms/fields.py:182 newforms/fields.py:211
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Bizonyosodjon meg arról, hogy az érték %s vagy kisebb."
-
-#: forms/fields.py:163 forms/fields.py:192 forms/fields.py:221
-#: newforms/fields.py:154 newforms/fields.py:183 newforms/fields.py:212
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Bizonyosodjon meg arról, hogy az érték %s vagy nagyobb."
-
-#: forms/fields.py:190 forms/fields.py:219 newforms/fields.py:181
-#: newforms/fields.py:210
-msgid "Enter a number."
-msgstr "Adj meg egy számot."
-
-#: forms/fields.py:222 newforms/fields.py:213
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Bizonyosodjon meg arról, hogy nincs ennél több számjegy: %s."
-
-#: forms/fields.py:223 newforms/fields.py:214
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Bizonyosodjon meg arról, hogy nincs ennél több tizedesjegy: %s."
-
-#: forms/fields.py:224 newforms/fields.py:215
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-"Bizonyosodjon meg arról, hogy nincs ennél több számjegy a tizedesvessző "
-"előtt: %s."
-
-#: forms/fields.py:282 forms/fields.py:815 newforms/fields.py:263
-#: newforms/fields.py:750
-msgid "Enter a valid date."
-msgstr "Adjon meg egy érvényes dátumot."
-
-#: forms/fields.py:316 forms/fields.py:816 newforms/fields.py:296
-#: newforms/fields.py:751
-msgid "Enter a valid time."
-msgstr "Adjon meg egy érvényes időt."
-
-#: forms/fields.py:355 newforms/fields.py:335
-msgid "Enter a valid date/time."
-msgstr "Adjon meg egy érvényes dátumot/időt."
-
-#: forms/fields.py:442 newforms/fields.py:434
-msgid "No file was submitted."
-msgstr "Semmilyen fájl sem került feltöltésre."
-
-#: forms/fields.py:443 newforms/fields.py:435 oldforms/__init__.py:689
-msgid "The submitted file is empty."
-msgstr "A küldött fájl üres."
-
-#: forms/fields.py:533 newforms/fields.py:497
-msgid "Enter a valid URL."
-msgstr "Adjon meg egy érvényes URL-t."
-
-#: forms/fields.py:534 newforms/fields.py:498
-msgid "This URL appears to be a broken link."
-msgstr "Ez a hivatkozás törött linknek tűnik."
-
-#: forms/fields.py:613 forms/fields.py:664 newforms/fields.py:598
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Válasszon érvényes elemet. '%(value)s' nincs az elérhető lehetőségek között."
-
-#: forms/fields.py:665 forms/fields.py:726 forms/models.py:531
-#: newforms/fields.py:599 newforms/fields.py:661 newforms/models.py:372
-msgid "Enter a list of values."
-msgstr "Adja meg értékek egy listáját."
-
-#: forms/fields.py:844 newforms/fields.py:779
-msgid "Enter a valid IPv4 address."
-msgstr "Írjon be egy érvényes IPv4 címet."
-
-#: forms/fields.py:854
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Az URL barát cím csak betűket, számokat, aláhúzásokat és kötőjeleket "
-"tartalmazhat."
-
-#: forms/formsets.py:242 forms/formsets.py:244
-msgid "Order"
-msgstr "Sorrend"
-
-#: forms/models.py:463 newforms/fields.py:559 newforms/models.py:305
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Válasszon érvényes elemet. Az Ön választása nincs az elérhető lehetőségek "
-"között."
-
-#: forms/models.py:532 newforms/models.py:373
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Válasszon érvényes elemet. %s nincs az elérhető lehetőségek között."
-
-#: oldforms/__init__.py:409
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "A szövegnek rövidebbnek kell lennie %s karakternél."
-msgstr[1] "A szövegnek rövidebbnek kell lennie %s karakternél."
-
-#: oldforms/__init__.py:414
-msgid "Line breaks are not allowed here."
-msgstr "Sortörések itt nem megengedettek."
-
-#: oldforms/__init__.py:512 oldforms/__init__.py:586 oldforms/__init__.py:625
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Válasszon egy érvényes elemet, '%(data)s' nincs ezek között: %(choices)s."
-
-#: oldforms/__init__.py:745
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Írjon be egy egész számot -32 768 és 32 767 között."
-
-#: oldforms/__init__.py:755
-msgid "Enter a positive number."
-msgstr "Írjon be egy pozitív számot."
-
-#: oldforms/__init__.py:765
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Írjon be egy egész számot 0 és 32 767 között."
-
-#: template/defaultfilters.py:706
-msgid "yes,no,maybe"
-msgstr "igen,nem,talán"
-
-#: template/defaultfilters.py:737
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bájt"
-msgstr[1] "%(size)d bájt"
-
-#: template/defaultfilters.py:739
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:741
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:742
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "du"
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "de"
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "DU"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "DE"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "éjfél"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "dél"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "hétfő"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "kedd"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "szerda"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "csütörtök"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "péntek"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "szombat"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "vasárnap"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "hét"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "kedd"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "sze"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "csüt"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "pén"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "szo"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "vas"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "január"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "február"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "március"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "április"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "május"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "június"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "július"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "augusztus"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "szeptember"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "október"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "december"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "febr"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "márc"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "ápr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "máj"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jún"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "júl"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "szept"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "febr."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "szept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dec."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "vagy"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "év"
-msgstr[1] "év"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "hónap"
-msgstr[1] "hónap"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "hét"
-msgstr[1] "hét"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "nap"
-msgstr[1] "nap"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "óra"
-msgstr[1] "óra"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "perc"
-msgstr[1] "perc"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "perc"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "Y. F j."
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "Y. F j."
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "Y. F j."
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s sikeresen létrehozva."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s sikeresen frissítve."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s törölve."
-
diff --git a/parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index e538984..0000000
--- a/parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 26f0232..0000000
--- a/parts/django/django/conf/locale/hu/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,111 +0,0 @@
-# translation of djangojs.po to Hungarian
-# translation of djangojs.po to
-# This file is distributed under the same license as the PACKAGE package.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2007-09-13 13:30+0200\n"
-"Last-Translator: Szilveszter Farkas <szilveszter.farkas@gmail.com>\n"
-"Language-Team: Hungarian <hu@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Elérhető %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Mindet kijelölni"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Hozzáadás"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Eltávolítás"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s kiválasztva"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Válassza ki a kért elemeket és kattintson"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Összes törlése"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "január február március április május június július augusztus szeptember október november december"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "vasárnap hétfő kedd szerda csütörtök péntek szombat"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "V H K Sz Cs P Szo"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "Most"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "Óra"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "Válassza ki az időt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "Éjfél"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "Reggel 6 óra"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "Dél"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "Mégsem"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "Ma"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "Naptár"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "Tegnap"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "Holnap"
-
diff --git a/parts/django/django/conf/locale/hu/__init__.py b/parts/django/django/conf/locale/hu/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/hu/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/hu/formats.py b/parts/django/django/conf/locale/hu/formats.py
deleted file mode 100644
index cb93e2f..0000000
--- a/parts/django/django/conf/locale/hu/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'Y. F j.'
-TIME_FORMAT = 'G:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'F j.'
-SHORT_DATE_FORMAT = 'Y.m.d.'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = u' ' # Non-breaking space
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/id/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/id/LC_MESSAGES/django.mo
deleted file mode 100644
index b015ca0..0000000
--- a/parts/django/django/conf/locale/id/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/id/LC_MESSAGES/django.po b/parts/django/django/conf/locale/id/LC_MESSAGES/django.po
deleted file mode 100644
index 67b89e9..0000000
--- a/parts/django/django/conf/locale/id/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5127 +0,0 @@
-# Translation of django.po to Indonesian
-# This file is distributed under the same license as the Django package.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-09 20:22+0200\n"
-"PO-Revision-Date: 2010-05-08 18:39+0700\n"
-"Last-Translator: Selwin Ong <selwin@ui.co.id>\n"
-"Language-Team: Indonesian <id@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Bahasa Arab"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bahasa Bulgaria"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bahasa Bengali"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bahasa Bosnia"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Bahasa Catalan"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Bahasa Ceko"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Bahasa Wales"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Bahasa Denmark"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Bahasa Jerman"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Bahasa Yunani"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Bahasa Inggris"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Bahasa Inggris Britania"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Bahasa Spanyol"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Bahasa Spanyol"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Bahasa Estonia"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Bahasa Basque"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Bahasa Persia"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Bahasa Finlandia"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Bahasa Perancis"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Bahasa Frisia"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Bahasa Irlandia"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Bahasa Gali"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Bahasa Hebrew"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Bahasa Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Bahasa Croasia"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Bahasa Hungaria"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Bahasa Indonesia"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Bahasa Iceland"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Bahasa Italia"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Bahasa Jepang"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Bahasa Georgia"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Bahasa Khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Bahasa Kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Bahasa Korea"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Bahasa Lithuania"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Bahasa Latvia"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Bahasa Macedonia"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "Bahasa Mongolia"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "Bahasa Belanda"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "Bahasa Norwegia"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "Bahasa Norwegia Bokmal"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "Bahasa Norwegia Nynorsk"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "Bahasa Polandia"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "Bahasa Portugal"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "Bahasa Portugal Brazil"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "Bahasa Romania"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "Bahasa Russia"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "Bahasa Slovakia"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "Bahasa Slovenia"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "Bahasa Albania"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "Bahasa Serbia"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "Bahasa Serbia Latin"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "Bahasa Swedia"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "Bahasa Tamil"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "Bahasa Telugu"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "Bahasa Thailand"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "Bahasa Turki"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "Bahasa Ukrainia"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "Bahasa Vietnam"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "Bahasa Cina Sederhana"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "Bahasa Cina Tradisional"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Berhasil menghapus %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Apakah Anda yakin?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Hapus %(verbose_name_plural)s yang terpilih"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Oleh %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Semua"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Kapanpun"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Hari ini"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Tujuh hari terakhir"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Bulan ini"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Tahun ini"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Ya"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Tidak"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Tidak diketahui"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Aksi:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "waktu aksi"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id obyek"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "representasi obyek"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "jenis aksi"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "ganti pesan"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "pencatatan log"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "pencatatan log"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "None"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "%s telah diubah"
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "dan"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" telah ditambahkan."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s untuk %(name)s \"%(object)s\" telah diubah."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" telah dihapus."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Tidak ada field yang berubah."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" berhasil ditambahkan."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Anda boleh mengubahnya kembali di bawah."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Anda boleh menambahkan %s lagi di bawah."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" berhasil diubah."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" berhasil ditambahkan. Anda boleh mengubahnya di bawah."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr "Obyek harus dipilih sebelum dimanipulasi. Tidak ada obyek yang diubah."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Tidak ada aksi yang terpilih."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Tambahkan %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Obyek %(name)s dengan primary key %(key)r tidak ada."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Ubah %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Database error"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s berhasil diubah."
-msgstr[1] "%(count)s %(name)s berhasil diubah."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s terpilih"
-msgstr[1] "Semua %(total_count)s terpilih"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 dari %(cnt)s terpilih"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" berhasil dihapus."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Ubah riwayat: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Mohon masukkan nama dan sandi yang benar. Kedua field ini case-sensitive."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Mohon log in kembali karena sesi Anda telah habis."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Tampaknya peramban Anda tidak menerima cookies. Mohon ubah konfigurasi Anda, "
-"reload halaman ini dan coba lagi."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Nama tidak boleh memiliki karakter '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Nama akun Anda bukan alamat email. Cobalah dengan '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Administrasi situs"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Log in"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "administrasi %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Tanggal:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Waktu:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Saat ini:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Ubah:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Cari"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Tambah Satu Lagi"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Halaman tidak ditemukan"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Maaf, halaman yang Anda cari tidak ditemukan."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Halaman Utama"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Server error"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Server error (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Server Error <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Error telah ditemukan dan dilaporkan kepada administrator situs melalui e-"
-"mail dan akan diperbaiki secepatnya. Terima kasih atas pengertian Anda."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Jalankan aksi terpilih"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Go"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Klik di sini untuk memilih semua obyek di semua halaman"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Pilih seluruh %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Hilangkan pilihan"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Selamat datang,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentasi"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Ganti sandi"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Log out"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Admin situs Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administrasi Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Tambah"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Riwayat"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Lihat di situs"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Mohon perbaiki error di bawah ini."
-msgstr[1] "Mohon perbaiki error-error di bawah ini."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Tambahkan %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filter"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Hapus"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Menghapus %(object_name)s '%(escaped_object)s' akan menghapus obyek-obyek "
-"lain yang terhubung, akan tetapi akun Anda tidak memiliki ijin untuk "
-"menghapus obyek-obyek dengan tipe:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Apakah Anda yakin ingin menghapus %(object_name)s \"%(escaped_object)s\"? "
-"Semua obyek-obyek lain yang berhubungan juga akan dihapus:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ya, saya yakin"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Hapus beberapa obyek"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Menghapus %(object_name)s akan menghapus obyek-obyek lain yang berhubungan, "
-"tetapi akun Anda tidak memiliki ijin untuk menghapus tipe-tipe obyek:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Apakah Anda yakin ingin menghapus obyek %(object_name)s yang terpilih? Semua "
-"obyek di bawah ini dan obyek-obyek lain yang berhubungan akan dihapus:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Berdasarkan %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Model-model yang tersedia di aplikasi %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Ubah"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Anda tidak memiliki ijin untuk mengubah apapun."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Aktivitas Sebelumnya"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Aktivitas Saya"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Tidak ada yang tersedia"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Konten tidak diketahui"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Ada yang salah dengan instalasi database Anda. Pastikan tabel-tabel database "
-"yang benar telah dibuat dan database dapat dibaca oleh user yang benar."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Username:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Sandi:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Tanggal/waktu"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Pengguna"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Aksi"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Obyek ini tidak memiliki riwayat perubahan. Kemungkinan obyek ini tidak "
-"ditambahkan melalui situs administrasi ini."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Perlihatkan semua"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Simpan"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Cari"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 hasil"
-msgstr[1] "%(counter)s hasil"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s total"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Simpan sebagai baru"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Simpan dan tambahkan satu lagi"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Simpan dan terus mengubah"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Pertama, masukkan username dan sandi. Kemudian Anda akan dapat mengubah opsi-"
-"opsi lain."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Masukkan sandi baru untuk <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Sandi"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Sandi (ulangi)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Masukkan sandi yang sama dengan di atas, untuk verifikasi."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Tambahkan satu %(verbose_name)s lagi"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Hapus"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Hapus?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Terima kasih telah menggunakan situs ini hari ini."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Log in kembali"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Ubah sandi"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Sandi telah berhasil diubah"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Sandi Anda telah diubah."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Mohon masukkan sandi lama Anda untuk keperluan sekuriti dan masukkan sandi "
-"baru dua kali untuk memastikan Anda tidak melakukan kesalahan ketik."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Sandi lama"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Sandi baru"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Ubah sandi saya"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Reset sandi"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Sandi telah di-reset"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Sandi Anda telah diperbaharui. Anda boleh log in kembali sekarang."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Konfirmasi reset sandi"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Masukkan sandi baru"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Masukkan sandi baru Anda dua kali untuk memastikan tidak terjadinya "
-"kesalahanketik."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Sandi baru:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Konfirmasi sandi:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Reset sandi tidak berhasil"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Link reset sandi tidak benar, kemungkinan karena link itu sudah dipakai "
-"sebelumnya. Mohon ajukan sebuah permintaan reset sandi lagi."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Reset sandi berhasil"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Kami telah mengirimkan instruksi untuk me-reset sandi Anda melalui alamat e-"
-"mail yang Anda masukkan. Anda akan menerima e-mail tersebut sebentar lagi."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Anda menerima e-mail ini karena Anda mengajukan permintaan reset sandi"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "untuk akun Anda di %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Mohon kunjungi halaman di bawah ini dan pilih sandi baru:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Username Anda, apabila Anda lupa:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Terima kasih telah menggunakan situs kami!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Tim %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Lupa sandi Anda? Masukkan alamat e-mail Anda di bawah dan kami akan "
-"mengirimkan instruksi untuk mendapatkan sandi baru."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Alamat e-mail:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Reset sandi saya"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Semua tanggal"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Pilih %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Pilih %s untuk diubah"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "situs"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "template"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikasi %r tidak ditemukan"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r tidak ada di aplikasi %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "obyek `%(app_label)s.%(data_type)s` yang berhubungan"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "obyek-obyek `%(app_label)s.%(object_name)s` yang berhubungan"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "semua %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "jumlah %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Field-field dalam %s obyek"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s bukan berupa obyek urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklet dokumentasi"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Untuk menginstal bookmarklet, drag tautan ini ke toolbar\n"
-"bookmark Anda atau klik kanan di pautan tersebut dan tambahkan ke bookmark "
-"Anda. Kini Anda dapat\n"
-"memilih bookmarklet dari halaman apapun di situs. Jangan lupa beberapa\n"
-"bookmarklet ini hanya bisa digunakan dari komputer yang terdaftar \n"
-"sebagai \"internal\" (hubungi administrator sistem Anda apabila tidak yakin "
-"apakah\n"
-"komputer Anda termasuk \"internal\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentasi untuk halaman ini"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Membawa Anda ke halaman dokumentasi untuk view yang menghasilkan halaman "
-"tersebut."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Perlihatkan ID obyek"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Perlihatkan content-type dan ID unik untuk halaman-halaman yang mewakili "
-"sebuah obyek tunggal."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Ubah obyek ini (di jendela ini)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Loncat ke halaman admin untuk halaman-halaman yang mewakili sebuah obyek "
-"tunggal."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Ubah obyek ini (di jendela baru)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Seperti di atas, tetapi membuka halaman admin di jendela baru."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Informasi pribadi"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Ijin akses"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Tanggal-tanggal penting"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grup"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Sandi berhasil diubah."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Ganti sandi: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Username"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Wajib. 30 karakter atau kurang dalam kombinasi huruf, angka dan @/./+/-/_ ."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-"Nilai ini hanya boleh berisi huruf, angka dan karakter-karakter @/./+/-/_ ."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Konfirmasi sandi"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Pengguna dengan username tersebut sudah ada."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Dua field sandi tidak sama."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Akun ini tidak aktif."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Tampaknya peramban Anda tidak menerima cookies. Cookies diperlukan untuk log "
-"in."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Alamat e-mail tersebut tidak terhubung dengan akun apapun. Apakah Anda yakin "
-"telah terdaftar?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Reset sandi di %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Konfirmasi sandi baru"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Sandi lama Anda tidak benar. Mohon masukkan sekali lagi."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nama"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "namasandi"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "ijin"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "ijin"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grup"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grup"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "username"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Wajib. 30 karakter atau kurang dalam kombinasi huruf, angka dan karakter @/./"
-"+/-/_ "
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "nama depan"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "nama belakang"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "alamat e-mail"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "sandi"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Gunakan '[algo]$[salt]$[hexdigest]' atau <a href=\"password/\">formulir "
-"ganti sandi</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "status staff"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Menentukan apakah pengguna berhak masuk ke situs administrasi ini."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktif"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Menentukan apakah pengguna dianggap aktif. Hapus pilihan ini tanpa perlu "
-"menghapus akun apapun."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "status superuser"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Menentukan apakah pengguna memiliki semua ijin tanpa perlu diberikan secara "
-"manual."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "login terakhir"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "tanggal daftar"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Selain ijin-ijin yang diberikan secara manual, pengguna ini juga akan "
-"mendapatkan ijin yang diberikan kepada semua grup di mana ia berada."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "ijin pengguna"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "pengguna"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "pengguna-pengguna"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "pesan"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Logged out"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Masukkan alamat e-mail yang benar."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Konten"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "ditandai"
-msgstr[1] "ditandai"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Tandai komentar-komentar terpilih"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "disetujui"
-msgstr[1] "disetujui"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Setujui komentar-komentar terpilih"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "dihapus"
-msgstr[1] "dihapus"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Hapus komentar-komentar terpilih"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "Satu komentar berhasil di-%(action)s."
-msgstr[1] "%(count)s komentar berhasil di-%(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "komentar-komentar di %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Komentar-komentar terakhir di %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nama"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Alamat email"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Awas! Kata %s tidak di-ijinkan di sini."
-msgstr[1] "Awas! Kata-kata %s tidak di-ijinkan di sini."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Apabila Anda mengisi field ini komentar Anda akan dianggap sebagai spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tipe konten"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID obyek"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nama pengguna"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "alamat email pengguna"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL pengguna"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "tanggal/waktu disimpan"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "alamat IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "untuk umum"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Jangan centang box ini untuk membuat komentar hilang dari situs."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "telah dihapus"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Centang box ini apabila komentar tidak pantas. Sebuah pesan \"Komentar ini "
-"telah dihapus\" akan ditampilkan sebagai penggantinya."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentar-komentar"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Komentar ini dikirim oleh seorang pengguna yang ter-otentikasi sehingga nama "
-"pengguna tidak dapat diubah."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Komentar ini dikirim oleh seorang pengguna yang ter-otentikasi sehingga "
-"alamat email tidak dapat diubah."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Dikirim oleh %(user)s pada tanggal %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "tanda"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "tanggal"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "tanda komentar"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "tanda-tanda komentar"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Perbolehkan sebuah komentar"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Yakin ingin membuka komentar ini untuk umum?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Perbolehkan"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Terima kasih telah memperbolehkan"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Terima kasih telah membantu meningkatkan kualitas diskusi di situs kami"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Hapus sebuah komentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Yakin ingin menghapus komentar ini?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Terima kasih telah menghapus"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Tandai komentar ini"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Yakin ingin menandai komentar ini?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Tandai"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Terima kasih telah menandai"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Kirim"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Preview"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Terima kasih telah meninggalkan komentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Terima kasih atas komentar Anda"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Preview komentar Anda"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Mohon perbaiki kesalahan di bawah ini"
-msgstr[1] "Mohon perbaiki kesalahan-kesalahan di bawah ini"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Kirim komentar Anda"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "atau lakukan perubahan"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "nama class model python"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipe-tipe konten"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Contoh: '/about/contact/'. Pastikan dimulai dan diakhiri dengan garis miring "
-"(/)."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Nilai ini hanya boleh terdiri dari huruf, angka, garis bawah, garis tengah "
-"atau garis miring (/)."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opsi advanced"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "judul"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "konten"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "perbolehkan komentar"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nama template"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Contoh: 'flatpages/contact_page.html'. Apabila tidak tersedia, sistem akan "
-"menggunakan 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "pendaftaran dibutuhkan"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Apabila dipilih, hanya pengguna ter-otentikasi yang bisa mengunjungi halaman "
-"ini."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flat page"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flat pages"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Maaf, formulir Anda sudah tidak berlaku lagi. Mohon lanjutkan mengisi "
-"formulir dari halaman ini."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Field GIS dasar dibuat berdasarkan OpenGIS Specification Geometry."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Point"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Line string"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Multi-point"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Multi-line string"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Multi polygon"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Geometry collection"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Nilai geometri tidak tersedia."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Nilai geometri salah"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tipe geometri salah"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Telah terjadi kesalahan ketika merubah geometri ke SRID dari field formulir"
-"geometri."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f juta"
-msgstr[1] "%(value).1f juta"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milyar"
-msgstr[1] "%(value).1f milyar"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilyun"
-msgstr[1] "%(value).1f trilyun"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "satu"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dua"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tiga"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "empat"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "lima"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "enam"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "tujuh"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "delapan"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "sembilan"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "hari ini"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "besok"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "kemarin"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Masukkan kode pos dalam format NNNN atau ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Field ini hanya terdiri dari angka."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Field ini membutuhkan 7 atau 8 angka."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Masukkan CUIT yang benar dalam format XX-XXXXXXXX-X atau XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT salah."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Lower Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Upper Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vienna"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Masukkan kode pos dalam format XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Masukkan nomor identifikasi Austria yang benar dalam format XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Masukkan kode pos 4 angka."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Masukkan kode pos dalam format XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Nomor telepon harus dalam format XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Pilih propinsi Brazil yang benar. Propinsi ini tidak termasuk dalam daftar "
-"propinsi."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Nomor CPF salah."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Field ini membutuhkan paling banyak 11 angka atau 14 huruf."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Nomor CNPJ salah."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Field ini membutuhkan sedikitnya 14 angka"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Masukkan kode pos dalam format XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Masukkan nomor asuransi Kanada yang benar dalam format XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Masukkan identitas atau nomor paspor Swiss yang benar dalam bentuk "
-"X1234567<0 atau 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Masukkan RUT Chile yang benar."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Masukkan RUT Chile yang benar. Formatnya adalah XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "RUT Chile tidak valid."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Daerah Bohemia Tengah"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Daerah Bohemia Selatan"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Daerah Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Daerah Carlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Daerah Usti"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Daerah Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Daerah Hradec"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Daerah Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Daerah Vysocina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Daerah Moravia Selatan"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Daerah Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Daerah Zlin"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Daerah Moravia-Silesian"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Masukkan kode pos dalam format XXXXX atau XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Masukkan tanggal lahir dalam format XXXXXX/XXXX atau XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Parameter opsional jenis kelamin tidak benar, pilih 'f' atau 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Masukkan tanggal lahir yang benar."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Masukkan nomor pengenal yang benar."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lower Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Rhine-Westphalia Utara"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Masukkan kode pos dalam format XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Masukkan nomor kartu identitas Jerman yang benar dalam format XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principality of Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearic Islands"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Basque Country"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canary Islands"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castile-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castile and Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Region of Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Masukkan kode pos yang benar dalam format 01XXX - 52XXX"
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Masukkan nomor telepon yang benar dalam format 6XXXXXXXX, 8XXXXXXXX atau "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Mohon masukkan NIF, NIE atau CIF yang benar."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Mohon masukkan NIF atau NIE yang benar."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Checksum untuk NIF salah."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Checksum untuk NIE salah."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Checksum untuk CIF salah."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Masukkan nomor akun bank yang benar dalam format XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Checksum untuk nomor akun bank salah."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Masukkan nomor identitas Finlandia yang benar."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Nomor telepon harus dalam format 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Masukkan kode pos yang benar"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Masukkan nomor telepon yang benar"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Masukkan nomor polisi kendaraan yang benar"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Masukkan nomor NIK/KTP yang benar"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federal Government"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Masukkan kode pos dalam format XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Masukkan nomor identifikasi Iceland yang benar. Formatnya adalah XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Nomor identifikasi Iceland tidak benar."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Masukkan kode pos yang benar."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Masukkan nomor identifikasi yang benar."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Masukkan nomor VAT yang benar."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Masukkan kode pos dalam format XXXXXXX atau XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Masukkan nomor ID Kuwait yang benar"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Masukkan kode pos yang benar"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Masukkan nomor SoFi yang benar"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Masukkan nomor identifikasi Norwegia yang benar."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Field ini membutuhkan 8 angka."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Field ini membutuhkan 11 angka."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Nomor identifikasi nasional terdiri dari 11 angka."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Checksum untuk nomor identifikasi nasional salah."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Masukkan nomor pajak (NIP) dalam format XXX-XXX-XX-XX atau XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Checksum untuk nomor pajak (NIP) salah."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Nomor Registrasi Bisnis Nasional (REGON) terdiri dari 9 atau 14 angka."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Checksum untuk Nomor Registrasi Bisnis Nasional (REGON) salah."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Masukkan kode pos dalam format XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Masukkan kode pos dalam format XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Nomor telepon harus memiliki 9 angka, atau dimulai dari + atau 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Masukkan CIF yang benar."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Masukkan CNP yang benar."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Masukkan IBAN yang benar dalam format ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Nomor telepon harus dalam format XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Masukkan kode pos yang benar dalam format XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Masukkan nomor organisasi Swedia yang benar."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Masukkan nomor identifikasi pribadi Swedia yang benar."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Nomor koordinasi tidak diperbolehkan."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Masukkan kode pos Swedia dalam format XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Daerah Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Daerah Brastilava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Daerah Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Daerah Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Daerah Presov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Daerah Trencin"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Daerah Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Daerah Zilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Masukkan kode pos yang benar."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall dan Kepulauan Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries dan Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Kepulauan Orkney"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Kepulauan Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Inggris"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlandia Utara"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Scotlandia"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Masukkan kode pos dalam format XXXXX atau XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Nomor telepon harus dalam format XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Masukkan nomor identifikasi A.S. yang benar dalam format XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Masukkan sebuah propinsi atau teritori A.S."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Propinsi A.S (dua huruf besar)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Nomor telepon"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Masukkan nomor CI yang benar dalam format X.XXX.XXX-X,XXXXXXX-X atau "
-"XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Masukkan nomor CI yang benar."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Masukkan nomor ID Afrika Selatan yang benar"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Masukkan kode pos Afrika Selatan yang benar"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "pesan malas"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "alihkan dari"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Harus berupa path absolut, tanpa nama domain. Contoh: '/kejadian/cari/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "alihkan ke"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Dapat berupa path absolut (seperti di atas) atau URL penuh dimulai dengan "
-"'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "alihkan"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "dialihkan"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "kunci sesi"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "data sesi"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "tanggal kadaluarsa"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesi"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesi"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nama domain"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "nama yang ditampilkan"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "situs"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Masukkan nilai yang benar."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Masukkan URL yang benar."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "URL ini tampaknya tidak ada."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Masukkan 'slug' yang terdiri dari huruf, bilangan, garis bawah atau garis "
-"tengah."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Masukkan alamat IPv4 yang benar."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Masukkan bilangan yang dipisahkan dengan koma."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Pastikan nilai ini %(limit_value)s (saat ini %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Pastikan nilai ini lebih kecil dari atau sama dengan %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Pastikan nilai ini lebih besar dari atau sama dengan %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Pastikan nilai ini memiliki sedikitnya %(limit_value)d karakter (saat ini %"
-"(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Pastikan nilai ini tidak memiliki lebih dari %(limit_value)d karakter (saat "
-"ini %(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s harus unik untuk %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s dengan %(field_label)s telah ada."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Nilai %r bukan pilihan yang benar."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Field ini tidak boleh null."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Field ini tidak boleh kosong."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Field dengan tipe: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Integer"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Nilai ini harus berupa integer."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Nilai ini harus berupa True atau False"
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Nilai Boolean (True atau False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (maximum %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Integer yang dipisahkan dengan koma"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Tanggal (tanpa waktu)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Masukkan tanggal valid dalam format YYYY-MM-DD"
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Tanggal salah: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Masukkan tanggal/waktu yang benar dalam format YYYY-MM-DD HH:MM[:ss[.uuuuuu]]"
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Tanggal (dengan waktu)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Nilai ini harus berupa bilangan desimal."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Bilangan decimal"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Alamat e-mail"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Path berkas"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Nilai ini harus berupa float."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Bilangan floating point"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Integer besar (8 byte)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Nilai harus berupa None, True atau False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (True, False atau None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Teks"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Waktu"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Masukkan waktu yang benar dalam bentuk HH:MM[:ss[.uuuuuu]]"
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "Teks XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Model %(model)s dengan pk %(pk)r tidak ada."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Foreign Key (tipe tergantung dari field yang berhubungan)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Hubungan one-to-one"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Hubungan many-to-many"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Tekan \"Control\", ata \"Command\" di Mac untuk memilih lebih dari satu."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Mohon masukkan ID %(self)s yang benar. Nilai %(value)r salah."
-msgstr[1] "Mohon masukkan ID %(self)s yang benar. Nilai-nilai %(value)r salah."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Field ini tidak boleh kosong."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Masukkan bilangan penuh."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Masukkan sebuah bilangan."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Pastikan total bilangan tidak melebihi %s angka."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Pastikan bilangan tidak memiliki lebih dari %s angka desimal."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Pastikan bilangan tidak memiliki lebih dari %s angka sebelum desimal."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Masukkan tanggal yang benar."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Masukkan waktu yang benar."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Masukkan tanggal/waktu yang benar."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Tidak ada berkas yang dikirimkan. Periksa tipe encoding form."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Tidak ada berkas yang dikirimkan."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Berkas yang dikirimkan kosong."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Pastikan nama berkas tidak melebihi %(max)d angka (saat ini %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Unggah gambar yang benar. Berkas yang anda unggah bukan gambar atau gambar "
-"itu rusak."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Masukkan pilihan yang benar. %(value)s bukan pilihan yang valid."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Masukkan daftar nilai."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Urutan"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Mohon perbaiki data duplikat untuk %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Mohon perbaiki data duplikat untuk %(field)s yang harus memiliki nilai unik."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Mohon perbaiki data duplikat untuk %(field_name)s yang harus memiliki nilai "
-"unik untuk pencarian %(lookup)s di %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Mohon perbaiki nilai duplikat di bawah ini."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Foreign key inline tidak cocok dengan primary key milik parent."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Masukkan pilihan yang benar. Pilihan anda bukan salah satu dari pilihan yang "
-"ada."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Masukkan pilihan yang benar. %s bukan salah satu pilihan yang ada."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" bukan pilihan yang benar untuk sebuah primary key."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "ya,tidak,mungkin"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "tengah malam"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "siang"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Senin"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Selasa"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Rabu"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Kamis"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Jumat"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Sabtu"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Minggu"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Senin"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Selasa"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Rabu"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Kamis"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Jumat"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Sabtu"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Minggu"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Januari"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Februari"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Maret"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "April"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Mei"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Agustus"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "September"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "November"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Desember"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "Januari"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "Februari"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "Maret"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "April"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "Mei"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "Juni"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "Juli"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "Agustus"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "September"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "Oktober"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "November"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "Desember"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Agus."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dec."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "atau"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "tahun"
-msgstr[1] "tahun"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "bulan"
-msgstr[1] "bulan"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "minggu"
-msgstr[1] "minggu"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "hari"
-msgstr[1] "hari"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "jam"
-msgstr[1] "jam"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "menit"
-msgstr[1] "menit"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "menit"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j N Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j N Y, G:i:s"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "G:i:s"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s telah berhasil dibuat."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s telah berhasil diubah."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s telah dihapus."
diff --git a/parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index b4e52dd..0000000
--- a/parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 75d187c..0000000
--- a/parts/django/django/conf/locale/id/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,157 +0,0 @@
-# Translation of django.po to Indonesian
-# This file is distributed under the same license as the Django package.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-09 20:22+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Selwin Ong <selwin@ui.co.id>\n"
-"Language-Team: Indonesian <id@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Tersedia %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Pilih semua"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Tambah"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Hapus"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s terpilih"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Masukkan pilihan anda dan klik"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Hapus semua"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s dari %(cnt)s terpilih"
-msgstr[1] "%(sel)s dari %(cnt)s terpilih"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Beberapa perubahan field yang Anda lakukan belum tersimpan. Perubahan yang "
-"telah anda lakukan akan hilang."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Anda memilih sebuah aksi, tetapi belum menyimpan perubahan ke field yang "
-"ada. Klik OK untuk menyimpan perubahan ini. Anda akan perlu melakukan aksi "
-"itu lagi."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Anda telah memilih sebuah aksi, tetapi belum mengubah field apapun. "
-"Kemungkinan Anda mencari tombol Go dan bukan tombol Save ."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januari Februari Maret April Mei Juni Juli Agustus September Oktober "
-"November Desember"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "M S S R K J S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Keluarkan"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Sembunyikan"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Minggu Senin Selasa Rabu Kamis Jumat Sabtu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Sekarang"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Jam"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Pilih waktu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Tengah malam"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 pagi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Siang"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Batal"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Hari ini"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Kemarin"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Besok"
diff --git a/parts/django/django/conf/locale/id/__init__.py b/parts/django/django/conf/locale/id/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/id/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/id/formats.py b/parts/django/django/conf/locale/id/formats.py
deleted file mode 100644
index 46b7486..0000000
--- a/parts/django/django/conf/locale/id/formats.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j N Y'
-DATETIME_FORMAT = "j N Y, G:i:s"
-TIME_FORMAT = 'G:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd-m-Y'
-SHORT_DATETIME_FORMAT = 'd-m-Y G:i:s'
-FIRST_DAY_OF_WEEK = 1 #Monday
-
-DATE_INPUT_FORMATS = (
- '%d-%m-%y', '%d/%m/%y', # '25-10-09' , 25/10/09'
- '%d-%m-%Y', '%d/%m/%Y', # '25-10-2009' , 25/10/2009'
- # '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
-)
-
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-
-DATETIME_INPUT_FORMATS = (
- '%d-%m-%Y %H:%M:%S', # '25-10-2009 14:30:59'
- '%d-%m-%Y %H:%M', # '25-10-2009 14:30'
- '%d-%m-%Y', # '25-10-2009'
- '%d-%m-%y %H:%M:%S', # '25-10-09' 14:30:59'
- '%d-%m-%y %H:%M', # '25-10-09' 14:30'
- '%d-%m-%y', # '25-10-09''
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
- '%m/%d/%Y %H:%M:%S', # '25/10/2009 14:30:59'
- '%m/%d/%Y %H:%M', # '25/10/2009 14:30'
- '%m/%d/%Y', # '10/25/2009'
-)
-
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/is/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/is/LC_MESSAGES/django.mo
deleted file mode 100644
index 18e7010..0000000
--- a/parts/django/django/conf/locale/is/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/is/LC_MESSAGES/django.po b/parts/django/django/conf/locale/is/LC_MESSAGES/django.po
deleted file mode 100644
index c7472a9..0000000
--- a/parts/django/django/conf/locale/is/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4285 +0,0 @@
-# Icelandic translation of Django.
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-09 15:51+0000\n"
-"PO-Revision-Date: 2008-09-09 16:34-0000\n"
-"Last-Translator: Jökull Sólberg Auðunsson <jokullsolberg@gmail.com>\n"
-"Language-Team: <dagurp@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabíska"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Bengalska"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Búlgarska"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "Tékkneska"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Velska"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Danska"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "Þýska"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "Gríska"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "Enska"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "Spænska"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Eistland"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Argentínsk Spænska"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr ""
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr ""
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "Finnska"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Franska"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr ""
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galíska"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Ungverska"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "Hebreska"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr ""
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "Íslenska"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "Ítalska"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "Japanska"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr ""
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr ""
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr ""
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr ""
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr ""
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr ""
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr ""
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "Hollenska"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "Norska"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr ""
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "Portúgalska"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "Brasilísk Portúgalska"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "Rúmenska"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "Rússneska"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "Slóvaska"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr ""
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "Serbneska"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "Sænska"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr ""
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr ""
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr ""
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr ""
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "Einfölduð Kínverska "
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "Hefðbundin Kínverska"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Höfundur: %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Allt"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Allar dagsetningar"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Dagurinn í dag"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Síðustu 7 dagar"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Þessi mánuður"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Þetta ár"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "Yes"
-msgstr "Já"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "No"
-msgstr "Nei"
-
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:391
-msgid "Unknown"
-msgstr "Óþekkt"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "tími aðgerðar"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "kenni hlutar"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "framsetning hlutar"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "aðgerðarveifa"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "breyta skilaboði"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "kladdafærsla"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "kladdafærslur"
-
-#: contrib/admin/options.py:60
-#: contrib/admin/options.py:121
-msgid "None"
-msgstr "Ekkert"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "Breytti %s."
-
-#: contrib/admin/options.py:338
-#: contrib/admin/options.py:348
-#: forms/models.py:275
-msgid "and"
-msgstr "og"
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Bætti við %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Breytti %(list)s fyrir %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Eyddi %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "Engum reitum breytt."
-
-#: contrib/admin/options.py:417
-#: contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s „%(obj)s“ var bætt við."
-
-#: contrib/admin/options.py:421
-#: contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "Þú getur breytt því aftur að neðan."
-
-#: contrib/admin/options.py:431
-#: contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "Þú getur bætt öðru %s við að neðan."
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s „%(obj)s“ hefur verið breytt."
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s „%(obj)s“ hefur verið bætt við. Þú getur breytt því aftur að neðan."
-
-#: contrib/admin/options.py:536
-#, python-format
-msgid "Add %s"
-msgstr "Bæta við %s"
-
-#: contrib/admin/options.py:614
-#, python-format
-msgid "Change %s"
-msgstr "Breyta %s"
-
-#: contrib/admin/options.py:646
-msgid "Database error"
-msgstr "Gagnagrunnsvilla"
-
-#: contrib/admin/options.py:696
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s „%(obj)s“ var eytt."
-
-#: contrib/admin/options.py:703
-msgid "Are you sure?"
-msgstr "Ertu viss?"
-
-#: contrib/admin/options.py:732
-#, python-format
-msgid "Change history: %s"
-msgstr "Breytingarsaga: %s"
-
-#: contrib/admin/sites.py:16
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Vinsamlegast sláðu inn rétt notandanafn og lykilorð. Athugaðu að báðir reitirnir þurfa að vera stafréttir."
-
-#: contrib/admin/sites.py:227
-#: contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Vinsamlegast skráðu þig inn aftur vegna þess að setan þín rann út. "
-
-#: contrib/admin/sites.py:234
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Vafri þinn virðist ekki vera stilltur til að leyfa dúsur (cookies). Vinsamlegast gerðu dúsur virkar, endurhladdu þessa síðu og reyndu aftur."
-
-#: contrib/admin/sites.py:250
-#: contrib/admin/sites.py:256
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Notendanöfn mega ekki innihalda '@' merkið."
-
-#: contrib/admin/sites.py:253
-#: contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Tölvupóstfangið þitt er ekki notandanafnið þitt. Prófaðu '%s' í staðinn."
-
-#: contrib/admin/sites.py:313
-msgid "Site administration"
-msgstr "Vefstjóri"
-
-#: contrib/admin/sites.py:326
-#: contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Skrá inn"
-
-#: contrib/admin/sites.py:373
-#, python-format
-msgid "%s administration"
-msgstr "%s vefstjórn"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Eitt eða fleiri %(fieldname)s í %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Eitt eða fleiri %(fieldname)s í %(name)s:"
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "Dagsetning:"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "Tími:"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "Eins og er:"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "Breyta:"
-
-#: contrib/admin/widgets.py:123
-msgid "Lookup"
-msgstr "Fletta upp"
-
-#: contrib/admin/widgets.py:230
-msgid "Add Another"
-msgstr "Bæta við öðru"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Síða fannst ekki"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Því miður fannst umbeðin síða ekki."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Heim"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Kerfisvilla"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Kerfisvilla (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Kerfisvilla <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Villa hefur komið upp. Hún hefur verið tilkynnt vefstjórunum með tölvupósti og verður örugglega löguð fljótlega. Við þökkum þolinmæðina."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "Velkomin(n),"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Skjölun"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "Breyta lykilorði"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "Skrá út"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django vefstjóri"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django vefstjórn"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Bæta við"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Saga"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "Skoða á vef"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Vinsamlegast leiðréttu villuna hér að neðan:"
-msgstr[1] "Vinsamlegast leiðréttu villurnar hér að neðan:"
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "Bæta við %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "Sía"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:246
-msgid "Delete"
-msgstr "Eyða"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Eyðing á %(object_name)s „%(escaped_object)s“ hefði í för með sér eyðingu á tengdum hlutum en þú hefur ekki réttindi til að eyða eftirfarandi hlutum:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "Ertu viss um að þú viljir eyða %(object_name)s „%(escaped_object)s“? Öllu eftirfarandi verður eytt:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "Já ég er viss."
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Eftir %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Líkön sem eru hluti af %(name)s forritinu."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Breyta"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Þú hefur ekki réttindi til að breyta neinu"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Nýlegar aðgerðir"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mínar aðgerðir"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Engin fáanleg"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Eitthvað er að gagnagrunnsuppsetningu. Gakktu úr skuggum um að allar töflur séu til staðar og að notandinn hafi aðgang að grunninum."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Notandanafn:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Lykilorð:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dagsetning/tími"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Notandi"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Aðgerð"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "j. N Y, H:i"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Þessi hlutur hefur enga breytingasögu. Hann var líklega ekki búinn til á þessu stjórnunarsvæði."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Sýna allt"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Áfram"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 niðustaða"
-msgstr[1] "%(counter)s niðurstöður"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s í heildina"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Vista"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Vista sem nýtt"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Vista og búa til nýtt"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Vista og halda áfram að breyta"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Fyrst, settu inn notendanafn og lykilorð. Svo geturðu breytt öðrum notendamöguleikum."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:47
-#: contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Notandanafn"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:60
-#: contrib/auth/forms.py:184
-msgid "Password"
-msgstr "Lykilorð"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "Lykilorð (aftur)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "Settu inn sama lykilorðið aftur til staðfestingar."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Settu inn nýtt lykilorð fyrir notandann <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Eyða?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Takk fyrir að verja tíma í vefsíðuna í dag."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Skráðu þig inn aftur"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Breyta lykilorði"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Breyting á lykilorði tókst"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Lykilorði þínu var breytt"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Vinsamlegast skrifaðu gamla lykilorðið þitt til öryggis. Sláðu svo nýja lykilorðið tvisvar inn svo að hægt sé að ganga úr skugga um að þú hafir ekki gert innsláttarvillu."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Gamalt lykilorð:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nýtt lykilorð:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Staðfestu lykilorð:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Breyta lykilorðinu mínu"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Endurstilla lykilorð"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Endurstilling lykilorðs tókst"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Lykilorðið var endurstillt. Þú getur núna skráð þig inn á vefsvæðið."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Staðfesting endurstillingar lykilorðs"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Settu inn nýtt lykilorð"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "Vinsamlegast settu inn nýja lykilorðið tvisvar til að forðast innsláttarvillur."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Endurstilling á lykilorði mistókst"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr "Endurstilling lykilorðs tókst ekki. Slóðin var ógild. Hugsanlega hefur hún nú þegar verið notuð. Vinsamlegast biddu um nýja endurstillingu."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Endurstilling á lykilorði tókst"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Við sendum þér leiðbeiningar fyrir endurstillingu lykilorðs. Leiðbeiningarnar ættu að berast til þín í tölvupósti fljótlega."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Þú fékkst þennan tölvupóst vegna þess að þú baðst um endurstillingu á lykilorðinu þínu"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "fyrir notandareikning þinn á %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Vinsamlegast farðu á eftirfarandi síðu og veldu nýtt lykilorð:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Notandanafnið þitt ef þú skyldir hafa gleymt því:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Takk fyrir að nota vefinn okkar!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s hópurinn"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "Gleymdir þú lykilorðinu þínu? Sláðu tölvupóstfangið þitt inn að neðan og við munum senda þér leiðbeiningar fyrir endurstillingu lykilorðs."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Tölvupóstfang:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Endursstilla lykilorðið mitt"
-
-#: contrib/admin/templatetags/admin_list.py:288
-msgid "All dates"
-msgstr "Allar dagsetningar"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "Veldu %s"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "Veldu %s til að breyta"
-
-#: contrib/admin/views/template.py:36
-#: contrib/sites/models.py:38
-msgid "site"
-msgstr "vefur"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "sniðmáti"
-
-#: contrib/admindocs/views.py:57
-#: contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "merki:"
-
-#: contrib/admindocs/views.py:90
-#: contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "sía:"
-
-#: contrib/admindocs/views.py:154
-#: contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "skoða:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "Forrit %r fannst ekki"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Líkanið %(model_name)r finnst ekki í forritinu %(app_label)r"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "tengdi `%(app_label)s.%(data_type)s` hluturinn"
-
-#: contrib/admindocs/views.py:205
-#: contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241
-#: contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "líkan:"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "tengdir `%(app_label)s.%(object_name)s` hlutir"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "allt %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "fjöldi af %s"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Svæði í %s hlutnum"
-
-#: contrib/admindocs/views.py:314
-#: contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327
-#: contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "Heiltala"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "Boole-gildi (True eða False)"
-
-#: contrib/admindocs/views.py:316
-#: contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Strengur (mest %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "Kommuaðgreindar heiltölur"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "Dagsetning (án tíma)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "Dagsetning (með tíma)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "Tugatala"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "Tölvupóstfang"
-
-#: contrib/admindocs/views.py:322
-#: contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "Skjalaslóð"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "Hlaupakommutala (floating point number)"
-
-#: contrib/admindocs/views.py:328
-#: contrib/comments/models.py:58
-msgid "IP address"
-msgstr "IP tala"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "Boole-gildi (True, False eða None)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "Tengsl við yfirlíkan"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "Símanúmer"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "Texti"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "Tími"
-
-#: contrib/admindocs/views.py:339
-#: contrib/comments/forms.py:22
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "Veffang"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "Bandarískt fylki (tveir hástafir)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "XML texti"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s virðist ekki vera urlpattern hlutur"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bókamerklar"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Skjölunarbókamerklar"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Til að setja upp bókamerkil (Bookmarklet) þarftu að draga tengilinn\n"
-"í bókamerkjareinina þína eða hægrismella á tengilinn og bæta honum við bókamerkin þín\n"
-"Nú getur þú notað bókamerkilinn frá hvaða síðu sem er innan vefjarins. Athugaðu að sumir\n"
-"þessara bókamerkla krefjast þess að þú sért að skoða vefinn frá tölvu sem er\n"
-"skráð sem \"internal\" (hafðu samband við kerfisstjórann ef þú ert óviss hvort tölvan þín er \"internal\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Skjölun þessarar síðu"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Sendir þig af hvaða síðu sem er á skjölun þess framsetningarlags sem myndar hana."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Sýna kenni hlutar"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Sýnir efnistag og sérkenni síða sem gefa tiltekna mynd af stökum hlut."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Breyta þessum hlut (í þessum glugga)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Stekkur á stjórnunarsíðuna fyrir þær síður sem gefa tiltekna mynd af stökum hlut."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Breyta þessum hlut (nýr gluggi)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Eins og að ofan en opnar stjórnunarsíðuna í nýjum glugga."
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "Persónuupplýsingar"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "Réttindi"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "Mikilvægar dagsetningar"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "Hópar"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "Bæta við notanda"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "Breyting á lykilorði tókst."
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "Breyta lykilorði: %s"
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "Krafist. 30 stafir eða færri. Aðeins enskir ritstafastafir (enskir ritstafir, tölur og undirstrik)."
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Þetta gildi má einungis innihalda stafi, tölur og undirstrik."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Staðfesting lykilorðs"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "Notandi með þetta notendanafn er nú þegar til."
-
-#: contrib/auth/forms.py:36
-#: contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "Lykilorðin tvö pössuðu ekki saman."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "Þessi reikningur er óvirku."
-
-#: contrib/auth/forms.py:87
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Vafri þinn virðist ekki vera stilltur til að leyfa dúsur (cookies). Dúsur eru nauðsynlegar fyrir innskráningu."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "Netfang"
-
-#: contrib/auth/forms.py:109
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Þetta netfang hefur engan tengdan notandareikning. Ertu viss um að þú hafi skráð þig?"
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "Lykilorð endurstillt á %s"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "Nýtt lykilorð"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "Nýtt lykilorð (endurtekið)"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "Gamalt lykilorð"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Gamla lykilorðið var vitlaust. Vinsamlegast reyndu aftur."
-
-#: contrib/auth/models.py:72
-#: contrib/auth/models.py:95
-msgid "name"
-msgstr "nafn"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "vinnuheiti"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "réttindi"
-
-#: contrib/auth/models.py:78
-#: contrib/auth/models.py:96
-msgid "permissions"
-msgstr "réttindi"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "hópur"
-
-#: contrib/auth/models.py:100
-#: contrib/auth/models.py:146
-msgid "groups"
-msgstr "hópar"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "notandanafn"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "skírnarnafn"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "eftirnafn"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "tölvupóstfang"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "lykilorð"
-
-#: contrib/auth/models.py:140
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Notaðu '[algo]$[salt]$[hexdigest]' eða <a href=\"password/\">'breyta lykilorði' formið</a>."
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "staða starfsmanns"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr "Segir til um hvort notandinn getur skráð sig inn á þetta stjórnunarsvæði."
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "virkur"
-
-#: contrib/auth/models.py:142
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "Til marks um að notandinn sé virku. Taktu hakið úr þessum möguleika til að eyða aðgangi."
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr "staða ofurnotanda"
-
-#: contrib/auth/models.py:143
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Til marks um að notandinn hafi öll réttindi án þess að taka þau sérstaklega fram."
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "síðasta innskráning"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "skráning dags."
-
-#: contrib/auth/models.py:147
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Auk réttindanna sem notandanum var gefið sérstaklega fær hann öll þau réttindi sem hópurinn hans hefur."
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "réttindi"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "notandi"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "notendur"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "skilaboð"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "Útskráður"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Sláðu inn gilt tölvupóstfang."
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "Innihald"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "Hengigögn"
-
-#: contrib/comments/forms.py:20
-msgid "Name"
-msgstr "Nafn"
-
-#: contrib/comments/forms.py:21
-msgid "Email address"
-msgstr "Netfang"
-
-#: contrib/comments/forms.py:23
-msgid "Comment"
-msgstr "Athugasemd"
-
-#: contrib/comments/forms.py:26
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "Ef þú skrifar eitthvað hérna verður athugasemdin sjálfkrafa meðhöndluð sem ruslpóstur"
-
-#: contrib/comments/forms.py:126
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Passaðu orðbragðið! Orðið %s er ekki leyft hér."
-msgstr[1] "Passaðu orðbragðið! Orðin %s eru ekki leyfð hér."
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "kenni hlutar"
-
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "nafn notanda"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "netfang notanda"
-
-#: contrib/comments/models.py:52
-msgid "user's URL"
-msgstr "veffang notanda"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "athugasemd"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "innsent dags/tími"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "er öllum sýnilegt"
-
-#: contrib/comments/models.py:60
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Taktu hakið úr til að fjarlægja athugasemdina af vefsíðunni."
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "hefur verið fjarlægt"
-
-#: contrib/comments/models.py:63
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Hakaðu við þennan reit ef athugasemdin er óviðeigandi. Skilaboðin „Þessi athugasemd hefur verið fjarlægð“ birtist í staðinn."
-
-#: contrib/comments/models.py:115
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr "Athugasemdin var send inn af innskráðum notanda og því er ekki hægt að breyta nafninu."
-
-#: contrib/comments/models.py:124
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr "Athugasemdin var send inn af innskráðum notanda og því er ekki hægt að breyta netfanginu."
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(user)s sendi inn %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "python eininga klasa nafn"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "efnistag"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "efnistög"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Dæmi: '/about/contact/'. Passaðu að hafa skástrik fremst og aftast."
-
-#: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Þetta gildi má einungis innihalda stafi, tölur, undirstrik, skástrik og bandstrik."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Ítarlegar stillingar"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titill"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "innihald"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "virkja athugasemdir"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nafn sniðmáts"
-
-#: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Dæmi: 'flatpages/contact_page.html'. Ef ekkert er gefið upp mun kerfið nota 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "skráning nauðsynleg"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Ef þetta er valið geta eingöngu innskráðir notendur séð síðuna."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flatskrá"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flatskrár"
-
-#: contrib/formtools/wizard.py:130
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr "Því miður er formið runnið út. Vinsamlegast haltu áfram að fylla út formið á þessari síðu."
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "Ekkert rúmgildi gefið."
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "Ógild rúmeining"
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "Ógild rúmmálsgerð."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milljón"
-msgstr[1] "%(value).1f milljónir"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milljarður"
-msgstr[1] "%(value).1f milljarðar"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billjarður"
-msgstr[1] "%(value).1f billjónir"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "einn"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "tveir"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "þrír"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "fjórir"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "fimm"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "sex"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sjö"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "átta"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "níu"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "í dag"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "morgundagur"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "gærdagur"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Færðu inn póstnúmer í sniðinu NNNN eða ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Þessi reitur tekur aðeins tölugildi."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Þessi reitur krefst 7 eða 8 tölustafa."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Færðu inn gilt CUIT í XX-XXXXXXXX-X eða XXXXXXXXXXXX sniðinu."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "Ógilt CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Sláðu inn 4 stafa póstkóða."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Sláðu inn zip póstfang í sniðinu XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Símanúmer verða að vera í XXX-XXX-XXXX sniði."
-
-#: contrib/localflavor/br/forms.py:58
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Veldu gilt brasilískt fylki. Fylkið er ekki eitt af gildum fylkjum."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Ógilt CPF númer."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Þessi reitur krefst að minnsta kosti 14 tölustafa."
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:39
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Sláðu inn gilda íslenska kennitölu. Sniðið er DDMMÁÁÁÁ-XXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Íslenska kennitalan er ekki gild."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Sláðu inn gilt póstnúmer."
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Sláðu inn gilt símanúmer."
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Þessi reitur krefst 8 tölustafa."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Þessi reitur krefst 11 tölustafa."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Sláðu inn gilt póstnúmer."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "vísun frá"
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Þetta þarf að vera full slóð án lénsins. Dæmi: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "vísa á"
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Þetta getur verið full slóð (eins og hér að ofan) eða veffang með 'http://' fremst."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "vísun"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "vísanir"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "setulykill"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "setugögn"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "fyrningardagsetning"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "seta"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "setur"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "lén"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "birtingarnafn"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "vefir"
-
-#: db/models/fields/__init__.py:348
-#: db/models/fields/__init__.py:683
-msgid "This value must be an integer."
-msgstr "Þetta gildi verður að vera heil tala."
-
-#: db/models/fields/__init__.py:379
-msgid "This value must be either True or False."
-msgstr "Þetta gildi verður að vera True eða False."
-
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "Þessi reitur getur ekki haft tómgildi (null)."
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "Skrifaðu einungis tölur aðskildar með kommum."
-
-#: db/models/fields/__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Sláðu inn gilda dagsetningu á YYYY-MM-DD sniði."
-
-#: db/models/fields/__init__.py:468
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ógild dagsetning: %s"
-
-#: db/models/fields/__init__.py:532
-#: db/models/fields/__init__.py:550
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Sláðu inn gilda dagsetningu/tíma í ÁÁÁÁ-MM-DD KK:MM[:ss[.uuuuuu]] sniði."
-
-#: db/models/fields/__init__.py:586
-msgid "This value must be a decimal number."
-msgstr "Þetta gildi verður að vera tugatala (decimal number)."
-
-#: db/models/fields/__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr "Þetta gildi verður að vera annaðhvort None, True eða False."
-
-#: db/models/fields/__init__.py:817
-#: db/models/fields/__init__.py:831
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Sláðu inn gildan tíma á KK:MM sniði."
-
-#: db/models/fields/related.py:761
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Haltu inni „Control“, eða „Command“ á Mac til þess að velja fleira en eitt."
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Vinsamlegast sláðu inn gild %(self)s kenni. Gildið %(value)r er ógilt."
-msgstr[1] "Vinsamlegast sláðu inn gild %(self)s kenni. Gildin %(value)r eru ógild."
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "Þennan reit þarf að fylla út."
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Sláðu inn gilt gildi."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Gildið má ekki hafa fleiri en %(max)d stafi (gildið hefur %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Gildið má ekki hafa færri en %(min)d stafi (gildið hefur %(length)d)."
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "Sláðu inn heila tölu."
-
-#: forms/fields.py:167
-#: forms/fields.py:196
-#: forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Gakktu úr skuggum um að gildið sé minna en eða jafn og %s."
-
-#: forms/fields.py:168
-#: forms/fields.py:197
-#: forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Gildið þarf að vera jafnt og eða hærra en %s."
-
-#: forms/fields.py:195
-#: forms/fields.py:224
-msgid "Enter a number."
-msgstr "Sláðu inn heila tölu."
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Gildið má ekki hafa fleiri en %s tölur."
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Gildið má ekki hafa meira en %s tugatölustafi (decimal places)."
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Gildið má ekki hafa fleiri en %s tölur fyrir tugabrotskil."
-
-#: forms/fields.py:287
-#: forms/fields.py:848
-msgid "Enter a valid date."
-msgstr "Sláðu inn gilda dagsetningu."
-
-#: forms/fields.py:321
-#: forms/fields.py:849
-msgid "Enter a valid time."
-msgstr "Sláðu inn gilda tímasetningu."
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "Sláðu inn gilda dagsetningu ásamt tíma."
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Engin skrá var send. Athugaðu kótunartegund á forminu (encoding type)."
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "Engin skrá var send."
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "Innsend skrá er tóm."
-
-#: forms/fields.py:477
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Halaðu upp gildri myndskrá. Skráin sem þú halaðir upp var annað hvort gölluð eða ekki mynd."
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "Sláðu inn gilt veffang (URL)."
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "Síðan á þessari slóð lítur út fyrir að skila villu."
-
-#: forms/fields.py:618
-#: forms/fields.py:696
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Veldu gildan valmöguleika. %(value)s er ekki eitt af gildum valmöguleikum."
-
-#: forms/fields.py:697
-#: forms/fields.py:758
-#: forms/models.py:660
-msgid "Enter a list of values."
-msgstr "Sláðu inn lista af gildum."
-
-#: forms/fields.py:877
-msgid "Enter a valid IPv4 address."
-msgstr "Sláðu inn gilda IPv4 tölu."
-
-#: forms/fields.py:887
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Settu inn gildan vefslóðartitil sem samanstendur af latneskum bókstöfum, númerin, undirstrikum og bandstrikum."
-
-#: forms/formsets.py:242
-#: forms/formsets.py:244
-msgid "Order"
-msgstr "Röð"
-
-#: forms/models.py:268
-#: forms/models.py:277
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s með þetta %(field_label)s er nú þegar til."
-
-#: forms/models.py:590
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Veldu gildan valmöguleika. Valið virðist ekki vera eitt af gildum valmöguleikum."
-
-#: forms/models.py:661
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Veldu gildan valmöguleika. %s er ekki einn af gildum valmöguleikum."
-
-#: template/defaultfilters.py:706
-msgid "yes,no,maybe"
-msgstr "já,nei,kannski"
-
-#: template/defaultfilters.py:737
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bæti"
-msgstr[1] "%(size)d bæti"
-
-#: template/defaultfilters.py:739
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:741
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:742
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "eftirmiðdegi"
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "morgun"
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "Eftirmiðdegi"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "Morgun"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "miðnætti"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "hádegi"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "mánudagur"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "þriðjudagur"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "miðvikudagur"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "fimmtudagur"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "föstudagur"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "laugardagur"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "sunnudagur"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Mán"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Þri"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Mið"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Fim"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Fös"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Lau"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Sun"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "janúar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "febrúar"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "mars"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "apríl"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "maí"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "júní"
-
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "júlí"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "ágúst"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "október"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "nóvember"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "desember"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "Jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "maí"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jún"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "júl"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ágú"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nóv"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "des"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ág."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nóv."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "des."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "eða"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "ár"
-msgstr[1] "ár"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mánuður"
-msgstr[1] "mánuðir"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "vika"
-msgstr[1] "vikur"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dagur"
-msgstr[1] "dagar"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "klukkutími"
-msgstr[1] "klukkutímar"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "mínúta"
-msgstr[1] "mínútur"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "mínútur"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "j. N Y"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "j. N Y"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. N Y"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s var fært inn."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s var uppfært."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s var eytt."
-
-#~ msgid "Brazilian"
-#~ msgstr "Brasilíska"
-#~ msgid "Ordering"
-#~ msgstr "Röðun"
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "N j, Y, P"
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "Nýja lykilorðið þitt er: %(new_password)s"
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr "Þér er frjálst að breyta lykilorðinu með því að fara á þessa síðu:"
-#~ msgid "Added %s."
-#~ msgstr "Bætti við %s."
-#~ msgid "Deleted %s."
-#~ msgstr "Eyddi %s."
-#~ msgid "The two 'new password' fields didn't match."
-#~ msgstr "'Nýtt lykilorð' svæðin passa ekki saman."
-#~ msgid "headline"
-#~ msgstr "fyrirsögn"
-#~ msgid "rating #1"
-#~ msgstr "einkunn #1"
-#~ msgid "rating #2"
-#~ msgstr "einkunn #2"
-#~ msgid "rating #3"
-#~ msgstr "einkunn #3"
-#~ msgid "rating #4"
-#~ msgstr "einkunn #4"
-#~ msgid "rating #5"
-#~ msgstr "einkunn #5"
-#~ msgid "rating #6"
-#~ msgstr "einkunn #6"
-#~ msgid "rating #7"
-#~ msgstr "einkunn #7"
-#~ msgid "rating #8"
-#~ msgstr "einkunn #8"
-#~ msgid "is valid rating"
-#~ msgstr "er gild einkunn"
-#~ msgid "comments"
-#~ msgstr "athugasemdir"
-#~ msgid "Content object"
-#~ msgstr "Efnishlutur"
-#~ msgid "person's name"
-#~ msgstr "nafn einstaklings"
-#~ msgid "ip address"
-#~ msgstr "IP tala"
-#~ msgid "approved by staff"
-#~ msgstr "samþykkt af umsjónarmönnum"
-#~ msgid "free comment"
-#~ msgstr "frjáls athugasemd"
-#~ msgid "free comments"
-#~ msgstr "frjálsar athugasemdir"
-#~ msgid "score"
-#~ msgstr "stig"
-#~ msgid "score date"
-#~ msgstr "dagsetning stigagjafar"
-#~ msgid "karma score"
-#~ msgstr "karma stig"
-#~ msgid "karma scores"
-#~ msgstr "karma stig"
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "%(score)d stig frá %(user)s"
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Þessi athugasemd var veifuð af %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid "flag date"
-#~ msgstr "Dagsetning veifu"
-#~ msgid "user flag"
-#~ msgstr "notandaveifa"
-#~ msgid "user flags"
-#~ msgstr "notendaveifur"
-#~ msgid "Flag by %r"
-#~ msgstr "Veifað af %r"
-#~ msgid "deletion date"
-#~ msgstr "eytt dags."
-#~ msgid "moderator deletion"
-#~ msgstr "eytt af umsjónarmanni"
-#~ msgid "moderator deletions"
-#~ msgstr "eytt af umsjónarmanni"
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Eytt af umsjónarmanni %r"
-#~ msgid "Forgotten your password?"
-#~ msgstr "Gleymdir þú lykilorðinu þínu?"
-#~ msgid "Ratings"
-#~ msgstr "Einkunnir"
-#~ msgid "Required"
-#~ msgstr "Nauðsynlegt"
-#~ msgid "Optional"
-#~ msgstr "Valfrjálst"
-#~ msgid "Post a photo"
-#~ msgstr "Sendu inn ljósmynd"
-#~ msgid "Comment:"
-#~ msgstr "Athugasemd:"
-#~ msgid "Preview comment"
-#~ msgstr "Forskoða athugasemd"
-#~ msgid "Your name:"
-#~ msgstr "Nafnið þitt:"
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr ""
-#~ "Þessi stigagjöf er nauðsynleg vegna þess að þú gafst að minnsta kosti "
-#~ "eina aðra einkunn."
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "Þessi athugasemd var send inn af notanda sem hefur sent inn færri en %"
-#~ "(count)s athugasemd:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[1] ""
-#~ "Þessi athugasemd var send inn af notanda sem hefur sent inn færri en %"
-#~ "(count)s athugasemdir:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Eingöngu POST eru leyfð"
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "Einn eða fleiri nauðsynlegir reitir voru ekki fylltir"
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr "Einhver átti við athugasemdaformið (öryggisbrot)"
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "Athugasemdaformið hafði ógildan 'target' stika -- kenni hlutarins var "
-#~ "ógilt"
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr "Athugasemdaformið útvegaði ekki annað hvort 'forskoða' eða 'senda'"
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Ónafngreindir notendur geta ekki kosið"
-#~ msgid "No voting for yourself"
-#~ msgstr "Þú getur ekki kosið sjálfa(n) þig"
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "Hástafir eru ekki leyfðir hér."
-#~ msgid "Lowercase letters are not allowed here."
-#~ msgstr "Lágstafir eru ekki leyfðir hér."
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Sláðu inn gild tölvupóstföng aðskilin með kommum."
-#~ msgid "Please enter a valid IP address."
-#~ msgstr "Vinsamlegast sláðu inn gilda IP tölu."
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "Tóm gildi eru ekki leyfð hér."
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "Aðeins tölustafir eru leyfðir hér."
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Þetta gildi verður að vera samsett úr fleiru en tölustöfum."
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "Einungis bókstafir eru leyfðir hér."
-#~ msgid "The URL %s does not point to a valid image."
-#~ msgstr "Veffangið %s bendir ekki á fullgilda mynd."
-#~ msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-#~ msgstr "Símanúmer verða að vera á XXX-XXX-XXXX forminu. „%s“ er ógilt."
-#~ msgid "The URL %s does not point to a valid QuickTime video."
-#~ msgstr "Veffangið %s vísar ekki á gilt QuickTime myndskeið."
-#~ msgid "A valid URL is required."
-#~ msgstr "Gilds veffangs er krafist."
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Gilt HTML er nauðsynlegt. Tilteknar villur:\n"
-#~ "%s"
-#~ msgid "Badly formed XML: %s"
-#~ msgstr "Illa sniðið XML: %s"
-#~ msgid "Invalid URL: %s"
-#~ msgstr "Ógilt veffang: %s"
-#~ msgid "The URL %s is a broken link."
-#~ msgstr "Veffangið %s er brotinn hlekkur."
-#~ msgid "Enter a valid U.S. state abbreviation."
-#~ msgstr "Skrifaðu gilda styttingu á bandarísku fylkisnafni."
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "Þessi reitur verður að passa við „%s“ reitinn."
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "Vinsamlegast fylltu út einn reit að minnsta kosti."
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr "Vinsamlegast fylltu út í báða reitina eða skildu þá eftir tóma."
-#~ msgid "This field must be given if %(field)s is %(value)s"
-#~ msgstr "Þessi reitur þarf að vera útfylltur ef %(field)s er %(value)s"
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr ""
-#~ "Þessi reitur verður að vera útfylltur ef %(field)s er ekki %(value)s"
-#~ msgid "Duplicate values are not allowed."
-#~ msgstr "Endurtekin gildi eru ekki leyfð."
-#~ msgid "This value must be between %(lower)s and %(upper)s."
-#~ msgstr "Þetta gildi verður að vera á milli %(lower)s og %(upper)s."
-#~ msgid "This value must be at least %s."
-#~ msgstr "Þetta gildi verður að vera að minnsta kosti %s."
-#~ msgid "This value must be no more than %s."
-#~ msgstr "Þetta gildi má ekki vera hærra en %s."
-#~ msgid "This value must be a power of %s."
-#~ msgstr "Þessi reitur verður að vera veldi af %s."
-#~ msgid "Please enter a valid decimal number."
-#~ msgstr "Vinsamlegast settu inn gilda tugatölu."
-#~ msgid "Please enter a valid decimal number with at most %s total digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s total digits."
-#~ msgstr[0] "Vinsamlegast skrifaðu gilda tugatölu með hámark %s tölustaf."
-#~ msgstr[1] "Vinsamlegast skrifaðu gilda tugatölu með hámark %s tölustafi."
-#~ msgid ""
-#~ "Please enter a valid decimal number with a whole part of at most %s digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with a whole part of at most %s "
-#~ "digits."
-#~ msgstr[0] "Vinsamlegast settu inn gilda tugatölu með hámark %s tölustaf."
-#~ msgstr[1] "Vinsamlegast settu inn gilda tugatölu með hámark %s tölustafi."
-#~ msgid "Please enter a valid decimal number with at most %s decimal place."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s decimal places."
-#~ msgstr[0] "Vinsamlegast skrifaðu gilda tugatölu með hámark %s tugbrotastaf."
-#~ msgstr[1] ""
-#~ "Vinsamlegast skrifaðu gilda tugatölu með hámark %s tugbrotastafi."
-#~ msgid "Please enter a valid floating point number."
-#~ msgstr ""
-#~ "Vinsamlegast settu inn gilda hlaupakommutölu (floating point number)."
-#~ msgid "Make sure your uploaded file is at least %s bytes big."
-#~ msgstr ""
-#~ "Gakktu úr skugga um að upphöluð skrá sé að minnsta kosti %s bæti að stærð."
-#~ msgid "Make sure your uploaded file is at most %s bytes big."
-#~ msgstr ""
-#~ "Gakktu úr skugga um að upphlaðin skrá sé í mesta lagi %s bæti að stærð."
-#~ msgid "The format for this field is wrong."
-#~ msgstr "Sniðið á þessum reit í rangt."
-#~ msgid "This field is invalid."
-#~ msgstr "Þessi reitur er ótækur."
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "Gat engu náð úr %s."
-#~ msgid ""
-#~ "The URL %(url)s returned the invalid Content-Type header '%(contenttype)"
-#~ "s'."
-#~ msgstr "Veffangið %(url)s skilaði ótæka efnistagshausnum '%(contenttype)s'."
-#~ msgid ""
-#~ "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts "
-#~ "with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Vinsamlegast lokaðu opna %(tag)s taginu sem byrjar á línu %(line)s. "
-#~ "(Línan hefst á \"%(start)s\".)"
-#~ msgid ""
-#~ "Some text starting on line %(line)s is not allowed in that context. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Texti sem hefst á línu %(line)s er ekki leyfður í því samhengi. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgid ""
-#~ "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
-#~ "\"%(start)s\".)"
-#~ msgstr ""
-#~ "\"%(attr)s\" á línu %(line)s er ótækt eigindi (línan hefst á \"%(start)s"
-#~ "\")."
-#~ msgid ""
-#~ "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-#~ "(start)s\".)"
-#~ msgstr ""
-#~ "\"<%(tag)s>\" á línu %(line)s er ótækt tag. (Línan hefst á \"%(start)s\".)"
-#~ msgid ""
-#~ "A tag on line %(line)s is missing one or more required attributes. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Tag á línu %(line)s vantar eitt eða fleiri nauðsynleg eigindi. (Línan "
-#~ "hefst á \"%(start)s\".)"
-#~ msgid ""
-#~ "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "\"%(attr)s\" eigindið á línu %(line)s hefur ótækt gildi (línan hefst á \"%"
-#~ "(start)s\")."
-#~ msgid ""
-#~ "%(object)s with this %(type)s already exists for the given %(field)s."
-#~ msgstr ""
-#~ "%(object)s með þetta %(type)s er nú þegar til fyrir uppgefið %(field)s."
-#~ msgid "Enter a valid filename."
-#~ msgstr "Sláðu inn gilt tölvupóstfang."
-#~ msgid "Please enter a valid %s."
-#~ msgstr "Vinsamlegast sláðu inn fullgilt %s."
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "Aðgreindu mörg kenni með kommum."
-#~ msgid "Ensure your text is less than %s character."
-#~ msgid_plural "Ensure your text is less than %s characters."
-#~ msgstr[0] "Gangtu úr skugga um að textinn þin sé styttri en %s tákn."
-#~ msgstr[1] "Gangtu úr skugga um að textinn þin sé styttri en %s tákn."
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "Línuskil eru ekki leyfð hér."
-#~ msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-#~ msgstr "Veldu gildan valmöguleika; „%(data)s“ er ekki í %(choices)s."
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr "Sláðu inn heila tölu á bilinu -32.768 til 32.767."
-#~ msgid "Enter a positive number."
-#~ msgstr "Sláðu inn jákvæða tölu."
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "Sláðu inn heila tölu á bilinu 0 til 32.767."
-#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-#~ msgstr "<a href=\"/password_reset/\">Gleymdir þú lykilorðinu</a> þínu?"
-#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
-#~ msgstr "Notaðu '[algo]$[salt]$[hexdigest]'"
-#~ msgid "Comments"
-#~ msgstr "Athugasemdir"
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)sThis comment was posted by a user who has posted fewer than %"
-#~ "(count)s comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Þessi athugasemd var send inn af notanda sem hefur skrifað færri en %"
-#~ "(count)s athugasemd:\n"
-#~ "\n"
-#~ "%(text)sÞessi athugasemd var send inn af notanda sem hefur skrifað færri "
-#~ "en %(count)s athugasemdir:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid "String (up to 50)"
-#~ msgstr "Strengur (allt að 50)"
-#~ msgid "label"
-#~ msgstr "merki"
-#~ msgid "package"
-#~ msgstr "pakki"
-#~ msgid "packages"
-#~ msgstr "pakkar"
-
-#, fuzzy
-#~ msgid "count"
-#~ msgstr "innihald"
-
diff --git a/parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 1a11690..0000000
--- a/parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.po
deleted file mode 100644
index c68e77d..0000000
--- a/parts/django/django/conf/locale/is/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,109 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2006-05-13 11:48-0000\n"
-"Last-Translator: Dagur Páll Ammendrup <dagurp@gmail.com>\n"
-"Language-Team: Icelandic <dagurp@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Icelandic\n"
-"X-Poedit-Country: ICELAND\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Fáanleg %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Velja öll"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Bæta við"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Fjarlægja"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valin %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Veldu úr valmöguleikunum og smelltu"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Hreinsa öll"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid "January February March April May June July August September October November December"
-msgstr "janúar febrúar mars apríl maí júní júlí ágúst september október nóvember desember"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "sunnudagur mánudagur þriðjudagur miðvikudagur fimmtudagur föstudagur laugardagur"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M Þ M F F L"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "Núna"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "Klukka"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "Veldu tíma"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "Miðnætti"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "6 f.h."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "Hádegi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "Hætta við"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "Í dag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "Dagatal"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "Í gær"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "Á morgun"
-
diff --git a/parts/django/django/conf/locale/is/__init__.py b/parts/django/django/conf/locale/is/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/is/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/is/formats.py b/parts/django/django/conf/locale/is/formats.py
deleted file mode 100644
index b6377db..0000000
--- a/parts/django/django/conf/locale/is/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.n.Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/it/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/it/LC_MESSAGES/django.mo
deleted file mode 100644
index ee440eb..0000000
--- a/parts/django/django/conf/locale/it/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/it/LC_MESSAGES/django.po b/parts/django/django/conf/locale/it/LC_MESSAGES/django.po
deleted file mode 100644
index 5e608d4..0000000
--- a/parts/django/django/conf/locale/it/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5124 +0,0 @@
-# translation of django.po to Italian
-# Italian translation of Django.
-# Copyright (C) 2006 the Lawrence Journal-World
-# This file is distributed under the same license as the Django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 14:40+0200\n"
-"PO-Revision-Date: 2010-05-10 14:44+0200\n"
-"Last-Translator: Nicola Larosa <nico@tekNico.net>\n"
-"Language-Team: Italian <django-it@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "arabo"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "bulgaro"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengali"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosniaco"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "catalano"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "ceco"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "gallese"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "danese"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "tedesco"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "greco"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "inglese"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "inglese britannico"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "spagnolo"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "spagnolo argentino"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "estone"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "basco"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "persiano"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "finlandese"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "francese"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "frisio"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "irlandese"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "galiziano"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "ebraico"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "croato"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "ungherese"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Indonesiano"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "islandese"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "italiano"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "giapponese"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "georgiano"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "coreano"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "lituano"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "lettone"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "macedone"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "Mongolo"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "olandese"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "norvegese"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "norvegese bokmal"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "norvegese nynorsk"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "polacco"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "portoghese"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "brasiliano portoghese"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "rumeno"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "russo"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "slovacco"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "sloveno"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "albanese"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "serbo"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "serbo latino"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "svedese"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "tamil"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "tailandese"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "turco"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "ucraino"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "vietnamita"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "cinese semplificato"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "cinese tradizionale"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Cancellati/e con successo %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Sei sicuro?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Cancella %(verbose_name_plural)s selezionati/e"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Di %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Tutti"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Qualsiasi data"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Oggi"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Ultimi 7 giorni"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Questo mese"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Quest'anno"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Sì"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "No"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Sconosciuto"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Azione:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "momento dell'azione"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id dell'oggetto"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "rappresentazione dell'oggetto"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "flag di azione"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "messaggio di modifica"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "voce di log"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "voci di log"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Nessuno"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "%s modificato/a."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "e"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Aggiunto/a %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Cambiato/i %(list)s per %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Cancellato/a %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Nessun campo modificato."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" aggiunto/a correttamente."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "È possibile modificare nuovamente qui sotto."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Puoi aggiungere un altro/a %s qui sotto."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" modificato/a correttamente."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" aggiunto/a correttamente. Puoi modificare ancora qui "
-"sotto."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Occorre selezionare degli oggetti per potervi eseguire azioni. Nessun "
-"oggetto è stato cambiato."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Nessuna azione selezionata."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Aggiungi %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "L'oggetto %(name)s con chiave primaria %(key)r non esiste."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Modifica %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Errore nel database"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s modificato/a correttamente."
-msgstr[1] "%(count)s %(name)s modificati/e correttamente."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s selezionati/e"
-msgstr[1] "Nessuna azione selezionata."
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 di %(cnt)s selezionati/e"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" cancellato/a correttamente."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Tracciato delle modifiche: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Inserisci nome utente e password corretti. In entrambi i campi le maiuscole "
-"sono significative."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Effettua di nuovo l'accesso, perché la tua sessione è scaduta."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Il browser non sembra configurato per accettare i cookie. Una volta "
-"abilitati, ricarica la pagina e riprova."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "I nomi utente non possono contenere il carattere '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Il nome utente non è costituito dall'indirizzo e-mail. Prova con '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Amministrazione sito"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Accedi"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "Amministrazione %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Ora:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Attualmente:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Modifica:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Recupero"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Aggiungi un Altro"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Pagina non trovata"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Spiacenti, ma la pagina richiesta non è stata trovata."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Pagina iniziale"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Errore del server"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Errore del server (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Errore del server <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Si è verificato un errore. Gli amministratori del sito ne sono stati "
-"informati via e-mail e verrà corretto a breve. Grazie per la tua pazienza."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Esegui l'azione selezionata"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Vai"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Clicca qui per selezionare gli oggetti da tutte le pagine."
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Seleziona tutti/e %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Annulla la selezione"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Benvenuto/a,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentazione"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Cambia la password"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Esci"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Amministrazione sito Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Amministrazione Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Aggiungi"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Storia"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Vedi sul sito"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Correggi l'errore qui sotto."
-msgstr[1] "Correggi gli errori qui sotto."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Aggiungi %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtro"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Cancella"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"La cancellazione di %(object_name)s '%(escaped_object)s' causerebbe la "
-"cancellazione di oggetti collegati, ma questo account non ha i permessi per "
-"cancellare gli oggetti dei seguenti tipi:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Sicuro di voler cancellare %(object_name)s \"%(escaped_object)s\"? Tutti gli "
-"oggetti collegati seguenti saranno cancellati:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Sì, sono sicuro"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Cancella più oggetti"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"La cancellazione di %(object_name)s causerebbe la cancellazione di oggetti "
-"collegati, ma il tuo account non ha i permessi per cancellare gli oggetti "
-"dei seguenti tipi:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Sicuro di voler cancellare gli oggetti %(object_name)s selezionati? Tutti i "
-"seguenti oggetti, e i loro oggetti collegati, saranno cancellati:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Per %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelli disponibili nell'applicazione %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Modifica"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Non hai i privilegi per modificare alcunché."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Azioni Recenti"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Azioni Proprie"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nessuna disponibile"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Contenuto sconosciuto"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Ci sono problemi nell'installazione del database. Assicurarsi che le tabelle "
-"appropriate del database siano state create, e che il database sia leggibile "
-"dall'utente appropriato."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Nome utente:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Password:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Data/ora"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Utente"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Azione"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Questo oggetto non ha cambiamenti registrati. Probabilmente non è stato "
-"creato con questo sito di amministrazione."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Mostra tutto"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Salva"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Cerca"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 risultato"
-msgstr[1] "%(counter)s risultati"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s totali"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Salva come nuovo"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Salva e aggiungi un altro"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Salva e continua le modifiche"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Inserisci innanzitutto nome utente e password. Potrai poi modificare le "
-"altre impostazioni dell'utente."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Inserisci una nuova password per l'utente <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Password"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Password (di nuovo)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Inserisci la stessa password inserita sopra, come verifica."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Aggiungi un/a altro/a %(verbose_name)s."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Elimina"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Cancellare?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Grazie per aver speso il tuo tempo prezioso su questo sito oggi."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Accedi di nuovo"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Cambio password"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Cambio password avvenuto correttamente"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "La password è stata cambiata."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Inserisci la password attuale, per ragioni di sicurezza, e poi la nuova "
-"password due volte, per verificare di averla scritta correttamente."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Password attuale"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nuova password"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Modifica la mia password"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Reimposta la password"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Password reimpostata"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "La tua password è stata impostata. Ora puoi effettuare l'accesso."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Conferma reimpostazione password"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Inserisci la nuova password"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Inserisci la nuova password due volte, per verificare di averla scritta "
-"correttamente."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nuova password:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Conferma la password:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Password non reimpostata"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Il link per la reimpostazione della password non era valido, forse perché "
-"era già stato usato. Richiedi una nuova reimpostazione della password."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Password reimpostata correttamente"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Abbiamo inviato le istruzioni per impostare la tua password all'indirizzo e-"
-"mail inserito. Arriveranno a breve."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Hai ricevuto questa e-mail perché hai chiesto di reimpostare la password"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "per il tuo account utente su %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Vai alla pagina seguente e scegli una nuova password:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Il tuo nome utente, in caso tu l'abbia dimenticato:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Grazie per aver usato il nostro sito!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Il team di %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Password dimenticata? Inserisci il tuo indirizzo email qui sotto, e ti "
-"invieremo per email le istruzioni per impostarne una nuova."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Indirizzo e-mail:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Reimposta la mia password"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Tutte le date"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Scegli %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Scegli %s da modificare"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "sito"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "modello"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtro:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Appl. %r non trovata"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Modello %(model_name)r non trovato nell'appl. %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "l'oggetto `%(app_label)s.%(data_type)s` collegato"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modello:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "oggetti `%(app_label)s.%(object_name)s` collegati"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "tutti %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "numero di %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Campi sugli oggetti %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s non sembra essere un oggetto urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklet"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklet alla documentazione"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Per installare i bookmarklet, trascina il link sulla "
-"barra \n"
-"dei bookmark, o clicca il link con il tasto destro e aggiungilo ai "
-"bookmark.\n"
-"Potrai poi scegliere un bookmarklet in qualsiasi pagina del sito.\n"
-"Nota che alcuni di questi bookmarklet richiedono l'accesso al sito tramite "
-"un\n"
-"computer designato come \"interno\" (chiedi al tuo amministratore di \n"
-"sistema se non sei sicuro che il tuo computer sia \"interno\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentazione per questa pagina"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Porta da qualsiasi pagina alla documentazione della view che genera quella "
-"pagina."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Mostra l'ID dell'oggetto"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Mostra il content-type e l'ID univoco di pagine che rappresentano un singolo "
-"oggetto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Modifica quest'oggetto (nella finestra corrente)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Porta alla pagina amministrativa di pagine che rappresentano un oggetto "
-"singolo."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Modifica quest'oggetto (in una nuova finestra)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Come sopra, ma apre la pagina di amministrazione in una nuova finestra."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Informazioni personali"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Permessi"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Date importanti"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Gruppi"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "La password è stata cambiata correttamente."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Cambia la password: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Nome utente"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Obbligatorio. 30 caratteri o meno. Solo lettere, cifre e @/./+/-/_ ."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Questo valore può contenere solo lettere, cifre e @/./+/-/_ ."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Conferma password"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Un utente con questo nome è già presente."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "I due campi password non corrispondono."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Questo account non è attivo."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Il browser web sembra non avere i cookie abilitati. I cookie sono necessari "
-"per poter accedere."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Questo indirizzo email non è associato ad alcun account utente. Sei sicuro "
-"di esserti registrato?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Password reimpostata su %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Conferma nuova password"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "La password attuale non è stata inserita correttamente: va inserita di nuovo."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nome"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "nome in codice"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "permesso"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "permessi"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "gruppo"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "gruppi"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "nome utente"
-
-#: contrib/auth/models.py:196
-msgid "Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Obbligatorio. 30 caratteri o meno. Solo lettere, cifre e @/./+/-/_"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "nome"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "cognome"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "indirizzo e-mail"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "password"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Usa '[algo]$[salt]$[hexdigest]' oppure la <a href=\"password/\">maschera di "
-"cambio password</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "privilegi di staff"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Indica se l'utente può accedere a questo sito di amministrazione."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "attivo"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Indica se l'utente debba essere considerato attivo. Deseleziona qui, "
-"piuttosto che cancellare gli account."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "privilegi di superutente"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Indica che l'utente ha tutti i privilegi, senza che siano stati assegnati "
-"esplicitamente."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "ultimo accesso"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "iscritto in data"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"In aggiunta ai privilegi assegnati manualmente, l'utente riceverà anche "
-"tutti i privilegi assegnati ad ogni gruppo cui appartiene."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "privilegi utente"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "utente"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "utenti"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "messaggio"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Accesso annullato"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:126 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Inserisci un indirizzo e-mail valido."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Contenuto"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadati"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "segnalato"
-msgstr[1] "segnalati/e"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Segnala i commenti selezionati"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "approvato"
-msgstr[1] "approvati/e"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Approva i commenti selezionati"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "eliminato"
-msgstr[1] "eliminati/e"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Elimina i commenti selezionati"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "Ad 1 commento è stata applicata con successo l'azione %(action)s."
-msgstr[1] "A %(count)s commenti è stata applicata con successo l'azione %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "commenti su %(site_name)s "
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Commenti più recenti su %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nome"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Indirizzo email"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Commento"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Modera i termini: la parola %s non è ammessa qui."
-msgstr[1] "Modera i termini: le parole %s non sono ammesse qui."
-
-#: contrib/comments/forms.py:182
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "Se inserisci qualcosa in questo campo il tuo commento verrà considerato spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "content type"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID dell'oggetto"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nome utente"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "indirizzo email utente"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL utente"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "commento"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "data/ora di inserimento"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "indirizzo IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "è pubblico"
-
-#: contrib/comments/models.py:62
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Deseleziona questa casella per far sparire del tutto il commento dal sito."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "è eliminato"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Spunta la casella se il commento è inappropriato. Verrà sostituito dal "
-"messaggio \"Questo commento è stato rimosso\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "commenti"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Questo commento è stato inserito da un utente autenticato e quindi il nome "
-"non è modificabile."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Questo commento è stato inserito da un utente autenticato e quindi l'email "
-"non è modificabile."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Inserito da %(user)s il %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "Segnala"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "data"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "segnalazione commento"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "segnalazioni commenti"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Approva un commento"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Sicuro di voler pubblicare questo commento?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Approva"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Grazie per aver approvato"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid "Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Grazie per aver speso tempo a migliorare la qualità della discussione sul "
-"nostro sito"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Elimina un commento"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Sicuro di voler eliminare questo commento?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Grazie per aver eliminato"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Segnala questo commento"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Sicuro di voler segnalare questo commento?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Segnala"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Grazie per aver segnalato"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Pubblica"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Anteprima"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Grazie per aver commentato"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Grazie per il tuo commento"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Mostra l'anteprima del tuo commento"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Correggi l'errore qui sotto"
-msgstr[1] "Correggi gli errori qui sotto"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Pubblica il tuo commento"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "o fai dei cambiamenti"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "nome della classe del modello Python"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "content type"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Esempio: '/about/contact/'. Assicurati di inserire le barre diagonali "
-"iniziali e finali."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Questo valore può contenere solo lettere, cifre, sottolineati, trattini e "
-"barre diagonali."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opzioni avanzate"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titolo"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "contenuto"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "abilita commenti"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nome modello"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Esempio: 'flatpages/contact_page.html'. Se non specificato, il sistema userà "
-"'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "registrazione obbligatoria"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Se selezionato, solo gli utenti che hanno effettuato l'accesso potranno "
-"vedere la pagina."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "pagina statica"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "pagine statiche"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Spiacenti, ma la tua form è scaduta. Puoi continuare a compilare la form da "
-"questa pagina."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Il campo base GIS -- corrisponde al tipo Geometry delle specifiche OpenGIS."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punto"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Stringa linea"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Poligono"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Multipunto"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Stringa multilinea"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Multi poligono"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Raccolta Geometry"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Nessun valore geometrico fornito."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Valore geometrico non valido."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tipo geometrico non valido."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Si è verificato un errore durante la trasformazione della geometria nello "
-"SRID del campo geometria della form."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milione"
-msgstr[1] "%(value).1f milioni"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miliardo"
-msgstr[1] "%(value).1f miliardi"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f migliaio di miliardi"
-msgstr[1] "%(value).1f migliaia di miliardi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "uno"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "due"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "quattro"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cinque"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "sei"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sette"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "otto"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "nove"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "oggi"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "domani"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "ieri"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Inserisci un codice postale nel formato NNNN o ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Questo campo può contenere solo numeri."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Questo campo richiede 7 o 8 cifre."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Inserisci un CUIT valido nel formato XX-XXXXXXXX-X o XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT non valido."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Bassa Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Alta Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salisburgo"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirolo"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vienna"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Inserisci un codice postale nel formato XXXXX ."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Inserisci un Numero di Assistenza Sociale Austriaco valido, nel formato XXXX "
-"XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Inserisci un codice postale di 4 cifre."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Inserisci un codice postale nel formato XXXXX-XXX ."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "I numeri di telefono devono essere in formato XX-XXXX-XXXX ."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Scegliere uno stato brasiliano valido. Questo stato non è uno di quelli "
-"disponibili."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Numero CPF non valido."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Questo campo richiede non più di 11 cifre, o 14 caratteri."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Numero CNPJ non valido."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Questo campo richiede almeno 14 cifre"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Inserisci un codice postale nel formato XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Inserisci un numero di assicurazione sociale canadese valido, nel formato "
-"XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berna"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Friburgo"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Ginevra"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerna"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurigo"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Inserisci un numero di carta d'identità o passaporto svizzeri validi, in "
-"formato X1234567<0 o 1234567890 ."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Inserisci un RUT cileno valido."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Inserisci un RUT cileno valido. Il formato è XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Il RUT cileno non è valido."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Regione Boema Centrale"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Regione Boema del Sud"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Regione di Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Regione di Carlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Regione di Usti"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Regione di Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Regione di Hradec"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Regione di Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Regione di Vysocina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Regione della Moravia del Sud"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Regione di Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Regione di Zlin"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Regione della Moravia-Silesia"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Inserisci un codice postale nel formato XXXXX o XXX XX ."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Inserisci un numero di nascita nel formato XXXXXX/XXXX o XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Parametro opzionale 'Sesso' non valido, i valori validi sono 'f' ed 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Inserisci un numero di nascita valido."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Inserisci un numero di IC valido."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Baviera"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlino"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburgo"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Brema"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Amburgo"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Pomerania Ovest"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Bassa Sassonia"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Reno Nord-Wesfalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sassonia"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Turingia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Inserisci un codice postale nel formato XXXXX ."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Inserisci un numero di carta d'identità tedesco valido nel formato "
-"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X ."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Isole Baleari"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcellona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadice"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Città Reale"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Croce di Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Siviglia"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valenza"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Saragozza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principato delle Asturie"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Isole Baleari"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Paese Basco"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Isole Canarie"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castile-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castile and Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalogna"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Estremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galizia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Regione Murzia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Comunità Forale di Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Comunità di Valenza"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Inserisci un codice postale valido nell'intervallo e formato 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Inserisci un numero telefonico valido in uno dei formati 6XXXXXXXX, "
-"8XXXXXXXX o 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Inserisci un NIF, NIE, o CIF valido."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Inserisci un NIF o NIE valido."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Checksum non valido per il NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Checksum non valido per il NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Checksum non valido per il CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Inserisci un numero di conto corrente bancario valido nel formato XXXX-XXXX-"
-"XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Checksum non valido per il numero di conto corrente bancario."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Inserisci un numero di assistenza sociale finlandese valido."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "I numeri di telefono devono essere in formato 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Inserisci un codice postale valido"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Inserisci un numero telefonico valido"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Inserisci una targa automobilistica valida"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Inserisci un numero NIK/KTP valido"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Giacarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corpi Consolari"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corpi Diplomatici"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Governo Federale"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublino"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Inserisci un codice postale nel formato XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Inserisci un numero di identificazione islandese valido. Il formato è XXXXXX-"
-"XXXX ."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Il numero di identificazione islandese non è valido."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Inserisci un codice postale valido."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Inserisci un numero di codice fiscale valido."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Inserisci una partita IVA valida."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Inserisci un codice postale nel formato XXXXXXX o XXX-XXXX ."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Inserisci un numero civile ID kuwaitiano valido"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baia California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baia California Sud"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distretto Federale"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Stato del Messico"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuova Leòn"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Inserisci un codice postale valido"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Inserisci un numero SoFi valido"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Inserisci un numero di assistenza sociale norvegese valido."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Questo campo richiede 8 cifre."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Questo campo richiede 11 cifre."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Il Numero Identificativo Nazionale è costituito da 11 cifre."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Checksum errato per il Numero Identificativo Nazionale."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Inserisci un campo di numero d'imposta (NIP) nel formato XXX-XXX-XX-XX o XX-"
-"XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Checksum errato per il Numero d'Imposta (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Il Numero di Registro Nazionale d'Impresa (REGON) è costituito da 9 o 14 "
-"cifre."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Checksum errato per il Numero di Registro Nazionale d'Impresa (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Inserisci un codice postale nel formato XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Bassa Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublino"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Polonia Minore"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Polonia Maggiore"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Pomerania Ovest"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Inserisci un codice postale nel formato XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "I numeri di telefono devono avere 9 cifre, o iniziare con + o 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Inserisci un codice CIF valido."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Inserisci un codice CNP valido."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Inserisci un codice IBAN valido nel formato ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "I numeri di telefono devono essere in formato XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Inserisci un codice postale valido nel formato XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Inserisci un numero di organizzazione svedese valido."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Inserisci un numero d'identità personale svedese valido."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "I numeri di coordinamento non sono ammessi."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Inserisci un codice postale svedese nel formato XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stoccolma"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica region"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Regione di Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Regione di Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Regione di Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Regione di Presov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Regione di Trencin"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Regione di Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Regione di Zilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Inserisci un codice postale valido."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornovaglia e Isole di Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Sussex dell'Est"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "Yorkshire del Nord"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Yorkshire del Sud"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "Midland dell'Ovest"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "Sussex dell'Ovest"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "Yorkshire dell'Ovest"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Contea di Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Contea di Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Contea di Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Contea di Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Contea di Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Contea di Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Glamorgan centrale"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Glamorgan Sud"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Glamorgan Ovest"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Scozia Centrale"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Isole Orkney"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Isole Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Isole dell'Ovest"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Inghilterra"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlanda del Nord"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Scozia"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Galles"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Inserisci un codice postale nel formato XXXXX o XXXXX-XXXX ."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "I numeri di telefono devono essere in formato XXX-XXX-XXXX ."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Inserisci un numero di assistenza sociale USA valido, nel formato XXX-XX-"
-"XXXX ."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Inserisci uno stato o territorio USA."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stato USA (due lettere maiuscole)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Numero di telefono"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Inserisci un numero CI valido nel formato X.XXX.XXX-X, XXXXXXX-X o XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Inserisci un numero CI valido."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Inserisci un numero ID sudafricano valido"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Inserisci un codice postale sudafricano valido"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Capo Est"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Libero Stato"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Capo Nord"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Nordovest"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Capo Ovest"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "messaggio lazy"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirezione da"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Deve essere un percorso assoluto, senza nome di dominio. Esempio: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirezione verso"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Può essere un percorso assoluto (come sopra) o una URL completa che inizia "
-"con 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redirezione"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redirezioni"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "chiave di sessione"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "dati di sessione"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "data di scadenza"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sessione"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessioni"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nome di dominio"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "nome visualizzato"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "siti"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Inserisci un valore valido."
-
-#: core/validators.py:93 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Inserisci una URL valida."
-
-#: core/validators.py:95 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Questa URL non sembra funzionare."
-
-#: core/validators.py:129 forms/fields.py:873
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Inserisci uno 'slug' valido contenente lettere, cifre, sottolineati o "
-"trattini."
-
-#: core/validators.py:132 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Inserisci un indirizzo IPv4 valido."
-
-#: core/validators.py:135 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Inserisci solo cifre separate da virgole."
-
-#: core/validators.py:141
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Assicurarsi che questo valore sia %(limit_value)s (ora è %(show_value)s)."
-
-#: core/validators.py:159 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Assicurarsi che questo valore sia minore o uguale a %(limit_value)s."
-
-#: core/validators.py:164 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Assicurarsi che questo valore sia maggiore o uguale a %(limit_value)s."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Assicurarsi che questo valore contenga almeno %(limit_value)d caratteri (ne "
-"ha %(show_value)d)."
-
-#: core/validators.py:176
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Assicurarsi che questo valore non contenga più di %(limit_value)d caratteri "
-"(ne ha %(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s deve essere unico per %(lookup)s %(date_field)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s con questo %(field_label)s esiste già."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Il valore %r non è una scelta valida."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Questo campo non può essere nullo."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Questo campo non può essere vuoto."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Campo di tipo: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Intero"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Questo valore deve essere un intero."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Questo valore deve essere True o False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (True o False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Stringa (fino a %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Interi separati da virgola"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Data (senza ora)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Inserisci una data valida in formato AAAA-MM-GG."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Data non valida: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Inserisci una data/ora valida nel formato AAAA-MM-GG OO:MM[ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Data (con ora)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Questo valore deve essere un numero decimale."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Numero decimale"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Indirizzo e-mail"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Percorso di file"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Questo valore deve essere un numero a virgola mobile."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Numero decimale"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Intero grande (8 byte)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Questo valore deve essere None, True o False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (True, False o None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Testo"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Ora"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Inserisci un'ora valida nel formato OO:MM[ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "Testo XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Il modello %(model)s con chiave primaria %(pk)r non esiste."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Foreign Key (tipo determinato dal campo collegato)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Relazione uno a uno"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Relazione molti a molti"
-
-#: db/models/fields/related.py:1000
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Tieni premuto \"Control\", o \"Command\" su Mac, per selezionarne più di uno."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Inserisci un ID valido per %(self)s. Il valore %(value)r non è valido."
-msgstr[1] "Inserisci ID validi per %(self)s. I valori %(value)r non sono validi."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Questo campo è obbligatorio."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Inserisci un numero intero."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Inserisci un numero."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Assicurarsi che non vi siano più di %s cifre in totale."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Assicurarsi che non vi siano più di %s cifre decimali."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Assicurarsi che non vi siano più di %s cifre prima della virgola."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Inserisci una data valida."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Inserisci un'ora valida."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Inserisci una coppia data/ora valida."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Non è stato inviato alcun file. Verifica il tipo di codifica della form."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Nessun file è stato inviato."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Il file inviato è vuoto."
-
-#: forms/fields.py:438
-#, python-format
-msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Assicurarsi che questo nome di file non contenga più di %(max)d caratteri "
-"(ne ha %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "Carica un'immagine valida. Il file caricato non è un'immagine o è corrotto."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Scegli un'opzione valida. '%(value)s non compare tra quelle disponibili."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Inserisci una lista di valori."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Ordine"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Correggi i dati duplicati di %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Correggi i dati duplicati di %(field)s, che deve essere unico."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Correggi i dati duplicati di %(field_name)s che deve essere unico/a per %"
-"(lookup)s in %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Correggi i dati duplicati qui sotto."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "La foreign key inline non concorda con la chiave primaria dell'istanza padre."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Scegli un'opzione valida. La scelta effettuata non compare tra quelle "
-"disponibili."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Scegli un'opzione valida. %s non compare tra quelle disponibili."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" non è un valore valido per una chiave primaria."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "sì,no,forse"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d byte"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "mezzanotte"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "mezzogiorno"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "lunedì"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "martedì"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "mercoledì"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "giovedì"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "venerdì"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "sabato"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "domenica"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "lun"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "mar"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "mer"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "gio"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "ven"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "sab"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "dom"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "gennaio"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "febbraio"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "marzo"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "aprile"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "maggio"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "giugno"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "luglio"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "agosto"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "settembre"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "ottobre"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "novembre"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "dicembre"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "gen"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mag"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "giu"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "lug"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ago"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "set"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "ott"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dic"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "gen."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ago."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "set."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "ott."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dic."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "o"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "anno"
-msgstr[1] "anni"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mese"
-msgstr[1] "mesi"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "settimana"
-msgstr[1] "settimane"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "giorno"
-msgstr[1] "giorni"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ora"
-msgstr[1] "ore"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minuti"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuti"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j F Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "Y F"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s creato/a correttamente."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s aggiornato/a correttamente."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s cancellato/a."
-
diff --git a/parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index f03b1a2..0000000
--- a/parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.po
deleted file mode 100644
index b779887..0000000
--- a/parts/django/django/conf/locale/it/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,124 +0,0 @@
-# translation of djangojs.po to Italiano
-# Italian translation for the django-admin JS files
-# Copyright (C) 2006 the Lawrence Journal-World
-# This file is distributed under the same license as the Django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-26 16:15+0100\n"
-"PO-Revision-Date: 2009-12-26 16:50+0100\n"
-"Last-Translator: Nicola Larosa <nico@tekNico.net>\n"
-"Language-Team: Italian <django-it@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s disponibili"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Scegli tutto"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Aggiungi"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Elimina"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s scelti"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Seleziona le tue scelte e clicca "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Cancella tutto"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"gennaio febbraio marzo aprile maggio giugno luglio agosto settembre ottobre "
-"novembre dicembre"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M M G V S"
-
-#: contrib/admin/media/js/calendar.js:26
-msgid "FIRST_DAY_OF_WEEK"
-msgstr "1"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "domenica lunedì martedì mercoledì giovedì venerdì sabato"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Mostra"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Nascondi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Adesso"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Orologio"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Scegli un orario"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Mezzanotte"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 del mattino"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Mezzogiorno"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Annulla"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Oggi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Calendario"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Ieri"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Domani"
diff --git a/parts/django/django/conf/locale/it/__init__.py b/parts/django/django/conf/locale/it/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/it/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/it/formats.py b/parts/django/django/conf/locale/it/formats.py
deleted file mode 100644
index f20f00c..0000000
--- a/parts/django/django/conf/locale/it/formats.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y' # 25 Ottobre 2006
-TIME_FORMAT = 'H:i:s' # 14:30:59
-DATETIME_FORMAT = 'l d F Y H:i:s' # Mercoledì 25 Ottobre 2006 14:30:59
-YEAR_MONTH_FORMAT = 'F Y' # Ottobre 2006
-MONTH_DAY_FORMAT = 'j/F' # 10/2006
-SHORT_DATE_FORMAT = 'd/M/Y' # 25/12/2009
-SHORT_DATETIME_FORMAT = 'd/M/Y H:i:s' # 25/10/2009 14:30:59
-FIRST_DAY_OF_WEEK = 1 # Lunedì
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%Y/%m/%d', # '2008-10-25', '2008/10/25'
- '%d-%m-%Y', '%d/%m/%Y', # '25-10-2006', '25/10/2006'
- '%d-%m-%y', '%d/%m/%y', # '25-10-06', '25/10/06'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%d-%m-%Y %H:%M:%S', # '25-10-2006 14:30:59'
- '%d-%m-%Y %H:%M', # '25-10-2006 14:30'
- '%d-%m-%Y', # '25-10-2006'
- '%d-%m-%y %H:%M:%S', # '25-10-06 14:30:59'
- '%d-%m-%y %H:%M', # '25-10-06 14:30'
- '%d-%m-%y', # '25-10-06'
- '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
- '%d/%m/%Y %H:%M', # '25/10/2006 14:30'
- '%d/%m/%Y', # '25/10/2006'
- '%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
- '%d/%m/%y %H:%M', # '25/10/06 14:30'
- '%d/%m/%y', # '25/10/06'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/ja/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ja/LC_MESSAGES/django.mo
deleted file mode 100644
index 1428c39..0000000
--- a/parts/django/django/conf/locale/ja/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ja/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ja/LC_MESSAGES/django.po
deleted file mode 100644
index 83e8e12..0000000
--- a/parts/django/django/conf/locale/ja/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5116 +0,0 @@
-# Translation of django.po to japanese.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-09 10:57+0900\n"
-"PO-Revision-Date: 2010-05-09 12:41+0900\n"
-"Last-Translator: Takashi Matsuo <matsuo.takashi@gmail.com>\n"
-"Language-Team: Japanese <django-ja@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "アラビア語"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "ブルガリア語"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "ベンガル語"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "ボスニア語"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "カタロニア語"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "チェコ語"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "ウェールズ語"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "デンマーク語"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "ドイツ語"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "ギリシャ語"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "英語(米国)"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "英語(英国)"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "スペイン語"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "アルゼンチンスペイン語"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "エストニア語"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "バスク語"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "ペルシア語"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "フィンランド語"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "フランス語"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "フリジア語"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "アイルランド語"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "ガリシア語"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "ヘブライ語"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "ヒンディー語"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "クロアチア語"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "ハンガリー語"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "アイスランド語"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "イタリア語"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "日本語"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "グルジア語"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "クメール語"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "カンナダ語"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "韓国語"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "リトアニア語"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "ラトビア語"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "マケドニア語"
-
-#: conf/global_settings.py:80
-msgid "Mongolian"
-msgstr "モンゴル語"
-
-#: conf/global_settings.py:81
-msgid "Dutch"
-msgstr "オランダ語"
-
-#: conf/global_settings.py:82
-msgid "Norwegian"
-msgstr "ノルウェー語"
-
-#: conf/global_settings.py:83
-msgid "Norwegian Bokmal"
-msgstr "ノルウェーのブークモール"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Nynorsk"
-msgstr "ノルウェーのニーノシュク"
-
-#: conf/global_settings.py:85
-msgid "Polish"
-msgstr "ポーランド語"
-
-#: conf/global_settings.py:86
-msgid "Portuguese"
-msgstr "ポルトガル語"
-
-#: conf/global_settings.py:87
-msgid "Brazilian Portuguese"
-msgstr "ブラジルポルトガル語"
-
-#: conf/global_settings.py:88
-msgid "Romanian"
-msgstr "ルーマニア語"
-
-#: conf/global_settings.py:89
-msgid "Russian"
-msgstr "ロシア語"
-
-#: conf/global_settings.py:90
-msgid "Slovak"
-msgstr "スロバキア語"
-
-#: conf/global_settings.py:91
-msgid "Slovenian"
-msgstr "スロヴェニア語"
-
-#: conf/global_settings.py:92
-msgid "Albanian"
-msgstr "アルバニア語"
-
-#: conf/global_settings.py:93
-msgid "Serbian"
-msgstr "セルビア語"
-
-#: conf/global_settings.py:94
-msgid "Serbian Latin"
-msgstr "セルビア語ラテン文字"
-
-#: conf/global_settings.py:95
-msgid "Swedish"
-msgstr "スウェーデン語"
-
-#: conf/global_settings.py:96
-msgid "Tamil"
-msgstr "タミル語"
-
-#: conf/global_settings.py:97
-msgid "Telugu"
-msgstr "テルグ語"
-
-#: conf/global_settings.py:98
-msgid "Thai"
-msgstr "タイ語"
-
-#: conf/global_settings.py:99
-msgid "Turkish"
-msgstr "トルコ語"
-
-#: conf/global_settings.py:100
-msgid "Ukrainian"
-msgstr "ウクライナ語"
-
-#: conf/global_settings.py:101
-msgid "Vietnamese"
-msgstr "ベトナム語"
-
-#: conf/global_settings.py:102
-msgid "Simplified Chinese"
-msgstr "簡体字中国語"
-
-#: conf/global_settings.py:103
-msgid "Traditional Chinese"
-msgstr "繁体字中国語"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d 個の %(items)sを削除しました。"
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "よろしいですか?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "選択された %(verbose_name_plural)s の削除"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s で絞り込む</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "全て"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "いつでも"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "今日"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "過去 7 日間"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "今月"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "今年"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "はい"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "いいえ"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "不明"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "操作:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "操作時刻"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "オブジェクト ID"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "オブジェクトの文字列表現"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "操作種別"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "変更メッセージ"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "ログエントリ"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "ログエントリ"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "None"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "%s を変更しました。"
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "と"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\"を追加しました。"
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" の %(list)s を変更しました。"
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" を削除しました。"
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "変更はありませんでした。"
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" を追加しました。"
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "続けて編集できます。"
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "続けて別の %s を追加できます。"
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" を変更しました。"
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" を追加しました。続けて編集できます。"
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr "操作を実行するには、対象を選択する必要があります。何も変更されませんでした。"
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "操作が選択されていません。"
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "%s を追加"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "主キーが %(key)r である %(name)s オブジェクトは存在しません。"
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "%s を変更"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "データベースエラー"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s 個の %(name)s を変更しました。"
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s 個選択されました"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "%(cnt)s個の内ひとつも選択されていません"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" を削除しました。"
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "変更履歴: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"正しいユーザ名とパスワードを入力してください (大文字小文字は区別します) 。"
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr ""
-"再ログインしてください。ログインセッションが有効期間切れしてしまいました。"
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"ブラウザがクッキーの使用を許可していないようです。クッキーの使用を許可して、"
-"もう一度このページを表示してください。"
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "ユーザ名には '@' を含められません。"
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "メールアドレスはユーザ名ではありません。 '%s' を試してみてください。"
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "サイト管理"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "ログイン"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s サイト管理"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "日付:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "時刻:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "現在:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "変更:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "検索"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "追加"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "ページが見つかりません"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "申し訳ありませんが、お探しのページは見つかりませんでした。"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "ホーム"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "サーバエラー"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "サーバエラー (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "サーバエラー <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"エラーが発生しました。エラーをサイトの管理者にメールで報告しましたので、近い"
-"うちに修正されるはずです。しばらくお待ちください。"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "選択された操作を実行"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "実行"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "全ページの項目を選択するにはここをクリック"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "%(total_count)s個ある%(module_name)s を全て選択"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "選択を解除"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "ようこそ"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "ドキュメント"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "パスワードの変更"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "ログアウト"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django サイト管理"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django 管理サイト"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "追加"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "履歴"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "サイト上で表示"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "下記のエラーを修正してください。"
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s を追加"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "フィルタ"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "削除"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"%(object_name)s '%(escaped_object)s' の削除時に関連づけられたオブジェクトも削"
-"除しようとしましたが、あなたのアカウントには以下のタイプのオブジェクトを削除"
-"するパーミッションがありません:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"%(object_name)s \"%(escaped_object)s\"を削除しますか? 関連づけられている以下"
-"のオブジェクトも全て削除されます:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "はい。"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "複数のオブジェクトを削除します"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"%(object_name)s の削除時に関連づけられたオブジェクトも削除しようとしました"
-"が、あなたのアカウントには以下のタイプのオブジェクトを削除するパーミッション"
-"がありません:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr "%(object_name)s を削除しますか? 関連づけられている以下のオブジェクトと関連する項目も全て削除されます:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "%(filter_title)s で絞り込む"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s アプリケーションで利用可能なモデル"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "変更"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "変更のためのパーミッションがありません。"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "最近行った操作"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "操作"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "利用不可"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "不明なコンテント"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"データベースの設定に問題があるようです。適切なテーブルが作られていること、適"
-"切なユーザでデータベースのデータを読み込めることを確認してください。"
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "ユーザ名:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "パスワード:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "日付/時刻"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "ユーザ"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "操作"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"このオブジェクトには変更履歴がありません。おそらくこの管理サイトで追加したも"
-"のではありません。"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "全件表示"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "保存"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "検索"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s 件"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "全 %(full_result_count)s 件"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "新規保存"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "保存してもう一つ追加"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "保存して編集を続ける"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"まずユーザ名とパスワードを登録してください。その後詳細情報が編集可能になりま"
-"す。"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-"<strong>%(username)s</strong>さんの新しいパスワードを入力してください。"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "パスワード"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "パスワード(確認用)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "確認のため、再度パスワードを入力してください。"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "%(verbose_name)s の追加"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "削除"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "削除しますか?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "ご利用ありがとうございました。"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "もう一度ログイン"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "パスワードの変更"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "パスワードを変更しました"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "あなたのパスワードは変更されました"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"セキュリティ上の理由から元のパスワードの入力が必要です。新しいパスワードは正"
-"しく入力したか確認できるように二度入力してください。"
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "元のパスワード"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "新しいパスワード"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "パスワードの変更"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "パスワードをリセット"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "パスワードがリセットされました"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "パスワードがセットされました。ログインしてください。"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "パスワードリセットの確認"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "新しいパスワードを入力してください"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "確認のために、新しいパスワードを二回入力してください。"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "新しいパスワード:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "新しいパスワード (確認用) :"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "パスワードのリセットに失敗しました"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"パスワードリセットのリンクが不正です。おそらくこのリンクは既に使われていま"
-"す。もう一度パスワードリセットしてください。"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "パスワードをリセットしました"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"登録されているメールアドレスにパスワードリセットの方法を送信しました。まもな"
-"く届くでしょう。"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"あなたのパスワードはリセットされましたので、ここにメールでご連絡差し上げま"
-"す。"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "リセットされたのは %(site_name)s のアカウントです。"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "次のページで新しいパスワードを選んでください:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "あなたのユーザ名 (念のため):"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "ご利用ありがとうございました!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr " %(site_name)s チーム"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"パスワードをお忘れですか?メールアドレスを入力してください。パスワードのリ"
-"セット方法をメールでお知らせします。"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "メールアドレス"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "パスワードをリセット"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "いつでも"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "%s を選択"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "変更する %s を選択"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "サイト"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "テンプレート"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "タグ"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "フィルタ"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "ビュー"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "アプリケーション %r が見つかりません"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-"モデル %(model_name)r が %(app_label)r アプリケーションに見つかりません"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "`%(app_label)s.%(data_type)s` (関連オブジェクト)"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "モデル :"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "`%(app_label)s.%(object_name)s` (関連オブジェクト)"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "全ての %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%s の数"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s のフィールド"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s はurlpatternオブジェクトでは無いようです"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "ブックマークレット"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "ドキュメントへのブックマークレット"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">ブックマークレットをインストールするには、リンクをブック"
-"マークツールバーにドラッグするか、\n"
-"リンクを右クリックしてブックマークに追加してください。これで\n"
-"サイトのどのページからでもブックマークレットを選択可能になりました。\n"
-"ブックマークレットによっては、内部ネットワークにあるコンピュータからこのサイ"
-"トを\n"
-"参照していなければならないことがあります。内部ネットワークにあるかどうか不明"
-"な場合は、システム管理者に確認してください。</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "このページのドキュメント"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "各ページから、ページを生成したビューのドキュメントにジャンプします。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "オブジェクト ID を表示"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"単一のオブジェクトを表示するページのコンテンツタイプと一意な IDを表示します。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "オブジェクトを (現在のウィンドウで) 編集"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "単一のオブジェクトを表示するページの管理ページへジャンプします。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "オブジェクトを (新しいウィンドウで) 編集"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "上と同じですが、新しいウィンドウで管理ページを開きます。"
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "個人情報"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "パーミッション"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "重要な日程"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "グループ"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "パスワードを変更しました"
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "パスワードの変更: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "ユーザ名"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "この項目は必須です。半角アルファベット、半角数字、@/./+/-/_ で30文字以下にしてください。"
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "半角の英数字および次の記号 @/./+/-/_ 以外は使用できません。"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "パスワードの確認"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "同じユーザ名が既に登録済みです。"
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "確認用パスワードが一致しません。"
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "アカウントが無効です。"
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"お使いのブラウザはクッキーを有効にしていないようです。ログインにはクッキーが"
-"必要です。"
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "メールアドレス"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "メールアドレスの一致するユーザはいません。本当に登録しましたか?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "%s のパスワードのリセット"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "新しいパスワード(確認用)"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "元のパスワードが間違っています。もう一度入力してください。"
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "名前"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "コード名"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "パーミッション"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "パーミッション"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "グループ"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "グループ"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "ユーザ名"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "この項目は必須です。半角アルファベット、半角数字、次の記号 @/./+/-/_ で30文字以下にしてください。"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "名"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "姓"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "メールアドレス"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "パスワード"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"'[algo]$[salt]$[hexdigest]'形式か、<a href=\"password/\">パスワード変更フォー"
-"ム</a>を使ってください。"
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "スタッフ権限"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "ユーザが管理サイトにログイン可能かどうかを示します。"
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "有効"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"ユーザがアクティブかどうかを示します。アカウントを消す代わりに選択を解除して"
-"ください。"
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "スーパーユーザ権限"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "全ての権限を持っているとみなされます。"
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "最終ログイン"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "登録日"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"手動で付与したパーミッションに加え、所属しているグループに付与された全ての"
-"パーミッションを獲得します。"
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "ユーザパーミッション"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "ユーザ"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "ユーザ"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "メッセージ"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "ログアウト"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "有効なメールアドレスを入力してください。"
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "内容"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "メタデータ"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "にフラグが付きました"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "選択したコメントにフラグを付ける"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "は承認されました"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "選択したコメントを承認する"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "は削除されました"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "コメントを削除する"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "%(count)s個のコメント%(action)s。"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s のコメント"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "%(site_name)s の最新コメント"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "名前"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "メールアドレス"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "コメント"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "言葉使いに気を付けて! %s という言葉は使えません。"
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "このフィールドに入力するとコメントはスパム扱いされます"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "コンテンツタイプ"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "オブジェクト ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "名前"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "メールアドレス"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "コメント"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "コメント投稿日時"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP アドレス"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "は公開中です"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"手っ取り早くコメントをサイトから消すにはここのチェックを外してください。"
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "は削除されました"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"コメントが不適切な場合はチェックを入れてください。「コメントは削除されまし"
-"た」と表示されるようになります。"
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "コメント"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"このコメントは認証済みユーザーによって投稿されたため、名前は読み取り専用で"
-"す。"
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"このコメントは認証済みユーザーによって投稿されたため、メールアドレスは読み取"
-"り専用です。"
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(user)s が %(date)s に投稿\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "フラグ"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "フラグを付けた日時"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "コメントフラグ"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "コメントフラグ"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "コメントを承認する"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "本当にこのコメントを承認しますか?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "承認"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "ご利用ありがとうございました!"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "当サイトの品質向上にご協力いただきありがとうございました"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "コメントを削除する"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "本当にこのコメントを削除しますか?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "ご利用ありがとうございました!"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "このコメントにフラグを付ける"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "本当にこのコメントにフラグを付けますか?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "フラグを付ける"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "ご利用ありがとうございました!"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "投稿"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "プレビュー"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "コメントしてくれてありがとうございました"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "コメントありがとうございました"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "コメントのプレビュー"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "下記のエラーを修正してください。"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "コメントを投稿"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "さらに編集"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "Python モデルクラス名"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "コンテンツタイプ"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"例: '/about/contact/'. 先頭と最後にスラッシュがあるか確認してください。"
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"半角の英数字、アンダースコア、ダッシュ、スラッシュ以外は使用できません。"
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "詳細設定"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "タイトル"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "内容"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "コメントを有効にする"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "テンプレート名"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"例: 'flatpages/contact_page.html'. 指定しなければ、デフォルト設定"
-"の'flatpages/default.html' を使います。"
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "登録が必要です"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "チェックした場合、ログインしたユーザだけがページを参照できます。"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "フラットページ"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "フラットページ"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"申し訳ありませんが、あなたのフォームへの入力は時間切れになりました。このペー"
-"ジで再度入力してください。"
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "GIS基底フィールドです -- OpenGIS で決められた地形タイプに対応"
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "点"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "線"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "ポリゴン"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "複数の点"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "複数の線"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "複数のポリゴン"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "地形の集合"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "geometry値がありません。"
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "geometry値が不正です"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "geometryタイプが不正です。"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"geometry を geometry フォームフィールドの SRID に変換しようとしてエラーが起き"
-"ました。"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "番目"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "番目"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "番目"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "番目"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f 百万"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f 十億"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f 兆"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "1"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "2"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "3"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "4"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "5"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "6"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "7"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "8"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "9"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "今日"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "明日"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "昨日"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "NNNNか、ANNNNAAAの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "このフィールドは必須です(数値のみ)。"
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "7桁か8桁で入力して下さい。"
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-"XX-XXXXXXXX-X か XXXXXXXXXXXX の形式で納税証明単一番号(CUIT)を入力して下さ"
-"い。"
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "無効な納税証明単一番号(CUIT): %s"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Lower Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Upper Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vienna"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "XXXXの形式でZipコードを入力してください。"
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "XXXX XXXXXX の形式でオーストリア社会保障番号を入力してください。"
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "4桁でポストコードを入力してください。"
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "XXXXX-XXXの形式でZipコードを入力してください。"
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "電話番号は XX-XXXX-XXXX 形式で入力してください。"
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "ブラジルの州から選択してください。選択したものは候補にありません。"
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "ブラジル納税者番号(CPF)が無効です。"
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "11桁の数字か14文字で入力してください。"
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "納税登録番号(CNPJ)が正しくありません。"
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "14桁以上で入力して下さい。"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "XXX XXXの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "XXX-XXX-XXX の形式で、カナダ社会保障番号を入力して下さい。"
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"スイス アイデンティティかパスポート番号を X1234567<0 か 1234567890 の形式で入"
-"力して下さい。"
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "正しいチリ納税者番号(RUT)を入力してください。"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "XX.XXX.XXX-Xの形式でチリ納税者番号(RUT)を入力してください。"
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "このチリ納税者番号(RUT)は無効です。"
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "プラハ"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "中央ボヘミア州"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "南ボヘミア州"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "プルゼニ州"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "カルロヴィ・ヴァリ州"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "ウースチー州"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "リベレツ州"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "フラデツ・クラーロヴェー州"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "パルドゥビツェ州"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "ヴィソチナ州"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "南モラヴィア州"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "オロモウツ州"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "ズリーン州"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "モラヴィア・スレスコ州"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "XXXXXか、XXX XXの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "XXXXXX/XXXXか、XXXXXXXXXXの形式で誕生番号を入力してください。"
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"オプションの性別パラメーターに対する不正な値です。可能な値は 'f' か 'm' で"
-"す。"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "誕生番号を正しく入力してください。"
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "IC番号を正しく入力してください。"
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lower Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "North Rhine-Westphalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "XXXXXの形式でZipコードを入力してください。"
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X の形式でドイツIDカード番号を入力して下さい。"
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principality of Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearic Islands"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Basque Country"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canary Islands"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castile-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castile and Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Region of Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "01XXX から 52XXXの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"6XXXXXXXX か 8XXXXXXXX か 9XXXXXXXX かのいずれかの形式で電話番号を入力してく"
-"ださい。"
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-"スペイン納税者番号(NIF)かスペイン住民番号(N.I.E)かスペイン企業番号(CIF)のいず"
-"れかを入力してください。"
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "スペイン納税者番号(NIF)かスペイン住民番号(N.I.E)を入力してください。"
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "スペイン納税者番号(NIF)のチェックサムがあいません。"
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "スペイン住民番号(N.I.E)のチェックサムがあいません。"
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "スペイン企業番号(CIF)のチェックサムがあいません。"
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "XXXX-XXXX-XX-XXXXXXXXXX の形式で銀行口座番号を入力して下さい。"
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "銀行口座番号のチェックサムがあいません。"
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "フィンランド社会保証番号を正しく入力してください。"
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "電話番号は 0X XX XX XX XX 形式で入力してください。"
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "郵便番号を正しく入力してください。"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "電話番号を正しく入力してください。"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "自動車のプレートナンバーを正しく入力してください。"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "NIK/KTP番号を正しく入力してください。"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "XXXXXXXの形式でZipコードを入力してください。"
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "XXXXXか、XXXXX-XXXXの形式でアイスランド納税者番号を入力してください。"
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "アイスランド納税者番号を正しく入力して下さい。"
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Zipコードを正しく入力してください。"
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "社会保障番号番号を正しく入力してください。"
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "VAT番号を正しく入力してください。"
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "北海道"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "青森県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "岩手県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "宮城県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "秋田県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "山形県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "福島県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "茨城県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "栃木県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "群馬県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "埼玉県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "千葉県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "東京都"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "神奈川県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "山梨県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "長野県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "新潟県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "富山県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "石川県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "福井県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "岐阜県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "静岡県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "愛知県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "三重県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "滋賀県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "京都府"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "大阪府"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "兵庫県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "奈良県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "和歌山県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "鳥取県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "島根県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "岡山県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "広島県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "山口県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "徳島県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "香川県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "愛媛県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "高知県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "福岡県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "佐賀県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "長崎県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "熊本県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "大分県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "宮崎県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "鹿児島県"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "沖縄県"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "クウェート市民番号を正しく入力してください。"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacan"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo Leon"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Queretaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosi"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatan"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "郵便番号を正しく入力してください。"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "社会税務番号(SoFi)を正しく入力してください。"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "ノルウェー社会保障番号を正しく入力してください。"
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "8桁で入力して下さい。"
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "11桁で入力して下さい。"
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "国民識別番号は11文字で入力して下さい。"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "国民識別番号のチェックサムがあいません。"
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "XXXXXか、XXXXX-XXXXの形式で納税者欄(NIP)を入力してください。"
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "税務署登録ID(NIP)のチェックサムがあいません。"
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "ポーランド企業番号(REGON)は9文字か14文字で入力して下さい。"
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "ポーランド企業番号(REGON)のチェックサムがあいません。"
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "XX-XXXの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "XXXX-XXXの形式でZipコードを入力してください。"
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "電話番号は9桁の数字か、プラス記号(+)または00で始まる必要があります。"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "CIFを正しく入力してください。"
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "CNPを正しく入力してください。"
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "ROXX-XXXX-XXXX-XXXX-XXXX-XXXX の形式でIBANを入力してください"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "電話番号は XXXX-XXXXXX 形式で入力してください。"
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "XXXXXX の形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "スウェーデン組織番号を正しく入力してください。"
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "スウェーデン個人識別番号を正しく入力してください。"
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "XXXXXの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica region"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava region"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kosice region"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra region"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Presov region"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trencin region"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava region"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zilina region"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "郵便番号を正しく入力してください。"
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Northern Ireland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。"
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "電話番号は XXX-XXX-XXXX 形式で入力してください。"
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "XXX-XX-XXXX の形式で、米国社会保障番号を入力して下さい。"
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "合衆国の州か地域を入力してください。"
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "アメリカの州 (大文字二文字で)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "電話番号"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "X.XXX.XXX-X,XXXXXXX-X か XXXXXXXX の形式でCI番号を入力して下さい。"
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "CI番号を正しく入力してください。"
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "南アフリカID番号を正しく入力してください。"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "南アフリカ郵便番号を正しく入力してください。"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "遅延メッセージ"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "リダイレクト元"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "'/events/search/' のように、ドメイン名を除いた絶対パスにします。 "
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "リダイレクト先"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "上記のような絶対パスか、 'http://' で始まる完全な URL にします。"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "リダイレクト"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "リダイレクト"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "セッションキー"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "セッションデータ"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "有効期限"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "セッション"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "セッション"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "ドメイン名"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "表示名"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "サイト"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "値を正しく入力してください。"
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "URLを正しく入力してください。"
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "このURLはリンクが壊れています。"
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "slug には半角の英数字、アンダースコア、ハイフン以外は使用できません。"
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "有効なIPアドレス (IPv4) を入力してください。"
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "カンマ区切りの数字だけを入力してください。"
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "この値は %(limit_value)s でなければなりません(実際には %(show_value)s でした) 。"
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "この値は %(limit_value)s 以下でなければなりません。"
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "この値は %(limit_value)s 以上でなければなりません。"
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "%(limit_value)d 字以上で入力してください(実際には %(show_value)d 文字でした)。"
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "%(limit_value)d 字以下で入力してください(実際には %(show_value)d 文字でした)。"
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"%(date_field)s %(lookup)s では %(field_name)s がユニークである必要がありま"
-"す。"
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "この %(field_label)s を持った %(model_name)s が既に存在します。"
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "%r は有効な選択肢ではありません。"
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "このフィールドには NULL を指定できません。"
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "このフィールドは空ではいけません。"
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "タイプが %(field_type)s のフィールド"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "整数"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "値は整数でなければなりません。"
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "値は真: True または偽: False でなければなりません。"
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "ブール値 (真: True または偽: False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "文字列 ( %(max_length)s 字まで )"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "カンマ区切りの整数"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "日付"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "YYYY-MM-DD形式で日付を入力してください。"
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "無効な日付: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "YYYY-MM-DD HH:MM[:ss[.uuuuuu]]形式で日時を入力してください。"
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "日時"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "値は整数でなければなりません。"
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "10 進数 (小数可)"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "メールアドレス"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "ファイルの場所"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "値は浮動小数点数でなければなりません。"
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "浮動小数点"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "大きな(8バイト)整数"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "値は、空: None、真: True または偽: False でなければなりません。"
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "ブール値 (真: True 、偽: False または None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "テキスト"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "時刻"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "HH:MM[:ss[.uuuuuu]]形式で時刻を入力してください。"
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XMLテキスト"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "主キーが %(pk)r である %(model)s モデルは存在しません。"
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "外部キー(型は関連フィールドによって決まります)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "1対1の関連"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "多対多の関連"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"複数選択するときには Control キーを押したまま選択してください。Mac は "
-"Command キーを使ってください"
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "正しい %(self)s IDを入力してください。 %(value)r は無効です。"
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "このフィールドは必須です。"
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "整数を入力してください。"
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "整数を入力してください。"
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "整数部と少数部を併せて %s 桁までで入力して下さい。"
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "少数部は %s 桁までで入力して下さい。"
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "整数部は %s 桁までで入力して下さい。"
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "日付を正しく入力してください。"
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "時間を正しく入力してください。"
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "日付/時間を正しく入力してください。"
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"ファイルが取得できませんでした。formのencoding typeを確認してください。"
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "ファイルが送信されていません。"
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "入力されたファイルは空です。"
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"ファイル名は %(max)d 字以上で入力してください( %(length)d 文字入力されまし"
-"た)。"
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"画像をアップロードしてください。アップロードしたファイルは画像でないか、また"
-"は壊れています。"
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "正しく選択してください。 %(value)s は候補にありません。"
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "リストを入力してください。"
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "並び変え"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "%(field)s の重複したデータを修正してください。"
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"%(field)s の重複したデータを修正してください。このフィールドはユニークである"
-"必要があります。"
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"%(field_name)s の重複したデータを修正してください。%(date_field)s %(lookup)s "
-"では %(field_name)s がユニークである必要があります。"
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "下記の重複したデータを修正してください。"
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "インライン外部キーが親インスタンスの主キーと一致しません。"
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "正しく選択してください。選択したものは候補にありません。"
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "正しく選択してください。 %s は候補にありません。"
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" はプライマリキーとして無効な値です。"
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "はい,いいえ,たぶん"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d バイト"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "0時"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "12時"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "月曜日"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "火曜日"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "水曜日"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "木曜日"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "金曜日"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "土曜日"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "日曜日"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "月"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "火"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "水"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "木"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "金"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "土"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "日"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "1月"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "2月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "3月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "4月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "5月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "6月"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "7月"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "8月"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "9月"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "10月"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "11月"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "12月"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "1月"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "2月"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "3月"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "4月"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "5月"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "6月"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "7月"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "8月"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "9月"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "10月"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "11月"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "12月"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "1月"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "2月"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "8月"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "9月"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "10月"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "11月"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "12月"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "または"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "年"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "ヶ月"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "週間"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "日"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "時間"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "分"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "分"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "Y/m/d"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "Y/m/d H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "Y/m/d"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "m/d"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s を作成しました。"
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s を更新しました。"
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr " %(verbose_name)s を削除しました。"
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "%(name)s に %(fieldname)s が一つ以上あります: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "%(name)s に %(fieldname)s が一つ以上あります:"
-
-#~ msgid "Old password:"
-#~ msgstr "元のパスワード:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "親モデルへのリレーション"
-
-#~ msgid "Add user"
-#~ msgstr "ユーザを追加"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "コメントのモデレーションキュー"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "モデレートするコメントはありません"
-
-#~ msgid "Email"
-#~ msgstr "メールアドレス"
-
-#~ msgid "Authenticated?"
-#~ msgstr "認証済みか?"
-
-#~ msgid "IP Address"
-#~ msgstr "IP アドレス"
-
-#~ msgid "Date posted"
-#~ msgstr "登録日"
-
-#~ msgid "yes"
-#~ msgstr "はい"
-
-#~ msgid "no"
-#~ msgstr "いいえ"
-
-#~ msgid "verbose_name"
-#~ msgid_plural "verbose_name_plural"
-#~ msgstr[0] "名前"
diff --git a/parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 815c353..0000000
--- a/parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.po
deleted file mode 100644
index bbf6033..0000000
--- a/parts/django/django/conf/locale/ja/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,144 +0,0 @@
-# Japanese translation for js.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-09 10:58+0900\n"
-"PO-Revision-Date: 2010-05-09 12:50+0900\n"
-"Last-Translator: Takashi Matsuo <matsuo.takashi@gmail.com>\n"
-"Language-Team: Japanese <django-ja@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "利用可能 %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "全て選択"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "追加"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "削除"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "選択された %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "選択してクリック"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "全てクリア"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(cnt)s個中%(sel)s個選択"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr "フィールドに未保存の変更があります。操作を実行すると未保存の変更は失われます。"
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr "操作を選択しましたが、フィールドに未保存の変更があります。OKをクリックして保存してください。その後、操作を再度実行する必要があります。"
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr "操作を選択しましたが、フィールドに変更はありませんでした。もしかして保存ボタンではなくて実行ボタンをお探しですか。"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "日 月 火 水 木 金 土"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "表示"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "非表示"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "日曜 月曜 火曜 水曜 木曜 金曜 土曜"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "現在"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "時計"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "時間を選択"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "0時"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "午前 6 時"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "12時"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "キャンセル"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "今日"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "カレンダー"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "昨日"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "明日"
diff --git a/parts/django/django/conf/locale/ja/__init__.py b/parts/django/django/conf/locale/ja/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ja/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ja/formats.py b/parts/django/django/conf/locale/ja/formats.py
deleted file mode 100644
index 853056d..0000000
--- a/parts/django/django/conf/locale/ja/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'Y年n月j日'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = 'Y年n月j日G:i:s'
-YEAR_MONTH_FORMAT = 'Y年n月'
-MONTH_DAY_FORMAT = 'n月j日'
-SHORT_DATE_FORMAT = 'Y/m/d'
-SHORT_DATETIME_FORMAT = 'Y/m/d G:i:s'
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/ka/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ka/LC_MESSAGES/django.mo
deleted file mode 100644
index 997a164..0000000
--- a/parts/django/django/conf/locale/ka/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ka/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ka/LC_MESSAGES/django.po
deleted file mode 100644
index 205ad3f..0000000
--- a/parts/django/django/conf/locale/ka/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4176 +0,0 @@
-# translation of django.po to Georgian
-# Django translation to Georgian language.
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-05 14:11+0400\n"
-"PO-Revision-Date: 2008-10-05 14:34+0400\n"
-"Last-Translator: David Avsajanishvili <avsd05@gmail.com>\n"
-"Language-Team: Georgian <ka@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "არაბული"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "ბენგალიური"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "ბულგარული"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "კატალანური"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "ჩეხური"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "უელსური"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "დანიური"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "გერმანული"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "ბერძნული"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "ინგლისური"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "ესპანური"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "ესტონური"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "არგენტინის ესპანური"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "ბასკური"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "სპარსული"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "ფინური"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "ფრანგული"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "ირლანდიური"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "გალიციური"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "უნგრული"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "ებრაული"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr "ხორვატიული"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "ისლანდიური"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "იტალიური"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "იაპონური"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "ქართული"
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "კორეული"
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "ხმერული"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "კანნადა"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "ლატვიური"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "ლიტვური"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "მაკედონიური"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "ჰოლანდიური"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "ნორვეგიული"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "პოლონური"
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "პორტუგალიური"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "ბრაზილიური პორტუგალიური"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "რუმინული"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "რუსული"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "სლოვაკური"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "სლოვენიური"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "სერბული"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "შვედური"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "თამილური"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "ტელუგუ"
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "თურქული"
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "უკრაინული"
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "გამარტივებული ჩინური"
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "ტრადიციული ჩინური"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s-ს მიერ:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "ყველა"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "ნებისმიერი თარიღი"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "დღეს"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "ბოლო 7 დღე"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "მიმდინარე თვე"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "მიმდინარე წელი"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:390
-msgid "Yes"
-msgstr "კი"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:390
-msgid "No"
-msgstr "არა"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:390
-msgid "Unknown"
-msgstr "გაურკვეველი"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "მოქმედების დრო"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "ობიექტის id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "ობიექტის წარმ."
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "მოქმედების დროშა"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "შეცვლის შეტყობინება"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "ლოგის ერთეული"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "ლოგის ერთეულები"
-
-#: contrib/admin/options.py:60 contrib/admin/options.py:121
-msgid "None"
-msgstr "არცერთი"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "%s შეცვლილია."
-
-#: contrib/admin/options.py:338 contrib/admin/options.py:348
-#: contrib/comments/templates/comments/preview.html:15 forms/models.py:275
-msgid "and"
-msgstr "და"
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "დამატებულია %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "შეცვლილია %(list)s for %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "წაშლილია %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "არცერთი ველი არ შეცვლილა."
-
-#: contrib/admin/options.py:417 contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" წარმატებით დაემატა."
-
-#: contrib/admin/options.py:421 contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "თქვენ შეგიძლიათ შეცვალოთ იგი."
-
-#: contrib/admin/options.py:431 contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "შეგიძლიათ დაამატოთ კიდევ ერთი %s."
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" წარმატებით შეიცვალა."
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" წარმატებით დაემატა. შეგიძლიათ განაგრძოთ მისი "
-"რედაქტირება."
-
-#: contrib/admin/options.py:528
-#, python-format
-msgid "Add %s"
-msgstr "დავამატოთ %s"
-
-#: contrib/admin/options.py:605
-#, python-format
-msgid "Change %s"
-msgstr "შევცვალოთ %s"
-
-#: contrib/admin/options.py:637
-msgid "Database error"
-msgstr "მონაცემთა ბაზის შეცდომა"
-
-#: contrib/admin/options.py:687
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" წარმატებით წაიშალა."
-
-#: contrib/admin/options.py:694
-msgid "Are you sure?"
-msgstr "დარწმუნებული ხართ?"
-
-#: contrib/admin/options.py:723
-#, python-format
-msgid "Change history: %s"
-msgstr "ცვლილებების ისტორია: %s"
-
-#: contrib/admin/sites.py:16 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"გთხოვთ, შეიყვანოთ სწორი მომხმარებლის სახელი და პაროლი. გაითვალისწინეთ, რომ "
-"ორივე ველი დამოკიდებულია რეგისტრზე."
-
-#: contrib/admin/sites.py:226 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "გთხოვთ, შეხვიდეთ კიდევ ერთხელ, რადგანაც თქვენი სესიის დრო ამოიწურა."
-
-#: contrib/admin/sites.py:233 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"როგორც ჩანს, თქვენი ბროუზერი არ ღებულობს cookie-ებს. გთხოვთ, ჩართოთ cookie-"
-"ების მიღების ფუნქცია, განაახლეთ ეს გვერდი და სცადეთ კიდევ ერთხელ."
-
-#: contrib/admin/sites.py:249 contrib/admin/sites.py:255
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "მომხმარებლის სახელი არ უნდა შეიცავდეს სიმბოლოს '@'."
-
-#: contrib/admin/sites.py:252 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"ელ-ფოსტის მისამართი არ არის თქვენი მომხმარებლის სახელი. სცადეთ '%s' მის "
-"ნაცვლად."
-
-#: contrib/admin/sites.py:312
-msgid "Site administration"
-msgstr "საიტის ადმინისტრირება"
-
-#: contrib/admin/sites.py:325 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "შესვლა"
-
-#: contrib/admin/sites.py:372
-#, python-format
-msgid "%s administration"
-msgstr "%s ადმინისტრირება"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "ერთი ან რამდენიმე %(fieldname)s ობიექტში %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "ერთი ან რამდენიმე %(fieldname)s ობიექტში %(name)s:"
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "თარიღი;"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "დრო:"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "მიმდინარე:"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "შეცვლა:"
-
-#: contrib/admin/widgets.py:123
-msgid "Lookup"
-msgstr "ძიება"
-
-#: contrib/admin/widgets.py:230
-msgid "Add Another"
-msgstr "ახლის დამატება"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "გვერდი ვერ მოიძებნა"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "უკაცრავად, მოთხოვნილი გვერდი ვერ მოიძებნა."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "საწყისი გვერდი"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "სერვერის შეცდომა"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "სერვერის შეცდომა (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "სერვერის შეცდომა <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"სისტემაში მოხდა შეცდომა. იგი გადაგზავნილია საიტის ადმინისტრატორის ელექტრონულ "
-"ფოსტაზე და მალე გამოსწორდება. გმადლობთ მოთმინებისათვის."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "კეთილი იყოს თქვენი მობრძანება,"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "დოკუმენტაცია"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "პაროლის შეცვლა"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "გამოსვლა"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django-ს ადმინისტრირების საიტი"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django-ს ადმინისტრირება"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "დამატება"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "ისტორია"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "წარმოდგენა საიტზე"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "გთხოვთ, გაასწორეთ ქვემოთ მოყვანილი შეცდომა."
-msgstr[1] "გთხოვთ, გაასწორეთ ქვემოთ მოყვანილი შეცდომები."
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "დავამატოთ %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "ფილტრი"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:246
-msgid "Delete"
-msgstr "წავშალოთ"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"ობიექტების წაშლა: %(object_name)s '%(escaped_object)s' გამოიწვევს "
-"დაკავშირებული ობიექტების წაშლას, მაგრამ თქვენ არა გაქვთ შემდეგი ტიპების "
-"ობიექტების წაშლის უფლება:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"ნამდვილად გსურთ, წაშალოთ %(object_name)s \"%(escaped_object)s\"? ყველა "
-"ქვემოთ მოყვანილი დაკავშირებული ობიექტი წაშლილი იქნება:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "კი, ნამდვილად"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s მიხედვით "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s აპლიკაციაში არსებული მოდელები."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "შეცვლა"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "თქვენ არა გაქვთ რედაქტირების უფლება."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "ბოლო მოქმედებები"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "ჩემი მოქმედებები"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "არ არის მისაწვდომი"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"თქვენი მონაცემთა ბაზის ინსტალაცია არაკორექტულია. დარწმუნდით, რომ მონაცემთა "
-"ბაზის შესაბამისი ცხრილები შექმნილია, და მონაცემთა ბაზის წაკითხვა შეუძლია "
-"შესაბამის მომხმარებელს."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "მომხმარებლის სახელი:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "პაროლი:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "თარიღი/დრო"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "მომხმარებელი"
-
-#: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
-msgid "Action"
-msgstr "მოქმედება"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "d.m.Y H:i"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"ამ ობიექტს ცვლილებების ისტორია არა აქვს. როგორც ჩანს, იგი არ იყო დამატებული "
-"ადმინისტრირების საიტის მეშვეობით."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "ვაჩვენოთ ყველა"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "ძებნა"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "ერთი შედეგი"
-msgstr[1] "%(counter)s შედეგი"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "სულ %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "შევინახოთ"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "შევინახოთ, როგორც ახალი"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "შევინახოთ და დავამატოთ ახალი"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "შევინახოთ და გავაგრძელოთ რედაქტირება"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"ჯერ შეიყვანეთ მომხმარებლის სახელი და პაროლი. ამის შემდეგ თქვენ გექნებათ "
-"მომხმარებლის სხვა ოპციების რედაქტირების შესაძლებლობა."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "მომხმარებელი"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:184
-msgid "Password"
-msgstr "პაროლი"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "პაროლი (განმეორებით)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "შეიყვანეთ იგივე პაროლი, დამოწმებისათვის."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "შეიყვანეთ ახალი პაროლი მომხმარებლისათვის <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "წავშალოთ?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "გმადლობთ, რომ დღეს ამ საიტთან მუშაობას დაუთმეთ დრო."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "ხელახლა შესვლა"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "პაროლის შეცვლა"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "პაროლი წარმატებით შეიცვალა"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "თქვენი პაროლი შეიცვალა."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"გთხოვთ, უსაფრთხოების დაცვის მიზნით, შეიყვანოთ თქვენი ძველი პაროლი, შემდეგ კი "
-"ახალი პაროლი ორჯერ, რათა დარწმუნდეთ, რომ იგი შეყვანილია სწორად."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "ძველი პაროლი:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "ახალი პაროლი:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "პაროლის დამოწმება:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "შევცვალოთ ჩემი პაროლი"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "პაროლის აღდგენა"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "პაროლის აღდგენა დასრულებულია"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-"თქვენი პაროლი დაყენებულია. ახლა შეგიძლიათ გადახვიდეთ შემდეგ გვერდზე და "
-"შეხვიდეთ სისტემაში."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "პაროლი შეცვლის დამოწმება"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "შეიყვანეთ ახალი პაროლი:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"გთხოვთ, შეიყვანეთ თქვენი ახალი პაროლი ორჯერ, რათა დავრწმუნდეთ, რომ იგი "
-"სწორად ჩაბეჭდეთ."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "პაროლის აღდგენა წარუმატებლად დასრულდა"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"პაროლის აღდგენის ბმული არასწორი იყო, შესაძლოა იმის გამო, რომ იგი უკვე ყოფილა "
-"გამოყენებული. გთხოვთ, კიდევ ერთხელ სცადოთ პაროლის აღდგენა."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "პაროლის აღდგენა წარმატებით დასრულდა"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"თქვენს მიერ მითითებულ საფოსტო ყუთზე გამოგიგზავნეთ ინსტრუქციები, თუ როგორ "
-"უნდა დააყენოთ თქვენი პაროლი. წერილი მალე უნდა მიიღოთ."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "თქვენ მიიღეთ ეს წერილი, რადგანაც მოითხოვეთ პაროლის აღდგენა"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "თქვენი მომხმარებლის ანგარიშისათვის %(site_name)s-საიტზე"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "გთხოვთ, გადახვიდეთ შემდეგ გვერდზე და აირჩიოთ ახალი პაროლი:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "თქვენი მომხმარებლის სახელი (თუ დაგავიწყდათ):"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "გმადლობთ, რომ იყენებთ ჩვენს საიტს!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s საიტის გუნდი"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"დაგავიწყდათ პაროლი? შეიყვანეთ თქვენი ელექტრონული ფოსტის მისამართი ამ ველში, "
-"ჩვენ გამოგიგზავნით ინსტრუქციებს, როგორ დააყენოთ ახალი."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "ელ. ფოსტა:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "აღვადგინოთ ჩემი პაროლი"
-
-#: contrib/admin/templatetags/admin_list.py:284
-msgid "All dates"
-msgstr "ყველა თარიღი"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "ავირჩიოთ %s"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "აირჩიეთ %s შესაცვლელად"
-
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
-msgid "site"
-msgstr "საიტი"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "შაბლონი"
-
-#: contrib/admindocs/views.py:57 contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "ტეგი:"
-
-#: contrib/admindocs/views.py:90 contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "ფილტრი:"
-
-#: contrib/admindocs/views.py:154 contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "წარმოდგენა:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "აპლიკაცია %r ვერ მოიძებნა"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "მოდელი %(model_name)r ვერ მოიძებნა აპლიკაციაში %(app_label)r"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "`%(app_label)s.%(data_type)s` დაკავშირებული ობიექტი"
-
-#: contrib/admindocs/views.py:205 contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241 contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "მოდელი:"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "`%(app_label)s.%(object_name)s` დაკავშირებული ობიექტები"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "ყველა %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "%s - რაოდენობა"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s ობიექტების ველები"
-
-#: contrib/admindocs/views.py:314 contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327 contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "მთელი"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "ლოგიკური (True ან False)"
-
-#: contrib/admindocs/views.py:316 contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "სტრიქონი (%(max_length)s სიმბოლომდე)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "მძიმით გამოყოფილი მთელი რიცხვები"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "თარიღი (დროის გარეშე)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "თარიღი (დროსთან ერთად)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "ათობითი რიცხვი"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "ელ. ფოსტის მისამართი"
-
-#: contrib/admindocs/views.py:322 contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "გზა ფაილისაკენ"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "რიცხვი მცოცავი წერტილით"
-
-#: contrib/admindocs/views.py:328 contrib/comments/models.py:58
-msgid "IP address"
-msgstr "IP-მისამართი"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "ლოგიკური (True, False ან None)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "მშობელ მოდელთან დამოკიდებულება"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "ტელეფონის ნომერი"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "ტექსტი"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "დრო"
-
-#: contrib/admindocs/views.py:339 contrib/comments/forms.py:21
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "აშშ შტატი (ორი ასომთავრული)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "XML ტექსტი"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s არ არის urlpattern-ის შესაბამისი ობიექტი"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "სანიშნები"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "დოკუმენტაციის სანიშნები"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">სანიშნების დასაყენებლად გადაათრიეთ ბმული თქვენი "
-"სანიშნების\n"
-"პანელზე, ან დააწკაპეთ ბმულზე მარჯვენა ღილაკით და დაამატეთ იგი სანიშნებში.\n"
-"ამის შემდეგ თქვენ შეძლებთ სანიშნის არჩევას საიტის ნებისმიერი გვერდიდან.\n"
-"გაითვალისწინეთ, რომ ზოგიერთი სანიშნის მოხმარებისათვის საჭიროა, რომ თქვენ\n"
-"იყოთ შესული ამ საიტზე ე.წ. \"შიდა\" კომპიუტერიდან (შეუთანხმდით თქვენს\n"
-"ადმინისტრატორს, თუ არ ხართ დარწმუნებული, რომ თქვენი კომპიუტერი არის\n"
-"\"შიდა\" კომპიუტერი).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "ამ გვერდის დოკუმენტაცია"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"გადასვლა ნებისმიერი გვერდიდან იმ წარმოდგენის დოკუმენტაციაზე, რომელიც ამ "
-"გვერდს აგენერირებს."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "ობიექტის ID-ის ჩვენება"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "ერთი ობიექტის ამსახველი გვერდის content-type-ის და უნიკალური ID-ის ჩვენება."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "შევცვალოთ ეს ობიექტი (იმავე ფანჯარაში)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "ერთი ობიექტის ამსახველი გვერდების ადმინისტრირებაზე გადასვლა."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "შევცვალოთ ეს ობიექტი (ახალ ფანჯარაში)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "იგივე, ოღონდ ხსნის ადმინისტრირების გვერდს ახალ ფანჯარაში."
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "პირადი ინფორმაცია"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "უფლებები"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "მნიშვნელოვანი თარიღები"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "ჯგუფები"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "მომხმარებლის დამატება"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "პაროლი წარმატებით შეიცვალა."
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "შევცვალოთ პაროლი: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"აუცილებელია. 30 ან ნაკლები სიმბოლო. მხოლოდ ლათინური ასოები, ციფრები და "
-"ხაზგასმა."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr ""
-"ეს მნიშვნელობა შეიძლება შეიცავდეს მხოლოდ ასოებს, ციფრებს და ხაზგასმის "
-"ნიშნებს."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "პაროლის დამოწმება"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "მომხმარებელი ამ სახელით უკვე არსებობს."
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "პაროლის ორი ველი ერთმანეთს არ ემთხვევა."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "თქვენი ანგარიში არააქტიურია."
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "თქვენი ბროუზერი არ ღებულობს cookie-ებს. Cookie საჭიროა საიტზე შესასვლელად."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "ელ. ფოსტა"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"ელ.ფოსტის ეს მისამართი არ შეესაბამება არცერთ მომხმარებელს. ნამდვილად ხართ "
-"დარეგისტრირებული?"
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "პაროლი შეცვლილია: %s"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "ახალი პაროლი"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "ახალი პაროლის დამოწმება"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "ძველი პაროლი"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "თქვენი ძველი პაროლი შეყვანილია არასწორად. გთხოვთ, შეიყვანოთ ხელახლა."
-
-#: contrib/auth/models.py:72 contrib/auth/models.py:95
-msgid "name"
-msgstr "სახელი"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "კოდური სახელი"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "უფლება"
-
-#: contrib/auth/models.py:78 contrib/auth/models.py:96
-msgid "permissions"
-msgstr "უფლებები"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "ჯგუფი"
-
-#: contrib/auth/models.py:100 contrib/auth/models.py:146
-msgid "groups"
-msgstr "ჯგუფები"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "მომხმარებლის სახელი"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "სახელი"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "გვარი"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "ელ. ფოსტა"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "პაროლი"
-
-#: contrib/auth/models.py:140
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"გამოიყენეთ '[algo]$[salt]$[hexdigest]' ან <a href=\"password/\">პაროლის "
-"შეცვლის ფორმა</a>."
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "თანამშრომლობის სტატუსი"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr "განსაზღვრავს, აქვს თუ არა მომხმარებელს ადმინისტრირების საიტზე შესვლის უფლება."
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "აქტიურია"
-
-#: contrib/auth/models.py:142
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"განსაზღვრავს, რომ მომხმარებელი გააქტიურებულია. მომხმარებლის წაშლის მაგივრად "
-"გადანიშნეთ ეს დროშა."
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr "სუპერმომხმარებლის სტატუსი"
-
-#: contrib/auth/models.py:143
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "განსაზღვრავს, რომ ამ მომხმარებელს აქვს ყველა უფლება."
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "ბოლო შესვლა"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "გაწევრიანების თარიღი"
-
-#: contrib/auth/models.py:147
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"ინდივიდუალურად მითითებული უფლებების გარდა, ეს მომხმარებელი მიიღებს აგრეთვე "
-"ყველა იმ ჯგუფის უფლებას, რომელშიც იგი გაწევრიანებულია."
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "მომხმარებლის უფლებები"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "მომხმარებელი"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "მომხმარებლები"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "შეტყობინება"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "გამოსული ხართ"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "შეიყვანეთ სწორი ელ. ფოსტის მისამართი."
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "კონტენტი"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "მეტა-მონაცემები"
-
-#: contrib/comments/forms.py:19
-#: contrib/comments/templates/comments/moderation_queue.html:34
-msgid "Name"
-msgstr "სახელი"
-
-#: contrib/comments/forms.py:20
-msgid "Email address"
-msgstr "ელ. ფოსტის მისამართი"
-
-#: contrib/comments/forms.py:22
-#: contrib/comments/templates/comments/moderation_queue.html:35
-msgid "Comment"
-msgstr "კომენტარი"
-
-#: contrib/comments/forms.py:25
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "თუ თვენ შეიყვანთ რამეს ამ ველში, თქვენი კომენტარი სპამად აღიქმება"
-
-#: contrib/comments/forms.py:125
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "ყურადღება მიაქციეთ ლექსიკას! სიტყვა %s აქ დაუშვებელია."
-msgstr[1] "ყურადღება მიაქციეთ ლექსიკას! სიტყვები %s აქ დაუშვებელია."
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "ობიექტის ID"
-
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "მომხმარებლის სახელი"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "მომხმარებლის ელ. ფოსტა"
-
-#: contrib/comments/models.py:52
-msgid "user's URL"
-msgstr "მომხმარებლის URL"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "კომენტარი"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "გაგზავნის თარიღი და დრო"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "საყოველთაოა"
-
-#: contrib/comments/models.py:60
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "გადანიშნეთ ეს დროშა, რათა კომენტარი რეალურად გაქრეს საიტიდან."
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "წაშლილია"
-
-#: contrib/comments/models.py:63
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"მონიშნეთ ეს დროშა, თუ კომენტარი შეუსაბამოა. მის ნაცვლად გაჩნდება "
-"შეტყობინება: \"კომენტარი წაშლილია\"."
-
-#: contrib/comments/models.py:115
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"ეს კომენტარი გამოგზავნილია აუდენტიფიცირებული მომხმარებლის მიერ, და ამიტომ "
-"სახელის შეცვლა შეუძლებელია."
-
-#: contrib/comments/models.py:124
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"ეს კომენტარი გამოგზავნილია აუდენტიფიცირებული მომხმარებლის მიერ, და ამიტომ "
-"ელ. ფოსტის შეცვლა შეუძლებელია."
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"გამოგზავნილია %(user)s-ს მიერ, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "კომენტარის დადასტურება"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "ნამდვილად გსურთ ამ კომენტარის გამოქვეყნება?"
-
-#: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
-msgid "Approve"
-msgstr "დასტური"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "გმადლობთ, კომენტარის დადასტურებისათვის"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid "Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "გმადლობთ, რომ დრო დახარჯეთ ჩვენს საიტზე დისკუსიის ხარისხის გასაუმჯობესებლად"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "წავშალოთ კომენტარები"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "ნამდვილად გსურთ ამ კომენტარის წაშლა?"
-
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "წაშლა"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "გმადლობთ, წაშლისათვის"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "კომენტარის მარკირება"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "ნამდვილად გსურთ ამ კომენტარის მარკირება?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "დროშა"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "გმადლობთ, მარკირებისათვის"
-
-#: contrib/comments/templates/comments/form.html:16
-#: contrib/comments/templates/comments/preview.html:31
-msgid "Post"
-msgstr "გაგზავნა"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Preview"
-msgstr "წინასწარი ნახვა"
-
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "კომენტარის მოდერაციის მიმდევრობა"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "მოდერაციისათვის კომენტარები არ არის"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "ელ. ფოსტა"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "დამოწმებულია?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP-მისამართი"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "გაგზავნის თარიღი"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "კი"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "არა"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "გმადლობთ კომენტარისთვის"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "გმადლობთ თქვენი კომენტარისათვის"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:12
-msgid "Preview your comment"
-msgstr "კომენტარის წინასწარი ნახვა"
-
-#: contrib/comments/templates/comments/preview.html:10
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "გთხოვთ, გაასწორეთ ქვემოთ მოყვანილი შეცდომა"
-msgstr[1] "გთხოვთ, გაასწორეთ ქვემოთ მოყვანილი შეცდომები"
-
-#: contrib/comments/templates/comments/preview.html:15
-msgid "Post your comment"
-msgstr "კომენტარის გაგზავნა"
-
-#: contrib/comments/templates/comments/preview.html:15
-msgid "or make changes"
-msgstr "ან შეიტანეთ ცვლილებები"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "python-ის მოდელის კლასის სახელი"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "კონტენტის ტიპი"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "კონტენტის ტიპები"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"მაგალითი: '/about/contact/'. ყურადღება მიაქციეთ დახრილ ხაზებს თავში და "
-"ბოლოში."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"ეს მნიშვნელობა შეიძლება შეიცავდეს მხოლოდ ასოებს, ციფრებს, ხაზგასმის ნიშნებს, "
-"ტირეებს და დახრილ ხაზებს."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "დამატებითი პარამეტრები"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "სათაური"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "კონტენტი"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "ჩავრთოთ კომენტარები"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "შაბლონის სახელი"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"მაგალითი: 'flatpages/contact_page.html'. თუ იგი მითითებული არ არის, "
-"გამოყენებული იქნება 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "რეგისტრაცია აუცილებელია"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"თუ ეს დროშა ჩართულია, მხოლო შემოსულ მომხმარებლებს ექნებათ გვერდის "
-"დათვალიერების საშუალება."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "უბრალო გვერდი"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "უბრალო გვერდები"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"ბოდიშს გიხდით, მაგრამ თქვენს ფორმას ვადა გაუვიდა. გთხოვთ, გააგრძელოთ ფორმის "
-"შევსება ამ გვერდზე."
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "გეომეტრიის მნიშვნელობა მოცემული არ არის."
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "გეომეტრიის მნიშვნელობა არასწორია."
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "გეომეტრიის ტიპი არასწორია."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "-ე"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "-ლი"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "-ე"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "-ე"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f მილიონი"
-msgstr[1] "%(value).1f მილიონი"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f მილიარდი"
-msgstr[1] "%(value).1f მილიარდი"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f ტრილიონი"
-msgstr[1] "%(value).1f ტრილიონი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "ერთი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "ორი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "სამი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "ოთხი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "ხუთი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "ექვსი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "შვიდი"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "რვა"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "ცხრა"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "დღეს"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "ხვალ"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "გუშინ"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "შეიყვანეთ საფოსტო კოდი ერთ-ერთ ფორმატში: NNNN ან ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "ამ ველში შეიძლება იყოს მხოლოდ ციფრები."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "ამ ველში შეიძლება იყოს 7 ან 8 თანრიგი."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "შეიყვანეთ დასაშვები CUIT ერთ-ერთ ფორმატში: XX-XXXXXXXX-X ან XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "არასწორი CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "ბურგლენდი"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "კარინტია"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "ქვემო ავსტრია"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "ზემო ავსტრია"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "ზალცბურგი"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "სტირია"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "ტიროლი"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "ფორარლბერგი"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "ვენა"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "შეიყვანეთ zip-კოდი ფორმატში XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "შეიყვანეთ კანადაში დასაშვები პირადი ნომერი ფორმატში: XXX-XXX-XXX"
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "შეიყვანეთ ოთხთანრიგიანი საფოსტო კოდი"
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "შეიყვანეთ zip-კოდი ფორმატში: XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "ტელეფონის ნომრები უნდა იყოს XX-XXXX-XXXX ფორმატში."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "შეიყვანეთ დასაშვები ბრაზილიური შტატი. მოცემული შტატი არ არის დასაშვები."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "არასწორი CPF ნომერი."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "ეს ველი უნდა შეიცავდეს 11 ციფრს ან 14 სიმბოლოს, ან ნაკლებს."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "არასწორი CNPJ ნომერი."
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "ეს ველი მოითხოვს არაუმეტეს 14 თანრიგისა"
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "შეიყვანეთ საფოსტო კოდი ფორმატში: XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "შეიყვანეთ კანადაში დასაშვები სოციალური დაზღვევის ნომერი ფორმატში: XXX-XXX-XXX"
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "აარგაუ"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "აპენცელ ინერჰოდენ"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "აპენცელ აუსერჰოდენ"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "ბაზელ-შტადტი"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "ბაზელ-ლანდი"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "ბერნი"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "ფრაიბურგი"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "ჟენევა"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "გლარუსი"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "გრაუბუენდენ"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "ჯურა"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "ლეცერნი"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "ნოიხატლი"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "ნიდვალდენი"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "ობვალდენი"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "შაფჰაუზენი"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "შვიცი"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "სოლოთურნი"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "სენტ-გალენი"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "თურგაუ"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "ტიჯინო"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "ური"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "ვალაისი"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "ვაუდი"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "ცუგი"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "ციურიხი"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"შეიყვანეთ შვეიცარიაში დაშვებული პირადი ან პასპორტის ნომერი, ფორმატებში: "
-"X1234567<0 ან 1234567890."
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "შეიყვანეთ დასაშვები ჩილიური RUT."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "შეიყვანეთ დასაშვები ჩილიური RUT. ფორმატი: XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "ჩილიური RUT არასწორია."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "ბადენ-ვურტემბერგი"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "ბავარია"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "ბერლინი"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "ბრანდენბურგი"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "ბრემენი"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "ჰამბურგი"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "ჰესენი"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "მეკლენბურგ-ვესტერნ პომერანია"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "ქვემო საქსონია"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "ჩრდილოეთ რაინ-ვესტფალია"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "რაინლანდ-პალატინატა"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "ზაარლანდი"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "საქსონია"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "საქსონია-ანჰალტ"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "შლეზვიგ-ჰოლშტაინი"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "თურინგია"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "შეიყვანეთ zip-კოდი ფორმატში XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"შეიყვანეთ გერმანიაში დასაშვები პირადობის მოწმობის ნომერი, ფორმატში: "
-"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "არავა"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "ალბასეტე"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "ალასანტი"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "ალმერია"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "ავილა"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "ბადაჰოსი"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "ილეს ბალეარს"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "ბარსელონა"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "ბურგოსი"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "კასერესი"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "კადიზი"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "კასტელო"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "სიუდად რეალი"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "კორდობა"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "ა კორუნია"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "კუენსა"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "გირონა"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "გრანადა"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "გუადალაჯარა"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "გუიპუზკოა"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "ჰუელვა"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "ჰუესკა"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "ჯეინი"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "ლეონი"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "ლეიდა"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "ლა რიოხა"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "ლუგო"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "მადრიდი"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "მალაგა"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "მურსია"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "ნავარე"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "ოურენსი"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "ასტურია"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "პალენსია"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "ლას პალმას"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "პონტევედრა"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "სალამანსა"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "სანტა კრუზ დე ტენერიფე"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "კანტაბრია"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "სეგოვია"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "სევილი"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "სორია"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "ტარაგონა"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "ტერუელი"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "ტოლედო"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "ვალენსია"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "ვალადოლიდი"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "ბიზკაია"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "სამორა"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "სარაგოსა"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "კეუტა"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "მელილა"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "ანდალუზია"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "არაგონ"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "ასტურიის პრინციპატი"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "ბალეარის კუნძულები"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "ბასკების ქვეყანა"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "კანარის კუნძuლები"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "კასტილია ლა მანჩა"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "კასტილია და ლეონი"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "კატალონია"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "ექსტრემადურა"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "გალიცია"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "მურსიის რეგიონი"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "ნავარის ფორალური თემი"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "ვალენსიის თემი"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "შეიყვანეთ სწორი საფოსტო კოდი შემდეგ ინტერვალში და ფორმატში: 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"შეიყვანეთ სწორი სატელეფონო ნომერი ერთ-ერთ ფორმატში: 6XXXXXXXX, 8XXXXXXXX ან "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "გთხოვთ, შეიყვანოთ სწორი NIF, NIE, ან CIF."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "გთხოვთ, შეიყვანოთ სწორი NIF ან NIE."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "NIF-ის საკონტროლო ჯამი არასწორია."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "NIE-ს საკონტროლო ჯამი არასწორია."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "CIF-ის საკონტროლო ჯამი არასწორია."
-
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"გთხოვთ, შეიყვანოთ სწორი საბანკო ანგარიშის ნომერი ფორმატში: XXXX-XXXX-XX-"
-"XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "არასწორი საკონტროლო ჯამი საბანკო ანგარიშის ნომრისათვის."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "შეიყვანეთ სწორი ფინური პირადი ნომერი."
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "შეიყვანეთ zip-კოდი ფორმატში: XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "შეიყვანეთ სწორი ისლანდიური საიდენტიფიკაციო ნომერი. ფორმატია XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "ისლანდიური საიდენტიფიკაციო ნომერი არასწორია."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "შეიყვანეთ სწორი zip-კოდი."
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "შეიყვანეთ სწორი პირადი ნომერი."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "შეიყვანეთ სწორი დღგ-ს ნომერი."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "შეიყვანეთ საფოსტო კოდი ფორმატში XXXXXXX ან XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "ჰოკაიდო"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "აომორი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "იუატე"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "მიიაგი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "აკიტა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "იამაგატა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "ფუკუსიმა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "იბარაკი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "ტოჩიგი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "გუნმა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "საიტამა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "ჩიბა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "ტოკიო"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "კანაგავა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "იამანაში"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "ნაგანო"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "ნიიგატა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "ტოიამა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "იშიკავა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "ფუკუი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "გიფუ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "შიზუოკა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "აიჩი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "მიე"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "შიგა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "კიოტო"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "ოსაკა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "ჰიოგო"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "ნარა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "უაკაიამა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "ტოტორი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "შიმანე"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "ოკაიამა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "ჰიროსიმა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "იამაგუჩი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "ტოკუშიმა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "კაგავა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "ეჰიმე"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "კოჩი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "ფუკუოკა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "საგა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "ნაგასაკი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "კუმამოტო"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "ოიტა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "მიაზაკი"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "კაგოსიმა"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "ოკინავა"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "აგუასკალიენტესი"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "ქვემო კალიფორნია"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "ქვემო სამხრეთ კალიფორნია"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "კამპეჩე"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "ჩიჰუაჰუა"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "ჩიაპასი"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "კოაჰუილა"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "კოლიმა"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "ფედერალური ოლქი"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "დურანგო"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "გერერო"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "გუანაჰუატო"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "იდალგო"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "ჰალისკო"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "მეხიკოს შტატი"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "მიჩოაკანი"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "მორელოსი"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "ნაიარიტი"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "ნუევო-ლეონი"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "ოახაკა"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "პუებლა"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "კერეტარო"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "კინტანა-როო"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "სინალოა"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "სან-ლუის-პოტოსი"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "sონორა"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "ტაბასკო"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "ტამაულიპასი"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "ტლასკალა"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "ვერაკრუსი"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "იუკატანი"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "საკატეკასი"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "შეიყვანეთ სწორი საფოსტო კოდი"
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "შეიყვანეთ სწორი ტელეფონის ნომერი"
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "შეიყვანეთ სწორი SoFi ნომერი"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "დრენტე"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "ფლევოლანდი"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "ფრისლანდია"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "გელდერლანდი"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "გრონიგენი"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "ლიმბურგი"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "ჩრდილოეთ ბრაბანტი"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "ჩრდილოეთ ჰოლანდია"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "ოვერეისელი"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "უტრეხტი"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "ზელანდია"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "სამხრეთ ჰოლანდია"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "შეიყვანეთ სწორი ნორვეგიული პირადი ნომერი."
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "ეს ველი შედგება 8 თანრიგისაგან."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "ეს ველი სედგება 11 თანრიგისაგან."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "ეროვნული საიდენტიფიკაციო ნომერი შედგება 11 თანრიგისაგან."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "არასწორი საკონტროლო ჯამი ეროვნულ საიდენტიფიკაციო ნომერში."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"შეიყვანეთ საგადასახადოს ნომერი (NIP) ფორმატში: XXX-XXX-XX-XX or XX-XX-XXX-"
-"XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "არასწორი საკონტროლო ჯამი საგადასახადო ნომრისათვის (NIP)."
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr "საწარმოოს ეროვნული სარეგისტრაციო ნომერი (REGON) შედგება 7 ან 9 თანრიგისაგან."
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "არასწორი საკონტროლო ჯამი საწარმოოს ეროვნულ სარეგისტრაციო ნომერში (REGON)."
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "შეიყვანეთ საფოსტო კოდი ფორმატში XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "ქვემო სილეზია"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "კუიავია-პომერანია"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "ლუბლინი"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "ლუბუში"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "ლოძი"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "მცირე პოლონეთი"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "მაზოვია"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "ოპოლე"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "სუბკარპატია"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "პოდლასიე"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "პომერანია"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "სილეზია"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "სვენტოკშისკე"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "ვარმია-მაზურია"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "დიდი პოლონეთი"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "დასავლეთ პომერანია"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "შეიყვანეთ სწორი URL."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "შეიყვანეთ სწორი URL."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "შეიყვანეთ დასაშვები CUIT ერთ-ერთ ფორმატში: XX-XXXXXXXX-X ან XXXXXXXXXXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "ტელეფონის ნომრები უნდა იყოს XX-XXXX-XXXX ფორმატში."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "შეიყვანეთ საფოსტო კოდი ფორმატში: XXX XXX."
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "შეიყვანეთ საფოსტო კოდი ფორმატში XXXXX or XXX XX."
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "ბანსკა ბისტრიცა"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "ბანსკა შტიავნიცა"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "ბარდეიოვი"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "ბანოვცე-ნად-ბებრავოუ"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "ბრეზნო"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "ბრატისლავა I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "ბრატისლავა II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "ბრატისლავა III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "ბრატისლავა IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "ბრატისლავა V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "ბიტჩა"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "ჩადცა"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "დეტვა"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "დოლნი კუბინი"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "დუნაისკა სტრედა"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "გალანტა"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "გელნიცა"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "ჰლოჰოვეცი"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "ჰუმენე"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "ილავა"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "კეზმაროკი"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "კომარნო"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "კოშიცე I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "კოშიცე II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "კოშიცე III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "კოშიცე IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "კოშიცე - ოკოლიე"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "კრუპინა"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "კისუცკე ნოვე მესტო"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "ლევიცე"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "ლევოჩა"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "ლიპტოვსკი მიკულაში"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "ლუჩენეცი"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "მალაცკი"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "მარტინი"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "მეძილაბორცე"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "მიხალოვცე"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "მიავა"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "ნამესტოვო"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "ნიტრა"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "ნოვე-მესტო-ნად-ვაჰომ"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "ნოვე ზამკი"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "პარტიზანსკე"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "პეზინოკი"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "პიესტანი"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "პოლტარი"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "პოპრადი"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "პოვაჟსკა ბისტრიცა"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "პრესოვი"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "პრიევიძა"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "პუხოვი"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "რევუცა"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "რიმავსკა სობოტა"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "როზნავა"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "რუზომბეროკი"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "საბინოვი"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "სენეცი"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "სენიცა"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "სკალიცა"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "სნინა"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "სობრანცე"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "სპისკა-ნოვა-ვესი"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "სტარა-ლუბოვნა"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "სტროპკოვი"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "სვიდნიკი"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "სალა"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "ტოპოლჩანი"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "ტრებისოვი"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "ტრენჩინი"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "ტრნავა"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "ტურჩანსკე ტეპლიცე"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "ტვრდოშინი"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "ველკი კრტიში"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "ვრანოვ-ნად-ტოპლოუ"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "ზლატე მორავცე"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "ზვოლენი"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "ზარნოვიცა"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "ზიარ-ნად-ჰრონომი"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "ზილინა"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "ბანსკა-ბისტრიცის რაიონი"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "ბრატისლავას რაიონი"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "კოშიცეს რაიონი"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "ნიტრას რაიონი"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "პრესოვის რაიონი"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "ტრენჩინის რაიონი"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "ტრნავას რაიონი"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "ზილინას რაიონი"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "შეიყვანეთ სწორი საფოსტო კოდი."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "ბედფორდშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "ბუკინჰემშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "ჩეშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "კორნუოლი და სილის კუნძულები"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "კამბრია"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "დერბიშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "დევონი"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "დორსეტი"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "დარემი"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "აღმოსავლეთ სასექსი"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "ესექსი"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "გლოსტეშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "დიდი ლონდონი"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "დიდი მანჩესტერი"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "ჰემპშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "ჰარტფორდშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "კენტი"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "ლანკაშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "ლაიჩესტეშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "ლინკოლნშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "მერსისაიდი"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "ნორფოლკი"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "ჩრდილოეთ იოკშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "ნორტჰემპტონშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "ნორტუმბერლანდი"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "ნოტინგემშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "ოქსფორდშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "შროპშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "სომერსეტი"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "სამხრეთ იოკშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "სტაფორდშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "საფოლკი"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "სურეი"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "თაინ და უირი"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "უარვიკშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "დასავლეთ მიდლენდსი"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "დასავლეთ სასექსი"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "დასავლეთ იოკშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "უილტშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "უორსესტერშირი"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "ანტრიმის ქვეყანა"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "არმაგის ქვეყანა"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "დაუნის ქვეყანა"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "ფერმანაგის ქვეყანა"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "ლონდონდერის ქვეყანა"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "ტაირონის ქვეყანა"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "კლოუიდი"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "დაიფიდი"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "გვენტი"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "გუაინიდი"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "შუა გლემორგენი"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "პოუისი"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "სამხრეთ გლემორგენი"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "დასავლეთ გლემორგენი"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "საზღვრები"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "ცენტრალური შოტლანდია"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "დამფრაის და გელოუეი"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "ფაიფი"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "გრემპაინი"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "ჰაილენდი"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "ლოთიენი"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "ორკნის კუნძულები"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "შიტლენდის კუნძულები"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "სტრესკლაიდი"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "თეისაიდი"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "დასავლეთ კუნძულები"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "ინგლისი"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "ჩრდილოეთ ირლანდია"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "შოტლანდია"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "უელსი"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "შეიყვანეთ zip-კოდი ფორმატში XXXXX ან XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "შეიყვანეთ სწორი აშშ-ს პირადი ნომერი ფორმატში XXX-XX-XXXX."
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "შეიყვანეთ სწორი სამხრეთ-აფრიკული ID ნომერი"
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "შეიყვანეთ სწორი სამხრეთ-აფრიკული საფოსტო კოდი"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "აღმოსავლეთ კაპი"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "თავისუფალი სახელმწიფო"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "გაუტენგი"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "კვაზულუ-ნატალი"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "ლიმპოპო"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "მპუმალანგა"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "ჩრდილოეთ კაპი"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "ჩრდილო-დასავლეთი"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "დასავლეთ კაპი"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "გადამისამართება გვერდიდან"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "უნდა იყოს აბსოლუტური გზა დომენის სახელის გარეშე. მაგალითი: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "გადამისამართება გვერდზე"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"უნდა იყოს აბსოლუტური გზა (როგორც ზემოთ) ან სრული URL, რომელიც იწყება "
-"'http://' სტრიქონით."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "გადამისამართება"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "გადამისამართებები"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "სესიის გასაღები"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "სესიის მონაცემები"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "ამოწურვის თარიღი"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "სესია"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "სესიები"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "დომენის სახელი"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "საჩვენებელი სახელი"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "საიტები"
-
-#: db/models/fields/__init__.py:358 db/models/fields/__init__.py:693
-msgid "This value must be an integer."
-msgstr "ეს მნიშვნელობა უნდა იყოს მთელი."
-
-#: db/models/fields/__init__.py:389
-msgid "This value must be either True or False."
-msgstr "ეს მნიშვნელობა უნდა იყოს True ან False."
-
-#: db/models/fields/__init__.py:422
-msgid "This field cannot be null."
-msgstr "ეს მნიშვნელობა არ შეიძლება იყოს null."
-
-#: db/models/fields/__init__.py:438
-msgid "Enter only digits separated by commas."
-msgstr "შეიყვანეთ მხოლოდ მძიმეებით გამოყოფილი ციფრები."
-
-#: db/models/fields/__init__.py:469
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "შეიყვანეთ სწორი თარიღი YYYY-MM-DD ფორმატში."
-
-#: db/models/fields/__init__.py:478
-#, python-format
-msgid "Invalid date: %s"
-msgstr "არასწორი თარიღი: %s"
-
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:560
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "შეიყვანეთ სწორი თარიღი და დრო YYYY-MM-DD HH:MM ფორმატში."
-
-#: db/models/fields/__init__.py:596
-msgid "This value must be a decimal number."
-msgstr "ეს მნიშვნელობა უნდა იყოს ათობითი რიცხვი."
-
-#: db/models/fields/__init__.py:729
-msgid "This value must be either None, True or False."
-msgstr "ეს მნიშვნელობა უნდა იყოს None, True ან False."
-
-#: db/models/fields/__init__.py:827 db/models/fields/__init__.py:841
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "შეიყვანეთ სწორი დრო HH:MM ფორმატში."
-
-#: db/models/fields/related.py:761
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"დააჭირეთ \"Control\", ან \"Command\" Mac-ზე, ერთზე მეტი მნიშვნელობის "
-"ასარჩევად."
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "გთხოვთ, შეიყვანოთ სწორი %(self)s ID-ები. მნიშვნელობა %(value)r არასწორია."
-msgstr[1] "გთხოვთ, შეიყვანოთ სწორი %(self)s ID-ები. მნიშვნელობები %(value)r არასწორია."
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "ეს ველი აუცილებელია."
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "შეიყვანეთ სწორი მნიშვნელობა."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"დარწმუნდით, რომ მნიშვნელობა შედგება არაუმეტეს %(max)d სიმბოლოსაგან (ახლა "
-"მისი სიგრძეა %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"დარწმუნდით, რომ მნიშვნელობა შედგება არანაკლებ %(min)d სიმბოლოსაგან (ახლა "
-"მისი სიგრძეა %(length)d)."
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "შეიყვანეთ მთელი რიცხვი"
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "დარწმუნდით, რომ მნიშვნელობა ნაკლებია ან ტოლია %s-ზე."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "დარწმუნდით, რომ მნიშვნელობა მეტია ან ტოლია %s-ზე."
-
-#: forms/fields.py:195 forms/fields.py:224
-msgid "Enter a number."
-msgstr "შეიყვანეთ რიცხვი."
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "დარწმუნდით, რომ მნიშვნელობა %s თანრიგს არ აღემატება."
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "დარწმუნდით, რომ წილადი ნაწილი %s თანრიგს არ აღემატება."
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "დარწმუნდით, რომ მთელი ნაწილი %s თანრიგს არ აღემატება."
-
-#: forms/fields.py:287 forms/fields.py:848
-msgid "Enter a valid date."
-msgstr "შეიყვანეთ სწორი თარიღი."
-
-#: forms/fields.py:321 forms/fields.py:849
-msgid "Enter a valid time."
-msgstr "შეიყვანეთ სწორი დრო."
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "შეიყვანეთ სწორი თარიღი და დრო."
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "ფაილი არ იყო გამოგზავნილი. შეამოწმეთ კოდირების ტიპი მოცემული ფორმისათვის."
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "ფაილი არ იყო გამოგზავნილი."
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "გამოგზავნილი ფაილი ცარიელია."
-
-#: forms/fields.py:477
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"ატვირთეთ დასაშვები გამოსახულება. თქვენს მიერ გამოგზავნილი ფაილი ან არ არის "
-"გამოსახულება, ან დაზიანებულია."
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "შეიყვანეთ სწორი URL."
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "როგორც ჩანს, URL არის გაწყვეტილი ბმული."
-
-#: forms/fields.py:618 forms/fields.py:696
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "აირჩიეთ დასაშვები მნიშვნელობა. %(value)s დასაშვები არ არის."
-
-#: forms/fields.py:697 forms/fields.py:758 forms/models.py:661
-msgid "Enter a list of values."
-msgstr "შეიყვანეთ მნიშვნელობების სია."
-
-#: forms/fields.py:877
-msgid "Enter a valid IPv4 address."
-msgstr "შეიყვანეთ სწორი IPv4 მისამართი."
-
-#: forms/fields.py:887
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"შეიყვანეთ სწორი 'slug'-მნიშვნელობა, რომელიც შეიცავს მხოლოდ ასოებს, ციფრებს, "
-"ხაზგასმის ნიშნებს და დეფისებს."
-
-#: forms/formsets.py:242 forms/formsets.py:244
-msgid "Order"
-msgstr "დალაგება"
-
-#: forms/models.py:268 forms/models.py:277
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s მოცემული %(field_label)s-ით უკვე არსებობს."
-
-#: forms/models.py:591
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "აირჩიეთ დასაშვები მნიშვნელობა. ეს არჩევანი დასაშვები არ არის."
-
-#: forms/models.py:662
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "აირჩიეთ დასაშვები მნიშვნელობა. %s დასაშვები არ არის."
-
-#: template/defaultfilters.py:714
-msgid "yes,no,maybe"
-msgstr "კი,არა,შესაძლოა"
-
-#: template/defaultfilters.py:745
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d ბაიტი"
-msgstr[1] "%(size)d ბაიტი"
-
-#: template/defaultfilters.py:747
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f კბაიტი"
-
-#: template/defaultfilters.py:749
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f მბაიტი"
-
-#: template/defaultfilters.py:750
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f გბაიტი"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "შუაღამე"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "შუადღე"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "ორშაბათი"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "სამშაბათი"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "ოთხშაბათი"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "ხუთშაბათი"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "პარასკევი"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "შაბათი"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "კვირა"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "ორშ"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "სამ"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "ოთხ"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "ხუთ"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "პარ"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "შაბ"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "კვრ"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "იანვარი"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "თებერვალი"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "მარტი"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "აპრილი"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "მაისი"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "ივნისი"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "ივლისი"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "აგვისტო"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "სექტემბერი"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "ოქტომბერი"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "ნოემბერი"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "დეკემბერი"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "იან"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "თებ"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "მარ"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "აპრ"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "მაი"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "ივნ"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "ივლ"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "აგვ"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "სექ"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "ოქტ"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "ნოე"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "დეკ"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "იან."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "თებ."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "აგვ."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "სექტ."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "ოქტ."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "ნოემ."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "დეკ."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "ან"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "წელი"
-msgstr[1] "წელი"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "თვე"
-msgstr[1] "თვე"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "კვირა"
-msgstr[1] "კვირა"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "დღე"
-msgstr[1] "დღე"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "საათი"
-msgstr[1] "საათი"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "წუთი"
-msgstr[1] "წუთი"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "წუთი"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "d.m.Y"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "d.m.Y"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "d.m.Y"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s წარმატებით შეიქმნა."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s წარმატებით შეიცვალა."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s წაიშალა."
-
diff --git a/parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index bb70794..0000000
--- a/parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.po
deleted file mode 100644
index e23b600..0000000
--- a/parts/django/django/conf/locale/ka/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,117 +0,0 @@
-# Translation of Django Java-script part to Georgian.
-# Copyright (C) 2008
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-02-16 22:31+0400\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: David Avsajanishvili <avsd05@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "მისაწვდომი %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "ავირჩიოთ ყველა"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "დავამატოთ"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "წავშალოთ"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "არჩეული %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "აირჩიეთ და დააწკაპეთ "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "გავასუფთავოთ ყველა"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "იანვარი თებერვალი მარტი აპრილი მაისი ივნისი ივლისი აგვისტო სექტემბერი "
-"ოქტომბერი ნოემბერი დეკემბერი"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "კ ო ს ო ხ პ შ"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "კვირა ორშაბათი სამშაბათი ოთხშაბათი ხუთშაბათი პარასკევი შაბათი"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "ვაჩვენოთ"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "დავმალოთ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "ახლა"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "საათი"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "ავირჩიოთ დრო"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "შუაღამე"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "დილის 6 სთ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "შუადღე"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "უარი"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "დღეს"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "კალენდარი"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "გუშინ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "ხვალ"
diff --git a/parts/django/django/conf/locale/ka/__init__.py b/parts/django/django/conf/locale/ka/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ka/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ka/formats.py b/parts/django/django/conf/locale/ka/formats.py
deleted file mode 100644
index 01167a7..0000000
--- a/parts/django/django/conf/locale/ka/formats.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'l, j F, Y'
-TIME_FORMAT = 'h:i:s a'
-DATETIME_FORMAT = 'j F, Y h:i:s a'
-YEAR_MONTH_FORMAT = 'F, Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j.M.Y'
-SHORT_DATETIME_FORMAT = 'j.M.Y H:i:s'
-FIRST_DAY_OF_WEEK = 1 # (Monday)
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
- # '%d %b %Y', '%d %b, %Y', '%d %b. %Y', # '25 Oct 2006', '25 Oct, 2006', '25 Oct. 2006'
- # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
- # '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%d.%m.%Y', # '25.10.2006'
- '%d.%m.%y %H:%M:%S', # '25.10.06 14:30:59'
- '%d.%m.%y %H:%M', # '25.10.06 14:30'
- '%d.%m.%y', # '25.10.06'
- '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
- '%m/%d/%Y %H:%M', # '10/25/2006 14:30'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
-)
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = " "
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/km/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/km/LC_MESSAGES/django.mo
deleted file mode 100644
index 91f0628..0000000
--- a/parts/django/django/conf/locale/km/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/km/LC_MESSAGES/django.po b/parts/django/django/conf/locale/km/LC_MESSAGES/django.po
deleted file mode 100644
index faf3a91..0000000
--- a/parts/django/django/conf/locale/km/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,2508 +0,0 @@
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: sengtha@e-khmer.com\n"
-"POT-Creation-Date: 2007-01-15 15:43+0200\n"
-"PO-Revision-Date: 2007-08-10 00:21+0900\n"
-"Last-Translator: Chay Sengtha <sengtha@e-khmer.com>\n"
-"Language-Team: Chay Sengtha <sengtha@e-khmer.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: Information
-msgid "Administration Page"
-msgstr "ទំព័រគ្រប់គ្រង"
-
-msgid "Tag"
-msgstr "ប្រភេទ"
-
-msgid "Headline"
-msgstr "ចំណងជើង"
-
-msgid "Article"
-msgstr "អត្ថបទ"
-
-msgid "Review"
-msgstr "ព្រឹត្តិការណ៍ និង ផលិតផលថ្មីៗ"
-
-msgid "Keyword"
-msgstr "ពាក្យសំខាន់ៗ"
-
-msgid "Advertisement"
-msgstr "ការផ្សាយពាណិជ្ជកម្ម"
-
-msgid "Link"
-msgstr "អត្ថបទភ្ជាប់"
-
-msgid "Accounting"
-msgstr "គណនី"
-
-msgid "Name"
-msgstr "ឈ្មោះ"
-
-msgid "Slug"
-msgstr "ឈ្មោះជាអក្សរឡាតាំង"
-
-msgid "Created"
-msgstr "កាលបរិច្ឆេទនៃការសរសេរ"
-
-msgid "Modified"
-msgstr "កាលបរិច្ឆេទ​នៃការ​ផ្លាស់ប្តូរ"
-
-msgid "Summary"
-msgstr "អត្ថបទសង្ខេប"
-
-msgid "Viewed number"
-msgstr "ចំនួនអាន"
-
-msgid "Site"
-msgstr "គេហទំព័រ"
-
-msgid "Rate"
-msgstr "ការវាយតំលៃ"
-
-msgid "Private"
-msgstr "សំរាប់សមាជិកបង់លុយ"
-
-msgid "Public"
-msgstr "ផ្សព្វផ្សាយ"
-
-msgid "Content"
-msgstr "អត្ថបទ"
-
-msgid "Page"
-msgstr "ទំព័រទី"
-
-msgid "Attach Image"
-msgstr "រូបភាព"
-
-msgid "Ads type"
-msgstr "ប្រភេទពាណិជ្ជកម្ម"
-
-msgid "Link type"
-msgstr "ប្រភេទអត្ថបទភ្ជាប់"
-
-msgid "Account type"
-msgstr "ប្រភេទគណនី"
-
-msgid "Amount"
-msgstr "ចំនួន"
-
-msgid "Person"
-msgstr "អ្នកទទួលខុសត្រូវ"
-
-msgid "Date"
-msgstr "កាលបរិច្ឆេទ"
-
-msgid "Information"
-msgstr "ការគ្រប់គ្រងព័ត៌មាន"
-
-msgid "Auth"
-msgstr "ការគ្រប់គ្រងសមាជិក"
-
-msgid "Comments"
-msgstr "ការគ្រប់គ្រងមតិ​យោបល់"
-
-msgid "Sites"
-msgstr "ការគ្រប់គ្រងដមែន"
-
-msgid "Flatpages"
-msgstr "ការគ្រប់គ្រងទំព័រថ្មី"
-
-msgid "File-Browser"
-msgstr "ការគ្រប់គ្រងឯកសារ"
-
-msgid "Make Directory"
-msgstr "បង្កើតថតថ្មី"
-
-msgid "Multiple Upload"
-msgstr "ទាញយកឯកសារ"
-
-msgid "results"
-msgstr "លទ្ធផល"
-
-msgid "total"
-msgstr "​សរុប"
-
-msgid "Total"
-msgstr "​សរុប"
-
-msgid "type"
-msgstr "ប្រភេទ"
-
-msgid "filename"
-msgstr "ឈ្មោះឯកសារ"
-
-msgid "size"
-msgstr "ទំហំ"
-
-msgid "Past 30 days"
-msgstr "៣០ថ្ងៃកន្លងមក"
-
-msgid "By Date"
-msgstr "តាម​កាលបរិច្ឆេទ"
-
-msgid "By Type"
-msgstr "តាម​ប្រភេទ"
-
-msgid "no entries found"
-msgstr "រកមិនឃើញ"
-
-msgid "Select files to upload"
-msgstr "សូមជ្រើសរើសឯកសារ​។"
-
-msgid "At least one file must be chosen."
-msgstr "សូមជ្រើសរើសឯកសារ​យ៉ាង​តិច១។"
-
-msgid "Wrong filetype for"
-msgstr "ប្រភេទឯកសារដែលមិនអាចទាញយកបាន។"
-
-msgid "File already exists"
-msgstr "ឯកសារនេះមានរួចហើយ។"
-
-msgid "File"
-msgstr "ឯកសារ"
-
-msgid " is existed."
-msgstr "ត្រូវបានគេយករួចហើយ។"
-
-msgid "Account registration is not complete yet.<br/>You need to activate your account first.<br/>We have already sent you the activate URL. Please check you mail box."
-msgstr "ការចុះឈ្មោះមិនទាន់ចប់នៅឡើយទេ។ <br/>យើងខ្ញុំបានបញ្ជូនអ៊ីមែល​ទៅកាន់អាស័យដ្ឋានអ៊ីមែល​របស់​លោកអ្នក​ហើយ​ សូមចុច​អត្ថបទភ្ជាប់​នៅក្នុង​អ៊ីមែល ដើម្បី​បញ្ជប់ការចុះឈ្មោះ។"
-
-msgid "Help"
-msgstr "ជំនួយ"
-
-msgid "Max. Filesize"
-msgstr "ទំហំឯកសារអតិបរិមា"
-
-msgid "Upload"
-msgstr "ទាញយក"
-
-msgid "Folder"
-msgstr "ថត"
-
-msgid "Video"
-msgstr "វីដេអូ"
-
-msgid "Document"
-msgstr "ឯកសារ"
-
-msgid "Sound"
-msgstr "សំលេង"
-
-msgid "Code"
-msgstr "កូត"
-
-msgid "Allowed"
-msgstr "ប្រភេទឯកសារដែលអាចទាញ​យកបាន"
-
-msgid "Directory already exists."
-msgstr "ថតនេះមាន​រួចហើយ។"
-
-msgid "Permission denied."
-msgstr "ពុំមានសិទ្ធិអាចបង្កើតបាន។"
-
-msgid "Please correct the errors below."
-msgstr "សូមកែកំហុសដូចខាងក្រោម។"
-
-msgid "Only letters, numbers and underscores are allowed."
-msgstr "ត្រូវបំពេញតែអក្សរឡាតាំង ចំនួនលេខ និង សញ្ញា _ ។"
-
-msgid "The directory will automatically be converted to lowercase"
-msgstr "ឈ្មោះថតនឹងត្រូវផ្លាស់ប្តូរទៅជាអក្សរតូចដោយស្វ័យប្រវត្ត។"
-
-msgid "Create"
-msgstr "បង្កើត"
-
-msgid "date"
-msgstr "​កាលបរិច្ឆេទ"
-
-msgid "Dbtemplate"
-msgstr "ការគ្រប់គ្រងឯកសារគំរូ"
-
-msgid "template"
-msgstr "ឯកសារគំរូ"
-
-msgid "templates"
-msgstr "ឯកសារគំរូ"
-
-msgid "Comment"
-msgstr "ផ្សេងៗ"
-
-msgid "Income"
-msgstr "ចំណូល"
-
-msgid "Expense"
-msgstr "ចំណាយ"
-
-msgid "Image"
-msgstr "រូបភាព"
-
-msgid "Text and Image"
-msgstr "អក្សរ និង​ រូបភាព"
-
-msgid "New Headlines"
-msgstr "អត្ថបទថ្មីៗ"
-
-msgid "New Reviews"
-msgstr "ព្រឹត្តិការណ៍ និង ផលិតផលថ្មីៗ"
-
-msgid "Login"
-msgstr "ពិនិត្យចូល"
-
-msgid "Logout"
-msgstr "ចាកចេញ"
-
-msgid "Register"
-msgstr "ចូលជាសមាជិក"
-
-msgid "Free"
-msgstr "ឥតគិតថ្លៃ"
-
-msgid "Welcome"
-msgstr "សូមស្វាគមន័ "
-
-msgid "IT Resources"
-msgstr "ប្រភពព័ត៌មានអំពី បច្ចេកទេសព័ត៌មានវិទ្យា"
-
-msgid "Copyrights"
-msgstr "រក្សាសិទ្ធិដោយ "
-
-msgid "Next page"
-msgstr "ទំព័របន្ទាប់"
-
-msgid "Previous page"
-msgstr "ទំព័រមុន "
-
-msgid "Wrong number or password. Please try it again."
-msgstr "ឈ្មោះជាសមាជិក​ ឬ ពាក្យសំងាត់ មិនត្រឹមត្រូវ។ សូមសាកល្បងម្តងទៀត។ "
-
-msgid "This username has not activated yet."
-msgstr "ឈ្មោះសាមាជិកនេះមិនទាន់ត្រូវបានគេអនុញ្ញាតនៅឡើយទេ។"
-
-msgid "Please write"
-msgstr "សូមបំពេញ"
-
-msgid "More"
-msgstr "អត្ថបទផ្សេងទៀត"
-
-msgid "Please correct below errors."
-msgstr "សូកកែកូមហុសខាងក្រោម។"
-
-msgid "Thank for your comment."
-msgstr "សូមអរគុណដែលបានបញ្ជេញមតិយោបល់ទាក់ទងនឹងអត្ថបទនេះ"
-
-#: Django standard
-#: contrib/comments/models.py:67
-#: contrib/comments/models.py:166
-msgid "object ID"
-msgstr "លេខ​សំគាល់​កម្មវិធី"
-
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "ចំណងជើង"
-
-#: contrib/comments/models.py:69
-#: contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "មតិ​យោបល់"
-
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "វាយ​តំលៃ #1"
-
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "វាយ​តំលៃ #2"
-
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "វាយ​តំលៃ #3"
-
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "វាយ​តំលៃ #4"
-
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "វាយ​តំលៃ #5"
-
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "វាយ​តំលៃ #6"
-
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "វាយ​តំលៃ #7"
-
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "វាយ​តំលៃ #8"
-
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "កំពុង​ត្រួត​ពិនិត្យចំពោះ​​ការ​វាយ​តំលៃ"
-
-#: contrib/comments/models.py:83
-#: contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "កាល​បរិច្ឆេទនៃ​ការ​សរសេរ​​"
-
-#: contrib/comments/models.py:84
-#: contrib/comments/models.py:170
-msgid "is public"
-msgstr "ផ្សព្វផ្សាយ​ជាសធារណៈ"
-
-#: contrib/comments/models.py:85
-#: contrib/admin/views/doc.py:304
-msgid "IP address"
-msgstr "លេខ IP"
-
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "ត្រូវ​បាន​លប់​ចេញ"
-
-#: contrib/comments/models.py:86
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "សូម​ចុច​ជ្រើសរើស​យក​ប្រអប់​នេះ​ ប្រសិន​បើ​មតិ​យោបល់​មិនសមរម្យ។ ឃ្លា \" មតិ​យោបល់​នេះ​ត្រូវបាន​គេលប់​\" នឹងត្រូវ​បង្ហាញ​ជំនួស​វិញ។"
-
-#: contrib/comments/models.py:91
-msgid "comments"
-msgstr "មតិ​យោបល់"
-
-#: contrib/comments/models.py:131
-#: contrib/comments/models.py:207
-msgid "Content object"
-msgstr "អត្ថន័យ​របស់​កម្មវិធី"
-
-#: contrib/comments/models.py:159
-#: python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"សរសេរ​ដោយ %(user)s នៅថ្ងៃ​ %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "ឈ្មោះ"
-
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "លេខ ip"
-
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr "យល់ព្រម​ដោយ​បុគ្គលិក"
-
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "មតិ​យោបល់(មិនចាំបាច់សមាជិក)"
-
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "មតិ​យោបល់(មិនចាំបាច់សមាជិក)"
-
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "ពិន្ទុ"
-
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "កាលបរិច្ឆេទ​ដាក់ពិន្ទុ"
-
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "ពិន្ទុ​កម្មា(karma)"
-
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "ពិន្ទុ​កម្មា(karma)"
-
-#: contrib/comments/models.py:242
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d វាយ​តំលៃ​ដោយ %(user)s"
-
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"មតិ​យោបល់នេះ​ត្រូវបាន​កត់សំគាល់ទុក​ដោយ %(user)s:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "កាល​បរិច្ឆេទ​កត់​សំគាល់​ទុក"
-
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "ការ​កត់​សំគាល់​ទុក​"
-
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "ការ​កត់​សំគាល់​ទុក"
-
-#: contrib/comments/models.py:273
-#, python-format
-msgid "Flag by %r"
-msgstr "កត់​សំគាល់​ទុកដោយ %r"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "កាល​បរិច្ឆេទនៃ​ការ​លប់​"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "ការ​លប់​ដោយអ្នក​គ្រប់គ្រង"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "ការ​លប់​ដោយអ្នក​គ្រប់គ្រង"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "ការ​លប់​ដោយអ្នក​គ្រប់គ្រង នៅ %r"
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "ជនអនាមិក​មិន​អាច​បោះ​ឆ្នោត​បាន​ទេ"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "លេខ​សំគាល់​មតិ​យោបល់​មិន​ត្រឹម​ត្រូវ"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "មិន​អាច​បោះ​ឆ្នោត​អោយ​ខ្លួន​ឯង​បាន​ទេ"
-
-#: contrib/comments/views/comments.py:27
-msgid "This rating is required because you've entered at least one other rating."
-msgstr "ចាំបាច់ត្រូវការ វាយតំលៃ ពីព្រោះលោកអ្នកបានជ្រើសរើសធ្វើការវាយតំលៃផ្សេងពីនេះ។"
-
-#: contrib/comments/views/comments.py:111
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] ""
-"មតិយោបល់នេះត្រូវបានបញ្ជូនដោយសមាជិកម្នាក់ដែលបាន​ផ្តល់មតិយោបល់​តិចជាង %(count)s។\n"
-"%(text)s"
-msgstr[1] ""
-"មតិយោបល់នេះត្រូវបានសរសេរដោយសមាជិកម្នាក់ដែលបាន​ផ្តល់មតិយោបល់​តិចជាង %(count)s។\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:116
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"មតិយោបល់បានសរសេរដោយសមាជិកមិនសូវប្រាកដប្រជា:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:188
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "អនុញ្ញាតតែទិន្នន័យតាមរយះ​ POST ​។"
-
-#: contrib/comments/views/comments.py:192
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr "ទិន្នន័យរបស់ចំនុចមួយចំនួនដែលចាំបាច់ មិនទាន់បានបំពេញ។"
-
-#: contrib/comments/views/comments.py:196
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "មានគេព្យាយាមសរសេរ មតិយោបល់ មិនត្រឹមត្រូវ (ប៉ះពាល់ដល់សុវត្ថិភាព)"
-
-#: contrib/comments/views/comments.py:206
-#: contrib/comments/views/comments.py:292
-msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
-msgstr "បែបបទបំពេញមតិយោបល់មិនមាន 'target' ​និង​ លេខសំគាល់កម្មវិធី (object ID)​ ត្រឹមត្រូវ"
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "បែបបទបំពេញមតិយោបល់មិនមាន 'preview' or 'post' ។"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "ឈ្មោះសមាជិក"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Log out"
-msgstr "ចាកចេញ"
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "ពាក្យ​សំងាត់"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "តើលោកអ្នក​ភ្លេច​ពាក្យសំងាត់រឺ?​​"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "វាយតំលៃ"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "ចាំ​បាច់"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "មិនចាំ​បាច់​ជ្រើសរើស​យក​ក៏បាន​"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "បញ្ជូន​រូបភាព"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "មតិ​យោបល់"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "មើល​ មតិយោបល់"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "ឈ្មោះ"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>ដោយ %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:70
-#: contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
-#: contrib/admin/filterspecs.py:169
-msgid "All"
-msgstr "ទាំងអស់"
-
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
-msgstr "កាល​បរិច្ឆេទណាមួយ"
-
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
-msgstr "ថ្ងៃនេះ"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
-msgstr "៧​ថ្ងៃ​កន្លង​មក"
-
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
-msgstr "ខែ​នេះ"
-
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
-msgstr "ឆ្នាំ​នេះ"
-
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "យល់ព្រម"
-
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "មិនយល់ព្រម"
-
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr "មិន​ដឹង"
-
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "ពេលវេលាប្រតិបត្តិការ"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "លេខ​សំគាល់​កម្មវិធី (object id)"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "object repr"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "សកម្មភាព"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr "ផ្លាស់ប្តូរ"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "កំណត់ហេតុ"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "កំណត់ហេតុ"
-
-#: contrib/admin/templatetags/admin_list.py:230
-msgid "All dates"
-msgstr "កាលបរិច្ឆេទទាំងអស់"
-
-#: contrib/admin/views/decorators.py:10
-#: contrib/auth/forms.py:59
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "សូមបំពេញ ឈ្មោះសមាជិក និង ពាក្យសំងាត់ ។ "
-
-#: contrib/admin/views/decorators.py:24
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-msgstr "ពិនិត្យចូល"
-
-#: contrib/admin/views/decorators.py:62
-msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
-msgstr "សូមពិនិត្យចូលម្តងទៀត ។"
-
-#: contrib/admin/views/decorators.py:69
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "ប្រហែលជាកម្មវិធីមើលគេះទំព័រដែលលោកអ្នកកំពុងប្រើ មិនទទួល​ គូគី (cookies) ។ សូមកំណត់កម្មវិធីដែលលោកអ្នកកំពុងប្រើនេះអោយទទួលយក គូគី ហើយចូលមកមើលទំព័រនេះម្តងទៀត ។"
-
-#: contrib/admin/views/decorators.py:83
-msgid "Usernames cannot contain the '@' character."
-msgstr "ឈ្មោះសមាជិកមិនអាចមាន សញ្ញា '@' ។"
-
-#: contrib/admin/views/decorators.py:85
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "អ៊ីមែលរបស់លោកអ្នក មិនអាចធ្វើជា ឈ្មោះសមាជិកបានទេ ។ សូមសាកល្បងជាមួយ '%s'។"
-
-#: contrib/admin/views/main.py:223
-msgid "Site administration"
-msgstr "ទំព័រគ្រប់គ្រង"
-
-#: contrib/admin/views/main.py:257
-#: contrib/admin/views/auth.py:17
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "ឈ្មោះកម្មវិធី %(name)s \"%(obj)s\" បានបញ្ជូលដោយជោគជ័យ​។"
-
-#: contrib/admin/views/main.py:261
-#: contrib/admin/views/main.py:347
-#: contrib/admin/views/auth.py:22
-msgid "You may edit it again below."
-msgstr "សូមសាកល្បងកែប្រែម្តងទៀត។"
-
-#: contrib/admin/views/main.py:271
-#: contrib/admin/views/main.py:356
-#, python-format
-msgid "You may add another %s below."
-msgstr "លោកអ្នកអាចបន្ថែម  %s ផ្សេងទៀតដូចខាងក្រោម។"
-
-#: contrib/admin/views/main.py:289
-#, python-format
-msgid "Add %s"
-msgstr "បន្ថែម %s"
-
-#: contrib/admin/views/main.py:335
-#, python-format
-msgid "Added %s."
-msgstr "បានបន្ថែម %s"
-
-#: contrib/admin/views/main.py:335
-#: contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339
-msgid "and"
-msgstr "និង"
-
-#: contrib/admin/views/main.py:337
-#, python-format
-msgid "Changed %s."
-msgstr "បានផ្លាស់ប្តូរ %s"
-
-#: contrib/admin/views/main.py:339
-#, python-format
-msgid "Deleted %s."
-msgstr "បានលប់ %s"
-
-#: contrib/admin/views/main.py:342
-msgid "No fields changed."
-msgstr "ពុំមានទិន្នន័យត្រូវបានផ្លាស់ប្តូរ។"
-
-#: contrib/admin/views/main.py:345
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "កម្មវិធីឈ្មោះ %(name)s \"%(obj)s\" ត្រូវបានផ្លាស់ប្តូរដោយជោគជ័យ។"
-
-#: contrib/admin/views/main.py:353
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "ឈ្មោះកម្មវីធី %(name)s \"%(obj)s\" ត្រូវបានបន្ថែមដោយជោគជ័យ។ លោកអ្នកអាចផ្លាស់ប្តូរម្តងទៀតនៅខាងក្រោម។"
-
-#: contrib/admin/views/main.py:391
-#, python-format
-msgid "Change %s"
-msgstr "ផ្លាស់ប្តូរ %s"
-
-#: contrib/admin/views/main.py:473
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "មានទិន្នន័យ %(fieldname)s មួយចំនួននៅក្នុង %(name)s: %(obj)s"
-
-#: contrib/admin/views/main.py:478
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "មានទិន្នន័យ %(fieldname)s មួយចំនួននៅក្នុង %(name)s:"
-
-#: contrib/admin/views/main.py:511
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "ឈ្មោះកម្មវិធី %(name)s \"%(obj)s\" ត្រូវបានលប់ដោយជោគជ័យ។"
-
-#: contrib/admin/views/main.py:514
-msgid "Are you sure?"
-msgstr "តើលោកអ្នកប្រាកដទេ?"
-
-#: contrib/admin/views/main.py:536
-#, python-format
-msgid "Change history: %s"
-msgstr "សកម្មភាពផ្លាស់ប្តូរកន្លងមក : %s"
-
-#: contrib/admin/views/main.py:570
-#, python-format
-msgid "Select %s"
-msgstr "ជ្រើសរើស %s"
-
-#: contrib/admin/views/main.py:570
-#, python-format
-msgid "Select %s to change"
-msgstr "ជ្រើសរើស %s ដើម្បីផ្លាស់ប្តូរ"
-
-#: contrib/admin/views/main.py:758
-msgid "Database error"
-msgstr "ទិន្នន័យមូលដ្ឋានមានបញ្ហា"
-
-#: contrib/admin/views/doc.py:46
-#: contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-msgid "tag:"
-msgstr "ប្រភេទ:"
-
-#: contrib/admin/views/doc.py:77
-#: contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-msgid "filter:"
-msgstr "ពាក្យស្វែងរក"
-
-#: contrib/admin/views/doc.py:135
-#: contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-msgid "view:"
-msgstr "មើល"
-
-#: contrib/admin/views/doc.py:164
-#, python-format
-msgid "App %r not found"
-msgstr "ស្វែងរក App %r មិនឃើញ ។"
-
-#: contrib/admin/views/doc.py:171
-#, python-format
-msgid "Model %r not found in app %r"
-msgstr "Model %r រកមិនឃើញនៅក្នុង app %r"
-
-#: contrib/admin/views/doc.py:183
-#, python-format
-msgid "the related `%s.%s` object"
-msgstr " `%s.%s` object ដែលពាក់ព័ន្ធ"
-
-#: contrib/admin/views/doc.py:183
-#: contrib/admin/views/doc.py:205
-#: contrib/admin/views/doc.py:219
-#: contrib/admin/views/doc.py:224
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admin/views/doc.py:214
-#, python-format
-msgid "related `%s.%s` objects"
-msgstr "ជាប់​ទាក់ទង​ជាមួយ​នឹងកម្មវិធី​  `%s.%s` "
-
-#: contrib/admin/views/doc.py:219
-#, python-format
-msgid "all %s"
-msgstr "ទាំងអស់ %s"
-
-#: contrib/admin/views/doc.py:224
-#, python-format
-msgid "number of %s"
-msgstr "ចំនួន​នៃ​%s"
-
-#: contrib/admin/views/doc.py:229
-#, python-format
-msgid "Fields on %s objects"
-msgstr "ទិន្នន័យអំពី %s កម្មវិធី"
-
-#: contrib/admin/views/doc.py:291
-#: contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:303
-#: contrib/admin/views/doc.py:309
-#: contrib/admin/views/doc.py:310
-#: contrib/admin/views/doc.py:312
-msgid "Integer"
-msgstr "ចំនួនពិត(Integer)"
-
-#: contrib/admin/views/doc.py:292
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (អាច​ជា True រឺ False)"
-
-#: contrib/admin/views/doc.py:293
-#: contrib/admin/views/doc.py:311
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "String (អាចសរសេរបានរហូតដល់ %(maxlength)s)"
-
-#: contrib/admin/views/doc.py:294
-msgid "Comma-separated integers"
-msgstr "ចំនួនពិត(Integer) ដែលផ្តាច់ចេញពីគ្នាដោយ​ក្បៀស"
-
-#: contrib/admin/views/doc.py:295
-msgid "Date (without time)"
-msgstr "កាល​បរិច្ឆេទ (Date) (មិនមានសរសេរម៉ោង)"
-
-#: contrib/admin/views/doc.py:296
-msgid "Date (with time)"
-msgstr "កាល​បរិច្ឆេទ (Date) (មានសរសេរម៉ោង)"
-
-#: contrib/admin/views/doc.py:297
-msgid "E-mail address"
-msgstr "អ៊ីម៉ែល"
-
-#: contrib/admin/views/doc.py:298
-#: contrib/admin/views/doc.py:299
-#: contrib/admin/views/doc.py:302
-msgid "File path"
-msgstr "ផ្លូវទៅកាន់ឯកសារ"
-
-#: contrib/admin/views/doc.py:300
-msgid "Decimal number"
-msgstr "ចំនួនទសភាគ (Decimal)"
-
-#: contrib/admin/views/doc.py:306
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (អាចជា True​ រឺ False រឺ None)"
-
-#: contrib/admin/views/doc.py:307
-msgid "Relation to parent model"
-msgstr "ទាក់ទងទៅនឹងម៉ូដែល (model)មេ"
-
-#: contrib/admin/views/doc.py:308
-msgid "Phone number"
-msgstr "លេខទូរស័ព្ទ"
-
-#: contrib/admin/views/doc.py:313
-msgid "Text"
-msgstr "អត្ថបទ"
-
-#: contrib/admin/views/doc.py:314
-msgid "Time"
-msgstr "ពេលវេលា"
-
-#: contrib/admin/views/doc.py:315
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "អាស័យដ្ឋានគេហទំព័រ(URL)"
-
-#: contrib/admin/views/doc.py:316
-msgid "U.S. state (two uppercase letters)"
-msgstr "សហរដ្ឋអាមេរិក U.S. (ជាមួយនឹងអក្សរធំពីរ)"
-
-#: contrib/admin/views/doc.py:317
-msgid "XML text"
-msgstr "អត្ថបទ XML"
-
-#: contrib/admin/views/doc.py:343
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ហាក់បីដូចជា URL ដែល​ត្រឹមត្រូវទេ"
-
-#: contrib/admin/views/auth.py:28
-msgid "Add user"
-msgstr "បន្ថែមសមាជិក"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "ឯកសារ"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Change password"
-msgstr "ផ្លាស់ប្តូរពាក្យសំងាត់"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "គេហទំព័រ"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
-msgid "History"
-msgstr "សកម្មភាព​កន្លង​មក"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "Date/time"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "សមាជិក"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "សកម្មភាព"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "N j, Y, P"
-
-#: contrib/admin/templates/admin/object_history.html:36
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "កម្មវិធីនេះមិនមានសកម្មភាព​កន្លងមកទេ។ ប្រហែលជាសកម្មភាពទាំងនេះមិនបានធ្វើនៅទំព័រគ្រប់គ្រងនេះ។"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "ទំព័រគ្រប់គ្រងរបស់ Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "ការ​គ្រប់គ្រង​របស់ ​Django"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "ម៉ាស៊ីនផ្តល់សេវាកម្ម​ មានបញ្ហា"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "ម៉ាស៊ីនផ្តល់សេវាកម្ម​ មានបញ្ហា (៥០០)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "ម៉ាស៊ីនផ្តល់សេវាកម្ម​ មានបញ្ហា  <em>(៥០០)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "មានកំហុស។ កំហុសនេះត្រូវបានបញ្ជូនទៅកាន់អ្នកគ្រប់គ្រងគេហទំព័រនេះរួចហើយ។ សូមអភ័យទោសចំពោះបញ្ហានេះ។"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "ទំព័រ​ដែល​លោកអ្នកចង់​រក​នេះពុំមាន​នៅក្នុងម៉ាស៊ីនរបស់យើងខ្ញុំទេ"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "សួមអភ័យទោស ទំព័រ​ដែល​លោកអ្នកចង់​រក​នេះពុំមាន​នឹងក្នុងម៉ាស៊ីនរបស់យើងខ្ញុំទេ"
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "ម៉ូដែល (Models) មាននៅក្នុងកម្មវិធី %(name)s ។"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/index.html:28
-#: contrib/admin/templates/admin/change_form.html:15
-msgid "Add"
-msgstr "បន្ថែម"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "ផ្លាស់ប្តូរ"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "លោកអ្នកពុំមានសិទ្ធិ ផ្លាស់​ប្តូរ ទេ។"
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "សកម្មភាពបច្ចុប្បន្ន"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "សកម្មភាពរបស់ខ្ញុំ"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "គ្មាន"
-
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "បន្ថែម %(name)s"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "តើលោកអ្នក <a href=\"/password_reset/\">ភ្លេចពាក្យសំងាត់</a>?"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "សូមស្វាគមន៏"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "លប់"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "ការលប់ %(object_name)s '%(escaped_object)s' អាចធ្វើអោយ​កម្មវិធីដែលពាក់​ព័ន្ធបាត់បង់ ។ ក៏ប៉ន្តែលោកអ្នក​ពុំមាន​សិទ្ធិលប់​កម្មវិធី​ប្រភេទនេះទេ។"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "តើលោកអ្នកប្រាកដជាចង់លប់ %(object_name)s \"%(escaped_object)s\"? ការលប់ %(object_name)s '%(escaped_object)s' អាចធ្វើអោយ​កម្មវិធីដែលពាក់​ព័ន្ធបាត់បង់។"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "ខ្ញុំច្បាស់​ជាចង់លប់"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "ដោយ​  %(filter_title)s "
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "ស្វែងរក"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "លទ្ធផល ១"
-msgstr[1] "លទ្ធផល %(counter)s "
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "សរុបទាំងអស់ %(full_result_count)s"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "បង្ហាញទាំងអស់"
-
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "ស្វែងរកជាមួយ"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "មើលនៅលើគេហទំព័រដោយផ្ទាល់"
-
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "សូមកែប្រែកំហុសខាងក្រោម ។"
-msgstr[1] "សូមកែប្រែកំហុសខាងក្រោម ។"
-
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "កំពុងតំរៀប"
-
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "តំរៀប"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "រក្សាទុក"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "រក្សាទុក ហើយ បន្ថែម​ថ្មី"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "រក្សាទុក ហើយ កែឯកសារដដែល"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "រក្សាទុក"
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "មូលដ្ឋាន​ទិន្នន័យ​​​ របស់លោកអ្នក មានបញ្ហា។ តើ លោកអ្នកបាន បង្កើត តារាង​ របស់មូលដ្ឋានទិន្នន័យ​ ហើយឬនៅ? តើ​ លោកអ្នកប្រាកដថាសមាជិកអាចអានមូលដ្ឋានទិន្នន័យនេះ​​បានឬទេ? "
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "តំបូងសូមបំពេញ ឈ្មោះជាសមាជិក និង ពាក្យសំងាត់​។ បន្ទាប់មកលោកអ្នកអាចបំពេញបន្ថែមជំរើសផ្សេងៗទៀតបាន។ "
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "ឈ្មោះជាសមាជិក"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-msgid "Password"
-msgstr "ពាក្យសំងាត់"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-msgid "Password (again)"
-msgstr "ពាក្យសំងាត់ (ម្តងទៀត)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-msgid "Enter the same password as above, for verification."
-msgstr "សូមបំពេញពាក្យសំងាត់ដូចខាងលើ ដើម្បីត្រួតពិនិត្យ។ "
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "ផ្លាស់ប្តូរពាក្យសំងាត់"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "ពាក្យសំងាត់បានផ្លាស់ប្តូរដោយជោគជ័យ"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "ពាក្យសំងាត់របស់លោកអ្នកបានផ្លាស់ប្តូរហើយ"
-
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-#: contrib/admin/templates/registration/password_reset_done.html:4
-msgid "Password reset"
-msgstr "ពាក្យសំងាត់បានកំណត់សារជាថ្មី"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
-msgstr "តើលោកអ្នកភ្លេចពាក្យសំងាត់រឺ? សូមបំពេញអ៊ីម៉ែលខាងក្រោម យើងខ្ញុំនឹងកំណត់ពាក្យសំងាត់របស់លោកអ្នកសារឡើងវិញ ហើយបញ្ជូនទៅកាន់អ៊ីម៉ែលរបស់លោកអ្នក។"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "អ៊ីមែល"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "កំណត់ពាក្យសំងាត់សារជាថ្មី"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "សូមថ្លែងអំណរគុណ ដែលបានចំណាយ ពេលវេលាដ៏មានតំលៃ របស់លោកអ្នកមកទស្សនាគេហទំព័ររបស់យើងខ្ញុំ"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "ពិនិត្យចូលម្តងទៀត"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "ពាក្យសំងាត់បានផ្លាស់ប្តូរដោយជោគជ័យ"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "យើងខ្ញុំបានបញ្ជូន​ពាក្យសំងាត់ទៅកាន់​អ៊ីម៉ែលរបស់លោកអ្នករួចហើយ។ លោកអ្នកនឹងបានទទួលនៅពេលបន្តិចទៀតនេះ។"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "សូមបំពេញពាក្យសំងាត់ចាស់របស់លោកអ្នក។ ដើម្បីសុវត្ថភាព សូមបំពេញពាក្យសំងាត់ថ្មីខាងក្រោមពីរដង។"
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "ពាក្សំងាត់ចាស់"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "ពាក្យសំងាត់ថ្មី"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "បំពេញពាក្យសំងាត់ថ្មីម្តងទៀត"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "ផ្លាស់ប្តូរពាក្យសំងាត់"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "លោកអ្នកទទួលអ៊ីម៉ែលនេះដោយសារលោកអ្នកកំណត់ពាក្យសំងាត់នេះសារជាថ្មី"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "សំរាប់សមាជិកនៅឯគេហទំព័រ %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "ពាក្យសំងាត់ថ្មីគឺ: %(new_password)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "សូមផ្លាស់ប្តូរពាក្យសំងាត់នៅឯទំព័រនេះ:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "ឈ្មោះជាសមាជិកក្នុងករណីភ្លេច:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "សូមអរគុណដែលបានប្រើប្រាស់សេវាកម្មរបស់យើងខ្ញុំ"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "ក្រុមរបស់គេហទំព័រ %(site_name)s"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "កំរងចំណាំ"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "កំរងចំណាំអំពីឯកសារ"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">ដើម្បីតំលើងកំរងចំណាំ សូមទាញយកអត្ថបទភ្ជាប់ទៅ​កាន់​របាឧបករណ៍ ឬក៏ចុចខាងស្តាំលើអត្ថបទភ្ជាប់ហើយ​បញ្ជូលទៅក្នុងកំរងចំណាំរបស់លោកអ្នក។</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "ឯកសារសំរាប់ទំព័រនេះ"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Jumps you from any page to the documentation for the view that generates that page."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "បង្ហាញលេខសំគាល់កម្មវិធី"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Shows the content-type and unique ID for pages that represent a single object."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "កែប្រែកម្មវិធីនេះ(វីនដូវកំពុងប្រើ)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "បង្វែរទៅកាន់​ ទំព័រគ្រប់គ្រង សំរាប់ទំព័រណាដែលតំណាងអោយកម្មវិធីតែមួយ។"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "កែប្រែកម្មវិធីនេះ(វីនដូវថ្មី)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr "ដូចខាងលើ តែបើកនៅទំព័រវីនដូវថ្មី"
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "កាលបរិច្ឆេទ"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "ម៉ោង"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "បច្ចុប្បន្ន"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "ផ្លាស់ប្តូរ"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "នាំចេញពី"
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "គួរតែជាផ្លូវពេញ (absolute path) ហើយមិនបញ្ជូលឈ្មោះ ដមែន (domain name​)។​ឧទាហរណ៍ '/events/search/'។"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "នាំចេញទៅ"
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "អាចជាផ្លូវពេញ (absolute path) ឬក៏ URL ទាំងមូលដែលចាប់ផ្តើមជាមួយ 'http://'។"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "នាំចេញ"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "នាំចេញ"
-
-#: contrib/flatpages/models.py:8
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "ឧទាហរណ៍  '/about/contact/' ។ ត្រូវប្រាកដថាមានសញ្ញា / ទាំងនៅផ្នែកខាងមុខ និង ខាងក្រោយ។"
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "ចំណងជើង"
-
-msgid "Title"
-msgstr "ចំណងជើង"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "អត្ថន័យ"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "អនុញ្ញាត"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "ឈ្មោះឯកសារគំរូ"
-
-#: contrib/flatpages/models.py:13
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "ឧទាហរណ៍ 'flatpages/contact_page.html'។ ប្រសិនឯកសារនេះមិនមានទេ​ នោះឯកសារ 'flatpages/default.html'នឹងត្រូវប្រើ។"
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "ត្រូវការសមាជិកភាព"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "ប្រសិនជាចុចជ្រើសរើសយកជំរើសនេះ នោះ មានតែសមាជិកទេដែលអាចមើលទំព័រនេះបាន​។"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "ទំព័ថ្មី"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "ទំព័ថ្មី"
-
-#: contrib/auth/views.py:39
-msgid "Logged out"
-msgstr "ចាកចេញ"
-
-#: contrib/auth/models.py:38
-#: contrib/auth/models.py:57
-msgid "name"
-msgstr "ឈ្មោះ"
-
-#: contrib/auth/models.py:40
-msgid "codename"
-msgstr "ឈ្មោះលេខកូត"
-
-#: contrib/auth/models.py:42
-msgid "permission"
-msgstr "អនុញ្ញាត"
-
-#: contrib/auth/models.py:43
-#: contrib/auth/models.py:58
-msgid "permissions"
-msgstr "អនុញ្ញាត"
-
-#: contrib/auth/models.py:60
-msgid "group"
-msgstr "ក្រុម"
-
-#: contrib/auth/models.py:61
-#: contrib/auth/models.py:100
-msgid "groups"
-msgstr "ក្រុម"
-
-#: contrib/auth/models.py:90
-msgid "username"
-msgstr "ឈ្មោះជាសមាជិក"
-
-#: contrib/auth/models.py:90
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "ត្រូចវបំពេញអក្សរឡាតាំងចំនួន៣០ ឬ តិចជាងនេះ (អក្សរ លេខ ឬ សញ្ញា _)។"
-
-#: contrib/auth/models.py:91
-msgid "First name"
-msgstr "នាម"
-
-#: contrib/auth/models.py:92
-msgid "Last name"
-msgstr "គោត្តនាម"
-
-msgid "first name"
-msgstr "នាម"
-
-#: contrib/auth/models.py:92
-msgid "last name"
-msgstr "គោត្តនាម"
-
-#: contrib/auth/models.py:93
-msgid "e-mail address"
-msgstr "អ៊ីមែល"
-
-#: contrib/auth/models.py:94
-msgid "password"
-msgstr "ពាក្យសំងាត់"
-
-#: contrib/auth/models.py:94
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "ប្រើ '[algo]$[salt]$[hexdigest]'"
-
-#: contrib/auth/models.py:95
-msgid "staff status"
-msgstr "ស្ថានភាពបុគ្គលិក"
-
-#: contrib/auth/models.py:95
-msgid "Designates whether the user can log into this admin site."
-msgstr "កំណត់អោយសមាជិកអាចចូលមកប្រើប្រាស់ទំព័រគ្រប់គ្រងនេះ។"
-
-#: contrib/auth/models.py:96
-msgid "active"
-msgstr "សកម្ម"
-
-#: contrib/auth/models.py:96
-msgid "Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."
-msgstr "កំណត់ថាតើសមាជិកអាច​ពិនិត្យចូលមកប្រើទំព័រគ្រប់គ្រង។ មិនជ្រើសរើស ជាជាងលប់ចោល។"
-
-#: contrib/auth/models.py:97
-msgid "superuser status"
-msgstr "ស្ថានភាពអ្នកគ្រងគ្រង"
-
-#: contrib/auth/models.py:97
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "កំណត់អោយសមាជិកនេះមានសិទ្ធិទាំងអស់។"
-
-#: contrib/auth/models.py:98
-msgid "last login"
-msgstr "ការពិនិត្យចូលកន្លងមក"
-
-#: contrib/auth/models.py:99
-msgid "date joined"
-msgstr "កាលបរិច្ឆេទចូលរួម"
-
-#: contrib/auth/models.py:101
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "បន្ថែមចំពោះសិទ្ធិដែលគេបាន​ផ្តល់​អោយ សមាជិកនេះអាចទទួលបានសិទ្ធិទាំងអស់​ដែលកំណត់​សំរាប់​ក្រុម​ ដែលសមាជិកនេះស្ថិតនៅ។"
-
-#: contrib/auth/models.py:102
-msgid "user permissions"
-msgstr "ការអនុញ្ញាតអោយសមាជិក"
-
-#: contrib/auth/models.py:105
-msgid "user"
-msgstr "សមាជិក"
-
-#: contrib/auth/models.py:106
-msgid "users"
-msgstr "សមាជិក"
-
-#: contrib/auth/models.py:111
-msgid "Personal info"
-msgstr "ព័ត៌មានផ្ទាល់ខ្លួន"
-
-#: contrib/auth/models.py:112
-msgid "Permissions"
-msgstr "ការអនុញ្ញាត"
-
-#: contrib/auth/models.py:113
-msgid "Important dates"
-msgstr "កាលបរិច្ឆេទសំខាន់"
-
-#: contrib/auth/models.py:114
-msgid "Groups"
-msgstr "ក្រុម"
-
-#: contrib/auth/models.py:256
-msgid "message"
-msgstr "អត្ថបទ"
-
-#: contrib/auth/forms.py:52
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "កម្មវិធីសំរាប់មើលគេហទំព័រនេះហាក់បីដូចជាមិនទាន់បានទទួលយកគុគី ។ ចាំបាច់ត្រូវកំណត់អោយ​កម្មវិធីសំរាប់មើលគេហទំព័រទទួល​យក គុគី ដើម្បីពិនិត្យចូល ។"
-
-#: contrib/auth/forms.py:61
-msgid "This account is inactive."
-msgstr "ឈ្មោះសមាជិកនេះ​លែងដំណើរការ"
-
-#: contrib/contenttypes/models.py:20
-msgid "python model class name"
-msgstr "ឈ្មោះ python model class"
-
-#: contrib/contenttypes/models.py:23
-msgid "content type"
-msgstr "ប្រភេទអត្ថន័យ"
-
-#: contrib/contenttypes/models.py:24
-msgid "content types"
-msgstr "ប្រភេទអត្ថន័យ"
-
-#: contrib/sessions/models.py:51
-msgid "session key"
-msgstr "លេខសំគាល់​រយះពេល​ពិនិត្យ​ចូល"
-
-#: contrib/sessions/models.py:52
-msgid "session data"
-msgstr "ទិន្នន័យរយះពេល​ពិនិត្យ​ចូល"
-
-#: contrib/sessions/models.py:53
-msgid "expire date"
-msgstr "ហួសពេលកំណត់"
-
-#: contrib/sessions/models.py:57
-msgid "session"
-msgstr "រយះពេល​ពិនិត្យ​ចូល"
-
-#: contrib/sessions/models.py:58
-msgid "sessions"
-msgstr "រយះពេល​ពិនិត្យ​ចូល"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "ឈ្មោះដមែន"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "ឈ្មោះសំរាប់បង្ហាញ"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "គេហទំព័រ"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "គេហទំព័រ"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "ច័ន្ទ"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "អង្គារ"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "ពុធ"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "ព្រហស្បតិ៍"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "សុក្រ"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "សៅរ៍"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "អាទិត្យ"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "មករា"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "កុម្ភៈ"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "March"
-msgstr "មិនា"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "April"
-msgstr "មេសា"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "May"
-msgstr "ឧសភា"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "June"
-msgstr "មិថុនា"
-
-#: utils/dates.py:15
-#: utils/dates.py:27
-msgid "July"
-msgstr "កក្កដា"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "សីហា"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "កញ្ញា"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "តុលា"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "វិច្ឆិកា"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "ធ្នូ"
-
-#: utils/dates.py:19
-msgid "jan"
-msgstr "មករា"
-
-#: utils/dates.py:19
-msgid "feb"
-msgstr "កុម្ភះ"
-
-#: utils/dates.py:19
-msgid "mar"
-msgstr "មិនា"
-
-#: utils/dates.py:19
-msgid "apr"
-msgstr "មេសា"
-
-#: utils/dates.py:19
-msgid "may"
-msgstr "ឧសភា"
-
-#: utils/dates.py:19
-msgid "jun"
-msgstr "មិថុនា"
-
-#: utils/dates.py:20
-msgid "jul"
-msgstr "កក្កដា"
-
-#: utils/dates.py:20
-msgid "aug"
-msgstr "សីហា"
-
-#: utils/dates.py:20
-msgid "sep"
-msgstr "កញ្ញា"
-
-#: utils/dates.py:20
-msgid "oct"
-msgstr "តុលា"
-
-#: utils/dates.py:20
-msgid "nov"
-msgstr "វិច្ឆិកា"
-
-#: utils/dates.py:20
-msgid "dec"
-msgstr "ធ្នូ"
-
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "មករា"
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "កុម្ភះ"
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "សីហា"
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "កញ្ញា"
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "តុលា"
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "វិច្ឆិកា"
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "ធ្នូ"
-
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "ឆ្នាំ"
-msgstr[1] "ឆ្នាំ"
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "ខែ"
-msgstr[1] "ខែ"
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "សប្តាហ៍"
-msgstr[1] "សប្តាហ៍"
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "ថ្ងៃ"
-msgstr[1] "ថ្ងៃ"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ម៉ោង"
-msgstr[1] "ម៉ោង"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "នាទី"
-msgstr[1] "នាទី"
-
-#: utils/translation/trans_real.py:362
-msgid "DATE_FORMAT"
-msgstr "ថ្ងៃទី j ​ខែ N ឆ្នាំ Y"
-
-#: utils/translation/trans_real.py:363
-msgid "DATETIME_FORMAT"
-msgstr "ថ្ងៃទី j ​ខែ N ឆ្នាំ Y ម៉ោង P"
-
-#: utils/translation/trans_real.py:364
-msgid "TIME_FORMAT"
-msgstr "ម៉ោង P"
-
-#: utils/translation/trans_real.py:380
-msgid "YEAR_MONTH_FORMAT"
-msgstr "ខែ F ឆ្នាំ Y"
-
-#: utils/translation/trans_real.py:381
-msgid "MONTH_DAY_FORMAT"
-msgstr "ថ្ងៃទី​​ j ខែ F"
-
-#: conf/global_settings.py:39
-msgid "Arabic"
-msgstr "ភាសាអារ៉ាប់"
-
-#: conf/global_settings.py:40
-msgid "Bengali"
-msgstr "ភាសាបេឡារុស្ស"
-
-#: conf/global_settings.py:41
-msgid "Czech"
-msgstr "ភាសាឆេក"
-
-#: conf/global_settings.py:42
-msgid "Welsh"
-msgstr "ភាសាអ៊ុយក្រែន"
-
-#: conf/global_settings.py:43
-msgid "Danish"
-msgstr "ភាសាដាណឺម៉ាក"
-
-#: conf/global_settings.py:44
-msgid "German"
-msgstr "ភាសាអាល្លឺម៉ង់"
-
-#: conf/global_settings.py:45
-msgid "Greek"
-msgstr "ភាសាហ្កែលិគ"
-
-#: conf/global_settings.py:46
-msgid "English"
-msgstr "ភាសាអង់គ្លេស"
-
-#: conf/global_settings.py:47
-msgid "Spanish"
-msgstr "ភាសាអេស្ប៉ាញ"
-
-#: conf/global_settings.py:48
-msgid "Argentinean Spanish"
-msgstr "ភាសាអេស្ប៉ាញ"
-
-#: conf/global_settings.py:49
-msgid "Finnish"
-msgstr "ភាសាហ្វាំងឡង់"
-
-#: conf/global_settings.py:50
-msgid "French"
-msgstr "ភាសាបារាំង"
-
-#: conf/global_settings.py:51
-msgid "Galician"
-msgstr "ភាសាហ្កែលិគ"
-
-#: conf/global_settings.py:52
-msgid "Hungarian"
-msgstr "ភាសាហុងគ្រី"
-
-#: conf/global_settings.py:53
-msgid "Hebrew"
-msgstr "ភាសាហេប្រិ"
-
-#: conf/global_settings.py:54
-msgid "Icelandic"
-msgstr "ភាសាអ៉ីស្លង់"
-
-#: conf/global_settings.py:55
-msgid "Italian"
-msgstr "ភាសាអ៊ីតាលី"
-
-#: conf/global_settings.py:56
-msgid "Japanese"
-msgstr "ភាសាជប៉ុន"
-
-#: conf/global_settings.py:57
-msgid "Dutch"
-msgstr "ភាសាហ្វាំងឡង់"
-
-#: conf/global_settings.py:58
-msgid "Norwegian"
-msgstr "ភាសាន័រវែស"
-
-#: conf/global_settings.py:59
-msgid "Brazilian"
-msgstr "ភាសាប្រេស៊ីល"
-
-#: conf/global_settings.py:60
-msgid "Romanian"
-msgstr "ភាសារូម៉ានី"
-
-#: conf/global_settings.py:61
-msgid "Russian"
-msgstr "ភាសាรัរូស្ស៉ី"
-
-#: conf/global_settings.py:62
-msgid "Slovak"
-msgstr "ភាសាស្លូវ៉ាគី"
-
-#: conf/global_settings.py:63
-msgid "Slovenian"
-msgstr "ភាសាស្លូវ៉ានី"
-
-#: conf/global_settings.py:64
-msgid "Serbian"
-msgstr ""
-
-#: conf/global_settings.py:65
-msgid "Swedish"
-msgstr "ភាសាស៊ុយអែដ"
-
-#: conf/global_settings.py:66
-msgid "Tamil"
-msgstr "ភាសាតាមីល"
-
-#: conf/global_settings.py:67
-msgid "Turkish"
-msgstr "ភាសាទួរគី"
-
-#: conf/global_settings.py:68
-msgid "Ukrainian"
-msgstr "ភាសាអ៊ុយក្រែន"
-
-#: conf/global_settings.py:69
-msgid "Simplified Chinese"
-msgstr "ភាសាចិនសាមញ្ញ"
-
-#: conf/global_settings.py:70
-msgid "Traditional Chinese"
-msgstr "ភាសាចិនបុរាណ"
-
-#: core/validators.py:63
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "ត្រូវបំពេញតែអក្សរឡាតាំង ចំនួនលេខ និង សញ្ញា _"
-
-#: core/validators.py:67
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "ត្រូវបំពេញតែអក្សរឡាតាំង ចំនួនលេខ និង សញ្ញា _ សញ្ញា - ឬ សញ្ញា / ។"
-
-#: core/validators.py:71
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "ត្រូវបំពេញតែអក្សរឡាតាំង ចំនួនលេខ និង សញ្ញា _ សញ្ញា - ។"
-
-#: core/validators.py:75
-msgid "Uppercase letters are not allowed here."
-msgstr "មិនអនុញ្ញាតអោយសរសេរអក្សរធំ។"
-
-#: core/validators.py:79
-msgid "Lowercase letters are not allowed here."
-msgstr "មិនអនុញ្ញាតអោយសរសេរអក្សរតូច។"
-
-#: core/validators.py:86
-msgid "Enter only digits separated by commas."
-msgstr "បំពេញតែលេខហើយផ្តាច់ចេញពីគ្នាដោយសញ្ញាក្បៀស។"
-
-#: core/validators.py:98
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "បំពេញអ៊ីម៉ែលហើយផ្តាច់ចេញពីគ្នាដោយសញ្ញាក្បៀស។"
-
-#: core/validators.py:102
-msgid "Please enter a valid IP address."
-msgstr "សូមបំពេញអាស័យដ្ឋាន IP។"
-
-#: core/validators.py:106
-msgid "Empty values are not allowed here."
-msgstr "មិនអនុញ្ញាតអោយមានចំនួនទទេ។"
-
-#: core/validators.py:110
-msgid "Non-numeric characters aren't allowed here."
-msgstr "មិនអនុញ្ញាតអោយសរសេរអក្សរដែលមិនមែនជាលេខ។"
-
-#: core/validators.py:114
-msgid "This value can't be comprised solely of digits."
-msgstr "មិនអាចអនុញ្ញាតអោយមានតែចំនួនលេខ។"
-
-#: core/validators.py:119
-msgid "Enter a whole number."
-msgstr "បំពេញចំនួនទាំងអស់។"
-
-#: core/validators.py:123
-msgid "Only alphabetical characters are allowed here."
-msgstr "អនុញ្ញាតអោយសរសេរតែអក្សរឡាតាំង។"
-
-#: core/validators.py:138
-msgid "Year must be 1900 or later."
-msgstr "ត្រូវបំពេញឆ្នាំចាប់ពី ១៩០០។"
-
-#: core/validators.py:142
-#, python-format
-msgid "Invalid date: %s."
-msgstr "កាលបរិច្ឆេទមិនត្រឹមត្រូវ : %s។"
-
-#: core/validators.py:146
-#: db/models/fields/__init__.py:415
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "សូមបំពេញកាលបរិច្ឆេទក្នុងទំរង់ជា YYYY-MM-DD ។"
-
-#: core/validators.py:151
-msgid "Enter a valid time in HH:MM format."
-msgstr "សូមបំពេញពេលវេលាក្នុងទំរង់ជា HH:MM ។"
-
-#: core/validators.py:155
-#: db/models/fields/__init__.py:477
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "សូមបំពេញកាលបរិច្ឆេទក្នុងទំរង់ជា YYYY-MM-DD HH:MM ។"
-
-#: core/validators.py:160
-msgid "Enter a valid e-mail address."
-msgstr "សូមបំពេញអ៊ីមែល"
-
-#: core/validators.py:172
-#: core/validators.py:401
-#: forms/__init__.py:661
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "មិនមានឯកសារត្រូវបានជ្រើសរើស។ សូមពិនិត្យប្រភេទឯកសារម្តងទៀត។"
-
-#: core/validators.py:176
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "រូបភាពដែលទាញយកមិនត្រឹមត្រូវ ប្រហែលជាមិនមែនជារូបភាព ឬក៏ជា រូបភាពខូច។"
-
-#: core/validators.py:183
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "URL រូបភាព %s មិនត្រឹមត្រូវ ។"
-
-#: core/validators.py:187
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "លេខទូរស័ព្ទត្រូវតែក្នុងទំរង់ជា XXX-XXX-XXXX ។ \"%s\" គឺមិនត្រឹមត្រូវទេ។"
-
-#: core/validators.py:195
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "URL ទៅកាន់វីដេអូ QuickTime %s មិនត្រឹមត្រូវ ។"
-
-#: core/validators.py:199
-msgid "A valid URL is required."
-msgstr "URL មិនត្រឹមត្រូវ។"
-
-#: core/validators.py:213
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"ចាំបាច់ HTML ដែលត្រឹមត្រូវ។ ខាងក្រោម​គឺ​ជាកំហុស​:\n"
-"%s"
-
-#: core/validators.py:220
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "XML មិនត្រឹមត្រូវ​: %s"
-
-#: core/validators.py:230
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL ដែលមិនត្រឹមត្រូវ: %s"
-
-#: core/validators.py:234
-#: core/validators.py:236
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "URL​ខូច: %s"
-
-#: core/validators.py:242
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "សូមបំពេញអក្សរកាត់រដ្ឋរបស់សហរដ្ឋអាមេរិកអោយបានត្រឹមត្រូវ។"
-
-#: core/validators.py:256
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "ពាក្យ %s មិនអនុញ្ញាតអោយប្រើនៅទីនេះទេ។"
-msgstr[1] "ពាក្យ %s មិនអនុញ្ញាតអោយប្រើនៅទីនេះទេ។"
-
-#: core/validators.py:263
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "ទិន្នន័យនៅកន្លែងនេះត្រូវតែដូច '%s'  ។"
-
-#: core/validators.py:282
-msgid "Please enter something for at least one field."
-msgstr "សូមបំពេញទិន្នន័យយ៉ាងតិចនៅមួយ​កន្លែង។"
-
-#: core/validators.py:291
-#: core/validators.py:302
-msgid "Please enter both fields or leave them both empty."
-msgstr "អាចបំពេញ ឬ មិនបំពេញ ទិន្នន័យនៅកន្លែងទាំងពីរនេះ។"
-
-#: core/validators.py:309
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "ទិន្នន័យកន្លែងនេះត្រូវបំពេញ​ប្រសិន​បើ %(field)s មានតំលៃ %(value)s"
-
-#: core/validators.py:321
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "ទិន្នន័យកន្លែងនេះត្រូវបំពេញ​ប្រសិន​បើ %(field)s មិនមានតំលៃ %(value)s"
-
-#: core/validators.py:340
-msgid "Duplicate values are not allowed."
-msgstr "មិនអនុញ្ញាតអោយមានតំលៃដូចគ្នា។"
-
-#: core/validators.py:363
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "ចំនួនត្រូវតែជាស្វ័យគុណរបស់ %s។"
-
-#: core/validators.py:374
-msgid "Please enter a valid decimal number."
-msgstr "សូមបំពេញចំនួនទសភាគអោយបានត្រឹមត្រូវ។"
-
-#: core/validators.py:378
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "សូមបំពេញចំនួនទសភាគយ៉ាងតិច  %sខ្ទង់។"
-msgstr[1] "សូមបំពេញចំនួនទសភាគយ៉ាងតិច  %sខ្ទង់។"
-
-#: core/validators.py:381
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "សូមបំពេញចំនួនទសភាគទាំងអស់  %sខ្ទង់។"
-msgstr[1] "សូមបំពេញចំនួនទសភាគទាំងអស់  %sខ្ទង់។"
-
-#: core/validators.py:384
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "សូមបំពេញចំនួនទសភាគយ៉ាងច្រើន  %sខ្ទង់។"
-msgstr[1] "សូមបំពេញចំនួនទសភាគយ៉ាងច្រើន  %sខ្ទង់។"
-
-#: core/validators.py:394
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "ឯកសារដែលទាញយកត្រូវមានទំហំយ៉ាងតិច %s បៃ។"
-
-#: core/validators.py:395
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "ឯកសារដែលទាញយកត្រូវមានទំហំអតិបរិមា %s បៃ។"
-
-#: core/validators.py:412
-msgid "The format for this field is wrong."
-msgstr "ទំរង់ទិន្នន័យនៅកន្លែងនេះមិនត្រឹមត្រូវ។"
-
-#: core/validators.py:427
-msgid "This field is invalid."
-msgstr "ទិន្នន័យកន្លែងនេះមិនត្រឹមត្រូវ។"
-
-#: core/validators.py:463
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "មិនអាចទាញយកពី  %s។"
-
-#: core/validators.py:466
-#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "ទទួលចំលើយ ​Content-Type header '%(contenttype)s' មិនត្រឹមត្រូវពី URL %(url)s ។"
-
-#: core/validators.py:499
-#, python-format
-msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
-msgstr "សូមបិទ ថាក់(tag) ដែលមិនទាន់បិទ %(tag)s នៅបន្ទាត់ %(line)s ។ (បន្ទាត់ដែលចាប់ផ្តើមជាមួយ \"%(start)s\".)"
-
-#: core/validators.py:503
-#, python-format
-msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
-msgstr "ពាក្យមួយចំនួននៅបន្ទាត់ %(line)s មិនអនុញ្ញាតអោយប្រើទេ។ (បន្ទាត់ចាប់ផ្តើមជាមួយ \"%(start)s\"។)"
-
-#: core/validators.py:508
-#, python-format
-msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
-msgstr "\"%(attr)s\" on line %(line)s គឺជាគុណលក្ខណៈ(attribute) មិនត្រឹមត្រូវ។ (បន្ទាត់ចាប់ផ្តើមជាមួយ \"%(start)s\".)"
-
-#: core/validators.py:513
-#, python-format
-msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
-msgstr "\"<%(tag)s>\" ថាក់(tag)នៅបន្ទាត់ %(line)s គឺមិនត្រឹមត្រូវ។ (បន្ទាត់ចាប់ផ្តើមជាមួយ \"%(start)s\".)"
-
-#: core/validators.py:517
-#, python-format
-msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
-msgstr "ថាក់ (tag)​នៅបន្ទាត់ %(line)s បាត់គុណលក្ខណៈ មួយ ឬ ច្រើន។(បន្ទាត់ចាប់ផ្តើមជាមួយ \"%(start)s\".)"
-
-#: core/validators.py:522
-#, python-format
-msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
-msgstr "គុណលក្ខណៈ \"%(attr)s\" នៅបន្ទាត់ %(line)s ពុំមានតំលៃត្រឹមត្រូវទេ។ (បន្ទាត់ចាប់ផ្តើមជាមួយ \"%(start)s\".)"
-
-#: views/generic/create_update.py:43
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "The %(verbose_name)s បានផ្លាស់ប្តូរដោយជោគជ័យ។"
-
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "The %(verbose_name)s​ បានលប់។ "
-
-#: db/models/manipulators.py:302
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s ជាមួយនឹងប្រភេទ %(type)s នេះមានម្តងរួចហើយនៅជាមួយ %(field)s"
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s ជាមួយឈ្មោះ %(fieldname)s នេះមានរួចរាល់ហើយ។"
-
-#: db/models/fields/__init__.py:114
-#: db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:551
-#: db/models/fields/__init__.py:562
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "ចាំបាច់បំពេញទិន្នន័យកន្លែងនេះ។"
-
-#: db/models/fields/__init__.py:340
-msgid "This value must be an integer."
-msgstr "តំលៃនេះត្រូវតែជាចំនួនលេខ។"
-
-#: db/models/fields/__init__.py:372
-msgid "This value must be either True or False."
-msgstr "តំលៃអាចជា True ឬ False។"
-
-#: db/models/fields/__init__.py:388
-msgid "This field cannot be null."
-msgstr "ចាំបាច់បំពេញទិន្នន័យកន្លែងនេះ។"
-
-#: db/models/fields/__init__.py:571
-msgid "Enter a valid filename."
-msgstr "សូមបំពេញឈ្មោះឯកសារអោយបានត្រឹមត្រូវ។"
-
-#: db/models/fields/related.py:51
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "សូមបំពេញ  %s អោយបានត្រឹមត្រូវ។"
-
-#: db/models/fields/related.py:618
-msgid "Separate multiple IDs with commas."
-msgstr "ផ្តាច់លេច ID ចេញពីគ្នាដោយក្បៀស។"
-
-#: db/models/fields/related.py:620
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "សូមចុចប៉ូតុន \"Control\", ឬ \"Command\" ចំពោះកុំព្យូទ័រ Mac, ដើម្បីជ្រើសរើសច្រើនជាងមួយ។"
-
-#: db/models/fields/related.py:664
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "សូមបំពេញលេខ %(self)s អោយបានត្រឹមត្រូវ។ តំលៃ %(value)r នេះមិនត្រឹមត្រូវទេ។"
-msgstr[1] "សូមបំពេញលេខ %(self)s អោយបានត្រឹមត្រូវ។ តំលៃ %(value)r នេះមិនត្រឹមត្រូវទេ។"
-
-#: forms/__init__.py:381
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "អត្ថបទរបស់អ្នកតិចជាង %s អក្សរ។"
-msgstr[1] ""
-
-msgid "Ensure this value has at most %d characters."
-msgstr "អត្ថបទរបស់អ្នកត្រូវតិចជាង %d អក្សរ។"
-
-#: newforms/fields.py:105
-#: newforms/fields.py:258
-#, python-format
-msgid "Ensure this value has at least %d characters."
-msgstr "អត្ថបទរបស់អ្នកត្រូវច្រើនជាង  %d អក្សរ។"
-
-#: forms/__init__.py:386
-msgid "Line breaks are not allowed here."
-msgstr "បន្ទាត់មិនអនុញ្ញាតនៅទីនេះទេ។"
-
-#: forms/__init__.py:487
-#: forms/__init__.py:560
-#: forms/__init__.py:599
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "សូមជ្រើសរើស ; '%(data)s' មិនមាននៅក្នុង %(choices)s"
-
-#: forms/__init__.py:663
-msgid "The submitted file is empty."
-msgstr "ពុំមានឯកសារ។​"
-
-#: forms/__init__.py:719
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "សូម​បំពេញ​លេខចន្លោះ​ពី​ -៣២.៧៦៧ និង ៣២.៧៦៧"
-
-#: forms/__init__.py:729
-msgid "Enter a positive number."
-msgstr "សូមបំពេញចំនួន​វិជ្ជមាន"
-
-#: forms/__init__.py:739
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "សូម​បំពេញ​លេខចន្លោះ​ពី​ ០ និង ៣២.៧៦៧"
-
-#: template/defaultfilters.py:401
-msgid "yes,no,maybe"
-msgstr "យល់ព្រម មិនយល់ព្រម​ ប្រហែល"
-
-msgid "Your username and password didn't match. Please try again."
-msgstr "ឈ្មោះជាសមាជិក និង ពាក្យ​សំងាត់​មិន​ត្រឹមត្រូវ។"
-
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "អ៊ីមែល នេះ មិនមាន​នៅក្នុង​ទិន្នន័យ​របស់​យើង​ខ្ញុំ​ទេ។"
-
-msgid "5-30 alphanumeric characters or underscores."
-msgstr "ត្រូវបំពេញអក្សរឡាតាំង (អក្សរ លេខ ឬ សញ្ញា _) ចំនួនពី​៥​ ទៅ ៣០។"
-
-msgid "Must be 5-30 alphanumeric characters or underscores."
-msgstr "ត្រូចវបំពេញអក្សរឡាតាំង (អក្សរ លេខ ឬ សញ្ញា _) ចំនួនពី​៥​ ទៅ ៣០។"
-
-msgid "Confirm password"
-msgstr "បំពេញពាក្យសំងាត់ម្តងទៀត"
-
-msgid "Please make sure your passwords match."
-msgstr "ពាក្យសំងាត់មិនដូចគ្នា។"
-
-msgid "The username \"%s\" is already taken."
-msgstr "ឈ្មោះជាសមាជិក  \"%s\" ត្រូវបានគេយករួចហើយ។ សូមជ្រើសរើសឈ្មោះជាសមាជិកផ្សេងទៀត។"
-
-msgid "The email \"%s\" existed."
-msgstr "អ៊ីមែល  \"%s\" មានរួចហើយ។ សូមជ្រើសរើសអ៊ីមែលផ្សេងទៀត។"
-
-msgid "Audio"
-msgstr "ចំរៀង"
-
-msgid "Video id"
-msgstr "លេខ វីដេអូ"
-
-msgid "Video title"
-msgstr "ចំណងជើើង  វីដេអូ"
-
-msgid "Video length"
-msgstr "ទំហំ  វីដេអូ"
-
-msgid "Outside url"
-msgstr "គេហទំព័រ​ពីក្រៅ"
-
-msgid "Receive name"
-msgstr "ឈ្មោះ​អ្នក​ទទួល"
-
-msgid "Receive email"
-msgstr "អ៊ីមែល​របស់​​អ្នក​ទទួល"
-
-msgid "Message"
-msgstr "អត្ថបទ"
-
-msgid "Sending date"
-msgstr "បញ្ជូន​នៅ​ថ្ងៃ"
-
-msgid "Received date"
-msgstr "​ថ្ងៃ​ទទួល"
-
-msgid "Send as private message"
-msgstr "ជាអត្ថបទ​ផ្ទាល់​ខ្លួន​"
-
-msgid "Sent"
-msgstr "បានបញ្ជូន​"
-
-msgid "Question"
-msgstr "សំណួរ"
-
-msgid "Answer"
-msgstr "ចំលើយ​"
-
-msgid "Tags"
-msgstr "ប្រភេទ​"
-
-msgid "Business"
-msgstr "ពាណិជ្ជកម្ម"
-
-msgid "Beauty & Style"
-msgstr "សោភ័ណភាព និង ម៉ូត​"
-
-msgid "Education"
-msgstr "ការអប់រំ​"
-
-msgid "Environment"
-msgstr "បរិដ្ឋាន"
-
-msgid "Family & Relationships"
-msgstr "គ្រួសារ និង សេចក្តីស្នេហា"
-
-msgid "Food & Drink"
-msgstr "ម្ហូប និង ភេសជ្ជៈ"
-
-msgid "General"
-msgstr "ផ្សេងៗ"
-
-msgid "Games & Recreation"
-msgstr "កំសាន្ត និង ហ្គេម"
-
-msgid "Health"
-msgstr "សុខភាព"
-
-msgid "Pets"
-msgstr "សត្វ ចិញ្ជឹម"
-
-msgid "Politics & Government"
-msgstr "រដ្ឋាភិបាល និង នយោបាយ"
-
-msgid "Sports"
-msgstr "កីឡា"
-
-msgid "Technology"
-msgstr "បច្ចេកវិទ្សា"
-
-msgid "Travel"
-msgstr "ដំណើរកំសាន្ត"
-
-msgid "Source"
-msgstr "ដកស្រង់ចេញ"
-
-msgid "Left column"
-msgstr "ជួរទីមួយ"
-
-msgid "Right column"
-msgstr "ជួរទីពីរ"
-
-msgid "Start date"
-msgstr "ចាប់ផ្តើមនៅ"
-
-msgid "End date"
-msgstr "បញ្ជប់នៅ"
-
diff --git a/parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 613f548..0000000
--- a/parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 6084219..0000000
--- a/parts/django/django/conf/locale/km/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,108 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: sengtha@e-khmer.com\n"
-"POT-Creation-Date: 2007-01-15 15:43+0200\n"
-"PO-Revision-Date: 2007-01-21 01:25+0900\n"
-"Last-Translator: Chay Sengtha <sengtha@e-khmer.com>\n"
-"Language-Team: Chay Sengtha <sengtha@e-khmer.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s ដែលអាច​ជ្រើសរើសបាន"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "ជ្រើសរើសទាំងអស់"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "បន្ថែម"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "លប់ចេញ"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s ដែលបានជ្រើសរើស"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "សូមជ្រើសរើសយក"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "លប់ចេញទាំងអស់"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid "January February March April May June July August September October November December"
-msgstr "January February March April May June July August September October November December"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M T W T F S"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "ឥឡូវនេះ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "នាឡិការ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "ជ្រើសរើសម៉ោង"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "អធ្រាត្រ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "ម៉ោង ៦ ព្រឹក"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "ពេលថ្ងែត្រង់"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "លប់ចោល"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "ថ្ងៃនេះ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "ប្រក្រតិទិន"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "ម្សិលមិញ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "ថ្ងៃស្អែក"
-
diff --git a/parts/django/django/conf/locale/km/__init__.py b/parts/django/django/conf/locale/km/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/km/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/km/formats.py b/parts/django/django/conf/locale/km/formats.py
deleted file mode 100644
index 3736d57..0000000
--- a/parts/django/django/conf/locale/km/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j ខែ F ឆ្នាំ Y'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = 'j ខែ F ឆ្នាំ Y, G:i:s'
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-SHORT_DATETIME_FORMAT = 'j M Y, G:i:s'
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/kn/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/kn/LC_MESSAGES/django.mo
deleted file mode 100644
index 8c9fe23..0000000
--- a/parts/django/django/conf/locale/kn/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/kn/LC_MESSAGES/django.po b/parts/django/django/conf/locale/kn/LC_MESSAGES/django.po
deleted file mode 100644
index 37c632c..0000000
--- a/parts/django/django/conf/locale/kn/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,2536 +0,0 @@
-# Kannada translation of Django.
-# Copyright (C) 2007 Translation Team <translation@sampada.info>
-# This file is distributed under the same license as the Django package.
-# Kannada Localization Team <translation@sampada.info>, 2007.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-09-25 15:43+0200\n"
-"PO-Revision-Date: 2007-01-08 20:22+0530\n"
-"Last-Translator: Kannada Localization Team <translation@sampada.info>\n"
-"Language-Team: Kannada <translation@sampada.info>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit"
-
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
-msgid "object ID"
-msgstr "ವಸ್ತುವಿನ ಐಡಿ"
-
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "ತಲೆಬರಹ"
-
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "ಟಿಪ್ಪಣಿ"
-
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "ಕ್ರಮಾಂಕ ೧"
-
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "ಕ್ರಮಾಂಕ ೨"
-
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "ಕ್ರಮಾಂಕ ೩ "
-
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "ಕ್ರಮಾಂಕ ೪"
-
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "ಕ್ರಮಾಂಕ ೫ "
-
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "ಕ್ರಮಾಂಕ ೬ "
-
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "ಕ್ರಮಾಂಕ ೭"
-
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "ಕ್ರಮಾಂಕ ೮"
-
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "ಕ್ರಮಬದ್ಧ ಕ್ರಮಾಂಕ"
-
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "ಸಲ್ಲಿಸಿದ ದಿನಾಂಕ/ಸಮಯ"
-
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
-msgid "is public"
-msgstr "ಸಾರ್ವಜನಿಕವಾಗಿದೆ"
-
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
-msgid "IP address"
-msgstr "IP ವಿಳಾಸ"
-
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "ತೆಗೆದು ಹಾಕಲಾಗಿದೆ"
-
-#: contrib/comments/models.py:86
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"ಟಿಪ್ಪಣಿ ಅನುಚಿತವಾಗಿ "
-"ಇದ್ದಲ್ಲಿ ಈ ಚೌಕದಲ್ಲಿ ಗುರುತು "
-"ಮಾಡಿ. ಅದರ ಬದಲಾಗಿ \"ಈ ಟಿಪ್ಪಣಿ "
-"ತೆಗೆದುಹಾಕಲಾಗಿದೆ\" ಎಂಬ "
-"ಸಂದೇಶವನ್ನು ತೋರಿಸಲಾಗುವುದು."
-
-#: contrib/comments/models.py:91
-msgid "comments"
-msgstr "ಟಿಪ್ಪಣಿಗಳು"
-
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
-msgid "Content object"
-msgstr "ಒಳವಿಷಯ ವಸ್ತು"
-
-#: contrib/comments/models.py:159
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"ಸಲ್ಲಿಸಿದವರು %(user)s ರವರು %(date)s\n"
-"\n"
-" ದಿನ/ಸಮಯಕ್ಕೆ %(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s ಸಲ್ಲಿಸಿದ್ದು"
-
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "ವ್ಯಕ್ತಿಯ ಹೆಸರು"
-
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "IP ವಿಳಾಸ"
-
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr ""
-"ಸಿಬ್ಬಂದಿಯಿಂದ ಅನುಮೋದನೆ "
-"ಪಡೆದಿದೆ"
-
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "ಉಚಿತ ಟಿಪ್ಪಣಿ"
-
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "ಉಚಿತ ಟಿಪ್ಪಣಿಗಳು"
-
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "ಅಂಕ"
-
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "ಅಂಕದ ದಿನಾಂಕ"
-
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "ಕರ್ಮ ಅಂಕ"
-
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "ಕರ್ಮ ಅಂಕಗಳು"
-
-#: contrib/comments/models.py:242
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr " %(user)s ಇಂದ %(score)d ಕ್ರಮಾಂಕ"
-
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"ಈ ಟಿಪ್ಪಣಿಯನ್ನು %(user)s ರವರು "
-"ಪತಾಕೆಯಿಂದ ಗುರುತು "
-"ಮಾಡಿದ್ದಾರೆ:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "ಪತಾಕೆ ದಿನಾಂಕ"
-
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "ಬಳಕೆದಾರ ಪತಾಕೆ"
-
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "ಬಳಕೆದಾರ ಪತಾಕೆಗಳು"
-
-#: contrib/comments/models.py:273
-#, python-format
-msgid "Flag by %r"
-msgstr "%r ಇಂದ ಪತಾಕೆ"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "ತೆಗೆದುಹಾಕಿದ ದಿನಾಂಕ"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "ನಿಯಂತ್ರಕರು ಅಳಿಸಿದ್ದು"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "ನಿಯಂತ್ರಕರು ಅಳಿಸಿದ್ದು"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr " %r ಇಂದ ನಿಯಂತ್ರಕರ ಅಳಿಸುವಿಕೆ "
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr ""
-"ಅನಾಮಧೇಯ ಬಳಕೆದಾರರು ಮತ "
-"ಹಾಕುವಂತಿಲ್ಲ"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "ತಪ್ಪು ಟಿಪ್ಪಣಿ ಐಡಿ"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr ""
-"ತಮಗೇ ಮತ ಹಾಕಿಕೊಳ್ಳುವಂತಿಲ್ಲ."
-
-#: contrib/comments/views/comments.py:27
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr ""
-"ನೀವು ಬೇರೆಯ ಕ್ರಮಾಂಕ "
-"ನೀಡಿರುವುದರಿಂದ ಈ ಕ್ರಮಾಂಕ "
-"ಅವಶ್ಯವಾಗಿದೆ."
-
-#: contrib/comments/views/comments.py:111
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comment:\n"
-"\n"
-"%(text)s"
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comments:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"%(count)s ಕ್ಕಿಂತಲೂ ಕಡಿಮೆ "
-"ಟಿಪ್ಪಣಿಗಳನ್ನು ಬರೆದಿರುವ "
-"ಸದಸ್ಯರಿಂದ ಈ ಟಿಪ್ಪಣಿ "
-"ಬರೆಯಲ್ಪಟ್ಟಿದೆ:\n"
-"\n"
-"%(text)s"
-"%(count)sಕ್ಕಿಂತಲೂ ಕಡಿಮೆ "
-"ಟಿಪ್ಪಣಿಗಳನ್ನು ಬರೆದಿರುವ "
-"ಸದಸ್ಯರಿಂದ ಈ ಟಿಪ್ಪಣಿ "
-"ಬರೆಯಲ್ಪಟ್ಟಿದೆ:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:116
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"ಈ ಟಿಪ್ಪಣಿಯನ್ನು ಅಪೂರ್ಣ "
-"ಮಾಹಿತಿಯುಳ್ಳ ಬಳಕೆದಾರ :\n"
-"\n"
-" %(text)s ರು ಸಲ್ಲಿಸಿದ್ದಾರೆ"
-
-#: contrib/comments/views/comments.py:188
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr ""
-"ಸಲ್ಲಿಕೆಗಳಿಗೆ ಮಾತ್ರ "
-"ಅನುಮತಿಯಿದೆ"
-
-#: contrib/comments/views/comments.py:192
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr ""
-"ಒಂದು ಅಥವಾ ಹೆಚ್ಚು ಅಗತ್ಯ "
-"ಅಂಶಗಳನ್ನು ಸಲ್ಲಿಸಿಲ್ಲ"
-
-#: contrib/comments/views/comments.py:196
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr ""
-"ಯಾರೋ ಟಿಪ್ಪಣಿಯನ್ನು "
-"ಬದಲಾಯಿಸಿದ್ದಾರೆ( ಭದ್ರತೆಯ "
-"ಉಲ್ಲಂಘನೆ)"
-
-#: contrib/comments/views/comments.py:206
-#: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-"ಟಿಪ್ಪಣಿ ನಮೂನೆಗೆ ತಪ್ಪು "
-"ಟಾರ್ಗೆಟ್ ಪ್ಯಾರಾಮೀಟರ್ ಇದೆ. "
-"ವಸ್ತುವಿನ ಐಡಿಯು "
-"ದೋಷಪೂರಿತವಾಗಿತ್ತು."
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr ""
-"ಟಿಪ್ಪಣಿ ನಮೂನೆ "
-"'ಮುನ್ನೋಟ'ವನ್ನಾಗಲೀ "
-"'ಸಲ್ಲಿಕೆ'ಯನ್ನಾಗಲೀ "
-"ಒದಗಿಸಲಿಲ್ಲ."
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "ಬಳಕೆದಾರನ ಹೆಸರು:"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Log out"
-msgstr "ಹೊರಕ್ಕೆ ಹೋಗಿ"
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "ಪ್ರವೇಶಪದ:"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr ""
-"ನಿಮ್ಮ ಪ್ರವೇಶಪದ ಮರೆತಿದ್ದೀರಾ?"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "ಕ್ರಮಾಂಕಗಳು"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "ಅವಶ್ಯ"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "ಐಚ್ಛಿಕ"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "ಭಾವಚಿತ್ರ ಸಲ್ಲಿಸಿ"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "ಟಿಪ್ಪಣಿ:"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "ಟಿಪ್ಪಣಿ ಮುನ್ನೋಟ"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "ನಿಮ್ಮ ಹೆಸರು:"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s ಇಂದ :</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
-msgid "All"
-msgstr "ಎಲ್ಲಾ"
-
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
-msgstr "ಯಾವುದೇ ದಿನಾಂಕ"
-
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
-msgstr "ಈದಿನ"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
-msgstr "ಕಳೆದ ೭ ದಿನಗಳು"
-
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
-msgstr "ಈ ತಿಂಗಳು"
-
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
-msgstr "ಈ ವರ್ಷ"
-
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "ಹೌದು"
-
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "ಇಲ್ಲ"
-
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr "ಗೊತ್ತಿಲ್ಲ(ದ/ದ್ದು)"
-
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "ಕ್ರಮದ(ಕ್ರಿಯೆಯ) ಸಮಯ"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "ವಸ್ತುವಿನ ಐಡಿ"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "ವಸ್ತು ಪ್ರಾತಿನಿಧ್ಯ"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "ಕ್ರಮದ(ಕ್ರಿಯೆಯ) ಪತಾಕೆ"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr ""
-"ಬದಲಾವಣೆಯ ಸಂದೇಶ/ಸಂದೇಶ ಬದಲಿಸಿ"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "ಲಾಗ್ ದಾಖಲೆ"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "ಲಾಗ್ ದಾಖಲೆಗಳು"
-
-#: contrib/admin/templatetags/admin_list.py:230
-msgid "All dates"
-msgstr "ಎಲ್ಲಾ ದಿನಾಂಕಗಳು"
-
-#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
-msgid ""
-"Please enter a correct username and password. Note that both fields are "
-"case-sensitive."
-msgstr ""
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ಬಳಕೆದಾರ-ಪದ "
-"ಮತ್ತು ಪ್ರವೇಶಪದ ಬರೆಯಿರಿ "
-".ಎರಡೂ ಇಂಗ್ಲೀಷಿನ ಸಣ್ಣ ಮತ್ತು "
-"ದೊಡ್ಡ ಅಕ್ಷರ ಸಂವೇದಿ "
-"ಎಂಬುದನ್ನು ಗಮನದಲ್ಲಿಡಿ"
-
-#: contrib/admin/views/decorators.py:24
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-msgstr "ಒಳಗೆ ಬನ್ನಿ"
-
-#: contrib/admin/views/decorators.py:62
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಒಳಬನ್ನಿ "
-"(ಲಾಗಿನ್ ಮಾಡಿ) . ನಿಮ್ಮ ಅಧಿವೇಶನ "
-"ಕೊನೆಗೊಂಡಿದೆ. "
-"ಚಿಂತಿಸಬೇಡಿ:ನಿಮ್ಮ "
-"ಸಲ್ಲಿಕೆಯನ್ನು ಉಳಿಸಲಾಗಿದೆ."
-
-#: contrib/admin/views/decorators.py:69
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"ಕುಕೀಗಳನ್ನು ಸ್ವೀಕರಿಸುವಂತೆ "
-"ನಿಮ್ಮ ಜಾಲವೀಕ್ಷಕವನ್ನು "
-"ಸಂರಚಿಸಲಾಗಿಲ್ಲ ಎಂದು "
-"ತೋರುತ್ತದೆ. ದಯವಿಟ್ಟು "
-"ಕುಕೀಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ , ಈ "
-"ಪುಟವನ್ನು ಮತ್ತೆ ಲೋಡ್ ಮಾಡಿ "
-"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿರಿ. "
-
-#: contrib/admin/views/decorators.py:83
-msgid "Usernames cannot contain the '@' character."
-msgstr ""
-"ಬಳಕೆದಾರ-ಹೆಸರುಗಳು '@' "
-"ಅಕ್ಷರವನ್ನು ಒಳಗೊಳ್ಳುವಂತಿಲ್ಲ"
-
-#: contrib/admin/views/decorators.py:85
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"ನಿಮ್ಮ ವಿ-ಅಂಚೆ ವಿಳಾಸವು ನಿಮ್ಮ "
-"ಬಳಕೆದಾರ-ಹೆಸರಲ್ಲ; ಬದಲಾಗಿ '%s' "
-"ಪ್ರಯತ್ನಿಸಿ."
-
-#: contrib/admin/views/main.py:223
-msgid "Site administration"
-msgstr "ತಾಣ ನಿರ್ವಹಣೆ"
-
-#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
-" %(name)s \"%(obj)s\" ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ "
-"ಸೇರಿಸಲಾಯಿತು."
-
-#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
-#: contrib/admin/views/auth.py:22
-msgid "You may edit it again below."
-msgstr ""
-"ನೀವು ಅದನ್ನು ಕೆಳಗೆ ಮತ್ತೆ "
-"ಬದಲಾಯಿಸಬಹುದು."
-
-#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
-#, python-format
-msgid "You may add another %s below."
-msgstr ""
-"ನೀವು ಕೆಳಗೆ ಇನ್ನೊಂದು %s "
-"ಸೇರಿಸಬಹುದು."
-
-#: contrib/admin/views/main.py:289
-#, python-format
-msgid "Add %s"
-msgstr "%s ಸೇರಿಸಿ"
-
-#: contrib/admin/views/main.py:335
-#, python-format
-msgid "Added %s."
-msgstr "%s ಸೇರಿಸಲಾಯಿತು."
-
-#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339
-msgid "and"
-msgstr "ಮತ್ತು"
-
-#: contrib/admin/views/main.py:337
-#, python-format
-msgid "Changed %s."
-msgstr "%s ಬದಲಾಯಿಸಲಾಯಿತು."
-
-#: contrib/admin/views/main.py:339
-#, python-format
-msgid "Deleted %s."
-msgstr "%s ತೆಗೆದುಹಾಕಲಾಯಿತು."
-
-#: contrib/admin/views/main.py:342
-msgid "No fields changed."
-msgstr "ಯಾವುದೇ ಅಂಶಗಳು ಬದಲಾಗಲಿಲ್ಲ."
-
-#: contrib/admin/views/main.py:345
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
-"%(name)s \"%(obj)s\" ಸಫಲವಾಗಿ "
-"ಬದಲಾಯಿಸಲಾಯಿತು."
-
-#: contrib/admin/views/main.py:353
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ "
-"ಸೇರಿಸಲಾಯಿತು. ನೀವು ಕೆಳಗೆ "
-"ಅದನ್ನು ಮತ್ತೆ ಬದಲಾಯಿಸಬಹುದು."
-
-#: contrib/admin/views/main.py:391
-#, python-format
-msgid "Change %s"
-msgstr "%s ಅನ್ನು ಬದಲಿಸು"
-
-#: contrib/admin/views/main.py:473
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr ""
-"%(name)s ನಲ್ಲಿ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು "
-"%(fieldname)s :%(obj)s"
-
-#: contrib/admin/views/main.py:478
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr ""
-"%(name)s ನಲ್ಲಿ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು "
-"%(fieldname)s :"
-
-#: contrib/admin/views/main.py:511
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
-"%(name)s \"%(obj)s\" ಯಶಸ್ವಿಯಾಗಿ "
-"ಅಳಿಸಲಾಯಿತು."
-
-#: contrib/admin/views/main.py:514
-msgid "Are you sure?"
-msgstr "ಖಚಿತಪಡಿಸುವಿರಾ? "
-
-#: contrib/admin/views/main.py:536
-#, python-format
-msgid "Change history: %s"
-msgstr "ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ: %s"
-
-#: contrib/admin/views/main.py:570
-#, python-format
-msgid "Select %s"
-msgstr "%s ಆಯ್ದುಕೊಳ್ಳಿ"
-
-#: contrib/admin/views/main.py:570
-#, python-format
-msgid "Select %s to change"
-msgstr "ಬದಲಾಯಿಸಲು %s ಆಯ್ದುಕೊಳ್ಳಿ"
-
-#: contrib/admin/views/main.py:758
-msgid "Database error"
-msgstr "ದತ್ತಸಂಚಯದ ದೋಷ"
-
-#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-msgid "tag:"
-msgstr "ಟ್ಯಾಗ್:"
-
-#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-msgid "filter:"
-msgstr "ಸೋಸಕ:"
-
-#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-msgid "view:"
-msgstr "ನೋಟ:"
-
-#: contrib/admin/views/doc.py:164
-#, python-format
-msgid "App %r not found"
-msgstr "%r ಅನ್ವಯಾಂಶ ಸಿಗಲಿಲ್ಲ"
-
-#: contrib/admin/views/doc.py:171
-#, python-format
-msgid "Model %r not found in app %r"
-msgstr ""
-"%r ಅನ್ವಯಾಂಶದಲ್ಲಿ %r ಮಾಡೆಲ್ಲು "
-"ಸಿಗಲಿಲ್ಲ"
-
-#: contrib/admin/views/doc.py:183
-#, python-format
-msgid "the related `%s.%s` object"
-msgstr "ಸಂಬಂಧಿಸಿದ `%s.%s` ವಸ್ತು"
-
-#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
-#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
-msgid "model:"
-msgstr "ಮಾಡೆಲ್:"
-
-#: contrib/admin/views/doc.py:214
-#, python-format
-msgid "related `%s.%s` objects"
-msgstr "ಸಂಬಂಧಿಸಿದ `%s.%s` ವಸ್ತುಗಳು"
-
-#: contrib/admin/views/doc.py:219
-#, python-format
-msgid "all %s"
-msgstr "ಎಲ್ಲಾ %s"
-
-#: contrib/admin/views/doc.py:224
-#, python-format
-msgid "number of %s"
-msgstr "%s ಗಳ ಸಂಖ್ಯೆ"
-
-#: contrib/admin/views/doc.py:229
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s ವಸ್ತುಗಳ ಅಂಶಗಳು"
-
-#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
-#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
-msgid "Integer"
-msgstr "ಸಂಖ್ಯೆ"
-
-#: contrib/admin/views/doc.py:292
-msgid "Boolean (Either True or False)"
-msgstr "ಬೂಲಿಯನ್( ನಿಜ ಅಥವಾ ಸುಳ್ಳು)"
-
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "(%(maxlength)s ವರೆಗಿನ ) ಅಕ್ಷರಪುಂಜ"
-
-#: contrib/admin/views/doc.py:294
-msgid "Comma-separated integers"
-msgstr ""
-"ಅಲ್ಪವಿರಾಮ(,) ದಿಂದ ಬೇರ್ಪಟ್ಟ "
-"ಸಂಖ್ಯೆಗಳು"
-
-#: contrib/admin/views/doc.py:295
-msgid "Date (without time)"
-msgstr "ದಿನಾಂಕ (ಸಮಯರಹಿತ)"
-
-#: contrib/admin/views/doc.py:296
-msgid "Date (with time)"
-msgstr "ದಿನಾಂಕ(ಸಮಯದೊಂದಿಗೆ)"
-
-#: contrib/admin/views/doc.py:297
-msgid "E-mail address"
-msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ"
-
-#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
-#: contrib/admin/views/doc.py:302
-msgid "File path"
-msgstr "ಕಡತದ ಸ್ಥಾನಪಥ"
-
-#: contrib/admin/views/doc.py:300
-msgid "Decimal number"
-msgstr "ದಶಮಾನ ಸಂಖ್ಯೆ"
-
-#: contrib/admin/views/doc.py:306
-msgid "Boolean (Either True, False or None)"
-msgstr ""
-"ಬೂಲಿಯನ್( ನಿಜ ಅಥವಾ ಸುಳ್ಳು "
-"ಅಥವಾ ಯಾವುದೂ ಅಲ್ಲ)"
-
-#: contrib/admin/views/doc.py:307
-msgid "Relation to parent model"
-msgstr ""
-"ಹಿರಿಯ ಮಾಡೆಲ್‍ನೊಂದಿಗಿನ ಸಂಬಂಧ"
-
-#: contrib/admin/views/doc.py:308
-msgid "Phone number"
-msgstr "ದೂರವಾಣಿ ಸಂಖ್ಯೆ"
-
-#: contrib/admin/views/doc.py:313
-msgid "Text"
-msgstr "ಪಠ್ಯ"
-
-#: contrib/admin/views/doc.py:314
-msgid "Time"
-msgstr "ಸಮಯ"
-
-#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:316
-msgid "U.S. state (two uppercase letters)"
-msgstr ""
-"ಅಮೇರಿಕಾ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನದ "
-"ರಾಜ್ಯ ( ಎರಡು ಇಂಗ್ಲೀಷ್ "
-"ದೊಡ್ಡಕ್ಷರಗಳು)"
-
-#: contrib/admin/views/doc.py:317
-msgid "XML text"
-msgstr "XML ಪಠ್ಯ"
-
-#: contrib/admin/views/doc.py:343
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr ""
-"%s URL ಸ್ವರೂಪದ್ದಾಗಿ ತೋರುವದಿಲ್ಲ."
-
-#: contrib/admin/views/auth.py:28
-msgid "Add user"
-msgstr "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಿ"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "ವಿವರಮಾಹಿತಿ"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Change password"
-msgstr "ಪ್ರವೇಶಪದ ಬದಲಿಸಿ"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "ಪ್ರಾರಂಭಸ್ಥಳ(ಮನೆ)"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
-msgid "History"
-msgstr "ಚರಿತ್ರೆ"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "ದಿನಾಂಕ/ಸಮಯ"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "ಬಳಕೆದಾರ"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "ಕ್ರಮ(ಕ್ರಿಯೆ)"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "N j, Y, P"
-
-#: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"ಈ ವಸ್ತುವಿಗೆ ಬದಲಾವಣೆಯ "
-"ಇತಿಹಾಸವಿಲ್ಲ. ಅದು ಬಹುಶಃ ಈ "
-"ಆಡಳಿತತಾಣದ ಮೂಲಕ "
-"ಸೇರಿಸಲ್ಪಟ್ಟಿಲ್ಲ."
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "ಜಾಂಗೋ ತಾಣದ ಆಡಳಿತಗಾರರು"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "ಜಾಂಗೋ ಆಡಳಿತ"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "ಸರ್ವರ್ ದೋಷ"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "ಸರ್ವರ್ ದೋಷ(೫೦೦)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "ಸರ್ವರ್ ದೋಷ<em>(೫೦೦)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via "
-"e-mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"ಇಲ್ಲಿ ಒಂದು ತಪ್ಪಾಗಿದೆ. ಅದನ್ನು "
-"ತಾಣದ ಆಡಳಿತಗಾರರಿಗೆ ವರದಿ "
-"ಮಾಡಲಾಗಿದ್ದು ಶೀಘ್ರದ್ದಲ್ಲಿ "
-"ಸರಿಪಡಿಸಲಾಗುವದು. ನಿಮ್ಮ "
-"ತಾಳ್ಮೆಗೆ ಧನ್ಯವಾದಗಳು."
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "ಪುಟ ಸಿಗಲಿಲ್ಲ"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-"ಕ್ಷಮಿಸಿ, ನೀವು ಕೇಳಿದ ಪುಟ "
-"ಸಿಗಲಿಲ್ಲ"
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-"%(name)s ಅನ್ವಯಾಂಶದಲ್ಲಿ "
-"ಮಾಡೆಲ್ಲುಗಳು ಲಭ್ಯ."
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/index.html:28
-#: contrib/admin/templates/admin/change_form.html:15
-msgid "Add"
-msgstr "ಸೇರಿಸಿ"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "ಬದಲಿಸಿ/ಬದಲಾವಣೆ"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr ""
-"ಯಾವುದನ್ನೂ ತಿದ್ದಲು ನಿಮಗೆ "
-"ಅನುಮತಿ ಇಲ್ಲ ."
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "ಇತ್ತೀಚಿನ ಕ್ರಮಗಳು"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "ನನ್ನ ಕ್ರಮಗಳು"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "ಯಾವುದೂ ಲಭ್ಯವಿಲ್ಲ"
-
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s ಸೇರಿಸಿ"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr ""
-"ನೀವು <a "
-"href=\"/password_reset/\">ಪ್ರವೇಶಪದವನ್ನು "
-"ಮರೆತಿದ್ದೀರಾ</a>?"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "ಸುಸ್ವಾಗತ."
-
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "ಅಳಿಸಿಹಾಕಿ"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"'%(escaped_object)s' %(object_name)s ಅನ್ನು "
-"ತೆಗೆದುಹಾಕುವುದರಿಂದ ಸಂಬಂಧಿತ "
-"ವಸ್ತುಗಳೂ ಕಳೆದುಹೋಗುತ್ತವೆ. "
-"ಆದರೆ ನಿಮ್ಮ ಖಾತೆಗೆ ಕೆಳಕಂಡ "
-"ಬಗೆಗಳ ವಸ್ತುಗಳನ್ನು "
-"ತೆಗೆದುಹಾಕಲು ಅನುಮತಿಯಿಲ್ಲ."
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
-#,fuzzy
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"ದಿಟವಾಗಿಯೂ, ನೀವು %(object_name)s "
-"\"%(escaped_object)ಗಳನ್ನು\"? "
-"ತೆಗೆದುಹಾಕಬಯಸಿದ್ದೀರಾ? "
-"ಸಂಬಂಧಪಟ್ಟ ಕೆಳಕಂಡ ಎಲ್ಲವನ್ನೂ "
-"ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "ಹೌದು,ನನಗೆ ಖಚಿತವಿದೆ"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "%(filter_title)s ಇಂದ"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "ಹೋಗಿ"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgstr "೧ ಫಲಿತಾಂಶ"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "ಒಟ್ಟು %(full_result_count)s"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "ಎಲ್ಲವನ್ನೂ ತೋರಿಸು"
-
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "ಸೋಸಕ"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "ತಾಣದಲ್ಲಿ ನೋಡಿ"
-
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgstr ""
-"ದಯಮಾಡಿ ಕೆಳಗಿನ ತಪ್ಪನ್ನು "
-"ಸರಿಪಡಿಸಿ "
-"ದಯಮಾಡಿ ಕೆಳಗಿನ ತಪ್ಪುಗಳನ್ನು "
-"ಸರಿಪಡಿಸಿ. "
-
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "ಅನುಕ್ರಮದಲ್ಲಿ ಜೋಡಣೆ"
-
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "ಅನುಕ್ರಮ:"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "ಹೊಸದರಂತೆ ಉಳಿಸಿ"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr ""
-"ಉಳಿಸಿ ಮತ್ತು ಇನ್ನೊಂದನ್ನು "
-"ಸೇರಿಸಿ"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr ""
-"ಉಳಿಸಿ ಮತ್ತು ತಿದ್ದುವುದನ್ನು "
-"ಮುಂದುವರಿಸಿರಿ."
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "ಉಳಿಸಿ"
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"ಡಾಟಾಬೇಸನ್ನು ಇನ್ಸ್ಟಾಲ್ "
-"ಮಾಡುವಾಗ ಏನೋ ತಪ್ಪಾಗಿದೆ. ಸೂಕ್ತ "
-" ಡಾಟಾಬೇಸ್ ಕೋಷ್ಟಕಗಳು "
-"ರಚನೆಯಾಗಿ ಅರ್ಹ ಬಳಕೆದಾರರು "
-"ಅವುಗಳನ್ನು ಓದಬಹುದಾಗಿದೆಯೇ "
-"ಎಂಬುದನ್ನು ಖಾತರಿ "
-"ಪಡಿಸಿಕೊಳ್ಳಿ."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"ಮೊದಲು ಬಳಕೆದಾರ-ಹೆಸರು ಮತ್ತು "
-"ಪ್ರವೇಶಪದವನ್ನು ಕೊಡಿರಿ. ನಂತರ, "
-"ನೀವು ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳನ್ನು "
-"ಬದಲಿಸಬಹುದಾಗಿದೆ."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "ಬಳಕೆದಾರ-ಹೆಸರು"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-msgid "Password"
-msgstr "ಪ್ರವೇಶಪದ"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-msgid "Password (again)"
-msgstr "ಪ್ರವೇಶಪದ(ಇನ್ನೊಮ್ಮೆ)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-msgid "Enter the same password as above, for verification."
-msgstr ""
-"ಖಚಿತಗೊಳಿಸಲು ಮೇಲಿನ "
-"ಪ್ರವೇಶಪದವನ್ನು ಇನ್ನೊಮ್ಮೆ "
-"ಬರೆಯಿರಿ."
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "ಪ್ರವೇಶಪದ ಬದಲಾವಣೆ"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "ಪ್ರವೇಶಪದ ಬದಲಾವಣೆ ಯಶಸ್ವಿ"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr ""
-"ನಿಮ್ಮ ಪ್ರವೇಶಪದ "
-"ಬದಲಾಯಿಸಲಾಗಿದೆ"
-
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-#: contrib/admin/templates/registration/password_reset_done.html:4
-msgid "Password reset"
-msgstr "ಪ್ರವೇಶಪದವನ್ನು ಬದಲಿಸುವಿಕೆ"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll reset "
-"your password and e-mail the new one to you."
-msgstr ""
-"ಪ್ರವೇಶಪದವನ್ನು ಮರೆತಿದ್ದೀರಾ? "
-"ನಿಮ್ಮ ವಿ-ಅಂಚೆಯ ವಿಳಾಸವನ್ನು "
-"ಕೆಳಗೆ ಸೂಚಿಸಿರಿ, ನಾವು ನಿಮ್ಮ "
-"ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಿ "
-"ಅದನ್ನು ರವಾನಿಸುತ್ತೇವೆ."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr ""
-"ನನ್ನ ಪ್ರವೇಶಪದವನ್ನು ಮತ್ತೆ "
-"ನಿರ್ಧರಿಸಿ "
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-"ಈದಿನ ತಮ್ಮ ಅತ್ಯಮೂಲ್ಯವಾದ "
-"ಸಮಯವನ್ನು ನಮ್ಮ ತಾಣದಲ್ಲಿ "
-"ಕಳೆದುದಕ್ಕಾಗಿ ಧನ್ಯವಾದಗಳು."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "ಮತ್ತೆ ಒಳಬನ್ನಿ"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr ""
-"ಪ್ರವೇಶಪದದ ಮರುನಿರ್ಧಾರ "
-"ಸಾಧ್ಯವಾಗಿದೆ"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed a new password to the e-mail address you submitted. You "
-"should be receiving it shortly."
-msgstr ""
-"ನಾವು ಹೊಸ ಪ್ರವೇಶಪದವನ್ನು "
-"ನಿಮ್ಮ ವಿ-ಅಂಚೆಗೆ ಕಳಿಸಿದ್ದೇವೆ. "
-"ಕೆಲವೇ ಕ್ಷಣಗಳಲ್ಲಿ ನೀವದನ್ನು "
-"ಪಡೆಯಲಿದ್ದೀರಿ."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"ಭದ್ರತೆಯ ದೃಷ್ಟಿಯಿಂದ "
-"ದಯವಿಟ್ಟು ನಿಮ್ಮ ಹಳೆಯ "
-"ಪ್ರವೇಶಪದವನ್ನು ಸೂಚಿಸಿರಿ. "
-"ಆನಂತರ ನೀವು ಸರಿಯಾಗಿ "
-"ಬರೆದಿದ್ದೀರೆಂದು ನಾವು "
-"ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಹೊಸ "
-"ಪ್ರವೇಶಪದವನ್ನು ಎರಡು ಬಾರಿ "
-"ಬರೆಯಿರಿ."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "ಹಳೆಯ ಪ್ರವೇಶಪದ:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "ಹೊಸ ಪ್ರವೇಶಪದ:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "ಪ್ರವೇಶಪದವನ್ನು ಖಚಿತಪಡಿಸಿ:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "ನನ್ನ ಪ್ರವೇಶಪದ ಬದಲಿಸಿ"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"ಪ್ರವೇಶಪದದ ಮರುನಿರ್ಧಾರವನ್ನು "
-"ನೀವು ಕೇಳಿದುದರಿಂದ ಈ "
-"ವಿ-ಅಂಚೆಯನ್ನು "
-"ಪಡೆಯುತ್ತಿದ್ದೀರಿ."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr ""
-"%(site_name)s ತಾಣದಲ್ಲಿ ನಿಮ್ಮ "
-"ಬಳಕೆದಾರ-ಖಾತೆಗಾಗಿ"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "ನಿಮ್ಮ ಹೊಸ ಪ್ರವೇಶಪದ : %(new_password)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr ""
-"ನಿಸ್ಸಂಕೋಚವಾಗಿ ಈ ಪುಟಕ್ಕೆ "
-"ಹೋಗಿ ಈ ಪ್ರವೇಶಪದವನ್ನು "
-"ಬದಲಿಸಿರಿ."
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr ""
-"ನೀವು ಮರೆತಿದ್ದಲ್ಲಿ , ನಿಮ್ಮ "
-"ಬಳಕೆದಾರ-ಹೆಸರು"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr ""
-"ನಮ್ಮ ತಾಣವನ್ನು "
-"ಬಳಸಿದ್ದಕ್ದಾಗಿ ಧನ್ಯವಾದಗಳು!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s ತಂಡ"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "ಚಿಕ್ಕ ಪುಟಗುರುತುಗಳು"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr ""
-"ಮಾಹಿತಿಯ ಚಿಕ್ಕ ಪುಟಗುರುತುಗಳು"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p "
-"class=\"help\">ಸಣ್ಣ್ಪುಟಗುರುತುಗಳನ್ನು "
-"ಅನುಸ್ಥಾಪಿಸಲು ಕೊಂಡಿಯನ್ನು "
-"ಪುಟಗುರುತು ಉಪಕರಣಪಟ್ಟಿ(ಟೂಲ್ "
-"ಬಾರ್)ಕಡೆಗೆ ಎಳೆದೊಯ್ಯಿರಿ,\n"
-" ಅಥವಾ ಕೊಂಡಿಯ ಮೇಲೆ "
-"ಮೂಷಿಕ(ಮೌಸ್)ದ ಬಲಬಟನ್ನನ್ನು "
-"ಒತ್ತಿ ಪುಟಗುರುತುಗಳಿಗೆ "
-"ಸೇರಿಸಿಕೊಳ್ಳಿ. ಈಗ \n"
-" ನೀವು ಸಣ್ಣಪುಟಗುರುತುಗಳನ್ನು "
-"ತಾಣದ ಯಾವ ಪುಟದಿಂದ ಬೇಕಾದರೂ "
-"ಆಯ್ಕೆಮಾಡಿಕೊಳ್ಳಬಹುದು.\n"
-"ನೆನಪಿರಲಿ, ಕೆಲವು "
-"ಸಣ್ಣಪುಟಗುರುತುಗಳಿಗೆ ನೀವು ಈ "
-"ತಾಣವನ್ನು ಆಂತರಿಕ (\"internal\") ಎಂದು "
-"ಸೂಚಿತವಾಗಿರುವ ಗಣಕದಿಂದ "
-"ವೀಕ್ಷಿಸಬೇಕಾಗುತ್ತದೆ.\n"
-"( ನಿಮ್ಮ ಗಣಕವು \"internal\" ಹೌದೇ "
-"ಅಲ್ಲವೇ ಎಂದು "
-"ಗೊತ್ತಿಲ್ಲದಿದ್ದರೆ , ಗಣಕದ "
-"ಆಡಳಿತಗಾರರನ್ನು ಕೇಳಿರಿ).</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "ಈ ಪುಟದ ಬಗೆಗಿನ ಮಾಹಿತಿ"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"ನಿಮ್ಮನ್ನು ಯಾವುದೇ ಪುಟದಿಂದ ಆ "
-"ಪುಟವನ್ನು ಸೃಷ್ಟಿಸುವ ನೋಟದ "
-"ಮಾಹಿತಿಪುಟಕ್ಕೆ ಕೊಂಡೊಯ್ಯುವದು"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "ವಸ್ತುವಿನ ಐಡಿ ತೋರಿಸಿ"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"ಏಕೈಕ ವಸ್ತುವನ್ನು "
-"ಪ್ರತಿನಿಧಿಸುವ ಪುಟಗಳ ವಿಶಿಷ್ಠ "
-"ಐಡಿ ಮತ್ತು ಒಳವಿಷಯಬಗೆಯನ್ನು "
-"ತೋರಿಸುತ್ತದೆ."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr ""
-"ಈ ವಸ್ತುವನ್ನು ಬದಲಿಸಿ(ಈಗಿನ "
-"ಕಿಟಕಿಯಲ್ಲಿ)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"ಏಕೈಕ ವಸ್ತುವನ್ನು "
-"ಪ್ರತಿನಿಧಿಸುವ ಪುಟಗಳಿಗಾಗಿ "
-"ಆಡಳಿತಪುಟಕ್ಕೆ ಒಯ್ಯುತ್ತದೆ"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr ""
-"ಈ ವಸ್ತುವನ್ನು ಬದಲಿಸಿ(ಹೊಸ "
-"ಕಿಟಕಿಯಲ್ಲಿ)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"ಮೇಲಿನಂತೆ, ಆದರೆ "
-"ಆಡಳಿತಪುಟವನ್ನು ಹೊಸ "
-"ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆಯುವದು."
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "ದಿನಾಂಕ:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "ಸಮಯ:"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "ಈಗ:"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "ಬದಲಿಸಿ / ಬದಲಾವಣೆ :"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಂದ->"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: "
-"'/events/search/'."
-msgstr ""
-"ಇದು ಡೊಮೈನ್ ಹೊರತುಪಡಿಸಿದ "
-"ಸಂಪೂರ್ಣ ಪಥವಾಗಿರಬೇಕು "
-"ಉದಾ.'/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಗೆ->"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"ಇದು ಮೇಲಿನಂತೆ ಸಂಪೂರ್ಣ "
-"ಪಥವಾದರೂ ಆಗಿರಬಹುದು ಅಥವಾ "
-"'http://'ದಿಂದ ಆರಂಭವಾಗುವ ಸಂಪೂರ್ಣ URL "
-"ಆಗಿರಬಹುದು."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "ಪುನರ್ನಿರ್ದೇಶನ"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "ಪುನರ್ನಿರ್ದೇಶನ(ಗಳು)"
-
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"ಉದಾ:'/about/contact/'. ಮೊದಲು ಮತ್ತು "
-"ಕೊನೆಯಲ್ಲಿ ಓರೆಗೆರೆ (/) ಇರುವಂತೆ "
-"ನೋಡಿಕೊಳ್ಳಿ."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "ಶೀರ್ಷಿಕೆ"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "ಒಳವಿಷಯ"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr ""
-"ಟಿಪ್ಪಣಿಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "ಟೆಂಪ್ಲೇಟಿನ ಹೆಸರು"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"ಉದಾ:'flatpages/contact_page.html'. ಇದನ್ನು "
-"ಕೊಡದಿದ್ದರೆ ಗಣಕವ್ಯವಸ್ಥೆಯು "
-"'flatpages/default.html' ಅನ್ನು ಬಳಸುವದು."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "ನೋಂದಾವಣೆ ಅಗತ್ಯವಿದೆ."
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"ಇದರಲ್ಲಿ ಗುರುತು ಮಾಡಿದರೆ, "
-"ಒಳಬಂದ (ಲಾಗಿನ್ ಆದ) ಬಳಕೆದಾರರು "
-"ಮಾತ್ರ ಪುಟವನ್ನು ನೋಡಬಹುದು."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "ಚಪ್ಪಟೆ ಪುಟ"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "ಚಪ್ಪಟೆ ಪುಟಗಳು"
-
-#: contrib/auth/views.py:39
-msgid "Logged out"
-msgstr "ಹೊರಬರಲಾಗಿದೆ"
-
-#: contrib/auth/models.py:38 contrib/auth/models.py:57
-msgid "name"
-msgstr "ಹೆಸರು"
-
-#: contrib/auth/models.py:40
-msgid "codename"
-msgstr "ಸಾಂಕೇತಿಕ ಹೆಸರು"
-
-#: contrib/auth/models.py:42
-msgid "permission"
-msgstr "ಅನುಮತಿ"
-
-#: contrib/auth/models.py:43 contrib/auth/models.py:58
-msgid "permissions"
-msgstr "ಅನುಮತಿಗಳು"
-
-#: contrib/auth/models.py:60
-msgid "group"
-msgstr "ಗುಂಪು"
-
-#: contrib/auth/models.py:61 contrib/auth/models.py:100
-msgid "groups"
-msgstr "ಗುಂಪುಗಳು"
-
-#: contrib/auth/models.py:90
-msgid "username"
-msgstr "ಬಳಕೆದಾರ-ಹೆಸರು"
-
-#: contrib/auth/models.py:90
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"೩೦ ಅಥವಾ ಕಡಿಮೆ ಅಕ್ಷರಗಳು "
-"ಅವಶ್ಯ. ( ಅಕ್ಷರಗಳು , ಅಂಕೆಗಳು "
-"ಮತ್ತು ಅಂಡರ್ಸ್ಕೋರ್(_) ಗಳು "
-"ಮಾತ್ರ)"
-
-#: contrib/auth/models.py:91
-msgid "first name"
-msgstr "ಮೊದಲ ಹೆಸರು"
-
-#: contrib/auth/models.py:92
-msgid "last name"
-msgstr "ಕೊನೆಯ ಹೆಸರು"
-
-#: contrib/auth/models.py:93
-msgid "e-mail address"
-msgstr "ವಿ-ಅಂಚೆ ವಿಳಾಸ"
-
-#: contrib/auth/models.py:94
-msgid "password"
-msgstr "ಪ್ರವೇಶಪದ"
-
-#: contrib/auth/models.py:94
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr " '[algo]$[salt]$[hexdigest]' ಬಳಸಿ"
-
-#: contrib/auth/models.py:95
-msgid "staff status"
-msgstr "ಸಿಬ್ಬಂದಿ ಸ್ಥಿತಿ"
-
-#: contrib/auth/models.py:95
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"ಬಲಕೆದಾರರು ಈ ಆಡಳಿತ ತಾಣಕ್ಕೆ "
-"ಪ್ರವೇಶಪಡೆಯಬಹುದೇ ಎಂಬುದನ್ನು "
-"ತಿಳಿಸುತ್ತದೆ."
-
-#: contrib/auth/models.py:96
-msgid "active"
-msgstr "ಸಕ್ರಿಯ"
-
-#: contrib/auth/models.py:96
-msgid ""
-"Designates whether this user can log into the Django admin. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"ಈ ಬಳಕೆದಾರರು ಜಾಂಗೋ "
-"ಆಡಳಿತಪುಟಕ್ಕೆ "
-"ಪ್ರವೇಶಪಡೆಯಬಹುದೇ ಎಂಬುದನ್ನು "
-"ತಿಳಿಸುತ್ತದೆ. ಖಾತೆಗಳನ್ನು "
-"ಕಿತ್ತುಹಾಕುವ ಬದಲು ಇದನ್ನು "
-"ಆಯ್ಕೆಯನ್ನು ತೆಗೆದುಹಾಕಿರಿ."
-
-#: contrib/auth/models.py:97
-msgid "superuser status"
-msgstr "ಮಹಾಬಳಕೆದಾರನ ಸ್ಧಿತಿ"
-
-#: contrib/auth/models.py:97
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"ಈ ಸದಸ್ಯರು ಸುವ್ಯಕ್ತವಾಗಿ "
-"ನೀಡದಿದ್ದರೂ ಎಲ್ಲಾ "
-"ಅನುಮತಿಗಳನ್ನು ಪಡೆದಿರುವರು "
-"ಎಂಬುದನ್ನು ಸೂಚಿಸುತ್ತದೆ."
-
-#: contrib/auth/models.py:98
-msgid "last login"
-msgstr "ಕಡೇ ಸಾರಿ ಒಳಬಂದದ್ದು"
-
-#: contrib/auth/models.py:99
-msgid "date joined"
-msgstr "ಸೇರಿದ ದಿನಾಂಕ"
-
-#: contrib/auth/models.py:101
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"ವೈಯಕ್ತಿಕವಾಗಿ ನೀಡಲಾಗಿರುವ "
-"ಅನುಮತಿಗಳ ಜೊತೆಗೆ, ಈ ಸದಸ್ಯರು "
-"ತಮ್ಮ ಗುಂಪಿಗೆ ನೀಡಲಾಗಿರುವ "
-"ಅನುಮತಿಗಳನ್ನೂ ಕೂಡ "
-"ಪಡೆಯುತ್ತಾರೆ."
-
-#: contrib/auth/models.py:102
-msgid "user permissions"
-msgstr "ಬಳಕೆದಾರ ಅನುಮತಿಗಳು"
-
-#: contrib/auth/models.py:105
-msgid "user"
-msgstr "ಬಳಕೆದಾರ"
-
-#: contrib/auth/models.py:106
-msgid "users"
-msgstr "ಬಳಕೆದಾರರು"
-
-#: contrib/auth/models.py:111
-msgid "Personal info"
-msgstr "ವೈಯುಕ್ತಿಕ ಮಾಹಿತಿ"
-
-#: contrib/auth/models.py:112
-msgid "Permissions"
-msgstr "ಅನುಮತಿಗಳು"
-
-#: contrib/auth/models.py:113
-msgid "Important dates"
-msgstr "ಮಹತ್ವದ ದಿನಾಂಕಗಳು"
-
-#: contrib/auth/models.py:114
-msgid "Groups"
-msgstr "ಗುಂಪುಗಳು"
-
-#: contrib/auth/models.py:256
-msgid "message"
-msgstr "ಸಂದೇಶ"
-
-#: contrib/auth/forms.py:52
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"ನಿಮ್ಮ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ "
-"ಕುಕೀಗಳು "
-"ಸಕ್ರಿಯಗೊಳಿಸಲ್ಪಟ್ಟಂತಿಲ್ಲ. "
-"ಒಳಬರಲು ಕುಕೀಗಳು ಅಗತ್ಯ. "
-
-#: contrib/auth/forms.py:61
-msgid "This account is inactive."
-msgstr "ಈ ಖಾತೆಯು ನಿಷ್ಕ್ರಿಯವಾಗಿದೆ"
-
-#: contrib/contenttypes/models.py:20
-msgid "python model class name"
-msgstr ""
-"ಪೈಥಾನ್ ಮಾಡೆಲ್ ಕ್ಲಾಸಿನ ಹೆಸರು"
-
-#: contrib/contenttypes/models.py:23
-msgid "content type"
-msgstr "ಒಳವಿಷಯದ ಬಗೆ"
-
-#: contrib/contenttypes/models.py:24
-msgid "content types"
-msgstr "ಒಳವಿಷಯದ ಬಗೆಗಳು"
-
-#: contrib/sessions/models.py:51
-msgid "session key"
-msgstr "ಅಧಿವೇಶನದ ಕೀಲಿಕೈ"
-
-#: contrib/sessions/models.py:52
-msgid "session data"
-msgstr "ಅಧಿವೇಶನದ ದತ್ತಾಂಶ"
-
-#: contrib/sessions/models.py:53
-msgid "expire date"
-msgstr "ಅವಧಿಮೀರುವ ದಿನಾಂಕ"
-
-#: contrib/sessions/models.py:57
-msgid "session"
-msgstr "ಅಧಿವೇಶನ"
-
-#: contrib/sessions/models.py:58
-msgid "sessions"
-msgstr "ಅಧಿವೇಶನಗಳು"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "ಡೊಮೈನ್ ಹೆಸರು"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "ತೋರಿಸುವ ಹೆಸರು"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "ತಾಣ"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "ತಾಣಗಳು"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "ಸೋಮವಾರ"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "ಮಂಗಳವಾರ"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "ಬುಧವಾರ"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "ಗುರುವಾರ"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "ಶುಕ್ರವಾರ"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "ಶನಿವಾರ"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "ರವಿವಾರ"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "ಜನವರಿ"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "ಫೆಬ್ರುವರಿ"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
-msgstr "ಮಾರ್ಚ್"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
-msgstr "ಎಪ್ರಿಲ್"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
-msgstr "ಮೇ"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
-msgstr "ಜೂನ್"
-
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
-msgstr "ಜುಲೈ"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "ಆಗಸ್ಟ್"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "ಸೆಪ್ಟೆಂಬರ್"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "ಅಕ್ಟೋಬರ್"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "ನವೆಂಬರ್"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "ಡಿಸೆಂಬರ್"
-
-#: utils/dates.py:19
-msgid "jan"
-msgstr "ಜನವರಿ"
-
-#: utils/dates.py:19
-msgid "feb"
-msgstr "ಫೆಬ್ರವರಿ"
-
-#: utils/dates.py:19
-msgid "mar"
-msgstr "ಮಾರ್ಚ್"
-
-#: utils/dates.py:19
-msgid "apr"
-msgstr "ಏಪ್ರಿಲ್"
-
-#: utils/dates.py:19
-msgid "may"
-msgstr "ಮೇ"
-
-#: utils/dates.py:19
-msgid "jun"
-msgstr "ಜೂನ್"
-
-#: utils/dates.py:20
-msgid "jul"
-msgstr "ಜುಲೈ"
-
-#: utils/dates.py:20
-msgid "aug"
-msgstr "ಆಗಸ್ಟ್"
-
-#: utils/dates.py:20
-msgid "sep"
-msgstr "ಸೆಪ್ಟೆಂಬರ್"
-
-#: utils/dates.py:20
-msgid "oct"
-msgstr "ಅಕ್ಟೋಬರ್"
-
-#: utils/dates.py:20
-msgid "nov"
-msgstr "ನವೆಂಬರ್"
-
-#: utils/dates.py:20
-msgid "dec"
-msgstr "ಡಿಸೆಂಬರ್"
-
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "ಜನವರಿ."
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "ಫೆಬ್ರವರಿ."
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "ಆಗಸ್ಟ್."
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "ಸೆಪ್ಟೆಂಬರ್."
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "ಅಕ್ಟೋಬರ್."
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "ನವೆಂಬರ್."
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "ಡಿಸೆಂಬರ್."
-
-#: utils/timesince.py:12
-msgid "year"
-msgstr "ವರ್ಷ"
-
-#: utils/timesince.py:13
-msgid "month"
-msgstr "ತಿಂಗಳು"
-
-#: utils/timesince.py:14
-msgid "week"
-msgstr "ವಾರ"
-
-#: utils/timesince.py:15
-msgid "day"
-msgstr "ದಿನ"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgstr "ಘಂಟೆ"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgstr "ನಿಮಿಷ"
-
-#: utils/translation/trans_real.py:362
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:363
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: utils/translation/trans_real.py:364
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:380
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:381
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: conf/global_settings.py:39
-msgid "Arabic"
-msgstr "ಅರೇಬಿಕ್"
-
-#: conf/global_settings.py:40
-msgid "Bengali"
-msgstr "ಬೆಂಗಾಲಿ"
-
-#: conf/global_settings.py:41
-msgid "Czech"
-msgstr "ಝೆಕ್"
-
-#: conf/global_settings.py:42
-msgid "Welsh"
-msgstr "ವೆಲ್ಷ್"
-
-#: conf/global_settings.py:43
-msgid "Danish"
-msgstr "ಡ್ಯಾನಿಷ್"
-
-#: conf/global_settings.py:44
-msgid "German"
-msgstr "ಜರ್ಮನ್"
-
-#: conf/global_settings.py:45
-msgid "Greek"
-msgstr "ಗ್ರೀಕ್"
-
-#: conf/global_settings.py:46
-msgid "English"
-msgstr "ಇಂಗ್ಲಿಷ್"
-
-#: conf/global_settings.py:47
-msgid "Spanish"
-msgstr "ಸ್ಪ್ಯಾನಿಷ್"
-
-#: conf/global_settings.py:48
-msgid "Argentinean Spanish"
-msgstr "ಅರ್ಜೆಂಟೈನಾದ ಸ್ಪ್ಯಾನಿಷ್"
-
-#: conf/global_settings.py:49
-msgid "Finnish"
-msgstr "ಫಿನ್ನಿಶ್"
-
-#: conf/global_settings.py:50
-msgid "French"
-msgstr "ಫ್ರೆಂಚ್"
-
-#: conf/global_settings.py:51
-msgid "Galician"
-msgstr "ಗ್ಯಾಲಿಶಿಯನ್"
-
-#: conf/global_settings.py:52
-msgid "Hungarian"
-msgstr "ಹಂಗೇರಿಯನ್"
-
-#: conf/global_settings.py:53
-msgid "Hebrew"
-msgstr "ಹೀಬ್ರೂ"
-
-#: conf/global_settings.py:54
-msgid "Icelandic"
-msgstr "ಐಸ್‍ಲ್ಯಾಂಡಿಕ್"
-
-#: conf/global_settings.py:55
-msgid "Italian"
-msgstr "ಇಟಾಲಿಯನ್"
-
-#: conf/global_settings.py:56
-msgid "Japanese"
-msgstr "ಜಪಾನೀಸ್"
-
-#: conf/global_settings.py:57
-msgid "Dutch"
-msgstr "ಡಚ್"
-
-#: conf/global_settings.py:58
-msgid "Norwegian"
-msgstr "ನಾರ್ವೇಜಿಯನ್"
-
-#: conf/global_settings.py:59
-msgid "Brazilian"
-msgstr "ಬ್ರಾಝಿಲಿಯನ್"
-
-#: conf/global_settings.py:60
-msgid "Romanian"
-msgstr "ರೋಮೇನಿಯನ್"
-
-#: conf/global_settings.py:61
-msgid "Russian"
-msgstr "ರಶಿಯನ್"
-
-#: conf/global_settings.py:62
-msgid "Slovak"
-msgstr "ಸ್ಲೋವಾಕ್"
-
-#: conf/global_settings.py:63
-msgid "Slovenian"
-msgstr "ಸ್ಲೋವೇನಿಯನ್"
-
-#: conf/global_settings.py:64
-msgid "Serbian"
-msgstr "ಸೆರ್ಬಿಯನ್"
-
-#: conf/global_settings.py:65
-msgid "Swedish"
-msgstr "ಸ್ವೀಡಿಷ್"
-
-#: conf/global_settings.py:66
-msgid "Tamil"
-msgstr "ತಮಿಳು"
-
-#: conf/global_settings.py:67
-msgid "Turkish"
-msgstr "ಟರ್ಕಿಶ್"
-
-#: conf/global_settings.py:68
-msgid "Ukrainian"
-msgstr "ಯುಕ್ರೇನಿಯನ್"
-
-#: conf/global_settings.py:69
-msgid "Simplified Chinese"
-msgstr "ಸರಳೀಕೃತ ಚೈನೀಸ್"
-
-#: conf/global_settings.py:70
-msgid "Traditional Chinese"
-msgstr "ಸಂಪ್ರದಾಯಿಕ ಚೈನೀಸ್ "
-
-#: core/validators.py:63
-msgid "This value must contain only letters, numbers and underscores."
-msgstr ""
-"ಈ ಬೆಲೆಯು ಕೇವಲ ಅಕ್ಷರಗಳು , "
-"ಅಂಕೆಗಳು ಮತ್ತು ಅಂಡರ್ಸ್ಕೋರ್(_) "
-"ಗಳನ್ನು ಒಳಗೊಂಡಿರಬೇಕು"
-
-#: core/validators.py:67
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"ಈ ಬೆಲೆಯು ಅಕ್ಷರಗಳು , ಅಂಕೆಗಳು , "
-"ಅಡಿಗೆರೆ ಅರ್ಥಾತ್ "
-"ಅಂಡರ್ಸ್ಕೋರ್(_) ,ಅಡ್ಡಗೆರೆ "
-"ಅರ್ಥಾತ್ ಡ್ಯಾಷ್(-) ಮತ್ತು "
-"ಓರೆಗೆರೆ ಅರ್ಥಾತ್ ಸ್ಲ್ಯಾಶ್ (/) "
-"ಗಳನ್ನು ಒಳಗೊಳ್ಳಬಹುದು."
-
-#: core/validators.py:71
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr ""
-"ಈ ಬೆಲೆಯು ಕೇವಲ ಅಕ್ಷರಗಳು , "
-"ಅಂಕೆಗಳು ಮತ್ತು ಅಂಡರ್ಸ್ಕೋರ್(_) "
-"ಮತ್ತು ಹೈಫನ್(-)ಗಳನ್ನು "
-"ಒಳಗೊಂಡಿರಬೇಕು"
-
-#: core/validators.py:75
-msgid "Uppercase letters are not allowed here."
-msgstr ""
-"ಇಂಗ್ಲೀಷ್ ದೊಡ್ಡಕ್ಷರಗಳನ್ನು "
-"ಇಲ್ಲಿ ಬಳಸುವಂತಿಲ್ಲ"
-
-#: core/validators.py:79
-msgid "Lowercase letters are not allowed here."
-msgstr ""
-"ಇಂಗ್ಲೀಷ್ ಸಣ್ಣಕ್ಷರಗಳನ್ನು "
-"ಇಲ್ಲಿ ಬಳಸುವಂತಿಲ್ಲ"
-
-#: core/validators.py:86
-msgid "Enter only digits separated by commas."
-msgstr ""
-"ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ ಬೇರ್ಪಟ್ಟ "
-"ಅಂಕೆಗಳನ್ನು ಮಾತ್ರ ಬರೆಯಿರಿ."
-
-#: core/validators.py:98
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr ""
-"ಇ-ಅಂಚೆಗಳ ವಿಳಾಸಗಳನ್ನು, "
-"ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ "
-"ಬೇರ್ಪಟ್ಟಿರುವಂತೆ ಸೂಚಿಸಿರಿ."
-
-#: core/validators.py:102
-msgid "Please enter a valid IP address."
-msgstr "ಸರಿಯಾದ IP ವಿಳಾಸ ಬರೆಯಿರಿ"
-
-#: core/validators.py:106
-msgid "Empty values are not allowed here."
-msgstr "ಇಲ್ಲಿ ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ"
-
-#: core/validators.py:110
-msgid "Non-numeric characters aren't allowed here."
-msgstr ""
-"ಅಂಕೆಗಳಲ್ಲದೆ ಯಾವದೇ "
-"ಅಕ್ಷರಗಳನ್ನು ಇಲ್ಲಿ "
-"ಬಳಸುವಂತಿಲ್ಲ"
-
-#: core/validators.py:114
-msgid "This value can't be comprised solely of digits."
-msgstr ""
-"ಈ ಬೆಲೆಯಲ್ಲಿ ಅಂಕೆಗಳಷ್ಟೇ "
-"ಇರುವಂತಿಲ್ಲ"
-
-#: core/validators.py:119
-msgid "Enter a whole number."
-msgstr "ಪೂರ್ಣಾಂಕವೊಂದನ್ನು ಬರೆಯಿರಿ"
-
-#: core/validators.py:123
-msgid "Only alphabetical characters are allowed here."
-msgstr ""
-"ವರ್ಣಮಾಲೆಯ ಅಕ್ಷರಗಳನ್ನು "
-"ಮಾತ್ರ ಇಲ್ಲಿ ಬಳಸಬಹುದು."
-
-#: core/validators.py:138
-msgid "Year must be 1900 or later."
-msgstr ""
-"ವರ್ಷವು ೧೯೦೦ ಅಥವಾ "
-"ನಂತರದ್ದಿರಬೇಕು."
-
-#: core/validators.py:142
-#, python-format
-msgid "Invalid date: %s."
-msgstr "ತಪ್ಪು ದಿನಾಂಕ: %s."
-
-#: core/validators.py:146 db/models/fields/__init__.py:415
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr ""
-"ಸರಿಯಾದ ದಿನಾಂಕವನ್ನು "
-"ವವವವ-ತಿತಿ-ದಿದಿ ರೀತಿಗೆ "
-"ಹೊಂದುವಂತೆ ಸೂಚಿಸಿರಿ."
-
-#: core/validators.py:151
-msgid "Enter a valid time in HH:MM format."
-msgstr ""
-"HH:MM ರೂಪದಲ್ಲಿ ಸರಿಯಾದ ಸಮಯವನ್ನು "
-"ಬರೆಯಿರಿ"
-
-#: core/validators.py:155 db/models/fields/__init__.py:477
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr ""
-"ಸರಿಯಾದ ದಿನಾಂಕ/ವೇಳೆಯನ್ನು "
-"ವವವವ-ತಿತಿ-ದಿದಿ ಗಗ:ನಿನಿ "
-"ರೀತಿಗೆ ಹೊಂದುವಂತೆ ಸೂಚಿಸಿರಿ."
-
-#: core/validators.py:160
-msgid "Enter a valid e-mail address."
-msgstr ""
-"ಕ್ರಮಬದ್ಧ ವಿ-ವಿಳಾಸವೊಂದನ್ನು "
-"ಇಲ್ಲಿ ಬರೆಯಿರಿ"
-
-#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"ಯಾವದೇ ಕಡತವನ್ನೂ "
-"ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ.ನಮೂನೆಯ ಮೇಲಿನ "
-"ಸಂಕೇತೀಕರಣ ಬಗೆಯನ್ನು "
-"ಪರೀಕ್ಷಿಸಿ."
-
-#: core/validators.py:176
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"ಸರಿಯಾದ ಚಿತ್ರವನ್ನು ಏರಿಸಿ. "
-"ನೀವು ಏರಿಸಿದ ಕಡತವು ಚಿತ್ರವಲ್ಲ "
-"ಅಥವಾ ಅದು ಕೆಟ್ಟು ಹೋಗಿರುವ "
-"ಚಿತ್ರ. "
-
-#: core/validators.py:183
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr ""
-"%s URL ಸರಿಯಾದ ಚಿತ್ರದೆಡೆಗೆ "
-"ಒಯ್ಯುತ್ತಿಲ್ಲ."
-
-#: core/validators.py:187
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"ದೂರವಾಣಿ ಅಂಕೆಗಳು XXX-XXX-XXXX "
-"ರೀತಿಯಲ್ಲಿರಬೇಕು. \"%s\" "
-"ತಪ್ಪಾಗಿರುತ್ತದೆ."
-
-#: core/validators.py:195
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr ""
-"%s URL ಸರಿಯಾದ ಕ್ವಿಕ್‍ಟೈಮ್ "
-"ದೃಶ್ಯದೆಡೆಗೆ ಒಯ್ಯುತ್ತಿಲ್ಲ."
-
-#: core/validators.py:199
-msgid "A valid URL is required."
-msgstr "ಸರಿಯಾದ URL ಅವಶ್ಯವಿದೆ"
-
-#: core/validators.py:213
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"ಸರಿಯಾದ HTML ಅವಶ್ಯ. ಇಲ್ಲಿನ "
-"ನಿರ್ದಿಷ್ಟ ತಪ್ಪುಗಳು:\n"
-"%s"
-
-#: core/validators.py:220
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "ತಪ್ಪು XML: %s"
-
-#: core/validators.py:230
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "ತಪ್ಪು URL: %s"
-
-#: core/validators.py:234 core/validators.py:236
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "%s ಈ URL ಮುರಿದ ಕೊಂಡಿಯಾಗಿದೆ."
-
-#: core/validators.py:242
-msgid "Enter a valid U.S. state abbreviation."
-msgstr ""
-" ಅಮೇರಿಕೆಯ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನದ "
-"ರಾಜ್ಯದ ಸರಿಯಾದ "
-"ಸಂಕ್ಷಿಪ್ತರೂಪವನ್ನು ಕೊಡಿ."
-
-#: core/validators.py:256
-#, python-format
-#,fuzzy
-msgid "Watch your mouth! The word %s is not allowed here."
-msgstr ""
-"ನಾಲಿಗೆ ಬಿಗಿ ಹಿಡಿಯಿರಿ! %s "
-"ಶಬ್ದವನ್ನು ಇಲ್ಲಿ "
-"ಬಳಸುವಂತಿಲ್ಲ."
-"ನಾಲಿಗೆ ಬಿಗಿ ಹಿಡಿಯಿರಿ! %s ಈ "
-"ಶಬ್ದಗಳನ್ನು ಇಲ್ಲಿ "
-"ಬಳಸುವಂತಿಲ್ಲ."
-
-#: core/validators.py:263
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr ""
-"ಈ ಅಂಶವು '%s' ಅಂಶದೊಂದಿಗೆ "
-"ಹೊಂದಿಕೊಳ್ಳಬೇಕು."
-
-#: core/validators.py:282
-msgid "Please enter something for at least one field."
-msgstr ""
-"ಕನಿಷ್ಠ ಒಂದು ಅಂಶದಲ್ಲಿ "
-"ಏನನ್ನಾದರೂ ಬರೆಯಿರಿ."
-
-#: core/validators.py:291 core/validators.py:302
-msgid "Please enter both fields or leave them both empty."
-msgstr ""
-"ಎರಡೂ ಅಂಶಗಳನ್ನು ಭರತಿ ಮಾಡಿರಿ "
-"ಅಥವಾ ಎರಡನ್ನೂ ಖಾಲಿಯಾಗಿಡಿ."
-
-#: core/validators.py:309
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr ""
-" %(field)s ಇದು %(value)s ಆಗಿದ್ದರೆ ಈ "
-"ಅಂಶವನ್ನು ಕೊಡಲೇಬೇಕು"
-
-#: core/validators.py:321
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr ""
-" %(field)s ಇದು %(value)s ಆಗಿಲ್ಲದಿದ್ದರೆ ಈ "
-"ಅಂಶವನ್ನು ಕೊಡಲೇಬೇಕು"
-
-#: core/validators.py:340
-msgid "Duplicate values are not allowed."
-msgstr ""
-"ಪಡಿಯಚ್ಚುಬೆಲೆಗಳಿಗೆ "
-"ಅನುಮತಿಯಿಲ್ಲ"
-
-#: core/validators.py:363
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "ಈ ಬೆಲೆಯು %sದ ಘಾತವಾಗಿರಬೇಕು."
-
-#: core/validators.py:374
-msgid "Please enter a valid decimal number."
-msgstr ""
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
-"ಸಂಖ್ಯೆ ಬರೆಯಿರಿ"
-
-#: core/validators.py:378
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-"Please enter a valid decimal number with at most %s total digits."
-msgstr ""
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
-"ಸಂಖ್ಯೆಯನ್ನು - ಹೆಚ್ಚೆಂದರೆ "
-"ಒಟ್ಟು %s ಅಂಕೆ ಇರುವಂತೆ - "
-"ಬರೆಯಿರಿ."
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
-"ಸಂಖ್ಯೆಯನ್ನು - ಹೆಚ್ಚೆಂದರೆ "
-"ಒಟ್ಟು %s ಅಂಕೆಗಳು ಇರುವಂತೆ - "
-"ಬರೆಯಿರಿ."
-
-#: core/validators.py:381
-#, python-format
-msgid ""
-"Please enter a valid decimal number with a whole part of at most %s digit."
-"Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr ""
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
-"ಸಂಖ್ಯೆಯನ್ನು - ಪೂರ್ಣಾಂಕ ಭಾಗವು "
-"ಹೆಚ್ಚೆಂದರೆ ಒಟ್ಟು %s ಅಂಕೆ "
-"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
-"ಸಂಖ್ಯೆಯನ್ನು - ಪೂರ್ಣಾಂಕ ಭಾಗವು "
-"ಹೆಚ್ಚೆಂದರೆ ಒಟ್ಟು %s ಅಂಕೆಗಳು "
-"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
-
-#: core/validators.py:384
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr ""
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
-"ಸಂಖ್ಯೆಯನ್ನು - ದಶಮಾಂಶ ಭಾಗವು "
-"ಹೆಚ್ಚೆಂದರೆ ಒಟ್ಟು %s ಸ್ಥಾನ "
-"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
-"ಸಂಖ್ಯೆಯನ್ನು - ದಶಮಾಂಶ ಭಾಗವು "
-"ಹೆಚ್ಚೆಂದರೆ %s ಸ್ಥಾನಗಳು "
-"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
-
-#: core/validators.py:394
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr ""
-"ನೀವು ಏರಿಸಿದ ಕಡತವು ಕನಿಷ್ಟ %s "
-"ಬೈಟ್‍ಗಳಷ್ಟು ದೊಡ್ಡದಿದೆ ಎಂದು "
-"ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ."
-
-#: core/validators.py:395
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr ""
-"ನೀವು ಏರಿಸಿದ ಕಡತವು %s "
-"ಬೈಟ್‍ಗಳಿಗಿಂತ ಹೆಚ್ಚಿರದ ಹಾಗೆ "
-"ನೋಡಿಕೊಳ್ಳಿ."
-
-#: core/validators.py:412
-msgid "The format for this field is wrong."
-msgstr "ಈ ಅಂಶದ ಸ್ವರೂಪವು ತಪ್ಪಾಗಿದೆ"
-
-#: core/validators.py:427
-msgid "This field is invalid."
-msgstr "ಈ ಅಂಶವು ತಪ್ಪಾಗಿದೆ"
-
-#: core/validators.py:463
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr ""
-" %s ದಿಂದ ಏನನ್ನೂ "
-"ಹೊರತೆಗೆದುಕೊಳ್ಳಲಾಗಲಿಲ್ಲ."
-
-#: core/validators.py:466
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-" %(url)s ಈ URL ತಪ್ಪು ಒಳವಿಷಯ-ಬಗೆಯ "
-"ಶಿರೋ‍ಭಾಗ '%(contenttype)s' ಅನ್ನು "
-"ಮರಳಿಸಿತು."
-
-#: core/validators.py:499
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"ದಯವಿಟ್ಟು %(line)s - ಸಾಲಿನಿಂದ "
-"ಮುಚ್ಚಿರದ %(tag)s ಟ್ಯಾಗ್ ಅನ್ನು "
-"ಮುಚ್ಚಿರಿ . (ಸಾಲು \"%(start)s\" ಎಂದು "
-"ಆರಂಭವಾಗುತ್ತದೆ.)"
-
-#: core/validators.py:503
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-" %(line)s ಸಾಲಿನಲ್ಲಿ ಆರಂಭವಾಗುವ ಕೆಲ "
-"ಪಠ್ಯಭಾಗವನ್ನು ಆ ಸಂದರ್ಭದಲ್ಲಿ "
-"ಬಳಸಲಾಗದು.(ಸಾಲು \"%(start)s\" ಎಂದು "
-"ಆರಂಭವಾಗುತ್ತದೆ.)"
-
-#: core/validators.py:508
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-" %(line)sನೆ ಸಾಲಿನಲ್ಲಿರುವ \"%(attr)s\" "
-"ತಪ್ಪು ಗುಣಧರ್ಮವಾಗಿದೆ . (ಸಾಲು "
-"\"%(start)s\" ಎಂದು ಆರಂಭವಾಗುತ್ತದೆ.)"
-
-#: core/validators.py:513
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-" %(line)s ನೆ ಸಾಲಿನಲ್ಲಿರುವ \"<%(tag)s>\" "
-"ತಪ್ಪು ಟ್ಯಾಗ್ ಆಗಿದೆ . (ಸಾಲು "
-"\"%(start)s\" ಎಂದು ಆರಂಭವಾಗುತ್ತದೆ.)"
-
-#: core/validators.py:517
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-" %(line)s ನೆ ಸಾಲಿನಲ್ಲಿರುವ ಟ್ಯಾಗ್ "
-"ಗೆ ಅಗತ್ಯವಾದ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು "
-"ಗುಣಧರ್ಮಗಳು ಕಾಣೆಯಾಗಿವೆ . "
-"(ಸಾಲು \"%(start)s\" ಎಂದು "
-"ಆರಂಭವಾಗುತ್ತದೆ.)"
-
-#: core/validators.py:522
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-" %(line)s ನೆ ಸಾಲಿನಲ್ಲಿರುವ \"%(attr)s\" ಗೆ "
-"ತಪ್ಪು ಬೆಲೆ ಇದೆ. (ಸಾಲು \"%(start)s\" "
-"ಎಂದು ಆರಂಭವಾಗುತ್ತದೆ.)"
-
-#: views/generic/create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr ""
-" %(verbose_name)s ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ "
-"ನಿರ್ಮಿಸಲಾಯಿತು."
-
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr ""
-" %(verbose_name)s ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ "
-"ಮಾರ್ಪಡಿಸಲಾಯಿತು."
-
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr ""
-" %(verbose_name)s ಅನ್ನು "
-"ತೆಗೆದುಹಾಕಲಾಯಿತು"
-
-#: db/models/manipulators.py:302
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-"ಕೊಟ್ಟಿರುವ %(field)sಗೆ ಈ %(type)s "
-"ಹೊಂದಿರುವ %(object)s ಈಗಾಗಲೇ ಇದೆ."
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr ""
-"ಈ %(fieldname)s ಹೊಂದಿರುವ %(optname)s ಈಗಾಗಲೇ "
-"ಇದೆ."
-
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "ಈ ಅಂಶ ಅಗತ್ಯ."
-
-#: db/models/fields/__init__.py:340
-msgid "This value must be an integer."
-msgstr ""
-"ಈ ಬೆಲೆಯು ಪೂರ್ಣ ಸಂಖ್ಯೆ ಇರಬೇಕು."
-
-#: db/models/fields/__init__.py:372
-msgid "This value must be either True or False."
-msgstr ""
-"ಈ ಬೆಲೆಯು ಹೌದು ಅಥವಾ ಇಲ್ಲ "
-"ಇರಬೇಕು."
-
-#: db/models/fields/__init__.py:388
-msgid "This field cannot be null."
-msgstr ""
-"ಈ ಅಂಶವನ್ನು ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ."
-
-#: db/models/fields/__init__.py:571
-msgid "Enter a valid filename."
-msgstr ""
-"ಸರಿಯಾದ ಕಡತದ ಹೆಸರನ್ನು "
-"ಬರೆಯಿರಿ"
-
-#: db/models/fields/related.py:51
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "ಸರಿಯಾದ %s ಅನ್ನು ಬರೆಯಿರಿ ."
-
-#: db/models/fields/related.py:618
-msgid "Separate multiple IDs with commas."
-msgstr ""
-"ಅನೇಕ ಐಡಿಗಳನ್ನು "
-"ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ "
-"ಬೇರ್ಪಡಿಸಿರಿ"
-
-#: db/models/fields/related.py:620
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚನ್ನು "
-"ಆಯ್ದುಕೊಳ್ಳಲು ಮ್ಯಾಕ್ ಗಣಕದ "
-"ಮೇಲೆ \"ಕಂಟ್ರೋಲ್\", ಅಥವಾ "
-"\"ಕಮ್ಯಾಂಡ್\" ಅನ್ನು ಒತ್ತಿ "
-"ಹಿಡಿಯಿರಿ."
-
-#: db/models/fields/related.py:664
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr ""
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ %(self)s "
-"ಐಡಿಗಳನ್ನು ಸೂಚಿಸಿರಿ . ಈಗ "
-"ಸೂಚಿಸಿದ %(value)r ತಪ್ಪಾಗಿದೆ."
-"ದಯವಿಟ್ಟು ಸರಿಯಾದ %(self)s "
-"ಐಡಿಗಳನ್ನು ಸೂಚಿಸಿರಿ . ಈಗ "
-"ಸೂಚಿಸಿದ %(value)s ತಪ್ಪಾಗಿವೆ"
-
-#: forms/__init__.py:381
-#, python-format
-#,fuzzy
-msgid "Ensure your text is less than %s character."
-msgstr ""
-"ನಿಮ್ಮ ಗದ್ಯ %s ಅಕ್ಷರಕ್ಕಿಂತ "
-"ಕಡಿಮೆ ಇರುವಂತೆ ಜಾಗ್ರತೆ ವಹಿಸಿ."
-"ನಿಮ್ಮ ಗದ್ಯ %s ಅಕ್ಷರಗಳಿಗಿಂತ "
-"ಕಡಿಮೆ ಇರುವಂತೆ ಜಾಗ್ರತೆ ವಹಿಸಿ."
-
-#: forms/__init__.py:386
-msgid "Line breaks are not allowed here."
-msgstr ""
-" ಇಲ್ಲಿ "
-"ಸಾಲುಗಳನ್ನುತುಂಡರಿಸುವಂತಿಲ್ಲ"
-
-#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr ""
-"ಸರಿಯಾದ ಆಯ್ಕೆಯನ್ನು "
-"ಆಯ್ದುಕೊಳ್ಳಿರಿ.'%(data)s' %(choices)s "
-"ನಲ್ಲಿಲ್ಲ."
-
-#: forms/__init__.py:663
-msgid "The submitted file is empty."
-msgstr "ಸಲ್ಲಿಸಲಾದ ಕಡತ ಖಾಲಿ ಇದೆ."
-
-#: forms/__init__.py:719
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr ""
-"-೩೨,೭೬೮ ಹಾಗೂ ೩೨,೭೬೭ ರ ನಡುವಿನ "
-"ಪೂರ್ಣ ಸಂಖ್ಯೆ ಕೊಡಿ."
-
-#: forms/__init__.py:729
-msgid "Enter a positive number."
-msgstr "ಧನಾತ್ಮಕ ಸಂಖ್ಯೆ ಕೊಡಿ."
-
-#: forms/__init__.py:739
-msgid "Enter a whole number between 0 and 32,767."
-msgstr ""
-"೦ ಮತ್ತು ೩೨,೭೬೭ ರ ನಡುವಿನ ಒಂದು "
-"ಪೂರ್ಣಾಂಕ ಕೊಡಿ"
-
-#: template/defaultfilters.py:401
-msgid "yes,no,maybe"
-msgstr "ಹೌದು,ಇಲ್ಲ,ಇರಬಹುದು"
-
diff --git a/parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 60272ca..0000000
--- a/parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 5909436..0000000
--- a/parts/django/django/conf/locale/kn/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,116 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-09-25 15:43+0200\n"
-"PO-Revision-Date: 2007-01-08 20:22+0530\n"
-"Last-Translator: Kannada Localization Team <translation@sampada.info>\n"
-"Language-Team: Kannada <translation@sampada.info>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "ಲಭ್ಯ %s "
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "ಎಲ್ಲವನ್ನೂ ಆಯ್ದುಕೊಳ್ಳಿ"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "ಸೇರಿಸಿ"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "ತೆಗೆದು ಹಾಕಿ"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s ಆಯ್ದುಕೊಳ್ಳಲಾಗಿದೆ"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr ""
-"ನಿಮ್ಮ ಆಯ್ಕೆ(ಗಳ)ನ್ನು ಆರಿಸಿ "
-"ಮತ್ತು ಕ್ಲಿಕ್ಕಿಸಿ"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"ಜನವರಿ ಫೆಬ್ರುವರಿ ಮಾರ್ಚ್ "
-"ಎಪ್ರಿಲ್ ಮೇ ಜೂನ್ ಜುಲೈ ಆಗಸ್ಟ್ "
-"ಸೆಪ್ಟೆಂಬರ್ ನವೆಂಬರ್ ಡಿಸೆಂಬರ್"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-"ರವಿವಾರ ಸೋಮವಾರ ಮಂಗಳವಾರ "
-"ಬುಧವಾರ ಗುರುವಾರ ಶುಕ್ರವಾರ "
-"ಶನಿವಾರ"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "ರ ಸೋ ಮ ಬು ಗು ಶು ಶ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "ಈಗ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "ಗಡಿಯಾರ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "ಸಮಯವೊಂದನ್ನು ಆರಿಸಿ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "ಮಧ್ಯರಾತ್ರಿ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "ಬೆಳಗಿನ ೬ ಗಂಟೆ "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "ಮಧ್ಯಾಹ್ನ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "ರದ್ದುಗೊಳಿಸಿ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "ಈ ದಿನ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "ಪಂಚಾಂಗ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "ನಿನ್ನೆ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "ನಾಳೆ"
diff --git a/parts/django/django/conf/locale/kn/__init__.py b/parts/django/django/conf/locale/kn/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/kn/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/kn/formats.py b/parts/django/django/conf/locale/kn/formats.py
deleted file mode 100644
index fa7a7b9..0000000
--- a/parts/django/django/conf/locale/kn/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'h:i:s A'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/ko/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ko/LC_MESSAGES/django.mo
deleted file mode 100644
index 4609c14..0000000
--- a/parts/django/django/conf/locale/ko/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ko/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ko/LC_MESSAGES/django.po
deleted file mode 100644
index 04f3f27..0000000
--- a/parts/django/django/conf/locale/ko/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5124 +0,0 @@
-# Django Korean Translation
-# Copyright (C) 2009
-# This file is distributed under the same license as the django package.
-# Hyun Mi Ae, Joongi Kim (me@daybreaker.info), Sung-Jin Hong (serialx.net@gmail.com)
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 12:11+0200\n"
-"PO-Revision-Date: 2007-04-06 11:04+0900\n"
-"Last-Translator: Joongi Kim (me@daybreaker.info)\n"
-"Language-Team: Korean\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "아랍어"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "불가리어"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "방글라데시어"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "보스니아어"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "카탈로니아어"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "체코어"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "웨일즈어"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "덴마크어"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "독일어"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "그리스어"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "영어"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "영어 (영국)"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "스페인어"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "아르헨티나 스페인어"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "에스토니아어"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "바스크어"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "페르시아어"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "핀란드어"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "프랑스어"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "프리슬란트어"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "아일랜드어"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "갈리시아어"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "히브리어"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "힌두어"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "크로아티아어"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "헝가리어"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "인도네시아어"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "아이슬란드어"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "이탈리아어"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "일본어"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "조지아어"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "크메르어"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "칸나다어"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "한국어"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "리투아니아어"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "라트비아어"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "마케도니아어"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "몽고어"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "네덜란드어"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "노르웨이어"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "노르웨이어 (보크몰)"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "노르웨이어 (뉘노르스크)"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "폴란드어"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "포르투갈어"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "브라질 포르투갈어"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "루마니아어"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "러시아어"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "슬로바키아어"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "슬로베니아어"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "알바니아어"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "세르비아어"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "세르비아어"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "스웨덴어"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "타밀어"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "텔루구어"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "태국어"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "터키어"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "우크라이나어"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "베트남어"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "중국어 간체"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "중국어 번체"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d개의 %(items)s (을)를 성공적으로 삭제하였습니다."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "확실합니까?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "선택된 %(verbose_name_plural)s (을)를 삭제합니다."
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s(으)로:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "모두"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "언제나"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "오늘"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "지난 7일"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "이번 달"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "이번 해"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "예"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "아니오"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "알 수 없습니다."
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "액션:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "액션 타임"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "오브젝트 아이디"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "오브젝트 표현"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "액션 플래그"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "메시지 변경"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "로그 엔트리"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "로그 엔트리"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "없음"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "%s (이)가 변경되었습니다."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "또한"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" (을)를 추가하였습니다."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s에 대한 %(name)s \"%(object)s\" (을)를 변경하였습니다."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" (을)를 삭제하였습니다."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "변경된 필드가 없습니다."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" (이)가 추가되었습니다."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "계속해서 편집하실 수 있습니다."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "계속해서 다른 %s (을)를 추가하세요."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" (이)가 변경되었습니다."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" (이)가 추가되었습니다. 계속해서 편집하세요."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"항목들에 액션을 적용하기 위해선 먼저 항목들이 선택되어 있어야 합니다. 아무 항"
-"목도 변경되지 않았습니다."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "액션이 선택되지 않았습니다."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "%s 추가"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Primary key %(key)r에 대한 오브젝트 %(name)s(이)가 존재하지 않습니다."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "%s 변경"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "데이터베이스 오류"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s개의 %(name)s(이)가 변경되었습니다."
-msgstr[1] "%(count)s개의 %(name)s(이)가 변경되었습니다."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "모두 %(total_count)s개가 선택되었습니다."
-msgstr[1] "모두 %(total_count)s개가 선택되었습니다."
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "%(cnt)s 중 아무것도 선택되지 않았습니다."
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\"(이)가 삭제되었습니다."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "변경 히스토리: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "사용자명과 비밀번호를 입력하세요. (대소문자 구별)"
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "로그인 세션이 끊겼습니다. 다시 로그인 하세요."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"사용하시는 브라우저가 쿠키 사용을 허가하고 있지 않습니다. 쿠키 사용을 체크하"
-"시고 다시 시도해 주세요."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "사용자명에는 '@'을 사용할 수 없습니다."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "이메일 주소와 사용자명은 다릅니다. '%s'를 사용하세요."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "사이트 관리"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "로그인"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s 사이트 관리"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "날짜:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "시각:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "현재:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "변경:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "찾아보기"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "하나 더 추가하기"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "해당 페이지가 없습니다."
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "죄송합니다, 요청하신 페이지를 찾을 수 없습니다."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "홈"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "서버 오류"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "서버 오류 (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "서버 오류 <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"오류가 발생했습니다. 사이트 관리자에게 이메일로 에러를 보고 했습니다. 조속히 "
-"수정하도록 하겠습니다. 고맙습니다."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "선택한 액션을 실행합니다."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "실행"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "모든 페이지의 항목들을 선택하려면 여기를 클릭하세요."
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "%(total_count)s개의 %(module_name)s 모두를 선택합니다."
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "선택을 해제합니다."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "환영합니다,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "문서"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "비밀번호 변경"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "로그아웃"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django 사이트 관리"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django 관리"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "추가"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "히스토리"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "사이트에서 보기"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "아래의 오류를 수정해 주세요."
-msgstr[1] "아래의 오류들을 수정해 주세요."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s 추가"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "필터"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "삭제"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"%(object_name)s \"%(escaped_object)s\" (을)를 삭제하면서관련 오브젝트를 제거"
-"하고자 했으나, 지금 사용하시는 계정은 다음 타입의 오브젝트를 제거할 권한이 없"
-"습니다. :"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"정말로 %(object_name)s \"%(escaped_object)s\"(을)를 삭제하시겠습니까? 다음의 "
-"관련 항목들이 모두 삭제됩니다. :"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "네, 확실합니다."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "여러 개의 오브젝트 삭제"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"%(object_name)s(을)를 삭제하면서 관련 오브젝트를 제거하고자 했으나, 지금 사용"
-"하시는 계정은 다음 타입의 오브젝트를 제거할 권한이 없습니다. :"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"정말로 선택된 %(object_name)s(을)를 삭제하시겠습니까? 다음의 항목들과 그 관"
-"련 항목들이 모두 삭제됩니다. :"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "%(filter_title)s (으)로"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s 어플리케이션으로 이용 가능한 모델"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "변경"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "수정할 권한이 없습니다."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "최근 액션"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "나의 액션"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "이용할 수 없습니다."
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "내용 형식이 지정되지 않았습니다."
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"데이터베이스 설정에 문제가 발생했습니다. 해당 데이터베이스 테이블이 생성되었"
-"는지, 해당 유저가 데이터베이스를 읽어 들일 수 있는지 확인하세요."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "사용자명"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "비밀번호"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "날짜/시간"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "사용자"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "액션"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"오브젝트에 변경사항이 없습니다. 이 admin 사이트를 통해 추가된 것이 아닐 수 있"
-"습니다."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "모두 표시"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "저장"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "검색"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1건"
-msgstr[1] "%(counter)s건"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "총 %(full_result_count)s건"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "새로 저장"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "저장 및 다른 이름으로 추가"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "저장 및 편집 계속"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"사용자명와 비밀번호를 입력하세요.더 많은 사용자 옵션을 사용하실 수 있습니다."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "<strong>%(username)s</strong> 새로운 비밀번호를 입력하세요."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "비밀번호"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "비밀번호 (확인)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "확인을 위해 위와 동일한 비밀번호를 입력하세요. "
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "%(verbose_name)s 더 추가하기"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "삭제하기"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "삭제"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "사이트를 이용해 주셔서 고맙습니다."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "다시 로그인하기"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "비밀번호 변경"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "비밀번호를 변경하였습니다."
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "비밀번호가 변경되었습니다."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"보안상 필요하오니 기존에 사용하시던 비밀번호를 입력해 주세요. 새로운 비밀번호"
-"는 정확히 입력했는지 확인할 수 있도록 두 번 입력하시기 바랍니다."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "기존 비밀번호:"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "새 비밀번호:"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "비밀번호 변경"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "비밀번호 초기화"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "비밀번호가 초기화 완료"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "비밀번호가 설정되었습니다. 이제 로그인하세요."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "비밀번호 초기화 확인"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "새 비밀번호 입력"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"새로운 비밀번호를 정확히 입력했는지 확인할 수 있도록두 번 입력하시기 바랍니"
-"다."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "새로운 비밀번호:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "새로운 비밀번호(확인):"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "비밀번호가 초기화를 실패하였습니다."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"비밀번호 초기화 링크가 이미 사용되어 올바르지 않습니다.비밀번호 초기화을 다"
-"시 해주세요."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "비밀번호가 초기화되었습니다."
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr "새로운 비밀번호를 등록하신 이메일로 보내드렸습니다."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "비밀번호가 초기화되었음을 알려드립니다."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "%(site_name)s 의 사용자 비밀번호가 초기화되었습니다."
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "이어지는 페이지에서 새 비밀번호를 선택하세요."
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "사용자명:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "사이트를 이용해 주셔서 고맙습니다."
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s 팀"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"비밀번호를 잊으셨나요? 아래에 메일 주소를 입력하시면, 새 비밀번호 설정 방법"
-"을 안내하는 메일을 보내드립니다."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "이메일 주소:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "비밀번호 초기화"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "언제나"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "%s 선택"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "변경할 %s 선택"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "사이트"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "템플릿명"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "태그:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "필터:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "뷰:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "어플리케이션 %r (이)가 없습니다."
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "모델 %(model_name)r (이)가 어플리케이션 %(app_label)r 에 없습니다."
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "`%(app_label)s.%(data_type)s` 관련 오브젝트"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "모델:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "`%(app_label)s.%(object_name)s` 관련 오브젝트(들)"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "모든 %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%s 의 수"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s 오브젝트의 필드"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s (은)는 url 패턴의 오브젝트가 아닙니다."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "북마크릿"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "문서 북마크릿"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\"> 북마크릿을 설치하시려면 링크를 북마크 툴바로 드래그 하거"
-"나,\n"
-"오른쪽 클릭으로 해당 링크를 북마크에 추가하세요.\n"
-"이제 사이트 내의 모든 페이지에서 북마크릿 선택이 가능합니다.\n"
-"북마크릿에 따라 내부 네트워크 상의 컴퓨터로부터 이 사이트를 참조해야하는 경우"
-"가 있습니다.\n"
-"(내부 네트워크가 있는지 불명확한 경우 시스템 관리자에게 확인하시기 바랍니다.)"
-"</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "이 페이지의 문서"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "각 페이지로에서 해당 페이지를 생성한 뷰의 문서로 갑니다."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "오브젝트 아이디 표시"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "단일 오브젝트 페이지의 고유 아이디와 컨텐츠 타입을 표시합니다."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "오브젝트 편집(현재 창)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "단일 오브젝트 페이지의 관리 페이지로 이동"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "오브젝트 편집(새로운 창)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "위와 동일하며, 새로운 창에서 관리 페이지를 엽니다."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "개인정보"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "권한"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "중요한 일정"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "그룹"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "비밀번호가 변경되었습니다."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "비밀번호 변경: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "사용자명"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"필수항목입니다. 30자 이내로 입력하세요. (알파벳, 숫자, @/./+/-/_만 가능)"
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "알파벳, 숫자 및 @/./+/-/_만 가능합니다."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "비밀번호 확인"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "해당 사용자명은 이미 존재합니다."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "비밀번호가 일치하지 않습니다."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "이 계정은 유효하지 않습니다."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"사용하시는 브라우저가 쿠키를 허용하지 않습니다.로그인하기 위해서는 쿠키 사용"
-"이 필요합니다."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "이메일 주소"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"이메일주소와 일치하는 사용자가 없습니다.이 이메일주소로 등록하셨습니까?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "%s에 대한 비밀번호 초기화"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "새 비밀번호 확인:"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "기존 비밀번호를 잘못 입력하셨습니다. 다시 입력해 주세요."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "이름"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "코드명"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "허가"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "허가"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "그룹"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "그룹"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "사용자명"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"필수항목입니다. 30자 이내로 입력하세요. (알파벳, 숫자, @/./+/-/_만 가능)"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "이름"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "성"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "이메일 주소"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "비밀번호"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"'[algo]$[salt]$[hexdigest]' 또는 <a href=\"password/\">비밀번호 변경</a>"
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "스태프 권한"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "사용자가 관리사이트에 로그인이 가능한지를 나타냅니다."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "활성"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"사용자가 'Django 관리'에 로그인이 가능한지를 나타냅니다.계정을 삭제하는 대신 "
-"이것을 선택 해제하세요."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "최상위 사용자 권한"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "해당 사용자에게 모든 권한을 허가합니다."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "마지막 로그인"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "등록일"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "해당 사용자에게 속해있는 그룹의 모든 권한을 허가합니다."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "사용자 권한"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "사용자"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "사용자(들)"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "메시지"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "로그 아웃"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "올바른 이메일 주소를 입력하세요."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "내용"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "메타데이터"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "플래그되었습니다"
-msgstr[1] "플래그되었습니다"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "선택된 코멘트에 플래그 달기"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "승인되었습니다"
-msgstr[1] "승인되었습니다"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "선택된 코멘트 승인하기"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "삭제되었습니다"
-msgstr[1] "삭제되었습니다"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "선택된 코멘트 삭제"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1개의 코멘트가 성공적으로 %(action)s."
-msgstr[1] "%(count)s개의 코멘트가 성공적으로 %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s 의 코멘트"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "%(site_name)s 의 사용자 비밀번호가 초기화 되었습니다."
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "이름"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "이메일 주소"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "코멘트:"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "비속어/욕설입니다. %s (은)는 사용하실 수 없습니다."
-msgstr[1] "비속어/욕설입니다. %s (은)는 사용하실 수 없습니다."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "이 필드에 무엇이라도 입력하면 코멘트는 스팸으로 처리될 것입니다."
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "콘텐츠 타입"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "오브젝트 ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "사용자명"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "사용자 이메일 주소"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "사용자 URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "코멘트"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "날짜/시간 확인"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP 주소"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "공개합니다."
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "이 사이트에서 코멘트가 나타나지 않게 하려면 체크 해제하세요."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "삭제합니다."
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"코멘트가 부적절한 경우 체크하세요. \"코멘트가 삭제되었습니다.\" 메시지가 표시"
-"됩니다."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "코멘트(들)"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "이 코멘트는 등록된 사용자가 작성하였으므로 읽기 전용입니다."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr "이 코멘트는 등록된 사용자가 작성하였으므로 읽기 전용입니다."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(user)s (이)가 %(date)s 등록\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "플래그"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "날짜"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "코멘트 플래그"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "코멘트 플래그"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "코멘트 승인"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "정말로 이 코멘트를 공개하시겠습니까?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "승인"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "승인해주셔서 고맙습니다."
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "우리 사이트의 토론에 기여해주셔서 감사합니다."
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "코멘트 삭제"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "정말로 이 코멘트를 삭제하시겠습니까?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "삭제해주셔서 고맙습니다."
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "코멘트에 플래그 달기"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "정말로 플래그를 다시겠습니까?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "플래그를 답니다."
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "플래그를 달아주셔서 고맙습니다."
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "작성하기"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "미리보기"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "코멘트 작성 완료"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "코멘트를 달아주셔서 고맙습니다."
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "코멘트 미리보기"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "아래의 오류를 수정해 주세요."
-msgstr[1] "아래의 오류들을 수정해 주세요."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "코멘트 작성하기"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "또는 변경하기"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python 모델 클래스 명"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "콘텐츠 타입(들)"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "앞, 뒤에 슬래시(/)를 넣으세요. 예:'/about/contact/' "
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "문자, 숫자, '_', '-', '/'만 가능합니다."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "고급 옵션"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "제목"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "내용"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "사용 가능한 코멘트"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "템플릿명"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"예: 'flatpages/contact_page.html' 를 사용할 수 없는 경우 시스템이 'flatpages/"
-"default.html' (을)를 사용합니다."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "등록하세요."
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "체크할 경우, 로그인 사용자만 해당 페이지를 볼 수 있습니다."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "플랫 페이지"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "플랫 페이지(들)"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"죄송합니다. 입력하신 양식이 더 이상 유효하지 않습니다. 이 페이지부터 다시 양"
-"식을 채워주세요."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "기본 GIS 필드. OpenGIS Specification의 Geometry type으로 매핑됩니다."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Geometry 값이 없습니다."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Geometry 값이 부적절합니다."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Geometry 형식이 부적절합니다."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr "Geometry를 geometry 필드의 SRID로 변환하는 도중 오류가 발생하였습니다."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "번째"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "번째"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "번째"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "번째"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "(value).1f백만"
-msgstr[1] "(value).1f백만"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f십억"
-msgstr[1] "%(value).1f십억"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f조"
-msgstr[1] "%(value).1f조"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "1"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "2"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "3"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "4"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "5"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "6"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "7"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "8"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "9"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "오늘"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "내일"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "어제"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "우편번호를 입력하세요.(NNNN 또는 ANNNNAAA)"
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "숫자만 입력해야 합니다."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "7개 또는 8개의 숫자만 허용됩니다."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "CUIT를 입력하세요.(XX-XXXXXXXX-X 또는 XXXXXXXXXXXX 형식)"
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "부적절한 CUIT"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "부르겐란트 주"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "케른텐 주"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "니더외스터라이히 주"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "오버외스터라이히 주"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "잘츠부르크"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "슈타이어 주"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "티롤 주"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "폴라를베르크 주"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "빈"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "우편번호를 입력하세요. (XXXX 형식)"
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "올바른 오스트리아 사회보장번호(XXXX XXXXX 형식)를 입력하세요."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "4자리 숫자 우편번호를 입력하세요."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "우편번호는 XXXXX-XXX 형식으로 입력하세요."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "전화번호는 XX-XXXX-XXXX 형식으로 입력하세요."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "올바르게 선택해 주세요. 선택하신 것이 선택가능항목에 없습니다."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "CPF 값이 올바르지 않습니다."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "최대 11자 또는 14자 이하로 입력해 주세요."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "올바른 CNPJ 번호를 입력하세요."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "이 항목은 최소한 14개의 숫자를 입력해야 합니다."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "우편번호를 입력하세요.(XXX XXX 형식)"
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "올바른 캐나다 사회보장번호(XXX-XXX-XXX 형식)를 입력하세요."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "아르가우 주"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "아펜첼이너로덴 주"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "아펜첼아우서로덴 주"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "바젤슈타트 주"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "바젤란트 주"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "베른"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "프리부르 주"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "제네바"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "글라루스 주"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "그라우뷘덴 주"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "쥐라 주"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "루체른"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "뇌샤텔 주"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "니트발덴 주"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "옵발덴 주"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "샤프하우젠 주"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "슈비츠 주"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "졸로투른 주"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "장크트갈렌 주"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "투르가우 주"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "티치노 주"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "우리 주"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "발레 주"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "보 주"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "추크 주"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "취리히"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"올바른 스위스 주민번호 또는 여권 번호를 입력하세요. (X1234567<0 또는 "
-"1234567890 형식)"
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "올바른 칠레 RUT를 입력하세요."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "올바른 칠레 RUT 번호 XX.XXX.XXX-X 형식으로 입력하세요."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "칠레 RUT 값이 올바르지 않습니다."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "프라하"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "이호체스코 주"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "스트르셰도체스코 주"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "플젠 주"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "카를로비바리 주"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "우스티나트라벰 주"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "리베레츠 주"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "호라데츠 크랄로베 주"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "파르두비체 주"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "비소치나 주"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "이호모라프스코 주"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "올로모우츠 주"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "즐린 주"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "모라바슬레스코주"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "우편번호를 입력하세요. (XXXXX 또는 XXX XX 형식)"
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "생년월일을 입력하세요. (XXXXXX/XXXX 또는 XXXXXXXXXX 형식)"
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "성별은 'f' 또는 'm'으로 입력해야 합니다."
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "올바른 생년월일을 입력하세요."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "올바른 IC 번호를 입력하세요."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "바덴-뷔르템베르크 주"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "바이에른 자유주"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "베를린"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "브란덴부르크 주"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "브레멘 자유 한자 도시"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "함부르크 자유 한자 도시"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "헤센 주"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "메클렌부르크-포어포메른 주"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "니더작센 주"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "노르트라인-베스트팔렌 주"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "라인란트-팔츠 주"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "자를란트 주"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "작센 자유주"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "작센-안할트 주"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "슐레스비히-홀슈타인 주"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "튀링겐 자유주"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "우편번호를 입력하세요. (XXXXX 형식)"
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr "올바른 독일 주민번호(XXXXXXXXXXX-XXXXXXX-XXXXXXX-X 형식)를 입력하세요."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "알라바 주"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "알바세테 주"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "알리칸테 주"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "알메리아 주"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "아빌라 주"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "바다호스 주"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "발레아레스 제도"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "바르셀로나 주"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "부르고스 주"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "카세레스 주"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "카디스 주"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "카스테욘 주"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "시우다드레알 주"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "코르도바 주"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "라코루냐 주"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "쿠엥카 주"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "헤로나 주"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "그라나다 주"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "과달라하라 주"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "기푸스코아 주"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "우엘바 주"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "우에스카 주"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "하엔 주"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "레온 주"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "레리다 주"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "라리오하 주"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "루고 주"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "마드리드 주"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "말라가 주"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "무르시아 주"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "나바라 주"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "오렌세 주"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "아스투리아스 주"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "팔렌시아 주"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "라스팔마스 주"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "폰테베드라 주"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "살라망카 주"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "산타크루스데테네리페 주"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "칸타브리아 주"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "세고비아 주"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "세비야 주"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "소리아 주"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "타라고나 주"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "테루엘 주"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "톨레도 주"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "발렌시아 주"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "바야돌리드 주"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "비스카야 주"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "사모라 주"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "사라고사 주"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "세우타 자치주"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "멜리야 주"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "안달루시아 주"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "아라곤 주"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "아스투리아스 지방"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "발레아레스 제도"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "바스크 지방"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "카나리 제도"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "카스티야라만차 지방"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "카스티야레온 지방"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "카탈로니아 지방"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "에스트레마두라 지방"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "갈리시아 지방"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "무르시아 지방"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "나바라 지방"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "발렌시아 지방"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "우편번호를 입력하세요. (01XXX - 52XXX 형식)"
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"올바른 전화번호를 입력하세요. (6XXXXXXXX, 8XXXXXXXX 또는 9XXXXXXXX 형식)"
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "올바른 NIF, NIE 또는 CIF를 입력하세요."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "올바른 NIF 또는 NIE를 입력하세요."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "NIF의 체크섬이 틀립니다."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "NIE의 체크섬이 틀립니다."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "CIF의 체크섬이 틀립니다."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "올바른 계좌번호를 입력하세요. (XXXX-XXXX-XX-XXXXXXXXXX 형식)"
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "계좌번호의 체크섬이 틀립니다."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "올바른 핀란드 사회보장 번호를 입력하세요."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "전화번호는 0X XX XX XX XX 형식이어야 합니다."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "올바른 우편번호를 입력하세요."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "올바른 전화번호를 입력하세요."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "올바른 차량 등록 번호를 입력하세요."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "올바른 NIK/KTP 번호를 입력하세요."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "우편번호는 XXXXXXX 형식으로 입력하세요."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "올바른 아이슬란드 주민번호를 입력하세요. (XXXXXX-XXXX 형식)"
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "아이슬란드 주민번호가 올바르지 않습니다."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "올바른 우편번호를 입력하세요."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "올바른 사회보장번호를 입력하세요."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "올바른 VAT 번호를 입력하세요."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "우편번호를 입력하세요. (XXXXXXX or XXX-XXXX 형식)"
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "홋카이도"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "아오모리 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "이와테 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "미야기 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "아키타 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "야마가타 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "후쿠시마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "이바라키 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "도치기 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "군마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "사이타마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "지바 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "도쿄 도"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "카나가와 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "야마나시 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "나가노 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "니가타 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "도야마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "이시카와 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "후쿠이 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "기후 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "시즈오카 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "아이치 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "미에 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "시가 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "교토 부"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "오사카 부"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "효고 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "나라 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "와카야마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "돗토리 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "시마네 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "아카야마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "히로시마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "야마구치 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "도구시마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "카가와 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "에히메 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "고치 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "후쿠오카 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "사가 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "나가사키 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "구마모토 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "오이타 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "미야자키 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "가고시마 현"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "오키나와 현"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "올바른 쿠웨이트 주민번호를 입력하세요."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "아과스칼리엔테스 주"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "바하칼리포르니아 주"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "바하칼리포르니아수르 주"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "캄페체 주"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "치와와 주"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "치아파스 주"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "코아우일라 주"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "콜리마 주"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "연방구 (멕시코시)"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "두랑고 주"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "게레로 주"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "과나후아토 주"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "이달고 주"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "할리스코 주"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "멕시코 주"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "미초아칸 주"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "모렐로스 주"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "나야리트 주"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "누에보레온 주"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "오아하카 주"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "푸에블라 주"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "케레타로 주"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "킨타나로오 주"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "시날로아 주"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "산루이스포토시 주"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "소노라 주"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "타바스코 주"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "타마울리파스 주"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "틀락스칼라 주"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "베라크루스 주"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "유카탄 주"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "사카테카스 주"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "올바른 우편번호를 입력하세요."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "올바른 SoFi 번호를 입력하세요."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "드렌터 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "플레볼란트 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "프리슬란트 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "힐데를란트 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "흐로닝언 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "림뷔르흐 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "노르트브라반트 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "노르트홀란트 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "오버레이셜 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "위트레흐트 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "제일란트 주"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "자위트홀란트 주"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "올바른 노르웨이 사회보장번호를 입력해 주세요."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "이 항목은 8자리 숫자로 필요합니다."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "이 항목은 11자리 숫자가 필요합니다."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "주민번호는 11자리 숫자로 구성됩니다."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "주민번호 체크섬이 올바르지 않습니다."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"올바른 Tax 번호(NIP)를 입력하세요. (XXX-XXX-XX-XX 또는 XX-XX-XXX-XXX 형식)"
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Tax 번호(NIP)의 체크섬이 올바르지 않습니다."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "사업자 등록번호(REGON)은 9자리 또는 14자리의 숫자로 구성됩니다."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "사업자 등록번호(REGON)의 체크섬이 올바르지 않습니다."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "우편번호를 입력하세요. (XX-XXX 형식)"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "우편번호는 XXXXX-XXX 형식으로 입력하세요."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "전화번호는 9자리 숫자이거나 + 또는 00으로 시작해야 합니다."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "올바른 CIF를 입력하세요."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "올바른 CNP를 입력하세요."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "올바른 IBAN을 입력하세요. (ROXX-XXXX-XXXX-XXXX-XXXX-XXXX 형식)"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "전화번호는 XXXX-XXXXXX 형식이어야 합니다."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "올바른 우편번호를 입력하세요. (XXXXXX 형식)"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "올바른 스웨덴 기관 번호를 입력하세요."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "올바른 스웨덴 주민번호를 입력하세요."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "올바른 스웨덴 우편번호를 입력하세요. (XXXXX 형식)"
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Shina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica region"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava region"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kosice region"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra region"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Presov region"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trencin region"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava region"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zilina region"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "올바른 우편번호를 입력하세요."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "베드퍼드셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "버킹엄셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "체셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "콘월 주 (시실리 섬)"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "컴브리아 주"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "더비셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "데번 주"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorest 주"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "카운티 더럼 주"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "이스트 서섹스 주"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "에섹스 주"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "글로스터셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "그레이터 런던"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "그레이터 멘체스터 주"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "햄프셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "허트퍼드셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "켄트 주"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "랭커셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "레스터셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "링컨셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "머시사이드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "노퍽 주"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "노스요크셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "노스햄프턴 주"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "노섬벌랜드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "노팅험셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "옥스포드셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "시롭셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "서머셋 주"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "사우스요크셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "스태포드셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "서퍽 주"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "서리 주"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "타인-웨어 주"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "워릭셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "웨스트미들랜즈"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "웨스트서섹스 주"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "웨스트요크셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "윌트셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "우스터셔 주"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "앤트림 카운티"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "아마 카운티"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "다운 카운티"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "퍼매너 카운티"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "런던데리 카운티"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "티론 카운티"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "클루이드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "디버드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "궨트 주"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "귀네드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "미드글라모건 주"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "포이스 주"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "사우스글라모건 주"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "웨스트글라모건 주"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "보더스 주"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "센트럴스코틀랜드"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "덤프리스갤러웨이 주"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "파이프 주"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "그램피언 주"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "하이랜드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "로디언 주"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "오크니 제도"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "셰틀랜드 제도"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "스트래스클라이드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "태이사이드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "웨스턴아일 주"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "잉글랜드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "노던아일랜드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "스코틀랜드 주"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "웨일즈 주"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "우편번호를 입력하세요. (XXXXX 또는 XXXXX-XXXX 형식)"
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "전화번호는 XX-XXXX-XXXX 형식으로 입력하세요."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "올바른 미국 사회보장번호를 입력하세요. (XXX-XX-XXXX 형식)"
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "미국의 주 (두개의 대문자로)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "전화번호"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"올바른 CI 번호를 입력하세요. (X.XXX.XXX-X, XXXXXXX-X 또는 XXXXXXXX 형식)"
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "올바른 CI 번호를 입력하세요."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "올바른 남아프리카 주민번호를 입력하세요."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "올바른 남아프리카 우편번호를 입력하세요."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "이스턴케이프 주"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "프리스테이트 주"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "가우텡 주"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "크와줄루나탈 주"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "림포포 주"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "음푸말랑가 주"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "노던케이프 주"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "노스웨스트 주"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "웨스턴케이프 주"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "늦게 번역되는(lazy) 메시지"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "에서 재전송"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "도메인명을 제외한 절대경로로 입력하세요. 예: '/events/search/'"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "(으)로 재전송"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "절대경로와 URL('http://' 포함) 모두 가능합니다."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "재전송"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "재전송"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "세션 키"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "세션 날짜"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "유효날짜"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "세션"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "세션"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "도메인 명"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "표시명"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "사이트(들)"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "올바른 값을 입력하세요."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "올바른 URL을 입력하세요."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "해당 URL의 링크가 잘못 되어 있습니다."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "문자, 숫자, '_', '-'만 가능합니다."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "올바른 IPv4 주소를 입력하세요."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "콤마로 구분된 숫자만 입력하세요."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"%(limit_value)s 안의 값을 입력해 주세요. (입력하신 값은 %(show_value)s입니"
-"다.)"
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "%(limit_value)s 이하의 값을 입력해 주세요."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "%(limit_value)s 이상의 값을 입력해 주세요."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"%(limit_value)d글자 이상 입력해 주세요. (입력하신 내용은 %(show_value)d글자입"
-"니다.)"
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"%(limit_value)d글자 이하로 입력해 주세요. (입력하신 내용은 %(show_value)d글자"
-"입니다)"
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"%(field_name)s(은)는 반드시 %(date_field)s %(lookup)s에 대해 유일해야 합니다."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s의 %(field_label)s(은)는 이미 존재합니다."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "%r은 올바른 선택사항이 아닙니다."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "이 필드는 null 값은 사용할 수 없습니다. "
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "이 필드는 null 값은 사용할 수 없습니다. "
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "%(field_type)s 형식 필드"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "정수"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "정수 값을 사용하세요."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "True 또는 False 값을 사용하세요."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "boolean(참 또는 거짓)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "문자열(%(max_length)s 글자까지)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "정수(콤마로 구분)"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "날짜(시간 제외)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "날짜는 YYYY-MM-DD 형식으로 입력하세요."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "날짜가 부적절합니다.: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "날짜/시각을 YYYY-MM-DD HH:MM[:ss[.uuuuuu]] 형식으로 입력하세요."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "날짜(시간 포함)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "십진수 실수(decimal) 값을 사용하세요."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "10진수"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "이메일 주소"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "파일 경로"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "부동소수점 실수(float) 값을 사용해 주세요."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "부동소수점 숫자"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "큰 정수 (8 byte)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "None, True 또는 False 값을 사용하세요."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "boolean (참, 거짓 또는 none)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "텍스트"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "시각"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "시각은 HH:MM[:ss[.uuuuuu]] 형식으로 입력하세요."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML 텍스트"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Primary key %(pk)r에 대한 모델 %(model)s가 존재하지 않습니다."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "외래 키 (연관 필드에 의해 형식 결정)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "일대일 관계"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "다대다 관계"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"복수 선택 시에는 \"Control\" 키를 누른 상태에서 선택해 주세요.(Mac은 "
-"\"Command\" 키)"
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"올바른 %(self)s ID를 입력해 주세요. %(value)r (은)는 적절치 않습니다."
-msgstr[1] ""
-"올바른 %(self)s ID를 입력해 주세요. %(value)r (은)는 적절치 않습니다."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "필수 항목입니다."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "정수를 입력하세요."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "숫자를 입력하세요."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "전체 자릿수가 %s 개를 넘지 않도록 해주세요."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "전체 유효자리 개수가 %s 개를 넘지 않도록 해주세요."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "소숫점 앞의 자릿수가 %s 개를 넘지 않도록 해주세요."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "올바른 날짜를 입력하세요."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "올바른 시각을 입력하세요."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "올바른 날짜/시각을 입력하세요."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "등록된 파일이 없습니다. 인코딩 형식을 확인하세요."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "파일이 전송되지 않았습니다."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "입력하신 파일은 빈 파일입니다."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"파일 이름은 %(max)d 글자 이하로 입력해 주세요. (입력하신 내용은 %(length)d 자"
-"입니다)"
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"올바른 이미지를 업로드하세요. 업로드하신 파일은 이미지 파일이 아니거나 파일"
-"이 깨져 있습니다."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "올바르게 선택해 주세요. %(value)s (이)가 선택가능항목에 없습니다."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "리스트를 입력하세요."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "순서:"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "%(field)s의 중복된 데이터를 고쳐주세요."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "%(field)s의 중복된 데이터를 고쳐주세요. 유일한 값이어야 합니다."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"%(field_name)s의 값은 %(date_field)s의 %(lookup)s에 대해 유일해야 합니다. 중"
-"복된 데이터를 고쳐주세요."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "아래의 중복된 값들을 고쳐주세요."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "부모 오브젝트의 primary key와 inline foreign key가 맞지 않습니다."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "올바르게 선택해 주세요. 선택하신 것이 선택가능항목에 없습니다."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "올바르게 선택해 주세요. %s (이)가 선택가능항목에 없습니다."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\"은 primary key로 적합하지 않습니다."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "예,아니오,아마도"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d 바이트"
-msgstr[1] "%(size)d 바이트"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "오후"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "오전"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "오후"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "오전"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "자정"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "정오"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "월요일"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "화요일"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "수요일"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "목요일"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "금요일"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "토요일"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "일요일"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "월요일"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "화요일"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "수요일"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "목요일"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "금요일"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "토요일"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "일요일"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "1월"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "2월"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "3월"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "4월"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "5월"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "6월"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "7월"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "8월"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "9월"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "10월"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "11월"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "12월"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "1월"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "2월"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "3월"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "4월"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "5월"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "6월"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "7월"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "8월"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "9월"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "10월"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "11월"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "12월"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "1월"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "2월"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "8월"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "9월"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "10월"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "11월"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "12월"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "또는"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "년"
-msgstr[1] "년"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "개월"
-msgstr[1] "개월"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "주"
-msgstr[1] "주"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "일"
-msgstr[1] "일"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "시간"
-msgstr[1] "시간"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "분"
-msgstr[1] "분"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "분"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d%(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d%(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "Y년 n월 j일"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "Y년 n월 j일 H:i:s"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "Y년 n월"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "n월 j일"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s(이)가 생성되었습니다."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s(이)가 수정되었습니다."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s(이)가 삭제되었습니다."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "%(name)s 에 %(fieldname)s (이)가 하나 이상 있는 %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "%(name)s 에 %(fieldname)s (이)가 하나 이상 있는"
-
-#~ msgid "Old password:"
-#~ msgstr "기존 비밀번호:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "부모(상위) 모델과 연계"
-
-#~ msgid "Add user"
-#~ msgstr "사용자 추가"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "코멘트 관리 큐"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "관리할 코멘트가 없습니다."
-
-#~ msgid "Email"
-#~ msgstr "이메일"
-
-#~ msgid "Authenticated?"
-#~ msgstr "로그인 여부"
-
-#~ msgid "IP Address"
-#~ msgstr "IP 주소"
-
-#~ msgid "Date posted"
-#~ msgstr "등록일"
-
-#~ msgid "yes"
-#~ msgstr "예"
-
-#~ msgid "no"
-#~ msgstr "아니오"
diff --git a/parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index e9158fc..0000000
--- a/parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.po
deleted file mode 100644
index a497f1d..0000000
--- a/parts/django/django/conf/locale/ko/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,154 +0,0 @@
-# Django Korean Translation (Javascripts)
-# Copyright (C) 2009
-# This file is distributed under the same license as the django package.
-# Hyun Mi Ae, Joongi Kim (me@daybreaker.info), Sung-Jin Hong (serialx.net@gmail.com)
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 12:07+0200\n"
-"PO-Revision-Date: 2007-04-06 11:15+0900\n"
-"Last-Translator: Joongi Kim (me@daybreaker.info)\n"
-"Language-Team: Korean\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "이용 가능한 %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "모두 선택"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "추가"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "삭제"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "선택된 %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "선택한 후 클릭하세요"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "모두 삭제"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"개별 편집 가능한 필드에 저장되지 않은 값이 있습니다. 액션을 수행하면 저장되"
-"지 않은 값들을 잃어버리게 됩니다."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"개별 필드의 값들을 저장하지 않고 액션을 선택했습니다. OK를 누르면 저장되며, "
-"액션을 한 번 더 실행해야 합니다."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"개별 필드에 아무런 변경이 없는 상태로 액션을 선택했습니다. 저장 버튼이 아니"
-"라 진행 버튼을 찾아보세요."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "일 월 화 수 목 금 토"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "보기"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "감추기"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "일요일 월요일 화요일 수요일 목요일 금요일 토요일"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "현재"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "시계"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "시간 선택"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "자정"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "오전 6시"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "정오"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "취소"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "오늘"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "달력"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "어제"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "내일"
diff --git a/parts/django/django/conf/locale/ko/__init__.py b/parts/django/django/conf/locale/ko/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ko/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ko/formats.py b/parts/django/django/conf/locale/ko/formats.py
deleted file mode 100644
index 7b0011c..0000000
--- a/parts/django/django/conf/locale/ko/formats.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'Y년 n월 j일'
-TIME_FORMAT = 'A g:i:s'
-DATETIME_FORMAT = 'Y년 n월 j일 g:i:s A'
-YEAR_MONTH_FORMAT = 'Y년 F월'
-MONTH_DAY_FORMAT = 'F월 j일'
-SHORT_DATE_FORMAT = 'Y-n-j.'
-SHORT_DATETIME_FORMAT = 'Y-n-j H:i'
-# FIRST_DAY_OF_WEEK =
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
- # '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
- # '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- # '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
- # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
- '%Y년 %m월 %d일', # '2006년 10월 25일', with localized suffix.
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
- '%H시 %M분 %S초', # '14시 30분 59초'
- '%H시 %M분', # '14시 30분'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
- '%m/%d/%Y %H:%M', # '10/25/2006 14:30'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
-
- '%Y년 %m월 %d일 %H시 %M분 %S초', # '2006년 10월 25일 14시 30분 59초'
- '%Y년 %m월 %d일 %H시 %M분', # '2006년 10월 25일 14시 30분'
-)
-
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/lt/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/lt/LC_MESSAGES/django.mo
deleted file mode 100644
index 3d42827..0000000
--- a/parts/django/django/conf/locale/lt/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/lt/LC_MESSAGES/django.po b/parts/django/django/conf/locale/lt/LC_MESSAGES/django.po
deleted file mode 100644
index d855d87..0000000
--- a/parts/django/django/conf/locale/lt/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,2868 +0,0 @@
-# Lithuanian translation of Django.
-# Copyright (C) 2008 The Django Software Foundation
-# This file is distributed under the same license as the Django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-15 23:03+0300\n"
-"PO-Revision-Date: 2008-06-18 22:37+0200\n"
-"Last-Translator: Rapolas Kaselis <rapolas@gmail.com>\n"
-"Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: oldforms/__init__.py:357
-#: db/models/fields/__init__.py:117
-#: db/models/fields/__init__.py:274
-#: db/models/fields/__init__.py:612
-#: db/models/fields/__init__.py:623
-#: newforms/models.py:178
-#: newforms/fields.py:80
-#: newforms/fields.py:376
-#: newforms/fields.py:452
-#: newforms/fields.py:463
-msgid "This field is required."
-msgstr "Šis laukas yra privalomas."
-
-#: oldforms/__init__.py:392
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Įsitikink, kad tavo tekstas turi mažiau nei %s simbolį."
-msgstr[1] "Įsitikink, kad tavo tekstas turi mažiau nei %s simbolių."
-
-#: oldforms/__init__.py:397
-msgid "Line breaks are not allowed here."
-msgstr "Nauja eilutė nėra leidžiama."
-
-#: oldforms/__init__.py:498
-#: oldforms/__init__.py:571
-#: oldforms/__init__.py:610
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Pasirink gerą variantą; '%(data)s' nėra tarp %(choices)s."
-
-#: oldforms/__init__.py:577
-#: newforms/widgets.py:180
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr "Nežinomas"
-
-#: oldforms/__init__.py:577
-#: newforms/widgets.py:180
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "Taip"
-
-#: oldforms/__init__.py:577
-#: newforms/widgets.py:180
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "Ne"
-
-#: oldforms/__init__.py:672
-#: core/validators.py:174
-#: core/validators.py:445
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Failas nebuvo nurodytas. Patikrink formos koduotę."
-
-#: oldforms/__init__.py:674
-msgid "The submitted file is empty."
-msgstr "Nurodytas failas yra tuščias"
-
-#: oldforms/__init__.py:730
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Įvesk sveiką skaičių nuo -32,768 iki 32,767."
-
-#: oldforms/__init__.py:740
-msgid "Enter a positive number."
-msgstr "Įvesk teigiamą skaičių."
-
-#: oldforms/__init__.py:750
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Įvesk sveiką skaičių nuo 0 iki 32,767."
-
-#: db/models/manipulators.py:307
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s su šiuo %(type)s jau egzistuoja duotuose %(field)s."
-
-#: db/models/manipulators.py:308
-#: contrib/admin/views/main.py:335
-#: contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339
-msgid "and"
-msgstr "ir"
-
-#: db/models/fields/__init__.py:42
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s su šiuo %(fieldname)s jau egzistuoja."
-
-#: db/models/fields/__init__.py:369
-msgid "This value must be an integer."
-msgstr "Ši reikšme turi būti sveikas skaičius."
-
-#: db/models/fields/__init__.py:404
-msgid "This value must be either True or False."
-msgstr "Ši reikšmė turi būti True arba False."
-
-#: db/models/fields/__init__.py:425
-msgid "This field cannot be null."
-msgstr "Šis laukas negali būti null"
-
-#: db/models/fields/__init__.py:459
-#: core/validators.py:148
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Įvesk tinkamą datą YYYY-MM-DD formatu."
-
-#: db/models/fields/__init__.py:528
-#: core/validators.py:157
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Įvesk tinkamą datą/laiką YYYY-MM-DD HH:MM formatu."
-
-#: db/models/fields/__init__.py:632
-msgid "Enter a valid filename."
-msgstr "Įvesk tinkamą failo vardą."
-
-#: db/models/fields/__init__.py:753
-msgid "This value must be either None, True or False."
-msgstr "Ši reikšmė turi būti viena iš None, True arba False."
-
-#: db/models/fields/related.py:53
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Įveskite tinkamą %s"
-
-#: db/models/fields/related.py:642
-msgid "Separate multiple IDs with commas."
-msgstr "Atskirkite skirtingus ID su kableliu."
-
-#: db/models/fields/related.py:644
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Paspausk ir laikyk \"Control\", arba \"Command\" Mac'uose, kad pasirinkti daugiau nei vieną."
-
-#: db/models/fields/related.py:691
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Įveskite tinkamą %(self)s ID. Reikšmė %(value)r yra netinkama."
-msgstr[1] "Įveskite tinkamą %(self)s ID. Reikšmės %(value)r yra netinkamos."
-
-#: conf/global_settings.py:39
-msgid "Arabic"
-msgstr "Arabų"
-
-#: conf/global_settings.py:40
-msgid "Bengali"
-msgstr "Bengalų"
-
-#: conf/global_settings.py:41
-msgid "Catalan"
-msgstr "Katalonų"
-
-#: conf/global_settings.py:42
-msgid "Czech"
-msgstr "Čekų"
-
-#: conf/global_settings.py:43
-msgid "Welsh"
-msgstr "Velso"
-
-#: conf/global_settings.py:44
-msgid "Danish"
-msgstr "Danų"
-
-#: conf/global_settings.py:45
-msgid "German"
-msgstr "Vokiečių"
-
-#: conf/global_settings.py:46
-msgid "Greek"
-msgstr "Graikų"
-
-#: conf/global_settings.py:47
-msgid "English"
-msgstr "Anglų"
-
-#: conf/global_settings.py:48
-msgid "Spanish"
-msgstr "Ispanų"
-
-#: conf/global_settings.py:49
-msgid "Argentinean Spanish"
-msgstr "Argentinos Ispanų"
-
-#: conf/global_settings.py:50
-msgid "Finnish"
-msgstr "Suomių"
-
-#: conf/global_settings.py:51
-msgid "French"
-msgstr "Prancūzų"
-
-#: conf/global_settings.py:52
-msgid "Galician"
-msgstr "Galų"
-
-#: conf/global_settings.py:53
-msgid "Hungarian"
-msgstr "Vengrų"
-
-#: conf/global_settings.py:54
-msgid "Hebrew"
-msgstr "Hebrajų"
-
-#: conf/global_settings.py:55
-msgid "Icelandic"
-msgstr "Islandų"
-
-#: conf/global_settings.py:56
-msgid "Italian"
-msgstr "Italų"
-
-#: conf/global_settings.py:57
-msgid "Japanese"
-msgstr "Japonų"
-
-#: conf/global_settings.py:58
-msgid "Korean"
-msgstr "Korėjiečių"
-
-#: conf/global_settings.py:59
-msgid "Kannada"
-msgstr "Dravidų"
-
-#: conf/global_settings.py:60
-msgid "Latvian"
-msgstr "Latvių"
-
-#: conf/global_settings.py:61
-msgid "Macedonian"
-msgstr "Makedonų"
-
-#: conf/global_settings.py:62
-msgid "Dutch"
-msgstr "Olandų"
-
-#: conf/global_settings.py:63
-msgid "Norwegian"
-msgstr "Norvegų"
-
-#: conf/global_settings.py:64
-msgid "Polish"
-msgstr "Lenkų"
-
-#: conf/global_settings.py:65
-msgid "Portugese"
-msgstr "Portugalų"
-
-#: conf/global_settings.py:66
-msgid "Brazilian"
-msgstr "Brazilų"
-
-#: conf/global_settings.py:67
-msgid "Romanian"
-msgstr "Rumunų"
-
-#: conf/global_settings.py:68
-msgid "Russian"
-msgstr "Rusų"
-
-#: conf/global_settings.py:69
-msgid "Slovak"
-msgstr "Slovakų"
-
-#: conf/global_settings.py:70
-msgid "Slovenian"
-msgstr "Slovėnų"
-
-#: conf/global_settings.py:71
-msgid "Serbian"
-msgstr "Serbų"
-
-#: conf/global_settings.py:72
-msgid "Swedish"
-msgstr "Švedų"
-
-#: conf/global_settings.py:73
-msgid "Tamil"
-msgstr "Tamilų"
-
-#: conf/global_settings.py:74
-msgid "Telugu"
-msgstr "Telugų"
-
-#: conf/global_settings.py:75
-msgid "Turkish"
-msgstr "Turkų"
-
-#: conf/global_settings.py:76
-msgid "Ukrainian"
-msgstr "Ukrainiečių"
-
-#: conf/global_settings.py:77
-msgid "Simplified Chinese"
-msgstr "Supaprastinta kinų"
-
-#: conf/global_settings.py:78
-msgid "Traditional Chinese"
-msgstr "Tradicinė kinų"
-
-#: core/validators.py:64
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Ši reikšmė gali būti sudaryta tik iš raidžių, skaičių ir pabraukimų."
-
-#: core/validators.py:68
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Ši reikšmė gali būti sudaryta tik iš raidžių, skaičių, pabraukimų, brūkšnių ir/arba pasvirų brūkšnių."
-
-#: core/validators.py:72
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "Ši reikšmė gali būti sudaryta tik iš raidžių, skaičių, pabraukimų arba brūkšnelių."
-
-#: core/validators.py:76
-msgid "Uppercase letters are not allowed here."
-msgstr "Didžiosios raidės nėra leidžiamos."
-
-#: core/validators.py:80
-msgid "Lowercase letters are not allowed here."
-msgstr "Mažosios raidės nėra leidžiamos."
-
-#: core/validators.py:87
-msgid "Enter only digits separated by commas."
-msgstr "Įvesk skaitmenis atskirtus kableliais."
-
-#: core/validators.py:99
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Įvesk tinkamus e-mailus atskirtus kableliais."
-
-#: core/validators.py:103
-msgid "Please enter a valid IP address."
-msgstr "Įveskt tinkamą IP adresą."
-
-#: core/validators.py:107
-msgid "Empty values are not allowed here."
-msgstr "Tuščios reikšmės neleidžiamos."
-
-#: core/validators.py:111
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Ne skaičius neleidžiamas čia."
-
-#: core/validators.py:115
-msgid "This value can't be comprised solely of digits."
-msgstr "Ši reikšmė negali būti sudaryta vientik iš skaičių."
-
-#: core/validators.py:120
-#: newforms/fields.py:128
-msgid "Enter a whole number."
-msgstr "Įvesk sveiką skaičių."
-
-#: core/validators.py:124
-msgid "Only alphabetical characters are allowed here."
-msgstr "Tik alfabetiniai simboliai leidžiami."
-
-#: core/validators.py:139
-msgid "Year must be 1900 or later."
-msgstr "Metai turi būti 1900 arba vėlesni."
-
-#: core/validators.py:143
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Netinkama data: %s"
-
-#: core/validators.py:153
-msgid "Enter a valid time in HH:MM format."
-msgstr "Įvesk tinkamą laiką HH:MM formatu"
-
-#: core/validators.py:162
-#: newforms/fields.py:271
-msgid "Enter a valid e-mail address."
-msgstr "Įvesk tinkamą e-mailą."
-
-#: core/validators.py:178
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Atsiųsk tinkamą paveiksliuką. Failas, kurį siuntei buvo arba ne paveiksliukas, arba sugadintas paveiksliukas"
-
-#: core/validators.py:185
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "URL %s nenurodo tinkamo paveiksliuko."
-
-#: core/validators.py:189
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Telefono numeris turi būti XXX-XXX-XXXX formatu. \"%s\" yra netinkamas."
-
-#: core/validators.py:197
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "URL %s nenurodo tinkamo QuickTime video."
-
-#: core/validators.py:201
-msgid "A valid URL is required."
-msgstr "Tinkamas URL privalomas."
-
-#: core/validators.py:215
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Tinkamas HTML privalomas. Klaidos:\n"
-"%s"
-
-#: core/validators.py:222
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "Blogai suformuotas XML: %s"
-
-#: core/validators.py:239
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "Netinkamas URL: %s"
-
-#: core/validators.py:244
-#: core/validators.py:246
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "URL %s yra neveikiantis."
-
-#: core/validators.py:252
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Įvesk tinkamą JAV valstijos sutrumpinimą."
-
-#: core/validators.py:266
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Kontroliuok liežuvį! %s neleidžiamas."
-msgstr[1] "Kontroliuok liežuvį! %s neleidžiami."
-
-#: core/validators.py:273
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Šis laukas turi atitikti %s lauką."
-
-#: core/validators.py:292
-msgid "Please enter something for at least one field."
-msgstr "Nors vienam lauke kažką reikia įvesti."
-
-#: core/validators.py:301
-#: core/validators.py:312
-msgid "Please enter both fields or leave them both empty."
-msgstr "Įveskite abu laukus arba abu palikite tuščius."
-
-#: core/validators.py:320
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Šis laukas turi būti užpildytas, jei %(field)s yra %(value)s"
-
-#: core/validators.py:333
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Šis laukas turi būti užpildytas, jei %(field)s nėra %(value)s"
-
-#: core/validators.py:352
-msgid "Duplicate values are not allowed."
-msgstr "Vienodos reikšmės neleidžiamos."
-
-#: core/validators.py:367
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Ši reikšmė turi būti tarp %(lower)s ir %(upper)s."
-
-#: core/validators.py:369
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Ši reikšme mažiausiai turi būti %s."
-
-#: core/validators.py:371
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Ši reikšmė negali būti daugiau nei %s."
-
-#: core/validators.py:407
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Ši reikšmė turi būti %s laipsnis."
-
-#: core/validators.py:418
-msgid "Please enter a valid decimal number."
-msgstr "Įveskite tinkamą dešimtainį skaičių."
-
-#: core/validators.py:422
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Įveskite tinkamą dešimtainį skaičių su daugiausiai %s skaitmeniu."
-msgstr[1] "Įveskite tinkamą dešimtainį skaičių su daugiausiai %s skaitmenimis."
-
-#: core/validators.py:425
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "Įveskite tinkamą dešimtainį skaičių, kurio sveikoji dalis ne didenė nei %s skaitmens."
-msgstr[1] "Įveskite tinkamą dešimtainį skaičių, kurio sveikoji dalis ne didenė nei %s skaitmenų."
-
-#: core/validators.py:428
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Įveskite tinkamą dešimtainį skaičių, kur po kablelio max %s skaitmuo."
-msgstr[1] "Įveskite tinkamą dešimtainį skaičių, kur po kablelio max %s skaitmenų."
-
-#: core/validators.py:438
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Įsitikink, kad įkeltas failas yra mažiausiai %s baitų dydžio."
-
-#: core/validators.py:439
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Įsitikink, kad įkeltas failas yra daugiausiai %s baitų dydžio."
-
-#: core/validators.py:456
-msgid "The format for this field is wrong."
-msgstr "Šis formatas yra netinkamas šiam laukui."
-
-#: core/validators.py:471
-msgid "This field is invalid."
-msgstr "Šis laukas yra netinkamas."
-
-#: core/validators.py:507
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Nieko negaliu gauti iš %s"
-
-#: core/validators.py:510
-#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "URL %(url)s gražino blogą Content-Type headerį '%(contenttype)s'."
-
-#: core/validators.py:543
-#, python-format
-msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
-msgstr "Uždaryk neuždarytus %(tag)s tagus nuo %(line)s eilutės. (Pradedant \"%(start)s\" eilute.)"
-
-#: core/validators.py:547
-#, python-format
-msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
-msgstr "Kažkiek teksto pradedant %(line)s eilute nėra leidžiamas šiame kontekste. (Pradedant \"%(start)s\" eilute."
-
-#: core/validators.py:552
-#, python-format
-msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
-msgstr "\"%(attr)s\" eilutėje %(line)s yra netinkamas atributas. (Pradedant \"%(start)s\" eilute.)"
-
-#: core/validators.py:557
-#, python-format
-msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
-msgstr "\"<%(tag)s>\" eilutėje %(line)s yra netinkami tagai. (Pradedant \"%(start)s\" eilute.)"
-
-#: core/validators.py:561
-#, python-format
-msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
-msgstr "Eilutėje %(line)s tagui trūksta vieno ar daugiau privalomų atributų. (Pradedant \"%(start)s\" eilute.)"
-
-#: core/validators.py:566
-#, python-format
-msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
-msgstr "\"%(attr)s\" atributas eilutėje %(line)s turi netinkamą reikšmę. (Pradedant \"%(start)s\" eilute.)"
-
-#: views/generic/create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s sėkmingai sukurtas."
-
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s sėkmingai atnaujintas."
-
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s buvo ištrintas."
-
-#: newforms/models.py:165
-#: newforms/fields.py:364
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Pasirink tinkamą. Tas pasirinkimas nėra iš galimų."
-
-#: newforms/models.py:182
-#: newforms/fields.py:380
-#: newforms/fields.py:456
-msgid "Enter a list of values."
-msgstr "Įvesk reikšmių sarašą."
-
-#: newforms/models.py:188
-#: newforms/fields.py:389
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Pasirink tinkamą. %s nėra vienas iš galimų."
-
-#: newforms/fields.py:103
-#: newforms/fields.py:256
-#, python-format
-msgid "Ensure this value has at most %d characters."
-msgstr "Įsitikink, kad reikšmė daugiausiai turi %d simbolių."
-
-#: newforms/fields.py:105
-#: newforms/fields.py:258
-#, python-format
-msgid "Ensure this value has at least %d characters."
-msgstr "Įsitikink, kad reikšmė mažiausiai turi %d simbolių."
-
-#: newforms/fields.py:130
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Įsitikink, kad ši reikšmė yra mažiau arba lygu %s."
-
-#: newforms/fields.py:132
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Įsitikink, kad ši reikšmė yra daugiau arba lygu %s."
-
-#: newforms/fields.py:165
-msgid "Enter a valid date."
-msgstr "Įvesk tinkamą datą."
-
-#: newforms/fields.py:192
-msgid "Enter a valid time."
-msgstr "Įvesk tinkamą laiką."
-
-#: newforms/fields.py:228
-msgid "Enter a valid date/time."
-msgstr "Įvesk tinkamą datą/laiką."
-
-#: newforms/fields.py:242
-msgid "Enter a valid value."
-msgstr "Įvesk tinkamą reikšmę."
-
-#: newforms/fields.py:289
-#: newforms/fields.py:311
-msgid "Enter a valid URL."
-msgstr "Įvesk tinkamą URL."
-
-#: newforms/fields.py:313
-msgid "This URL appears to be a broken link."
-msgstr "Atrodo URL blogas."
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:17
-#, fuzzy
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:17
-#, fuzzy
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:17
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:47
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milijonas"
-msgstr[1] "%(value).1f milijonas"
-
-#: contrib/humanize/templatetags/humanize.py:50
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milijardas"
-msgstr[1] "%(value).1f milijardas"
-
-#: contrib/humanize/templatetags/humanize.py:53
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilijonas"
-msgstr[1] "%(value).1f trilijonas"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "one"
-msgstr "vienas"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "two"
-msgstr "du"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "three"
-msgstr "trys"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "four"
-msgstr "keturi"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "five"
-msgstr "penki"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "six"
-msgstr "šeši"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "seven"
-msgstr "septyni"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "eight"
-msgstr "aštuoni"
-
-#: contrib/humanize/templatetags/humanize.py:68
-msgid "nine"
-msgstr "devyni"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "nukreiptas (redirect) iš"
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Turi būti absoliutus adresas neįtraukiant domaino. Pavyzdžiui: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "nukreipti(redirect) į"
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Gali būti absoliutus adresas (kaip viršuj) arba pilnas URL pradedant 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "nukreipti"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "nukreipia"
-
-#: contrib/comments/models.py:67
-#: contrib/comments/models.py:166
-msgid "object ID"
-msgstr "objekto ID"
-
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "antraštė"
-
-#: contrib/comments/models.py:69
-#: contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "komentaras"
-
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "reitingas #1"
-
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "reitingas #2"
-
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "reitingas #3"
-
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "reitingas #4"
-
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "reitingas #5"
-
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "reitingas #6"
-
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "reitingas #7"
-
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "reitingas #8"
-
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "tinkamas reitingas"
-
-#: contrib/comments/models.py:83
-#: contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "įvesta data/laikas"
-
-#: contrib/comments/models.py:84
-#: contrib/comments/models.py:170
-msgid "is public"
-msgstr "viešas"
-
-#: contrib/comments/models.py:85
-#: contrib/admin/views/doc.py:304
-msgid "IP address"
-msgstr "IP adresas"
-
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "pašalintas"
-
-#: contrib/comments/models.py:86
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Pažymėk šį laukelį, jei komentaras netinkamas. \"Šis komentaras ištrintas\" bus rodoma."
-
-#: contrib/comments/models.py:91
-msgid "comments"
-msgstr "komentarai"
-
-#: contrib/comments/models.py:131
-#: contrib/comments/models.py:207
-msgid "Content object"
-msgstr "Turinio objektas"
-
-#: contrib/comments/models.py:159
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Paskelbta %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "asmens vardas"
-
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "ip adresas"
-
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr "patvirtinta personalo"
-
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "laisvas komentaras"
-
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "laisvi komentarai"
-
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "rezultatas"
-
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "rezultato data"
-
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "karma rezultatas"
-
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "karma rezultatai"
-
-#: contrib/comments/models.py:242
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d reitingas nuo %(user)s"
-
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Šis komentaras pažymėtas %(user)s:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "pažymėjimo data"
-
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "vartotojo žymė"
-
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "vartotojo žymės"
-
-#: contrib/comments/models.py:273
-#, python-format
-msgid "Flag by %r"
-msgstr "Pažymėtas %r"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "ištrinimo data"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "moderatoriaus ištrynimas"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "moderatoriaus ištrynimai"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Moderatoriaus ištrynimas, pagal %r"
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "Neprisijungę vartotojai negali balsuoti"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "Blogas komentaro ID"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "Negali balsuoti už save"
-
-#: contrib/comments/views/comments.py:27
-msgid "This rating is required because you've entered at least one other rating."
-msgstr "Šis reitingas privalomas nes įvedei mažiausiai vieną kitą reitingą."
-
-#: contrib/comments/views/comments.py:111
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] ""
-"Šis komentaras buvo paskelbtas vartotojo, kuris paskelbė mažiau nei %(count)s komentarą:\n"
-"\n"
-"%(text)s"
-msgstr[1] ""
-"Šis komentaras buvo paskelbtas vartotojo, kuris paskelbė mažiau nei %(count)s komentarų:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:116
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Šis komentaras buvo paskelbtas nerimto vartotojo:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:188
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "Tik POSTai yra leidžiami"
-
-#: contrib/comments/views/comments.py:192
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Vienas ar daugiau privalomų laukų nebuvo įrašytas"
-
-#: contrib/comments/views/comments.py:196
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Kažkas padirbo komentaro formą (saugumo pažeidimai)"
-
-#: contrib/comments/views/comments.py:206
-#: contrib/comments/views/comments.py:292
-msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
-msgstr "Komentaro forma turi blogą 'target' parametrą -- objekto ID blogas"
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Komentaro forma nepateikė 'preview' arba 'post'"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "Vartotojo vardas:"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-msgid "Log out"
-msgstr "Atsijungti"
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Slaptažodis:"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "Pamiršai slaptažodį?"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Reitingas"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Privalomas"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Neprivalomas"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Įkelk nuotrauką"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Komentaras:"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "Peržiūrėti komentarą"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Jūsų vardas:"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "domeno vardas"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "rodomas vardas"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "saitas"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "saitai"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:70
-#: contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
-#: contrib/admin/filterspecs.py:169
-msgid "All"
-msgstr "Visi"
-
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
-msgstr "Betkokia data"
-
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
-msgstr "Šiandien"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
-msgstr "Paskutinės 7 dienos"
-
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
-msgstr "Šį mėnesį"
-
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
-msgstr "Šiais metais"
-
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "veiksmo laikas"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "objekto id"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "objekto repr"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "veiksmo žymė"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr "pakeisti žinutę"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "log įrašas"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "log įrašai"
-
-#: contrib/admin/templatetags/admin_list.py:247
-msgid "All dates"
-msgstr "Visos datos"
-
-#: contrib/admin/views/auth.py:19
-#: contrib/admin/views/main.py:257
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" pridėtas sėkmingai."
-
-#: contrib/admin/views/auth.py:24
-#: contrib/admin/views/main.py:261
-#: contrib/admin/views/main.py:347
-msgid "You may edit it again below."
-msgstr "Gali taisyti dar kartą žemiau."
-
-#: contrib/admin/views/auth.py:30
-msgid "Add user"
-msgstr "Pridėti vartotoją"
-
-#: contrib/admin/views/auth.py:57
-msgid "Password changed successfully."
-msgstr "Slaptažodis pakeistas sėkmingai."
-
-#: contrib/admin/views/auth.py:64
-#, python-format
-msgid "Change password: %s"
-msgstr "Pakeisti slaptažodį: %s"
-
-#: contrib/admin/views/main.py:223
-msgid "Site administration"
-msgstr "Saito administracija"
-
-#: contrib/admin/views/main.py:271
-#: contrib/admin/views/main.py:356
-#, python-format
-msgid "You may add another %s below."
-msgstr "Gali pridėti dar vieną %s žemiau."
-
-#: contrib/admin/views/main.py:289
-#, python-format
-msgid "Add %s"
-msgstr "Pridėti %s"
-
-#: contrib/admin/views/main.py:335
-#, python-format
-msgid "Added %s."
-msgstr "Pridėtas %s."
-
-#: contrib/admin/views/main.py:337
-#, python-format
-msgid "Changed %s."
-msgstr "Pakeistas %s."
-
-#: contrib/admin/views/main.py:339
-#, python-format
-msgid "Deleted %s."
-msgstr "Ištrintas %s"
-
-#: contrib/admin/views/main.py:342
-msgid "No fields changed."
-msgstr "Nei vienas laukas nepakeistas"
-
-#: contrib/admin/views/main.py:345
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" buvo sėkmingai pakeistas."
-
-#: contrib/admin/views/main.py:353
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" pridėtas sėkmingai. Gali taisytį jį dar kartą žemiau."
-
-#: contrib/admin/views/main.py:391
-#, python-format
-msgid "Change %s"
-msgstr "Pakeisti %s"
-
-#: contrib/admin/views/main.py:476
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Vienas arba daugiau %(fieldname)s %(name)s: %(obj)s"
-
-#: contrib/admin/views/main.py:481
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Vienas arba daugiau %(fieldname)s %(name)s:"
-
-#: contrib/admin/views/main.py:514
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" sėkmingai ištrintas."
-
-#: contrib/admin/views/main.py:517
-msgid "Are you sure?"
-msgstr "Ar tu tikras?"
-
-#: contrib/admin/views/main.py:539
-#, python-format
-msgid "Change history: %s"
-msgstr "Pakeisti istoriją: %s"
-
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s"
-msgstr "Pasirinkti %s"
-
-#: contrib/admin/views/main.py:573
-#, python-format
-msgid "Select %s to change"
-msgstr "Pasirinkti %s pakeitimui"
-
-#: contrib/admin/views/main.py:768
-msgid "Database error"
-msgstr "Duomenų bazės klaida"
-
-#: contrib/admin/views/decorators.py:10
-#: contrib/auth/forms.py:60
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Įveskite teisingą vartotojo vardą ir slaptažodį. Abiejuose laukuose didžiosios mažosios raidės skiriasi"
-
-#: contrib/admin/views/decorators.py:24
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-msgstr "Prisijungti"
-
-#: contrib/admin/views/decorators.py:62
-msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
-msgstr "Prisijunkite dar kartą, nes sesijos laikas baigėsi. Nesirūpinkite, įrašai buvo išsaugoti."
-
-#: contrib/admin/views/decorators.py:69
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Atrodo, kad Jūsų naršyklė nepriima sausainėlių (cookies). Įjunkite sausainėlių palaikymą, perkraukite puslapį ir bandykite dar kartą."
-
-#: contrib/admin/views/decorators.py:83
-msgid "Usernames cannot contain the '@' character."
-msgstr "Vartotojo vardas negali turėti '@'."
-
-#: contrib/admin/views/decorators.py:85
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "E-mailas nėra vartotojo vardas. Pabandyk '%s' vietoj to."
-
-#: contrib/admin/views/doc.py:46
-#: contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-msgid "tag:"
-msgstr "tagas"
-
-#: contrib/admin/views/doc.py:77
-#: contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-msgid "filter:"
-msgstr "filtras:"
-
-#: contrib/admin/views/doc.py:135
-#: contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-msgid "view:"
-msgstr "vaizdas:"
-
-#: contrib/admin/views/doc.py:164
-#, python-format
-msgid "App %r not found"
-msgstr "Programa %r nerasta"
-
-#: contrib/admin/views/doc.py:171
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "Modelis %(name)r programoje %(label)r nerastas"
-
-#: contrib/admin/views/doc.py:183
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr "susijęs `%(label)s.%(type)s` objektas"
-
-#: contrib/admin/views/doc.py:183
-#: contrib/admin/views/doc.py:205
-#: contrib/admin/views/doc.py:219
-#: contrib/admin/views/doc.py:224
-msgid "model:"
-msgstr "modelis:"
-
-#: contrib/admin/views/doc.py:214
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "susiję `%(label)s.%(name)s` objektai"
-
-#: contrib/admin/views/doc.py:219
-#, python-format
-msgid "all %s"
-msgstr "visi %s"
-
-#: contrib/admin/views/doc.py:224
-#, python-format
-msgid "number of %s"
-msgstr "%s skaičius"
-
-#: contrib/admin/views/doc.py:229
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Objekto %s laukai"
-
-#: contrib/admin/views/doc.py:291
-#: contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:303
-#: contrib/admin/views/doc.py:309
-#: contrib/admin/views/doc.py:310
-#: contrib/admin/views/doc.py:312
-msgid "Integer"
-msgstr "Sveikas skaičius"
-
-#: contrib/admin/views/doc.py:292
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (True arba False)"
-
-#: contrib/admin/views/doc.py:293
-#: contrib/admin/views/doc.py:311
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "Eilutė (iki %(maxlength)s)"
-
-#: contrib/admin/views/doc.py:294
-msgid "Comma-separated integers"
-msgstr "Kableliais atskirti sveikieji skaičiai"
-
-#: contrib/admin/views/doc.py:295
-msgid "Date (without time)"
-msgstr "Data (be laiko)"
-
-#: contrib/admin/views/doc.py:296
-msgid "Date (with time)"
-msgstr "Data (su laiku)"
-
-#: contrib/admin/views/doc.py:297
-msgid "E-mail address"
-msgstr "E-mailo adresas"
-
-#: contrib/admin/views/doc.py:298
-#: contrib/admin/views/doc.py:299
-#: contrib/admin/views/doc.py:302
-msgid "File path"
-msgstr "Kelias iki failo"
-
-#: contrib/admin/views/doc.py:300
-msgid "Decimal number"
-msgstr "Dešimtainis skaičius"
-
-#: contrib/admin/views/doc.py:306
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (True arba False arba None)"
-
-#: contrib/admin/views/doc.py:307
-msgid "Relation to parent model"
-msgstr "Sąsaja su tėviniu modeliu"
-
-#: contrib/admin/views/doc.py:308
-msgid "Phone number"
-msgstr "Telefono numeris"
-
-#: contrib/admin/views/doc.py:313
-msgid "Text"
-msgstr "Tekstas"
-
-#: contrib/admin/views/doc.py:314
-msgid "Time"
-msgstr "Laikas"
-
-#: contrib/admin/views/doc.py:315
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:316
-msgid "U.S. state (two uppercase letters)"
-msgstr "JAV valstija (dvi didžiosios raidės)"
-
-#: contrib/admin/views/doc.py:317
-msgid "XML text"
-msgstr "XML tekstas"
-
-#: contrib/admin/views/doc.py:343
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s neatrodo kaip urlpattern objektas"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Dabartinis:"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Pakeisti:"
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Laikas:"
-
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentacija"
-
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:9
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-msgid "Change password"
-msgstr "Pakeisti slaptažodį"
-
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/auth/user/change_password.html:12
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Pradinis"
-
-#: contrib/admin/templates/admin/change_list.html:12
-#, python-format
-msgid "Add %(name)s"
-msgstr "Pridėti %(name)s"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Pagal %(filter_title)s "
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "History"
-msgstr "Istorija"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "Data/laikas"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "Vartotojas"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "Veiksmas"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "j. N Y, H:i"
-
-#: contrib/admin/templates/admin/object_history.html:36
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Šis objektas neturi pakeitimų istorijos. Tikriausiai jis buvo pridėtas ne per admin puslapį."
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Eiti!"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 rezultatas"
-msgstr[1] "%(counter)s rezultatai"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s iš viso"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Rodyti visus"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django saito administravimas"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administravimas"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serverio klaida"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serverio klaida (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serverio klaida <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Įvyko klaida. Apie ją buvo pranešta administratoriams ir turėtų būti greitai ištaisyta. Dėkojame už kantrybę."
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Kažkas yra negerai su jūsų duomenų bazės instaliacija. Įsitikink, kad visos reikalingos lentelės sukurtos ir vartotojas turi teises skaityti duomenų bazę."
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelis prieinamas %(name)s programoje."
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/index.html:28
-#: contrib/admin/templates/admin/change_form.html:15
-msgid "Add"
-msgstr "Pridėti"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Pakeisti"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Neturi teisių ką nors keistis."
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Neseni veiksmai"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "Mano Veiksmai"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Nėra prieinamų"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Puslapis nerastas"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Atsiprašome, bet prašytas puslapis nerastas."
-
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "Filtras"
-
-#: contrib/admin/templates/admin/change_form.html:22
-msgid "View on site"
-msgstr "Matyti saite"
-
-#: contrib/admin/templates/admin/change_form.html:32
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Ištaisykite klaidą žemiau"
-msgstr[1] "Ištaisykite klaidas žemiau"
-
-#: contrib/admin/templates/admin/change_form.html:50
-msgid "Ordering"
-msgstr "Rūšiavimas"
-
-#: contrib/admin/templates/admin/change_form.html:53
-msgid "Order:"
-msgstr "Rūšiuoti:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "Ištrinti"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Trinant %(object_name)s '%(escaped_object)s' turi būti ištrinti ir susiję objektai, bet tavo vartotojas neturi teisių ištrinti šių objektų:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "Ar tu esi tikras, kad nori ištrinti %(object_name)s \"%(escaped_object)s\"? Visi susiję objektai bus ištrinti:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "Taip, aš esu tikras"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "Sveiki,"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Išsaugoti kaip naują"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Išsaugoti ir pridėti naują"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Išsaugoti ir tęsti redagavimą"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Išsaugoti"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Įvesk naują slaptažodį vartotojui <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-msgid "Password"
-msgstr "Slaptažodis"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-msgid "Password (again)"
-msgstr "Slaptažodis (dar kartą)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-msgid "Enter the same password as above, for verification."
-msgstr "Patikrinimui įvesk tokį patį slaptažodį, kaip viršuje."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Pirmiausi įvesk vartotojo vardą ir slaptažodį. Tada turėsi galimybę redaguoti daugiau nustatymų."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "Vartotojo vardas"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Slaptažodžio keitimas"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Slaptažodis sėkmingai pakeistas"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Jūsų slaptažodis buvo pakeistas."
-
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-#: contrib/admin/templates/registration/password_reset_done.html:4
-msgid "Password reset"
-msgstr "Slaptažodžiu atstatymas(reset)"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
-msgstr "Pamiršai slaptažodį? Įvesk savo emailą žemiau ir mes atsiųsime naują slaptažodį emailu."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mailo adresas:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Atstatyti slaptažodį"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Dėkui už praleistą laiką šiandien."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Prisijungti dar kartą"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Slaptažodis sėkmingai atsatytas"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Išsiuntėm naują slaptažodį e-mailu. Turėtumėte greitai gauti."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Saugumo sumetimais įvesk seną slaptažodį ir tada du kartus naują, kad įsitikinti, jog nesuklydai rašydamas"
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Senas slaptažodis:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "Naujas slaptažodis:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "Slaptažodžio patvirtinimas:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "Pakeisti slaptažodį"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Gavote šį laišką, nes paprašėte atstatyti slaptažodį"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "Jūsų vartotojui %(site_name)s saite"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "Jūsų naujas slaptažodis yra: %(new_password)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Nebijokite pasikeisti šį slaptažodį puslapyje:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "Jūsų vartotojo vardas, jei netyčia užmiršote:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "Dėkui, kad naudojatės mūsų saitu!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s komanda"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Greitosios žymės"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "Doumentacijos greitosios žymės"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Greitųjų žymių įdiegimui, nutempkite nuorodą į greitųjų žymių\n"
-"juostą, arba spauskite dešinį pelės klavišą ir pridėkite prie greitųjų žymių. Dabar galite\n"
-"pasirinkti greitąją žymę iš bet kurio saito puslapio. Pastebėjimas, kad keletas iš šių\n"
-"greitųjų žymių reikalauja, kad saitas būtų žiūrimas iš vidinio kompiuterio \n"
-"(pasitarkite su administratorium, jei nežinai ar tavo kompiuteris yra vidinis).</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "Šio puslapio dokumentacija"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Pereina iš bet kurio puslapio į jo view funkcijos dokumentaciją, kuri sukūria tą puslapį"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "Parodyti objekto ID"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Parodyti content-type ir unikalų puslapių ID, kuris parodo vieną objektą."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "Redaguoti šį objektą (einamajame lange)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Pereina į administravimo puslapį, kuris parodo vieną objektą."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "Redaguoti šį objektą (naujame lange)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr "Kaip ir viršuje, bet administravimo puslapį atidaro naujame lange."
-
-#: contrib/contenttypes/models.py:36
-msgid "python model class name"
-msgstr "python modelio klasės vardas"
-
-#: contrib/contenttypes/models.py:39
-msgid "content type"
-msgstr "turinio tipas"
-
-#: contrib/contenttypes/models.py:40
-msgid "content types"
-msgstr "turinio tipai"
-
-#: contrib/auth/views.py:40
-msgid "Logged out"
-msgstr "Atsijungęs"
-
-#: contrib/auth/models.py:44
-#: contrib/auth/models.py:64
-msgid "name"
-msgstr "vardas"
-
-#: contrib/auth/models.py:46
-msgid "codename"
-msgstr "kodinis vardas"
-
-#: contrib/auth/models.py:49
-msgid "permission"
-msgstr "leidimas"
-
-#: contrib/auth/models.py:50
-#: contrib/auth/models.py:65
-msgid "permissions"
-msgstr "leidimai"
-
-#: contrib/auth/models.py:68
-msgid "group"
-msgstr "grupė"
-
-#: contrib/auth/models.py:69
-#: contrib/auth/models.py:109
-msgid "groups"
-msgstr "grupės"
-
-#: contrib/auth/models.py:99
-msgid "username"
-msgstr "vartotojo vardas"
-
-#: contrib/auth/models.py:99
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "Privalomas. 30 simbolių arba mažiau. Alfanumeriniai simboliai tik (raidės, skaitmenys ir pabraukimai)"
-
-#: contrib/auth/models.py:100
-msgid "first name"
-msgstr "vardas"
-
-#: contrib/auth/models.py:101
-msgid "last name"
-msgstr "pavardė"
-
-#: contrib/auth/models.py:102
-msgid "e-mail address"
-msgstr "e-mailo adresas"
-
-#: contrib/auth/models.py:103
-msgid "password"
-msgstr "slaptažodis"
-
-#: contrib/auth/models.py:103
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Naudok '[algo]$[salt]$[hexdigest]' arba naudok <a href=\"password/\">slaptažodžio keitimo formą</a>."
-
-#: contrib/auth/models.py:104
-msgid "staff status"
-msgstr "personalo statusas"
-
-#: contrib/auth/models.py:104
-msgid "Designates whether the user can log into this admin site."
-msgstr "Pažymi ar vartotojas gali prisijungti prie administravimo puslapio."
-
-#: contrib/auth/models.py:105
-msgid "active"
-msgstr "aktyvus"
-
-#: contrib/auth/models.py:105
-msgid "Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."
-msgstr "Pažymi ar šis vartotojas gali prisijungti prie Django administravimo. Nepažymėk šios lauko, vietoj vartotojo trynimo."
-
-#: contrib/auth/models.py:106
-msgid "superuser status"
-msgstr "supervartotojo statusas"
-
-#: contrib/auth/models.py:106
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Pažymi, kad šis vartotojas turi visas teises be specialių nustatymų."
-
-#: contrib/auth/models.py:107
-msgid "last login"
-msgstr "paskutinį kartą prisijungęs"
-
-#: contrib/auth/models.py:108
-msgid "date joined"
-msgstr "data, kada prisijungė"
-
-#: contrib/auth/models.py:110
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Prie rankiniu būdų priskirtų teisių, šis vartotojas taip pat gaus visas teises, kurias turi grupės, kurioms jis priklauso."
-
-#: contrib/auth/models.py:111
-msgid "user permissions"
-msgstr "vartotojo leidimai"
-
-#: contrib/auth/models.py:115
-msgid "user"
-msgstr "vartotojas"
-
-#: contrib/auth/models.py:116
-msgid "users"
-msgstr "vartotojai"
-
-#: contrib/auth/models.py:122
-msgid "Personal info"
-msgstr "Asmeninė informacija"
-
-#: contrib/auth/models.py:123
-msgid "Permissions"
-msgstr "Leidimai"
-
-#: contrib/auth/models.py:124
-msgid "Important dates"
-msgstr "Svarbios datos"
-
-#: contrib/auth/models.py:125
-msgid "Groups"
-msgstr "Grupės"
-
-#: contrib/auth/models.py:269
-msgid "message"
-msgstr "žinutė"
-
-#: contrib/auth/models.py:282
-msgid "AnonymousUser"
-msgstr "Anoniminis vartotojas"
-
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:138
-msgid "The two password fields didn't match."
-msgstr "Slaptažodžio laukai nesutapo"
-
-#: contrib/auth/forms.py:25
-msgid "A user with that username already exists."
-msgstr "Jau egzistuoja vartotojas su tokiu vardu."
-
-#: contrib/auth/forms.py:53
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Atrodo, jūsų naršyklė nepriima sausainėlių(cookies). Sausainėliai yra reikalingi norint prisijungti."
-
-#: contrib/auth/forms.py:62
-msgid "This account is inactive."
-msgstr "Ši paskyra yra neaktyvi."
-
-#: contrib/auth/forms.py:85
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Šis emailas nėra registruotas sistemoje. Ar esi tikras, kad tu užsiregistravęs?"
-
-#: contrib/auth/forms.py:117
-msgid "The two 'new password' fields didn't match."
-msgstr "Naujo slaptažodžio laukai nesutapo"
-
-#: contrib/auth/forms.py:124
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Blogai įvestas senas slaptažodis. Bandykite dar kartą."
-
-#: contrib/localflavor/uk/forms.py:18
-msgid "Enter a postcode. A space is required between the two postcode parts."
-msgstr "Įveskite pašto kodą. Tarpas reikalingas tarp dviejų pašto kodo dalių."
-
-#: contrib/localflavor/br/forms.py:18
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Įveskite pašto kodą XXXXX-XXX formatu."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonas turi būti XXX-XXXX-XXXX formatu."
-
-#: contrib/localflavor/br/forms.py:72
-msgid "This field requires only numbers."
-msgstr "Šis laukas priima tik skaičius."
-
-#: contrib/localflavor/br/forms.py:74
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Šis laukas talpina daugiausiai 11 skaitmenų arba 14 simbolių."
-
-#: contrib/localflavor/br/forms.py:84
-msgid "Invalid CPF number."
-msgstr "Netinkamas CPF numeris"
-
-#: contrib/localflavor/br/forms.py:106
-msgid "This field requires at least 14 digits"
-msgstr "Šis laukas reikalauja mažiausiai 14 skaitmenų."
-
-#: contrib/localflavor/br/forms.py:116
-msgid "Invalid CNPJ number."
-msgstr "Netinkamas CNPJ numeris"
-
-#: contrib/localflavor/au/forms.py:18
-msgid "Enter a 4 digit post code."
-msgstr "Įveskite 4 skaitmenų pašto kodą."
-
-#: contrib/localflavor/fr/forms.py:17
-#: contrib/localflavor/de/forms.py:16
-#: contrib/localflavor/fi/forms.py:14
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Įveskite pašto kodą XXXXX formatu."
-
-#: contrib/localflavor/us/forms.py:18
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Įveskite pašto kodą XXXXX arba XXXXX-XXXX formatu."
-
-#: contrib/localflavor/us/forms.py:51
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Įveskite tinkamą JAV socialinio draudimo numerį."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavarija"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlynas"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburgas"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremenas"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburgas"
-
-#: contrib/localflavor/de/de_states.py:11
-#, fuzzy
-msgid "Hessen"
-msgstr "Hesenas"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saksonija"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:60
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Įveskite tinkamą Vokiško asmens id numerį XXXXXXXXXXX-XXXXXXX-XXXXXXX-X formatu."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokaidas"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-#, fuzzy
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokijas"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-#, fuzzy
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hirošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-#, fuzzy
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinava"
-
-#: contrib/localflavor/jp/forms.py:21
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Įveskite pašto kodą XXXXXXX arba XXX-XXXX formatu."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-#, fuzzy
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-#, fuzzy
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-#, fuzzy
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-#, fuzzy
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-#, fuzzy
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:18
-#: contrib/localflavor/no/forms.py:15
-msgid "Enter a zip code in the format XXXX."
-msgstr "Įveskite pašto kodą XXXX formatu."
-
-#: contrib/localflavor/ch/forms.py:90
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "Įveskite tinkamą šveicarų asmens id ar paso numerį X1234567<0 arba 1234567890 formatu."
-
-#: contrib/localflavor/is_/forms.py:16
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Įveskite tinkamą islandų asmens id numerį XXXXXX-XXXX formatu."
-
-#: contrib/localflavor/is_/forms.py:30
-msgid "The Icelandic identification number is not valid."
-msgstr "Islandiškas asmend id yra netinkamas."
-
-#: contrib/localflavor/it/forms.py:16
-msgid "Enter a valid zip code."
-msgstr "Įveskite tinkamą pašto kodą."
-
-#: contrib/localflavor/it/forms.py:41
-msgid "Enter a valid Social Security number."
-msgstr "Įveskite tinkamą socialinio draudimo numerį."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Įveskite tinkamą PVM numerį"
-
-#: contrib/localflavor/no/forms.py:36
-msgid "Enter a valid Norwegian social security number."
-msgstr "Įveskite tinkamą norvegiška socialinio draudimo numerį."
-
-#: contrib/localflavor/cl/forms.py:21
-msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Įveskite tinkamą Čilės RUT XX.XXX.XXX-X formatu."
-
-#: contrib/localflavor/cl/forms.py:26
-msgid "Enter valid a Chilean RUT"
-msgstr "Įveskite tinkamą Čilės RUT"
-
-#: contrib/localflavor/fi/forms.py:40
-#: contrib/localflavor/fi/forms.py:45
-msgid "Enter a valid Finnish social security number."
-msgstr "Įveskite tinkamą suomišką socialinio draudimo numerį."
-
-#: contrib/sessions/models.py:68
-msgid "session key"
-msgstr "sesijos raktas"
-
-#: contrib/sessions/models.py:69
-msgid "session data"
-msgstr "sesijos data"
-
-#: contrib/sessions/models.py:70
-msgid "expire date"
-msgstr "galiojima data"
-
-#: contrib/sessions/models.py:74
-msgid "session"
-msgstr "sesija"
-
-#: contrib/sessions/models.py:75
-msgid "sessions"
-msgstr "sesijos"
-
-#: contrib/flatpages/models.py:8
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Pavyzdžiui: '/about/contact/'. Įsitikink, kad yra pasvirieji brūkšniai pradžioj ir gale."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "pavadinimas"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "turinys"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "įjungti komentavimą"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "šablono vardas"
-
-#: contrib/flatpages/models.py:13
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Pavyzdžiui: 'flatpages/contact_page.html'. Jeigu bus nenurodytas, sistema naudos 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "registracija privaloma"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Jeigu pažymėta, tik prisijungę vartotojai galės matyti šį puslapį."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "paprastas puslapis"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "paprasti puslapiai"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Pirmadienis"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Antradienis"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Trečiadienis"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Ketvirtadienis"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Penktadienis"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Šeštadienis"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Sekmadienis"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "Sausis"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "Vasaris"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "March"
-msgstr "Kovas"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "April"
-msgstr "Balandis"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "May"
-msgstr "Gegužė"
-
-#: utils/dates.py:14
-#: utils/dates.py:27
-msgid "June"
-msgstr "Birželis"
-
-#: utils/dates.py:15
-#: utils/dates.py:27
-msgid "July"
-msgstr "Liepa"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "Rugpjūtis"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "Rugsėjis"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "Spalis"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "Lapkritis"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "Gruodis"
-
-#: utils/dates.py:19
-msgid "jan"
-msgstr "sau"
-
-#: utils/dates.py:19
-msgid "feb"
-msgstr "vas"
-
-#: utils/dates.py:19
-msgid "mar"
-msgstr "kov"
-
-#: utils/dates.py:19
-msgid "apr"
-msgstr "bal"
-
-#: utils/dates.py:19
-msgid "may"
-msgstr "geg"
-
-#: utils/dates.py:19
-msgid "jun"
-msgstr "bir"
-
-#: utils/dates.py:20
-msgid "jul"
-msgstr "lie"
-
-#: utils/dates.py:20
-msgid "aug"
-msgstr "rugp"
-
-#: utils/dates.py:20
-msgid "sep"
-msgstr "rugs"
-
-#: utils/dates.py:20
-msgid "oct"
-msgstr "spa"
-
-#: utils/dates.py:20
-msgid "nov"
-msgstr "lap"
-
-#: utils/dates.py:20
-msgid "dec"
-msgstr "grd"
-
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "Sau."
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "Vas."
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "Rugp."
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "Rugs."
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "Spa."
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "Lap."
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "Grd."
-
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "metai"
-msgstr[1] "metai"
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mėnesis"
-msgstr[1] "mėnesiai"
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "savaitė"
-msgstr[1] "savaitės"
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "diena"
-msgstr[1] "dienos"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "valanda"
-msgstr[1] "valandos"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minutė"
-msgstr[1] "minutės"
-
-#: utils/timesince.py:40
-#, python-format
-msgid "%d milliseconds"
-msgstr "%d milisekundės"
-
-#: utils/timesince.py:41
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:47
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/dateformat.py:40
-#, fuzzy
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:41
-#, fuzzy
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:46
-#, fuzzy
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:47
-#, fuzzy
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:95
-msgid "midnight"
-msgstr "vidurnaktis"
-
-#: utils/dateformat.py:97
-msgid "noon"
-msgstr "vidurdienis"
-
-#: utils/translation/trans_real.py:358
-msgid "DATE_FORMAT"
-msgstr "DATE_FORMAT"
-
-#: utils/translation/trans_real.py:359
-msgid "DATETIME_FORMAT"
-msgstr "DATETIME_FORMAT"
-
-#: utils/translation/trans_real.py:360
-msgid "TIME_FORMAT"
-msgstr "TIME_FORMAT"
-
-#: utils/translation/trans_real.py:376
-msgid "YEAR_MONTH_FORMAT"
-msgstr "YEAR_MONTH_FORMAT"
-
-#: utils/translation/trans_real.py:377
-msgid "MONTH_DAY_FORMAT"
-msgstr "MONTH_DAY_FORMAT"
-
-#: template/defaultfilters.py:491
-msgid "yes,no,maybe"
-msgstr "taip,ne,galbūt"
-
-#: template/defaultfilters.py:520
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d baitas"
-msgstr[1] "%(size)d baitai"
-
-#: template/defaultfilters.py:522
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:524
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:525
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
diff --git a/parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index d703bfb..0000000
--- a/parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 81d6988..0000000
--- a/parts/django/django/conf/locale/lt/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,116 +0,0 @@
-# Lithuanian translation of Django.
-# Copyright (C) 2008 The Django Software Foundation
-# This file is distributed under the same license as the Django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-15 23:03+0300\n"
-"PO-Revision-Date: 2008-06-18 22:37+0200\n"
-"Last-Translator: Rapolas Kaselis <rapolas@gmail.com>\n"
-"Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Galimas %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Pasirinkti visus"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Pridėti"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Pašalinti"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Pasirinktas %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Pasirink ir paspausk"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Išvalyti visus"
-
-#: contrib/admin/media/js/dateparse.js:32
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "Sausis Vasaris Kovas Balandis Gegužė Birželis Liepa Rugpjūtis Rugsėjis "
-"Spalis Lapkritis Gruodis"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Sekmadienis Pirmadienis Antradienis Trečiadienis Ketvirtadienis Penktadienis Šeštadienis"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S P A T K P Š"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Dabar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Laikrodis"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Pasirink laiką"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Vidurnaktis"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Vidurdienis"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Atšaukti"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Šiandien"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Kalendorius"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Vakar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Rytoj"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Parodyti"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Slėpti"
diff --git a/parts/django/django/conf/locale/lt/__init__.py b/parts/django/django/conf/locale/lt/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/lt/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/lt/formats.py b/parts/django/django/conf/locale/lt/formats.py
deleted file mode 100644
index 0b2cc78..0000000
--- a/parts/django/django/conf/locale/lt/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'Y \m. F j \d.'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-SHORT_DATE_FORMAT = 'Y.m.d'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/lv/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/lv/LC_MESSAGES/django.mo
deleted file mode 100644
index ee2c0b3..0000000
--- a/parts/django/django/conf/locale/lv/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/lv/LC_MESSAGES/django.po b/parts/django/django/conf/locale/lv/LC_MESSAGES/django.po
deleted file mode 100644
index 79ca8a4..0000000
--- a/parts/django/django/conf/locale/lv/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5471 +0,0 @@
-# Django Latvian translation.
-# Copyright (C) 2008 THE Django'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the Django package.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 23:47+0200\n"
-"PO-Revision-Date: 2010-05-10 20:18+0200\n"
-"Last-Translator: Reinis Veips <reinis.veips@wot.lv>\n"
-"Language-Team: Latvian translators' team <reinis.veips@wot.lv>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
-"2);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "arābu"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "bulgāru"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengāļu"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosniešu"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "katalāņu"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "čehu"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "velsiešu"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "dāņu"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "vācu"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "grieķu"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "angļu"
-
-#: conf/global_settings.py:55
-#, fuzzy
-msgid "British English"
-msgstr "angļu"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "spāņu"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Argentīnas spāņu"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "igauņu"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "basku"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "persiešu"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "somu"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "franču"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "frīzu"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "īru"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "galīciešu"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "ebreju"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "horvātu"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "ungāru"
-
-#: conf/global_settings.py:70
-#, fuzzy
-msgid "Indonesian"
-msgstr "maķedoniešu"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "islandiešu"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "itāļu"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Japāņu"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "vācu"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "khmeru"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "kannādiešu"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "korejiešu"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "lietuviešu"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "latviešu"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "maķedoniešu"
-
-#: conf/global_settings.py:81
-#, fuzzy
-msgid "Mongolian"
-msgstr "maķedoniešu"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "holandiešu"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "norvēģu"
-
-#: conf/global_settings.py:84
-#, fuzzy
-msgid "Norwegian Bokmal"
-msgstr "norvēģu"
-
-#: conf/global_settings.py:85
-#, fuzzy
-msgid "Norwegian Nynorsk"
-msgstr "norvēģu"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "poļu"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "portugāļu"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "Brazīlijas portugāļu"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "rumāņu"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "krievu"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "slovāku"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "slovēņu"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "albāņu"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "serbu"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "serbu latīņu"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "zviedru"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "tamilu"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "taizemiešu"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "turku"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "ukraiņu"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "vjetnamiešu"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "vienkāršā ķīniešu"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "tradicionālā ķīniešu"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Veiksmīgi izdzēsti %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Vai esat pārliecināts?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Izdzēst izvēlēto %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Pēc %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Visi"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Jebkurš datums"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Šodien"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Pēdējās 7 dienas"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Šomēnes"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Šogad"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Jā"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Nē"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Nezināms"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Darbība:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "darbības laiks"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objekta id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objekta attēlojums"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "darbības atzīme"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "izmaiņas teksts"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "žurnāla ieraksts"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "žurnāla ieraksti"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "nekas"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Izmainīts %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "un"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Pievienots %(name)s \"%(object)s\""
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Izmainīts %(list)s priekš %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Dzēsts %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Lauki nav izmainīti"
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" pievienots sekmīgi."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Zemāk varat labot to atkal"
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Zemāk varat pievienot vēl vienu %s."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" nomainīts sekmīgi."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" pievienots sekmīgi. Zemāk varat to labot."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr "Lai veiktu darbību, jāizvēlas rindas. Rindas nav izmainītas."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Nav izvēlēta darbība."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Pievienot %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s objekts ar primāro atslēgu %(key)r neeksistē."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Labot %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Datubāzes kļūda"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s ir labots sekmīgi"
-msgstr[1] "%(count)s %(name)s ir rediģēti sekmīgi"
-msgstr[2] "%(count)s %(name)s nav rediģēts."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s izvēlēts"
-msgstr[1] "%(total_count)s izvēlēti"
-msgstr[2] "%(total_count)s izvēlēti"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 no %(cnt)s izvēlēti"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" sekmīgi izdzēsts."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Izmaiņu vēsture: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Lūdzu ievadiet lietotājvārdu un paroli. Ievērojiet, ka abi lauki ir "
-"reģistrjūtīgi."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Lūdzu pieslēdzieties vēlreiz, jūsu sesija ir beigusies."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Izskatās, ka izmantotais pārlūks neatbalsta sīkdatnes (cookies). Lūdzu "
-"ieslēdziet sīkdatņu atbalstu, pārlādējiet lapu un mēģiniet vēlreiz."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Lietotājvārdi nevar saturēt simbolu '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Jūsu e-pasta adrese nav jūsu lietotājvārds. Izmēģiniet '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Lapas administrācija"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Pieslēgties"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s administrācija"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Datums:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Laiks:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Pašreiz:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Nomainīt:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Pārlūkot"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Pievienot vēl vienu"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Lapa nav atrasta"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Atvainojiet, pieprasītā lapa neeksistē."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Sākums"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Servera kļūda"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Servera kļūda (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Servera kļūda <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Ir notikusi kļūda. Tā ir paziņota lapas administratoriem ar e-pasta "
-"starpniecību un visdrīzākajā laikā tiks izlabota. Paldies par sapratni."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Izpildīt izvēlēto darbību"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Aiziet!"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Spiest šeit, lai iezīmētu objektus no visām lapām"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Izvēlēties visus %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Atcelt iezīmēto"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Sveicināti,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentācija"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Paroles maiņa"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Atslēgties"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administrācijas lapa"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administrācija"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Pievienot"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Vēsture"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Apskatīt lapā"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Lūdzu, izlabojiet kļūdu zemāk."
-msgstr[1] "Lūdzu, izlabojiet kļūdas zemāk."
-msgstr[2] "Lūdzu, izlabojiet kļūdas zemāk."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Pievienot %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrs"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Dzēst"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Izdzēšot objektu %(object_name)s '%(escaped_object)s', tiks dzēsti visi "
-"saistītie objekti, bet jums nav tiesību dzēst sekojošus objektu tipus:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Vai esat pārliecināts, ka vēlaties dzēst %(object_name)s \"%(escaped_object)s"
-"\"? Tiks dzēsti arī sekojoši saistītie objekti:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Jā, esmu pārliecināts"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Dzēst vairākus objektus"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Izdzēšot objektu %(object_name)s, tiks dzēsti visi saistītie objekti , bet "
-"jums nav tiesību dzēst sekojošus objektu tipus:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Vai esat pārliecināts, ka vēlaties dzēst %(object_name)s? Tiks dzēsti arī "
-"sekojoši saistītie objekti:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Pēc %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeļi, kas pieejami %(name)s aplikācijā."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Izmainīt"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Jums nav tiesības neko labot."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Nesenās darbības"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Manas darbības"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nav pieejams"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Nezināms saturs"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Problēma ar datubāzes instalāciju. Pārliecinieties, ka attiecīgās tabulas ir "
-"izveidotas un attiecīgajam lietotājam ir tiesības tai piekļūt."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Lietotāja vārds:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Parole:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datums/laiks"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Lietotājs"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Darbība"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Šim objektam nav izmaiņu vēstures. Tas visdrīzāk netika pievienots, "
-"izmantojot šo administrācijas rīku."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Rādīt visu"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Saglabāt"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Meklēt"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s rezultāts"
-msgstr[1] "%(counter)s rezultāti"
-msgstr[2] "%(counter)s rezultātu"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "kopā - %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Saglabāt kā jaunu"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Saglabāt un pievienot vēl vienu"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Saglabāt un turpināt labošanu"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Vispirms ievadiet lietotāja vārdu un paroli. Tad varēsiet labot pārējos "
-"lietotāja uzstādījumus."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Ievadiet jaunu paroli lietotājam <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Parole"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Parole (vēlreiz)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Pārbaudei atkārtoti ievadiet to pašu paroli kā augstāk."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Pievienot vēl %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Dzēst"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Dzēst?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Paldies par pavadīto laiku mājas lapā."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Pieslēgties vēlreiz"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Paroles maiņa"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Paroles nomaiņa sekmīga"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Jūsu parole tika nomainīta."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Drošības nolūkos ievadiet veco paroli un pēc tam ievadiet jauno paroli "
-"divreiz, lai varētu pārbaudīt, ka tā ir uzrakstīta pareizi."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Vecā parole"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Jaunā parole"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Nomainīt manu paroli"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Paroles pārstatīšana(reset)"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Paroles pārstatīšana pabeigta"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Jūsu parole ir uzstādīta. Varat pieslēgties."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Paroles pārstatīšanas apstiprinājums"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Ievadiet jauno paroli"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Lūdzu ievadiet jauno paroli divreiz, lai varētu pārbaudīt, ka tā ir "
-"uzrakstīta pareizi."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Jaunā parole:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Apstiprināt paroli:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Paroles pārstatīšana nesekmīga"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Paroles pārstatīšanas saite bija nekorekta, iespējams, tā jau ir izmantota. "
-"Lūdzu pieprasiet paroles pārstatīšanu vēlreiz."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Paroles pārstatīšana sekmīga"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Uz e-pastu aizsūtītas instrukcijas paroles uzstādīšanai. Jums to drīzumā "
-"vajadzētu saņemt."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Jūs esat saņēmuši šo e-pastu sakarā ar pieprasīto paroles pārstatīšanu"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "lietotāja kontam %(site_name)s mājaslapā"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Lūdzu apmeklējiet sekojošo lapu un ievadiet jaunu paroli:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Jūsu lietotājvārds, ja gadījumā tas ir aizmirsts:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Paldies par mūsu lapas lietošanu!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s komanda"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Aizmirsāt savu paroli? Ievadiet e-pasta adresi zemāk un saņemsiet e-pastu ar "
-"instrukcijām jaunas paroles uzstādīšanai."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-pasta adrese:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Paroles pārstatīšana"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Visi datumi"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Izvēlēties %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Izvēlēties %s, lai izmainītu"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "mājaslapa"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "šablons"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tags:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtrs:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "skats:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Lietotne %r netika atrasta"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Modelis %(model_name)r lietotnē %(app_label)r nav atrasts"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "saistītais `%(app_label)s.%(data_type)s` objekts"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modelis:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "saistītie `%(app_label)s.%(object_name)s` objekti"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "visi %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%s skaits"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Lauki %s objektiem"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s nav urlpattern objekts"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Grāmatzīmes"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentācijas grāmatzīmes"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Lai uzstādītu grāmatzīmes, aizvelciet saiti uz pārlūka "
-"grāmatzīmju\n"
-"rīkjoslu vai arī veiciet labo klikšķi un pievienojiet to savām grāmatzīmēm. "
-"Tagad varat \n"
-"izvēlēties grāmatzīmi no jebkuras lapas šajā mājaslapā. Ievērojiet, ka, lai "
-"lietotu dažas no šīm\n"
-"grāmatzīmēm, jums jālieto dators, kura IP adrese reģistrēta kā \"iekšēja\"\n"
-"(ja ir neskaidrības, vai dators ir \"iekšējais\", runājiet ar sistēmas "
-"administratoru).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentācija šai lapai"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Pārvieto no jebkuras lapas uz tā skata dokumentāciju, kas ģenerē šo lapu."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Parādīt objekta ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "Parāda content-type un unikālo ID lapām, kas atbilst vienam objektam."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Labot šo objektu (pašreizējā logā)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Pārvieto uz admininstrācijas lapu tām lapām, kas attēlo vienu objektu."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Labot šo objektu (jaunā logā)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Tāpat kā augstāk, tikai atver administrācijas lapu jaunā logā."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Personīgā informācija"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Tiesības"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Svarīgi datumi"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupas"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Paroles nomainīta sekmīgi."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Paroles maiņa: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Lietotāja vārds"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Obligāts. 30 vai mazāk zīmes. Tikai burti, cipari un @/./+/-/_ ."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Šī vērtība var saturēt tikai burtus, ciparus un @/./+/-/_ simbolus"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Paroles apstiprinājums"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Lietotājs ar šādu lietotāja vārdu jau eksistē."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Paroles lauki nesakrita."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Šis konts nav aktīvs."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Izskatās, ka izmantotajam pārlūkam nav ieslēgtas sīkdatnes (cookies). Tās ir "
-"obligātas, lai pieslēgtos."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-pasts"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Šim e-pastam nav registrēta lietotāja konta. Vai tiešām esat "
-"piereģistrējušies?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Paroles pārstatīšana(reset) uz %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Jaunās parole vēlreiz"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"Jūsu iepriekšējā parole netika ievadīta korekti. Lūdzu ievadiet to atkārtoti."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nosaukums"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kods"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "tiesība"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "tiesības"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupa"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupas"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "lietotāja vārds"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Obligāts. 30 vai mazāk zīmes. Tikai burti, cipari un @/./+/-/_ simboli"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "vārds"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "uzvārds"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-pasta adrese"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "parole"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Lietojiet '[algo]$[salt]$[hexdigest]', vai arī <a href=\"password/\">paroles "
-"maiņas formu</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "personāla statuss"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Atzīmējiet, ja vēlaties, lai lietotājs var pieslēgties administrācijas lapā."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktīvs"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr "Nosaka, vai lietotājs ir aktīvs. Atceliet šo konta dzēšanas vietā."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "superlietotāja statuss"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "Lietotājam ir visas tiesības arī bez to atsevišķas piešķiršanas."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "pēdējoreiz pieslēdzies"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "datums, kad pievienojies"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Papildus manuāli piešķirtajām atļaujām, šis lietotājs papildus iegūs arī "
-"visas tiesības, kas piešķirtas arī lietotāja grupām."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "lietotāja tiesības"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "lietotājs"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "lietotāji"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "ziņa"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Atslēdzies"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Ievadiet korektu e-pasta adresi."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Saturs"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadati"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "atzīmēts"
-msgstr[1] "atzīmēti"
-msgstr[2] "atzīmēts"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Atzīmēt izvēlētos komentārus"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "apstiprināts"
-msgstr[1] "apstiprināti"
-msgstr[2] "apstiprināti"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Apstiprināt izvēlētos komentārus"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "dzēsts"
-msgstr[1] "dzēsti"
-msgstr[2] "dzēsts"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Dzēst izvēlētos komentārus"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "%(count)s komentārs tika veiksmīgi %(action)s."
-msgstr[1] "%(count)s komentāri tika veiksmīgi %(action)s."
-msgstr[2] "%(count)s komentāru tika veiksmīgi %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s komentāri"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Pēdējie komentāri lapā %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Vārds"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-pasta adrese"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentārs"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Lūdzam ievērot pieklājību! Vārds %s šeit nav atļauts."
-msgstr[1] "Lūdzam ievērot pieklājību! Vārdi %s šeit nav atļauti."
-msgstr[2] "Lūdzam ievērot pieklājību! Vārdi %s šeit nav atļauti."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Ja aizpildīsiet šo lauku, tad komentārs tiks uzskatīts par spamu"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "satura tips"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "objekta ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "lietotāja vārds"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "lietotāja e-pasta adrese"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "lietotāja URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentārs"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "nosūtīšanas datums/laiks"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP adrese"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "publisks"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Noņemiet ķeksi, lai komentārs neparādītos lapā."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "dzēsts"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Atķeksējiet, ja komentārs ir neatbilstošs (nepieklājīgs). Tā vietā tiks "
-"rādīts paziņojums \"Šis komentārs ir izdzēsts\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentāri"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Šo komentāru rakstīja autentificēts lietotājs, tāpēc vārds ir tikai "
-"lasīšanas režīmā."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Šo komentāru rakstīja autentificēts lietotājs, tāpēc e-pasts ir tikai "
-"lasīšanas režīmā."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Pievienojis %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "atzīmēt"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "datums"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "komentāra atzīmējums"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "komentāra atzīmējumi"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Apstiprināt komentāru"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Patiešām padarīt šo komentāru publisku?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Apstiprināt"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Paldies par apstiprināšanu"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Paldies par laika veltīšanu mūsu lapas diskusiju kvalitātes uzlabošanai"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Dzēst komentāru"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Patiešām dzēst šo komentāru?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Paldies par dzēšanu"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Atzīmēt šo komentāru"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Patiešām atzīmēt šo komentāru?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Atzīmējums"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Paldies par komentāra atzīmēšanu"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Iesūtīt"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Priekšskats"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Paldies par komentēšanu"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Paldies par Jūsu komentāru"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Pirmsskatīt komentāru"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Lūdzu izlabojiet kļūdu zemāk."
-msgstr[1] "Lūdzu izlabojiet kļūdas zemāk."
-msgstr[2] "Lūdzu, izlabojiet kļūdu zemāk."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Iesūtīt komentāru"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "vai veikt izmaiņas"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python modeļa klases nosaukums"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "satura tipi"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Piemēram: '/about/contact/'. Pārliecinieties, ka esat ievietojuši sākuma un "
-"beigu slīpsvītras."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Šī vērtība var saturēt tikai burtus, ciparus, apakšsvītras, svītras un "
-"šķērssvītras."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Papildus opcijas"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "virsraksts"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "saturs"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "ieslēgt komentārus"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "šablona nosaukums"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Piemēram: 'flatpages/contact_page.html'. Ja tas nav norādīts, sistēma "
-"lietos 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "reģistrācija obligāta"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ja šis ir atzīmēts, tikai pieslēgušies lietotāji, varēs piekļūt šai lapu."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "vienkārša lapa"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "vienkāršas lapas"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Atvainojiet, formai beidzies derīguma termiņš. Lūdzu, turpiniet aizpildīt "
-"formu no šīs lapas."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Bāzes ĢIS lauks -- atbilst OpenGIS specifikācijas Geometry tipam."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punkts"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Līniju virkne"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Daudzstūris"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Vairāki punkti"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Vairāku rindu virkne"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Vairāki daudzstūri"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Ģeometrijas kolekcija"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Nav norādīta ģeometrijas vērtība."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Nekorekta ģeometrijas vērtība."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Nekorekts ģeometrijas tips."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Sastapta kļūda, pārveidojot ģeometriju uz ģeometriskās formas lauka SRID."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f miljons"
-msgstr[1] "%(value).1f miljoni"
-msgstr[2] "%(value).1f miljonu"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miljards"
-msgstr[1] "%(value).1f miljardi"
-msgstr[2] "%(value).1f miljardu"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f triljons"
-msgstr[1] "%(value).1f triljoni"
-msgstr[2] "%(value).1f triljonu"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "viens"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "divi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "trīs"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "četri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "pieci"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seši"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "septiņi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "astoņi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "deviņi"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "šodien"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "rīt"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "vakar"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Ievadiet pasta indeksu NNNN vai ANNNNAAA formātā."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Šis lauks drīkst saturēt tikai ciparus."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Šim laukam jasastāv no 7 vai 8 cipariem."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Ievadiet korektu CUIT XX-XXXXXXXX-X vai XXXXXXXXXXXX formātos."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Nekorekts CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenlande"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Karintija"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Zalcburga"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Stīrija"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirole"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vīne"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Ievadiet pasta indeksu formātā XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Ievadiet korektu Austrijas sociālās drošības numuru XXXX XXXXXX formātā."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Ievadiet pasta indeksu no 4 cipariem."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Ievadiet pasta indeksu XXXXX-XXX formātā."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Tālruņa numuriem jābūt XXX-XXXX-XXXX formātā."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Izvēlēties derīgu Brazīlijas pavalsti. Šī pavalsts nav no pieejamajām "
-"pavalstīm."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Nekorekts CPF numurs"
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Šī lauka vērtībai jābūt ne vairāk kā 11 cipariem vai 14 simboliem."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Nekorekts CNPJ numurs"
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Šim laukam jasastāv ne vairāk kā no 14 cipariem."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Ievadiet pasta indeksu formātā XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Ievadiet korektu Kanādas sociālās apdrošināšanas numuru XXX-XXX-XXX formātā."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Ženēva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarusa"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valē"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Cīrige"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Lūdzu ievadiet korektu šveiciešu identifikācijas vai pases nummuru "
-"X1234567<0 vai 1234567890 formātā."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Ievadiet korektu čīliešu RUT"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Ievadiet korektu čīliešu RUT XX.XXX.XXX-X formātā."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Čīles RUT ir nekorekts."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prāga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Centrālbohēmijas reģions"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Dienvidbohēmijas reģions"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilzenes reģions"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karslbādes reģions"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Ievadiet pasta indeksu XXXXX vai XXX XX formātos."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Ievadiet dzimšanas numuru XXXXXX/XXXX vai XXXXXXXXXX formātā."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Nekorekts neobligatais parametrs dzimums, korektās vērtības ir 'f' un 'm'."
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Ievadiet korektu dzimšanas numuru."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Ievadiet korektu IC numuru."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Bādene-Virtemburga"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavārija"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlīne"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburga"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Brēmene"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburga"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hesene"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Meklenburga-Rietumpomerānija"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lejassaksija"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Ziemeļreina-Vestfālija"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Reinaszeme-Pfalca"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saksija"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saksija-Anhalte"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Šlesviga-Holšteina"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Tīringene"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Ievadiet pasta indeksu formātā XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Ievadiet korektu Vācijas identifikācijas kartes numuru XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X formātā."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almērija"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barselona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Kadisa"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Kordova"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Hirona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granāda"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Gvadalahara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leona"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madride"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Mursija"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Orense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Astūrija"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palensija"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Laspalmasa"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanka"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Tenerifes Santa Kruza"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Kantabrija"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovija"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seviļa"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Sorija"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Taragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valensija"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valadolida"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Biskaja"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Saragosa"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalūzija"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragona"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Astūrijas novads"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Baleāru salas"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Basku zeme"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanāriju salas"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastīlija La Manša"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastīlija Leona"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalonija"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Ekstremadūra"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galīcija"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Mursijas reģions"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-"Ievadiet korektu pasta indeksu sekojošajā formātā un robežās 01XXX - 52XXX"
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Ievadiet korektu tālruņa numuru vienā no sekojošajiem formātiem 6XXXXXXXX, "
-"8XXXXXXXX vai 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Ievadiet korektu NIF, NIE vai CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Lūdzu ievadiet korektu NIF vai NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Nekorekta NIF kontrolsumma."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Nekorekta NIE kontrolsumma."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Nekorekta CIF kontrolsumma."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Ievadiet korektu bankas konta numuru formātā XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Nekorekta bankas konta numura kontrolsumma."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Ievadiet korektu Somijas sociālās drošības nummuru."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefona numuriem jābūt 0X XX XX XX XX formātā."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Ievadiet korektu pasta indeksu."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Ievadiet korektu tālruņa numuru."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Ievadiet korektu transportlīdzekļa numuru."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Ievadiet korektu NIK/KTP numuru."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Jogiakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Džakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Korka"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublina"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galveja"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenija"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerika"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Ievadiet pasta indeksu XXXXXXX formātā."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Lūdzu ievadiet korektu Islandes identifikācijas nummuru XXXXXX-XXXX formātā."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Islandes identifikācijas nummurs nav korekts."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Ievadiet korektu pasta indeksu."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Ievadiet korektu sociālās drošības nummuru."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Ievadiet korektu PVN numuru."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Ievadiet pasta indeksu XXXXXXX vai XXX-XXXX formātos."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Ivate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukušima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokija"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Išikava"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Šizuka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kioto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Šimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hirošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinava"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Ievadiet korektu Kuveitas pilsoņu ID numuru."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Kampeče"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Kolima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Verakrusa"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Jukatana"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Ievadiet korektu pasta indeksu."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Ievadiet korektu SoFi numuru."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Frīzlande"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningena"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburga"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Ziemeļbrabante"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Ziemeļholande"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrehta"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zēlande"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Dienvidholande"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Lūdzu ievadiet korektu Norvēģijas sociālās drošības nummuru."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Šim laukam jasastāv no 8 cipariem."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Šim laukam jasastāv no 11 cipariem."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Nacionālais identifikācijas numurs sastāv no 11 cipariem."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Nekorekta kontrolsumma nacionālajam identifikācijas numuram."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Ievadiet nodokļa numuru (NIP) formātā XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Nekorekta nodokļu numura (NIP) kontrolsumma."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Nacionālais biznesa reģistra numurs (REGON) sastāv no 9 vai 14 cipariem."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Nekorekta nacionālā biznesa reģistra numura (REGON) kontrolsumma."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Ievadiet pasta indeksu formātā XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Apakšsilēzija"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodza"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerānija"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silēzija"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Ievadiet pasta indeksu XXXX-XXX formātā."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Tālruņa numuriem jābūt 9 cipariem vai jāsākas ar + vai 00"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Ievadiet korektu CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Ievadiet korektu CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Ievadiet korektu IBAN ROXX-XXXX-XXXX-XXXX-XXXX-XXXX formātā."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Tālruņa numuriem jābūt XXXX-XXXXXX formātā."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Ievadiet pasta indeksu formātā XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Ievadiet korektu Zviedrijas organizācijas numuru."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Ievadiet korektu Zviedrijas ID numuru."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Ievadiet Zviedrijas pasta indeksu formātā XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stokholma"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Upsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotlande"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Ērebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jemtlande"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Ievadiet korektu pasta indeksu."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Češīra"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Kumbrija"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devona"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kenta"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surreja"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Anglija"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Ziemeļīrija"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Skotija"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Velsa"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Ievadiet pasta indeksu XXXXX vai XXXXX-XXXX formātos."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefona numuriem jābūt XXX-XXXX-XXXX formātā."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Ievadiet korektu ASV sociālās apdrošināšanas numuru XXX-XX-XXXX formātā."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Ievadiet ASV štatu vai teritoriju."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "ASV štats (divi augšējā reģistra burti)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Tālruņa numurs"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Ievadiet korektu CI numuru X.XXX.XXX-X,XXXXXXX-X vai XXXXXXXX formātos."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Ievadiet korektu CI numuru."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Ievadiet korektu DĀR ID numuru."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Ievadiet korektu DĀR pasta indeksu."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "ziņojums (slinkais)"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "pārvirzīt(redirect) no"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Tam jābūt absolūtajam ceļam, atskaitot domēna vārdu. Piemēram: '/notikumi/"
-"meklet/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "pārvirzīt(redirect) uz"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Šis var būt vai nu absolūtais ceļš (kā augstāk) vai pilnais URL, kas sākas "
-"ar 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "pārvirzīt"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "pārvirzījumi"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sesijas atslēga"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sesijas dati"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "izbeigšanās datums"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesija"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesijas"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domēna vārds"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "attēlojamais vārds"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "vietnes"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Ievadiet korektu vērtību."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Ievadiet korektu URL adresi."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Šī URL adrese šķiet bojāta."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Ievadiet korektu vērtību, kas satur tikai burtus, numurus, apakšsvītras vai "
-"šķērssvītras."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Ievadiet korektu IPv4 adresi."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Ievadiet tikai numurus, atdalītus ar komatiem."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Nodrošiniet, ka vērtība ir %(limit_value)s (tā satur %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Šai vērtībai jabūt mazākai vai vienādai ar %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Vērtībai jābūt lielākai vai vienādai ar %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Vērtībai jāsatur vismaz %(limit_value)d rakstu zīmes (tā satur %(show_value)"
-"d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Vērtībai jāsatur ne vairāk kā %(limit_value)d rakstu zīmes (tā satur %"
-"(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s jābūt unikālam %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s ar nosaukumu %(field_label)s jau eksistē."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Nederīga izvēle: %r."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Šis lauks nevar neksistēt (būt null)."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Šis lauks nevar būt tukšs"
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Lauks ar tipu: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Vesels skaitlis"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Vērtībai ir jābūt veselam skaitlim."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Vērtībai jābūt True vai False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (True vai False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Simbolu virkne (līdz pat %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Ar komatu atdalīti veselie skaitļi"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Datums (bez laika)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Ievadiet korektu datumu YYYY-MM-DD formātā."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Nekorekts datums: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Ievadiet korektu datumu/laiku YYYY-MM-DD HH:MM[:ss[.uuuuuu]] formātā."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Datums (ar laiku)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Vērtībai ir jābūt decimālskaitlim."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Decimāls skaitlis"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-pasta adrese"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Faila ceļš"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Šai vērtībai jābūt decimāldaļskaitlim."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Plūstošā punkta skaitlis"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Liels (8 baitu) vesels skaitlis"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Šai vērtībai jābūt None, True vai False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (jā, nē vai neviens)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Teksts"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Laiks"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Ievadiet korektu laiku HH:MM[:ss[.uuuuuu]] formātā"
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML teksts"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Modelis %(model)s ar primāro atslēgu %(pk)r neeksistē."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Ārējā atslēga (tipu nosaka lauks uz kuru attiecas)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Attiecība viens pret vienu"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Attiecība daudzi pret daudziem"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Lai iezīmētu vairāk par vienu, pieturiet \"Ctrl\" (\"Command\" uz Mac "
-"datora) taustiņu."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Ievadiet korektu %(self)s ID. Vērtība %(value)r ir nekorekta."
-msgstr[1] "Ievadiet korektus %(self)s ID. Vērtības %(value)r ir nekorektas."
-msgstr[2] "Ievadiet korektus %(self)s ID. Vērtības %(value)r ir nekorektas."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Šis lauks ir obligāts."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Ievadiet veselu skaitli."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Ievadiet skaitli."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Pārliecinieties, ka kopā nav vairāk par %s cipariem."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Pārliecinieties, ka aiz decimālās zīmes nav vairāk par %s cipariem."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Pārliecinieties, ka pirms decimālās zīmes nav vairāk par %s cipariem."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Ievadiet korektu datumu."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Ievadiet korektu laiku."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Ievadiet korektu datumu/laiku."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Nav nosūtīts fails. Pārbaudiet formas kodējuma tipu."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Netika nosūtīts fails."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Jūsu nosūtītais fails ir tukšs."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Faila nosaukuma garums nedrīkst pārsniegt %(max)d rakstu zīmes (tas satur %"
-"(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Augšupielādējiet korektu attēlu. Fails, ko augšupielādējāt, vai nu nav "
-"attēls, vai arī ir bojāts."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Izvēlieties korektu izvēli. %(value)s nav pieejamo izvēļu sarakstā."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Ievadiet sarakstu ar vērtībām."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Sakārtojums"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Lūdzu izlabojiet dublicētos datus priekš %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Lūdzu izlabojiet dublicētos datus laukam %(field)s, kam jābūt unikālam."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Lūdzu izlabojiet dublicētos datus laukam %(field_name)s, kam jābūt unikālam "
-"priekš %(lookup)s iekš %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Lūdzu izlabojiet dublicētās vērtības zemāk."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Iekļautā ārējā atslēga nesakrita ar vecāka elementa primāro atslēgu"
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Izvēlaties pareizu izvēli. Jūsu izvēlele neietilpst pieejamo sarakstā."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Izvēlieties pareizu izvēli. %s nav pieejamo izvēļu sarakstā."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" ir nederīga vērtība priekš primārās atslēgas."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "jā,nē,varbūt"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d baits"
-msgstr[1] "%(size)d baiti"
-msgstr[2] "%(size)d baitu"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "pusnakts"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "dienasvidus"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "pirmdiena"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "otrdiena"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "trešdiena"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "ceturdiena"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "piektdiena"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "sestdiena"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "svētdiena"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "pr"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "ot"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "tr"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "ce"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "pk"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "se"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "sv"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "janvāris"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februāris"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "marts"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "aprīlis"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "maijs"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "jūnijs"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "jūlijs"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "augusts"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "septembris"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktobris"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "novembris"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "decembris"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jūn"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jūl"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dec."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "vai"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "gads"
-msgstr[1] "gadi"
-msgstr[2] "gadu"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mēnesis"
-msgstr[1] "mēneši"
-msgstr[2] "mēnesu"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "nedēļa"
-msgstr[1] "nedēļas"
-msgstr[2] "nedēļu"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "diena"
-msgstr[1] "dienas"
-msgstr[2] "dienu"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "stunda"
-msgstr[1] "stundas"
-msgstr[2] "stundu"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minūte"
-msgstr[1] "minūtes"
-msgstr[2] "minūšu"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minūtes"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "d.m.Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "d.m.Y H:i:s"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "m.Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "d.m"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s tika veiksmīgi izveidots."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s tika veiksmīgi dzēsts."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s tika dzēsts."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Viens vai vairāki %(fieldname)s objektos %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Viens vai vairāki %(fieldname)s %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Vecā parole:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Relācija uz vecāka modeli"
-
-#~ msgid "Add user"
-#~ msgstr "Pievienot lietotāju"
-
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "Pārnešana jaunā rindā šeit nav atļauta."
-
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr "Ievadiet veselu skaitli intervālā no -32,768 līdz 32,767."
-
-#~ msgid "Enter a positive number."
-#~ msgstr "Ievadiet pozitīvu skaitli."
-
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "Ievadiet veselu skaitli intervāla starp 0 un 32,767."
-
-#~ msgid "Enter a valid filename."
-#~ msgstr "Ievadiet korektu faila vārdu."
-
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "Atdaliet vairākus ID ar komatiem."
-
-#~ msgid "Brazilian"
-#~ msgstr "Brazīliešu"
-
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "Augšējā reģistra burti nav atļauti."
-
-#~ msgid "Lowercase letters are not allowed here."
-#~ msgstr "Apakšējā reģistra burti nav atļauti."
-
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Ievadiet korektas e-pasta adreses, kas atdalītas ar komatiem."
-
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "Tukšas vērtības nav atļautas."
-
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "Ne ciparu simboli nav atļauti."
-
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Šī vērtība nevar saturēt tikai ciparus."
-
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "Atļauti tikai alfabētiskie simboli."
-
-#~ msgid "Year must be 1900 or later."
-#~ msgstr "Gadam jabūt 1900 vai vēlākam."
-
-#~ msgid "The URL %s does not point to a valid image."
-#~ msgstr "URL %s nenorāda uz korektu attēlu."
-
-#~ msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-#~ msgstr "Telefona numuriem jābūt XXX-XXX-XXXX formātā. \"%s\" is nekorekts."
-
-#~ msgid "The URL %s does not point to a valid QuickTime video."
-#~ msgstr "URL %s nenorāda uz korektu QuickTime video."
-
-#~ msgid "A valid URL is required."
-#~ msgstr "Reāls URL obligāts."
-
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Korekts HTML ir obligāts. Kļūdas sīkāk:\n"
-#~ "%s"
-
-#~ msgid "Badly formed XML: %s"
-#~ msgstr "Slikti formēts XML: %s"
-
-#~ msgid "The URL %s is a broken link."
-#~ msgstr "URL %s ir salauzta saite."
-
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "Šim laukam jāsakrīt ar '%s' lauku."
-
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "Lūdzu aizpildiet vismaz vienu lauku."
-
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr "Lūdzu aizpildiet abus laukus vai atstājiet abus tukšus."
-
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr "Šis lauks ir jāaizpilda, ja %(field)s nav vienāds %(value)s"
-
-#~ msgid "This value must be between %(lower)s and %(upper)s."
-#~ msgstr "Šai vērtībai jābūt starp %(lower)s un %(upper)s."
-
-#~ msgid "This value must be no more than %s."
-#~ msgstr "Šai vērtība nedrīkst pārsniegt %s."
-
-#~ msgid "This value must be a power of %s."
-#~ msgstr "Šai vērtībai jābūt %s pakāpei."
-
-#~ msgid "Please enter a valid decimal number."
-#~ msgstr "Lūdzu ievadiet korektu decimālu skaitli."
-
-#~ msgid "Please enter a valid decimal number with at most %s total digit."
-#~ msgstr ""
-#~ "Lūdzu ievadiet korektu decimālu skaitli ar maksimālu ciparu skaitu %s."
-
-#~ msgid ""
-#~ "Please enter a valid decimal number with a whole part of at most %s digit."
-#~ msgstr ""
-#~ "Lūdzu ievadiet korektu decimālu skaitli, kā veselā daļa nepārsniedz %s "
-#~ "ciparus."
-
-#~ msgid "Please enter a valid decimal number with at most %s decimal place."
-#~ msgstr ""
-#~ "Lūdzu ievadiet korektu decimālu numuru, kur nav vairāk par %s cipariem "
-#~ "aiz komata."
-
-#~ msgid "Make sure your uploaded file is at least %s bytes big."
-#~ msgstr ""
-#~ "Pārliecinieties, ka jūsu augšupielādētais fails ir vismaz %s baiti liels."
-
-#~ msgid "Make sure your uploaded file is at most %s bytes big."
-#~ msgstr ""
-#~ "Pārliecinieties, ka jūsu augšupielādētais fails ir maksimums %s baiti "
-#~ "liels."
-
-#~ msgid "The format for this field is wrong."
-#~ msgstr "Šī faila formāts ir nekorekts."
-
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "Nevar neko iegūt no %s."
-
-#~ msgid ""
-#~ "The URL %(url)s returned the invalid Content-Type header '%(contenttype)"
-#~ "s'."
-#~ msgstr ""
-#~ "URL %(url)s atgrieza nekorektu Content-Type galveni '%(contenttype)s'."
-
-#~ msgid ""
-#~ "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts "
-#~ "with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Lūdzu aiztaisiet neaiztaisīto %(tag)s tagu no rindas nr %(line)s. (Rinda "
-#~ "sākas ar \"%(start)s\".)"
-
-#~ msgid "headline"
-#~ msgstr "virsraksts"
-
-#~ msgid "rating #1"
-#~ msgstr "reitings #1"
-
-#~ msgid "rating #2"
-#~ msgstr "reitings #2"
-
-#~ msgid "rating #3"
-#~ msgstr "reitings #3"
-
-#~ msgid "rating #4"
-#~ msgstr "reitings #4"
-
-#~ msgid "rating #5"
-#~ msgstr "reitings #5"
-
-#~ msgid "rating #6"
-#~ msgstr "reitings #6"
-
-#~ msgid "rating #7"
-#~ msgstr "reitings #7"
-
-#~ msgid "rating #8"
-#~ msgstr "reitings #8"
-
-#~ msgid "is valid rating"
-#~ msgstr "korekts reitings"
-
-#~ msgid "Content object"
-#~ msgstr "Satura objekts"
-
-#~ msgid "person's name"
-#~ msgstr "personas vārds"
-
-#~ msgid "ip address"
-#~ msgstr "ip adrese"
-
-#~ msgid "score"
-#~ msgstr "rezultāts"
-
-#~ msgid "karma score"
-#~ msgstr "karmas rezultāts"
-
-#~ msgid "karma scores"
-#~ msgstr "karmas rezultāti"
-
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "%(score)d reitingu publicējis %(user)s"
-
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Šo komentāru atzīmējis %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "flag date"
-#~ msgstr "atzīmēšanas datums"
-
-#~ msgid "user flag"
-#~ msgstr "lietotāja atzīme"
-
-#~ msgid "user flags"
-#~ msgstr "lietotāja atzīmes"
-
-#~ msgid "Flag by %r"
-#~ msgstr "Atzīmējis %r"
-
-#~ msgid "deletion date"
-#~ msgstr "dzēšanas datums"
-
-#~ msgid "moderator deletions"
-#~ msgstr "moderācijas dzēšanas"
-
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Moderācijas dzēšana, veicis %r"
-
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Anonīmie lietotāji nedrīkst balsot"
-
-#~ msgid "No voting for yourself"
-#~ msgstr "Nedrīkst balsot par sevi"
-
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr ""
-#~ "Šis reiting ir obligāts jo Jūs ievietojāt vismaz vienu citu reitingu."
-
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)sThis comment was posted by a user who has posted fewer than %"
-#~ "(count)s comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Šo komentāru ir ievietojis lietotājs, kas ievietojis mazāk kā %(count)s "
-#~ "komentāru:\n"
-#~ "\n"
-#~ "%(text)sŠo komentāru ir ievietojis lietotājs, kas ievietojis mazāk kā %"
-#~ "(count)s komentārus:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Atļauti tikai POST izsaukumi"
-
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "Viens vai vairāki pieprasītie lauki netika ievadīti"
-
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr "Kāds ir iejaucies komentāru formā (drošības traucējums)"
-
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "Komentāru forma ir nekorekts 'target' parametrs -- objekta ID bija "
-#~ "nepareizs"
-
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr "Komentāru forma nenodrošināja 'preview' vai 'post'"
-
-#~ msgid "Forgotten your password?"
-#~ msgstr "Esat aizmirsis savu paroli?"
-
-#~ msgid "Ratings"
-#~ msgstr "Reitings"
-
-#~ msgid "Required"
-#~ msgstr "Pieprasīts"
-
-#~ msgid "Post a photo"
-#~ msgstr "Ievietojiet fotogrāfiju"
-
-#~ msgid "Your name:"
-#~ msgstr "Jūsu vārds:"
-
-#~ msgid "Added %s."
-#~ msgstr "Pievienots %s."
-
-#~ msgid "Deleted %s."
-#~ msgstr "Izdzēsts %s"
-
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "j. N Y, H:i"
-
-#~ msgid "Ordering"
-#~ msgstr "Sakārtošana"
-
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "Jūsu jaunais parole ir: %(new_password)s"
-
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr "Jūs vienmēr varat nomainīt šo paroli aizejot uz šo lapu:"
-
-#~ msgid "AnonymousUser"
-#~ msgstr "Anonīms lietotājs"
-
-#~ msgid "The two 'new password' fields didn't match."
-#~ msgstr "Abi \"Jaunā parole\" lauki nesakrīt."
-
-#~ msgid ""
-#~ "Enter a postcode. A space is required between the two postcode parts."
-#~ msgstr ""
-#~ "Ievadiet pasta indeksu. Atstarpe ir nepieciešama starp abām pasta indeksa "
-#~ "daļām."
-
-#~ msgid "%d milliseconds"
-#~ msgstr "%d millisekundes"
diff --git a/parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 4bce8ca..0000000
--- a/parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 7334d41..0000000
--- a/parts/django/django/conf/locale/lv/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,164 +0,0 @@
-# translation of Django.
-# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Gatis Tomsons <gatis.tomsons@gmail.com>, 2008.
-# , fuzzy
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-10 23:48+0200\n"
-"PO-Revision-Date: 2010-05-10 20:22+0200\n"
-"Last-Translator: Reinis Veips <reinis.veips@wot.lv>\n"
-"Language-Team: Latvian translators' team <reinis.veips@wot.lv>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
-"2);\n"
-"X-Poedit-Language: Latvian\n"
-"X-Poedit-Country: LATVIA\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Pieejams %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Izvēlēties visu"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Pievienot"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Izņemt"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Izvēlies %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Izvēlies un klikšķini"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Attīrīt visu"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s no %(cnt)s izvēlēts"
-msgstr[1] "%(sel)s no %(cnt)s izvēlēti"
-msgstr[2] "%(sel)s no %(cnt)s izvēlēti"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Jūs neesat saglabājis izmaiņas rediģējamiem laukiem. Ja jūs tagad "
-"izpildīsiet izvēlēto darbību, šīs izmaiņas netiks saglabātas."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Jūs esat izvēlējies veikt darbību un neesat saglabājis veiktās izmaiņas. "
-"Lūdzu nospiežat OK, lai saglabātu. Jums nāksies šo darbību izpildīt vēlreiz."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Jūs esat izvēlējies veikt darbību un neesat izmainījis nevienu lauku. Jūs "
-"droši vien meklējat pogu 'Aiziet' nevis 'Saglabāt'."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Janvāris Februāris Marts Aprīlis Maijs Jūnijs Jūlijs Augusts Septembris "
-"Oktobris Novembris Decembris"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S P O T C P S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Parādīt"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Slēpt"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-"Svētdiena Pirmdiena Otrdiena Trešdiena Ceturtdiena Piektdiena Sestdiena"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Tagad"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Pulkstens"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Izvēlieties laiku"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Pusnakts"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "06.00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Pusdienas laiks"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Atcelt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Šodien"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalendārs"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Vakar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Rīt"
diff --git a/parts/django/django/conf/locale/lv/__init__.py b/parts/django/django/conf/locale/lv/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/lv/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/lv/formats.py b/parts/django/django/conf/locale/lv/formats.py
deleted file mode 100644
index 15637d1..0000000
--- a/parts/django/django/conf/locale/lv/formats.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'Y. \g\a\d\a j. F'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = r'Y. \g\a\d\a j. F, H:i:s'
-YEAR_MONTH_FORMAT = r'Y. \g. F'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = r'j.m.Y'
-SHORT_DATETIME_FORMAT = 'j.m.Y H:i:s'
-FIRST_DAY_OF_WEEK = 1 #Monday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%d.%m.%Y', '%d.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
- '%H.%M.%S', # '14.30.59'
- '%H.%M', # '14.30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%d.%m.%Y', # '25.10.2006'
- '%d.%m.%y %H:%M:%S', # '25.10.06 14:30:59'
- '%d.%m.%y %H:%M', # '25.10.06 14:30'
- '%d.%m.%y %H.%M.%S', # '25.10.06 14.30.59'
- '%d.%m.%y %H.%M', # '25.10.06 14.30'
- '%d.%m.%y', # '25.10.06'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = u' ' # Non-breaking space
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/mk/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/mk/LC_MESSAGES/django.mo
deleted file mode 100644
index 19d924a..0000000
--- a/parts/django/django/conf/locale/mk/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/mk/LC_MESSAGES/django.po b/parts/django/django/conf/locale/mk/LC_MESSAGES/django.po
deleted file mode 100644
index 22b7a37..0000000
--- a/parts/django/django/conf/locale/mk/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5140 +0,0 @@
-# translation of django.po to Macedonian
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-01 21:49+0200\n"
-"PO-Revision-Date: 2010-04-05 15:53+0100\n"
-"Last-Translator: Vasil Vangelovski <vvangelovski@gmail.com>\n"
-"Language-Team: Macedonian <ossm-members@hedona.on.net.mk>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Арапски"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Бугарски"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Бенгалски"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Босански"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Каталански"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Чешки"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Велшки"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Дански"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Германски"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Грчки"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Англиски"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Британскиот англиски"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Шпански"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Аргентиско шпански"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Естонски"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Баскиски"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Персиски"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Фински"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Француски"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Фризиски"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Ирски"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Галски"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Еврејски"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Хинди"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Хрватски"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Унгарски"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "Исландски"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "Италијански"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "Јапонски"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "Грузиски"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "Кмер"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "Канада"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "Корејски"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "Литвански"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "Латвиски"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "Македонски"
-
-#: conf/global_settings.py:80
-msgid "Dutch"
-msgstr "Холандски"
-
-#: conf/global_settings.py:81
-msgid "Norwegian"
-msgstr "Норвешки"
-
-#: conf/global_settings.py:82
-msgid "Norwegian Bokmal"
-msgstr "Норвешка bokmål"
-
-#: conf/global_settings.py:83
-msgid "Norwegian Nynorsk"
-msgstr "Норвешки Нинорск"
-
-#: conf/global_settings.py:84
-msgid "Polish"
-msgstr "Полски"
-
-#: conf/global_settings.py:85
-msgid "Portuguese"
-msgstr "Португалкски"
-
-#: conf/global_settings.py:86
-msgid "Brazilian Portuguese"
-msgstr "Бразилско португалски"
-
-#: conf/global_settings.py:87
-msgid "Romanian"
-msgstr "Романски"
-
-#: conf/global_settings.py:88
-msgid "Russian"
-msgstr "Руски"
-
-#: conf/global_settings.py:89
-msgid "Slovak"
-msgstr "Словачки"
-
-#: conf/global_settings.py:90
-msgid "Slovenian"
-msgstr "Словенечки"
-
-#: conf/global_settings.py:91
-msgid "Albanian"
-msgstr "Албански"
-
-#: conf/global_settings.py:92
-msgid "Serbian"
-msgstr "Српски"
-
-#: conf/global_settings.py:93
-msgid "Serbian Latin"
-msgstr "Српски Латиница"
-
-#: conf/global_settings.py:94
-msgid "Swedish"
-msgstr "Шведски"
-
-#: conf/global_settings.py:95
-msgid "Tamil"
-msgstr "Тамил"
-
-#: conf/global_settings.py:96
-msgid "Telugu"
-msgstr "Телугу"
-
-#: conf/global_settings.py:97
-msgid "Thai"
-msgstr "Тајландски"
-
-#: conf/global_settings.py:98
-msgid "Turkish"
-msgstr "Турски"
-
-#: conf/global_settings.py:99
-msgid "Ukrainian"
-msgstr "Украински"
-
-#: conf/global_settings.py:100
-msgid "Vietnamese"
-msgstr "Виетнамски"
-
-#: conf/global_settings.py:101
-msgid "Simplified Chinese"
-msgstr "Упростен кинески"
-
-#: conf/global_settings.py:102
-msgid "Traditional Chinese"
-msgstr "Традиционален кинески"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Успешно беа избришани %(count)d %(items)s."
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
-msgid "Are you sure?"
-msgstr "Сигурни сте?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Избриши ги избраните %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Според %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Сите"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Било кој датум"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Денеска"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Последните 7 дена"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Овој месец"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Оваа година"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Да"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Не"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Непознато"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Акција:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "време на акција"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "идентификационен број на објект"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "репрезентација на објект"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "знакче за акција"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "измени ја пораката"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "ставка во записникот"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "ставки во записникот"
-
-#: contrib/admin/options.py:142 contrib/admin/options.py:157
-msgid "None"
-msgstr "Ништо"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr "Изменета %s."
-
-#: contrib/admin/options.py:563 contrib/admin/options.py:573
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:573
-msgid "and"
-msgstr "и"
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Додадено %(name)s „%(object)s“."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Изменето %(list)s за %(name)s „%(object)s“."
-
-#: contrib/admin/options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Избришан %(name)s „%(object)s“."
-
-#: contrib/admin/options.py:581
-msgid "No fields changed."
-msgstr "Не беше изменето ниедно поле."
-
-#: contrib/admin/options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Ставката %(name)s \"%(obj)s\" беше успешно додадена."
-
-#: contrib/admin/options.py:651 contrib/admin/options.py:684
-msgid "You may edit it again below."
-msgstr "Подолу можете повторно да го уредите."
-
-#: contrib/admin/options.py:661 contrib/admin/options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr "Подолу можете да додате уште еден %s."
-
-#: contrib/admin/options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" беше успешно изменета."
-
-#: contrib/admin/options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Ставката %(name)s \"%(obj)s\" беше успешно додадена. Подолу можете повторно "
-"да ја уредите."
-
-#: contrib/admin/options.py:744
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Мора да се одберат предмети за да се изврши акција врз нив. Ниеден предмет "
-"не беше променет."
-
-#: contrib/admin/options.py:762
-msgid "No action selected."
-msgstr "Ниедна акција не е одбрана."
-
-#: contrib/admin/options.py:842
-#, python-format
-msgid "Add %s"
-msgstr "Додади %s"
-
-#: contrib/admin/options.py:868 contrib/admin/options.py:1080
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "објект %(name)s со примарен клуч %(key)r не постои."
-
-#: contrib/admin/options.py:933
-#, python-format
-msgid "Change %s"
-msgstr "Измени %s"
-
-#: contrib/admin/options.py:978
-msgid "Database error"
-msgstr "Грешка во базата на податоци"
-
-#: contrib/admin/options.py:1014
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s ставка %(name)s беше успешно изменета."
-msgstr[1] "%(count)s ставки %(name)s беа успешно изменети."
-
-#: contrib/admin/options.py:1041
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s одбран"
-msgstr[1] "Сите %(total_count)s одбрани"
-
-#: contrib/admin/options.py:1046
-#, fuzzy, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "од одбраниот %(count)d"
-
-#: contrib/admin/options.py:1093
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Ставаката %(name)s \"%(obj)s\" беше избришана успешно."
-
-#: contrib/admin/options.py:1130
-#, python-format
-msgid "Change history: %s"
-msgstr "Историја на измени: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Ве молам внесете точно корисничко име и лозинка. Имајте на ум дека и во "
-"двете полиња се битни големите и малите букви."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Ве молам најавете се повторно бидејќи вашата сесија е истечена."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Изгледа дека вашиот прелистувач не е конфигуриран да прифаќа колачиња. Ве "
-"молам овозможете ги колачињата, превчитајте ја страта и пробајте повторно."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Корисничките имиња неможе да го содржат „@“ знакот."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Вашата е-пошта не е вашето корисничко име. Пробајте со „%s“."
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Администрација на сајт"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Најава"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "%s администрација"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Датум:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Време:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Моментално:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Измена:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Побарај"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Додади друго"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Страницата не е најдена"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Се извинуваме, но неможе да ја најдеме страницата која ја баравте."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Дома"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Грешка со серверот"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Грешка со серверот (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Грешка со серверот <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Имаше грешка. Истата беше пријавена на администраторите и ќе биде поправена "
-"во брзо време. Ви благодариме за вашето трпение."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Изврши ја избраната акција"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Оди"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Кликнете тука за да изберете објекти низ повеќе страници"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Избери ги сите %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Откажи го изборот"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Добредојдовте,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Документација"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Промени лозинка"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Одјава"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Џанго администрација на сајт"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Џанго администрација"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Додади"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Историја"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Погледни на сајтот"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Ве молам поправете ја грешката подолу."
-msgstr[1] "Ве молам поправете ги грешките подолу."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Додади %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Филтер"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Избриши"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Бришење на %(object_name)s '%(escaped_object)s' ќе резултира со бришење на "
-"поврзаните објекти, но со вашата сметка немате доволно привилегии да ги "
-"бришете следните типови на објекти:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Сигурне сте дека сакате да ги бришете %(object_name)s „%(escaped_object)s“? "
-"Сите овие ставки ќе бидат избришани:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Да, сигурен сум"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Избриши повеќе ставки"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Бришење на %(object_name)s би резултирало со бришење на поврзаните објекти, "
-"но вие како корисник немате доволно привилегии да ги бришете следните типови "
-"на објекти:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Сигурне сте дека сакате да ги избришете избраните %(object_name)s? Сите овие "
-"објекти и објектите поврзани со нив ќе бидат избришани:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Според %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Достапни модели во апликацијата %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Измени"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Немате дозвола ништо да уредува."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Последни акции"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Мои акции"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ништо не е достапно"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Непозната содржина"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Нешто не е во ред со инсталацијата на базата на податоци. Потврдете дека "
-"соодветни табели во базата се направени и потврдете дека базата може да биде "
-"прочитана од соодветниот корисник."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Корисник:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Лозинка:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Датум/час"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Корисник"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Акција"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Овој објект нема историја на измени. Најверојатно не бил додаден со админ "
-"сајтот."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Прикажи ги сите"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Сними"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Барај"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 резултат"
-msgstr[1] "%(counter)s резултати"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "вкупно %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Сними како нова"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Сними и додади уште"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Сними и продолжи со уредување"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Прво, внесете корисничко име и лозинка. Потоа ќе можете да уредувате повеќе "
-"кориснички опции."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Внесете нова лозинка за корисникот <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Лозинка"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Лозинка (повторно)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Заради верификација внесете ја истата лозинка како и горе."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Додадете уште %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Отстрани"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Избриши?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-"Ви благодариме што денеска поминавте квалитетно време со интернет страницава."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Најавете се повторно"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Измена на лозинка"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Успешна промена на лозинката"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Вашата лозинка беше сменета."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Заради сигурност ве молам внесете ја вашата стара лозинка и потоа внесете ја "
-"новата двапати за да може да се потврди дека правилно сте ја искуцале."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Стара лозинка"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Нова лозинка"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Промени ја мојата лозинка"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Ресетирање на лозинка"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Ресетирањето на лозинката заврши"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Вашата лозинка беше поставена. Сега можете да се најавите."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Одобрување за ресетирање на лозинка"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Внесете нова лозинка"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Ве молам внесете ја вашата нова лозинка двапати за да може да бидете сигурни "
-"дека правилно сте ја внеле."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Нова лозинка:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Потврди лозинка:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Неуспеа ресетирањето на лозинката"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Врската за ресетирање на лозинката беше невалидна, најверојатно бидејќи веќе "
-"била искористена. Ве молам повторно побарајте ресетирање на вашата лозинката."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Успешно е ресетирањето на лозинката"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Ви пративме инструкции за поставување на вашата лозинка на е-пошта која ја "
-"напишавте. Би требало да ја примите за кратко време."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Ја добивата оваа порака бидејќи побаравте да се ресетира вашата лозинка"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "за корисничката сметка на %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Ве молам одите на следната страница и внесете нова лозинка:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Вашето корисничко име, во случај да сте го заборавиле:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Ви благодариме што го користите овој сајт!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Тимот на %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Сте ја заборавиле вашата лозинка? Внесете ја вашата е-пошта подолу и ќе ви "
-"пратиме инструкции за поставување на нова."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Е-пошта:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Ресетирај ја мојата лозинка"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Сите датуми"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Изберете %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Изберете %s за измена"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "сајт"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "шаблон"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "таг:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "филтер:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "поглед:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Не е најдена апликацијата %r"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Моделот %(model_name)r не е најден во апликацијата %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "поврзаниот `%(app_label)s.%(data_type)s` објект"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "модел:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "поврзани `%(app_label)s.%(object_name)s` објекти"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "сите %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "број на %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Полиња на %s објекти"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s не изгледа дека е url објект"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Обележувачи"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Обележувачи на документација"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">За да инсталирате обележувачи, влечете ја врската до "
-"вашата\n"
-"лента со алатки, или кликнете со десното копче и додадете го во вашите \n"
-"обележувачи. Сега може да го изберете обележувачот од било која страница "
-"на \n"
-"сајтот. Имајте на ум дека за некои од овие обележувачи е потребно да го "
-"гледате \n"
-"сајтот од компјутер кој е означен како „внатрешен“ (разговарајте со вашиот \n"
-"администратор ако не сте сигурни).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Документација за оваа страница"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Ве носи од било која страница од документацијата до погледот кој ја генерира "
-"таа страница."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Прикажи идентификационен број на објектот"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Го прикажува типот на содржината и уникатниот идентификационен број за "
-"страници кои претставуваат единечен објект."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Уреди го овој објект (во овој прозорец)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Скокнува до админ страницата за страници кои претставуваат единечен објект."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Уреди го овој објект (во нов прозорец)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Како погоре, но ја отвара админ страницата во нов прозорец."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Лични информации"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Привилегии"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Важни датуми"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Групи"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Успешна промена на лозинката."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Промени лозинка: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Корисник"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Задолжително. 30 или помалку знаци. Единствено букви, бројки и @/./+/-/_ ."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Оваа вредност смее да содржи само букви, бројки и @/./+/-/_ знаци."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Потврда на лозинка"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Веќе постои корисник со тоа корисничко име."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Двете полиња со лозинките не се совпаѓаат."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Оваа сметка е неактивна."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Не изгледа дека вашиот прелистувач има овозможено колачиња. Колачињата се "
-"потребни за да се најавите."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Е-пошта"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Нема регистрирано корисник со оваа адреса за е-пошта. Сигурни ли сте дека "
-"сте регистрирани?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Ресетирање на лозинка на %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Потврда за нова лозинка"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"Не ја внесовте точно вашата стара лозинка. Ве молам внесете ја повторно."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "име"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "кодно име"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "привилегија"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "привилегии"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "група"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "групи"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "корисничко име"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Задолжително. 30 или помалку знаци. Букви, бројки и @/./+/-/_ знаци"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "име"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "презиме"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "е-пошта"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "лозинка"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Користете '[algo]$[salt]$[hexdigest]' или користете ја <a href=\"password/"
-"\">формата за промена на лозинката</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "статус на администраторите"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Означува дали корисникот може да се логира во сајтот за администрација."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "активен"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Означува дали корисникот треба да биде активен. Одштиклирајте го ова наместо "
-"да бришете корисници."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "статус на суперкорисник"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Означува дека овој корисник ги има сите привилегии без експлицитно да се "
-"доделуваат сите."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "последна најава"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "датум на зачленување"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Како дополнување на рачно доделени привилегии, овој корисник ќе ги добие "
-"автоматски и сите привилегии за секоја група во која тој/таа членува."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "кориснички привилегии"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "корисник"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "корисници"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "порака"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Одјавен"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Внесeте правилна адреса за е-пошта."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Содржина"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Метаподатоци"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "обележан"
-msgstr[1] "обележани"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Обележи го одбраните коментари"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "одобрен"
-msgstr[1] "одобрени"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Одобри ги одбраните коментари"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "отстранет"
-msgstr[1] "отстранети"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Отстрани ги избраните коментари"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 коментар беше успешно %(action)s."
-msgstr[1] "%(count)s коментари беа успешно %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "коментари за %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Последни коментари за %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Име"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Е-пошта"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Коментар"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Внимавајте на јазикот. Тука не е дозволен зборот %s."
-msgstr[1] "Внимавајте на јазикот. Тука не се дозволени зборовите %s."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Ако внесете нешто во ова поле вашиот коментар ќе биде означен како спам"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "тип на содржина"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "object ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "името на корисникот"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "е-пошта на корисникот"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "веб страна на корсникот"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "коментар"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "датум/време пријавен"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "ИП адреса"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "е јавен"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Одштиклирајте го ова за да направите коментаров да исчезне од овој сајт."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "е отстранет"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Штиклирајте го ова поле ако коментарот не е пригоден. Наместо него пораката "
-"„Овој коментар беше отстранет“ ќе биде прикажана."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "коментари"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Овој коментар бил пратен од автентициран корисник и затоа името е заштитено "
-"од промена."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Овој коментар бил пратен од автентициран корисник и затоа е-пошта е "
-"заштитена од промена."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Напишан од %(user)s на %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "обележи"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "датум"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "обележје за коментар"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "обележја за коментари"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Одобри коментар"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Навистина ли сакате овој коментар да биде објавен?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Одобри"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Ви благодариме што одобривте"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Ви благодариме што допринесовте да се подобри квалитетот на дискусиите на "
-"нашиот сајт"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Избриши коментар"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Навистина ли сакате да го отстраните овој коментар?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Ви благодариме што отстранивте"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Обележи го овој коментар"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Навистина ли сакате да го обележите овој коментар?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Обележи"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Ви благодариме што обележавте"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Објави"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Преглед"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Ви благодариме за коментарот"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Ви благодариме за коментарот"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Прегледајте го вашиот коментар"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Ве молам поправете ја грешката подолу."
-msgstr[1] "Ве молам поправете ги грешките подолу."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Објавете го вашиот коментар"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "или направете измени"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "име на класата за python моделoт"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "типови содржини"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"На пр. „/за_сајтот/контакт/“. Осигурајте се да имате коса црта и на крајот и "
-"на почетокот."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Оваа вредност смее да има само букви, бројки, долни црти, црти или коси црти."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Напредни можности"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "наслов"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "содржина"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "овозможи коментари"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "име на шаблонот"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"На пр. „flatpages/kontakt.html'. Ако не го внесете ова, системот ќе користи "
-"„flatpages/default.html“."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "потребна е регистрација"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ако ова е штиклирано, само најавените корисници ќе можат да ја гледаат оваа "
-"страница."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "статична страница"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "статични страници"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Се извинуваме но вашата форма истече. Ве молам продолжете пополнувајќи ја "
-"формата од оваа страница."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Базичното GIS поле -- соодветствува на геометриски тип од OpenGIS "
-"спецификацијата."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Точка"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Линиска нишка"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Полигон"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Повеќе точки"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Повеќе-линиска нишка"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Повеќе полигони"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Колекција од геометриски објекти"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Не е внесена геометриска вредност."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Невалидна геометриска вредност."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Невалиден геометриски тип."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Се појави грешка при трансформација на геометриската вредност во SRID од "
-"геометриското поле"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f милион"
-msgstr[1] "%(value).1f милион"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f милијарда"
-msgstr[1] "%(value).1f милијарда"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f трилион"
-msgstr[1] "%(value).1f трилион"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "еден"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "два"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "три"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "четири"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "пет"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "шест"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "седум"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "осум"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "девет"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "денеска"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "утре"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "вчера"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Внесете поштенски број во форматот NNNN или ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Во ова поле смее да бидат само бројки."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Во ова поле смее да има 7 или 8 цифри."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Внесете правилен CUIT во XX-XXXXXXXX-X or XXXXXXXXXXXX формат."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Неправилен CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Бургенленд"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Каринтиа"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Долна Австрија"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Горна Австрија"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Салцзбург"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Стириа"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Тирол"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Ворарлберг"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Виена"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Внесете правилен поштенски број во форматот XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Внесете правилен број за социјално осигурување на Австрија во XXXX-XXXXXX "
-"формат."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Внесете 4 цифрен поштенски број."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Внесете правилен поштенски број во форматот XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Телефонските броеви мора да бидат во XX-XXXX-XXXX форматот."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Изберете правилна бразилска држава. Оваа држава не е од достапните држави."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Неправилен CPF број."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Во ова поле смее да има најмногу 11 цифри или 14 знаци."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Неправилен CNPJ број."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Во ова поле треба да има најмалку 14 цифри"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Внесете правилен поштенски број во формат XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Внесте правилен канадски број за осигурување во XXX-XXX-XXX форматот."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Женева"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Цирих"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Внесете правилен швајцарски број на пасош во X1234567<0 или 1234567890 "
-"формат."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Внесете правилeн RUT за Чиле."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Внесете правилен RUT за Чиле. Форматот е Xx.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "RUT бројот за Чиле е невалиден."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Прага"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Централен Бохемиски регион"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Јужен Бохемиски регион"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Пилзенски регион"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Карлсбадски регион"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Усти регион"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Либерец регион"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Храдец регион"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Пардубице регион"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Висоцина регион"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Јужно Моравски регион"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Оломуц регион"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Зилина регион"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Моравско-Силесански регион"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Внесете поштенски број во форматот XXXXX или XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Внесете даночен број (NIP) во форматот XXXXXX/XXXX или XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Невалидна вредност за опционален параметар пол, валидни вредности се 'f' и "
-"'m'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Внесете правилен даночен број."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Внесете правилен даночен број."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Баден-Вуертемберг"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Баварија"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Берлин"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Бранденбург"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Бремен"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Хамбург"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Хесен"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Мекленбург - Западна Померанија"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Долна Саксонија"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Северна Рајна-Вестфалија"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Рајналенд-Палатинате"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Сарленд"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Саксонија"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Саксонија-Анхалт"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Шлесвиг-Холштајн"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Турингиа"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Внесете правилен поштенски број во формат XXXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Внесете правилен број на лична карта во Германија во XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X форматот."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Авила"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Барцелона"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Кордоба"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Леон"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Луго"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Мадрид"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Малага"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Санта Круз и Тенерифе"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Севиља"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Толедо"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Валенсија"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Сарагоса"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Андалузија"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Арагон"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principality of Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Острови Балеарик"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Баскија"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Канарски острови"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Кастиља ла Манча"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Кастиња и Леон"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Каталонија"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Екстремадура"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Галиција"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Регион Мурција"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Внесете поштенски број во опсег и формат 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Внесете правилен телефонски број во еден од формативе 6XXXXXXXX, 8XXXXXXXX "
-"или 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Ве молам внесете правиелн NIF, NIE или CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Ве молам внесете валиден NIF или NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Неправилна контролна сума за NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Неправилна контролна сума за NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Неправилна контролна сум за CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Внесете правилна банкарска сметка во формат XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Неправилна контролна сума за бројот на банкарската сметка."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Внесте правилен фински матичен број."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Телефонските броеви мора да бидат во 0X XX XX XX XX форматот."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Внесете правилен поштенски код"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Внесете валиден телефонски број"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Внесете валидна регистарска табличка."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Внесете правилен NIK/KTP број."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Бали"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Бантен"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Бенгкулу"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Јогјакарта"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Џакарта"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Горонтало"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Џамби"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Јава Барат"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Јава Тенга"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Јава Тимур"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Калинмантан Барат"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Калимантан Селатан"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Калимантан Тенга"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Калимантан Тимур"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Кепулуан Банга-Белитунг"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Кепулуан Риау"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Лампунг"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Малуку"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Малуку Утара"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Нангоре Аце Дарусалам"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Нуса Тенгара Барат"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Нуса Тенгара Тимур"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Папуа"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Папуа Барат"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Риау"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Сулавеси Барат"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Сулавеси Селатан"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Сулавеси Тенга"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Сулавеси Тенгара"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Сулавеси Утара"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Суматера Барат"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Суматера Селатан"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Суматера Утара"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Магеланг"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Суракарта - Соло"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Мадиун"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Кедири"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Тапанули"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Кепулуан Банга Белитунг"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Бандунг"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Сулавеси Утара Даратан"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Сулавеси Утара Кепулуан"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Папуа дан Папуа Барат"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Циребон"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Богор"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Пекалонган"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Семаранг"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Пати"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Сурабаја"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Мадура"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Маланг"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Џембер"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Банјумас"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Федерална Влада"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Бојонегоро"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Пурвакарта"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Сидоарџо"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Гарут"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Антрим"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Армаг"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Карлов"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Каван"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Кларе"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Корк"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Дери"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Донегал"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Даун"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Даблин"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Ферманаг"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Галвеј"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Кери"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Килдаре"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Килкени"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Лаоис"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Лајтрим"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Лимерик"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Лонгфорд"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Лут"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Мајо"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Мит"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Монаган"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Офали"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Росомон"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Слиго"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Типерари"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Тајрон"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Вотерфорд"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Вестмит"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Вексфорд"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Виклоу"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Внесете правилен поштенски број во форматот XXXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Внесете валиден идентификационен број од Исланд. Форматот е XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Исландскиот идентификационент број е невалиден."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Внесете правилен поштенски број."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Внесете правилен осигурителен број."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Внесете правилен даночен број."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Внесете поштенски број во форматот XXXXXXX или XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Хокаидо"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Аомори"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Ивате"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Мијаги"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Акита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Јамагата"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Фукушима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ибараки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Точиги"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Гунма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Саитама"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Чиба"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Токио"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Канагава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Јаманаши"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Нагано"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Нигита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Тојама"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ишикава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Фукуи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Гифу"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Шизоука"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Аичи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Мие"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Шига"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Кјото"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Осака"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Хиого"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Нара"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Вакајама"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Тотори"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Шимане"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Окајама"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Хирошима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Јамагучи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Токушима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Кагава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Еиме"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Кочи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Фукуока"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Сага"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Нагасаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Кумамото"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Оита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Мијазаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Кагошима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Окинава"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Внесете правилен кувајтски број за идентификација"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Баја Калифорнија"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Кампеш"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Чиапас"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Колима"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Дуранго"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Гуереро"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Хидалго"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Џалиско"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Куантана Ро"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Синалоа"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "Сан Луис Потоси"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Сонора"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Табаско"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Тамаулипас"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Веракруз"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Јукатан"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Зацатекас"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Внесете правилен поштенски код"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Внесете валиден осигурителен број"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Дренте"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Флеволанд"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Фраисланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Гелдерланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Гронинген"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Лимбург"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Утрехт"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Зиланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Ве молам внесете правилен норвешки матичен број."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Во ова поле мора да се внесат 8 цифри."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Во ова поле се потребни 11 цифри."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Националниот идентификационен број се состои од 11 цифири."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Погрешна проверка за Националниот идентификационен број."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Внесете даночен број (NIP) во форматот XXX-XXX-XX-XX или XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Даночниот број (NIP) е погрешен."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Националниот бизнис регистрациски број (REGON) се состои од 9 или 14 цифри."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Неправилна контролна сум за Националниот бизнис регистрационен број (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Внесете правилен поштенски број во формат XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Долна Силесиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Лублин"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Лубус"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Лодз"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Масовиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Ополе"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Субкарпатиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Подласи"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Померанија"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Силесиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Западна Померанија"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Внесете поштенски број во форматот XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-"Телефонските броеви мора да се со 9 цифри, или да почнуваат со + или 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Внесете правилен CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Внесете правилен CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Внесете правилен IBAN во ROXX-XXXX-XXXX-XXXX-XXXX-XXXX формат"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Телефонските броеви мора да бидат во XXXX-XXXXXX форматот."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Внесете правилен поштенски код во формат XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Внесете број на шведска организација."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Внесте правилен шведски матичен број."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Координациски броеви не се дозволени."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Внесете правилен шведски поштенски број во формат XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Стокхолм"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Вестерботен"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Норботен"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Упсала"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Содерманланд"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Остерготланд"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Јонкопинг"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Кроненберг"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Калмар"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Готланд"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Блекинге"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Скане"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Халанд"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Вестра Готаланд"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Вермленд"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Оребро"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Вестменланд"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Даларна"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Гевлеборг"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Вестернорланд"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Јемтланд"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Банска Бистрица"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Банска Стиавница"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Бардејов"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Бановце над Бебраво"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Брезно"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Братислава I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Братислава II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Братислава III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Братислава IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Братислава V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Битка"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Кадка"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Детва"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Гелника"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Хлоховец"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Хумен"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Кезмарок"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Комарно"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Кошице I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Кошице II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Кошице III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Кошице IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Кошице - околина"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Крупина"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Левице"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Левока"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Луценец"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Мартин"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Наместово"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Нитра"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Партизанске"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Пезинок"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Полтар"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Попрад"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Пресов"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Пучов"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Ревука"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Рознава"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Рузомберок"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Сабинов"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Сенец"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Сеника"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Скалица"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Шнина"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Собранце"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Стара Љубовна"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Стропков"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Свидник"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Сала"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Тополчани"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Требисов"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Тренцин"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Трнава"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Тврдосин"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Злате Моравце"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Зволен"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Зарновица"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Зилина"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica region"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Братиславски регион"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Кошице регион"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Нитра регион"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Пресов регион"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Тренцин регион"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Трнава регион"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Зилина регион"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Внесете правилен поштенски код."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Бедфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Букингхамшир"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Чешир"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Кумбриа"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Дербишир"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Девон"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Дорсет"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Дурам"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Источен Сасекс"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Есекс"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Поширок Лондон"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Поширок Манчестер"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Хемпшир"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Хертфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Кент"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Ланкашир"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Линколншир"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Мерсејсајд"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Норфолк"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "Северен Јоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Нортхамтоншир"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Нотингхамшир"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Оксфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Шропшир"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Сомерсет"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Јужен Јоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Стафордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Суфолк"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "Западен Мидландс"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "Западен Сасекс"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "Западен Јоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Вилтшир"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Гвент"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Јужен Гламорга"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Западен Гламорган"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Централна Шкотска"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Грампиан"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Англија"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Северна Ирска"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Шкотска"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Велс"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Внесете поштенски број во форматот XXXXX или XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Телефонските броеви мора да бидат во XXX-XXX-XXXX форматот."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Внесте правилен матичен број за САД во XXX-XX-XXXX форматот."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Внесете држава или територија од САД."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Држава во САД (две големи букви)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Телефонски број"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Внесете правилен CI во X.XXX.XXX-X,XXXXXXX-X или XXXXXXXX формат."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Внесете правилен CI број."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Внесете правилен јужно афрички број за идентификација"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Внесете правилен јужно афрички поштенски код"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Источен Кејп"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "мрзлива порака"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "пренасочи од"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ова треба да биде апсолутна патека без името на домејнот. На пр. „/nastani/"
-"prebaraj/“."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "пренасочи кон"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ова може да биде или апсолутна патека (како погоре) или цела адреса "
-"почувајќи со „http://“."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "пренасочување"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "пренасочувања"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "клуч на сесијата"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "податоци од сесијата"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "датум на истекување"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "сесија"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "сесии"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "домејн"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "име кое се прикажува"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "сајтови"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Внесете правилна вредност."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Внесете правилна адреса."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Оваа адреса изгледа дека не е достапна."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Внесете правилно кратко име (slug) кое се соддржи од букви, цифри, долна "
-"црта или тире."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Внесeте правилна IPv4 адреса."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Внесете само цифри одделени со запирки."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Осигурајте се дека оваа вредност е %(limit_value)s (моментално е %"
-"(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-"Осигурајте се дека оваа вредност е помала или еднаква со %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-"Осигурајте се дека оваа вредност е поголема или еднаква со %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Осигурајте се дека оваа вредност има најмалку %(limit_value)d знаци (има %"
-"(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Осигурајте се дека оваа вредност има најмногу %(limit_value)d знаци (има %"
-"(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s мора да биде уникатно за %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s со %(field_label)s веќе постои."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Вредноста %r не е валиден избор."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Оваа вредност неможе да биде null."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Ова поле не може да биде празно"
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Поле од тип: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Цел број"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Оваа вредност мора да биде цел број."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Оваа вредност мора да биде или точно или неточно."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Логичка (или точно или неточно)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Збор (до %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Целобројни вредности одделени со запирка"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Датум (без час)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Внесете правилен датум во форматот ГГГГ-ММ-ДД."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Неправилен датум: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Внесете правилен датум/време во YYYY-MM-DD HH:MM[:ss[.uuuuuu]] формат."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Датум (со час)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Оваа вредност мора да биде децимален број."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Децимален број"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Адреса на е-пошта"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Патека на датотека"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Оваа вредност мора да биде број со подвижна запирка."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Децимален број"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Голем (8 бајти) цел број"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Оваа вредност мора да биде празна, точно или неточно."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Логичка (точно,неточно или празно)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Текст"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Час"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Внесете правилно време во HH:MM[:ss[.uuuuuu]] формат."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML текст"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Модел %(model)s со примарен клуч %(pk)r не постои."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Надворешен клуч (типот е одреден според сврзаното поле)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Еден-према-еден релација"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Повеќе-према-повеќе релација"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Држете го „Control“, или „Command“ на Мекинтош, за да изберете повеќе од "
-"едно."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Ве молам внесете правилен %(self)s идентификацион број. Оваа вредност %"
-"(value)r е неправилна."
-msgstr[1] ""
-"Ве молам внесете правилен %(self)s идентификацион број. Вредностите %(value)"
-"r се неправилни."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Ова поле е задолжително."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Внеси цел број."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Внесете број."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Осигурајте се дека вкупно нема повеќе од %s цифри."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Осигурајте се дека нема повеќе од %s децимални места."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Осигурајте се дека нема повеќе од %s цифри пред децималната запирка."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Внесете правилен датум."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Внесете правилно време."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Внесете правилен датум со време."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Не беше пратена датотека. Проверете го типот на енкодирање на формата."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Не беше пратена датотека."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Пратената датотека е празна."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Осигурајте се дека ова име на датотека има најмногу %(max)d знаци (има %"
-"(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Качете валидна слика. Датотеката која ја качивте или не беше слика или беше "
-"расипана датотеката."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Внесете валиден избор. %(value)s не е еден од можните избори."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
-msgid "Enter a list of values."
-msgstr "Внесете листа на вредности."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Редослед"
-
-#: forms/models.py:567
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Ве молам поправете ја дуплираната вредност за %(field)s."
-
-#: forms/models.py:571
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Ве молам поправете ја дуплираната вредност за %(field)s, која мора да биде "
-"уникатна."
-
-#: forms/models.py:577
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Ве молам поправете ја дуплираната вредност за %(field_name)s која мора да "
-"биде уникатна за %(lookup)s во %(date_field)s."
-
-#: forms/models.py:585
-msgid "Please correct the duplicate values below."
-msgstr "Ве молам поправете ги дуплираните вредности подолу."
-
-#: forms/models.py:860
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Надворешниот клуч на вгезденото поле не се совпаѓа со примарниот клуч на "
-"родителската инстанца."
-
-#: forms/models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Изберете правилно. Тоа не е еден од можните избори."
-
-#: forms/models.py:1008
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Внесете правилно. %s не е еден од достапните вредности."
-
-#: forms/models.py:1010
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" не е правилна вредност за примарен клуч."
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "да, не, можеби"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d бајт"
-msgstr[1] "%(size)d бајти"
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f КБ"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f МБ"
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f ГБ"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "попладне"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "наутро"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "попладне"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "наутро"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "полноќ"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "пладне"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "понеделник"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "вторник"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "среда"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "четврток"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "петок"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "сабота"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "недела"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "пон"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "вто"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "сре"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "чет"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "пет"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "саб"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "нед"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "јануари"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "февруари"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "март"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "април"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "мај"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "јуни"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "јули"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "август"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "септември"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "октомври"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "ноември"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "декември"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "јан"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "фев"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "мар"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "апр"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "мај"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "јун"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "јул"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "авг"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "сеп"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "окт"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "ное"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "дек"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "јан."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "фев."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "авг."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "сеп."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "окт."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "ное."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "дек."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "или"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "година"
-msgstr[1] "години"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "месец"
-msgstr[1] "месеци"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "седмица"
-msgstr[1] "седмици"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "ден"
-msgstr[1] "дена"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "час"
-msgstr[1] "часа"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "минута"
-msgstr[1] "минути"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "минути"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "j M Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr "j M Y, P"
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Ставка %(verbose_name)s беше успешно создадена."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Ставка %(verbose_name)s беше успешно ажурирана."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Ставка %(verbose_name)s беше избришана."
diff --git a/parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index b334f17..0000000
--- a/parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 1ce0784..0000000
--- a/parts/django/django/conf/locale/mk/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,126 +0,0 @@
-# translation of djangojs.po to Macedonian
-#
-# Georgi Stanojevski <glisha@gmail.com>, 2006, 2007.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-01 21:49+0200\n"
-"PO-Revision-Date: 2010-04-05 15:44+0100\n"
-"Last-Translator: Vasil Vangelovski <vvangelovski@gmail.com>\n"
-"Language-Team: Macedonian <ossm-members@hedona.on.net.mk>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Достапно %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Избери ги сите"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Додади"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Отстрани"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Избрано %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Означете го вашиот избор/и и кликнете"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Исчисти ги сите"
-
-#: contrib/admin/media/js/actions.js:17
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Јануари Февруари Март Април Мај Јуни Јули Август Септември Октомври Ноември "
-"Декември"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "Н П В С Ч П С"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Прикажи"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Сокриј"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Недела Понеделник Вторник Среда Четврток Петок Сабота"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Сега"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Часовник"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Избери време"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Полноќ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 наутро"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Пладне"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Откажи"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Денеска"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Календар"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Вчера"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Утре"
diff --git a/parts/django/django/conf/locale/mk/__init__.py b/parts/django/django/conf/locale/mk/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/mk/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/mk/formats.py b/parts/django/django/conf/locale/mk/formats.py
deleted file mode 100644
index 746ac0e..0000000
--- a/parts/django/django/conf/locale/mk/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-SHORT_DATE_FORMAT = 'd.n.Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/ml/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ml/LC_MESSAGES/django.mo
deleted file mode 100644
index 654b4fc..0000000
--- a/parts/django/django/conf/locale/ml/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ml/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ml/LC_MESSAGES/django.po
deleted file mode 100644
index 92ef53f..0000000
--- a/parts/django/django/conf/locale/ml/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5044 +0,0 @@
-# Translation of Django to Malayalam.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# RAJEESH R NAIR <rajeeshrnair@gmail.com>, 2010.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django SVN\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-27 11:01+0530\n"
-"PO-Revision-Date: 2010-05-28 15:09+0530\n"
-"Last-Translator: Rajeesh Nair <rajeeshrnair@gmail.com>\n"
-"Language-Team: MALAYALAM <ML@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Malayalam\n"
-"X-Poedit-Country: INDIA\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "അറബി"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "ബള്‍ഗേറിയന്‍"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "ബംഗാളി"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "ബോസ്നിയന്‍"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "കാറ്റലന്‍"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "ചെക്"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "വെല്‍ഷ്"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "ഡാനിഷ്"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "ജര്‍മന്‍"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "ഗ്രീക്ക്"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "ഇംഗ്ളീഷ്"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "ബ്രിട്ടീഷ് ഇംഗ്ളീഷ്"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "സ്പാനിഷ്"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "അര്‍ജന്റീനിയന്‍ സ്പാനിഷ്"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "എസ്ടോണിയന്‍ സ്പാനിഷ്"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "ബാസ്ക്യു"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "പേര്‍ഷ്യന്‍"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "ഫിന്നിഷ്"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "ഫ്രെഞ്ച്"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "ഫ്രിസിയന്‍"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "ഐറിഷ്"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "ഗലിഷ്യന്‍"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "ഹീബ്റു"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "ഹിന്ദി"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "ക്രൊയേഷ്യന്‍"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "ഹംഗേറിയന്‍"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "ഇന്‍ദൊനേഷ്യന്‍"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "ഐസ്ലാന്‍ഡിക്"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "ഇറ്റാലിയന്‍"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "ജാപ്പനീസ്"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "ജോര്‍ജിയന്‍"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr ""
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "കന്നഡ"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "കൊറിയന്‍"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "ലിത്വാനിയന്‍"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "ലാറ്റ്വിയന്‍"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "മാസിഡോണിയന്‍"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "മംഗോളിയന്‍"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "ഡച്ച്"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr ""
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr ""
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr ""
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr ""
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr ""
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr ""
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr ""
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr ""
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr ""
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr ""
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr ""
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr ""
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr ""
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr ""
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr ""
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr ""
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr ""
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr ""
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr ""
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr ""
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d %(items)s വിജയകരമായി ഡിലീറ്റ് ചെയ്തു."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "തീര്‍ച്ചയാണോ?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "തെരഞ്ഞെടുത്ത %(verbose_name_plural)s ഡിലീറ്റ് ചെയ്യുക."
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "എല്ലാം"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "ഏതെങ്കിലും തീയതി"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "ഇന്ന്"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "കഴിഞ്ഞ ഏഴു ദിവസം"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "ഈ മാസം"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "ഈ വര്‍ഷം"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:466
-msgid "Yes"
-msgstr "അതെ"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:466
-msgid "No"
-msgstr "അല്ല"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:466
-msgid "Unknown"
-msgstr "അജ്ഞാതം"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "ആക്ഷന്‍"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "ആക്ഷന്‍ സമയം"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "ഒബ്ജെക്ട് ഐഡി"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "ഒബ്ജെക്ട് സൂചന"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "ആക്ഷന്‍ ഫ്ളാഗ്"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "സന്ദേശം മാറ്റുക"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "ലോഗ് എന്ട്രി"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "ലോഗ് എന്ട്രികള്‍"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "ഒന്നുമില്ല"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "%s മാറ്റി."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "ഉം"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" ചേര്‍ത്തു."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" ന്റെ %(list)s മാറ്റി."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" ഡിലീറ്റ് ചെയ്തു."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "ഒരു മാറ്റവുമില്ല."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" വിജയകരമായി കൂട്ടിച്ചേര്ത്തു."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "താഴെ നിന്ന് വീണ്ടും മാറ്റം വരുത്താം"
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "%s ഒന്നു കൂടി ചേര്‍ക്കാം"
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" ല്‍ മാറ്റം വരുത്തി."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" കൂട്ടി ചേര്‍ത്തു. താഴെ നിന്നും മാറ്റം വരുത്താം."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr "ആക്ഷന്‍ നടപ്പിലാക്കേണ്ട വകകള്‍ തെരഞ്ഞെടുക്കണം. ഒന്നും മാറ്റിയിട്ടില്ല."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "ആക്ഷനൊന്നും തെരഞ്ഞെടുത്തില്ല."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "%s ചേര്‍ക്കുക"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(key)r എന്ന പ്രാഥമിക കീ ഉള്ള %(name)s വസ്തു ഒന്നും നിലവിലില്ല."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "%s മാറ്റാം"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "ഡേറ്റാബേസ് തകരാറാണ്."
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s ല്‍ മാറ്റം വരുത്തി."
-msgstr[1] "%(count)s %(name)s ല്‍ മാറ്റം വരുത്തി."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s തെരഞ്ഞെടുത്തു."
-msgstr[1] "%(total_count)sഉം തെരഞ്ഞെടുത്തു."
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "%(cnt)s ല്‍ ഒന്നും തെരഞ്ഞെടുത്തില്ല."
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" ഡിലീറ്റ് ചെയ്തു."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "%s ലെ മാറ്റങ്ങള്‍."
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "ദയവായി ശരിയായ യൂസര്‍നാമവും പാസ്വേര്ഡും നല്കുക. ഇംഗ്ളീഷ് അക്ഷരങ്ങള്‍ വല്യക്ഷരമാണോ അല്ലയോ എന്നത് "
-"ശ്രദ്ധിക്കണം"
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "താങ്കളുടെ സെഷന്റെ കാലാവധി കഴിഞ്ഞു. വീണ്ടും ലോഗിന്‍ ചെയ്യണം."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr "നിങ്ങളുടെ ബ്രൗസര്‍ കുക്കീസ് സ്വീകരിക്കാന്‍ തയ്യാറല്ലെന്നു തോന്നുന്നു. കുക്കീസ് പ്രവര്‍ത്തനക്ഷമമാക്കിയ ശേഷം "
-"ഈ പേജ് രീലോഡ് ചെയ്ത് വീണ്ടും ശ്രമിക്കുക."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "യൂസര്‍നാമത്തില്‍ '@' എന്ന ചിഹ്നം പാടില്ല."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "നിങ്ങളുടെ ഇ-മെയില്‍ അഡ്രസ്സ് അല്ല യൂസര്‍നാമം. പകരം '%s' ഉപയോഗിച്ച് നോക്കുക."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "സൈറ്റ് ഭരണം"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "ലോഗ്-ഇന്‍"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s ഭരണം"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "തീയതി:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "സമയം:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr ""
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "മാറ്റുക:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "തിരയുക"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "ഒന്നു കൂടി ചേര്‍ക്കുക"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "പേജ് കണ്ടില്ല"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "ക്ഷമിക്കണം, ആവശ്യപ്പെട്ട പേജ് കണ്ടെത്താന്‍ കഴിഞ്ഞില്ല."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "പൂമുഖം"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "സെര്‍വര്‍ തകരാറാണ്"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "സെര്‍വര്‍ തകരാറാണ് (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "സെര്‍വര്‍ തകരാറാണ് <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr "എന്തോ തകരാറുണ്ട്. ഉടന്‍ പരിഹരിക്കാനായി സൈറ്റ് നിയന്ത്രകര്‍ക്കു ഇ-മെയില്‍ വഴി രിപ്പോര്‍ട്ട് ചെയ്തിട്ടുണ്ട്."
-"ദയവായി കാത്തിരിക്കുക."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "തെരഞ്ഞെടുത്ത ആക്ഷന്‍ നടപ്പിലാക്കുക"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "എല്ലാ പേജിലേയും വസ്തുക്കള്‍ തെരഞ്ഞെടുക്കാന്‍ ഇവിടെ ക്ലിക് ചെയ്യുക."
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "മുഴുവന്‍ %(total_count)s %(module_name)s ഉം തെരഞ്ഞെടുക്കുക"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "തെരഞ്ഞെടുത്തത് റദ്ദാക്കുക."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "സ്വാഗതം, "
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "സഹായക്കുറിപ്പുകള്‍"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "പാസ് വേര്‍ഡ് മാറ്റുക."
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "പുറത്ത് കടക്കുക."
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "ജാംഗോ സൈറ്റ് അഡ്മിന്‍"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "ജാംഗോ ഭരണം"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "ചരിത്രം"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "ദയവായി താഴെയുള്ള തെറ്റ് പരിഹരിക്കുക."
-msgstr[1] "ദയവായി താഴെയുള്ള തെറ്റുകള്‍ പരിഹരിക്കുക."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr "%(object_name)s '%(escaped_object)s ഡിലീറ്റ് ചെയ്യുമ്പോള്‍ അതുമായി ബന്ധമുള്ള വസ്തുക്കളും"
-"ഡിലീറ്റ് ആവും. പക്ഷേ നിങ്ങള്‍ക്ക് താഴെ പറഞ്ഞ തരം വസ്തുക്കള്‍ ഡിലീറ്റ് ചെയ്യാനുള്ള അനുമതി ഇല്ല:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr "%(object_name)s \"%(escaped_object)s\" ഡിലീറ്റ് ചെയ്യണമെന്ന് തീര്‍ച്ചയാണോ?"
-"അതുമായി ബന്ധമുള്ള താഴെപ്പറയുന്ന വസ്തുക്കളെല്ലാം ഡിലീറ്റ് ആവും:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "അതെ, തീര്‍ച്ചയാണ്"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "ഒന്നിലേറെ വസ്തുക്കള്‍ ഡിലീറ്റ് ചെയ്തോളൂ"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr "%(object_name)s ഡിലീറ്റ് ചെയ്യുമ്പോള്‍ അതുമായി ബന്ധമുള്ള വസ്തുക്കളും"
-"ഡിലീറ്റ് ആവും. പക്ഷേ നിങ്ങള്‍ക്ക് താഴെ പറഞ്ഞ തരം വസ്തുക്കള്‍ ഡിലീറ്റ് ചെയ്യാനുള്ള അനുമതി ഇല്ല:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr "തെരഞ്ഞെടുത്ത %(object_name)s എല്ലാം ഡിലീറ്റ് ചെയ്യണമെന്ന് തീര്‍ച്ചയാണോ?"
-"താഴെപ്പറയുന്ന വസ്തുക്കളും അതുമായി ബന്ധമുള്ളതെല്ലാം ഡിലീറ്റ് ആവും:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "മാറ്റുക"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "ഒന്നിലും മാറ്റം വരുത്താനുള്ള അനുമതി ഇല്ല."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "സമീപകാല പ്രവ്രുത്തികള്‍"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "എന്റെ പ്രവ്രുത്തികള്‍"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "ഒന്നും ലഭ്യമല്ല"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "ഉള്ളടക്കം അറിയില്ല."
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr "നിങ്ങളുടെ ഡേറ്റാബേസ് ഇന്‍സ്ടാലേഷനില്‍ എന്തോ പിശകുണ്ട്. ശരിയായ ടേബിളുകള്‍ ഉണ്ടെന്നും ഡേറ്റാബേസ് "
-"വായനായോഗ്യമാണെന്നും ഉറപ്പു വരുത്തുക."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "യൂസര്‍ നാമം"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "പാസ് വേര്‍ഡ്"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "തീയതി/സമയം"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "യൂസര്‍"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "ആക്ഷന്‍"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr "ഈ വസ്തുവിന്റെ മാറ്റങ്ങളുടെ ചരിത്രം ലഭ്യമല്ല. ഒരുപക്ഷെ ഇത് അഡ്മിന്‍ സൈറ്റ് വഴി ചേര്‍ത്തതായിരിക്കില്ല."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "എല്ലാം കാണട്ടെ"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "സേവ് ചെയ്യണം"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "പരതുക"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 ഫലം"
-msgstr[1] "%(counter)s ഫലങ്ങള്‍"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "ആകെ %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "പുതിയതായി സേവ് ചെയ്യണം"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "സേവ് ചെയ്ത ശേഷം വേറെ ചേര്‍ക്കണം"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "സേവ് ചെയ്ത ശേഷം മാറ്റം വരുത്താം"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "ആദ്യം, യൂസര്‍ നാമവും പാസ് വേര്‍ഡും നല്കണം. പിന്നെ, കൂടുതല്‍ കാര്യങ്ങള്‍ മാറ്റാവുന്നതാണ്."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "<strong>%(username)s</strong> ന് പുതിയ പാസ് വേര്‍ഡ് നല്കുക."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "പാസ് വേര്‍ഡ്"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "പാസ് വേര്‍ഡ് (വീണ്ടും)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "പാസ് വേര്‍ഡ് മുകളിലെ പോലെ തന്നെ നല്കുക. (ഉറപ്പു വരുത്താനാണ്.)"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "%(verbose_name)s ഒന്നു കൂടി ചേര്‍ക്കുക"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "നീക്കം ചെയ്യുക"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "ഡിലീറ്റ് ചെയ്യട്ടെ?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "ഈ വെബ് സൈറ്റില്‍ കുറെ നല്ല സമയം ചെലവഴിച്ചതിനു നന്ദി."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "വീണ്ടും ലോഗ്-ഇന്‍ ചെയ്യുക."
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "പാസ് വേര്‍ഡ് മാറ്റം"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "പാസ് വേര്‍ഡ് മാറ്റം വിജയിച്ചു"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "നിങ്ങളുടെ പാസ് വേര്‍ഡ് മാറ്റിക്കഴിഞ്ഞു."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr "സുരക്ഷയ്ക്കായി നിങ്ങളുടെ പഴയ പാസ് വേര്‍ഡ് നല്കുക. പിന്നെ, പുതിയ പാസ് വേര്‍ഡ് രണ്ട് തവണ നല്കുക. "
-"(ടയ്പ് ചെയ്തതു ശരിയാണെന്ന് ഉറപ്പാക്കാന്‍)"
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "പഴയ പാസ് വേര്‍ഡ്"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "പുതിയ പാസ് വേര്‍ഡ്"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "എന്റെ പാസ് വേര്‍ഡ് മാറ്റണം"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കല്‍"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കല്‍ പൂര്‍ണം"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "നിങ്ങളുടെ പാസ് വേര്‍ഡ് തയ്യാര്‍. ഇനി ലോഗ്-ഇന്‍ ചെയ്യാം."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കല്‍ ഉറപ്പാക്കല്‍"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "പുതിയ പാസ് വേര്‍ഡ് നല്കൂ"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "ദയവായി നിങ്ങളുടെ പുതിയ പാസ് വേര്‍ഡ് രണ്ടു തവണ നല്കണം. ശരിയായാണ് ടൈപ്പു ചെയ്തത് എന്നു ഉറപ്പിക്കാനാണ്."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "പുതിയ പാസ് വേര്‍ഡ്:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "പാസ് വേര്‍ഡ് ഉറപ്പാക്കൂ:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കല്‍ പരാജയം"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കാന്‍ നല്കിയ ലിങ്ക് യോഗ്യമല്ല. ഒരു പക്ഷേ, അതു മുന്പ് തന്നെ ഉപയോഗിച്ചു "
-"കഴിഞ്ഞതാവാം. പുതിയ ഒരു ലിങ്കിന് അപേക്ഷിക്കൂ."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കല്‍ വിജയം"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr "നിങ്ങളുടെ പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കാനായി നിര്‍ദ്ദേശങ്ങള്‍ അടങ്ങിയ ഒരു ഈ-മെയില്‍ നിങ്ങള്‍ നല്കിയ"
-"വിലാസത്തില്‍ അയച്ചിട്ടുണ്ട്. അത് നിങ്ങള്‍ക്ക് ഉടന്‍ ലഭിക്കേണ്ടതാണ്."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "നിങ്ങള്‍ പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കാന്‍ അപേക്ഷിച്ചതു കൊണ്ടാണ് ഈ ഇ-മെയില്‍ നിങ്ങള്‍ക്ക് ലഭിക്കുന്നത്."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "നിങ്ങളുടെ %(site_name)s എന്ന സൈറ്റിലെ അക്കൗണ്ടിനു വേണ്ടി."
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "ദയവായി താഴെ പറയുന്ന പേജ് സന്ദര്‍ശിച്ച് പുതിയ പാസ് വേര്‍ഡ് തെരഞ്ഞെടുക്കുക:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "നിങ്ങള്‍ മറന്നെങ്കില്‍, നിങ്ങളുടെ യൂസര്‍ നാമം, :"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "ഞങ്ങളുടെ സൈറ്റ് ഉപയോഗിച്ചതിന് നന്ദി!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr "പാസ് വേര്‍ഡ് മറന്നോ? നിങ്ങളുടെ ഇ-മെയില്‍ വിലാസം നല്കൂ, പുതിയ പാസ് വേര്‍ഡ് സ്ഥാപിക്കാനായി "
-"ഞങ്ങള്‍ നിര്‍ദ്ദേശങ്ങള്‍ ആ വിലാസത്തില്‍ അയക്കാം."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "ഇ-മെയില്‍ വിലാസം:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "എന്റെ പാസ് വേര്‍ഡ് പുനസ്ഥാപിക്കൂ"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "എല്ലാ തീയതികളും"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "%s തെരഞ്ഞെടുക്കൂ"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "മാറ്റാനുള്ള %s തെരഞ്ഞെടുക്കൂ"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "സൈറ്റ്"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "ടെമ്പ്ലേറ്റ്"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "ടാഗ്:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "അരിപ്പ:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "വ്യൂ"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "%r എന്ന App കണ്ടില്ല."
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "%(app_label)r എന്ന Appല്‍ %(model_name)r എന്ന മാത്രുക കണ്ടില്ല."
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "ബന്ധപ്പെട്ട `%(app_label)s.%(data_type)s` വസ്തു"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "മാത്രുക:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "ബന്ധപ്പെട്ട `%(app_label)s.%(object_name)s` വസ്തുക്കള്‍"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "%s എല്ലാം"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%sന്റെ എണ്ണം"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s വസ്തുക്കളിലെ വിവരങ്ങള്‍"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s വിലാസ മാത്രുക (urlpattern object) ആണെന്ന് തോന്നുന്നില്ല."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "ബുക്ക് മാര്‍ക്കുകള്‍"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "സഹായക്കുറിപ്പുകളുടെ ബുക്ക്മാര്‍ക്കുകള്‍"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">ബുക്ക്മാര്‍ക്ക്ലെറ്റുകള്‍ ഇന്‍സ്റ്റാള്‍ ചെയ്യാന്‍, ലിങ്കിനെ നിങ്ങളുടെ ബുക്ക്മാര്‍ക് ടൂള്‍ബാറിലേക്ക് \n"
-"വലിച്ചിടുകയോ, ലിങ്കിന്‍മേല്‍ റൈറ്റ്ക്ളിക് ചെയ്ത് ബുക്ക്മാര്‍ക്കായി ചേര്‍ക്കുകയോ ചെയ്യുക. ഇനി സൈറ്റിലെ ഏതു പേജില്‍ നിന്നും\n"
-" ഈ ബുക്ക്മാര്ക് തെരഞ്ഞെടുക്കാം. ചില ബുക്ക്മാര്‍ക്കുകള്‍ ഇന്റേണല്‍ ആയ കമ്പ്യൂട്ടറില്‍ നിന്നേ ലഭ്യമാവൂ എന്നു ശ്രദ്ധിക്കണം.\n"
-"നിങ്ങളുടെ കംപ്യൂട്ടര്‍ അത്തരത്തില്‍ പെട്ടതാണോ എന്നറിയാന്‍ സിസ്റ്റം അഡ്മിനിസ്ട്രേട്ടറെ ബന്ധപ്പെടുക.</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "ഈ പേജിന്റെ സഹായക്കുറിപ്പുകള്‍"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "ഏതു പേജില്‍ നിന്നും അതിന്റെ ഉദ്ഭവമായ വ്യൂവിന്റെ സഹായക്കുറിപ്പിലേക്കു ചാടാന്‍"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "വസ്തുവിന്റെ ഐഡി കാണിക്കുക."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "ഒറ്റ വസ്തുവിനെ പ്രതിനിധീകരിക്കുന്ന പേജുകളുടെ ഉള്ളടക്കത്തിന്റെ തരവും തനതായ IDയും കാണിക്കുന്നു."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "ഈ വസ്തുവില് മാറ്റം വരുത്തുക (ഇതേ വിന്‍ഡോ)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "ഒറ്റ വസ്തുവിനെ പ്രതിനിധീകരിക്കുന്ന പേജുകള്‍ക്കുള്ള അഡ്മിന്‍ പേജിലേക്ക് ചാടുന്നു."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "ഈ വസ്തുവില് മാറ്റം വരുത്തുക (പുതിയ വിന്‍ഡോ)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "മുകളിലേതു പോലെ, പക്ഷെ, അഡ്മിന്‍ പേജ് പുതിയ വിന്ഡോവിലാണ് തുറക്കുക."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "വ്യക്തിപരമായ വിവരങ്ങള്‍"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "അനുമതികള്‍"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "പ്രധാന തീയതികള്‍"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "ഗ്രൂപ്പുകള്‍"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "പാസ് വേര്‍ഡ് മാറ്റിയിരിക്കുന്നു."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "പാസ് വേര്‍ഡ് മാറ്റുക: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "യൂസര്‍ നാമം (ഉപയോക്ത്രു നാമം)"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "നിര്‍ബന്ധം. 30 ഓ അതില്‍ കുറവോ ചിഹ്നങ്ങള്‍. അക്ഷരങ്ങള്‍, അക്കങ്ങള്‍, "
-"പിന്നെ @/./+/-/_എന്നിവയും മാത്രം."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "അക്ഷരങ്ങള്‍, അക്കങ്ങള്‍, പിന്നെ @/./+/-/_എന്നിവയും മാത്രം."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "പാസ് വേര്‍ഡ് ഉറപ്പാക്കല്‍"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "ആ പേരുള്ള ഒരു ഉപയോക്താവ് നിലവിലുണ്ട്."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "പാസ് വേര്‍ഡ് നല്കിയ കള്ളികള്‍ രണ്ടും തമ്മില്‍ സാമ്യമില്ല."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "ഈ അക്കൗണ്ട് മരവിപ്പിച്ചതാണ്."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "നിങ്ങളുടെ വെബ്-ബ്രൗസറിലെ കുക്കീസൊന്നും പ്രവര്‍ത്തിക്കുന്നില്ല. ഇതിലേക്ക് പ്രവേശിക്കാന്‍ അവ ആവശ്യമാണ്."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "ഇ-മെയില്‍"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "ആ ഇ-മെയിലുമായി ബന്ധപ്പെട്ട യൂസര് അക്കൗണ്ടൊന്നും നിലവിലില്ല. രജിസ്റ്റര്‍ ചെയ്തെന്നു തീര്‍ച്ചയാണോ?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "%s ലെ പാസ് വേര്‍ഡ് പുനസ്ഥാപിച്ചു."
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "പുതിയ പാസ് വേര്‍ഡ് ഉറപ്പാക്കല്‍"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "നിങ്ങളുടെ പഴയ പാസ് വേര്‍ഡ് തെറ്റായാണ് നല്കിയത്. തിരുത്തുക."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "പേര്"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "കോഡ്-നാമം"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "അനുമതി"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "അനുമതികള്‍"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "ഗ്രൂപ്പ്"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "ഗ്രൂപ്പുകള്‍"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "യൂസര്‍ നാമം (ഉപയോക്ത്രു നാമം)"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "നിര്‍ബന്ധം. 30 ഓ അതില്‍ കുറവോ ചിഹ്നങ്ങള്‍. അക്ഷരങ്ങള്‍, അക്കങ്ങള്‍, "
-"പിന്നെ @/./+/-/_എന്നിവയും മാത്രം."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "പേര് - ആദ്യഭാഗം"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "പേര് - അന്ത്യഭാഗം"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "ഇ-മെയില്‍ വിലാസം"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "പാസ് വേര്‍ഡ്"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr "'[algo]$[salt]$[hexdigest]' അല്ലെങ്കില്‍ <a href=\"password/\">പാസ് വേര്‍ഡ് "
-"മാറ്റാനുള്ള ഫോം</a> ഉപയോഗിക്കുക."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "സ്റ്റാഫ് പദവി"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "ഈ യൂസര്‍ക്ക് ഈ അഡ്മിന് സൈറ്റിലേക്ക് പ്രവേശിക്കാമോ എന്നു വ്യക്തമാക്കാന്‍"
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "സജീവം"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr "ഈ യൂസര്‍ സജീവമാണോയെന്ന് വ്യക്തമാക്കുന്നു. അക്കൗണ്ട് ഡിലീറ്റ് ചെയ്യുന്നതിനു പകരം ഇത് ഒഴിവാക്കുക."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "സൂപ്പര്‍-യൂസര്‍ പദവി"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "ഈ ഉപയോക്താവിന് എടുത്തു പറയാതെ തന്നെ എല്ലാ അനുമതികളും ലഭിക്കുന്നതാണെന്ന് വ്യക്തമാക്കുന്നു"
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "അവസാനമായി ലോഗിന്‍ ചെയ്തതു"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "ചേര്‍ന്ന തീയതി"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "ഈ ഉപയോക്താവിന് നേരിട്ട് ലഭിച്ചതു കൂടാതെ അവര്‍ അംഗമായ ഗ്രൂപ്പിന് ലഭിച്ച അനുമതികളും അനുഭവിക്കാം"
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "യൂസര്‍ (ഉപയോക്താവ്)നുള്ള അനുമതികള്‍"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "യൂസര്‍ (ഉപയോക്താവ്)"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "യൂസേര്‍സ് (ഉപയോക്താക്കള്‍)"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "സന്ദേശം"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "ലോഗ്-ഔട്ട് ചെയ്തു (പുറത്തിറങ്ങി)"
-
-#: contrib/auth/management/commands/createsuperuser.py:24
-#: core/validators.py:120 forms/fields.py:427
-msgid "Enter a valid e-mail address."
-msgstr "ശരിയായ ഇ-മെയില്‍ വിലാസം നല്കുക."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "ഉള്ളടക്കം"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr ""
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "അടയാളപ്പെടുത്തി"
-msgstr[1] "അടയാളപ്പെടുത്തി"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "തെരഞ്ഞെടുത്ത അഭിപ്രായങ്ങള്‍ അടയാളപ്പെടുത്തുക"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "അംഗീകരിച്ചു"
-msgstr[1] "അംഗീകരിച്ചു"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "തെരഞ്ഞെടുത്ത അഭിപ്രായങ്ങള്‍ അംഗീകരിക്കുക"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "നീക്കം ചെയ്തു"
-msgstr[1] "നീക്കം ചെയ്തു"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "തെരഞ്ഞെടുത്ത അഭിപ്രായങ്ങള്‍ നീക്കം ചെയ്യുക"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 അഭിപ്രായം വിജയകരമായി %(action)s."
-msgstr[1] "%(count)s അഭിപ്രായങ്ങള്‍ വിജയകരമായി %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s അഭിപ്രായങ്ങള്‍"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "%(site_name)s ലെ ഏറ്റവും പുതിയ അഭിപ്രായങ്ങള്‍"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "പേര്"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "ഇ-മെയില്‍ വിലാസം"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL(വെബ്-വിലാസം)"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "അഭിപ്രായം"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "ശ്ശ്ശ്! %s എന്ന വാക്ക് ഇവിടെ അനുവദനീയമല്ല."
-msgstr[1] "ശ്ശ്ശ്! %s എന്നീ വാക്കുകള്‍ ഇവിടെ അനുവദനീയമല്ല."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "ഈ കള്ളിയില്‍ എന്തെങ്കിലും രേഖപ്പെടുത്തിയാല്‍ നിങ്ങളുടെ അഭിപ്രായം സ്പാം ആയി കണക്കാക്കും"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "ഏതു തരം ഉള്ളടക്കം"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "വസ്തു ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "യൂസറുടെ പേര്"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "യൂസറുടെ ഇ-മെയില്‍ വിലാസം"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "യൂസറുടെ URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "അഭിപ്രായം"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "സമര്‍പ്പിച്ച തീയതി/സമയം"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP വിലാസം"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "പരസ്യമാണ്"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "അഭിപ്രായം സൈറ്റില്‍ നിന്നും ഫലപ്രദമായി നീക്കം ചെയ്യാന്‍ ഈ ബോക്സിലെ ടിക് ഒഴിവാക്കുക."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "നീക്കം ചെയ്തു."
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr "അഭിപ്രായം അനുചിതമെങ്കില്‍ ഈ ബോക്സ് ടിക് ചെയ്യുക. \"ഈ അഭിപ്രായം നീക്കം ചെയ്തു \" എന്ന സന്ദേശം"
-"ആയിരിക്കും പകരം കാണുക."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "അഭിപ്രായങ്ങള്‍"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "ഈ അഭിപ്രായം ഒരു അംഗീകൃത യൂസര്‍ രേഖപ്പെടുത്തിയതാണ്. അതിനാല്‍ പേര് വായിക്കാന്‍ മാത്രം."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr "ഈ അഭിപ്രായം ഒരു അംഗീകൃത യൂസര്‍ രേഖപ്പെടുത്തിയതാണ്. അതിനാല്‍ ഇ-മെയില്‍ വിലാസം വായിക്കാന്‍ മാത്രം."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(date)sന് %(user)s രേഖപ്പെടുത്തിയത്:\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "അടയാളം"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "തീയതി"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "അഭിപ്രായ അടയാളം"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "അഭിപ്രായ അടയാളങ്ങള്‍"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "അഭിപ്രായം അംഗീകരിക്കൂ"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "ശരിക്കും ഈ അഭിപ്രായം പരസ്യമാക്കണോ?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "അംഗീകരിക്കൂ"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "അംഗീകരിച്ചതിനു നന്ദി"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "നമ്മുടെ സൈറ്റിലെ ചര്‍ച്ചകളുടെ നിലവാരം ഉയര്‍ത്താന്‍ സമയം ചെലവഴിച്ചതിനു നന്ദി."
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "അഭിപ്രായം നീക്കം ചെയ്യൂ"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "ഈ അഭിപ്രായം ശരിക്കും നീക്കം ചെയ്യണോ?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "നീക്കം ചെയ്തതിനു നന്ദി"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "ഈ അഭിപ്രായം അടയാളപ്പെടുത്തൂ"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "ഈ അഭിപ്രായം ശരിക്കും അടയാളപ്പെടുത്തണോ?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "അടയാളം"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "അടയാളപ്പെടുത്തിയതിനു നന്ദി"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "രേഖപ്പെടുത്തൂ"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "അവലോകനം"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "അഭിപ്രായം രേഖപ്പെടുത്തിയതിനു നന്ദി"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "അഭിപ്രായത്തിനു നന്ദി"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "അഭിപ്രായം അവലോകനം ചെയ്യുക"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "ദയവായി താഴെ പറയുന്ന തെറ്റ് തിരുത്തുക"
-msgstr[1] "ദയവായി താഴെ പറയുന്ന തെറ്റുകള്‍ തിരുത്തുക"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "അഭിപ്രായം രേഖപ്പെടുത്തുക"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "അല്ലെങ്കില്‍ മാറ്റം വരുത്തുക."
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr ""
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "ഉള്ളടക്കം ഏതൊക്കെ തരം"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "ഉദാ: '/about/contact/'. ആദ്യവും അവസാനവും സ്ളാഷുകള്‍ നിര്‍ബന്ധം."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "ഇതില്‍ അക്ഷരങ്ങള്‍, അക്കങ്ങള്‍, അണ്ടര്‍സ്കോര്‍, വരകള്‍, സ്ളാഷുകള്‍ എന്നിവ മാത്രമേ പാടുള്ളൂ. "
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "ഉയര്‍ന്ന സൗകര്യങ്ങള്‍"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "ശീര്‍ഷകം"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "ഉള്ളടക്കം"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "അഭിപ്രായങ്ങള്‍ അനുവദിക്കുക"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "ടെമ്പ്ലേറ്റിന്റെ പേര്"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"ഉദാ: 'flatpages/contact_page.html'. ഇതു നല്കിയില്ലെങ്കില്‍, 'flatpages/default.html' എന്ന "
-"വിലാസം ഉപയോഗിക്കപ്പെടും."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "രജിസ്ട്രേഷന്‍ ആവശ്യമാണ്"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "ഇതു ടിക് ചെയ്താല്‍ പിന്നെ ലോഗ്-ഇന്‍ ചെയ്ത യൂസര്‍ക്കു മാത്രമേ ഈ പേജ് കാണാന്‍ കഴിയൂ."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "ഫ്ളാറ്റ് പേജ്"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "ഫ്ളാറ്റ് പേജുകള്‍"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr "ക്ഷമിക്കണം, താങ്കളുടെ ഫോം കാലഹരണപ്പെട്ടു കഴിഞ്ഞു. ദയവായി ഈ പേജിലെ ഫോം പൂരിപ്പിച്ച് തുടരുക."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "ബിന്ദു"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "ബഹുഭുജം"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "ബഹുബിന്ദു"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "ബഹു ബഹുഭുജം"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "ജ്യാമിതി ശേഖരം"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "ആം"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "ആം"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "ആം"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "ആം"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f മില്ല്യണ്‍ (ദശലക്ഷം)"
-msgstr[1] "%(value).1f മില്ല്യണ്‍ (ദശലക്ഷം)"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f ബില്ല്യണ്‍ (ശതകോടി)"
-msgstr[1] "%(value).1f ബില്ല്യണ്‍ (ശതകോടി)"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f ട്രില്ല്യണ്‍ (ലക്ഷം കോടി)"
-msgstr[1] "%(value).1f ട്രില്ല്യണ്‍ (ലക്ഷം കോടി)"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "ഒന്ന്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "രണ്ട്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "മൂന്ന്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "നാല്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "അഞ്ച്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "ആറ്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "ഏഴ്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "എട്ട്"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "ഒന്‍പത്"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "ഇന്ന്"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "നാളെ"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "ഇന്നലെ"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "പിന്‍-കോഡ് XXXXXXX എന്ന മാത്രുകയില്‍ നല്കുക."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "അലസ സന്ദേശം"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "പഴയ വിലാസം"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "ഇത് ഡൊമൈന്‍ നാമം ഉള്‍പ്പെടാത്ത ഒരു കേവലമാര്‍ഗം (വിലാസം) ആവണം. "
-"ഉദാ: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "പുതിയ വിലാസം"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "ഇതൊരു കേവല മാര്‍ഗമോ 'http://' എന്നു തുടങ്ങുന്ന പൂര്‍ണ്ണ വിലാസമോ (URL) ആവാം"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "വിലാസമാറ്റം"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "വിലാസമാറ്റങ്ങള്‍"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "സെഷന്‍ കീ"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "സെഷന്‍ വിവരം"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "കാലാവധി (തീയതി)"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "സെഷന്‍"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "സെഷനുകള്‍"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "ഡൊമൈന്‍ നാമം"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "പ്രദര്‍ശന നാമം"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "സൈറ്റുകള്‍"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "ശരിയായ മൂല്യം നല്കണം."
-
-#: core/validators.py:87 forms/fields.py:528
-msgid "Enter a valid URL."
-msgstr "ശരിയായ URL നല്കണം."
-
-#: core/validators.py:89 forms/fields.py:529
-msgid "This URL appears to be a broken link."
-msgstr "ഈ URL നിലവില്ലാത്ത വിലാസമാണ് കാണിക്കുന്നത്."
-
-#: core/validators.py:123 forms/fields.py:877
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "ശരിയായ സ്ളഗ് നല്കുക (അക്ഷരങ്ങള്‍, അക്കങ്ങള്‍, അണ്ടര്‍സ്കോര്‍, ഹൈഫന്‍ എന്നിവ മാത്രം ചേര്‍ന്നത്)."
-
-#: core/validators.py:126 forms/fields.py:870
-msgid "Enter a valid IPv4 address."
-msgstr "ശരിയായ IPv4 വിലാസം നല്കണം"
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "അക്കങ്ങള്‍ മാത്രം (കോമയിട്ടു വേര്‍തിരിച്ചത്)"
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "ഇത് %(limit_value)s ആവണം. (ഇപ്പോള്‍ %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:204 forms/fields.py:256
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "ഇത് %(limit_value)s-ഓ അതില്‍ കുറവോ ആവണം"
-
-#: core/validators.py:158 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "ഇത് %(limit_value)s-ഓ അതില്‍ കൂടുതലോ ആവണം"
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "ഇതിനു ഏറ്റവും കുറഞ്ഞത് %(limit_value)d അക്ഷരങ്ങള്‍ വേണം. (ഇപ്പോള്‍ "
-"%(show_value)d അക്ഷരങ്ങളുണ്ട്.)"
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "ഇതിനു പരമാവധി %(limit_value)d അക്ഷരങ്ങളേ ഉള്ളൂ എന്നു ഉറപ്പാക്കുക. (ഇപ്പോള്‍ "
-"%(show_value)d അക്ഷരങ്ങളുണ്ട്.)"
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(date_field)s %(lookup)s-നു %(field_name)s ആവര്‍ത്തിക്കാന്‍ പാടില്ല."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(field_label)s-ഓടു കൂടിയ %(model_name)s നിലവിലുണ്ട്."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "%r അനുയോജ്യമല്ല."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "ഈ കള്ളി ഒഴിച്ചിടരുത്."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "ഈ കള്ളി ഒഴിച്ചിടരുത്."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr ""
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "പൂര്‍ണ്ണസംഖ്യ"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "പൂര്‍ണ്ണസംഖ്യ മാത്രം"
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "ശരിയോ തെറ്റോ എന്നു മാത്രം"
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "ശരിയോ തെറ്റോ എന്നു മാത്രം"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr ""
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "കോമയിട്ട് വേര്‍തിരിച്ച സംഖ്യകള്‍"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "തീയതി (സമയം വേണ്ട)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "ശരിയായ തീയതി YYYY-MM-DD എന്ന മാത്രുകയില്‍ നല്കണം."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "തെറ്റായ തീയതി: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "ശരിയായ തീയതി/സമയം YYYY-MM-DD HH:MM[:ss[.uuuuuu]]എന്ന മാത്രുകയില്‍ നല്കണം."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "തീയതി (സമയത്തോടൊപ്പം)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "ഈ വില ദശാംശമാവണം."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "ദശാംശസംഖ്യ"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "ഇ-മെയില്‍ വിലാസം"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "ഫയല്‍ സ്ഥാനം"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "ഈ വില ദശാംശമാവണം."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "ദശാംശസംഖ്യ"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "8 ബൈറ്റ് പൂര്‍ണസംഖ്യ."
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "ഈ മൂല്യം None, True, False എന്നിവയില്‍ ഏതെങ്കിലും ഒന്നാവണം"
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "ശരിയോ തെറ്റോ എന്നു മാത്രം"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "ടെക്സ്റ്റ്"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "സമയം"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "ശരിയായ സമയം HH:MM[:ss[.uuuuuu]] എന്ന മാത്രുകയില്‍ നല്കണം."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr ""
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr ""
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr ""
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr ""
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr ""
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "\"Control\" എന്ന കീ അമര്‍ത്തിപ്പിടിക്കുക. (Macലാണെങ്കില്‍ \"Command\")."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "ദയവായി ശരിയായ %(self)s IDകള്‍ നല്കുക. %(value)r അനുയോജ്യമല്ല."
-msgstr[1] "ദയവായി ശരിയായ %(self)s IDകള്‍ നല്കുക. %(value)r അനുയോജ്യമല്ല."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "ഈ കള്ളി നിര്‍ബന്ധമാണ്."
-
-#: forms/fields.py:203
-msgid "Enter a whole number."
-msgstr "ഒരു പൂര്‍ണസംഖ്യ നല്കുക."
-
-#: forms/fields.py:234 forms/fields.py:255
-msgid "Enter a number."
-msgstr "ഒരു സംഖ്യ നല്കുക."
-
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "മൊത്തം %s ലേറെ അക്കങ്ങള്‍ ഇല്ലെന്ന് ഉറപ്പു വരുത്തുക."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "%s ലേറെ ദശാംശസ്ഥാനങ്ങള്‍ ഇല്ലെന്ന് ഉറപ്പു വരുത്തുക."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "ദശാംശബിന്ദുവിനു മുമ്പ് %sലേറെ അക്കങ്ങള്‍ ഇല്ലെന്നു ഉറപ്പു വരുത്തുക."
-
-#: forms/fields.py:322 forms/fields.py:837
-msgid "Enter a valid date."
-msgstr "ശരിയായ തീയതി നല്കുക."
-
-#: forms/fields.py:350 forms/fields.py:838
-msgid "Enter a valid time."
-msgstr "ശരിയായ സമയം നല്കുക."
-
-#: forms/fields.py:376
-msgid "Enter a valid date/time."
-msgstr "ശരിയായ തീയതിയും സമയവും നല്കുക."
-
-#: forms/fields.py:434
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "ഫയലൊന്നും ലഭിച്ചില്ല. ഫോമിലെ എന്‍-കോഡിംഗ് പരിശോധിക്കുക."
-
-#: forms/fields.py:435
-msgid "No file was submitted."
-msgstr "ഫയലൊന്നും ലഭിച്ചില്ല."
-
-#: forms/fields.py:436
-msgid "The submitted file is empty."
-msgstr "ലഭിച്ച ഫയല്‍ ശൂന്യമാണ്."
-
-#: forms/fields.py:437
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "ഈ ഫയലിന്റെ പേര് പരമാവധി %(max)d അക്ഷരങ്ങളുള്ളതായിരിക്കണം. "
-"(ഇപ്പോള്‍ %(length)d അക്ഷരങ്ങള്‍ ഉണ്ട്)."
-
-#: forms/fields.py:472
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "ശരിയായ ചിത്രം അപ് ലോഡ് ചെയ്യുക. നിങ്ങള്‍ നല്കിയ ഫയല്‍ ഒന്നുകില്‍ ഒരു ചിത്രമല്ല, "
-"അല്ലെങ്കില്‍ വികലമാണ്."
-
-#: forms/fields.py:595 forms/fields.py:670
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "യോഗ്യമായത് തെരഞ്ഞെടുക്കുക. %(value)s ലഭ്യമായവയില്‍ ഉള്‍പ്പെടുന്നില്ല."
-
-#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "മൂല്യങ്ങളുടെ പട്ടിക(ലിസ്റ്റ്) നല്കുക."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "ക്രമം"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "%(field)s-നായി നല്കുന്ന വിവരം ആവര്‍ത്തിച്ചത് ദയവായി തിരുത്തുക."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "%(field)s-നായി നല്കുന്ന വിവരം ആവര്‍ത്തിക്കാന്‍ പാടില്ല. ദയവായി തിരുത്തുക."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr "%(date_field)s ലെ %(lookup)s നു വേണ്ടി %(field_name)s നു നല്കുന്ന വിവരം "
-"ആവര്‍ത്തിക്കാന്‍ പാടില്ല. ദയവായി തിരുത്തുക."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "താഴെ കൊടുത്തവയില്‍ ആവര്‍ത്തനം ഒഴിവാക്കുക."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "യോഗ്യമായത് തെരഞ്ഞെടുക്കുക. നിങ്ങള്‍ നല്കിയത് ലഭ്യമായവയില്‍ ഉള്‍പ്പെടുന്നില്ല."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "യോഗ്യമായത് തെരഞ്ഞെടുക്കുക. %s തന്നിരിക്കുന്നവയില്‍ ഉള്‍പ്പെടുന്നില്ല."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" പ്രാഥമിക കീ ആവാന്‍ അനുയോജ്യമായ മൂല്യമല്ല."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "ഉണ്ട്, ഇല്ല, ഉണ്ടാവാം"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr ""
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr ""
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "അര്‍ധരാത്രി"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "ഉച്ച"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "തിങ്കള്‍"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "ചൊവ്വ"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "ബുധന്‍"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "വ്യാഴം"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "വെള്ളി"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "ശനി"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "ഞായര്‍"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "തിങ്കള്‍"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "ചൊവ്വ"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "ബുധന്‍"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "വ്യാഴം"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "വെള്ളി"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "ശനി"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "ഞായര്‍"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "ജനുവരി"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "ഫെബ്രുവരി"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "മാര്‍ച്ച്"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "ഏപ്രില്‍"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "മേയ്"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "ജൂണ്‍"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "ജൂലൈ"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "ആഗസ്ത്"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "സെപ്തംബര്‍"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "ഒക്ടോബര്‍"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "നവംബര്‍"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "ഡിസംബര്‍"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "ജനു."
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "ഫെബ്രു."
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "മാര്‍ച്ച്"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "ഏപ്രില്‍"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "മേയ്"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "ജൂണ്‍"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "ജൂലൈ"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ആഗസ്ത്"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "സെപ്ടം."
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "ഒക്ടോ."
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "നവം."
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "ഡിസം."
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "ജനു."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "ഫെബ്രു."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ആഗസ്ത്"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "സെപ്ടം."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "ഒക്ടോ."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "നവം."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "ഡിസം."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "അഥവാ"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "വര്‍ഷം"
-msgstr[1] "വര്‍ഷങ്ങള്‍"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "മാസം"
-msgstr[1] "മാസങ്ങള്‍"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "ആഴ്ച്ച"
-msgstr[1] "ആഴ്ച്ചകള്‍"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "ദിവസം"
-msgstr[1] "ദിവസങ്ങള്‍"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "മണിക്കൂര്‍"
-msgstr[1] "മണിക്കൂറുകള്‍"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "മിനുട്ട്"
-msgstr[1] "മിനുട്ടുകള്‍"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "മിനുട്ടുകള്‍"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr ""
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr ""
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s നെ സ്രുഷ്ടിച്ചു."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s നെ മെച്ചപ്പെടുത്തി."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s ഡിലീറ്റ് ചെയ്യപ്പെട്ടു."
diff --git a/parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 644d8bf..0000000
--- a/parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.po
deleted file mode 100644
index aedc919..0000000
--- a/parts/django/django/conf/locale/ml/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,156 +0,0 @@
-# Translation of Django Js files to malayalam.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Rajeesh Nair <rajeeshrnair@gmail.com>, 2010.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django SVN\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-28 15:32+0530\n"
-"PO-Revision-Date: 2010-05-28 15:45+0530\n"
-"Last-Translator: Rajeesh Nair <rajeeshrnair@gmail.com>\n"
-"Language-Team: Malayalam <ml@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Malayalam\n"
-"X-Poedit-Country: INDIA\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "ലഭ്യമായ %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "എല്ലാം തെരഞ്ഞെടുക്കുക"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "പുതിയത് ചേര്‍ക്കൂ"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "നീക്കം ചെയ്യൂ"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "തെരഞ്ഞെടുത്ത %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "ഉചിതമായത് തെരഞ്ഞെടുത്ത ശേഷം ക്ളിക് ചെയ്യൂ"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "എല്ലാം ക്ളിയര്‍ ചെയ്യൂ"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(cnt)sല്‍ %(sel)s തെരഞ്ഞെടുത്തു"
-msgstr[1] "%(cnt)sല്‍ %(sel)s എണ്ണം തെരഞ്ഞെടുത്തു"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr "വരുത്തിയ മാറ്റങ്ങള്‍ സേവ് ചെയ്തിട്ടില്ല. ഒരു ആക്ഷന്‍ പ്രയോഗിച്ചാല്‍ സേവ് ചെയ്യാത്ത "
-"മാറ്റങ്ങളെല്ലാം നഷ്ടപ്പെടും."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"നിങ്ങള്‍ ഒരു ആക്ഷന്‍ തെരഞ്ഞെടുത്തിട്ടുണ്ട്. പക്ഷേ, കളങ്ങളിലെ മാറ്റങ്ങള്‍ ഇനിയും സേവ് ചെയ്യാനുണ്ട്. ആദ്യം സേവ്"
-"ചെയ്യാനായി OK ക്ലിക് ചെയ്യുക. അതിനു ശേഷം ആക്ഷന്‍ ഒന്നു കൂടി പ്രയോഗിക്കേണ്ടി വരും."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"നിങ്ങള്‍ ഒരു ആക്ഷന്‍ തെരഞ്ഞെടുത്തിട്ടുണ്ട്. കളങ്ങളില്‍ സേവ് ചെയ്യാത്ത മാറ്റങ്ങള്‍ ഇല്ല. നിങ്ങള്‍"
-"സേവ് ബട്ടണ്‍ തന്നെയാണോ അതോ ഗോ ബട്ടണാണോ ഉദ്ദേശിച്ചത്."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr "ജനുവരി ഫെബൃവരി മാര്‍ച്ച് ഏപ്രില്‍ മെയ് ജൂണ്‍ ജൂലൈ ആഗസ്ത് സെപ്തംബര്‍ ഒക്ടോബര്‍ നവംബര്‍ ഡിസംബര്‍"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "ഞാ തി ചൊ ബു വ്യാ വെ ശ"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "കാണട്ടെ"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "മറയട്ടെ"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "ഞായര്‍ തിങ്കള്‍ ചൊവ്വ ബുധന്‍ വ്യാഴം വെള്ളി ശനി"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Now"
-msgstr "ഇപ്പോള്‍"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:52
-msgid "Clock"
-msgstr "ഘടികാരം (ക്ലോക്ക്)"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:79
-msgid "Choose a time"
-msgstr "സമയം തെരഞ്ഞെടുക്കൂ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Midnight"
-msgstr "അര്‍ധരാത്രി"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "Noon"
-msgstr "ഉച്ച"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:90
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:187
-msgid "Cancel"
-msgstr "റദ്ദാക്കൂ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:181
-msgid "Today"
-msgstr "ഇന്ന്"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:136
-msgid "Calendar"
-msgstr "കലണ്ടര്‍"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Yesterday"
-msgstr "ഇന്നലെ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Tomorrow"
-msgstr "നാളെ"
diff --git a/parts/django/django/conf/locale/ml/__init__.py b/parts/django/django/conf/locale/ml/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ml/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ml/formats.py b/parts/django/django/conf/locale/ml/formats.py
deleted file mode 100644
index 141f705..0000000
--- a/parts/django/django/conf/locale/ml/formats.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'N j, Y'
-TIME_FORMAT = 'P'
-DATETIME_FORMAT = 'N j, Y, P'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'F j'
-SHORT_DATE_FORMAT = 'm/d/Y'
-SHORT_DATETIME_FORMAT = 'm/d/Y P'
-FIRST_DAY_OF_WEEK = 0 # Sunday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
- # '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
- # '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- # '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
- # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
- '%m/%d/%Y %H:%M', # '10/25/2006 14:30'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
-)
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-NUMBER_GROUPING = 3
-
diff --git a/parts/django/django/conf/locale/mn/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/mn/LC_MESSAGES/django.mo
deleted file mode 100644
index 64ba6cc..0000000
--- a/parts/django/django/conf/locale/mn/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/mn/LC_MESSAGES/django.po b/parts/django/django/conf/locale/mn/LC_MESSAGES/django.po
deleted file mode 100644
index 8bddb0e..0000000
--- a/parts/django/django/conf/locale/mn/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5243 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-# Urangua <urangua@adsolux.com>, 2010, 2002, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-04 19:00+0800\n"
-"PO-Revision-Date: 2010-03-11 17:23+0800\n"
-"Last-Translator: Urangua <urangua@adsolux.com>\n"
-"Language-Team: mn <translate@opensource.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Араб"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Болгар"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Бенгал"
-
-#: conf/global_settings.py:47
-#, fuzzy
-msgid "Bosnian"
-msgstr "Эстони"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Каталан"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Чех"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Уэльс"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Дани"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Герман"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Грек"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Англи"
-
-#: conf/global_settings.py:55
-#, fuzzy
-msgid "British English"
-msgstr "Англи"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Испани"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Аргентинийн Испани"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Эстони"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Баск"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Перс"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Финлянд"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Франц"
-
-#: conf/global_settings.py:63
-#, fuzzy
-msgid "Frisian"
-msgstr "Фраисланд"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Ирланд"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Галици"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Еврэй"
-
-#: conf/global_settings.py:67
-#, fuzzy
-msgid "Hindi"
-msgstr "Хайланд"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Хорват"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Унгар"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "Исланд"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "Итали"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "Япон"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "Гүрж"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "Кхмер"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "Каннада"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "Солонгос"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "Литва"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "Латви"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "Македон"
-
-#: conf/global_settings.py:80
-#, fuzzy
-msgid "Mongolian"
-msgstr "Македон"
-
-#: conf/global_settings.py:81
-msgid "Dutch"
-msgstr "Голланд"
-
-#: conf/global_settings.py:82
-msgid "Norwegian"
-msgstr "Норвеги"
-
-#: conf/global_settings.py:83
-#, fuzzy
-msgid "Norwegian Bokmal"
-msgstr "Норвеги"
-
-#: conf/global_settings.py:84
-#, fuzzy
-msgid "Norwegian Nynorsk"
-msgstr "Норвеги"
-
-#: conf/global_settings.py:85
-msgid "Polish"
-msgstr "Польш"
-
-#: conf/global_settings.py:86
-#, fuzzy
-msgid "Portuguese"
-msgstr "Португали"
-
-#: conf/global_settings.py:87
-msgid "Brazilian Portuguese"
-msgstr "Бразилийн Португали"
-
-#: conf/global_settings.py:88
-msgid "Romanian"
-msgstr "Румын"
-
-#: conf/global_settings.py:89
-msgid "Russian"
-msgstr "Орос"
-
-#: conf/global_settings.py:90
-msgid "Slovak"
-msgstr "Словак"
-
-#: conf/global_settings.py:91
-msgid "Slovenian"
-msgstr "Словен"
-
-#: conf/global_settings.py:92
-#, fuzzy
-msgid "Albanian"
-msgstr "Алакант"
-
-#: conf/global_settings.py:93
-msgid "Serbian"
-msgstr "Серби"
-
-#: conf/global_settings.py:94
-#, fuzzy
-msgid "Serbian Latin"
-msgstr "Серби"
-
-#: conf/global_settings.py:95
-msgid "Swedish"
-msgstr "Щвед"
-
-#: conf/global_settings.py:96
-msgid "Tamil"
-msgstr "Тамил"
-
-#: conf/global_settings.py:97
-msgid "Telugu"
-msgstr "Тэлүгү"
-
-#: conf/global_settings.py:98
-#, fuzzy
-msgid "Thai"
-msgstr "Тамил"
-
-#: conf/global_settings.py:99
-msgid "Turkish"
-msgstr "Турк"
-
-#: conf/global_settings.py:100
-msgid "Ukrainian"
-msgstr "Украйн"
-
-#: conf/global_settings.py:101
-#, fuzzy
-msgid "Vietnamese"
-msgstr "Венн"
-
-#: conf/global_settings.py:102
-msgid "Simplified Chinese"
-msgstr "Хятад (хялбаршуулсан) "
-
-#: conf/global_settings.py:103
-msgid "Traditional Chinese"
-msgstr "Хятад (уламжлалт)"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr ""
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1129
-msgid "Are you sure?"
-msgstr "Итгэлтэй байна уу?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>-аар %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Бүх "
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Өдөр харгалзахгүй"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Өнөөдөр"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Өнгөрсөн долоо хоног"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Энэ сар"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Энэ жил"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Тийм"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Үгүй"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Тодорхойгүй"
-
-#: contrib/admin/helpers.py:20
-#, fuzzy
-msgid "Action:"
-msgstr "Үйлдэл"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "үйлдлийн хугацаа"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr ""
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr ""
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr ""
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr ""
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr ""
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr ""
-
-#: contrib/admin/options.py:142 contrib/admin/options.py:157
-msgid "None"
-msgstr ""
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr "Өөрчлөгдсөн %s."
-
-#: contrib/admin/options.py:563 contrib/admin/options.py:573
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:573
-msgid "and"
-msgstr "ба"
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Нэмэгдсэн %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\"-ийн өөрчлөгдсөн %(list)s"
-
-#: contrib/admin/options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Устгасан %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:581
-msgid "No fields changed."
-msgstr "Өөрчилсөн зүйл байхгүй байна."
-
-#: contrib/admin/options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr " %(name)s \"%(obj)s\" амжилттай нэмэгдлээ."
-
-#: contrib/admin/options.py:651 contrib/admin/options.py:684
-msgid "You may edit it again below."
-msgstr "Доорх хэсэгт үүнийг ахин засварлах боломжтой."
-
-#: contrib/admin/options.py:661 contrib/admin/options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr "Доорх хэсэгт өөр %s нэмэх боломжтой."
-
-#: contrib/admin/options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr " %(name)s \"%(obj)s\" амжилттай өөрчлөгдлөө. "
-
-#: contrib/admin/options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" амжилттай нэмэгдлээ. Доорх хэсэгт үүнийг ахин засварлах "
-"боломжтой."
-
-#: contrib/admin/options.py:744 contrib/admin/options.py:1001
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-
-#: contrib/admin/options.py:763
-#, fuzzy
-msgid "No action selected."
-msgstr "үйлдлийн хугацаа"
-
-#: contrib/admin/options.py:844
-#, python-format
-msgid "Add %s"
-msgstr "%s-ийг нэмэх"
-
-#: contrib/admin/options.py:870 contrib/admin/options.py:1109
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-
-#: contrib/admin/options.py:935
-#, python-format
-msgid "Change %s"
-msgstr "%s-ийг өөрчлөх"
-
-#: contrib/admin/options.py:981
-msgid "Database error"
-msgstr "Өгөгдлийн сангийн алдаа"
-
-#: contrib/admin/options.py:1043
-#, fuzzy, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] " %(name)s \"%(obj)s\" амжилттай өөрчлөгдлөө. "
-msgstr[1] " %(name)s \"%(obj)s\" амжилттай өөрчлөгдлөө. "
-
-#: contrib/admin/options.py:1070
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/options.py:1075
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr ""
-
-#: contrib/admin/options.py:1122
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr " %(name)s \"%(obj)s\" амжилттай устгагдлаа."
-
-#: contrib/admin/options.py:1159
-#, python-format
-msgid "Change history: %s"
-msgstr "Өөрчлөлтийн түүх: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Хэрэглэгчийн нэр, нууц үгээ зөв оруулна уу. Том жижиг үсгийн ялгааг гаргах "
-"хэрэгтэй."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Орсон хуудас тань хүчингүй болсон тул ахин нэвтрэнэ үү."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Та хөтчөө cookies-ийг ажиллуулахаар тохируулаагүй юм шиг байна. Cookies-ийг "
-"ажиллахаар болгоод, энэ хуудсыг ахин ачааалж үзнэ үү."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Хэрэглэгчийн нэрэнд '@' тэмдэгтийг оруулах боломжгүй."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Цахим шуудангийн хаяг хэрэглэгчийн нэр биш. Оронд нь '%s' -ийг оруулна уу."
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Сайтын удирдлага"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Нэвтрэх"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "%s удирдлага"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Огноо:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Цаг:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Одоогоор:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Өөрчлөлт:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Хайх"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Ахиад нэмэх:"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Хуудас олдсонгүй."
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Уучлаарай, хандахыг хүссэн хуудас тань олдсонгүй."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Нүүр"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Серверийн алдаа"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Серверийн алдаа (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Серверийн алдаа <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Алдаа гарсан байна. Энэ талаар цахим шуудангаар дамжуулан сайтын удирдлагад "
-"мэдэгдэж нэн даруй засах хэрэгтэй. Хүлээцтэй хандсанд баярлалаа."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Очих"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr ""
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Тавтай морилно уу"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Баримтжуулалт"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Нууц үг өөрчлөх"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Гарах"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Жанго сайтын удирдлага"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Жанго удирдлага"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Нэмэх"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Түүх"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Сайтаас харах"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Доорх алдааг засна уу."
-msgstr[1] "Доорх алдаануудыг засна уу."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s нэмэх"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Шүүлтүүр"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Устгах"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"%(object_name)s '%(escaped_object)s'-ийг устгавал холбогдох объект нь устах "
-"ч бүртгэл тань дараах төрлийн объектуудийг устгах зөвшөөрөлгүй байна:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Та %(object_name)s \"%(escaped_object)s\"-ийг устгахдаа итгэлтэй байна уу? "
-"Үүнийг устгавал дараах холбогдох зүйлс нь бүгд устана:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Тийм, итгэлтэй байна."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-#, fuzzy
-msgid "Delete multiple objects"
-msgstr "Устгасан %(name)s \"%(object)s\"."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, fuzzy, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"%(object_name)s '%(escaped_object)s'-ийг устгавал холбогдох объект нь устах "
-"ч бүртгэл тань дараах төрлийн объектуудийг устгах зөвшөөрөлгүй байна:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, fuzzy, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Та %(object_name)s \"%(escaped_object)s\"-ийг устгахдаа итгэлтэй байна уу? "
-"Үүнийг устгавал дараах холбогдох зүйлс нь бүгд устана:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s -ээр"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s програмд загварууд байна."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Өөрчлөх"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Та ямар нэг зүйл засварлах зөвшөөрөлгүй байна."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Сүүлд хийсэн үйлдлүүд"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Миний үйлдлүүд"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Болохгүй байна"
-
-#: contrib/admin/templates/admin/index.html:72
-#, fuzzy
-msgid "Unknown content"
-msgstr "Тодорхойгүй"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Өгөгдлийн сангийн ямар нэг зүйл буруу суугдсан байна. Өгөгдлийн сангийн "
-"зохих хүснэгт үүсгэгдсэн эсэх, өгөгдлийн санг зохих хэрэглэгч унших "
-"боломжтой байгаа эсэхийг шалгаарай."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Хэрэглэгчийн нэр:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Нууц үг:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Огноо/хугацаа"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Хэрэглэгч"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Үйлдэл"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Уг объектэд өөрчлөлтийн түүх байхгүй байна. Магадгүй үүнийг уг удирдлагын "
-"сайтаар дамжуулан нэмээгүй байх."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Бүгдийг харуулах"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Хадгалах"
-
-#: contrib/admin/templates/admin/search_form.html:8
-#, fuzzy
-msgid "Search"
-msgstr "3-р сар"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 илэрц"
-msgstr[1] "%(counter)s илэрц"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "Нийт %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Шинээр хадгалах"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Хадгалаад өөрийг нэмэх"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Хадгалаад нэмж засах"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Эхлээд хэрэглэгчийн нэр нууц үгээ оруулна уу. Ингэснээр та хэрэглэгчийн "
-"сонголтыг нэмж засварлах боломжтой болно. "
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "<strong>%(username)s</strong>.хэрэглэгчид шинэ нууц үг оруулна уу."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Нууц үг "
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Нууц үг (ахиад)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Батлахын тулд дээрх нууц үгээ ахин хийнэ үү."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, fuzzy, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "%(verbose_name)s устлаа."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-#, fuzzy
-msgid "Remove"
-msgstr "устлаа"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Устгах уу?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Манай вэб сайтыг ашигласанд баярлалаа."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Ахин нэвтрэх "
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Нууц үгийн өөрчлөлт"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Нууц үгийн өөрчлөлт амжилттай"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Нууц үг тань өөрчлөгдлөө."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Аюулгүй байдлын үүднээс хуучин нууц үгээ оруулаад шинэ нууц үгээ хоёр удаа "
-"хийнэ үү. Ингэснээр нууц үгээ зөв бичиж байгаа эсэхийг тань шалгах юм."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Хуучин нууц үг"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Шинэ нууц үг"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Нууц үгээ солих"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Нууц үг авах"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Нууц үг авах явц дууслаа"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Та нууц үгтэй боллоо. Одоо бүртгэлд нэвтрэх боломжтой."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Нууц үг авахаа баталгаажуулах"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Шинэ нууц үг оруулах"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Шинэ нууц үгээ хоёр удаа оруулна уу. Ингэснээр нууц үгээ зөв бичиж байгаа "
-"эсэхийг тань шалгах юм. "
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Шинэ нууц үг:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Нууц үгээ батлах:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Нууц үг авах амжилтгүй"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Нууц үг авах холбоос болохгүй байна. Үүнийг аль хэдийнэ хэрэглэснээс болсон "
-"байж болзошгүй. Шинэ нууц үг авахаар хүсэлт гаргана уу. "
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Нууц үг авах амжилттай"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Таны оруулсан цахим шуудангийн хаягаар нууц үг авах зааварчилгааг илгээлээ. "
-"Энэ зааварчилгаа танд шууд очих болно. "
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Та нууц үг авахаар хүсэлт гаргасан тул уг цахим шууданг илгээлээ."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "%(site_name)s гэсэн хэрэглэгчийн бүртгэлд "
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Дараах хуудас руу орон шинэ нууц үг сонгоно уу:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Мартсан тохиолдолд хийх хэрэглэгчийн нэр:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s баг"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Нууц үгээ мартчихсан уу? Доорх хэсэгт цахим шуудангийн хаягаа оруулвал бид "
-"хаягаар тань шинийг авах зааварчилгаа явуулах болно."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Цахим шуудангийн хаяг:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Нууц үгээ шинэчлэх"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Бүх огноо"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "%s-ийг сонго"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "%s-ийг өөрчлөхөөр сонго"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "сайт"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "загвар"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "шошго:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "шүүлтүүр:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "харах:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "%r програм олдсонгүй"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr " %(app_label)r програмд %(model_name)r загвар олдсонгүй"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "холбогдох `%(app_label)s.%(data_type)s`объект"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "загвар:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "холбогдох `%(app_label)s.%(object_name)s` объектууд"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "бүх %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%s-ийн тоо"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr " %s объектийн нөхөх хэсгүүд"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s нь url хэлбэрийн объект биш байна"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Bookmarklet суулгахын тулд холбоосыг bookmark-ийн\n"
-" хэрэгслийн мөрт аваачих буюу холбоосон дээр хулганы баруун\n"
-" товчлуураар дарж bookmark-даа нэмнэ. Ингэснээр та сайтын аль ч\n"
-" хуудаснаас bookmarklet-ээ сонгох боломжтой болно. Зарим\n"
-" bookmarklet-ийн хувьд та \"дотоод\" гэж тодорхойлогдсон компьютерээс\n"
-" сайт руу орох шаардлагатай болдог (компьютер тань \"дотоод\" мөн\n"
-" эсэхийг мэдэхгүй байгаа бол системийн удирдлагаасаа асууна уу).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Энэ хуудасны баримтжуулалт"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Таныг ямар ч хамаагүй хуудаснаас тухайн хуудсыг гаргаж байгаа "
-"баримтжуулалтанд аваачна."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Объектийн ID-ийг харуулах"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Нэг объект харуулж буй хуудаснуудын агуулгын төрөл болоод давтагдахгүй ID-"
-"ийг харуулна."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Энэ объектийг засварлах (одоо хэрэглэж буй цонх)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Нэг объект харуулж буй хуудаснуудын удирдлагын хуудсанд аваачна."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Энэ объектийг засварлах (шинэ цонх)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Дээрхийн нэгэн адил ч удирдлагын хуудсыг шинэ цонхонд нээнэ."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Хувийн мэдээлэл"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Зөвшөөрөл"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Чухал огноо"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Бүлгүүд"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Нууц үг амжилттай өөрчлөгдлөө."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Нууц үг өөрчлөх: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Хэрэглэгчийн нэр"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-#, fuzzy
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Зайлшгүй. 30 буюу түүнээс цөөн тэмдэгт. Зөвхөн стандарт тэмдэгт хэрэглэнэ "
-"(үсэг, тоо, нэмэлт тэмдэг)"
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-#, fuzzy
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Энэ нь зөвхөн үсэг, тоо, нэмэлт тэмдэгүүдийг л агуулсан байх хэрэгтэй."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Нууц үгийн баталгаа"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Ийм хэрэглэгчийн нэртэй хэрэглэгч өмнө нь бүртгүүлсэн байна."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Хоёр нууц үг зөрж байна."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Энэ бүртгэл идэвхгүй байна."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Та вэб хөтчөө cookie ажиллахаар тохируулаагүй юм шиг байна. Нэвтрэхэд cookie "
-"шаардлагатай байдаг."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Цахим шуудан"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Цахим шуудангийн энэ хаягт хэрэглэгчийн бүртгэл байхгүй байна. Та "
-"бүртгүүлсэн гэдэгтээ итгэлтэй байна уу?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Нууц үг %s дээр хийгдсэн"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Шинэ нууц үгийн баталгаа"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Хуучин нууц үгээ буруу оруулсан байна. Ахин оруулна уу."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "нэр"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "Код"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "зөвшөөрөл"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "зөвшөөрлүүд"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "бүлэг "
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "бүлгүүд"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "хэрэглэгчийн нэр"
-
-#: contrib/auth/models.py:196
-#, fuzzy
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Зайлшгүй. 30 буюу түүнээс цөөн тэмдэгт. Зөвхөн стандарт тэмдэгт хэрэглэнэ "
-"(үсэг, тоо, нэмэлт тэмдэг)"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "нэр"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "овог"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "цахим шуудангийн хаяг"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "нууц үг"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Нууц үгийнхээ хэлбэр-ийг өөрчлөхдөө '[algo]$[salt]$[hexdigest]' буюу <a "
-"href=\"password/\">хэрэглэнэ үү</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "Хэрэглэгчдийн төлөв"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Уг удирдлагын сайт руу хэрэглэгч нэвтрэх боломжтой эсэхийг тодорхойлно."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "идэвхтэй"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Энэ хэрэглэгчийг идэвхтэй болгох эсэхийг тодорхойлно. Бүртгэлийг нь устгахын "
-"оронд сонгохгүй байхад л хангалттай."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "Удирдлагын төлөв"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "Энэ хэрэглэгчид бүх зөвшөөрөл байгааг ил тод харуулалгүй тодорхойлно. "
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "сүүлд нэвтэрсэн"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "бүртгүүлсэн огноо"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Энэ хэрэглэгч зөвшөөрлийг гар ажиллагаагаар авахаас гадна өөрийн байгаа "
-"бүлэг бүртээ зөвшөөрөл олгуулна."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "хэрэглэгчийн зөвшөөрөл"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "хэрэглэгч "
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "хэрэглэгчид"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "мэдээлэл"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Гарсан"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Хүчинтэй цахим шуудангийн хаяг оруул"
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Агуулга"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Мета өгөгдөл"
-
-#: contrib/comments/admin.py:40
-#, fuzzy
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "өөрчлөлтгүй хуудас"
-msgstr[1] "өөрчлөлтгүй хуудас"
-
-#: contrib/comments/admin.py:41
-#, fuzzy
-msgid "Flag selected comments"
-msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/admin.py:46
-#, fuzzy
-msgid "Approve selected comments"
-msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
-
-#: contrib/comments/admin.py:50
-#, fuzzy
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "устлаа"
-msgstr[1] "устлаа"
-
-#: contrib/comments/admin.py:51
-#, fuzzy
-msgid "Remove selected comments"
-msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/feeds.py:13
-#, fuzzy, python-format
-msgid "%(site_name)s comments"
-msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
-
-#: contrib/comments/feeds.py:23
-#, fuzzy, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "%(site_name)s гэсэн хэрэглэгчийн бүртгэлд "
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Нэр"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Цахим шуудангийн хаяг"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Санал сэтгэгдэл"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Амаа мэдээрэй! %s гэсэн үг оруулах хориотой."
-msgstr[1] "Амаа мэдээрэй! %s гэсэн үг оруулах хориотой."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Та энэ хэсэгт ямар нэг зүйл оруулбал санал сэтгэгдэлийг тань спам гэж үзэх "
-"болно."
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "агуулгын төрөл"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "объектийн ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "хэрэглэгчийн нэр"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "хэрэглэгчийн цахим шуудангийн хаяг"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "хэрэглэгчийн URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "санал сэтгэгдэл "
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "оруулсан огноо/цаг"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP хаяг"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "нийтийн"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Сайтаас санал сэтгэгдлийг байнга устгахын тулд энэ хайрцагны өмнөх чагтыг "
-"авна уу."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "устлаа"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Ирсэн санал сэтгэгдэл зүй зохисгүй бол энэ хайрцгийг чагтла. Ингэснээр "
-"тухайн санал сэтгэгдлийн оронд \"Энэ санал сэтгэгдлийг устгалаа\" гэсэн "
-"бичиг гарч ирнэ."
-
-#: contrib/comments/models.py:77
-#, fuzzy
-msgid "comments"
-msgstr "санал сэтгэгдэл "
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Энэ санал сэтгэгдлийг баталгаажсан хэрэглэгч оруулсан учир зөвхөн нэрийг нь "
-"харж болно."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Энэ санал сэтгэгдлийг баталгаажсан хэрэглэгч оруулсан учир зөвхөн цахим "
-"шууданг нь харж болно."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(date)s-д %(user)s дараах санал сэтгэгдлийг үлдээжээ\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-#, fuzzy
-msgid "flag"
-msgstr "өөрчлөлтгүй хуудас"
-
-#: contrib/comments/models.py:171
-#, fuzzy
-msgid "date"
-msgstr "Өдөр харгалзахгүй"
-
-#: contrib/comments/models.py:181
-#, fuzzy
-msgid "comment flag"
-msgstr "санал сэтгэгдэл "
-
-#: contrib/comments/models.py:182
-#, fuzzy
-msgid "comment flags"
-msgstr "санал сэтгэгдэл "
-
-#: contrib/comments/templates/comments/approve.html:4
-#, fuzzy
-msgid "Approve a comment"
-msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:4
-#, fuzzy
-msgid "Thanks for approving"
-msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:4
-#, fuzzy
-msgid "Remove a comment"
-msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/deleted.html:4
-#, fuzzy
-msgid "Thanks for removing"
-msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:12
-#, fuzzy
-msgid "Flag"
-msgstr "Малага"
-
-#: contrib/comments/templates/comments/flagged.html:4
-#, fuzzy
-msgid "Thanks for flagging"
-msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-#, fuzzy
-msgid "Post"
-msgstr "-р"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-#, fuzzy
-msgid "Preview"
-msgstr "харах:"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:11
-#, fuzzy
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Доорх алдааг засна уу."
-msgstr[1] "Доорх алдаануудыг засна уу."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-#, fuzzy
-msgid "or make changes"
-msgstr "Өөрчилсөн зүйл байхгүй байна."
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "пайтоны загвар ангилалын нэр"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "агуулгын төрлүүд"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Жишээ: '/about/contact/'. Хөтлөх буюу зам заах ташуу зураас байх хэрэгтэй."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Энэ нь зөвхөн үсэг, тоо, нэмэлт тэмдэг, хэвтээ зураас эсвэл ташуу зураас "
-"агуулсан байх ёстой."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Дээд хэрэглээний сонголтууд"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "гарчиг "
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "агуулга"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "загварын нэр"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Жишээ: 'flatpages/contact_page.html'. Хэрэв ийм зүйл гарч ирэхгүй бол систем "
-"'flatpages/default.html'-ийг хэрэглэнэ."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "бүртгэл хийх хэрэгтэй"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Үүнийг чагтлавал зөвхөн сайтад нэвтэрсэн хэрэглэгч сайтыг харах боломжтой "
-"болно."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "өөрчлөлтгүй хуудас"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "өөрчлөлтгүй хуудаснууд"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Уучлаарай, таны маягт хүчингүй болсон байна. Энэ хуудаснаас маягт бөглөнө үү."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-#, fuzzy
-msgid "Point"
-msgstr "сар"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Дүрс оруулаагүй байна."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Оруулах боломжгүй дүрс"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Оруулах боломжгүй дүрсийн төрөл"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "-р"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "-р"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "-р"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "-р"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f сая"
-msgstr[1] "%(value).1f сая"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f тэр бум"
-msgstr[1] "%(value).1f тэр бум"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f их наяд"
-msgstr[1] "%(value).1f их наяд"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "нэг "
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "хоёр"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "гурав"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "дөрөв"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "тав"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "зургаа"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "долоо"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "найм"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "ес"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "өнөөдөр"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "маргааш"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "өчигдөр"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Шуудангийн дугаараа NNNN буюу ANNNNAAA хэлбэрээр оруулна уу. "
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Энэ хэсэгт зөвхөн тоо оруулна."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Энэ хэсэгт зөвхөн 7-8 оронтой тоо оруулна."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "CUIT-ээ XX-XXXXXXXX-X эсвэл XXXXXXXXXXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Хүчингүй CUIT байна."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Бургенланд"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Каринтиа"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Доод Австри"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Дээд Австри"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Зальцбург"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Стириа"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Тирол"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Ворарлберг"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Венн"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Шуудангийн индексээ XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Австрийн нийгмийн хамгааллын дугаараа XXXX XXXXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Шуудангийн 4 оронтой дугаараа оруулна уу."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Шуудангийн индексээ XXXXX-XXX хэлбэрээр оруулна уу. "
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Утасны дугаараа XX-XXXX-XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Бразилийн мужаа сонгоно уу. Энэ нь байгаа муж биш байна."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "CPF дугаар хүчингүй байна."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-"Энэ хэсэгт 11-ээс илүүгүй оронтой тоо буюу 14-өөс илүүгүй тэмдэгт оруулна уу."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "CNPJ дугаар хүчингүй байна."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Энэ хэсэгт наад зах нь 14 оронтой тоо оруулна уу."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Шуудангийн дугаараа XXX XXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Канадын нийгмийн даатгалын дугаараа XXX-XXX-XXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Ааргау"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Аппензелл Иннерходен "
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Аппензелл Ауссеррходен"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Басел-Стат"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Басел-Ланд"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Берн"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Фрибург"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Женев"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Гларус"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Граубенден"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Юра"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Лусерн"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Неучател"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Нидвалден"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Обвалден"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Шафхаусен"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Швиз"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Солотурн"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "Сант-Галлен"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Тургау"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Тикино"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Ури"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Валаис"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Вауд"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Зуг"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Зурик"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Щвейцарийн үнэмлэх юм уу пасспортныхоо дугаарыг X1234567<0 эсвэл 1234567890 "
-"хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Чилийн RUT-ээ оруулна уу."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Чилийн RUT-ээ XX.XXX.XXX-X хэлбэрээр оруулна уу. "
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Чилийн RUT хүчингүй байна."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-#, fuzzy
-msgid "Pilsen Region"
-msgstr "Зилина муж"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-#, fuzzy
-msgid "Usti Region"
-msgstr "Косиз муж"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-#, fuzzy
-msgid "Liberec Region"
-msgstr "Тренкин муж"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-#, fuzzy
-msgid "Hradec Region"
-msgstr "Тренкин муж"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-#, fuzzy
-msgid "Pardubice Region"
-msgstr "Косиз муж"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-#, fuzzy
-msgid "Vysocina Region"
-msgstr "Зилина муж"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-#, fuzzy
-msgid "Zlin Region"
-msgstr "Зилина муж"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Шуудангийн дугаараа XXXXX буюу XXX XX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/cz/forms.py:48
-#, fuzzy
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"Татварын дугаараа XXX-XXX-XX-XX буюу XX-XX-XXX-XXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-#, fuzzy
-msgid "Enter a valid birth number."
-msgstr "VAT дугаараа оруулна уу."
-
-#: contrib/localflavor/cz/forms.py:107
-#, fuzzy
-msgid "Enter a valid IC number."
-msgstr "VAT дугаараа оруулна уу."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Баден-Вюртемберг"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Бавариа"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Берлин"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Бранденбург"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Бремен"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Хамбург"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Хессен"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Мекленбург-Баруун Помераниа"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Саксония"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Хойд Рейн-Вестфалиа"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Рейнланд-Палатинет"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Саарланд"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Саксония"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Саксония-Анхалт"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Шлесвиг-Холстейн"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Турингиа"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Шуудангийн индексээ XXXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Германы үнэмлэхний дугаарыг XXXXXXXXXXX-XXXXXXX-XXXXXXX-X хэлбэрээр оруулна "
-"уу."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Арава"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Албасет"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Алакант"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Алмериа"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Авила"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Бадажоз"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Иллес Балеарс"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Барселон"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Бургоз"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Касерес"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Кадиз"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Кастелло"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Сиудад Рийл"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Кордоба"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "А Коруна"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Куэнса"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Гирона"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Гранада"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Гуадалажара"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Гипузкоа"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Хуелва"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Хуеска"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Жен"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Леон"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Ллейда"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "Ла Риожа"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Луго"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Мадрид"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Малага"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Мурсиа"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Наварре"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Оуренс"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Астуриас"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Паленсиа"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Лас Палмас"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Понтеведра"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Саламанка"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Санта Круз дэ Тенериф"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Кантабриа"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Сеговиа"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Севилль"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Сориа"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Таррагона"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Теруел"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Толедо"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Валенсиа"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Валладолид"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Бизкаиа"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Замора"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Зарагоза"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Сеута"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Мелилла"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Андалусиа"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Арагон"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Астуриасын вант улс"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Балеарикийн арлууд"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Баск улс"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Канарын арлууд"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Кастил-Ла-Манча"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Кастил ба Леон"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Каталон"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Экстремадура"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Галисиа"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Мурсиа муж"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Наваррегийн Форал суурин"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Валенсиагийн суурин"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Шуудангийн дугаараа 01XXX - 52XXX хооронд, энэ хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Утасны дугаараа 6XXXXXXXX, 8XXXXXXXX буюу 9XXXXXXXX хэлбэрийн аль нэгээр "
-"оруулна уу."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "NIF, NIE, CIF оруулна уу."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "NIF, NIE оруулна уу."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "NIF-ийн шалгах нийлбэр буруу байна."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "NIE-ийн шалгах нийлбэр буруу байна."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "CIF-ийн шалгах нийлбэр буруу байна."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Дансны дугаараа XXXX-XXXX-XX-XXXXXXXXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Дансны дугаарын шалгах нийлбэр буруу байна."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Финляндийн нийгмийн хамгааллын дугаараа оруулна уу."
-
-#: contrib/localflavor/fr/forms.py:31
-#, fuzzy
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Утасны дугаар XXXX-XXXXXX хэлбэрээр байх ёстой."
-
-#: contrib/localflavor/id/forms.py:28
-#, fuzzy
-msgid "Enter a valid post code"
-msgstr "Шуудангийн дугаараа оруулна уу."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Утасны дугаараа оруулна уу."
-
-#: contrib/localflavor/id/forms.py:107
-#, fuzzy
-msgid "Enter a valid vehicle license plate number"
-msgstr "Утасны дугаараа оруулна уу."
-
-#: contrib/localflavor/id/forms.py:170
-#, fuzzy
-msgid "Enter a valid NIK/KTP number"
-msgstr "VAT дугаараа оруулна уу."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-#, fuzzy
-msgid "Bali"
-msgstr "Бенгал"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-#, fuzzy
-msgid "Banten"
-msgstr "Агуулга"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-#, fuzzy
-msgid "Bengkulu"
-msgstr "Бенгал"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-#, fuzzy
-msgid "Gorontalo"
-msgstr "Гирона"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-#, fuzzy
-msgid "Jambi"
-msgstr "Тамил"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-#, fuzzy
-msgid "Lampung"
-msgstr "8-р сар "
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-#, fuzzy
-msgid "Maluku"
-msgstr "Малаки"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-#, fuzzy
-msgid "Magelang"
-msgstr "Малага"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-#, fuzzy
-msgid "Madiun"
-msgstr "Мадрид"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-#, fuzzy
-msgid "Tapanuli"
-msgstr "Тамаулипас"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-#, fuzzy
-msgid "Bandung"
-msgstr "Бранденбург"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-#, fuzzy
-msgid "Cirebon"
-msgstr "Гирона"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-#, fuzzy
-msgid "Bogor"
-msgstr "Нёго"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-#, fuzzy
-msgid "Semarang"
-msgstr "Серби"
-
-#: contrib/localflavor/id/id_choices.py:87
-#, fuzzy
-msgid "Pati"
-msgstr "идэвхтэй"
-
-#: contrib/localflavor/id/id_choices.py:91
-#, fuzzy
-msgid "Surabaya"
-msgstr "Бямба гариг"
-
-#: contrib/localflavor/id/id_choices.py:92
-#, fuzzy
-msgid "Madura"
-msgstr "Мадрид"
-
-#: contrib/localflavor/id/id_choices.py:93
-#, fuzzy
-msgid "Malang"
-msgstr "Малага"
-
-#: contrib/localflavor/id/id_choices.py:94
-#, fuzzy
-msgid "Jember"
-msgstr "11-р сар"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-#, fuzzy
-msgid "Garut"
-msgstr "Гларус"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-#, fuzzy
-msgid "Antrim"
-msgstr "Антрим каунти"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-#, fuzzy
-msgid "Armagh"
-msgstr "Арагон"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-#, fuzzy
-msgid "Cavan"
-msgstr "Каталан"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-#, fuzzy
-msgid "Clare"
-msgstr "Касерес"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-#, fuzzy
-msgid "Cork"
-msgstr "буюу"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-#, fuzzy
-msgid "Derry"
-msgstr "2-р сар"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-#, fuzzy
-msgid "Donegal"
-msgstr "нэг "
-
-#: contrib/localflavor/ie/ie_counties.py:16
-#, fuzzy
-msgid "Down"
-msgstr "Дэвон"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-#, fuzzy
-msgid "Dublin"
-msgstr "Лублин"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-#, fuzzy
-msgid "Fermanagh"
-msgstr "Ферманаф каунти"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-#, fuzzy
-msgid "Galway"
-msgstr "Галисиа"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-#, fuzzy
-msgid "Kerry"
-msgstr "2-р сар"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-#, fuzzy
-msgid "Louth"
-msgstr "Гарах"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-#, fuzzy
-msgid "Mayo"
-msgstr "5-р сар"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-#, fuzzy
-msgid "Meath"
-msgstr "Мета өгөгдөл"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-#, fuzzy
-msgid "Monaghan"
-msgstr "Ахин нэвтрэх "
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-#, fuzzy
-msgid "Roscommon"
-msgstr "санал сэтгэгдэл "
-
-#: contrib/localflavor/ie/ie_counties.py:33
-#, fuzzy
-msgid "Sligo"
-msgstr "Шига"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-#, fuzzy
-msgid "Tyrone"
-msgstr "Тирол"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-#, fuzzy
-msgid "Westmeath"
-msgstr "Баруун Помераниа"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-#, fuzzy
-msgid "Wexford"
-msgstr "Лха"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Шуудангийн индексээ XXXXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Исландын үнэмлэхний дугаараа XXXXXX-XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Исландын үнэмлэхний дугаар хүчингүй байна."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Шуудангийн индексээ оруулна уу."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Нийгмийн хамгааллын дугаараа оруулна уу."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "VAT дугаараа оруулна уу."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Шуудангийн дугаараа XXXXXXX буюу XXX-XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Хоккайдо"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Аомори"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Иватэ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Мияаги"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Акита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Ямагата"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Фукушима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ибараки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Точиги"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Гунма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Саитама"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Чиба"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Токио"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Канагва"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Яманаши"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Нагано"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Нийгата"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Тояма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ишикава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Фукуи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Гифу"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Шизуока"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Аичи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Мие"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Шига"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Кёто"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Осака"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Нёго"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Нара"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Вакаяма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Тоттори"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Шиманэ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Окаяма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Хирошима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Ямагучи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Токушима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Кагава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Эхимэ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Кочи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Фукуока"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Сага"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Нагасаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Кумамото"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Оита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Миязаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Кагошима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Окинава"
-
-#: contrib/localflavor/kw/forms.py:25
-#, fuzzy
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Өмнөд Африкийн ID дугаараа оруулна уу."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Агуаскалиентэс"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Бажа Калифорни"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Бажа Калифорни Сур"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Кампече"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Чихуахуа"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Чиапас"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Коахуила"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Колима"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Холбооны Дистрито"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Дуранго"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Гуерреро"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Гуанажуато"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Хидалго"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Жалиско"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Мехико"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Мичоакан"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Морелос"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Наярит"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Нуево Леон"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Вахака"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Пуебло"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Куеретаро"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Кинтана Ро"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Синалоа"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "Сан Луис Потоси"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Сонора"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Табаско"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Тамаулипас"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Тласкала"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Веракруз"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Юкатан"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Закатекас"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Шуудангийн дугаараа оруулна уу."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "SoFi дугаараа оруулна уу."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Дрэнтэ"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Флеволанд"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Фраисланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Гелдерланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Гронинген"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Лимбург"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Нуурд-Брабант"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Нуурд-Холланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Овераисл"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Утрехт"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Зийланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Заит-Холланд"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Норвегийн нийгмийн хамгааллын дугаараа оруулна уу."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Энэ хэсэгт 8 оронтой тоо оруулна."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Энэ хэсэгт 11 оронтой тоо оруулна."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Үндэсний таних дугаар 11 оронтой байна."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Үндэсний таних дугаарын шалгах нийлбэр буруу байна."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Татварын дугаараа XXX-XXX-XX-XX буюу XX-XX-XXX-XXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Татварын дугаарын шалгах нийлбэр буруу байна."
-
-#: contrib/localflavor/pl/forms.py:109
-#, fuzzy
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Үндэсний бизнесийн бүртгэлийн дугаар 7-9 оронтой байна."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Үндэсний бизнесийн бүртгэлийн дугаарын шалгах нийлбэр буруу байна."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Шуудангийн дугаараа XX-XXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Доод Силесиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Куявиа-Помераниа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Лублин"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Лубуски"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Лодз"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Бага Польш"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Масовиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Ополе"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Субкарпатиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Подласие"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Помераниа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Силесиа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Свентокшишки"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Вармиа-Масуриа"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Их Польш"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Баруун Помераниа"
-
-#: contrib/localflavor/pt/forms.py:17
-#, fuzzy
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Шуудангийн индексээ XXXXX-XXX хэлбэрээр оруулна уу. "
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "CIF оруулна уу."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "CNP оруулна уу."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "IBAN-ийг ROXX-XXXX-XXXX-XXXX-XXXX-XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Утасны дугаар XXXX-XXXXXX хэлбэрээр байх ёстой."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Шуудангийн дугаараа XXXXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/se/forms.py:50
-#, fuzzy
-msgid "Enter a valid Swedish organisation number."
-msgstr "SoFi дугаараа оруулна уу."
-
-#: contrib/localflavor/se/forms.py:107
-#, fuzzy
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Финляндийн нийгмийн хамгааллын дугаараа оруулна уу."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-#, fuzzy
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Шуудангийн дугаараа XX-XXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-#, fuzzy
-msgid "Södermanland"
-msgstr "Гелдерланд"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-#, fuzzy
-msgid "Kalmar"
-msgstr "3-р сар"
-
-#: contrib/localflavor/se/se_counties.py:24
-#, fuzzy
-msgid "Gotland"
-msgstr "Шотланд"
-
-#: contrib/localflavor/se/se_counties.py:25
-#, fuzzy
-msgid "Blekinge"
-msgstr "Берн"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-#, fuzzy
-msgid "Halland"
-msgstr "Саарланд"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-#, fuzzy
-msgid "Dalarna"
-msgstr "Галанта"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Банска Бистрика"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Банска Стиавника"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Бардежов"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Бановц над Бебравоу"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Брезно"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Братислав l"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Братислав ll"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Братислав lll"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Братислав lV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Братислав V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Битка"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Кадка"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Детва"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Долни Кубин"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Дунайска Стреда"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Галанта"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Гелника"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Хлоховек"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Хюменн"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Илава"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Кезмарок"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Комарно"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Косиз I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Косиз II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Косиз III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Косиз IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Косиз - околие"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Крупина"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Кисук Нове Место"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Левис "
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Левока"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Липтовски Микулас"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Лукенек"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Малаки"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Мартин "
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Медзилаборс"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Михаловс"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Мияава"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Наместово"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Нитра"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Нове Место над Вахом"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Нове Замки"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Партизанске"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Пезинок"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Пиестани"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Полтар"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Попрад"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Повазска Бистрика"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Пресов"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Приевидза"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Пучов"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Ревука"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Римавска Собота"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Рознава"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Рузомберок"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Сабинов"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Сенек"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Сеника"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Скалиса"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Снина"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Собранс"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Списска Нова Вес"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Стара Любовна"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Стропков"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Свидник"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Сала"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Тополсани"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Требисов"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Тренкин"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Трнава"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Туркианск Теплис"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Тврдосин"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Велки Кртис"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Вранов над Топлоу"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Злате Моравс"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Зволен"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Зарновика"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Зиар над Хроном"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Зилина"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Банска Бистрика муж "
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Братислав муж "
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Косиз муж"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Нитра муж"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Пресов муж"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Тренкин муж"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Трнава муж"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Зилина муж"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Шуудангийн дугаараа оруулна уу."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Бэдфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Букингхэмшир"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Чешир"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Корнүолл ба Скиллийн арлууд"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Кумбриа"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Дэрбишир"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Дэвон"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Дорсэт"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Дурхам"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Ийст Суссекс"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Эссекс"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Глоусестершир"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Их Лондон "
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Их Манчестэр"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Хэмпшир"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Хэртфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Кэнт"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Ланкашир"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Леисэстершир"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Линколншир"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Мэрсэисайд"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Норфолк"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "Норт Йоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Нортамптоншир"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Нортамберланд"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Ноттингхэмшир"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Оксфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Шропшир"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Сомерсэт"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Саут Йоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Стаффордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Суффолк"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Сурреи"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Тийн ба Виэр"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Уарвикшир"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "Вэст Мидландс"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "Вест Суссекс"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "Вест Йоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Вилтшир"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Ворсестершир"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Антрим каунти"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Армагх каунти"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Даун каунти"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Ферманаф каунти"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Лондондерри каунти"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Тирон каунти"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Клвид "
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Дифед"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Гвент"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Гвинедд"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Дундад Гламорган"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Повис"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Өмнөд Гламорган"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Баруун Гламорган"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Бордэрс"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Төв Шотланд"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Дамфрайс ба Галловэй"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Файф"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Грампиан"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Хайланд"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Лотиан"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Оркнэй арлууд"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Шетланд арлууд"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Стратклид"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Тайсайд"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Вестерн Айслс"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Англи"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Умард Ирланд"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Шотланд"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Вэльс"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Шуудангийн индексээ XXXXX буюу XXXXX-XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/us/forms.py:26
-#, fuzzy
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Утасны дугаараа XX-XXXX-XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "АНУ-ын нийгмийн хамгааллын дугаараа XXX-XX-XXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S. төлөв (хоёр том үсэг)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Утасны дугаар"
-
-#: contrib/localflavor/uy/forms.py:28
-#, fuzzy
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "CUIT-ээ XX-XXXXXXXX-X эсвэл XXXXXXXXXXXX хэлбэрээр оруулна уу."
-
-#: contrib/localflavor/uy/forms.py:30
-#, fuzzy
-msgid "Enter a valid CI number."
-msgstr "VAT дугаараа оруулна уу."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Өмнөд Африкийн ID дугаараа оруулна уу."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Өмнөд Африкийн шуудангийн дугаараа оруулна уу."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Зүүн Кэйп"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Фрий стэйт"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Гаутэнг"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "КваЗулу-Натал"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Лимпопо"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Мпумаланга"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Хойд Кэйп"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Норт Вэст"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Баруун Кэйп"
-
-#: contrib/messages/tests/base.py:101
-#, fuzzy
-msgid "lazy message"
-msgstr "мэдээлэл"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "хаанаас"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Энэ нь домэйн нэр агуулаагүй абсолют зам байх ёстой. Жишээ нь: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "хаашаа"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Энэ нь (дээрхийн нэгэн адил) абсолют зам юм уу 'http://' гэж эхэлсэн бүтэн "
-"URL байж болно. "
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "хандуулах"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "хандуулах"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr ""
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr ""
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "дуусах хугацаа"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr ""
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr ""
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "домэйн нэр"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "дэлгэцний нэр "
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "сайт"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Өгөгдхүүнээ оруулна уу."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "URL оруулна уу."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Энэ URL холбоос гэмтсэн юм шиг байна."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Үсэг, тоо, нэмэлт тэмдэг, зурааснаас бүрдэх `slug`-аа оруулна уу."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "IPv4 хаягаа оруулна уу. "
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Зөвхөн таслалаар тусгаарлагдсан цифр оруулна уу."
-
-#: core/validators.py:135
-#, fuzzy, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Энэ өгөгдхүүн хамгийн багадаа %(min)d тэмдэгттэй байх ёстой (%(length)d "
-"урттай)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, fuzzy, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Энэ өгөгдхүүн %s буюу үүнээс бага байх ёстой."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, fuzzy, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Энэ өгөгдхүүн %s буюу үүнээс их байх ёстой."
-
-#: core/validators.py:164
-#, fuzzy, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Энэ өгөгдхүүн хамгийн багадаа %(min)d тэмдэгттэй байх ёстой (%(length)d "
-"урттай)."
-
-#: core/validators.py:170
-#, fuzzy, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Энэ өгөгдхүүн хамгийн ихдээ %(max)d тэмдэгттэй байх ёстой (%(length)d "
-"урттай)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(field_label)s-тэй %(model_name)s-ийг аль хэдийнэ оруулсан байна."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr ""
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Энэ хэсгийг хоосон орхиж болохгүй."
-
-#: db/models/fields/__init__.py:65
-#, fuzzy
-msgid "This field cannot be blank."
-msgstr "Энэ хэсгийг хоосон орхиж болохгүй."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr ""
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Бүхэл тоо"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Энэ бүхэл тоо байх ёстой."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Энэ True, False-ийн аль аль нь байх ёстой. "
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (Үнэн худлын аль нэг нь)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Бичвэр (%(max_length)s хүртэл)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Таслалаар тусгаарлагдсан бүхэл тоо"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Огноо (цаггүй)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Огноогоо ЖЖЖЖ-СС-ӨӨ гэсэн хэлбэрээр оруулна уу."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Буруу огноо: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Огноо/цагаа ЖЖЖЖ-СС-ӨӨ ЦЦ:ММ[:сс[.uuuuuu]] гэсэн хэлбэрээр оруулна уу."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Огноо (цагтай)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Энэ бутархай тоо байх ёстой."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Аравтын бутархайт тоо"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Цахим шуудангийн хаяг"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Файлын зам "
-
-#: db/models/fields/__init__.py:822
-#, fuzzy
-msgid "This value must be a float."
-msgstr "Энэ бүхэл тоо байх ёстой."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr ""
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr ""
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Энэ None, True, False-ийн аль аль нь байх ёстой."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (Үнэн, худал, эсвэл юу ч биш)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Бичвэр"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Хугацаа"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Цагаа ЦЦ:ММ[:сс[.uuuuuu]] гэсэн хэлбэрээр оруулна уу. "
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML бичвэр"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr ""
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr ""
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr ""
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr ""
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Нэгээс олныг сонгохын тулд Мак дээрх \"Control\", \"Command\"-ийг дарна уу."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "%(self)s ID-ийг оруулна уу. %(value)r гэсэн өгөгдхүүн буруу байна."
-msgstr[1] ""
-"%(self)s ID-ийг оруулна уу. %(value)r гэсэн өгөгдхүүнүүд буруу байна."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Энэ хэсгийг бөглөх шаардлагатай."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Дугаараа бүхлээр нь оруулна уу."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Дугаараа оруулна уу."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Энд нийтдээ %s -аас олонгүй цифр байх ёстой."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Энд %s -аас олонгүй бутархайн орон байх ёстой. "
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Энд бутархайн таслалаас өмнө %s-аас олонгүй цифр байх ёстой."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Огноо оруулна уу."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Цаг оруулна уу."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Огноо/цаг оруулна уу."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Файл оруулаагүй байна. Маягтаас кодлох төрлийг чагтал. "
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Файл оруулаагүй байна."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Оруулсан файл хоосон байна. "
-
-#: forms/fields.py:438
-#, fuzzy, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Энэ өгөгдхүүн хамгийн ихдээ %(max)d тэмдэгттэй байх ёстой (%(length)d "
-"урттай)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Зөв зураг оруулна уу. Таны оруулсан файл зүгээр зураг, гэмтсэн зургийн аль "
-"нь ч биш байна."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Зөв сонголт хийгээрэй. %(value)s гэсэн сонголт байхгүй байна."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
-msgid "Enter a list of values."
-msgstr "Өгөгдхүүний жагсаалтаа оруулна уу."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Дараалал"
-
-#: forms/models.py:567
-#, fuzzy, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Доорх алдааг засна уу."
-
-#: forms/models.py:571
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-
-#: forms/models.py:577
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-
-#: forms/models.py:585
-#, fuzzy
-msgid "Please correct the duplicate values below."
-msgstr "Доорх алдааг засна уу."
-
-#: forms/models.py:860
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: forms/models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Зөв сонголт хийгээрэй. Энэ сонголт байхгүй байна."
-
-#: forms/models.py:1008
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Зөв сонголт хийгээрэй. %s гэсэн сонголт байхгүй байна."
-
-#: forms/models.py:1010
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr ""
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "тийм, үгүй, магадгүй"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d байт"
-msgstr[1] "%(size)d байт"
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "шөнө"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "үд"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Даваа гариг"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Мягмар гариг"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Лхагва гариг"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Пүрэв гариг"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Баасан гариг"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Бямба гариг"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Ням гариг"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Дав"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Мяг"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Лха"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Пүр"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Баа"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Бям"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Ням"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "1-р сар"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "2-р сар"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "3-р сар"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "4-р сар"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "5-р сар"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "6-р сар"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "7-р сар"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "8-р сар"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "9-р сар"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "10-р сар"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "11-р сар"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "12-р сар"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "1-р сар"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "2-р сар"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "3-р сар"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "4-р сар"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "5-р сар"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "6-р сар"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "7-р сар"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "8-р сар "
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "9-р сар"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "10-р сар"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "11-р сар"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "12-р сар"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "1-р сар"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "2-р сар"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "8-р сар"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "9-р сар"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "10-р сар"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "11-р сар"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "12-р сар"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "буюу"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "жил "
-msgstr[1] "жил"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "сар"
-msgstr[1] "сар"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "долоо хоног"
-msgstr[1] "долоо хоног"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "өдөр"
-msgstr[1] "өдөр"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "цаг"
-msgstr[1] "цаг"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "минут"
-msgstr[1] "минут"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "минут"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s амжилттай үүслээ."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr " %(verbose_name)s амжилттай шинэчлэгдлээ."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s устлаа."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "%(name)s дахь нэг буюу түүнээс дээш %(fieldname)s :%(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "%(name)s дахь нэг буюу түүнээс дээш %(fieldname)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Хуучин нууц үг:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Эх загварт хамаарах хамаарал"
-
-#~ msgid "Add user"
-#~ msgstr "Хэрэглэгч нэмэх"
diff --git a/parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index d492936..0000000
--- a/parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.po
deleted file mode 100644
index c434049..0000000
--- a/parts/django/django/conf/locale/mn/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,149 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-04 19:01+0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr ""
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr ""
diff --git a/parts/django/django/conf/locale/mn/__init__.py b/parts/django/django/conf/locale/mn/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/mn/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/mn/formats.py b/parts/django/django/conf/locale/mn/formats.py
deleted file mode 100644
index a8e7783..0000000
--- a/parts/django/django/conf/locale/mn/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-SHORT_DATE_FORMAT = 'j M Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/nb/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/nb/LC_MESSAGES/django.mo
deleted file mode 100644
index cbd961e..0000000
--- a/parts/django/django/conf/locale/nb/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/nb/LC_MESSAGES/django.po b/parts/django/django/conf/locale/nb/LC_MESSAGES/django.po
deleted file mode 100644
index fc4b547..0000000
--- a/parts/django/django/conf/locale/nb/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5132 +0,0 @@
-# Norwegian (Bokmål) translation of Django
-# Copyright (C) 2005-2010
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-15 02:05+0200\n"
-"PO-Revision-Date: 2010-05-14 21:43+0200\n"
-"Last-Translator: Christian Mikalsen and Jon Lønne\n"
-"Language-Team: Norsk <no@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabisk"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgarsk"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalsk"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosnisk"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Katalansk"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Tsjekkisk"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Walisisk"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dansk"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Tysk"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Gresk"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Engelsk"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Engelsk (britisk)"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Spansk"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Argentinsk spansk"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estisk"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Baskisk"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Persisk"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Finsk"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Fransk"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frisisk"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irsk"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galisisk"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hebraisk"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Kroatisk"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Ungarsk"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Indonesisk"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Islandsk"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Italiensk"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Japansk"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Georgisk"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Koreansk"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Litauisk"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Latvisk"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Makedonsk"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "Mongolsk"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "Nederlandsk"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "Norsk"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "Norsk (bokmål)"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "Norsk (nynorsk)"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "Polsk"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "Portugisisk"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "Brasiliansk portugisisk"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "Rumensk"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "Russisk"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "Slovakisk"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "Slovensk"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "Albansk"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "Serbisk"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "Serbisk latin"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "Svensk"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "Tamil"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "Thai"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "Tyrkisk"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "Ukrainsk"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "Vietnamesisk"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "Forenklet kinesisk"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "Tradisjonell kinesisk"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Slettet %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Er du sikker?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Slett valgte %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Etter %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Alle"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Når som helst"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Siste syv dager"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Denne måneden"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "I år"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Nei"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Ukjent"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Handling:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "tid for handling"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objekt-ID"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objekt repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "handlingsflagg"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "endre melding"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "logginnlegg"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "logginnlegg"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Ingen"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Endret %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "og"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Opprettet %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Endret %(list)s for %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Slettet %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Ingen felt endret."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" ble opprettet."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Du kan redigere videre nedenfor."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Du kan opprette ny %s nedenfor."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" ble endret."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" ble endret. Du kan redigere videre nedenfor."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Du må velge objekter for å utføre handlinger på dem. Ingen objekter har "
-"blitt endret."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Ingen handling valgt."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Opprett %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s-objekt med primærnøkkelen %(key)r finnes ikke."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Endre %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Databasefeil"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s ble endret."
-msgstr[1] "%(count)s %(name)s ble endret."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s valgt"
-msgstr[1] "Alle %(total_count)s valgt"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 av %(cnt)s valgt"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" ble slettet."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Endringshistorikk: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Vennligst angi korrekt brukernavn og passord. Merk at det er forskjell på "
-"små og store bokstaver."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Økten din har tidsavbrutt, vennligst logg inn igjen."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Det ser ut som om nettleseren din ikke støtter informasjonskapsler "
-"(cookies). Vennligst konfigurer nettleseren din og prøv igjen."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Brukernavnet kan ikke inneholde tegnet '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "E-postadressen er ikke brukernavnet ditt, prøv '%s' isteden."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Nettstedsadministrasjon"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Logg inn"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s-administrasjon"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Dato:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Tid:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Nå:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Endre:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Oppslag"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Legg til ny"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Fant ikke siden"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Beklager, men siden du spør etter finnes ikke."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Hjem"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Tjenerfeil"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Tjenerfeil (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Tjenerfeil <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Det har oppstått en feil. Feilen er blitt rapportert til administrator via e-"
-"post, og vil bli fikset snart. Takk for din tålmodighet."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Utfør den valgte handlingen"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Gå"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Trykk her for å velge samtlige objekter fra alle sider"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Velg alle %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Nullstill valg"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Velkommen,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentasjon"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Logg ut"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administrasjonsside"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django-administrasjon"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Opprett"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historikk"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Vis på nettsted"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Vennligst korriger feilen under."
-msgstr[1] "Vennligst korriger feilene under."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Opprett %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrering"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Slett"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Hvis du sletter %(object_name)s '%(escaped_object)s', vil også slette "
-"relaterte objekter, men du har ikke tillatelse til å slette følgende "
-"objekttyper:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Er du sikker på at du vil slette %(object_name)s \"%(escaped_object)s\"? "
-"Alle de følgende relaterte objektene vil bli slettet:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, jeg er sikker"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Slett flere objekter"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Sletting av %(object_name)s vil også slette relaterte objekter, men du har "
-"ikke tillatelse til å slette følgende objekttyper:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Er du sikker på at du vil slette de valgte %(object_name)s-objektene? De "
-"følgende objektene og deres relaterte objekter vil bli slettet:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Etter %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeller tilgjengelig i %(name)s-applikasjonen."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Endre"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Du har ikke rettigheter til å redigere noe."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Siste handlinger"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mine handlinger"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ingen tilgjengelige"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Ukjent innhold"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Noe er galt med databaseinstallasjonen din. Sørg for at databasetabellene er "
-"opprettet og at brukeren har de nødvendige rettigheter."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Brukernavn:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Passord:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dato/tid"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Bruker"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Handling"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Dette objektet har ingen endringshistorikk. Det var sannsynligvis ikke "
-"opprettet med administrasjonssiden."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Vis alle"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Lagre"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Søk"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "Ett resultat"
-msgstr[1] "%(counter)s resultater"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s totalt"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Lagre som ny"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Lagre og opprett ny"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Lagre og fortsett å redigere"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Skriv først inn brukernavn og passord. Deretter vil du få mulighet til å "
-"endre flere brukerinnstillinger."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Skriv inn et nytt passord for brukeren <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Passord"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Passord (gjenta)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Skriv inn det samme passordet som ovenfor, for verifisering."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Legg til ny %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Fjern"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Slette?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Takk for at du valgte å bruke kvalitetstid på nettstedet i dag."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Logg inn igjen"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Passord endret"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Ditt passord ble endret."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Venligst oppgi ditt gamle passord av sikkerhetsgrunner. Oppgi deretter ditt "
-"nye passord to ganger, slik at vi kan kontrollere at det er korrekt."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Gammelt passord"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nytt passord"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Nullstill passord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Passord nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Passordet ditt er satt. Du kan nå logge inn."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Bekreftelse på nullstilt passord"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Oppgi nytt passord"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Venligst oppgi ditt nye passord to ganger, for å sikre at du oppgir det "
-"korrekt."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Gjenta nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Passordet ble ikke nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Nullstillingslinken er ugyldig, kanskje fordi den allerede har vært brukt. "
-"Vennligst nullstill passordet ditt på nytt."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Passordet ble nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Vi har sendt deg en e-post med instruksjoner for nullstilling av passord. Du "
-"bør motta den om kort tid."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Du har mottatt denne e-posten fordi du har bedt om nullstilling av passordet "
-"ditt"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "for din konto på %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Vennligst gå til følgende side og velg et nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Brukernavnet ditt, i tilfelle du har glemt det:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Takk for at du bruker siden vår!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Hilsen %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Glemt passordet ditt? Oppgi e-postadressen din under, så sender vi deg en e-"
-"post med instruksjoner for nullstilling av passord."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-postadresse:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Nullstill mitt passord"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Alle datoer"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Velg %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Velg %s du ønsker å endre"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "nettsted"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "mal"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Fant ikke applikasjonen %r"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Fant ikke modellen %(model_name)r i applikasjonen %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modell:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "relaterte `%(app_label)s.%(object_name)s`-objekter"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "alle %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "antall %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Felter på %s-objekter"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ser ikke ut til å være et urlpattern-objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bokmerker"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentasjonsbokmerker"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">For å installere bokmerker, dra linken til verktøylinja\n"
-"for bokmerker, eller høyreklikk og legg til i bokmerker. Nå kan du du velge\n"
-"bokmerket fra hvilken som helst side på nettstedet. Noen av disse\n"
-"bokmerkene krever at datamaskinen du bruker er markert som \"intern\"\n"
-"(kontakt din systemadministrator hvis du er usikker på om maskinen din er "
-"\"intern\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentasjon for denne siden"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Hopp fra hvilken som helst side til dokumentasjonen for visningsfunksjonen "
-"som genererte den siden."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Vis objekt-ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Viser \"content-type\" og en unik ID for sider som representerer et enkelt "
-"objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Endre dette objektet (nåværende vindu)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Hopper til administrasjonssiden for sider som representerer et enkelt objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Endre dette objektet (nytt vindu)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Samme som over, men åpner administrasjonssiden i et nytt vindu."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Personlig informasjon"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Rettigheter"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Viktige datoer"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupper"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Passordet er endret."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Endre passord: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Brukernavn"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Påkrevet. 30 tegn eller færre. Kun bokstaver, tall og @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Verdien kan kun inneholde bokstaver, tall og @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Passordbekreftelse"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Det eksisterer allerede en bruker med dette brukernavnet."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "De to passordfeltene er ikke like."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Denne kontoen er inaktiv."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Din nettleser ser ikke ut til å støtte informasjonskapsler (cookies). "
-"Informasjonskapsler er påkrevet for å logge inn."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-post"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Den oppgitte e-postadressen er ikke registrert hos oss. Er du sikker på at "
-"du er registrert?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Nullstilling av passord på %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Bekreft nytt passord"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Ditt gamle passord er galt. Vennligst prøv igjen."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "navn"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kodenavn"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "rettighet"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "rettigheter"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "gruppe"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupper"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "brukernavn"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Påkrevet. 30 tegn eller færre. Bokstaver, tall og @/./+/-/_."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "fornavn"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "etternavn"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-postadresse"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "passord"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Bruk '[algo]$[salt]$[hexdigest]' eller <a href=\"password/\">endre passord-"
-"skjemaet</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "administrasjonsstatus"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Angir at brukeren kan logge inn på denne administrasjonssiden."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktiv"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Angir at denne brukeren er aktiv. Avmerk denne i stedet for å slette kontoen."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "superbruker"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Angir at denne brukeren har alle rettigheter uten å eksplisitt sette de."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "siste innlogging"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "registrert"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"I tillegg til de rettighetene som blir angitt manuelt, får brukeren også "
-"rettighetene til gruppene han/hun er med i."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "Brukerrettigheter"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "bruker"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "brukere"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "melding"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Logget ut"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Oppgi en gyldig e-postadresse."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Innhold"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "flagget"
-msgstr[1] "flagget"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Flagg valgte kommentarer"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "godkjent"
-msgstr[1] "godkjent"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Tillat valgte kommentarer"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "fjernet"
-msgstr[1] "fjernet"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Fjern valgte kommentarer"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 kommentar ble %(action)s."
-msgstr[1] "%(count)s kommentarer ble %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s kommentarer"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Siste kommentarer fra %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Navn"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-postadresse"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "Nettadresse"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Kommentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pass munnen din! Ordet %s er ikke tillatt her."
-msgstr[1] "Pass munnen din! Ordene %s er ikke tillatt her."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Hvis du oppgir noe i dette feltet, vil kommentaren bli behandlet som spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "innholdstype"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "objekt-ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "brukerens navn"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "brukerens e-postadresse"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "brukerens nettadresse"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "kommentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "dato/tid for innsendelse"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP-adresse"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "er tilgjengelig for alle"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Avmerk denne boksen for å fjerne kommentaren fra siden."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "er fjernet"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Huk av denne hvis kommentaren er upassende. Meldingen \"Denne kommentaren "
-"har blitt fjernet\" vil bli vist i stedet."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "kommentarer"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Denne kommentaren er skrevet av en innlogget bruker og navnet kan derfor "
-"ikke endres."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Denne kommentaren er skrevet av en innlogget bruker og e-postadressen kan "
-"derfor ikke endres."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Skrevet av %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "flagg"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "dato"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "kommentarflagg"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "kommentarflagg"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Tillat en kommentar"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Gjør denne kommentaren offentlig?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Godkjenn"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Takk for godkjennelse"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Takk for at du tok deg tid til å forbedre kvaliteten på diskusjonen på siden "
-"vår"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Fjern en kommentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Fjerne denne kommentaren?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Takk for fjerningen"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Flagg denne kommentaren"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Flagg denne kommentaren?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Flagg"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Takk for flagging"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Publiser"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Forhåndsvisning"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Takk for kommentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Takk for din kommentar"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Forhåndsvis kommentaren din"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Vennligst korriger feilen under"
-msgstr[1] "Vennligst korriger feilene under"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Publiser din kommentar"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "eller gjør endringer"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python-modell klassenavn"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "innholdstyper"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Eksempel: '/om/kontakt/'. Kontroller at det er en skråstrek foran og bak."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Dette feltet kan bare inneholde bokstaver, nummer, understreker, "
-"bindestreker eller skråstreker."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Avanserte innstillinger"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "tittel"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "innhold"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "tillat kommentarer"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "malnavn"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Eksempel: 'flatpages/kontakt_side.html'. Hvis denne ikke er gitt, vil "
-"'flatpages/default.html' bli brukt."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "krever registrering"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Hvis denne er krysset av, kan kun innloggede brukere se siden."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flatside"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flatsider"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Vi beklager, men dette skjemaet har tidsavbrutt. Vennligst fyll ut skjemaet "
-"fra denne siden."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punkt"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Ingen geometriverdi oppgitt."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Ugyldig geometriverdi"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Ugyldig geometritype"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"En feil oppstod ved transformering av geometrien til SRID fra geometrifeltet."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f million"
-msgstr[1] "%(value).1f millioner"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milliard"
-msgstr[1] "%(value).1f milliarder"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billion"
-msgstr[1] "%(value).1f billioner"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "én"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "to"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "fire"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "fem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seks"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sju"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "åtte"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "ni"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "i dag"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "i morgen"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "i går"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Oppgi et postnummer på formen NNNN eller ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Feltet krever kun tall."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Feltet krever 7 eller 8 siffer."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Oppgi gyldig CUIT på formen XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Ugyldig CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Niederösterreich"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Oberösterreich"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Steiermark"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wien"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Oppgi et postnummer på formen XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Oppgi et gyldig Østerrisk personnummer på formen XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Oppgi et firesifret postnummer."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Oppgi et postnummer på formen XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonnummeret må være på formen XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Velg en gyldig brasiliansk stat. Den staten er ikke et av de tilgjengelige "
-"valgene."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Ugyldig CPF-nummer."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Feltet krever maksimum 11 eller 14 siffer."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Ugyldig CNPJ-nummer."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Feltet krever minst 14 siffer."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Oppgi et postnummer på formen XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Oppgi et gyldig kanadisk personnummer på formen XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Landschaft"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genève"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubünden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Luzern"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchâtel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Wallis"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Oppgi et gyldig sveitsisk identitets- eller passnummer på formen X1234567<0 "
-"eller 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Oppgi et gyldig chilensk RUT."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Oppgi et gyldig chilensk RUT på formen XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Den chilenske RUT er ugyldig."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Sentralbøhmen region"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Sydbøhmen region"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Plzeň region"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karlovy Vary region"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Ústí nad Labem region"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec region"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Králové region"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice region"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Žilina-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Sydmähriske region"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc region"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlín region"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Mähren-Schlesien region"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Oppgi et postnummer på formen XXXXX or XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Oppgi et fødselsnummer på formen XXXXXX/XXXX eller XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Oppgi et gyldig fødselsnummer."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Oppgi et gyldig IC-nummer."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bayern"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Vorpommern"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Niedersachsen"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Nordrhein-Westfalen"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rheinland-Pfalz"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sachsen"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Sachsen-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thüringen"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Oppgi et postnummer på formen XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Oppgi et gyldig tysk identitetsnummer på formen XXXXXXXXXXX-XXXXXXX-XXXXXXX-"
-"X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Balearene"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Gipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalucía"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragón"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearene"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskerland"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanariøyene"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilla-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilla y León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valenciana"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Oppgi et gyldig postnummer på formen 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Oppgi et gyldig telefonnummer på et av følgende formater: 6XXXXXXXX, "
-"8XXXXXXXX eller 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Oppgi et gyldig NIF, NIE eller CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Oppgi et gyldig NIF eller NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Ugyldig kontrollsum for NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Ugyldig kontrollsum for NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Ugyldig kontrollsum for CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Oppgi et gyldig kontonummer på formen XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Ugyldig kontrollsum for kontonummer."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Oppgi et gyldig finsk personnummer."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonnummeret må være på formen 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Oppgi et gyldig telefonnummer."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Oppgi et gyldig kjøretøyregistreringsnummer."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Oppgi et gyldig NIK/KTP-nummer."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-#, fuzzy
-msgid "Pati"
-msgstr "aktiv"
-
-#: contrib/localflavor/id/id_choices.py:91
-#, fuzzy
-msgid "Surabaya"
-msgstr "lørdag"
-
-#: contrib/localflavor/id/id_choices.py:92
-#, fuzzy
-msgid "Madura"
-msgstr "Madrid"
-
-#: contrib/localflavor/id/id_choices.py:93
-#, fuzzy
-msgid "Malang"
-msgstr "Málaga"
-
-#: contrib/localflavor/id/id_choices.py:94
-#, fuzzy
-msgid "Jember"
-msgstr "november"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-#, fuzzy
-msgid "Garut"
-msgstr "Glarus"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-#, fuzzy
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-#, fuzzy
-msgid "Armagh"
-msgstr "Aragón"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-#, fuzzy
-msgid "Cavan"
-msgstr "Katalansk"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-#, fuzzy
-msgid "Clare"
-msgstr "Cáceres"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-#, fuzzy
-msgid "Cork"
-msgstr "eller"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-#, fuzzy
-msgid "Derry"
-msgstr "februar"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-#, fuzzy
-msgid "Donegal"
-msgstr "én"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-#, fuzzy
-msgid "Down"
-msgstr "Devon"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-#, fuzzy
-msgid "Dublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-#, fuzzy
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-#, fuzzy
-msgid "Galway"
-msgstr "Galicia"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-#, fuzzy
-msgid "Kerry"
-msgstr "februar"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-#, fuzzy
-msgid "Louth"
-msgstr "Logg ut"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-#, fuzzy
-msgid "Mayo"
-msgstr "mai"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-#, fuzzy
-msgid "Meath"
-msgstr "Metadata"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-#, fuzzy
-msgid "Monaghan"
-msgstr "Logg inn igjen"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-#, fuzzy
-msgid "Roscommon"
-msgstr "kommentar"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-#, fuzzy
-msgid "Sligo"
-msgstr "Shiga"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-#, fuzzy
-msgid "Tyrone"
-msgstr "Tirol"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-#, fuzzy
-msgid "Westmeath"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-#, fuzzy
-msgid "Wexford"
-msgstr "ons"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Oppgi et postnummer på formen XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Oppgi et gyldig islandsk identifikasjonsnummer på formen XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Det islandsk identifikasjonsnummer er ugyldig."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Oppgi et gyldig italiensk personnummer."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Oppgi et gyldig VAT-nummer."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Oppgi et postnummer på formen XXXXXXX eller XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Oppgi et gyldig Kuwaiti Civil ID-nummer."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Oppgi et gyldig SoFi-nummer."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Oppgi et gyldig norsk personnummer."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Feltet krever åtte siffer."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Feltet krever 11 siffer."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "National Identification Number består av 11 siffer."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Feil kontrollsum for National Identification Number."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Oppgi et NIP på formen XXX-XXX-XX-XX eller XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Ugyldig kontrollsum for NIP."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "National Business Register Number (REGON) består av 9 eller 14 siffer."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Ugyldig kontrollsum for National Business Register Number (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Oppgi et postnummer på formen XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Oppgi et postnummer på formen XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Telefonnummer må ha 9 siffer, eller starte med + eller 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Oppgi et gyldig CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Oppgi et gyldig CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Oppgi et gyldig IBAN på formen ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonnummeret må være på formen XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Oppgi et postnummer på formen XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Oppgi et gyldig svensk organisasjonsnummer."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Oppgi et gyldig svensk personnummer."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Oppgi et gyldig svensk postnummer på formen XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banská Bystrica-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Košice-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešov-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenčín-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilina-regionen"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Stor-London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Stor-Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orknøyene"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Ytre Hebridene"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Nord-Irland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Skottland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Oppgi et postnummer på formen XXXXX eller XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonnummeret må være på formen XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Oppgi et gyldig amerikansik Social Security-nummer på formen XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Oppgi en amerikansk stat eller et område"
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stat (i USA, to store bokstaver)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Oppgi gyldig CI på formen X.XXX.XXX-X,XXXXXXX-X eller XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Oppgi et gyldig CI-nummer."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Oppgi et gyldig South African ID-nummer."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "\"lazy\" melding"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "omadresser fra"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Dette bør være en fullstendig sti uten domenenavn. Eksempel: '/hendelser/"
-"finn/"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "omadresser til"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Dette kan enten være en fullstendig sti (som over), eller en fullstendig "
-"nettadresse som starter med 'http://'"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "omadressering"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "omadresseringer"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sesjonsnøkkel"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sesjonsdata"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "utløpsdato"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesjon"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesjoner"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domenenavn"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "visningsnavn"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "nettsteder"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Oppgi en gyldig verdi."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Oppgi en gyldig nettadresse."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Nettadressen fører til en side som ikke eksisterer."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Oppgi en gyldig 'slug' bestående av bokstaver, nummer, understreker eller "
-"bindestreker."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Oppgi en gyldig IPv4-adresse."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Oppgi kun tall adskilt med komma."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Verdien må være %(limit_value)s (den er %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Verdien må være mindre enn eller lik som %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Verdien må være større enn eller lik som %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "Verdien må minimum ha %(limit_value)d tegn (den har %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "Verdien kan maksimalt ha %(limit_value)d tegn (den er %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s må være unik for %(date_field)s %(lookup)s."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s med %(field_label)s finnes allerede."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Verdien %r er ikke et gyldig valg."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Feltet kan ikke være tomt."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Feltet kan ikke være blankt."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Felt av typen: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Heltall"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Verdien må være et heltall."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Verdien må være True eller False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolsk (True eller False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Tekst (opp til %(max_length)s tegn)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Heltall adskilt med komma"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Dato (uten tid)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Oppgi en gyldig dato på formen ÅÅÅÅ-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ugyldig dato: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Oppgi dato og tid på formen ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Dato (med tid)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Verdien må være et desimaltall."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Desimaltall"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-postadresse"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Filsti"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Verdien må være et flyttall."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Flyttall"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Stort (8 byte) heltall"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Verdien må være None, True eller False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolsk (True, False eller None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Tekst"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Tid"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Oppgi tiden på formen TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML-tekst"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Modell %(model)s med primærnøkkelen %(pk)r finnes ikke."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Fremmednøkkel (type bestemmes av relatert felt)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "En-til-en-relasjon"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Mange-til-mange-relasjon"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mer enn en."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Oppgi gyldige %(self)s-ID-er. Verdien %(value)r er ugyldig."
-msgstr[1] "Oppgi gyldige %(self)s-ID-er. Verdiene %(value)r er ugyldige."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Feltet er påkrevet."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Oppgi et heltall."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Oppgi et tall."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Verdien kan ikke ha mer enn %s siffer totalt."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Verdien kan ikke ha mer enn %s desimaler."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Verdien kan ikke ha mer enn %s siffer foran komma."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Oppgi en gyldig dato."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Oppgi et gyldig tidspunkt."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Oppgi gyldig dato og tidspunkt."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Ingen fil ble sendt. Sjekk \"encoding\"-typen på skjemaet."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Ingen fil ble sendt."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Filen er tom."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Filnavnet kan maksimalt ha %(max)d tegn (det har %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Last opp et gyldig bilde. Filen du lastet opp var ødelagt eller ikke et "
-"bilde."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Velg et gyldig valg. %(value)s er ikke et av de tilgjengelige valgene."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Oppgi en liste med verdier."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Rekkefølge"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Vennligst korriger duplisert data for %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Vennligst korriger duplisert data for %(field)s, som må være unik."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Vennligst korriger duplisert data for %(field_name)s, som må være unik for %"
-"(lookup)s i %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Vennligst korriger de dupliserte verdiene nedenfor."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Primærnøkkelen er ikke den samme som foreldreinstansens primærnøkkel."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Velg et gyldig valg. Valget er ikke et av de tilgjengelige valgene."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Velg et gyldig valg. %s er ikke et av de tilgjengelige valgene."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" er ikke en gyldig verdi for en primærnøkkel."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "ja,nei,kanskje"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "midnatt"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "12:00"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "mandag"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "tirsdag"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "onsdag"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "torsdag"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "fredag"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "lørdag"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "søndag"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "man"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "tirs"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "ons"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "tors"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "fre"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "lør"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "søn"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februar"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "mars"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "mai"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "august"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "desember"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "des"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "des."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "eller"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "år"
-msgstr[1] "år"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "måned"
-msgstr[1] "måneder"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "uke"
-msgstr[1] "uker"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dag"
-msgstr[1] "dager"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "time"
-msgstr[1] "timer"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minutt"
-msgstr[1] "minutter"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutter"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. F Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s ble opprettet."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s ble oppdatert."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s ble slettet."
diff --git a/parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 7b063e7..0000000
--- a/parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 74161a5..0000000
--- a/parts/django/django/conf/locale/nb/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,119 +0,0 @@
-# Norwegian (Bokmål) translation of Django Javascript
-# Copyright (C) 2005 and beyond
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2010-03-11 18:06+0100\n"
-"Last-Translator: Christian Mikalsen and Jon Lønne\n"
-"Language-Team: Norsk <no@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Tilgjengelige %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Velg alle"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Ny"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Slett"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valgte %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Velg ditt valg og klikk "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Fjern alle"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januar Februar Mars April Mai Juni Juli August September Oktober November "
-"Desember"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M T O T F L"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Vis"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Skjul"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:50
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Now"
-msgstr "Nå"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:54
-msgid "Clock"
-msgstr "Klokke"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Choose a time"
-msgstr "Velg et klokkeslett"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "Midnight"
-msgstr "Midnatt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "6 a.m."
-msgstr "06:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-msgid "Noon"
-msgstr "12:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "I går"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "I morgen"
diff --git a/parts/django/django/conf/locale/nb/__init__.py b/parts/django/django/conf/locale/nb/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/nb/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/nb/formats.py b/parts/django/django/conf/locale/nb/formats.py
deleted file mode 100644
index fbc6142..0000000
--- a/parts/django/django/conf/locale/nb/formats.py
+++ /dev/null
@@ -1,34 +0,0 @@
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%j.%m.%Y', '%j.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06'
- '%Y-%m-%j', # '2006-10-25',
- # '%j. %b %Y', '%j %b %Y', # '25. okt 2006', '25 okt 2006'
- # '%j. %b. %Y', '%j %b. %Y', # '25. okt. 2006', '25 okt. 2006'
- # '%j. %B %Y', '%j %B %Y', # '25. oktober 2006', '25 oktober 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%Y-%m-%j', # '2006-10-25'
- '%j.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%j.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%j.%m.%Y', # '25.10.2006'
- '%j.%m.%y %H:%M:%S', # '25.10.06 14:30:59'
- '%j.%m.%y %H:%M', # '25.10.06 14:30'
- '%j.%m.%y', # '25.10.06'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/nl/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/nl/LC_MESSAGES/django.mo
deleted file mode 100644
index ae72be9..0000000
--- a/parts/django/django/conf/locale/nl/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/nl/LC_MESSAGES/django.po b/parts/django/django/conf/locale/nl/LC_MESSAGES/django.po
deleted file mode 100644
index 8f56114..0000000
--- a/parts/django/django/conf/locale/nl/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4443 +0,0 @@
-# Dutch translation for Django.
-# Copyright (C) 2008, Django Software Foundation
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-08 09:21+0200\n"
-"PO-Revision-Date: 2008-08-28 13:58+0100\n"
-"Last-Translator: Rudolph Froger <rudolphfroger@estrate.nl>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabisch"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Bengaals"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgaars"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Catalaans"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "Tjechisch"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Welsh"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Deens"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "Duits"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "Grieks"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "Engels"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "Spaans"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Ests"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Argentijns Spaans"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "Baskisch"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "Perzisch"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "Fins"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Frans"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Iers"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galicisch"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Hongaars"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "Hebreews"
-
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "Kroatisch"
-
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "IJslands"
-
-#: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italiaans"
-
-#: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "Japans"
-
-#: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "Georgisch"
-
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Koreaans"
-
-#: conf/global_settings.py:72
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:73
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Lets"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Litouws"
-
-#: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Macedonisch"
-
-#: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Nederlands"
-
-#: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Noors"
-
-#: conf/global_settings.py:79
-msgid "Polish"
-msgstr "Pools"
-
-#: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr "Portugees"
-
-#: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "Braziliaans Portugees"
-
-#: conf/global_settings.py:82
-msgid "Romanian"
-msgstr "Roemeens"
-
-#: conf/global_settings.py:83
-msgid "Russian"
-msgstr "Russisch"
-
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "Slovaaks"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "Sloveens"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "Servisch"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "Zweeds"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "Tamil"
-
-#: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "Telegu"
-
-#: conf/global_settings.py:90
-msgid "Thai"
-msgstr "Thais"
-
-#: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "Turks"
-
-#: conf/global_settings.py:92
-msgid "Ukrainian"
-msgstr "Oekraïens"
-
-#: conf/global_settings.py:93
-msgid "Simplified Chinese"
-msgstr "Vereenvoudigd Chinees"
-
-#: conf/global_settings.py:94
-msgid "Traditional Chinese"
-msgstr "Traditioneel Chinees"
-
-#: contrib/admin/actions.py:60
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d %(items)s succesvol verwijderd."
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
-msgid "Are you sure?"
-msgstr "Weet u het zeker?"
-
-#: contrib/admin/actions.py:85
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Verwijder geselecteerde %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Op %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Alle"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Elke datum"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Vandaag"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Afgelopen zeven dagen"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Deze maand"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Dit jaar"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
-msgid "No"
-msgstr "Nee"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
-msgid "Unknown"
-msgstr "Onbekend"
-
-#: contrib/admin/helpers.py:14
-msgid "Action:"
-msgstr "Actie:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "actietijd"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "object-id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "object-repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "actievlag"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "wijzig bericht"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "logregistratie"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "logregistraties"
-
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
-msgid "None"
-msgstr "Geen"
-
-#: contrib/admin/options.py:519
-#, python-format
-msgid "Changed %s."
-msgstr "%s gewijzigd."
-
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
-msgid "and"
-msgstr "en"
-
-#: contrib/admin/options.py:524
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" toegevoegd."
-
-#: contrib/admin/options.py:528
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s aangepast voor %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:533
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" verwijderd."
-
-#: contrib/admin/options.py:537
-msgid "No fields changed."
-msgstr "Geen velden gewijzigd."
-
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "De %(name)s \"%(obj)s\" is toegevoegd."
-
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
-msgid "You may edit it again below."
-msgstr "U kunt dit hieronder weer bewerken."
-
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
-#, python-format
-msgid "You may add another %s below."
-msgstr "U kunt hieronder de volgende %s toevoegen."
-
-#: contrib/admin/options.py:634
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Het wijzigen van %(name)s \"%(obj)s\" is geslaagd."
-
-#: contrib/admin/options.py:642
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "De %(name)s \"%(obj)s\" was toegevoegd. U kunt het hieronder wijzigen."
-
-#: contrib/admin/options.py:773
-#, python-format
-msgid "Add %s"
-msgstr "Toevoegen %s"
-
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s object met primaire sleutel %(key)r bestaat niet."
-
-#: contrib/admin/options.py:861
-#, python-format
-msgid "Change %s"
-msgstr "Wijzig %s"
-
-#: contrib/admin/options.py:905
-msgid "Database error"
-msgstr "Databasefout"
-
-#: contrib/admin/options.py:941
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s is succesvol gewijzigd."
-msgstr[1] "%(count)s %(name)s zijn succesvol gewijzigd."
-
-#: contrib/admin/options.py:1020
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "De verwijdering van %(name)s \"%(obj)s\" is geslaagd."
-
-#: contrib/admin/options.py:1057
-#, python-format
-msgid "Change history: %s"
-msgstr "Wijzigingsgeschiedenis: %s"
-
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Voer een correcte gebruikersnaam en wachtwoord in. Let op, de velden zijn "
-"hoofdletter-gevoelig."
-
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Uw sessie is verlopen, meld u opnieuw aan."
-
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Het lijkt erop dat uw browser geen cookies accepteert. Zet het gebruik van "
-"cookies aan in uw browser, laad deze pagina nogmaals en probeer het opnieuw."
-
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Gebruikersnamen mogen geen '@' teken bevatten."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Uw e-mailadres is niet uw gebruikersnaam. Probeer '%s' eens."
-
-#: contrib/admin/sites.py:367
-msgid "Site administration"
-msgstr "Sitebeheer"
-
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Inloggen"
-
-#: contrib/admin/sites.py:426
-#, python-format
-msgid "%s administration"
-msgstr "%s beheer"
-
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Eén of meer %(fieldname)s in %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Eén of meer %(fieldname)s in %(name)s:"
-
-#: contrib/admin/widgets.py:71
-msgid "Date:"
-msgstr "Datum:"
-
-#: contrib/admin/widgets.py:71
-msgid "Time:"
-msgstr "Tijd:"
-
-#: contrib/admin/widgets.py:95
-msgid "Currently:"
-msgstr "Huidige:"
-
-#: contrib/admin/widgets.py:95
-msgid "Change:"
-msgstr "Wijziging:"
-
-#: contrib/admin/widgets.py:124
-msgid "Lookup"
-msgstr "Opzoeken"
-
-#: contrib/admin/widgets.py:236
-msgid "Add Another"
-msgstr "Voeg nog één toe"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Pagina niet gevonden"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Onze excuses, maar de gevraagde pagina bestaat niet."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Voorpagina"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serverfout"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serverfout (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serverfout <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Er is een fout opgetreden. Dit is inmiddels doorgegeven aan de sitebeheerder "
-"via e-mail en zal spoedig worden gerepareerd. Bedankt voor uw geduld."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Voer de geselecteerde actie uit"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Voer Uit"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr "Welkom,"
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentatie"
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "Wachtwoord wijzigen"
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "Afmelden"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django sitebeheer"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Djangobeheer"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Toevoegen"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Geschiedenis"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
-msgid "View on site"
-msgstr "Toon op site"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Herstel de fout hieronder."
-msgstr[1] "Herstel de fouten hieronder."
-
-#: contrib/admin/templates/admin/change_list.html:46
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s toevoegen"
-
-#: contrib/admin/templates/admin/change_list.html:65
-msgid "Filter"
-msgstr "Filter"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
-msgid "Delete"
-msgstr "Verwijderen"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Het verwijderen van %(object_name)s '%(escaped_object)s' zal ook "
-"gerelateerde objecten verwijderen. Echter u heeft geen rechten om de "
-"volgende typen objecten te verwijderen:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Weet u zeker dat u %(object_name)s \"%(escaped_object)s\" wilt verwijderen? "
-"Alle volgende objecten worden verwijderd:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, ik weet het zeker"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Verwijder meerdere objecten"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Het verwijderen van %(object_name)s zal ook gerelateerde objecten "
-"verwijderen. Echter, u heeft geen rechten om de volgende typen objecten te "
-"verwijderen:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
-msgstr ""
-"Weet u zeker dat u %(object_name)s objecten wilt verwijderen? Alle volgende "
-"objecten worden verwijderd:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Op %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Beschikbare modellen in de %(name)s toepassing."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Wijzigen"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "U heeft geen rechten om iets te wijzigen."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Recente acties"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mijn acties"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Geen beschikbaar"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Onbekende inhoud"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Er is iets mis met de database. Verzeker u ervan dat de benodigde tabellen "
-"zijn aangemaakt en dat de database toegankelijk is voor de juiste gebruiker."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Gebruikersnaam:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Wachtwoord:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datum/tijd"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Gebruiker"
-
-#: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
-msgid "Action"
-msgstr "Actie"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j-n-Y H:i"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Dit object heeft geen wijzigingsgeschiedenis. Het is mogelijk niet via de "
-"beheersite toegevoegd."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Alles tonen"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Opslaan"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Zoek"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultaat"
-msgstr[1] "%(counter)s resultaten"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s totaal"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Opslaan als nieuw item"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Opslaan en nieuwe toevoegen"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Opslaan en opnieuw bewerken"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Vul allereerst een gebruikersnaam en wachtwoord in. Vervolgens kunt u de "
-"andere opties instellen."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Gebruikersnaam"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Wachtwoord"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Wachtwoord (nogmaals)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Vul hetzelfde wachtwoord als hierboven in, ter bevestiging."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Geef een nieuw passwoord voor gebruiker <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Verwijderen?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Bedankt voor de aanwezigheid op de site vandaag."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Log opnieuw in"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Wachtwoordwijziging"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Wachtwoord wijzigen is geslaagd"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Uw wachtwoord is gewijzigd."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Vanwege de beveiliging moet u uw oude en twee keer uw nieuwe wachtwoord "
-"invoeren, zodat we kunnen controleren of er geen typefouten zijn gemaakt."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Oud wachtwoord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nieuw wachtwoord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Bevestig wachtwoord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Wijzig mijn wachtwoord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Wachtwoord hersteld"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Wachtwoord herstellen volooid"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Uw wachtwoord is ingesteld. U kunt nu verder gaan en inloggen."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Bevestiging wachtwoord herstellen"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Voer nieuw wachtwoord in"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Voer het nieuwe wachtwoord twee keer in, zodat we kunnen controleren of er "
-"geen typefouten zijn gemaakt."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Wachtwoord herstel mislukt"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"De link voor het herstellen van het wachtwoord is ongeldig, misschien omdat "
-"de link al eens is gebruikt. Vraag opnieuw het wachtwoord herstellenaan."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Wachtwoord herstel geslaagd"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"We hebben u de instructies voor het instellen van een nieuw wachtwoord per e-"
-"mail gestuurd. U zou dit spoedig moeten ontvangen."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "U krijgt deze e-mail omdat u om een nieuw wachtwoord heeft gevraagd"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "voor uw gebruikersaccount op %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Gaat u naar de volgende pagina en kies een nieuw wachtwoord:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Uw gebruikersnaam, mocht u deze vergeten zijn:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Bedankt voor het gebruik van onze site!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Het %(site_name)s team"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Uw wachtwoord vergeten? Geef uw e-mailadres op en we sturen u per e-mail de "
-"instructies voor het instellen van een nieuw wachtwoord."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mailadres:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Herstel mijn wachtwoord"
-
-#: contrib/admin/templatetags/admin_list.py:299
-msgid "All dates"
-msgstr "Alle data"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Selecteer %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Selecteer %s om te wijzigen"
-
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
-msgid "site"
-msgstr "site"
-
-#: contrib/admin/views/template.py:39
-msgid "template"
-msgstr "sjabloon"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Toepassing %r niet gevonden"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r niet gevonden in toepassing %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "het gerelateerde `%(app_label)s.%(data_type)s` object"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "gerelateerde `%(app_label)s.%(object_name)s` objecten"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "alle %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "aantal %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Velden van %s objecten"
-
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Geheel getal"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (True danwel False)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Karakterreeks (hooguit %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Komma-gescheiden gehele getallen"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Datum (zonder tijd)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Datum (met tijd)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Decimaal getal"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "E-mailadres"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Bestandspad"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Decimaal getal"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP-adres"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (True, False of None)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relatie tot oudermodel"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Telefoonnummer"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Tekst"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Tijd"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Staat van de VS (twee hoofdletters)"
-
-#: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "XML-tekst"
-
-#: contrib/admindocs/views.py:387
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s lijkt geen urlpattern-object te zijn"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Documentatie bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Om bookmarklets te installeren, sleep de link naar uw "
-"bladwijzers\n"
-"werkbalk, of rechtermuis klik op de link en voeg het toe aan de bladwijzer. "
-"Nu kan\n"
-"de bookmarklet vanuit elke pagina op de site worden gekozen. Let erop dat "
-"het soms\n"
-"noodzakelijk is dat de computer van waaruit de pagina wordt bekeken intern "
-"is.\n"
-"(Raadpleeg uw systeembeheerder of uw computer zich op het interne netwerk "
-"bevind).<p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentatie voor deze pagina"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Springt vanuit elke pagina naar de documentatie voor de view die gegenereerd "
-"wordt door die pagina."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Toon object-ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Toont het content-type en unieke ID voor pagina's die een enkel object "
-"voorstellen."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Bewerk dit object (huidig venster)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Gaat naar de beheerpagina voor pagina's die een enkel object weergeven."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Bewerk dit object (nieuw venster)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Zoals hierboven, maar opent de beheerpagina in een nieuw venster."
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "Persoonlijke informatie"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "Rechten"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "Belangrijke datums"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "Groepen"
-
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Gebruiker toevoegen"
-
-#: contrib/auth/admin.py:106
-msgid "Password changed successfully."
-msgstr "Wachtwoord wijzigen is geslaagd."
-
-#: contrib/auth/admin.py:112
-#, python-format
-msgid "Change password: %s"
-msgstr "Wijzig wachtwoord: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Verplicht. 30 tekens of minder. Alleen alfanumerieke tekens (letters, "
-"cijfers en liggende strepen)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Deze waarde mag alleen letters, getallen en liggende strepen bevatten."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Bevestiging wachtwoord"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "Een gebruiker met deze gebruikersnaam bestaat al."
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
-msgid "The two password fields didn't match."
-msgstr "De twee ingevulde wachtwoorden zijn niet gelijk."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "Dit account is inactief."
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Het lijkt erop dat uw browser geen cookies accepteert. Om in te loggen "
-"moeten cookies worden geaccepteerd."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Dat e-mailadres heeft geen gerelateerd gebruikersaccount. Weet u zeker dat u "
-"zich heeft geregistreerd?"
-
-#: contrib/auth/forms.py:135
-#, python-format
-msgid "Password reset on %s"
-msgstr "Wachtwoord hersteld op %s"
-
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nieuw wachtwoord"
-
-#: contrib/auth/forms.py:144
-msgid "New password confirmation"
-msgstr "Nieuw wachtwoord bevestigen"
-
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Oud wachtwoord"
-
-#: contrib/auth/forms.py:177
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"Uw oude wachtwoord is niet correct ingevoerd. Voert u het alstublieft "
-"opnieuw in."
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
-msgid "name"
-msgstr "naam"
-
-#: contrib/auth/models.py:65
-msgid "codename"
-msgstr "codenaam"
-
-#: contrib/auth/models.py:68
-msgid "permission"
-msgstr "recht"
-
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
-msgid "permissions"
-msgstr "rechten"
-
-#: contrib/auth/models.py:90
-msgid "group"
-msgstr "groep"
-
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
-msgid "groups"
-msgstr "groepen"
-
-#: contrib/auth/models.py:128
-msgid "username"
-msgstr "gebruikersnaam"
-
-#: contrib/auth/models.py:129
-msgid "first name"
-msgstr "voornaam"
-
-#: contrib/auth/models.py:130
-msgid "last name"
-msgstr "achternaam"
-
-#: contrib/auth/models.py:131
-msgid "e-mail address"
-msgstr "e-mailadres"
-
-#: contrib/auth/models.py:132
-msgid "password"
-msgstr "wachtwoord"
-
-#: contrib/auth/models.py:132
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Gebruik '[algo]$[salt]$[hexdigest]' of gebruik het <a href=\"password/"
-"\">wachtwoord wijzigen formulier</a>."
-
-#: contrib/auth/models.py:133
-msgid "staff status"
-msgstr "stafstatus"
-
-#: contrib/auth/models.py:133
-msgid "Designates whether the user can log into this admin site."
-msgstr "Bepaalt of de gebruiker kan inloggen op deze beheersite."
-
-#: contrib/auth/models.py:134
-msgid "active"
-msgstr "actief"
-
-#: contrib/auth/models.py:134
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Bepaalt of deze gebruiker als actief dient te worden behandeld. U kunt dit "
-"uitvinken in plaats van een gebruiker te verwijderen."
-
-#: contrib/auth/models.py:135
-msgid "superuser status"
-msgstr "supergebruikerstatus"
-
-#: contrib/auth/models.py:135
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Bepaalt dat deze gebruiker alle rechten heeft, zonder deze expliciet toe te "
-"wijzen."
-
-#: contrib/auth/models.py:136
-msgid "last login"
-msgstr "laatste inlog"
-
-#: contrib/auth/models.py:137
-msgid "date joined"
-msgstr "datum toegetreden"
-
-#: contrib/auth/models.py:139
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Bovenop de rechten welke handmatig zijn toegekend, krijgt deze gebruiker ook "
-"alle rechten van de groepen waar hij of zij deel van uitmaakt."
-
-#: contrib/auth/models.py:140
-msgid "user permissions"
-msgstr "gebruikersrechten"
-
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "gebruiker"
-
-#: contrib/auth/models.py:145
-msgid "users"
-msgstr "gebruikers"
-
-#: contrib/auth/models.py:301
-msgid "message"
-msgstr "bericht"
-
-#: contrib/auth/views.py:56
-msgid "Logged out"
-msgstr "Afmelden"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
-msgid "Enter a valid e-mail address."
-msgstr "Geef een geldig e-mailadres op."
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "Inhoud"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s opmerkingen"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Laatste opmerkingen op %(site_name)s"
-
-#: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
-msgid "Name"
-msgstr "Naam"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-mailadres"
-
-#: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
-msgid "Comment"
-msgstr "Opmerking"
-
-#: contrib/comments/forms.py:173
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pas op uw taalgebruik! Gebruik van %s niet toegestaan."
-msgstr[1] ""
-"Pas op uw taalgebruik! Gebruik van de woorden %s is niet toegestaan."
-
-#: contrib/comments/forms.py:180
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Indien u hier iets invuld dan wordt uw opmerking behandeld als spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
-msgid "content type"
-msgstr "inhoudstype"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "object-ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "naam gebruiker"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "e-mailadres gebruiker"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL gebruiker"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "opmerking"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "datum/tijd toegevoegd"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "is openbaar"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Vink dit vakje uit zodat de opmerking niet meer zichtbaar is op de site."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "is verwijderd"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Vink dit vak aan indien de opmerking niet gepast is. Een \"Dit commentaar is "
-"verwijderd\" bericht wordt dan getoond."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "opmerkingen"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Deze opmerking is gepost door een ingelogde gebruiker en daardoor is de naam "
-"niet aan te passen."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Deze opmerking is gepost door een ingelogde gebruiker en daardoor is het e-"
-"mailadres niet aan te passen."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Geplaatst door %(user)s op %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "vlag"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "datum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "opmerking vlag"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "opmerking vlaggen"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Een opmerking toestaan"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Weet u zeker dat u deze opmerking openbaar wilt maken?"
-
-#: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
-msgid "Approve"
-msgstr "Goedkeuren"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Bedankt voor het goedkeuren"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Bedankt dat u de tijd heeft genomen om de kwaliteit van de discussie op onze "
-"site te verbeteren"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Een opmerking verwijderen"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Weet u zeker dat u deze opmerking wilt verwijderen?"
-
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Verwijderen"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Bedankt voor het verwijderen"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Vlag deze opmerking"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Weet u zeker dat u deze opmerking wilt vlaggen?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Vlag"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Bedankt voor het vlaggen"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Bericht"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Voorbeeld"
-
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Opmerking moderatie wachtrij"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Geen opmerkingen om te modereren"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-mail"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Geauthenticeerd?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP-adres"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Berichtdatum"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "ja"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "nee"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Bedankt voor uw opmerking"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Bedankt voor uw opmerking"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Toon voorbeeld van uw opmerking"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Herstel de fout hieronder"
-msgstr[1] "Herstel de fouten hieronder"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Plaats uw opmerking"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "of maak aanpassingen"
-
-#: contrib/contenttypes/models.py:70
-msgid "python model class name"
-msgstr "klassenaam van pythonmodel"
-
-#: contrib/contenttypes/models.py:75
-msgid "content types"
-msgstr "inhoudstypen"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Voorbeeld: '/about/contact/'. Zorg voor slashes aan het begin en eind."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Deze waarde mag alleen letters, cijfers, liggende strepen en schuine strepen "
-"bevatten."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Geavanceerde opties"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titel"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "inhoud"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "opmerkingen toestaan"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "sjabloonnaam"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Voorbeeld: 'flatpages/contact_page.html'. Als deze niet is opgegeven, dan "
-"wordt 'flatpages/default.html' gebruikt."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "registratie verplicht"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Indien dit is aangevinkt kunnen alleen ingelogde gebruikers deze pagina "
-"bekijken."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "platte pagina"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "platte pagina's"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Onze excuses, maar uw formulier is verlopen. Gaat u alstublieft verder met "
-"het invullen van het formulier op deze pagina."
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Geen geometrische waarde opgegeven."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Ongeldige geometrie waarde."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Ongeldig geometrie type."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Er is een fout opgetreden bij het omvormen van de geometrie naar de SRID van "
-"het geometrie veld."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f miljoen"
-msgstr[1] "%(value).1f miljoen"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miljard"
-msgstr[1] "%(value).1f miljard"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f biljoen"
-msgstr[1] "%(value).1f biljoen"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "één"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "twee"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "drie"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "vier"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "vijf"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "zes"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "zeven"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "acht"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "negen"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "vandaag"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "morgen"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "gisteren"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Geef een postcode op volgens het NNNN of ANNNNAAA formaat."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Dit veld dient alleen cijfers te bevatten."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Dit veld dient 7 of 8 cijfers te zijn."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Geef een geldige CUIT op in het XX-XXXXXXXX-X of XXXXXXXXXXXX formaat."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "Ongeldige CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Lager Australië"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Hoger Australië"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wenen"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Geef een postcode op in het formaat XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Geef een geldig Oostenrijks Sociaalnummer op in het XXX-XX-XXXX formaat."
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Geef een vier cijferige postcode op."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Geef een postcode op in het formaat XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefoonnummers dienen volgens het XX-XXXX-XXXX formaat te zijn."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Selecteer een geldige braziliaanse staat. Uw keuze is niet geldig."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Ongeldig CPF nummer."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Dit veld dient maximaal 11 cijfers of 14 letters te bevatten."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Ongeldig CNPJ nummer."
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Dit veld vereist minimaal 14 cijfers."
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Geef een postcode op in het formaat XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Geef een geldig Canadees Sociaal Verzekeringsnummer op volgens het XXX-XXX-"
-"XXX formaat."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stad"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genève"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Geef een geldig Zwitsers identiteits- of paspoortnummer op volgens het "
-"X1234567<0 of 1234567890 formaat"
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Geef een geldige Chileense RUT op."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Geef een geldige Chileense RUT op. Het formaat is XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "De Chileense RUT is ongeldig."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praag"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Midden-Bohemen"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Zuid-Bohemen"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Ústí nad Labem"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Králové"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysočina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Zuid-Moravië"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlín"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravië-Silezië"
-
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Geef een postcode op in het formaat XXXXX of XXX XX."
-
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Geef een geboorte nummer op in het formaat XXXXXX/XXXX or XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Ongeldige optionele parameter Geslacht, geldige waarden zijn 'f' en 'm'"
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Enter a valid birth number."
-msgstr "Geef een geldig geboorte nummer."
-
-#: contrib/localflavor/cz/forms.py:106
-msgid "Enter a valid IC number."
-msgstr "Geef een geldig IC nummer op."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Beieren"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlijn"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Nedersaksen"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Noord Rijn-Westfalen"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rijnland-Palts"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saksen"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saksen-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Sleeswijk-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thüringen"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Geef een postcode op in het formaat XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Geef een geldig Duits identiteitsnummer op volgens het XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X formaat."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Balearen"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencië"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusië"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Prinsdom Asturië"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearen"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskenland"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canarische Eilanden"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilië-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilië en León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonië"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicië"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Vul een postcode in volgens het 01XXX - 52XXX formaat."
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Geef een geldig telefoonnummer op in één van de volgende formaten: "
-"6XXXXXXXX, 8XXXXXXXX of 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Geef een geldige NIF, NIE of CIF op."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Geef een geldige NIF of NIE op."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Ongeldig controlegetal voor NIF."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Ongeldig controlegetal voor NIE."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Ongeldig controlegetal voor CIF."
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Geef een geldig bankrekeningnummer op in het formaat XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Ongeldig controlegetal voor het bankrekeningnummer."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Geef een geldig Fins sociaal nummer op."
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Geef een geldige postcode op in het formaat XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Geef een geldig IJslands identificatienummer op. Het formaat is XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Het IJslandse identificatienummer is niet geldig."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Geef een geldige postcode op."
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Geef een geldig Sociaal Nummer op."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Geef een geldig BTW nummer op."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Geef een geldige postcode op in het formaat XXXXXXX of XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "de Staat Mexico"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Geef een geldige postcode op"
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Geef een geldig telefoonnummer op"
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Geef een geldig SoFi nummer"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Geef een geldig Noors Sociaal Nummer op."
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Dit veld vereist 8 cijfers."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Dit veld vereist 11 cijfers."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Het Nationaal Identificatie Nummer bestaat uit 11 cijfers."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Verkeerd controlecijfer voor het Nationaal Identificatie Nummer."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Geef een fiscaal nummer (NIP) op volgens het formaat XXX-XXX-XX-XX or XX-XX-"
-"XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Verkeerd controlecijfer voor het fiscaal nummer (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Het Nationaal Zakelijk Registratie Nummer (REGON) bestaat uit 9 of 14 "
-"cijfers."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Verkeerd controlecijfer op het Nationaal Zakelijk Registratie Nummer (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Geef een postcode op in het formaat XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Neder-Silezië"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Klein-Polen"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Groot-Polen"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Geef een geldige CIF op."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Geef een geldige CNP op."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-"Geef een geldige IBAN volgens het ROXX-XXXX-XXXX-XXXX-XXXX-XXXX formaat"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefoonnummers moeten volgens het XXXX-XXXXXX formaat te zijn."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Geef een geldige postcode in het formaat XXXXXX"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Regio Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Regio Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Regio Košice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Regio Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Regio Prešov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Regio Trenčín"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Regio Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Regio Žilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Geef een geldige postcode op."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall en de Scilly-Eilanden"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Oost-Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Groot-Londen"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Groot-Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "Noord-Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Zuid-Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West-Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West-Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West-Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Graafschap Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Graafschap Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Graafschap Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Graafschap Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Graafschap Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Graafschap Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Zuid-Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West-Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Schotse-Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Centraal-Schotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries en Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkneyeilanden"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetlandeilanden"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Buiten-Hebriden"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Engeland"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Noord-Ierland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Schotland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Geef een geldige postcode op volgens het XXXXX of XXXXX-XXXX formaat."
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Geef een geldig V.S. Sociaalnummer op in het XXX-XX-XXXX formaat."
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Geef een geldig Zuid-Afrikaans identificatienummer op"
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Geef een geldige Zuid-Afrikaanse postcode op"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Oost-Kaap"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Vrijstaat"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Noord-Kaap"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Noordwest"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "West-Kaap"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "omgeleid via"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Dit moet een absoluut pad zijn, zonder de domeinnaam. Bijvoorbeeld: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "omleiden naar"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Dit kan een absoluut pad (zoals hierboven) zijn of een volledige URL "
-"beginnend met 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "omleiding"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "omleidingen"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sessiesleutel"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sessiegegevens"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "verloopdatum"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sessie"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessies"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domeinnaam"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "weergavenaam"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sites"
-
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "De waarde moet een geheel getal zijn."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "De waarde moet of True (Waar) of False (Onwaar) zijn."
-
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "Dit veld mag niet leeg zijn."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Geef alleen cijfers op, gescheiden door komma's."
-
-#: db/models/fields/__init__.py:474
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Geef een geldige datum in JJJJ-MM-DD formaat."
-
-#: db/models/fields/__init__.py:483
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ongeldige datum: %s"
-
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Geef geldige datum/tijd in JJJJ-MM-DD UU:MM[:ss[.uuuuuu]] formaat."
-
-#: db/models/fields/__init__.py:601
-msgid "This value must be a decimal number."
-msgstr "De waarde moet een decimaal getal zijn."
-
-# Choose 'kommagetal' because it's user input.
-#: db/models/fields/__init__.py:686
-msgid "This value must be a float."
-msgstr "De waarde moet een kommagetal zijn."
-
-#: db/models/fields/__init__.py:746
-msgid "This value must be either None, True or False."
-msgstr "De waarde moet of None (leeg), True (Waar) of False (Onwaar) zijn."
-
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Geef een geldige tijd in UU:MM[:ss[.uuuuuu]] formaat."
-
-#: db/models/fields/related.py:816
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Houd \"Control\", of \"Command\" op een Mac, ingedrukt om meerdere te "
-"selecteren."
-
-#: db/models/fields/related.py:894
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Geef een geldig %(self)s IDs. De waarde %(value)r is ongeldig."
-msgstr[1] "Geef een geldig %(self)s IDs. De waarden %(value)r zijn ongeldig."
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "Dit veld is verplicht."
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Geef een geldige waarde."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Zorg ervoor dat waarde korter is dan %(max)d tekens (huidige lengte %(length)"
-"d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Zorg ervoor dat deze tekst langer is dan %(min)d tekens (huidige lengte %"
-"(length)d)."
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "Geef een geheel getal op."
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Zorg ervoor dat de waarde kleiner of gelijk is aan %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Zorg ervoor de waarde groter of gelijk is aan %s."
-
-#: forms/fields.py:195 forms/fields.py:224
-msgid "Enter a number."
-msgstr "Geef een getal op."
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Zorg dat er minder dan %s cijfers zijn."
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Zorg dat er minder dan %s cijfers na de komma staan."
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Zorg dat er minder dan %s cijfers voor de komma staan."
-
-#: forms/fields.py:288 forms/fields.py:863
-msgid "Enter a valid date."
-msgstr "Geef een geldige datum op."
-
-#: forms/fields.py:322 forms/fields.py:864
-msgid "Enter a valid time."
-msgstr "Geef een geldige tijd op."
-
-#: forms/fields.py:361
-msgid "Enter a valid date/time."
-msgstr "Geef een geldige datum/tijd op."
-
-#: forms/fields.py:447
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Er was geen bestand verstuurd. Controleer het coderingstype van het "
-"formulier."
-
-#: forms/fields.py:448
-msgid "No file was submitted."
-msgstr "Er was geen bestand verstuurd."
-
-#: forms/fields.py:449
-msgid "The submitted file is empty."
-msgstr "Het verstuurde bestand is leeg."
-
-#: forms/fields.py:450
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"De bestandsnaam mag maximaal %(max)d karakters bevatten (dit zijn er nu %"
-"(length)d)."
-
-#: forms/fields.py:483
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Bestand ongeldig. Het bestand dat is gegeven is geen afbeelding of is "
-"beschadigd."
-
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Geef een geldige URL op."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Deze URL lijkt niet te werken."
-
-#: forms/fields.py:625 forms/fields.py:703
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Selecteer een geldige keuze. %(value)s is geen beschikbare keuze."
-
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
-msgid "Enter a list of values."
-msgstr "Geef een lijst op met waardes."
-
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Geef een geldig IPv4-adres op."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Vul een geldigde 'slug' in, bestaande uit letters, cijfers, liggende "
-"streepjes en verbindingsstreepjes."
-
-#: forms/formsets.py:271 forms/formsets.py:273
-msgid "Order"
-msgstr "Volgorde"
-
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s moet uniek zijn voor %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Er bestaat al een %(model_name)s met eenzelfde %(field_label)s."
-
-#: forms/models.py:594
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Verbeter de dubbele gegevens voor %(field)s."
-
-#: forms/models.py:598
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Verbeter de dubbele gegevens voor %(field)s, welke uniek moet zijn."
-
-#: forms/models.py:604
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Verbeter de dubbele gegevens voor %(field_name)s, welke uniek moet zijn voor "
-"de %(lookup)s in %(date_field)s."
-
-#: forms/models.py:612
-msgid "Please correct the duplicate values below."
-msgstr "Verbeter de dubbele waarden hieronder."
-
-#: forms/models.py:867
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"De secundaire sleutel komt niet overeen met de primaire sleutel van de "
-"bovenliggende instantie."
-
-#: forms/models.py:930
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Selecteer een geldige keuze. Deze keuze is niet beschikbaar."
-
-#: forms/models.py:1004
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Selecteer een geldige keuze. %s is geen beschikbare keuze."
-
-#: forms/models.py:1006
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" is geen geldige waarde voor een primaire sleutel."
-
-#: template/defaultfilters.py:767
-msgid "yes,no,maybe"
-msgstr "ja,nee,misschien"
-
-#: template/defaultfilters.py:798
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:800
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:802
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:803
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "middernacht"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "middag"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "maandag"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "dinsdag"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "woensdag"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "donderdag"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "vrijdag"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "zaterdag"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "zondag"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "ma"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "di"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "woe"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "don"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "vrij"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "zat"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "zon"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januari"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februari"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "maart"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "mei"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "augustus"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "december"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mrt"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mei"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dec."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "of"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "jaar"
-msgstr[1] "jaren"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "maand"
-msgstr[1] "maanden"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "week"
-msgstr[1] "weken"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dag"
-msgstr[1] "dagen"
-
-# In the timesince context it is stilistically wrong to use the plural for hour in Dutch.
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "uur"
-msgstr[1] "uur"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuut"
-msgstr[1] "minuten"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuten"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:399
-msgid "DATE_FORMAT"
-msgstr "j-n-Y"
-
-#: utils/translation/trans_real.py:401
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:417
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:418
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "De %(verbose_name)s is succesvol aangemaakt."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "De %(verbose_name)s is succesvol aangepast."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "De %(verbose_name)s is verwijderd."
diff --git a/parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 36d6ee1..0000000
--- a/parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 20df16d..0000000
--- a/parts/django/django/conf/locale/nl/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,118 +0,0 @@
-# Dutch Javascript translations.
-# Copyright (C) 2006
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-27 03:54+0200\n"
-"PO-Revision-Date: 2008-02-27 11:22+0100\n"
-"Last-Translator: Rudolph Froger <rudolphfroger@estrate.nl>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Beschikbare %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Kies allemaal"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Toevoegen"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Verwijderen"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Gekozen %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Selecteer uw keuze(s) en klik "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Allemaal verwijderen"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"januari februari maart april mei juni juli augustus september oktober "
-"november december"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "Z M D W D V Z"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "zondag maandag dinsdag woensdag donderdag vrijdag zaterdag"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Tonen"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Verbergen"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Nu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Klok"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Kies een tijd"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Middernacht"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "Zes uur 's ochtends"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Twaalf uur 's middags"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Annuleren"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Vandaag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Gisteren"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Morgen"
diff --git a/parts/django/django/conf/locale/nl/__init__.py b/parts/django/django/conf/locale/nl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/nl/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/nl/formats.py b/parts/django/django/conf/locale/nl/formats.py
deleted file mode 100644
index cdbedb0..0000000
--- a/parts/django/django/conf/locale/nl/formats.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y' # '20 januari 2009'
-TIME_FORMAT = 'H:i' # '15:23'
-DATETIME_FORMAT = 'j F Y H:i' # '20 januari 2009 15:23'
-YEAR_MONTH_FORMAT = 'F Y' # 'januari 2009'
-MONTH_DAY_FORMAT = 'j F' # '20 januari'
-SHORT_DATE_FORMAT = 'j-n-Y' # '20-1-2009'
-SHORT_DATETIME_FORMAT = 'j-n-Y H:i' # '20-1-2009 15:23'
-FIRST_DAY_OF_WEEK = 1 # Monday (in Dutch 'maandag')
-DATE_INPUT_FORMATS = (
- '%d-%m-%Y', '%d-%m-%y', '%Y-%m-%d', # '20-01-2009', '20-01-09', '2009-01-20'
- # '%d %b %Y', '%d %b %y', # '20 jan 2009', '20 jan 09'
- # '%d %B %Y', '%d %B %y', # '20 januari 2009', '20 januari 09'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '15:23:35'
- '%H.%M:%S', # '15.23:35'
- '%H.%M', # '15.23'
- '%H:%M', # '15:23'
-)
-DATETIME_INPUT_FORMATS = (
- # With time in %H:%M:%S :
- '%d-%m-%Y %H:%M:%S', '%d-%m-%y %H:%M:%S', '%Y-%m-%d %H:%M:%S', # '20-01-2009 15:23:35', '20-01-09 15:23:35', '2009-01-20 15:23:35'
- # '%d %b %Y %H:%M:%S', '%d %b %y %H:%M:%S', # '20 jan 2009 15:23:35', '20 jan 09 15:23:35'
- # '%d %B %Y %H:%M:%S', '%d %B %y %H:%M:%S', # '20 januari 2009 15:23:35', '20 januari 2009 15:23:35'
- # With time in %H.%M:%S :
- '%d-%m-%Y %H.%M:%S', '%d-%m-%y %H.%M:%S', # '20-01-2009 15.23:35', '20-01-09 15.23:35'
- # '%d %b %Y %H.%M:%S', '%d %b %y %H.%M:%S', # '20 jan 2009 15.23:35', '20 jan 09 15.23:35'
- # '%d %B %Y %H.%M:%S', '%d %B %y %H.%M:%S', # '20 januari 2009 15.23:35', '20 januari 2009 15.23:35'
- # With time in %H:%M :
- '%d-%m-%Y %H:%M', '%d-%m-%y %H:%M', '%Y-%m-%d %H:%M', # '20-01-2009 15:23', '20-01-09 15:23', '2009-01-20 15:23'
- # '%d %b %Y %H:%M', '%d %b %y %H:%M', # '20 jan 2009 15:23', '20 jan 09 15:23'
- # '%d %B %Y %H:%M', '%d %B %y %H:%M', # '20 januari 2009 15:23', '20 januari 2009 15:23'
- # With time in %H.%M :
- '%d-%m-%Y %H.%M', '%d-%m-%y %H.%M', # '20-01-2009 15.23', '20-01-09 15.23'
- # '%d %b %Y %H.%M', '%d %b %y %H.%M', # '20 jan 2009 15.23', '20 jan 09 15.23'
- # '%d %B %Y %H.%M', '%d %B %y %H.%M', # '20 januari 2009 15.23', '20 januari 2009 15.23'
- # Without time :
- '%d-%m-%Y', '%d-%m-%y', '%Y-%m-%d', # '20-01-2009', '20-01-09', '2009-01-20'
- # '%d %b %Y', '%d %b %y', # '20 jan 2009', '20 jan 09'
- # '%d %B %Y', '%d %B %y', # '20 januari 2009', '20 januari 2009'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/nn/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/nn/LC_MESSAGES/django.mo
deleted file mode 100644
index a3898d0..0000000
--- a/parts/django/django/conf/locale/nn/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/nn/LC_MESSAGES/django.po b/parts/django/django/conf/locale/nn/LC_MESSAGES/django.po
deleted file mode 100644
index 07ee018..0000000
--- a/parts/django/django/conf/locale/nn/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5150 +0,0 @@
-# translation of django.po to norwegian nynorsk
-# Copyright (C) 2005 and beyond
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-16 22:39+0200\n"
-"PO-Revision-Date: 2010-03-04 12:13+0200\n"
-"Last-Translator: Håvard Grimelid\n"
-"Language-Team: Norsk nynorsk <nn@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabisk"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgarsk"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalsk"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosnisk"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Katalansk"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Tsjekkisk"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Walisisk"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dansk"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Tysk"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Gresk"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Engelsk"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Engelsk (britisk)"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Spansk"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Argentinsk spansk"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estisk"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Baskisk"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Persisk"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Finsk"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Fransk"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frisisk"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irsk"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galisisk"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hebraisk"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Kroatisk"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Ungarsk"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Indonesisk"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Islandsk"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Italiensk"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Japansk"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Georgisk"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Koreansk"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Litauisk"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Latvisk"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Makedonsk"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "Mongolsk"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "Nederlandsk"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "Norsk"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "Norsk (bokmål)"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "Norsk (nynorsk)"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "Polsk"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "Portugisisk"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "Brasiliansk portugisisk"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "Rumensk"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "Russisk"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "Slovakisk"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "Slovensk"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "Albansk"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "Serbisk"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "Serbisk latin"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "Svensk"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "Tamil"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "Thai"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "Tyrkisk"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "Ukrainsk"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "Vietnamesisk"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "Simplifisert kinesisk"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "Tradisjonell kinesisk"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Sletta %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Er du sikker?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Slett valgte %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Etter %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Alle"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Når som helst"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Siste sju dager"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Denne månaden"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "I år"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Nei"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Ukjend"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Handling:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "tid for handling"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objekt-ID"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objekt repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "handlingsflagg"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "endre melding"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "logginnlegg"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "logginnlegg"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Ingen"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Endra %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "og"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Oppretta %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Endra %(list)s for %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Sletta %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Ingen felt endra."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" vart oppretta."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Du kan redigere vidare nedanfor."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Du kan opprette ny %s nedanfor."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" vart endra."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" vart endra Du kan redigere vidare nedanfor."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Objekt må vere valde for at dei skal kunne utførast handlingar på. Ingen "
-"object er endra."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Inga valt handling."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Opprett %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s-objekt med primærnøkkelen %(key)r eksisterer ikkje."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Rediger %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Databasefeil"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s vart endra."
-msgstr[1] "%(count)s %(name)s vart endra."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "Ingen av %(cnt)s valde"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" vart sletta."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Endringshistorikk: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Gje korrekt brukarnamn og passord. Merk at det er forskjell på små og store "
-"bokstavar."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Økta har tidsavbrot, logg inn att."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Det ser ut til at nettlesaren din ikkje støttar informasjonskapslar "
-"(cookies). Konfigurer nettlesaren din og prøv omatt."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Brukarnamnet kan ikkje innehalde teiknet '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "E-postadressa er ikkje brukarnamnet ditt, prøv '%s' istadenfor."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Nettstadsadministrasjon"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Logg inn"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s-administrasjon"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Dato:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Tid:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "No:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Endre:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Oppslag"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Legg til ny"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Fann ikkje sida"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Sida du spør etter finst ikkje."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Heim"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Tenarfeil"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Tenarfeil (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Tenarfeil <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Det har oppstått ein feil. Feilen er rapportert til administrator via e-"
-"post, og vil bli fiksa snart. "
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Utfør den valde handlinga"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Gå"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Klikk her for å velje objekt på tvers av alle sider"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Velg alle %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Nullstill utval"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Velkommen,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentasjon"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Logg ut"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administrasjonsside"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django-administrasjon"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Opprett"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historikk"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Vis på nettstad"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Korriger feilen under."
-msgstr[1] "Korriger feila under."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Opprett %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrering"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Slett"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Dersom du slettar %(object_name)s '%(escaped_object)s', vil også slette "
-"relaterte objekt, men du har ikkje løyve til å slette følgande objekttypar:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Er du sikker på at du vil slette %(object_name)s \"%(escaped_object)s\"? "
-"Alle dei følgjande relaterte objekta vil bli sletta:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, eg er sikker"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Slett fleire objekt"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Sletting av %(object_name)s vil også slette relaterte objekt, men du har "
-"ikkje løyve til å slette følgjande objekttypar:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Er du sikker på at du vil slette desse %(object_name)s-objekta? Dei "
-"følgjande objekta og deira relaterte objekt vil bli sletta:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Etter %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modellar tilgjengeleg i %(name)s-applikasjonen."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Endre"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Du har ikkje løyve til å redigere noko."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Siste handlingar"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mine handlingar"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ingen tilgjengelege"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Ukjent innhald"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Noko er gale med databaseinstallasjonen din. Syt for at databasetabellane er "
-"oppretta og at brukaren har dei naudsynte løyve."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Brukarnamn:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Passord:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dato/tid"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Brukar"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Handling"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Dette objektet har ingen endringshistorikk. Det var sannsynlegvis ikkje "
-"oppretta med administrasjonssida."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Vis alle"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Lagre"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Søk"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "Ett resultat"
-msgstr[1] "%(counter)s resultat"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s totalt"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Lagre som ny"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Lagre og opprett ny"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Lagre og hald fram å redigere"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Skriv først inn brukernamn og passord. Deretter vil du få høve til å endre "
-"fleire brukarinnstillingar."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Skriv inn eit nytt passord for brukaren <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Passord"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Passord (gjenta)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Skriv inn det samme passordet som over, for verifisering."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Legg til ny %(verbose_name)s."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Fjern"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Slette?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Takk for at du brukte kvalitetstid på nettstaden i dag."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Logg inn att"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Passord endra"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Passordet ditt vart endret."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Av sikkerheitsgrunnar må du oppgje det gamle passordet ditt. Oppgje så det "
-"nye passordet ditt to gonger, slik at vi kan kontrollere at det er korrekt."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Gammalt passord"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nytt passord"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Nullstill passord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Passord nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Passordet ditt er sett. Du kan logge inn."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Stadfesting på nullstilt passord"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Oppgje nytt passord"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Oppgje det nye passordet ditt to gonger, for å sikre at du oppgjev det "
-"korrekt."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Gjenta nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Passordet vart ikkje nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Nullstillingslinken er ugyldig, kanskje fordi den allereie har vore brukt. "
-"Nullstill passordet ditt på nytt."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Passordet vart nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Vi har sendt deg ein e-post med instruksjonar for nullstilling av passord. "
-"Du bør motta den om kort tid."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Du har mottatt denne e-posten fordi du har bedt om nullstilling av passordet "
-"ditt"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "for kontoen din på %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Gå til følgjande side og velg eit nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Brukarnamnet ditt, i tilfelle du har gløymt det:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Takk for at du brukar sida vår!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Helsing %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Har du gløymt passordet ditt? Oppgje e-postadressa di under, så sender vi "
-"deg ein e-post med instruksjonar for nullstilling av passord."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-postadresse:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Nullstill passordet"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Alle datoar"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Velg %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Velg %s du ønskar å redigere"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "nettstad"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "mal"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Kunne ikkje finne applikasjonen %r"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-"Kunne ikkje finne modellen %(model_name)r i applikasjonen %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modell:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "relaterte `%(app_label)s.%(object_name)s`-objekt"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "alle %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "tal på %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Felt på %s-objekt"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ser ikkje ut til å vere eit urlpattern-objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bokmerke"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentasjonsbokmerke"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">For å installere bokmerke, dra linken til verktøylinja\n"
-"for bokmerke, eller høgreklikk og legg til i bokmerke. No kan du du velge\n"
-"bokmerket frå kva som helst side på nettstaden. Nokre av desse\n"
-"bokmerka krevar at datamaskina du brukar er markert som \"intern\"\n"
-"(kontakt systemadministratoren din dersom du er usikker på om maskina di er "
-"\"intern\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentasjon for denne sida"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Hopp frå kva som helst side til dokumentasjonen for visingsfunksjonen som "
-"genererte sida."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Vis objekt-ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Viser \"content-type\" og ein unik ID for sider som representerar eit enkelt "
-"objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Endre dette objektet (noverande vindauge)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Hoppar til administrasjonssida for sider som representerer eit enkelt objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Endre dette objektet (nytt vindauge)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Samme som over, men opnar administrasjonssida i eit nytt vindauge."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Personleg informasjon"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Løyve"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Viktige datoar"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupper"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Passordet er endra."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Endre passord: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Brukarnamn"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Nødvendig. 30 teikn eller færre. Berre bokstavar, tall @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Feltet kan berre innehalde bokstavar, nummer og @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Stadfesting av passord"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Det eksisterar allereie ein brukar med dette brukernamnet."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Dei to passordfelta er ikkje like."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Denne kontoen er inaktiv."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Nettlesaren din ser ikkje ut til å støtte informasjonskapslar (cookies). "
-"Informasjonskapslar er nødvendige for å logge inn."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-post"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Den oppgitte e-postadressa er ikkje registrert hos oss. Er du sikker på at "
-"du er registrert?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Nullstilling av passord på %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Stadfest nytt passord"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Det gamle passordet er feil. Prøv omatt."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "namn"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kodenamn"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "løyve"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "løyve"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "gruppe"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupper"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "brukarnamn"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Nødvendig. 30 teikn eller færre. Berre bokstavar, tall @/./+/-/_."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "fornamn"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "etternamn"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-postadresse"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "passord"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Bruk '[algo]$[salt]$[hexdigest]' eller <a href=\"password/\">endre passord-"
-"skjemaet</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "administrasjonsstatus"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Angir at brukaren kan logge inn på denne administrasjonssida."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktiv"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Angir at denne brukaren er aktiv. Avmerk denne i staden for å slette kontoen."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "superbrukar"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "Angir at denne brukaren har alle løyve utan å eksplisitt sette dei."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "siste innlogging"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "registrert"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"I tillegg til dei løyva som vert angitt manuelt, får brukaren òg løyve til "
-"gruppene han/hon er med i."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "Brukerløyve"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "brukar"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "brukarar"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "melding"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Logga ut"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Oppgje ei gyldig e-postadresse."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Innhald"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "flagga"
-msgstr[1] "flagga"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Flagg valde kommentarar"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "Godkjend"
-msgstr[1] "Godkjende"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Tillat valde kommentarar"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "er fjerna"
-msgstr[1] "er fjerna"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Fjern valdte kommentarar"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "Ein kommentar vart %(action)s."
-msgstr[1] "%(count)s kommentarar vart %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s - kommentarar"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Siste kommentarar frå %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Namn"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-postadresse"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "Nettadresse"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Kommentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pass munnen din! Ordet %s er ikkje lovleg her."
-msgstr[1] "Pass munnen din! Orda %s er ikkje lovlege her."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Dersom du oppgjev noko i dette feltet, vil kommentaren bli behandla som spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "innhaldstype"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "objekt-ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "brukaren sitt namn"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "brukaren si e-postadresse"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "brukaren si nettadresse"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "kommentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "dato/tid for innsending"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP-adresse"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "er tilgjengeleg for alle"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Avmerk denne boksen for å fjerne kommentaren frå sida."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "er fjerna"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Kryss av denne dersom kommentaren er upassande. Meldinga \"Denne kommentaren "
-"har blitt fjerna\" vil bli vist i staden."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "kommentarar"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Denne kommentaren er skriven av ein innlogga brukar og namnnet kan difor "
-"ikkje endrast."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Denne kommentaren er skriven av ein innlogga brukar og e-postadressa kan "
-"derfor ikkje endrast."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Skrive av %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "flagg"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "dato"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "kommentarflagg"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "kommentarflagg"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Tillat ein kommentar"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Gjere denne kommentaren offentleg?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Godkjenn"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Takk for godkjenning"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Takk for at du tok deg tid til å forbetre kvaliteten på diskusjonen på sida "
-"vår"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Fjern ein kommentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Fjerne denne kommentaren?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Takk for fjerninga"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Flagg denne kommentaren"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Flagg denne kommentaren?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Flagg"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Takk for flagging"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Publiser"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Førehandsvising"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Takk for kommentaren"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Takk for kommentaren din"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Førehandsvis kommentaren din"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Korriger feilen under"
-msgstr[1] "Korriger feila under"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Publiser kommentaren din"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "eller gjer endringar"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python-modell klassenamn"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "innhaldstypar"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Eksempel: '/om/kontakt/'. Kontroller at det er ein skråstrek framfor og bak."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Dette feltet kan berre innehalde bokstavar, nummer, understrekar, "
-"bindestrekar eller skråstrekar."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Avanserte innstillingar"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "tittel"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "innhald"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "tillat kommentarer"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "malnamn"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Døme: 'flatpages/kontakt_side.html'. Dersom denne ikkje er gjeve, vil "
-"'flatpages/default.html' bli brukt."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "krevar registrering"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Dersom denne er kryssa av, kan berre innlogga brukarar sjå sida."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flatside"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flatsider"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Du har brukt for lang tid på å fylle ut skjemaet. Fyll ut skjemaet frå denne "
-"sida."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punkt"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Linjestreng"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Fleirpunkt"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Fleirlinje-streng"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Multi-polygon"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Geometrisamling"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Ingen geometriverdi oppgjeve."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Ugyldig geometriverdi"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Ugyldig geometritype"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Det oppstod ein feil ved transformering av geometrien til SRID frå "
-"geometrifeltet."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f million"
-msgstr[1] "%(value).1f millionar"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milliard"
-msgstr[1] "%(value).1f milliardar"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billion"
-msgstr[1] "%(value).1f billionar"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "éin"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "to"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "fire"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "fem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seks"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sju"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "åtte"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "ni"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "i dag"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "i morgon"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "i går"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Oppgje eit postnummer på forma NNNN eller ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Feltet krevar berre tall."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Feltet krevar 7 eller 8 siffer."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Oppgje gyldig CUIT på forma XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Ugyldig CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Niederösterreich"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Oberösterreich"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Steiermark"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wien"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Oppgje eit postnummer på forma XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Oppgje eit gyldig Østerrisk personnummer på forma XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Oppgje eit firesifra postnummer."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Oppgje eit postnummer på forma XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonnummeret må vere på forma XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Velg ein gyldig brasiliansk stat. Den staten er ikkje eit av dei "
-"tilgjengelege valga."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Ugyldig CPF-nummer."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Feltet krevar maksimum 11 eller 14 siffer."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Ugyldig CNPJ-nummer."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Feltet krevar minst 14 siffer."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Oppgje eit postnummer på forma XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Oppgje eit gyldig kanadisk personnummer på forma XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Landschaft"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genève"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubünden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Luzern"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchâtel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Wallis"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Oppgje eit gyldig sveitsisk identitets- eller passnummer på forma X1234567<0 "
-"eller 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Oppgje eit gyldig chilensk RUT."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Oppgje eit gyldig chilensk RUT på forma XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Den chilenske RUT er ugyldig."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Sentralbøhmen region"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Sydbøhmen region"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Plzeň region"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karlovy Vary region"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Ústí nad Labem region"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec region"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Králové region"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice region"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Žilina-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Sydmähriske region"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc region"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlín region"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Mähren-Schlesien region"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Oppgje eit postnummer på forma XXXXX or XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Oppgje eit fødselsnummer på forma XXXXXX/XXXX eller XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Oppgje eit gyldig fødselsnummer."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Oppgje eit gyldig IC-nummer."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bayern"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Vorpommern"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Niedersachsen"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Nordrhein-Westfalen"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rheinland-Pfalz"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sachsen"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Sachsen-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thüringen"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Oppgje eit postnummer på forma XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Oppgje eit gyldig tysk identitetsnummer på forma XXXXXXXXXXX-XXXXXXX-XXXXXXX-"
-"X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Balearane"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Gipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalucía"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragón"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearane"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskarland"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanariøyene"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilla-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilla y León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valenciana"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Oppgje eit gyldig postnummer på forma 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Oppgje eit gyldig telefonnummer på eit av følgjande format: 6XXXXXXXX, "
-"8XXXXXXXX eller 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Oppgje eit gyldig NIF, NIE eller CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Oppgje eit gyldig NIF eller NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Ugyldig kontrollsum for NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Ugyldig kontrollsum for NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Ugyldig kontrollsum for CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Oppgje eit gyldig kontonummer på forma XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Ugyldig kontrollsum for kontonummer."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Oppgje eit gyldig finsk personnummer."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonnummeret må vere på forma 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Oppgje eit gyldig postnummer"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Oppgje eit gyldig telefonnummer"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Oppgje eit gyldig bilnummer."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Oppgje eit gyldig NIK/KTP-nummer."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madium"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federal Government"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Oppgje eit postnummer på forma XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Oppgje eit gyldig islandsk identifikasjonsnummer på forma XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Det islandske identifikasjonsnummeret er ugyldig."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Oppgje eit gyldig postnummer."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Oppgje eit gyldig italiensk personnummer."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Oppgje eit gyldig VAT-nummer."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Oppgje eit postnummer på forma XXXXXXX eller XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Oppgje eit gyldig kuwaitisk ID-nummer."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Oppgje eit gyldig postnummer."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Oppgje eit gyldig SoFi-nummer."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Oppgje eit gyldig norsk personnummer."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Feltet krevar åtte siffer."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Feltet krevar 11 siffer."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "National Identification Number består av 11 siffer."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Feil kontrollsum for National Identification Number."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Oppgje eit NIP på forma XXX-XXX-XX-XX eller XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Ugyldig kontrollsum for NIP."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "National Business Register Number (REGON) består av 9 eller 14 siffer."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Ugyldig kontrollsum for National Business Register Number (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Oppgje eit postnummer på forma XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Oppgje eit postnummer på forma XXXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Oppgje eit gyldig CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Oppgje eit gyldig CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Oppgje eit gyldig IBAN på forma ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonnummeret må vere på forma XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Oppgje eit postnummer på forma XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Oppgje eit gyldig svensk organisasjonsnummer."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Oppgje eit gyldig svensk personnummer."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Koordinasjonsnummer er ikkje tillate."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Oppgje eit svensk postnummer på forma XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banská Bystrica-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Košice-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešov-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenčín-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilina-regionen"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Oppgje eit gyldig postnummer."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Stor-London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Stor-Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries og Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orknøyene"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Ytre Hebridene"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Nord-Irland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Skottland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Oppgje eit postnummer på forma XXXXX eller XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonnummer må vere på forma XX-XXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Oppgje eit gyldig amerikansik Social Security-nummer på forma XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stat (i USA, to store bokstavar)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Oppgje gyldig CI-nummer på forma X.XXX.XXX-X,XXXXXXX-X eller XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Oppgje eit gyldig CI-nummer."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Oppgje eit gyldig South African ID-nummer."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Oppgje eit gyldig postnummer."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "lat melding"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "omadresser frå"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Dette bør vere ein fullstendig sti utan domenenavn. Døme: '/hendingar/finn/"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "omadresser til"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Dette kan enten vere ein fullstendig sti (som over), eller ei fullstendig "
-"nettadresse som startar med 'http://'"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "omadressering"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "omadresseringar"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sesjonsnøkkel"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sesjonsdata"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "utløpsdato"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesjon"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesjonar"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domenenamn"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "visingsnamn"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "nettstader"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Oppgje ein gyldig verdi."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Oppgje ei gyldig nettadresse."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Nettadressa fører til ei side som ikkje eksisterar."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Oppgje ein gyldig 'slug' som består av bokstavar, nummer, understrekar eller "
-"bindestrekar."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Oppgje ei gyldig IPv4-adresse."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Oppgje berre tall skild med komma."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Verdien må minimum ha %(limit_value)s teikn (den er %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Verdien må vere mindre enn eller lik %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Verdien må vere større enn eller lik %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "Verdien må minimum ha %(limit_value)d teikn (den er %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Verdien kan maksimalt ha %(limit_value)d teikn (den er %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s må vere unik for %(date_field)s %(lookup)s."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s med %(field_label)s fins allereie."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr ""
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Feltet kan ikkje vere tomt."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Feltet kan ikkje vere tomt."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Felt av typen: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Heiltal"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Verdien må vere eit heltall."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Verdien må vere True eller False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolsk (True eller False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Tekst (opp til %(max_length)s teikn)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Heiltal skild med komma"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Dato (utan tid)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Oppgje ein gyldig dato på forma ÅÅÅÅ-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ugyldig dato: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Oppgje dato og tid på forma ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Dato (med tid)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Verdien må vere eit desimaltall."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Desimaltall"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-postadresse"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Filsti"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Verdien må vere eit flyttall."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Flyttall"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr ""
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Verdien må vere None, True eller False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolsk (True, False eller None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Tekst"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Tid"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Oppgje tida på forma TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML-tekst"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Modellen %(model)s med primærnøkkelen %(pk)r eksisterer ikkje."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Primærnøkkel (type bestemt av relatert felt)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Ein-til-ein-forhold"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Mange-til-mange-forhold"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Hald nede \"Control\", eller \"Command\" på ein Mac, for å velge meir enn "
-"éin."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Oppgje gyldige %(self)s-ID-ar. Verdien %(value)r er ugyldig."
-msgstr[1] "Oppgje gyldige %(self)s-ID-ar. Verdiane %(value)r er ugyldige."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Feltet er påkravd."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Oppgje eit heiltall."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Oppgje eit tall."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Verdien kan ikkje ha meir enn %s siffer totalt."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Verdien kan ikkie ha meir enn %s desimalar."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Verdien kan ikkje ha meir enn %s siffer framfor komma."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Oppgje ein gyldig dato."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Oppgje eit gyldig tidspunkt."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Oppgje gyldig dato og tidspunkt."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Inga fil vart sendt. Sjekk \"encoding\"-typen på skjemaet."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Inga fil vart sendt."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Fila er tom."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Filnamnet kan maksimalt ha %(max)d teikn (det har %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Last opp eit gyldig bilete. Fila du lasta opp var ødelagt eller ikkje eit "
-"bilete."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Velg eit gyldig valg. %(value)s er ikkje eit av dei tilgjengelege valga."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Oppgje ei liste med verdiar."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Rekkefølge"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Korriger dupliserte data for %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Korriger dupliserte data for %(field)s, som må vere unike."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Korriger dupliserte data for %(field_name)s, som må vere unike for %(lookup)"
-"s i %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Korriger dei dupliserte verdiane nedanfor."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Primærnøkkelen er ikkje den samme som foreldreinstansen sin primærnøkkel."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Velg eit gyldig valg. Valget er ikkje eit av dei tilgjengelege valga."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Velg eit gyldig valg. %s er ikkje eit av dei tilgjengelege valga."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" er ikkje ein gyldig verdi for ein primærnøkkel."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "ja,nei,kanskje"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "midnatt"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "12:00"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "måndag"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "tysdag"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "onsdag"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "torsdag"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "fredag"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "laurdag"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "søndag"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "man"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "tys"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "ons"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "tors"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "fre"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "laur"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "søn"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februar"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "mars"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "mai"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "august"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "desember"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "des"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "des."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "eller"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "år"
-msgstr[1] "år"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "månad"
-msgstr[1] "månadar"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "veke"
-msgstr[1] "veker"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dag"
-msgstr[1] "dagar"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "time"
-msgstr[1] "timar"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minutt"
-msgstr[1] "minuttar"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuttar"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. F Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s vart oppretta."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s vart oppdatert."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s vart sletta."
-
-#~ msgid "sumatera utara"
-#~ msgstr "Sumatera Selatan"
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Ei eller fleire %(fieldname)s i %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Ein eller fleire %(fieldname)s i %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Gammalt passord:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Relasjon til foreldermodell"
-
-#~ msgid "Add user"
-#~ msgstr "Opprett ny brukar"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Kommentarmoderasjonskø"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "Ingen kommentarar å moderere"
-
-#~ msgid "Email"
-#~ msgstr "E-post"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Godkjend?"
-
-#~ msgid "IP Address"
-#~ msgstr "IP-adresse"
-
-#~ msgid "Date posted"
-#~ msgstr "Dato lagt inn"
-
-#~ msgid "yes"
-#~ msgstr "ja"
-
-#~ msgid "no"
-#~ msgstr "nei"
diff --git a/parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index abe9053..0000000
--- a/parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 150fac8..0000000
--- a/parts/django/django/conf/locale/nn/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,155 +0,0 @@
-# translation of djangojs.po to norwegian nynorsk
-# Copyright (C) 2005 and beyond
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-16 22:30+0200\n"
-"PO-Revision-Date: 2010-03-04 12:13+0200\n"
-"Last-Translator: Håvard Grimelid\n"
-"Language-Team: Norsk <no@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Tilgjengelege %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Velg alle"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Ny"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Slett"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valde %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Velg valet og klikk "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Fjern alle"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s av %(cnt)s vald"
-msgstr[1] "%(sel)s av %(cnt)s valde"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Det er endringar som ikkje er lagra i individuelt redigerbare felt. "
-"Endringar som ikkje er lagra vil gå tapt."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Du har vald ei handling, men du har framleis ikkje lagra endringar for "
-"individuelle felt. Klikk OK for å lagre. Du må gjere handlinga på nytt."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Du har vald ei handling og du har ikkje gjort endringar i individuelle felt. "
-"Du ser sannsynlegvis etter Gå vidare-knappen - ikkje Lagre-knappen."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januar Februar Mars April Mai Juni Juli August September Oktober November "
-"Desember"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M T O T F L"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Vis"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Skjul"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Søndag Måndag Tysdag Onsdag Torsdag Fredag Laurdag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "No"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Klokke"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Velg eit klokkeslett"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Midnatt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "06:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "12:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "I går"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "I morgon"
diff --git a/parts/django/django/conf/locale/nn/__init__.py b/parts/django/django/conf/locale/nn/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/nn/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/nn/formats.py b/parts/django/django/conf/locale/nn/formats.py
deleted file mode 100644
index fbc6142..0000000
--- a/parts/django/django/conf/locale/nn/formats.py
+++ /dev/null
@@ -1,34 +0,0 @@
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%j.%m.%Y', '%j.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06'
- '%Y-%m-%j', # '2006-10-25',
- # '%j. %b %Y', '%j %b %Y', # '25. okt 2006', '25 okt 2006'
- # '%j. %b. %Y', '%j %b. %Y', # '25. okt. 2006', '25 okt. 2006'
- # '%j. %B %Y', '%j %B %Y', # '25. oktober 2006', '25 oktober 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%Y-%m-%j', # '2006-10-25'
- '%j.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%j.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%j.%m.%Y', # '25.10.2006'
- '%j.%m.%y %H:%M:%S', # '25.10.06 14:30:59'
- '%j.%m.%y %H:%M', # '25.10.06 14:30'
- '%j.%m.%y', # '25.10.06'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/no/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/no/LC_MESSAGES/django.mo
deleted file mode 100644
index 8522ac0..0000000
--- a/parts/django/django/conf/locale/no/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/no/LC_MESSAGES/django.po b/parts/django/django/conf/locale/no/LC_MESSAGES/django.po
deleted file mode 100644
index 02bc100..0000000
--- a/parts/django/django/conf/locale/no/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5133 +0,0 @@
-# This is the *old* Norwegian (Bokmål) translation of Django
-# For future updates please use the translation in the "nb" directory.
-# Copyright (C) 2005-2010
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-15 02:08+0200\n"
-"PO-Revision-Date: 2010-03-11 14:22+0100\n"
-"Last-Translator: Christian Mikalsen and Jon Lønne\n"
-"Language-Team: Norsk <no@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabisk"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgarsk"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalsk"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosnisk"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Katalansk"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Tsjekkisk"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Walisisk"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dansk"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Tysk"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Gresk"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Engelsk"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Engelsk (britisk)"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Spansk"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Argentinsk spansk"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estisk"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Baskisk"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Persisk"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Finsk"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Fransk"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frisisk"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irsk"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galisisk"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hebraisk"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Kroatisk"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Ungarsk"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Indonesisk"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Islandsk"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Italiensk"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Japansk"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Georgisk"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Koreansk"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Litauisk"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Latvisk"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Makedonsk"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "Mongolsk"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "Nederlandsk"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "Norsk"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "Norsk (bokmål)"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "Norsk (nynorsk)"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "Polsk"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "Portugisisk"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "Brasiliansk portugisisk"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "Rumensk"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "Russisk"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "Slovakisk"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "Slovensk"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "Albansk"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "Serbisk"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "Serbisk latin"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "Svensk"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "Tamil"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "Thai"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "Tyrkisk"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "Ukrainsk"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "Vietnamesisk"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "Forenklet kinesisk"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "Tradisjonell kinesisk"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Slettet %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Er du sikker?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Slett valgte %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Etter %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Alle"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Når som helst"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Siste syv dager"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Denne måneden"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "I år"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Nei"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Ukjent"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Handling:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "tid for handling"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objekt-ID"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objekt repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "handlingsflagg"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "endre melding"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "logginnlegg"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "logginnlegg"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Ingen"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Endret %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "og"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Opprettet %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Endret %(list)s for %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Slettet %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Ingen felt endret."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" ble opprettet."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Du kan redigere videre nedenfor."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Du kan opprette ny %s nedenfor."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" ble endret."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" ble endret. Du kan redigere videre nedenfor."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Du må velge objekter for å utføre handlinger på dem. Ingen objekter har "
-"blitt endret."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Ingen handling valgt."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Opprett %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s-objekt med primærnøkkelen %(key)r finnes ikke."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Endre %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Databasefeil"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s ble endret."
-msgstr[1] "%(count)s %(name)s ble endret."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s valgt"
-msgstr[1] "Alle %(total_count)s valgt"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 av %(cnt)s valgt"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" ble slettet."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Endringshistorikk: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Vennligst angi korrekt brukernavn og passord. Merk at det er forskjell på "
-"små og store bokstaver."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Økten din har tidsavbrutt, vennligst logg inn igjen."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Det ser ut som om nettleseren din ikke støtter informasjonskapsler "
-"(cookies). Vennligst konfigurer nettleseren din og prøv igjen."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Brukernavnet kan ikke inneholde tegnet '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "E-postadressen er ikke brukernavnet ditt, prøv '%s' isteden."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Nettstedsadministrasjon"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Logg inn"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s-administrasjon"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Dato:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Tid:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Nå:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Endre:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Oppslag"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Legg til ny"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Fant ikke siden"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Beklager, men siden du spør etter finnes ikke."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Hjem"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Tjenerfeil"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Tjenerfeil (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Tjenerfeil <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Det har oppstått en feil. Feilen er blitt rapportert til administrator via e-"
-"post, og vil bli fikset snart. Takk for din tålmodighet."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Utfør den valgte handlingen"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Gå"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Trykk her for å velge samtlige objekter fra alle sider"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Velg alle %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Nullstill valg"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Velkommen,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentasjon"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Logg ut"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administrasjonsside"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django-administrasjon"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Opprett"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historikk"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Vis på nettsted"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Vennligst korriger feilen under."
-msgstr[1] "Vennligst korriger feilene under."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Opprett %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrering"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Slett"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Hvis du sletter %(object_name)s '%(escaped_object)s', vil også slette "
-"relaterte objekter, men du har ikke tillatelse til å slette følgende "
-"objekttyper:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Er du sikker på at du vil slette %(object_name)s \"%(escaped_object)s\"? "
-"Alle de følgende relaterte objektene vil bli slettet:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, jeg er sikker"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Slett flere objekter"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Sletting av %(object_name)s vil også slette relaterte objekter, men du har "
-"ikke tillatelse til å slette følgende objekttyper:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Er du sikker på at du vil slette de valgte %(object_name)s-objektene? De "
-"følgende objektene og deres relaterte objekter vil bli slettet:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Etter %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeller tilgjengelig i %(name)s-applikasjonen."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Endre"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Du har ikke rettigheter til å redigere noe."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Siste handlinger"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mine handlinger"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ingen tilgjengelige"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Ukjent innhold"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Noe er galt med databaseinstallasjonen din. Sørg for at databasetabellene er "
-"opprettet og at brukeren har de nødvendige rettigheter."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Brukernavn:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Passord:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dato/tid"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Bruker"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Handling"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Dette objektet har ingen endringshistorikk. Det var sannsynligvis ikke "
-"opprettet med administrasjonssiden."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Vis alle"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Lagre"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Søk"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "Ett resultat"
-msgstr[1] "%(counter)s resultater"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s totalt"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Lagre som ny"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Lagre og opprett ny"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Lagre og fortsett å redigere"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Skriv først inn brukernavn og passord. Deretter vil du få mulighet til å "
-"endre flere brukerinnstillinger."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Skriv inn et nytt passord for brukeren <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Passord"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Passord (gjenta)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Skriv inn det samme passordet som ovenfor, for verifisering."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Legg til ny %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Fjern"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Slette?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Takk for at du valgte å bruke kvalitetstid på nettstedet i dag."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Logg inn igjen"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Passord endret"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Ditt passord ble endret."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Venligst oppgi ditt gamle passord av sikkerhetsgrunner. Oppgi deretter ditt "
-"nye passord to ganger, slik at vi kan kontrollere at det er korrekt."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Gammelt passord"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nytt passord"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Endre passord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Nullstill passord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Passord nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Passordet ditt er satt. Du kan nå logge inn."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Bekreftelse på nullstilt passord"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Oppgi nytt passord"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Venligst oppgi ditt nye passord to ganger, for å sikre at du oppgir det "
-"korrekt."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Gjenta nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Passordet ble ikke nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Nullstillingslinken er ugyldig, kanskje fordi den allerede har vært brukt. "
-"Vennligst nullstill passordet ditt på nytt."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Passordet ble nullstilt"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Vi har sendt deg en e-post med instruksjoner for nullstilling av passord. Du "
-"bør motta den om kort tid."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Du har mottatt denne e-posten fordi du har bedt om nullstilling av passordet "
-"ditt"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "for din konto på %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Vennligst gå til følgende side og velg et nytt passord:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Brukernavnet ditt, i tilfelle du har glemt det:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Takk for at du bruker siden vår!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Hilsen %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Glemt passordet ditt? Oppgi e-postadressen din under, så sender vi deg en e-"
-"post med instruksjoner for nullstilling av passord."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-postadresse:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Nullstill mitt passord"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Alle datoer"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Velg %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Velg %s du ønsker å endre"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "nettsted"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "mal"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Fant ikke applikasjonen %r"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Fant ikke modellen %(model_name)r i applikasjonen %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "modell:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "relaterte `%(app_label)s.%(object_name)s`-objekter"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "alle %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "antall %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Felter på %s-objekter"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ser ikke ut til å være et urlpattern-objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bokmerker"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentasjonsbokmerker"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">For å installere bokmerker, dra linken til verktøylinja\n"
-"for bokmerker, eller høyreklikk og legg til i bokmerker. Nå kan du du velge\n"
-"bokmerket fra hvilken som helst side på nettstedet. Noen av disse\n"
-"bokmerkene krever at datamaskinen du bruker er markert som \"intern\"\n"
-"(kontakt din systemadministrator hvis du er usikker på om maskinen din er "
-"\"intern\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentasjon for denne siden"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Hopp fra hvilken som helst side til dokumentasjonen for visningsfunksjonen "
-"som genererte den siden."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Vis objekt-ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Viser \"content-type\" og en unik ID for sider som representerer et enkelt "
-"objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Endre dette objektet (nåværende vindu)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Hopper til administrasjonssiden for sider som representerer et enkelt objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Endre dette objektet (nytt vindu)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Samme som over, men åpner administrasjonssiden i et nytt vindu."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Personlig informasjon"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Rettigheter"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Viktige datoer"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupper"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Passordet er endret."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Endre passord: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Brukernavn"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Påkrevet. 30 tegn eller færre. Kun bokstaver, tall og @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Verdien kan kun inneholde bokstaver, tall og @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Passordbekreftelse"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Det eksisterer allerede en bruker med dette brukernavnet."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "De to passordfeltene er ikke like."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Denne kontoen er inaktiv."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Din nettleser ser ikke ut til å støtte informasjonskapsler (cookies). "
-"Informasjonskapsler er påkrevet for å logge inn."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-post"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Den oppgitte e-postadressen er ikke registrert hos oss. Er du sikker på at "
-"du er registrert?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Nullstilling av passord på %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Bekreft nytt passord"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Ditt gamle passord er galt. Vennligst prøv igjen."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "navn"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kodenavn"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "rettighet"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "rettigheter"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "gruppe"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupper"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "brukernavn"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Påkrevet. 30 tegn eller færre. Bokstaver, tall og @/./+/-/_."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "fornavn"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "etternavn"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-postadresse"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "passord"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Bruk '[algo]$[salt]$[hexdigest]' eller <a href=\"password/\">endre passord-"
-"skjemaet</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "administrasjonsstatus"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Angir at brukeren kan logge inn på denne administrasjonssiden."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktiv"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Angir at denne brukeren er aktiv. Avmerk denne i stedet for å slette kontoen."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "superbruker"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Angir at denne brukeren har alle rettigheter uten å eksplisitt sette de."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "siste innlogging"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "registrert"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"I tillegg til de rettighetene som blir angitt manuelt, får brukeren også "
-"rettighetene til gruppene han/hun er med i."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "Brukerrettigheter"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "bruker"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "brukere"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "melding"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Logget ut"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Oppgi en gyldig e-postadresse."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Innhold"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "flagget"
-msgstr[1] "flagget"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Flagg valgte kommentarer"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "godkjent"
-msgstr[1] "godkjent"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Tillat valgte kommentarer"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "fjernet"
-msgstr[1] "fjernet"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Fjern valgte kommentarer"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 kommentar ble %(action)s."
-msgstr[1] "%(count)s kommentarer ble %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s kommentarer"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Siste kommentarer fra %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Navn"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-postadresse"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "Nettadresse"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Kommentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pass munnen din! Ordet %s er ikke tillatt her."
-msgstr[1] "Pass munnen din! Ordene %s er ikke tillatt her."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Hvis du oppgir noe i dette feltet, vil kommentaren bli behandlet som spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "innholdstype"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "objekt-ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "brukerens navn"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "brukerens e-postadresse"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "brukerens nettadresse"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "kommentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "dato/tid for innsendelse"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP-adresse"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "er tilgjengelig for alle"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Avmerk denne boksen for å fjerne kommentaren fra siden."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "er fjernet"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Huk av denne hvis kommentaren er upassende. Meldingen \"Denne kommentaren "
-"har blitt fjernet\" vil bli vist i stedet."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "kommentarer"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Denne kommentaren er skrevet av en innlogget bruker og navnet kan derfor "
-"ikke endres."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Denne kommentaren er skrevet av en innlogget bruker og e-postadressen kan "
-"derfor ikke endres."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Skrevet av %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "flagg"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "dato"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "kommentarflagg"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "kommentarflagg"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Tillat en kommentar"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Gjør denne kommentaren offentlig?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Godkjenn"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Takk for godkjennelse"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Takk for at du tok deg tid til å forbedre kvaliteten på diskusjonen på siden "
-"vår"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Fjern en kommentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Fjerne denne kommentaren?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Takk for fjerningen"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Flagg denne kommentaren"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Flagg denne kommentaren?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Flagg"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Takk for flagging"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Publiser"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Forhåndsvisning"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Takk for kommentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Takk for din kommentar"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Forhåndsvis kommentaren din"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Vennligst korriger feilen under"
-msgstr[1] "Vennligst korriger feilene under"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Publiser din kommentar"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "eller gjør endringer"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python-modell klassenavn"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "innholdstyper"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Eksempel: '/om/kontakt/'. Kontroller at det er en skråstrek foran og bak."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Dette feltet kan bare inneholde bokstaver, nummer, understreker, "
-"bindestreker eller skråstreker."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Avanserte innstillinger"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "tittel"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "innhold"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "tillat kommentarer"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "malnavn"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Eksempel: 'flatpages/kontakt_side.html'. Hvis denne ikke er gitt, vil "
-"'flatpages/default.html' bli brukt."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "krever registrering"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Hvis denne er krysset av, kan kun innloggede brukere se siden."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flatside"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flatsider"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Vi beklager, men dette skjemaet har tidsavbrutt. Vennligst fyll ut skjemaet "
-"fra denne siden."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punkt"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Ingen geometriverdi oppgitt."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Ugyldig geometriverdi"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Ugyldig geometritype"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"En feil oppstod ved transformering av geometrien til SRID fra geometrifeltet."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f million"
-msgstr[1] "%(value).1f millioner"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milliard"
-msgstr[1] "%(value).1f milliarder"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f billion"
-msgstr[1] "%(value).1f billioner"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "én"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "to"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "fire"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "fem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seks"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sju"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "åtte"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "ni"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "i dag"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "i morgen"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "i går"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Oppgi et postnummer på formen NNNN eller ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Feltet krever kun tall."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Feltet krever 7 eller 8 siffer."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Oppgi gyldig CUIT på formen XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Ugyldig CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Niederösterreich"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Oberösterreich"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Steiermark"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wien"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Oppgi et postnummer på formen XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Oppgi et gyldig Østerrisk personnummer på formen XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Oppgi et firesifret postnummer."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Oppgi et postnummer på formen XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonnummeret må være på formen XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Velg en gyldig brasiliansk stat. Den staten er ikke et av de tilgjengelige "
-"valgene."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Ugyldig CPF-nummer."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Feltet krever maksimum 11 eller 14 siffer."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Ugyldig CNPJ-nummer."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Feltet krever minst 14 siffer."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Oppgi et postnummer på formen XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Oppgi et gyldig kanadisk personnummer på formen XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Landschaft"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genève"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubünden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Luzern"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchâtel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Wallis"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Oppgi et gyldig sveitsisk identitets- eller passnummer på formen X1234567<0 "
-"eller 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Oppgi et gyldig chilensk RUT."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Oppgi et gyldig chilensk RUT på formen XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Den chilenske RUT er ugyldig."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Sentralbøhmen region"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Sydbøhmen region"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Plzeň region"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karlovy Vary region"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Ústí nad Labem region"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec region"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Králové region"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice region"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Žilina-regionen"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Sydmähriske region"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc region"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlín region"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Mähren-Schlesien region"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Oppgi et postnummer på formen XXXXX or XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Oppgi et fødselsnummer på formen XXXXXX/XXXX eller XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Oppgi et gyldig fødselsnummer."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Oppgi et gyldig IC-nummer."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bayern"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Vorpommern"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Niedersachsen"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Nordrhein-Westfalen"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rheinland-Pfalz"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sachsen"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Sachsen-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thüringen"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Oppgi et postnummer på formen XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Oppgi et gyldig tysk identitetsnummer på formen XXXXXXXXXXX-XXXXXXX-XXXXXXX-"
-"X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Balearene"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Gipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalucía"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragón"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearene"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskerland"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanariøyene"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castilla-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilla y León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valenciana"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Oppgi et gyldig postnummer på formen 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Oppgi et gyldig telefonnummer på et av følgende formater: 6XXXXXXXX, "
-"8XXXXXXXX eller 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Oppgi et gyldig NIF, NIE eller CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Oppgi et gyldig NIF eller NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Ugyldig kontrollsum for NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Ugyldig kontrollsum for NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Ugyldig kontrollsum for CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Oppgi et gyldig kontonummer på formen XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Ugyldig kontrollsum for kontonummer."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Oppgi et gyldig finsk personnummer."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonnummeret må være på formen 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Oppgi et gyldig telefonnummer."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Oppgi et gyldig kjøretøyregistreringsnummer."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Oppgi et gyldig NIK/KTP-nummer."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-#, fuzzy
-msgid "Pati"
-msgstr "aktiv"
-
-#: contrib/localflavor/id/id_choices.py:91
-#, fuzzy
-msgid "Surabaya"
-msgstr "lørdag"
-
-#: contrib/localflavor/id/id_choices.py:92
-#, fuzzy
-msgid "Madura"
-msgstr "Madrid"
-
-#: contrib/localflavor/id/id_choices.py:93
-#, fuzzy
-msgid "Malang"
-msgstr "Málaga"
-
-#: contrib/localflavor/id/id_choices.py:94
-#, fuzzy
-msgid "Jember"
-msgstr "november"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-#, fuzzy
-msgid "Garut"
-msgstr "Glarus"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-#, fuzzy
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-#, fuzzy
-msgid "Armagh"
-msgstr "Aragón"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-#, fuzzy
-msgid "Cavan"
-msgstr "Katalansk"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-#, fuzzy
-msgid "Clare"
-msgstr "Cáceres"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-#, fuzzy
-msgid "Cork"
-msgstr "eller"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-#, fuzzy
-msgid "Derry"
-msgstr "februar"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-#, fuzzy
-msgid "Donegal"
-msgstr "én"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-#, fuzzy
-msgid "Down"
-msgstr "Devon"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-#, fuzzy
-msgid "Dublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-#, fuzzy
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-#, fuzzy
-msgid "Galway"
-msgstr "Galicia"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-#, fuzzy
-msgid "Kerry"
-msgstr "februar"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-#, fuzzy
-msgid "Louth"
-msgstr "Logg ut"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-#, fuzzy
-msgid "Mayo"
-msgstr "mai"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-#, fuzzy
-msgid "Meath"
-msgstr "Metadata"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-#, fuzzy
-msgid "Monaghan"
-msgstr "Logg inn igjen"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-#, fuzzy
-msgid "Roscommon"
-msgstr "kommentar"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-#, fuzzy
-msgid "Sligo"
-msgstr "Shiga"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-#, fuzzy
-msgid "Tyrone"
-msgstr "Tirol"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-#, fuzzy
-msgid "Westmeath"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-#, fuzzy
-msgid "Wexford"
-msgstr "ons"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Oppgi et postnummer på formen XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Oppgi et gyldig islandsk identifikasjonsnummer på formen XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Det islandsk identifikasjonsnummer er ugyldig."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Oppgi et gyldig italiensk personnummer."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Oppgi et gyldig VAT-nummer."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Oppgi et postnummer på formen XXXXXXX eller XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Oppgi et gyldig Kuwaiti Civil ID-nummer."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Oppgi et gyldig SoFi-nummer."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Oppgi et gyldig norsk personnummer."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Feltet krever åtte siffer."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Feltet krever 11 siffer."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "National Identification Number består av 11 siffer."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Feil kontrollsum for National Identification Number."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Oppgi et NIP på formen XXX-XXX-XX-XX eller XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Ugyldig kontrollsum for NIP."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "National Business Register Number (REGON) består av 9 eller 14 siffer."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Ugyldig kontrollsum for National Business Register Number (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Oppgi et postnummer på formen XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Oppgi et postnummer på formen XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Telefonnummer må ha 9 siffer, eller starte med + eller 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Oppgi et gyldig CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Oppgi et gyldig CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Oppgi et gyldig IBAN på formen ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonnummeret må være på formen XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Oppgi et postnummer på formen XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Oppgi et gyldig svensk organisasjonsnummer."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Oppgi et gyldig svensk personnummer."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Oppgi et gyldig svensk postnummer på formen XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banská Bystrica-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Košice-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešov-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trenčín-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilina-regionen"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Stor-London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Stor-Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orknøyene"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Ytre Hebridene"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Nord-Irland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Skottland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Oppgi et postnummer på formen XXXXX eller XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonnummeret må være på formen XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Oppgi et gyldig amerikansik Social Security-nummer på formen XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Oppgi en amerikansk stat eller et område"
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stat (i USA, to store bokstaver)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Oppgi gyldig CI på formen X.XXX.XXX-X,XXXXXXX-X eller XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Oppgi et gyldig CI-nummer."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Oppgi et gyldig South African ID-nummer."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Oppgi et gyldig postnummer."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "\"lazy\" melding"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "omadresser fra"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Dette bør være en fullstendig sti uten domenenavn. Eksempel: '/hendelser/"
-"finn/"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "omadresser til"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Dette kan enten være en fullstendig sti (som over), eller en fullstendig "
-"nettadresse som starter med 'http://'"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "omadressering"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "omadresseringer"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sesjonsnøkkel"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sesjonsdata"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "utløpsdato"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesjon"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesjoner"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domenenavn"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "visningsnavn"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "nettsteder"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Oppgi en gyldig verdi."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Oppgi en gyldig nettadresse."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Nettadressen fører til en side som ikke eksisterer."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Oppgi en gyldig 'slug' bestående av bokstaver, nummer, understreker eller "
-"bindestreker."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Oppgi en gyldig IPv4-adresse."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Oppgi kun tall adskilt med komma."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Verdien må være %(limit_value)s (den er %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Verdien må være mindre enn eller lik som %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Verdien må være større enn eller lik som %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "Verdien må minimum ha %(limit_value)d tegn (den har %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr "Verdien kan maksimalt ha %(limit_value)d tegn (den er %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s må være unik for %(date_field)s %(lookup)s."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s med %(field_label)s finnes allerede."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Verdien %r er ikke et gyldig valg."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Feltet kan ikke være tomt."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Feltet kan ikke være blankt."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Felt av typen: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Heltall"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Verdien må være et heltall."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Verdien må være True eller False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolsk (True eller False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Tekst (opp til %(max_length)s tegn)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Heltall adskilt med komma"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Dato (uten tid)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Oppgi en gyldig dato på formen ÅÅÅÅ-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ugyldig dato: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Oppgi dato og tid på formen ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Dato (med tid)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Verdien må være et desimaltall."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Desimaltall"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-postadresse"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Filsti"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Verdien må være et flyttall."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Flyttall"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Stort (8 byte) heltall"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Verdien må være None, True eller False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolsk (True, False eller None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Tekst"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Tid"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Oppgi tiden på formen TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML-tekst"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Modell %(model)s med primærnøkkelen %(pk)r finnes ikke."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Fremmednøkkel (type bestemmes av relatert felt)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "En-til-en-relasjon"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Mange-til-mange-relasjon"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mer enn en."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Oppgi gyldige %(self)s-ID-er. Verdien %(value)r er ugyldig."
-msgstr[1] "Oppgi gyldige %(self)s-ID-er. Verdiene %(value)r er ugyldige."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Feltet er påkrevet."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Oppgi et heltall."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Oppgi et tall."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Verdien kan ikke ha mer enn %s siffer totalt."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Verdien kan ikke ha mer enn %s desimaler."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Verdien kan ikke ha mer enn %s siffer foran komma."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Oppgi en gyldig dato."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Oppgi et gyldig tidspunkt."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Oppgi gyldig dato og tidspunkt."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Ingen fil ble sendt. Sjekk \"encoding\"-typen på skjemaet."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Ingen fil ble sendt."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Filen er tom."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Filnavnet kan maksimalt ha %(max)d tegn (det har %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Last opp et gyldig bilde. Filen du lastet opp var ødelagt eller ikke et "
-"bilde."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Velg et gyldig valg. %(value)s er ikke et av de tilgjengelige valgene."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Oppgi en liste med verdier."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Rekkefølge"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Vennligst korriger duplisert data for %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Vennligst korriger duplisert data for %(field)s, som må være unik."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Vennligst korriger duplisert data for %(field_name)s, som må være unik for %"
-"(lookup)s i %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Vennligst korriger de dupliserte verdiene nedenfor."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Primærnøkkelen er ikke den samme som foreldreinstansens primærnøkkel."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Velg et gyldig valg. Valget er ikke et av de tilgjengelige valgene."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Velg et gyldig valg. %s er ikke et av de tilgjengelige valgene."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" er ikke en gyldig verdi for en primærnøkkel."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "ja,nei,kanskje"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "midnatt"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "12:00"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "mandag"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "tirsdag"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "onsdag"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "torsdag"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "fredag"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "lørdag"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "søndag"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "man"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "tirs"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "ons"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "tors"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "fre"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "lør"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "søn"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februar"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "mars"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "mai"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "august"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "desember"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "des"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "des."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "eller"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "år"
-msgstr[1] "år"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "måned"
-msgstr[1] "måneder"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "uke"
-msgstr[1] "uker"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dag"
-msgstr[1] "dager"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "time"
-msgstr[1] "timer"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minutt"
-msgstr[1] "minutter"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutter"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. F Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s ble opprettet."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s ble oppdatert."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s ble slettet."
diff --git a/parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 7b063e7..0000000
--- a/parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.po
deleted file mode 100644
index f6d3b1f..0000000
--- a/parts/django/django/conf/locale/no/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,120 +0,0 @@
-# This is the *old* Norwegian (Bokmål) translation of Django javascript
-# For future updates please use the translation in the "nb" directory.
-# Copyright (C) 2005 and beyond
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2010-03-11 18:06+0100\n"
-"Last-Translator: Christian Mikalsen and Jon Lønne\n"
-"Language-Team: Norsk <no@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Tilgjengelige %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Velg alle"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Ny"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Slett"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valgte %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Velg ditt valg og klikk "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Fjern alle"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januar Februar Mars April Mai Juni Juli August September Oktober November "
-"Desember"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M T O T F L"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Vis"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Skjul"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:50
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Now"
-msgstr "Nå"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:54
-msgid "Clock"
-msgstr "Klokke"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Choose a time"
-msgstr "Velg et klokkeslett"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "Midnight"
-msgstr "Midnatt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "6 a.m."
-msgstr "06:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-msgid "Noon"
-msgstr "12:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "I går"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "I morgen"
diff --git a/parts/django/django/conf/locale/no/__init__.py b/parts/django/django/conf/locale/no/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/no/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/no/formats.py b/parts/django/django/conf/locale/no/formats.py
deleted file mode 100644
index fbc6142..0000000
--- a/parts/django/django/conf/locale/no/formats.py
+++ /dev/null
@@ -1,34 +0,0 @@
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%j.%m.%Y', '%j.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06'
- '%Y-%m-%j', # '2006-10-25',
- # '%j. %b %Y', '%j %b %Y', # '25. okt 2006', '25 okt 2006'
- # '%j. %b. %Y', '%j %b. %Y', # '25. okt. 2006', '25 okt. 2006'
- # '%j. %B %Y', '%j %B %Y', # '25. oktober 2006', '25 oktober 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%Y-%m-%j', # '2006-10-25'
- '%j.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%j.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%j.%m.%Y', # '25.10.2006'
- '%j.%m.%y %H:%M:%S', # '25.10.06 14:30:59'
- '%j.%m.%y %H:%M', # '25.10.06 14:30'
- '%j.%m.%y', # '25.10.06'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/pl/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/pl/LC_MESSAGES/django.mo
deleted file mode 100644
index 200e9f0..0000000
--- a/parts/django/django/conf/locale/pl/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/pl/LC_MESSAGES/django.po b/parts/django/django/conf/locale/pl/LC_MESSAGES/django.po
deleted file mode 100644
index 9ced49a..0000000
--- a/parts/django/django/conf/locale/pl/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5172 +0,0 @@
-# translation of django.po to Polish
-# Polish .po file.
-# This file is distributed under the same license as the django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-28 12:24+0200\n"
-"PO-Revision-Date: 2008-02-25 15:53+0100\n"
-"Last-Translator: Jarek Zgoda <jarek.zgoda@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%"
-"100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "arabski"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "bułgarski"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengalski"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bośniacki"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "kataloński"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "czeski"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "walijski"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "duński"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "niemiecki"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "grecki"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "angielski"
-
-#: conf/global_settings.py:55
-msgid "Spanish"
-msgstr "hiszpański"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "hiszpański argentyński"
-
-#: conf/global_settings.py:57
-msgid "Estonian"
-msgstr "estoński"
-
-#: conf/global_settings.py:58
-msgid "Basque"
-msgstr "baskijski"
-
-#: conf/global_settings.py:59
-msgid "Persian"
-msgstr "perski"
-
-#: conf/global_settings.py:60
-msgid "Finnish"
-msgstr "fiński"
-
-#: conf/global_settings.py:61
-msgid "French"
-msgstr "francuski"
-
-#: conf/global_settings.py:62
-msgid "Frisian"
-msgstr "fryzyjski"
-
-#: conf/global_settings.py:63
-msgid "Irish"
-msgstr "irlandzki"
-
-#: conf/global_settings.py:64
-msgid "Galician"
-msgstr "galicyjski"
-
-#: conf/global_settings.py:65
-msgid "Hebrew"
-msgstr "hebrajski"
-
-#: conf/global_settings.py:66
-msgid "Hindi"
-msgstr "hindi"
-
-#: conf/global_settings.py:67
-msgid "Croatian"
-msgstr "chorwacki"
-
-#: conf/global_settings.py:68
-msgid "Hungarian"
-msgstr "węgierski"
-
-#: conf/global_settings.py:69
-msgid "Icelandic"
-msgstr "islandzki"
-
-#: conf/global_settings.py:70
-msgid "Italian"
-msgstr "włoski"
-
-#: conf/global_settings.py:71
-msgid "Japanese"
-msgstr "japoński"
-
-#: conf/global_settings.py:72
-msgid "Georgian"
-msgstr "gruziński"
-
-#: conf/global_settings.py:73
-msgid "Khmer"
-msgstr "khmerski"
-
-#: conf/global_settings.py:74
-msgid "Kannada"
-msgstr "kannada"
-
-#: conf/global_settings.py:75
-msgid "Korean"
-msgstr "koreański"
-
-#: conf/global_settings.py:76
-msgid "Lithuanian"
-msgstr "litewski"
-
-#: conf/global_settings.py:77
-msgid "Latvian"
-msgstr "łotewski"
-
-#: conf/global_settings.py:78
-msgid "Macedonian"
-msgstr "macedoński"
-
-#: conf/global_settings.py:79
-msgid "Dutch"
-msgstr "holenderski"
-
-#: conf/global_settings.py:80
-msgid "Norwegian"
-msgstr "norweski"
-
-#: conf/global_settings.py:81
-msgid "Polish"
-msgstr "polski"
-
-#: conf/global_settings.py:82
-msgid "Portuguese"
-msgstr "portugalski"
-
-#: conf/global_settings.py:83
-msgid "Brazilian Portuguese"
-msgstr "brazylijski portugalski"
-
-#: conf/global_settings.py:84
-msgid "Romanian"
-msgstr "rumuński"
-
-#: conf/global_settings.py:85
-msgid "Russian"
-msgstr "rosyjski"
-
-#: conf/global_settings.py:86
-msgid "Slovak"
-msgstr "słowacki"
-
-#: conf/global_settings.py:87
-msgid "Slovenian"
-msgstr "słoweński"
-
-#: conf/global_settings.py:88
-msgid "Albanian"
-msgstr "albański"
-
-#: conf/global_settings.py:89
-msgid "Serbian"
-msgstr "serbski"
-
-#: conf/global_settings.py:90
-msgid "Serbian Latin"
-msgstr "serbski (łaciński)"
-
-#: conf/global_settings.py:91
-msgid "Swedish"
-msgstr "szwedzki"
-
-#: conf/global_settings.py:92
-msgid "Tamil"
-msgstr "tamilski"
-
-#: conf/global_settings.py:93
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:94
-msgid "Thai"
-msgstr "tajski"
-
-#: conf/global_settings.py:95
-msgid "Turkish"
-msgstr "turecki"
-
-#: conf/global_settings.py:96
-msgid "Ukrainian"
-msgstr "ukraiński"
-
-#: conf/global_settings.py:97
-msgid "Vietnamese"
-msgstr "wietnamski"
-
-#: conf/global_settings.py:98
-msgid "Simplified Chinese"
-msgstr "chiński uproszczony"
-
-#: conf/global_settings.py:99
-msgid "Traditional Chinese"
-msgstr "chiński tradycyjny"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Usunięto %(count)d %(items)s."
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
-msgid "Are you sure?"
-msgstr "Jesteś pewien?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Usuń wybrane %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Przez %s:</h3>\n"
-"</ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Wszystko"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Dowolna data"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Dzisiaj"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Ostatnie 7 dni"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Ten miesiąc"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Ten rok"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Tak"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Nie"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Nieznany"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Akcja:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "czas akcji"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id obiektu"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "reprezentacja obiektu"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "flaga akcji"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "zmień wiadomość"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "log"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "logi"
-
-#: contrib/admin/options.py:142 contrib/admin/options.py:157
-msgid "None"
-msgstr "brak"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr "Zmieniono %s"
-
-#: contrib/admin/options.py:563 contrib/admin/options.py:573
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:573
-msgid "and"
-msgstr "i"
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Dodano %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Zmieniono %(list)s w %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Usunięto %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:581
-msgid "No fields changed."
-msgstr "Żadne pole nie zmienione."
-
-#: contrib/admin/options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" dodany pomyślnie."
-
-#: contrib/admin/options.py:651 contrib/admin/options.py:684
-msgid "You may edit it again below."
-msgstr "Możesz ponownie edytować wpis poniżej."
-
-#: contrib/admin/options.py:661 contrib/admin/options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr "Możesz dodać nowy wpis %s poniżej."
-
-#: contrib/admin/options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" zostało pomyślnie zmienione."
-
-#: contrib/admin/options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" dodane pomyślnie. Możesz edytować ponownie wpis poniżej."
-
-#: contrib/admin/options.py:744
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Wykonanie akcji wymaga wybrania obiektów. Żaden obiekt nie został zmieniony."
-
-#: contrib/admin/options.py:762
-msgid "No action selected."
-msgstr "Nie wybrano akcji."
-
-#: contrib/admin/options.py:842
-#, python-format
-msgid "Add %s"
-msgstr "Dodaj %s"
-
-#: contrib/admin/options.py:868 contrib/admin/options.py:1080
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Obiekt %(name)s o kluczu głównym %(key)r nie istnieje."
-
-#: contrib/admin/options.py:933
-#, python-format
-msgid "Change %s"
-msgstr "Zmień %s"
-
-#: contrib/admin/options.py:978
-msgid "Database error"
-msgstr "Błąd bazy danych"
-
-#: contrib/admin/options.py:1014
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s został pomyślnie zmieniony."
-msgstr[1] "%(count)s %(name)s zostały pomyślnie zmienione."
-msgstr[2] "%(count)s %(name)s zostało pomyślnie zmienionych."
-
-#: contrib/admin/options.py:1041
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s wybrany"
-msgstr[1] "%(total_count)s wybrane"
-msgstr[2] "%(total_count)s wybranych"
-
-#: contrib/admin/options.py:1046
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 z %(cnt)s wybranych"
-
-#: contrib/admin/options.py:1093
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" usunięty pomyślnie."
-
-#: contrib/admin/options.py:1130
-#, python-format
-msgid "Change history: %s"
-msgstr "Historia zmian: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Proszę wpisać poprawną nazwę użytkownika i hasło. Uwaga: wielkość liter ma "
-"znaczenie."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Twoja sesja wygasła, zaloguj się ponownie."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Twoja przeglądarka nie chce akceptować ciasteczek. Zmień jej ustawienia i "
-"spróbuj ponownie."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Nazwy użytkowników nie mogą zawierać znaku '@'."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Podany adres e-mail nie jest Twoją nazwą użytkownika. Spróbuj '%s'."
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Administracja stroną"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Zaloguj się"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "%s - administracja"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Czas:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Teraz:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Zmień:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Szukaj"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Dodaj kolejny"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Strona nie znaleziona"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Niestety, żądana strona nie została znaleziona."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Początek"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Błąd serwera"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Błąd serwera (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Błąd Serwera <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Wystąpił niespodziewany błąd. Został on zgłoszony e-mailem administratorowi "
-"strony i powinien zostać wkrótce naprawiony. Dziękujemy za cierpliwość."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Wykonaj wybraną akcję"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Wykonaj"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Kliknij by wybrać obiekty na wszystkich stronach"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Wybierz wszystkie %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Wyczyść wybór"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Witaj,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentacja"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Zmiana hasła"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Wyloguj się"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Administracja stroną Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administracja Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Dodaj"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historia"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Pokaż na stronie"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Proszę popraw poniższy błąd."
-msgstr[1] "Proszę popraw poniższe błędy."
-msgstr[2] "Proszę popraw poniższe błędy."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Dodaj %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtr"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Usuń"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Skasowanie %(object_name)s '%(escaped_object)s' spowoduje usunięcie "
-"zależnych obiektów, lecz nie posiadasz uprawnień do usunięcia następujących "
-"typów obiektów:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Czy chcesz skasować %(object_name)s \"%(escaped_object)s\"? Następujące "
-"zależne obiekty zostaną skasowane:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Tak, na pewno"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Usuwanie wielu obiektów"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Skasowanie %(object_name)s spowoduje usunięcie zależnych obiektów, lecz nie "
-"posiadasz uprawnień do usunięcia następujących typów obiektów:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Czy chcesz skasować wybrane %(object_name)s? Następujące obiekty i zależne "
-"od nich zostaną skasowane:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Używając %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modele dostępne w aplikacji %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Zmień"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Nie masz uprawnień by edytować cokolwiek."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Ostatnie akcje"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Moje akcje"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Brak"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Zawartość nieznana"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Instalacja Twojej bazy danych jest niepoprawna. Upewnij się, że odpowiednie "
-"tabele zostały utworzone i odpowiedni użytkownik jest uprawniony do ich "
-"odczytu."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Nazwa użytkownika:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Hasło:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Data/czas"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Użytkownik"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Akcja"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Ten obiekt nie ma historii zmian. Najprawdopodobniej wpis ten nie został "
-"dodany poprzez panel administracyjny."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Pokaż wszystko"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Zapisz"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Szukaj"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 wynik"
-msgstr[1] "%(counter)s wyniki"
-msgstr[2] "%(counter)s wyników"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s trafień"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Zapisz jako nowe"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Zapisz i dodaj nowe"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Zapisz i kontynuuj edycję"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Najpierw podaj nazwę użytkownika i hasło. Następnie będziesz mógł edytować "
-"więcej opcji użytkownika."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Podaj nowe hasło dla użytkownika <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Hasło"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Hasło (powtórz)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Podaj powyższe hasło w celu weryfikacji."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Dodaj kolejne %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Usuń"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Usunąć?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Dziękujemy za odwiedzenie serwisu."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Zaloguj się ponownie"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Zmiana hasła"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Hasło zmienione"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Twoje hasło zostało zmienione."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr "Podaj swoje stare hasło i dwa razy nowe."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Stare hasło"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nowe hasło"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Zmień hasło"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Zresetuj hasło"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Resetowanie hasła zakończone"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Twoje hasło zostało ustawione. Możesz się teraz zalogować."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Potwierdzenie zresetowania hasła"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Podaj nowe hasło"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Podaj dwukrotnie nowe hasło, by można było zweryfikować, czy zostało wpisane "
-"poprawnie."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nowe hasło:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potwierdź hasło:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Resetowanie hasła nieudane"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Link do resetowania hasła był niepoprawny, być może dlatego, że został już "
-"raz użyty. Możesz ponownie zażądać zresetowania hasła."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Udane resetowanie hasła"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Instrukcje dalszego postępowania zostały wysłane na podany adres e-mail. "
-"Powinieneś otrzymać je niebawem."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Otrzymałeś ten e-mail gdyż zażądałeś zresetowania hasła"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "dla twojego konta użytkownika na stronie %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Proszę, idź do podanej strony i wybierz nowe hasło:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Twoja nazwa użytkownika:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Dziękujemy za używanie naszej strony!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Zespół %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Zapomniałeś hasła? Podaj swój adres e-mail, a prześlemy Ci instrukcję, jak "
-"ustawić nowe hasło."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Adres e-mail:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Zresetuj moje hasło"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Wszystkie daty"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Zaznacz %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Zaznacz %s aby zmienić"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "strona"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "szablon"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtr:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "widok:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikacja %r nie została znaleziona"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r nie został znaleziony w aplikacji %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "powiązany obiekt `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "powiązane obiekty `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "wszystkie %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "liczba %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Pola obiektów %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s nie jest obiektem urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Zakładki"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Zakładki Dokumentacji"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Aby zainstalować skryptozakładki, przeciągnij łącze do "
-"paska zakładek\n"
-"lub kliknij prawym klawiszem na łączu i dodaj je do zakładek. Teraz możesz\n"
-"wybrać skryptozakładkę na dowolnej stronie serwisu. Uwaga: niektóre z tych "
-"skryptozakładek wymagają przeglądania serwisu z komputera\n"
-"\"wewnętrznego\" (skontaktuj się z administratorem systemu, jeśli nie jesteś "
-"pewien, czy ten komputer jest \"wewnętrznym\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentacja dla tej strony"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Przekierowuje z dowolnej strony do dokumentacji dla widoku, który ją "
-"generuje."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Pokaż ID obiektu"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Pokazuje typ i unikalne ID dla stron, które reprezentują pojedynczy obiekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Edytuj ten obiekt (bieżące okno)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Przeskok do panelu administratora dla stron reprezentujących pojedynczy "
-"obiekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Edytuj ten obiekt (nowe okno)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Jak wyżej, tyle że otwiera nowe okno."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Dane osobowe"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Uprawnienia"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Ważne daty"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupy"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Hasło zostało zmienione pomyślnie."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Zmień hasło: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Nazwa użytkownika"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Wymagane. 30 znaków lub mniej. Tylko litery, cyfry i znaki @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "To pole może zawierać tylko litery, cyfry i znaki @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Potwierdzenie hasła"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Użytkownik o tej nazwie już istnieje."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Hasła się nie zgadzają."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "To konto jest nieaktywne."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Twoja przeglądarka nie chce akceptować ciasteczek. Są one wymagane do "
-"zalogowania się."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Ten adres e-mail nie ma przypisanego konta. Jesteś pewien, że "
-"zarejestrowałeś się?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Hasło zresetowane dla %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Nowe hasło ponownie"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Podane stare hasło jest niepoprawne. Proszę podać je jeszcze raz."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nazwa"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "nazwa kodowa"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "uprawnienie"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "uprawnienia"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupa"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupy"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "użytkownik"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Wymagane. 30 znaków lub mniej. Tylko litery, cyfry i znaki @/./+/-/_."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "imię"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "nazwisko"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "adres e-mail"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "hasło"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Użyj '[algo]$[salt]$[hexdigest]' lub <a href=\"password/\">formularza zmiany "
-"hasła</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "w zespole"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Oznacza czy użytkownik może zalogować się do panelu admina."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktywny"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Oznacza czy użytkownika należy uważać za aktywnego. Odznacz to, zamiast "
-"usuwać konta."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "status administratora"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Oznacza, że ten użytkownik ma wszystkie uprawnienia bez jawnego "
-"przypisywania ich."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "ostatnio zalogowany"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "data przyłączenia"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Oprócz uprawnień przypisanych bezpośrednio użytkownikowi otrzyma on "
-"uprawnienia grup, do których należy."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "uprawnienia użytkownika"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "użytkownik"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "użytkownicy"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "wiadomość"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Wylogowany"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Wprowadź poprawny adres e-mail."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Zawartość"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadane"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "oflagowany"
-msgstr[1] "oflagowane"
-msgstr[2] "oflagowanych"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Oflaguj wybrane komentarze"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "zaakceptowany"
-msgstr[1] "zaakceptowane"
-msgstr[2] "zaakceptowanych"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Zaakceptuj wybrane komentarze"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "usunięty"
-msgstr[1] "usunięte"
-msgstr[2] "usuniętych"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Usuń wybrane komentarze"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 komentarz został %(action)s"
-msgstr[1] "%(count)s komentarze zostały %(action)s"
-msgstr[2] "%(count)s komentarzy zostało %(action)s"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "komentarze na %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Ostatnie komentarze na %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nazwa"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Adres e-mail"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentarz"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Nie wolno przeklinać! Słowo %s nie jest dozwolone."
-msgstr[1] "Nie wolno przeklinać! Słowa %s nie są dozwolone."
-msgstr[2] "Nie wolno przeklinać! Słowa %s nie są dozwolone."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Jeżeli wpiszesz cokolwiek w to pole, Twój komentarz zostanie uznany za spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "typ zawartości"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID obiektu"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nazwa użytkownika"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "adres e-mail użytkownika"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL użytkownika"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentarz"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "data/czas dodania"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "Adres IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "publicznie dostępny"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Odznacz to pole, aby komentarz nie był wyświetlany w serwisie."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "usunięty"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Zaznacz to pole jeżeli komentarz jest nieodpowiedni. Wyświetlony zostanie "
-"tekst \"Ten komentarz został usunięty\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentarze"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Ten komentarz został dodany przez zalogowanego użytkownika i dlatego nazwa "
-"jest tylko do odczytu."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Ten komentarz został dodany przez zalogowanego użytkownika i dlatego adres e-"
-"mail jest tylko do odczytu."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Dodane przez %(user)s dnia %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "flaga"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "data"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "flaga dla komentarza"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "flagi dla komentarzy"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Zaakceptuj komentarz"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Czy ten komentarz na pewno ma być publiczny?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Zaakceptuj"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Dziękujemy za zaakceptowanie"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Dziękujemy za poświęcenie czasu na podniesienie jakości dyskusji w naszym "
-"serwisie"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Usuń komentarz"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Czy na pewno usunąć ten komentarz?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Dziękujemy za usunięcie"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Oflaguj ten komentarz"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Czy na pewno oflagować ten komentarz?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Flaga"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Dziękujemy za oflagowanie"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Zapisz"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Podgląd"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Dziękujemy za dodanie komentarza"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Dziękujemy za komentarz"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Podgląd komentarza"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Proszę popraw poniższy błąd."
-msgstr[1] "Proszę popraw poniższe błędy."
-msgstr[2] "Proszę popraw poniższe błędy."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Zapisz swój komentarz"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "lub wprowadź jakieś zmiany"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "nazwa pythonowa modelu klasy"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "typy zawartości"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Przykład: '/about/contact/'. Upewnij się że wpisałeś otwierający i "
-"zamykający ukośnik."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"To pole może zawierać jedynie litery, cyfry, podkreślenia, myślniki i "
-"ukośniki."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opcje zaawansowane"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "tytuł"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "zawartość"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "włącz komentarze"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nazwa szablonu"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Przykład: 'flatpages/contact_page.html'. Jeżeli nie zostanie podane, system "
-"użyje 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "wymagana rejestracja"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Jeżeli zaznaczone - tylko zalogowani użytkownicy będą mogli zobaczyć stronę."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "strona statyczna"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "strony statyczne"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Przepraszamy, ale Twój formularz wygasł. Proszę kontynuować wypełnianie "
-"formularza od tej strony."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Podstawowe pole GIS - odpowiada typowi Geometry w specyfikacji OpenGIS."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Punkt"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Ścieżka"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Wielokąt"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Zbiór punktów"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Zbiór ścieżek"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Zbiór wielokątów"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Zbiór geometrii"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Brak wartości geometrii."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Błędna wartość geometrii."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Błędny typ geometrii."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Wystąpił błąd podczas przekształcania geometrii do SRID pola formularza "
-"geometrii."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "-y"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "-szy"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "-gi"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "-ci"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milion"
-msgstr[1] "%(value).1f miliony"
-msgstr[2] "%(value).1f milionów"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miliard"
-msgstr[1] "%(value).1f miliardy"
-msgstr[2] "%(value).1f miliardów"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f bilion"
-msgstr[1] "%(value).1f biliony"
-msgstr[2] "%(value).1f bilionów"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "jeden"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dwa"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "trzy"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "cztery"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "pięć"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "sześć"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "siedem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "osiem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "dziewięć"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "dzisiaj"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "jutro"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "wczoraj"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Wpisz kod pocztowy w formacie NNNN lub ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "To pole może zawierać jedynie liczby."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "To pole musi zawierać 7 lub 8 cyfr."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Podaj poprawny numer CUIT w formacie XX-XXXXXXXX-X lub XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Niepoprawny CUIT"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Karyntia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Dolna Austria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Górna Austria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wiedeń"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Wpisz kod pocztowy w formacie XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Wpisz poprawny numer austriackiego ubezpieczenia w formacie XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Wpisz czterocyfrowy kod pocztowy."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Wpisz kod pocztowy w formacie XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Numery telefoniczne muszą być w formacie XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Wybierz poprawny brazylijski stan. Ten stan nie jest jednym z dostępnych "
-"stanów."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Błędny numer CPF."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "To pole nie może zawierać więcej niż 11 cyfr lub 14 znaków."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Błędny numer CNPJ."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "To pole musi zawierać co najmniej 14 cyfr"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Wpisz kod pocztowy w formacie XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Wpisz poprawny numer kanadyjskiego ubezpieczenia w formacie XXX-XXX-XXXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Argowia"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Bazylea-miasto"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Bazylea-okręg"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berno"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fryburg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genewa"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Gryzonia"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerna"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Szafuza"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solura"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "Sankt Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Turgowia"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurych"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Podaj poprawny numer szwajcarskiego dowodu osobistego lub paszportu w "
-"formacie X1234567<0 lub 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Wpisz poprawny chilijski RUT."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Podaj poprawny chilijski RUT w formacie XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Podany chilijski RUT jest nieprawidłowy."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Kraj środkowoczeski"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Kraj południowoczeski"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Kraj pilzneński"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Kraj karlowarski"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Kraj ustecki"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Kraj liberecki"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Kraj hredecki"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Kraj pardubicki"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Wysoczyzna"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Kraj południowomorawski"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Kraj ołomuniecki"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Kraj zliński"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Kraj morawski-śląski"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Wpisz kod pocztowy w formacie XXXXX or XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Wpisz numer urodzenia w formacie XXXXXX/XXXX or XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Niepoprawny dodatkowy parametr płci, wartości poprawne to 'f' i 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Wpisz poprawny numer urodzenia."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Wpisz poprawny numer IC."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Badenia-Wirtembergia"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bawaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburgia"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Brema"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hesja"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Meklemburgia-Pomorze Zachodnie"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Dolna Saksonia"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Nadrenia Północna-Westfalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Nadrenia-Palatynat"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Kraj Saary"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saksonia"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saksonia-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Szlezwik-Holsztyn"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Turyngia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Wpisz kod pocztowy w formacie XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Podaj poprawny numer niemieckiego dowodu osobistego w formacie XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arawa"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Baleary"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Kadyks"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellon"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Kordowa"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Gipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madryt"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcja"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Nawarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturia"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanka"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Kantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segowia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sewilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Walencja"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Vizcaya"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Saragossa"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andaluzja"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragonia"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturia"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Baleary"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Kraj Basków"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Wyspy Kanaryjskie"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastylia-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastylia-Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Estremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicja"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcja"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Nawarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Walencja"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Wpisz kod pocztowy w zakresie i formacie 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Wpisz numer telefoniczny w formacie 6XXXXXXXX, 8XXXXXXXX lub 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Proszę wpisać poprawny numer NIF, NIE lub CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Proszę wpisać poprawny numer NIF lub NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Niepoprawna suma kontrolna NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Niepoprawna suma kontrolna NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Niepoprawna suma kontrolna CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Podaj poprawny numer konta bankowego w formacie XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Niepoprawna suma kontrolna numeru konta bankowego."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Wpis poprawny numer fińskiego ubezpieczenia socjalnego."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Numery telefoniczne muszą być w formacie 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Wpisz poprawny kod pocztowy"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Wpisz poprawny numer telefonu"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Wpisz poprawny numer rejestracyjny pojazdu"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Wpisz poprawny numer NIK/KTP."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Wpisz kod pocztowy w formacie XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Podaj poprawny numer islandzkiego dowodu osobistego w formacie XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Numer islandzkiego dowodu osobistego jest błędny."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Wpisz poprawny kod pocztowy."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Wpisz poprawny numer ubezpieczenia socjalnego."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Wpisz poprawny numer VAT."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Wpisz kod pocztowy w formacie XXXXXXX lub XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroszima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Wpisz poprawny kuwejcki numer ID"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Kalifornia Dolna"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Kalifornia Dolna Południowa"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Meksyk (miasto)"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Meksyk (stan)"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michocan"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo Leon"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Queretaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potasi"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Jukatan"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Wpisz poprawny kod pocztowy"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Wpisz poprawny numer SoFi"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Fryzja"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Geldria"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburgia"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Brabancja Północna"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Holandia Północna"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zelandia"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Holandia Południowa"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Wpis poprawny numer norweskiego ubezpieczenia socjalnego."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "To pole musi zawierać 8 cyfr."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "To pole musi zawierać 11 cyfr."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Numer PESEL składa się z 11 cyfr."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Błędna suma kontrolna numeru PESEL."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Wpisz numer NIP w formacie XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Błędna suma kontrolna numeru NIP"
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Numer REGON składa się z 9 lub 14 cyfr."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Błędna suma kontrolna numeru REGON"
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Wpisz kod pocztowy w formacie XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Dolnośląskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kujawsko-Pomorskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lubelskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubuskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Łódzkie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Małopolskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Mazowieckie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opolskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Podkarpackie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlaskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomorskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Śląskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Świętokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmińsko-Mazurskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Wielkopolskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Zachodniopomorskie"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Wpisz kod pocztowy w formacie XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Numery telefonów muszą mieć 9 cyfr lub zaczynać się od + albo 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Wpisz poprawny CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Wpisz poprawny CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Podaj poprawny IBAN w formacie ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Numery telefoniczne muszą być w formacie XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Wpisz kod pocztowy w formacie XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Wpisz poprawny szwedzki numer organizacji."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Wpis poprawny szwedzki numer identyfikacji osobistej."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Wpisz szwedzki kod pocztowy w formacie XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Sztokholm"
-
-# while Stockholm is translated, other administrative unit names are *not*
-# translated to Polish, according to Encyklopedia PWN
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Bańska Bystrzyca"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Bańska Szczawnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardiów"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratysława I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratysława II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratysława III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratysława IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratysława V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Czadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kieżmarek"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Koszyce I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Koszyce II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Koszyce III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Koszyce IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Koszyce - okolice"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Lewocza"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptowski Mikulasz"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Łuczeniec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Pieszczany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Poważska Bystrzyca"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Preszów"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Rużemberk"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Nowa Wieś Spiska"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubowla"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolczany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trenczyn"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnawa"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Twardoszyn"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zwoleń"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Żylina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Kraj bańskobystrzycki"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Kraj bratysławski"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kraj koszycki"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Kraj nitrzański"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Kraj preszowski"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Kraj trenczyński"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Kraj trnawski"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Kraj żyliński"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Wpisz poprawny kod pocztowy."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Kornwalia i wyspy Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Wielki Londyn"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Hrabstwo Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Hrabstwo Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Hrabstwo Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Hrabstwo Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Hrabstwo Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Hrabstwo Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Scottish Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkady"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Szetlandy"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Hebrydy Zewnętrzne"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Anglia"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlandia Północna"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Szkocja"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Walia"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Wpisz kod pocztowy w formacie XXXXX. lub XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Numery telefoniczne muszą być w formacie XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Wpisz poprawny numer U.S. Social Security w formacie XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Podaj stan lub terytorium USA."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stan USA (dwie duże litery)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Numer telefonu"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Wprowadź poprawny numer CI w formacie X.XXX.XXX-X, XXXXXXX-X lub XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Wpisz poprawny numer CI."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Wpisz poprawny południowoafrykański numer ID"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Wpisz poprawny południowoafrykański kod pocztowy"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Prowincja Przylądkowa Wschodnia"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Wolne Państwo"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Prowincja Przylądkowa Północna"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Prowincja Północno-Zachodnia"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Prowincja Przylądkowa Zachodnia"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "testowa wiadomość z opóźnioną ewaluacją"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "przekieruj z"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "Podaj pełną ścieżkę bez nazwy domeny. Przykład: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "przekierowanie do"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "Ścieżka jak wyżej lub pełny URL z http://"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "przekieruj"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "przekierowania"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "klucz sesji"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "data sesji"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "data wygaśnięcia sesji"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesja"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesje"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nazwa domeny"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "wyświetlana nazwa"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "strony"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Wpisz poprawną wartość."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Wpisz poprawny URL."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Ten odnośnik jest nieprawidłowy."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "To pole może zawierać jedynie litery, cyfry, podkreślenia i myślniki."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Wprowadź poprawny adres IPv4."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Wpisz tylko cyfry oddzielone przecinkami."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Upewnij się, że ta wartość jest %(limit_value)s (jest %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Upewnij się, że ta wartość jest mniejsza lub równa %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Upewnij się, że ta wartość jest większa lub równa %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Upewnij się, że ta wartość ma co najmniej %(limit_value)d znaków (ma długość "
-"%(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaków (ma długość "
-"%(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"Wartości w %(field_name)s muszą być unikalne dla wyszukiwań %(lookup)s w %"
-"(date_field)s"
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(field_label)s już istnieje w %(model_name)s."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Wartość %r nie jest poprawnym wyborem."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "To pole nie może być puste."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "To pole nie może być puste."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Pole typu: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Liczba całkowita"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Ta wartość musi być liczbą całkowitą."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr ""
-"Ta wartość musi być wartością logiczną (True, False - prawda lub fałsz)."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Wartość logiczna (True, False - prawda lub fałsz)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Łańcuch (do %(max_length)s znaków)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Liczby całkowite rozdzielone przecinkami"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Data (bez godziny)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Proszę wpisać poprawną datę w formacie RRRR-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Niepoprawna data: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Wprowadź poprawną datę i godzinę w formacie YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Data (z godziną)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Ta wartość musi być liczbą dziesiętną."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Liczba dziesiętna"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Adres e-mail"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Ścieżka do pliku"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Ta wartość musi być liczbą rzeczywistą."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Liczba zmiennoprzecinkowa"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Duża liczba całkowita (8 bajtów)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr ""
-"Ta wartość musi być jedną z None (nic), True (prawda) lub False (fałsz)."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Wartość logiczna (True, False, None - prawda, fałsz lub nic)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Tekst"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Czas"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Proszę wpisać poprawną godzinę w formacie HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "Tekst XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Model %(model)s o kluczu głównym %(pk)r nie istnieje."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Klucz obcy (typ określony przez pole powiązane)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Powiązanie jeden do jednego"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Powiązanie wiele do wiele"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Przytrzymaj wciśnięty klawisz \"Ctrl\" lub \"Command\" na Mac'u aby "
-"zaznaczyć więcej niż jeden wybór."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Proszę podać poprawne identyfikatory %(self)s. Wartość %(value)r jest "
-"niepoprawna."
-msgstr[1] ""
-"Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są "
-"niepoprawne."
-msgstr[2] ""
-"Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są "
-"niepoprawne."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "To pole jest wymagane."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Wpisz liczbę całkowitą."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Wpisz liczbę."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Upewnij się, że jest nie więcej niż %s cyfr."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Upewnij się, że jest nie więcej niż %s miejsc po przecinku."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Upewnij się, że jest nie więcej niż %s miejsc przed przecinkiem."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Wpisz poprawną datę."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Wpisz poprawną godzinę."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Wpisz poprawną datę/godzinę."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Nie wysłano żadnego pliku. Sprawdź typ kodowania formularza."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Żaden plik nie został przesłany."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Wysłany plik jest pusty."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Upewnij się, że nazwa tego pliku ma co najwyżej %(max)d znaków (ma długość %"
-"(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Wgraj poprawny plik graficzny. Ten, który został wgrany, nie jest obrazem, "
-"albo jest uszkodzony."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Wybierz poprawną wartość. %(value)s nie jest jednym z dostępnych wyborów."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
-msgid "Enter a list of values."
-msgstr "Podaj listę wartości."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Porządek"
-
-#: forms/models.py:567
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Popraw zduplikowane dane w %(field)s."
-
-#: forms/models.py:571
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Popraw zduplikowane dane w %(field)s, które wymaga unikalności."
-
-#: forms/models.py:577
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Popraw zduplikowane dane w %(field_name)s, które wymaga unikalności dla %"
-"(lookup)s w polu %(date_field)s."
-
-#: forms/models.py:585
-msgid "Please correct the duplicate values below."
-msgstr "Popraw poniższe zduplikowane wartości."
-
-#: forms/models.py:860
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Osadzony klucz obcy nie pasuje do klucza głównego obiektu rodzica."
-
-#: forms/models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Wybierz poprawną wartość. Podana nie jest jednym z dostępnych wyborów."
-
-#: forms/models.py:1008
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Wybierz poprawną wartość. %s nie jest jednym z dostępnych wyborów."
-
-#: forms/models.py:1010
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" nie jest poprawną wartością klucza głównego."
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "tak,nie,może"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bajt"
-msgstr[1] "%(size)d bajty"
-msgstr[2] "%(size)d bajtów"
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "po południu"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "rano"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "po południu"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "rano"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "północ"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "południe"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Poniedziałek"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Wtorek"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Środa"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Czwartek"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Piątek"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Sobota"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Niedziela"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Pon"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Wt"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Śr"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Czw"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Pi"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "So"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Nd"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Styczeń"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Luty"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Marzec"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Kwiecień"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Maj"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Czerwiec"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Lipiec"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Sierpień"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Wrzesień"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Październik"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Listopad"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Grudzień"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "sty"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "luty"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "marz"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "kwie"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "maj"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "czerw"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "lip"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "sier"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "wrze"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "paź"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "list"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "gru"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Sty."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Lut."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Sier."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Wrz."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Paź."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Lis."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Gru."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "lub"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "rok"
-msgstr[1] "lata"
-msgstr[2] "lat"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "miesiąc"
-msgstr[1] "miesiące"
-msgstr[2] "miesięcy"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "tydzień"
-msgstr[1] "tygodnie"
-msgstr[2] "tygodni"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dzień"
-msgstr[1] "dni"
-msgstr[2] "dni"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "godzina"
-msgstr[1] "godziny"
-msgstr[2] "godzin"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuta"
-msgstr[1] "minuty"
-msgstr[2] "minut"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuty"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:512
-msgid "DATE_FORMAT"
-msgstr "Y-m-d"
-
-#: utils/translation/trans_real.py:513
-msgid "DATETIME_FORMAT"
-msgstr "Y-m-d H:i:s"
-
-#: utils/translation/trans_real.py:514
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: utils/translation/trans_real.py:535
-msgid "YEAR_MONTH_FORMAT"
-msgstr "Y-m"
-
-#: utils/translation/trans_real.py:536
-msgid "MONTH_DAY_FORMAT"
-msgstr "m-d"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s zostało pomyślnie utworzone."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s zostało pomyślnie zmienione."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s zostało usunięte."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Jedno lub więcej %(fieldname)s w %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Jedno lub więcej %(fieldname)s w %(name)s:"
-
-#~ msgid ""
-#~ "<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
-#~ msgstr ""
-#~ "<span class=\"_acnt\">0</span> z %(total_count)s %(module_name)s wybrane"
-
-#~ msgid "Old password:"
-#~ msgstr "Stare hasło:"
-
-#~ msgid "Add user"
-#~ msgstr "Dodaj użytkownika"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Relacja do modelu rodzica"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Kolejka moderacji komentarzy"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "Żaden komentarz nie oczekuje na akceptację"
-
-#~ msgid "Email"
-#~ msgstr "E-mail"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Zalogowany?"
-
-#~ msgid "IP Address"
-#~ msgstr "Adres IP"
-
-#~ msgid "Date posted"
-#~ msgstr "Data dodania"
-
-#~ msgid "yes"
-#~ msgstr "tak"
-
-#~ msgid "no"
-#~ msgstr "nie"
diff --git a/parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 4e8e6a6..0000000
--- a/parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 78cf722..0000000
--- a/parts/django/django/conf/locale/pl/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,120 +0,0 @@
-# translation of djangojs.po to Polish
-# This file is distributed under the same license as the django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-02 08:48+0200\n"
-"PO-Revision-Date: 2007-03-12 11:42+0100\n"
-"Last-Translator: Jarek Zgoda <jarek.zgoda@gmail.com>\n"
-"Language-Team: Polish <pl@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%"
-"100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Dostępne %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Wybierz wszystko"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Dodaj"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Usuń"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Wybrano %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Zaznacz swój wybór i kliknij "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Wyczyść wszystko"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Styczeń Luty Marzec Kwiecień Maj Czerwiec Lipiec Sierpień Wrzesień "
-"Październik Listopad Grudzień"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "N Pn Wt Śr Cz Pt So"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Niedziela Poniedziałek Wtorek Środa Czwartek Piątek Sobota"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Pokaż"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Ukryj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Teraz"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Zegar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Wybierz czas"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Północ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 rano"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Południe"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Anuluj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Dzisiaj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Kalendarz"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Wczoraj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Jutro"
diff --git a/parts/django/django/conf/locale/pl/__init__.py b/parts/django/django/conf/locale/pl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/pl/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/pl/formats.py b/parts/django/django/conf/locale/pl/formats.py
deleted file mode 100644
index 4520f7c..0000000
--- a/parts/django/django/conf/locale/pl/formats.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = 'j F Y H:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd-m-Y'
-SHORT_DATETIME_FORMAT = 'd-m-Y H:i:s'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06'
- '%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
- # '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%d.%m.%Y', # '25.10.2006'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/pt/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/pt/LC_MESSAGES/django.mo
deleted file mode 100644
index 07c776d..0000000
--- a/parts/django/django/conf/locale/pt/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/pt/LC_MESSAGES/django.po b/parts/django/django/conf/locale/pt/LC_MESSAGES/django.po
deleted file mode 100644
index bffff8b..0000000
--- a/parts/django/django/conf/locale/pt/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5149 +0,0 @@
-# Portuguese translation of Django.
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-01 21:26+0200\n"
-"PO-Revision-Date: 2010-03-09 10:45+0000\n"
-"Last-Translator: Nuno Mariz <nmariz@gmail.com>\n"
-"Language-Team: pt_PT <nmariz@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Árabe"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Búlgaro"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalês"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bósnio"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Catalão"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Checo"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Galês"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dinamarquês"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Alemão"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Grego"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Inglês"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Inglês Britânico"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Espanhol"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Espanhol Argentino"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estónio"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Basco"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Persa"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Filandês"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Francês"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frisão"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irlandês"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galaciano"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hebraico"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Croata"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Húngaro"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "Islandês"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "Italiano"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "Japonês"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "Georgiano"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "Canarês"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "Coreano"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "Lituano"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "Letão"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "Macedónio"
-
-#: conf/global_settings.py:80
-msgid "Dutch"
-msgstr "Holandês"
-
-#: conf/global_settings.py:81
-msgid "Norwegian"
-msgstr "Norueguês"
-
-#: conf/global_settings.py:82
-msgid "Norwegian Bokmal"
-msgstr "Norueguês (Bokmål)"
-
-#: conf/global_settings.py:83
-msgid "Norwegian Nynorsk"
-msgstr "Norueguês (Nynors)"
-
-#: conf/global_settings.py:84
-msgid "Polish"
-msgstr "Polaco"
-
-#: conf/global_settings.py:85
-msgid "Portuguese"
-msgstr "Português"
-
-#: conf/global_settings.py:86
-msgid "Brazilian Portuguese"
-msgstr "Português Brasileiro"
-
-#: conf/global_settings.py:87
-msgid "Romanian"
-msgstr "Romeno"
-
-#: conf/global_settings.py:88
-msgid "Russian"
-msgstr "Russo"
-
-#: conf/global_settings.py:89
-msgid "Slovak"
-msgstr "Eslovaco"
-
-#: conf/global_settings.py:90
-msgid "Slovenian"
-msgstr "Esloveno"
-
-#: conf/global_settings.py:91
-msgid "Albanian"
-msgstr "Albanês"
-
-#: conf/global_settings.py:92
-msgid "Serbian"
-msgstr "Sérvio"
-
-#: conf/global_settings.py:93
-msgid "Serbian Latin"
-msgstr "Sérvio Latim"
-
-#: conf/global_settings.py:94
-msgid "Swedish"
-msgstr "Sueco"
-
-#: conf/global_settings.py:95
-msgid "Tamil"
-msgstr "Tamil"
-
-#: conf/global_settings.py:96
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:97
-msgid "Thai"
-msgstr "Thai"
-
-#: conf/global_settings.py:98
-msgid "Turkish"
-msgstr "Turco"
-
-#: conf/global_settings.py:99
-msgid "Ukrainian"
-msgstr "Ucraniano"
-
-#: conf/global_settings.py:100
-msgid "Vietnamese"
-msgstr "Vietnamita"
-
-#: conf/global_settings.py:101
-msgid "Simplified Chinese"
-msgstr "Chinês Simplificado"
-
-#: conf/global_settings.py:102
-msgid "Traditional Chinese"
-msgstr "Chinês Tradicional"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Foram removidos com sucesso %(count)d %(items)s."
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
-msgid "Are you sure?"
-msgstr "Tem a certeza?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Remover %(verbose_name_plural)s seleccionados"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Por %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Todos"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Qualquer data"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Hoje"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Últimos 7 dias"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Este mês"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Este ano"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Sim"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Não"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Desconhecido"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Acção:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "hora da acção"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id do objecto"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "repr do objecto"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "flag de acção"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "modificar mensagem"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "entrada de log"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "entradas de log"
-
-#: contrib/admin/options.py:142 contrib/admin/options.py:157
-msgid "None"
-msgstr "Nenhum"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr "Foi modificado %s."
-
-#: contrib/admin/options.py:563 contrib/admin/options.py:573
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:573
-msgid "and"
-msgstr "e"
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Foram adicionados %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Foram modificados %(list)s para %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Foram removidos %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:581
-msgid "No fields changed."
-msgstr "Nenhum campo foi modificado."
-
-#: contrib/admin/options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "O(A) %(name)s \"%(obj)s\" foi adicionado(a) com sucesso."
-
-#: contrib/admin/options.py:651 contrib/admin/options.py:684
-msgid "You may edit it again below."
-msgstr "Pode editá-lo(a) outra vez abaixo."
-
-#: contrib/admin/options.py:661 contrib/admin/options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr "Pode adicionar outro %s abaixo."
-
-#: contrib/admin/options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "O(A) %(name)s \"%(obj)s\" foi modificado(a) com sucesso."
-
-#: contrib/admin/options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"O(A) %(name)s \"%(obj)s\" foi adicionado(a) com sucesso. Pode voltar a "
-"editar novamente abaixo."
-
-#: contrib/admin/options.py:744
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Os itens devem ser seleccionados de forma a efectuar acções sobre eles. "
-"Nenhum item foi modificado."
-
-#: contrib/admin/options.py:762
-msgid "No action selected."
-msgstr "Nenhuma acção seleccionada."
-
-#: contrib/admin/options.py:842
-#, python-format
-msgid "Add %s"
-msgstr "Adicionar %s"
-
-#: contrib/admin/options.py:868 contrib/admin/options.py:1080
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "O object %(name)s com a chave primária %(key)r não existe."
-
-#: contrib/admin/options.py:933
-#, python-format
-msgid "Change %s"
-msgstr "Modificar %s"
-
-#: contrib/admin/options.py:978
-msgid "Database error"
-msgstr "Erro de base de dados"
-
-#: contrib/admin/options.py:1014
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s foi modificado com sucesso."
-msgstr[1] "%(count)s %(name)s foram modificados com sucesso."
-
-#: contrib/admin/options.py:1041
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s seleccionado"
-msgstr[1] "Todos %(total_count)s seleccionados"
-
-#: contrib/admin/options.py:1046
-#, fuzzy, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "de %(count)d seleccionado"
-
-#: contrib/admin/options.py:1093
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "O(A) %(name)s \"%(obj)s\" foi removido(a) com sucesso."
-
-#: contrib/admin/options.py:1130
-#, python-format
-msgid "Change history: %s"
-msgstr "Histórico de modificações: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Por favor introduza o utilizador e palavra-passe correctos. Note que ambos "
-"os casos diferenciam maiúsculas e minúsculas."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Por favor autentique-se novamente, porque a sua sessão expirou."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Aparentemente o seu browser não está configurado para aceitar cookies. Por "
-"favor active os cookies, carrege novamente a página e volte a tentar."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Nomes de utilizador não podem conter o caracter '@'."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"O seu endereço de e-mail não é o seu nome de utilizador. Tente usar '%s'."
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Administração do site"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Entrar"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "Administração de %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Hora:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Actualmente:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Modificar:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Procurar"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Adicionar Outro"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Página não encontrada"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Pedimos desculpa, mas a página solicitada não foi encontrada."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Início"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Erro do servidor"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Erro do servidor (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Erro do servidor <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Ocorreu um erro. Foi reportado aos administradores do site via e-mail e "
-"deverá ser corrigido brevemente. Obrigado pela sua paciência."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Executar a acção seleccionada"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Ir"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Seleccionar todos %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Remover selecção"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Bem-vindo,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentação"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Modificar palavra-passe"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Sair"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Site de administração do Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administração do Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Adicionar"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "História"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Ver no site"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Por favor corrija o erro abaixo."
-msgstr[1] "Por favor corrija os erros abaixo."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Adicionar %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtro"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Remover"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"A remoção de %(object_name)s '%(escaped_object)s' resultará na remoção dos "
-"objectos relacionados, mas a sua conta não tem permissão de remoção dos "
-"seguintes tipos de objectos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Tem a certeza que deseja remover %(object_name)s \"%(escaped_object)s\"? "
-"Todos os items relacionados seguintes irão ser removidos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Sim, tenho a certeza"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Remover múltiplos objectos."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"A remoção de %(object_name)s resultará na remoção de todos os objectos "
-"relacionados, mas a sua conta não tem permissões para remover os seguintes "
-"tipos de objectos:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Tem a certeza que deseja remover os objectos %(object_name)s? Todos os "
-"seguintes objectos e seus itens relacionados serão removidos:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Por %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Models disponíveis na aplicação %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Modificar"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Não tem permissão para modificar nada."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Acções Recentes"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "As minhas Acções"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nenhum disponível"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Conteúdo desconhecido"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Passa-se algo de errado com a instalação da sua base de dados. Verifique se "
-"as tabelas da base de dados foram criadas apropriadamente e verifique se a "
-"base de dados pode ser lida pelo utilizador definido."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Utilizador:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Palavra-passe:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Data/hora"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Utilizador"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Acção"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Este objecto não tem histórico de modificações. Provavelmente não foi "
-"modificado via site de administração."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Mostrar todos"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Gravar"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Pesquisar"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultado"
-msgstr[1] "%(counter)s resultados"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s no total"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Gravar como novo"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Gravar e adicionar outro"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Gravar e continuar a editar"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Primeiro introduza o nome do utilizador e palavra-passe. Depois poderá "
-"editar mais opções do utilizador."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-"Introduza uma nova password para o utilizador <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Palavra-passe"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Palavra-passe (novamente)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Introduza a palavra-passe como acima, para verificação."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Adicionar outro %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Remover"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Remover?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Obrigado pela sua visita."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Entrar novamente"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Modificação da palavra-passe"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Palavra-passe modificada com sucesso"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "A sua palavra-passe foi modificada."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Por razões de segurança, por favor introduza a sua palavra-passe antiga e "
-"depois introduza a nova duas vezes para que possamos verificar se introduziu "
-"correctamente."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Palavra-passe antiga"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nova palavra-passe"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Modificar a minha palavra-passe"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Palavra-passe de reinicialização"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Reinicialização da palavra-passe completa"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "A sua password foi atribuída. Poderá entrar agora."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Confirmação da palavra-passe de reinicialização"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Introduza a nova palavra-passe"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Por favor, introduza a sua nova palavra-passe duas vezes para verificarmos "
-"se está correcta."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nova palavra-passe:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirmação da palavra-passe:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Palavra-passe reinicializada sem sucesso"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"O endereço de reinicialização da palavra-passe é inválido, possivelmente "
-"porque já foi usado. Por favor requisite uma nova reinicialização da palavra-"
-"passe."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Palavra-passe reinicializada com sucesso"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Foi enviado para o e-mail que submeteu as instruções de configuração da "
-"palavra-passe. Deverá estar a recebê-lo brevemente."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Está a receber este e-mail porque requisitou a reinicialização da sua "
-"palavra-passe"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "para a sua conta de utilizador em %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Por favor siga a seguinte página e escolha a sua nova password:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "O seu nome de utilizador, no caso de se ter esquecido:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Obrigado pela sua visita ao nosso site!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "A equipa do %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Esqueceu-se da palavra-passe? Introduza o seu e-mail abaixo, e enviaremos as "
-"instruções de configuração de uma nova."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Endereço de e-mail:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Reinicializar a minha palavra-passe"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Todas as datas"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Seleccionar %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Seleccione %s para modificar"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "site"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "template"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtro:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "A aplicação %r não encontrada"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "O Model %(model_name)r não foi encontrado na applicação %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "o objecto `%(app_label)s.%(data_type)s` relacionado"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "os objectos `%(app_label)s.%(object_name)s` relacionados"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "todos %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "número de %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Campos nos objectos %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s não parece ser um objecto urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Itens do bookmark"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Documentação dos itens do bookmark"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Para instalar itens no bookmark, arraste o link para sua "
-"barra \n"
-"de bookmarks, ou clique com o lado direito do rato no link e adicione ao "
-"seus bookmarks. Agora pode \n"
-"seleccionar o link do bookmark de qualquer página no site. Note que alguns "
-"destes \n"
-"itens do bookmark requerem que visualize o site de um computador designado \n"
-"por \"internal\" (entre em contacto com o seu administrador de sistema se \n"
-"não tiver a certeza se o seu computador é \"internal\".</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentação desta página"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Vai de qualquer página para a documentação da view que gera essa página."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Mostrar o ID do objecto"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Mostra o tipo de conteúdo e o ID único para as páginas que representam um "
-"único objecto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Editar este objecto (janela actual)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Vai para a página de admin para as páginas que representam um único objecto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Editar este objecto (nova janela)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Tal como acima, mas abre a página de admin numa nova janela."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Informação pessoal"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Permissões"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Datas importantes"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupos"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Palavra-passe modificada com sucesso."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Modificar a palavra-passe: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Utilizador"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Obrigatório. 30 caracteres ou menos. Apenas letras, dígitos e @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-"Este valor apenas deverá conter letras, números e caracteres @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Confirmação da palavra-passe"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Já existe um utilizador com esse nome."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Os dois campos da palavra-passe não coincidem."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Esta conta não está activa."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Aparentemente que o seu browser não está configurado para aceitar cookies. "
-"Os cookies são necessários para poder entrar."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Esse e-mail não tem nenhuma conta de utilizador associada. Tem a certeza que "
-"já se registou?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Palavra-passe reinicializada em %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Confirmação da nova palavra-passe"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"A sua palavra-passe antiga foi introduzida incorrectamente. Por favor tente "
-"novamente."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nome"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "nome de código"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "permissão"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "permissões"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupo"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupos"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "utilizador"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Obrigatório. 30 caracteres ou menos. Apenas letras, números e caracteres @/./"
-"+/-/_."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "primeiro nome"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "último nome"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "endereço de e-mail"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "palavra-passe"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Use '[algo]$[salt]$[hexdigest]' ou use o <a href=\"password/\">formulário de "
-"modificação da palavra-passe</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "status de equipa"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Define se o utilizador pode usar a administração do site."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "activo"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Defina se este utilizador deva ser tratado como activo. Não seleccione em "
-"vez de remover as contas."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "Status de superuser"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Define se este utilizador tem todas as permissões sem explicitamente as "
-"atribuir."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "última entrada"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "data de registo"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Em adição às permissões definidas manualmente, este utilizador também terá "
-"todas as permissões atribuídas a cada grupo a que partence."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "permissões do utilizador"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "utilizador"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "utilizadores"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "mensagem"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Saiu"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Introduza um endereço de e-mail válido."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Conteúdo"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "marcado"
-msgstr[1] "marcados"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Marcar os comentários seleccionados"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "aprovado"
-msgstr[1] "aprovados"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Aprovar os comentários seleccionados"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "removido"
-msgstr[1] "removidos"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Remover os comentários seleccionados"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 comentário foi %(action)s com sucesso."
-msgstr[1] "%(count)s comentários foram %(action)s com sucesso."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "comentários em %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Últimos comentários em %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nome"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Endereço de e-mail"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Comentário"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Atenção à linguagem! A palavra %s não é permitida aqui."
-msgstr[1] "Atenção à linguagem! As palavras %s não são permitidas aqui."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Se não introduzir nada neste campo o seu comentário irá ser tratado como spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tipo de conteúdo"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID do objecto"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "o nome do utilizador"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "endereço de e-mail do utilizador"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL do utilizador"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "comentário"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "data/hora de submissão"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "Endereço IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "é público"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Não seleccione esta caixa para que o comentário desapareça do site."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "foi removido"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Seleccione esta opção se o comentário não é apropriado. Uma mensagem \"Este "
-"comentário foi removido\" será mostrada no seu lugar."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "comentários"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Este comentário foi colocado por um utilizador autenticado, portanto o nome "
-"é apenas de leitura."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Este comentário foi colocado por um utilizador autenticado, portanto o e-"
-"mail é apenas de leitura."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Colocado pelo utilizador %(user)s em %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "marcar"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "data"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "marca de comentário"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "marcas de comentários"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Aprovar um comentário"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Tem a certeza que deseja tornar este comentário público?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Aprovar"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Obrigado pela aprovação"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Obrigado por dedicar o seu tempo para melhorar a qualidade de discussão no "
-"nosso site"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Remover um comentário"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Tem a certeza que deseja remover este comentário?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Obrigado pela remoção"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Marcar este comentário"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Tem a certeza que deseja marcar este comentário?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Marcar"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Obrigado por marcar"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Publicar"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Prever"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Obrigado por comentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Obrigado pelo seu comentário"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Pré-visualizar comentário"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Por favor corrija o seguinte erro."
-msgstr[1] "Por favor corrija os seguintes erros."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Publique o seu comentário"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "ou faça modificações"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python model class name"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipos de conteúdos"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Exemplo: '/about/contact/'. Verifique se possui as barras no inicio e no fim."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Este valor apenas poderá conter letras, números, underscores, hífens ou "
-"barras."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opções avançadas"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titulo"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "conteúdo"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "permitir comentários"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nome da template"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Exemplo: 'flatpages/contact_page.html'. Se não for fornecido, o sistema "
-"usará: 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "é necessário registo"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Se estiver seleccionado, apenas utilizadores autenticados poderão ver esta "
-"página."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "página plana"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "páginas planas"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Pedimos desculpa, mas o seu formulário expirou. Por favor continue a "
-"preencher o formulário a partir desta página."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Não foi submetido nenhum valor do tipo geometria."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Valor inválido de geometria."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tipo inválido de geometria."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Ocorreu um erro na transformação da geometria para o SRID da geometria do "
-"campo do formulário."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milhão"
-msgstr[1] "%(value).1f milhões"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f bilião"
-msgstr[1] "%(value).1f biliões"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilião"
-msgstr[1] "%(value).1f triliões"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "um"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dois"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "três"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "quatro"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cinco"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seis"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sete"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "oito"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "nove"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "hoje"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "amanhã"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "ontem"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Introduza um código postal no formato NNNN ou ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Este campo apenas aceita números."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Este campo apenas aceita 7 ou 8 dígitos."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Introduza o CUIT no formato XX-XXXXXXXX-X ou XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT inválido."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Introduza um código postal no formato XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Introduza um código de segurança social austríaco válido no formato XXXX "
-"XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Introduza um código postal de 4 dígitos."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Introduza um código postal no formato XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Os números de telefone deverão ser no formato XXX-XXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Seleccione um estado brazileiro válido. Esse estado não se encontra "
-"disponível."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Número de CPF inválido."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Este campo aceita no máximo 11 dígitos ou 14 caracteres."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Número CNPJ inválido."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Este campo aceita no mínimo 14 dígitos"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Introduza um código postal no formato XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Introduza um código de segurança social Canadiano válido no formato XXX-XXX-"
-"XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Introduza uma identificação Suíça ou número de passaporte no formato "
-"X1234567<0 ou 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Introduza um RUT Chileno válido."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Introduza um RUT Chileno válido. O formato é XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "O RUT Chileno é inválido."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Introduza um código postal no formato XXXXX ou XXX XX"
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"Introduza um número de nascimento no formato XXXXXX/XXXX ou XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Parâmetro opcional inválido do Género, os valores válidos são 'f' e 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Introduza um de número de nascimento válido."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Introduza um número de IC válido."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Introduza um código postal no formato XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Introduza uma identificação Alemã válida no formato XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X"
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Instruduza um código postal válido no formato 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Introduza um número de telefone válido num dos formatos 6XXXXXXXX, 8XXXXXXXX "
-"or 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Por favor introduza um NIF, NIE, ou CIF válido."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Por favor introduza um NIF ou NIE válido."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Checksum inválido para o NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Checksum inválido para o NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Checksum inválido para o CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Por favor introduza um número de conta bancária no formato XXXX-XXXX-XX-"
-"XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Checksum inválido para o número de conta bancária."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Introduza um número de segurança social Finlandês válido."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Os números de telefone deverão ser no formato 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Introduza um código postal válido."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Introduza um número de telefone válido."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Introduza um número de matrícula de veículo válido"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Introduza um número NIK/KTP válido"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Introduza um código postal válido no formato XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Introduza um número de identificação Islândica válida. O formato é XXXXXX-"
-"XXXX"
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Número de identificação Islândica inválido."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Introduza um código postal válido."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Introduza um número de Segurança Social válido."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Introduza um de IVA válido."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Introduza um código postal no formato XXXXXXX or XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Introduza um número Civil ID Kuwaitiano válido"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Introduza um código postal válido."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Introduza um número SoFi válido."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Introduza um número de segurança social Norueguês válido."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Este campo requere 8 dígitos."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Este campo requere 11 dígitos."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "O número de identificação nacional consiste em 11 dígitos."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Checksum errado para o número nacional de identificação."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Introduza um número de imposto NIP no formato XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Checksum errado para o número de imposto NIP."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"O Número de Registo Nacional de Negócio (REGON) consiste em 9 ou 14 dígitos."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Checksum errado para o número de registo nacional de negócio (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Introduza um código postal no formato XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Introduza um código postal no formato XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-"Os números de telefone devem conter 9 dígitos, ou começarem por + ou 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Introduza um CIF válido."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Introduza um CNP válido."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Introduza um IBAN válido no formato ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Os números de telefone deverão ser no formato XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Introduza um código postal válido no formato XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Introduza um número de organização Sueco válido."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Introduza um número de identificação pessoal válido."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Números de coordenação não são permitidos."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Introduza um código postal Sueco no formato XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Introduza o código postal no formato XXXXX or XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Os números de telefone deverão ser no formato XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Introduza o número de Segurança Social dos E.U. no formato XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Introduza um estado ou território do E.U.A.."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado dos E.U.A (duas letras em maiúsculas)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Número de telefone"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Introduza um número CI válido no formato X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Introduza um número CI válido."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Introduza um número ID da África do Sul válido"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Introduza um código postal da África do Sul válido"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "mensagem lazy"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redireccionar de"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Isto deverá ser um caminho absoluto, excluindo o domínio. Exemplo: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redireccionar para"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Isto poderá ser um caminho absoluto (como acima) ou um URL completo começado "
-"por 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redireccionar"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redirecciona"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "chave da sessão"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "dados da sessão"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "data de expiração"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sessão"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessões"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nome do domínio"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "mostrar nome"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sites"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Introduza um valor válido."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Introduza um URL válido."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Este URL é link quebrado."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Este valor apenas poderá conter letras, números, undercores ou hífenes."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Introduza um endereço IPv4 válido."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Introduza apenas números separados por vírgulas."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Garanta que este valor seja %(limit_value)s (tem %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Garanta que este valor seja menor ou igual a %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Garanta que este valor seja maior ou igual a %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Garanta que este valor tem no mínimo %(limit_value)d caracteres (tem %"
-"(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Garanta que este valor tem no máximo %(limit_value)d caracteres (tem %"
-"(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s deverá ser único para %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s com este %(field_label)s já existe."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "O valor %r não é uma opção válida."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Este campo não pode ser nulo."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Este campo não pode ser vazio."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Campo do tipo: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Inteiro"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Este campo deverá ser inteiro."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Este valor deverá ser True ou False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (Pode ser True ou False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (até %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Inteiros separados por virgula"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Data (sem hora)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduza uma data válida no formato AAAA-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Data inválida: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Introduza uma data/hora válida no formato YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Data (com hora)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Este campo deverá ser um número decimal."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Número décimal"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Endereço de e-mail"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Caminho do ficheiro"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Este campo deverá ser número décimal."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Número em vírgula flutuante"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Inteiro grande (8 byte)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Este valor deverá ser None, True ou False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (Pode ser True, False ou None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Texto"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Hora"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Introduza uma hora válida no formato HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "Texto XML"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "O modelo %(model)s com a chave primária %(pk)r não existe."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Chave Estrangeira (tipo determinado pelo campo relacionado)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Relação de um-para-um"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Relação de muitos-para-muitos"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Mantenha pressionado o \"Control\", or \"Command\" no Mac, para seleccionar "
-"mais do que um."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Por favor introduza IDs de %(self)s válidos. O valor %(value)r é inválido."
-msgstr[1] ""
-"Por favor introduza IDs de %(self)s válidos. Os valores %(value)r são "
-"inválidos."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Este campo é obrigatório."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Introduza um número inteiro."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Introduza um número."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Garanta que não contém no total mais do que %s dígitos."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Garanta que não contém mais do que %s casas décimais."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Garanta que não contém mais do que %s digitos antes do ponto decimal."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Introduza uma data válida."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Introduza uma hora válida."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Introduza uma data/hora válida."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Nenhum ficheiro foi submetido. Verifique o tipo de codificação do formulário."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Nenhum ficheiro submetido."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "O ficheiro submetido encontra-se vazio."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Garanta que este nome do ficheiro tem no máximo %(max)d caracteres (tem %"
-"(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Introduza uma imagem válida. O ficheiro que introduziu ou não é uma imagem "
-"ou está corrompido."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Seleccione uma opção válida. %(value)s não se encontra nas opções "
-"disponíveis."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
-msgid "Enter a list of values."
-msgstr "Introduza uma lista de valores."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Ordem"
-
-#: forms/models.py:567
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Por favor corrija os dados duplicados em %(field)s."
-
-#: forms/models.py:571
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Por favor corrija os dados duplicados em %(field)s, que deverá ser único."
-
-#: forms/models.py:577
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Por favor corrija os dados duplicados em %(field_name)s que deverá ser único "
-"para o %(lookup)s em %(date_field)s.\""
-
-#: forms/models.py:585
-msgid "Please correct the duplicate values below."
-msgstr "Por favor corrija os valores duplicados abaixo."
-
-#: forms/models.py:860
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"A chave estrangeira em linha não coincide com a chave primária na instância "
-"pai."
-
-#: forms/models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Seleccione uma opção válida. Esse valor não se encontra opções disponíveis."
-
-#: forms/models.py:1008
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-"Seleccione uma opção válida. %s não se encontra nas opções disponíveis."
-
-#: forms/models.py:1010
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" não é um valor válido para uma chave primária."
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "sim,não,talvez"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr ""
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr ""
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr ""
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr ""
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "meia-noite"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "meio-dia"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Segunda-feira"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Terça-feira"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Quarta-feira"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Quinta-feira"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Sexta-feira"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Sábado"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Domingo"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Seg"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Ter"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Qua"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Qui"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Sex"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Sáb"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Dom"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Janeiro"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Fevereiro"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Março"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Abril"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Maio"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Junho"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Julho"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Agosto"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Setembro"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Outubro"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Novembro"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Dezembro"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "fev"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "abr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ago"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "set"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "out"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dez"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Fev."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Ago."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Set."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Out."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dez."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "ou"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "ano"
-msgstr[1] "anos"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mês"
-msgstr[1] "meses"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "semana"
-msgstr[1] "semanas"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dia"
-msgstr[1] "dias"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "horas"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minutos"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutos"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr ""
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "O(A) %(verbose_name)s foi criado(a) com sucesso."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "O(A) %(verbose_name)s foi actualizado(a) com sucesso."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "O(A) %(verbose_name)s foi removido(a)."
diff --git a/parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 41c259b..0000000
--- a/parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 95df4a2..0000000
--- a/parts/django/django/conf/locale/pt/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,125 +0,0 @@
-# Portuguese translation of Django.
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-01 20:24+0200\n"
-"PO-Revision-Date: 2008-08-29 09:24+0100\n"
-"Last-Translator: Nuno Mariz <nmariz@gmail.com>\n"
-"Language-Team: pt_PT <nmariz@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Disponível %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Escolher todos"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Adicionar"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Remover"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Escolhido %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Seleccione a(s) sua(s) escolha(s) e clique "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Limpar tudo"
-
-#: contrib/admin/media/js/actions.js:17
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro "
-"Novembro Dezembro"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D S T Q Q S S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Mostrar"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Ocultar"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Domingo Segunda Terça Quarta Quinta Sexta Sábado"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Agora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Relógio"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Escolha a hora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Meia-noite"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Meio-dia"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Hoje"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Calendário"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Ontem"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Amanhã"
diff --git a/parts/django/django/conf/locale/pt/__init__.py b/parts/django/django/conf/locale/pt/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/pt/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/pt/formats.py b/parts/django/django/conf/locale/pt/formats.py
deleted file mode 100644
index 9317595..0000000
--- a/parts/django/django/conf/locale/pt/formats.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'j \de F \de Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = r'j \de F \de Y à\s H:i'
-YEAR_MONTH_FORMAT = r'F \de Y'
-MONTH_DAY_FORMAT = r'j \de F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
-FIRST_DAY_OF_WEEK = 0 # Sunday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%d/%m/%Y', '%d/%m/%y', # '2006-10-25', '25/10/2006', '25/10/06'
- # '%d de %b de %Y', '%d de %b, %Y', # '25 de Out de 2006', '25 Out, 2006'
- # '%d de %B de %Y', '%d de %B, %Y', # '25 de Outubro de 2006', '25 de Outubro, 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
- '%d/%m/%Y %H:%M', # '25/10/2006 14:30'
- '%d/%m/%Y', # '25/10/2006'
- '%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
- '%d/%m/%y %H:%M', # '25/10/06 14:30'
- '%d/%m/%y', # '25/10/06'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.mo
deleted file mode 100644
index 9ee29fd..0000000
--- a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.po b/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.po
deleted file mode 100644
index 6eb8013..0000000
--- a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5119 +0,0 @@
-# Português do Brasil translation of django.
-# This file is distributed under the same license as the django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: Grupo de Localização para o Português <django-l10n-portuguese@googlegroups.com>\n"
-"POT-Creation-Date: 2010-03-19 17:38-0300\n"
-"PO-Revision-Date: 2010-03-19 17:58-0300\n"
-"Last-Translator: Guilherme Gondim <semente@taurinus.org>\n"
-"Language-Team: Grupo de Localização para o Português <django-l10n-portuguese@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Árabe"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Búlgaro"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengali"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bósnia"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Catalão"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Tcheco"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Galês"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Dinamarquês"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Alemão"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Grego"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Inglês"
-
-#: conf/global_settings.py:55
-msgid "Spanish"
-msgstr "Espanhol"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Espanhol Argentino"
-
-#: conf/global_settings.py:57
-msgid "Estonian"
-msgstr "Estoniano"
-
-#: conf/global_settings.py:58
-msgid "Basque"
-msgstr "Basco"
-
-#: conf/global_settings.py:59
-msgid "Persian"
-msgstr "Persa"
-
-#: conf/global_settings.py:60
-msgid "Finnish"
-msgstr "Finlandês"
-
-#: conf/global_settings.py:61
-msgid "French"
-msgstr "Francês"
-
-#: conf/global_settings.py:62
-msgid "Frisian"
-msgstr "Frísia"
-
-#: conf/global_settings.py:63
-msgid "Irish"
-msgstr "Irlandês"
-
-#: conf/global_settings.py:64
-msgid "Galician"
-msgstr "Galiciano"
-
-#: conf/global_settings.py:65
-msgid "Hebrew"
-msgstr "Hebraico"
-
-#: conf/global_settings.py:66
-msgid "Hindi"
-msgstr "Hindi"
-
-#: conf/global_settings.py:67
-msgid "Croatian"
-msgstr "Croata"
-
-#: conf/global_settings.py:68
-msgid "Hungarian"
-msgstr "Húngaro"
-
-#: conf/global_settings.py:69
-msgid "Icelandic"
-msgstr "Islandês"
-
-#: conf/global_settings.py:70
-msgid "Italian"
-msgstr "Italiano"
-
-#: conf/global_settings.py:71
-msgid "Japanese"
-msgstr "Japonês"
-
-#: conf/global_settings.py:72
-msgid "Georgian"
-msgstr "Georgiano"
-
-#: conf/global_settings.py:73
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:74
-msgid "Kannada"
-msgstr "Canarês"
-
-#: conf/global_settings.py:75
-msgid "Korean"
-msgstr "Coreano"
-
-#: conf/global_settings.py:76
-msgid "Lithuanian"
-msgstr "Lituano"
-
-#: conf/global_settings.py:77
-msgid "Latvian"
-msgstr "Letão"
-
-#: conf/global_settings.py:78
-msgid "Macedonian"
-msgstr "Macedônio"
-
-#: conf/global_settings.py:79
-msgid "Dutch"
-msgstr "Neerlandês"
-
-#: conf/global_settings.py:80
-msgid "Norwegian"
-msgstr "Norueguês"
-
-#: conf/global_settings.py:81
-msgid "Polish"
-msgstr "Polonês"
-
-#: conf/global_settings.py:82
-msgid "Portuguese"
-msgstr "Português"
-
-#: conf/global_settings.py:83
-msgid "Brazilian Portuguese"
-msgstr "Português Brasileiro"
-
-#: conf/global_settings.py:84
-msgid "Romanian"
-msgstr "Romeno"
-
-#: conf/global_settings.py:85
-msgid "Russian"
-msgstr "Russo"
-
-#: conf/global_settings.py:86
-msgid "Slovak"
-msgstr "Eslovaco"
-
-#: conf/global_settings.py:87
-msgid "Slovenian"
-msgstr "Esloveno"
-
-#: conf/global_settings.py:88
-msgid "Albanian"
-msgstr "Albanesa"
-
-#: conf/global_settings.py:89
-msgid "Serbian"
-msgstr "Sérvio"
-
-#: conf/global_settings.py:90
-msgid "Serbian Latin"
-msgstr "Sérvio Latino"
-
-#: conf/global_settings.py:91
-msgid "Swedish"
-msgstr "Sueco"
-
-#: conf/global_settings.py:92
-msgid "Tamil"
-msgstr "Tâmil"
-
-#: conf/global_settings.py:93
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:94
-msgid "Thai"
-msgstr "Tailandês"
-
-#: conf/global_settings.py:95
-msgid "Turkish"
-msgstr "Turco"
-
-#: conf/global_settings.py:96
-msgid "Ukrainian"
-msgstr "Ucraniano"
-
-#: conf/global_settings.py:97
-msgid "Vietnamese"
-msgstr "Vietnamita"
-
-#: conf/global_settings.py:98
-msgid "Simplified Chinese"
-msgstr "Chinês Simplificado"
-
-#: conf/global_settings.py:99
-msgid "Traditional Chinese"
-msgstr "Chinês Tradicional"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Removido %(count)d %(items)s com sucesso."
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1101
-msgid "Are you sure?"
-msgstr "Tem certeza?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Remover %(verbose_name_plural)s selecionados"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Por %s</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Todos"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Qualquer data"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Hoje"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Últimos 7 dias"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Este mês"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Este ano"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
-msgid "Yes"
-msgstr "Sim"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
-msgid "No"
-msgstr "Não"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:470
-msgid "Unknown"
-msgstr "Desconhecido"
-
-#: contrib/admin/helpers.py:19
-msgid "Action:"
-msgstr "Ação:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "hora da ação"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id do objeto"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "repr do objeto"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "flag de ação"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "modificar mensagem"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "entrada de log"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "entradas de log"
-
-#: contrib/admin/options.py:139 contrib/admin/options.py:154
-msgid "None"
-msgstr "Nenhum"
-
-#: contrib/admin/options.py:558
-#, python-format
-msgid "Changed %s."
-msgstr "Modificado %s."
-
-#: contrib/admin/options.py:558 contrib/admin/options.py:568
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:840
-#: forms/models.py:556
-msgid "and"
-msgstr "e"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Adicionado %(name)s \"%(object)s\""
-
-#: contrib/admin/options.py:567
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Modificado %(list)s para %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Deletado %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:576
-msgid "No fields changed."
-msgstr "Nenhum campo modificado."
-
-#: contrib/admin/options.py:642
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\": adicionado com sucesso."
-
-#: contrib/admin/options.py:646 contrib/admin/options.py:679
-msgid "You may edit it again below."
-msgstr "Você pode editar novamente abaixo."
-
-#: contrib/admin/options.py:656 contrib/admin/options.py:689
-#, python-format
-msgid "You may add another %s below."
-msgstr "Você pode adicionar outro %s abaixo."
-
-#: contrib/admin/options.py:677
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\": modificado com sucesso."
-
-#: contrib/admin/options.py:685
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\": adicionado com sucesso. Você pode editar novamente "
-"abaixo."
-
-#: contrib/admin/options.py:743
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Os itens devem ser selecionados a fim de executar ações sobre eles. Nenhum "
-"item foi modificado."
-
-#: contrib/admin/options.py:761
-msgid "No action selected."
-msgstr "Nenhuma ação selecionada."
-
-#: contrib/admin/options.py:841
-#, python-format
-msgid "Add %s"
-msgstr "Adicionar %s"
-
-#: contrib/admin/options.py:867 contrib/admin/options.py:1081
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Objeto %(name)s com chave primária %(key)r não existe."
-
-#: contrib/admin/options.py:932
-#, python-format
-msgid "Change %s"
-msgstr "Modificar %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Erro no banco de dados"
-
-#: contrib/admin/options.py:1013
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s modificado com sucesso."
-msgstr[1] "%(count)s %(name)s modificados com sucesso."
-
-#: contrib/admin/options.py:1040
-#, python-format
-msgid "of %(count)d selected"
-msgid_plural "of %(count)d selected"
-msgstr[0] "de %(count)d selecionado"
-msgstr[1] "de %(count)d selecionados"
-
-#: contrib/admin/options.py:1042
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s selecionado"
-msgstr[1] "Todos %(total_count)s selecionados"
-
-#: contrib/admin/options.py:1094
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\": excluído com sucesso."
-
-#: contrib/admin/options.py:1131
-#, python-format
-msgid "Change history: %s"
-msgstr "Histórico de modificações: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Por favor, entre com um usuário e senha corretos. Note que ambos os campos "
-"diferenciam maiúsculas e minúsculas."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Por favor acesse novamente, pois sua sessão expirou."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Parece que seu navegador não está configurado para aceitar cookies. Por "
-"favor habilite os cookies, recarregue esta página, e tente novamente."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Nomes de usuário não podem conter o caractere '@'."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Seu endereço de e-mail não é seu nome de usuário. Tente usar '%s'"
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Administração do Site"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Acessar"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "Administração de %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Data:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Hora:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Atualmente:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Modificar:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Olhar"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Adicionar Outro(a)"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Página não encontrada"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Desculpe, mas a página requisitada não pode ser encontrada."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:39
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Início"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Erro no servidor"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Erro no servidor (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Erro no Servidor <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Houve um erro. Este foi reportado aos administradores do site através do e-"
-"mail e deve ser corrigido em breve. Obrigado pela compreensão."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Executar ação selecionada"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Ir"
-
-#: contrib/admin/templates/admin/actions.html:10
-msgid "Click here to select the objects across all pages"
-msgstr "Clique aqui para selecionar os objetos de todas as páginas"
-
-#: contrib/admin/templates/admin/actions.html:10
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Selecionar todos %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:12
-msgid "Clear selection"
-msgstr "Limpar seleção"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr "Bem vindo,"
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentação"
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Alterar senha"
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Encerrar sessão"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Site de administração do Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administração do Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Adicionar"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Histórico"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Ver no site"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:68
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Por favor, corrija o erro abaixo."
-msgstr[1] "Por favor, corrija os erros abaixo."
-
-#: contrib/admin/templates/admin/change_list.html:60
-#, python-format
-msgid "Add %(name)s"
-msgstr "Adicionar %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:79
-msgid "Filter"
-msgstr "Filtro"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:297
-msgid "Delete"
-msgstr "Apagar"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"A remoção de '%(object_name)s' %(escaped_object)s pode resultar na remoção "
-"de objetos relacionados, mas sua conta não tem a permissão para remoção dos "
-"seguintes tipos de objetos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Você tem certeza que quer remover %(object_name)s \"%(escaped_object)s\"? "
-"Todos os seguintes itens relacionados serão removidos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Sim, tenho certeza"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Remover múltiplos objetos"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"A remoção de %(object_name)s pode resultar na remoção de objetos "
-"relacionados, mas sua conta não tem a permissão para remoção dos seguintes "
-"tipos de objetos:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Você tem certeza que quer remover os objetos %(object_name)s selecionados? "
-"Todos os seguintes objetos e seus itens relacionados serão removidos:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Por %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelos disponíveis na aplicação %(name)s"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Modificar"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Você não tem permissão para edição."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Ações Recentes"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Minhas Ações"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nenhuma disponível"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Conteúdo desconhecido"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Alguma coisa está errada com a instalação do banco de dados. Certifique-se "
-"que as tabelas necessárias foram criadas e que o banco de dados pode ser "
-"acessado pelo usuário apropriado."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Usuário:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Senha:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Data/hora"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Usuário"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Ação"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Este objeto não tem um histórico de alterações. Ele provavelmente não foi "
-"adicionado por este site de administração."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Mostrar tudo"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Salvar"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Pesquisar"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultado"
-msgstr[1] "%(counter)s resultados"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s total"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Salvar como novo"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Salvar e adicionar outro"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Salvar e continuar editando"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Primeiro, informe um nome de usuário e senha. Depois você será capaz de "
-"editar mais opções do usuário."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Informe uma nova senha para o usuário <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Senha"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Senha (novamente)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Informe a mesma senha digitada acima, para verificação."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:53
-#: contrib/admin/templates/admin/edit_inline/tabular.html:99
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Adicionar outro %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:56
-#: contrib/admin/templates/admin/edit_inline/tabular.html:102
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Remover"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Apagar?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Obrigado por visitar nosso Web site hoje."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Acessar novamente"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Alterar senha"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Senha alterada com sucesso"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Sua senha foi alterada."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Por favor, informe sua senha antiga, por segurança, e então informe sua nova "
-"senha duas vezes para que possamos verificar se você digitou corretamente."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Senha antiga"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nova senha"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Alterar minha senha"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Recuperar senha"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Recuperação de senha completa"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Sua senha foi definida. Você pode prosseguir e se autenticar agora."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Confirmação de recuperação de senha"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Insira a nova senha"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Por favor, informe sua nova senha duas vezes para que possamos verificar se "
-"você a digitou corretamente."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nova senha:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirme a senha:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Recuperação de senha sem sucesso"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"O link para a recuperação de senha era inválido, possivelmente porque jã foi "
-"utilizado. Por favor, solicite uma nova recuperação de senha."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Senha recuperada com sucesso"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Enviamos as instruções de como definir sua nova senha para o e-mail que você "
-"informou. Você deverá recebê-las em breve."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Você está recebendo este e-mail porque pediu uma nova senha"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "para sua conta em %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Por favor, acesse a seguinte página e escolha uma nova senha:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Seu nome de usuário, caso tenha esquecido:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Obrigado por usar nosso site!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Equipe %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Esqueceu sua senha? Digite seu e-mail abaixo e receberá instruções para "
-"definir uma nova."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Endereço de e-mail:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Reinicializar minha senha"
-
-#: contrib/admin/templatetags/admin_list.py:240
-msgid "All dates"
-msgstr "Todas as datas"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Selecione %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Selecione %s para modificar"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "site"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "template"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtro:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplicação %r não encontrada"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r não encontrado na aplicação %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "o objeto `%(app_label)s.%(data_type)s` relacionado"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "objetos `%(app_label)s.%(object_name)s` relacionados"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "todos %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "número de %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Campos nos objetos %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s não aparenta ser um objeto urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Itens de bookmark"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Documentação de itens de bookmark"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Para instalar um item no bookmark, arraste o link para a \n"
-"barra de ferramentas de bookmarks, ou clique com o botão direito no link e\n"
-"adicione-o à barra de ferramentas. Agora você pode selecionar o item de\n"
-"bookmark de qualquer página do site. Lembre-se que alguns desses itens\n"
-"de bookmark requerem que você veja o site de um computador designado\n"
-"como \"interno\" (converse com seu administrador de sistemas se você não\n"
-"souber se seu computador é \"interno\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Documentação para esta página"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Leva você de qualquer página para a documentação da view que gera tal página."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Mostar ID de objeto"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Mostra o tipo de conteúdo e ID único para páginas que representam um objeto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Editar este objeto (janela atual)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Vai para a página de administração que representa um objeto."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Editar este objeto (nova janela)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Como acima, mas abre a página de administração em uma nova janela."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Informações pessoais"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Permissões"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Datas importantes"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupos"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Senha modificada com sucesso."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Alterar senha: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Usuário"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Obrigatório. 30 caracteres ou menos. Somente letras, dígitos e @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Este valor deve conter apenas letras, números e os caracteres @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Confirmação de senha"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Um usuário com este nome de usuário já existe."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Os dois campos de senha não combinam."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Esta conta está inativa."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Seu navegador Web não parece estar com os cookies habilitados. Cookies são "
-"requeridos para acessar."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Este endereço de e-mail não está associado com uma conta de usuário. Você "
-"tem certeza que está registrado?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Recuperar senha em %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Confirmação da nova senha"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"A senha antiga foi digitada incorretamente. Por favor, informe a senha "
-"novamente."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "nome"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "apelido"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "permissão"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "permissões"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupo"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupos"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "usuário"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Obrigatório. 30 caracteres ou menos. Letras, números e os caracteres @/./+/-/_"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "primeiro nome"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "último nome"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "endereço de e-mail"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "senha"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Use '[algo]$[salt]$[hexdigest]' ou <a href=\"password/\"> Altere a senha</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "membro da equipe"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Indica que usuário consegue acessar este site de administração."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "ativo"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Indica que o usuário será tratado como ativo. Ao invés de excluir contas de "
-"usuário, desmarque isso."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "status de superusuário"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Indica que este usuário tem todas as permissões sem atribuí-las "
-"explicitamente."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "último login"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "data de registro"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Em adição às permissões atribuídas manualmente, este usuário também terá "
-"todas as permissões dadas a cada grupo que participar."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "permissões do usuário"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "usuário"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "usuários"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "mensagem"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Sessão encerrada"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:416
-msgid "Enter a valid e-mail address."
-msgstr "Informe um endereço de email válido."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Conteúdo"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Meta-dados"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "marcado"
-msgstr[1] "marcados"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Marcar comentários selecionados"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "aprovado"
-msgstr[1] "aprovados"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Aprovar comentários selecionados"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "removido"
-msgstr[1] "removidos"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Remover comentários selecionados"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 comentários foi %(action)s com sucesso."
-msgstr[1] "%(count)s comentários foram %(action)s com sucesso."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Comentários de %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Últimos comentários em %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Nome"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Endereço de e-mail"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1121
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Comentário"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Olha sua boca! A palavra %s não é permitida aqui."
-msgstr[1] "Olha sua boca! As palavras %s não são permitidas aqui."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Se você inserir qualquer coisa neste campo, seu comentário será tratado como "
-"spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tipo de conteúdo"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "id do objeto"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "nome do usuário"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "endereço de e-mail do usuário"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL do usuário"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "comentário"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "data/hora de envio"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:916
-msgid "IP address"
-msgstr "Endereço IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "é público"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Desmarque esta caixa para fazer o comentário desaparecer efetivamente deste "
-"site."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "foi removido"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Selecione esta opção se o comentário é inapropriado. A mensagem \"Este "
-"comentário foi removido\" será mostrada no lugar."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "comentários"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Este comentário foi feito por um usuário autenticado e portanto seu nome é "
-"apenas para leitura."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Este comentário foi feito por um usuário autenticado e portanto seu e-mail é "
-"apenas para leitura."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Enviado por %(user)s em %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "marcar"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "data"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "marca de comentário"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "marcas de comentários"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Aprovar um comentário"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Realmente tornar este comentário público?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Aprovar"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Obrigado pela aprovação"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Obrigado por dedicar tempo para melhorar a qualidade de discussão de nosso "
-"site."
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Remover um comentário"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Realmente remover este comentário?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Obrigado pela remoção"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Marcar um comentário"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Realmente marcar este comentário?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Marcar"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Obrigado pela marcação"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Publicar"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Visualizar"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Obrigado por comentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Obrigado pelo seu comentário"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Visualizar seu comentário"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Por favor, corrija o erro abaixo."
-msgstr[1] "Por favor, corrija os erros abaixo."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Publique seu comentário"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "ou faça modificações"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "nome da classe model em python"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipos de conteúdo"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Exemplo: '/sobre/contato/'. Lembre-se das barras no começo e no final."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Este valor deve conter apenas letras, números, sublinhados (_), travessões "
-"ou barras (/)."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Opções avançadas"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "título"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "conteúdo"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "habilitar comentários"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "nome do modelo"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Exemplo: 'flatpages/contact_page.html'. Se não for informado, será utilizado "
-"'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "registro obrigatório"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Se estiver assinalado, apenas usuários autenticados poderão ver a página."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "página plana"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "páginas planas"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Desculpe, mas seu formulário expirou. Por favor, continue preenchendo o "
-"formulário desta página."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:269
-msgid "Point"
-msgstr "Ponto"
-
-#: contrib/gis/db/models/fields.py:273
-msgid "Line string"
-msgstr "Linha string"
-
-#: contrib/gis/db/models/fields.py:277
-msgid "Polygon"
-msgstr "Polígono"
-
-#: contrib/gis/db/models/fields.py:281
-msgid "Multi-point"
-msgstr "Multiponto"
-
-#: contrib/gis/db/models/fields.py:285
-msgid "Multi-line string"
-msgstr "Multilinha string"
-
-#: contrib/gis/db/models/fields.py:289
-msgid "Multi polygon"
-msgstr "Multipolígono"
-
-#: contrib/gis/db/models/fields.py:293
-msgid "Geometry collection"
-msgstr "Coleção geométrica"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Nenhum valor geométrico fornecido."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Valor geométrico inválido."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Tipo geométrico inválido."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Ocorreu um erro ao transformar a geometria para o SRID do campo de "
-"formulário de geometria."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "º"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milhão"
-msgstr[1] "%(value).1f milhões"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f bilhão"
-msgstr[1] "%(value).1f bilhões"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilhão"
-msgstr[1] "%(value).1f trilhões"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "um"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dois"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "três"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "quatro"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "cinco"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "seis"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sete"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "oito"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "nove"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "hoje"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "amanhã"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "ontem"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Informe um código postal no formato NNNN ou ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Este campo requer somente números."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Este campo requer 7 ou 8 dígitos."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Informe um CUIT válido no formato XX-XXXXXXXX-X ou XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT inválido."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Caríntia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Baixa Áustria"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Alta Áustria"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburgo"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Estíria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Viena"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Informe um código postal no formato XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Informe um número de Seguro Social Austríaco válido no formato XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Informe um código postal de 4 dígitos."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Informe um código postal no formato XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Números de telefone devem estar no formato XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Selecione um estado brasileiro válido. O estado escolhido não é um dos "
-"estados disponíveis."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Número de CPF inválido."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Este campo requer no máximo 11 dígitos ou 14 caracteres."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Número de CNPJ inválido."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Este campo requer ao menos 14 dígitos"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Informe um código postal no formato XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Informe um número de Canadian Social Insurance válido no formato XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Argóvia"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Interior"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Exterior"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basiléia-Cidade"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basiléia-Campo"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berna"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Friburgo"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genebra"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glaris"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Grisões"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerna"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchâtel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwald"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwald"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Soleura"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "São Galo"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Turgóvia"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Tessino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurique"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Informe uma indentidade Suíça ou número de passaporte válido no formato "
-"X1234567<0 ou 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Informe um RUT chileno válido."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Informe um RUT chileno válido. O formato é XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "O RUT chileno não é válido."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Região de Boêmia Central"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Região de Boêmia do Sul"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Região de Pilsen"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Região de Carlsbad"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Região de Ústí"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Região de Liberec"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Região de Hradec"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Região de Pardubice"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Região de Vysocina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Região de Morávia do Sul"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Região de Olomouc"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Região de Zlín"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Região de Morávia-Silésia"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Informe um código postal no formato XXXXX ou XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Informe um número de nascimento no formato XXXXXX/XXXX ou XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Parâmetro opcional Gênero inválido, os valores válidos são 'f' e 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Informe um número de nascimento válido."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Informe um número IC válido."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wüerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Baviera"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlim"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburgo"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburgo"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklemburgo-Pomerânia Ocidental"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Baixa-Saxônia"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Renânia do Norte-Vestfália"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Renânia-Palatinado"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Sarre"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxônia"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxônia-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Turíngia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Informe um código postal no formato XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Informe um número de cartão de identidade Alemã no formato XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Álava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alicante"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Ilhas Baleares"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Cidade Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "Corunha"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Gerunda"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipúscoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leão"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lérida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Múrcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Astúrias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palência"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantábria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segóvia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilhe"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Sória"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valência"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Biscaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Saragoça"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilha"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andaluzia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragão"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principado das Astúrias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Ilhas Baleares"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "País Basco"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Ilhas Canárias"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castela-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Cestela e Leão"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalunha"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galiza"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Região de Múrcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Comunidade Foral de Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Comunidade Valenciana"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Informe um código postal válido no intervalo e formato 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Informe um número de telefone válido em um destes formatos 6XXXXXXXX, "
-"8XXXXXXXX ou 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Por favor, informe um NIF, NIE OU CIF válido."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Por favor, informe um NIF ou FIE válido."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "O NIF é incorreto."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "O NIE é incorreto."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "O CIF é incorreto."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Por favor, informe um número de conta bancária válida no formato XXXX-XXXX-"
-"XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Número de verificação de conta bancária incorreto."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Informe um número de seguro social finlandês válido."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Números de telefone devem estar no formato 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Informe um código postal válido."
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Informe um número de telefone válido."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Informe uma placa de licença de veículo válida."
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Informe um número NIK/KTP válido."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jacarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Java Ocidental"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Java Central"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Java Oriental"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Ocicental"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan do Sul"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Central"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Oriental"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Ilhas Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Ilhas Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Molucas"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Molucas do Norte"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Achém"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Sonda Ocidental"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Sonda Oriental"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Ocidental"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Celebes Ocidental"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Celebes do Sul"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Celebes Central"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Celebes do Sudeste"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Celebes do Norte"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatra Ocidental"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatra do Sul"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatra do Norte"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Ilhas Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua e Papua Ocidental"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surubaia"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Governo Federal"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Condado"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Condado"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Condado"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Informe um código postal no formato XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Informe um número de identificação islandês válido."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "O número de identificação islandês não é válido."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Informe um código postal válido."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Informe um número de Segurança Social válido."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Informe um número IVA válido."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Informe um código postal no formato XXXXXXX ou XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tóquio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Quioto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaca"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Informe um ID Civil Kuwaitiano válido."
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado do México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Informe um código postal válido."
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Informe um número SoFi válido."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drente"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevolândia"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Frísia"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Güéldria"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groninga"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburgo"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Brabante do Norte"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Holanda do Norte"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zelândia"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Holanda do Sul"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Informe um número de segurança social norueguês válido."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Este campo requer 8 dígitos."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Este campo requer 11 dígitos."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "O Número de Identificação Nacional consistem de 11 dígitos."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Número de Identificação Nacional incorreto."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Informe um número de imposto (NIP) no formato XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "O Número de Identificação Tributária (NIP) é incorreto."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"O Número Nacional de Registro de Negócios (REGON) consiste em 9 ou 14 "
-"dígitos."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "O Número Nacional de Registro de Negócios (REGON) é incorreto."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Informe um código postal válido no formato XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Baixa Silésia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubúsquia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Łódź"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Pequena Polônia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Mazóvia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpácia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerânia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silésia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Santa Cruz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Vármia-Masúria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Grande Polônia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Pomerânia Ocidental"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Informe um código postal no formato XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-"Números de telefone precisam conter 9 dígios, ou começarem com + ou 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Informe um CIF válido."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Informe um CNP válido."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Informe um IBAN válido no formato ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Números de telefone devem estar no formato XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Informe um código postal no formato XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Informe um número de organização sueco válido."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Informe um número sueco de identidade pessoal válido."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Números de coordenação não são permitidos."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Informe um código postal sueco válido no formato XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Estocolmo"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotlândia"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banská Štiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Bánovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytča"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Čadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolný Kubín"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajská Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenné"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kežmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komárno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Košice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Košice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Košice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Košice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Košice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucké Nové Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoča"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovský Mikuláš"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lučenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Námestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nové Mesto nad Váhom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nové Zámky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizánske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piešťany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltár"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Považská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Prešov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Púchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revúca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavská Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Rožňava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ružomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spišská Nová Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stará Ľubovňa"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidník"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Šaľa"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topoľčany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebišov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trenčín"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turčianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdošín"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Veľký Krtíš"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Topľou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlaté Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Žarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Žiar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Žilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Região de Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Região de Bratislava"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Região de Košice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Região de Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Região de Prešov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Região de Trenčín"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Região de Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Região de Žilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Informe um código postal válido."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornualha e Ilhas Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cúmbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Sussex Oriental"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Grande Londres"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Grande Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Nortúmbria"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "Midlands Ocidental"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "Sussex Oriental"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Condado de Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Condado de Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Condado de Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Condado de Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Condado de Derry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Condado de Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Terras Altas"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Órcades"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Ilhas Shetland"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Ilhas Ocidentais"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Inglaterra"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlanda do Norte"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Escócia"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "País de Gales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Informe um código postal no formato XXXXX ou XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Números de telefone devem estar no formato XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Informe um número de Seguro Social dos EUA válido no formato XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Insira um estado ou território dos E.U.A."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado dos E.U.A. (duas letras maiúsculas)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Número de telefone"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Informe um número CI válido no formato X.XXX.XXX-X,XXXXXXX-X ou XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Informe um número CI válido."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Informe um ID sul-africado válido."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Informe um código postal sul-africado válido."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Cabo Oriental"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Estado Livre"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Cabo Setentrional"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Noroeste"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Cabo Ocidental"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "mensagem lazy"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirecionar de"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Isso deve ser um caminho absoluto, excluindo o nome de domínio. Exemplo: '/"
-"eventos/busca/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirecionar para"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Pode ser um caminho absoluto (como acima) ou uma URL completa, começando com "
-"'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "redirecionar"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "redirecionamentos"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "chave da sessão"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "dados da sessão"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "data de expiração"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sessão"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessões"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "nome do domínio"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "nome para exibição"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sites"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Informe um valor válido."
-
-#: core/validators.py:87 forms/fields.py:517
-msgid "Enter a valid URL."
-msgstr "Informe uma URL válida."
-
-#: core/validators.py:89 forms/fields.py:518
-msgid "This URL appears to be a broken link."
-msgstr "A URL %s aparenta ser um link quebrado."
-
-#: core/validators.py:123 forms/fields.py:861
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Insira um \"slug\" válido consistindo de letras, números, sublinhados (_) ou "
-"hífens."
-
-#: core/validators.py:126 forms/fields.py:854
-msgid "Enter a valid IPv4 address."
-msgstr "Informe um endereço IPv4 válido."
-
-#: core/validators.py:129 db/models/fields/__init__.py:598
-msgid "Enter only digits separated by commas."
-msgstr "Informe apenas dígitos separados por vírgulas."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Certifique-se de que o valor é %(limit_value)s (ele é %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:196 forms/fields.py:246
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Certifique-se que este valor seja menor ou igual a %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:197 forms/fields.py:247
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Certifique-se que este valor seja maior ou igual a %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Certifique-se de que o valor tenha no mínimo %(limit_value)d caracteres (ele "
-"possui %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Certifique-se de que o valor tenha no máximo %(limit_value)d caracteres (ele "
-"possui %(show_value)d)."
-
-#: db/models/base.py:818
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s deverá ser único para %(date_field)s %(lookup)s."
-
-#: db/models/base.py:833 db/models/base.py:841
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s com este %(field_label)s já existe."
-
-#: db/models/fields/__init__.py:62
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "O valor %r não é uma escolha válida."
-
-#: db/models/fields/__init__.py:63
-msgid "This field cannot be null."
-msgstr "Este campo não pode ser nulo."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be blank."
-msgstr "Este campo não pode estar em branco."
-
-#: db/models/fields/__init__.py:69
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Campo do tipo: %(field_type)s"
-
-#: db/models/fields/__init__.py:477 db/models/fields/__init__.py:878
-#: db/models/fields/__init__.py:981 db/models/fields/__init__.py:992
-#: db/models/fields/__init__.py:1019
-msgid "Integer"
-msgstr "Inteiro"
-
-#: db/models/fields/__init__.py:481 db/models/fields/__init__.py:876
-msgid "This value must be an integer."
-msgstr "Este valor deve ser um inteiro."
-
-#: db/models/fields/__init__.py:516
-msgid "This value must be either True or False."
-msgstr "Este valor deve ser True ou False."
-
-#: db/models/fields/__init__.py:518
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (Verdadeiro ou Falso)"
-
-#: db/models/fields/__init__.py:565 db/models/fields/__init__.py:1002
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (até %(max_length)s)"
-
-#: db/models/fields/__init__.py:593
-msgid "Comma-separated integers"
-msgstr "Inteiros separados por vírgula"
-
-#: db/models/fields/__init__.py:607
-msgid "Date (without time)"
-msgstr "Data (sem hora)"
-
-#: db/models/fields/__init__.py:611
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Informe uma data válida no formato AAAA-MM-DD."
-
-#: db/models/fields/__init__.py:612
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Data inválida: %s"
-
-#: db/models/fields/__init__.py:693
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Informe uma data/hora válida no formato YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:695
-msgid "Date (with time)"
-msgstr "Data e hora"
-
-#: db/models/fields/__init__.py:761
-msgid "This value must be a decimal number."
-msgstr "Este valor deve ser um número decimal."
-
-#: db/models/fields/__init__.py:763
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: db/models/fields/__init__.py:818
-msgid "E-mail address"
-msgstr "Endereço de e-mail"
-
-#: db/models/fields/__init__.py:825 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Caminho de arquivo"
-
-#: db/models/fields/__init__.py:848
-msgid "This value must be a float."
-msgstr "Este valor deve ser um ponto flutuante."
-
-#: db/models/fields/__init__.py:850
-msgid "Floating point number"
-msgstr "Número de ponto flutuante"
-
-#: db/models/fields/__init__.py:903
-msgid "Big (8 byte) integer"
-msgstr "Inteiro grande (8 byte)"
-
-#: db/models/fields/__init__.py:932
-msgid "This value must be either None, True or False."
-msgstr "Este valor deve ser None, True ou False."
-
-#: db/models/fields/__init__.py:934
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (Verdadeiro, Falso ou Nada)"
-
-#: db/models/fields/__init__.py:1025
-msgid "Text"
-msgstr "Texto"
-
-#: db/models/fields/__init__.py:1041
-msgid "Time"
-msgstr "Hora"
-
-#: db/models/fields/__init__.py:1045
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Informe uma hora válida no formato HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1129
-msgid "XML text"
-msgstr "Texto XML"
-
-#: db/models/fields/related.py:755
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Model %(model)s com chave primária %(pk)r não existe."
-
-#: db/models/fields/related.py:757
-msgid "Foreign Key (type determined by related field)"
-msgstr "Chave Estrangeira (tipo determinado pelo campo relacionado)"
-
-#: db/models/fields/related.py:879
-msgid "One-to-one relationship"
-msgstr "Relacionamento um-para-um"
-
-#: db/models/fields/related.py:939
-msgid "Many-to-many relationship"
-msgstr "Relacionamento muitos-para-muitos"
-
-#: db/models/fields/related.py:959
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Mantenha pressionado \"Control\" (ou \"Command\" no Mac) para selecionar "
-"mais de uma opção."
-
-#: db/models/fields/related.py:1020
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Por favor, informe IDs válidos para %(self)s. O valor %(value)r é inválido."
-msgstr[1] ""
-"Por favor, informe IDs válidos para %(self)s. Os valores %(value)r são "
-"inválidos."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Este campo é obrigatório."
-
-#: forms/fields.py:195
-msgid "Enter a whole number."
-msgstr "Informe um número inteiro."
-
-#: forms/fields.py:225 forms/fields.py:245
-msgid "Enter a number."
-msgstr "Informe um número."
-
-#: forms/fields.py:248
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Certifique-se de que não tenha mais de %s dígitos no total."
-
-#: forms/fields.py:249
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Certifique-se de que não tenha mais de %s casa decimais."
-
-#: forms/fields.py:250
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-"Certifique-se de que não tenha mais de %s dígitos antes do ponto decimal."
-
-#: forms/fields.py:311 forms/fields.py:826
-msgid "Enter a valid date."
-msgstr "Informe uma data válida."
-
-#: forms/fields.py:339 forms/fields.py:827
-msgid "Enter a valid time."
-msgstr "Informe uma hora válida."
-
-#: forms/fields.py:365
-msgid "Enter a valid date/time."
-msgstr "Informe uma data/hora válida."
-
-#: forms/fields.py:423
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Nenhum arquivo enviado. Verifique o tipo de codificação do formulário."
-
-#: forms/fields.py:424
-msgid "No file was submitted."
-msgstr "Não foi enviado nenhum arquivo."
-
-#: forms/fields.py:425
-msgid "The submitted file is empty."
-msgstr "O arquivo enviado está vazio."
-
-#: forms/fields.py:426
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Certifique-se de que o arquivo tenha no máximo %(max)d caracteres (ele "
-"possui %(length)d)."
-
-#: forms/fields.py:461
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Envie uma imagem válida. O arquivo enviado não é uma imagem ou está "
-"corrompido."
-
-#: forms/fields.py:584 forms/fields.py:659
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Faça uma escolha válida. %(value)s não está disponível."
-
-#: forms/fields.py:660 forms/fields.py:722 forms/models.py:989
-msgid "Enter a list of values."
-msgstr "Informe uma lista de valores."
-
-#: forms/formsets.py:293 forms/formsets.py:295
-msgid "Order"
-msgstr "Ordem"
-
-#: forms/models.py:550
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Por favor, corrija o valor duplicado para %(field)s."
-
-#: forms/models.py:554
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Por favor, corrija o valor duplicado para %(field)s, o qual deve ser único"
-
-#: forms/models.py:560
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Por favor corrija os dados duplicados em %(field_name)s que deverá ser único "
-"para o %(lookup)s em %(date_field)s."
-
-#: forms/models.py:568
-msgid "Please correct the duplicate values below."
-msgstr "Por favor, corrija os valores duplicados abaixo."
-
-#: forms/models.py:842
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"A chave estrangeira no inline não coincide com a chave primária na instância "
-"pai."
-
-#: forms/models.py:908
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Faça uma escolha válida. Sua escolha não é uma das disponíveis."
-
-#: forms/models.py:990
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Faça uma escolha válida. %s não está disponível."
-
-#: forms/models.py:992
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" não é um valor válido para uma chave primária."
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "sim,não,talvez"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "meia noite"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "meio dia"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Segunda-feira"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Terça-feira"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Quarta-feira"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Quinta-feira"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Sexta-feira"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Sábado"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Domingo"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Seg"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Ter"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Qua"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Qui"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Sex"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Sab"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Dom"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Janeiro"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Fevereiro"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Março"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Abril"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Maio"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Junho"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Julho"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Agosto"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Setembro"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Outubro"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Novembro"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Dezembro"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "fev"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "abr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ago"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "set"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "out"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dez"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Fev."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Ago."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Set."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Out."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Dez."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "ou"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "ano"
-msgstr[1] "anos"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mês"
-msgstr[1] "meses"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "semana"
-msgstr[1] "semanas"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dia"
-msgstr[1] "dias"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "horas"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minutos"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minutos"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:512
-msgid "DATE_FORMAT"
-msgstr "j \\de N \\de Y"
-
-#: utils/translation/trans_real.py:513
-msgid "DATETIME_FORMAT"
-msgstr "j \\de N \\de Y à\\s H:i"
-
-#: utils/translation/trans_real.py:514
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:535
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F \\de Y"
-
-#: utils/translation/trans_real.py:536
-msgid "MONTH_DAY_FORMAT"
-msgstr "j \\de F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s: criado com sucesso."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s: atualizado com sucesso."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s: excluído."
-
diff --git a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 602c9f0..0000000
--- a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po
deleted file mode 100644
index de62168..0000000
--- a/parts/django/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,113 +0,0 @@
-# Português do Brasil translation of django.
-# This file is distributed under the same license as the django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2008-09-01 11:39+0200\n"
-"Last-Translator: Rafael Jamur <rjamur@gmail.com>\n"
-"Language-Team: Grupo de Localização para o Português <django-l10n-portuguese@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s disponíveis"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Escolher todos"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Adicionar"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Remover"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s escolhido(s)"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Selecione sua(s) escolha(s) e clique "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Limpar tudo"
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid "January February March April May June July August September October November December"
-msgstr "Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Domingo Segunda Terça Quarta Quinta Sexta Sábado"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D S T Q Q S S"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "Agora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "Relógio"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "Escolha uma hora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "Meia-noite"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "6 da manhã"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "Meio-dia"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "Hoje"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "Calendário"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "Ontem"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "Amanhã"
-
-#: contrib/admin/media/js/admin/CollapsedFieldSets:34
-#: contrib/admin/media/js/admin/CollapsedFieldSets:72
-msgid "Show"
-msgstr "Mostrar"
-
-#: contrib/admin/media/js/admin/CollapsedFieldSets:63
-msgid "Hide"
-msgstr "Esconder"
-
diff --git a/parts/django/django/conf/locale/pt_BR/__init__.py b/parts/django/django/conf/locale/pt_BR/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/pt_BR/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/pt_BR/formats.py b/parts/django/django/conf/locale/pt_BR/formats.py
deleted file mode 100644
index 9cb5701..0000000
--- a/parts/django/django/conf/locale/pt_BR/formats.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'j \de N \de Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \de N \de Y à\s H:i'
-YEAR_MONTH_FORMAT = r'F \de Y'
-MONTH_DAY_FORMAT = r'j \de F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
-FIRST_DAY_OF_WEEK = 0 # Sunday
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%d/%m/%Y', '%d/%m/%y', # '2006-10-25', '25/10/2006', '25/10/06'
- # '%d de %b de %Y', '%d de %b, %Y', # '25 de Out de 2006', '25 Out, 2006'
- # '%d de %B de %Y', '%d de %B, %Y', # '25 de Outubro de 2006', '25 de Outubro, 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
- '%d/%m/%Y %H:%M', # '25/10/2006 14:30'
- '%d/%m/%Y', # '25/10/2006'
- '%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
- '%d/%m/%y %H:%M', # '25/10/06 14:30'
- '%d/%m/%y', # '25/10/06'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/ro/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ro/LC_MESSAGES/django.mo
deleted file mode 100644
index 697a18e..0000000
--- a/parts/django/django/conf/locale/ro/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ro/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ro/LC_MESSAGES/django.po
deleted file mode 100644
index 8f2902f..0000000
--- a/parts/django/django/conf/locale/ro/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4268 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-04-25 14:44+0300\n"
-"PO-Revision-Date: 2008-04-25 21:44+0200\n"
-"Last-Translator: \n"
-"Language-Team: Romanian <ro@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: .\conf\global_settings.py:39
-msgid "Arabic"
-msgstr "Arabă"
-
-#: .\conf\global_settings.py:40
-msgid "Bengali"
-msgstr "Bengaleză"
-
-#: .\conf\global_settings.py:41
-msgid "Bulgarian"
-msgstr "Bulgară"
-
-#: .\conf\global_settings.py:42
-msgid "Catalan"
-msgstr "Catalană"
-
-#: .\conf\global_settings.py:43
-msgid "Czech"
-msgstr "Cehă"
-
-#: .\conf\global_settings.py:44
-msgid "Welsh"
-msgstr "Galeză"
-
-#: .\conf\global_settings.py:45
-msgid "Danish"
-msgstr "Daneză"
-
-#: .\conf\global_settings.py:46
-msgid "German"
-msgstr "Germană"
-
-#: .\conf\global_settings.py:47
-msgid "Greek"
-msgstr "Greacă"
-
-#: .\conf\global_settings.py:48
-msgid "English"
-msgstr "Engleză"
-
-#: .\conf\global_settings.py:49
-msgid "Spanish"
-msgstr "Spaniolă"
-
-#: .\conf\global_settings.py:50
-msgid "Argentinean Spanish"
-msgstr "Spaniolă argentiniană"
-
-#: .\conf\global_settings.py:51
-msgid "Basque"
-msgstr "Bască"
-
-#: .\conf\global_settings.py:52
-msgid "Persian"
-msgstr "Persană"
-
-#: .\conf\global_settings.py:53
-msgid "Finnish"
-msgstr "Finlandeză"
-
-#: .\conf\global_settings.py:54
-msgid "French"
-msgstr "Franceză"
-
-#: .\conf\global_settings.py:55
-msgid "Irish"
-msgstr "Irlandeză"
-
-#: .\conf\global_settings.py:56
-msgid "Galician"
-msgstr "Galiciană"
-
-#: .\conf\global_settings.py:57
-msgid "Hungarian"
-msgstr "Ungară"
-
-#: .\conf\global_settings.py:58
-msgid "Hebrew"
-msgstr "Ebraică"
-
-#: .\conf\global_settings.py:59
-msgid "Croatian"
-msgstr "Croată"
-
-#: .\conf\global_settings.py:60
-msgid "Icelandic"
-msgstr "Islandeză"
-
-#: .\conf\global_settings.py:61
-msgid "Italian"
-msgstr "Italiană"
-
-#: .\conf\global_settings.py:62
-msgid "Japanese"
-msgstr "Japoneză"
-
-#: .\conf\global_settings.py:63
-msgid "Georgian"
-msgstr "Georgiană"
-
-#: .\conf\global_settings.py:64
-msgid "Korean"
-msgstr "Koreană"
-
-#: .\conf\global_settings.py:65
-msgid "Khmer"
-msgstr "Khmeră"
-
-#: .\conf\global_settings.py:66
-msgid "Kannada"
-msgstr "Limba kannada"
-
-#: .\conf\global_settings.py:67
-msgid "Latvian"
-msgstr "Letonă"
-
-#: .\conf\global_settings.py:68
-msgid "Macedonian"
-msgstr "Macedoneană"
-
-#: .\conf\global_settings.py:69
-msgid "Dutch"
-msgstr "Olandeză"
-
-#: .\conf\global_settings.py:70
-msgid "Norwegian"
-msgstr "Norvegiană"
-
-#: .\conf\global_settings.py:71
-msgid "Polish"
-msgstr "Poloneză"
-
-#: .\conf\global_settings.py:72
-msgid "Portugese"
-msgstr "Portugheză"
-
-#: .\conf\global_settings.py:73
-msgid "Brazilian Portuguese"
-msgstr "Portugheză braziliană"
-
-#: .\conf\global_settings.py:74
-msgid "Romanian"
-msgstr "Română"
-
-#: .\conf\global_settings.py:75
-msgid "Russian"
-msgstr "Rusă"
-
-#: .\conf\global_settings.py:76
-msgid "Slovak"
-msgstr "Slovacă"
-
-#: .\conf\global_settings.py:77
-msgid "Slovenian"
-msgstr "Slovenă"
-
-#: .\conf\global_settings.py:78
-msgid "Serbian"
-msgstr "Sârbă"
-
-#: .\conf\global_settings.py:79
-msgid "Swedish"
-msgstr "Suedeză"
-
-#: .\conf\global_settings.py:80
-msgid "Tamil"
-msgstr "Limba tamila"
-
-#: .\conf\global_settings.py:81
-msgid "Telugu"
-msgstr "Limba telugu"
-
-#: .\conf\global_settings.py:82
-msgid "Turkish"
-msgstr "Turcă"
-
-#: .\conf\global_settings.py:83
-msgid "Ukrainian"
-msgstr "Ucraineană"
-
-#: .\conf\global_settings.py:84
-msgid "Simplified Chinese"
-msgstr "Chineză simplificată"
-
-#: .\conf\global_settings.py:85
-msgid "Traditional Chinese"
-msgstr "Chineză tradițională"
-
-#: .\contrib\admin\filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>După %s:</h3>\n"
-"<ul>\n"
-
-#: .\contrib\admin\filterspecs.py:74
-#: .\contrib\admin\filterspecs.py:92
-#: .\contrib\admin\filterspecs.py:147
-#: .\contrib\admin\filterspecs.py:173
-msgid "All"
-msgstr "tot"
-
-#: .\contrib\admin\filterspecs.py:113
-msgid "Any date"
-msgstr "orice data"
-
-#: .\contrib\admin\filterspecs.py:114
-msgid "Today"
-msgstr "Astăzi"
-
-#: .\contrib\admin\filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Ultimele 7 zile"
-
-#: .\contrib\admin\filterspecs.py:119
-msgid "This month"
-msgstr "Luna aceasta"
-
-#: .\contrib\admin\filterspecs.py:121
-msgid "This year"
-msgstr "Anul acesta"
-
-#: .\contrib\admin\filterspecs.py:147
-#: .\newforms\widgets.py:231
-#: .\oldforms\__init__.py:592
-msgid "Yes"
-msgstr "Da"
-
-#: .\contrib\admin\filterspecs.py:147
-#: .\newforms\widgets.py:231
-#: .\oldforms\__init__.py:592
-msgid "No"
-msgstr "Nu"
-
-#: .\contrib\admin\filterspecs.py:154
-#: .\newforms\widgets.py:231
-#: .\oldforms\__init__.py:592
-msgid "Unknown"
-msgstr "Necunoscut"
-
-#: .\contrib\admin\models.py:18
-msgid "action time"
-msgstr "timp acţiune"
-
-#: .\contrib\admin\models.py:21
-msgid "object id"
-msgstr "id obiect"
-
-#: .\contrib\admin\models.py:22
-msgid "object repr"
-msgstr "repr obiect"
-
-#: .\contrib\admin\models.py:23
-msgid "action flag"
-msgstr "steguleţ acţiune"
-
-#: .\contrib\admin\models.py:24
-msgid "change message"
-msgstr "schimbă mesaj"
-
-#: .\contrib\admin\models.py:27
-msgid "log entry"
-msgstr "intrare log"
-
-#: .\contrib\admin\models.py:28
-msgid "log entries"
-msgstr "intrări log"
-
-#: .\contrib\admin\templates\admin\404.html.py:4
-#: .\contrib\admin\templates\admin\404.html.py:8
-msgid "Page not found"
-msgstr "Pagină inexistentă"
-
-#: .\contrib\admin\templates\admin\404.html.py:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Ne pare rău, dar pagina cerută nu există."
-
-#: .\contrib\admin\templates\admin\500.html.py:4
-#: .\contrib\admin\templates\admin\base.html.py:37
-#: .\contrib\admin\templates\admin\change_form.html.py:12
-#: .\contrib\admin\templates\admin\change_list.html.py:5
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:5
-#: .\contrib\admin\templates\admin\invalid_setup.html.py:4
-#: .\contrib\admin\templates\admin\object_history.html.py:4
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:11
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
-#: .\contrib\admin\templates\registration\logged_out.html.py:4
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:3
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
-msgid "Home"
-msgstr "Acasă"
-
-#: .\contrib\admin\templates\admin\500.html.py:4
-msgid "Server error"
-msgstr "Eroare de server"
-
-#: .\contrib\admin\templates\admin\500.html.py:6
-msgid "Server error (500)"
-msgstr "Eroare de server (500)"
-
-#: .\contrib\admin\templates\admin\500.html.py:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Eroare server <em>(500)</em>"
-
-#: .\contrib\admin\templates\admin\500.html.py:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "A apărut o eroare. Este raportată către administrator via email şi va fi reparată în scurt timp. Mulţumim pentru înţelegere."
-
-#: .\contrib\admin\templates\admin\base.html.py:26
-msgid "Welcome,"
-msgstr "Bine ai venit,"
-
-#: .\contrib\admin\templates\admin\base.html.py:28
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
-msgid "Documentation"
-msgstr "Documentație"
-
-#: .\contrib\admin\templates\admin\base.html.py:29
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:14
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:45
-msgid "Change password"
-msgstr "Schimbă parola"
-
-#: .\contrib\admin\templates\admin\base.html.py:30
-#: .\contrib\comments\templates\comments\form.html.py:6
-msgid "Log out"
-msgstr "Deautentificare"
-
-#: .\contrib\admin\templates\admin\base_site.html.py:4
-msgid "Django site admin"
-msgstr "Administrare sit Django"
-
-#: .\contrib\admin\templates\admin\base_site.html.py:7
-msgid "Django administration"
-msgstr "Administrare Django"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:14
-#: .\contrib\admin\templates\admin\index.html.py:28
-msgid "Add"
-msgstr "Adaugă"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:20
-#: .\contrib\admin\templates\admin\object_history.html.py:4
-msgid "History"
-msgstr "Istoric"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:21
-msgid "View on site"
-msgstr "Vizualizează pe site"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:31
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:23
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Vă rugăm să corectați eroarea de mai jos"
-msgstr[1] "Vă rugăm să corectați erorile de mai jos"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:49
-msgid "Ordering"
-msgstr "Ordonate după"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:52
-msgid "Order:"
-msgstr "Ordonare:"
-
-#: .\contrib\admin\templates\admin\change_list.html.py:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Adaugă %(name)s"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:8
-#: .\contrib\admin\templates\admin\submit_line.html.py:3
-msgid "Delete"
-msgstr "Șterge"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:13
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Ştergerea %(object_name)s '%(escaped_object)s' ar cauza și ştergerea obiectelor asociate, dar contul tău nu are permisiunea de a şterge următoarele tipuri de obiecte:"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:20
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "Eşti sigur că vrei să ştergi %(object_name)s \"%(escaped_object)s\"? Următoarele componente asociate vor fi şterse:"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:25
-msgid "Yes, I'm sure"
-msgstr "Da, sunt sigur"
-
-#: .\contrib\admin\templates\admin\filter.html.py:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "După %(filter_title)s "
-
-#: .\contrib\admin\templates\admin\filters.html.py:4
-msgid "Filter"
-msgstr "Filtru"
-
-#: .\contrib\admin\templates\admin\index.html.py:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modele disponibile în aplicația %(name)s"
-
-#: .\contrib\admin\templates\admin\index.html.py:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: .\contrib\admin\templates\admin\index.html.py:34
-msgid "Change"
-msgstr "Schimbă"
-
-#: .\contrib\admin\templates\admin\index.html.py:44
-msgid "You don't have permission to edit anything."
-msgstr "Nu ai drepturi de editare."
-
-#: .\contrib\admin\templates\admin\index.html.py:52
-msgid "Recent Actions"
-msgstr "Acţiuni recente"
-
-#: .\contrib\admin\templates\admin\index.html.py:53
-msgid "My Actions"
-msgstr "Acţiunile mele"
-
-#: .\contrib\admin\templates\admin\index.html.py:57
-msgid "None available"
-msgstr "Indisponibil"
-
-#: .\contrib\admin\templates\admin\invalid_setup.html.py:8
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Există o problema cu baza de date. Verificați dacă tabelele necesare din baza de date au fost create și verificați dacă baza de date poate fi citită de utilizatorul potrivit."
-
-#: .\contrib\admin\templates\admin\login.html.py:17
-#: .\contrib\comments\templates\comments\form.html.py:6
-#: .\contrib\comments\templates\comments\form.html.py:8
-msgid "Username:"
-msgstr "Utilizator:"
-
-#: .\contrib\admin\templates\admin\login.html.py:20
-#: .\contrib\comments\templates\comments\form.html.py:8
-msgid "Password:"
-msgstr "Parolă:"
-
-#: .\contrib\admin\templates\admin\login.html.py:25
-#: .\contrib\admin\views\decorators.py:31
-msgid "Log in"
-msgstr "Login"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:17
-msgid "Date/time"
-msgstr "Dată/oră"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:18
-msgid "User"
-msgstr "Utilizator"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:19
-msgid "Action"
-msgstr "Acţiune"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:25
-msgid "DATE_WITH_TIME_FULL"
-msgstr "N j, Y, P"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:35
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Acest obiect nu are un istoric al schimbărilor. Probabil nu a fost adăugat prin intermediul acestui sit de administrare."
-
-#: .\contrib\admin\templates\admin\pagination.html.py:10
-msgid "Show all"
-msgstr "Arată tot/toate"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:8
-msgid "Go"
-msgstr "Start"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "Un rezultat"
-msgstr[1] "%(counter)s rezultate"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s total"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:4
-msgid "Save as new"
-msgstr "Salvați ca nou"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:5
-msgid "Save and add another"
-msgstr "Salvați și adăugați altul"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:6
-msgid "Save and continue editing"
-msgstr "Salvați și continuați"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:7
-msgid "Save"
-msgstr "Salvează"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Introduceți mai întâi un nume de utilizator și o parolă. Apoi veți putea modifica mai multe opțiuni de utilizator."
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:12
-msgid "Username"
-msgstr "Utilizator"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:18
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:33
-msgid "Password"
-msgstr "Parolă"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:23
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:38
-msgid "Password (again)"
-msgstr "Parolă (din nou)"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:24
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:39
-msgid "Enter the same password as above, for verification."
-msgstr "Introduceți parola din nou pentru verificare."
-
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:27
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Introduceți o parolă nouă pentru utilizatorul <strong>%(username)s</strong>."
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
-msgid "Bookmarklets"
-msgstr "Bookmarklet-uri"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:4
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklet-uri documentație"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Pentru a instala bookmarklet-uri, trage link-ul în bara de\n"
-"bookmark-uri, sau click dreapta pe link și adaugă la bookmark-uri. Acum poți\n"
-"selecta bookmarklet-ul din orice pagina a sitului. Este posibil ca unele din\n"
-"aceste bookmarklet-uri sunt accesibile doar de pe un computer desemnat ca\n"
-"\"intern\" (vorbește cu administratorul tău de sistem dacă nu ești sigur că\n"
-"al tău este \"intern\").</p>\n"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:18
-msgid "Documentation for this page"
-msgstr "Documentație pentru această pagină"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Te trimite de la orice pagină la documentația pentru view-ul care generează acea pagină."
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:21
-msgid "Show object ID"
-msgstr "Arată ID-ul obiectului"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Arată tipul de conținut și ID-ul unic pentru paginile ce reprezintă un singur obiect."
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:24
-msgid "Edit this object (current window)"
-msgstr "Modifică acest obiect (în fereastra curentă)"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Sare la pagina de administrare pentru pagini ce reprezintă un singur obiect."
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:27
-msgid "Edit this object (new window)"
-msgstr "Modifică acest obiect (într-o fereastra nouă)"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "La fel ca mai sus, dar deschide pagina de administrare într-o fereastră nouă"
-
-#: .\contrib\admin\templates\registration\logged_out.html.py:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Mulţumesc pentru petrecerea folositoare a timpului cu situl astăzi."
-
-#: .\contrib\admin\templates\registration\logged_out.html.py:10
-msgid "Log in again"
-msgstr "Relogare"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:5
-#: .\contrib\admin\templates\registration\password_change_form.html.py:9
-msgid "Password change"
-msgstr "Schimbă parola"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:5
-#: .\contrib\admin\templates\registration\password_change_done.html.py:9
-msgid "Password change successful"
-msgstr "Schimbare reuşită a parolei"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:11
-msgid "Your password was changed."
-msgstr "Parola a fost schimbată."
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:11
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Introdu te rog vechea parolă, pentru motive de siguranţă, şi apoi tastează noua parolă de două ori pentru a verifica dacă ai tastat corect."
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:16
-msgid "Old password:"
-msgstr "Vechea parolă:"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:18
-msgid "New password:"
-msgstr "Noua parolă:"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:20
-msgid "Confirm password:"
-msgstr "Confirmă parola:"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:22
-msgid "Change my password"
-msgstr "Schimbă-mi parola"
-
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:10
-msgid "Password reset"
-msgstr "Resetează parola"
-
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:10
-msgid "Password reset successful"
-msgstr "Parola resetată cu succes"
-
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:12
-msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Am trimis o nouă parolă prin email la adresa furnizată. Ar trebui să o primeşti în scurt timp."
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Ai primit acest email pentru că ai cerut o resetare a parolei"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "pentru contul tău la %(site_name)s"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "Noua ta parolă este: %(new_password)s"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Poţi schmiba această parolă vizitând această pagină:"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:11
-msgid "Your username, in case you've forgotten:"
-msgstr "Numele tău de utilizator, în caz că ai uitat:"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:13
-msgid "Thanks for using our site!"
-msgstr "Mulţumesc pentru folosirea sitului nostru!"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Echipa %(site_name)s"
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you."
-msgstr "Ai uitat parola? Introdu adresa de email mai jos, iar noi vom reseta parola şi-ţi vom trimite una nouă prin email."
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
-msgid "E-mail address:"
-msgstr "Adresa email:"
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
-msgid "Reset my password"
-msgstr "Resetează-mi parola"
-
-#: .\contrib\admin\templates\widget\date_time.html.py:3
-msgid "Date:"
-msgstr "Data:"
-
-#: .\contrib\admin\templates\widget\date_time.html.py:4
-msgid "Time:"
-msgstr "Ora:"
-
-#: .\contrib\admin\templates\widget\file.html.py:2
-msgid "Currently:"
-msgstr "Current:"
-
-#: .\contrib\admin\templates\widget\file.html.py:3
-msgid "Change:"
-msgstr "Schimbă:"
-
-#: .\contrib\admin\templatetags\admin_list.py:257
-msgid "All dates"
-msgstr "Toate datele"
-
-#: .\contrib\admin\views\auth.py:20
-#: .\contrib\admin\views\main.py:267
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" a fost inserat cu succes."
-
-#: .\contrib\admin\views\auth.py:25
-#: .\contrib\admin\views\main.py:271
-#: .\contrib\admin\views\main.py:356
-msgid "You may edit it again below."
-msgstr "Vă puteți edita datele din nou mai jos."
-
-#: .\contrib\admin\views\auth.py:31
-msgid "Add user"
-msgstr "Adaugă utilizator"
-
-#: .\contrib\admin\views\auth.py:58
-msgid "Password changed successfully."
-msgstr "Schimbare reuşită a parolei"
-
-#: .\contrib\admin\views\auth.py:65
-#, python-format
-msgid "Change password: %s"
-msgstr "Schimbă parola: %s"
-
-#: .\contrib\admin\views\decorators.py:17
-#: .\contrib\auth\forms.py:60
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Va rugăm să introduceți numele de utilizator și parola corecte. Aveți grijă deoarece căsuțele sunt case sensitive."
-
-#: .\contrib\admin\views\decorators.py:69
-msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
-msgstr "Vă rugăm să vă înregistrați din nou, deoarece sesiunea a expirat. Nu vă faceti griji: datele au fost salvate."
-
-#: .\contrib\admin\views\decorators.py:76
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Se pare că browserul dumneavostră nu este configurat să accepte cookies. Vă rugăm să vă setați browserul să accepte cookies, dați un reload la pagină și încercați din nou."
-
-#: .\contrib\admin\views\decorators.py:90
-msgid "Usernames cannot contain the '@' character."
-msgstr "Username-ul nu are voie să conțină caracterul '@'."
-
-#: .\contrib\admin\views\decorators.py:92
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Adresa ta de e-mail nu este numele tău de utilizator. Incearcă '%s' în schimb."
-
-#: .\contrib\admin\views\doc.py:48
-#: .\contrib\admin\views\doc.py:50
-#: .\contrib\admin\views\doc.py:52
-msgid "tag:"
-msgstr "tag:"
-
-#: .\contrib\admin\views\doc.py:79
-#: .\contrib\admin\views\doc.py:81
-#: .\contrib\admin\views\doc.py:83
-msgid "filter:"
-msgstr "filtru:"
-
-#: .\contrib\admin\views\doc.py:137
-#: .\contrib\admin\views\doc.py:139
-#: .\contrib\admin\views\doc.py:141
-msgid "view:"
-msgstr "view:"
-
-#: .\contrib\admin\views\doc.py:166
-#, python-format
-msgid "App %r not found"
-msgstr "Applicatia %r inexistenta"
-
-#: .\contrib\admin\views\doc.py:173
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "Modelul %(name)r nu a fost gasit în aplicatia %(label)r"
-
-#: .\contrib\admin\views\doc.py:185
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr "obiectul `%(label)s.%(type)s` asociat"
-
-#: .\contrib\admin\views\doc.py:185
-#: .\contrib\admin\views\doc.py:207
-#: .\contrib\admin\views\doc.py:221
-#: .\contrib\admin\views\doc.py:226
-msgid "model:"
-msgstr "model:"
-
-#: .\contrib\admin\views\doc.py:216
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "obiectele `%(label)s.%(name)s` asociate"
-
-#: .\contrib\admin\views\doc.py:221
-#, python-format
-msgid "all %s"
-msgstr "toate %s"
-
-#: .\contrib\admin\views\doc.py:226
-#, python-format
-msgid "number of %s"
-msgstr "numărul de %s"
-
-#: .\contrib\admin\views\doc.py:231
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Campuri în %s obiecte"
-
-#: .\contrib\admin\views\doc.py:293
-#: .\contrib\admin\views\doc.py:304
-#: .\contrib\admin\views\doc.py:306
-#: .\contrib\admin\views\doc.py:312
-#: .\contrib\admin\views\doc.py:313
-#: .\contrib\admin\views\doc.py:315
-msgid "Integer"
-msgstr "Intreg"
-
-#: .\contrib\admin\views\doc.py:294
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (ori adevarat ori fals)"
-
-#: .\contrib\admin\views\doc.py:295
-#: .\contrib\admin\views\doc.py:314
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Sir de caractere (pana la %(max_length)s caractere)"
-
-#: .\contrib\admin\views\doc.py:296
-msgid "Comma-separated integers"
-msgstr "Numere întregi separate de virgule"
-
-#: .\contrib\admin\views\doc.py:297
-msgid "Date (without time)"
-msgstr "Data (fara ora)"
-
-#: .\contrib\admin\views\doc.py:298
-msgid "Date (with time)"
-msgstr "Data (cu ora)"
-
-#: .\contrib\admin\views\doc.py:299
-msgid "Decimal number"
-msgstr "Număr zecimal"
-
-#: .\contrib\admin\views\doc.py:300
-msgid "E-mail address"
-msgstr "Adresa email"
-
-#: .\contrib\admin\views\doc.py:301
-#: .\contrib\admin\views\doc.py:302
-#: .\contrib\admin\views\doc.py:305
-msgid "File path"
-msgstr "Calea fisierului"
-
-#: .\contrib\admin\views\doc.py:303
-msgid "Floating point number"
-msgstr "Număr cu virgula"
-
-#: .\contrib\admin\views\doc.py:307
-#: .\contrib\comments\models.py:89
-msgid "IP address"
-msgstr "adresa ip"
-
-#: .\contrib\admin\views\doc.py:309
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (adevarat, fals sau nici una)"
-
-#: .\contrib\admin\views\doc.py:310
-msgid "Relation to parent model"
-msgstr "Relatia cu un model parinte"
-
-#: .\contrib\admin\views\doc.py:311
-msgid "Phone number"
-msgstr "Număr de telefon"
-
-#: .\contrib\admin\views\doc.py:316
-msgid "Text"
-msgstr "Text"
-
-#: .\contrib\admin\views\doc.py:317
-msgid "Time"
-msgstr "Timp"
-
-#: .\contrib\admin\views\doc.py:318
-#: .\contrib\flatpages\models.py:8
-msgid "URL"
-msgstr "URL"
-
-#: .\contrib\admin\views\doc.py:319
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stat SUA (doua litere mari)"
-
-#: .\contrib\admin\views\doc.py:320
-msgid "XML text"
-msgstr "Text XML"
-
-#: .\contrib\admin\views\doc.py:346
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s nu pare a fi un obiect urlpattern"
-
-#: .\contrib\admin\views\main.py:233
-msgid "Site administration"
-msgstr "Administrare site"
-
-#: .\contrib\admin\views\main.py:280
-#: .\contrib\admin\views\main.py:365
-#, python-format
-msgid "You may add another %s below."
-msgstr "Mai puteți adauga un alt %s mai jos."
-
-#: .\contrib\admin\views\main.py:298
-#, python-format
-msgid "Add %s"
-msgstr "Adaugă %s"
-
-#: .\contrib\admin\views\main.py:344
-#, python-format
-msgid "Added %s."
-msgstr "Am adăugat %s."
-
-#: .\contrib\admin\views\main.py:344
-#: .\contrib\admin\views\main.py:346
-#: .\contrib\admin\views\main.py:348
-#: .\core\validators.py:283
-#: .\db\models\manipulators.py:309
-msgid "and"
-msgstr "și"
-
-#: .\contrib\admin\views\main.py:346
-#, python-format
-msgid "Changed %s."
-msgstr "Am schimbat %s."
-
-#: .\contrib\admin\views\main.py:348
-#, python-format
-msgid "Deleted %s."
-msgstr "Am șters %s."
-
-#: .\contrib\admin\views\main.py:351
-msgid "No fields changed."
-msgstr "Nici-un câmp nu a fost schimbat."
-
-#: .\contrib\admin\views\main.py:354
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" au fost modificate cu succes."
-
-#: .\contrib\admin\views\main.py:362
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" au fost adăugate cu succes. Le puteți edita mai jos."
-
-#: .\contrib\admin\views\main.py:400
-#, python-format
-msgid "Change %s"
-msgstr "Schimbă %s"
-
-#: .\contrib\admin\views\main.py:487
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Unul sau mai multe %(fieldname)s în %(name)s: %(obj)s"
-
-#: .\contrib\admin\views\main.py:492
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Unul sau mai multe %(fieldname)s în %(name)s:"
-
-#: .\contrib\admin\views\main.py:524
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" au fost șterse cu succes."
-
-#: .\contrib\admin\views\main.py:527
-msgid "Are you sure?"
-msgstr "Sunteți sigur?"
-
-#: .\contrib\admin\views\main.py:549
-#, python-format
-msgid "Change history: %s"
-msgstr "Schimbări făcute: %s"
-
-#: .\contrib\admin\views\main.py:583
-#, python-format
-msgid "Select %s"
-msgstr "Selectează %s"
-
-#: .\contrib\admin\views\main.py:583
-#, python-format
-msgid "Select %s to change"
-msgstr "Selectează %s pentru schimbare"
-
-#: .\contrib\admin\views\main.py:784
-msgid "Database error"
-msgstr "Eroare de bază de date"
-
-#: .\contrib\auth\forms.py:17
-#: .\contrib\auth\forms.py:138
-msgid "The two password fields didn't match."
-msgstr "Cele doua câmpuri pentru parole nu au coincis."
-
-#: .\contrib\auth\forms.py:25
-msgid "A user with that username already exists."
-msgstr "Un utilizator cu acest nume de utilizator exista deja,"
-
-#: .\contrib\auth\forms.py:53
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Se pare că browserul dumneavoastra nu suporta cookies. Aveti nevoie de un browser care suporta cookies ca să vă logati."
-
-#: .\contrib\auth\forms.py:62
-msgid "This account is inactive."
-msgstr "Acest cont este inactiv."
-
-#: .\contrib\auth\forms.py:84
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Acea adresa de e-mail nu are un nume de utilizator asociat. Sunteți sigur că v-ați înregistrat?"
-
-#: .\contrib\auth\forms.py:107
-#, python-format
-msgid "Password reset on %s"
-msgstr "Parola resetată pe %s"
-
-#: .\contrib\auth\forms.py:117
-msgid "The two 'new password' fields didn't match."
-msgstr "Cele două câmpuri 'parola noua' nu au coincis."
-
-#: .\contrib\auth\forms.py:124
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Parola dumneavoastră veche a fost introdusă incorect. Vă rugăm să o introduceți din nou."
-
-#: .\contrib\auth\models.py:73
-#: .\contrib\auth\models.py:93
-msgid "name"
-msgstr "nume"
-
-#: .\contrib\auth\models.py:75
-msgid "codename"
-msgstr "nume cod"
-
-#: .\contrib\auth\models.py:78
-msgid "permission"
-msgstr "permisiune"
-
-#: .\contrib\auth\models.py:79
-#: .\contrib\auth\models.py:94
-msgid "permissions"
-msgstr "permisiuni"
-
-#: .\contrib\auth\models.py:97
-msgid "group"
-msgstr "grup"
-
-#: .\contrib\auth\models.py:98
-#: .\contrib\auth\models.py:141
-msgid "groups"
-msgstr "grupuri"
-
-#: .\contrib\auth\models.py:131
-msgid "username"
-msgstr "nume utilizator"
-
-#: .\contrib\auth\models.py:131
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "Necesar. 30 de caractere sau mai puțin. Doar caractere alfanumerice (litere, cifre, liniuțe de subliniere)."
-
-#: .\contrib\auth\models.py:132
-msgid "first name"
-msgstr "Prenume"
-
-#: .\contrib\auth\models.py:133
-msgid "last name"
-msgstr "Nume"
-
-#: .\contrib\auth\models.py:134
-msgid "e-mail address"
-msgstr "adresă email"
-
-#: .\contrib\auth\models.py:135
-msgid "password"
-msgstr "parolă"
-
-#: .\contrib\auth\models.py:135
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Folosiți '[algo]$[salt]$[hexdigest]' sau folosiți <a href=\"password/\">formularul de schimbare a parolei</a>."
-
-#: .\contrib\auth\models.py:136
-msgid "staff status"
-msgstr "stare staff"
-
-#: .\contrib\auth\models.py:136
-msgid "Designates whether the user can log into this admin site."
-msgstr "Decide când utilizatorul se poate loga în acest sit de adminstrare."
-
-#: .\contrib\auth\models.py:137
-msgid "active"
-msgstr "activ"
-
-#: .\contrib\auth\models.py:137
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "Indică dacă acest utilizator va fi tratat ca activ sau nu. Deselectează-l în loc de a șterge conturi."
-
-#: .\contrib\auth\models.py:138
-msgid "superuser status"
-msgstr "stare superutilizator"
-
-#: .\contrib\auth\models.py:138
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Indică daca acest user are toate permisiunile fără a le selecta explicit."
-
-#: .\contrib\auth\models.py:139
-msgid "last login"
-msgstr "ultima logare"
-
-#: .\contrib\auth\models.py:140
-msgid "date joined"
-msgstr "data aderării"
-
-#: .\contrib\auth\models.py:142
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Suplimentar permisiunilor manual alocate, acest utilizator va primi toate permisiunile alocate fiecărui grup din care el/ea face parte."
-
-#: .\contrib\auth\models.py:143
-msgid "user permissions"
-msgstr "permisiuni utilizator"
-
-#: .\contrib\auth\models.py:147
-msgid "user"
-msgstr "utilizator"
-
-#: .\contrib\auth\models.py:148
-msgid "users"
-msgstr "utilizatori"
-
-#: .\contrib\auth\models.py:154
-msgid "Personal info"
-msgstr "Informaţii personale"
-
-#: .\contrib\auth\models.py:155
-msgid "Permissions"
-msgstr "Permisiuni"
-
-#: .\contrib\auth\models.py:156
-msgid "Important dates"
-msgstr "Date importante"
-
-#: .\contrib\auth\models.py:157
-msgid "Groups"
-msgstr "Grupuri"
-
-#: .\contrib\auth\models.py:316
-msgid "message"
-msgstr "mesaj"
-
-#: .\contrib\auth\views.py:47
-msgid "Logged out"
-msgstr "Deautentificat"
-
-#: .\contrib\comments\models.py:71
-#: .\contrib\comments\models.py:176
-msgid "object ID"
-msgstr "ID obiect"
-
-#: .\contrib\comments\models.py:72
-msgid "headline"
-msgstr "titlu"
-
-#: .\contrib\comments\models.py:73
-#: .\contrib\comments\models.py:95
-#: .\contrib\comments\models.py:177
-msgid "comment"
-msgstr "comentariu"
-
-#: .\contrib\comments\models.py:74
-msgid "rating #1"
-msgstr "rating #1"
-
-#: .\contrib\comments\models.py:75
-msgid "rating #2"
-msgstr "rating #2"
-
-#: .\contrib\comments\models.py:76
-msgid "rating #3"
-msgstr "rating #3"
-
-#: .\contrib\comments\models.py:77
-msgid "rating #4"
-msgstr "rating #4"
-
-#: .\contrib\comments\models.py:78
-msgid "rating #5"
-msgstr "rating #5"
-
-#: .\contrib\comments\models.py:79
-msgid "rating #6"
-msgstr "rating #6"
-
-#: .\contrib\comments\models.py:80
-msgid "rating #7"
-msgstr "rating #7"
-
-#: .\contrib\comments\models.py:81
-msgid "rating #8"
-msgstr "rating #8"
-
-#: .\contrib\comments\models.py:86
-msgid "is valid rating"
-msgstr "este rating valid"
-
-#: .\contrib\comments\models.py:87
-#: .\contrib\comments\models.py:179
-msgid "date/time submitted"
-msgstr "data/ora creării"
-
-#: .\contrib\comments\models.py:88
-#: .\contrib\comments\models.py:180
-msgid "is public"
-msgstr "public"
-
-#: .\contrib\comments\models.py:90
-msgid "is removed"
-msgstr "șters"
-
-#: .\contrib\comments\models.py:90
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Bifează această casuța dacă comentariul nu este adecvat. Un mesaj de tipul \"Acest comentariu a fost șters\" va fi afișat în schimb."
-
-#: .\contrib\comments\models.py:96
-msgid "comments"
-msgstr "comentarii"
-
-#: .\contrib\comments\models.py:140
-#: .\contrib\comments\models.py:222
-msgid "Content object"
-msgstr "Obiect comentariu"
-
-#: .\contrib\comments\models.py:168
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Postat de %(user)s la %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: .\contrib\comments\models.py:178
-msgid "person's name"
-msgstr "numele persoanei"
-
-#: .\contrib\comments\models.py:181
-msgid "ip address"
-msgstr "adresa ip"
-
-#: .\contrib\comments\models.py:183
-msgid "approved by staff"
-msgstr "aprobat de echipă"
-
-#: .\contrib\comments\models.py:187
-msgid "free comment"
-msgstr "permite comentariu fara înregistrare"
-
-#: .\contrib\comments\models.py:188
-msgid "free comments"
-msgstr "permite comentarii fara înregistrare"
-
-#: .\contrib\comments\models.py:250
-msgid "score"
-msgstr "punctaj"
-
-#: .\contrib\comments\models.py:251
-msgid "score date"
-msgstr "data punctajului"
-
-#: .\contrib\comments\models.py:255
-#, fuzzy
-msgid "karma score"
-msgstr "punctaj karmic"
-
-#: .\contrib\comments\models.py:256
-#, fuzzy
-msgid "karma scores"
-msgstr "punctaje karmice"
-
-#: .\contrib\comments\models.py:260
-#, fuzzy, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "Punctaj %(score)d atribuit de către %(user)s"
-
-#: .\contrib\comments\models.py:277
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Acest comentariu a fost marcat de %(user)s:\n"
-"\n"
-"%(text)s"
-
-#: .\contrib\comments\models.py:285
-msgid "flag date"
-msgstr "data marcării"
-
-#: .\contrib\comments\models.py:289
-#, fuzzy
-msgid "user flag"
-msgstr "steguleț de utilizator"
-
-#: .\contrib\comments\models.py:290
-#, fuzzy
-msgid "user flags"
-msgstr "stegulețe de utilizatori"
-
-#: .\contrib\comments\models.py:294
-#, python-format
-msgid "Flag by %r"
-msgstr "Marcajul lui %r"
-
-#: .\contrib\comments\models.py:300
-msgid "deletion date"
-msgstr "data ștergerii"
-
-#: .\contrib\comments\models.py:303
-msgid "moderator deletion"
-msgstr "șters de moderator"
-
-#: .\contrib\comments\models.py:304
-msgid "moderator deletions"
-msgstr "șterse de moderator"
-
-#: .\contrib\comments\models.py:308
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Șters de moderatorul %r"
-
-#: .\contrib\comments\templates\comments\form.html.py:8
-msgid "Forgotten your password?"
-msgstr "Ai uitat parola?"
-
-#: .\contrib\comments\templates\comments\form.html.py:12
-msgid "Ratings"
-msgstr "Ratinguri"
-
-#: .\contrib\comments\templates\comments\form.html.py:12
-#: .\contrib\comments\templates\comments\form.html.py:23
-msgid "Required"
-msgstr "Necesar"
-
-#: .\contrib\comments\templates\comments\form.html.py:12
-#: .\contrib\comments\templates\comments\form.html.py:23
-msgid "Optional"
-msgstr "Opțional"
-
-#: .\contrib\comments\templates\comments\form.html.py:23
-msgid "Post a photo"
-msgstr "Adaugă o poză"
-
-#: .\contrib\comments\templates\comments\form.html.py:28
-#: .\contrib\comments\templates\comments\freeform.html.py:5
-msgid "Comment:"
-msgstr "Comentariu:"
-
-#: .\contrib\comments\templates\comments\form.html.py:35
-#: .\contrib\comments\templates\comments\freeform.html.py:10
-msgid "Preview comment"
-msgstr "Previzualizare comentariu"
-
-#: .\contrib\comments\templates\comments\freeform.html.py:4
-msgid "Your name:"
-msgstr "numele dumneavoastră"
-
-#: .\contrib\comments\views\comments.py:28
-msgid "This rating is required because you've entered at least one other rating."
-msgstr "Acest rating este necesar deoarece ai introdus cel puțin un alt rating."
-
-#: .\contrib\comments\views\comments.py:112
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] ""
-"Acest comentariu a fost postat de un utilizator care a postat mai puțin de %(count)s comentariu:\n"
-"\n"
-"%(text)s"
-msgstr[1] ""
-"Acest comentariu a fost postat de un utilizator care a postat mai puțin de %(count)s comentarii:\n"
-"\n"
-"%(text)s"
-
-#: .\contrib\comments\views\comments.py:117
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Acest comentariu a fost postat de un utilizator neordonat:\n"
-"\n"
-"%(text)s"
-
-#: .\contrib\comments\views\comments.py:190
-#: .\contrib\comments\views\comments.py:283
-msgid "Only POSTs are allowed"
-msgstr "Doar postările sunt permise"
-
-#: .\contrib\comments\views\comments.py:194
-#: .\contrib\comments\views\comments.py:287
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Unul sau mai multe câmpuri necesare nu au fost completate"
-
-#: .\contrib\comments\views\comments.py:198
-#: .\contrib\comments\views\comments.py:289
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Cineva a modificat formularul de comentarii (încălcare a securității)"
-
-#: .\contrib\comments\views\comments.py:208
-#: .\contrib\comments\views\comments.py:295
-msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
-msgstr "Formularul de comentariu a avut un parametru 'țintă' invalid -- ID-ul obiectului a fost invalid"
-
-#: .\contrib\comments\views\comments.py:259
-#: .\contrib\comments\views\comments.py:324
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Formularul de comentariu nu specifică nici 'previzualizare' nici 'postare'"
-
-#: .\contrib\comments\views\karma.py:21
-msgid "Anonymous users cannot vote"
-msgstr "Utilizatorii anonimi nu pot vota"
-
-#: .\contrib\comments\views\karma.py:25
-msgid "Invalid comment ID"
-msgstr "Comentariu cu ID invalid"
-
-#: .\contrib\comments\views\karma.py:27
-msgid "No voting for yourself"
-msgstr "Nu poți vota pentru tine"
-
-#: .\contrib\contenttypes\models.py:67
-#, fuzzy
-msgid "python model class name"
-msgstr "nume clasă model python"
-
-#: .\contrib\contenttypes\models.py:71
-msgid "content type"
-msgstr "tip conţinut"
-
-#: .\contrib\contenttypes\models.py:72
-msgid "content types"
-msgstr "tipuri conţinut"
-
-#: .\contrib\flatpages\models.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Exemplu: '/despre/contact'. Asiguraţi-vă că aveţi slash-uri la început şi la sfârşit."
-
-#: .\contrib\flatpages\models.py:10
-msgid "title"
-msgstr "titlu"
-
-#: .\contrib\flatpages\models.py:11
-msgid "content"
-msgstr "conţinut"
-
-#: .\contrib\flatpages\models.py:12
-msgid "enable comments"
-msgstr "permite comentarii"
-
-#: .\contrib\flatpages\models.py:13
-msgid "template name"
-msgstr "nume şablon"
-
-#: .\contrib\flatpages\models.py:14
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Exemplu: 'flatpages/contact_page.html'. Dacă aceasta nu există, sistemul va folosi 'flatpages/default.html'."
-
-#: .\contrib\flatpages\models.py:15
-msgid "registration required"
-msgstr "necesită înregistrare"
-
-#: .\contrib\flatpages\models.py:15
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Dacă aceasta este bifată, numai utilizatorii logaţi vor putea vedea pagina."
-
-#: .\contrib\flatpages\models.py:20
-msgid "flat page"
-msgstr "pagina plată"
-
-#: .\contrib\flatpages\models.py:21
-msgid "flat pages"
-msgstr "pagini plate"
-
-#: .\contrib\flatpages\models.py:27
-msgid "Advanced options"
-msgstr "Opțiuni avansate"
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "th"
-msgstr "ul"
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "st"
-msgstr "ul"
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "nd"
-msgstr "lea"
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "rd"
-msgstr "lea"
-
-#: .\contrib\humanize\templatetags\humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milion"
-msgstr[1] "%(value).1f milioane"
-
-#: .\contrib\humanize\templatetags\humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miliard"
-msgstr[1] "%(value).1f miliarde"
-
-#: .\contrib\humanize\templatetags\humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f mie de miliarde"
-msgstr[1] "%(value).1f mii de miliarde"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "one"
-msgstr "unu"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "two"
-msgstr "doi"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "three"
-msgstr "trei"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "four"
-msgstr "patru"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "five"
-msgstr "cinci"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "six"
-msgstr "șase"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "seven"
-msgstr "șapte"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "eight"
-msgstr "opt"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "nine"
-msgstr "nouă"
-
-#: .\contrib\humanize\templatetags\humanize.py:93
-msgid "today"
-msgstr "astăzi"
-
-#: .\contrib\humanize\templatetags\humanize.py:95
-msgid "tomorrow"
-msgstr "mâine"
-
-#: .\contrib\humanize\templatetags\humanize.py:97
-msgid "yesterday"
-msgstr "ieri"
-
-#: .\contrib\localflavor\ar\forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Introduceți un cod poștal valid de forma NNNN sau ANNNNAAA."
-
-#: .\contrib\localflavor\ar\forms.py:49
-#: .\contrib\localflavor\br\forms.py:96
-#: .\contrib\localflavor\br\forms.py:135
-#: .\contrib\localflavor\pe\forms.py:23
-#: .\contrib\localflavor\pe\forms.py:51
-msgid "This field requires only numbers."
-msgstr "Acest câmp acceptă doar numere."
-
-#: .\contrib\localflavor\ar\forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Acest câmp are nevoie de 7 sau 8 cifre."
-
-#: .\contrib\localflavor\ar\forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Introduceți un CUIT valid de forma XX-XXXXXXXX-X sau XXXXXXXXXXXX."
-
-#: .\contrib\localflavor\ar\forms.py:80
-msgid "Invalid CUIT."
-msgstr "CUIT invalid."
-
-#: .\contrib\localflavor\au\forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Introduceți un cod poștal de 4 cifre."
-
-#: .\contrib\localflavor\br\forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Adăugați un cod poștal de forma XXXXX-XXX."
-
-#: .\contrib\localflavor\br\forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Numerele de telefon trebuie să fie în format XXX-XXX-XXXX."
-
-#: .\contrib\localflavor\br\forms.py:58
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Selectați un stat brazilian valid. Acest stat nu se află printre statele disponibile."
-
-#: .\contrib\localflavor\br\forms.py:94
-msgid "Invalid CPF number."
-msgstr "Număr CPF invalid."
-
-#: .\contrib\localflavor\br\forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Acest câmp are nevoie de cel mult 11 cifre sau 14 caractere."
-
-#: .\contrib\localflavor\br\forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Număr CNPJ invalid."
-
-#: .\contrib\localflavor\br\forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Acest câmp are nevoie de cel puțin 14 cifre."
-
-#: .\contrib\localflavor\ca\forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Introduceți un cod poștal de forma XXX XXX."
-
-#: .\contrib\localflavor\ca\forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Introduceți un număr canadian de asigurare socială valid de forma XXX-XXX-XXX."
-
-#: .\contrib\localflavor\ch\ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: .\contrib\localflavor\ch\ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: .\contrib\localflavor\ch\ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: .\contrib\localflavor\ch\ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: .\contrib\localflavor\ch\ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: .\contrib\localflavor\ch\ch_states.py:10
-msgid "Berne"
-msgstr "Berna"
-
-#: .\contrib\localflavor\ch\ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: .\contrib\localflavor\ch\ch_states.py:12
-msgid "Geneva"
-msgstr "Geneva"
-
-#: .\contrib\localflavor\ch\ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: .\contrib\localflavor\ch\ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: .\contrib\localflavor\ch\ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: .\contrib\localflavor\ch\ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerna"
-
-#: .\contrib\localflavor\ch\ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: .\contrib\localflavor\ch\ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: .\contrib\localflavor\ch\ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: .\contrib\localflavor\ch\ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: .\contrib\localflavor\ch\ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: .\contrib\localflavor\ch\ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: .\contrib\localflavor\ch\ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: .\contrib\localflavor\ch\ch_states.py:24
-msgid "Thurgau"
-msgstr "JoiTurgovia"
-
-#: .\contrib\localflavor\ch\ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: .\contrib\localflavor\ch\ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: .\contrib\localflavor\ch\ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: .\contrib\localflavor\ch\ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: .\contrib\localflavor\ch\ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: .\contrib\localflavor\ch\ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: .\contrib\localflavor\ch\forms.py:16
-#: .\contrib\localflavor\no\forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Introduceți un cod poștal de forma XXXX."
-
-#: .\contrib\localflavor\ch\forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "Introduceți un număr elvetian de identitate sau pașaport, valid, de forma X1234567<0 sau 1234567890."
-
-#: .\contrib\localflavor\cl\forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Introduceți RUT chilian valid."
-
-#: .\contrib\localflavor\cl\forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Introduceți un RUT chilian valid. Formatul este XX.XXX.XXX-X."
-
-#: .\contrib\localflavor\cl\forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "RUT-ul chilean nu este valid."
-
-#: .\contrib\localflavor\de\de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: .\contrib\localflavor\de\de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: .\contrib\localflavor\de\de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: .\contrib\localflavor\de\de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: .\contrib\localflavor\de\de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: .\contrib\localflavor\de\de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: .\contrib\localflavor\de\de_states.py:11
-msgid "Hessen"
-msgstr "Hessa"
-
-#: .\contrib\localflavor\de\de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Pomerania Inferioara"
-
-#: .\contrib\localflavor\de\de_states.py:13
-msgid "Lower Saxony"
-msgstr "Saxonia Inferioara"
-
-#: .\contrib\localflavor\de\de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Renania de Nord-Westfalia"
-
-#: .\contrib\localflavor\de\de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Renanina-Palatinat"
-
-#: .\contrib\localflavor\de\de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: .\contrib\localflavor\de\de_states.py:17
-msgid "Saxony"
-msgstr "Saxonia"
-
-#: .\contrib\localflavor\de\de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxonia-Anhalt"
-
-#: .\contrib\localflavor\de\de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: .\contrib\localflavor\de\de_states.py:20
-msgid "Thuringia"
-msgstr "Turingia"
-
-#: .\contrib\localflavor\de\forms.py:14
-#: .\contrib\localflavor\fi\forms.py:12
-#: .\contrib\localflavor\fr\forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Introduceți un cod poștal de forma XXXXX."
-
-#: .\contrib\localflavor\de\forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Introduceți un număr german de identitate valid, de forma XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: .\contrib\localflavor\es\es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: .\contrib\localflavor\es\es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: .\contrib\localflavor\es\es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: .\contrib\localflavor\es\es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: .\contrib\localflavor\es\es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: .\contrib\localflavor\es\es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: .\contrib\localflavor\es\es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Insulele Baleare"
-
-#: .\contrib\localflavor\es\es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: .\contrib\localflavor\es\es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: .\contrib\localflavor\es\es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: .\contrib\localflavor\es\es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: .\contrib\localflavor\es\es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: .\contrib\localflavor\es\es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: .\contrib\localflavor\es\es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: .\contrib\localflavor\es\es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: .\contrib\localflavor\es\es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: .\contrib\localflavor\es\es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: .\contrib\localflavor\es\es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: .\contrib\localflavor\es\es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: .\contrib\localflavor\es\es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: .\contrib\localflavor\es\es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: .\contrib\localflavor\es\es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: .\contrib\localflavor\es\es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: .\contrib\localflavor\es\es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: .\contrib\localflavor\es\es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: .\contrib\localflavor\es\es_provinces.py:30
-#: .\contrib\localflavor\es\es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: .\contrib\localflavor\es\es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: .\contrib\localflavor\es\es_provinces.py:32
-#: .\contrib\localflavor\es\es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: .\contrib\localflavor\es\es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: .\contrib\localflavor\es\es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: .\contrib\localflavor\es\es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: .\contrib\localflavor\es\es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: .\contrib\localflavor\es\es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: .\contrib\localflavor\es\es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: .\contrib\localflavor\es\es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: .\contrib\localflavor\es\es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: .\contrib\localflavor\es\es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: .\contrib\localflavor\es\es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: .\contrib\localflavor\es\es_provinces.py:43
-#: .\contrib\localflavor\es\es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: .\contrib\localflavor\es\es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: .\contrib\localflavor\es\es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilia"
-
-#: .\contrib\localflavor\es\es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: .\contrib\localflavor\es\es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: .\contrib\localflavor\es\es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: .\contrib\localflavor\es\es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: .\contrib\localflavor\es\es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: .\contrib\localflavor\es\es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: .\contrib\localflavor\es\es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: .\contrib\localflavor\es\es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: .\contrib\localflavor\es\es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: .\contrib\localflavor\es\es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: .\contrib\localflavor\es\es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: .\contrib\localflavor\es\es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: .\contrib\localflavor\es\es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: .\contrib\localflavor\es\es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principatul Asturiei"
-
-#: .\contrib\localflavor\es\es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Insulele Baleare"
-
-#: .\contrib\localflavor\es\es_regions.py:9
-msgid "Basque Country"
-msgstr "Tara Bascilor"
-
-#: .\contrib\localflavor\es\es_regions.py:10
-msgid "Canary Islands"
-msgstr "Insulele Canare"
-
-#: .\contrib\localflavor\es\es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castile-La Mancha"
-
-#: .\contrib\localflavor\es\es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castilia și Leon"
-
-#: .\contrib\localflavor\es\es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: .\contrib\localflavor\es\es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: .\contrib\localflavor\es\es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: .\contrib\localflavor\es\es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Regiunea Murcia"
-
-#: .\contrib\localflavor\es\es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Comunitatea Forală Navara"
-
-#: .\contrib\localflavor\es\es_regions.py:21
-msgid "Valencian Community"
-msgstr "Comunitatea Valencia"
-
-#: .\contrib\localflavor\es\forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Introduceți un cod poștal valid în intervalul și de forma 01XXX - 52XXX."
-
-#: .\contrib\localflavor\es\forms.py:39
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "Introduceți un număr de telefon valid într-unul dintre formatele 6XXXXXXXX, 8XXXXXXXX sau 9XXXXXXXX."
-
-#: .\contrib\localflavor\es\forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Introduceţi vă rog un NIF, NIE sau CIF valid."
-
-#: .\contrib\localflavor\es\forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Introduceți vă rog un NIF sau NIE valid."
-
-#: .\contrib\localflavor\es\forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Sumă de control invalidă pentru NIF."
-
-#: .\contrib\localflavor\es\forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Sumă de control invalidă pentru NIE."
-
-#: .\contrib\localflavor\es\forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Sumă de control invalidă pentru CIF."
-
-#: .\contrib\localflavor\es\forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Introduceți un număr de cont bancar valid de forma XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: .\contrib\localflavor\es\forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Sumă de control invalidă pentru numărul de cont bancar."
-
-#: .\contrib\localflavor\fi\forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Introduceți un număr finlandez de securitate socială valid."
-
-#: .\contrib\localflavor\in_\forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Introduceți un cod poștal de forma XXXXXXX."
-
-#: .\contrib\localflavor\is_\forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Introduceți un număr islandez de autentificare valid. Formatul este XXXXXX-XXXX."
-
-#: .\contrib\localflavor\is_\forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Numărul islandez de identificare nu este valid."
-
-#: .\contrib\localflavor\it\forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Introduceți un cod poștal valid."
-
-#: .\contrib\localflavor\it\forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Introduceți un număr de securitate socială valid."
-
-#: .\contrib\localflavor\it\forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Introduceți un număr TVA valid."
-
-#: .\contrib\localflavor\jp\forms.py:17
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Introduceți un cod poștal de forma XXXXXXX sau XXX-XXXX."
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: .\contrib\localflavor\mx\mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: .\contrib\localflavor\mx\mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: .\contrib\localflavor\mx\mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: .\contrib\localflavor\mx\mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: .\contrib\localflavor\mx\mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: .\contrib\localflavor\mx\mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: .\contrib\localflavor\mx\mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: .\contrib\localflavor\mx\mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: .\contrib\localflavor\mx\mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Districtul Federal"
-
-#: .\contrib\localflavor\mx\mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: .\contrib\localflavor\mx\mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: .\contrib\localflavor\mx\mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: .\contrib\localflavor\mx\mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: .\contrib\localflavor\mx\mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: .\contrib\localflavor\mx\mx_states.py:26
-msgid "Estado de México"
-msgstr "Statul Mexico"
-
-#: .\contrib\localflavor\mx\mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: .\contrib\localflavor\mx\mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: .\contrib\localflavor\mx\mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: .\contrib\localflavor\mx\mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: .\contrib\localflavor\mx\mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: .\contrib\localflavor\mx\mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: .\contrib\localflavor\mx\mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: .\contrib\localflavor\mx\mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: .\contrib\localflavor\mx\mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: .\contrib\localflavor\mx\mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: .\contrib\localflavor\mx\mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: .\contrib\localflavor\mx\mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: .\contrib\localflavor\mx\mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: .\contrib\localflavor\mx\mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: .\contrib\localflavor\mx\mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: .\contrib\localflavor\mx\mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatan"
-
-#: .\contrib\localflavor\mx\mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: .\contrib\localflavor\nl\forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Introduceți un cod poștal valid"
-
-#: .\contrib\localflavor\nl\forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Introduceţi un număr de telefon valid"
-
-#: .\contrib\localflavor\nl\forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Introduceți un număr SoFi valid"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:4
-msgid "Drente"
-msgstr "Drente"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:6
-msgid "Friesland"
-msgstr "Frizia"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Brabantul de Nord"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Olanda de Nord"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeelanda"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Olanda de Sud"
-
-#: .\contrib\localflavor\no\forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Introduceți un număr norvegian de securitate socială valid."
-
-#: .\contrib\localflavor\pe\forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Acest câmp are nevoie de 8 cifre."
-
-#: .\contrib\localflavor\pe\forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Acest câmp are nevoie de 11 cifre."
-
-#: .\contrib\localflavor\pl\forms.py:39
-msgid "National Identification Number consists of 11 digits."
-msgstr "Numărul Național de Identificare conține 11 cifre."
-
-#: .\contrib\localflavor\pl\forms.py:40
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Sumă de control greșită pentru Numărul Național de Identificare."
-
-#: .\contrib\localflavor\pl\forms.py:72
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Introduceți un număr de taxă(NIP) de forma XXX-XXX-XX-XX sau XX-XX-XXX-XXX."
-
-#: .\contrib\localflavor\pl\forms.py:73
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Sumă de control greșită pentru Numărul de Taxa (NIP)."
-
-#: .\contrib\localflavor\pl\forms.py:112
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr "Numărul National din Registrul pentru Afaceri (REGON) contine 7 sau 9 cifre."
-
-#: .\contrib\localflavor\pl\forms.py:113
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Suma de control gresita pentru Numărul National din Registrul pentru Afaceri (REGON)."
-
-#: .\contrib\localflavor\pl\forms.py:156
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Introduceți un cod poștal de forma XX-XXX."
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Silezia Inferioară"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Polonia Mică"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Podcarpatia"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silezia"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Polonia Mare"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Pomerania Occidentală"
-
-#: .\contrib\localflavor\sk\forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Introduceți un cod poștal de forma XXXXX or XXX XX."
-
-#: .\contrib\localflavor\sk\sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: .\contrib\localflavor\sk\sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: .\contrib\localflavor\sk\sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: .\contrib\localflavor\sk\sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: .\contrib\localflavor\sk\sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: .\contrib\localflavor\sk\sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: .\contrib\localflavor\sk\sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: .\contrib\localflavor\sk\sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: .\contrib\localflavor\sk\sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: .\contrib\localflavor\sk\sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: .\contrib\localflavor\sk\sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: .\contrib\localflavor\sk\sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: .\contrib\localflavor\sk\sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: .\contrib\localflavor\sk\sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: .\contrib\localflavor\sk\sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: .\contrib\localflavor\sk\sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: .\contrib\localflavor\sk\sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: .\contrib\localflavor\sk\sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: .\contrib\localflavor\sk\sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: .\contrib\localflavor\sk\sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: .\contrib\localflavor\sk\sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: .\contrib\localflavor\sk\sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: .\contrib\localflavor\sk\sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: .\contrib\localflavor\sk\sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: .\contrib\localflavor\sk\sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: .\contrib\localflavor\sk\sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: .\contrib\localflavor\sk\sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: .\contrib\localflavor\sk\sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: .\contrib\localflavor\sk\sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: .\contrib\localflavor\sk\sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: .\contrib\localflavor\sk\sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: .\contrib\localflavor\sk\sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: .\contrib\localflavor\sk\sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: .\contrib\localflavor\sk\sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: .\contrib\localflavor\sk\sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: .\contrib\localflavor\sk\sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: .\contrib\localflavor\sk\sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: .\contrib\localflavor\sk\sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: .\contrib\localflavor\sk\sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: .\contrib\localflavor\sk\sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: .\contrib\localflavor\sk\sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: .\contrib\localflavor\sk\sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: .\contrib\localflavor\sk\sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: .\contrib\localflavor\sk\sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: .\contrib\localflavor\sk\sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: .\contrib\localflavor\sk\sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: .\contrib\localflavor\sk\sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: .\contrib\localflavor\sk\sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: .\contrib\localflavor\sk\sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: .\contrib\localflavor\sk\sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: .\contrib\localflavor\sk\sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: .\contrib\localflavor\sk\sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: .\contrib\localflavor\sk\sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: .\contrib\localflavor\sk\sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: .\contrib\localflavor\sk\sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: .\contrib\localflavor\sk\sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: .\contrib\localflavor\sk\sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: .\contrib\localflavor\sk\sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: .\contrib\localflavor\sk\sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: .\contrib\localflavor\sk\sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: .\contrib\localflavor\sk\sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: .\contrib\localflavor\sk\sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: .\contrib\localflavor\sk\sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: .\contrib\localflavor\sk\sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: .\contrib\localflavor\sk\sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: .\contrib\localflavor\sk\sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: .\contrib\localflavor\sk\sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: .\contrib\localflavor\sk\sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: .\contrib\localflavor\sk\sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: .\contrib\localflavor\sk\sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: .\contrib\localflavor\sk\sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: .\contrib\localflavor\sk\sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: .\contrib\localflavor\sk\sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: .\contrib\localflavor\sk\sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: .\contrib\localflavor\sk\sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: .\contrib\localflavor\sk\sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: .\contrib\localflavor\sk\sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: .\contrib\localflavor\sk\sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: .\contrib\localflavor\sk\sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: .\contrib\localflavor\sk\sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica region"
-
-#: .\contrib\localflavor\sk\sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Regiunea Bratislava"
-
-#: .\contrib\localflavor\sk\sk_regions.py:10
-msgid "Kosice region"
-msgstr "Regiunea Kosice"
-
-#: .\contrib\localflavor\sk\sk_regions.py:11
-msgid "Nitra region"
-msgstr "Regiunea Nitra"
-
-#: .\contrib\localflavor\sk\sk_regions.py:12
-msgid "Presov region"
-msgstr "Regiunea Presov"
-
-#: .\contrib\localflavor\sk\sk_regions.py:13
-msgid "Trencin region"
-msgstr "Regiunea Trencin"
-
-#: .\contrib\localflavor\sk\sk_regions.py:14
-msgid "Trnava region"
-msgstr "Regiunea Trnava"
-
-#: .\contrib\localflavor\sk\sk_regions.py:15
-msgid "Zilina region"
-msgstr "Regiunea Zilina"
-
-#: .\contrib\localflavor\uk\forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Introduceți un cod poștal valid."
-
-#: .\contrib\localflavor\uk\uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall și Insulele Scilly"
-
-#: .\contrib\localflavor\uk\uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: .\contrib\localflavor\uk\uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: .\contrib\localflavor\uk\uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: .\contrib\localflavor\uk\uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: .\contrib\localflavor\uk\uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: .\contrib\localflavor\uk\uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: .\contrib\localflavor\uk\uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:24
-msgid "Greater London"
-msgstr "Londra Mare"
-
-#: .\contrib\localflavor\uk\uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: .\contrib\localflavor\uk\uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: .\contrib\localflavor\uk\uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: .\contrib\localflavor\uk\uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: .\contrib\localflavor\uk\uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: .\contrib\localflavor\uk\uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: .\contrib\localflavor\uk\uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: .\contrib\localflavor\uk\uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: .\contrib\localflavor\uk\uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne și Wear"
-
-#: .\contrib\localflavor\uk\uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: .\contrib\localflavor\uk\uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: .\contrib\localflavor\uk\uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: .\contrib\localflavor\uk\uk_regions.py:55
-msgid "County Antrim"
-msgstr "Comitatul Antrim"
-
-#: .\contrib\localflavor\uk\uk_regions.py:56
-msgid "County Armagh"
-msgstr "Comitatul Armagh"
-
-#: .\contrib\localflavor\uk\uk_regions.py:57
-msgid "County Down"
-msgstr "Comitatul Down"
-
-#: .\contrib\localflavor\uk\uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Comitatul Fermanagh"
-
-#: .\contrib\localflavor\uk\uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Comitatul Londonderry"
-
-#: .\contrib\localflavor\uk\uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Comitatul Tyrone"
-
-#: .\contrib\localflavor\uk\uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: .\contrib\localflavor\uk\uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: .\contrib\localflavor\uk\uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: .\contrib\localflavor\uk\uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: .\contrib\localflavor\uk\uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: .\contrib\localflavor\uk\uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: .\contrib\localflavor\uk\uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: .\contrib\localflavor\uk\uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: .\contrib\localflavor\uk\uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: .\contrib\localflavor\uk\uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: .\contrib\localflavor\uk\uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries și Galloway"
-
-#: .\contrib\localflavor\uk\uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: .\contrib\localflavor\uk\uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: .\contrib\localflavor\uk\uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: .\contrib\localflavor\uk\uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: .\contrib\localflavor\uk\uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: .\contrib\localflavor\uk\uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: .\contrib\localflavor\uk\uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: .\contrib\localflavor\uk\uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: .\contrib\localflavor\uk\uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: .\contrib\localflavor\uk\uk_regions.py:90
-msgid "England"
-msgstr "Anglia"
-
-#: .\contrib\localflavor\uk\uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Irlanda de Nord"
-
-#: .\contrib\localflavor\uk\uk_regions.py:92
-msgid "Scotland"
-msgstr "Scotia"
-
-#: .\contrib\localflavor\uk\uk_regions.py:93
-msgid "Wales"
-msgstr "Țara Galilor"
-
-#: .\contrib\localflavor\us\forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Introduceți un cod poștal de forma XXXXX or XXXXX-XXXX."
-
-#: .\contrib\localflavor\us\forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Introduceți un număr SUA de Securitate Sociala de forma XXX-XX-XXXX format."
-
-#: .\contrib\localflavor\za\forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Introduceți un ID sud african valid"
-
-#: .\contrib\localflavor\za\forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Introduceți un cod poștal sud african valid"
-
-#: .\contrib\localflavor\za\za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: .\contrib\localflavor\za\za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: .\contrib\localflavor\za\za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: .\contrib\localflavor\za\za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: .\contrib\localflavor\za\za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: .\contrib\localflavor\za\za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: .\contrib\localflavor\za\za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: .\contrib\localflavor\za\za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: .\contrib\localflavor\za\za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: .\contrib\redirects\models.py:7
-msgid "redirect from"
-msgstr "redirectat de la "
-
-#: .\contrib\redirects\models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Aceasta ar trebui să fie o cale absolută, excluzând numele de domeniu. Exemplu: '/evenimente/cautare/'."
-
-#: .\contrib\redirects\models.py:9
-msgid "redirect to"
-msgstr "redirectat la"
-
-#: .\contrib\redirects\models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Aceasta poate fi o cale absolută (ca mai sus) sau un URL începând cu 'http://'."
-
-#: .\contrib\redirects\models.py:13
-msgid "redirect"
-msgstr "redirectare"
-
-#: .\contrib\redirects\models.py:14
-msgid "redirects"
-msgstr "redictări"
-
-#: .\contrib\sessions\models.py:41
-msgid "session key"
-msgstr "cheie sesiune"
-
-#: .\contrib\sessions\models.py:42
-msgid "session data"
-msgstr "date sesiune"
-
-#: .\contrib\sessions\models.py:43
-msgid "expire date"
-msgstr "data expirare"
-
-#: .\contrib\sessions\models.py:48
-msgid "session"
-msgstr "sesiune"
-
-#: .\contrib\sessions\models.py:49
-msgid "sessions"
-msgstr "sesiuni"
-
-#: .\contrib\sites\models.py:32
-msgid "domain name"
-msgstr "nume domeniu"
-
-#: .\contrib\sites\models.py:33
-msgid "display name"
-msgstr "nume afişat"
-
-#: .\contrib\sites\models.py:37
-msgid "site"
-msgstr "sit"
-
-#: .\contrib\sites\models.py:38
-msgid "sites"
-msgstr "sit"
-
-#: .\core\validators.py:72
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Această valoare trebuie să conţină numai litere, numere şi liniuţe de subliniere."
-
-#: .\core\validators.py:76
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Această valoare trebuie să conţină numai litere, numere, liniuţe de subliniere, slash-uri și dash-uri."
-
-#: .\core\validators.py:80
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "Această valoare trebuie să conţină numai litere, numere, liniuţe de subliniere şi liniute."
-
-#: .\core\validators.py:84
-msgid "Uppercase letters are not allowed here."
-msgstr "Literele mari nu sunt permise aici."
-
-#: .\core\validators.py:88
-msgid "Lowercase letters are not allowed here."
-msgstr "Literele mici nu sunt permise aici."
-
-#: .\core\validators.py:95
-msgid "Enter only digits separated by commas."
-msgstr "Introduceţi numai numere separate de virgule."
-
-#: .\core\validators.py:107
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Introduceţi adrese de email valide separate de virgule."
-
-#: .\core\validators.py:111
-msgid "Please enter a valid IP address."
-msgstr "Introduceţi vă rog o adresă IP validă."
-
-#: .\core\validators.py:115
-msgid "Empty values are not allowed here."
-msgstr "Valorile vide nu sunt permise aici."
-
-#: .\core\validators.py:119
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Caracterele ne-numerice nu sunt permise aici."
-
-#: .\core\validators.py:123
-msgid "This value can't be comprised solely of digits."
-msgstr "Această valoare nu poate conţîne numai cifre."
-
-#: .\core\validators.py:128
-#: .\newforms\fields.py:152
-msgid "Enter a whole number."
-msgstr "Introduceţi un număr întreg."
-
-#: .\core\validators.py:132
-msgid "Only alphabetical characters are allowed here."
-msgstr "Numai caractere alfabetice sunt permise aici."
-
-#: .\core\validators.py:147
-msgid "Year must be 1900 or later."
-msgstr "Anul trebuie să fie 1900 sau posterior."
-
-#: .\core\validators.py:151
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Data invalida: %s"
-
-#: .\core\validators.py:156
-#: .\db\models\fields\__init__.py:527
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduceţi o dată validă în format: AAAA-LL-ZZ."
-
-#: .\core\validators.py:161
-msgid "Enter a valid time in HH:MM format."
-msgstr "Introduceţi o oră în format OO:MM."
-
-#: .\core\validators.py:165
-#: .\db\models\fields\__init__.py:604
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Introduceţi o dată/oră validă în format AAAA-LL-ZZ OO:MM."
-
-#: .\core\validators.py:170
-#: .\newforms\fields.py:403
-msgid "Enter a valid e-mail address."
-msgstr "Introduceţi o adresă de email validă."
-
-#: .\core\validators.py:182
-#: .\core\validators.py:474
-#: .\newforms\fields.py:433
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Nici un fisier nu a fost trimis. Verifica tipul fisierului."
-
-#: .\core\validators.py:193
-#: .\newforms\fields.py:459
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Încărcaţi o imagine validă. Fişierul încărcat nu era o imagine sau era o imagine coruptă."
-
-#: .\core\validators.py:200
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "URL-ul %s nu pointează către o imagine validă."
-
-#: .\core\validators.py:204
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Numerele de telefon trebuie să fie în format XXX-XXX-XXXX. \"%s\" e invalid."
-
-#: .\core\validators.py:212
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "URL-ul %s nu pointează către o imagine video QuickTime validă."
-
-#: .\core\validators.py:216
-msgid "A valid URL is required."
-msgstr "E necesar un URL valid."
-
-#: .\core\validators.py:230
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"E necesar cod HTML valid. Erorile specifice sunt:\n"
-"%s"
-
-#: .\core\validators.py:237
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "Format XML invalid: %s"
-
-#: .\core\validators.py:254
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL invalid: %s"
-
-#: .\core\validators.py:259
-#: .\core\validators.py:261
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "URL-ul %s e invalid."
-
-#: .\core\validators.py:267
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Introduceţi o abreviere validă în U.S."
-
-#: .\core\validators.py:281
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Îngrijiţi-vă limbajul! Cuvântul %s nu este permis aici."
-msgstr[1] "Îngrijiţi-vă limbajul! Cuvintele %s nu sunt permise aici."
-
-#: .\core\validators.py:288
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Acest câmp trebuie să fie identic cu '%s'."
-
-#: .\core\validators.py:307
-msgid "Please enter something for at least one field."
-msgstr "Vă rog completați cel puțin un câmp."
-
-#: .\core\validators.py:316
-#: .\core\validators.py:327
-msgid "Please enter both fields or leave them both empty."
-msgstr "Vă rog completaţi ambele câmpuri sau lăsaţi-le goale pe ambele."
-
-#: .\core\validators.py:335
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Acest câmp e necesar dacă %(field)s este %(value)s"
-
-#: .\core\validators.py:348
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Acest câmp e necesar dacă %(field)s nu este %(value)s"
-
-#: .\core\validators.py:367
-msgid "Duplicate values are not allowed."
-msgstr "Valorile duplicate nu sunt permise."
-
-#: .\core\validators.py:382
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Această valoare trebuie să fie cuprinsa între %(lower)s și %(upper)s."
-
-#: .\core\validators.py:384
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Această valoare trebuie să fie cel puțin %s."
-
-#: .\core\validators.py:386
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Această valoare trebuie să nu fie mai mult de %s."
-
-#: .\core\validators.py:427
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Această valoare trebuie să fie o putere a lui %s."
-
-#: .\core\validators.py:437
-msgid "Please enter a valid decimal number."
-msgstr "Vă rog introduceţi un număr zecimal valid."
-
-#: .\core\validators.py:444
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Vă rog introduceţi un număr zecimal valid cu cel mult %s cifră."
-msgstr[1] "Vă rog introduceţi un număr zecimal valid cu cel mult %s cifre."
-
-#: .\core\validators.py:447
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "Vă rog introduceţi un număr zecimal valid cu partea întreagă de cel mult %s cifră."
-msgstr[1] "Vă rog introduceţi un număr zecimal valid cu partea întreagă de cel mult %s cifre."
-
-#: .\core\validators.py:450
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Vă rog introduceţi un număr zecimal valid cu cel mult %s zecimală."
-msgstr[1] "Vă rog introduceţi un număr zecimal valid cu cel mult %s zecimale."
-
-#: .\core\validators.py:458
-msgid "Please enter a valid floating point number."
-msgstr "Vă rog introduceţi un număr cu virgulă valid."
-
-#: .\core\validators.py:467
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Asigură-te că fişierul încărcat are cel puţin %s octeţi."
-
-#: .\core\validators.py:468
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Asigură-te că fişierul încărcact are cel mult %s octeţi."
-
-#: .\core\validators.py:485
-msgid "The format for this field is wrong."
-msgstr "Formatul acestui câmp este invalid."
-
-#: .\core\validators.py:500
-msgid "This field is invalid."
-msgstr "Câmpul este invalid."
-
-#: .\core\validators.py:536
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Nu pot prelua nimic de la %s."
-
-#: .\core\validators.py:539
-#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "URL-ul %(url)s a returnat un header Content-Type invalid '%(contenttype)s'."
-
-#: .\core\validators.py:572
-#, python-format
-msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
-msgstr "Te rog închide tagurile %(tag)s din linia %(line)s. ( Linia începe cu \"%(start)s\".)"
-
-#: .\core\validators.py:576
-#, python-format
-msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
-msgstr "Textul începând cu linia %(line)s nu e permis în acest context. (Linia începând cu \"%(start)s\".)"
-
-#: .\core\validators.py:581
-#, python-format
-msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
-msgstr "\"%(attr)s\" în linia %(line)s e un atribut invalid. (Linia începând cu \"%(start)s\".)"
-
-#: .\core\validators.py:586
-#, python-format
-msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
-msgstr "\"<%(tag)s>\" în linia %(line)s este un tag invalid. (Linia începe cu \"%(start)s\"."
-
-#: .\core\validators.py:590
-#, python-format
-msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
-msgstr "Unui tag din linia %(line)s îi lipseşte unul sau mai multe atribute. (Linia începe cu \"%(start)s\".)"
-
-#: .\core\validators.py:595
-#, python-format
-msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
-msgstr "Atributul \"%(attr)s\" din linia %(line)s are o valoare invalidă. ( Linia începe cu \"%(start)s\".)"
-
-#: .\db\models\manipulators.py:308
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s de acest tip %(type)s există deja pentru %(field)s dat."
-
-#: .\db\models\fields\__init__.py:52
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s cu acest %(fieldname)s există deja."
-
-#: .\db\models\fields\__init__.py:161
-#: .\db\models\fields\__init__.py:327
-#: .\db\models\fields\__init__.py:759
-#: .\db\models\fields\__init__.py:770
-#: .\newforms\fields.py:46
-#: .\oldforms\__init__.py:374
-msgid "This field is required."
-msgstr "Acest câmp este obligatoriu."
-
-#: .\db\models\fields\__init__.py:427
-msgid "This value must be an integer."
-msgstr "Această valoare trebuie să fie un număr intreg."
-
-#: .\db\models\fields\__init__.py:466
-msgid "This value must be either True or False."
-msgstr "Această valoare trebuie să fie ori falsă ori adevarată."
-
-#: .\db\models\fields\__init__.py:490
-msgid "This field cannot be null."
-msgstr "Câmpul nu poate fi gol"
-
-#: .\db\models\fields\__init__.py:668
-msgid "This value must be a decimal number."
-msgstr "Această valoare trebuie să fie un număr zecimal."
-
-#: .\db\models\fields\__init__.py:779
-msgid "Enter a valid filename."
-msgstr "Introduceți un nume de fișier valid."
-
-#: .\db\models\fields\__init__.py:960
-msgid "This value must be either None, True or False."
-msgstr "Această valoare trebuie să fie falsă, adevarată sau nici una."
-
-#: .\db\models\fields\related.py:93
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Introduceți vă rog un %s valid."
-
-#: .\db\models\fields\related.py:701
-msgid "Separate multiple IDs with commas."
-msgstr "Separă ID-urile multiple cu virgulă."
-
-#: .\db\models\fields\related.py:703
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr " Ţine apăsat \"Control\", sau \"Command\" pe un Mac, pentru selecție multiplă."
-
-#: .\db\models\fields\related.py:750
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Introduceți un ID valid pentru %(self)s. Valoarea %(value)r nu este validă."
-msgstr[1] "Introduceți ID-uri valide pentru %(self)s. Valorile %(value)r nu sunt valide."
-
-#: .\newforms\fields.py:47
-msgid "Enter a valid value."
-msgstr "Introduceți o valoare validă."
-
-#: .\newforms\fields.py:124
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Asigurați-vă că această valoare are cel mult %(max)d caractere (are %(length)d)."
-
-#: .\newforms\fields.py:125
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Asigurați-vă că această valoare are cel puțin %(min)d caractere (are %(length)d)."
-
-#: .\newforms\fields.py:153
-#: .\newforms\fields.py:182
-#: .\newforms\fields.py:211
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Asigurați-vă că această valoare este mai mică sau egală cu %s."
-
-#: .\newforms\fields.py:154
-#: .\newforms\fields.py:183
-#: .\newforms\fields.py:212
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Asigurați-vă că aceasta valoare este mai mare sau egală cu %s."
-
-#: .\newforms\fields.py:181
-#: .\newforms\fields.py:210
-msgid "Enter a number."
-msgstr "Introduceţi un număr."
-
-#: .\newforms\fields.py:213
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Asigurați-vă că nu exista mai mult de %s cifre în total."
-
-#: .\newforms\fields.py:214
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Asigurați-vă că nu exista mai mult de %s spații zecimale."
-
-#: .\newforms\fields.py:215
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Asigurați-vă că nu exista mai mult de %s cifre înainte de virgulă."
-
-#: .\newforms\fields.py:263
-#: .\newforms\fields.py:751
-msgid "Enter a valid date."
-msgstr "Introduceți o dată validă."
-
-#: .\newforms\fields.py:296
-#: .\newforms\fields.py:752
-msgid "Enter a valid time."
-msgstr "Introduceți o oră validă."
-
-#: .\newforms\fields.py:335
-msgid "Enter a valid date/time."
-msgstr "Introduceți o dată/oră validă."
-
-#: .\newforms\fields.py:434
-msgid "No file was submitted."
-msgstr "Nici un fișier nu a fost trimis."
-
-#: .\newforms\fields.py:435
-#: .\oldforms\__init__.py:689
-msgid "The submitted file is empty."
-msgstr "Fișierul uploadat este gol"
-
-#: .\newforms\fields.py:497
-msgid "Enter a valid URL."
-msgstr "Introduceți un URL valid."
-
-#: .\newforms\fields.py:498
-msgid "This URL appears to be a broken link."
-msgstr "URL-ul e invalid."
-
-#: .\newforms\fields.py:560
-#: .\newforms\models.py:299
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Selectați o opțiune validă. Această opțiune nu face parte din opțiunile disponibile."
-
-#: .\newforms\fields.py:599
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Selectați o opțiune validă. %(value)s nu face parte din opțiunile disponibile."
-
-#: .\newforms\fields.py:600
-#: .\newforms\fields.py:662
-#: .\newforms\models.py:371
-msgid "Enter a list of values."
-msgstr "Introduceți o listă de valori."
-
-#: .\newforms\fields.py:780
-msgid "Enter a valid IPv4 address."
-msgstr "Introduceţi o adresă IPv4 validă."
-
-#: .\newforms\models.py:372
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Selectați o opțiune validă. %s nu face parte din opțiunile disponibile."
-
-#: .\oldforms\__init__.py:409
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Asigurați-va că textul dumneavoastră are mai puțin de %s caracter."
-msgstr[1] "Asigurați-va că textul dumneavoastră are mai puțin de %s caractere."
-
-#: .\oldforms\__init__.py:414
-msgid "Line breaks are not allowed here."
-msgstr "Randurile noi nu sunt permise aici."
-
-#: .\oldforms\__init__.py:512
-#: .\oldforms\__init__.py:586
-#: .\oldforms\__init__.py:625
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Selectați o opțiune validă. '%(data)s' nu face parte din %(choices)s."
-
-#: .\oldforms\__init__.py:745
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Introduceţi un număr întreg cu valoare intre -32,768 și 32,767."
-
-#: .\oldforms\__init__.py:755
-msgid "Enter a positive number."
-msgstr "Introduceţi un număr pozitiv."
-
-#: .\oldforms\__init__.py:765
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Introduceţi un număr întreg cu valoare intre 0 și 32,767."
-
-#: .\template\defaultfilters.py:698
-msgid "yes,no,maybe"
-msgstr "da,nu,poate"
-
-#: .\template\defaultfilters.py:729
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: .\template\defaultfilters.py:731
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: .\template\defaultfilters.py:733
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: .\template\defaultfilters.py:734
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: .\utils\dateformat.py:41
-msgid "p.m."
-msgstr "p.m."
-
-#: .\utils\dateformat.py:42
-msgid "a.m."
-msgstr "a.m."
-
-#: .\utils\dateformat.py:47
-msgid "PM"
-msgstr "PM"
-
-#: .\utils\dateformat.py:48
-msgid "AM"
-msgstr "AM"
-
-#: .\utils\dateformat.py:97
-msgid "midnight"
-msgstr "miezul nopții"
-
-#: .\utils\dateformat.py:99
-msgid "noon"
-msgstr "amiază"
-
-#: .\utils\dates.py:6
-msgid "Monday"
-msgstr "Luni"
-
-#: .\utils\dates.py:6
-msgid "Tuesday"
-msgstr "Marţi"
-
-#: .\utils\dates.py:6
-msgid "Wednesday"
-msgstr "Miercuri"
-
-#: .\utils\dates.py:6
-msgid "Thursday"
-msgstr "Joi"
-
-#: .\utils\dates.py:6
-msgid "Friday"
-msgstr "Vineri"
-
-#: .\utils\dates.py:7
-msgid "Saturday"
-msgstr "Sâmbătă"
-
-#: .\utils\dates.py:7
-msgid "Sunday"
-msgstr "Duminică"
-
-#: .\utils\dates.py:10
-msgid "Mon"
-msgstr "Lun"
-
-#: .\utils\dates.py:10
-msgid "Tue"
-msgstr "Mar"
-
-#: .\utils\dates.py:10
-msgid "Wed"
-msgstr "Mie"
-
-#: .\utils\dates.py:10
-msgid "Thu"
-msgstr "Joi"
-
-#: .\utils\dates.py:10
-msgid "Fri"
-msgstr "Vin"
-
-#: .\utils\dates.py:11
-msgid "Sat"
-msgstr "Sâm"
-
-#: .\utils\dates.py:11
-msgid "Sun"
-msgstr "Dum"
-
-#: .\utils\dates.py:18
-msgid "January"
-msgstr "Ianuarie"
-
-#: .\utils\dates.py:18
-msgid "February"
-msgstr "Februarie"
-
-#: .\utils\dates.py:18
-#: .\utils\dates.py:31
-msgid "March"
-msgstr "Martie"
-
-#: .\utils\dates.py:18
-#: .\utils\dates.py:31
-msgid "April"
-msgstr "Aprilie"
-
-#: .\utils\dates.py:18
-#: .\utils\dates.py:31
-msgid "May"
-msgstr "Mai"
-
-#: .\utils\dates.py:18
-#: .\utils\dates.py:31
-msgid "June"
-msgstr "Iunie"
-
-#: .\utils\dates.py:19
-#: .\utils\dates.py:31
-msgid "July"
-msgstr "Iulie"
-
-#: .\utils\dates.py:19
-msgid "August"
-msgstr "August"
-
-#: .\utils\dates.py:19
-msgid "September"
-msgstr "Septembrie"
-
-#: .\utils\dates.py:19
-msgid "October"
-msgstr "Octombrie"
-
-#: .\utils\dates.py:19
-msgid "November"
-msgstr "Noiembrie"
-
-#: .\utils\dates.py:20
-msgid "December"
-msgstr "Decembrie"
-
-#: .\utils\dates.py:23
-msgid "jan"
-msgstr "ian"
-
-#: .\utils\dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: .\utils\dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: .\utils\dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: .\utils\dates.py:23
-msgid "may"
-msgstr "mai"
-
-#: .\utils\dates.py:23
-msgid "jun"
-msgstr "iun"
-
-#: .\utils\dates.py:24
-msgid "jul"
-msgstr "iul"
-
-#: .\utils\dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: .\utils\dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: .\utils\dates.py:24
-msgid "oct"
-msgstr "oct"
-
-#: .\utils\dates.py:24
-msgid "nov"
-msgstr "noi"
-
-#: .\utils\dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: .\utils\dates.py:31
-msgid "Jan."
-msgstr "Ian."
-
-#: .\utils\dates.py:31
-msgid "Feb."
-msgstr "Feb."
-
-#: .\utils\dates.py:32
-msgid "Aug."
-msgstr "Aug."
-
-#: .\utils\dates.py:32
-msgid "Sept."
-msgstr "Sept."
-
-#: .\utils\dates.py:32
-msgid "Oct."
-msgstr "Oct"
-
-#: .\utils\dates.py:32
-msgid "Nov."
-msgstr "Noi."
-
-#: .\utils\dates.py:32
-msgid "Dec."
-msgstr "Dec."
-
-#: .\utils\text.py:127
-msgid "or"
-msgstr "sau"
-
-#: .\utils\timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "an"
-msgstr[1] "ani"
-
-#: .\utils\timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "lună"
-msgstr[1] "luni"
-
-#: .\utils\timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "săptămână"
-msgstr[1] "săptămâni"
-
-#: .\utils\timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "zi"
-msgstr[1] "zile"
-
-#: .\utils\timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "oră"
-msgstr[1] "ore"
-
-#: .\utils\timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minut"
-msgstr[1] "minute"
-
-#: .\utils\timesince.py:46
-msgid "minutes"
-msgstr "minute"
-
-#: .\utils\timesince.py:51
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: .\utils\timesince.py:57
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: .\utils\translation\trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "j N Y"
-
-#: .\utils\translation\trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "j N Y, H:i:s"
-
-#: .\utils\translation\trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: .\utils\translation\trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: .\utils\translation\trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: .\views\generic\create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s a fost creat cu succes."
-
-#: .\views\generic\create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s a fost actualizat cu succes."
-
-#: .\views\generic\create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s a fost șters."
-
-#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-#~ msgstr "Ai <a href=\"/password_reset/\">uitat parola</a>?"
-#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
-#~ msgstr "Foloseste '[algo]$[salt]$[hexdigest]'"
-
-#, fuzzy
-#~ msgid "Comments"
-#~ msgstr "permite comentarii"
-#~ msgid "label"
-#~ msgstr "etichetă"
-#~ msgid "package"
-#~ msgstr "pachet"
-#~ msgid "packages"
-#~ msgstr "pachete"
-
-#, fuzzy
-#~ msgid "count"
-#~ msgstr "conţinut"
-
diff --git a/parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 0e594fa..0000000
--- a/parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 7c91fb2..0000000
--- a/parts/django/django/conf/locale/ro/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,116 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-06-28 17:36+1000\n"
-"PO-Revision-Date: 2008-04-25 21:57+0200\n"
-"Last-Translator: \n"
-"Language-Team: Romanian <ro@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, fuzzy, perl-format
-msgid "Available %s"
-msgstr "%s disponibil"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Alege toate"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Adauga"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Sterge"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s ales"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Selectati-va alegera(ile) si dati click "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Elibereaza toate"
-
-#: contrib/admin/media/js/dateparse.js:32
-#: contrib/admin/media/js/calendar.js:24
-msgid "January February March April May June July August September October November December"
-msgstr "Ianuarie Februare Martie Aprilie Mai Iunie Iulie August Septembrie Octombrie Noiembrie Decembrie"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Duminica Luni Marti Miercuri Joi Vinery Sambata"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M M J V S"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Acum"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Ceas"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Alege o ora"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Miezul noptii"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6 a.m."
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Amiaza"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Anuleaza"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "Astazi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Calendar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "Ieri"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "Maine"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Arata"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Ascunde"
-
diff --git a/parts/django/django/conf/locale/ro/__init__.py b/parts/django/django/conf/locale/ro/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ro/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ro/formats.py b/parts/django/django/conf/locale/ro/formats.py
deleted file mode 100644
index 6d6e800..0000000
--- a/parts/django/django/conf/locale/ro/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = 'j F Y, H:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y, H:i:s'
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/ru/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ru/LC_MESSAGES/django.mo
deleted file mode 100644
index 3341bab..0000000
--- a/parts/django/django/conf/locale/ru/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ru/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ru/LC_MESSAGES/django.po
deleted file mode 100644
index f69ae44..0000000
--- a/parts/django/django/conf/locale/ru/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5069 +0,0 @@
-# Translation of django.po to russian.
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-11 14:51+0400\n"
-"PO-Revision-Date: 2010-05-11 17:36+0300\n"
-"Last-Translator: alexey boriskin <sun.void@gmail.com>\n"
-"Language-Team: Russian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Poedit-Language: Russian\n"
-"X-Poedit-Country: RUSSIAN FEDERATION\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Арабский"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Болгарский"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Бенгальский"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Боснийский"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Каталанский"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Чешский"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Уэльский"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Датский"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Немецкий"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Греческий"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Английский"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Британский английский"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Испанский"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Аргентинский испанский"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Эстонский"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Баскский"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Персидский"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Финский"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Французский"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Фризский"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Ирландский"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Галисийский"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Иврит"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Хинди"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Хорватский"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Венгерский"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "Индонезийский"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "Исландский"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "Итальянский"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "Японский"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "Грузинский"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "Кхмерский"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "Каннада"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "Корейский"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "Литовский"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "Латвийский"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "Македонский"
-
-#: conf/global_settings.py:81
-msgid "Mongolian"
-msgstr "Монгольский"
-
-#: conf/global_settings.py:82
-msgid "Dutch"
-msgstr "Голландский"
-
-#: conf/global_settings.py:83
-msgid "Norwegian"
-msgstr "Норвежский"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Bokmal"
-msgstr "Норвежский (Букмол)"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Nynorsk"
-msgstr "Норвежский (Нюнорск)"
-
-#: conf/global_settings.py:86
-msgid "Polish"
-msgstr "Польский"
-
-#: conf/global_settings.py:87
-msgid "Portuguese"
-msgstr "Португальский"
-
-#: conf/global_settings.py:88
-msgid "Brazilian Portuguese"
-msgstr "Бразильский португальский"
-
-#: conf/global_settings.py:89
-msgid "Romanian"
-msgstr "Румынский"
-
-#: conf/global_settings.py:90
-msgid "Russian"
-msgstr "Русский"
-
-#: conf/global_settings.py:91
-msgid "Slovak"
-msgstr "Словацкий"
-
-#: conf/global_settings.py:92
-msgid "Slovenian"
-msgstr "Словенский"
-
-#: conf/global_settings.py:93
-msgid "Albanian"
-msgstr "Албанский"
-
-#: conf/global_settings.py:94
-msgid "Serbian"
-msgstr "Сербский"
-
-#: conf/global_settings.py:95
-msgid "Serbian Latin"
-msgstr "Сербский (латиница)"
-
-#: conf/global_settings.py:96
-msgid "Swedish"
-msgstr "Шведский"
-
-#: conf/global_settings.py:97
-msgid "Tamil"
-msgstr "Тамильский"
-
-#: conf/global_settings.py:98
-msgid "Telugu"
-msgstr "Телугу"
-
-#: conf/global_settings.py:99
-msgid "Thai"
-msgstr "Тайский"
-
-#: conf/global_settings.py:100
-msgid "Turkish"
-msgstr "Турецкий"
-
-#: conf/global_settings.py:101
-msgid "Ukrainian"
-msgstr "Украинский"
-
-#: conf/global_settings.py:102
-msgid "Vietnamese"
-msgstr "Вьетнамский"
-
-#: conf/global_settings.py:103
-msgid "Simplified Chinese"
-msgstr "Упрощенный китайский"
-
-#: conf/global_settings.py:104
-msgid "Traditional Chinese"
-msgstr "Традиционный китайский"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Успешно удалены %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55
-#: contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Вы уверены?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Удалить выбранные %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>По %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Все"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Любая дата"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Сегодня"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Последние 7 дней"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Этот месяц"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Этот год"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:469
-msgid "Yes"
-msgstr "Да"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:469
-msgid "No"
-msgstr "Нет"
-
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:469
-msgid "Unknown"
-msgstr "Неизвестно"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Действие:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "время действия"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "идентификатор объекта"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "представление объекта"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "тип действия"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "сообщение об изменении"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "запись в журнале"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "записи в журнале"
-
-#: contrib/admin/options.py:138
-#: contrib/admin/options.py:153
-msgid "None"
-msgstr "Нет"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Изменен %s."
-
-#: contrib/admin/options.py:559
-#: contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16
-#: db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "и"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Добавлен %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Изменены %(list)s для %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Удален %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Ни одно поле не изменено."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" был успешно добавлен."
-
-#: contrib/admin/options.py:647
-#: contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Ниже вы можете снова его отредактировать."
-
-#: contrib/admin/options.py:657
-#: contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Ниже вы можете добавить еще один %s."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" был успешно изменен."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" был успешно добавлен. Ниже вы можете снова его отредактировать."
-
-#: contrib/admin/options.py:740
-#: contrib/admin/options.py:997
-msgid "Items must be selected in order to perform actions on them. No items have been changed."
-msgstr "Чтобы произвести действия над объектами, необходимо их выбрать. Объекты не были изменены."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Действие не выбрано."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Добавить %s"
-
-#: contrib/admin/options.py:866
-#: contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s с первичным ключом %(key)r не существует."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Изменить %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Ошибка базы данных"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s был успешно изменен."
-msgstr[1] "%(count)s %(name)s были успешно изменены."
-msgstr[2] "%(count)s %(name)s были успешно изменены."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "Все объекты общим количеством %(total_count)s были выбраны"
-msgstr[1] "Выбраны все %(total_count)s объекта"
-msgstr[2] "Выбраны все %(total_count)s объектов"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "Выбрано 0 объектов из %(cnt)s "
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" был успешно удален."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "История изменений: %s"
-
-#: contrib/admin/sites.py:18
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Пожалуйста, введите верные имя пользователя и пароль. Помните, оба поля чувствительны к регистру."
-
-#: contrib/admin/sites.py:307
-#: contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Пожалуйста, войдите снова, поскольку ваша сессия устарела."
-
-#: contrib/admin/sites.py:314
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Похоже, ваш браузер не настроен на прием cookies. Пожалуйста, включите cookies, перезагрузите страницу и попытайтесь снова."
-
-#: contrib/admin/sites.py:330
-#: contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Имя пользователя не может содержать символ '@'."
-
-#: contrib/admin/sites.py:333
-#: contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Ваш адрес электронной почты не является вашим именем пользователя. Попробуйте '%s' взамен."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Администрирование сайта"
-
-#: contrib/admin/sites.py:403
-#: contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Войти"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s администрирование"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Дата:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Время:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Текущий файл:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Изменить:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Поиск"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Добавить еще"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Страница не найдена"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "К сожалению, запрашиваемая вами страница не найдена."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Начало"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Ошибка сервера"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Ошибка сервера (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Ошибка сервера <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Произошла ошибка. О ней сообщено администраторам сайта по электронной почте, ошибка должна быть вскоре исправлена. Благодарим вас за терпение."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Выполнить выбранное действие"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Выполнить"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Нажмите здесь, чтобы выбрать объекты на всех страницах"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Выбрать все %(module_name)s (%(total_count)s)"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Снять выделение"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Добро пожаловать,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Документация"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Изменить пароль"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Выйти"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Административный сайт Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Администрирование Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Добавить"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "История"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Смотреть на сайте"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Пожалуйста, исправьте ошибку ниже."
-msgstr[1] "Пожалуйста, исправьте ошибки ниже."
-msgstr[2] "Пожалуйста, исправьте ошибки ниже."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Добавить %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Фильтр"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:302
-msgid "Delete"
-msgstr "Удалить"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Удаление %(object_name)s '%(escaped_object)s' приведет к удалению связанных объектов, но ваша учетная запись не имеет прав для удаления следующих типов объектов:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "Вы уверены, что хотите удалить %(object_name)s \"%(escaped_object)s\"? Все следующие связанные объекты также будут удалены:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Да, я уверен"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Удалить несколько объектов"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid "Deleting the %(object_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Удаление %(object_name)s приведет к удалению связанных объектов, но ваша учетная запись не имеет прав для удаления следующих типов объектов:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid "Are you sure you want to delete the selected %(object_name)s objects? All of the following objects and their related items will be deleted:"
-msgstr "Вы уверены, что хотите удалить выбранные объекты типа \"%(object_name)s\"? Все следующие объекты (и все связанные с ними) также будут удалены:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " По %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Модели доступны в приложении %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Изменить"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "У вас недостаточно прав для редактирования."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Последние действия"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Мои действия"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Недоступно"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Неизвестный тип"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Ваша база данных неправильно настроена. Убедитесь, что соответствующие таблицы были созданы, и что соответствующему пользователю разрешен к ним доступ."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Имя:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Пароль:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Дата и время"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Пользователь"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Действие"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Данный объект не имеет истории изменений. Возможно, он был добавлен не через данный административный сайт."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Показать все"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Сохранить"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Найти"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s результат"
-msgstr[1] "%(counter)s результата"
-msgstr[2] "%(counter)s результатов"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s всего"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Сохранить как новый объект"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Сохранить и добавить другой объект"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Сохранить и продолжить редактирование"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Сначала введите имя пользователя и пароль. Затем вы сможете отредактировать больше информации о пользователе."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Введите новый пароль для пользователя <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:61
-#: contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Пароль"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Пароль (еще раз)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Введите тот же пароль, что и выше, для подтверждения."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Добавить еще один %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Удалить"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Удалить?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Благодарим вас за время, проведенное на этом сайте."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Войти снова"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Изменение пароля"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Пароль успешно изменен"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Ваш пароль был изменен."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "В целях безопасности, пожалуйста, введите свой старый пароль, затем введите новый пароль дважды, чтобы мы могли убедиться в правильности написания."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Старый пароль"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Новый пароль"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Изменить мой пароль"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Восстановление пароля"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Восстановление пароля завершено"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Ваш пароль был сохранен. Теперь вы можете войти."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Подтверждение восстановления пароля"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Введите новый пароль:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "Пожалуйста, введите новый пароль дважды, чтобы мы могли убедиться в правильности написания."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Новый пароль:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Подтвердите пароль:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Ошибка восстановления пароля"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr "Неверная ссылка для восстановления пароля. Возможно, ей уже воспользовались. Пожалуйста, попробуйте восстановить пароль еще раз."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Пароль успешно восстановлен"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Мы отправили инструкцию по восстановлению пароля на адрес электронной почты, который вы указали. Вы должны ее вскоре получить."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Вы получили это письмо, потому что было запрошено восстановление пароля"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "для вашей учетной записи на %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Пожалуйста, проследуйте на эту страницу и введите новый пароль:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Ваше имя пользователя (на случай, если вы его забыли):"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Спасибо, что используете наш сайт."
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Команда сайта %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "Забыли пароль? Введите свой адрес электронной почты ниже, и мы вышлем вам инструкцию, как установить новый пароль."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Адрес электронной почты:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Восстановить мой пароль"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Все даты"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Выберите %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Выберите %s для изменения"
-
-#: contrib/admin/views/template.py:38
-#: contrib/sites/models.py:38
-msgid "site"
-msgstr "сайт"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "шаблон"
-
-#: contrib/admindocs/views.py:61
-#: contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "метка:"
-
-#: contrib/admindocs/views.py:94
-#: contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "фильтр:"
-
-#: contrib/admindocs/views.py:158
-#: contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Приложение %r не найдено"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Модель %(model_name)r не найдена в приложении %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "зависимый `%(app_label)s.%(data_type)s` объект"
-
-#: contrib/admindocs/views.py:209
-#: contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233
-#: contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261
-#: contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "модель:"
-
-#: contrib/admindocs/views.py:224
-#: contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "зависимые `%(app_label)s.%(object_name)s` объекты"
-
-#: contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "все %s"
-
-#: contrib/admindocs/views.py:233
-#: contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "количество %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Поля для %s объектов"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s не похож на объект urlpattern"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Закладки"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Закладки документации"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Для установки закладок перетащите ссылку к себе на панель\n"
-"закладок или щелкните правой кнопкой мыши по ссылке и добавьте ее в\n"
-"закладки. Теперь у вас есть возможность выбрать закладку с любой страницы\n"
-"сайта. Обратите внимание: некоторые из этих закладок требуют, чтобы вы\n"
-"просматривали сайт с компьютера, определенного как \"внутренний\" (уточните\n"
-"у своего системного администратора, если не уверены, является ли ваш\n"
-"компьютер \"внутренним\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Документация для данной страницы"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Перенаправляет вас с любой страницы к документации для view, который генерирует эту страницу."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Показать идентификатор объекта"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Показывает content-type и уникальный ID для страниц, представляющих один объект."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Редактировать данный объект (в текущем окне)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Перейдет на административную страницу для страниц, представляющих один объект."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Редактировать данный объект (в новом окне)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "То же, что и выше, но откроет административную страницу в новом окне."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Персональная информация"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Права"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Важные даты"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Группы"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Пароль успешно изменен."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Изменение пароля: %s"
-
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:48
-#: contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Имя пользователя"
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Обязательное поле. Введите 30 символов или менее. Используйте только буквы, цифры и знаки из набора @/./+/-/_."
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Значение должно состоять только из букв, цифр и знаков @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Подтверждение пароля"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Пользователь с таким именем уже существует."
-
-#: contrib/auth/forms.py:37
-#: contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Два поля с паролями не совпадают."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Эта учетная запись отключена."
-
-#: contrib/auth/forms.py:88
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "У вашего браузера не включены cookies. Cookies необходимы для входа."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Адрес электронной почты"
-
-#: contrib/auth/forms.py:110
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Этот адрес электронной почты не связан ни с одной учетной записью. Вы уверены, что зарегистрированы?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Восстановление пароля на %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Подтверждение нового пароля"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Ваш старый пароль введен неправильно. Пожалуйста, введите его снова."
-
-#: contrib/auth/models.py:66
-#: contrib/auth/models.py:94
-msgid "name"
-msgstr "имя"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "кодовое название"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "право"
-
-#: contrib/auth/models.py:73
-#: contrib/auth/models.py:95
-msgid "permissions"
-msgstr "права"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "группа"
-
-#: contrib/auth/models.py:99
-#: contrib/auth/models.py:206
-msgid "groups"
-msgstr "группы"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "имя пользователя"
-
-#: contrib/auth/models.py:196
-msgid "Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Обязательное поле. Введите 30 символов или менее. Используйте только буквы, цифры и знаки из набора @/./+/-/_"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "имя"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "фамилия"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "адрес электронной почты"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "пароль"
-
-#: contrib/auth/models.py:200
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Используйте '[algo]$[salt]$[hexdigest]' или <a href=\"password/\">форму для изменения пароля</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "статус персонала"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Отметьте, если пользователь может входить в административную часть сайта."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "активный"
-
-#: contrib/auth/models.py:202
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "Отметьте, если пользователь должен считаться активным. Уберите эту отметку вместо удаления аккаунта."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "статус суперпользователя"
-
-#: contrib/auth/models.py:203
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Указывает, что пользователь имеет все права без явного их назначения."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "последний вход"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "дата регистрации"
-
-#: contrib/auth/models.py:207
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "В добавление к правам, присвоенным вручную, этот пользователь получит все права групп, к которым он принадлежит."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "права пользователя"
-
-#: contrib/auth/models.py:212
-#: contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "пользователь"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "пользователи"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "сообщение"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Не авторизован"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120
-#: forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Введите правильный адрес электронной почты."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Содержание"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Метаданные"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "отмечен"
-msgstr[1] "отмечены"
-msgstr[2] "отмечены"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Отметить выбранные комментарии"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "подтвержден"
-msgstr[1] "подтверждены"
-msgstr[2] "подтверждены"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Подтвердить выбранные комментарии"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "удален"
-msgstr[1] "удалены"
-msgstr[2] "удалены"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Удалить выбранные комментарии"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "%(count)s комментарий был успешно %(action)s"
-msgstr[1] "%(count)s комментария были успешно %(action)s"
-msgstr[2] "%(count)s комментариев были успешно %(action)s"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Комментарии %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Последние комментарии на %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Имя"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Адрес электронной почты"
-
-#: contrib/comments/forms.py:95
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-#: db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Комментарий"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Следите за своими словами! Слово %s здесь запрещено."
-msgstr[1] "Следите за своими словами! Слова %s здесь запрещены."
-msgstr[2] "Следите за своими словами! Слова %s здесь запрещены."
-
-#: contrib/comments/forms.py:182
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "Если что-нибудь введете в это поле, то ваш комментарий будет признан спамом"
-
-#: contrib/comments/models.py:22
-#: contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "тип содержимого"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "идентификатор объекта"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "имя пользователя"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "адрес электронной почты пользователя"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL пользователя"
-
-#: contrib/comments/models.py:56
-#: contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "комментарий"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "дата и время добавления"
-
-#: contrib/comments/models.py:60
-#: db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP-адрес"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "публичный"
-
-#: contrib/comments/models.py:62
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Снимите выделение, чтобы убрать комментарий с сайта."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "удален"
-
-#: contrib/comments/models.py:65
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Отметьте, если комментарий нежелателен. Взамен будет показано сообщение \"Этот комментарий был удален\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "Комментарии"
-
-#: contrib/comments/models.py:119
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr "Комментарий был добавлен зарегистрированным пользователем, поэтому имя пользователя доступно только для чтения."
-
-#: contrib/comments/models.py:128
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr "Комментарий был добавлен зарегистрированным пользователем, поэтому адрес электронной почты доступен только для чтения."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Добавил %(user)s %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "отметка"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "дата"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "отметка комментария"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "отметки комментариев"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Подтвердить комментарий"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Вы уверены, что хотите опубликовать этот комментарий?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Подтвердить"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Спасибо за подтверждение"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid "Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Спасибо, что заботитесь о качестве общения на нашем сайте"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Удалить комментарий"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Вы уверены, что хотите удалить этот комментарий?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Спасибо за удаление"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Отметить этот комментарий"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Вы уверены, что хотите отметить этот комментарий?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Отметить"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Спасибо"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Опубликовать"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Предпросмотр"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Спасибо за комментарий"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Спасибо за ваш комментарий"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Предпросмотр вашего комментария"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Пожалуйста, исправьте ошибку ниже."
-msgstr[1] "Пожалуйста, исправьте ошибки ниже."
-msgstr[2] "Пожалуйста, исправьте ошибки ниже."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Опубликуйте ваш комментарий"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "или внесите изменения"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "имя класса модели"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "типы содержимого"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Пример: '/about/contact/'. Убедитесь, что ввели начальную и конечную косые черты."
-
-#: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Значение должно состоять только из букв, цифр, знаков подчеркивания, дефиса или наклонной черты вправо."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Расширенные настройки"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "заголовок"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "содержимое"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "включить комментарии"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "имя шаблона"
-
-#: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Пример: 'flatpages/contact_page.html'. Если не указано, система будет использовать 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "требуется регистрация"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Если отмечено, только вошедшие пользователи смогут видеть страницу."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "простая страница"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "простые страницы"
-
-#: contrib/formtools/wizard.py:140
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr "Мы сожалеем, но ваша форма устарела. Пожалуйста, продолжите заполнять форму на этой странице."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Базовое ГИС-поле. Его потомки отражают конкретные геометрические типы по спецификации OpenGIS."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Точка"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Ломаная"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Многоугольник"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Набор точек"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Набор ломаных"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Набор многоугольников"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Набор геометрических объектов"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Не указано значение геометрии."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Неверное значение геометрии."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Неверный тип геометрии."
-
-#: contrib/gis/forms/fields.py:20
-msgid "An error occurred when transforming the geometry to the SRID of the geometry form field."
-msgstr "Произошла ошибка во время преобразования геометрии в SRID."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f миллион"
-msgstr[1] "%(value).1f миллиона"
-msgstr[2] "%(value).1f миллионов"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f миллиард"
-msgstr[1] "%(value).1f миллиарда"
-msgstr[2] "%(value).1f миллиардов"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f триллион"
-msgstr[1] "%(value).1f триллиона"
-msgstr[2] "%(value).1f триллионов"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "один"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "два"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "три"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "четыре"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "пять"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "шесть"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "семь"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "восемь"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "девять"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "сегодня"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "завтра"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "вчера"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Введите почтовый индекс в формате NNNN или ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50
-#: contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131
-#: contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Это поле принимает только числа."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Это поле требует 7 или 8 цифр."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Введите правильный CUIT в формате XX-XXXXXXXX-X или XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Неверный CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Бургенланд"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Каринтия"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Нижняя Австрия"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Верхняя Австрия"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Зальцбург"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Штирия"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Тироль"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Ворарлберг"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Вена"
-
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Введите правильный индекс в формате XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Введите правильный номер социального страхования Австрии в формате XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Введите почтовый индекс из 4 цифр."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Введите почтовый индекс в формате XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Телефонные номера должны быть в формате XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Выберите корректный бразильский штат. Указанного варианта нет среди допустимых значений."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Неправильный CPF номер."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Это поле требует 11 цифр или 14 символов."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Неправильный CNPJ номер."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Это поле требует как минимум 14 цифр"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Введите почтовый индекс в формате XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Введите правильный номер социального страхования Канады в формате XXX-XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Ааргау"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Аппенцелль-Иннерроден"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Аппенцелль-Ауссерроден"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Базель-Штадт"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Базель-Ланд"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Берн"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Фрибур"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Женева"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Гларус"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Граубюнден"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Джура"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Люцерн"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Нёвшатель"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Нидвальден"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Обвальден"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Шаффхаузен"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Швиц"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Золотурн"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "Санкт-Галлен"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Тургау"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Тичино"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Ури"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Вале"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Во"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Цуг"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Цюрих"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "Введите правильный номер швейцарского паспорта личности или номер карты в формате X1234567<0 или 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Введите правильный RUT Чили."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Введите правильный RUT Чили. Формат: XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Чилийский RUT недействителен."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Прага"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Среднечешский край"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Южночешский край"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Пльзенский край"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Карловарский край"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Устецкий край"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Либерецкий край"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Краловеградецкий край"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Пардубицкий край"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Край Высочина"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Южноморавский край"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Оломоуцкий край"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Злинский край"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Моравскосилезский край"
-
-#: contrib/localflavor/cz/forms.py:28
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Введите почтовый индекс в формате XXXXX или XXX-XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Введите номер свидетельства о рождении в формате XXXXXX/XXXX или XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Неверный аргумент для пола, допустимые значения: 'f' и 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Введите правильный номер свидетельства о рождении."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Введите правильный IC номер."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Баден-Вюртемберг"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Бавария"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Берлин"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Бранденбург"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Бремен"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Гамбург"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Гессен"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Мекленбург-Западная Померания"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Нижняя Саксония"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Северный Рейн-Вестфалия"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Рейнланд-Пфальц"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Саар"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Саксония"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Саксония-Анхальт"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Шлезвиг-Гольштейн"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Тюрингия"
-
-#: contrib/localflavor/de/forms.py:15
-#: contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Введите почтовый индекс в формате XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Введите правильный номер паспорта личности в формате XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Арава"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Альбасете"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Аликанте"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Альмерия"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Авила"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Бадахос"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Балеарские острова"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Барселона"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Бургос"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Касерес"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Кадис"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Кастельо"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Сьюдад-Реаль"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Кордоба"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "Ла-Корунья"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Куэнка"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Херона"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Гранада"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Гвадалахара"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Гипускоа"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Уэльва"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Уэска"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Хаэн"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Леон"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Лерида"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "Риоха"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Луго"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Мадрид"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Малага"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Мурсия"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Наварра"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Оренсе"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Астурия"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Паленсия"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Лас-Пальмас"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Понтеведра"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Саламанка"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Санта-Крус-де-Тенерифе"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Кантабрия"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Сеговия"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Севилья"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Сория"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Таррагона"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Теруэль"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Толедо"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Валенсия"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Вальядолид"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Бискайя"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Замора"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Сарагоса"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Сеута"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Мелилья"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Андалусия"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Арагон"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Астурийское княжество"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Балеарские острова"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Страна Басков"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Канарские острова"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Кастилия-Ла-Манча"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Кастилия и Леон"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Каталония"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Эстремадура"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Галисия"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Мурсия"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Наварра"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Валенсия"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Введите почтовый индекс в диапазоне и формате 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "Введите правильный телефонный номер в одном из форматов 6XXXXXXXX, 8XXXXXXXX или 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Пожалуйста, введите правильный NIF, NIE или CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Пожалуйста, введите правильный NIF или NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Неверная проверочная сумма для NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Неверная проверочная сумма для NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Неверная проверочная сумма для CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Пожалуйста, введите правильный банковский номер в формате XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Неверная проверочная сумма для банковского номера."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Введите правильный номер социального страхования Финляндии."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Телефонные номера должны быть в формате 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Введите правильный почтовый индекс"
-
-#: contrib/localflavor/id/forms.py:68
-#: contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Введите правильный телефонный номер"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Введите правильный регистрационный номер автомобиля"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Введите правильный NIK/KTP номер"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Бали"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Бантен"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Бенгкулу"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Джокьякарта"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Джакарта"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Горонтало"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Джамби"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Западная Ява"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Центральная Ява"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Восточная Ява"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Западный Калимантан"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Южный Калимантан"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Центральный Калимантан"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Восточный Калимантан"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Острова Бангка-Белитунг"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Острова Риау"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Лампунг"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Молукку"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Северное Молукку"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Ачех"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Западные Малые Зондские острова"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Восточные Малые Зондские острова"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Папуа"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Западное Папуа"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Риау"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Западное Сулавеси"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Южное Сулавеси"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Центральное Сулавеси"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Юго-Восточное Сулавеси"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Северное Сулавеси"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Западная Суматра"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Южная Суматра"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Северная Суматра"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Магеланг"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Суракарта - Соло"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Мадиун"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Кедири"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Тапанули"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Бангка-Белитунг"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Консульский корпус"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Дипломатический корпус"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Бандунг"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Северное Сулавеси"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Тимор"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Северное Сулавеси"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Ломбок"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Папуа и Западное Папуа"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Чиребон"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Сумбава"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Флорес"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Сумба"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Богор"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Пекалонган"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Семаранг"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Пати"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Сурабая"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Мадура"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Маланг"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Джембер"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Банджумас"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Федеральное правительство"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Боджонегоро"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Пурвакарта"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Сидоарджо"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Гарут"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Антрим"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Арма"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Карлоу"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Каван"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Клэр"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Корк"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Дерри"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Донегол"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Даун"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Дублин"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Фермана"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Голуэй"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Керри"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Килдэр"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Килкенни"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Лиишь"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Литрим"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Лимерик"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Лонгфорд"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Лаут"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Мейо"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Мит"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Монахан"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Оффали"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Роскоммон"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Слайго"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Типперэри"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Тирон"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Уотерфорд"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Уэстмит"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Уэксфорд"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Уиклоу"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Введите почтовый индекс в формате XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Введите правильный исландский идентификационный номер. Формат: XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Неправильный исландский идентификационный номер."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Введите правильный почтовый индекс."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Введите правильный номер социального страхования."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Введите правильный VAT номер."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Введите почтовый индекс в формате XXXXXXX или XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Хоккайдо"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Аомори"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Иватэ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Мияги"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Акита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Ямагата"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Фукушима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ибакари"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Тотиги"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Гунма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Сайтама"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Тиба"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Токио"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Канагава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Яманаси"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Нагано"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Ниигата"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Тояма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Исикава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Фукуи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Гифу"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Сидзуока"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Айчи"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Миэ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Сига"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Киото"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Осака"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Хёго"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Нара"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Вакаяма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Тоттори"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Симанэ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Окаяма"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Хиросима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Ямагути"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Токусима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Кагава"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Эхимэ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Коти"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Фукуока"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Сага"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Нагасаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Кумамото"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Оита"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Миядзаки"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Кагосима"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Окинава"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Введите правильный номер кувейтского удостоверения личности"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Агуаскальентес"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Нижняя Калифорния"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Южная Нижняя Калифорни"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Кампече"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Чиуауа"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Чьяпас"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Коауила"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Колима"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Федеральный округ"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Дуранго"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Герреро"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Гуанахуато"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Идальго"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Халиско"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Мехико"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Мичоакан"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Морелос"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Наярит"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Нуэво-Леон"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Оахака"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Пуэбла"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Керетаро"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Кинтана-Роо"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Синалоа"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "Сан-Луис-Потоси"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Сонора"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Табаско"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Тамаулипас"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Тласкала"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Веракрус"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Юкатан"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Сакатекас"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Введите правильный почтовый индекс"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Введите правильный SoFi номер"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Дренте"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Флеволанд"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Фрисланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Гелдерланд"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Гронинген"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Лимбург"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Северный Брабант"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Северная Голландия"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Оверэйсел"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Утрехт"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Зеландия"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Южная Голландия"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Введите правильный номер социального страхования Норвегии."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Это поле требует 8 цифр."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Это поле требует 11 цифр."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Национальный идентификационный номер состоит из 11 цифр."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Неверная проверочная сумма для NIF."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Введите налоговый номер (NIP) в формате XXX-XXX-XX-XX или XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Неверная проверочная сумма для NIP."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Национальный деловой регистрационный номер (REGON) состоит из 9 или 14 цифр."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Неверная проверочная сумма для национального делового регистрационного номера (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Введите почтовый индекс в формате XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Нижнесилезское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Куявско-Поморское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Люблинское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Любушское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Лодзинское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Малопольское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Мазовецкое"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Опольское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Подкарпатское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Подляское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Поморское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Силезское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Свентокшиское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Варминско-Мазурское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Великопольское"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Западнопоморское"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Введите почтовый индекс в формате XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Телефонные номера должны состоять из 9 цифр или начинаться с + или 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Введите правильный CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Введите правильный CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Введите правильный IBAN в формате ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Телефонные номера должны быть в формате XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Введите почтовый индекс в формате XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Введите правильный шведский идентификационный номер организации."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Введите правильный шведский персональный идентификационный номер."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Координационные номера запрещены"
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Введите шведский почтовый индекс в формате XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Стокгольм"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Вестерботтен"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Норрботтен"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Уппсала"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Сёдерманланд"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Эстергётланд"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Йёнчёпинг"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Крунуберг"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Кальмар"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Готланд"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Блекинге"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Сконе"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Халланд"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Вестра-Гёталанд"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Вермланд"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Эребру"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Вестманланд"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Даларна"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Евлеборг"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Вестерноррланд"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Емтланд"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Банска Бистрица"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Банска Штьявница"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Бардейов"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Бановце-над-Бебравоу"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Брезно"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Братислава I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Братислава II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Братислава III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Братислава IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Братислава V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Битча"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Чадца"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Детва"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Долны Кубин"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Дунайска Стреда"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Галанта"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Гелница"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Глоговец"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Гуменне"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Илава"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Кежмарок"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Комарно"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Кошице I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Кошице II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Кошице III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Кошице IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Кошице-периферия"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Крупина"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Кисуцке Нове Место"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Левице"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Левоча"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Липтовски Микулаш"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Лученец"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Малацки"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Мартин"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Медзилаборце"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Михаловце"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Миява"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Наместово"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Нитра"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Новое Место-над-Вагом"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Нове Замки"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Партизанске"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Пезинок"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Пьештяны"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Полтар"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Попрад"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Поважска Бистрица"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Прешов"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Прьевидза"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Пухов"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Ревуца"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Римавска Собота"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Рожнява"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ружомберок"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Сабинов"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Сенец"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Сеница"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Скалица"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Снина"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Собранце"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Спишска Нова Вес"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Стара Любовня"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Стропков"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Свидник"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Сала"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Топольчаны"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Требишов"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Тренчин"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Трнава"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Турчьянске Теплице"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Тврдошин"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Вельки Кртиш"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Вранов-над-Топлёу"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Злате Моравце"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Зволен"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Жарновица"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Жьяр-над-Гроном"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Жилина"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Банскобистрицкий край"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Братиславский край"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Кошицкий край"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Нитранский край"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Прешовский край"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Тренчинский край"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Трнавский край"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Жилинский край"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Введите правильный почтовый индекс."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Бедфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Бакингемшир"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Чешир"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Корнуолл и острова Силли"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Камбрия"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Дербишир"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Девон"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Дорсет"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Дарем"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Восточный Сассекс"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Эссекс"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Глостершир"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Большой Лондон"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Большой Манчестер"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Хэмпшир"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Хартфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Кент"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Ланкашир"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Лестершир"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Линкольншир"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Мерсисайд"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Норфолк"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "Северный Йоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Нортгемптоншир"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Нортумберленд"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Ноттингемшир"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Оксфордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Шропшир"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Сомерсет"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Южный Йоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Стаффордшир"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Саффолк"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Сюррей"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Тайн и Уир"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Уорикшир"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "Уэст-Мидлендс"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "Западный Сассекс"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "Западный Йоркшир"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Уилтшир"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Вустершир"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "Графство Антрим"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "Графство Арма"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "Графство Даун"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Графство Фермана"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Графство Лондондерри"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Графство Тирон"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Клуид"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Дивед"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Гуент"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Гуинет"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Мид-Гламорган"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Поуис"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Южный Гламорган"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Западный Гламорган"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Бордерс"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Центральная Шотландия"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Дамфрис и Галлоуэй"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Файф"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Грампиан"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Хайленд"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Лотиан"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Оркнейские острова"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Шетлендские острова"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Стратклайд"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Тэйсайд"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Западные острова"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Англия"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Северная Ирландия"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Шотландия"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Уэльс"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Введите почтовый индекс в формате XXXXX или XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Телефонные номера должны быть в формате XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Введите правильный номер социального страхования США в формате XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Введите штат или территорию США"
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Штат США (две заглавные буквы)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Номер телефона"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Введите правильный CI-номер в формате X.XXX.XXX-X,XXXXXXX-X или XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Введите правильный CI-номер."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Введите правильный идентификационный номер Южной Африки."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Введите правильный почтовый индекс Южной Африки"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Восточная Капская провинция"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Свободный штат"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Гаутенг"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "Квазулу-Натал"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Лимпопо"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Мпумаланга"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Северная Капская провинция"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Северо-запад"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Западная Капская провинция"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "сообщение с отложенным переводом"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "перенаправить с"
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Это должен быть абсолютный путь без доменного имени. Пример: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "перенаправить на"
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Это должен быть либо абсолютный путь (как выше), либо полный URL, начинающийся с 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "перенаправление"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "перенаправления"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "ключ сессии"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "данные сессии"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "дата окончания"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "сессия"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "сессии"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "доменное имя"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "выводимое имя"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "сайты"
-
-#: core/validators.py:20
-#: forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Введите правильное значение."
-
-#: core/validators.py:87
-#: forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Введите правильный URL."
-
-#: core/validators.py:89
-#: forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Эта ссылка не работает."
-
-#: core/validators.py:123
-#: forms/fields.py:873
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Значение должно состоять только из букв, цифр, знаков подчеркивания или дефиса."
-
-#: core/validators.py:126
-#: forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Введите правильный IPv4 адрес."
-
-#: core/validators.py:129
-#: db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Введите цифры, разделенные запятыми."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Убедитесь, что это значение — %(limit_value)s (сейчас оно — %(show_value)s)."
-
-#: core/validators.py:153
-#: forms/fields.py:205
-#: forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Убедитесь, что это значение меньше либо равно %(limit_value)s."
-
-#: core/validators.py:158
-#: forms/fields.py:206
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Убедитесь, что это значение больше либо равно %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)."
-msgstr "Убедитесь, что это значение содержит не менее %(limit_value)d символов (сейчас %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)."
-msgstr "Убедитесь, что это значение содержит не более %(limit_value)d символов (сейчас %(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "Значение в поле %(field_name)s должно быть уникальным для %(lookup)s в поле %(date_field)s."
-
-#: db/models/base.py:837
-#: db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s с таким %(field_label)s уже существует."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Значения %r нет среди допустимых вариантов."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Это поле не может иметь значение NULL."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Это поле не может быть пустым."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Поле типа %(field_type)s"
-
-#: db/models/fields/__init__.py:451
-#: db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961
-#: db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Целое"
-
-#: db/models/fields/__init__.py:455
-#: db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Это значение должно быть целым числом."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Значение должно быть либо True, либо False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Логическое (True или False)"
-
-#: db/models/fields/__init__.py:539
-#: db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Строка (до %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Целые, разделенные запятыми"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Дата (без указания времени)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Введите правильную дату в формате YYYY-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Неправильная дата: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Введите правильные дату и время в формате YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Дата (с указанием времени)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Это значение должно быть целым числом."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Число с фиксированной запятой"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Адрес электронной почты"
-
-#: db/models/fields/__init__.py:799
-#: db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Путь к файлу"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Это значение должно быть числом с плавающей запятой."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Число с плавающей запятой"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Длинное целое (8 байт)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Значение должно быть None, True или False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Логическое (True, False или None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Текст"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Время"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Введите правильное время в формате HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML текст"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Объект модели %(model)s с первичным ключом %(pk)r не существует."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Внешний ключ (тип определен по связанному полю)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Связь \"один к одному\""
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Связь \"многие ко многим\""
-
-#: db/models/fields/related.py:1000
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Удерживайте \"Control\" (или \"Command\" на Mac) для выбора нескольких значений."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Пожалуйста, введите корректный идентификатор для %(self)s. Значение %(value)r неверно."
-msgstr[1] "Пожалуйста, введите корректные идентификаторы для %(self)s. Значения %(value)r неверны."
-msgstr[2] "Пожалуйста, введите корректные идентификаторы для %(self)s. Значения %(value)r неверны."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Обязательное поле."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Введите целое число."
-
-#: forms/fields.py:235
-#: forms/fields.py:256
-msgid "Enter a number."
-msgstr "Введите число."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Убедитесь, что ввели не больше %s цифр."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Убедитесь, что ввели не больше %s цифр после запятой."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Убедитесь, что ввели не больше %s цифр до запятой."
-
-#: forms/fields.py:323
-#: forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Введите правильную дату."
-
-#: forms/fields.py:351
-#: forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Введите правильное время."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Введите правильную дату и время."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Ни одного файла не было отправлено. Проверьте тип кодировки формы."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Ни одного файла не было отправлено."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Отправленный файл пуст."
-
-#: forms/fields.py:438
-#, python-format
-msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Убедитесь, что это имя файла содержит не более %(max)d символов (сейчас %(length)d)."
-
-#: forms/fields.py:473
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Загрузите правильное изображение. Файл, который вы загрузили, поврежден или не является изображением."
-
-#: forms/fields.py:596
-#: forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Выберите корректный вариант. %(value)s нет среди допустимых значений."
-
-#: forms/fields.py:672
-#: forms/fields.py:734
-#: forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Введите список значений."
-
-#: forms/formsets.py:298
-#: forms/formsets.py:300
-msgid "Order"
-msgstr "Порядок"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Пожалуйста, измените повторяющееся значение в поле %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Пожалуйста, измените значение в поле %(field)s, оно должно быть уникальным."
-
-#: forms/models.py:572
-#, python-format
-msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
-msgstr "Пожалуйста, измените значение в поле %(field_name)s, оно должно быть уникальным для %(lookup)s в поле %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Пожалуйста, измените повторяющиеся значения ниже."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Внешний ключ не совпадает с первичным ключом родителя."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Выберите корректный вариант. Вашего варианта нет среди допустимых значений."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Выберите корректный вариант. %s нет среди допустимых значений."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" не является верным значением для первичного ключа."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "да,нет,может быть"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d байт"
-msgstr[1] "%(size)d байта"
-msgstr[2] "%(size)d байт"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f КБ"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f МБ"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f ГБ"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "п.п."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "д.п."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "ПП"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "ДП"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "полночь"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "полдень"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Понедельник"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Вторник"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Среда"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Четверг"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Пятница"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Суббота"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Воскресенье"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Пнд"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Втр"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Срд"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Чтв"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Птн"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Сбт"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Вск"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Январь"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Февраль"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "Март"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "Апрель"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "Май"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "Июнь"
-
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "Июль"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Август"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Сентябрь"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Октябрь"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Ноябрь"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Декабрь"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "янв"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "фев"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "мар"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "апр"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "май"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "июн"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "июл"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "авг"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "сен"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "окт"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "ноя"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "дек"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Янв."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Фев."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Авг."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Сен."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Окт."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Нояб."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Дек."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "или"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "год"
-msgstr[1] "года"
-msgstr[2] "лет"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "месяц"
-msgstr[1] "месяца"
-msgstr[2] "месяцев"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "неделя"
-msgstr[1] "недели"
-msgstr[2] "недель"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "день"
-msgstr[1] "дня"
-msgstr[2] "дней"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "час"
-msgstr[1] "часа"
-msgstr[2] "часов"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "минута"
-msgstr[1] "минуты"
-msgstr[2] "минут"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "минут"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "d.m.Y"
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "d.m.Y H:i"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s был успешно создан."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s был успешно изменен."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s был успешно удален."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Один или более %(fieldname)s в %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Один или более %(fieldname)s в %(name)s:"
-
-#~ msgid ""
-#~ "<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
-#~ msgstr ""
-#~ "Выбрано <span class=\"_acnt\">0</span> из %(total_count)s %(module_name)s"
-
-#~ msgid "Old password:"
-#~ msgstr "Старый пароль:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Связь с родительской моделью"
-
-#~ msgid "Add user"
-#~ msgstr "Добавить пользователя"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Очередь модерации комментариев"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "Нет комментариев для модерации"
-
-#~ msgid "Email"
-#~ msgstr "Адрес электронной почты"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Зарегистрирован?"
-
-#~ msgid "IP Address"
-#~ msgstr "IP-адрес"
-
-#~ msgid "Date posted"
-#~ msgstr "Дата публикации"
-
-#~ msgid "yes"
-#~ msgstr "да"
-
-#~ msgid "no"
-#~ msgstr "нет"
diff --git a/parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 21a52a7..0000000
--- a/parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 20e4955..0000000
--- a/parts/django/django/conf/locale/ru/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,144 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-11 14:57+0400\n"
-"PO-Revision-Date: 2010-05-11 16:27+0300\n"
-"Last-Translator: alexey boriskin <sun.void@gmail.com>\n"
-"Language-Team: Dialcom Service <greg@dial.com.ru>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Poedit-Language: Russian\n"
-"X-Poedit-Country: RUSSIAN FEDERATION\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Доступные %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Выбрать все"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Добавить"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Удалить"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Выбранные %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Выберите и нажмите "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Очистить всё"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "Выбран %(sel)s объект из %(cnt)s"
-msgstr[1] "Выбрано %(sel)s объекта из %(cnt)s"
-msgstr[2] "Выбрано %(sel)s объектов из %(cnt)s"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."
-msgstr "Имеются несохраненные изменения в отдельных полях для редактирования. Если вы запустите действие, несохраненные изменения будут потеряны."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action."
-msgstr "Вы выбрали действие, но еще не сохранили изменения, внесенные в некоторых полях для редактирования. Нажмите OK, чтобы сохранить изменения. После сохранения вам придется запустить действие еще раз."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."
-msgstr "Вы выбрали действие и не внесли изменений в данные. Возможно, вы хотели воспользоваться кнопкой \"Выполнить\", а не кнопкой \"Сохранить\". Если это так, то нажмите \"Отмена\", чтобы вернуться в интерфейс редактирования. "
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid "January February March April May June July August September October November December"
-msgstr "Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "В П В С Ч П С"
-
-#: contrib/admin/media/js/collapse.js:9
-#: contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Показать"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Скрыть"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Сейчас"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Часы"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Выберите время"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Полночь"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6 часов"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Полдень"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Отмена"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Сегодня"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Календарь"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Вчера"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Завтра"
-
diff --git a/parts/django/django/conf/locale/ru/__init__.py b/parts/django/django/conf/locale/ru/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ru/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ru/formats.py b/parts/django/django/conf/locale/ru/formats.py
deleted file mode 100644
index 6a32e5c..0000000
--- a/parts/django/django/conf/locale/ru/formats.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y г.'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = 'j F Y г. G:i:s'
-YEAR_MONTH_FORMAT = 'F Y г.'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y', # '25.10.2006'
- '%d.%m.%y', # '25.10.06'
- '%Y-%m-%d', # '2006-10-25'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%d.%m.%Y', # '25.10.2006'
- '%d.%m.%y %H:%M:%S', # '25.10.06 14:30:59'
- '%d.%m.%y %H:%M', # '25.10.06 14:30'
- '%d.%m.%y', # '25.10.06'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/sk/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/sk/LC_MESSAGES/django.mo
deleted file mode 100644
index 86149fd..0000000
--- a/parts/django/django/conf/locale/sk/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sk/LC_MESSAGES/django.po b/parts/django/django/conf/locale/sk/LC_MESSAGES/django.po
deleted file mode 100644
index f6e1457..0000000
--- a/parts/django/django/conf/locale/sk/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5183 +0,0 @@
-# Slovak translation of Django
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 12:15+0100\n"
-"PO-Revision-Date: 2010-05-08 16:32+0200\n"
-"Last-Translator: Martin Kosír <martin@martinkosir.net>\n"
-"Language-Team: Slovak <>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>1 && n<5 ? 1 : 2;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "arabský"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "bulharský"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengálsky"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosniansky"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "katalánsky"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "český"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "waleský"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "dánsky"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "nemecký"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "grécky"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "anglický"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "britský"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "španielsky"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "argentínska španielčina"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "estónsky"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "baskický"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "perzský"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "fínsky"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "francúzsky"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "frízsky"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "írsky"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "galícijský"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "hebrejský"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "hindský"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "chorvátsky"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "maďarský"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "islandský"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "taliansky"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "japonský"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "gruzínsky"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "kmérsky"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "kanadský"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "kórejský"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "litovský"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "lotyšský"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "macedónsky"
-
-#: conf/global_settings.py:80
-msgid "Mongolian"
-msgstr "mongolský"
-
-#: conf/global_settings.py:81
-msgid "Dutch"
-msgstr "holandský"
-
-#: conf/global_settings.py:82
-msgid "Norwegian"
-msgstr "nórsky"
-
-#: conf/global_settings.py:83
-msgid "Norwegian Bokmal"
-msgstr "nórsky (Bokmal)"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Nynorsk"
-msgstr "nórsky (Nynorsk)"
-
-#: conf/global_settings.py:85
-msgid "Polish"
-msgstr "poľský"
-
-#: conf/global_settings.py:86
-msgid "Portuguese"
-msgstr "portugalský"
-
-#: conf/global_settings.py:87
-msgid "Brazilian Portuguese"
-msgstr "portugalský (Brazília)"
-
-#: conf/global_settings.py:88
-msgid "Romanian"
-msgstr "rumunský"
-
-#: conf/global_settings.py:89
-msgid "Russian"
-msgstr "ruský"
-
-#: conf/global_settings.py:90
-msgid "Slovak"
-msgstr "slovenský"
-
-#: conf/global_settings.py:91
-msgid "Slovenian"
-msgstr "slovinský"
-
-#: conf/global_settings.py:92
-msgid "Albanian"
-msgstr "albánsky"
-
-#: conf/global_settings.py:93
-msgid "Serbian"
-msgstr "srbský"
-
-#: conf/global_settings.py:94
-msgid "Serbian Latin"
-msgstr "srbský (Latin)"
-
-#: conf/global_settings.py:95
-msgid "Swedish"
-msgstr "švédsky"
-
-#: conf/global_settings.py:96
-msgid "Tamil"
-msgstr "tamilský"
-
-#: conf/global_settings.py:97
-msgid "Telugu"
-msgstr "telúgsky"
-
-#: conf/global_settings.py:98
-msgid "Thai"
-msgstr "thajský"
-
-#: conf/global_settings.py:99
-msgid "Turkish"
-msgstr "turecký"
-
-#: conf/global_settings.py:100
-msgid "Ukrainian"
-msgstr "ukrajinský"
-
-#: conf/global_settings.py:101
-msgid "Vietnamese"
-msgstr "vietnamský"
-
-#: conf/global_settings.py:102
-msgid "Simplified Chinese"
-msgstr "čínsky (zjednodušene)"
-
-#: conf/global_settings.py:103
-msgid "Traditional Chinese"
-msgstr "čínsky (tradične)"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Úspešne zmazaných %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Ste si istý?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Zmazať označené %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Od %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Všetko"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Ľubovoľný dátum"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Dnes"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Posledných 7 dní"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Tento mesiac"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Tento rok"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Áno"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Nie"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Neznámy"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Akcia:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "čas akcie"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "identifikátor objektu"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "reprezentácia objektu"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "príznak akcie"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "zmeniť správu"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "položka záznamu"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "položky záznamu"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Žiadne"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Zmenené %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "a"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Pridaný %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Zmenený %(list)s pre %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Zmazaný %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Polia nezmenené."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne pridaný."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Nižšie môžete znova robiť úpravy."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Nižšie môžete pridať ďalšie %s."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne zmenený."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Objekt %(name)s \"%(obj)s\" bol úspešne pridaný. Ďalšie zmeny môžete urobiť "
-"nižšie."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Položky musia byť vybrané, ak chcete na nich vykonať akcie. Neboli vybrané "
-"žiadne položky."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Nebola vybraná žiadna akcia."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Pridať %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Objekt %(name)s s primárnym kľúčom %(key)r neexistuje."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Zmeniť %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Chyba databázy"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s bola úspešne zmenená."
-msgstr[1] "%(count)s %(name)s boli úspešne zmenené."
-msgstr[2] "%(count)s %(name)s bolo úspešne zmenených."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s vybraná"
-msgstr[1] "Všetky %(total_count)s vybrané"
-msgstr[2] "Všetkých %(total_count)s vybraných"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 z %(cnt)s vybraných"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne vymazaný."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Zmeniť históriu: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Prosím, zadajte správne používateľské meno a heslo. Rešpektujte malé a veľké "
-"písmená."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Vaše prihlásenie vypršalo. Prosím, prihláste sa znovu."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Zdá sa, že váš prehliadač nemá povolené cookies. Prosím, povoľte cookies, "
-"znova načítajte túto stránku a pokúste sa znova prihlásiť."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Používateľské mená nemožu obsahovať znak '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Vaša e-mailová adresa nie je vašim používateľským menom. Skúste namiesto "
-"toho použiť '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Správa stránky"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Prihlásenie"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "%s správa"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Dátum:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Čas:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Aktuálne:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Zmeniť:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Vyhľadanie"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Pridať ďalší"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Stránka nenájdená"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Ľutujeme, ale požadovanú stránku nie je možné nájsť."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Domov"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Chyba servera"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Chyba servera (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Chyba servera <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Vyskytla sa chyba. Bola oznámená správcovi stránky e-mailom a mala by byť "
-"čoskoro opravená. Ďakujeme za pochopenie."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Vykonať vybranú akciu"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Vykonať"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Kliknite sem pre výber objektov na všetkých stránkach"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Vybrať všetkých %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Zrušiť výber"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Vitajte,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentácia"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Zmeniť heslo"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Odhlásiť"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Správa Django stránky"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Správa Django"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Pridať"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "História"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Pozrieť na stránke"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Prosím, opravte chybu uvedenú nižšie."
-msgstr[1] "Prosím, opravte chyby uvedené nižšie."
-msgstr[2] "Prosím, opravte chyby uvedené nižšie."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Pridať %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrovať"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Odstrániť"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Odstránenie objektu %(object_name)s '%(escaped_object)s' by malo za následok "
-"aj odstránenie súvisiacich objektov. Váš účet však nemá oprávnenie na "
-"odstránenie nasledujúcich typov objektov:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Ste si istý, že chcete odstrániť objekt %(object_name)s \"%(escaped_object)s"
-"\"? Všetky nasledujúce súvisiace objekty budú odstránené:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Áno, som si istý"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Zmazať viacero objektov"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Odstránenie objektu %(object_name)s by malo za následok aj odstránenie "
-"súvisiacich objektov, Váš účet však nemá oprávnenie na odstránenie "
-"nasledujúcich typov objektov:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Ste si istý, že chcete odstrániť objekty %(object_name)s? Budú odstránené "
-"nasledujúce objekty a položky s nimi súvisiace:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Podľa %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modely dostupné v aplikácii %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Zmeniť"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Nemáte právo na vykonávanie zmien."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Posledné akcie"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Moje akcie"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nedostupné"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Neznámy obsah"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Niečo nie je v poriadku s vašou inštaláciou databázy. Uistite sa, že boli "
-"vytvorené potrebné databázové tabuľky a taktiež skontrolujte, či príslušný "
-"používateľ môže databázu čítať."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Meno používateľa:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Heslo:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Dátum a čas"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Používateľ"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Akcia"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Tento objekt nemá históriu zmien. Pravdepodobne nebol pridaný "
-"prostredníctvom tejto správcovskej stránky."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Zobraziť všetky"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Uložiť"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Vyhľadávanie"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s výsledok"
-msgstr[1] "%(counter)s výsledky"
-msgstr[2] "%(counter)s výsledkov"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s spolu"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Uložiť ako nový"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Uložiť a pridať ďalší"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Uložiť a pokračovať v úpravách"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Najskôr zadajte používateľské meno a heslo. Potom budete môcť upraviť viac "
-"používateľských nastavení."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Zadajte nové heslo pre používateľa <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Heslo"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Heslo (znova)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Kvôli overeniu zadajte rovnaké heslo ako vyššie."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Pridať ďalší %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Odstrániť"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Zmazať?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Ďakujeme za čas strávený na našich stránkach."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Znova sa prihlásiť"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Zmena hesla"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Zmena hesla úspešná"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Vaše heslo bolo zmenené."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Z bezpečnostných dôvodov zadajte staré heslo a potom nové heslo dvakrát, aby "
-"sme mohli overiť, že ste ho zadali správne."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Staré heslo"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nové heslo"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Zmeniť moje heslo"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Obnovenie hesla"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Obnovenie hesla ukončené"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Vaše heslo bolo nastavené. Môžete pokračovať a prihlásiť sa."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Potvrdenie obnovenia hesla"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Zadajte nové heslo"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Zadajte nové heslo dvakrát, aby sme mohli overiť, že ste ho zadali správne."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nové heslo:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potvrdenie hesla:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Obnova hesla sa nepodarila"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Odkaz na obnovenie hesla je neplatný, pretože už bol pravdepodobne raz "
-"použitý. Prosím, požiadajte znovu o obnovu hesla."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Obnovenie hesla úspešné"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Na uvedenú e-mailovú adresu sme vám poslali návod na obnovenie hesla. Mali "
-"by ste ho zakrátko dostať."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Obdržali ste tento e-mail, pretože ste si vyžiadali obnovenie hesla."
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "pre váš používateľský účet na %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Prosím, choďte na túto stránku a zvoľte si nové heslo:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Vaše používateľské meno, pre prípad, že ste ho zabudli:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Ďakujeme, že používate našu stránku!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Tím %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Zabudli ste heslo? Zadajte svoju e-mail adresu a my Vám pošleme inštrukcie "
-"pre nastavenie nového."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mailová adresa:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Obnova môjho hesla"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Všetky dátumy"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Vybrať %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Vybrať \"%s\" na úpravu"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "stránka"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "šablóna"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "značka:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "pohľad:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikácia %r nenájdená"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r sa nenachádza v aplikácii %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "súvisiaci objekt `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "súvisiace objekty `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "všetky %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "počet %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Polia objektov %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s nevyzerá ako urlpattern objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Záložky"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Záložky dokumentácie"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Ak chete nainštalovať záložky, pretiahnite odkaz do\n"
-"nástrojovej lišty so záložkami, alebo kliknite pravým tlačidlom myši na "
-"odkaz a pridajte ho do záložiek.\n"
-"Následne môžete záložky použiť na stránkach. Poznamenávame, že použitie "
-"niektorých záložiek vyžaduje, aby bol váš počítač \"interný\" (ak si nie ste "
-"istý, že váš počítač je \"interný\", oslovte svojho systémového správcu).</"
-"p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentácia k tejto stránke"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Nasmeruje vás z ľubovoľnej stránky do dokumentácie, kde je popísané, ako sa "
-"táto stránka generuje."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Zobraziť identifikátor objektu"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Zobrazí content-type a jedinečný identifikátor pre stránky, ktoré "
-"reprezentujú samostatný objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Upraviť tento objekt (aktuálne okno)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Skočí na stránku správy pre stránky, ktoré reprezentujú samostatný objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Upraviť tento objekt (nové okno)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Ako predtým, ale otvorí stránku správy v novom okne."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Osobné údaje"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Práva"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Dôležité dátumy"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Skupiny"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Heslo úspešne zmenené."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Zmeniť heslo: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Používateľské meno"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Povinné. 30 znakov alebo menej. Iba písmená, čísla a @/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Táto hodnota môže obsahovať len písmená, číslice a znaky @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Potvrdenie hesla"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Používateľ s takým používateľským menom už existuje."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Heslo a jeho potvrdenie sa nezhodujú."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Tento účet je neaktívny."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Váš prehliadač nemá povolené cookies. Cookies sú potrebné pre prihlásenie."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Táto e-mail adresa nemá priradený žiadny používateľský účet. Ste si istý, že "
-"ste sa zaregistrovali?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Obnovenie hesla na %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Potvrdenie nového hesla"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Nezadali ste správne svoje staré heslo. Napíšte ho znovu, prosím."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "meno"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kódové meno"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "oprávnenie"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "oprávnenia"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "skupina"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "skupiny"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "používateľské meno"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Povinné. 30 znakov alebo menej. Len písmená, číslice a znaky @/./+/-/_."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "krstné meno"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "priezvisko"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-mailová adresa"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "heslo"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Použite '[algo]$[salt]$[hexdigest]' alebo <a href=\"password/\">formulár na "
-"zmenu hesla</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "postavenie zamestnanca"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Určuje, či sa používateľ môže prihlásiť do správy stránok."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktívny"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Určuje, či je účet aktívny. Odškrtnite, ak chcete vypnúť používateľský účet."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "status superpoužívateľa"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Určuje, či používateľ získava automaticky všetky práva aj bez priameho "
-"priradenia."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "naposledy prihlásený"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "dátum registrácie"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Okrem ručne zadaných práv bude mať používateľ aj všetky práva prislúchajúce "
-"skupinám, v ktorých sa nachádza."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "používateľské oprávnenia"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "používateľ"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "používatelia"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "správa"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Odhlásený"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Zadajte platnú e-mailovú adresu."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Obsah"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metaúdaje"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "označený"
-msgstr[1] "označené"
-msgstr[2] "označených"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Označiť vybraný komentár"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "schválený"
-msgstr[1] "schválené"
-msgstr[2] "schválených"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Schváliť vybraný komentár"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "odstránený"
-msgstr[1] "odstránené"
-msgstr[2] "odstránených"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Odstrániť vybrané komentáre"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "1 komentár bol úspešne %(action)s."
-msgstr[1] "%(count)s komentáre boli úspešne %(action)s."
-msgstr[2] "%(count)s komentárov bolo úspešne %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s komentáre"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Najnovšie komentáre na %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Meno"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-mail adresa"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentár"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Vyjadrujte sa slušne! Slovo %s tu nie je dovolené používať."
-msgstr[1] "Vyjadrujte sa slušne! Slová %s tu nie je dovolené používať."
-msgstr[2] "Vyjadrujte sa slušne! Slová %s tu nie je dovolené používať."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Ak ste do tohoto poľa čokoľvek zadali, váš komentár bude považovaný za spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "typ obsahu"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "identifikátor objektu"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "meno používateľa"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "e-mail adresa používateľa"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "URL používateľa"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentár"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "dátum a čas odoslania"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP adresa"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "je verejný"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Ak chcete, aby komentár zmizol zo stránky, zrušte zaškrtnutie tohoto políčka."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "je odstránený"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Zaškrtnite toto pole, ak je komentár nevhodný. Namiesto neho sa zobrazí "
-"správa \"Tento komenár bol odstránený\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentáre"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Tento komentár je od autentifikovaného používateľa a preto je jeho meno len "
-"na čítanie."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Tento komentár je od autentifikovaného používateľa a preto je jeho e-mail "
-"len na čítanie."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Pridaný užívateľom %(user)s dňa %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "príznak"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "dátum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "komentárový príznak"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "komentárové príznaky"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Povoliť komentár"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Skutočne chcete zverejniť tento komentár?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Povoliť"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Ďakujeme za povolenie"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Ďakujeme za čas, ktorý ste venovali zvýšniu kvality diskusie na našej stránke"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Zmazať komentár"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Naozaj chcete zmazať tento komentár?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Ďakujeme za odstránenie"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Označiť tento komentár"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Naozaj chcete označiť tento komentár?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Príznak"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Ďakujeme za označenie"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Poslať"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Náhľad"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Vďaka za komentár"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Ďakujeme za váš komentár"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Náhľad komentára"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Opravte, prosím, chybu uvedenú nižšie"
-msgstr[1] "Opravte, prosím, chyby uvedené nižšie"
-msgstr[2] "Opravte, prosím, chyby uvedené nižšie"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Poslať váš komentár"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "alebo urobiť zmeny"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "pythonovské meno triedy modelu"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "typy obsahu"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Príklad: '/about/contact/'. Uistite sa, že máte lomky na začiatku a na konci."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Táto hodnota môže obsahovať len písmená, číslice, podčiarkovniky, pomlčky a "
-"lomky."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Pokročilé nastavenia"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "názov"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "obsah"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "povoliť komentáre"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "názov šablóny"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Príklad: 'flatpages/contact_page.html'. Ak nič nenapíšete, systém použije "
-"'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "nutná registrácia"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ak je toto zaškrtnuté, stránku budú môcť prezerať len prihlásení "
-"používatelia."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "statická stránka"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "statické stránky"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Ospravedlňujeme sa, ale platnosť formulára vypršala. Prosím, pokračujte vo "
-"vypĺňaní z tejto stránky."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Základné GIS pole -- mapuje na typ OpenGIS Specification Geometry"
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Bod"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Čiara"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Polygón"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Viacero bodov"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Viacero čiar"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Viacero polygónov"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Goemetrická kolekcia"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Nie je zadaná žiadna geometrická hodnota."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Chybná geometrická hodnota."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Chybný geometrický typ."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr "Nastala chyba pri prevode geometrie do SRID z formulárového poľa."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milión"
-msgstr[1] "%(value).1f milióny"
-msgstr[2] "%(value).1f miliónov"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miliárda"
-msgstr[1] "%(value).1f miliardy"
-msgstr[2] "%(value).1f miliárd"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f bilión"
-msgstr[1] "%(value).1f bilióny"
-msgstr[2] "%(value).1f biliónov"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "jeden"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dva"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "štyri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "päť"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "šesť"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sedem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "osem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "deväť"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "dnes"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "zajtra"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "včera"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Zadajte poštové smerovacie číslo v tvare NNNN alebo ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Toto pole môže obsahovať len čísla."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Toto pole vyžaduje 7 alebo 8 číslic."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Vložte platné CUIT vo formáte XX-XXXXXXXX-X alebo XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Neplatné CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Korutánsko"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Dolné Rakúsko"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Horné Rakúsko"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Štajersko"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirolsko"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlbersko"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Viedeň"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Zadajte poštové smerovacie číslo v tvare XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Zadajte platné rakúske číslo sociálneho poistenia vo formáte XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Zadajte štvorciferné poštové smerovacie číslo."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Zadajte poštové smerovacie číslo v tvare XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefónne čísla musia byť vo formáte XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Vyberte platný brazílsky štát. Tento štát nepatrí medzi existujúce štáty."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Chybné CPF číslo."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Toto pole môže mať najviac 11 čísel alebo 14 písmen."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Chybné CNPJ číslo."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "Toto pole vyžaduje minimálne 14 číslic"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Zadajte poštové smerovacie číslo v tvare XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Zadajte platné číslo kanadského sociálneho poistenia vo formáte XXX-XXX-XX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Ženeva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucern"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Vložte platné švajčiarske číslo občianskeho preukazu alebo pasu vo formáte "
-"X1234567<0 alebo 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Vložte platné čilské RUT."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Vložte platné čilské RUT. Formát je XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Čilské RUT nie je platné."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praha"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Stredočeský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Juhočeský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Plzenský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Karlovarský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Ústecký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberecký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradecký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubický kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysočina"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "Juhomoravský kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomoucký kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Žlínsky kraj"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravskosliezsky kraj"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Zadajte poštové smerovacie číslo v tvare XXXXX alebo XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Zadajte rodné číslo vo formáte XXXXXX/XXXX alebo XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Neplatný voliteľný parameter pohlavie, platné hodnoty sú 'f' a 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Zadajte platné rodné číslo."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Zadajte platné IC číslo."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Bádensko-Wuerttembersko"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavorsko"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlín"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenbursko"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Brémy"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessensko"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Meklenbursko-Predpomoransko"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Dolné Sasko"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Severné Porýnie-Westfálsko"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Porýnie-Falcko"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sasko"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Sasko-Anhaltsko"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswigsko-Holsteinsko"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Vložte poštové smerovacie číslo v tvare XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Vložte platné nemecké číslo občianskeho preukazu vo formáte XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Baleáry"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Kantábria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalúzia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturské kniežatstvo"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Baleárske ostrovy"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskicko"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanárske ostrovy"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastília-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastília-León"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalánsko"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Estremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galícia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia a okolie"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencijské spoločenstvo"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-"Zadajte platné poštové smerovacie číslo v rozmedzí a v tvare 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Zadajte platné telefónne číslo v tvare 6XXXXXXXX, 8XXXXXXXX alebo 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Zadajte platné NIF, NIE alebo CIF, prosím."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Zadajte platné NIF alebo NIE, prosím."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Neplatný kontrolný súčet pre NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Neplatný kontrolný súčet pre NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Neplatný kontrolný súčet pre CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Zadajte, prosím, platné číslo bankového účtu v tvare XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Neplatný kontrolný súčet čísla bankového účtu."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Vložte platné fínske číslo sociálneho poistenia."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefónne čísla musia mať formát 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Zadajte platné poštové smerovacie číslo"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Zadajte platné telofónne číslo"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Zadajte platnú štátnu poznávaciu značku auta"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Zadajte platné NIK/KTP číslo"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federálna vláda"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Vložte poštové smerovacie číslo v tvare XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Zadajte platné islandské identifikačné číslo. Formát je XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Islandské identifikačné číslo je neplatné."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Zadajte platné poštové smerovacie číslo."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Vložte platné číslo sociálneho poistenia."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Zadajte platné VAT číslo."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Zadajte poštové smerovacie číslo v tvare XXXXXXX alebo XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaidó"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Mijagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Jamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukušima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Točigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Čiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Jamanaši"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Tojama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Išikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Šizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aiči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Šiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kjóto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hjógo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakajama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Šimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okajama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hirošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Jamaguči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokušima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kóči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Mijazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Zadajte platné kuvaitské civilné identifikačné číslo"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Róo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Zadajte platné poštové smerovacie číslo"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Zadajte platné SoFi číslo"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drente"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flavónsko"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Frízsko"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Severné Brabantsko"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Severný Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zéland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Južný Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Vložte platné nórske číslo sociálneho poistenia."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Toto pole vyžaduje 8 číslic."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Toto pole vyžaduje 11 číslic."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Národné identifikačné číslo sa skladá z 11 číslic."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Nesprávny kontrolný súčet pre národné identifikačné číslo."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Zadajte platné daňové číselné pole (NIP) v tvare XXX-XXX-XX-XX alebo XX-XX-"
-"XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Nesprávny kontrolný súčet pre daňové číslo (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Číslo národného obchodného registra (REGON) sa skladá z 9 alebo zo 14 číslic."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Nesprávny kontrolný súčet pre číslo národného obchodného registra (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Vložte poštové smerovacie číslo v tvare XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Dolnosliezske vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kujavsko-pomoranské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lubelské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubuské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodžské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Malopoľské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Mazovské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opolské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Podkarpatské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podleské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomoranské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Sliezske vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Svätokrížske vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Varmsko-mazurské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Veľkopoľské vojvodstvo"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Západopomoranské vojvodstvo"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Zadajte poštové smerovacie číslo v tvare XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Telefónne čísla musia obsahovať 9 číslic a začína znakom + alebo 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Zadajte platné CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Zadajte platné CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Zadajte platné IBAN vo formáte ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefónne čísla musia mať formát XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Zadajte platné poštové smerovacie číslo v tvare XXXXXX"
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Zadajte platné švédske číslo organizácie."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Zadajte platné švédske osobné identifikačné číslo."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Koordinačné čísla nie sú povolené."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Zadajte švédske poštové smerovacie číslo v tvare XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banská Štiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Bánovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytča"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Čadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolný Kubín"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajská Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenné"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kežmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komárno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Košice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Košice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Košice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Košice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Košice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucké Nové Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoča"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovský Mikuláš"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lučenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Námestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nové Mesto nad Váhom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nové Zámky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizánske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piešťany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltár"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Považská Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Prešov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Púchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revúca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavská Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Rožňava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ružomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spišská Nová Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stará Ľubovňa"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidník"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Šaľa"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topoľčany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebišov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trenčín"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turčianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdošín"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Veľký Krtíš"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Topľou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlaté Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Žarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Žiar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Žilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banskobystrický kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislavský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Košický kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitriansky kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Prešovský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trančiansky kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnavský kraj"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Žilinský kraj"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Zadajte platné poštové smerovacie číslo."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall a Ostrovy Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne a Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "okres Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "okres Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "okres Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "okres Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "okres Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "okres Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries a Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkneyské ostrovy"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetlandské ostrovy"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Anglicko"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Severné Írsko"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Škótsko"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Zadajte poštové smerovacie číslo vo formáte XXXXX alebo XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefónne čísla musia byť vo formáte XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Vložte platné číslo U.S. sociálneho poistenia vo formáte XXX-XX-XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Zadajte štát USA alebo teritórium."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Štát USA (dve veľké písmená)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefónne číslo"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "Vložte platné CI vo formáte X.XXX.XXX-X,XXXXXXX-X alebo XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Zadajte platné IC číslo."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Zadajte platné juhoafrické ID číslo."
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Zadajte platné juhoafrické poštové smerovacie číslo"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "lenivá správa"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "presmerovať z"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Tu by sa mala použiť absolútna cesta bez názvu domény. Napríklad: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "presmerovať na"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Toto môže byť buď absolútna cesta (ako vyššie) alebo úplné URL začínajúce na "
-"'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "presmerovanie"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "presmerovania"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "kľúč relácie"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "údaje relácie"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "dátum vypršania platnosti"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "relácia"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "relácie"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "názov domény"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "zobrazené meno"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "weby"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Zadajte platnú hodnotu."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Zadajte platnú URL adresu."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Toto URL je chybný odkaz."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Zadajte platný 'slug' pozostávajúci z písmen, čísel, podčiarkovníkov alebo "
-"pomlčiek."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Zadajte platnú IPv4 adresu."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Zadajte len číslice oddelené čiarkami."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Uistite sa, že táto hodnota je %(limit_value)s (je to %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Uistite sa, že táto hodnota je menšia alebo rovná %(limit_value)s."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Uistite sa, že hodnota je väčšia alebo rovná %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Uistite sa, že zadaná hodnota má najmenej %(limit_value)d znakov (má %"
-"(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Uistite sa, že táto hodnota má najviac %(limit_value)d znakov (má %"
-"(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s musí byť unikátne pre %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s s týmto %(field_label)s už existuje."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Hodnota %r nie je platná možnosť."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Toto pole nemôže byť prázdne."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Toto pole nemôže byť prázdne."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Pole typu: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Celé číslo"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Táto hodnota musí byť celé číslo."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Táto hodnota musí byť True alebo False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Logická hodnota (buď True alebo False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Reťazec (až do %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Celé čísla oddelené čiarkou"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Dátum (bez času)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Zadajte platný dátum vo formáte RRRR-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Neplatný dátum: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Zadajte platný dátum a čas vo formáte RRRR-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Dátum (a čas)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Táto hodnota musí byť desatinné číslo."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Desatinné číslo"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-mail adresa"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Cesta k súboru"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Táto hodnota musí byť číslo s plávajúcou desatinnou čiarkou."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Číslo s plávajúcou desatinnou čiarkou"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Veľké celé číslo (8 bajtov)"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Táto hodnota musí byť buď None, True alebo False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Logická hodnota (buď True, False alebo None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Text"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Čas"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Zadajte platný čas vo formáte HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML text"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Model %(model)s s primárnym kľúčom %(pk)r neexistuje."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Cudzí kľúč (typ určuje pole v relácii)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Typ relácie: jedna k jednej"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Typ relácie: M ku N"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Ak chcete vybrať viac ako jednu položku, podržte \"Control\", alebo \"Command"
-"\" na počítači Mac."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Prosím, zadajte platný identifikátor %(self)s. Hodnota %(value)r je neplatná."
-msgstr[1] ""
-"Prosím, zadajte platný identifikátor %(self)s. Hodnoty %(value)r sú neplatné."
-msgstr[2] ""
-"Prosím, zadajte platný identifikátor %(self)s. Hodnoty %(value)r sú neplatné."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Toto pole je povinné."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Zadajte celé číslo."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Zadajte číslo."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Uistite sa, že nie je zadaných celkovo viac ako %s číslic."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Uistite sa, že nie je zadaných viac ako %s desatinných miest."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-"Uistite sa, že nie je zadaných viac ako %s číslic pred desatinnou čiarkou."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Zadajte platný dátum."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Zadajte platný čas."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Zadajte platný dátum a čas."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Súbor nebol odoslaný. Skontrolujte typ kódovania vo formulári."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Žiaden súbor nebol odoslaný."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Odoslaný súbor je prázdny."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Uistite sa, že názov súboru má najviac %(max)d znakov (má %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Nahrajte platný obrázok. Súbor, ktorý ste odoslali nebol obrázok alebo bol "
-"poškodený."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Vyberte platnú voľbu. %(value)s nepatrí medzi dostupné možnosti."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Vložte zoznam hodnôt."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Poradie"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Prosím, opravte duplicitné dáta pre %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Dáta pre %(field)s musia byť unikátne, prosím, opravte duplikáty."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Dáta pre %(field_name)s musia byť unikátne pre %(lookup)s v %(date_field)s, "
-"prosím, opravte duplikáty."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Prosím, opravte nižšie uvedené duplicitné hodnoty. "
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Vnorený cudzí kľúč sa nezhoduje s nadradenou inštanciou primárnho kľúča."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Vyberte platnú možnosť. Vybraná položka nepatrí medzi dostupné možnosti."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Vyberte platnú možnost. %s nepatrí medzi dostupné možnosti."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" nie je platná hodnota pre primárny kľúč."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "áno,nie,možno"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bajt"
-msgstr[1] "%(size)d bajty"
-msgstr[2] "%(size)d bajtov"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "popoludní"
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "dopoludnia"
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "popoludní"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "dopoludnia"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "polnoc"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "poludnie"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "pondelok"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "utorok"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "streda"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "štvrtok"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "piatok"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "sobota"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "nedeľa"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "po"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "ut"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "st"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "št"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "pi"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "so"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "ne"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "január"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "február"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "marec"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "apríl"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "máj"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "jún"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "júl"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "august"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "október"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "december"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "máj"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jún"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "júl"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dec."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "alebo"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "rok"
-msgstr[1] "roky"
-msgstr[2] "rokov"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mesiac"
-msgstr[1] "mesiace"
-msgstr[2] "mesiacov"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "týždeň"
-msgstr[1] "týždne"
-msgstr[2] "týždnov"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "deň"
-msgstr[1] "dni"
-msgstr[2] "dní"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hodina"
-msgstr[1] "hodiny"
-msgstr[2] "hodín"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minúta"
-msgstr[1] "minúty"
-msgstr[2] "minút"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minúty"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "j. F Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y G:i"
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "G:i"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Objekt %(verbose_name)s bol úspešne vytvorený."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Objekt %(verbose_name)s bol úspešne zmenený."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Objekt %(verbose_name)s bol zmazaný."
-
-#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-#~ msgstr "Jeden alebo viac %(fieldname)s v %(name)s: %(obj)s"
-
-#~ msgid "One or more %(fieldname)s in %(name)s:"
-#~ msgstr "Jeden alebo viac %(fieldname)s v %(name)s:"
-
-#~ msgid "Old password:"
-#~ msgstr "Staré heslo:"
-
-#~ msgid "Relation to parent model"
-#~ msgstr "Vzťah k nadradenému modelu"
-
-#~ msgid "Add user"
-#~ msgstr "Pridať používateľa"
-
-#~ msgid "Comment moderation queue"
-#~ msgstr "Rad komentárov čakajúcich na schválenie"
-
-#~ msgid "No comments to moderate"
-#~ msgstr "Žiadne komentáre na schválenie"
-
-#~ msgid "Email"
-#~ msgstr "Email"
-
-#~ msgid "Authenticated?"
-#~ msgstr "Autentifikovaný?"
-
-#~ msgid "IP Address"
-#~ msgstr "IP adresa"
-
-#~ msgid "Date posted"
-#~ msgstr "Dátum odoslania"
-
-#~ msgid "yes"
-#~ msgstr "áno"
-
-#~ msgid "no"
-#~ msgstr "nie"
diff --git a/parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index bbca8a0..0000000
--- a/parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 42c20ff..0000000
--- a/parts/django/django/conf/locale/sk/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,156 +0,0 @@
-# Slovak translation of Django
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 12:15+0100\n"
-"PO-Revision-Date: 2010-05-07 09:48+0200\n"
-"Last-Translator: Martin Kosír <martin@martinkosir.net>\n"
-"Language-Team: Slovak <>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>1 && n<5 ? 1 : 2;\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Dostupné %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Vybrať všetko"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Pridať"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Odstrániť"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Vybrané %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Zvoľte možnosť a kliknite "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Všetko zrušiť"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s z %(cnt)s vybrané"
-msgstr[1] "%(sel)s z %(cnt)s vybrané"
-msgstr[2] "%(sel)s z %(cnt)s vybraných"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Vrámci jednotlivých editovateľných polí máte neuložené zmeny. Ak vykonáte "
-"akciu, vaše zmeny budú stratené."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Vybrali ste akciu, ale neuložili ste jednotlivé polia. Prosím, uložte zmeny "
-"kliknutím na OK. Akciu budete musieť vykonať znova."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Vybrali ste akciu, ale neurobili ste žiadne zmeny v jednotlivých poliach. "
-"Pravdepodobne ste chceli použiť tlačidlo vykonať namiesto uložiť."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"január február marec apríl máj jún júl august september október november "
-"december"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "N P U S Š P S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Zobraziť"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Skryť"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "nedeľa pondelok utorok streda štvrtok piatok sobota"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Teraz"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Hodiny"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Vybrať čas"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Polnoc"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "6:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Poludnie"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Zrušiť"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Dnes"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalendár"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Včera"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Zajtra"
diff --git a/parts/django/django/conf/locale/sk/__init__.py b/parts/django/django/conf/locale/sk/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/sk/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/sk/formats.py b/parts/django/django/conf/locale/sk/formats.py
deleted file mode 100644
index bf90c1a..0000000
--- a/parts/django/django/conf/locale/sk/formats.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = 'j. F Y G:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y G:i:s'
-FIRST_DAY_OF_WEEK = 1 # Monday
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06'
- '%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
- # '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59'
- '%d.%m.%Y %H:%M', # '25.10.2006 14:30'
- '%d.%m.%Y', # '25.10.2006'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/sl/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/sl/LC_MESSAGES/django.mo
deleted file mode 100644
index 61ea031..0000000
--- a/parts/django/django/conf/locale/sl/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sl/LC_MESSAGES/django.po b/parts/django/django/conf/locale/sl/LC_MESSAGES/django.po
deleted file mode 100644
index 4b8bff4..0000000
--- a/parts/django/django/conf/locale/sl/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5182 +0,0 @@
-# translation of django.po to Slovenian
-# Gasper Zejn <zejn@kiberpipa.org>, 2010.
-# Jure Cuhalev <gandalf@owca.info>, 2010.
-# This file is distributed under the same license as the Django package.
-msgid ""
-msgstr ""
-"Project-Id-Version: django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-08 14:39+0200\n"
-"PO-Revision-Date: 2010-05-08 13:47+0100\n"
-"Last-Translator: Jure Cuhalev <gandalf@owca.info>\n"
-"Language-Team: <sl@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
-"%100==4 ? 2 : 3);\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabščina"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bolgarščina"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengalščina"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Bosanščina"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Katalonščina"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Češčina"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Valežanski jezik"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Danščina"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Nemščina"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Grščina"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Angleščina"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "Britanska Angleščina"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "Španščina"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Argentinska španščina"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estonščina"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Baskovščina"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Perzijščina"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Finščina"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Francoščina"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frizijščina"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "Irščina"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galičanski jezik"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "Hebrejski jezik"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hindujščina"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Hrvaščina"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Madžarščina"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "Islandski jezik"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "Italijanščina"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "Japonščina"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "Gruzijščina"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "Kmerščina"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "Kanareščina"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "Korejščina"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "Litvanščina"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "Latvijščina"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "Makedonščina"
-
-#: conf/global_settings.py:80
-msgid "Mongolian"
-msgstr "Mongolščina"
-
-#: conf/global_settings.py:81
-msgid "Dutch"
-msgstr "Nizozemščina"
-
-#: conf/global_settings.py:82
-msgid "Norwegian"
-msgstr "Norveščina"
-
-#: conf/global_settings.py:83
-msgid "Norwegian Bokmal"
-msgstr "Norveščina Bokmal"
-
-#: conf/global_settings.py:84
-msgid "Norwegian Nynorsk"
-msgstr "Norveščina Nynorsk"
-
-#: conf/global_settings.py:85
-msgid "Polish"
-msgstr "Poljščina"
-
-#: conf/global_settings.py:86
-msgid "Portuguese"
-msgstr "Portugalščina"
-
-#: conf/global_settings.py:87
-msgid "Brazilian Portuguese"
-msgstr "Brazilska portugalščina"
-
-#: conf/global_settings.py:88
-msgid "Romanian"
-msgstr "Romunščina"
-
-#: conf/global_settings.py:89
-msgid "Russian"
-msgstr "Ruščina"
-
-#: conf/global_settings.py:90
-msgid "Slovak"
-msgstr "Slovaščina"
-
-#: conf/global_settings.py:91
-msgid "Slovenian"
-msgstr "Slovenščina"
-
-#: conf/global_settings.py:92
-msgid "Albanian"
-msgstr "Albanščina"
-
-#: conf/global_settings.py:93
-msgid "Serbian"
-msgstr "Srbščina"
-
-#: conf/global_settings.py:94
-msgid "Serbian Latin"
-msgstr "Srbščina v latinici"
-
-#: conf/global_settings.py:95
-msgid "Swedish"
-msgstr "Švedščina"
-
-#: conf/global_settings.py:96
-msgid "Tamil"
-msgstr "Tamilščina"
-
-#: conf/global_settings.py:97
-msgid "Telugu"
-msgstr "Teluščina"
-
-#: conf/global_settings.py:98
-msgid "Thai"
-msgstr "Tajski jezik"
-
-#: conf/global_settings.py:99
-msgid "Turkish"
-msgstr "Turščina"
-
-#: conf/global_settings.py:100
-msgid "Ukrainian"
-msgstr "Ukrajinščina"
-
-#: conf/global_settings.py:101
-msgid "Vietnamese"
-msgstr "Vietnamščina"
-
-#: conf/global_settings.py:102
-msgid "Simplified Chinese"
-msgstr "Poenostavljena kitajščina"
-
-#: conf/global_settings.py:103
-msgid "Traditional Chinese"
-msgstr "Tradicionalna kitajščina"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Uspešno izbrisano %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Ste prepričani?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Izbriši izbrano: %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Avtor: %s</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Vse"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Kadarkoli"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Danes"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Zadnjih 7 dni"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Ta mesec"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Letos"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Da"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Ne"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Neznano"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Dejanje:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "čas dejanja"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id objekta"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "predstavitev objekta"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "zastavica dejanja"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "spremeni sporočilo"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "dnevniški vnos"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "dnevniški vnosi"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Brez vrednosti"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Spremenjen %s."
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:568
-msgid "and"
-msgstr "in"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Dodal %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Spremenjeno %(list)s za %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Izbrisan %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Nobeno polje ni bilo spremenjeno."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" je bil uspešno dodan."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Vsebino lahko znova uredite spodaj."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Spodaj lahko dodate še en %s."
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" je bil uspešno spremenjen."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" je bil uspešno dodan. Ponovno ga lahko uredite spodaj."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Izbrati morate vnose, nad katerimi želite izvesti operacijo. Noben vnos ni "
-"bil spremenjen."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Brez dejanja."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Dodaj %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Objekt %(name)s z glavnim ključem %(key)r ne obstaja."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Spremeni %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Napaka v podatkovni bazi"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s je bil uspešno spremenjen."
-msgstr[1] "%(count)s %(name)s sta bila uspešno spremenjena."
-msgstr[2] "%(count)s %(name)s so bili uspešno spremenjeni."
-msgstr[3] "%(count)s %(name)s je bilo uspešno spremenjenih."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s izbran"
-msgstr[1] "%(total_count)s izbrana"
-msgstr[2] "%(total_count)s izbrani"
-msgstr[3] "%(total_count)s izbranih"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 od %(cnt)s izbranih"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" je bil uspešno izbrisan."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Zgodovina sprememb: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Prosimo, vnesite veljavno uporabniško ime in geslo. Opomba: obe polji "
-"upoštevata velikost črk."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Vaša seja je pretekla; prosimo da se ponovno prijavite."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Izgleda, da vaš brskalnik nima podpore za piškotke. Prosimo, vključite "
-"piškotke, osvežite stran in poskusite ponovno."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Uporabniška imena ne smejo vsebovati znaka '@'."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Vaš e-mail naslov ni vaše uporabniško ime. Poskusite uporabiti '%s'."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Administracija strani"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Prijavite se"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "Administracija %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Datum:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Ura:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Trenutno:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Sprememba:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Poizvedba"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Dodaj še enega"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Strani ni mogoče najti"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Opravičujemo se, a zahtevane strani ni mogoče najti."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Domov"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Napaka na strežniku"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Napaka na strežniku (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Napaka na strežniku <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Prišlo je do nepričakovane napake. Napaka je bila javljena administratorjem "
-"spletne strani in naj bi jo v kratkem odpravili. Hvala za potrpljenje."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Izvedi izbrano dejanje"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Pojdi"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Kliknite tu za izbiro vseh vnosov na vseh straneh"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Izberi vse %(total_count)s %(module_name)s"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Počisti izbiro"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Dobrodošli,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentacija"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Spremeni geslo"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Odjava"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administrativni vmesnik"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administracija"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Dodaj"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Zgodovina"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Poglej na strani"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Prosimo, odpravite sledečo napako."
-msgstr[1] "Prosimo, odpravite sledeči napaki."
-msgstr[2] "Prosimo, odpravite sledeče napake."
-msgstr[3] "Prosimo, odpravite sledeče napake."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Dodaj %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filter"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Izbriši"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Izbris %(object_name)s '%(escaped_object)s' bi pomenil izbris povezanih "
-"objektov, vendar nimate dovoljenja za izbris naslednjih tipov objektov:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Ste prepričani, da želite izbrisati %(object_name)s \"%(escaped_object)s\"? "
-"Vsi naslednji povezani elementi bodo izbrisani:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, prepričan sem"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Izbriši več objektov"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Izbris %(object_name)s bi pomenil izbris povezanih objektov, vendar nimate "
-"dovoljenja za izbris naslednjih tipov objektov:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Ste prepričani, da želite izbrisati izbrane objekte %(object_name)s? Vsi "
-"naslednji vnosi in povezani vnosi bodo izbrisani:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "Po %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeli na voljo v aplikaciji %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Spremeni"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Nimate dovoljenja za urejanje."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Zadnja dejanja"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Moja dejanja"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Ni na voljo"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Neznana vsebina"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Nekaj je narobe z namestitvijo vaše podatkovne baze. Preverite, da so bile "
-"ustvarjene prave tabele v podatkovni bazi in da je dostop do branja baze "
-"omogočen pravemu uporabniku."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Uporabniško ime:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Geslo:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datum/čas"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Uporabnik"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Dejanje"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Ta objekt nima zgodovine sprememb. Verjetno ni bil dodan preko te strani za "
-"administracijo."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Prikaži vse"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Shrani"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Išči"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s rezultat"
-msgstr[1] "%(counter)s rezultata"
-msgstr[2] "%(counter)s rezultati"
-msgstr[3] "%(counter)s rezultatov"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s skupno"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Shrani kot novo"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Shrani in dodaj še eno"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Shrani in nadaljuj z urejanjem"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Najprej vpišite uporabniško ime in geslo, nato boste lahko urejali druge "
-"lastnosti uporabnika."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Vpišite novo geslo za uporabnika <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Geslo"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Geslo (ponovno)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Vpišite enako geslo kot zgoraj, da se izognete tipkarskim napakam."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Dodaj še en %(verbose_name)s"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Odstrani"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Izbrišem?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Hvala, ker ste si danes vzeli nekaj časa za to spletno stran."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Ponovna prijava"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Sprememba gesla"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Sprememba gesla je uspela"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Vaše geslo je bilo spremenjeno."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Vnesite vaše staro geslo (zaradi varnosti) in nato še dvakrat novo, da se "
-"izognete tipkarskim napakam."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Staro geslo"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Novo geslo"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Spremeni moje geslo"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Ponastavitev gesla"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Ponastavitev gesla zaključena"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Vaše geslo je bilo nastavljeno. Zdaj se lahko prijavite."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Potrdite ponastavitev gesla"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Vpišite novo geslo"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "Vnesite vaše novo geslo dvakrat, da se izognete tipkarskim napakam."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Novo geslo:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potrditev gesla:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Ponastavitev gesla ni uspela"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Povezava za ponastavitev gesla ni bila veljavna, morda je bila že "
-"uporabljena. Prosimo zahtevajte novo ponastavitev gesla."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Ponastavitev gesla je uspela"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Na e-poštni naslov, ki ste ga navedli, smo vam poslali navodila za "
-"ponastavitev gesla. Morali bi ga prejeti v kratkem."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Ta e-mail ste dobili, ker ste zahtevali ponastavitev gesla"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "za vaš uporabniški račun na %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Prosimo pojdite na sledečo stran in izberite novo geslo:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Vaše uporabniško ime (za vsak primer):"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Hvala, ker uporabljate našo stran!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Ekipa strani %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Ste pozabili geslo? Vnesite vaš e-mail naslov in poslali vam bomo navodila "
-"za ponastavitev gesla."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Naslov e-pošte:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Ponastavi moje geslo"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Vsi datumi"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Izberite %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Izberite %s, ki ga želite spremeniti"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "stran"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "predloga"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "značka:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "pogled:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikacije %r ni mogoče najti"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Modela %(model_name)r ni v aplikaciji %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "povezani `%(app_label)s.%(data_type)s` objekt"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "povezani `%(app_label)s.%(object_name)s` objekti"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "vse %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "število %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Polja na %s objektih"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ne izgleda veljaven urlpattern objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Zaznamkice"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokumentacijske zaznamkice"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Za inštalacijo zaznamkic povlečite povezavo v orodno "
-"vrstico\n"
-"z zaznamki, ali kliknite z desno miškino tipko na povezavo in jo dodajte med "
-"zaznamke. Zdaj lahko izberete zaznamkico s katerekoli strani tega spletnega "
-"mesta. Opomba: nekatere izmed teh strani lahko gledate le z računalnika, ki "
-"je označen kot \"notranji\" (v kolikor niste prepričani, če je vaš "
-"računalnik označen kot \"notranji\" se obrnite na sistemskega "
-"administratorja).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentacija te strani"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Skok na stran z dokumentacijo za pogled (view), ki generira trenutno stran."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Pokaži ID objekta"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Pokaže content-type in unikatni ID za strani, ki predstavljajo en objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Uredi objekt (v trenutnem oknu)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Skok na administracijsko stran za vse strani, ki predstavljajo en objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Uredi ta objekt (v novem oknu)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Kot zgoraj, le da odpre administracijsko stran v novem oknu."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Osebni podatki"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Dovoljenja"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Pomembni datumi"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Skupine"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Geslo je bilo uspešno spremenjeno."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Spremeni geslo: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Uporabniško ime"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Zahtevano. 30 znakov ali manj. Samo alfanumerični znaki ali naslednji znaki "
-"@/./+/-/_."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr ""
-"Ta vrednost sme vsebovati le črke, števila ali kateri znak izmed @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Potrditev gesla"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Uporabnik s tem uporabniškim imenom že obstaja."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Gesli se ne ujemata."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Ta uporabniški račun ni aktiven."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Izgleda, da vaš brskalnik nima omogočenih piškotkov. Piškotki so potrebni za "
-"prijavo."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-poštni naslov"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Tega e-mail naslova ni mogoče pripisati nobenemu uporabniku. Ali ste "
-"prepričani, da ste registrirani?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Ponastavitev gesla za %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Potrditev novega gesla"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Vaše staro geslo ni pravilno. Prosim, poskusite ponovno."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "ime"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "kodno ime"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "dovoljenje"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "dovoljenja"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "skupina"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "skupine"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "uporabniško ime"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Zahtevano. 30 znakov ali manj. Samo alfanumerični znaki in kateri znak izmed "
-"@/./+/-/_"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "ime"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "priimek"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-mail naslov"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "geslo"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Uporabite '[algo]$[salt]$[hexdigest]' ali <a href=\"password/\">obrazec za "
-"spremembo gesla</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "status osebja"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Določi, če se sme uporabnik prijaviti v to administracijsko stran."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktiven"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Določi, če se uporabnik smatra za aktivega. Odstranite to možnost namesto da "
-"brišete račune."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "status superuporabnika"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Uporabnik bo imel vse pravice brez da bi mu morali posamično dodeljevati "
-"pravice."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "zadnja prijava"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "registriran od"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Poleg ročno določenih dovoljenj bo ta uporabnik dobil tudi vsa dovoljenja, "
-"ki pripadajo skupinam, katerih član je."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "uporabniška dovoljenja"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "uporabnik"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "uporabniki"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "sporočilo"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Odjavljen"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Vnesite veljaven e-mail."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Vsebina"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metapodatki"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "označen"
-msgstr[1] "označena"
-msgstr[2] "označeni"
-msgstr[3] "označenih"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Označi izbrane komentarje"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "odobren"
-msgstr[1] "odobrena"
-msgstr[2] "odobreni"
-msgstr[3] "odobrenih"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Odobri izbrane komentarje"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "odstranjen"
-msgstr[1] "odstranjena"
-msgstr[2] "odstranjeni"
-msgstr[3] "odstranjenih"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Odstrani izbrane komentarje"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "%(count)s komentar je bil uspešno %(action)s."
-msgstr[1] "%(count)s komentarja sta bila uspešno %(action)s."
-msgstr[2] "%(count)s komentarji so bili uspešno %(action)s."
-msgstr[3] "%(count)s komentarjev je bilo uspešno %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s komentarji"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Zadnji komentarji na %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Ime"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-poštni naslov"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL (spletni naslov)"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentar"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pazite na jezik! Beseda %s tu ni dovoljena."
-msgstr[1] "Pazite na jezik! Besedi %s tu nista dovoljeni."
-msgstr[2] "Pazite na jezik! Besede %s tu niso dovoljene."
-msgstr[3] "Pazite na jezik! Besede %s tu niso dovoljene."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Če v to polje vnesete karkoli, bo vaš komentar označen kot nezaželen"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tip vsebine"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID objekta"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "uporabnikovo ime"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "e-poštni naslov"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "uporabnikov URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "datum/čas vnosa"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP naslov"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "je javno"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Odkljukajte tu da komentar izgine s strani."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "je odstranjen"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Odkljukajte, če je komentar neprimeren. Namesto komentarja bo vidno "
-"obvestilo \"Ta komentar je bil odstranjen\"."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentarji"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Ta komentar je poslal prijavljen uporabnik, zato je ime na voljo samo za "
-"branje."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Ta komentar je poslal prijavljen uporabnik, zato je e-poštni naslov samo za "
-"branje."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Poslal uporabnik %(user)s ob %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "Označi"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "datum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "označen komentar"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "oznake komentarja"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Odobritev komentarja"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Ste prepričani, da želite ta komentar objaviti?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Odobritev"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Hvala za odobritev komentarja"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Hvala, da ste si vzeli čas in pomagali izboljšati kvaliteto dialoga na naši "
-"strani"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Odstrani komentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Zares želite odstraniti ta komentar?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Hvala, ker ste odstranili"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Prijavi ta komentar"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Zares želite prijaviti ta komentar?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Prijavi"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Hvala, ker ste prijavili komentar"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Pošlji"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Predogled"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Hvala za komentiranje"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Hvala za vaš komentar"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Predogled vašega komentarja"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Prosimo, odpravite sledečo napako"
-msgstr[1] "Prosimo, odpravite sledeči napaki"
-msgstr[2] "Prosimo, odpravite sledeče napake"
-msgstr[3] "Prosimo, odpravite sledeče napake"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Pošlji svoj komentar"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "ali naredite spremembe"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python ime razreda modela"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipi vsebine"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Primer: '/about/contact/'. Preverite ali vsebuje / (poševnico) na začetku in "
-"koncu vnosa."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Ta vrednost sme vsebovati le črke, števila, podčrtaje, poševnice ali "
-"pomišljaje."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Napredne možnosti"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "naslov"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "vsebina"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "omogoči komentarje"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "ime predloge"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Primer: 'flatpages/contact_page.html'. Če to polje ni izpolnjeno, bo sistem "
-"uporabil 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "obvezna registracija"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Če je to polje izbrano, si bodo to stran lahko ogledali le prijavljeni "
-"uporabniki."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "enostavna stran"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "enostavne strani"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Se opravičujemo, ampak vaš obrazec je potekel. Prosimo, da nadaljujete z "
-"izpolnjevanjem obrazca na tej strani."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Osnovno GIS polje -- se preslika v tip Geometry po OpenGIS specifikaciji."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Točka"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Črtni zapis"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Poligon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Večtočkovje"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Več črtni zapis"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Več poligonov"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Niz likov"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Niste navedli geometrijske vrednosti."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Neveljavna geometrijska vrednost."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Neveljaven tip geometrije."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Pri pretvorbi geometrijskega zapisa v SRID geometrijskega polja je prišlo do "
-"napake."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milijon"
-msgstr[1] "%(value).1f milijona"
-msgstr[2] "%(value).1f milijoni"
-msgstr[3] "%(value).1f milijonov"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f miljarda"
-msgstr[1] "%(value).1f miljardi"
-msgstr[2] "%(value).1f miljarde"
-msgstr[3] "%(value).1f miljard"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f triljon"
-msgstr[1] "%(value).1f triljona"
-msgstr[2] "%(value).1f triljoni"
-msgstr[3] "%(value).1f triljonov"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "ena"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dva"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "štiri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "pet"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "šest"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sedem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "osem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "devet"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "danes"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "jutri"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "včeraj"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Vpišite poštno številko v zapisu NNNN or ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "To polje lahko vsebuje samo številke."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "To polje mora vsebovati 7 ali 8 števk."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Vpišite veljavno CUIT v zapisu XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Neveljaven CUIT vnos."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Gradiščansko"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Koroška"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Spodnja Avstrija"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Zgornja Avstrija"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Avstrijska Štajerska"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirolska"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Dunaj"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Vnesite veljavno poštno številko v obliki XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Vpišite veljavno številko avstrijskega socialnega zavarovanja v zapisu XXXX "
-"XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Vnesite 4-mestno poštno številko."
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Vnesite poštno številko v zapisu XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonska številka mora biti v zapisu XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Izberite veljavno brazilsko državo. Ta država ni med ponujenimi izbirami."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Nepravilna CPF številka."
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "To polje zahteva največ 11 števk ali 14 znakov."
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr "Nepravilna CNPJ številka."
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr "To polje mora vsebovati vsaj 14 števk."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Vnesite veljavno poštno številko v obliki XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Vpišite veljavno številko kanadskega socialnega zavarovanja v zapisu XXX-XXX-"
-"XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel (mesto)"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel (dežela)"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Ženeva"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Vpišite veljavno številko švicarske osebne izkaznice ali potnega lista v "
-"zapisu X1234567<0 ali 1234567890."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Vnesite veljaven čilski RUT."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Vpišite veljaven čilenski RUT v zapisu XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Ta čilenski RUT ni veljaven."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Praga"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Central Bohemian Region"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "South Bohemian Region"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilsen Region"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Carlsbad Region"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Usti Region"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec Region"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Region"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice Region"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysocina Region"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "South Moravian Region"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc Region"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlin Region"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravian-Silesian Region"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Vpišite poštno številko v zapisu XXXXX ali XXX XX."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Vnesite rojstno številko v obliki XXXXXX/XXXX ali XXXXXXXXXX."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Neveljaven neobvezni vnos Spol, veljavne vrednosti sta 'f' in 'm'"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Vnesite veljavno rojstno številko."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Vnesite veljavno IC številko."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavarska"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Western Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Lower Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Severno porenje - Westfalija"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Posarje"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saška-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Vnesite veljavno poštno številko v obliki XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Vpišite veljavno številko nemške osebne izkaznice v zapisu XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Balearski otoki"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principality of Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearski otoki"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskovska pokrajina"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanarski otoki"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castile-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castile and Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Region of Murcia"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Vpišite veljavno poštno številko v obsegu in zapisu od 01XXX do 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Vpišite veljavno telefonsko številko v zapisu 6XXXXXXXX, 8XXXXXXXX ali "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Prosimo, vnesite veljavni NIF, NIE, ali CIF."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Prosimo, vnesite veljaven NIF ali NIE."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Neveljavna preverjevalna vsota za NIF."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Neveljavna preverjevalna vsota za NIE."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Neveljavna preverjevalna vsota za CIF."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Vpišite veljavno številko bančnega računa v zapisu XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Neveljavna preverjevalna vsota za številko bančnega računa."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Vnesite veljavno številko finskega socialnega zavarovanja."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefonska številka mora biti v zapisu 0X XX XX XX XX."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Vnesite veljavno poštno številko"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Vnesite veljavno telefonsko številko"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Vnesite veljavno avtomobilsko registrsko številko"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Vnesite veljavno NIK/KTP številko."
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Zvezna vlada"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Vnesite poštno številko v zapisu XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Vpišite pravilno islandsko identifikacijsko številko v zapisu XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Islandska identifikacijska številka ni pravilna."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Vnesite veljavno poštno številko."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Vnesite veljavno številko socialnega zavarovanja."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Vnesite veljavno davčno (DDV) številko."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Vpišite poštno številko v zapisu XXXXXXX or XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Jamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Točigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Čiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokio"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Jamanaši"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Išikava"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Šizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Šiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kjoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hjogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Vakajama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Šimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okajama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hirošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Jamaguči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokušima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Koči"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagošima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinava"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Vnesite veljavno Kuvajtsko osebno ID številko"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Vnesite veljavno poštno številko"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Vnesite veljavno nizozemsko davčno številko"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Vnesite veljavno številko norveškega socialnega zavarovanja."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "To polje mora vsebovati 8 števk."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "To polje mora vsebovati 11 števk."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Nacionalna identifikacijska številka je sestavljena iz 11 števk."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-"Preverjevalna vsota za nacionalno identifikacijsko številko ne ustreza."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Vnesite davčno številko (NIP) v obliki XXX-XXX-XX-XX ali XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Napačna preverjevalna vsota za davčno številko (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-"Nacionalna poslovna registracijska številka (REGON) je sestavljena iz 9 ali "
-"14 števk."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Napačna preverjevalna vsota za nacionalno poslovno registracijsko številko "
-"(REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Vnesite veljavno poštno številko v obliki XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Spodna Šlezija"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Šlezija"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "Vnesite poštno številko v zapisu XXXX-XXX."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr "Telefonske številke morajo imeti 9 števk ali pa se začeti z + ali 00."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Vnesite veljaven CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Vnesite veljaven CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Vpišite veljaen IBAN v obliki ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonska številka mora biti v zapisu XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Vnesite veljavno poštno številko v obliki XXXXXX."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Vnesite veljavno švedsko številko organizacije."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Vnesite veljavno švedsko osebno identifikacijsko številko."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Koordinacijske številke niso dovoljene."
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "Vnesite veljavno švedsko poštno številko v obliki XXXXX."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Regija Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislavska regija"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Regija Kosice"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Regija Nitra"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Regija Presov"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Regija Trencin"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Regija Trnava"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Regija Zilina"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Vnesite veljavno poštno številko."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Northern Ireland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Vnesite poštno številko v zapisu XXXXX ali XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefonska številka mora biti zapisana v formatu XXX-XXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Vpišite veljavno številko ameriškega socialnega zavarovanja v zapisu XXX-XX-"
-"XXXX."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "Vpiši zvezno državno ZDA ali ozemlje ZDA."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Koda ameriške zvezne države (dve veliki črki)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefonska številka"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-"Vpišite veljavno CI številko v formatu X.XXX.XXX-X,XXXXXXX-X ali XXXXXXXX."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Vnesite veljavno CI številko."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Vnesite veljavno južnoafriško ID številko"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Vnesite veljavno južnoafriško poštno številko."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "leno sporočilo"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "preusmeritev iz"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ta pot mora biti absolutna, brez imena domene. Primer: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "preusmeri na"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"To je lahko absolutna pot (kot zgoraj) ali popoln URL naslov (ki se začne s "
-"'http://')."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "preusmeritev"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "preusmeritve"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "ključ seje"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "podatki seje"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "čas izteka"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "seja"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "seje"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domena"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "prikazno ime"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "strani"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Vnesite veljavno vrednost."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Vnesite veljaven URL naslov."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Izgleda, da povezava na ta URL ne deluje."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Vnesite veljavno URL okrajšavo. Vrednost sme vsebovati le črke, števila, "
-"podčrtaje ali pomišljaje."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Vnesite veljaven IPv4 naslov."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Vnesite samo števila, ločena z vejicami."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Poskrbite, da bo ta vrednost %(limit_value)s. Trenutno je %(show_value)s."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-"Poskrbite, da bo ta vrednost manj kot ali natanko %(limit_value)s znakov."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Poskrbite, da bo ta vrednost večja ali enaka %(limit_value)s."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Poskrbite, da bo ta vrednost vsaj %(limit_value)d znakov. Trenutno jih ima %"
-"(show_value)d."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Poskrbite, da bo imela ta vrednost največ %(limit_value)d znakov. Trenutno "
-"jih ima %(show_value)d."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s mora biti edinstveno za %(date_field)s %(lookup)s."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s s tem %(field_label)s že obstaja."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Vrednost %r ni veljavna izbira."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "To polje ne more biti prazno."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "To polje ne more biti prazno."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Polje tipa: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Celo število (integer)"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Ta vrednost mora biti celo število."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Ta vrednost mora biti \"True\" ali \"False\"."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Boolova vrednost (True ali False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Niz znakov (vse do %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Z vejico ločena cela števila (integer)"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Datum (brez ure)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Vnesite veljaven datum v zapisu YYYY-MM-DD (leto-mesec-dan)."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Nepravilen datum: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Vnesite veljaven datum/čas v zapisu YYYY-MM-DD HH:MM[:ss[.uuuuuu]] (leto-"
-"mesec-dan ura:minuta:sekunde.mikrosekunde)."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Datum (z uro)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Ta vrednost mora biti decimalno število."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Decimalno število"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-mail naslov"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Pot do datoteke"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Ta vrednost mora biti decimalno število."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Število s plavajočo vejico"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Velika (8 bajtna) cela števila "
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Ta vrednost mora biti None, True ali False."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolova vrednost (True, False ali None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Besedilo"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Čas"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Vnesite veljavni čas v zapisu HH:MM[:ss[.uuuuuu]] (ura:minuta:sekunde."
-"mikrosekunde)."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML besedilo"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Model %(model)s z glavnim ključem %(pk)r ne obstaja."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Tuji ključ (tip odvisen od povezanega polja)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Relacija ena-na-ena"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Relacija več-na-več"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Držite \"Control\" (ali \"Command\" na Mac-u) za izbiro več kot enega."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Prosimo, vnesite veljavne %(self)s ID-e. Vrednost %(value)r ni veljavna."
-msgstr[1] ""
-"Prosimo, vnesite veljavne %(self)s ID-je. Vrednosti %(value)r nista veljavni."
-msgstr[2] ""
-"Prosimo, vnesite veljavne %(self)s ID-je. Vrednosti %(value)r niso veljavne."
-msgstr[3] ""
-"Prosimo, vnesite veljavne %(self)s ID-je. Vrednosti %(value)r niso veljavne."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "To polje je obvezno."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Vnesite celo število."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Vnesite število."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Poskrbite, da skupno ne bo več kot %s števil."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Poskrbite, da skupno ne bo več kot %s decimalnih mest."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Poskrbite, da ne bo več kot %s števil pred decimalno piko."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Vnesite veljaven datum."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Vnesite veljaven čas."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Vnesite veljaven datum/čas."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Datoteka ni bila poslana. Preverite nabor znakov v formi."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Poslali niste nobene datoteke."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Poslana datoteka je prazna."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Poskrbite, da bo imela ta datoteka največ %(max)d znakov (trenutno jih ima %"
-"(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Naložite veljavno sliko. Naložena datoteka ni bila slika ali pa je bila le-"
-"ta okvarjena."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Izberite veljavno možnost. %(value)s ni med ponujenimi izbirami."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Vnesite seznam vrednosti."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Razvrsti"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Prosimo, odpravite podvojene vrednosti za %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Prosimo popravite podvojene vrednosti za %(field)s, ki morajo biti unikatne."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Prosimo popravite podvojene vrednosti za polje %(field_name)s, ki mora biti "
-"edinstveno za %(lookup)s po %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Prosimo odpravite podvojene vrednosti spodaj."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Tuji ključ se ne ujema z glavnim ključem povezanega vnosa."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Izberite veljavno možnost. Te možnosti ni med ponujenimi izbirami."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Izberite veljavno možnost. %s ni med ponujenimi izbirami."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" ni veljavna vrednost za glavni ključ."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "da,ne,morda"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bajt"
-msgstr[1] "%(size)d bajta"
-msgstr[2] "%(size)d bajti"
-msgstr[3] "%(size)d bajtov"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "polnoč"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "poldne"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "ponedeljek"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "torek"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "sreda"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "četrtek"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "petek"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "sobota"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "nedelja"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "pon"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "tor"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "sre"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "čet"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "pet"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "sob"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "ned"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februar"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "marec"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "maj"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "junij"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "julij"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "avgust"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "december"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "maj"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "avg"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "avg."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sep."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dec."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "ali"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "leto"
-msgstr[1] "leti"
-msgstr[2] "leta"
-msgstr[3] "let"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mesec"
-msgstr[1] "meseca"
-msgstr[2] "meseci"
-msgstr[3] "mesecev"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "teden"
-msgstr[1] "tedna"
-msgstr[2] "tedni"
-msgstr[3] "tednov"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dan"
-msgstr[1] "dneva"
-msgstr[2] "dnevi"
-msgstr[3] "dni"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ura"
-msgstr[1] "uri"
-msgstr[2] "ure"
-msgstr[3] "ur"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuta"
-msgstr[1] "minuti"
-msgstr[2] "minute"
-msgstr[3] "minut"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minute"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "j.n.Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y, H:i:s"
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s je bil uspešno ustvarjen."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s je bil uspešno posodobljen."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s je bil uspešno izbrisan."
diff --git a/parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 3fb28cc..0000000
--- a/parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.po
deleted file mode 100644
index f41c3ca..0000000
--- a/parts/django/django/conf/locale/sl/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,165 +0,0 @@
-# translation of djangojs.po to
-# Copyright (C) 2007
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Gasper Zejn <zejn@kiberpipa.org>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: djangojs\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-08 14:41+0200\n"
-"PO-Revision-Date: 2010-05-06 01:12+0100\n"
-"Last-Translator: Jure Cuhalev <gandalf@owca.info>\n"
-"Language-Team: <sl@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Slovenian\n"
-"X-Poedit-Country: SLOVENIA\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
-"%100==4 ? 2 : 3);\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Možne %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Izberi vse"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Dodaj"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Odstrani"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Izbran %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Izberite in kliknite "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Izbriši vse"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s od %(cnt)s izbran"
-msgstr[1] "%(sel)s od %(cnt)s izbrana"
-msgstr[2] "%(sel)s od %(cnt)s izbrani"
-msgstr[3] "%(sel)s od %(cnt)s izbranih"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Na posameznih poljih, ki imajo omogočeno urejanje, imate neshranjene "
-"spremembe. Če boste izvedli dejanje, bodo vaše neshranjene spremembe "
-"izgubljene."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr ""
-"Izbrali ste dejanje, vendar niste shranili sprememb na posameznih poljih. "
-"Kliknite na 'V redu', da boste shranili. Dejanje boste morali ponovno "
-"izvesti."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr ""
-"Izbrali ste dejanje, vendar niste naredili nobenih sprememb na posameznih "
-"poljih. Verjetno iščete gumb Pojdi namesto Shrani."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januar Februar Marec April Maj Junij Julij Avgust September Oktober November "
-"December"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "N P T S Č P S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Prikaži"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Skrij"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Nedelja Ponedeljek Torek Sreda Četrtek Petek Sobota"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Sedaj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "URA"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Izberite čas"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Polnoč"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "Ob 6h"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Opoldne"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Prekliči"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Danes"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Koledar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Včeraj"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Jutri"
diff --git a/parts/django/django/conf/locale/sl/__init__.py b/parts/django/django/conf/locale/sl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/sl/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/sl/formats.py b/parts/django/django/conf/locale/sl/formats.py
deleted file mode 100644
index 4007f10..0000000
--- a/parts/django/django/conf/locale/sl/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd. F Y'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j. M. Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/sq/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/sq/LC_MESSAGES/django.mo
deleted file mode 100644
index 379de3f..0000000
--- a/parts/django/django/conf/locale/sq/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sq/LC_MESSAGES/django.po b/parts/django/django/conf/locale/sq/LC_MESSAGES/django.po
deleted file mode 100644
index 4750c51..0000000
--- a/parts/django/django/conf/locale/sq/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5011 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-27 22:39-0800\n"
-"PO-Revision-Date: 2010-01-27 23:01+0200\n"
-"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr ""
-
-#: forms/models.py:964
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr ""
-
-#: contrib/admin/options.py:1006
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] ""
-msgstr[1] ""
-
-#: db/models/base.py:775
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr ""
-
-#: db/models/base.py:790 db/models/base.py:798
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Ka tashmë një %(model_name)s me këtë %(field_label)s."
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr ""
-
-#: contrib/admin/options.py:860 contrib/admin/options.py:1072
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr ""
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr ""
-
-#: template/defaultfilters.py:806
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: template/defaultfilters.py:808
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:810
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: contrib/admin/sites.py:447
-#, python-format
-msgid "%s administration"
-msgstr ""
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr ""
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: contrib/comments/admin.py:60
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:7
-#, python-format
-msgid ""
-"<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr ""
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr ""
-
-#: contrib/admin/helpers.py:19
-msgid "Action:"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_list.html:57
-#, python-format
-msgid "Add %(name)s"
-msgstr ""
-
-#: contrib/admin/options.py:834
-#, python-format
-msgid "Add %s"
-msgstr ""
-
-#: contrib/admin/widgets.py:238
-msgid "Add Another"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:33
-#: contrib/admin/templates/admin/edit_inline/tabular.html:78
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr ""
-
-#: contrib/admin/options.py:561
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "All %(total_count)s %(module_name)s selected"
-msgstr ""
-
-#: contrib/admin/templatetags/admin_list.py:240
-msgid "All dates"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr ""
-
-#: contrib/comments/admin.py:44
-msgid "Approve selected comments"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr ""
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1094
-msgid "Are you sure?"
-msgstr ""
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr ""
-
-#: utils/dates.py:19
-msgid "August"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: conf/global_settings.py:58
-msgid "Basque"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: db/models/fields/__init__.py:892
-msgid "Big (8 byte) integer"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: db/models/fields/__init__.py:512
-msgid "Boolean (Either True or False)"
-msgstr ""
-
-#: db/models/fields/__init__.py:923
-msgid "Boolean (Either True, False or None)"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: conf/global_settings.py:83
-msgid "Brazilian Portuguese"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr ""
-
-#: contrib/admin/options.py:925
-#, python-format
-msgid "Change %s"
-msgstr ""
-
-#: contrib/admin/options.py:1124
-#, python-format
-msgid "Change history: %s"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr ""
-
-#: contrib/auth/admin.py:121
-#, python-format
-msgid "Change password: %s"
-msgstr ""
-
-#: contrib/admin/widgets.py:96
-msgid "Change:"
-msgstr ""
-
-#: contrib/admin/options.py:565
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:556
-#, python-format
-msgid "Changed %s."
-msgstr ""
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:16
-msgid "Clear selection"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:14
-msgid "Click here to select all objects across all pages"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: db/models/fields/__init__.py:582
-msgid "Comma-separated integers"
-msgstr ""
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr ""
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: conf/global_settings.py:67
-msgid "Croatian"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/admin/widgets.py:96
-msgid "Currently:"
-msgstr ""
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr ""
-
-#: utils/translation/trans_real.py:531
-msgid "DATETIME_FORMAT"
-msgstr ""
-
-#: utils/translation/trans_real.py:530
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr ""
-
-#: contrib/admin/options.py:970
-msgid "Database error"
-msgstr ""
-
-#: db/models/fields/__init__.py:684
-msgid "Date (with time)"
-msgstr ""
-
-#: db/models/fields/__init__.py:596
-msgid "Date (without time)"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr ""
-
-#: contrib/admin/widgets.py:72
-msgid "Date:"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr ""
-
-#: utils/dates.py:20
-msgid "December"
-msgstr ""
-
-#: db/models/fields/__init__.py:752
-msgid "Decimal number"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:291
-msgid "Delete"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr ""
-
-#: contrib/admin/actions.py:85
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr ""
-
-#: contrib/admin/options.py:570
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/auth/models.py:187
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-
-#: contrib/auth/models.py:185
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-
-#: contrib/auth/models.py:186
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: conf/global_settings.py:79
-msgid "Dutch"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr ""
-
-#: db/models/fields/__init__.py:807
-msgid "E-mail address"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr ""
-
-#: forms/fields.py:251
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Sigurohuni që nuk ka më shumë se %s vende dhjetore."
-
-#: forms/fields.py:252
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Sigurohuni që nuk ka më tepër se %s shifra para presjes dhjetore."
-
-#: forms/fields.py:250
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Sigurohuni që nuk ka më tepër se %s shifra gjithsej."
-
-#: forms/fields.py:424
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: core/validators.py:129
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: core/validators.py:135
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: core/validators.py:100
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-
-#: core/validators.py:123 forms/fields.py:197 forms/fields.py:249
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:118 forms/fields.py:196 forms/fields.py:248
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: forms/fields.py:653 forms/fields.py:715 forms/models.py:961
-msgid "Enter a list of values."
-msgstr "Jepni një listë vlerash."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-
-#: forms/fields.py:225 forms/fields.py:247
-msgid "Enter a number."
-msgstr "Jepni një numër."
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: core/validators.py:88 forms/fields.py:854
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Jepni një 'slug' të vlefshëm, të përbërë nga shkronja, numra, nëvija ose "
-"vija në mes."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: core/validators.py:91 forms/fields.py:847
-msgid "Enter a valid IPv4 address."
-msgstr "Jepni një vendndodhje të vlefshme IPv4."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: core/validators.py:69 forms/fields.py:510
-msgid "Enter a valid URL."
-msgstr "Jepni një URL të vlefshme."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: db/models/fields/__init__.py:600
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Jepni një datë të vlefshme në formatin YYYY-MM-DD."
-
-#: forms/fields.py:309 forms/fields.py:819
-msgid "Enter a valid date."
-msgstr "Jepni një datë të vlefshme."
-
-#: db/models/fields/__init__.py:682
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Jepni një datë/kohë të vlefshme, në formatin YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: forms/fields.py:363
-msgid "Enter a valid date/time."
-msgstr "Jepni një datë/kohë të vlefshme."
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:85 forms/fields.py:414
-msgid "Enter a valid e-mail address."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: db/models/fields/__init__.py:1027
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Jepni një kohë të vlefshme, në formatin HH:MM[:ss[.uuuuuu]]."
-
-#: forms/fields.py:337 forms/fields.py:820
-msgid "Enter a valid time."
-msgstr "Jepni një kohë të vlefshme."
-
-#: core/validators.py:19 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Jepni vlerë të vlefshme."
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: forms/fields.py:195
-msgid "Enter a whole number."
-msgstr "Jepni një numër të tërë."
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr ""
-
-#: core/validators.py:94 db/models/fields/__init__.py:587
-msgid "Enter only digits separated by commas."
-msgstr "Jepni vetëm shifra të ndara nga presje."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: conf/global_settings.py:57
-msgid "Estonian"
-msgstr ""
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr ""
-
-#: utils/dates.py:18
-msgid "February"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: db/models/fields/__init__.py:72
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr ""
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: db/models/fields/__init__.py:814 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_list.html:76
-msgid "Filter"
-msgstr ""
-
-#: conf/global_settings.py:60
-msgid "Finnish"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr ""
-
-#: contrib/comments/admin.py:40
-msgid "Flag selected comments"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: db/models/fields/__init__.py:839
-msgid "Floating point number"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: db/models/fields/related.py:757
-msgid "Foreign Key (type determined by related field)"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: conf/global_settings.py:61
-msgid "French"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: conf/global_settings.py:62
-msgid "Frisian"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: conf/global_settings.py:64
-msgid "Galician"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:293
-msgid "Geometry collection"
-msgstr ""
-
-#: conf/global_settings.py:72
-msgid "Georgian"
-msgstr ""
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/auth/admin.py:29
-msgid "Groups"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: conf/global_settings.py:65
-msgid "Hebrew"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: conf/global_settings.py:66
-msgid "Hindi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: db/models/fields/related.py:959
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Mbani të shtypur \"Control\", ose \"Command\" në Mac, për të përzgjedhur më "
-"shumë se një."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:36
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: conf/global_settings.py:68
-msgid "Hungarian"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:905
-msgid "IP address"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: conf/global_settings.py:69
-msgid "Icelandic"
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/auth/admin.py:28
-msgid "Important dates"
-msgstr ""
-
-#: contrib/auth/models.py:191
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-
-#: db/models/fields/__init__.py:471 db/models/fields/__init__.py:867
-#: db/models/fields/__init__.py:963 db/models/fields/__init__.py:974
-#: db/models/fields/__init__.py:1001
-msgid "Integer"
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: db/models/fields/__init__.py:601
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Datë e pavlefshme: %s"
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: conf/global_settings.py:63
-msgid "Irish"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: conf/global_settings.py:70
-msgid "Italian"
-msgstr ""
-
-#: contrib/admin/options.py:736
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr ""
-
-#: utils/dates.py:18
-msgid "January"
-msgstr ""
-
-#: conf/global_settings.py:71
-msgid "Japanese"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: conf/global_settings.py:74
-msgid "Kannada"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: conf/global_settings.py:73
-msgid "Khmer"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: conf/global_settings.py:75
-msgid "Korean"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr ""
-
-#: conf/global_settings.py:77
-msgid "Latvian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:273
-msgid "Line string"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: conf/global_settings.py:76
-msgid "Lithuanian"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/admin/sites.py:402 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr ""
-
-#: contrib/auth/views.py:60
-msgid "Logged out"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/admin/sites.py:313 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-
-#: contrib/admin/widgets.py:126
-msgid "Lookup"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: utils/translation/trans_real.py:554
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: conf/global_settings.py:78
-msgid "Macedonian"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: db/models/fields/related.py:939
-msgid "Many-to-many relationship"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: db/models/fields/related.py:755
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr ""
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:289
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:285
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:281
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr ""
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "No"
-msgstr ""
-
-#: contrib/admin/options.py:754
-msgid "No action selected."
-msgstr ""
-
-#: contrib/admin/options.py:574
-msgid "No fields changed."
-msgstr ""
-
-#: forms/fields.py:422
-msgid "No file was submitted."
-msgstr "Nuk u parashtrua kartelë."
-
-#: forms/fields.py:421
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Nuk u parashtrua ndonjë kartelë. Kontrolloni llojin e kodimit te forma."
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr ""
-
-#: contrib/admin/options.py:137 contrib/admin/options.py:152
-msgid "None"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: conf/global_settings.py:80
-msgid "Norwegian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: utils/dates.py:19
-msgid "November"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr ""
-
-#: utils/dates.py:19
-msgid "October"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/admin/util.py:175
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr ""
-
-#: contrib/admin/util.py:170
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr ""
-
-#: db/models/fields/related.py:879
-msgid "One-to-one relationship"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: forms/formsets.py:287 forms/formsets.py:289
-msgid "Order"
-msgstr "Rend"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr ""
-
-#: contrib/auth/admin.py:111
-msgid "Password changed successfully."
-msgstr ""
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr ""
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/auth/admin.py:27
-msgid "Permissions"
-msgstr ""
-
-#: conf/global_settings.py:59
-msgid "Persian"
-msgstr ""
-
-#: contrib/auth/admin.py:26
-msgid "Personal info"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: forms/models.py:542
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-
-#: forms/models.py:538
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr ""
-
-#: forms/models.py:548
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-
-#: forms/models.py:556
-msgid "Please correct the duplicate values below."
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:65
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: db/models/fields/related.py:1020
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Ju lutem, jepni ID-ra %(self)s të vlefshme. Vlera %(value)r është e "
-"pavlefshme."
-msgstr[1] ""
-"Ju lutem, jepni ID-ra %(self)s të vlefshme. Vlerat %(value)r janë të "
-"pavlefshme"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr ""
-
-#: contrib/admin/sites.py:306 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:269
-msgid "Point"
-msgstr ""
-
-#: conf/global_settings.py:81
-msgid "Polish"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:277
-msgid "Polygon"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: conf/global_settings.py:82
-msgid "Portuguese"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr ""
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:36
-#: contrib/admin/templates/admin/edit_inline/tabular.html:81
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr ""
-
-#: contrib/comments/admin.py:48
-msgid "Remove selected comments"
-msgstr ""
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-#: contrib/auth/models.py:180
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: conf/global_settings.py:84
-msgid "Romanian"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr ""
-
-#: conf/global_settings.py:85
-msgid "Russian"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr ""
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: forms/fields.py:577 forms/fields.py:652
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Përzgjidhni një zgjedhje të vlefshme. %(value)s nuk është nga zgjedhjet e "
-"mundshme."
-
-#: forms/models.py:962
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-"Përzgjidhni një zgjedhje të vlefshme. %s nuk është një nga zgjedhjet e "
-"mundshme."
-
-#: forms/models.py:886
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Përzgjidhni një zgjedhje të vlefshme. Ajo zgjedhje nuk është një nga "
-"zgjedhjet e mundshme."
-
-#: contrib/admin/templates/admin/actions.html:14
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr ""
-
-#: utils/dates.py:19
-msgid "September"
-msgstr ""
-
-#: conf/global_settings.py:88
-msgid "Serbian"
-msgstr ""
-
-#: conf/global_settings.py:89
-msgid "Serbian Latin"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: conf/global_settings.py:96
-msgid "Simplified Chinese"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/admin/sites.py:388
-msgid "Site administration"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: conf/global_settings.py:86
-msgid "Slovak"
-msgstr ""
-
-#: conf/global_settings.py:87
-msgid "Slovenian"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: conf/global_settings.py:55
-msgid "Spanish"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: db/models/fields/__init__.py:554 db/models/fields/__init__.py:984
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/admin/actions.py:60
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr ""
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: conf/global_settings.py:90
-msgid "Swedish"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: utils/translation/trans_real.py:532
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: conf/global_settings.py:91
-msgid "Tamil"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: conf/global_settings.py:92
-msgid "Telugu"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: db/models/fields/__init__.py:1007
-msgid "Text"
-msgstr ""
-
-#: conf/global_settings.py:93
-msgid "Thai"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr ""
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr ""
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr ""
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-
-#: contrib/admin/options.py:640
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
-
-#: contrib/admin/options.py:683
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-
-#: contrib/admin/options.py:675
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
-
-#: contrib/admin/options.py:1087
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr ""
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s u krijua me sukses."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s u fshi."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s u përditësua me sukses."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: forms/models.py:820
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-
-#: forms/fields.py:423
-msgid "The submitted file is empty."
-msgstr "Kartela e parashtruar është bosh."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-
-#: core/validators.py:71 forms/fields.py:511
-msgid "This URL appears to be a broken link."
-msgstr "Kjo URL duket se është lidhje e dëmtuar."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr ""
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-
-#: db/models/fields/__init__.py:67
-msgid "This field cannot be blank."
-msgstr ""
-
-#: db/models/fields/__init__.py:66
-msgid "This field cannot be null."
-msgstr "Kjo fushë nuk mund të jetë bosh."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Kjo fushë është e domosdoshme."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr ""
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-
-#: db/models/fields/__init__.py:750
-msgid "This value must be a decimal number."
-msgstr "Kjo vlerë duhet të jetë një numër dhjetor."
-
-#: db/models/fields/__init__.py:837 db/models/fields/__init__.py:865
-msgid "This value must be a float."
-msgstr ""
-
-#: db/models/fields/__init__.py:475
-msgid "This value must be an integer."
-msgstr "Kjo vlerë duhet të jetë numër i plotë."
-
-#: db/models/fields/__init__.py:921
-msgid "This value must be either None, True or False."
-msgstr "Kjo vlerë duhet të jetë None, True ose False."
-
-#: db/models/fields/__init__.py:510
-msgid "This value must be either True or False."
-msgstr "Kjo vlerë duhet të jetë True ose False."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value must contain only letters, numbers and underscores."
-msgstr ""
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: db/models/fields/__init__.py:1023
-msgid "Time"
-msgstr ""
-
-#: contrib/admin/widgets.py:72
-msgid "Time:"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: conf/global_settings.py:97
-msgid "Traditional Chinese"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: conf/global_settings.py:94
-msgid "Turkish"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr ""
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1103
-msgid "URL"
-msgstr ""
-
-#: conf/global_settings.py:95
-msgid "Ukrainian"
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
-msgid "Unknown"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr ""
-
-#: forms/fields.py:459
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Ngarkoni një figurë të vlefshme. Kartela që ngarkuat ose nuk qe figurë, ose "
-"qe figurë e dëmtuar."
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/auth/models.py:184
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr ""
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr ""
-
-#: contrib/admin/sites.py:329 contrib/admin/sites.py:335
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: db/models/fields/__init__.py:65
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/formtools/wizard.py:132
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr ""
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: db/models/fields/__init__.py:1111
-msgid "XML text"
-msgstr ""
-
-#: utils/translation/trans_real.py:553
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "Yes"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr ""
-
-#: contrib/admin/options.py:654 contrib/admin/options.py:687
-#, python-format
-msgid "You may add another %s below."
-msgstr ""
-
-#: contrib/admin/options.py:644 contrib/admin/options.py:677
-msgid "You may edit it again below."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/admin/sites.py:332 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr ""
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr ""
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr ""
-
-#: contrib/auth/models.py:186
-msgid "active"
-msgstr ""
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr ""
-
-#: contrib/admin/options.py:556 contrib/admin/options.py:566
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:797
-#: forms/models.py:544
-msgid "and"
-msgstr ""
-
-#: contrib/comments/admin.py:43
-msgid "approved"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr ""
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr ""
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr ""
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr ""
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr ""
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr ""
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr ""
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr ""
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr ""
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr ""
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr ""
-
-#: contrib/auth/models.py:189
-msgid "date joined"
-msgstr ""
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr ""
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr ""
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr ""
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr ""
-
-#: contrib/auth/models.py:183
-msgid "e-mail address"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr ""
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr ""
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr ""
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr ""
-
-#: contrib/auth/models.py:181
-msgid "first name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr ""
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr ""
-
-#: contrib/comments/admin.py:39
-msgid "flagged"
-msgstr ""
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr ""
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr ""
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr ""
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:190
-msgid "groups"
-msgstr ""
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr ""
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr ""
-
-#: contrib/auth/models.py:188
-msgid "last login"
-msgstr ""
-
-#: contrib/auth/models.py:182
-msgid "last name"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr ""
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr ""
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr ""
-
-#: utils/dates.py:23
-msgid "may"
-msgstr ""
-
-#: contrib/auth/models.py:367
-msgid "message"
-msgstr ""
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr ""
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr ""
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr ""
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr ""
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr ""
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr ""
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr ""
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr ""
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr ""
-
-#: utils/text.py:128
-msgid "or"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr ""
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr ""
-
-#: contrib/auth/models.py:184
-msgid "password"
-msgstr ""
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr ""
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr ""
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr ""
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr ""
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr ""
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr ""
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr ""
-
-#: contrib/comments/admin.py:47
-msgid "removed"
-msgstr ""
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr ""
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr ""
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr ""
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr ""
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr ""
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr ""
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr ""
-
-#: contrib/auth/models.py:185
-msgid "staff status"
-msgstr ""
-
-#: contrib/auth/models.py:187
-msgid "superuser status"
-msgstr ""
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr ""
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr ""
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr ""
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr ""
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr ""
-
-#: contrib/auth/models.py:196 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr ""
-
-#: contrib/auth/models.py:192
-msgid "user permissions"
-msgstr ""
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr ""
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr ""
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr ""
-
-#: contrib/auth/models.py:180
-msgid "username"
-msgstr ""
-
-#: contrib/auth/models.py:197
-msgid "users"
-msgstr ""
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr ""
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:775
-msgid "yes,no,maybe"
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#~ msgid ""
-#~ "Ensure this value has at least %(min)d characters (it has %(length)d)."
-#~ msgstr ""
-#~ "Sigurohuni që kjo vlerë ka të paktën %(min)d shenja (ka gjatësinë %"
-#~ "(length)d)."
-
-#~ msgid ""
-#~ "Ensure this value has at most %(max)d characters (it has %(length)d)."
-#~ msgstr ""
-#~ "Sigurohuni që kjo vlerë ka e shumta %(max)d shenja (ka gjatësinë %(length)"
-#~ "d)."
-
-#~ msgid "Ensure this value is greater than or equal to %s."
-#~ msgstr "Sigurohuni që vlera është më e madhe ose e barabartë me %s."
-
-#~ msgid "Ensure this value is less than or equal to %s."
-#~ msgstr "Sigurohuni që vlera është më e vogël ose e barabartë me %s."
diff --git a/parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 96682be..0000000
--- a/parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.po
deleted file mode 100644
index ed28fe0..0000000
--- a/parts/django/django/conf/locale/sq/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,119 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-27 22:39-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Now"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Midnight"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "6 a.m."
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Noon"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:89
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Cancel"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:129
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:178
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-msgid "Calendar"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:176
-msgid "Yesterday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Tomorrow"
-msgstr ""
diff --git a/parts/django/django/conf/locale/sq/__init__.py b/parts/django/django/conf/locale/sq/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/sq/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/sq/formats.py b/parts/django/django/conf/locale/sq/formats.py
deleted file mode 100644
index 1a66876..0000000
--- a/parts/django/django/conf/locale/sq/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'g.i.s.A'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'Y-m-d'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/sr/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/sr/LC_MESSAGES/django.mo
deleted file mode 100644
index 28995bf..0000000
--- a/parts/django/django/conf/locale/sr/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sr/LC_MESSAGES/django.po b/parts/django/django/conf/locale/sr/LC_MESSAGES/django.po
deleted file mode 100644
index 23c68cb..0000000
--- a/parts/django/django/conf/locale/sr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5152 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 19:53+0200\n"
-"PO-Revision-Date: 2010-08-06 19:47+0100\n"
-"Last-Translator: Janos Guljas <janos@janos.in.rs>\n"
-"Language-Team: Branko Vukelic <bg.branko@gmail.com> & Janos Guljas "
-"<janos@janos.in.rs> & Nesh <djnesh@gmail.com> & Petar <petar.maric@gmail."
-"com>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "арапски"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "бугарски"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "бенгалски"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "босански"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "каталонски"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "чешки"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "велшки"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "дански"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "немачки"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "грчки"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "енглески"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "британски енглески"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "шпански"
-
-#: conf/global_settings.py:57
-msgid "Argentinian Spanish"
-msgstr "аргентински шпански"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "естонски"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "баскијски"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "персијски"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "фински"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "француски"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "фризијски"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "ирски"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "галски"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "хебрејски"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "хинду"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "хрватски"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "мађарски"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "индонежански"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "исландски"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "италијански"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "јапански"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "грузијски"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "камбодијски"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "канада"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "корејски"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "литвански"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "латвијски"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "македонски"
-
-#: conf/global_settings.py:81
-msgid "Malayalam"
-msgstr "малајаламски"
-
-#: conf/global_settings.py:82
-msgid "Mongolian"
-msgstr "монголски"
-
-#: conf/global_settings.py:83
-msgid "Dutch"
-msgstr "холандски"
-
-#: conf/global_settings.py:84
-msgid "Norwegian"
-msgstr "норвешки"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Bokmal"
-msgstr "норвешки кнјжевни"
-
-#: conf/global_settings.py:86
-msgid "Norwegian Nynorsk"
-msgstr "норвешки нови"
-
-#: conf/global_settings.py:87
-msgid "Polish"
-msgstr "пољски"
-
-#: conf/global_settings.py:88
-msgid "Portuguese"
-msgstr "португалски"
-
-#: conf/global_settings.py:89
-msgid "Brazilian Portuguese"
-msgstr "бразилски португалски"
-
-#: conf/global_settings.py:90
-msgid "Romanian"
-msgstr "румунски"
-
-#: conf/global_settings.py:91
-msgid "Russian"
-msgstr "руски"
-
-#: conf/global_settings.py:92
-msgid "Slovak"
-msgstr "словачки"
-
-#: conf/global_settings.py:93
-msgid "Slovenian"
-msgstr "словеначки"
-
-#: conf/global_settings.py:94
-msgid "Albanian"
-msgstr "албански"
-
-#: conf/global_settings.py:95
-msgid "Serbian"
-msgstr "српски"
-
-#: conf/global_settings.py:96
-msgid "Serbian Latin"
-msgstr "српски (латиница)"
-
-#: conf/global_settings.py:97
-msgid "Swedish"
-msgstr "шведски"
-
-#: conf/global_settings.py:98
-msgid "Tamil"
-msgstr "тамилски"
-
-#: conf/global_settings.py:99
-msgid "Telugu"
-msgstr "телугу"
-
-#: conf/global_settings.py:100
-msgid "Thai"
-msgstr "тајландски"
-
-#: conf/global_settings.py:101
-msgid "Turkish"
-msgstr "турски"
-
-#: conf/global_settings.py:102
-msgid "Ukrainian"
-msgstr "украјински"
-
-#: conf/global_settings.py:103
-msgid "Vietnamese"
-msgstr "вијетнамски"
-
-#: conf/global_settings.py:104
-msgid "Simplified Chinese"
-msgstr "новокинески"
-
-#: conf/global_settings.py:105
-msgid "Traditional Chinese"
-msgstr "старокинески"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Успешно обрисано: %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Да ли сте сигурни?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Бриши означене објекте класе %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Сви"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Сви датуми"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Данас"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Последњих 7 дана"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Овај месец"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Ова година"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "Yes"
-msgstr "Да"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
-msgid "No"
-msgstr "Не"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
-msgid "Unknown"
-msgstr "Непознато"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Радња:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "време радње"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id објекта"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "опис објекта"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "ознака радње"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "опис измене"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "запис у логовима"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "записи у логовима"
-
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
-msgid "None"
-msgstr "Ништа"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Измењена поља %s"
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "и"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Сачуван објекат „%(object)s“ класе %(name)s."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Измењена поља %(list)s објеката „%(object)s“ класе %(name)s ."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Обрисан објекат „%(object)s“ класе %(name)s."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Без измена у пољима."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Објекат „%(obj)s“ класе %(name)s сачуван је успешно."
-
-#: contrib/admin/options.py:647 contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Доле можете поново да уносите измене."
-
-#: contrib/admin/options.py:657 contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Доле можете да додате нови објекат класе %s"
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Објекат „%(obj)s“ класе %(name)s измењен је успешно."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Објекат „%(obj)s“ класе %(name)s додат је успешно. Доле можете унети додатне "
-"измене."
-
-#: contrib/admin/options.py:740 contrib/admin/options.py:997
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"Потребно је изабрати објекте да би се извршила акција над њима. Ниједан "
-"објекат није промењен."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Није изабрана ниједна акција."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Додај објекат класе %s"
-
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Објекат класе %(name)s са примарним кључем %(key)r не постоји."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Измени објекат класе %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Грешка у бази података"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s објекат класе %(name)s измењен је успешно."
-msgstr[1] "%(count)s објеката класе %(name)s измењени су успешно."
-msgstr[2] "%(count)s објекта класе %(name)s измењено је успешно."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s изабран"
-msgstr[1] "%(total_count)s изабрано"
-msgstr[2] "%(total_count)s изабраних"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 од %(cnt)s изабрано"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Објекат „%(obj)s“ класе %(name)s успешно је обрисан."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Историјат измена: %s"
-
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Унесите тачно корисничко име и лозинку. Пазите на разлику између малих и "
-"великих слова у оба поља."
-
-#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Пријавите се поново пошто је ваша сесија истекла."
-
-#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Изгледа да ваш браузер није подешен да прима колачиће. Укључите колачиће, "
-"освежите ову страницу и пробајте поново."
-
-#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Корисничка имена не смеју да садрже знак „@“."
-
-#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Ваша имејл адреса није ваше корисничко име. Пробајте са „%s“."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Администрација система"
-
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Пријава"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "Администрација %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Датум:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Време:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Тренутно:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Измена:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Претражи"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Додај још један"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Страница није пронађена"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Жао нам је, тражена страница није пронађена."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Почетна"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Грешка на серверу"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Грешка на серверу (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Грешка на серверу <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Дошло је до грешке. Администратор сајта је обавештен имејлом и грешка ће "
-"бити ускоро отклоњена. Хвала на стрпљењу."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Покрени одабрану радњу"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Почни"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Изабери све објекте на овој страници."
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Изабери све %(module_name)s од %(total_count)s укупно."
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Поништи избор"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Добродошли,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Документација"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Промена лозинке"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Одјава"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django администрација сајта"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django администрација"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Додај"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Историјат"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Преглед на сајту"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Исправите грешку доле."
-msgstr[1] "Исправите грешке доле."
-msgstr[2] "Исправите грешке доле."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Додај објекат класе %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Филтер"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:300
-msgid "Delete"
-msgstr "Обриши"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Уклањање %(object_name)s „%(escaped_object)s“ повлачи уклањање свих објеката "
-"који су повезани са овим објектом, али ваш налог нема дозволе за брисање "
-"следећих типова објеката:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Да сигурни да желите да обришете %(object_name)s „%(escaped_object)s“? "
-"Следећи објекти који су у вези са овим објектом ће такође бити обрисани:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Да, сигуран сам"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Брисање више објеката"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Уклањање %(object_name)s повлачи уклањање свих објеката који су повезани са "
-"овим објектом, али ваш налог нема дозволе за брисање следећих типова "
-"објеката:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"Да сигурни да желите да обришете одабране %(object_name)s? Следећи објекти "
-"који су у вези са овим објектом ће такође бити обрисани:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Модели доступни у апликацији %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Измени"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Немате дозволе да уносите било какве измене."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Последње радње"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Моје радње"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Нема података"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Непознат садржај"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Нешто није уреду са вашом базом података. Проверите да ли постоје "
-"одговарајуће табеле и да ли одговарајући корисник има приступ бази."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Корисник:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Лозинка:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Датум/време"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Корисник"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Радња"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Овај објекат нема забележен историјат измена. Вероватно није додат кроз овај "
-"сајт за администрацију."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Прикажи све"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Сачувај"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Претрага"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 резултат"
-msgstr[1] "%(counter)s резултата"
-msgstr[2] "%(counter)s резултата"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "укупно %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Сачувај као нови"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Сачувај и додај следећи"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Сачувај и настави са изменама"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Прво унесите корисничко име и лозинку. Потом ћете моћи да мењате још "
-"корисничких подешавања."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:8
-msgid "Enter a username and password."
-msgstr "Унесите корисничко име и лозинку"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Унесите нову лозинку за корисника <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Лозинка"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Лозинка (поновите)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Ради провере тачности поново унесите лозинку коју сте унели горе."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Додај још један објекат класе %(verbose_name)s."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Обриши"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Брисање?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Хвала што сте данас провели време на овом сајту."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Поновна пријава"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Измена лозинке"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Успешна измена лозинке"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Ваша лозинка је измењена."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Из безбедносних разлога прво унесите своју стару лозинку, а нову затим "
-"унесите два пута да бисмо могли да проверимо да ли сте је правилно унели."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Стара лозинка"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Нова лозинка"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Измени моју лозинку"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Ресетовање лозинке"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Ресетовање лозинке успешно"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Ваша лозинка је постављена. Можете се пријавити."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Потврда ресетовања лозинке"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Унесите нову лозинку"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Унесите нову лозинку два пута како бисмо могли да проверимо да ли сте је "
-"правилно унели."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Нова лозинка:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Потврда лозинке:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Ресетовање лозинке неуспешно"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Линк за ресетовање лозинке није важећи, вероватно зато што је већ "
-"искоришћен. Поново затражите ресетовање лозинке."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Ресетовање лозинке успешно."
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Послали смо упутства за постављање нове лозинке на имејл адресу коју сте нам "
-"дали. Упутства ћете добити ускоро."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Ову поруку сте примили зато што сте захтевали ресетовање лозинке"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "за ваш кориснички налог на сајту %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Идите на следећу страницу и поставите нову лозинку."
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Уколико сте заборавили, ваше корисничко име:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Хвала што користите наш сајт!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Екипа сајта %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Заборавили сте лозинку? Унесите своју имејл адресу доле и послаћемо вам "
-"упутства за постављање нове."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Имејл адреса:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Ресетуј моју лозинку"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Сви датуми"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Одабери објекат класе %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Одабери објекат класе %s за измену"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "сајт"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "темплејт"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "таг:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "филтер:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "вју:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Апликација %r није пронађена"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Модел %(model_name)r није пронађен у апликацији %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "повезани објекти класе `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "модел:"
-
-# WARN: possible breakage in future
-# This string is interpolated in strings below, which can cause breakage in
-# future releases.
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "класе `%(app_label)s.%(object_name)s`"
-
-# WARN: possible breakage in future
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "сви повезани објекти %s"
-
-# WARN: possible breakage in future
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "број повезаних објеката %s"
-
-# WARN: possible breakage in future
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Поља у повезаним објектима %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s не изгледа као „urlpattern“ објекат"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Букмарклети"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Букмарклети документације"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Да бисте инсталирали букмарклет, превуците линк до својих\n"
-"букмаркова или кликните десним дугметом и додајте међу букмарке. Након тога\n"
-"букмарклетима можете приступити са сваке странице на сајту. Имајте на уму\n"
-"да неки букмарклети захтевају да сајту приступите са рачунара који су\n"
-"означени као „интерни“ (питајте администратора вашег система уколико нисте\n"
-"сигурни да ли је ваш рачунар „интерни“).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Документација за ову страницу"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Води од било које странице до документаицје погледа који је генерисао ту "
-"страницу."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Прикажи ID објекта"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Приказује content-type и јединствени ID за страницу која преставља један "
-"објекат."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Измени овај објекат (у овом прозору)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Води у администрациони страницу за странице које престављају један објекат"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Измени овај објекат (нови прозор)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"Исто као претходни, али отвара администрациону страницу у новом прозору."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Лични подаци"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Дозволе"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Важни датуми"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Групе"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Лозинка успешно измењена."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Измени лозинку: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Корисник"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Неопходно. Највише 30 словних места. Само алфанумерички знаци (слова, бројке "
-"и @/./+/-/_)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Ова вредност може садржати само слова, бројке и @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Потврда лозинке"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Корисник са тим корисничким именом већ постоји."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Два поља за лозинке се нису поклопила."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Овај налог је неактиван."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Изгледа да су колачићи искључени у вашем браузеру. Они морају бити укључени "
-"да би сте се пријавили."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Имејл адреса"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Та имејл адреса није у вези ни са једним налогом. Да ли сте сигурни да сте "
-"се већ регистровали?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Ресетовање лозинке на %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Потврда нове лозинке"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Ваша стара лознка није правилно унесена. Унесите је поново."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "име"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "шифра дозволе"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "дозвола"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "дозволе"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "група"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "групе"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "корисничко име"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Неопходно. Највише 30 словних места. Само алфанумерички знаци (слова, бројке "
-"и @/./+/-/_)."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "име"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "презиме"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "имејл адреса"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "лозинка"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Користите '[algo]$[salt]$[hexdigest]' или <a href=\"password/\">формулар за "
-"унос лозинке</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "статус члана посаде"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Означава да ли корисник може да се пријави на овај сајт за администрацију."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "активан"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Означава да ли се корисник сматра активним. Деселектујте ово уместо да "
-"бришете налог."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "статус администратора"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Означава да ли корисник има све дозволе без додељивања појединачних дозвола."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "последња пријава"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "датум регистрације"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Поред ручно додељених дозвола, овај корисник ће имати и дозволе додељене "
-"гурпама којима припада."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "корисничке дозволе"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "корисник"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "корисници"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "порука"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Одјављен"
-
-#: contrib/auth/management/commands/createsuperuser.py:24
-#: core/validators.py:120 forms/fields.py:427
-msgid "Enter a valid e-mail address."
-msgstr "Унесите важећу имејл адресу."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Садржај"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Метаподаци"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "означен"
-msgstr[1] "означена"
-msgstr[2] "означених"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Означавање изабраних коментара"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "одобрен"
-msgstr[1] "одобрена"
-msgstr[2] "одобрених"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Одобрење изабраних коментара"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "уклоњен"
-msgstr[1] "уклоњена"
-msgstr[2] "уклоњених"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Обриши изабране коментаре"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "Над једним коментаром је успешно урађено: %(action)s."
-msgstr[1] "Над %(count)s коментара је успешно урађено: %(action)s."
-msgstr[2] "Над %(count)s коментара је успешно урађено: %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Коментари на сајту %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Скорији коментари на сајту %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Име"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Имејл адреса"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Коментари"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Пази на језик! Реч „%s“ овде није дозвољена."
-msgstr[1] "Пази на језик! Речи „%s“ овде нису дозвољене."
-msgstr[2] "Пази на језик! Речи „%s“ овде нису дозвољене."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Ако ишта унесете у ово поље, Ваш коментар ће се сматрати спамом."
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "тип садржаја"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID објекта"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "корисниково име"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "корисникова имејл адреса"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "корисников URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "коментар"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "датум/време постављања"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
-msgid "IP address"
-msgstr "IP адреса"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "јавно"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Деселектујте ово поље ако желите да порука фактички нестане са овог сајта."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "уклоњен"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Обележите ову кућицу ако је коментар неприкладан. Порука о уклањању ће бити "
-"приказана уместо коментара."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "коментари"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Овај коментар је поставио пријављен корисник и зато је поље са именом "
-"закључано."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Овај коментар је поставио пријављен корисник и зато је поље са имејл адресом "
-"закључано."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Поставио %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "ознака"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "датум"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "ознака коментара"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "ознаке коментара"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Одобрење коментара"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Да ли заиста желите да означите овај коментар јавним?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Одобри"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Хвала на одобрењу!"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Хвала на учешћу у унапређењу квалитета дискусија на нашем сајту."
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Обриши коментар"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Да ли заиста желите да обришете овај коментар?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Хвала што користите наш сајт!"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Означавање коментара"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Да ли заиста желите да означите овај коментар?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Означи"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Хвала што сте означили коментар."
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Постави"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Преглед"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Хвала на коментару"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Хвала што сте оставили свој коментар"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Прегледај коментар"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Исправите грешку доле."
-msgstr[1] "Исправите грешке доле."
-msgstr[2] "Исправите грешке доле."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Постави коментар"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "или изврши измене"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "име python класе модела"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "типови садржаја"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Пример: '/about/contact/'. Пазите на то да постоје и почетне и завршне косе "
-"црте."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Ова вредност може садржати само слова, бројке, доње црте, цртице или косе "
-"црте."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Напредна подешавања"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "наслов"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "садржај"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "омогући коментарисање"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "назив темплејта"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Пример: 'flatpages/contact_page.html'. Ако ово оставите празним, систем ће "
-"користити 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "потребна регистрација"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ако је ово обележено, само ће пријављени корисници моћи да виде ову страницу."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "флет страница"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "флет странице"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Жао нам је, али Ваша сесија је истекла. Попуњавање формулара наставите на "
-"овој страници."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Основно „GIS“ поље које мапира тип геометрије по „OpenGIS“ спецификацији."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Тачка"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Линија"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Полигон"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Више тачака"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Више линија"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Више полигона"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Колекција геопметријских облика"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Нисте задали параметре за геометрију."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Неисправан параметар за геометрију."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Непостојећи тип геометрије."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr "Грешка се десила током трансформације геометрије на „SRID“ тип поља."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "-и"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "-ви"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "-и"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "-и"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f милион"
-msgstr[1] "%(value).1f милиона"
-msgstr[2] "%(value).1f милиона"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f милијарда"
-msgstr[1] "%(value).1f милијарде"
-msgstr[2] "%(value).1f милијарди"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f трилион"
-msgstr[1] "%(value).1f трилиона"
-msgstr[2] "%(value).1f трилиона"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "један"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "два"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "три"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "четири"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "пет"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "шест"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "седам"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "осам"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "девет"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "десет"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "сутра"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "јуче"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Унесите поштански број у формату НННН или АННННААА."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Ово поље мора да садржи само бројке."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Ово поље мора да садржи 7 или 8 цифара"
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Унестие важећи CUIT у формату XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Неважећи CUIT"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Бургенланд"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Каринтија"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Доња Аустрија"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Горња Аустрија"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Салцбург"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Стирија"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Тирол"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Воралбер"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Беч"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Унесите поштански број у формату XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Унесите важећи аустријски број социјалног осигурања у формату XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Унесите четвороцифрени поштански број"
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Унесите поштански број у формату XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Број телефона мора бити у формату XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "Одаберите постојећу бразилску државу. Та држава није међу понуђенима."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Неважећи CPF број"
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Држава у САД (два велика слова)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Број телефона"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "порука"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "преусмерен са"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ово мора бити апсолутна путања без имена домена. На пример: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "преусмери ка"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ово може бити или апсолутна путања (као горе) или пун URL који почиње са "
-"'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "преусмеравање"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "преусмеравања"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "кључ сесије"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "подаци сесије"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "датум застаревања"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "сесија"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "сесије"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "име домена"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "приказано име"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "сајтови"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Унесите исправну вредност."
-
-#: core/validators.py:87 forms/fields.py:528
-msgid "Enter a valid URL."
-msgstr "Унесите исправан URL."
-
-#: core/validators.py:89 forms/fields.py:529
-msgid "This URL appears to be a broken link."
-msgstr "Овај URL изгледа не води никуда."
-
-#: core/validators.py:123 forms/fields.py:877
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Унесите исрпаван „слаг“, који се састоји од слова, бројки, доњих црта или "
-"циртица."
-
-#: core/validators.py:126 forms/fields.py:870
-msgid "Enter a valid IPv4 address."
-msgstr "Унесите исправну IPv4 адресу."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Унесите само бројке раздвојене запетама."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Ово поље мора да буде %(limit_value)s (тренутно има %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:204 forms/fields.py:256
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Ова вредност мора да буде мања од %(limit_value)s. или тачно толико."
-
-#: core/validators.py:158 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Ова вредност мора бити већа од %(limit_value)s или тачно толико."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has "
-"%(show_value)d)."
-msgstr ""
-"Ово поље мора да садржи најмање %(limit_value)d словних места (тренутно има "
-"%(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has "
-"%(show_value)d)."
-msgstr ""
-"Ово поље мора да садржи највише %(limit_value)d словних места (тренутно има "
-"%(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s мора да буде јединствен за %(date_field)s %(lookup)s."
-
-#: db/models/base.py:838 db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s са овом вредношћу %(field_label)s већ постоји."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Вредност %r није дозвољена."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Ово поље не може да остане празно."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Ово поље не може да остане празно."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Поње типа: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:860
-#: db/models/fields/__init__.py:969 db/models/fields/__init__.py:980
-#: db/models/fields/__init__.py:1007
-msgid "Integer"
-msgstr "Цео број"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:858
-msgid "This value must be an integer."
-msgstr "Ова вредност мора бити целобројна."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Ова вредност мора бити True или False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Булова вредност (True или False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:990
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Стринг (највише %(max_length)s знакова)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Цели бројеви раздвојени запетама"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Датум (без времена)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Унесите исправан датум у формату ГГГГ-ММ-ДД."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Неисправан датум: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Унесите исправан датум/време у формату ГГГГ-ММ-ДД ЧЧ:ММ[:сс[.уууууу]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Датум (са временом)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Ова вредност мора бити децимални број"
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Децимални број"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Имејл адреса"
-
-#: db/models/fields/__init__.py:807 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Путања фајла"
-
-#: db/models/fields/__init__.py:830
-msgid "This value must be a float."
-msgstr "Ова вредност мора бити број са клизећом запетом"
-
-#: db/models/fields/__init__.py:832
-msgid "Floating point number"
-msgstr "Број са покреном запетом"
-
-#: db/models/fields/__init__.py:891
-msgid "Big (8 byte) integer"
-msgstr "Велики цео број"
-
-#: db/models/fields/__init__.py:920
-msgid "This value must be either None, True or False."
-msgstr "Ова вредност мора бити или None, или True, или False."
-
-#: db/models/fields/__init__.py:922
-msgid "Boolean (Either True, False or None)"
-msgstr "Булова вредност (True, False или None)"
-
-#: db/models/fields/__init__.py:1013
-msgid "Text"
-msgstr "Текст"
-
-#: db/models/fields/__init__.py:1029
-msgid "Time"
-msgstr "Време"
-
-#: db/models/fields/__init__.py:1033
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Унесите исправно време у формату ЧЧ:ММ[:сс[.уууууу]]."
-
-#: db/models/fields/__init__.py:1125
-msgid "XML text"
-msgstr "XML текст"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Објекат класе %(model)s са примарним кључем %(pk)r не постоји."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Страни кључ (тип одређује референтно поље)"
-
-#: db/models/fields/related.py:919
-msgid "One-to-one relationship"
-msgstr "Релација један на један"
-
-#: db/models/fields/related.py:981
-msgid "Many-to-many relationship"
-msgstr "Релација више на више"
-
-#: db/models/fields/related.py:1001
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Држите „Control“, или „Command“ на Mac-у да бисте обележили више од једне "
-"ставке."
-
-#: db/models/fields/related.py:1062
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Унесите исправан %(self)s IDs. Вредност %(value)r је неисправна."
-msgstr[1] "Унесите исправан %(self)s IDs. Вредности %(value)r су неисправне."
-msgstr[2] "Унесите исправан %(self)s IDs. Вредности %(value)r су неисправне."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Ово поље се мора попунити."
-
-#: forms/fields.py:203
-msgid "Enter a whole number."
-msgstr "Унесите цео број."
-
-#: forms/fields.py:234 forms/fields.py:255
-msgid "Enter a number."
-msgstr "Унесите број."
-
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Не сме бити укупно више од %s цифара. Проверите."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Не сме бити укупно више од %s децималних места. Проверите."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Не сме бити укупно више од %s цифара пре запете. Проверите."
-
-#: forms/fields.py:322 forms/fields.py:837
-msgid "Enter a valid date."
-msgstr "Унесите исправан датум."
-
-#: forms/fields.py:350 forms/fields.py:838
-msgid "Enter a valid time."
-msgstr "Унесите исправно време"
-
-#: forms/fields.py:376
-msgid "Enter a valid date/time."
-msgstr "Унесите исправан датум/време."
-
-#: forms/fields.py:434
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Фајл није пребачен. Проверите тип енкодирања формулара."
-
-#: forms/fields.py:435
-msgid "No file was submitted."
-msgstr "Фајл није пребачен."
-
-#: forms/fields.py:436
-msgid "The submitted file is empty."
-msgstr "Пребачен фајл је празан."
-
-#: forms/fields.py:437
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Назив фајла мора да садржи бар %(max)d словних места (тренутно има "
-"%(length)d)."
-
-#: forms/fields.py:472
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Пребаците исправан фајл. Фајл који је пребачен или није слика, или је "
-"оштећен."
-
-#: forms/fields.py:595 forms/fields.py:670
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"%(value)s није међу понуђеним вредностима. Одаберите једну од понуђених."
-
-#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Унесите листу вредности."
-
-#: forms/formsets.py:296 forms/formsets.py:298
-msgid "Order"
-msgstr "Редослед"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Исправите дуплиран садржај за поља: %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Исправите дуплиран садржај за поља: %(field)s, који мора да буде јединствен."
-
-#: forms/models.py:572
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Исправите дуплиран садржај за поља: %(field_name)s, који мора да буде "
-"јединствен за %(lookup)s у %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Исправите дуплиране вредности доле."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Страни кључ се није поклопио са инстанцом родитељског кључа."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Одабрана вредност није међу понуђенима. Одаберите једну од понуђених."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "%s није међу понуђеним вредностима. Одаберите једну од понуђених."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "„%s“ није исправна вредност за примарни кључ."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "да,не,можда"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d бајт"
-msgstr[1] "%(size)d бајта"
-msgstr[2] "%(size)d бајтова"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "по п."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "пре п."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "поноћ"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "подне"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "понедељак"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "уторак"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "среда"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "четвртак"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "петак"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "субота"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "недеља"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "пон."
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "уто."
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "сре."
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "чет."
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "пет."
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "суб."
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "нед."
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "јануар"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "фебруар"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "март"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "април"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "мај"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "јун"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "јул"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "август"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "септембар"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "октобар"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "новембар"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "децембар"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "јан."
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "феб."
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "мар."
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "апр."
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "мај."
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "јун."
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "јул."
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ауг."
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "сеп."
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "окт."
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "нов."
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "дец."
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "јан."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "беб."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ауг."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "септ."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "окт."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "нов."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "дец."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "или"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "година"
-msgstr[1] "године"
-msgstr[2] "година"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "месец"
-msgstr[1] "месеца"
-msgstr[2] "месеци"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "недеља"
-msgstr[1] "недеље"
-msgstr[2] "недеља"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "дан"
-msgstr[1] "дана"
-msgstr[2] "дана"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "сат"
-msgstr[1] "сата"
-msgstr[2] "сати"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "минут"
-msgstr[1] "минута"
-msgstr[2] "минута"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "минута"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. F Y."
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y. H:i Т"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "G:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y."
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s је успешно креиран."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s је успешно ажуриран."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s је обрисан."
diff --git a/parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index b74e78c..0000000
--- a/parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.po
deleted file mode 100644
index aecb426..0000000
--- a/parts/django/django/conf/locale/sr/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,144 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 19:53+0200\n"
-"PO-Revision-Date: 2009-03-30 14:04+0200\n"
-"Last-Translator: Janos Guljas <janos@janos.in.rs>\n"
-"Language-Team: Branko Vukelic <bg.branko@gmail.com> & Janos Guljas "
-"<janos@janos.in.rs> & Nesh <djnesh@gmail.com> & Petar <petar.maric@gmail."
-"com>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Врати све"
-
-#: contrib/admin/media/js/actions.js:18
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s од %(cnt)s изабран"
-msgstr[1] "%(sel)s од %(cnt)s изабрано"
-msgstr[2] "%(sel)s од %(cnt)s изабраних"
-
-#: contrib/admin/media/js/actions.js:109
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Имате несачиване измене. Ако покренете акцију, измене ће бити изгубљене."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr "Изабрали сте акцију али нисте сачували промене поља."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr "Изабрали сте акцију али нисте изменили ни једно поље."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"јануар фебруар март април мај јун јул август септембар октобар новембар "
-"децембар"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "Н П У С Ч П С"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Покажи"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Сакриј"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "недеља понедељак уторак среда четвртак петак субота"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Тренутно време"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Сат"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Одабир времена"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Поноћ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "18ч"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Подне"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Поништи"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Данас"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Календар"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Јуче"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Сутра"
-
-#~ msgid "Available %s"
-#~ msgstr "Доступни %s"
-
-#~ msgid "Choose all"
-#~ msgstr "Додај све"
-
-#~ msgid "Add"
-#~ msgstr "Додај"
-
-#~ msgid "Remove"
-#~ msgstr "Уклони"
-
-#~ msgid "Chosen %s"
-#~ msgstr "Одабрани %s"
-
-#~ msgid "Select your choice(s) and click "
-#~ msgstr "Направите избор и кликните "
diff --git a/parts/django/django/conf/locale/sr/__init__.py b/parts/django/django/conf/locale/sr/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/sr/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/sr/formats.py b/parts/django/django/conf/locale/sr/formats.py
deleted file mode 100644
index cb0478e..0000000
--- a/parts/django/django/conf/locale/sr/formats.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y. H:i'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.m.Y.'
-SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
-FIRST_DAY_OF_WEEK = 1
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y.', '%d.%m.%y.', # '25.10.2006.', '25.10.06.'
- '%d. %m. %Y.', '%d. %m. %y.', # '25. 10. 2006.', '25. 10. 06.'
- '%Y-%m-%d', # '2006-10-25'
- # '%d. %b %y.', '%d. %B %y.', # '25. Oct 06.', '25. October 06.'
- # '%d. %b \'%y.', '%d. %B \'%y.', # '25. Oct '06.', '25. October '06.'
- # '%d. %b %Y.', '%d. %B %Y.', # '25. Oct 2006.', '25. October 2006.'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y. %H:%M:%S', # '25.10.2006. 14:30:59'
- '%d.%m.%Y. %H:%M', # '25.10.2006. 14:30'
- '%d.%m.%Y.', # '25.10.2006.'
- '%d.%m.%y. %H:%M:%S', # '25.10.06. 14:30:59'
- '%d.%m.%y. %H:%M', # '25.10.06. 14:30'
- '%d.%m.%y.', # '25.10.06.'
- '%d. %m. %Y. %H:%M:%S', # '25. 10. 2006. 14:30:59'
- '%d. %m. %Y. %H:%M', # '25. 10. 2006. 14:30'
- '%d. %m. %Y.', # '25. 10. 2006.'
- '%d. %m. %y. %H:%M:%S', # '25. 10. 06. 14:30:59'
- '%d. %m. %y. %H:%M', # '25. 10. 06. 14:30'
- '%d. %m. %y.', # '25. 10. 06.'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
deleted file mode 100644
index ad04e75..0000000
--- a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.po b/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.po
deleted file mode 100644
index 7a289c3..0000000
--- a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5037 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 19:43+0200\n"
-"PO-Revision-Date: 2010-08-06 19:47+0100\n"
-"Last-Translator: Janos Guljas <janos@janos.in.rs>\n"
-"Language-Team: Branko Vukelic <bg.branko@gmail.com> & Janos Guljas <janos@janos.in.rs> & Nesh <djnesh@gmail.com> & Petar <petar.maric@gmail.com>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "arapski"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "bugarski"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "bengalski"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "bosanski"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "katalonski"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "češki"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "velški"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "danski"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "nemački"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "grčki"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "engleski"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "britanski engleski"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "španski"
-
-#: conf/global_settings.py:57
-msgid "Argentinian Spanish"
-msgstr "argentinski španski"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "estonski"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "baskijski"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "persijski"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "finski"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "francuski"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "frizijski"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "irski"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "galski"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "hebrejski"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "hindu"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "hrvatski"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "mađarski"
-
-#: conf/global_settings.py:70
-msgid "Indonesian"
-msgstr "indonežanski"
-
-#: conf/global_settings.py:71
-msgid "Icelandic"
-msgstr "islandski"
-
-#: conf/global_settings.py:72
-msgid "Italian"
-msgstr "italijanski"
-
-#: conf/global_settings.py:73
-msgid "Japanese"
-msgstr "japanski"
-
-#: conf/global_settings.py:74
-msgid "Georgian"
-msgstr "gruzijski"
-
-#: conf/global_settings.py:75
-msgid "Khmer"
-msgstr "kambodijski"
-
-#: conf/global_settings.py:76
-msgid "Kannada"
-msgstr "kanada"
-
-#: conf/global_settings.py:77
-msgid "Korean"
-msgstr "korejski"
-
-#: conf/global_settings.py:78
-msgid "Lithuanian"
-msgstr "litvanski"
-
-#: conf/global_settings.py:79
-msgid "Latvian"
-msgstr "latvijski"
-
-#: conf/global_settings.py:80
-msgid "Macedonian"
-msgstr "makedonski"
-
-#: conf/global_settings.py:81
-msgid "Malayalam"
-msgstr "malajalamski"
-
-#: conf/global_settings.py:82
-msgid "Mongolian"
-msgstr "mongolski"
-
-#: conf/global_settings.py:83
-msgid "Dutch"
-msgstr "holandski"
-
-#: conf/global_settings.py:84
-msgid "Norwegian"
-msgstr "norveški"
-
-#: conf/global_settings.py:85
-msgid "Norwegian Bokmal"
-msgstr "norveški knjževni"
-
-#: conf/global_settings.py:86
-msgid "Norwegian Nynorsk"
-msgstr "norveški novi"
-
-#: conf/global_settings.py:87
-msgid "Polish"
-msgstr "poljski"
-
-#: conf/global_settings.py:88
-msgid "Portuguese"
-msgstr "portugalski"
-
-#: conf/global_settings.py:89
-msgid "Brazilian Portuguese"
-msgstr "brazilski portugalski"
-
-#: conf/global_settings.py:90
-msgid "Romanian"
-msgstr "rumunski"
-
-#: conf/global_settings.py:91
-msgid "Russian"
-msgstr "ruski"
-
-#: conf/global_settings.py:92
-msgid "Slovak"
-msgstr "slovački"
-
-#: conf/global_settings.py:93
-msgid "Slovenian"
-msgstr "slovenački"
-
-#: conf/global_settings.py:94
-msgid "Albanian"
-msgstr "albanski"
-
-#: conf/global_settings.py:95
-msgid "Serbian"
-msgstr "srpski"
-
-#: conf/global_settings.py:96
-msgid "Serbian Latin"
-msgstr "srpski (latinica)"
-
-#: conf/global_settings.py:97
-msgid "Swedish"
-msgstr "švedski"
-
-#: conf/global_settings.py:98
-msgid "Tamil"
-msgstr "tamilski"
-
-#: conf/global_settings.py:99
-msgid "Telugu"
-msgstr "telugu"
-
-#: conf/global_settings.py:100
-msgid "Thai"
-msgstr "tajlandski"
-
-#: conf/global_settings.py:101
-msgid "Turkish"
-msgstr "turski"
-
-#: conf/global_settings.py:102
-msgid "Ukrainian"
-msgstr "ukrajinski"
-
-#: conf/global_settings.py:103
-msgid "Vietnamese"
-msgstr "vijetnamski"
-
-#: conf/global_settings.py:104
-msgid "Simplified Chinese"
-msgstr "novokineski"
-
-#: conf/global_settings.py:105
-msgid "Traditional Chinese"
-msgstr "starokineski"
-
-#: contrib/admin/actions.py:48
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Uspešno obrisano: %(count)d %(items)s."
-
-#: contrib/admin/actions.py:55
-#: contrib/admin/options.py:1125
-msgid "Are you sure?"
-msgstr "Da li ste sigurni?"
-
-#: contrib/admin/actions.py:73
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Briši označene objekte klase %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Svi"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Svi datumi"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Danas"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Poslednjih 7 dana"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Ovaj mesec"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Ova godina"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:478
-msgid "Yes"
-msgstr "Da"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:478
-msgid "No"
-msgstr "Ne"
-
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:478
-msgid "Unknown"
-msgstr "Nepoznato"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "Radnja:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "vreme radnje"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "id objekta"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "opis objekta"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "oznaka radnje"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "opis izmene"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "zapis u logovima"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "zapisi u logovima"
-
-#: contrib/admin/options.py:138
-#: contrib/admin/options.py:153
-msgid "None"
-msgstr "Ništa"
-
-#: contrib/admin/options.py:559
-#, python-format
-msgid "Changed %s."
-msgstr "Izmenjena polja %s"
-
-#: contrib/admin/options.py:559
-#: contrib/admin/options.py:569
-#: contrib/comments/templates/comments/preview.html:16
-#: db/models/base.py:845
-#: forms/models.py:568
-msgid "and"
-msgstr "i"
-
-#: contrib/admin/options.py:564
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Sačuvan objekat „%(object)s“ klase %(name)s."
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Izmenjena polja %(list)s objekata „%(object)s“ klase %(name)s ."
-
-#: contrib/admin/options.py:573
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Obrisan objekat „%(object)s“ klase %(name)s."
-
-#: contrib/admin/options.py:577
-msgid "No fields changed."
-msgstr "Bez izmena u poljima."
-
-#: contrib/admin/options.py:643
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Objekat „%(obj)s“ klase %(name)s sačuvan je uspešno."
-
-#: contrib/admin/options.py:647
-#: contrib/admin/options.py:680
-msgid "You may edit it again below."
-msgstr "Dole možete ponovo da unosite izmene."
-
-#: contrib/admin/options.py:657
-#: contrib/admin/options.py:690
-#, python-format
-msgid "You may add another %s below."
-msgstr "Dole možete da dodate novi objekat klase %s"
-
-#: contrib/admin/options.py:678
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Objekat „%(obj)s“ klase %(name)s izmenjen je uspešno."
-
-#: contrib/admin/options.py:686
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "Objekat „%(obj)s“ klase %(name)s dodat je uspešno. Dole možete uneti dodatne izmene."
-
-#: contrib/admin/options.py:740
-#: contrib/admin/options.py:997
-msgid "Items must be selected in order to perform actions on them. No items have been changed."
-msgstr "Potrebno je izabrati objekte da bi se izvršila akcija nad njima. Nijedan objekat nije promenjen."
-
-#: contrib/admin/options.py:759
-msgid "No action selected."
-msgstr "Nije izabrana nijedna akcija."
-
-#: contrib/admin/options.py:840
-#, python-format
-msgid "Add %s"
-msgstr "Dodaj objekat klase %s"
-
-#: contrib/admin/options.py:866
-#: contrib/admin/options.py:1105
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Objekat klase %(name)s sa primarnim ključem %(key)r ne postoji."
-
-#: contrib/admin/options.py:931
-#, python-format
-msgid "Change %s"
-msgstr "Izmeni objekat klase %s"
-
-#: contrib/admin/options.py:977
-msgid "Database error"
-msgstr "Greška u bazi podataka"
-
-#: contrib/admin/options.py:1039
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s objekat klase %(name)s izmenjen je uspešno."
-msgstr[1] "%(count)s objekata klase %(name)s izmenjeni su uspešno."
-msgstr[2] "%(count)s objekta klase %(name)s izmenjeno je uspešno."
-
-#: contrib/admin/options.py:1066
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "%(total_count)s izabran"
-msgstr[1] "%(total_count)s izabrano"
-msgstr[2] "%(total_count)s izabranih"
-
-#: contrib/admin/options.py:1071
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "0 od %(cnt)s izabrano"
-
-#: contrib/admin/options.py:1118
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Objekat „%(obj)s“ klase %(name)s uspešno je obrisan."
-
-#: contrib/admin/options.py:1155
-#, python-format
-msgid "Change history: %s"
-msgstr "Istorijat izmena: %s"
-
-#: contrib/admin/sites.py:18
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Unesite tačno korisničko ime i lozinku. Pazite na razliku između malih i velikih slova u oba polja."
-
-#: contrib/admin/sites.py:307
-#: contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Prijavite se ponovo pošto je vaša sesija istekla."
-
-#: contrib/admin/sites.py:314
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Izgleda da vaš brauzer nije podešen da prima kolačiće. Uključite kolačiće, osvežite ovu stranicu i probajte ponovo."
-
-#: contrib/admin/sites.py:330
-#: contrib/admin/sites.py:336
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Korisnička imena ne smeju da sadrže znak „@“."
-
-#: contrib/admin/sites.py:333
-#: contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Vaša imejl adresa nije vaše korisničko ime. Probajte sa „%s“."
-
-#: contrib/admin/sites.py:389
-msgid "Site administration"
-msgstr "Administracija sistema"
-
-#: contrib/admin/sites.py:403
-#: contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Prijava"
-
-#: contrib/admin/sites.py:448
-#, python-format
-msgid "%s administration"
-msgstr "Administracija %s"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Datum:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Vreme:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Trenutno:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Izmena:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Pretraži"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Dodaj još jedan"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Stranica nije pronađena"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Žao nam je, tražena stranica nije pronađena."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Početna"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Greška na serveru"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Greška na serveru (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Greška na serveru <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Došlo je do greške. Administrator sajta je obavešten imejlom i greška će biti uskoro otklonjena. Hvala na strpljenju."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Pokreni odabranu radnju"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Počni"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Izaberi sve objekte na ovoj stranici."
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Izaberi sve %(module_name)s od %(total_count)s ukupno."
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Poništi izbor"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Dobrodošli,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentacija"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Promena lozinke"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Odjava"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django administracija sajta"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django administracija"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Dodaj"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Istorijat"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Pregled na sajtu"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Ispravite grešku dole."
-msgstr[1] "Ispravite greške dole."
-msgstr[2] "Ispravite greške dole."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Dodaj objekat klase %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filter"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:300
-msgid "Delete"
-msgstr "Obriši"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za brisanje sledećih tipova objekata:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "Da sigurni da želite da obrišete %(object_name)s „%(escaped_object)s“? Sledeći objekti koji su u vezi sa ovim objektom će takođe biti obrisani:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Da, siguran sam"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Brisanje više objekata"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid "Deleting the %(object_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Uklanjanje %(object_name)s povlači uklanjanje svih objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za brisanje sledećih tipova objekata:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid "Are you sure you want to delete the selected %(object_name)s objects? All of the following objects and their related items will be deleted:"
-msgstr "Da sigurni da želite da obrišete odabrane %(object_name)s? Sledeći objekti koji su u vezi sa ovim objektom će takođe biti obrisani:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeli dostupni u aplikaciji %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Izmeni"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Nemate dozvole da unosite bilo kakve izmene."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Poslednje radnje"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Moje radnje"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Nema podataka"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Nepoznat sadržaj"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Nešto nije uredu sa vašom bazom podataka. Proverite da li postoje odgovarajuće tabele i da li odgovarajući korisnik ima pristup bazi."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Korisnik:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Lozinka:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datum/vreme"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Korisnik"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Radnja"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Ovaj objekat nema zabeležen istorijat izmena. Verovatno nije dodat kroz ovaj sajt za administraciju."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Prikaži sve"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Sačuvaj"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Pretraga"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 rezultat"
-msgstr[1] "%(counter)s rezultata"
-msgstr[2] "%(counter)s rezultata"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "ukupno %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Sačuvaj kao novi"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Sačuvaj i dodaj sledeći"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Sačuvaj i nastavi sa izmenama"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Prvo unesite korisničko ime i lozinku. Potom ćete moći da menjate još korisničkih podešavanja."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:8
-msgid "Enter a username and password."
-msgstr "Unesite korisničko ime i lozinku"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Unesite novu lozinku za korisnika <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:61
-#: contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Lozinka"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Lozinka (ponovite)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Radi provere tačnosti ponovo unesite lozinku koju ste uneli gore."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Dodaj još jedan objekat klase %(verbose_name)s."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Obriši"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Brisanje?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Hvala što ste danas proveli vreme na ovom sajtu."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Ponovna prijava"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Izmena lozinke"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Uspešna izmena lozinke"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Vaša lozinka je izmenjena."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Iz bezbednosnih razloga prvo unesite svoju staru lozinku, a novu zatim unesite dva puta da bismo mogli da proverimo da li ste je pravilno uneli."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Stara lozinka"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Nova lozinka"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Izmeni moju lozinku"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Resetovanje lozinke"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Resetovanje lozinke uspešno"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Vaša lozinka je postavljena. Možete se prijaviti."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Potvrda resetovanja lozinke"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Unesite novu lozinku"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "Unesite novu lozinku dva puta kako bismo mogli da proverimo da li ste je pravilno uneli."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nova lozinka:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potvrda lozinke:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Resetovanje lozinke neuspešno"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr "Link za resetovanje lozinke nije važeći, verovatno zato što je već iskorišćen. Ponovo zatražite resetovanje lozinke."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Resetovanje lozinke uspešno."
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Poslali smo uputstva za postavljanje nove lozinke na imejl adresu koju ste nam dali. Uputstva ćete dobiti uskoro."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Ovu poruku ste primili zato što ste zahtevali resetovanje lozinke"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "za vaš korisnički nalog na sajtu %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Idite na sledeću stranicu i postavite novu lozinku."
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Ukoliko ste zaboravili, vaše korisničko ime:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Hvala što koristite naš sajt!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Ekipa sajta %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "Zaboravili ste lozinku? Unesite svoju imejl adresu dole i poslaćemo vam uputstva za postavljanje nove."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Imejl adresa:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Resetuj moju lozinku"
-
-#: contrib/admin/templatetags/admin_list.py:257
-msgid "All dates"
-msgstr "Svi datumi"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s"
-msgstr "Odaberi objekat klase %s"
-
-#: contrib/admin/views/main.py:65
-#, python-format
-msgid "Select %s to change"
-msgstr "Odaberi objekat klase %s za izmenu"
-
-#: contrib/admin/views/template.py:38
-#: contrib/sites/models.py:38
-msgid "site"
-msgstr "sajt"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "templejt"
-
-#: contrib/admindocs/views.py:61
-#: contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "tag:"
-
-#: contrib/admindocs/views.py:94
-#: contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:158
-#: contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "vju:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Aplikacija %r nije pronađena"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "povezani objekti klase `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:209
-#: contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233
-#: contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261
-#: contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-# WARN: possible breakage in future
-# This string is interpolated in strings below, which can cause breakage in
-# future releases.
-#: contrib/admindocs/views.py:224
-#: contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "klase `%(app_label)s.%(object_name)s`"
-
-# WARN: possible breakage in future
-#: contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "svi povezani objekti %s"
-
-# WARN: possible breakage in future
-#: contrib/admindocs/views.py:233
-#: contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "broj povezanih objekata %s"
-
-# WARN: possible breakage in future
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Polja u povezanim objektima %s"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ne izgleda kao „urlpattern“ objekat"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bukmarkleti"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Bukmarkleti dokumentacije"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Da biste instalirali bukmarklet, prevucite link do svojih\n"
-"bukmarkova ili kliknite desnim dugmetom i dodajte među bukmarke. Nakon toga\n"
-"bukmarkletima možete pristupiti sa svake stranice na sajtu. Imajte na umu\n"
-"da neki bukmarkleti zahtevaju da sajtu pristupite sa računara koji su\n"
-"označeni kao „interni“ (pitajte administratora vašeg sistema ukoliko niste\n"
-"sigurni da li je vaš računar „interni“).</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentacija za ovu stranicu"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Vodi od bilo koje stranice do dokumentaicje pogleda koji je generisao tu stranicu."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Prikaži ID objekta"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Prikazuje content-type i jedinstveni ID za stranicu koja prestavlja jedan objekat."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Izmeni ovaj objekat (u ovom prozoru)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Vodi u administracioni stranicu za stranice koje prestavljaju jedan objekat"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Izmeni ovaj objekat (novi prozor)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Isto kao prethodni, ali otvara administracionu stranicu u novom prozoru."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Lični podaci"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "Dozvole"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Važni datumi"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Grupe"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Lozinka uspešno izmenjena."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Izmeni lozinku: %s"
-
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:48
-#: contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Korisnik"
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr "Neophodno. Najviše 30 slovnih mesta. Samo alfanumerički znaci (slova, brojke i @/./+/-/_)."
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Ova vrednost može sadržati samo slova, brojke i @/./+/-/_."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Potvrda lozinke"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Korisnik sa tim korisničkim imenom već postoji."
-
-#: contrib/auth/forms.py:37
-#: contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Dva polja za lozinke se nisu poklopila."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Ovaj nalog je neaktivan."
-
-#: contrib/auth/forms.py:88
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Izgleda da su kolačići isključeni u vašem brauzeru. Oni moraju biti uključeni da bi ste se prijavili."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "Imejl adresa"
-
-#: contrib/auth/forms.py:110
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Ta imejl adresa nije u vezi ni sa jednim nalogom. Da li ste sigurni da ste se već registrovali?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "Resetovanje lozinke na %s"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Potvrda nove lozinke"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Vaša stara loznka nije pravilno unesena. Unesite je ponovo."
-
-#: contrib/auth/models.py:66
-#: contrib/auth/models.py:94
-msgid "name"
-msgstr "ime"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "šifra dozvole"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "dozvola"
-
-#: contrib/auth/models.py:73
-#: contrib/auth/models.py:95
-msgid "permissions"
-msgstr "dozvole"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grupa"
-
-#: contrib/auth/models.py:99
-#: contrib/auth/models.py:206
-msgid "groups"
-msgstr "grupe"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "korisničko ime"
-
-#: contrib/auth/models.py:196
-msgid "Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr "Neophodno. Najviše 30 slovnih mesta. Samo alfanumerički znaci (slova, brojke i @/./+/-/_)."
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "ime"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "prezime"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "imejl adresa"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "lozinka"
-
-#: contrib/auth/models.py:200
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Koristite '[algo]$[salt]$[hexdigest]' ili <a href=\"password/\">formular za unos lozinke</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "status člana posade"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Označava da li korisnik može da se prijavi na ovaj sajt za administraciju."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktivan"
-
-#: contrib/auth/models.py:202
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "Označava da li se korisnik smatra aktivnim. Deselektujte ovo umesto da brišete nalog."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "status administratora"
-
-#: contrib/auth/models.py:203
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Označava da li korisnik ima sve dozvole bez dodeljivanja pojedinačnih dozvola."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "poslednja prijava"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "datum registracije"
-
-#: contrib/auth/models.py:207
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Pored ručno dodeljenih dozvola, ovaj korisnik će imati i dozvole dodeljene gurpama kojima pripada."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "korisničke dozvole"
-
-#: contrib/auth/models.py:212
-#: contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "korisnik"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "korisnici"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "poruka"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Odjavljen"
-
-#: contrib/auth/management/commands/createsuperuser.py:24
-#: core/validators.py:120
-#: forms/fields.py:427
-msgid "Enter a valid e-mail address."
-msgstr "Unesite važeću imejl adresu."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Sadržaj"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Metapodaci"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "označen"
-msgstr[1] "označena"
-msgstr[2] "označenih"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Označavanje izabranih komentara"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "odobren"
-msgstr[1] "odobrena"
-msgstr[2] "odobrenih"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Odobrenje izabranih komentara"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "uklonjen"
-msgstr[1] "uklonjena"
-msgstr[2] "uklonjenih"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Obriši izabrane komentare"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "Nad jednim komentarom je uspešno urađeno: %(action)s."
-msgstr[1] "Nad %(count)s komentara je uspešno urađeno: %(action)s."
-msgstr[2] "Nad %(count)s komentara je uspešno urađeno: %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "Komentari na sajtu %(site_name)s"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Skoriji komentari na sajtu %(site_name)s"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Ime"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Imejl adresa"
-
-#: contrib/comments/forms.py:95
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-#: db/models/fields/__init__.py:1109
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Komentari"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Pazi na jezik! Reč „%s“ ovde nije dozvoljena."
-msgstr[1] "Pazi na jezik! Reči „%s“ ovde nisu dozvoljene."
-msgstr[2] "Pazi na jezik! Reči „%s“ ovde nisu dozvoljene."
-
-#: contrib/comments/forms.py:182
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "Ako išta unesete u ovo polje, Vaš komentar će se smatrati spamom."
-
-#: contrib/comments/models.py:22
-#: contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "tip sadržaja"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "ID objekta"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "korisnikovo ime"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "korisnikova imejl adresa"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "korisnikov URL"
-
-#: contrib/comments/models.py:56
-#: contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "komentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "datum/vreme postavljanja"
-
-#: contrib/comments/models.py:60
-#: db/models/fields/__init__.py:904
-msgid "IP address"
-msgstr "IP adresa"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "javno"
-
-#: contrib/comments/models.py:62
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Deselektujte ovo polje ako želite da poruka faktički nestane sa ovog sajta."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "uklonjen"
-
-#: contrib/comments/models.py:65
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Obeležite ovu kućicu ako je komentar neprikladan. Poruka o uklanjanju će biti prikazana umesto komentara."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "komentari"
-
-#: contrib/comments/models.py:119
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr "Ovaj komentar je postavio prijavljen korisnik i zato je polje sa imenom zaključano."
-
-#: contrib/comments/models.py:128
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr "Ovaj komentar je postavio prijavljen korisnik i zato je polje sa imejl adresom zaključano."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Postavio %(user)s, %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "oznaka"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "datum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "oznaka komentara"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "oznake komentara"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Odobrenje komentara"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Da li zaista želite da označite ovaj komentar javnim?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Odobri"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Hvala na odobrenju!"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid "Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Hvala na učešću u unapređenju kvaliteta diskusija na našem sajtu."
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Obriši komentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Da li zaista želite da obrišete ovaj komentar?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Hvala što koristite naš sajt!"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Označavanje komentara"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Da li zaista želite da označite ovaj komentar?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Označi"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Hvala što ste označili komentar."
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Postavi"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Pregled"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Hvala na komentaru"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Hvala što ste ostavili svoj komentar"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Pregledaj komentar"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Ispravite grešku dole."
-msgstr[1] "Ispravite greške dole."
-msgstr[2] "Ispravite greške dole."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Postavi komentar"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "ili izvrši izmene"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "ime python klase modela"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "tipovi sadržaja"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Primer: '/about/contact/'. Pazite na to da postoje i početne i završne kose crte."
-
-#: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Ova vrednost može sadržati samo slova, brojke, donje crte, crtice ili kose crte."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Napredna podešavanja"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "naslov"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "sadržaj"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "omogući komentarisanje"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "naziv templejta"
-
-#: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Primer: 'flatpages/contact_page.html'. Ako ovo ostavite praznim, sistem će koristiti 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "potrebna registracija"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Ako je ovo obeleženo, samo će prijavljeni korisnici moći da vide ovu stranicu."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flet stranica"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flet stranice"
-
-#: contrib/formtools/wizard.py:140
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr "Žao nam je, ali Vaša sesija je istekla. Popunjavanje formulara nastavite na ovoj stranici."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr "Osnovno „GIS“ polje koje mapira tip geometrije po „OpenGIS“ specifikaciji."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Tačka"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Linija"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Poligon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Više tačaka"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Više linija"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Više poligona"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Kolekcija geopmetrijskih oblika"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Niste zadali parametre za geometriju."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Neispravan parametar za geometriju."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Nepostojeći tip geometrije."
-
-#: contrib/gis/forms/fields.py:20
-msgid "An error occurred when transforming the geometry to the SRID of the geometry form field."
-msgstr "Greška se desila tokom transformacije geometrije na „SRID“ tip polja."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "-i"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "-vi"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "-i"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "-i"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milion"
-msgstr[1] "%(value).1f miliona"
-msgstr[2] "%(value).1f miliona"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milijarda"
-msgstr[1] "%(value).1f milijarde"
-msgstr[2] "%(value).1f milijardi"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilion"
-msgstr[1] "%(value).1f triliona"
-msgstr[2] "%(value).1f triliona"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "jedan"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "dva"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "četiri"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "pet"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "šest"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sedam"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "osam"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "devet"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "deset"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "sutra"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "juče"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Unesite poštanski broj u formatu NNNN ili ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50
-#: contrib/localflavor/br/forms.py:92
-#: contrib/localflavor/br/forms.py:131
-#: contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Ovo polje mora da sadrži samo brojke."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Ovo polje mora da sadrži 7 ili 8 cifara"
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Unestie važeći CUIT u formatu XX-XXXXXXXX-X or XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Nevažeći CUIT"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Karintija"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Donja Austrija"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Gornja Austrija"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salcburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Stirija"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tirol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Voralber"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Beč"
-
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Unesite poštanski broj u formatu XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Unesite važeći austrijski broj socijalnog osiguranja u formatu XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Unesite četvorocifreni poštanski broj"
-
-#: contrib/localflavor/br/forms.py:17
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Unesite poštanski broj u formatu XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:26
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Broj telefona mora biti u formatu XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:54
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Odaberite postojeću brazilsku državu. Ta država nije među ponuđenima."
-
-#: contrib/localflavor/br/forms.py:90
-msgid "Invalid CPF number."
-msgstr "Nevažeći CPF broj"
-
-#: contrib/localflavor/br/forms.py:91
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:130
-msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:132
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:65
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15
-#: contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:42
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:40
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68
-#: contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr ""
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Država u SAD (dva velika slova)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Broj telefona"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "poruka"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "preusmeren sa"
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Ovo mora biti apsolutna putanja bez imena domena. Na primer: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "preusmeri ka"
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Ovo može biti ili apsolutna putanja (kao gore) ili pun URL koji počinje sa 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "preusmeravanje"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "preusmeravanja"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "ključ sesije"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "podaci sesije"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "datum zastarevanja"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "sesija"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sesije"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "ime domena"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "prikazano ime"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "sajtovi"
-
-#: core/validators.py:20
-#: forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Unesite ispravnu vrednost."
-
-#: core/validators.py:87
-#: forms/fields.py:528
-msgid "Enter a valid URL."
-msgstr "Unesite ispravan URL."
-
-#: core/validators.py:89
-#: forms/fields.py:529
-msgid "This URL appears to be a broken link."
-msgstr "Ovaj URL izgleda ne vodi nikuda."
-
-#: core/validators.py:123
-#: forms/fields.py:877
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Unesite isrpavan „slag“, koji se sastoji od slova, brojki, donjih crta ili cirtica."
-
-#: core/validators.py:126
-#: forms/fields.py:870
-msgid "Enter a valid IPv4 address."
-msgstr "Unesite ispravnu IPv4 adresu."
-
-#: core/validators.py:129
-#: db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Unesite samo brojke razdvojene zapetama."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr "Ovo polje mora da bude %(limit_value)s (trenutno ima %(show_value)s)."
-
-#: core/validators.py:153
-#: forms/fields.py:204
-#: forms/fields.py:256
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr "Ova vrednost mora da bude manja od %(limit_value)s. ili tačno toliko."
-
-#: core/validators.py:158
-#: forms/fields.py:205
-#: forms/fields.py:257
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr "Ova vrednost mora biti veća od %(limit_value)s ili tačno toliko."
-
-#: core/validators.py:164
-#, python-format
-msgid "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)."
-msgstr "Ovo polje mora da sadrži najmanje %(limit_value)d slovnih mesta (trenutno ima %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)."
-msgstr "Ovo polje mora da sadrži najviše %(limit_value)d slovnih mesta (trenutno ima %(show_value)d)."
-
-#: db/models/base.py:823
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s mora da bude jedinstven za %(date_field)s %(lookup)s."
-
-#: db/models/base.py:838
-#: db/models/base.py:846
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s sa ovom vrednošću %(field_label)s već postoji."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "Vrednost %r nije dozvoljena."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Ovo polje ne može da ostane prazno."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Ovo polje ne može da ostane prazno."
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Ponje tipa: %(field_type)s"
-
-#: db/models/fields/__init__.py:451
-#: db/models/fields/__init__.py:860
-#: db/models/fields/__init__.py:969
-#: db/models/fields/__init__.py:980
-#: db/models/fields/__init__.py:1007
-msgid "Integer"
-msgstr "Ceo broj"
-
-#: db/models/fields/__init__.py:455
-#: db/models/fields/__init__.py:858
-msgid "This value must be an integer."
-msgstr "Ova vrednost mora biti celobrojna."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Ova vrednost mora biti True ili False."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Bulova vrednost (True ili False)"
-
-#: db/models/fields/__init__.py:539
-#: db/models/fields/__init__.py:990
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (najviše %(max_length)s znakova)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Celi brojevi razdvojeni zapetama"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Datum (bez vremena)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Unesite ispravan datum u formatu GGGG-MM-DD."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Neispravan datum: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Unesite ispravan datum/vreme u formatu GGGG-MM-DD ČČ:MM[:ss[.uuuuuu]."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Datum (sa vremenom)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Ova vrednost mora biti decimalni broj"
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Decimalni broj"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "Imejl adresa"
-
-#: db/models/fields/__init__.py:807
-#: db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Putanja fajla"
-
-#: db/models/fields/__init__.py:830
-msgid "This value must be a float."
-msgstr "Ova vrednost mora biti broj sa klizećom zapetom"
-
-#: db/models/fields/__init__.py:832
-msgid "Floating point number"
-msgstr "Broj sa pokrenom zapetom"
-
-#: db/models/fields/__init__.py:891
-msgid "Big (8 byte) integer"
-msgstr "Veliki ceo broj"
-
-#: db/models/fields/__init__.py:920
-msgid "This value must be either None, True or False."
-msgstr "Ova vrednost mora biti ili None, ili True, ili False."
-
-#: db/models/fields/__init__.py:922
-msgid "Boolean (Either True, False or None)"
-msgstr "Bulova vrednost (True, False ili None)"
-
-#: db/models/fields/__init__.py:1013
-msgid "Text"
-msgstr "Tekst"
-
-#: db/models/fields/__init__.py:1029
-msgid "Time"
-msgstr "Vreme"
-
-#: db/models/fields/__init__.py:1033
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Unesite ispravno vreme u formatu ČČ:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1125
-msgid "XML text"
-msgstr "XML tekst"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Objekat klase %(model)s sa primarnim ključem %(pk)r ne postoji."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Strani ključ (tip određuje referentno polje)"
-
-#: db/models/fields/related.py:919
-msgid "One-to-one relationship"
-msgstr "Relacija jedan na jedan"
-
-#: db/models/fields/related.py:981
-msgid "Many-to-many relationship"
-msgstr "Relacija više na više"
-
-#: db/models/fields/related.py:1001
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Držite „Control“, ili „Command“ na Mac-u da biste obeležili više od jedne stavke."
-
-#: db/models/fields/related.py:1062
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Unesite ispravan %(self)s IDs. Vrednost %(value)r je neispravna."
-msgstr[1] "Unesite ispravan %(self)s IDs. Vrednosti %(value)r su neispravne."
-msgstr[2] "Unesite ispravan %(self)s IDs. Vrednosti %(value)r su neispravne."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Ovo polje se mora popuniti."
-
-#: forms/fields.py:203
-msgid "Enter a whole number."
-msgstr "Unesite ceo broj."
-
-#: forms/fields.py:234
-#: forms/fields.py:255
-msgid "Enter a number."
-msgstr "Unesite broj."
-
-#: forms/fields.py:258
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Ne sme biti ukupno više od %s cifara. Proverite."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Ne sme biti ukupno više od %s decimalnih mesta. Proverite."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Ne sme biti ukupno više od %s cifara pre zapete. Proverite."
-
-#: forms/fields.py:322
-#: forms/fields.py:837
-msgid "Enter a valid date."
-msgstr "Unesite ispravan datum."
-
-#: forms/fields.py:350
-#: forms/fields.py:838
-msgid "Enter a valid time."
-msgstr "Unesite ispravno vreme"
-
-#: forms/fields.py:376
-msgid "Enter a valid date/time."
-msgstr "Unesite ispravan datum/vreme."
-
-#: forms/fields.py:434
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Fajl nije prebačen. Proverite tip enkodiranja formulara."
-
-#: forms/fields.py:435
-msgid "No file was submitted."
-msgstr "Fajl nije prebačen."
-
-#: forms/fields.py:436
-msgid "The submitted file is empty."
-msgstr "Prebačen fajl je prazan."
-
-#: forms/fields.py:437
-#, python-format
-msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Naziv fajla mora da sadrži bar %(max)d slovnih mesta (trenutno ima %(length)d)."
-
-#: forms/fields.py:472
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Prebacite ispravan fajl. Fajl koji je prebačen ili nije slika, ili je oštećen."
-
-#: forms/fields.py:595
-#: forms/fields.py:670
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "%(value)s nije među ponuđenim vrednostima. Odaberite jednu od ponuđenih."
-
-#: forms/fields.py:671
-#: forms/fields.py:733
-#: forms/models.py:1002
-msgid "Enter a list of values."
-msgstr "Unesite listu vrednosti."
-
-#: forms/formsets.py:296
-#: forms/formsets.py:298
-msgid "Order"
-msgstr "Redosled"
-
-#: forms/models.py:562
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Ispravite dupliran sadržaj za polja: %(field)s."
-
-#: forms/models.py:566
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Ispravite dupliran sadržaj za polja: %(field)s, koji mora da bude jedinstven."
-
-#: forms/models.py:572
-#, python-format
-msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
-msgstr "Ispravite dupliran sadržaj za polja: %(field_name)s, koji mora da bude jedinstven za %(lookup)s u %(date_field)s."
-
-#: forms/models.py:580
-msgid "Please correct the duplicate values below."
-msgstr "Ispravite duplirane vrednosti dole."
-
-#: forms/models.py:855
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "Strani ključ se nije poklopio sa instancom roditeljskog ključa."
-
-#: forms/models.py:921
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Odabrana vrednost nije među ponuđenima. Odaberite jednu od ponuđenih."
-
-#: forms/models.py:1003
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "%s nije među ponuđenim vrednostima. Odaberite jednu od ponuđenih."
-
-#: forms/models.py:1005
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "„%s“ nije ispravna vrednost za primarni ključ."
-
-#: template/defaultfilters.py:776
-msgid "yes,no,maybe"
-msgstr "da,ne,možda"
-
-#: template/defaultfilters.py:807
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bajt"
-msgstr[1] "%(size)d bajta"
-msgstr[2] "%(size)d bajtova"
-
-#: template/defaultfilters.py:809
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "po p."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "pre p."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "ponoć"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "podne"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "ponedeljak"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "utorak"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "sreda"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "četvrtak"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "petak"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "subota"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "nedelja"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "pon."
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "uto."
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "sre."
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "čet."
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "pet."
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "sub."
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "ned."
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januar"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februar"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "mart"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "maj"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "jun"
-
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "jul"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "avgust"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "septembar"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktobar"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "novembar"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "decembar"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan."
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb."
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar."
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr."
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "maj."
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun."
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul."
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug."
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep."
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt."
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov."
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec."
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "beb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dec."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "ili"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "godina"
-msgstr[1] "godine"
-msgstr[2] "godina"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mesec"
-msgstr[1] "meseca"
-msgstr[2] "meseci"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "nedelja"
-msgstr[1] "nedelje"
-msgstr[2] "nedelja"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dan"
-msgstr[1] "dana"
-msgstr[2] "dana"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "sat"
-msgstr[1] "sata"
-msgstr[2] "sati"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minut"
-msgstr[1] "minuta"
-msgstr[2] "minuta"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuta"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:519
-msgid "DATE_FORMAT"
-msgstr "j. F Y."
-
-#: utils/translation/trans_real.py:520
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y. H:i T"
-
-#: utils/translation/trans_real.py:521
-msgid "TIME_FORMAT"
-msgstr "G:i"
-
-#: utils/translation/trans_real.py:542
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y."
-
-#: utils/translation/trans_real.py:543
-msgid "MONTH_DAY_FORMAT"
-msgstr "j. F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s je uspešno kreiran."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s je uspešno ažuriran."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s je obrisan."
-
diff --git a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 0217ff7..0000000
--- a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 584ee7b..0000000
--- a/parts/django/django/conf/locale/sr_Latn/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,153 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-07 20:46+0200\n"
-"PO-Revision-Date: 2009-03-30 14:04+0200\n"
-"Last-Translator: Janos Guljas <janos@janos.in.rs>\n"
-"Language-Team: Branko Vukelic <bg.branko@gmail.com> & Janos Guljas "
-"<janos@janos.in.rs> & Nesh <djnesh@gmail.com> & Petar <petar.maric@gmail."
-"com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Dostupni %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Dodaj sve"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Dodaj"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Ukloni"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Odabrani %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Napravite izbor i kliknite "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Vrati sve"
-
-#: contrib/admin/media/js/actions.js:18
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s od %(cnt)s izabran"
-msgstr[1] "%(sel)s od %(cnt)s izabrano"
-msgstr[2] "%(sel)s od %(cnt)s izabranih"
-
-#: contrib/admin/media/js/actions.js:109
-#: contrib/admin/media/js/actions.min.js:5
-msgid ""
-"You have unsaved changes on individual editable fields. If you run an "
-"action, your unsaved changes will be lost."
-msgstr ""
-"Imate nesačivane izmene. Ako pokrenete akciju, izmene će biti izgubljene."
-
-#: contrib/admin/media/js/actions.js:121
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, but you haven't saved your changes to "
-"individual fields yet. Please click OK to save. You'll need to re-run the "
-"action."
-msgstr "Izabrali ste akciju ali niste sačuvali promene polja."
-
-#: contrib/admin/media/js/actions.js:123
-#: contrib/admin/media/js/actions.min.js:6
-msgid ""
-"You have selected an action, and you haven't made any changes on individual "
-"fields. You're probably looking for the Go button rather than the Save "
-"button."
-msgstr "Izabrali ste akciju ali niste izmenili ni jedno polje."
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"januar februar mart april maj jun jul avgust septembar oktobar novembar "
-"decembar"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "N P U S Č P S"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Pokaži"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Sakrij"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "nedelja ponedeljak utorak sreda četvrtak petak subota"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Trenutno vreme"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Sat"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Odabir vremena"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Ponoć"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "18č"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Podne"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Poništi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Danas"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Kalendar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Juče"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Sutra"
diff --git a/parts/django/django/conf/locale/sr_Latn/__init__.py b/parts/django/django/conf/locale/sr_Latn/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/sr_Latn/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/sr_Latn/formats.py b/parts/django/django/conf/locale/sr_Latn/formats.py
deleted file mode 100644
index cb0478e..0000000
--- a/parts/django/django/conf/locale/sr_Latn/formats.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j. F Y.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y. H:i'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.m.Y.'
-SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
-FIRST_DAY_OF_WEEK = 1
-DATE_INPUT_FORMATS = (
- '%d.%m.%Y.', '%d.%m.%y.', # '25.10.2006.', '25.10.06.'
- '%d. %m. %Y.', '%d. %m. %y.', # '25. 10. 2006.', '25. 10. 06.'
- '%Y-%m-%d', # '2006-10-25'
- # '%d. %b %y.', '%d. %B %y.', # '25. Oct 06.', '25. October 06.'
- # '%d. %b \'%y.', '%d. %B \'%y.', # '25. Oct '06.', '25. October '06.'
- # '%d. %b %Y.', '%d. %B %Y.', # '25. Oct 2006.', '25. October 2006.'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d.%m.%Y. %H:%M:%S', # '25.10.2006. 14:30:59'
- '%d.%m.%Y. %H:%M', # '25.10.2006. 14:30'
- '%d.%m.%Y.', # '25.10.2006.'
- '%d.%m.%y. %H:%M:%S', # '25.10.06. 14:30:59'
- '%d.%m.%y. %H:%M', # '25.10.06. 14:30'
- '%d.%m.%y.', # '25.10.06.'
- '%d. %m. %Y. %H:%M:%S', # '25. 10. 2006. 14:30:59'
- '%d. %m. %Y. %H:%M', # '25. 10. 2006. 14:30'
- '%d. %m. %Y.', # '25. 10. 2006.'
- '%d. %m. %y. %H:%M:%S', # '25. 10. 06. 14:30:59'
- '%d. %m. %y. %H:%M', # '25. 10. 06. 14:30'
- '%d. %m. %y.', # '25. 10. 06.'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/sv/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/sv/LC_MESSAGES/django.mo
deleted file mode 100644
index f65754a..0000000
--- a/parts/django/django/conf/locale/sv/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sv/LC_MESSAGES/django.po b/parts/django/django/conf/locale/sv/LC_MESSAGES/django.po
deleted file mode 100644
index 749d2c7..0000000
--- a/parts/django/django/conf/locale/sv/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4804 +0,0 @@
-# Swedish translation of Django
-# Copyright (C) 2005-2007
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-01 18:23+0200\n"
-"PO-Revision-Date: 2008-05-26 11:15+0200\n"
-"Last-Translator: Mikko Hellsing <mikko@aino.se>\n"
-"Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-Language: Swedish\n"
-"X-Poedit-Country: SWEDEN\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arabiska"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Bengaliska"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgariska"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Katalanska"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "Tjeckiska"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Walesiska"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Danska"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "Tyska"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "Grekiska"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "Engelska"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "Spanska"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estländska"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Argentisk Spanska"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "Baskiska"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "Persiska"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "Finska"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Franska"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Irländska"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galisiska"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Ungerska"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "Hebreiska"
-
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr ""
-
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "Kroatiska"
-
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Isländska"
-
-#: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italienska"
-
-#: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "Japanska"
-
-#: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "Georgiska"
-
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Koreanska"
-
-#: conf/global_settings.py:72
-msgid "Khmer"
-msgstr "Khmer"
-
-#: conf/global_settings.py:73
-msgid "Kannada"
-msgstr "Kannada"
-
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Lettiska"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Lettiska"
-
-#: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Makedonska"
-
-#: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Holländska"
-
-#: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Norska"
-
-#: conf/global_settings.py:79
-msgid "Polish"
-msgstr "Polska"
-
-#: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr "Portugisiska"
-
-#: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "Brasiliensk portugisiska"
-
-#: conf/global_settings.py:82
-msgid "Romanian"
-msgstr "Rumänska"
-
-#: conf/global_settings.py:83
-msgid "Russian"
-msgstr "Ryska"
-
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "Slovakiska"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "Slovenska"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "Serbiska"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "Svenska"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "Tamilska"
-
-#: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "Telugu"
-
-#: conf/global_settings.py:90
-msgid "Thai"
-msgstr "Thailändska"
-
-#: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "Turkiska"
-
-#: conf/global_settings.py:92
-msgid "Ukrainian"
-msgstr "Ukrainska"
-
-#: conf/global_settings.py:93
-msgid "Simplified Chinese"
-msgstr "Förenklad Kinesiska"
-
-#: conf/global_settings.py:94
-msgid "Traditional Chinese"
-msgstr "Traditionell Kinesiska"
-
-#: contrib/admin/actions.py:56
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Tog bort %(count)d %(items)s"
-
-#: contrib/admin/actions.py:63 contrib/admin/options.py:1025
-msgid "Are you sure?"
-msgstr "Är du säker?"
-
-#: contrib/admin/actions.py:81
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Tag bort markerade %(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>Av %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Alla"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Alla datum"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Idag"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "Senaste 7 dagarna"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Denna månad"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Detta år"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
-msgid "No"
-msgstr "Nej"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
-msgid "Unknown"
-msgstr "Okänt"
-
-#: contrib/admin/helpers.py:14
-msgid "Action:"
-msgstr ""
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "händelsetid"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "objektets id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "objektets beskrivning"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "händelseflagga"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "ändra meddelande"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "loggpost"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "loggposter"
-
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
-msgid "None"
-msgstr "Inget"
-
-#: contrib/admin/options.py:519
-#, python-format
-msgid "Changed %s."
-msgstr "Ändrade %s."
-
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:384
-msgid "and"
-msgstr "och"
-
-#: contrib/admin/options.py:524
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Lade till %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:528
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Ändrade %(list)s på %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:533
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Tog bort %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:537
-msgid "No fields changed."
-msgstr "Inga fält ändrade."
-
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" lades till."
-
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
-#: contrib/auth/admin.py:75
-msgid "You may edit it again below."
-msgstr "Du kan ändra det igen nedanför."
-
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
-#, python-format
-msgid "You may add another %s below."
-msgstr "Du kan lägga till ytterligare %s nedanför."
-
-#: contrib/admin/options.py:633
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" ändrades."
-
-#: contrib/admin/options.py:641
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" lades till. Du kan redigera objektet igen nedanför."
-
-#: contrib/admin/options.py:772
-#, python-format
-msgid "Add %s"
-msgstr "Lägg till %s"
-
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s-objekt med primärnyckel %(key)r finns inte."
-
-#: contrib/admin/options.py:860
-#, python-format
-msgid "Change %s"
-msgstr "Ändra %s"
-
-#: contrib/admin/options.py:904
-msgid "Database error"
-msgstr "Databasfel"
-
-#: contrib/admin/options.py:940
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s %(name)s ändrades."
-msgstr[1] "%(count)s %(name)s ändrades."
-
-#: contrib/admin/options.py:1018
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" togs bort."
-
-#: contrib/admin/options.py:1054
-#, python-format
-msgid "Change history: %s"
-msgstr "Ändringshistorik: %s"
-
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Var god ange ett korrekt användarnamn och lösenord. Tänk på att skilja "
-"mellan gemener och versaler."
-
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Var god logga in igen, eftersom din session har förfallit."
-
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Det verkar som att din webläsare inte är konfigurerad att acceptera cookies. "
-"Aktivera cookies, ladda om denna sida och försök igen."
-
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Användarnamn får inte innehålla '@'-tecknet."
-
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Din e-postadress är inte ditt användarnamn. Försök med '%s' istället."
-
-#: contrib/admin/sites.py:360
-msgid "Site administration"
-msgstr "Webbplatsadministration"
-
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Logga in"
-
-#: contrib/admin/sites.py:417
-#, python-format
-msgid "%s administration"
-msgstr "Administration av %s"
-
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Ett eller flera %(fieldname)s i %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Ett eller flera %(fieldname)s i %(name)s:"
-
-#: contrib/admin/widgets.py:71
-msgid "Date:"
-msgstr "Datum:"
-
-#: contrib/admin/widgets.py:71
-msgid "Time:"
-msgstr "Tid:"
-
-#: contrib/admin/widgets.py:95
-msgid "Currently:"
-msgstr "Aktuell:"
-
-#: contrib/admin/widgets.py:95
-msgid "Change:"
-msgstr "Ändra:"
-
-#: contrib/admin/widgets.py:124
-msgid "Lookup"
-msgstr "Uppslag"
-
-#: contrib/admin/widgets.py:236
-msgid "Add Another"
-msgstr "Lägg till ytterligare"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Sidan kunde inte hittas"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Vi beklagar men den begärda sidan hittades inte."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Hem"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serverfel"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serverfel (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serverfel <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Ett fel har uppstått. Administratören har meddelats via e-post och felet bör "
-"vara åtgärdat inom kort. Tack för visat tålamod."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Kör markerade operationer"
-
-#: contrib/admin/templates/admin/actions.html:4
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Sök"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:26
-msgid "Welcome,"
-msgstr "Välkommen,"
-
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentation"
-
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "Ändra lösenord"
-
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "Logga ut"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django webbplatsadministration"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django-administration"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Lägg till"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Historik"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
-msgid "View on site"
-msgstr "Visa på webbplats"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Rätta till felet nedan."
-msgstr[1] "Rätta till felen nedan."
-
-#: contrib/admin/templates/admin/change_list.html:46
-#, python-format
-msgid "Add %(name)s"
-msgstr "Lägg till %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:65
-msgid "Filter"
-msgstr "Filter"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
-msgid "Delete"
-msgstr "Radera"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Att ta bort %(object_name)s '%(escaped_object)s' skulle innebära att "
-"relaterade objekt togs bort, men ditt konto har inte rättigheter att ta bort "
-"följande objekttyper:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Är du säker på att du vill ta bort %(object_name)s \"%(escaped_object)s\"? "
-"Följande relaterade objekt kommer att tas bort:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Ja, jag är säker"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Tog bort %(name)s \"%(object)s\"."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Att ta bort %(object_name)s skulle innebära att relaterade objekt togs bort, "
-"men ditt konto har inte rättigheter att ta bort följande objekttyper:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
-msgstr ""
-"Är du säker på att du vill ta bort %(object_name)s objekten? Följande "
-"relaterade objekt kommer att tas bort:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " Av %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modeller tillgängliga i applikationen %(name)s."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Ändra"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Du har inte rättigheter att redigera något."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "Senaste Händelser"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "Mina händelser"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Inga tillgängliga"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Någonting är fel med din databasinstallation. Se till att de rätta "
-"databastabellerna har skapats och att databasen är läsbar av rätt användare."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Användarnamn:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Lösenord:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Datum tid"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Användare"
-
-#: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
-msgid "Action"
-msgstr "Händelse"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "Y-m-d H:i"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Detta objekt har ingen ändringshistorik. Det lades antagligen inte till via "
-"denna administrationssida."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Visa alla"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 resultat"
-msgstr[1] "%(counter)s resultat"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s totalt"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Spara"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Spara som ny"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Spara och lägg till ny"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Spara och fortsätt redigera"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Ange först ett användarnamn och ett lösenord. Efter det kommer du att få "
-"fler användaralternativ."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Användarnamn"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Lösenord"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Lösenord (igen)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Fyll i samma lösenord som ovan för verifiering."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Ange nytt lösenord för användare <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Radera?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Tack för att du spenderade lite kvalitetstid med webbplatsen idag."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Logga in igen"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "Ändra lösenord"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Lösenordet ändrades"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Ditt lösenord har ändrats."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Var god fyll i ditt gamla lösenord för säkerhets skull och skriv sedan in "
-"ditt nya lösenord två gånger så vi kan kontrollera att du skrev det rätt."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Gammalt lösenord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nytt lösenord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Bekräfta lösenord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Ändra mitt lösenord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Nollställ lösenord"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Nollställning av lösenord klar"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Ditt lösenord har ändrats. Du kan nu logga in."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Bekräftelse av lösenordsnollställning"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Fyll i lösenord"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Var god fyll i ditt nya lösenord två gånger så vi kan kontrollera att du "
-"skrev det rätt."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Lösenordsnollställning misslyckad"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Länken för lösenordsnollställning var felaktig, möjligen därför att den "
-"redan använts. Var god skicka en ny nollställningsförfrågan."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Lösenordsnollställning lyckades"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Vi har skickat ett e-postmeddelande med instruktioner för att ändra ditt "
-"lösenord till den e-postaddress du angivit. Det bör anlända inom kort."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Du får detta e-postbrev eftersom du bad om att få lösenordet nollställt"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "för ditt användarkonto på %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Var god gå till följande sida och välj ett nytt lösenord:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Ditt användarnamn (i fall du skulle ha glömt det):"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Tack för att du använder vår webbplats!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s-teamet"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Glömt ditt lösenord? Fyll i din e-postadress nedan så skickar vi ett e-"
-"postmeddelande med instruktioner för hur du ställer in ett nytt."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-postadress:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Nollställ mitt lösenord"
-
-#: contrib/admin/templatetags/admin_list.py:299
-msgid "All dates"
-msgstr "Alla datum"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Välj %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Välj %s att ändra"
-
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
-msgid "site"
-msgstr "webbplats"
-
-#: contrib/admin/views/template.py:39
-msgid "template"
-msgstr "mall"
-
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
-msgid "tag:"
-msgstr "tagg:"
-
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
-msgid "filter:"
-msgstr "filter:"
-
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
-msgid "view:"
-msgstr "vy:"
-
-#: contrib/admindocs/views.py:187
-#, python-format
-msgid "App %r not found"
-msgstr "Applikation %r hittades inte"
-
-#: contrib/admindocs/views.py:194
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Modell %(model_name)r hittades inte i applikation %(app_label)r"
-
-#: contrib/admindocs/views.py:206
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "det relaterade `%(app_label)s.%(data_type)s`-objektet"
-
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
-msgid "model:"
-msgstr "modell:"
-
-#: contrib/admindocs/views.py:237
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "relaterade `%(app_label)s.%(object_name)s`-objekt"
-
-#: contrib/admindocs/views.py:242
-#, python-format
-msgid "all %s"
-msgstr "alla %s"
-
-#: contrib/admindocs/views.py:247
-#, python-format
-msgid "number of %s"
-msgstr "antal %s"
-
-#: contrib/admindocs/views.py:252
-#, python-format
-msgid "Fields on %s objects"
-msgstr "Fält på %s objekt"
-
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
-msgid "Integer"
-msgstr "Heltal"
-
-#: contrib/admindocs/views.py:316
-msgid "Boolean (Either True or False)"
-msgstr "Boolesk (antingen True eller False)"
-
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Sträng (upp till %(max_length)s)"
-
-#: contrib/admindocs/views.py:318
-msgid "Comma-separated integers"
-msgstr "Komma-separerade heltal"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (without time)"
-msgstr "Datum (utan tid)"
-
-#: contrib/admindocs/views.py:320
-msgid "Date (with time)"
-msgstr "Datum (med tid)"
-
-#: contrib/admindocs/views.py:321
-msgid "Decimal number"
-msgstr "Decimaltal"
-
-#: contrib/admindocs/views.py:322
-msgid "E-mail address"
-msgstr "E-postadress"
-
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
-msgid "File path"
-msgstr "Sökväg till fil"
-
-#: contrib/admindocs/views.py:325
-msgid "Floating point number"
-msgstr "Flyttal"
-
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP-adress"
-
-#: contrib/admindocs/views.py:331
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolesk (antingen True, False eller None)"
-
-#: contrib/admindocs/views.py:332
-msgid "Relation to parent model"
-msgstr "Relation till förälder-modell"
-
-#: contrib/admindocs/views.py:333
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/admindocs/views.py:338
-msgid "Text"
-msgstr "Text"
-
-#: contrib/admindocs/views.py:339
-msgid "Time"
-msgstr "Tid"
-
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:341
-msgid "U.S. state (two uppercase letters)"
-msgstr "Delstat i USA (två versaler)"
-
-#: contrib/admindocs/views.py:342
-msgid "XML text"
-msgstr "XML-text"
-
-#: contrib/admindocs/views.py:368
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s verkar inte vara ett urlpattern-objekt"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Smarta bokmärken"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Smarta bokmärken för dokumentation"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">För att installera smarta bokmärken, dra länken till din\n"
-"verktygsrad med bokmärken, eller högerklicka på länken och lägg till den\n"
-"till dina bokmärken. Nu kan du välja det smarta bokmärket från alla sidor\n"
-"på webbplatsen. Observera att några av dessa smarta bokmärken kräver att du "
-"besöker\n"
-"sidan från en dator som är \"intern\" (kontakta din systemadministratör\n"
-"om du inte är säker på om din dator är \"intern\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Dokumentation för denna sida"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Förflyttar dig från valfri sida till dokumentationen för vyn som genererar "
-"den sidan."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Visa objektets ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Visa innehållstypen och det unika ID-numret för sidor som representerar ett "
-"enskilt objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Redigera detta objekt (aktuellt fönster)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Hoppar till administrationssidan för sidor som representerar ett enskilt "
-"objekt."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Redigera detta objekt (nytt fönster)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Som ovan, men öppnar administrationssidan i ett nytt fönster."
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "Personlig information"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "Rättigheter"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "Viktiga datum"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "Grupper"
-
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Lägg till användare"
-
-#: contrib/auth/admin.py:106
-msgid "Password changed successfully."
-msgstr "Lösenordet ändrades."
-
-#: contrib/auth/admin.py:112
-#, python-format
-msgid "Change password: %s"
-msgstr "Ändra lösenord: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Obligatorisk. 30 tecken eller färre. Endast bokstäver, siffror eller "
-"understreck."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Detta värde får endast innehålla bokstäver, siffror och understreck."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Lösenordsbekräftelse"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "En användare med det användarnamnet finns redan."
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
-msgid "The two password fields didn't match."
-msgstr "De två lösenordsfälten stämde inte överens."
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "Detta konto är inaktivt."
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Din webbläsare verkar inte tillåta cookies. Cookies behövs för att kunna "
-"logga in."
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "E-postadress"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Den e-postadressen är inte associerad med något användarkonto. Är du säker "
-"på att du har registrerat dig?"
-
-#: contrib/auth/forms.py:135
-#, python-format
-msgid "Password reset on %s"
-msgstr "Lösenord nollställt för %s"
-
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nytt lösenord"
-
-#: contrib/auth/forms.py:144
-msgid "New password confirmation"
-msgstr "Bekräfta nytt lösenord"
-
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Gammalt lösenord"
-
-#: contrib/auth/forms.py:177
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Ditt gamla lösenord var felaktigt ifyllt. Var vänlig fyll i det igen."
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
-msgid "name"
-msgstr "namn"
-
-#: contrib/auth/models.py:65
-msgid "codename"
-msgstr "kodnamn"
-
-#: contrib/auth/models.py:68
-msgid "permission"
-msgstr "rättighet"
-
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
-msgid "permissions"
-msgstr "rättigheter"
-
-#: contrib/auth/models.py:90
-msgid "group"
-msgstr "grupp"
-
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
-msgid "groups"
-msgstr "grupper"
-
-#: contrib/auth/models.py:128
-msgid "username"
-msgstr "användarnamn"
-
-#: contrib/auth/models.py:129
-msgid "first name"
-msgstr "förnamn"
-
-#: contrib/auth/models.py:130
-msgid "last name"
-msgstr "efternamn"
-
-#: contrib/auth/models.py:131
-msgid "e-mail address"
-msgstr "e-postadress"
-
-#: contrib/auth/models.py:132
-msgid "password"
-msgstr "lösenord"
-
-#: contrib/auth/models.py:132
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Använd '[algo]$[salt]$[hexdigest]' eller använd <a href=\"password/\">Ändra "
-"lösenord-formuläret</a>."
-
-#: contrib/auth/models.py:133
-msgid "staff status"
-msgstr "personalstatus"
-
-#: contrib/auth/models.py:133
-msgid "Designates whether the user can log into this admin site."
-msgstr "Avgör om användaren kan logga in på denna adminsida."
-
-#: contrib/auth/models.py:134
-msgid "active"
-msgstr "aktiv"
-
-#: contrib/auth/models.py:134
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Anger om användaren skall betraktas som aktiv. Avmarkera detta istället för "
-"att ta bort konton."
-
-#: contrib/auth/models.py:135
-msgid "superuser status"
-msgstr "superanvändare"
-
-#: contrib/auth/models.py:135
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Anger att denna användare har alla rättigheter utan att uttryckligen "
-"tilldela dem."
-
-#: contrib/auth/models.py:136
-msgid "last login"
-msgstr "senaste inloggning"
-
-#: contrib/auth/models.py:137
-msgid "date joined"
-msgstr "registreringsdatum"
-
-#: contrib/auth/models.py:139
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Förutom de rättigheterna som utdelas manuellt så kommer användaren dessutom "
-"få samma rättigheter som de grupper där han/hon är medlem."
-
-#: contrib/auth/models.py:140
-msgid "user permissions"
-msgstr "användarättigheter"
-
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "användare"
-
-#: contrib/auth/models.py:145
-msgid "users"
-msgstr "användare"
-
-#: contrib/auth/models.py:301
-msgid "message"
-msgstr "meddelande"
-
-#: contrib/auth/views.py:56
-msgid "Logged out"
-msgstr "Utloggad"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
-msgid "Enter a valid e-mail address."
-msgstr "Fyll i en giltig e-postadress."
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "Innehåll"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s kommentarer"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "Senaste kommentarer på %(site_name)s"
-
-#: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
-msgid "Name"
-msgstr "Namn"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-postadress"
-
-#: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
-msgid "Comment"
-msgstr "Kommentar"
-
-#: contrib/comments/forms.py:173
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Akta din tunga! Ordet %s är inte tillåtet här."
-msgstr[1] "Akta din tunga! Orden %s är inte tillåtna här."
-
-#: contrib/comments/forms.py:180
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Om du fyller i detta fält kommer din kommentar att betraktas som spam"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
-msgid "content type"
-msgstr "innehålls typ"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "objektets ID"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "användares namn"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "användares e-postadress"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "användares URL"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "kommentar"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "skickat datum/tid"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "är offentlig"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Avmarkeras detta kommer kommentaren inte synas på webbplatsen."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "är borttaget"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Bocka för denna ruta om kommentaren är olämplig. Ett \"Denna kommentar har "
-"tagits bort\"-meddelande kommer visas istället."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "kommentarer"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Denna kommentar postades av en autentiserad användare och därför är namnet "
-"skrivskyddat."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Denna kommentar postades av en autentiserad användare och därför är e-"
-"postadressen skrivskyddad."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Inlagt av %(user)s %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "flagga"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "datum"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "kommentarsflagga"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "kommentarsflaggor"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Godkänn en kommentar"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Är du säker på att du vill offentliggöra kommentaren?"
-
-#: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
-msgid "Approve"
-msgstr "Godkänn"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Tack för ditt godkännande"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Tack för att du tog dig tid att förbättra kvaliteten på denna sites "
-"diskussioner"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Tag bort en kommentar"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Är du säker på att du vill ta bort denna kommentar?"
-
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Tag bort"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Tack för att du tog bort"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Flagga denna kommentar"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Är du säker på att du vill flagga kommentaren?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "Flagga"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "Tack för att ditt flaggande"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Skicka"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Förhandsgranska"
-
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Modereringskö för kommentarer"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Inga kommentarer att moderera"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-postadress"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Autentiserad?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP-adress"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Inskickat datum"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "ja"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "nej"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Tack för din kommentar"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Tack för din kommentar"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Förhandsgranska din kommentar"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Rätta till felet nedan."
-msgstr[1] "Rätta till felen nedan."
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Skicka kommentar"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "eller gör ändringar"
-
-#: contrib/contenttypes/models.py:70
-msgid "python model class name"
-msgstr "klassnamn för Python-modell"
-
-#: contrib/contenttypes/models.py:75
-msgid "content types"
-msgstr "innehållstyper"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Exempel: '/om/kontakt/'. Se till att ha inledande och avslutande snedstreck."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Detta värde får endast innehålla bokstäver, siffror, understreck, "
-"bindestreck eller snedstreck."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Avancerade inställningar"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "titel"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "innehåll"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "aktivera kommentarer"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "mallnamn"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Exempel: 'sidor/kontaktsida.html'. Om detta inte fylls i kommer systemet att "
-"använda 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "registrering krävs"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Om detta bockas för kommer endast inloggade användare kunna se sidan."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "statisk sida"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "statiska sidor"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Vi beklagar, men formuläret har förfallit. Var god fortsätt fylla i det från "
-"denna sida."
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Inget geometriskt värde angivet."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Ogiltigt geometrivärde."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Ogiltig geometrityp"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr "Ett fel uppstod under transformering till SRID:t hos formulärsfältet."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr ":a"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr ":a"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr ":e"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr ":e"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f miljon"
-msgstr[1] "%(value).1f miljoner"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value)1.f miljard"
-msgstr[1] "%(value)1.f miljarder"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value)1.f biljon"
-msgstr[1] "%(value)1.f biljoner"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "ett"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "två"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "tre"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "fyra"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "fem"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "sex"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "sju"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "åtta"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "nio"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "idag"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "imorgon"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "igår"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Fyll i ett postnummer med formatet NNNN eller ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Detta fält kräver enbart siffror."
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "Detta fält kräver 7 eller 8 sifrror."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Fyll i ett giltigt CUIT med formatet XX-XXXXXXXX-X eller XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "Felaktigt CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Kärnten"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Niederösterreich"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Oberösterreich"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Steiermark"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrolen"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Wien"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Fyll i postnummer med formatet XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Fyll i ett giltigt Österrikiskt personnummer i formatet XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Fyll i ett fyrsiffrigt postnummer."
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Fyll i ett postnummer med formatet XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonnummer måste vara i formatet XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Välj ett giltigt alternativ. Det valet finns inte bland tillgängliga "
-"alternativ."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Ogiltigt CPF-nummer."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Detta fält kräver högst 11 siffror eller 14 bokstäver."
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Ogiltigt CNPJ-nummer."
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Detta fält kräver minst 14 sifrror"
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Fyll i ett postnummer med formatet XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Fyll i ett giltigt Kanadensiskt \"social insurance number\" med formatet XXX-"
-"XXX-XXX."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Landschaft"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Bern"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Genève"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubünden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Luzern"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchâtel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "Sankt Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürich"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Fyll i ett giltigt Schweiziskt ID- eller passkortnummer med formatet "
-"X1234567<0 eller 1234567890."
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Fyll i ett giltigt chilenskt RUT"
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Fyll i ett giltigt chilenskt RUT. Formatet är XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "Det chilenska RUT:et var inte giltigt."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prag"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Fyll i ett postnummer med formatet XXXXX eller XXX XX."
-
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Enter a valid birth number."
-msgstr "Fyll i ett giltigt födelsenummer."
-
-#: contrib/localflavor/cz/forms.py:106
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Württemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bayern"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Vorpommern"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Nedre Sachsen"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Nordrhein-Westfalen"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhenlandet"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Sachsen"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Sachsen-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thüringen"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Fyll i ett postnummer med formatet XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Fyll i ett giltigt tyskt ID-kortnummer med formatet XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "AlmeriaAlmería"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Ávila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barcelona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Cáceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cádiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castellón"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Córdoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruña"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaén"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "León"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Málaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturien"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Kantabrien"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Sevilla"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Biscaya"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusien"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragonien"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Asturien"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearerna"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Baskien"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Kanarieöarna"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Kastilien-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Kastilien och Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Katalonien"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicien"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murciaregionen"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Navarra"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valenciaregionen"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Fyll i ett giltigt postnummer i serien och med formatet 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Fyll i ett giltigt telefonnummer med ett av formaten: 6XXXXXXXX, 8XXXXXXXX "
-"eller 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Var god fyll i en giltig NIF, NIE, eller CIF."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Var god fyll i giltigt NIF eller NIE."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Ogiltig kontrollsumma för NIF."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Ogiltig kontrollsumma för NIE."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Ogiltig kontrollsumma för CIF."
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Var god fyll i ett giltigt bankkontonummer i XXXX-XXXX-XX-XXXXXXXXXX-format."
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Ogiltig kontrollsumma för bankkontonummer."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Fyll i ett giltigt finskt personnummer."
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Fyll i ett postnummer med formatet XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Fyll i ett giltigt isländskt personnummer. Formatet är XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Det isländska personnumret är inte giltigt."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Fyll i ett giltigt postnummer."
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Fyll i ett giltigt personnummer."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Fyll i ett giltigt VAT-nummer."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Fyll i ett postnummer med formatet XXXXXXX eller XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ischikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kuamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Mexikanska staten"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Fyll i ett giltigt postnummer."
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Fyll i ett giltigt telefonnummer."
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Fyll i ett giltigt SoFi-nummer."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Fyll i ett giltigt norskt personnummer."
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "Detta fält kräver 8 sifrror."
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "Detta fält kräver 11 sifrror."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "\"National Identification Number\" består av 11 siffror."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Fel kontrollsumma för \"National Identification Number\""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Fyll i ett skattenummer (NIP) med formatet XXX-XXX-XX-XX eller XX-XX-XXX-XXX."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Fel kontrollsumma för skattenumret (NIP)."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Fel kontrollsumma för \"National Business Register Number\" (REGON)."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Fyll i ett postnummer med formatet XX-XXX."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Lower Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "West Pomerania"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Fyll i ett giltigt CIF."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Fyll i ett giltigt CNP."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Fyll i ett giltigt IBAN med formatet ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonnummer måste vara i formatet XXXX-XXXXXX."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Fyll i ett postnummer med formatet XXX XXX."
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kosice-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Presov-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trencin-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava-regionen"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zilina-regionen"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Fyll i ett giltigt postnummer."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "East Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "Essex"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Gloucestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Mid Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "South Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "West Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Central Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries and Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Islands"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Western Isles"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Nordirland"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Scotland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Fyll i ett postnummer med formatet XXXXX eller XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Fyll i ett giltigt amerikanskt personnummer i formatet XXX-XX-XXXX."
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Fyll i ett giltigt Sydafrikanskt ID-nummer."
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Fyll i ett giltigt Afrikanskt postnummer."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Eastern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "North West"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Western Cape"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "omdirigera från"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Detta bör vara en absolut sökväg utan domännamnet. Exempel: '/handelser/"
-"sok/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "omdirigera till"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Detta kan vara antingen en absolut sökväg (som ovan) eller en fullständig "
-"URL som börjar med 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "omdirigera"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "omdirigeringar"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "sessionsnyckel"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "sessionsdata"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "utgångsdatum"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "session"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessioner"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "domännamn"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "visningsnamn"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "webbplatser"
-
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Detta värde måste vara ett heltal."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Detta värde måste vara antingen True eller False."
-
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "Detta fält får inte vara null."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Fyll enbart i siffror separerade med kommatecken."
-
-#: db/models/fields/__init__.py:474
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Fyll i ett giltigt datum med formatet ÅÅÅÅ-MM-DD."
-
-#: db/models/fields/__init__.py:483
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ogiltigt datum: %s"
-
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Fyll i en giltig tidpunkt med formatet ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:601
-msgid "This value must be a decimal number."
-msgstr "Detta värde måste vara ett decimaltal."
-
-#: db/models/fields/__init__.py:686
-msgid "This value must be a float."
-msgstr ""
-
-#: db/models/fields/__init__.py:746
-msgid "This value must be either None, True or False."
-msgstr "Detta värde måste vara antingen None, True eller False."
-
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Fyll i ett giltigt klockslag med formatet TT:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/related.py:792
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Håll ner \"Control\" eller \"Command\" på en Mac för att välja fler än en."
-
-#: db/models/fields/related.py:870
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Var god och fyll giltiga %(self)s ID-nummer. Värdet %(value)r är ogiltigt."
-msgstr[1] ""
-"Var god och fyll giltiga %(self)s ID-nummer. Värdena %(value)r är ogiltiga."
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "Detta fält måste fyllas i."
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Fyll i ett giltigt värde."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Kontrollera att detta värde har högst %(max)d tecken (det har %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Kontrollera att detta värde har minst %(min)d tecken (det har %(length)d)."
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "Fyll i ett heltal."
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Kontrollera att detta värde är mindre eller lika med %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Kontrollera att detta värde är mer eller lika med %s."
-
-#: forms/fields.py:195 forms/fields.py:224
-msgid "Enter a number."
-msgstr "Fyll i ett tal."
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Kontrollera att det inte finns mer än totalt %s siffror."
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Kontrollera att det inte finns mer än %s decimaler."
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Kontrollera att det inte finns mer än %s siffror före decimaltecknet."
-
-#: forms/fields.py:288 forms/fields.py:862
-msgid "Enter a valid date."
-msgstr "Fyll i ett giltigt datum."
-
-#: forms/fields.py:322 forms/fields.py:863
-msgid "Enter a valid time."
-msgstr "Fyll i en giltig tid."
-
-#: forms/fields.py:361
-msgid "Enter a valid date/time."
-msgstr "Fyll i ett giltigt datum/tid."
-
-#: forms/fields.py:447
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Ingen fil skickades. Kontrollera kodningnstypen i formuläret."
-
-#: forms/fields.py:448
-msgid "No file was submitted."
-msgstr "Ingen fil skickades."
-
-#: forms/fields.py:449
-msgid "The submitted file is empty."
-msgstr "Den skickade filen är tom."
-
-#: forms/fields.py:450
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Kontrollera att detta värde har högst %(max)d tecken (det har %(length)d)."
-
-#: forms/fields.py:483
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Ladda upp en giltig bild. Filen du laddade upp var antingen ingen bild eller "
-"en korrupt bild."
-
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Fyll i en giltig URL."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Denna URL verkar vara en trasig länk."
-
-#: forms/fields.py:624 forms/fields.py:702
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Välj ett giltigt alternativ. %(value)s finns inte bland tillgängliga "
-"alternativ."
-
-#: forms/fields.py:703 forms/fields.py:764 forms/models.py:863
-msgid "Enter a list of values."
-msgstr "Fyll i en lista med värden."
-
-#: forms/fields.py:891
-msgid "Enter a valid IPv4 address."
-msgstr "Fyll i en giltig IPv4 adress."
-
-#: forms/fields.py:901
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Fyll i en giltig 'slug', beståendes av enbart bokstäver, siffror, "
-"understreck samt bindestreck."
-
-#: forms/formsets.py:271 forms/formsets.py:273
-msgid "Order"
-msgstr "Sortering"
-
-#: forms/models.py:363
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s måste vara unikt för %(date_field)s %(lookup)s."
-
-#: forms/models.py:377 forms/models.py:385
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s med detta %(field_label)s finns redan."
-
-#: forms/models.py:738
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: forms/models.py:793
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Välj ett giltigt alternativ. Det valet finns inte bland tillgängliga "
-"alternativ."
-
-#: forms/models.py:864
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-"Välj ett giltigt alternativ. %s finns inte bland tillgängliga alternativ."
-
-#: forms/models.py:866
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "En primärnyckel kan inte ha värde \"%s\""
-
-#: template/defaultfilters.py:767
-msgid "yes,no,maybe"
-msgstr "ja,nej,kanske"
-
-#: template/defaultfilters.py:798
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d byte"
-
-#: template/defaultfilters.py:800
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:802
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:803
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "e.m."
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "f.m."
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "FM"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "EM"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "midnatt"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "middag"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "måndag"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "tisdag"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "onsdag"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "torsdag"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "fredag"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "lördag"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "söndag"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "mån"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "tis"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "ons"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "tors"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "fre"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "lör"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "sön"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "januari"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "februari"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "mars"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "april"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "maj"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "juni"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "juli"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "augusti"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "september"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "oktober"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "november"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "december"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "jan"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "feb"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "apr"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "maj"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "jun"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "jul"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "aug"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "sep"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "okt"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "nov"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "dec"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "jan."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "feb."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "aug."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "sept."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "okt."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "nov."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "dec."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "eller"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "år"
-msgstr[1] "år"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "månad"
-msgstr[1] "månader"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "vecka"
-msgstr[1] "veckor"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "dag"
-msgstr[1] "dagar"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "timme"
-msgstr[1] "timmar"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minut"
-msgstr[1] "minuter"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "minuter"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:399
-msgid "DATE_FORMAT"
-msgstr "Y-m-d"
-
-#: utils/translation/trans_real.py:401
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:417
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:418
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s skapades."
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s uppdaterades."
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s togs bort."
-
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "Y-m-d H:i:s"
-
-#~ msgid "headline"
-#~ msgstr "rubrik"
-
-#~ msgid "rating #1"
-#~ msgstr "betyg #1"
-
-#~ msgid "rating #2"
-#~ msgstr "betyg #2"
-
-#~ msgid "rating #3"
-#~ msgstr "betyg #3"
-
-#~ msgid "rating #4"
-#~ msgstr "betyg #4"
-
-#~ msgid "rating #5"
-#~ msgstr "betyg #5"
-
-#~ msgid "rating #6"
-#~ msgstr "betyg #6"
-
-#~ msgid "rating #7"
-#~ msgstr "betyg #7"
-
-#~ msgid "rating #8"
-#~ msgstr "betyg #8"
-
-#~ msgid "is valid rating"
-#~ msgstr "är ett giltigt betyg"
-
-#~ msgid "Content object"
-#~ msgstr "Innehållsobjekt"
-
-#~ msgid "person's name"
-#~ msgstr "personens namn"
-
-#~ msgid "ip address"
-#~ msgstr "IP-adress"
-
-#~ msgid "approved by staff"
-#~ msgstr "godkänd av personal"
-
-#~ msgid "free comments"
-#~ msgstr "fria kommentarer"
-
-#~ msgid "score"
-#~ msgstr "poäng"
-
-#~ msgid "score date"
-#~ msgstr "poäng tilldelad"
-
-#~ msgid "karma score"
-#~ msgstr "karmapoäng"
-
-#~ msgid "karma scores"
-#~ msgstr "karmapoäng"
-
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "Betyg %(score)d av %(user)s"
-
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Denna kommentar flaggades av %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "flag date"
-#~ msgstr "flaggdatum"
-
-#~ msgid "user flag"
-#~ msgstr "användarflagga"
-
-#~ msgid "user flags"
-#~ msgstr "användarflaggor"
-
-#~ msgid "Flag by %r"
-#~ msgstr "Flaggad av %r"
-
-#~ msgid "deletion date"
-#~ msgstr "borttagningsdatum"
-
-#~ msgid "moderator deletion"
-#~ msgstr "borttaget av moderator"
-
-#~ msgid "moderator deletions"
-#~ msgstr "borttagna av moderator"
-
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Borttaget av moderator %r"
-
-#~ msgid "Forgotten your password?"
-#~ msgstr "Glömt ditt lösenord?"
-
-#~ msgid "Ratings"
-#~ msgstr "Betyg"
-
-#~ msgid "Required"
-#~ msgstr "Obligatorisk"
-
-#~ msgid "Optional"
-#~ msgstr "Valfri"
-
-#~ msgid "Post a photo"
-#~ msgstr "Lägg till foto"
-
-#~ msgid "Your name:"
-#~ msgstr "Ditt namn:"
-
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr "Detta betyg krävs eftersom du har fyllt i minst ett annat betyg."
-
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "Denna kommentar postades av en användare som har postat färre än %(count)"
-#~ "s kommentar:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[1] ""
-#~ "Denna kommentar postades av en användare som har postat färre än %(count)"
-#~ "s kommentarer:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Endast POST är tillåtet"
-
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "Ett eller flera av de obligatoriska fälten skickades inte"
-
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr "Någon har manipulerat kommentarformuläret (säkerhetsintrång)"
-
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "Kommentarformuläret hade en ogiltig 'target'-parameter -- objektets ID "
-#~ "var ogiltigt"
-
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr ""
-#~ "Kommentarformuläret tillhandahöll varken 'förhandsgranska' eller 'post'"
-
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Anonyma användare får inte rösta"
-
-#~ msgid "Invalid comment ID"
-#~ msgstr "Ogiltigt kommentar-ID"
-
-#~ msgid "No voting for yourself"
-#~ msgstr "Du får inte rösta på dig själv"
-
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "Versaler är inte tillåtna här."
-
-#~ msgid "Lowercase letters are not allowed here."
-#~ msgstr "Gemener är inte tillåtna här."
-
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Fyll i giltiga e-postadresser separerade med kommatecken."
-
-#~ msgid "Please enter a valid IP address."
-#~ msgstr "Var god fyll i en giltig IP-adress."
-
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "Tomma värden är inte tillåtna här."
-
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "Icke-numeriska tecken är inte tillåtna här."
-
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Detta värde kan inte enbart bestå av siffror."
-
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "Endast bokstäver är tillåtna här."
-
-#~ msgid "Enter a valid time in HH:MM format."
-#~ msgstr "Fyll i ett giltigt klockslag med formatet TT:MM."
-
-#~ msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-#~ msgstr "Fyll i en giltig tidpunkt med formatet ÅÅÅÅ-MM-DD TT:MM."
-
-#~ msgid "The URL %s does not point to a valid image."
-#~ msgstr "URL:en %s pekar inte på en giltig bild."
-
-#~ msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-#~ msgstr ""
-#~ "Telefonnummer måste vara angivna med formatet XXX-XXX-XXXX. \"%s\" är "
-#~ "ogiltigt."
-
-#~ msgid "The URL %s does not point to a valid QuickTime video."
-#~ msgstr "URL:en %s pekar inte på en giltig QuickTime-video."
-
-#~ msgid "A valid URL is required."
-#~ msgstr "En giltig URL krävs."
-
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Giltig HTML krävs. Specifika fel är:\n"
-#~ "%s"
-
-#~ msgid "Badly formed XML: %s"
-#~ msgstr "Felaktigt formaterad XML: %s"
-
-#~ msgid "Invalid URL: %s"
-#~ msgstr "Felaktig URL: %s"
-
-#~ msgid "The URL %s is a broken link."
-#~ msgstr "URL:en %s är en trasig länk."
-
-#~ msgid "Enter a valid U.S. state abbreviation."
-#~ msgstr "Fyll i en giltig förkortning för en amerikansk delstat."
-
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "Detta fält måste matcha fältet '%s'."
-
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "Var god fyll i minst ett fält."
-
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr "Fyll antingen i båda fälten eller lämna båda tomma."
-
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr "Detta fält måste anges om %(field)s inte är %(value)s"
-
-#~ msgid "Duplicate values are not allowed."
-#~ msgstr "Dubbletter är inte tillåtna."
-
-#~ msgid "This value must be between %(lower)s and %(upper)s."
-#~ msgstr "Detta värde måste vara mellan %(lower)s och %(upper)s."
-
-#~ msgid "This value must be no more than %s."
-#~ msgstr "Detta värde får inte vara mer än %s."
-
-#~ msgid "This value must be a power of %s."
-#~ msgstr "Detta värde måste vara en potens av %s."
-
-#~ msgid "Please enter a valid decimal number."
-#~ msgstr "Fyll i ett giltigt decimaltal."
-
-#~ msgid "Please enter a valid decimal number with at most %s total digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s total digits."
-#~ msgstr[0] "Fyll i ett giltigt decimaltal med som mest %s siffra totalt."
-#~ msgstr[1] "Fyll i ett giltigt decimaltal med som mest %s siffror totalt."
-
-#~ msgid ""
-#~ "Please enter a valid decimal number with a whole part of at most %s digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with a whole part of at most %s "
-#~ "digits."
-#~ msgstr[0] ""
-#~ "Fyll i ett giltigt decimaltal med en heltalsdel med som mest %s siffra."
-#~ msgstr[1] ""
-#~ "Fyll i ett giltigt decimaltal med en heltalsdel med som mest %s siffror."
-
-#~ msgid "Please enter a valid decimal number with at most %s decimal place."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s decimal places."
-#~ msgstr[0] "Fyll i ett giltigt decimaltal med som mest %s decimal."
-#~ msgstr[1] "Fyll i ett giltigt decimaltal med som mest %s decimaler."
-
-#~ msgid "Please enter a valid floating point number."
-#~ msgstr "Fyll i ett giltigt flyttal."
-
-#~ msgid "Make sure your uploaded file is at least %s bytes big."
-#~ msgstr "Se till att filen du laddade upp är minst %s byte stor."
-
-#~ msgid "Make sure your uploaded file is at most %s bytes big."
-#~ msgstr "Se till att filen du laddade upp är som mest %s byte stor."
-
-#~ msgid "The format for this field is wrong."
-#~ msgstr "Formatet för detta fält är fel."
-
-#~ msgid "This field is invalid."
-#~ msgstr "Detta fält är ogiltigt."
-
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "Kunde inte hämta något från %s."
-
-#~ msgid ""
-#~ "The URL %(url)s returned the invalid Content-Type header '%(contenttype)"
-#~ "s'."
-#~ msgstr ""
-#~ "URL:en %(url)s returnerade den ogiltiga Content-Type headern '%"
-#~ "(contenttype)s'."
-
-#~ msgid ""
-#~ "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts "
-#~ "with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Var god avsluta den oavslutade taggen %(tag)s på rad %(line)s. (Raden "
-#~ "börjar med \"%(start)s\".)"
-
-#~ msgid ""
-#~ "Some text starting on line %(line)s is not allowed in that context. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "En del text som börjar på rad %(line)s är inte tillåten i det "
-#~ "sammanhanget. (Raden börjar med \"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
-#~ "\"%(start)s\".)"
-#~ msgstr ""
-#~ "\"%(attr)s\" på rad %(line)s är ett ogiltigt attribut. (Raden börjar med "
-#~ "\"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-#~ "(start)s\".)"
-#~ msgstr ""
-#~ "\"<%(tag)s>\" på rad %(line)s är en ogiltig tagg. (Raden börjar med \"%"
-#~ "(start)s\".)"
-
-#~ msgid ""
-#~ "A tag on line %(line)s is missing one or more required attributes. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "En tagg på rad %(line)s saknar en eller flera obligatoriska attribut. "
-#~ "(Raden börjar med \"%(start)s\".)"
-
-#~ msgid ""
-#~ "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Attributet \"%(attr)s\" på rad %(line)s har ett ogiltigt värde. (Raden "
-#~ "börjar med \"%(start)s\".)"
-
-#~ msgid ""
-#~ "%(object)s with this %(type)s already exists for the given %(field)s."
-#~ msgstr "%(object)s med typen %(type)s finns redan för %(field)s."
-
-#~ msgid "Enter a valid filename."
-#~ msgstr "Fyll i ett giltigt filnamn."
-
-#~ msgid "Please enter a valid %s."
-#~ msgstr "Var god fyll i giltig %s."
-
-#~ msgid "Ensure your text is less than %s character."
-#~ msgid_plural "Ensure your text is less than %s characters."
-#~ msgstr[0] "Se till att din text är kortare än %s tecken."
-#~ msgstr[1] "Se till att din text är kortare än %s tecken."
-
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "Radbrytningar är inte tillåtna här."
-
-#~ msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-#~ msgstr ""
-#~ "Välj ett giltigt alternativ; '%(data)s' finns inte bland %(choices)s."
-
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr "Fyll i ett heltal mellan -32768 och 32767."
-
-#~ msgid "Enter a positive number."
-#~ msgstr "Fyll i ett positivt tal."
-
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "Fyll i ett heltal mellan 0 och 32767."
-
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "Ditt nya lösenord är: %(new_password)s"
-
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr ""
-#~ "Du är välkommen att ändra detta lösenord genom att gå till denna sida:"
-
-#~ msgid "Ordering"
-#~ msgstr "Sortering"
-
-#~ msgid "Added %s."
-#~ msgstr "Lade till %s."
-
-#~ msgid "Deleted %s."
-#~ msgstr "Tog bort %s."
-
-#~ msgid "The two 'new password' fields didn't match."
-#~ msgstr "De två 'nytt lösenord'-fälten stämde inte överens."
-
-#~ msgid "Year must be 1900 or later."
-#~ msgstr "Årtal måste vara 1900 eller senare."
-
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "Separera flera ID-nummer med kommatecken."
-
-#~ msgid "Brazilian"
-#~ msgstr "Brasilianska"
-
-#~ msgid "Gaeilge"
-#~ msgstr "Gaeliska"
diff --git a/parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index de03981..0000000
--- a/parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 90c1bb1..0000000
--- a/parts/django/django/conf/locale/sv/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,121 +0,0 @@
-# Swedish translation of Django
-# Copyright (C) 2005
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-01 18:23+0200\n"
-"PO-Revision-Date: 2008-02-01 15:32+0100\n"
-"Last-Translator: Ludvig Ericson <ludvig.ericson@gmail.com>\n"
-"Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-Language: Swedish\n"
-"X-Poedit-Country: SWEDEN\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "Tillgängliga %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "Markera alla"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "Lägg till"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "Ta bort"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Valda %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "Gör dina val och klicka på "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "Ta bort alla"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januari Februari Mars April Maj Juni Juli Augusti September Oktober November "
-"December"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "S M T O T F L"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Söndag Måndag Tisdag Onsdag Torsdag Fredag Lördag"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Visa"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Göm"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "Nu"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "Klocka"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "Välj en tidpunkt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "Midnatt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "06:00"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "Middag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "I dag"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "Kalender"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "I går"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "I morgon"
diff --git a/parts/django/django/conf/locale/sv/__init__.py b/parts/django/django/conf/locale/sv/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/sv/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/sv/formats.py b/parts/django/django/conf/locale/sv/formats.py
deleted file mode 100644
index db3b2ff..0000000
--- a/parts/django/django/conf/locale/sv/formats.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'Y-m-d'
-SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
-FIRST_DAY_OF_WEEK = 1
-DATE_INPUT_FORMATS = (
- '%Y-%m-%d', # '2006-10-25'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y', # '10/25/06'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
- '%m/%d/%Y %H:%M', # '10/25/2006 14:30'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
-)
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ' '
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/ta/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/ta/LC_MESSAGES/django.mo
deleted file mode 100644
index ea0fab5..0000000
--- a/parts/django/django/conf/locale/ta/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ta/LC_MESSAGES/django.po b/parts/django/django/conf/locale/ta/LC_MESSAGES/django.po
deleted file mode 100644
index 6833255..0000000
--- a/parts/django/django/conf/locale/ta/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,2136 +0,0 @@
-# translation of django-new.po to tamil
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# PONNUSAMY.A <ponnusamy.simpleman@gmail.com>, 2007.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-09-25 15:43+0200\n"
-"PO-Revision-Date: 2007-03-15 16:48+0530\n"
-"Last-Translator: PONNUSAMY <ponnusamy.simpleman@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language-Team: tamil <tamilinix@yahoogroups.com>\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=n>1;"
-
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
-msgid "object ID"
-msgstr "அடையாளம்"
-
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "தலையங்கம்"
-
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "குறிப்பு"
-
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "#1 தரவரிசை"
-
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "#2 தரவரிசை"
-
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "#3 தரவரிசை"
-
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "#4 தரவரிசை"
-
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "#5 தரவரிசை"
-
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "#6 தரவரிசை"
-
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "#7 தரவரிசை"
-
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "#8 தரவரிசை"
-
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "அங்கீகரிக்கப்பட்ட தரவரிசை"
-
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "தேதி/நேரம் சமர்ப்பிக்கப்பட்டுள்ளது"
-
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
-msgid "is public"
-msgstr "பொதுவானது"
-
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
-msgid "IP address"
-msgstr "IP விலாசம்"
-
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "நீக்கபட்டது"
-
-#: contrib/comments/models.py:86
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr "குறிப்பு சரியாக இல்லையென்றால் இந்த பெட்டியில் குறியிடவும். இதற்கு பதிலாக \"இந்த குறிப்பு நீக்கபட்டது\" காண்பிக்கபடும்."
-
-#: contrib/comments/models.py:91
-msgid "comments"
-msgstr "குறிப்பு"
-
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
-msgid "Content object"
-msgstr "பொருள் அடக்க object"
-
-#: contrib/comments/models.py:159
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(user)s ஆல் %(date)s இல் அளிக்கப்பட்டது \n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "நபரின் பெயர்"
-
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "ip விலாசம்"
-
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr "பணியாளர்களால் அனுமதிக்கப்பட்டது"
-
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "சுதந்தரமான குறிப்பு"
-
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "சுதந்தரமான குறிப்புகள்"
-
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "மதிப்பீடு "
-
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "மதிப்பீட்டு தேதி"
-
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "கர்மா மதிப்பீடு"
-
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "கர்மா மதிப்பீடு"
-
-#: contrib/comments/models.py:242
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(user)s ஈட்டய %(score)d "
-
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"இந்த குறிப்பு %(user)s ஆல் குறிக்கபட்டது:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "குறியின் தேதி"
-
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "பயனாளர் குறி"
-
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "பயனாளர் குறிகள்"
-
-#: contrib/comments/models.py:273
-#, python-format
-msgid "Flag by %r"
-msgstr "%r ஆல் குறிக்கப்பட்டது"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "நீக்கப்பட்ட தேதி"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "மட்டொறுத்தால் நீக்கப்பட்டது"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "மட்டொறுத்தர்களால் நீக்கப்பட்டது"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "மட்டொறுத்தால் நீக்கப்பட்டது %r"
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "அடையாளம் இல்லாத பயனாளறால் வாக்களிக்க முடியாது"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "செல்லாத குறிப்பு ID"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "உங்களை நீங்களே தேர்வு செய்து கொள்ள முடியாது"
-
-#: contrib/comments/views/comments.py:27
-msgid "This rating is required because you've entered at least one other rating."
-msgstr "இந்த தரவரிசை தேவைப்படுகிறது ஏனெனில் மற்றொரு தரவரிசை அளிக்கப்பட்டு விட்டதால்"
-
-#: contrib/comments/views/comments.py:111
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comment:\n"
-"\n"
-"%(text)s"
-msgid_plural ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comments:\n"
-"\n"
-"%(text)s"
-msgstr[0] ""
-"இந்த குறிப்பானது குறைவாக அளித்த பயனாளரால் %(count)s "
-"அளிக்கப்பட்டது:\n"
-"\n"
-"%(text)s"
-msgstr[1] ""
-"இந்த குறிப்பானது குறைவாக அளித்த பயனாளர்களால் %(count)s"
-" அளிக்கப்பட்டது:\n"
-"\n"
-"%(text)s"
-
-
-#: contrib/comments/views/comments.py:116
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"முழுமையான விவரங்களை அளிக்காத பயனாளரால் கொடுக்கப்பட்டது:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:188
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "POSTகளுக்கு மட்டும் அனுமதி உண்டு"
-
-#: contrib/comments/views/comments.py:192
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr "ஒன்று அல்லது ஒன்றிற்கு மேற்ப்பட்ட புலங்கள் சமற்பிக்கப்படவில்லை"
-
-#: contrib/comments/views/comments.py:196
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "எவறோ குறிப்புறையைச் சேதப்படுத்திவிட்டர்கள் (பாதுகாப்பு மீறல்)"
-
-#: contrib/comments/views/comments.py:206
-#: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr "குறிப்புறை படிவத்தில் முறையான இலக்கு அளவுருக்கவில்லை -- object ID முறையானதாக இல்லை"
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "குறிப்பு படிவம் முன்னோட்டம் அல்லது பிற்பட்டதை வழங்குவது இல்லை"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "பயனர் பெயர்:"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Log out"
-msgstr "வெளியேறு"
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "கடவுச்சொல்:"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "கடவுச்சொல்லை மறந்துவிட்டீரா?"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "விகிதம்"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "தேவைப்படுகிறது"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "விருப்பத்தேர்வு"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "புகைப்படத்தை அனுப்பு"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "விவரம்:"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
-msgstr "குறிப்பை முன்னேற்றமிடு"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "உங்கள் பெயர்:"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3> %s ஆல்:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
-msgid "All"
-msgstr "அனைத்தும்"
-
-#: contrib/admin/filterspecs.py:109
-msgid "Any date"
-msgstr "எந்த தேதியும்"
-
-#: contrib/admin/filterspecs.py:110
-msgid "Today"
-msgstr "இன்று"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Past 7 days"
-msgstr "கடந்த 7 நாட்களில்"
-
-#: contrib/admin/filterspecs.py:115
-msgid "This month"
-msgstr "இந்த மாதம்"
-
-#: contrib/admin/filterspecs.py:117
-msgid "This year"
-msgstr "இந்த வருடம்"
-
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "ஆம்"
-
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "இல்லை"
-
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr "தெரியாத"
-
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "செயல் நேரம்"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "பொருள் அடையாளம்"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "பொருள் உருவகித்தம்"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "செயர்குறி"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr "செய்தியை மாற்று"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "புகுபதிவு உள்ளீடு"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "புகுபதிவு உள்ளீடுகள்"
-
-#: contrib/admin/templatetags/admin_list.py:230
-msgid "All dates"
-msgstr "அனைத்து தேதியும்"
-
-#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "தயவுசெய்து சரியான பயனர்ப்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும். இரண்டும் எழுத்துவகையைச் சார்ந்தது."
-
-#: contrib/admin/views/decorators.py:24
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-msgstr "உள்ளே போ"
-
-#: contrib/admin/views/decorators.py:62
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr "தயவுசெய்து மறுபடியும் புகுபதிவு செய்க. ஏனென்றால் காலம் முடிவடைந்தது. கவலை படவேண்டாம்: உங்களுடைய அனுப்புதல் சேமிக்கப்பட்டுள்ளது."
-
-#: contrib/admin/views/decorators.py:69
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr "உங்களுடைய உலாவி தற்கால நிரல்களை அமதிக்காதவாறு உள்ளமைக்கப் பட்டவாறு தெரிகிறது. தயவுசெய்து தற்காலிக நிரலை செயல்பட செய்து, பக்கத்தை மறுபடி உள் வாங்கவும். "
-
-#: contrib/admin/views/decorators.py:83
-msgid "Usernames cannot contain the '@' character."
-msgstr "பயனர் பெயர் '@' குறியீட்டை கொண்டிருக்க முடியாது."
-
-#: contrib/admin/views/decorators.py:85
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "உங்கள் மின் அஞ்சல் முகவரி உங்கள் பயனர் பெயராக இல்லை. '%s'யை முயற்சி செய்யவும்."
-
-#: contrib/admin/views/main.py:223
-msgid "Site administration"
-msgstr "இணைய மேலான்மை"
-
-#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாகச் சேர்க்கப்பட்டது."
-
-#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
-#: contrib/admin/views/auth.py:22
-msgid "You may edit it again below."
-msgstr "நீங்கள் மறுபடியும் தொகுக்க முடியும். "
-
-#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
-#, python-format
-msgid "You may add another %s below."
-msgstr "நீங்கள் மற்ற %s யை கீழே சேர்க்க முடியும்."
-
-#: contrib/admin/views/main.py:289
-#, python-format
-msgid "Add %s"
-msgstr "%s யை சேர்க்க"
-
-#: contrib/admin/views/main.py:335
-#, python-format
-msgid "Added %s."
-msgstr "%s சேர்க்கப்பட்டுள்ளது."
-
-#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339
-msgid "and"
-msgstr "மற்றும்"
-
-#: contrib/admin/views/main.py:337
-#, python-format
-msgid "Changed %s."
-msgstr "%s மாற்றபட்டுள்ளது."
-
-#: contrib/admin/views/main.py:339
-#, python-format
-msgid "Deleted %s."
-msgstr "%s அழிக்கப்பட்டது."
-
-#: contrib/admin/views/main.py:342
-msgid "No fields changed."
-msgstr "எந்த புலமும் மாறவில்லை."
-
-#: contrib/admin/views/main.py:345
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக மாற்றப்பட்டது."
-
-#: contrib/admin/views/main.py:353
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக சேர்க்கப்பட்டுள்ளது. நீங்கள் கீழே தொகுக்க முடியும்."
-
-#: contrib/admin/views/main.py:391
-#, python-format
-msgid "Change %s"
-msgstr "%s யை மாற்று"
-
-#: contrib/admin/views/main.py:473
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "%(name)s ல் உள்ள %(fieldname)s: %(obj)s"
-
-#: contrib/admin/views/main.py:478
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "%(name)s ல் உள்ள %(fieldname)s:"
-
-#: contrib/admin/views/main.py:511
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக அழிக்கப்பட்டுள்ளது."
-
-#: contrib/admin/views/main.py:514
-msgid "Are you sure?"
-msgstr "உறுதியாக சொல்கிறீர்களா?"
-
-#: contrib/admin/views/main.py:536
-#, python-format
-msgid "Change history: %s"
-msgstr "வரலாற்றை மாற்று: %s"
-
-#: contrib/admin/views/main.py:570
-#, python-format
-msgid "Select %s"
-msgstr "%s யை தேர்ந்தெடு"
-
-#: contrib/admin/views/main.py:570
-#, python-format
-msgid "Select %s to change"
-msgstr "%s யை மாற்ற தேர்ந்தெடு"
-
-#: contrib/admin/views/main.py:758
-msgid "Database error"
-msgstr "தகவல்சேமிப்பு பிழை"
-
-#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
-#: contrib/admin/views/doc.py:50
-msgid "tag:"
-msgstr "ஒட்டு:"
-
-#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
-#: contrib/admin/views/doc.py:81
-msgid "filter:"
-msgstr "வடிகட்டி:"
-
-#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
-#: contrib/admin/views/doc.py:139
-msgid "view:"
-msgstr "நோற்றமிடு:"
-
-#: contrib/admin/views/doc.py:164
-#, python-format
-msgid "App %r not found"
-msgstr "பக்கம் %r இல்லை"
-
-#: contrib/admin/views/doc.py:171
-#, python-format
-msgid "Model %r not found in app %r"
-msgstr "மாதரி %r பக்கம் %rல் இல்லை "
-
-#: contrib/admin/views/doc.py:183
-#, python-format
-msgid "the related `%s.%s` object"
-msgstr "சம்மந்தப்பட்ட '%s.%s' பொருள்"
-
-#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
-#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
-msgid "model:"
-msgstr "மாதிரி:"
-
-#: contrib/admin/views/doc.py:214
-#, python-format
-msgid "related `%s.%s` objects"
-msgstr "மாதரி %s பக்கம் %s ல் இல்லை"
-
-#: contrib/admin/views/doc.py:219
-#, python-format
-msgid "all %s"
-msgstr "அனைத்து %s "
-
-#: contrib/admin/views/doc.py:224
-#, python-format
-msgid "number of %s"
-msgstr "எண்ணிக்கை %s"
-
-#: contrib/admin/views/doc.py:229
-#, python-format
-msgid "Fields on %s objects"
-msgstr "புலத்தின் %s பொருள்"
-
-#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
-#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
-msgid "Integer"
-msgstr "முழு எண்"
-
-#: contrib/admin/views/doc.py:292
-msgid "Boolean (Either True or False)"
-msgstr "பூலியன் (சரி அல்லது தவறு)"
-
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "உரை (%(maxlength)s வரைக்கும்)"
-
-#: contrib/admin/views/doc.py:294
-msgid "Comma-separated integers"
-msgstr "கமாவாள் பிரிக்கப்பட்ட முழு எண்"
-
-#: contrib/admin/views/doc.py:295
-msgid "Date (without time)"
-msgstr "தேதி (நேரமில்லாமல்)"
-
-#: contrib/admin/views/doc.py:296
-msgid "Date (with time)"
-msgstr "தேதி (நேரமுடன்)"
-
-#: contrib/admin/views/doc.py:297
-msgid "E-mail address"
-msgstr "மின் அஞ்சல்"
-
-#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
-#: contrib/admin/views/doc.py:302
-msgid "File path"
-msgstr "கோப்புப் பாதை"
-
-#: contrib/admin/views/doc.py:300
-msgid "Decimal number"
-msgstr "தசம எண்கள்"
-
-#: contrib/admin/views/doc.py:306
-msgid "Boolean (Either True, False or None)"
-msgstr "இலக்கு முறை (சரி, தவறு அல்லது ஒன்றும் இல்லை)"
-
-#: contrib/admin/views/doc.py:307
-msgid "Relation to parent model"
-msgstr "ஆதி மாதிரிக்கு தொடர்புடையது"
-
-#: contrib/admin/views/doc.py:308
-msgid "Phone number"
-msgstr "தொலைபேசி எண்"
-
-#: contrib/admin/views/doc.py:313
-msgid "Text"
-msgstr "உரை"
-
-#: contrib/admin/views/doc.py:314
-msgid "Time"
-msgstr "நேரம்"
-
-#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:316
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S. மாநிலம் (இரண்டு மேல் எழுத்துவகை எழுத்து"
-
-#: contrib/admin/views/doc.py:317
-msgid "XML text"
-msgstr "XML உரை"
-
-#: contrib/admin/views/doc.py:343
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s -ல் urlpattern தோன்றுவதில்லை"
-
-#: contrib/admin/views/auth.py:28
-msgid "Add user"
-msgstr "புதிய பயனர்"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "ஆவனமாக்கம்"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Change password"
-msgstr "கடவுச்சொல்லை மாற்று"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "வீடு"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
-msgid "History"
-msgstr "வரலாறு"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "தேதி/நேரம் "
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "பயனர்"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "செயல்"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "தேதியும் முழு நேரமும்"
-
-#: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"இந்த பொருள் மாற்று வரலாற்றில் இல்லை"
-"ஒரு வேளை நிர்வாகத்தளத்தின் மூலம் சேர்க்கப்படாமலிருக்கலாம்"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "டிஜாங்ஙோ தள நிர்வாகி"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "டிஜாங்ஙோ நிர்வாகம் "
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "சேவகன் பிழை"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "சேவையகம் தவறு(500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "சேவையகம் பிழை<em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"தவறு ஏற்பட்டுள்ளது"
-"வலைத்தள நிர்வாகிக்கு மின்னஞ்சல் அனுப்பப்பட்டுள்ளது. விரைவில் சரி செய்யப்படும். உங்களது பொறுமைக்கு நன்றி"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "பக்கத்தைக் காணவில்லை"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "நீங்கள் விரும்பிய பக்கத்தை காண இயலவில்லை,அதற்காக நாங்கள் வருந்துகிறோம்."
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "செயலியில் கிடைக்கக் கூடிய %(name)s மாதிரிகள்"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/index.html:28
-#: contrib/admin/templates/admin/change_form.html:15
-msgid "Add"
-msgstr "சேர்க்க"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "மாற்றுக"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "உங்களுக்கு மாற்றுவதற்குரிய உரிமையில்லை"
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "தற்போதைய செயல்கள்"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "எனது செயல்கள்"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "எதுவும் கிடைக்கவில்லை"
-
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s சேர்க்க"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "நீங்கள் தங்களது கடவுச்சொல்லை <a href=\"/password_reset/\"> மறந்து விட்டீர்களா?"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "நல்வரவு,"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "நீக்குக"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr "நீக்கும் '%(escaped_object)s' ஆனது %(object_name)s தொடர்புடைய மற்றவற்றையும் நீக்கும். ஆனால் அதை நீக்குவதற்குரிய உரிமை உங்களுக்கு இல்லை"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"நீங்கள் இந்த \"%(escaped_object)s\" %(object_name)s நீக்குவதில் நிச்சயமா?"
-"தொடர்புடைய மற்றவையும் நீக்கப்படும். "
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "ஆம், எனக்கு உறுதி"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "%(filter_title)s ஆல்"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "செல்"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 விடை"
-msgstr[1] "%(counter)s விடைகள்"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s மொத்தம்"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "எல்லாவற்றையும் காட்டு"
-
-#: contrib/admin/templates/admin/filters.html:4
-msgid "Filter"
-msgstr "வடிகட்டி"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "தளத்தில் பார்"
-
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "கீழே உள்ள தவறுயைத் திருத்துக"
-msgstr[1] "கீழே உள்ள தவறுகளைத் திருத்துக"
-
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "வரிசைப்படுத்துதல்"
-
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "வரிசைப்படுத்து:"
-
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "புதியதாக சேமி"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "சேமித்து இன்னுமொன்றைச் சேர்"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "சேமித்து மாற்றத்தை தொடருக"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "சேமிக்க"
-
-#: contrib/admin/templates/admin/invalid_setup.html:8
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr "உங்களுடைய தகவல்சேமிப்பகத்தை நிறுவுவதில் சில தவறுகள் உள்ளது. அதற்கு இணையான தகவல்சேமிப்பு அட்டவணையை" "தயாரிக்கவும். மேலும் பயனர் படிக்கும் படியான தகவல்சேமிப்பகத்தை உருவாக்கவும்."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "முதலில்,பயனர்ப்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும்.அதன் பிறகு தான் நீங்கள் உங்கள் பெயரின் விவரங்களை திருத்த முடியும்"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:12
-msgid "Username"
-msgstr "பயனர்ப்பெயர்"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:18
-msgid "Password"
-msgstr "கடவுச்சொல்"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:23
-msgid "Password (again)"
-msgstr "கடவுச்சொல்(மறுபடியும்)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:24
-msgid "Enter the same password as above, for verification."
-msgstr "மேலே அதே கடவுச்சொல்லை உள்ளிடவும், சரிபார்ப்பதற்காக ."
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "கடவுச்சொல் மாற்று"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "வெற்றிகரமாக கடவுச்சொல் மாற்றபட்டது"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "உங்களுடைய கடவுச்சொல் மாற்றபட்டது"
-
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-#: contrib/admin/templates/registration/password_reset_done.html:4
-msgid "Password reset"
-msgstr "கடவுச்சொல்லை மாற்றியமை"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll reset "
-"your password and e-mail the new one to you."
-msgstr ""
-"கடவுச்சொல்லை மறந்துவிட்டீரா? உங்களது மின்னஞ்சல் முகவரியை உள்ளிடுக,அதன் பிறகு உங்கள் கடவுச்சொல்"
-" மாற்றியமைக்கப்பட்டு உங்களது மின்னஞ்சல் முகவரிக்கு அனுப்பப்படும்"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "மின்அஞ்சல் முகவரி:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "எனது கடவுச்சொல்லை மாற்றியமை"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "வலைத்தளத்தில் உங்களது பொன்னான நேரத்தை செலவழித்தமைக்கு மிகுந்த நன்றி"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "மீண்டும் உள்ளே பதிவு செய்யவும்"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "கடவுச்சொல் மாற்றியமைத்தல் வெற்றி"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed a new password to the e-mail address you submitted. You "
-"should be receiving it shortly."
-msgstr ""
-"கடவுச்சொல்லை மறந்து விட்டால் உங்களது மின்னஞ்சல் முகவரியை உள்ளிடுக புதிய கடவுச்சொல் "
-"உங்களது மின்னஞ்சல் முகவரிக்கு அனுப்பப்பட்டுள்ளது. விரைவில் அது உங்களுக்கு கிடைக்கும்"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr "பாதுகாப்பு காரணங்களுக்காக , முதலில் உங்களது பழைய கடவுச்சொல்லை உள்ளிடுக. அதன் பிறகு புதிய கடவுச்சொல்லை இரு முறை உள்ளிடுக. இது உங்களது உள்ளிடுதலை சரிபார்க்க உதவும். "
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "பழைய கடவுச்சொல் :"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "புதிய கடவுச்சொல்:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "கடவுச்சொலின் மாற்றத்தை உறுதிப்படுத்து:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "கடவுச் சொல்லை மாற்றவும்"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "கடவுச்சொல்லை மாற்றியமைக்க நீங்கள் கேட்டதனால் உங்களுக்கு இந்த மின்னஞ்சல் அனுப்பப்பட்டுள்ளது"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "%(site_name)s -இல் உள்ள உங்களது பயனாளர் கணக்கு"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "உங்களது புதிய கடவுச்சொல் : %(new_password)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "கடவுச்சொல்லை மாற்றியமைக்க நீங்கள் இந்த பக்கத்திற்கு தாராளமாக போகலாம்."
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "உங்களது பயனாளர் பெயர், நீங்கள் மறந்திருந்தால்:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "எங்களது வலைத்தளத்தை பயன் படுத்தியதற்கு மிகுந்த நன்றி"
-
-#: contrib/admin/templates/registration/password_reset_email.html:15
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "இந்த %(site_name)s -இன் குழு"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "புத்தகக்குறிகள்"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "ஆவணமாக்கக் குறியீடுகள்"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\"> புத்தக குறியீடுகளை நிறுவ இந்த இணைப்பினை புத்தகக்குறியீட்டுப் \n"
-"பட்டைக்கு இழுக்கவும். அல்லது வலது கிளிக் செய்து புத்தகக்குறியீடுகளில் சேர்க்கவும். \n"
-" இனி தளத்தில் எந்தப் பக்கத்தில் இருந்தும் புத்தகக்குறியீட்டினை தேர்வுசெய்ய முடியும். \n"
-" நீங்கள் இந்த தளத்தை \"internal\" என குறிக்கப்பட்ட கணிணியில் இருந்து மட்டுமே \n"
-" ஒருசில புத்தகக்குறிகளை செயல்படுத்தமுடியும்\n "
-" உங்களுக்கு, கணிணி \"internal\" என உறுதி செய்ய கணிணிமேளாலரை அணுகவும்.</p>\n"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "இந்த பக்கத்திற்கான ஆவணம்"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "எந்த ஒரு பக்கத்திலிருந்தும் ஆவணப்பக்கத்தை பார்வையிடுதல், அந்த பக்கத்தை உருவாக்குகிறது."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "object ID-ஐ காட்டு"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "ஒரே object-ஐ குறிக்கும் பக்கங்களின் பொருளடக்க வகை மற்றும் unique ID-ஐ காட்டுகிறது."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "இதை திருத்துக (தற்போதைய சாளரம்)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "ஒரே object-ஐ குறிக்கும் பக்கங்களைக் காண மேலாளர் பக்கத்திற்கு செல்க."
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "இதை திருத்துக. (புதிய சாளரம்)"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr "மேளாலர் பக்கத்தை முன்பு கண்டதுபோல், ஆனால் புதிய சாளரத்தில் திறக்கிறது."
-
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "தேதி:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "நேரம்:"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "தற்போது:"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "மாற்று:"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "லிருந்து திசைமாற்று"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"இது ஒரு முழுமையான பாதையாக இருக்கவேண்டும். "
-"இணையத்தளப்பெயராக இருக்கக்கூடாது. உதாரணம்:'/"
-"events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "திரும்ப அனுப்பு"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "இது முழுமையான பாதையாக (மேலே உள்ளது போல) அல்லது \"http\"//\" என தொடங்கும் வலை முகவரியாக இருக்கலாம்."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "திரும்ப அனுப்பு"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "திரும்ப அனுப்புகிறது. "
-
-#: contrib/flatpages/models.py:8
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "உதாரணம்: '/about/contact/'. முன்னும் பின்னும் '/' உள்ளதை உறுதி செய்க."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "தலைப்பு"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "பொருளடக்கம்"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "விமர்சனங்களை செயலாக்கு"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "வார்ப்புரு பெயர்"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr "உதாரணம் 'flatpages/contact_page'. இது இல்லையெனில் 'flatpages/default' என்பதே பயன்படுத்தப்படும்.ப்படும்."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "முன்பதிவு தேவை"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "இது தெரிவு செய்யப்பட்டிருந்தால், உள்நுழைந்த பயனர்கள் மட்டுமே இந்தப் பக்கத்தை பார்க்க முடியும்."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "எளிய பக்கம்"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "எளிய பக்கங்கள்"
-
-#: contrib/auth/views.py:39
-msgid "Logged out"
-msgstr "வெளியே வந்துவீட்டீர்"
-
-#: contrib/auth/models.py:38 contrib/auth/models.py:57
-msgid "name"
-msgstr "பெயர்"
-
-#: contrib/auth/models.py:40
-msgid "codename"
-msgstr "குறிமுறை பெயர்"
-
-#: contrib/auth/models.py:42
-msgid "permission"
-msgstr "அனுமதி"
-
-#: contrib/auth/models.py:43 contrib/auth/models.py:58
-msgid "permissions"
-msgstr "அனுமதிகள்"
-
-#: contrib/auth/models.py:60
-msgid "group"
-msgstr "குழு"
-
-#: contrib/auth/models.py:61 contrib/auth/models.py:100
-msgid "groups"
-msgstr "குழுக்கள்"
-
-#: contrib/auth/models.py:90
-msgid "username"
-msgstr "பயனர் பெயர்"
-
-#: contrib/auth/models.py:90
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr "தேவை. 30 எழுத்துகள் அல்லது கொஞ்சம். அகர வரிசை எழுத்துக்கள் மட்டுமே ( எழுத்துகள்,எண்கள்,அன்டர்ஸ்கோர்). "
-
-#: contrib/auth/models.py:91
-msgid "first name"
-msgstr "முதல் பெயர்"
-
-#: contrib/auth/models.py:92
-msgid "last name"
-msgstr "கடைசி பெயர்"
-
-#: contrib/auth/models.py:93
-msgid "e-mail address"
-msgstr "மின்னஞ்சல் முகவரி"
-
-#: contrib/auth/models.py:94
-msgid "password"
-msgstr "கடவுச்சொல்"
-
-#: contrib/auth/models.py:94
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "பயன்படுத்து '[algo]$[salt]$[hexdigest]'"
-
-#: contrib/auth/models.py:95
-msgid "staff status"
-msgstr "பணியாளர் நிலை"
-
-#: contrib/auth/models.py:95
-msgid "Designates whether the user can log into this admin site."
-msgstr "பயனர், 'மேலாளலர்' பக்கத்தில் நுழைவதை முடிவு செய்கிறது"
-
-#: contrib/auth/models.py:96
-msgid "active"
-msgstr "செயல்படும்"
-
-#: contrib/auth/models.py:96
-msgid ""
-"Designates whether this user can log into the Django admin. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"பயனர்,டிஜாங்ஙோ 'மேலாளலர்' பக்கத்தில் நுழைவதை முடிவு செய்கிறது . இதை தேர்வு செய்யப்படாத கணக்கு உடனடியாக"
-"அழிக்கப்படும்"
-
-#: contrib/auth/models.py:97
-msgid "superuser status"
-msgstr "மேலாளர் இருப்பு நிலை"
-
-#: contrib/auth/models.py:97
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "இந்த பயனருக்கு எல்லா அங்கீகாரங்களும் வழங்கப்படவில்லை."
-
-#: contrib/auth/models.py:98
-msgid "last login"
-msgstr "கடைசி உள்நுழைவு"
-
-#: contrib/auth/models.py:99
-msgid "date joined"
-msgstr "சேர்ந்த தேதி"
-
-#: contrib/auth/models.py:101
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "பயனர் தனது அனுமதிகளோடு ,தான் உள்ள குழுவினது அனுமதிகளையும் பெறுவார்."
-
-#: contrib/auth/models.py:102
-msgid "user permissions"
-msgstr "பயனர் அனுமதிகள்"
-
-#: contrib/auth/models.py:105
-msgid "user"
-msgstr "பயனர்"
-
-#: contrib/auth/models.py:106
-msgid "users"
-msgstr "பயனர்கள்"
-
-#: contrib/auth/models.py:111
-msgid "Personal info"
-msgstr "தனிப்பட்ட விவரம்"
-
-#: contrib/auth/models.py:112
-msgid "Permissions"
-msgstr "அனுமதிகள்"
-
-#: contrib/auth/models.py:113
-msgid "Important dates"
-msgstr "முக்கியமான தேதிகள்"
-
-#: contrib/auth/models.py:114
-msgid "Groups"
-msgstr "குழுக்கள்"
-
-#: contrib/auth/models.py:256
-msgid "message"
-msgstr "செய்தி"
-
-#: contrib/auth/forms.py:52
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr " உங்கள் இணைய உலாவியில் குக்கிகள் செயலாக்கம் பெறவில்லை. உள்நுழைவதற்கு குக்கிகள் அவசியம்."
-
-#: contrib/auth/forms.py:61
-msgid "This account is inactive."
-msgstr "இந்த கணக்கு செயல்பட துவங்கவில்லை"
-
-#: contrib/contenttypes/models.py:20
-msgid "python model class name"
-msgstr "python model class name"
-
-#: contrib/contenttypes/models.py:23
-msgid "content type"
-msgstr "பொருளடக்க வகை"
-
-#: contrib/contenttypes/models.py:24
-msgid "content types"
-msgstr "பொருளடக்க வகைகள்"
-
-#: contrib/sessions/models.py:51
-msgid "session key"
-msgstr "அமர்வு குறியீ"
-
-#: contrib/sessions/models.py:52
-msgid "session data"
-msgstr "அமர்வு தகவல்"
-
-#: contrib/sessions/models.py:53
-msgid "expire date"
-msgstr "காலாவதியாகும் தேதி"
-
-#: contrib/sessions/models.py:57
-msgid "session"
-msgstr "அமர்வு"
-
-#: contrib/sessions/models.py:58
-msgid "sessions"
-msgstr "அமர்வுகள்"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "களப் பெயர்"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "காட்டும் பெயர்"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "வலைத்தளம்"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "வலைத்தளங்கள்"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "திங்கள்"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "செவ்வாய்"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "புதன்"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "வியாழன்"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "வெள்ளி"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "சனி"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "ஞாயிறு"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "ஜனவரி"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "பிப்ரவரி"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
-msgstr "மார்ச்"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
-msgstr "ஏப்ரல்"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
-msgstr "மே"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
-msgstr "ஜூன்"
-
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
-msgstr "ஜூலை"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "ஆகஸ்டு"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "செப்டம்பர்"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "அக்டோபர்"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "நவம்பர்"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "டிசம்பர்"
-
-#: utils/dates.py:19
-msgid "jan"
-msgstr "ஜன"
-
-#: utils/dates.py:19
-msgid "feb"
-msgstr "பிப்"
-
-#: utils/dates.py:19
-msgid "mar"
-msgstr "மார்"
-
-#: utils/dates.py:19
-msgid "apr"
-msgstr "ஏப்"
-
-#: utils/dates.py:19
-msgid "may"
-msgstr "மே"
-
-#: utils/dates.py:19
-msgid "jun"
-msgstr "ஜூன்"
-
-#: utils/dates.py:20
-msgid "jul"
-msgstr "ஜூலை"
-
-#: utils/dates.py:20
-msgid "aug"
-msgstr "ஆக"
-
-#: utils/dates.py:20
-msgid "sep"
-msgstr "செப்"
-
-#: utils/dates.py:20
-msgid "oct"
-msgstr "அக்"
-
-#: utils/dates.py:20
-msgid "nov"
-msgstr "நவ"
-
-#: utils/dates.py:20
-msgid "dec"
-msgstr "டிச"
-
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "ஜன."
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "பிப்."
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "ஆக."
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "செப்."
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "அக்."
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "நவ."
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "டிச."
-
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "வருடம்"
-msgstr[1] "வருடங்கள்"
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "மாதம்"
-msgstr[1] "மாதங்கள்"
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "வாரம்"
-msgstr[1] "வாரங்கள்"
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "நாள்"
-msgstr[1] "நாட்கள்"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "மணி"
-msgstr[1] "மணி"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "நிமிடம்"
-msgstr[1] "நிமிடங்கள்"
-
-#: utils/translation/trans_real.py:362
-msgid "DATE_FORMAT"
-msgstr "தேதி_முறை"
-
-#: utils/translation/trans_real.py:363
-msgid "DATETIME_FORMAT"
-msgstr "தேதிநேரம்_முறை"
-
-#: utils/translation/trans_real.py:364
-msgid "TIME_FORMAT"
-msgstr "நேரம்_முறை"
-
-#: utils/translation/trans_real.py:380
-msgid "YEAR_MONTH_FORMAT"
-msgstr "வருடம்_மாதம்_முறை"
-
-#: utils/translation/trans_real.py:381
-msgid "MONTH_DAY_FORMAT"
-msgstr "மாதம்_நாள்_முறை"
-
-#: conf/global_settings.py:39
-msgid "Arabic"
-msgstr "அரபிக்"
-
-#: conf/global_settings.py:40
-msgid "Bengali"
-msgstr "பெங்காலி"
-
-#: conf/global_settings.py:41
-msgid "Czech"
-msgstr "செக்"
-
-#: conf/global_settings.py:42
-msgid "Welsh"
-msgstr "வெல்ஸ்"
-
-#: conf/global_settings.py:43
-msgid "Danish"
-msgstr "டேனிஷ்"
-
-#: conf/global_settings.py:44
-msgid "German"
-msgstr "ஜெர்மன்"
-
-#: conf/global_settings.py:45
-msgid "Greek"
-msgstr "கிரேக்கம்"
-
-#: conf/global_settings.py:46
-msgid "English"
-msgstr "ஆங்கிலம்"
-
-#: conf/global_settings.py:47
-msgid "Spanish"
-msgstr "ஸ்பானிஷ்"
-
-#: conf/global_settings.py:48
-msgid "Argentinean Spanish"
-msgstr "அர்ஜெண்டியன் ஸ்பானிஷ் "
-
-#: conf/global_settings.py:49
-msgid "Finnish"
-msgstr "பீனீஷ்"
-
-#: conf/global_settings.py:50
-msgid "French"
-msgstr "ப்ரென்சு"
-
-#: conf/global_settings.py:51
-msgid "Galician"
-msgstr "கலீஷீயன்"
-
-#: conf/global_settings.py:52
-msgid "Hungarian"
-msgstr "ஹங்கேரியன்"
-
-#: conf/global_settings.py:53
-msgid "Hebrew"
-msgstr "ஹீப்ரு"
-
-#: conf/global_settings.py:54
-msgid "Icelandic"
-msgstr "ஐஸ்லான்டிக்"
-
-#: conf/global_settings.py:55
-msgid "Italian"
-msgstr "இத்தாலியன்"
-
-#: conf/global_settings.py:56
-msgid "Japanese"
-msgstr "ஜப்பானிய"
-
-#: conf/global_settings.py:57
-msgid "Dutch"
-msgstr "டச்சு"
-
-#: conf/global_settings.py:58
-msgid "Norwegian"
-msgstr "நார்வீசியன்"
-
-#: conf/global_settings.py:59
-msgid "Brazilian"
-msgstr "பிரேசிலியன்"
-
-#: conf/global_settings.py:60
-msgid "Romanian"
-msgstr "ரோமானியன்"
-
-#: conf/global_settings.py:61
-msgid "Russian"
-msgstr "ரஷ்யன்"
-
-#: conf/global_settings.py:62
-msgid "Slovak"
-msgstr "சுலோவாக்"
-
-#: conf/global_settings.py:63
-msgid "Slovenian"
-msgstr "ஸ்லோவேனியன்"
-
-#: conf/global_settings.py:64
-msgid "Serbian"
-msgstr "செர்பியன்"
-
-#: conf/global_settings.py:65
-msgid "Swedish"
-msgstr "சுவிடிஷ்"
-
-#: conf/global_settings.py:66
-msgid "Tamil"
-msgstr "தமிழ்"
-
-#: conf/global_settings.py:67
-msgid "Turkish"
-msgstr "துருக்கிஷ்"
-
-#: conf/global_settings.py:68
-msgid "Ukrainian"
-msgstr "உக்ரேனியன்"
-
-#: conf/global_settings.py:69
-msgid "Simplified Chinese"
-msgstr "எளிய சீன மொழி"
-
-#: conf/global_settings.py:70
-msgid "Traditional Chinese"
-msgstr "மரபு சீன மொழி"
-
-#: core/validators.py:63
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "இந்த மதிப்பு எழுத்துகள், எண்கள் மேலும் அன்டர்ஸ்கோர் உள்ளடக்க வேண்டும். "
-
-#: core/validators.py:67
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "இந்த மதிப்பு எழுத்துகள், எண்கள், அன்டர்ஸ்கோர், டஷ் அல்லது சலஷ் மற்றும் உள்ளடக்க வேண்டும்"
-
-#: core/validators.py:71
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "இந்த மதிப்பு எழுத்துகள், எண்கள், அன்டர்ஸ்கோர் டஷ் அல்லது கைப்பன் மற்றும் உள்ளடக்க வேண்டும்"
-
-#: core/validators.py:75
-msgid "Uppercase letters are not allowed here."
-msgstr "பெரிய எழுத்துகளுக்கு இங்கு அனுமதி இல்லை"
-
-#: core/validators.py:79
-msgid "Lowercase letters are not allowed here."
-msgstr "சிறிய எழுத்துகளுக்கு இங்கு அனுமதி இல்லை"
-
-#: core/validators.py:86
-msgid "Enter only digits separated by commas."
-msgstr "இங்கு எண்களை மட்டுமே எழுதவும் காமவாள் தனிமைபடுத்தவும் "
-
-#: core/validators.py:98
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "காற்புள்ளிகளால் தனிமைப்படுத்திய முறையான e முகவரிகள் மட்டும் எழுதவும்"
-
-#: core/validators.py:102
-msgid "Please enter a valid IP address."
-msgstr "தயவு செய்து முறையான ஐ.பி முகவரி மட்டும் எழுதவும்"
-
-#: core/validators.py:106
-msgid "Empty values are not allowed here."
-msgstr "காலியான மதிப்புக்கள் அனுமதி இல்லை"
-
-#: core/validators.py:110
-msgid "Non-numeric characters aren't allowed here."
-msgstr "எண் வடிவமில்லாத எழுத்துக்கள் அனுமதி இல்லை"
-
-#: core/validators.py:114
-msgid "This value can't be comprised solely of digits."
-msgstr "இந்த மதிப்பு இலக்கங்கள் மட்டுமே கொண்டதாக இருக்க கூடாது"
-
-#: core/validators.py:119
-msgid "Enter a whole number."
-msgstr "முழு எண் மட்டுமே எழுதவும்"
-
-#: core/validators.py:123
-msgid "Only alphabetical characters are allowed here."
-msgstr "அகர வரிசை எழுத்துக்கள் மட்டுமே அனுமதி உன்டு"
-
-#: core/validators.py:138
-msgid "Year must be 1900 or later."
-msgstr "வருடம் கண்டிப்பாக 1900 அல்லது அதற்கு மேல்"
-
-#: core/validators.py:142
-#, python-format
-msgid "Invalid date: %s."
-msgstr "முறையல்லாத தேதி: %s"
-
-#: core/validators.py:146 db/models/fields/__init__.py:415
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "வவவவ-மாமா-நாநா என்ற அமைப்பில் உள்ள முறையான தேதி மட்டுமே எழுதவும்"
-
-#: core/validators.py:151
-msgid "Enter a valid time in HH:MM format."
-msgstr "மம-நிநி என்ற அமைப்பில் உள்ள முறையான நேரம் மட்டுமே எழுதவும்"
-
-#: core/validators.py:155 db/models/fields/__init__.py:477
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "வவவவ-மாமா-நாநா மம-நிநி என்ற அமைப்பில் உள்ள முறையான தேதி/நேரம் மட்டுமே எழுதவும்"
-
-#: core/validators.py:160
-msgid "Enter a valid e-mail address."
-msgstr "முறையான e முகவரிகள் மட்டும் எழுதவும்"
-
-#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "அந்த பக்கத்தின் encoding வகையைப் பரிசோதிக்க.கோப்பு சமர்பிக்கப் பட்டவில்லை "
-
-#: core/validators.py:176
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "முறையான படம் மட்டுமே பதிவேற்றம் செய்யவும். நீங்கள் பதிவேற்றம் செய்த கோப்பு படம் அள்ளாத அல்லது கெட்டுப்போன கோப்பாகும்"
-
-#: core/validators.py:183
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "%s என்ற இணையதள முகவரி சரியான படத்தைச் சுட்டவில்லை"
-
-#: core/validators.py:187
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "தொலைபேசி எண்கள் XXX-XXX-XXXX என்ற அமைப்பில் இருக்க வேண்டும். \"%s\" என்பது முறையள்ள"
-
-#: core/validators.py:195
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "%s என்ற இணையதள முகவரி முறையான குயிக் டைம் படக்காட்சியைச் சுட்டவில்லை"
-
-#: core/validators.py:199
-msgid "A valid URL is required."
-msgstr "முறையான இணையதள முகவரி தேவை"
-
-#: core/validators.py:213
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"முறையான இணையதள முகவரி தேவை. குறிப்பிடத்தக்கத் தவறுகளாவன:\n"
-"%s"
-
-#: core/validators.py:220
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "முறைப்படுத்தப்படாத XML: %s"
-
-#: core/validators.py:230
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "முறைப்படுத்தப்படாத இணையதள முகவறி: %s"
-
-#: core/validators.py:234 core/validators.py:236
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "%s என்ற இணையதள முகவரி உடைந்துள்ளது"
-
-#: core/validators.py:242
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "முறையான U.S மாநில பெயர் சுருக்கம் எழுதவும்"
-
-#: core/validators.py:256
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "வார்த்தைகளை அளன்து பேசுங்கள்! %s என்ற வார்த்தை இங்கு அனுமதி இல்லை"
-msgstr[1] "வார்த்தைகளை அளந்து பேசுங்கள்! %s என்ற வார்த்தைகள் இங்கு அனுமதி இல்லை"
-
-#: core/validators.py:263
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "இந்த புலம் %s என்ற புலத்துடன் ஒத்திறுக்க வேண்டும்"
-
-#: core/validators.py:282
-msgid "Please enter something for at least one field."
-msgstr "தயவு செய்து ஒரு புலத்திலாவது ஏதாவது எழுதவும்"
-
-#: core/validators.py:291 core/validators.py:302
-msgid "Please enter both fields or leave them both empty."
-msgstr "தயவு செய்து இரு புலங்கலையும் நிரப்பவும் அல்லது இரண்டையும் காலியாக விடவும்"
-
-#: core/validators.py:309
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "%(field)s, %(value)s ஆக இருந்தால் இந்த புலம் இருக்க வேண்டும்"
-
-#: core/validators.py:321
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "%(field)s, %(value)s ஆக இல்லை என்றால் இந்த புலம் இருக்க வேண்டும்"
-
-#: core/validators.py:340
-msgid "Duplicate values are not allowed."
-msgstr "போலியான மதிப்புகள் அனுமதி இல்லை"
-
-#: core/validators.py:363
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "இந்த மதிப்பு %s இன் அடுக்காக இருக்க வேன்டும்"
-
-#: core/validators.py:374
-msgid "Please enter a valid decimal number."
-msgstr "தயவுசெய்து முறையான பதின்ம எண்ணை நுழைக்கவும்"
-
-#: core/validators.py:378
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "தயவுசெய்து முறையான பதின்ம எண்களுடன் %s மொத்த இலக்கத்தை நுழைக்கவும்"
-msgstr[1] "தயவுசெய்து முறையான பதின்ம எண்களுடன் %s மொத்த இலக்கங்களையும் நுழைக்கவும்"
-
-#: core/validators.py:381
-#, python-format
-msgid "Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "அதிகபட்சம் %s எண்ணை உள்ள பதின்ம எண்ணை நுழை."
-msgstr[1] "அதிகபட்சம் %s எண்கள் உள்ள பதின்ம எண்ணை நுழை."
-
-#: core/validators.py:384
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural "Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "அதிகபட்சம் %s புள்ளி இடம் உள்ள பதின்ம எண்ணை நுழை"
-msgstr[1] "அதிகபட்சம் %s புள்ளி இடங்கள் உள்ள பதின்ம எண்ணை நுழை"
-
-#: core/validators.py:394
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "மேல்ஏற்று செய்யப்பட்ட கோப்பு குறைந்தபட்சம் %s பைட்டுகள் உள்ளனவா என சரி பார்க்கவும்"
-
-#: core/validators.py:395
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "மேல்ஏற்று செய்யப்பட்ட கோப்பு அதிகபட்சம் %s பைட்டுகள் உள்ளனவா என சரி பார்க்கவும்."
-
-#: core/validators.py:412
-msgid "The format for this field is wrong."
-msgstr "புலனுடைய அமைப்பு தவறு"
-
-#: core/validators.py:427
-msgid "This field is invalid."
-msgstr "இந்த புலம் செல்லாது.ள"
-
-#: core/validators.py:463
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "%s இருந்து எதுவும் எடுக்க முடியவில்லை"
-
-#: core/validators.py:466
-#, python-format
-msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "வலைமனை %(url)s என்பது செல்லாத உள்ளடக்க-வகை தலைப்பான '%(contenttype)s' ஐ திருப்பி தந்துள்ளது."
-
-#: core/validators.py:499
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr "%(line)s கோடு லிருந்து மூடாத %(tag)s டாகை மூடு. ( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
-
-#: core/validators.py:503
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr "வரி %(line)s இல் உள்ள சில உரைகள் இருப்பதற்கு அனுமதி இல்லை.( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
-
-#: core/validators.py:508
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr "வரி %(line)s இல் உள்ள \"%(attr)s\" என்பது தவறான பண்பாகும.( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
-
-#: core/validators.py:513
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr "வரி %(line)s இல் உள்ள \"<%(tag)s>\" என்பது தவறான ஒட்டாகும் .( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
-
-#: core/validators.py:517
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr "வரி %(line)s இல் உள்ள ஒட்டு இன பண்புகள் தேவைப்படுகின்றன.(வரி,\"%(start)s\" வுடன் துவங்குகின்றது)"
-
-#: core/validators.py:522
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr "வரி %(line)s இல் உள்ள \"%(attr)s\" பண்பின் மதிப்பு தவறானது.(வரி \"%(start)s\" இருந்து ஆரம்பம்)"
-
-#: views/generic/create_update.py:43
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s வெற்றிகரமாக சேர்க்கப்பட்டு விட்டது"
-
-#: views/generic/create_update.py:117
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s வெற்றிகரமாக மாற்றபட்டு விட்டது"
-
-#: views/generic/create_update.py:184
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s நீக்கப்பட்டுள்ளது"
-
-#: db/models/manipulators.py:302
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(type)s உடன் உள்ள %(object)s ஏற்கனவே %(field)s கொடுக்கப்பட்டு உள்ளது"
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(fieldname)s உடன் உள்ள %(optname)s ஏற்கனவே உள்ளது"
-
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "இந்த புலத்தில் மதிப்பு தேவை"
-
-#: db/models/fields/__init__.py:340
-msgid "This value must be an integer."
-msgstr "இந்த மதிப்பு முழுவெண்ணாக இருக்க வேண்டும"
-
-#: db/models/fields/__init__.py:372
-msgid "This value must be either True or False."
-msgstr "இந்த மதிப்பு சரி அல்லது தவறாக இருக்க வேண்டும்"
-
-#: db/models/fields/__init__.py:388
-msgid "This field cannot be null."
-msgstr "இந்த புலம் காலியாக இருக்கக் கூடாது"
-
-#: db/models/fields/__init__.py:571
-msgid "Enter a valid filename."
-msgstr "முறையான கோப்புப் பெயரை எழுதவும்"
-
-#: db/models/fields/related.py:51
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "தயவு செய்து முறையான %s எழுதவும்"
-
-#: db/models/fields/related.py:618
-msgid "Separate multiple IDs with commas."
-msgstr "பன்மையிலுள்ள அடையாளங்களை காற்புள்ளிகளால் பிரிக்கவும்"
-
-#: db/models/fields/related.py:620
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Mac இல், ஒன்றுக்கு மேற்பட்டவற்றை தேர்வு செய்ய \"Control\" அல்லது \"Command\" ஐ அழுத்தவும்"
-
-#: db/models/fields/related.py:664
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "தயவு செய்து முறையான %(self)s அடையாளங்களை எழுதவும். %(value)r என்ற மதிப்பு முறையானதல்ல."
-msgstr[1] "தயவு செய்து முறையான %(self)s அடையாளங்களை எழுதவும். %(value)r என்ற மதிப்புகள் முறையானதல்ல."
-
-#: forms/__init__.py:381
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "உங்கள் உரை %s ஐ விட குறைவான எழுத்து உடையது என்று உறுதி செய்து கொள்ளுங்கள்"
-msgstr[1] "உங்கள் உரை %s ஐ விட குறைவான எழுத்துகள் உடையது என்று உறுதி செய்து கொள்ளுங்கள்"
-
-#: forms/__init__.py:386
-msgid "Line breaks are not allowed here."
-msgstr "வரி உடைவுகள் அனுமதி இல்லை"
-
-#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "முறையான விருப்பத்தைத் தேர்வு செய்யவும்; '%(data)s என்பது %(choices)s இல் இல்லை"
-
-#: forms/__init__.py:663
-msgid "The submitted file is empty."
-msgstr "சமர்பிக்கப் பட்ட கோப்புக் காலியாக உள்ளது"
-
-#: forms/__init__.py:719
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "-32,768 மற்றும் 32,767 க்கு நடுவில் ஒரு முழு எண்ணை எழுதவும்"
-
-#: forms/__init__.py:729
-msgid "Enter a positive number."
-msgstr "ஒரு நேர்க்குறி எண்ணை எழுதவும்"
-
-#: forms/__init__.py:739
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "0 மற்றும் 32,767 க்கு நடுவில் ஒரு முழு எண்ணை எழுதவும்"
-
-#: template/defaultfilters.py:401
-msgid "yes,no,maybe"
-msgstr "ஆம், இல்லை, இருக்கலாம்"
-
diff --git a/parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index b78b610..0000000
--- a/parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.po
deleted file mode 100644
index f60e945..0000000
--- a/parts/django/django/conf/locale/ta/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,112 +0,0 @@
-# translation of djangojs.po to tamil
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# PONNUSAMY.A <ponnusamy.simpleman@gmail.com>, 2007.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-12-09 11:51+0100\n"
-"PO-Revision-Date: 2007-03-14 16:40+0530\n"
-"Last-Translator: PONNUSAMY <ponnusamy.simpleman@gmail.com>\n"
-"Language-Team: tamil <tamilinix@yahoogroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%s இருக்கிறதா "
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "எல்லாவற்றையும் தேர்ந்த்தெடுக்க"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "சேர்க்க"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "அழிக்க"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s தேர்ந்த்தெடுக்கப்பட்ட"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "தேவையானவற்றை தேர்ந்த்தெடுத்து கிளிக் செய்க"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "எல்லாவற்றையும் அழிக்க "
-
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"ஜனவரி பிப்ரவரி மார்ச் ஏப்ரல் மே ஜூன் ஜூலை ஆகஸ்டு செப்டம்பர் அக்டோபர் நவம்பர் "
-"டிசம்பர்"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "ஞாயிறு திங்கள் செவ்வாய் புதன் வியாழன் வெள்ளி சனி "
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "ஞா தி செ பு வி வெ ச"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "இப்பொழுது "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "கடிகாரம் "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "ஒரு நேரத்தை தேர்ந்த்தெடுக்க "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "நடு இரவு "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "காலை 6 மணி "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "மதியம் "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "வேண்டாம் "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "இன்று "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "நாள்காட்டி "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "நேற்று "
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "நாளை"
-
diff --git a/parts/django/django/conf/locale/ta/__init__.py b/parts/django/django/conf/locale/ta/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/ta/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/ta/formats.py b/parts/django/django/conf/locale/ta/formats.py
deleted file mode 100644
index 69fa17d..0000000
--- a/parts/django/django/conf/locale/ta/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F, Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M, Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/te/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/te/LC_MESSAGES/django.mo
deleted file mode 100644
index 4c481de..0000000
--- a/parts/django/django/conf/locale/te/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/te/LC_MESSAGES/django.po b/parts/django/django/conf/locale/te/LC_MESSAGES/django.po
deleted file mode 100644
index 1f5abe1..0000000
--- a/parts/django/django/conf/locale/te/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4112 +0,0 @@
-# translation of django.po to Telugu
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-03 07:54+0530\n"
-"PO-Revision-Date: 2008-09-09 21:24+0530\n"
-"Last-Translator: Thejaswi Puthraya <thejaswi.puthraya@gmail.com>\n"
-"Language-Team: Telugu <indlinux-telugu@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=n>1;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "ఆరబిక్"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "బెంగాలి"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "బల్గెరియన్"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "కటలాన్"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "క్జెఖ్"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "వెల్ష్"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "డానిశ్"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "జెర్మన్"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "గ్రీక్"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "ఆంగ్లము"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "స్పానిష్"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "ఎస్టొనియన్"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "అర్జంటీనా స్పానిష్"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "బాస్క"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "పారసీ"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "ఫీన్నిష్"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "ఫ్రెంచ్"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "ఐరిష్"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "గలిసియన్"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "హంగారియన్"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "హెబ్రివ్"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr "క్రొయెటియన్"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "ఐస్ లాండిక్"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "ఇటాలియవ్"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "జపనీస్"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "జ్యొర్జీన్"
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "కొరియన్"
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "ఖ్మెర్"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "కన్నడ"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "లాట్వీను"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "లిత్ఠువెనీను"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "మెసిడొనియన్"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "డచ్చ"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "నార్వీజియన్"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "పొలిష్"
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "పుర్తగాలి"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "బ్రజీలియన్ పుర్తగాలి"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "రొమానియన్"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "రషియన్"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "స్లొవాక్"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "స్లొవానియన్"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "సర్బియన్"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "స్వీడిష్"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "తమిళ్"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "తెలుగు"
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "టర్కిశ్"
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "యుక్రానియన్"
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "వాడుక చైనీస్"
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "గ్రాంధిక చైనీస్"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3> %s తో:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "అన్నీ"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "ఏ రోజైన"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "ఈ రోజు"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "గత 7 రోజుల గా"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "ఈ నెల"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "ఈ సంవత్సరము"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "Yes"
-msgstr "అవును"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "No"
-msgstr "కాదు"
-
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:391
-msgid "Unknown"
-msgstr "తెలియనది"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "పని సమయము "
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "వస్తువు"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "వస్తువు"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "పని ఫ్లాగ్"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "సందేశము ని మార్చంది"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "లాగ్ ఎంట్రీ"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "లాగ్ ఎంట్రీలు"
-
-#: contrib/admin/options.py:60
-#: contrib/admin/options.py:121
-msgid "None"
-msgstr "వొకటీ లేదు"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr " %s మార్చబడిండి"
-
-#: contrib/admin/options.py:338
-#: contrib/admin/options.py:348
-#: forms/models.py:275
-msgid "and"
-msgstr "మరియు"
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" జతచేయబడినధి"
-
-#: contrib/admin/options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr ""
-
-#: contrib/admin/options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" తొలగిబడినది"
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "క్షేత్రములు ఏమి మార్చబడలేదు"
-
-#: contrib/admin/options.py:417
-#: contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\"జయప్రదంగా కలపబడ్డడి"
-
-#: contrib/admin/options.py:421
-#: contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "మీరు మళ్ళీ దీనినీ క్రింద మార్చవచ్చు"
-
-#: contrib/admin/options.py:431
-#: contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "మీరు ఇంకొక %s ని క్రింద జత చేయొచ్చు"
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" జయప్రదంగా మార్చబడిండి"
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" జయప్రదంగా కలపబడ్డడి .మీరు మళ్ళీ దీనినీ క్రింద మార్చవచ్చు"
-
-#: contrib/admin/options.py:536
-#, python-format
-msgid "Add %s"
-msgstr "%sని జత చేయండి "
-
-#: contrib/admin/options.py:614
-#, python-format
-msgid "Change %s"
-msgstr "%sని మార్చంది"
-
-#: contrib/admin/options.py:646
-msgid "Database error"
-msgstr "దత్తాంశస్థానము పొరబాటు "
-
-#: contrib/admin/options.py:696
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\"జయప్రదంగా తీసివేయబడ్డడి"
-
-#: contrib/admin/options.py:703
-msgid "Are you sure?"
-msgstr "మీరు కచ్చితంగా ఉన్నారా?"
-
-#: contrib/admin/options.py:732
-#, python-format
-msgid "Change history: %s"
-msgstr "చరిత్రం మార్చు: %s"
-
-#: contrib/admin/sites.py:16
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "దయచేసి సరైన వినియొగదారి నామము అనుమతి పదం ఇవ్వండి"
-
-#: contrib/admin/sites.py:227
-#: contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "దయచేసి మళ్ళీ లాగ్ ఇన్ అవ్వండి ఎందుకంటే మీ భాగము ముగిసింది ."
-
-#: contrib/admin/sites.py:234
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "మీ అన్వేషి పై కుకీస్ అంగీకరించేటట్లు చేయలేదు . దయ చేసి కుకీస్ చెతనపరిచి ,మళ్ళీ ప్రయత్నించండి"
-
-#: contrib/admin/sites.py:250
-#: contrib/admin/sites.py:256
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "వినియొగదారి నామములొ '@' అక్షరము ఉందకూడడు"
-
-#: contrib/admin/sites.py:253
-#: contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "మీ ఇటపా మీ వినియొగదారి నామము కాదు . '%s' ఇచ్చి చూడండి "
-
-#: contrib/admin/sites.py:313
-msgid "Site administration"
-msgstr "సైట్ నిర్వాహన"
-
-#: contrib/admin/sites.py:326
-#: contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "లాగ్ ఇన్"
-
-#: contrib/admin/sites.py:373
-#, python-format
-msgid "%s administration"
-msgstr "%s నిర్వాహన"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ %(name)s లో %(fieldname)s : %(obj)s "
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ %(name)s లో %(fieldname)s"
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "తారీఖు:"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "సమయం:"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "ప్రస్తుతం:"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "మార్చు:"
-
-#: contrib/admin/widgets.py:121
-msgid "Lookup"
-msgstr ""
-
-#: contrib/admin/widgets.py:228
-msgid "Add Another"
-msgstr "మరివొక కలుపు"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "పుట దొరకలేదు"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "క్షమించండి మీరు కోరిన పుట దొరకలేడు"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "నివాసము"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "సర్వర్ పొరబాటు"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "సర్వర్ పొరబాటు (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "సర్వర్ పొరబాటు <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "పొరబాటు జరిగింది . దానిని నిర్వాహనాధికారులు కి ఈ మెయిల్ చేయబడ్డడి,మీ ఓపిక కి ధన్యవాదములు"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "సుస్వాగతం"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "పత్రికీకరణ"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "పాస్ వర్డ్ మార్చుకోండి"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "లాగ్ ఔట్"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "డ్జాంగొ యొక్క నిర్వాహనదారులు"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "డ్జాంగొ నిర్వాహన"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "జత చేయి"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "చరిత్ర"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "సైట్ లో చూడండి"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "క్రింద ఉన్న తప్పు సరిదిద్దుకోండి"
-msgstr[1] "క్రింద ఉన్న తప్పులు సరిదిద్దుకోండి"
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s జత చేయు"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "వడపోత"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:246
-msgid "Delete"
-msgstr "తొలగించు"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "అవును "
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "మొడల్ లు %(name)s లో దొరికే అప్ప్లికేషన్"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "మార్చు"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "మీకు ఏది మార్చటానికి అధికారము లేదు"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "ఈ మధ్య చేసిన పనులు"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "నా పనులు"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "ఏమి దొరకలేదు"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "వినియొగదారి నామము:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "అనుమతి పదం:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "తేది/సమయం"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "వినియొగదారి"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "క్రియ"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "తెదిసమయం_రూపలావన్యం"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "అన్నీ చూపి"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "వెళ్లు"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 ఫలమొ"
-msgstr[1] "%(counter)s ఫలితాలు"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s మొత్తము"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "దాచు"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "కొత్త దాని లా దాచు"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "దాచి కొత్త దానిని కలపండి"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "దాచి మార్చుటా ఉందండి"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr ""
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:47
-#: contrib/auth/forms.py:59
-msgid "Username"
-msgstr "వినియొగదారి నామము"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:60
-#: contrib/auth/forms.py:184
-msgid "Password"
-msgstr "అనుమతిపదం"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "అనుమతిపదం(మళ్ళీ)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "ఇందాక ఇచ్చిన అనుమతిపదం మళ్ళీ ఇవ్వండి పరిశీలన కోసము"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "తొలగించు?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "మళ్ళీ లాగ్ ఇన్ అవ్వండి"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "అనుమతి పదం మార్పు"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "అనుమతి పదం మార్పు జయప్రదమైండి "
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "మీ అనుమతి పదం మార్చబడిండి"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "దయచేసి రక్షన కోసము, మీ పాత అనుమతి పదం ఇవ్వండి , కొత్త అనుమతి పదం రెండు సార్లు ఇవ్వండి , ఎం దుకంటే మీరు తప్పు ఇస్తే సరిచేయటానికి "
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "పాత అనుమతి పదం"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "కొత్త అనుమతి పదం"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "అనుమతి పదం పక్కా చేయండి"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "నా అనుమతి పదం మర్చు"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "అనుమతి పదం తిరిగి అమర్చు"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "అనుమతి పదం తిరిగి మార్చు సంపూర్ణమైనది"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "మీ అనుమతి పదం మర్చుబడినది. మీరు ఇప్పుదు లాగ్ ఇన్ అవ్వచ్చు."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "అనుమతి పదం తిరిగి మార్చు ఖాయం చెయండి"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "కొత్త అనుమతి పదం ప్రవేశపెటండి"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "దయచేసి రక్షన కోసము, మీ పాత అనుమతి పదం ఇవ్వండి , కొత్త అనుమతి పదం రెండు సార్లు ఇవ్వండి , ఎం దుకంటే మీరు తప్పు ఇస్తే సరిచేయటానికి "
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "అనుమతి పదం పునఃఅమర్పు అజయప్రదమైనది"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "అనుమతి పదం తిరిగి అమర్చు జయప్రదమైండి"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "మీరు ఈ ఇటపా అందుకుంటునారు, ఎందుకంటే మీరు అనుమతి పదం తిరిగి అమర్చుకి మనవి చెసారు "
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "మీ వినియొగదారి నామము ఒక వేల మర్చిపొయుంటే"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "మా సైట్ వాడినందుకు ధన్యవాదములు!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s జట్టు"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "ఇటపా:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "అనుమతిపదం తిరిగి అమర్చు"
-
-#: contrib/admin/templatetags/admin_list.py:288
-msgid "All dates"
-msgstr "అన్నీ తరీఖులు"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "%s ని ఎన్నుకోండి"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "%s ని మార్చటానికి ఎన్నుకోండి"
-
-#: contrib/admin/views/template.py:36
-#: contrib/sites/models.py:38
-msgid "site"
-msgstr "సైట్"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr ""
-
-#: contrib/admindocs/views.py:57
-#: contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "టాగ్:"
-
-#: contrib/admindocs/views.py:90
-#: contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "వడపోత:"
-
-#: contrib/admindocs/views.py:154
-#: contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "దర్శనం:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "%rఎప్ప్ దొరకలేడు"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr ""
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr ""
-
-#: contrib/admindocs/views.py:205
-#: contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241
-#: contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "మొడల్:"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "సంబంధించిన `%(app_label)s.%(object_name)s` వస్తువులు"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "ఆన్నీ %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "%s సంఖ్య"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s వస్తువులలో ఫీల్డ్స్ "
-
-#: contrib/admindocs/views.py:314
-#: contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327
-#: contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "అంకె"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "బూలియన్ (అవునా లెక కాదా)"
-
-#: contrib/admindocs/views.py:316
-#: contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr ""
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "కామా తో విడడీసిన సంఖ్య"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "తేది (సమయం లేకుండా)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "తేది (సమయం తో)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "దశగణసంఖ్య"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "ఇటపా"
-
-#: contrib/admindocs/views.py:322
-#: contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "ఫైల్ పాత్"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr ""
-
-#: contrib/admindocs/views.py:328
-#: contrib/comments/models.py:58
-msgid "IP address"
-msgstr "ఐపి అడ్రస్"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr ""
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "పేరంట్ మొడల్ యొక్క రిలేషన్ "
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "ఫోన్ నంబరు"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "వ్యాఖ్యానము"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "సమయం"
-
-#: contrib/admindocs/views.py:339
-#: contrib/comments/forms.py:22
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "అమెరికా రాజ్యము"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "ఎక్స్ ఎమ్ ఎల్"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "ఈ పొరటుకు పత్రికీకరణ"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "వస్తువు ఇడి చూడండి"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "వస్తువు ని మార్చండి (ప్రస్తుత విండొ)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "వస్తువు ని మార్చండి(కొత్త విండొ) "
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "పర్సనల్ సమాచారం "
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "అనుమతులు"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "ముఖ్యమైన తారీఖులు"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "గుంపులు"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "వినియొగదారి ని జత చేయండి"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "అనుమతి పదం మార్పు జయప్రదమైంది "
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "అనుమతి పదం మార్చుకోండి: %s"
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr ""
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "ఈ విలువ లో అక్షరాలు, అంకెలు ఇంకా అండర్ స్కోర్లు ఉందాలి"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "అనుమతి పదం ఖాయం"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "ఈ నామముతొ ఇంకొ వినియొగదారి ఉన్నరు"
-
-#: contrib/auth/forms.py:36
-#: contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "ఈ రెండు అనుమతి పదాలు అసమానమైనంగ ఉన్నాయి"
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr ""
-
-#: contrib/auth/forms.py:87
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr ""
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "ఇటపా అడ్రస్ "
-
-#: contrib/auth/forms.py:109
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr ""
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "%sపై అనుమతి పదం తిరిగి మార్చు "
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "కొత్త అనుమతి పదం"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "కొత్త అనుమతి పదం ఖాయం"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "పాత అనుమతి పదం"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-
-#: contrib/auth/models.py:72
-#: contrib/auth/models.py:95
-msgid "name"
-msgstr "నామము"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "సంహితనామము"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "అనుమతి"
-
-#: contrib/auth/models.py:78
-#: contrib/auth/models.py:96
-msgid "permissions"
-msgstr "అనుమతులు"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "గుంపు"
-
-#: contrib/auth/models.py:100
-#: contrib/auth/models.py:146
-msgid "groups"
-msgstr "గుంపులు"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "వినియొగదారుని నామము"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "పేరు"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "ఇంటి పేరు"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "ఇటపా"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "అనుమతిపదం"
-
-#: contrib/auth/models.py:140
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr ""
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "ఉద్యోగస్తుల స్థితి"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr ""
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "చురుకు గా"
-
-#: contrib/auth/models.py:142
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr ""
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr ""
-
-#: contrib/auth/models.py:143
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr ""
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "గత లాగిన్"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "చేరిన తారీఖు"
-
-#: contrib/auth/models.py:147
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr ""
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "వినియొగదారి అనుమతులు"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "వినియొగదారి"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "వినియొగదారులు"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "సందేశం"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "లాగ్గడ్ ఔట్"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "సరైన ఇటపా ఇవ్వండి"
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr ""
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr ""
-
-#: contrib/comments/forms.py:20
-msgid "Name"
-msgstr "నామము"
-
-#: contrib/comments/forms.py:21
-msgid "Email address"
-msgstr "ఇటపా "
-
-#: contrib/comments/forms.py:23
-msgid "Comment"
-msgstr "వ్యాఖ్యానము"
-
-#: contrib/comments/forms.py:26
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-
-#: contrib/comments/forms.py:126
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "వస్తువు ఐడి"
-
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "వినియొగదారి నామము"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "వినియోగదారుని ఇటపా "
-
-#: contrib/comments/models.py:52
-msgid "user's URL"
-msgstr "వినియొగదారి URL"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "వ్యాఖ్యానము"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "తేది /వేళ సమర్పించినది"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "బహిరంగమయినది"
-
-#: contrib/comments/models.py:60
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "తీసివేయబడినది"
-
-#: contrib/comments/models.py:63
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr " ఈ వ్యాఖ్యానము సరిగ్గా లేదని తోచినచో ఈ డబ్బా ని చెక్ చేయండి "
-
-#: contrib/comments/models.py:115
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr ""
-
-#: contrib/comments/models.py:124
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr ""
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "పైతాన్ మొడల్ క్లాస్ పేరు"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "సూచన రకం"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "సూచన రకాలు"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "ఈ విలువ లో అక్షరాలు, అంకెలు , అండర్ స్కోర్లు ,డాష్ లు లేక స్లాష్ లు ఉందాలి"
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr ""
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "పట్టము"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "సూచన "
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr ""
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr ""
-
-#: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "ఉదాహరణ: 'flatpages/contact_page.html'.ఇది ఇవ్వకపోతే సిస్టం 'flatpages/default.html' ని వాడుకుంటడి"
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "నమొదు చేయటము అవసరం"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "ఇది చెక్ చేసి ఉంటే కేవలం లాగ్గడ్ ఇన్ యూజర్లు పేజి చూడలేస్తారు"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr ""
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr ""
-
-#: contrib/formtools/wizard.py:130
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "క్షెత్రగనిత మూల్యము ఇవ్వలెదు."
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "సరికాని క్షేత్రగణిత మూల్యము."
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "సరికాని క్షేత్రగణిత రకం."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "వ"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "వ"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "వ"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "వ"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "ఒక్కటి"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "రెండు"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "మూడు"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "నాలుగు"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "ఐదు"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "ఆరు"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "ఏడు"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "యెనిమిధి"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "తొమ్మిది"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "ఈ రోజు"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "రెపు"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "నిన్న"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "దయచెసి తపాలు సంహిత NNNN లెక ANNNNAAA రూపలవన్యములొ ఇవ్వండి"
-
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr ""
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "దయచేసి సరైన CUIT(XX-XXXXXXXX-X లెక XXXXXXXXXXXX రూపలవన్యం) ఇవ్వండి."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "సరికాని CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "బుర్గెన్లాండ్"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "కారింథియా"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "లొవర్ ఆస్ట్రియ"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "అప్పర్ ఆస్ట్రియ"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "సాల్సబర్గ్"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "స్టైరియా"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "టైరొల్"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "వొరార్లబెర్గ్"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "వియెన్నా"
-
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "దయచేసి తపాలు సంహిత XXXX రూపలవన్యములొ ఇవ్వండి."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "దయచేసి సరైన ఆస్ట్రేలియన్ సొషల్ సెక్యురిటి (XXXX XXXXXX రూపలవన్యము) సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "దయచేసి 4 ఆంసము తపాలు సంఖ్య ఇవ్వండి"
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "దయచేసి తపాలు సంహిత XXXXX-XXX రూపలవన్యములొ ఇవ్వండి."
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "దూరవాణి సంఖ్య XX-XXXX-XXXX రూపలావన్యములొ ఉండాలి."
-
-#: contrib/localflavor/br/forms.py:58
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "సరైన బ్రజిలియన్ రజ్యము ఏర్పర్చండి. ఈ రజ్యం లభ్యమైన రజ్యాలొ లెదు."
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "చెల్లని CPF సంఖ్య"
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "చెల్లని CNPJ సంఖ్య"
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "దయచేసి తపాలు సంహిత XXX XXX రూపలవన్యములొ ఇవ్వండి."
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "దయచేసి సరైన కనెడియన్ సొషల్ ఇన్షురన్స్ (XXX-XXX-XXX రూపలవన్యము) సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "ఆర్గౌ"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "ఆప్పెంజెల్ ఈన్నెర్హొడెన్"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "ఆప్పెంజెల్ ఆఉస్సెర్హొడెన్"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "బసెల్-స్టద్ట్"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "బసెల్-లాండ్"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "బర్న్"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "ఫ్రిబౌర్గ్"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "జెనీవా"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "గ్లారస్"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "గ్రౌబెండెన్"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "జుర"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "లుకర్న్"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "న్యుకటెల్"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "నిడ్వాల్డెన్"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "ఒబ్వాల్డెన్"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "షఫౌసెన్"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "ష్విజ్"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "సొలొథర్న్"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "స్త్.గాలెన్"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "తర్గౌ"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "తికినొ"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "ఉరి"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "వలె"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "వౌడ్"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "జుగ్గ"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "జురిక్"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "దయచేసి సరైన స్విస్సు గుర్తు లెక పాస్పొర్టు సంఖ్య ఇవ్వండి (X1234567<0 లెక 1234567890 రూపలావన్యము)"
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "దయచేసి సరైన చిలి RUT ఇవ్వండి."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "సరైన చిలి RUT (XX.XXX.XXX-X రూపలవన్యము) సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "మీరు ఇచ్చిన చిలి RUT చెల్లదు."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "భాడెన్-వెర్తెంబెర్గ్"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "బవారియా"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "బెర్లిన్"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "బ్రాండెంబర్గ్"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "బ్రెమెన్"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "హంబర్గ్"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "హెస్సెన్"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "మెక్లెంబర్గ్-పశ్చిమ ఫొమెరనియా"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "లౌఎర్ సాక్సొని"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "ఉత్తర రైన్-వెస్టఫలియా"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "రైనెలాండ్-ఫలాటినట్"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "సార్లాండ్"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "సాక్సొని"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "సాక్సొని-అనాట్"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "శ్లెజ్విగ్-హొల్సటైన్"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "థురింగియా"
-
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "దయచేసి తపాలు సంహిత XXXXX రూపలవన్యములొ ఇవ్వండి."
-
-#: contrib/localflavor/de/forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "దయచేసి సరైన జర్మన్ గుర్తు చీట్లు (XXXXXXXXXXX-XXXXXXX-XXXXXXX-X రూపలవన్యము) సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "అరవ"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "అల్బాసెట్"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "అలకంట్"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "అల్మిరియా"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "అవిల"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "బడాజొజ్జ్"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "ఇల్లెస్ బలేర్స్"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "బార్సిలొనా"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "బర్గొస్"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "కసిరెస్"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "కడిజ్"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "kasTello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "సియుడాడ్ రియాల్"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "కొర్డొబా"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "ఆ కొరున్యా"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "కువెంకా"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "గిరొనా"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "గ్రనడా"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "గువడలజర"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "గువిపుజకొవ"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "హువెల్వ"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "హుఎస్కా"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "జేన్"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "లియొన్"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "లైడ"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "ల రిఒజ"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "లుగొ"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "మాడ్రిడ్"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "మలగా"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "మర్కియ"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "నవర్రె"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "ఔరెన్సె"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "అస్టురియాస్"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "పలెన్శియా"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "లా పామాస్"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "పొంటెవెడెర"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "సలమంక"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "సాంట క్రుజ్ ద టెనెరిఫె"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "కంటబ్రియా"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "సెగొవియా"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "సెవియా"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "సొరియా"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "టర్రగొన"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "టెరువెల్"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "టొలిడొ"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "వెలెన్షియా"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "వల్లడొలిడ్"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "బిజ్కైయా"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "జమొర"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "జరగొసా"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "క్యుట"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "మెలిల్ల్యా"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "అండలుసియా"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "ఎరొగొన్"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "ప్రిన్సిపాలిటి ఒఫ్ ఆస్టురియాస్"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "బలెయారిక్ ద్వీపాలు"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "బాస్క్ దెశం"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "కనరి ద్వీపాలు"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "కస్తిల్-ల మంక"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "కస్టిల్ మరియు లియొన్"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "కటలొనియా"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "ఎక్స్ట్రీమదుర"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "గలిషియా"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "మర్కియ రాజ్యము"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "ఫొరల్ కమ్యునిటి ఒఫ్ నావర్రె"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "వాలెన్షియన్ కమ్యునిటి"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:39
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "దయచేసి సరైన దూరవాణి సంఖ్య ఇవ్వండి (6XXXXXXXX, 8XXXXXXXX లెక 9XXXXXXXX రూపలావన్యము)"
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "దయచేసి సరైన NIF, NIE లెక CIF ఇవ్వండి ."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "దయచేసి సరైన NIF లెక NIEఇవ్వండి."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "చెల్లని NIF నియంతృలెక్యం."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "చెల్లని NIE నియంతృలెక్యం."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "చెల్లని CIF నియంతృలెక్యం."
-
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "దయచేసి సరైన కొఠీ లెక్య సంఖ్య ఇవ్వండి (XXXX-XXXX-XX-XXXXXXXXXX రూపలావన్యము)"
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "చెల్లని కొఠీ లెక్క సంఖ్య నియంతృలెక్యం."
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "దయచెసి సరైన ఫిన్నిష్ సొషల్ సెక్యురిటి సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "దయచేసి తపాలు సంహిత XXXXXXX రూపలవన్యములొ ఇవ్వండి."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "దయచేసి సరైన ఐస్లాండిక్ గుర్తు(XXXXXX-XXXX రూపలవన్యము) సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "చెల్లని ఐస్లాండిక్ గుర్తు సంఖ్య."
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "దయచేసి సరైన తపాలు సంహిత ఇవ్వండి."
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "దయచేసి సరైన సొషల్ సెక్యురిటి సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "దయచేసి సరైన VAT సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "దయచేసి తపాలు సంహిత (XXXXX-XXX లెక XXX-XXXX రూపలవన్యము ) ఇవ్వండి."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "హొకైడొ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "ఒమొరి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "ఇవాటె"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "మియాగి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "అకిట"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "యమగాట"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "ఫుకుషిమ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "ఇబరాకి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "టొచిగి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "గున్మ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "సైతమా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "చిబ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "టొకియొ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "కనగావా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "యమనాషి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "నగానొ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "నీగాట"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "టొయామా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "ఇషికావా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "ఫుకుయి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "గిఫు"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "షిజుఒక"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "ఐచి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "మి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "షిగ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "క్యొటొ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "ఒసాకా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "హ్యొగొ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "నారా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "వకయామా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "టొట్టొరి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "షిమానె"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "ఒకయామా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "హిరొషిమా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "యామాగుచ్చి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "టొకుషిమా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "కగావా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "ఎహిమె"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "కొచి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "ఫుకొకు"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "సగా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "నాగాసాకి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "కుమమొటొ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "ఒయిటొ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "మియజాకి"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "కాగొషిమా"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "ఒకినావా"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "అగూస్కలియెంటెస్"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "బాహా కాలిఫొర్నియ"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "బాహా కాలిఫొర్నియ సుర్"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "కంపెచె"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "చిహువహువ"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "చియపస్"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "కోహుయిల"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "కొలిమ"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "డిస్ట్రిటొ ఫెడ్రల్"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "డురంగొ"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "గువెర్రెరొ"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "గువనజువటొ"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "హిడల్గొ"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "జలిస్కొ"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "ఏస్తడొ డ మెక్సికొ"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "మికోకన్"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "మొరెలొస్"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "నయరిట్"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "నుఎవొ లియొన్"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "ఓక్సక"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "పువెబ్ల"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "కువెరెటరొ"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "క్వింటన రూ"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "సినలో"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "సన్ లువిస్ పొటొసి"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "సొనొర"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "టబస్కొ"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "టమౌలిపాస్"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "లక్స్కాలా"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "వెరక్రుజ్"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "యుకటన్"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "జకటెకాస్"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "దయచేసి సరైన తపాలు సంహిత ఇవ్వండి"
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "దయచెసి సరైన దూరవాణి సంఖ్య ఇవ్వండి"
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "దయచేసి సరైన SoFi సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "డ్రెంత్"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "ఫ్లెవొలాండ్"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "ఫ్రియెస్లాండ్"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "జెల్దెర్లాండ్"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "గ్రొనింజెన్"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "లింబర్గ్"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "నొర్డ్-బ్రబంట్"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "నొర్డ్-హలాండ్"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "ఒవెరిస్సెల్"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "యూట్రెక్"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "జీలాండ్"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "జుఇడ్-హాలాండ్"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "దయచెసి సరైన నార్వెజియన్ సొషల్ సెక్యురిటి సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "చెల్లని రష్ట్ర గుర్తు సంఖ్య నియంతృలెక్యము"
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "దయచేసి పన్ను సంఖ్యను (ణీఫ్) XXX-XXX-XX-XX లెక XX-XX-XXX-XXX రూపలవన్యములొ ఇవ్వండి ."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "చెల్లని పన్ను సంఖ్య (ణీఫ్)నియంతృలెక్యము"
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "చెల్లని రష్ట్ర వ్వవహార లెక్క పట్టి సంఖ్య నియంతృలెక్యము (REGON)."
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "దయచేసి తపాలు సంహిత XX-XXX రూపలవన్యములొ ఇవ్వండి."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "లౌఎర్ సిలెసియ"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "కుయవియ-పొమెరానియ"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "లబ్లిన్"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "లుబుస్"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "లొడ్జ్"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "లెస్సెర్ పొలాండ్"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "మసొవియ"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "ఒపొల్"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "సుబ్కర్పతియ"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "పొడ్లసి"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "పొమెరానియా"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "సిలెసియా"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "స్విటొక్ర్జిస్కియె"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "వర్మియ-మాసురియా"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "గ్రేటెర్ పొలాండ్"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "పశ్చిమ పొమెరనియా"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "దయచేసి సరైన CIF ఇవ్వండి."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "దయచేసి సరైన CNP ఇవ్వండి."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "దయచేసి సరైన IBAN (ROXX-XXXX-XXXX-XXXX-XXXX రూపలవన్యము) ఇవ్వండి."
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "దూరవాణి సంఖ్య XXXX-XXXXXX రూపలవన్యములొ ఇవ్వాలి."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "దయచేసి సరైన తపాలు సంహిత XXXXXX రూపలవన్యములొ ఇవ్వండి."
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "దయచేసి తపాలు సంహిత (XXXXX లెక XXX XX రూపలవన్యములొ )ఇవ్వండి."
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "బన్స్క బైస్ట్రిక"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "బన్స్క స్టీవ్నిక"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "భర్డెజొవ్"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "బనొవ్స నడ్ బెబ్రవౌ"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "బ్రెజ్నొ"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "బ్రాటిస్లావా I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "బ్రాటిస్లావా II "
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "బ్రాటిస్లావా III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "బ్రాటిస్లావా IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "బ్రాటిస్లావా V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "బిట్స"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "కడ్క"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "దెట్వ"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "డొల్ని కుబిన్"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "డునజస్క స్ట్రెడ"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "గలంటా"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "గెల్నికా"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "లొహొవెక్"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "హుమీనె"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "ఇలావ"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "కెజ్మరొక్"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "కొమార్నొ"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "కొసైస్ I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "కొసైస్ II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "కొసైస్ III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "కొసైస్ IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "కొసైస్ - ఒకొలి"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "క్రుపిన"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "kysuke nove mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "లెవిస్"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "లెవొక"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "లిప్టొవ్స్కి మికులాస్"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "లుసెనెక్"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "మలకీ"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "మార్టిన్"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "మెద్జిలబొర్స్"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "మిషాలొవ్సె"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "మైజావా"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "నేంస్తొవొ"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "నిట్రా"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "నొవె మెస్టొ నడ్ వాహొం"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "నొవె జంకి"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "పర్తిజన్స్కె"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "పెజినొక్"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "పిఎస్టాని"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "పొల్టర్"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "పొప్రడ్"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "పొవజ్స్క బ్య్స్ట్రిక"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "ప్రెసొవ్"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "ప్రిఎవిద్జ"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "పుచొవ్"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "రెవుక"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "రిమవ్స్క సొబొట"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "రొజ్నవ"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "రుజొంబెరొక్"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "సబినొవ్"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "సెనెక్"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "సెనికా"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "స్కాలికా"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "స్నిన"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "సొబ్రన్సె"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "స్పిస్స్కా నొవ వెస్"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "స్టరలుబ్నొవ"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "స్ట్రొప్కొవ్"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "స్విడ్నిక్"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "సాలా"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "టొపొల్కొని"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "ట్రెబిసొవ్"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "త్రెంకిన్"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "నావా"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "టుర్చీన్స్కె టెప్లిచె"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "దొసిన్"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "వెల్కై రిటిస్"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "వ్రనొవ్ నాడ్ టొప్లౌ"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "జ్లటె మొరావ్సె"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "జ్వొలెన్"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "జార్నొవిక"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "జీర్ నాడ్ రొనొం"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "జిలిన"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "భన్స్క భైస్త్రిక రాజ్యం"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "బ్రాటిస్లావ రాజ్యము"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "కొసైస్ రాజ్యము"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "నిట్రా రాజ్యము"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "ప్రెసావు రాజ్యము"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "ట్రెంకిన్ రాజ్యము"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "ట్ర్నావా రాజ్యము"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "జిలిన రాజ్యము"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "దయచేసి సరైన తపాలు సంహిత ఇవ్వండి."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "బెడ్ఫర్డషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "బఖింఘమషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "చెషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "కార్న్వాల్ మరియు సిసిల్లీ ద్వీపాలు"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "కంబ్రియా"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "డెర్బీషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "డెవొన్"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "డొర్సెట్"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "డుర్హం"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "తూర్పు సుస్సెక్స"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "ఎసెక్స"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "గ్లౌసెస్తెరషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "గ్రెటర్ లండన్"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "గ్రెటర్ మాంచెస్టర్"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "హాంపషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "హెర్ట్ఫొర్డషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "కెంట్"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "లెంకషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "లెసెటర్షర్"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "లింకన్షర్"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "మర్సీసైడ్"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "నార్ఫొల్క"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "ఉత్తర యొర్కషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "నార్తంప్టొనషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "నార్థంబెర్లాండ్"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "నాటింఘమషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "ఆక్ష్ఫర్డషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "ష్రొపషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "సొమర్సెట్"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "దక్షిణ యొర్కషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "స్టఫ్ఫొర్డషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "సఫ్ఫొల్క"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "సుర్రెయ్"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "టైన్ మరియు వెర్"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "వార్విక్షైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "పశ్చిమ మిడ్లాండ్స"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "పశ్చిమ ససెక్స"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "పశ్చిమ యొర్కషైరె"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "విల్టషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "వొర్సెస్టషైర్"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "కౌంటీ అంట్రిం"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "కౌంటీ అర్మాఘ్"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "కౌంటీ డౌన్"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "కౌంటీ ఫెర్మనాఘ్"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "కౌంటీ లొండొండెర్రీ"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "కౌంటీ టైరొన్"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "క్ల్వైడ్"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "డైఫెద్"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "గ్వెంట్"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "గ్వైనెడ్"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "మిడ్ గ్లమార్గాను"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "పొవిస్"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "దక్షిణ గ్లమార్గాను"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "పశ్చిమ గ్లమార్గాను"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "బార్డర్స్"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "మధ్యస్థమైన స్కాట్లాండ్"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "డుంఫ్రిఎస్ మరియు గెలొవెస్"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "ఫిఫె"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "గ్రాంపియన్"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "హైలాండ్"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "లొతియన్"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "ఓర్క్నీ ద్వీపాలు"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "షెట్లాండ్ ద్వీపాలు"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "స్త్రట్తక్లైడ్"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "టేసైడ్"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "వెస్టెర్న ద్వీపాలు"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "ఇంగ్లాండ్"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "నార్తెర్న ఐర్లాండ్"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "స్కాట్లాండ్"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "వెల్స్"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "దయచేసి తపాలు సంహిత (XXXXX లెక XXXXX-XXXX రూపలవన్యము) ఇవ్వండి."
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "దయచేసి సరైన అమెరిక సొషల్ సెక్యురిటి (XXX-XX-XXXX రూపలవన్యము) సంఖ్య ఇవ్వండి."
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "దయచేసి సరైన దక్షిణ ఆఫ్రిక ఐడ్ ఇవ్వండి."
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "దయచేసి సరైన దక్షిణ ఆఫ్రిక తపాలు సాంహిత ఇవ్వండి."
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "తూర్పు కెప్"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "ఫ్రీ స్టెట్"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "గౌటెంగ్"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "క్వజులు-నటాల్"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "లింపొపొ"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "పుమలంగ"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "naarterna kEp"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "పశ్చిమ కెప్"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr ""
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr ""
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr ""
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr ""
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr ""
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr ""
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "భాగము తాళంచెవి"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "భాగము దత్తం"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr ""
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "భాగము"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "భాగములు"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "డొమైన్ నామము"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "కనిపిచ్చే పేరు"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "సైట్లు"
-
-#: db/models/fields/__init__.py:348
-#: db/models/fields/__init__.py:683
-msgid "This value must be an integer."
-msgstr "ఈ విలువ లో ఉందాలి"
-
-#: db/models/fields/__init__.py:379
-msgid "This value must be either True or False."
-msgstr "ఈ విలువ తప్పైన ఒప్పైన ఉందాలి"
-
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "ఈ ఫీల్డ్ కాళీగా ఉందకూడడు "
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "కామాల తో అంకెలు విడడీసి ఇవ్వండి "
-
-#: db/models/fields/__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "దయచేసి సరైన తెది (YYYY-MM-DD రూపలావన్యం) ఇవ్వండి"
-
-#: db/models/fields/__init__.py:468
-#, python-format
-msgid "Invalid date: %s"
-msgstr "సరికాని తారీఖు : %s."
-
-#: db/models/fields/__init__.py:532
-#: db/models/fields/__init__.py:550
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "దయచేసి సరైన తెది/సమయం (YYYY-MM-DD HH:MM[:ss[.uuuuuu]] రూపలావన్యం) ఇవ్వండి"
-
-#: db/models/fields/__init__.py:586
-msgid "This value must be a decimal number."
-msgstr ""
-
-#: db/models/fields/__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:817
-#: db/models/fields/__init__.py:831
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "దయచేసి సరైన సమయం (HH:MM[:ss[.uuuuuu]] రూపలావన్యం) ఇవ్వండి"
-
-#: db/models/fields/related.py:761
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "\"Control\" కాని \"Command\" మాక్ లో నొక్కి ఉంచండి , ఒకటి కన్న ఎక్కువ ఎన్నుకోవటానికి"
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "దయచేసి సరైన %(self)s ఐడి ఇవ్వండి. మీరు ఇచ్చిన వెల %(value)r తప్పు."
-msgstr[1] "దయచేసి సరైన %(self)s ఐడిలు ఇవ్వండి. మీరు ఇచ్చిన వెలలు %(value)r తప్పు."
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "ఈ ఫీల్డ్ అవసరము"
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "దయచేసి సరైన వెల ఇవ్వండి."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "పూర్ణ సంఖ్య ఇవ్వండి"
-
-#: forms/fields.py:167
-#: forms/fields.py:196
-#: forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr ""
-
-#: forms/fields.py:168
-#: forms/fields.py:197
-#: forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr ""
-
-#: forms/fields.py:195
-#: forms/fields.py:224
-msgid "Enter a number."
-msgstr "దయచేసి పూర్ణ సంఖ్య ఇవ్వండి"
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr ""
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr ""
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-
-#: forms/fields.py:287
-#: forms/fields.py:848
-msgid "Enter a valid date."
-msgstr "దయచేసి సరైన తేది ఇవ్వండి."
-
-#: forms/fields.py:321
-#: forms/fields.py:849
-msgid "Enter a valid time."
-msgstr "దయచేసి సరైన సమయం ఇవ్వండి."
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "దయచేసి సరైన తెది/సమయం ఇవ్వండి."
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr ""
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "మీరు సమర్పించిన ఫైల్ కాళీగా ఉంది "
-
-#: forms/fields.py:477
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr ""
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "దయచేసి సరైన URL ఇవ్వండి."
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr ""
-
-#: forms/fields.py:618
-#: forms/fields.py:696
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-
-#: forms/fields.py:697
-#: forms/fields.py:758
-#: forms/models.py:654
-msgid "Enter a list of values."
-msgstr ""
-
-#: forms/fields.py:877
-msgid "Enter a valid IPv4 address."
-msgstr "దయచేసి సరైన IPv4 అడ్రస్ ఇవ్వండి"
-
-#: forms/fields.py:887
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-
-#: forms/formsets.py:242
-#: forms/formsets.py:244
-msgid "Order"
-msgstr "అంతరము"
-
-#: forms/models.py:268
-#: forms/models.py:277
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr ""
-
-#: forms/models.py:584
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-
-#: forms/models.py:655
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-
-#: template/defaultfilters.py:706
-msgid "yes,no,maybe"
-msgstr "అవును, కాదు , ఏమొ"
-
-#: template/defaultfilters.py:737
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d byte"
-msgstr[1] "%(size)d bytes"
-
-#: template/defaultfilters.py:739
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:741
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:742
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "అర్ధరాత్రి"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "మధ్యానం"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "సోమవారము"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "మంగళవారము"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "బుధవారము"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "గురువారము"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "శుక్రవారము"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "శనివారము"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "ఆదివారము"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "సోమవారము"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "మంగళవారము"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "బుధవారం"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "గురువారం"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "శుక్రవారము"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "షనివారం"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "ఆదివారము"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "జాన్వరి "
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "ఫిబ్రవరి"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "మార్చి"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "ఎప్రిల్"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "మే"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "జూను"
-
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "జులై"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "ఆగష్టు"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "సెప్టెంబర్"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "అక్టోబర్"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "నవంబర్"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "డిసెంబర్"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "జాన్"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "ఫిబ్"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "మార్"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "ఎప్ర్"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "మే"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "జూన్"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "జుల్"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ఆగ్"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "సెప్"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "అక్ట్"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "నవ్"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "డిస్"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "జాన్"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "ఫిబ్"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ఆగ్"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "సెప్"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "అక్ట్"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "నవ్"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "డిస్"
-
-#: utils/text.py:128
-msgid "or"
-msgstr "లెక"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "సంవత్సరం"
-msgstr[1] "సంవత్సరాలు"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "నెల"
-msgstr[1] "నెలలు"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "వారం"
-msgstr[1] "వారాలు"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "రోజు"
-msgstr[1] "రోజులు"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "గంటలు"
-msgstr[1] "గంట"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "నిముషం"
-msgstr[1] "నిముషాలు"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "నిముషం"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "తెది_రూపలావణ్యం"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "సమయం_రూపలావణ్యం"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "సంవత్సరం_మాసము_రూపలావణ్యం"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "మాసము_దినము_రూపలావణ్యం"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s జయప్రదంగా తయారయింది"
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s జయప్రదంగా @@"
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s తీసివేయబడినది"
-
-#~ msgid "headline"
-#~ msgstr "ముఖ్య అంశం"
-#~ msgid "rating #1"
-#~ msgstr "రేటింగ్ #1"
-#~ msgid "rating #2"
-#~ msgstr "రేటింగ్ #2"
-#~ msgid "rating #3"
-#~ msgstr "రేటింగ్ #3"
-#~ msgid "rating #4"
-#~ msgstr "రేటింగ్ #4"
-#~ msgid "rating #5"
-#~ msgstr "రేటింగ్ #5"
-#~ msgid "rating #6"
-#~ msgstr "రేటింగ్ #6"
-#~ msgid "rating #7"
-#~ msgstr "రేటింగ్ #7"
-#~ msgid "rating #8"
-#~ msgstr "రేటింగ్ #8"
-#~ msgid "is valid rating"
-#~ msgstr "సరైన రేటింగ్"
-#~ msgid "comments"
-#~ msgstr "వ్యాఖ్యానములు"
-#~ msgid "person's name"
-#~ msgstr "వ్యక్తి పేరు"
-#~ msgid "ip address"
-#~ msgstr "ఐపి అడ్రస్"
-#~ msgid "approved by staff"
-#~ msgstr " అధికారుల చేత ఆమోదించబడినది"
-#~ msgid "free comment"
-#~ msgstr "నిరాటంకమైన వ్యాఖ్యానము"
-#~ msgid "free comments"
-#~ msgstr "నిరాటంకము గావ్యాఖ్యానములు"
-#~ msgid "score"
-#~ msgstr "స్కొర్"
-#~ msgid "karma score"
-#~ msgstr "కర్మ స్కొర్"
-#~ msgid "karma scores"
-#~ msgstr "కర్మ స్కొరులు"
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "%(score)d కి %(user)s రేటింగ్"
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "%(user)s చేత చేయబడ్డ వ్యాఖ్యానములు:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid "flag date"
-#~ msgstr "ఫ్లాగ్ తేది "
-#~ msgid "user flag"
-#~ msgstr "యూజర్ ఫ్లాగ్"
-#~ msgid "user flags"
-#~ msgstr "యూజర్ ఫ్లాగులు"
-#~ msgid "Flag by %r"
-#~ msgstr "%r యొక్క ఫ్లాగ్"
-#~ msgid "deletion date"
-#~ msgstr "తీసివేసిన తారీఖు"
-#~ msgid "moderator deletion"
-#~ msgstr "మొదరేటర్ చేత తీసివేయబడినది "
-#~ msgid "moderator deletions"
-#~ msgstr "మొదరేటర్ చేత తీసివేయబడినవి"
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "మొదరేటర్ తీసివేసిన %r"
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "అపరిచిత యూజర్లు వోటు వేయలేరు"
-#~ msgid "No voting for yourself"
-#~ msgstr "మీకు వోటు హక్కు లేదు"
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr "ఈ రేటింగ్ అవసరం ఎం దుకంటే మీరు ఒక్కసారైన రేటింగ్ ఇచ్చారు"
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "ఈ వ్యాఖ్యానము చేసిన యూజర్ %(count)s లు కన్న తక్కువ సమర్పించాడు వ్యాఖ్యానము:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[1] ""
-#~ "ఈ వ్యాఖ్యానము చేసిన యూజర్ %(count)s లు కన్న తక్కువ సమర్పించాడువ్యాఖ్యానములు:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "ఇక్కడ సమర్పణలు మాత్రమే అంగీకరిస్తాము"
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ ఫీల్డస్ సమర్పించలేదు"
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr "ఎవరో వ్యాఖ్యానము ఫార్మ్ ని గెలికారు (భద్రత కి భంగం) "
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr "వ్యాఖ్యానము ఫార్మ్ లో చెల్లని 'టార్గెట్ ' పారామీటర్ , ఆ వస్తువు ఐడి చెల్లదు"
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr "వ్యాఖ్యానము ఫార్మ్ లో 'ప్రివ్యీవ్' కాని 'పోస్ట్' ఇవ్వలేదు "
-#~ msgid "Forgotten your password?"
-#~ msgstr "పాస్ వర్డ్ మర్చిపోయారా?"
-#~ msgid "Required"
-#~ msgstr "అవసరము"
-#~ msgid "Post a photo"
-#~ msgstr "ఫొటొ పెట్టండి"
-#~ msgid "Preview comment"
-#~ msgstr "వ్యాఖ్యానము ని ప్రివ్యీవ్ చేయండి"
-#~ msgid "Your name:"
-#~ msgstr "మీ పేరు"
-#~ msgid "Added %s."
-#~ msgstr "%s కలపబడ్డడి"
-#~ msgid "Deleted %s."
-#~ msgstr "%s తీసివేయబడ్డడి"
-#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-#~ msgstr "మీరు<a href=\"/password_reset/\">పాస్ వర్డ మర్చిపోయారా? "
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "మీ కొత్త పాస్ వర్డ్ : %(new_password)s "
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr "నిస్సందేహము గా ఈ పేజి క్ కి వెళ్ళి పాస్ వర్డ్ మార్చుకోండి "
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "కామాల తో విడతీసి సరైన ఈ మెయిల్ అడ్రస్ ఇవ్వండి"
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "ఇక్కడ కాళీ విలువలు అనుమతించబడవు "
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "అంకెలు కాని చిహ్నాలు అనుమతించబడవు"
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "ఈ విలువ లో ఉట్టి మాత్రమే ఉందకూడడు"
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "అక్షరాలు అయిన చిహ్నాలు మాత్రమే అనుమతించబడతాయి "
-#~ msgid "Year must be 1900 or later."
-#~ msgstr "సంవత్సరము 1900 లేక దాని తరువాత అయ్యి ఉందాలి "
-#~ msgid "A valid URL is required."
-#~ msgstr "సరైన URL కావాలి"
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "సరైన HTML ఇవ్వండి .ప్రత్యేకమైన తప్పులు :\n"
-#~ "%s"
-#~ msgid "Enter a valid U.S. state abbreviation."
-#~ msgstr "దయచేసి సరైన అగ్ర రాజ్య సంక్షేపము చేసిన రాష్ట్రము పేరు ఇవ్వండి"
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "ఈ ఫీల్డ్ '%s' ఫీల్డ్ కి సరి తూగాలి"
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "దయచేసి ఏదో ఒకటి ఏదో ఒక ఫీల్డ్ కి ఇవ్వండి "
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr "దయచేసి రెండు ఫీల్డ్లలు ఇవ్వండి లేకపోతే రెండు కాళీ గా వదిలేయండి "
-#~ msgid "This field must be given if %(field)s is %(value)s"
-#~ msgstr "%(field)s %(value)s ఐతే ఈ ఫీల్డ్ ఇవ్వాలి "
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr "%(field)s %(value)s అవ్వకపోతే ఈ ఫీల్డ్ ఇవ్వాలి "
-#~ msgid "Duplicate values are not allowed."
-#~ msgstr "నకలీ విలువలు ఇక్కడ అనుమతించబడవు"
-#~ msgid "The format for this field is wrong."
-#~ msgstr "ఈ ఫీల్డ్ ఫోర్మాట్ తప్పు"
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "%s నించి ఏమి రాబట్టలేము"
-#~ msgid ""
-#~ "%(object)s with this %(type)s already exists for the given %(field)s."
-#~ msgstr "%(field)s లో %(object)s తో %(type)s ఉన్నాయి"
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "గుంపు గా ఉన్న ఐడిల ను కామా తో విడడీయంది"
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "లైన్ బ్రేక్స్ కి ఇక్కడ ఆనుమతి లేదు"
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr " -32,768 ఇంకా 32,767 మధ్యలో ఒక ఆంకె ఇవ్వండి"
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "0 ఇంకా 32,767 మధ్యలో ఒక పూర్ ఇవ్వండి"
-
diff --git a/parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 92d8a71..0000000
--- a/parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 94d5052..0000000
--- a/parts/django/django/conf/locale/te/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,117 +0,0 @@
-# translation of djangojs.po to Telugu
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# pavithran <pavithran.s@gmail.com>, 2007.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-08 23:43+0530\n"
-"PO-Revision-Date: 2008-09-08 23:51+0530\n"
-"Last-Translator: Thejaswi Puthraya <thejaswi.puthraya@gmail.com>\n"
-"Language-Team: Telugu <indlinux-telugu@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "ఆందుబాతులోఉన్న %s "
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "అన్నీ ఎన్నుకోండి"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "ఙత చేయి"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "తీసివేయండి"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "ఎన్నుకున్న %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "మీ ఇష్టాలు ఎన్నుకోండి"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "అన్ని తీసివేయు"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid "January February March April May June July August September October November December"
-msgstr "ఙాన్వరి ఫిబ్రవరి మార్చి ఎప్రిల్ మే ఙూను ఙులై ఆగష్టు సెప్టెంబర్ అక్టోబర్ నవంబర్ డిసెంబర్"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "ఆ సో మం భు గు శు శ"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "ఆదివారము సోమవారము మంగళవారము బుధవారము గురువారము శుక్రవారము శనివారము"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "చూపిన్చు"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "దాచు"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "ఇప్పుడు"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "గడియారము"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "ఒక సమయము ఎన్నుకోండి"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "ఆర్ధరాత్రి"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "6"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "మధ్యాహ్నము"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "రద్దు చేయు"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "ఈనాడు"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "కాలెండర్"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "నిన్న"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "రేపు"
-
diff --git a/parts/django/django/conf/locale/te/__init__.py b/parts/django/django/conf/locale/te/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/te/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/te/formats.py b/parts/django/django/conf/locale/te/formats.py
deleted file mode 100644
index e805872..0000000
--- a/parts/django/django/conf/locale/te/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'g:i:s A'
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/th/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/th/LC_MESSAGES/django.mo
deleted file mode 100644
index 026ba1b..0000000
--- a/parts/django/django/conf/locale/th/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/th/LC_MESSAGES/django.po b/parts/django/django/conf/locale/th/LC_MESSAGES/django.po
deleted file mode 100644
index fbf67de..0000000
--- a/parts/django/django/conf/locale/th/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,3932 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django-1.1-rc-1\n"
-"Report-Msgid-Bugs-To: kowito@felspar.com\n"
-"POT-Creation-Date: 2008-09-02 22:36-0700\n"
-"PO-Revision-Date: 2009-07-28 22:31+0700\n"
-"Last-Translator: Kowit Charoenratchatabhan <kowito@felspar.com>\n"
-"Language-Team: Kowit Charoenratchatabhan<kowito@felspar.com>,Kadsarin Sanjek, Felspar,Theppitak Karoonboonyanan <thep@linux.thai.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Thai\n"
-"X-Poedit-Country: THAILAND\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "อารบิก"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "เบ็งกาลี"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "บัลแกเรีย"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "คาตะลาน"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "เช็ก"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "เวลส์"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "เดนมาร์ก"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "เยอรมัน"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "กรีก"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "อังกฤษ"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "สเปน"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "เอสโตเนีย"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "สเปน (อาร์เจนตินา)"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "แบ็ซค์"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "เปอร์เชีย"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "ฟินแลนด์"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "ฝรั่งเศส"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "ไอริช"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "กาลิเซีย"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "ฮังการี"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "ฮีบรู"
-
-#: conf/global_settings.py:65
-msgid "Croatian"
-msgstr "โครเอเชีย"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "ไอซ์แลนด์"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "อิตาลี"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "ญี่ปุ่น"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "จอร์เจีย"
-
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "เกาหลี"
-
-#: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "เขมร"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "กัณณาท"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "ลัตเวีย"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "ลิทัวเนีย"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "มาซิโดเนีย"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "ดัตช์"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "นอร์เวย์"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "โปแลนด์"
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "โปรตุเกส"
-
-#: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "โปรตุเกส (บราซิล)"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "โรมาเนีย"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "รัสเซีย"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "สโลวัก"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "สโลวีเนีย"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "เซอร์เบีย"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "สวีเดน"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "ทมิฬ"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "เตลุคู"
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "ตุรกี"
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "ยูเครน"
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "จีนตัวย่อ"
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "จีนตัวเต็ม"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>โดย %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "ทั้งหมด"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "วันไหนก็ได้"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "วันนี้"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "สัปดาห์ที่แล้ว"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "เดือนนี้"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "ปีนี้"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "Yes"
-msgstr "ใช่"
-
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
-msgid "No"
-msgstr "ไม่ใช่"
-
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:391
-msgid "Unknown"
-msgstr "ไม่รู้"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "เวลาลงมือ"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "อ็อบเจ็กต์ไอดี"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "object repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "action flag"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "เปลี่ยนข้อความ"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "log entry"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "log entries"
-
-#: contrib/admin/options.py:60
-#: contrib/admin/options.py:121
-msgid "None"
-msgstr "ไม่มี"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "%s เปลี่ยนแล้ว"
-
-#: contrib/admin/options.py:338
-#: contrib/admin/options.py:348
-#: forms/models.py:275
-msgid "and"
-msgstr "และ"
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "เพิ่ม %(name)s \"%(object)s\" แล้ว"
-
-#: contrib/admin/options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "เปลี่ยน %(list)s สำหรับ %(name)s \"%(object)s\" แล้ว"
-
-#: contrib/admin/options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "ลบ %(name)s \"%(object)s\" แล้ว"
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "ไม่มีฟิลด์ใดถูกเปลี่ยน"
-
-#: contrib/admin/options.py:417
-#: contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "เพิ่ม %(name)s \"%(obj)s\" เรียบร้อยแล้ว"
-
-#: contrib/admin/options.py:421
-#: contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "สามารถแก้ไขเพิ่มเติมได้ที่ด้านล่าง"
-
-#: contrib/admin/options.py:431
-#: contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "คุณสามารถเพิ่ม %s ได้อีกที่ด้านล่าง"
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "เปลี่ยนแปลง %(name)s \"%(obj)s\" เรียบร้อยแล้ว"
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "เพิ่ม %(name)s \"%(obj)s\" เรียบร้อยแล้ว แก้ไขได้อีกที่ด้านล่าง"
-
-#: contrib/admin/options.py:536
-#, python-format
-msgid "Add %s"
-msgstr "เพิ่ม %s"
-
-#: contrib/admin/options.py:614
-#, python-format
-msgid "Change %s"
-msgstr "เปลี่ยน %s"
-
-#: contrib/admin/options.py:646
-msgid "Database error"
-msgstr "เกิดความผิดพลาดที่ฐานข้อมูล"
-
-#: contrib/admin/options.py:696
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "ลบ %(name)s \"%(obj)s\" เรียบร้อยแล้ว"
-
-#: contrib/admin/options.py:703
-msgid "Are you sure?"
-msgstr "แน่ใจหรือ"
-
-#: contrib/admin/options.py:732
-#, python-format
-msgid "Change history: %s"
-msgstr "เปลี่ยนแปลงประวัติ: %s"
-
-#: contrib/admin/sites.py:16
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "กรุณาใส่ชื่อผู้ใช้และรหัสผ่านให้ถูกต้อง มีการแยกแยะตัวพิมพ์ใหญ่-เล็ก"
-
-#: contrib/admin/sites.py:227
-#: contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "กรุณาลงชื่อเข้าใช้อีกครั้ง, เนื่องจากคุณไม่ได้ใช้งานนานเกินไป"
-
-#: contrib/admin/sites.py:234
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "ดูเหมือนเบราว์เซอร์ของคุณจะไม่เปิดรับคุกกี้ กรุณาเปิดรับคุกกี้และลองเรียกหน้านี้ใหม่อีกครั้ง"
-
-#: contrib/admin/sites.py:250
-#: contrib/admin/sites.py:256
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "ชื่อผู้ใช้ไม่สามารถใช้อักขระ '@' ได้"
-
-#: contrib/admin/sites.py:253
-#: contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "ที่อยู่อีเมลไม่ใช่ชื่อผู้ใช้ของคุณ ลองใช้ '%s' แทน"
-
-#: contrib/admin/sites.py:313
-msgid "Site administration"
-msgstr "การจัดการไซต์"
-
-#: contrib/admin/sites.py:326
-#: contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "เข้าสู่ระบบ"
-
-#: contrib/admin/sites.py:373
-#, python-format
-msgid "%s administration"
-msgstr "%s การจัดการ"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "จำเป็นต้องมี %(fieldname)s ใน %(name)s: %(obj)s "
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "จำเป็นต้องมี %(fieldname)s ใน %(name)s: "
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "วันที่ :"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "เวลา :"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "ปัจจุบัน:"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "เปลี่ยนแปลง:"
-
-#: contrib/admin/widgets.py:121
-msgid "Lookup"
-msgstr "ดูที่"
-
-#: contrib/admin/widgets.py:228
-msgid "Add Another"
-msgstr "เพิ่มอีก"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "ไม่พบหน้านี้"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "เสียใจด้วย ไม่พบหน้าที่ต้องการ"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "หน้าหลัก"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "เซิร์ฟเวอร์ขัดข้อง"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "เซิร์ฟเวอร์ขัดข้อง (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "เซิร์ฟเวอร์ขัดข้อง <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "เกิดเหตุขัดข้องขี้น ทางเราได้รายงานไปยังผู้ดูแลระบบแล้ว และจะดำเนินการแก้ไขอย่างเร่งด่วน ขอบคุณที่ราบงานความผิดพลาด"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "ยินดีต้อนรับ,"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "เอกสารประกอบ"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "เปลี่ยนรหัสผ่าน"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "ออกจากระบบ"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "ผู้ดูแลระบบ Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "การจัดการ Django"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "เพิ่ม"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "ประวัติ"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "ดูที่หน้าเว็บ"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "โปรดแก้ไขข้อผิดพลาดด้านล่าง"
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "เพิ่ม %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "ตัวกรอง"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:246
-msgid "Delete"
-msgstr "ลบ"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "กำลังดำเนินการลบ %(object_name)s '%(escaped_object)s'และจะแสดงผลการลบ แต่บัญชีของคุณไม่สามารถทำการลบข้อมูลชนิดนี้ได้"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "คุณแน่ใจหรือที่จะลบ %(object_name)s \"%(escaped_object)s\"?ข้อมูลที่เกี่ยวข้องทั้งหมดจะถูกลบไปด้วย:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "ใช่, ฉันแน่ใจ"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " โดย %(filter_title)s "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "โมเดลใช้ได้ในแอป %(name)s ."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "เปลี่ยนแปลง"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "คุณไม่สิทธิ์ในการเปลี่ยนแปลงข้อมูลใดๆ ได้"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "คำสั่งที่ผ่านมา"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "คำสั่งของฉัน"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "ไม่ว่าง"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "มีสิ่งผิดปกติเกิดขึ้นกับการติดตั้งฐานข้อมูล กรุณาตรวจสอบอีกครั้งว่าฐานข้อมูลได้ถูกติดตั้งแล้ว หรือฐานข้อมูลสามารถอ่านและเขียนได้โคยผู้ใช้นี้"
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "ชื่อผู้ใช้:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "รหัสผ่าน:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "วันที่/เวลา"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "ผู้ใช้"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "คำสั่ง"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "อ็อบเจ็กต์นี้ไม่ได้แก้ไขประวัติ เป็นไปได้ว่ามันอาจจะไม่ได้ถูกเพิ่มเข้าไปโดยระบบ"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "แสดงทั้งหมด"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "ไป"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s ผลลัพท์"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s ทั้งหมด"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "บันทึก"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "บันทึกใหม่"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "บันทึกและเพิ่ม"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "บันทึกและกลับมาแก้ไข"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "ขั้นตอนแรก ใส่ชื่อผู้ใช้และรหัสผ่าน หลังจากนั้นคุณจะสามารถแก้ไขข้อมูลผู้ใช้ได้มากขึ้น"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:47
-#: contrib/auth/forms.py:59
-msgid "Username"
-msgstr "ชื่อผู้ใช้"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:60
-#: contrib/auth/forms.py:184
-msgid "Password"
-msgstr "รหัสผ่าน"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "รหัสผ่าน (อีกครั้ง)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "ใส่รหัสผ่านเหมือนด้านบน เพื่อตรวจสอบความถูกต้อง"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "ใส่รหัสผ่านใหม่สำหรับผู้ใช้ <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "ลบ?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "ขอบคุณที่สละเวลาอันมีค่าให้กับเว็บไซต์ของเราในวันนี้"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "เข้าสู่ระบบอีกครั้ง"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "เปลี่ยนรหัสผ่าน"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "เปลี่ยนรหัสผ่านสำเร็จ"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "รหัสผ่านของคุณถูกเปลี่ยนไปแล้ว"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "กรุณาใส่รหัสผ่านเดิม ด้วยเหตุผลทางด้านการรักษาความปลอดภัย หลังจากนั้นให้ใส่รหัสผ่านใหม่อีกสองครั้ง เพื่อตรวจสอบว่าคุณได้พิมพ์รหัสอย่างถูกต้อง"
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "รหัสผ่านเก่า:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "รหัสผ่านใหม่:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "ยืนยันรหัสผ่าน:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "เปลี่ยนรหัสผ่านของฉัน"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "ตั้งค่ารหัสผ่านใหม่"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "ตั้งค่ารหัสผ่านใหม่เรียบร้อย"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "รหัสผ่านของคุณได้รับการตั้งค่าแล้ว คุณสามารถเข้าสู่ระบบได้ทันที"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "การยืนยันตั้งค่ารหัสผ่านใหม่"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "ใส่รหัสผ่านใหม่"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "กรุณาใส่รหัสผ่านใหม่สองครั้ง เพื่อตรวจสอบว่าคุณได้พิมพ์รหัสอย่างถูกต้อง"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "การตั้งค่ารหัสผ่านใหม่ ไม่สำเร็จ"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
-msgstr "การตั้งรหัสผ่านใหม่ไม่สำเร็จ เป็นเพราะว่าหน้านี้ได้ถูกใช้งานไปแล้ว กรุณาทำการตั้งรหัสผ่านใหม่อีกครั้ง"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "การตั้งค่ารหัสผ่านใหม่เรียบร้อย"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "เราได้ส่งอีเมลวิธีการตั้งรหัสผ่าน ไปที่อีเมลที่คุณให้ไว้เรียบร้อยแล้ว และคุณจะได้รับเร็วๆ นี้"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "คุณได้รับอีเมลนี้เพราะว่าคุณได้ทำการขอรหัสผ่านใหม่"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "สำหรับบัญชีการใช้งานของคุณที่ %(site_name)s "
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "กรุณาไปที่หน้านี้และเลือกรหัสผ่านใหม่:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "ชื่อผู้ใช้ของคุณ ในกรณีที่คุณถูกลืม:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "ขอบคุณสำหรับการใช้งานเว็บไซต์ของเรา"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s ทีม"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "ลืมรหัสผ่าน? กรุณาใส่อีเมลด้านล่าง ทางเราจะทำการส่งวิธีการในการตั้งรหัสผ่านใหม่ไปให้"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "อีเมลของคุณ"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "ตั้งรหัสผ่านของฉันใหม่"
-
-#: contrib/admin/templatetags/admin_list.py:288
-msgid "All dates"
-msgstr "ทุกวัน"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "เลือก %s"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "เลือก %s เพื่อเปลี่ยนแปลง"
-
-#: contrib/admin/views/template.py:36
-#: contrib/sites/models.py:38
-msgid "site"
-msgstr "ไซต์"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "เทมเพลต"
-
-#: contrib/admindocs/views.py:57
-#: contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "ป้ายกำกับ:"
-
-#: contrib/admindocs/views.py:90
-#: contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "ตัวกรอง:"
-
-#: contrib/admindocs/views.py:154
-#: contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "ดู:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "ไม่พบแอป %r "
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "ไม่พบโมเดล %(model_name)r ในแอป %(app_label)r"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "ความสัมพันธ์`%(app_label)s.%(data_type)s` อ็อบเจ็กต์"
-
-#: contrib/admindocs/views.py:205
-#: contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241
-#: contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "โมเดล:"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "ความสัมพันธ์`%(app_label)s.%(object_name)s` อ็อบเจ็กต์"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "ทั้งหมด %s "
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "จำนวนของ %s"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "ฟิลด์บน %s อ็อบเจ็กต์"
-
-#: contrib/admindocs/views.py:314
-#: contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327
-#: contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "จำนวนเต็ม"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "ตรรกะแบบบูลหมายถึง ค่า\"จริง\" (True) หรือ \"ไม่จริง \" (False)"
-
-#: contrib/admindocs/views.py:316
-#: contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "สตริง(ได้ถึง %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "จำนวนเต็มแบบมีจุลภาค"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "วันที่ (ไม่มีเวลา)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "วันที่ (พร้อมด้วยเวลา)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "เลขฐานสิบหรือเลขทศนิยม"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "ที่อยู่อีเมล"
-
-#: contrib/admindocs/views.py:322
-#: contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "ตำแหน่งไฟล์"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "เลขทศนิยม"
-
-#: contrib/admindocs/views.py:328
-#: contrib/comments/models.py:58
-msgid "IP address"
-msgstr "หมายเลขไอพี"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "ตรรกะแบบบูลหมายถึง ค่า\"จริง\" (True) หรือ \"ไม่จริง \" (False) หรือ \"ไม่มี\" (None)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "Relation to parent model"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "หมายเลขโทรศัพท์"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "ข้อความ"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "เวลา"
-
-#: contrib/admindocs/views.py:339
-#: contrib/comments/forms.py:22
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "รัฐในสหรัฐ (ตัวอักษรใหญ่ 2 ตัว)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "ข้อความ XML"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s ดูเหมือนจะไม่ใช่ urlpattern อ็อบเจ็กต์"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Documentation bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">เพื่อติดตั้ง bookmarklets, ลากลิ้งก์ไปที่แถบเครื่องมือบุ๊กมาร์ค\n"
-", หรือคลิกขวาที่ลิ้งและเพิ่มเข้าบุ๊กมาร์คของคุณ. ตอนนี้คุณสามารถ\n"
-"เลือก bookmarklet จากหน้าใดๆในเว็บไซต์. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "เอกสารสำหรับหน้านี้"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "ย้ายจากทุกหน้าไปที่วิวที่สร้างหน้านั้นขึ้นมา"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "แสดงอ็อบเจ็กต์ไอดี"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "แสดง content-type และ unique ID เพื่อแสดงอ็อบเจ็กต์เพียงอย่างเดียว."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "แก้ไขออปเจ็กนี้ (ในหน้าต่างปัจจุบัน)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "ไปที่หน้าแอดมินเพื่อแสดงอ็อบเจ็กต์เพียงอย่างเดียว."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "แก้ไขออปเจ็กนี้ (หน้าใหม่)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "เหมือนด้านบน แต่เปิดหน้าต่างผู้ดูแลระบบในหน้าต่างใหม่"
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "ข้อมูลส่วนตัว"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "สิทธิ์"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "วันที่ที่สำคัญ"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "กลุ่ม"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "เพิ่มผู้ใช้"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "เปลี่ยนรหัสผ่านสำเร็จแล้ว"
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "เปลี่ยนรหัสผ่าน: %s "
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "ต้องการไม่เกิน 30 ตัวอักษร และเป็นตัวอักษรหรือตัวเลขเท่านั้น (ตัวอักษร ตัวเลข และ เครื่องหมายขีดล่าง)"
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "ต้องประกอบด้วยตัวอักษร ตัวเลข และเครื่องหมายขีดล่างเท่านั้น"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "ยืนยันรหัสผ่าน"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "ชื่อผู้ใช้นั้นได้ถูกใช้ไปแล้ว"
-
-#: contrib/auth/forms.py:36
-#: contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "รหัสผ่านไม่ตรงกัน"
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "บัญชีนี้ไม่ทำงาน"
-
-#: contrib/auth/forms.py:87
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "เว็บเบราเซอร์ของคุณไม่สามารถใช้งานระบบคุกกี้ได้ จำเป็นต้องใช้ระบบคุกกี้ในการเข้าสู่ระบบ"
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "อีเมล"
-
-#: contrib/auth/forms.py:109
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "อีเมลนี้ไม่ตรงกับบัญชีใดๆในระบบ คุณแน่ใจหรือว่าคุณได้ลงทะเบียนแล้ว"
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "ตั้งค่ารหัสผ่านใหม่บน %s"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "รหัสผ่านใหม่"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "ยืนยันการตั้งรหัสผ่านใหม่"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "รหัสผ่านเก่า"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "ใส่รหัสผ่านเก่าผิด กรุณาใส่รหัสผ่านอีกครั้ง"
-
-#: contrib/auth/models.py:72
-#: contrib/auth/models.py:95
-msgid "name"
-msgstr "ชื่อ"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "รหัสชื่อ"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "สิทธิ์"
-
-#: contrib/auth/models.py:78
-#: contrib/auth/models.py:96
-msgid "permissions"
-msgstr "สิทธิ์"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "กลุ่ม"
-
-#: contrib/auth/models.py:100
-#: contrib/auth/models.py:146
-msgid "groups"
-msgstr "กลุ่ม"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "ชื่อผู้ใช้"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "ชื่อ"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "นามสกุล"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "อีเมล"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "รหัสผ่าน"
-
-#: contrib/auth/models.py:140
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "ใช้ '[algo]$[salt]$[hexdigest]'หรือใช้ <a href=\"password/\">แบบฟอร์มเปลี่ยนรหัสผ่าน </a>."
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "สถานะของพนักงาน"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr "กำหนดผู้ที่จะเข้ามาใช้งานในส่วนของผู้ดูแลระบบ"
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "ใช้งานได้"
-
-#: contrib/auth/models.py:142
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "กำหนดให้ผู้ใช้มีสถานะที่สามารถเข้ามาใช้งานได้ เลือกออกแทนที่จะลบชื่อผู้ใช้ทิ้งไป "
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr "สถานะผู้ใช้พิเศษ"
-
-#: contrib/auth/models.py:143
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "กำหนดสิทธิ์ทุกอย่างให้ผู้ใช้ โดยไม่ต้องการมอบหมายอย่างเป็นทางการ"
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "เข้าสู่ระบบครั้งสุดท้าย"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "วันที่เข้าร่วม"
-
-#: contrib/auth/models.py:147
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "ด้วยสิทธิ์ที่ได้รับ ผู้ใช้นี้ยังได้รับสิทธิ์ให้ใช้อำนาจได้กับกลุ่มของตนเองอีกด้วย"
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "สิทธิ์ของผู้ใช้"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "ผู้ใช้"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "ผู้ใช้"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "ข้อความ"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "ออกจากระบบ"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "กรุณาใส่อีเมลที่ถูกต้อง"
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "เนื้อหา"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "Metadata"
-
-#: contrib/comments/forms.py:20
-msgid "Name"
-msgstr "ชื่อ"
-
-#: contrib/comments/forms.py:21
-msgid "Email address"
-msgstr "อีเมล"
-
-#: contrib/comments/forms.py:23
-msgid "Comment"
-msgstr "ข้อคิดเห็น"
-
-#: contrib/comments/forms.py:26
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "ถ้าคุณใส่ข้อมูลใดๆ ก็ตามในส่วนนี้ มันจะกลายเป็นสแปม"
-
-#: contrib/comments/forms.py:126
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "ระวังนะ ไม่สามารถใช้คำว่า %s ที่นี่ได้"
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "อ็อบเจ็กต์ไอดี"
-
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "ชื่อของผู้ใช้"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "อีเมลของผู้ใช้"
-
-#: contrib/comments/models.py:52
-msgid "user's URL"
-msgstr "URL ของผู้ใช้"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "ข้อคิดเห็น"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "วันและเวลาที่ส่งข้อมูล"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "สาธารณะ"
-
-#: contrib/comments/models.py:60
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "เลือกออกเพื่อที่จะทำให้ข้อคิดเห็นนั้นหายไปจากเว็บไซต์"
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "ถอดออกแล้ว"
-
-#: contrib/comments/models.py:63
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "เลือกเมื่อเห็นว่าข้อคิดเห็นไหนไม่เหมาะสม เมื่อข้อคิดเห็นนี้ได้ถูกลบแล้ว ข้อมูลอื่นจะถูกแสดงขึ้นแทน"
-
-#: contrib/comments/models.py:115
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr "ข้อคิดเห็นนี้ได้ถูกเขียนไว้โดยผู้ใช้ที่สามารถเชื่อถือได้ จะถูกอ่านได้เพียงอย่างเดียว"
-
-#: contrib/comments/models.py:124
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr "ข้อคิดเห็นนี้ถูกเขียนไว้โดยผู้ใช้ที่สามารถเชื่อถือได้ ดังนั้นอีเมลนั้นจะถูกอ่านเท่านั้น"
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"โพสต์โดย %(user)s ที่ %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "python model class name"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "content type"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "content types"
-
-#: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "ตัวอย่าง: '/about/contact/'. ต้องแน่ใจว่าขึ้นต้นและลงท้ายด้วยเครื่องหมาย /"
-
-#: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "ค่าที่ว่านี้จะต้องประกอบด้วยตัวหน้งสือ ตัวเลข เครื่องหมายขีดล่าง และขีดทับ"
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "ตัวเลือกเพิ่มเติม"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "หัวข้อ"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "เนื้อหา"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "ใช้งานข้อติชม"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "ชื่อเทมเพลต"
-
-#: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "ตัวอย่าง: 'flatpages/contact_page.html' ถ้าไม่ได้ถูกใช้ ระบบจะใช้ 'flatpages/default.html' "
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "ต้องลงทะเบียนก่อน"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "ถ้าถูกเลือก ผู้ใช้ที่ลงทะเบียนเข้าสู่ระบบเท่านั้นที่จะสามารถดูหน้านี้"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flat page"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flat page"
-
-#: contrib/formtools/wizard.py:130
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr "ขออภัย แบบฟอร์มไม่สามารถใช้งานได้ กรุณาใส่ข้อมูลในหน้านี้ใหม่"
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "ไม่พบข้อมูลพิกัด"
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "ค่าพิกัดผิดพลาด "
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "ขนิดข้อมูลพิกัดผิดพลาด"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f หนึ่งล้าน"
-
-#: contrib/humanize/templatetags/humanize.py:54
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f สิบล้าน"
-
-#: contrib/humanize/templatetags/humanize.py:57
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f ร้อยล้าน"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "หนึ่ง"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "สอง"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "สาม"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "สี่"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "ห้า"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "หก"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "เจ็ด"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "แปด"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "เก้า"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "วันนี้"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "พรุ่งนี้"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "เมื่อวานนี้"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "กรุณาใส่รหัสไปรษณีย์ ในรูปแบบของ NNNN หรือ ANNNNAAA "
-
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "ฟิลด์นี้ต้องการเฉพาะตัวเลขเท่านั้น"
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "ฟิลด์นี้ต้องการตัวเลขจำนวน 7 หรือ 8 หลัก"
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "ใส่ CUIT ในรูปของ XX-XXXXXXXX-X หรือ XXXXXXXXXXXX"
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "CUIT ไม่สมบูรณ์"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "เบอร์เกินแลนด์"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "คารินเธีย"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "ออสเตรียใต้"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "ออสเตรียเหนือ"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "แซลซ์เบิร์ก"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "สไตเรีย"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "ไทรอล"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "โวราร์ลเบิร์ก"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "เวียนนา"
-
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "ใส่รหัสไปรษณีย์ในรูปแบบของ XXXX"
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "ใส่หมายเลขประกันสังคมออสเตรีย ในรูปแบบ XXXX XXXXXX "
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "ใส่รหัสไปรษณีย์ 4 หลัก"
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "ใส่รหัสไปรษณีย์ในรูปแบบ XXXXX-XXX "
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "ใส่หมายเลขโทรศัพท์ในรูปแบบ XX-XXXX-XXXX "
-
-#: contrib/localflavor/br/forms.py:58
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "เลือกชื่อเมืองของบราซิล"
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "ตัวเลข CPF ไม่สมบูรณ์"
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "ฟิลด์นี้ต้องการตัวเลขมากที่สุด 11 หรือ 14 ตัว"
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "ตัวเลข CNPJ ไม่สมบูรณ์"
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "ฟิลด์นี้ต้องการตัวเลขอย่างน้อย 14 หลัก"
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "ใส่รหัสไปรษณีย์ในรูปแบบ XXX XXX "
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "ใส่หมายเลขของบัตรประกันสังคมแคนาดา ในรูปแบบ XXX-XXX-XXX "
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "อาร์เกา"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "แอพเพ็นเซล อินเนอร์ฮอเดน"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "แอพเพ็นเซล ออสเซอร์ฮอเดน"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "บาเซิล-ชตัดท์"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "บาเซิล-ชตัดท์"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "เบอร์เน"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "ฟรายบวก"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "เจนีวา"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "กลารัส"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "เกาบึนเดน"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "จูรา"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "ลูเซิร์น"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "นูชาเทล"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "นิดวาลเดน"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "ออบวาลเดน"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "ชัฟเฮาซัน"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "ชวิซ"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "โซโลเธิร์น"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "เซนท์ กัลเลน"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "เธอร์เกอ"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "ทีชิโน"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "ยูริ"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "วาเล"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "วอด"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "ซูก"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "ซูริค"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "ใส่หมายเลขประจำตัวประชาชนหรือหมายเลขพาสปอร์ต ในรูปแบบ X1234567<0 หรือ 1234567890"
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "ใส่ RUT ของชิลีที่ถูกต้อง"
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "ใส่หมายเลข RUT ของชิลีที่ถูกต้องในรูปแบบ XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "RUT ของชิลีไม่ถูกต้อง"
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "บาเดิน-เวือร์ทเทมแบร์ก"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "บาวาเรีย"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "เบอร์ลิน"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "บรานเดนเบิร์ก"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "เบรเมน"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "ฮัมบูร์ก"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "เฮสส์"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "เม็กเลนเบิร์กตะวันตก-โพเมราเนีย"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "แซกโซนีล่าง"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "ไรน์ เวสท์ฟาเลีย เหนือ"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "ไรน์แลนด์-พาลาทิเนต"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "ซาร์แลนด์"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "แซกโซนี"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "แซกโซนี-แอเฮาท์"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "ชเลสวิก-โฮลชไตน์"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "เธอร์ริงเกีย"
-
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "ใส่รหัสไปรษณ๊ย์ ในรูปแบบ XXXXX"
-
-#: contrib/localflavor/de/forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "ใส่หมายเลขประจำตัวประชาชนเยอรมันในรูปแบบ XXXXXXXXXXX-XXXXXXX-XXXXXXX-X"
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "อราวา"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "อัลบาเซเต"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "อลาแคนท์"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "อัลมีเรีย"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "อบียา"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "บาดาจอซ"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "หมู่เกาะแบลีแอริก"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "บาเซโลนา"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "เบอร์โกซ"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "กาเซเรส"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "คาดิซ"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "คาสเทลโล"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "ซิวดัด เรอัล"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "คอร์โดบา"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "ลา คอรุนญ่า"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "เกวงกา"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "จีโรนา"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "กรานาดา"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "กวาดาลาฮารา"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "กีปุซโกอา"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "อูเอลบา"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "อวยสกา"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "คาเอน "
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "ลีออน"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "เยย์ดา"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "ลา ริโอฮา"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "ลูโก"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "มาดริด"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "มายอกา"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "มูร์เซีย"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "นาวาร์"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "โอเรนเซ"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "อัสตูเรียส"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "ปาเลนเซีย"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "ลาส พัลมาส"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "ปอนเตเบดรา"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "ซาลามังกา"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "ซานตาครูซ ดา เตริเนเฟ"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "กันตาเบรีย"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "เซโกเบีย"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "เซบียา"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "โซเรีย"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "ตาร์ราโกนา"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "เตรวยล์"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "โตเลโด"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "บาเลนเซีย"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "บายาโดลิด"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "บิสกาเอีย"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "ซาโมรา"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "ซาราโกซา"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "เซวตา"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "เมลียา"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "อันดาลูเซีย"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "อะรากอน"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "ราชรัฐอัสตูเรียส"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "หมู่เกาะแบลีแอริก"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "แคว้นบาสค์"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "หมู่เกาะคะเนรี"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "กัสตียา-ลามันชา"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "คาสตีลและเลออน"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "คาเทโลเนีย"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "เอกเตรมาดูรา"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "กาลิเซีย"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "แคว้น มูเซียร์"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "แคว้นกฎบัตรนาวาร์ "
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "แคว้นบาเลนเซีย"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "ใส่รหัสไปรษณีย์ในรูปของ 01XXX - 52XXX "
-
-#: contrib/localflavor/es/forms.py:39
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "ใส่เบอร์โทรศัพท์ในรูปของ 6XXXXXXXX, 8XXXXXXXX หรือ 9XXXXXXXX "
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "กรุณาใส่ NIF, NIE, หรือ CIF "
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "กรุณาใส่ NIF หรือ NIE"
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "ผลรวมตรวจสอบ สำหรับ NIF ผิดพลาด"
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "ผลรวมตรวจสอบ สำหรับ NIE ผิดพลาด"
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "ผลรวมตรวจสอบ สำหรับ CIF ผิดพลาด"
-
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "กรุณาใส่หมายเลขบัญชีในรูปแบบ XXXX-XXXX-XX-XXXXXXXXXX"
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "ผลรวมตรวจสอบ สำหรับบัญชีธนาคารผิดพลาด"
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "ใส่หมายเลขประกันสังคมฟินแลนด์"
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "กรุณาใส่รหัสไปรษณีย์ในรูปของ XXXXXXX"
-
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "ใส่หมายเลขประจำตัวประชาชนไอซ์แลนด์ในรูปของ XXXXXX-XXXX"
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "หมายเลขประจำตัวประชาชนไอซ์แลนด์ไม่ถูกต้อง"
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "ใส่รหัสไปรษณีย์"
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "ใส่หมายเลขประกันสังคม"
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "กรอกหมายเลขภาษีมูลค่าเพิ่มที่ถูต้อง"
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "ใส่รหัสไปรษณีย์ในรูปของ XXXXXXX หรือ XXX-XXXX"
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "ฮอกไกโด"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "อาโอโมริ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "อิวาเตะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "มิยากิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "อากิตะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "ยามากาตา"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "ฟุกุชิมา"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "อิบารากิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "โตชิกิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "กันมา"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "ไซตามะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "ชิบะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "โตเกียว"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "คะนะงะวะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "ยามานาชิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "นากาโนะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "นีงะตะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "โทยามะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "อิชิคาวะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "ฟูกุอิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "กิฟู"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "ชิซูโอกะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "อะอิชิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "มิเอะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "ชิกะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "เกียวโต"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "โอซากา"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "เฮียวโงะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "นาระ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "วากะยามะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "ทตโตะริ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "ชิมาเนะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "โอกะยามะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "ฮิโรชิมา"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "ยามากุชิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "โตกุชิมะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "คากะวะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "อิฮิเมะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "โคจิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "ฟุกุโอกะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "ซากะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "นากะซากิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "คุมะโมโตะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "โออิตะ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "มิยาซากิ"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "คาโกชิมา"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "โอคินาวะ"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "อากวัสกาเลียนเตส"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "บาจา แคลิฟอร์เนีย"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "บาฮากาลิฟอร์เนียซูร์"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "กัมเปเช"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "ชีวาวา"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "เชียปัส"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "โกอาวีลา"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "โคลิมา"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "เม็กซิโก ซิตี้"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "ดูรังโก"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "เกร์เรโร"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "กวานาวาโต"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "ฮิดาลโก"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "จาลิสโค"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "เม็กซิโก"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "มิโชอากัง"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "มอเรโลส"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "นายาริต"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "นวยโวเลออง"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "โออาซากา"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "ปวยบลา"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "กิเรตาโร"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "กินตานาโร"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "ซีนาโลอา"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "ซันลุยส์โปโตซี"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "โซโนร่า"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "ทาบาสโค"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "ตาเมาลีปัส"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "ตลัซกาลา"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "เวรากรูซ"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "ยูกาตัง"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "ซากาเตกัส"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "ใส่รหัสไปรษณีย์"
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "ใส่หมายเลขโทรศัพท์"
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "กรอกหมายเลขประจำตัวประชาชน"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "แดรนด์"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "เฟลโวแลนด์"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "ฟรายส์แลนด์"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "เกลเดอร์แลนด์"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "เกรอนิงเกน"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "ลิมเบอร์ก"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "นอร์ด บราเบนต์"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "นอร์ด ฮอลแลนด์"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "โอเวอรีเซล"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "อูเทรซ์ค"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "ซีแลนด์"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "ซูด ฮอลแลนด์"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "ใส่หมายเลขประกันสังคมนอร์เวย์"
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "ข่องนี้ต้องการตัวเลข 8 ตัว"
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "ช่องนี้ต้องการตัวเลข 11 ตัว"
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "บัตรประจำตัวประชาประกอบด้วยตัวเลข 11 ตัว"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "ผลรวมตรวจสอบของหมายเลขประจำตัวประชาชนผิดพลาด"
-
-#: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "ใส่หมายเลขประจำตัวผู้เสียภาษี (NIP) ในรูปของ XXX-XXX-XX-XX หรือ XX-XX-XXX-XXX "
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "ผลรวมตรวจสอบสำหรับหมายเลขผู้เสียภาษี (NIP) ผิดพลาด."
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr "National Business Register Number (REGON) ประกอบด้วยตัวเลข 7 หรือ 9 หลัก."
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "ผลรวมตรวจสอบ National Business Register Number (REGON) ผิดพลาด."
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "ใส่รหัสไปรษณีย์ในรูปของ XX-XXX"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "ซิลเลสเซียใต้"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "คูยาเวีย-โพเมราเนีย"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "ลูบลิน"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "ลูเบิส์ช"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "ลอดซ์"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "เลสเซอร์โปแลนด์"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "มาโซเวีย"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "โอโปล์"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "ซับคาเพเทีย"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "พอดลาซีย์"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "โพเมราเนีย"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "ซิลเลสเซีย"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "สเวียตโตเชียตสกี"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "วอร์เมีย มาซูเรีย"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "เกรทเธอร์โปแลนด์"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "โพเมราเนียตะวันตก"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "กรุณาใส่ CIF"
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "กรุณาใส่ CNP"
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "ใส่หมายเลข IBAN ในรูปแบบ ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "หมายเลขโทรศัพท์ต้องอยู่ในรูปแบบ XXXX-XXXXXX"
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "กรุณาใส่รหัสไปรษณีย์ในรูปของ XXXXXX"
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "กรุณาใส่รหัสไปรษณีย์ในรูปของ XXXXX หรือ XXX XX "
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "แคว้น บันสคา บิสทิคา"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "แคว้น บันสคา สเตรียนิคา"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "บาเดโยฟ"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "บานอฟเซ นาด เบบราวู"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "เบรซโน"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "บราทิสลาวา หนึ่ง"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "บราทิสลาวา สอง"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "บราทิสลาวา สาม"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "บราทิสลาวา สี่"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "บราทิสลาวา ห้า"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "ไบต์กา"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "คัดคา"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "เดทวา"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "ดอลนี่ คูบิน"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "ดูนูซกา สเตรดา"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "กาลันตา"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "เกลนิคา"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "ลอเวคช์"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "ฮูเมนเน"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "อิลลาวา"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "เคซมารอก"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "โคมาร์โน"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "แคว้น โคซิเซ หนึ่ง"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "แคว้น โคซิเซ สอง"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "แคว้น โคซิเซ สาม"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "แคว้น โคซิเซ สี่"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "แคว้น โคซิเซ โอโคไล"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "ครูพินา"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "เคียสเซียก โนฟ เมสโต"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "เลวิซ"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "เลโวคา"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "ลิบโตสกี มิคูลาส"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "ลูเซินเนค"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "มาเลคสกี"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "มาร์ติน"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "เม็ดซิลลาบอร์ซ"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "มิคัลโลฟเซอ"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "มียาวา"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "เนเมสโตโว"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "นิทรา"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "โนเฟ เมสโต นาด วาห์อม"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "โนเฟ ซามกี"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "ปาร์ติซานเก"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "เปซินอก"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "เปียสตานี"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "พอลต้าร์"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "ป็อบปราด"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "โปวาสคา บิสทิคา"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "แคว้น พรีซอฟ"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "เปรียวิซา"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "ปูชอพ"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "เรวูก้า"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "ริมาฟสกา โซโบตา"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "รอซนาวา"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "บูซอมเบรอก"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "ซาบินอฟ"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "เซเนค"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "เซนิก้า"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "สคาลิก้า"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "สนินา"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "โซบรานเซ"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "สปิสสกา โนวา เวส"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "สตรารา ลูโบฟนา"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "สตรอปคอฟ"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "สวิดนิก"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "ซาลา"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "โทพอลคานี่"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "เทรบิซอฟ"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "เทรนซิน"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "แคว้น ทนาวา"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "เทอเซียนสเค เตปลิเซ"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "ทวาโดซิน"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "เวลเค เคอติส"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "วรานอฟ นาด ท็อปพลู"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "สตาเต โทราฟเซ"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "ซโวเลน"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "ซาร์โนวีก้า"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "ไซอาร์ นาด โฮนอม"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "ซิลินา"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "แคว้น บันสคา บิสทิคา"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "แคว้น บราทิสลาวา"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "แคว้น โคซิเซ"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "แคว้น นิทรา"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "แคว้น พรีซอฟ"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "แคว้น เทรนซิน"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "แคว้น ทนาวา"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "แคว้น ซิลินา"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "ใส่รหัสไปรษณีย์"
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "เบดฟอร์ดเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "บัคกิ้งแฮมเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "ชีเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "คอนวอลล์ และไฮเซลส์แห่งซิลลี"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "คัมเบรีย"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "เดอร์บีเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "เดวอน"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "ดอร์เซท"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "เดอร์แรม"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "ซัสเซ็กซ์ ตะวันออก"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "เอสเซ็กซ์"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "กลอสเตอร์เชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "เกรตเตอร์ ลอนดอน"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "เกรตเตอร์ แมนเชสเตอร์"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "แฮมเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "เฮิร์ทฟอร์ดเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "เคนท์"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "แลงคาเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "เลสเตอร์เชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "ลินคอล์นเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "เมอร์ซี่ไซด์"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "นอร์ฟอล์ก"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "ยอร์กเชียร์เหนือ"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "นอร์ทแฮมตันเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "นอร์ทฮัมเบอร์แลนด์"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "นอตติ้งแฮมเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "ออกซ์ฟอร์ดเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "ชรอพเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "ซอมเมอร์เซท"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "ยอร์กเชียร์ ใต้"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "สตาฟฟอร์ดเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "ซัฟฟอล์ก"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "เซอร์รี่"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "ไทน์ และ เวียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "วอร์วิกเชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "มิดแลนด์ ตะวันตก"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "ซัสเซ็กซ์ ตะวันตก"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "ยอร์กเชียร์ ตะวันตก"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "วิลท์เชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "วอร์เซสเตอร์เชียร์"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "แอนทริม"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "อามาห์"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "ดาวน์"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "เฟอร์มานาห์"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "ลอนดอนเดอร์รี่"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "ไทโรน"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "คลูวิด"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "ดิฟฟิด"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "เกวนท์"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "กวินนืดด์"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "กลามอร์แกนกลาง"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "โพวิส"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "กลามอร์แกน ใต้"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "กลามอร์แกน ตะวันตก"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "บอร์เดอส์"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "สกอตแลนด์กลาง"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "ดัมฟรายส์และแกลโลเวย์"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "ไฟฟ์"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "แกรมเพียน"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "ไฮแลนด์"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "ลอเธียน"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "เกาะออร์กนี่"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "เกาะเชตแลนด์"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "สเตรทไคลด์"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "เทย์ไซด์"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "ไอเซลส์ตะวันออก"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "อังกฤษ"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "ไอร์แลนด์เหนือ"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "สกอตต์แลนด์"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "เวลส์"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "ใส่รหัสไปรษณีย์ในรูปของ XXXXX หรือ XXXXX-XXXX"
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "ใส่หมายเลขประกันสังคมอเมริกา"
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "ใส่หมายเลขประจำตัวประชาชนแอฟริกาใต้"
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "ใส่รหัสไปรษณีย์แอฟริกาใต้"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "อิสเทิร์นแคป"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "ฟรีเสตต์"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "กัวเตง"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "ควาซูลา-เนทาล"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "ลิมโพโพ"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "มูมาลากา"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "นอร์ทเทิร์นแคป"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "นอร์ทเวสต์"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "เวสต์เทิร์นแคป"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "เปลี่ยนทิศทางจาก"
-
-#: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "พาธไม่รวมโดเมน ตัวอย่าง : '/events/search/'"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "เปลี่ยนทิศทางไปที่"
-
-#: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "มันอาจจะเป็นพาธหรือ URL แบบเต็มที่ขึ้นต้นด้วย 'http://'."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "เปลี่ยนทิศทาง"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "เปลี่ยนทิศทาง"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "เซสชันคีย์"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "ข้อมูลเซสชัน"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "วันหมดอายุ"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "เซสชัน"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "เซสชัน"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "ชื่อโดเมน"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "ชื่อที่แสดง"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "ไซต์"
-
-#: db/models/fields/__init__.py:348
-#: db/models/fields/__init__.py:683
-msgid "This value must be an integer."
-msgstr "ค่านี้ต้องเป็นจำนวนเต็ม"
-
-#: db/models/fields/__init__.py:379
-msgid "This value must be either True or False."
-msgstr "ค่านี้ต้องเป็นถูกหรือผิด"
-
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "ฟิลด์นี้ไม่สารถปล่อยว่างได้"
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "ใส่ตัวเลขที่คั่นด้วยจุลภาคเท่านั้น"
-
-#: db/models/fields/__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "ใส่วันที่ในรูปแบบ YYYY-MM-DD"
-
-#: db/models/fields/__init__.py:468
-#, python-format
-msgid "Invalid date: %s"
-msgstr "วันที่ไม่ถูกต้อง: %s"
-
-#: db/models/fields/__init__.py:532
-#: db/models/fields/__init__.py:550
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "ใส่วันเวลาที่ถูกต้องในรูปแบบ YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-
-#: db/models/fields/__init__.py:586
-msgid "This value must be a decimal number."
-msgstr "ค่านี้ต้องเป็นเลขฐานสิบหรือเลขทศนิยม"
-
-#: db/models/fields/__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr "ค่านี้ต้องเป็นอย่างใดอย่างหนึ่ง None, True หรือ False"
-
-#: db/models/fields/__init__.py:817
-#: db/models/fields/__init__.py:831
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "ใส่เวลาในรูปแบบ HH:MM[:ss[.uuuuuu]]"
-
-#: db/models/fields/related.py:761
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "กดปุ่ม \"Control\", หรือ \"Command\" บน Mac ค้างไว้, เพื่อเลือกหลายๆตัวเลือก"
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "โปรดใส่ %(self)s ไอดี. ค่า %(value)r ไม่ถูกต้อง"
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "ฟิลด์นี้จำเป็น"
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "กรุณาใส่ค่าที่ถูกต้อง"
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "ค่านี้มีได้มากที่สุด %(max)d ตัวอักษร (ค่านี้คือ %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "ค่านี้มีได้น้อยที่สุด %(min)d ตัวอักษร (ค่านี้คือ %(length)d)."
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "กรอกหมายเลข"
-
-#: forms/fields.py:167
-#: forms/fields.py:196
-#: forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "ค่านี้ต้องน้อยกว่าหรือเท่ากับ %s."
-
-#: forms/fields.py:168
-#: forms/fields.py:197
-#: forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "ค่านี้ต้องมากกว่าหรือเท่ากับ %s."
-
-#: forms/fields.py:195
-#: forms/fields.py:224
-msgid "Enter a number."
-msgstr "กรอกหมายเลข"
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "แน่ใจว่ารวมแล้วไม่เกิน %s หลัก."
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "แน่ใจว่ารวมแล้วเป็นทศนิยมไม่เกิน %s หลัก."
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "แน่ใจว่ารวมแล้วไม่เกิน %s หลัก ก่อนจุดทศนิยม."
-
-#: forms/fields.py:287
-#: forms/fields.py:848
-msgid "Enter a valid date."
-msgstr "กรุณาใส่วัน"
-
-#: forms/fields.py:321
-#: forms/fields.py:849
-msgid "Enter a valid time."
-msgstr "กรุณาใส่เวลา"
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "กรุณาใส่วันเวลา"
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "ไม่มีไฟล์ใดถูกส่ง. ตรวจสอบ encoding type ในฟอร์ม."
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "ไม่มีไฟล์ใดถูกส่ง"
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "ไฟล์ที่ส่งว่างเปล่า"
-
-#: forms/fields.py:477
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "อัพโหลดรูปที่ถูกต้อง. ไฟล์ที่อัพโหลดไปไม่ใช่รูป หรือรูปเสียหาย."
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "ใส่ URL ที่ถูกต้อง"
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "URL อาจจะเป็นลิ้งค์ที่เสียหาย."
-
-#: forms/fields.py:618
-#: forms/fields.py:696
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "เลือกตัวเลือกที่ถูกต้อง. %(value)s ไม่ใช่ตัวเลือกที่ใช้ได้."
-
-#: forms/fields.py:697
-#: forms/fields.py:758
-#: forms/models.py:654
-msgid "Enter a list of values."
-msgstr "ใส่รายการ"
-
-#: forms/fields.py:877
-msgid "Enter a valid IPv4 address."
-msgstr "กรุณาใส่หมายเลขไอพีที่ถูกต้อง"
-
-#: forms/fields.py:887
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "ใส่ 'slug' ประกอปด้วย ตัวหนังสือ ตัวเลข เครื่องหมายขีดล่าง หรือ เครื่องหมายขีด"
-
-#: forms/formsets.py:242
-#: forms/formsets.py:244
-msgid "Order"
-msgstr "เรียงลำดับ"
-
-#: forms/models.py:268
-#: forms/models.py:277
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s และ %(field_label)s มีอยู่แล้ว"
-
-#: forms/models.py:584
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "เลือกตัวเลือกที่ถูกต้อง. ตัวเลือกนั้นไม่สามารถเลือกได้."
-
-#: forms/models.py:655
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "เลือกตัวเลือกที่ถูกต้อง. %s ไม่สามารถเลือกได้"
-
-#: template/defaultfilters.py:706
-msgid "yes,no,maybe"
-msgstr "ใช่,ไม่ใช่,อาจจะ"
-
-#: template/defaultfilters.py:737
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d ไบต์"
-
-#: template/defaultfilters.py:739
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f กิโลไบต์"
-
-#: template/defaultfilters.py:741
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f เมกะไบต์"
-
-#: template/defaultfilters.py:742
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f กิกะไบต์"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "เที่ยงคืน"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "เที่ยงวัน"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "จันทร์"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "อังคาร"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "พุธ"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "พฤหัสบดี"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "ศุกร์"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "เสาร์"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "อาทิตย์"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "จ."
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "อ."
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "พ."
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "พฤ."
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "ศ."
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "ส."
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "อ."
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "มกราคม"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "กุมภาพันธ์"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "March"
-msgstr "มีนาคม"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "April"
-msgstr "เมษายน"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "May"
-msgstr "พฤษภาคม"
-
-#: utils/dates.py:18
-#: utils/dates.py:31
-msgid "June"
-msgstr "มิถุนายน"
-
-#: utils/dates.py:19
-#: utils/dates.py:31
-msgid "July"
-msgstr "กรกฎาคม"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "สิงหาคม"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "กันยายน"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "ตุลาคม"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "พฤศจิกายน"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "ธันวาคม"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "ม.ค."
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "ก.พ."
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "มี.ค."
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "เม.ย."
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "พ.ค."
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "มิ.ย."
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "ก.ค."
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ส.ค."
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "ก.ย."
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "ต.ค."
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "พ.ย."
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "ธ.ค."
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "ม.ค."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "ก.พ."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "ส.ค."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "ก.ย."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "ต.ค."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "พ.ย."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "ธ.ค."
-
-#: utils/text.py:128
-msgid "or"
-msgstr "หรือ"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "ปี"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "เดือน"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "สัปดาห์"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "วัน"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "ชั่วโมง"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "นาที"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "นาที"
-
-#: utils/timesince.py:48
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "j N Y"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "G:i"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s ได้ถูกสร้างเรียบร้อยแล้ว"
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s ได้ถูกปรับปรุงเรียบร้อยแล้ว"
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s ได้ถูกลบเรียบร้อยแล้ว"
-
diff --git a/parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index f999fd0..0000000
--- a/parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 461cdf2..0000000
--- a/parts/django/django/conf/locale/th/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,117 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django-1.1-rc-1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-02 22:36-0700\n"
-"PO-Revision-Date: 2009-07-27 21:47+0700\n"
-"Last-Translator: Kowit Charoenratchatabhan <kowito@felspar.com>\n"
-"Language-Team: Kowit Charoenratchatabhan,Kadsarin Sanjek, Felspar <kowito@felspar.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Thai\n"
-"X-Poedit-Country: THAILAND\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr "%sที่มีอยู่"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "เลือกทั้งหมด"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "เพิ่ม"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "ลบออก"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "%sที่ถูกเลือก"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "เลือกและคลิก"
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "ลบทั้งหมด"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid "January February March April May June July August September October November December"
-msgstr "มกราคม กุมภาพันธ์ มีนาคม เมษายน พฤษภาคม มิถุนายน กรกฎาคม สิงหาคม กันยายน ตุลาคม พฤศจิกายน ธันวาคม"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "อา. จ. อ. พ. พฤ. ศ. ส."
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "อาทิตย์ จันทร์ อังคาร พุธ พฤหัสบดี ศุกร์ เสาร์"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "แสดง"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "ซ่อน"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr "ขณะนี้"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr "นาฬิกา"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr "เลือกเวลา"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr "เที่ยงคืน"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr "หกโมงเช้า"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr "เที่ยงวัน"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr "ยกเลิก"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr "วันนี้"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr "ปฏิทิน"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr "เมื่อวาน"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr "พรุ่งนี้"
-
diff --git a/parts/django/django/conf/locale/th/__init__.py b/parts/django/django/conf/locale/th/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/th/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/th/formats.py b/parts/django/django/conf/locale/th/formats.py
deleted file mode 100644
index 7091dc6..0000000
--- a/parts/django/django/conf/locale/th/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'G:i:s'
-DATETIME_FORMAT = 'j F Y, G:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-SHORT_DATETIME_FORMAT = 'j M Y, G:i:s'
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/tr/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/tr/LC_MESSAGES/django.mo
deleted file mode 100644
index a7926a1..0000000
--- a/parts/django/django/conf/locale/tr/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/tr/LC_MESSAGES/django.po b/parts/django/django/conf/locale/tr/LC_MESSAGES/django.po
deleted file mode 100644
index bf4f766..0000000
--- a/parts/django/django/conf/locale/tr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5113 +0,0 @@
-# translation of django.po to Turkish
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-02 01:05+0300\n"
-"PO-Revision-Date: 2010-05-02 01:06+0300\n"
-"Last-Translator: Metin Amiroff <amiroff@gmail.com>\n"
-"Language-Team: Turkish <bahadir@pardus.org.tr>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Arapça"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Bulgarca"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr "Bengali Dili"
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr "Boşnakça"
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr "Katalanca"
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Çekçe"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Galce"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Danca"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Almanca"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Yunanca"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "İngilizce"
-
-#: conf/global_settings.py:55
-msgid "British English"
-msgstr "İngiltere İngilizce"
-
-#: conf/global_settings.py:56
-msgid "Spanish"
-msgstr "İspanyolca"
-
-#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
-msgstr "Arjantin İspanyolcası"
-
-#: conf/global_settings.py:58
-msgid "Estonian"
-msgstr "Estonca"
-
-#: conf/global_settings.py:59
-msgid "Basque"
-msgstr "Baskça"
-
-#: conf/global_settings.py:60
-msgid "Persian"
-msgstr "Farsça"
-
-#: conf/global_settings.py:61
-msgid "Finnish"
-msgstr "Fince"
-
-#: conf/global_settings.py:62
-msgid "French"
-msgstr "Fransızca"
-
-#: conf/global_settings.py:63
-msgid "Frisian"
-msgstr "Frisce"
-
-#: conf/global_settings.py:64
-msgid "Irish"
-msgstr "İrlandaca"
-
-#: conf/global_settings.py:65
-msgid "Galician"
-msgstr "Galler Dili"
-
-#: conf/global_settings.py:66
-msgid "Hebrew"
-msgstr "İbranice"
-
-#: conf/global_settings.py:67
-msgid "Hindi"
-msgstr "Hinduca"
-
-#: conf/global_settings.py:68
-msgid "Croatian"
-msgstr "Hırvatça"
-
-#: conf/global_settings.py:69
-msgid "Hungarian"
-msgstr "Macarca"
-
-#: conf/global_settings.py:70
-msgid "Icelandic"
-msgstr "İzlanda dili"
-
-#: conf/global_settings.py:71
-msgid "Italian"
-msgstr "İtalyanca"
-
-#: conf/global_settings.py:72
-msgid "Japanese"
-msgstr "Japonca"
-
-#: conf/global_settings.py:73
-msgid "Georgian"
-msgstr "Gürcüce"
-
-#: conf/global_settings.py:74
-msgid "Khmer"
-msgstr "Kamboçyaca"
-
-#: conf/global_settings.py:75
-msgid "Kannada"
-msgstr "Kannada Dili"
-
-#: conf/global_settings.py:76
-msgid "Korean"
-msgstr "Korece"
-
-#: conf/global_settings.py:77
-msgid "Lithuanian"
-msgstr "Litovca"
-
-#: conf/global_settings.py:78
-msgid "Latvian"
-msgstr "Leton Dili"
-
-#: conf/global_settings.py:79
-msgid "Macedonian"
-msgstr "Makedonca"
-
-#: conf/global_settings.py:80
-msgid "Dutch"
-msgstr "Flamanca"
-
-#: conf/global_settings.py:81
-msgid "Norwegian"
-msgstr "Norveç Dili"
-
-#: conf/global_settings.py:82
-msgid "Norwegian Bokmal"
-msgstr "Norveçce (Bokmal)"
-
-#: conf/global_settings.py:83
-msgid "Norwegian Nynorsk"
-msgstr "Norveçce (Nynorsk)"
-
-#: conf/global_settings.py:84
-msgid "Polish"
-msgstr "Lehçe"
-
-#: conf/global_settings.py:85
-msgid "Portuguese"
-msgstr "Portekizce"
-
-#: conf/global_settings.py:86
-msgid "Brazilian Portuguese"
-msgstr "Brezilya Portekizcesi"
-
-#: conf/global_settings.py:87
-msgid "Romanian"
-msgstr "Romence"
-
-#: conf/global_settings.py:88
-msgid "Russian"
-msgstr "Rusça"
-
-#: conf/global_settings.py:89
-msgid "Slovak"
-msgstr "Slovakça"
-
-#: conf/global_settings.py:90
-msgid "Slovenian"
-msgstr "Slovence"
-
-#: conf/global_settings.py:91
-msgid "Albanian"
-msgstr "Arnavutça"
-
-#: conf/global_settings.py:92
-msgid "Serbian"
-msgstr "Sırpça"
-
-#: conf/global_settings.py:93
-msgid "Serbian Latin"
-msgstr "Sırp Latini"
-
-#: conf/global_settings.py:94
-msgid "Swedish"
-msgstr "İsveççe"
-
-#: conf/global_settings.py:95
-msgid "Tamil"
-msgstr "Tamilce"
-
-#: conf/global_settings.py:96
-msgid "Telugu"
-msgstr "Telugu Dili"
-
-#: conf/global_settings.py:97
-msgid "Thai"
-msgstr "Tayca"
-
-#: conf/global_settings.py:98
-msgid "Turkish"
-msgstr "Türkçe"
-
-#: conf/global_settings.py:99
-msgid "Ukrainian"
-msgstr "Ukraynaca"
-
-#: conf/global_settings.py:100
-msgid "Vietnamese"
-msgstr "Vyetnamca"
-
-#: conf/global_settings.py:101
-msgid "Simplified Chinese"
-msgstr "Basiteştirilmiş Çince"
-
-#: conf/global_settings.py:102
-msgid "Traditional Chinese"
-msgstr "Geleneksel Çince"
-
-#: contrib/admin/actions.py:52
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d adet %(items)s başarıyla silindi."
-
-#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
-msgid "Are you sure?"
-msgstr "Emin misiniz?"
-
-#: contrib/admin/actions.py:77
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Seçili %(verbose_name_plural)s nesnelerini sil"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>%s alanına göre:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Tümü"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Herhangi bir tarih"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Bugün"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "7 gün içinde"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Bu ay"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Bu yıl"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "Yes"
-msgstr "Evet"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
-msgid "No"
-msgstr "Hayır"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
-msgid "Unknown"
-msgstr "Bilinmiyor"
-
-#: contrib/admin/helpers.py:20
-msgid "Action:"
-msgstr "İşlem:"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "işlem zamanı"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "nesne no"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "nesne kodu"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "işlem adı"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "mesajı değiştir"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "log kaydı"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "log kayıtları"
-
-#: contrib/admin/options.py:142 contrib/admin/options.py:157
-msgid "None"
-msgstr "Hiç biri"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Changed %s."
-msgstr "%s değiştirildi."
-
-#: contrib/admin/options.py:563 contrib/admin/options.py:573
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
-#: forms/models.py:573
-msgid "and"
-msgstr "ve"
-
-#: contrib/admin/options.py:568
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" eklenmiştir."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s %(name)s \"%(object)s\" ile değiştirildi."
-
-#: contrib/admin/options.py:577
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" silinmiştir."
-
-#: contrib/admin/options.py:581
-msgid "No fields changed."
-msgstr "Hiçbir alan değiştirilmedi."
-
-#: contrib/admin/options.py:647
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "\"%(obj)s\" isimli %(name)s eklendi."
-
-#: contrib/admin/options.py:651 contrib/admin/options.py:684
-msgid "You may edit it again below."
-msgstr "Tekrar düzenleyebilirsiniz."
-
-#: contrib/admin/options.py:661 contrib/admin/options.py:694
-#, python-format
-msgid "You may add another %s below."
-msgstr "Yeni bir %s ekleyebilirsiniz."
-
-#: contrib/admin/options.py:682
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "\"%(obj)s\" isimli %(name)s değiştirildi."
-
-#: contrib/admin/options.py:690
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"\"%(obj)s\" isimli %(name)s eklendi. Aşağıda tekrar düzenleyebilirsiniz."
-
-#: contrib/admin/options.py:744
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-"İşlemlerin uygulanabilmesi için bir veya daha fazla nesne seçilmelidir. "
-"Herhangi bir değişiklik gerçekleştirilmedi."
-
-#: contrib/admin/options.py:762
-msgid "No action selected."
-msgstr "İşlem seçimi yapılmamış. Lütfen bir işlem seçiniz."
-
-#: contrib/admin/options.py:842
-#, python-format
-msgid "Add %s"
-msgstr "%s ekle"
-
-#: contrib/admin/options.py:868 contrib/admin/options.py:1080
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(key)r birincil anahtarına sahip %(name)s nesnesi mevcut değil."
-
-#: contrib/admin/options.py:933
-#, python-format
-msgid "Change %s"
-msgstr "%s değiştir"
-
-#: contrib/admin/options.py:978
-msgid "Database error"
-msgstr "Veritabanı hatası"
-
-#: contrib/admin/options.py:1014
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] "%(count)s adet %(name)s başarıyla değiştirildi."
-
-#: contrib/admin/options.py:1041
-#, python-format
-msgid "%(total_count)s selected"
-msgid_plural "All %(total_count)s selected"
-msgstr[0] "Toplam %(total_count)s nesne seçili"
-
-#: contrib/admin/options.py:1046
-#, python-format
-msgid "0 of %(cnt)s selected"
-msgstr "%(cnt)s nesne arasından seçim yapılmamış"
-
-#: contrib/admin/options.py:1093
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "\"%(obj)s\" isimli %(name)s silindi."
-
-#: contrib/admin/options.py:1130
-#, python-format
-msgid "Change history: %s"
-msgstr "%s için değişiklik geçmişi:"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Lütfen geçerli bir kullanıcı adı ve şifre girin. Tüm alanlar büyük/küçük "
-"harf duyarlıdır."
-
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Oturumunuzun süresi geçti. Lütfen tekrar giriş yapın."
-
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Görünüşe göre tarayıcınız çerezleri kabul etmiyor. Çerez kullanımını aktif "
-"hale getirin ve sayfayı yeniden yükleyin."
-
-#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Kullanıcı isminde '@' karakteri bulunamaz."
-
-#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "E-posta adresiniz kullanıcı adınız değil. '%s' kullanın."
-
-#: contrib/admin/sites.py:393
-msgid "Site administration"
-msgstr "Site yönetimi"
-
-#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Giriş yap"
-
-#: contrib/admin/sites.py:452
-#, python-format
-msgid "%s administration"
-msgstr "%s yönetimi"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Tarih:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Saat:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Geçerli:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Değiştir:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Arama"
-
-#: contrib/admin/widgets.py:244
-msgid "Add Another"
-msgstr "Yenisini Ekle"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Sayfa bulunamadı"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Üzgünüz, aradığınız sayfa bulunamadı."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:55
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:42
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Anasayfa"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Sunucu hatası"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Sunucu hatası (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Sunucu Hatası <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Bir hata oluştu. Hata, e-psota ile site yöneticisine bildirildi ve kısa süre "
-"içinde çözülecktir. Sabrınız için teşekkürler."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr "Seçili işlemi uygula"
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr "Git"
-
-#: contrib/admin/templates/admin/actions.html:11
-msgid "Click here to select the objects across all pages"
-msgstr "Tüm sayfalardaki nesneleri seçmek için buraya tıklayınız"
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr "Tüm %(total_count)s %(module_name)s nesnelerini seç"
-
-#: contrib/admin/templates/admin/actions.html:13
-msgid "Clear selection"
-msgstr "Seçimi kaldır"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "Hoşgeldiniz,"
-
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokümantasyon"
-
-#: contrib/admin/templates/admin/base.html:41
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Şifre değiştir"
-
-#: contrib/admin/templates/admin/base.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Çık"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django site yöneticisi"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django yönetimi"
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Yeni"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Geçmiş"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr "Sitede görüntüle"
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:71
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Lütfen aşağıdaki hataları düzeltin."
-
-#: contrib/admin/templates/admin/change_list.html:63
-#, python-format
-msgid "Add %(name)s"
-msgstr "Yeni %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:82
-msgid "Filter"
-msgstr "Filtrele"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
-msgid "Delete"
-msgstr "Sil"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"'%(escaped_object)s' isimli %(object_name)s nesnesini silmek, bağlantılı "
-"nesnelerin silinmesini gerektiriyor, ancak aşağıdaki nesneleri silme "
-"yetkiniz yok."
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"\"%(escaped_object)s\" isimli %(object_name)s nesnesini silmek "
-"istediğinizden emin misiniz? Aşağıdaki bağlantılı öğeler silinecek:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Evet, eminim"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr "Birden fazla nesneyi sil"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"%(object_name)s isimli nesneyi silmek, bağlantılı nesnelerin silinmesini "
-"gerektiriyor, fakat aşağıdaki nesneleri silme yetkiniz yok:"
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-"%(object_name)s nesnelerini silmek istediğinizden emin misiniz? Aşağıdaki "
-"nesneler ve bağlantılı öğeleri de silinecektir:"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " %(filter_title)s durumuna göre "
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "%(name)s uygulamasındaki modeller."
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Düzenle"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Düzenleme yapmaya yetkiniz yok."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "İşlem Geçmişi"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "İşlemlerim"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "İşlem geçmişi bulunamadı"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "Bilinmeyen içerik"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Veritabanı kurulumu ile ilgili bir problem var. İlgili veritabanı "
-"tablolarının kurulu olduğundan ve veritabanının ilgili kullanıcı tarafından "
-"okunabilir olduğundan emin olun."
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Kullanıcı adı:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Şifre:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Tarih/saat"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Kullanıcı"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "İşlem"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Bu nesnenin işlem geçmişi yok. Muhtemelen yönetici sayfası dışında bir "
-"yerden eklendi."
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Tümünü göster"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Kaydet"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "Ara"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "%(counter)s sonuç"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "toplam %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Yeni olarak kaydet"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Kaydet ve yenisini ekle"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Kaydet ve düzenlemeye devam et"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Önce bir kullanıcı adı ve şifre girin. Daha sonra daha fazla bilgi "
-"girebilirsiniz."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "<strong>%(username)s</strong> için yeni şifre girin."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Şifre"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Şifre (tekrar)"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Onaylamak için, yukarıdaki şifrenin aynısını girin."
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:64
-#: contrib/admin/templates/admin/edit_inline/tabular.html:110
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr "Yeni bir %(verbose_name)s ekle"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:67
-#: contrib/admin/templates/admin/edit_inline/tabular.html:113
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Sil"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Silinsin Mi?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Web sitesinde bugün geçirdiğiniz zaman için teşekkür ederiz."
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Tekrar giriş yap"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Şifre değişimi"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Şifre değişimi başarılı"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Şifreniz değiştirildi."
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Güvenliğiniz için, lütfen eski şifrenizi girin, sonra yeni şifrenizi iki "
-"kere girerek doğru yazdığınızdan emin olun."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Eski şifre"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Yeni şifre"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Şifremi değiştir"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Şifreyi sıfırla"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Şifre sıfırlama tamamlandı"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Şifreniz atanmıştır. Şimdi sisteme giriş yapabilirsiniz."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Şifre sıfırlama onayı"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Yeni şifreyi girin"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Lütfen yeni şifrenizi iki kere girin, böylece doğru yazdığınızdan emin olun."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Yeni şifre:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Şifreyi onayla:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Şifre sıfırlaması başarısız oldu"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Şifre sıfırlama linki geçersiz bulunmuştur, büyük ihtimalle daha önce "
-"kullanılmış olduğu içindir. Lütfen yeni bir şifre sıfırlama talebinde "
-"bulunun."
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Şifre başarıyla sıfırlandı"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Yeni şifrenizi alabilmeniz için gereken talimatları belirtmiş olduğunuz e-"
-"posta adresinize gönderilmiştir, kısa süre içinde size ulaşacaktır."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Bu e-postayı alıyorsunuz, çünkü"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr ""
-"%(site_name)s adresindeki kullanıcı hesabınız için şifre sıfırlama talebinde "
-"bulundunuz."
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Lütfen bu sayfaya gidip yeni şifre seçin:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Unutma ihtimaline karşı, kullanıcı adınız:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Sitemizi kullandığınız için teşekkürler!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s Ekibi"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Şifrenizi mı unuttunuz? E-posta adresinizi aşağıya girin, yenisini almanız "
-"için gereken talimatları e-posta adresinize gönderilsin."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-posta adresi:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Şifremi sıfırla"
-
-#: contrib/admin/templatetags/admin_list.py:239
-msgid "All dates"
-msgstr "Tüm tarihler"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "%s seç"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Değiştirilecek %s nesnesini seçin"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr "site"
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "şablon"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "etiket:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "filtre:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "görünüm:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "%r uygulaması bulunamadı"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "%(app_label)r uygulamasında %(model_name)r modeli bulunamadı"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "İlgili `%(app_label)s.%(data_type)s` nesnesi"
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "model:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "ilgili `%(app_label)s.%(object_name)s` nesneleri"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "tüm %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "%s sayısı"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s nesnesindeki alanlar"
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s geçerli bir adres kalıbı değil"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Kısayollar"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "Dokümantasyon kısayolları"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Kısayolları kullanabilmek için, bağlantıyı tarayıcınızdaki "
-"araç\n"
-"çubuğuna sürükleyin, ya da sağ tıklayıp sık kullanılan adresler listenize "
-"ekleyin. \n"
-"Bazı kısayollar, uygulamayı çalıştıran sunucu ile aynı adreste bulunan "
-"istemciler \n"
-"tarafından kullanılabilir.</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "Bu sayfa için dokümantasyon"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "Sizi, bu sayfayı üreten betiğin dokümantasyonuna yönlendirir."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Nesne numarasını göster"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Tek bir nesneyi temsil eden sayfaların içerik türünü ve numarasını gösterir."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Nesneyi düzenle (aynı pencerede)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Tek bir nesneyi temsil eden sayfaların yönetim sayfasını gösterir."
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Nesneyi düzenle (yeni pencerede)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Yukarıdaki gibi, ancak yönetim sayfasını yeni bir pencerede açar."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Kişisel bilgiler"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr "İzinler"
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Önemli tarihler"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Gruplar"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Şifre başarı ile değiştirildi."
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Şifre değiştir: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Kullanıcı adı"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
-msgstr ""
-"Zorunlu alan. 30 karakter ya da az olmalı. Harf, rakam ve @/./+/-/_ "
-"karakterleri kullanılabilir."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
-msgstr "Bu değer sadece harf, rakam ve @/./+/-/_ karakterlerini içerebilir."
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Şifre onayı"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Bu isimde bir kullanıcı zaten mevcuttur."
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "İki şifre alanı uyuşmuyor."
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Bu hesap aktif değil."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Web tarayıcınızın çerezleri desteklemediği görülüyor. Çerezler giriş için "
-"gerekli."
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-posta adresi"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Bu e-posta hesabıyla ilişkili kullanıcı bulunmuyor. Kayıtlı olduğunuzdan "
-"emin misiniz?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr "%s sitesindeki hesabınızın şifresinin sıfırlanması"
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Yeni şifre tekrarı"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Eski şifreniz hatalı. Lütfen tekrar girin."
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "isim"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr "takma ad"
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr "izin"
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr "izinler"
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "grup"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
-msgid "groups"
-msgstr "gruplar"
-
-#: contrib/auth/models.py:196
-msgid "username"
-msgstr "kullanıcı adı"
-
-#: contrib/auth/models.py:196
-msgid ""
-"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
-msgstr ""
-"Zorunlu alan. 30 karakter ya da az olmalı. Harf, rakam ve @/./+/-/_ "
-"karakterleri kullanılabilir"
-
-#: contrib/auth/models.py:197
-msgid "first name"
-msgstr "isim"
-
-#: contrib/auth/models.py:198
-msgid "last name"
-msgstr "soyisim"
-
-#: contrib/auth/models.py:199
-msgid "e-mail address"
-msgstr "e-posta adresi"
-
-#: contrib/auth/models.py:200
-msgid "password"
-msgstr "şifre"
-
-#: contrib/auth/models.py:200
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"'[algo]$[salt]$[hexdigest]' yazın ya da <a href=\"password/\">şifre\n"
-"değiştir formunu kullanın</a>."
-
-#: contrib/auth/models.py:201
-msgid "staff status"
-msgstr "yönetici"
-
-#: contrib/auth/models.py:201
-msgid "Designates whether the user can log into this admin site."
-msgstr "Kullanıcının yönetim (admin) paneline girip giremeyeceğini belirler."
-
-#: contrib/auth/models.py:202
-msgid "active"
-msgstr "aktif"
-
-#: contrib/auth/models.py:202
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Kullanıcının aktif olup olmadığını belirler. Kullanıcı hesabını silmek "
-"yerine bu işareti kaldırın."
-
-#: contrib/auth/models.py:203
-msgid "superuser status"
-msgstr "süper kullanıcı"
-
-#: contrib/auth/models.py:203
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Kullanıcıya ayrı ayrı izin atamasına gerek kalmadan tüm hakların verilip "
-"verilmeyeceğini belirler."
-
-#: contrib/auth/models.py:204
-msgid "last login"
-msgstr "son ziyaret"
-
-#: contrib/auth/models.py:205
-msgid "date joined"
-msgstr "kayıt tarihi"
-
-#: contrib/auth/models.py:207
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Özel olarak atanmış hakların yanı sıra, kullanıcı, üyesi olduğu grupların "
-"haklarını da alır."
-
-#: contrib/auth/models.py:208
-msgid "user permissions"
-msgstr "kullanıcı izinleri"
-
-#: contrib/auth/models.py:212 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "kullanıcı"
-
-#: contrib/auth/models.py:213
-msgid "users"
-msgstr "kullanıcılar"
-
-#: contrib/auth/models.py:394
-msgid "message"
-msgstr "mesaj"
-
-#: contrib/auth/views.py:79
-msgid "Logged out"
-msgstr "Çıkış yapıldı"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "Geçerli bir e-posta adresi girin."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "İçerik"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Meta bilgi"
-
-#: contrib/comments/admin.py:40
-msgid "flagged"
-msgid_plural "flagged"
-msgstr[0] "işaretli"
-
-#: contrib/comments/admin.py:41
-msgid "Flag selected comments"
-msgstr "Seçili yorumları işaretle"
-
-#: contrib/comments/admin.py:45
-msgid "approved"
-msgid_plural "approved"
-msgstr[0] "onaylandı"
-
-#: contrib/comments/admin.py:46
-msgid "Approve selected comments"
-msgstr "Seçili yorumları onayla"
-
-#: contrib/comments/admin.py:50
-msgid "removed"
-msgid_plural "removed"
-msgstr[0] "silinmiş"
-
-#: contrib/comments/admin.py:51
-msgid "Remove selected comments"
-msgstr "Seçili yorumları sil"
-
-#: contrib/comments/admin.py:63
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] "%(count)s adet yorum başarıyla %(action)s."
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s sitesine ait yorumlar"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "%(site_name)s sitesindeki son yorumlar"
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "İsim"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "E-posta adresi"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
-msgid "URL"
-msgstr "URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Yorum"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Söylediğinize dikkat edin! %s kelimeleri burada kullanılamaz."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Eğer bu alana herhangi bir şey girerseniz, yorumunuz spam olarak kabul "
-"edilecektir"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "içerik türü"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr "nesne no"
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "kullanıcının adı"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "kullanıcının e-posta adresi"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "kullanıcının URL'si"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "yorum"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "gönderim tarihi/saati"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
-msgid "IP address"
-msgstr "IP adresi"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr "görünürlük"
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Yorumu site üzerinden kaldırmak için bu kutucuğun seçimini kaldırın."
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "silinmiş"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Yorum uygunsuz ise bu işareti kaldırın. \"Yorum silindi\" uyarısı "
-"görüntülenecek."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "yorumlar"
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Bu yorum kayıtlı kullanıcı tarafından yazıldığı için başlığı salt okunurdur."
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Bu yorum kayıtlı kullanıcı tarafından yazıldığı için e-posta adresi salt "
-"okunurdur."
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"%(date)s tarihinde %(user)s göndermiş:\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "işaret"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "tarih"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "yorum işareti"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "yorum işaretleri"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "Yorumu onayla"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "Bu yorum gerçekten umuma açılsın mı?"
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr "Onayla"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "Onayınız için teşekkürler"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Sitemizdeki tartışma kalitesini yükseltmek amacıyla ayırdığınız zaman için "
-"teşekkür ederiz."
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "Yorumu sil"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "Yorum silinsin mi?"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "Sildiğiniz için teşekkürler"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "Bu yorumu işlaretle"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "Yorum işaretlensin mi?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "İşaret"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "İşaretlediğiniz için teşekkürler"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr "Gönderi"
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr "Önizleme"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "Yorumunuz için teşekkürler"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "Yorumunuz için teşekkür ederiz"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr "Yorumunuzun önüzlemesini görün"
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Lütfen aşağıdaki hataları düzeltin"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr "Yorumunuzu gönderin"
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr "veya düzenleme yapmak"
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr "python model sınıf adı"
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "içerik türleri"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Örnek: '/about/contact/'. Başında ve sonunda bölü işareti olduğundan emin "
-"olun."
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Bu değer sadece harf, rakam, altçizgi, bölü ve ters bölüden oluşabilir."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Gelişmiş seçenekler"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "başlık"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "içerik"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "yorumlara izin ver"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "şablon adı"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Örnek: 'flatpages/contact_page.html'. Eğer birşey yazılmazsa, sistem "
-"otomatik olarak 'flatpages/default.html' kullanacak."
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "kayıt gerekli"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Bu seçili ise, sadece kayıtlı kullanıcılar sayfayı görüntüleyebilir."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "düz sayfa"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "düz sayfalar"
-
-#: contrib/formtools/wizard.py:140
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Özür dileriz, form bilgileriniz zaman aşımına uğramış. Lütfen formu bu "
-"sayfada doldurmaya devam edin."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-"Taban GIS alanı -- OpenGIS Spesifikasyonu Geometri türüne eşleşmektedir."
-
-#: contrib/gis/db/models/fields.py:270
-msgid "Point"
-msgstr "Nokta"
-
-#: contrib/gis/db/models/fields.py:274
-msgid "Line string"
-msgstr "Satır dizisi"
-
-#: contrib/gis/db/models/fields.py:278
-msgid "Polygon"
-msgstr "Poligon"
-
-#: contrib/gis/db/models/fields.py:282
-msgid "Multi-point"
-msgstr "Çok noktalı"
-
-#: contrib/gis/db/models/fields.py:286
-msgid "Multi-line string"
-msgstr "Çok satırlı metin"
-
-#: contrib/gis/db/models/fields.py:290
-msgid "Multi polygon"
-msgstr "Çoklu poligon"
-
-#: contrib/gis/db/models/fields.py:294
-msgid "Geometry collection"
-msgstr "Geometri kolleksiyonu"
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr "Hiçbir geometri değeri verilmemiştir."
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr "Geçersiz geometri değeri."
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr "Geçersiz geometri türü."
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Geometri verisi geometri form alanının SRID değerine dönüştürülürken hata "
-"oluştu."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "."
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f milyon"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f milyar"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f trilyon"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "bir"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "iki"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "üç"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "dört"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "beş"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "altı"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "yedi"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "sekiz"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "dokuz"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "bugün"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "yarın"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "dün"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "NNNN ya da ANNNNAAA formatında bir posta kodu yazın."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Bu alan sadece rakam gerektirmektedir."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Bu alan 7 veya 8 rakam gerektirmektedir."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "XX-XXXXXXXX-X ya da XXXXXXXXXXXX formatında bir CUIT girin."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "Geçersiz CUIT."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "Burgenland"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "Carinthia"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "Alt Avusturya"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "Üst Avusturya"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "Salzburg"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "Styria"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "Tyrol"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "Vorarlberg"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Vyana"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "XXXX formatında posta kodu girin."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Lütfen XXXX XXXXXX formatında geçerli bir Avusturya Sosyal Güvenlik Numarası "
-"giriniz."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "4 rakamlı posta kodu girin."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "XXXXX-XXX formatında posta kodu girin."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefon numaraları XX-XXXX-XXXX formatında olmalıdır."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Lütfen geçerli bir Brezilya bölgesi seçin. Seçilen bölge mevcutlar arasında "
-"yoktur."
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Geçersiz CPF numarası."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Bu en fazla 11 rakam veya 14 karakter gerektirmektedir."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Geçersiz CNPJ numarası."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Bu alan en az 14 rakam gerektirmektedir"
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "XXX XXX formatında posta kodunu girin."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Lütfen XXX-XXX-XXX formatında geçerli bir Kanada Sosyal Güvenlik Numarası "
-"girin."
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "Aargau"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Appenzell Innerrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Appenzell Ausserrhoden"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Basel-Stadt"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "Basel-Land"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "Berne"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "Fribourg"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "Cenevre"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "Glarus"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "Graubuenden"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "Jura"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "Lucerne"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "Neuchatel"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "Nidwalden"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "Obwalden"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Schaffhausen"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "Schwyz"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "Solothurn"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "St. Gallen"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "Thurgau"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "Ticino"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "Uri"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "Valais"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "Vaud"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "Zug"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Zürih"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Lütfen X1234567<0 veya 1234567890 formatında geçerli bir İsviçre kimlik veya "
-"pasaport numarası giriniz."
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr "Geçerli bir Şili RUT numarası girin."
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Geçerli bir Şili RUT numarası girin. Format: XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr "Şili RUT numarası geçersizdir."
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr "Prag"
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr "Merkezi Bohemia Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr "Güney Bohemia Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr "Pilsen Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr "Carlsbad Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr "Usti Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr "Liberec Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr "Hradec Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr "Pardubice Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr "Vysocina Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr "South Moravian Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr "Olomouc Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr "Zlin Bölgesi"
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr "Moravian-Silesian Bölgesi"
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "XXXXX ya da XXX XX formatında bir posta kodu girin."
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"XXXXXX/XXXX veya XXXXXXXXXX formatında geçerli bir doğum numarası girin."
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-"Geçersiz isteğe bağlı Cinsiyet parametresi, geçerli değerler 'f' ve 'm'dir"
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr "Geçerli bir doğum numarası girin."
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr "Geçerli bir IC numarası girin."
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Baden-Wuerttemberg"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "Bavaria"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "Brandenburg"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "Bremen"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "Hessen"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Mecklenburg-Batı Pomerania"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "Alt Saxony"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "North Rhine-Westphalia"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Rhineland-Palatinate"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "Saarland"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Saxony-Anhalt"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Schleswig-Holstein"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "Thuringia"
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "XXXXX formatında posta kodu girin."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Lütfen XXXXXXXXXXX-XXXXXXX-XXXXXXX-X formatında geçerli bir Alman kimlik "
-"numarası giriniz."
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "Arava"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "Albacete"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "Almeria"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "Avila"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "Badajoz"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Illes Balears"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "Barselona"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "Burgos"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "Caceres"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "Cadiz"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "Castello"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "Cordoba"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "A Coruna"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "Cuenca"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "Girona"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "Granada"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Guadalajara"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "Huelva"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "Huesca"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "Jaen"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "Leon"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "La Rioja"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "Lugo"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "Madrid"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "Malaga"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "Murcia"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "Navarre"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "Ourense"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "Asturias"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "Palencia"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Las Palmas"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Pontevedra"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "Salamanca"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Santa Cruz de Tenerife"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "Cantabria"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "Segovia"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "Seville"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "Soria"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "Tarragona"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "Teruel"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "Toledo"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "Valencia"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "Valladolid"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "Zamora"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Zaragoza"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "Ceuta"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "Melilla"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "Andalusia"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "Aragon"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principality of Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Balearic Adaları"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "Basque Country"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "Canary Adaları"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Castile-La Mancha"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Castile ve Leon"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "Catalonia"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "Extremadura"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "Galicia"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Murcia Bölgesi"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "Valencian Community"
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "01XXX - 52XXX aralığında ve formatında geçerli bir posta kodu girin."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"6XXXXXXXX, 8XXXXXXXX ya da 9XXXXXXXX formatlarından birisine uyan geçerli "
-"bir posta kodu girin."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Lütfen geçerli bir NIF, NIE ya da CIF girin."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Lütfen geçerli bir NIF ya da NIE girin."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr "Yanlış NIF sağlama toplamı."
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr "Yanlış NIE sağlama toplamı."
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr "Yanlış CIF sağlama toplamı."
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Lütfen XXXX-XXXX-XX-XXXXXXXXXX formatında geçerli bir banka hesabı numarası "
-"girin."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr "Banka hesabı numarası için geçersiz sağlama toplamı."
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr "Geçerli bir Finlandiya sosyal güvenlik numarası girin."
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr "Telefon numaraları 0X XX XX XX XX formatında olmalıdır."
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr "Geçerli bir posta kodu girin"
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Geçerli bir telefon numarası girin"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr "Geçerli bir araç plaka numarası girin"
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr "Geçerli bir NIK/KTP numarası girin"
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr "Bali"
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr "Banten"
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr "Bengkulu"
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr "Yogyakarta"
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr "Jakarta"
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr "Gorontalo"
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr "Jambi"
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr "Jawa Barat"
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr "Jawa Tengah"
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr "Jawa Timur"
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr "Kalimantan Barat"
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr "Kalimantan Selatan"
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr "Kalimantan Tengah"
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr "Kalimantan Timur"
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr "Kepulauan Bangka-Belitung"
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr "Kepulauan Riau"
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr "Lampung"
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr "Maluku"
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr "Maluku Utara"
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr "Nanggroe Aceh Darussalam"
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr "Nusa Tenggara Barat"
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr "Nusa Tenggara Timur"
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr "Papua"
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr "Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr "Riau"
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr "Sulawesi Barat"
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr "Sulawesi Selatan"
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr "Sulawesi Tengah"
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr "Sulawesi Tenggara"
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr "Sulawesi Utara"
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr "Sumatera Barat"
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr "Sumatera Selatan"
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr "Sumatera Utara"
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr "Magelang"
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr "Surakarta - Solo"
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr "Madiun"
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr "Kediri"
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr "Tapanuli"
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr "Kepulauan Bangka Belitung"
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr "Corps Consulate"
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr "Corps Diplomatic"
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr "Bandung"
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr "Sulawesi Utara Daratan"
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr "NTT - Timor"
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr "Sulawesi Utara Kepulauan"
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr "NTB - Lombok"
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr "Papua dan Papua Barat"
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr "Cirebon"
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr "NTB - Sumbawa"
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr "NTT - Flores"
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr "NTT - Sumba"
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr "Bogor"
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr "Pekalongan"
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr "Semarang"
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr "Pati"
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr "Surabaya"
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr "Madura"
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr "Malang"
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr "Jember"
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr "Banyumas"
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr "Federal Hükümet"
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr "Bojonegoro"
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr "Purwakarta"
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr "Sidoarjo"
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr "Garut"
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr "Antrim"
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr "Armagh"
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr "Carlow"
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr "Cavan"
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr "Clare"
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr "Cork"
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr "Derry"
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr "Donegal"
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr "Down"
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr "Dublin"
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr "Fermanagh"
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr "Galway"
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr "Kerry"
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr "Kildare"
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr "Kilkenny"
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr "Laois"
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr "Leitrim"
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr "Limerick"
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr "Longford"
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr "Louth"
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr "Mayo"
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr "Meath"
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr "Monaghan"
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr "Offaly"
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr "Roscommon"
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr "Sligo"
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr "Tipperary"
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr "Tyrone"
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr "Waterford"
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr "Westmeath"
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr "Wexford"
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr "Wicklow"
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "XXXXXXX formatında bir posta kodu girin."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Geçerli bir İzlanda kimlik numarası girin. Format: XXXXXX-XXXX."
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr "Geçersiz İzlanda kimlik numarası."
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Geçerli bir posta kodu girin."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Geçerli bir Sosyal Güvenlik numarası girin."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Geçerli bir VAT girin."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "XXXXXXX ya da XXX-XXXX formatında bir posta kodu girin."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Hokkaido"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Aomori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Iwate"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Miyagi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "Akita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Yamagata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Fukushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ibaraki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Tochigi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Gunma"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Saitama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Chiba"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Tokyo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Kanagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Yamanashi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Nagano"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Niigata"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Toyama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ishikawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Fukui"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Gifu"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Shizuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Aichi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "Mie"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Shiga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Kyoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Osaka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Hyogo"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "Nara"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Wakayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Tottori"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Shimane"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Okayama"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Hiroshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Yamaguchi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Tokushima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Kagawa"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ehime"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Kochi"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Fukuoka"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "Saga"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Nagasaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Kumamoto"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "Oita"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Miyazaki"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Kagoshima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr "Geçerli bir Kuveyt kimlik numarası girin"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Aguascalientes"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "Baja California"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Baja California Sur"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "Campeche"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "Chihuahua"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "Chiapas"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "Coahuila"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "Colima"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Distrito Federal"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "Durango"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "Guerrero"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "Hidalgo"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "Jalisco"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "Michoacán"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "Morelos"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "Nayarit"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "Nuevo León"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "Oaxaca"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "Puebla"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "Querétaro"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Quintana Roo"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "Sinaloa"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "San Luis Potosí"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "Sonora"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "Tabasco"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Tamaulipas"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Tlaxcala"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "Veracruz"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "Yucatán"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "Zacatecas"
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Geçerli bir posta kodu girin"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Geçerli bir SoFi numarası girin"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Drenthe"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "Friesland"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Gelderland"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "Groningen"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "Limburg"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Noord-Brabant"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Noord-Holland"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Overijssel"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Utrecht"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Zuid-Holland"
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Geçerli bir Norveç Sosyal Güvenlik numarası girin."
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Bu alan 8 rakam gerektirmektedir."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Bu alan 11 rakam gerektirmektedir."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Ulusal Kimlik Numarası 11 rakamdan oluşmaktadır."
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Ulusal Kimlik Numarası için geçersiz sağlama toplamı."
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"XXX-XXX-XX-XX or XX-XX-XXX-XXX formatında geçerli bir vergi numarası (NIP) "
-"girin."
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Vergi Numarası (NIP) için geçersiz sağlama toplamı."
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "Ulusal İş Kayıt Numarası (REGON) 9 veya 17 rakamdan oluşmaktadır."
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Ulusal İş Kayıt Numarası (REGON) için geçersiz sağlama toplamı."
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "XX-XXX formatında bir posta kodu girin."
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Alt Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Lublin"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Lodz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Küçük Polonya"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Masovia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Opole"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Silesia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Büyük Polonya"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Batı Pomerania"
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr "XXXX-XXX formatında posta kodu girin."
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-"Telefon numaraları 9 rakamdan oluşmalı, veyahut + veya 00 ile başlamalıdır."
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Geçerli bir CIF girin."
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Geçerli bir CNP girin."
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "ROXX-XXXX-XXXX-XXXX-XXXX-XXXX formatında geçerli bir IBAN giriniz"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefon numaraları XXXX-XXXXXX formatında olmalıdır."
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "XXXXXX formatında bir posta kodu girin."
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr "Geçerli bir İsveç organizasyon numarası girin."
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr "Geçerli bir İsveç kimlik numarası girin."
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr "Kordinat numaralarına izin verilmemektedir"
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr "XXXXX formatında geçerli bir İsveç posta kodu girin."
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr "Stockholm"
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr "Västerbotten"
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr "Norrbotten"
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr "Uppsala"
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr "Södermanland"
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr "Östergötland"
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr "Jönköping"
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr "Kronoberg"
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr "Kalmar"
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr "Gotland"
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr "Blekinge"
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr "Skåne"
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr "Halland"
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr "Västra Götaland"
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr "Värmland"
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr "Örebro"
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr "Västmanland"
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr "Dalarna"
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr "Gävleborg"
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr "Västernorrland"
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr "Jämtland"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Banska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "Brezno"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "Bytca"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "Detva"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "Galanta"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "Gelnica"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Hlohovec"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "Ilava"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "Krupina"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "Levoca"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Medzilaborce"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "Namestovo"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "Nitra"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "Partizanske"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "Pezinok"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "Poltar"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "Presov"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "Roznava"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "Senec"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "Sobrance"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "Svidnik"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "Sala"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "Trebisov"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "Trencin"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Zlate Moravce"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "Zvolen"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Zarnovica"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "Zilina"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Banska Bystrica bölgesi"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Bratislava region"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "Kosice bölgesi"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "Nitra region"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "Presov bölgesi"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "Trencin bölgesi"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava bölgesi"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "Zilina bölgesi"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Geçerli bir posta kodu girin."
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Buckinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "Cheshire"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall ve Scilly Adaları"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "Cumbria"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "Devon"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "Dorset"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "Durham"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "Doğu Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "c"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "c"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "Greater London"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Greater Manchester"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "Hampshire"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Hertfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "Kent"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "Lancashire"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Leicestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Lincolnshire"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "Norfolk"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "North Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Northamptonshire"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "Northumberland"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Nottinghamshire"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Oxfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "Shropshire"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "Somerset"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Staffordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "Suffolk"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "Surrey"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Warwickshire"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "West Midlands"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "West Sussex"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "West Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Wiltshire"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Worcestershire"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "County Antrim"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "County Armagh"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "County Fermanagh"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "County Londonderry"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "County Tyrone"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Orta Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Kuzey Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Batı Glamorgan"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Merkezi İskoçya"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Dumfries ve Galloway"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "Fife"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "Grampian"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "Highland"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "Lothian"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Orkney Adaları"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Shetland Adaları"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Strathclyde"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "Tayside"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "Batı Adaları"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "England"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Kuzey İrlanda"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "İskoçya"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Wales"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "XXXXX ya da XXXXX-XXXX biçiminde bir posta kodu yazın."
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr "Telefon numaraları XXX-XXX-XXXX formatında olmalıdır."
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"XXX-XX-XXXX formatında geçerli bir A.B.D. Sosyal Güvenlik Numarası giriniz."
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr "ABD devlet veya bölge adı girin."
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr "Şehir Kodu (iki karakter)"
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Telefon numarası"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr "X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX formatında geçerli bir CI girin."
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr "Geçerli bir CI numarası girin."
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr "Geçerli bir Güney Afrika Cumhuriyeti kimlik numarası girin"
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Geçerli bir Güney Afrika Cumhuriyeti posta kodu girin"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Doğu Cape"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "Gauteng"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "KwaZulu-Natal"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "Limpopo"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Mpumalanga"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Northern Cape"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Kuzey Batı"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "Batı Cape"
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr "tembel mesaj"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "eski adres"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Buraya tam dosya yolu, alan adı kullanılmadan yazılmalı. Örnek: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "yeni adres"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Buraya tam dosya yolu (yukarıdaki gibi), ya da 'http://' ile başlayan tam "
-"adres yazılmalı."
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "yönlendirme"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "yönlendirmeler"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "oturum anahtarı"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "oturum bilgisi"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "bitiş tarihi"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "oturum"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "oturumlar"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "alan adı"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "görünen isim"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "siteler"
-
-#: core/validators.py:20 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Geçerli bir değer girin."
-
-#: core/validators.py:87 forms/fields.py:529
-msgid "Enter a valid URL."
-msgstr "Geçerli bir URL girin."
-
-#: core/validators.py:89 forms/fields.py:530
-msgid "This URL appears to be a broken link."
-msgstr "Bu URL geçersiz bir link gibi duruyor."
-
-#: core/validators.py:123 forms/fields.py:873
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Lütfen sadece harf, rakam, altçizgi veya çizgiden oluşan değer girin."
-
-#: core/validators.py:126 forms/fields.py:866
-msgid "Enter a valid IPv4 address."
-msgstr "Geçerli bir IPv4 adresi girin."
-
-#: core/validators.py:129 db/models/fields/__init__.py:572
-msgid "Enter only digits separated by commas."
-msgstr "Sadece virgülle ayrılmış sayılar girin."
-
-#: core/validators.py:135
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-"Bu değerin en az %(limit_value)s karakterden oluştuğundan emin olun (şu anki "
-"karakter sayısı: %(show_value)s)."
-
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-"Bu değerin %(limit_value)s karakterden az veya eşit olduğundan emin olun."
-
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-"Bu değerin %(limit_value)s karakterden çok veya eşit olduğundan emin olun."
-
-#: core/validators.py:164
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Bu değerin en az %(limit_value)d karakterden oluştuğundan emin olun (şu anki "
-"karakter sayısı: %(show_value)d)."
-
-#: core/validators.py:170
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-"Bu değerin en fazla %(limit_value)d karakterden oluştuğundan emin olun (şu "
-"anki karakter sayısı: %(show_value)d)."
-
-#: db/models/base.py:822
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"%(field_name)s değeri %(date_field)s alanı %(lookup)s işlemi için tek "
-"olmalıdır."
-
-#: db/models/base.py:837 db/models/base.py:845
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(field_label)s alanına sahip %(model_name)s zaten mevcuttur."
-
-#: db/models/fields/__init__.py:63
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr "%r değerli geçerli bir seçim değil."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be null."
-msgstr "Bu alan boş bırakılamaz."
-
-#: db/models/fields/__init__.py:65
-msgid "This field cannot be blank."
-msgstr "Bu alan boş bırakılamaz. "
-
-#: db/models/fields/__init__.py:70
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr "Alan türü: %(field_type)s"
-
-#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
-msgid "Integer"
-msgstr "Tamsayı"
-
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
-msgid "This value must be an integer."
-msgstr "Bu değer tamsayı olmalı."
-
-#: db/models/fields/__init__.py:490
-msgid "This value must be either True or False."
-msgstr "Bu değer True ya da False olabilir."
-
-#: db/models/fields/__init__.py:492
-msgid "Boolean (Either True or False)"
-msgstr "Mantıksal (True ya da False)"
-
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Karakter disizi (en fazla %(max_length)s)"
-
-#: db/models/fields/__init__.py:567
-msgid "Comma-separated integers"
-msgstr "Virgülle ayrılmış tamsayılar"
-
-#: db/models/fields/__init__.py:581
-msgid "Date (without time)"
-msgstr "Tarih (saat yok)"
-
-#: db/models/fields/__init__.py:585
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "YYYY-AA-GG formatında tarih girin."
-
-#: db/models/fields/__init__.py:586
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Geçersiz tarih: %s"
-
-#: db/models/fields/__init__.py:667
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"YYYY-MM-DD HH:MM[:ss[.uuuuuu]] formatında geçerli bir tarih ve saat girin."
-
-#: db/models/fields/__init__.py:669
-msgid "Date (with time)"
-msgstr "Tarih (saat var)"
-
-#: db/models/fields/__init__.py:735
-msgid "This value must be a decimal number."
-msgstr "Bu değer ondalık sayı olmalıdır."
-
-#: db/models/fields/__init__.py:737
-msgid "Decimal number"
-msgstr "Ondalık sayı:"
-
-#: db/models/fields/__init__.py:792
-msgid "E-mail address"
-msgstr "E-posta adresi"
-
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Dosya yolu"
-
-#: db/models/fields/__init__.py:822
-msgid "This value must be a float."
-msgstr "Bu değer ondalık sayı olmalı."
-
-#: db/models/fields/__init__.py:824
-msgid "Floating point number"
-msgstr "Floating point rakamı"
-
-#: db/models/fields/__init__.py:883
-msgid "Big (8 byte) integer"
-msgstr "Büyük (8 bayt) integer"
-
-#: db/models/fields/__init__.py:912
-msgid "This value must be either None, True or False."
-msgstr "Bu değer None, True ya da False olabilir."
-
-#: db/models/fields/__init__.py:914
-msgid "Boolean (Either True, False or None)"
-msgstr "Mantıksal (True, False, ya da None)"
-
-#: db/models/fields/__init__.py:1005
-msgid "Text"
-msgstr "Metin"
-
-#: db/models/fields/__init__.py:1021
-msgid "Time"
-msgstr "Saat"
-
-#: db/models/fields/__init__.py:1025
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "HH:MM[:ss[.uuuuuu]] formatında geçerli bir saat girin."
-
-#: db/models/fields/__init__.py:1109
-msgid "XML text"
-msgstr "XML metni"
-
-#: db/models/fields/related.py:799
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr "Birincil anahtarı %(pk)r olan %(model)s mevcut değil."
-
-#: db/models/fields/related.py:801
-msgid "Foreign Key (type determined by related field)"
-msgstr "Yabancı Anahtar (türü ilişkili alana göre belirlenir)"
-
-#: db/models/fields/related.py:918
-msgid "One-to-one relationship"
-msgstr "Bire-bir ilişki"
-
-#: db/models/fields/related.py:980
-msgid "Many-to-many relationship"
-msgstr "Çoğa-çok ilişki"
-
-#: db/models/fields/related.py:1000
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"\"Ctrl\" (Mac'de \"Command\") tuşunu basılı tutularak birden fazla seçim "
-"yapılabilir."
-
-#: db/models/fields/related.py:1061
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Lütfen geçerli %(self)s ID'ler giriniz. %(value)r değeri geçersizdir."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Bu alan zorunludur."
-
-#: forms/fields.py:204
-msgid "Enter a whole number."
-msgstr "Tam sayı girin."
-
-#: forms/fields.py:235 forms/fields.py:256
-msgid "Enter a number."
-msgstr "Bir sayı girin."
-
-#: forms/fields.py:259
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Toplamda en fazla %s sayının olduğundan emin olun."
-
-#: forms/fields.py:260
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "En fazla %s onluk yerin olduğundan emin olun."
-
-#: forms/fields.py:261
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Onluk kısımdan önce en fazla %s sayı olduğundan emin olun."
-
-#: forms/fields.py:323 forms/fields.py:838
-msgid "Enter a valid date."
-msgstr "Geçerli bir tarih girin."
-
-#: forms/fields.py:351 forms/fields.py:839
-msgid "Enter a valid time."
-msgstr "Geçerli bir zaman girin."
-
-#: forms/fields.py:377
-msgid "Enter a valid date/time."
-msgstr "Geçerli bir tarih/zaman girin."
-
-#: forms/fields.py:435
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Dosya gönderilmedi. Formdaki kodlama türünü kontrol edin."
-
-#: forms/fields.py:436
-msgid "No file was submitted."
-msgstr "Hiçbir dosya gönderilmedi."
-
-#: forms/fields.py:437
-msgid "The submitted file is empty."
-msgstr "Gönderilen dosya boş."
-
-#: forms/fields.py:438
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Bu dosya adının en fazla %(max)d karakterden oluştuğundan emin olun (şu anki "
-"karakter sayısı: %(length)d)."
-
-#: forms/fields.py:473
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Geçerli bir resim girin. Gönderdiğiniz dosya resim değil, ya da bozuk bir "
-"dosya."
-
-#: forms/fields.py:596 forms/fields.py:671
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Geçerli bir seçimde bulunun; %(value)s mevcut değerlerden biri değil."
-
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
-msgid "Enter a list of values."
-msgstr "Değer listesi giriniz."
-
-#: forms/formsets.py:298 forms/formsets.py:300
-msgid "Order"
-msgstr "Sıralama"
-
-#: forms/models.py:567
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "Lütfen %(field)s alanları için mükerrer kayıt problemini düzeltin."
-
-#: forms/models.py:571
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-"Lütfen %(field)s alanı için mükerrer verileri düzeltin, bunlar eşsiz "
-"olmalıdır."
-
-#: forms/models.py:577
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Lütfen %(field_name)s alanı için mükerrer verileri düzeltin, bunlar %"
-"(date_field)s alanı %(lookup)s sorgulamaları için eşsiz olmalıdır."
-
-#: forms/models.py:585
-msgid "Please correct the duplicate values below."
-msgstr "Lütfen aşağıdaki mükerrer kayıtları düzeltin."
-
-#: forms/models.py:860
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"İçeride belirtilmiş yabancı anahtar ebeveyin nesnenin birincil anahtarı ile "
-"uyuşmadı."
-
-#: forms/models.py:926
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Geçerli bir seçimde bulunun; seçiminiz mevcut değerlerden birisi değil."
-
-#: forms/models.py:1008
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Geçerli bir seçimde bulunun; %s mevcut değerlerden biri değil."
-
-#: forms/models.py:1010
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" birincil anahtar için geçerli bir değer değil."
-
-#: template/defaultfilters.py:781
-msgid "yes,no,maybe"
-msgstr "evet,hayır,olabilir"
-
-#: template/defaultfilters.py:812
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d bayt"
-
-#: template/defaultfilters.py:814
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:816
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:817
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "ö.s."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "ö.ö."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "ÖS"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "ÖÖ"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "gece yarısı"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "öğlen"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Pazartesi"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Salı"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Çarşamba"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Perşembe"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Cuma"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Cumartesi"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Pazar"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Pzt"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Sal"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Çrş"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Prş"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Cum"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Cmt"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Paz"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Ocak"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Şubat"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Mart"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Nisan"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Mayıs"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Haziran"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Temmuz"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Ağustos"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Eylül"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Ekim"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Kasım"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Aralık"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "oca"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "şub"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "mar"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "nis"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "may"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "haz"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "tem"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "ağu"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "eyl"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "eki"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "kas"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "ara"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Oca."
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Şub."
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Ağu."
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Eyl."
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Eki."
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Kas."
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Ara."
-
-#: utils/text.py:130
-msgid "or"
-msgstr "ya da"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "yıl"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "ay"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "hafta"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "gün"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "saat"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "dakika"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "dakika"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:518
-msgid "DATE_FORMAT"
-msgstr "j F Y"
-
-#: utils/translation/trans_real.py:519
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, H:i"
-
-#: utils/translation/trans_real.py:520
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: utils/translation/trans_real.py:541
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:542
-msgid "MONTH_DAY_FORMAT"
-msgstr "j F"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s başarıyla oluşturuldu."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s başarıyla güncellendi."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s silindi."
diff --git a/parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 7a6fa8c..0000000
--- a/parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 5a7da50..0000000
--- a/parts/django/django/conf/locale/tr/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,123 +0,0 @@
-# This file is distributed under the same license as the Django package.
-# Metin Amiroff <amiroff@gmail.com>, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-02 01:10+0300\n"
-"PO-Revision-Date: 2010-05-02 01:13+0300\n"
-"Last-Translator: Metin Amiroff <amiroff@gmail.com>\n"
-"Language-Team: Bahadır Kandemir <bahadir@pardus.org.tr>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "Toplam %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Hepsini seç"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Ekle"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Kaldır"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "Seçilen %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Seçiminizi yapın ve yandaki düğmenin aynısına tıklayın "
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Hepsini temizle"
-
-#: contrib/admin/media/js/actions.js:17
-#: contrib/admin/media/js/actions.min.js:1
-msgid "%(sel)s of %(cnt)s selected"
-msgid_plural "%(sel)s of %(cnt)s selected"
-msgstr[0] "%(sel)s / %(cnt)s seçili"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Ocak Şubat Mart Nisan Mayıs Haziran Temmuz Ağustos Eylül Ekim Kasım Aralık"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "P P S Ç P C C"
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Göster"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Gizle"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Pazar Pazartesi Salı Çarşamba Perşembe Cuma Cumartesi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Now"
-msgstr "Şimdi"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
-msgid "Clock"
-msgstr "Saat"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Choose a time"
-msgstr "Saat seçin"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Midnight"
-msgstr "Geceyarısı"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "6 a.m."
-msgstr "Sabah 6"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "Noon"
-msgstr "Öğle"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "İptal"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Bugün"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Takvim"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Dün"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Yarın"
diff --git a/parts/django/django/conf/locale/tr/__init__.py b/parts/django/django/conf/locale/tr/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/tr/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/tr/formats.py b/parts/django/django/conf/locale/tr/formats.py
deleted file mode 100644
index 9872980..0000000
--- a/parts/django/django/conf/locale/tr/formats.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = 'd F Y H:i:s'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'd F'
-SHORT_DATE_FORMAT = 'd M Y'
-SHORT_DATETIME_FORMAT = 'd M Y H:i:s'
-FIRST_DAY_OF_WEEK = 1 # Pazartesi
-DATE_INPUT_FORMATS = (
- '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
- '%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
- # '%d %B %Y', '%d %b. %Y', # '25 Ekim 2006', '25 Eki. 2006'
-)
-TIME_INPUT_FORMATS = (
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-)
-DATETIME_INPUT_FORMATS = (
- '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
- '%d/%m/%Y %H:%M', # '25/10/2006 14:30'
- '%d/%m/%Y', # '25/10/2006'
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
-)
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3
diff --git a/parts/django/django/conf/locale/uk/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/uk/LC_MESSAGES/django.mo
deleted file mode 100644
index f57a32b..0000000
--- a/parts/django/django/conf/locale/uk/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/uk/LC_MESSAGES/django.po b/parts/django/django/conf/locale/uk/LC_MESSAGES/django.po
deleted file mode 100644
index 8589a6c..0000000
--- a/parts/django/django/conf/locale/uk/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4774 +0,0 @@
-# Django, ukrainian translation.
-# Copyright (C) 2008
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-19 19:42+0200\n"
-"PO-Revision-Date: 2008-11-23 00:02+0300\n"
-"Last-Translator: Mykola Zamkovoy <nickzam@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: .\conf\global_settings.py:44
-msgid "Arabic"
-msgstr "Арабська"
-
-#: .\conf\global_settings.py:45
-msgid "Bengali"
-msgstr "Бенгальська"
-
-#: .\conf\global_settings.py:46
-msgid "Bulgarian"
-msgstr "Болгарська"
-
-#: .\conf\global_settings.py:47
-msgid "Catalan"
-msgstr "Каталонська"
-
-#: .\conf\global_settings.py:48
-msgid "Czech"
-msgstr "Чеська"
-
-#: .\conf\global_settings.py:49
-msgid "Welsh"
-msgstr "Валлійська"
-
-#: .\conf\global_settings.py:50
-msgid "Danish"
-msgstr "Датська"
-
-#: .\conf\global_settings.py:51
-msgid "German"
-msgstr "Німецька"
-
-#: .\conf\global_settings.py:52
-msgid "Greek"
-msgstr "Грецька"
-
-#: .\conf\global_settings.py:53
-msgid "English"
-msgstr "Англійська"
-
-#: .\conf\global_settings.py:54
-msgid "Spanish"
-msgstr "Іспанська"
-
-#: .\conf\global_settings.py:55
-
-msgid "Estonian"
-msgstr "Румунська"
-
-#: .\conf\global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Аргентинська іспанська"
-
-#: .\conf\global_settings.py:57
-msgid "Basque"
-msgstr "Баскський"
-
-#: .\conf\global_settings.py:58
-msgid "Persian"
-msgstr "Перська"
-
-#: .\conf\global_settings.py:59
-msgid "Finnish"
-msgstr "Фінська"
-
-#: .\conf\global_settings.py:60
-msgid "French"
-msgstr "Французька"
-
-#: .\conf\global_settings.py:61
-msgid "Irish"
-msgstr "Ірландська"
-
-#: .\conf\global_settings.py:62
-msgid "Galician"
-msgstr "Галіційська"
-
-#: .\conf\global_settings.py:63
-msgid "Hungarian"
-msgstr "Угорська"
-
-#: .\conf\global_settings.py:64
-msgid "Hebrew"
-msgstr "Іврит"
-
-#: .\conf\global_settings.py:65
-msgid "Hindi"
-msgstr "Хінді"
-
-#: .\conf\global_settings.py:66
-msgid "Croatian"
-msgstr "Хорватська"
-
-#: .\conf\global_settings.py:67
-msgid "Icelandic"
-msgstr "Ісландська"
-
-#: .\conf\global_settings.py:68
-msgid "Italian"
-msgstr "Італійська"
-
-#: .\conf\global_settings.py:69
-msgid "Japanese"
-msgstr "Японська"
-
-#: .\conf\global_settings.py:70
-msgid "Georgian"
-msgstr "Грузинська"
-
-#: .\conf\global_settings.py:71
-msgid "Korean"
-msgstr "Корейська"
-
-#: .\conf\global_settings.py:72
-msgid "Khmer"
-msgstr "Кхмерська"
-
-#: .\conf\global_settings.py:73
-msgid "Kannada"
-msgstr "Канадська"
-
-#: .\conf\global_settings.py:74
-msgid "Latvian"
-msgstr "Латвійська"
-
-#: .\conf\global_settings.py:75
-msgid "Lithuanian"
-msgstr "Литовська"
-
-#: .\conf\global_settings.py:76
-msgid "Macedonian"
-msgstr "Македонська"
-
-#: .\conf\global_settings.py:77
-msgid "Dutch"
-msgstr "Голландська"
-
-#: .\conf\global_settings.py:78
-msgid "Norwegian"
-msgstr "Норвезька"
-
-#: .\conf\global_settings.py:79
-msgid "Polish"
-msgstr "Польська"
-
-#: .\conf\global_settings.py:80
-msgid "Portuguese"
-msgstr "Португальська"
-
-#: .\conf\global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "Бразильска"
-
-#: .\conf\global_settings.py:82
-msgid "Romanian"
-msgstr "Румунська"
-
-#: .\conf\global_settings.py:83
-msgid "Russian"
-msgstr "Російська"
-
-#: .\conf\global_settings.py:84
-msgid "Slovak"
-msgstr "Словацька"
-
-#: .\conf\global_settings.py:85
-msgid "Slovenian"
-msgstr "Словенська"
-
-#: .\conf\global_settings.py:86
-msgid "Serbian"
-msgstr "Сербська"
-
-#: .\conf\global_settings.py:87
-msgid "Swedish"
-msgstr "Шведська"
-
-#: .\conf\global_settings.py:88
-msgid "Tamil"
-msgstr "Тамільська"
-
-#: .\conf\global_settings.py:89
-msgid "Telugu"
-msgstr "Телугу"
-
-#: .\conf\global_settings.py:90
-msgid "Thai"
-msgstr "Тайська"
-
-#: .\conf\global_settings.py:91
-msgid "Turkish"
-msgstr "Турецька"
-
-#: .\conf\global_settings.py:92
-
-msgid "Ukrainian"
-msgstr "Українська"
-
-#: .\conf\global_settings.py:93
-msgid "Simplified Chinese"
-msgstr "Китайська спрощена"
-
-#: .\conf\global_settings.py:94
-msgid "Traditional Chinese"
-msgstr "Китайська традиційна"
-
-#: .\contrib\admin\filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>За %s:</h3>\n"
-"<ul>\n"
-
-#: .\contrib\admin\filterspecs.py:74 .\contrib\admin\filterspecs.py:91
-#: .\contrib\admin\filterspecs.py:146 .\contrib\admin\filterspecs.py:172
-msgid "All"
-msgstr "Всі"
-
-#: .\contrib\admin\filterspecs.py:112
-msgid "Any date"
-msgstr "Будь-яка дата"
-
-#: .\contrib\admin\filterspecs.py:113
-msgid "Today"
-msgstr "Сьогодні"
-
-#: .\contrib\admin\filterspecs.py:116
-msgid "Past 7 days"
-msgstr "Останні 7 днів"
-
-#: .\contrib\admin\filterspecs.py:118
-msgid "This month"
-msgstr "Цього місяця"
-
-#: .\contrib\admin\filterspecs.py:120
-msgid "This year"
-msgstr "Цього року"
-
-#: .\contrib\admin\filterspecs.py:146 .\forms\widgets.py:390
-#: .\newforms\widgets.py:361 .\oldforms\__init__.py:588
-msgid "Yes"
-msgstr "Так"
-
-#: .\contrib\admin\filterspecs.py:146 .\forms\widgets.py:390
-#: .\newforms\widgets.py:361 .\oldforms\__init__.py:588
-msgid "No"
-msgstr "Ні"
-
-#: .\contrib\admin\filterspecs.py:153 .\forms\widgets.py:390
-#: .\newforms\widgets.py:361 .\oldforms\__init__.py:588
-msgid "Unknown"
-msgstr "Невідомо"
-
-#: .\contrib\admin\models.py:19
-msgid "action time"
-msgstr "час дії"
-
-#: .\contrib\admin\models.py:22
-msgid "object id"
-msgstr "id об'єкту"
-
-#: .\contrib\admin\models.py:23
-msgid "object repr"
-msgstr "представлення об'єкту(repr)"
-
-#: .\contrib\admin\models.py:24
-msgid "action flag"
-msgstr "прапор дії"
-
-#: .\contrib\admin\models.py:25
-msgid "change message"
-msgstr "змінити повідомлення"
-
-#: .\contrib\admin\models.py:28
-msgid "log entry"
-msgstr "реєстрування записів"
-
-#: .\contrib\admin\models.py:29
-msgid "log entries"
-msgstr "реєстрування записів"
-
-#: .\contrib\admin\options.py:60 .\contrib\admin\options.py:121
-
-msgid "None"
-msgstr "Ніщо"
-
-#: .\contrib\admin\options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "Змінено %s."
-
-#: .\contrib\admin\options.py:338 .\contrib\admin\options.py:348
-#: .\contrib\comments\templates\comments\preview.html.py:15
-#: .\core\validators.py:279 .\db\models\manipulators.py:305
-#: .\forms\models.py:288
-msgid "and"
-msgstr "та"
-
-#: .\contrib\admin\options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "Додано %(name)s \"%(object)s\"."
-
-#: .\contrib\admin\options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Змінено %(list)s для %(name)s \"%(object)s\"."
-
-#: .\contrib\admin\options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Видалено %(name)s \"%(object)s\"."
-
-#: .\contrib\admin\options.py:356
-msgid "No fields changed."
-msgstr "Поля не змінені."
-
-#: .\contrib\admin\options.py:417 .\contrib\admin\views\auth.py:20
-#: .\contrib\auth\admin.py:51
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" було додано успішно."
-
-#: .\contrib\admin\options.py:421 .\contrib\admin\options.py:454
-#: .\contrib\admin\views\auth.py:25 .\contrib\auth\admin.py:59
-msgid "You may edit it again below."
-msgstr "Ви можете редагувати це знову внизу."
-
-#: .\contrib\admin\options.py:431 .\contrib\admin\options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "Ви можете додати інший %s внизу."
-
-#: .\contrib\admin\options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" був успішно змінений."
-
-#: .\contrib\admin\options.py:460
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" був успішно доданий. Ви модете редагувати його знову "
-"внизу."
-
-#: .\contrib\admin\options.py:528
-#, python-format
-msgid "Add %s"
-msgstr "Додати %s"
-
-#: .\contrib\admin\options.py:559 .\contrib\admin\options.py:673
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "%(name)s об'єкт з первинним ключем %(key)r не існує."
-
-#: .\contrib\admin\options.py:606
-#, python-format
-msgid "Change %s"
-msgstr "Змінити %s"
-
-#: .\contrib\admin\options.py:638
-msgid "Database error"
-msgstr "Помилка бази даних"
-
-#: .\contrib\admin\options.py:688
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" був видалений успішно."
-
-#: .\contrib\admin\options.py:695
-msgid "Are you sure?"
-msgstr "Ви впевнені?"
-
-#: .\contrib\admin\options.py:724
-#, python-format
-msgid "Change history: %s"
-msgstr "Історія змін: %s"
-
-#: .\contrib\admin\sites.py:16 .\contrib\admin\views\decorators.py:14
-#: .\contrib\auth\forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Будь-ласка введіть правильне ім'я та пароль. Зауважте, що обидва поля "
-"розрізняють великі і маленькі літери."
-
-#: .\contrib\admin\sites.py:226 .\contrib\admin\views\decorators.py:40
-
-msgid "Please log in again, because your session has expired."
-msgstr ""
-"Будь ласка, увійдіть знову, ваша сесія закінчилася. Не хвилюйтесь: все, що "
-"ви додавали збережено."
-
-#: .\contrib\admin\sites.py:233 .\contrib\admin\views\decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Здається ваш броузер не сконфігурований приймати cookies. Будь ласка, "
-"увімкніть cookies, перезавантажте цю сторінку і спробуйте знову"
-
-#: .\contrib\admin\sites.py:249 .\contrib\admin\sites.py:255
-#: .\contrib\admin\views\decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Ім'я користувача не може містити символ '@'."
-
-#: .\contrib\admin\sites.py:252 .\contrib\admin\views\decorators.py:62
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Ваша e-mail адреса не є вашим ім'ям користувача. Замість спробуйте '%s'"
-
-#: .\contrib\admin\sites.py:312
-msgid "Site administration"
-msgstr "Адміністрування сайта"
-
-#: .\contrib\admin\sites.py:325
-#: .\contrib\admin\templates\admin\login.html.py:26
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:14
-#: .\contrib\admin\views\decorators.py:20
-msgid "Log in"
-msgstr "Увійти"
-
-#: .\contrib\admin\sites.py:372
-#, python-format
-msgid "%s administration"
-msgstr "Адміністрування %s"
-
-#: .\contrib\admin\util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Одне або більше %(fieldname)s у %(name)s: %(obj)s"
-
-#: .\contrib\admin\util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Одне або більше %(fieldname)s у %(name)s:"
-
-#: .\contrib\admin\widgets.py:70
-#: .\contrib\admin\templates\widget\date_time.html.py:3
-msgid "Date:"
-msgstr "Дата:"
-
-#: .\contrib\admin\widgets.py:70
-#: .\contrib\admin\templates\widget\date_time.html.py:4
-msgid "Time:"
-msgstr "Час:"
-
-#: .\contrib\admin\widgets.py:94
-#: .\contrib\admin\templates\widget\file.html.py:2
-msgid "Currently:"
-msgstr "Зараз:"
-
-#: .\contrib\admin\widgets.py:94
-#: .\contrib\admin\templates\widget\file.html.py:3
-msgid "Change:"
-msgstr "Змінити:"
-
-#: .\contrib\admin\widgets.py:123
-
-msgid "Lookup"
-msgstr "Вийти"
-
-#: .\contrib\admin\widgets.py:230
-msgid "Add Another"
-msgstr "Додати інше"
-
-#: .\contrib\admin\templates\admin\404.html.py:4
-#: .\contrib\admin\templates\admin\404.html.py:8
-msgid "Page not found"
-msgstr "Сторінка не знайдена"
-
-#: .\contrib\admin\templates\admin\404.html.py:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Ми шкодуємо, але сторінка яку ви запросили, не знайдена."
-
-#: .\contrib\admin\templates\admin\500.html.py:4
-#: .\contrib\admin\templates\admin\app_index.html.py:8
-#: .\contrib\admin\templates\admin\base.html.py:33
-#: .\contrib\admin\templates\admin\change_form.html.py:17
-#: .\contrib\admin\templates\admin\change_list.html.py:8
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:6
-#: .\contrib\admin\templates\admin\invalid_setup.html.py:4
-#: .\contrib\admin\templates\admin\object_history.html.py:6
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:10
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
-#: .\contrib\admin\templates\registration\logged_out.html.py:4
-#: .\contrib\admin\templates\registration\password_change_done.html.py:4
-#: .\contrib\admin\templates\registration\password_change_form.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
-msgid "Home"
-msgstr "Домівка"
-
-#: .\contrib\admin\templates\admin\500.html.py:4
-msgid "Server error"
-msgstr "Помилка сервера"
-
-#: .\contrib\admin\templates\admin\500.html.py:6
-msgid "Server error (500)"
-msgstr "Помилка сервера (500)"
-
-#: .\contrib\admin\templates\admin\500.html.py:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Помилка сервера <em>(500)</em>"
-
-#: .\contrib\admin\templates\admin\500.html.py:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Виникла помилка. Про неї було повідомлено адміністраторам сайту e-mail'ом і "
-"вона повинна бути незабаром виправлена. Дякуємо за ваше терпіння."
-
-#: .\contrib\admin\templates\admin\app_index.html.py:10
-#: .\contrib\admin\templates\admin\index.html.py:19
-msgid "%(name)s"
-msgstr "Додати %(name)s"
-
-#: .\contrib\admin\templates\admin\base.html.py:28
-msgid "Welcome,"
-msgstr "Вітаємо,"
-
-#: .\contrib\admin\templates\admin\base.html.py:28
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:3
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
-msgid "Documentation"
-msgstr "Документація"
-
-#: .\contrib\admin\templates\admin\base.html.py:28
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:13
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:46
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:4
-#: .\contrib\admin\templates\admin_doc\missing_docutils.html.py:4
-#: .\contrib\admin\templates\admin_doc\model_index.html.py:5
-#: .\contrib\admin\templates\admin_doc\template_detail.html.py:4
-#: .\contrib\admin\templates\admin_doc\template_filter_index.html.py:5
-#: .\contrib\admin\templates\admin_doc\template_tag_index.html.py:5
-#: .\contrib\admin\templates\admin_doc\view_detail.html.py:4
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:3
-msgid "Change password"
-msgstr "Змінити пароль"
-
-#: .\contrib\admin\templates\admin\base.html.py:28
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:4
-#: .\contrib\admin\templates\admin_doc\missing_docutils.html.py:4
-#: .\contrib\admin\templates\admin_doc\model_index.html.py:5
-#: .\contrib\admin\templates\admin_doc\template_detail.html.py:4
-#: .\contrib\admin\templates\admin_doc\template_filter_index.html.py:5
-#: .\contrib\admin\templates\admin_doc\template_tag_index.html.py:5
-#: .\contrib\admin\templates\admin_doc\view_detail.html.py:4
-#: .\contrib\admin\templates\registration\password_change_done.html.py:3
-#: .\contrib\admin\templates\registration\password_change_form.html.py:3
-msgid "Log out"
-msgstr "Вийти"
-
-#: .\contrib\admin\templates\admin\base_site.html.py:4
-msgid "Django site admin"
-msgstr "Django сайт адміністрування"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:20
-#: .\contrib\admin\templates\admin\index.html.py:29
-msgid "Add"
-msgstr "Додати"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:27
-#: .\contrib\admin\templates\admin\object_history.html.py:10
-msgid "History"
-msgstr "Історія"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:28
-#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:13
-#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:27
-msgid "View on site"
-msgstr "Дивитися на сайті"
-
-#: .\contrib\admin\templates\admin\change_form.html.py:38
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Будь ласка, виправте помилку, що зазначена нижче"
-msgstr[1] "Будь ласка, виправте помилки, що зазначені нижче"
-
-#: .\contrib\admin\templates\admin\change_list.html.py:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "Додати %(name)s"
-
-#: .\contrib\admin\templates\admin\change_list.html.py:26
-#: .\contrib\admin\templates\admin\filters.html.py:4
-msgid "Filter"
-msgstr "Відфільтрувати"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:10
-#: .\contrib\admin\templates\admin\submit_line.html.py:4
-#: .\forms\formsets.py:246
-msgid "Delete"
-msgstr "Видалити"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Видалення %(object_name)s '%(escaped_object)s' призведе до видалення пов'язаних "
-"об'єктів, але ваш реєстраційний запис не має дозволу видаляти наступні типи "
-"об'єктів:"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Ви впевнені що хочете видалити %(object_name)s \"%(escaped_object)s\"? Всі пов'язані "
-"записи, що перелічені, будуть видалені:"
-
-#: .\contrib\admin\templates\admin\delete_confirmation.html.py:28
-msgid "Yes, I'm sure"
-msgstr "Так, я впевнений"
-
-#: .\contrib\admin\templates\admin\filter.html.py:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr "За %(filter_title)s"
-
-#: .\contrib\admin\templates\admin\index.html.py:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Моделі, що є в наявності у прикладній системі %(name)s."
-
-#: .\contrib\admin\templates\admin\index.html.py:35
-msgid "Change"
-msgstr "Змінити"
-
-#: .\contrib\admin\templates\admin\index.html.py:45
-msgid "You don't have permission to edit anything."
-msgstr "У вас немає дозволу редагувати будь-що."
-
-#: .\contrib\admin\templates\admin\index.html.py:53
-msgid "Recent Actions"
-msgstr "Недавні дії"
-
-#: .\contrib\admin\templates\admin\index.html.py:54
-msgid "My Actions"
-msgstr "Мої дії"
-
-#: .\contrib\admin\templates\admin\index.html.py:58
-msgid "None available"
-msgstr "Немає"
-
-#: .\contrib\admin\templates\admin\invalid_setup.html.py:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Щось не так з інсталяцією бази даних. Перевірте, що таблиці бази даних "
-"створено і база даних може бути прочитана відповідним користувачем."
-
-#: .\contrib\admin\templates\admin\login.html.py:19
-msgid "Username:"
-msgstr "Користувач:"
-
-#: .\contrib\admin\templates\admin\login.html.py:22
-msgid "Password:"
-msgstr "Пароль:"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:22
-msgid "Date/time"
-msgstr "Дата/час"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:23
-msgid "User"
-msgstr "Користувач"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:24
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:33
-msgid "Action"
-msgstr "Дія"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:30
-#: .\utils\translation\trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "d.m.Y H:i"
-
-#: .\contrib\admin\templates\admin\object_history.html.py:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Цей об'єкт не має історії змін. Напевно, він був доданий не через цей сайт "
-"адміністрування."
-
-#: .\contrib\admin\templates\admin\pagination.html.py:10
-msgid "Show all"
-msgstr "Показати всі"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:8
-msgid "Go"
-msgstr "Уперед"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 результат"
-msgstr[1] "Результатів: %(counter)s"
-
-#: .\contrib\admin\templates\admin\search_form.html.py:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "%(full_result_count)s всього"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:3
-msgid "Save"
-msgstr "Зберегти"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:5
-msgid "Save as new"
-msgstr "Зберегти як нове"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:6
-msgid "Save and add another"
-msgstr "Зберегти і додати інше"
-
-#: .\contrib\admin\templates\admin\submit_line.html.py:7
-msgid "Save and continue editing"
-msgstr "Зберегти і продовжити редагування"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Спочатку, введіть ім'я користувача і пароль. Потім ви зможете редагувати "
-"більше опцій користувача."
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:13
-#: .\contrib\auth\forms.py:14 .\contrib\auth\forms.py:47
-#: .\contrib\auth\forms.py:59
-msgid "Username"
-msgstr "Користувач:"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:20
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:33
-#: .\contrib\auth\forms.py:17 .\contrib\auth\forms.py:60
-#: .\contrib\auth\forms.py:184
-msgid "Password"
-msgstr "Пароль:"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:26
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:39
-#: .\contrib\auth\forms.py:185
-msgid "Password (again)"
-msgstr "Зміна пароля"
-
-#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:27
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:40
-msgid "Enter the same password as above, for verification."
-msgstr "Повторіть пароль для перевірки."
-
-#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Введіть новий пароль для користувача <strong>%(username)s</strong>."
-
-#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:15
-msgid "Delete?"
-msgstr "Видалити"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
-msgid "Bookmarklets"
-msgstr "Інтерактивні закладки"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:5
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:4
-msgid "Documentation bookmarklets"
-msgstr "Інтерактивні закладки документації"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:9
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Щоб встановити інтерактивні закладки, перетягніть лінк до\n"
-"тулбару закладок, або клікніть правою кнопкою миші та додайте у\n"
-"свої закладки. Тепер ви можете обрати інтерактивні закладки з будь-якої\n"
-"сторінки сайту. Зауважте, що деякі з цих інтерактивних закладок на сайті\n"
-"можуть переглядатися тільки з комп'ютера, що є в одній внутрішній мережі з \n"
-"даним сайтом (запитайте у вашого системного адміністратора, якщо ви не "
-"впевнені,\n"
-"що сайт і ваш комп'ютер є в одній внутрішній мережі).</p>\n"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:19
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:18
-msgid "Documentation for this page"
-msgstr "Документація для цієї сторінки"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:20
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Перекидає вас з будь-якої сторінки в документацію для функції, що "
-"сгенерувала цю сторінку."
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:22
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:21
-msgid "Show object ID"
-msgstr "Показати ID об'єкту"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:23
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Показує content-type та унікальний ID для сторінок, які являють собою єдиний "
-"об'єкт."
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:25
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:24
-msgid "Edit this object (current window)"
-msgstr "Редагувати цей об'єкт (поточне вікно)"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:26
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Перекидає до адміністраторської сторінки для сторінок, що "
-"відображають окремий об'єкт."
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:28
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:27
-msgid "Edit this object (new window)"
-msgstr "Редагувати цей об'єкт (нове вікно)"
-
-#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:29
-#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Як і вище, але відкриває сторінку адміністрування у новому вікні."
-
-#: .\contrib\admin\templates\registration\logged_out.html.py:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Дякуємо за час, проведений сьогодні на сайті."
-
-#: .\contrib\admin\templates\registration\logged_out.html.py:10
-msgid "Log in again"
-msgstr "Увійти знову"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:4
-#: .\contrib\admin\templates\registration\password_change_form.html.py:4
-#: .\contrib\admin\templates\registration\password_change_form.html.py:6
-#: .\contrib\admin\templates\registration\password_change_form.html.py:10
-msgid "Password change"
-msgstr "Зміна паролю"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:6
-#: .\contrib\admin\templates\registration\password_change_done.html.py:10
-msgid "Password change successful"
-msgstr "Зміна паролю успішна"
-
-#: .\contrib\admin\templates\registration\password_change_done.html.py:12
-msgid "Your password was changed."
-msgstr "Ваш пароль було змінено."
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Будь ласка введіть ваш старий пароль, задля безпеки, потім введіть ваш новий "
-"пароль двічі, щоб ми могли перевірити, що ви ввели його правильно"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:17
-msgid "Old password:"
-msgstr "Старий пароль:"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:19
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:18
-msgid "New password:"
-msgstr "Новий пароль:"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:21
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:20
-msgid "Confirm password:"
-msgstr "Підтвердіть пароль:"
-
-#: .\contrib\admin\templates\registration\password_change_form.html.py:23
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:21
-msgid "Change my password"
-msgstr "Змінити мій пароль"
-
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:10
-msgid "Password reset"
-msgstr "Перевстановлення паролю"
-
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:10
-msgid "Password reset complete"
-msgstr "Пароль перевстановлено"
-
-#: .\contrib\admin\templates\registration\password_reset_complete.html.py:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Пароль встановлено. Ви можете увійти зараз."
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:4
-
-msgid "Password reset confirmation"
-msgstr "Підтвердження перевстановлення паролю"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:12
-
-msgid "Enter new password"
-msgstr "Новий пароль:"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Будь ласка, введіть ваш старий пароль, задля безпеки, потім введіть ваш "
-"новий пароль двічі, щоб ми могли перевірити, що ви ввели його правильно"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:26
-msgid "Password reset unsuccessful"
-msgstr "Пароль не перевстановлено"
-
-#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-"Посилання на перевстановлення паролю було помилковим. Можливо тому, що воно "
-"було вже використано. Будь ласка, замовте нове перевстановлення паролю."
-
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:6
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:10
-msgid "Password reset successful"
-msgstr "Пароль перевстановлено успішно"
-
-#: .\contrib\admin\templates\registration\password_reset_done.html.py:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Ми надіслали інструкції по встановленню нового паролю поштою на адресу, яку "
-"ви вказали. Незабаром ви повинні його отримати."
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Ви отримали цього листа, тому що замовили перевстановлення паролю"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "для вашого рахунку користувача на сайті %(site_name)s"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Будь ласка, перейдіть на цю сторінку, та оберіть новий пароль:"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:9
-msgid "Your username, in case you've forgotten:"
-msgstr "У разі, якщо ви забули, ваше ім'я користувача:"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:11
-msgid "Thanks for using our site!"
-msgstr "Дякуємо за користування нашим сайтом!"
-
-#: .\contrib\admin\templates\registration\password_reset_email.html.py:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "Команда сайту %(site_name)s "
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Забули свій пароль? Введіть свою e-mail адресу і ми надішлемо інструкції для "
-"встановлення нового паролю по e-mail."
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
-msgid "E-mail address:"
-msgstr "E-mail адреса:"
-
-#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
-msgid "Reset my password"
-msgstr "Перевстановіть мій пароль"
-
-#: .\contrib\admin\templatetags\admin_list.py:284
-msgid "All dates"
-msgstr "Всі дати"
-
-#: .\contrib\admin\views\auth.py:31 .\contrib\auth\admin.py:64
-
-msgid "Add user"
-msgstr "Додати користувача"
-
-#: .\contrib\admin\views\auth.py:58 .\contrib\auth\admin.py:90
-
-msgid "Password changed successfully."
-msgstr "Зміна паролю успішна"
-
-#: .\contrib\admin\views\auth.py:65 .\contrib\auth\admin.py:96
-
-msgid "Change password: %s"
-msgstr "Змінити пароль: %s"
-
-#: .\contrib\admin\views\doc.py:48 .\contrib\admin\views\doc.py:50
-#: .\contrib\admin\views\doc.py:52 .\contrib\admindocs\views.py:57
-#: .\contrib\admindocs\views.py:59 .\contrib\admindocs\views.py:61
-msgid "tag:"
-msgstr "тег:"
-
-#: .\contrib\admin\views\doc.py:79 .\contrib\admin\views\doc.py:81
-#: .\contrib\admin\views\doc.py:83 .\contrib\admindocs\views.py:90
-#: .\contrib\admindocs\views.py:92 .\contrib\admindocs\views.py:94
-msgid "filter:"
-msgstr "відфільтрувати:"
-
-#: .\contrib\admin\views\doc.py:137 .\contrib\admin\views\doc.py:139
-#: .\contrib\admin\views\doc.py:141 .\contrib\admindocs\views.py:154
-#: .\contrib\admindocs\views.py:156 .\contrib\admindocs\views.py:158
-msgid "view:"
-msgstr "переглянути:"
-
-#: .\contrib\admin\views\doc.py:166 .\contrib\admindocs\views.py:186
-
-msgid "App %r not found"
-msgstr "Прикладна система(app) %r не знайдена"
-
-#: .\contrib\admin\views\doc.py:173
-#, python-format
-msgid "Model %(name)r not found in app %(label)r"
-msgstr "Модель %(name)r не знайдено у прикладній системі %(label)r"
-
-#: .\contrib\admin\views\doc.py:185
-#, python-format
-msgid "the related `%(label)s.%(type)s` object"
-msgstr "пов'язаний `%(label)s.%(type)s` об'єкт"
-
-#: .\contrib\admin\views\doc.py:185 .\contrib\admin\views\doc.py:207
-#: .\contrib\admin\views\doc.py:221 .\contrib\admin\views\doc.py:226
-#: .\contrib\admindocs\views.py:205 .\contrib\admindocs\views.py:227
-#: .\contrib\admindocs\views.py:241 .\contrib\admindocs\views.py:246
-msgid "model:"
-msgstr "модель:"
-
-#: .\contrib\admin\views\doc.py:216
-#, python-format
-msgid "related `%(label)s.%(name)s` objects"
-msgstr "зв'язані `%(label)s.%(name)s` об'єкти"
-
-#: .\contrib\admin\views\doc.py:221 .\contrib\admindocs\views.py:241
-msgid "all %s"
-msgstr "всі %s"
-
-#: .\contrib\admin\views\doc.py:226 .\contrib\admindocs\views.py:246
-msgid "number of %s"
-msgstr "кількість з %s"
-
-#: .\contrib\admin\views\doc.py:231 .\contrib\admindocs\views.py:251
-msgid "Fields on %s objects"
-msgstr "Поля об'єктів %s"
-
-#: .\contrib\admin\views\doc.py:293 .\contrib\admin\views\doc.py:304
-#: .\contrib\admin\views\doc.py:306 .\contrib\admin\views\doc.py:312
-#: .\contrib\admin\views\doc.py:313 .\contrib\admin\views\doc.py:315
-#: .\contrib\admindocs\views.py:314 .\contrib\admindocs\views.py:325
-#: .\contrib\admindocs\views.py:327 .\contrib\admindocs\views.py:333
-#: .\contrib\admindocs\views.py:334 .\contrib\admindocs\views.py:336
-msgid "Integer"
-msgstr "Ціле"
-
-#: .\contrib\admin\views\doc.py:294 .\contrib\admindocs\views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "Булеве значення (True або False)"
-
-#: .\contrib\admin\views\doc.py:295 .\contrib\admin\views\doc.py:314
-#: .\contrib\admindocs\views.py:316 .\contrib\admindocs\views.py:335
-
-msgid "String (up to %(max_length)s)"
-msgstr "Рядок (до %(maxlength)s символів)"
-
-#: .\contrib\admin\views\doc.py:296 .\contrib\admindocs\views.py:317
-msgid "Comma-separated integers"
-msgstr "Цілі, розділені комою"
-
-#: .\contrib\admin\views\doc.py:297 .\contrib\admindocs\views.py:318
-msgid "Date (without time)"
-msgstr "Дата (без часу)"
-
-#: .\contrib\admin\views\doc.py:298 .\contrib\admindocs\views.py:319
-msgid "Date (with time)"
-msgstr "Дата (з часом)"
-
-#: .\contrib\admin\views\doc.py:299 .\contrib\admindocs\views.py:320
-msgid "Decimal number"
-msgstr "Десяткове число"
-
-#: .\contrib\admin\views\doc.py:300 .\contrib\admindocs\views.py:321
-msgid "E-mail address"
-msgstr "E-mail адреса"
-
-#: .\contrib\admin\views\doc.py:301 .\contrib\admin\views\doc.py:302
-#: .\contrib\admin\views\doc.py:305 .\contrib\admindocs\views.py:322
-#: .\contrib\admindocs\views.py:323 .\contrib\admindocs\views.py:326
-msgid "File path"
-msgstr "Шлях до файла"
-
-#: .\contrib\admin\views\doc.py:303 .\contrib\admindocs\views.py:324
-msgid "Floating point number"
-msgstr "Число з плаваючою комою"
-
-#: .\contrib\admin\views\doc.py:307 .\contrib\admindocs\views.py:328
-#: .\contrib\comments\models.py:58
-msgid "IP address"
-msgstr "IP адреса"
-
-#: .\contrib\admin\views\doc.py:309 .\contrib\admindocs\views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "Булеве значення (включаючи True, False або None)"
-
-#: .\contrib\admin\views\doc.py:310 .\contrib\admindocs\views.py:331
-msgid "Relation to parent model"
-msgstr "Відношення до батьківської моделі"
-
-#: .\contrib\admin\views\doc.py:311 .\contrib\admindocs\views.py:332
-msgid "Phone number"
-msgstr "Телефонний номер"
-
-#: .\contrib\admin\views\doc.py:316 .\contrib\admindocs\views.py:337
-msgid "Text"
-msgstr "Текст"
-
-#: .\contrib\admin\views\doc.py:317 .\contrib\admindocs\views.py:338
-msgid "Time"
-msgstr "Час"
-
-#: .\contrib\admin\views\doc.py:318 .\contrib\admindocs\views.py:339
-#: .\contrib\comments\forms.py:21
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:37
-#: .\contrib\flatpages\admin.py:8 .\contrib\flatpages\models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: .\contrib\admin\views\doc.py:319 .\contrib\admindocs\views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "Штат Сполучених Штатів Америки (дві великіх букви)"
-
-#: .\contrib\admin\views\doc.py:320 .\contrib\admindocs\views.py:341
-msgid "XML text"
-msgstr "текст XML"
-
-#: .\contrib\admin\views\doc.py:346 .\contrib\admindocs\views.py:367
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s не є об'єктом urlpattern"
-
-#: .\contrib\admin\views\main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "Вибрати %s"
-
-#: .\contrib\admin\views\main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "Виберіть %s щоб змінити"
-
-#: .\contrib\admin\views\template.py:36 .\contrib\sites\models.py:38
-msgid "site"
-msgstr "сайт"
-
-#: .\contrib\admin\views\template.py:38
-msgid "template"
-msgstr "ім'я шаблона"
-
-#: .\contrib\admindocs\views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Модель %(model_name)r не знайдено в прикладній системі %(app_label)r"
-
-#: .\contrib\admindocs\views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "пов'язаний `%(app_label)s.%(data_type)s` об'єкт"
-
-#: .\contrib\admindocs\views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "пов'язані з `%(app_label)s.%(object_name)s` об'єкти"
-
-#: .\contrib\auth\admin.py:21
-msgid "Personal info"
-msgstr "Персональна інформація"
-
-#: .\contrib\auth\admin.py:22
-msgid "Permissions"
-msgstr "Дозволи"
-
-#: .\contrib\auth\admin.py:23
-msgid "Important dates"
-msgstr "Важливі дати"
-
-#: .\contrib\auth\admin.py:24
-msgid "Groups"
-msgstr "Групи"
-
-#: .\contrib\auth\forms.py:15 .\contrib\auth\forms.py:48
-#: .\contrib\auth\models.py:127
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Необхідне поле. 30 символів або менше. Тільки букви, цифри та символ "
-"підкреслювання."
-
-#: .\contrib\auth\forms.py:16 .\contrib\auth\forms.py:49
-#: .\core\validators.py:72
-msgid "This value must contain only letters, numbers and underscores."
-msgstr ""
-"Це значення може містити тільки літери, числа та символи підкреслювання"
-
-#: .\contrib\auth\forms.py:18
-msgid "Password confirmation"
-msgstr "Підтвердження паролю"
-
-#: .\contrib\auth\forms.py:30
-msgid "A user with that username already exists."
-msgstr "Користувач з таким ім'ям вже існує."
-
-#: .\contrib\auth\forms.py:36 .\contrib\auth\forms.py:154
-#: .\contrib\auth\forms.py:196
-msgid "The two password fields didn't match."
-msgstr "Паролі у двох полях не співпадають."
-
-#: .\contrib\auth\forms.py:82
-msgid "This account is inactive."
-msgstr "Цей запис користувача не активний."
-
-#: .\contrib\auth\forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Схоже, що у вашому браузері на увімкнені cookies. Cookies необхідні для "
-"входу."
-
-#: .\contrib\auth\forms.py:100
-msgid "E-mail"
-msgstr "E-mail"
-
-#: .\contrib\auth\forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Ця e-mail адреса не пов'язана з користувацьким запитом. Ви впевнені, що ви "
-"реєструвалися?"
-
-#: .\contrib\auth\forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "Пароль перевстановлено %s"
-
-#: .\contrib\auth\forms.py:142
-msgid "New password"
-msgstr "Новий пароль:"
-
-#: .\contrib\auth\forms.py:143
-msgid "New password confirmation"
-msgstr "Новий пароль (підтвердження):"
-
-#: .\contrib\auth\forms.py:168
-
-msgid "Old password"
-msgstr "Старий пароль:"
-
-#: .\contrib\auth\forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"Старий пароль було введено неправильно. Будь ласка, введіть його знову."
-
-#: .\contrib\auth\models.py:63 .\contrib\auth\models.py:86
-msgid "name"
-msgstr "ім'я"
-
-#: .\contrib\auth\models.py:65
-msgid "codename"
-msgstr "код"
-
-#: .\contrib\auth\models.py:68
-
-msgid "permission"
-msgstr "дозвіл"
-
-#: .\contrib\auth\models.py:69 .\contrib\auth\models.py:87
-
-msgid "permissions"
-msgstr "дозволи"
-
-#: .\contrib\auth\models.py:90
-
-msgid "group"
-msgstr "група"
-
-#: .\contrib\auth\models.py:91 .\contrib\auth\models.py:137
-
-msgid "groups"
-msgstr "групи"
-
-#: .\contrib\auth\models.py:127
-msgid "username"
-msgstr "ім'я користувача"
-
-#: .\contrib\auth\models.py:128
-msgid "first name"
-msgstr "ім'я"
-
-#: .\contrib\auth\models.py:129
-msgid "last name"
-msgstr "прізвище"
-
-#: .\contrib\auth\models.py:130
-msgid "e-mail address"
-msgstr "e-mail адреса"
-
-#: .\contrib\auth\models.py:131
-msgid "password"
-msgstr "пароль"
-
-#: .\contrib\auth\models.py:131
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Використайте '[algo]$[salt]$[hexdigest]' або використайте <a href=\"password/"
-"\">форму зміни паролю</a>."
-
-#: .\contrib\auth\models.py:132
-msgid "staff status"
-msgstr "Статус персоналу"
-
-#: .\contrib\auth\models.py:132
-msgid "Designates whether the user can log into this admin site."
-msgstr "Визначає, чи може користувач увійти до цього сайту адміністрування."
-
-#: .\contrib\auth\models.py:133
-msgid "active"
-msgstr "Активний"
-
-#: .\contrib\auth\models.py:133
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Визначає, чи можна цього користувача вважати діючим. Заберіть галочку, "
-"замість відалення запису користувача."
-
-#: .\contrib\auth\models.py:134
-msgid "superuser status"
-msgstr "Статус суперкористувача"
-
-#: .\contrib\auth\models.py:134
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "Визначає, що цей користувач має всі дозволи без їх точного зазначення."
-
-#: .\contrib\auth\models.py:135
-msgid "last login"
-msgstr "Останній вхід"
-
-#: .\contrib\auth\models.py:136
-msgid "date joined"
-msgstr "Дата приєднання"
-
-#: .\contrib\auth\models.py:138
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"На додаток до прав, які призначені вручну, цей користувач також отримує усі "
-"права, що має група, в якій він знаходиться."
-
-#: .\contrib\auth\models.py:139
-
-msgid "user permissions"
-msgstr "дозволи користувача"
-
-#: .\contrib\auth\models.py:143
-
-msgid "user"
-msgstr "користувач"
-
-#: .\contrib\auth\models.py:144
-
-msgid "users"
-msgstr "користувачі"
-
-#: .\contrib\auth\models.py:300
-
-msgid "message"
-msgstr "повідомлення"
-
-#: .\contrib\auth\views.py:50
-msgid "Logged out"
-msgstr "Вихід"
-
-#: .\contrib\auth\management\commands\createsuperuser.py:23
-#: .\core\validators.py:166 .\forms\fields.py:428 .\newforms\fields.py:403
-msgid "Enter a valid e-mail address."
-msgstr "Уведіть коректну e-mail адресу."
-
-#: .\contrib\comments\admin.py:11
-msgid "Content"
-msgstr "Зміст"
-
-#: .\contrib\comments\admin.py:14
-msgid "Metadata"
-msgstr "Мета-дані"
-
-#: .\contrib\comments\forms.py:19
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:34
-msgid "Name"
-msgstr "Ім'я"
-
-#: .\contrib\comments\forms.py:20
-msgid "Email address"
-msgstr "E-mail адреса"
-
-#: .\contrib\comments\forms.py:22
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:35
-msgid "Comment"
-msgstr "Коментар"
-
-#: .\contrib\comments\forms.py:25
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Якщо ви введете щось в це поле, ваш коментар буде вважатися спамом"
-
-#: .\contrib\comments\forms.py:125 .\core\validators.py:277
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Слідкуйте за виразами! Слово %s тут заборонено."
-msgstr[1] "Слідкуйте за виразами! Слова %s тут заборонені."
-
-#: .\contrib\comments\models.py:23
-msgid "object ID"
-msgstr "ID об'єкту"
-
-#: .\contrib\comments\models.py:50
-
-msgid "user's name"
-msgstr "ім'я користувача"
-
-#: .\contrib\comments\models.py:51
-
-msgid "user's email address"
-msgstr "e-mail адреса користувача"
-
-#: .\contrib\comments\models.py:52
-
-msgid "user's URL"
-msgstr "URL користувачів"
-
-#: .\contrib\comments\models.py:54
-msgid "comment"
-msgstr "коментар"
-
-#: .\contrib\comments\models.py:57
-msgid "date/time submitted"
-msgstr "дата/час додавання"
-
-#: .\contrib\comments\models.py:59
-msgid "is public"
-msgstr "публічний"
-
-#: .\contrib\comments\models.py:60
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Заберіть галочку звідси, щоб коментар зник з сайту."
-
-#: .\contrib\comments\models.py:62
-msgid "is removed"
-msgstr "видалений"
-
-#: .\contrib\comments\models.py:63
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Поставте тут галочку, якщо коментар неприйнятний. Повідомлення \"Цей "
-"коментар було видалено\" буде відображено замість цього коментаря."
-
-#: .\contrib\comments\models.py:115
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Цей коментар був розміщений зареєстрованим користувачем і тому ім'я не "
-"може бути відредаговано."
-
-#: .\contrib\comments\models.py:124
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Цей коментар був розміщений зареєстрованим користувачем і тому email не "
-"може бути відредагований."
-
-#: .\contrib\comments\models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"Додав %(user)s %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: .\contrib\comments\templates\comments\approve.html.py:4
-msgid "Approve a comment"
-msgstr "Затвердіть коментар"
-
-#: .\contrib\comments\templates\comments\approve.html.py:7
-msgid "Really make this comment public?"
-msgstr "Дійсно, зробити цей коментар публічним?"
-
-#: .\contrib\comments\templates\comments\approve.html.py:12
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:49
-msgid "Approve"
-msgstr "Затвердити"
-
-#: .\contrib\comments\templates\comments\approved.html.py:4
-msgid "Thanks for approving"
-msgstr "Дякуємо за затвердження."
-
-#: .\contrib\comments\templates\comments\approved.html.py:7
-#: .\contrib\comments\templates\comments\deleted.html.py:7
-#: .\contrib\comments\templates\comments\flagged.html.py:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Дякуємо за те, що ви приділили увагу покращенню якості дискусії на нашому "
-"сайті"
-
-#: .\contrib\comments\templates\comments\delete.html.py:4
-msgid "Remove a comment"
-msgstr "Видалити коментар"
-
-#: .\contrib\comments\templates\comments\delete.html.py:7
-msgid "Really remove this comment?"
-msgstr "Дійсно, видалити цей коментар?"
-
-#: .\contrib\comments\templates\comments\delete.html.py:12
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:53
-msgid "Remove"
-msgstr "Видалити"
-
-#: .\contrib\comments\templates\comments\deleted.html.py:4
-msgid "Thanks for removing"
-msgstr "Дякуємо за видалення."
-
-#: .\contrib\comments\templates\comments\flag.html.py:4
-msgid "Flag this comment"
-msgstr "Відмітити цей коментар?"
-
-#: .\contrib\comments\templates\comments\flag.html.py:7
-msgid "Really flag this comment?"
-msgstr "Дійсно відмітити цей коментар?"
-
-#: .\contrib\comments\templates\comments\flag.html.py:12
-msgid "Flag"
-msgstr "Відмітити"
-
-#: .\contrib\comments\templates\comments\flagged.html.py:4
-
-msgid "Thanks for flagging"
-msgstr "Дякуємо за користування нашим сайтом."
-
-#: .\contrib\comments\templates\comments\form.html.py:16
-#: .\contrib\comments\templates\comments\preview.html.py:31
-msgid "Post"
-msgstr "Надіслати"
-
-#: .\contrib\comments\templates\comments\form.html.py:17
-#: .\contrib\comments\templates\comments\preview.html.py:32
-msgid "Preview"
-msgstr "Попередній перегляд"
-
-#: .\contrib\comments\templates\comments\freeform.html.py:4
-msgid "Your name:"
-msgstr "Ваше ім'я:"
-
-#: .\contrib\comments\templates\comments\freeform.html.py:5
-msgid "Comment:"
-msgstr "Коментар:"
-
-#: .\contrib\comments\templates\comments\freeform.html.py:10
-msgid "Preview comment"
-msgstr "Попередній перегляд коментаря"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:4
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:19
-msgid "Comment moderation queue"
-msgstr "Черга коментарів на модерацію"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:26
-msgid "No comments to moderate"
-msgstr "Немає коментарів для модерації"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:36
-msgid "Email"
-msgstr "Email"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:38
-msgid "Authenticated?"
-msgstr "Зроблено вхід?"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:39
-msgid "IP Address"
-msgstr "IP адреса"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:40
-msgid "Date posted"
-msgstr "Дата відсилки"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:63
-msgid "yes"
-msgstr "так"
-
-#: .\contrib\comments\templates\comments\moderation_queue.html.py:63
-msgid "no"
-msgstr "ні"
-
-#: .\contrib\comments\templates\comments\posted.html.py:4
-msgid "Thanks for commenting"
-msgstr "Дякуємо за коментування"
-
-#: .\contrib\comments\templates\comments\posted.html.py:7
-msgid "Thank you for your comment"
-msgstr "Дякуємо за ваш коментар"
-
-#: .\contrib\comments\templates\comments\preview.html.py:4
-#: .\contrib\comments\templates\comments\preview.html.py:12
-msgid "Preview your comment"
-msgstr "Попередній перегляд коментаря"
-
-#: .\contrib\comments\templates\comments\preview.html.py:10
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "Будь ласка, виправте помилку, що зазначена нижче"
-msgstr[1] "Будь ласка, виправте помилки, що зазначені нижче"
-
-#: .\contrib\comments\templates\comments\preview.html.py:15
-msgid "Post your comment"
-msgstr "Опублікуйте коментар"
-
-#: .\contrib\comments\templates\comments\preview.html.py:15
-msgid "or make changes"
-msgstr "або зробіть зміни."
-
-#: .\contrib\comments\views\karma.py:21
-msgid "Anonymous users cannot vote"
-msgstr "Анонімний користувач не може голосувати"
-
-#: .\contrib\comments\views\karma.py:25
-msgid "Invalid comment ID"
-msgstr "Невірний ID коментаря"
-
-#: .\contrib\comments\views\karma.py:27
-msgid "No voting for yourself"
-msgstr "Не можна голосувати за себе"
-
-#: .\contrib\contenttypes\models.py:67
-msgid "python model class name"
-msgstr "python model class name"
-
-#: .\contrib\contenttypes\models.py:71
-msgid "content type"
-msgstr "content type"
-
-#: .\contrib\contenttypes\models.py:72
-msgid "content types"
-msgstr "content types"
-
-#: .\contrib\flatpages\admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Приклад: '/about/contact/'. Переконайтеся у наявності слешу на початку та у "
-"кінці."
-
-#: .\contrib\flatpages\admin.py:11 .\core\validators.py:76
-
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Це значення може містити тільки літери, числа, символи підкреслювання та "
-"слеші."
-
-#: .\contrib\flatpages\admin.py:22
-msgid "Advanced options"
-msgstr "Додаткові опції"
-
-#: .\contrib\flatpages\models.py:8
-msgid "title"
-msgstr "заголовок"
-
-#: .\contrib\flatpages\models.py:9
-msgid "content"
-msgstr "зміст"
-
-#: .\contrib\flatpages\models.py:10
-msgid "enable comments"
-msgstr "увімкнути коментарі"
-
-#: .\contrib\flatpages\models.py:11
-msgid "template name"
-msgstr "ім'я шаблона"
-
-#: .\contrib\flatpages\models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Приклад: 'flatpages/contact_page'. Якщо це не надано, система буда "
-"використовувати 'flatpages/default'."
-
-#: .\contrib\flatpages\models.py:13
-msgid "registration required"
-msgstr "потрібна реєстрація"
-
-#: .\contrib\flatpages\models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Якщо тут є галочка, тільки користувачи, що увійшли, зможуть переглядати цю "
-"сторінку."
-
-#: .\contrib\flatpages\models.py:18
-msgid "flat page"
-msgstr "проста сторінка"
-
-#: .\contrib\flatpages\models.py:19
-msgid "flat pages"
-msgstr "прості сторінки"
-
-#: .\contrib\formtools\wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Пробачте, але закінчився строк заповнення форми. Будь ласка, продовжіть "
-"заповнення форми з цієї сторінки."
-
-#: .\contrib\gis\forms\fields.py:14
-msgid "No geometry value provided."
-msgstr "Не задано геометрічне значення."
-
-#: .\contrib\gis\forms\fields.py:15
-msgid "Invalid geometry value."
-msgstr "Невірне геометричне значення."
-
-#: .\contrib\gis\forms\fields.py:16
-msgid "Invalid geometry type."
-msgstr "Невірний геометричний тип."
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "th"
-msgstr ""
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "st"
-msgstr ""
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "nd"
-msgstr ""
-
-#: .\contrib\humanize\templatetags\humanize.py:19
-msgid "rd"
-msgstr ""
-
-#: .\contrib\humanize\templatetags\humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f мільйон"
-msgstr[1] "%(value).1f мільйона(ів)"
-
-#: .\contrib\humanize\templatetags\humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f більйон"
-msgstr[1] "%(value).1f більйона(ів)"
-
-#: .\contrib\humanize\templatetags\humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f трильйон"
-msgstr[1] "%(value).1f трильйона(ів)"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "one"
-msgstr "один"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "two"
-msgstr "два"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "three"
-msgstr "три"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-
-msgid "four"
-msgstr "чотири"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "five"
-msgstr "п'ять"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "six"
-msgstr "шість"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "seven"
-msgstr "сім"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "eight"
-msgstr "вісім"
-
-#: .\contrib\humanize\templatetags\humanize.py:73
-msgid "nine"
-msgstr "дев'ять"
-
-#: .\contrib\humanize\templatetags\humanize.py:93
-
-msgid "today"
-msgstr "сьогодні"
-
-#: .\contrib\humanize\templatetags\humanize.py:95
-msgid "tomorrow"
-msgstr "завтра"
-
-#: .\contrib\humanize\templatetags\humanize.py:97
-msgid "yesterday"
-msgstr "вчора"
-
-#: .\contrib\localflavor\ar\forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Введіть поштовий індекс у форматі NNNN або ANNNNAAA."
-
-#: .\contrib\localflavor\ar\forms.py:49 .\contrib\localflavor\br\forms.py:96
-#: .\contrib\localflavor\br\forms.py:135 .\contrib\localflavor\pe\forms.py:23
-#: .\contrib\localflavor\pe\forms.py:51
-msgid "This field requires only numbers."
-msgstr "В це поле можна вводити тільки числа."
-
-#: .\contrib\localflavor\ar\forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "В це поле можна вводити тільки 7 або 8 цифр."
-
-#: .\contrib\localflavor\ar\forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Введіть правильний CUIT у форматі XX-XXXXXXXX-X або XXXXXXXXXXXX."
-
-#: .\contrib\localflavor\ar\forms.py:80
-msgid "Invalid CUIT."
-msgstr "Невірний CUIT."
-
-#: .\contrib\localflavor\at\at_states.py:5
-msgid "Burgenland"
-msgstr "Бургенленд"
-
-#: .\contrib\localflavor\at\at_states.py:6
-msgid "Carinthia"
-msgstr "Каринтія"
-
-#: .\contrib\localflavor\at\at_states.py:7
-msgid "Lower Austria"
-msgstr "Нижня Австрія"
-
-#: .\contrib\localflavor\at\at_states.py:8
-msgid "Upper Austria"
-msgstr "Верхня Австрія"
-
-#: .\contrib\localflavor\at\at_states.py:9
-msgid "Salzburg"
-msgstr "Зальцбург"
-
-#: .\contrib\localflavor\at\at_states.py:10
-msgid "Styria"
-msgstr "Штирія"
-
-#: .\contrib\localflavor\at\at_states.py:11
-msgid "Tyrol"
-msgstr "Тіроль"
-
-#: .\contrib\localflavor\at\at_states.py:12
-msgid "Vorarlberg"
-msgstr "Форарльберг"
-
-#: .\contrib\localflavor\at\at_states.py:13
-msgid "Vienna"
-msgstr "Відень"
-
-#: .\contrib\localflavor\at\forms.py:20 .\contrib\localflavor\ch\forms.py:16
-#: .\contrib\localflavor\no\forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "Введіть поштовий індекс у форматі ХХХХ."
-
-#: .\contrib\localflavor\at\forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Введіть правильний австрійський номер соціального страхування в форматі XXXX "
-"XXXXXX."
-
-#: .\contrib\localflavor\au\forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "Введіть поштовий індекс з 4 цифр."
-
-#: .\contrib\localflavor\br\forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Введіть поштовий індекс у форматі XXXXX-XXX."
-
-#: .\contrib\localflavor\br\forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Телефонні номери мають бути у форматі XX-XXXX-XXXX."
-
-#: .\contrib\localflavor\br\forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Оберіть правильний бразильський штат. Штата, який ви обрали, не має серед "
-"представлених тут."
-
-#: .\contrib\localflavor\br\forms.py:94
-msgid "Invalid CPF number."
-msgstr "Помилковий номер CPF."
-
-#: .\contrib\localflavor\br\forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Це поле вимагає максимум 11 цифр або 14 символів."
-
-#: .\contrib\localflavor\br\forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "Помилковий номер CNPJ."
-
-#: .\contrib\localflavor\br\forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "Це поле вимагає як мінімум 14 цифр"
-
-#: .\contrib\localflavor\ca\forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Введіть поштовий індекс у форматі XXX XXX."
-
-#: .\contrib\localflavor\ca\forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Введіть правильний канадський номер соціального страхування у форматі XXX-"
-"XXX-XXX."
-
-#: .\contrib\localflavor\ch\ch_states.py:5
-msgid "Aargau"
-msgstr "Ааргау"
-
-#: .\contrib\localflavor\ch\ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "Аппенцелль Іннерходен"
-
-#: .\contrib\localflavor\ch\ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "Аппенцелль Ауссеррходен"
-
-#: .\contrib\localflavor\ch\ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "Базель"
-
-#: .\contrib\localflavor\ch\ch_states.py:9
-msgid "Basel-Land"
-msgstr "Базель-Ленд"
-
-#: .\contrib\localflavor\ch\ch_states.py:10
-msgid "Berne"
-msgstr "Берн"
-
-#: .\contrib\localflavor\ch\ch_states.py:11
-msgid "Fribourg"
-msgstr "Фрібург"
-
-#: .\contrib\localflavor\ch\ch_states.py:12
-msgid "Geneva"
-msgstr "Женева"
-
-#: .\contrib\localflavor\ch\ch_states.py:13
-msgid "Glarus"
-msgstr "Гларус"
-
-#: .\contrib\localflavor\ch\ch_states.py:14
-msgid "Graubuenden"
-msgstr "Граубюнден"
-
-#: .\contrib\localflavor\ch\ch_states.py:15
-msgid "Jura"
-msgstr "Юра"
-
-#: .\contrib\localflavor\ch\ch_states.py:16
-msgid "Lucerne"
-msgstr "Люцерн"
-
-#: .\contrib\localflavor\ch\ch_states.py:17
-msgid "Neuchatel"
-msgstr "Невшатель"
-
-#: .\contrib\localflavor\ch\ch_states.py:18
-msgid "Nidwalden"
-msgstr "Нідвальден"
-
-#: .\contrib\localflavor\ch\ch_states.py:19
-msgid "Obwalden"
-msgstr "Обвальден"
-
-#: .\contrib\localflavor\ch\ch_states.py:20
-msgid "Schaffhausen"
-msgstr "Шафхаузен"
-
-#: .\contrib\localflavor\ch\ch_states.py:21
-msgid "Schwyz"
-msgstr "Швіц"
-
-#: .\contrib\localflavor\ch\ch_states.py:22
-msgid "Solothurn"
-msgstr "Золотурн"
-
-#: .\contrib\localflavor\ch\ch_states.py:23
-msgid "St. Gallen"
-msgstr "Санкт-Галлен"
-
-#: .\contrib\localflavor\ch\ch_states.py:24
-msgid "Thurgau"
-msgstr "Тургау"
-
-#: .\contrib\localflavor\ch\ch_states.py:25
-msgid "Ticino"
-msgstr "Тичино"
-
-#: .\contrib\localflavor\ch\ch_states.py:26
-msgid "Uri"
-msgstr "Урі"
-
-#: .\contrib\localflavor\ch\ch_states.py:27
-msgid "Valais"
-msgstr "Вале"
-
-#: .\contrib\localflavor\ch\ch_states.py:28
-msgid "Vaud"
-msgstr "Во"
-
-#: .\contrib\localflavor\ch\ch_states.py:29
-msgid "Zug"
-msgstr "Цуг"
-
-#: .\contrib\localflavor\ch\ch_states.py:30
-msgid "Zurich"
-msgstr "Цюріх"
-
-#: .\contrib\localflavor\ch\forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Введіть вірний номер посвідчення особи або паспорту у форматі X1234567<0 або "
-"1234567890."
-
-#: .\contrib\localflavor\cl\forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "Введіть вірний чилійський RUT."
-
-#: .\contrib\localflavor\cl\forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Введіть вірний чилійський RUT. Формат: XX.XXX.XXX-X."
-
-#: .\contrib\localflavor\cl\forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "Чилійський RUT не правильний."
-
-#: .\contrib\localflavor\de\de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "Баден-Вюртемберг"
-
-#: .\contrib\localflavor\de\de_states.py:6
-msgid "Bavaria"
-msgstr "Баварія"
-
-#: .\contrib\localflavor\de\de_states.py:7
-msgid "Berlin"
-msgstr "Берлін"
-
-#: .\contrib\localflavor\de\de_states.py:8
-msgid "Brandenburg"
-msgstr "Бранденбург"
-
-#: .\contrib\localflavor\de\de_states.py:9
-msgid "Bremen"
-msgstr "Бремен"
-
-#: .\contrib\localflavor\de\de_states.py:10
-msgid "Hamburg"
-msgstr "Гамбург"
-
-#: .\contrib\localflavor\de\de_states.py:11
-msgid "Hessen"
-msgstr "Гессен"
-
-#: .\contrib\localflavor\de\de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "Мекленбург — Передня Померанія"
-
-#: .\contrib\localflavor\de\de_states.py:13
-msgid "Lower Saxony"
-msgstr "Нижня Саксонія"
-
-#: .\contrib\localflavor\de\de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "Північний Рейн – Вестфалія"
-
-#: .\contrib\localflavor\de\de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "Райнланд-Пфальц"
-
-#: .\contrib\localflavor\de\de_states.py:16
-msgid "Saarland"
-msgstr "Саарланд"
-
-#: .\contrib\localflavor\de\de_states.py:17
-msgid "Saxony"
-msgstr "Саксонія"
-
-#: .\contrib\localflavor\de\de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "Саксонія-Ангальт"
-
-#: .\contrib\localflavor\de\de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "Шлезвіг-Гольштайн"
-
-#: .\contrib\localflavor\de\de_states.py:20
-msgid "Thuringia"
-msgstr "Тюрінгія"
-
-#: .\contrib\localflavor\de\forms.py:14 .\contrib\localflavor\fi\forms.py:12
-#: .\contrib\localflavor\fr\forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Введіть поштовий індекс у форматі XXXXX."
-
-#: .\contrib\localflavor\de\forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Введіть правильний номер німецького посвідчення особи в форматі XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X "
-
-#: .\contrib\localflavor\es\es_provinces.py:5
-msgid "Arava"
-msgstr "Алава"
-
-#: .\contrib\localflavor\es\es_provinces.py:6
-msgid "Albacete"
-msgstr "Альбасете"
-
-#: .\contrib\localflavor\es\es_provinces.py:7
-msgid "Alacant"
-msgstr "Аліканте"
-
-#: .\contrib\localflavor\es\es_provinces.py:8
-msgid "Almeria"
-msgstr "Альмерія"
-
-#: .\contrib\localflavor\es\es_provinces.py:9
-msgid "Avila"
-msgstr "Авіла"
-
-#: .\contrib\localflavor\es\es_provinces.py:10
-msgid "Badajoz"
-msgstr "Бадахос"
-
-#: .\contrib\localflavor\es\es_provinces.py:11
-msgid "Illes Balears"
-msgstr "Балеарські острови"
-
-#: .\contrib\localflavor\es\es_provinces.py:12
-msgid "Barcelona"
-msgstr "Барселона"
-
-#: .\contrib\localflavor\es\es_provinces.py:13
-msgid "Burgos"
-msgstr "Бургос"
-
-#: .\contrib\localflavor\es\es_provinces.py:14
-msgid "Caceres"
-msgstr "Касерес"
-
-#: .\contrib\localflavor\es\es_provinces.py:15
-msgid "Cadiz"
-msgstr "Кадіс"
-
-#: .\contrib\localflavor\es\es_provinces.py:16
-msgid "Castello"
-msgstr "Кастельйон"
-
-#: .\contrib\localflavor\es\es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Сьюдад-Реаль"
-
-#: .\contrib\localflavor\es\es_provinces.py:18
-msgid "Cordoba"
-msgstr "Кордова"
-
-#: .\contrib\localflavor\es\es_provinces.py:19
-msgid "A Coruna"
-msgstr "Ла-Корунья"
-
-#: .\contrib\localflavor\es\es_provinces.py:20
-msgid "Cuenca"
-msgstr "Куенка"
-
-#: .\contrib\localflavor\es\es_provinces.py:21
-msgid "Girona"
-msgstr "Жірона"
-
-#: .\contrib\localflavor\es\es_provinces.py:22
-
-msgid "Granada"
-msgstr "Гранада"
-
-#: .\contrib\localflavor\es\es_provinces.py:23
-msgid "Guadalajara"
-msgstr "Гвадалахара"
-
-#: .\contrib\localflavor\es\es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Гіпускоа"
-
-#: .\contrib\localflavor\es\es_provinces.py:25
-msgid "Huelva"
-msgstr "Уельва"
-
-#: .\contrib\localflavor\es\es_provinces.py:26
-msgid "Huesca"
-msgstr "Уеска"
-
-#: .\contrib\localflavor\es\es_provinces.py:27
-msgid "Jaen"
-msgstr "Хаен"
-
-#: .\contrib\localflavor\es\es_provinces.py:28
-msgid "Leon"
-msgstr "Леон"
-
-#: .\contrib\localflavor\es\es_provinces.py:29
-msgid "Lleida"
-msgstr "Льєйда"
-
-#: .\contrib\localflavor\es\es_provinces.py:30
-#: .\contrib\localflavor\es\es_regions.py:17
-msgid "La Rioja"
-msgstr "Ла-Ріоха"
-
-#: .\contrib\localflavor\es\es_provinces.py:31
-msgid "Lugo"
-msgstr "Луго"
-
-#: .\contrib\localflavor\es\es_provinces.py:32
-#: .\contrib\localflavor\es\es_regions.py:18
-msgid "Madrid"
-msgstr "Мадрід"
-
-#: .\contrib\localflavor\es\es_provinces.py:33
-msgid "Malaga"
-msgstr "Малага"
-
-#: .\contrib\localflavor\es\es_provinces.py:34
-msgid "Murcia"
-msgstr "Мурсія"
-
-#: .\contrib\localflavor\es\es_provinces.py:35
-msgid "Navarre"
-msgstr "Наварра"
-
-#: .\contrib\localflavor\es\es_provinces.py:36
-msgid "Ourense"
-msgstr "Оренсе"
-
-#: .\contrib\localflavor\es\es_provinces.py:37
-msgid "Asturias"
-msgstr "Астурія"
-
-#: .\contrib\localflavor\es\es_provinces.py:38
-msgid "Palencia"
-msgstr "Паленсія"
-
-#: .\contrib\localflavor\es\es_provinces.py:39
-msgid "Las Palmas"
-msgstr "Лас-Пальмас"
-
-#: .\contrib\localflavor\es\es_provinces.py:40
-msgid "Pontevedra"
-msgstr "Понтеведра"
-
-#: .\contrib\localflavor\es\es_provinces.py:41
-msgid "Salamanca"
-msgstr "Саламанка"
-
-#: .\contrib\localflavor\es\es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "Санта-Крус-де-Тенерифе"
-
-#: .\contrib\localflavor\es\es_provinces.py:43
-#: .\contrib\localflavor\es\es_regions.py:11
-msgid "Cantabria"
-msgstr "Кантабрія"
-
-#: .\contrib\localflavor\es\es_provinces.py:44
-msgid "Segovia"
-msgstr "Сеговія"
-
-#: .\contrib\localflavor\es\es_provinces.py:45
-msgid "Seville"
-msgstr "Севілья"
-
-#: .\contrib\localflavor\es\es_provinces.py:46
-msgid "Soria"
-msgstr "Сорія"
-
-#: .\contrib\localflavor\es\es_provinces.py:47
-msgid "Tarragona"
-msgstr "Таррагона"
-
-#: .\contrib\localflavor\es\es_provinces.py:48
-msgid "Teruel"
-msgstr "Теруель"
-
-#: .\contrib\localflavor\es\es_provinces.py:49
-msgid "Toledo"
-msgstr "Толедо"
-
-#: .\contrib\localflavor\es\es_provinces.py:50
-msgid "Valencia"
-msgstr "Валенсія"
-
-#: .\contrib\localflavor\es\es_provinces.py:51
-msgid "Valladolid"
-msgstr "Вальядолід"
-
-#: .\contrib\localflavor\es\es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Біскайя"
-
-#: .\contrib\localflavor\es\es_provinces.py:53
-msgid "Zamora"
-msgstr "Самора"
-
-#: .\contrib\localflavor\es\es_provinces.py:54
-msgid "Zaragoza"
-msgstr "Сарагоса"
-
-#: .\contrib\localflavor\es\es_provinces.py:55
-msgid "Ceuta"
-msgstr "Сеута"
-
-#: .\contrib\localflavor\es\es_provinces.py:56
-msgid "Melilla"
-msgstr "Мелілья"
-
-#: .\contrib\localflavor\es\es_regions.py:5
-msgid "Andalusia"
-msgstr "Андалусія"
-
-#: .\contrib\localflavor\es\es_regions.py:6
-msgid "Aragon"
-msgstr "Арагон"
-
-#: .\contrib\localflavor\es\es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Астурія"
-
-#: .\contrib\localflavor\es\es_regions.py:8
-msgid "Balearic Islands"
-msgstr "Балеарські острови"
-
-#: .\contrib\localflavor\es\es_regions.py:9
-msgid "Basque Country"
-msgstr "Країна Басків (Еускаді)"
-
-#: .\contrib\localflavor\es\es_regions.py:10
-msgid "Canary Islands"
-msgstr "Канарські острови"
-
-#: .\contrib\localflavor\es\es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "Кастилія — Ла-Манча"
-
-#: .\contrib\localflavor\es\es_regions.py:13
-msgid "Castile and Leon"
-msgstr "Кастилія і Леон"
-
-#: .\contrib\localflavor\es\es_regions.py:14
-msgid "Catalonia"
-msgstr "Каталонія"
-
-#: .\contrib\localflavor\es\es_regions.py:15
-msgid "Extremadura"
-msgstr "Естремадура"
-
-#: .\contrib\localflavor\es\es_regions.py:16
-msgid "Galicia"
-msgstr "Галісія"
-
-#: .\contrib\localflavor\es\es_regions.py:19
-msgid "Region of Murcia"
-msgstr "Мурсія"
-
-#: .\contrib\localflavor\es\es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Наварра"
-
-#: .\contrib\localflavor\es\es_regions.py:21
-msgid "Valencian Community"
-msgstr "Валенсія"
-
-#: .\contrib\localflavor\es\forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Введіть правильний поштовий індекс в диапазоні формату 01XXX - 52XXX."
-
-#: .\contrib\localflavor\es\forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Введіть правильний номер телефону в одному з форматів 6XXXXXXXX,8XXXXXXXX or "
-"9XXXXXXXX."
-
-#: .\contrib\localflavor\es\forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Будь ласка введіть правильний NIF, NIE, або CIF."
-
-#: .\contrib\localflavor\es\forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Будь ласка введіть правильний NIF або NIE"
-
-#: .\contrib\localflavor\es\forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "Помилкова контрольна сума для NIF."
-
-#: .\contrib\localflavor\es\forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "Помилкова контрольна сума для NIE."
-
-#: .\contrib\localflavor\es\forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "Помилкова контрольна сума для CIF."
-
-#: .\contrib\localflavor\es\forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Будь ласка, введіть правильний номер банківського рахунку у форматі XXXX-"
-"XXXX-XX-XXXXXXXXXX."
-
-#: .\contrib\localflavor\es\forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "Помилкова контрольна сума для номеру банківського рахунку."
-
-#: .\contrib\localflavor\fi\forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "Введіть правильний номер фінського соціального страхування."
-
-#: .\contrib\localflavor\in_\forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Введіть поштовий індекс у форматі XXXXXXX."
-
-#: .\contrib\localflavor\is_\forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-"Введіть правильний номер ісландського посвідчення особи. Формат: XXXXXX-XXXX."
-
-#: .\contrib\localflavor\is_\forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "Номер ісландського посвідчення особи не вірний."
-
-#: .\contrib\localflavor\it\forms.py:14
-msgid "Enter a valid zip code."
-msgstr "Введіть правильну поштову адресу."
-
-#: .\contrib\localflavor\it\forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "Введіть правильний номер соціального страхування"
-
-#: .\contrib\localflavor\it\forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "Введіть правильний номер VAT."
-
-#: .\contrib\localflavor\jp\forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Введіть поштовий індекс у форматі XXXXXXX or XXX-XXXX."
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "Хоккайдо"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:5
-msgid "Aomori"
-msgstr "Аоморі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:6
-msgid "Iwate"
-msgstr "Івате"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "Міяґі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:8
-msgid "Akita"
-msgstr "Акіта"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "Ямаґата"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "Фукусіма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "Ібаракі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "Тотіґі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:13
-msgid "Gunma"
-msgstr "Ґумма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:14
-msgid "Saitama"
-msgstr "Сайтама"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:15
-msgid "Chiba"
-msgstr "Тіба"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "Токіо"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "Канаґава"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "Яманасі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:19
-msgid "Nagano"
-msgstr "Наґано"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:20
-msgid "Niigata"
-msgstr "Ніїґата"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:21
-msgid "Toyama"
-msgstr "Тояма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "Ісікава"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:23
-msgid "Fukui"
-msgstr "Фукуї"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:24
-msgid "Gifu"
-msgstr "Ґіфу"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "Сідзуока"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:26
-msgid "Aichi"
-msgstr "Аїті"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:27
-msgid "Mie"
-msgstr "Міє"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:28
-msgid "Shiga"
-msgstr "Сіґа"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "Кіото"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:30
-msgid "Osaka"
-msgstr "Осака"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "Хьоґо"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:32
-msgid "Nara"
-msgstr "Нара"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "Вакаяма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:34
-msgid "Tottori"
-msgstr "Тотторі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:35
-msgid "Shimane"
-msgstr "Сімане"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:36
-msgid "Okayama"
-msgstr "Окаяма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Хіросіма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "Ямаґуті"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "Токусіма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "Каґава"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:41
-msgid "Ehime"
-msgstr "Ехіме"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:42
-msgid "Kochi"
-msgstr "Коті"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "Фукуока"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:44
-msgid "Saga"
-msgstr "Саґа"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "Наґасакі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "Кумамото"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:47
-msgid "Oita"
-msgstr "Оїта"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "Міядзакі"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "Каґосіма"
-
-#: .\contrib\localflavor\jp\jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Окінава"
-
-#: .\contrib\localflavor\mx\mx_states.py:12
-msgid "Aguascalientes"
-msgstr "Аґуаскальєнтес"
-
-#: .\contrib\localflavor\mx\mx_states.py:13
-msgid "Baja California"
-msgstr "Нижня Каліфорнія Північна"
-
-#: .\contrib\localflavor\mx\mx_states.py:14
-msgid "Baja California Sur"
-msgstr "Нижня Каліфорнія Південна"
-
-#: .\contrib\localflavor\mx\mx_states.py:15
-msgid "Campeche"
-msgstr "Кампече"
-
-#: .\contrib\localflavor\mx\mx_states.py:16
-msgid "Chihuahua"
-msgstr "Чіуауа"
-
-#: .\contrib\localflavor\mx\mx_states.py:17
-msgid "Chiapas"
-msgstr "Чіапас"
-
-#: .\contrib\localflavor\mx\mx_states.py:18
-msgid "Coahuila"
-msgstr "Коауїла"
-
-#: .\contrib\localflavor\mx\mx_states.py:19
-msgid "Colima"
-msgstr "Коліма"
-
-#: .\contrib\localflavor\mx\mx_states.py:20
-msgid "Distrito Federal"
-msgstr "Федеральний округ"
-
-#: .\contrib\localflavor\mx\mx_states.py:21
-msgid "Durango"
-msgstr "Дуранго"
-
-#: .\contrib\localflavor\mx\mx_states.py:22
-msgid "Guerrero"
-msgstr "Ґерреро"
-
-#: .\contrib\localflavor\mx\mx_states.py:23
-msgid "Guanajuato"
-msgstr "Ґуанахуато"
-
-#: .\contrib\localflavor\mx\mx_states.py:24
-msgid "Hidalgo"
-msgstr "Ідальґо"
-
-#: .\contrib\localflavor\mx\mx_states.py:25
-msgid "Jalisco"
-msgstr "Халіско"
-
-#: .\contrib\localflavor\mx\mx_states.py:26
-msgid "Estado de México"
-msgstr "Мехіко"
-
-#: .\contrib\localflavor\mx\mx_states.py:27
-msgid "Michoacán"
-msgstr "Мічоакан"
-
-#: .\contrib\localflavor\mx\mx_states.py:28
-msgid "Morelos"
-msgstr "Морелос"
-
-#: .\contrib\localflavor\mx\mx_states.py:29
-msgid "Nayarit"
-msgstr "Наяріт"
-
-#: .\contrib\localflavor\mx\mx_states.py:30
-msgid "Nuevo León"
-msgstr "Нуево-Леон"
-
-#: .\contrib\localflavor\mx\mx_states.py:31
-msgid "Oaxaca"
-msgstr "Оахака"
-
-#: .\contrib\localflavor\mx\mx_states.py:32
-msgid "Puebla"
-msgstr "Пуебла"
-
-#: .\contrib\localflavor\mx\mx_states.py:33
-msgid "Querétaro"
-msgstr "Керетаро"
-
-#: .\contrib\localflavor\mx\mx_states.py:34
-msgid "Quintana Roo"
-msgstr "Кінтана-Роо"
-
-#: .\contrib\localflavor\mx\mx_states.py:35
-msgid "Sinaloa"
-msgstr "Сіналоа"
-
-#: .\contrib\localflavor\mx\mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "Сан-Луїс-Потосі"
-
-#: .\contrib\localflavor\mx\mx_states.py:37
-msgid "Sonora"
-msgstr "Сонора"
-
-#: .\contrib\localflavor\mx\mx_states.py:38
-msgid "Tabasco"
-msgstr "Табаско"
-
-#: .\contrib\localflavor\mx\mx_states.py:39
-msgid "Tamaulipas"
-msgstr "Тамауліпас"
-
-#: .\contrib\localflavor\mx\mx_states.py:40
-msgid "Tlaxcala"
-msgstr "Тлашкала"
-
-#: .\contrib\localflavor\mx\mx_states.py:41
-msgid "Veracruz"
-msgstr "Веракрус"
-
-#: .\contrib\localflavor\mx\mx_states.py:42
-msgid "Yucatán"
-msgstr "Юкатан"
-
-#: .\contrib\localflavor\mx\mx_states.py:43
-msgid "Zacatecas"
-msgstr "Сакатекас"
-
-#: .\contrib\localflavor\nl\forms.py:21
-msgid "Enter a valid postal code"
-msgstr "Уведіть правильний поштовий індекс."
-
-#: .\contrib\localflavor\nl\forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Введіть правильний номер телефону."
-
-#: .\contrib\localflavor\nl\forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "Введіть правильний номер SoFi."
-
-#: .\contrib\localflavor\nl\nl_provinces.py:4
-msgid "Drenthe"
-msgstr "Дренте"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Флеволанд"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:6
-msgid "Friesland"
-msgstr "Фризляндія"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:7
-msgid "Gelderland"
-msgstr "Ґельдерланд"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:8
-msgid "Groningen"
-msgstr "Ґронінґен"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:9
-msgid "Limburg"
-msgstr "Лімбурґ"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "Північний Брабант"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "Північна Голландія"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:12
-msgid "Overijssel"
-msgstr "Оверейсел"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:13
-msgid "Utrecht"
-msgstr "Утрехт"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Зеландія"
-
-#: .\contrib\localflavor\nl\nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "Південна Голландія"
-
-#: .\contrib\localflavor\no\forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "Введіть правильний номер норвезького соціального страхування."
-
-#: .\contrib\localflavor\pe\forms.py:24
-msgid "This field requires 8 digits."
-msgstr "В це поле можна ввести тільки 8 цифр."
-
-#: .\contrib\localflavor\pe\forms.py:52
-msgid "This field requires 11 digits."
-msgstr "В це поле можна ввести тільки 11 цифр."
-
-#: .\contrib\localflavor\pl\forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Національний ідентифікаційний номер складається з 11 цифр."
-
-#: .\contrib\localflavor\pl\forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "Помилкова контрольна сума для Національного ідентифікаційного номера"
-
-#: .\contrib\localflavor\pl\forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Заповніть поле податковий номер (NIP) у форматі XXX-XXX-XX-XX або XX-XX-XXX-"
-"XXX."
-
-#: .\contrib\localflavor\pl\forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Помилкова контрольна сума для податкового номеру (NIP)."
-
-#: .\contrib\localflavor\pl\forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-"Національний діловий реєстраційний номер (REGON) складається з 7 або 9 цифр."
-
-#: .\contrib\localflavor\pl\forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Помилкова контрольна сума для Національного ділового реєстраційного номеру "
-"(REGON)."
-
-#: .\contrib\localflavor\pl\forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Введіть поштовий індекс у форматі XX-XXX."
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "Нижньосілезьке"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Куявсько-Поморське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "Люблінське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Любуське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "Лодзинське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Малопольське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "Мазовецьке"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:15
-msgid "Opole"
-msgstr "Опольське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Підкарпатське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Підляське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "Поморське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "Сілезьке"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Свентокшиське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Вармінсько-Мазурське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Великопольське"
-
-#: .\contrib\localflavor\pl\pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "Західнопоморське"
-
-#: .\contrib\localflavor\ro\forms.py:19
-msgid "Enter a valid CIF."
-msgstr "Введіть правильний CIF."
-
-#: .\contrib\localflavor\ro\forms.py:56
-msgid "Enter a valid CNP."
-msgstr "Введіть правильний CNP."
-
-#: .\contrib\localflavor\ro\forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Введіть правильний IBAN в форматі ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
-
-#: .\contrib\localflavor\ro\forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Телефонні номери мають бути у форматі XXX-XXX-XXXX."
-
-#: .\contrib\localflavor\ro\forms.py:194
-
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Введіть правильний поштовий індекс у форматі XXXXXX"
-
-#: .\contrib\localflavor\sk\forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Введіть поштовий індекс у форматі XXXXX або XXX XX."
-
-#: .\contrib\localflavor\sk\sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "Банська Бистриця"
-
-#: .\contrib\localflavor\sk\sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Банська Шт'явниця"
-
-#: .\contrib\localflavor\sk\sk_districts.py:10
-msgid "Bardejov"
-msgstr "Бардейов"
-
-#: .\contrib\localflavor\sk\sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Бановце-над-Бебравоу"
-
-#: .\contrib\localflavor\sk\sk_districts.py:12
-msgid "Brezno"
-msgstr "Брезно"
-
-#: .\contrib\localflavor\sk\sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Братіслава I"
-
-#: .\contrib\localflavor\sk\sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Братіслава II"
-
-#: .\contrib\localflavor\sk\sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Братіслава III"
-
-#: .\contrib\localflavor\sk\sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Братіслава IV"
-
-#: .\contrib\localflavor\sk\sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Братіслава V"
-
-#: .\contrib\localflavor\sk\sk_districts.py:18
-msgid "Bytca"
-msgstr "Бітча"
-
-#: .\contrib\localflavor\sk\sk_districts.py:19
-msgid "Cadca"
-msgstr "Чадца"
-
-#: .\contrib\localflavor\sk\sk_districts.py:20
-msgid "Detva"
-msgstr "Детва"
-
-#: .\contrib\localflavor\sk\sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Долни Кубін"
-
-#: .\contrib\localflavor\sk\sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Дунайська Стреда"
-
-#: .\contrib\localflavor\sk\sk_districts.py:23
-msgid "Galanta"
-msgstr "Галанта"
-
-#: .\contrib\localflavor\sk\sk_districts.py:24
-msgid "Gelnica"
-msgstr "Гелница"
-
-#: .\contrib\localflavor\sk\sk_districts.py:25
-msgid "Hlohovec"
-msgstr "Глоговець"
-
-#: .\contrib\localflavor\sk\sk_districts.py:26
-msgid "Humenne"
-msgstr "Гуменне"
-
-#: .\contrib\localflavor\sk\sk_districts.py:27
-msgid "Ilava"
-msgstr "Ілава"
-
-#: .\contrib\localflavor\sk\sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Кежмарок"
-
-#: .\contrib\localflavor\sk\sk_districts.py:29
-msgid "Komarno"
-msgstr "Комарно"
-
-#: .\contrib\localflavor\sk\sk_districts.py:30
-msgid "Kosice I"
-msgstr "Кошице I"
-
-#: .\contrib\localflavor\sk\sk_districts.py:31
-msgid "Kosice II"
-msgstr "Кошице II"
-
-#: .\contrib\localflavor\sk\sk_districts.py:32
-msgid "Kosice III"
-msgstr "Кошице III"
-
-#: .\contrib\localflavor\sk\sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Кошице IV"
-
-#: .\contrib\localflavor\sk\sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Кошице - периферія"
-
-#: .\contrib\localflavor\sk\sk_districts.py:35
-msgid "Krupina"
-msgstr "Крупіна"
-
-#: .\contrib\localflavor\sk\sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Кошицький край"
-
-#: .\contrib\localflavor\sk\sk_districts.py:37
-msgid "Levice"
-msgstr "Левіце"
-
-#: .\contrib\localflavor\sk\sk_districts.py:38
-msgid "Levoca"
-msgstr "Левоча"
-
-#: .\contrib\localflavor\sk\sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Ліптовскі Мікулаш"
-
-#: .\contrib\localflavor\sk\sk_districts.py:40
-msgid "Lucenec"
-msgstr "Лученєць"
-
-#: .\contrib\localflavor\sk\sk_districts.py:41
-msgid "Malacky"
-msgstr "Малацькі"
-
-#: .\contrib\localflavor\sk\sk_districts.py:42
-msgid "Martin"
-msgstr "Мартін"
-
-#: .\contrib\localflavor\sk\sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "Мєдзілаборце"
-
-#: .\contrib\localflavor\sk\sk_districts.py:44
-msgid "Michalovce"
-msgstr "Міхаловце"
-
-#: .\contrib\localflavor\sk\sk_districts.py:45
-msgid "Myjava"
-msgstr "Міява"
-
-#: .\contrib\localflavor\sk\sk_districts.py:46
-msgid "Namestovo"
-msgstr "Намєстово"
-
-#: .\contrib\localflavor\sk\sk_districts.py:47
-msgid "Nitra"
-msgstr "Нітра"
-
-#: .\contrib\localflavor\sk\sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Нове Мєсто-над-Вагом"
-
-#: .\contrib\localflavor\sk\sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Нове Замкі"
-
-#: .\contrib\localflavor\sk\sk_districts.py:50
-msgid "Partizanske"
-msgstr "Партизанське"
-
-#: .\contrib\localflavor\sk\sk_districts.py:51
-msgid "Pezinok"
-msgstr "Пєзінок"
-
-#: .\contrib\localflavor\sk\sk_districts.py:52
-msgid "Piestany"
-msgstr "П'єштяни"
-
-#: .\contrib\localflavor\sk\sk_districts.py:53
-msgid "Poltar"
-msgstr "Полтар"
-
-#: .\contrib\localflavor\sk\sk_districts.py:54
-msgid "Poprad"
-msgstr "Попрад"
-
-#: .\contrib\localflavor\sk\sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Поважська Бистриця"
-
-#: .\contrib\localflavor\sk\sk_districts.py:56
-msgid "Presov"
-msgstr "Прєшов"
-
-#: .\contrib\localflavor\sk\sk_districts.py:57
-msgid "Prievidza"
-msgstr "Пр'євідза"
-
-#: .\contrib\localflavor\sk\sk_districts.py:58
-msgid "Puchov"
-msgstr "Пухов"
-
-#: .\contrib\localflavor\sk\sk_districts.py:59
-msgid "Revuca"
-msgstr "Рєвуца"
-
-#: .\contrib\localflavor\sk\sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Рімавська Собота"
-
-#: .\contrib\localflavor\sk\sk_districts.py:61
-msgid "Roznava"
-msgstr "Рожнява"
-
-#: .\contrib\localflavor\sk\sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ружомберок"
-
-#: .\contrib\localflavor\sk\sk_districts.py:63
-msgid "Sabinov"
-msgstr "Сабінов"
-
-#: .\contrib\localflavor\sk\sk_districts.py:64
-msgid "Senec"
-msgstr "Сєнєц"
-
-#: .\contrib\localflavor\sk\sk_districts.py:65
-
-msgid "Senica"
-msgstr "Сєніца"
-
-#: .\contrib\localflavor\sk\sk_districts.py:66
-msgid "Skalica"
-msgstr "Скаліца"
-
-#: .\contrib\localflavor\sk\sk_districts.py:67
-msgid "Snina"
-msgstr "Сніна"
-
-#: .\contrib\localflavor\sk\sk_districts.py:68
-msgid "Sobrance"
-msgstr "Собранце"
-
-#: .\contrib\localflavor\sk\sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Спішська Нова Вєс"
-
-#: .\contrib\localflavor\sk\sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Стара Любовня"
-
-#: .\contrib\localflavor\sk\sk_districts.py:71
-msgid "Stropkov"
-msgstr "Стропков"
-
-#: .\contrib\localflavor\sk\sk_districts.py:72
-msgid "Svidnik"
-msgstr "Свіднік"
-
-#: .\contrib\localflavor\sk\sk_districts.py:73
-msgid "Sala"
-msgstr "Шаля"
-
-#: .\contrib\localflavor\sk\sk_districts.py:74
-msgid "Topolcany"
-msgstr "Топольчани"
-
-#: .\contrib\localflavor\sk\sk_districts.py:75
-msgid "Trebisov"
-msgstr "Требішов"
-
-#: .\contrib\localflavor\sk\sk_districts.py:76
-
-msgid "Trencin"
-msgstr "Трєнчін"
-
-#: .\contrib\localflavor\sk\sk_districts.py:77
-msgid "Trnava"
-msgstr "Трнава"
-
-#: .\contrib\localflavor\sk\sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Турч'янське Тепліце"
-
-#: .\contrib\localflavor\sk\sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Тврдошін"
-
-#: .\contrib\localflavor\sk\sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Вельки Кртіш"
-
-#: .\contrib\localflavor\sk\sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Вранов-над-Топльеу"
-
-#: .\contrib\localflavor\sk\sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "Злате Моравце"
-
-#: .\contrib\localflavor\sk\sk_districts.py:83
-msgid "Zvolen"
-msgstr "Зволен"
-
-#: .\contrib\localflavor\sk\sk_districts.py:84
-msgid "Zarnovica"
-msgstr "Жарновиця"
-
-#: .\contrib\localflavor\sk\sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ж'яр-над-Гроном"
-
-#: .\contrib\localflavor\sk\sk_districts.py:86
-msgid "Zilina"
-msgstr "Жиліна"
-
-#: .\contrib\localflavor\sk\sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "Банкобистрицький край"
-
-#: .\contrib\localflavor\sk\sk_regions.py:9
-msgid "Bratislava region"
-msgstr "Братиславський край"
-
-#: .\contrib\localflavor\sk\sk_regions.py:10
-msgid "Kosice region"
-msgstr "Кошицький край"
-
-#: .\contrib\localflavor\sk\sk_regions.py:11
-msgid "Nitra region"
-msgstr "Нітранський край"
-
-#: .\contrib\localflavor\sk\sk_regions.py:12
-msgid "Presov region"
-msgstr "Прєшовський край"
-
-#: .\contrib\localflavor\sk\sk_regions.py:13
-msgid "Trencin region"
-msgstr "Тренчин"
-
-#: .\contrib\localflavor\sk\sk_regions.py:14
-msgid "Trnava region"
-msgstr "Трнава"
-
-#: .\contrib\localflavor\sk\sk_regions.py:15
-msgid "Zilina region"
-msgstr "Жилінський край"
-
-#: .\contrib\localflavor\uk\forms.py:21
-msgid "Enter a valid postcode."
-msgstr "Уведіть правильний поштовий індекс."
-
-#: .\contrib\localflavor\uk\uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Бедфордшір"
-
-#: .\contrib\localflavor\uk\uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "Бакінгемшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:14
-msgid "Cheshire"
-msgstr "Чешир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Корнуолл"
-
-#: .\contrib\localflavor\uk\uk_regions.py:16
-msgid "Cumbria"
-msgstr "Камбрія"
-
-#: .\contrib\localflavor\uk\uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Дербішир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:18
-msgid "Devon"
-msgstr "Девон"
-
-#: .\contrib\localflavor\uk\uk_regions.py:19
-msgid "Dorset"
-msgstr "Дорсет"
-
-#: .\contrib\localflavor\uk\uk_regions.py:20
-msgid "Durham"
-msgstr "Дарем"
-
-#: .\contrib\localflavor\uk\uk_regions.py:21
-msgid "East Sussex"
-msgstr "Східний Сассекс"
-
-#: .\contrib\localflavor\uk\uk_regions.py:22
-msgid "Essex"
-msgstr "Ессекс"
-
-#: .\contrib\localflavor\uk\uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "Глостершир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:24
-msgid "Greater London"
-msgstr "Великий Лондон"
-
-#: .\contrib\localflavor\uk\uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "Великий Манчестер"
-
-#: .\contrib\localflavor\uk\uk_regions.py:26
-msgid "Hampshire"
-msgstr "Хемпшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "Хартфордшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:28
-msgid "Kent"
-msgstr "Кент"
-
-#: .\contrib\localflavor\uk\uk_regions.py:29
-msgid "Lancashire"
-msgstr "Ланкашир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:30
-msgid "Leicestershire"
-msgstr "Лестершир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "Лінкольншир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:32
-msgid "Merseyside"
-msgstr "Мерсісайд"
-
-#: .\contrib\localflavor\uk\uk_regions.py:33
-msgid "Norfolk"
-msgstr "Норфолк"
-
-#: .\contrib\localflavor\uk\uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "Північний Йоркшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "Нортгемптоншир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:36
-msgid "Northumberland"
-msgstr "Нортумберленд"
-
-#: .\contrib\localflavor\uk\uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "Ноттінгемшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "Оксфордшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:39
-msgid "Shropshire"
-msgstr "Шропшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:40
-msgid "Somerset"
-msgstr "Сомерсет"
-
-#: .\contrib\localflavor\uk\uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Південний Йоркшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:42
-msgid "Staffordshire"
-msgstr "Стаффордшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:43
-msgid "Suffolk"
-msgstr "Саффолк"
-
-#: .\contrib\localflavor\uk\uk_regions.py:44
-msgid "Surrey"
-msgstr "Суррей"
-
-#: .\contrib\localflavor\uk\uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Тайн-енд-Уїр"
-
-#: .\contrib\localflavor\uk\uk_regions.py:46
-msgid "Warwickshire"
-msgstr "Варвікшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:47
-msgid "West Midlands"
-msgstr "Уест Мідлендс"
-
-#: .\contrib\localflavor\uk\uk_regions.py:48
-msgid "West Sussex"
-msgstr "Західний Сассекс"
-
-#: .\contrib\localflavor\uk\uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "Західний Йоркшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:50
-msgid "Wiltshire"
-msgstr "Уілтшир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:51
-msgid "Worcestershire"
-msgstr "Вустершир"
-
-#: .\contrib\localflavor\uk\uk_regions.py:55
-msgid "County Antrim"
-msgstr "Графство Антрім"
-
-#: .\contrib\localflavor\uk\uk_regions.py:56
-msgid "County Armagh"
-msgstr "Графство Арма"
-
-#: .\contrib\localflavor\uk\uk_regions.py:57
-msgid "County Down"
-msgstr "Графство Даун"
-
-#: .\contrib\localflavor\uk\uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "Графство Фєрмана"
-
-#: .\contrib\localflavor\uk\uk_regions.py:59
-msgid "County Londonderry"
-msgstr "Графство Лондондеррі"
-
-#: .\contrib\localflavor\uk\uk_regions.py:60
-msgid "County Tyrone"
-msgstr "Графство Тірон"
-
-#: .\contrib\localflavor\uk\uk_regions.py:64
-msgid "Clwyd"
-msgstr "Клуід"
-
-#: .\contrib\localflavor\uk\uk_regions.py:65
-msgid "Dyfed"
-msgstr "Давєд"
-
-#: .\contrib\localflavor\uk\uk_regions.py:66
-msgid "Gwent"
-msgstr "Гвєнт"
-
-#: .\contrib\localflavor\uk\uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Гвінед"
-
-#: .\contrib\localflavor\uk\uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "Мід Гламорган"
-
-#: .\contrib\localflavor\uk\uk_regions.py:69
-msgid "Powys"
-msgstr "Поуіс"
-
-#: .\contrib\localflavor\uk\uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "Південний Гламорган"
-
-#: .\contrib\localflavor\uk\uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "Західний Гламорган"
-
-#: .\contrib\localflavor\uk\uk_regions.py:75
-msgid "Borders"
-msgstr "Бордерс"
-
-#: .\contrib\localflavor\uk\uk_regions.py:76
-msgid "Central Scotland"
-msgstr "Центральна Шотландія"
-
-#: .\contrib\localflavor\uk\uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "Дамфріс і Галлоуей"
-
-#: .\contrib\localflavor\uk\uk_regions.py:78
-msgid "Fife"
-msgstr "Файф"
-
-#: .\contrib\localflavor\uk\uk_regions.py:79
-msgid "Grampian"
-msgstr "Гремпіан"
-
-#: .\contrib\localflavor\uk\uk_regions.py:80
-msgid "Highland"
-msgstr "Хайленд"
-
-#: .\contrib\localflavor\uk\uk_regions.py:81
-msgid "Lothian"
-msgstr "Лотіан"
-
-#: .\contrib\localflavor\uk\uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "Оркнейські острови"
-
-#: .\contrib\localflavor\uk\uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "Шетлендські острови"
-
-#: .\contrib\localflavor\uk\uk_regions.py:84
-msgid "Strathclyde"
-msgstr "Стресклайд"
-
-#: .\contrib\localflavor\uk\uk_regions.py:85
-msgid "Tayside"
-msgstr "Тейсайд"
-
-#: .\contrib\localflavor\uk\uk_regions.py:86
-msgid "Western Isles"
-msgstr "Західні острови"
-
-#: .\contrib\localflavor\uk\uk_regions.py:90
-msgid "England"
-msgstr "Англія"
-
-#: .\contrib\localflavor\uk\uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Північна Ірландія"
-
-#: .\contrib\localflavor\uk\uk_regions.py:92
-msgid "Scotland"
-msgstr "Шотландія"
-
-#: .\contrib\localflavor\uk\uk_regions.py:93
-msgid "Wales"
-msgstr "Уельс"
-
-#: .\contrib\localflavor\us\forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Введіть поштовий індекс у форматі XXXXX або XXXXX-XXXX."
-
-#: .\contrib\localflavor\us\forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-"Введіть правильний номер соціального забезпення США в форматі XXX-XX-XXXX."
-
-#: .\contrib\localflavor\za\forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "Введіть правильний Південно-Африканський ідентифікаційний номер"
-
-#: .\contrib\localflavor\za\forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "Введіть правильний поштовий індекс Південної Африки"
-
-#: .\contrib\localflavor\za\za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "Східна Капська"
-
-#: .\contrib\localflavor\za\za_provinces.py:5
-msgid "Free State"
-msgstr "Вільна країна"
-
-#: .\contrib\localflavor\za\za_provinces.py:6
-msgid "Gauteng"
-msgstr "Гаутенг"
-
-#: .\contrib\localflavor\za\za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "КваЗулу-Наталь"
-
-#: .\contrib\localflavor\za\za_provinces.py:8
-msgid "Limpopo"
-msgstr "Лімпопо"
-
-#: .\contrib\localflavor\za\za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "Мпумаланга"
-
-#: .\contrib\localflavor\za\za_provinces.py:10
-msgid "Northern Cape"
-msgstr "Північна Капська"
-
-#: .\contrib\localflavor\za\za_provinces.py:11
-msgid "North West"
-msgstr "Північно-Західна"
-
-#: .\contrib\localflavor\za\za_provinces.py:12
-msgid "Western Cape"
-msgstr "Західна Капська"
-
-#: .\contrib\redirects\models.py:7
-msgid "redirect from"
-msgstr "перенаправлення з"
-
-#: .\contrib\redirects\models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Це повинен бути абсолютний шлях, виключаючи ім'я домену. Приклад: '/events/"
-"search/'."
-
-#: .\contrib\redirects\models.py:9
-msgid "redirect to"
-msgstr "перенаправлення до"
-
-#: .\contrib\redirects\models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Це може бути або абсолютний шлях (як вище), або повний URL, який починається "
-"з 'http://'."
-
-#: .\contrib\redirects\models.py:13
-msgid "redirect"
-msgstr "перенаправлення"
-
-#: .\contrib\redirects\models.py:14
-msgid "redirects"
-msgstr "перенаправлення"
-
-#: .\contrib\sessions\models.py:45
-msgid "session key"
-msgstr "ключ сесії"
-
-#: .\contrib\sessions\models.py:47
-msgid "session data"
-msgstr "дані сесії"
-
-#: .\contrib\sessions\models.py:48
-msgid "expire date"
-msgstr "термін придатності"
-
-#: .\contrib\sessions\models.py:53
-msgid "session"
-msgstr "сесія"
-
-#: .\contrib\sessions\models.py:54
-msgid "sessions"
-msgstr "сесії"
-
-#: .\contrib\sites\models.py:32
-msgid "domain name"
-msgstr "доменне ім'я"
-
-#: .\contrib\sites\models.py:33
-msgid "display name"
-msgstr "відображуване ім'я"
-
-#: .\contrib\sites\models.py:39
-msgid "sites"
-msgstr "сайти"
-
-#: .\core\validators.py:80
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr ""
-"Це значення повинно містити тільки літери, числа, символи підкреслювання або "
-"дефіси."
-
-#: .\core\validators.py:84
-msgid "Uppercase letters are not allowed here."
-msgstr "Літери у верхньому регістрі тут недозволені."
-
-#: .\core\validators.py:88
-msgid "Lowercase letters are not allowed here."
-msgstr "Літери у нижньому регістрі тут недозволені."
-
-#: .\core\validators.py:95 .\db\models\fields\__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "Введіть тільки цифри, що розділені комами."
-
-#: .\core\validators.py:107
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Введіть правильні e-mail адреси, що розділені комами."
-
-#: .\core\validators.py:111
-msgid "Please enter a valid IP address."
-msgstr "Будь ласка, введіть правильну IP-адресу."
-
-#: .\core\validators.py:115
-msgid "Empty values are not allowed here."
-msgstr "Порожні значення тут не дозволені."
-
-#: .\core\validators.py:119
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Не-цифрові символи тут не дозволені"
-
-#: .\core\validators.py:123
-msgid "This value can't be comprised solely of digits."
-msgstr "Це значення не може складатися з одних цифр."
-
-#: .\core\validators.py:128 .\forms\fields.py:166 .\newforms\fields.py:152
-msgid "Enter a whole number."
-msgstr "Введіть ціле число."
-
-#: .\core\validators.py:132
-msgid "Only alphabetical characters are allowed here."
-msgstr "Тільки алфавітні символи дозволені тут."
-
-#: .\core\validators.py:147 .\db\models\fields\__init__.py:468
-msgid "Invalid date: %s"
-msgstr "Неправильна дата: %s"
-
-#: .\core\validators.py:152 .\db\models\fields\__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Уведіть правильну дату у форматі РРРР-ММ-ДД."
-
-#: .\core\validators.py:157
-msgid "Enter a valid time in HH:MM format."
-msgstr "Введіть коректний час у форматі ГГ:ХХ."
-
-#: .\core\validators.py:161
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Введіть коректні дату/час у форматі ГГГГ-ММ-ДД ГГ:ХХ"
-
-#: .\core\validators.py:178 .\core\validators.py:470 .\forms\fields.py:446
-#: .\newforms\fields.py:433
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Файл не надіслано. Перевірте тип кодування форми."
-
-#: .\core\validators.py:189 .\forms\fields.py:477 .\newforms\fields.py:459
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Завантажте правильний малюнок. Файл, який ви завантажили, не є малюнком, або "
-"є зіпсованим малюнком."
-
-#: .\core\validators.py:196
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "URL %s не вказує на правильний малюнок."
-
-#: .\core\validators.py:200
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Телефонні номери мають бути у форматі XXX-XXX-XXXX. \"%s\" є неправильним."
-
-#: .\core\validators.py:208
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "URL %s не вказує на коректне відео у форматі QuickTime."
-
-#: .\core\validators.py:212
-msgid "A valid URL is required."
-msgstr "Необхадно ввести правильний URL."
-
-#: .\core\validators.py:226
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Необхідно ввести валідний HTML. Помилки:\n"
-"%s"
-
-#: .\core\validators.py:233
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "Погано сформований XML: %s"
-
-#: .\core\validators.py:250
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "Невірний URL: %s"
-
-#: .\core\validators.py:255 .\core\validators.py:257
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "URL %s є пошкодженим посиланням."
-
-#: .\core\validators.py:263
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Введіть правильну аббревіатуру штата США"
-
-#: .\core\validators.py:284
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Це поле повинно співпадати з полем '%s'"
-
-#: .\core\validators.py:303
-msgid "Please enter something for at least one field."
-msgstr "Будь ласка, введіть щось в хоча б одне поле."
-
-#: .\core\validators.py:312 .\core\validators.py:323
-msgid "Please enter both fields or leave them both empty."
-msgstr "Будь ласка, заповніть обидва поля або залишіть їх обох пустими."
-
-#: .\core\validators.py:331
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Це поле повинно бути заданим, у разі якщо %(field)s є %(value)s"
-
-#: .\core\validators.py:344
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Це поле повинно бути заданим, у разі якщо %(field)s не є %(value)s"
-
-#: .\core\validators.py:363
-msgid "Duplicate values are not allowed."
-msgstr "Продубльовані значення недозволені."
-
-#: .\core\validators.py:378
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Це значення повинно бути між %(lower)s та %(upper)s."
-
-#: .\core\validators.py:380
-#, python-format
-msgid "This value must be at least %s."
-msgstr "Це значення повинно бути, принаймні %s."
-
-#: .\core\validators.py:382
-#, python-format
-msgid "This value must be no more than %s."
-msgstr "Це значення повинно бути не більше %s."
-
-#: .\core\validators.py:423
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Це значення повинно бути ступенем %s."
-
-#: .\core\validators.py:433
-msgid "Please enter a valid decimal number."
-msgstr "Будь ласка, введіть правильне десяткове число."
-
-#: .\core\validators.py:440
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] ""
-"Будь ласка, введіть правильне десяткове число з загальною кількістю цифр не "
-"більше ніж %s."
-msgstr[1] ""
-"Будь ласка, введіть правильне десяткове число з загальною кількістю цифр не "
-"більше ніж %s."
-
-#: .\core\validators.py:443
-#, python-format
-msgid ""
-"Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural ""
-"Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] ""
-"Будь ласка, введіть правильне десяткове число з цілою частиною, що налічує "
-"максимум %s цифр"
-msgstr[1] ""
-"Будь ласка, введіть правильне десяткове число з цілою частиною, що налічує "
-"максимум %s цифр"
-
-#: .\core\validators.py:446
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Будь ласка, введіть правильне десяткове число з %s цифр після коми."
-msgstr[1] "Будь ласка, введіть правильне десяткове число з %s цифр після коми."
-
-#: .\core\validators.py:454
-msgid "Please enter a valid floating point number."
-msgstr "Будь ласка, введіть правильне число з плаваючою точкою."
-
-#: .\core\validators.py:463
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Перевірте, щоб розмір закачаного файлу був як мінімум %s байтів."
-
-#: .\core\validators.py:464
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Перевірте, щоб розмір закачаного файлу був максимум %s байтів."
-
-#: .\core\validators.py:481
-msgid "The format for this field is wrong."
-msgstr "Невірний формат для цього поля."
-
-#: .\core\validators.py:496
-msgid "This field is invalid."
-msgstr "Це поле містить помилки."
-
-#: .\core\validators.py:532
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Не можу нічого отримати з %s."
-
-#: .\core\validators.py:535
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"URL %(url)s повернув помилковий заголовок Content-Type '%(contenttype)s'."
-
-#: .\core\validators.py:568
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Будь ласка, закрийте незакритий %(tag)s тег у рядку %(line)s. (Початок "
-"рядка: \"%(start)s\".)"
-
-#: .\core\validators.py:572
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Частина тексту, що починається у рядку %(line)s неприпустима у цьому "
-"контексті. (Початок рядка: \"%(start)s\".)"
-
-#: .\core\validators.py:577
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"%(attr)s\" у рядку %(line)s має помилковий атрибут. (Початок рядка: \"%"
-"(start)s\".)"
-
-#: .\core\validators.py:582
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"Тег \"<%(tag)s>\" у рядку %(line)s є помилковим. (Початок рядка: \"%(start)s"
-"\".)"
-
-#: .\core\validators.py:586
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"У тега в рядку %(line)s відсутній один або декілька необхідних атрибутів. "
-"(Початок рядка: \"%(start)s\".)"
-
-#: .\core\validators.py:591
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Атрибут \"%(attr)s\" у рядку %(line)s має помилкове значення. (Початок "
-"рядка: \"%(start)s\".)"
-
-#: .\db\models\manipulators.py:304
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s з таким %(type)s вже існує для даних %(field)s."
-
-#: .\db\models\fields\__init__.py:348 .\db\models\fields\__init__.py:683
-msgid "This value must be an integer."
-msgstr "Це значення має бути цілим."
-
-#: .\db\models\fields\__init__.py:379
-msgid "This value must be either True or False."
-msgstr "Це значення повинно бути True або False."
-
-#: .\db\models\fields\__init__.py:412
-msgid "This field cannot be null."
-msgstr "Це поле не може бути пустим."
-
-#: .\db\models\fields\__init__.py:532 .\db\models\fields\__init__.py:550
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Введіть коректну дату у форматі РРРР-ММ-ДД[:сс[.мммммм]]."
-
-#: .\db\models\fields\__init__.py:586
-msgid "This value must be a decimal number."
-msgstr "Це значення повинно бути цілим числом."
-
-#: .\db\models\fields\__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr "Це значення повинно бути None, True або False."
-
-#: .\db\models\fields\__init__.py:817 .\db\models\fields\__init__.py:831
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Уведіть коректний час у форматі ГГ:ХХ[:сс[.мммммм]]."
-
-#: .\db\models\fields\related.py:761
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Затисніть клавішу \"Control\", або \"Command\" на Маку, щоб обрати більше "
-"однієї опції."
-
-#: .\db\models\fields\related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Будь ласка, введіть правильні %(self)s ID. Значення %(value)r помилкове."
-msgstr[1] ""
-
-#: .\forms\fields.py:54 .\newforms\fields.py:46 .\oldforms\__init__.py:370
-msgid "This field is required."
-msgstr "Це поле обов'язкове."
-
-#: .\forms\fields.py:55 .\newforms\fields.py:47
-msgid "Enter a valid value."
-msgstr "Уведіть коректне значення."
-
-#: .\forms\fields.py:138 .\newforms\fields.py:124
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Переконайтеся, що це значення має не більше %(max)d символів (зараз %(length)"
-"d)."
-
-#: .\forms\fields.py:139 .\newforms\fields.py:125
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Переконайтеся, що це значення має не менще %(min)d символів (зараз %(length)"
-"d)."
-
-#: .\forms\fields.py:167 .\forms\fields.py:196 .\forms\fields.py:225
-#: .\newforms\fields.py:153 .\newforms\fields.py:182 .\newforms\fields.py:211
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Переконайтеся, що це значення менше або дорівнює %s."
-
-#: .\forms\fields.py:168 .\forms\fields.py:197 .\forms\fields.py:226
-#: .\newforms\fields.py:154 .\newforms\fields.py:183 .\newforms\fields.py:212
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Переконайтеся, що це значення більше або дорівнює %s."
-
-#: .\forms\fields.py:195 .\forms\fields.py:224 .\newforms\fields.py:181
-#: .\newforms\fields.py:210
-msgid "Enter a number."
-msgstr "Введіть число."
-
-#: .\forms\fields.py:227 .\newforms\fields.py:213
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Переконайтеся, що тут не більше ніж %s цифр загалом."
-
-#: .\forms\fields.py:228 .\newforms\fields.py:214
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Переконайтеся, що тут не більше ніж %s цифр після десяткової коми."
-
-#: .\forms\fields.py:229 .\newforms\fields.py:215
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Переконайтеся, що тут не більше ніж %s цифр до десяткової коми."
-
-#: .\forms\fields.py:287 .\forms\fields.py:849 .\newforms\fields.py:263
-#: .\newforms\fields.py:750
-msgid "Enter a valid date."
-msgstr "Введіть коректну дату."
-
-#: .\forms\fields.py:321 .\forms\fields.py:850 .\newforms\fields.py:296
-#: .\newforms\fields.py:751
-msgid "Enter a valid time."
-msgstr "Введіть коректний час."
-
-#: .\forms\fields.py:360 .\newforms\fields.py:335
-msgid "Enter a valid date/time."
-msgstr "Уведіть коректну дату/час адресу."
-
-#: .\forms\fields.py:447 .\newforms\fields.py:434
-msgid "No file was submitted."
-msgstr "Файл не було надіслано."
-
-#: .\forms\fields.py:448 .\newforms\fields.py:435 .\oldforms\__init__.py:689
-msgid "The submitted file is empty."
-msgstr "Переданий файл порожній."
-
-#: .\forms\fields.py:538 .\newforms\fields.py:497
-msgid "Enter a valid URL."
-msgstr "Уведіть коректний URL."
-
-#: .\forms\fields.py:539 .\newforms\fields.py:498
-msgid "This URL appears to be a broken link."
-msgstr "URL %s є пошкодженим посиланням."
-
-#: .\forms\fields.py:618 .\forms\fields.py:696 .\newforms\fields.py:598
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Зробить коректний вибір, %(value)s немає серед варіантів вибору."
-
-#: .\forms\fields.py:697 .\forms\fields.py:758 .\forms\models.py:714
-#: .\newforms\fields.py:599 .\newforms\fields.py:661 .\newforms\models.py:563
-msgid "Enter a list of values."
-msgstr "Введіть список значень."
-
-#: .\forms\fields.py:878 .\newforms\fields.py:779
-msgid "Enter a valid IPv4 address."
-msgstr "Введіть коректну IPv4 адресу."
-
-#: .\forms\fields.py:888
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Введіть коректне значення 'slug' (короткого заголовку), що може містити "
-"тільки літери, числа, символи підкреслювання та дефіси."
-
-#: .\forms\formsets.py:242 .\forms\formsets.py:244
-msgid "Order"
-msgstr "Послідовність"
-
-#: .\forms\models.py:281 .\forms\models.py:290
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s з таким %(field_label)s вже існує."
-
-#: .\forms\models.py:581
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Зв'язаний зовнішній ключ не відповідає первісному ключу батьківського "
-"екземпляру."
-
-#: .\forms\models.py:644 .\newforms\fields.py:559 .\newforms\models.py:497
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Зробить коректний вибір. Такого варіанту нема серед доступних."
-
-#: .\forms\models.py:715 .\newforms\models.py:564
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Зробить коректний вибір. Такого варіанту %s нема серед доступних."
-
-#: .\oldforms\__init__.py:405
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Переконайтеся, що ваш текст менше, ніж %s символ."
-msgstr[1] "Переконайтеся, що ваш текст менше, ніж %s символів."
-
-#: .\oldforms\__init__.py:410
-msgid "Line breaks are not allowed here."
-msgstr "Символи нового рядку тут не дозволені."
-
-#: .\oldforms\__init__.py:508 .\oldforms\__init__.py:582
-#: .\oldforms\__init__.py:621
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Зробить коректний вибір; '%(data)s' немає у %(choices)s."
-
-#: .\oldforms\__init__.py:750
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Введіть ціле число між -32,768 та 32,767."
-
-#: .\oldforms\__init__.py:760
-msgid "Enter a positive number."
-msgstr "Введіть додатне число."
-
-#: .\oldforms\__init__.py:770
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Введіть ціле число між 0 та 32,767."
-
-#: .\template\defaultfilters.py:743
-msgid "yes,no,maybe"
-msgstr "так,ні,можливо"
-
-#: .\template\defaultfilters.py:774
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d байт"
-msgstr[1] "%(size)d байтів"
-
-#: .\template\defaultfilters.py:776
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f КБ"
-
-#: .\template\defaultfilters.py:778
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f МБ"
-
-#: .\template\defaultfilters.py:779
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f ГБ"
-
-#: .\utils\dateformat.py:41
-msgid "p.m."
-msgstr "після полудня"
-
-#: .\utils\dateformat.py:42
-msgid "a.m."
-msgstr "до полудня"
-
-#: .\utils\dateformat.py:47
-msgid "PM"
-msgstr "після полудня"
-
-#: .\utils\dateformat.py:48
-msgid "AM"
-msgstr "до полудня"
-
-#: .\utils\dateformat.py:97
-msgid "midnight"
-msgstr "північ"
-
-#: .\utils\dateformat.py:99
-msgid "noon"
-msgstr "полудень"
-
-#: .\utils\dates.py:6
-msgid "Monday"
-msgstr "Понеділок"
-
-#: .\utils\dates.py:6
-msgid "Tuesday"
-msgstr "Вівторок"
-
-#: .\utils\dates.py:6
-msgid "Wednesday"
-msgstr "Середа"
-
-#: .\utils\dates.py:6
-msgid "Thursday"
-msgstr "Четвер"
-
-#: .\utils\dates.py:6
-msgid "Friday"
-msgstr "П'ятниця"
-
-#: .\utils\dates.py:7
-msgid "Saturday"
-msgstr "Субота"
-
-#: .\utils\dates.py:7
-msgid "Sunday"
-msgstr "Неділя"
-
-#: .\utils\dates.py:10
-msgid "Mon"
-msgstr "Пн"
-
-#: .\utils\dates.py:10
-msgid "Tue"
-msgstr "Вт"
-
-#: .\utils\dates.py:10
-msgid "Wed"
-msgstr "Сер"
-
-#: .\utils\dates.py:10
-msgid "Thu"
-msgstr "Чт"
-
-#: .\utils\dates.py:10
-msgid "Fri"
-msgstr "Пт"
-
-#: .\utils\dates.py:11
-msgid "Sat"
-msgstr "Сб"
-
-#: .\utils\dates.py:11
-msgid "Sun"
-msgstr "Нед"
-
-#: .\utils\dates.py:18
-msgid "January"
-msgstr "Січень"
-
-#: .\utils\dates.py:18
-msgid "February"
-msgstr "Лютий"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "March"
-msgstr "Березень"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "April"
-msgstr "Квітень"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "May"
-msgstr "Травень"
-
-#: .\utils\dates.py:18 .\utils\dates.py:31
-msgid "June"
-msgstr "Червень"
-
-#: .\utils\dates.py:19 .\utils\dates.py:31
-msgid "July"
-msgstr "Липень"
-
-#: .\utils\dates.py:19
-msgid "August"
-msgstr "Серпень"
-
-#: .\utils\dates.py:19
-msgid "September"
-msgstr "Вересень"
-
-#: .\utils\dates.py:19
-msgid "October"
-msgstr "Жовтень"
-
-#: .\utils\dates.py:19
-msgid "November"
-msgstr "Листопад"
-
-#: .\utils\dates.py:20
-msgid "December"
-msgstr "Грудень"
-
-#: .\utils\dates.py:23
-msgid "jan"
-msgstr "січ"
-
-#: .\utils\dates.py:23
-msgid "feb"
-msgstr "лют"
-
-#: .\utils\dates.py:23
-msgid "mar"
-msgstr "бер"
-
-#: .\utils\dates.py:23
-msgid "apr"
-msgstr "кві"
-
-#: .\utils\dates.py:23
-msgid "may"
-msgstr "тра"
-
-#: .\utils\dates.py:23
-msgid "jun"
-msgstr "чер"
-
-#: .\utils\dates.py:24
-msgid "jul"
-msgstr "лип"
-
-#: .\utils\dates.py:24
-msgid "aug"
-msgstr "сер"
-
-#: .\utils\dates.py:24
-msgid "sep"
-msgstr "вер"
-
-#: .\utils\dates.py:24
-msgid "oct"
-msgstr "жов"
-
-#: .\utils\dates.py:24
-msgid "nov"
-msgstr "лис"
-
-#: .\utils\dates.py:24
-msgid "dec"
-msgstr "гру"
-
-#: .\utils\dates.py:31
-msgid "Jan."
-msgstr "Січ."
-
-#: .\utils\dates.py:31
-msgid "Feb."
-msgstr "Лют."
-
-#: .\utils\dates.py:32
-msgid "Aug."
-msgstr "Сер."
-
-#: .\utils\dates.py:32
-msgid "Sept."
-msgstr "Вер."
-
-#: .\utils\dates.py:32
-msgid "Oct."
-msgstr "Жов."
-
-#: .\utils\dates.py:32
-msgid "Nov."
-msgstr "Лис."
-
-#: .\utils\dates.py:32
-msgid "Dec."
-msgstr "Груд."
-
-#: .\utils\text.py:128
-msgid "or"
-msgstr "або"
-
-#: .\utils\timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "рік"
-msgstr[1] "рокі(в)"
-
-#: .\utils\timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "місяць"
-msgstr[1] "місяці(в)"
-
-#: .\utils\timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "тиждень"
-msgstr[1] "тижні(в)"
-
-#: .\utils\timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "день"
-msgstr[1] "дні(в)"
-
-#: .\utils\timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "година"
-msgstr[1] "годин(и)"
-
-#: .\utils\timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "хвилина"
-msgstr[1] "хвилин(и)"
-
-#: .\utils\timesince.py:43
-msgid "minutes"
-msgstr "хвилин(а)"
-
-#: .\utils\timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: .\utils\timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: .\utils\translation\trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "d.m.Y"
-
-#: .\utils\translation\trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
-#: .\utils\translation\trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "d.m.Y"
-
-#: .\utils\translation\trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "d.m.Y"
-
-#: .\views\generic\create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "Об'єкт %(verbose_name)s був успішно створений."
-
-#: .\views\generic\create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "Об'єкт %(verbose_name)s був успішно змінений."
-
-#: .\views\generic\create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "Об'єкт %(verbose_name)s був успішно видалений."
-
-#~ msgid "rating #1"
-#~ msgstr "рейтинг #1"
-
-#~ msgid "rating #2"
-#~ msgstr "рейтинг #2"
-
-#~ msgid "rating #3"
-#~ msgstr "рейтинг #3"
-
-#~ msgid "rating #4"
-#~ msgstr "рейтинг #4"
-
-#~ msgid "rating #5"
-#~ msgstr "рейтинг #5"
-
-#~ msgid "rating #6"
-#~ msgstr "рейтинг #6"
-
-#~ msgid "rating #7"
-#~ msgstr "рейтинг #7"
-
-#~ msgid "rating #8"
-#~ msgstr "рейтинг #8"
-
-
-#~ msgid "comments"
-#~ msgstr "коментарі"
-
-#~ msgid "person's name"
-#~ msgstr "Ім'я людини"
-
-#~ msgid "ip address"
-#~ msgstr "ip адреса"
-
-#~ msgid "approved by staff"
-#~ msgstr "схвалено адміністрацією"
-
-
-#~ msgid "free comments"
-#~ msgstr "вільні коментарі"
-
-#~ msgid "score"
-#~ msgstr "рахунок"
-
-
-#~ msgid "karma score"
-#~ msgstr "рахунок карми"
-
-
-#~ msgid "user flag"
-#~ msgstr "ознака користувача"
-
-
-#~ msgid "user flags"
-#~ msgstr "ознаки користувача"
-
-#~ msgid "deletion date"
-#~ msgstr "дата видалення"
-
-
-#~ msgid "moderator deletion"
-#~ msgstr "видалено модератором"
-
-
-#~ msgid "moderator deletions"
-#~ msgstr "видалено модератором"
-
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "Цей коментар доданий користувачем, який додав меньше ніж %(count)s "
-#~ "коментаря"
-#~ msgstr[1] ""
-#~ "Цей коментар доданий користувачем, який додав меньше ніж %(count)s "
-#~ "коментарів"
-
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Тільки POST'и дозволені"
-
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "Одне або декілька обов'язкових полів не було заповнено"
-
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "Форма для коментарів мала невірний параметр 'target' -- ID об'єкту був "
-#~ "невірний"
-
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr ""
-#~ "Форма для коментарів не забезпечувала функції 'переглянути' або 'додати'"
-
-
-#~ msgid "Forgotten your password?"
-#~ msgstr "Забули пароль?"
-
-#~ msgid "Added %s."
-#~ msgstr "Додано %s."
-
-#~ msgid "Deleted %s."
-#~ msgstr "Видалено %s."
-
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "j N Y H:i"
-
-#~ msgid "Django administration"
-#~ msgstr "Django адміністрування"
-
-#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-#~ msgstr "<a href=\"/password_reset/\">Забули пароль</a>?"
-
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "Ваш новий пароль: %(new_password)s"
-
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr "Ви можете змінити цей пароль, перейшовши до цієї сторінки:"
-
-#~ msgid "Comments"
-#~ msgstr "Коментарі"
-
-#~ msgid "String (up to 50)"
-#~ msgstr "Рядок (до 50 символів)"
-
-#~ msgid "label"
-#~ msgstr "мітка"
-
-#~ msgid "package"
-#~ msgstr "пакунок"
-
-#~ msgid "packages"
-#~ msgstr "пакунки"
diff --git a/parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 44b6c40..0000000
--- a/parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.po
deleted file mode 100644
index f956b62..0000000
--- a/parts/django/django/conf/locale/uk/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,118 +0,0 @@
-# Django, ukrainian translation.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-16 04:00+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Mykola Zamkovoy <nickzam@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: .\contrib\admin\media\js\SelectFilter2.js.py:33
-#, perl-format
-msgid "Available %s"
-msgstr "В наявності %s"
-
-#: .\contrib\admin\media\js\SelectFilter2.js.py:41
-msgid "Choose all"
-msgstr "Обрати всі"
-
-#: .\contrib\admin\media\js\SelectFilter2.js.py:46
-msgid "Add"
-msgstr "Додати"
-
-#: .\contrib\admin\media\js\SelectFilter2.js.py:48
-msgid "Remove"
-msgstr "Видалити"
-
-#: .\contrib\admin\media\js\SelectFilter2.js.py:53
-#, perl-format
-msgid "Chosen %s"
-msgstr "Обрано %s"
-
-#: .\contrib\admin\media\js\SelectFilter2.js.py:54
-msgid "Select your choice(s) and click "
-msgstr "Зробіть ваш вибір та клікніть "
-
-#: .\contrib\admin\media\js\SelectFilter2.js.py:59
-msgid "Clear all"
-msgstr "Очистити все"
-
-#: .\contrib\admin\media\js\calendar.js.py:24
-#: .\contrib\admin\media\js\dateparse.js.py:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Січень Лютий Березень Квітень Травень Червень Липень Серпень Вересень Жовтень Листопад "
-"Грудень"
-
-#: .\contrib\admin\media\js\calendar.js.py:25
-msgid "S M T W T F S"
-msgstr "Нд Пн Вт Ср Чт Пт Сб"
-
-#: .\contrib\admin\media\js\dateparse.js.py:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Неділя Понеділок Вівторок Середа Четвер П'ятниця Субота"
-
-#: .\contrib\admin\media\js\admin\CollapsedFieldsets.js.py:34
-#: .\contrib\admin\media\js\admin\CollapsedFieldsets.js.py:72
-msgid "Show"
-msgstr "Показати"
-
-#: .\contrib\admin\media\js\admin\CollapsedFieldsets.js.py:63
-msgid "Hide"
-msgstr "Сховати"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:47
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:81
-msgid "Now"
-msgstr "Зараз"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:51
-msgid "Clock"
-msgstr "Годинник"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:78
-msgid "Choose a time"
-msgstr "Оберіть час"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:82
-msgid "Midnight"
-msgstr "північ"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:83
-msgid "6 a.m."
-msgstr "6"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:84
-msgid "Noon"
-msgstr "полудень"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:88
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:183
-msgid "Cancel"
-msgstr "Відмінити"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:128
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:177
-msgid "Today"
-msgstr "Сьогодні"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:132
-msgid "Calendar"
-msgstr "Календар"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:175
-msgid "Yesterday"
-msgstr "Вчора"
-
-#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:179
-msgid "Tomorrow"
-msgstr "Завтра"
diff --git a/parts/django/django/conf/locale/uk/__init__.py b/parts/django/django/conf/locale/uk/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/uk/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/uk/formats.py b/parts/django/django/conf/locale/uk/formats.py
deleted file mode 100644
index 8c01f3d..0000000
--- a/parts/django/django/conf/locale/uk/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = 'j F Y р.'
-TIME_FORMAT = 'H:i:s'
-# DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = u' '
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/vi/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/vi/LC_MESSAGES/django.mo
deleted file mode 100644
index be577cc..0000000
--- a/parts/django/django/conf/locale/vi/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/vi/LC_MESSAGES/django.po b/parts/django/django/conf/locale/vi/LC_MESSAGES/django.po
deleted file mode 100644
index b3d16bc..0000000
--- a/parts/django/django/conf/locale/vi/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,5058 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-21 13:49+0100\n"
-"PO-Revision-Date: 2010-02-07 16:11+0700\n"
-"Last-Translator: Hung. NGUYEN Manh <loveleeyoungae@yahoo.com>\n"
-"Language-Team: Vietnamese <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "Tiếng Ả Rập"
-
-#: conf/global_settings.py:45
-msgid "Bulgarian"
-msgstr "Tiếng Bun-ga-ri"
-
-#: conf/global_settings.py:46
-msgid "Bengali"
-msgstr ""
-
-#: conf/global_settings.py:47
-msgid "Bosnian"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Catalan"
-msgstr ""
-
-#: conf/global_settings.py:49
-msgid "Czech"
-msgstr "Séc"
-
-#: conf/global_settings.py:50
-msgid "Welsh"
-msgstr "Xứ Wales"
-
-#: conf/global_settings.py:51
-msgid "Danish"
-msgstr "Tiếng Đan Mạch"
-
-#: conf/global_settings.py:52
-msgid "German"
-msgstr "Tiếng Đức"
-
-#: conf/global_settings.py:53
-msgid "Greek"
-msgstr "Tiếng Hy Lạp"
-
-#: conf/global_settings.py:54
-msgid "English"
-msgstr "Tiếng Anh"
-
-#: conf/global_settings.py:55
-msgid "Spanish"
-msgstr "Tiếng Tây Ban Nha"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr ""
-
-#: conf/global_settings.py:57
-msgid "Estonian"
-msgstr "Tiếng Estonia"
-
-#: conf/global_settings.py:58
-msgid "Basque"
-msgstr "Tiếng Baxcơ"
-
-#: conf/global_settings.py:59
-msgid "Persian"
-msgstr "Tiếng Ba Tư"
-
-#: conf/global_settings.py:60
-msgid "Finnish"
-msgstr "Tiếng Phần Lan"
-
-#: conf/global_settings.py:61
-msgid "French"
-msgstr "Tiếng Pháp"
-
-#: conf/global_settings.py:62
-msgid "Frisian"
-msgstr ""
-
-#: conf/global_settings.py:63
-msgid "Irish"
-msgstr "Tiếng Ai-len"
-
-#: conf/global_settings.py:64
-msgid "Galician"
-msgstr "Tiếng Pháp cổ"
-
-#: conf/global_settings.py:65
-msgid "Hebrew"
-msgstr "Tiếng Do Thái cổ"
-
-#: conf/global_settings.py:66
-msgid "Hindi"
-msgstr ""
-
-#: conf/global_settings.py:67
-msgid "Croatian"
-msgstr "Tiếng Croatia"
-
-#: conf/global_settings.py:68
-msgid "Hungarian"
-msgstr "Tiếng Hung-ga-ri"
-
-#: conf/global_settings.py:69
-msgid "Icelandic"
-msgstr "Tiếng Aixơlen"
-
-#: conf/global_settings.py:70
-msgid "Italian"
-msgstr "Tiếng Ý"
-
-#: conf/global_settings.py:71
-msgid "Japanese"
-msgstr "Tiếng Nhật Bản"
-
-#: conf/global_settings.py:72
-msgid "Georgian"
-msgstr ""
-
-#: conf/global_settings.py:73
-msgid "Khmer"
-msgstr "Tiếng Khơ-me"
-
-#: conf/global_settings.py:74
-msgid "Kannada"
-msgstr "Tiếng Kannada"
-
-#: conf/global_settings.py:75
-msgid "Korean"
-msgstr "Tiếng Hàn Quốc"
-
-#: conf/global_settings.py:76
-msgid "Lithuanian"
-msgstr "Tiếng Lat-vi"
-
-#: conf/global_settings.py:77
-msgid "Latvian"
-msgstr "Ngôn ngữ vùng Bantic"
-
-#: conf/global_settings.py:78
-msgid "Macedonian"
-msgstr "Tiếng Maxêđôni"
-
-#: conf/global_settings.py:79
-msgid "Dutch"
-msgstr "Tiếng Hà Lan"
-
-#: conf/global_settings.py:80
-msgid "Norwegian"
-msgstr "Tiếng Nauy"
-
-#: conf/global_settings.py:81
-msgid "Polish"
-msgstr "Tiếng Ba lan"
-
-#: conf/global_settings.py:82
-msgid "Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:83
-msgid "Brazilian Portuguese"
-msgstr ""
-
-#: conf/global_settings.py:84
-msgid "Romanian"
-msgstr "Tiếng Ru-ma-ni"
-
-#: conf/global_settings.py:85
-msgid "Russian"
-msgstr "Tiếng Nga"
-
-#: conf/global_settings.py:86
-msgid "Slovak"
-msgstr "Ngôn ngữ Slô-vac"
-
-#: conf/global_settings.py:87
-msgid "Slovenian"
-msgstr "Tiếng Slôven"
-
-#: conf/global_settings.py:88
-msgid "Albanian"
-msgstr ""
-
-#: conf/global_settings.py:89
-msgid "Serbian"
-msgstr "Tiếng Xéc-bi"
-
-#: conf/global_settings.py:90
-msgid "Serbian Latin"
-msgstr ""
-
-#: conf/global_settings.py:91
-msgid "Swedish"
-msgstr "Tiếng Thụy Điển"
-
-#: conf/global_settings.py:92
-msgid "Tamil"
-msgstr "Tiếng Ta-min"
-
-#: conf/global_settings.py:93
-msgid "Telugu"
-msgstr ""
-
-#: conf/global_settings.py:94
-msgid "Thai"
-msgstr ""
-
-#: conf/global_settings.py:95
-msgid "Turkish"
-msgstr "Tiếng Thổ Nhĩ Kỳ"
-
-#: conf/global_settings.py:96
-msgid "Ukrainian"
-msgstr "Tiếng Ukraina"
-
-#: conf/global_settings.py:97
-#, fuzzy
-msgid "Vietnamese"
-msgstr "Thành phố Viên"
-
-#: conf/global_settings.py:98
-msgid "Simplified Chinese"
-msgstr "Tiếng Trung Hoa giản thể"
-
-#: conf/global_settings.py:99
-msgid "Traditional Chinese"
-msgstr "Tiếng Trung Hoa truyền thống"
-
-#: contrib/admin/actions.py:60
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr ""
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1096
-msgid "Are you sure?"
-msgstr "Bạn có chắc chắn không?"
-
-#: contrib/admin/actions.py:85
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "Tất cả"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "Bất kì ngày nào"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "Hôm nay"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "7 ngày về trước"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "Tháng này"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "Năm nay"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "Yes"
-msgstr "Có"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
-msgid "No"
-msgstr "Không"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
-msgid "Unknown"
-msgstr "Chưa xác định"
-
-#: contrib/admin/helpers.py:19
-msgid "Action:"
-msgstr ""
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "Thời gian tác động"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr ""
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr ""
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr ""
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "Thay đổi tin nhắn"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr ""
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr ""
-
-#: contrib/admin/options.py:139 contrib/admin/options.py:154
-msgid "None"
-msgstr "Không"
-
-#: contrib/admin/options.py:558
-#, python-format
-msgid "Changed %s."
-msgstr "%s đã được thay đổi."
-
-#: contrib/admin/options.py:558 contrib/admin/options.py:568
-#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:797
-#: forms/models.py:544
-msgid "and"
-msgstr "và"
-
-#: contrib/admin/options.py:563
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" đã được thêm vào."
-
-#: contrib/admin/options.py:567
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "%(list)s for %(name)s \"%(object)s\" đã được thay đổi."
-
-#: contrib/admin/options.py:572
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "%(name)s \"%(object)s\" đã bị xóa."
-
-#: contrib/admin/options.py:576
-msgid "No fields changed."
-msgstr "Không có trường nào thay đổi"
-
-#: contrib/admin/options.py:642
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" được thêm vào thành công."
-
-#: contrib/admin/options.py:646 contrib/admin/options.py:679
-msgid "You may edit it again below."
-msgstr "Bạn có thể sửa lại dưới đây."
-
-#: contrib/admin/options.py:656 contrib/admin/options.py:689
-#, python-format
-msgid "You may add another %s below."
-msgstr "Bạn có thể thêm vào %s dưới đây."
-
-#: contrib/admin/options.py:677
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" đã được thay đổi thành công."
-
-#: contrib/admin/options.py:685
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" đã được thêm vào thành công. Bạn có thể sửa lại dưới "
-"đây."
-
-#: contrib/admin/options.py:738
-msgid ""
-"Items must be selected in order to perform actions on them. No items have "
-"been changed."
-msgstr ""
-
-#: contrib/admin/options.py:756
-msgid "No action selected."
-msgstr ""
-
-#: contrib/admin/options.py:836
-#, python-format
-msgid "Add %s"
-msgstr "Thêm %s"
-
-#: contrib/admin/options.py:862 contrib/admin/options.py:1074
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr ""
-
-#: contrib/admin/options.py:927
-#, python-format
-msgid "Change %s"
-msgstr "Thay đổi %s"
-
-#: contrib/admin/options.py:972
-msgid "Database error"
-msgstr "Cơ sở dữ liệu bị lỗi"
-
-#: contrib/admin/options.py:1008
-#, python-format
-msgid "%(count)s %(name)s was changed successfully."
-msgid_plural "%(count)s %(name)s were changed successfully."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/admin/options.py:1089
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" đã được xóa thành công."
-
-#: contrib/admin/options.py:1126
-#, python-format
-msgid "Change history: %s"
-msgstr "Thay đổi bản ghi: %s"
-
-#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:81
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "Hãy nhập đúng tên đăng nhập và mật khẩu. Chú ý chữ hoa, chữ thường."
-
-#: contrib/admin/sites.py:310 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "Hãy đăng nhập lại vì giao dịch của bạn đã hết hiệu lực"
-
-#: contrib/admin/sites.py:317 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-
-#: contrib/admin/sites.py:333 contrib/admin/sites.py:339
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "Tên đăng nhập không thể chứa kí tự '@'."
-
-#: contrib/admin/sites.py:336 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Địa chỉ email của bạn không phải là tên đăng nhập. Hãy thử '%s'."
-
-#: contrib/admin/sites.py:392
-msgid "Site administration"
-msgstr "Site quản trị hệ thống."
-
-#: contrib/admin/sites.py:406 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "Đăng nhập"
-
-#: contrib/admin/sites.py:451
-#, python-format
-msgid "%s administration"
-msgstr "%s quản trị"
-
-#: contrib/admin/util.py:170
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Một hoặc nhiều hơn %(fieldname)s trong %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:175
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Một hoặc nhiều hơn %(fieldname)s trong %(name)s:"
-
-#: contrib/admin/widgets.py:75
-msgid "Date:"
-msgstr "Ngày:"
-
-#: contrib/admin/widgets.py:75
-msgid "Time:"
-msgstr "Giờ:"
-
-#: contrib/admin/widgets.py:99
-msgid "Currently:"
-msgstr "Hiện tại:"
-
-#: contrib/admin/widgets.py:99
-msgid "Change:"
-msgstr "Thay đổi:"
-
-#: contrib/admin/widgets.py:129
-msgid "Lookup"
-msgstr "Tìm"
-
-#: contrib/admin/widgets.py:241
-msgid "Add Another"
-msgstr "Thêm vào"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Không tìm thấy trang nào"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Xin lỗi bạn! Trang mà bạn yêu cầu không tìm thấy."
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:18
-#: contrib/admin/templates/admin/change_list.html:39
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:11
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr ""
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Lỗi máy chủ"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Lỗi máy chủ (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Lỗi máy chủ <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Xảy ra lỗi. Lỗi này sẽ được gửi tới quản trị hệ thống qua email và sẽ sớm "
-"được sửa chữa. Xin cảm ơn về sựu kiên nhẫn của bạn."
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Run the selected action"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:4
-msgid "Go"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:7
-#, python-format
-msgid ""
-"<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:11
-#, python-format
-msgid "All %(total_count)s %(module_name)s selected"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:14
-msgid "Click here to select all objects across all pages"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:14
-#, python-format
-msgid "Select all %(total_count)s %(module_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/actions.html:16
-msgid "Clear selection"
-msgstr ""
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:27
-msgid "Welcome,"
-msgstr "Chào mừng bạn,"
-
-#: contrib/admin/templates/admin/base.html:32
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr ""
-
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:15
-#: contrib/admin/templates/admin/auth/user/change_password.html:48
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Change password"
-msgstr "Thay đổi mật khẩu"
-
-#: contrib/admin/templates/admin/base.html:47
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:4
-msgid "Log out"
-msgstr "Thoát"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr ""
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:21
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "Thêm vào"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "Bản ghi nhớ"
-
-#: contrib/admin/templates/admin/change_form.html:29
-#: contrib/admin/templates/admin/edit_inline/stacked.html:9
-#: contrib/admin/templates/admin/edit_inline/tabular.html:28
-msgid "View on site"
-msgstr ""
-
-#: contrib/admin/templates/admin/change_form.html:39
-#: contrib/admin/templates/admin/change_list.html:68
-#: contrib/admin/templates/admin/auth/user/change_password.html:24
-#: contrib/admin/templates/registration/password_change_form.html:15
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Hãy sửa lỗi sai dưới đây"
-msgstr[1] "Hãy sửa lại những lỗi sai dưới đây"
-
-#: contrib/admin/templates/admin/change_list.html:60
-#, python-format
-msgid "Add %(name)s"
-msgstr "Thêm vào %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:79
-msgid "Filter"
-msgstr "Bộ lọc"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:294
-msgid "Delete"
-msgstr "Xóa"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Xóa %(object_name)s '%(escaped_object)s' sẽ làm mất những dữ liệu có liên "
-"quan. Tài khoản của bạn không được cấp quyển xóa những dữ liệu đi kèm theo."
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Bạn có chắc là muốn xóa %(object_name)s \"%(escaped_object)s\"?Tất cả những "
-"dữ liệu đi kèm dưới đây cũng sẽ bị mất:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
-msgid "Yes, I'm sure"
-msgstr "Có, tôi chắc chắn."
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
-msgid "Delete multiple objects"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
-#, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
-#, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and their related items will be deleted:"
-msgstr ""
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "Thay đổi"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "Bạn không được cấp quyền chỉnh sửa bất cứ cái gì."
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr ""
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "Không có gì tồn tại"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr ""
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "Tên đăng nhập:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "Mật khẩu:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "Ngày/giờ"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "Người dùng"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "Hành động"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "Hiện tất cả"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Lưu lại"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr ""
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "Một kết quả"
-msgstr[1] "%(counter)s kết quả"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr ""
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "Lưu mới"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "Lưu và thêm vào"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "Lưu và tiếp tục chỉnh sửa"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Đầu tiên, điền tên đăng nhập và mật khẩu. Sau đó mới có thể chỉnh sửa thêm "
-"nhiều user khác."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:28
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Hãy nhập mật khẩu mới cho người sử dụng <strong>%(username)s</strong>."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:35
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
-msgid "Password"
-msgstr "Mật khẩu"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-#: contrib/admin/templates/registration/password_change_form.html:37
-#: contrib/auth/forms.py:187
-msgid "Password (again)"
-msgstr "Nhập lại mật khẩu"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:42
-#: contrib/auth/forms.py:19
-msgid "Enter the same password as above, for verification."
-msgstr "Nhập dãy mật mã trên để xác minh lại"
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:53
-#: contrib/admin/templates/admin/edit_inline/tabular.html:99
-#, python-format
-msgid "Add another %(verbose_name)s"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/stacked.html:56
-#: contrib/admin/templates/admin/edit_inline/tabular.html:102
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "Bạn muốn xóa?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Cảm ơn bạn đã dành thời gian với website này"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Đăng nhập lại"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:5
-#: contrib/admin/templates/registration/password_change_form.html:7
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "Password change"
-msgstr "Thay đổi mật khẩu"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Mật khẩu được thay đổi thành công"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Mật khẩu của bạn đã được thay đổi"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Hãy nhập lại mật khẩu cũ và sau đó nhập mật khẩu mới hai lần để chúng tôi có "
-"thể kiểm tra lại xem bạn đã gõ chính xác hay chưa."
-
-#: contrib/admin/templates/registration/password_change_form.html:27
-#: contrib/auth/forms.py:170
-msgid "Old password"
-msgstr "Mật khẩu cũ"
-
-#: contrib/admin/templates/registration/password_change_form.html:32
-#: contrib/auth/forms.py:144
-msgid "New password"
-msgstr "Mật khẩu mới"
-
-#: contrib/admin/templates/registration/password_change_form.html:43
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "Thay đổi mật khẩu"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "Lập lại mật khẩu"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "Hoàn thành việc lập lại mật khẩu"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "Mật khẩu của bạn đã được lập lại. Bạn hãy thử đăng nhập."
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "Xác nhận việc lập lại mật khẩu"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "Nhập mật khẩu mới"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Hãy nhập mật khẩu mới hai lần để chúng tôi có thể kiểm tra xem bạn đã gõ "
-"chính xác chưa"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Mật khẩu mới"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Nhập lại mật khẩu:"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "Lập lại mật khẩu không thành công"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Lấy lại mật khẩu thành công"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Chúng tôi vừa gửi cho bạn những hướng dẫn để bạn lập lại mất khẩu tới địa "
-"chỉ email bạn đã đăng kí. Bạn sẽ nhận được nó trong chốc lát."
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Bạn nhận được email này vì bạn đã yêu cầu lập lại mật khẩu"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "cho tài khoản của bạn ở %(site_name)s"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "Hãy vào đường link dưới đây và chọn một mật khẩu mới"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "Tên đăng nhập của bạn(nếu bạn có quên nó):"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "Cảm ơn bạn đã sử dụng website của chúng tôi!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr ""
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Quên mật khẩu? Nhập địa chỉ email của bạn vào bên dưới, chúng tôi sẽ gửi "
-"những hướng dẫn để làm lại mật khẩu mới."
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Địa chỉ email:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Làm lại mật khẩu"
-
-#: contrib/admin/templatetags/admin_list.py:240
-msgid "All dates"
-msgstr "Tất cả các ngày"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s"
-msgstr "Chọn %s"
-
-#: contrib/admin/views/main.py:70
-#, python-format
-msgid "Select %s to change"
-msgstr "Chọn %s để thay đổi"
-
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
-msgid "site"
-msgstr ""
-
-#: contrib/admin/views/template.py:40
-msgid "template"
-msgstr "Mẫu"
-
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
-#: contrib/admindocs/views.py:65
-msgid "tag:"
-msgstr "Nhãn:"
-
-#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
-#: contrib/admindocs/views.py:98
-msgid "filter:"
-msgstr "Lọc:"
-
-#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
-#: contrib/admindocs/views.py:162
-msgid "view:"
-msgstr "Xem:"
-
-#: contrib/admindocs/views.py:190
-#, python-format
-msgid "App %r not found"
-msgstr "Ứng dụng %r không tìm thấy"
-
-#: contrib/admindocs/views.py:197
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "Mẫu %(model_name)r không tìm thấy trong ứng dụng %(app_label)r"
-
-#: contrib/admindocs/views.py:209
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr ""
-
-#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
-#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
-msgid "model:"
-msgstr "mẫu:"
-
-#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "liên quan tới đối tượng `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
-#, python-format
-msgid "all %s"
-msgstr "Tất cả %s"
-
-#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
-#, python-format
-msgid "number of %s"
-msgstr "số của %s"
-
-#: contrib/admindocs/views.py:271
-#, python-format
-msgid "Fields on %s objects"
-msgstr ""
-
-#: contrib/admindocs/views.py:361
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "Hiện ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "Sửa lại đối tượng này (ở cửa sổ hiện tại)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "Sửa lại đối tượng này (trong cửa sổ mới)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "Như trên nhưng mở trang quản trị ở một cửa sổ mới."
-
-#: contrib/auth/admin.py:29
-msgid "Personal info"
-msgstr "Thông tin cá nhân"
-
-#: contrib/auth/admin.py:30
-msgid "Permissions"
-msgstr ""
-
-#: contrib/auth/admin.py:31
-msgid "Important dates"
-msgstr "Những ngày quan trọng"
-
-#: contrib/auth/admin.py:32
-msgid "Groups"
-msgstr "Các nhóm"
-
-#: contrib/auth/admin.py:114
-msgid "Password changed successfully."
-msgstr "Mật khẩu thay đổi thành công"
-
-#: contrib/auth/admin.py:124
-#, python-format
-msgid "Change password: %s"
-msgstr "Thay đổi mật khẩu: %s"
-
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
-msgid "Username"
-msgstr "Tên đăng nhập"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
-#: contrib/auth/models.py:180
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Nhập nhiều nhất là 30 ký tự. Chỉ sử dụng kiểu ký tự là chữ, con số hoặc dấu "
-"gạch dưới."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Giá trị này chỉ chứa chữ cái, số và dấu gạch dưới"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "Xác nhận mật khẩu"
-
-#: contrib/auth/forms.py:31
-msgid "A user with that username already exists."
-msgstr "Tên đăng nhập đã được sử dụng"
-
-#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
-#: contrib/auth/forms.py:198
-msgid "The two password fields didn't match."
-msgstr "Hai trường mật khẩu không giống nhau"
-
-#: contrib/auth/forms.py:83
-msgid "This account is inactive."
-msgstr "Tài khoản này chưa được kích hoạt."
-
-#: contrib/auth/forms.py:88
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/auth/forms.py:101
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:110
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Không tìm thấy địa chỉ email này trong các tài khoản đã có. Bạn có chắc là "
-"đã đăng kí không?"
-
-#: contrib/auth/forms.py:136
-#, python-format
-msgid "Password reset on %s"
-msgstr ""
-
-#: contrib/auth/forms.py:145
-msgid "New password confirmation"
-msgstr "Xác nhận mật khẩu mới"
-
-#: contrib/auth/forms.py:178
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Mật khẩu cũ không chính xác. Hãy nhập lại lần nữa"
-
-#: contrib/auth/models.py:66 contrib/auth/models.py:94
-msgid "name"
-msgstr "Tên"
-
-#: contrib/auth/models.py:68
-msgid "codename"
-msgstr ""
-
-#: contrib/auth/models.py:72
-msgid "permission"
-msgstr ""
-
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
-msgid "permissions"
-msgstr ""
-
-#: contrib/auth/models.py:98
-msgid "group"
-msgstr "Nhóm"
-
-#: contrib/auth/models.py:99 contrib/auth/models.py:190
-msgid "groups"
-msgstr "Các nhóm"
-
-#: contrib/auth/models.py:180
-msgid "username"
-msgstr "Tên đăng nhập"
-
-#: contrib/auth/models.py:181
-msgid "first name"
-msgstr "Tên"
-
-#: contrib/auth/models.py:182
-msgid "last name"
-msgstr "Họ"
-
-#: contrib/auth/models.py:183
-msgid "e-mail address"
-msgstr "Địa chỉ email"
-
-#: contrib/auth/models.py:184
-msgid "password"
-msgstr "Mật khẩu"
-
-#: contrib/auth/models.py:184
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-
-#: contrib/auth/models.py:185
-msgid "staff status"
-msgstr ""
-
-#: contrib/auth/models.py:185
-msgid "Designates whether the user can log into this admin site."
-msgstr "Chỉ định người dùng nào được phép truy cập vào trang admin."
-
-#: contrib/auth/models.py:186
-msgid "active"
-msgstr "Kích hoạt"
-
-#: contrib/auth/models.py:186
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-
-#: contrib/auth/models.py:187
-msgid "superuser status"
-msgstr ""
-
-#: contrib/auth/models.py:187
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-
-#: contrib/auth/models.py:188
-msgid "last login"
-msgstr "Lần cuối đăng nhập"
-
-#: contrib/auth/models.py:189
-msgid "date joined"
-msgstr "Ngày tham gia"
-
-#: contrib/auth/models.py:191
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Bên cạnh các quyền đã mặc định khi đăng kí, người dùng sẽ được cấp thêm các "
-"quyền của các nhóm mà người đó tham gia vào."
-
-#: contrib/auth/models.py:192
-msgid "user permissions"
-msgstr "quyền của người sử dụng"
-
-#: contrib/auth/models.py:196 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
-msgid "user"
-msgstr "Người dùng"
-
-#: contrib/auth/models.py:197
-msgid "users"
-msgstr ""
-
-#: contrib/auth/models.py:367
-msgid "message"
-msgstr "Tin nhắn"
-
-#: contrib/auth/views.py:60
-msgid "Logged out"
-msgstr "Đã thoát"
-
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:85 forms/fields.py:414
-msgid "Enter a valid e-mail address."
-msgstr "Hãy nhập địa chỉ email hợp lệ."
-
-#: contrib/comments/admin.py:12
-msgid "Content"
-msgstr "Nội dung"
-
-#: contrib/comments/admin.py:15
-msgid "Metadata"
-msgstr "Siêu dữ liệu"
-
-#: contrib/comments/admin.py:39
-msgid "flagged"
-msgstr ""
-
-#: contrib/comments/admin.py:40
-msgid "Flag selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:43
-msgid "approved"
-msgstr ""
-
-#: contrib/comments/admin.py:44
-msgid "Approve selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:47
-msgid "removed"
-msgstr ""
-
-#: contrib/comments/admin.py:48
-msgid "Remove selected comments"
-msgstr ""
-
-#: contrib/comments/admin.py:60
-#, python-format
-msgid "1 comment was successfully %(action)s."
-msgid_plural "%(count)s comments were successfully %(action)s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr ""
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr ""
-
-#: contrib/comments/forms.py:93
-msgid "Name"
-msgstr "Tên"
-
-#: contrib/comments/forms.py:94
-msgid "Email address"
-msgstr "Địa chỉ email"
-
-#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1107
-msgid "URL"
-msgstr "Đường dẫn URL"
-
-#: contrib/comments/forms.py:96
-msgid "Comment"
-msgstr "Bình luận"
-
-#: contrib/comments/forms.py:175
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Hãy cẩn thận! Từ %s không đc phép sử dụng ở đây."
-msgstr[1] "Hãy cẩn thận! Cụm từ %s không được sử dụng ở đây."
-
-#: contrib/comments/forms.py:182
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "Bất kì bình luận nào bạn nhập vào đây cũng sẽ bị coi là thư rác"
-
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
-msgid "content type"
-msgstr "kiểu nội dung"
-
-#: contrib/comments/models.py:24
-msgid "object ID"
-msgstr ""
-
-#: contrib/comments/models.py:52
-msgid "user's name"
-msgstr "Tên người sử dụng"
-
-#: contrib/comments/models.py:53
-msgid "user's email address"
-msgstr "Địa chỉ email của người sử dụng"
-
-#: contrib/comments/models.py:54
-msgid "user's URL"
-msgstr "Đường dẫn URL của người sử dụng"
-
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
-msgid "comment"
-msgstr "Bình luận"
-
-#: contrib/comments/models.py:59
-msgid "date/time submitted"
-msgstr "Ngày/giờ đã đăng kí"
-
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:909
-msgid "IP address"
-msgstr "Địa chỉ IP"
-
-#: contrib/comments/models.py:61
-msgid "is public"
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "Không đánh dấu vào hộp này để gỡ bình luận ra khỏi Site"
-
-#: contrib/comments/models.py:64
-msgid "is removed"
-msgstr "Bị xóa"
-
-#: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Đánh dấu vào hộp này nếu bình luận không thích hợp. Tin nhắn \"Bình luận đã "
-"bị xóa\" sẽ thay thế vào đó."
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr ""
-
-#: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-
-#: contrib/comments/models.py:153
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr ""
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr ""
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr ""
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr ""
-
-#: contrib/comments/templates/comments/approve.html:12
-msgid "Approve"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr ""
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr ""
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr ""
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Post"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
-msgid "Preview"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr ""
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
-msgid "Preview your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:11
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "Post your comment"
-msgstr ""
-
-#: contrib/comments/templates/comments/preview.html:16
-msgid "or make changes"
-msgstr ""
-
-#: contrib/contenttypes/models.py:77
-msgid "python model class name"
-msgstr ""
-
-#: contrib/contenttypes/models.py:82
-msgid "content types"
-msgstr "kiểu nội dung"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Giá trị này chỉ có thể bao gồm chữ cái, chữ số, dấu gạch dưới, gạch ngang "
-"hoặc gạch chéo."
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "Các lựa chọn "
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "tiêu đề"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "nội dung"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "mở bình luận"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "tên mẫu"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "Bạn cần phải cần đăng kí"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Nếu bạn đánh dấu vào đây, chỉ những tài khoản đã đăng nhập mới có thể xem "
-"được trang này."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr ""
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr ""
-
-#: contrib/formtools/wizard.py:134
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Xin lỗi, form mà bạn điền đã hết hiệu lực. Hãy điền vào form lấy từ trang "
-"này."
-
-#: contrib/gis/db/models/fields.py:50
-msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:269
-msgid "Point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:273
-msgid "Line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:277
-msgid "Polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:281
-msgid "Multi-point"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:285
-msgid "Multi-line string"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:289
-msgid "Multi polygon"
-msgstr ""
-
-#: contrib/gis/db/models/fields.py:293
-msgid "Geometry collection"
-msgstr ""
-
-#: contrib/gis/forms/fields.py:17
-msgid "No geometry value provided."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:18
-msgid "Invalid geometry value."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:19
-msgid "Invalid geometry type."
-msgstr ""
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "Một"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "Hai"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "Ba"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "Bốn"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "Năm"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "Sáu"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "Bảy"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "Tám"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "Chín"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "Hôm nay"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "Ngày mai"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "Hôm qua"
-
-#: contrib/localflavor/ar/forms.py:28
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Hãy nhập mã bưu điện theo mẫu NNNN hoặc ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
-#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires only numbers."
-msgstr "Điền một chữ số duy nhất."
-
-#: contrib/localflavor/ar/forms.py:51
-msgid "This field requires 7 or 8 digits."
-msgstr "Bạn cần điền 7 hoặc 8 chữ số."
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Hãy nhập CUIT hợp lệ theo dạng XX-XXXXXXXX-X hoặc XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:81
-msgid "Invalid CUIT."
-msgstr "CUIT không hợp lệ."
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr ""
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "Thành phố Viên"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
-#: contrib/localflavor/no/forms.py:13
-msgid "Enter a zip code in the format XXXX."
-msgstr "Hãy nhập mã bưu điện theo dạng XXXX."
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Hãy nhập số an sinh xã hội của nước Áo theo dạng XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:17
-msgid "Enter a 4 digit post code."
-msgstr "Hãy nhập 4 số của mã bưu điện."
-
-#: contrib/localflavor/br/forms.py:22
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Hãy nhập mã bưu điện theo dạng XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:31
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Số điện thoại phải dưới dạng XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:59
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:95
-msgid "Invalid CPF number."
-msgstr "Số CPF không hợp lệ."
-
-#: contrib/localflavor/br/forms.py:96
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Điền nhiều nhất là 11 chữ số hoặc 14 kí tự."
-
-#: contrib/localflavor/br/forms.py:135
-msgid "Invalid CNPJ number."
-msgstr "Số CNPJ không hợp lệ."
-
-#: contrib/localflavor/br/forms.py:137
-msgid "This field requires at least 14 digits"
-msgstr "Bạn phải cần điền ít nhất là 14 chữ số."
-
-#: contrib/localflavor/ca/forms.py:25
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "Hãy nhập mã bưu điện theo dạng XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:96
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "Thành phố Zurich"
-
-#: contrib/localflavor/ch/forms.py:65
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:32
-msgid "The Chilean RUT is not valid."
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:8
-msgid "Prague"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:9
-msgid "Central Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:10
-msgid "South Bohemian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:11
-msgid "Pilsen Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:12
-msgid "Carlsbad Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:13
-msgid "Usti Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:14
-msgid "Liberec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:15
-msgid "Hradec Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:16
-msgid "Pardubice Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:17
-msgid "Vysocina Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:18
-msgid "South Moravian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:19
-msgid "Olomouc Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:20
-msgid "Zlin Region"
-msgstr ""
-
-#: contrib/localflavor/cz/cz_regions.py:21
-msgid "Moravian-Silesian Region"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:48
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:49
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:50
-msgid "Enter a valid birth number."
-msgstr ""
-
-#: contrib/localflavor/cz/forms.py:107
-msgid "Enter a valid IC number."
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "Berlin"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "Hamburg"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "Bang Saxony"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr ""
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
-#: contrib/localflavor/fr/forms.py:16
-msgid "Enter a zip code in the format XXXXX."
-msgstr "Hãy nhập mã bưu điện theo mẫu XXXXX."
-
-#: contrib/localflavor/de/forms.py:42
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr ""
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr ""
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:20
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Hãy nhập mã số bưu điện hợp lệ theo dạng 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:40
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Hãy nhập số điện thoại hợp lệ theo dạng 6XXXXXXXX, 8XXXXXXXX hoặc 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Hãy nhập NIF, NIE, hoặc CIF hợp lệ."
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Please enter a valid NIF or NIE."
-msgstr "Hãy nhập NIF hoặc NIE hợp lệ."
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for NIE."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:71
-msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:143
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Hãy nhập số tài khoản ngân hàng theo dạng XXXX-XXXX-XX-XXXXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:144
-msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:29
-msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/fr/forms.py:31
-msgid "Phone numbers must be in 0X XX XX XX XX format."
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:28
-msgid "Enter a valid post code"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
-msgid "Enter a valid phone number"
-msgstr "Hãy nhập số điện thoại có hiệu lực"
-
-#: contrib/localflavor/id/forms.py:107
-msgid "Enter a valid vehicle license plate number"
-msgstr ""
-
-#: contrib/localflavor/id/forms.py:170
-msgid "Enter a valid NIK/KTP number"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:9
-#: contrib/localflavor/id/id_choices.py:73
-msgid "Bali"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:10
-#: contrib/localflavor/id/id_choices.py:45
-msgid "Banten"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:11
-#: contrib/localflavor/id/id_choices.py:54
-msgid "Bengkulu"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:12
-#: contrib/localflavor/id/id_choices.py:47
-msgid "Yogyakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:13
-#: contrib/localflavor/id/id_choices.py:51
-msgid "Jakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:14
-#: contrib/localflavor/id/id_choices.py:75
-msgid "Gorontalo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:15
-#: contrib/localflavor/id/id_choices.py:57
-msgid "Jambi"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:16
-msgid "Jawa Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:17
-msgid "Jawa Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:18
-msgid "Jawa Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:19
-#: contrib/localflavor/id/id_choices.py:88
-msgid "Kalimantan Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:20
-#: contrib/localflavor/id/id_choices.py:66
-msgid "Kalimantan Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:21
-#: contrib/localflavor/id/id_choices.py:89
-msgid "Kalimantan Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:22
-#: contrib/localflavor/id/id_choices.py:90
-msgid "Kalimantan Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:23
-msgid "Kepulauan Bangka-Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:24
-#: contrib/localflavor/id/id_choices.py:62
-msgid "Kepulauan Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:25
-#: contrib/localflavor/id/id_choices.py:55
-msgid "Lampung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:26
-#: contrib/localflavor/id/id_choices.py:70
-msgid "Maluku"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:27
-#: contrib/localflavor/id/id_choices.py:71
-msgid "Maluku Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:28
-#: contrib/localflavor/id/id_choices.py:59
-msgid "Nanggroe Aceh Darussalam"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:29
-msgid "Nusa Tenggara Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:30
-msgid "Nusa Tenggara Timur"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:31
-msgid "Papua"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:32
-msgid "Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:33
-#: contrib/localflavor/id/id_choices.py:60
-msgid "Riau"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:34
-#: contrib/localflavor/id/id_choices.py:68
-msgid "Sulawesi Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:35
-#: contrib/localflavor/id/id_choices.py:69
-msgid "Sulawesi Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:36
-#: contrib/localflavor/id/id_choices.py:76
-msgid "Sulawesi Tengah"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:37
-#: contrib/localflavor/id/id_choices.py:79
-msgid "Sulawesi Tenggara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:38
-msgid "Sulawesi Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:39
-#: contrib/localflavor/id/id_choices.py:52
-msgid "Sumatera Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:40
-#: contrib/localflavor/id/id_choices.py:56
-msgid "Sumatera Selatan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:41
-#: contrib/localflavor/id/id_choices.py:58
-msgid "Sumatera Utara"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:46
-msgid "Magelang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:48
-msgid "Surakarta - Solo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:49
-msgid "Madiun"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:50
-msgid "Kediri"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:53
-msgid "Tapanuli"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:61
-msgid "Kepulauan Bangka Belitung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:63
-msgid "Corps Consulate"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:64
-msgid "Corps Diplomatic"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:65
-msgid "Bandung"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:67
-msgid "Sulawesi Utara Daratan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:72
-msgid "NTT - Timor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:74
-msgid "Sulawesi Utara Kepulauan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:77
-msgid "NTB - Lombok"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:78
-msgid "Papua dan Papua Barat"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:80
-msgid "Cirebon"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:81
-msgid "NTB - Sumbawa"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:82
-msgid "NTT - Flores"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:83
-msgid "NTT - Sumba"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:84
-msgid "Bogor"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:85
-msgid "Pekalongan"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:86
-msgid "Semarang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:87
-msgid "Pati"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:91
-msgid "Surabaya"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:92
-msgid "Madura"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:93
-msgid "Malang"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:94
-msgid "Jember"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:95
-msgid "Banyumas"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:96
-msgid "Federal Government"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:97
-msgid "Bojonegoro"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:98
-msgid "Purwakarta"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:99
-msgid "Sidoarjo"
-msgstr ""
-
-#: contrib/localflavor/id/id_choices.py:100
-msgid "Garut"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:8
-msgid "Antrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:9
-msgid "Armagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:10
-msgid "Carlow"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:11
-msgid "Cavan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:12
-msgid "Clare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:13
-msgid "Cork"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:14
-msgid "Derry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:15
-msgid "Donegal"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:16
-msgid "Down"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:17
-msgid "Dublin"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:18
-msgid "Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:19
-msgid "Galway"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:20
-msgid "Kerry"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:21
-msgid "Kildare"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:22
-msgid "Kilkenny"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:23
-msgid "Laois"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:24
-msgid "Leitrim"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:25
-msgid "Limerick"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:26
-msgid "Longford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:27
-msgid "Louth"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:28
-msgid "Mayo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:29
-msgid "Meath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:30
-msgid "Monaghan"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:31
-msgid "Offaly"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:32
-msgid "Roscommon"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:33
-msgid "Sligo"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:34
-msgid "Tipperary"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:35
-msgid "Tyrone"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:36
-msgid "Waterford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:37
-msgid "Westmeath"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:38
-msgid "Wexford"
-msgstr ""
-
-#: contrib/localflavor/ie/ie_counties.py:39
-msgid "Wicklow"
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:15
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Hãy nhập mã bưu điện theo dạng XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:18
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:19
-msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:15
-msgid "Enter a valid zip code."
-msgstr "Hãy nhập mã bưu điện hợp lệ."
-
-#: contrib/localflavor/it/forms.py:44
-msgid "Enter a valid Social Security number."
-msgstr "Hãy nhập số Bảo hiểm Xã hội hợp lệ."
-
-#: contrib/localflavor/it/forms.py:69
-msgid "Enter a valid VAT number."
-msgstr "Hãy nhập số VAT hợp lệ."
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Hãy nhập mã bưu điện theo dạng XXXXXXX hoặc XXX-XXXX."
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "Thành phố Hirosima"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr ""
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "Thành phố Okinawa"
-
-#: contrib/localflavor/kw/forms.py:25
-msgid "Enter a valid Kuwaiti Civil ID number"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr ""
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:22
-msgid "Enter a valid postal code"
-msgstr "Hãy nhập mã bưu điện có hiệu lực"
-
-#: contrib/localflavor/nl/forms.py:79
-msgid "Enter a valid SoFi number"
-msgstr "Hãy nhập số SoFi hợp lệ"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr ""
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:34
-msgid "Enter a valid Norwegian social security number."
-msgstr "Hãy nhập số an sinh xã hội có hiệu lực"
-
-#: contrib/localflavor/pe/forms.py:25
-msgid "This field requires 8 digits."
-msgstr "Bạn cần điền 8 chữ số."
-
-#: contrib/localflavor/pe/forms.py:53
-msgid "This field requires 11 digits."
-msgstr "Bạn cần điền 11 chữ số."
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "Số CMTND gồm 11 chữ số"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Hãy nhập mã số thuế theo mẫu XXX-XXX-XX-XX hoặc XX-XX-XXX-XXX"
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:109
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:110
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:148
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "Hãy nhập mã bưu điện theo mẫu XX-XXX"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:17
-msgid "Enter a zip code in the format XXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/pt/forms.py:37
-msgid "Phone numbers must have 9 digits, or start by + or 00."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:50
-msgid "Enter a valid Swedish organisation number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:107
-msgid "Enter a valid Swedish personal identity number."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:108
-msgid "Co-ordination numbers are not allowed."
-msgstr ""
-
-#: contrib/localflavor/se/forms.py:150
-msgid "Enter a Swedish postal code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:15
-msgid "Stockholm"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:16
-msgid "Västerbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:17
-msgid "Norrbotten"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:18
-msgid "Uppsala"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:19
-msgid "Södermanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:20
-msgid "Östergötland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:21
-msgid "Jönköping"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:22
-msgid "Kronoberg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:23
-msgid "Kalmar"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:24
-msgid "Gotland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:25
-msgid "Blekinge"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:26
-msgid "Skåne"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:27
-msgid "Halland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:28
-msgid "Västra Götaland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:29
-msgid "Värmland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:30
-msgid "Örebro"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:31
-msgid "Västmanland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:32
-msgid "Dalarna"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:33
-msgid "Gävleborg"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:34
-msgid "Västernorrland"
-msgstr ""
-
-#: contrib/localflavor/se/se_counties.py:35
-msgid "Jämtland"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "Vùng South Yorkshire"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "Nước Anh"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "Bắc Ai-len"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "Sccotland"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "Xứ Wale"
-
-#: contrib/localflavor/us/forms.py:17
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Hãy nhập mã bưu điện theo mẫu XXXXX hoặc XXXXX-XXXX"
-
-#: contrib/localflavor/us/forms.py:26
-msgid "Phone numbers must be in XXX-XXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:55
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Hãy nhập số an sinh xã hội dưới dạng XXX-XX-XXXX"
-
-#: contrib/localflavor/us/forms.py:88
-msgid "Enter a U.S. state or territory."
-msgstr ""
-
-#: contrib/localflavor/us/models.py:8
-msgid "U.S. state (two uppercase letters)"
-msgstr ""
-
-#: contrib/localflavor/us/models.py:17
-msgid "Phone number"
-msgstr "Số điện thoại"
-
-#: contrib/localflavor/uy/forms.py:28
-msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/uy/forms.py:30
-msgid "Enter a valid CI number."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:21
-msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:55
-msgid "Enter a valid South African postal code"
-msgstr "Hãy nhập mã bưu điện Nam Phi có hiệu lực"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr ""
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "Tây Bắc"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr ""
-
-#: contrib/messages/tests/base.py:101
-msgid "lazy message"
-msgstr ""
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "Chuyển hướng từ"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Đây phải là đường dẫn tuyệt đối, không bao gồm tên miền. Ví dụ: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "Chuyển hướng tới"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Đây có thể là đường dẫn tuyệt đối hoặc địa chỉ đầy đủ bắt đầu với 'http://'"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "Chuyển hướng"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "Chuyển hướng"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr ""
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr ""
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "Ngày hết hạn"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr ""
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr ""
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "Tên miền"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "Tên hiển thị"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr ""
-
-#: core/validators.py:19 forms/fields.py:66
-msgid "Enter a valid value."
-msgstr "Nhập một giá trị hợp lệ."
-
-#: core/validators.py:69 forms/fields.py:515
-msgid "Enter a valid URL."
-msgstr "Nhập một URL hợp lệ."
-
-#: core/validators.py:71 forms/fields.py:516
-msgid "This URL appears to be a broken link."
-msgstr "URL này có vẻ là một liên kết bị đứt gãy."
-
-#: core/validators.py:88 forms/fields.py:859
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Nhập một 'slug' hợp lệ gồm chữ cái, số, gạch dưới và gạch nối."
-
-#: core/validators.py:91 forms/fields.py:852
-msgid "Enter a valid IPv4 address."
-msgstr "Nhập một địa chỉ IPv4 hợp lệ."
-
-#: core/validators.py:94 db/models/fields/__init__.py:591
-msgid "Enter only digits separated by commas."
-msgstr "Chỉ nhập chữ số, cách nhau bằng dấu phẩy."
-
-#: core/validators.py:100
-#, python-format
-msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
-msgstr ""
-
-#: core/validators.py:118 forms/fields.py:196 forms/fields.py:248
-#, python-format
-msgid "Ensure this value is less than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:123 forms/fields.py:197 forms/fields.py:249
-#, python-format
-msgid "Ensure this value is greater than or equal to %(limit_value)s."
-msgstr ""
-
-#: core/validators.py:129
-#, python-format
-msgid ""
-"Ensure this value has at least %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: core/validators.py:135
-#, python-format
-msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
-msgstr ""
-
-#: db/models/base.py:775
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-
-#: db/models/base.py:790 db/models/base.py:798
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s có %(field_label)s đã tồn tại."
-
-#: db/models/fields/__init__.py:62
-#, python-format
-msgid "Value %r is not a valid choice."
-msgstr ""
-
-#: db/models/fields/__init__.py:63
-msgid "This field cannot be null."
-msgstr "Trường này không thể để trống."
-
-#: db/models/fields/__init__.py:64
-msgid "This field cannot be blank."
-msgstr ""
-
-#: db/models/fields/__init__.py:69
-#, python-format
-msgid "Field of type: %(field_type)s"
-msgstr ""
-
-#: db/models/fields/__init__.py:475 db/models/fields/__init__.py:871
-#: db/models/fields/__init__.py:967 db/models/fields/__init__.py:978
-#: db/models/fields/__init__.py:1005
-msgid "Integer"
-msgstr "Số nguyên"
-
-#: db/models/fields/__init__.py:479
-msgid "This value must be an integer."
-msgstr "Giá trị này phải là số nguyên."
-
-#: db/models/fields/__init__.py:514
-msgid "This value must be either True or False."
-msgstr "Giá trị này phải là True hoặc False."
-
-#: db/models/fields/__init__.py:516
-msgid "Boolean (Either True or False)"
-msgstr "Luận lý (hoặc là Đúng hoặc là Sai)"
-
-#: db/models/fields/__init__.py:558 db/models/fields/__init__.py:988
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr ""
-
-#: db/models/fields/__init__.py:586
-msgid "Comma-separated integers"
-msgstr "Các số nguyên được phân cách bằng dấu phẩy"
-
-#: db/models/fields/__init__.py:600
-msgid "Date (without time)"
-msgstr "Ngày (không có giờ)"
-
-#: db/models/fields/__init__.py:604
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Nhập một ngày hợp lệ theo dạng YYYY-MM-DD."
-
-#: db/models/fields/__init__.py:605
-#, python-format
-msgid "Invalid date: %s"
-msgstr "Ngày không hợp lệ: %s"
-
-#: db/models/fields/__init__.py:686
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-"Nhập một ngày/thời gian hợp lệ theo dạng YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:688
-msgid "Date (with time)"
-msgstr "Ngày (có giờ)"
-
-#: db/models/fields/__init__.py:754
-msgid "This value must be a decimal number."
-msgstr "Giá trị này phải là số thập phân."
-
-#: db/models/fields/__init__.py:756
-msgid "Decimal number"
-msgstr "Số thập phân"
-
-#: db/models/fields/__init__.py:811
-msgid "E-mail address"
-msgstr "Địa chỉ email"
-
-#: db/models/fields/__init__.py:818 db/models/fields/files.py:220
-#: db/models/fields/files.py:331
-msgid "File path"
-msgstr "Đường dẫn tắt tới file"
-
-#: db/models/fields/__init__.py:841 db/models/fields/__init__.py:869
-msgid "This value must be a float."
-msgstr ""
-
-#: db/models/fields/__init__.py:843
-msgid "Floating point number"
-msgstr "Giá trị dấu chấm động"
-
-#: db/models/fields/__init__.py:896
-msgid "Big (8 byte) integer"
-msgstr ""
-
-#: db/models/fields/__init__.py:925
-msgid "This value must be either None, True or False."
-msgstr "Giá trị này phải là None, True hoặc False."
-
-#: db/models/fields/__init__.py:927
-msgid "Boolean (Either True, False or None)"
-msgstr "Luận lý (Có thể Đúng, Sai hoặc Không cái nào đúng)"
-
-#: db/models/fields/__init__.py:1011
-msgid "Text"
-msgstr "Đoạn văn"
-
-#: db/models/fields/__init__.py:1027
-msgid "Time"
-msgstr "Giờ"
-
-#: db/models/fields/__init__.py:1031
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Nhập một thời gian hợp lệ theo dạng HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:1115
-msgid "XML text"
-msgstr ""
-
-#: db/models/fields/related.py:755
-#, python-format
-msgid "Model %(model)s with pk %(pk)r does not exist."
-msgstr ""
-
-#: db/models/fields/related.py:757
-msgid "Foreign Key (type determined by related field)"
-msgstr ""
-
-#: db/models/fields/related.py:879
-msgid "One-to-one relationship"
-msgstr ""
-
-#: db/models/fields/related.py:939
-msgid "Many-to-many relationship"
-msgstr ""
-
-#: db/models/fields/related.py:959
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Giữ \"Control\", hoặc \"Command\" trên Mac, để chọn nhiều hơn một."
-
-#: db/models/fields/related.py:1020
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Hãy nhập một ID %(self)s hợp lệ. Giá trị %(value)r không hợp lệ."
-msgstr[1] "Hãy nhập một ID %(self)s hợp lệ. Giá trị %(value)r không hợp lệ."
-
-#: forms/fields.py:65
-msgid "This field is required."
-msgstr "Trường này là bắt buộc."
-
-#: forms/fields.py:195
-msgid "Enter a whole number."
-msgstr "Nhập một số tổng thể."
-
-#: forms/fields.py:225 forms/fields.py:247
-msgid "Enter a number."
-msgstr "Nhập một số."
-
-#: forms/fields.py:250
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "Hãy chắc chắn rằng tổng cộng không nhiều hơn %s chữ số."
-
-#: forms/fields.py:251
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "Hãy chắc chắn rằng không có nhiều hơn %s chữ số thập phân."
-
-#: forms/fields.py:252
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-"Hãy chắc chắn rằng không có nhiều hơn %s chữ số trước dấu phẩy thập phân."
-
-#: forms/fields.py:309 forms/fields.py:824
-msgid "Enter a valid date."
-msgstr "Nhập một ngày hợp lệ."
-
-#: forms/fields.py:337 forms/fields.py:825
-msgid "Enter a valid time."
-msgstr "Nhập một thời gian hợp lệ."
-
-#: forms/fields.py:363
-msgid "Enter a valid date/time."
-msgstr "Nhập một ngày/thời gian hợp lệ."
-
-#: forms/fields.py:421
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Không có tập tin nào được gửi. Hãy kiểm tra kiểu mã hóa của biểu mẫu."
-
-#: forms/fields.py:422
-msgid "No file was submitted."
-msgstr "Không có tập tin nào được gửi."
-
-#: forms/fields.py:423
-msgid "The submitted file is empty."
-msgstr "Tập tin được gửi là rỗng."
-
-#: forms/fields.py:424
-#, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:459
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Hãy tải lên một hình ảnh hợp lệ. Tập tin mà bạn đã tải không phải là hình "
-"ảnh hoặc đã bị hư hỏng."
-
-#: forms/fields.py:582 forms/fields.py:657
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-"Hãy chọn một lựa chọn hợp lệ. %(value)s không phải là một trong các lựa chọn "
-"khả thi."
-
-#: forms/fields.py:658 forms/fields.py:720 forms/models.py:961
-msgid "Enter a list of values."
-msgstr "Nhập một danh sách giá trị."
-
-#: forms/formsets.py:290 forms/formsets.py:292
-msgid "Order"
-msgstr "Thứ tự"
-
-#: forms/models.py:538
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr ""
-
-#: forms/models.py:542
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr ""
-
-#: forms/models.py:548
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-
-#: forms/models.py:556
-msgid "Please correct the duplicate values below."
-msgstr ""
-
-#: forms/models.py:820
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-
-#: forms/models.py:886
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Hãy chọn một lựa chọn hợp lệ. Lựa chọn đó không phải là một trong các lựa "
-"chọn khả thi."
-
-#: forms/models.py:962
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-"Hãy chọn một lựa chọn hợp lệ. %s không phải là một trong các lựa chọn khả "
-"thi."
-
-#: forms/models.py:964
-#, python-format
-msgid "\"%s\" is not a valid value for a primary key."
-msgstr ""
-
-#: template/defaultfilters.py:775
-msgid "yes,no,maybe"
-msgstr "Có, Không, Có thể"
-
-#: template/defaultfilters.py:806
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: template/defaultfilters.py:808
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:810
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:811
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:42
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:43
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:48
-msgid "PM"
-msgstr "chiều"
-
-#: utils/dateformat.py:49
-msgid "AM"
-msgstr "sáng"
-
-#: utils/dateformat.py:98
-msgid "midnight"
-msgstr "Nửa đêm"
-
-#: utils/dateformat.py:100
-msgid "noon"
-msgstr "Buổi trưa"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Thứ 2"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Thứ 3"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Thứ 4"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Thứ 5"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Thứ 6"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Thứ 7"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Chủ nhật"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "Thứ 2"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "Thứ 3"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "Thứ 4"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "Thứ 5"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "Thứ 6"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "Thứ 7"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "Chủ nhật"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "Tháng 1"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "Tháng 2"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "Tháng 3"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "Tháng 4"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "Tháng 5"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "Tháng 6"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "Tháng 7"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "Tháng 8"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "Tháng 9"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "Tháng 10"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "Tháng 11"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "Tháng 12"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "Tháng 1"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "Tháng 2"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "Tháng 3"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "Tháng 4"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "Tháng 5"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "Tháng 6"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "Tháng 7"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "Tháng 8"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "Tháng 9"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "Tháng 10"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "Tháng 11"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "Tháng 12"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "Tháng 1"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "Tháng 2"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "Tháng 8"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "Tháng 9"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "Tháng 10"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "Tháng 11"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "Tháng 12"
-
-#: utils/text.py:130
-msgid "or"
-msgstr "hoặc"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "năm"
-msgstr[1] "năm"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "tháng"
-msgstr[1] "tháng"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "tuần"
-msgstr[1] "tuần"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "ngày"
-msgstr[1] "ngày"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "phút"
-msgstr[1] "phút"
-
-#: utils/timesince.py:45
-msgid "minutes"
-msgstr "phút"
-
-#: utils/timesince.py:50
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr ""
-
-#: utils/timesince.py:56
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: utils/translation/trans_real.py:512
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation/trans_real.py:513
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: utils/translation/trans_real.py:514
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation/trans_real.py:535
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation/trans_real.py:536
-msgid "MONTH_DAY_FORMAT"
-msgstr "F j"
-
-#: views/generic/create_update.py:115
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s đã được tạo thành công."
-
-#: views/generic/create_update.py:158
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s đã được cập nhật thành công."
-
-#: views/generic/create_update.py:201
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s đã bị xóa."
-
-#~ msgid ""
-#~ "Ensure this value has at most %(max)d characters (it has %(length)d)."
-#~ msgstr ""
-#~ "Hãy chắc chắn rằng giá trị này có nhiều nhất %(max)d kí tự (nó có %"
-#~ "(length)d)."
-
-#~ msgid ""
-#~ "Ensure this value has at least %(min)d characters (it has %(length)d)."
-#~ msgstr ""
-#~ "Hãy chắc chắn rằng giá trị này có ít nhất %(min)d kí tự (nó có %(length)"
-#~ "d)."
-
-#~ msgid "Ensure this value is less than or equal to %s."
-#~ msgstr "Hãy chắc chắn rằng giá trị này nhỏ hơn hoặc bằng %s."
-
-#~ msgid "Ensure this value is greater than or equal to %s."
-#~ msgstr "Hãy chắc chắn rằng giá trị này lớn hơn hoặc bằng %s."
-
-#~ msgid "Portugese"
-#~ msgstr "Tiếng Bồ Đào Nha"
-
-#~ msgid "Old password:"
-#~ msgstr "Mật khẩu cũ"
-
-#~ msgid "Add user"
-#~ msgstr "Thêm người sử dụng khác"
diff --git a/parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index e554d0d..0000000
--- a/parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 1dde473..0000000
--- a/parts/django/django/conf/locale/vi/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,115 +0,0 @@
-# This file is distributed under the same license as the Django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-21 13:49+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Chọn tất cả"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Thêm"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Xóa"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:63
-msgid "Clear all"
-msgstr "Xóa tất cả"
-
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr ""
-
-#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Show"
-msgstr "Hiện ra"
-
-#: contrib/admin/media/js/collapse.js:16
-#: contrib/admin/media/js/collapse.min.js:1
-msgid "Hide"
-msgstr "Dấu đi"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:50
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
-msgid "Now"
-msgstr "Bây giờ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:54
-msgid "Clock"
-msgstr "Đồng hồ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Choose a time"
-msgstr "Chọn giờ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
-msgid "Midnight"
-msgstr "Nửa đêm"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-msgid "6 a.m."
-msgstr "6 giờ sáng"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-msgid "Noon"
-msgstr "Buổi trưa"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
-msgid "Cancel"
-msgstr "Hủy bỏ"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
-msgid "Today"
-msgstr "Hôm nay"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
-msgid "Calendar"
-msgstr "Lịch"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
-msgid "Yesterday"
-msgstr "Hôm qua"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
-msgid "Tomorrow"
-msgstr "Ngày mai"
diff --git a/parts/django/django/conf/locale/vi/__init__.py b/parts/django/django/conf/locale/vi/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/vi/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/vi/formats.py b/parts/django/django/conf/locale/vi/formats.py
deleted file mode 100644
index 3a42079..0000000
--- a/parts/django/django/conf/locale/vi/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-DATE_FORMAT = r'\N\gà\y d \t\há\n\g n \nă\m Y'
-TIME_FORMAT = 'H:i:s'
-DATETIME_FORMAT = r'H:i:s \N\gà\y d \t\há\n\g n \nă\m Y'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd-m-Y'
-SHORT_DATETIME_FORMAT = 'H:i:s d-m-Y'
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
deleted file mode 100644
index 2c58356..0000000
--- a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.po b/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.po
deleted file mode 100644
index 8bba862..0000000
--- a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4208 +0,0 @@
-# This file is distributed under the same license as the django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-12-02 22:52+0800\n"
-"PO-Revision-Date: 2009-07-23 11:47+0800\n"
-"Last-Translator: Qing Feng <paradise.qingfeng@gmail.com>\n"
-"Language-Team: Simplified Chinese <paradise.qingfeng@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Chinese\n"
-"X-Poedit-Country: CHINA\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "阿拉伯语"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "孟加拉语"
-
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "保加利亚语"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "加泰罗尼亚语"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "捷克语"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "威尔士语"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "丹麦语"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "德语"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "希腊语"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "英语"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "西班牙语"
-
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "爱沙尼亚语"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "阿根廷的西班牙语"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "巴斯克语"
-
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "波斯语"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "芬兰语"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "法语"
-
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "爱尔兰语"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "加利西亚语"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "匈牙利语"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "希伯来语"
-
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "北印度语"
-
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "克罗地亚语"
-
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "冰岛语"
-
-#: conf/global_settings.py:68
-msgid "Italian"
-msgstr "意大利语"
-
-#: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "日语"
-
-#: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "格鲁吉亚语"
-
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "韩语"
-
-#: conf/global_settings.py:72
-msgid "Khmer"
-msgstr "高棉语"
-
-#: conf/global_settings.py:73
-msgid "Kannada"
-msgstr "埃纳德语"
-
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "拉脱维亚语"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "立陶宛语"
-
-#: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "马其顿语"
-
-#: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "荷兰语"
-
-#: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "挪威语"
-
-#: conf/global_settings.py:79
-msgid "Polish"
-msgstr "波兰语"
-
-#: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr "葡萄牙语"
-
-#: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "巴西葡萄牙语"
-
-#: conf/global_settings.py:82
-msgid "Romanian"
-msgstr "罗马尼亚语"
-
-#: conf/global_settings.py:83
-msgid "Russian"
-msgstr "俄语"
-
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "斯洛伐克语"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "斯洛文尼亚语"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "塞尔维亚语"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "瑞典语"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "泰米尔语"
-
-#: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "泰卢固语"
-
-#: conf/global_settings.py:90
-msgid "Thai"
-msgstr "泰语"
-
-#: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "土耳其语"
-
-#: conf/global_settings.py:92
-msgid "Ukrainian"
-msgstr "乌克兰语"
-
-#: conf/global_settings.py:93
-msgid "Simplified Chinese"
-msgstr "简体中文"
-
-#: conf/global_settings.py:94
-msgid "Traditional Chinese"
-msgstr "繁体中文"
-
-#: contrib/admin/actions.py:60
-#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "删除了%(count)d的%(items)s"
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
-msgid "Are you sure?"
-msgstr "你确认吗?"
-
-#: contrib/admin/actions.py:85
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "删除了选择的%(verbose_name_plural)s"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>以 %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:91
-#: contrib/admin/filterspecs.py:146 contrib/admin/filterspecs.py:172
-msgid "All"
-msgstr "全部"
-
-#: contrib/admin/filterspecs.py:112
-msgid "Any date"
-msgstr "任意日期"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Today"
-msgstr "今天"
-
-#: contrib/admin/filterspecs.py:116
-msgid "Past 7 days"
-msgstr "前7天"
-
-#: contrib/admin/filterspecs.py:118
-msgid "This month"
-msgstr "本月"
-
-#: contrib/admin/filterspecs.py:120
-msgid "This year"
-msgstr "今年"
-
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
-msgid "Yes"
-msgstr "是"
-
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
-msgid "No"
-msgstr "否"
-
-#: contrib/admin/filterspecs.py:153 forms/widgets.py:390
-msgid "Unknown"
-msgstr "未知"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "动作时间"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "对象id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "对象表示"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "动作标志"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "修改消息"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "日志记录"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "日志记录"
-
-#: contrib/admin/options.py:60 contrib/admin/options.py:121
-msgid "None"
-msgstr "无"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "已修改 %s 。"
-
-#: contrib/admin/options.py:338 contrib/admin/options.py:348
-#: contrib/comments/templates/comments/preview.html:15 forms/models.py:288
-msgid "and"
-msgstr "和"
-
-#: contrib/admin/options.py:343
-#, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "已添加 %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:347
-#, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "已变更 %(list)s for %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:352
-#, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "已删除 %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "没有字段被修改。"
-
-#: contrib/admin/options.py:417 contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" 添加成功。"
-
-#: contrib/admin/options.py:421 contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "你可以在下面再次编辑它。"
-
-#: contrib/admin/options.py:431 contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "你可以在下面增加另一个 %s 。"
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" 修改成功。"
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" 添加成功。你可以在下面再次编辑它。"
-
-#: contrib/admin/options.py:528
-#, python-format
-msgid "Add %s"
-msgstr "增加 %s"
-
-#: contrib/admin/options.py:559 contrib/admin/options.py:673
-#, python-format
-msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "具有主键 %(key)r 的对象 %(name)s 不存在。"
-
-#: contrib/admin/options.py:606
-#, python-format
-msgid "Change %s"
-msgstr "修改 %s"
-
-#: contrib/admin/options.py:638
-msgid "Database error"
-msgstr "数据库错误"
-
-#: contrib/admin/options.py:688
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" 删除成功。"
-
-#: contrib/admin/options.py:724
-#, python-format
-msgid "Change history: %s"
-msgstr "变更历史: %s"
-
-#: contrib/admin/sites.py:16 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "请输入正确的用户名和密码。请注意两者都是大小写敏感的。"
-
-#: contrib/admin/sites.py:226 contrib/admin/views/decorators.py:40
-msgid "Please log in again, because your session has expired."
-msgstr "请重新登录,因为你的会话已经过期。"
-
-#: contrib/admin/sites.py:233 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"似乎你的浏览器没有配置为接受 cookie 。请允许 cookie,再刷新本页面,重试一次。"
-
-#: contrib/admin/sites.py:249 contrib/admin/sites.py:255
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "用户名不能包含 '@' 字符。"
-
-#: contrib/admin/sites.py:252 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "你的 e-mail 地址不是你的用户名。换 '%s' 试试。"
-
-#: contrib/admin/sites.py:312
-msgid "Site administration"
-msgstr "站点管理"
-
-#: contrib/admin/sites.py:325 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "登录"
-
-#: contrib/admin/sites.py:372
-#, python-format
-msgid "%s administration"
-msgstr "%s 管理"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "一个或多个 %(fieldname)s 在 %(name)s 中: %(obj)s"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "一个或多个 %(fieldname)s 在 %(name)s 中:"
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "日期:"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "时间:"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "当前:"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "改动:"
-
-#: contrib/admin/widgets.py:123
-msgid "Lookup"
-msgstr "查询"
-
-#: contrib/admin/widgets.py:230
-msgid "Add Another"
-msgstr "添加另一个"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "页面没有找到"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "很报歉,请求页面无法找到。"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "首页"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "服务器错误"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "服务器错误(500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "服务器错误 <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"发生了一个错误。系统已将错误通过电子邮件报告给了站点管理员,相信问题应该会很"
-"快得到解决。感谢您的耐心。"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:28
-msgid "Welcome,"
-msgstr "欢迎,"
-
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "文档"
-
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "修改密码"
-
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "注销"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django 站点管理员"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django 管理"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "增加"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "历史"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
-msgid "View on site"
-msgstr "在站点上查看"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "请修正下面的错误。"
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "增加 %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "过滤器"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:246
-msgid "Delete"
-msgstr "删除"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"删除 %(object_name)s '%(escaped_object)s' 会导致删除相关的对象,但你的帐号无"
-"权删除下列类型的对象:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"你确认想要删除 %(object_name)s \"%(escaped_object)s\"? 下列所有相关的项目都"
-"将被删除:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "是的,我确定"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " 以 %(filter_title)s"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "模型在 %(name)s 应用中可用。"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "修改"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "你无权修改任何东西。"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "最近动作"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "我的动作"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "无可用的"
-
-#: contrib/admin/templates/admin/index.html:72
-msgid "Unknown content"
-msgstr "未知内容"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"你的数据库安装有误。确保已经创建了相应的数据库表,并确保数据库可被相关的用户"
-"读取。"
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "用户名:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "密码:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "日期/时间"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "用户"
-
-#: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
-msgid "Action"
-msgstr "动作"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "Y-m-d H:i:s"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr "该对象没有变更历史记录。可能从未通过这个管理站点添加。"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "显示全部"
-
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "保存"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Search"
-msgstr "搜索"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "执行"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 条结果"
-msgstr[1] "%(counter)s 条结果"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "总共 %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "保存为新的"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "保存并增加另一个"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "保存并继续编辑"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "首先,输入一个用户名和密码。然后,你就可以编辑更多的用户选项。"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "用户名"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:184
-msgid "Password"
-msgstr "密码"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "密码(重复)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "为了校验,输入与上面相同的密码。"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "为用户 <strong>%(username)s</strong> 输入一个新的密码。"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-msgid "Delete?"
-msgstr "删除?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "感谢您今天在本站花费了一些宝贵时间。"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "重新登录"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "密码修改"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "密码修改成功"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "你的密码已修改。"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"请输入你的旧密码,为了安全起见,接着要输入两遍新密码,以便我们校验你输入的是"
-"否正确。"
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "旧密码:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "新密码:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "确认密码:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "修改我的密码"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "密码重设"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-msgid "Password reset complete"
-msgstr "完成密码重设"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "你的口令己经设置。现在你可以继续进行登录。"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-msgid "Password reset confirmation"
-msgstr "密码重设确认"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-msgid "Enter new password"
-msgstr "输入新密码"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr "请输入两遍新密码,以便我们校验你输入的是否正确。"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-msgid "Password reset unsuccessful"
-msgstr "密码重设失败"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr "密码重置链接无效,可能是因为它已使用。可以请求一次新的密码重置。"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "密码重设成功"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"我们已经按你所提交的电子邮箱地址发送了密码设置说明。你应该很快就能收到这封邮"
-"件。"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "之所以收到这封邮件,是因为你请求了密码重设"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "在 %(site_name)s 你的用户帐号"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "请访问该页面并选择一个新密码:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "你的用户名,如果已忘记的话:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "感谢使用我们的站点!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s 团队"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"忘记了你的密码?请在下面输入你的 e-mail 地址,我们将把新密码设置说明通过邮件"
-"发送给你。"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-mail 地址:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "重设我的密码"
-
-#: contrib/admin/templatetags/admin_list.py:284
-msgid "All dates"
-msgstr "所有日期"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "选择 %s"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "选择 %s 来修改"
-
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
-msgid "site"
-msgstr "站点"
-
-#: contrib/admin/views/template.py:38
-msgid "template"
-msgstr "模板"
-
-#: contrib/admindocs/views.py:57 contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "标签:"
-
-#: contrib/admindocs/views.py:90 contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "过滤器:"
-
-#: contrib/admindocs/views.py:154 contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "视图:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "应用 %r 没有找到"
-
-#: contrib/admindocs/views.py:193
-#, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "在应用 %(app_label)r 里找不到模型 %(model_name)r"
-
-#: contrib/admindocs/views.py:205
-#, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "相关的 `%(app_label)s.%(data_type)s` 对象"
-
-#: contrib/admindocs/views.py:205 contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241 contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "模型:"
-
-#: contrib/admindocs/views.py:236
-#, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "相关的 `%(app_label)s.%(object_name)s` 对象"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "所有 %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "%s 的数量"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s 对象的字段"
-
-#: contrib/admindocs/views.py:314 contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327 contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "整数"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "布尔值(真或假)"
-
-#: contrib/admindocs/views.py:316 contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "字符串(最长 %(max_length)s 位)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "逗号分隔的整数"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "日期(无时间)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "日期(带时间)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "小数"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "E-mail 地址"
-
-#: contrib/admindocs/views.py:322 contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "文件路径"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "浮点数"
-
-#: contrib/admindocs/views.py:328 contrib/comments/models.py:58
-msgid "IP address"
-msgstr "IP 地址"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "布尔值(真、假或无)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "与父模型的关系"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "电话号码"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "文本"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "时间"
-
-#: contrib/admindocs/views.py:339 contrib/comments/forms.py:21
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "美国州名(两个大写字母)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "XML 文本"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s 似乎不是一个 urlpattern 对象"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "书签"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "文档书签"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">为了安装书签,将链接拖到你的书签工具条,\n"
-"或者鼠标右击链接,添加到你的书签中。现在你可以从这个站\n"
-"点的任何页面选择书签。注意,其中某些书签要求你在一台\n"
-"被指定为\"内部\"的计算机上查看(如果不确定你的计算机\n"
-"是否为\"内部\"的,不妨跟你的系统管理员沟通一下)。</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "关于本页面的文档"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "从任何页面跳转到生成该页面的 view 文档。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "显示对象 ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "为那些展现单个对象的页面,显示 content-type 和唯一 ID。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "编辑该对象(当前窗口)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "跳转到用于展现单个对象的页面的管理页。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "编辑该对象(新窗口)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "同上,但在新窗口中打开管理页面。"
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "个人信息"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "权限"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "重要日期"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "组"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "新增用户"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "密码修改成功。"
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "修改密码:%s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:127
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr "必填。不多于30个字符。只能用字母、数字和下划线。"
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "该值只能包含字母、数字和下划线。"
-
-#: contrib/auth/forms.py:18
-msgid "Password confirmation"
-msgstr "密码确认"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "已存在一位使用该名字的用户。"
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "两个密码字段不一致。"
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "该帐号未激活。"
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "你的浏览器好象不允许使用cookie。登录需要使用启用cookie。"
-
-#: contrib/auth/forms.py:100
-msgid "E-mail"
-msgstr "E-mail"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "该电子邮件地址没有关联任何用户帐号。你确定已经注册过了?"
-
-#: contrib/auth/forms.py:134
-#, python-format
-msgid "Password reset on %s"
-msgstr "密码重设于 %s"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "新密码"
-
-#: contrib/auth/forms.py:143
-msgid "New password confirmation"
-msgstr "新密码确认"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "旧密码"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "你的旧密码不正确。请重新输入。"
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
-msgid "name"
-msgstr "名称"
-
-#: contrib/auth/models.py:65
-msgid "codename"
-msgstr "代码名称"
-
-#: contrib/auth/models.py:68
-msgid "permission"
-msgstr "权限"
-
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
-msgid "permissions"
-msgstr "权限"
-
-#: contrib/auth/models.py:90
-msgid "group"
-msgstr "组"
-
-#: contrib/auth/models.py:91 contrib/auth/models.py:137
-msgid "groups"
-msgstr "组"
-
-#: contrib/auth/models.py:127
-msgid "username"
-msgstr "用户名"
-
-#: contrib/auth/models.py:128
-msgid "first name"
-msgstr "名字"
-
-#: contrib/auth/models.py:129
-msgid "last name"
-msgstr "姓氏"
-
-#: contrib/auth/models.py:130
-msgid "e-mail address"
-msgstr "e-mail 地址"
-
-#: contrib/auth/models.py:131
-msgid "password"
-msgstr "密码"
-
-#: contrib/auth/models.py:131
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"使用 '[algo]$[salt]$[hexdigest]' 或使用 <a href=\"password/\">修改密码表单</"
-"a>"
-
-#: contrib/auth/models.py:132
-msgid "staff status"
-msgstr "职员状态"
-
-#: contrib/auth/models.py:132
-msgid "Designates whether the user can log into this admin site."
-msgstr "指明用户是否可以登录到这个管理站点。"
-
-#: contrib/auth/models.py:133
-msgid "active"
-msgstr "有效"
-
-#: contrib/auth/models.py:133
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr "指明用户是否被认为活跃的。以反选代替删除帐号。"
-
-#: contrib/auth/models.py:134
-msgid "superuser status"
-msgstr "超级用户状态"
-
-#: contrib/auth/models.py:134
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "指明该用户缺省拥有所有权限。"
-
-#: contrib/auth/models.py:135
-msgid "last login"
-msgstr "上次登录"
-
-#: contrib/auth/models.py:136
-msgid "date joined"
-msgstr "加入日期"
-
-#: contrib/auth/models.py:138
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "除了手工设置权限以外,用户也会从其所在组获得赋予该组的所有权限。"
-
-#: contrib/auth/models.py:139
-msgid "user permissions"
-msgstr "用户权限"
-
-#: contrib/auth/models.py:143
-msgid "user"
-msgstr "用户"
-
-#: contrib/auth/models.py:144
-msgid "users"
-msgstr "用户"
-
-#: contrib/auth/models.py:300
-msgid "message"
-msgstr "消息"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "退出登录"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "输入一个有效的 e-mail 地址。"
-
-#: contrib/comments/admin.py:11
-msgid "Content"
-msgstr "内容"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "元数据"
-
-#: contrib/comments/feeds.py:13
-#, python-format
-msgid "%(site_name)s comments"
-msgstr "%(site_name)s的评论"
-
-#: contrib/comments/feeds.py:23
-#, python-format
-msgid "Latest comments on %(site_name)s"
-msgstr "%(site_name)s的最新评论"
-
-#: contrib/comments/forms.py:19
-#: contrib/comments/templates/comments/moderation_queue.html:34
-msgid "Name"
-msgstr "名称"
-
-#: contrib/comments/forms.py:20
-msgid "Email address"
-msgstr "Email 地址"
-
-#: contrib/comments/forms.py:22
-#: contrib/comments/templates/comments/moderation_queue.html:35
-msgid "Comment"
-msgstr "评论"
-
-#: contrib/comments/forms.py:25
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "如果你在该字段中输入任何内容,那么你的评论就会被视为垃圾评论。"
-
-#: contrib/comments/forms.py:125
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "注意言论!%s 不允许在这里出现。"
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "对象ID"
-
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "用户名"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "用户的 email 地址"
-
-#: contrib/comments/models.py:52
-msgid "user's URL"
-msgstr "用户的网址"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "评论"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "提交日期/时间"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "公开"
-
-#: contrib/comments/models.py:60
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr "取消选中此复选框,可隐藏该条评论。"
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "已删除"
-
-#: contrib/comments/models.py:63
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"若评论内容不妥,则选中这个复选框。该评论将被一条\"此评论已经被删除\"的消息所"
-"替换。"
-
-#: contrib/comments/models.py:115
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "此评论由一位验证用户发表,因此该用户名是只读的。"
-
-#: contrib/comments/models.py:77
-msgid "comments"
-msgstr "评论"
-
-#: contrib/comments/models.py:119
-
-#: contrib/comments/models.py:124
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr "此评论由一位验证用户发表,因此该 email 是只读的。"
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"由 %(user)s 在 %(date)s 张贴\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/comments/models.py:170
-msgid "flag"
-msgstr "标记"
-
-#: contrib/comments/models.py:171
-msgid "date"
-msgstr "标记时间"
-
-#: contrib/comments/models.py:181
-msgid "comment flag"
-msgstr "评论标记"
-
-#: contrib/comments/models.py:182
-msgid "comment flags"
-msgstr "评论标记"
-
-#: contrib/comments/templates/comments/approve.html:4
-msgid "Approve a comment"
-msgstr "批准评论"
-
-#: contrib/comments/templates/comments/approve.html:7
-msgid "Really make this comment public?"
-msgstr "真的要公开该评论?"
-
-#: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
-msgid "Approve"
-msgstr "批准"
-
-#: contrib/comments/templates/comments/approved.html:4
-msgid "Thanks for approving"
-msgstr "感谢批准"
-
-#: contrib/comments/templates/comments/approved.html:7
-#: contrib/comments/templates/comments/deleted.html:7
-#: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "感谢花费时间改善本站点的讨论质量。"
-
-#: contrib/comments/templates/comments/delete.html:4
-msgid "Remove a comment"
-msgstr "删除评论"
-
-#: contrib/comments/templates/comments/delete.html:7
-msgid "Really remove this comment?"
-msgstr "真的要删除该评论?"
-
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "删除"
-
-#: contrib/comments/templates/comments/deleted.html:4
-msgid "Thanks for removing"
-msgstr "感谢删除"
-
-#: contrib/comments/templates/comments/flag.html:4
-msgid "Flag this comment"
-msgstr "标记该评论"
-
-#: contrib/comments/templates/comments/flag.html:7
-msgid "Really flag this comment?"
-msgstr "真的要标记该评论?"
-
-#: contrib/comments/templates/comments/flag.html:12
-msgid "Flag"
-msgstr "标记"
-
-#: contrib/comments/templates/comments/flagged.html:4
-msgid "Thanks for flagging"
-msgstr "感谢标记"
-
-#: contrib/comments/templates/comments/form.html:16
-#: contrib/comments/templates/comments/preview.html:31
-msgid "Post"
-msgstr "张贴"
-
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
-msgid "Preview"
-msgstr "预览"
-
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "评论待审队列"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "没有待审评论"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Email"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "已验证?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP 地址"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "张贴日期"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "是"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "否"
-
-#: contrib/comments/templates/comments/posted.html:4
-msgid "Thanks for commenting"
-msgstr "感谢评论"
-
-#: contrib/comments/templates/comments/posted.html:7
-msgid "Thank you for your comment"
-msgstr "感谢您所作的评论"
-
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:12
-msgid "Preview your comment"
-msgstr "预览您的评论"
-
-#: contrib/comments/templates/comments/preview.html:10
-msgid "Please correct the error below"
-msgid_plural "Please correct the errors below"
-msgstr[0] "请修正如下错误"
-
-#: contrib/comments/templates/comments/preview.html:15
-msgid "Post your comment"
-msgstr "张贴您的评论"
-
-#: contrib/comments/templates/comments/preview.html:15
-msgid "or make changes"
-msgstr "或进行修改"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "python 模型类名"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "内容类型"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "例如:'/about/contact/'。请确保开始和结尾的斜杠。"
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "该值只能包含字母、数字、下划线、斜线或反斜线。"
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "高级选项"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "标题"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "内容"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "允许评论"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "模板名称"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"例如:'flatpages/contact_page.html'。若未提供,系统将使用'flatpages/default."
-"html'。"
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "请先注册"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "如果被选中,仅登录用户才可以查看此页。"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "简单页面"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "简单页面"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr "很抱歉,但是你的表单已过期。请继续填写本页中表单的其余部分。"
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "未提供几何信息。"
-
-#: contrib/gis/forms/fields.py:15
-msgid "Invalid geometry value."
-msgstr "无效几何信息。"
-
-#: contrib/gis/forms/fields.py:16
-msgid "Invalid geometry type."
-msgstr "无效几何类型。"
-
-#: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"几何形状的SRID字段发生试图转换错误"
-"ました。"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f 百万"
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f 十亿"
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f 万亿"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "一"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "二"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "三"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "四"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "五"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "六"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "七"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "八"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "九"
-
-#: contrib/humanize/templatetags/humanize.py:93
-msgid "today"
-msgstr "今天"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "明天"
-
-#: contrib/humanize/templatetags/humanize.py:97
-msgid "yesterday"
-msgstr "昨天"
-
-#: contrib/localflavor/ar/forms.py:27
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "以 NNNN 或 ANNNNAAA 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "这个字段只能输入数字。"
-
-#: contrib/localflavor/ar/forms.py:50
-msgid "This field requires 7 or 8 digits."
-msgstr "这个字段要求输入 7 或 8 位数字。"
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "以 XX-XXXXXXXX-X 或 XXXXXXXXXXXX 的格式输入一个有效的 CUIT。"
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "无效 CUIT。"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "布尔根兰州"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "卡林西亚"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "下奥地利州"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "上奥地利州"
-
-#: contrib/localflavor/at/at_states.py:9
-msgid "Salzburg"
-msgstr "萨尔茨堡"
-
-#: contrib/localflavor/at/at_states.py:10
-msgid "Styria"
-msgstr "施蒂里亚语"
-
-#: contrib/localflavor/at/at_states.py:11
-msgid "Tyrol"
-msgstr "蒂罗尔"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "福拉尔贝格州"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "维也纳"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "以 XXXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/at/forms.py:48
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "以 XXXX XXXXXX 的格式输入一个有效的奥地利社会保障号码。"
-
-#: contrib/localflavor/au/forms.py:16
-msgid "Enter a 4 digit post code."
-msgstr "输入 4 位邮政编码。"
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "以 XXXXX-XXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "电话号码必须为 XXX-XXX-XXXX 格式。"
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "选择一个有效的巴西州。该州并不是现有的州。"
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "无效的 CPF 号码。"
-
-#: contrib/localflavor/br/forms.py:95
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "该字段要求填写最多 11 位数字或 14 个字符。"
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "无效的 CNPJ 号码。"
-
-#: contrib/localflavor/br/forms.py:136
-msgid "This field requires at least 14 digits"
-msgstr "这个字段要求至少 14 位数字"
-
-#: contrib/localflavor/ca/forms.py:17
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "以 XXX XXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/ca/forms.py:88
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "以 XXX-XXX-XXX 的格式输入一个有效的加拿大社会保障号码。"
-
-#: contrib/localflavor/ch/ch_states.py:5
-msgid "Aargau"
-msgstr "阿尔高州"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr "内阿彭策尔半州"
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "外阿彭策尔半州"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "巴塞尔城半州"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "巴塞尔乡半州"
-
-#: contrib/localflavor/ch/ch_states.py:10
-msgid "Berne"
-msgstr "伯尔尼州"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "弗里堡州"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "日内瓦州"
-
-#: contrib/localflavor/ch/ch_states.py:13
-msgid "Glarus"
-msgstr "格拉鲁斯州"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "格劳宾登州"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "汝拉州"
-
-#: contrib/localflavor/ch/ch_states.py:16
-msgid "Lucerne"
-msgstr "琉森州"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "纳沙特尔州"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "下瓦尔登州"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "上瓦尔登州"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "沙夫豪森州"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "施维茨州"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "索洛图恩州"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "圣加仑州"
-
-#: contrib/localflavor/ch/ch_states.py:24
-msgid "Thurgau"
-msgstr "图尔高州"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "提契诺州"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr "乌里州"
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "瓦莱州"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "沃州"
-
-#: contrib/localflavor/ch/ch_states.py:29
-msgid "Zug"
-msgstr "楚格州"
-
-#: contrib/localflavor/ch/ch_states.py:30
-msgid "Zurich"
-msgstr "苏黎世州"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"输入一个有效的瑞士身份证号码或者护照卡号,格式为 X1234567<0 或 1234567890"
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr "输入一个有效的 Chilean RUT。"
-
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "输入一个有效的 Chilean RUT。格式为 XX.XXX.XXX-X。"
-
-#: contrib/localflavor/cl/forms.py:31
-msgid "The Chilean RUT is not valid."
-msgstr "Chilean RUT 无效。"
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "巴登符腾堡州"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "巴伐利亚"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "柏林"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "勃兰登堡"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "不来梅"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "汉堡"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "黑森州"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "梅克伦堡-西部米拉尼亚"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "下萨克森"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "北莱茵-威斯特法伦州"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "莱茵河法耳茨地区"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "萨尔州"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "萨克森"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "萨克森-安哈尔特"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "石勒苏益格-荷尔斯泰因"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "图林根州"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "以 XXXXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr "以 XXXXXXXXXXX-XXXXXXX-XXXXXXX-X 的格式输入一个有效的德国身份证号码。"
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "阿拉瓦"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "阿尔巴塞特"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "Alacant"
-
-#: contrib/localflavor/es/es_provinces.py:8
-msgid "Almeria"
-msgstr "阿尔梅里亚"
-
-#: contrib/localflavor/es/es_provinces.py:9
-msgid "Avila"
-msgstr "阿维拉"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "巴达霍斯"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "巴利阿里群岛"
-
-#: contrib/localflavor/es/es_provinces.py:12
-msgid "Barcelona"
-msgstr "巴塞罗那"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "布尔戈斯"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "卡塞雷斯"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "卡迪斯"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "卡斯特罗"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "Ciudad Real"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "科尔多瓦"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "拉科鲁尼亚"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "昆卡"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "西罗纳"
-
-#: contrib/localflavor/es/es_provinces.py:22
-msgid "Granada"
-msgstr "格拉纳达"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "瓜达拉哈拉"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "Guipuzkoa"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "韦尔瓦"
-
-#: contrib/localflavor/es/es_provinces.py:26
-msgid "Huesca"
-msgstr "韦斯卡"
-
-#: contrib/localflavor/es/es_provinces.py:27
-msgid "Jaen"
-msgstr "哈恩"
-
-#: contrib/localflavor/es/es_provinces.py:28
-msgid "Leon"
-msgstr "里昂"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "Lleida"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "里欧哈"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "卢戈"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "马德里"
-
-#: contrib/localflavor/es/es_provinces.py:33
-msgid "Malaga"
-msgstr "马拉加"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "穆尔西亚"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "纳瓦拉"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "奥伦塞"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "阿斯图里亚斯"
-
-#: contrib/localflavor/es/es_provinces.py:38
-msgid "Palencia"
-msgstr "帕伦西亚"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "拉斯帕尔马斯"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "庞特维德拉"
-
-#: contrib/localflavor/es/es_provinces.py:41
-msgid "Salamanca"
-msgstr "萨拉曼卡"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "圣克鲁斯-德特内里费"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-msgid "Cantabria"
-msgstr "坎塔布利亚"
-
-#: contrib/localflavor/es/es_provinces.py:44
-msgid "Segovia"
-msgstr "塞戈维亚"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "塞维利亚"
-
-#: contrib/localflavor/es/es_provinces.py:46
-msgid "Soria"
-msgstr "索里亚"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "塔拉戈纳"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "特鲁埃尔"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "托莱多"
-
-#: contrib/localflavor/es/es_provinces.py:50
-msgid "Valencia"
-msgstr "瓦伦西亚"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "巴利亚多利德"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "Bizkaia"
-
-#: contrib/localflavor/es/es_provinces.py:53
-msgid "Zamora"
-msgstr "萨莫拉"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "萨拉戈萨"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "休达"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "梅利利亚"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "安达卢西亚"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "阿拉贡"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "摩纳哥的阿斯图里亚斯"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "巴利阿里群岛"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "巴斯克地区"
-
-#: contrib/localflavor/es/es_regions.py:10
-msgid "Canary Islands"
-msgstr "加纳利群岛"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "卡斯蒂利亚-拉曼恰"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "卡斯蒂利亚和莱昂"
-
-#: contrib/localflavor/es/es_regions.py:14
-msgid "Catalonia"
-msgstr "加泰隆尼亚"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "埃斯特雷马杜拉"
-
-#: contrib/localflavor/es/es_regions.py:16
-msgid "Galicia"
-msgstr "加利西亚"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "穆尔西亚地区"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "巴伦西亚社区"
-
-#: contrib/localflavor/es/forms.py:19
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "以 01XXX - 52XXX 的格式输入一个有效范围之内的邮政编码。"
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr "以 6XXXXXXXX, 8XXXXXXXX 或 9XXXXXXXX 的格式输入一个有效的电话号码。"
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "请输入一个有效的 NIF、NIE 或 CIF。"
-
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "请输入一个有效的 NIF 或 NIE 。"
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "无效的 NIF 校验和。"
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "无效的 NIE 校验和。"
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "无效的 CIF 校验和。"
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "请输入一个有效的银行帐号,格式为 XXXX-XXXX-XX-XXXXXXXXXX。"
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "无效的银行帐号校验和。"
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "输入一个有效的芬兰社会保障号码。"
-
-#: contrib/localflavor/in_/forms.py:14
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "以 XXXXXXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "输入一个有效的冰岛身份证号码。格式为 XXXXXX-XXXX 。"
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "无效的冰岛身份证号码。"
-
-#: contrib/localflavor/it/forms.py:14
-msgid "Enter a valid zip code."
-msgstr "输入一个有效的邮政编码。"
-
-#: contrib/localflavor/it/forms.py:43
-msgid "Enter a valid Social Security number."
-msgstr "输入一个有效的社会保障号码。"
-
-#: contrib/localflavor/it/forms.py:68
-msgid "Enter a valid VAT number."
-msgstr "输入一个有效的 VAT 号码。"
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "以 XXXXXXX 或 XXX-XXXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "北海道"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "青森"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "岩手"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "宫城"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "秋田"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "山形"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "福岛"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "茨城"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "枥木"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "群马"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "埼玉"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "千叶"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "东京"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "神奈川"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "山梨"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "长野"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "新舄"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "富山"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "石川"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "福井"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "岐阜"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "静冈"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "爱知"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "三重"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "滋贺"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "京都"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "大坂"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "兵库"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "奈良"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "和歌山"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "鸟取"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "岛根"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "冈山"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "广岛"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "山口"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "德岛"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "香川"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "爱媛"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "高知"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "福冈"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "佐贺"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "长崎"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "熊本"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "大分"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "宫崎"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "鹿儿岛"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "冲绳岛"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "阿瓜斯卡连特斯"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "下加利福尼亚州"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "巴哈加利福尼亚"
-
-#: contrib/localflavor/mx/mx_states.py:15
-msgid "Campeche"
-msgstr "坎佩切"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "奇瓦瓦"
-
-#: contrib/localflavor/mx/mx_states.py:17
-msgid "Chiapas"
-msgstr "恰帕斯"
-
-#: contrib/localflavor/mx/mx_states.py:18
-msgid "Coahuila"
-msgstr "科阿韦拉"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "科利马"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "联邦区"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "杜兰戈"
-
-#: contrib/localflavor/mx/mx_states.py:22
-msgid "Guerrero"
-msgstr "格雷罗"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "Guanajuato"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "伊达尔戈"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "哈利斯科州"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "米却肯州"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "莫雷洛斯"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "纳亚里特"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "新莱昂州"
-
-#: contrib/localflavor/mx/mx_states.py:31
-msgid "Oaxaca"
-msgstr "瓦哈卡"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "普埃布拉"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "克雷塔罗"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "金塔纳罗奥"
-
-#: contrib/localflavor/mx/mx_states.py:35
-msgid "Sinaloa"
-msgstr "锡那罗亚州"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "圣路易斯波托西"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "索诺拉"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "塔巴斯科"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "塔毛利帕斯"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "特拉斯卡拉"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "韦拉克鲁斯"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "尤卡坦"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "萨卡特卡斯"
-
-#: contrib/localflavor/nl/forms.py:21
-msgid "Enter a valid postal code"
-msgstr "输入一个有效的邮政编码"
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "输入一个有效的电话号码"
-
-#: contrib/localflavor/nl/forms.py:78
-msgid "Enter a valid SoFi number"
-msgstr "输入一个有效的 SoFi 号码"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drenthe"
-msgstr "德伦特省"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "Flevoland"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "菲仕兰"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-msgid "Gelderland"
-msgstr "格尔德兰"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-msgid "Groningen"
-msgstr "格罗宁根"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-msgid "Limburg"
-msgstr "林堡"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "北布拉邦"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "北荷兰"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "艾瑟尔"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-msgid "Utrecht"
-msgstr "乌得勒支"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-msgid "Zeeland"
-msgstr "Zeeland"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "南荷兰省"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "请输入一个有效的挪威社会保障号码。"
-
-#: contrib/localflavor/pe/forms.py:24
-msgid "This field requires 8 digits."
-msgstr "这个字段要求填写 8 位数字。"
-
-#: contrib/localflavor/pe/forms.py:52
-msgid "This field requires 11 digits."
-msgstr "这个字段要求填写 11 位数字。"
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "国家身份证号码由 11 位数字组成。"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "国家身份证号码校验和错误。"
-
-#: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "输入一个税号(NIP),格式为 XXX-XXX-XX-XX 或 XX-XX-XXX-XXX。"
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "税号(NIP)校验和错误。"
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "国家商业注册号码(REGON)由 9 位或 14 位数字组成。"
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "国家商业注册号码(REGON)校验和错误。"
-
-#: contrib/localflavor/pl/forms.py:155
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "以 XX-XXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-msgid "Lower Silesia"
-msgstr "下西里西亚"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr "Kuyavia-Pomerania"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "卢布林"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr "Lubusz"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "罗兹"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr "Lesser Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "马佐夫舍"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-msgid "Opole"
-msgstr "奥波莱"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr "Subcarpatia"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "Podlasie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-msgid "Pomerania"
-msgstr "波美拉尼亚"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-msgid "Silesia"
-msgstr "西里西亚"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "Swietokrzyskie"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "Warmia-Masuria"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr "Greater Poland"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-msgid "West Pomerania"
-msgstr "西波美拉尼亚"
-
-#: contrib/localflavor/ro/forms.py:19
-msgid "Enter a valid CIF."
-msgstr "输入一个有效的 CIF。"
-
-#: contrib/localflavor/ro/forms.py:56
-msgid "Enter a valid CNP."
-msgstr "输入一个有效的 CNP。"
-
-#: contrib/localflavor/ro/forms.py:141
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "以 ROXX-XXXX-XXXX-XXXX-XXXX-XXXX 格式输入一个有效的 IBAN"
-
-#: contrib/localflavor/ro/forms.py:171
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "电话号码必须为 XXXX-XXXXXX 格式。"
-
-#: contrib/localflavor/ro/forms.py:194
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "以 XXXXXX 的格式输入一个邮政编码"
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "以 XXXXX 或 XX XXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "班斯卡-比斯特里察"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr "Banska Stiavnica"
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr "Bardejov"
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr "Banovce nad Bebravou"
-
-#: contrib/localflavor/sk/sk_districts.py:12
-msgid "Brezno"
-msgstr "布雷兹诺"
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr "Bratislava I"
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr "Bratislava II"
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr "Bratislava III"
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr "Bratislava IV"
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr "Bratislava V"
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr "比特恰"
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr "Cadca"
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr "代特瓦"
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr "Dolny Kubin"
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr "Dunajska Streda"
-
-#: contrib/localflavor/sk/sk_districts.py:23
-msgid "Galanta"
-msgstr "加兰塔"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-msgid "Gelnica"
-msgstr "盖尔尼察"
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr "赫洛霍韦茨"
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr "Humenne"
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr "伊拉瓦"
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr "Kezmarok"
-
-#: contrib/localflavor/sk/sk_districts.py:29
-msgid "Komarno"
-msgstr "Komarno"
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr "Kosice I"
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr "Kosice II"
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr "Kosice III"
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr "Kosice IV"
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr "Kosice - okolie"
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr "克鲁皮纳"
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr "Kysucke Nove Mesto"
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr "Levice"
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr "勒沃卡"
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr "Liptovsky Mikulas"
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr "Lucenec"
-
-#: contrib/localflavor/sk/sk_districts.py:41
-msgid "Malacky"
-msgstr "Malacky"
-
-#: contrib/localflavor/sk/sk_districts.py:42
-msgid "Martin"
-msgstr "Martin"
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr "梅济拉博尔采"
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr "Michalovce"
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr "Myjava"
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr "纳梅斯托沃"
-
-#: contrib/localflavor/sk/sk_districts.py:47
-msgid "Nitra"
-msgstr "尼特拉"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr "Nove Mesto nad Vahom"
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr "Nove Zamky"
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr "帕帝查斯葛"
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr "佩兹那克市"
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr "Piestany"
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr "波尔塔尔"
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr "Poprad"
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr "Povazska Bystrica"
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr "普雷绍夫"
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr "Prievidza"
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr "Puchov"
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr "Revuca"
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr "Rimavska Sobota"
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr "罗日尼亚瓦"
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr "Ruzomberok"
-
-#: contrib/localflavor/sk/sk_districts.py:63
-msgid "Sabinov"
-msgstr "Sabinov"
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr "塞内茨"
-
-#: contrib/localflavor/sk/sk_districts.py:65
-msgid "Senica"
-msgstr "Senica"
-
-#: contrib/localflavor/sk/sk_districts.py:66
-msgid "Skalica"
-msgstr "Skalica"
-
-#: contrib/localflavor/sk/sk_districts.py:67
-msgid "Snina"
-msgstr "Snina"
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr "索布兰采"
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr "Spisska Nova Ves"
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr "Stara Lubovna"
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr "Stropkov"
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr "斯维德尼克"
-
-#: contrib/localflavor/sk/sk_districts.py:73
-msgid "Sala"
-msgstr "撒拉族"
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr "Topolcany"
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr "特雷比绍夫"
-
-#: contrib/localflavor/sk/sk_districts.py:76
-msgid "Trencin"
-msgstr "特伦钦"
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr "Trnava"
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr "Turcianske Teplice"
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr "Tvrdosin"
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr "Velky Krtis"
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr "Vranov nad Toplou"
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr "兹拉特莫拉夫采"
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr "兹沃伦"
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr "扎尔诺维察"
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr "Ziar nad Hronom"
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr "日利纳"
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr "班斯卡-比斯特里察地区"
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr "布拉迪斯拉发地区"
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr "科希策地区"
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr "尼特拉地区"
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr "普雷绍夫地区"
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr "特伦钦地区"
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr "Trnava 地区"
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr "日利纳地区"
-
-#: contrib/localflavor/uk/forms.py:21
-msgid "Enter a valid postcode."
-msgstr "输入一个有效的邮政编码。"
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr "Bedfordshire"
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr "白金汉郡"
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr "柴郡"
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall and Isles of Scilly"
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr "坎布里亚"
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr "Derbyshire"
-
-#: contrib/localflavor/uk/uk_regions.py:18
-msgid "Devon"
-msgstr "德宏"
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr "多塞特"
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr "达勒姆"
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr "东苏塞克斯"
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr "埃塞克斯"
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr "格洛斯特"
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr "大伦敦"
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr "大曼彻斯特"
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr "新罕布什尔州"
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr "赫特福德郡"
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr "肯特"
-
-#: contrib/localflavor/uk/uk_regions.py:29
-msgid "Lancashire"
-msgstr "兰开夏"
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr "莱斯特郡"
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr "林肯郡"
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr "Merseyside"
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr "诺福克"
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr "北约克郡"
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr "北安普敦郡"
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr "诺森伯兰"
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr "诺丁汉"
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr "牛津郡"
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr "什罗普郡"
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr "萨默塞特"
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr "南约克郡"
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr "斯塔福德"
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr "萨福克"
-
-#: contrib/localflavor/uk/uk_regions.py:44
-msgid "Surrey"
-msgstr "萨里"
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr "Tyne and Wear"
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr "沃里克郡"
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr "西米德兰地区"
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr "西萨塞克斯"
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr "西约克郡"
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr "威尔特郡"
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr "伍斯特郡"
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr "安特里姆郡"
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr "阿玛县"
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr "County Down"
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr "弗马纳县"
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr "伦敦德里县"
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr "泰隆郡"
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr "Clwyd"
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr "Dyfed"
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr "Gwent"
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr "Gwynedd"
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr "中格拉摩根"
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr "Powys"
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr "南格拉摩根"
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr "西格拉摩根"
-
-#: contrib/localflavor/uk/uk_regions.py:75
-msgid "Borders"
-msgstr "Borders"
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr "中苏格兰"
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr "邓弗里斯和加洛韦"
-
-#: contrib/localflavor/uk/uk_regions.py:78
-msgid "Fife"
-msgstr "法伊夫"
-
-#: contrib/localflavor/uk/uk_regions.py:79
-msgid "Grampian"
-msgstr "嘉林"
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr "高原"
-
-#: contrib/localflavor/uk/uk_regions.py:81
-msgid "Lothian"
-msgstr "洛锡安"
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr "康威离岛"
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr "设得兰群岛"
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr "斯特拉思克莱德"
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr "泰赛德"
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr "西岛"
-
-#: contrib/localflavor/uk/uk_regions.py:90
-msgid "England"
-msgstr "英格兰"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "北爱尔兰"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-msgid "Scotland"
-msgstr "苏格兰"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-msgid "Wales"
-msgstr "威尔斯"
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "以 XXXXX 或 XXXXX-XXX 的格式输入一个邮政编码。"
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "以 XXX-XX-XXXX 的格式输入一个有效的美国社会保障号码。"
-
-#: contrib/localflavor/za/forms.py:20
-msgid "Enter a valid South African ID number"
-msgstr "请输入一个有效的南非身份证号码。"
-
-#: contrib/localflavor/za/forms.py:54
-msgid "Enter a valid South African postal code"
-msgstr "输入一个有效的南非邮政编码"
-
-#: contrib/localflavor/za/za_provinces.py:4
-msgid "Eastern Cape"
-msgstr "东开普省"
-
-#: contrib/localflavor/za/za_provinces.py:5
-msgid "Free State"
-msgstr "Free State"
-
-#: contrib/localflavor/za/za_provinces.py:6
-msgid "Gauteng"
-msgstr "豪登省"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "夸祖卢-纳塔尔"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "林波波河"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "姆普马兰加省"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "北开普省"
-
-#: contrib/localflavor/za/za_provinces.py:11
-msgid "North West"
-msgstr "西北"
-
-#: contrib/localflavor/za/za_provinces.py:12
-msgid "Western Cape"
-msgstr "西开普"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "重定向自"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "应该是一个绝对路径,不包括域名。例如:'/events/search/'。"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "重定向到"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "可以是绝对路径(同上)或以'http://'起始的全URL。"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "重定向"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "重定向"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "会话密钥"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "会话数据"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "过期时间"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "会话"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "会话"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "域名"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "显示名称"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "站点"
-
-#: db/models/fields/__init__.py:348 db/models/fields/__init__.py:683
-msgid "This value must be an integer."
-msgstr "这个值必须是一个整数。"
-
-#: db/models/fields/__init__.py:379
-msgid "This value must be either True or False."
-msgstr "这个值必须是 True 或 False。"
-
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "这个值不能为 null。"
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "只能输入用逗号分隔的数字。"
-
-#: db/models/fields/__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "输入一个 YYYY-MM-DD 格式的有效日期。"
-
-#: db/models/fields/__init__.py:468
-#, python-format
-msgid "Invalid date: %s"
-msgstr "无效日期: %s"
-
-#: db/models/fields/__init__.py:532 db/models/fields/__init__.py:550
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "输入一个 YYYY-MM-DD HH:MM[:ss[.uuuuuu]] 格式的有效日期/时间。"
-
-#: db/models/fields/__init__.py:586
-msgid "This value must be a decimal number."
-msgstr "这个值必须是一个小数。"
-
-#: db/models/fields/__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr "这个值必须是 None, True 或 False。"
-
-#: db/models/fields/__init__.py:817 db/models/fields/__init__.py:831
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "输入一个 HH:MM[:ss[.uuuuuu]] 格式的有效时间。"
-
-#: db/models/fields/related.py:761
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "按下 \"Control\",或者在Mac上按 \"Command\" 来选择多个值。"
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "请输入有效的 %(self)s ID。值 %(value)r 无效。"
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "这个字段是必填项。"
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "输入一个有效的值。"
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "确保该值最多为 %(max)d 个字符(其长度为 %(length)d)。"
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "确保该值最少为 %(min)d 个字符(其长度为 %(length)d)。"
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "输入整数。"
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "这个值必须小于或等于 %s。"
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "这个值必须大于或等于 %s。"
-
-#: forms/fields.py:195 forms/fields.py:224
-msgid "Enter a number."
-msgstr "输入一个数字。"
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "确认数字全长不超过 %s 位。"
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "确认小数不超过 %s 位。"
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "确认小数点前不超过 %s 位。"
-
-#: forms/fields.py:287 forms/fields.py:849
-msgid "Enter a valid date."
-msgstr "输入一个有效的日期。"
-
-#: forms/fields.py:321 forms/fields.py:850
-msgid "Enter a valid time."
-msgstr "输入一个有效的时间。"
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "输入一个有效的日期/时间。"
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "未提交文件。请检查表单的编码类型。"
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "没有提交文件。"
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "所提交的是空文件。"
-
-#: forms/fields.py:477
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "请上传一张有效的图片。您所上传的文件不是图片或者是已损坏的图片。"
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "输入一个有效的 URL。"
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "URL %s 似乎是一个已损坏的链接。"
-
-#: forms/fields.py:618 forms/fields.py:696
-#, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "选择一个有效的选项。 %(value)s 不在可用的选项中。"
-
-#: forms/fields.py:697 forms/fields.py:758 forms/models.py:714
-msgid "Enter a list of values."
-msgstr "输入一系列值。"
-
-#: forms/fields.py:878
-msgid "Enter a valid IPv4 address."
-msgstr "输入一个有效的 IPv4 地址。"
-
-#: forms/fields.py:888
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "输入一个有效的 'slug',由字母、数字、下划线或横线组成。"
-
-#: forms/formsets.py:242 forms/formsets.py:244
-msgid "Order"
-msgstr "排序"
-
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"在%(date_field)s %(lookup)s 需要唯一的 %(field_name)s"
-
-#: forms/models.py:594
-#, python-format
-msgid "Please correct the duplicate data for %(field)s."
-msgstr "请修改%(field)s的重复数据"
-
-#: forms/models.py:598
-#, python-format
-msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "请修改%(field)s的重复数据.这个字段必须唯一"
-
-#: forms/models.py:604
-#, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr "请修正%(field_name)s的重复数据。%(date_field)s %(lookup)s 在 %(field_name)s 必须保证唯一."
-
-#: forms/models.py:612
-msgid "Please correct the duplicate values below."
-msgstr "请修正重复的数据."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-
-#: forms/models.py:281 forms/models.py:290
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "具有 %(field_label)s 的 %(model_name)s 已存在。"
-
-#: forms/models.py:581
-msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "内联外键与父实例的主键不匹配。"
-
-#: forms/models.py:644
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "选择一个有效的选项: 该选择不在可用的选项中。"
-
-#: forms/models.py:715
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "选择一个有效的选项: '%s' 不在可用的选项中。"
-
-#: template/defaultfilters.py:743
-msgid "yes,no,maybe"
-msgstr "是、否、也许"
-
-#: template/defaultfilters.py:774
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d 字节"
-
-#: template/defaultfilters.py:776
-#, python-format
-msgid "%.1f KB"
-msgstr "%.1f KB"
-
-#: template/defaultfilters.py:778
-#, python-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
-
-#: template/defaultfilters.py:779
-#, python-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr "p.m."
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr "a.m."
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr "PM"
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr "AM"
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "午夜"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "中午"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "星期一"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "星期二"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "星期三"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "星期四"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "星期五"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "星期六"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "星期日"
-
-#: utils/dates.py:10
-msgid "Mon"
-msgstr "星期一"
-
-#: utils/dates.py:10
-msgid "Tue"
-msgstr "星期二"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "星期三"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "星期四"
-
-#: utils/dates.py:10
-msgid "Fri"
-msgstr "星期五"
-
-#: utils/dates.py:11
-msgid "Sat"
-msgstr "星期六"
-
-#: utils/dates.py:11
-msgid "Sun"
-msgstr "星期日"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "一月"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "二月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "三月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "四月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "五月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "六月"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "七月"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "八月"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "九月"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "十月"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "十一月"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "十二月"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "一月"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "二月"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "三月"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "四月"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "五月"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "六月"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "七月"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "八月"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "九月"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "十月"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "十一月"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "十二月"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "一月"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "二月"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "八月"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "九月"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "十月"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "十一月"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "十二月"
-
-#: utils/text.py:128
-msgid "or"
-msgstr "或"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "年"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "月"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "周"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "天"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "小时"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "分钟"
-
-#: utils/timesince.py:43
-msgid "minutes"
-msgstr "分钟"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "Y-m-d"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "Y-m"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "m-d"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s 创建成功。"
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s 更新成功。"
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s 已被删除。"
diff --git a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 5d91de8..0000000
--- a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 142acbb..0000000
--- a/parts/django/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,105 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-03-21 18:43+0800\n"
-"PO-Revision-Date: 2006-09-25 08:35+0800\n"
-"Last-Translator: Qing Feng <paradise.qingfeng@gmail.com>\n"
-"Language-Team: Qing Feng <paradise.qingfeng@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-msgid "Available %s"
-msgstr "可用 %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr "全选"
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr "增加"
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr "删除"
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-msgid "Chosen %s"
-msgstr "选中的 %s"
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr "选择并点击 "
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr "清除全部"
-
-#: contrib/admin/media/js/dateparse.js:32
-#: contrib/admin/media/js/calendar.js:24
-msgid "January February March April May June July August September October November December"
-msgstr "一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "星期日 星期一 星期二 星期三 星期四 星期五 星期六"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "日 一 二 三 四 五 六"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
-msgid "Now"
-msgstr "现在"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
-msgid "Clock"
-msgstr "时钟"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
-msgid "Choose a time"
-msgstr "选择一个时间"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Midnight"
-msgstr "午夜"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "6 a.m."
-msgstr "上午6点"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "Noon"
-msgstr "正午"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
-msgid "Cancel"
-msgstr "取消"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
-msgid "Today"
-msgstr "今天"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
-msgid "Calendar"
-msgstr "日历"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
-msgid "Yesterday"
-msgstr "昨天"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
-msgid "Tomorrow"
-msgstr "明天"
-
diff --git a/parts/django/django/conf/locale/zh_CN/__init__.py b/parts/django/django/conf/locale/zh_CN/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/zh_CN/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/zh_CN/formats.py b/parts/django/django/conf/locale/zh_CN/formats.py
deleted file mode 100644
index 6d71786..0000000
--- a/parts/django/django/conf/locale/zh_CN/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-# DATE_FORMAT =
-# TIME_FORMAT =
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-# SHORT_DATE_FORMAT =
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.mo b/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.mo
deleted file mode 100644
index 7375087..0000000
--- a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.po b/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.po
deleted file mode 100644
index 0efe779..0000000
--- a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,4147 +0,0 @@
-# This file is distributed under the same license as the django package.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-03 14:31+0800\n"
-"PO-Revision-Date: 2007-04-05 01:32+1000\n"
-"Last-Translator: Terry Huang <terryh.tp@gmail.com>\n"
-"Language-Team: Terry Huang <terryh.tp@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: conf/global_settings.py:44
-msgid "Arabic"
-msgstr "阿拉伯語"
-
-#: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "孟加拉語"
-
-#: conf/global_settings.py:46
-#, fuzzy
-msgid "Bulgarian"
-msgstr "保加利亞語"
-
-#: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "嘉泰羅尼亞語"
-
-#: conf/global_settings.py:48
-msgid "Czech"
-msgstr "捷克語"
-
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "威爾斯語"
-
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "丹麥語"
-
-#: conf/global_settings.py:51
-msgid "German"
-msgstr "德語"
-
-#: conf/global_settings.py:52
-msgid "Greek"
-msgstr "希臘語"
-
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "英語"
-
-#: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "西班牙語"
-
-#: conf/global_settings.py:55
-#, fuzzy
-msgid "Estonian"
-msgstr "羅馬尼亞語"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "阿根廷的西班牙語"
-
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "巴斯克語"
-
-#: conf/global_settings.py:58
-#, fuzzy
-msgid "Persian"
-msgstr "波斯語"
-
-#: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "芬蘭語"
-
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "法語"
-
-#: conf/global_settings.py:61
-#, fuzzy
-msgid "Irish"
-msgstr "愛爾蘭語"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "加里西亞語"
-
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "匈牙利語"
-
-#: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "希伯來語"
-
-#: conf/global_settings.py:65
-#, fuzzy
-msgid "Croatian"
-msgstr "嘉泰羅尼亞語"
-
-#: conf/global_settings.py:66
-msgid "Icelandic"
-msgstr "冰島語"
-
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "義大利語"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "日語"
-
-#: conf/global_settings.py:69
-#, fuzzy
-msgid "Georgian"
-msgstr "德語"
-
-#: conf/global_settings.py:70
-#, fuzzy
-msgid "Korean"
-msgstr "挪威語"
-
-#: conf/global_settings.py:71
-#, fuzzy
-msgid "Khmer"
-msgstr "高棉語"
-
-#: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "坎那達語"
-
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "拉脫維亞語"
-
-#: conf/global_settings.py:74
-msgid "Lithuanian"
-msgstr "立陶宛語"
-
-#: conf/global_settings.py:75
-msgid "Macedonian"
-msgstr "馬其頓語"
-
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "荷蘭語"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "挪威語"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "波蘭嶼"
-
-#: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "葡萄牙語"
-
-#: conf/global_settings.py:80
-#, fuzzy
-msgid "Brazilian Portuguese"
-msgstr "巴西葡萄牙語"
-
-#: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "羅馬尼亞語"
-
-#: conf/global_settings.py:82
-msgid "Russian"
-msgstr "俄語"
-
-#: conf/global_settings.py:83
-msgid "Slovak"
-msgstr "斯洛伐克語"
-
-#: conf/global_settings.py:84
-msgid "Slovenian"
-msgstr "斯洛維尼亞語"
-
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "塞爾維亞語"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "瑞典語"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "坦米爾語"
-
-#: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "泰盧固語"
-
-#: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "土耳其語"
-
-#: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "烏克蘭語"
-
-#: conf/global_settings.py:91
-msgid "Simplified Chinese"
-msgstr "簡體中文"
-
-#: conf/global_settings.py:92
-msgid "Traditional Chinese"
-msgstr "繁體中文"
-
-#: contrib/admin/filterspecs.py:44
-#, python-format
-msgid ""
-"<h3>By %s:</h3>\n"
-"<ul>\n"
-msgstr ""
-"<h3>以 %s:</h3>\n"
-"<ul>\n"
-
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
-msgid "All"
-msgstr "全部"
-
-#: contrib/admin/filterspecs.py:113
-msgid "Any date"
-msgstr "任何日期"
-
-#: contrib/admin/filterspecs.py:114
-msgid "Today"
-msgstr "今天"
-
-#: contrib/admin/filterspecs.py:117
-msgid "Past 7 days"
-msgstr "過去 7 天"
-
-#: contrib/admin/filterspecs.py:119
-msgid "This month"
-msgstr "本月"
-
-#: contrib/admin/filterspecs.py:121
-msgid "This year"
-msgstr "今年"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:391
-msgid "Yes"
-msgstr "是"
-
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:391
-msgid "No"
-msgstr "否"
-
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:391
-msgid "Unknown"
-msgstr "未知"
-
-#: contrib/admin/models.py:19
-msgid "action time"
-msgstr "動作時間"
-
-#: contrib/admin/models.py:22
-msgid "object id"
-msgstr "物件 id"
-
-#: contrib/admin/models.py:23
-msgid "object repr"
-msgstr "物件 repr"
-
-#: contrib/admin/models.py:24
-msgid "action flag"
-msgstr "動作旗標"
-
-#: contrib/admin/models.py:25
-msgid "change message"
-msgstr "變更訊息"
-
-#: contrib/admin/models.py:28
-msgid "log entry"
-msgstr "紀錄項目"
-
-#: contrib/admin/models.py:29
-msgid "log entries"
-msgstr "紀錄項目"
-
-#: contrib/admin/options.py:60 contrib/admin/options.py:121
-#, fuzzy
-msgid "None"
-msgstr "無"
-
-#: contrib/admin/options.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "%s 已變更。"
-
-#: contrib/admin/options.py:338 contrib/admin/options.py:348
-#: forms/models.py:275
-msgid "and"
-msgstr "和"
-
-#: contrib/admin/options.py:343
-#, fuzzy, python-format
-msgid "Added %(name)s \"%(object)s\"."
-msgstr "新增 %(name)s"
-
-#: contrib/admin/options.py:347
-#, fuzzy, python-format
-msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "已變更 %(list)s for %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:352
-#, fuzzy, python-format
-msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "已删除 %(name)s \"%(object)s\"."
-
-#: contrib/admin/options.py:356
-msgid "No fields changed."
-msgstr "沒有欄位被變更。"
-
-#: contrib/admin/options.py:417 contrib/auth/admin.py:51
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" 已成功新增。"
-
-#: contrib/admin/options.py:421 contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
-msgid "You may edit it again below."
-msgstr "你可以在下面再次編輯。"
-
-#: contrib/admin/options.py:431 contrib/admin/options.py:464
-#, python-format
-msgid "You may add another %s below."
-msgstr "你可以在下面新增另一個 %s。"
-
-#: contrib/admin/options.py:452
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" 已成功變更。"
-
-#: contrib/admin/options.py:460
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" 新增成功。你可以在下面再次编輯它。"
-
-#: contrib/admin/options.py:536
-#, python-format
-msgid "Add %s"
-msgstr "新增 %s"
-
-#: contrib/admin/options.py:614
-#, python-format
-msgid "Change %s"
-msgstr "變更 %s"
-
-#: contrib/admin/options.py:646
-msgid "Database error"
-msgstr "資料庫錯誤"
-
-#: contrib/admin/options.py:696
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" 已成功刪除。"
-
-#: contrib/admin/options.py:703
-msgid "Are you sure?"
-msgstr "你確定嗎?"
-
-#: contrib/admin/options.py:732
-#, python-format
-msgid "Change history: %s"
-msgstr "變更歷史: %s"
-
-#: contrib/admin/sites.py:16 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr "請輸入有效的使用者名稱與密碼。請注意兩個欄位都有分大小寫"
-
-#: contrib/admin/sites.py:227 contrib/admin/views/decorators.py:40
-#, fuzzy
-msgid "Please log in again, because your session has expired."
-msgstr "請再登入一次,因為你的 session 已經到期。不必擔心: 你的提交已被儲存。"
-
-#: contrib/admin/sites.py:234 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"看起來你的瀏覽器沒有設定成允許 cookie。請啟用 cookie、重新載入此頁,然後再試"
-"一次"
-
-#: contrib/admin/sites.py:250 contrib/admin/sites.py:256
-#: contrib/admin/views/decorators.py:66
-msgid "Usernames cannot contain the '@' character."
-msgstr "使用者名稱不能包含 '@' 字元。"
-
-#: contrib/admin/sites.py:253 contrib/admin/views/decorators.py:62
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "你的電子郵件地址不是你的使用者名稱。試著改用 '%s'。"
-
-#: contrib/admin/sites.py:313
-msgid "Site administration"
-msgstr "網站管理"
-
-#: contrib/admin/sites.py:326 contrib/admin/templates/admin/login.html:26
-#: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:20
-msgid "Log in"
-msgstr "登入"
-
-#: contrib/admin/sites.py:373
-#, fuzzy, python-format
-msgid "%s administration"
-msgstr "%s 管理"
-
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "在 %(name)s: 裡的一個或多個 %(fieldname)s %(obj)s"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "在 %(name)s 裡的一個或多個 %(fieldname)s:"
-
-#: contrib/admin/widgets.py:70
-msgid "Date:"
-msgstr "日期"
-
-#: contrib/admin/widgets.py:70
-msgid "Time:"
-msgstr "時間"
-
-#: contrib/admin/widgets.py:94
-msgid "Currently:"
-msgstr "目前"
-
-#: contrib/admin/widgets.py:94
-msgid "Change:"
-msgstr "修改"
-
-#: contrib/admin/widgets.py:121
-#, fuzzy
-msgid "Lookup"
-msgstr "查詢"
-
-#: contrib/admin/widgets.py:228
-#, fuzzy
-msgid "Add Another"
-msgstr "增加另一個"
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "頁面沒有找到"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "很抱歉,請求頁面無法找到。"
-
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "首頁"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "伺服器錯誤"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "伺服器錯誤 (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "伺服器錯誤 <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"存在一個錯誤。它已經透過電子郵件回報給網站管理員了,並且應該很快被改正。謝謝"
-"你的關心。"
-
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
-#: contrib/admin/templates/admin/base.html:25
-msgid "Welcome,"
-msgstr "歡迎,"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "文件"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Change password"
-msgstr "變更密碼"
-
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-msgid "Log out"
-msgstr "登出"
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django 網站管理"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django 管理"
-
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
-msgid "Add"
-msgstr "新增"
-
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
-msgid "History"
-msgstr "歷史"
-
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
-msgid "View on site"
-msgstr "在網站上檢視"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "请更正下面的錯誤。"
-
-#: contrib/admin/templates/admin/change_list.html:16
-#, python-format
-msgid "Add %(name)s"
-msgstr "新增 %(name)s"
-
-#: contrib/admin/templates/admin/change_list.html:26
-msgid "Filter"
-msgstr "過濾器"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:246
-msgid "Delete"
-msgstr "刪除"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:16
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"刪除 %(object_name)s '%(escaped_object)s' 會把相關的物件也刪除,不過你的帳號"
-"並沒有刪除以下型態物件的權限:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:23
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"你確定想要刪除 %(object_name)s \"%(escaped_object)s\"?以下所有的相關項目都會"
-"被刪除:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:28
-msgid "Yes, I'm sure"
-msgstr "是的,我確定"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(filter_title)s "
-msgstr " 以 %(filter_title)s"
-
-#: contrib/admin/templates/admin/index.html:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "模型在 %(name)s 應用中可用。"
-
-#: contrib/admin/templates/admin/index.html:35
-msgid "Change"
-msgstr "變更"
-
-#: contrib/admin/templates/admin/index.html:45
-msgid "You don't have permission to edit anything."
-msgstr "你沒有編輯任何東西的權限。"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "Recent Actions"
-msgstr "最近的動作"
-
-#: contrib/admin/templates/admin/index.html:54
-msgid "My Actions"
-msgstr "我的動作"
-
-#: contrib/admin/templates/admin/index.html:58
-msgid "None available"
-msgstr "無可用的"
-
-#: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"你的資料庫安裝有錯誤。確定資料庫表格已經建立,並確定資料庫可被合適的使用者讀"
-"取。"
-
-#: contrib/admin/templates/admin/login.html:19
-msgid "Username:"
-msgstr "使用者名稱:"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Password:"
-msgstr "密碼:"
-
-#: contrib/admin/templates/admin/object_history.html:22
-msgid "Date/time"
-msgstr "日期/時間"
-
-#: contrib/admin/templates/admin/object_history.html:23
-msgid "User"
-msgstr "使用者"
-
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "Action"
-msgstr "動作"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "Y-m-d H:i:s"
-
-#: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr "這個物件沒有變更的歷史。它可能不是透過這個管理網站新增的。"
-
-#: contrib/admin/templates/admin/pagination.html:10
-msgid "Show all"
-msgstr "顯示全部"
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "去"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "1 result"
-msgid_plural "%(counter)s results"
-msgstr[0] "1 則结果"
-msgstr[1] "%(counter)s 則结果"
-
-#: contrib/admin/templates/admin/search_form.html:10
-#, python-format
-msgid "%(full_result_count)s total"
-msgstr "總共 %(full_result_count)s"
-
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "儲存"
-
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save as new"
-msgstr "儲存為新的"
-
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and add another"
-msgstr "儲存並新增另一個"
-
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save and continue editing"
-msgstr "儲存並繼續編輯"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr "首先,輸入一個使用者名稱和密碼。然後你可以編輯更多使用者選項。"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "使用者名稱"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:184
-msgid "Password"
-msgstr "密碼"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "密碼(重複)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "為檢查用,請輸入與上面相同的密碼。"
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
-#, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "為使用者<strong>%(username)s</strong>输入一個新的密碼。"
-
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
-#, fuzzy
-msgid "Delete?"
-msgstr "刪除?"
-
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "感謝你今天花了重要的時間停留在本網站。"
-
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "重新登入"
-
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
-msgid "Password change"
-msgstr "密碼變更"
-
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "密碼成功地變更"
-
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "你的密碼已變更。"
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"為了安全上的考慮,請輸入你的舊密碼,再輸入新密碼兩次,讓我們核驗你已正確地輸"
-"入。"
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "舊密碼:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "新密碼:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "確認密碼:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
-msgid "Change my password"
-msgstr "變更我的密碼"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:4
-#: contrib/admin/templates/registration/password_reset_confirm.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:6
-#: contrib/admin/templates/registration/password_reset_form.html:10
-msgid "Password reset"
-msgstr "密碼重設"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
-#, fuzzy
-msgid "Password reset complete"
-msgstr "完成密碼重設"
-
-#: contrib/admin/templates/registration/password_reset_complete.html:12
-msgid "Your password has been set. You may go ahead and log in now."
-msgstr "你的密碼已設置,現在可以繼續登入。"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
-#, fuzzy
-msgid "Password reset confirmation"
-msgstr "密碼重設確認"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
-#, fuzzy
-msgid "Enter new password"
-msgstr "輸入新密碼"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
-#, fuzzy
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"請輸入你的舊密碼,再輸入新密碼兩次,讓我們核驗你已正確地輸入。"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
-#, fuzzy
-msgid "Password reset unsuccessful"
-msgstr "密碼重設失敗"
-
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
-msgstr "密碼重設連結無效,可能因為他已使用。請重新請求密碼重設。"
-
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "密碼成功地重設"
-
-#: contrib/admin/templates/registration/password_reset_done.html:12
-#, fuzzy
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr "我們已經把新的密碼寄到你送出的電子郵件地址。你應該不久就能收到。"
-
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "因為你要求重設密碼,所以收到了這封電子郵件"
-
-#: contrib/admin/templates/registration/password_reset_email.html:3
-#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "你在 %(site_name)s 裡的使用者帳號"
-
-#: contrib/admin/templates/registration/password_reset_email.html:5
-msgid "Please go to the following page and choose a new password:"
-msgstr "請到該頁面選擇一個新的密碼:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:9
-msgid "Your username, in case you've forgotten:"
-msgstr "你的使用者名稱,萬一你已經忘記的話:"
-
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Thanks for using our site!"
-msgstr "感謝使用本網站!"
-
-#: contrib/admin/templates/registration/password_reset_email.html:13
-#, python-format
-msgid "The %(site_name)s team"
-msgstr "%(site_name)s 團隊"
-
-#: contrib/admin/templates/registration/password_reset_form.html:12
-#, fuzzy
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"忘記你的密碼了?在下面輸入你的電子郵件地址,我們就會重設你的密碼並把新的用電"
-"子郵件寄給你。"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "電子郵件地址:"
-
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "重設我的密碼"
-
-#: contrib/admin/templatetags/admin_list.py:288
-msgid "All dates"
-msgstr "所有日期"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s"
-msgstr "選擇 %s"
-
-#: contrib/admin/views/main.py:69
-#, python-format
-msgid "Select %s to change"
-msgstr "選擇 %s 來變更"
-
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
-msgid "site"
-msgstr "網站"
-
-#: contrib/admin/views/template.py:38
-#, fuzzy
-msgid "template"
-msgstr "模板名稱"
-
-#: contrib/admindocs/views.py:57 contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
-msgid "tag:"
-msgstr "標籤:"
-
-#: contrib/admindocs/views.py:90 contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
-msgid "filter:"
-msgstr "過濾器:"
-
-#: contrib/admindocs/views.py:154 contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
-msgid "view:"
-msgstr "視圖:"
-
-#: contrib/admindocs/views.py:186
-#, python-format
-msgid "App %r not found"
-msgstr "應用程式 %r 没有找到"
-
-#: contrib/admindocs/views.py:193
-#, fuzzy, python-format
-msgid "Model %(model_name)r not found in app %(app_label)r"
-msgstr "在應用程式 %(label)r 裡找不到模型 %(name)r"
-
-#: contrib/admindocs/views.py:205
-#, fuzzy, python-format
-msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "相關的 `%(app_label)s.%(data_type)s` 物件"
-
-#: contrib/admindocs/views.py:205 contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241 contrib/admindocs/views.py:246
-msgid "model:"
-msgstr "模型:"
-
-#: contrib/admindocs/views.py:236
-#, fuzzy, python-format
-msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "相關的 `%(app_label)s.%(object_name)s` 物件"
-
-#: contrib/admindocs/views.py:241
-#, python-format
-msgid "all %s"
-msgstr "所有 %s"
-
-#: contrib/admindocs/views.py:246
-#, python-format
-msgid "number of %s"
-msgstr "%s 的数量"
-
-#: contrib/admindocs/views.py:251
-#, python-format
-msgid "Fields on %s objects"
-msgstr "%s 物件的欄位"
-
-#: contrib/admindocs/views.py:314 contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327 contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "整數"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "布林值 (True 或 False)"
-
-#: contrib/admindocs/views.py:316 contrib/admindocs/views.py:335
-#, fuzzy, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "字串(最長 %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "逗號分隔的整數"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "日期 (不包括時間)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "日期 (包括時間)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "小數"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "電子郵件地址"
-
-#: contrib/admindocs/views.py:322 contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "檔案路徑"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "浮點數"
-
-#: contrib/admindocs/views.py:328 contrib/comments/models.py:58
-msgid "IP address"
-msgstr "IP 位址"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "布林值 (True, False 或 None)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "與父模型的關係"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "電話號碼"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "文字"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "時間"
-
-#: contrib/admindocs/views.py:339 contrib/comments/forms.py:22
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "美國州名 (兩個大寫字母)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "XML 文件"
-
-#: contrib/admindocs/views.py:367
-#, python-format
-msgid "%s does not appear to be a urlpattern object"
-msgstr "%s 似乎不是一個 urlpattern 物件"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "書籤"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
-msgid "Documentation bookmarklets"
-msgstr "文件 bookmarklets"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">要安裝 bookmarklet,把連結拖進你的書籤工具列,或右擊該連結"
-"後新增到你的書籤裡。現在你可以從網站的任何頁面來選擇 bookmarklet。注意其中某"
-"些 bookmarklet 要求你必須是從被稱為 \"內部\" 的電腦來檢視網站的 (如果你不確定"
-"你的電腦是否在 \"內部\",那就和你的系統管理員談談)。</p>\n"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
-msgid "Documentation for this page"
-msgstr "本頁面的文件"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr "讓你跳到用來產生該頁面之檢視的任何一頁文件。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
-msgid "Show object ID"
-msgstr "顯示物件 ID"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr "顯示用來表示單一物件的頁面 content-type 與唯一 ID。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
-msgid "Edit this object (current window)"
-msgstr "編輯此物件 (目前視窗)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "跳到用來表示單一物件的管理頁面。"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
-msgid "Edit this object (new window)"
-msgstr "編輯此物件 (新視窗)"
-
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
-msgid "As above, but opens the admin page in a new window."
-msgstr "同上,但在新視窗裡開啟管理頁面。"
-
-#: contrib/auth/admin.py:21
-msgid "Personal info"
-msgstr "個人資訊"
-
-#: contrib/auth/admin.py:22
-msgid "Permissions"
-msgstr "權限"
-
-#: contrib/auth/admin.py:23
-msgid "Important dates"
-msgstr "重要日期"
-
-#: contrib/auth/admin.py:24
-msgid "Groups"
-msgstr "群組"
-
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "增加使用者"
-
-#: contrib/auth/admin.py:90
-msgid "Password changed successfully."
-msgstr "密碼修改成功"
-
-#: contrib/auth/admin.py:96
-#, python-format
-msgid "Change password: %s"
-msgstr "密碼變更: %s"
-
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr "必須。不超過30字。只能用能字母數字與底線(字母、數字和底線)。"
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "此值僅能包含字母、數字與底線。"
-
-#: contrib/auth/forms.py:18
-#, fuzzy
-msgid "Password confirmation"
-msgstr "密碼確認"
-
-#: contrib/auth/forms.py:30
-msgid "A user with that username already exists."
-msgstr "一個相同名稱的使用者已經存在。"
-
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
-msgid "The two password fields didn't match."
-msgstr "兩個密碼欄位不同。"
-
-#: contrib/auth/forms.py:82
-msgid "This account is inactive."
-msgstr "這個帳戶未啟用"
-
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "你的Web瀏覽器好像不允許使用cookie。登入時需要使用cookie。"
-
-#: contrib/auth/forms.py:100
-#, fuzzy
-msgid "E-mail"
-msgstr "電子郵件地址"
-
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr "這個電子郵件地址没有和任何用户帳號有關聯。你確定你已經註冊了?"
-
-#: contrib/auth/forms.py:134
-#, fuzzy, python-format
-msgid "Password reset on %s"
-msgstr "為 %s 密碼重設"
-
-#: contrib/auth/forms.py:142
-#, fuzzy
-msgid "New password"
-msgstr "新密碼"
-
-#: contrib/auth/forms.py:143
-#, fuzzy
-msgid "New password confirmation"
-msgstr "新密碼確認"
-
-#: contrib/auth/forms.py:168
-#, fuzzy
-msgid "Old password"
-msgstr "舊密碼"
-
-#: contrib/auth/forms.py:176
-msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "你的舊密碼不正確。請重新輸入。"
-
-#: contrib/auth/models.py:72 contrib/auth/models.py:95
-msgid "name"
-msgstr "名稱"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "代碼"
-
-#: contrib/auth/models.py:77
-msgid "permission"
-msgstr "權限"
-
-#: contrib/auth/models.py:78 contrib/auth/models.py:96
-msgid "permissions"
-msgstr "權限"
-
-#: contrib/auth/models.py:99
-msgid "group"
-msgstr "群組"
-
-#: contrib/auth/models.py:100 contrib/auth/models.py:146
-msgid "groups"
-msgstr "群組"
-
-#: contrib/auth/models.py:136
-msgid "username"
-msgstr "使用者名稱"
-
-#: contrib/auth/models.py:137
-msgid "first name"
-msgstr "名字"
-
-#: contrib/auth/models.py:138
-msgid "last name"
-msgstr "姓氏"
-
-#: contrib/auth/models.py:139
-msgid "e-mail address"
-msgstr "電子郵件地址"
-
-#: contrib/auth/models.py:140
-msgid "password"
-msgstr "密碼"
-
-#: contrib/auth/models.py:140
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"使用 '[algo]$[salt]$[hexdigest]' 或是 <a href=\"password/\">修改密碼表單</a>."
-
-#: contrib/auth/models.py:141
-msgid "staff status"
-msgstr "工作人員狀態"
-
-#: contrib/auth/models.py:141
-msgid "Designates whether the user can log into this admin site."
-msgstr "指定是否使用者可以登入此管理網站。"
-
-#: contrib/auth/models.py:142
-msgid "active"
-msgstr "有效"
-
-#: contrib/auth/models.py:142
-#, fuzzy
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr "指定是否使用者可以登入此管理網站。用取消選擇來取代刪除帳號。"
-
-#: contrib/auth/models.py:143
-msgid "superuser status"
-msgstr "超級使用者狀態"
-
-#: contrib/auth/models.py:143
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr "指定是否使用者可以登入到這個管理網站"
-
-#: contrib/auth/models.py:144
-msgid "last login"
-msgstr "上次登入"
-
-#: contrib/auth/models.py:145
-msgid "date joined"
-msgstr "加入日期"
-
-#: contrib/auth/models.py:147
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr "除了手動指定的權限之外,這個使用者也會得到其群組擁有的所有權限。"
-
-#: contrib/auth/models.py:148
-msgid "user permissions"
-msgstr "使用者權限"
-
-#: contrib/auth/models.py:152
-msgid "user"
-msgstr "使用者"
-
-#: contrib/auth/models.py:153
-msgid "users"
-msgstr "使用者"
-
-#: contrib/auth/models.py:308
-msgid "message"
-msgstr "訊息"
-
-#: contrib/auth/views.py:50
-msgid "Logged out"
-msgstr "登出"
-
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
-msgid "Enter a valid e-mail address."
-msgstr "輸入有效的電子郵件地址。"
-
-#: contrib/comments/admin.py:11
-#, fuzzy
-msgid "Content"
-msgstr "內容"
-
-#: contrib/comments/admin.py:14
-msgid "Metadata"
-msgstr "元資料"
-
-#: contrib/comments/forms.py:20
-#, fuzzy
-msgid "Name"
-msgstr "名稱"
-
-#: contrib/comments/forms.py:21
-#, fuzzy
-msgid "Email address"
-msgstr "電子郵件地址"
-
-#: contrib/comments/forms.py:23
-#, fuzzy
-msgid "Comment"
-msgstr "評論"
-
-#: contrib/comments/forms.py:26
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr "如果你在這一個欄位輸入任何內容,會被視為是垃圾評論"
-
-#: contrib/comments/forms.py:126
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "看住你的嘴!此處不允許 %s 這樣的字眼。"
-msgstr[1] ""
-
-#: contrib/comments/models.py:23
-msgid "object ID"
-msgstr "物件 ID"
-
-#: contrib/comments/models.py:50
-#, fuzzy
-msgid "user's name"
-msgstr "使用者名稱"
-
-#: contrib/comments/models.py:51
-#, fuzzy
-msgid "user's email address"
-msgstr "使用者電子郵件地址"
-
-#: contrib/comments/models.py:52
-#, fuzzy
-msgid "user's URL"
-msgstr "使用者的網址"
-
-#: contrib/comments/models.py:54
-msgid "comment"
-msgstr "評論"
-
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "日期/時間已送出"
-
-#: contrib/comments/models.py:59
-msgid "is public"
-msgstr "公開"
-
-#: contrib/comments/models.py:60
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-
-#: contrib/comments/models.py:62
-msgid "is removed"
-msgstr "已刪除"
-
-#: contrib/comments/models.py:63
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr "如果此評論不恰當則選取這個檢查框,其將以 \"此評論已被移除\" 訊息取代。"
-
-#: contrib/comments/models.py:115
-#, fuzzy
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr "此評論由一位已驗證的使用者發佈,該名稱是唯讀的。"
-
-#: contrib/comments/models.py:124
-#, fuzzy
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr "此評論由一位已驗證的使用者發佈,該 email 是唯讀的。"
-
-#: contrib/comments/models.py:149
-#, python-format
-msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-msgstr ""
-"由 %(user)s 在 %(date)s 張貼\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
-
-#: contrib/contenttypes/models.py:67
-msgid "python model class name"
-msgstr "python 模組名稱"
-
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "內容類型"
-
-#: contrib/contenttypes/models.py:72
-msgid "content types"
-msgstr "內容類型"
-
-#: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "例如: '/about/contact/'。開頭與結束的斜線。"
-
-#: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "此值僅能包含字母、數字、底線與斜線。"
-
-#: contrib/flatpages/admin.py:22
-msgid "Advanced options"
-msgstr "進階選項"
-
-#: contrib/flatpages/models.py:8
-msgid "title"
-msgstr "標題"
-
-#: contrib/flatpages/models.py:9
-msgid "content"
-msgstr "內容"
-
-#: contrib/flatpages/models.py:10
-msgid "enable comments"
-msgstr "啟用評論"
-
-#: contrib/flatpages/models.py:11
-msgid "template name"
-msgstr "模板名稱"
-
-#: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"例如: 'flatpages/contact_page'。如果沒有提供它,系統會使用 'flatpages/"
-"default.html'。"
-
-#: contrib/flatpages/models.py:13
-msgid "registration required"
-msgstr "請先註冊"
-
-#: contrib/flatpages/models.py:13
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "如果此項被選取,則只有登入的使用者可以檢視頁面。"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "簡平頁面"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "簡平頁面"
-
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr "很抱歉,但你的表單已過期。請繼續填寫本頁的表單。"
-
-#: contrib/gis/forms/fields.py:14
-msgid "No geometry value provided."
-msgstr "沒有幾何資訊。"
-
-#: contrib/gis/forms/fields.py:15
-#, fuzzy
-msgid "Invalid geometry value."
-msgstr "無效的幾何資訊。"
-
-#: contrib/gis/forms/fields.py:16
-#, fuzzy
-msgid "Invalid geometry type."
-msgstr "無效的幾何類型"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "th"
-msgstr "th"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "st"
-msgstr "st"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "nd"
-msgstr "nd"
-
-#: contrib/humanize/templatetags/humanize.py:19
-msgid "rd"
-msgstr "rd"
-
-#: contrib/humanize/templatetags/humanize.py:51
-#, python-format
-msgid "%(value).1f million"
-msgid_plural "%(value).1f million"
-msgstr[0] "%(value).1f 百萬"
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:54
-#, python-format
-msgid "%(value).1f billion"
-msgid_plural "%(value).1f billion"
-msgstr[0] "%(value).1f 十億"
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:57
-#, python-format
-msgid "%(value).1f trillion"
-msgid_plural "%(value).1f trillion"
-msgstr[0] "%(value).1f 兆"
-msgstr[1] ""
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "one"
-msgstr "一"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "two"
-msgstr "二"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "three"
-msgstr "三"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "four"
-msgstr "四"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "five"
-msgstr "五"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "six"
-msgstr "六"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "seven"
-msgstr "七"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "eight"
-msgstr "八"
-
-#: contrib/humanize/templatetags/humanize.py:73
-msgid "nine"
-msgstr "九"
-
-#: contrib/humanize/templatetags/humanize.py:93
-#, fuzzy
-msgid "today"
-msgstr "今天"
-
-#: contrib/humanize/templatetags/humanize.py:95
-msgid "tomorrow"
-msgstr "明天"
-
-#: contrib/humanize/templatetags/humanize.py:97
-#, fuzzy
-msgid "yesterday"
-msgstr "昨天"
-
-#: contrib/localflavor/ar/forms.py:27
-#, fuzzy
-msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "用 NNNN 或 ANNNNAAA 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-#, fuzzy
-msgid "This field requires only numbers."
-msgstr "這個欄位只能輸入數字。"
-
-#: contrib/localflavor/ar/forms.py:50
-#, fuzzy
-msgid "This field requires 7 or 8 digits."
-msgstr "這個欄位必須是 7 或 8 位數字。"
-
-#: contrib/localflavor/ar/forms.py:79
-#, fuzzy
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "以 XX-XXXXXXXX-X 或 XXXXXXXXXXXX 的格式输入一個有效的 CUIT。"
-
-#: contrib/localflavor/ar/forms.py:80
-msgid "Invalid CUIT."
-msgstr "無效的 CUIT"
-
-#: contrib/localflavor/at/at_states.py:5
-msgid "Burgenland"
-msgstr "布爾根蘭"
-
-#: contrib/localflavor/at/at_states.py:6
-msgid "Carinthia"
-msgstr "凱恩藤州"
-
-#: contrib/localflavor/at/at_states.py:7
-msgid "Lower Austria"
-msgstr "下奧地利州"
-
-#: contrib/localflavor/at/at_states.py:8
-msgid "Upper Austria"
-msgstr "上奧地利州"
-
-#: contrib/localflavor/at/at_states.py:9
-#, fuzzy
-msgid "Salzburg"
-msgstr "薩爾茨堡州"
-
-#: contrib/localflavor/at/at_states.py:10
-#, fuzzy
-msgid "Styria"
-msgstr "施泰爾馬克州"
-
-#: contrib/localflavor/at/at_states.py:11
-#, fuzzy
-msgid "Tyrol"
-msgstr "蒂羅爾州"
-
-#: contrib/localflavor/at/at_states.py:12
-msgid "Vorarlberg"
-msgstr "福拉爾貝格州"
-
-#: contrib/localflavor/at/at_states.py:13
-msgid "Vienna"
-msgstr "維也納州"
-
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
-msgid "Enter a zip code in the format XXXX."
-msgstr "用 XXXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/at/forms.py:48
-#, fuzzy
-msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "以 XXXX XXXXXX 的格式輸入一有效的奧地利社會保險號碼。"
-
-#: contrib/localflavor/au/forms.py:16
-#, fuzzy
-msgid "Enter a 4 digit post code."
-msgstr "輸入 4 個數字的郵遞區號"
-
-#: contrib/localflavor/br/forms.py:21
-msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "用 XXXXX-XXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/br/forms.py:30
-msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "電話號碼必須是 XX-XXXX-XXXX 格式。"
-
-#: contrib/localflavor/br/forms.py:58
-#, fuzzy
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr "選擇有效的巴西州,此選擇不在可用的选项中。"
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "無效的 CPF 號碼。"
-
-#: contrib/localflavor/br/forms.py:95
-#, fuzzy
-msgid "This field requires at most 11 digits or 14 characters."
-msgstr "確定你輸入的值最多 11 位數字或 14 個字符。"
-
-#: contrib/localflavor/br/forms.py:134
-msgid "Invalid CNPJ number."
-msgstr "無效的 CNPJ 號碼。"
-
-#: contrib/localflavor/br/forms.py:136
-#, fuzzy
-msgid "This field requires at least 14 digits"
-msgstr "這個欄位要求至少 14 位數字。"
-
-#: contrib/localflavor/ca/forms.py:17
-#, fuzzy
-msgid "Enter a postal code in the format XXX XXX."
-msgstr "用 XXX XXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/ca/forms.py:88
-#, fuzzy
-msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "以 XXX-XXX-XXX 的格式輸入一有效的加拿大社會保險號碼。"
-
-#: contrib/localflavor/ch/ch_states.py:5
-#, fuzzy
-msgid "Aargau"
-msgstr "阿爾高"
-
-#: contrib/localflavor/ch/ch_states.py:6
-msgid "Appenzell Innerrhoden"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:7
-msgid "Appenzell Ausserrhoden"
-msgstr "外阿彭策爾"
-
-#: contrib/localflavor/ch/ch_states.py:8
-msgid "Basel-Stadt"
-msgstr "巴澤爾城市"
-
-#: contrib/localflavor/ch/ch_states.py:9
-msgid "Basel-Land"
-msgstr "巴澤爾鄉村"
-
-#: contrib/localflavor/ch/ch_states.py:10
-#, fuzzy
-msgid "Berne"
-msgstr "伯恩"
-
-#: contrib/localflavor/ch/ch_states.py:11
-msgid "Fribourg"
-msgstr "弗里堡"
-
-#: contrib/localflavor/ch/ch_states.py:12
-msgid "Geneva"
-msgstr "日內瓦"
-
-#: contrib/localflavor/ch/ch_states.py:13
-#, fuzzy
-msgid "Glarus"
-msgstr "格拉魯斯"
-
-#: contrib/localflavor/ch/ch_states.py:14
-msgid "Graubuenden"
-msgstr "格勞賓登"
-
-#: contrib/localflavor/ch/ch_states.py:15
-msgid "Jura"
-msgstr "汝拉"
-
-#: contrib/localflavor/ch/ch_states.py:16
-#, fuzzy
-msgid "Lucerne"
-msgstr "盧塞恩"
-
-#: contrib/localflavor/ch/ch_states.py:17
-msgid "Neuchatel"
-msgstr "納沙泰爾"
-
-#: contrib/localflavor/ch/ch_states.py:18
-msgid "Nidwalden"
-msgstr "下瓦爾登"
-
-#: contrib/localflavor/ch/ch_states.py:19
-msgid "Obwalden"
-msgstr "上瓦爾登"
-
-#: contrib/localflavor/ch/ch_states.py:20
-msgid "Schaffhausen"
-msgstr "沙夫豪森"
-
-#: contrib/localflavor/ch/ch_states.py:21
-msgid "Schwyz"
-msgstr "施維茨"
-
-#: contrib/localflavor/ch/ch_states.py:22
-msgid "Solothurn"
-msgstr "索洛圖恩"
-
-#: contrib/localflavor/ch/ch_states.py:23
-msgid "St. Gallen"
-msgstr "聖加侖"
-
-#: contrib/localflavor/ch/ch_states.py:24
-#, fuzzy
-msgid "Thurgau"
-msgstr "圖爾高"
-
-#: contrib/localflavor/ch/ch_states.py:25
-msgid "Ticino"
-msgstr "提契諾"
-
-#: contrib/localflavor/ch/ch_states.py:26
-msgid "Uri"
-msgstr ""
-
-#: contrib/localflavor/ch/ch_states.py:27
-msgid "Valais"
-msgstr "瓦萊"
-
-#: contrib/localflavor/ch/ch_states.py:28
-msgid "Vaud"
-msgstr "沃"
-
-#: contrib/localflavor/ch/ch_states.py:29
-#, fuzzy
-msgid "Zug"
-msgstr "楚格"
-
-#: contrib/localflavor/ch/ch_states.py:30
-#, fuzzy
-msgid "Zurich"
-msgstr "蘇黎世"
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr "以格式為 X1234567<0 或 1234567890 輸入一個有效的瑞士身份證號碼或者或是護照號碼。"
-
-#: contrib/localflavor/cl/forms.py:29
-#, fuzzy
-msgid "Enter a valid Chilean RUT."
-msgstr "輸入一個有效的 Chilean RUT。"
-
-#: contrib/localflavor/cl/forms.py:30
-#, fuzzy
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "用 XX.XXX.XXX-X 的格式輸入 Chilean RUT。"
-
-#: contrib/localflavor/cl/forms.py:31
-#, fuzzy
-msgid "The Chilean RUT is not valid."
-msgstr "Chilean RUT 無效"
-
-#: contrib/localflavor/de/de_states.py:5
-msgid "Baden-Wuerttemberg"
-msgstr "巴登符騰堡"
-
-#: contrib/localflavor/de/de_states.py:6
-msgid "Bavaria"
-msgstr "巴伐利亞"
-
-#: contrib/localflavor/de/de_states.py:7
-msgid "Berlin"
-msgstr "柏林"
-
-#: contrib/localflavor/de/de_states.py:8
-msgid "Brandenburg"
-msgstr "勃蘭登堡"
-
-#: contrib/localflavor/de/de_states.py:9
-msgid "Bremen"
-msgstr "布萊梅"
-
-#: contrib/localflavor/de/de_states.py:10
-msgid "Hamburg"
-msgstr "漢堡"
-
-#: contrib/localflavor/de/de_states.py:11
-msgid "Hessen"
-msgstr "黑森"
-
-#: contrib/localflavor/de/de_states.py:12
-msgid "Mecklenburg-Western Pomerania"
-msgstr "梅克倫堡-前波莫瑞"
-
-#: contrib/localflavor/de/de_states.py:13
-msgid "Lower Saxony"
-msgstr "下薩克森"
-
-#: contrib/localflavor/de/de_states.py:14
-msgid "North Rhine-Westphalia"
-msgstr "北萊茵-威斯特法倫"
-
-#: contrib/localflavor/de/de_states.py:15
-msgid "Rhineland-Palatinate"
-msgstr "萊茵蘭-普法爾茨"
-
-#: contrib/localflavor/de/de_states.py:16
-msgid "Saarland"
-msgstr "薩爾蘭"
-
-#: contrib/localflavor/de/de_states.py:17
-msgid "Saxony"
-msgstr "薩克森"
-
-#: contrib/localflavor/de/de_states.py:18
-msgid "Saxony-Anhalt"
-msgstr "薩克森-安哈爾特"
-
-#: contrib/localflavor/de/de_states.py:19
-msgid "Schleswig-Holstein"
-msgstr "石勒蘇益格-荷爾斯泰因"
-
-#: contrib/localflavor/de/de_states.py:20
-msgid "Thuringia"
-msgstr "圖林根"
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
-msgid "Enter a zip code in the format XXXXX."
-msgstr "用 XXXXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/de/forms.py:41
-#, fuzzy
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr "以 XXXXXXXXXXX-XXXXXXX-XXXXXXX-X 的格式輸入一個有效的德國身份證號碼。"
-
-#: contrib/localflavor/es/es_provinces.py:5
-msgid "Arava"
-msgstr "阿拉瓦"
-
-#: contrib/localflavor/es/es_provinces.py:6
-msgid "Albacete"
-msgstr "阿爾瓦塞特"
-
-#: contrib/localflavor/es/es_provinces.py:7
-msgid "Alacant"
-msgstr "阿利坎特"
-
-#: contrib/localflavor/es/es_provinces.py:8
-#, fuzzy
-msgid "Almeria"
-msgstr "阿爾梅里亞"
-
-#: contrib/localflavor/es/es_provinces.py:9
-#, fuzzy
-msgid "Avila"
-msgstr "阿維拉"
-
-#: contrib/localflavor/es/es_provinces.py:10
-msgid "Badajoz"
-msgstr "巴達霍斯"
-
-#: contrib/localflavor/es/es_provinces.py:11
-msgid "Illes Balears"
-msgstr "巴利阿里群島"
-
-#: contrib/localflavor/es/es_provinces.py:12
-#, fuzzy
-msgid "Barcelona"
-msgstr "巴塞隆納"
-
-#: contrib/localflavor/es/es_provinces.py:13
-msgid "Burgos"
-msgstr "布爾戈斯"
-
-#: contrib/localflavor/es/es_provinces.py:14
-msgid "Caceres"
-msgstr "卡塞雷斯"
-
-#: contrib/localflavor/es/es_provinces.py:15
-msgid "Cadiz"
-msgstr "加迪斯"
-
-#: contrib/localflavor/es/es_provinces.py:16
-msgid "Castello"
-msgstr "城堡"
-
-#: contrib/localflavor/es/es_provinces.py:17
-msgid "Ciudad Real"
-msgstr "雷亞爾"
-
-#: contrib/localflavor/es/es_provinces.py:18
-msgid "Cordoba"
-msgstr "科多巴"
-
-#: contrib/localflavor/es/es_provinces.py:19
-msgid "A Coruna"
-msgstr "拉科魯納"
-
-#: contrib/localflavor/es/es_provinces.py:20
-msgid "Cuenca"
-msgstr "昆卡"
-
-#: contrib/localflavor/es/es_provinces.py:21
-msgid "Girona"
-msgstr "赫羅納"
-
-#: contrib/localflavor/es/es_provinces.py:22
-#, fuzzy
-msgid "Granada"
-msgstr "格拉納達"
-
-#: contrib/localflavor/es/es_provinces.py:23
-msgid "Guadalajara"
-msgstr "瓜達拉哈拉"
-
-#: contrib/localflavor/es/es_provinces.py:24
-msgid "Guipuzkoa"
-msgstr "吉普斯夸"
-
-#: contrib/localflavor/es/es_provinces.py:25
-msgid "Huelva"
-msgstr "韋爾瓦"
-
-#: contrib/localflavor/es/es_provinces.py:26
-#, fuzzy
-msgid "Huesca"
-msgstr "威斯卡"
-
-#: contrib/localflavor/es/es_provinces.py:27
-#, fuzzy
-msgid "Jaen"
-msgstr "哈恩"
-
-#: contrib/localflavor/es/es_provinces.py:28
-#, fuzzy
-msgid "Leon"
-msgstr "里昂"
-
-#: contrib/localflavor/es/es_provinces.py:29
-msgid "Lleida"
-msgstr "萊里達"
-
-#: contrib/localflavor/es/es_provinces.py:30
-#: contrib/localflavor/es/es_regions.py:17
-msgid "La Rioja"
-msgstr "里奧夏"
-
-#: contrib/localflavor/es/es_provinces.py:31
-msgid "Lugo"
-msgstr "盧戈"
-
-#: contrib/localflavor/es/es_provinces.py:32
-#: contrib/localflavor/es/es_regions.py:18
-msgid "Madrid"
-msgstr "馬德里"
-
-#: contrib/localflavor/es/es_provinces.py:33
-#, fuzzy
-msgid "Malaga"
-msgstr "左賀"
-
-#: contrib/localflavor/es/es_provinces.py:34
-msgid "Murcia"
-msgstr "穆爾西亞"
-
-#: contrib/localflavor/es/es_provinces.py:35
-msgid "Navarre"
-msgstr "納瓦拉"
-
-#: contrib/localflavor/es/es_provinces.py:36
-msgid "Ourense"
-msgstr "奥倫斯"
-
-#: contrib/localflavor/es/es_provinces.py:37
-msgid "Asturias"
-msgstr "阿斯杜里亞斯"
-
-#: contrib/localflavor/es/es_provinces.py:38
-#, fuzzy
-msgid "Palencia"
-msgstr "帕倫西亞"
-
-#: contrib/localflavor/es/es_provinces.py:39
-msgid "Las Palmas"
-msgstr "洛斯卡布斯"
-
-#: contrib/localflavor/es/es_provinces.py:40
-msgid "Pontevedra"
-msgstr "蓬特韋德拉"
-
-#: contrib/localflavor/es/es_provinces.py:41
-#, fuzzy
-msgid "Salamanca"
-msgstr "薩拉曼卡"
-
-#: contrib/localflavor/es/es_provinces.py:42
-msgid "Santa Cruz de Tenerife"
-msgstr "聖克魯斯-德特內裡費"
-
-#: contrib/localflavor/es/es_provinces.py:43
-#: contrib/localflavor/es/es_regions.py:11
-#, fuzzy
-msgid "Cantabria"
-msgstr "坎塔布里亞"
-
-#: contrib/localflavor/es/es_provinces.py:44
-#, fuzzy
-msgid "Segovia"
-msgstr "塞戈維亞"
-
-#: contrib/localflavor/es/es_provinces.py:45
-msgid "Seville"
-msgstr "塞維利亞"
-
-#: contrib/localflavor/es/es_provinces.py:46
-#, fuzzy
-msgid "Soria"
-msgstr "索利亞"
-
-#: contrib/localflavor/es/es_provinces.py:47
-msgid "Tarragona"
-msgstr "塔拉戈納"
-
-#: contrib/localflavor/es/es_provinces.py:48
-msgid "Teruel"
-msgstr "特魯埃爾"
-
-#: contrib/localflavor/es/es_provinces.py:49
-msgid "Toledo"
-msgstr "托萊多"
-
-#: contrib/localflavor/es/es_provinces.py:50
-#, fuzzy
-msgid "Valencia"
-msgstr "瓦倫西亞"
-
-#: contrib/localflavor/es/es_provinces.py:51
-msgid "Valladolid"
-msgstr "瓦利阿多里德"
-
-#: contrib/localflavor/es/es_provinces.py:52
-msgid "Bizkaia"
-msgstr "巴斯克"
-
-#: contrib/localflavor/es/es_provinces.py:53
-#, fuzzy
-msgid "Zamora"
-msgstr "扎莫拉"
-
-#: contrib/localflavor/es/es_provinces.py:54
-msgid "Zaragoza"
-msgstr "薩拉戈薩"
-
-#: contrib/localflavor/es/es_provinces.py:55
-msgid "Ceuta"
-msgstr "休達"
-
-#: contrib/localflavor/es/es_provinces.py:56
-msgid "Melilla"
-msgstr "梅利利亞"
-
-#: contrib/localflavor/es/es_regions.py:5
-msgid "Andalusia"
-msgstr "安達魯西亞"
-
-#: contrib/localflavor/es/es_regions.py:6
-msgid "Aragon"
-msgstr "阿拉貢"
-
-#: contrib/localflavor/es/es_regions.py:7
-msgid "Principality of Asturias"
-msgstr "Principality of Asturias"
-
-#: contrib/localflavor/es/es_regions.py:8
-msgid "Balearic Islands"
-msgstr "巴利阿里群島"
-
-#: contrib/localflavor/es/es_regions.py:9
-msgid "Basque Country"
-msgstr "巴斯克地區"
-
-#: contrib/localflavor/es/es_regions.py:10
-#, fuzzy
-msgid "Canary Islands"
-msgstr "加那利群島"
-
-#: contrib/localflavor/es/es_regions.py:12
-msgid "Castile-La Mancha"
-msgstr "卡斯提爾-拉曼查"
-
-#: contrib/localflavor/es/es_regions.py:13
-msgid "Castile and Leon"
-msgstr "卡斯蒂利亞和里昂"
-
-#: contrib/localflavor/es/es_regions.py:14
-#, fuzzy
-msgid "Catalonia"
-msgstr "加泰隆尼亞"
-
-#: contrib/localflavor/es/es_regions.py:15
-msgid "Extremadura"
-msgstr "艾司德雷馬度"
-
-#: contrib/localflavor/es/es_regions.py:16
-#, fuzzy
-msgid "Galicia"
-msgstr "加利西亞"
-
-#: contrib/localflavor/es/es_regions.py:19
-msgid "Region of Murcia"
-msgstr "穆爾西亞地區"
-
-#: contrib/localflavor/es/es_regions.py:20
-msgid "Foral Community of Navarre"
-msgstr "Foral Community of Navarre"
-
-#: contrib/localflavor/es/es_regions.py:21
-msgid "Valencian Community"
-msgstr "瓦倫西亞自治區"
-
-#: contrib/localflavor/es/forms.py:19
-#, fuzzy
-msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "以 01XXX - 52XXX 的格式输入一個有效範圍內的郵遞區號。"
-
-#: contrib/localflavor/es/forms.py:39
-#, fuzzy
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr "以 6XXXXXXXX, 8XXXXXXXX 或 9XXXXXXXX 的格式輸入一個有效的電話號碼。"
-
-#: contrib/localflavor/es/forms.py:66
-#, fuzzy
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "請輸入有效的 NIF,NIE,或 CIF。"
-
-#: contrib/localflavor/es/forms.py:67
-#, fuzzy
-msgid "Please enter a valid NIF or NIE."
-msgstr "請輸入有效的 NIF 或 NIE。"
-
-#: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr "無效的 NIF 校驗和。"
-
-#: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr "無效的 NIE 校驗和。"
-
-#: contrib/localflavor/es/forms.py:70
-msgid "Invalid checksum for CIF."
-msgstr "無效的 CIF 校驗和。"
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "請輸入一個有效的銀行值帳號,格式為 XXXX-XXXX-XX-XXXXXXXXXX。"
-
-#: contrib/localflavor/es/forms.py:143
-msgid "Invalid checksum for bank account number."
-msgstr "無效的銀行帳號校驗和。"
-
-#: contrib/localflavor/fi/forms.py:28
-msgid "Enter a valid Finnish social security number."
-msgstr "請輸入一個有效的芬蘭社會保險號碼。"
-
-#: contrib/localflavor/in_/forms.py:14
-#, fuzzy
-msgid "Enter a zip code in the format XXXXXXX."
-msgstr "用 XXXXXXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "用 XXXXXX-XXXX 的格式輸入冰島身份證號碼。"
-
-#: contrib/localflavor/is_/forms.py:18
-msgid "The Icelandic identification number is not valid."
-msgstr "無效的冰島身份證號碼。"
-
-#: contrib/localflavor/it/forms.py:14
-#, fuzzy
-msgid "Enter a valid zip code."
-msgstr "輸入有效的郵遞區號。"
-
-#: contrib/localflavor/it/forms.py:43
-#, fuzzy
-msgid "Enter a valid Social Security number."
-msgstr "請輸入一個有效的社會保險號碼。"
-
-#: contrib/localflavor/it/forms.py:68
-#, fuzzy
-msgid "Enter a valid VAT number."
-msgstr "輸入有效的 VAT 號碼。"
-
-#: contrib/localflavor/jp/forms.py:16
-msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "用 XXXXXXX 或 XXX-XXXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/jp/jp_prefectures.py:4
-msgid "Hokkaido"
-msgstr "北海道"
-
-#: contrib/localflavor/jp/jp_prefectures.py:5
-msgid "Aomori"
-msgstr "青森"
-
-#: contrib/localflavor/jp/jp_prefectures.py:6
-msgid "Iwate"
-msgstr "岩手"
-
-#: contrib/localflavor/jp/jp_prefectures.py:7
-msgid "Miyagi"
-msgstr "宮城縣"
-
-#: contrib/localflavor/jp/jp_prefectures.py:8
-msgid "Akita"
-msgstr "秋田"
-
-#: contrib/localflavor/jp/jp_prefectures.py:9
-msgid "Yamagata"
-msgstr "山形"
-
-#: contrib/localflavor/jp/jp_prefectures.py:10
-msgid "Fukushima"
-msgstr "福島"
-
-#: contrib/localflavor/jp/jp_prefectures.py:11
-msgid "Ibaraki"
-msgstr "茨城"
-
-#: contrib/localflavor/jp/jp_prefectures.py:12
-msgid "Tochigi"
-msgstr "櫪木"
-
-#: contrib/localflavor/jp/jp_prefectures.py:13
-msgid "Gunma"
-msgstr "群馬"
-
-#: contrib/localflavor/jp/jp_prefectures.py:14
-msgid "Saitama"
-msgstr "埼玉"
-
-#: contrib/localflavor/jp/jp_prefectures.py:15
-msgid "Chiba"
-msgstr "千葉"
-
-#: contrib/localflavor/jp/jp_prefectures.py:16
-msgid "Tokyo"
-msgstr "東京"
-
-#: contrib/localflavor/jp/jp_prefectures.py:17
-msgid "Kanagawa"
-msgstr "神奈川"
-
-#: contrib/localflavor/jp/jp_prefectures.py:18
-msgid "Yamanashi"
-msgstr "山梨"
-
-#: contrib/localflavor/jp/jp_prefectures.py:19
-msgid "Nagano"
-msgstr "長野"
-
-#: contrib/localflavor/jp/jp_prefectures.py:20
-msgid "Niigata"
-msgstr "新瀉"
-
-#: contrib/localflavor/jp/jp_prefectures.py:21
-msgid "Toyama"
-msgstr "富山"
-
-#: contrib/localflavor/jp/jp_prefectures.py:22
-msgid "Ishikawa"
-msgstr "石川"
-
-#: contrib/localflavor/jp/jp_prefectures.py:23
-msgid "Fukui"
-msgstr "福井"
-
-#: contrib/localflavor/jp/jp_prefectures.py:24
-msgid "Gifu"
-msgstr "岐阜"
-
-#: contrib/localflavor/jp/jp_prefectures.py:25
-msgid "Shizuoka"
-msgstr "靜岡"
-
-#: contrib/localflavor/jp/jp_prefectures.py:26
-msgid "Aichi"
-msgstr "愛知"
-
-#: contrib/localflavor/jp/jp_prefectures.py:27
-msgid "Mie"
-msgstr "三重"
-
-#: contrib/localflavor/jp/jp_prefectures.py:28
-msgid "Shiga"
-msgstr "滋賀"
-
-#: contrib/localflavor/jp/jp_prefectures.py:29
-msgid "Kyoto"
-msgstr "京都"
-
-#: contrib/localflavor/jp/jp_prefectures.py:30
-msgid "Osaka"
-msgstr "大阪"
-
-#: contrib/localflavor/jp/jp_prefectures.py:31
-msgid "Hyogo"
-msgstr "兵庫"
-
-#: contrib/localflavor/jp/jp_prefectures.py:32
-msgid "Nara"
-msgstr "奈良"
-
-#: contrib/localflavor/jp/jp_prefectures.py:33
-msgid "Wakayama"
-msgstr "和歌山"
-
-#: contrib/localflavor/jp/jp_prefectures.py:34
-msgid "Tottori"
-msgstr "鳥取"
-
-#: contrib/localflavor/jp/jp_prefectures.py:35
-msgid "Shimane"
-msgstr "島根"
-
-#: contrib/localflavor/jp/jp_prefectures.py:36
-msgid "Okayama"
-msgstr "岡山"
-
-#: contrib/localflavor/jp/jp_prefectures.py:37
-msgid "Hiroshima"
-msgstr "廣島"
-
-#: contrib/localflavor/jp/jp_prefectures.py:38
-msgid "Yamaguchi"
-msgstr "山口"
-
-#: contrib/localflavor/jp/jp_prefectures.py:39
-msgid "Tokushima"
-msgstr "德島"
-
-#: contrib/localflavor/jp/jp_prefectures.py:40
-msgid "Kagawa"
-msgstr "香川"
-
-#: contrib/localflavor/jp/jp_prefectures.py:41
-msgid "Ehime"
-msgstr "愛媛縣"
-
-#: contrib/localflavor/jp/jp_prefectures.py:42
-msgid "Kochi"
-msgstr "高知"
-
-#: contrib/localflavor/jp/jp_prefectures.py:43
-msgid "Fukuoka"
-msgstr "福岡"
-
-#: contrib/localflavor/jp/jp_prefectures.py:44
-msgid "Saga"
-msgstr "左賀"
-
-#: contrib/localflavor/jp/jp_prefectures.py:45
-msgid "Nagasaki"
-msgstr "長崎"
-
-#: contrib/localflavor/jp/jp_prefectures.py:46
-msgid "Kumamoto"
-msgstr "熊本"
-
-#: contrib/localflavor/jp/jp_prefectures.py:47
-msgid "Oita"
-msgstr "大分"
-
-#: contrib/localflavor/jp/jp_prefectures.py:48
-msgid "Miyazaki"
-msgstr "宫崎"
-
-#: contrib/localflavor/jp/jp_prefectures.py:49
-msgid "Kagoshima"
-msgstr "鹿兒島"
-
-#: contrib/localflavor/jp/jp_prefectures.py:50
-msgid "Okinawa"
-msgstr "琉球"
-
-#: contrib/localflavor/mx/mx_states.py:12
-msgid "Aguascalientes"
-msgstr "阿瓜斯卡連特斯"
-
-#: contrib/localflavor/mx/mx_states.py:13
-msgid "Baja California"
-msgstr "下加利福尼亞州"
-
-#: contrib/localflavor/mx/mx_states.py:14
-msgid "Baja California Sur"
-msgstr "南下加利福尼亞州"
-
-#: contrib/localflavor/mx/mx_states.py:15
-#, fuzzy
-msgid "Campeche"
-msgstr "坎佩切"
-
-#: contrib/localflavor/mx/mx_states.py:16
-msgid "Chihuahua"
-msgstr "奇瓦瓦"
-
-#: contrib/localflavor/mx/mx_states.py:17
-#, fuzzy
-msgid "Chiapas"
-msgstr "恰帕斯"
-
-#: contrib/localflavor/mx/mx_states.py:18
-#, fuzzy
-msgid "Coahuila"
-msgstr "科阿韋拉"
-
-#: contrib/localflavor/mx/mx_states.py:19
-msgid "Colima"
-msgstr "科利馬"
-
-#: contrib/localflavor/mx/mx_states.py:20
-msgid "Distrito Federal"
-msgstr "聯邦區"
-
-#: contrib/localflavor/mx/mx_states.py:21
-msgid "Durango"
-msgstr "杜蘭戈"
-
-#: contrib/localflavor/mx/mx_states.py:22
-#, fuzzy
-msgid "Guerrero"
-msgstr "格雷羅"
-
-#: contrib/localflavor/mx/mx_states.py:23
-msgid "Guanajuato"
-msgstr "瓜納華托"
-
-#: contrib/localflavor/mx/mx_states.py:24
-msgid "Hidalgo"
-msgstr "伊達爾戈"
-
-#: contrib/localflavor/mx/mx_states.py:25
-msgid "Jalisco"
-msgstr "哈利斯科"
-
-#: contrib/localflavor/mx/mx_states.py:26
-msgid "Estado de México"
-msgstr "Estado de México"
-
-#: contrib/localflavor/mx/mx_states.py:27
-msgid "Michoacán"
-msgstr "米却肯"
-
-#: contrib/localflavor/mx/mx_states.py:28
-msgid "Morelos"
-msgstr "莫雷洛斯"
-
-#: contrib/localflavor/mx/mx_states.py:29
-msgid "Nayarit"
-msgstr "納亞里特"
-
-#: contrib/localflavor/mx/mx_states.py:30
-msgid "Nuevo León"
-msgstr "新萊昂"
-
-#: contrib/localflavor/mx/mx_states.py:31
-#, fuzzy
-msgid "Oaxaca"
-msgstr "瓦哈卡"
-
-#: contrib/localflavor/mx/mx_states.py:32
-msgid "Puebla"
-msgstr "普埃布拉"
-
-#: contrib/localflavor/mx/mx_states.py:33
-msgid "Querétaro"
-msgstr "克雷塔羅"
-
-#: contrib/localflavor/mx/mx_states.py:34
-msgid "Quintana Roo"
-msgstr "金塔納羅奧"
-
-#: contrib/localflavor/mx/mx_states.py:35
-#, fuzzy
-msgid "Sinaloa"
-msgstr "錫那羅亞"
-
-#: contrib/localflavor/mx/mx_states.py:36
-msgid "San Luis Potosí"
-msgstr "聖路易斯波托西"
-
-#: contrib/localflavor/mx/mx_states.py:37
-msgid "Sonora"
-msgstr "索諾拉"
-
-#: contrib/localflavor/mx/mx_states.py:38
-msgid "Tabasco"
-msgstr "塔巴斯科"
-
-#: contrib/localflavor/mx/mx_states.py:39
-msgid "Tamaulipas"
-msgstr "塔毛利帕斯"
-
-#: contrib/localflavor/mx/mx_states.py:40
-msgid "Tlaxcala"
-msgstr "特拉斯卡拉"
-
-#: contrib/localflavor/mx/mx_states.py:41
-msgid "Veracruz"
-msgstr "韋拉克魯斯"
-
-#: contrib/localflavor/mx/mx_states.py:42
-msgid "Yucatán"
-msgstr "尤卡坦"
-
-#: contrib/localflavor/mx/mx_states.py:43
-msgid "Zacatecas"
-msgstr "薩卡特卡斯"
-
-#: contrib/localflavor/nl/forms.py:21
-#, fuzzy
-msgid "Enter a valid postal code"
-msgstr "輸入有效的郵遞區號"
-
-#: contrib/localflavor/nl/forms.py:52
-#, fuzzy
-msgid "Enter a valid phone number"
-msgstr "輸入有效的電話號碼"
-
-#: contrib/localflavor/nl/forms.py:78
-#, fuzzy
-msgid "Enter a valid SoFi number"
-msgstr "輸入有效的 SoFi 號碼"
-
-#: contrib/localflavor/nl/nl_provinces.py:4
-#, fuzzy
-msgid "Drenthe"
-msgstr "德蘭特"
-
-#: contrib/localflavor/nl/nl_provinces.py:5
-msgid "Flevoland"
-msgstr "弗萊福蘭"
-
-#: contrib/localflavor/nl/nl_provinces.py:6
-msgid "Friesland"
-msgstr "弗里斯蘭"
-
-#: contrib/localflavor/nl/nl_provinces.py:7
-#, fuzzy
-msgid "Gelderland"
-msgstr "海爾德蘭"
-
-#: contrib/localflavor/nl/nl_provinces.py:8
-#, fuzzy
-msgid "Groningen"
-msgstr "格羅寧根"
-
-#: contrib/localflavor/nl/nl_provinces.py:9
-#, fuzzy
-msgid "Limburg"
-msgstr "林堡"
-
-#: contrib/localflavor/nl/nl_provinces.py:10
-msgid "Noord-Brabant"
-msgstr "北布拉班特"
-
-#: contrib/localflavor/nl/nl_provinces.py:11
-msgid "Noord-Holland"
-msgstr "北荷蘭"
-
-#: contrib/localflavor/nl/nl_provinces.py:12
-msgid "Overijssel"
-msgstr "上艾瑟爾"
-
-#: contrib/localflavor/nl/nl_provinces.py:13
-#, fuzzy
-msgid "Utrecht"
-msgstr "烏特勒支"
-
-#: contrib/localflavor/nl/nl_provinces.py:14
-#, fuzzy
-msgid "Zeeland"
-msgstr "澤蘭"
-
-#: contrib/localflavor/nl/nl_provinces.py:15
-msgid "Zuid-Holland"
-msgstr "南荷蘭"
-
-#: contrib/localflavor/no/forms.py:33
-msgid "Enter a valid Norwegian social security number."
-msgstr "請輸入一個有效的挪威社會保險號碼。"
-
-#: contrib/localflavor/pe/forms.py:24
-#, fuzzy
-msgid "This field requires 8 digits."
-msgstr "這個欄位是必須是 8 位數字。"
-
-#: contrib/localflavor/pe/forms.py:52
-#, fuzzy
-msgid "This field requires 11 digits."
-msgstr "這個欄位是必須是 11 位數字。"
-
-#: contrib/localflavor/pl/forms.py:38
-msgid "National Identification Number consists of 11 digits."
-msgstr "國家身份證號碼由 11 位數字值組成。"
-
-#: contrib/localflavor/pl/forms.py:39
-msgid "Wrong checksum for the National Identification Number."
-msgstr "國家身份證號碼校驗和錯誤。"
-
-#: contrib/localflavor/pl/forms.py:71
-#, fuzzy
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "輸入一個税號(NIP),格式為 XXX-XXX-XX-XX 或 XX-XX-XXX-XXX。"
-
-#: contrib/localflavor/pl/forms.py:72
-msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "税號(NIP)校驗和錯誤。"
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
-msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "國家商標註冊號碼(REGON)由 7 位或 9 位数字組成。"
-
-#: contrib/localflavor/pl/forms.py:155
-#, fuzzy
-msgid "Enter a postal code in the format XX-XXX."
-msgstr "用 XX-XXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:8
-#, fuzzy
-msgid "Lower Silesia"
-msgstr "下西里西亞"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:9
-msgid "Kuyavia-Pomerania"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:10
-msgid "Lublin"
-msgstr "盧布林"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:11
-msgid "Lubusz"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:12
-msgid "Lodz"
-msgstr "洛次"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:13
-msgid "Lesser Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:14
-msgid "Masovia"
-msgstr "瑪佐維亞"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:15
-#, fuzzy
-msgid "Opole"
-msgstr "奧波萊"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:16
-msgid "Subcarpatia"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:17
-msgid "Podlasie"
-msgstr "波德拉謝"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:18
-#, fuzzy
-msgid "Pomerania"
-msgstr "波美拉尼亞"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:19
-#, fuzzy
-msgid "Silesia"
-msgstr "西里西亞"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:20
-msgid "Swietokrzyskie"
-msgstr "聖十字省"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:21
-msgid "Warmia-Masuria"
-msgstr "瓦爾米亞-馬祖里"
-
-#: contrib/localflavor/pl/pl_voivodeships.py:22
-msgid "Greater Poland"
-msgstr ""
-
-#: contrib/localflavor/pl/pl_voivodeships.py:23
-#, fuzzy
-msgid "West Pomerania"
-msgstr "西波美拉尼亞"
-
-#: contrib/localflavor/ro/forms.py:19
-#, fuzzy
-msgid "Enter a valid CIF."
-msgstr "輸入有效的 CIF。"
-
-#: contrib/localflavor/ro/forms.py:56
-#, fuzzy
-msgid "Enter a valid CNP."
-msgstr "輸入有效的 CNP。"
-
-#: contrib/localflavor/ro/forms.py:141
-#, fuzzy
-msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "以 ROXX-XXXX-XXXX-XXXX-XXXX-XXXX 的格式輸入一個有效的 IBAN。"
-
-#: contrib/localflavor/ro/forms.py:171
-#, fuzzy
-msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "電話號碼必須是 XXXX-XXXXXX 格式。"
-
-#: contrib/localflavor/ro/forms.py:194
-#, fuzzy
-msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "用 XXXXXX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/sk/forms.py:30
-#, fuzzy
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "用 XXXXX 或 XXXX XX 的格式輸入郵遞區號。"
-
-#: contrib/localflavor/sk/sk_districts.py:8
-msgid "Banska Bystrica"
-msgstr "班斯卡·比斯特理察"
-
-#: contrib/localflavor/sk/sk_districts.py:9
-msgid "Banska Stiavnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:10
-msgid "Bardejov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:11
-msgid "Banovce nad Bebravou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:12
-#, fuzzy
-msgid "Brezno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:13
-msgid "Bratislava I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:14
-msgid "Bratislava II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:15
-msgid "Bratislava III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:16
-msgid "Bratislava IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:17
-msgid "Bratislava V"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:18
-msgid "Bytca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:19
-msgid "Cadca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:20
-msgid "Detva"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:21
-msgid "Dolny Kubin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:22
-msgid "Dunajska Streda"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:23
-#, fuzzy
-msgid "Galanta"
-msgstr "戈蘭塔"
-
-#: contrib/localflavor/sk/sk_districts.py:24
-#, fuzzy
-msgid "Gelnica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:25
-msgid "Hlohovec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:26
-msgid "Humenne"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:27
-msgid "Ilava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:28
-msgid "Kezmarok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:29
-#, fuzzy
-msgid "Komarno"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:30
-msgid "Kosice I"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:31
-msgid "Kosice II"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:32
-msgid "Kosice III"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:33
-msgid "Kosice IV"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:34
-msgid "Kosice - okolie"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:35
-msgid "Krupina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:36
-msgid "Kysucke Nove Mesto"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:37
-msgid "Levice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:38
-msgid "Levoca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:39
-msgid "Liptovsky Mikulas"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:40
-msgid "Lucenec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:41
-#, fuzzy
-msgid "Malacky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:42
-#, fuzzy
-msgid "Martin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:43
-msgid "Medzilaborce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:44
-msgid "Michalovce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:45
-msgid "Myjava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:46
-msgid "Namestovo"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:47
-#, fuzzy
-msgid "Nitra"
-msgstr "尼特拉"
-
-#: contrib/localflavor/sk/sk_districts.py:48
-msgid "Nove Mesto nad Vahom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:49
-msgid "Nove Zamky"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:50
-msgid "Partizanske"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:51
-msgid "Pezinok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:52
-msgid "Piestany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:53
-msgid "Poltar"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:54
-msgid "Poprad"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:55
-msgid "Povazska Bystrica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:56
-msgid "Presov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:57
-msgid "Prievidza"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:58
-msgid "Puchov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:59
-msgid "Revuca"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:60
-msgid "Rimavska Sobota"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:61
-msgid "Roznava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:62
-msgid "Ruzomberok"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:63
-#, fuzzy
-msgid "Sabinov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:64
-msgid "Senec"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:65
-#, fuzzy
-msgid "Senica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:66
-#, fuzzy
-msgid "Skalica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:67
-#, fuzzy
-msgid "Snina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:68
-msgid "Sobrance"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:69
-msgid "Spisska Nova Ves"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:70
-msgid "Stara Lubovna"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:71
-msgid "Stropkov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:72
-msgid "Svidnik"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:73
-#, fuzzy
-msgid "Sala"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:74
-msgid "Topolcany"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:75
-msgid "Trebisov"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:76
-#, fuzzy
-msgid "Trencin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:77
-msgid "Trnava"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:78
-msgid "Turcianske Teplice"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:79
-msgid "Tvrdosin"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:80
-msgid "Velky Krtis"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:81
-msgid "Vranov nad Toplou"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:82
-msgid "Zlate Moravce"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:83
-msgid "Zvolen"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:84
-msgid "Zarnovica"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:85
-msgid "Ziar nad Hronom"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_districts.py:86
-msgid "Zilina"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:8
-msgid "Banska Bystrica region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:9
-msgid "Bratislava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:10
-msgid "Kosice region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:11
-msgid "Nitra region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:12
-msgid "Presov region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:13
-msgid "Trencin region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:14
-msgid "Trnava region"
-msgstr ""
-
-#: contrib/localflavor/sk/sk_regions.py:15
-msgid "Zilina region"
-msgstr ""
-
-#: contrib/localflavor/uk/forms.py:21
-#, fuzzy
-msgid "Enter a valid postcode."
-msgstr "輸入有效的郵遞區號"
-
-#: contrib/localflavor/uk/uk_regions.py:11
-msgid "Bedfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:12
-msgid "Buckinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:14
-msgid "Cheshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:15
-msgid "Cornwall and Isles of Scilly"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:16
-msgid "Cumbria"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:17
-msgid "Derbyshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:18
-#, fuzzy
-msgid "Devon"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:19
-msgid "Dorset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:20
-msgid "Durham"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:21
-msgid "East Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:22
-msgid "Essex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:23
-msgid "Gloucestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:24
-msgid "Greater London"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:25
-msgid "Greater Manchester"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:26
-msgid "Hampshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:27
-msgid "Hertfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:28
-msgid "Kent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:29
-#, fuzzy
-msgid "Lancashire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:30
-msgid "Leicestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:31
-msgid "Lincolnshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:32
-msgid "Merseyside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:33
-msgid "Norfolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:34
-msgid "North Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:35
-msgid "Northamptonshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:36
-msgid "Northumberland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:37
-msgid "Nottinghamshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:38
-msgid "Oxfordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:39
-msgid "Shropshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:40
-msgid "Somerset"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:41
-msgid "South Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:42
-msgid "Staffordshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:43
-msgid "Suffolk"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:44
-#, fuzzy
-msgid "Surrey"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:45
-msgid "Tyne and Wear"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:46
-msgid "Warwickshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:47
-msgid "West Midlands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:48
-msgid "West Sussex"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:49
-msgid "West Yorkshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:50
-msgid "Wiltshire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:51
-msgid "Worcestershire"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:55
-msgid "County Antrim"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:56
-msgid "County Armagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:57
-msgid "County Down"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:58
-msgid "County Fermanagh"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:59
-msgid "County Londonderry"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:60
-msgid "County Tyrone"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:64
-msgid "Clwyd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:65
-msgid "Dyfed"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:66
-msgid "Gwent"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:67
-msgid "Gwynedd"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:68
-msgid "Mid Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:69
-msgid "Powys"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:70
-msgid "South Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:71
-msgid "West Glamorgan"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:75
-#, fuzzy
-msgid "Borders"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:76
-msgid "Central Scotland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:77
-msgid "Dumfries and Galloway"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:78
-#, fuzzy
-msgid "Fife"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:79
-#, fuzzy
-msgid "Grampian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:80
-msgid "Highland"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:81
-#, fuzzy
-msgid "Lothian"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:82
-msgid "Orkney Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:83
-msgid "Shetland Islands"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:84
-msgid "Strathclyde"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:85
-msgid "Tayside"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:86
-msgid "Western Isles"
-msgstr ""
-
-#: contrib/localflavor/uk/uk_regions.py:90
-#, fuzzy
-msgid "England"
-msgstr "英格蘭"
-
-#: contrib/localflavor/uk/uk_regions.py:91
-msgid "Northern Ireland"
-msgstr "北愛爾蘭"
-
-#: contrib/localflavor/uk/uk_regions.py:92
-#, fuzzy
-msgid "Scotland"
-msgstr "蘇格蘭"
-
-#: contrib/localflavor/uk/uk_regions.py:93
-#, fuzzy
-msgid "Wales"
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:16
-msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "以 XXXXX 或 XXXXX-XXXX 的格式輸入一個郵遞區號。"
-
-#: contrib/localflavor/us/forms.py:54
-msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "以 XXX-XX-XXXX 的格式輸入一有效的美国身份證字號。"
-
-#: contrib/localflavor/za/forms.py:20
-#, fuzzy
-msgid "Enter a valid South African ID number"
-msgstr "請輸入一個有效的南非身份證號碼。"
-
-#: contrib/localflavor/za/forms.py:54
-#, fuzzy
-msgid "Enter a valid South African postal code"
-msgstr "輸入一個有效的南非郵遞區號。"
-
-#: contrib/localflavor/za/za_provinces.py:4
-#, fuzzy
-msgid "Eastern Cape"
-msgstr "東開普省"
-
-#: contrib/localflavor/za/za_provinces.py:5
-#, fuzzy
-msgid "Free State"
-msgstr "自由邦"
-
-#: contrib/localflavor/za/za_provinces.py:6
-#, fuzzy
-msgid "Gauteng"
-msgstr "豪登省"
-
-#: contrib/localflavor/za/za_provinces.py:7
-msgid "KwaZulu-Natal"
-msgstr "誇祖魯-納塔爾省"
-
-#: contrib/localflavor/za/za_provinces.py:8
-msgid "Limpopo"
-msgstr "林波波省"
-
-#: contrib/localflavor/za/za_provinces.py:9
-msgid "Mpumalanga"
-msgstr "普馬蘭加省"
-
-#: contrib/localflavor/za/za_provinces.py:10
-msgid "Northern Cape"
-msgstr "北開普省"
-
-#: contrib/localflavor/za/za_provinces.py:11
-#, fuzzy
-msgid "North West"
-msgstr "西北省"
-
-#: contrib/localflavor/za/za_provinces.py:12
-#, fuzzy
-msgid "Western Cape"
-msgstr "西開普省"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "重導向自"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr "應該是一個絕對路徑,不包括網域。例如:'/events/search/'。"
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "重導向到"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr "此可為一絕對路徑 (如上) 或一個以 'http://' 開頭的完整 URL。"
-
-#: contrib/redirects/models.py:13
-msgid "redirect"
-msgstr "重導向"
-
-#: contrib/redirects/models.py:14
-msgid "redirects"
-msgstr "重導向"
-
-#: contrib/sessions/models.py:45
-msgid "session key"
-msgstr "session 鍵值"
-
-#: contrib/sessions/models.py:47
-msgid "session data"
-msgstr "session 資料"
-
-#: contrib/sessions/models.py:48
-msgid "expire date"
-msgstr "到期日期"
-
-#: contrib/sessions/models.py:53
-msgid "session"
-msgstr "session"
-
-#: contrib/sessions/models.py:54
-msgid "sessions"
-msgstr "sessions"
-
-#: contrib/sites/models.py:32
-msgid "domain name"
-msgstr "網域名稱"
-
-#: contrib/sites/models.py:33
-msgid "display name"
-msgstr "顯示名稱"
-
-#: contrib/sites/models.py:39
-msgid "sites"
-msgstr "網站"
-
-#: db/models/fields/__init__.py:348 db/models/fields/__init__.py:683
-msgid "This value must be an integer."
-msgstr "這個值必須是整數。"
-
-#: db/models/fields/__init__.py:379
-msgid "This value must be either True or False."
-msgstr "這個值必須是 True 或 False。"
-
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "這個值不能是 null。"
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "輸入以逗號分隔的數字。"
-
-#: db/models/fields/__init__.py:459
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "輸入一個 YYYY-MM-DD 格式的有效日期。"
-
-#: db/models/fields/__init__.py:468
-#, python-format
-msgid "Invalid date: %s"
-msgstr "無效的日期: %s"
-
-#: db/models/fields/__init__.py:532 db/models/fields/__init__.py:550
-#, fuzzy
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "輸入一個 YYYY-MM-DD HH:MM[:ss[.uuuuuu]] 格式的有效日期/時間。"
-
-#: db/models/fields/__init__.py:586
-#, fuzzy
-msgid "This value must be a decimal number."
-msgstr "這個值必須是小數。"
-
-#: db/models/fields/__init__.py:719
-msgid "This value must be either None, True or False."
-msgstr "這個值必須是 None, True 或 False。"
-
-#: db/models/fields/__init__.py:817 db/models/fields/__init__.py:831
-#, fuzzy
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "輸入 HH:MM[:ss[.uuuuuu]] 格式的有效時間格式。"
-
-#: db/models/fields/related.py:761
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "按住 \"Control\", 或者在 Mac 上按 \"Command\", 以選取更多值"
-
-#: db/models/fields/related.py:838
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "請輸入有效的 %(self)s ID。輸入值 %(value)r 是錯誤的。"
-msgstr[1] ""
-
-#: forms/fields.py:54
-msgid "This field is required."
-msgstr "這個欄位是必須的。"
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "輸入有效的值"
-
-#: forms/fields.py:138
-#, fuzzy, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "確定你輸入的值最多為 %(max)d 個字(其長度為 %(length)d)。"
-
-#: forms/fields.py:139
-#, fuzzy, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "確定你輸入的值最少為 %(min)d 個字(其長度為 %(length)d)。"
-
-#: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "輸入整數"
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "這個值必须小於或等於 %s。"
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "這個值必须大於或等於 %s。"
-
-#: forms/fields.py:195 forms/fields.py:224
-#, fuzzy
-msgid "Enter a number."
-msgstr "輸入一個數字"
-
-#: forms/fields.py:227
-#, python-format
-msgid "Ensure that there are no more than %s digits in total."
-msgstr "確認數字全長不超過 %s 位。"
-
-#: forms/fields.py:228
-#, python-format
-msgid "Ensure that there are no more than %s decimal places."
-msgstr "確認想小數不超過 %s 位。"
-
-#: forms/fields.py:229
-#, python-format
-msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "確認想小數點前不超過 %s 位。"
-
-#: forms/fields.py:287 forms/fields.py:848
-msgid "Enter a valid date."
-msgstr "輸入有效的日期"
-
-#: forms/fields.py:321 forms/fields.py:849
-msgid "Enter a valid time."
-msgstr "輸入有效的時間"
-
-#: forms/fields.py:360
-msgid "Enter a valid date/time."
-msgstr "輸入有效的日期/時間"
-
-#: forms/fields.py:446
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "没有檔案被送出。請檢查表單的編碼類型。"
-
-#: forms/fields.py:447
-msgid "No file was submitted."
-msgstr "沒有檔案送出"
-
-#: forms/fields.py:448
-msgid "The submitted file is empty."
-msgstr "送出的檔案是空的。"
-
-#: forms/fields.py:477
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "上傳一個有效的圖片。你上傳的檔案不是圖片,否則就是壞掉的圖。"
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "輸入有效的URL"
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "URL %s 似乎是是斷掉的連結。"
-
-#: forms/fields.py:618 forms/fields.py:696
-#, fuzzy, python-format
-msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "選擇一個有效的選項: '%(value)s' 不在可用的選項中。"
-
-#: forms/fields.py:697 forms/fields.py:758 forms/models.py:654
-msgid "Enter a list of values."
-msgstr "輸入一個列表的值"
-
-#: forms/fields.py:877
-#, fuzzy
-msgid "Enter a valid IPv4 address."
-msgstr "輸入有效的 IPv4 地址。"
-
-#: forms/fields.py:887
-#, fuzzy
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "輸入一個有效的 'slug',由字母、數字、底線與連字號組成。"
-
-#: forms/formsets.py:242 forms/formsets.py:244
-#, fuzzy
-msgid "Order"
-msgstr "排序"
-
-#: forms/models.py:268 forms/models.py:277
-#, fuzzy, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s 有 %(field_label)s 已經存在。"
-
-#: forms/models.py:584
-msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "選擇有效的選項: 此選擇不在可用的选项中。"
-
-#: forms/models.py:655
-#, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "選擇一個有效的選項: '%s' 不在可用的選項中。"
-
-#: template/defaultfilters.py:706
-msgid "yes,no,maybe"
-msgstr "是、否、也許"
-
-#: template/defaultfilters.py:737
-#, python-format
-msgid "%(size)d byte"
-msgid_plural "%(size)d bytes"
-msgstr[0] ""
-
-#: template/defaultfilters.py:739
-#, python-format
-msgid "%.1f KB"
-msgstr ""
-
-#: template/defaultfilters.py:741
-#, python-format
-msgid "%.1f MB"
-msgstr ""
-
-#: template/defaultfilters.py:742
-#, python-format
-msgid "%.1f GB"
-msgstr ""
-
-#: utils/dateformat.py:41
-msgid "p.m."
-msgstr ""
-
-#: utils/dateformat.py:42
-msgid "a.m."
-msgstr ""
-
-#: utils/dateformat.py:47
-msgid "PM"
-msgstr ""
-
-#: utils/dateformat.py:48
-msgid "AM"
-msgstr ""
-
-#: utils/dateformat.py:97
-msgid "midnight"
-msgstr "午夜"
-
-#: utils/dateformat.py:99
-msgid "noon"
-msgstr "中午"
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "星期一"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "星期二"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "星期三"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "星期四"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "星期五"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "星期六"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "星期日"
-
-#: utils/dates.py:10
-#, fuzzy
-msgid "Mon"
-msgstr "星期一"
-
-#: utils/dates.py:10
-#, fuzzy
-msgid "Tue"
-msgstr "星期二"
-
-#: utils/dates.py:10
-msgid "Wed"
-msgstr "星期三"
-
-#: utils/dates.py:10
-msgid "Thu"
-msgstr "星期四"
-
-#: utils/dates.py:10
-#, fuzzy
-msgid "Fri"
-msgstr "星期五"
-
-#: utils/dates.py:11
-#, fuzzy
-msgid "Sat"
-msgstr "星期六"
-
-#: utils/dates.py:11
-#, fuzzy
-msgid "Sun"
-msgstr "星期日"
-
-#: utils/dates.py:18
-msgid "January"
-msgstr "一月"
-
-#: utils/dates.py:18
-msgid "February"
-msgstr "二月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "March"
-msgstr "三月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "April"
-msgstr "四月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "May"
-msgstr "五月"
-
-#: utils/dates.py:18 utils/dates.py:31
-msgid "June"
-msgstr "六月"
-
-#: utils/dates.py:19 utils/dates.py:31
-msgid "July"
-msgstr "七月"
-
-#: utils/dates.py:19
-msgid "August"
-msgstr "八月"
-
-#: utils/dates.py:19
-msgid "September"
-msgstr "九月"
-
-#: utils/dates.py:19
-msgid "October"
-msgstr "十月"
-
-#: utils/dates.py:19
-msgid "November"
-msgstr "十一月"
-
-#: utils/dates.py:20
-msgid "December"
-msgstr "十二月"
-
-#: utils/dates.py:23
-msgid "jan"
-msgstr "一月"
-
-#: utils/dates.py:23
-msgid "feb"
-msgstr "二月"
-
-#: utils/dates.py:23
-msgid "mar"
-msgstr "三月"
-
-#: utils/dates.py:23
-msgid "apr"
-msgstr "四月"
-
-#: utils/dates.py:23
-msgid "may"
-msgstr "五月"
-
-#: utils/dates.py:23
-msgid "jun"
-msgstr "六月"
-
-#: utils/dates.py:24
-msgid "jul"
-msgstr "七月"
-
-#: utils/dates.py:24
-msgid "aug"
-msgstr "八月"
-
-#: utils/dates.py:24
-msgid "sep"
-msgstr "九月"
-
-#: utils/dates.py:24
-msgid "oct"
-msgstr "十月"
-
-#: utils/dates.py:24
-msgid "nov"
-msgstr "十一月"
-
-#: utils/dates.py:24
-msgid "dec"
-msgstr "十二月"
-
-#: utils/dates.py:31
-msgid "Jan."
-msgstr "一月"
-
-#: utils/dates.py:31
-msgid "Feb."
-msgstr "二月"
-
-#: utils/dates.py:32
-msgid "Aug."
-msgstr "八月"
-
-#: utils/dates.py:32
-msgid "Sept."
-msgstr "九月"
-
-#: utils/dates.py:32
-msgid "Oct."
-msgstr "十月"
-
-#: utils/dates.py:32
-msgid "Nov."
-msgstr "十一月"
-
-#: utils/dates.py:32
-msgid "Dec."
-msgstr "十二月"
-
-#: utils/text.py:128
-#, fuzzy
-msgid "or"
-msgstr "或"
-
-#: utils/timesince.py:21
-msgid "year"
-msgid_plural "years"
-msgstr[0] "年"
-msgstr[1] "年"
-
-#: utils/timesince.py:22
-msgid "month"
-msgid_plural "months"
-msgstr[0] "月"
-msgstr[1] "月"
-
-#: utils/timesince.py:23
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "週"
-msgstr[1] "週"
-
-#: utils/timesince.py:24
-msgid "day"
-msgid_plural "days"
-msgstr[0] "天"
-msgstr[1] "天"
-
-#: utils/timesince.py:25
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "小時"
-msgstr[1] "小時"
-
-#: utils/timesince.py:26
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "分鐘"
-msgstr[1] "分鐘"
-
-#: utils/timesince.py:43
-#, fuzzy
-msgid "minutes"
-msgstr "分鐘"
-
-#: utils/timesince.py:48
-#, python-format
-msgid "%(number)d %(type)s"
-msgstr "%(number)d %(type)s"
-
-#: utils/timesince.py:54
-#, python-format
-msgid ", %(number)d %(type)s"
-msgstr ", %(number)d %(type)s"
-
-#: utils/translation/trans_real.py:403
-msgid "DATE_FORMAT"
-msgstr "Y-m-d"
-
-#: utils/translation/trans_real.py:405
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: utils/translation/trans_real.py:421
-msgid "YEAR_MONTH_FORMAT"
-msgstr "Y-m"
-
-#: utils/translation/trans_real.py:422
-msgid "MONTH_DAY_FORMAT"
-msgstr "m-d"
-
-#: views/generic/create_update.py:114
-#, python-format
-msgid "The %(verbose_name)s was created successfully."
-msgstr "%(verbose_name)s 新增成功。"
-
-#: views/generic/create_update.py:156
-#, python-format
-msgid "The %(verbose_name)s was updated successfully."
-msgstr "%(verbose_name)s 變更成功。"
-
-#: views/generic/create_update.py:198
-#, python-format
-msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s 已被删除。"
-
diff --git a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo b/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index fae1fdc..0000000
--- a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po b/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 120d08d..0000000
--- a/parts/django/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,118 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Django\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-06-28 17:36+1000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: contrib/admin/media/js/SelectFilter2.js:33
-#, perl-format
-msgid "Available %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:41
-msgid "Choose all"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:46
-msgid "Add"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:48
-msgid "Remove"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:53
-#, perl-format
-msgid "Chosen %s"
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:54
-msgid "Select your choice(s) and click "
-msgstr ""
-
-#: contrib/admin/media/js/SelectFilter2.js:59
-msgid "Clear all"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:32
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
-msgid "Now"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
-msgid "Clock"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
-msgid "Choose a time"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
-msgid "Midnight"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
-msgid "6 a.m."
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
-msgid "Noon"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
-msgid "Cancel"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
-msgid "Today"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
-msgid "Calendar"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
-msgid "Yesterday"
-msgstr ""
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
-msgid "Tomorrow"
-msgstr ""
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr ""
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr ""
diff --git a/parts/django/django/conf/locale/zh_TW/__init__.py b/parts/django/django/conf/locale/zh_TW/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/locale/zh_TW/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/locale/zh_TW/formats.py b/parts/django/django/conf/locale/zh_TW/formats.py
deleted file mode 100644
index 6d71786..0000000
--- a/parts/django/django/conf/locale/zh_TW/formats.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-# This file is distributed under the same license as the Django package.
-#
-
-# DATE_FORMAT =
-# TIME_FORMAT =
-# DATETIME_FORMAT =
-# YEAR_MONTH_FORMAT =
-# MONTH_DAY_FORMAT =
-# SHORT_DATE_FORMAT =
-# SHORT_DATETIME_FORMAT =
-# FIRST_DAY_OF_WEEK =
-# DATE_INPUT_FORMATS =
-# TIME_INPUT_FORMATS =
-# DATETIME_INPUT_FORMATS =
-# DECIMAL_SEPARATOR =
-# THOUSAND_SEPARATOR =
-# NUMBER_GROUPING =
diff --git a/parts/django/django/conf/project_template/__init__.py b/parts/django/django/conf/project_template/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/project_template/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/project_template/manage.py b/parts/django/django/conf/project_template/manage.py
deleted file mode 100755
index 5e78ea9..0000000
--- a/parts/django/django/conf/project_template/manage.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-from django.core.management import execute_manager
-try:
- import settings # Assumed to be in the same directory.
-except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
- sys.exit(1)
-
-if __name__ == "__main__":
- execute_manager(settings)
diff --git a/parts/django/django/conf/project_template/settings.py b/parts/django/django/conf/project_template/settings.py
deleted file mode 100644
index 686fadc..0000000
--- a/parts/django/django/conf/project_template/settings.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# Django settings for {{ project_name }} project.
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
- # ('Your Name', 'your_email@domain.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': '', # Or path to database file if using sqlite3.
- 'USER': '', # Not used with sqlite3.
- 'PASSWORD': '', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-# Local time zone for this installation. Choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
-# although not all choices may be available on all operating systems.
-# On Unix systems, a value of None will cause Django to use the same
-# timezone as the operating system.
-# If running in a Windows environment this must be set to the same as your
-# system time zone.
-TIME_ZONE = 'America/Chicago'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale
-USE_L10N = True
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash if there is a path component (optional in other cases).
-# Examples: "http://media.lawrence.com", "http://example.com/media/"
-MEDIA_URL = ''
-
-# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
-# trailing slash.
-# Examples: "http://foo.com/media/", "/media/".
-ADMIN_MEDIA_PREFIX = '/media/'
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = ''
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-# 'django.template.loaders.eggs.Loader',
-)
-
-MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
-)
-
-ROOT_URLCONF = '{{ project_name }}.urls'
-
-TEMPLATE_DIRS = (
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-)
-
-INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- # Uncomment the next line to enable the admin:
- # 'django.contrib.admin',
- # Uncomment the next line to enable admin documentation:
- # 'django.contrib.admindocs',
-)
diff --git a/parts/django/django/conf/project_template/urls.py b/parts/django/django/conf/project_template/urls.py
deleted file mode 100644
index 3d0ff63..0000000
--- a/parts/django/django/conf/project_template/urls.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.conf.urls.defaults import *
-
-# Uncomment the next two lines to enable the admin:
-# from django.contrib import admin
-# admin.autodiscover()
-
-urlpatterns = patterns('',
- # Example:
- # (r'^{{ project_name }}/', include('{{ project_name }}.foo.urls')),
-
- # Uncomment the admin/doc line below to enable admin documentation:
- # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
- # Uncomment the next line to enable the admin:
- # (r'^admin/', include(admin.site.urls)),
-)
diff --git a/parts/django/django/conf/urls/__init__.py b/parts/django/django/conf/urls/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/conf/urls/__init__.py
+++ /dev/null
diff --git a/parts/django/django/conf/urls/defaults.py b/parts/django/django/conf/urls/defaults.py
deleted file mode 100644
index 3ab8bab..0000000
--- a/parts/django/django/conf/urls/defaults.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from django.core.urlresolvers import RegexURLPattern, RegexURLResolver
-from django.core.exceptions import ImproperlyConfigured
-
-__all__ = ['handler404', 'handler500', 'include', 'patterns', 'url']
-
-handler404 = 'django.views.defaults.page_not_found'
-handler500 = 'django.views.defaults.server_error'
-
-def include(arg, namespace=None, app_name=None):
- if isinstance(arg, tuple):
- # callable returning a namespace hint
- if namespace:
- raise ImproperlyConfigured('Cannot override the namespace for a dynamic module that provides a namespace')
- urlconf_module, app_name, namespace = arg
- else:
- # No namespace hint - use manually provided namespace
- urlconf_module = arg
- return (urlconf_module, app_name, namespace)
-
-def patterns(prefix, *args):
- pattern_list = []
- for t in args:
- if isinstance(t, (list, tuple)):
- t = url(prefix=prefix, *t)
- elif isinstance(t, RegexURLPattern):
- t.add_prefix(prefix)
- pattern_list.append(t)
- return pattern_list
-
-def url(regex, view, kwargs=None, name=None, prefix=''):
- if isinstance(view, (list,tuple)):
- # For include(...) processing.
- urlconf_module, app_name, namespace = view
- return RegexURLResolver(regex, urlconf_module, kwargs, app_name=app_name, namespace=namespace)
- else:
- if isinstance(view, basestring):
- if not view:
- raise ImproperlyConfigured('Empty URL pattern view name not permitted (for pattern %r)' % regex)
- if prefix:
- view = prefix + '.' + view
- return RegexURLPattern(regex, view, kwargs, name)
-
diff --git a/parts/django/django/conf/urls/i18n.py b/parts/django/django/conf/urls/i18n.py
deleted file mode 100644
index 00e2d60..0000000
--- a/parts/django/django/conf/urls/i18n.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('',
- (r'^setlang/$', 'django.views.i18n.set_language'),
-)
diff --git a/parts/django/django/conf/urls/shortcut.py b/parts/django/django/conf/urls/shortcut.py
deleted file mode 100644
index 135f3be..0000000
--- a/parts/django/django/conf/urls/shortcut.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('django.views',
- (r'^(?P<content_type_id>\d+)/(?P<object_id>.*)/$', 'defaults.shortcut'),
-)
diff --git a/parts/django/django/contrib/__init__.py b/parts/django/django/contrib/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/admin/__init__.py b/parts/django/django/contrib/admin/__init__.py
deleted file mode 100644
index 92886ab..0000000
--- a/parts/django/django/contrib/admin/__init__.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
-from django.contrib.admin.options import ModelAdmin, HORIZONTAL, VERTICAL
-from django.contrib.admin.options import StackedInline, TabularInline
-from django.contrib.admin.sites import AdminSite, site
-
-
-def autodiscover():
- """
- Auto-discover INSTALLED_APPS admin.py modules and fail silently when
- not present. This forces an import on them to register any admin bits they
- may want.
- """
-
- import copy
- from django.conf import settings
- from django.utils.importlib import import_module
- from django.utils.module_loading import module_has_submodule
-
- for app in settings.INSTALLED_APPS:
- mod = import_module(app)
- # Attempt to import the app's admin module.
- try:
- before_import_registry = copy.copy(site._registry)
- import_module('%s.admin' % app)
- except:
- # Reset the model registry to the state before the last import as
- # this import will have to reoccur on the next request and this
- # could raise NotRegistered and AlreadyRegistered exceptions
- # (see #8245).
- site._registry = before_import_registry
-
- # Decide whether to bubble up this error. If the app just
- # doesn't have an admin module, we can ignore the error
- # attempting to import it, otherwise we want it to bubble up.
- if module_has_submodule(mod, 'admin'):
- raise
diff --git a/parts/django/django/contrib/admin/actions.py b/parts/django/django/contrib/admin/actions.py
deleted file mode 100644
index b75c91b..0000000
--- a/parts/django/django/contrib/admin/actions.py
+++ /dev/null
@@ -1,73 +0,0 @@
-"""
-Built-in, globally-available admin actions.
-"""
-
-from django import template
-from django.core.exceptions import PermissionDenied
-from django.contrib.admin import helpers
-from django.contrib.admin.util import get_deleted_objects, model_ngettext
-from django.shortcuts import render_to_response
-from django.utils.encoding import force_unicode
-from django.utils.html import escape
-from django.utils.safestring import mark_safe
-from django.utils.text import capfirst
-from django.utils.translation import ugettext_lazy, ugettext as _
-
-def delete_selected(modeladmin, request, queryset):
- """
- Default action which deletes the selected objects.
-
- This action first displays a confirmation page whichs shows all the
- deleteable objects, or, if the user has no permission one of the related
- childs (foreignkeys), a "permission denied" message.
-
- Next, it delets all selected objects and redirects back to the change list.
- """
- opts = modeladmin.model._meta
- app_label = opts.app_label
-
- # Check that the user has delete permission for the actual model
- if not modeladmin.has_delete_permission(request):
- raise PermissionDenied
-
- # Populate deletable_objects, a data structure of all related objects that
- # will also be deleted.
- deletable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)
-
- # The user has already confirmed the deletion.
- # Do the deletion and return a None to display the change list view again.
- if request.POST.get('post'):
- if perms_needed:
- raise PermissionDenied
- n = queryset.count()
- if n:
- for obj in queryset:
- obj_display = force_unicode(obj)
- modeladmin.log_deletion(request, obj, obj_display)
- queryset.delete()
- modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
- "count": n, "items": model_ngettext(modeladmin.opts, n)
- })
- # Return None to display the change list page again.
- return None
-
- context = {
- "title": _("Are you sure?"),
- "object_name": force_unicode(opts.verbose_name),
- "deletable_objects": [deletable_objects],
- 'queryset': queryset,
- "perms_lacking": perms_needed,
- "opts": opts,
- "root_path": modeladmin.admin_site.root_path,
- "app_label": app_label,
- 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
- }
-
- # Display the confirmation page
- return render_to_response(modeladmin.delete_selected_confirmation_template or [
- "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
- "admin/%s/delete_selected_confirmation.html" % app_label,
- "admin/delete_selected_confirmation.html"
- ], context, context_instance=template.RequestContext(request))
-
-delete_selected.short_description = ugettext_lazy("Delete selected %(verbose_name_plural)s")
diff --git a/parts/django/django/contrib/admin/filterspecs.py b/parts/django/django/contrib/admin/filterspecs.py
deleted file mode 100644
index 6f643ee..0000000
--- a/parts/django/django/contrib/admin/filterspecs.py
+++ /dev/null
@@ -1,179 +0,0 @@
-"""
-FilterSpec encapsulates the logic for displaying filters in the Django admin.
-Filters are specified in models with the "list_filter" option.
-
-Each filter subclass knows how to display a filter for a field that passes a
-certain test -- e.g. being a DateField or ForeignKey.
-"""
-
-from django.db import models
-from django.utils.encoding import smart_unicode, iri_to_uri
-from django.utils.translation import ugettext as _
-from django.utils.html import escape
-from django.utils.safestring import mark_safe
-import datetime
-
-class FilterSpec(object):
- filter_specs = []
- def __init__(self, f, request, params, model, model_admin):
- self.field = f
- self.params = params
-
- def register(cls, test, factory):
- cls.filter_specs.append((test, factory))
- register = classmethod(register)
-
- def create(cls, f, request, params, model, model_admin):
- for test, factory in cls.filter_specs:
- if test(f):
- return factory(f, request, params, model, model_admin)
- create = classmethod(create)
-
- def has_output(self):
- return True
-
- def choices(self, cl):
- raise NotImplementedError()
-
- def title(self):
- return self.field.verbose_name
-
- def output(self, cl):
- t = []
- if self.has_output():
- t.append(_(u'<h3>By %s:</h3>\n<ul>\n') % escape(self.title()))
-
- for choice in self.choices(cl):
- t.append(u'<li%s><a href="%s">%s</a></li>\n' % \
- ((choice['selected'] and ' class="selected"' or ''),
- iri_to_uri(choice['query_string']),
- choice['display']))
- t.append('</ul>\n\n')
- return mark_safe("".join(t))
-
-class RelatedFilterSpec(FilterSpec):
- def __init__(self, f, request, params, model, model_admin):
- super(RelatedFilterSpec, self).__init__(f, request, params, model, model_admin)
- if isinstance(f, models.ManyToManyField):
- self.lookup_title = f.rel.to._meta.verbose_name
- else:
- self.lookup_title = f.verbose_name
- rel_name = f.rel.get_related_field().name
- self.lookup_kwarg = '%s__%s__exact' % (f.name, rel_name)
- self.lookup_val = request.GET.get(self.lookup_kwarg, None)
- self.lookup_choices = f.get_choices(include_blank=False)
-
- def has_output(self):
- return len(self.lookup_choices) > 1
-
- def title(self):
- return self.lookup_title
-
- def choices(self, cl):
- yield {'selected': self.lookup_val is None,
- 'query_string': cl.get_query_string({}, [self.lookup_kwarg]),
- 'display': _('All')}
- for pk_val, val in self.lookup_choices:
- yield {'selected': self.lookup_val == smart_unicode(pk_val),
- 'query_string': cl.get_query_string({self.lookup_kwarg: pk_val}),
- 'display': val}
-
-FilterSpec.register(lambda f: bool(f.rel), RelatedFilterSpec)
-
-class ChoicesFilterSpec(FilterSpec):
- def __init__(self, f, request, params, model, model_admin):
- super(ChoicesFilterSpec, self).__init__(f, request, params, model, model_admin)
- self.lookup_kwarg = '%s__exact' % f.name
- self.lookup_val = request.GET.get(self.lookup_kwarg, None)
-
- def choices(self, cl):
- yield {'selected': self.lookup_val is None,
- 'query_string': cl.get_query_string({}, [self.lookup_kwarg]),
- 'display': _('All')}
- for k, v in self.field.flatchoices:
- yield {'selected': smart_unicode(k) == self.lookup_val,
- 'query_string': cl.get_query_string({self.lookup_kwarg: k}),
- 'display': v}
-
-FilterSpec.register(lambda f: bool(f.choices), ChoicesFilterSpec)
-
-class DateFieldFilterSpec(FilterSpec):
- def __init__(self, f, request, params, model, model_admin):
- super(DateFieldFilterSpec, self).__init__(f, request, params, model, model_admin)
-
- self.field_generic = '%s__' % self.field.name
-
- self.date_params = dict([(k, v) for k, v in params.items() if k.startswith(self.field_generic)])
-
- today = datetime.date.today()
- one_week_ago = today - datetime.timedelta(days=7)
- today_str = isinstance(self.field, models.DateTimeField) and today.strftime('%Y-%m-%d 23:59:59') or today.strftime('%Y-%m-%d')
-
- self.links = (
- (_('Any date'), {}),
- (_('Today'), {'%s__year' % self.field.name: str(today.year),
- '%s__month' % self.field.name: str(today.month),
- '%s__day' % self.field.name: str(today.day)}),
- (_('Past 7 days'), {'%s__gte' % self.field.name: one_week_ago.strftime('%Y-%m-%d'),
- '%s__lte' % f.name: today_str}),
- (_('This month'), {'%s__year' % self.field.name: str(today.year),
- '%s__month' % f.name: str(today.month)}),
- (_('This year'), {'%s__year' % self.field.name: str(today.year)})
- )
-
- def title(self):
- return self.field.verbose_name
-
- def choices(self, cl):
- for title, param_dict in self.links:
- yield {'selected': self.date_params == param_dict,
- 'query_string': cl.get_query_string(param_dict, [self.field_generic]),
- 'display': title}
-
-FilterSpec.register(lambda f: isinstance(f, models.DateField), DateFieldFilterSpec)
-
-class BooleanFieldFilterSpec(FilterSpec):
- def __init__(self, f, request, params, model, model_admin):
- super(BooleanFieldFilterSpec, self).__init__(f, request, params, model, model_admin)
- self.lookup_kwarg = '%s__exact' % f.name
- self.lookup_kwarg2 = '%s__isnull' % f.name
- self.lookup_val = request.GET.get(self.lookup_kwarg, None)
- self.lookup_val2 = request.GET.get(self.lookup_kwarg2, None)
-
- def title(self):
- return self.field.verbose_name
-
- def choices(self, cl):
- for k, v in ((_('All'), None), (_('Yes'), '1'), (_('No'), '0')):
- yield {'selected': self.lookup_val == v and not self.lookup_val2,
- 'query_string': cl.get_query_string({self.lookup_kwarg: v}, [self.lookup_kwarg2]),
- 'display': k}
- if isinstance(self.field, models.NullBooleanField):
- yield {'selected': self.lookup_val2 == 'True',
- 'query_string': cl.get_query_string({self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]),
- 'display': _('Unknown')}
-
-FilterSpec.register(lambda f: isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField), BooleanFieldFilterSpec)
-
-# This should be registered last, because it's a last resort. For example,
-# if a field is eligible to use the BooleanFieldFilterSpec, that'd be much
-# more appropriate, and the AllValuesFilterSpec won't get used for it.
-class AllValuesFilterSpec(FilterSpec):
- def __init__(self, f, request, params, model, model_admin):
- super(AllValuesFilterSpec, self).__init__(f, request, params, model, model_admin)
- self.lookup_val = request.GET.get(f.name, None)
- self.lookup_choices = model_admin.queryset(request).distinct().order_by(f.name).values(f.name)
-
- def title(self):
- return self.field.verbose_name
-
- def choices(self, cl):
- yield {'selected': self.lookup_val is None,
- 'query_string': cl.get_query_string({}, [self.field.name]),
- 'display': _('All')}
- for val in self.lookup_choices:
- val = smart_unicode(val[self.field.name])
- yield {'selected': self.lookup_val == val,
- 'query_string': cl.get_query_string({self.field.name: val}),
- 'display': val}
-FilterSpec.register(lambda f: True, AllValuesFilterSpec)
diff --git a/parts/django/django/contrib/admin/helpers.py b/parts/django/django/contrib/admin/helpers.py
deleted file mode 100644
index e5d85a6..0000000
--- a/parts/django/django/contrib/admin/helpers.py
+++ /dev/null
@@ -1,344 +0,0 @@
-from django import forms
-from django.conf import settings
-from django.contrib.admin.util import flatten_fieldsets, lookup_field
-from django.contrib.admin.util import display_for_field, label_for_field
-from django.contrib.contenttypes.models import ContentType
-from django.core.exceptions import ObjectDoesNotExist
-from django.db.models.fields import FieldDoesNotExist
-from django.db.models.fields.related import ManyToManyRel
-from django.forms.util import flatatt
-from django.template.defaultfilters import capfirst
-from django.utils.encoding import force_unicode, smart_unicode
-from django.utils.html import escape, conditional_escape
-from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy as _
-
-
-ACTION_CHECKBOX_NAME = '_selected_action'
-
-class ActionForm(forms.Form):
- action = forms.ChoiceField(label=_('Action:'))
- select_across = forms.BooleanField(label='', required=False, initial=0,
- widget=forms.HiddenInput({'class': 'select-across'}))
-
-checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False)
-
-class AdminForm(object):
- def __init__(self, form, fieldsets, prepopulated_fields, readonly_fields=None, model_admin=None):
- self.form, self.fieldsets = form, normalize_fieldsets(fieldsets)
- self.prepopulated_fields = [{
- 'field': form[field_name],
- 'dependencies': [form[f] for f in dependencies]
- } for field_name, dependencies in prepopulated_fields.items()]
- self.model_admin = model_admin
- if readonly_fields is None:
- readonly_fields = ()
- self.readonly_fields = readonly_fields
-
- def __iter__(self):
- for name, options in self.fieldsets:
- yield Fieldset(self.form, name,
- readonly_fields=self.readonly_fields,
- model_admin=self.model_admin,
- **options
- )
-
- def first_field(self):
- try:
- fieldset_name, fieldset_options = self.fieldsets[0]
- field_name = fieldset_options['fields'][0]
- if not isinstance(field_name, basestring):
- field_name = field_name[0]
- return self.form[field_name]
- except (KeyError, IndexError):
- pass
- try:
- return iter(self.form).next()
- except StopIteration:
- return None
-
- def _media(self):
- media = self.form.media
- for fs in self:
- media = media + fs.media
- return media
- media = property(_media)
-
-class Fieldset(object):
- def __init__(self, form, name=None, readonly_fields=(), fields=(), classes=(),
- description=None, model_admin=None):
- self.form = form
- self.name, self.fields = name, fields
- self.classes = u' '.join(classes)
- self.description = description
- self.model_admin = model_admin
- self.readonly_fields = readonly_fields
-
- def _media(self):
- if 'collapse' in self.classes:
- js = ['js/jquery.min.js', 'js/jquery.init.js', 'js/collapse.min.js']
- return forms.Media(js=['%s%s' % (settings.ADMIN_MEDIA_PREFIX, url) for url in js])
- return forms.Media()
- media = property(_media)
-
- def __iter__(self):
- for field in self.fields:
- yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin)
-
-class Fieldline(object):
- def __init__(self, form, field, readonly_fields=None, model_admin=None):
- self.form = form # A django.forms.Form instance
- if not hasattr(field, "__iter__"):
- self.fields = [field]
- else:
- self.fields = field
- self.model_admin = model_admin
- if readonly_fields is None:
- readonly_fields = ()
- self.readonly_fields = readonly_fields
-
- def __iter__(self):
- for i, field in enumerate(self.fields):
- if field in self.readonly_fields:
- yield AdminReadonlyField(self.form, field, is_first=(i == 0),
- model_admin=self.model_admin)
- else:
- yield AdminField(self.form, field, is_first=(i == 0))
-
- def errors(self):
- return mark_safe(u'\n'.join([self.form[f].errors.as_ul() for f in self.fields if f not in self.readonly_fields]).strip('\n'))
-
-class AdminField(object):
- def __init__(self, form, field, is_first):
- self.field = form[field] # A django.forms.BoundField instance
- self.is_first = is_first # Whether this field is first on the line
- self.is_checkbox = isinstance(self.field.field.widget, forms.CheckboxInput)
-
- def label_tag(self):
- classes = []
- if self.is_checkbox:
- classes.append(u'vCheckboxLabel')
- contents = force_unicode(escape(self.field.label))
- else:
- contents = force_unicode(escape(self.field.label)) + u':'
- if self.field.field.required:
- classes.append(u'required')
- if not self.is_first:
- classes.append(u'inline')
- attrs = classes and {'class': u' '.join(classes)} or {}
- return self.field.label_tag(contents=contents, attrs=attrs)
-
- def errors(self):
- return mark_safe(self.field.errors.as_ul())
-
-class AdminReadonlyField(object):
- def __init__(self, form, field, is_first, model_admin=None):
- label = label_for_field(field, form._meta.model, model_admin)
- # Make self.field look a little bit like a field. This means that
- # {{ field.name }} must be a useful class name to identify the field.
- # For convenience, store other field-related data here too.
- if callable(field):
- class_name = field.__name__ != '<lambda>' and field.__name__ or ''
- else:
- class_name = field
- self.field = {
- 'name': class_name,
- 'label': label,
- 'field': field,
- }
- self.form = form
- self.model_admin = model_admin
- self.is_first = is_first
- self.is_checkbox = False
- self.is_readonly = True
-
- def label_tag(self):
- attrs = {}
- if not self.is_first:
- attrs["class"] = "inline"
- label = self.field['label']
- contents = capfirst(force_unicode(escape(label))) + u":"
- return mark_safe('<label%(attrs)s>%(contents)s</label>' % {
- "attrs": flatatt(attrs),
- "contents": contents,
- })
-
- def contents(self):
- from django.contrib.admin.templatetags.admin_list import _boolean_icon
- from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
- field, obj, model_admin = self.field['field'], self.form.instance, self.model_admin
- try:
- f, attr, value = lookup_field(field, obj, model_admin)
- except (AttributeError, ValueError, ObjectDoesNotExist):
- result_repr = EMPTY_CHANGELIST_VALUE
- else:
- if f is None:
- boolean = getattr(attr, "boolean", False)
- if boolean:
- result_repr = _boolean_icon(value)
- else:
- result_repr = smart_unicode(value)
- if getattr(attr, "allow_tags", False):
- result_repr = mark_safe(result_repr)
- else:
- if value is None:
- result_repr = EMPTY_CHANGELIST_VALUE
- elif isinstance(f.rel, ManyToManyRel):
- result_repr = ", ".join(map(unicode, value.all()))
- else:
- result_repr = display_for_field(value, f)
- return conditional_escape(result_repr)
-
-class InlineAdminFormSet(object):
- """
- A wrapper around an inline formset for use in the admin system.
- """
- def __init__(self, inline, formset, fieldsets, readonly_fields=None, model_admin=None):
- self.opts = inline
- self.formset = formset
- self.fieldsets = fieldsets
- self.model_admin = model_admin
- if readonly_fields is None:
- readonly_fields = ()
- self.readonly_fields = readonly_fields
-
- def __iter__(self):
- for form, original in zip(self.formset.initial_forms, self.formset.get_queryset()):
- yield InlineAdminForm(self.formset, form, self.fieldsets,
- self.opts.prepopulated_fields, original, self.readonly_fields,
- model_admin=self.model_admin)
- for form in self.formset.extra_forms:
- yield InlineAdminForm(self.formset, form, self.fieldsets,
- self.opts.prepopulated_fields, None, self.readonly_fields,
- model_admin=self.model_admin)
- yield InlineAdminForm(self.formset, self.formset.empty_form,
- self.fieldsets, self.opts.prepopulated_fields, None,
- self.readonly_fields, model_admin=self.model_admin)
-
- def fields(self):
- fk = getattr(self.formset, "fk", None)
- for i, field in enumerate(flatten_fieldsets(self.fieldsets)):
- if fk and fk.name == field:
- continue
- if field in self.readonly_fields:
- yield {
- 'label': label_for_field(field, self.opts.model, self.model_admin),
- 'widget': {
- 'is_hidden': False
- },
- 'required': False
- }
- else:
- yield self.formset.form.base_fields[field]
-
- def _media(self):
- media = self.opts.media + self.formset.media
- for fs in self:
- media = media + fs.media
- return media
- media = property(_media)
-
-class InlineAdminForm(AdminForm):
- """
- A wrapper around an inline form for use in the admin system.
- """
- def __init__(self, formset, form, fieldsets, prepopulated_fields, original,
- readonly_fields=None, model_admin=None):
- self.formset = formset
- self.model_admin = model_admin
- self.original = original
- if original is not None:
- self.original_content_type_id = ContentType.objects.get_for_model(original).pk
- self.show_url = original and hasattr(original, 'get_absolute_url')
- super(InlineAdminForm, self).__init__(form, fieldsets, prepopulated_fields,
- readonly_fields, model_admin)
-
- def __iter__(self):
- for name, options in self.fieldsets:
- yield InlineFieldset(self.formset, self.form, name,
- self.readonly_fields, model_admin=self.model_admin, **options)
-
- def has_auto_field(self):
- if self.form._meta.model._meta.has_auto_field:
- return True
- # Also search any parents for an auto field.
- for parent in self.form._meta.model._meta.get_parent_list():
- if parent._meta.has_auto_field:
- return True
- return False
-
- def field_count(self):
- # tabular.html uses this function for colspan value.
- num_of_fields = 0
- if self.has_auto_field():
- num_of_fields += 1
- num_of_fields += len(self.fieldsets[0][1]["fields"])
- if self.formset.can_order:
- num_of_fields += 1
- if self.formset.can_delete:
- num_of_fields += 1
- return num_of_fields
-
- def pk_field(self):
- return AdminField(self.form, self.formset._pk_field.name, False)
-
- def fk_field(self):
- fk = getattr(self.formset, "fk", None)
- if fk:
- return AdminField(self.form, fk.name, False)
- else:
- return ""
-
- def deletion_field(self):
- from django.forms.formsets import DELETION_FIELD_NAME
- return AdminField(self.form, DELETION_FIELD_NAME, False)
-
- def ordering_field(self):
- from django.forms.formsets import ORDERING_FIELD_NAME
- return AdminField(self.form, ORDERING_FIELD_NAME, False)
-
-class InlineFieldset(Fieldset):
- def __init__(self, formset, *args, **kwargs):
- self.formset = formset
- super(InlineFieldset, self).__init__(*args, **kwargs)
-
- def __iter__(self):
- fk = getattr(self.formset, "fk", None)
- for field in self.fields:
- if fk and fk.name == field:
- continue
- yield Fieldline(self.form, field, self.readonly_fields,
- model_admin=self.model_admin)
-
-class AdminErrorList(forms.util.ErrorList):
- """
- Stores all errors for the form/formsets in an add/change stage view.
- """
- def __init__(self, form, inline_formsets):
- if form.is_bound:
- self.extend(form.errors.values())
- for inline_formset in inline_formsets:
- self.extend(inline_formset.non_form_errors())
- for errors_in_inline_form in inline_formset.errors:
- self.extend(errors_in_inline_form.values())
-
-def normalize_fieldsets(fieldsets):
- """
- Make sure the keys in fieldset dictionaries are strings. Returns the
- normalized data.
- """
- result = []
- for name, options in fieldsets:
- result.append((name, normalize_dictionary(options)))
- return result
-
-def normalize_dictionary(data_dict):
- """
- Converts all the keys in "data_dict" to strings. The keys must be
- convertible using str().
- """
- for key, value in data_dict.items():
- if not isinstance(key, str):
- del data_dict[key]
- data_dict[str(key)] = value
- return data_dict
diff --git a/parts/django/django/contrib/admin/media/css/base.css b/parts/django/django/contrib/admin/media/css/base.css
deleted file mode 100644
index 29f7c83..0000000
--- a/parts/django/django/contrib/admin/media/css/base.css
+++ /dev/null
@@ -1,759 +0,0 @@
-/*
- DJANGO Admin styles
-*/
-
-body {
- margin: 0;
- padding: 0;
- font-size: 12px;
- font-family: "Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
- color: #333;
- background: #fff;
-}
-
-/* LINKS */
-
-a:link, a:visited {
- color: #5b80b2;
- text-decoration: none;
-}
-
-a:hover {
- color: #036;
-}
-
-a img {
- border: none;
-}
-
-a.section:link, a.section:visited {
- color: white;
- text-decoration: none;
-}
-
-/* GLOBAL DEFAULTS */
-
-p, ol, ul, dl {
- margin: .2em 0 .8em 0;
-}
-
-p {
- padding: 0;
- line-height: 140%;
-}
-
-h1,h2,h3,h4,h5 {
- font-weight: bold;
-}
-
-h1 {
- font-size: 18px;
- color: #666;
- padding: 0 6px 0 0;
- margin: 0 0 .2em 0;
-}
-
-h2 {
- font-size: 16px;
- margin: 1em 0 .5em 0;
-}
-
-h2.subhead {
- font-weight: normal;
- margin-top: 0;
-}
-
-h3 {
- font-size: 14px;
- margin: .8em 0 .3em 0;
- color: #666;
- font-weight: bold;
-}
-
-h4 {
- font-size: 12px;
- margin: 1em 0 .8em 0;
- padding-bottom: 3px;
-}
-
-h5 {
- font-size: 10px;
- margin: 1.5em 0 .5em 0;
- color: #666;
- text-transform: uppercase;
- letter-spacing: 1px;
-}
-
-ul li {
- list-style-type: square;
- padding: 1px 0;
-}
-
-ul.plainlist {
- margin-left: 0 !important;
-}
-
-ul.plainlist li {
- list-style-type: none;
-}
-
-li ul {
- margin-bottom: 0;
-}
-
-li, dt, dd {
- font-size: 11px;
- line-height: 14px;
-}
-
-dt {
- font-weight: bold;
- margin-top: 4px;
-}
-
-dd {
- margin-left: 0;
-}
-
-form {
- margin: 0;
- padding: 0;
-}
-
-fieldset {
- margin: 0;
- padding: 0;
-}
-
-blockquote {
- font-size: 11px;
- color: #777;
- margin-left: 2px;
- padding-left: 10px;
- border-left: 5px solid #ddd;
-}
-
-code, pre {
- font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
- background: inherit;
- color: #666;
- font-size: 11px;
-}
-
-pre.literal-block {
- margin: 10px;
- background: #eee;
- padding: 6px 8px;
-}
-
-code strong {
- color: #930;
-}
-
-hr {
- clear: both;
- color: #eee;
- background-color: #eee;
- height: 1px;
- border: none;
- margin: 0;
- padding: 0;
- font-size: 1px;
- line-height: 1px;
-}
-
-/* TEXT STYLES & MODIFIERS */
-
-.small {
- font-size: 11px;
-}
-
-.tiny {
- font-size: 10px;
-}
-
-p.tiny {
- margin-top: -2px;
-}
-
-.mini {
- font-size: 9px;
-}
-
-p.mini {
- margin-top: -3px;
-}
-
-.help, p.help {
- font-size: 10px !important;
- color: #999;
-}
-
-p img, h1 img, h2 img, h3 img, h4 img, td img {
- vertical-align: middle;
-}
-
-.quiet, a.quiet:link, a.quiet:visited {
- color: #999 !important;
- font-weight: normal !important;
-}
-
-.quiet strong {
- font-weight: bold !important;
-}
-
-.float-right {
- float: right;
-}
-
-.float-left {
- float: left;
-}
-
-.clear {
- clear: both;
-}
-
-.align-left {
- text-align: left;
-}
-
-.align-right {
- text-align: right;
-}
-
-.example {
- margin: 10px 0;
- padding: 5px 10px;
- background: #efefef;
-}
-
-.nowrap {
- white-space: nowrap;
-}
-
-/* TABLES */
-
-table {
- border-collapse: collapse;
- border-color: #ccc;
-}
-
-td, th {
- font-size: 11px;
- line-height: 13px;
- border-bottom: 1px solid #eee;
- vertical-align: top;
- padding: 5px;
- font-family: "Lucida Grande", Verdana, Arial, sans-serif;
-}
-
-th {
- text-align: left;
- font-size: 12px;
- font-weight: bold;
-}
-
-thead th,
-tfoot td {
- color: #666;
- padding: 2px 5px;
- font-size: 11px;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
- border-left: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
-}
-
-tfoot td {
- border-bottom: none;
- border-top: 1px solid #ddd;
-}
-
-thead th:first-child,
-tfoot td:first-child {
- border-left: none !important;
-}
-
-thead th.optional {
- font-weight: normal !important;
-}
-
-fieldset table {
- border-right: 1px solid #eee;
-}
-
-tr.row-label td {
- font-size: 9px;
- padding-top: 2px;
- padding-bottom: 0;
- border-bottom: none;
- color: #666;
- margin-top: -1px;
-}
-
-tr.alt {
- background: #f6f6f6;
-}
-
-.row1 {
- background: #EDF3FE;
-}
-
-.row2 {
- background: white;
-}
-
-/* SORTABLE TABLES */
-
-thead th a:link, thead th a:visited {
- color: #666;
- display: block;
-}
-
-table thead th.sorted {
- background-position: bottom left !important;
-}
-
-table thead th.sorted a {
- padding-right: 13px;
-}
-
-table thead th.ascending a {
- background: url(../img/admin/arrow-down.gif) right .4em no-repeat;
-}
-
-table thead th.descending a {
- background: url(../img/admin/arrow-up.gif) right .4em no-repeat;
-}
-
-/* ORDERABLE TABLES */
-
-table.orderable tbody tr td:hover {
- cursor: move;
-}
-
-table.orderable tbody tr td:first-child {
- padding-left: 14px;
- background-image: url(../img/admin/nav-bg-grabber.gif);
- background-repeat: repeat-y;
-}
-
-table.orderable-initalized .order-cell, body>tr>td.order-cell {
- display: none;
-}
-
-/* FORM DEFAULTS */
-
-input, textarea, select, .form-row p {
- margin: 2px 0;
- padding: 2px 3px;
- vertical-align: middle;
- font-family: "Lucida Grande", Verdana, Arial, sans-serif;
- font-weight: normal;
- font-size: 11px;
-}
-
-textarea {
- vertical-align: top !important;
-}
-
-input[type=text], input[type=password], textarea, select, .vTextField {
- border: 1px solid #ccc;
-}
-
-/* FORM BUTTONS */
-
-.button, input[type=submit], input[type=button], .submit-row input {
- background: white url(../img/admin/nav-bg.gif) bottom repeat-x;
- padding: 3px 5px;
- color: black;
- border: 1px solid #bbb;
- border-color: #ddd #aaa #aaa #ddd;
-}
-
-.button:active, input[type=submit]:active, input[type=button]:active {
- background-image: url(../img/admin/nav-bg-reverse.gif);
- background-position: top;
-}
-
-.button.default, input[type=submit].default, .submit-row input.default {
- border: 2px solid #5b80b2;
- background: #7CA0C7 url(../img/admin/default-bg.gif) bottom repeat-x;
- font-weight: bold;
- color: white;
- float: right;
-}
-
-.button.default:active, input[type=submit].default:active {
- background-image: url(../img/admin/default-bg-reverse.gif);
- background-position: top;
-}
-
-/* MODULES */
-
-.module {
- border: 1px solid #ccc;
- margin-bottom: 5px;
- background: white;
-}
-
-.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
- padding-left: 10px;
- padding-right: 10px;
-}
-
-.module blockquote {
- margin-left: 12px;
-}
-
-.module ul, .module ol {
- margin-left: 1.5em;
-}
-
-.module h3 {
- margin-top: .6em;
-}
-
-.module h2, .module caption, .inline-group h2 {
- margin: 0;
- padding: 2px 5px 3px 5px;
- font-size: 11px;
- text-align: left;
- font-weight: bold;
- background: #7CA0C7 url(../img/admin/default-bg.gif) top left repeat-x;
- color: white;
-}
-
-.module table {
- border-collapse: collapse;
-}
-
-/* MESSAGES & ERRORS */
-
-ul.messagelist {
- padding: 0 0 5px 0;
- margin: 0;
-}
-
-ul.messagelist li {
- font-size: 12px;
- display: block;
- padding: 4px 5px 4px 25px;
- margin: 0 0 3px 0;
- border-bottom: 1px solid #ddd;
- color: #666;
- background: #ffc url(../img/admin/icon_success.gif) 5px .3em no-repeat;
-}
-
-ul.messagelist li.warning{
- background-image: url(../img/admin/icon_alert.gif);
-}
-
-ul.messagelist li.error{
- background-image: url(../img/admin/icon_error.gif);
-}
-
-.errornote {
- font-size: 12px !important;
- display: block;
- padding: 4px 5px 4px 25px;
- margin: 0 0 3px 0;
- border: 1px solid red;
- color: red;
- background: #ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat;
-}
-
-ul.errorlist {
- margin: 0 !important;
- padding: 0 !important;
-}
-
-.errorlist li {
- font-size: 12px !important;
- display: block;
- padding: 4px 5px 4px 25px;
- margin: 0 0 3px 0;
- border: 1px solid red;
- color: white;
- background: red url(../img/admin/icon_alert.gif) 5px .3em no-repeat;
-}
-
-.errorlist li a {
- color: white;
- text-decoration: underline;
-}
-
-td ul.errorlist {
- margin: 0 !important;
- padding: 0 !important;
-}
-
-td ul.errorlist li {
- margin: 0 !important;
-}
-
-.errors {
- background: #ffc;
-}
-
-.errors input, .errors select, .errors textarea {
- border: 1px solid red;
-}
-
-div.system-message {
- background: #ffc;
- margin: 10px;
- padding: 6px 8px;
- font-size: .8em;
-}
-
-div.system-message p.system-message-title {
- padding: 4px 5px 4px 25px;
- margin: 0;
- color: red;
- background: #ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat;
-}
-
-.description {
- font-size: 12px;
- padding: 5px 0 0 12px;
-}
-
-/* BREADCRUMBS */
-
-div.breadcrumbs {
- background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
- padding: 2px 8px 3px 8px;
- font-size: 11px;
- color: #999;
- border-top: 1px solid white;
- border-bottom: 1px solid #ccc;
- text-align: left;
-}
-
-/* ACTION ICONS */
-
-.addlink {
- padding-left: 12px;
- background: url(../img/admin/icon_addlink.gif) 0 .2em no-repeat;
-}
-
-.changelink {
- padding-left: 12px;
- background: url(../img/admin/icon_changelink.gif) 0 .2em no-repeat;
-}
-
-.deletelink {
- padding-left: 12px;
- background: url(../img/admin/icon_deletelink.gif) 0 .25em no-repeat;
-}
-
-a.deletelink:link, a.deletelink:visited {
- color: #CC3434;
-}
-
-a.deletelink:hover {
- color: #993333;
-}
-
-/* OBJECT TOOLS */
-
-.object-tools {
- font-size: 10px;
- font-weight: bold;
- font-family: Arial,Helvetica,sans-serif;
- padding-left: 0;
- float: right;
- position: relative;
- margin-top: -2.4em;
- margin-bottom: -2em;
-}
-
-.form-row .object-tools {
- margin-top: 5px;
- margin-bottom: 5px;
- float: none;
- height: 2em;
- padding-left: 3.5em;
-}
-
-.object-tools li {
- display: block;
- float: left;
- background: url(../img/admin/tool-left.gif) 0 0 no-repeat;
- padding: 0 0 0 8px;
- margin-left: 2px;
- height: 16px;
-}
-
-.object-tools li:hover {
- background: url(../img/admin/tool-left_over.gif) 0 0 no-repeat;
-}
-
-.object-tools a:link, .object-tools a:visited {
- display: block;
- float: left;
- color: white;
- padding: .1em 14px .1em 8px;
- height: 14px;
- background: #999 url(../img/admin/tool-right.gif) 100% 0 no-repeat;
-}
-
-.object-tools a:hover, .object-tools li:hover a {
- background: #5b80b2 url(../img/admin/tool-right_over.gif) 100% 0 no-repeat;
-}
-
-.object-tools a.viewsitelink, .object-tools a.golink {
- background: #999 url(../img/admin/tooltag-arrowright.gif) top right no-repeat;
- padding-right: 28px;
-}
-
-.object-tools a.viewsitelink:hover, .object-tools a.golink:hover {
- background: #5b80b2 url(../img/admin/tooltag-arrowright_over.gif) top right no-repeat;
-}
-
-.object-tools a.addlink {
- background: #999 url(../img/admin/tooltag-add.gif) top right no-repeat;
- padding-right: 28px;
-}
-
-.object-tools a.addlink:hover {
- background: #5b80b2 url(../img/admin/tooltag-add_over.gif) top right no-repeat;
-}
-
-/* OBJECT HISTORY */
-
-table#change-history {
- width: 100%;
-}
-
-table#change-history tbody th {
- width: 16em;
-}
-
-/* PAGE STRUCTURE */
-
-#container {
- position: relative;
- width: 100%;
- min-width: 760px;
- padding: 0;
-}
-
-#content {
- margin: 10px 15px;
-}
-
-#header {
- width: 100%;
-}
-
-#content-main {
- float: left;
- width: 100%;
-}
-
-#content-related {
- float: right;
- width: 18em;
- position: relative;
- margin-right: -19em;
-}
-
-#footer {
- clear: both;
- padding: 10px;
-}
-
-/* COLUMN TYPES */
-
-.colMS {
- margin-right: 20em !important;
-}
-
-.colSM {
- margin-left: 20em !important;
-}
-
-.colSM #content-related {
- float: left;
- margin-right: 0;
- margin-left: -19em;
-}
-
-.colSM #content-main {
- float: right;
-}
-
-.popup .colM {
- width: 95%;
-}
-
-.subcol {
- float: left;
- width: 46%;
- margin-right: 15px;
-}
-
-.dashboard #content {
- width: 500px;
-}
-
-/* HEADER */
-
-#header {
- background: #417690;
- color: #ffc;
- overflow: hidden;
-}
-
-#header a:link, #header a:visited {
- color: white;
-}
-
-#header a:hover {
- text-decoration: underline;
-}
-
-#branding h1 {
- padding: 0 10px;
- font-size: 18px;
- margin: 8px 0;
- font-weight: normal;
- color: #f4f379;
-}
-
-#branding h2 {
- padding: 0 10px;
- font-size: 14px;
- margin: -8px 0 8px 0;
- font-weight: normal;
- color: #ffc;
-}
-
-#user-tools {
- position: absolute;
- top: 0;
- right: 0;
- padding: 1.2em 10px;
- font-size: 11px;
- text-align: right;
-}
-
-/* SIDEBAR */
-
-#content-related h3 {
- font-size: 12px;
- color: #666;
- margin-bottom: 3px;
-}
-
-#content-related h4 {
- font-size: 11px;
-}
-
-#content-related .module h2 {
- background: #eee url(../img/admin/nav-bg.gif) bottom left repeat-x;
- color: #666;
-}
-
diff --git a/parts/django/django/contrib/admin/media/css/changelists.css b/parts/django/django/contrib/admin/media/css/changelists.css
deleted file mode 100644
index 3aa969a..0000000
--- a/parts/django/django/contrib/admin/media/css/changelists.css
+++ /dev/null
@@ -1,286 +0,0 @@
-/* CHANGELISTS */
-
-#changelist {
- position: relative;
- width: 100%;
-}
-
-#changelist table {
- width: 100%;
-}
-
-.change-list .hiddenfields { display:none; }
-
-.change-list .filtered table {
- border-right: 1px solid #ddd;
-}
-
-.change-list .filtered {
- min-height: 400px;
-}
-
-.change-list .filtered {
- background: white url(../img/admin/changelist-bg.gif) top right repeat-y !important;
-}
-
-.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
- margin-right: 160px !important;
- width: auto !important;
-}
-
-.change-list .filtered table tbody th {
- padding-right: 1em;
-}
-
-#changelist .toplinks {
- border-bottom: 1px solid #ccc !important;
-}
-
-#changelist .paginator {
- color: #666;
- border-top: 1px solid #eee;
- border-bottom: 1px solid #eee;
- background: white url(../img/admin/nav-bg.gif) 0 180% repeat-x;
- overflow: hidden;
-}
-
-.change-list .filtered .paginator {
- border-right: 1px solid #ddd;
-}
-
-/* CHANGELIST TABLES */
-
-#changelist table thead th {
- white-space: nowrap;
- vertical-align: middle;
-}
-
-#changelist table thead th.action-checkbox-column {
- width: 1.5em;
- text-align: center;
-}
-
-#changelist table tbody td {
- border-left: 1px solid #ddd;
-}
-
-#changelist table tbody td:first-child {
- border-left: 0;
- border-right: 1px solid #ddd;
- text-align: center;
-}
-
-#changelist table tfoot {
- color: #666;
-}
-
-/* TOOLBAR */
-
-#changelist #toolbar {
- padding: 3px;
- border-bottom: 1px solid #ddd;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
- color: #666;
-}
-
-#changelist #toolbar form input {
- font-size: 11px;
- padding: 1px 2px;
-}
-
-#changelist #toolbar form #searchbar {
- padding: 2px;
-}
-
-#changelist #changelist-search img {
- vertical-align: middle;
-}
-
-/* FILTER COLUMN */
-
-#changelist-filter {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 1000;
- width: 160px;
- border-left: 1px solid #ddd;
- background: #efefef;
- margin: 0;
-}
-
-#changelist-filter h2 {
- font-size: 11px;
- padding: 2px 5px;
- border-bottom: 1px solid #ddd;
-}
-
-#changelist-filter h3 {
- font-size: 12px;
- margin-bottom: 0;
-}
-
-#changelist-filter ul {
- padding-left: 0;
- margin-left: 10px;
-}
-
-#changelist-filter li {
- list-style-type: none;
- margin-left: 0;
- padding-left: 0;
-}
-
-#changelist-filter a {
- color: #999;
-}
-
-#changelist-filter a:hover {
- color: #036;
-}
-
-#changelist-filter li.selected {
- border-left: 5px solid #ccc;
- padding-left: 5px;
- margin-left: -10px;
-}
-
-#changelist-filter li.selected a {
- color: #5b80b2 !important;
-}
-
-/* DATE DRILLDOWN */
-
-.change-list ul.toplinks {
- display: block;
- background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
- border-top: 1px solid white;
- float: left;
- padding: 0 !important;
- margin: 0 !important;
- width: 100%;
-}
-
-.change-list ul.toplinks li {
- float: left;
- width: 9em;
- padding: 3px 6px;
- font-weight: bold;
- list-style-type: none;
-}
-
-.change-list ul.toplinks .date-back a {
- color: #999;
-}
-
-.change-list ul.toplinks .date-back a:hover {
- color: #036;
-}
-
-/* PAGINATOR */
-
-.paginator {
- font-size: 11px;
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 22px;
- margin: 0;
- border-top: 1px solid #ddd;
-}
-
-.paginator a:link, .paginator a:visited {
- padding: 2px 6px;
- border: solid 1px #ccc;
- background: white;
- text-decoration: none;
-}
-
-.paginator a.showall {
- padding: 0 !important;
- border: none !important;
-}
-
-.paginator a.showall:hover {
- color: #036 !important;
- background: transparent !important;
-}
-
-.paginator .end {
- border-width: 2px !important;
- margin-right: 6px;
-}
-
-.paginator .this-page {
- padding: 2px 6px;
- font-weight: bold;
- font-size: 13px;
- vertical-align: top;
-}
-
-.paginator a:hover {
- color: white;
- background: #5b80b2;
- border-color: #036;
-}
-
-/* ACTIONS */
-
-.filtered .actions {
- margin-right: 160px !important;
- border-right: 1px solid #ddd;
-}
-
-#changelist table input {
- margin: 0;
-}
-
-#changelist table tbody tr.selected {
- background-color: #FFFFCC;
-}
-
-#changelist .actions {
- color: #999;
- padding: 3px;
- border-top: 1px solid #fff;
- border-bottom: 1px solid #ddd;
- background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
-}
-
-#changelist .actions.selected {
- background: #fffccf;
- border-top: 1px solid #fffee8;
- border-bottom: 1px solid #edecd6;
-}
-
-#changelist .actions span.all,
-#changelist .actions span.action-counter,
-#changelist .actions span.clear,
-#changelist .actions span.question {
- font-size: 11px;
- margin: 0 0.5em;
- display: none;
-}
-
-#changelist .actions:last-child {
- border-bottom: none;
-}
-
-#changelist .actions select {
- border: 1px solid #aaa;
- margin-left: 0.5em;
- padding: 1px 2px;
-}
-
-#changelist .actions label {
- font-size: 11px;
- margin-left: 0.5em;
-}
-
-#changelist #action-toggle {
- display: none;
-}
-
-#changelist .actions .button {
- font-size: 11px;
- padding: 1px 2px;
-}
diff --git a/parts/django/django/contrib/admin/media/css/dashboard.css b/parts/django/django/contrib/admin/media/css/dashboard.css
deleted file mode 100644
index 88e3b1d..0000000
--- a/parts/django/django/contrib/admin/media/css/dashboard.css
+++ /dev/null
@@ -1,24 +0,0 @@
-/* DASHBOARD */
-
-.dashboard .module table th {
- width: 100%;
-}
-
-.dashboard .module table td {
- white-space: nowrap;
-}
-
-.dashboard .module table td a {
- display: block;
- padding-right: .6em;
-}
-
-/* RECENT ACTIONS MODULE */
-
-.module ul.actionlist {
- margin-left: 0;
-}
-
-ul.actionlist li {
- list-style-type: none;
-}
diff --git a/parts/django/django/contrib/admin/media/css/forms.css b/parts/django/django/contrib/admin/media/css/forms.css
deleted file mode 100644
index 35d0ed7..0000000
--- a/parts/django/django/contrib/admin/media/css/forms.css
+++ /dev/null
@@ -1,354 +0,0 @@
-@import url('widgets.css');
-
-/* FORM ROWS */
-
-.form-row {
- overflow: hidden;
- padding: 8px 12px;
- font-size: 11px;
- border-bottom: 1px solid #eee;
-}
-
-.form-row img, .form-row input {
- vertical-align: middle;
-}
-
-form .form-row p {
- padding-left: 0;
- font-size: 11px;
-}
-
-/* FORM LABELS */
-
-form h4 {
- margin: 0 !important;
- padding: 0 !important;
- border: none !important;
-}
-
-label {
- font-weight: normal !important;
- color: #666;
- font-size: 12px;
-}
-
-.required label, label.required {
- font-weight: bold !important;
- color: #333 !important;
-}
-
-/* RADIO BUTTONS */
-
-form ul.radiolist li {
- list-style-type: none;
-}
-
-form ul.radiolist label {
- float: none;
- display: inline;
-}
-
-form ul.inline {
- margin-left: 0;
- padding: 0;
-}
-
-form ul.inline li {
- float: left;
- padding-right: 7px;
-}
-
-/* ALIGNED FIELDSETS */
-
-.aligned label {
- display: block;
- padding: 3px 10px 0 0;
- float: left;
- width: 8em;
-}
-
-.aligned ul label {
- display: inline;
- float: none;
- width: auto;
-}
-
-.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
- width: 350px;
-}
-
-form .aligned p, form .aligned ul {
- margin-left: 7em;
- padding-left: 30px;
-}
-
-form .aligned table p {
- margin-left: 0;
- padding-left: 0;
-}
-
-form .aligned p.help {
- padding-left: 38px;
-}
-
-.aligned .vCheckboxLabel {
- float: none !important;
- display: inline;
- padding-left: 4px;
-}
-
-.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
- width: 610px;
-}
-
-.checkbox-row p.help {
- margin-left: 0;
- padding-left: 0 !important;
-}
-
-fieldset .field-box {
- float: left;
- margin-right: 20px;
-}
-
-/* WIDE FIELDSETS */
-
-.wide label {
- width: 15em !important;
-}
-
-form .wide p {
- margin-left: 15em;
-}
-
-form .wide p.help {
- padding-left: 38px;
-}
-
-.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
- width: 450px;
-}
-
-/* COLLAPSED FIELDSETS */
-
-fieldset.collapsed * {
- display: none;
-}
-
-fieldset.collapsed h2, fieldset.collapsed {
- display: block !important;
-}
-
-fieldset.collapsed h2 {
- background-image: url(../img/admin/nav-bg.gif);
- background-position: bottom left;
- color: #999;
-}
-
-fieldset.collapsed .collapse-toggle {
- background: transparent;
- display: inline !important;
-}
-
-/* MONOSPACE TEXTAREAS */
-
-fieldset.monospace textarea {
- font-family: "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace;
-}
-
-/* SUBMIT ROW */
-
-.submit-row {
- padding: 5px 7px;
- text-align: right;
- background: white url(../img/admin/nav-bg.gif) 0 100% repeat-x;
- border: 1px solid #ccc;
- margin: 5px 0;
- overflow: hidden;
-}
-
-.submit-row input {
- margin: 0 0 0 5px;
-}
-
-.submit-row p {
- margin: 0.3em;
-}
-
-.submit-row p.deletelink-box {
- float: left;
-}
-
-.submit-row .deletelink {
- background: url(../img/admin/icon_deletelink.gif) 0 50% no-repeat;
- padding-left: 14px;
-}
-
-/* CUSTOM FORM FIELDS */
-
-.vSelectMultipleField {
- vertical-align: top !important;
-}
-
-.vCheckboxField {
- border: none;
-}
-
-.vDateField, .vTimeField {
- margin-right: 2px;
-}
-
-.vURLField {
- width: 30em;
-}
-
-.vLargeTextField, .vXMLLargeTextField {
- width: 48em;
-}
-
-.flatpages-flatpage #id_content {
- height: 40.2em;
-}
-
-.module table .vPositiveSmallIntegerField {
- width: 2.2em;
-}
-
-.vTextField {
- width: 20em;
-}
-
-.vIntegerField {
- width: 5em;
-}
-
-.vForeignKeyRawIdAdminField {
- width: 5em;
-}
-
-/* INLINES */
-
-.inline-group {
- padding: 0;
- border: 1px solid #ccc;
- margin: 10px 0;
-}
-
-.inline-group .aligned label {
- width: 8em;
-}
-
-.inline-related {
- position: relative;
-}
-
-.inline-related h3 {
- margin: 0;
- color: #666;
- padding: 3px 5px;
- font-size: 11px;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
- border-bottom: 1px solid #ddd;
-}
-
-.inline-related h3 span.delete {
- float: right;
-}
-
-.inline-related h3 span.delete label {
- margin-left: 2px;
- font-size: 11px;
-}
-
-.inline-related fieldset {
- margin: 0;
- background: #fff;
- border: none;
-}
-
-.inline-related fieldset.module h3 {
- margin: 0;
- padding: 2px 5px 3px 5px;
- font-size: 11px;
- text-align: left;
- font-weight: bold;
- background: #bcd;
- color: #fff;
-}
-
-.inline-group .tabular fieldset.module {
- border: none;
- border-bottom: 1px solid #ddd;
-}
-
-.inline-related.tabular fieldset.module table {
- width: 100%;
-}
-
-.last-related fieldset {
- border: none;
-}
-
-.inline-group .tabular tr.has_original td {
- padding-top: 2em;
-}
-
-.inline-group .tabular tr td.original {
- padding: 2px 0 0 0;
- width: 0;
- _position: relative;
-}
-
-.inline-group .tabular th.original {
- width: 0px;
- padding: 0;
-}
-
-.inline-group .tabular td.original p {
- position: absolute;
- left: 0;
- height: 1.1em;
- padding: 2px 7px;
- overflow: hidden;
- font-size: 9px;
- font-weight: bold;
- color: #666;
- _width: 700px;
-}
-
-.inline-group ul.tools {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-.inline-group ul.tools li {
- display: inline;
- padding: 0 5px;
-}
-
-.inline-group div.add-row,
-.inline-group .tabular tr.add-row td {
- color: #666;
- padding: 3px 5px;
- border-bottom: 1px solid #ddd;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
-}
-
-.inline-group .tabular tr.add-row td {
- padding: 4px 5px 3px;
- border-bottom: none;
-}
-
-.inline-group ul.tools a.add,
-.inline-group div.add-row a,
-.inline-group .tabular tr.add-row td a {
- background: url(../img/admin/icon_addlink.gif) 0 50% no-repeat;
- padding-left: 14px;
- font-size: 11px;
- outline: 0; /* Remove dotted border around link */
-}
-
-.empty-form {
- display: none;
-}
diff --git a/parts/django/django/contrib/admin/media/css/ie.css b/parts/django/django/contrib/admin/media/css/ie.css
deleted file mode 100644
index 5fd1ce3..0000000
--- a/parts/django/django/contrib/admin/media/css/ie.css
+++ /dev/null
@@ -1,57 +0,0 @@
-/* IE 6 & 7 */
-
-/* Proper fixed width for dashboard in IE6 */
-
-.dashboard #content {
- *width: 768px;
-}
-
-.dashboard #content-main {
- *width: 535px;
-}
-
-/* IE 6 ONLY */
-
-/* Keep header from flowing off the page */
-
-#container {
- _position: static;
-}
-
-/* Put the right sidebars back on the page */
-
-.colMS #content-related {
- _margin-right: 0;
- _margin-left: 10px;
- _position: static;
-}
-
-/* Put the left sidebars back on the page */
-
-.colSM #content-related {
- _margin-right: 10px;
- _margin-left: -115px;
- _position: static;
-}
-
-.form-row {
- _height: 1%;
-}
-
-/* Fix right margin for changelist filters in IE6 */
-
-#changelist-filter ul {
- _margin-right: -10px;
-}
-
-/* IE ignores min-height, but treats height as if it were min-height */
-
-.change-list .filtered {
- _height: 400px;
-}
-
-/* IE doesn't know alpha transparency in PNGs */
-
-.inline-deletelink {
- background: transparent url(../img/admin/inline-delete-8bit.png) no-repeat;
-} \ No newline at end of file
diff --git a/parts/django/django/contrib/admin/media/css/login.css b/parts/django/django/contrib/admin/media/css/login.css
deleted file mode 100644
index 8d90d12..0000000
--- a/parts/django/django/contrib/admin/media/css/login.css
+++ /dev/null
@@ -1,54 +0,0 @@
-/* LOGIN FORM */
-
-body.login {
- background: #eee;
-}
-
-.login #container {
- background: white;
- border: 1px solid #ccc;
- width: 28em;
- min-width: 300px;
- margin-left: auto;
- margin-right: auto;
- margin-top: 100px;
-}
-
-.login #content-main {
- width: 100%;
-}
-
-.login form {
- margin-top: 1em;
-}
-
-.login .form-row {
- padding: 4px 0;
- float: left;
- width: 100%;
-}
-
-.login .form-row label {
- float: left;
- width: 9em;
- padding-right: 0.5em;
- line-height: 2em;
- text-align: right;
- font-size: 1em;
- color: #333;
-}
-
-.login .form-row #id_username, .login .form-row #id_password {
- width: 14em;
-}
-
-.login span.help {
- font-size: 10px;
- display: block;
-}
-
-.login .submit-row {
- clear: both;
- padding: 1em 0 0 9.4em;
-}
-
diff --git a/parts/django/django/contrib/admin/media/css/rtl.css b/parts/django/django/contrib/admin/media/css/rtl.css
deleted file mode 100644
index b05537a..0000000
--- a/parts/django/django/contrib/admin/media/css/rtl.css
+++ /dev/null
@@ -1,221 +0,0 @@
-body {
- direction: rtl;
-}
-
-/* LOGIN */
-
-.login .form-row {
- float: right;
-}
-
-.login .form-row label {
- float: right;
- padding-left: 0.5em;
- padding-right: 0;
- text-align: left;
-}
-
-.login .submit-row {
- clear: both;
- padding: 1em 9.4em 0 0;
-}
-
-/* GLOBAL */
-
-th {
- text-align: right;
-}
-
-.module h2, .module caption {
- text-align: right;
-}
-
-.addlink, .changelink {
- padding-left: 0px;
- padding-right: 12px;
- background-position: 100% 0.2em;
-}
-
-.deletelink {
- padding-left: 0px;
- padding-right: 12px;
- background-position: 100% 0.25em;
-}
-
-.object-tools {
- float: left;
-}
-
-/* LAYOUT */
-
-#user-tools {
- right: auto;
- left: 0;
- text-align: left;
-}
-
-div.breadcrumbs {
- text-align: right;
-}
-
-#content-main {
- float: right;
-}
-
-#content-related {
- float: left;
- margin-left: -19em;
- margin-right: auto;
-}
-
-.colMS {
- margin-left: 20em !important;
- margin-right: 10px !important;
-}
-
-/* dashboard styles */
-
-.dashboard .module table td a {
- padding-left: .6em;
- padding-right: 12px;
-}
-
-/* changelists styles */
-
-.change-list ul.toplinks li {
- float: right;
-}
-
-.change-list .filtered {
- background: white url(../img/admin/changelist-bg_rtl.gif) top left repeat-y !important;
-}
-
-.change-list .filtered table {
- border-left: 1px solid #ddd;
- border-right: 0px none;
-}
-
-#changelist-filter {
- right: auto;
- left: 0;
- border-left: 0px none;
- border-right: 1px solid #ddd;
-}
-
-.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
- margin-right: 0px !important;
- margin-left: 160px !important;
-}
-
-#changelist-filter li.selected {
- border-left: 0px none;
- padding-left: 0px;
- margin-left: 0;
- border-right: 5px solid #ccc;
- padding-right: 5px;
- margin-right: -10px;
-}
-
-.filtered .actions {
- border-left:1px solid #DDDDDD;
- margin-left:160px !important;
- border-right: 0 none;
- margin-right:0 !important;
-}
-
-/* FORMS */
-
-.aligned label {
- padding: 0 0 3px 1em;
- float: right;
-}
-
-.submit-row {
- text-align: left
-}
-
-.submit-row p.deletelink-box {
- float: right;
-}
-
-.submit-row .deletelink {
- background: url(../img/admin/icon_deletelink.gif) 0 50% no-repeat;
- padding-right: 14px;
-}
-
-.vDateField, .vTimeField {
- margin-left: 2px;
-}
-
-form ul.inline li {
- float: right;
- padding-right: 0;
- padding-left: 7px;
-}
-
-input[type=submit].default, .submit-row input.default {
- float: left;
-}
-
-fieldset .field-box {
- float: right;
- margin-left: 20px;
-}
-
-.errorlist li {
- background-position: 100% .3em;
- padding: 4px 25px 4px 5px;
-}
-
-.errornote {
- background-position: 100% .3em;
- padding: 4px 25px 4px 5px;
-}
-
-/* WIDGETS */
-
-.calendarnav-previous {
- top: 0;
- left: auto;
- right: 0;
-}
-
-.calendarnav-next {
- top: 0;
- right: auto;
- left: 0;
-}
-
-.calendar caption, .calendarbox h2 {
- text-align: center;
-}
-
-.selector {
- float: right;
-}
-
-.selector .selector-filter {
- text-align: right;
-}
-
-.inline-deletelink {
- float: left;
-}
-
-/* MISC */
-
-.inline-related h2, .inline-group h2 {
- text-align: right
-}
-
-.inline-related h3 span.delete {
- padding-right: 20px;
- padding-left: inherit;
- left: 10px;
- right: inherit;
-}
-
-.inline-related h3 span.delete label {
- margin-left: inherit;
- margin-right: 2px;
-}
diff --git a/parts/django/django/contrib/admin/media/css/widgets.css b/parts/django/django/contrib/admin/media/css/widgets.css
deleted file mode 100644
index 620e082..0000000
--- a/parts/django/django/contrib/admin/media/css/widgets.css
+++ /dev/null
@@ -1,506 +0,0 @@
-/* SELECTOR (FILTER INTERFACE) */
-
-.selector {
- width: 580px;
- float: left;
-}
-
-.selector select {
- width: 270px;
- height: 17.2em;
-}
-
-.selector-available, .selector-chosen {
- float: left;
- width: 270px;
- text-align: center;
- margin-bottom: 5px;
-}
-
-.selector-available h2, .selector-chosen h2 {
- border: 1px solid #ccc;
-}
-
-.selector .selector-available h2 {
- background: white url(../img/admin/nav-bg.gif) bottom left repeat-x;
- color: #666;
-}
-
-.selector .selector-filter {
- background: white;
- border: 1px solid #ccc;
- border-width: 0 1px;
- padding: 3px;
- color: #999;
- font-size: 10px;
- margin: 0;
- text-align: left;
-}
-
-.selector .selector-chosen .selector-filter {
- padding: 4px 5px;
-}
-
-.selector .selector-available input {
- width: 230px;
-}
-
-.selector ul.selector-chooser {
- float: left;
- width: 22px;
- height: 50px;
- background: url(../img/admin/chooser-bg.gif) top center no-repeat;
- margin: 8em 3px 0 3px;
- padding: 0;
-}
-
-.selector-chooser li {
- margin: 0;
- padding: 3px;
- list-style-type: none;
-}
-
-.selector select {
- margin-bottom: 5px;
- margin-top: 0;
-}
-
-.selector-add, .selector-remove {
- width: 16px;
- height: 16px;
- display: block;
- text-indent: -3000px;
-}
-
-.selector-add {
- background: url(../img/admin/selector-add.gif) top center no-repeat;
- margin-bottom: 2px;
-}
-
-.selector-remove {
- background: url(../img/admin/selector-remove.gif) top center no-repeat;
-}
-
-a.selector-chooseall, a.selector-clearall {
- display: block;
- width: 6em;
- text-align: left;
- margin-left: auto;
- margin-right: auto;
- font-weight: bold;
- color: #666;
- padding: 3px 0 3px 18px;
-}
-
-a.selector-chooseall:hover, a.selector-clearall:hover {
- color: #036;
-}
-
-a.selector-chooseall {
- width: 7em;
- background: url(../img/admin/selector-addall.gif) left center no-repeat;
-}
-
-a.selector-clearall {
- background: url(../img/admin/selector-removeall.gif) left center no-repeat;
-}
-
-
-/* STACKED SELECTORS */
-
-.stacked {
- float: left;
- width: 500px;
-}
-
-.stacked select {
- width: 480px;
- height: 10.1em;
-}
-
-.stacked .selector-available, .stacked .selector-chosen {
- width: 480px;
-}
-
-.stacked .selector-available {
- margin-bottom: 0;
-}
-
-.stacked .selector-available input {
- width: 442px;
-}
-
-.stacked ul.selector-chooser {
- height: 22px;
- width: 50px;
- margin: 0 0 3px 40%;
- background: url(../img/admin/chooser_stacked-bg.gif) top center no-repeat;
-}
-
-.stacked .selector-chooser li {
- float: left;
- padding: 3px 3px 3px 5px;
-}
-
-.stacked .selector-chooseall, .stacked .selector-clearall {
- display: none;
-}
-
-.stacked .selector-add {
- background-image: url(../img/admin/selector_stacked-add.gif);
-}
-
-.stacked .selector-remove {
- background-image: url(../img/admin/selector_stacked-remove.gif);
-}
-
-
-/* DATE AND TIME */
-
-p.datetime {
- line-height: 20px;
- margin: 0;
- padding: 0;
- color: #666;
- font-size: 11px;
- font-weight: bold;
-}
-
-.datetime span {
- font-size: 11px;
- color: #ccc;
- font-weight: normal;
- white-space: nowrap;
-}
-
-table p.datetime {
- font-size: 10px;
- margin-left: 0;
- padding-left: 0;
-}
-
-/* FILE UPLOADS */
-
-p.file-upload {
- line-height: 20px;
- margin: 0;
- padding: 0;
- color: #666;
- font-size: 11px;
- font-weight: bold;
-}
-
-.file-upload a {
- font-weight: normal;
-}
-
-.file-upload .deletelink {
- margin-left: 5px;
-}
-
-/* CALENDARS & CLOCKS */
-
-.calendarbox, .clockbox {
- margin: 5px auto;
- font-size: 11px;
- width: 16em;
- text-align: center;
- background: white;
- position: relative;
-}
-
-.clockbox {
- width: auto;
-}
-
-.calendar {
- margin: 0;
- padding: 0;
-}
-
-.calendar table {
- margin: 0;
- padding: 0;
- border-collapse: collapse;
- background: white;
- width: 99%;
-}
-
-.calendar caption, .calendarbox h2 {
- margin: 0;
- font-size: 11px;
- text-align: center;
- border-top: none;
-}
-
-.calendar th {
- font-size: 10px;
- color: #666;
- padding: 2px 3px;
- text-align: center;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x;
- border-bottom: 1px solid #ddd;
-}
-
-.calendar td {
- font-size: 11px;
- text-align: center;
- padding: 0;
- border-top: 1px solid #eee;
- border-bottom: none;
-}
-
-.calendar td.selected a {
- background: #C9DBED;
-}
-
-.calendar td.nonday {
- background: #efefef;
-}
-
-.calendar td.today a {
- background: #ffc;
-}
-
-.calendar td a, .timelist a {
- display: block;
- font-weight: bold;
- padding: 4px;
- text-decoration: none;
- color: #444;
-}
-
-.calendar td a:hover, .timelist a:hover {
- background: #5b80b2;
- color: white;
-}
-
-.calendar td a:active, .timelist a:active {
- background: #036;
- color: white;
-}
-
-.calendarnav {
- font-size: 10px;
- text-align: center;
- color: #ccc;
- margin: 0;
- padding: 1px 3px;
-}
-
-.calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover {
- color: #999;
-}
-
-.calendar-shortcuts {
- background: white;
- font-size: 10px;
- line-height: 11px;
- border-top: 1px solid #eee;
- padding: 3px 0 4px;
- color: #ccc;
-}
-
-.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
- display: block;
- position: absolute;
- font-weight: bold;
- font-size: 12px;
- background: #C9DBED url(../img/admin/default-bg.gif) bottom left repeat-x;
- padding: 1px 4px 2px 4px;
- color: white;
-}
-
-.calendarnav-previous:hover, .calendarnav-next:hover {
- background: #036;
-}
-
-.calendarnav-previous {
- top: 0;
- left: 0;
-}
-
-.calendarnav-next {
- top: 0;
- right: 0;
-}
-
-.calendar-cancel {
- margin: 0 !important;
- padding: 0;
- font-size: 10px;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x;
- border-top: 1px solid #ddd;
-}
-
-.calendar-cancel a {
- padding: 2px;
- color: #999;
-}
-
-ul.timelist, .timelist li {
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-
-.timelist a {
- padding: 2px;
-}
-
-/* INLINE ORDERER */
-
-ul.orderer {
- position: relative;
- padding: 0 !important;
- margin: 0 !important;
- list-style-type: none;
-}
-
-ul.orderer li {
- list-style-type: none;
- display: block;
- padding: 0;
- margin: 0;
- border: 1px solid #bbb;
- border-width: 0 1px 1px 0;
- white-space: nowrap;
- overflow: hidden;
- background: #e2e2e2 url(../img/admin/nav-bg-grabber.gif) repeat-y;
-}
-
-ul.orderer li:hover {
- cursor: move;
- background-color: #ddd;
-}
-
-ul.orderer li a.selector {
- margin-left: 12px;
- overflow: hidden;
- width: 83%;
- font-size: 10px !important;
- padding: 0.6em 0;
-}
-
-ul.orderer li a:link, ul.orderer li a:visited {
- color: #333;
-}
-
-ul.orderer li .inline-deletelink {
- position: absolute;
- right: 4px;
- margin-top: 0.6em;
-}
-
-ul.orderer li.selected {
- background-color: #f8f8f8;
- border-right-color: #f8f8f8;
-}
-
-ul.orderer li.deleted {
- background: #bbb url(../img/admin/deleted-overlay.gif);
-}
-
-ul.orderer li.deleted a:link, ul.orderer li.deleted a:visited {
- color: #888;
-}
-
-ul.orderer li.deleted .inline-deletelink {
- background-image: url(../img/admin/inline-restore.png);
-}
-
-ul.orderer li.deleted:hover, ul.orderer li.deleted a.selector:hover {
- cursor: default;
-}
-
-/* EDIT INLINE */
-
-.inline-deletelink {
- float: right;
- text-indent: -9999px;
- background: transparent url(../img/admin/inline-delete.png) no-repeat;
- width: 15px;
- height: 15px;
- border: 0px none;
- outline: 0; /* Remove dotted border around link */
-}
-
-.inline-deletelink:hover {
- background-position: -15px 0;
- cursor: pointer;
-}
-
-.editinline button.addlink {
- border: 0px none;
- color: #5b80b2;
- font-size: 100%;
- cursor: pointer;
-}
-
-.editinline button.addlink:hover {
- color: #036;
- cursor: pointer;
-}
-
-.editinline table .help {
- text-align: right;
- float: right;
- padding-left: 2em;
-}
-
-.editinline tfoot .addlink {
- white-space: nowrap;
-}
-
-.editinline table thead th:last-child {
- border-left: none;
-}
-
-.editinline tr.deleted {
- background: #ddd url(../img/admin/deleted-overlay.gif);
-}
-
-.editinline tr.deleted .inline-deletelink {
- background-image: url(../img/admin/inline-restore.png);
-}
-
-.editinline tr.deleted td:hover {
- cursor: default;
-}
-
-.editinline tr.deleted td:first-child {
- background-image: none !important;
-}
-
-/* EDIT INLINE - STACKED */
-
-.editinline-stacked {
- min-width: 758px;
-}
-
-.editinline-stacked .inline-object {
- margin-left: 210px;
- background: white;
-}
-
-.editinline-stacked .inline-source {
- float: left;
- width: 200px;
- background: #f8f8f8;
-}
-
-.editinline-stacked .inline-splitter {
- float: left;
- width: 9px;
- background: #f8f8f8 url(../img/admin/inline-splitter-bg.gif) 50% 50% no-repeat;
- border-right: 1px solid #ccc;
-}
-
-.editinline-stacked .controls {
- clear: both;
- background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
- padding: 3px 4px;
- font-size: 11px;
- border-top: 1px solid #ddd;
-}
-
diff --git a/parts/django/django/contrib/admin/media/img/admin/arrow-down.gif b/parts/django/django/contrib/admin/media/img/admin/arrow-down.gif
deleted file mode 100644
index a967b9f..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/arrow-down.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/arrow-up.gif b/parts/django/django/contrib/admin/media/img/admin/arrow-up.gif
deleted file mode 100644
index 3fe4851..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/arrow-up.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/changelist-bg.gif b/parts/django/django/contrib/admin/media/img/admin/changelist-bg.gif
deleted file mode 100644
index 7f46994..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/changelist-bg.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/changelist-bg_rtl.gif b/parts/django/django/contrib/admin/media/img/admin/changelist-bg_rtl.gif
deleted file mode 100644
index 2379712..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/changelist-bg_rtl.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/chooser-bg.gif b/parts/django/django/contrib/admin/media/img/admin/chooser-bg.gif
deleted file mode 100644
index 30e83c2..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/chooser-bg.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/chooser_stacked-bg.gif b/parts/django/django/contrib/admin/media/img/admin/chooser_stacked-bg.gif
deleted file mode 100644
index 5d104b6..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/chooser_stacked-bg.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/default-bg-reverse.gif b/parts/django/django/contrib/admin/media/img/admin/default-bg-reverse.gif
deleted file mode 100644
index 0873281..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/default-bg-reverse.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/default-bg.gif b/parts/django/django/contrib/admin/media/img/admin/default-bg.gif
deleted file mode 100644
index 003aeca..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/default-bg.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/deleted-overlay.gif b/parts/django/django/contrib/admin/media/img/admin/deleted-overlay.gif
deleted file mode 100644
index dc3828f..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/deleted-overlay.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon-no.gif b/parts/django/django/contrib/admin/media/img/admin/icon-no.gif
deleted file mode 100644
index 1b4ee58..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon-no.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon-unknown.gif b/parts/django/django/contrib/admin/media/img/admin/icon-unknown.gif
deleted file mode 100644
index cfd2b02..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon-unknown.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon-yes.gif b/parts/django/django/contrib/admin/media/img/admin/icon-yes.gif
deleted file mode 100644
index 7399282..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon-yes.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_addlink.gif b/parts/django/django/contrib/admin/media/img/admin/icon_addlink.gif
deleted file mode 100644
index ee70e1a..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_addlink.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_alert.gif b/parts/django/django/contrib/admin/media/img/admin/icon_alert.gif
deleted file mode 100644
index a1dde26..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_alert.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_calendar.gif b/parts/django/django/contrib/admin/media/img/admin/icon_calendar.gif
deleted file mode 100644
index 7587b30..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_calendar.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_changelink.gif b/parts/django/django/contrib/admin/media/img/admin/icon_changelink.gif
deleted file mode 100644
index e1b9afd..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_changelink.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_clock.gif b/parts/django/django/contrib/admin/media/img/admin/icon_clock.gif
deleted file mode 100644
index ff2d57e..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_clock.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_deletelink.gif b/parts/django/django/contrib/admin/media/img/admin/icon_deletelink.gif
deleted file mode 100644
index 72523e3..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_deletelink.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_error.gif b/parts/django/django/contrib/admin/media/img/admin/icon_error.gif
deleted file mode 100644
index 3730a00..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_error.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_searchbox.png b/parts/django/django/contrib/admin/media/img/admin/icon_searchbox.png
deleted file mode 100644
index 8ab579e..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_searchbox.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/icon_success.gif b/parts/django/django/contrib/admin/media/img/admin/icon_success.gif
deleted file mode 100644
index 5cf90a1..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/icon_success.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/inline-delete-8bit.png b/parts/django/django/contrib/admin/media/img/admin/inline-delete-8bit.png
deleted file mode 100644
index 95caf59..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/inline-delete-8bit.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/inline-delete.png b/parts/django/django/contrib/admin/media/img/admin/inline-delete.png
deleted file mode 100644
index d59bcd2..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/inline-delete.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/inline-restore-8bit.png b/parts/django/django/contrib/admin/media/img/admin/inline-restore-8bit.png
deleted file mode 100644
index e087c8e..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/inline-restore-8bit.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/inline-restore.png b/parts/django/django/contrib/admin/media/img/admin/inline-restore.png
deleted file mode 100644
index efdd92a..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/inline-restore.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/inline-splitter-bg.gif b/parts/django/django/contrib/admin/media/img/admin/inline-splitter-bg.gif
deleted file mode 100644
index 32ac5b3..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/inline-splitter-bg.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/nav-bg-grabber.gif b/parts/django/django/contrib/admin/media/img/admin/nav-bg-grabber.gif
deleted file mode 100644
index 0a784fa..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/nav-bg-grabber.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/nav-bg-reverse.gif b/parts/django/django/contrib/admin/media/img/admin/nav-bg-reverse.gif
deleted file mode 100644
index f11029f..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/nav-bg-reverse.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/nav-bg.gif b/parts/django/django/contrib/admin/media/img/admin/nav-bg.gif
deleted file mode 100644
index f8402b8..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/nav-bg.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/selector-add.gif b/parts/django/django/contrib/admin/media/img/admin/selector-add.gif
deleted file mode 100644
index 50132d1..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/selector-add.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/selector-addall.gif b/parts/django/django/contrib/admin/media/img/admin/selector-addall.gif
deleted file mode 100644
index d6e7c63..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/selector-addall.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/selector-remove.gif b/parts/django/django/contrib/admin/media/img/admin/selector-remove.gif
deleted file mode 100644
index 2b9b0a2..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/selector-remove.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/selector-removeall.gif b/parts/django/django/contrib/admin/media/img/admin/selector-removeall.gif
deleted file mode 100644
index 5a44219..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/selector-removeall.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/selector-search.gif b/parts/django/django/contrib/admin/media/img/admin/selector-search.gif
deleted file mode 100644
index 6d5f4c7..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/selector-search.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/selector_stacked-add.gif b/parts/django/django/contrib/admin/media/img/admin/selector_stacked-add.gif
deleted file mode 100644
index 7426169..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/selector_stacked-add.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/selector_stacked-remove.gif b/parts/django/django/contrib/admin/media/img/admin/selector_stacked-remove.gif
deleted file mode 100644
index 60412ce..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/selector_stacked-remove.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tool-left.gif b/parts/django/django/contrib/admin/media/img/admin/tool-left.gif
deleted file mode 100644
index 011490f..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tool-left.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tool-left_over.gif b/parts/django/django/contrib/admin/media/img/admin/tool-left_over.gif
deleted file mode 100644
index 937e07b..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tool-left_over.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tool-right.gif b/parts/django/django/contrib/admin/media/img/admin/tool-right.gif
deleted file mode 100644
index cdc140c..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tool-right.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tool-right_over.gif b/parts/django/django/contrib/admin/media/img/admin/tool-right_over.gif
deleted file mode 100644
index 4db977e..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tool-right_over.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tooltag-add.gif b/parts/django/django/contrib/admin/media/img/admin/tooltag-add.gif
deleted file mode 100644
index 8b53d49..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tooltag-add.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tooltag-add_over.gif b/parts/django/django/contrib/admin/media/img/admin/tooltag-add_over.gif
deleted file mode 100644
index bfc52f1..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tooltag-add_over.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright.gif b/parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright.gif
deleted file mode 100644
index cdaaae7..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright_over.gif b/parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright_over.gif
deleted file mode 100644
index 7163189..0000000
--- a/parts/django/django/contrib/admin/media/img/admin/tooltag-arrowright_over.gif
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/gis/move_vertex_off.png b/parts/django/django/contrib/admin/media/img/gis/move_vertex_off.png
deleted file mode 100644
index 296b2e2..0000000
--- a/parts/django/django/contrib/admin/media/img/gis/move_vertex_off.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/img/gis/move_vertex_on.png b/parts/django/django/contrib/admin/media/img/gis/move_vertex_on.png
deleted file mode 100644
index 21f4758..0000000
--- a/parts/django/django/contrib/admin/media/img/gis/move_vertex_on.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/admin/media/js/LICENSE-JQUERY.txt b/parts/django/django/contrib/admin/media/js/LICENSE-JQUERY.txt
deleted file mode 100644
index a4c5bd7..0000000
--- a/parts/django/django/contrib/admin/media/js/LICENSE-JQUERY.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2010 John Resig, http://jquery.com/
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/parts/django/django/contrib/admin/media/js/SelectBox.js b/parts/django/django/contrib/admin/media/js/SelectBox.js
deleted file mode 100644
index f28c861..0000000
--- a/parts/django/django/contrib/admin/media/js/SelectBox.js
+++ /dev/null
@@ -1,111 +0,0 @@
-var SelectBox = {
- cache: new Object(),
- init: function(id) {
- var box = document.getElementById(id);
- var node;
- SelectBox.cache[id] = new Array();
- var cache = SelectBox.cache[id];
- for (var i = 0; (node = box.options[i]); i++) {
- cache.push({value: node.value, text: node.text, displayed: 1});
- }
- },
- redisplay: function(id) {
- // Repopulate HTML select box from cache
- var box = document.getElementById(id);
- box.options.length = 0; // clear all options
- for (var i = 0, j = SelectBox.cache[id].length; i < j; i++) {
- var node = SelectBox.cache[id][i];
- if (node.displayed) {
- box.options[box.options.length] = new Option(node.text, node.value, false, false);
- }
- }
- },
- filter: function(id, text) {
- // Redisplay the HTML select box, displaying only the choices containing ALL
- // the words in text. (It's an AND search.)
- var tokens = text.toLowerCase().split(/\s+/);
- var node, token;
- for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
- node.displayed = 1;
- for (var j = 0; (token = tokens[j]); j++) {
- if (node.text.toLowerCase().indexOf(token) == -1) {
- node.displayed = 0;
- }
- }
- }
- SelectBox.redisplay(id);
- },
- delete_from_cache: function(id, value) {
- var node, delete_index = null;
- for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
- if (node.value == value) {
- delete_index = i;
- break;
- }
- }
- var j = SelectBox.cache[id].length - 1;
- for (var i = delete_index; i < j; i++) {
- SelectBox.cache[id][i] = SelectBox.cache[id][i+1];
- }
- SelectBox.cache[id].length--;
- },
- add_to_cache: function(id, option) {
- SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1});
- },
- cache_contains: function(id, value) {
- // Check if an item is contained in the cache
- var node;
- for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
- if (node.value == value) {
- return true;
- }
- }
- return false;
- },
- move: function(from, to) {
- var from_box = document.getElementById(from);
- var to_box = document.getElementById(to);
- var option;
- for (var i = 0; (option = from_box.options[i]); i++) {
- if (option.selected && SelectBox.cache_contains(from, option.value)) {
- SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
- SelectBox.delete_from_cache(from, option.value);
- }
- }
- SelectBox.redisplay(from);
- SelectBox.redisplay(to);
- },
- move_all: function(from, to) {
- var from_box = document.getElementById(from);
- var to_box = document.getElementById(to);
- var option;
- for (var i = 0; (option = from_box.options[i]); i++) {
- if (SelectBox.cache_contains(from, option.value)) {
- SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
- SelectBox.delete_from_cache(from, option.value);
- }
- }
- SelectBox.redisplay(from);
- SelectBox.redisplay(to);
- },
- sort: function(id) {
- SelectBox.cache[id].sort( function(a, b) {
- a = a.text.toLowerCase();
- b = b.text.toLowerCase();
- try {
- if (a > b) return 1;
- if (a < b) return -1;
- }
- catch (e) {
- // silently fail on IE 'unknown' exception
- }
- return 0;
- } );
- },
- select_all: function(id) {
- var box = document.getElementById(id);
- for (var i = 0; i < box.options.length; i++) {
- box.options[i].selected = 'selected';
- }
- }
-}
diff --git a/parts/django/django/contrib/admin/media/js/SelectFilter2.js b/parts/django/django/contrib/admin/media/js/SelectFilter2.js
deleted file mode 100644
index 5a03447..0000000
--- a/parts/django/django/contrib/admin/media/js/SelectFilter2.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-SelectFilter2 - Turns a multiple-select box into a filter interface.
-
-Different than SelectFilter because this is coupled to the admin framework.
-
-Requires core.js, SelectBox.js and addevent.js.
-*/
-
-function findForm(node) {
- // returns the node of the form containing the given node
- if (node.tagName.toLowerCase() != 'form') {
- return findForm(node.parentNode);
- }
- return node;
-}
-
-var SelectFilter = {
- init: function(field_id, field_name, is_stacked, admin_media_prefix) {
- if (field_id.match(/__prefix__/)){
- // Don't intialize on empty forms.
- return;
- }
- var from_box = document.getElementById(field_id);
- from_box.id += '_from'; // change its ID
- from_box.className = 'filtered';
-
- // Remove <p class="info">, because it just gets in the way.
- var ps = from_box.parentNode.getElementsByTagName('p');
- for (var i=0; i<ps.length; i++) {
- from_box.parentNode.removeChild(ps[i]);
- }
-
- // <div class="selector"> or <div class="selector stacked">
- var selector_div = quickElement('div', from_box.parentNode);
- selector_div.className = is_stacked ? 'selector stacked' : 'selector';
-
- // <div class="selector-available">
- var selector_available = quickElement('div', selector_div, '');
- selector_available.className = 'selector-available';
- quickElement('h2', selector_available, interpolate(gettext('Available %s'), [field_name]));
- var filter_p = quickElement('p', selector_available, '');
- filter_p.className = 'selector-filter';
- quickElement('img', filter_p, '', 'src', admin_media_prefix + 'img/admin/selector-search.gif');
- filter_p.appendChild(document.createTextNode(' '));
- var filter_input = quickElement('input', filter_p, '', 'type', 'text');
- filter_input.id = field_id + '_input';
- selector_available.appendChild(from_box);
- var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'href', 'javascript: (function(){ SelectBox.move_all("' + field_id + '_from", "' + field_id + '_to"); })()');
- choose_all.className = 'selector-chooseall';
-
- // <ul class="selector-chooser">
- var selector_chooser = quickElement('ul', selector_div, '');
- selector_chooser.className = 'selector-chooser';
- var add_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Add'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_from","' + field_id + '_to");})()');
- add_link.className = 'selector-add';
- var remove_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Remove'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_to","' + field_id + '_from");})()');
- remove_link.className = 'selector-remove';
-
- // <div class="selector-chosen">
- var selector_chosen = quickElement('div', selector_div, '');
- selector_chosen.className = 'selector-chosen';
- quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s'), [field_name]));
- var selector_filter = quickElement('p', selector_chosen, gettext('Select your choice(s) and click '));
- selector_filter.className = 'selector-filter';
- quickElement('img', selector_filter, '', 'src', admin_media_prefix + (is_stacked ? 'img/admin/selector_stacked-add.gif':'img/admin/selector-add.gif'), 'alt', 'Add');
- var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name'));
- to_box.className = 'filtered';
- var clear_all = quickElement('a', selector_chosen, gettext('Clear all'), 'href', 'javascript: (function() { SelectBox.move_all("' + field_id + '_to", "' + field_id + '_from");})()');
- clear_all.className = 'selector-clearall';
-
- from_box.setAttribute('name', from_box.getAttribute('name') + '_old');
-
- // Set up the JavaScript event handlers for the select box filter interface
- addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); });
- addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); });
- addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); });
- addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); });
- addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); });
- SelectBox.init(field_id + '_from');
- SelectBox.init(field_id + '_to');
- // Move selected from_box options to to_box
- SelectBox.move(field_id + '_from', field_id + '_to');
- },
- filter_key_up: function(event, field_id) {
- from = document.getElementById(field_id + '_from');
- // don't submit form if user pressed Enter
- if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
- from.selectedIndex = 0;
- SelectBox.move(field_id + '_from', field_id + '_to');
- from.selectedIndex = 0;
- return false;
- }
- var temp = from.selectedIndex;
- SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value);
- from.selectedIndex = temp;
- return true;
- },
- filter_key_down: function(event, field_id) {
- from = document.getElementById(field_id + '_from');
- // right arrow -- move across
- if ((event.which && event.which == 39) || (event.keyCode && event.keyCode == 39)) {
- var old_index = from.selectedIndex;
- SelectBox.move(field_id + '_from', field_id + '_to');
- from.selectedIndex = (old_index == from.length) ? from.length - 1 : old_index;
- return false;
- }
- // down arrow -- wrap around
- if ((event.which && event.which == 40) || (event.keyCode && event.keyCode == 40)) {
- from.selectedIndex = (from.length == from.selectedIndex + 1) ? 0 : from.selectedIndex + 1;
- }
- // up arrow -- wrap around
- if ((event.which && event.which == 38) || (event.keyCode && event.keyCode == 38)) {
- from.selectedIndex = (from.selectedIndex == 0) ? from.length - 1 : from.selectedIndex - 1;
- }
- return true;
- }
-}
diff --git a/parts/django/django/contrib/admin/media/js/actions.js b/parts/django/django/contrib/admin/media/js/actions.js
deleted file mode 100644
index 94aa6db..0000000
--- a/parts/django/django/contrib/admin/media/js/actions.js
+++ /dev/null
@@ -1,139 +0,0 @@
-(function($) {
- $.fn.actions = function(opts) {
- var options = $.extend({}, $.fn.actions.defaults, opts);
- var actionCheckboxes = $(this);
- var list_editable_changed = false;
- checker = function(checked) {
- if (checked) {
- showQuestion();
- } else {
- reset();
- }
- $(actionCheckboxes).attr("checked", checked)
- .parent().parent().toggleClass(options.selectedClass, checked);
- }
- updateCounter = function() {
- var sel = $(actionCheckboxes).filter(":checked").length;
- $(options.counterContainer).html(interpolate(
- ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
- sel: sel,
- cnt: _actions_icnt
- }, true));
- $(options.allToggle).attr("checked", function() {
- if (sel == actionCheckboxes.length) {
- value = true;
- showQuestion();
- } else {
- value = false;
- clearAcross();
- }
- return value;
- });
- }
- showQuestion = function() {
- $(options.acrossClears).hide();
- $(options.acrossQuestions).show();
- $(options.allContainer).hide();
- }
- showClear = function() {
- $(options.acrossClears).show();
- $(options.acrossQuestions).hide();
- $(options.actionContainer).toggleClass(options.selectedClass);
- $(options.allContainer).show();
- $(options.counterContainer).hide();
- }
- reset = function() {
- $(options.acrossClears).hide();
- $(options.acrossQuestions).hide();
- $(options.allContainer).hide();
- $(options.counterContainer).show();
- }
- clearAcross = function() {
- reset();
- $(options.acrossInput).val(0);
- $(options.actionContainer).removeClass(options.selectedClass);
- }
- // Show counter by default
- $(options.counterContainer).show();
- // Check state of checkboxes and reinit state if needed
- $(this).filter(":checked").each(function(i) {
- $(this).parent().parent().toggleClass(options.selectedClass);
- updateCounter();
- if ($(options.acrossInput).val() == 1) {
- showClear();
- }
- });
- $(options.allToggle).show().click(function() {
- checker($(this).attr("checked"));
- updateCounter();
- });
- $("div.actions span.question a").click(function(event) {
- event.preventDefault();
- $(options.acrossInput).val(1);
- showClear();
- });
- $("div.actions span.clear a").click(function(event) {
- event.preventDefault();
- $(options.allToggle).attr("checked", false);
- clearAcross();
- checker(0);
- updateCounter();
- });
- lastChecked = null;
- $(actionCheckboxes).click(function(event) {
- if (!event) { var event = window.event; }
- var target = event.target ? event.target : event.srcElement;
- if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey == true) {
- var inrange = false;
- $(lastChecked).attr("checked", target.checked)
- .parent().parent().toggleClass(options.selectedClass, target.checked);
- $(actionCheckboxes).each(function() {
- if ($.data(this) == $.data(lastChecked) || $.data(this) == $.data(target)) {
- inrange = (inrange) ? false : true;
- }
- if (inrange) {
- $(this).attr("checked", target.checked)
- .parent().parent().toggleClass(options.selectedClass, target.checked);
- }
- });
- }
- $(target).parent().parent().toggleClass(options.selectedClass, target.checked);
- lastChecked = target;
- updateCounter();
- });
- $('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() {
- list_editable_changed = true;
- });
- $('form#changelist-form button[name="index"]').click(function(event) {
- if (list_editable_changed) {
- return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
- }
- });
- $('form#changelist-form input[name="_save"]').click(function(event) {
- var action_changed = false;
- $('div.actions select option:selected').each(function() {
- if ($(this).val()) {
- action_changed = true;
- }
- });
- if (action_changed) {
- if (list_editable_changed) {
- return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action."));
- } else {
- return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."));
- }
- }
- });
- }
- /* Setup plugin defaults */
- $.fn.actions.defaults = {
- actionContainer: "div.actions",
- counterContainer: "span.action-counter",
- allContainer: "div.actions span.all",
- acrossInput: "div.actions input.select-across",
- acrossQuestions: "div.actions span.question",
- acrossClears: "div.actions span.clear",
- allToggle: "#action-toggle",
- selectedClass: "selected"
- }
-})(django.jQuery);
diff --git a/parts/django/django/contrib/admin/media/js/actions.min.js b/parts/django/django/contrib/admin/media/js/actions.min.js
deleted file mode 100644
index 21f00cd..0000000
--- a/parts/django/django/contrib/admin/media/js/actions.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-(function(a){a.fn.actions=function(h){var b=a.extend({},a.fn.actions.defaults,h),e=a(this),f=false;checker=function(c){c?showQuestion():reset();a(e).attr("checked",c).parent().parent().toggleClass(b.selectedClass,c)};updateCounter=function(){var c=a(e).filter(":checked").length;a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:_actions_icnt},true));a(b.allToggle).attr("checked",function(){if(c==e.length){value=true;showQuestion()}else{value=
-false;clearAcross()}return value})};showQuestion=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()};showClear=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()};reset=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()};clearAcross=function(){reset();a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)};
-a(b.counterContainer).show();a(this).filter(":checked").each(function(){a(this).parent().parent().toggleClass(b.selectedClass);updateCounter();a(b.acrossInput).val()==1&&showClear()});a(b.allToggle).show().click(function(){checker(a(this).attr("checked"));updateCounter()});a("div.actions span.question a").click(function(c){c.preventDefault();a(b.acrossInput).val(1);showClear()});a("div.actions span.clear a").click(function(c){c.preventDefault();a(b.allToggle).attr("checked",false);clearAcross();checker(0);
-updateCounter()});lastChecked=null;a(e).click(function(c){if(!c)c=window.event;var d=c.target?c.target:c.srcElement;if(lastChecked&&a.data(lastChecked)!=a.data(d)&&c.shiftKey==true){var g=false;a(lastChecked).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(e).each(function(){if(a.data(this)==a.data(lastChecked)||a.data(this)==a.data(d))g=g?false:true;g&&a(this).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,
-d.checked);lastChecked=d;updateCounter()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){f=true});a('form#changelist-form button[name="index"]').click(function(){if(f)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').click(function(){var c=false;a("div.actions select option:selected").each(function(){if(a(this).val())c=
-true});if(c)return f?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",
-acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"}})(django.jQuery);
diff --git a/parts/django/django/contrib/admin/media/js/admin/DateTimeShortcuts.js b/parts/django/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
deleted file mode 100644
index 2e43a68..0000000
--- a/parts/django/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
+++ /dev/null
@@ -1,274 +0,0 @@
-// Inserts shortcut buttons after all of the following:
-// <input type="text" class="vDateField">
-// <input type="text" class="vTimeField">
-
-var DateTimeShortcuts = {
- calendars: [],
- calendarInputs: [],
- clockInputs: [],
- calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
- calendarDivName2: 'calendarin', // name of <div> that contains calendar
- calendarLinkName: 'calendarlink',// name of the link that is used to toggle
- clockDivName: 'clockbox', // name of clock <div> that gets toggled
- clockLinkName: 'clocklink', // name of the link that is used to toggle
- shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
- admin_media_prefix: '',
- init: function() {
- // Get admin_media_prefix by grabbing it off the window object. It's
- // set in the admin/base.html template, so if it's not there, someone's
- // overridden the template. In that case, we'll set a clearly-invalid
- // value in the hopes that someone will examine HTTP requests and see it.
- if (window.__admin_media_prefix__ != undefined) {
- DateTimeShortcuts.admin_media_prefix = window.__admin_media_prefix__;
- } else {
- DateTimeShortcuts.admin_media_prefix = '/missing-admin-media-prefix/';
- }
-
- var inputs = document.getElementsByTagName('input');
- for (i=0; i<inputs.length; i++) {
- var inp = inputs[i];
- if (inp.getAttribute('type') == 'text' && inp.className.match(/vTimeField/)) {
- DateTimeShortcuts.addClock(inp);
- }
- else if (inp.getAttribute('type') == 'text' && inp.className.match(/vDateField/)) {
- DateTimeShortcuts.addCalendar(inp);
- }
- }
- },
- // Add clock widget to a given field
- addClock: function(inp) {
- var num = DateTimeShortcuts.clockInputs.length;
- DateTimeShortcuts.clockInputs[num] = inp;
-
- // Shortcut links (clock icon and "Now" link)
- var shortcuts_span = document.createElement('span');
- shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
- inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
- var now_link = document.createElement('a');
- now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + get_format('TIME_INPUT_FORMATS')[0] + "'));");
- now_link.appendChild(document.createTextNode(gettext('Now')));
- var clock_link = document.createElement('a');
- clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');');
- clock_link.id = DateTimeShortcuts.clockLinkName + num;
- quickElement('img', clock_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_clock.gif', 'alt', gettext('Clock'));
- shortcuts_span.appendChild(document.createTextNode('\240'));
- shortcuts_span.appendChild(now_link);
- shortcuts_span.appendChild(document.createTextNode('\240|\240'));
- shortcuts_span.appendChild(clock_link);
-
- // Create clock link div
- //
- // Markup looks like:
- // <div id="clockbox1" class="clockbox module">
- // <h2>Choose a time</h2>
- // <ul class="timelist">
- // <li><a href="#">Now</a></li>
- // <li><a href="#">Midnight</a></li>
- // <li><a href="#">6 a.m.</a></li>
- // <li><a href="#">Noon</a></li>
- // </ul>
- // <p class="calendar-cancel"><a href="#">Cancel</a></p>
- // </div>
-
- var clock_box = document.createElement('div');
- clock_box.style.display = 'none';
- clock_box.style.position = 'absolute';
- clock_box.className = 'clockbox module';
- clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num);
- document.body.appendChild(clock_box);
- addEvent(clock_box, 'click', DateTimeShortcuts.cancelEventPropagation);
-
- quickElement('h2', clock_box, gettext('Choose a time'));
- time_list = quickElement('ul', clock_box, '');
- time_list.className = 'timelist';
- time_format = get_format('TIME_INPUT_FORMATS')[0];
- quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + time_format + "'));");
- quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,0,0,0,0).strftime('" + time_format + "'));");
- quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,6,0,0,0).strftime('" + time_format + "'));");
- quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,12,0,0,0).strftime('" + time_format + "'));");
-
- cancel_p = quickElement('p', clock_box, '');
- cancel_p.className = 'calendar-cancel';
- quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');');
- },
- openClock: function(num) {
- var clock_box = document.getElementById(DateTimeShortcuts.clockDivName+num)
- var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName+num)
-
- // Recalculate the clockbox position
- // is it left-to-right or right-to-left layout ?
- if (getStyle(document.body,'direction')!='rtl') {
- clock_box.style.left = findPosX(clock_link) + 17 + 'px';
- }
- else {
- // since style's width is in em, it'd be tough to calculate
- // px value of it. let's use an estimated px for now
- // TODO: IE returns wrong value for findPosX when in rtl mode
- // (it returns as it was left aligned), needs to be fixed.
- clock_box.style.left = findPosX(clock_link) - 110 + 'px';
- }
- clock_box.style.top = findPosY(clock_link) - 30 + 'px';
-
- // Show the clock box
- clock_box.style.display = 'block';
- addEvent(window.document, 'click', function() { DateTimeShortcuts.dismissClock(num); return true; });
- },
- dismissClock: function(num) {
- document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none';
- window.document.onclick = null;
- },
- handleClockQuicklink: function(num, val) {
- DateTimeShortcuts.clockInputs[num].value = val;
- DateTimeShortcuts.clockInputs[num].focus();
- DateTimeShortcuts.dismissClock(num);
- },
- // Add calendar widget to a given field.
- addCalendar: function(inp) {
- var num = DateTimeShortcuts.calendars.length;
-
- DateTimeShortcuts.calendarInputs[num] = inp;
-
- // Shortcut links (calendar icon and "Today" link)
- var shortcuts_span = document.createElement('span');
- shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
- inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
- var today_link = document.createElement('a');
- today_link.setAttribute('href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
- today_link.appendChild(document.createTextNode(gettext('Today')));
- var cal_link = document.createElement('a');
- cal_link.setAttribute('href', 'javascript:DateTimeShortcuts.openCalendar(' + num + ');');
- cal_link.id = DateTimeShortcuts.calendarLinkName + num;
- quickElement('img', cal_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_calendar.gif', 'alt', gettext('Calendar'));
- shortcuts_span.appendChild(document.createTextNode('\240'));
- shortcuts_span.appendChild(today_link);
- shortcuts_span.appendChild(document.createTextNode('\240|\240'));
- shortcuts_span.appendChild(cal_link);
-
- // Create calendarbox div.
- //
- // Markup looks like:
- //
- // <div id="calendarbox3" class="calendarbox module">
- // <h2>
- // <a href="#" class="link-previous">&lsaquo;</a>
- // <a href="#" class="link-next">&rsaquo;</a> February 2003
- // </h2>
- // <div class="calendar" id="calendarin3">
- // <!-- (cal) -->
- // </div>
- // <div class="calendar-shortcuts">
- // <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a>
- // </div>
- // <p class="calendar-cancel"><a href="#">Cancel</a></p>
- // </div>
- var cal_box = document.createElement('div');
- cal_box.style.display = 'none';
- cal_box.style.position = 'absolute';
- cal_box.className = 'calendarbox module';
- cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num);
- document.body.appendChild(cal_box);
- addEvent(cal_box, 'click', DateTimeShortcuts.cancelEventPropagation);
-
- // next-prev links
- var cal_nav = quickElement('div', cal_box, '');
- var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');');
- cal_nav_prev.className = 'calendarnav-previous';
- var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');');
- cal_nav_next.className = 'calendarnav-next';
-
- // main box
- var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num);
- cal_main.className = 'calendar';
- DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num));
- DateTimeShortcuts.calendars[num].drawCurrent();
-
- // calendar shortcuts
- var shortcuts = quickElement('div', cal_box, '');
- shortcuts.className = 'calendar-shortcuts';
- quickElement('a', shortcuts, gettext('Yesterday'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', -1);');
- shortcuts.appendChild(document.createTextNode('\240|\240'));
- quickElement('a', shortcuts, gettext('Today'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
- shortcuts.appendChild(document.createTextNode('\240|\240'));
- quickElement('a', shortcuts, gettext('Tomorrow'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', +1);');
-
- // cancel bar
- var cancel_p = quickElement('p', cal_box, '');
- cancel_p.className = 'calendar-cancel';
- quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');');
- },
- openCalendar: function(num) {
- var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1+num)
- var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName+num)
- var inp = DateTimeShortcuts.calendarInputs[num];
-
- // Determine if the current value in the input has a valid date.
- // If so, draw the calendar with that date's year and month.
- if (inp.value) {
- var date_parts = inp.value.split('-');
- var year = date_parts[0];
- var month = parseFloat(date_parts[1]);
- if (year.match(/\d\d\d\d/) && month >= 1 && month <= 12) {
- DateTimeShortcuts.calendars[num].drawDate(month, year);
- }
- }
-
- // Recalculate the clockbox position
- // is it left-to-right or right-to-left layout ?
- if (getStyle(document.body,'direction')!='rtl') {
- cal_box.style.left = findPosX(cal_link) + 17 + 'px';
- }
- else {
- // since style's width is in em, it'd be tough to calculate
- // px value of it. let's use an estimated px for now
- // TODO: IE returns wrong value for findPosX when in rtl mode
- // (it returns as it was left aligned), needs to be fixed.
- cal_box.style.left = findPosX(cal_link) - 180 + 'px';
- }
- cal_box.style.top = findPosY(cal_link) - 75 + 'px';
-
- cal_box.style.display = 'block';
- addEvent(window.document, 'click', function() { DateTimeShortcuts.dismissCalendar(num); return true; });
- },
- dismissCalendar: function(num) {
- document.getElementById(DateTimeShortcuts.calendarDivName1+num).style.display = 'none';
- window.document.onclick = null;
- },
- drawPrev: function(num) {
- DateTimeShortcuts.calendars[num].drawPreviousMonth();
- },
- drawNext: function(num) {
- DateTimeShortcuts.calendars[num].drawNextMonth();
- },
- handleCalendarCallback: function(num) {
- format = get_format('DATE_INPUT_FORMATS')[0];
- // the format needs to be escaped a little
- format = format.replace('\\', '\\\\');
- format = format.replace('\r', '\\r');
- format = format.replace('\n', '\\n');
- format = format.replace('\t', '\\t');
- format = format.replace("'", "\\'");
- return ["function(y, m, d) { DateTimeShortcuts.calendarInputs[",
- num,
- "].value = new Date(y, m-1, d).strftime('",
- format,
- "');DateTimeShortcuts.calendarInputs[",
- num,
- "].focus();document.getElementById(DateTimeShortcuts.calendarDivName1+",
- num,
- ").style.display='none';}"].join('');
- },
- handleCalendarQuickLink: function(num, offset) {
- var d = new Date();
- d.setDate(d.getDate() + offset)
- DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]);
- DateTimeShortcuts.calendarInputs[num].focus();
- DateTimeShortcuts.dismissCalendar(num);
- },
- cancelEventPropagation: function(e) {
- if (!e) e = window.event;
- e.cancelBubble = true;
- if (e.stopPropagation) e.stopPropagation();
- }
-}
-
-addEvent(window, 'load', DateTimeShortcuts.init);
diff --git a/parts/django/django/contrib/admin/media/js/admin/RelatedObjectLookups.js b/parts/django/django/contrib/admin/media/js/admin/RelatedObjectLookups.js
deleted file mode 100644
index 1bc78f8..0000000
--- a/parts/django/django/contrib/admin/media/js/admin/RelatedObjectLookups.js
+++ /dev/null
@@ -1,96 +0,0 @@
-// Handles related-objects functionality: lookup link for raw_id_fields
-// and Add Another links.
-
-function html_unescape(text) {
- // Unescape a string that was escaped using django.utils.html.escape.
- text = text.replace(/&lt;/g, '<');
- text = text.replace(/&gt;/g, '>');
- text = text.replace(/&quot;/g, '"');
- text = text.replace(/&#39;/g, "'");
- text = text.replace(/&amp;/g, '&');
- return text;
-}
-
-// IE doesn't accept periods or dashes in the window name, but the element IDs
-// we use to generate popup window names may contain them, therefore we map them
-// to allowed characters in a reversible way so that we can locate the correct
-// element when the popup window is dismissed.
-function id_to_windowname(text) {
- text = text.replace(/\./g, '__dot__');
- text = text.replace(/\-/g, '__dash__');
- return text;
-}
-
-function windowname_to_id(text) {
- text = text.replace(/__dot__/g, '.');
- text = text.replace(/__dash__/g, '-');
- return text;
-}
-
-function showRelatedObjectLookupPopup(triggeringLink) {
- var name = triggeringLink.id.replace(/^lookup_/, '');
- name = id_to_windowname(name);
- var href;
- if (triggeringLink.href.search(/\?/) >= 0) {
- href = triggeringLink.href + '&pop=1';
- } else {
- href = triggeringLink.href + '?pop=1';
- }
- var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
- win.focus();
- return false;
-}
-
-function dismissRelatedLookupPopup(win, chosenId) {
- var name = windowname_to_id(win.name);
- var elem = document.getElementById(name);
- if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
- elem.value += ',' + chosenId;
- } else {
- document.getElementById(name).value = chosenId;
- }
- win.close();
-}
-
-function showAddAnotherPopup(triggeringLink) {
- var name = triggeringLink.id.replace(/^add_/, '');
- name = id_to_windowname(name);
- href = triggeringLink.href
- if (href.indexOf('?') == -1) {
- href += '?_popup=1';
- } else {
- href += '&_popup=1';
- }
- var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
- win.focus();
- return false;
-}
-
-function dismissAddAnotherPopup(win, newId, newRepr) {
- // newId and newRepr are expected to have previously been escaped by
- // django.utils.html.escape.
- newId = html_unescape(newId);
- newRepr = html_unescape(newRepr);
- var name = windowname_to_id(win.name);
- var elem = document.getElementById(name);
- if (elem) {
- if (elem.nodeName == 'SELECT') {
- var o = new Option(newRepr, newId);
- elem.options[elem.options.length] = o;
- o.selected = true;
- } else if (elem.nodeName == 'INPUT') {
- if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
- elem.value += ',' + newId;
- } else {
- elem.value = newId;
- }
- }
- } else {
- var toId = name + "_to";
- elem = document.getElementById(toId);
- var o = new Option(newRepr, newId);
- SelectBox.add_to_cache(toId, o);
- SelectBox.redisplay(toId);
- }
- win.close();
-}
diff --git a/parts/django/django/contrib/admin/media/js/admin/ordering.js b/parts/django/django/contrib/admin/media/js/admin/ordering.js
deleted file mode 100644
index 53c42f3..0000000
--- a/parts/django/django/contrib/admin/media/js/admin/ordering.js
+++ /dev/null
@@ -1,137 +0,0 @@
-addEvent(window, 'load', reorder_init);
-
-var lis;
-var top = 0;
-var left = 0;
-var height = 30;
-
-function reorder_init() {
- lis = document.getElementsBySelector('ul#orderthese li');
- var input = document.getElementsBySelector('input[name=order_]')[0];
- setOrder(input.value.split(','));
- input.disabled = true;
- draw();
- // Now initialise the dragging behaviour
- var limit = (lis.length - 1) * height;
- for (var i = 0; i < lis.length; i++) {
- var li = lis[i];
- var img = document.getElementById('handle'+li.id);
- li.style.zIndex = 1;
- Drag.init(img, li, left + 10, left + 10, top + 10, top + 10 + limit);
- li.onDragStart = startDrag;
- li.onDragEnd = endDrag;
- img.style.cursor = 'move';
- }
-}
-
-function submitOrderForm() {
- var inputOrder = document.getElementsBySelector('input[name=order_]')[0];
- inputOrder.value = getOrder();
- inputOrder.disabled=false;
-}
-
-function startDrag() {
- this.style.zIndex = '10';
- this.className = 'dragging';
-}
-
-function endDrag(x, y) {
- this.style.zIndex = '1';
- this.className = '';
- // Work out how far along it has been dropped, using x co-ordinate
- var oldIndex = this.index;
- var newIndex = Math.round((y - 10 - top) / height);
- // 'Snap' to the correct position
- this.style.top = (10 + top + newIndex * height) + 'px';
- this.index = newIndex;
- moveItem(oldIndex, newIndex);
-}
-
-function moveItem(oldIndex, newIndex) {
- // Swaps two items, adjusts the index and left co-ord for all others
- if (oldIndex == newIndex) {
- return; // Nothing to swap;
- }
- var direction, lo, hi;
- if (newIndex > oldIndex) {
- lo = oldIndex;
- hi = newIndex;
- direction = -1;
- } else {
- direction = 1;
- hi = oldIndex;
- lo = newIndex;
- }
- var lis2 = new Array(); // We will build the new order in this array
- for (var i = 0; i < lis.length; i++) {
- if (i < lo || i > hi) {
- // Position of items not between the indexes is unaffected
- lis2[i] = lis[i];
- continue;
- } else if (i == newIndex) {
- lis2[i] = lis[oldIndex];
- continue;
- } else {
- // Item is between the two indexes - move it along 1
- lis2[i] = lis[i - direction];
- }
- }
- // Re-index everything
- reIndex(lis2);
- lis = lis2;
- draw();
-// document.getElementById('hiddenOrder').value = getOrder();
- document.getElementsBySelector('input[name=order_]')[0].value = getOrder();
-}
-
-function reIndex(lis) {
- for (var i = 0; i < lis.length; i++) {
- lis[i].index = i;
- }
-}
-
-function draw() {
- for (var i = 0; i < lis.length; i++) {
- var li = lis[i];
- li.index = i;
- li.style.position = 'absolute';
- li.style.left = (10 + left) + 'px';
- li.style.top = (10 + top + (i * height)) + 'px';
- }
-}
-
-function getOrder() {
- var order = new Array(lis.length);
- for (var i = 0; i < lis.length; i++) {
- order[i] = lis[i].id.substring(1, 100);
- }
- return order.join(',');
-}
-
-function setOrder(id_list) {
- /* Set the current order to match the lsit of IDs */
- var temp_lis = new Array();
- for (var i = 0; i < id_list.length; i++) {
- var id = 'p' + id_list[i];
- temp_lis[temp_lis.length] = document.getElementById(id);
- }
- reIndex(temp_lis);
- lis = temp_lis;
- draw();
-}
-
-function addEvent(elm, evType, fn, useCapture)
-// addEvent and removeEvent
-// cross-browser event handling for IE5+, NS6 and Mozilla
-// By Scott Andrew
-{
- if (elm.addEventListener){
- elm.addEventListener(evType, fn, useCapture);
- return true;
- } else if (elm.attachEvent){
- var r = elm.attachEvent("on"+evType, fn);
- return r;
- } else {
- elm['on'+evType] = fn;
- }
-}
diff --git a/parts/django/django/contrib/admin/media/js/calendar.js b/parts/django/django/contrib/admin/media/js/calendar.js
deleted file mode 100644
index c95a95d..0000000
--- a/parts/django/django/contrib/admin/media/js/calendar.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-calendar.js - Calendar functions by Adrian Holovaty
-*/
-
-function removeChildren(a) { // "a" is reference to an object
- while (a.hasChildNodes()) a.removeChild(a.lastChild);
-}
-
-// quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
-function quickElement() {
- var obj = document.createElement(arguments[0]);
- if (arguments[2] != '' && arguments[2] != null) {
- var textNode = document.createTextNode(arguments[2]);
- obj.appendChild(textNode);
- }
- var len = arguments.length;
- for (var i = 3; i < len; i += 2) {
- obj.setAttribute(arguments[i], arguments[i+1]);
- }
- arguments[1].appendChild(obj);
- return obj;
-}
-
-// CalendarNamespace -- Provides a collection of HTML calendar-related helper functions
-var CalendarNamespace = {
- monthsOfYear: gettext('January February March April May June July August September October November December').split(' '),
- daysOfWeek: gettext('S M T W T F S').split(' '),
- firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')),
- isLeapYear: function(year) {
- return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0));
- },
- getDaysInMonth: function(month,year) {
- var days;
- if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) {
- days = 31;
- }
- else if (month==4 || month==6 || month==9 || month==11) {
- days = 30;
- }
- else if (month==2 && CalendarNamespace.isLeapYear(year)) {
- days = 29;
- }
- else {
- days = 28;
- }
- return days;
- },
- draw: function(month, year, div_id, callback) { // month = 1-12, year = 1-9999
- var today = new Date();
- var todayDay = today.getDate();
- var todayMonth = today.getMonth()+1;
- var todayYear = today.getFullYear();
- var todayClass = '';
-
- month = parseInt(month);
- year = parseInt(year);
- var calDiv = document.getElementById(div_id);
- removeChildren(calDiv);
- var calTable = document.createElement('table');
- quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month-1] + ' ' + year);
- var tableBody = quickElement('tbody', calTable);
-
- // Draw days-of-week header
- var tableRow = quickElement('tr', tableBody);
- for (var i = 0; i < 7; i++) {
- quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
- }
-
- var startingPos = new Date(year, month-1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
- var days = CalendarNamespace.getDaysInMonth(month, year);
-
- // Draw blanks before first of month
- tableRow = quickElement('tr', tableBody);
- for (var i = 0; i < startingPos; i++) {
- var _cell = quickElement('td', tableRow, ' ');
- _cell.style.backgroundColor = '#f3f3f3';
- }
-
- // Draw days of month
- var currentDay = 1;
- for (var i = startingPos; currentDay <= days; i++) {
- if (i%7 == 0 && currentDay != 1) {
- tableRow = quickElement('tr', tableBody);
- }
- if ((currentDay==todayDay) && (month==todayMonth) && (year==todayYear)) {
- todayClass='today';
- } else {
- todayClass='';
- }
- var cell = quickElement('td', tableRow, '', 'class', todayClass);
-
- quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '('+year+','+month+','+currentDay+'));');
- currentDay++;
- }
-
- // Draw blanks after end of month (optional, but makes for valid code)
- while (tableRow.childNodes.length < 7) {
- var _cell = quickElement('td', tableRow, ' ');
- _cell.style.backgroundColor = '#f3f3f3';
- }
-
- calDiv.appendChild(calTable);
- }
-}
-
-// Calendar -- A calendar instance
-function Calendar(div_id, callback) {
- // div_id (string) is the ID of the element in which the calendar will
- // be displayed
- // callback (string) is the name of a JavaScript function that will be
- // called with the parameters (year, month, day) when a day in the
- // calendar is clicked
- this.div_id = div_id;
- this.callback = callback;
- this.today = new Date();
- this.currentMonth = this.today.getMonth() + 1;
- this.currentYear = this.today.getFullYear();
-}
-Calendar.prototype = {
- drawCurrent: function() {
- CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback);
- },
- drawDate: function(month, year) {
- this.currentMonth = month;
- this.currentYear = year;
- this.drawCurrent();
- },
- drawPreviousMonth: function() {
- if (this.currentMonth == 1) {
- this.currentMonth = 12;
- this.currentYear--;
- }
- else {
- this.currentMonth--;
- }
- this.drawCurrent();
- },
- drawNextMonth: function() {
- if (this.currentMonth == 12) {
- this.currentMonth = 1;
- this.currentYear++;
- }
- else {
- this.currentMonth++;
- }
- this.drawCurrent();
- },
- drawPreviousYear: function() {
- this.currentYear--;
- this.drawCurrent();
- },
- drawNextYear: function() {
- this.currentYear++;
- this.drawCurrent();
- }
-}
diff --git a/parts/django/django/contrib/admin/media/js/collapse.js b/parts/django/django/contrib/admin/media/js/collapse.js
deleted file mode 100644
index 0a1e2d8..0000000
--- a/parts/django/django/contrib/admin/media/js/collapse.js
+++ /dev/null
@@ -1,27 +0,0 @@
-(function($) {
- $(document).ready(function() {
- // Add anchor tag for Show/Hide link
- $("fieldset.collapse").each(function(i, elem) {
- // Don't hide if fields in this fieldset have errors
- if ( $(elem).find("div.errors").length == 0 ) {
- $(elem).addClass("collapsed");
- $(elem).find("h2").first().append(' (<a id="fieldsetcollapser' +
- i +'" class="collapse-toggle" href="#">' + gettext("Show") +
- '</a>)');
- }
- });
- // Add toggle to anchor tag
- $("fieldset.collapse a.collapse-toggle").toggle(
- function() { // Show
- $(this).text(gettext("Hide"));
- $(this).closest("fieldset").removeClass("collapsed");
- return false;
- },
- function() { // Hide
- $(this).text(gettext("Show"));
- $(this).closest("fieldset").addClass("collapsed");
- return false;
- }
- );
- });
-})(django.jQuery);
diff --git a/parts/django/django/contrib/admin/media/js/collapse.min.js b/parts/django/django/contrib/admin/media/js/collapse.min.js
deleted file mode 100644
index 428984e..0000000
--- a/parts/django/django/contrib/admin/media/js/collapse.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(c,b){if(a(b).find("div.errors").length==0){a(b).addClass("collapsed");a(b).find("h2").first().append(' (<a id="fieldsetcollapser'+c+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")}});a("fieldset.collapse a.collapse-toggle").toggle(function(){a(this).text(gettext("Hide"));a(this).closest("fieldset").removeClass("collapsed");return false},function(){a(this).text(gettext("Show"));a(this).closest("fieldset").addClass("collapsed");
-return false})})})(django.jQuery);
diff --git a/parts/django/django/contrib/admin/media/js/compress.py b/parts/django/django/contrib/admin/media/js/compress.py
deleted file mode 100644
index 8d2caa2..0000000
--- a/parts/django/django/contrib/admin/media/js/compress.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python
-import os
-import optparse
-import subprocess
-import sys
-
-here = os.path.dirname(__file__)
-
-def main():
- usage = "usage: %prog [file1..fileN]"
- description = """With no file paths given this script will automatically
-compress all jQuery-based files of the admin app. Requires the Google Closure
-Compiler library and Java version 6 or later."""
- parser = optparse.OptionParser(usage, description=description)
- parser.add_option("-c", dest="compiler", default="~/bin/compiler.jar",
- help="path to Closure Compiler jar file")
- parser.add_option("-v", "--verbose",
- action="store_true", dest="verbose")
- parser.add_option("-q", "--quiet",
- action="store_false", dest="verbose")
- (options, args) = parser.parse_args()
-
- compiler = os.path.expanduser(options.compiler)
- if not os.path.exists(compiler):
- sys.exit("Google Closure compiler jar file %s not found. Please use the -c option to specify the path." % compiler)
-
- if not args:
- if options.verbose:
- sys.stdout.write("No filenames given; defaulting to admin scripts\n")
- args = [os.path.join(here, f) for f in [
- "actions.js", "collapse.js", "inlines.js", "prepopulate.js"]]
-
- for arg in args:
- if not arg.endswith(".js"):
- arg = arg + ".js"
- to_compress = os.path.expanduser(arg)
- if os.path.exists(to_compress):
- to_compress_min = "%s.min.js" % "".join(arg.rsplit(".js"))
- cmd = "java -jar %s --js %s --js_output_file %s" % (compiler, to_compress, to_compress_min)
- if options.verbose:
- sys.stdout.write("Running: %s\n" % cmd)
- subprocess.call(cmd.split())
- else:
- sys.stdout.write("File %s not found. Sure it exists?\n" % to_compress)
-
-if __name__ == '__main__':
- main()
diff --git a/parts/django/django/contrib/admin/media/js/core.js b/parts/django/django/contrib/admin/media/js/core.js
deleted file mode 100644
index 3ca8ad0..0000000
--- a/parts/django/django/contrib/admin/media/js/core.js
+++ /dev/null
@@ -1,221 +0,0 @@
-// Core javascript helper functions
-
-// basic browser identification & version
-var isOpera = (navigator.userAgent.indexOf("Opera")>=0) && parseFloat(navigator.appVersion);
-var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]);
-
-// Cross-browser event handlers.
-function addEvent(obj, evType, fn) {
- if (obj.addEventListener) {
- obj.addEventListener(evType, fn, false);
- return true;
- } else if (obj.attachEvent) {
- var r = obj.attachEvent("on" + evType, fn);
- return r;
- } else {
- return false;
- }
-}
-
-function removeEvent(obj, evType, fn) {
- if (obj.removeEventListener) {
- obj.removeEventListener(evType, fn, false);
- return true;
- } else if (obj.detachEvent) {
- obj.detachEvent("on" + evType, fn);
- return true;
- } else {
- return false;
- }
-}
-
-// quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
-function quickElement() {
- var obj = document.createElement(arguments[0]);
- if (arguments[2] != '' && arguments[2] != null) {
- var textNode = document.createTextNode(arguments[2]);
- obj.appendChild(textNode);
- }
- var len = arguments.length;
- for (var i = 3; i < len; i += 2) {
- obj.setAttribute(arguments[i], arguments[i+1]);
- }
- arguments[1].appendChild(obj);
- return obj;
-}
-
-// ----------------------------------------------------------------------------
-// Cross-browser xmlhttp object
-// from http://jibbering.com/2002/4/httprequest.html
-// ----------------------------------------------------------------------------
-var xmlhttp;
-/*@cc_on @*/
-/*@if (@_jscript_version >= 5)
- try {
- xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- try {
- xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
- } catch (E) {
- xmlhttp = false;
- }
- }
-@else
- xmlhttp = false;
-@end @*/
-if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
- xmlhttp = new XMLHttpRequest();
-}
-
-// ----------------------------------------------------------------------------
-// Find-position functions by PPK
-// See http://www.quirksmode.org/js/findpos.html
-// ----------------------------------------------------------------------------
-function findPosX(obj) {
- var curleft = 0;
- if (obj.offsetParent) {
- while (obj.offsetParent) {
- curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft);
- obj = obj.offsetParent;
- }
- // IE offsetParent does not include the top-level
- if (isIE && obj.parentElement){
- curleft += obj.offsetLeft - obj.scrollLeft;
- }
- } else if (obj.x) {
- curleft += obj.x;
- }
- return curleft;
-}
-
-function findPosY(obj) {
- var curtop = 0;
- if (obj.offsetParent) {
- while (obj.offsetParent) {
- curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop);
- obj = obj.offsetParent;
- }
- // IE offsetParent does not include the top-level
- if (isIE && obj.parentElement){
- curtop += obj.offsetTop - obj.scrollTop;
- }
- } else if (obj.y) {
- curtop += obj.y;
- }
- return curtop;
-}
-
-//-----------------------------------------------------------------------------
-// Date object extensions
-// ----------------------------------------------------------------------------
-Date.prototype.getCorrectYear = function() {
- // Date.getYear() is unreliable --
- // see http://www.quirksmode.org/js/introdate.html#year
- var y = this.getYear() % 100;
- return (y < 38) ? y + 2000 : y + 1900;
-}
-
-Date.prototype.getTwelveHours = function() {
- hours = this.getHours();
- if (hours == 0) {
- return 12;
- }
- else {
- return hours <= 12 ? hours : hours-12
- }
-}
-
-Date.prototype.getTwoDigitMonth = function() {
- return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1);
-}
-
-Date.prototype.getTwoDigitDate = function() {
- return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
-}
-
-Date.prototype.getTwoDigitTwelveHour = function() {
- return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours();
-}
-
-Date.prototype.getTwoDigitHour = function() {
- return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
-}
-
-Date.prototype.getTwoDigitMinute = function() {
- return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
-}
-
-Date.prototype.getTwoDigitSecond = function() {
- return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
-}
-
-Date.prototype.getISODate = function() {
- return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate();
-}
-
-Date.prototype.getHourMinute = function() {
- return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
-}
-
-Date.prototype.getHourMinuteSecond = function() {
- return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
-}
-
-Date.prototype.strftime = function(format) {
- var fields = {
- c: this.toString(),
- d: this.getTwoDigitDate(),
- H: this.getTwoDigitHour(),
- I: this.getTwoDigitTwelveHour(),
- m: this.getTwoDigitMonth(),
- M: this.getTwoDigitMinute(),
- p: (this.getHours() >= 12) ? 'PM' : 'AM',
- S: this.getTwoDigitSecond(),
- w: '0' + this.getDay(),
- x: this.toLocaleDateString(),
- X: this.toLocaleTimeString(),
- y: ('' + this.getFullYear()).substr(2, 4),
- Y: '' + this.getFullYear(),
- '%' : '%'
- };
- var result = '', i = 0;
- while (i < format.length) {
- if (format.charAt(i) === '%') {
- result = result + fields[format.charAt(i + 1)];
- ++i;
- }
- else {
- result = result + format.charAt(i);
- }
- ++i;
- }
- return result;
-}
-
-// ----------------------------------------------------------------------------
-// String object extensions
-// ----------------------------------------------------------------------------
-String.prototype.pad_left = function(pad_length, pad_string) {
- var new_string = this;
- for (var i = 0; new_string.length < pad_length; i++) {
- new_string = pad_string + new_string;
- }
- return new_string;
-}
-
-// ----------------------------------------------------------------------------
-// Get the computed style for and element
-// ----------------------------------------------------------------------------
-function getStyle(oElm, strCssRule){
- var strValue = "";
- if(document.defaultView && document.defaultView.getComputedStyle){
- strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
- }
- else if(oElm.currentStyle){
- strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
- return p1.toUpperCase();
- });
- strValue = oElm.currentStyle[strCssRule];
- }
- return strValue;
-}
diff --git a/parts/django/django/contrib/admin/media/js/dateparse.js b/parts/django/django/contrib/admin/media/js/dateparse.js
deleted file mode 100644
index e1c870e..0000000
--- a/parts/django/django/contrib/admin/media/js/dateparse.js
+++ /dev/null
@@ -1,233 +0,0 @@
-/* 'Magic' date parsing, by Simon Willison (6th October 2003)
- http://simon.incutio.com/archive/2003/10/06/betterDateInput
- Adapted for 6newslawrence.com, 28th January 2004
-*/
-
-/* Finds the index of the first occurence of item in the array, or -1 if not found */
-if (typeof Array.prototype.indexOf == 'undefined') {
- Array.prototype.indexOf = function(item) {
- var len = this.length;
- for (var i = 0; i < len; i++) {
- if (this[i] == item) {
- return i;
- }
- }
- return -1;
- };
-}
-/* Returns an array of items judged 'true' by the passed in test function */
-if (typeof Array.prototype.filter == 'undefined') {
- Array.prototype.filter = function(test) {
- var matches = [];
- var len = this.length;
- for (var i = 0; i < len; i++) {
- if (test(this[i])) {
- matches[matches.length] = this[i];
- }
- }
- return matches;
- };
-}
-
-var monthNames = gettext("January February March April May June July August September October November December").split(" ");
-var weekdayNames = gettext("Sunday Monday Tuesday Wednesday Thursday Friday Saturday").split(" ");
-
-/* Takes a string, returns the index of the month matching that string, throws
- an error if 0 or more than 1 matches
-*/
-function parseMonth(month) {
- var matches = monthNames.filter(function(item) {
- return new RegExp("^" + month, "i").test(item);
- });
- if (matches.length == 0) {
- throw new Error("Invalid month string");
- }
- if (matches.length > 1) {
- throw new Error("Ambiguous month");
- }
- return monthNames.indexOf(matches[0]);
-}
-/* Same as parseMonth but for days of the week */
-function parseWeekday(weekday) {
- var matches = weekdayNames.filter(function(item) {
- return new RegExp("^" + weekday, "i").test(item);
- });
- if (matches.length == 0) {
- throw new Error("Invalid day string");
- }
- if (matches.length > 1) {
- throw new Error("Ambiguous weekday");
- }
- return weekdayNames.indexOf(matches[0]);
-}
-
-/* Array of objects, each has 're', a regular expression and 'handler', a
- function for creating a date from something that matches the regular
- expression. Handlers may throw errors if string is unparseable.
-*/
-var dateParsePatterns = [
- // Today
- { re: /^tod/i,
- handler: function() {
- return new Date();
- }
- },
- // Tomorrow
- { re: /^tom/i,
- handler: function() {
- var d = new Date();
- d.setDate(d.getDate() + 1);
- return d;
- }
- },
- // Yesterday
- { re: /^yes/i,
- handler: function() {
- var d = new Date();
- d.setDate(d.getDate() - 1);
- return d;
- }
- },
- // 4th
- { re: /^(\d{1,2})(st|nd|rd|th)?$/i,
- handler: function(bits) {
- var d = new Date();
- d.setDate(parseInt(bits[1], 10));
- return d;
- }
- },
- // 4th Jan
- { re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+)$/i,
- handler: function(bits) {
- var d = new Date();
- d.setDate(parseInt(bits[1], 10));
- d.setMonth(parseMonth(bits[2]));
- return d;
- }
- },
- // 4th Jan 2003
- { re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+),? (\d{4})$/i,
- handler: function(bits) {
- var d = new Date();
- d.setDate(parseInt(bits[1], 10));
- d.setMonth(parseMonth(bits[2]));
- d.setYear(bits[3]);
- return d;
- }
- },
- // Jan 4th
- { re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?$/i,
- handler: function(bits) {
- var d = new Date();
- d.setDate(parseInt(bits[2], 10));
- d.setMonth(parseMonth(bits[1]));
- return d;
- }
- },
- // Jan 4th 2003
- { re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?,? (\d{4})$/i,
- handler: function(bits) {
- var d = new Date();
- d.setDate(parseInt(bits[2], 10));
- d.setMonth(parseMonth(bits[1]));
- d.setYear(bits[3]);
- return d;
- }
- },
- // next Tuesday - this is suspect due to weird meaning of "next"
- { re: /^next (\w+)$/i,
- handler: function(bits) {
- var d = new Date();
- var day = d.getDay();
- var newDay = parseWeekday(bits[1]);
- var addDays = newDay - day;
- if (newDay <= day) {
- addDays += 7;
- }
- d.setDate(d.getDate() + addDays);
- return d;
- }
- },
- // last Tuesday
- { re: /^last (\w+)$/i,
- handler: function(bits) {
- throw new Error("Not yet implemented");
- }
- },
- // mm/dd/yyyy (American style)
- { re: /(\d{1,2})\/(\d{1,2})\/(\d{4})/,
- handler: function(bits) {
- var d = new Date();
- d.setYear(bits[3]);
- d.setDate(parseInt(bits[2], 10));
- d.setMonth(parseInt(bits[1], 10) - 1); // Because months indexed from 0
- return d;
- }
- },
- // yyyy-mm-dd (ISO style)
- { re: /(\d{4})-(\d{1,2})-(\d{1,2})/,
- handler: function(bits) {
- var d = new Date();
- d.setYear(parseInt(bits[1]));
- d.setMonth(parseInt(bits[2], 10) - 1);
- d.setDate(parseInt(bits[3], 10));
- return d;
- }
- },
-];
-
-function parseDateString(s) {
- for (var i = 0; i < dateParsePatterns.length; i++) {
- var re = dateParsePatterns[i].re;
- var handler = dateParsePatterns[i].handler;
- var bits = re.exec(s);
- if (bits) {
- return handler(bits);
- }
- }
- throw new Error("Invalid date string");
-}
-
-function fmt00(x) {
- // fmt00: Tags leading zero onto numbers 0 - 9.
- // Particularly useful for displaying results from Date methods.
- //
- if (Math.abs(parseInt(x)) < 10){
- x = "0"+ Math.abs(x);
- }
- return x;
-}
-
-function parseDateStringISO(s) {
- try {
- var d = parseDateString(s);
- return d.getFullYear() + '-' + (fmt00(d.getMonth() + 1)) + '-' + fmt00(d.getDate())
- }
- catch (e) { return s; }
-}
-function magicDate(input) {
- var messagespan = input.id + 'Msg';
- try {
- var d = parseDateString(input.value);
- input.value = d.getFullYear() + '-' + (fmt00(d.getMonth() + 1)) + '-' +
- fmt00(d.getDate());
- input.className = '';
- // Human readable date
- if (document.getElementById(messagespan)) {
- document.getElementById(messagespan).firstChild.nodeValue = d.toDateString();
- document.getElementById(messagespan).className = 'normal';
- }
- }
- catch (e) {
- input.className = 'error';
- var message = e.message;
- // Fix for IE6 bug
- if (message.indexOf('is null or not an object') > -1) {
- message = 'Invalid date string';
- }
- if (document.getElementById(messagespan)) {
- document.getElementById(messagespan).firstChild.nodeValue = message;
- document.getElementById(messagespan).className = 'error';
- }
- }
-}
diff --git a/parts/django/django/contrib/admin/media/js/getElementsBySelector.js b/parts/django/django/contrib/admin/media/js/getElementsBySelector.js
deleted file mode 100644
index 15b57a1..0000000
--- a/parts/django/django/contrib/admin/media/js/getElementsBySelector.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/* document.getElementsBySelector(selector)
- - returns an array of element objects from the current document
- matching the CSS selector. Selectors can contain element names,
- class names and ids and can be nested. For example:
-
- elements = document.getElementsBySelect('div#main p a.external')
-
- Will return an array of all 'a' elements with 'external' in their
- class attribute that are contained inside 'p' elements that are
- contained inside the 'div' element which has id="main"
-
- New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
- See http://www.w3.org/TR/css3-selectors/#attribute-selectors
-
- Version 0.4 - Simon Willison, March 25th 2003
- -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
- -- Opera 7 fails
-*/
-
-function getAllChildren(e) {
- // Returns all children of element. Workaround required for IE5/Windows. Ugh.
- return e.all ? e.all : e.getElementsByTagName('*');
-}
-
-document.getElementsBySelector = function(selector) {
- // Attempt to fail gracefully in lesser browsers
- if (!document.getElementsByTagName) {
- return new Array();
- }
- // Split selector in to tokens
- var tokens = selector.split(' ');
- var currentContext = new Array(document);
- for (var i = 0; i < tokens.length; i++) {
- token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
- if (token.indexOf('#') > -1) {
- // Token is an ID selector
- var bits = token.split('#');
- var tagName = bits[0];
- var id = bits[1];
- var element = document.getElementById(id);
- if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {
- // ID not found or tag with that ID not found, return false.
- return new Array();
- }
- // Set currentContext to contain just this element
- currentContext = new Array(element);
- continue; // Skip to next token
- }
- if (token.indexOf('.') > -1) {
- // Token contains a class selector
- var bits = token.split('.');
- var tagName = bits[0];
- var className = bits[1];
- if (!tagName) {
- tagName = '*';
- }
- // Get elements matching tag, filter them for class selector
- var found = new Array;
- var foundCount = 0;
- for (var h = 0; h < currentContext.length; h++) {
- var elements;
- if (tagName == '*') {
- elements = getAllChildren(currentContext[h]);
- } else {
- try {
- elements = currentContext[h].getElementsByTagName(tagName);
- }
- catch(e) {
- elements = [];
- }
- }
- for (var j = 0; j < elements.length; j++) {
- found[foundCount++] = elements[j];
- }
- }
- currentContext = new Array;
- var currentContextIndex = 0;
- for (var k = 0; k < found.length; k++) {
- if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
- currentContext[currentContextIndex++] = found[k];
- }
- }
- continue; // Skip to next token
- }
- // Code to deal with attribute selectors
- if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
- var tagName = RegExp.$1;
- var attrName = RegExp.$2;
- var attrOperator = RegExp.$3;
- var attrValue = RegExp.$4;
- if (!tagName) {
- tagName = '*';
- }
- // Grab all of the tagName elements within current context
- var found = new Array;
- var foundCount = 0;
- for (var h = 0; h < currentContext.length; h++) {
- var elements;
- if (tagName == '*') {
- elements = getAllChildren(currentContext[h]);
- } else {
- elements = currentContext[h].getElementsByTagName(tagName);
- }
- for (var j = 0; j < elements.length; j++) {
- found[foundCount++] = elements[j];
- }
- }
- currentContext = new Array;
- var currentContextIndex = 0;
- var checkFunction; // This function will be used to filter the elements
- switch (attrOperator) {
- case '=': // Equality
- checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
- break;
- case '~': // Match one of space seperated words
- checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
- break;
- case '|': // Match start with value followed by optional hyphen
- checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
- break;
- case '^': // Match starts with value
- checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
- break;
- case '$': // Match ends with value - fails with "Warning" in Opera 7
- checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
- break;
- case '*': // Match ends with value
- checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
- break;
- default :
- // Just test for existence of attribute
- checkFunction = function(e) { return e.getAttribute(attrName); };
- }
- currentContext = new Array;
- var currentContextIndex = 0;
- for (var k = 0; k < found.length; k++) {
- if (checkFunction(found[k])) {
- currentContext[currentContextIndex++] = found[k];
- }
- }
- // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
- continue; // Skip to next token
- }
- // If we get here, token is JUST an element (not a class or ID selector)
- tagName = token;
- var found = new Array;
- var foundCount = 0;
- for (var h = 0; h < currentContext.length; h++) {
- var elements = currentContext[h].getElementsByTagName(tagName);
- for (var j = 0; j < elements.length; j++) {
- found[foundCount++] = elements[j];
- }
- }
- currentContext = found;
- }
- return currentContext;
-}
-
-/* That revolting regular expression explained
-/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
- \---/ \---/\-------------/ \-------/
- | | | |
- | | | The value
- | | ~,|,^,$,* or =
- | Attribute
- Tag
-*/
diff --git a/parts/django/django/contrib/admin/media/js/inlines.js b/parts/django/django/contrib/admin/media/js/inlines.js
deleted file mode 100644
index cf79023..0000000
--- a/parts/django/django/contrib/admin/media/js/inlines.js
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * Django admin inlines
- *
- * Based on jQuery Formset 1.1
- * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com)
- * @requires jQuery 1.2.6 or later
- *
- * Copyright (c) 2009, Stanislaus Madueke
- * All rights reserved.
- *
- * Spiced up with Code from Zain Memon's GSoC project 2009
- * and modified for Django by Jannis Leidel
- *
- * Licensed under the New BSD License
- * See: http://www.opensource.org/licenses/bsd-license.php
- */
-(function($) {
- $.fn.formset = function(opts) {
- var options = $.extend({}, $.fn.formset.defaults, opts);
- var updateElementIndex = function(el, prefix, ndx) {
- var id_regex = new RegExp("(" + prefix + "-\\d+)");
- var replacement = prefix + "-" + ndx;
- if ($(el).attr("for")) {
- $(el).attr("for", $(el).attr("for").replace(id_regex, replacement));
- }
- if (el.id) {
- el.id = el.id.replace(id_regex, replacement);
- }
- if (el.name) {
- el.name = el.name.replace(id_regex, replacement);
- }
- };
- var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").attr("autocomplete", "off");
- var maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").attr("autocomplete", "off");
- // only show the add button if we are allowed to add more items,
- // note that max_num = None translates to a blank string.
- var showAddButton = maxForms.val() == '' || (maxForms.val()-totalForms.val()) > 0;
- $(this).each(function(i) {
- $(this).not("." + options.emptyCssClass).addClass(options.formCssClass);
- });
- if ($(this).length && showAddButton) {
- var addButton;
- if ($(this).attr("tagName") == "TR") {
- // If forms are laid out as table rows, insert the
- // "add" button in a new table row:
- var numCols = this.eq(0).children().length;
- $(this).parent().append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="javascript:void(0)">' + options.addText + "</a></tr>");
- addButton = $(this).parent().find("tr:last a");
- } else {
- // Otherwise, insert it immediately after the last form:
- $(this).filter(":last").after('<div class="' + options.addCssClass + '"><a href="javascript:void(0)">' + options.addText + "</a></div>");
- addButton = $(this).filter(":last").next().find("a");
- }
- addButton.click(function() {
- var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS");
- var nextIndex = parseInt(totalForms.val());
- var template = $("#" + options.prefix + "-empty");
- var row = template.clone(true);
- row.removeClass(options.emptyCssClass)
- .addClass(options.formCssClass)
- .attr("id", options.prefix + "-" + nextIndex)
- .insertBefore($(template));
- row.find("*")
- .filter(function() {
- var el = $(this);
- return el.attr("id") && el.attr("id").search(/__prefix__/) >= 0;
- }).each(function() {
- var el = $(this);
- el.attr("id", el.attr("id").replace(/__prefix__/g, nextIndex));
- })
- .end()
- .filter(function() {
- var el = $(this);
- return el.attr("name") && el.attr("name").search(/__prefix__/) >= 0;
- }).each(function() {
- var el = $(this);
- el.attr("name", el.attr("name").replace(/__prefix__/g, nextIndex));
- });
- if (row.is("tr")) {
- // If the forms are laid out in table rows, insert
- // the remove button into the last table cell:
- row.children(":last").append('<div><a class="' + options.deleteCssClass +'" href="javascript:void(0)">' + options.deleteText + "</a></div>");
- } else if (row.is("ul") || row.is("ol")) {
- // If they're laid out as an ordered/unordered list,
- // insert an <li> after the last list item:
- row.append('<li><a class="' + options.deleteCssClass +'" href="javascript:void(0)">' + options.deleteText + "</a></li>");
- } else {
- // Otherwise, just insert the remove button as the
- // last child element of the form's container:
- row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="javascript:void(0)">' + options.deleteText + "</a></span>");
- }
- row.find("input,select,textarea,label,a").each(function() {
- updateElementIndex(this, options.prefix, totalForms.val());
- });
- // Update number of total forms
- $(totalForms).val(nextIndex + 1);
- // Hide add button in case we've hit the max, except we want to add infinitely
- if ((maxForms.val() != '') && (maxForms.val()-totalForms.val()) <= 0) {
- addButton.parent().hide();
- }
- // The delete button of each row triggers a bunch of other things
- row.find("a." + options.deleteCssClass).click(function() {
- // Remove the parent form containing this button:
- var row = $(this).parents("." + options.formCssClass);
- row.remove();
- // If a post-delete callback was provided, call it with the deleted form:
- if (options.removed) {
- options.removed(row);
- }
- // Update the TOTAL_FORMS form count.
- var forms = $("." + options.formCssClass);
- $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length);
- // Show add button again once we drop below max
- if ((maxForms.val() == '') || (maxForms.val()-forms.length) > 0) {
- addButton.parent().show();
- }
- // Also, update names and ids for all remaining form controls
- // so they remain in sequence:
- for (var i=0, formCount=forms.length; i<formCount; i++)
- {
- $(forms.get(i)).find("input,select,textarea,label,a").each(function() {
- updateElementIndex(this, options.prefix, i);
- });
- }
- return false;
- });
- // If a post-add callback was supplied, call it with the added form:
- if (options.added) {
- options.added(row);
- }
- return false;
- });
- }
- return this;
- }
- /* Setup plugin defaults */
- $.fn.formset.defaults = {
- prefix: "form", // The form prefix for your django formset
- addText: "add another", // Text for the add link
- deleteText: "remove", // Text for the delete link
- addCssClass: "add-row", // CSS class applied to the add link
- deleteCssClass: "delete-row", // CSS class applied to the delete link
- emptyCssClass: "empty-row", // CSS class applied to the empty row
- formCssClass: "dynamic-form", // CSS class applied to each form in a formset
- added: null, // Function called each time a new form is added
- removed: null // Function called each time a form is deleted
- }
-})(django.jQuery);
diff --git a/parts/django/django/contrib/admin/media/js/inlines.min.js b/parts/django/django/contrib/admin/media/js/inlines.min.js
deleted file mode 100644
index 9e0926f..0000000
--- a/parts/django/django/contrib/admin/media/js/inlines.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-(function(a){a.fn.formset=function(g){var b=a.extend({},a.fn.formset.defaults,g),l=function(e,f,j){var d=new RegExp("("+f+"-\\d+)");f=f+"-"+j;a(e).attr("for")&&a(e).attr("for",a(e).attr("for").replace(d,f));if(e.id)e.id=e.id.replace(d,f);if(e.name)e.name=e.name.replace(d,f)};g=a("#id_"+b.prefix+"-TOTAL_FORMS").attr("autocomplete","off");var h=a("#id_"+b.prefix+"-MAX_NUM_FORMS").attr("autocomplete","off");g=h.val()==""||h.val()-g.val()>0;a(this).each(function(){a(this).not("."+b.emptyCssClass).addClass(b.formCssClass)});
-if(a(this).length&&g){var i;if(a(this).attr("tagName")=="TR"){g=this.eq(0).children().length;a(this).parent().append('<tr class="'+b.addCssClass+'"><td colspan="'+g+'"><a href="javascript:void(0)">'+b.addText+"</a></tr>");i=a(this).parent().find("tr:last a")}else{a(this).filter(":last").after('<div class="'+b.addCssClass+'"><a href="javascript:void(0)">'+b.addText+"</a></div>");i=a(this).filter(":last").next().find("a")}i.click(function(){var e=a("#id_"+b.prefix+"-TOTAL_FORMS"),f=parseInt(e.val()),
-j=a("#"+b.prefix+"-empty"),d=j.clone(true);d.removeClass(b.emptyCssClass).addClass(b.formCssClass).attr("id",b.prefix+"-"+f).insertBefore(a(j));d.find("*").filter(function(){var c=a(this);return c.attr("id")&&c.attr("id").search(/__prefix__/)>=0}).each(function(){var c=a(this);c.attr("id",c.attr("id").replace(/__prefix__/g,f))}).end().filter(function(){var c=a(this);return c.attr("name")&&c.attr("name").search(/__prefix__/)>=0}).each(function(){var c=a(this);c.attr("name",c.attr("name").replace(/__prefix__/g,
-f))});if(d.is("tr"))d.children(":last").append('<div><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></div>");else d.is("ul")||d.is("ol")?d.append('<li><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></li>"):d.children(":first").append('<span><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></span>");d.find("input,select,textarea,label,a").each(function(){l(this,b.prefix,e.val())});a(e).val(f+1);h.val()!=""&&
-h.val()-e.val()<=0&&i.parent().hide();d.find("a."+b.deleteCssClass).click(function(){var c=a(this).parents("."+b.formCssClass);c.remove();b.removed&&b.removed(c);c=a("."+b.formCssClass);a("#id_"+b.prefix+"-TOTAL_FORMS").val(c.length);if(h.val()==""||h.val()-c.length>0)i.parent().show();for(var k=0,m=c.length;k<m;k++)a(c.get(k)).find("input,select,textarea,label,a").each(function(){l(this,b.prefix,k)});return false});b.added&&b.added(d);return false})}return this};a.fn.formset.defaults={prefix:"form",
-addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null}})(django.jQuery);
diff --git a/parts/django/django/contrib/admin/media/js/jquery.init.js b/parts/django/django/contrib/admin/media/js/jquery.init.js
deleted file mode 100644
index 85a7973..0000000
--- a/parts/django/django/contrib/admin/media/js/jquery.init.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// Puts the included jQuery into our own namespace
-var django = {
- "jQuery": jQuery.noConflict(true)
-};
diff --git a/parts/django/django/contrib/admin/media/js/jquery.js b/parts/django/django/contrib/admin/media/js/jquery.js
deleted file mode 100644
index fff6776..0000000
--- a/parts/django/django/contrib/admin/media/js/jquery.js
+++ /dev/null
@@ -1,6240 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function( window, undefined ) {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context );
- },
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // A simple way to check for HTML strings or ID strings
- // (both of which we optimize for)
- quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
-
- // Is it a simple selector
- isSimple = /^.[^:#\[\.,]*$/,
-
- // Check if a string has a non-whitespace character in it
- rnotwhite = /\S/,
-
- // Used for trimming whitespace
- rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
- // Keep a UserAgent string for use with jQuery.browser
- userAgent = navigator.userAgent,
-
- // For matching the engine and version of the browser
- browserMatch,
-
- // Has the ready events already been bound?
- readyBound = false,
-
- // The functions to execute on DOM ready
- readyList = [],
-
- // The ready event handler
- DOMContentLoaded,
-
- // Save a reference to some core methods
- toString = Object.prototype.toString,
- hasOwnProperty = Object.prototype.hasOwnProperty,
- push = Array.prototype.push,
- slice = Array.prototype.slice,
- indexOf = Array.prototype.indexOf;
-
-jQuery.fn = jQuery.prototype = {
- init: function( selector, context ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // The body element only exists once, optimize finding it
- if ( selector === "body" && !context ) {
- this.context = document;
- this[0] = document.body;
- this.selector = "body";
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- match = quickExpr.exec( selector );
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- doc = (context ? context.ownerDocument || context : document);
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- ret = rsingleTag.exec( selector );
-
- if ( ret ) {
- if ( jQuery.isPlainObject( context ) ) {
- selector = [ document.createElement( ret[1] ) ];
- jQuery.fn.attr.call( selector, context, true );
-
- } else {
- selector = [ doc.createElement( ret[1] ) ];
- }
-
- } else {
- ret = buildFragment( [ match[1] ], [ doc ] );
- selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $("#id")
- } else {
- elem = document.getElementById( match[2] );
-
- if ( elem ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $("TAG")
- } else if ( !context && /^\w+$/.test( selector ) ) {
- this.selector = selector;
- this.context = document;
- selector = document.getElementsByTagName( selector );
- return jQuery.merge( this, selector );
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return (context || rootjQuery).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return jQuery( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if (selector.selector !== undefined) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.4.2",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return slice.call( this, 0 );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = jQuery();
-
- if ( jQuery.isArray( elems ) ) {
- push.apply( ret, elems );
-
- } else {
- jQuery.merge( ret, elems );
- }
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + (this.selector ? " " : "") + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Attach the listeners
- jQuery.bindReady();
-
- // If the DOM is already ready
- if ( jQuery.isReady ) {
- // Execute the function immediately
- fn.call( document, jQuery );
-
- // Otherwise, remember the function for later
- } else if ( readyList ) {
- // Add the function to the wait list
- readyList.push( fn );
- }
-
- return this;
- },
-
- eq: function( i ) {
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, +i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ),
- "slice", slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || jQuery(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- // copy reference to target object
- var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging object literal values or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
- var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
- : jQuery.isArray(copy) ? [] : {};
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- window.$ = _$;
-
- if ( deep ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // Handle when the DOM is ready
- ready: function() {
- // Make sure that the DOM is not already loaded
- if ( !jQuery.isReady ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 13 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If there are functions bound, to execute
- if ( readyList ) {
- // Execute all of them
- var fn, i = 0;
- while ( (fn = readyList[ i++ ]) ) {
- fn.call( document, jQuery );
- }
-
- // Reset the list of functions
- readyList = null;
- }
-
- // Trigger any bound ready events
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- }
- }
- },
-
- bindReady: function() {
- if ( readyBound ) {
- return;
- }
-
- readyBound = true;
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- return jQuery.ready();
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent("onreadystatechange", DOMContentLoaded);
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
-
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return toString.call(obj) === "[object Function]";
- },
-
- isArray: function( obj ) {
- return toString.call(obj) === "[object Array]";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
- return false;
- }
-
- // Not own constructor property must be Object
- if ( obj.constructor
- && !hasOwnProperty.call(obj, "constructor")
- && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || hasOwnProperty.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- for ( var name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw msg;
- },
-
- parseJSON: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
- .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
-
- // Try to use the native JSON parser first
- return window.JSON && window.JSON.parse ?
- window.JSON.parse( data ) :
- (new Function("return " + data))();
-
- } else {
- jQuery.error( "Invalid JSON: " + data );
- }
- },
-
- noop: function() {},
-
- // Evalulates a script in a global context
- globalEval: function( data ) {
- if ( data && rnotwhite.test(data) ) {
- // Inspired by code by Andrea Giammarchi
- // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
- var head = document.getElementsByTagName("head")[0] || document.documentElement,
- script = document.createElement("script");
-
- script.type = "text/javascript";
-
- if ( jQuery.support.scriptEval ) {
- script.appendChild( document.createTextNode( data ) );
- } else {
- script.text = data;
- }
-
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709).
- head.insertBefore( script, head.firstChild );
- head.removeChild( script );
- }
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0,
- length = object.length,
- isObj = length === undefined || jQuery.isFunction(object);
-
- if ( args ) {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.apply( object[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( object[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( var value = object[0];
- i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
- }
- }
-
- return object;
- },
-
- trim: function( text ) {
- return (text || "").replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( array, results ) {
- var ret = results || [];
-
- if ( array != null ) {
- // The window, strings (and functions) also have 'length'
- // The extra typeof function check is to prevent crashes
- // in Safari 2 (See: #3039)
- if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
- push.call( ret, array );
- } else {
- jQuery.merge( ret, array );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var i = first.length, j = 0;
-
- if ( typeof second.length === "number" ) {
- for ( var l = second.length; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var ret = [];
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- if ( !inv !== !callback( elems[ i ], i ) ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var ret = [], value;
-
- // Go through the array, translating each of the items to their
- // new value (or values).
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- proxy: function( fn, proxy, thisObject ) {
- if ( arguments.length === 2 ) {
- if ( typeof proxy === "string" ) {
- thisObject = fn;
- fn = thisObject[ proxy ];
- proxy = undefined;
-
- } else if ( proxy && !jQuery.isFunction( proxy ) ) {
- thisObject = proxy;
- proxy = undefined;
- }
- }
-
- if ( !proxy && fn ) {
- proxy = function() {
- return fn.apply( thisObject || this, arguments );
- };
- }
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- if ( fn ) {
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
- }
-
- // So proxy can be declared as an argument
- return proxy;
- },
-
- // Use of jQuery.browser is frowned upon.
- // More details: http://docs.jquery.com/Utilities/jQuery.browser
- uaMatch: function( ua ) {
- ua = ua.toLowerCase();
-
- var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
- /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
- /(msie) ([\w.]+)/.exec( ua ) ||
- !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||
- [];
-
- return { browser: match[1] || "", version: match[2] || "0" };
- },
-
- browser: {}
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
- jQuery.browser[ browserMatch.browser ] = true;
- jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
- jQuery.browser.safari = true;
-}
-
-if ( indexOf ) {
- jQuery.inArray = function( elem, array ) {
- return indexOf.call( array, elem );
- };
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- };
-
-} else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch( error ) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
-}
-
-function evalScript( i, elem ) {
- if ( elem.src ) {
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
- } else {
- jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
-}
-
-// Mutifunctional method to get and set values to a collection
-// The value/s can be optionally by executed if its a function
-function access( elems, key, value, exec, fn, pass ) {
- var length = elems.length;
-
- // Setting many attributes
- if ( typeof key === "object" ) {
- for ( var k in key ) {
- access( elems, k, key[k], exec, fn, value );
- }
- return elems;
- }
-
- // Setting one attribute
- if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = !pass && exec && jQuery.isFunction(value);
-
- for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
-
- return elems;
- }
-
- // Getting an attribute
- return length ? fn( elems[0], key ) : undefined;
-}
-
-function now() {
- return (new Date).getTime();
-}
-(function() {
-
- jQuery.support = {};
-
- var root = document.documentElement,
- script = document.createElement("script"),
- div = document.createElement("div"),
- id = "script" + now();
-
- div.style.display = "none";
- div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
- var all = div.getElementsByTagName("*"),
- a = div.getElementsByTagName("a")[0];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return;
- }
-
- jQuery.support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: div.firstChild.nodeType === 3,
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText insted)
- style: /red/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: a.getAttribute("href") === "/a",
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55$/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: div.getElementsByTagName("input")[0].value === "on",
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
-
- parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
-
- // Will be defined later
- deleteExpando: true,
- checkClone: false,
- scriptEval: false,
- noCloneEvent: true,
- boxModel: null
- };
-
- script.type = "text/javascript";
- try {
- script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
- } catch(e) {}
-
- root.insertBefore( script, root.firstChild );
-
- // Make sure that the execution of code works by injecting a script
- // tag with appendChild/createTextNode
- // (IE doesn't support this, fails, and uses .text instead)
- if ( window[ id ] ) {
- jQuery.support.scriptEval = true;
- delete window[ id ];
- }
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete script.test;
-
- } catch(e) {
- jQuery.support.deleteExpando = false;
- }
-
- root.removeChild( script );
-
- if ( div.attachEvent && div.fireEvent ) {
- div.attachEvent("onclick", function click() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- jQuery.support.noCloneEvent = false;
- div.detachEvent("onclick", click);
- });
- div.cloneNode(true).fireEvent("onclick");
- }
-
- div = document.createElement("div");
- div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
-
- var fragment = document.createDocumentFragment();
- fragment.appendChild( div.firstChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
-
- // Figure out if the W3C box model works as expected
- // document.body must exist before we can do this
- jQuery(function() {
- var div = document.createElement("div");
- div.style.width = div.style.paddingLeft = "1px";
-
- document.body.appendChild( div );
- jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
- document.body.removeChild( div ).style.display = 'none';
-
- div = null;
- });
-
- // Technique from Juriy Zaytsev
- // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
- var eventSupported = function( eventName ) {
- var el = document.createElement("div");
- eventName = "on" + eventName;
-
- var isSupported = (eventName in el);
- if ( !isSupported ) {
- el.setAttribute(eventName, "return;");
- isSupported = typeof el[eventName] === "function";
- }
- el = null;
-
- return isSupported;
- };
-
- jQuery.support.submitBubbles = eventSupported("submit");
- jQuery.support.changeBubbles = eventSupported("change");
-
- // release memory in IE
- root = script = div = all = a = null;
-})();
-
-jQuery.props = {
- "for": "htmlFor",
- "class": "className",
- readonly: "readOnly",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- rowspan: "rowSpan",
- colspan: "colSpan",
- tabindex: "tabIndex",
- usemap: "useMap",
- frameborder: "frameBorder"
-};
-var expando = "jQuery" + now(), uuid = 0, windowData = {};
-
-jQuery.extend({
- cache: {},
-
- expando:expando,
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- "object": true,
- "applet": true
- },
-
- data: function( elem, name, data ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- return;
- }
-
- elem = elem == window ?
- windowData :
- elem;
-
- var id = elem[ expando ], cache = jQuery.cache, thisCache;
-
- if ( !id && typeof name === "string" && data === undefined ) {
- return null;
- }
-
- // Compute a unique ID for the element
- if ( !id ) {
- id = ++uuid;
- }
-
- // Avoid generating a new cache unless none exists and we
- // want to manipulate it.
- if ( typeof name === "object" ) {
- elem[ expando ] = id;
- thisCache = cache[ id ] = jQuery.extend(true, {}, name);
-
- } else if ( !cache[ id ] ) {
- elem[ expando ] = id;
- cache[ id ] = {};
- }
-
- thisCache = cache[ id ];
-
- // Prevent overriding the named cache with undefined values
- if ( data !== undefined ) {
- thisCache[ name ] = data;
- }
-
- return typeof name === "string" ? thisCache[ name ] : thisCache;
- },
-
- removeData: function( elem, name ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- return;
- }
-
- elem = elem == window ?
- windowData :
- elem;
-
- var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
-
- // If we want to remove a specific section of the element's data
- if ( name ) {
- if ( thisCache ) {
- // Remove the section of cache data
- delete thisCache[ name ];
-
- // If we've removed all the data, remove the element's cache
- if ( jQuery.isEmptyObject(thisCache) ) {
- jQuery.removeData( elem );
- }
- }
-
- // Otherwise, we want to remove all of the element's data
- } else {
- if ( jQuery.support.deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- // Completely remove the data cache
- delete cache[ id ];
- }
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- if ( typeof key === "undefined" && this.length ) {
- return jQuery.data( this[0] );
-
- } else if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- var parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- if ( data === undefined && this.length ) {
- data = jQuery.data( this[0], key );
- }
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
- } else {
- return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
- jQuery.data( this, key, value );
- });
- }
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-jQuery.extend({
- queue: function( elem, type, data ) {
- if ( !elem ) {
- return;
- }
-
- type = (type || "fx") + "queue";
- var q = jQuery.data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( !data ) {
- return q || [];
- }
-
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery.data( elem, type, jQuery.makeArray(data) );
-
- } else {
- q.push( data );
- }
-
- return q;
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ), fn = queue.shift();
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift("inprogress");
- }
-
- fn.call(elem, function() {
- jQuery.dequeue(elem, type);
- });
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined ) {
- return jQuery.queue( this[0], type );
- }
- return this.each(function( i, elem ) {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
-
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
- type = type || "fx";
-
- return this.queue( type, function() {
- var elem = this;
- setTimeout(function() {
- jQuery.dequeue( elem, type );
- }, time );
- });
- },
-
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- }
-});
-var rclass = /[\n\t]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rspecialurl = /href|src|style/,
- rtype = /(button|input)/i,
- rfocusable = /(button|input|object|select|textarea)/i,
- rclickable = /^(a|area)$/i,
- rradiocheck = /radio|checkbox/;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, name, value, true, jQuery.attr );
- },
-
- removeAttr: function( name, fn ) {
- return this.each(function(){
- jQuery.attr( this, name, "" );
- if ( this.nodeType === 1 ) {
- this.removeAttribute( name );
- }
- });
- },
-
- addClass: function( value ) {
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.addClass( value.call(this, i, self.attr("class")) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- var classNames = (value || "").split( rspace );
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var elem = this[i];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className ) {
- elem.className = value;
-
- } else {
- var className = " " + elem.className + " ", setClass = elem.className;
- for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
- setClass += " " + classNames[c];
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.removeClass( value.call(this, i, self.attr("class")) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- var classNames = (value || "").split(rspace);
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var elem = this[i];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- var className = (" " + elem.className + " ").replace(rclass, " ");
- for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[c] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value, isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className, i = 0, self = jQuery(this),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery.data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ";
- for ( var i = 0, l = this.length; i < l; i++ ) {
- if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- if ( value === undefined ) {
- var elem = this[0];
-
- if ( elem ) {
- if ( jQuery.nodeName( elem, "option" ) ) {
- return (elem.attributes.value || {}).specified ? elem.value : elem.text;
- }
-
- // We need to handle select boxes special
- if ( jQuery.nodeName( elem, "select" ) ) {
- var index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
- var option = options[ i ];
-
- if ( option.selected ) {
- // Get the specifc value for the option
- value = jQuery(option).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- }
-
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
-
-
- // Everything else, we just grab the value
- return (elem.value || "").replace(rreturn, "");
-
- }
-
- return undefined;
- }
-
- var isFunction = jQuery.isFunction(value);
-
- return this.each(function(i) {
- var self = jQuery(this), val = value;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call(this, i, self.val());
- }
-
- // Typecast each time if the value is a Function and the appended
- // value is therefore different each time.
- if ( typeof val === "number" ) {
- val += "";
- }
-
- if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
- this.checked = jQuery.inArray( self.val(), val ) >= 0;
-
- } else if ( jQuery.nodeName( this, "select" ) ) {
- var values = jQuery.makeArray(val);
-
- jQuery( "option", this ).each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- this.selectedIndex = -1;
- }
-
- } else {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attr: function( elem, name, value, pass ) {
- // don't set attributes on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
- return undefined;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery(elem)[name](value);
- }
-
- var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
- // Whether we are setting (or getting)
- set = value !== undefined;
-
- // Try to normalize/fix the name
- name = notxml && jQuery.props[ name ] || name;
-
- // Only do all the following if this is a node (faster for style)
- if ( elem.nodeType === 1 ) {
- // These attributes require special treatment
- var special = rspecialurl.test( name );
-
- // Safari mis-reports the default selected property of an option
- // Accessing the parent's selectedIndex property fixes it
- if ( name === "selected" && !jQuery.support.optSelected ) {
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- }
-
- // If applicable, access the attribute via the DOM 0 way
- if ( name in elem && notxml && !special ) {
- if ( set ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- }
-
- elem[ name ] = value;
- }
-
- // browsers index elements by id/name on forms, give priority to attributes.
- if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
- return elem.getAttributeNode( name ).nodeValue;
- }
-
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- if ( name === "tabIndex" ) {
- var attributeNode = elem.getAttributeNode( "tabIndex" );
-
- return attributeNode && attributeNode.specified ?
- attributeNode.value :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
-
- return elem[ name ];
- }
-
- if ( !jQuery.support.style && notxml && name === "style" ) {
- if ( set ) {
- elem.style.cssText = "" + value;
- }
-
- return elem.style.cssText;
- }
-
- if ( set ) {
- // convert the value to a string (all browsers do this but IE) see #1070
- elem.setAttribute( name, "" + value );
- }
-
- var attr = !jQuery.support.hrefNormalized && notxml && special ?
- // Some attributes require a special call on IE
- elem.getAttribute( name, 2 ) :
- elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return attr === null ? undefined : attr;
- }
-
- // elem is actually elem.style ... set the style
- // Using attr for specific style information is now deprecated. Use style instead.
- return jQuery.style( elem, name, value );
- }
-});
-var rnamespaces = /\.(.*)$/,
- fcleanup = function( nm ) {
- return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
- return "\\" + ch;
- });
- };
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
- // Bind an event to an element
- // Original by Dean Edwards
- add: function( elem, types, handler, data ) {
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // For whatever reason, IE has trouble passing the window object
- // around, causing it to be cloned in the process
- if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
- elem = window;
- }
-
- var handleObjIn, handleObj;
-
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- }
-
- // Make sure that the function being executed has a unique ID
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure
- var elemData = jQuery.data( elem );
-
- // If no elemData is found then we must be trying to bind to one of the
- // banned noData elements
- if ( !elemData ) {
- return;
- }
-
- var events = elemData.events = elemData.events || {},
- eventHandle = elemData.handle, eventHandle;
-
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function() {
- // Handle the second event of a trigger and when
- // an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
- jQuery.event.handle.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- }
-
- // Add elem as a property of the handle function
- // This is to prevent a memory leak with non-native events in IE.
- eventHandle.elem = elem;
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = types.split(" ");
-
- var type, i = 0, namespaces;
-
- while ( (type = types[ i++ ]) ) {
- handleObj = handleObjIn ?
- jQuery.extend({}, handleObjIn) :
- { handler: handler, data: data };
-
- // Namespaced event handlers
- if ( type.indexOf(".") > -1 ) {
- namespaces = type.split(".");
- type = namespaces.shift();
- handleObj.namespace = namespaces.slice(0).sort().join(".");
-
- } else {
- namespaces = [];
- handleObj.namespace = "";
- }
-
- handleObj.type = type;
- handleObj.guid = handler.guid;
-
- // Get the current list of functions bound to this event
- var handlers = events[ type ],
- special = jQuery.event.special[ type ] || {};
-
- // Init the event handler queue
- if ( !handlers ) {
- handlers = events[ type ] = [];
-
- // Check for a special event handler
- // Only use addEventListener/attachEvent if the special
- // events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add the function to the element's handler list
- handlers.push( handleObj );
-
- // Keep track of which events have been used, for global triggering
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, pos ) {
- // don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
- elemData = jQuery.data( elem ),
- events = elemData && elemData.events;
-
- if ( !elemData || !events ) {
- return;
- }
-
- // types is actually an event object here
- if ( types && types.type ) {
- handler = types.handler;
- types = types.type;
- }
-
- // Unbind all events for the element
- if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
- types = types || "";
-
- for ( type in events ) {
- jQuery.event.remove( elem, type + types );
- }
-
- return;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).unbind("mouseover mouseout", fn);
- types = types.split(" ");
-
- while ( (type = types[ i++ ]) ) {
- origType = type;
- handleObj = null;
- all = type.indexOf(".") < 0;
- namespaces = [];
-
- if ( !all ) {
- // Namespaced event handlers
- namespaces = type.split(".");
- type = namespaces.shift();
-
- namespace = new RegExp("(^|\\.)" +
- jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
- }
-
- eventType = events[ type ];
-
- if ( !eventType ) {
- continue;
- }
-
- if ( !handler ) {
- for ( var j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( all || namespace.test( handleObj.namespace ) ) {
- jQuery.event.remove( elem, origType, handleObj.handler, j );
- eventType.splice( j--, 1 );
- }
- }
-
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
-
- for ( var j = pos || 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( handler.guid === handleObj.guid ) {
- // remove the given handler for the given type
- if ( all || namespace.test( handleObj.namespace ) ) {
- if ( pos == null ) {
- eventType.splice( j--, 1 );
- }
-
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
-
- if ( pos != null ) {
- break;
- }
- }
- }
-
- // remove generic event handler if no more handlers exist
- if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- removeEvent( elem, type, elemData.handle );
- }
-
- ret = null;
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- var handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- delete elemData.events;
- delete elemData.handle;
-
- if ( jQuery.isEmptyObject( elemData ) ) {
- jQuery.removeData( elem );
- }
- }
- },
-
- // bubbling is internal
- trigger: function( event, data, elem /*, bubbling */ ) {
- // Event object or event type
- var type = event.type || event,
- bubbling = arguments[3];
-
- if ( !bubbling ) {
- event = typeof event === "object" ?
- // jQuery.Event object
- event[expando] ? event :
- // Object literal
- jQuery.extend( jQuery.Event(type), event ) :
- // Just the event type (string)
- jQuery.Event(type);
-
- if ( type.indexOf("!") >= 0 ) {
- event.type = type = type.slice(0, -1);
- event.exclusive = true;
- }
-
- // Handle a global trigger
- if ( !elem ) {
- // Don't bubble custom events when global (to avoid too much overhead)
- event.stopPropagation();
-
- // Only trigger if we've ever bound an event for it
- if ( jQuery.event.global[ type ] ) {
- jQuery.each( jQuery.cache, function() {
- if ( this.events && this.events[type] ) {
- jQuery.event.trigger( event, data, this.handle.elem );
- }
- });
- }
- }
-
- // Handle triggering a single element
-
- // don't do events on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
- return undefined;
- }
-
- // Clean up in case it is reused
- event.result = undefined;
- event.target = elem;
-
- // Clone the incoming data, if any
- data = jQuery.makeArray( data );
- data.unshift( event );
- }
-
- event.currentTarget = elem;
-
- // Trigger the event, it is assumed that "handle" is a function
- var handle = jQuery.data( elem, "handle" );
- if ( handle ) {
- handle.apply( elem, data );
- }
-
- var parent = elem.parentNode || elem.ownerDocument;
-
- // Trigger an inline bound script
- try {
- if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
- if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
- event.result = false;
- }
- }
-
- // prevent IE from throwing an error for some elements with some event types, see #3533
- } catch (e) {}
-
- if ( !event.isPropagationStopped() && parent ) {
- jQuery.event.trigger( event, data, parent, true );
-
- } else if ( !event.isDefaultPrevented() ) {
- var target = event.target, old,
- isClick = jQuery.nodeName(target, "a") && type === "click",
- special = jQuery.event.special[ type ] || {};
-
- if ( (!special._default || special._default.call( elem, event ) === false) &&
- !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
-
- try {
- if ( target[ type ] ) {
- // Make sure that we don't accidentally re-trigger the onFOO events
- old = target[ "on" + type ];
-
- if ( old ) {
- target[ "on" + type ] = null;
- }
-
- jQuery.event.triggered = true;
- target[ type ]();
- }
-
- // prevent IE from throwing an error for some elements with some event types, see #3533
- } catch (e) {}
-
- if ( old ) {
- target[ "on" + type ] = old;
- }
-
- jQuery.event.triggered = false;
- }
- }
- },
-
- handle: function( event ) {
- var all, handlers, namespaces, namespace, events;
-
- event = arguments[0] = jQuery.event.fix( event || window.event );
- event.currentTarget = this;
-
- // Namespaced event handlers
- all = event.type.indexOf(".") < 0 && !event.exclusive;
-
- if ( !all ) {
- namespaces = event.type.split(".");
- event.type = namespaces.shift();
- namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- var events = jQuery.data(this, "events"), handlers = events[ event.type ];
-
- if ( events && handlers ) {
- // Clone the handlers to prevent manipulation
- handlers = handlers.slice(0);
-
- for ( var j = 0, l = handlers.length; j < l; j++ ) {
- var handleObj = handlers[ j ];
-
- // Filter the functions by class
- if ( all || namespace.test( handleObj.namespace ) ) {
- // Pass in a reference to the handler function itself
- // So that we can later remove it
- event.handler = handleObj.handler;
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- var ret = handleObj.handler.apply( this, arguments );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
-
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
- }
-
- return event.result;
- },
-
- props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
- fix: function( event ) {
- if ( event[ expando ] ) {
- return event;
- }
-
- // store a copy of the original event object
- // and "clone" to set read-only properties
- var originalEvent = event;
- event = jQuery.Event( originalEvent );
-
- for ( var i = this.props.length, prop; i; ) {
- prop = this.props[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary
- if ( !event.target ) {
- event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
- }
-
- // check if target is a textnode (safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && event.fromElement ) {
- event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
- }
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && event.clientX != null ) {
- var doc = document.documentElement, body = document.body;
- event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
-
- // Add which for key events
- if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
- event.which = event.charCode || event.keyCode;
- }
-
- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
- if ( !event.metaKey && event.ctrlKey ) {
- event.metaKey = event.ctrlKey;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && event.button !== undefined ) {
- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
- }
-
- return event;
- },
-
- // Deprecated, use jQuery.guid instead
- guid: 1E8,
-
- // Deprecated, use jQuery.proxy instead
- proxy: jQuery.proxy,
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady,
- teardown: jQuery.noop
- },
-
- live: {
- add: function( handleObj ) {
- jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) );
- },
-
- remove: function( handleObj ) {
- var remove = true,
- type = handleObj.origType.replace(rnamespaces, "");
-
- jQuery.each( jQuery.data(this, "events").live || [], function() {
- if ( type === this.origType.replace(rnamespaces, "") ) {
- remove = false;
- return false;
- }
- });
-
- if ( remove ) {
- jQuery.event.remove( this, handleObj.origType, liveHandler );
- }
- }
-
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( this.setInterval ) {
- this.onbeforeunload = eventHandle;
- }
-
- return false;
- },
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- }
-};
-
-var removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- elem.removeEventListener( type, handle, false );
- } :
- function( elem, type, handle ) {
- elem.detachEvent( "on" + type, handle );
- };
-
-jQuery.Event = function( src ) {
- // Allow instantiation without the 'new' keyword
- if ( !this.preventDefault ) {
- return new jQuery.Event( src );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
- // Event type
- } else {
- this.type = src;
- }
-
- // timeStamp is buggy for some events on Firefox(#3843)
- // So we won't rely on the native value
- this.timeStamp = now();
-
- // Mark it as fixed
- this[ expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
- }
- // otherwise set the returnValue property of the original event to false (IE)
- e.returnValue = false;
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
- // Check if mouse(over|out) are still within the same parent element
- var parent = event.relatedTarget;
-
- // Firefox sometimes assigns relatedTarget a XUL element
- // which we cannot access the parentNode property of
- try {
- // Traverse up the tree
- while ( parent && parent !== this ) {
- parent = parent.parentNode;
- }
-
- if ( parent !== this ) {
- // set the correct event type
- event.type = event.data;
-
- // handle event if we actually just moused on to a non sub-element
- jQuery.event.handle.apply( this, arguments );
- }
-
- // assuming we've left the element since we most likely mousedover a xul element
- } catch(e) { }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
- event.type = event.data;
- jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- setup: function( data ) {
- jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
- },
- teardown: function( data ) {
- jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
- }
- };
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function( data, namespaces ) {
- if ( this.nodeName.toLowerCase() !== "form" ) {
- jQuery.event.add(this, "click.specialSubmit", function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
- return trigger( "submit", this, arguments );
- }
- });
-
- jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
- return trigger( "submit", this, arguments );
- }
- });
-
- } else {
- return false;
- }
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialSubmit" );
- }
- };
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
- var formElems = /textarea|input|select/i,
-
- changeFilters,
-
- getVal = function( elem ) {
- var type = elem.type, val = elem.value;
-
- if ( type === "radio" || type === "checkbox" ) {
- val = elem.checked;
-
- } else if ( type === "select-multiple" ) {
- val = elem.selectedIndex > -1 ?
- jQuery.map( elem.options, function( elem ) {
- return elem.selected;
- }).join("-") :
- "";
-
- } else if ( elem.nodeName.toLowerCase() === "select" ) {
- val = elem.selectedIndex;
- }
-
- return val;
- },
-
- testChange = function testChange( e ) {
- var elem = e.target, data, val;
-
- if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
- return;
- }
-
- data = jQuery.data( elem, "_change_data" );
- val = getVal(elem);
-
- // the current data will be also retrieved by beforeactivate
- if ( e.type !== "focusout" || elem.type !== "radio" ) {
- jQuery.data( elem, "_change_data", val );
- }
-
- if ( data === undefined || val === data ) {
- return;
- }
-
- if ( data != null || val ) {
- e.type = "change";
- return jQuery.event.trigger( e, arguments[1], elem );
- }
- };
-
- jQuery.event.special.change = {
- filters: {
- focusout: testChange,
-
- click: function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
- return testChange.call( this, e );
- }
- },
-
- // Change has to be called before submit
- // Keydown will be called before keypress, which is used in submit-event delegation
- keydown: function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
- (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
- type === "select-multiple" ) {
- return testChange.call( this, e );
- }
- },
-
- // Beforeactivate happens also before the previous element is blurred
- // with this event you can't trigger a change event, but you can store
- // information/focus[in] is not needed anymore
- beforeactivate: function( e ) {
- var elem = e.target;
- jQuery.data( elem, "_change_data", getVal(elem) );
- }
- },
-
- setup: function( data, namespaces ) {
- if ( this.type === "file" ) {
- return false;
- }
-
- for ( var type in changeFilters ) {
- jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
- }
-
- return formElems.test( this.nodeName );
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialChange" );
-
- return formElems.test( this.nodeName );
- }
- };
-
- changeFilters = jQuery.event.special.change.filters;
-}
-
-function trigger( type, elem, args ) {
- args[0].type = type;
- return jQuery.event.handle.apply( elem, args );
-}
-
-// Create "bubbling" focus and blur events
-if ( document.addEventListener ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
- jQuery.event.special[ fix ] = {
- setup: function() {
- this.addEventListener( orig, handler, true );
- },
- teardown: function() {
- this.removeEventListener( orig, handler, true );
- }
- };
-
- function handler( e ) {
- e = jQuery.event.fix( e );
- e.type = fix;
- return jQuery.event.handle.call( this, e );
- }
- });
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
- jQuery.fn[ name ] = function( type, data, fn ) {
- // Handle object literals
- if ( typeof type === "object" ) {
- for ( var key in type ) {
- this[ name ](key, data, type[key], fn);
- }
- return this;
- }
-
- if ( jQuery.isFunction( data ) ) {
- fn = data;
- data = undefined;
- }
-
- var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
- jQuery( this ).unbind( event, handler );
- return fn.apply( this, arguments );
- }) : fn;
-
- if ( type === "unload" && name !== "one" ) {
- this.one( type, data, fn );
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.add( this[i], type, handler, data );
- }
- }
-
- return this;
- };
-});
-
-jQuery.fn.extend({
- unbind: function( type, fn ) {
- // Handle object literals
- if ( typeof type === "object" && !type.preventDefault ) {
- for ( var key in type ) {
- this.unbind(key, type[key]);
- }
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.remove( this[i], type, fn );
- }
- }
-
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.live( types, data, fn, selector );
- },
-
- undelegate: function( selector, types, fn ) {
- if ( arguments.length === 0 ) {
- return this.unbind( "live" );
-
- } else {
- return this.die( types, null, fn, selector );
- }
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
-
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- var event = jQuery.Event( type );
- event.preventDefault();
- event.stopPropagation();
- jQuery.event.trigger( event, data, this[0] );
- return event.result;
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments, i = 1;
-
- // link all the functions, so any of them can unbind this click handler
- while ( i < args.length ) {
- jQuery.proxy( fn, args[ i++ ] );
- }
-
- return this.click( jQuery.proxy( fn, function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- }));
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-var liveMap = {
- focus: "focusin",
- blur: "focusout",
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
- jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
- var type, i = 0, match, namespaces, preType,
- selector = origSelector || this.selector,
- context = origSelector ? this : jQuery( this.context );
-
- if ( jQuery.isFunction( data ) ) {
- fn = data;
- data = undefined;
- }
-
- types = (types || "").split(" ");
-
- while ( (type = types[ i++ ]) != null ) {
- match = rnamespaces.exec( type );
- namespaces = "";
-
- if ( match ) {
- namespaces = match[0];
- type = type.replace( rnamespaces, "" );
- }
-
- if ( type === "hover" ) {
- types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
- continue;
- }
-
- preType = type;
-
- if ( type === "focus" || type === "blur" ) {
- types.push( liveMap[ type ] + namespaces );
- type = type + namespaces;
-
- } else {
- type = (liveMap[ type ] || type) + namespaces;
- }
-
- if ( name === "live" ) {
- // bind live handler
- context.each(function(){
- jQuery.event.add( this, liveConvert( type, selector ),
- { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
- });
-
- } else {
- // unbind live handler
- context.unbind( liveConvert( type, selector ), fn );
- }
- }
-
- return this;
- }
-});
-
-function liveHandler( event ) {
- var stop, elems = [], selectors = [], args = arguments,
- related, match, handleObj, elem, j, i, l, data,
- events = jQuery.data( this, "events" );
-
- // Make sure we avoid non-left-click bubbling in Firefox (#3861)
- if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
- return;
- }
-
- event.liveFired = this;
-
- var live = events.live.slice(0);
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
- selectors.push( handleObj.selector );
-
- } else {
- live.splice( j--, 1 );
- }
- }
-
- match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
- for ( i = 0, l = match.length; i < l; i++ ) {
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( match[i].selector === handleObj.selector ) {
- elem = match[i].elem;
- related = null;
-
- // Those two events require additional checking
- if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
- related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
- }
-
- if ( !related || related !== elem ) {
- elems.push({ elem: elem, handleObj: handleObj });
- }
- }
- }
- }
-
- for ( i = 0, l = elems.length; i < l; i++ ) {
- match = elems[i];
- event.currentTarget = match.elem;
- event.data = match.handleObj.data;
- event.handleObj = match.handleObj;
-
- if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
- stop = false;
- break;
- }
- }
-
- return stop;
-}
-
-function liveConvert( type, selector ) {
- return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( fn ) {
- return fn ? this.bind( name, fn ) : this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-});
-
-// Prevent memory leaks in IE
-// Window isn't included so as not to unbind existing unload events
-// More info:
-// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
-if ( window.attachEvent && !window.addEventListener ) {
- window.attachEvent("onunload", function() {
- for ( var id in jQuery.cache ) {
- if ( jQuery.cache[ id ].handle ) {
- // Try/Catch is to handle iframes being unloaded, see #4280
- try {
- jQuery.event.remove( jQuery.cache[ id ].handle.elem );
- } catch(e) {}
- }
- }
- });
-}
-/*!
- * Sizzle CSS Selector Engine - v1.0
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function(){
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function(selector, context, results, seed) {
- results = results || [];
- var origContext = context = context || document;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context );
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set );
- }
- }
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
- var ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
- }
-
- if ( context ) {
- var ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
- set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray(set);
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- var cur = parts.pop(), pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
- } else if ( context && context.nodeType === 1 ) {
- for ( var i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
- } else {
- for ( var i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function(results){
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort(sortOrder);
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
- var set, match;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
- set = Expr.find[ type ]( match, context, isXML );
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = context.getElementsByTagName("*");
- }
-
- return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && isXML(set[0]);
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- var filter = Expr.filter[ type ], found, item, left = match[1];
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
- } else {
- curLoop[i] = false;
- }
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
- leftMatch: {},
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
- attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
- }
- },
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
- ">": function(checkSet, part){
- var isPartStr = typeof part === "string";
-
- if ( isPartStr && !/\W/.test(part) ) {
- part = part.toLowerCase();
-
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
- } else {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
- "": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = part.toLowerCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
- },
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = part.toLowerCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
- }
- },
- find: {
- ID: function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? [m] : [];
- }
- },
- NAME: function(match, context){
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
- }
- },
- preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
- ID: function(match){
- return match[1].replace(/\\/g, "");
- },
- TAG: function(match, curLoop){
- return match[1].toLowerCase();
- },
- CHILD: function(match){
- if ( match[1] === "nth" ) {
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
- ATTR: function(match, curLoop, inplace, result, not, isXML){
- var name = match[1].replace(/\\/g, "");
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
- PSEUDO: function(match, curLoop, inplace, result, not){
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
- return false;
- }
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
- POS: function(match){
- match.unshift( true );
- return match;
- }
- },
- filters: {
- enabled: function(elem){
- return elem.disabled === false && elem.type !== "hidden";
- },
- disabled: function(elem){
- return elem.disabled === true;
- },
- checked: function(elem){
- return elem.checked === true;
- },
- selected: function(elem){
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- elem.parentNode.selectedIndex;
- return elem.selected === true;
- },
- parent: function(elem){
- return !!elem.firstChild;
- },
- empty: function(elem){
- return !elem.firstChild;
- },
- has: function(elem, i, match){
- return !!Sizzle( match[3], elem ).length;
- },
- header: function(elem){
- return /h\d/i.test( elem.nodeName );
- },
- text: function(elem){
- return "text" === elem.type;
- },
- radio: function(elem){
- return "radio" === elem.type;
- },
- checkbox: function(elem){
- return "checkbox" === elem.type;
- },
- file: function(elem){
- return "file" === elem.type;
- },
- password: function(elem){
- return "password" === elem.type;
- },
- submit: function(elem){
- return "submit" === elem.type;
- },
- image: function(elem){
- return "image" === elem.type;
- },
- reset: function(elem){
- return "reset" === elem.type;
- },
- button: function(elem){
- return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
- },
- input: function(elem){
- return /input|select|textarea|button/i.test(elem.nodeName);
- }
- },
- setFilters: {
- first: function(elem, i){
- return i === 0;
- },
- last: function(elem, i, match, array){
- return i === array.length - 1;
- },
- even: function(elem, i){
- return i % 2 === 0;
- },
- odd: function(elem, i){
- return i % 2 === 1;
- },
- lt: function(elem, i, match){
- return i < match[3] - 0;
- },
- gt: function(elem, i, match){
- return i > match[3] - 0;
- },
- nth: function(elem, i, match){
- return match[3] - 0 === i;
- },
- eq: function(elem, i, match){
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function(elem, match, i, array){
- var name = match[1], filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var i = 0, l = not.length; i < l; i++ ) {
- if ( not[i] === elem ) {
- return false;
- }
- }
-
- return true;
- } else {
- Sizzle.error( "Syntax error, unrecognized expression: " + name );
- }
- },
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
- if ( type === "first" ) {
- return true;
- }
- node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
- return true;
- case 'nth':
- var first = match[2], last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
- if ( first === 0 ) {
- return diff === 0;
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
- ID: function(elem, match){
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
- TAG: function(elem, match){
- return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
- },
- CLASS: function(elem, match){
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
- ATTR: function(elem, match){
- var name = match[1],
- result = Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
- POS: function(elem, match, i, array){
- var name = match[2], filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS;
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){
- return "\\" + (num - 0 + 1);
- }));
-}
-
-var makeArray = function(array, results) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch(e){
- makeArray = function(array, results) {
- var ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
- } else {
- if ( typeof array.length === "number" ) {
- for ( var i = 0, l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
- } else {
- for ( var i = 0; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( "sourceIndex" in document.documentElement ) {
- sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.sourceIndex ? -1 : 1;
- }
-
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.ownerDocument ? -1 : 1;
- }
-
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-function getText( elems ) {
- var ret = "", elem;
-
- for ( var i = 0; elems[i]; i++ ) {
- elem = elems[i];
-
- // Get the text from text nodes and CDATA nodes
- if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
- ret += elem.nodeValue;
-
- // Traverse everything else, except comment nodes
- } else if ( elem.nodeType !== 8 ) {
- ret += getText( elem.childNodes );
- }
- }
-
- return ret;
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date).getTime();
- form.innerHTML = "<a name='" + id + "'/>";
-
- // Inject it into the root element, check its status, and remove it quickly
- var root = document.documentElement;
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
- }
- };
-
- Expr.filter.ID = function(elem, match){
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
- root = form = null; // release memory in IE
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "<a href='#'></a>";
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
- Expr.attrHandle.href = function(elem){
- return elem.getAttribute("href", 2);
- };
- }
-
- div = null; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "<p class='TEST'></p>";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function(query, context, extra, seed){
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && context.nodeType === 9 && !isXML(context) ) {
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(e){}
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- div = null; // release memory in IE
- })();
-}
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function(match, context, isXML) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- div = null; // release memory in IE
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- elem = elem[dir];
- var match = false;
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- elem = elem[dir];
- var match = false;
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-var contains = document.compareDocumentPosition ? function(a, b){
- return !!(a.compareDocumentPosition(b) & 16);
-} : function(a, b){
- return a !== b && (a.contains ? a.contains(b) : true);
-};
-
-var isXML = function(elem){
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function(selector, context){
- var tmpSet = [], later = "", match,
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = getText;
-jQuery.isXMLDoc = isXML;
-jQuery.contains = contains;
-
-return;
-
-window.Sizzle = Sizzle;
-
-})();
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- slice = Array.prototype.slice;
-
-// Implement the identical functionality for filter and not
-var winnow = function( elements, qualifier, keep ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- return !!qualifier.call( elem, i, elem ) === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return (elem === qualifier) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
- });
-};
-
-jQuery.fn.extend({
- find: function( selector ) {
- var ret = this.pushStack( "", "find", selector ), length = 0;
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( var n = length; n < ret.length; n++ ) {
- for ( var r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && jQuery.filter( selector, this ).length > 0;
- },
-
- closest: function( selectors, context ) {
- if ( jQuery.isArray( selectors ) ) {
- var ret = [], cur = this[0], match, matches = {}, selector;
-
- if ( cur && selectors.length ) {
- for ( var i = 0, l = selectors.length; i < l; i++ ) {
- selector = selectors[i];
-
- if ( !matches[selector] ) {
- matches[selector] = jQuery.expr.match.POS.test( selector ) ?
- jQuery( selector, context || this.context ) :
- selector;
- }
- }
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( selector in matches ) {
- match = matches[selector];
-
- if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
- ret.push({ selector: selector, elem: cur });
- delete matches[selector];
- }
- }
- cur = cur.parentNode;
- }
- }
-
- return ret;
- }
-
- var pos = jQuery.expr.match.POS.test( selectors ) ?
- jQuery( selectors, context || this.context ) : null;
-
- return this.map(function( i, cur ) {
- while ( cur && cur.ownerDocument && cur !== context ) {
- if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
- return cur;
- }
- cur = cur.parentNode;
- }
- return null;
- });
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
- if ( !elem || typeof elem === "string" ) {
- return jQuery.inArray( this[0],
- // If it receives a string, the selector is used
- // If it receives nothing, the siblings are used
- elem ? jQuery( elem ) : this.parent().children() );
- }
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context || this.context ) :
- jQuery.makeArray( selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( elem.parentNode.firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, slice.call(arguments).join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [], cur = elem[dir];
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,
- rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnocache = /<script|<object|<embed|<option|<style/i,
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, // checked="checked" or checked (html5)
- fcloseTag = function( all, front, tag ) {
- return rselfClosing.test( tag ) ?
- all :
- front + "></" + tag + ">";
- },
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- };
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( text ) {
- if ( jQuery.isFunction(text) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.text( text.call(this, i, self.text()) );
- });
- }
-
- if ( typeof text !== "object" && text !== undefined ) {
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
- }
-
- return jQuery.text( this );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append(this);
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ), contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- return this.each(function() {
- jQuery( this ).wrapAll( html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- } else if ( arguments.length ) {
- var set = jQuery(arguments[0]);
- set.push.apply( set, this.toArray() );
- return this.pushStack( set, "before", arguments );
- }
- },
-
- after: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- } else if ( arguments.length ) {
- var set = this.pushStack( this, "after", arguments );
- set.push.apply( set, jQuery(arguments[0]).toArray() );
- return set;
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- return this;
- },
-
- clone: function( events ) {
- // Do the clone
- var ret = this.map(function() {
- if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
- // IE copies events bound via attachEvent when
- // using cloneNode. Calling detachEvent on the
- // clone will also remove the events from the orignal
- // In order to get around this, we use innerHTML.
- // Unfortunately, this means some modifications to
- // attributes in IE that are actually only stored
- // as properties will not be copied (such as the
- // the name attribute on an input).
- var html = this.outerHTML, ownerDocument = this.ownerDocument;
- if ( !html ) {
- var div = ownerDocument.createElement("div");
- div.appendChild( this.cloneNode(true) );
- html = div.innerHTML;
- }
-
- return jQuery.clean([html.replace(rinlinejQuery, "")
- // Handle the case in IE 8 where action=/test/> self-closes a tag
- .replace(/=([^="'>\s]+\/)>/g, '="$1">')
- .replace(rleadingWhitespace, "")], ownerDocument)[0];
- } else {
- return this.cloneNode(true);
- }
- });
-
- // Copy the events from the original to the clone
- if ( events === true ) {
- cloneCopyEvent( this, ret );
- cloneCopyEvent( this.find("*"), ret.find("*") );
- }
-
- // Return the cloned set
- return ret;
- },
-
- html: function( value ) {
- if ( value === undefined ) {
- return this[0] && this[0].nodeType === 1 ?
- this[0].innerHTML.replace(rinlinejQuery, "") :
- null;
-
- // See if we can take a shortcut and just use innerHTML
- } else if ( typeof value === "string" && !rnocache.test( value ) &&
- (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
- !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
- value = value.replace(rxhtmlTag, fcloseTag);
-
- try {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( this[i].nodeType === 1 ) {
- jQuery.cleanData( this[i].getElementsByTagName("*") );
- this[i].innerHTML = value;
- }
- }
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {
- this.empty().append( value );
- }
-
- } else if ( jQuery.isFunction( value ) ) {
- this.each(function(i){
- var self = jQuery(this), old = self.html();
- self.empty().append(function(){
- return value.call( this, i, old );
- });
- });
-
- } else {
- this.empty().append( value );
- }
-
- return this;
- },
-
- replaceWith: function( value ) {
- if ( this[0] && this[0].parentNode ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery(value).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling, parent = this.parentNode;
-
- jQuery(this).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- } else {
- return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
- }
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
- var results, first, value = args[0], scripts = [], fragment, parent;
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback, true );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call(this, i, table ? self.html() : undefined);
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- parent = value && value.parentNode;
-
- // If we're in a fragment, just use that instead of building a new one
- if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
- results = { fragment: parent };
-
- } else {
- results = buildFragment( args, this, scripts );
- }
-
- fragment = results.fragment;
-
- if ( fragment.childNodes.length === 1 ) {
- first = fragment = fragment.firstChild;
- } else {
- first = fragment.firstChild;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- callback.call(
- table ?
- root(this[i], first) :
- this[i],
- i > 0 || results.cacheable || this.length > 1 ?
- fragment.cloneNode(true) :
- fragment
- );
- }
- }
-
- if ( scripts.length ) {
- jQuery.each( scripts, evalScript );
- }
- }
-
- return this;
-
- function root( elem, cur ) {
- return jQuery.nodeName(elem, "table") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
- }
- }
-});
-
-function cloneCopyEvent(orig, ret) {
- var i = 0;
-
- ret.each(function() {
- if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
- return;
- }
-
- var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( var type in events ) {
- for ( var handler in events[ type ] ) {
- jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
- }
- }
- }
- });
-}
-
-function buildFragment( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults,
- doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
-
- // Only cache "small" (1/2 KB) strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
- !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
- cacheable = true;
- cacheresults = jQuery.fragments[ args[0] ];
- if ( cacheresults ) {
- if ( cacheresults !== 1 ) {
- fragment = cacheresults;
- }
- }
- }
-
- if ( !fragment ) {
- fragment = doc.createDocumentFragment();
- jQuery.clean( args, doc, fragment, scripts );
- }
-
- if ( cacheable ) {
- jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
- }
-
- return { fragment: fragment, cacheable: cacheable };
-}
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var ret = [], insert = jQuery( selector ),
- parent = this.length === 1 && this[0].parentNode;
-
- if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
- insert[ original ]( this[0] );
- return this;
-
- } else {
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = (i > 0 ? this.clone(true) : this).get();
- jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-jQuery.extend({
- clean: function( elems, context, fragment, scripts ) {
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" ) {
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
- }
-
- var ret = [];
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" && !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
-
- } else if ( typeof elem === "string" ) {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, fcloseTag);
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div");
-
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( var j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
-
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- ret = jQuery.merge( ret, elem );
- }
- }
-
- if ( fragment ) {
- for ( var i = 0; ret[i]; i++ ) {
- if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
- scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
- } else {
- if ( ret[i].nodeType === 1 ) {
- ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
- }
- fragment.appendChild( ret[i] );
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems ) {
- var data, id, cache = jQuery.cache,
- special = jQuery.event.special,
- deleteExpando = jQuery.support.deleteExpando;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- id = elem[ jQuery.expando ];
-
- if ( id ) {
- data = cache[ id ];
-
- if ( data.events ) {
- for ( var type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- } else {
- removeEvent( elem, type, data.handle );
- }
- }
- }
-
- if ( deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- delete cache[ id ];
- }
- }
- }
-});
-// exclude the following css properties to add px
-var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
- ralpha = /alpha\([^)]*\)/,
- ropacity = /opacity=([^)]*)/,
- rfloat = /float/i,
- rdashAlpha = /-([a-z])/ig,
- rupper = /([A-Z])/g,
- rnumpx = /^-?\d+(?:px)?$/i,
- rnum = /^-?\d/,
-
- cssShow = { position: "absolute", visibility: "hidden", display:"block" },
- cssWidth = [ "Left", "Right" ],
- cssHeight = [ "Top", "Bottom" ],
-
- // cache check for defaultView.getComputedStyle
- getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
- // normalize float css property
- styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn.css = function( name, value ) {
- return access( this, name, value, true, function( elem, name, value ) {
- if ( value === undefined ) {
- return jQuery.curCSS( elem, name );
- }
-
- if ( typeof value === "number" && !rexclude.test(name) ) {
- value += "px";
- }
-
- jQuery.style( elem, name, value );
- });
-};
-
-jQuery.extend({
- style: function( elem, name, value ) {
- // don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
- return undefined;
- }
-
- // ignore negative width and height values #1599
- if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {
- value = undefined;
- }
-
- var style = elem.style || elem, set = value !== undefined;
-
- // IE uses filters for opacity
- if ( !jQuery.support.opacity && name === "opacity" ) {
- if ( set ) {
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // Set the alpha filter to set the opacity
- var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";
- var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";
- style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;
- }
-
- return style.filter && style.filter.indexOf("opacity=") >= 0 ?
- (parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":
- "";
- }
-
- // Make sure we're using the right name for getting the float value
- if ( rfloat.test( name ) ) {
- name = styleFloat;
- }
-
- name = name.replace(rdashAlpha, fcamelCase);
-
- if ( set ) {
- style[ name ] = value;
- }
-
- return style[ name ];
- },
-
- css: function( elem, name, force, extra ) {
- if ( name === "width" || name === "height" ) {
- var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;
-
- function getWH() {
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
-
- if ( extra === "border" ) {
- return;
- }
-
- jQuery.each( which, function() {
- if ( !extra ) {
- val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
- }
-
- if ( extra === "margin" ) {
- val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
- } else {
- val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
- }
- });
- }
-
- if ( elem.offsetWidth !== 0 ) {
- getWH();
- } else {
- jQuery.swap( elem, props, getWH );
- }
-
- return Math.max(0, Math.round(val));
- }
-
- return jQuery.curCSS( elem, name, force );
- },
-
- curCSS: function( elem, name, force ) {
- var ret, style = elem.style, filter;
-
- // IE uses filters for opacity
- if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {
- ret = ropacity.test(elem.currentStyle.filter || "") ?
- (parseFloat(RegExp.$1) / 100) + "" :
- "";
-
- return ret === "" ?
- "1" :
- ret;
- }
-
- // Make sure we're using the right name for getting the float value
- if ( rfloat.test( name ) ) {
- name = styleFloat;
- }
-
- if ( !force && style && style[ name ] ) {
- ret = style[ name ];
-
- } else if ( getComputedStyle ) {
-
- // Only "float" is needed here
- if ( rfloat.test( name ) ) {
- name = "float";
- }
-
- name = name.replace( rupper, "-$1" ).toLowerCase();
-
- var defaultView = elem.ownerDocument.defaultView;
-
- if ( !defaultView ) {
- return null;
- }
-
- var computedStyle = defaultView.getComputedStyle( elem, null );
-
- if ( computedStyle ) {
- ret = computedStyle.getPropertyValue( name );
- }
-
- // We should always get a number back from opacity
- if ( name === "opacity" && ret === "" ) {
- ret = "1";
- }
-
- } else if ( elem.currentStyle ) {
- var camelCase = name.replace(rdashAlpha, fcamelCase);
-
- ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
- // Remember the original values
- var left = style.left, rsLeft = elem.runtimeStyle.left;
-
- // Put in the new values to get a computed value out
- elem.runtimeStyle.left = elem.currentStyle.left;
- style.left = camelCase === "fontSize" ? "1em" : (ret || 0);
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret;
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
-
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- callback.call( elem );
-
- // Revert the old values
- for ( var name in options ) {
- elem.style[ name ] = old[ name ];
- }
- }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- var width = elem.offsetWidth, height = elem.offsetHeight,
- skip = elem.nodeName.toLowerCase() === "tr";
-
- return width === 0 && height === 0 && !skip ?
- true :
- width > 0 && height > 0 && !skip ?
- false :
- jQuery.curCSS(elem, "display") === "none";
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-var jsc = now(),
- rscript = /<script(.|\s)*?\/script>/gi,
- rselectTextarea = /select|textarea/i,
- rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
- jsre = /=\?(&|$)/,
- rquery = /\?/,
- rts = /(\?|&)_=.*?(&|$)/,
- rurl = /^(\w+:)?\/\/([^\/?#]+)/,
- r20 = /%20/g,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load;
-
-jQuery.fn.extend({
- load: function( url, params, callback ) {
- if ( typeof url !== "string" ) {
- return _load.call( this, url );
-
- // Don't do a request if no elements are being requested
- } else if ( !this.length ) {
- return this;
- }
-
- var off = url.indexOf(" ");
- if ( off >= 0 ) {
- var selector = url.slice(off, url.length);
- url = url.slice(0, off);
- }
-
- // Default to a GET request
- var type = "GET";
-
- // If the second parameter was provided
- if ( params ) {
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
- // We assume that it's the callback
- callback = params;
- params = null;
-
- // Otherwise, build a param string
- } else if ( typeof params === "object" ) {
- params = jQuery.param( params, jQuery.ajaxSettings.traditional );
- type = "POST";
- }
- }
-
- var self = this;
-
- // Request the remote document
- jQuery.ajax({
- url: url,
- type: type,
- dataType: "html",
- data: params,
- complete: function( res, status ) {
- // If successful, inject the HTML into all the matched elements
- if ( status === "success" || status === "notmodified" ) {
- // See if a selector was specified
- self.html( selector ?
- // Create a dummy div to hold the results
- jQuery("<div />")
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append(res.responseText.replace(rscript, ""))
-
- // Locate the specified elements
- .find(selector) :
-
- // If not, just inject the full result
- res.responseText );
- }
-
- if ( callback ) {
- self.each( callback, [res.responseText, status, res] );
- }
- }
- });
-
- return this;
- },
-
- serialize: function() {
- return jQuery.param(this.serializeArray());
- },
- serializeArray: function() {
- return this.map(function() {
- return this.elements ? jQuery.makeArray(this.elements) : this;
- })
- .filter(function() {
- return this.name && !this.disabled &&
- (this.checked || rselectTextarea.test(this.nodeName) ||
- rinput.test(this.type));
- })
- .map(function( i, elem ) {
- var val = jQuery(this).val();
-
- return val == null ?
- null :
- jQuery.isArray(val) ?
- jQuery.map( val, function( val, i ) {
- return { name: elem.name, value: val };
- }) :
- { name: elem.name, value: val };
- }).get();
- }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
- jQuery.fn[o] = function( f ) {
- return this.bind(o, f);
- };
-});
-
-jQuery.extend({
-
- get: function( url, data, callback, type ) {
- // shift arguments if data argument was omited
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = null;
- }
-
- return jQuery.ajax({
- type: "GET",
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- },
-
- getScript: function( url, callback ) {
- return jQuery.get(url, null, callback, "script");
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get(url, data, callback, "json");
- },
-
- post: function( url, data, callback, type ) {
- // shift arguments if data argument was omited
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = {};
- }
-
- return jQuery.ajax({
- type: "POST",
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- },
-
- ajaxSetup: function( settings ) {
- jQuery.extend( jQuery.ajaxSettings, settings );
- },
-
- ajaxSettings: {
- url: location.href,
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- username: null,
- password: null,
- traditional: false,
- */
- // Create the request object; Microsoft failed to properly
- // implement the XMLHttpRequest in IE7 (can't request local files),
- // so we use the ActiveXObject when it is available
- // This function can be overriden by calling jQuery.ajaxSetup
- xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
- function() {
- return new window.XMLHttpRequest();
- } :
- function() {
- try {
- return new window.ActiveXObject("Microsoft.XMLHTTP");
- } catch(e) {}
- },
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- script: "text/javascript, application/javascript",
- json: "application/json, text/javascript",
- text: "text/plain",
- _default: "*/*"
- }
- },
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajax: function( origSettings ) {
- var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
-
- var jsonp, status, data,
- callbackContext = origSettings && origSettings.context || s,
- type = s.type.toUpperCase();
-
- // convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Handle JSONP Parameter Callbacks
- if ( s.dataType === "jsonp" ) {
- if ( type === "GET" ) {
- if ( !jsre.test( s.url ) ) {
- s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
- }
- } else if ( !s.data || !jsre.test(s.data) ) {
- s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
- }
- s.dataType = "json";
- }
-
- // Build temporary JSONP function
- if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
- jsonp = s.jsonpCallback || ("jsonp" + jsc++);
-
- // Replace the =? sequence both in the query string and the data
- if ( s.data ) {
- s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
- }
-
- s.url = s.url.replace(jsre, "=" + jsonp + "$1");
-
- // We need to make sure
- // that a JSONP style response is executed properly
- s.dataType = "script";
-
- // Handle JSONP-style loading
- window[ jsonp ] = window[ jsonp ] || function( tmp ) {
- data = tmp;
- success();
- complete();
- // Garbage collect
- window[ jsonp ] = undefined;
-
- try {
- delete window[ jsonp ];
- } catch(e) {}
-
- if ( head ) {
- head.removeChild( script );
- }
- };
- }
-
- if ( s.dataType === "script" && s.cache === null ) {
- s.cache = false;
- }
-
- if ( s.cache === false && type === "GET" ) {
- var ts = now();
-
- // try replacing _= if it is there
- var ret = s.url.replace(rts, "$1_=" + ts + "$2");
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
- }
-
- // If data is available, append data to url for get requests
- if ( s.data && type === "GET" ) {
- s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
- }
-
- // Watch for a new set of requests
- if ( s.global && ! jQuery.active++ ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // Matches an absolute URL, and saves the domain
- var parts = rurl.exec( s.url ),
- remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
-
- // If we're requesting a remote document
- // and trying to load JSON or Script with a GET
- if ( s.dataType === "script" && type === "GET" && remote ) {
- var head = document.getElementsByTagName("head")[0] || document.documentElement;
- var script = document.createElement("script");
- script.src = s.url;
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- // Handle Script loading
- if ( !jsonp ) {
- var done = false;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function() {
- if ( !done && (!this.readyState ||
- this.readyState === "loaded" || this.readyState === "complete") ) {
- done = true;
- success();
- complete();
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
- }
- };
- }
-
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
-
- // We handle everything using the script element injection
- return undefined;
- }
-
- var requestDone = false;
-
- // Create the request object
- var xhr = s.xhr();
-
- if ( !xhr ) {
- return;
- }
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open(type, s.url, s.async, s.username, s.password);
- } else {
- xhr.open(type, s.url, s.async);
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- // Set the correct header, if data is being sent
- if ( s.data || origSettings && origSettings.contentType ) {
- xhr.setRequestHeader("Content-Type", s.contentType);
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[s.url] ) {
- xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
- }
-
- if ( jQuery.etag[s.url] ) {
- xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
- }
- }
-
- // Set header so the called script knows that it's an XMLHttpRequest
- // Only send the header if it's not a remote XHR
- if ( !remote ) {
- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
- }
-
- // Set the Accepts header for the server, depending on the dataType
- xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
- s.accepts[ s.dataType ] + ", */*" :
- s.accepts._default );
- } catch(e) {}
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {
- // Handle the global AJAX counter
- if ( s.global && ! --jQuery.active ) {
- jQuery.event.trigger( "ajaxStop" );
- }
-
- // close opended socket
- xhr.abort();
- return false;
- }
-
- if ( s.global ) {
- trigger("ajaxSend", [xhr, s]);
- }
-
- // Wait for a response to come back
- var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
- // The request was aborted
- if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
- // Opera doesn't call onreadystatechange before this point
- // so we simulate the call
- if ( !requestDone ) {
- complete();
- }
-
- requestDone = true;
- if ( xhr ) {
- xhr.onreadystatechange = jQuery.noop;
- }
-
- // The transfer is complete and the data is available, or the request timed out
- } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
- requestDone = true;
- xhr.onreadystatechange = jQuery.noop;
-
- status = isTimeout === "timeout" ?
- "timeout" :
- !jQuery.httpSuccess( xhr ) ?
- "error" :
- s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
- "notmodified" :
- "success";
-
- var errMsg;
-
- if ( status === "success" ) {
- // Watch for, and catch, XML document parse errors
- try {
- // process the data (runs the xml through httpData regardless of callback)
- data = jQuery.httpData( xhr, s.dataType, s );
- } catch(err) {
- status = "parsererror";
- errMsg = err;
- }
- }
-
- // Make sure that the request was successful or notmodified
- if ( status === "success" || status === "notmodified" ) {
- // JSONP handles its own success callback
- if ( !jsonp ) {
- success();
- }
- } else {
- jQuery.handleError(s, xhr, status, errMsg);
- }
-
- // Fire the complete handlers
- complete();
-
- if ( isTimeout === "timeout" ) {
- xhr.abort();
- }
-
- // Stop memory leaks
- if ( s.async ) {
- xhr = null;
- }
- }
- };
-
- // Override the abort handler, if we can (IE doesn't allow it, but that's OK)
- // Opera doesn't fire onreadystatechange at all on abort
- try {
- var oldAbort = xhr.abort;
- xhr.abort = function() {
- if ( xhr ) {
- oldAbort.call( xhr );
- }
-
- onreadystatechange( "abort" );
- };
- } catch(e) { }
-
- // Timeout checker
- if ( s.async && s.timeout > 0 ) {
- setTimeout(function() {
- // Check to see if the request is still happening
- if ( xhr && !requestDone ) {
- onreadystatechange( "timeout" );
- }
- }, s.timeout);
- }
-
- // Send the data
- try {
- xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );
- } catch(e) {
- jQuery.handleError(s, xhr, null, e);
- // Fire the complete handlers
- complete();
- }
-
- // firefox 1.5 doesn't fire statechange for sync requests
- if ( !s.async ) {
- onreadystatechange();
- }
-
- function success() {
- // If a local callback was specified, fire it and pass it the data
- if ( s.success ) {
- s.success.call( callbackContext, data, status, xhr );
- }
-
- // Fire the global callback
- if ( s.global ) {
- trigger( "ajaxSuccess", [xhr, s] );
- }
- }
-
- function complete() {
- // Process result
- if ( s.complete ) {
- s.complete.call( callbackContext, xhr, status);
- }
-
- // The request was completed
- if ( s.global ) {
- trigger( "ajaxComplete", [xhr, s] );
- }
-
- // Handle the global AJAX counter
- if ( s.global && ! --jQuery.active ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
-
- function trigger(type, args) {
- (s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);
- }
-
- // return XMLHttpRequest to allow aborting the request etc.
- return xhr;
- },
-
- handleError: function( s, xhr, status, e ) {
- // If a local callback was specified, fire it
- if ( s.error ) {
- s.error.call( s.context || s, xhr, status, e );
- }
-
- // Fire the global callback
- if ( s.global ) {
- (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
- }
- },
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Determines if an XMLHttpRequest was successful or not
- httpSuccess: function( xhr ) {
- try {
- // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
- return !xhr.status && location.protocol === "file:" ||
- // Opera returns 0 when status is 304
- ( xhr.status >= 200 && xhr.status < 300 ) ||
- xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;
- } catch(e) {}
-
- return false;
- },
-
- // Determines if an XMLHttpRequest returns NotModified
- httpNotModified: function( xhr, url ) {
- var lastModified = xhr.getResponseHeader("Last-Modified"),
- etag = xhr.getResponseHeader("Etag");
-
- if ( lastModified ) {
- jQuery.lastModified[url] = lastModified;
- }
-
- if ( etag ) {
- jQuery.etag[url] = etag;
- }
-
- // Opera returns 0 when status is 304
- return xhr.status === 304 || xhr.status === 0;
- },
-
- httpData: function( xhr, type, s ) {
- var ct = xhr.getResponseHeader("content-type") || "",
- xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
- data = xml ? xhr.responseXML : xhr.responseText;
-
- if ( xml && data.documentElement.nodeName === "parsererror" ) {
- jQuery.error( "parsererror" );
- }
-
- // Allow a pre-filtering function to sanitize the response
- // s is checked to keep backwards compatibility
- if ( s && s.dataFilter ) {
- data = s.dataFilter( data, type );
- }
-
- // The filter can actually parse the response
- if ( typeof data === "string" ) {
- // Get the JavaScript object, if JSON is used.
- if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
- data = jQuery.parseJSON( data );
-
- // If the type is "script", eval it in global context
- } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
- jQuery.globalEval( data );
- }
- }
-
- return data;
- },
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- param: function( a, traditional ) {
- var s = [];
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray(a) || a.jquery ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( var prefix in a ) {
- buildParams( prefix, a[prefix] );
- }
- }
-
- // Return the resulting serialization
- return s.join("&").replace(r20, "+");
-
- function buildParams( prefix, obj ) {
- if ( jQuery.isArray(obj) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || /\[\]$/.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );
- }
- });
-
- } else if ( !traditional && obj != null && typeof obj === "object" ) {
- // Serialize object item.
- jQuery.each( obj, function( k, v ) {
- buildParams( prefix + "[" + k + "]", v );
- });
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
- }
-
- function add( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction(value) ? value() : value;
- s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
- }
- }
-});
-var elemdisplay = {},
- rfxtypes = /toggle|show|hide/,
- rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,
- timerId,
- fxAttrs = [
- // height animations
- [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
- // width animations
- [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
- // opacity animations
- [ "opacity" ]
- ];
-
-jQuery.fn.extend({
- show: function( speed, callback ) {
- if ( speed || speed === 0) {
- return this.animate( genFx("show", 3), speed, callback);
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var old = jQuery.data(this[i], "olddisplay");
-
- this[i].style.display = old || "";
-
- if ( jQuery.css(this[i], "display") === "none" ) {
- var nodeName = this[i].nodeName, display;
-
- if ( elemdisplay[ nodeName ] ) {
- display = elemdisplay[ nodeName ];
-
- } else {
- var elem = jQuery("<" + nodeName + " />").appendTo("body");
-
- display = elem.css("display");
-
- if ( display === "none" ) {
- display = "block";
- }
-
- elem.remove();
-
- elemdisplay[ nodeName ] = display;
- }
-
- jQuery.data(this[i], "olddisplay", display);
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( var j = 0, k = this.length; j < k; j++ ) {
- this[j].style.display = jQuery.data(this[j], "olddisplay") || "";
- }
-
- return this;
- }
- },
-
- hide: function( speed, callback ) {
- if ( speed || speed === 0 ) {
- return this.animate( genFx("hide", 3), speed, callback);
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var old = jQuery.data(this[i], "olddisplay");
- if ( !old && old !== "none" ) {
- jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( var j = 0, k = this.length; j < k; j++ ) {
- this[j].style.display = "none";
- }
-
- return this;
- }
- },
-
- // Save the old toggle function
- _toggle: jQuery.fn.toggle,
-
- toggle: function( fn, fn2 ) {
- var bool = typeof fn === "boolean";
-
- if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
- this._toggle.apply( this, arguments );
-
- } else if ( fn == null || bool ) {
- this.each(function() {
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- });
-
- } else {
- this.animate(genFx("toggle", 3), fn, fn2);
- }
-
- return this;
- },
-
- fadeTo: function( speed, to, callback ) {
- return this.filter(":hidden").css("opacity", 0).show().end()
- .animate({opacity: to}, speed, callback);
- },
-
- animate: function( prop, speed, easing, callback ) {
- var optall = jQuery.speed(speed, easing, callback);
-
- if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete );
- }
-
- return this[ optall.queue === false ? "each" : "queue" ](function() {
- var opt = jQuery.extend({}, optall), p,
- hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),
- self = this;
-
- for ( p in prop ) {
- var name = p.replace(rdashAlpha, fcamelCase);
-
- if ( p !== name ) {
- prop[ name ] = prop[ p ];
- delete prop[ p ];
- p = name;
- }
-
- if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
- return opt.complete.call(this);
- }
-
- if ( ( p === "height" || p === "width" ) && this.style ) {
- // Store display property
- opt.display = jQuery.css(this, "display");
-
- // Make sure that nothing sneaks out
- opt.overflow = this.style.overflow;
- }
-
- if ( jQuery.isArray( prop[p] ) ) {
- // Create (if needed) and add to specialEasing
- (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
- prop[p] = prop[p][0];
- }
- }
-
- if ( opt.overflow != null ) {
- this.style.overflow = "hidden";
- }
-
- opt.curAnim = jQuery.extend({}, prop);
-
- jQuery.each( prop, function( name, val ) {
- var e = new jQuery.fx( self, opt, name );
-
- if ( rfxtypes.test(val) ) {
- e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
-
- } else {
- var parts = rfxnum.exec(val),
- start = e.cur(true) || 0;
-
- if ( parts ) {
- var end = parseFloat( parts[2] ),
- unit = parts[3] || "px";
-
- // We need to compute starting value
- if ( unit !== "px" ) {
- self.style[ name ] = (end || 1) + unit;
- start = ((end || 1) / e.cur(true)) * start;
- self.style[ name ] = start + unit;
- }
-
- // If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] ) {
- end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
- }
-
- e.custom( start, end, unit );
-
- } else {
- e.custom( start, val, "" );
- }
- }
- });
-
- // For JS strict compliance
- return true;
- });
- },
-
- stop: function( clearQueue, gotoEnd ) {
- var timers = jQuery.timers;
-
- if ( clearQueue ) {
- this.queue([]);
- }
-
- this.each(function() {
- // go in reverse order so anything added to the queue during the loop is ignored
- for ( var i = timers.length - 1; i >= 0; i-- ) {
- if ( timers[i].elem === this ) {
- if (gotoEnd) {
- // force the next step to be the last
- timers[i](true);
- }
-
- timers.splice(i, 1);
- }
- }
- });
-
- // start the next in the queue if the last step wasn't forced
- if ( !gotoEnd ) {
- this.dequeue();
- }
-
- return this;
- }
-
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show", 1),
- slideUp: genFx("hide", 1),
- slideToggle: genFx("toggle", 1),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, callback ) {
- return this.animate( props, speed, callback );
- };
-});
-
-jQuery.extend({
- speed: function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? speed : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
-
- // Queueing
- opt.old = opt.complete;
- opt.complete = function() {
- if ( opt.queue !== false ) {
- jQuery(this).dequeue();
- }
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
- };
-
- return opt;
- },
-
- easing: {
- linear: function( p, n, firstNum, diff ) {
- return firstNum + diff * p;
- },
- swing: function( p, n, firstNum, diff ) {
- return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
- }
- },
-
- timers: [],
-
- fx: function( elem, options, prop ) {
- this.options = options;
- this.elem = elem;
- this.prop = prop;
-
- if ( !options.orig ) {
- options.orig = {};
- }
- }
-
-});
-
-jQuery.fx.prototype = {
- // Simple function for setting a style value
- update: function() {
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
-
- // Set display property to block for height/width animations
- if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {
- this.elem.style.display = "block";
- }
- },
-
- // Get the current size
- cur: function( force ) {
- if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
- return this.elem[ this.prop ];
- }
-
- var r = parseFloat(jQuery.css(this.elem, this.prop, force));
- return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
- },
-
- // Start an animation from one number to another
- custom: function( from, to, unit ) {
- this.startTime = now();
- this.start = from;
- this.end = to;
- this.unit = unit || this.unit || "px";
- this.now = this.start;
- this.pos = this.state = 0;
-
- var self = this;
- function t( gotoEnd ) {
- return self.step(gotoEnd);
- }
-
- t.elem = this.elem;
-
- if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval(jQuery.fx.tick, 13);
- }
- },
-
- // Simple 'show' function
- show: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.show = true;
-
- // Begin the animation
- // Make sure that we start at a small width/height to avoid any
- // flash of content
- this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
-
- // Start by showing the element
- jQuery( this.elem ).show();
- },
-
- // Simple 'hide' function
- hide: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.hide = true;
-
- // Begin the animation
- this.custom(this.cur(), 0);
- },
-
- // Each step of an animation
- step: function( gotoEnd ) {
- var t = now(), done = true;
-
- if ( gotoEnd || t >= this.options.duration + this.startTime ) {
- this.now = this.end;
- this.pos = this.state = 1;
- this.update();
-
- this.options.curAnim[ this.prop ] = true;
-
- for ( var i in this.options.curAnim ) {
- if ( this.options.curAnim[i] !== true ) {
- done = false;
- }
- }
-
- if ( done ) {
- if ( this.options.display != null ) {
- // Reset the overflow
- this.elem.style.overflow = this.options.overflow;
-
- // Reset the display
- var old = jQuery.data(this.elem, "olddisplay");
- this.elem.style.display = old ? old : this.options.display;
-
- if ( jQuery.css(this.elem, "display") === "none" ) {
- this.elem.style.display = "block";
- }
- }
-
- // Hide the element if the "hide" operation was done
- if ( this.options.hide ) {
- jQuery(this.elem).hide();
- }
-
- // Reset the properties, if the item has been hidden or shown
- if ( this.options.hide || this.options.show ) {
- for ( var p in this.options.curAnim ) {
- jQuery.style(this.elem, p, this.options.orig[p]);
- }
- }
-
- // Execute the complete function
- this.options.complete.call( this.elem );
- }
-
- return false;
-
- } else {
- var n = t - this.startTime;
- this.state = n / this.options.duration;
-
- // Perform the easing function, defaults to swing
- var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
- var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
- this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
- this.now = this.start + ((this.end - this.start) * this.pos);
-
- // Perform the next step of the animation
- this.update();
- }
-
- return true;
- }
-};
-
-jQuery.extend( jQuery.fx, {
- tick: function() {
- var timers = jQuery.timers;
-
- for ( var i = 0; i < timers.length; i++ ) {
- if ( !timers[i]() ) {
- timers.splice(i--, 1);
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- },
-
- stop: function() {
- clearInterval( timerId );
- timerId = null;
- },
-
- speeds: {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
- },
-
- step: {
- opacity: function( fx ) {
- jQuery.style(fx.elem, "opacity", fx.now);
- },
-
- _default: function( fx ) {
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
- fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
- } else {
- fx.elem[ fx.prop ] = fx.now;
- }
- }
- }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-if ( "getBoundingClientRect" in document.documentElement ) {
- jQuery.fn.offset = function( options ) {
- var elem = this[0];
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,
- clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
- top = box.top + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,
- left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
-
- return { top: top, left: left };
- };
-
-} else {
- jQuery.fn.offset = function( options ) {
- var elem = this[0];
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- jQuery.offset.initialize();
-
- var offsetParent = elem.offsetParent, prevOffsetParent = elem,
- doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
- body = doc.body, defaultView = doc.defaultView,
- prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
- top = elem.offsetTop, left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- break;
- }
-
- computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
- }
-
- if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- top += Math.max( docElem.scrollTop, body.scrollTop );
- left += Math.max( docElem.scrollLeft, body.scrollLeft );
- }
-
- return { top: top, left: left };
- };
-}
-
-jQuery.offset = {
- initialize: function() {
- var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,
- html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-
- jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
-
- container.innerHTML = html;
- body.insertBefore( container, body.firstChild );
- innerDiv = container.firstChild;
- checkDiv = innerDiv.firstChild;
- td = innerDiv.nextSibling.firstChild.firstChild;
-
- this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
- this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
- checkDiv.style.position = "fixed", checkDiv.style.top = "20px";
- // safari subtracts parent border width here which is 5px
- this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
- checkDiv.style.position = checkDiv.style.top = "";
-
- innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";
- this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
- this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
-
- body.removeChild( container );
- body = container = innerDiv = checkDiv = table = td = null;
- jQuery.offset.initialize = jQuery.noop;
- },
-
- bodyOffset: function( body ) {
- var top = body.offsetTop, left = body.offsetLeft;
-
- jQuery.offset.initialize();
-
- if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0;
- left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- // set position first, in-case top/left are set even on static elem
- if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {
- elem.style.position = "relative";
- }
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curTop = parseInt( jQuery.curCSS( elem, "top", true ), 10 ) || 0,
- curLeft = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- var props = {
- top: (options.top - curOffset.top) + curTop,
- left: (options.left - curOffset.left) + curLeft
- };
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
- position: function() {
- if ( !this[0] ) {
- return null;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.curCSS(elem, "marginTop", true) ) || 0;
- offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth", true) ) || 0;
- parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
- var method = "scroll" + name;
-
- jQuery.fn[ method ] = function(val) {
- var elem = this[0], win;
-
- if ( !elem ) {
- return null;
- }
-
- if ( val !== undefined ) {
- // Set the scroll offset
- return this.each(function() {
- win = getWindow( this );
-
- if ( win ) {
- win.scrollTo(
- !i ? val : jQuery(win).scrollLeft(),
- i ? val : jQuery(win).scrollTop()
- );
-
- } else {
- this[ method ] = val;
- }
- });
- } else {
- win = getWindow( elem );
-
- // Return the scroll offset
- return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
- jQuery.support.boxModel && win.document.documentElement[ method ] ||
- win.document.body[ method ] :
- elem[ method ];
- }
- };
-});
-
-function getWindow( elem ) {
- return ("scrollTo" in elem && elem.document) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-// Create innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
- var type = name.toLowerCase();
-
- // innerHeight and innerWidth
- jQuery.fn["inner" + name] = function() {
- return this[0] ?
- jQuery.css( this[0], type, false, "padding" ) :
- null;
- };
-
- // outerHeight and outerWidth
- jQuery.fn["outer" + name] = function( margin ) {
- return this[0] ?
- jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :
- null;
- };
-
- jQuery.fn[ type ] = function( size ) {
- // Get window width or height
- var elem = this[0];
- if ( !elem ) {
- return size == null ? null : this;
- }
-
- if ( jQuery.isFunction( size ) ) {
- return this.each(function( i ) {
- var self = jQuery( this );
- self[ type ]( size.call( this, i, self[ type ]() ) );
- });
- }
-
- return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?
- // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
- elem.document.body[ "client" + name ] :
-
- // Get document width or height
- (elem.nodeType === 9) ? // is it a document
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
- Math.max(
- elem.documentElement["client" + name],
- elem.body["scroll" + name], elem.documentElement["scroll" + name],
- elem.body["offset" + name], elem.documentElement["offset" + name]
- ) :
-
- // Get or set width or height on the element
- size === undefined ?
- // Get width or height on the element
- jQuery.css( elem, type ) :
-
- // Set the width or height on the element (default to pixels if value is unitless)
- this.css( type, typeof size === "string" ? size : size + "px" );
- };
-
-});
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-})(window);
diff --git a/parts/django/django/contrib/admin/media/js/jquery.min.js b/parts/django/django/contrib/admin/media/js/jquery.min.js
deleted file mode 100644
index 7c24308..0000000
--- a/parts/django/django/contrib/admin/media/js/jquery.min.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/parts/django/django/contrib/admin/media/js/prepopulate.js b/parts/django/django/contrib/admin/media/js/prepopulate.js
deleted file mode 100644
index 24f24f9..0000000
--- a/parts/django/django/contrib/admin/media/js/prepopulate.js
+++ /dev/null
@@ -1,34 +0,0 @@
-(function($) {
- $.fn.prepopulate = function(dependencies, maxLength) {
- /*
- Depends on urlify.js
- Populates a selected field with the values of the dependent fields,
- URLifies and shortens the string.
- dependencies - array of dependent fields id's
- maxLength - maximum length of the URLify'd string
- */
- return this.each(function() {
- var field = $(this);
-
- field.data('_changed', false);
- field.change(function() {
- field.data('_changed', true);
- });
-
- var populate = function () {
- // Bail if the fields value has changed
- if (field.data('_changed') == true) return;
-
- var values = [];
- $.each(dependencies, function(i, field) {
- if ($(field).val().length > 0) {
- values.push($(field).val());
- }
- })
- field.val(URLify(values.join(' '), maxLength));
- };
-
- $(dependencies.join(',')).keyup(populate).change(populate).focus(populate);
- });
- };
-})(django.jQuery);
diff --git a/parts/django/django/contrib/admin/media/js/prepopulate.min.js b/parts/django/django/contrib/admin/media/js/prepopulate.min.js
deleted file mode 100644
index 98fdc93..0000000
--- a/parts/django/django/contrib/admin/media/js/prepopulate.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(a){a.fn.prepopulate=function(d,g){return this.each(function(){var b=a(this);b.data("_changed",false);b.change(function(){b.data("_changed",true)});var c=function(){if(b.data("_changed")!=true){var e=[];a.each(d,function(h,f){a(f).val().length>0&&e.push(a(f).val())});b.val(URLify(e.join(" "),g))}};a(d.join(",")).keyup(c).change(c).focus(c)})}})(django.jQuery); \ No newline at end of file
diff --git a/parts/django/django/contrib/admin/media/js/timeparse.js b/parts/django/django/contrib/admin/media/js/timeparse.js
deleted file mode 100644
index 882f41d..0000000
--- a/parts/django/django/contrib/admin/media/js/timeparse.js
+++ /dev/null
@@ -1,94 +0,0 @@
-var timeParsePatterns = [
- // 9
- { re: /^\d{1,2}$/i,
- handler: function(bits) {
- if (bits[0].length == 1) {
- return '0' + bits[0] + ':00';
- } else {
- return bits[0] + ':00';
- }
- }
- },
- // 13:00
- { re: /^\d{2}[:.]\d{2}$/i,
- handler: function(bits) {
- return bits[0].replace('.', ':');
- }
- },
- // 9:00
- { re: /^\d[:.]\d{2}$/i,
- handler: function(bits) {
- return '0' + bits[0].replace('.', ':');
- }
- },
- // 3 am / 3 a.m. / 3am
- { re: /^(\d+)\s*([ap])(?:.?m.?)?$/i,
- handler: function(bits) {
- var hour = parseInt(bits[1]);
- if (hour == 12) {
- hour = 0;
- }
- if (bits[2].toLowerCase() == 'p') {
- if (hour == 12) {
- hour = 0;
- }
- return (hour + 12) + ':00';
- } else {
- if (hour < 10) {
- return '0' + hour + ':00';
- } else {
- return hour + ':00';
- }
- }
- }
- },
- // 3.30 am / 3:15 a.m. / 3.00am
- { re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i,
- handler: function(bits) {
- var hour = parseInt(bits[1]);
- var mins = parseInt(bits[2]);
- if (mins < 10) {
- mins = '0' + mins;
- }
- if (hour == 12) {
- hour = 0;
- }
- if (bits[3].toLowerCase() == 'p') {
- if (hour == 12) {
- hour = 0;
- }
- return (hour + 12) + ':' + mins;
- } else {
- if (hour < 10) {
- return '0' + hour + ':' + mins;
- } else {
- return hour + ':' + mins;
- }
- }
- }
- },
- // noon
- { re: /^no/i,
- handler: function(bits) {
- return '12:00';
- }
- },
- // midnight
- { re: /^mid/i,
- handler: function(bits) {
- return '00:00';
- }
- }
-];
-
-function parseTimeString(s) {
- for (var i = 0; i < timeParsePatterns.length; i++) {
- var re = timeParsePatterns[i].re;
- var handler = timeParsePatterns[i].handler;
- var bits = re.exec(s);
- if (bits) {
- return handler(bits);
- }
- }
- return s;
-}
diff --git a/parts/django/django/contrib/admin/media/js/urlify.js b/parts/django/django/contrib/admin/media/js/urlify.js
deleted file mode 100644
index d8f2549..0000000
--- a/parts/django/django/contrib/admin/media/js/urlify.js
+++ /dev/null
@@ -1,140 +0,0 @@
-var LATIN_MAP = {
- 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç':
- 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I',
- 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö':
- 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U',
- 'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à':'a', 'á':'a', 'â': 'a', 'ã': 'a', 'ä':
- 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',
- 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó':
- 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u',
- 'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y'
-}
-var LATIN_SYMBOLS_MAP = {
- '©':'(c)'
-}
-var GREEK_MAP = {
- 'α':'a', 'β':'b', 'γ':'g', 'δ':'d', 'ε':'e', 'ζ':'z', 'η':'h', 'θ':'8',
- 'ι':'i', 'κ':'k', 'λ':'l', 'μ':'m', 'ν':'n', 'ξ':'3', 'ο':'o', 'π':'p',
- 'ρ':'r', 'σ':'s', 'τ':'t', 'υ':'y', 'φ':'f', 'χ':'x', 'ψ':'ps', 'ω':'w',
- 'ά':'a', 'έ':'e', 'ί':'i', 'ό':'o', 'ύ':'y', 'ή':'h', 'ώ':'w', 'ς':'s',
- 'ϊ':'i', 'ΰ':'y', 'ϋ':'y', 'ΐ':'i',
- 'Α':'A', 'Β':'B', 'Γ':'G', 'Δ':'D', 'Ε':'E', 'Ζ':'Z', 'Η':'H', 'Θ':'8',
- 'Ι':'I', 'Κ':'K', 'Λ':'L', 'Μ':'M', 'Ν':'N', 'Ξ':'3', 'Ο':'O', 'Π':'P',
- 'Ρ':'R', 'Σ':'S', 'Τ':'T', 'Υ':'Y', 'Φ':'F', 'Χ':'X', 'Ψ':'PS', 'Ω':'W',
- 'Ά':'A', 'Έ':'E', 'Ί':'I', 'Ό':'O', 'Ύ':'Y', 'Ή':'H', 'Ώ':'W', 'Ϊ':'I',
- 'Ϋ':'Y'
-}
-var TURKISH_MAP = {
- 'ş':'s', 'Ş':'S', 'ı':'i', 'İ':'I', 'ç':'c', 'Ç':'C', 'ü':'u', 'Ü':'U',
- 'ö':'o', 'Ö':'O', 'ğ':'g', 'Ğ':'G'
-}
-var RUSSIAN_MAP = {
- 'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'yo', 'ж':'zh',
- 'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o',
- 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c',
- 'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'', 'ы':'y', 'ь':'', 'э':'e', 'ю':'yu',
- 'я':'ya',
- 'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'Yo', 'Ж':'Zh',
- 'З':'Z', 'И':'I', 'Й':'J', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O',
- 'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C',
- 'Ч':'Ch', 'Ш':'Sh', 'Щ':'Sh', 'Ъ':'', 'Ы':'Y', 'Ь':'', 'Э':'E', 'Ю':'Yu',
- 'Я':'Ya'
-}
-var UKRAINIAN_MAP = {
- 'Є':'Ye', 'І':'I', 'Ї':'Yi', 'Ґ':'G', 'є':'ye', 'і':'i', 'ї':'yi', 'ґ':'g'
-}
-var CZECH_MAP = {
- 'č':'c', 'ď':'d', 'ě':'e', 'ň': 'n', 'ř':'r', 'š':'s', 'ť':'t', 'ů':'u',
- 'ž':'z', 'Č':'C', 'Ď':'D', 'Ě':'E', 'Ň': 'N', 'Ř':'R', 'Š':'S', 'Ť':'T',
- 'Ů':'U', 'Ž':'Z'
-}
-
-var POLISH_MAP = {
- 'ą':'a', 'ć':'c', 'ę':'e', 'ł':'l', 'ń':'n', 'ó':'o', 'ś':'s', 'ź':'z',
- 'ż':'z', 'Ą':'A', 'Ć':'C', 'Ę':'e', 'Ł':'L', 'Ń':'N', 'Ó':'o', 'Ś':'S',
- 'Ź':'Z', 'Ż':'Z'
-}
-
-var LATVIAN_MAP = {
- 'ā':'a', 'č':'c', 'ē':'e', 'ģ':'g', 'ī':'i', 'ķ':'k', 'ļ':'l', 'ņ':'n',
- 'š':'s', 'ū':'u', 'ž':'z', 'Ā':'A', 'Č':'C', 'Ē':'E', 'Ģ':'G', 'Ī':'i',
- 'Ķ':'k', 'Ļ':'L', 'Ņ':'N', 'Š':'S', 'Ū':'u', 'Ž':'Z'
-}
-
-var ALL_DOWNCODE_MAPS=new Array()
-ALL_DOWNCODE_MAPS[0]=LATIN_MAP
-ALL_DOWNCODE_MAPS[1]=LATIN_SYMBOLS_MAP
-ALL_DOWNCODE_MAPS[2]=GREEK_MAP
-ALL_DOWNCODE_MAPS[3]=TURKISH_MAP
-ALL_DOWNCODE_MAPS[4]=RUSSIAN_MAP
-ALL_DOWNCODE_MAPS[5]=UKRAINIAN_MAP
-ALL_DOWNCODE_MAPS[6]=CZECH_MAP
-ALL_DOWNCODE_MAPS[7]=POLISH_MAP
-ALL_DOWNCODE_MAPS[8]=LATVIAN_MAP
-
-var Downcoder = new Object();
-Downcoder.Initialize = function()
-{
- if (Downcoder.map) // already made
- return ;
- Downcoder.map ={}
- Downcoder.chars = '' ;
- for(var i in ALL_DOWNCODE_MAPS)
- {
- var lookup = ALL_DOWNCODE_MAPS[i]
- for (var c in lookup)
- {
- Downcoder.map[c] = lookup[c] ;
- Downcoder.chars += c ;
- }
- }
- Downcoder.regex = new RegExp('[' + Downcoder.chars + ']|[^' + Downcoder.chars + ']+','g') ;
-}
-
-downcode= function( slug )
-{
- Downcoder.Initialize() ;
- var downcoded =""
- var pieces = slug.match(Downcoder.regex);
- if(pieces)
- {
- for (var i = 0 ; i < pieces.length ; i++)
- {
- if (pieces[i].length == 1)
- {
- var mapped = Downcoder.map[pieces[i]] ;
- if (mapped != null)
- {
- downcoded+=mapped;
- continue ;
- }
- }
- downcoded+=pieces[i];
- }
- }
- else
- {
- downcoded = slug;
- }
- return downcoded;
-}
-
-
-function URLify(s, num_chars) {
- // changes, e.g., "Petty theft" to "petty_theft"
- // remove all these words from the string before urlifying
- s = downcode(s);
- removelist = ["a", "an", "as", "at", "before", "but", "by", "for", "from",
- "is", "in", "into", "like", "of", "off", "on", "onto", "per",
- "since", "than", "the", "this", "that", "to", "up", "via",
- "with"];
- r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
- s = s.replace(r, '');
- // if downcode doesn't hit, the char will be stripped here
- s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars
- s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
- s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
- s = s.toLowerCase(); // convert to lowercase
- return s.substring(0, num_chars);// trim to first num_chars chars
-}
-
diff --git a/parts/django/django/contrib/admin/models.py b/parts/django/django/contrib/admin/models.py
deleted file mode 100644
index 259884f..0000000
--- a/parts/django/django/contrib/admin/models.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from django.db import models
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.auth.models import User
-from django.contrib.admin.util import quote
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-from django.utils.safestring import mark_safe
-
-ADDITION = 1
-CHANGE = 2
-DELETION = 3
-
-class LogEntryManager(models.Manager):
- def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
- e = self.model(None, None, user_id, content_type_id, smart_unicode(object_id), object_repr[:200], action_flag, change_message)
- e.save()
-
-class LogEntry(models.Model):
- action_time = models.DateTimeField(_('action time'), auto_now=True)
- user = models.ForeignKey(User)
- content_type = models.ForeignKey(ContentType, blank=True, null=True)
- object_id = models.TextField(_('object id'), blank=True, null=True)
- object_repr = models.CharField(_('object repr'), max_length=200)
- action_flag = models.PositiveSmallIntegerField(_('action flag'))
- change_message = models.TextField(_('change message'), blank=True)
- objects = LogEntryManager()
- class Meta:
- verbose_name = _('log entry')
- verbose_name_plural = _('log entries')
- db_table = 'django_admin_log'
- ordering = ('-action_time',)
-
- def __repr__(self):
- return smart_unicode(self.action_time)
-
- def is_addition(self):
- return self.action_flag == ADDITION
-
- def is_change(self):
- return self.action_flag == CHANGE
-
- def is_deletion(self):
- return self.action_flag == DELETION
-
- def get_edited_object(self):
- "Returns the edited object represented by this log entry"
- return self.content_type.get_object_for_this_type(pk=self.object_id)
-
- def get_admin_url(self):
- """
- Returns the admin URL to edit the object represented by this log entry.
- This is relative to the Django admin index page.
- """
- return mark_safe(u"%s/%s/%s/" % (self.content_type.app_label, self.content_type.model, quote(self.object_id)))
diff --git a/parts/django/django/contrib/admin/options.py b/parts/django/django/contrib/admin/options.py
deleted file mode 100644
index f85efe4..0000000
--- a/parts/django/django/contrib/admin/options.py
+++ /dev/null
@@ -1,1306 +0,0 @@
-from django import forms, template
-from django.forms.formsets import all_valid
-from django.forms.models import modelform_factory, modelformset_factory, inlineformset_factory
-from django.forms.models import BaseInlineFormSet
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.admin import widgets
-from django.contrib.admin import helpers
-from django.contrib.admin.util import unquote, flatten_fieldsets, get_deleted_objects, model_ngettext, model_format_dict
-from django.contrib import messages
-from django.views.decorators.csrf import csrf_protect
-from django.core.exceptions import PermissionDenied, ValidationError
-from django.db import models, transaction
-from django.db.models.related import RelatedObject
-from django.db.models.fields import BLANK_CHOICE_DASH, FieldDoesNotExist
-from django.db.models.sql.constants import LOOKUP_SEP, QUERY_TERMS
-from django.http import Http404, HttpResponse, HttpResponseRedirect
-from django.shortcuts import get_object_or_404, render_to_response
-from django.utils.decorators import method_decorator
-from django.utils.datastructures import SortedDict
-from django.utils.functional import update_wrapper
-from django.utils.html import escape
-from django.utils.safestring import mark_safe
-from django.utils.functional import curry
-from django.utils.text import capfirst, get_text_list
-from django.utils.translation import ugettext as _
-from django.utils.translation import ungettext, ugettext_lazy
-from django.utils.encoding import force_unicode
-
-HORIZONTAL, VERTICAL = 1, 2
-# returns the <ul> class for a given radio_admin field
-get_ul_class = lambda x: 'radiolist%s' % ((x == HORIZONTAL) and ' inline' or '')
-
-class IncorrectLookupParameters(Exception):
- pass
-
-# Defaults for formfield_overrides. ModelAdmin subclasses can change this
-# by adding to ModelAdmin.formfield_overrides.
-
-FORMFIELD_FOR_DBFIELD_DEFAULTS = {
- models.DateTimeField: {
- 'form_class': forms.SplitDateTimeField,
- 'widget': widgets.AdminSplitDateTime
- },
- models.DateField: {'widget': widgets.AdminDateWidget},
- models.TimeField: {'widget': widgets.AdminTimeWidget},
- models.TextField: {'widget': widgets.AdminTextareaWidget},
- models.URLField: {'widget': widgets.AdminURLFieldWidget},
- models.IntegerField: {'widget': widgets.AdminIntegerFieldWidget},
- models.BigIntegerField: {'widget': widgets.AdminIntegerFieldWidget},
- models.CharField: {'widget': widgets.AdminTextInputWidget},
- models.ImageField: {'widget': widgets.AdminFileWidget},
- models.FileField: {'widget': widgets.AdminFileWidget},
-}
-
-csrf_protect_m = method_decorator(csrf_protect)
-
-class BaseModelAdmin(object):
- """Functionality common to both ModelAdmin and InlineAdmin."""
- __metaclass__ = forms.MediaDefiningClass
-
- raw_id_fields = ()
- fields = None
- exclude = None
- fieldsets = None
- form = forms.ModelForm
- filter_vertical = ()
- filter_horizontal = ()
- radio_fields = {}
- prepopulated_fields = {}
- formfield_overrides = {}
- readonly_fields = ()
-
- def __init__(self):
- overrides = FORMFIELD_FOR_DBFIELD_DEFAULTS.copy()
- overrides.update(self.formfield_overrides)
- self.formfield_overrides = overrides
-
- def formfield_for_dbfield(self, db_field, **kwargs):
- """
- Hook for specifying the form Field instance for a given database Field
- instance.
-
- If kwargs are given, they're passed to the form Field's constructor.
- """
- request = kwargs.pop("request", None)
-
- # If the field specifies choices, we don't need to look for special
- # admin widgets - we just need to use a select widget of some kind.
- if db_field.choices:
- return self.formfield_for_choice_field(db_field, request, **kwargs)
-
- # ForeignKey or ManyToManyFields
- if isinstance(db_field, (models.ForeignKey, models.ManyToManyField)):
- # Combine the field kwargs with any options for formfield_overrides.
- # Make sure the passed in **kwargs override anything in
- # formfield_overrides because **kwargs is more specific, and should
- # always win.
- if db_field.__class__ in self.formfield_overrides:
- kwargs = dict(self.formfield_overrides[db_field.__class__], **kwargs)
-
- # Get the correct formfield.
- if isinstance(db_field, models.ForeignKey):
- formfield = self.formfield_for_foreignkey(db_field, request, **kwargs)
- elif isinstance(db_field, models.ManyToManyField):
- formfield = self.formfield_for_manytomany(db_field, request, **kwargs)
-
- # For non-raw_id fields, wrap the widget with a wrapper that adds
- # extra HTML -- the "add other" interface -- to the end of the
- # rendered output. formfield can be None if it came from a
- # OneToOneField with parent_link=True or a M2M intermediary.
- if formfield and db_field.name not in self.raw_id_fields:
- formfield.widget = widgets.RelatedFieldWidgetWrapper(formfield.widget, db_field.rel, self.admin_site)
-
- return formfield
-
- # If we've got overrides for the formfield defined, use 'em. **kwargs
- # passed to formfield_for_dbfield override the defaults.
- for klass in db_field.__class__.mro():
- if klass in self.formfield_overrides:
- kwargs = dict(self.formfield_overrides[klass], **kwargs)
- return db_field.formfield(**kwargs)
-
- # For any other type of field, just call its formfield() method.
- return db_field.formfield(**kwargs)
-
- def formfield_for_choice_field(self, db_field, request=None, **kwargs):
- """
- Get a form Field for a database Field that has declared choices.
- """
- # If the field is named as a radio_field, use a RadioSelect
- if db_field.name in self.radio_fields:
- # Avoid stomping on custom widget/choices arguments.
- if 'widget' not in kwargs:
- kwargs['widget'] = widgets.AdminRadioSelect(attrs={
- 'class': get_ul_class(self.radio_fields[db_field.name]),
- })
- if 'choices' not in kwargs:
- kwargs['choices'] = db_field.get_choices(
- include_blank = db_field.blank,
- blank_choice=[('', _('None'))]
- )
- return db_field.formfield(**kwargs)
-
- def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
- """
- Get a form Field for a ForeignKey.
- """
- db = kwargs.get('using')
- if db_field.name in self.raw_id_fields:
- kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel, using=db)
- elif db_field.name in self.radio_fields:
- kwargs['widget'] = widgets.AdminRadioSelect(attrs={
- 'class': get_ul_class(self.radio_fields[db_field.name]),
- })
- kwargs['empty_label'] = db_field.blank and _('None') or None
-
- return db_field.formfield(**kwargs)
-
- def formfield_for_manytomany(self, db_field, request=None, **kwargs):
- """
- Get a form Field for a ManyToManyField.
- """
- # If it uses an intermediary model that isn't auto created, don't show
- # a field in admin.
- if not db_field.rel.through._meta.auto_created:
- return None
- db = kwargs.get('using')
-
- if db_field.name in self.raw_id_fields:
- kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.rel, using=db)
- kwargs['help_text'] = ''
- elif db_field.name in (list(self.filter_vertical) + list(self.filter_horizontal)):
- kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
-
- return db_field.formfield(**kwargs)
-
- def _declared_fieldsets(self):
- if self.fieldsets:
- return self.fieldsets
- elif self.fields:
- return [(None, {'fields': self.fields})]
- return None
- declared_fieldsets = property(_declared_fieldsets)
-
- def get_readonly_fields(self, request, obj=None):
- return self.readonly_fields
-
- def lookup_allowed(self, lookup):
- parts = lookup.split(LOOKUP_SEP)
-
- # Last term in lookup is a query term (__exact, __startswith etc)
- # This term can be ignored.
- if len(parts) > 1 and parts[-1] in QUERY_TERMS:
- parts.pop()
-
- # Special case -- foo__id__exact and foo__id queries are implied
- # if foo has been specificially included in the lookup list; so
- # drop __id if it is the last part.
- if len(parts) > 1 and parts[-1] == self.model._meta.pk.name:
- parts.pop()
-
- try:
- self.model._meta.get_field_by_name(parts[0])
- except FieldDoesNotExist:
- # Lookups on non-existants fields are ok, since they're ignored
- # later.
- return True
- else:
- clean_lookup = LOOKUP_SEP.join(parts)
- return clean_lookup in self.list_filter or clean_lookup == self.date_hierarchy
-
-class ModelAdmin(BaseModelAdmin):
- "Encapsulates all admin options and functionality for a given model."
-
- list_display = ('__str__',)
- list_display_links = ()
- list_filter = ()
- list_select_related = False
- list_per_page = 100
- list_editable = ()
- search_fields = ()
- date_hierarchy = None
- save_as = False
- save_on_top = False
- ordering = None
- inlines = []
-
- # Custom templates (designed to be over-ridden in subclasses)
- add_form_template = None
- change_form_template = None
- change_list_template = None
- delete_confirmation_template = None
- delete_selected_confirmation_template = None
- object_history_template = None
-
- # Actions
- actions = []
- action_form = helpers.ActionForm
- actions_on_top = True
- actions_on_bottom = False
- actions_selection_counter = True
-
- def __init__(self, model, admin_site):
- self.model = model
- self.opts = model._meta
- self.admin_site = admin_site
- self.inline_instances = []
- for inline_class in self.inlines:
- inline_instance = inline_class(self.model, self.admin_site)
- self.inline_instances.append(inline_instance)
- if 'action_checkbox' not in self.list_display and self.actions is not None:
- self.list_display = ['action_checkbox'] + list(self.list_display)
- if not self.list_display_links:
- for name in self.list_display:
- if name != 'action_checkbox':
- self.list_display_links = [name]
- break
- super(ModelAdmin, self).__init__()
-
- def get_urls(self):
- from django.conf.urls.defaults import patterns, url
-
- def wrap(view):
- def wrapper(*args, **kwargs):
- return self.admin_site.admin_view(view)(*args, **kwargs)
- return update_wrapper(wrapper, view)
-
- info = self.model._meta.app_label, self.model._meta.module_name
-
- urlpatterns = patterns('',
- url(r'^$',
- wrap(self.changelist_view),
- name='%s_%s_changelist' % info),
- url(r'^add/$',
- wrap(self.add_view),
- name='%s_%s_add' % info),
- url(r'^(.+)/history/$',
- wrap(self.history_view),
- name='%s_%s_history' % info),
- url(r'^(.+)/delete/$',
- wrap(self.delete_view),
- name='%s_%s_delete' % info),
- url(r'^(.+)/$',
- wrap(self.change_view),
- name='%s_%s_change' % info),
- )
- return urlpatterns
-
- def urls(self):
- return self.get_urls()
- urls = property(urls)
-
- def _media(self):
- from django.conf import settings
-
- js = ['js/core.js', 'js/admin/RelatedObjectLookups.js',
- 'js/jquery.min.js', 'js/jquery.init.js']
- if self.actions is not None:
- js.extend(['js/actions.min.js'])
- if self.prepopulated_fields:
- js.append('js/urlify.js')
- js.append('js/prepopulate.min.js')
- if self.opts.get_ordered_objects():
- js.extend(['js/getElementsBySelector.js', 'js/dom-drag.js' , 'js/admin/ordering.js'])
-
- return forms.Media(js=['%s%s' % (settings.ADMIN_MEDIA_PREFIX, url) for url in js])
- media = property(_media)
-
- def has_add_permission(self, request):
- "Returns True if the given request has permission to add an object."
- opts = self.opts
- return request.user.has_perm(opts.app_label + '.' + opts.get_add_permission())
-
- def has_change_permission(self, request, obj=None):
- """
- Returns True if the given request has permission to change the given
- Django model instance.
-
- If `obj` is None, this should return True if the given request has
- permission to change *any* object of the given type.
- """
- opts = self.opts
- return request.user.has_perm(opts.app_label + '.' + opts.get_change_permission())
-
- def has_delete_permission(self, request, obj=None):
- """
- Returns True if the given request has permission to change the given
- Django model instance.
-
- If `obj` is None, this should return True if the given request has
- permission to delete *any* object of the given type.
- """
- opts = self.opts
- return request.user.has_perm(opts.app_label + '.' + opts.get_delete_permission())
-
- def get_model_perms(self, request):
- """
- Returns a dict of all perms for this model. This dict has the keys
- ``add``, ``change``, and ``delete`` mapping to the True/False for each
- of those actions.
- """
- return {
- 'add': self.has_add_permission(request),
- 'change': self.has_change_permission(request),
- 'delete': self.has_delete_permission(request),
- }
-
- def queryset(self, request):
- """
- Returns a QuerySet of all model instances that can be edited by the
- admin site. This is used by changelist_view.
- """
- qs = self.model._default_manager.get_query_set()
- # TODO: this should be handled by some parameter to the ChangeList.
- ordering = self.ordering or () # otherwise we might try to *None, which is bad ;)
- if ordering:
- qs = qs.order_by(*ordering)
- return qs
-
- def get_fieldsets(self, request, obj=None):
- "Hook for specifying fieldsets for the add form."
- if self.declared_fieldsets:
- return self.declared_fieldsets
- form = self.get_form(request, obj)
- fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
- return [(None, {'fields': fields})]
-
- def get_form(self, request, obj=None, **kwargs):
- """
- Returns a Form class for use in the admin add view. This is used by
- add_view and change_view.
- """
- if self.declared_fieldsets:
- fields = flatten_fieldsets(self.declared_fieldsets)
- else:
- fields = None
- if self.exclude is None:
- exclude = []
- else:
- exclude = list(self.exclude)
- exclude.extend(kwargs.get("exclude", []))
- exclude.extend(self.get_readonly_fields(request, obj))
- # if exclude is an empty list we pass None to be consistant with the
- # default on modelform_factory
- exclude = exclude or None
- defaults = {
- "form": self.form,
- "fields": fields,
- "exclude": exclude,
- "formfield_callback": curry(self.formfield_for_dbfield, request=request),
- }
- defaults.update(kwargs)
- return modelform_factory(self.model, **defaults)
-
- def get_changelist(self, request, **kwargs):
- """
- Returns the ChangeList class for use on the changelist page.
- """
- from django.contrib.admin.views.main import ChangeList
- return ChangeList
-
- def get_object(self, request, object_id):
- """
- Returns an instance matching the primary key provided. ``None`` is
- returned if no match is found (or the object_id failed validation
- against the primary key field).
- """
- queryset = self.queryset(request)
- model = queryset.model
- try:
- object_id = model._meta.pk.to_python(object_id)
- return queryset.get(pk=object_id)
- except (model.DoesNotExist, ValidationError):
- return None
-
- def get_changelist_form(self, request, **kwargs):
- """
- Returns a Form class for use in the Formset on the changelist page.
- """
- defaults = {
- "formfield_callback": curry(self.formfield_for_dbfield, request=request),
- }
- defaults.update(kwargs)
- return modelform_factory(self.model, **defaults)
-
- def get_changelist_formset(self, request, **kwargs):
- """
- Returns a FormSet class for use on the changelist page if list_editable
- is used.
- """
- defaults = {
- "formfield_callback": curry(self.formfield_for_dbfield, request=request),
- }
- defaults.update(kwargs)
- return modelformset_factory(self.model,
- self.get_changelist_form(request), extra=0,
- fields=self.list_editable, **defaults)
-
- def get_formsets(self, request, obj=None):
- for inline in self.inline_instances:
- yield inline.get_formset(request, obj)
-
- def log_addition(self, request, object):
- """
- Log that an object has been successfully added.
-
- The default implementation creates an admin LogEntry object.
- """
- from django.contrib.admin.models import LogEntry, ADDITION
- LogEntry.objects.log_action(
- user_id = request.user.pk,
- content_type_id = ContentType.objects.get_for_model(object).pk,
- object_id = object.pk,
- object_repr = force_unicode(object),
- action_flag = ADDITION
- )
-
- def log_change(self, request, object, message):
- """
- Log that an object has been successfully changed.
-
- The default implementation creates an admin LogEntry object.
- """
- from django.contrib.admin.models import LogEntry, CHANGE
- LogEntry.objects.log_action(
- user_id = request.user.pk,
- content_type_id = ContentType.objects.get_for_model(object).pk,
- object_id = object.pk,
- object_repr = force_unicode(object),
- action_flag = CHANGE,
- change_message = message
- )
-
- def log_deletion(self, request, object, object_repr):
- """
- Log that an object has been successfully deleted. Note that since the
- object is deleted, it might no longer be safe to call *any* methods
- on the object, hence this method getting object_repr.
-
- The default implementation creates an admin LogEntry object.
- """
- from django.contrib.admin.models import LogEntry, DELETION
- LogEntry.objects.log_action(
- user_id = request.user.id,
- content_type_id = ContentType.objects.get_for_model(self.model).pk,
- object_id = object.pk,
- object_repr = object_repr,
- action_flag = DELETION
- )
-
- def action_checkbox(self, obj):
- """
- A list_display column containing a checkbox widget.
- """
- return helpers.checkbox.render(helpers.ACTION_CHECKBOX_NAME, force_unicode(obj.pk))
- action_checkbox.short_description = mark_safe('<input type="checkbox" id="action-toggle" />')
- action_checkbox.allow_tags = True
-
- def get_actions(self, request):
- """
- Return a dictionary mapping the names of all actions for this
- ModelAdmin to a tuple of (callable, name, description) for each action.
- """
- # If self.actions is explicitally set to None that means that we don't
- # want *any* actions enabled on this page.
- if self.actions is None:
- return []
-
- actions = []
-
- # Gather actions from the admin site first
- for (name, func) in self.admin_site.actions:
- description = getattr(func, 'short_description', name.replace('_', ' '))
- actions.append((func, name, description))
-
- # Then gather them from the model admin and all parent classes,
- # starting with self and working back up.
- for klass in self.__class__.mro()[::-1]:
- class_actions = getattr(klass, 'actions', [])
- # Avoid trying to iterate over None
- if not class_actions:
- continue
- actions.extend([self.get_action(action) for action in class_actions])
-
- # get_action might have returned None, so filter any of those out.
- actions = filter(None, actions)
-
- # Convert the actions into a SortedDict keyed by name
- # and sorted by description.
- actions.sort(lambda a,b: cmp(a[2].lower(), b[2].lower()))
- actions = SortedDict([
- (name, (func, name, desc))
- for func, name, desc in actions
- ])
-
- return actions
-
- def get_action_choices(self, request, default_choices=BLANK_CHOICE_DASH):
- """
- Return a list of choices for use in a form object. Each choice is a
- tuple (name, description).
- """
- choices = [] + default_choices
- for func, name, description in self.get_actions(request).itervalues():
- choice = (name, description % model_format_dict(self.opts))
- choices.append(choice)
- return choices
-
- def get_action(self, action):
- """
- Return a given action from a parameter, which can either be a callable,
- or the name of a method on the ModelAdmin. Return is a tuple of
- (callable, name, description).
- """
- # If the action is a callable, just use it.
- if callable(action):
- func = action
- action = action.__name__
-
- # Next, look for a method. Grab it off self.__class__ to get an unbound
- # method instead of a bound one; this ensures that the calling
- # conventions are the same for functions and methods.
- elif hasattr(self.__class__, action):
- func = getattr(self.__class__, action)
-
- # Finally, look for a named method on the admin site
- else:
- try:
- func = self.admin_site.get_action(action)
- except KeyError:
- return None
-
- if hasattr(func, 'short_description'):
- description = func.short_description
- else:
- description = capfirst(action.replace('_', ' '))
- return func, action, description
-
- def construct_change_message(self, request, form, formsets):
- """
- Construct a change message from a changed object.
- """
- change_message = []
- if form.changed_data:
- change_message.append(_('Changed %s.') % get_text_list(form.changed_data, _('and')))
-
- if formsets:
- for formset in formsets:
- for added_object in formset.new_objects:
- change_message.append(_('Added %(name)s "%(object)s".')
- % {'name': force_unicode(added_object._meta.verbose_name),
- 'object': force_unicode(added_object)})
- for changed_object, changed_fields in formset.changed_objects:
- change_message.append(_('Changed %(list)s for %(name)s "%(object)s".')
- % {'list': get_text_list(changed_fields, _('and')),
- 'name': force_unicode(changed_object._meta.verbose_name),
- 'object': force_unicode(changed_object)})
- for deleted_object in formset.deleted_objects:
- change_message.append(_('Deleted %(name)s "%(object)s".')
- % {'name': force_unicode(deleted_object._meta.verbose_name),
- 'object': force_unicode(deleted_object)})
- change_message = ' '.join(change_message)
- return change_message or _('No fields changed.')
-
- def message_user(self, request, message):
- """
- Send a message to the user. The default implementation
- posts a message using the django.contrib.messages backend.
- """
- messages.info(request, message)
-
- def save_form(self, request, form, change):
- """
- Given a ModelForm return an unsaved instance. ``change`` is True if
- the object is being changed, and False if it's being added.
- """
- return form.save(commit=False)
-
- def save_model(self, request, obj, form, change):
- """
- Given a model instance save it to the database.
- """
- obj.save()
-
- def save_formset(self, request, form, formset, change):
- """
- Given an inline formset save it to the database.
- """
- formset.save()
-
- def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
- opts = self.model._meta
- app_label = opts.app_label
- ordered_objects = opts.get_ordered_objects()
- context.update({
- 'add': add,
- 'change': change,
- 'has_add_permission': self.has_add_permission(request),
- 'has_change_permission': self.has_change_permission(request, obj),
- 'has_delete_permission': self.has_delete_permission(request, obj),
- 'has_file_field': True, # FIXME - this should check if form or formsets have a FileField,
- 'has_absolute_url': hasattr(self.model, 'get_absolute_url'),
- 'ordered_objects': ordered_objects,
- 'form_url': mark_safe(form_url),
- 'opts': opts,
- 'content_type_id': ContentType.objects.get_for_model(self.model).id,
- 'save_as': self.save_as,
- 'save_on_top': self.save_on_top,
- 'root_path': self.admin_site.root_path,
- })
- if add and self.add_form_template is not None:
- form_template = self.add_form_template
- else:
- form_template = self.change_form_template
- context_instance = template.RequestContext(request, current_app=self.admin_site.name)
- return render_to_response(form_template or [
- "admin/%s/%s/change_form.html" % (app_label, opts.object_name.lower()),
- "admin/%s/change_form.html" % app_label,
- "admin/change_form.html"
- ], context, context_instance=context_instance)
-
- def response_add(self, request, obj, post_url_continue='../%s/'):
- """
- Determines the HttpResponse for the add_view stage.
- """
- opts = obj._meta
- pk_value = obj._get_pk_val()
-
- msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)}
- # Here, we distinguish between different save types by checking for
- # the presence of keys in request.POST.
- if request.POST.has_key("_continue"):
- self.message_user(request, msg + ' ' + _("You may edit it again below."))
- if request.POST.has_key("_popup"):
- post_url_continue += "?_popup=1"
- return HttpResponseRedirect(post_url_continue % pk_value)
-
- if request.POST.has_key("_popup"):
- return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, "%s", "%s");</script>' % \
- # escape() calls force_unicode.
- (escape(pk_value), escape(obj)))
- elif request.POST.has_key("_addanother"):
- self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
- return HttpResponseRedirect(request.path)
- else:
- self.message_user(request, msg)
-
- # Figure out where to redirect. If the user has change permission,
- # redirect to the change-list page for this object. Otherwise,
- # redirect to the admin index.
- if self.has_change_permission(request, None):
- post_url = '../'
- else:
- post_url = '../../../'
- return HttpResponseRedirect(post_url)
-
- def response_change(self, request, obj):
- """
- Determines the HttpResponse for the change_view stage.
- """
- opts = obj._meta
- pk_value = obj._get_pk_val()
-
- msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)}
- if request.POST.has_key("_continue"):
- self.message_user(request, msg + ' ' + _("You may edit it again below."))
- if request.REQUEST.has_key('_popup'):
- return HttpResponseRedirect(request.path + "?_popup=1")
- else:
- return HttpResponseRedirect(request.path)
- elif request.POST.has_key("_saveasnew"):
- msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': force_unicode(opts.verbose_name), 'obj': obj}
- self.message_user(request, msg)
- return HttpResponseRedirect("../%s/" % pk_value)
- elif request.POST.has_key("_addanother"):
- self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
- return HttpResponseRedirect("../add/")
- else:
- self.message_user(request, msg)
- return HttpResponseRedirect("../")
-
- def response_action(self, request, queryset):
- """
- Handle an admin action. This is called if a request is POSTed to the
- changelist; it returns an HttpResponse if the action was handled, and
- None otherwise.
- """
-
- # There can be multiple action forms on the page (at the top
- # and bottom of the change list, for example). Get the action
- # whose button was pushed.
- try:
- action_index = int(request.POST.get('index', 0))
- except ValueError:
- action_index = 0
-
- # Construct the action form.
- data = request.POST.copy()
- data.pop(helpers.ACTION_CHECKBOX_NAME, None)
- data.pop("index", None)
-
- # Use the action whose button was pushed
- try:
- data.update({'action': data.getlist('action')[action_index]})
- except IndexError:
- # If we didn't get an action from the chosen form that's invalid
- # POST data, so by deleting action it'll fail the validation check
- # below. So no need to do anything here
- pass
-
- action_form = self.action_form(data, auto_id=None)
- action_form.fields['action'].choices = self.get_action_choices(request)
-
- # If the form's valid we can handle the action.
- if action_form.is_valid():
- action = action_form.cleaned_data['action']
- select_across = action_form.cleaned_data['select_across']
- func, name, description = self.get_actions(request)[action]
-
- # Get the list of selected PKs. If nothing's selected, we can't
- # perform an action on it, so bail. Except we want to perform
- # the action explicitly on all objects.
- selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
- if not selected and not select_across:
- # Reminder that something needs to be selected or nothing will happen
- msg = _("Items must be selected in order to perform "
- "actions on them. No items have been changed.")
- self.message_user(request, msg)
- return None
-
- if not select_across:
- # Perform the action only on the selected objects
- queryset = queryset.filter(pk__in=selected)
-
- response = func(self, request, queryset)
-
- # Actions may return an HttpResponse, which will be used as the
- # response from the POST. If not, we'll be a good little HTTP
- # citizen and redirect back to the changelist page.
- if isinstance(response, HttpResponse):
- return response
- else:
- return HttpResponseRedirect(request.get_full_path())
- else:
- msg = _("No action selected.")
- self.message_user(request, msg)
- return None
-
- @csrf_protect_m
- @transaction.commit_on_success
- def add_view(self, request, form_url='', extra_context=None):
- "The 'add' admin view for this model."
- model = self.model
- opts = model._meta
-
- if not self.has_add_permission(request):
- raise PermissionDenied
-
- ModelForm = self.get_form(request)
- formsets = []
- if request.method == 'POST':
- form = ModelForm(request.POST, request.FILES)
- if form.is_valid():
- new_object = self.save_form(request, form, change=False)
- form_validated = True
- else:
- form_validated = False
- new_object = self.model()
- prefixes = {}
- for FormSet, inline in zip(self.get_formsets(request), self.inline_instances):
- prefix = FormSet.get_default_prefix()
- prefixes[prefix] = prefixes.get(prefix, 0) + 1
- if prefixes[prefix] != 1:
- prefix = "%s-%s" % (prefix, prefixes[prefix])
- formset = FormSet(data=request.POST, files=request.FILES,
- instance=new_object,
- save_as_new=request.POST.has_key("_saveasnew"),
- prefix=prefix, queryset=inline.queryset(request))
- formsets.append(formset)
- if all_valid(formsets) and form_validated:
- self.save_model(request, new_object, form, change=False)
- form.save_m2m()
- for formset in formsets:
- self.save_formset(request, form, formset, change=False)
-
- self.log_addition(request, new_object)
- return self.response_add(request, new_object)
- else:
- # Prepare the dict of initial data from the request.
- # We have to special-case M2Ms as a list of comma-separated PKs.
- initial = dict(request.GET.items())
- for k in initial:
- try:
- f = opts.get_field(k)
- except models.FieldDoesNotExist:
- continue
- if isinstance(f, models.ManyToManyField):
- initial[k] = initial[k].split(",")
- form = ModelForm(initial=initial)
- prefixes = {}
- for FormSet, inline in zip(self.get_formsets(request),
- self.inline_instances):
- prefix = FormSet.get_default_prefix()
- prefixes[prefix] = prefixes.get(prefix, 0) + 1
- if prefixes[prefix] != 1:
- prefix = "%s-%s" % (prefix, prefixes[prefix])
- formset = FormSet(instance=self.model(), prefix=prefix,
- queryset=inline.queryset(request))
- formsets.append(formset)
-
- adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)),
- self.prepopulated_fields, self.get_readonly_fields(request),
- model_admin=self)
- media = self.media + adminForm.media
-
- inline_admin_formsets = []
- for inline, formset in zip(self.inline_instances, formsets):
- fieldsets = list(inline.get_fieldsets(request))
- readonly = list(inline.get_readonly_fields(request))
- inline_admin_formset = helpers.InlineAdminFormSet(inline, formset,
- fieldsets, readonly, model_admin=self)
- inline_admin_formsets.append(inline_admin_formset)
- media = media + inline_admin_formset.media
-
- context = {
- 'title': _('Add %s') % force_unicode(opts.verbose_name),
- 'adminform': adminForm,
- 'is_popup': request.REQUEST.has_key('_popup'),
- 'show_delete': False,
- 'media': mark_safe(media),
- 'inline_admin_formsets': inline_admin_formsets,
- 'errors': helpers.AdminErrorList(form, formsets),
- 'root_path': self.admin_site.root_path,
- 'app_label': opts.app_label,
- }
- context.update(extra_context or {})
- return self.render_change_form(request, context, form_url=form_url, add=True)
-
- @csrf_protect_m
- @transaction.commit_on_success
- def change_view(self, request, object_id, extra_context=None):
- "The 'change' admin view for this model."
- model = self.model
- opts = model._meta
-
- obj = self.get_object(request, unquote(object_id))
-
- if not self.has_change_permission(request, obj):
- raise PermissionDenied
-
- if obj is None:
- raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
-
- if request.method == 'POST' and request.POST.has_key("_saveasnew"):
- return self.add_view(request, form_url='../add/')
-
- ModelForm = self.get_form(request, obj)
- formsets = []
- if request.method == 'POST':
- form = ModelForm(request.POST, request.FILES, instance=obj)
- if form.is_valid():
- form_validated = True
- new_object = self.save_form(request, form, change=True)
- else:
- form_validated = False
- new_object = obj
- prefixes = {}
- for FormSet, inline in zip(self.get_formsets(request, new_object),
- self.inline_instances):
- prefix = FormSet.get_default_prefix()
- prefixes[prefix] = prefixes.get(prefix, 0) + 1
- if prefixes[prefix] != 1:
- prefix = "%s-%s" % (prefix, prefixes[prefix])
- formset = FormSet(request.POST, request.FILES,
- instance=new_object, prefix=prefix,
- queryset=inline.queryset(request))
-
- formsets.append(formset)
-
- if all_valid(formsets) and form_validated:
- self.save_model(request, new_object, form, change=True)
- form.save_m2m()
- for formset in formsets:
- self.save_formset(request, form, formset, change=True)
-
- change_message = self.construct_change_message(request, form, formsets)
- self.log_change(request, new_object, change_message)
- return self.response_change(request, new_object)
-
- else:
- form = ModelForm(instance=obj)
- prefixes = {}
- for FormSet, inline in zip(self.get_formsets(request, obj), self.inline_instances):
- prefix = FormSet.get_default_prefix()
- prefixes[prefix] = prefixes.get(prefix, 0) + 1
- if prefixes[prefix] != 1:
- prefix = "%s-%s" % (prefix, prefixes[prefix])
- formset = FormSet(instance=obj, prefix=prefix,
- queryset=inline.queryset(request))
- formsets.append(formset)
-
- adminForm = helpers.AdminForm(form, self.get_fieldsets(request, obj),
- self.prepopulated_fields, self.get_readonly_fields(request, obj),
- model_admin=self)
- media = self.media + adminForm.media
-
- inline_admin_formsets = []
- for inline, formset in zip(self.inline_instances, formsets):
- fieldsets = list(inline.get_fieldsets(request, obj))
- readonly = list(inline.get_readonly_fields(request, obj))
- inline_admin_formset = helpers.InlineAdminFormSet(inline, formset,
- fieldsets, readonly, model_admin=self)
- inline_admin_formsets.append(inline_admin_formset)
- media = media + inline_admin_formset.media
-
- context = {
- 'title': _('Change %s') % force_unicode(opts.verbose_name),
- 'adminform': adminForm,
- 'object_id': object_id,
- 'original': obj,
- 'is_popup': request.REQUEST.has_key('_popup'),
- 'media': mark_safe(media),
- 'inline_admin_formsets': inline_admin_formsets,
- 'errors': helpers.AdminErrorList(form, formsets),
- 'root_path': self.admin_site.root_path,
- 'app_label': opts.app_label,
- }
- context.update(extra_context or {})
- return self.render_change_form(request, context, change=True, obj=obj)
-
- @csrf_protect_m
- def changelist_view(self, request, extra_context=None):
- "The 'change list' admin view for this model."
- from django.contrib.admin.views.main import ERROR_FLAG
- opts = self.model._meta
- app_label = opts.app_label
- if not self.has_change_permission(request, None):
- raise PermissionDenied
-
- # Check actions to see if any are available on this changelist
- actions = self.get_actions(request)
-
- # Remove action checkboxes if there aren't any actions available.
- list_display = list(self.list_display)
- if not actions:
- try:
- list_display.remove('action_checkbox')
- except ValueError:
- pass
-
- ChangeList = self.get_changelist(request)
- try:
- cl = ChangeList(request, self.model, list_display, self.list_display_links, self.list_filter,
- self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
- except IncorrectLookupParameters:
- # Wacky lookup parameters were given, so redirect to the main
- # changelist page, without parameters, and pass an 'invalid=1'
- # parameter via the query string. If wacky parameters were given
- # and the 'invalid=1' parameter was already in the query string,
- # something is screwed up with the database, so display an error
- # page.
- if ERROR_FLAG in request.GET.keys():
- return render_to_response('admin/invalid_setup.html', {'title': _('Database error')})
- return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
-
- # If the request was POSTed, this might be a bulk action or a bulk
- # edit. Try to look up an action or confirmation first, but if this
- # isn't an action the POST will fall through to the bulk edit check,
- # below.
- action_failed = False
- selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
-
- # Actions with no confirmation
- if (actions and request.method == 'POST' and
- 'index' in request.POST and '_save' not in request.POST):
- if selected:
- response = self.response_action(request, queryset=cl.get_query_set())
- if response:
- return response
- else:
- action_failed = True
- else:
- msg = _("Items must be selected in order to perform "
- "actions on them. No items have been changed.")
- self.message_user(request, msg)
- action_failed = True
-
- # Actions with confirmation
- if (actions and request.method == 'POST' and
- helpers.ACTION_CHECKBOX_NAME in request.POST and
- 'index' not in request.POST and '_save' not in request.POST):
- if selected:
- response = self.response_action(request, queryset=cl.get_query_set())
- if response:
- return response
- else:
- action_failed = True
-
- # If we're allowing changelist editing, we need to construct a formset
- # for the changelist given all the fields to be edited. Then we'll
- # use the formset to validate/process POSTed data.
- formset = cl.formset = None
-
- # Handle POSTed bulk-edit data.
- if (request.method == "POST" and self.list_editable and
- '_save' in request.POST and not action_failed):
- FormSet = self.get_changelist_formset(request)
- formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
- if formset.is_valid():
- changecount = 0
- for form in formset.forms:
- if form.has_changed():
- obj = self.save_form(request, form, change=True)
- self.save_model(request, obj, form, change=True)
- form.save_m2m()
- change_msg = self.construct_change_message(request, form, None)
- self.log_change(request, obj, change_msg)
- changecount += 1
-
- if changecount:
- if changecount == 1:
- name = force_unicode(opts.verbose_name)
- else:
- name = force_unicode(opts.verbose_name_plural)
- msg = ungettext("%(count)s %(name)s was changed successfully.",
- "%(count)s %(name)s were changed successfully.",
- changecount) % {'count': changecount,
- 'name': name,
- 'obj': force_unicode(obj)}
- self.message_user(request, msg)
-
- return HttpResponseRedirect(request.get_full_path())
-
- # Handle GET -- construct a formset for display.
- elif self.list_editable:
- FormSet = self.get_changelist_formset(request)
- formset = cl.formset = FormSet(queryset=cl.result_list)
-
- # Build the list of media to be used by the formset.
- if formset:
- media = self.media + formset.media
- else:
- media = self.media
-
- # Build the action form and populate it with available actions.
- if actions:
- action_form = self.action_form(auto_id=None)
- action_form.fields['action'].choices = self.get_action_choices(request)
- else:
- action_form = None
-
- selection_note_all = ungettext('%(total_count)s selected',
- 'All %(total_count)s selected', cl.result_count)
-
- context = {
- 'module_name': force_unicode(opts.verbose_name_plural),
- 'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
- 'selection_note_all': selection_note_all % {'total_count': cl.result_count},
- 'title': cl.title,
- 'is_popup': cl.is_popup,
- 'cl': cl,
- 'media': media,
- 'has_add_permission': self.has_add_permission(request),
- 'root_path': self.admin_site.root_path,
- 'app_label': app_label,
- 'action_form': action_form,
- 'actions_on_top': self.actions_on_top,
- 'actions_on_bottom': self.actions_on_bottom,
- 'actions_selection_counter': self.actions_selection_counter,
- }
- context.update(extra_context or {})
- context_instance = template.RequestContext(request, current_app=self.admin_site.name)
- return render_to_response(self.change_list_template or [
- 'admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()),
- 'admin/%s/change_list.html' % app_label,
- 'admin/change_list.html'
- ], context, context_instance=context_instance)
-
- @csrf_protect_m
- def delete_view(self, request, object_id, extra_context=None):
- "The 'delete' admin view for this model."
- opts = self.model._meta
- app_label = opts.app_label
-
- obj = self.get_object(request, unquote(object_id))
-
- if not self.has_delete_permission(request, obj):
- raise PermissionDenied
-
- if obj is None:
- raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
-
- # Populate deleted_objects, a data structure of all related objects that
- # will also be deleted.
- (deleted_objects, perms_needed) = get_deleted_objects((obj,), opts, request.user, self.admin_site)
-
- if request.POST: # The user has already confirmed the deletion.
- if perms_needed:
- raise PermissionDenied
- obj_display = force_unicode(obj)
- self.log_deletion(request, obj, obj_display)
- obj.delete()
-
- self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
-
- if not self.has_change_permission(request, None):
- return HttpResponseRedirect("../../../../")
- return HttpResponseRedirect("../../")
-
- context = {
- "title": _("Are you sure?"),
- "object_name": force_unicode(opts.verbose_name),
- "object": obj,
- "deleted_objects": deleted_objects,
- "perms_lacking": perms_needed,
- "opts": opts,
- "root_path": self.admin_site.root_path,
- "app_label": app_label,
- }
- context.update(extra_context or {})
- context_instance = template.RequestContext(request, current_app=self.admin_site.name)
- return render_to_response(self.delete_confirmation_template or [
- "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
- "admin/%s/delete_confirmation.html" % app_label,
- "admin/delete_confirmation.html"
- ], context, context_instance=context_instance)
-
- def history_view(self, request, object_id, extra_context=None):
- "The 'history' admin view for this model."
- from django.contrib.admin.models import LogEntry
- model = self.model
- opts = model._meta
- app_label = opts.app_label
- action_list = LogEntry.objects.filter(
- object_id = object_id,
- content_type__id__exact = ContentType.objects.get_for_model(model).id
- ).select_related().order_by('action_time')
- # If no history was found, see whether this object even exists.
- obj = get_object_or_404(model, pk=unquote(object_id))
- context = {
- 'title': _('Change history: %s') % force_unicode(obj),
- 'action_list': action_list,
- 'module_name': capfirst(force_unicode(opts.verbose_name_plural)),
- 'object': obj,
- 'root_path': self.admin_site.root_path,
- 'app_label': app_label,
- }
- context.update(extra_context or {})
- context_instance = template.RequestContext(request, current_app=self.admin_site.name)
- return render_to_response(self.object_history_template or [
- "admin/%s/%s/object_history.html" % (app_label, opts.object_name.lower()),
- "admin/%s/object_history.html" % app_label,
- "admin/object_history.html"
- ], context, context_instance=context_instance)
-
- #
- # DEPRECATED methods.
- #
- def __call__(self, request, url):
- """
- DEPRECATED: this is the old way of URL resolution, replaced by
- ``get_urls()``. This only called by AdminSite.root(), which is also
- deprecated.
-
- Again, remember that the following code only exists for
- backwards-compatibility. Any new URLs, changes to existing URLs, or
- whatever need to be done up in get_urls(), above!
-
- This function still exists for backwards-compatibility; it will be
- removed in Django 1.3.
- """
- # Delegate to the appropriate method, based on the URL.
- if url is None:
- return self.changelist_view(request)
- elif url == "add":
- return self.add_view(request)
- elif url.endswith('/history'):
- return self.history_view(request, unquote(url[:-8]))
- elif url.endswith('/delete'):
- return self.delete_view(request, unquote(url[:-7]))
- else:
- return self.change_view(request, unquote(url))
-
-class InlineModelAdmin(BaseModelAdmin):
- """
- Options for inline editing of ``model`` instances.
-
- Provide ``name`` to specify the attribute name of the ``ForeignKey`` from
- ``model`` to its parent. This is required if ``model`` has more than one
- ``ForeignKey`` to its parent.
- """
- model = None
- fk_name = None
- formset = BaseInlineFormSet
- extra = 3
- max_num = None
- template = None
- verbose_name = None
- verbose_name_plural = None
- can_delete = True
-
- def __init__(self, parent_model, admin_site):
- self.admin_site = admin_site
- self.parent_model = parent_model
- self.opts = self.model._meta
- super(InlineModelAdmin, self).__init__()
- if self.verbose_name is None:
- self.verbose_name = self.model._meta.verbose_name
- if self.verbose_name_plural is None:
- self.verbose_name_plural = self.model._meta.verbose_name_plural
-
- def _media(self):
- from django.conf import settings
- js = ['js/jquery.min.js', 'js/jquery.init.js', 'js/inlines.min.js']
- if self.prepopulated_fields:
- js.append('js/urlify.js')
- js.append('js/prepopulate.min.js')
- if self.filter_vertical or self.filter_horizontal:
- js.extend(['js/SelectBox.js' , 'js/SelectFilter2.js'])
- return forms.Media(js=['%s%s' % (settings.ADMIN_MEDIA_PREFIX, url) for url in js])
- media = property(_media)
-
- def get_formset(self, request, obj=None, **kwargs):
- """Returns a BaseInlineFormSet class for use in admin add/change views."""
- if self.declared_fieldsets:
- fields = flatten_fieldsets(self.declared_fieldsets)
- else:
- fields = None
- if self.exclude is None:
- exclude = []
- else:
- exclude = list(self.exclude)
- exclude.extend(kwargs.get("exclude", []))
- exclude.extend(self.get_readonly_fields(request, obj))
- # if exclude is an empty list we use None, since that's the actual
- # default
- exclude = exclude or None
- defaults = {
- "form": self.form,
- "formset": self.formset,
- "fk_name": self.fk_name,
- "fields": fields,
- "exclude": exclude,
- "formfield_callback": curry(self.formfield_for_dbfield, request=request),
- "extra": self.extra,
- "max_num": self.max_num,
- "can_delete": self.can_delete,
- }
- defaults.update(kwargs)
- return inlineformset_factory(self.parent_model, self.model, **defaults)
-
- def get_fieldsets(self, request, obj=None):
- if self.declared_fieldsets:
- return self.declared_fieldsets
- form = self.get_formset(request).form
- fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
- return [(None, {'fields': fields})]
-
- def queryset(self, request):
- return self.model._default_manager.all()
-
-class StackedInline(InlineModelAdmin):
- template = 'admin/edit_inline/stacked.html'
-
-class TabularInline(InlineModelAdmin):
- template = 'admin/edit_inline/tabular.html'
diff --git a/parts/django/django/contrib/admin/sites.py b/parts/django/django/contrib/admin/sites.py
deleted file mode 100644
index 1778ae4..0000000
--- a/parts/django/django/contrib/admin/sites.py
+++ /dev/null
@@ -1,534 +0,0 @@
-import re
-from django import http, template
-from django.contrib.admin import ModelAdmin
-from django.contrib.admin import actions
-from django.contrib.auth import authenticate, login
-from django.views.decorators.csrf import csrf_protect
-from django.db.models.base import ModelBase
-from django.core.exceptions import ImproperlyConfigured
-from django.core.urlresolvers import reverse
-from django.shortcuts import render_to_response
-from django.utils.functional import update_wrapper
-from django.utils.safestring import mark_safe
-from django.utils.text import capfirst
-from django.utils.translation import ugettext_lazy, ugettext as _
-from django.views.decorators.cache import never_cache
-from django.conf import settings
-
-ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.")
-LOGIN_FORM_KEY = 'this_is_the_login_form'
-
-class AlreadyRegistered(Exception):
- pass
-
-class NotRegistered(Exception):
- pass
-
-class AdminSite(object):
- """
- An AdminSite object encapsulates an instance of the Django admin application, ready
- to be hooked in to your URLconf. Models are registered with the AdminSite using the
- register() method, and the root() method can then be used as a Django view function
- that presents a full admin interface for the collection of registered models.
- """
-
- index_template = None
- app_index_template = None
- login_template = None
- logout_template = None
- password_change_template = None
- password_change_done_template = None
-
- def __init__(self, name=None, app_name='admin'):
- self._registry = {} # model_class class -> admin_class instance
- self.root_path = None
- if name is None:
- self.name = 'admin'
- else:
- self.name = name
- self.app_name = app_name
- self._actions = {'delete_selected': actions.delete_selected}
- self._global_actions = self._actions.copy()
-
- def register(self, model_or_iterable, admin_class=None, **options):
- """
- Registers the given model(s) with the given admin class.
-
- The model(s) should be Model classes, not instances.
-
- If an admin class isn't given, it will use ModelAdmin (the default
- admin options). If keyword arguments are given -- e.g., list_display --
- they'll be applied as options to the admin class.
-
- If a model is already registered, this will raise AlreadyRegistered.
- """
- if not admin_class:
- admin_class = ModelAdmin
-
- # Don't import the humongous validation code unless required
- if admin_class and settings.DEBUG:
- from django.contrib.admin.validation import validate
- else:
- validate = lambda model, adminclass: None
-
- if isinstance(model_or_iterable, ModelBase):
- model_or_iterable = [model_or_iterable]
- for model in model_or_iterable:
- if model in self._registry:
- raise AlreadyRegistered('The model %s is already registered' % model.__name__)
-
- # If we got **options then dynamically construct a subclass of
- # admin_class with those **options.
- if options:
- # For reasons I don't quite understand, without a __module__
- # the created class appears to "live" in the wrong place,
- # which causes issues later on.
- options['__module__'] = __name__
- admin_class = type("%sAdmin" % model.__name__, (admin_class,), options)
-
- # Validate (which might be a no-op)
- validate(admin_class, model)
-
- # Instantiate the admin class to save in the registry
- self._registry[model] = admin_class(model, self)
-
- def unregister(self, model_or_iterable):
- """
- Unregisters the given model(s).
-
- If a model isn't already registered, this will raise NotRegistered.
- """
- if isinstance(model_or_iterable, ModelBase):
- model_or_iterable = [model_or_iterable]
- for model in model_or_iterable:
- if model not in self._registry:
- raise NotRegistered('The model %s is not registered' % model.__name__)
- del self._registry[model]
-
- def add_action(self, action, name=None):
- """
- Register an action to be available globally.
- """
- name = name or action.__name__
- self._actions[name] = action
- self._global_actions[name] = action
-
- def disable_action(self, name):
- """
- Disable a globally-registered action. Raises KeyError for invalid names.
- """
- del self._actions[name]
-
- def get_action(self, name):
- """
- Explicitally get a registered global action wheather it's enabled or
- not. Raises KeyError for invalid names.
- """
- return self._global_actions[name]
-
- def actions(self):
- """
- Get all the enabled actions as an iterable of (name, func).
- """
- return self._actions.iteritems()
- actions = property(actions)
-
- def has_permission(self, request):
- """
- Returns True if the given HttpRequest has permission to view
- *at least one* page in the admin site.
- """
- return request.user.is_active and request.user.is_staff
-
- def check_dependencies(self):
- """
- Check that all things needed to run the admin have been correctly installed.
-
- The default implementation checks that LogEntry, ContentType and the
- auth context processor are installed.
- """
- from django.contrib.admin.models import LogEntry
- from django.contrib.contenttypes.models import ContentType
-
- if not LogEntry._meta.installed:
- raise ImproperlyConfigured("Put 'django.contrib.admin' in your "
- "INSTALLED_APPS setting in order to use the admin application.")
- if not ContentType._meta.installed:
- raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in "
- "your INSTALLED_APPS setting in order to use the admin application.")
- if not ('django.contrib.auth.context_processors.auth' in settings.TEMPLATE_CONTEXT_PROCESSORS or
- 'django.core.context_processors.auth' in settings.TEMPLATE_CONTEXT_PROCESSORS):
- raise ImproperlyConfigured("Put 'django.contrib.auth.context_processors.auth' "
- "in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.")
-
- def admin_view(self, view, cacheable=False):
- """
- Decorator to create an admin view attached to this ``AdminSite``. This
- wraps the view and provides permission checking by calling
- ``self.has_permission``.
-
- You'll want to use this from within ``AdminSite.get_urls()``:
-
- class MyAdminSite(AdminSite):
-
- def get_urls(self):
- from django.conf.urls.defaults import patterns, url
-
- urls = super(MyAdminSite, self).get_urls()
- urls += patterns('',
- url(r'^my_view/$', self.admin_view(some_view))
- )
- return urls
-
- By default, admin_views are marked non-cacheable using the
- ``never_cache`` decorator. If the view can be safely cached, set
- cacheable=True.
- """
- def inner(request, *args, **kwargs):
- if not self.has_permission(request):
- return self.login(request)
- return view(request, *args, **kwargs)
- if not cacheable:
- inner = never_cache(inner)
- # We add csrf_protect here so this function can be used as a utility
- # function for any view, without having to repeat 'csrf_protect'.
- if not getattr(view, 'csrf_exempt', False):
- inner = csrf_protect(inner)
- return update_wrapper(inner, view)
-
- def get_urls(self):
- from django.conf.urls.defaults import patterns, url, include
-
- if settings.DEBUG:
- self.check_dependencies()
-
- def wrap(view, cacheable=False):
- def wrapper(*args, **kwargs):
- return self.admin_view(view, cacheable)(*args, **kwargs)
- return update_wrapper(wrapper, view)
-
- # Admin-site-wide views.
- urlpatterns = patterns('',
- url(r'^$',
- wrap(self.index),
- name='index'),
- url(r'^logout/$',
- wrap(self.logout),
- name='logout'),
- url(r'^password_change/$',
- wrap(self.password_change, cacheable=True),
- name='password_change'),
- url(r'^password_change/done/$',
- wrap(self.password_change_done, cacheable=True),
- name='password_change_done'),
- url(r'^jsi18n/$',
- wrap(self.i18n_javascript, cacheable=True),
- name='jsi18n'),
- url(r'^r/(?P<content_type_id>\d+)/(?P<object_id>.+)/$',
- 'django.views.defaults.shortcut'),
- url(r'^(?P<app_label>\w+)/$',
- wrap(self.app_index),
- name='app_list')
- )
-
- # Add in each model's views.
- for model, model_admin in self._registry.iteritems():
- urlpatterns += patterns('',
- url(r'^%s/%s/' % (model._meta.app_label, model._meta.module_name),
- include(model_admin.urls))
- )
- return urlpatterns
-
- def urls(self):
- return self.get_urls(), self.app_name, self.name
- urls = property(urls)
-
- def password_change(self, request):
- """
- Handles the "change password" task -- both form display and validation.
- """
- from django.contrib.auth.views import password_change
- if self.root_path is not None:
- url = '%spassword_change/done/' % self.root_path
- else:
- url = reverse('admin:password_change_done', current_app=self.name)
- defaults = {
- 'post_change_redirect': url
- }
- if self.password_change_template is not None:
- defaults['template_name'] = self.password_change_template
- return password_change(request, **defaults)
-
- def password_change_done(self, request):
- """
- Displays the "success" page after a password change.
- """
- from django.contrib.auth.views import password_change_done
- defaults = {}
- if self.password_change_done_template is not None:
- defaults['template_name'] = self.password_change_done_template
- return password_change_done(request, **defaults)
-
- def i18n_javascript(self, request):
- """
- Displays the i18n JavaScript that the Django admin requires.
-
- This takes into account the USE_I18N setting. If it's set to False, the
- generated JavaScript will be leaner and faster.
- """
- if settings.USE_I18N:
- from django.views.i18n import javascript_catalog
- else:
- from django.views.i18n import null_javascript_catalog as javascript_catalog
- return javascript_catalog(request, packages='django.conf')
-
- def logout(self, request):
- """
- Logs out the user for the given HttpRequest.
-
- This should *not* assume the user is already logged in.
- """
- from django.contrib.auth.views import logout
- defaults = {}
- if self.logout_template is not None:
- defaults['template_name'] = self.logout_template
- return logout(request, **defaults)
- logout = never_cache(logout)
-
- def login(self, request):
- """
- Displays the login form for the given HttpRequest.
- """
- from django.contrib.auth.models import User
-
- # If this isn't already the login page, display it.
- if not request.POST.has_key(LOGIN_FORM_KEY):
- if request.POST:
- message = _("Please log in again, because your session has expired.")
- else:
- message = ""
- return self.display_login_form(request, message)
-
- # Check that the user accepts cookies.
- if not request.session.test_cookie_worked():
- message = _("Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again.")
- return self.display_login_form(request, message)
- else:
- request.session.delete_test_cookie()
-
- # Check the password.
- username = request.POST.get('username', None)
- password = request.POST.get('password', None)
- user = authenticate(username=username, password=password)
- if user is None:
- message = ERROR_MESSAGE
- if username is not None and u'@' in username:
- # Mistakenly entered e-mail address instead of username? Look it up.
- try:
- user = User.objects.get(email=username)
- except (User.DoesNotExist, User.MultipleObjectsReturned):
- pass
- else:
- if user.check_password(password):
- message = _("Your e-mail address is not your username."
- " Try '%s' instead.") % user.username
- return self.display_login_form(request, message)
-
- # The user data is correct; log in the user in and continue.
- else:
- if user.is_active and user.is_staff:
- login(request, user)
- return http.HttpResponseRedirect(request.get_full_path())
- else:
- return self.display_login_form(request, ERROR_MESSAGE)
- login = never_cache(login)
-
- def index(self, request, extra_context=None):
- """
- Displays the main admin index page, which lists all of the installed
- apps that have been registered in this site.
- """
- app_dict = {}
- user = request.user
- for model, model_admin in self._registry.items():
- app_label = model._meta.app_label
- has_module_perms = user.has_module_perms(app_label)
-
- if has_module_perms:
- perms = model_admin.get_model_perms(request)
-
- # Check whether user has any perm for this module.
- # If so, add the module to the model_list.
- if True in perms.values():
- model_dict = {
- 'name': capfirst(model._meta.verbose_name_plural),
- 'admin_url': mark_safe('%s/%s/' % (app_label, model.__name__.lower())),
- 'perms': perms,
- }
- if app_label in app_dict:
- app_dict[app_label]['models'].append(model_dict)
- else:
- app_dict[app_label] = {
- 'name': app_label.title(),
- 'app_url': app_label + '/',
- 'has_module_perms': has_module_perms,
- 'models': [model_dict],
- }
-
- # Sort the apps alphabetically.
- app_list = app_dict.values()
- app_list.sort(lambda x, y: cmp(x['name'], y['name']))
-
- # Sort the models alphabetically within each app.
- for app in app_list:
- app['models'].sort(lambda x, y: cmp(x['name'], y['name']))
-
- context = {
- 'title': _('Site administration'),
- 'app_list': app_list,
- 'root_path': self.root_path,
- }
- context.update(extra_context or {})
- context_instance = template.RequestContext(request, current_app=self.name)
- return render_to_response(self.index_template or 'admin/index.html', context,
- context_instance=context_instance
- )
- index = never_cache(index)
-
- def display_login_form(self, request, error_message='', extra_context=None):
- request.session.set_test_cookie()
- context = {
- 'title': _('Log in'),
- 'app_path': request.get_full_path(),
- 'error_message': error_message,
- 'root_path': self.root_path,
- }
- context.update(extra_context or {})
- context_instance = template.RequestContext(request, current_app=self.name)
- return render_to_response(self.login_template or 'admin/login.html', context,
- context_instance=context_instance
- )
-
- def app_index(self, request, app_label, extra_context=None):
- user = request.user
- has_module_perms = user.has_module_perms(app_label)
- app_dict = {}
- for model, model_admin in self._registry.items():
- if app_label == model._meta.app_label:
- if has_module_perms:
- perms = model_admin.get_model_perms(request)
-
- # Check whether user has any perm for this module.
- # If so, add the module to the model_list.
- if True in perms.values():
- model_dict = {
- 'name': capfirst(model._meta.verbose_name_plural),
- 'admin_url': '%s/' % model.__name__.lower(),
- 'perms': perms,
- }
- if app_dict:
- app_dict['models'].append(model_dict),
- else:
- # First time around, now that we know there's
- # something to display, add in the necessary meta
- # information.
- app_dict = {
- 'name': app_label.title(),
- 'app_url': '',
- 'has_module_perms': has_module_perms,
- 'models': [model_dict],
- }
- if not app_dict:
- raise http.Http404('The requested admin page does not exist.')
- # Sort the models alphabetically within each app.
- app_dict['models'].sort(lambda x, y: cmp(x['name'], y['name']))
- context = {
- 'title': _('%s administration') % capfirst(app_label),
- 'app_list': [app_dict],
- 'root_path': self.root_path,
- }
- context.update(extra_context or {})
- context_instance = template.RequestContext(request, current_app=self.name)
- return render_to_response(self.app_index_template or ('admin/%s/app_index.html' % app_label,
- 'admin/app_index.html'), context,
- context_instance=context_instance
- )
-
- def root(self, request, url):
- """
- DEPRECATED. This function is the old way of handling URL resolution, and
- is deprecated in favor of real URL resolution -- see ``get_urls()``.
-
- This function still exists for backwards-compatibility; it will be
- removed in Django 1.3.
- """
- import warnings
- warnings.warn(
- "AdminSite.root() is deprecated; use include(admin.site.urls) instead.",
- DeprecationWarning
- )
-
- #
- # Again, remember that the following only exists for
- # backwards-compatibility. Any new URLs, changes to existing URLs, or
- # whatever need to be done up in get_urls(), above!
- #
-
- if request.method == 'GET' and not request.path.endswith('/'):
- return http.HttpResponseRedirect(request.path + '/')
-
- if settings.DEBUG:
- self.check_dependencies()
-
- # Figure out the admin base URL path and stash it for later use
- self.root_path = re.sub(re.escape(url) + '$', '', request.path)
-
- url = url.rstrip('/') # Trim trailing slash, if it exists.
-
- # The 'logout' view doesn't require that the person is logged in.
- if url == 'logout':
- return self.logout(request)
-
- # Check permission to continue or display login form.
- if not self.has_permission(request):
- return self.login(request)
-
- if url == '':
- return self.index(request)
- elif url == 'password_change':
- return self.password_change(request)
- elif url == 'password_change/done':
- return self.password_change_done(request)
- elif url == 'jsi18n':
- return self.i18n_javascript(request)
- # URLs starting with 'r/' are for the "View on site" links.
- elif url.startswith('r/'):
- from django.contrib.contenttypes.views import shortcut
- return shortcut(request, *url.split('/')[1:])
- else:
- if '/' in url:
- return self.model_page(request, *url.split('/', 2))
- else:
- return self.app_index(request, url)
-
- raise http.Http404('The requested admin page does not exist.')
-
- def model_page(self, request, app_label, model_name, rest_of_url=None):
- """
- DEPRECATED. This is the old way of handling a model view on the admin
- site; the new views should use get_urls(), above.
- """
- from django.db import models
- model = models.get_model(app_label, model_name)
- if model is None:
- raise http.Http404("App %r, model %r, not found." % (app_label, model_name))
- try:
- admin_obj = self._registry[model]
- except KeyError:
- raise http.Http404("This model exists but has not been registered with the admin site.")
- return admin_obj(request, rest_of_url)
- model_page = never_cache(model_page)
-
-# This global object represents the default admin site, for the common case.
-# You can instantiate AdminSite in your own code to create a custom admin site.
-site = AdminSite()
diff --git a/parts/django/django/contrib/admin/templates/admin/404.html b/parts/django/django/contrib/admin/templates/admin/404.html
deleted file mode 100644
index 9bf4293..0000000
--- a/parts/django/django/contrib/admin/templates/admin/404.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block title %}{% trans 'Page not found' %}{% endblock %}
-
-{% block content %}
-
-<h2>{% trans 'Page not found' %}</h2>
-
-<p>{% trans "We're sorry, but the requested page could not be found." %}</p>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/500.html b/parts/django/django/contrib/admin/templates/admin/500.html
deleted file mode 100644
index b30e431..0000000
--- a/parts/django/django/contrib/admin/templates/admin/500.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans "Home" %}</a> &rsaquo; {% trans "Server error" %}</div>{% endblock %}
-
-{% block title %}{% trans 'Server error (500)' %}{% endblock %}
-
-{% block content %}
-<h1>{% trans 'Server Error <em>(500)</em>' %}</h1>
-<p>{% trans "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." %}</p>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/actions.html b/parts/django/django/contrib/admin/templates/admin/actions.html
deleted file mode 100644
index aaaa245..0000000
--- a/parts/django/django/contrib/admin/templates/admin/actions.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% load i18n %}
-<div class="actions">
- {% for field in action_form %}{% if field.label %}<label>{{ field.label }} {% endif %}{{ field }}{% if field.label %}</label>{% endif %}{% endfor %}
- <button type="submit" class="button" title="{% trans "Run the selected action" %}" name="index" value="{{ action_index|default:0 }}">{% trans "Go" %}</button>
- {% if actions_selection_counter %}
- <script type="text/javascript">var _actions_icnt="{{ cl.result_list|length|default:"0" }}";</script>
- <span class="action-counter">{{ selection_note }}</span>
- {% if cl.result_count != cl.result_list|length %}
- <span class="all">{{ selection_note_all }}</span>
- <span class="question">
- <a href="javascript:;" title="{% trans "Click here to select the objects across all pages" %}">{% blocktrans with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktrans %}</a>
- </span>
- <span class="clear"><a href="javascript:;">{% trans "Clear selection" %}</a></span>
- {% endif %}
- {% endif %}
-</div>
diff --git a/parts/django/django/contrib/admin/templates/admin/app_index.html b/parts/django/django/contrib/admin/templates/admin/app_index.html
deleted file mode 100644
index 120433d..0000000
--- a/parts/django/django/contrib/admin/templates/admin/app_index.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "admin/index.html" %}
-{% load i18n %}
-
-{% if not is_popup %}
-
-{% block breadcrumbs %}
-<div class="breadcrumbs"><a href="../">
-{% trans "Home" %}</a> &rsaquo;
-{% for app in app_list %}
-{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}
-{% endfor %}</div>{% endblock %}
-
-{% endif %}
-
-{% block sidebar %}{% endblock %} \ No newline at end of file
diff --git a/parts/django/django/contrib/admin/templates/admin/auth/user/add_form.html b/parts/django/django/contrib/admin/templates/admin/auth/user/add_form.html
deleted file mode 100644
index c8889eb..0000000
--- a/parts/django/django/contrib/admin/templates/admin/auth/user/add_form.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{% extends "admin/change_form.html" %}
-{% load i18n %}
-
-{% block form_top %}
- {% if not is_popup %}
- <p>{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p>
- {% else %}
- <p>{% trans "Enter a username and password." %}</p>
- {% endif %}
-{% endblock %}
-
-{% block after_field_sets %}
-<script type="text/javascript">document.getElementById("id_username").focus();</script>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/auth/user/change_password.html b/parts/django/django/contrib/admin/templates/admin/auth/user/change_password.html
deleted file mode 100644
index ab47385..0000000
--- a/parts/django/django/contrib/admin/templates/admin/auth/user/change_password.html
+++ /dev/null
@@ -1,54 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n admin_modify adminmedia %}
-{% block extrahead %}{{ block.super }}
-{% url admin:jsi18n as jsi18nurl %}
-<script type="text/javascript" src="{{ jsi18nurl|default:"../../../../jsi18n/" }}"></script>
-{% endblock %}
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
-{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
-{% block breadcrumbs %}{% if not is_popup %}
-<div class="breadcrumbs">
- <a href="../../../../">{% trans "Home" %}</a> &rsaquo;
- <a href="../../../">{{ opts.app_label|capfirst|escape }}</a> &rsaquo;
- <a href="../../">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
- <a href="../">{{ original|truncatewords:"18" }}</a> &rsaquo;
- {% trans 'Change password' %}
-</div>
-{% endif %}{% endblock %}
-{% block content %}<div id="content-main">
-<form action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
-<div>
-{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-{% if form.errors %}
- <p class="errornote">
- {% blocktrans count form.errors.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
-{% endif %}
-
-<p>{% blocktrans with original.username as username %}Enter a new password for the user <strong>{{ username }}</strong>.{% endblocktrans %}</p>
-
-<fieldset class="module aligned">
-
-<div class="form-row">
- {{ form.password1.errors }}
- {# TODO: get required class on label_tag #}
- <label for="id_password1" class="required">{% trans 'Password' %}:</label> {{ form.password1 }}
-</div>
-
-<div class="form-row">
- {{ form.password2.errors }}
- {# TODO: get required class on label_tag #}
- <label for="id_password2" class="required">{% trans 'Password (again)' %}:</label> {{ form.password2 }}
- <p class="help">{% trans 'Enter the same password as above, for verification.' %}</p>
-</div>
-
-</fieldset>
-
-<div class="submit-row">
-<input type="submit" value="{% trans 'Change password' %}" class="default" />
-</div>
-
-<script type="text/javascript">document.getElementById("id_password1").focus();</script>
-</div>
-</form></div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/base.html b/parts/django/django/contrib/admin/templates/admin/base.html
deleted file mode 100644
index 30a4e49..0000000
--- a/parts/django/django/contrib/admin/templates/admin/base.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE|default:"en-us" }}" xml:lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-<head>
-<title>{% block title %}{% endblock %}</title>
-<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/base.css{% endblock %}" />
-{% block extrastyle %}{% endblock %}
-<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% load adminmedia %}{% admin_media_prefix %}css/ie.css{% endblock %}" /><![endif]-->
-{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
-<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";</script>
-{% block extrahead %}{% endblock %}
-{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
-</head>
-{% load i18n %}
-
-<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
-
-<!-- Container -->
-<div id="container">
-
- {% if not is_popup %}
- <!-- Header -->
- <div id="header">
- <div id="branding">
- {% block branding %}{% endblock %}
- </div>
- {% if user.is_active and user.is_staff %}
- <div id="user-tools">
- {% trans 'Welcome,' %}
- <strong>{% filter force_escape %}{% firstof user.first_name user.username %}{% endfilter %}</strong>.
- {% block userlinks %}
- {% url django-admindocs-docroot as docsroot %}
- {% if docsroot %}
- <a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
- {% endif %}
- {% url admin:password_change as password_change_url %}
- {% if password_change_url %}
- <a href="{{ password_change_url }}">
- {% else %}
- <a href="{{ root_path }}password_change/">
- {% endif %}
- {% trans 'Change password' %}</a> /
- {% url admin:logout as logout_url %}
- {% if logout_url %}
- <a href="{{ logout_url }}">
- {% else %}
- <a href="{{ root_path }}logout/">
- {% endif %}
- {% trans 'Log out' %}</a>
- {% endblock %}
- </div>
- {% endif %}
- {% block nav-global %}{% endblock %}
- </div>
- <!-- END Header -->
- {% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans 'Home' %}</a>{% if title %} &rsaquo; {{ title }}{% endif %}</div>{% endblock %}
- {% endif %}
-
- {% if messages %}
- <ul class="messagelist">{% for message in messages %}
- <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
- {% endfor %}</ul>
- {% endif %}
-
- <!-- Content -->
- <div id="content" class="{% block coltype %}colM{% endblock %}">
- {% block pretitle %}{% endblock %}
- {% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
- {% block content %}
- {% block object-tools %}{% endblock %}
- {{ content }}
- {% endblock %}
- {% block sidebar %}{% endblock %}
- <br class="clear" />
- </div>
- <!-- END Content -->
-
- {% block footer %}<div id="footer"></div>{% endblock %}
-</div>
-<!-- END Container -->
-
-</body>
-</html>
diff --git a/parts/django/django/contrib/admin/templates/admin/base_site.html b/parts/django/django/contrib/admin/templates/admin/base_site.html
deleted file mode 100644
index b867bd2..0000000
--- a/parts/django/django/contrib/admin/templates/admin/base_site.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{% extends "admin/base.html" %}
-{% load i18n %}
-
-{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
-
-{% block branding %}
-<h1 id="site-name">{% trans 'Django administration' %}</h1>
-{% endblock %}
-
-{% block nav-global %}{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/change_form.html b/parts/django/django/contrib/admin/templates/admin/change_form.html
deleted file mode 100644
index 7c96628..0000000
--- a/parts/django/django/contrib/admin/templates/admin/change_form.html
+++ /dev/null
@@ -1,67 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n admin_modify adminmedia %}
-
-{% block extrahead %}{{ block.super }}
-{% url admin:jsi18n as jsi18nurl %}
-<script type="text/javascript" src="{{ jsi18nurl|default:"../../../jsi18n/" }}"></script>
-{{ media }}
-{% endblock %}
-
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
-
-{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
-
-{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
-
-{% block breadcrumbs %}{% if not is_popup %}
-<div class="breadcrumbs">
- <a href="../../../">{% trans "Home" %}</a> &rsaquo;
- <a href="../../">{{ app_label|capfirst|escape }}</a> &rsaquo;
- {% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} &rsaquo;
- {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
-</div>
-{% endif %}{% endblock %}
-
-{% block content %}<div id="content-main">
-{% block object-tools %}
-{% if change %}{% if not is_popup %}
- <ul class="object-tools"><li><a href="history/" class="historylink">{% trans "History" %}</a></li>
- {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
- </ul>
-{% endif %}{% endif %}
-{% endblock %}
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
-<div>
-{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-{% if save_on_top %}{% submit_row %}{% endif %}
-{% if errors %}
- <p class="errornote">
- {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
- {{ adminform.form.non_field_errors }}
-{% endif %}
-
-{% for fieldset in adminform %}
- {% include "admin/includes/fieldset.html" %}
-{% endfor %}
-
-{% block after_field_sets %}{% endblock %}
-
-{% for inline_admin_formset in inline_admin_formsets %}
- {% include inline_admin_formset.opts.template %}
-{% endfor %}
-
-{% block after_related_objects %}{% endblock %}
-
-{% submit_row %}
-
-{% if adminform and add %}
- <script type="text/javascript">document.getElementById("{{ adminform.first_field.auto_id }}").focus();</script>
-{% endif %}
-
-{# JavaScript for prepopulated fields #}
-{% prepopulated_fields_js %}
-
-</div>
-</form></div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/change_list.html b/parts/django/django/contrib/admin/templates/admin/change_list.html
deleted file mode 100644
index 3b037e5..0000000
--- a/parts/django/django/contrib/admin/templates/admin/change_list.html
+++ /dev/null
@@ -1,102 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load adminmedia admin_list i18n %}
-
-{% block extrastyle %}
- {{ block.super }}
- <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/changelists.css" />
- {% if cl.formset %}
- <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />
- {% endif %}
- {% if cl.formset or action_form %}
- {% url admin:jsi18n as jsi18nurl %}
- <script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
- {% endif %}
- {{ media.css }}
- {% if not actions_on_top and not actions_on_bottom %}
- <style>
- #changelist table thead th:first-child {width: inherit}
- </style>
- {% endif %}
-{% endblock %}
-
-{% block extrahead %}
-{{ block.super }}
-{{ media.js }}
-{% if action_form %}{% if actions_on_top or actions_on_bottom %}
-<script type="text/javascript">
-(function($) {
- $(document).ready(function($) {
- $("tr input.action-select").actions();
- });
-})(django.jQuery);
-</script>
-{% endif %}{% endif %}
-{% endblock %}
-
-{% block bodyclass %}change-list{% endblock %}
-
-{% if not is_popup %}
- {% block breadcrumbs %}
- <div class="breadcrumbs">
- <a href="../../">
- {% trans "Home" %}
- </a>
- &rsaquo;
- <a href="../">
- {{ app_label|capfirst }}
- </a>
- &rsaquo;
- {{ cl.opts.verbose_name_plural|capfirst }}
- </div>
- {% endblock %}
-{% endif %}
-
-{% block coltype %}flex{% endblock %}
-
-{% block content %}
- <div id="content-main">
- {% block object-tools %}
- {% if has_add_permission %}
- <ul class="object-tools">
- <li>
- <a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
- {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
- </a>
- </li>
- </ul>
- {% endif %}
- {% endblock %}
- {% if cl.formset.errors %}
- <p class="errornote">
- {% blocktrans count cl.formset.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
- {{ cl.formset.non_form_errors }}
- {% endif %}
- <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
- {% block search %}{% search_form cl %}{% endblock %}
- {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
-
- {% block filters %}
- {% if cl.has_filters %}
- <div id="changelist-filter">
- <h2>{% trans 'Filter' %}</h2>
- {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
- </div>
- {% endif %}
- {% endblock %}
-
- <form id="changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
- {% if cl.formset %}
- {{ cl.formset.management_form }}
- {% endif %}
-
- {% block result_list %}
- {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
- {% result_list cl %}
- {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
- {% endblock %}
- {% block pagination %}{% pagination cl %}{% endblock %}
- </form>
- </div>
- </div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/change_list_results.html b/parts/django/django/contrib/admin/templates/admin/change_list_results.html
deleted file mode 100644
index dea027c..0000000
--- a/parts/django/django/contrib/admin/templates/admin/change_list_results.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{% if result_hidden_fields %}
-<div class="hiddenfields"> {# DIV for HTML validation #}
-{% for item in result_hidden_fields %}{{ item }}{% endfor %}
-</div>
-{% endif %}
-{% if results %}
-<table cellspacing="0" id="result_list">
-<thead>
-<tr>
-{% for header in result_headers %}<th{{ header.class_attrib }}>
-{% if header.sortable %}<a href="{{ header.url }}">{% endif %}
-{{ header.text|capfirst }}
-{% if header.sortable %}</a>{% endif %}</th>{% endfor %}
-</tr>
-</thead>
-<tbody>
-{% for result in results %}
-<tr class="{% cycle 'row1' 'row2' %}">{% for item in result %}{{ item }}{% endfor %}</tr>
-{% endfor %}
-</tbody>
-</table>
-{% endif %}
diff --git a/parts/django/django/contrib/admin/templates/admin/date_hierarchy.html b/parts/django/django/contrib/admin/templates/admin/date_hierarchy.html
deleted file mode 100644
index 0058510..0000000
--- a/parts/django/django/contrib/admin/templates/admin/date_hierarchy.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{% if show %}
-<div class="xfull">
-<ul class="toplinks">
-{% if back %}<li class="date-back"><a href="{{ back.link }}">&lsaquo; {{ back.title }}</a></li>{% endif %}
-{% for choice in choices %}
-<li> {% if choice.link %}<a href="{{ choice.link }}">{% endif %}{{ choice.title }}{% if choice.link %}</a>{% endif %}</li>
-{% endfor %}
-</ul><br class="clear" />
-</div>
-{% endif %}
diff --git a/parts/django/django/contrib/admin/templates/admin/delete_confirmation.html b/parts/django/django/contrib/admin/templates/admin/delete_confirmation.html
deleted file mode 100644
index 65e73c9..0000000
--- a/parts/django/django/contrib/admin/templates/admin/delete_confirmation.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}
-<div class="breadcrumbs">
- <a href="../../../../">{% trans "Home" %}</a> &rsaquo;
- <a href="../../../">{{ app_label|capfirst }}</a> &rsaquo;
- <a href="../../">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
- <a href="../">{{ object|truncatewords:"18" }}</a> &rsaquo;
- {% trans 'Delete' %}
-</div>
-{% endblock %}
-
-{% block content %}
-{% if perms_lacking %}
- <p>{% blocktrans with object as escaped_object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</p>
- <ul>
- {% for obj in perms_lacking %}
- <li>{{ obj }}</li>
- {% endfor %}
- </ul>
-{% else %}
- <p>{% blocktrans with object as escaped_object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}</p>
- <ul>{{ deleted_objects|unordered_list }}</ul>
- <form action="" method="post">{% csrf_token %}
- <div>
- <input type="hidden" name="post" value="yes" />
- <input type="submit" value="{% trans "Yes, I'm sure" %}" />
- </div>
- </form>
-{% endif %}
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/parts/django/django/contrib/admin/templates/admin/delete_selected_confirmation.html
deleted file mode 100644
index 4aa610e..0000000
--- a/parts/django/django/contrib/admin/templates/admin/delete_selected_confirmation.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}
-<div class="breadcrumbs">
- <a href="../../">{% trans "Home" %}</a> &rsaquo;
- <a href="../">{{ app_label|capfirst }}</a> &rsaquo;
- <a href="./">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
- {% trans 'Delete multiple objects' %}
-</div>
-{% endblock %}
-
-{% block content %}
-{% if perms_lacking %}
- <p>{% blocktrans %}Deleting the {{ object_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</p>
- <ul>
- {% for obj in perms_lacking %}
- <li>{{ obj }}</li>
- {% endfor %}
- </ul>
-{% else %}
- <p>{% blocktrans %}Are you sure you want to delete the selected {{ object_name }} objects? All of the following objects and their related items will be deleted:{% endblocktrans %}</p>
- {% for deletable_object in deletable_objects %}
- <ul>{{ deletable_object|unordered_list }}</ul>
- {% endfor %}
- <form action="" method="post">{% csrf_token %}
- <div>
- {% for obj in queryset %}
- <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk }}" />
- {% endfor %}
- <input type="hidden" name="action" value="delete_selected" />
- <input type="hidden" name="post" value="yes" />
- <input type="submit" value="{% trans "Yes, I'm sure" %}" />
- </div>
- </form>
-{% endif %}
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/edit_inline/stacked.html b/parts/django/django/contrib/admin/templates/admin/edit_inline/stacked.html
deleted file mode 100644
index f1e338f..0000000
--- a/parts/django/django/contrib/admin/templates/admin/edit_inline/stacked.html
+++ /dev/null
@@ -1,82 +0,0 @@
-{% load i18n adminmedia %}
-<div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
- <h2>{{ inline_admin_formset.opts.verbose_name_plural|title }}</h2>
-{{ inline_admin_formset.formset.management_form }}
-{{ inline_admin_formset.formset.non_form_errors }}
-
-{% for inline_admin_form in inline_admin_formset %}<div class="inline-related{% if forloop.last %} empty-form last-related{% endif %}" id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
- <h3><b>{{ inline_admin_formset.opts.verbose_name|title }}:</b>&nbsp;<span class="inline_label">{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% else %}#{{ forloop.counter }}{% endif %}</span>
- {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
- {% if inline_admin_formset.formset.can_delete and inline_admin_form.original %}<span class="delete">{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}</span>{% endif %}
- </h3>
- {% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %}
- {% for fieldset in inline_admin_form %}
- {% include "admin/includes/fieldset.html" %}
- {% endfor %}
- {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
- {{ inline_admin_form.fk_field.field }}
-</div>{% endfor %}
-</div>
-
-<script type="text/javascript">
-(function($) {
- $(document).ready(function() {
- var rows = "#{{ inline_admin_formset.formset.prefix }}-group .inline-related";
- var updateInlineLabel = function(row) {
- $(rows).find(".inline_label").each(function(i) {
- var count = i + 1;
- $(this).html($(this).html().replace(/(#\d+)/g, "#" + count));
- });
- }
- var reinitDateTimeShortCuts = function() {
- // Reinitialize the calendar and clock widgets by force, yuck.
- if (typeof DateTimeShortcuts != "undefined") {
- $(".datetimeshortcuts").remove();
- DateTimeShortcuts.init();
- }
- }
- var updateSelectFilter = function() {
- // If any SelectFilter widgets were added, instantiate a new instance.
- if (typeof SelectFilter != "undefined"){
- $(".selectfilter").each(function(index, value){
- var namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length-1], false, "{% admin_media_prefix %}");
- })
- $(".selectfilterstacked").each(function(index, value){
- var namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length-1], true, "{% admin_media_prefix %}");
- })
- }
- }
- var initPrepopulatedFields = function(row) {
- row.find('.prepopulated_field').each(function() {
- var field = $(this);
- var input = field.find('input, select, textarea');
- var dependency_list = input.data('dependency_list') || [];
- var dependencies = [];
- $.each(dependency_list, function(i, field_name) {
- dependencies.push('#' + row.find(field_name).find('input, select, textarea').attr('id'));
- });
- if (dependencies.length) {
- input.prepopulate(dependencies, input.attr('maxlength'));
- }
- });
- }
- $(rows).formset({
- prefix: "{{ inline_admin_formset.formset.prefix }}",
- addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
- formCssClass: "dynamic-{{ inline_admin_formset.formset.prefix }}",
- deleteCssClass: "inline-deletelink",
- deleteText: "{% trans "Remove" %}",
- emptyCssClass: "empty-form",
- removed: updateInlineLabel,
- added: (function(row) {
- initPrepopulatedFields(row);
- reinitDateTimeShortCuts();
- updateSelectFilter();
- updateInlineLabel(row);
- })
- });
- });
-})(django.jQuery);
-</script>
diff --git a/parts/django/django/contrib/admin/templates/admin/edit_inline/tabular.html b/parts/django/django/contrib/admin/templates/admin/edit_inline/tabular.html
deleted file mode 100644
index a5b1a89..0000000
--- a/parts/django/django/contrib/admin/templates/admin/edit_inline/tabular.html
+++ /dev/null
@@ -1,128 +0,0 @@
-{% load i18n adminmedia %}
-<div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
- <div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
-{{ inline_admin_formset.formset.management_form }}
-<fieldset class="module">
- <h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
- {{ inline_admin_formset.formset.non_form_errors }}
- <table>
- <thead><tr>
- {% for field in inline_admin_formset.fields %}
- {% if not field.widget.is_hidden %}
- <th{% if forloop.first %} colspan="2"{% endif %}{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }}</th>
- {% endif %}
- {% endfor %}
- {% if inline_admin_formset.formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
- </tr></thead>
-
- <tbody>
- {% for inline_admin_form in inline_admin_formset %}
- {% if inline_admin_form.form.non_field_errors %}
- <tr><td colspan="{{ inline_admin_form.field_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
- {% endif %}
- <tr class="{% cycle "row1" "row2" %} {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last %} empty-form{% endif %}"
- id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
- <td class="original">
- {% if inline_admin_form.original or inline_admin_form.show_url %}<p>
- {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}
- {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
- </p>{% endif %}
- {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
- {{ inline_admin_form.fk_field.field }}
- {% spaceless %}
- {% for fieldset in inline_admin_form %}
- {% for line in fieldset %}
- {% for field in line %}
- {% if field.is_hidden %} {{ field.field }} {% endif %}
- {% endfor %}
- {% endfor %}
- {% endfor %}
- {% endspaceless %}
- </td>
- {% for fieldset in inline_admin_form %}
- {% for line in fieldset %}
- {% for field in line %}
- <td class="{{ field.field.name }}">
- {% if field.is_readonly %}
- <p>{{ field.contents }}</p>
- {% else %}
- {{ field.field.errors.as_ul }}
- {{ field.field }}
- {% endif %}
- </td>
- {% endfor %}
- {% endfor %}
- {% endfor %}
- {% if inline_admin_formset.formset.can_delete %}
- <td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
- {% endif %}
- </tr>
- {% endfor %}
- </tbody>
- </table>
-</fieldset>
- </div>
-</div>
-
-<script type="text/javascript">
-(function($) {
- $(document).ready(function($) {
- var rows = "#{{ inline_admin_formset.formset.prefix }}-group .tabular.inline-related tbody tr";
- var alternatingRows = function(row) {
- $(rows).not(".add-row").removeClass("row1 row2")
- .filter(":even").addClass("row1").end()
- .filter(rows + ":odd").addClass("row2");
- }
- var reinitDateTimeShortCuts = function() {
- // Reinitialize the calendar and clock widgets by force
- if (typeof DateTimeShortcuts != "undefined") {
- $(".datetimeshortcuts").remove();
- DateTimeShortcuts.init();
- }
- }
- var updateSelectFilter = function() {
- // If any SelectFilter widgets are a part of the new form,
- // instantiate a new SelectFilter instance for it.
- if (typeof SelectFilter != "undefined"){
- $(".selectfilter").each(function(index, value){
- var namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length-1], false, "{% admin_media_prefix %}");
- })
- $(".selectfilterstacked").each(function(index, value){
- var namearr = value.name.split('-');
- SelectFilter.init(value.id, namearr[namearr.length-1], true, "{% admin_media_prefix %}");
- })
- }
- }
- var initPrepopulatedFields = function(row) {
- row.find('.prepopulated_field').each(function() {
- var field = $(this);
- var input = field.find('input, select, textarea');
- var dependency_list = input.data('dependency_list') || [];
- var dependencies = [];
- $.each(dependency_list, function(i, field_name) {
- dependencies.push('#' + row.find(field_name).find('input, select, textarea').attr('id'));
- });
- if (dependencies.length) {
- input.prepopulate(dependencies, input.attr('maxlength'));
- }
- });
- }
- $(rows).formset({
- prefix: "{{ inline_admin_formset.formset.prefix }}",
- addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
- formCssClass: "dynamic-{{ inline_admin_formset.formset.prefix }}",
- deleteCssClass: "inline-deletelink",
- deleteText: "{% trans "Remove" %}",
- emptyCssClass: "empty-form",
- removed: alternatingRows,
- added: (function(row) {
- initPrepopulatedFields(row);
- reinitDateTimeShortCuts();
- updateSelectFilter();
- alternatingRows(row);
- })
- });
- });
-})(django.jQuery);
-</script>
diff --git a/parts/django/django/contrib/admin/templates/admin/filter.html b/parts/django/django/contrib/admin/templates/admin/filter.html
deleted file mode 100644
index 9ef69ff..0000000
--- a/parts/django/django/contrib/admin/templates/admin/filter.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% load i18n %}
-<h3>{% blocktrans with title as filter_title %} By {{ filter_title }} {% endblocktrans %}</h3>
-<ul>
-{% for choice in choices %}
- <li{% if choice.selected %} class="selected"{% endif %}>
- <a href="{{ choice.query_string|iriencode }}">{{ choice.display }}</a></li>
-{% endfor %}
-</ul>
diff --git a/parts/django/django/contrib/admin/templates/admin/includes/fieldset.html b/parts/django/django/contrib/admin/templates/admin/includes/fieldset.html
deleted file mode 100644
index addfd08..0000000
--- a/parts/django/django/contrib/admin/templates/admin/includes/fieldset.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<fieldset class="module aligned {{ fieldset.classes }}">
- {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
- {% if fieldset.description %}
- <div class="description">{{ fieldset.description|safe }}</div>
- {% endif %}
- {% for line in fieldset %}
- <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% for field in line %} {{ field.field.name }}{% endfor %}">
- {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
- {% for field in line %}
- <div{% if not line.fields|length_is:'1' %} class="field-box{% if not field.is_readonly and field.errors %} errors{% endif %}"{% endif %}>
- {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
- {% if field.is_checkbox %}
- {{ field.field }}{{ field.label_tag }}
- {% else %}
- {{ field.label_tag }}
- {% if field.is_readonly %}
- <p>{{ field.contents }}</p>
- {% else %}
- {{ field.field }}
- {% endif %}
- {% endif %}
- {% if field.field.field.help_text %}
- <p class="help">{{ field.field.field.help_text|safe }}</p>
- {% endif %}
- </div>
- {% endfor %}
- </div>
- {% endfor %}
-</fieldset>
diff --git a/parts/django/django/contrib/admin/templates/admin/index.html b/parts/django/django/contrib/admin/templates/admin/index.html
deleted file mode 100644
index 772474b..0000000
--- a/parts/django/django/contrib/admin/templates/admin/index.html
+++ /dev/null
@@ -1,80 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
-
-{% block coltype %}colMS{% endblock %}
-
-{% block bodyclass %}dashboard{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-
-{% block content %}
-<div id="content-main">
-
-{% if app_list %}
- {% for app in app_list %}
- <div class="module">
- <table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
- <caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
- {% for model in app.models %}
- <tr>
- {% if model.perms.change %}
- <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
- {% else %}
- <th scope="row">{{ model.name }}</th>
- {% endif %}
-
- {% if model.perms.add %}
- <td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
- {% else %}
- <td>&nbsp;</td>
- {% endif %}
-
- {% if model.perms.change %}
- <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
- {% else %}
- <td>&nbsp;</td>
- {% endif %}
- </tr>
- {% endfor %}
- </table>
- </div>
- {% endfor %}
-{% else %}
- <p>{% trans "You don't have permission to edit anything." %}</p>
-{% endif %}
-</div>
-{% endblock %}
-
-{% block sidebar %}
-<div id="content-related">
- <div class="module" id="recent-actions-module">
- <h2>{% trans 'Recent Actions' %}</h2>
- <h3>{% trans 'My Actions' %}</h3>
- {% load log %}
- {% get_admin_log 10 as admin_log for_user user %}
- {% if not admin_log %}
- <p>{% trans 'None available' %}</p>
- {% else %}
- <ul class="actionlist">
- {% for entry in admin_log %}
- <li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
- {% if entry.is_deletion %}
- {{ entry.object_repr }}
- {% else %}
- <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
- {% endif %}
- <br/>
- {% if entry.content_type %}
- <span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
- {% else %}
- <span class="mini quiet">{% trans 'Unknown content' %}</span>
- {% endif %}
- </li>
- {% endfor %}
- </ul>
- {% endif %}
- </div>
-</div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/invalid_setup.html b/parts/django/django/contrib/admin/templates/admin/invalid_setup.html
deleted file mode 100644
index f09b316..0000000
--- a/parts/django/django/contrib/admin/templates/admin/invalid_setup.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> &rsaquo; {{ title }}</div>{% endblock %}
-
-{% block content %}
-<p>{% trans "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user." %}</p>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/login.html b/parts/django/django/contrib/admin/templates/admin/login.html
deleted file mode 100644
index 876c4b0..0000000
--- a/parts/django/django/contrib/admin/templates/admin/login.html
+++ /dev/null
@@ -1,34 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block extrastyle %}{% load adminmedia %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/login.css" />{% endblock %}
-
-{% block bodyclass %}login{% endblock %}
-
-{% block content_title %}{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-
-{% block content %}
-{% if error_message %}
-<p class="errornote">{{ error_message }}</p>
-{% endif %}
-<div id="content-main">
-<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
- <div class="form-row">
- <label for="id_username">{% trans 'Username:' %}</label> <input type="text" name="username" id="id_username" />
- </div>
- <div class="form-row">
- <label for="id_password">{% trans 'Password:' %}</label> <input type="password" name="password" id="id_password" />
- <input type="hidden" name="this_is_the_login_form" value="1" />
- </div>
- <div class="submit-row">
- <label>&nbsp;</label><input type="submit" value="{% trans 'Log in' %}" />
- </div>
-</form>
-
-<script type="text/javascript">
-document.getElementById('id_username').focus()
-</script>
-</div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/object_history.html b/parts/django/django/contrib/admin/templates/admin/object_history.html
deleted file mode 100644
index 5ae7847..0000000
--- a/parts/django/django/contrib/admin/templates/admin/object_history.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}
-<div class="breadcrumbs">
- <a href="../../../../">{% trans 'Home' %}</a> &rsaquo;
- <a href="../../../">{{ app_label|capfirst }}</a> &rsaquo;
- <a href="../../">{{ module_name }}</a> &rsaquo;
- <a href="../">{{ object|truncatewords:"18" }}</a> &rsaquo;
- {% trans 'History' %}
-</div>
-{% endblock %}
-
-{% block content %}
-<div id="content-main">
-<div class="module">
-
-{% if action_list %}
- <table id="change-history">
- <thead>
- <tr>
- <th scope="col">{% trans 'Date/time' %}</th>
- <th scope="col">{% trans 'User' %}</th>
- <th scope="col">{% trans 'Action' %}</th>
- </tr>
- </thead>
- <tbody>
- {% for action in action_list %}
- <tr>
- <th scope="row">{{ action.action_time|date:"DATETIME_FORMAT" }}</th>
- <td>{{ action.user.username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}</td>
- <td>{{ action.change_message }}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
-{% else %}
- <p>{% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}</p>
-{% endif %}
-</div>
-</div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/admin/pagination.html b/parts/django/django/contrib/admin/templates/admin/pagination.html
deleted file mode 100644
index 3588132..0000000
--- a/parts/django/django/contrib/admin/templates/admin/pagination.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% load admin_list %}
-{% load i18n %}
-<p class="paginator">
-{% if pagination_required %}
-{% for i in page_range %}
- {% paginator_number cl i %}
-{% endfor %}
-{% endif %}
-{{ cl.result_count }} {% ifequal cl.result_count 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endifequal %}
-{% if show_all_url %}&nbsp;&nbsp;<a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %}
-{% if cl.formset and cl.result_count %}<input type="submit" name="_save" class="default" value="{% trans 'Save' %}"/>{% endif %}
-</p>
diff --git a/parts/django/django/contrib/admin/templates/admin/prepopulated_fields_js.html b/parts/django/django/contrib/admin/templates/admin/prepopulated_fields_js.html
deleted file mode 100644
index 43ef5ba..0000000
--- a/parts/django/django/contrib/admin/templates/admin/prepopulated_fields_js.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<script type="text/javascript">
-(function($) {
- var field = null;
-
-{% for field in prepopulated_fields %}
- field = {
- id: '#{{ field.field.auto_id }}',
- dependency_ids: [],
- dependency_list: [],
- maxLength: {{ field.field.field.max_length|default_if_none:"50" }}
- };
-
- {% for dependency in field.dependencies %}
- field['dependency_ids'].push('#{{ dependency.auto_id }}');
- field['dependency_list'].push('.{{ dependency.name }}');
- {% endfor %}
-
- $('.empty-form .{{ field.field.name }}').addClass('prepopulated_field');
- $(field.id).data('dependency_list', field['dependency_list'])
- .prepopulate(field['dependency_ids'], field.maxLength);
-{% endfor %}
-})(django.jQuery);
-</script>
diff --git a/parts/django/django/contrib/admin/templates/admin/search_form.html b/parts/django/django/contrib/admin/templates/admin/search_form.html
deleted file mode 100644
index 4133cb8..0000000
--- a/parts/django/django/contrib/admin/templates/admin/search_form.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{% load adminmedia %}
-{% load i18n %}
-{% if cl.search_fields %}
-<div id="toolbar"><form id="changelist-search" action="" method="get">
-<div><!-- DIV needed for valid HTML -->
-<label for="searchbar"><img src="{% admin_media_prefix %}img/admin/icon_searchbox.png" alt="Search" /></label>
-<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar" />
-<input type="submit" value="{% trans 'Search' %}" />
-{% if show_result_count %}
- <span class="small quiet">{% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %} (<a href="?{% if cl.is_popup %}pop=1{% endif %}">{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</a>)</span>
-{% endif %}
-{% for pair in cl.params.items %}
- {% ifnotequal pair.0 search_var %}<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}"/>{% endifnotequal %}
-{% endfor %}
-</div>
-</form></div>
-<script type="text/javascript">document.getElementById("searchbar").focus();</script>
-{% endif %}
diff --git a/parts/django/django/contrib/admin/templates/admin/submit_line.html b/parts/django/django/contrib/admin/templates/admin/submit_line.html
deleted file mode 100644
index 8bb5d27..0000000
--- a/parts/django/django/contrib/admin/templates/admin/submit_line.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% load i18n %}
-<div class="submit-row" {% if is_popup %}style="overflow: auto;"{% endif %}>
-{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" {{ onclick_attrib }}/>{% endif %}
-{% if show_delete_link %}<p class="deletelink-box"><a href="delete/" class="deletelink">{% trans "Delete" %}</a></p>{% endif %}
-{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" {{ onclick_attrib }}/>{%endif%}
-{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" {{ onclick_attrib }} />{% endif %}
-{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" {{ onclick_attrib }}/>{% endif %}
-</div>
diff --git a/parts/django/django/contrib/admin/templates/registration/logged_out.html b/parts/django/django/contrib/admin/templates/registration/logged_out.html
deleted file mode 100644
index d339ef0..0000000
--- a/parts/django/django/contrib/admin/templates/registration/logged_out.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a></div>{% endblock %}
-
-{% block content %}
-
-<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p>
-
-<p><a href="../">{% trans 'Log in again' %}</a></p>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/registration/password_change_done.html b/parts/django/django/contrib/admin/templates/registration/password_change_done.html
deleted file mode 100644
index f7c2ceb..0000000
--- a/parts/django/django/contrib/admin/templates/registration/password_change_done.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block userlinks %}{% url django-admindocs-docroot as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %}{% trans 'Change password' %} / <a href="../../logout/">{% trans 'Log out' %}</a>{% endblock %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password change' %}</div>{% endblock %}
-
-{% block title %}{% trans 'Password change successful' %}{% endblock %}
-
-{% block content %}
-
-<h1>{% trans 'Password change successful' %}</h1>
-
-<p>{% trans 'Your password was changed.' %}</p>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/registration/password_change_form.html b/parts/django/django/contrib/admin/templates/registration/password_change_form.html
deleted file mode 100644
index f5c1ca5..0000000
--- a/parts/django/django/contrib/admin/templates/registration/password_change_form.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n adminmedia %}
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
-{% block userlinks %}{% url django-admindocs-docroot as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="../logout/">{% trans 'Log out' %}</a>{% endblock %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password change' %}</div>{% endblock %}
-
-{% block title %}{% trans 'Password change' %}{% endblock %}
-
-{% block content %}<div id="content-main">
-
-<form action="" method="post">{% csrf_token %}
-<div>
-{% if form.errors %}
- <p class="errornote">
- {% blocktrans count form.errors.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
- </p>
-{% endif %}
-
-<h1>{% trans 'Password change' %}</h1>
-
-<p>{% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}</p>
-
-<fieldset class="module aligned wide">
-
-<div class="form-row">
- {{ form.old_password.errors }}
- <label for="id_old_password" class="required">{% trans 'Old password' %}:</label>{{ form.old_password }}
-</div>
-
-<div class="form-row">
- {{ form.new_password1.errors }}
- <label for="id_new_password1" class="required">{% trans 'New password' %}:</label>{{ form.new_password1 }}
-</div>
-
-<div class="form-row">
-{{ form.new_password2.errors }}
- <label for="id_new_password2" class="required">{% trans 'Password (again)' %}:</label>{{ form.new_password2 }}
-</div>
-
-</fieldset>
-
-<div class="submit-row">
- <input type="submit" value="{% trans 'Change my password' %}" class="default" />
-</div>
-
-<script type="text/javascript">document.getElementById("id_old_password").focus();</script>
-</div>
-</form></div>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/registration/password_reset_complete.html b/parts/django/django/contrib/admin/templates/registration/password_reset_complete.html
deleted file mode 100644
index fceb167..0000000
--- a/parts/django/django/contrib/admin/templates/registration/password_reset_complete.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password reset' %}</div>{% endblock %}
-
-{% block title %}{% trans 'Password reset complete' %}{% endblock %}
-
-{% block content %}
-
-<h1>{% trans 'Password reset complete' %}</h1>
-
-<p>{% trans "Your password has been set. You may go ahead and log in now." %}</p>
-
-<p><a href="{{ login_url }}">{% trans 'Log in' %}</a></p>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/registration/password_reset_confirm.html b/parts/django/django/contrib/admin/templates/registration/password_reset_confirm.html
deleted file mode 100644
index df9cf1b..0000000
--- a/parts/django/django/contrib/admin/templates/registration/password_reset_confirm.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password reset confirmation' %}</div>{% endblock %}
-
-{% block title %}{% trans 'Password reset' %}{% endblock %}
-
-{% block content %}
-
-{% if validlink %}
-
-<h1>{% trans 'Enter new password' %}</h1>
-
-<p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
-
-<form action="" method="post">{% csrf_token %}
-{{ form.new_password1.errors }}
-<p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
-{{ form.new_password2.errors }}
-<p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
-<p><input type="submit" value="{% trans 'Change my password' %}" /></p>
-</form>
-
-{% else %}
-
-<h1>{% trans 'Password reset unsuccessful' %}</h1>
-
-<p>{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}</p>
-
-{% endif %}
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/registration/password_reset_done.html b/parts/django/django/contrib/admin/templates/registration/password_reset_done.html
deleted file mode 100644
index e223bdb..0000000
--- a/parts/django/django/contrib/admin/templates/registration/password_reset_done.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password reset' %}</div>{% endblock %}
-
-{% block title %}{% trans 'Password reset successful' %}{% endblock %}
-
-{% block content %}
-
-<h1>{% trans 'Password reset successful' %}</h1>
-
-<p>{% trans "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly." %}</p>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templates/registration/password_reset_email.html b/parts/django/django/contrib/admin/templates/registration/password_reset_email.html
deleted file mode 100644
index 77fe4c2..0000000
--- a/parts/django/django/contrib/admin/templates/registration/password_reset_email.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% load i18n %}{% autoescape off %}
-{% trans "You're receiving this e-mail because you requested a password reset" %}
-{% blocktrans %}for your user account at {{ site_name }}{% endblocktrans %}.
-
-{% trans "Please go to the following page and choose a new password:" %}
-{% block reset_link %}
-{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid token=token %}
-{% endblock %}
-{% trans "Your username, in case you've forgotten:" %} {{ user.username }}
-
-{% trans "Thanks for using our site!" %}
-
-{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
-
-{% endautoescape %}
diff --git a/parts/django/django/contrib/admin/templates/registration/password_reset_form.html b/parts/django/django/contrib/admin/templates/registration/password_reset_form.html
deleted file mode 100644
index d3a1284..0000000
--- a/parts/django/django/contrib/admin/templates/registration/password_reset_form.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password reset' %}</div>{% endblock %}
-
-{% block title %}{% trans "Password reset" %}{% endblock %}
-
-{% block content %}
-
-<h1>{% trans "Password reset" %}</h1>
-
-<p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one." %}</p>
-
-<form action="" method="post">{% csrf_token %}
-{{ form.email.errors }}
-<p><label for="id_email">{% trans 'E-mail address:' %}</label> {{ form.email }} <input type="submit" value="{% trans 'Reset my password' %}" /></p>
-</form>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admin/templatetags/__init__.py b/parts/django/django/contrib/admin/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/admin/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/admin/templatetags/admin_list.py b/parts/django/django/contrib/admin/templatetags/admin_list.py
deleted file mode 100644
index c05af0b..0000000
--- a/parts/django/django/contrib/admin/templatetags/admin_list.py
+++ /dev/null
@@ -1,304 +0,0 @@
-import datetime
-
-from django.conf import settings
-from django.contrib.admin.util import lookup_field, display_for_field, label_for_field
-from django.contrib.admin.views.main import ALL_VAR, EMPTY_CHANGELIST_VALUE
-from django.contrib.admin.views.main import ORDER_VAR, ORDER_TYPE_VAR, PAGE_VAR, SEARCH_VAR
-from django.core.exceptions import ObjectDoesNotExist
-from django.db import models
-from django.forms.forms import pretty_name
-from django.utils import formats
-from django.utils.html import escape, conditional_escape
-from django.utils.safestring import mark_safe
-from django.utils.text import capfirst
-from django.utils.translation import ugettext as _
-from django.utils.encoding import smart_unicode, force_unicode
-from django.template import Library
-
-
-register = Library()
-
-DOT = '.'
-
-def paginator_number(cl,i):
- """
- Generates an individual page index link in a paginated list.
- """
- if i == DOT:
- return u'... '
- elif i == cl.page_num:
- return mark_safe(u'<span class="this-page">%d</span> ' % (i+1))
- else:
- return mark_safe(u'<a href="%s"%s>%d</a> ' % (escape(cl.get_query_string({PAGE_VAR: i})), (i == cl.paginator.num_pages-1 and ' class="end"' or ''), i+1))
-paginator_number = register.simple_tag(paginator_number)
-
-def pagination(cl):
- """
- Generates the series of links to the pages in a paginated list.
- """
- paginator, page_num = cl.paginator, cl.page_num
-
- pagination_required = (not cl.show_all or not cl.can_show_all) and cl.multi_page
- if not pagination_required:
- page_range = []
- else:
- ON_EACH_SIDE = 3
- ON_ENDS = 2
-
- # If there are 10 or fewer pages, display links to every page.
- # Otherwise, do some fancy
- if paginator.num_pages <= 10:
- page_range = range(paginator.num_pages)
- else:
- # Insert "smart" pagination links, so that there are always ON_ENDS
- # links at either end of the list of pages, and there are always
- # ON_EACH_SIDE links at either end of the "current page" link.
- page_range = []
- if page_num > (ON_EACH_SIDE + ON_ENDS):
- page_range.extend(range(0, ON_EACH_SIDE - 1))
- page_range.append(DOT)
- page_range.extend(range(page_num - ON_EACH_SIDE, page_num + 1))
- else:
- page_range.extend(range(0, page_num + 1))
- if page_num < (paginator.num_pages - ON_EACH_SIDE - ON_ENDS - 1):
- page_range.extend(range(page_num + 1, page_num + ON_EACH_SIDE + 1))
- page_range.append(DOT)
- page_range.extend(range(paginator.num_pages - ON_ENDS, paginator.num_pages))
- else:
- page_range.extend(range(page_num + 1, paginator.num_pages))
-
- need_show_all_link = cl.can_show_all and not cl.show_all and cl.multi_page
- return {
- 'cl': cl,
- 'pagination_required': pagination_required,
- 'show_all_url': need_show_all_link and cl.get_query_string({ALL_VAR: ''}),
- 'page_range': page_range,
- 'ALL_VAR': ALL_VAR,
- '1': 1,
- }
-pagination = register.inclusion_tag('admin/pagination.html')(pagination)
-
-def result_headers(cl):
- """
- Generates the list column headers.
- """
- lookup_opts = cl.lookup_opts
-
- for i, field_name in enumerate(cl.list_display):
- header, attr = label_for_field(field_name, cl.model,
- model_admin = cl.model_admin,
- return_attr = True
- )
- if attr:
- # if the field is the action checkbox: no sorting and special class
- if field_name == 'action_checkbox':
- yield {
- "text": header,
- "class_attrib": mark_safe(' class="action-checkbox-column"')
- }
- continue
-
- # It is a non-field, but perhaps one that is sortable
- admin_order_field = getattr(attr, "admin_order_field", None)
- if not admin_order_field:
- yield {"text": header}
- continue
-
- # So this _is_ a sortable non-field. Go to the yield
- # after the else clause.
- else:
- admin_order_field = None
-
- th_classes = []
- new_order_type = 'asc'
- if field_name == cl.order_field or admin_order_field == cl.order_field:
- th_classes.append('sorted %sending' % cl.order_type.lower())
- new_order_type = {'asc': 'desc', 'desc': 'asc'}[cl.order_type.lower()]
-
- yield {
- "text": header,
- "sortable": True,
- "url": cl.get_query_string({ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}),
- "class_attrib": mark_safe(th_classes and ' class="%s"' % ' '.join(th_classes) or '')
- }
-
-def _boolean_icon(field_val):
- BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
- return mark_safe(u'<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val))
-
-def items_for_result(cl, result, form):
- """
- Generates the actual list of data.
- """
- first = True
- pk = cl.lookup_opts.pk.attname
- for field_name in cl.list_display:
- row_class = ''
- try:
- f, attr, value = lookup_field(field_name, result, cl.model_admin)
- except (AttributeError, ObjectDoesNotExist):
- result_repr = EMPTY_CHANGELIST_VALUE
- else:
- if f is None:
- allow_tags = getattr(attr, 'allow_tags', False)
- boolean = getattr(attr, 'boolean', False)
- if boolean:
- allow_tags = True
- result_repr = _boolean_icon(value)
- else:
- result_repr = smart_unicode(value)
- # Strip HTML tags in the resulting text, except if the
- # function has an "allow_tags" attribute set to True.
- if not allow_tags:
- result_repr = escape(result_repr)
- else:
- result_repr = mark_safe(result_repr)
- else:
- if value is None:
- result_repr = EMPTY_CHANGELIST_VALUE
- if isinstance(f.rel, models.ManyToOneRel):
- result_repr = escape(getattr(result, f.name))
- else:
- result_repr = display_for_field(value, f)
- if isinstance(f, models.DateField) or isinstance(f, models.TimeField):
- row_class = ' class="nowrap"'
- if force_unicode(result_repr) == '':
- result_repr = mark_safe('&nbsp;')
- # If list_display_links not defined, add the link tag to the first field
- if (first and not cl.list_display_links) or field_name in cl.list_display_links:
- table_tag = {True:'th', False:'td'}[first]
- first = False
- url = cl.url_for_result(result)
- # Convert the pk to something that can be used in Javascript.
- # Problem cases are long ints (23L) and non-ASCII strings.
- if cl.to_field:
- attr = str(cl.to_field)
- else:
- attr = pk
- value = result.serializable_value(attr)
- result_id = repr(force_unicode(value))[1:]
- yield mark_safe(u'<%s%s><a href="%s"%s>%s</a></%s>' % \
- (table_tag, row_class, url, (cl.is_popup and ' onclick="opener.dismissRelatedLookupPopup(window, %s); return false;"' % result_id or ''), conditional_escape(result_repr), table_tag))
- else:
- # By default the fields come from ModelAdmin.list_editable, but if we pull
- # the fields out of the form instead of list_editable custom admins
- # can provide fields on a per request basis
- if form and field_name in form.fields:
- bf = form[field_name]
- result_repr = mark_safe(force_unicode(bf.errors) + force_unicode(bf))
- else:
- result_repr = conditional_escape(result_repr)
- yield mark_safe(u'<td%s>%s</td>' % (row_class, result_repr))
- if form and not form[cl.model._meta.pk.name].is_hidden:
- yield mark_safe(u'<td>%s</td>' % force_unicode(form[cl.model._meta.pk.name]))
-
-def results(cl):
- if cl.formset:
- for res, form in zip(cl.result_list, cl.formset.forms):
- yield list(items_for_result(cl, res, form))
- else:
- for res in cl.result_list:
- yield list(items_for_result(cl, res, None))
-
-def result_hidden_fields(cl):
- if cl.formset:
- for res, form in zip(cl.result_list, cl.formset.forms):
- if form[cl.model._meta.pk.name].is_hidden:
- yield mark_safe(force_unicode(form[cl.model._meta.pk.name]))
-
-def result_list(cl):
- """
- Displays the headers and data list together
- """
- return {'cl': cl,
- 'result_hidden_fields': list(result_hidden_fields(cl)),
- 'result_headers': list(result_headers(cl)),
- 'results': list(results(cl))}
-result_list = register.inclusion_tag("admin/change_list_results.html")(result_list)
-
-def date_hierarchy(cl):
- """
- Displays the date hierarchy for date drill-down functionality.
- """
- if cl.date_hierarchy:
- field_name = cl.date_hierarchy
- year_field = '%s__year' % field_name
- month_field = '%s__month' % field_name
- day_field = '%s__day' % field_name
- field_generic = '%s__' % field_name
- year_lookup = cl.params.get(year_field)
- month_lookup = cl.params.get(month_field)
- day_lookup = cl.params.get(day_field)
-
- link = lambda d: cl.get_query_string(d, [field_generic])
-
- if year_lookup and month_lookup and day_lookup:
- day = datetime.date(int(year_lookup), int(month_lookup), int(day_lookup))
- return {
- 'show': True,
- 'back': {
- 'link': link({year_field: year_lookup, month_field: month_lookup}),
- 'title': capfirst(formats.date_format(day, 'YEAR_MONTH_FORMAT'))
- },
- 'choices': [{'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT'))}]
- }
- elif year_lookup and month_lookup:
- days = cl.query_set.filter(**{year_field: year_lookup, month_field: month_lookup}).dates(field_name, 'day')
- return {
- 'show': True,
- 'back': {
- 'link': link({year_field: year_lookup}),
- 'title': year_lookup
- },
- 'choices': [{
- 'link': link({year_field: year_lookup, month_field: month_lookup, day_field: day.day}),
- 'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT'))
- } for day in days]
- }
- elif year_lookup:
- months = cl.query_set.filter(**{year_field: year_lookup}).dates(field_name, 'month')
- return {
- 'show' : True,
- 'back': {
- 'link' : link({}),
- 'title': _('All dates')
- },
- 'choices': [{
- 'link': link({year_field: year_lookup, month_field: month.month}),
- 'title': capfirst(formats.date_format(month, 'YEAR_MONTH_FORMAT'))
- } for month in months]
- }
- else:
- years = cl.query_set.dates(field_name, 'year')
- return {
- 'show': True,
- 'choices': [{
- 'link': link({year_field: str(year.year)}),
- 'title': str(year.year),
- } for year in years]
- }
-date_hierarchy = register.inclusion_tag('admin/date_hierarchy.html')(date_hierarchy)
-
-def search_form(cl):
- """
- Displays a search form for searching the list.
- """
- return {
- 'cl': cl,
- 'show_result_count': cl.result_count != cl.full_result_count,
- 'search_var': SEARCH_VAR
- }
-search_form = register.inclusion_tag('admin/search_form.html')(search_form)
-
-def admin_list_filter(cl, spec):
- return {'title': spec.title(), 'choices' : list(spec.choices(cl))}
-admin_list_filter = register.inclusion_tag('admin/filter.html')(admin_list_filter)
-
-def admin_actions(context):
- """
- Track the number of times the action field has been rendered on the page,
- so we know which value to use.
- """
- context['action_index'] = context.get('action_index', -1) + 1
- return context
-admin_actions = register.inclusion_tag("admin/actions.html", takes_context=True)(admin_actions)
diff --git a/parts/django/django/contrib/admin/templatetags/admin_modify.py b/parts/django/django/contrib/admin/templatetags/admin_modify.py
deleted file mode 100644
index fe88043..0000000
--- a/parts/django/django/contrib/admin/templatetags/admin_modify.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from django import template
-
-register = template.Library()
-
-def prepopulated_fields_js(context):
- """
- Creates a list of prepopulated_fields that should render Javascript for
- the prepopulated fields for both the admin form and inlines.
- """
- prepopulated_fields = []
- if context['add'] and 'adminform' in context:
- prepopulated_fields.extend(context['adminform'].prepopulated_fields)
- if 'inline_admin_formsets' in context:
- for inline_admin_formset in context['inline_admin_formsets']:
- for inline_admin_form in inline_admin_formset:
- if inline_admin_form.original is None:
- prepopulated_fields.extend(inline_admin_form.prepopulated_fields)
- context.update({'prepopulated_fields': prepopulated_fields})
- return context
-prepopulated_fields_js = register.inclusion_tag('admin/prepopulated_fields_js.html', takes_context=True)(prepopulated_fields_js)
-
-def submit_row(context):
- """
- Displays the row of buttons for delete and save.
- """
- opts = context['opts']
- change = context['change']
- is_popup = context['is_popup']
- save_as = context['save_as']
- return {
- 'onclick_attrib': (opts.get_ordered_objects() and change
- and 'onclick="submitOrderForm();"' or ''),
- 'show_delete_link': (not is_popup and context['has_delete_permission']
- and (change or context['show_delete'])),
- 'show_save_as_new': not is_popup and change and save_as,
- 'show_save_and_add_another': context['has_add_permission'] and
- not is_popup and (not save_as or context['add']),
- 'show_save_and_continue': not is_popup and context['has_change_permission'],
- 'is_popup': is_popup,
- 'show_save': True
- }
-submit_row = register.inclusion_tag('admin/submit_line.html', takes_context=True)(submit_row)
diff --git a/parts/django/django/contrib/admin/templatetags/adminmedia.py b/parts/django/django/contrib/admin/templatetags/adminmedia.py
deleted file mode 100644
index 5429810..0000000
--- a/parts/django/django/contrib/admin/templatetags/adminmedia.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from django.template import Library
-from django.utils.encoding import iri_to_uri
-
-register = Library()
-
-def admin_media_prefix():
- """
- Returns the string contained in the setting ADMIN_MEDIA_PREFIX.
- """
- try:
- from django.conf import settings
- except ImportError:
- return ''
- return iri_to_uri(settings.ADMIN_MEDIA_PREFIX)
-admin_media_prefix = register.simple_tag(admin_media_prefix)
diff --git a/parts/django/django/contrib/admin/templatetags/log.py b/parts/django/django/contrib/admin/templatetags/log.py
deleted file mode 100644
index 663830b..0000000
--- a/parts/django/django/contrib/admin/templatetags/log.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from django import template
-from django.contrib.admin.models import LogEntry
-
-register = template.Library()
-
-class AdminLogNode(template.Node):
- def __init__(self, limit, varname, user):
- self.limit, self.varname, self.user = limit, varname, user
-
- def __repr__(self):
- return "<GetAdminLog Node>"
-
- def render(self, context):
- if self.user is None:
- context[self.varname] = LogEntry.objects.all().select_related('content_type', 'user')[:self.limit]
- else:
- user_id = self.user
- if not user_id.isdigit():
- user_id = context[self.user].id
- context[self.varname] = LogEntry.objects.filter(user__id__exact=user_id).select_related('content_type', 'user')[:self.limit]
- return ''
-
-class DoGetAdminLog:
- """
- Populates a template variable with the admin log for the given criteria.
-
- Usage::
-
- {% get_admin_log [limit] as [varname] for_user [context_var_containing_user_obj] %}
-
- Examples::
-
- {% get_admin_log 10 as admin_log for_user 23 %}
- {% get_admin_log 10 as admin_log for_user user %}
- {% get_admin_log 10 as admin_log %}
-
- Note that ``context_var_containing_user_obj`` can be a hard-coded integer
- (user ID) or the name of a template context variable containing the user
- object whose ID you want.
- """
- def __init__(self, tag_name):
- self.tag_name = tag_name
-
- def __call__(self, parser, token):
- tokens = token.contents.split()
- if len(tokens) < 4:
- raise template.TemplateSyntaxError("'%s' statements require two arguments" % self.tag_name)
- if not tokens[1].isdigit():
- raise template.TemplateSyntaxError("First argument in '%s' must be an integer" % self.tag_name)
- if tokens[2] != 'as':
- raise template.TemplateSyntaxError("Second argument in '%s' must be 'as'" % self.tag_name)
- if len(tokens) > 4:
- if tokens[4] != 'for_user':
- raise template.TemplateSyntaxError("Fourth argument in '%s' must be 'for_user'" % self.tag_name)
- return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(len(tokens) > 5 and tokens[5] or None))
-
-register.tag('get_admin_log', DoGetAdminLog('get_admin_log'))
diff --git a/parts/django/django/contrib/admin/util.py b/parts/django/django/contrib/admin/util.py
deleted file mode 100644
index 792d0b6..0000000
--- a/parts/django/django/contrib/admin/util.py
+++ /dev/null
@@ -1,340 +0,0 @@
-from django.core.exceptions import ObjectDoesNotExist
-from django.db import models
-from django.db.models.related import RelatedObject
-from django.forms.forms import pretty_name
-from django.utils import formats
-from django.utils.html import escape
-from django.utils.safestring import mark_safe
-from django.utils.text import capfirst
-from django.utils.encoding import force_unicode, smart_unicode, smart_str
-from django.utils.translation import ungettext, ugettext as _
-from django.core.urlresolvers import reverse, NoReverseMatch
-from django.utils.datastructures import SortedDict
-
-def quote(s):
- """
- Ensure that primary key values do not confuse the admin URLs by escaping
- any '/', '_' and ':' characters. Similar to urllib.quote, except that the
- quoting is slightly different so that it doesn't get automatically
- unquoted by the Web browser.
- """
- if not isinstance(s, basestring):
- return s
- res = list(s)
- for i in range(len(res)):
- c = res[i]
- if c in """:/_#?;@&=+$,"<>%\\""":
- res[i] = '_%02X' % ord(c)
- return ''.join(res)
-
-def unquote(s):
- """
- Undo the effects of quote(). Based heavily on urllib.unquote().
- """
- mychr = chr
- myatoi = int
- list = s.split('_')
- res = [list[0]]
- myappend = res.append
- del list[0]
- for item in list:
- if item[1:2]:
- try:
- myappend(mychr(myatoi(item[:2], 16)) + item[2:])
- except ValueError:
- myappend('_' + item)
- else:
- myappend('_' + item)
- return "".join(res)
-
-def flatten_fieldsets(fieldsets):
- """Returns a list of field names from an admin fieldsets structure."""
- field_names = []
- for name, opts in fieldsets:
- for field in opts['fields']:
- # type checking feels dirty, but it seems like the best way here
- if type(field) == tuple:
- field_names.extend(field)
- else:
- field_names.append(field)
- return field_names
-
-def _format_callback(obj, user, admin_site, levels_to_root, perms_needed):
- has_admin = obj.__class__ in admin_site._registry
- opts = obj._meta
- try:
- admin_url = reverse('%s:%s_%s_change'
- % (admin_site.name,
- opts.app_label,
- opts.object_name.lower()),
- None, (quote(obj._get_pk_val()),))
- except NoReverseMatch:
- admin_url = '%s%s/%s/%s/' % ('../'*levels_to_root,
- opts.app_label,
- opts.object_name.lower(),
- quote(obj._get_pk_val()))
- if has_admin:
- p = '%s.%s' % (opts.app_label,
- opts.get_delete_permission())
- if not user.has_perm(p):
- perms_needed.add(opts.verbose_name)
- # Display a link to the admin page.
- return mark_safe(u'%s: <a href="%s">%s</a>' %
- (escape(capfirst(opts.verbose_name)),
- admin_url,
- escape(obj)))
- else:
- # Don't display link to edit, because it either has no
- # admin or is edited inline.
- return u'%s: %s' % (capfirst(opts.verbose_name),
- force_unicode(obj))
-
-def get_deleted_objects(objs, opts, user, admin_site, levels_to_root=4):
- """
- Find all objects related to ``objs`` that should also be
- deleted. ``objs`` should be an iterable of objects.
-
- Returns a nested list of strings suitable for display in the
- template with the ``unordered_list`` filter.
-
- `levels_to_root` defines the number of directories (../) to reach
- the admin root path. In a change_view this is 4, in a change_list
- view 2.
-
- This is for backwards compatibility since the options.delete_selected
- method uses this function also from a change_list view.
- This will not be used if we can reverse the URL.
- """
- collector = NestedObjects()
- for obj in objs:
- # TODO using a private model API!
- obj._collect_sub_objects(collector)
-
- perms_needed = set()
-
- to_delete = collector.nested(_format_callback,
- user=user,
- admin_site=admin_site,
- levels_to_root=levels_to_root,
- perms_needed=perms_needed)
-
- return to_delete, perms_needed
-
-
-class NestedObjects(object):
- """
- A directed acyclic graph collection that exposes the add() API
- expected by Model._collect_sub_objects and can present its data as
- a nested list of objects.
-
- """
- def __init__(self):
- # Use object keys of the form (model, pk) because actual model
- # objects may not be unique
-
- # maps object key to list of child keys
- self.children = SortedDict()
-
- # maps object key to parent key
- self.parents = SortedDict()
-
- # maps object key to actual object
- self.seen = SortedDict()
-
- def add(self, model, pk, obj,
- parent_model=None, parent_obj=None, nullable=False):
- """
- Add item ``obj`` to the graph. Returns True (and does nothing)
- if the item has been seen already.
-
- The ``parent_obj`` argument must already exist in the graph; if
- not, it's ignored (but ``obj`` is still added with no
- parent). In any case, Model._collect_sub_objects (for whom
- this API exists) will never pass a parent that hasn't already
- been added itself.
-
- These restrictions in combination ensure the graph will remain
- acyclic (but can have multiple roots).
-
- ``model``, ``pk``, and ``parent_model`` arguments are ignored
- in favor of the appropriate lookups on ``obj`` and
- ``parent_obj``; unlike CollectedObjects, we can't maintain
- independence from the knowledge that we're operating on model
- instances, and we don't want to allow for inconsistency.
-
- ``nullable`` arg is ignored: it doesn't affect how the tree of
- collected objects should be nested for display.
- """
- model, pk = type(obj), obj._get_pk_val()
-
- # auto-created M2M models don't interest us
- if model._meta.auto_created:
- return True
-
- key = model, pk
-
- if key in self.seen:
- return True
- self.seen.setdefault(key, obj)
-
- if parent_obj is not None:
- parent_model, parent_pk = (type(parent_obj),
- parent_obj._get_pk_val())
- parent_key = (parent_model, parent_pk)
- if parent_key in self.seen:
- self.children.setdefault(parent_key, list()).append(key)
- self.parents.setdefault(key, parent_key)
-
- def _nested(self, key, format_callback=None, **kwargs):
- obj = self.seen[key]
- if format_callback:
- ret = [format_callback(obj, **kwargs)]
- else:
- ret = [obj]
-
- children = []
- for child in self.children.get(key, ()):
- children.extend(self._nested(child, format_callback, **kwargs))
- if children:
- ret.append(children)
-
- return ret
-
- def nested(self, format_callback=None, **kwargs):
- """
- Return the graph as a nested list.
-
- Passes **kwargs back to the format_callback as kwargs.
-
- """
- roots = []
- for key in self.seen.keys():
- if key not in self.parents:
- roots.extend(self._nested(key, format_callback, **kwargs))
- return roots
-
-
-def model_format_dict(obj):
- """
- Return a `dict` with keys 'verbose_name' and 'verbose_name_plural',
- typically for use with string formatting.
-
- `obj` may be a `Model` instance, `Model` subclass, or `QuerySet` instance.
-
- """
- if isinstance(obj, (models.Model, models.base.ModelBase)):
- opts = obj._meta
- elif isinstance(obj, models.query.QuerySet):
- opts = obj.model._meta
- else:
- opts = obj
- return {
- 'verbose_name': force_unicode(opts.verbose_name),
- 'verbose_name_plural': force_unicode(opts.verbose_name_plural)
- }
-
-def model_ngettext(obj, n=None):
- """
- Return the appropriate `verbose_name` or `verbose_name_plural` value for
- `obj` depending on the count `n`.
-
- `obj` may be a `Model` instance, `Model` subclass, or `QuerySet` instance.
- If `obj` is a `QuerySet` instance, `n` is optional and the length of the
- `QuerySet` is used.
-
- """
- if isinstance(obj, models.query.QuerySet):
- if n is None:
- n = obj.count()
- obj = obj.model
- d = model_format_dict(obj)
- singular, plural = d["verbose_name"], d["verbose_name_plural"]
- return ungettext(singular, plural, n or 0)
-
-def lookup_field(name, obj, model_admin=None):
- opts = obj._meta
- try:
- f = opts.get_field(name)
- except models.FieldDoesNotExist:
- # For non-field values, the value is either a method, property or
- # returned via a callable.
- if callable(name):
- attr = name
- value = attr(obj)
- elif (model_admin is not None and hasattr(model_admin, name) and
- not name == '__str__' and not name == '__unicode__'):
- attr = getattr(model_admin, name)
- value = attr(obj)
- else:
- attr = getattr(obj, name)
- if callable(attr):
- value = attr()
- else:
- value = attr
- f = None
- else:
- attr = None
- value = getattr(obj, name)
- return f, attr, value
-
-def label_for_field(name, model, model_admin=None, return_attr=False):
- attr = None
- try:
- field = model._meta.get_field_by_name(name)[0]
- if isinstance(field, RelatedObject):
- label = field.opts.verbose_name
- else:
- label = field.verbose_name
- except models.FieldDoesNotExist:
- if name == "__unicode__":
- label = force_unicode(model._meta.verbose_name)
- elif name == "__str__":
- label = smart_str(model._meta.verbose_name)
- else:
- if callable(name):
- attr = name
- elif model_admin is not None and hasattr(model_admin, name):
- attr = getattr(model_admin, name)
- elif hasattr(model, name):
- attr = getattr(model, name)
- else:
- message = "Unable to lookup '%s' on %s" % (name, model._meta.object_name)
- if model_admin:
- message += " or %s" % (model_admin.__name__,)
- raise AttributeError(message)
-
- if hasattr(attr, "short_description"):
- label = attr.short_description
- elif callable(attr):
- if attr.__name__ == "<lambda>":
- label = "--"
- else:
- label = pretty_name(attr.__name__)
- else:
- label = pretty_name(name)
- if return_attr:
- return (label, attr)
- else:
- return label
-
-
-def display_for_field(value, field):
- from django.contrib.admin.templatetags.admin_list import _boolean_icon
- from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
-
- if field.flatchoices:
- return dict(field.flatchoices).get(value, EMPTY_CHANGELIST_VALUE)
- # NullBooleanField needs special-case null-handling, so it comes
- # before the general null test.
- elif isinstance(field, models.BooleanField) or isinstance(field, models.NullBooleanField):
- return _boolean_icon(value)
- elif value is None:
- return EMPTY_CHANGELIST_VALUE
- elif isinstance(field, models.DateField) or isinstance(field, models.TimeField):
- return formats.localize(value)
- elif isinstance(field, models.DecimalField):
- return formats.number_format(value, field.decimal_places)
- elif isinstance(field, models.FloatField):
- return formats.number_format(value)
- else:
- return smart_unicode(value)
diff --git a/parts/django/django/contrib/admin/validation.py b/parts/django/django/contrib/admin/validation.py
deleted file mode 100644
index bee2891..0000000
--- a/parts/django/django/contrib/admin/validation.py
+++ /dev/null
@@ -1,379 +0,0 @@
-from django.core.exceptions import ImproperlyConfigured
-from django.db import models
-from django.forms.models import (BaseModelForm, BaseModelFormSet, fields_for_model,
- _get_foreign_key)
-from django.contrib.admin.options import flatten_fieldsets, BaseModelAdmin
-from django.contrib.admin.options import HORIZONTAL, VERTICAL
-from django.contrib.admin.util import lookup_field
-
-
-__all__ = ['validate']
-
-def validate(cls, model):
- """
- Does basic ModelAdmin option validation. Calls custom validation
- classmethod in the end if it is provided in cls. The signature of the
- custom validation classmethod should be: def validate(cls, model).
- """
- # Before we can introspect models, they need to be fully loaded so that
- # inter-relations are set up correctly. We force that here.
- models.get_apps()
-
- opts = model._meta
- validate_base(cls, model)
-
- # list_display
- if hasattr(cls, 'list_display'):
- check_isseq(cls, 'list_display', cls.list_display)
- for idx, field in enumerate(cls.list_display):
- if not callable(field):
- if not hasattr(cls, field):
- if not hasattr(model, field):
- try:
- opts.get_field(field)
- except models.FieldDoesNotExist:
- raise ImproperlyConfigured("%s.list_display[%d], %r is not a callable or an attribute of %r or found in the model %r."
- % (cls.__name__, idx, field, cls.__name__, model._meta.object_name))
- else:
- # getattr(model, field) could be an X_RelatedObjectsDescriptor
- f = fetch_attr(cls, model, opts, "list_display[%d]" % idx, field)
- if isinstance(f, models.ManyToManyField):
- raise ImproperlyConfigured("'%s.list_display[%d]', '%s' is a ManyToManyField which is not supported."
- % (cls.__name__, idx, field))
-
- # list_display_links
- if hasattr(cls, 'list_display_links'):
- check_isseq(cls, 'list_display_links', cls.list_display_links)
- for idx, field in enumerate(cls.list_display_links):
- fetch_attr(cls, model, opts, 'list_display_links[%d]' % idx, field)
- if field not in cls.list_display:
- raise ImproperlyConfigured("'%s.list_display_links[%d]'"
- "refers to '%s' which is not defined in 'list_display'."
- % (cls.__name__, idx, field))
-
- # list_filter
- if hasattr(cls, 'list_filter'):
- check_isseq(cls, 'list_filter', cls.list_filter)
- for idx, field in enumerate(cls.list_filter):
- get_field(cls, model, opts, 'list_filter[%d]' % idx, field)
-
- # list_per_page = 100
- if hasattr(cls, 'list_per_page') and not isinstance(cls.list_per_page, int):
- raise ImproperlyConfigured("'%s.list_per_page' should be a integer."
- % cls.__name__)
-
- # list_editable
- if hasattr(cls, 'list_editable') and cls.list_editable:
- check_isseq(cls, 'list_editable', cls.list_editable)
- for idx, field_name in enumerate(cls.list_editable):
- try:
- field = opts.get_field_by_name(field_name)[0]
- except models.FieldDoesNotExist:
- raise ImproperlyConfigured("'%s.list_editable[%d]' refers to a "
- "field, '%s', not defined on %s."
- % (cls.__name__, idx, field_name, model.__name__))
- if field_name not in cls.list_display:
- raise ImproperlyConfigured("'%s.list_editable[%d]' refers to "
- "'%s' which is not defined in 'list_display'."
- % (cls.__name__, idx, field_name))
- if field_name in cls.list_display_links:
- raise ImproperlyConfigured("'%s' cannot be in both '%s.list_editable'"
- " and '%s.list_display_links'"
- % (field_name, cls.__name__, cls.__name__))
- if not cls.list_display_links and cls.list_display[0] in cls.list_editable:
- raise ImproperlyConfigured("'%s.list_editable[%d]' refers to"
- " the first field in list_display, '%s', which can't be"
- " used unless list_display_links is set."
- % (cls.__name__, idx, cls.list_display[0]))
- if not field.editable:
- raise ImproperlyConfigured("'%s.list_editable[%d]' refers to a "
- "field, '%s', which isn't editable through the admin."
- % (cls.__name__, idx, field_name))
-
- # search_fields = ()
- if hasattr(cls, 'search_fields'):
- check_isseq(cls, 'search_fields', cls.search_fields)
-
- # date_hierarchy = None
- if cls.date_hierarchy:
- f = get_field(cls, model, opts, 'date_hierarchy', cls.date_hierarchy)
- if not isinstance(f, (models.DateField, models.DateTimeField)):
- raise ImproperlyConfigured("'%s.date_hierarchy is "
- "neither an instance of DateField nor DateTimeField."
- % cls.__name__)
-
- # ordering = None
- if cls.ordering:
- check_isseq(cls, 'ordering', cls.ordering)
- for idx, field in enumerate(cls.ordering):
- if field == '?' and len(cls.ordering) != 1:
- raise ImproperlyConfigured("'%s.ordering' has the random "
- "ordering marker '?', but contains other fields as "
- "well. Please either remove '?' or the other fields."
- % cls.__name__)
- if field == '?':
- continue
- if field.startswith('-'):
- field = field[1:]
- # Skip ordering in the format field1__field2 (FIXME: checking
- # this format would be nice, but it's a little fiddly).
- if '__' in field:
- continue
- get_field(cls, model, opts, 'ordering[%d]' % idx, field)
-
- if hasattr(cls, "readonly_fields"):
- check_isseq(cls, "readonly_fields", cls.readonly_fields)
- for idx, field in enumerate(cls.readonly_fields):
- if not callable(field):
- if not hasattr(cls, field):
- if not hasattr(model, field):
- try:
- opts.get_field(field)
- except models.FieldDoesNotExist:
- raise ImproperlyConfigured("%s.readonly_fields[%d], %r is not a callable or an attribute of %r or found in the model %r."
- % (cls.__name__, idx, field, cls.__name__, model._meta.object_name))
-
- # list_select_related = False
- # save_as = False
- # save_on_top = False
- for attr in ('list_select_related', 'save_as', 'save_on_top'):
- if not isinstance(getattr(cls, attr), bool):
- raise ImproperlyConfigured("'%s.%s' should be a boolean."
- % (cls.__name__, attr))
-
-
- # inlines = []
- if hasattr(cls, 'inlines'):
- check_isseq(cls, 'inlines', cls.inlines)
- for idx, inline in enumerate(cls.inlines):
- if not issubclass(inline, BaseModelAdmin):
- raise ImproperlyConfigured("'%s.inlines[%d]' does not inherit "
- "from BaseModelAdmin." % (cls.__name__, idx))
- if not inline.model:
- raise ImproperlyConfigured("'model' is a required attribute "
- "of '%s.inlines[%d]'." % (cls.__name__, idx))
- if not issubclass(inline.model, models.Model):
- raise ImproperlyConfigured("'%s.inlines[%d].model' does not "
- "inherit from models.Model." % (cls.__name__, idx))
- validate_base(inline, inline.model)
- validate_inline(inline, cls, model)
-
-def validate_inline(cls, parent, parent_model):
-
- # model is already verified to exist and be a Model
- if cls.fk_name: # default value is None
- f = get_field(cls, cls.model, cls.model._meta, 'fk_name', cls.fk_name)
- if not isinstance(f, models.ForeignKey):
- raise ImproperlyConfigured("'%s.fk_name is not an instance of "
- "models.ForeignKey." % cls.__name__)
-
- fk = _get_foreign_key(parent_model, cls.model, fk_name=cls.fk_name, can_fail=True)
-
- # extra = 3
- if not isinstance(getattr(cls, 'extra'), int):
- raise ImproperlyConfigured("'%s.extra' should be a integer."
- % cls.__name__)
-
- # max_num = None
- max_num = getattr(cls, 'max_num', None)
- if max_num is not None and not isinstance(max_num, int):
- raise ImproperlyConfigured("'%s.max_num' should be an integer or None (default)."
- % cls.__name__)
-
- # formset
- if hasattr(cls, 'formset') and not issubclass(cls.formset, BaseModelFormSet):
- raise ImproperlyConfigured("'%s.formset' does not inherit from "
- "BaseModelFormSet." % cls.__name__)
-
- # exclude
- if hasattr(cls, 'exclude') and cls.exclude:
- if fk and fk.name in cls.exclude:
- raise ImproperlyConfigured("%s cannot exclude the field "
- "'%s' - this is the foreign key to the parent model "
- "%s." % (cls.__name__, fk.name, parent_model.__name__))
-
-def validate_base(cls, model):
- opts = model._meta
-
- # raw_id_fields
- if hasattr(cls, 'raw_id_fields'):
- check_isseq(cls, 'raw_id_fields', cls.raw_id_fields)
- for idx, field in enumerate(cls.raw_id_fields):
- f = get_field(cls, model, opts, 'raw_id_fields', field)
- if not isinstance(f, (models.ForeignKey, models.ManyToManyField)):
- raise ImproperlyConfigured("'%s.raw_id_fields[%d]', '%s' must "
- "be either a ForeignKey or ManyToManyField."
- % (cls.__name__, idx, field))
-
- # fields
- if cls.fields: # default value is None
- check_isseq(cls, 'fields', cls.fields)
- for field in cls.fields:
- if field in cls.readonly_fields:
- # Stuff can be put in fields that isn't actually a model field
- # if it's in readonly_fields, readonly_fields will handle the
- # validation of such things.
- continue
- check_formfield(cls, model, opts, 'fields', field)
- try:
- f = opts.get_field(field)
- except models.FieldDoesNotExist:
- # If we can't find a field on the model that matches,
- # it could be an extra field on the form.
- continue
- if isinstance(f, models.ManyToManyField) and not f.rel.through._meta.auto_created:
- raise ImproperlyConfigured("'%s.fields' can't include the ManyToManyField "
- "field '%s' because '%s' manually specifies "
- "a 'through' model." % (cls.__name__, field, field))
- if cls.fieldsets:
- raise ImproperlyConfigured('Both fieldsets and fields are specified in %s.' % cls.__name__)
- if len(cls.fields) > len(set(cls.fields)):
- raise ImproperlyConfigured('There are duplicate field(s) in %s.fields' % cls.__name__)
-
- # fieldsets
- if cls.fieldsets: # default value is None
- check_isseq(cls, 'fieldsets', cls.fieldsets)
- for idx, fieldset in enumerate(cls.fieldsets):
- check_isseq(cls, 'fieldsets[%d]' % idx, fieldset)
- if len(fieldset) != 2:
- raise ImproperlyConfigured("'%s.fieldsets[%d]' does not "
- "have exactly two elements." % (cls.__name__, idx))
- check_isdict(cls, 'fieldsets[%d][1]' % idx, fieldset[1])
- if 'fields' not in fieldset[1]:
- raise ImproperlyConfigured("'fields' key is required in "
- "%s.fieldsets[%d][1] field options dict."
- % (cls.__name__, idx))
- for fields in fieldset[1]['fields']:
- # The entry in fields might be a tuple. If it is a standalone
- # field, make it into a tuple to make processing easier.
- if type(fields) != tuple:
- fields = (fields,)
- for field in fields:
- if field in cls.readonly_fields:
- # Stuff can be put in fields that isn't actually a
- # model field if it's in readonly_fields,
- # readonly_fields will handle the validation of such
- # things.
- continue
- check_formfield(cls, model, opts, "fieldsets[%d][1]['fields']" % idx, field)
- try:
- f = opts.get_field(field)
- if isinstance(f, models.ManyToManyField) and not f.rel.through._meta.auto_created:
- raise ImproperlyConfigured("'%s.fieldsets[%d][1]['fields']' "
- "can't include the ManyToManyField field '%s' because "
- "'%s' manually specifies a 'through' model." % (
- cls.__name__, idx, field, field))
- except models.FieldDoesNotExist:
- # If we can't find a field on the model that matches,
- # it could be an extra field on the form.
- pass
- flattened_fieldsets = flatten_fieldsets(cls.fieldsets)
- if len(flattened_fieldsets) > len(set(flattened_fieldsets)):
- raise ImproperlyConfigured('There are duplicate field(s) in %s.fieldsets' % cls.__name__)
-
- # exclude
- if cls.exclude: # default value is None
- check_isseq(cls, 'exclude', cls.exclude)
- for field in cls.exclude:
- check_formfield(cls, model, opts, 'exclude', field)
- try:
- f = opts.get_field(field)
- except models.FieldDoesNotExist:
- # If we can't find a field on the model that matches,
- # it could be an extra field on the form.
- continue
- if len(cls.exclude) > len(set(cls.exclude)):
- raise ImproperlyConfigured('There are duplicate field(s) in %s.exclude' % cls.__name__)
-
- # form
- if hasattr(cls, 'form') and not issubclass(cls.form, BaseModelForm):
- raise ImproperlyConfigured("%s.form does not inherit from "
- "BaseModelForm." % cls.__name__)
-
- # filter_vertical
- if hasattr(cls, 'filter_vertical'):
- check_isseq(cls, 'filter_vertical', cls.filter_vertical)
- for idx, field in enumerate(cls.filter_vertical):
- f = get_field(cls, model, opts, 'filter_vertical', field)
- if not isinstance(f, models.ManyToManyField):
- raise ImproperlyConfigured("'%s.filter_vertical[%d]' must be "
- "a ManyToManyField." % (cls.__name__, idx))
-
- # filter_horizontal
- if hasattr(cls, 'filter_horizontal'):
- check_isseq(cls, 'filter_horizontal', cls.filter_horizontal)
- for idx, field in enumerate(cls.filter_horizontal):
- f = get_field(cls, model, opts, 'filter_horizontal', field)
- if not isinstance(f, models.ManyToManyField):
- raise ImproperlyConfigured("'%s.filter_horizontal[%d]' must be "
- "a ManyToManyField." % (cls.__name__, idx))
-
- # radio_fields
- if hasattr(cls, 'radio_fields'):
- check_isdict(cls, 'radio_fields', cls.radio_fields)
- for field, val in cls.radio_fields.items():
- f = get_field(cls, model, opts, 'radio_fields', field)
- if not (isinstance(f, models.ForeignKey) or f.choices):
- raise ImproperlyConfigured("'%s.radio_fields['%s']' "
- "is neither an instance of ForeignKey nor does "
- "have choices set." % (cls.__name__, field))
- if not val in (HORIZONTAL, VERTICAL):
- raise ImproperlyConfigured("'%s.radio_fields['%s']' "
- "is neither admin.HORIZONTAL nor admin.VERTICAL."
- % (cls.__name__, field))
-
- # prepopulated_fields
- if hasattr(cls, 'prepopulated_fields'):
- check_isdict(cls, 'prepopulated_fields', cls.prepopulated_fields)
- for field, val in cls.prepopulated_fields.items():
- f = get_field(cls, model, opts, 'prepopulated_fields', field)
- if isinstance(f, (models.DateTimeField, models.ForeignKey,
- models.ManyToManyField)):
- raise ImproperlyConfigured("'%s.prepopulated_fields['%s']' "
- "is either a DateTimeField, ForeignKey or "
- "ManyToManyField. This isn't allowed."
- % (cls.__name__, field))
- check_isseq(cls, "prepopulated_fields['%s']" % field, val)
- for idx, f in enumerate(val):
- get_field(cls, model, opts, "prepopulated_fields['%s'][%d]" % (field, idx), f)
-
-def check_isseq(cls, label, obj):
- if not isinstance(obj, (list, tuple)):
- raise ImproperlyConfigured("'%s.%s' must be a list or tuple." % (cls.__name__, label))
-
-def check_isdict(cls, label, obj):
- if not isinstance(obj, dict):
- raise ImproperlyConfigured("'%s.%s' must be a dictionary." % (cls.__name__, label))
-
-def get_field(cls, model, opts, label, field):
- try:
- return opts.get_field(field)
- except models.FieldDoesNotExist:
- raise ImproperlyConfigured("'%s.%s' refers to field '%s' that is missing from model '%s'."
- % (cls.__name__, label, field, model.__name__))
-
-def check_formfield(cls, model, opts, label, field):
- if getattr(cls.form, 'base_fields', None):
- try:
- cls.form.base_fields[field]
- except KeyError:
- raise ImproperlyConfigured("'%s.%s' refers to field '%s' that "
- "is missing from the form." % (cls.__name__, label, field))
- else:
- fields = fields_for_model(model)
- try:
- fields[field]
- except KeyError:
- raise ImproperlyConfigured("'%s.%s' refers to field '%s' that "
- "is missing from the form." % (cls.__name__, label, field))
-
-def fetch_attr(cls, model, opts, label, field):
- try:
- return opts.get_field(field)
- except models.FieldDoesNotExist:
- pass
- try:
- return getattr(model, field)
- except AttributeError:
- raise ImproperlyConfigured("'%s.%s' refers to '%s' that is neither a field, method or property of model '%s'."
- % (cls.__name__, label, field, model.__name__))
diff --git a/parts/django/django/contrib/admin/views/__init__.py b/parts/django/django/contrib/admin/views/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/admin/views/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/admin/views/decorators.py b/parts/django/django/contrib/admin/views/decorators.py
deleted file mode 100644
index 82184fc..0000000
--- a/parts/django/django/contrib/admin/views/decorators.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import base64
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-
-from django import http, template
-from django.conf import settings
-from django.contrib.auth.models import User
-from django.contrib.auth import authenticate, login
-from django.shortcuts import render_to_response
-from django.utils.translation import ugettext_lazy, ugettext as _
-
-ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.")
-LOGIN_FORM_KEY = 'this_is_the_login_form'
-
-def _display_login_form(request, error_message=''):
- request.session.set_test_cookie()
- return render_to_response('admin/login.html', {
- 'title': _('Log in'),
- 'app_path': request.get_full_path(),
- 'error_message': error_message
- }, context_instance=template.RequestContext(request))
-
-def staff_member_required(view_func):
- """
- Decorator for views that checks that the user is logged in and is a staff
- member, displaying the login page if necessary.
- """
- def _checklogin(request, *args, **kwargs):
- if request.user.is_active and request.user.is_staff:
- # The user is valid. Continue to the admin page.
- return view_func(request, *args, **kwargs)
-
- assert hasattr(request, 'session'), "The Django admin requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
-
- # If this isn't already the login page, display it.
- if LOGIN_FORM_KEY not in request.POST:
- if request.POST:
- message = _("Please log in again, because your session has expired.")
- else:
- message = ""
- return _display_login_form(request, message)
-
- # Check that the user accepts cookies.
- if not request.session.test_cookie_worked():
- message = _("Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again.")
- return _display_login_form(request, message)
- else:
- request.session.delete_test_cookie()
-
- # Check the password.
- username = request.POST.get('username', None)
- password = request.POST.get('password', None)
- user = authenticate(username=username, password=password)
- if user is None:
- message = ERROR_MESSAGE
- if '@' in username:
- # Mistakenly entered e-mail address instead of username? Look it up.
- users = list(User.objects.filter(email=username))
- if len(users) == 1 and users[0].check_password(password):
- message = _("Your e-mail address is not your username. Try '%s' instead.") % users[0].username
- return _display_login_form(request, message)
-
- # The user data is correct; log in the user in and continue.
- else:
- if user.is_active and user.is_staff:
- login(request, user)
- return http.HttpResponseRedirect(request.get_full_path())
- else:
- return _display_login_form(request, ERROR_MESSAGE)
-
- return wraps(view_func)(_checklogin)
diff --git a/parts/django/django/contrib/admin/views/main.py b/parts/django/django/contrib/admin/views/main.py
deleted file mode 100644
index 4303a65..0000000
--- a/parts/django/django/contrib/admin/views/main.py
+++ /dev/null
@@ -1,251 +0,0 @@
-from django.contrib.admin.filterspecs import FilterSpec
-from django.contrib.admin.options import IncorrectLookupParameters
-from django.contrib.admin.util import quote
-from django.core.exceptions import SuspiciousOperation
-from django.core.paginator import Paginator, InvalidPage
-from django.db import models
-from django.db.models.query import QuerySet
-from django.utils.encoding import force_unicode, smart_str
-from django.utils.translation import ugettext
-from django.utils.http import urlencode
-import operator
-
-# The system will display a "Show all" link on the change list only if the
-# total result count is less than or equal to this setting.
-MAX_SHOW_ALL_ALLOWED = 200
-
-# Changelist settings
-ALL_VAR = 'all'
-ORDER_VAR = 'o'
-ORDER_TYPE_VAR = 'ot'
-PAGE_VAR = 'p'
-SEARCH_VAR = 'q'
-TO_FIELD_VAR = 't'
-IS_POPUP_VAR = 'pop'
-ERROR_FLAG = 'e'
-
-# Text to display within change-list table cells if the value is blank.
-EMPTY_CHANGELIST_VALUE = '(None)'
-
-class ChangeList(object):
- def __init__(self, request, model, list_display, list_display_links, list_filter, date_hierarchy, search_fields, list_select_related, list_per_page, list_editable, model_admin):
- self.model = model
- self.opts = model._meta
- self.lookup_opts = self.opts
- self.root_query_set = model_admin.queryset(request)
- self.list_display = list_display
- self.list_display_links = list_display_links
- self.list_filter = list_filter
- self.date_hierarchy = date_hierarchy
- self.search_fields = search_fields
- self.list_select_related = list_select_related
- self.list_per_page = list_per_page
- self.list_editable = list_editable
- self.model_admin = model_admin
-
- # Get search parameters from the query string.
- try:
- self.page_num = int(request.GET.get(PAGE_VAR, 0))
- except ValueError:
- self.page_num = 0
- self.show_all = ALL_VAR in request.GET
- self.is_popup = IS_POPUP_VAR in request.GET
- self.to_field = request.GET.get(TO_FIELD_VAR)
- self.params = dict(request.GET.items())
- if PAGE_VAR in self.params:
- del self.params[PAGE_VAR]
- if TO_FIELD_VAR in self.params:
- del self.params[TO_FIELD_VAR]
- if ERROR_FLAG in self.params:
- del self.params[ERROR_FLAG]
-
- self.order_field, self.order_type = self.get_ordering()
- self.query = request.GET.get(SEARCH_VAR, '')
- self.query_set = self.get_query_set()
- self.get_results(request)
- self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
- self.filter_specs, self.has_filters = self.get_filters(request)
- self.pk_attname = self.lookup_opts.pk.attname
-
- def get_filters(self, request):
- filter_specs = []
- if self.list_filter:
- filter_fields = [self.lookup_opts.get_field(field_name) for field_name in self.list_filter]
- for f in filter_fields:
- spec = FilterSpec.create(f, request, self.params, self.model, self.model_admin)
- if spec and spec.has_output():
- filter_specs.append(spec)
- return filter_specs, bool(filter_specs)
-
- def get_query_string(self, new_params=None, remove=None):
- if new_params is None: new_params = {}
- if remove is None: remove = []
- p = self.params.copy()
- for r in remove:
- for k in p.keys():
- if k.startswith(r):
- del p[k]
- for k, v in new_params.items():
- if v is None:
- if k in p:
- del p[k]
- else:
- p[k] = v
- return '?%s' % urlencode(p)
-
- def get_results(self, request):
- paginator = Paginator(self.query_set, self.list_per_page)
- # Get the number of objects, with admin filters applied.
- result_count = paginator.count
-
- # Get the total number of objects, with no admin filters applied.
- # Perform a slight optimization: Check to see whether any filters were
- # given. If not, use paginator.hits to calculate the number of objects,
- # because we've already done paginator.hits and the value is cached.
- if not self.query_set.query.where:
- full_result_count = result_count
- else:
- full_result_count = self.root_query_set.count()
-
- can_show_all = result_count <= MAX_SHOW_ALL_ALLOWED
- multi_page = result_count > self.list_per_page
-
- # Get the list of objects to display on this page.
- if (self.show_all and can_show_all) or not multi_page:
- result_list = self.query_set._clone()
- else:
- try:
- result_list = paginator.page(self.page_num+1).object_list
- except InvalidPage:
- raise IncorrectLookupParameters
-
- self.result_count = result_count
- self.full_result_count = full_result_count
- self.result_list = result_list
- self.can_show_all = can_show_all
- self.multi_page = multi_page
- self.paginator = paginator
-
- def get_ordering(self):
- lookup_opts, params = self.lookup_opts, self.params
- # For ordering, first check the "ordering" parameter in the admin
- # options, then check the object's default ordering. If neither of
- # those exist, order descending by ID by default. Finally, look for
- # manually-specified ordering from the query string.
- ordering = self.model_admin.ordering or lookup_opts.ordering or ['-' + lookup_opts.pk.name]
-
- if ordering[0].startswith('-'):
- order_field, order_type = ordering[0][1:], 'desc'
- else:
- order_field, order_type = ordering[0], 'asc'
- if ORDER_VAR in params:
- try:
- field_name = self.list_display[int(params[ORDER_VAR])]
- try:
- f = lookup_opts.get_field(field_name)
- except models.FieldDoesNotExist:
- # See whether field_name is a name of a non-field
- # that allows sorting.
- try:
- if callable(field_name):
- attr = field_name
- elif hasattr(self.model_admin, field_name):
- attr = getattr(self.model_admin, field_name)
- else:
- attr = getattr(self.model, field_name)
- order_field = attr.admin_order_field
- except AttributeError:
- pass
- else:
- order_field = f.name
- except (IndexError, ValueError):
- pass # Invalid ordering specified. Just use the default.
- if ORDER_TYPE_VAR in params and params[ORDER_TYPE_VAR] in ('asc', 'desc'):
- order_type = params[ORDER_TYPE_VAR]
- return order_field, order_type
-
- def get_query_set(self):
- qs = self.root_query_set
- lookup_params = self.params.copy() # a dictionary of the query string
- for i in (ALL_VAR, ORDER_VAR, ORDER_TYPE_VAR, SEARCH_VAR, IS_POPUP_VAR):
- if i in lookup_params:
- del lookup_params[i]
- for key, value in lookup_params.items():
- if not isinstance(key, str):
- # 'key' will be used as a keyword argument later, so Python
- # requires it to be a string.
- del lookup_params[key]
- lookup_params[smart_str(key)] = value
-
- # if key ends with __in, split parameter into separate values
- if key.endswith('__in'):
- lookup_params[key] = value.split(',')
-
- # if key ends with __isnull, special case '' and false
- if key.endswith('__isnull'):
- if value.lower() in ('', 'false'):
- lookup_params[key] = False
- else:
- lookup_params[key] = True
-
- if not self.model_admin.lookup_allowed(key):
- raise SuspiciousOperation(
- "Filtering by %s not allowed" % key
- )
-
- # Apply lookup parameters from the query string.
- try:
- qs = qs.filter(**lookup_params)
- # Naked except! Because we don't have any other way of validating "params".
- # They might be invalid if the keyword arguments are incorrect, or if the
- # values are not in the correct type, so we might get FieldError, ValueError,
- # ValicationError, or ? from a custom field that raises yet something else
- # when handed impossible data.
- except:
- raise IncorrectLookupParameters
-
- # Use select_related() if one of the list_display options is a field
- # with a relationship and the provided queryset doesn't already have
- # select_related defined.
- if not qs.query.select_related:
- if self.list_select_related:
- qs = qs.select_related()
- else:
- for field_name in self.list_display:
- try:
- f = self.lookup_opts.get_field(field_name)
- except models.FieldDoesNotExist:
- pass
- else:
- if isinstance(f.rel, models.ManyToOneRel):
- qs = qs.select_related()
- break
-
- # Set ordering.
- if self.order_field:
- qs = qs.order_by('%s%s' % ((self.order_type == 'desc' and '-' or ''), self.order_field))
-
- # Apply keyword searches.
- def construct_search(field_name):
- if field_name.startswith('^'):
- return "%s__istartswith" % field_name[1:]
- elif field_name.startswith('='):
- return "%s__iexact" % field_name[1:]
- elif field_name.startswith('@'):
- return "%s__search" % field_name[1:]
- else:
- return "%s__icontains" % field_name
-
- if self.search_fields and self.query:
- for bit in self.query.split():
- or_queries = [models.Q(**{construct_search(str(field_name)): bit}) for field_name in self.search_fields]
- qs = qs.filter(reduce(operator.or_, or_queries))
- for field_name in self.search_fields:
- if '__' in field_name:
- qs = qs.distinct()
- break
-
- return qs
-
- def url_for_result(self, result):
- return "%s/" % quote(getattr(result, self.pk_attname))
diff --git a/parts/django/django/contrib/admin/widgets.py b/parts/django/django/contrib/admin/widgets.py
deleted file mode 100644
index e8cbd1d..0000000
--- a/parts/django/django/contrib/admin/widgets.py
+++ /dev/null
@@ -1,293 +0,0 @@
-"""
-Form Widget classes specific to the Django admin site.
-"""
-
-import django.utils.copycompat as copy
-
-from django import forms
-from django.forms.widgets import RadioFieldRenderer
-from django.forms.util import flatatt
-from django.utils.html import escape
-from django.utils.text import truncate_words
-from django.utils.translation import ugettext as _
-from django.utils.safestring import mark_safe
-from django.utils.encoding import force_unicode
-from django.conf import settings
-from django.core.urlresolvers import reverse, NoReverseMatch
-
-class FilteredSelectMultiple(forms.SelectMultiple):
- """
- A SelectMultiple with a JavaScript filter interface.
-
- Note that the resulting JavaScript assumes that the jsi18n
- catalog has been loaded in the page
- """
- class Media:
- js = (settings.ADMIN_MEDIA_PREFIX + "js/core.js",
- settings.ADMIN_MEDIA_PREFIX + "js/SelectBox.js",
- settings.ADMIN_MEDIA_PREFIX + "js/SelectFilter2.js")
-
- def __init__(self, verbose_name, is_stacked, attrs=None, choices=()):
- self.verbose_name = verbose_name
- self.is_stacked = is_stacked
- super(FilteredSelectMultiple, self).__init__(attrs, choices)
-
- def render(self, name, value, attrs=None, choices=()):
- if attrs is None: attrs = {}
- attrs['class'] = 'selectfilter'
- if self.is_stacked: attrs['class'] += 'stacked'
- output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)]
- output.append(u'<script type="text/javascript">addEvent(window, "load", function(e) {')
- # TODO: "id_" is hard-coded here. This should instead use the correct
- # API to determine the ID dynamically.
- output.append(u'SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % \
- (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.ADMIN_MEDIA_PREFIX))
- return mark_safe(u''.join(output))
-
-class AdminDateWidget(forms.DateInput):
- class Media:
- js = (settings.ADMIN_MEDIA_PREFIX + "js/calendar.js",
- settings.ADMIN_MEDIA_PREFIX + "js/admin/DateTimeShortcuts.js")
-
- def __init__(self, attrs={}, format=None):
- super(AdminDateWidget, self).__init__(attrs={'class': 'vDateField', 'size': '10'}, format=format)
-
-class AdminTimeWidget(forms.TimeInput):
- class Media:
- js = (settings.ADMIN_MEDIA_PREFIX + "js/calendar.js",
- settings.ADMIN_MEDIA_PREFIX + "js/admin/DateTimeShortcuts.js")
-
- def __init__(self, attrs={}, format=None):
- super(AdminTimeWidget, self).__init__(attrs={'class': 'vTimeField', 'size': '8'}, format=format)
-
-class AdminSplitDateTime(forms.SplitDateTimeWidget):
- """
- A SplitDateTime Widget that has some admin-specific styling.
- """
- def __init__(self, attrs=None):
- widgets = [AdminDateWidget, AdminTimeWidget]
- # Note that we're calling MultiWidget, not SplitDateTimeWidget, because
- # we want to define widgets.
- forms.MultiWidget.__init__(self, widgets, attrs)
-
- def format_output(self, rendered_widgets):
- return mark_safe(u'<p class="datetime">%s %s<br />%s %s</p>' % \
- (_('Date:'), rendered_widgets[0], _('Time:'), rendered_widgets[1]))
-
-class AdminRadioFieldRenderer(RadioFieldRenderer):
- def render(self):
- """Outputs a <ul> for this set of radio fields."""
- return mark_safe(u'<ul%s>\n%s\n</ul>' % (
- flatatt(self.attrs),
- u'\n'.join([u'<li>%s</li>' % force_unicode(w) for w in self]))
- )
-
-class AdminRadioSelect(forms.RadioSelect):
- renderer = AdminRadioFieldRenderer
-
-class AdminFileWidget(forms.FileInput):
- """
- A FileField Widget that shows its current value if it has one.
- """
- def __init__(self, attrs={}):
- super(AdminFileWidget, self).__init__(attrs)
-
- def render(self, name, value, attrs=None):
- output = []
- if value and hasattr(value, "url"):
- output.append('%s <a target="_blank" href="%s">%s</a> <br />%s ' % \
- (_('Currently:'), value.url, value, _('Change:')))
- output.append(super(AdminFileWidget, self).render(name, value, attrs))
- return mark_safe(u''.join(output))
-
-class ForeignKeyRawIdWidget(forms.TextInput):
- """
- A Widget for displaying ForeignKeys in the "raw_id" interface rather than
- in a <select> box.
- """
- def __init__(self, rel, attrs=None, using=None):
- self.rel = rel
- self.db = using
- super(ForeignKeyRawIdWidget, self).__init__(attrs)
-
- def render(self, name, value, attrs=None):
- if attrs is None:
- attrs = {}
- related_url = '../../../%s/%s/' % (self.rel.to._meta.app_label, self.rel.to._meta.object_name.lower())
- params = self.url_parameters()
- if params:
- url = '?' + '&amp;'.join(['%s=%s' % (k, v) for k, v in params.items()])
- else:
- url = ''
- if not attrs.has_key('class'):
- attrs['class'] = 'vForeignKeyRawIdAdminField' # The JavaScript looks for this hook.
- output = [super(ForeignKeyRawIdWidget, self).render(name, value, attrs)]
- # TODO: "id_" is hard-coded here. This should instead use the correct
- # API to determine the ID dynamically.
- output.append('<a href="%s%s" class="related-lookup" id="lookup_id_%s" onclick="return showRelatedObjectLookupPopup(this);"> ' % \
- (related_url, url, name))
- output.append('<img src="%simg/admin/selector-search.gif" width="16" height="16" alt="%s" /></a>' % (settings.ADMIN_MEDIA_PREFIX, _('Lookup')))
- if value:
- output.append(self.label_for_value(value))
- return mark_safe(u''.join(output))
-
- def base_url_parameters(self):
- params = {}
- if self.rel.limit_choices_to and hasattr(self.rel.limit_choices_to, 'items'):
- items = []
- for k, v in self.rel.limit_choices_to.items():
- if isinstance(v, list):
- v = ','.join([str(x) for x in v])
- else:
- v = str(v)
- items.append((k, v))
- params.update(dict(items))
- return params
-
- def url_parameters(self):
- from django.contrib.admin.views.main import TO_FIELD_VAR
- params = self.base_url_parameters()
- params.update({TO_FIELD_VAR: self.rel.get_related_field().name})
- return params
-
- def label_for_value(self, value):
- key = self.rel.get_related_field().name
- try:
- obj = self.rel.to._default_manager.using(self.db).get(**{key: value})
- return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))
- except (ValueError, self.rel.to.DoesNotExist):
- return ''
-
-class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
- """
- A Widget for displaying ManyToMany ids in the "raw_id" interface rather than
- in a <select multiple> box.
- """
- def render(self, name, value, attrs=None):
- if attrs is None:
- attrs = {}
- attrs['class'] = 'vManyToManyRawIdAdminField'
- if value:
- value = ','.join([force_unicode(v) for v in value])
- else:
- value = ''
- return super(ManyToManyRawIdWidget, self).render(name, value, attrs)
-
- def url_parameters(self):
- return self.base_url_parameters()
-
- def label_for_value(self, value):
- return ''
-
- def value_from_datadict(self, data, files, name):
- value = data.get(name, None)
- if value and ',' in value:
- return data[name].split(',')
- if value:
- return [value]
- return None
-
- def _has_changed(self, initial, data):
- if initial is None:
- initial = []
- if data is None:
- data = []
- if len(initial) != len(data):
- return True
- for pk1, pk2 in zip(initial, data):
- if force_unicode(pk1) != force_unicode(pk2):
- return True
- return False
-
-class RelatedFieldWidgetWrapper(forms.Widget):
- """
- This class is a wrapper to a given widget to add the add icon for the
- admin interface.
- """
- def __init__(self, widget, rel, admin_site):
- self.is_hidden = widget.is_hidden
- self.needs_multipart_form = widget.needs_multipart_form
- self.attrs = widget.attrs
- self.choices = widget.choices
- self.widget = widget
- self.rel = rel
- # so we can check if the related object is registered with this AdminSite
- self.admin_site = admin_site
-
- def __deepcopy__(self, memo):
- obj = copy.copy(self)
- obj.widget = copy.deepcopy(self.widget, memo)
- obj.attrs = self.widget.attrs
- memo[id(self)] = obj
- return obj
-
- def _media(self):
- return self.widget.media
- media = property(_media)
-
- def render(self, name, value, *args, **kwargs):
- rel_to = self.rel.to
- info = (rel_to._meta.app_label, rel_to._meta.object_name.lower())
- try:
- related_url = reverse('admin:%s_%s_add' % info, current_app=self.admin_site.name)
- except NoReverseMatch:
- info = (self.admin_site.root_path, rel_to._meta.app_label, rel_to._meta.object_name.lower())
- related_url = '%s%s/%s/add/' % info
- self.widget.choices = self.choices
- output = [self.widget.render(name, value, *args, **kwargs)]
- if rel_to in self.admin_site._registry: # If the related object has an admin interface:
- # TODO: "id_" is hard-coded here. This should instead use the correct
- # API to determine the ID dynamically.
- output.append(u'<a href="%s" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
- (related_url, name))
- output.append(u'<img src="%simg/admin/icon_addlink.gif" width="10" height="10" alt="%s"/></a>' % (settings.ADMIN_MEDIA_PREFIX, _('Add Another')))
- return mark_safe(u''.join(output))
-
- def build_attrs(self, extra_attrs=None, **kwargs):
- "Helper function for building an attribute dictionary."
- self.attrs = self.widget.build_attrs(extra_attrs=None, **kwargs)
- return self.attrs
-
- def value_from_datadict(self, data, files, name):
- return self.widget.value_from_datadict(data, files, name)
-
- def _has_changed(self, initial, data):
- return self.widget._has_changed(initial, data)
-
- def id_for_label(self, id_):
- return self.widget.id_for_label(id_)
-
-class AdminTextareaWidget(forms.Textarea):
- def __init__(self, attrs=None):
- final_attrs = {'class': 'vLargeTextField'}
- if attrs is not None:
- final_attrs.update(attrs)
- super(AdminTextareaWidget, self).__init__(attrs=final_attrs)
-
-class AdminTextInputWidget(forms.TextInput):
- def __init__(self, attrs=None):
- final_attrs = {'class': 'vTextField'}
- if attrs is not None:
- final_attrs.update(attrs)
- super(AdminTextInputWidget, self).__init__(attrs=final_attrs)
-
-class AdminURLFieldWidget(forms.TextInput):
- def __init__(self, attrs=None):
- final_attrs = {'class': 'vURLField'}
- if attrs is not None:
- final_attrs.update(attrs)
- super(AdminURLFieldWidget, self).__init__(attrs=final_attrs)
-
-class AdminIntegerFieldWidget(forms.TextInput):
- def __init__(self, attrs=None):
- final_attrs = {'class': 'vIntegerField'}
- if attrs is not None:
- final_attrs.update(attrs)
- super(AdminIntegerFieldWidget, self).__init__(attrs=final_attrs)
-
-class AdminCommaSeparatedIntegerFieldWidget(forms.TextInput):
- def __init__(self, attrs=None):
- final_attrs = {'class': 'vCommaSeparatedIntegerField'}
- if attrs is not None:
- final_attrs.update(attrs)
- super(AdminCommaSeparatedIntegerFieldWidget, self).__init__(attrs=final_attrs)
diff --git a/parts/django/django/contrib/admindocs/__init__.py b/parts/django/django/contrib/admindocs/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/admindocs/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/admindocs/models.py b/parts/django/django/contrib/admindocs/models.py
deleted file mode 100644
index a9f813a..0000000
--- a/parts/django/django/contrib/admindocs/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# Empty models.py to allow for specifying admindocs as a test label.
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/bookmarklets.html b/parts/django/django/contrib/admindocs/templates/admin_doc/bookmarklets.html
deleted file mode 100644
index 6447529..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/bookmarklets.html
+++ /dev/null
@@ -1,31 +0,0 @@
-{% extends "admin/base_site.html" %}
-
-{% block breadcrumbs %}{% load i18n %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> &rsaquo; <a href="../">{% trans "Documentation" %}</a> &rsaquo; {% trans "Bookmarklets" %}</div>{% endblock %}
-{% block title %}{% trans "Documentation bookmarklets" %}{% endblock %}
-
-{% block content %}
-
-{% blocktrans %}
-<p class="help">To install bookmarklets, drag the link to your bookmarks
-toolbar, or right-click the link and add it to your bookmarks. Now you can
-select the bookmarklet from any page in the site. Note that some of these
-bookmarklets require you to be viewing the site from a computer designated
-as "internal" (talk to your system administrator if you aren't sure if
-your computer is "internal").</p>
-{% endblocktrans %}
-
-<div id="content-main">
- <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){x=new XMLHttpRequest()}else{return;}x.open('HEAD',location.href,false);x.send(null);try{view=x.getResponseHeader('x-view');}catch(e){alert('No view found for this page');return;}if(view=='undefined'){alert('No view found for this page');}document.location='{{ admin_url }}doc/views/'+view+'/';})()">{% trans "Documentation for this page" %}</a></h3>
- <p>{% trans "Jumps you from any page to the documentation for the view that generates that page." %}</p>
-
- <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{type=x.getResponseHeader('x-object-type');id=x.getResponseHeader('x-object-id');}catch(e){type='(none)';id='(none)';}d=document;b=d.body;e=d.createElement('div');e.id='xxxhhh';s=e.style;s.position='absolute';s.left='10px';s.top='10px';s.font='10px monospace';s.border='1px black solid';s.padding='4px';s.backgroundColor='#eee';e.appendChild(d.createTextNode('Type: '+type));e.appendChild(d.createElement('br'));e.appendChild(d.createTextNode('ID: '+id));e.appendChild(d.createElement('br'));l=d.createElement('a');l.href='#';l.onclick=function(){b.removeChild(e);};l.appendChild(d.createTextNode('[close]'));l.style.textDecoration='none';e.appendChild(l);b.appendChild(e);})();">{% trans "Show object ID" %}</a></h3>
- <p>{% trans "Shows the content-type and unique ID for pages that represent a single object." %}</p>
-
- <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){var x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){var x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{var type=x.getResponseHeader('x-object-type');var id=x.getResponseHeader('x-object-id');}catch(e){return;}document.location='{{ admin_url }}'+type.split('.').join('/')+'/'+id+'/';})()">{% trans "Edit this object (current window)" %}</a></h3>
- <p>{% trans "Jumps to the admin page for pages that represent a single object." %}</p>
-
- <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){var x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){var x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{var type=x.getResponseHeader('x-object-type');var id=x.getResponseHeader('x-object-id');}catch(e){return;}window.open('{{ admin_url }}'+type.split('.').join('/')+'/'+id+'/');})()">{% trans "Edit this object (new window)" %}</a></h3>
- <p>{% trans "As above, but opens the admin page in a new window." %}</p>
-</div>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/index.html b/parts/django/django/contrib/admindocs/templates/admin_doc/index.html
deleted file mode 100644
index a8b21c3..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="{{ root_path }}">Home</a> &rsaquo; Documentation</div>{% endblock %}
-{% block title %}Documentation{% endblock %}
-
-{% block content %}
-
-<h1>Documentation</h1>
-
-<div id="content-main">
- <h3><a href="tags/">Tags</a></h3>
- <p>List of all the template tags and their functions.</p>
-
- <h3><a href="filters/">Filters</a></h3>
- <p>Filters are actions which can be applied to variables in a template to alter the output.</p>
-
- <h3><a href="models/">Models</a></h3>
- <p>Models are descriptions of all the objects in the system and their associated fields. Each model has a list of fields which can be accessed as template variables.</p>
-
- <h3><a href="views/">Views</a></h3>
- <p>Each page on the public site is generated by a view. The view defines which template is used to generate the page and which objects are available to that template.</p>
-
- <h3><a href="bookmarklets/">Bookmarklets</a></h3>
- <p>Tools for your browser to quickly access admin functionality.</p>
-</div>
-
-{% endblock %}
-
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/missing_docutils.html b/parts/django/django/contrib/admindocs/templates/admin_doc/missing_docutils.html
deleted file mode 100644
index 97c9d47..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/missing_docutils.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">Home</a> &rsaquo; Documentation</div>{% endblock %}
-{% block title %}Please install docutils{% endblock %}
-
-{% block content %}
-
-<h1>Documentation</h1>
-
-<div id="content-main">
- <h3>The admin documentation system requires Python's <a href="http://docutils.sf.net/">docutils</a> library.</h3>
-
- <p>Please ask your administrators to install <a href="http://docutils.sf.net/">docutils</a>.</p>
-</div>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/model_detail.html b/parts/django/django/contrib/admindocs/templates/admin_doc/model_detail.html
deleted file mode 100644
index 828df18..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/model_detail.html
+++ /dev/null
@@ -1,46 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block extrahead %}
-{{ block.super }}
-<style type="text/css">
-.module table { width:100%; }
-.module table p { padding: 0; margin: 0; }
-</style>
-{% endblock %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../../">Home</a> &rsaquo; <a href="../../">Documentation</a> &rsaquo; <a href="../">Models</a> &rsaquo; {{ name }}</div>{% endblock %}
-
-{% block title %}Model: {{ name }}{% endblock %}
-
-{% block content %}
-<div id="content-main">
-<h1>{{ summary }}</h1>
-
-{% if description %}
- <p>{% filter linebreaksbr %}{% trans description %}{% endfilter %}</p>
-{% endif %}
-
-<div class="module">
-<table class="model">
-<thead>
-<tr>
- <th>Field</th>
- <th>Type</th>
- <th>Description</th>
-</tr>
-</thead>
-<tbody>
-{% for field in fields|dictsort:"name" %}
-<tr>
- <td>{{ field.name }}</td>
- <td>{{ field.data_type }}</td>
- <td>{{ field.verbose }}{% if field.help_text %} - {{ field.help_text|safe }}{% endif %}</td>
-</tr>
-{% endfor %}
-</tbody>
-</table>
-</div>
-
-<p class="small"><a href="../">&lsaquo; Back to Models Documentation</a></p>
-</div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/model_index.html b/parts/django/django/contrib/admindocs/templates/admin_doc/model_index.html
deleted file mode 100644
index 47c94c0..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/model_index.html
+++ /dev/null
@@ -1,44 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block coltype %}colSM{% endblock %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> &rsaquo; <a href="../">Documentation</a> &rsaquo; Models</div>{% endblock %}
-
-{% block title %}Models{% endblock %}
-
-{% block content %}
-
-<h1>Model documentation</h1>
-
-{% regroup models by app_label as grouped_models %}
-
-<div id="content-main">
-{% for group in grouped_models %}
-<div class="module">
-<h2 id="app-{{ group.grouper }}">{{ group.grouper|capfirst }}</h2>
-
-<table class="xfull">
-{% for model in group.list %}
-<tr>
-<th><a href="{{ model.app_label }}.{{ model.object_name.lower }}/">{{ model.object_name }}</a></th>
-</tr>
-{% endfor %}
-</table>
-</div>
-{% endfor %}
-
-</div>
-{% endblock %}
-
-{% block sidebar %}
-<div id="content-related" class="sidebar">
-<div class="module">
-<h2>Model groups</h2>
-<ul>
-{% regroup models by app_label as grouped_models %}
-{% for group in grouped_models %}
- <li><a href="#app-{{ group.grouper }}">{{ group.grouper|capfirst }}</a></li>
-{% endfor %}
-</ul>
-</div>
-</div>
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/template_detail.html b/parts/django/django/contrib/admindocs/templates/admin_doc/template_detail.html
deleted file mode 100644
index c04dedc..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/template_detail.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../../">Home</a> &rsaquo; <a href="../../">Documentation</a> &rsaquo; Templates &rsaquo; {{ name }}</div>{% endblock %}
-
-{% block title %}Template: {{ name }}{% endblock %}
-
-{% block content %}
-<h1>Template: "{{ name }}"</h1>
-
-{% regroup templates|dictsort:"site_id" by site as templates_by_site %}
-{% for group in templates_by_site %}
- <h2>Search path for template "{{ name }}" on {{ group.grouper }}:</h2>
- <ol>
- {% for template in group.list|dictsort:"order" %}
- <li><code>{{ template.file }}</code>{% if not template.exists %} <em>(does not exist)</em>{% endif %}</li>
- {% endfor %}
- </ol>
-{% endfor %}
-
-<p class="small"><a href="../../">&lsaquo; Back to Documentation</a></p>
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/template_filter_index.html b/parts/django/django/contrib/admindocs/templates/admin_doc/template_filter_index.html
deleted file mode 100644
index 7470762..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/template_filter_index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block coltype %}colSM{% endblock %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> &rsaquo; <a href="../">Documentation</a> &rsaquo; filters</div>{% endblock %}
-{% block title %}Template filters{% endblock %}
-
-{% block content %}
-
-<h1>Template filter documentation</h1>
-
-<div id="content-main">
-{% regroup filters|dictsort:"library" by library as filter_libraries %}
-{% for library in filter_libraries %}
-<div class="module">
- <h2>{% firstof library.grouper "Built-in filters" %}</h2>
- {% if library.grouper %}<p class="small quiet">To use these filters, put <code>{% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %}</code> in your template before using the filter.</p><hr />{% endif %}
- {% for filter in library.list|dictsort:"name" %}
- <h3 id="{{ library.grouper|default_if_none:"built_in" }}-{{ filter.name }}">{{ filter.name }}</h3>
- <p>{{ filter.title }}</p>
- <p>{{ filter.body }}</p>
- {% if not forloop.last %}<hr />{% endif %}
- {% endfor %}
-</div>
-{% endfor %}
-</div>
-
-{% endblock %}
-
-{% block sidebar %}
-
-<div id="content-related">
-
-{% regroup filters|dictsort:"library" by library as filter_libraries %}
-{% for library in filter_libraries %}
-<div class="module">
- <h2>{% firstof library.grouper "Built-in filters" %}</h2>
- <ul>
- {% for filter in library.list|dictsort:"name" %}
- <li><a href="#{{ library.grouper|default_if_none:"built_in" }}-{{ filter.name }}">{{ filter.name }}</a></li>
- {% endfor %}
- </ul>
-</div>
-{% endfor %}
-
-</div>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/template_tag_index.html b/parts/django/django/contrib/admindocs/templates/admin_doc/template_tag_index.html
deleted file mode 100644
index 774130b..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/template_tag_index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block coltype %}colSM{% endblock %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> &rsaquo; <a href="../">Documentation</a> &rsaquo; Tags</div>{% endblock %}
-{% block title %}Template tags{% endblock %}
-
-{% block content %}
-
-<h1>Template tag documentation</h1>
-
-<div id="content-main">
-{% regroup tags|dictsort:"library" by library as tag_libraries %}
-{% for library in tag_libraries %}
-<div class="module">
- <h2>{% firstof library.grouper "Built-in tags" %}</h2>
- {% if library.grouper %}<p class="small quiet">To use these tags, put <code>{% templatetag openblock %} load {{ library.grouper }} {% templatetag closeblock %}</code> in your template before using the tag.</p><hr />{% endif %}
- {% for tag in library.list|dictsort:"name" %}
- <h3 id="{{ library.grouper|default_if_none:"built_in" }}-{{ tag.name }}">{{ tag.name }}</h3>
- <h4>{{ tag.title }}</h4>
- <p>{{ tag.body }}</p>
- {% if not forloop.last %}<hr />{% endif %}
- {% endfor %}
-</div>
-{% endfor %}
-</div>
-
-{% endblock %}
-
-{% block sidebar %}
-
-<div id="content-related">
-
-{% regroup tags|dictsort:"library" by library as tag_libraries %}
-{% for library in tag_libraries %}
-<div class="module">
- <h2>{% firstof library.grouper "Built-in tags" %}</h2>
- <ul>
- {% for tag in library.list|dictsort:"name" %}
- <li><a href="#{{ library.grouper|default_if_none:"built_in" }}-{{ tag.name }}">{{ tag.name }}</a></li>
- {% endfor %}
- </ul>
-</div>
-{% endfor %}
-
-</div>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/view_detail.html b/parts/django/django/contrib/admindocs/templates/admin_doc/view_detail.html
deleted file mode 100644
index d7415ab..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/view_detail.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../../">Home</a> &rsaquo; <a href="../../">Documentation</a> &rsaquo; <a href="../">Views</a> &rsaquo; {{ name }}</div>{% endblock %}
-{% block title %}View: {{ name }}{% endblock %}
-
-{% block content %}
-
-<h1>{{ name }}</h1>
-
-<h2 class="subhead">{{ summary }}</h2>
-
-<p>{{ body }}</p>
-
-{% if meta.Context %}
-<h3>Context:</h3>
-<p>{{ meta.Context }}</p>
-{% endif %}
-
-{% if meta.Templates %}
-<h3>Templates:</h3>
-<p>{{ meta.Templates }}</p>
-{% endif %}
-
-<p class="small"><a href="../">&lsaquo; Back to Views Documentation</a></p>
-{% endblock %}
diff --git a/parts/django/django/contrib/admindocs/templates/admin_doc/view_index.html b/parts/django/django/contrib/admindocs/templates/admin_doc/view_index.html
deleted file mode 100644
index 6b10fa6..0000000
--- a/parts/django/django/contrib/admindocs/templates/admin_doc/view_index.html
+++ /dev/null
@@ -1,43 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% block coltype %}colSM{% endblock %}
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> &rsaquo; <a href="../">Documentation</a> &rsaquo; Views</div>{% endblock %}
-{% block title %}Views{% endblock %}
-
-{% block content %}
-
-<h1>View documentation</h1>
-
-{% regroup views|dictsort:"site_id" by site as views_by_site %}
-
-<div id="content-related" class="sidebar">
-<div class="module">
-<h2>Jump to site</h2>
-<ul>
- {% for site_views in views_by_site %}
- <li><a href="#site{{ site_views.grouper.id }}">{{ site_views.grouper.name }}</a></li>
- {% endfor %}
-</ul>
-</div>
-</div>
-
-<div id="content-main">
-
-{% for site_views in views_by_site %}
-<div class="module">
-<h2 id="site{{ site_views.grouper.id }}">Views by URL on {{ site_views.grouper.name }}</h2>
-
-{% for view in site_views.list|dictsort:"url" %}
-{% ifchanged %}
-<h3><a href="{{ view.module }}.{{ view.name }}/">{{ view.url }}</a></h3>
-<p class="small quiet">View function: {{ view.module }}.{{ view.name }}</p>
-<p>{{ view.title }}</p>
-<hr />
-{% endifchanged %}
-{% endfor %}
-</div>
-{% endfor %}
-</div>
-{% endblock %}
-
-
diff --git a/parts/django/django/contrib/admindocs/tests/__init__.py b/parts/django/django/contrib/admindocs/tests/__init__.py
deleted file mode 100644
index b4526c6..0000000
--- a/parts/django/django/contrib/admindocs/tests/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import unittest
-import fields
-from django.contrib.admindocs import views
-from django.db.models import fields as builtin_fields
-
-
-class TestFieldType(unittest.TestCase):
- def setUp(self):
- pass
-
- def test_field_name(self):
- self.assertRaises(AttributeError,
- views.get_readable_field_data_type, "NotAField"
- )
-
- def test_builtin_fields(self):
- self.assertEqual(
- views.get_readable_field_data_type(builtin_fields.BooleanField()),
- u'Boolean (Either True or False)'
- )
-
- def test_custom_fields(self):
- self.assertEqual(
- views.get_readable_field_data_type(fields.CustomField()),
- u'A custom field type'
- )
- self.assertEqual(
- views.get_readable_field_data_type(fields.DescriptionLackingField()),
- u'Field of type: DescriptionLackingField'
- )
diff --git a/parts/django/django/contrib/admindocs/tests/fields.py b/parts/django/django/contrib/admindocs/tests/fields.py
deleted file mode 100644
index e59498a..0000000
--- a/parts/django/django/contrib/admindocs/tests/fields.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.db import models
-
-class CustomField(models.Field):
- description = "A custom field type"
-
-class DescriptionLackingField(models.Field):
- pass
diff --git a/parts/django/django/contrib/admindocs/urls.py b/parts/django/django/contrib/admindocs/urls.py
deleted file mode 100644
index 57edb56..0000000
--- a/parts/django/django/contrib/admindocs/urls.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from django.conf.urls.defaults import *
-from django.contrib.admindocs import views
-
-urlpatterns = patterns('',
- url('^$',
- views.doc_index,
- name='django-admindocs-docroot'
- ),
- url('^bookmarklets/$',
- views.bookmarklets,
- name='django-admindocs-bookmarklets'
- ),
- url('^tags/$',
- views.template_tag_index,
- name='django-admindocs-tags'
- ),
- url('^filters/$',
- views.template_filter_index,
- name='django-admindocs-filters'
- ),
- url('^views/$',
- views.view_index,
- name='django-admindocs-views-index'
- ),
- url('^views/(?P<view>[^/]+)/$',
- views.view_detail,
- name='django-admindocs-views-detail'
- ),
- url('^models/$',
- views.model_index,
- name='django-admindocs-models-index'
- ),
- url('^models/(?P<app_label>[^\.]+)\.(?P<model_name>[^/]+)/$',
- views.model_detail,
- name='django-admindocs-models-detail'
- ),
- url('^templates/(?P<template>.*)/$',
- views.template_detail,
- name='django-admindocs-templates'
- ),
-)
diff --git a/parts/django/django/contrib/admindocs/utils.py b/parts/django/django/contrib/admindocs/utils.py
deleted file mode 100644
index 41c627c..0000000
--- a/parts/django/django/contrib/admindocs/utils.py
+++ /dev/null
@@ -1,105 +0,0 @@
-"Misc. utility functions/classes for admin documentation generator."
-
-import re
-from email.Parser import HeaderParser
-from email.Errors import HeaderParseError
-from django.utils.safestring import mark_safe
-from django.core.urlresolvers import reverse
-from django.utils.encoding import smart_str
-try:
- import docutils.core
- import docutils.nodes
- import docutils.parsers.rst.roles
-except ImportError:
- docutils_is_available = False
-else:
- docutils_is_available = True
-
-def trim_docstring(docstring):
- """
- Uniformly trims leading/trailing whitespace from docstrings.
-
- Based on http://www.python.org/peps/pep-0257.html#handling-docstring-indentation
- """
- if not docstring or not docstring.strip():
- return ''
- # Convert tabs to spaces and split into lines
- lines = docstring.expandtabs().splitlines()
- indent = min([len(line) - len(line.lstrip()) for line in lines if line.lstrip()])
- trimmed = [lines[0].lstrip()] + [line[indent:].rstrip() for line in lines[1:]]
- return "\n".join(trimmed).strip()
-
-def parse_docstring(docstring):
- """
- Parse out the parts of a docstring. Returns (title, body, metadata).
- """
- docstring = trim_docstring(docstring)
- parts = re.split(r'\n{2,}', docstring)
- title = parts[0]
- if len(parts) == 1:
- body = ''
- metadata = {}
- else:
- parser = HeaderParser()
- try:
- metadata = parser.parsestr(parts[-1])
- except HeaderParseError:
- metadata = {}
- body = "\n\n".join(parts[1:])
- else:
- metadata = dict(metadata.items())
- if metadata:
- body = "\n\n".join(parts[1:-1])
- else:
- body = "\n\n".join(parts[1:])
- return title, body, metadata
-
-def parse_rst(text, default_reference_context, thing_being_parsed=None):
- """
- Convert the string from reST to an XHTML fragment.
- """
- overrides = {
- 'doctitle_xform' : True,
- 'inital_header_level' : 3,
- "default_reference_context" : default_reference_context,
- "link_base" : reverse('django-admindocs-docroot').rstrip('/')
- }
- if thing_being_parsed:
- thing_being_parsed = smart_str("<%s>" % thing_being_parsed)
- parts = docutils.core.publish_parts(text, source_path=thing_being_parsed,
- destination_path=None, writer_name='html',
- settings_overrides=overrides)
- return mark_safe(parts['fragment'])
-
-#
-# reST roles
-#
-ROLES = {
- 'model' : '%s/models/%s/',
- 'view' : '%s/views/%s/',
- 'template' : '%s/templates/%s/',
- 'filter' : '%s/filters/#%s',
- 'tag' : '%s/tags/#%s',
-}
-
-def create_reference_role(rolename, urlbase):
- def _role(name, rawtext, text, lineno, inliner, options=None, content=None):
- if options is None: options = {}
- if content is None: content = []
- node = docutils.nodes.reference(rawtext, text, refuri=(urlbase % (inliner.document.settings.link_base, text.lower())), **options)
- return [node], []
- docutils.parsers.rst.roles.register_canonical_role(rolename, _role)
-
-def default_reference_role(name, rawtext, text, lineno, inliner, options=None, content=None):
- if options is None: options = {}
- if content is None: content = []
- context = inliner.document.settings.default_reference_context
- node = docutils.nodes.reference(rawtext, text, refuri=(ROLES[context] % (inliner.document.settings.link_base, text.lower())), **options)
- return [node], []
-
-if docutils_is_available:
- docutils.parsers.rst.roles.register_canonical_role('cmsreference', default_reference_role)
- docutils.parsers.rst.roles.DEFAULT_INTERPRETED_ROLE = 'cmsreference'
-
- for name, urlbase in ROLES.items():
- create_reference_role(name, urlbase)
diff --git a/parts/django/django/contrib/admindocs/views.py b/parts/django/django/contrib/admindocs/views.py
deleted file mode 100644
index 5bfa0f7..0000000
--- a/parts/django/django/contrib/admindocs/views.py
+++ /dev/null
@@ -1,387 +0,0 @@
-from django import template, templatetags
-from django.template import RequestContext
-from django.conf import settings
-from django.contrib.admin.views.decorators import staff_member_required
-from django.db import models
-from django.shortcuts import render_to_response
-from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
-from django.http import Http404
-from django.core import urlresolvers
-from django.contrib.admindocs import utils
-from django.contrib.sites.models import Site
-from django.utils.importlib import import_module
-from django.utils.translation import ugettext as _
-from django.utils.safestring import mark_safe
-import inspect, os, re
-
-# Exclude methods starting with these strings from documentation
-MODEL_METHODS_EXCLUDE = ('_', 'add_', 'delete', 'save', 'set_')
-
-class GenericSite(object):
- domain = 'example.com'
- name = 'my site'
-
-def get_root_path():
- try:
- return urlresolvers.reverse('admin:index')
- except urlresolvers.NoReverseMatch:
- from django.contrib import admin
- try:
- return urlresolvers.reverse(admin.site.root, args=[''])
- except urlresolvers.NoReverseMatch:
- return getattr(settings, "ADMIN_SITE_ROOT_URL", "/admin/")
-
-def doc_index(request):
- if not utils.docutils_is_available:
- return missing_docutils_page(request)
- return render_to_response('admin_doc/index.html', {
- 'root_path': get_root_path(),
- }, context_instance=RequestContext(request))
-doc_index = staff_member_required(doc_index)
-
-def bookmarklets(request):
- admin_root = get_root_path()
- return render_to_response('admin_doc/bookmarklets.html', {
- 'root_path': admin_root,
- 'admin_url': mark_safe("%s://%s%s" % (request.is_secure() and 'https' or 'http', request.get_host(), admin_root)),
- }, context_instance=RequestContext(request))
-bookmarklets = staff_member_required(bookmarklets)
-
-def template_tag_index(request):
- if not utils.docutils_is_available:
- return missing_docutils_page(request)
-
- load_all_installed_template_libraries()
-
- tags = []
- app_libs = template.libraries.items()
- builtin_libs = [(None, lib) for lib in template.builtins]
- for module_name, library in builtin_libs + app_libs:
- for tag_name, tag_func in library.tags.items():
- title, body, metadata = utils.parse_docstring(tag_func.__doc__)
- if title:
- title = utils.parse_rst(title, 'tag', _('tag:') + tag_name)
- if body:
- body = utils.parse_rst(body, 'tag', _('tag:') + tag_name)
- for key in metadata:
- metadata[key] = utils.parse_rst(metadata[key], 'tag', _('tag:') + tag_name)
- if library in template.builtins:
- tag_library = None
- else:
- tag_library = module_name.split('.')[-1]
- tags.append({
- 'name': tag_name,
- 'title': title,
- 'body': body,
- 'meta': metadata,
- 'library': tag_library,
- })
- return render_to_response('admin_doc/template_tag_index.html', {
- 'root_path': get_root_path(),
- 'tags': tags
- }, context_instance=RequestContext(request))
-template_tag_index = staff_member_required(template_tag_index)
-
-def template_filter_index(request):
- if not utils.docutils_is_available:
- return missing_docutils_page(request)
-
- load_all_installed_template_libraries()
-
- filters = []
- app_libs = template.libraries.items()
- builtin_libs = [(None, lib) for lib in template.builtins]
- for module_name, library in builtin_libs + app_libs:
- for filter_name, filter_func in library.filters.items():
- title, body, metadata = utils.parse_docstring(filter_func.__doc__)
- if title:
- title = utils.parse_rst(title, 'filter', _('filter:') + filter_name)
- if body:
- body = utils.parse_rst(body, 'filter', _('filter:') + filter_name)
- for key in metadata:
- metadata[key] = utils.parse_rst(metadata[key], 'filter', _('filter:') + filter_name)
- if library in template.builtins:
- tag_library = None
- else:
- tag_library = module_name.split('.')[-1]
- filters.append({
- 'name': filter_name,
- 'title': title,
- 'body': body,
- 'meta': metadata,
- 'library': tag_library,
- })
- return render_to_response('admin_doc/template_filter_index.html', {
- 'root_path': get_root_path(),
- 'filters': filters
- }, context_instance=RequestContext(request))
-template_filter_index = staff_member_required(template_filter_index)
-
-def view_index(request):
- if not utils.docutils_is_available:
- return missing_docutils_page(request)
-
- if settings.ADMIN_FOR:
- settings_modules = [import_module(m) for m in settings.ADMIN_FOR]
- else:
- settings_modules = [settings]
-
- views = []
- for settings_mod in settings_modules:
- urlconf = import_module(settings_mod.ROOT_URLCONF)
- view_functions = extract_views_from_urlpatterns(urlconf.urlpatterns)
- if Site._meta.installed:
- site_obj = Site.objects.get(pk=settings_mod.SITE_ID)
- else:
- site_obj = GenericSite()
- for (func, regex) in view_functions:
- views.append({
- 'name': getattr(func, '__name__', func.__class__.__name__),
- 'module': func.__module__,
- 'site_id': settings_mod.SITE_ID,
- 'site': site_obj,
- 'url': simplify_regex(regex),
- })
- return render_to_response('admin_doc/view_index.html', {
- 'root_path': get_root_path(),
- 'views': views
- }, context_instance=RequestContext(request))
-view_index = staff_member_required(view_index)
-
-def view_detail(request, view):
- if not utils.docutils_is_available:
- return missing_docutils_page(request)
-
- mod, func = urlresolvers.get_mod_func(view)
- try:
- view_func = getattr(import_module(mod), func)
- except (ImportError, AttributeError):
- raise Http404
- title, body, metadata = utils.parse_docstring(view_func.__doc__)
- if title:
- title = utils.parse_rst(title, 'view', _('view:') + view)
- if body:
- body = utils.parse_rst(body, 'view', _('view:') + view)
- for key in metadata:
- metadata[key] = utils.parse_rst(metadata[key], 'model', _('view:') + view)
- return render_to_response('admin_doc/view_detail.html', {
- 'root_path': get_root_path(),
- 'name': view,
- 'summary': title,
- 'body': body,
- 'meta': metadata,
- }, context_instance=RequestContext(request))
-view_detail = staff_member_required(view_detail)
-
-def model_index(request):
- if not utils.docutils_is_available:
- return missing_docutils_page(request)
- m_list = [m._meta for m in models.get_models()]
- return render_to_response('admin_doc/model_index.html', {
- 'root_path': get_root_path(),
- 'models': m_list
- }, context_instance=RequestContext(request))
-model_index = staff_member_required(model_index)
-
-def model_detail(request, app_label, model_name):
- if not utils.docutils_is_available:
- return missing_docutils_page(request)
-
- # Get the model class.
- try:
- app_mod = models.get_app(app_label)
- except ImproperlyConfigured:
- raise Http404(_("App %r not found") % app_label)
- model = None
- for m in models.get_models(app_mod):
- if m._meta.object_name.lower() == model_name:
- model = m
- break
- if model is None:
- raise Http404(_("Model %(model_name)r not found in app %(app_label)r") % {'model_name': model_name, 'app_label': app_label})
-
- opts = model._meta
-
- # Gather fields/field descriptions.
- fields = []
- for field in opts.fields:
- # ForeignKey is a special case since the field will actually be a
- # descriptor that returns the other object
- if isinstance(field, models.ForeignKey):
- data_type = related_object_name = field.rel.to.__name__
- app_label = field.rel.to._meta.app_label
- verbose = utils.parse_rst((_("the related `%(app_label)s.%(data_type)s` object") % {'app_label': app_label, 'data_type': data_type}), 'model', _('model:') + data_type)
- else:
- data_type = get_readable_field_data_type(field)
- verbose = field.verbose_name
- fields.append({
- 'name': field.name,
- 'data_type': data_type,
- 'verbose': verbose,
- 'help_text': field.help_text,
- })
-
- # Gather many-to-many fields.
- for field in opts.many_to_many:
- data_type = related_object_name = field.rel.to.__name__
- app_label = field.rel.to._meta.app_label
- verbose = _("related `%(app_label)s.%(object_name)s` objects") % {'app_label': app_label, 'object_name': data_type}
- fields.append({
- 'name': "%s.all" % field.name,
- "data_type": 'List',
- 'verbose': utils.parse_rst(_("all %s") % verbose , 'model', _('model:') + opts.module_name),
- })
- fields.append({
- 'name' : "%s.count" % field.name,
- 'data_type' : 'Integer',
- 'verbose' : utils.parse_rst(_("number of %s") % verbose , 'model', _('model:') + opts.module_name),
- })
-
- # Gather model methods.
- for func_name, func in model.__dict__.items():
- if (inspect.isfunction(func) and len(inspect.getargspec(func)[0]) == 1):
- try:
- for exclude in MODEL_METHODS_EXCLUDE:
- if func_name.startswith(exclude):
- raise StopIteration
- except StopIteration:
- continue
- verbose = func.__doc__
- if verbose:
- verbose = utils.parse_rst(utils.trim_docstring(verbose), 'model', _('model:') + opts.module_name)
- fields.append({
- 'name': func_name,
- 'data_type': get_return_data_type(func_name),
- 'verbose': verbose,
- })
-
- # Gather related objects
- for rel in opts.get_all_related_objects() + opts.get_all_related_many_to_many_objects():
- verbose = _("related `%(app_label)s.%(object_name)s` objects") % {'app_label': rel.opts.app_label, 'object_name': rel.opts.object_name}
- accessor = rel.get_accessor_name()
- fields.append({
- 'name' : "%s.all" % accessor,
- 'data_type' : 'List',
- 'verbose' : utils.parse_rst(_("all %s") % verbose , 'model', _('model:') + opts.module_name),
- })
- fields.append({
- 'name' : "%s.count" % accessor,
- 'data_type' : 'Integer',
- 'verbose' : utils.parse_rst(_("number of %s") % verbose , 'model', _('model:') + opts.module_name),
- })
- return render_to_response('admin_doc/model_detail.html', {
- 'root_path': get_root_path(),
- 'name': '%s.%s' % (opts.app_label, opts.object_name),
- 'summary': _("Fields on %s objects") % opts.object_name,
- 'description': model.__doc__,
- 'fields': fields,
- }, context_instance=RequestContext(request))
-model_detail = staff_member_required(model_detail)
-
-def template_detail(request, template):
- templates = []
- for site_settings_module in settings.ADMIN_FOR:
- settings_mod = import_module(site_settings_module)
- if Site._meta.installed:
- site_obj = Site.objects.get(pk=settings_mod.SITE_ID)
- else:
- site_obj = GenericSite()
- for dir in settings_mod.TEMPLATE_DIRS:
- template_file = os.path.join(dir, template)
- templates.append({
- 'file': template_file,
- 'exists': os.path.exists(template_file),
- 'contents': lambda: os.path.exists(template_file) and open(template_file).read() or '',
- 'site_id': settings_mod.SITE_ID,
- 'site': site_obj,
- 'order': list(settings_mod.TEMPLATE_DIRS).index(dir),
- })
- return render_to_response('admin_doc/template_detail.html', {
- 'root_path': get_root_path(),
- 'name': template,
- 'templates': templates,
- }, context_instance=RequestContext(request))
-template_detail = staff_member_required(template_detail)
-
-####################
-# Helper functions #
-####################
-
-def missing_docutils_page(request):
- """Display an error message for people without docutils"""
- return render_to_response('admin_doc/missing_docutils.html')
-
-def load_all_installed_template_libraries():
- # Load/register all template tag libraries from installed apps.
- for module_name in template.get_templatetags_modules():
- mod = import_module(module_name)
- libraries = [
- os.path.splitext(p)[0]
- for p in os.listdir(os.path.dirname(mod.__file__))
- if p.endswith('.py') and p[0].isalpha()
- ]
- for library_name in libraries:
- try:
- lib = template.get_library(library_name)
- except template.InvalidTemplateLibrary, e:
- pass
-
-def get_return_data_type(func_name):
- """Return a somewhat-helpful data type given a function name"""
- if func_name.startswith('get_'):
- if func_name.endswith('_list'):
- return 'List'
- elif func_name.endswith('_count'):
- return 'Integer'
- return ''
-
-def get_readable_field_data_type(field):
- """Returns the description for a given field type, if it exists,
- Fields' descriptions can contain format strings, which will be interpolated
- against the values of field.__dict__ before being output."""
-
- return field.description % field.__dict__
-
-def extract_views_from_urlpatterns(urlpatterns, base=''):
- """
- Return a list of views from a list of urlpatterns.
-
- Each object in the returned list is a two-tuple: (view_func, regex)
- """
- views = []
- for p in urlpatterns:
- if hasattr(p, '_get_callback'):
- try:
- views.append((p._get_callback(), base + p.regex.pattern))
- except ViewDoesNotExist:
- continue
- elif hasattr(p, '_get_url_patterns'):
- try:
- patterns = p.url_patterns
- except ImportError:
- continue
- views.extend(extract_views_from_urlpatterns(patterns, base + p.regex.pattern))
- else:
- raise TypeError(_("%s does not appear to be a urlpattern object") % p)
- return views
-
-named_group_matcher = re.compile(r'\(\?P(<\w+>).+?\)')
-non_named_group_matcher = re.compile(r'\(.*?\)')
-
-def simplify_regex(pattern):
- """
- Clean up urlpattern regexes into something somewhat readable by Mere Humans:
- turns something like "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$"
- into "<sport_slug>/athletes/<athlete_slug>/"
- """
- # handle named groups first
- pattern = named_group_matcher.sub(lambda m: m.group(1), pattern)
-
- # handle non-named groups
- pattern = non_named_group_matcher.sub("<var>", pattern)
-
- # clean up any outstanding regex-y characters.
- pattern = pattern.replace('^', '').replace('$', '').replace('?', '').replace('//', '/').replace('\\', '')
- if not pattern.startswith('/'):
- pattern = '/' + pattern
- return pattern
diff --git a/parts/django/django/contrib/auth/__init__.py b/parts/django/django/contrib/auth/__init__.py
deleted file mode 100644
index 0eb197b..0000000
--- a/parts/django/django/contrib/auth/__init__.py
+++ /dev/null
@@ -1,105 +0,0 @@
-import datetime
-from warnings import warn
-from django.core.exceptions import ImproperlyConfigured
-from django.utils.importlib import import_module
-
-SESSION_KEY = '_auth_user_id'
-BACKEND_SESSION_KEY = '_auth_user_backend'
-REDIRECT_FIELD_NAME = 'next'
-
-def load_backend(path):
- i = path.rfind('.')
- module, attr = path[:i], path[i+1:]
- try:
- mod = import_module(module)
- except ImportError, e:
- raise ImproperlyConfigured('Error importing authentication backend %s: "%s"' % (module, e))
- except ValueError, e:
- raise ImproperlyConfigured('Error importing authentication backends. Is AUTHENTICATION_BACKENDS a correctly defined list or tuple?')
- try:
- cls = getattr(mod, attr)
- except AttributeError:
- raise ImproperlyConfigured('Module "%s" does not define a "%s" authentication backend' % (module, attr))
- try:
- getattr(cls, 'supports_object_permissions')
- except AttributeError:
- warn("Authentication backends without a `supports_object_permissions` attribute are deprecated. Please define it in %s." % cls,
- PendingDeprecationWarning)
- cls.supports_object_permissions = False
- try:
- getattr(cls, 'supports_anonymous_user')
- except AttributeError:
- warn("Authentication backends without a `supports_anonymous_user` attribute are deprecated. Please define it in %s." % cls,
- PendingDeprecationWarning)
- cls.supports_anonymous_user = False
- return cls()
-
-def get_backends():
- from django.conf import settings
- backends = []
- for backend_path in settings.AUTHENTICATION_BACKENDS:
- backends.append(load_backend(backend_path))
- if not backends:
- raise ImproperlyConfigured('No authentication backends have been defined. Does AUTHENTICATION_BACKENDS contain anything?')
- return backends
-
-def authenticate(**credentials):
- """
- If the given credentials are valid, return a User object.
- """
- for backend in get_backends():
- try:
- user = backend.authenticate(**credentials)
- except TypeError:
- # This backend doesn't accept these credentials as arguments. Try the next one.
- continue
- if user is None:
- continue
- # Annotate the user object with the path of the backend.
- user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
- return user
-
-def login(request, user):
- """
- Persist a user id and a backend in the request. This way a user doesn't
- have to reauthenticate on every request.
- """
- if user is None:
- user = request.user
- # TODO: It would be nice to support different login methods, like signed cookies.
- user.last_login = datetime.datetime.now()
- user.save()
-
- if SESSION_KEY in request.session:
- if request.session[SESSION_KEY] != user.id:
- # To avoid reusing another user's session, create a new, empty
- # session if the existing session corresponds to a different
- # authenticated user.
- request.session.flush()
- else:
- request.session.cycle_key()
- request.session[SESSION_KEY] = user.id
- request.session[BACKEND_SESSION_KEY] = user.backend
- if hasattr(request, 'user'):
- request.user = user
-
-def logout(request):
- """
- Removes the authenticated user's ID from the request and flushes their
- session data.
- """
- request.session.flush()
- if hasattr(request, 'user'):
- from django.contrib.auth.models import AnonymousUser
- request.user = AnonymousUser()
-
-def get_user(request):
- from django.contrib.auth.models import AnonymousUser
- try:
- user_id = request.session[SESSION_KEY]
- backend_path = request.session[BACKEND_SESSION_KEY]
- backend = load_backend(backend_path)
- user = backend.get_user(user_id) or AnonymousUser()
- except KeyError:
- user = AnonymousUser()
- return user
diff --git a/parts/django/django/contrib/auth/admin.py b/parts/django/django/contrib/auth/admin.py
deleted file mode 100644
index 497e9b9..0000000
--- a/parts/django/django/contrib/auth/admin.py
+++ /dev/null
@@ -1,153 +0,0 @@
-from django.db import transaction
-from django.conf import settings
-from django.contrib import admin
-from django.contrib.auth.forms import UserCreationForm, UserChangeForm, AdminPasswordChangeForm
-from django.contrib.auth.models import User, Group
-from django.contrib import messages
-from django.core.exceptions import PermissionDenied
-from django.http import HttpResponseRedirect, Http404
-from django.shortcuts import render_to_response, get_object_or_404
-from django.template import RequestContext
-from django.utils.html import escape
-from django.utils.decorators import method_decorator
-from django.utils.translation import ugettext, ugettext_lazy as _
-from django.views.decorators.csrf import csrf_protect
-
-csrf_protect_m = method_decorator(csrf_protect)
-
-class GroupAdmin(admin.ModelAdmin):
- search_fields = ('name',)
- ordering = ('name',)
- filter_horizontal = ('permissions',)
-
-class UserAdmin(admin.ModelAdmin):
- add_form_template = 'admin/auth/user/add_form.html'
- change_user_password_template = None
- fieldsets = (
- (None, {'fields': ('username', 'password')}),
- (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
- (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'user_permissions')}),
- (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
- (_('Groups'), {'fields': ('groups',)}),
- )
- add_fieldsets = (
- (None, {
- 'classes': ('wide',),
- 'fields': ('username', 'password1', 'password2')}
- ),
- )
- form = UserChangeForm
- add_form = UserCreationForm
- change_password_form = AdminPasswordChangeForm
- list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
- list_filter = ('is_staff', 'is_superuser', 'is_active')
- search_fields = ('username', 'first_name', 'last_name', 'email')
- ordering = ('username',)
- filter_horizontal = ('user_permissions',)
-
- def __call__(self, request, url):
- # this should not be here, but must be due to the way __call__ routes
- # in ModelAdmin.
- if url is None:
- return self.changelist_view(request)
- if url.endswith('password'):
- return self.user_change_password(request, url.split('/')[0])
- return super(UserAdmin, self).__call__(request, url)
-
- def get_fieldsets(self, request, obj=None):
- if not obj:
- return self.add_fieldsets
- return super(UserAdmin, self).get_fieldsets(request, obj)
-
- def get_form(self, request, obj=None, **kwargs):
- """
- Use special form during user creation
- """
- defaults = {}
- if obj is None:
- defaults.update({
- 'form': self.add_form,
- 'fields': admin.util.flatten_fieldsets(self.add_fieldsets),
- })
- defaults.update(kwargs)
- return super(UserAdmin, self).get_form(request, obj, **defaults)
-
- def get_urls(self):
- from django.conf.urls.defaults import patterns
- return patterns('',
- (r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password))
- ) + super(UserAdmin, self).get_urls()
-
- @csrf_protect_m
- @transaction.commit_on_success
- def add_view(self, request, form_url='', extra_context=None):
- # It's an error for a user to have add permission but NOT change
- # permission for users. If we allowed such users to add users, they
- # could create superusers, which would mean they would essentially have
- # the permission to change users. To avoid the problem entirely, we
- # disallow users from adding users if they don't have change
- # permission.
- if not self.has_change_permission(request):
- if self.has_add_permission(request) and settings.DEBUG:
- # Raise Http404 in debug mode so that the user gets a helpful
- # error message.
- raise Http404('Your user does not have the "Change user" permission. In order to add users, Django requires that your user account have both the "Add user" and "Change user" permissions set.')
- raise PermissionDenied
- if extra_context is None:
- extra_context = {}
- defaults = {
- 'auto_populated_fields': (),
- 'username_help_text': self.model._meta.get_field('username').help_text,
- }
- extra_context.update(defaults)
- return super(UserAdmin, self).add_view(request, form_url, extra_context)
-
- def user_change_password(self, request, id):
- if not self.has_change_permission(request):
- raise PermissionDenied
- user = get_object_or_404(self.model, pk=id)
- if request.method == 'POST':
- form = self.change_password_form(user, request.POST)
- if form.is_valid():
- new_user = form.save()
- msg = ugettext('Password changed successfully.')
- messages.success(request, msg)
- return HttpResponseRedirect('..')
- else:
- form = self.change_password_form(user)
-
- fieldsets = [(None, {'fields': form.base_fields.keys()})]
- adminForm = admin.helpers.AdminForm(form, fieldsets, {})
-
- return render_to_response(self.change_user_password_template or 'admin/auth/user/change_password.html', {
- 'title': _('Change password: %s') % escape(user.username),
- 'adminForm': adminForm,
- 'form': form,
- 'is_popup': '_popup' in request.REQUEST,
- 'add': True,
- 'change': False,
- 'has_delete_permission': False,
- 'has_change_permission': True,
- 'has_absolute_url': False,
- 'opts': self.model._meta,
- 'original': user,
- 'save_as': False,
- 'show_save': True,
- 'root_path': self.admin_site.root_path,
- }, context_instance=RequestContext(request))
-
- def response_add(self, request, obj, post_url_continue='../%s/'):
- """
- Determines the HttpResponse for the add_view stage. It mostly defers to
- its superclass implementation but is customized because the User model
- has a slightly different workflow.
- """
- if '_addanother' not in request.POST:
- # The 'Save' button should act like the 'Save and continue
- # editing' button
- request.POST['_continue'] = 1
- return super(UserAdmin, self).response_add(request, obj, post_url_continue)
-
-admin.site.register(Group, GroupAdmin)
-admin.site.register(User, UserAdmin)
-
diff --git a/parts/django/django/contrib/auth/backends.py b/parts/django/django/contrib/auth/backends.py
deleted file mode 100644
index 2f60804..0000000
--- a/parts/django/django/contrib/auth/backends.py
+++ /dev/null
@@ -1,121 +0,0 @@
-from django.db import connection
-from django.contrib.auth.models import User, Permission
-
-
-class ModelBackend(object):
- """
- Authenticates against django.contrib.auth.models.User.
- """
- supports_object_permissions = False
- supports_anonymous_user = True
-
- # TODO: Model, login attribute name and password attribute name should be
- # configurable.
- def authenticate(self, username=None, password=None):
- try:
- user = User.objects.get(username=username)
- if user.check_password(password):
- return user
- except User.DoesNotExist:
- return None
-
- def get_group_permissions(self, user_obj):
- """
- Returns a set of permission strings that this user has through his/her
- groups.
- """
- if not hasattr(user_obj, '_group_perm_cache'):
- if user_obj.is_superuser:
- perms = Permission.objects.all()
- else:
- perms = Permission.objects.filter(group__user=user_obj)
- perms = perms.values_list('content_type__app_label', 'codename').order_by()
- user_obj._group_perm_cache = set(["%s.%s" % (ct, name) for ct, name in perms])
- return user_obj._group_perm_cache
-
- def get_all_permissions(self, user_obj):
- if user_obj.is_anonymous():
- return set()
- if not hasattr(user_obj, '_perm_cache'):
- user_obj._perm_cache = set([u"%s.%s" % (p.content_type.app_label, p.codename) for p in user_obj.user_permissions.select_related()])
- user_obj._perm_cache.update(self.get_group_permissions(user_obj))
- return user_obj._perm_cache
-
- def has_perm(self, user_obj, perm):
- return perm in self.get_all_permissions(user_obj)
-
- def has_module_perms(self, user_obj, app_label):
- """
- Returns True if user_obj has any permissions in the given app_label.
- """
- for perm in self.get_all_permissions(user_obj):
- if perm[:perm.index('.')] == app_label:
- return True
- return False
-
- def get_user(self, user_id):
- try:
- return User.objects.get(pk=user_id)
- except User.DoesNotExist:
- return None
-
-
-class RemoteUserBackend(ModelBackend):
- """
- This backend is to be used in conjunction with the ``RemoteUserMiddleware``
- found in the middleware module of this package, and is used when the server
- is handling authentication outside of Django.
-
- By default, the ``authenticate`` method creates ``User`` objects for
- usernames that don't already exist in the database. Subclasses can disable
- this behavior by setting the ``create_unknown_user`` attribute to
- ``False``.
- """
-
- # Create a User object if not already in the database?
- create_unknown_user = True
-
- def authenticate(self, remote_user):
- """
- The username passed as ``remote_user`` is considered trusted. This
- method simply returns the ``User`` object with the given username,
- creating a new ``User`` object if ``create_unknown_user`` is ``True``.
-
- Returns None if ``create_unknown_user`` is ``False`` and a ``User``
- object with the given username is not found in the database.
- """
- if not remote_user:
- return
- user = None
- username = self.clean_username(remote_user)
-
- # Note that this could be accomplished in one try-except clause, but
- # instead we use get_or_create when creating unknown users since it has
- # built-in safeguards for multiple threads.
- if self.create_unknown_user:
- user, created = User.objects.get_or_create(username=username)
- if created:
- user = self.configure_user(user)
- else:
- try:
- user = User.objects.get(username=username)
- except User.DoesNotExist:
- pass
- return user
-
- def clean_username(self, username):
- """
- Performs any cleaning on the "username" prior to using it to get or
- create the user object. Returns the cleaned username.
-
- By default, returns the username unchanged.
- """
- return username
-
- def configure_user(self, user):
- """
- Configures a user after creation and returns the updated user.
-
- By default, returns the user unmodified.
- """
- return user
diff --git a/parts/django/django/contrib/auth/context_processors.py b/parts/django/django/contrib/auth/context_processors.py
deleted file mode 100644
index 87d8331..0000000
--- a/parts/django/django/contrib/auth/context_processors.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from django.core.context_processors import PermWrapper
-from django.utils.functional import lazy, memoize, SimpleLazyObject
-from django.contrib import messages
-
-def auth(request):
- """
- Returns context variables required by apps that use Django's authentication
- system.
-
- If there is no 'user' attribute in the request, uses AnonymousUser (from
- django.contrib.auth).
- """
- # If we access request.user, request.session is accessed, which results in
- # 'Vary: Cookie' being sent in every request that uses this context
- # processor, which can easily be every request on a site if
- # TEMPLATE_CONTEXT_PROCESSORS has this context processor added. This kills
- # the ability to cache. So, we carefully ensure these attributes are lazy.
- # We don't use django.utils.functional.lazy() for User, because that
- # requires knowing the class of the object we want to proxy, which could
- # break with custom auth backends. LazyObject is a less complete but more
- # flexible solution that is a good enough wrapper for 'User'.
- def get_user():
- if hasattr(request, 'user'):
- return request.user
- else:
- from django.contrib.auth.models import AnonymousUser
- return AnonymousUser()
-
- return {
- 'user': SimpleLazyObject(get_user),
- 'messages': messages.get_messages(request),
- 'perms': lazy(lambda: PermWrapper(get_user()), PermWrapper)(),
- }
diff --git a/parts/django/django/contrib/auth/create_superuser.py b/parts/django/django/contrib/auth/create_superuser.py
deleted file mode 100644
index 7b58678..0000000
--- a/parts/django/django/contrib/auth/create_superuser.py
+++ /dev/null
@@ -1,8 +0,0 @@
-"""
-Create a superuser from the command line. Deprecated; use manage.py
-createsuperuser instead.
-"""
-
-if __name__ == "__main__":
- from django.core.management import call_command
- call_command("createsuperuser")
diff --git a/parts/django/django/contrib/auth/decorators.py b/parts/django/django/contrib/auth/decorators.py
deleted file mode 100644
index 09dcf42..0000000
--- a/parts/django/django/contrib/auth/decorators.py
+++ /dev/null
@@ -1,52 +0,0 @@
-try:
- from functools import update_wrapper, wraps
-except ImportError:
- from django.utils.functional import update_wrapper, wraps # Python 2.4 fallback.
-
-from django.contrib.auth import REDIRECT_FIELD_NAME
-from django.http import HttpResponseRedirect
-from django.utils.decorators import available_attrs
-from django.utils.http import urlquote
-
-
-def user_passes_test(test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
- """
- Decorator for views that checks that the user passes the given test,
- redirecting to the log-in page if necessary. The test should be a callable
- that takes the user object and returns True if the user passes.
- """
- if not login_url:
- from django.conf import settings
- login_url = settings.LOGIN_URL
-
- def decorator(view_func):
- def _wrapped_view(request, *args, **kwargs):
- if test_func(request.user):
- return view_func(request, *args, **kwargs)
- path = urlquote(request.get_full_path())
- tup = login_url, redirect_field_name, path
- return HttpResponseRedirect('%s?%s=%s' % tup)
- return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view)
- return decorator
-
-
-def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME):
- """
- Decorator for views that checks that the user is logged in, redirecting
- to the log-in page if necessary.
- """
- actual_decorator = user_passes_test(
- lambda u: u.is_authenticated(),
- redirect_field_name=redirect_field_name
- )
- if function:
- return actual_decorator(function)
- return actual_decorator
-
-
-def permission_required(perm, login_url=None):
- """
- Decorator for views that checks whether a user has a particular permission
- enabled, redirecting to the log-in page if necessary.
- """
- return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url)
diff --git a/parts/django/django/contrib/auth/fixtures/authtestdata.json b/parts/django/django/contrib/auth/fixtures/authtestdata.json
deleted file mode 100644
index e0bdc24..0000000
--- a/parts/django/django/contrib/auth/fixtures/authtestdata.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "2",
- "model": "auth.user",
- "fields": {
- "username": "inactive",
- "first_name": "Inactive",
- "last_name": "User",
- "is_active": false,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "3",
- "model": "auth.user",
- "fields": {
- "username": "staff",
- "first_name": "Staff",
- "last_name": "Member",
- "is_active": true,
- "is_superuser": false,
- "is_staff": true,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "staffmember@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- }
-]
diff --git a/parts/django/django/contrib/auth/forms.py b/parts/django/django/contrib/auth/forms.py
deleted file mode 100644
index 7670c85..0000000
--- a/parts/django/django/contrib/auth/forms.py
+++ /dev/null
@@ -1,214 +0,0 @@
-from django.contrib.auth.models import User
-from django.contrib.auth import authenticate
-from django.contrib.auth.tokens import default_token_generator
-from django.contrib.sites.models import get_current_site
-from django.template import Context, loader
-from django import forms
-from django.utils.translation import ugettext_lazy as _
-from django.utils.http import int_to_base36
-
-class UserCreationForm(forms.ModelForm):
- """
- A form that creates a user, with no privileges, from the given username and password.
- """
- username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
- help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
- error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
- password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
- password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput,
- help_text = _("Enter the same password as above, for verification."))
-
- class Meta:
- model = User
- fields = ("username",)
-
- def clean_username(self):
- username = self.cleaned_data["username"]
- try:
- User.objects.get(username=username)
- except User.DoesNotExist:
- return username
- raise forms.ValidationError(_("A user with that username already exists."))
-
- def clean_password2(self):
- password1 = self.cleaned_data.get("password1", "")
- password2 = self.cleaned_data["password2"]
- if password1 != password2:
- raise forms.ValidationError(_("The two password fields didn't match."))
- return password2
-
- def save(self, commit=True):
- user = super(UserCreationForm, self).save(commit=False)
- user.set_password(self.cleaned_data["password1"])
- if commit:
- user.save()
- return user
-
-class UserChangeForm(forms.ModelForm):
- username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
- help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
- error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
-
- class Meta:
- model = User
-
- def __init__(self, *args, **kwargs):
- super(UserChangeForm, self).__init__(*args, **kwargs)
- f = self.fields.get('user_permissions', None)
- if f is not None:
- f.queryset = f.queryset.select_related('content_type')
-
-class AuthenticationForm(forms.Form):
- """
- Base class for authenticating users. Extend this to get a form that accepts
- username/password logins.
- """
- username = forms.CharField(label=_("Username"), max_length=30)
- password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
-
- def __init__(self, request=None, *args, **kwargs):
- """
- If request is passed in, the form will validate that cookies are
- enabled. Note that the request (a HttpRequest object) must have set a
- cookie with the key TEST_COOKIE_NAME and value TEST_COOKIE_VALUE before
- running this validation.
- """
- self.request = request
- self.user_cache = None
- super(AuthenticationForm, self).__init__(*args, **kwargs)
-
- def clean(self):
- username = self.cleaned_data.get('username')
- password = self.cleaned_data.get('password')
-
- if username and password:
- self.user_cache = authenticate(username=username, password=password)
- if self.user_cache is None:
- raise forms.ValidationError(_("Please enter a correct username and password. Note that both fields are case-sensitive."))
- elif not self.user_cache.is_active:
- raise forms.ValidationError(_("This account is inactive."))
-
- # TODO: determine whether this should move to its own method.
- if self.request:
- if not self.request.session.test_cookie_worked():
- raise forms.ValidationError(_("Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."))
-
- return self.cleaned_data
-
- def get_user_id(self):
- if self.user_cache:
- return self.user_cache.id
- return None
-
- def get_user(self):
- return self.user_cache
-
-class PasswordResetForm(forms.Form):
- email = forms.EmailField(label=_("E-mail"), max_length=75)
-
- def clean_email(self):
- """
- Validates that a user exists with the given e-mail address.
- """
- email = self.cleaned_data["email"]
- self.users_cache = User.objects.filter(email__iexact=email)
- if len(self.users_cache) == 0:
- raise forms.ValidationError(_("That e-mail address doesn't have an associated user account. Are you sure you've registered?"))
- return email
-
- def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
- use_https=False, token_generator=default_token_generator, request=None):
- """
- Generates a one-use only link for resetting password and sends to the user
- """
- from django.core.mail import send_mail
- for user in self.users_cache:
- if not domain_override:
- current_site = get_current_site(request)
- site_name = current_site.name
- domain = current_site.domain
- else:
- site_name = domain = domain_override
- t = loader.get_template(email_template_name)
- c = {
- 'email': user.email,
- 'domain': domain,
- 'site_name': site_name,
- 'uid': int_to_base36(user.id),
- 'user': user,
- 'token': token_generator.make_token(user),
- 'protocol': use_https and 'https' or 'http',
- }
- send_mail(_("Password reset on %s") % site_name,
- t.render(Context(c)), None, [user.email])
-
-class SetPasswordForm(forms.Form):
- """
- A form that lets a user change set his/her password without
- entering the old password
- """
- new_password1 = forms.CharField(label=_("New password"), widget=forms.PasswordInput)
- new_password2 = forms.CharField(label=_("New password confirmation"), widget=forms.PasswordInput)
-
- def __init__(self, user, *args, **kwargs):
- self.user = user
- super(SetPasswordForm, self).__init__(*args, **kwargs)
-
- def clean_new_password2(self):
- password1 = self.cleaned_data.get('new_password1')
- password2 = self.cleaned_data.get('new_password2')
- if password1 and password2:
- if password1 != password2:
- raise forms.ValidationError(_("The two password fields didn't match."))
- return password2
-
- def save(self, commit=True):
- self.user.set_password(self.cleaned_data['new_password1'])
- if commit:
- self.user.save()
- return self.user
-
-class PasswordChangeForm(SetPasswordForm):
- """
- A form that lets a user change his/her password by entering
- their old password.
- """
- old_password = forms.CharField(label=_("Old password"), widget=forms.PasswordInput)
-
- def clean_old_password(self):
- """
- Validates that the old_password field is correct.
- """
- old_password = self.cleaned_data["old_password"]
- if not self.user.check_password(old_password):
- raise forms.ValidationError(_("Your old password was entered incorrectly. Please enter it again."))
- return old_password
-PasswordChangeForm.base_fields.keyOrder = ['old_password', 'new_password1', 'new_password2']
-
-class AdminPasswordChangeForm(forms.Form):
- """
- A form used to change the password of a user in the admin interface.
- """
- password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
- password2 = forms.CharField(label=_("Password (again)"), widget=forms.PasswordInput)
-
- def __init__(self, user, *args, **kwargs):
- self.user = user
- super(AdminPasswordChangeForm, self).__init__(*args, **kwargs)
-
- def clean_password2(self):
- password1 = self.cleaned_data.get('password1')
- password2 = self.cleaned_data.get('password2')
- if password1 and password2:
- if password1 != password2:
- raise forms.ValidationError(_("The two password fields didn't match."))
- return password2
-
- def save(self, commit=True):
- """
- Saves the new password.
- """
- self.user.set_password(self.cleaned_data["password1"])
- if commit:
- self.user.save()
- return self.user
diff --git a/parts/django/django/contrib/auth/handlers/__init__.py b/parts/django/django/contrib/auth/handlers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/auth/handlers/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/auth/handlers/modpython.py b/parts/django/django/contrib/auth/handlers/modpython.py
deleted file mode 100644
index de961fa..0000000
--- a/parts/django/django/contrib/auth/handlers/modpython.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from mod_python import apache
-import os
-
-def authenhandler(req, **kwargs):
- """
- Authentication handler that checks against Django's auth database.
- """
-
- # mod_python fakes the environ, and thus doesn't process SetEnv. This fixes
- # that so that the following import works
- os.environ.update(req.subprocess_env)
-
- # apache 2.2 requires a call to req.get_basic_auth_pw() before
- # req.user and friends are available.
- req.get_basic_auth_pw()
-
- # check for PythonOptions
- _str_to_bool = lambda s: s.lower() in ('1', 'true', 'on', 'yes')
-
- options = req.get_options()
- permission_name = options.get('DjangoPermissionName', None)
- staff_only = _str_to_bool(options.get('DjangoRequireStaffStatus', "on"))
- superuser_only = _str_to_bool(options.get('DjangoRequireSuperuserStatus', "off"))
- settings_module = options.get('DJANGO_SETTINGS_MODULE', None)
- if settings_module:
- os.environ['DJANGO_SETTINGS_MODULE'] = settings_module
-
- from django.contrib.auth.models import User
- from django import db
- db.reset_queries()
-
- # check that the username is valid
- kwargs = {'username': req.user, 'is_active': True}
- if staff_only:
- kwargs['is_staff'] = True
- if superuser_only:
- kwargs['is_superuser'] = True
- try:
- try:
- user = User.objects.get(**kwargs)
- except User.DoesNotExist:
- return apache.HTTP_UNAUTHORIZED
-
- # check the password and any permission given
- if user.check_password(req.get_basic_auth_pw()):
- if permission_name:
- if user.has_perm(permission_name):
- return apache.OK
- else:
- return apache.HTTP_UNAUTHORIZED
- else:
- return apache.OK
- else:
- return apache.HTTP_UNAUTHORIZED
- finally:
- db.connection.close()
diff --git a/parts/django/django/contrib/auth/management/__init__.py b/parts/django/django/contrib/auth/management/__init__.py
deleted file mode 100644
index 01fa524..0000000
--- a/parts/django/django/contrib/auth/management/__init__.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""
-Creates permissions for all installed apps that need permissions.
-"""
-
-from django.db.models import get_models, signals
-from django.contrib.auth import models as auth_app
-
-def _get_permission_codename(action, opts):
- return u'%s_%s' % (action, opts.object_name.lower())
-
-def _get_all_permissions(opts):
- "Returns (codename, name) for all permissions in the given opts."
- perms = []
- for action in ('add', 'change', 'delete'):
- perms.append((_get_permission_codename(action, opts), u'Can %s %s' % (action, opts.verbose_name_raw)))
- return perms + list(opts.permissions)
-
-def create_permissions(app, created_models, verbosity, **kwargs):
- from django.contrib.contenttypes.models import ContentType
- from django.contrib.auth.models import Permission
- app_models = get_models(app)
- if not app_models:
- return
- for klass in app_models:
- ctype = ContentType.objects.get_for_model(klass)
- for codename, name in _get_all_permissions(klass._meta):
- p, created = Permission.objects.get_or_create(codename=codename, content_type__pk=ctype.id,
- defaults={'name': name, 'content_type': ctype})
- if created and verbosity >= 2:
- print "Adding permission '%s'" % p
-
-def create_superuser(app, created_models, verbosity, **kwargs):
- from django.contrib.auth.models import User
- from django.core.management import call_command
- if User in created_models and kwargs.get('interactive', True):
- msg = "\nYou just installed Django's auth system, which means you don't have " \
- "any superusers defined.\nWould you like to create one now? (yes/no): "
- confirm = raw_input(msg)
- while 1:
- if confirm not in ('yes', 'no'):
- confirm = raw_input('Please enter either "yes" or "no": ')
- continue
- if confirm == 'yes':
- call_command("createsuperuser", interactive=True)
- break
-
-signals.post_syncdb.connect(create_permissions,
- dispatch_uid = "django.contrib.auth.management.create_permissions")
-signals.post_syncdb.connect(create_superuser,
- sender=auth_app, dispatch_uid = "django.contrib.auth.management.create_superuser")
diff --git a/parts/django/django/contrib/auth/management/commands/__init__.py b/parts/django/django/contrib/auth/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/auth/management/commands/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/auth/management/commands/changepassword.py b/parts/django/django/contrib/auth/management/commands/changepassword.py
deleted file mode 100644
index 56448f1..0000000
--- a/parts/django/django/contrib/auth/management/commands/changepassword.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from django.core.management.base import BaseCommand, CommandError
-from django.contrib.auth.models import User
-import getpass
-
-class Command(BaseCommand):
- help = "Change a user's password for django.contrib.auth."
-
- requires_model_validation = False
-
- def _get_pass(self, prompt="Password: "):
- p = getpass.getpass(prompt=prompt)
- if not p:
- raise CommandError("aborted")
- return p
-
- def handle(self, *args, **options):
- if len(args) > 1:
- raise CommandError("need exactly one or zero arguments for username")
-
- if args:
- username, = args
- else:
- username = getpass.getuser()
-
- try:
- u = User.objects.get(username=username)
- except User.DoesNotExist:
- raise CommandError("user '%s' does not exist" % username)
-
- print "Changing password for user '%s'" % u.username
-
- MAX_TRIES = 3
- count = 0
- p1, p2 = 1, 2 # To make them initially mismatch.
- while p1 != p2 and count < MAX_TRIES:
- p1 = self._get_pass()
- p2 = self._get_pass("Password (again): ")
- if p1 != p2:
- print "Passwords do not match. Please try again."
- count = count + 1
-
- if count == MAX_TRIES:
- raise CommandError("Aborting password change for user '%s' after %s attempts" % (username, count))
-
- u.set_password(p1)
- u.save()
-
- return "Password changed successfully for user '%s'" % u.username
diff --git a/parts/django/django/contrib/auth/management/commands/createsuperuser.py b/parts/django/django/contrib/auth/management/commands/createsuperuser.py
deleted file mode 100644
index 9939e3d..0000000
--- a/parts/django/django/contrib/auth/management/commands/createsuperuser.py
+++ /dev/null
@@ -1,136 +0,0 @@
-"""
-Management utility to create superusers.
-"""
-
-import getpass
-import re
-import sys
-from optparse import make_option
-from django.contrib.auth.models import User
-from django.core import exceptions
-from django.core.management.base import BaseCommand, CommandError
-from django.utils.translation import ugettext as _
-
-RE_VALID_USERNAME = re.compile('[\w.@+-]+$')
-
-EMAIL_RE = re.compile(
- r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
- r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"' # quoted-string
- r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$', re.IGNORECASE) # domain
-
-def is_valid_email(value):
- if not EMAIL_RE.search(value):
- raise exceptions.ValidationError(_('Enter a valid e-mail address.'))
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--username', dest='username', default=None,
- help='Specifies the username for the superuser.'),
- make_option('--email', dest='email', default=None,
- help='Specifies the email address for the superuser.'),
- make_option('--noinput', action='store_false', dest='interactive', default=True,
- help=('Tells Django to NOT prompt the user for input of any kind. '
- 'You must use --username and --email with --noinput, and '
- 'superusers created with --noinput will not be able to log '
- 'in until they\'re given a valid password.')),
- )
- help = 'Used to create a superuser.'
-
- def handle(self, *args, **options):
- username = options.get('username', None)
- email = options.get('email', None)
- interactive = options.get('interactive')
- verbosity = int(options.get('verbosity', 1))
-
- # Do quick and dirty validation if --noinput
- if not interactive:
- if not username or not email:
- raise CommandError("You must use --username and --email with --noinput.")
- if not RE_VALID_USERNAME.match(username):
- raise CommandError("Invalid username. Use only letters, digits, and underscores")
- try:
- is_valid_email(email)
- except exceptions.ValidationError:
- raise CommandError("Invalid email address.")
-
- password = ''
-
- # Try to determine the current system user's username to use as a default.
- try:
- default_username = getpass.getuser().replace(' ', '').lower()
- except (ImportError, KeyError):
- # KeyError will be raised by os.getpwuid() (called by getuser())
- # if there is no corresponding entry in the /etc/passwd file
- # (a very restricted chroot environment, for example).
- default_username = ''
-
- # Determine whether the default username is taken, so we don't display
- # it as an option.
- if default_username:
- try:
- User.objects.get(username=default_username)
- except User.DoesNotExist:
- pass
- else:
- default_username = ''
-
- # Prompt for username/email/password. Enclose this whole thing in a
- # try/except to trap for a keyboard interrupt and exit gracefully.
- if interactive:
- try:
-
- # Get a username
- while 1:
- if not username:
- input_msg = 'Username'
- if default_username:
- input_msg += ' (Leave blank to use %r)' % default_username
- username = raw_input(input_msg + ': ')
- if default_username and username == '':
- username = default_username
- if not RE_VALID_USERNAME.match(username):
- sys.stderr.write("Error: That username is invalid. Use only letters, digits and underscores.\n")
- username = None
- continue
- try:
- User.objects.get(username=username)
- except User.DoesNotExist:
- break
- else:
- sys.stderr.write("Error: That username is already taken.\n")
- username = None
-
- # Get an email
- while 1:
- if not email:
- email = raw_input('E-mail address: ')
- try:
- is_valid_email(email)
- except exceptions.ValidationError:
- sys.stderr.write("Error: That e-mail address is invalid.\n")
- email = None
- else:
- break
-
- # Get a password
- while 1:
- if not password:
- password = getpass.getpass()
- password2 = getpass.getpass('Password (again): ')
- if password != password2:
- sys.stderr.write("Error: Your passwords didn't match.\n")
- password = None
- continue
- if password.strip() == '':
- sys.stderr.write("Error: Blank passwords aren't allowed.\n")
- password = None
- continue
- break
- except KeyboardInterrupt:
- sys.stderr.write("\nOperation cancelled.\n")
- sys.exit(1)
-
- User.objects.create_superuser(username, email, password)
- if verbosity >= 1:
- self.stdout.write("Superuser created successfully.\n")
-
diff --git a/parts/django/django/contrib/auth/middleware.py b/parts/django/django/contrib/auth/middleware.py
deleted file mode 100644
index c1211c9..0000000
--- a/parts/django/django/contrib/auth/middleware.py
+++ /dev/null
@@ -1,81 +0,0 @@
-from django.contrib import auth
-from django.core.exceptions import ImproperlyConfigured
-
-
-class LazyUser(object):
- def __get__(self, request, obj_type=None):
- if not hasattr(request, '_cached_user'):
- from django.contrib.auth import get_user
- request._cached_user = get_user(request)
- return request._cached_user
-
-
-class AuthenticationMiddleware(object):
- def process_request(self, request):
- assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
- request.__class__.user = LazyUser()
- return None
-
-
-class RemoteUserMiddleware(object):
- """
- Middleware for utilizing Web-server-provided authentication.
-
- If request.user is not authenticated, then this middleware attempts to
- authenticate the username passed in the ``REMOTE_USER`` request header.
- If authentication is successful, the user is automatically logged in to
- persist the user in the session.
-
- The header used is configurable and defaults to ``REMOTE_USER``. Subclass
- this class and change the ``header`` attribute if you need to use a
- different header.
- """
-
- # Name of request header to grab username from. This will be the key as
- # used in the request.META dictionary, i.e. the normalization of headers to
- # all uppercase and the addition of "HTTP_" prefix apply.
- header = "REMOTE_USER"
-
- def process_request(self, request):
- # AuthenticationMiddleware is required so that request.user exists.
- if not hasattr(request, 'user'):
- raise ImproperlyConfigured(
- "The Django remote user auth middleware requires the"
- " authentication middleware to be installed. Edit your"
- " MIDDLEWARE_CLASSES setting to insert"
- " 'django.contrib.auth.middleware.AuthenticationMiddleware'"
- " before the RemoteUserMiddleware class.")
- try:
- username = request.META[self.header]
- except KeyError:
- # If specified header doesn't exist then return (leaving
- # request.user set to AnonymousUser by the
- # AuthenticationMiddleware).
- return
- # If the user is already authenticated and that user is the user we are
- # getting passed in the headers, then the correct user is already
- # persisted in the session and we don't need to continue.
- if request.user.is_authenticated():
- if request.user.username == self.clean_username(username, request):
- return
- # We are seeing this user for the first time in this session, attempt
- # to authenticate the user.
- user = auth.authenticate(remote_user=username)
- if user:
- # User is valid. Set request.user and persist user in the session
- # by logging the user in.
- request.user = user
- auth.login(request, user)
-
- def clean_username(self, username, request):
- """
- Allows the backend to clean the username, if the backend defines a
- clean_username method.
- """
- backend_str = request.session[auth.BACKEND_SESSION_KEY]
- backend = auth.load_backend(backend_str)
- try:
- username = backend.clean_username(username)
- except AttributeError: # Backend has no clean_username method.
- pass
- return username
diff --git a/parts/django/django/contrib/auth/models.py b/parts/django/django/contrib/auth/models.py
deleted file mode 100644
index 3d927d8..0000000
--- a/parts/django/django/contrib/auth/models.py
+++ /dev/null
@@ -1,474 +0,0 @@
-import datetime
-import urllib
-
-from django.contrib import auth
-from django.core.exceptions import ImproperlyConfigured
-from django.db import models
-from django.db.models.manager import EmptyManager
-from django.contrib.contenttypes.models import ContentType
-from django.utils.encoding import smart_str
-from django.utils.hashcompat import md5_constructor, sha_constructor
-from django.utils.translation import ugettext_lazy as _
-
-
-UNUSABLE_PASSWORD = '!' # This will never be a valid hash
-
-def get_hexdigest(algorithm, salt, raw_password):
- """
- Returns a string of the hexdigest of the given plaintext password and salt
- using the given algorithm ('md5', 'sha1' or 'crypt').
- """
- raw_password, salt = smart_str(raw_password), smart_str(salt)
- if algorithm == 'crypt':
- try:
- import crypt
- except ImportError:
- raise ValueError('"crypt" password algorithm not supported in this environment')
- return crypt.crypt(raw_password, salt)
-
- if algorithm == 'md5':
- return md5_constructor(salt + raw_password).hexdigest()
- elif algorithm == 'sha1':
- return sha_constructor(salt + raw_password).hexdigest()
- raise ValueError("Got unknown password algorithm type in password.")
-
-def check_password(raw_password, enc_password):
- """
- Returns a boolean of whether the raw_password was correct. Handles
- encryption formats behind the scenes.
- """
- algo, salt, hsh = enc_password.split('$')
- return hsh == get_hexdigest(algo, salt, raw_password)
-
-class SiteProfileNotAvailable(Exception):
- pass
-
-class PermissionManager(models.Manager):
- def get_by_natural_key(self, codename, app_label, model):
- return self.get(
- codename=codename,
- content_type=ContentType.objects.get_by_natural_key(app_label, model)
- )
-
-class Permission(models.Model):
- """The permissions system provides a way to assign permissions to specific users and groups of users.
-
- The permission system is used by the Django admin site, but may also be useful in your own code. The Django admin site uses permissions as follows:
-
- - The "add" permission limits the user's ability to view the "add" form and add an object.
- - The "change" permission limits a user's ability to view the change list, view the "change" form and change an object.
- - The "delete" permission limits the ability to delete an object.
-
- Permissions are set globally per type of object, not per specific object instance. It is possible to say "Mary may change news stories," but it's not currently possible to say "Mary may change news stories, but only the ones she created herself" or "Mary may only change news stories that have a certain status or publication date."
-
- Three basic permissions -- add, change and delete -- are automatically created for each Django model.
- """
- name = models.CharField(_('name'), max_length=50)
- content_type = models.ForeignKey(ContentType)
- codename = models.CharField(_('codename'), max_length=100)
- objects = PermissionManager()
-
- class Meta:
- verbose_name = _('permission')
- verbose_name_plural = _('permissions')
- unique_together = (('content_type', 'codename'),)
- ordering = ('content_type__app_label', 'content_type__model', 'codename')
-
- def __unicode__(self):
- return u"%s | %s | %s" % (
- unicode(self.content_type.app_label),
- unicode(self.content_type),
- unicode(self.name))
-
- def natural_key(self):
- return (self.codename,) + self.content_type.natural_key()
- natural_key.dependencies = ['contenttypes.contenttype']
-
-class Group(models.Model):
- """Groups are a generic way of categorizing users to apply permissions, or some other label, to those users. A user can belong to any number of groups.
-
- A user in a group automatically has all the permissions granted to that group. For example, if the group Site editors has the permission can_edit_home_page, any user in that group will have that permission.
-
- Beyond permissions, groups are a convenient way to categorize users to apply some label, or extended functionality, to them. For example, you could create a group 'Special users', and you could write code that would do special things to those users -- such as giving them access to a members-only portion of your site, or sending them members-only e-mail messages.
- """
- name = models.CharField(_('name'), max_length=80, unique=True)
- permissions = models.ManyToManyField(Permission, verbose_name=_('permissions'), blank=True)
-
- class Meta:
- verbose_name = _('group')
- verbose_name_plural = _('groups')
-
- def __unicode__(self):
- return self.name
-
-class UserManager(models.Manager):
- def create_user(self, username, email, password=None):
- """
- Creates and saves a User with the given username, e-mail and password.
- """
- now = datetime.datetime.now()
-
- # Normalize the address by lowercasing the domain part of the email
- # address.
- try:
- email_name, domain_part = email.strip().split('@', 1)
- except ValueError:
- pass
- else:
- email = '@'.join([email_name, domain_part.lower()])
-
- user = self.model(username=username, email=email, is_staff=False,
- is_active=True, is_superuser=False, last_login=now,
- date_joined=now)
-
- user.set_password(password)
- user.save(using=self._db)
- return user
-
- def create_superuser(self, username, email, password):
- u = self.create_user(username, email, password)
- u.is_staff = True
- u.is_active = True
- u.is_superuser = True
- u.save(using=self._db)
- return u
-
- def make_random_password(self, length=10, allowed_chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'):
- "Generates a random password with the given length and given allowed_chars"
- # Note that default value of allowed_chars does not have "I" or letters
- # that look like it -- just to avoid confusion.
- from random import choice
- return ''.join([choice(allowed_chars) for i in range(length)])
-
-
-# A few helper functions for common logic between User and AnonymousUser.
-def _user_get_all_permissions(user, obj):
- permissions = set()
- anon = user.is_anonymous()
- for backend in auth.get_backends():
- if not anon or backend.supports_anonymous_user:
- if hasattr(backend, "get_all_permissions"):
- if obj is not None:
- if backend.supports_object_permissions:
- permissions.update(
- backend.get_all_permissions(user, obj)
- )
- else:
- permissions.update(backend.get_all_permissions(user))
- return permissions
-
-
-def _user_has_perm(user, perm, obj):
- anon = user.is_anonymous()
- for backend in auth.get_backends():
- if not anon or backend.supports_anonymous_user:
- if hasattr(backend, "has_perm"):
- if obj is not None:
- if (backend.supports_object_permissions and
- backend.has_perm(user, perm, obj)):
- return True
- else:
- if backend.has_perm(user, perm):
- return True
- return False
-
-
-def _user_has_module_perms(user, app_label):
- anon = user.is_anonymous()
- for backend in auth.get_backends():
- if not anon or backend.supports_anonymous_user:
- if hasattr(backend, "has_module_perms"):
- if backend.has_module_perms(user, app_label):
- return True
- return False
-
-
-class User(models.Model):
- """
- Users within the Django authentication system are represented by this model.
-
- Username and password are required. Other fields are optional.
- """
- username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
- first_name = models.CharField(_('first name'), max_length=30, blank=True)
- last_name = models.CharField(_('last name'), max_length=30, blank=True)
- email = models.EmailField(_('e-mail address'), blank=True)
- password = models.CharField(_('password'), max_length=128, help_text=_("Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."))
- is_staff = models.BooleanField(_('staff status'), default=False, help_text=_("Designates whether the user can log into this admin site."))
- is_active = models.BooleanField(_('active'), default=True, help_text=_("Designates whether this user should be treated as active. Unselect this instead of deleting accounts."))
- is_superuser = models.BooleanField(_('superuser status'), default=False, help_text=_("Designates that this user has all permissions without explicitly assigning them."))
- last_login = models.DateTimeField(_('last login'), default=datetime.datetime.now)
- date_joined = models.DateTimeField(_('date joined'), default=datetime.datetime.now)
- groups = models.ManyToManyField(Group, verbose_name=_('groups'), blank=True,
- help_text=_("In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."))
- user_permissions = models.ManyToManyField(Permission, verbose_name=_('user permissions'), blank=True)
- objects = UserManager()
-
- class Meta:
- verbose_name = _('user')
- verbose_name_plural = _('users')
-
- def __unicode__(self):
- return self.username
-
- def get_absolute_url(self):
- return "/users/%s/" % urllib.quote(smart_str(self.username))
-
- def is_anonymous(self):
- """
- Always returns False. This is a way of comparing User objects to
- anonymous users.
- """
- return False
-
- def is_authenticated(self):
- """
- Always return True. This is a way to tell if the user has been
- authenticated in templates.
- """
- return True
-
- def get_full_name(self):
- "Returns the first_name plus the last_name, with a space in between."
- full_name = u'%s %s' % (self.first_name, self.last_name)
- return full_name.strip()
-
- def set_password(self, raw_password):
- if raw_password is None:
- self.set_unusable_password()
- else:
- import random
- algo = 'sha1'
- salt = get_hexdigest(algo, str(random.random()), str(random.random()))[:5]
- hsh = get_hexdigest(algo, salt, raw_password)
- self.password = '%s$%s$%s' % (algo, salt, hsh)
-
- def check_password(self, raw_password):
- """
- Returns a boolean of whether the raw_password was correct. Handles
- encryption formats behind the scenes.
- """
- # Backwards-compatibility check. Older passwords won't include the
- # algorithm or salt.
- if '$' not in self.password:
- is_correct = (self.password == get_hexdigest('md5', '', raw_password))
- if is_correct:
- # Convert the password to the new, more secure format.
- self.set_password(raw_password)
- self.save()
- return is_correct
- return check_password(raw_password, self.password)
-
- def set_unusable_password(self):
- # Sets a value that will never be a valid hash
- self.password = UNUSABLE_PASSWORD
-
- def has_usable_password(self):
- if self.password is None \
- or self.password == UNUSABLE_PASSWORD:
- return False
- else:
- return True
-
- def get_group_permissions(self, obj=None):
- """
- Returns a list of permission strings that this user has through
- his/her groups. This method queries all available auth backends.
- If an object is passed in, only permissions matching this object
- are returned.
- """
- permissions = set()
- for backend in auth.get_backends():
- if hasattr(backend, "get_group_permissions"):
- if obj is not None:
- if backend.supports_object_permissions:
- permissions.update(
- backend.get_group_permissions(self, obj)
- )
- else:
- permissions.update(backend.get_group_permissions(self))
- return permissions
-
- def get_all_permissions(self, obj=None):
- return _user_get_all_permissions(self, obj)
-
- def has_perm(self, perm, obj=None):
- """
- Returns True if the user has the specified permission. This method
- queries all available auth backends, but returns immediately if any
- backend returns True. Thus, a user who has permission from a single
- auth backend is assumed to have permission in general. If an object
- is provided, permissions for this specific object are checked.
- """
- # Inactive users have no permissions.
- if not self.is_active:
- return False
-
- # Superusers have all permissions.
- if self.is_superuser:
- return True
-
- # Otherwise we need to check the backends.
- return _user_has_perm(self, perm, obj)
-
- def has_perms(self, perm_list, obj=None):
- """
- Returns True if the user has each of the specified permissions.
- If object is passed, it checks if the user has all required perms
- for this object.
- """
- for perm in perm_list:
- if not self.has_perm(perm, obj):
- return False
- return True
-
- def has_module_perms(self, app_label):
- """
- Returns True if the user has any permissions in the given app
- label. Uses pretty much the same logic as has_perm, above.
- """
- if not self.is_active:
- return False
-
- if self.is_superuser:
- return True
-
- return _user_has_module_perms(self, app_label)
-
- def get_and_delete_messages(self):
- messages = []
- for m in self.message_set.all():
- messages.append(m.message)
- m.delete()
- return messages
-
- def email_user(self, subject, message, from_email=None):
- "Sends an e-mail to this User."
- from django.core.mail import send_mail
- send_mail(subject, message, from_email, [self.email])
-
- def get_profile(self):
- """
- Returns site-specific profile for this user. Raises
- SiteProfileNotAvailable if this site does not allow profiles.
- """
- if not hasattr(self, '_profile_cache'):
- from django.conf import settings
- if not getattr(settings, 'AUTH_PROFILE_MODULE', False):
- raise SiteProfileNotAvailable('You need to set AUTH_PROFILE_MO'
- 'DULE in your project settings')
- try:
- app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
- except ValueError:
- raise SiteProfileNotAvailable('app_label and model_name should'
- ' be separated by a dot in the AUTH_PROFILE_MODULE set'
- 'ting')
-
- try:
- model = models.get_model(app_label, model_name)
- if model is None:
- raise SiteProfileNotAvailable('Unable to load the profile '
- 'model, check AUTH_PROFILE_MODULE in your project sett'
- 'ings')
- self._profile_cache = model._default_manager.using(self._state.db).get(user__id__exact=self.id)
- self._profile_cache.user = self
- except (ImportError, ImproperlyConfigured):
- raise SiteProfileNotAvailable
- return self._profile_cache
-
- def _get_message_set(self):
- import warnings
- warnings.warn('The user messaging API is deprecated. Please update'
- ' your code to use the new messages framework.',
- category=PendingDeprecationWarning)
- return self._message_set
- message_set = property(_get_message_set)
-
-class Message(models.Model):
- """
- The message system is a lightweight way to queue messages for given
- users. A message is associated with a User instance (so it is only
- applicable for registered users). There's no concept of expiration or
- timestamps. Messages are created by the Django admin after successful
- actions. For example, "The poll Foo was created successfully." is a
- message.
- """
- user = models.ForeignKey(User, related_name='_message_set')
- message = models.TextField(_('message'))
-
- def __unicode__(self):
- return self.message
-
-class AnonymousUser(object):
- id = None
- username = ''
- is_staff = False
- is_active = False
- is_superuser = False
- _groups = EmptyManager()
- _user_permissions = EmptyManager()
-
- def __init__(self):
- pass
-
- def __unicode__(self):
- return 'AnonymousUser'
-
- def __str__(self):
- return unicode(self).encode('utf-8')
-
- def __eq__(self, other):
- return isinstance(other, self.__class__)
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __hash__(self):
- return 1 # instances always return the same hash value
-
- def save(self):
- raise NotImplementedError
-
- def delete(self):
- raise NotImplementedError
-
- def set_password(self, raw_password):
- raise NotImplementedError
-
- def check_password(self, raw_password):
- raise NotImplementedError
-
- def _get_groups(self):
- return self._groups
- groups = property(_get_groups)
-
- def _get_user_permissions(self):
- return self._user_permissions
- user_permissions = property(_get_user_permissions)
-
- def get_group_permissions(self, obj=None):
- return set()
-
- def get_all_permissions(self, obj=None):
- return _user_get_all_permissions(self, obj=obj)
-
- def has_perm(self, perm, obj=None):
- return _user_has_perm(self, perm, obj=obj)
-
- def has_perms(self, perm_list, obj=None):
- for perm in perm_list:
- if not self.has_perm(perm, obj):
- return False
- return True
-
- def has_module_perms(self, module):
- return _user_has_module_perms(self, module)
-
- def get_and_delete_messages(self):
- return []
-
- def is_anonymous(self):
- return True
-
- def is_authenticated(self):
- return False
diff --git a/parts/django/django/contrib/auth/tests/__init__.py b/parts/django/django/contrib/auth/tests/__init__.py
deleted file mode 100644
index 9bf7d83..0000000
--- a/parts/django/django/contrib/auth/tests/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.contrib.auth.tests.auth_backends import BackendTest, RowlevelBackendTest, AnonymousUserBackendTest, NoAnonymousUserBackendTest, NoBackendsTest
-from django.contrib.auth.tests.basic import BasicTestCase
-from django.contrib.auth.tests.decorators import LoginRequiredTestCase
-from django.contrib.auth.tests.forms import UserCreationFormTest, AuthenticationFormTest, SetPasswordFormTest, PasswordChangeFormTest, UserChangeFormTest, PasswordResetFormTest
-from django.contrib.auth.tests.remote_user \
- import RemoteUserTest, RemoteUserNoCreateTest, RemoteUserCustomTest
-from django.contrib.auth.tests.models import ProfileTestCase
-from django.contrib.auth.tests.tokens import TokenGeneratorTest
-from django.contrib.auth.tests.views \
- import PasswordResetTest, ChangePasswordTest, LoginTest, LogoutTest
-
-# The password for the fixture data users is 'password'
diff --git a/parts/django/django/contrib/auth/tests/auth_backends.py b/parts/django/django/contrib/auth/tests/auth_backends.py
deleted file mode 100644
index 536833e..0000000
--- a/parts/django/django/contrib/auth/tests/auth_backends.py
+++ /dev/null
@@ -1,268 +0,0 @@
-from django.conf import settings
-from django.contrib.auth.models import User, Group, Permission, AnonymousUser
-from django.contrib.contenttypes.models import ContentType
-from django.core.exceptions import ImproperlyConfigured
-from django.test import TestCase
-
-
-class BackendTest(TestCase):
-
- backend = 'django.contrib.auth.backends.ModelBackend'
-
- def setUp(self):
- self.curr_auth = settings.AUTHENTICATION_BACKENDS
- settings.AUTHENTICATION_BACKENDS = (self.backend,)
- User.objects.create_user('test', 'test@example.com', 'test')
- User.objects.create_superuser('test2', 'test2@example.com', 'test')
-
- def tearDown(self):
- settings.AUTHENTICATION_BACKENDS = self.curr_auth
-
- def test_has_perm(self):
- user = User.objects.get(username='test')
- self.assertEqual(user.has_perm('auth.test'), False)
- user.is_staff = True
- user.save()
- self.assertEqual(user.has_perm('auth.test'), False)
- user.is_superuser = True
- user.save()
- self.assertEqual(user.has_perm('auth.test'), True)
- user.is_staff = False
- user.is_superuser = False
- user.save()
- self.assertEqual(user.has_perm('auth.test'), False)
- user.is_staff = True
- user.is_superuser = True
- user.is_active = False
- user.save()
- self.assertEqual(user.has_perm('auth.test'), False)
-
- def test_custom_perms(self):
- user = User.objects.get(username='test')
- content_type=ContentType.objects.get_for_model(Group)
- perm = Permission.objects.create(name='test', content_type=content_type, codename='test')
- user.user_permissions.add(perm)
- user.save()
-
- # reloading user to purge the _perm_cache
- user = User.objects.get(username='test')
- self.assertEqual(user.get_all_permissions() == set([u'auth.test']), True)
- self.assertEqual(user.get_group_permissions(), set([]))
- self.assertEqual(user.has_module_perms('Group'), False)
- self.assertEqual(user.has_module_perms('auth'), True)
- perm = Permission.objects.create(name='test2', content_type=content_type, codename='test2')
- user.user_permissions.add(perm)
- user.save()
- perm = Permission.objects.create(name='test3', content_type=content_type, codename='test3')
- user.user_permissions.add(perm)
- user.save()
- user = User.objects.get(username='test')
- self.assertEqual(user.get_all_permissions(), set([u'auth.test2', u'auth.test', u'auth.test3']))
- self.assertEqual(user.has_perm('test'), False)
- self.assertEqual(user.has_perm('auth.test'), True)
- self.assertEqual(user.has_perms(['auth.test2', 'auth.test3']), True)
- perm = Permission.objects.create(name='test_group', content_type=content_type, codename='test_group')
- group = Group.objects.create(name='test_group')
- group.permissions.add(perm)
- group.save()
- user.groups.add(group)
- user = User.objects.get(username='test')
- exp = set([u'auth.test2', u'auth.test', u'auth.test3', u'auth.test_group'])
- self.assertEqual(user.get_all_permissions(), exp)
- self.assertEqual(user.get_group_permissions(), set([u'auth.test_group']))
- self.assertEqual(user.has_perms(['auth.test3', 'auth.test_group']), True)
-
- user = AnonymousUser()
- self.assertEqual(user.has_perm('test'), False)
- self.assertEqual(user.has_perms(['auth.test2', 'auth.test3']), False)
-
- def test_has_no_object_perm(self):
- """Regressiontest for #12462"""
- user = User.objects.get(username='test')
- content_type=ContentType.objects.get_for_model(Group)
- perm = Permission.objects.create(name='test', content_type=content_type, codename='test')
- user.user_permissions.add(perm)
- user.save()
-
- self.assertEqual(user.has_perm('auth.test', 'object'), False)
- self.assertEqual(user.get_all_permissions('object'), set([]))
- self.assertEqual(user.has_perm('auth.test'), True)
- self.assertEqual(user.get_all_permissions(), set(['auth.test']))
-
- def test_get_all_superuser_permissions(self):
- "A superuser has all permissions. Refs #14795"
- user = User.objects.get(username='test2')
- self.assertEqual(len(user.get_all_permissions()), len(Permission.objects.all()))
-
-class TestObj(object):
- pass
-
-
-class SimpleRowlevelBackend(object):
- supports_object_permissions = True
-
- # This class also supports tests for anonymous user permissions,
- # via subclasses which just set the 'supports_anonymous_user' attribute.
-
- def has_perm(self, user, perm, obj=None):
- if not obj:
- return # We only support row level perms
-
- if isinstance(obj, TestObj):
- if user.username == 'test2':
- return True
- elif user.is_anonymous() and perm == 'anon':
- # not reached due to supports_anonymous_user = False
- return True
- return False
-
- def has_module_perms(self, user, app_label):
- return app_label == "app1"
-
- def get_all_permissions(self, user, obj=None):
- if not obj:
- return [] # We only support row level perms
-
- if not isinstance(obj, TestObj):
- return ['none']
-
- if user.is_anonymous():
- return ['anon']
- if user.username == 'test2':
- return ['simple', 'advanced']
- else:
- return ['simple']
-
- def get_group_permissions(self, user, obj=None):
- if not obj:
- return # We only support row level perms
-
- if not isinstance(obj, TestObj):
- return ['none']
-
- if 'test_group' in [group.name for group in user.groups.all()]:
- return ['group_perm']
- else:
- return ['none']
-
-
-class RowlevelBackendTest(TestCase):
- """
- Tests for auth backend that supports object level permissions
- """
- backend = 'django.contrib.auth.tests.auth_backends.SimpleRowlevelBackend'
-
- def setUp(self):
- self.curr_auth = settings.AUTHENTICATION_BACKENDS
- settings.AUTHENTICATION_BACKENDS = tuple(self.curr_auth) + (self.backend,)
- self.user1 = User.objects.create_user('test', 'test@example.com', 'test')
- self.user2 = User.objects.create_user('test2', 'test2@example.com', 'test')
- self.user3 = User.objects.create_user('test3', 'test3@example.com', 'test')
-
- def tearDown(self):
- settings.AUTHENTICATION_BACKENDS = self.curr_auth
-
- def test_has_perm(self):
- self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
- self.assertEqual(self.user2.has_perm('perm', TestObj()), True)
- self.assertEqual(self.user2.has_perm('perm'), False)
- self.assertEqual(self.user2.has_perms(['simple', 'advanced'], TestObj()), True)
- self.assertEqual(self.user3.has_perm('perm', TestObj()), False)
- self.assertEqual(self.user3.has_perm('anon', TestObj()), False)
- self.assertEqual(self.user3.has_perms(['simple', 'advanced'], TestObj()), False)
-
- def test_get_all_permissions(self):
- self.assertEqual(self.user1.get_all_permissions(TestObj()), set(['simple']))
- self.assertEqual(self.user2.get_all_permissions(TestObj()), set(['simple', 'advanced']))
- self.assertEqual(self.user2.get_all_permissions(), set([]))
-
- def test_get_group_permissions(self):
- content_type=ContentType.objects.get_for_model(Group)
- group = Group.objects.create(name='test_group')
- self.user3.groups.add(group)
- self.assertEqual(self.user3.get_group_permissions(TestObj()), set(['group_perm']))
-
-
-class AnonymousUserBackend(SimpleRowlevelBackend):
-
- supports_anonymous_user = True
-
-
-class NoAnonymousUserBackend(SimpleRowlevelBackend):
-
- supports_anonymous_user = False
-
-
-class AnonymousUserBackendTest(TestCase):
- """
- Tests for AnonymousUser delegating to backend if it has 'supports_anonymous_user' = True
- """
-
- backend = 'django.contrib.auth.tests.auth_backends.AnonymousUserBackend'
-
- def setUp(self):
- self.curr_auth = settings.AUTHENTICATION_BACKENDS
- settings.AUTHENTICATION_BACKENDS = (self.backend,)
- self.user1 = AnonymousUser()
-
- def tearDown(self):
- settings.AUTHENTICATION_BACKENDS = self.curr_auth
-
- def test_has_perm(self):
- self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
- self.assertEqual(self.user1.has_perm('anon', TestObj()), True)
-
- def test_has_perms(self):
- self.assertEqual(self.user1.has_perms(['anon'], TestObj()), True)
- self.assertEqual(self.user1.has_perms(['anon', 'perm'], TestObj()), False)
-
- def test_has_module_perms(self):
- self.assertEqual(self.user1.has_module_perms("app1"), True)
- self.assertEqual(self.user1.has_module_perms("app2"), False)
-
- def test_get_all_permissions(self):
- self.assertEqual(self.user1.get_all_permissions(TestObj()), set(['anon']))
-
-
-class NoAnonymousUserBackendTest(TestCase):
- """
- Tests that AnonymousUser does not delegate to backend if it has 'supports_anonymous_user' = False
- """
- backend = 'django.contrib.auth.tests.auth_backends.NoAnonymousUserBackend'
-
- def setUp(self):
- self.curr_auth = settings.AUTHENTICATION_BACKENDS
- settings.AUTHENTICATION_BACKENDS = tuple(self.curr_auth) + (self.backend,)
- self.user1 = AnonymousUser()
-
- def tearDown(self):
- settings.AUTHENTICATION_BACKENDS = self.curr_auth
-
- def test_has_perm(self):
- self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
- self.assertEqual(self.user1.has_perm('anon', TestObj()), False)
-
- def test_has_perms(self):
- self.assertEqual(self.user1.has_perms(['anon'], TestObj()), False)
-
- def test_has_module_perms(self):
- self.assertEqual(self.user1.has_module_perms("app1"), False)
- self.assertEqual(self.user1.has_module_perms("app2"), False)
-
- def test_get_all_permissions(self):
- self.assertEqual(self.user1.get_all_permissions(TestObj()), set())
-
-class NoBackendsTest(TestCase):
- """
- Tests that an appropriate error is raised if no auth backends are provided.
- """
- def setUp(self):
- self.old_AUTHENTICATION_BACKENDS = settings.AUTHENTICATION_BACKENDS
- settings.AUTHENTICATION_BACKENDS = []
- self.user = User.objects.create_user('test', 'test@example.com', 'test')
-
- def tearDown(self):
- settings.AUTHENTICATION_BACKENDS = self.old_AUTHENTICATION_BACKENDS
-
- def test_raises_exception(self):
- self.assertRaises(ImproperlyConfigured, self.user.has_perm, ('perm', TestObj(),))
diff --git a/parts/django/django/contrib/auth/tests/basic.py b/parts/django/django/contrib/auth/tests/basic.py
deleted file mode 100644
index 7493dc6..0000000
--- a/parts/django/django/contrib/auth/tests/basic.py
+++ /dev/null
@@ -1,92 +0,0 @@
-from django.test import TestCase
-from django.contrib.auth.models import User, AnonymousUser
-from django.core.management import call_command
-from StringIO import StringIO
-
-class BasicTestCase(TestCase):
- def test_user(self):
- "Check that users can be created and can set their password"
- u = User.objects.create_user('testuser', 'test@example.com', 'testpw')
- self.assertTrue(u.has_usable_password())
- self.assertFalse(u.check_password('bad'))
- self.assertTrue(u.check_password('testpw'))
-
- # Check we can manually set an unusable password
- u.set_unusable_password()
- u.save()
- self.assertFalse(u.check_password('testpw'))
- self.assertFalse(u.has_usable_password())
- u.set_password('testpw')
- self.assertTrue(u.check_password('testpw'))
- u.set_password(None)
- self.assertFalse(u.has_usable_password())
-
- # Check authentication/permissions
- self.assertTrue(u.is_authenticated())
- self.assertFalse(u.is_staff)
- self.assertTrue(u.is_active)
- self.assertFalse(u.is_superuser)
-
- # Check API-based user creation with no password
- u2 = User.objects.create_user('testuser2', 'test2@example.com')
- self.assertFalse(u.has_usable_password())
-
- def test_anonymous_user(self):
- "Check the properties of the anonymous user"
- a = AnonymousUser()
- self.assertFalse(a.is_authenticated())
- self.assertFalse(a.is_staff)
- self.assertFalse(a.is_active)
- self.assertFalse(a.is_superuser)
- self.assertEqual(a.groups.all().count(), 0)
- self.assertEqual(a.user_permissions.all().count(), 0)
-
- def test_superuser(self):
- "Check the creation and properties of a superuser"
- super = User.objects.create_superuser('super', 'super@example.com', 'super')
- self.assertTrue(super.is_superuser)
- self.assertTrue(super.is_active)
- self.assertTrue(super.is_staff)
-
- def test_createsuperuser_management_command(self):
- "Check the operation of the createsuperuser management command"
- # We can use the management command to create a superuser
- new_io = StringIO()
- call_command("createsuperuser",
- interactive=False,
- username="joe",
- email="joe@somewhere.org",
- stdout=new_io
- )
- command_output = new_io.getvalue().strip()
- self.assertEqual(command_output, 'Superuser created successfully.')
- u = User.objects.get(username="joe")
- self.assertEquals(u.email, 'joe@somewhere.org')
- self.assertTrue(u.check_password(''))
-
- # We can supress output on the management command
- new_io = StringIO()
- call_command("createsuperuser",
- interactive=False,
- username="joe2",
- email="joe2@somewhere.org",
- verbosity=0,
- stdout=new_io
- )
- command_output = new_io.getvalue().strip()
- self.assertEqual(command_output, '')
- u = User.objects.get(username="joe2")
- self.assertEquals(u.email, 'joe2@somewhere.org')
- self.assertTrue(u.check_password(''))
-
- new_io = StringIO()
- call_command("createsuperuser",
- interactive=False,
- username="joe+admin@somewhere.org",
- email="joe@somewhere.org",
- stdout=new_io
- )
- u = User.objects.get(username="joe+admin@somewhere.org")
- self.assertEquals(u.email, 'joe@somewhere.org')
- self.assertTrue(u.check_password(''))
-
diff --git a/parts/django/django/contrib/auth/tests/decorators.py b/parts/django/django/contrib/auth/tests/decorators.py
deleted file mode 100644
index 7efd9d8..0000000
--- a/parts/django/django/contrib/auth/tests/decorators.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from unittest import TestCase
-
-from django.contrib.auth.decorators import login_required
-
-
-class LoginRequiredTestCase(TestCase):
- """
- Tests the login_required decorators
- """
- def testCallable(self):
- """
- Check that login_required is assignable to callable objects.
- """
- class CallableView(object):
- def __call__(self, *args, **kwargs):
- pass
- login_required(CallableView())
-
- def testView(self):
- """
- Check that login_required is assignable to normal views.
- """
- def normal_view(request):
- pass
- login_required(normal_view) \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/forms.py b/parts/django/django/contrib/auth/tests/forms.py
deleted file mode 100644
index 5aa49e0..0000000
--- a/parts/django/django/contrib/auth/tests/forms.py
+++ /dev/null
@@ -1,252 +0,0 @@
-from django.contrib.auth.models import User
-from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordChangeForm, SetPasswordForm, UserChangeForm, PasswordResetForm
-from django.test import TestCase
-
-
-class UserCreationFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
-
- def test_user_already_exists(self):
- data = {
- 'username': 'testclient',
- 'password1': 'test123',
- 'password2': 'test123',
- }
- form = UserCreationForm(data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form["username"].errors,
- [u'A user with that username already exists.'])
-
- def test_invalid_data(self):
- data = {
- 'username': 'jsmith!',
- 'password1': 'test123',
- 'password2': 'test123',
- }
- form = UserCreationForm(data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form["username"].errors,
- [u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
-
-
- def test_password_verification(self):
- # The verification password is incorrect.
- data = {
- 'username': 'jsmith',
- 'password1': 'test123',
- 'password2': 'test',
- }
- form = UserCreationForm(data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form["password2"].errors,
- [u"The two password fields didn't match."])
-
-
- def test_both_passwords(self):
- # One (or both) passwords weren't given
- data = {'username': 'jsmith'}
- form = UserCreationForm(data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form['password1'].errors,
- [u'This field is required.'])
- self.assertEqual(form['password2'].errors,
- [u'This field is required.'])
-
-
- data['password2'] = 'test123'
- form = UserCreationForm(data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form['password1'].errors,
- [u'This field is required.'])
-
- def test_success(self):
- # The success case.
-
- data = {
- 'username': 'jsmith@example.com',
- 'password1': 'test123',
- 'password2': 'test123',
- }
- form = UserCreationForm(data)
- self.assertTrue(form.is_valid())
- u = form.save()
- self.assertEqual(repr(u), '<User: jsmith@example.com>')
-
-
-class AuthenticationFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
-
- def test_invalid_username(self):
- # The user submits an invalid username.
-
- data = {
- 'username': 'jsmith_does_not_exist',
- 'password': 'test123',
- }
- form = AuthenticationForm(None, data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form.non_field_errors(),
- [u'Please enter a correct username and password. Note that both fields are case-sensitive.'])
-
- def test_inactive_user(self):
- # The user is inactive.
- data = {
- 'username': 'inactive',
- 'password': 'password',
- }
- form = AuthenticationForm(None, data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form.non_field_errors(),
- [u'This account is inactive.'])
-
-
- def test_success(self):
- # The success case
- data = {
- 'username': 'testclient',
- 'password': 'password',
- }
- form = AuthenticationForm(None, data)
- self.assertTrue(form.is_valid())
- self.assertEqual(form.non_field_errors(), [])
-
-
-class SetPasswordFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
-
- def test_password_verification(self):
- # The two new passwords do not match.
- user = User.objects.get(username='testclient')
- data = {
- 'new_password1': 'abc123',
- 'new_password2': 'abc',
- }
- form = SetPasswordForm(user, data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form["new_password2"].errors,
- [u"The two password fields didn't match."])
-
- def test_success(self):
- user = User.objects.get(username='testclient')
- data = {
- 'new_password1': 'abc123',
- 'new_password2': 'abc123',
- }
- form = SetPasswordForm(user, data)
- self.assertTrue(form.is_valid())
-
-
-class PasswordChangeFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
-
- def test_incorrect_password(self):
- user = User.objects.get(username='testclient')
- data = {
- 'old_password': 'test',
- 'new_password1': 'abc123',
- 'new_password2': 'abc123',
- }
- form = PasswordChangeForm(user, data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form["old_password"].errors,
- [u'Your old password was entered incorrectly. Please enter it again.'])
-
-
- def test_password_verification(self):
- # The two new passwords do not match.
- user = User.objects.get(username='testclient')
- data = {
- 'old_password': 'password',
- 'new_password1': 'abc123',
- 'new_password2': 'abc',
- }
- form = PasswordChangeForm(user, data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form["new_password2"].errors,
- [u"The two password fields didn't match."])
-
-
- def test_success(self):
- # The success case.
- user = User.objects.get(username='testclient')
- data = {
- 'old_password': 'password',
- 'new_password1': 'abc123',
- 'new_password2': 'abc123',
- }
- form = PasswordChangeForm(user, data)
- self.assertTrue(form.is_valid())
-
- def test_field_order(self):
- # Regression test - check the order of fields:
- user = User.objects.get(username='testclient')
- self.assertEqual(PasswordChangeForm(user, {}).fields.keys(),
- ['old_password', 'new_password1', 'new_password2'])
-
-class UserChangeFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
-
- def test_username_validity(self):
- user = User.objects.get(username='testclient')
- data = {'username': 'not valid'}
- form = UserChangeForm(data, instance=user)
- self.assertFalse(form.is_valid())
- self.assertEqual(form['username'].errors,
- [u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
-
- def test_bug_14242(self):
- # A regression test, introduce by adding an optimization for the
- # UserChangeForm.
-
- class MyUserForm(UserChangeForm):
- def __init__(self, *args, **kwargs):
- super(MyUserForm, self).__init__(*args, **kwargs)
- self.fields['groups'].help_text = 'These groups give users different permissions'
-
- class Meta(UserChangeForm.Meta):
- fields = ('groups',)
-
- # Just check we can create it
- form = MyUserForm({})
-
-
-class PasswordResetFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
-
- def test_invalid_email(self):
- data = {'email':'not valid'}
- form = PasswordResetForm(data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form['email'].errors,
- [u'Enter a valid e-mail address.'])
-
- def test_nonexistant_email(self):
- # Test nonexistant email address
- data = {'email':'foo@bar.com'}
- form = PasswordResetForm(data)
- self.assertFalse(form.is_valid())
- self.assertEqual(form.errors,
- {'email': [u"That e-mail address doesn't have an associated user account. Are you sure you've registered?"]})
-
- def test_cleaned_data(self):
- # Regression test
- user = User.objects.create_user("jsmith3", "jsmith3@example.com", "test123")
- data = {'email':'jsmith3@example.com'}
- form = PasswordResetForm(data)
- self.assertTrue(form.is_valid())
- self.assertEqual(form.cleaned_data['email'], u'jsmith3@example.com')
-
-
- def test_bug_5605(self):
- # bug #5605, preserve the case of the user name (before the @ in the
- # email address) when creating a user.
- user = User.objects.create_user('forms_test2', 'tesT@EXAMple.com', 'test')
- self.assertEqual(user.email, 'tesT@example.com')
- user = User.objects.create_user('forms_test3', 'tesT', 'test')
- self.assertEqual(user.email, 'tesT')
diff --git a/parts/django/django/contrib/auth/tests/models.py b/parts/django/django/contrib/auth/tests/models.py
deleted file mode 100644
index 754c6db..0000000
--- a/parts/django/django/contrib/auth/tests/models.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from django.conf import settings
-from django.test import TestCase
-from django.contrib.auth.models import User, SiteProfileNotAvailable
-
-class ProfileTestCase(TestCase):
- fixtures = ['authtestdata.json']
- def setUp(self):
- """Backs up the AUTH_PROFILE_MODULE"""
- self.old_AUTH_PROFILE_MODULE = getattr(settings,
- 'AUTH_PROFILE_MODULE', None)
-
- def tearDown(self):
- """Restores the AUTH_PROFILE_MODULE -- if it was not set it is deleted,
- otherwise the old value is restored"""
- if self.old_AUTH_PROFILE_MODULE is None and \
- hasattr(settings, 'AUTH_PROFILE_MODULE'):
- del settings.AUTH_PROFILE_MODULE
-
- if self.old_AUTH_PROFILE_MODULE is not None:
- settings.AUTH_PROFILE_MODULE = self.old_AUTH_PROFILE_MODULE
-
- def test_site_profile_not_available(self):
- # calling get_profile without AUTH_PROFILE_MODULE set
- if hasattr(settings, 'AUTH_PROFILE_MODULE'):
- del settings.AUTH_PROFILE_MODULE
- user = User.objects.get(username='testclient')
- self.assertRaises(SiteProfileNotAvailable, user.get_profile)
-
- # Bad syntax in AUTH_PROFILE_MODULE:
- settings.AUTH_PROFILE_MODULE = 'foobar'
- self.assertRaises(SiteProfileNotAvailable, user.get_profile)
-
- # module that doesn't exist
- settings.AUTH_PROFILE_MODULE = 'foo.bar'
- self.assertRaises(SiteProfileNotAvailable, user.get_profile)
diff --git a/parts/django/django/contrib/auth/tests/remote_user.py b/parts/django/django/contrib/auth/tests/remote_user.py
deleted file mode 100644
index 6115edc..0000000
--- a/parts/django/django/contrib/auth/tests/remote_user.py
+++ /dev/null
@@ -1,170 +0,0 @@
-from datetime import datetime
-
-from django.conf import settings
-from django.contrib.auth.backends import RemoteUserBackend
-from django.contrib.auth.models import User
-from django.test import TestCase
-
-
-class RemoteUserTest(TestCase):
-
- urls = 'django.contrib.auth.tests.urls'
- middleware = 'django.contrib.auth.middleware.RemoteUserMiddleware'
- backend = 'django.contrib.auth.backends.RemoteUserBackend'
-
- # Usernames to be passed in REMOTE_USER for the test_known_user test case.
- known_user = 'knownuser'
- known_user2 = 'knownuser2'
-
- def setUp(self):
- self.curr_middleware = settings.MIDDLEWARE_CLASSES
- self.curr_auth = settings.AUTHENTICATION_BACKENDS
- settings.MIDDLEWARE_CLASSES += (self.middleware,)
- settings.AUTHENTICATION_BACKENDS = (self.backend,)
-
- def test_no_remote_user(self):
- """
- Tests requests where no remote user is specified and insures that no
- users get created.
- """
- num_users = User.objects.count()
-
- response = self.client.get('/remote_user/')
- self.assert_(response.context['user'].is_anonymous())
- self.assertEqual(User.objects.count(), num_users)
-
- response = self.client.get('/remote_user/', REMOTE_USER=None)
- self.assert_(response.context['user'].is_anonymous())
- self.assertEqual(User.objects.count(), num_users)
-
- response = self.client.get('/remote_user/', REMOTE_USER='')
- self.assert_(response.context['user'].is_anonymous())
- self.assertEqual(User.objects.count(), num_users)
-
- def test_unknown_user(self):
- """
- Tests the case where the username passed in the header does not exist
- as a User.
- """
- num_users = User.objects.count()
- response = self.client.get('/remote_user/', REMOTE_USER='newuser')
- self.assertEqual(response.context['user'].username, 'newuser')
- self.assertEqual(User.objects.count(), num_users + 1)
- User.objects.get(username='newuser')
-
- # Another request with same user should not create any new users.
- response = self.client.get('/remote_user/', REMOTE_USER='newuser')
- self.assertEqual(User.objects.count(), num_users + 1)
-
- def test_known_user(self):
- """
- Tests the case where the username passed in the header is a valid User.
- """
- User.objects.create(username='knownuser')
- User.objects.create(username='knownuser2')
- num_users = User.objects.count()
- response = self.client.get('/remote_user/', REMOTE_USER=self.known_user)
- self.assertEqual(response.context['user'].username, 'knownuser')
- self.assertEqual(User.objects.count(), num_users)
- # Test that a different user passed in the headers causes the new user
- # to be logged in.
- response = self.client.get('/remote_user/', REMOTE_USER=self.known_user2)
- self.assertEqual(response.context['user'].username, 'knownuser2')
- self.assertEqual(User.objects.count(), num_users)
-
- def test_last_login(self):
- """
- Tests that a user's last_login is set the first time they make a
- request but not updated in subsequent requests with the same session.
- """
- user = User.objects.create(username='knownuser')
- # Set last_login to something so we can determine if it changes.
- default_login = datetime(2000, 1, 1)
- user.last_login = default_login
- user.save()
-
- response = self.client.get('/remote_user/', REMOTE_USER=self.known_user)
- self.assertNotEqual(default_login, response.context['user'].last_login)
-
- user = User.objects.get(username='knownuser')
- user.last_login = default_login
- user.save()
- response = self.client.get('/remote_user/', REMOTE_USER=self.known_user)
- self.assertEqual(default_login, response.context['user'].last_login)
-
- def tearDown(self):
- """Restores settings to avoid breaking other tests."""
- settings.MIDDLEWARE_CLASSES = self.curr_middleware
- settings.AUTHENTICATION_BACKENDS = self.curr_auth
-
-
-class RemoteUserNoCreateBackend(RemoteUserBackend):
- """Backend that doesn't create unknown users."""
- create_unknown_user = False
-
-
-class RemoteUserNoCreateTest(RemoteUserTest):
- """
- Contains the same tests as RemoteUserTest, but using a custom auth backend
- class that doesn't create unknown users.
- """
-
- backend =\
- 'django.contrib.auth.tests.remote_user.RemoteUserNoCreateBackend'
-
- def test_unknown_user(self):
- num_users = User.objects.count()
- response = self.client.get('/remote_user/', REMOTE_USER='newuser')
- self.assert_(response.context['user'].is_anonymous())
- self.assertEqual(User.objects.count(), num_users)
-
-
-class CustomRemoteUserBackend(RemoteUserBackend):
- """
- Backend that overrides RemoteUserBackend methods.
- """
-
- def clean_username(self, username):
- """
- Grabs username before the @ character.
- """
- return username.split('@')[0]
-
- def configure_user(self, user):
- """
- Sets user's email address.
- """
- user.email = 'user@example.com'
- user.save()
- return user
-
-
-class RemoteUserCustomTest(RemoteUserTest):
- """
- Tests a custom RemoteUserBackend subclass that overrides the clean_username
- and configure_user methods.
- """
-
- backend =\
- 'django.contrib.auth.tests.remote_user.CustomRemoteUserBackend'
- # REMOTE_USER strings with e-mail addresses for the custom backend to
- # clean.
- known_user = 'knownuser@example.com'
- known_user2 = 'knownuser2@example.com'
-
- def test_known_user(self):
- """
- The strings passed in REMOTE_USER should be cleaned and the known users
- should not have been configured with an email address.
- """
- super(RemoteUserCustomTest, self).test_known_user()
- self.assertEqual(User.objects.get(username='knownuser').email, '')
- self.assertEqual(User.objects.get(username='knownuser2').email, '')
-
- def test_unknown_user(self):
- """
- The unknown user created should be configured with an email address.
- """
- super(RemoteUserCustomTest, self).test_unknown_user()
- newuser = User.objects.get(username='newuser')
- self.assertEqual(newuser.email, 'user@example.com')
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/logged_out.html b/parts/django/django/contrib/auth/tests/templates/registration/logged_out.html
deleted file mode 100644
index d690653..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/logged_out.html
+++ /dev/null
@@ -1 +0,0 @@
-Logged out \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/login.html b/parts/django/django/contrib/auth/tests/templates/registration/login.html
deleted file mode 100644
index 027da71..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/login.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ form.as_ul }} \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/password_change_form.html b/parts/django/django/contrib/auth/tests/templates/registration/password_change_form.html
deleted file mode 100644
index d960111..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/password_change_form.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ form }} \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_complete.html b/parts/django/django/contrib/auth/tests/templates/registration/password_reset_complete.html
deleted file mode 100644
index 3dd79d8..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_complete.html
+++ /dev/null
@@ -1 +0,0 @@
-Password reset successfully \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_confirm.html b/parts/django/django/contrib/auth/tests/templates/registration/password_reset_confirm.html
deleted file mode 100644
index 8f06c57..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_confirm.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{% if validlink %}
-Please enter your new password: {{ form }}
-{% else %}
-The password reset link was invalid
-{% endif %} \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_done.html b/parts/django/django/contrib/auth/tests/templates/registration/password_reset_done.html
deleted file mode 100644
index d56b10f..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_done.html
+++ /dev/null
@@ -1 +0,0 @@
-E-mail sent \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_email.html b/parts/django/django/contrib/auth/tests/templates/registration/password_reset_email.html
deleted file mode 100644
index 1b9a482..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_email.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ protocol }}://{{ domain }}/reset/{{ uid }}-{{ token }}/ \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_form.html b/parts/django/django/contrib/auth/tests/templates/registration/password_reset_form.html
deleted file mode 100644
index d960111..0000000
--- a/parts/django/django/contrib/auth/tests/templates/registration/password_reset_form.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ form }} \ No newline at end of file
diff --git a/parts/django/django/contrib/auth/tests/tokens.py b/parts/django/django/contrib/auth/tests/tokens.py
deleted file mode 100644
index 9211e06..0000000
--- a/parts/django/django/contrib/auth/tests/tokens.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from datetime import date, timedelta
-
-from django.conf import settings
-from django.contrib.auth.models import User, AnonymousUser
-from django.contrib.auth.tokens import PasswordResetTokenGenerator
-from django.test import TestCase
-
-
-class TokenGeneratorTest(TestCase):
-
- def test_make_token(self):
- """
- Ensure that we can make a token and that it is valid
- """
- user = User.objects.create_user('tokentestuser', 'test2@example.com', 'testpw')
- p0 = PasswordResetTokenGenerator()
- tk1 = p0.make_token(user)
- self.assertTrue(p0.check_token(user, tk1))
-
- def test_10265(self):
- """
- Ensure that the token generated for a user created in the same request
- will work correctly.
- """
- # See ticket #10265
- user = User.objects.create_user('comebackkid', 'test3@example.com', 'testpw')
- p0 = PasswordResetTokenGenerator()
- tk1 = p0.make_token(user)
- reload = User.objects.get(username='comebackkid')
- tk2 = p0.make_token(reload)
- self.assertEqual(tk1, tk2)
-
- def test_timeout(self):
- """
- Ensure we can use the token after n days, but no greater.
- """
- # Uses a mocked version of PasswordResetTokenGenerator so we can change
- # the value of 'today'
- class Mocked(PasswordResetTokenGenerator):
- def __init__(self, today):
- self._today_val = today
- def _today(self):
- return self._today_val
-
- user = User.objects.create_user('tokentestuser', 'test2@example.com', 'testpw')
- p0 = PasswordResetTokenGenerator()
- tk1 = p0.make_token(user)
- p1 = Mocked(date.today() + timedelta(settings.PASSWORD_RESET_TIMEOUT_DAYS))
- self.assertTrue(p1.check_token(user, tk1))
-
- p2 = Mocked(date.today() + timedelta(settings.PASSWORD_RESET_TIMEOUT_DAYS + 1))
- self.assertFalse(p2.check_token(user, tk1))
-
- def test_date_length(self):
- """
- Make sure we don't allow overly long dates, causing a potential DoS.
- """
- user = User.objects.create_user('ima1337h4x0r', 'test4@example.com', 'p4ssw0rd')
- p0 = PasswordResetTokenGenerator()
-
- # This will put a 14-digit base36 timestamp into the token, which is too large.
- tk1 = p0._make_token_with_timestamp(user, 175455491841851871349)
- self.assertFalse(p0.check_token(user, tk1))
diff --git a/parts/django/django/contrib/auth/tests/urls.py b/parts/django/django/contrib/auth/tests/urls.py
deleted file mode 100644
index 2003d5e..0000000
--- a/parts/django/django/contrib/auth/tests/urls.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from django.conf.urls.defaults import patterns
-from django.contrib.auth.urls import urlpatterns
-from django.http import HttpResponse
-from django.template import Template, RequestContext
-
-def remote_user_auth_view(request):
- "Dummy view for remote user tests"
- t = Template("Username is {{ user }}.")
- c = RequestContext(request, {})
- return HttpResponse(t.render(c))
-
-# special urls for auth test cases
-urlpatterns = urlpatterns + patterns('',
- (r'^logout/custom_query/$', 'django.contrib.auth.views.logout', dict(redirect_field_name='follow')),
- (r'^logout/next_page/$', 'django.contrib.auth.views.logout', dict(next_page='/somewhere/')),
- (r'^remote_user/$', remote_user_auth_view),
-)
-
diff --git a/parts/django/django/contrib/auth/tests/views.py b/parts/django/django/contrib/auth/tests/views.py
deleted file mode 100644
index 22fdbd6..0000000
--- a/parts/django/django/contrib/auth/tests/views.py
+++ /dev/null
@@ -1,286 +0,0 @@
-import os
-import re
-import urllib
-
-from django.conf import settings
-from django.contrib.auth import SESSION_KEY, REDIRECT_FIELD_NAME
-from django.contrib.auth.forms import AuthenticationForm
-from django.contrib.sites.models import Site, RequestSite
-from django.contrib.auth.models import User
-from django.test import TestCase
-from django.core import mail
-from django.core.urlresolvers import reverse
-
-class AuthViewsTestCase(TestCase):
- """
- Helper base class for all the follow test cases.
- """
- fixtures = ['authtestdata.json']
- urls = 'django.contrib.auth.tests.urls'
-
- def setUp(self):
- self.old_LANGUAGES = settings.LANGUAGES
- self.old_LANGUAGE_CODE = settings.LANGUAGE_CODE
- settings.LANGUAGES = (('en', 'English'),)
- settings.LANGUAGE_CODE = 'en'
- self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
- settings.TEMPLATE_DIRS = (
- os.path.join(
- os.path.dirname(__file__),
- 'templates'
- )
- ,)
-
- def tearDown(self):
- settings.LANGUAGES = self.old_LANGUAGES
- settings.LANGUAGE_CODE = self.old_LANGUAGE_CODE
- settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
-
-class PasswordResetTest(AuthViewsTestCase):
-
- def test_email_not_found(self):
- "Error is raised if the provided email address isn't currently registered"
- response = self.client.get('/password_reset/')
- self.assertEquals(response.status_code, 200)
- response = self.client.post('/password_reset/', {'email': 'not_a_real_email@email.com'})
- self.assertContains(response, "That e-mail address doesn&#39;t have an associated user account")
- self.assertEquals(len(mail.outbox), 0)
-
- def test_email_found(self):
- "Email is sent if a valid email address is provided for password reset"
- response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
- self.assertEquals(response.status_code, 302)
- self.assertEquals(len(mail.outbox), 1)
- self.assert_("http://" in mail.outbox[0].body)
-
- def _test_confirm_start(self):
- # Start by creating the email
- response = self.client.post('/password_reset/', {'email': 'staffmember@example.com'})
- self.assertEquals(response.status_code, 302)
- self.assertEquals(len(mail.outbox), 1)
- return self._read_signup_email(mail.outbox[0])
-
- def _read_signup_email(self, email):
- urlmatch = re.search(r"https?://[^/]*(/.*reset/\S*)", email.body)
- self.assert_(urlmatch is not None, "No URL found in sent email")
- return urlmatch.group(), urlmatch.groups()[0]
-
- def test_confirm_valid(self):
- url, path = self._test_confirm_start()
- response = self.client.get(path)
- # redirect to a 'complete' page:
- self.assertEquals(response.status_code, 200)
- self.assert_("Please enter your new password" in response.content)
-
- def test_confirm_invalid(self):
- url, path = self._test_confirm_start()
- # Let's munge the token in the path, but keep the same length,
- # in case the URLconf will reject a different length.
- path = path[:-5] + ("0"*4) + path[-1]
-
- response = self.client.get(path)
- self.assertEquals(response.status_code, 200)
- self.assert_("The password reset link was invalid" in response.content)
-
- def test_confirm_invalid_user(self):
- # Ensure that we get a 200 response for a non-existant user, not a 404
- response = self.client.get('/reset/123456-1-1/')
- self.assertEquals(response.status_code, 200)
- self.assert_("The password reset link was invalid" in response.content)
-
- def test_confirm_invalid_post(self):
- # Same as test_confirm_invalid, but trying
- # to do a POST instead.
- url, path = self._test_confirm_start()
- path = path[:-5] + ("0"*4) + path[-1]
-
- response = self.client.post(path, {'new_password1': 'anewpassword',
- 'new_password2':' anewpassword'})
- # Check the password has not been changed
- u = User.objects.get(email='staffmember@example.com')
- self.assert_(not u.check_password("anewpassword"))
-
- def test_confirm_complete(self):
- url, path = self._test_confirm_start()
- response = self.client.post(path, {'new_password1': 'anewpassword',
- 'new_password2': 'anewpassword'})
- # It redirects us to a 'complete' page:
- self.assertEquals(response.status_code, 302)
- # Check the password has been changed
- u = User.objects.get(email='staffmember@example.com')
- self.assert_(u.check_password("anewpassword"))
-
- # Check we can't use the link again
- response = self.client.get(path)
- self.assertEquals(response.status_code, 200)
- self.assert_("The password reset link was invalid" in response.content)
-
- def test_confirm_different_passwords(self):
- url, path = self._test_confirm_start()
- response = self.client.post(path, {'new_password1': 'anewpassword',
- 'new_password2':' x'})
- self.assertEquals(response.status_code, 200)
- self.assert_("The two password fields didn&#39;t match" in response.content)
-
-class ChangePasswordTest(AuthViewsTestCase):
-
- def login(self, password='password'):
- response = self.client.post('/login/', {
- 'username': 'testclient',
- 'password': password
- }
- )
- self.assertEquals(response.status_code, 302)
- self.assert_(response['Location'].endswith(settings.LOGIN_REDIRECT_URL))
-
- def fail_login(self, password='password'):
- response = self.client.post('/login/', {
- 'username': 'testclient',
- 'password': password
- }
- )
- self.assertEquals(response.status_code, 200)
- self.assert_("Please enter a correct username and password. Note that both fields are case-sensitive." in response.content)
-
- def logout(self):
- response = self.client.get('/logout/')
-
- def test_password_change_fails_with_invalid_old_password(self):
- self.login()
- response = self.client.post('/password_change/', {
- 'old_password': 'donuts',
- 'new_password1': 'password1',
- 'new_password2': 'password1',
- }
- )
- self.assertEquals(response.status_code, 200)
- self.assert_("Your old password was entered incorrectly. Please enter it again." in response.content)
-
- def test_password_change_fails_with_mismatched_passwords(self):
- self.login()
- response = self.client.post('/password_change/', {
- 'old_password': 'password',
- 'new_password1': 'password1',
- 'new_password2': 'donuts',
- }
- )
- self.assertEquals(response.status_code, 200)
- self.assert_("The two password fields didn&#39;t match." in response.content)
-
- def test_password_change_succeeds(self):
- self.login()
- response = self.client.post('/password_change/', {
- 'old_password': 'password',
- 'new_password1': 'password1',
- 'new_password2': 'password1',
- }
- )
- self.assertEquals(response.status_code, 302)
- self.assert_(response['Location'].endswith('/password_change/done/'))
- self.fail_login()
- self.login(password='password1')
-
-class LoginTest(AuthViewsTestCase):
-
- def test_current_site_in_context_after_login(self):
- response = self.client.get(reverse('django.contrib.auth.views.login'))
- self.assertEquals(response.status_code, 200)
- site = Site.objects.get_current()
- self.assertEquals(response.context['site'], site)
- self.assertEquals(response.context['site_name'], site.name)
- self.assert_(isinstance(response.context['form'], AuthenticationForm),
- 'Login form is not an AuthenticationForm')
-
- def test_security_check(self, password='password'):
- login_url = reverse('django.contrib.auth.views.login')
-
- # Those URLs should not pass the security check
- for bad_url in ('http://example.com',
- 'https://example.com',
- 'ftp://exampel.com',
- '//example.com'):
-
- nasty_url = '%(url)s?%(next)s=%(bad_url)s' % {
- 'url': login_url,
- 'next': REDIRECT_FIELD_NAME,
- 'bad_url': urllib.quote(bad_url)
- }
- response = self.client.post(nasty_url, {
- 'username': 'testclient',
- 'password': password,
- }
- )
- self.assertEquals(response.status_code, 302)
- self.assertFalse(bad_url in response['Location'], "%s should be blocked" % bad_url)
-
- # Now, these URLs have an other URL as a GET parameter and therefore
- # should be allowed
- for url_ in ('http://example.com', 'https://example.com',
- 'ftp://exampel.com', '//example.com'):
- safe_url = '%(url)s?%(next)s=/view/?param=%(safe_param)s' % {
- 'url': login_url,
- 'next': REDIRECT_FIELD_NAME,
- 'safe_param': urllib.quote(url_)
- }
- response = self.client.post(safe_url, {
- 'username': 'testclient',
- 'password': password,
- }
- )
- self.assertEquals(response.status_code, 302)
- self.assertTrue('/view/?param=%s' % url_ in response['Location'], "/view/?param=%s should be allowed" % url_)
-
-
-class LogoutTest(AuthViewsTestCase):
- urls = 'django.contrib.auth.tests.urls'
-
- def login(self, password='password'):
- response = self.client.post('/login/', {
- 'username': 'testclient',
- 'password': password
- }
- )
- self.assertEquals(response.status_code, 302)
- self.assert_(response['Location'].endswith(settings.LOGIN_REDIRECT_URL))
- self.assert_(SESSION_KEY in self.client.session)
-
- def confirm_logged_out(self):
- self.assert_(SESSION_KEY not in self.client.session)
-
- def test_logout_default(self):
- "Logout without next_page option renders the default template"
- self.login()
- response = self.client.get('/logout/')
- self.assertEquals(200, response.status_code)
- self.assert_('Logged out' in response.content)
- self.confirm_logged_out()
-
- def test_14377(self):
- # Bug 14377
- self.login()
- response = self.client.get('/logout/')
- self.assertTrue('site' in response.context)
-
- def test_logout_with_next_page_specified(self):
- "Logout with next_page option given redirects to specified resource"
- self.login()
- response = self.client.get('/logout/next_page/')
- self.assertEqual(response.status_code, 302)
- self.assert_(response['Location'].endswith('/somewhere/'))
- self.confirm_logged_out()
-
- def test_logout_with_redirect_argument(self):
- "Logout with query string redirects to specified resource"
- self.login()
- response = self.client.get('/logout/?next=/login/')
- self.assertEqual(response.status_code, 302)
- self.assert_(response['Location'].endswith('/login/'))
- self.confirm_logged_out()
-
- def test_logout_with_custom_redirect_argument(self):
- "Logout with custom query string redirects to specified resource"
- self.login()
- response = self.client.get('/logout/custom_query/?follow=/somewhere/')
- self.assertEqual(response.status_code, 302)
- self.assert_(response['Location'].endswith('/somewhere/'))
- self.confirm_logged_out()
diff --git a/parts/django/django/contrib/auth/tokens.py b/parts/django/django/contrib/auth/tokens.py
deleted file mode 100644
index f61f52d..0000000
--- a/parts/django/django/contrib/auth/tokens.py
+++ /dev/null
@@ -1,66 +0,0 @@
-from datetime import date
-from django.conf import settings
-from django.utils.http import int_to_base36, base36_to_int
-
-class PasswordResetTokenGenerator(object):
- """
- Strategy object used to generate and check tokens for the password
- reset mechanism.
- """
- def make_token(self, user):
- """
- Returns a token that can be used once to do a password reset
- for the given user.
- """
- return self._make_token_with_timestamp(user, self._num_days(self._today()))
-
- def check_token(self, user, token):
- """
- Check that a password reset token is correct for a given user.
- """
- # Parse the token
- try:
- ts_b36, hash = token.split("-")
- except ValueError:
- return False
-
- try:
- ts = base36_to_int(ts_b36)
- except ValueError:
- return False
-
- # Check that the timestamp/uid has not been tampered with
- if self._make_token_with_timestamp(user, ts) != token:
- return False
-
- # Check the timestamp is within limit
- if (self._num_days(self._today()) - ts) > settings.PASSWORD_RESET_TIMEOUT_DAYS:
- return False
-
- return True
-
- def _make_token_with_timestamp(self, user, timestamp):
- # timestamp is number of days since 2001-1-1. Converted to
- # base 36, this gives us a 3 digit string until about 2121
- ts_b36 = int_to_base36(timestamp)
-
- # By hashing on the internal state of the user and using state
- # that is sure to change (the password salt will change as soon as
- # the password is set, at least for current Django auth, and
- # last_login will also change), we produce a hash that will be
- # invalid as soon as it is used.
- # We limit the hash to 20 chars to keep URL short
- from django.utils.hashcompat import sha_constructor
- hash = sha_constructor(settings.SECRET_KEY + unicode(user.id) +
- user.password + user.last_login.strftime('%Y-%m-%d %H:%M:%S') +
- unicode(timestamp)).hexdigest()[::2]
- return "%s-%s" % (ts_b36, hash)
-
- def _num_days(self, dt):
- return (dt - date(2001,1,1)).days
-
- def _today(self):
- # Used for mocking in tests
- return date.today()
-
-default_token_generator = PasswordResetTokenGenerator()
diff --git a/parts/django/django/contrib/auth/urls.py b/parts/django/django/contrib/auth/urls.py
deleted file mode 100644
index 42b4e8f..0000000
--- a/parts/django/django/contrib/auth/urls.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# These URLs are normally mapped to /admin/urls.py. This URLs file is
-# provided as a convenience to those who want to deploy these URLs elsewhere.
-# This file is also used to provide a reliable view deployment for test purposes.
-
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('',
- (r'^login/$', 'django.contrib.auth.views.login'),
- (r'^logout/$', 'django.contrib.auth.views.logout'),
- (r'^password_change/$', 'django.contrib.auth.views.password_change'),
- (r'^password_change/done/$', 'django.contrib.auth.views.password_change_done'),
- (r'^password_reset/$', 'django.contrib.auth.views.password_reset'),
- (r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done'),
- (r'^reset/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'django.contrib.auth.views.password_reset_confirm'),
- (r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete'),
-)
-
diff --git a/parts/django/django/contrib/auth/views.py b/parts/django/django/contrib/auth/views.py
deleted file mode 100644
index 75468b9..0000000
--- a/parts/django/django/contrib/auth/views.py
+++ /dev/null
@@ -1,188 +0,0 @@
-import re
-from django.conf import settings
-from django.contrib.auth import REDIRECT_FIELD_NAME
-# Avoid shadowing the login() view below.
-from django.contrib.auth import login as auth_login
-from django.contrib.auth.decorators import login_required
-from django.contrib.auth.forms import AuthenticationForm
-from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm, PasswordChangeForm
-from django.contrib.auth.tokens import default_token_generator
-from django.views.decorators.csrf import csrf_protect
-from django.core.urlresolvers import reverse
-from django.shortcuts import render_to_response, get_object_or_404
-from django.contrib.sites.models import get_current_site
-from django.http import HttpResponseRedirect, Http404
-from django.template import RequestContext
-from django.utils.http import urlquote, base36_to_int
-from django.utils.translation import ugettext as _
-from django.contrib.auth.models import User
-from django.views.decorators.cache import never_cache
-
-@csrf_protect
-@never_cache
-def login(request, template_name='registration/login.html',
- redirect_field_name=REDIRECT_FIELD_NAME,
- authentication_form=AuthenticationForm):
- """Displays the login form and handles the login action."""
-
- redirect_to = request.REQUEST.get(redirect_field_name, '')
-
- if request.method == "POST":
- form = authentication_form(data=request.POST)
- if form.is_valid():
- # Light security check -- make sure redirect_to isn't garbage.
- if not redirect_to or ' ' in redirect_to:
- redirect_to = settings.LOGIN_REDIRECT_URL
-
- # Heavier security check -- redirects to http://example.com should
- # not be allowed, but things like /view/?param=http://example.com
- # should be allowed. This regex checks if there is a '//' *before* a
- # question mark.
- elif '//' in redirect_to and re.match(r'[^\?]*//', redirect_to):
- redirect_to = settings.LOGIN_REDIRECT_URL
-
- # Okay, security checks complete. Log the user in.
- auth_login(request, form.get_user())
-
- if request.session.test_cookie_worked():
- request.session.delete_test_cookie()
-
- return HttpResponseRedirect(redirect_to)
-
- else:
- form = authentication_form(request)
-
- request.session.set_test_cookie()
-
- current_site = get_current_site(request)
-
- return render_to_response(template_name, {
- 'form': form,
- redirect_field_name: redirect_to,
- 'site': current_site,
- 'site_name': current_site.name,
- }, context_instance=RequestContext(request))
-
-def logout(request, next_page=None, template_name='registration/logged_out.html', redirect_field_name=REDIRECT_FIELD_NAME):
- "Logs out the user and displays 'You are logged out' message."
- from django.contrib.auth import logout
- logout(request)
- if next_page is None:
- redirect_to = request.REQUEST.get(redirect_field_name, '')
- if redirect_to:
- return HttpResponseRedirect(redirect_to)
- else:
- current_site = get_current_site(request)
- return render_to_response(template_name, {
- 'site': current_site,
- 'site_name': current_site.name,
- 'title': _('Logged out')
- }, context_instance=RequestContext(request))
- else:
- # Redirect to this page until the session has been cleared.
- return HttpResponseRedirect(next_page or request.path)
-
-def logout_then_login(request, login_url=None):
- "Logs out the user if he is logged in. Then redirects to the log-in page."
- if not login_url:
- login_url = settings.LOGIN_URL
- return logout(request, login_url)
-
-def redirect_to_login(next, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
- "Redirects the user to the login page, passing the given 'next' page"
- if not login_url:
- login_url = settings.LOGIN_URL
- return HttpResponseRedirect('%s?%s=%s' % (login_url, urlquote(redirect_field_name), urlquote(next)))
-
-# 4 views for password reset:
-# - password_reset sends the mail
-# - password_reset_done shows a success message for the above
-# - password_reset_confirm checks the link the user clicked and
-# prompts for a new password
-# - password_reset_complete shows a success message for the above
-
-@csrf_protect
-def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html',
- email_template_name='registration/password_reset_email.html',
- password_reset_form=PasswordResetForm, token_generator=default_token_generator,
- post_reset_redirect=None):
- if post_reset_redirect is None:
- post_reset_redirect = reverse('django.contrib.auth.views.password_reset_done')
- if request.method == "POST":
- form = password_reset_form(request.POST)
- if form.is_valid():
- opts = {}
- opts['use_https'] = request.is_secure()
- opts['token_generator'] = token_generator
- opts['email_template_name'] = email_template_name
- opts['request'] = request
- if is_admin_site:
- opts['domain_override'] = request.META['HTTP_HOST']
- form.save(**opts)
- return HttpResponseRedirect(post_reset_redirect)
- else:
- form = password_reset_form()
- return render_to_response(template_name, {
- 'form': form,
- }, context_instance=RequestContext(request))
-
-def password_reset_done(request, template_name='registration/password_reset_done.html'):
- return render_to_response(template_name, context_instance=RequestContext(request))
-
-@never_cache
-def password_reset_confirm(request, uidb36=None, token=None, template_name='registration/password_reset_confirm.html',
- token_generator=default_token_generator, set_password_form=SetPasswordForm,
- post_reset_redirect=None):
- """
- View that checks the hash in a password reset link and presents a
- form for entering a new password.
- """
- assert uidb36 is not None and token is not None # checked by URLconf
- if post_reset_redirect is None:
- post_reset_redirect = reverse('django.contrib.auth.views.password_reset_complete')
- try:
- uid_int = base36_to_int(uidb36)
- user = User.objects.get(id=uid_int)
- except (ValueError, User.DoesNotExist):
- user = None
-
- context_instance = RequestContext(request)
-
- if user is not None and token_generator.check_token(user, token):
- context_instance['validlink'] = True
- if request.method == 'POST':
- form = set_password_form(user, request.POST)
- if form.is_valid():
- form.save()
- return HttpResponseRedirect(post_reset_redirect)
- else:
- form = set_password_form(None)
- else:
- context_instance['validlink'] = False
- form = None
- context_instance['form'] = form
- return render_to_response(template_name, context_instance=context_instance)
-
-def password_reset_complete(request, template_name='registration/password_reset_complete.html'):
- return render_to_response(template_name, context_instance=RequestContext(request,
- {'login_url': settings.LOGIN_URL}))
-
-@csrf_protect
-@login_required
-def password_change(request, template_name='registration/password_change_form.html',
- post_change_redirect=None, password_change_form=PasswordChangeForm):
- if post_change_redirect is None:
- post_change_redirect = reverse('django.contrib.auth.views.password_change_done')
- if request.method == "POST":
- form = password_change_form(user=request.user, data=request.POST)
- if form.is_valid():
- form.save()
- return HttpResponseRedirect(post_change_redirect)
- else:
- form = password_change_form(user=request.user)
- return render_to_response(template_name, {
- 'form': form,
- }, context_instance=RequestContext(request))
-
-def password_change_done(request, template_name='registration/password_change_done.html'):
- return render_to_response(template_name, context_instance=RequestContext(request))
diff --git a/parts/django/django/contrib/comments/__init__.py b/parts/django/django/contrib/comments/__init__.py
deleted file mode 100644
index 42384e7..0000000
--- a/parts/django/django/contrib/comments/__init__.py
+++ /dev/null
@@ -1,91 +0,0 @@
-from django.conf import settings
-from django.core import urlresolvers
-from django.core.exceptions import ImproperlyConfigured
-from django.contrib.comments.models import Comment
-from django.contrib.comments.forms import CommentForm
-from django.utils.importlib import import_module
-
-DEFAULT_COMMENTS_APP = 'django.contrib.comments'
-
-def get_comment_app():
- """
- Get the comment app (i.e. "django.contrib.comments") as defined in the settings
- """
- # Make sure the app's in INSTALLED_APPS
- comments_app = get_comment_app_name()
- if comments_app not in settings.INSTALLED_APPS:
- raise ImproperlyConfigured("The COMMENTS_APP (%r) "\
- "must be in INSTALLED_APPS" % settings.COMMENTS_APP)
-
- # Try to import the package
- try:
- package = import_module(comments_app)
- except ImportError:
- raise ImproperlyConfigured("The COMMENTS_APP setting refers to "\
- "a non-existing package.")
-
- return package
-
-def get_comment_app_name():
- """
- Returns the name of the comment app (either the setting value, if it
- exists, or the default).
- """
- return getattr(settings, 'COMMENTS_APP', DEFAULT_COMMENTS_APP)
-
-def get_model():
- """
- Returns the comment model class.
- """
- if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_model"):
- return get_comment_app().get_model()
- else:
- return Comment
-
-def get_form():
- """
- Returns the comment ModelForm class.
- """
- if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_form"):
- return get_comment_app().get_form()
- else:
- return CommentForm
-
-def get_form_target():
- """
- Returns the target URL for the comment form submission view.
- """
- if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_form_target"):
- return get_comment_app().get_form_target()
- else:
- return urlresolvers.reverse("django.contrib.comments.views.comments.post_comment")
-
-def get_flag_url(comment):
- """
- Get the URL for the "flag this comment" view.
- """
- if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_flag_url"):
- return get_comment_app().get_flag_url(comment)
- else:
- return urlresolvers.reverse("django.contrib.comments.views.moderation.flag",
- args=(comment.id,))
-
-def get_delete_url(comment):
- """
- Get the URL for the "delete this comment" view.
- """
- if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_delete_url"):
- return get_comment_app().get_delete_url(comment)
- else:
- return urlresolvers.reverse("django.contrib.comments.views.moderation.delete",
- args=(comment.id,))
-
-def get_approve_url(comment):
- """
- Get the URL for the "approve this comment from moderation" view.
- """
- if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_approve_url"):
- return get_comment_app().get_approve_url(comment)
- else:
- return urlresolvers.reverse("django.contrib.comments.views.moderation.approve",
- args=(comment.id,))
diff --git a/parts/django/django/contrib/comments/admin.py b/parts/django/django/contrib/comments/admin.py
deleted file mode 100644
index 4cb9066..0000000
--- a/parts/django/django/contrib/comments/admin.py
+++ /dev/null
@@ -1,73 +0,0 @@
-from django.contrib import admin
-from django.contrib.comments.models import Comment
-from django.utils.translation import ugettext_lazy as _, ungettext
-from django.contrib.comments import get_model
-from django.contrib.comments.views.moderation import perform_flag, perform_approve, perform_delete
-
-class CommentsAdmin(admin.ModelAdmin):
- fieldsets = (
- (None,
- {'fields': ('content_type', 'object_pk', 'site')}
- ),
- (_('Content'),
- {'fields': ('user', 'user_name', 'user_email', 'user_url', 'comment')}
- ),
- (_('Metadata'),
- {'fields': ('submit_date', 'ip_address', 'is_public', 'is_removed')}
- ),
- )
-
- list_display = ('name', 'content_type', 'object_pk', 'ip_address', 'submit_date', 'is_public', 'is_removed')
- list_filter = ('submit_date', 'site', 'is_public', 'is_removed')
- date_hierarchy = 'submit_date'
- ordering = ('-submit_date',)
- raw_id_fields = ('user',)
- search_fields = ('comment', 'user__username', 'user_name', 'user_email', 'user_url', 'ip_address')
- actions = ["flag_comments", "approve_comments", "remove_comments"]
-
- def get_actions(self, request):
- actions = super(CommentsAdmin, self).get_actions(request)
- # Only superusers should be able to delete the comments from the DB.
- if not request.user.is_superuser and 'delete_selected' in actions:
- actions.pop('delete_selected')
- if not request.user.has_perm('comments.can_moderate'):
- if 'approve_comments' in actions:
- actions.pop('approve_comments')
- if 'remove_comments' in actions:
- actions.pop('remove_comments')
- return actions
-
- def flag_comments(self, request, queryset):
- self._bulk_flag(request, queryset, perform_flag,
- lambda n: ungettext('flagged', 'flagged', n))
- flag_comments.short_description = _("Flag selected comments")
-
- def approve_comments(self, request, queryset):
- self._bulk_flag(request, queryset, perform_approve,
- lambda n: ungettext('approved', 'approved', n))
- approve_comments.short_description = _("Approve selected comments")
-
- def remove_comments(self, request, queryset):
- self._bulk_flag(request, queryset, perform_delete,
- lambda n: ungettext('removed', 'removed', n))
- remove_comments.short_description = _("Remove selected comments")
-
- def _bulk_flag(self, request, queryset, action, done_message):
- """
- Flag, approve, or remove some comments from an admin action. Actually
- calls the `action` argument to perform the heavy lifting.
- """
- n_comments = 0
- for comment in queryset:
- action(request, comment)
- n_comments += 1
-
- msg = ungettext(u'1 comment was successfully %(action)s.',
- u'%(count)s comments were successfully %(action)s.',
- n_comments)
- self.message_user(request, msg % {'count': n_comments, 'action': done_message(n_comments)})
-
-# Only register the default admin if the model is the built-in comment model
-# (this won't be true if there's a custom comment app).
-if get_model() is Comment:
- admin.site.register(Comment, CommentsAdmin)
diff --git a/parts/django/django/contrib/comments/feeds.py b/parts/django/django/contrib/comments/feeds.py
deleted file mode 100644
index e74ca2d..0000000
--- a/parts/django/django/contrib/comments/feeds.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from django.conf import settings
-from django.contrib.syndication.views import Feed
-from django.contrib.sites.models import Site
-from django.contrib import comments
-from django.utils.translation import ugettext as _
-
-class LatestCommentFeed(Feed):
- """Feed of latest comments on the current site."""
-
- def title(self):
- if not hasattr(self, '_site'):
- self._site = Site.objects.get_current()
- return _("%(site_name)s comments") % dict(site_name=self._site.name)
-
- def link(self):
- if not hasattr(self, '_site'):
- self._site = Site.objects.get_current()
- return "http://%s/" % (self._site.domain)
-
- def description(self):
- if not hasattr(self, '_site'):
- self._site = Site.objects.get_current()
- return _("Latest comments on %(site_name)s") % dict(site_name=self._site.name)
-
- def items(self):
- qs = comments.get_model().objects.filter(
- site__pk = settings.SITE_ID,
- is_public = True,
- is_removed = False,
- )
- if getattr(settings, 'COMMENTS_BANNED_USERS_GROUP', None):
- where = ['user_id NOT IN (SELECT user_id FROM auth_user_groups WHERE group_id = %s)']
- params = [settings.COMMENTS_BANNED_USERS_GROUP]
- qs = qs.extra(where=where, params=params)
- return qs.order_by('-submit_date')[:40]
-
- def item_pubdate(self, item):
- return item.submit_date
diff --git a/parts/django/django/contrib/comments/forms.py b/parts/django/django/contrib/comments/forms.py
deleted file mode 100644
index 0c4b285..0000000
--- a/parts/django/django/contrib/comments/forms.py
+++ /dev/null
@@ -1,190 +0,0 @@
-import time
-import datetime
-
-from django import forms
-from django.forms.util import ErrorDict
-from django.conf import settings
-from django.contrib.contenttypes.models import ContentType
-from models import Comment
-from django.utils.encoding import force_unicode
-from django.utils.hashcompat import sha_constructor
-from django.utils.text import get_text_list
-from django.utils.translation import ungettext, ugettext_lazy as _
-
-COMMENT_MAX_LENGTH = getattr(settings,'COMMENT_MAX_LENGTH', 3000)
-
-class CommentSecurityForm(forms.Form):
- """
- Handles the security aspects (anti-spoofing) for comment forms.
- """
- content_type = forms.CharField(widget=forms.HiddenInput)
- object_pk = forms.CharField(widget=forms.HiddenInput)
- timestamp = forms.IntegerField(widget=forms.HiddenInput)
- security_hash = forms.CharField(min_length=40, max_length=40, widget=forms.HiddenInput)
-
- def __init__(self, target_object, data=None, initial=None):
- self.target_object = target_object
- if initial is None:
- initial = {}
- initial.update(self.generate_security_data())
- super(CommentSecurityForm, self).__init__(data=data, initial=initial)
-
- def security_errors(self):
- """Return just those errors associated with security"""
- errors = ErrorDict()
- for f in ["honeypot", "timestamp", "security_hash"]:
- if f in self.errors:
- errors[f] = self.errors[f]
- return errors
-
- def clean_security_hash(self):
- """Check the security hash."""
- security_hash_dict = {
- 'content_type' : self.data.get("content_type", ""),
- 'object_pk' : self.data.get("object_pk", ""),
- 'timestamp' : self.data.get("timestamp", ""),
- }
- expected_hash = self.generate_security_hash(**security_hash_dict)
- actual_hash = self.cleaned_data["security_hash"]
- if expected_hash != actual_hash:
- raise forms.ValidationError("Security hash check failed.")
- return actual_hash
-
- def clean_timestamp(self):
- """Make sure the timestamp isn't too far (> 2 hours) in the past."""
- ts = self.cleaned_data["timestamp"]
- if time.time() - ts > (2 * 60 * 60):
- raise forms.ValidationError("Timestamp check failed")
- return ts
-
- def generate_security_data(self):
- """Generate a dict of security data for "initial" data."""
- timestamp = int(time.time())
- security_dict = {
- 'content_type' : str(self.target_object._meta),
- 'object_pk' : str(self.target_object._get_pk_val()),
- 'timestamp' : str(timestamp),
- 'security_hash' : self.initial_security_hash(timestamp),
- }
- return security_dict
-
- def initial_security_hash(self, timestamp):
- """
- Generate the initial security hash from self.content_object
- and a (unix) timestamp.
- """
-
- initial_security_dict = {
- 'content_type' : str(self.target_object._meta),
- 'object_pk' : str(self.target_object._get_pk_val()),
- 'timestamp' : str(timestamp),
- }
- return self.generate_security_hash(**initial_security_dict)
-
- def generate_security_hash(self, content_type, object_pk, timestamp):
- """Generate a (SHA1) security hash from the provided info."""
- info = (content_type, object_pk, timestamp, settings.SECRET_KEY)
- return sha_constructor("".join(info)).hexdigest()
-
-class CommentDetailsForm(CommentSecurityForm):
- """
- Handles the specific details of the comment (name, comment, etc.).
- """
- name = forms.CharField(label=_("Name"), max_length=50)
- email = forms.EmailField(label=_("Email address"))
- url = forms.URLField(label=_("URL"), required=False)
- comment = forms.CharField(label=_('Comment'), widget=forms.Textarea,
- max_length=COMMENT_MAX_LENGTH)
-
- def get_comment_object(self):
- """
- Return a new (unsaved) comment object based on the information in this
- form. Assumes that the form is already validated and will throw a
- ValueError if not.
-
- Does not set any of the fields that would come from a Request object
- (i.e. ``user`` or ``ip_address``).
- """
- if not self.is_valid():
- raise ValueError("get_comment_object may only be called on valid forms")
-
- CommentModel = self.get_comment_model()
- new = CommentModel(**self.get_comment_create_data())
- new = self.check_for_duplicate_comment(new)
-
- return new
-
- def get_comment_model(self):
- """
- Get the comment model to create with this form. Subclasses in custom
- comment apps should override this, get_comment_create_data, and perhaps
- check_for_duplicate_comment to provide custom comment models.
- """
- return Comment
-
- def get_comment_create_data(self):
- """
- Returns the dict of data to be used to create a comment. Subclasses in
- custom comment apps that override get_comment_model can override this
- method to add extra fields onto a custom comment model.
- """
- return dict(
- content_type = ContentType.objects.get_for_model(self.target_object),
- object_pk = force_unicode(self.target_object._get_pk_val()),
- user_name = self.cleaned_data["name"],
- user_email = self.cleaned_data["email"],
- user_url = self.cleaned_data["url"],
- comment = self.cleaned_data["comment"],
- submit_date = datetime.datetime.now(),
- site_id = settings.SITE_ID,
- is_public = True,
- is_removed = False,
- )
-
- def check_for_duplicate_comment(self, new):
- """
- Check that a submitted comment isn't a duplicate. This might be caused
- by someone posting a comment twice. If it is a dup, silently return the *previous* comment.
- """
- possible_duplicates = self.get_comment_model()._default_manager.using(
- self.target_object._state.db
- ).filter(
- content_type = new.content_type,
- object_pk = new.object_pk,
- user_name = new.user_name,
- user_email = new.user_email,
- user_url = new.user_url,
- )
- for old in possible_duplicates:
- if old.submit_date.date() == new.submit_date.date() and old.comment == new.comment:
- return old
-
- return new
-
- def clean_comment(self):
- """
- If COMMENTS_ALLOW_PROFANITIES is False, check that the comment doesn't
- contain anything in PROFANITIES_LIST.
- """
- comment = self.cleaned_data["comment"]
- if settings.COMMENTS_ALLOW_PROFANITIES == False:
- bad_words = [w for w in settings.PROFANITIES_LIST if w in comment.lower()]
- if bad_words:
- plural = len(bad_words) > 1
- raise forms.ValidationError(ungettext(
- "Watch your mouth! The word %s is not allowed here.",
- "Watch your mouth! The words %s are not allowed here.", plural) % \
- get_text_list(['"%s%s%s"' % (i[0], '-'*(len(i)-2), i[-1]) for i in bad_words], 'and'))
- return comment
-
-class CommentForm(CommentDetailsForm):
- honeypot = forms.CharField(required=False,
- label=_('If you enter anything in this field '\
- 'your comment will be treated as spam'))
-
- def clean_honeypot(self):
- """Check that nothing's been entered into the honeypot."""
- value = self.cleaned_data["honeypot"]
- if value:
- raise forms.ValidationError(self.fields["honeypot"].label)
- return value
diff --git a/parts/django/django/contrib/comments/managers.py b/parts/django/django/contrib/comments/managers.py
deleted file mode 100644
index 499feee..0000000
--- a/parts/django/django/contrib/comments/managers.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from django.db import models
-from django.contrib.contenttypes.models import ContentType
-from django.utils.encoding import force_unicode
-
-class CommentManager(models.Manager):
-
- def in_moderation(self):
- """
- QuerySet for all comments currently in the moderation queue.
- """
- return self.get_query_set().filter(is_public=False, is_removed=False)
-
- def for_model(self, model):
- """
- QuerySet for all comments for a particular model (either an instance or
- a class).
- """
- ct = ContentType.objects.get_for_model(model)
- qs = self.get_query_set().filter(content_type=ct)
- if isinstance(model, models.Model):
- qs = qs.filter(object_pk=force_unicode(model._get_pk_val()))
- return qs
diff --git a/parts/django/django/contrib/comments/models.py b/parts/django/django/contrib/comments/models.py
deleted file mode 100644
index 5e128d2..0000000
--- a/parts/django/django/contrib/comments/models.py
+++ /dev/null
@@ -1,191 +0,0 @@
-import datetime
-from django.contrib.auth.models import User
-from django.contrib.comments.managers import CommentManager
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.sites.models import Site
-from django.db import models
-from django.core import urlresolvers
-from django.utils.translation import ugettext_lazy as _
-from django.conf import settings
-
-COMMENT_MAX_LENGTH = getattr(settings,'COMMENT_MAX_LENGTH',3000)
-
-class BaseCommentAbstractModel(models.Model):
- """
- An abstract base class that any custom comment models probably should
- subclass.
- """
-
- # Content-object field
- content_type = models.ForeignKey(ContentType,
- verbose_name=_('content type'),
- related_name="content_type_set_for_%(class)s")
- object_pk = models.TextField(_('object ID'))
- content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
-
- # Metadata about the comment
- site = models.ForeignKey(Site)
-
- class Meta:
- abstract = True
-
- def get_content_object_url(self):
- """
- Get a URL suitable for redirecting to the content object.
- """
- return urlresolvers.reverse(
- "comments-url-redirect",
- args=(self.content_type_id, self.object_pk)
- )
-
-class Comment(BaseCommentAbstractModel):
- """
- A user comment about some object.
- """
-
- # Who posted this comment? If ``user`` is set then it was an authenticated
- # user; otherwise at least user_name should have been set and the comment
- # was posted by a non-authenticated user.
- user = models.ForeignKey(User, verbose_name=_('user'),
- blank=True, null=True, related_name="%(class)s_comments")
- user_name = models.CharField(_("user's name"), max_length=50, blank=True)
- user_email = models.EmailField(_("user's email address"), blank=True)
- user_url = models.URLField(_("user's URL"), blank=True)
-
- comment = models.TextField(_('comment'), max_length=COMMENT_MAX_LENGTH)
-
- # Metadata about the comment
- submit_date = models.DateTimeField(_('date/time submitted'), default=None)
- ip_address = models.IPAddressField(_('IP address'), blank=True, null=True)
- is_public = models.BooleanField(_('is public'), default=True,
- help_text=_('Uncheck this box to make the comment effectively ' \
- 'disappear from the site.'))
- is_removed = models.BooleanField(_('is removed'), default=False,
- help_text=_('Check this box if the comment is inappropriate. ' \
- 'A "This comment has been removed" message will ' \
- 'be displayed instead.'))
-
- # Manager
- objects = CommentManager()
-
- class Meta:
- db_table = "django_comments"
- ordering = ('submit_date',)
- permissions = [("can_moderate", "Can moderate comments")]
- verbose_name = _('comment')
- verbose_name_plural = _('comments')
-
- def __unicode__(self):
- return "%s: %s..." % (self.name, self.comment[:50])
-
- def save(self, *args, **kwargs):
- if self.submit_date is None:
- self.submit_date = datetime.datetime.now()
- super(Comment, self).save(*args, **kwargs)
-
- def _get_userinfo(self):
- """
- Get a dictionary that pulls together information about the poster
- safely for both authenticated and non-authenticated comments.
-
- This dict will have ``name``, ``email``, and ``url`` fields.
- """
- if not hasattr(self, "_userinfo"):
- self._userinfo = {
- "name" : self.user_name,
- "email" : self.user_email,
- "url" : self.user_url
- }
- if self.user_id:
- u = self.user
- if u.email:
- self._userinfo["email"] = u.email
-
- # If the user has a full name, use that for the user name.
- # However, a given user_name overrides the raw user.username,
- # so only use that if this comment has no associated name.
- if u.get_full_name():
- self._userinfo["name"] = self.user.get_full_name()
- elif not self.user_name:
- self._userinfo["name"] = u.username
- return self._userinfo
- userinfo = property(_get_userinfo, doc=_get_userinfo.__doc__)
-
- def _get_name(self):
- return self.userinfo["name"]
- def _set_name(self, val):
- if self.user_id:
- raise AttributeError(_("This comment was posted by an authenticated "\
- "user and thus the name is read-only."))
- self.user_name = val
- name = property(_get_name, _set_name, doc="The name of the user who posted this comment")
-
- def _get_email(self):
- return self.userinfo["email"]
- def _set_email(self, val):
- if self.user_id:
- raise AttributeError(_("This comment was posted by an authenticated "\
- "user and thus the email is read-only."))
- self.user_email = val
- email = property(_get_email, _set_email, doc="The email of the user who posted this comment")
-
- def _get_url(self):
- return self.userinfo["url"]
- def _set_url(self, val):
- self.user_url = val
- url = property(_get_url, _set_url, doc="The URL given by the user who posted this comment")
-
- def get_absolute_url(self, anchor_pattern="#c%(id)s"):
- return self.get_content_object_url() + (anchor_pattern % self.__dict__)
-
- def get_as_text(self):
- """
- Return this comment as plain text. Useful for emails.
- """
- d = {
- 'user': self.user or self.name,
- 'date': self.submit_date,
- 'comment': self.comment,
- 'domain': self.site.domain,
- 'url': self.get_absolute_url()
- }
- return _('Posted by %(user)s at %(date)s\n\n%(comment)s\n\nhttp://%(domain)s%(url)s') % d
-
-class CommentFlag(models.Model):
- """
- Records a flag on a comment. This is intentionally flexible; right now, a
- flag could be:
-
- * A "removal suggestion" -- where a user suggests a comment for (potential) removal.
-
- * A "moderator deletion" -- used when a moderator deletes a comment.
-
- You can (ab)use this model to add other flags, if needed. However, by
- design users are only allowed to flag a comment with a given flag once;
- if you want rating look elsewhere.
- """
- user = models.ForeignKey(User, verbose_name=_('user'), related_name="comment_flags")
- comment = models.ForeignKey(Comment, verbose_name=_('comment'), related_name="flags")
- flag = models.CharField(_('flag'), max_length=30, db_index=True)
- flag_date = models.DateTimeField(_('date'), default=None)
-
- # Constants for flag types
- SUGGEST_REMOVAL = "removal suggestion"
- MODERATOR_DELETION = "moderator deletion"
- MODERATOR_APPROVAL = "moderator approval"
-
- class Meta:
- db_table = 'django_comment_flags'
- unique_together = [('user', 'comment', 'flag')]
- verbose_name = _('comment flag')
- verbose_name_plural = _('comment flags')
-
- def __unicode__(self):
- return "%s flag of comment ID %s by %s" % \
- (self.flag, self.comment_id, self.user.username)
-
- def save(self, *args, **kwargs):
- if self.flag_date is None:
- self.flag_date = datetime.datetime.now()
- super(CommentFlag, self).save(*args, **kwargs)
diff --git a/parts/django/django/contrib/comments/moderation.py b/parts/django/django/contrib/comments/moderation.py
deleted file mode 100644
index 7f429c5..0000000
--- a/parts/django/django/contrib/comments/moderation.py
+++ /dev/null
@@ -1,353 +0,0 @@
-"""
-A generic comment-moderation system which allows configuration of
-moderation options on a per-model basis.
-
-To use, do two things:
-
-1. Create or import a subclass of ``CommentModerator`` defining the
- options you want.
-
-2. Import ``moderator`` from this module and register one or more
- models, passing the models and the ``CommentModerator`` options
- class you want to use.
-
-
-Example
--------
-
-First, we define a simple model class which might represent entries in
-a Weblog::
-
- from django.db import models
-
- class Entry(models.Model):
- title = models.CharField(maxlength=250)
- body = models.TextField()
- pub_date = models.DateField()
- enable_comments = models.BooleanField()
-
-Then we create a ``CommentModerator`` subclass specifying some
-moderation options::
-
- from django.contrib.comments.moderation import CommentModerator, moderator
-
- class EntryModerator(CommentModerator):
- email_notification = True
- enable_field = 'enable_comments'
-
-And finally register it for moderation::
-
- moderator.register(Entry, EntryModerator)
-
-This sample class would apply two moderation steps to each new
-comment submitted on an Entry:
-
-* If the entry's ``enable_comments`` field is set to ``False``, the
- comment will be rejected (immediately deleted).
-
-* If the comment is successfully posted, an email notification of the
- comment will be sent to site staff.
-
-For a full list of built-in moderation options and other
-configurability, see the documentation for the ``CommentModerator``
-class.
-
-"""
-
-import datetime
-
-from django.conf import settings
-from django.core.mail import send_mail
-from django.contrib.comments import signals
-from django.db.models.base import ModelBase
-from django.template import Context, loader
-from django.contrib import comments
-from django.contrib.sites.models import Site
-
-class AlreadyModerated(Exception):
- """
- Raised when a model which is already registered for moderation is
- attempting to be registered again.
-
- """
- pass
-
-class NotModerated(Exception):
- """
- Raised when a model which is not registered for moderation is
- attempting to be unregistered.
-
- """
- pass
-
-class CommentModerator(object):
- """
- Encapsulates comment-moderation options for a given model.
-
- This class is not designed to be used directly, since it doesn't
- enable any of the available moderation options. Instead, subclass
- it and override attributes to enable different options::
-
- ``auto_close_field``
- If this is set to the name of a ``DateField`` or
- ``DateTimeField`` on the model for which comments are
- being moderated, new comments for objects of that model
- will be disallowed (immediately deleted) when a certain
- number of days have passed after the date specified in
- that field. Must be used in conjunction with
- ``close_after``, which specifies the number of days past
- which comments should be disallowed. Default value is
- ``None``.
-
- ``auto_moderate_field``
- Like ``auto_close_field``, but instead of outright
- deleting new comments when the requisite number of days
- have elapsed, it will simply set the ``is_public`` field
- of new comments to ``False`` before saving them. Must be
- used in conjunction with ``moderate_after``, which
- specifies the number of days past which comments should be
- moderated. Default value is ``None``.
-
- ``close_after``
- If ``auto_close_field`` is used, this must specify the
- number of days past the value of the field specified by
- ``auto_close_field`` after which new comments for an
- object should be disallowed. Default value is ``None``.
-
- ``email_notification``
- If ``True``, any new comment on an object of this model
- which survives moderation will generate an email to site
- staff. Default value is ``False``.
-
- ``enable_field``
- If this is set to the name of a ``BooleanField`` on the
- model for which comments are being moderated, new comments
- on objects of that model will be disallowed (immediately
- deleted) whenever the value of that field is ``False`` on
- the object the comment would be attached to. Default value
- is ``None``.
-
- ``moderate_after``
- If ``auto_moderate_field`` is used, this must specify the number
- of days past the value of the field specified by
- ``auto_moderate_field`` after which new comments for an
- object should be marked non-public. Default value is
- ``None``.
-
- Most common moderation needs can be covered by changing these
- attributes, but further customization can be obtained by
- subclassing and overriding the following methods. Each method will
- be called with three arguments: ``comment``, which is the comment
- being submitted, ``content_object``, which is the object the
- comment will be attached to, and ``request``, which is the
- ``HttpRequest`` in which the comment is being submitted::
-
- ``allow``
- Should return ``True`` if the comment should be allowed to
- post on the content object, and ``False`` otherwise (in
- which case the comment will be immediately deleted).
-
- ``email``
- If email notification of the new comment should be sent to
- site staff or moderators, this method is responsible for
- sending the email.
-
- ``moderate``
- Should return ``True`` if the comment should be moderated
- (in which case its ``is_public`` field will be set to
- ``False`` before saving), and ``False`` otherwise (in
- which case the ``is_public`` field will not be changed).
-
- Subclasses which want to introspect the model for which comments
- are being moderated can do so through the attribute ``_model``,
- which will be the model class.
-
- """
- auto_close_field = None
- auto_moderate_field = None
- close_after = None
- email_notification = False
- enable_field = None
- moderate_after = None
-
- def __init__(self, model):
- self._model = model
-
- def _get_delta(self, now, then):
- """
- Internal helper which will return a ``datetime.timedelta``
- representing the time between ``now`` and ``then``. Assumes
- ``now`` is a ``datetime.date`` or ``datetime.datetime`` later
- than ``then``.
-
- If ``now`` and ``then`` are not of the same type due to one of
- them being a ``datetime.date`` and the other being a
- ``datetime.datetime``, both will be coerced to
- ``datetime.date`` before calculating the delta.
-
- """
- if now.__class__ is not then.__class__:
- now = datetime.date(now.year, now.month, now.day)
- then = datetime.date(then.year, then.month, then.day)
- if now < then:
- raise ValueError("Cannot determine moderation rules because date field is set to a value in the future")
- return now - then
-
- def allow(self, comment, content_object, request):
- """
- Determine whether a given comment is allowed to be posted on
- a given object.
-
- Return ``True`` if the comment should be allowed, ``False
- otherwise.
-
- """
- if self.enable_field:
- if not getattr(content_object, self.enable_field):
- return False
- if self.auto_close_field and self.close_after:
- if self._get_delta(datetime.datetime.now(), getattr(content_object, self.auto_close_field)).days >= self.close_after:
- return False
- return True
-
- def moderate(self, comment, content_object, request):
- """
- Determine whether a given comment on a given object should be
- allowed to show up immediately, or should be marked non-public
- and await approval.
-
- Return ``True`` if the comment should be moderated (marked
- non-public), ``False`` otherwise.
-
- """
- if self.auto_moderate_field and self.moderate_after:
- if self._get_delta(datetime.datetime.now(), getattr(content_object, self.auto_moderate_field)).days >= self.moderate_after:
- return True
- return False
-
- def email(self, comment, content_object, request):
- """
- Send email notification of a new comment to site staff when email
- notifications have been requested.
-
- """
- if not self.email_notification:
- return
- recipient_list = [manager_tuple[1] for manager_tuple in settings.MANAGERS]
- t = loader.get_template('comments/comment_notification_email.txt')
- c = Context({ 'comment': comment,
- 'content_object': content_object })
- subject = '[%s] New comment posted on "%s"' % (Site.objects.get_current().name,
- content_object)
- message = t.render(c)
- send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, recipient_list, fail_silently=True)
-
-class Moderator(object):
- """
- Handles moderation of a set of models.
-
- An instance of this class will maintain a list of one or more
- models registered for comment moderation, and their associated
- moderation classes, and apply moderation to all incoming comments.
-
- To register a model, obtain an instance of ``Moderator`` (this
- module exports one as ``moderator``), and call its ``register``
- method, passing the model class and a moderation class (which
- should be a subclass of ``CommentModerator``). Note that both of
- these should be the actual classes, not instances of the classes.
-
- To cease moderation for a model, call the ``unregister`` method,
- passing the model class.
-
- For convenience, both ``register`` and ``unregister`` can also
- accept a list of model classes in place of a single model; this
- allows easier registration of multiple models with the same
- ``CommentModerator`` class.
-
- The actual moderation is applied in two phases: one prior to
- saving a new comment, and the other immediately after saving. The
- pre-save moderation may mark a comment as non-public or mark it to
- be removed; the post-save moderation may delete a comment which
- was disallowed (there is currently no way to prevent the comment
- being saved once before removal) and, if the comment is still
- around, will send any notification emails the comment generated.
-
- """
- def __init__(self):
- self._registry = {}
- self.connect()
-
- def connect(self):
- """
- Hook up the moderation methods to pre- and post-save signals
- from the comment models.
-
- """
- signals.comment_will_be_posted.connect(self.pre_save_moderation, sender=comments.get_model())
- signals.comment_was_posted.connect(self.post_save_moderation, sender=comments.get_model())
-
- def register(self, model_or_iterable, moderation_class):
- """
- Register a model or a list of models for comment moderation,
- using a particular moderation class.
-
- Raise ``AlreadyModerated`` if any of the models are already
- registered.
-
- """
- if isinstance(model_or_iterable, ModelBase):
- model_or_iterable = [model_or_iterable]
- for model in model_or_iterable:
- if model in self._registry:
- raise AlreadyModerated("The model '%s' is already being moderated" % model._meta.module_name)
- self._registry[model] = moderation_class(model)
-
- def unregister(self, model_or_iterable):
- """
- Remove a model or a list of models from the list of models
- whose comments will be moderated.
-
- Raise ``NotModerated`` if any of the models are not currently
- registered for moderation.
-
- """
- if isinstance(model_or_iterable, ModelBase):
- model_or_iterable = [model_or_iterable]
- for model in model_or_iterable:
- if model not in self._registry:
- raise NotModerated("The model '%s' is not currently being moderated" % model._meta.module_name)
- del self._registry[model]
-
- def pre_save_moderation(self, sender, comment, request, **kwargs):
- """
- Apply any necessary pre-save moderation steps to new
- comments.
-
- """
- model = comment.content_type.model_class()
- if model not in self._registry:
- return
- content_object = comment.content_object
- moderation_class = self._registry[model]
-
- # Comment will be disallowed outright (HTTP 403 response)
- if not moderation_class.allow(comment, content_object, request):
- return False
-
- if moderation_class.moderate(comment, content_object, request):
- comment.is_public = False
-
- def post_save_moderation(self, sender, comment, request, **kwargs):
- """
- Apply any necessary post-save moderation steps to new
- comments.
-
- """
- model = comment.content_type.model_class()
- if model not in self._registry:
- return
- self._registry[model].email(comment, comment.content_object, request)
-
-# Import this instance in your own code to use in registering
-# your models for moderation.
-moderator = Moderator()
diff --git a/parts/django/django/contrib/comments/signals.py b/parts/django/django/contrib/comments/signals.py
deleted file mode 100644
index fe1083b..0000000
--- a/parts/django/django/contrib/comments/signals.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""
-Signals relating to comments.
-"""
-from django.dispatch import Signal
-
-# Sent just before a comment will be posted (after it's been approved and
-# moderated; this can be used to modify the comment (in place) with posting
-# details or other such actions. If any receiver returns False the comment will be
-# discarded and a 403 (not allowed) response. This signal is sent at more or less
-# the same time (just before, actually) as the Comment object's pre-save signal,
-# except that the HTTP request is sent along with this signal.
-comment_will_be_posted = Signal(providing_args=["comment", "request"])
-
-# Sent just after a comment was posted. See above for how this differs
-# from the Comment object's post-save signal.
-comment_was_posted = Signal(providing_args=["comment", "request"])
-
-# Sent after a comment was "flagged" in some way. Check the flag to see if this
-# was a user requesting removal of a comment, a moderator approving/removing a
-# comment, or some other custom user flag.
-comment_was_flagged = Signal(providing_args=["comment", "flag", "created", "request"])
diff --git a/parts/django/django/contrib/comments/templates/comments/400-debug.html b/parts/django/django/contrib/comments/templates/comments/400-debug.html
deleted file mode 100644
index 29593b5..0000000
--- a/parts/django/django/contrib/comments/templates/comments/400-debug.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <title>Comment post not allowed (400)</title>
- <meta name="robots" content="NONE,NOARCHIVE" />
- <style type="text/css">
- html * { padding:0; margin:0; }
- body * { padding:10px 20px; }
- body * * { padding:0; }
- body { font:small sans-serif; background:#eee; }
- body>div { border-bottom:1px solid #ddd; }
- h1 { font-weight:normal; margin-bottom:.4em; }
- h1 span { font-size:60%; color:#666; font-weight:normal; }
- table { border:none; border-collapse: collapse; width:100%; }
- td, th { vertical-align:top; padding:2px 3px; }
- th { width:12em; text-align:right; color:#666; padding-right:.5em; }
- #info { background:#f6f6f6; }
- #info ol { margin: 0.5em 4em; }
- #info ol li { font-family: monospace; }
- #summary { background: #ffc; }
- #explanation { background:#eee; border-bottom: 0px none; }
- </style>
-</head>
-<body>
- <div id="summary">
- <h1>Comment post not allowed <span>(400)</span></h1>
- <table class="meta">
- <tr>
- <th>Why:</th>
- <td>{{ why }}</td>
- </tr>
- </table>
- </div>
- <div id="info">
- <p>
- The comment you tried to post to this view wasn't saved because something
- tampered with the security information in the comment form. The message
- above should explain the problem, or you can check the <a
- href="http://docs.djangoproject.com/en/dev/ref/contrib/comments/">comment
- documentation</a> for more help.
- </p>
- </div>
-
- <div id="explanation">
- <p>
- You're seeing this error because you have <code>DEBUG = True</code> in
- your Django settings file. Change that to <code>False</code>, and Django
- will display a standard 400 error page.
- </p>
- </div>
-</body>
-</html>
diff --git a/parts/django/django/contrib/comments/templates/comments/approve.html b/parts/django/django/contrib/comments/templates/comments/approve.html
deleted file mode 100644
index 78d15db..0000000
--- a/parts/django/django/contrib/comments/templates/comments/approve.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Approve a comment" %}{% endblock %}
-
-{% block content %}
- <h1>{% trans "Really make this comment public?" %}</h1>
- <blockquote>{{ comment|linebreaks }}</blockquote>
- <form action="." method="post">{% csrf_token %}
- {% if next %}<div><input type="hidden" name="next" value="{{ next }}" id="next" /></div>{% endif %}
- <p class="submit">
- <input type="submit" name="submit" value="{% trans "Approve" %}" /> or <a href="{{ comment.get_absolute_url }}">cancel</a>
- </p>
- </form>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templates/comments/approved.html b/parts/django/django/contrib/comments/templates/comments/approved.html
deleted file mode 100644
index d4ba245..0000000
--- a/parts/django/django/contrib/comments/templates/comments/approved.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Thanks for approving" %}.{% endblock %}
-
-{% block content %}
- <h1>{% trans "Thanks for taking the time to improve the quality of discussion on our site" %}.</h1>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templates/comments/base.html b/parts/django/django/contrib/comments/templates/comments/base.html
deleted file mode 100644
index 0f58e3e..0000000
--- a/parts/django/django/contrib/comments/templates/comments/base.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>{% block title %}{% endblock %}</title>
-</head>
-<body>
- {% block content %}{% endblock %}
-</body>
-</html>
diff --git a/parts/django/django/contrib/comments/templates/comments/delete.html b/parts/django/django/contrib/comments/templates/comments/delete.html
deleted file mode 100644
index 50c9a4d..0000000
--- a/parts/django/django/contrib/comments/templates/comments/delete.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Remove a comment" %}{% endblock %}
-
-{% block content %}
-<h1>{% trans "Really remove this comment?" %}</h1>
- <blockquote>{{ comment|linebreaks }}</blockquote>
- <form action="." method="post">{% csrf_token %}
- {% if next %}<div><input type="hidden" name="next" value="{{ next }}" id="next" /></div>{% endif %}
- <p class="submit">
- <input type="submit" name="submit" value="{% trans "Remove" %}" /> or <a href="{{ comment.get_absolute_url }}">cancel</a>
- </p>
- </form>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templates/comments/deleted.html b/parts/django/django/contrib/comments/templates/comments/deleted.html
deleted file mode 100644
index e608481..0000000
--- a/parts/django/django/contrib/comments/templates/comments/deleted.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Thanks for removing" %}.{% endblock %}
-
-{% block content %}
- <h1>{% trans "Thanks for taking the time to improve the quality of discussion on our site" %}.</h1>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templates/comments/flag.html b/parts/django/django/contrib/comments/templates/comments/flag.html
deleted file mode 100644
index ca7c77f..0000000
--- a/parts/django/django/contrib/comments/templates/comments/flag.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Flag this comment" %}{% endblock %}
-
-{% block content %}
-<h1>{% trans "Really flag this comment?" %}</h1>
- <blockquote>{{ comment|linebreaks }}</blockquote>
- <form action="." method="post">{% csrf_token %}
- {% if next %}<div><input type="hidden" name="next" value="{{ next }}" id="next" /></div>{% endif %}
- <p class="submit">
- <input type="submit" name="submit" value="{% trans "Flag" %}" /> or <a href="{{ comment.get_absolute_url }}">cancel</a>
- </p>
- </form>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templates/comments/flagged.html b/parts/django/django/contrib/comments/templates/comments/flagged.html
deleted file mode 100644
index e558019..0000000
--- a/parts/django/django/contrib/comments/templates/comments/flagged.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Thanks for flagging" %}.{% endblock %}
-
-{% block content %}
- <h1>{% trans "Thanks for taking the time to improve the quality of discussion on our site" %}.</h1>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templates/comments/form.html b/parts/django/django/contrib/comments/templates/comments/form.html
deleted file mode 100644
index 2a9ad55..0000000
--- a/parts/django/django/contrib/comments/templates/comments/form.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{% load comments i18n %}
-<form action="{% comment_form_target %}" method="post">{% csrf_token %}
- {% if next %}<div><input type="hidden" name="next" value="{{ next }}" /></div>{% endif %}
- {% for field in form %}
- {% if field.is_hidden %}
- <div>{{ field }}</div>
- {% else %}
- {% if field.errors %}{{ field.errors }}{% endif %}
- <p
- {% if field.errors %} class="error"{% endif %}
- {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}>
- {{ field.label_tag }} {{ field }}
- </p>
- {% endif %}
- {% endfor %}
- <p class="submit">
- <input type="submit" name="post" class="submit-post" value="{% trans "Post" %}" />
- <input type="submit" name="preview" class="submit-preview" value="{% trans "Preview" %}" />
- </p>
-</form>
diff --git a/parts/django/django/contrib/comments/templates/comments/list.html b/parts/django/django/contrib/comments/templates/comments/list.html
deleted file mode 100644
index 3d4ec1e..0000000
--- a/parts/django/django/contrib/comments/templates/comments/list.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<dl id="comments">
- {% for comment in comment_list %}
- <dt id="c{{ comment.id }}">
- {{ comment.submit_date }} - {{ comment.name }}
- </dt>
- <dd>
- <p>{{ comment.comment }}</p>
- </dd>
- {% endfor %}
-</dl>
diff --git a/parts/django/django/contrib/comments/templates/comments/posted.html b/parts/django/django/contrib/comments/templates/comments/posted.html
deleted file mode 100644
index 76f7f6d..0000000
--- a/parts/django/django/contrib/comments/templates/comments/posted.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Thanks for commenting" %}.{% endblock %}
-
-{% block content %}
- <h1>{% trans "Thank you for your comment" %}.</h1>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templates/comments/preview.html b/parts/django/django/contrib/comments/templates/comments/preview.html
deleted file mode 100644
index b1607b9..0000000
--- a/parts/django/django/contrib/comments/templates/comments/preview.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% extends "comments/base.html" %}
-{% load i18n %}
-
-{% block title %}{% trans "Preview your comment" %}{% endblock %}
-
-{% block content %}
- {% load comments %}
- <form action="{% comment_form_target %}" method="post">{% csrf_token %}
- {% if next %}<div><input type="hidden" name="next" value="{{ next }}" /></div>{% endif %}
- {% if form.errors %}
- <h1>{% blocktrans count form.errors|length as counter %}Please correct the error below{% plural %}Please correct the errors below{% endblocktrans %}</h1>
- {% else %}
- <h1>{% trans "Preview your comment" %}</h1>
- <blockquote>{{ comment|linebreaks }}</blockquote>
- <p>
- {% trans "and" %} <input type="submit" name="submit" class="submit-post" value="{% trans "Post your comment" %}" id="submit" /> {% trans "or make changes" %}:
- </p>
- {% endif %}
- {% for field in form %}
- {% if field.is_hidden %}
- <div>{{ field }}</div>
- {% else %}
- {% if field.errors %}{{ field.errors }}{% endif %}
- <p
- {% if field.errors %} class="error"{% endif %}
- {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}>
- {{ field.label_tag }} {{ field }}
- </p>
- {% endif %}
- {% endfor %}
- <p class="submit">
- <input type="submit" name="submit" class="submit-post" value="{% trans "Post" %}" />
- <input type="submit" name="preview" class="submit-preview" value="{% trans "Preview" %}" />
- </p>
- </form>
-{% endblock %}
diff --git a/parts/django/django/contrib/comments/templatetags/__init__.py b/parts/django/django/contrib/comments/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/comments/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/comments/templatetags/comments.py b/parts/django/django/contrib/comments/templatetags/comments.py
deleted file mode 100644
index 42691c6..0000000
--- a/parts/django/django/contrib/comments/templatetags/comments.py
+++ /dev/null
@@ -1,333 +0,0 @@
-from django import template
-from django.template.loader import render_to_string
-from django.conf import settings
-from django.contrib.contenttypes.models import ContentType
-from django.contrib import comments
-from django.utils.encoding import smart_unicode
-
-register = template.Library()
-
-class BaseCommentNode(template.Node):
- """
- Base helper class (abstract) for handling the get_comment_* template tags.
- Looks a bit strange, but the subclasses below should make this a bit more
- obvious.
- """
-
- #@classmethod
- def handle_token(cls, parser, token):
- """Class method to parse get_comment_list/count/form and return a Node."""
- tokens = token.contents.split()
- if tokens[1] != 'for':
- raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])
-
- # {% get_whatever for obj as varname %}
- if len(tokens) == 5:
- if tokens[3] != 'as':
- raise template.TemplateSyntaxError("Third argument in %r must be 'as'" % tokens[0])
- return cls(
- object_expr = parser.compile_filter(tokens[2]),
- as_varname = tokens[4],
- )
-
- # {% get_whatever for app.model pk as varname %}
- elif len(tokens) == 6:
- if tokens[4] != 'as':
- raise template.TemplateSyntaxError("Fourth argument in %r must be 'as'" % tokens[0])
- return cls(
- ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
- object_pk_expr = parser.compile_filter(tokens[3]),
- as_varname = tokens[5]
- )
-
- else:
- raise template.TemplateSyntaxError("%r tag requires 4 or 5 arguments" % tokens[0])
-
- handle_token = classmethod(handle_token)
-
- #@staticmethod
- def lookup_content_type(token, tagname):
- try:
- app, model = token.split('.')
- return ContentType.objects.get(app_label=app, model=model)
- except ValueError:
- raise template.TemplateSyntaxError("Third argument in %r must be in the format 'app.model'" % tagname)
- except ContentType.DoesNotExist:
- raise template.TemplateSyntaxError("%r tag has non-existant content-type: '%s.%s'" % (tagname, app, model))
- lookup_content_type = staticmethod(lookup_content_type)
-
- def __init__(self, ctype=None, object_pk_expr=None, object_expr=None, as_varname=None, comment=None):
- if ctype is None and object_expr is None:
- raise template.TemplateSyntaxError("Comment nodes must be given either a literal object or a ctype and object pk.")
- self.comment_model = comments.get_model()
- self.as_varname = as_varname
- self.ctype = ctype
- self.object_pk_expr = object_pk_expr
- self.object_expr = object_expr
- self.comment = comment
-
- def render(self, context):
- qs = self.get_query_set(context)
- context[self.as_varname] = self.get_context_value_from_queryset(context, qs)
- return ''
-
- def get_query_set(self, context):
- ctype, object_pk = self.get_target_ctype_pk(context)
- if not object_pk:
- return self.comment_model.objects.none()
-
- qs = self.comment_model.objects.filter(
- content_type = ctype,
- object_pk = smart_unicode(object_pk),
- site__pk = settings.SITE_ID,
- )
-
- # The is_public and is_removed fields are implementation details of the
- # built-in comment model's spam filtering system, so they might not
- # be present on a custom comment model subclass. If they exist, we
- # should filter on them.
- field_names = [f.name for f in self.comment_model._meta.fields]
- if 'is_public' in field_names:
- qs = qs.filter(is_public=True)
- if getattr(settings, 'COMMENTS_HIDE_REMOVED', True) and 'is_removed' in field_names:
- qs = qs.filter(is_removed=False)
-
- return qs
-
- def get_target_ctype_pk(self, context):
- if self.object_expr:
- try:
- obj = self.object_expr.resolve(context)
- except template.VariableDoesNotExist:
- return None, None
- return ContentType.objects.get_for_model(obj), obj.pk
- else:
- return self.ctype, self.object_pk_expr.resolve(context, ignore_failures=True)
-
- def get_context_value_from_queryset(self, context, qs):
- """Subclasses should override this."""
- raise NotImplementedError
-
-class CommentListNode(BaseCommentNode):
- """Insert a list of comments into the context."""
- def get_context_value_from_queryset(self, context, qs):
- return list(qs)
-
-class CommentCountNode(BaseCommentNode):
- """Insert a count of comments into the context."""
- def get_context_value_from_queryset(self, context, qs):
- return qs.count()
-
-class CommentFormNode(BaseCommentNode):
- """Insert a form for the comment model into the context."""
-
- def get_form(self, context):
- ctype, object_pk = self.get_target_ctype_pk(context)
- if object_pk:
- return comments.get_form()(ctype.get_object_for_this_type(pk=object_pk))
- else:
- return None
-
- def render(self, context):
- context[self.as_varname] = self.get_form(context)
- return ''
-
-class RenderCommentFormNode(CommentFormNode):
- """Render the comment form directly"""
-
- #@classmethod
- def handle_token(cls, parser, token):
- """Class method to parse render_comment_form and return a Node."""
- tokens = token.contents.split()
- if tokens[1] != 'for':
- raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])
-
- # {% render_comment_form for obj %}
- if len(tokens) == 3:
- return cls(object_expr=parser.compile_filter(tokens[2]))
-
- # {% render_comment_form for app.models pk %}
- elif len(tokens) == 4:
- return cls(
- ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
- object_pk_expr = parser.compile_filter(tokens[3])
- )
- handle_token = classmethod(handle_token)
-
- def render(self, context):
- ctype, object_pk = self.get_target_ctype_pk(context)
- if object_pk:
- template_search_list = [
- "comments/%s/%s/form.html" % (ctype.app_label, ctype.model),
- "comments/%s/form.html" % ctype.app_label,
- "comments/form.html"
- ]
- context.push()
- formstr = render_to_string(template_search_list, {"form" : self.get_form(context)}, context)
- context.pop()
- return formstr
- else:
- return ''
-
-class RenderCommentListNode(CommentListNode):
- """Render the comment list directly"""
-
- #@classmethod
- def handle_token(cls, parser, token):
- """Class method to parse render_comment_list and return a Node."""
- tokens = token.contents.split()
- if tokens[1] != 'for':
- raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])
-
- # {% render_comment_list for obj %}
- if len(tokens) == 3:
- return cls(object_expr=parser.compile_filter(tokens[2]))
-
- # {% render_comment_list for app.models pk %}
- elif len(tokens) == 4:
- return cls(
- ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
- object_pk_expr = parser.compile_filter(tokens[3])
- )
- handle_token = classmethod(handle_token)
-
- def render(self, context):
- ctype, object_pk = self.get_target_ctype_pk(context)
- if object_pk:
- template_search_list = [
- "comments/%s/%s/list.html" % (ctype.app_label, ctype.model),
- "comments/%s/list.html" % ctype.app_label,
- "comments/list.html"
- ]
- qs = self.get_query_set(context)
- context.push()
- liststr = render_to_string(template_search_list, {
- "comment_list" : self.get_context_value_from_queryset(context, qs)
- }, context)
- context.pop()
- return liststr
- else:
- return ''
-
-# We could just register each classmethod directly, but then we'd lose out on
-# the automagic docstrings-into-admin-docs tricks. So each node gets a cute
-# wrapper function that just exists to hold the docstring.
-
-#@register.tag
-def get_comment_count(parser, token):
- """
- Gets the comment count for the given params and populates the template
- context with a variable containing that value, whose name is defined by the
- 'as' clause.
-
- Syntax::
-
- {% get_comment_count for [object] as [varname] %}
- {% get_comment_count for [app].[model] [object_id] as [varname] %}
-
- Example usage::
-
- {% get_comment_count for event as comment_count %}
- {% get_comment_count for calendar.event event.id as comment_count %}
- {% get_comment_count for calendar.event 17 as comment_count %}
-
- """
- return CommentCountNode.handle_token(parser, token)
-
-#@register.tag
-def get_comment_list(parser, token):
- """
- Gets the list of comments for the given params and populates the template
- context with a variable containing that value, whose name is defined by the
- 'as' clause.
-
- Syntax::
-
- {% get_comment_list for [object] as [varname] %}
- {% get_comment_list for [app].[model] [object_id] as [varname] %}
-
- Example usage::
-
- {% get_comment_list for event as comment_list %}
- {% for comment in comment_list %}
- ...
- {% endfor %}
-
- """
- return CommentListNode.handle_token(parser, token)
-
-#@register.tag
-def render_comment_list(parser, token):
- """
- Render the comment list (as returned by ``{% get_comment_list %}``)
- through the ``comments/list.html`` template
-
- Syntax::
-
- {% render_comment_list for [object] %}
- {% render_comment_list for [app].[model] [object_id] %}
-
- Example usage::
-
- {% render_comment_list for event %}
-
- """
- return RenderCommentListNode.handle_token(parser, token)
-
-#@register.tag
-def get_comment_form(parser, token):
- """
- Get a (new) form object to post a new comment.
-
- Syntax::
-
- {% get_comment_form for [object] as [varname] %}
- {% get_comment_form for [app].[model] [object_id] as [varname] %}
- """
- return CommentFormNode.handle_token(parser, token)
-
-#@register.tag
-def render_comment_form(parser, token):
- """
- Render the comment form (as returned by ``{% render_comment_form %}``) through
- the ``comments/form.html`` template.
-
- Syntax::
-
- {% render_comment_form for [object] %}
- {% render_comment_form for [app].[model] [object_id] %}
- """
- return RenderCommentFormNode.handle_token(parser, token)
-
-#@register.simple_tag
-def comment_form_target():
- """
- Get the target URL for the comment form.
-
- Example::
-
- <form action="{% comment_form_target %}" method="post">
- """
- return comments.get_form_target()
-
-#@register.simple_tag
-def get_comment_permalink(comment, anchor_pattern=None):
- """
- Get the permalink for a comment, optionally specifying the format of the
- named anchor to be appended to the end of the URL.
-
- Example::
- {{ get_comment_permalink comment "#c%(id)s-by-%(user_name)s" }}
- """
-
- if anchor_pattern:
- return comment.get_absolute_url(anchor_pattern)
- return comment.get_absolute_url()
-
-register.tag(get_comment_count)
-register.tag(get_comment_list)
-register.tag(get_comment_form)
-register.tag(render_comment_form)
-register.simple_tag(comment_form_target)
-register.simple_tag(get_comment_permalink)
-register.tag(render_comment_list)
diff --git a/parts/django/django/contrib/comments/urls.py b/parts/django/django/contrib/comments/urls.py
deleted file mode 100644
index d903779..0000000
--- a/parts/django/django/contrib/comments/urls.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('django.contrib.comments.views',
- url(r'^post/$', 'comments.post_comment', name='comments-post-comment'),
- url(r'^posted/$', 'comments.comment_done', name='comments-comment-done'),
- url(r'^flag/(\d+)/$', 'moderation.flag', name='comments-flag'),
- url(r'^flagged/$', 'moderation.flag_done', name='comments-flag-done'),
- url(r'^delete/(\d+)/$', 'moderation.delete', name='comments-delete'),
- url(r'^deleted/$', 'moderation.delete_done', name='comments-delete-done'),
- url(r'^approve/(\d+)/$', 'moderation.approve', name='comments-approve'),
- url(r'^approved/$', 'moderation.approve_done', name='comments-approve-done'),
-)
-
-urlpatterns += patterns('',
- url(r'^cr/(\d+)/(.+)/$', 'django.contrib.contenttypes.views.shortcut', name='comments-url-redirect'),
-)
diff --git a/parts/django/django/contrib/comments/views/__init__.py b/parts/django/django/contrib/comments/views/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/comments/views/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/comments/views/comments.py b/parts/django/django/contrib/comments/views/comments.py
deleted file mode 100644
index c2b553f..0000000
--- a/parts/django/django/contrib/comments/views/comments.py
+++ /dev/null
@@ -1,136 +0,0 @@
-from django import http
-from django.conf import settings
-from utils import next_redirect, confirmation_view
-from django.core.exceptions import ObjectDoesNotExist, ValidationError
-from django.db import models
-from django.shortcuts import render_to_response
-from django.template import RequestContext
-from django.template.loader import render_to_string
-from django.utils.html import escape
-from django.views.decorators.http import require_POST
-from django.contrib import comments
-from django.contrib.comments import signals
-from django.views.decorators.csrf import csrf_protect
-
-class CommentPostBadRequest(http.HttpResponseBadRequest):
- """
- Response returned when a comment post is invalid. If ``DEBUG`` is on a
- nice-ish error message will be displayed (for debugging purposes), but in
- production mode a simple opaque 400 page will be displayed.
- """
- def __init__(self, why):
- super(CommentPostBadRequest, self).__init__()
- if settings.DEBUG:
- self.content = render_to_string("comments/400-debug.html", {"why": why})
-
-@csrf_protect
-@require_POST
-def post_comment(request, next=None, using=None):
- """
- Post a comment.
-
- HTTP POST is required. If ``POST['submit'] == "preview"`` or if there are
- errors a preview template, ``comments/preview.html``, will be rendered.
- """
- # Fill out some initial data fields from an authenticated user, if present
- data = request.POST.copy()
- if request.user.is_authenticated():
- if not data.get('name', ''):
- data["name"] = request.user.get_full_name() or request.user.username
- if not data.get('email', ''):
- data["email"] = request.user.email
-
- # Check to see if the POST data overrides the view's next argument.
- next = data.get("next", next)
-
- # Look up the object we're trying to comment about
- ctype = data.get("content_type")
- object_pk = data.get("object_pk")
- if ctype is None or object_pk is None:
- return CommentPostBadRequest("Missing content_type or object_pk field.")
- try:
- model = models.get_model(*ctype.split(".", 1))
- target = model._default_manager.using(using).get(pk=object_pk)
- except TypeError:
- return CommentPostBadRequest(
- "Invalid content_type value: %r" % escape(ctype))
- except AttributeError:
- return CommentPostBadRequest(
- "The given content-type %r does not resolve to a valid model." % \
- escape(ctype))
- except ObjectDoesNotExist:
- return CommentPostBadRequest(
- "No object matching content-type %r and object PK %r exists." % \
- (escape(ctype), escape(object_pk)))
- except (ValueError, ValidationError), e:
- return CommentPostBadRequest(
- "Attempting go get content-type %r and object PK %r exists raised %s" % \
- (escape(ctype), escape(object_pk), e.__class__.__name__))
-
- # Do we want to preview the comment?
- preview = "preview" in data
-
- # Construct the comment form
- form = comments.get_form()(target, data=data)
-
- # Check security information
- if form.security_errors():
- return CommentPostBadRequest(
- "The comment form failed security verification: %s" % \
- escape(str(form.security_errors())))
-
- # If there are errors or if we requested a preview show the comment
- if form.errors or preview:
- template_list = [
- # These first two exist for purely historical reasons.
- # Django v1.0 and v1.1 allowed the underscore format for
- # preview templates, so we have to preserve that format.
- "comments/%s_%s_preview.html" % (model._meta.app_label, model._meta.module_name),
- "comments/%s_preview.html" % model._meta.app_label,
- # Now the usual directory based template heirarchy.
- "comments/%s/%s/preview.html" % (model._meta.app_label, model._meta.module_name),
- "comments/%s/preview.html" % model._meta.app_label,
- "comments/preview.html",
- ]
- return render_to_response(
- template_list, {
- "comment" : form.data.get("comment", ""),
- "form" : form,
- "next": next,
- },
- RequestContext(request, {})
- )
-
- # Otherwise create the comment
- comment = form.get_comment_object()
- comment.ip_address = request.META.get("REMOTE_ADDR", None)
- if request.user.is_authenticated():
- comment.user = request.user
-
- # Signal that the comment is about to be saved
- responses = signals.comment_will_be_posted.send(
- sender = comment.__class__,
- comment = comment,
- request = request
- )
-
- for (receiver, response) in responses:
- if response == False:
- return CommentPostBadRequest(
- "comment_will_be_posted receiver %r killed the comment" % receiver.__name__)
-
- # Save the comment and signal that it was saved
- comment.save()
- signals.comment_was_posted.send(
- sender = comment.__class__,
- comment = comment,
- request = request
- )
-
- return next_redirect(data, next, comment_done, c=comment._get_pk_val())
-
-comment_done = confirmation_view(
- template = "comments/posted.html",
- doc = """Display a "comment was posted" success page."""
-)
-
diff --git a/parts/django/django/contrib/comments/views/moderation.py b/parts/django/django/contrib/comments/views/moderation.py
deleted file mode 100644
index 73304ba..0000000
--- a/parts/django/django/contrib/comments/views/moderation.py
+++ /dev/null
@@ -1,159 +0,0 @@
-from django import template
-from django.conf import settings
-from django.shortcuts import get_object_or_404, render_to_response
-from django.contrib.auth.decorators import login_required, permission_required
-from utils import next_redirect, confirmation_view
-from django.contrib import comments
-from django.contrib.comments import signals
-from django.views.decorators.csrf import csrf_protect
-
-@csrf_protect
-@login_required
-def flag(request, comment_id, next=None):
- """
- Flags a comment. Confirmation on GET, action on POST.
-
- Templates: `comments/flag.html`,
- Context:
- comment
- the flagged `comments.comment` object
- """
- comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
-
- # Flag on POST
- if request.method == 'POST':
- perform_flag(request, comment)
- return next_redirect(request.POST.copy(), next, flag_done, c=comment.pk)
-
- # Render a form on GET
- else:
- return render_to_response('comments/flag.html',
- {'comment': comment, "next": next},
- template.RequestContext(request)
- )
-
-@csrf_protect
-@permission_required("comments.can_moderate")
-def delete(request, comment_id, next=None):
- """
- Deletes a comment. Confirmation on GET, action on POST. Requires the "can
- moderate comments" permission.
-
- Templates: `comments/delete.html`,
- Context:
- comment
- the flagged `comments.comment` object
- """
- comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
-
- # Delete on POST
- if request.method == 'POST':
- # Flag the comment as deleted instead of actually deleting it.
- perform_delete(request, comment)
- return next_redirect(request.POST.copy(), next, delete_done, c=comment.pk)
-
- # Render a form on GET
- else:
- return render_to_response('comments/delete.html',
- {'comment': comment, "next": next},
- template.RequestContext(request)
- )
-
-@csrf_protect
-@permission_required("comments.can_moderate")
-def approve(request, comment_id, next=None):
- """
- Approve a comment (that is, mark it as public and non-removed). Confirmation
- on GET, action on POST. Requires the "can moderate comments" permission.
-
- Templates: `comments/approve.html`,
- Context:
- comment
- the `comments.comment` object for approval
- """
- comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID)
-
- # Delete on POST
- if request.method == 'POST':
- # Flag the comment as approved.
- perform_approve(request, comment)
- return next_redirect(request.POST.copy(), next, approve_done, c=comment.pk)
-
- # Render a form on GET
- else:
- return render_to_response('comments/approve.html',
- {'comment': comment, "next": next},
- template.RequestContext(request)
- )
-
-# The following functions actually perform the various flag/aprove/delete
-# actions. They've been broken out into seperate functions to that they
-# may be called from admin actions.
-
-def perform_flag(request, comment):
- """
- Actually perform the flagging of a comment from a request.
- """
- flag, created = comments.models.CommentFlag.objects.get_or_create(
- comment = comment,
- user = request.user,
- flag = comments.models.CommentFlag.SUGGEST_REMOVAL
- )
- signals.comment_was_flagged.send(
- sender = comment.__class__,
- comment = comment,
- flag = flag,
- created = created,
- request = request,
- )
-
-def perform_delete(request, comment):
- flag, created = comments.models.CommentFlag.objects.get_or_create(
- comment = comment,
- user = request.user,
- flag = comments.models.CommentFlag.MODERATOR_DELETION
- )
- comment.is_removed = True
- comment.save()
- signals.comment_was_flagged.send(
- sender = comment.__class__,
- comment = comment,
- flag = flag,
- created = created,
- request = request,
- )
-
-
-def perform_approve(request, comment):
- flag, created = comments.models.CommentFlag.objects.get_or_create(
- comment = comment,
- user = request.user,
- flag = comments.models.CommentFlag.MODERATOR_APPROVAL,
- )
-
- comment.is_removed = False
- comment.is_public = True
- comment.save()
-
- signals.comment_was_flagged.send(
- sender = comment.__class__,
- comment = comment,
- flag = flag,
- created = created,
- request = request,
- )
-
-# Confirmation views.
-
-flag_done = confirmation_view(
- template = "comments/flagged.html",
- doc = 'Displays a "comment was flagged" success page.'
-)
-delete_done = confirmation_view(
- template = "comments/deleted.html",
- doc = 'Displays a "comment was deleted" success page.'
-)
-approve_done = confirmation_view(
- template = "comments/approved.html",
- doc = 'Displays a "comment was approved" success page.'
-)
diff --git a/parts/django/django/contrib/comments/views/utils.py b/parts/django/django/contrib/comments/views/utils.py
deleted file mode 100644
index 8b729d2..0000000
--- a/parts/django/django/contrib/comments/views/utils.py
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-A few bits of helper functions for comment views.
-"""
-
-import urllib
-import textwrap
-from django.http import HttpResponseRedirect
-from django.core import urlresolvers
-from django.shortcuts import render_to_response
-from django.template import RequestContext
-from django.core.exceptions import ObjectDoesNotExist
-from django.contrib import comments
-
-def next_redirect(data, default, default_view, **get_kwargs):
- """
- Handle the "where should I go next?" part of comment views.
-
- The next value could be a kwarg to the function (``default``), or a
- ``?next=...`` GET arg, or the URL of a given view (``default_view``). See
- the view modules for examples.
-
- Returns an ``HttpResponseRedirect``.
- """
- next = data.get("next", default)
- if next is None:
- next = urlresolvers.reverse(default_view)
- if get_kwargs:
- joiner = ('?' in next) and '&' or '?'
- next += joiner + urllib.urlencode(get_kwargs)
- return HttpResponseRedirect(next)
-
-def confirmation_view(template, doc="Display a confirmation view."):
- """
- Confirmation view generator for the "comment was
- posted/flagged/deleted/approved" views.
- """
- def confirmed(request):
- comment = None
- if 'c' in request.GET:
- try:
- comment = comments.get_model().objects.get(pk=request.GET['c'])
- except (ObjectDoesNotExist, ValueError):
- pass
- return render_to_response(template,
- {'comment': comment},
- context_instance=RequestContext(request)
- )
-
- confirmed.__doc__ = textwrap.dedent("""\
- %s
-
- Templates: `%s``
- Context:
- comment
- The posted comment
- """ % (doc, template)
- )
- return confirmed
diff --git a/parts/django/django/contrib/contenttypes/__init__.py b/parts/django/django/contrib/contenttypes/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/contenttypes/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/contenttypes/generic.py b/parts/django/django/contrib/contenttypes/generic.py
deleted file mode 100644
index 40c3336..0000000
--- a/parts/django/django/contrib/contenttypes/generic.py
+++ /dev/null
@@ -1,409 +0,0 @@
-"""
-Classes allowing "generic" relations through ContentType and object-id fields.
-"""
-
-from django.core.exceptions import ObjectDoesNotExist
-from django.db import connection
-from django.db.models import signals
-from django.db import models, router
-from django.db.models.fields.related import RelatedField, Field, ManyToManyRel
-from django.db.models.loading import get_model
-from django.forms import ModelForm
-from django.forms.models import BaseModelFormSet, modelformset_factory, save_instance
-from django.contrib.admin.options import InlineModelAdmin, flatten_fieldsets
-from django.utils.encoding import smart_unicode
-
-class GenericForeignKey(object):
- """
- Provides a generic relation to any object through content-type/object-id
- fields.
- """
-
- def __init__(self, ct_field="content_type", fk_field="object_id"):
- self.ct_field = ct_field
- self.fk_field = fk_field
-
- def contribute_to_class(self, cls, name):
- self.name = name
- self.model = cls
- self.cache_attr = "_%s_cache" % name
- cls._meta.add_virtual_field(self)
-
- # For some reason I don't totally understand, using weakrefs here doesn't work.
- signals.pre_init.connect(self.instance_pre_init, sender=cls, weak=False)
-
- # Connect myself as the descriptor for this field
- setattr(cls, name, self)
-
- def instance_pre_init(self, signal, sender, args, kwargs, **_kwargs):
- """
- Handles initializing an object with the generic FK instaed of
- content-type/object-id fields.
- """
- if self.name in kwargs:
- value = kwargs.pop(self.name)
- kwargs[self.ct_field] = self.get_content_type(obj=value)
- kwargs[self.fk_field] = value._get_pk_val()
-
- def get_content_type(self, obj=None, id=None, using=None):
- # Convenience function using get_model avoids a circular import when
- # using this model
- ContentType = get_model("contenttypes", "contenttype")
- if obj:
- return ContentType.objects.db_manager(obj._state.db).get_for_model(obj)
- elif id:
- return ContentType.objects.db_manager(using).get_for_id(id)
- else:
- # This should never happen. I love comments like this, don't you?
- raise Exception("Impossible arguments to GFK.get_content_type!")
-
- def __get__(self, instance, instance_type=None):
- if instance is None:
- return self
-
- try:
- return getattr(instance, self.cache_attr)
- except AttributeError:
- rel_obj = None
-
- # Make sure to use ContentType.objects.get_for_id() to ensure that
- # lookups are cached (see ticket #5570). This takes more code than
- # the naive ``getattr(instance, self.ct_field)``, but has better
- # performance when dealing with GFKs in loops and such.
- f = self.model._meta.get_field(self.ct_field)
- ct_id = getattr(instance, f.get_attname(), None)
- if ct_id:
- ct = self.get_content_type(id=ct_id, using=instance._state.db)
- try:
- rel_obj = ct.get_object_for_this_type(pk=getattr(instance, self.fk_field))
- except ObjectDoesNotExist:
- pass
- setattr(instance, self.cache_attr, rel_obj)
- return rel_obj
-
- def __set__(self, instance, value):
- if instance is None:
- raise AttributeError(u"%s must be accessed via instance" % self.related.opts.object_name)
-
- ct = None
- fk = None
- if value is not None:
- ct = self.get_content_type(obj=value)
- fk = value._get_pk_val()
-
- setattr(instance, self.ct_field, ct)
- setattr(instance, self.fk_field, fk)
- setattr(instance, self.cache_attr, value)
-
-class GenericRelation(RelatedField, Field):
- """Provides an accessor to generic related objects (e.g. comments)"""
-
- def __init__(self, to, **kwargs):
- kwargs['verbose_name'] = kwargs.get('verbose_name', None)
- kwargs['rel'] = GenericRel(to,
- related_name=kwargs.pop('related_name', None),
- limit_choices_to=kwargs.pop('limit_choices_to', None),
- symmetrical=kwargs.pop('symmetrical', True))
-
-
- # Override content-type/object-id field names on the related class
- self.object_id_field_name = kwargs.pop("object_id_field", "object_id")
- self.content_type_field_name = kwargs.pop("content_type_field", "content_type")
-
- kwargs['blank'] = True
- kwargs['editable'] = False
- kwargs['serialize'] = False
- Field.__init__(self, **kwargs)
-
- def get_choices_default(self):
- return Field.get_choices(self, include_blank=False)
-
- def value_to_string(self, obj):
- qs = getattr(obj, self.name).all()
- return smart_unicode([instance._get_pk_val() for instance in qs])
-
- def m2m_db_table(self):
- return self.rel.to._meta.db_table
-
- def m2m_column_name(self):
- return self.object_id_field_name
-
- def m2m_reverse_name(self):
- return self.rel.to._meta.pk.column
-
- def contribute_to_class(self, cls, name):
- super(GenericRelation, self).contribute_to_class(cls, name)
-
- # Save a reference to which model this class is on for future use
- self.model = cls
-
- # Add the descriptor for the m2m relation
- setattr(cls, self.name, ReverseGenericRelatedObjectsDescriptor(self))
-
- def contribute_to_related_class(self, cls, related):
- pass
-
- def set_attributes_from_rel(self):
- pass
-
- def get_internal_type(self):
- return "ManyToManyField"
-
- def db_type(self, connection):
- # Since we're simulating a ManyToManyField, in effect, best return the
- # same db_type as well.
- return None
-
- def extra_filters(self, pieces, pos, negate):
- """
- Return an extra filter to the queryset so that the results are filtered
- on the appropriate content type.
- """
- if negate:
- return []
- ContentType = get_model("contenttypes", "contenttype")
- content_type = ContentType.objects.get_for_model(self.model)
- prefix = "__".join(pieces[:pos + 1])
- return [("%s__%s" % (prefix, self.content_type_field_name),
- content_type)]
-
-class ReverseGenericRelatedObjectsDescriptor(object):
- """
- This class provides the functionality that makes the related-object
- managers available as attributes on a model class, for fields that have
- multiple "remote" values and have a GenericRelation defined in their model
- (rather than having another model pointed *at* them). In the example
- "article.publications", the publications attribute is a
- ReverseGenericRelatedObjectsDescriptor instance.
- """
- def __init__(self, field):
- self.field = field
-
- def __get__(self, instance, instance_type=None):
- if instance is None:
- return self
-
- # This import is done here to avoid circular import importing this module
- from django.contrib.contenttypes.models import ContentType
-
- # Dynamically create a class that subclasses the related model's
- # default manager.
- rel_model = self.field.rel.to
- superclass = rel_model._default_manager.__class__
- RelatedManager = create_generic_related_manager(superclass)
-
- qn = connection.ops.quote_name
-
- manager = RelatedManager(
- model = rel_model,
- instance = instance,
- symmetrical = (self.field.rel.symmetrical and instance.__class__ == rel_model),
- join_table = qn(self.field.m2m_db_table()),
- source_col_name = qn(self.field.m2m_column_name()),
- target_col_name = qn(self.field.m2m_reverse_name()),
- content_type = ContentType.objects.db_manager(instance._state.db).get_for_model(instance),
- content_type_field_name = self.field.content_type_field_name,
- object_id_field_name = self.field.object_id_field_name
- )
-
- return manager
-
- def __set__(self, instance, value):
- if instance is None:
- raise AttributeError("Manager must be accessed via instance")
-
- manager = self.__get__(instance)
- manager.clear()
- for obj in value:
- manager.add(obj)
-
-def create_generic_related_manager(superclass):
- """
- Factory function for a manager that subclasses 'superclass' (which is a
- Manager) and adds behavior for generic related objects.
- """
-
- class GenericRelatedObjectManager(superclass):
- def __init__(self, model=None, core_filters=None, instance=None, symmetrical=None,
- join_table=None, source_col_name=None, target_col_name=None, content_type=None,
- content_type_field_name=None, object_id_field_name=None):
-
- super(GenericRelatedObjectManager, self).__init__()
- self.core_filters = core_filters or {}
- self.model = model
- self.content_type = content_type
- self.symmetrical = symmetrical
- self.instance = instance
- self.join_table = join_table
- self.join_table = model._meta.db_table
- self.source_col_name = source_col_name
- self.target_col_name = target_col_name
- self.content_type_field_name = content_type_field_name
- self.object_id_field_name = object_id_field_name
- self.pk_val = self.instance._get_pk_val()
-
- def get_query_set(self):
- db = self._db or router.db_for_read(self.model, instance=self.instance)
- query = {
- '%s__pk' % self.content_type_field_name : self.content_type.id,
- '%s__exact' % self.object_id_field_name : self.pk_val,
- }
- return superclass.get_query_set(self).using(db).filter(**query)
-
- def add(self, *objs):
- for obj in objs:
- if not isinstance(obj, self.model):
- raise TypeError("'%s' instance expected" % self.model._meta.object_name)
- setattr(obj, self.content_type_field_name, self.content_type)
- setattr(obj, self.object_id_field_name, self.pk_val)
- obj.save()
- add.alters_data = True
-
- def remove(self, *objs):
- db = router.db_for_write(self.model, instance=self.instance)
- for obj in objs:
- obj.delete(using=db)
- remove.alters_data = True
-
- def clear(self):
- db = router.db_for_write(self.model, instance=self.instance)
- for obj in self.all():
- obj.delete(using=db)
- clear.alters_data = True
-
- def create(self, **kwargs):
- kwargs[self.content_type_field_name] = self.content_type
- kwargs[self.object_id_field_name] = self.pk_val
- db = router.db_for_write(self.model, instance=self.instance)
- return super(GenericRelatedObjectManager, self).using(db).create(**kwargs)
- create.alters_data = True
-
- return GenericRelatedObjectManager
-
-class GenericRel(ManyToManyRel):
- def __init__(self, to, related_name=None, limit_choices_to=None, symmetrical=True):
- self.to = to
- self.related_name = related_name
- self.limit_choices_to = limit_choices_to or {}
- self.symmetrical = symmetrical
- self.multiple = True
- self.through = None
-
-class BaseGenericInlineFormSet(BaseModelFormSet):
- """
- A formset for generic inline objects to a parent.
- """
-
- def __init__(self, data=None, files=None, instance=None, save_as_new=None,
- prefix=None, queryset=None):
- # Avoid a circular import.
- from django.contrib.contenttypes.models import ContentType
- opts = self.model._meta
- self.instance = instance
- self.rel_name = '-'.join((
- opts.app_label, opts.object_name.lower(),
- self.ct_field.name, self.ct_fk_field.name,
- ))
- if self.instance is None or self.instance.pk is None:
- qs = self.model._default_manager.none()
- else:
- if queryset is None:
- queryset = self.model._default_manager
- qs = queryset.filter(**{
- self.ct_field.name: ContentType.objects.get_for_model(self.instance),
- self.ct_fk_field.name: self.instance.pk,
- })
- super(BaseGenericInlineFormSet, self).__init__(
- queryset=qs, data=data, files=files,
- prefix=prefix
- )
-
- #@classmethod
- def get_default_prefix(cls):
- opts = cls.model._meta
- return '-'.join((opts.app_label, opts.object_name.lower(),
- cls.ct_field.name, cls.ct_fk_field.name,
- ))
- get_default_prefix = classmethod(get_default_prefix)
-
- def save_new(self, form, commit=True):
- # Avoid a circular import.
- from django.contrib.contenttypes.models import ContentType
- kwargs = {
- self.ct_field.get_attname(): ContentType.objects.get_for_model(self.instance).pk,
- self.ct_fk_field.get_attname(): self.instance.pk,
- }
- new_obj = self.model(**kwargs)
- return save_instance(form, new_obj, commit=commit)
-
-def generic_inlineformset_factory(model, form=ModelForm,
- formset=BaseGenericInlineFormSet,
- ct_field="content_type", fk_field="object_id",
- fields=None, exclude=None,
- extra=3, can_order=False, can_delete=True,
- max_num=None,
- formfield_callback=lambda f: f.formfield()):
- """
- Returns an ``GenericInlineFormSet`` for the given kwargs.
-
- You must provide ``ct_field`` and ``object_id`` if they different from the
- defaults ``content_type`` and ``object_id`` respectively.
- """
- opts = model._meta
- # Avoid a circular import.
- from django.contrib.contenttypes.models import ContentType
- # if there is no field called `ct_field` let the exception propagate
- ct_field = opts.get_field(ct_field)
- if not isinstance(ct_field, models.ForeignKey) or ct_field.rel.to != ContentType:
- raise Exception("fk_name '%s' is not a ForeignKey to ContentType" % ct_field)
- fk_field = opts.get_field(fk_field) # let the exception propagate
- if exclude is not None:
- exclude = list(exclude)
- exclude.extend([ct_field.name, fk_field.name])
- else:
- exclude = [ct_field.name, fk_field.name]
- FormSet = modelformset_factory(model, form=form,
- formfield_callback=formfield_callback,
- formset=formset,
- extra=extra, can_delete=can_delete, can_order=can_order,
- fields=fields, exclude=exclude, max_num=max_num)
- FormSet.ct_field = ct_field
- FormSet.ct_fk_field = fk_field
- return FormSet
-
-class GenericInlineModelAdmin(InlineModelAdmin):
- ct_field = "content_type"
- ct_fk_field = "object_id"
- formset = BaseGenericInlineFormSet
-
- def get_formset(self, request, obj=None):
- if self.declared_fieldsets:
- fields = flatten_fieldsets(self.declared_fieldsets)
- else:
- fields = None
- if self.exclude is None:
- exclude = []
- else:
- exclude = list(self.exclude)
- exclude.extend(self.get_readonly_fields(request, obj))
- exclude = exclude or None
- defaults = {
- "ct_field": self.ct_field,
- "fk_field": self.ct_fk_field,
- "form": self.form,
- "formfield_callback": self.formfield_for_dbfield,
- "formset": self.formset,
- "extra": self.extra,
- "can_delete": self.can_delete,
- "can_order": False,
- "fields": fields,
- "max_num": self.max_num,
- "exclude": exclude
- }
- return generic_inlineformset_factory(self.model, **defaults)
-
-class GenericStackedInline(GenericInlineModelAdmin):
- template = 'admin/edit_inline/stacked.html'
-
-class GenericTabularInline(GenericInlineModelAdmin):
- template = 'admin/edit_inline/tabular.html'
diff --git a/parts/django/django/contrib/contenttypes/management.py b/parts/django/django/contrib/contenttypes/management.py
deleted file mode 100644
index 27d1275..0000000
--- a/parts/django/django/contrib/contenttypes/management.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from django.contrib.contenttypes.models import ContentType
-from django.db.models import get_apps, get_models, signals
-from django.utils.encoding import smart_unicode
-
-def update_contenttypes(app, created_models, verbosity=2, **kwargs):
- """
- Creates content types for models in the given app, removing any model
- entries that no longer have a matching model class.
- """
- ContentType.objects.clear_cache()
- content_types = list(ContentType.objects.filter(app_label=app.__name__.split('.')[-2]))
- app_models = get_models(app)
- if not app_models:
- return
- for klass in app_models:
- opts = klass._meta
- try:
- ct = ContentType.objects.get(app_label=opts.app_label,
- model=opts.object_name.lower())
- content_types.remove(ct)
- except ContentType.DoesNotExist:
- ct = ContentType(name=smart_unicode(opts.verbose_name_raw),
- app_label=opts.app_label, model=opts.object_name.lower())
- ct.save()
- if verbosity >= 2:
- print "Adding content type '%s | %s'" % (ct.app_label, ct.model)
- # The presence of any remaining content types means the supplied app has an
- # undefined model. Confirm that the content type is stale before deletion.
- if content_types:
- if kwargs.get('interactive', False):
- content_type_display = '\n'.join([' %s | %s' % (ct.app_label, ct.model) for ct in content_types])
- ok_to_delete = raw_input("""The following content types are stale and need to be deleted:
-
-%s
-
-Any objects related to these content types by a foreign key will also
-be deleted. Are you sure you want to delete these content types?
-If you're unsure, answer 'no'.
-
- Type 'yes' to continue, or 'no' to cancel: """ % content_type_display)
- else:
- ok_to_delete = False
-
- if ok_to_delete == 'yes':
- for ct in content_types:
- if verbosity >= 2:
- print "Deleting stale content type '%s | %s'" % (ct.app_label, ct.model)
- ct.delete()
- else:
- if verbosity >= 2:
- print "Stale content types remain."
-
-def update_all_contenttypes(verbosity=2, **kwargs):
- for app in get_apps():
- update_contenttypes(app, None, verbosity, **kwargs)
-
-signals.post_syncdb.connect(update_contenttypes)
-
-if __name__ == "__main__":
- update_all_contenttypes()
diff --git a/parts/django/django/contrib/contenttypes/models.py b/parts/django/django/contrib/contenttypes/models.py
deleted file mode 100644
index af3abf2..0000000
--- a/parts/django/django/contrib/contenttypes/models.py
+++ /dev/null
@@ -1,105 +0,0 @@
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-
-class ContentTypeManager(models.Manager):
-
- # Cache to avoid re-looking up ContentType objects all over the place.
- # This cache is shared by all the get_for_* methods.
- _cache = {}
-
- def get_by_natural_key(self, app_label, model):
- try:
- ct = self.__class__._cache[self.db][(app_label, model)]
- except KeyError:
- ct = self.get(app_label=app_label, model=model)
- return ct
-
- def get_for_model(self, model):
- """
- Returns the ContentType object for a given model, creating the
- ContentType if necessary. Lookups are cached so that subsequent lookups
- for the same model don't hit the database.
- """
- opts = model._meta
- while opts.proxy:
- model = opts.proxy_for_model
- opts = model._meta
- key = (opts.app_label, opts.object_name.lower())
- try:
- ct = self.__class__._cache[self.db][key]
- except KeyError:
- # Load or create the ContentType entry. The smart_unicode() is
- # needed around opts.verbose_name_raw because name_raw might be a
- # django.utils.functional.__proxy__ object.
- ct, created = self.get_or_create(
- app_label = opts.app_label,
- model = opts.object_name.lower(),
- defaults = {'name': smart_unicode(opts.verbose_name_raw)},
- )
- self._add_to_cache(self.db, ct)
-
- return ct
-
- def get_for_id(self, id):
- """
- Lookup a ContentType by ID. Uses the same shared cache as get_for_model
- (though ContentTypes are obviously not created on-the-fly by get_by_id).
- """
- try:
- ct = self.__class__._cache[self.db][id]
- except KeyError:
- # This could raise a DoesNotExist; that's correct behavior and will
- # make sure that only correct ctypes get stored in the cache dict.
- ct = self.get(pk=id)
- self._add_to_cache(self.db, ct)
- return ct
-
- def clear_cache(self):
- """
- Clear out the content-type cache. This needs to happen during database
- flushes to prevent caching of "stale" content type IDs (see
- django.contrib.contenttypes.management.update_contenttypes for where
- this gets called).
- """
- self.__class__._cache.clear()
-
- def _add_to_cache(self, using, ct):
- """Insert a ContentType into the cache."""
- model = ct.model_class()
- key = (model._meta.app_label, model._meta.object_name.lower())
- self.__class__._cache.setdefault(using, {})[key] = ct
- self.__class__._cache.setdefault(using, {})[ct.id] = ct
-
-class ContentType(models.Model):
- name = models.CharField(max_length=100)
- app_label = models.CharField(max_length=100)
- model = models.CharField(_('python model class name'), max_length=100)
- objects = ContentTypeManager()
-
- class Meta:
- verbose_name = _('content type')
- verbose_name_plural = _('content types')
- db_table = 'django_content_type'
- ordering = ('name',)
- unique_together = (('app_label', 'model'),)
-
- def __unicode__(self):
- return self.name
-
- def model_class(self):
- "Returns the Python model class for this type of content."
- from django.db import models
- return models.get_model(self.app_label, self.model)
-
- def get_object_for_this_type(self, **kwargs):
- """
- Returns an object of this type for the keyword arguments given.
- Basically, this is a proxy around this object_type's get_object() model
- method. The ObjectNotExist exception, if thrown, will not be caught,
- so code that calls this method should catch it.
- """
- return self.model_class()._default_manager.using(self._state.db).get(**kwargs)
-
- def natural_key(self):
- return (self.app_label, self.model)
diff --git a/parts/django/django/contrib/contenttypes/tests.py b/parts/django/django/contrib/contenttypes/tests.py
deleted file mode 100644
index a846b07..0000000
--- a/parts/django/django/contrib/contenttypes/tests.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from django import db
-from django.conf import settings
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.sites.models import Site
-from django.contrib.contenttypes.views import shortcut
-from django.core.exceptions import ObjectDoesNotExist
-from django.http import HttpRequest
-from django.test import TestCase
-
-
-class ContentTypesTests(TestCase):
-
- def setUp(self):
- # First, let's make sure we're dealing with a blank slate (and that
- # DEBUG is on so that queries get logged)
- self.old_DEBUG = settings.DEBUG
- self.old_Site_meta_installed = Site._meta.installed
- settings.DEBUG = True
- ContentType.objects.clear_cache()
- db.reset_queries()
-
- def tearDown(self):
- settings.DEBUG = self.old_DEBUG
- Site._meta.installed = self.old_Site_meta_installed
-
- def test_lookup_cache(self):
- """
- Make sure that the content type cache (see ContentTypeManager)
- works correctly. Lookups for a particular content type -- by model or
- by ID -- should hit the database only on the first lookup.
- """
-
- # At this point, a lookup for a ContentType should hit the DB
- ContentType.objects.get_for_model(ContentType)
- self.assertEqual(1, len(db.connection.queries))
-
- # A second hit, though, won't hit the DB, nor will a lookup by ID
- ct = ContentType.objects.get_for_model(ContentType)
- self.assertEqual(1, len(db.connection.queries))
- ContentType.objects.get_for_id(ct.id)
- self.assertEqual(1, len(db.connection.queries))
-
- # Once we clear the cache, another lookup will again hit the DB
- ContentType.objects.clear_cache()
- ContentType.objects.get_for_model(ContentType)
- len(db.connection.queries)
- self.assertEqual(2, len(db.connection.queries))
-
- def test_shortcut_view(self):
- """
- Check that the shortcut view (used for the admin "view on site"
- functionality) returns a complete URL regardless of whether the sites
- framework is installed
- """
-
- request = HttpRequest()
- request.META = {
- "SERVER_NAME": "Example.com",
- "SERVER_PORT": "80",
- }
- from django.contrib.auth.models import User
- user_ct = ContentType.objects.get_for_model(User)
- obj = User.objects.create(username="john")
- Site._meta.installed = True
- response = shortcut(request, user_ct.id, obj.id)
- self.assertEqual("http://example.com/users/john/", response._headers.get("location")[1])
- Site._meta.installed = False
- response = shortcut(request, user_ct.id, obj.id)
- self.assertEqual("http://Example.com/users/john/", response._headers.get("location")[1])
diff --git a/parts/django/django/contrib/contenttypes/views.py b/parts/django/django/contrib/contenttypes/views.py
deleted file mode 100644
index ac0feff..0000000
--- a/parts/django/django/contrib/contenttypes/views.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from django import http
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.sites.models import Site, get_current_site
-from django.core.exceptions import ObjectDoesNotExist
-
-def shortcut(request, content_type_id, object_id):
- "Redirect to an object's page based on a content-type ID and an object ID."
- # Look up the object, making sure it's got a get_absolute_url() function.
- try:
- content_type = ContentType.objects.get(pk=content_type_id)
- if not content_type.model_class():
- raise http.Http404("Content type %s object has no associated model" % content_type_id)
- obj = content_type.get_object_for_this_type(pk=object_id)
- except (ObjectDoesNotExist, ValueError):
- raise http.Http404("Content type %s object %s doesn't exist" % (content_type_id, object_id))
- try:
- absurl = obj.get_absolute_url()
- except AttributeError:
- raise http.Http404("%s objects don't have get_absolute_url() methods" % content_type.name)
-
- # Try to figure out the object's domain, so we can do a cross-site redirect
- # if necessary.
-
- # If the object actually defines a domain, we're done.
- if absurl.startswith('http://') or absurl.startswith('https://'):
- return http.HttpResponseRedirect(absurl)
-
- # Otherwise, we need to introspect the object's relationships for a
- # relation to the Site object
- object_domain = None
-
- if Site._meta.installed:
- opts = obj._meta
-
- # First, look for an many-to-many relationship to Site.
- for field in opts.many_to_many:
- if field.rel.to is Site:
- try:
- # Caveat: In the case of multiple related Sites, this just
- # selects the *first* one, which is arbitrary.
- object_domain = getattr(obj, field.name).all()[0].domain
- except IndexError:
- pass
- if object_domain is not None:
- break
-
- # Next, look for a many-to-one relationship to Site.
- if object_domain is None:
- for field in obj._meta.fields:
- if field.rel and field.rel.to is Site:
- try:
- object_domain = getattr(obj, field.name).domain
- except Site.DoesNotExist:
- pass
- if object_domain is not None:
- break
-
- # Fall back to the current site (if possible).
- if object_domain is None:
- try:
- object_domain = get_current_site(request).domain
- except Site.DoesNotExist:
- pass
-
- # If all that malarkey found an object domain, use it. Otherwise, fall back
- # to whatever get_absolute_url() returned.
- if object_domain is not None:
- protocol = request.is_secure() and 'https' or 'http'
- return http.HttpResponseRedirect('%s://%s%s' % (protocol, object_domain, absurl))
- else:
- return http.HttpResponseRedirect(absurl)
diff --git a/parts/django/django/contrib/csrf/__init__.py b/parts/django/django/contrib/csrf/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/csrf/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/csrf/middleware.py b/parts/django/django/contrib/csrf/middleware.py
deleted file mode 100644
index 4885cfc..0000000
--- a/parts/django/django/contrib/csrf/middleware.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.middleware.csrf import CsrfMiddleware, CsrfViewMiddleware, CsrfResponseMiddleware
-from django.views.decorators.csrf import csrf_exempt, csrf_view_exempt, csrf_response_exempt
-
-import warnings
-warnings.warn("This import for CSRF functionality is deprecated. Please use django.middleware.csrf for the middleware and django.views.decorators.csrf for decorators.",
- PendingDeprecationWarning
- )
diff --git a/parts/django/django/contrib/databrowse/__init__.py b/parts/django/django/contrib/databrowse/__init__.py
deleted file mode 100644
index e2f48ac..0000000
--- a/parts/django/django/contrib/databrowse/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from django.contrib.databrowse.sites import DatabrowsePlugin, ModelDatabrowse, DatabrowseSite, site
diff --git a/parts/django/django/contrib/databrowse/datastructures.py b/parts/django/django/contrib/databrowse/datastructures.py
deleted file mode 100644
index 4fcdba9..0000000
--- a/parts/django/django/contrib/databrowse/datastructures.py
+++ /dev/null
@@ -1,215 +0,0 @@
-"""
-These classes are light wrappers around Django's database API that provide
-convenience functionality and permalink functions for the databrowse app.
-"""
-
-from django.db import models
-from django.utils import formats
-from django.utils.text import capfirst
-from django.utils.encoding import smart_unicode, smart_str, iri_to_uri
-from django.utils.safestring import mark_safe
-from django.db.models.query import QuerySet
-
-EMPTY_VALUE = '(None)'
-DISPLAY_SIZE = 100
-
-class EasyModel(object):
- def __init__(self, site, model):
- self.site = site
- self.model = model
- self.model_list = site.registry.keys()
- self.verbose_name = model._meta.verbose_name
- self.verbose_name_plural = model._meta.verbose_name_plural
-
- def __repr__(self):
- return '<EasyModel for %s>' % smart_str(self.model._meta.object_name)
-
- def model_databrowse(self):
- "Returns the ModelDatabrowse class for this model."
- return self.site.registry[self.model]
-
- def url(self):
- return mark_safe('%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name))
-
- def objects(self, **kwargs):
- return self.get_query_set().filter(**kwargs)
-
- def get_query_set(self):
- easy_qs = self.model._default_manager.get_query_set()._clone(klass=EasyQuerySet)
- easy_qs._easymodel = self
- return easy_qs
-
- def object_by_pk(self, pk):
- return EasyInstance(self, self.model._default_manager.get(pk=pk))
-
- def sample_objects(self):
- for obj in self.model._default_manager.all()[:3]:
- yield EasyInstance(self, obj)
-
- def field(self, name):
- try:
- f = self.model._meta.get_field(name)
- except models.FieldDoesNotExist:
- return None
- return EasyField(self, f)
-
- def fields(self):
- return [EasyField(self, f) for f in (self.model._meta.fields + self.model._meta.many_to_many)]
-
-class EasyField(object):
- def __init__(self, easy_model, field):
- self.model, self.field = easy_model, field
-
- def __repr__(self):
- return smart_str(u'<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
-
- def choices(self):
- for value, label in self.field.choices:
- yield EasyChoice(self.model, self, value, label)
-
- def url(self):
- if self.field.choices:
- return mark_safe('%s%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name))
- elif self.field.rel:
- return mark_safe('%s%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name))
-
-class EasyChoice(object):
- def __init__(self, easy_model, field, value, label):
- self.model, self.field = easy_model, field
- self.value, self.label = value, label
-
- def __repr__(self):
- return smart_str(u'<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
-
- def url(self):
- return mark_safe('%s%s/%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.field.name, iri_to_uri(self.value)))
-
-class EasyInstance(object):
- def __init__(self, easy_model, instance):
- self.model, self.instance = easy_model, instance
-
- def __repr__(self):
- return smart_str(u'<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val()))
-
- def __unicode__(self):
- val = smart_unicode(self.instance)
- if len(val) > DISPLAY_SIZE:
- return val[:DISPLAY_SIZE] + u'...'
- return val
-
- def __str__(self):
- return self.__unicode__().encode('utf-8')
-
- def pk(self):
- return self.instance._get_pk_val()
-
- def url(self):
- return mark_safe('%s%s/%s/objects/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, iri_to_uri(self.pk())))
-
- def fields(self):
- """
- Generator that yields EasyInstanceFields for each field in this
- EasyInstance's model.
- """
- for f in self.model.model._meta.fields + self.model.model._meta.many_to_many:
- yield EasyInstanceField(self.model, self, f)
-
- def related_objects(self):
- """
- Generator that yields dictionaries of all models that have this
- EasyInstance's model as a ForeignKey or ManyToManyField, along with
- lists of related objects.
- """
- for rel_object in self.model.model._meta.get_all_related_objects() + self.model.model._meta.get_all_related_many_to_many_objects():
- if rel_object.model not in self.model.model_list:
- continue # Skip models that aren't in the model_list
- em = EasyModel(self.model.site, rel_object.model)
- yield {
- 'model': em,
- 'related_field': rel_object.field.verbose_name,
- 'object_list': [EasyInstance(em, i) for i in getattr(self.instance, rel_object.get_accessor_name()).all()],
- }
-
-class EasyInstanceField(object):
- def __init__(self, easy_model, instance, field):
- self.model, self.field, self.instance = easy_model, field, instance
- self.raw_value = getattr(instance.instance, field.name)
-
- def __repr__(self):
- return smart_str(u'<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
-
- def values(self):
- """
- Returns a list of values for this field for this instance. It's a list
- so we can accomodate many-to-many fields.
- """
- # This import is deliberately inside the function because it causes
- # some settings to be imported, and we don't want to do that at the
- # module level.
- if self.field.rel:
- if isinstance(self.field.rel, models.ManyToOneRel):
- objs = getattr(self.instance.instance, self.field.name)
- elif isinstance(self.field.rel, models.ManyToManyRel): # ManyToManyRel
- return list(getattr(self.instance.instance, self.field.name).all())
- elif self.field.choices:
- objs = dict(self.field.choices).get(self.raw_value, EMPTY_VALUE)
- elif isinstance(self.field, models.DateField) or isinstance(self.field, models.TimeField):
- if self.raw_value:
- if isinstance(self.field, models.DateTimeField):
- objs = capfirst(formats.date_format(self.raw_value, 'DATETIME_FORMAT'))
- elif isinstance(self.field, models.TimeField):
- objs = capfirst(formats.time_format(self.raw_value, 'TIME_FORMAT'))
- else:
- objs = capfirst(formats.date_format(self.raw_value, 'DATE_FORMAT'))
- else:
- objs = EMPTY_VALUE
- elif isinstance(self.field, models.BooleanField) or isinstance(self.field, models.NullBooleanField):
- objs = {True: 'Yes', False: 'No', None: 'Unknown'}[self.raw_value]
- else:
- objs = self.raw_value
- return [objs]
-
- def urls(self):
- "Returns a list of (value, URL) tuples."
- # First, check the urls() method for each plugin.
- plugin_urls = []
- for plugin_name, plugin in self.model.model_databrowse().plugins.items():
- urls = plugin.urls(plugin_name, self)
- if urls is not None:
- #plugin_urls.append(urls)
- values = self.values()
- return zip(self.values(), urls)
- if self.field.rel:
- m = EasyModel(self.model.site, self.field.rel.to)
- if self.field.rel.to in self.model.model_list:
- lst = []
- for value in self.values():
- url = mark_safe('%s%s/%s/objects/%s/' % (self.model.site.root_url, m.model._meta.app_label, m.model._meta.module_name, iri_to_uri(value._get_pk_val())))
- lst.append((smart_unicode(value), url))
- else:
- lst = [(value, None) for value in self.values()]
- elif self.field.choices:
- lst = []
- for value in self.values():
- url = mark_safe('%s%s/%s/fields/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name, iri_to_uri(self.raw_value)))
- lst.append((value, url))
- elif isinstance(self.field, models.URLField):
- val = self.values()[0]
- lst = [(val, iri_to_uri(val))]
- else:
- lst = [(self.values()[0], None)]
- return lst
-
-class EasyQuerySet(QuerySet):
- """
- When creating (or cloning to) an `EasyQuerySet`, make sure to set the
- `_easymodel` variable to the related `EasyModel`.
- """
- def iterator(self, *args, **kwargs):
- for obj in super(EasyQuerySet, self).iterator(*args, **kwargs):
- yield EasyInstance(self._easymodel, obj)
-
- def _clone(self, *args, **kwargs):
- c = super(EasyQuerySet, self)._clone(*args, **kwargs)
- c._easymodel = self._easymodel
- return c
diff --git a/parts/django/django/contrib/databrowse/plugins/__init__.py b/parts/django/django/contrib/databrowse/plugins/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/databrowse/plugins/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/databrowse/plugins/calendars.py b/parts/django/django/contrib/databrowse/plugins/calendars.py
deleted file mode 100644
index 9bbd02d..0000000
--- a/parts/django/django/contrib/databrowse/plugins/calendars.py
+++ /dev/null
@@ -1,86 +0,0 @@
-from django import http
-from django.db import models
-from django.contrib.databrowse.datastructures import EasyModel
-from django.contrib.databrowse.sites import DatabrowsePlugin
-from django.shortcuts import render_to_response
-from django.utils.text import capfirst
-from django.utils.encoding import force_unicode
-from django.utils.safestring import mark_safe
-from django.views.generic import date_based
-from django.utils import datetime_safe
-
-class CalendarPlugin(DatabrowsePlugin):
- def __init__(self, field_names=None):
- self.field_names = field_names
-
- def field_dict(self, model):
- """
- Helper function that returns a dictionary of all DateFields or
- DateTimeFields in the given model. If self.field_names is set, it takes
- take that into account when building the dictionary.
- """
- if self.field_names is None:
- return dict([(f.name, f) for f in model._meta.fields if isinstance(f, models.DateField)])
- else:
- return dict([(f.name, f) for f in model._meta.fields if isinstance(f, models.DateField) and f.name in self.field_names])
-
- def model_index_html(self, request, model, site):
- fields = self.field_dict(model)
- if not fields:
- return u''
- return mark_safe(u'<p class="filter"><strong>View calendar by:</strong> %s</p>' % \
- u', '.join(['<a href="calendars/%s/">%s</a>' % (f.name, force_unicode(capfirst(f.verbose_name))) for f in fields.values()]))
-
- def urls(self, plugin_name, easy_instance_field):
- if isinstance(easy_instance_field.field, models.DateField):
- d = easy_instance_field.raw_value
- return [mark_safe(u'%s%s/%s/%s/%s/%s/' % (
- easy_instance_field.model.url(),
- plugin_name, easy_instance_field.field.name,
- str(d.year),
- datetime_safe.new_date(d).strftime('%b').lower(),
- d.day))]
-
- def model_view(self, request, model_databrowse, url):
- self.model, self.site = model_databrowse.model, model_databrowse.site
- self.fields = self.field_dict(self.model)
-
- # If the model has no DateFields, there's no point in going further.
- if not self.fields:
- raise http.Http404('The requested model has no calendars.')
-
- if url is None:
- return self.homepage_view(request)
- url_bits = url.split('/')
- if self.fields.has_key(url_bits[0]):
- return self.calendar_view(request, self.fields[url_bits[0]], *url_bits[1:])
-
- raise http.Http404('The requested page does not exist.')
-
- def homepage_view(self, request):
- easy_model = EasyModel(self.site, self.model)
- field_list = self.fields.values()
- field_list.sort(lambda x, y: cmp(x.verbose_name, y.verbose_name))
- return render_to_response('databrowse/calendar_homepage.html', {'root_url': self.site.root_url, 'model': easy_model, 'field_list': field_list})
-
- def calendar_view(self, request, field, year=None, month=None, day=None):
- easy_model = EasyModel(self.site, self.model)
- queryset = easy_model.get_query_set()
- extra_context = {'root_url': self.site.root_url, 'model': easy_model, 'field': field}
- if day is not None:
- return date_based.archive_day(request, year, month, day, queryset, field.name,
- template_name='databrowse/calendar_day.html', allow_empty=False, allow_future=True,
- extra_context=extra_context)
- elif month is not None:
- return date_based.archive_month(request, year, month, queryset, field.name,
- template_name='databrowse/calendar_month.html', allow_empty=False, allow_future=True,
- extra_context=extra_context)
- elif year is not None:
- return date_based.archive_year(request, year, queryset, field.name,
- template_name='databrowse/calendar_year.html', allow_empty=False, allow_future=True,
- extra_context=extra_context)
- else:
- return date_based.archive_index(request, queryset, field.name,
- template_name='databrowse/calendar_main.html', allow_empty=True, allow_future=True,
- extra_context=extra_context)
- assert False, ('%s, %s, %s, %s' % (field, year, month, day))
diff --git a/parts/django/django/contrib/databrowse/plugins/fieldchoices.py b/parts/django/django/contrib/databrowse/plugins/fieldchoices.py
deleted file mode 100644
index 8f77792..0000000
--- a/parts/django/django/contrib/databrowse/plugins/fieldchoices.py
+++ /dev/null
@@ -1,74 +0,0 @@
-from django import http
-from django.db import models
-from django.contrib.databrowse.datastructures import EasyModel
-from django.contrib.databrowse.sites import DatabrowsePlugin
-from django.shortcuts import render_to_response
-from django.utils.text import capfirst
-from django.utils.encoding import smart_str, force_unicode
-from django.utils.safestring import mark_safe
-import urllib
-
-class FieldChoicePlugin(DatabrowsePlugin):
- def __init__(self, field_filter=None):
- # If field_filter is given, it should be a callable that takes a
- # Django database Field instance and returns True if that field should
- # be included. If field_filter is None, that all fields will be used.
- self.field_filter = field_filter
-
- def field_dict(self, model):
- """
- Helper function that returns a dictionary of all fields in the given
- model. If self.field_filter is set, it only includes the fields that
- match the filter.
- """
- if self.field_filter:
- return dict([(f.name, f) for f in model._meta.fields if self.field_filter(f)])
- else:
- return dict([(f.name, f) for f in model._meta.fields if not f.rel and not f.primary_key and not f.unique and not isinstance(f, (models.AutoField, models.TextField))])
-
- def model_index_html(self, request, model, site):
- fields = self.field_dict(model)
- if not fields:
- return u''
- return mark_safe(u'<p class="filter"><strong>View by:</strong> %s</p>' % \
- u', '.join(['<a href="fields/%s/">%s</a>' % (f.name, force_unicode(capfirst(f.verbose_name))) for f in fields.values()]))
-
- def urls(self, plugin_name, easy_instance_field):
- if easy_instance_field.field in self.field_dict(easy_instance_field.model.model).values():
- field_value = smart_str(easy_instance_field.raw_value)
- return [mark_safe(u'%s%s/%s/%s/' % (
- easy_instance_field.model.url(),
- plugin_name, easy_instance_field.field.name,
- urllib.quote(field_value, safe='')))]
-
- def model_view(self, request, model_databrowse, url):
- self.model, self.site = model_databrowse.model, model_databrowse.site
- self.fields = self.field_dict(self.model)
-
- # If the model has no fields with choices, there's no point in going
- # further.
- if not self.fields:
- raise http.Http404('The requested model has no fields.')
-
- if url is None:
- return self.homepage_view(request)
- url_bits = url.split('/', 1)
- if self.fields.has_key(url_bits[0]):
- return self.field_view(request, self.fields[url_bits[0]], *url_bits[1:])
-
- raise http.Http404('The requested page does not exist.')
-
- def homepage_view(self, request):
- easy_model = EasyModel(self.site, self.model)
- field_list = self.fields.values()
- field_list.sort(lambda x, y: cmp(x.verbose_name, y.verbose_name))
- return render_to_response('databrowse/fieldchoice_homepage.html', {'root_url': self.site.root_url, 'model': easy_model, 'field_list': field_list})
-
- def field_view(self, request, field, value=None):
- easy_model = EasyModel(self.site, self.model)
- easy_field = easy_model.field(field.name)
- if value is not None:
- obj_list = easy_model.objects(**{field.name: value})
- return render_to_response('databrowse/fieldchoice_detail.html', {'root_url': self.site.root_url, 'model': easy_model, 'field': easy_field, 'value': value, 'object_list': obj_list})
- obj_list = [v[field.name] for v in self.model._default_manager.distinct().order_by(field.name).values(field.name)]
- return render_to_response('databrowse/fieldchoice_list.html', {'root_url': self.site.root_url, 'model': easy_model, 'field': easy_field, 'object_list': obj_list})
diff --git a/parts/django/django/contrib/databrowse/plugins/objects.py b/parts/django/django/contrib/databrowse/plugins/objects.py
deleted file mode 100644
index 7326566..0000000
--- a/parts/django/django/contrib/databrowse/plugins/objects.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django import http
-from django.contrib.databrowse.datastructures import EasyModel
-from django.contrib.databrowse.sites import DatabrowsePlugin
-from django.shortcuts import render_to_response
-import urlparse
-
-class ObjectDetailPlugin(DatabrowsePlugin):
- def model_view(self, request, model_databrowse, url):
- # If the object ID wasn't provided, redirect to the model page, which is one level up.
- if url is None:
- return http.HttpResponseRedirect(urlparse.urljoin(request.path, '../'))
- easy_model = EasyModel(model_databrowse.site, model_databrowse.model)
- obj = easy_model.object_by_pk(url)
- return render_to_response('databrowse/object_detail.html', {'object': obj, 'root_url': model_databrowse.site.root_url})
diff --git a/parts/django/django/contrib/databrowse/sites.py b/parts/django/django/contrib/databrowse/sites.py
deleted file mode 100644
index 172ca52..0000000
--- a/parts/django/django/contrib/databrowse/sites.py
+++ /dev/null
@@ -1,149 +0,0 @@
-from django import http
-from django.db import models
-from django.contrib.databrowse.datastructures import EasyModel
-from django.shortcuts import render_to_response
-from django.utils.safestring import mark_safe
-
-class AlreadyRegistered(Exception):
- pass
-
-class NotRegistered(Exception):
- pass
-
-class DatabrowsePlugin(object):
- def urls(self, plugin_name, easy_instance_field):
- """
- Given an EasyInstanceField object, returns a list of URLs for this
- plugin's views of this object. These URLs should be absolute.
-
- Returns None if the EasyInstanceField object doesn't get a
- list of plugin-specific URLs.
- """
- return None
-
- def model_index_html(self, request, model, site):
- """
- Returns a snippet of HTML to include on the model index page.
- """
- return ''
-
- def model_view(self, request, model_databrowse, url):
- """
- Handles main URL routing for a plugin's model-specific pages.
- """
- raise NotImplementedError
-
-class ModelDatabrowse(object):
- plugins = {}
-
- def __init__(self, model, site):
- self.model = model
- self.site = site
-
- def root(self, request, url):
- """
- Handles main URL routing for the databrowse app.
-
- `url` is the remainder of the URL -- e.g. 'objects/3'.
- """
- # Delegate to the appropriate method, based on the URL.
- if url is None:
- return self.main_view(request)
- try:
- plugin_name, rest_of_url = url.split('/', 1)
- except ValueError: # need more than 1 value to unpack
- plugin_name, rest_of_url = url, None
- try:
- plugin = self.plugins[plugin_name]
- except KeyError:
- raise http.Http404('A plugin with the requested name does not exist.')
- return plugin.model_view(request, self, rest_of_url)
-
- def main_view(self, request):
- easy_model = EasyModel(self.site, self.model)
- html_snippets = mark_safe(u'\n'.join([p.model_index_html(request, self.model, self.site) for p in self.plugins.values()]))
- return render_to_response('databrowse/model_detail.html', {
- 'model': easy_model,
- 'root_url': self.site.root_url,
- 'plugin_html': html_snippets,
- })
-
-class DatabrowseSite(object):
- def __init__(self):
- self.registry = {} # model_class -> databrowse_class
- self.root_url = None
-
- def register(self, model_or_iterable, databrowse_class=None, **options):
- """
- Registers the given model(s) with the given databrowse site.
-
- The model(s) should be Model classes, not instances.
-
- If a databrowse class isn't given, it will use DefaultModelDatabrowse
- (the default databrowse options).
-
- If a model is already registered, this will raise AlreadyRegistered.
- """
- databrowse_class = databrowse_class or DefaultModelDatabrowse
- if issubclass(model_or_iterable, models.Model):
- model_or_iterable = [model_or_iterable]
- for model in model_or_iterable:
- if model in self.registry:
- raise AlreadyRegistered('The model %s is already registered' % model.__name__)
- self.registry[model] = databrowse_class
-
- def unregister(self, model_or_iterable):
- """
- Unregisters the given model(s).
-
- If a model isn't already registered, this will raise NotRegistered.
- """
- if issubclass(model_or_iterable, models.Model):
- model_or_iterable = [model_or_iterable]
- for model in model_or_iterable:
- if model not in self.registry:
- raise NotRegistered('The model %s is not registered' % model.__name__)
- del self.registry[model]
-
- def root(self, request, url):
- """
- Handles main URL routing for the databrowse app.
-
- `url` is the remainder of the URL -- e.g. 'comments/comment/'.
- """
- self.root_url = request.path[:len(request.path) - len(url)]
- url = url.rstrip('/') # Trim trailing slash, if it exists.
-
- if url == '':
- return self.index(request)
- elif '/' in url:
- return self.model_page(request, *url.split('/', 2))
-
- raise http.Http404('The requested databrowse page does not exist.')
-
- def index(self, request):
- m_list = [EasyModel(self, m) for m in self.registry.keys()]
- return render_to_response('databrowse/homepage.html', {'model_list': m_list, 'root_url': self.root_url})
-
- def model_page(self, request, app_label, model_name, rest_of_url=None):
- """
- Handles the model-specific functionality of the databrowse site, delegating
- to the appropriate ModelDatabrowse class.
- """
- model = models.get_model(app_label, model_name)
- if model is None:
- raise http.Http404("App %r, model %r, not found." % (app_label, model_name))
- try:
- databrowse_class = self.registry[model]
- except KeyError:
- raise http.Http404("This model exists but has not been registered with databrowse.")
- return databrowse_class(model, self).root(request, rest_of_url)
-
-site = DatabrowseSite()
-
-from django.contrib.databrowse.plugins.calendars import CalendarPlugin
-from django.contrib.databrowse.plugins.objects import ObjectDetailPlugin
-from django.contrib.databrowse.plugins.fieldchoices import FieldChoicePlugin
-
-class DefaultModelDatabrowse(ModelDatabrowse):
- plugins = {'objects': ObjectDetailPlugin(), 'calendars': CalendarPlugin(), 'fields': FieldChoicePlugin()}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/base.html b/parts/django/django/contrib/databrowse/templates/databrowse/base.html
deleted file mode 100644
index 33cac48..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/base.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE|default:"en-us" }}" xml:lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-<head>
-<title>{% block title %}{% endblock %}</title>
-{% block style %}
-<style type="text/css">
-* { margin:0; padding:0; }
-body { background:#eee; color:#333; font:76%/1.6 "Lucida Grande","Bitstream Vera Sans",Verdana,sans-serif; }
-a { color: #5b80b2; text-decoration:none; }
-a:hover { text-decoration:underline; }
-a img { border:none; }
-h1 { font-size:1.8em; color:#666; margin:0.4em 0 0.2em 0; }
-h2 { font-size:1.5em; color:#666; margin:1em 0 0.2em 0; }
-p { margin:0.5em 0 1em 0; }
-.odd { background-color:#EDF3FE; }
-.quiet { color:#666; }
-/* FILTERS */
-.filter { color:#999; font-size:0.9em; float:left; margin-bottom:10px; margin-right:20px; }
-.filter strong { color:#666; }
-/* OBJECT LISTS */
-.objectlist { clear:both; margin:0 -20px; color:#666; }
-.objectlist li a { display:block; padding:1em 20px; }
-.objectlist li a:hover { background:#5b80b2; color:#3B5572; color:#fff; text-decoration:none; }
-.related h2 { font-size: 1em; margin-bottom: 0.6em; }
-.related .objectlist li a { padding: 0.6em 20px; }
-.related .objectlist li.odd { background:#eee; }
-/* OBJECT DETAIL */
-.objectinfo { border-collapse:collapse; color:#666; margin:0 -20px; }
-.objectinfo td, .objectinfo th { padding:1em 20px; vertical-align:top; }
-.objectinfo td { width:100%; }
-.objectinfo th { text-align:left; white-space:nowrap; }
-/* MODEL GROUPS */
-.modelgroup { color:#999; font-size:0.9em; margin:0 -20px; }
-.modelgroup h2 { font-size:1.2em; margin:0; }
-.modelgroup h2 a { display: block; padding: 0.83em 20px; }
-.modelgroup h2 a:hover { text-decoration: none; color: #fff; }
-.modelgroup p { float:left; margin:-2.65em 0 0 14em; position:relative; }
-.modelgroup p a { white-space:nowrap; }
-.modelgroup a.more { color:#999; }
-.modelgroup:hover { background:#5b80b2; color:#becfe5; }
-.modelgroup:hover p a { color:#becfe5; }
-.modelgroup:hover a { color:#fff; }
-.modelgroup:hover a.more { color:#fff; }
-/* BREADCRUMBS */
-#breadcrumbs { padding:10px 0; color:#999; font-size:0.9em; }
-/* HEADER */
-#header a { display:block; background:#eee; color:#676868; padding:10px 20px; font-weight:bold; font-size:1em; text-decoration:none; border-bottom:1px solid #ddd; }
-#header a:hover { text-decoration:underline; }
-/* CONTENT */
-#content { background:#fff; border-bottom:1px solid #ddd; padding:0 20px; }
-</style>
-{% endblock %}
-{% block extrahead %}{% endblock %}
-</head>
-<body id="{% block bodyid %}page{% endblock %}">
-<div id="header"><a href="{{ root_url }}">{% block databrowse_title %}Databrowse{% endblock %}</a></div>
-<div id="content">
-{% block content %}{% endblock %}
-</div>
-</body>
-</html>
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/base_site.html b/parts/django/django/contrib/databrowse/templates/databrowse/base_site.html
deleted file mode 100644
index b577ab8..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/base_site.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "databrowse/base.html" %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_day.html b/parts/django/django/contrib/databrowse/templates/databrowse/calendar_day.html
deleted file mode 100644
index c009a94..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_day.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} {{ day|date:"F j, Y" }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../../">Calendars</a> / <a href="../../../">By {{ field.verbose_name }}</a> / <a href="../../">{{ day|date:"Y" }}</a> / <a href="../">{{ day|date:"F" }}</a> / {{ day|date:"d" }}</div>
-
-<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %} with {{ field.verbose_name }} on {{ day|date:"F j, Y" }}</h1>
-
-<ul class="objectlist">
-{% for object in object_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ object.url }}">{{ object }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_homepage.html b/parts/django/django/contrib/databrowse/templates/databrowse/calendar_homepage.html
deleted file mode 100644
index 85eb8af..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_homepage.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}Calendars{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / Calendars</div>
-
-<h1>Calendars</h1>
-
-<ul class="objectlist">
-{% for field in field_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ field.name }}/">{{ model.verbose_name_plural|capfirst }} by {{ field.verbose_name }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_main.html b/parts/django/django/contrib/databrowse/templates/databrowse/calendar_main.html
deleted file mode 100644
index 7cb5904..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_main.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ field.verbose_name|capfirst }} calendar{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../">Calendars</a> / By {{ field.verbose_name }}</div>
-
-<h1>{{ model.verbose_name_plural|capfirst }} by {{ field.verbose_name }}</h1>
-
-<ul class="objectlist">
-{% for year in date_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ year|date:"Y" }}/">{{ year|date:"Y" }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_month.html b/parts/django/django/contrib/databrowse/templates/databrowse/calendar_month.html
deleted file mode 100644
index ad189f4..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_month.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ month|date:"F Y" }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../">Calendars</a> / <a href="../../">By {{ field.verbose_name }}</a> / <a href="../">{{ month|date:"Y" }}</a> / {{ month|date:"F" }}</div>
-
-<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %} with {{ field.verbose_name }} on {{ month|date:"F Y" }}</h1>
-
-<ul class="objectlist">
-{% for object in object_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ object.url }}">{{ object }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_year.html b/parts/django/django/contrib/databrowse/templates/databrowse/calendar_year.html
deleted file mode 100644
index a6e6f53..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/calendar_year.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ year }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../">Calendars</a> / <a href="../">By {{ field.verbose_name }}</a> / {{ year }}</div>
-
-<h1>{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} in {{ year }}</h1>
-
-<ul class="objectlist">
-{% for month in date_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ month|date:"M"|lower }}/">{{ month|date:"F" }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/choice_detail.html b/parts/django/django/contrib/databrowse/templates/databrowse/choice_detail.html
deleted file mode 100644
index 0abc536..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/choice_detail.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}: {{ value }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="{{ field.url }}">By {{ field.field.verbose_name }}</a> / {{ value }}</div>
-
-<h1>{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}: {{ value }}</h1>
-
-<ul class="objectlist">
-{% for object in object_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ object.url }}">{{ object }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/choice_list.html b/parts/django/django/contrib/databrowse/templates/databrowse/choice_list.html
deleted file mode 100644
index 58675e8..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/choice_list.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / By {{ field.field.verbose_name }}</div>
-
-<h1>{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}</h1>
-
-<ul class="objectlist">
-{% for choice in field.choices %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ choice.url }}">{{ choice.label }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_detail.html b/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_detail.html
deleted file mode 100644
index 2dd55d4..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_detail.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.field.verbose_name }} {{ value }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../">Fields</a> / <a href="../">By {{ field.field.verbose_name }}</a> / {{ value }}</div>
-
-<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %} with {{ field.field.verbose_name }} {{ value }}</h1>
-
-<ul class="objectlist">
-{% for object in object_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ object.url }}">{{ object }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_homepage.html b/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_homepage.html
deleted file mode 100644
index b82c22d..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_homepage.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}Browsable fields in {{ model.verbose_name_plural }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / Fields</div>
-
-<h1>Browsable fields in {{ model.verbose_name_plural }}</h1>
-
-<ul class="objectlist">
-{% for field in field_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ field.name }}/">{{ model.verbose_name_plural|capfirst }} by {{ field.verbose_name }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_list.html b/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_list.html
deleted file mode 100644
index bb60a0e..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/fieldchoice_list.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../">Fields</a> / By {{ field.field.verbose_name }}</div>
-
-<h1>{{ model.verbose_name_plural|capfirst }} by {{ field.field.verbose_name }}</h1>
-
-<ul class="objectlist">
-{% for object in object_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ object|iriencode }}/">{{ object }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/homepage.html b/parts/django/django/contrib/databrowse/templates/databrowse/homepage.html
deleted file mode 100644
index 0f6708f..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/homepage.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}Databrowse{% endblock %}
-
-{% block bodyid %}homepage{% endblock %}
-
-{% block content %}
-
-{% for model in model_list %}
- <div class="modelgroup {% cycle 'even' 'odd' %}">
- <h2><a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a></h2>
- <p>
- {% for object in model.sample_objects %}
- <a href="{{ object.url }}">{{ object }}</a>,
- {% endfor %}
- <a class="more" href="{{ model.url }}">More &rarr;</a>
- </p>
- </div>
-{% endfor %}
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/model_detail.html b/parts/django/django/contrib/databrowse/templates/databrowse/model_detail.html
deleted file mode 100644
index 11c6808..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/model_detail.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ model.verbose_name_plural|capfirst }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / {{ model.verbose_name_plural|capfirst }}</div>
-
-<h1>{{ model.objects.count }} {% if model.objects.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %}</h1>
-
-{{ plugin_html }}
-
-<ul class="objectlist">
-{% for object in model.objects %}
- <li class="{% cycle 'odd' 'even' %}"><a href="{{ object.url }}">{{ object }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/templates/databrowse/object_detail.html b/parts/django/django/contrib/databrowse/templates/databrowse/object_detail.html
deleted file mode 100644
index 81c37f7..0000000
--- a/parts/django/django/contrib/databrowse/templates/databrowse/object_detail.html
+++ /dev/null
@@ -1,41 +0,0 @@
-{% extends "databrowse/base_site.html" %}
-
-{% block title %}{{ object.model.verbose_name|capfirst }}: {{ object }}{% endblock %}
-
-{% block content %}
-
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ object.model.url }}">{{ object.model.verbose_name_plural|capfirst }}</a> / {{ object }}</div>
-
-<h1>{{ object.model.verbose_name|capfirst }}: {{ object }}</h1>
-
-<table class="objectinfo">
-{% for field in object.fields %}
-<tr class="{% cycle 'odd' 'even' %}">
-<th>{{ field.field.verbose_name|capfirst }}</th>
-<td>
-{% if field.urls %}
-{% for value, url in field.urls %}
-{% if url %}<a href="{{ url }}">{% endif %}{{ value }}{% if url %}</a>{% endif %}{% if not forloop.last %}, {% endif %}
-{% endfor %}
-{% else %}None{% endif %}
-</td>
-</tr>
-{% endfor %}
-</table>
-
-{% for related_object in object.related_objects %}
- <div class="related">
- <h2>Appears in "{{ related_object.related_field }}" in the following {{ related_object.model.verbose_name_plural }}:</h2>
- {% if related_object.object_list %}
- <ul class="objectlist">
- {% for object in related_object.object_list %}
- <li class="{% cycle 'odd' 'even' %}"><a href="{{ object.url }}">{{ object }}</a></li>
- {% endfor %}
- </ul>
- {% else %}
- <p class="quiet">(None)</p>
- {% endif %}
- </div>
-{% endfor %}
-
-{% endblock %}
diff --git a/parts/django/django/contrib/databrowse/urls.py b/parts/django/django/contrib/databrowse/urls.py
deleted file mode 100644
index 9b85d14..0000000
--- a/parts/django/django/contrib/databrowse/urls.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.conf.urls.defaults import *
-from django.contrib.databrowse import views
-
-# Note: The views in this URLconf all require a 'models' argument,
-# which is a list of model classes (*not* instances).
-
-urlpatterns = patterns('',
- #(r'^$', views.homepage),
- #(r'^([^/]+)/([^/]+)/$', views.model_detail),
-
- (r'^([^/]+)/([^/]+)/fields/(\w+)/$', views.choice_list),
- (r'^([^/]+)/([^/]+)/fields/(\w+)/(.*)/$', views.choice_detail),
-
- #(r'^([^/]+)/([^/]+)/calendars/(\w+)/$', views.calendar_main),
- #(r'^([^/]+)/([^/]+)/calendars/(\w+)/(\d{4})/$', views.calendar_year),
- #(r'^([^/]+)/([^/]+)/calendars/(\w+)/(\d{4})/(\w{3})/$', views.calendar_month),
- #(r'^([^/]+)/([^/]+)/calendars/(\w+)/(\d{4})/(\w{3})/(\d{1,2})/$', views.calendar_day),
-
- #(r'^([^/]+)/([^/]+)/objects/(.*)/$', views.object_detail),
-)
diff --git a/parts/django/django/contrib/databrowse/views.py b/parts/django/django/contrib/databrowse/views.py
deleted file mode 100644
index 4543e95..0000000
--- a/parts/django/django/contrib/databrowse/views.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from django.http import Http404
-from django.shortcuts import render_to_response
-
-###########
-# CHOICES #
-###########
-
-def choice_list(request, app_label, module_name, field_name, models):
- m, f = lookup_field(app_label, module_name, field_name, models)
- return render_to_response('databrowse/choice_list.html', {'model': m, 'field': f})
-
-def choice_detail(request, app_label, module_name, field_name, field_val, models):
- m, f = lookup_field(app_label, module_name, field_name, models)
- try:
- label = dict(f.field.choices)[field_val]
- except KeyError:
- raise Http404('Invalid choice value given')
- obj_list = m.objects(**{f.field.name: field_val})
- return render_to_response('databrowse/choice_detail.html', {'model': m, 'field': f, 'value': label, 'object_list': obj_list})
diff --git a/parts/django/django/contrib/flatpages/__init__.py b/parts/django/django/contrib/flatpages/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/flatpages/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/flatpages/admin.py b/parts/django/django/contrib/flatpages/admin.py
deleted file mode 100644
index b6fdba3..0000000
--- a/parts/django/django/contrib/flatpages/admin.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from django import forms
-from django.contrib import admin
-from django.contrib.flatpages.models import FlatPage
-from django.utils.translation import ugettext_lazy as _
-
-
-class FlatpageForm(forms.ModelForm):
- url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/]+$',
- help_text = _("Example: '/about/contact/'. Make sure to have leading"
- " and trailing slashes."),
- error_message = _("This value must contain only letters, numbers,"
- " underscores, dashes or slashes."))
-
- class Meta:
- model = FlatPage
-
-
-class FlatPageAdmin(admin.ModelAdmin):
- form = FlatpageForm
- fieldsets = (
- (None, {'fields': ('url', 'title', 'content', 'sites')}),
- (_('Advanced options'), {'classes': ('collapse',), 'fields': ('enable_comments', 'registration_required', 'template_name')}),
- )
- list_display = ('url', 'title')
- list_filter = ('sites', 'enable_comments', 'registration_required')
- search_fields = ('url', 'title')
-
-admin.site.register(FlatPage, FlatPageAdmin)
diff --git a/parts/django/django/contrib/flatpages/fixtures/sample_flatpages.json b/parts/django/django/contrib/flatpages/fixtures/sample_flatpages.json
deleted file mode 100644
index 79808c2..0000000
--- a/parts/django/django/contrib/flatpages/fixtures/sample_flatpages.json
+++ /dev/null
@@ -1,32 +0,0 @@
-[
- {
- "pk": 1,
- "model": "flatpages.flatpage",
- "fields": {
- "registration_required": false,
- "title": "A Flatpage",
- "url": "/flatpage/",
- "template_name": "",
- "sites": [
- 1
- ],
- "content": "Isn't it flat!",
- "enable_comments": false
- }
- },
- {
- "pk": 2,
- "model": "flatpages.flatpage",
- "fields": {
- "registration_required": true,
- "title": "Sekrit Flatpage",
- "url": "/sekrit/",
- "template_name": "",
- "sites": [
- 1
- ],
- "content": "Isn't it sekrit!",
- "enable_comments": false
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/django/contrib/flatpages/middleware.py b/parts/django/django/contrib/flatpages/middleware.py
deleted file mode 100644
index fb98c39..0000000
--- a/parts/django/django/contrib/flatpages/middleware.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from django.contrib.flatpages.views import flatpage
-from django.http import Http404
-from django.conf import settings
-
-class FlatpageFallbackMiddleware(object):
- def process_response(self, request, response):
- if response.status_code != 404:
- return response # No need to check for a flatpage for non-404 responses.
- try:
- return flatpage(request, request.path_info)
- # Return the original response if any errors happened. Because this
- # is a middleware, we can't assume the errors will be caught elsewhere.
- except Http404:
- return response
- except:
- if settings.DEBUG:
- raise
- return response
diff --git a/parts/django/django/contrib/flatpages/models.py b/parts/django/django/contrib/flatpages/models.py
deleted file mode 100644
index 85873ac..0000000
--- a/parts/django/django/contrib/flatpages/models.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from django.db import models
-from django.contrib.sites.models import Site
-from django.utils.translation import ugettext_lazy as _
-
-
-class FlatPage(models.Model):
- url = models.CharField(_('URL'), max_length=100, db_index=True)
- title = models.CharField(_('title'), max_length=200)
- content = models.TextField(_('content'), blank=True)
- enable_comments = models.BooleanField(_('enable comments'))
- template_name = models.CharField(_('template name'), max_length=70, blank=True,
- help_text=_("Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."))
- registration_required = models.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page."))
- sites = models.ManyToManyField(Site)
-
- class Meta:
- db_table = 'django_flatpage'
- verbose_name = _('flat page')
- verbose_name_plural = _('flat pages')
- ordering = ('url',)
-
- def __unicode__(self):
- return u"%s -- %s" % (self.url, self.title)
-
- def get_absolute_url(self):
- return self.url
diff --git a/parts/django/django/contrib/flatpages/tests/__init__.py b/parts/django/django/contrib/flatpages/tests/__init__.py
deleted file mode 100644
index 2672dbf..0000000
--- a/parts/django/django/contrib/flatpages/tests/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.contrib.flatpages.tests.csrf import *
-from django.contrib.flatpages.tests.middleware import *
-from django.contrib.flatpages.tests.views import *
diff --git a/parts/django/django/contrib/flatpages/tests/csrf.py b/parts/django/django/contrib/flatpages/tests/csrf.py
deleted file mode 100644
index 0f0ab08..0000000
--- a/parts/django/django/contrib/flatpages/tests/csrf.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import os
-from django.conf import settings
-from django.test import TestCase, Client
-
-class FlatpageCSRFTests(TestCase):
- fixtures = ['sample_flatpages']
- urls = 'django.contrib.flatpages.tests.urls'
-
- def setUp(self):
- self.client = Client(enforce_csrf_checks=True)
- self.old_MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES
- flatpage_middleware_class = 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
- csrf_middleware_class = 'django.middleware.csrf.CsrfViewMiddleware'
- if csrf_middleware_class not in settings.MIDDLEWARE_CLASSES:
- settings.MIDDLEWARE_CLASSES += (csrf_middleware_class,)
- if flatpage_middleware_class not in settings.MIDDLEWARE_CLASSES:
- settings.MIDDLEWARE_CLASSES += (flatpage_middleware_class,)
- self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
- settings.TEMPLATE_DIRS = (
- os.path.join(
- os.path.dirname(__file__),
- 'templates'
- ),
- )
- self.old_LOGIN_URL = settings.LOGIN_URL
- settings.LOGIN_URL = '/accounts/login/'
-
- def tearDown(self):
- settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
- settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
- settings.LOGIN_URL = self.old_LOGIN_URL
-
- def test_view_flatpage(self):
- "A flatpage can be served through a view, even when the middleware is in use"
- response = self.client.get('/flatpage_root/flatpage/')
- self.assertEquals(response.status_code, 200)
- self.assertContains(response, "<p>Isn't it flat!</p>")
-
- def test_view_non_existent_flatpage(self):
- "A non-existent flatpage raises 404 when served through a view, even when the middleware is in use"
- response = self.client.get('/flatpage_root/no_such_flatpage/')
- self.assertEquals(response.status_code, 404)
-
- def test_view_authenticated_flatpage(self):
- "A flatpage served through a view can require authentication"
- response = self.client.get('/flatpage_root/sekrit/')
- self.assertRedirects(response, '/accounts/login/?next=/flatpage_root/sekrit/')
-
- def test_fallback_flatpage(self):
- "A flatpage can be served by the fallback middlware"
- response = self.client.get('/flatpage/')
- self.assertEquals(response.status_code, 200)
- self.assertContains(response, "<p>Isn't it flat!</p>")
-
- def test_fallback_non_existent_flatpage(self):
- "A non-existent flatpage raises a 404 when served by the fallback middlware"
- response = self.client.get('/no_such_flatpage/')
- self.assertEquals(response.status_code, 404)
-
- def test_post_view_flatpage(self):
- "POSTing to a flatpage served through a view will raise a CSRF error if no token is provided (Refs #14156)"
- response = self.client.post('/flatpage_root/flatpage/')
- self.assertEquals(response.status_code, 403)
-
- def test_post_fallback_flatpage(self):
- "POSTing to a flatpage served by the middleware will raise a CSRF error if no token is provided (Refs #14156)"
- response = self.client.post('/flatpage/')
- self.assertEquals(response.status_code, 403)
-
- def test_post_unknown_page(self):
- "POSTing to an unknown page isn't caught as a 403 CSRF error"
- response = self.client.post('/no_such_page/')
- self.assertEquals(response.status_code, 404)
diff --git a/parts/django/django/contrib/flatpages/tests/middleware.py b/parts/django/django/contrib/flatpages/tests/middleware.py
deleted file mode 100644
index a412596..0000000
--- a/parts/django/django/contrib/flatpages/tests/middleware.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import os
-from django.conf import settings
-from django.test import TestCase
-
-class FlatpageMiddlewareTests(TestCase):
- fixtures = ['sample_flatpages']
- urls = 'django.contrib.flatpages.tests.urls'
-
- def setUp(self):
- self.old_MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES
- flatpage_middleware_class = 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
- if flatpage_middleware_class not in settings.MIDDLEWARE_CLASSES:
- settings.MIDDLEWARE_CLASSES += (flatpage_middleware_class,)
- self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
- settings.TEMPLATE_DIRS = (
- os.path.join(
- os.path.dirname(__file__),
- 'templates'
- ),
- )
- self.old_LOGIN_URL = settings.LOGIN_URL
- settings.LOGIN_URL = '/accounts/login/'
-
- def tearDown(self):
- settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
- settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
- settings.LOGIN_URL = self.old_LOGIN_URL
-
- def test_view_flatpage(self):
- "A flatpage can be served through a view, even when the middleware is in use"
- response = self.client.get('/flatpage_root/flatpage/')
- self.assertEquals(response.status_code, 200)
- self.assertContains(response, "<p>Isn't it flat!</p>")
-
- def test_view_non_existent_flatpage(self):
- "A non-existent flatpage raises 404 when served through a view, even when the middleware is in use"
- response = self.client.get('/flatpage_root/no_such_flatpage/')
- self.assertEquals(response.status_code, 404)
-
- def test_view_authenticated_flatpage(self):
- "A flatpage served through a view can require authentication"
- response = self.client.get('/flatpage_root/sekrit/')
- self.assertRedirects(response, '/accounts/login/?next=/flatpage_root/sekrit/')
-
- def test_fallback_flatpage(self):
- "A flatpage can be served by the fallback middlware"
- response = self.client.get('/flatpage/')
- self.assertEquals(response.status_code, 200)
- self.assertContains(response, "<p>Isn't it flat!</p>")
-
- def test_fallback_non_existent_flatpage(self):
- "A non-existent flatpage raises a 404 when served by the fallback middlware"
- response = self.client.get('/no_such_flatpage/')
- self.assertEquals(response.status_code, 404)
-
- def test_fallback_authenticated_flatpage(self):
- "A flatpage served by the middleware can require authentication"
- response = self.client.get('/sekrit/')
- self.assertRedirects(response, '/accounts/login/?next=/sekrit/')
diff --git a/parts/django/django/contrib/flatpages/tests/templates/404.html b/parts/django/django/contrib/flatpages/tests/templates/404.html
deleted file mode 100644
index 5fd5f3c..0000000
--- a/parts/django/django/contrib/flatpages/tests/templates/404.html
+++ /dev/null
@@ -1 +0,0 @@
-<h1>Oh Noes!</h1> \ No newline at end of file
diff --git a/parts/django/django/contrib/flatpages/tests/templates/flatpages/default.html b/parts/django/django/contrib/flatpages/tests/templates/flatpages/default.html
deleted file mode 100644
index c6323fd..0000000
--- a/parts/django/django/contrib/flatpages/tests/templates/flatpages/default.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>{{ flatpage.title }}</h1>
-<p>{{ flatpage.content }}</p> \ No newline at end of file
diff --git a/parts/django/django/contrib/flatpages/tests/templates/registration/login.html b/parts/django/django/contrib/flatpages/tests/templates/registration/login.html
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/flatpages/tests/templates/registration/login.html
+++ /dev/null
diff --git a/parts/django/django/contrib/flatpages/tests/urls.py b/parts/django/django/contrib/flatpages/tests/urls.py
deleted file mode 100644
index 3cffd09..0000000
--- a/parts/django/django/contrib/flatpages/tests/urls.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.conf.urls.defaults import *
-
-# special urls for flatpage test cases
-urlpatterns = patterns('',
- (r'^flatpage_root', include('django.contrib.flatpages.urls')),
- (r'^accounts/', include('django.contrib.auth.urls')),
-)
-
diff --git a/parts/django/django/contrib/flatpages/tests/views.py b/parts/django/django/contrib/flatpages/tests/views.py
deleted file mode 100644
index a013ae9..0000000
--- a/parts/django/django/contrib/flatpages/tests/views.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import os
-from django.conf import settings
-from django.test import TestCase
-
-class FlatpageViewTests(TestCase):
- fixtures = ['sample_flatpages']
- urls = 'django.contrib.flatpages.tests.urls'
-
- def setUp(self):
- self.old_MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES
- flatpage_middleware_class = 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
- if flatpage_middleware_class in settings.MIDDLEWARE_CLASSES:
- settings.MIDDLEWARE_CLASSES = tuple(m for m in settings.MIDDLEWARE_CLASSES if m != flatpage_middleware_class)
- self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
- settings.TEMPLATE_DIRS = (
- os.path.join(
- os.path.dirname(__file__),
- 'templates'
- ),
- )
- self.old_LOGIN_URL = settings.LOGIN_URL
- settings.LOGIN_URL = '/accounts/login/'
-
- def tearDown(self):
- settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
- settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
- settings.LOGIN_URL = self.old_LOGIN_URL
-
- def test_view_flatpage(self):
- "A flatpage can be served through a view"
- response = self.client.get('/flatpage_root/flatpage/')
- self.assertEquals(response.status_code, 200)
- self.assertContains(response, "<p>Isn't it flat!</p>")
-
- def test_view_non_existent_flatpage(self):
- "A non-existent flatpage raises 404 when served through a view"
- response = self.client.get('/flatpage_root/no_such_flatpage/')
- self.assertEquals(response.status_code, 404)
-
- def test_view_authenticated_flatpage(self):
- "A flatpage served through a view can require authentication"
- response = self.client.get('/flatpage_root/sekrit/')
- self.assertRedirects(response, '/accounts/login/?next=/flatpage_root/sekrit/')
-
- def test_fallback_flatpage(self):
- "A fallback flatpage won't be served if the middleware is disabled"
- response = self.client.get('/flatpage/')
- self.assertEquals(response.status_code, 404)
-
- def test_fallback_non_existent_flatpage(self):
- "A non-existent flatpage won't be served if the fallback middlware is disabled"
- response = self.client.get('/no_such_flatpage/')
- self.assertEquals(response.status_code, 404)
diff --git a/parts/django/django/contrib/flatpages/urls.py b/parts/django/django/contrib/flatpages/urls.py
deleted file mode 100644
index 4928930..0000000
--- a/parts/django/django/contrib/flatpages/urls.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('django.contrib.flatpages.views',
- (r'^(?P<url>.*)$', 'flatpage'),
-)
diff --git a/parts/django/django/contrib/flatpages/views.py b/parts/django/django/contrib/flatpages/views.py
deleted file mode 100644
index 88ef4da..0000000
--- a/parts/django/django/contrib/flatpages/views.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from django.contrib.flatpages.models import FlatPage
-from django.template import loader, RequestContext
-from django.shortcuts import get_object_or_404
-from django.http import HttpResponse, HttpResponseRedirect
-from django.conf import settings
-from django.core.xheaders import populate_xheaders
-from django.utils.safestring import mark_safe
-from django.views.decorators.csrf import csrf_protect
-
-DEFAULT_TEMPLATE = 'flatpages/default.html'
-
-# This view is called from FlatpageFallbackMiddleware.process_response
-# when a 404 is raised, which often means CsrfViewMiddleware.process_view
-# has not been called even if CsrfViewMiddleware is installed. So we need
-# to use @csrf_protect, in case the template needs {% csrf_token %}.
-# However, we can't just wrap this view; if no matching flatpage exists,
-# or a redirect is required for authentication, the 404 needs to be returned
-# without any CSRF checks. Therefore, we only
-# CSRF protect the internal implementation.
-def flatpage(request, url):
- """
- Public interface to the flat page view.
-
- Models: `flatpages.flatpages`
- Templates: Uses the template defined by the ``template_name`` field,
- or `flatpages/default.html` if template_name is not defined.
- Context:
- flatpage
- `flatpages.flatpages` object
- """
- if not url.endswith('/') and settings.APPEND_SLASH:
- return HttpResponseRedirect("%s/" % request.path)
- if not url.startswith('/'):
- url = "/" + url
- f = get_object_or_404(FlatPage, url__exact=url, sites__id__exact=settings.SITE_ID)
- return render_flatpage(request, f)
-
-@csrf_protect
-def render_flatpage(request, f):
- """
- Internal interface to the flat page view.
- """
- # If registration is required for accessing this page, and the user isn't
- # logged in, redirect to the login page.
- if f.registration_required and not request.user.is_authenticated():
- from django.contrib.auth.views import redirect_to_login
- return redirect_to_login(request.path)
- if f.template_name:
- t = loader.select_template((f.template_name, DEFAULT_TEMPLATE))
- else:
- t = loader.get_template(DEFAULT_TEMPLATE)
-
- # To avoid having to always use the "|safe" filter in flatpage templates,
- # mark the title and content as already safe (since they are raw HTML
- # content in the first place).
- f.title = mark_safe(f.title)
- f.content = mark_safe(f.content)
-
- c = RequestContext(request, {
- 'flatpage': f,
- })
- response = HttpResponse(t.render(c))
- populate_xheaders(request, response, FlatPage, f.id)
- return response
diff --git a/parts/django/django/contrib/formtools/__init__.py b/parts/django/django/contrib/formtools/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/formtools/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/formtools/models.py b/parts/django/django/contrib/formtools/models.py
deleted file mode 100644
index 13990e2..0000000
--- a/parts/django/django/contrib/formtools/models.py
+++ /dev/null
@@ -1 +0,0 @@
-""" models.py (even empty) currently required by the runtests.py to enable unit tests """
diff --git a/parts/django/django/contrib/formtools/preview.py b/parts/django/django/contrib/formtools/preview.py
deleted file mode 100644
index f202084..0000000
--- a/parts/django/django/contrib/formtools/preview.py
+++ /dev/null
@@ -1,127 +0,0 @@
-"""
-Formtools Preview application.
-"""
-
-import cPickle as pickle
-
-from django.conf import settings
-from django.http import Http404
-from django.shortcuts import render_to_response
-from django.template.context import RequestContext
-from django.utils.hashcompat import md5_constructor
-from django.contrib.formtools.utils import security_hash
-
-AUTO_ID = 'formtools_%s' # Each form here uses this as its auto_id parameter.
-
-class FormPreview(object):
- preview_template = 'formtools/preview.html'
- form_template = 'formtools/form.html'
-
- # METHODS SUBCLASSES SHOULDN'T OVERRIDE ###################################
-
- def __init__(self, form):
- # form should be a Form class, not an instance.
- self.form, self.state = form, {}
-
- def __call__(self, request, *args, **kwargs):
- stage = {'1': 'preview', '2': 'post'}.get(request.POST.get(self.unused_name('stage')), 'preview')
- self.parse_params(*args, **kwargs)
- try:
- method = getattr(self, stage + '_' + request.method.lower())
- except AttributeError:
- raise Http404
- return method(request)
-
- def unused_name(self, name):
- """
- Given a first-choice name, adds an underscore to the name until it
- reaches a name that isn't claimed by any field in the form.
-
- This is calculated rather than being hard-coded so that no field names
- are off-limits for use in the form.
- """
- while 1:
- try:
- f = self.form.base_fields[name]
- except KeyError:
- break # This field name isn't being used by the form.
- name += '_'
- return name
-
- def preview_get(self, request):
- "Displays the form"
- f = self.form(auto_id=AUTO_ID)
- return render_to_response(self.form_template,
- {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state},
- context_instance=RequestContext(request))
-
- def preview_post(self, request):
- "Validates the POST data. If valid, displays the preview page. Else, redisplays form."
- f = self.form(request.POST, auto_id=AUTO_ID)
- context = {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state}
- if f.is_valid():
- self.process_preview(request, f, context)
- context['hash_field'] = self.unused_name('hash')
- context['hash_value'] = self.security_hash(request, f)
- return render_to_response(self.preview_template, context, context_instance=RequestContext(request))
- else:
- return render_to_response(self.form_template, context, context_instance=RequestContext(request))
-
- def post_post(self, request):
- "Validates the POST data. If valid, calls done(). Else, redisplays form."
- f = self.form(request.POST, auto_id=AUTO_ID)
- if f.is_valid():
- if self.security_hash(request, f) != request.POST.get(self.unused_name('hash')):
- return self.failed_hash(request) # Security hash failed.
- return self.done(request, f.cleaned_data)
- else:
- return render_to_response(self.form_template,
- {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state},
- context_instance=RequestContext(request))
-
- # METHODS SUBCLASSES MIGHT OVERRIDE IF APPROPRIATE ########################
-
- def parse_params(self, *args, **kwargs):
- """
- Given captured args and kwargs from the URLconf, saves something in
- self.state and/or raises Http404 if necessary.
-
- For example, this URLconf captures a user_id variable:
-
- (r'^contact/(?P<user_id>\d{1,6})/$', MyFormPreview(MyForm)),
-
- In this case, the kwargs variable in parse_params would be
- {'user_id': 32} for a request to '/contact/32/'. You can use that
- user_id to make sure it's a valid user and/or save it for later, for
- use in done().
- """
- pass
-
- def process_preview(self, request, form, context):
- """
- Given a validated form, performs any extra processing before displaying
- the preview page, and saves any extra data in context.
- """
- pass
-
- def security_hash(self, request, form):
- """
- Calculates the security hash for the given HttpRequest and Form instances.
-
- Subclasses may want to take into account request-specific information,
- such as the IP address.
- """
- return security_hash(request, form)
-
- def failed_hash(self, request):
- "Returns an HttpResponse in the case of an invalid security hash."
- return self.preview_post(request)
-
- # METHODS SUBCLASSES MUST OVERRIDE ########################################
-
- def done(self, request, cleaned_data):
- """
- Does something with the cleaned_data and returns an
- HttpResponseRedirect.
- """
- raise NotImplementedError('You must define a done() method on your %s subclass.' % self.__class__.__name__)
diff --git a/parts/django/django/contrib/formtools/templates/formtools/form.html b/parts/django/django/contrib/formtools/templates/formtools/form.html
deleted file mode 100644
index 2f2de1f..0000000
--- a/parts/django/django/contrib/formtools/templates/formtools/form.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "base.html" %}
-
-{% block content %}
-
-{% if form.errors %}<h1>Please correct the following errors</h1>{% else %}<h1>Submit</h1>{% endif %}
-
-<form action="" method="post">{% csrf_token %}
-<table>
-{{ form }}
-</table>
-<input type="hidden" name="{{ stage_field }}" value="1" />
-<p><input type="submit" value="Preview" /></p>
-</form>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/formtools/templates/formtools/preview.html b/parts/django/django/contrib/formtools/templates/formtools/preview.html
deleted file mode 100644
index eb88b1e..0000000
--- a/parts/django/django/contrib/formtools/templates/formtools/preview.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% extends "base.html" %}
-
-{% block content %}
-
-<h1>Preview your submission</h1>
-
-<table>
-{% for field in form %}
-<tr>
-<th>{{ field.label }}:</th>
-<td>{{ field.data }}</td>
-</tr>
-{% endfor %}
-</table>
-
-<p>Security hash: {{ hash_value }}</p>
-
-<form action="" method="post">{% csrf_token %}
-{% for field in form %}{{ field.as_hidden }}
-{% endfor %}
-<input type="hidden" name="{{ stage_field }}" value="2" />
-<input type="hidden" name="{{ hash_field }}" value="{{ hash_value }}" />
-<p><input type="submit" value="Submit" /></p>
-</form>
-
-<h1>Or edit it again</h1>
-
-<form action="" method="post">{% csrf_token %}
-<table>
-{{ form }}
-</table>
-<input type="hidden" name="{{ stage_field }}" value="1" />
-<p><input type="submit" value="Preview" /></p>
-</form>
-
-{% endblock %}
diff --git a/parts/django/django/contrib/formtools/test_urls.py b/parts/django/django/contrib/formtools/test_urls.py
deleted file mode 100644
index 44a58d2..0000000
--- a/parts/django/django/contrib/formtools/test_urls.py
+++ /dev/null
@@ -1,10 +0,0 @@
-"""
-This is a URLconf to be loaded by tests.py. Add any URLs needed for tests only.
-"""
-
-from django.conf.urls.defaults import *
-from django.contrib.formtools.tests import *
-
-urlpatterns = patterns('',
- (r'^test1/', TestFormPreview(TestForm)),
- )
diff --git a/parts/django/django/contrib/formtools/tests.py b/parts/django/django/contrib/formtools/tests.py
deleted file mode 100644
index 7816c15..0000000
--- a/parts/django/django/contrib/formtools/tests.py
+++ /dev/null
@@ -1,216 +0,0 @@
-import unittest
-from django import forms
-from django.conf import settings
-from django.contrib.formtools import preview, wizard, utils
-from django import http
-from django.test import TestCase
-
-success_string = "Done was called!"
-
-class TestFormPreview(preview.FormPreview):
-
- def done(self, request, cleaned_data):
- return http.HttpResponse(success_string)
-
-class TestForm(forms.Form):
- field1 = forms.CharField()
- field1_ = forms.CharField()
- bool1 = forms.BooleanField(required=False)
-
-class PreviewTests(TestCase):
- urls = 'django.contrib.formtools.test_urls'
-
- def setUp(self):
- # Create a FormPreview instance to share between tests
- self.preview = preview.FormPreview(TestForm)
- input_template = '<input type="hidden" name="%s" value="%s" />'
- self.input = input_template % (self.preview.unused_name('stage'), "%d")
- self.test_data = {'field1':u'foo', 'field1_':u'asdf'}
-
- def test_unused_name(self):
- """
- Verifies name mangling to get uniue field name.
- """
- self.assertEqual(self.preview.unused_name('field1'), 'field1__')
-
- def test_form_get(self):
- """
- Test contrib.formtools.preview form retrieval.
-
- Use the client library to see if we can sucessfully retrieve
- the form (mostly testing the setup ROOT_URLCONF
- process). Verify that an additional hidden input field
- is created to manage the stage.
-
- """
- response = self.client.get('/test1/')
- stage = self.input % 1
- self.assertContains(response, stage, 1)
-
- def test_form_preview(self):
- """
- Test contrib.formtools.preview form preview rendering.
-
- Use the client library to POST to the form to see if a preview
- is returned. If we do get a form back check that the hidden
- value is correctly managing the state of the form.
-
- """
- # Pass strings for form submittal and add stage variable to
- # show we previously saw first stage of the form.
- self.test_data.update({'stage': 1})
- response = self.client.post('/test1/', self.test_data)
- # Check to confirm stage is set to 2 in output form.
- stage = self.input % 2
- self.assertContains(response, stage, 1)
-
- def test_form_submit(self):
- """
- Test contrib.formtools.preview form submittal.
-
- Use the client library to POST to the form with stage set to 3
- to see if our forms done() method is called. Check first
- without the security hash, verify failure, retry with security
- hash and verify sucess.
-
- """
- # Pass strings for form submittal and add stage variable to
- # show we previously saw first stage of the form.
- self.test_data.update({'stage':2})
- response = self.client.post('/test1/', self.test_data)
- self.failIfEqual(response.content, success_string)
- hash = self.preview.security_hash(None, TestForm(self.test_data))
- self.test_data.update({'hash': hash})
- response = self.client.post('/test1/', self.test_data)
- self.assertEqual(response.content, success_string)
-
- def test_bool_submit(self):
- """
- Test contrib.formtools.preview form submittal when form contains:
- BooleanField(required=False)
-
- Ticket: #6209 - When an unchecked BooleanField is previewed, the preview
- form's hash would be computed with no value for ``bool1``. However, when
- the preview form is rendered, the unchecked hidden BooleanField would be
- rendered with the string value 'False'. So when the preview form is
- resubmitted, the hash would be computed with the value 'False' for
- ``bool1``. We need to make sure the hashes are the same in both cases.
-
- """
- self.test_data.update({'stage':2})
- hash = self.preview.security_hash(None, TestForm(self.test_data))
- self.test_data.update({'hash':hash, 'bool1':u'False'})
- response = self.client.post('/test1/', self.test_data)
- self.assertEqual(response.content, success_string)
-
-class SecurityHashTests(unittest.TestCase):
-
- def test_textfield_hash(self):
- """
- Regression test for #10034: the hash generation function should ignore
- leading/trailing whitespace so as to be friendly to broken browsers that
- submit it (usually in textareas).
- """
- f1 = HashTestForm({'name': 'joe', 'bio': 'Nothing notable.'})
- f2 = HashTestForm({'name': ' joe', 'bio': 'Nothing notable. '})
- hash1 = utils.security_hash(None, f1)
- hash2 = utils.security_hash(None, f2)
- self.assertEqual(hash1, hash2)
-
- def test_empty_permitted(self):
- """
- Regression test for #10643: the security hash should allow forms with
- empty_permitted = True, or forms where data has not changed.
- """
- f1 = HashTestBlankForm({})
- f2 = HashTestForm({}, empty_permitted=True)
- hash1 = utils.security_hash(None, f1)
- hash2 = utils.security_hash(None, f2)
- self.assertEqual(hash1, hash2)
-
-class HashTestForm(forms.Form):
- name = forms.CharField()
- bio = forms.CharField()
-
-class HashTestBlankForm(forms.Form):
- name = forms.CharField(required=False)
- bio = forms.CharField(required=False)
-
-#
-# FormWizard tests
-#
-
-class WizardPageOneForm(forms.Form):
- field = forms.CharField()
-
-class WizardPageTwoForm(forms.Form):
- field = forms.CharField()
-
-class WizardPageThreeForm(forms.Form):
- field = forms.CharField()
-
-class WizardClass(wizard.FormWizard):
- def render_template(self, *args, **kw):
- return http.HttpResponse("")
-
- def done(self, request, cleaned_data):
- return http.HttpResponse(success_string)
-
-class DummyRequest(http.HttpRequest):
- def __init__(self, POST=None):
- super(DummyRequest, self).__init__()
- self.method = POST and "POST" or "GET"
- if POST is not None:
- self.POST.update(POST)
- self._dont_enforce_csrf_checks = True
-
-class WizardTests(TestCase):
-
- def setUp(self):
- # Use a known SECRET_KEY to make security_hash tests deterministic
- self.old_SECRET_KEY = settings.SECRET_KEY
- settings.SECRET_KEY = "123"
-
- def tearDown(self):
- settings.SECRET_KEY = self.old_SECRET_KEY
-
- def test_step_starts_at_zero(self):
- """
- step should be zero for the first form
- """
- wizard = WizardClass([WizardPageOneForm, WizardPageTwoForm])
- request = DummyRequest()
- wizard(request)
- self.assertEquals(0, wizard.step)
-
- def test_step_increments(self):
- """
- step should be incremented when we go to the next page
- """
- wizard = WizardClass([WizardPageOneForm, WizardPageTwoForm])
- request = DummyRequest(POST={"0-field":"test", "wizard_step":"0"})
- response = wizard(request)
- self.assertEquals(1, wizard.step)
-
- def test_14498(self):
- """
- Regression test for ticket #14498.
- """
- that = self
- reached = [False]
-
- class WizardWithProcessStep(WizardClass):
- def process_step(self, request, form, step):
- reached[0] = True
- that.assertTrue(hasattr(form, 'cleaned_data'))
-
- wizard = WizardWithProcessStep([WizardPageOneForm,
- WizardPageTwoForm,
- WizardPageThreeForm])
- data = {"0-field": "test",
- "1-field": "test2",
- "hash_0": "2fdbefd4c0cad51509478fbacddf8b13",
- "wizard_step": "1"}
- wizard(DummyRequest(POST=data))
- self.assertTrue(reached[0])
-
diff --git a/parts/django/django/contrib/formtools/utils.py b/parts/django/django/contrib/formtools/utils.py
deleted file mode 100644
index e77931f..0000000
--- a/parts/django/django/contrib/formtools/utils.py
+++ /dev/null
@@ -1,39 +0,0 @@
-try:
- import cPickle as pickle
-except ImportError:
- import pickle
-
-from django.conf import settings
-from django.utils.hashcompat import md5_constructor
-from django.forms import BooleanField
-
-def security_hash(request, form, *args):
- """
- Calculates a security hash for the given Form instance.
-
- This creates a list of the form field names/values in a deterministic
- order, pickles the result with the SECRET_KEY setting, then takes an md5
- hash of that.
- """
-
- data = []
- for bf in form:
- # Get the value from the form data. If the form allows empty or hasn't
- # changed then don't call clean() to avoid trigger validation errors.
- if form.empty_permitted and not form.has_changed():
- value = bf.data or ''
- else:
- value = bf.field.clean(bf.data) or ''
- if isinstance(value, basestring):
- value = value.strip()
- data.append((bf.name, value))
-
- data.extend(args)
- data.append(settings.SECRET_KEY)
-
- # Use HIGHEST_PROTOCOL because it's the most efficient. It requires
- # Python 2.3, but Django requires 2.4 anyway, so that's OK.
- pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
-
- return md5_constructor(pickled).hexdigest()
-
diff --git a/parts/django/django/contrib/formtools/wizard.py b/parts/django/django/contrib/formtools/wizard.py
deleted file mode 100644
index f86dbad..0000000
--- a/parts/django/django/contrib/formtools/wizard.py
+++ /dev/null
@@ -1,262 +0,0 @@
-"""
-FormWizard class -- implements a multi-page form, validating between each
-step and storing the form's state as HTML hidden fields so that no state is
-stored on the server side.
-"""
-
-import cPickle as pickle
-
-from django import forms
-from django.conf import settings
-from django.http import Http404
-from django.shortcuts import render_to_response
-from django.template.context import RequestContext
-from django.utils.hashcompat import md5_constructor
-from django.utils.translation import ugettext_lazy as _
-from django.contrib.formtools.utils import security_hash
-from django.utils.decorators import method_decorator
-from django.views.decorators.csrf import csrf_protect
-
-
-class FormWizard(object):
- # The HTML (and POST data) field name for the "step" variable.
- step_field_name="wizard_step"
-
- # METHODS SUBCLASSES SHOULDN'T OVERRIDE ###################################
-
- def __init__(self, form_list, initial=None):
- """
- Start a new wizard with a list of forms.
-
- form_list should be a list of Form classes (not instances).
- """
- self.form_list = form_list[:]
- self.initial = initial or {}
-
- # Dictionary of extra template context variables.
- self.extra_context = {}
-
- # A zero-based counter keeping track of which step we're in.
- self.step = 0
-
- def __repr__(self):
- return "step: %d\nform_list: %s\ninitial_data: %s" % (self.step, self.form_list, self.initial)
-
- def get_form(self, step, data=None):
- "Helper method that returns the Form instance for the given step."
- return self.form_list[step](data, prefix=self.prefix_for_step(step), initial=self.initial.get(step, None))
-
- def num_steps(self):
- "Helper method that returns the number of steps."
- # You might think we should just set "self.num_steps = len(form_list)"
- # in __init__(), but this calculation needs to be dynamic, because some
- # hook methods might alter self.form_list.
- return len(self.form_list)
-
- @method_decorator(csrf_protect)
- def __call__(self, request, *args, **kwargs):
- """
- Main method that does all the hard work, conforming to the Django view
- interface.
- """
- if 'extra_context' in kwargs:
- self.extra_context.update(kwargs['extra_context'])
- current_step = self.determine_step(request, *args, **kwargs)
- self.parse_params(request, *args, **kwargs)
-
- # Sanity check.
- if current_step >= self.num_steps():
- raise Http404('Step %s does not exist' % current_step)
-
- # Process the current step. If it's valid, go to the next step or call
- # done(), depending on whether any steps remain.
- if request.method == 'POST':
- form = self.get_form(current_step, request.POST)
- else:
- form = self.get_form(current_step)
-
- if form.is_valid():
- # Validate all the forms. If any of them fail validation, that
- # must mean the validator relied on some other input, such as
- # an external Web site.
-
- # It is also possible that validation might fail under certain
- # attack situations: an attacker might be able to bypass previous
- # stages, and generate correct security hashes for all the
- # skipped stages by virtue of:
- # 1) having filled out an identical form which doesn't have the
- # validation (and does something different at the end),
- # 2) or having filled out a previous version of the same form
- # which had some validation missing,
- # 3) or previously having filled out the form when they had
- # more privileges than they do now.
- #
- # Since the hashes only take into account values, and not other
- # other validation the form might do, we must re-do validation
- # now for security reasons.
- current_form_list = [self.get_form(i, request.POST) for i in range(current_step)]
-
- for i, f in enumerate(current_form_list):
- if request.POST.get("hash_%d" % i, '') != self.security_hash(request, f):
- return self.render_hash_failure(request, i)
-
- if not f.is_valid():
- return self.render_revalidation_failure(request, i, f)
- else:
- self.process_step(request, f, i)
-
- # Now progress to processing this step:
- self.process_step(request, form, current_step)
- next_step = current_step + 1
-
-
- if next_step == self.num_steps():
- return self.done(request, current_form_list)
- else:
- form = self.get_form(next_step)
- self.step = current_step = next_step
-
- return self.render(form, request, current_step)
-
- def render(self, form, request, step, context=None):
- "Renders the given Form object, returning an HttpResponse."
- old_data = request.POST
- prev_fields = []
- if old_data:
- hidden = forms.HiddenInput()
- # Collect all data from previous steps and render it as HTML hidden fields.
- for i in range(step):
- old_form = self.get_form(i, old_data)
- hash_name = 'hash_%s' % i
- prev_fields.extend([bf.as_hidden() for bf in old_form])
- prev_fields.append(hidden.render(hash_name, old_data.get(hash_name, self.security_hash(request, old_form))))
- return self.render_template(request, form, ''.join(prev_fields), step, context)
-
- # METHODS SUBCLASSES MIGHT OVERRIDE IF APPROPRIATE ########################
-
- def prefix_for_step(self, step):
- "Given the step, returns a Form prefix to use."
- return str(step)
-
- def render_hash_failure(self, request, step):
- """
- Hook for rendering a template if a hash check failed.
-
- step is the step that failed. Any previous step is guaranteed to be
- valid.
-
- This default implementation simply renders the form for the given step,
- but subclasses may want to display an error message, etc.
- """
- return self.render(self.get_form(step), request, step, context={'wizard_error': _('We apologize, but your form has expired. Please continue filling out the form from this page.')})
-
- def render_revalidation_failure(self, request, step, form):
- """
- Hook for rendering a template if final revalidation failed.
-
- It is highly unlikely that this point would ever be reached, but See
- the comment in __call__() for an explanation.
- """
- return self.render(form, request, step)
-
- def security_hash(self, request, form):
- """
- Calculates the security hash for the given HttpRequest and Form instances.
-
- Subclasses may want to take into account request-specific information,
- such as the IP address.
- """
- return security_hash(request, form)
-
- def determine_step(self, request, *args, **kwargs):
- """
- Given the request object and whatever *args and **kwargs were passed to
- __call__(), returns the current step (which is zero-based).
-
- Note that the result should not be trusted. It may even be a completely
- invalid number. It's not the job of this method to validate it.
- """
- if not request.POST:
- return 0
- try:
- step = int(request.POST.get(self.step_field_name, 0))
- except ValueError:
- return 0
- return step
-
- def parse_params(self, request, *args, **kwargs):
- """
- Hook for setting some state, given the request object and whatever
- *args and **kwargs were passed to __call__(), sets some state.
-
- This is called at the beginning of __call__().
- """
- pass
-
- def get_template(self, step):
- """
- Hook for specifying the name of the template to use for a given step.
-
- Note that this can return a tuple of template names if you'd like to
- use the template system's select_template() hook.
- """
- return 'forms/wizard.html'
-
- def render_template(self, request, form, previous_fields, step, context=None):
- """
- Renders the template for the given step, returning an HttpResponse object.
-
- Override this method if you want to add a custom context, return a
- different MIME type, etc. If you only need to override the template
- name, use get_template() instead.
-
- The template will be rendered with the following context:
- step_field -- The name of the hidden field containing the step.
- step0 -- The current step (zero-based).
- step -- The current step (one-based).
- step_count -- The total number of steps.
- form -- The Form instance for the current step (either empty
- or with errors).
- previous_fields -- A string representing every previous data field,
- plus hashes for completed forms, all in the form of
- hidden fields. Note that you'll need to run this
- through the "safe" template filter, to prevent
- auto-escaping, because it's raw HTML.
- """
- context = context or {}
- context.update(self.extra_context)
- return render_to_response(self.get_template(step), dict(context,
- step_field=self.step_field_name,
- step0=step,
- step=step + 1,
- step_count=self.num_steps(),
- form=form,
- previous_fields=previous_fields
- ), context_instance=RequestContext(request))
-
- def process_step(self, request, form, step):
- """
- Hook for modifying the FormWizard's internal state, given a fully
- validated Form object. The Form is guaranteed to have clean, valid
- data.
-
- This method should *not* modify any of that data. Rather, it might want
- to set self.extra_context or dynamically alter self.form_list, based on
- previously submitted forms.
-
- Note that this method is called every time a page is rendered for *all*
- submitted steps.
- """
- pass
-
- # METHODS SUBCLASSES MUST OVERRIDE ########################################
-
- def done(self, request, form_list):
- """
- Hook for doing something with the validated data. This is responsible
- for the final processing.
-
- form_list is a list of Form instances, each containing clean, valid
- data.
- """
- raise NotImplementedError("Your %s class has not defined a done() method, which is required." % self.__class__.__name__)
diff --git a/parts/django/django/contrib/gis/__init__.py b/parts/django/django/contrib/gis/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/admin/__init__.py b/parts/django/django/contrib/gis/admin/__init__.py
deleted file mode 100644
index 2b56276..0000000
--- a/parts/django/django/contrib/gis/admin/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Getting the normal admin routines, classes, and `site` instance.
-from django.contrib.admin import autodiscover, site, AdminSite, ModelAdmin, StackedInline, TabularInline, HORIZONTAL, VERTICAL
-
-# Geographic admin options classes and widgets.
-from django.contrib.gis.admin.options import GeoModelAdmin
-from django.contrib.gis.admin.widgets import OpenLayersWidget
-
-try:
- from django.contrib.gis.admin.options import OSMGeoAdmin
- HAS_OSM = True
-except ImportError:
- HAS_OSM = False
diff --git a/parts/django/django/contrib/gis/admin/options.py b/parts/django/django/contrib/gis/admin/options.py
deleted file mode 100644
index 1814933..0000000
--- a/parts/django/django/contrib/gis/admin/options.py
+++ /dev/null
@@ -1,124 +0,0 @@
-from django.conf import settings
-from django.contrib.admin import ModelAdmin
-from django.contrib.gis.admin.widgets import OpenLayersWidget
-from django.contrib.gis.gdal import OGRGeomType
-from django.contrib.gis.db import models
-
-class GeoModelAdmin(ModelAdmin):
- """
- The administration options class for Geographic models. Map settings
- may be overloaded from their defaults to create custom maps.
- """
- # The default map settings that may be overloaded -- still subject
- # to API changes.
- default_lon = 0
- default_lat = 0
- default_zoom = 4
- display_wkt = False
- display_srid = False
- extra_js = []
- num_zoom = 18
- max_zoom = False
- min_zoom = False
- units = False
- max_resolution = False
- max_extent = False
- modifiable = True
- mouse_position = True
- scale_text = True
- layerswitcher = True
- scrollable = True
- map_width = 600
- map_height = 400
- map_srid = 4326
- map_template = 'gis/admin/openlayers.html'
- openlayers_url = 'http://openlayers.org/api/2.8/OpenLayers.js'
- point_zoom = num_zoom - 6
- wms_url = 'http://labs.metacarta.com/wms/vmap0'
- wms_layer = 'basic'
- wms_name = 'OpenLayers WMS'
- debug = False
- widget = OpenLayersWidget
-
- def _media(self):
- "Injects OpenLayers JavaScript into the admin."
- media = super(GeoModelAdmin, self)._media()
- media.add_js([self.openlayers_url])
- media.add_js(self.extra_js)
- return media
- media = property(_media)
-
- def formfield_for_dbfield(self, db_field, **kwargs):
- """
- Overloaded from ModelAdmin so that an OpenLayersWidget is used
- for viewing/editing GeometryFields.
- """
- if isinstance(db_field, models.GeometryField):
- request = kwargs.pop('request', None)
- # Setting the widget with the newly defined widget.
- kwargs['widget'] = self.get_map_widget(db_field)
- return db_field.formfield(**kwargs)
- else:
- return super(GeoModelAdmin, self).formfield_for_dbfield(db_field, **kwargs)
-
- def get_map_widget(self, db_field):
- """
- Returns a subclass of the OpenLayersWidget (or whatever was specified
- in the `widget` attribute) using the settings from the attributes set
- in this class.
- """
- is_collection = db_field.geom_type in ('MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION')
- if is_collection:
- if db_field.geom_type == 'GEOMETRYCOLLECTION': collection_type = 'Any'
- else: collection_type = OGRGeomType(db_field.geom_type.replace('MULTI', ''))
- else:
- collection_type = 'None'
-
- class OLMap(self.widget):
- template = self.map_template
- geom_type = db_field.geom_type
- params = {'default_lon' : self.default_lon,
- 'default_lat' : self.default_lat,
- 'default_zoom' : self.default_zoom,
- 'display_wkt' : self.debug or self.display_wkt,
- 'geom_type' : OGRGeomType(db_field.geom_type),
- 'field_name' : db_field.name,
- 'is_collection' : is_collection,
- 'scrollable' : self.scrollable,
- 'layerswitcher' : self.layerswitcher,
- 'collection_type' : collection_type,
- 'is_linestring' : db_field.geom_type in ('LINESTRING', 'MULTILINESTRING'),
- 'is_polygon' : db_field.geom_type in ('POLYGON', 'MULTIPOLYGON'),
- 'is_point' : db_field.geom_type in ('POINT', 'MULTIPOINT'),
- 'num_zoom' : self.num_zoom,
- 'max_zoom' : self.max_zoom,
- 'min_zoom' : self.min_zoom,
- 'units' : self.units, #likely shoud get from object
- 'max_resolution' : self.max_resolution,
- 'max_extent' : self.max_extent,
- 'modifiable' : self.modifiable,
- 'mouse_position' : self.mouse_position,
- 'scale_text' : self.scale_text,
- 'map_width' : self.map_width,
- 'map_height' : self.map_height,
- 'point_zoom' : self.point_zoom,
- 'srid' : self.map_srid,
- 'display_srid' : self.display_srid,
- 'wms_url' : self.wms_url,
- 'wms_layer' : self.wms_layer,
- 'wms_name' : self.wms_name,
- 'debug' : self.debug,
- }
- return OLMap
-
-from django.contrib.gis import gdal
-if gdal.HAS_GDAL:
- class OSMGeoAdmin(GeoModelAdmin):
- map_template = 'gis/admin/osm.html'
- extra_js = ['http://openstreetmap.org/openlayers/OpenStreetMap.js']
- num_zoom = 20
- map_srid = 900913
- max_extent = '-20037508,-20037508,20037508,20037508'
- max_resolution = '156543.0339'
- point_zoom = num_zoom - 6
- units = 'm'
diff --git a/parts/django/django/contrib/gis/admin/widgets.py b/parts/django/django/contrib/gis/admin/widgets.py
deleted file mode 100644
index be26261..0000000
--- a/parts/django/django/contrib/gis/admin/widgets.py
+++ /dev/null
@@ -1,107 +0,0 @@
-from django.conf import settings
-from django.contrib.gis.gdal import OGRException
-from django.contrib.gis.geos import GEOSGeometry, GEOSException
-from django.forms.widgets import Textarea
-from django.template import loader, Context
-from django.utils import translation
-
-# Creating a template context that contains Django settings
-# values needed by admin map templates.
-geo_context = Context({'ADMIN_MEDIA_PREFIX' : settings.ADMIN_MEDIA_PREFIX,
- 'LANGUAGE_BIDI' : translation.get_language_bidi(),
- })
-
-class OpenLayersWidget(Textarea):
- """
- Renders an OpenLayers map using the WKT of the geometry.
- """
- def render(self, name, value, attrs=None):
- # Update the template parameters with any attributes passed in.
- if attrs: self.params.update(attrs)
-
- # Defaulting the WKT value to a blank string -- this
- # will be tested in the JavaScript and the appropriate
- # interface will be constructed.
- self.params['wkt'] = ''
-
- # If a string reaches here (via a validation error on another
- # field) then just reconstruct the Geometry.
- if isinstance(value, basestring):
- try:
- value = GEOSGeometry(value)
- except (GEOSException, ValueError):
- value = None
-
- if value and value.geom_type.upper() != self.geom_type:
- value = None
-
- # Constructing the dictionary of the map options.
- self.params['map_options'] = self.map_options()
-
- # Constructing the JavaScript module name using the name of
- # the GeometryField (passed in via the `attrs` keyword).
- # Use the 'name' attr for the field name (rather than 'field')
- self.params['name'] = name
- # note: we must switch out dashes for underscores since js
- # functions are created using the module variable
- js_safe_name = self.params['name'].replace('-','_')
- self.params['module'] = 'geodjango_%s' % js_safe_name
-
- if value:
- # Transforming the geometry to the projection used on the
- # OpenLayers map.
- srid = self.params['srid']
- if value.srid != srid:
- try:
- ogr = value.ogr
- ogr.transform(srid)
- wkt = ogr.wkt
- except OGRException:
- wkt = ''
- else:
- wkt = value.wkt
-
- # Setting the parameter WKT with that of the transformed
- # geometry.
- self.params['wkt'] = wkt
-
- return loader.render_to_string(self.template, self.params,
- context_instance=geo_context)
-
- def map_options(self):
- "Builds the map options hash for the OpenLayers template."
-
- # JavaScript construction utilities for the Bounds and Projection.
- def ol_bounds(extent):
- return 'new OpenLayers.Bounds(%s)' % str(extent)
- def ol_projection(srid):
- return 'new OpenLayers.Projection("EPSG:%s")' % srid
-
- # An array of the parameter name, the name of their OpenLayers
- # counterpart, and the type of variable they are.
- map_types = [('srid', 'projection', 'srid'),
- ('display_srid', 'displayProjection', 'srid'),
- ('units', 'units', str),
- ('max_resolution', 'maxResolution', float),
- ('max_extent', 'maxExtent', 'bounds'),
- ('num_zoom', 'numZoomLevels', int),
- ('max_zoom', 'maxZoomLevels', int),
- ('min_zoom', 'minZoomLevel', int),
- ]
-
- # Building the map options hash.
- map_options = {}
- for param_name, js_name, option_type in map_types:
- if self.params.get(param_name, False):
- if option_type == 'srid':
- value = ol_projection(self.params[param_name])
- elif option_type == 'bounds':
- value = ol_bounds(self.params[param_name])
- elif option_type in (float, int):
- value = self.params[param_name]
- elif option_type in (str,):
- value = '"%s"' % self.params[param_name]
- else:
- raise TypeError
- map_options[js_name] = value
- return map_options
diff --git a/parts/django/django/contrib/gis/db/__init__.py b/parts/django/django/contrib/gis/db/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/db/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/db/backend/__init__.py b/parts/django/django/contrib/gis/db/backend/__init__.py
deleted file mode 100644
index 72ebdfe..0000000
--- a/parts/django/django/contrib/gis/db/backend/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.db import connection
-
-if hasattr(connection.ops, 'spatial_version'):
- from warnings import warn
- warn('The `django.contrib.gis.db.backend` module was refactored and '
- 'renamed to `django.contrib.gis.db.backends` in 1.2. '
- 'All functionality of `SpatialBackend` '
- 'has been moved to the `ops` attribute of the spatial database '
- 'backend. A `SpatialBackend` alias is provided here for '
- 'backwards-compatibility, but will be removed in 1.3.')
- SpatialBackend = connection.ops
diff --git a/parts/django/django/contrib/gis/db/backends/__init__.py b/parts/django/django/contrib/gis/db/backends/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/db/backends/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/db/backends/adapter.py b/parts/django/django/contrib/gis/db/backends/adapter.py
deleted file mode 100644
index 9766ef0..0000000
--- a/parts/django/django/contrib/gis/db/backends/adapter.py
+++ /dev/null
@@ -1,17 +0,0 @@
-class WKTAdapter(object):
- """
- This provides an adaptor for Geometries sent to the
- MySQL and Oracle database backends.
- """
- def __init__(self, geom):
- self.wkt = geom.wkt
- self.srid = geom.srid
-
- def __eq__(self, other):
- return self.wkt == other.wkt and self.srid == other.srid
-
- def __str__(self):
- return self.wkt
-
- def prepare_database_save(self, unused):
- return self
diff --git a/parts/django/django/contrib/gis/db/backends/base.py b/parts/django/django/contrib/gis/db/backends/base.py
deleted file mode 100644
index 0eaacae..0000000
--- a/parts/django/django/contrib/gis/db/backends/base.py
+++ /dev/null
@@ -1,336 +0,0 @@
-"""
-Base/mixin classes for the spatial backend database operations and the
-`SpatialRefSys` model the backend.
-"""
-import re
-from django.conf import settings
-from django.contrib.gis import gdal
-
-class BaseSpatialOperations(object):
- """
- This module holds the base `BaseSpatialBackend` object, which is
- instantiated by each spatial database backend with the features
- it has.
- """
- distance_functions = {}
- geometry_functions = {}
- geometry_operators = {}
- geography_operators = {}
- geography_functions = {}
- gis_terms = {}
- truncate_params = {}
-
- # Quick booleans for the type of this spatial backend, and
- # an attribute for the spatial database version tuple (if applicable)
- postgis = False
- spatialite = False
- mysql = False
- oracle = False
- spatial_version = None
-
- # How the geometry column should be selected.
- select = None
-
- # Does the spatial database have a geography type?
- geography = False
-
- area = False
- centroid = False
- difference = False
- distance = False
- distance_sphere = False
- distance_spheroid = False
- envelope = False
- force_rhr = False
- mem_size = False
- bounding_circle = False
- num_geom = False
- num_points = False
- perimeter = False
- perimeter3d = False
- point_on_surface = False
- polygonize = False
- reverse = False
- scale = False
- snap_to_grid = False
- sym_difference = False
- transform = False
- translate = False
- union = False
-
- # Aggregates
- collect = False
- extent = False
- extent3d = False
- make_line = False
- unionagg = False
-
- # Serialization
- geohash = False
- geojson = False
- gml = False
- kml = False
- svg = False
-
- # Constructors
- from_text = False
- from_wkb = False
-
- # Default conversion functions for aggregates; will be overridden if implemented
- # for the spatial backend.
- def convert_extent(self, box):
- raise NotImplementedError('Aggregate extent not implemented for this spatial backend.')
-
- def convert_extent3d(self, box):
- raise NotImplementedError('Aggregate 3D extent not implemented for this spatial backend.')
-
- def convert_geom(self, geom_val, geom_field):
- raise NotImplementedError('Aggregate method not implemented for this spatial backend.')
-
- # For quoting column values, rather than columns.
- def geo_quote_name(self, name):
- if isinstance(name, unicode):
- name = name.encode('ascii')
- return "'%s'" % name
-
- # GeometryField operations
- def geo_db_type(self, f):
- """
- Returns the database column type for the geometry field on
- the spatial backend.
- """
- raise NotImplementedError
-
- def get_distance(self, f, value, lookup_type):
- """
- Returns the distance parameters for the given geometry field,
- lookup value, and lookup type.
- """
- raise NotImplementedError('Distance operations not available on this spatial backend.')
-
- def get_geom_placeholder(self, f, value):
- """
- Returns the placeholder for the given geometry field with the given
- value. Depending on the spatial backend, the placeholder may contain a
- stored procedure call to the transformation function of the spatial
- backend.
- """
- raise NotImplementedError
-
- # Spatial SQL Construction
- def spatial_aggregate_sql(self, agg):
- raise NotImplementedError('Aggregate support not implemented for this spatial backend.')
-
- def spatial_lookup_sql(self, lvalue, lookup_type, value, field):
- raise NotImplmentedError
-
- # Routines for getting the OGC-compliant models.
- def geometry_columns(self):
- raise NotImplementedError
-
- def spatial_ref_sys(self):
- raise NotImplementedError
-
-class SpatialRefSysMixin(object):
- """
- The SpatialRefSysMixin is a class used by the database-dependent
- SpatialRefSys objects to reduce redundnant code.
- """
- # For pulling out the spheroid from the spatial reference string. This
- # regular expression is used only if the user does not have GDAL installed.
- # TODO: Flattening not used in all ellipsoids, could also be a minor axis,
- # or 'b' parameter.
- spheroid_regex = re.compile(r'.+SPHEROID\[\"(?P<name>.+)\",(?P<major>\d+(\.\d+)?),(?P<flattening>\d{3}\.\d+),')
-
- # For pulling out the units on platforms w/o GDAL installed.
- # TODO: Figure out how to pull out angular units of projected coordinate system and
- # fix for LOCAL_CS types. GDAL should be highly recommended for performing
- # distance queries.
- units_regex = re.compile(r'.+UNIT ?\["(?P<unit_name>[\w \'\(\)]+)", ?(?P<unit>[\d\.]+)(,AUTHORITY\["(?P<unit_auth_name>[\w \'\(\)]+)","(?P<unit_auth_val>\d+)"\])?\]([\w ]+)?(,AUTHORITY\["(?P<auth_name>[\w \'\(\)]+)","(?P<auth_val>\d+)"\])?\]$')
-
- @property
- def srs(self):
- """
- Returns a GDAL SpatialReference object, if GDAL is installed.
- """
- if gdal.HAS_GDAL:
- # TODO: Is caching really necessary here? Is complexity worth it?
- if hasattr(self, '_srs'):
- # Returning a clone of the cached SpatialReference object.
- return self._srs.clone()
- else:
- # Attempting to cache a SpatialReference object.
-
- # Trying to get from WKT first.
- try:
- self._srs = gdal.SpatialReference(self.wkt)
- return self.srs
- except Exception, msg:
- pass
-
- try:
- self._srs = gdal.SpatialReference(self.proj4text)
- return self.srs
- except Exception, msg:
- pass
-
- raise Exception('Could not get OSR SpatialReference from WKT: %s\nError:\n%s' % (self.wkt, msg))
- else:
- raise Exception('GDAL is not installed.')
-
- @property
- def ellipsoid(self):
- """
- Returns a tuple of the ellipsoid parameters:
- (semimajor axis, semiminor axis, and inverse flattening).
- """
- if gdal.HAS_GDAL:
- return self.srs.ellipsoid
- else:
- m = self.spheroid_regex.match(self.wkt)
- if m: return (float(m.group('major')), float(m.group('flattening')))
- else: return None
-
- @property
- def name(self):
- "Returns the projection name."
- return self.srs.name
-
- @property
- def spheroid(self):
- "Returns the spheroid name for this spatial reference."
- return self.srs['spheroid']
-
- @property
- def datum(self):
- "Returns the datum for this spatial reference."
- return self.srs['datum']
-
- @property
- def projected(self):
- "Is this Spatial Reference projected?"
- if gdal.HAS_GDAL:
- return self.srs.projected
- else:
- return self.wkt.startswith('PROJCS')
-
- @property
- def local(self):
- "Is this Spatial Reference local?"
- if gdal.HAS_GDAL:
- return self.srs.local
- else:
- return self.wkt.startswith('LOCAL_CS')
-
- @property
- def geographic(self):
- "Is this Spatial Reference geographic?"
- if gdal.HAS_GDAL:
- return self.srs.geographic
- else:
- return self.wkt.startswith('GEOGCS')
-
- @property
- def linear_name(self):
- "Returns the linear units name."
- if gdal.HAS_GDAL:
- return self.srs.linear_name
- elif self.geographic:
- return None
- else:
- m = self.units_regex.match(self.wkt)
- return m.group('unit_name')
-
- @property
- def linear_units(self):
- "Returns the linear units."
- if gdal.HAS_GDAL:
- return self.srs.linear_units
- elif self.geographic:
- return None
- else:
- m = self.units_regex.match(self.wkt)
- return m.group('unit')
-
- @property
- def angular_name(self):
- "Returns the name of the angular units."
- if gdal.HAS_GDAL:
- return self.srs.angular_name
- elif self.projected:
- return None
- else:
- m = self.units_regex.match(self.wkt)
- return m.group('unit_name')
-
- @property
- def angular_units(self):
- "Returns the angular units."
- if gdal.HAS_GDAL:
- return self.srs.angular_units
- elif self.projected:
- return None
- else:
- m = self.units_regex.match(self.wkt)
- return m.group('unit')
-
- @property
- def units(self):
- "Returns a tuple of the units and the name."
- if self.projected or self.local:
- return (self.linear_units, self.linear_name)
- elif self.geographic:
- return (self.angular_units, self.angular_name)
- else:
- return (None, None)
-
- @classmethod
- def get_units(cls, wkt):
- """
- Class method used by GeometryField on initialization to
- retrive the units on the given WKT, without having to use
- any of the database fields.
- """
- if gdal.HAS_GDAL:
- return gdal.SpatialReference(wkt).units
- else:
- m = cls.units_regex.match(wkt)
- return m.group('unit'), m.group('unit_name')
-
- @classmethod
- def get_spheroid(cls, wkt, string=True):
- """
- Class method used by GeometryField on initialization to
- retrieve the `SPHEROID[..]` parameters from the given WKT.
- """
- if gdal.HAS_GDAL:
- srs = gdal.SpatialReference(wkt)
- sphere_params = srs.ellipsoid
- sphere_name = srs['spheroid']
- else:
- m = cls.spheroid_regex.match(wkt)
- if m:
- sphere_params = (float(m.group('major')), float(m.group('flattening')))
- sphere_name = m.group('name')
- else:
- return None
-
- if not string:
- return sphere_name, sphere_params
- else:
- # `string` parameter used to place in format acceptable by PostGIS
- if len(sphere_params) == 3:
- radius, flattening = sphere_params[0], sphere_params[2]
- else:
- radius, flattening = sphere_params
- return 'SPHEROID["%s",%s,%s]' % (sphere_name, radius, flattening)
-
- def __unicode__(self):
- """
- Returns the string representation. If GDAL is installed,
- it will be 'pretty' OGC WKT.
- """
- try:
- return unicode(self.srs)
- except:
- return unicode(self.wkt)
diff --git a/parts/django/django/contrib/gis/db/backends/mysql/__init__.py b/parts/django/django/contrib/gis/db/backends/mysql/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/db/backends/mysql/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/db/backends/mysql/base.py b/parts/django/django/contrib/gis/db/backends/mysql/base.py
deleted file mode 100644
index 7f0fc48..0000000
--- a/parts/django/django/contrib/gis/db/backends/mysql/base.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.db.backends.mysql.base import *
-from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper
-from django.contrib.gis.db.backends.mysql.creation import MySQLCreation
-from django.contrib.gis.db.backends.mysql.introspection import MySQLIntrospection
-from django.contrib.gis.db.backends.mysql.operations import MySQLOperations
-
-class DatabaseWrapper(MySQLDatabaseWrapper):
-
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
- self.creation = MySQLCreation(self)
- self.ops = MySQLOperations()
- self.introspection = MySQLIntrospection(self)
diff --git a/parts/django/django/contrib/gis/db/backends/mysql/creation.py b/parts/django/django/contrib/gis/db/backends/mysql/creation.py
deleted file mode 100644
index dda77ea..0000000
--- a/parts/django/django/contrib/gis/db/backends/mysql/creation.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from django.db.backends.mysql.creation import DatabaseCreation
-
-class MySQLCreation(DatabaseCreation):
-
- def sql_indexes_for_field(self, model, f, style):
- from django.contrib.gis.db.models.fields import GeometryField
- output = super(MySQLCreation, self).sql_indexes_for_field(model, f, style)
-
- if isinstance(f, GeometryField) and f.spatial_index:
- qn = self.connection.ops.quote_name
- db_table = model._meta.db_table
- idx_name = '%s_%s_id' % (db_table, f.column)
- output.append(style.SQL_KEYWORD('CREATE SPATIAL INDEX ') +
- style.SQL_TABLE(qn(idx_name)) +
- style.SQL_KEYWORD(' ON ') +
- style.SQL_TABLE(qn(db_table)) + '(' +
- style.SQL_FIELD(qn(f.column)) + ');')
- return output
diff --git a/parts/django/django/contrib/gis/db/backends/mysql/introspection.py b/parts/django/django/contrib/gis/db/backends/mysql/introspection.py
deleted file mode 100644
index 59d0f62..0000000
--- a/parts/django/django/contrib/gis/db/backends/mysql/introspection.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from MySQLdb.constants import FIELD_TYPE
-
-from django.contrib.gis.gdal import OGRGeomType
-from django.db.backends.mysql.introspection import DatabaseIntrospection
-
-class MySQLIntrospection(DatabaseIntrospection):
- # Updating the data_types_reverse dictionary with the appropriate
- # type for Geometry fields.
- data_types_reverse = DatabaseIntrospection.data_types_reverse.copy()
- data_types_reverse[FIELD_TYPE.GEOMETRY] = 'GeometryField'
-
- def get_geometry_type(self, table_name, geo_col):
- cursor = self.connection.cursor()
- try:
- # In order to get the specific geometry type of the field,
- # we introspect on the table definition using `DESCRIBE`.
- cursor.execute('DESCRIBE %s' %
- self.connection.ops.quote_name(table_name))
- # Increment over description info until we get to the geometry
- # column.
- for column, typ, null, key, default, extra in cursor.fetchall():
- if column == geo_col:
- # Using OGRGeomType to convert from OGC name to Django field.
- # MySQL does not support 3D or SRIDs, so the field params
- # are empty.
- field_type = OGRGeomType(typ).django
- field_params = {}
- break
- finally:
- cursor.close()
-
- return field_type, field_params
diff --git a/parts/django/django/contrib/gis/db/backends/mysql/operations.py b/parts/django/django/contrib/gis/db/backends/mysql/operations.py
deleted file mode 100644
index 1653636..0000000
--- a/parts/django/django/contrib/gis/db/backends/mysql/operations.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from django.db.backends.mysql.base import DatabaseOperations
-
-from django.contrib.gis.db.backends.adapter import WKTAdapter
-from django.contrib.gis.db.backends.base import BaseSpatialOperations
-
-class MySQLOperations(DatabaseOperations, BaseSpatialOperations):
-
- compiler_module = 'django.contrib.gis.db.models.sql.compiler'
- mysql = True
- name = 'mysql'
- select = 'AsText(%s)'
- from_wkb = 'GeomFromWKB'
- from_text = 'GeomFromText'
-
- Adapter = WKTAdapter
- Adaptor = Adapter # Backwards-compatibility alias.
-
- geometry_functions = {
- 'bbcontains' : 'MBRContains', # For consistency w/PostGIS API
- 'bboverlaps' : 'MBROverlaps', # .. ..
- 'contained' : 'MBRWithin', # .. ..
- 'contains' : 'MBRContains',
- 'disjoint' : 'MBRDisjoint',
- 'equals' : 'MBREqual',
- 'exact' : 'MBREqual',
- 'intersects' : 'MBRIntersects',
- 'overlaps' : 'MBROverlaps',
- 'same_as' : 'MBREqual',
- 'touches' : 'MBRTouches',
- 'within' : 'MBRWithin',
- }
-
- gis_terms = dict([(term, None) for term in geometry_functions.keys() + ['isnull']])
-
- def geo_db_type(self, f):
- return f.geom_type
-
- def get_geom_placeholder(self, value, srid):
- """
- The placeholder here has to include MySQL's WKT constructor. Because
- MySQL does not support spatial transformations, there is no need to
- modify the placeholder based on the contents of the given value.
- """
- if hasattr(value, 'expression'):
- placeholder = '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
- else:
- placeholder = '%s(%%s)' % self.from_text
- return placeholder
-
- def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
- alias, col, db_type = lvalue
-
- geo_col = '%s.%s' % (qn(alias), qn(col))
-
- lookup_info = self.geometry_functions.get(lookup_type, False)
- if lookup_info:
- return "%s(%s, %s)" % (lookup_info, geo_col,
- self.get_geom_placeholder(value, field.srid))
-
- # TODO: Is this really necessary? MySQL can't handle NULL geometries
- # in its spatial indexes anyways.
- if lookup_type == 'isnull':
- return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
-
- raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/__init__.py b/parts/django/django/contrib/gis/db/backends/oracle/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/adapter.py b/parts/django/django/contrib/gis/db/backends/oracle/adapter.py
deleted file mode 100644
index ea340d9..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/adapter.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from cx_Oracle import CLOB
-from django.contrib.gis.db.backends.adapter import WKTAdapter
-
-class OracleSpatialAdapter(WKTAdapter):
- input_size = CLOB
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/base.py b/parts/django/django/contrib/gis/db/backends/oracle/base.py
deleted file mode 100644
index 398b3d3..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/base.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.db.backends.oracle.base import *
-from django.db.backends.oracle.base import DatabaseWrapper as OracleDatabaseWrapper
-from django.contrib.gis.db.backends.oracle.creation import OracleCreation
-from django.contrib.gis.db.backends.oracle.introspection import OracleIntrospection
-from django.contrib.gis.db.backends.oracle.operations import OracleOperations
-
-class DatabaseWrapper(OracleDatabaseWrapper):
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
- self.ops = OracleOperations(self)
- self.creation = OracleCreation(self)
- self.introspection = OracleIntrospection(self)
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/compiler.py b/parts/django/django/contrib/gis/db/backends/oracle/compiler.py
deleted file mode 100644
index f0eb5ca..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/compiler.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from django.contrib.gis.db.models.sql.compiler import GeoSQLCompiler as BaseGeoSQLCompiler
-from django.db.backends.oracle import compiler
-
-SQLCompiler = compiler.SQLCompiler
-
-class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler):
- pass
-
-class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler):
- def placeholder(self, field, val):
- if field is None:
- # A field value of None means the value is raw.
- return val
- elif hasattr(field, 'get_placeholder'):
- # Some fields (e.g. geo fields) need special munging before
- # they can be inserted.
- ph = field.get_placeholder(val, self.connection)
- if ph == 'NULL':
- # If the placeholder returned is 'NULL', then we need to
- # to remove None from the Query parameters. Specifically,
- # cx_Oracle will assume a CHAR type when a placeholder ('%s')
- # is used for columns of MDSYS.SDO_GEOMETRY. Thus, we use
- # 'NULL' for the value, and remove None from the query params.
- # See also #10888.
- param_idx = self.query.columns.index(field.column)
- params = list(self.query.params)
- params.pop(param_idx)
- self.query.params = tuple(params)
- return ph
- else:
- # Return the common case for the placeholder
- return '%s'
-
-class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler):
- pass
-
-class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler):
- pass
-
-class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler):
- pass
-
-class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler):
- pass
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/creation.py b/parts/django/django/contrib/gis/db/backends/oracle/creation.py
deleted file mode 100644
index 043da91..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/creation.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from django.db.backends.oracle.creation import DatabaseCreation
-from django.db.backends.util import truncate_name
-
-class OracleCreation(DatabaseCreation):
-
- def sql_indexes_for_field(self, model, f, style):
- "Return any spatial index creation SQL for the field."
- from django.contrib.gis.db.models.fields import GeometryField
-
- output = super(OracleCreation, self).sql_indexes_for_field(model, f, style)
-
- if isinstance(f, GeometryField):
- gqn = self.connection.ops.geo_quote_name
- qn = self.connection.ops.quote_name
- db_table = model._meta.db_table
-
- output.append(style.SQL_KEYWORD('INSERT INTO ') +
- style.SQL_TABLE('USER_SDO_GEOM_METADATA') +
- ' (%s, %s, %s, %s)\n ' % tuple(map(qn, ['TABLE_NAME', 'COLUMN_NAME', 'DIMINFO', 'SRID'])) +
- style.SQL_KEYWORD(' VALUES ') + '(\n ' +
- style.SQL_TABLE(gqn(db_table)) + ',\n ' +
- style.SQL_FIELD(gqn(f.column)) + ',\n ' +
- style.SQL_KEYWORD("MDSYS.SDO_DIM_ARRAY") + '(\n ' +
- style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") +
- ("('LONG', %s, %s, %s),\n " % (f._extent[0], f._extent[2], f._tolerance)) +
- style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") +
- ("('LAT', %s, %s, %s)\n ),\n" % (f._extent[1], f._extent[3], f._tolerance)) +
- ' %s\n );' % f.srid)
-
- if f.spatial_index:
- # Getting the index name, Oracle doesn't allow object
- # names > 30 characters.
- idx_name = truncate_name('%s_%s_id' % (db_table, f.column), 30)
-
- output.append(style.SQL_KEYWORD('CREATE INDEX ') +
- style.SQL_TABLE(qn(idx_name)) +
- style.SQL_KEYWORD(' ON ') +
- style.SQL_TABLE(qn(db_table)) + '(' +
- style.SQL_FIELD(qn(f.column)) + ') ' +
- style.SQL_KEYWORD('INDEXTYPE IS ') +
- style.SQL_TABLE('MDSYS.SPATIAL_INDEX') + ';')
- return output
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/introspection.py b/parts/django/django/contrib/gis/db/backends/oracle/introspection.py
deleted file mode 100644
index 58dd3f3..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/introspection.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import cx_Oracle
-from django.db.backends.oracle.introspection import DatabaseIntrospection
-
-class OracleIntrospection(DatabaseIntrospection):
- # Associating any OBJECTVAR instances with GeometryField. Of course,
- # this won't work right on Oracle objects that aren't MDSYS.SDO_GEOMETRY,
- # but it is the only object type supported within Django anyways.
- data_types_reverse = DatabaseIntrospection.data_types_reverse.copy()
- data_types_reverse[cx_Oracle.OBJECT] = 'GeometryField'
-
- def get_geometry_type(self, table_name, geo_col):
- cursor = self.connection.cursor()
- try:
- # Querying USER_SDO_GEOM_METADATA to get the SRID and dimension information.
- try:
- cursor.execute('SELECT "DIMINFO", "SRID" FROM "USER_SDO_GEOM_METADATA" WHERE "TABLE_NAME"=%s AND "COLUMN_NAME"=%s',
- (table_name.upper(), geo_col.upper()))
- row = cursor.fetchone()
- except Exception, msg:
- raise Exception('Could not find entry in USER_SDO_GEOM_METADATA corresponding to "%s"."%s"\n'
- 'Error message: %s.' % (table_name, geo_col, msg))
-
- # TODO: Research way to find a more specific geometry field type for
- # the column's contents.
- field_type = 'GeometryField'
-
- # Getting the field parameters.
- field_params = {}
- dim, srid = row
- if srid != 4326:
- field_params['srid'] = srid
- # Length of object array ( SDO_DIM_ARRAY ) is number of dimensions.
- dim = len(dim)
- if dim != 2:
- field_params['dim'] = dim
- finally:
- cursor.close()
-
- return field_type, field_params
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/models.py b/parts/django/django/contrib/gis/db/backends/oracle/models.py
deleted file mode 100644
index de757ff..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/models.py
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
- The GeometryColumns and SpatialRefSys models for the Oracle spatial
- backend.
-
- It should be noted that Oracle Spatial does not have database tables
- named according to the OGC standard, so the closest analogs are used.
- For example, the `USER_SDO_GEOM_METADATA` is used for the GeometryColumns
- model and the `SDO_COORD_REF_SYS` is used for the SpatialRefSys model.
-"""
-from django.contrib.gis.db import models
-from django.contrib.gis.db.models.fields import GeometryField
-from django.contrib.gis.db.backends.base import SpatialRefSysMixin
-
-class GeometryColumns(models.Model):
- "Maps to the Oracle USER_SDO_GEOM_METADATA table."
- table_name = models.CharField(max_length=32)
- column_name = models.CharField(max_length=1024)
- srid = models.IntegerField(primary_key=True)
- # TODO: Add support for `diminfo` column (type MDSYS.SDO_DIM_ARRAY).
- class Meta:
- db_table = 'USER_SDO_GEOM_METADATA'
- managed = False
-
- @classmethod
- def table_name_col(cls):
- """
- Returns the name of the metadata column used to store the
- the feature table name.
- """
- return 'table_name'
-
- @classmethod
- def geom_col_name(cls):
- """
- Returns the name of the metadata column used to store the
- the feature geometry column.
- """
- return 'column_name'
-
- def __unicode__(self):
- return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid)
-
-class SpatialRefSys(models.Model, SpatialRefSysMixin):
- "Maps to the Oracle MDSYS.CS_SRS table."
- cs_name = models.CharField(max_length=68)
- srid = models.IntegerField(primary_key=True)
- auth_srid = models.IntegerField()
- auth_name = models.CharField(max_length=256)
- wktext = models.CharField(max_length=2046)
- # Optional geometry representing the bounds of this coordinate
- # system. By default, all are NULL in the table.
- cs_bounds = models.PolygonField(null=True)
- objects = models.GeoManager()
-
- class Meta:
- db_table = 'CS_SRS'
- managed = False
-
- @property
- def wkt(self):
- return self.wktext
-
- @classmethod
- def wkt_col(cls):
- return 'wktext'
diff --git a/parts/django/django/contrib/gis/db/backends/oracle/operations.py b/parts/django/django/contrib/gis/db/backends/oracle/operations.py
deleted file mode 100644
index 97f7b6c..0000000
--- a/parts/django/django/contrib/gis/db/backends/oracle/operations.py
+++ /dev/null
@@ -1,293 +0,0 @@
-"""
- This module contains the spatial lookup types, and the `get_geo_where_clause`
- routine for Oracle Spatial.
-
- Please note that WKT support is broken on the XE version, and thus
- this backend will not work on such platforms. Specifically, XE lacks
- support for an internal JVM, and Java libraries are required to use
- the WKT constructors.
-"""
-import re
-from decimal import Decimal
-
-from django.db.backends.oracle.base import DatabaseOperations
-from django.contrib.gis.db.backends.base import BaseSpatialOperations
-from django.contrib.gis.db.backends.oracle.adapter import OracleSpatialAdapter
-from django.contrib.gis.db.backends.util import SpatialFunction
-from django.contrib.gis.geometry.backend import Geometry
-from django.contrib.gis.measure import Distance
-
-class SDOOperation(SpatialFunction):
- "Base class for SDO* Oracle operations."
- sql_template = "%(function)s(%(geo_col)s, %(geometry)s) %(operator)s '%(result)s'"
-
- def __init__(self, func, **kwargs):
- kwargs.setdefault('operator', '=')
- kwargs.setdefault('result', 'TRUE')
- super(SDOOperation, self).__init__(func, **kwargs)
-
-class SDODistance(SpatialFunction):
- "Class for Distance queries."
- sql_template = ('%(function)s(%(geo_col)s, %(geometry)s, %(tolerance)s) '
- '%(operator)s %(result)s')
- dist_func = 'SDO_GEOM.SDO_DISTANCE'
- def __init__(self, op, tolerance=0.05):
- super(SDODistance, self).__init__(self.dist_func,
- tolerance=tolerance,
- operator=op, result='%s')
-
-class SDODWithin(SpatialFunction):
- dwithin_func = 'SDO_WITHIN_DISTANCE'
- sql_template = "%(function)s(%(geo_col)s, %(geometry)s, %%s) = 'TRUE'"
- def __init__(self):
- super(SDODWithin, self).__init__(self.dwithin_func)
-
-class SDOGeomRelate(SpatialFunction):
- "Class for using SDO_GEOM.RELATE."
- relate_func = 'SDO_GEOM.RELATE'
- sql_template = ("%(function)s(%(geo_col)s, '%(mask)s', %(geometry)s, "
- "%(tolerance)s) %(operator)s '%(mask)s'")
- def __init__(self, mask, tolerance=0.05):
- # SDO_GEOM.RELATE(...) has a peculiar argument order: column, mask, geom, tolerance.
- # Moreover, the runction result is the mask (e.g., 'DISJOINT' instead of 'TRUE').
- super(SDOGeomRelate, self).__init__(self.relate_func, operator='=',
- mask=mask, tolerance=tolerance)
-
-class SDORelate(SpatialFunction):
- "Class for using SDO_RELATE."
- masks = 'TOUCH|OVERLAPBDYDISJOINT|OVERLAPBDYINTERSECT|EQUAL|INSIDE|COVEREDBY|CONTAINS|COVERS|ANYINTERACT|ON'
- mask_regex = re.compile(r'^(%s)(\+(%s))*$' % (masks, masks), re.I)
- sql_template = "%(function)s(%(geo_col)s, %(geometry)s, 'mask=%(mask)s') = 'TRUE'"
- relate_func = 'SDO_RELATE'
- def __init__(self, mask):
- if not self.mask_regex.match(mask):
- raise ValueError('Invalid %s mask: "%s"' % (self.relate_func, mask))
- super(SDORelate, self).__init__(self.relate_func, mask=mask)
-
-# Valid distance types and substitutions
-dtypes = (Decimal, Distance, float, int, long)
-
-class OracleOperations(DatabaseOperations, BaseSpatialOperations):
- compiler_module = "django.contrib.gis.db.backends.oracle.compiler"
-
- name = 'oracle'
- oracle = True
- valid_aggregates = dict([(a, None) for a in ('Union', 'Extent')])
-
- Adapter = OracleSpatialAdapter
- Adaptor = Adapter # Backwards-compatibility alias.
-
- area = 'SDO_GEOM.SDO_AREA'
- gml= 'SDO_UTIL.TO_GMLGEOMETRY'
- centroid = 'SDO_GEOM.SDO_CENTROID'
- difference = 'SDO_GEOM.SDO_DIFFERENCE'
- distance = 'SDO_GEOM.SDO_DISTANCE'
- extent= 'SDO_AGGR_MBR'
- intersection= 'SDO_GEOM.SDO_INTERSECTION'
- length = 'SDO_GEOM.SDO_LENGTH'
- num_geom = 'SDO_UTIL.GETNUMELEM'
- num_points = 'SDO_UTIL.GETNUMVERTICES'
- perimeter = length
- point_on_surface = 'SDO_GEOM.SDO_POINTONSURFACE'
- reverse = 'SDO_UTIL.REVERSE_LINESTRING'
- sym_difference = 'SDO_GEOM.SDO_XOR'
- transform = 'SDO_CS.TRANSFORM'
- union = 'SDO_GEOM.SDO_UNION'
- unionagg = 'SDO_AGGR_UNION'
-
- # We want to get SDO Geometries as WKT because it is much easier to
- # instantiate GEOS proxies from WKT than SDO_GEOMETRY(...) strings.
- # However, this adversely affects performance (i.e., Java is called
- # to convert to WKT on every query). If someone wishes to write a
- # SDO_GEOMETRY(...) parser in Python, let me know =)
- select = 'SDO_UTIL.TO_WKTGEOMETRY(%s)'
-
- distance_functions = {
- 'distance_gt' : (SDODistance('>'), dtypes),
- 'distance_gte' : (SDODistance('>='), dtypes),
- 'distance_lt' : (SDODistance('<'), dtypes),
- 'distance_lte' : (SDODistance('<='), dtypes),
- 'dwithin' : (SDODWithin(), dtypes),
- }
-
- geometry_functions = {
- 'contains' : SDOOperation('SDO_CONTAINS'),
- 'coveredby' : SDOOperation('SDO_COVEREDBY'),
- 'covers' : SDOOperation('SDO_COVERS'),
- 'disjoint' : SDOGeomRelate('DISJOINT'),
- 'intersects' : SDOOperation('SDO_OVERLAPBDYINTERSECT'), # TODO: Is this really the same as ST_Intersects()?
- 'equals' : SDOOperation('SDO_EQUAL'),
- 'exact' : SDOOperation('SDO_EQUAL'),
- 'overlaps' : SDOOperation('SDO_OVERLAPS'),
- 'same_as' : SDOOperation('SDO_EQUAL'),
- 'relate' : (SDORelate, basestring), # Oracle uses a different syntax, e.g., 'mask=inside+touch'
- 'touches' : SDOOperation('SDO_TOUCH'),
- 'within' : SDOOperation('SDO_INSIDE'),
- }
- geometry_functions.update(distance_functions)
-
- gis_terms = ['isnull']
- gis_terms += geometry_functions.keys()
- gis_terms = dict([(term, None) for term in gis_terms])
-
- truncate_params = {'relate' : None}
-
- def __init__(self, connection):
- super(OracleOperations, self).__init__()
- self.connection = connection
-
- def convert_extent(self, clob):
- if clob:
- # Generally, Oracle returns a polygon for the extent -- however,
- # it can return a single point if there's only one Point in the
- # table.
- ext_geom = Geometry(clob.read())
- gtype = str(ext_geom.geom_type)
- if gtype == 'Polygon':
- # Construct the 4-tuple from the coordinates in the polygon.
- shell = ext_geom.shell
- ll, ur = shell[0][:2], shell[2][:2]
- elif gtype == 'Point':
- ll = ext_geom.coords[:2]
- ur = ll
- else:
- raise Exception('Unexpected geometry type returned for extent: %s' % gtype)
- xmin, ymin = ll
- xmax, ymax = ur
- return (xmin, ymin, xmax, ymax)
- else:
- return None
-
- def convert_geom(self, clob, geo_field):
- if clob:
- return Geometry(clob.read(), geo_field.srid)
- else:
- return None
-
- def geo_db_type(self, f):
- """
- Returns the geometry database type for Oracle. Unlike other spatial
- backends, no stored procedure is necessary and it's the same for all
- geometry types.
- """
- return 'MDSYS.SDO_GEOMETRY'
-
- def get_distance(self, f, value, lookup_type):
- """
- Returns the distance parameters given the value and the lookup type.
- On Oracle, geometry columns with a geodetic coordinate system behave
- implicitly like a geography column, and thus meters will be used as
- the distance parameter on them.
- """
- if not value:
- return []
- value = value[0]
- if isinstance(value, Distance):
- if f.geodetic(self.connection):
- dist_param = value.m
- else:
- dist_param = getattr(value, Distance.unit_attname(f.units_name(self.connection)))
- else:
- dist_param = value
-
- # dwithin lookups on oracle require a special string parameter
- # that starts with "distance=".
- if lookup_type == 'dwithin':
- dist_param = 'distance=%s' % dist_param
-
- return [dist_param]
-
- def get_geom_placeholder(self, f, value):
- """
- Provides a proper substitution value for Geometries that are not in the
- SRID of the field. Specifically, this routine will substitute in the
- SDO_CS.TRANSFORM() function call.
- """
- if value is None:
- return 'NULL'
-
- def transform_value(val, srid):
- return val.srid != srid
-
- if hasattr(value, 'expression'):
- if transform_value(value, f.srid):
- placeholder = '%s(%%s, %s)' % (self.transform, f.srid)
- else:
- placeholder = '%s'
- # No geometry value used for F expression, substitue in
- # the column name instead.
- return placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
- else:
- if transform_value(value, f.srid):
- return '%s(SDO_GEOMETRY(%%s, %s), %s)' % (self.transform, value.srid, f.srid)
- else:
- return 'SDO_GEOMETRY(%%s, %s)' % f.srid
-
- def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
- "Returns the SQL WHERE clause for use in Oracle spatial SQL construction."
- alias, col, db_type = lvalue
-
- # Getting the quoted table name as `geo_col`.
- geo_col = '%s.%s' % (qn(alias), qn(col))
-
- # See if a Oracle Geometry function matches the lookup type next
- lookup_info = self.geometry_functions.get(lookup_type, False)
- if lookup_info:
- # Lookup types that are tuples take tuple arguments, e.g., 'relate' and
- # 'dwithin' lookup types.
- if isinstance(lookup_info, tuple):
- # First element of tuple is lookup type, second element is the type
- # of the expected argument (e.g., str, float)
- sdo_op, arg_type = lookup_info
- geom = value[0]
-
- # Ensuring that a tuple _value_ was passed in from the user
- if not isinstance(value, tuple):
- raise ValueError('Tuple required for `%s` lookup type.' % lookup_type)
- if len(value) != 2:
- raise ValueError('2-element tuple required for %s lookup type.' % lookup_type)
-
- # Ensuring the argument type matches what we expect.
- if not isinstance(value[1], arg_type):
- raise ValueError('Argument type should be %s, got %s instead.' % (arg_type, type(value[1])))
-
- if lookup_type == 'relate':
- # The SDORelate class handles construction for these queries,
- # and verifies the mask argument.
- return sdo_op(value[1]).as_sql(geo_col, self.get_geom_placeholder(field, geom))
- else:
- # Otherwise, just call the `as_sql` method on the SDOOperation instance.
- return sdo_op.as_sql(geo_col, self.get_geom_placeholder(field, geom))
- else:
- # Lookup info is a SDOOperation instance, whose `as_sql` method returns
- # the SQL necessary for the geometry function call. For example:
- # SDO_CONTAINS("geoapp_country"."poly", SDO_GEOMTRY('POINT(5 23)', 4326)) = 'TRUE'
- return lookup_info.as_sql(geo_col, self.get_geom_placeholder(field, value))
- elif lookup_type == 'isnull':
- # Handling 'isnull' lookup type
- return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
-
- raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
-
- def spatial_aggregate_sql(self, agg):
- """
- Returns the spatial aggregate SQL template and function for the
- given Aggregate instance.
- """
- agg_name = agg.__class__.__name__.lower()
- if agg_name == 'union' : agg_name += 'agg'
- if agg.is_extent:
- sql_template = '%(function)s(%(field)s)'
- else:
- sql_template = '%(function)s(SDOAGGRTYPE(%(field)s,%(tolerance)s))'
- sql_function = getattr(self, agg_name)
- return self.select % sql_template, sql_function
-
- # Routines for getting the OGC-compliant models.
- def geometry_columns(self):
- from django.contrib.gis.db.backends.oracle.models import GeometryColumns
- return GeometryColumns
-
- def spatial_ref_sys(self):
- from django.contrib.gis.db.backends.oracle.models import SpatialRefSys
- return SpatialRefSys
diff --git a/parts/django/django/contrib/gis/db/backends/postgis/__init__.py b/parts/django/django/contrib/gis/db/backends/postgis/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/db/backends/postgis/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/db/backends/postgis/adapter.py b/parts/django/django/contrib/gis/db/backends/postgis/adapter.py
deleted file mode 100644
index 3f8603e..0000000
--- a/parts/django/django/contrib/gis/db/backends/postgis/adapter.py
+++ /dev/null
@@ -1,35 +0,0 @@
-"""
- This object provides quoting for GEOS geometries into PostgreSQL/PostGIS.
-"""
-
-from psycopg2 import Binary
-from psycopg2.extensions import ISQLQuote
-
-class PostGISAdapter(object):
- def __init__(self, geom):
- "Initializes on the geometry."
- # Getting the WKB (in string form, to allow easy pickling of
- # the adaptor) and the SRID from the geometry.
- self.ewkb = str(geom.ewkb)
- self.srid = geom.srid
-
- def __conform__(self, proto):
- # Does the given protocol conform to what Psycopg2 expects?
- if proto == ISQLQuote:
- return self
- else:
- raise Exception('Error implementing psycopg2 protocol. Is psycopg2 installed?')
-
- def __eq__(self, other):
- return (self.ewkb == other.ewkb) and (self.srid == other.srid)
-
- def __str__(self):
- return self.getquoted()
-
- def getquoted(self):
- "Returns a properly quoted string for use in PostgreSQL/PostGIS."
- # Want to use WKB, so wrap with psycopg2 Binary() to quote properly.
- return 'ST_GeomFromEWKB(E%s)' % Binary(self.ewkb)
-
- def prepare_database_save(self, unused):
- return self
diff --git a/parts/django/django/contrib/gis/db/backends/postgis/base.py b/parts/django/django/contrib/gis/db/backends/postgis/base.py
deleted file mode 100644
index 634a7d5..0000000
--- a/parts/django/django/contrib/gis/db/backends/postgis/base.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.db.backends.postgresql_psycopg2.base import *
-from django.db.backends.postgresql_psycopg2.base import DatabaseWrapper as Psycopg2DatabaseWrapper
-from django.contrib.gis.db.backends.postgis.creation import PostGISCreation
-from django.contrib.gis.db.backends.postgis.introspection import PostGISIntrospection
-from django.contrib.gis.db.backends.postgis.operations import PostGISOperations
-
-class DatabaseWrapper(Psycopg2DatabaseWrapper):
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
- self.creation = PostGISCreation(self)
- self.ops = PostGISOperations(self)
- self.introspection = PostGISIntrospection(self)
diff --git a/parts/django/django/contrib/gis/db/backends/postgis/creation.py b/parts/django/django/contrib/gis/db/backends/postgis/creation.py
deleted file mode 100644
index e14c792..0000000
--- a/parts/django/django/contrib/gis/db/backends/postgis/creation.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from django.conf import settings
-from django.db.backends.postgresql.creation import DatabaseCreation
-
-class PostGISCreation(DatabaseCreation):
- geom_index_type = 'GIST'
- geom_index_opts = 'GIST_GEOMETRY_OPS'
-
- def sql_indexes_for_field(self, model, f, style):
- "Return any spatial index creation SQL for the field."
- from django.contrib.gis.db.models.fields import GeometryField
-
- output = super(PostGISCreation, self).sql_indexes_for_field(model, f, style)
-
- if isinstance(f, GeometryField):
- gqn = self.connection.ops.geo_quote_name
- qn = self.connection.ops.quote_name
- db_table = model._meta.db_table
-
- if f.geography:
- # Geogrophy columns are created normally.
- pass
- else:
- # Geometry columns are created by `AddGeometryColumn`
- # stored procedure.
- output.append(style.SQL_KEYWORD('SELECT ') +
- style.SQL_TABLE('AddGeometryColumn') + '(' +
- style.SQL_TABLE(gqn(db_table)) + ', ' +
- style.SQL_FIELD(gqn(f.column)) + ', ' +
- style.SQL_FIELD(str(f.srid)) + ', ' +
- style.SQL_COLTYPE(gqn(f.geom_type)) + ', ' +
- style.SQL_KEYWORD(str(f.dim)) + ');')
-
- if not f.null:
- # Add a NOT NULL constraint to the field
- output.append(style.SQL_KEYWORD('ALTER TABLE ') +
- style.SQL_TABLE(qn(db_table)) +
- style.SQL_KEYWORD(' ALTER ') +
- style.SQL_FIELD(qn(f.column)) +
- style.SQL_KEYWORD(' SET NOT NULL') + ';')
-
-
- if f.spatial_index:
- # Spatial indexes created the same way for both Geometry and
- # Geography columns
- if f.geography:
- index_opts = ''
- else:
- index_opts = ' ' + style.SQL_KEYWORD(self.geom_index_opts)
- output.append(style.SQL_KEYWORD('CREATE INDEX ') +
- style.SQL_TABLE(qn('%s_%s_id' % (db_table, f.column))) +
- style.SQL_KEYWORD(' ON ') +
- style.SQL_TABLE(qn(db_table)) +
- style.SQL_KEYWORD(' USING ') +
- style.SQL_COLTYPE(self.geom_index_type) + ' ( ' +
- style.SQL_FIELD(qn(f.column)) + index_opts + ' );')
- return output
-
- def sql_table_creation_suffix(self):
- qn = self.connection.ops.quote_name
- return ' TEMPLATE %s' % qn(getattr(settings, 'POSTGIS_TEMPLATE', 'template_postgis'))
diff --git a/parts/django/django/contrib/gis/db/backends/postgis/introspection.py b/parts/django/django/contrib/gis/db/backends/postgis/introspection.py
deleted file mode 100644
index 7962d19..0000000
--- a/parts/django/django/contrib/gis/db/backends/postgis/introspection.py
+++ /dev/null
@@ -1,95 +0,0 @@
-from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection
-from django.contrib.gis.gdal import OGRGeomType
-
-class GeoIntrospectionError(Exception):
- pass
-
-class PostGISIntrospection(DatabaseIntrospection):
- # Reverse dictionary for PostGIS geometry types not populated until
- # introspection is actually performed.
- postgis_types_reverse = {}
-
- def get_postgis_types(self):
- """
- Returns a dictionary with keys that are the PostgreSQL object
- identification integers for the PostGIS geometry and/or
- geography types (if supported).
- """
- cursor = self.connection.cursor()
- # The OID integers associated with the geometry type may
- # be different across versions; hence, this is why we have
- # to query the PostgreSQL pg_type table corresponding to the
- # PostGIS custom data types.
- oid_sql = 'SELECT "oid" FROM "pg_type" WHERE "typname" = %s'
- try:
- cursor.execute(oid_sql, ('geometry',))
- GEOM_TYPE = cursor.fetchone()[0]
- postgis_types = { GEOM_TYPE : 'GeometryField' }
- if self.connection.ops.geography:
- cursor.execute(oid_sql, ('geography',))
- GEOG_TYPE = cursor.fetchone()[0]
- # The value for the geography type is actually a tuple
- # to pass in the `geography=True` keyword to the field
- # definition.
- postgis_types[GEOG_TYPE] = ('GeometryField', {'geography' : True})
- finally:
- cursor.close()
-
- return postgis_types
-
- def get_field_type(self, data_type, description):
- if not self.postgis_types_reverse:
- # If the PostGIS types reverse dictionary is not populated, do so
- # now. In order to prevent unnecessary requests upon connection
- # intialization, the `data_types_reverse` dictionary is not updated
- # with the PostGIS custom types until introspection is actually
- # performed -- in other words, when this function is called.
- self.postgis_types_reverse = self.get_postgis_types()
- self.data_types_reverse.update(self.postgis_types_reverse)
- return super(PostGISIntrospection, self).get_field_type(data_type, description)
-
- def get_geometry_type(self, table_name, geo_col):
- """
- The geometry type OID used by PostGIS does not indicate the particular
- type of field that a geometry column is (e.g., whether it's a
- PointField or a PolygonField). Thus, this routine queries the PostGIS
- metadata tables to determine the geometry type,
- """
- cursor = self.connection.cursor()
- try:
- try:
- # First seeing if this geometry column is in the `geometry_columns`
- cursor.execute('SELECT "coord_dimension", "srid", "type" '
- 'FROM "geometry_columns" '
- 'WHERE "f_table_name"=%s AND "f_geometry_column"=%s',
- (table_name, geo_col))
- row = cursor.fetchone()
- if not row: raise GeoIntrospectionError
- except GeoIntrospectionError:
- if self.connection.ops.geography:
- cursor.execute('SELECT "coord_dimension", "srid", "type" '
- 'FROM "geography_columns" '
- 'WHERE "f_table_name"=%s AND "f_geography_column"=%s',
- (table_name, geo_col))
- row = cursor.fetchone()
-
- if not row:
- raise Exception('Could not find a geometry or geography column for "%s"."%s"' %
- (table_name, geo_col))
-
- # OGRGeomType does not require GDAL and makes it easy to convert
- # from OGC geom type name to Django field.
- field_type = OGRGeomType(row[2]).django
-
- # Getting any GeometryField keyword arguments that are not the default.
- dim = row[0]
- srid = row[1]
- field_params = {}
- if srid != 4326:
- field_params['srid'] = srid
- if dim != 2:
- field_params['dim'] = dim
- finally:
- cursor.close()
-
- return field_type, field_params
diff --git a/parts/django/django/contrib/gis/db/backends/postgis/models.py b/parts/django/django/contrib/gis/db/backends/postgis/models.py
deleted file mode 100644
index a385983..0000000
--- a/parts/django/django/contrib/gis/db/backends/postgis/models.py
+++ /dev/null
@@ -1,66 +0,0 @@
-"""
- The GeometryColumns and SpatialRefSys models for the PostGIS backend.
-"""
-from django.db import models
-from django.contrib.gis.db.backends.base import SpatialRefSysMixin
-
-class GeometryColumns(models.Model):
- """
- The 'geometry_columns' table from the PostGIS. See the PostGIS
- documentation at Ch. 4.2.2.
- """
- f_table_catalog = models.CharField(max_length=256)
- f_table_schema = models.CharField(max_length=256)
- f_table_name = models.CharField(max_length=256)
- f_geometry_column = models.CharField(max_length=256)
- coord_dimension = models.IntegerField()
- srid = models.IntegerField(primary_key=True)
- type = models.CharField(max_length=30)
-
- class Meta:
- db_table = 'geometry_columns'
- managed = False
-
- @classmethod
- def table_name_col(cls):
- """
- Returns the name of the metadata column used to store the
- the feature table name.
- """
- return 'f_table_name'
-
- @classmethod
- def geom_col_name(cls):
- """
- Returns the name of the metadata column used to store the
- the feature geometry column.
- """
- return 'f_geometry_column'
-
- def __unicode__(self):
- return "%s.%s - %dD %s field (SRID: %d)" % \
- (self.f_table_name, self.f_geometry_column,
- self.coord_dimension, self.type, self.srid)
-
-class SpatialRefSys(models.Model, SpatialRefSysMixin):
- """
- The 'spatial_ref_sys' table from PostGIS. See the PostGIS
- documentaiton at Ch. 4.2.1.
- """
- srid = models.IntegerField(primary_key=True)
- auth_name = models.CharField(max_length=256)
- auth_srid = models.IntegerField()
- srtext = models.CharField(max_length=2048)
- proj4text = models.CharField(max_length=2048)
-
- class Meta:
- db_table = 'spatial_ref_sys'
- managed = False
-
- @property
- def wkt(self):
- return self.srtext
-
- @classmethod
- def wkt_col(cls):
- return 'srtext'
diff --git a/parts/django/django/contrib/gis/db/backends/postgis/operations.py b/parts/django/django/contrib/gis/db/backends/postgis/operations.py
deleted file mode 100644
index 5affcf9..0000000
--- a/parts/django/django/contrib/gis/db/backends/postgis/operations.py
+++ /dev/null
@@ -1,589 +0,0 @@
-import re
-from decimal import Decimal
-
-from django.conf import settings
-from django.contrib.gis.db.backends.base import BaseSpatialOperations
-from django.contrib.gis.db.backends.util import SpatialOperation, SpatialFunction
-from django.contrib.gis.db.backends.postgis.adapter import PostGISAdapter
-from django.contrib.gis.geometry.backend import Geometry
-from django.contrib.gis.measure import Distance
-from django.core.exceptions import ImproperlyConfigured
-from django.db.backends.postgresql_psycopg2.base import DatabaseOperations
-from django.db.utils import DatabaseError
-
-#### Classes used in constructing PostGIS spatial SQL ####
-class PostGISOperator(SpatialOperation):
- "For PostGIS operators (e.g. `&&`, `~`)."
- def __init__(self, operator):
- super(PostGISOperator, self).__init__(operator=operator)
-
-class PostGISFunction(SpatialFunction):
- "For PostGIS function calls (e.g., `ST_Contains(table, geom)`)."
- def __init__(self, prefix, function, **kwargs):
- super(PostGISFunction, self).__init__(prefix + function, **kwargs)
-
-class PostGISFunctionParam(PostGISFunction):
- "For PostGIS functions that take another parameter (e.g. DWithin, Relate)."
- sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s)'
-
-class PostGISDistance(PostGISFunction):
- "For PostGIS distance operations."
- dist_func = 'Distance'
- sql_template = '%(function)s(%(geo_col)s, %(geometry)s) %(operator)s %%s'
-
- def __init__(self, prefix, operator):
- super(PostGISDistance, self).__init__(prefix, self.dist_func,
- operator=operator)
-
-class PostGISSpheroidDistance(PostGISFunction):
- "For PostGIS spherical distance operations (using the spheroid)."
- dist_func = 'distance_spheroid'
- sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s) %(operator)s %%s'
- def __init__(self, prefix, operator):
- # An extra parameter in `end_subst` is needed for the spheroid string.
- super(PostGISSpheroidDistance, self).__init__(prefix, self.dist_func,
- operator=operator)
-
-class PostGISSphereDistance(PostGISDistance):
- "For PostGIS spherical distance operations."
- dist_func = 'distance_sphere'
-
-class PostGISRelate(PostGISFunctionParam):
- "For PostGIS Relate(<geom>, <pattern>) calls."
- pattern_regex = re.compile(r'^[012TF\*]{9}$')
- def __init__(self, prefix, pattern):
- if not self.pattern_regex.match(pattern):
- raise ValueError('Invalid intersection matrix pattern "%s".' % pattern)
- super(PostGISRelate, self).__init__(prefix, 'Relate')
-
-
-class PostGISOperations(DatabaseOperations, BaseSpatialOperations):
- compiler_module = 'django.contrib.gis.db.models.sql.compiler'
- name = 'postgis'
- postgis = True
- version_regex = re.compile(r'^(?P<major>\d)\.(?P<minor1>\d)\.(?P<minor2>\d+)')
- valid_aggregates = dict([(k, None) for k in
- ('Collect', 'Extent', 'Extent3D', 'MakeLine', 'Union')])
-
- Adapter = PostGISAdapter
- Adaptor = Adapter # Backwards-compatibility alias.
-
- def __init__(self, connection):
- super(PostGISOperations, self).__init__(connection)
-
- # Trying to get the PostGIS version because the function
- # signatures will depend on the version used. The cost
- # here is a database query to determine the version, which
- # can be mitigated by setting `POSTGIS_VERSION` with a 3-tuple
- # comprising user-supplied values for the major, minor, and
- # subminor revision of PostGIS.
- try:
- if hasattr(settings, 'POSTGIS_VERSION'):
- vtup = settings.POSTGIS_VERSION
- if len(vtup) == 3:
- # The user-supplied PostGIS version.
- version = vtup
- else:
- # This was the old documented way, but it's stupid to
- # include the string.
- version = vtup[1:4]
- else:
- vtup = self.postgis_version_tuple()
- version = vtup[1:]
-
- # Getting the prefix -- even though we don't officially support
- # PostGIS 1.2 anymore, keeping it anyway in case a prefix change
- # for something else is necessary.
- if version >= (1, 2, 2):
- prefix = 'ST_'
- else:
- prefix = ''
-
- self.geom_func_prefix = prefix
- self.spatial_version = version
- except DatabaseError:
- raise ImproperlyConfigured('Cannot determine PostGIS version for database "%s". '
- 'GeoDjango requires at least PostGIS version 1.3. '
- 'Was the database created from a spatial database '
- 'template?' % self.connection.settings_dict['NAME']
- )
- except Exception, e:
- # TODO: Raise helpful exceptions as they become known.
- raise
-
- # PostGIS-specific operators. The commented descriptions of these
- # operators come from Section 7.6 of the PostGIS 1.4 documentation.
- self.geometry_operators = {
- # The "&<" operator returns true if A's bounding box overlaps or
- # is to the left of B's bounding box.
- 'overlaps_left' : PostGISOperator('&<'),
- # The "&>" operator returns true if A's bounding box overlaps or
- # is to the right of B's bounding box.
- 'overlaps_right' : PostGISOperator('&>'),
- # The "<<" operator returns true if A's bounding box is strictly
- # to the left of B's bounding box.
- 'left' : PostGISOperator('<<'),
- # The ">>" operator returns true if A's bounding box is strictly
- # to the right of B's bounding box.
- 'right' : PostGISOperator('>>'),
- # The "&<|" operator returns true if A's bounding box overlaps or
- # is below B's bounding box.
- 'overlaps_below' : PostGISOperator('&<|'),
- # The "|&>" operator returns true if A's bounding box overlaps or
- # is above B's bounding box.
- 'overlaps_above' : PostGISOperator('|&>'),
- # The "<<|" operator returns true if A's bounding box is strictly
- # below B's bounding box.
- 'strictly_below' : PostGISOperator('<<|'),
- # The "|>>" operator returns true if A's bounding box is strictly
- # above B's bounding box.
- 'strictly_above' : PostGISOperator('|>>'),
- # The "~=" operator is the "same as" operator. It tests actual
- # geometric equality of two features. So if A and B are the same feature,
- # vertex-by-vertex, the operator returns true.
- 'same_as' : PostGISOperator('~='),
- 'exact' : PostGISOperator('~='),
- # The "@" operator returns true if A's bounding box is completely contained
- # by B's bounding box.
- 'contained' : PostGISOperator('@'),
- # The "~" operator returns true if A's bounding box completely contains
- # by B's bounding box.
- 'bbcontains' : PostGISOperator('~'),
- # The "&&" operator returns true if A's bounding box overlaps
- # B's bounding box.
- 'bboverlaps' : PostGISOperator('&&'),
- }
-
- self.geometry_functions = {
- 'equals' : PostGISFunction(prefix, 'Equals'),
- 'disjoint' : PostGISFunction(prefix, 'Disjoint'),
- 'touches' : PostGISFunction(prefix, 'Touches'),
- 'crosses' : PostGISFunction(prefix, 'Crosses'),
- 'within' : PostGISFunction(prefix, 'Within'),
- 'overlaps' : PostGISFunction(prefix, 'Overlaps'),
- 'contains' : PostGISFunction(prefix, 'Contains'),
- 'intersects' : PostGISFunction(prefix, 'Intersects'),
- 'relate' : (PostGISRelate, basestring),
- }
-
- # Valid distance types and substitutions
- dtypes = (Decimal, Distance, float, int, long)
- def get_dist_ops(operator):
- "Returns operations for both regular and spherical distances."
- return {'cartesian' : PostGISDistance(prefix, operator),
- 'sphere' : PostGISSphereDistance(prefix, operator),
- 'spheroid' : PostGISSpheroidDistance(prefix, operator),
- }
- self.distance_functions = {
- 'distance_gt' : (get_dist_ops('>'), dtypes),
- 'distance_gte' : (get_dist_ops('>='), dtypes),
- 'distance_lt' : (get_dist_ops('<'), dtypes),
- 'distance_lte' : (get_dist_ops('<='), dtypes),
- }
-
- # Versions 1.2.2+ have KML serialization support.
- if version < (1, 2, 2):
- ASKML = False
- else:
- ASKML = 'ST_AsKML'
- self.geometry_functions.update(
- {'coveredby' : PostGISFunction(prefix, 'CoveredBy'),
- 'covers' : PostGISFunction(prefix, 'Covers'),
- })
- self.distance_functions['dwithin'] = (PostGISFunctionParam(prefix, 'DWithin'), dtypes)
-
- # Adding the distance functions to the geometries lookup.
- self.geometry_functions.update(self.distance_functions)
-
- # The union aggregate and topology operation use the same signature
- # in versions 1.3+.
- if version < (1, 3, 0):
- UNIONAGG = 'GeomUnion'
- UNION = 'Union'
- MAKELINE = False
- else:
- UNIONAGG = 'ST_Union'
- UNION = 'ST_Union'
- MAKELINE = 'ST_MakeLine'
-
- # Only PostGIS versions 1.3.4+ have GeoJSON serialization support.
- if version < (1, 3, 4):
- GEOJSON = False
- else:
- GEOJSON = prefix + 'AsGeoJson'
-
- # ST_ContainsProperly ST_MakeLine, and ST_GeoHash added in 1.4.
- if version >= (1, 4, 0):
- GEOHASH = 'ST_GeoHash'
- BOUNDINGCIRCLE = 'ST_MinimumBoundingCircle'
- self.geometry_functions['contains_properly'] = PostGISFunction(prefix, 'ContainsProperly')
- else:
- GEOHASH, BOUNDINGCIRCLE = False, False
-
- # Geography type support added in 1.5.
- if version >= (1, 5, 0):
- self.geography = True
- # Only a subset of the operators and functions are available
- # for the geography type.
- self.geography_functions = self.distance_functions.copy()
- self.geography_functions.update({
- 'coveredby' : self.geometry_functions['coveredby'],
- 'covers' : self.geometry_functions['covers'],
- 'intersects' : self.geometry_functions['intersects'],
- })
- self.geography_operators = {
- 'bboverlaps' : PostGISOperator('&&'),
- }
-
- # Creating a dictionary lookup of all GIS terms for PostGIS.
- gis_terms = ['isnull']
- gis_terms += self.geometry_operators.keys()
- gis_terms += self.geometry_functions.keys()
- self.gis_terms = dict([(term, None) for term in gis_terms])
-
- self.area = prefix + 'Area'
- self.bounding_circle = BOUNDINGCIRCLE
- self.centroid = prefix + 'Centroid'
- self.collect = prefix + 'Collect'
- self.difference = prefix + 'Difference'
- self.distance = prefix + 'Distance'
- self.distance_sphere = prefix + 'distance_sphere'
- self.distance_spheroid = prefix + 'distance_spheroid'
- self.envelope = prefix + 'Envelope'
- self.extent = prefix + 'Extent'
- self.extent3d = prefix + 'Extent3D'
- self.force_rhr = prefix + 'ForceRHR'
- self.geohash = GEOHASH
- self.geojson = GEOJSON
- self.gml = prefix + 'AsGML'
- self.intersection = prefix + 'Intersection'
- self.kml = ASKML
- self.length = prefix + 'Length'
- self.length3d = prefix + 'Length3D'
- self.length_spheroid = prefix + 'length_spheroid'
- self.makeline = MAKELINE
- self.mem_size = prefix + 'mem_size'
- self.num_geom = prefix + 'NumGeometries'
- self.num_points =prefix + 'npoints'
- self.perimeter = prefix + 'Perimeter'
- self.perimeter3d = prefix + 'Perimeter3D'
- self.point_on_surface = prefix + 'PointOnSurface'
- self.polygonize = prefix + 'Polygonize'
- self.reverse = prefix + 'Reverse'
- self.scale = prefix + 'Scale'
- self.snap_to_grid = prefix + 'SnapToGrid'
- self.svg = prefix + 'AsSVG'
- self.sym_difference = prefix + 'SymDifference'
- self.transform = prefix + 'Transform'
- self.translate = prefix + 'Translate'
- self.union = UNION
- self.unionagg = UNIONAGG
-
- def check_aggregate_support(self, aggregate):
- """
- Checks if the given aggregate name is supported (that is, if it's
- in `self.valid_aggregates`).
- """
- agg_name = aggregate.__class__.__name__
- return agg_name in self.valid_aggregates
-
- def convert_extent(self, box):
- """
- Returns a 4-tuple extent for the `Extent` aggregate by converting
- the bounding box text returned by PostGIS (`box` argument), for
- example: "BOX(-90.0 30.0, -85.0 40.0)".
- """
- ll, ur = box[4:-1].split(',')
- xmin, ymin = map(float, ll.split())
- xmax, ymax = map(float, ur.split())
- return (xmin, ymin, xmax, ymax)
-
- def convert_extent3d(self, box3d):
- """
- Returns a 6-tuple extent for the `Extent3D` aggregate by converting
- the 3d bounding-box text returnded by PostGIS (`box3d` argument), for
- example: "BOX3D(-90.0 30.0 1, -85.0 40.0 2)".
- """
- ll, ur = box3d[6:-1].split(',')
- xmin, ymin, zmin = map(float, ll.split())
- xmax, ymax, zmax = map(float, ur.split())
- return (xmin, ymin, zmin, xmax, ymax, zmax)
-
- def convert_geom(self, hex, geo_field):
- """
- Converts the geometry returned from PostGIS aggretates.
- """
- if hex:
- return Geometry(hex)
- else:
- return None
-
- def geo_db_type(self, f):
- """
- Return the database field type for the given geometry field.
- Typically this is `None` because geometry columns are added via
- the `AddGeometryColumn` stored procedure, unless the field
- has been specified to be of geography type instead.
- """
- if f.geography:
- if not self.geography:
- raise NotImplementedError('PostGIS 1.5 required for geography column support.')
-
- if f.srid != 4326:
- raise NotImplementedError('PostGIS 1.5 supports geography columns '
- 'only with an SRID of 4326.')
-
- return 'geography(%s,%d)'% (f.geom_type, f.srid)
- else:
- return None
-
- def get_distance(self, f, dist_val, lookup_type):
- """
- Retrieve the distance parameters for the given geometry field,
- distance lookup value, and the distance lookup type.
-
- This is the most complex implementation of the spatial backends due to
- what is supported on geodetic geometry columns vs. what's available on
- projected geometry columns. In addition, it has to take into account
- the newly introduced geography column type introudced in PostGIS 1.5.
- """
- # Getting the distance parameter and any options.
- if len(dist_val) == 1:
- value, option = dist_val[0], None
- else:
- value, option = dist_val
-
- # Shorthand boolean flags.
- geodetic = f.geodetic(self.connection)
- geography = f.geography and self.geography
-
- if isinstance(value, Distance):
- if geography:
- dist_param = value.m
- elif geodetic:
- if lookup_type == 'dwithin':
- raise ValueError('Only numeric values of degree units are '
- 'allowed on geographic DWithin queries.')
- dist_param = value.m
- else:
- dist_param = getattr(value, Distance.unit_attname(f.units_name(self.connection)))
- else:
- # Assuming the distance is in the units of the field.
- dist_param = value
-
- if (not geography and geodetic and lookup_type != 'dwithin'
- and option == 'spheroid'):
- # using distance_spheroid requires the spheroid of the field as
- # a parameter.
- return [f._spheroid, dist_param]
- else:
- return [dist_param]
-
- def get_geom_placeholder(self, f, value):
- """
- Provides a proper substitution value for Geometries that are not in the
- SRID of the field. Specifically, this routine will substitute in the
- ST_Transform() function call.
- """
- if value is None or value.srid == f.srid:
- placeholder = '%s'
- else:
- # Adding Transform() to the SQL placeholder.
- placeholder = '%s(%%s, %s)' % (self.transform, f.srid)
-
- if hasattr(value, 'expression'):
- # If this is an F expression, then we don't really want
- # a placeholder and instead substitute in the column
- # of the expression.
- placeholder = placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
-
- return placeholder
-
- def _get_postgis_func(self, func):
- """
- Helper routine for calling PostGIS functions and returning their result.
- """
- cursor = self.connection._cursor()
- try:
- try:
- cursor.execute('SELECT %s()' % func)
- row = cursor.fetchone()
- except:
- # Responsibility of callers to perform error handling.
- raise
- finally:
- # Close out the connection. See #9437.
- self.connection.close()
- return row[0]
-
- def postgis_geos_version(self):
- "Returns the version of the GEOS library used with PostGIS."
- return self._get_postgis_func('postgis_geos_version')
-
- def postgis_lib_version(self):
- "Returns the version number of the PostGIS library used with PostgreSQL."
- return self._get_postgis_func('postgis_lib_version')
-
- def postgis_proj_version(self):
- "Returns the version of the PROJ.4 library used with PostGIS."
- return self._get_postgis_func('postgis_proj_version')
-
- def postgis_version(self):
- "Returns PostGIS version number and compile-time options."
- return self._get_postgis_func('postgis_version')
-
- def postgis_full_version(self):
- "Returns PostGIS version number and compile-time options."
- return self._get_postgis_func('postgis_full_version')
-
- def postgis_version_tuple(self):
- """
- Returns the PostGIS version as a tuple (version string, major,
- minor, subminor).
- """
- # Getting the PostGIS version
- version = self.postgis_lib_version()
- m = self.version_regex.match(version)
-
- if m:
- major = int(m.group('major'))
- minor1 = int(m.group('minor1'))
- minor2 = int(m.group('minor2'))
- else:
- raise Exception('Could not parse PostGIS version string: %s' % version)
-
- return (version, major, minor1, minor2)
-
- def proj_version_tuple(self):
- """
- Return the version of PROJ.4 used by PostGIS as a tuple of the
- major, minor, and subminor release numbers.
- """
- proj_regex = re.compile(r'(\d+)\.(\d+)\.(\d+)')
- proj_ver_str = self.postgis_proj_version()
- m = proj_regex.search(proj_ver_str)
- if m:
- return tuple(map(int, [m.group(1), m.group(2), m.group(3)]))
- else:
- raise Exception('Could not determine PROJ.4 version from PostGIS.')
-
- def num_params(self, lookup_type, num_param):
- """
- Helper routine that returns a boolean indicating whether the number of
- parameters is correct for the lookup type.
- """
- def exactly_two(np): return np == 2
- def two_to_three(np): return np >= 2 and np <=3
- if (lookup_type in self.distance_functions and
- lookup_type != 'dwithin'):
- return two_to_three(num_param)
- else:
- return exactly_two(num_param)
-
- def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
- """
- Constructs spatial SQL from the given lookup value tuple a
- (alias, col, db_type), the lookup type string, lookup value, and
- the geometry field.
- """
- alias, col, db_type = lvalue
-
- # Getting the quoted geometry column.
- geo_col = '%s.%s' % (qn(alias), qn(col))
-
- if lookup_type in self.geometry_operators:
- if field.geography and not lookup_type in self.geography_operators:
- raise ValueError('PostGIS geography does not support the '
- '"%s" lookup.' % lookup_type)
- # Handling a PostGIS operator.
- op = self.geometry_operators[lookup_type]
- return op.as_sql(geo_col, self.get_geom_placeholder(field, value))
- elif lookup_type in self.geometry_functions:
- if field.geography and not lookup_type in self.geography_functions:
- raise ValueError('PostGIS geography type does not support the '
- '"%s" lookup.' % lookup_type)
-
- # See if a PostGIS geometry function matches the lookup type.
- tmp = self.geometry_functions[lookup_type]
-
- # Lookup types that are tuples take tuple arguments, e.g., 'relate' and
- # distance lookups.
- if isinstance(tmp, tuple):
- # First element of tuple is the PostGISOperation instance, and the
- # second element is either the type or a tuple of acceptable types
- # that may passed in as further parameters for the lookup type.
- op, arg_type = tmp
-
- # Ensuring that a tuple _value_ was passed in from the user
- if not isinstance(value, (tuple, list)):
- raise ValueError('Tuple required for `%s` lookup type.' % lookup_type)
-
- # Geometry is first element of lookup tuple.
- geom = value[0]
-
- # Number of valid tuple parameters depends on the lookup type.
- nparams = len(value)
- if not self.num_params(lookup_type, nparams):
- raise ValueError('Incorrect number of parameters given for `%s` lookup type.' % lookup_type)
-
- # Ensuring the argument type matches what we expect.
- if not isinstance(value[1], arg_type):
- raise ValueError('Argument type should be %s, got %s instead.' % (arg_type, type(value[1])))
-
- # For lookup type `relate`, the op instance is not yet created (has
- # to be instantiated here to check the pattern parameter).
- if lookup_type == 'relate':
- op = op(self.geom_func_prefix, value[1])
- elif lookup_type in self.distance_functions and lookup_type != 'dwithin':
- if not field.geography and field.geodetic(self.connection):
- # Geodetic distances are only availble from Points to
- # PointFields on PostGIS 1.4 and below.
- if not self.connection.ops.geography:
- if field.geom_type != 'POINT':
- raise ValueError('PostGIS spherical operations are only valid on PointFields.')
-
- if str(geom.geom_type) != 'Point':
- raise ValueError('PostGIS geometry distance parameter is required to be of type Point.')
-
- # Setting up the geodetic operation appropriately.
- if nparams == 3 and value[2] == 'spheroid':
- op = op['spheroid']
- else:
- op = op['sphere']
- else:
- op = op['cartesian']
- else:
- op = tmp
- geom = value
-
- # Calling the `as_sql` function on the operation instance.
- return op.as_sql(geo_col, self.get_geom_placeholder(field, geom))
-
- elif lookup_type == 'isnull':
- # Handling 'isnull' lookup type
- return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
-
- raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
-
- def spatial_aggregate_sql(self, agg):
- """
- Returns the spatial aggregate SQL template and function for the
- given Aggregate instance.
- """
- agg_name = agg.__class__.__name__
- if not self.check_aggregate_support(agg):
- raise NotImplementedError('%s spatial aggregate is not implmented for this backend.' % agg_name)
- agg_name = agg_name.lower()
- if agg_name == 'union': agg_name += 'agg'
- sql_template = '%(function)s(%(field)s)'
- sql_function = getattr(self, agg_name)
- return sql_template, sql_function
-
- # Routines for getting the OGC-compliant models.
- def geometry_columns(self):
- from django.contrib.gis.db.backends.postgis.models import GeometryColumns
- return GeometryColumns
-
- def spatial_ref_sys(self):
- from django.contrib.gis.db.backends.postgis.models import SpatialRefSys
- return SpatialRefSys
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/__init__.py b/parts/django/django/contrib/gis/db/backends/spatialite/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/adapter.py b/parts/django/django/contrib/gis/db/backends/spatialite/adapter.py
deleted file mode 100644
index d8fefba..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/adapter.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.db.backends.sqlite3.base import Database
-from django.contrib.gis.db.backends.adapter import WKTAdapter
-
-class SpatiaLiteAdapter(WKTAdapter):
- "SQLite adaptor for geometry objects."
- def __conform__(self, protocol):
- if protocol is Database.PrepareProtocol:
- return str(self)
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/base.py b/parts/django/django/contrib/gis/db/backends/spatialite/base.py
deleted file mode 100644
index 729fc15..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/base.py
+++ /dev/null
@@ -1,77 +0,0 @@
-from ctypes.util import find_library
-from django.conf import settings
-
-from django.core.exceptions import ImproperlyConfigured
-from django.db.backends.sqlite3.base import *
-from django.db.backends.sqlite3.base import DatabaseWrapper as SqliteDatabaseWrapper, \
- _sqlite_extract, _sqlite_date_trunc, _sqlite_regexp
-from django.contrib.gis.db.backends.spatialite.client import SpatiaLiteClient
-from django.contrib.gis.db.backends.spatialite.creation import SpatiaLiteCreation
-from django.contrib.gis.db.backends.spatialite.introspection import SpatiaLiteIntrospection
-from django.contrib.gis.db.backends.spatialite.operations import SpatiaLiteOperations
-
-class DatabaseWrapper(SqliteDatabaseWrapper):
- def __init__(self, *args, **kwargs):
- # Before we get too far, make sure pysqlite 2.5+ is installed.
- if Database.version_info < (2, 5, 0):
- raise ImproperlyConfigured('Only versions of pysqlite 2.5+ are '
- 'compatible with SpatiaLite and GeoDjango.')
-
- # Trying to find the location of the SpatiaLite library.
- # Here we are figuring out the path to the SpatiaLite library
- # (`libspatialite`). If it's not in the system library path (e.g., it
- # cannot be found by `ctypes.util.find_library`), then it may be set
- # manually in the settings via the `SPATIALITE_LIBRARY_PATH` setting.
- self.spatialite_lib = getattr(settings, 'SPATIALITE_LIBRARY_PATH',
- find_library('spatialite'))
- if not self.spatialite_lib:
- raise ImproperlyConfigured('Unable to locate the SpatiaLite library. '
- 'Make sure it is in your library path, or set '
- 'SPATIALITE_LIBRARY_PATH in your settings.'
- )
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
- self.ops = SpatiaLiteOperations(self)
- self.client = SpatiaLiteClient(self)
- self.creation = SpatiaLiteCreation(self)
- self.introspection = SpatiaLiteIntrospection(self)
-
- def _cursor(self):
- if self.connection is None:
- ## The following is the same as in django.db.backends.sqlite3.base ##
- settings_dict = self.settings_dict
- if not settings_dict['NAME']:
- raise ImproperlyConfigured("Please fill out the database NAME in the settings module before using the database.")
- kwargs = {
- 'database': settings_dict['NAME'],
- 'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES,
- }
- kwargs.update(settings_dict['OPTIONS'])
- self.connection = Database.connect(**kwargs)
- # Register extract, date_trunc, and regexp functions.
- self.connection.create_function("django_extract", 2, _sqlite_extract)
- self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
- self.connection.create_function("regexp", 2, _sqlite_regexp)
- connection_created.send(sender=self.__class__, connection=self)
-
- ## From here on, customized for GeoDjango ##
-
- # Enabling extension loading on the SQLite connection.
- try:
- self.connection.enable_load_extension(True)
- except AttributeError:
- raise ImproperlyConfigured('The pysqlite library does not support C extension loading. '
- 'Both SQLite and pysqlite must be configured to allow '
- 'the loading of extensions to use SpatiaLite.'
- )
-
- # Loading the SpatiaLite library extension on the connection, and returning
- # the created cursor.
- cur = self.connection.cursor(factory=SQLiteCursorWrapper)
- try:
- cur.execute("SELECT load_extension(%s)", (self.spatialite_lib,))
- except Exception, msg:
- raise ImproperlyConfigured('Unable to load the SpatiaLite library extension '
- '"%s" because: %s' % (self.spatialite_lib, msg))
- return cur
- else:
- return self.connection.cursor(factory=SQLiteCursorWrapper)
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/client.py b/parts/django/django/contrib/gis/db/backends/spatialite/client.py
deleted file mode 100644
index 536065a..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/client.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.db.backends.sqlite3.client import DatabaseClient
-
-class SpatiaLiteClient(DatabaseClient):
- executable_name = 'spatialite'
-
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/creation.py b/parts/django/django/contrib/gis/db/backends/spatialite/creation.py
deleted file mode 100644
index cbe4a29..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/creation.py
+++ /dev/null
@@ -1,96 +0,0 @@
-import os
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.core.management import call_command
-from django.db.backends.sqlite3.creation import DatabaseCreation
-
-class SpatiaLiteCreation(DatabaseCreation):
-
- def create_test_db(self, verbosity=1, autoclobber=False):
- """
- Creates a test database, prompting the user for confirmation if the
- database already exists. Returns the name of the test database created.
-
- This method is overloaded to load up the SpatiaLite initialization
- SQL prior to calling the `syncdb` command.
- """
- if verbosity >= 1:
- print "Creating test database '%s'..." % self.connection.alias
-
- test_database_name = self._create_test_db(verbosity, autoclobber)
-
- self.connection.close()
-
- self.connection.settings_dict["NAME"] = test_database_name
- can_rollback = self._rollback_works()
- self.connection.settings_dict["SUPPORTS_TRANSACTIONS"] = can_rollback
- # Need to load the SpatiaLite initialization SQL before running `syncdb`.
- self.load_spatialite_sql()
- call_command('syncdb', verbosity=verbosity, interactive=False, database=self.connection.alias)
-
- if settings.CACHE_BACKEND.startswith('db://'):
- from django.core.cache import parse_backend_uri
- _, cache_name, _ = parse_backend_uri(settings.CACHE_BACKEND)
- call_command('createcachetable', cache_name)
-
- # Get a cursor (even though we don't need one yet). This has
- # the side effect of initializing the test database.
- cursor = self.connection.cursor()
-
- return test_database_name
-
- def sql_indexes_for_field(self, model, f, style):
- "Return any spatial index creation SQL for the field."
- from django.contrib.gis.db.models.fields import GeometryField
-
- output = super(SpatiaLiteCreation, self).sql_indexes_for_field(model, f, style)
-
- if isinstance(f, GeometryField):
- gqn = self.connection.ops.geo_quote_name
- qn = self.connection.ops.quote_name
- db_table = model._meta.db_table
-
- output.append(style.SQL_KEYWORD('SELECT ') +
- style.SQL_TABLE('AddGeometryColumn') + '(' +
- style.SQL_TABLE(gqn(db_table)) + ', ' +
- style.SQL_FIELD(gqn(f.column)) + ', ' +
- style.SQL_FIELD(str(f.srid)) + ', ' +
- style.SQL_COLTYPE(gqn(f.geom_type)) + ', ' +
- style.SQL_KEYWORD(str(f.dim)) + ', ' +
- style.SQL_KEYWORD(str(int(not f.null))) +
- ');')
-
- if f.spatial_index:
- output.append(style.SQL_KEYWORD('SELECT ') +
- style.SQL_TABLE('CreateSpatialIndex') + '(' +
- style.SQL_TABLE(gqn(db_table)) + ', ' +
- style.SQL_FIELD(gqn(f.column)) + ');')
-
- return output
-
- def load_spatialite_sql(self):
- """
- This routine loads up the SpatiaLite SQL file.
- """
- # Getting the location of the SpatiaLite SQL file, and confirming
- # it exists.
- spatialite_sql = self.spatialite_init_file()
- if not os.path.isfile(spatialite_sql):
- raise ImproperlyConfigured('Could not find the required SpatiaLite initialization '
- 'SQL file (necessary for testing): %s' % spatialite_sql)
-
- # Opening up the SpatiaLite SQL initialization file and executing
- # as a script.
- sql_fh = open(spatialite_sql, 'r')
- try:
- cur = self.connection._cursor()
- cur.executescript(sql_fh.read())
- finally:
- sql_fh.close()
-
- def spatialite_init_file(self):
- # SPATIALITE_SQL may be placed in settings to tell GeoDjango
- # to use a specific path to the SpatiaLite initilization SQL.
- return getattr(settings, 'SPATIALITE_SQL',
- 'init_spatialite-%s.%s.sql' %
- self.connection.ops.spatial_version[:2])
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/introspection.py b/parts/django/django/contrib/gis/db/backends/spatialite/introspection.py
deleted file mode 100644
index 1b5952c..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/introspection.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from django.contrib.gis.gdal import OGRGeomType
-from django.db.backends.sqlite3.introspection import DatabaseIntrospection, FlexibleFieldLookupDict
-
-class GeoFlexibleFieldLookupDict(FlexibleFieldLookupDict):
- """
- Sublcass that includes updates the `base_data_types_reverse` dict
- for geometry field types.
- """
- base_data_types_reverse = FlexibleFieldLookupDict.base_data_types_reverse.copy()
- base_data_types_reverse.update(
- {'point' : 'GeometryField',
- 'linestring' : 'GeometryField',
- 'polygon' : 'GeometryField',
- 'multipoint' : 'GeometryField',
- 'multilinestring' : 'GeometryField',
- 'multipolygon' : 'GeometryField',
- 'geometrycollection' : 'GeometryField',
- })
-
-class SpatiaLiteIntrospection(DatabaseIntrospection):
- data_types_reverse = GeoFlexibleFieldLookupDict()
-
- def get_geometry_type(self, table_name, geo_col):
- cursor = self.connection.cursor()
- try:
- # Querying the `geometry_columns` table to get additional metadata.
- cursor.execute('SELECT "coord_dimension", "srid", "type" '
- 'FROM "geometry_columns" '
- 'WHERE "f_table_name"=%s AND "f_geometry_column"=%s',
- (table_name, geo_col))
- row = cursor.fetchone()
- if not row:
- raise Exception('Could not find a geometry column for "%s"."%s"' %
- (table_name, geo_col))
-
- # OGRGeomType does not require GDAL and makes it easy to convert
- # from OGC geom type name to Django field.
- field_type = OGRGeomType(row[2]).django
-
- # Getting any GeometryField keyword arguments that are not the default.
- dim = row[0]
- srid = row[1]
- field_params = {}
- if srid != 4326:
- field_params['srid'] = srid
- if isinstance(dim, basestring) and 'Z' in dim:
- field_params['dim'] = 3
- finally:
- cursor.close()
-
- return field_type, field_params
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/models.py b/parts/django/django/contrib/gis/db/backends/spatialite/models.py
deleted file mode 100644
index 684c5d8..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/models.py
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
- The GeometryColumns and SpatialRefSys models for the SpatiaLite backend.
-"""
-from django.db import models
-from django.contrib.gis.db.backends.base import SpatialRefSysMixin
-
-class GeometryColumns(models.Model):
- """
- The 'geometry_columns' table from SpatiaLite.
- """
- f_table_name = models.CharField(max_length=256)
- f_geometry_column = models.CharField(max_length=256)
- type = models.CharField(max_length=30)
- coord_dimension = models.IntegerField()
- srid = models.IntegerField(primary_key=True)
- spatial_index_enabled = models.IntegerField()
-
- class Meta:
- db_table = 'geometry_columns'
- managed = False
-
- @classmethod
- def table_name_col(cls):
- """
- Returns the name of the metadata column used to store the
- the feature table name.
- """
- return 'f_table_name'
-
- @classmethod
- def geom_col_name(cls):
- """
- Returns the name of the metadata column used to store the
- the feature geometry column.
- """
- return 'f_geometry_column'
-
- def __unicode__(self):
- return "%s.%s - %dD %s field (SRID: %d)" % \
- (self.f_table_name, self.f_geometry_column,
- self.coord_dimension, self.type, self.srid)
-
-class SpatialRefSys(models.Model, SpatialRefSysMixin):
- """
- The 'spatial_ref_sys' table from SpatiaLite.
- """
- srid = models.IntegerField(primary_key=True)
- auth_name = models.CharField(max_length=256)
- auth_srid = models.IntegerField()
- ref_sys_name = models.CharField(max_length=256)
- proj4text = models.CharField(max_length=2048)
-
- @property
- def wkt(self):
- from django.contrib.gis.gdal import SpatialReference
- return SpatialReference(self.proj4text).wkt
-
- class Meta:
- db_table = 'spatial_ref_sys'
- managed = False
diff --git a/parts/django/django/contrib/gis/db/backends/spatialite/operations.py b/parts/django/django/contrib/gis/db/backends/spatialite/operations.py
deleted file mode 100644
index e6f8409..0000000
--- a/parts/django/django/contrib/gis/db/backends/spatialite/operations.py
+++ /dev/null
@@ -1,343 +0,0 @@
-import re
-from decimal import Decimal
-
-from django.contrib.gis.db.backends.base import BaseSpatialOperations
-from django.contrib.gis.db.backends.util import SpatialOperation, SpatialFunction
-from django.contrib.gis.db.backends.spatialite.adapter import SpatiaLiteAdapter
-from django.contrib.gis.geometry.backend import Geometry
-from django.contrib.gis.measure import Distance
-from django.core.exceptions import ImproperlyConfigured
-from django.db.backends.sqlite3.base import DatabaseOperations
-from django.db.utils import DatabaseError
-
-class SpatiaLiteOperator(SpatialOperation):
- "For SpatiaLite operators (e.g. `&&`, `~`)."
- def __init__(self, operator):
- super(SpatiaLiteOperator, self).__init__(operator=operator)
-
-class SpatiaLiteFunction(SpatialFunction):
- "For SpatiaLite function calls."
- def __init__(self, function, **kwargs):
- super(SpatiaLiteFunction, self).__init__(function, **kwargs)
-
-class SpatiaLiteFunctionParam(SpatiaLiteFunction):
- "For SpatiaLite functions that take another parameter."
- sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s)'
-
-class SpatiaLiteDistance(SpatiaLiteFunction):
- "For SpatiaLite distance operations."
- dist_func = 'Distance'
- sql_template = '%(function)s(%(geo_col)s, %(geometry)s) %(operator)s %%s'
-
- def __init__(self, operator):
- super(SpatiaLiteDistance, self).__init__(self.dist_func,
- operator=operator)
-
-class SpatiaLiteRelate(SpatiaLiteFunctionParam):
- "For SpatiaLite Relate(<geom>, <pattern>) calls."
- pattern_regex = re.compile(r'^[012TF\*]{9}$')
- def __init__(self, pattern):
- if not self.pattern_regex.match(pattern):
- raise ValueError('Invalid intersection matrix pattern "%s".' % pattern)
- super(SpatiaLiteRelate, self).__init__('Relate')
-
-# Valid distance types and substitutions
-dtypes = (Decimal, Distance, float, int, long)
-def get_dist_ops(operator):
- "Returns operations for regular distances; spherical distances are not currently supported."
- return (SpatiaLiteDistance(operator),)
-
-class SpatiaLiteOperations(DatabaseOperations, BaseSpatialOperations):
- compiler_module = 'django.contrib.gis.db.models.sql.compiler'
- name = 'spatialite'
- spatialite = True
- version_regex = re.compile(r'^(?P<major>\d)\.(?P<minor1>\d)\.(?P<minor2>\d+)')
- valid_aggregates = dict([(k, None) for k in ('Extent', 'Union')])
-
- Adapter = SpatiaLiteAdapter
- Adaptor = Adapter # Backwards-compatibility alias.
-
- area = 'Area'
- centroid = 'Centroid'
- contained = 'MbrWithin'
- difference = 'Difference'
- distance = 'Distance'
- envelope = 'Envelope'
- intersection = 'Intersection'
- length = 'GLength' # OpenGis defines Length, but this conflicts with an SQLite reserved keyword
- num_geom = 'NumGeometries'
- num_points = 'NumPoints'
- point_on_surface = 'PointOnSurface'
- scale = 'ScaleCoords'
- svg = 'AsSVG'
- sym_difference = 'SymDifference'
- transform = 'Transform'
- translate = 'ShiftCoords'
- union = 'GUnion' # OpenGis defines Union, but this conflicts with an SQLite reserved keyword
- unionagg = 'GUnion'
-
- from_text = 'GeomFromText'
- from_wkb = 'GeomFromWKB'
- select = 'AsText(%s)'
-
- geometry_functions = {
- 'equals' : SpatiaLiteFunction('Equals'),
- 'disjoint' : SpatiaLiteFunction('Disjoint'),
- 'touches' : SpatiaLiteFunction('Touches'),
- 'crosses' : SpatiaLiteFunction('Crosses'),
- 'within' : SpatiaLiteFunction('Within'),
- 'overlaps' : SpatiaLiteFunction('Overlaps'),
- 'contains' : SpatiaLiteFunction('Contains'),
- 'intersects' : SpatiaLiteFunction('Intersects'),
- 'relate' : (SpatiaLiteRelate, basestring),
- # Retruns true if B's bounding box completely contains A's bounding box.
- 'contained' : SpatiaLiteFunction('MbrWithin'),
- # Returns true if A's bounding box completely contains B's bounding box.
- 'bbcontains' : SpatiaLiteFunction('MbrContains'),
- # Returns true if A's bounding box overlaps B's bounding box.
- 'bboverlaps' : SpatiaLiteFunction('MbrOverlaps'),
- # These are implemented here as synonyms for Equals
- 'same_as' : SpatiaLiteFunction('Equals'),
- 'exact' : SpatiaLiteFunction('Equals'),
- }
-
- distance_functions = {
- 'distance_gt' : (get_dist_ops('>'), dtypes),
- 'distance_gte' : (get_dist_ops('>='), dtypes),
- 'distance_lt' : (get_dist_ops('<'), dtypes),
- 'distance_lte' : (get_dist_ops('<='), dtypes),
- }
- geometry_functions.update(distance_functions)
-
- def __init__(self, connection):
- super(DatabaseOperations, self).__init__()
- self.connection = connection
-
- # Determine the version of the SpatiaLite library.
- try:
- vtup = self.spatialite_version_tuple()
- version = vtup[1:]
- if version < (2, 3, 0):
- raise ImproperlyConfigured('GeoDjango only supports SpatiaLite versions '
- '2.3.0 and above')
- self.spatial_version = version
- except ImproperlyConfigured:
- raise
- except Exception, msg:
- raise ImproperlyConfigured('Cannot determine the SpatiaLite version for the "%s" '
- 'database (error was "%s"). Was the SpatiaLite initialization '
- 'SQL loaded on this database?' %
- (self.connection.settings_dict['NAME'], msg))
-
- # Creating the GIS terms dictionary.
- gis_terms = ['isnull']
- gis_terms += self.geometry_functions.keys()
- self.gis_terms = dict([(term, None) for term in gis_terms])
-
- def check_aggregate_support(self, aggregate):
- """
- Checks if the given aggregate name is supported (that is, if it's
- in `self.valid_aggregates`).
- """
- agg_name = aggregate.__class__.__name__
- return agg_name in self.valid_aggregates
-
- def convert_geom(self, wkt, geo_field):
- """
- Converts geometry WKT returned from a SpatiaLite aggregate.
- """
- if wkt:
- return Geometry(wkt, geo_field.srid)
- else:
- return None
-
- def geo_db_type(self, f):
- """
- Returns None because geometry columnas are added via the
- `AddGeometryColumn` stored procedure on SpatiaLite.
- """
- return None
-
- def get_distance(self, f, value, lookup_type):
- """
- Returns the distance parameters for the given geometry field,
- lookup value, and lookup type. SpatiaLite only supports regular
- cartesian-based queries (no spheroid/sphere calculations for point
- geometries like PostGIS).
- """
- if not value:
- return []
- value = value[0]
- if isinstance(value, Distance):
- if f.geodetic(self.connection):
- raise ValueError('SpatiaLite does not support distance queries on '
- 'geometry fields with a geodetic coordinate system. '
- 'Distance objects; use a numeric value of your '
- 'distance in degrees instead.')
- else:
- dist_param = getattr(value, Distance.unit_attname(f.units_name(self.connection)))
- else:
- dist_param = value
- return [dist_param]
-
- def get_geom_placeholder(self, f, value):
- """
- Provides a proper substitution value for Geometries that are not in the
- SRID of the field. Specifically, this routine will substitute in the
- Transform() and GeomFromText() function call(s).
- """
- def transform_value(value, srid):
- return not (value is None or value.srid == srid)
- if hasattr(value, 'expression'):
- if transform_value(value, f.srid):
- placeholder = '%s(%%s, %s)' % (self.transform, f.srid)
- else:
- placeholder = '%s'
- # No geometry value used for F expression, substitue in
- # the column name instead.
- return placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
- else:
- if transform_value(value, f.srid):
- # Adding Transform() to the SQL placeholder.
- return '%s(%s(%%s,%s), %s)' % (self.transform, self.from_text, value.srid, f.srid)
- else:
- return '%s(%%s,%s)' % (self.from_text, f.srid)
-
- def _get_spatialite_func(self, func):
- """
- Helper routine for calling SpatiaLite functions and returning
- their result.
- """
- cursor = self.connection._cursor()
- try:
- try:
- cursor.execute('SELECT %s' % func)
- row = cursor.fetchone()
- except:
- # Responsibility of caller to perform error handling.
- raise
- finally:
- cursor.close()
- return row[0]
-
- def geos_version(self):
- "Returns the version of GEOS used by SpatiaLite as a string."
- return self._get_spatialite_func('geos_version()')
-
- def proj4_version(self):
- "Returns the version of the PROJ.4 library used by SpatiaLite."
- return self._get_spatialite_func('proj4_version()')
-
- def spatialite_version(self):
- "Returns the SpatiaLite library version as a string."
- return self._get_spatialite_func('spatialite_version()')
-
- def spatialite_version_tuple(self):
- """
- Returns the SpatiaLite version as a tuple (version string, major,
- minor, subminor).
- """
- # Getting the SpatiaLite version.
- try:
- version = self.spatialite_version()
- except DatabaseError:
- # The `spatialite_version` function first appeared in version 2.3.1
- # of SpatiaLite, so doing a fallback test for 2.3.0 (which is
- # used by popular Debian/Ubuntu packages).
- version = None
- try:
- tmp = self._get_spatialite_func("X(GeomFromText('POINT(1 1)'))")
- if tmp == 1.0: version = '2.3.0'
- except DatabaseError:
- pass
- # If no version string defined, then just re-raise the original
- # exception.
- if version is None: raise
-
- m = self.version_regex.match(version)
- if m:
- major = int(m.group('major'))
- minor1 = int(m.group('minor1'))
- minor2 = int(m.group('minor2'))
- else:
- raise Exception('Could not parse SpatiaLite version string: %s' % version)
-
- return (version, major, minor1, minor2)
-
- def spatial_aggregate_sql(self, agg):
- """
- Returns the spatial aggregate SQL template and function for the
- given Aggregate instance.
- """
- agg_name = agg.__class__.__name__
- if not self.check_aggregate_support(agg):
- raise NotImplementedError('%s spatial aggregate is not implmented for this backend.' % agg_name)
- agg_name = agg_name.lower()
- if agg_name == 'union': agg_name += 'agg'
- sql_template = self.select % '%(function)s(%(field)s)'
- sql_function = getattr(self, agg_name)
- return sql_template, sql_function
-
- def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
- """
- Returns the SpatiaLite-specific SQL for the given lookup value
- [a tuple of (alias, column, db_type)], lookup type, lookup
- value, the model field, and the quoting function.
- """
- alias, col, db_type = lvalue
-
- # Getting the quoted field as `geo_col`.
- geo_col = '%s.%s' % (qn(alias), qn(col))
-
- if lookup_type in self.geometry_functions:
- # See if a SpatiaLite geometry function matches the lookup type.
- tmp = self.geometry_functions[lookup_type]
-
- # Lookup types that are tuples take tuple arguments, e.g., 'relate' and
- # distance lookups.
- if isinstance(tmp, tuple):
- # First element of tuple is the SpatiaLiteOperation instance, and the
- # second element is either the type or a tuple of acceptable types
- # that may passed in as further parameters for the lookup type.
- op, arg_type = tmp
-
- # Ensuring that a tuple _value_ was passed in from the user
- if not isinstance(value, (tuple, list)):
- raise ValueError('Tuple required for `%s` lookup type.' % lookup_type)
-
- # Geometry is first element of lookup tuple.
- geom = value[0]
-
- # Number of valid tuple parameters depends on the lookup type.
- if len(value) != 2:
- raise ValueError('Incorrect number of parameters given for `%s` lookup type.' % lookup_type)
-
- # Ensuring the argument type matches what we expect.
- if not isinstance(value[1], arg_type):
- raise ValueError('Argument type should be %s, got %s instead.' % (arg_type, type(value[1])))
-
- # For lookup type `relate`, the op instance is not yet created (has
- # to be instantiated here to check the pattern parameter).
- if lookup_type == 'relate':
- op = op(value[1])
- elif lookup_type in self.distance_functions:
- op = op[0]
- else:
- op = tmp
- geom = value
- # Calling the `as_sql` function on the operation instance.
- return op.as_sql(geo_col, self.get_geom_placeholder(field, geom))
- elif lookup_type == 'isnull':
- # Handling 'isnull' lookup type
- return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
-
- raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
-
- # Routines for getting the OGC-compliant models.
- def geometry_columns(self):
- from django.contrib.gis.db.backends.spatialite.models import GeometryColumns
- return GeometryColumns
-
- def spatial_ref_sys(self):
- from django.contrib.gis.db.backends.spatialite.models import SpatialRefSys
- return SpatialRefSys
diff --git a/parts/django/django/contrib/gis/db/backends/util.py b/parts/django/django/contrib/gis/db/backends/util.py
deleted file mode 100644
index b50c8e2..0000000
--- a/parts/django/django/contrib/gis/db/backends/util.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-A collection of utility routines and classes used by the spatial
-backends.
-"""
-
-def gqn(val):
- """
- The geographic quote name function; used for quoting tables and
- geometries (they use single rather than the double quotes of the
- backend quotename function).
- """
- if isinstance(val, basestring):
- if isinstance(val, unicode): val = val.encode('ascii')
- return "'%s'" % val
- else:
- return str(val)
-
-class SpatialOperation(object):
- """
- Base class for generating spatial SQL.
- """
- sql_template = '%(geo_col)s %(operator)s %(geometry)s'
-
- def __init__(self, function='', operator='', result='', **kwargs):
- self.function = function
- self.operator = operator
- self.result = result
- self.extra = kwargs
-
- def as_sql(self, geo_col, geometry='%s'):
- return self.sql_template % self.params(geo_col, geometry)
-
- def params(self, geo_col, geometry):
- params = {'function' : self.function,
- 'geo_col' : geo_col,
- 'geometry' : geometry,
- 'operator' : self.operator,
- 'result' : self.result,
- }
- params.update(self.extra)
- return params
-
-class SpatialFunction(SpatialOperation):
- """
- Base class for generating spatial SQL related to a function.
- """
- sql_template = '%(function)s(%(geo_col)s, %(geometry)s)'
-
- def __init__(self, func, result='', operator='', **kwargs):
- # Getting the function prefix.
- default = {'function' : func,
- 'operator' : operator,
- 'result' : result
- }
- kwargs.update(default)
- super(SpatialFunction, self).__init__(**kwargs)
diff --git a/parts/django/django/contrib/gis/db/models/__init__.py b/parts/django/django/contrib/gis/db/models/__init__.py
deleted file mode 100644
index 87e2b68..0000000
--- a/parts/django/django/contrib/gis/db/models/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Want to get everything from the 'normal' models package.
-from django.db.models import *
-
-# Geographic aggregate functions
-from django.contrib.gis.db.models.aggregates import *
-
-# The GeoManager
-from django.contrib.gis.db.models.manager import GeoManager
-
-# The geographic-enabled fields.
-from django.contrib.gis.db.models.fields import \
- GeometryField, PointField, LineStringField, PolygonField, \
- MultiPointField, MultiLineStringField, MultiPolygonField, \
- GeometryCollectionField
diff --git a/parts/django/django/contrib/gis/db/models/aggregates.py b/parts/django/django/contrib/gis/db/models/aggregates.py
deleted file mode 100644
index cd26839..0000000
--- a/parts/django/django/contrib/gis/db/models/aggregates.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from django.db.models import Aggregate
-from django.contrib.gis.db.models.sql import GeomField
-
-class Collect(Aggregate):
- name = 'Collect'
-
-class Extent(Aggregate):
- name = 'Extent'
-
-class Extent3D(Aggregate):
- name = 'Extent3D'
-
-class MakeLine(Aggregate):
- name = 'MakeLine'
-
-class Union(Aggregate):
- name = 'Union'
diff --git a/parts/django/django/contrib/gis/db/models/fields.py b/parts/django/django/contrib/gis/db/models/fields.py
deleted file mode 100644
index 2b16607..0000000
--- a/parts/django/django/contrib/gis/db/models/fields.py
+++ /dev/null
@@ -1,294 +0,0 @@
-from django.db.models.fields import Field
-from django.db.models.sql.expressions import SQLEvaluator
-from django.utils.translation import ugettext_lazy as _
-from django.contrib.gis import forms
-from django.contrib.gis.db.models.proxy import GeometryProxy
-from django.contrib.gis.geometry.backend import Geometry, GeometryException
-
-# 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
-# for SRID info each time a distance query is constructed.
-_srid_cache = {}
-
-def get_srid_info(srid, connection):
- """
- Returns the units, unit name, and spheroid WKT associated with the
- given SRID from the `spatial_ref_sys` (or equivalent) spatial database
- table for the given database connection. These results are cached.
- """
- global _srid_cache
-
- try:
- # The SpatialRefSys model for the spatial backend.
- SpatialRefSys = connection.ops.spatial_ref_sys()
- except NotImplementedError:
- # No `spatial_ref_sys` table in spatial backend (e.g., MySQL).
- return None, None, None
-
- if not connection.alias in _srid_cache:
- # Initialize SRID dictionary for database if it doesn't exist.
- _srid_cache[connection.alias] = {}
-
- if not srid in _srid_cache[connection.alias]:
- # Use `SpatialRefSys` model to query for spatial reference info.
- sr = SpatialRefSys.objects.using(connection.alias).get(srid=srid)
- units, units_name = sr.units
- spheroid = SpatialRefSys.get_spheroid(sr.wkt)
- _srid_cache[connection.alias][srid] = (units, units_name, spheroid)
-
- return _srid_cache[connection.alias][srid]
-
-class GeometryField(Field):
- "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-
- # The OpenGIS Geometry name.
- geom_type = 'GEOMETRY'
-
- # Geodetic units.
- geodetic_units = ('Decimal Degree', 'degree')
-
- description = _("The base GIS field -- maps to the OpenGIS Specification Geometry type.")
-
- def __init__(self, verbose_name=None, srid=4326, spatial_index=True, dim=2,
- geography=False, **kwargs):
- """
- The initialization function for geometry fields. Takes the following
- as keyword arguments:
-
- srid:
- The spatial reference system identifier, an OGC standard.
- Defaults to 4326 (WGS84).
-
- spatial_index:
- Indicates whether to create a spatial index. Defaults to True.
- Set this instead of 'db_index' for geographic fields since index
- creation is different for geometry columns.
-
- dim:
- The number of dimensions for this geometry. Defaults to 2.
-
- extent:
- Customize the extent, in a 4-tuple of WGS 84 coordinates, for the
- geometry field entry in the `USER_SDO_GEOM_METADATA` table. Defaults
- to (-180.0, -90.0, 180.0, 90.0).
-
- tolerance:
- Define the tolerance, in meters, to use for the geometry field
- entry in the `USER_SDO_GEOM_METADATA` table. Defaults to 0.05.
- """
-
- # Setting the index flag with the value of the `spatial_index` keyword.
- self.spatial_index = spatial_index
-
- # Setting the SRID and getting the units. Unit information must be
- # easily available in the field instance for distance queries.
- self.srid = srid
-
- # Setting the dimension of the geometry field.
- self.dim = dim
-
- # Setting the verbose_name keyword argument with the positional
- # first parameter, so this works like normal fields.
- kwargs['verbose_name'] = verbose_name
-
- # Is this a geography rather than a geometry column?
- self.geography = geography
-
- # Oracle-specific private attributes for creating the entrie in
- # `USER_SDO_GEOM_METADATA`
- self._extent = kwargs.pop('extent', (-180.0, -90.0, 180.0, 90.0))
- self._tolerance = kwargs.pop('tolerance', 0.05)
-
- super(GeometryField, self).__init__(**kwargs)
-
- # The following functions are used to get the units, their name, and
- # the spheroid corresponding to the SRID of the GeometryField.
- def _get_srid_info(self, connection):
- # Get attributes from `get_srid_info`.
- self._units, self._units_name, self._spheroid = get_srid_info(self.srid, connection)
-
- def spheroid(self, connection):
- if not hasattr(self, '_spheroid'):
- self._get_srid_info(connection)
- return self._spheroid
-
- def units(self, connection):
- if not hasattr(self, '_units'):
- self._get_srid_info(connection)
- return self._units
-
- def units_name(self, connection):
- if not hasattr(self, '_units_name'):
- self._get_srid_info(connection)
- return self._units_name
-
- ### Routines specific to GeometryField ###
- def geodetic(self, connection):
- """
- Returns true if this field's SRID corresponds with a coordinate
- system that uses non-projected units (e.g., latitude/longitude).
- """
- return self.units_name(connection) in self.geodetic_units
-
- def get_distance(self, value, lookup_type, connection):
- """
- Returns a distance number in units of the field. For example, if
- `D(km=1)` was passed in and the units of the field were in meters,
- then 1000 would be returned.
- """
- return connection.ops.get_distance(self, value, lookup_type)
-
- def get_prep_value(self, value):
- """
- Spatial lookup values are either a parameter that is (or may be
- converted to) a geometry, or a sequence of lookup values that
- begins with a geometry. This routine will setup the geometry
- value properly, and preserve any other lookup parameters before
- returning to the caller.
- """
- if isinstance(value, SQLEvaluator):
- return value
- elif isinstance(value, (tuple, list)):
- geom = value[0]
- seq_value = True
- else:
- geom = value
- seq_value = False
-
- # When the input is not a GEOS geometry, attempt to construct one
- # from the given string input.
- if isinstance(geom, Geometry):
- pass
- elif isinstance(geom, basestring) or hasattr(geom, '__geo_interface__'):
- try:
- geom = Geometry(geom)
- except GeometryException:
- raise ValueError('Could not create geometry from lookup value.')
- else:
- raise ValueError('Cannot use object with type %s for a geometry lookup parameter.' % type(geom).__name__)
-
- # Assigning the SRID value.
- geom.srid = self.get_srid(geom)
-
- if seq_value:
- lookup_val = [geom]
- lookup_val.extend(value[1:])
- return tuple(lookup_val)
- else:
- return geom
-
- def get_srid(self, geom):
- """
- Returns the default SRID for the given geometry, taking into account
- the SRID set for the field. For example, if the input geometry
- has no SRID, then that of the field will be returned.
- """
- gsrid = geom.srid # SRID of given geometry.
- if gsrid is None or self.srid == -1 or (gsrid == -1 and self.srid != -1):
- return self.srid
- else:
- return gsrid
-
- ### Routines overloaded from Field ###
- def contribute_to_class(self, cls, name):
- super(GeometryField, self).contribute_to_class(cls, name)
-
- # Setup for lazy-instantiated Geometry object.
- setattr(cls, self.attname, GeometryProxy(Geometry, self))
-
- def db_type(self, connection):
- return connection.ops.geo_db_type(self)
-
- def formfield(self, **kwargs):
- defaults = {'form_class' : forms.GeometryField,
- 'null' : self.null,
- 'geom_type' : self.geom_type,
- 'srid' : self.srid,
- }
- defaults.update(kwargs)
- return super(GeometryField, self).formfield(**defaults)
-
- def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
- """
- Prepare for the database lookup, and return any spatial parameters
- necessary for the query. This includes wrapping any geometry
- parameters with a backend-specific adapter and formatting any distance
- parameters into the correct units for the coordinate system of the
- field.
- """
- if lookup_type in connection.ops.gis_terms:
- # special case for isnull lookup
- if lookup_type == 'isnull':
- return []
-
- # Populating the parameters list, and wrapping the Geometry
- # with the Adapter of the spatial backend.
- if isinstance(value, (tuple, list)):
- params = [connection.ops.Adapter(value[0])]
- if lookup_type in connection.ops.distance_functions:
- # Getting the distance parameter in the units of the field.
- params += self.get_distance(value[1:], lookup_type, connection)
- elif lookup_type in connection.ops.truncate_params:
- # Lookup is one where SQL parameters aren't needed from the
- # given lookup value.
- pass
- else:
- params += value[1:]
- elif isinstance(value, SQLEvaluator):
- params = []
- else:
- params = [connection.ops.Adapter(value)]
-
- return params
- else:
- raise ValueError('%s is not a valid spatial lookup for %s.' %
- (lookup_type, self.__class__.__name__))
-
- def get_prep_lookup(self, lookup_type, value):
- if lookup_type == 'isnull':
- return bool(value)
- else:
- return self.get_prep_value(value)
-
- def get_db_prep_save(self, value, connection):
- "Prepares the value for saving in the database."
- if value is None:
- return None
- else:
- return connection.ops.Adapter(self.get_prep_value(value))
-
- def get_placeholder(self, value, connection):
- """
- Returns the placeholder for the geometry column for the
- given value.
- """
- return connection.ops.get_geom_placeholder(self, value)
-
-# The OpenGIS Geometry Type Fields
-class PointField(GeometryField):
- geom_type = 'POINT'
- description = _("Point")
-
-class LineStringField(GeometryField):
- geom_type = 'LINESTRING'
- description = _("Line string")
-
-class PolygonField(GeometryField):
- geom_type = 'POLYGON'
- description = _("Polygon")
-
-class MultiPointField(GeometryField):
- geom_type = 'MULTIPOINT'
- description = _("Multi-point")
-
-class MultiLineStringField(GeometryField):
- geom_type = 'MULTILINESTRING'
- description = _("Multi-line string")
-
-class MultiPolygonField(GeometryField):
- geom_type = 'MULTIPOLYGON'
- description = _("Multi polygon")
-
-class GeometryCollectionField(GeometryField):
- geom_type = 'GEOMETRYCOLLECTION'
- description = _("Geometry collection")
diff --git a/parts/django/django/contrib/gis/db/models/manager.py b/parts/django/django/contrib/gis/db/models/manager.py
deleted file mode 100644
index 61fb821..0000000
--- a/parts/django/django/contrib/gis/db/models/manager.py
+++ /dev/null
@@ -1,103 +0,0 @@
-from django.db.models.manager import Manager
-from django.contrib.gis.db.models.query import GeoQuerySet
-
-class GeoManager(Manager):
- "Overrides Manager to return Geographic QuerySets."
-
- # This manager should be used for queries on related fields
- # so that geometry columns on Oracle and MySQL are selected
- # properly.
- use_for_related_fields = True
-
- def get_query_set(self):
- return GeoQuerySet(self.model, using=self._db)
-
- def area(self, *args, **kwargs):
- return self.get_query_set().area(*args, **kwargs)
-
- def centroid(self, *args, **kwargs):
- return self.get_query_set().centroid(*args, **kwargs)
-
- def collect(self, *args, **kwargs):
- return self.get_query_set().collect(*args, **kwargs)
-
- def difference(self, *args, **kwargs):
- return self.get_query_set().difference(*args, **kwargs)
-
- def distance(self, *args, **kwargs):
- return self.get_query_set().distance(*args, **kwargs)
-
- def envelope(self, *args, **kwargs):
- return self.get_query_set().envelope(*args, **kwargs)
-
- def extent(self, *args, **kwargs):
- return self.get_query_set().extent(*args, **kwargs)
-
- def extent3d(self, *args, **kwargs):
- return self.get_query_set().extent3d(*args, **kwargs)
-
- def force_rhr(self, *args, **kwargs):
- return self.get_query_set().force_rhr(*args, **kwargs)
-
- def geohash(self, *args, **kwargs):
- return self.get_query_set().geohash(*args, **kwargs)
-
- def geojson(self, *args, **kwargs):
- return self.get_query_set().geojson(*args, **kwargs)
-
- def gml(self, *args, **kwargs):
- return self.get_query_set().gml(*args, **kwargs)
-
- def intersection(self, *args, **kwargs):
- return self.get_query_set().intersection(*args, **kwargs)
-
- def kml(self, *args, **kwargs):
- return self.get_query_set().kml(*args, **kwargs)
-
- def length(self, *args, **kwargs):
- return self.get_query_set().length(*args, **kwargs)
-
- def make_line(self, *args, **kwargs):
- return self.get_query_set().make_line(*args, **kwargs)
-
- def mem_size(self, *args, **kwargs):
- return self.get_query_set().mem_size(*args, **kwargs)
-
- def num_geom(self, *args, **kwargs):
- return self.get_query_set().num_geom(*args, **kwargs)
-
- def num_points(self, *args, **kwargs):
- return self.get_query_set().num_points(*args, **kwargs)
-
- def perimeter(self, *args, **kwargs):
- return self.get_query_set().perimeter(*args, **kwargs)
-
- def point_on_surface(self, *args, **kwargs):
- return self.get_query_set().point_on_surface(*args, **kwargs)
-
- def reverse_geom(self, *args, **kwargs):
- return self.get_query_set().reverse_geom(*args, **kwargs)
-
- def scale(self, *args, **kwargs):
- return self.get_query_set().scale(*args, **kwargs)
-
- def snap_to_grid(self, *args, **kwargs):
- return self.get_query_set().snap_to_grid(*args, **kwargs)
-
- def svg(self, *args, **kwargs):
- return self.get_query_set().svg(*args, **kwargs)
-
- def sym_difference(self, *args, **kwargs):
- return self.get_query_set().sym_difference(*args, **kwargs)
-
- def transform(self, *args, **kwargs):
- return self.get_query_set().transform(*args, **kwargs)
-
- def translate(self, *args, **kwargs):
- return self.get_query_set().translate(*args, **kwargs)
-
- def union(self, *args, **kwargs):
- return self.get_query_set().union(*args, **kwargs)
-
- def unionagg(self, *args, **kwargs):
- return self.get_query_set().unionagg(*args, **kwargs)
diff --git a/parts/django/django/contrib/gis/db/models/proxy.py b/parts/django/django/contrib/gis/db/models/proxy.py
deleted file mode 100644
index e569dd5..0000000
--- a/parts/django/django/contrib/gis/db/models/proxy.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-The GeometryProxy object, allows for lazy-geometries. The proxy uses
-Python descriptors for instantiating and setting Geometry objects
-corresponding to geographic model fields.
-
-Thanks to Robert Coup for providing this functionality (see #4322).
-"""
-
-class GeometryProxy(object):
- def __init__(self, klass, field):
- """
- Proxy initializes on the given Geometry class (not an instance) and
- the GeometryField.
- """
- self._field = field
- self._klass = klass
-
- def __get__(self, obj, type=None):
- """
- This accessor retrieves the geometry, initializing it using the geometry
- class specified during initialization and the HEXEWKB value of the field.
- Currently, only GEOS or OGR geometries are supported.
- """
- if obj is None:
- # Accessed on a class, not an instance
- return self
-
- # Getting the value of the field.
- geom_value = obj.__dict__[self._field.attname]
-
- if isinstance(geom_value, self._klass):
- geom = geom_value
- elif (geom_value is None) or (geom_value==''):
- geom = None
- else:
- # Otherwise, a Geometry object is built using the field's contents,
- # and the model's corresponding attribute is set.
- geom = self._klass(geom_value)
- setattr(obj, self._field.attname, geom)
- return geom
-
- def __set__(self, obj, value):
- """
- This accessor sets the proxied geometry with the geometry class
- specified during initialization. Values of None, HEXEWKB, or WKT may
- be used to set the geometry as well.
- """
- # The OGC Geometry type of the field.
- gtype = self._field.geom_type
-
- # The geometry type must match that of the field -- unless the
- # general GeometryField is used.
- if isinstance(value, self._klass) and (str(value.geom_type).upper() == gtype or gtype == 'GEOMETRY'):
- # Assigning the SRID to the geometry.
- if value.srid is None: value.srid = self._field.srid
- elif value is None or isinstance(value, (basestring, buffer)):
- # Set with None, WKT, HEX, or WKB
- pass
- else:
- raise TypeError('cannot set %s GeometryProxy with value of type: %s' % (obj.__class__.__name__, type(value)))
-
- # Setting the objects dictionary with the value, and returning.
- obj.__dict__[self._field.attname] = value
- return value
diff --git a/parts/django/django/contrib/gis/db/models/query.py b/parts/django/django/contrib/gis/db/models/query.py
deleted file mode 100644
index 4df1a3a..0000000
--- a/parts/django/django/contrib/gis/db/models/query.py
+++ /dev/null
@@ -1,777 +0,0 @@
-from django.db import connections
-from django.db.models.query import QuerySet, Q, ValuesQuerySet, ValuesListQuerySet
-
-from django.contrib.gis.db.models import aggregates
-from django.contrib.gis.db.models.fields import get_srid_info, GeometryField, PointField, LineStringField
-from django.contrib.gis.db.models.sql import AreaField, DistanceField, GeomField, GeoQuery, GeoWhereNode
-from django.contrib.gis.geometry.backend import Geometry
-from django.contrib.gis.measure import Area, Distance
-
-class GeoQuerySet(QuerySet):
- "The Geographic QuerySet."
-
- ### Methods overloaded from QuerySet ###
- def __init__(self, model=None, query=None, using=None):
- super(GeoQuerySet, self).__init__(model=model, query=query, using=using)
- self.query = query or GeoQuery(self.model)
-
- def values(self, *fields):
- return self._clone(klass=GeoValuesQuerySet, setup=True, _fields=fields)
-
- def values_list(self, *fields, **kwargs):
- flat = kwargs.pop('flat', False)
- if kwargs:
- raise TypeError('Unexpected keyword arguments to values_list: %s'
- % (kwargs.keys(),))
- if flat and len(fields) > 1:
- raise TypeError("'flat' is not valid when values_list is called with more than one field.")
- return self._clone(klass=GeoValuesListQuerySet, setup=True, flat=flat,
- _fields=fields)
-
- ### GeoQuerySet Methods ###
- def area(self, tolerance=0.05, **kwargs):
- """
- Returns the area of the geographic field in an `area` attribute on
- each element of this GeoQuerySet.
- """
- # Peforming setup here rather than in `_spatial_attribute` so that
- # we can get the units for `AreaField`.
- procedure_args, geo_field = self._spatial_setup('area', field_name=kwargs.get('field_name', None))
- s = {'procedure_args' : procedure_args,
- 'geo_field' : geo_field,
- 'setup' : False,
- }
- connection = connections[self.db]
- backend = connection.ops
- if backend.oracle:
- s['procedure_fmt'] = '%(geo_col)s,%(tolerance)s'
- s['procedure_args']['tolerance'] = tolerance
- s['select_field'] = AreaField('sq_m') # Oracle returns area in units of meters.
- elif backend.postgis or backend.spatialite:
- if backend.geography:
- # Geography fields support area calculation, returns square meters.
- s['select_field'] = AreaField('sq_m')
- elif not geo_field.geodetic(connection):
- # Getting the area units of the geographic field.
- s['select_field'] = AreaField(Area.unit_attname(geo_field.units_name(connection)))
- else:
- # TODO: Do we want to support raw number areas for geodetic fields?
- raise Exception('Area on geodetic coordinate systems not supported.')
- return self._spatial_attribute('area', s, **kwargs)
-
- def centroid(self, **kwargs):
- """
- Returns the centroid of the geographic field in a `centroid`
- attribute on each element of this GeoQuerySet.
- """
- return self._geom_attribute('centroid', **kwargs)
-
- def collect(self, **kwargs):
- """
- Performs an aggregate collect operation on the given geometry field.
- This is analagous to a union operation, but much faster because
- boundaries are not dissolved.
- """
- return self._spatial_aggregate(aggregates.Collect, **kwargs)
-
- def difference(self, geom, **kwargs):
- """
- Returns the spatial difference of the geographic field in a `difference`
- attribute on each element of this GeoQuerySet.
- """
- return self._geomset_attribute('difference', geom, **kwargs)
-
- def distance(self, geom, **kwargs):
- """
- Returns the distance from the given geographic field name to the
- given geometry in a `distance` attribute on each element of the
- GeoQuerySet.
-
- Keyword Arguments:
- `spheroid` => If the geometry field is geodetic and PostGIS is
- the spatial database, then the more accurate
- spheroid calculation will be used instead of the
- quicker sphere calculation.
-
- `tolerance` => Used only for Oracle. The tolerance is
- in meters -- a default of 5 centimeters (0.05)
- is used.
- """
- return self._distance_attribute('distance', geom, **kwargs)
-
- def envelope(self, **kwargs):
- """
- Returns a Geometry representing the bounding box of the
- Geometry field in an `envelope` attribute on each element of
- the GeoQuerySet.
- """
- return self._geom_attribute('envelope', **kwargs)
-
- def extent(self, **kwargs):
- """
- Returns the extent (aggregate) of the features in the GeoQuerySet. The
- extent will be returned as a 4-tuple, consisting of (xmin, ymin, xmax, ymax).
- """
- return self._spatial_aggregate(aggregates.Extent, **kwargs)
-
- def extent3d(self, **kwargs):
- """
- Returns the aggregate extent, in 3D, of the features in the
- GeoQuerySet. It is returned as a 6-tuple, comprising:
- (xmin, ymin, zmin, xmax, ymax, zmax).
- """
- return self._spatial_aggregate(aggregates.Extent3D, **kwargs)
-
- def force_rhr(self, **kwargs):
- """
- Returns a modified version of the Polygon/MultiPolygon in which
- all of the vertices follow the Right-Hand-Rule. By default,
- this is attached as the `force_rhr` attribute on each element
- of the GeoQuerySet.
- """
- return self._geom_attribute('force_rhr', **kwargs)
-
- def geojson(self, precision=8, crs=False, bbox=False, **kwargs):
- """
- Returns a GeoJSON representation of the geomtry field in a `geojson`
- attribute on each element of the GeoQuerySet.
-
- The `crs` and `bbox` keywords may be set to True if the users wants
- the coordinate reference system and the bounding box to be included
- in the GeoJSON representation of the geometry.
- """
- backend = connections[self.db].ops
- if not backend.geojson:
- raise NotImplementedError('Only PostGIS 1.3.4+ supports GeoJSON serialization.')
-
- if not isinstance(precision, (int, long)):
- raise TypeError('Precision keyword must be set with an integer.')
-
- # Setting the options flag -- which depends on which version of
- # PostGIS we're using.
- if backend.spatial_version >= (1, 4, 0):
- options = 0
- if crs and bbox: options = 3
- elif bbox: options = 1
- elif crs: options = 2
- else:
- options = 0
- if crs and bbox: options = 3
- elif crs: options = 1
- elif bbox: options = 2
- s = {'desc' : 'GeoJSON',
- 'procedure_args' : {'precision' : precision, 'options' : options},
- 'procedure_fmt' : '%(geo_col)s,%(precision)s,%(options)s',
- }
- return self._spatial_attribute('geojson', s, **kwargs)
-
- def geohash(self, precision=20, **kwargs):
- """
- Returns a GeoHash representation of the given field in a `geohash`
- attribute on each element of the GeoQuerySet.
-
- The `precision` keyword may be used to custom the number of
- _characters_ used in the output GeoHash, the default is 20.
- """
- s = {'desc' : 'GeoHash',
- 'procedure_args': {'precision': precision},
- 'procedure_fmt': '%(geo_col)s,%(precision)s',
- }
- return self._spatial_attribute('geohash', s, **kwargs)
-
- def gml(self, precision=8, version=2, **kwargs):
- """
- Returns GML representation of the given field in a `gml` attribute
- on each element of the GeoQuerySet.
- """
- backend = connections[self.db].ops
- s = {'desc' : 'GML', 'procedure_args' : {'precision' : precision}}
- if backend.postgis:
- # PostGIS AsGML() aggregate function parameter order depends on the
- # version -- uggh.
- if backend.spatial_version > (1, 3, 1):
- procedure_fmt = '%(version)s,%(geo_col)s,%(precision)s'
- else:
- procedure_fmt = '%(geo_col)s,%(precision)s,%(version)s'
- s['procedure_args'] = {'precision' : precision, 'version' : version}
-
- return self._spatial_attribute('gml', s, **kwargs)
-
- def intersection(self, geom, **kwargs):
- """
- Returns the spatial intersection of the Geometry field in
- an `intersection` attribute on each element of this
- GeoQuerySet.
- """
- return self._geomset_attribute('intersection', geom, **kwargs)
-
- def kml(self, **kwargs):
- """
- Returns KML representation of the geometry field in a `kml`
- attribute on each element of this GeoQuerySet.
- """
- s = {'desc' : 'KML',
- 'procedure_fmt' : '%(geo_col)s,%(precision)s',
- 'procedure_args' : {'precision' : kwargs.pop('precision', 8)},
- }
- return self._spatial_attribute('kml', s, **kwargs)
-
- def length(self, **kwargs):
- """
- Returns the length of the geometry field as a `Distance` object
- stored in a `length` attribute on each element of this GeoQuerySet.
- """
- return self._distance_attribute('length', None, **kwargs)
-
- def make_line(self, **kwargs):
- """
- Creates a linestring from all of the PointField geometries in the
- this GeoQuerySet and returns it. This is a spatial aggregate
- method, and thus returns a geometry rather than a GeoQuerySet.
- """
- return self._spatial_aggregate(aggregates.MakeLine, geo_field_type=PointField, **kwargs)
-
- def mem_size(self, **kwargs):
- """
- Returns the memory size (number of bytes) that the geometry field takes
- in a `mem_size` attribute on each element of this GeoQuerySet.
- """
- return self._spatial_attribute('mem_size', {}, **kwargs)
-
- def num_geom(self, **kwargs):
- """
- Returns the number of geometries if the field is a
- GeometryCollection or Multi* Field in a `num_geom`
- attribute on each element of this GeoQuerySet; otherwise
- the sets with None.
- """
- return self._spatial_attribute('num_geom', {}, **kwargs)
-
- def num_points(self, **kwargs):
- """
- Returns the number of points in the first linestring in the
- Geometry field in a `num_points` attribute on each element of
- this GeoQuerySet; otherwise sets with None.
- """
- return self._spatial_attribute('num_points', {}, **kwargs)
-
- def perimeter(self, **kwargs):
- """
- Returns the perimeter of the geometry field as a `Distance` object
- stored in a `perimeter` attribute on each element of this GeoQuerySet.
- """
- return self._distance_attribute('perimeter', None, **kwargs)
-
- def point_on_surface(self, **kwargs):
- """
- Returns a Point geometry guaranteed to lie on the surface of the
- Geometry field in a `point_on_surface` attribute on each element
- of this GeoQuerySet; otherwise sets with None.
- """
- return self._geom_attribute('point_on_surface', **kwargs)
-
- def reverse_geom(self, **kwargs):
- """
- Reverses the coordinate order of the geometry, and attaches as a
- `reverse` attribute on each element of this GeoQuerySet.
- """
- s = {'select_field' : GeomField(),}
- kwargs.setdefault('model_att', 'reverse_geom')
- if connections[self.db].ops.oracle:
- s['geo_field_type'] = LineStringField
- return self._spatial_attribute('reverse', s, **kwargs)
-
- def scale(self, x, y, z=0.0, **kwargs):
- """
- Scales the geometry to a new size by multiplying the ordinates
- with the given x,y,z scale factors.
- """
- if connections[self.db].ops.spatialite:
- if z != 0.0:
- raise NotImplementedError('SpatiaLite does not support 3D scaling.')
- s = {'procedure_fmt' : '%(geo_col)s,%(x)s,%(y)s',
- 'procedure_args' : {'x' : x, 'y' : y},
- 'select_field' : GeomField(),
- }
- else:
- s = {'procedure_fmt' : '%(geo_col)s,%(x)s,%(y)s,%(z)s',
- 'procedure_args' : {'x' : x, 'y' : y, 'z' : z},
- 'select_field' : GeomField(),
- }
- return self._spatial_attribute('scale', s, **kwargs)
-
- def snap_to_grid(self, *args, **kwargs):
- """
- Snap all points of the input geometry to the grid. How the
- geometry is snapped to the grid depends on how many arguments
- were given:
- - 1 argument : A single size to snap both the X and Y grids to.
- - 2 arguments: X and Y sizes to snap the grid to.
- - 4 arguments: X, Y sizes and the X, Y origins.
- """
- if False in [isinstance(arg, (float, int, long)) for arg in args]:
- raise TypeError('Size argument(s) for the grid must be a float or integer values.')
-
- nargs = len(args)
- if nargs == 1:
- size = args[0]
- procedure_fmt = '%(geo_col)s,%(size)s'
- procedure_args = {'size' : size}
- elif nargs == 2:
- xsize, ysize = args
- procedure_fmt = '%(geo_col)s,%(xsize)s,%(ysize)s'
- procedure_args = {'xsize' : xsize, 'ysize' : ysize}
- elif nargs == 4:
- xsize, ysize, xorigin, yorigin = args
- procedure_fmt = '%(geo_col)s,%(xorigin)s,%(yorigin)s,%(xsize)s,%(ysize)s'
- procedure_args = {'xsize' : xsize, 'ysize' : ysize,
- 'xorigin' : xorigin, 'yorigin' : yorigin}
- else:
- raise ValueError('Must provide 1, 2, or 4 arguments to `snap_to_grid`.')
-
- s = {'procedure_fmt' : procedure_fmt,
- 'procedure_args' : procedure_args,
- 'select_field' : GeomField(),
- }
-
- return self._spatial_attribute('snap_to_grid', s, **kwargs)
-
- def svg(self, relative=False, precision=8, **kwargs):
- """
- Returns SVG representation of the geographic field in a `svg`
- attribute on each element of this GeoQuerySet.
-
- Keyword Arguments:
- `relative` => If set to True, this will evaluate the path in
- terms of relative moves (rather than absolute).
-
- `precision` => May be used to set the maximum number of decimal
- digits used in output (defaults to 8).
- """
- relative = int(bool(relative))
- if not isinstance(precision, (int, long)):
- raise TypeError('SVG precision keyword argument must be an integer.')
- s = {'desc' : 'SVG',
- 'procedure_fmt' : '%(geo_col)s,%(rel)s,%(precision)s',
- 'procedure_args' : {'rel' : relative,
- 'precision' : precision,
- }
- }
- return self._spatial_attribute('svg', s, **kwargs)
-
- def sym_difference(self, geom, **kwargs):
- """
- Returns the symmetric difference of the geographic field in a
- `sym_difference` attribute on each element of this GeoQuerySet.
- """
- return self._geomset_attribute('sym_difference', geom, **kwargs)
-
- def translate(self, x, y, z=0.0, **kwargs):
- """
- Translates the geometry to a new location using the given numeric
- parameters as offsets.
- """
- if connections[self.db].ops.spatialite:
- if z != 0.0:
- raise NotImplementedError('SpatiaLite does not support 3D translation.')
- s = {'procedure_fmt' : '%(geo_col)s,%(x)s,%(y)s',
- 'procedure_args' : {'x' : x, 'y' : y},
- 'select_field' : GeomField(),
- }
- else:
- s = {'procedure_fmt' : '%(geo_col)s,%(x)s,%(y)s,%(z)s',
- 'procedure_args' : {'x' : x, 'y' : y, 'z' : z},
- 'select_field' : GeomField(),
- }
- return self._spatial_attribute('translate', s, **kwargs)
-
- def transform(self, srid=4326, **kwargs):
- """
- Transforms the given geometry field to the given SRID. If no SRID is
- provided, the transformation will default to using 4326 (WGS84).
- """
- if not isinstance(srid, (int, long)):
- raise TypeError('An integer SRID must be provided.')
- field_name = kwargs.get('field_name', None)
- tmp, geo_field = self._spatial_setup('transform', field_name=field_name)
-
- # Getting the selection SQL for the given geographic field.
- field_col = self._geocol_select(geo_field, field_name)
-
- # Why cascading substitutions? Because spatial backends like
- # Oracle and MySQL already require a function call to convert to text, thus
- # when there's also a transformation we need to cascade the substitutions.
- # For example, 'SDO_UTIL.TO_WKTGEOMETRY(SDO_CS.TRANSFORM( ... )'
- geo_col = self.query.custom_select.get(geo_field, field_col)
-
- # Setting the key for the field's column with the custom SELECT SQL to
- # override the geometry column returned from the database.
- custom_sel = '%s(%s, %s)' % (connections[self.db].ops.transform, geo_col, srid)
- # TODO: Should we have this as an alias?
- # custom_sel = '(%s(%s, %s)) AS %s' % (SpatialBackend.transform, geo_col, srid, qn(geo_field.name))
- self.query.transformed_srid = srid # So other GeoQuerySet methods
- self.query.custom_select[geo_field] = custom_sel
- return self._clone()
-
- def union(self, geom, **kwargs):
- """
- Returns the union of the geographic field with the given
- Geometry in a `union` attribute on each element of this GeoQuerySet.
- """
- return self._geomset_attribute('union', geom, **kwargs)
-
- def unionagg(self, **kwargs):
- """
- Performs an aggregate union on the given geometry field. Returns
- None if the GeoQuerySet is empty. The `tolerance` keyword is for
- Oracle backends only.
- """
- return self._spatial_aggregate(aggregates.Union, **kwargs)
-
- ### Private API -- Abstracted DRY routines. ###
- def _spatial_setup(self, att, desc=None, field_name=None, geo_field_type=None):
- """
- Performs set up for executing the spatial function.
- """
- # Does the spatial backend support this?
- connection = connections[self.db]
- func = getattr(connection.ops, att, False)
- if desc is None: desc = att
- if not func:
- raise NotImplementedError('%s stored procedure not available on '
- 'the %s backend.' %
- (desc, connection.ops.name))
-
- # Initializing the procedure arguments.
- procedure_args = {'function' : func}
-
- # Is there a geographic field in the model to perform this
- # operation on?
- geo_field = self.query._geo_field(field_name)
- if not geo_field:
- raise TypeError('%s output only available on GeometryFields.' % func)
-
- # If the `geo_field_type` keyword was used, then enforce that
- # type limitation.
- if not geo_field_type is None and not isinstance(geo_field, geo_field_type):
- raise TypeError('"%s" stored procedures may only be called on %ss.' % (func, geo_field_type.__name__))
-
- # Setting the procedure args.
- procedure_args['geo_col'] = self._geocol_select(geo_field, field_name)
-
- return procedure_args, geo_field
-
- def _spatial_aggregate(self, aggregate, field_name=None,
- geo_field_type=None, tolerance=0.05):
- """
- DRY routine for calling aggregate spatial stored procedures and
- returning their result to the caller of the function.
- """
- # Getting the field the geographic aggregate will be called on.
- geo_field = self.query._geo_field(field_name)
- if not geo_field:
- raise TypeError('%s aggregate only available on GeometryFields.' % aggregate.name)
-
- # Checking if there are any geo field type limitations on this
- # aggregate (e.g. ST_Makeline only operates on PointFields).
- if not geo_field_type is None and not isinstance(geo_field, geo_field_type):
- raise TypeError('%s aggregate may only be called on %ss.' % (aggregate.name, geo_field_type.__name__))
-
- # Getting the string expression of the field name, as this is the
- # argument taken by `Aggregate` objects.
- agg_col = field_name or geo_field.name
-
- # Adding any keyword parameters for the Aggregate object. Oracle backends
- # in particular need an additional `tolerance` parameter.
- agg_kwargs = {}
- if connections[self.db].ops.oracle: agg_kwargs['tolerance'] = tolerance
-
- # Calling the QuerySet.aggregate, and returning only the value of the aggregate.
- return self.aggregate(geoagg=aggregate(agg_col, **agg_kwargs))['geoagg']
-
- def _spatial_attribute(self, att, settings, field_name=None, model_att=None):
- """
- DRY routine for calling a spatial stored procedure on a geometry column
- and attaching its output as an attribute of the model.
-
- Arguments:
- att:
- The name of the spatial attribute that holds the spatial
- SQL function to call.
-
- settings:
- Dictonary of internal settings to customize for the spatial procedure.
-
- Public Keyword Arguments:
-
- field_name:
- The name of the geographic field to call the spatial
- function on. May also be a lookup to a geometry field
- as part of a foreign key relation.
-
- model_att:
- The name of the model attribute to attach the output of
- the spatial function to.
- """
- # Default settings.
- settings.setdefault('desc', None)
- settings.setdefault('geom_args', ())
- settings.setdefault('geom_field', None)
- settings.setdefault('procedure_args', {})
- settings.setdefault('procedure_fmt', '%(geo_col)s')
- settings.setdefault('select_params', [])
-
- connection = connections[self.db]
- backend = connection.ops
-
- # Performing setup for the spatial column, unless told not to.
- if settings.get('setup', True):
- default_args, geo_field = self._spatial_setup(att, desc=settings['desc'], field_name=field_name,
- geo_field_type=settings.get('geo_field_type', None))
- for k, v in default_args.iteritems(): settings['procedure_args'].setdefault(k, v)
- else:
- geo_field = settings['geo_field']
-
- # The attribute to attach to the model.
- if not isinstance(model_att, basestring): model_att = att
-
- # Special handling for any argument that is a geometry.
- for name in settings['geom_args']:
- # Using the field's get_placeholder() routine to get any needed
- # transformation SQL.
- geom = geo_field.get_prep_value(settings['procedure_args'][name])
- params = geo_field.get_db_prep_lookup('contains', geom, connection=connection)
- geom_placeholder = geo_field.get_placeholder(geom, connection)
-
- # Replacing the procedure format with that of any needed
- # transformation SQL.
- old_fmt = '%%(%s)s' % name
- new_fmt = geom_placeholder % '%%s'
- settings['procedure_fmt'] = settings['procedure_fmt'].replace(old_fmt, new_fmt)
- settings['select_params'].extend(params)
-
- # Getting the format for the stored procedure.
- fmt = '%%(function)s(%s)' % settings['procedure_fmt']
-
- # If the result of this function needs to be converted.
- if settings.get('select_field', False):
- sel_fld = settings['select_field']
- if isinstance(sel_fld, GeomField) and backend.select:
- self.query.custom_select[model_att] = backend.select
- if connection.ops.oracle:
- sel_fld.empty_strings_allowed = False
- self.query.extra_select_fields[model_att] = sel_fld
-
- # Finally, setting the extra selection attribute with
- # the format string expanded with the stored procedure
- # arguments.
- return self.extra(select={model_att : fmt % settings['procedure_args']},
- select_params=settings['select_params'])
-
- def _distance_attribute(self, func, geom=None, tolerance=0.05, spheroid=False, **kwargs):
- """
- DRY routine for GeoQuerySet distance attribute routines.
- """
- # Setting up the distance procedure arguments.
- procedure_args, geo_field = self._spatial_setup(func, field_name=kwargs.get('field_name', None))
-
- # If geodetic defaulting distance attribute to meters (Oracle and
- # PostGIS spherical distances return meters). Otherwise, use the
- # units of the geometry field.
- connection = connections[self.db]
- geodetic = geo_field.geodetic(connection)
- geography = geo_field.geography
-
- if geodetic:
- dist_att = 'm'
- else:
- dist_att = Distance.unit_attname(geo_field.units_name(connection))
-
- # Shortcut booleans for what distance function we're using and
- # whether the geometry field is 3D.
- distance = func == 'distance'
- length = func == 'length'
- perimeter = func == 'perimeter'
- if not (distance or length or perimeter):
- raise ValueError('Unknown distance function: %s' % func)
- geom_3d = geo_field.dim == 3
-
- # The field's get_db_prep_lookup() is used to get any
- # extra distance parameters. Here we set up the
- # parameters that will be passed in to field's function.
- lookup_params = [geom or 'POINT (0 0)', 0]
-
- # Getting the spatial backend operations.
- backend = connection.ops
-
- # If the spheroid calculation is desired, either by the `spheroid`
- # keyword or when calculating the length of geodetic field, make
- # sure the 'spheroid' distance setting string is passed in so we
- # get the correct spatial stored procedure.
- if spheroid or (backend.postgis and geodetic and
- (not geography) and length):
- lookup_params.append('spheroid')
- lookup_params = geo_field.get_prep_value(lookup_params)
- params = geo_field.get_db_prep_lookup('distance_lte', lookup_params, connection=connection)
-
- # The `geom_args` flag is set to true if a geometry parameter was
- # passed in.
- geom_args = bool(geom)
-
- if backend.oracle:
- if distance:
- procedure_fmt = '%(geo_col)s,%(geom)s,%(tolerance)s'
- elif length or perimeter:
- procedure_fmt = '%(geo_col)s,%(tolerance)s'
- procedure_args['tolerance'] = tolerance
- else:
- # Getting whether this field is in units of degrees since the field may have
- # been transformed via the `transform` GeoQuerySet method.
- if self.query.transformed_srid:
- u, unit_name, s = get_srid_info(self.query.transformed_srid, connection)
- geodetic = unit_name in geo_field.geodetic_units
-
- if backend.spatialite and geodetic:
- raise ValueError('SQLite does not support linear distance calculations on geodetic coordinate systems.')
-
- if distance:
- if self.query.transformed_srid:
- # Setting the `geom_args` flag to false because we want to handle
- # transformation SQL here, rather than the way done by default
- # (which will transform to the original SRID of the field rather
- # than to what was transformed to).
- geom_args = False
- procedure_fmt = '%s(%%(geo_col)s, %s)' % (backend.transform, self.query.transformed_srid)
- if geom.srid is None or geom.srid == self.query.transformed_srid:
- # If the geom parameter srid is None, it is assumed the coordinates
- # are in the transformed units. A placeholder is used for the
- # geometry parameter. `GeomFromText` constructor is also needed
- # to wrap geom placeholder for SpatiaLite.
- if backend.spatialite:
- procedure_fmt += ', %s(%%%%s, %s)' % (backend.from_text, self.query.transformed_srid)
- else:
- procedure_fmt += ', %%s'
- else:
- # We need to transform the geom to the srid specified in `transform()`,
- # so wrapping the geometry placeholder in transformation SQL.
- # SpatiaLite also needs geometry placeholder wrapped in `GeomFromText`
- # constructor.
- if backend.spatialite:
- procedure_fmt += ', %s(%s(%%%%s, %s), %s)' % (backend.transform, backend.from_text,
- geom.srid, self.query.transformed_srid)
- else:
- procedure_fmt += ', %s(%%%%s, %s)' % (backend.transform, self.query.transformed_srid)
- else:
- # `transform()` was not used on this GeoQuerySet.
- procedure_fmt = '%(geo_col)s,%(geom)s'
-
- if not geography and geodetic:
- # Spherical distance calculation is needed (because the geographic
- # field is geodetic). However, the PostGIS ST_distance_sphere/spheroid()
- # procedures may only do queries from point columns to point geometries
- # some error checking is required.
- if not backend.geography:
- if not isinstance(geo_field, PointField):
- raise ValueError('Spherical distance calculation only supported on PointFields.')
- if not str(Geometry(buffer(params[0].ewkb)).geom_type) == 'Point':
- raise ValueError('Spherical distance calculation only supported with Point Geometry parameters')
- # The `function` procedure argument needs to be set differently for
- # geodetic distance calculations.
- if spheroid:
- # Call to distance_spheroid() requires spheroid param as well.
- procedure_fmt += ",'%(spheroid)s'"
- procedure_args.update({'function' : backend.distance_spheroid, 'spheroid' : params[1]})
- else:
- procedure_args.update({'function' : backend.distance_sphere})
- elif length or perimeter:
- procedure_fmt = '%(geo_col)s'
- if not geography and geodetic and length:
- # There's no `length_sphere`, and `length_spheroid` also
- # works on 3D geometries.
- procedure_fmt += ",'%(spheroid)s'"
- procedure_args.update({'function' : backend.length_spheroid, 'spheroid' : params[1]})
- elif geom_3d and backend.postgis:
- # Use 3D variants of perimeter and length routines on PostGIS.
- if perimeter:
- procedure_args.update({'function' : backend.perimeter3d})
- elif length:
- procedure_args.update({'function' : backend.length3d})
-
- # Setting up the settings for `_spatial_attribute`.
- s = {'select_field' : DistanceField(dist_att),
- 'setup' : False,
- 'geo_field' : geo_field,
- 'procedure_args' : procedure_args,
- 'procedure_fmt' : procedure_fmt,
- }
- if geom_args:
- s['geom_args'] = ('geom',)
- s['procedure_args']['geom'] = geom
- elif geom:
- # The geometry is passed in as a parameter because we handled
- # transformation conditions in this routine.
- s['select_params'] = [backend.Adapter(geom)]
- return self._spatial_attribute(func, s, **kwargs)
-
- def _geom_attribute(self, func, tolerance=0.05, **kwargs):
- """
- DRY routine for setting up a GeoQuerySet method that attaches a
- Geometry attribute (e.g., `centroid`, `point_on_surface`).
- """
- s = {'select_field' : GeomField(),}
- if connections[self.db].ops.oracle:
- s['procedure_fmt'] = '%(geo_col)s,%(tolerance)s'
- s['procedure_args'] = {'tolerance' : tolerance}
- return self._spatial_attribute(func, s, **kwargs)
-
- def _geomset_attribute(self, func, geom, tolerance=0.05, **kwargs):
- """
- DRY routine for setting up a GeoQuerySet method that attaches a
- Geometry attribute and takes a Geoemtry parameter. This is used
- for geometry set-like operations (e.g., intersection, difference,
- union, sym_difference).
- """
- s = {'geom_args' : ('geom',),
- 'select_field' : GeomField(),
- 'procedure_fmt' : '%(geo_col)s,%(geom)s',
- 'procedure_args' : {'geom' : geom},
- }
- if connections[self.db].ops.oracle:
- s['procedure_fmt'] += ',%(tolerance)s'
- s['procedure_args']['tolerance'] = tolerance
- return self._spatial_attribute(func, s, **kwargs)
-
- def _geocol_select(self, geo_field, field_name):
- """
- Helper routine for constructing the SQL to select the geographic
- column. Takes into account if the geographic field is in a
- ForeignKey relation to the current model.
- """
- opts = self.model._meta
- if not geo_field in opts.fields:
- # Is this operation going to be on a related geographic field?
- # If so, it'll have to be added to the select related information
- # (e.g., if 'location__point' was given as the field name).
- self.query.add_select_related([field_name])
- compiler = self.query.get_compiler(self.db)
- compiler.pre_sql_setup()
- rel_table, rel_col = self.query.related_select_cols[self.query.related_select_fields.index(geo_field)]
- return compiler._field_column(geo_field, rel_table)
- elif not geo_field in opts.local_fields:
- # This geographic field is inherited from another model, so we have to
- # use the db table for the _parent_ model instead.
- tmp_fld, parent_model, direct, m2m = opts.get_field_by_name(geo_field.name)
- return self.query.get_compiler(self.db)._field_column(geo_field, parent_model._meta.db_table)
- else:
- return self.query.get_compiler(self.db)._field_column(geo_field)
-
-class GeoValuesQuerySet(ValuesQuerySet):
- def __init__(self, *args, **kwargs):
- super(GeoValuesQuerySet, self).__init__(*args, **kwargs)
- # This flag tells `resolve_columns` to run the values through
- # `convert_values`. This ensures that Geometry objects instead
- # of string values are returned with `values()` or `values_list()`.
- self.query.geo_values = True
-
-class GeoValuesListQuerySet(GeoValuesQuerySet, ValuesListQuerySet):
- pass
diff --git a/parts/django/django/contrib/gis/db/models/sql/__init__.py b/parts/django/django/contrib/gis/db/models/sql/__init__.py
deleted file mode 100644
index 38d9507..0000000
--- a/parts/django/django/contrib/gis/db/models/sql/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.contrib.gis.db.models.sql.conversion import AreaField, DistanceField, GeomField
-from django.contrib.gis.db.models.sql.query import GeoQuery
-from django.contrib.gis.db.models.sql.where import GeoWhereNode
diff --git a/parts/django/django/contrib/gis/db/models/sql/aggregates.py b/parts/django/django/contrib/gis/db/models/sql/aggregates.py
deleted file mode 100644
index fed2a2e..0000000
--- a/parts/django/django/contrib/gis/db/models/sql/aggregates.py
+++ /dev/null
@@ -1,61 +0,0 @@
-from django.db.models.sql.aggregates import *
-from django.contrib.gis.db.models.fields import GeometryField
-from django.contrib.gis.db.models.sql.conversion import GeomField
-
-class GeoAggregate(Aggregate):
- # Default SQL template for spatial aggregates.
- sql_template = '%(function)s(%(field)s)'
-
- # Conversion class, if necessary.
- conversion_class = None
-
- # Flags for indicating the type of the aggregate.
- is_extent = False
-
- def __init__(self, col, source=None, is_summary=False, tolerance=0.05, **extra):
- super(GeoAggregate, self).__init__(col, source, is_summary, **extra)
-
- # Required by some Oracle aggregates.
- self.tolerance = tolerance
-
- # Can't use geographic aggregates on non-geometry fields.
- if not isinstance(self.source, GeometryField):
- raise ValueError('Geospatial aggregates only allowed on geometry fields.')
-
- def as_sql(self, qn, connection):
- "Return the aggregate, rendered as SQL."
-
- if connection.ops.oracle:
- self.extra['tolerance'] = self.tolerance
-
- if hasattr(self.col, 'as_sql'):
- field_name = self.col.as_sql(qn, connection)
- elif isinstance(self.col, (list, tuple)):
- field_name = '.'.join([qn(c) for c in self.col])
- else:
- field_name = self.col
-
- sql_template, sql_function = connection.ops.spatial_aggregate_sql(self)
-
- params = {
- 'function': sql_function,
- 'field': field_name
- }
- params.update(self.extra)
-
- return sql_template % params
-
-class Collect(GeoAggregate):
- pass
-
-class Extent(GeoAggregate):
- is_extent = '2D'
-
-class Extent3D(GeoAggregate):
- is_extent = '3D'
-
-class MakeLine(GeoAggregate):
- pass
-
-class Union(GeoAggregate):
- pass
diff --git a/parts/django/django/contrib/gis/db/models/sql/compiler.py b/parts/django/django/contrib/gis/db/models/sql/compiler.py
deleted file mode 100644
index dea0fd3..0000000
--- a/parts/django/django/contrib/gis/db/models/sql/compiler.py
+++ /dev/null
@@ -1,278 +0,0 @@
-from itertools import izip
-from django.db.backends.util import truncate_name
-from django.db.models.sql import compiler
-from django.db.models.sql.constants import TABLE_NAME
-from django.db.models.sql.query import get_proxied_model
-
-SQLCompiler = compiler.SQLCompiler
-
-class GeoSQLCompiler(compiler.SQLCompiler):
-
- def get_columns(self, with_aliases=False):
- """
- Return the list of columns to use in the select statement. If no
- columns have been specified, returns all columns relating to fields in
- the model.
-
- If 'with_aliases' is true, any column names that are duplicated
- (without the table names) are given unique aliases. This is needed in
- some cases to avoid ambiguitity with nested queries.
-
- This routine is overridden from Query to handle customized selection of
- geometry columns.
- """
- qn = self.quote_name_unless_alias
- qn2 = self.connection.ops.quote_name
- result = ['(%s) AS %s' % (self.get_extra_select_format(alias) % col[0], qn2(alias))
- for alias, col in self.query.extra_select.iteritems()]
- aliases = set(self.query.extra_select.keys())
- if with_aliases:
- col_aliases = aliases.copy()
- else:
- col_aliases = set()
- if self.query.select:
- only_load = self.deferred_to_columns()
- # This loop customized for GeoQuery.
- for col, field in izip(self.query.select, self.query.select_fields):
- if isinstance(col, (list, tuple)):
- alias, column = col
- table = self.query.alias_map[alias][TABLE_NAME]
- if table in only_load and col not in only_load[table]:
- continue
- r = self.get_field_select(field, alias, column)
- if with_aliases:
- if col[1] in col_aliases:
- c_alias = 'Col%d' % len(col_aliases)
- result.append('%s AS %s' % (r, c_alias))
- aliases.add(c_alias)
- col_aliases.add(c_alias)
- else:
- result.append('%s AS %s' % (r, qn2(col[1])))
- aliases.add(r)
- col_aliases.add(col[1])
- else:
- result.append(r)
- aliases.add(r)
- col_aliases.add(col[1])
- else:
- result.append(col.as_sql(qn, self.connection))
-
- if hasattr(col, 'alias'):
- aliases.add(col.alias)
- col_aliases.add(col.alias)
-
- elif self.query.default_cols:
- cols, new_aliases = self.get_default_columns(with_aliases,
- col_aliases)
- result.extend(cols)
- aliases.update(new_aliases)
-
- max_name_length = self.connection.ops.max_name_length()
- result.extend([
- '%s%s' % (
- self.get_extra_select_format(alias) % aggregate.as_sql(qn, self.connection),
- alias is not None
- and ' AS %s' % qn(truncate_name(alias, max_name_length))
- or ''
- )
- for alias, aggregate in self.query.aggregate_select.items()
- ])
-
- # This loop customized for GeoQuery.
- for (table, col), field in izip(self.query.related_select_cols, self.query.related_select_fields):
- r = self.get_field_select(field, table, col)
- if with_aliases and col in col_aliases:
- c_alias = 'Col%d' % len(col_aliases)
- result.append('%s AS %s' % (r, c_alias))
- aliases.add(c_alias)
- col_aliases.add(c_alias)
- else:
- result.append(r)
- aliases.add(r)
- col_aliases.add(col)
-
- self._select_aliases = aliases
- return result
-
- def get_default_columns(self, with_aliases=False, col_aliases=None,
- start_alias=None, opts=None, as_pairs=False, local_only=False):
- """
- Computes the default columns for selecting every field in the base
- model. Will sometimes be called to pull in related models (e.g. via
- select_related), in which case "opts" and "start_alias" will be given
- to provide a starting point for the traversal.
-
- Returns a list of strings, quoted appropriately for use in SQL
- directly, as well as a set of aliases used in the select statement (if
- 'as_pairs' is True, returns a list of (alias, col_name) pairs instead
- of strings as the first component and None as the second component).
-
- This routine is overridden from Query to handle customized selection of
- geometry columns.
- """
- result = []
- if opts is None:
- opts = self.query.model._meta
- aliases = set()
- only_load = self.deferred_to_columns()
- # Skip all proxy to the root proxied model
- proxied_model = get_proxied_model(opts)
-
- if start_alias:
- seen = {None: start_alias}
- for field, model in opts.get_fields_with_model():
- if local_only and model is not None:
- continue
- if start_alias:
- try:
- alias = seen[model]
- except KeyError:
- if model is proxied_model:
- alias = start_alias
- else:
- link_field = opts.get_ancestor_link(model)
- alias = self.query.join((start_alias, model._meta.db_table,
- link_field.column, model._meta.pk.column))
- seen[model] = alias
- else:
- # If we're starting from the base model of the queryset, the
- # aliases will have already been set up in pre_sql_setup(), so
- # we can save time here.
- alias = self.query.included_inherited_models[model]
- table = self.query.alias_map[alias][TABLE_NAME]
- if table in only_load and field.column not in only_load[table]:
- continue
- if as_pairs:
- result.append((alias, field.column))
- aliases.add(alias)
- continue
- # This part of the function is customized for GeoQuery. We
- # see if there was any custom selection specified in the
- # dictionary, and set up the selection format appropriately.
- field_sel = self.get_field_select(field, alias)
- if with_aliases and field.column in col_aliases:
- c_alias = 'Col%d' % len(col_aliases)
- result.append('%s AS %s' % (field_sel, c_alias))
- col_aliases.add(c_alias)
- aliases.add(c_alias)
- else:
- r = field_sel
- result.append(r)
- aliases.add(r)
- if with_aliases:
- col_aliases.add(field.column)
- return result, aliases
-
- def resolve_columns(self, row, fields=()):
- """
- This routine is necessary so that distances and geometries returned
- from extra selection SQL get resolved appropriately into Python
- objects.
- """
- values = []
- aliases = self.query.extra_select.keys()
- if self.query.aggregates:
- # If we have an aggregate annotation, must extend the aliases
- # so their corresponding row values are included.
- aliases.extend([None for i in xrange(len(self.query.aggregates))])
-
- # Have to set a starting row number offset that is used for
- # determining the correct starting row index -- needed for
- # doing pagination with Oracle.
- rn_offset = 0
- if self.connection.ops.oracle:
- if self.query.high_mark is not None or self.query.low_mark: rn_offset = 1
- index_start = rn_offset + len(aliases)
-
- # Converting any extra selection values (e.g., geometries and
- # distance objects added by GeoQuerySet methods).
- values = [self.query.convert_values(v,
- self.query.extra_select_fields.get(a, None),
- self.connection)
- for v, a in izip(row[rn_offset:index_start], aliases)]
- if self.connection.ops.oracle or getattr(self.query, 'geo_values', False):
- # We resolve the rest of the columns if we're on Oracle or if
- # the `geo_values` attribute is defined.
- for value, field in map(None, row[index_start:], fields):
- values.append(self.query.convert_values(value, field, connection=self.connection))
- else:
- values.extend(row[index_start:])
- return tuple(values)
-
- #### Routines unique to GeoQuery ####
- def get_extra_select_format(self, alias):
- sel_fmt = '%s'
- if alias in self.query.custom_select:
- sel_fmt = sel_fmt % self.query.custom_select[alias]
- return sel_fmt
-
- def get_field_select(self, field, alias=None, column=None):
- """
- Returns the SELECT SQL string for the given field. Figures out
- if any custom selection SQL is needed for the column The `alias`
- keyword may be used to manually specify the database table where
- the column exists, if not in the model associated with this
- `GeoQuery`. Similarly, `column` may be used to specify the exact
- column name, rather than using the `column` attribute on `field`.
- """
- sel_fmt = self.get_select_format(field)
- if field in self.query.custom_select:
- field_sel = sel_fmt % self.query.custom_select[field]
- else:
- field_sel = sel_fmt % self._field_column(field, alias, column)
- return field_sel
-
- def get_select_format(self, fld):
- """
- Returns the selection format string, depending on the requirements
- of the spatial backend. For example, Oracle and MySQL require custom
- selection formats in order to retrieve geometries in OGC WKT. For all
- other fields a simple '%s' format string is returned.
- """
- if self.connection.ops.select and hasattr(fld, 'geom_type'):
- # This allows operations to be done on fields in the SELECT,
- # overriding their values -- used by the Oracle and MySQL
- # spatial backends to get database values as WKT, and by the
- # `transform` method.
- sel_fmt = self.connection.ops.select
-
- # Because WKT doesn't contain spatial reference information,
- # the SRID is prefixed to the returned WKT to ensure that the
- # transformed geometries have an SRID different than that of the
- # field -- this is only used by `transform` for Oracle and
- # SpatiaLite backends.
- if self.query.transformed_srid and ( self.connection.ops.oracle or
- self.connection.ops.spatialite ):
- sel_fmt = "'SRID=%d;'||%s" % (self.query.transformed_srid, sel_fmt)
- else:
- sel_fmt = '%s'
- return sel_fmt
-
- # Private API utilities, subject to change.
- def _field_column(self, field, table_alias=None, column=None):
- """
- Helper function that returns the database column for the given field.
- The table and column are returned (quoted) in the proper format, e.g.,
- `"geoapp_city"."point"`. If `table_alias` is not specified, the
- database table associated with the model of this `GeoQuery` will be
- used. If `column` is specified, it will be used instead of the value
- in `field.column`.
- """
- if table_alias is None: table_alias = self.query.model._meta.db_table
- return "%s.%s" % (self.quote_name_unless_alias(table_alias),
- self.connection.ops.quote_name(column or field.column))
-
-class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler):
- pass
-
-class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler):
- pass
-
-class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler):
- pass
-
-class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler):
- pass
-
-class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler):
- pass
diff --git a/parts/django/django/contrib/gis/db/models/sql/conversion.py b/parts/django/django/contrib/gis/db/models/sql/conversion.py
deleted file mode 100644
index 941c257..0000000
--- a/parts/django/django/contrib/gis/db/models/sql/conversion.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-This module holds simple classes used by GeoQuery.convert_values
-to convert geospatial values from the database.
-"""
-
-class BaseField(object):
- empty_strings_allowed = True
- def get_internal_type(self):
- "Overloaded method so OracleQuery.convert_values doesn't balk."
- return None
-
-class AreaField(BaseField):
- "Wrapper for Area values."
- def __init__(self, area_att):
- self.area_att = area_att
-
-class DistanceField(BaseField):
- "Wrapper for Distance values."
- def __init__(self, distance_att):
- self.distance_att = distance_att
-
-class GeomField(BaseField):
- """
- Wrapper for Geometry values. It is a lightweight alternative to
- using GeometryField (which requires a SQL query upon instantiation).
- """
- pass
diff --git a/parts/django/django/contrib/gis/db/models/sql/query.py b/parts/django/django/contrib/gis/db/models/sql/query.py
deleted file mode 100644
index c300dcd..0000000
--- a/parts/django/django/contrib/gis/db/models/sql/query.py
+++ /dev/null
@@ -1,119 +0,0 @@
-from django.db import connections
-from django.db.models.query import sql
-
-from django.contrib.gis.db.models.fields import GeometryField
-from django.contrib.gis.db.models.sql import aggregates as gis_aggregates
-from django.contrib.gis.db.models.sql.conversion import AreaField, DistanceField, GeomField
-from django.contrib.gis.db.models.sql.where import GeoWhereNode
-from django.contrib.gis.geometry.backend import Geometry
-from django.contrib.gis.measure import Area, Distance
-
-
-ALL_TERMS = dict([(x, None) for x in (
- 'bbcontains', 'bboverlaps', 'contained', 'contains',
- 'contains_properly', 'coveredby', 'covers', 'crosses', 'disjoint',
- 'distance_gt', 'distance_gte', 'distance_lt', 'distance_lte',
- 'dwithin', 'equals', 'exact',
- 'intersects', 'overlaps', 'relate', 'same_as', 'touches', 'within',
- 'left', 'right', 'overlaps_left', 'overlaps_right',
- 'overlaps_above', 'overlaps_below',
- 'strictly_above', 'strictly_below'
- )])
-ALL_TERMS.update(sql.constants.QUERY_TERMS)
-
-class GeoQuery(sql.Query):
- """
- A single spatial SQL query.
- """
- # Overridding the valid query terms.
- query_terms = ALL_TERMS
- aggregates_module = gis_aggregates
-
- compiler = 'GeoSQLCompiler'
-
- #### Methods overridden from the base Query class ####
- def __init__(self, model, where=GeoWhereNode):
- super(GeoQuery, self).__init__(model, where)
- # The following attributes are customized for the GeoQuerySet.
- # The GeoWhereNode and SpatialBackend classes contain backend-specific
- # routines and functions.
- self.custom_select = {}
- self.transformed_srid = None
- self.extra_select_fields = {}
-
- def clone(self, *args, **kwargs):
- obj = super(GeoQuery, self).clone(*args, **kwargs)
- # Customized selection dictionary and transformed srid flag have
- # to also be added to obj.
- obj.custom_select = self.custom_select.copy()
- obj.transformed_srid = self.transformed_srid
- obj.extra_select_fields = self.extra_select_fields.copy()
- return obj
-
- def convert_values(self, value, field, connection):
- """
- Using the same routines that Oracle does we can convert our
- extra selection objects into Geometry and Distance objects.
- TODO: Make converted objects 'lazy' for less overhead.
- """
- if connection.ops.oracle:
- # Running through Oracle's first.
- value = super(GeoQuery, self).convert_values(value, field or GeomField(), connection)
-
- if value is None:
- # Output from spatial function is NULL (e.g., called
- # function on a geometry field with NULL value).
- pass
- elif isinstance(field, DistanceField):
- # Using the field's distance attribute, can instantiate
- # `Distance` with the right context.
- value = Distance(**{field.distance_att : value})
- elif isinstance(field, AreaField):
- value = Area(**{field.area_att : value})
- elif isinstance(field, (GeomField, GeometryField)) and value:
- value = Geometry(value)
- return value
-
- def get_aggregation(self, using):
- # Remove any aggregates marked for reduction from the subquery
- # and move them to the outer AggregateQuery.
- connection = connections[using]
- for alias, aggregate in self.aggregate_select.items():
- if isinstance(aggregate, gis_aggregates.GeoAggregate):
- if not getattr(aggregate, 'is_extent', False) or connection.ops.oracle:
- self.extra_select_fields[alias] = GeomField()
- return super(GeoQuery, self).get_aggregation(using)
-
- def resolve_aggregate(self, value, aggregate, connection):
- """
- Overridden from GeoQuery's normalize to handle the conversion of
- GeoAggregate objects.
- """
- if isinstance(aggregate, self.aggregates_module.GeoAggregate):
- if aggregate.is_extent:
- if aggregate.is_extent == '3D':
- return connection.ops.convert_extent3d(value)
- else:
- return connection.ops.convert_extent(value)
- else:
- return connection.ops.convert_geom(value, aggregate.source)
- else:
- return super(GeoQuery, self).resolve_aggregate(value, aggregate, connection)
-
- # Private API utilities, subject to change.
- def _geo_field(self, field_name=None):
- """
- Returns the first Geometry field encountered; or specified via the
- `field_name` keyword. The `field_name` may be a string specifying
- the geometry field on this GeoQuery's model, or a lookup string
- to a geometry field via a ForeignKey relation.
- """
- if field_name is None:
- # Incrementing until the first geographic field is found.
- for fld in self.model._meta.fields:
- if isinstance(fld, GeometryField): return fld
- return False
- else:
- # Otherwise, check by the given field name -- which may be
- # a lookup to a _related_ geographic field.
- return GeoWhereNode._check_geo_field(self.model._meta, field_name)
diff --git a/parts/django/django/contrib/gis/db/models/sql/where.py b/parts/django/django/contrib/gis/db/models/sql/where.py
deleted file mode 100644
index 17c210b..0000000
--- a/parts/django/django/contrib/gis/db/models/sql/where.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from django.db.models.fields import Field, FieldDoesNotExist
-from django.db.models.sql.constants import LOOKUP_SEP
-from django.db.models.sql.expressions import SQLEvaluator
-from django.db.models.sql.where import Constraint, WhereNode
-from django.contrib.gis.db.models.fields import GeometryField
-
-class GeoConstraint(Constraint):
- """
- This subclass overrides `process` to better handle geographic SQL
- construction.
- """
- def __init__(self, init_constraint):
- self.alias = init_constraint.alias
- self.col = init_constraint.col
- self.field = init_constraint.field
-
- def process(self, lookup_type, value, connection):
- if isinstance(value, SQLEvaluator):
- # Make sure the F Expression destination field exists, and
- # set an `srid` attribute with the same as that of the
- # destination.
- geo_fld = GeoWhereNode._check_geo_field(value.opts, value.expression.name)
- if not geo_fld:
- raise ValueError('No geographic field found in expression.')
- value.srid = geo_fld.srid
- db_type = self.field.db_type(connection=connection)
- params = self.field.get_db_prep_lookup(lookup_type, value, connection=connection)
- return (self.alias, self.col, db_type), params
-
-class GeoWhereNode(WhereNode):
- """
- Used to represent the SQL where-clause for spatial databases --
- these are tied to the GeoQuery class that created it.
- """
- def add(self, data, connector):
- if isinstance(data, (list, tuple)):
- obj, lookup_type, value = data
- if ( isinstance(obj, Constraint) and
- isinstance(obj.field, GeometryField) ):
- data = (GeoConstraint(obj), lookup_type, value)
- super(GeoWhereNode, self).add(data, connector)
-
- def make_atom(self, child, qn, connection):
- lvalue, lookup_type, value_annot, params_or_value = child
- if isinstance(lvalue, GeoConstraint):
- data, params = lvalue.process(lookup_type, params_or_value, connection)
- spatial_sql = connection.ops.spatial_lookup_sql(data, lookup_type, params_or_value, lvalue.field, qn)
- return spatial_sql, params
- else:
- return super(GeoWhereNode, self).make_atom(child, qn, connection)
-
- @classmethod
- def _check_geo_field(cls, opts, lookup):
- """
- Utility for checking the given lookup with the given model options.
- The lookup is a string either specifying the geographic field, e.g.
- 'point, 'the_geom', or a related lookup on a geographic field like
- 'address__point'.
-
- If a GeometryField exists according to the given lookup on the model
- options, it will be returned. Otherwise returns None.
- """
- # This takes into account the situation where the lookup is a
- # lookup to a related geographic field, e.g., 'address__point'.
- field_list = lookup.split(LOOKUP_SEP)
-
- # Reversing so list operates like a queue of related lookups,
- # and popping the top lookup.
- field_list.reverse()
- fld_name = field_list.pop()
-
- try:
- geo_fld = opts.get_field(fld_name)
- # If the field list is still around, then it means that the
- # lookup was for a geometry field across a relationship --
- # thus we keep on getting the related model options and the
- # model field associated with the next field in the list
- # until there's no more left.
- while len(field_list):
- opts = geo_fld.rel.to._meta
- geo_fld = opts.get_field(field_list.pop())
- except (FieldDoesNotExist, AttributeError):
- return False
-
- # Finally, make sure we got a Geographic field and return.
- if isinstance(geo_fld, GeometryField):
- return geo_fld
- else:
- return False
diff --git a/parts/django/django/contrib/gis/feeds.py b/parts/django/django/contrib/gis/feeds.py
deleted file mode 100644
index 4105ef7..0000000
--- a/parts/django/django/contrib/gis/feeds.py
+++ /dev/null
@@ -1,135 +0,0 @@
-from django.contrib.syndication.feeds import Feed as BaseFeed, FeedDoesNotExist
-from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
-
-class GeoFeedMixin(object):
- """
- This mixin provides the necessary routines for SyndicationFeed subclasses
- to produce simple GeoRSS or W3C Geo elements.
- """
-
- def georss_coords(self, coords):
- """
- In GeoRSS coordinate pairs are ordered by lat/lon and separated by
- a single white space. Given a tuple of coordinates, this will return
- a unicode GeoRSS representation.
- """
- return u' '.join([u'%f %f' % (coord[1], coord[0]) for coord in coords])
-
- def add_georss_point(self, handler, coords, w3c_geo=False):
- """
- Adds a GeoRSS point with the given coords using the given handler.
- Handles the differences between simple GeoRSS and the more pouplar
- W3C Geo specification.
- """
- if w3c_geo:
- lon, lat = coords[:2]
- handler.addQuickElement(u'geo:lat', u'%f' % lat)
- handler.addQuickElement(u'geo:lon', u'%f' % lon)
- else:
- handler.addQuickElement(u'georss:point', self.georss_coords((coords,)))
-
- def add_georss_element(self, handler, item, w3c_geo=False):
- """
- This routine adds a GeoRSS XML element using the given item and handler.
- """
- # Getting the Geometry object.
- geom = item.get('geometry', None)
- if not geom is None:
- if isinstance(geom, (list, tuple)):
- # Special case if a tuple/list was passed in. The tuple may be
- # a point or a box
- box_coords = None
- if isinstance(geom[0], (list, tuple)):
- # Box: ( (X0, Y0), (X1, Y1) )
- if len(geom) == 2:
- box_coords = geom
- else:
- raise ValueError('Only should be two sets of coordinates.')
- else:
- if len(geom) == 2:
- # Point: (X, Y)
- self.add_georss_point(handler, geom, w3c_geo=w3c_geo)
- elif len(geom) == 4:
- # Box: (X0, Y0, X1, Y1)
- box_coords = (geom[:2], geom[2:])
- else:
- raise ValueError('Only should be 2 or 4 numeric elements.')
- # If a GeoRSS box was given via tuple.
- if not box_coords is None:
- if w3c_geo: raise ValueError('Cannot use simple GeoRSS box in W3C Geo feeds.')
- handler.addQuickElement(u'georss:box', self.georss_coords(box_coords))
- else:
- # Getting the lower-case geometry type.
- gtype = str(geom.geom_type).lower()
- if gtype == 'point':
- self.add_georss_point(handler, geom.coords, w3c_geo=w3c_geo)
- else:
- if w3c_geo: raise ValueError('W3C Geo only supports Point geometries.')
- # For formatting consistent w/the GeoRSS simple standard:
- # http://georss.org/1.0#simple
- if gtype in ('linestring', 'linearring'):
- handler.addQuickElement(u'georss:line', self.georss_coords(geom.coords))
- elif gtype in ('polygon',):
- # Only support the exterior ring.
- handler.addQuickElement(u'georss:polygon', self.georss_coords(geom[0].coords))
- else:
- raise ValueError('Geometry type "%s" not supported.' % geom.geom_type)
-
-### SyndicationFeed subclasses ###
-class GeoRSSFeed(Rss201rev2Feed, GeoFeedMixin):
- def rss_attributes(self):
- attrs = super(GeoRSSFeed, self).rss_attributes()
- attrs[u'xmlns:georss'] = u'http://www.georss.org/georss'
- return attrs
-
- def add_item_elements(self, handler, item):
- super(GeoRSSFeed, self).add_item_elements(handler, item)
- self.add_georss_element(handler, item)
-
- def add_root_elements(self, handler):
- super(GeoRSSFeed, self).add_root_elements(handler)
- self.add_georss_element(handler, self.feed)
-
-class GeoAtom1Feed(Atom1Feed, GeoFeedMixin):
- def root_attributes(self):
- attrs = super(GeoAtom1Feed, self).root_attributes()
- attrs[u'xmlns:georss'] = u'http://www.georss.org/georss'
- return attrs
-
- def add_item_elements(self, handler, item):
- super(GeoAtom1Feed, self).add_item_elements(handler, item)
- self.add_georss_element(handler, item)
-
- def add_root_elements(self, handler):
- super(GeoAtom1Feed, self).add_root_elements(handler)
- self.add_georss_element(handler, self.feed)
-
-class W3CGeoFeed(Rss201rev2Feed, GeoFeedMixin):
- def rss_attributes(self):
- attrs = super(W3CGeoFeed, self).rss_attributes()
- attrs[u'xmlns:geo'] = u'http://www.w3.org/2003/01/geo/wgs84_pos#'
- return attrs
-
- def add_item_elements(self, handler, item):
- super(W3CGeoFeed, self).add_item_elements(handler, item)
- self.add_georss_element(handler, item, w3c_geo=True)
-
- def add_root_elements(self, handler):
- super(W3CGeoFeed, self).add_root_elements(handler)
- self.add_georss_element(handler, self.feed, w3c_geo=True)
-
-### Feed subclass ###
-class Feed(BaseFeed):
- """
- This is a subclass of the `Feed` from `django.contrib.syndication`.
- This allows users to define a `geometry(obj)` and/or `item_geometry(item)`
- methods on their own subclasses so that geo-referenced information may
- placed in the feed.
- """
- feed_type = GeoRSSFeed
-
- def feed_extra_kwargs(self, obj):
- return {'geometry' : self.__get_dynamic_attr('geometry', obj)}
-
- def item_extra_kwargs(self, item):
- return {'geometry' : self.__get_dynamic_attr('item_geometry', item)}
diff --git a/parts/django/django/contrib/gis/forms/__init__.py b/parts/django/django/contrib/gis/forms/__init__.py
deleted file mode 100644
index 82971da..0000000
--- a/parts/django/django/contrib/gis/forms/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from django.forms import *
-from django.contrib.gis.forms.fields import GeometryField
diff --git a/parts/django/django/contrib/gis/forms/fields.py b/parts/django/django/contrib/gis/forms/fields.py
deleted file mode 100644
index f806dcb..0000000
--- a/parts/django/django/contrib/gis/forms/fields.py
+++ /dev/null
@@ -1,67 +0,0 @@
-from django import forms
-from django.utils.translation import ugettext_lazy as _
-
-# While this couples the geographic forms to the GEOS library,
-# it decouples from database (by not importing SpatialBackend).
-from django.contrib.gis.geos import GEOSGeometry
-
-class GeometryField(forms.Field):
- """
- This is the basic form field for a Geometry. Any textual input that is
- accepted by GEOSGeometry is accepted by this form. By default,
- this includes WKT, HEXEWKB, WKB (in a buffer), and GeoJSON.
- """
- widget = forms.Textarea
-
- default_error_messages = {
- 'no_geom' : _(u'No geometry value provided.'),
- 'invalid_geom' : _(u'Invalid geometry value.'),
- 'invalid_geom_type' : _(u'Invalid geometry type.'),
- 'transform_error' : _(u'An error occurred when transforming the geometry '
- 'to the SRID of the geometry form field.'),
- }
-
- def __init__(self, **kwargs):
- # Pop out attributes from the database field, or use sensible
- # defaults (e.g., allow None).
- self.srid = kwargs.pop('srid', None)
- self.geom_type = kwargs.pop('geom_type', 'GEOMETRY')
- self.null = kwargs.pop('null', True)
- super(GeometryField, self).__init__(**kwargs)
-
- def clean(self, value):
- """
- Validates that the input value can be converted to a Geometry
- object (which is returned). A ValidationError is raised if
- the value cannot be instantiated as a Geometry.
- """
- if not value:
- if self.null and not self.required:
- # The geometry column allows NULL and is not required.
- return None
- else:
- raise forms.ValidationError(self.error_messages['no_geom'])
-
- # Trying to create a Geometry object from the form value.
- try:
- geom = GEOSGeometry(value)
- except:
- raise forms.ValidationError(self.error_messages['invalid_geom'])
-
- # Ensuring that the geometry is of the correct type (indicated
- # using the OGC string label).
- if str(geom.geom_type).upper() != self.geom_type and not self.geom_type == 'GEOMETRY':
- raise forms.ValidationError(self.error_messages['invalid_geom_type'])
-
- # Transforming the geometry if the SRID was set.
- if self.srid:
- if not geom.srid:
- # Should match that of the field if not given.
- geom.srid = self.srid
- elif self.srid != -1 and self.srid != geom.srid:
- try:
- geom.transform(self.srid)
- except:
- raise forms.ValidationError(self.error_messages['transform_error'])
-
- return geom
diff --git a/parts/django/django/contrib/gis/gdal/LICENSE b/parts/django/django/contrib/gis/gdal/LICENSE
deleted file mode 100644
index 30d410e..0000000
--- a/parts/django/django/contrib/gis/gdal/LICENSE
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2007-2009, Justin Bronn
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. Neither the name of OGRGeometry nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/parts/django/django/contrib/gis/gdal/__init__.py b/parts/django/django/contrib/gis/gdal/__init__.py
deleted file mode 100644
index cc47ae9..0000000
--- a/parts/django/django/contrib/gis/gdal/__init__.py
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
- This module houses ctypes interfaces for GDAL objects. The following GDAL
- objects are supported:
-
- CoordTransform: Used for coordinate transformations from one spatial
- reference system to another.
-
- Driver: Wraps an OGR data source driver.
-
- DataSource: Wrapper for the OGR data source object, supports
- OGR-supported data sources.
-
- Envelope: A ctypes structure for bounding boxes (GDAL library
- not required).
-
- OGRGeometry: Object for accessing OGR Geometry functionality.
-
- OGRGeomType: A class for representing the different OGR Geometry
- types (GDAL library not required).
-
- SpatialReference: Represents OSR Spatial Reference objects.
-
- The GDAL library will be imported from the system path using the default
- library name for the current OS. The default library path may be overridden
- by setting `GDAL_LIBRARY_PATH` in your settings with the path to the GDAL C
- library on your system.
-
- GDAL links to a large number of external libraries that consume RAM when
- loaded. Thus, it may desirable to disable GDAL on systems with limited
- RAM resources -- this may be accomplished by setting `GDAL_LIBRARY_PATH`
- to a non-existant file location (e.g., `GDAL_LIBRARY_PATH='/null/path'`;
- setting to None/False/'' will not work as a string must be given).
-"""
-# Attempting to import objects that depend on the GDAL library. The
-# HAS_GDAL flag will be set to True if the library is present on
-# the system.
-try:
- from django.contrib.gis.gdal.driver import Driver
- from django.contrib.gis.gdal.datasource import DataSource
- from django.contrib.gis.gdal.libgdal import gdal_version, gdal_full_version, gdal_release_date, GEOJSON, GDAL_VERSION
- from django.contrib.gis.gdal.srs import SpatialReference, CoordTransform
- from django.contrib.gis.gdal.geometries import OGRGeometry
- HAS_GDAL = True
-except:
- HAS_GDAL, GEOJSON = False, False
-
-try:
- from django.contrib.gis.gdal.envelope import Envelope
-except ImportError:
- # No ctypes, but don't raise an exception.
- pass
-
-from django.contrib.gis.gdal.error import check_err, OGRException, OGRIndexError, SRSException
-from django.contrib.gis.gdal.geomtype import OGRGeomType
diff --git a/parts/django/django/contrib/gis/gdal/base.py b/parts/django/django/contrib/gis/gdal/base.py
deleted file mode 100644
index f9455c7..0000000
--- a/parts/django/django/contrib/gis/gdal/base.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from ctypes import c_void_p
-from types import NoneType
-from django.contrib.gis.gdal.error import GDALException
-
-class GDALBase(object):
- """
- Base object for GDAL objects that has a pointer access property
- that controls access to the underlying C pointer.
- """
- # Initially the pointer is NULL.
- _ptr = None
-
- # Default allowed pointer type.
- ptr_type = c_void_p
-
- # Pointer access property.
- def _get_ptr(self):
- # Raise an exception if the pointer isn't valid don't
- # want to be passing NULL pointers to routines --
- # that's very bad.
- if self._ptr: return self._ptr
- else: raise GDALException('GDAL %s pointer no longer valid.' % self.__class__.__name__)
-
- def _set_ptr(self, ptr):
- # Only allow the pointer to be set with pointers of the
- # compatible type or None (NULL).
- if isinstance(ptr, (int, long)):
- self._ptr = self.ptr_type(ptr)
- elif isinstance(ptr, (self.ptr_type, NoneType)):
- self._ptr = ptr
- else:
- raise TypeError('Incompatible pointer type')
-
- ptr = property(_get_ptr, _set_ptr)
-
diff --git a/parts/django/django/contrib/gis/gdal/datasource.py b/parts/django/django/contrib/gis/gdal/datasource.py
deleted file mode 100644
index 7db5fd9..0000000
--- a/parts/django/django/contrib/gis/gdal/datasource.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""
- DataSource is a wrapper for the OGR Data Source object, which provides
- an interface for reading vector geometry data from many different file
- formats (including ESRI shapefiles).
-
- When instantiating a DataSource object, use the filename of a
- GDAL-supported data source. For example, a SHP file or a
- TIGER/Line file from the government.
-
- The ds_driver keyword is used internally when a ctypes pointer
- is passed in directly.
-
- Example:
- ds = DataSource('/home/foo/bar.shp')
- for layer in ds:
- for feature in layer:
- # Getting the geometry for the feature.
- g = feature.geom
-
- # Getting the 'description' field for the feature.
- desc = feature['description']
-
- # We can also increment through all of the fields
- # attached to this feature.
- for field in feature:
- # Get the name of the field (e.g. 'description')
- nm = field.name
-
- # Get the type (integer) of the field, e.g. 0 => OFTInteger
- t = field.type
-
- # Returns the value the field; OFTIntegers return ints,
- # OFTReal returns floats, all else returns string.
- val = field.value
-"""
-# ctypes prerequisites.
-from ctypes import byref, c_void_p
-
-# The GDAL C library, OGR exceptions, and the Layer object.
-from django.contrib.gis.gdal.base import GDALBase
-from django.contrib.gis.gdal.driver import Driver
-from django.contrib.gis.gdal.error import OGRException, OGRIndexError
-from django.contrib.gis.gdal.layer import Layer
-
-# Getting the ctypes prototypes for the DataSource.
-from django.contrib.gis.gdal.prototypes import ds as capi
-
-# For more information, see the OGR C API source code:
-# http://www.gdal.org/ogr/ogr__api_8h.html
-#
-# The OGR_DS_* routines are relevant here.
-class DataSource(GDALBase):
- "Wraps an OGR Data Source object."
-
- #### Python 'magic' routines ####
- def __init__(self, ds_input, ds_driver=False, write=False):
- # The write flag.
- if write:
- self._write = 1
- else:
- self._write = 0
-
- # Registering all the drivers, this needs to be done
- # _before_ we try to open up a data source.
- if not capi.get_driver_count():
- capi.register_all()
-
- if isinstance(ds_input, basestring):
- # The data source driver is a void pointer.
- ds_driver = Driver.ptr_type()
- try:
- # OGROpen will auto-detect the data source type.
- ds = capi.open_ds(ds_input, self._write, byref(ds_driver))
- except OGRException:
- # Making the error message more clear rather than something
- # like "Invalid pointer returned from OGROpen".
- raise OGRException('Could not open the datasource at "%s"' % ds_input)
- elif isinstance(ds_input, self.ptr_type) and isinstance(ds_driver, Driver.ptr_type):
- ds = ds_input
- else:
- raise OGRException('Invalid data source input type: %s' % type(ds_input))
-
- if bool(ds):
- self.ptr = ds
- self.driver = Driver(ds_driver)
- else:
- # Raise an exception if the returned pointer is NULL
- raise OGRException('Invalid data source file "%s"' % ds_input)
-
- def __del__(self):
- "Destroys this DataStructure object."
- if self._ptr: capi.destroy_ds(self._ptr)
-
- def __iter__(self):
- "Allows for iteration over the layers in a data source."
- for i in xrange(self.layer_count):
- yield self[i]
-
- def __getitem__(self, index):
- "Allows use of the index [] operator to get a layer at the index."
- if isinstance(index, basestring):
- l = capi.get_layer_by_name(self.ptr, index)
- if not l: raise OGRIndexError('invalid OGR Layer name given: "%s"' % index)
- elif isinstance(index, int):
- if index < 0 or index >= self.layer_count:
- raise OGRIndexError('index out of range')
- l = capi.get_layer(self._ptr, index)
- else:
- raise TypeError('Invalid index type: %s' % type(index))
- return Layer(l, self)
-
- def __len__(self):
- "Returns the number of layers within the data source."
- return self.layer_count
-
- def __str__(self):
- "Returns OGR GetName and Driver for the Data Source."
- return '%s (%s)' % (self.name, str(self.driver))
-
- @property
- def layer_count(self):
- "Returns the number of layers in the data source."
- return capi.get_layer_count(self._ptr)
-
- @property
- def name(self):
- "Returns the name of the data source."
- return capi.get_ds_name(self._ptr)
diff --git a/parts/django/django/contrib/gis/gdal/driver.py b/parts/django/django/contrib/gis/gdal/driver.py
deleted file mode 100644
index 1753db2..0000000
--- a/parts/django/django/contrib/gis/gdal/driver.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# prerequisites imports
-from ctypes import c_void_p
-from django.contrib.gis.gdal.base import GDALBase
-from django.contrib.gis.gdal.error import OGRException
-from django.contrib.gis.gdal.prototypes import ds as capi
-
-# For more information, see the OGR C API source code:
-# http://www.gdal.org/ogr/ogr__api_8h.html
-#
-# The OGR_Dr_* routines are relevant here.
-class Driver(GDALBase):
- "Wraps an OGR Data Source Driver."
-
- # Case-insensitive aliases for OGR Drivers.
- _alias = {'esri' : 'ESRI Shapefile',
- 'shp' : 'ESRI Shapefile',
- 'shape' : 'ESRI Shapefile',
- 'tiger' : 'TIGER',
- 'tiger/line' : 'TIGER',
- }
-
- def __init__(self, dr_input):
- "Initializes an OGR driver on either a string or integer input."
-
- if isinstance(dr_input, basestring):
- # If a string name of the driver was passed in
- self._register()
-
- # Checking the alias dictionary (case-insensitive) to see if an alias
- # exists for the given driver.
- if dr_input.lower() in self._alias:
- name = self._alias[dr_input.lower()]
- else:
- name = dr_input
-
- # Attempting to get the OGR driver by the string name.
- dr = capi.get_driver_by_name(name)
- elif isinstance(dr_input, int):
- self._register()
- dr = capi.get_driver(dr_input)
- elif isinstance(dr_input, c_void_p):
- dr = dr_input
- else:
- raise OGRException('Unrecognized input type for OGR Driver: %s' % str(type(dr_input)))
-
- # Making sure we get a valid pointer to the OGR Driver
- if not dr:
- raise OGRException('Could not initialize OGR Driver on input: %s' % str(dr_input))
- self.ptr = dr
-
- def __str__(self):
- "Returns the string name of the OGR Driver."
- return capi.get_driver_name(self.ptr)
-
- def _register(self):
- "Attempts to register all the data source drivers."
- # Only register all if the driver count is 0 (or else all drivers
- # will be registered over and over again)
- if not self.driver_count: capi.register_all()
-
- # Driver properties
- @property
- def driver_count(self):
- "Returns the number of OGR data source drivers registered."
- return capi.get_driver_count()
diff --git a/parts/django/django/contrib/gis/gdal/envelope.py b/parts/django/django/contrib/gis/gdal/envelope.py
deleted file mode 100644
index 0e6aa0e..0000000
--- a/parts/django/django/contrib/gis/gdal/envelope.py
+++ /dev/null
@@ -1,175 +0,0 @@
-"""
- The GDAL/OGR library uses an Envelope structure to hold the bounding
- box information for a geometry. The envelope (bounding box) contains
- two pairs of coordinates, one for the lower left coordinate and one
- for the upper right coordinate:
-
- +----------o Upper right; (max_x, max_y)
- | |
- | |
- | |
- Lower left (min_x, min_y) o----------+
-"""
-from ctypes import Structure, c_double
-from django.contrib.gis.gdal.error import OGRException
-
-# The OGR definition of an Envelope is a C structure containing four doubles.
-# See the 'ogr_core.h' source file for more information:
-# http://www.gdal.org/ogr/ogr__core_8h-source.html
-class OGREnvelope(Structure):
- "Represents the OGREnvelope C Structure."
- _fields_ = [("MinX", c_double),
- ("MaxX", c_double),
- ("MinY", c_double),
- ("MaxY", c_double),
- ]
-
-class Envelope(object):
- """
- The Envelope object is a C structure that contains the minimum and
- maximum X, Y coordinates for a rectangle bounding box. The naming
- of the variables is compatible with the OGR Envelope structure.
- """
-
- def __init__(self, *args):
- """
- The initialization function may take an OGREnvelope structure, 4-element
- tuple or list, or 4 individual arguments.
- """
-
- if len(args) == 1:
- if isinstance(args[0], OGREnvelope):
- # OGREnvelope (a ctypes Structure) was passed in.
- self._envelope = args[0]
- elif isinstance(args[0], (tuple, list)):
- # A tuple was passed in.
- if len(args[0]) != 4:
- raise OGRException('Incorrect number of tuple elements (%d).' % len(args[0]))
- else:
- self._from_sequence(args[0])
- else:
- raise TypeError('Incorrect type of argument: %s' % str(type(args[0])))
- elif len(args) == 4:
- # Individiual parameters passed in.
- # Thanks to ww for the help
- self._from_sequence(map(float, args))
- else:
- raise OGRException('Incorrect number (%d) of arguments.' % len(args))
-
- # Checking the x,y coordinates
- if self.min_x > self.max_x:
- raise OGRException('Envelope minimum X > maximum X.')
- if self.min_y > self.max_y:
- raise OGRException('Envelope minimum Y > maximum Y.')
-
- def __eq__(self, other):
- """
- Returns True if the envelopes are equivalent; can compare against
- other Envelopes and 4-tuples.
- """
- if isinstance(other, Envelope):
- return (self.min_x == other.min_x) and (self.min_y == other.min_y) and \
- (self.max_x == other.max_x) and (self.max_y == other.max_y)
- elif isinstance(other, tuple) and len(other) == 4:
- return (self.min_x == other[0]) and (self.min_y == other[1]) and \
- (self.max_x == other[2]) and (self.max_y == other[3])
- else:
- raise OGRException('Equivalence testing only works with other Envelopes.')
-
- def __str__(self):
- "Returns a string representation of the tuple."
- return str(self.tuple)
-
- def _from_sequence(self, seq):
- "Initializes the C OGR Envelope structure from the given sequence."
- self._envelope = OGREnvelope()
- self._envelope.MinX = seq[0]
- self._envelope.MinY = seq[1]
- self._envelope.MaxX = seq[2]
- self._envelope.MaxY = seq[3]
-
- def expand_to_include(self, *args):
- """
- Modifies the envelope to expand to include the boundaries of
- the passed-in 2-tuple (a point), 4-tuple (an extent) or
- envelope.
- """
- # We provide a number of different signatures for this method,
- # and the logic here is all about converting them into a
- # 4-tuple single parameter which does the actual work of
- # expanding the envelope.
- if len(args) == 1:
- if isinstance(args[0], Envelope):
- return self.expand_to_include(args[0].tuple)
- elif hasattr(args[0], 'x') and hasattr(args[0], 'y'):
- return self.expand_to_include(args[0].x, args[0].y, args[0].x, args[0].y)
- elif isinstance(args[0], (tuple, list)):
- # A tuple was passed in.
- if len(args[0]) == 2:
- return self.expand_to_include((args[0][0], args[0][1], args[0][0], args[0][1]))
- elif len(args[0]) == 4:
- (minx, miny, maxx, maxy) = args[0]
- if minx < self._envelope.MinX:
- self._envelope.MinX = minx
- if miny < self._envelope.MinY:
- self._envelope.MinY = miny
- if maxx > self._envelope.MaxX:
- self._envelope.MaxX = maxx
- if maxy > self._envelope.MaxY:
- self._envelope.MaxY = maxy
- else:
- raise OGRException('Incorrect number of tuple elements (%d).' % len(args[0]))
- else:
- raise TypeError('Incorrect type of argument: %s' % str(type(args[0])))
- elif len(args) == 2:
- # An x and an y parameter were passed in
- return self.expand_to_include((args[0], args[1], args[0], args[1]))
- elif len(args) == 4:
- # Individiual parameters passed in.
- return self.expand_to_include(args)
- else:
- raise OGRException('Incorrect number (%d) of arguments.' % len(args[0]))
-
- @property
- def min_x(self):
- "Returns the value of the minimum X coordinate."
- return self._envelope.MinX
-
- @property
- def min_y(self):
- "Returns the value of the minimum Y coordinate."
- return self._envelope.MinY
-
- @property
- def max_x(self):
- "Returns the value of the maximum X coordinate."
- return self._envelope.MaxX
-
- @property
- def max_y(self):
- "Returns the value of the maximum Y coordinate."
- return self._envelope.MaxY
-
- @property
- def ur(self):
- "Returns the upper-right coordinate."
- return (self.max_x, self.max_y)
-
- @property
- def ll(self):
- "Returns the lower-left coordinate."
- return (self.min_x, self.min_y)
-
- @property
- def tuple(self):
- "Returns a tuple representing the envelope."
- return (self.min_x, self.min_y, self.max_x, self.max_y)
-
- @property
- def wkt(self):
- "Returns WKT representing a Polygon for this envelope."
- # TODO: Fix significant figures.
- return 'POLYGON((%s %s,%s %s,%s %s,%s %s,%s %s))' % \
- (self.min_x, self.min_y, self.min_x, self.max_y,
- self.max_x, self.max_y, self.max_x, self.min_y,
- self.min_x, self.min_y)
diff --git a/parts/django/django/contrib/gis/gdal/error.py b/parts/django/django/contrib/gis/gdal/error.py
deleted file mode 100644
index 58ca891..0000000
--- a/parts/django/django/contrib/gis/gdal/error.py
+++ /dev/null
@@ -1,42 +0,0 @@
-"""
- This module houses the OGR & SRS Exception objects, and the
- check_err() routine which checks the status code returned by
- OGR methods.
-"""
-#### OGR & SRS Exceptions ####
-class GDALException(Exception): pass
-class OGRException(Exception): pass
-class SRSException(Exception): pass
-class OGRIndexError(OGRException, KeyError):
- """
- This exception is raised when an invalid index is encountered, and has
- the 'silent_variable_feature' attribute set to true. This ensures that
- django's templates proceed to use the next lookup type gracefully when
- an Exception is raised. Fixes ticket #4740.
- """
- silent_variable_failure = True
-
-#### OGR error checking codes and routine ####
-
-# OGR Error Codes
-OGRERR_DICT = { 1 : (OGRException, 'Not enough data.'),
- 2 : (OGRException, 'Not enough memory.'),
- 3 : (OGRException, 'Unsupported geometry type.'),
- 4 : (OGRException, 'Unsupported operation.'),
- 5 : (OGRException, 'Corrupt data.'),
- 6 : (OGRException, 'OGR failure.'),
- 7 : (SRSException, 'Unsupported SRS.'),
- 8 : (OGRException, 'Invalid handle.'),
- }
-OGRERR_NONE = 0
-
-def check_err(code):
- "Checks the given OGRERR, and raises an exception where appropriate."
-
- if code == OGRERR_NONE:
- return
- elif code in OGRERR_DICT:
- e, msg = OGRERR_DICT[code]
- raise e, msg
- else:
- raise OGRException('Unknown error code: "%s"' % code)
diff --git a/parts/django/django/contrib/gis/gdal/feature.py b/parts/django/django/contrib/gis/gdal/feature.py
deleted file mode 100644
index b5c173a..0000000
--- a/parts/django/django/contrib/gis/gdal/feature.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# The GDAL C library, OGR exception, and the Field object
-from django.contrib.gis.gdal.base import GDALBase
-from django.contrib.gis.gdal.error import OGRException, OGRIndexError
-from django.contrib.gis.gdal.field import Field
-from django.contrib.gis.gdal.geometries import OGRGeometry, OGRGeomType
-from django.contrib.gis.gdal.srs import SpatialReference
-
-# ctypes function prototypes
-from django.contrib.gis.gdal.prototypes import ds as capi, geom as geom_api
-
-# For more information, see the OGR C API source code:
-# http://www.gdal.org/ogr/ogr__api_8h.html
-#
-# The OGR_F_* routines are relevant here.
-class Feature(GDALBase):
- "A class that wraps an OGR Feature, needs to be instantiated from a Layer object."
-
- #### Python 'magic' routines ####
- def __init__(self, feat, fdefn):
- "Initializes on the pointers for the feature and the layer definition."
- if not feat or not fdefn:
- raise OGRException('Cannot create OGR Feature, invalid pointer given.')
- self.ptr = feat
- self._fdefn = fdefn
-
- def __del__(self):
- "Releases a reference to this object."
- if self._ptr: capi.destroy_feature(self._ptr)
-
- def __getitem__(self, index):
- """
- Gets the Field object at the specified index, which may be either
- an integer or the Field's string label. Note that the Field object
- is not the field's _value_ -- use the `get` method instead to
- retrieve the value (e.g. an integer) instead of a Field instance.
- """
- if isinstance(index, basestring):
- i = self.index(index)
- else:
- if index < 0 or index > self.num_fields:
- raise OGRIndexError('index out of range')
- i = index
- return Field(self.ptr, i)
-
- def __iter__(self):
- "Iterates over each field in the Feature."
- for i in xrange(self.num_fields):
- yield self[i]
-
- def __len__(self):
- "Returns the count of fields in this feature."
- return self.num_fields
-
- def __str__(self):
- "The string name of the feature."
- return 'Feature FID %d in Layer<%s>' % (self.fid, self.layer_name)
-
- def __eq__(self, other):
- "Does equivalence testing on the features."
- return bool(capi.feature_equal(self.ptr, other._ptr))
-
- #### Feature Properties ####
- @property
- def fid(self):
- "Returns the feature identifier."
- return capi.get_fid(self.ptr)
-
- @property
- def layer_name(self):
- "Returns the name of the layer for the feature."
- return capi.get_feat_name(self._fdefn)
-
- @property
- def num_fields(self):
- "Returns the number of fields in the Feature."
- return capi.get_feat_field_count(self.ptr)
-
- @property
- def fields(self):
- "Returns a list of fields in the Feature."
- return [capi.get_field_name(capi.get_field_defn(self._fdefn, i))
- for i in xrange(self.num_fields)]
-
- @property
- def geom(self):
- "Returns the OGR Geometry for this Feature."
- # Retrieving the geometry pointer for the feature.
- geom_ptr = capi.get_feat_geom_ref(self.ptr)
- return OGRGeometry(geom_api.clone_geom(geom_ptr))
-
- @property
- def geom_type(self):
- "Returns the OGR Geometry Type for this Feture."
- return OGRGeomType(capi.get_fd_geom_type(self._fdefn))
-
- #### Feature Methods ####
- def get(self, field):
- """
- Returns the value of the field, instead of an instance of the Field
- object. May take a string of the field name or a Field object as
- parameters.
- """
- field_name = getattr(field, 'name', field)
- return self[field_name].value
-
- def index(self, field_name):
- "Returns the index of the given field name."
- i = capi.get_field_index(self.ptr, field_name)
- if i < 0: raise OGRIndexError('invalid OFT field name given: "%s"' % field_name)
- return i
diff --git a/parts/django/django/contrib/gis/gdal/field.py b/parts/django/django/contrib/gis/gdal/field.py
deleted file mode 100644
index 46dbc86..0000000
--- a/parts/django/django/contrib/gis/gdal/field.py
+++ /dev/null
@@ -1,178 +0,0 @@
-from ctypes import byref, c_int
-from datetime import date, datetime, time
-from django.contrib.gis.gdal.base import GDALBase
-from django.contrib.gis.gdal.error import OGRException
-from django.contrib.gis.gdal.prototypes import ds as capi
-
-# For more information, see the OGR C API source code:
-# http://www.gdal.org/ogr/ogr__api_8h.html
-#
-# The OGR_Fld_* routines are relevant here.
-class Field(GDALBase):
- "A class that wraps an OGR Field, needs to be instantiated from a Feature object."
-
- #### Python 'magic' routines ####
- def __init__(self, feat, index):
- """
- Initializes on the feature pointer and the integer index of
- the field within the feature.
- """
- # Setting the feature pointer and index.
- self._feat = feat
- self._index = index
-
- # Getting the pointer for this field.
- fld_ptr = capi.get_feat_field_defn(feat, index)
- if not fld_ptr:
- raise OGRException('Cannot create OGR Field, invalid pointer given.')
- self.ptr = fld_ptr
-
- # Setting the class depending upon the OGR Field Type (OFT)
- self.__class__ = OGRFieldTypes[self.type]
-
- # OFTReal with no precision should be an OFTInteger.
- if isinstance(self, OFTReal) and self.precision == 0:
- self.__class__ = OFTInteger
-
- def __str__(self):
- "Returns the string representation of the Field."
- return str(self.value).strip()
-
- #### Field Methods ####
- def as_double(self):
- "Retrieves the Field's value as a double (float)."
- return capi.get_field_as_double(self._feat, self._index)
-
- def as_int(self):
- "Retrieves the Field's value as an integer."
- return capi.get_field_as_integer(self._feat, self._index)
-
- def as_string(self):
- "Retrieves the Field's value as a string."
- return capi.get_field_as_string(self._feat, self._index)
-
- def as_datetime(self):
- "Retrieves the Field's value as a tuple of date & time components."
- yy, mm, dd, hh, mn, ss, tz = [c_int() for i in range(7)]
- status = capi.get_field_as_datetime(self._feat, self._index, byref(yy), byref(mm), byref(dd),
- byref(hh), byref(mn), byref(ss), byref(tz))
- if status:
- return (yy, mm, dd, hh, mn, ss, tz)
- else:
- raise OGRException('Unable to retrieve date & time information from the field.')
-
- #### Field Properties ####
- @property
- def name(self):
- "Returns the name of this Field."
- return capi.get_field_name(self.ptr)
-
- @property
- def precision(self):
- "Returns the precision of this Field."
- return capi.get_field_precision(self.ptr)
-
- @property
- def type(self):
- "Returns the OGR type of this Field."
- return capi.get_field_type(self.ptr)
-
- @property
- def type_name(self):
- "Return the OGR field type name for this Field."
- return capi.get_field_type_name(self.type)
-
- @property
- def value(self):
- "Returns the value of this Field."
- # Default is to get the field as a string.
- return self.as_string()
-
- @property
- def width(self):
- "Returns the width of this Field."
- return capi.get_field_width(self.ptr)
-
-### The Field sub-classes for each OGR Field type. ###
-class OFTInteger(Field):
- @property
- def value(self):
- "Returns an integer contained in this field."
- return self.as_int()
-
- @property
- def type(self):
- """
- GDAL uses OFTReals to represent OFTIntegers in created
- shapefiles -- forcing the type here since the underlying field
- type may actually be OFTReal.
- """
- return 0
-
-class OFTReal(Field):
- @property
- def value(self):
- "Returns a float contained in this field."
- return self.as_double()
-
-# String & Binary fields, just subclasses
-class OFTString(Field): pass
-class OFTWideString(Field): pass
-class OFTBinary(Field): pass
-
-# OFTDate, OFTTime, OFTDateTime fields.
-class OFTDate(Field):
- @property
- def value(self):
- "Returns a Python `date` object for the OFTDate field."
- try:
- yy, mm, dd, hh, mn, ss, tz = self.as_datetime()
- return date(yy.value, mm.value, dd.value)
- except (ValueError, OGRException):
- return None
-
-class OFTDateTime(Field):
- @property
- def value(self):
- "Returns a Python `datetime` object for this OFTDateTime field."
- # TODO: Adapt timezone information.
- # See http://lists.maptools.org/pipermail/gdal-dev/2006-February/007990.html
- # The `tz` variable has values of: 0=unknown, 1=localtime (ambiguous),
- # 100=GMT, 104=GMT+1, 80=GMT-5, etc.
- try:
- yy, mm, dd, hh, mn, ss, tz = self.as_datetime()
- return datetime(yy.value, mm.value, dd.value, hh.value, mn.value, ss.value)
- except (ValueError, OGRException):
- return None
-
-class OFTTime(Field):
- @property
- def value(self):
- "Returns a Python `time` object for this OFTTime field."
- try:
- yy, mm, dd, hh, mn, ss, tz = self.as_datetime()
- return time(hh.value, mn.value, ss.value)
- except (ValueError, OGRException):
- return None
-
-# List fields are also just subclasses
-class OFTIntegerList(Field): pass
-class OFTRealList(Field): pass
-class OFTStringList(Field): pass
-class OFTWideStringList(Field): pass
-
-# Class mapping dictionary for OFT Types and reverse mapping.
-OGRFieldTypes = { 0 : OFTInteger,
- 1 : OFTIntegerList,
- 2 : OFTReal,
- 3 : OFTRealList,
- 4 : OFTString,
- 5 : OFTStringList,
- 6 : OFTWideString,
- 7 : OFTWideStringList,
- 8 : OFTBinary,
- 9 : OFTDate,
- 10 : OFTTime,
- 11 : OFTDateTime,
- }
-ROGRFieldTypes = dict([(cls, num) for num, cls in OGRFieldTypes.items()])
diff --git a/parts/django/django/contrib/gis/gdal/geometries.py b/parts/django/django/contrib/gis/gdal/geometries.py
deleted file mode 100644
index 30125d5..0000000
--- a/parts/django/django/contrib/gis/gdal/geometries.py
+++ /dev/null
@@ -1,737 +0,0 @@
-"""
- The OGRGeometry is a wrapper for using the OGR Geometry class
- (see http://www.gdal.org/ogr/classOGRGeometry.html). OGRGeometry
- may be instantiated when reading geometries from OGR Data Sources
- (e.g. SHP files), or when given OGC WKT (a string).
-
- While the 'full' API is not present yet, the API is "pythonic" unlike
- the traditional and "next-generation" OGR Python bindings. One major
- advantage OGR Geometries have over their GEOS counterparts is support
- for spatial reference systems and their transformation.
-
- Example:
- >>> from django.contrib.gis.gdal import OGRGeometry, OGRGeomType, SpatialReference
- >>> wkt1, wkt2 = 'POINT(-90 30)', 'POLYGON((0 0, 5 0, 5 5, 0 5)'
- >>> pnt = OGRGeometry(wkt1)
- >>> print pnt
- POINT (-90 30)
- >>> mpnt = OGRGeometry(OGRGeomType('MultiPoint'), SpatialReference('WGS84'))
- >>> mpnt.add(wkt1)
- >>> mpnt.add(wkt1)
- >>> print mpnt
- MULTIPOINT (-90 30,-90 30)
- >>> print mpnt.srs.name
- WGS 84
- >>> print mpnt.srs.proj
- +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
- >>> mpnt.transform_to(SpatialReference('NAD27'))
- >>> print mpnt.proj
- +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs
- >>> print mpnt
- MULTIPOINT (-89.999930378602485 29.999797886557641,-89.999930378602485 29.999797886557641)
-
- The OGRGeomType class is to make it easy to specify an OGR geometry type:
- >>> from django.contrib.gis.gdal import OGRGeomType
- >>> gt1 = OGRGeomType(3) # Using an integer for the type
- >>> gt2 = OGRGeomType('Polygon') # Using a string
- >>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive
- >>> print gt1 == 3, gt1 == 'Polygon' # Equivalence works w/non-OGRGeomType objects
- True
-"""
-# Python library requisites.
-import sys
-from binascii import a2b_hex
-from ctypes import byref, string_at, c_char_p, c_double, c_ubyte, c_void_p
-
-# Getting GDAL prerequisites
-from django.contrib.gis.gdal.base import GDALBase
-from django.contrib.gis.gdal.envelope import Envelope, OGREnvelope
-from django.contrib.gis.gdal.error import OGRException, OGRIndexError, SRSException
-from django.contrib.gis.gdal.geomtype import OGRGeomType
-from django.contrib.gis.gdal.libgdal import GEOJSON, GDAL_VERSION
-from django.contrib.gis.gdal.srs import SpatialReference, CoordTransform
-
-# Getting the ctypes prototype functions that interface w/the GDAL C library.
-from django.contrib.gis.gdal.prototypes import geom as capi, srs as srs_api
-
-# For recognizing geometry input.
-from django.contrib.gis.geometry.regex import hex_regex, wkt_regex, json_regex
-
-# For more information, see the OGR C API source code:
-# http://www.gdal.org/ogr/ogr__api_8h.html
-#
-# The OGR_G_* routines are relevant here.
-
-#### OGRGeometry Class ####
-class OGRGeometry(GDALBase):
- "Generally encapsulates an OGR geometry."
-
- def __init__(self, geom_input, srs=None):
- "Initializes Geometry on either WKT or an OGR pointer as input."
-
- str_instance = isinstance(geom_input, basestring)
-
- # If HEX, unpack input to to a binary buffer.
- if str_instance and hex_regex.match(geom_input):
- geom_input = buffer(a2b_hex(geom_input.upper()))
- str_instance = False
-
- # Constructing the geometry,
- if str_instance:
- # Checking if unicode
- if isinstance(geom_input, unicode):
- # Encoding to ASCII, WKT or HEX doesn't need any more.
- geom_input = geom_input.encode('ascii')
-
- wkt_m = wkt_regex.match(geom_input)
- json_m = json_regex.match(geom_input)
- if wkt_m:
- if wkt_m.group('srid'):
- # If there's EWKT, set the SRS w/value of the SRID.
- srs = int(wkt_m.group('srid'))
- if wkt_m.group('type').upper() == 'LINEARRING':
- # OGR_G_CreateFromWkt doesn't work with LINEARRING WKT.
- # See http://trac.osgeo.org/gdal/ticket/1992.
- g = capi.create_geom(OGRGeomType(wkt_m.group('type')).num)
- capi.import_wkt(g, byref(c_char_p(wkt_m.group('wkt'))))
- else:
- g = capi.from_wkt(byref(c_char_p(wkt_m.group('wkt'))), None, byref(c_void_p()))
- elif json_m:
- if GEOJSON:
- g = capi.from_json(geom_input)
- else:
- raise NotImplementedError('GeoJSON input only supported on GDAL 1.5+.')
- else:
- # Seeing if the input is a valid short-hand string
- # (e.g., 'Point', 'POLYGON').
- ogr_t = OGRGeomType(geom_input)
- g = capi.create_geom(OGRGeomType(geom_input).num)
- elif isinstance(geom_input, buffer):
- # WKB was passed in
- g = capi.from_wkb(str(geom_input), None, byref(c_void_p()), len(geom_input))
- elif isinstance(geom_input, OGRGeomType):
- # OGRGeomType was passed in, an empty geometry will be created.
- g = capi.create_geom(geom_input.num)
- elif isinstance(geom_input, self.ptr_type):
- # OGR pointer (c_void_p) was the input.
- g = geom_input
- else:
- raise OGRException('Invalid input type for OGR Geometry construction: %s' % type(geom_input))
-
- # Now checking the Geometry pointer before finishing initialization
- # by setting the pointer for the object.
- if not g:
- raise OGRException('Cannot create OGR Geometry from input: %s' % str(geom_input))
- self.ptr = g
-
- # Assigning the SpatialReference object to the geometry, if valid.
- if bool(srs): self.srs = srs
-
- # Setting the class depending upon the OGR Geometry Type
- self.__class__ = GEO_CLASSES[self.geom_type.num]
-
- def __del__(self):
- "Deletes this Geometry."
- if self._ptr: capi.destroy_geom(self._ptr)
-
- # Pickle routines
- def __getstate__(self):
- srs = self.srs
- if srs:
- srs = srs.wkt
- else:
- srs = None
- return str(self.wkb), srs
-
- def __setstate__(self, state):
- wkb, srs = state
- ptr = capi.from_wkb(wkb, None, byref(c_void_p()), len(wkb))
- if not ptr: raise OGRException('Invalid OGRGeometry loaded from pickled state.')
- self.ptr = ptr
- self.srs = srs
-
- @classmethod
- def from_bbox(cls, bbox):
- "Constructs a Polygon from a bounding box (4-tuple)."
- x0, y0, x1, y1 = bbox
- return OGRGeometry( 'POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))' % (
- x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) )
-
- ### Geometry set-like operations ###
- # g = g1 | g2
- def __or__(self, other):
- "Returns the union of the two geometries."
- return self.union(other)
-
- # g = g1 & g2
- def __and__(self, other):
- "Returns the intersection of this Geometry and the other."
- return self.intersection(other)
-
- # g = g1 - g2
- def __sub__(self, other):
- "Return the difference this Geometry and the other."
- return self.difference(other)
-
- # g = g1 ^ g2
- def __xor__(self, other):
- "Return the symmetric difference of this Geometry and the other."
- return self.sym_difference(other)
-
- def __eq__(self, other):
- "Is this Geometry equal to the other?"
- if isinstance(other, OGRGeometry):
- return self.equals(other)
- else:
- return False
-
- def __ne__(self, other):
- "Tests for inequality."
- return not (self == other)
-
- def __str__(self):
- "WKT is used for the string representation."
- return self.wkt
-
- #### Geometry Properties ####
- @property
- def dimension(self):
- "Returns 0 for points, 1 for lines, and 2 for surfaces."
- return capi.get_dims(self.ptr)
-
- def _get_coord_dim(self):
- "Returns the coordinate dimension of the Geometry."
- if isinstance(self, GeometryCollection) and GDAL_VERSION < (1, 5, 2):
- # On GDAL versions prior to 1.5.2, there exists a bug in which
- # the coordinate dimension of geometry collections is always 2:
- # http://trac.osgeo.org/gdal/ticket/2334
- # Here we workaround by returning the coordinate dimension of the
- # first geometry in the collection instead.
- if len(self):
- return capi.get_coord_dim(capi.get_geom_ref(self.ptr, 0))
- return capi.get_coord_dim(self.ptr)
-
- def _set_coord_dim(self, dim):
- "Sets the coordinate dimension of this Geometry."
- if not dim in (2, 3):
- raise ValueError('Geometry dimension must be either 2 or 3')
- capi.set_coord_dim(self.ptr, dim)
-
- coord_dim = property(_get_coord_dim, _set_coord_dim)
-
- @property
- def geom_count(self):
- "The number of elements in this Geometry."
- return capi.get_geom_count(self.ptr)
-
- @property
- def point_count(self):
- "Returns the number of Points in this Geometry."
- return capi.get_point_count(self.ptr)
-
- @property
- def num_points(self):
- "Alias for `point_count` (same name method in GEOS API.)"
- return self.point_count
-
- @property
- def num_coords(self):
- "Alais for `point_count`."
- return self.point_count
-
- @property
- def geom_type(self):
- "Returns the Type for this Geometry."
- return OGRGeomType(capi.get_geom_type(self.ptr))
-
- @property
- def geom_name(self):
- "Returns the Name of this Geometry."
- return capi.get_geom_name(self.ptr)
-
- @property
- def area(self):
- "Returns the area for a LinearRing, Polygon, or MultiPolygon; 0 otherwise."
- return capi.get_area(self.ptr)
-
- @property
- def envelope(self):
- "Returns the envelope for this Geometry."
- # TODO: Fix Envelope() for Point geometries.
- return Envelope(capi.get_envelope(self.ptr, byref(OGREnvelope())))
-
- @property
- def extent(self):
- "Returns the envelope as a 4-tuple, instead of as an Envelope object."
- return self.envelope.tuple
-
- #### SpatialReference-related Properties ####
-
- # The SRS property
- def _get_srs(self):
- "Returns the Spatial Reference for this Geometry."
- try:
- srs_ptr = capi.get_geom_srs(self.ptr)
- return SpatialReference(srs_api.clone_srs(srs_ptr))
- except SRSException:
- return None
-
- def _set_srs(self, srs):
- "Sets the SpatialReference for this geometry."
- # Do not have to clone the `SpatialReference` object pointer because
- # when it is assigned to this `OGRGeometry` it's internal OGR
- # reference count is incremented, and will likewise be released
- # (decremented) when this geometry's destructor is called.
- if isinstance(srs, SpatialReference):
- srs_ptr = srs.ptr
- elif isinstance(srs, (int, long, basestring)):
- sr = SpatialReference(srs)
- srs_ptr = sr.ptr
- else:
- raise TypeError('Cannot assign spatial reference with object of type: %s' % type(srs))
- capi.assign_srs(self.ptr, srs_ptr)
-
- srs = property(_get_srs, _set_srs)
-
- # The SRID property
- def _get_srid(self):
- srs = self.srs
- if srs: return srs.srid
- return None
-
- def _set_srid(self, srid):
- if isinstance(srid, (int, long)):
- self.srs = srid
- else:
- raise TypeError('SRID must be set with an integer.')
-
- srid = property(_get_srid, _set_srid)
-
- #### Output Methods ####
- @property
- def geos(self):
- "Returns a GEOSGeometry object from this OGRGeometry."
- from django.contrib.gis.geos import GEOSGeometry
- return GEOSGeometry(self.wkb, self.srid)
-
- @property
- def gml(self):
- "Returns the GML representation of the Geometry."
- return capi.to_gml(self.ptr)
-
- @property
- def hex(self):
- "Returns the hexadecimal representation of the WKB (a string)."
- return str(self.wkb).encode('hex').upper()
- #return b2a_hex(self.wkb).upper()
-
- @property
- def json(self):
- """
- Returns the GeoJSON representation of this Geometry (requires
- GDAL 1.5+).
- """
- if GEOJSON:
- return capi.to_json(self.ptr)
- else:
- raise NotImplementedError('GeoJSON output only supported on GDAL 1.5+.')
- geojson = json
-
- @property
- def kml(self):
- "Returns the KML representation of the Geometry."
- if GEOJSON:
- return capi.to_kml(self.ptr, None)
- else:
- raise NotImplementedError('KML output only supported on GDAL 1.5+.')
-
- @property
- def wkb_size(self):
- "Returns the size of the WKB buffer."
- return capi.get_wkbsize(self.ptr)
-
- @property
- def wkb(self):
- "Returns the WKB representation of the Geometry."
- if sys.byteorder == 'little':
- byteorder = 1 # wkbNDR (from ogr_core.h)
- else:
- byteorder = 0 # wkbXDR
- sz = self.wkb_size
- # Creating the unsigned character buffer, and passing it in by reference.
- buf = (c_ubyte * sz)()
- wkb = capi.to_wkb(self.ptr, byteorder, byref(buf))
- # Returning a buffer of the string at the pointer.
- return buffer(string_at(buf, sz))
-
- @property
- def wkt(self):
- "Returns the WKT representation of the Geometry."
- return capi.to_wkt(self.ptr, byref(c_char_p()))
-
- @property
- def ewkt(self):
- "Returns the EWKT representation of the Geometry."
- srs = self.srs
- if srs and srs.srid:
- return 'SRID=%s;%s' % (srs.srid, self.wkt)
- else:
- return self.wkt
-
- #### Geometry Methods ####
- def clone(self):
- "Clones this OGR Geometry."
- return OGRGeometry(capi.clone_geom(self.ptr), self.srs)
-
- def close_rings(self):
- """
- If there are any rings within this geometry that have not been
- closed, this routine will do so by adding the starting point at the
- end.
- """
- # Closing the open rings.
- capi.geom_close_rings(self.ptr)
-
- def transform(self, coord_trans, clone=False):
- """
- Transforms this geometry to a different spatial reference system.
- May take a CoordTransform object, a SpatialReference object, string
- WKT or PROJ.4, and/or an integer SRID. By default nothing is returned
- and the geometry is transformed in-place. However, if the `clone`
- keyword is set, then a transformed clone of this geometry will be
- returned.
- """
- if clone:
- klone = self.clone()
- klone.transform(coord_trans)
- return klone
-
- # Have to get the coordinate dimension of the original geometry
- # so it can be used to reset the transformed geometry's dimension
- # afterwards. This is done because of GDAL bug (in versions prior
- # to 1.7) that turns geometries 3D after transformation, see:
- # http://trac.osgeo.org/gdal/changeset/17792
- if GDAL_VERSION < (1, 7):
- orig_dim = self.coord_dim
-
- # Depending on the input type, use the appropriate OGR routine
- # to perform the transformation.
- if isinstance(coord_trans, CoordTransform):
- capi.geom_transform(self.ptr, coord_trans.ptr)
- elif isinstance(coord_trans, SpatialReference):
- capi.geom_transform_to(self.ptr, coord_trans.ptr)
- elif isinstance(coord_trans, (int, long, basestring)):
- sr = SpatialReference(coord_trans)
- capi.geom_transform_to(self.ptr, sr.ptr)
- else:
- raise TypeError('Transform only accepts CoordTransform, '
- 'SpatialReference, string, and integer objects.')
-
- # Setting with original dimension, see comment above.
- if GDAL_VERSION < (1, 7):
- if isinstance(self, GeometryCollection):
- # With geometry collections have to set dimension on
- # each internal geometry reference, as the collection
- # dimension isn't affected.
- for i in xrange(len(self)):
- internal_ptr = capi.get_geom_ref(self.ptr, i)
- if orig_dim != capi.get_coord_dim(internal_ptr):
- capi.set_coord_dim(internal_ptr, orig_dim)
- else:
- if self.coord_dim != orig_dim:
- self.coord_dim = orig_dim
-
- def transform_to(self, srs):
- "For backwards-compatibility."
- self.transform(srs)
-
- #### Topology Methods ####
- def _topology(self, func, other):
- """A generalized function for topology operations, takes a GDAL function and
- the other geometry to perform the operation on."""
- if not isinstance(other, OGRGeometry):
- raise TypeError('Must use another OGRGeometry object for topology operations!')
-
- # Returning the output of the given function with the other geometry's
- # pointer.
- return func(self.ptr, other.ptr)
-
- def intersects(self, other):
- "Returns True if this geometry intersects with the other."
- return self._topology(capi.ogr_intersects, other)
-
- def equals(self, other):
- "Returns True if this geometry is equivalent to the other."
- return self._topology(capi.ogr_equals, other)
-
- def disjoint(self, other):
- "Returns True if this geometry and the other are spatially disjoint."
- return self._topology(capi.ogr_disjoint, other)
-
- def touches(self, other):
- "Returns True if this geometry touches the other."
- return self._topology(capi.ogr_touches, other)
-
- def crosses(self, other):
- "Returns True if this geometry crosses the other."
- return self._topology(capi.ogr_crosses, other)
-
- def within(self, other):
- "Returns True if this geometry is within the other."
- return self._topology(capi.ogr_within, other)
-
- def contains(self, other):
- "Returns True if this geometry contains the other."
- return self._topology(capi.ogr_contains, other)
-
- def overlaps(self, other):
- "Returns True if this geometry overlaps the other."
- return self._topology(capi.ogr_overlaps, other)
-
- #### Geometry-generation Methods ####
- def _geomgen(self, gen_func, other=None):
- "A helper routine for the OGR routines that generate geometries."
- if isinstance(other, OGRGeometry):
- return OGRGeometry(gen_func(self.ptr, other.ptr), self.srs)
- else:
- return OGRGeometry(gen_func(self.ptr), self.srs)
-
- @property
- def boundary(self):
- "Returns the boundary of this geometry."
- return self._geomgen(capi.get_boundary)
-
- @property
- def convex_hull(self):
- """
- Returns the smallest convex Polygon that contains all the points in
- this Geometry.
- """
- return self._geomgen(capi.geom_convex_hull)
-
- def difference(self, other):
- """
- Returns a new geometry consisting of the region which is the difference
- of this geometry and the other.
- """
- return self._geomgen(capi.geom_diff, other)
-
- def intersection(self, other):
- """
- Returns a new geometry consisting of the region of intersection of this
- geometry and the other.
- """
- return self._geomgen(capi.geom_intersection, other)
-
- def sym_difference(self, other):
- """
- Returns a new geometry which is the symmetric difference of this
- geometry and the other.
- """
- return self._geomgen(capi.geom_sym_diff, other)
-
- def union(self, other):
- """
- Returns a new geometry consisting of the region which is the union of
- this geometry and the other.
- """
- return self._geomgen(capi.geom_union, other)
-
-# The subclasses for OGR Geometry.
-class Point(OGRGeometry):
-
- @property
- def x(self):
- "Returns the X coordinate for this Point."
- return capi.getx(self.ptr, 0)
-
- @property
- def y(self):
- "Returns the Y coordinate for this Point."
- return capi.gety(self.ptr, 0)
-
- @property
- def z(self):
- "Returns the Z coordinate for this Point."
- if self.coord_dim == 3:
- return capi.getz(self.ptr, 0)
-
- @property
- def tuple(self):
- "Returns the tuple of this point."
- if self.coord_dim == 2:
- return (self.x, self.y)
- elif self.coord_dim == 3:
- return (self.x, self.y, self.z)
- coords = tuple
-
-class LineString(OGRGeometry):
-
- def __getitem__(self, index):
- "Returns the Point at the given index."
- if index >= 0 and index < self.point_count:
- x, y, z = c_double(), c_double(), c_double()
- capi.get_point(self.ptr, index, byref(x), byref(y), byref(z))
- dim = self.coord_dim
- if dim == 1:
- return (x.value,)
- elif dim == 2:
- return (x.value, y.value)
- elif dim == 3:
- return (x.value, y.value, z.value)
- else:
- raise OGRIndexError('index out of range: %s' % str(index))
-
- def __iter__(self):
- "Iterates over each point in the LineString."
- for i in xrange(self.point_count):
- yield self[i]
-
- def __len__(self):
- "The length returns the number of points in the LineString."
- return self.point_count
-
- @property
- def tuple(self):
- "Returns the tuple representation of this LineString."
- return tuple([self[i] for i in xrange(len(self))])
- coords = tuple
-
- def _listarr(self, func):
- """
- Internal routine that returns a sequence (list) corresponding with
- the given function.
- """
- return [func(self.ptr, i) for i in xrange(len(self))]
-
- @property
- def x(self):
- "Returns the X coordinates in a list."
- return self._listarr(capi.getx)
-
- @property
- def y(self):
- "Returns the Y coordinates in a list."
- return self._listarr(capi.gety)
-
- @property
- def z(self):
- "Returns the Z coordinates in a list."
- if self.coord_dim == 3:
- return self._listarr(capi.getz)
-
-# LinearRings are used in Polygons.
-class LinearRing(LineString): pass
-
-class Polygon(OGRGeometry):
-
- def __len__(self):
- "The number of interior rings in this Polygon."
- return self.geom_count
-
- def __iter__(self):
- "Iterates through each ring in the Polygon."
- for i in xrange(self.geom_count):
- yield self[i]
-
- def __getitem__(self, index):
- "Gets the ring at the specified index."
- if index < 0 or index >= self.geom_count:
- raise OGRIndexError('index out of range: %s' % index)
- else:
- return OGRGeometry(capi.clone_geom(capi.get_geom_ref(self.ptr, index)), self.srs)
-
- # Polygon Properties
- @property
- def shell(self):
- "Returns the shell of this Polygon."
- return self[0] # First ring is the shell
- exterior_ring = shell
-
- @property
- def tuple(self):
- "Returns a tuple of LinearRing coordinate tuples."
- return tuple([self[i].tuple for i in xrange(self.geom_count)])
- coords = tuple
-
- @property
- def point_count(self):
- "The number of Points in this Polygon."
- # Summing up the number of points in each ring of the Polygon.
- return sum([self[i].point_count for i in xrange(self.geom_count)])
-
- @property
- def centroid(self):
- "Returns the centroid (a Point) of this Polygon."
- # The centroid is a Point, create a geometry for this.
- p = OGRGeometry(OGRGeomType('Point'))
- capi.get_centroid(self.ptr, p.ptr)
- return p
-
-# Geometry Collection base class.
-class GeometryCollection(OGRGeometry):
- "The Geometry Collection class."
-
- def __getitem__(self, index):
- "Gets the Geometry at the specified index."
- if index < 0 or index >= self.geom_count:
- raise OGRIndexError('index out of range: %s' % index)
- else:
- return OGRGeometry(capi.clone_geom(capi.get_geom_ref(self.ptr, index)), self.srs)
-
- def __iter__(self):
- "Iterates over each Geometry."
- for i in xrange(self.geom_count):
- yield self[i]
-
- def __len__(self):
- "The number of geometries in this Geometry Collection."
- return self.geom_count
-
- def add(self, geom):
- "Add the geometry to this Geometry Collection."
- if isinstance(geom, OGRGeometry):
- if isinstance(geom, self.__class__):
- for g in geom: capi.add_geom(self.ptr, g.ptr)
- else:
- capi.add_geom(self.ptr, geom.ptr)
- elif isinstance(geom, basestring):
- tmp = OGRGeometry(geom)
- capi.add_geom(self.ptr, tmp.ptr)
- else:
- raise OGRException('Must add an OGRGeometry.')
-
- @property
- def point_count(self):
- "The number of Points in this Geometry Collection."
- # Summing up the number of points in each geometry in this collection
- return sum([self[i].point_count for i in xrange(self.geom_count)])
-
- @property
- def tuple(self):
- "Returns a tuple representation of this Geometry Collection."
- return tuple([self[i].tuple for i in xrange(self.geom_count)])
- coords = tuple
-
-# Multiple Geometry types.
-class MultiPoint(GeometryCollection): pass
-class MultiLineString(GeometryCollection): pass
-class MultiPolygon(GeometryCollection): pass
-
-# Class mapping dictionary (using the OGRwkbGeometryType as the key)
-GEO_CLASSES = {1 : Point,
- 2 : LineString,
- 3 : Polygon,
- 4 : MultiPoint,
- 5 : MultiLineString,
- 6 : MultiPolygon,
- 7 : GeometryCollection,
- 101: LinearRing,
- 1 + OGRGeomType.wkb25bit : Point,
- 2 + OGRGeomType.wkb25bit : LineString,
- 3 + OGRGeomType.wkb25bit : Polygon,
- 4 + OGRGeomType.wkb25bit : MultiPoint,
- 5 + OGRGeomType.wkb25bit : MultiLineString,
- 6 + OGRGeomType.wkb25bit : MultiPolygon,
- 7 + OGRGeomType.wkb25bit : GeometryCollection,
- }
diff --git a/parts/django/django/contrib/gis/gdal/geomtype.py b/parts/django/django/contrib/gis/gdal/geomtype.py
deleted file mode 100644
index 3bf94d4..0000000
--- a/parts/django/django/contrib/gis/gdal/geomtype.py
+++ /dev/null
@@ -1,85 +0,0 @@
-from django.contrib.gis.gdal.error import OGRException
-
-#### OGRGeomType ####
-class OGRGeomType(object):
- "Encapulates OGR Geometry Types."
-
- wkb25bit = -2147483648
-
- # Dictionary of acceptable OGRwkbGeometryType s and their string names.
- _types = {0 : 'Unknown',
- 1 : 'Point',
- 2 : 'LineString',
- 3 : 'Polygon',
- 4 : 'MultiPoint',
- 5 : 'MultiLineString',
- 6 : 'MultiPolygon',
- 7 : 'GeometryCollection',
- 100 : 'None',
- 101 : 'LinearRing',
- 1 + wkb25bit: 'Point25D',
- 2 + wkb25bit: 'LineString25D',
- 3 + wkb25bit: 'Polygon25D',
- 4 + wkb25bit: 'MultiPoint25D',
- 5 + wkb25bit : 'MultiLineString25D',
- 6 + wkb25bit : 'MultiPolygon25D',
- 7 + wkb25bit : 'GeometryCollection25D',
- }
- # Reverse type dictionary, keyed by lower-case of the name.
- _str_types = dict([(v.lower(), k) for k, v in _types.items()])
-
- def __init__(self, type_input):
- "Figures out the correct OGR Type based upon the input."
- if isinstance(type_input, OGRGeomType):
- num = type_input.num
- elif isinstance(type_input, basestring):
- type_input = type_input.lower()
- if type_input == 'geometry': type_input='unknown'
- num = self._str_types.get(type_input, None)
- if num is None:
- raise OGRException('Invalid OGR String Type "%s"' % type_input)
- elif isinstance(type_input, int):
- if not type_input in self._types:
- raise OGRException('Invalid OGR Integer Type: %d' % type_input)
- num = type_input
- else:
- raise TypeError('Invalid OGR input type given.')
-
- # Setting the OGR geometry type number.
- self.num = num
-
- def __str__(self):
- "Returns the value of the name property."
- return self.name
-
- def __eq__(self, other):
- """
- Does an equivalence test on the OGR type with the given
- other OGRGeomType, the short-hand string, or the integer.
- """
- if isinstance(other, OGRGeomType):
- return self.num == other.num
- elif isinstance(other, basestring):
- return self.name.lower() == other.lower()
- elif isinstance(other, int):
- return self.num == other
- else:
- return False
-
- def __ne__(self, other):
- return not (self == other)
-
- @property
- def name(self):
- "Returns a short-hand string form of the OGR Geometry type."
- return self._types[self.num]
-
- @property
- def django(self):
- "Returns the Django GeometryField for this OGR Type."
- s = self.name.replace('25D', '')
- if s in ('LinearRing', 'None'):
- return None
- elif s == 'Unknown':
- s = 'Geometry'
- return s + 'Field'
diff --git a/parts/django/django/contrib/gis/gdal/layer.py b/parts/django/django/contrib/gis/gdal/layer.py
deleted file mode 100644
index a2163bc..0000000
--- a/parts/django/django/contrib/gis/gdal/layer.py
+++ /dev/null
@@ -1,212 +0,0 @@
-# Needed ctypes routines
-from ctypes import c_double, byref
-
-# Other GDAL imports.
-from django.contrib.gis.gdal.base import GDALBase
-from django.contrib.gis.gdal.envelope import Envelope, OGREnvelope
-from django.contrib.gis.gdal.error import OGRException, OGRIndexError, SRSException
-from django.contrib.gis.gdal.feature import Feature
-from django.contrib.gis.gdal.field import OGRFieldTypes
-from django.contrib.gis.gdal.geomtype import OGRGeomType
-from django.contrib.gis.gdal.geometries import OGRGeometry
-from django.contrib.gis.gdal.srs import SpatialReference
-
-# GDAL ctypes function prototypes.
-from django.contrib.gis.gdal.prototypes import ds as capi, geom as geom_api, srs as srs_api
-
-# For more information, see the OGR C API source code:
-# http://www.gdal.org/ogr/ogr__api_8h.html
-#
-# The OGR_L_* routines are relevant here.
-class Layer(GDALBase):
- "A class that wraps an OGR Layer, needs to be instantiated from a DataSource object."
-
- #### Python 'magic' routines ####
- def __init__(self, layer_ptr, ds):
- """
- Initializes on an OGR C pointer to the Layer and the `DataSource` object
- that owns this layer. The `DataSource` object is required so that a
- reference to it is kept with this Layer. This prevents garbage
- collection of the `DataSource` while this Layer is still active.
- """
- if not layer_ptr:
- raise OGRException('Cannot create Layer, invalid pointer given')
- self.ptr = layer_ptr
- self._ds = ds
- self._ldefn = capi.get_layer_defn(self._ptr)
- # Does the Layer support random reading?
- self._random_read = self.test_capability('RandomRead')
-
- def __getitem__(self, index):
- "Gets the Feature at the specified index."
- if isinstance(index, (int, long)):
- # An integer index was given -- we cannot do a check based on the
- # number of features because the beginning and ending feature IDs
- # are not guaranteed to be 0 and len(layer)-1, respectively.
- if index < 0: raise OGRIndexError('Negative indices are not allowed on OGR Layers.')
- return self._make_feature(index)
- elif isinstance(index, slice):
- # A slice was given
- start, stop, stride = index.indices(self.num_feat)
- return [self._make_feature(fid) for fid in xrange(start, stop, stride)]
- else:
- raise TypeError('Integers and slices may only be used when indexing OGR Layers.')
-
- def __iter__(self):
- "Iterates over each Feature in the Layer."
- # ResetReading() must be called before iteration is to begin.
- capi.reset_reading(self._ptr)
- for i in xrange(self.num_feat):
- yield Feature(capi.get_next_feature(self._ptr), self._ldefn)
-
- def __len__(self):
- "The length is the number of features."
- return self.num_feat
-
- def __str__(self):
- "The string name of the layer."
- return self.name
-
- def _make_feature(self, feat_id):
- """
- Helper routine for __getitem__ that constructs a Feature from the given
- Feature ID. If the OGR Layer does not support random-access reading,
- then each feature of the layer will be incremented through until the
- a Feature is found matching the given feature ID.
- """
- if self._random_read:
- # If the Layer supports random reading, return.
- try:
- return Feature(capi.get_feature(self.ptr, feat_id), self._ldefn)
- except OGRException:
- pass
- else:
- # Random access isn't supported, have to increment through
- # each feature until the given feature ID is encountered.
- for feat in self:
- if feat.fid == feat_id: return feat
- # Should have returned a Feature, raise an OGRIndexError.
- raise OGRIndexError('Invalid feature id: %s.' % feat_id)
-
- #### Layer properties ####
- @property
- def extent(self):
- "Returns the extent (an Envelope) of this layer."
- env = OGREnvelope()
- capi.get_extent(self.ptr, byref(env), 1)
- return Envelope(env)
-
- @property
- def name(self):
- "Returns the name of this layer in the Data Source."
- return capi.get_fd_name(self._ldefn)
-
- @property
- def num_feat(self, force=1):
- "Returns the number of features in the Layer."
- return capi.get_feature_count(self.ptr, force)
-
- @property
- def num_fields(self):
- "Returns the number of fields in the Layer."
- return capi.get_field_count(self._ldefn)
-
- @property
- def geom_type(self):
- "Returns the geometry type (OGRGeomType) of the Layer."
- return OGRGeomType(capi.get_fd_geom_type(self._ldefn))
-
- @property
- def srs(self):
- "Returns the Spatial Reference used in this Layer."
- try:
- ptr = capi.get_layer_srs(self.ptr)
- return SpatialReference(srs_api.clone_srs(ptr))
- except SRSException:
- return None
-
- @property
- def fields(self):
- """
- Returns a list of string names corresponding to each of the Fields
- available in this Layer.
- """
- return [capi.get_field_name(capi.get_field_defn(self._ldefn, i))
- for i in xrange(self.num_fields) ]
-
- @property
- def field_types(self):
- """
- Returns a list of the types of fields in this Layer. For example,
- the list [OFTInteger, OFTReal, OFTString] would be returned for
- an OGR layer that had an integer, a floating-point, and string
- fields.
- """
- return [OGRFieldTypes[capi.get_field_type(capi.get_field_defn(self._ldefn, i))]
- for i in xrange(self.num_fields)]
-
- @property
- def field_widths(self):
- "Returns a list of the maximum field widths for the features."
- return [capi.get_field_width(capi.get_field_defn(self._ldefn, i))
- for i in xrange(self.num_fields)]
-
- @property
- def field_precisions(self):
- "Returns the field precisions for the features."
- return [capi.get_field_precision(capi.get_field_defn(self._ldefn, i))
- for i in xrange(self.num_fields)]
-
- def _get_spatial_filter(self):
- try:
- return OGRGeometry(geom_api.clone_geom(capi.get_spatial_filter(self.ptr)))
- except OGRException:
- return None
-
- def _set_spatial_filter(self, filter):
- if isinstance(filter, OGRGeometry):
- capi.set_spatial_filter(self.ptr, filter.ptr)
- elif isinstance(filter, (tuple, list)):
- if not len(filter) == 4:
- raise ValueError('Spatial filter list/tuple must have 4 elements.')
- # Map c_double onto params -- if a bad type is passed in it
- # will be caught here.
- xmin, ymin, xmax, ymax = map(c_double, filter)
- capi.set_spatial_filter_rect(self.ptr, xmin, ymin, xmax, ymax)
- elif filter is None:
- capi.set_spatial_filter(self.ptr, None)
- else:
- raise TypeError('Spatial filter must be either an OGRGeometry instance, a 4-tuple, or None.')
-
- spatial_filter = property(_get_spatial_filter, _set_spatial_filter)
-
- #### Layer Methods ####
- def get_fields(self, field_name):
- """
- Returns a list containing the given field name for every Feature
- in the Layer.
- """
- if not field_name in self.fields:
- raise OGRException('invalid field name: %s' % field_name)
- return [feat.get(field_name) for feat in self]
-
- def get_geoms(self, geos=False):
- """
- Returns a list containing the OGRGeometry for every Feature in
- the Layer.
- """
- if geos:
- from django.contrib.gis.geos import GEOSGeometry
- return [GEOSGeometry(feat.geom.wkb) for feat in self]
- else:
- return [feat.geom for feat in self]
-
- def test_capability(self, capability):
- """
- Returns a bool indicating whether the this Layer supports the given
- capability (a string). Valid capability strings include:
- 'RandomRead', 'SequentialWrite', 'RandomWrite', 'FastSpatialFilter',
- 'FastFeatureCount', 'FastGetExtent', 'CreateField', 'Transactions',
- 'DeleteFeature', and 'FastSetNextByIndex'.
- """
- return bool(capi.test_capability(self.ptr, capability))
diff --git a/parts/django/django/contrib/gis/gdal/libgdal.py b/parts/django/django/contrib/gis/gdal/libgdal.py
deleted file mode 100644
index a7a5658..0000000
--- a/parts/django/django/contrib/gis/gdal/libgdal.py
+++ /dev/null
@@ -1,104 +0,0 @@
-import os, re, sys
-from ctypes import c_char_p, CDLL
-from ctypes.util import find_library
-from django.contrib.gis.gdal.error import OGRException
-
-# Custom library path set?
-try:
- from django.conf import settings
- lib_path = settings.GDAL_LIBRARY_PATH
-except (AttributeError, EnvironmentError, ImportError):
- lib_path = None
-
-if lib_path:
- lib_names = None
-elif os.name == 'nt':
- # Windows NT shared library
- lib_names = ['gdal17', 'gdal16', 'gdal15']
-elif os.name == 'posix':
- # *NIX library names.
- lib_names = ['gdal', 'GDAL', 'gdal1.7.0', 'gdal1.6.0', 'gdal1.5.0', 'gdal1.4.0']
-else:
- raise OGRException('Unsupported OS "%s"' % os.name)
-
-# Using the ctypes `find_library` utility to find the
-# path to the GDAL library from the list of library names.
-if lib_names:
- for lib_name in lib_names:
- lib_path = find_library(lib_name)
- if not lib_path is None: break
-
-if lib_path is None:
- raise OGRException('Could not find the GDAL library (tried "%s"). '
- 'Try setting GDAL_LIBRARY_PATH in your settings.' %
- '", "'.join(lib_names))
-
-# This loads the GDAL/OGR C library
-lgdal = CDLL(lib_path)
-
-# On Windows, the GDAL binaries have some OSR routines exported with
-# STDCALL, while others are not. Thus, the library will also need to
-# be loaded up as WinDLL for said OSR functions that require the
-# different calling convention.
-if os.name == 'nt':
- from ctypes import WinDLL
- lwingdal = WinDLL(lib_path)
-
-def std_call(func):
- """
- Returns the correct STDCALL function for certain OSR routines on Win32
- platforms.
- """
- if os.name == 'nt':
- return lwingdal[func]
- else:
- return lgdal[func]
-
-#### Version-information functions. ####
-
-# Returns GDAL library version information with the given key.
-_version_info = std_call('GDALVersionInfo')
-_version_info.argtypes = [c_char_p]
-_version_info.restype = c_char_p
-
-def gdal_version():
- "Returns only the GDAL version number information."
- return _version_info('RELEASE_NAME')
-
-def gdal_full_version():
- "Returns the full GDAL version information."
- return _version_info('')
-
-def gdal_release_date(date=False):
- """
- Returns the release date in a string format, e.g, "2007/06/27".
- If the date keyword argument is set to True, a Python datetime object
- will be returned instead.
- """
- from datetime import date as date_type
- rel = _version_info('RELEASE_DATE')
- yy, mm, dd = map(int, (rel[0:4], rel[4:6], rel[6:8]))
- d = date_type(yy, mm, dd)
- if date: return d
- else: return d.strftime('%Y/%m/%d')
-
-version_regex = re.compile(r'^(?P<major>\d+)\.(?P<minor>\d+)(\.(?P<subminor>\d+))?')
-def gdal_version_info():
- ver = gdal_version()
- m = version_regex.match(ver)
- if not m: raise OGRException('Could not parse GDAL version string "%s"' % ver)
- return dict([(key, m.group(key)) for key in ('major', 'minor', 'subminor')])
-
-_verinfo = gdal_version_info()
-GDAL_MAJOR_VERSION = int(_verinfo['major'])
-GDAL_MINOR_VERSION = int(_verinfo['minor'])
-GDAL_SUBMINOR_VERSION = _verinfo['subminor'] and int(_verinfo['subminor'])
-GDAL_VERSION = (GDAL_MAJOR_VERSION, GDAL_MINOR_VERSION, GDAL_SUBMINOR_VERSION)
-del _verinfo
-
-# GeoJSON support is available only in GDAL 1.5+.
-if GDAL_VERSION >= (1, 5):
- GEOJSON = True
-else:
- GEOJSON = False
-
diff --git a/parts/django/django/contrib/gis/gdal/prototypes/__init__.py b/parts/django/django/contrib/gis/gdal/prototypes/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/gdal/prototypes/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/gdal/prototypes/ds.py b/parts/django/django/contrib/gis/gdal/prototypes/ds.py
deleted file mode 100644
index 44828ee..0000000
--- a/parts/django/django/contrib/gis/gdal/prototypes/ds.py
+++ /dev/null
@@ -1,71 +0,0 @@
-"""
- This module houses the ctypes function prototypes for OGR DataSource
- related data structures. OGR_Dr_*, OGR_DS_*, OGR_L_*, OGR_F_*,
- OGR_Fld_* routines are relevant here.
-"""
-from ctypes import c_char_p, c_double, c_int, c_long, c_void_p, POINTER
-from django.contrib.gis.gdal.envelope import OGREnvelope
-from django.contrib.gis.gdal.libgdal import lgdal
-from django.contrib.gis.gdal.prototypes.generation import \
- const_string_output, double_output, geom_output, int_output, \
- srs_output, void_output, voidptr_output
-
-c_int_p = POINTER(c_int) # shortcut type
-
-### Driver Routines ###
-register_all = void_output(lgdal.OGRRegisterAll, [], errcheck=False)
-cleanup_all = void_output(lgdal.OGRCleanupAll, [], errcheck=False)
-get_driver = voidptr_output(lgdal.OGRGetDriver, [c_int])
-get_driver_by_name = voidptr_output(lgdal.OGRGetDriverByName, [c_char_p])
-get_driver_count = int_output(lgdal.OGRGetDriverCount, [])
-get_driver_name = const_string_output(lgdal.OGR_Dr_GetName, [c_void_p])
-
-### DataSource ###
-open_ds = voidptr_output(lgdal.OGROpen, [c_char_p, c_int, POINTER(c_void_p)])
-destroy_ds = void_output(lgdal.OGR_DS_Destroy, [c_void_p], errcheck=False)
-release_ds = void_output(lgdal.OGRReleaseDataSource, [c_void_p])
-get_ds_name = const_string_output(lgdal.OGR_DS_GetName, [c_void_p])
-get_layer = voidptr_output(lgdal.OGR_DS_GetLayer, [c_void_p, c_int])
-get_layer_by_name = voidptr_output(lgdal.OGR_DS_GetLayerByName, [c_void_p, c_char_p])
-get_layer_count = int_output(lgdal.OGR_DS_GetLayerCount, [c_void_p])
-
-### Layer Routines ###
-get_extent = void_output(lgdal.OGR_L_GetExtent, [c_void_p, POINTER(OGREnvelope), c_int])
-get_feature = voidptr_output(lgdal.OGR_L_GetFeature, [c_void_p, c_long])
-get_feature_count = int_output(lgdal.OGR_L_GetFeatureCount, [c_void_p, c_int])
-get_layer_defn = voidptr_output(lgdal.OGR_L_GetLayerDefn, [c_void_p])
-get_layer_srs = srs_output(lgdal.OGR_L_GetSpatialRef, [c_void_p])
-get_next_feature = voidptr_output(lgdal.OGR_L_GetNextFeature, [c_void_p])
-reset_reading = void_output(lgdal.OGR_L_ResetReading, [c_void_p], errcheck=False)
-test_capability = int_output(lgdal.OGR_L_TestCapability, [c_void_p, c_char_p])
-get_spatial_filter = geom_output(lgdal.OGR_L_GetSpatialFilter, [c_void_p])
-set_spatial_filter = void_output(lgdal.OGR_L_SetSpatialFilter, [c_void_p, c_void_p], errcheck=False)
-set_spatial_filter_rect = void_output(lgdal.OGR_L_SetSpatialFilterRect, [c_void_p, c_double, c_double, c_double, c_double], errcheck=False)
-
-### Feature Definition Routines ###
-get_fd_geom_type = int_output(lgdal.OGR_FD_GetGeomType, [c_void_p])
-get_fd_name = const_string_output(lgdal.OGR_FD_GetName, [c_void_p])
-get_feat_name = const_string_output(lgdal.OGR_FD_GetName, [c_void_p])
-get_field_count = int_output(lgdal.OGR_FD_GetFieldCount, [c_void_p])
-get_field_defn = voidptr_output(lgdal.OGR_FD_GetFieldDefn, [c_void_p, c_int])
-
-### Feature Routines ###
-clone_feature = voidptr_output(lgdal.OGR_F_Clone, [c_void_p])
-destroy_feature = void_output(lgdal.OGR_F_Destroy, [c_void_p], errcheck=False)
-feature_equal = int_output(lgdal.OGR_F_Equal, [c_void_p, c_void_p])
-get_feat_geom_ref = geom_output(lgdal.OGR_F_GetGeometryRef, [c_void_p])
-get_feat_field_count = int_output(lgdal.OGR_F_GetFieldCount, [c_void_p])
-get_feat_field_defn = voidptr_output(lgdal.OGR_F_GetFieldDefnRef, [c_void_p, c_int])
-get_fid = int_output(lgdal.OGR_F_GetFID, [c_void_p])
-get_field_as_datetime = int_output(lgdal.OGR_F_GetFieldAsDateTime, [c_void_p, c_int, c_int_p, c_int_p, c_int_p, c_int_p, c_int_p, c_int_p])
-get_field_as_double = double_output(lgdal.OGR_F_GetFieldAsDouble, [c_void_p, c_int])
-get_field_as_integer = int_output(lgdal.OGR_F_GetFieldAsInteger, [c_void_p, c_int])
-get_field_as_string = const_string_output(lgdal.OGR_F_GetFieldAsString, [c_void_p, c_int])
-get_field_index = int_output(lgdal.OGR_F_GetFieldIndex, [c_void_p, c_char_p])
-
-### Field Routines ###
-get_field_name = const_string_output(lgdal.OGR_Fld_GetNameRef, [c_void_p])
-get_field_precision = int_output(lgdal.OGR_Fld_GetPrecision, [c_void_p])
-get_field_type = int_output(lgdal.OGR_Fld_GetType, [c_void_p])
-get_field_type_name = const_string_output(lgdal.OGR_GetFieldTypeName, [c_int])
-get_field_width = int_output(lgdal.OGR_Fld_GetWidth, [c_void_p])
diff --git a/parts/django/django/contrib/gis/gdal/prototypes/errcheck.py b/parts/django/django/contrib/gis/gdal/prototypes/errcheck.py
deleted file mode 100644
index 91858ea..0000000
--- a/parts/django/django/contrib/gis/gdal/prototypes/errcheck.py
+++ /dev/null
@@ -1,127 +0,0 @@
-"""
- This module houses the error-checking routines used by the GDAL
- ctypes prototypes.
-"""
-from ctypes import c_void_p, string_at
-from django.contrib.gis.gdal.error import check_err, OGRException, SRSException
-from django.contrib.gis.gdal.libgdal import lgdal
-
-# Helper routines for retrieving pointers and/or values from
-# arguments passed in by reference.
-def arg_byref(args, offset=-1):
- "Returns the pointer argument's by-refernece value."
- return args[offset]._obj.value
-
-def ptr_byref(args, offset=-1):
- "Returns the pointer argument passed in by-reference."
- return args[offset]._obj
-
-def check_bool(result, func, cargs):
- "Returns the boolean evaluation of the value."
- if bool(result): return True
- else: return False
-
-### String checking Routines ###
-def check_const_string(result, func, cargs, offset=None):
- """
- Similar functionality to `check_string`, but does not free the pointer.
- """
- if offset:
- check_err(result)
- ptr = ptr_byref(cargs, offset)
- return ptr.value
- else:
- return result
-
-def check_string(result, func, cargs, offset=-1, str_result=False):
- """
- Checks the string output returned from the given function, and frees
- the string pointer allocated by OGR. The `str_result` keyword
- may be used when the result is the string pointer, otherwise
- the OGR error code is assumed. The `offset` keyword may be used
- to extract the string pointer passed in by-reference at the given
- slice offset in the function arguments.
- """
- if str_result:
- # For routines that return a string.
- ptr = result
- if not ptr: s = None
- else: s = string_at(result)
- else:
- # Error-code return specified.
- check_err(result)
- ptr = ptr_byref(cargs, offset)
- # Getting the string value
- s = ptr.value
- # Correctly freeing the allocated memory beind GDAL pointer
- # w/the VSIFree routine.
- if ptr: lgdal.VSIFree(ptr)
- return s
-
-### DataSource, Layer error-checking ###
-
-### Envelope checking ###
-def check_envelope(result, func, cargs, offset=-1):
- "Checks a function that returns an OGR Envelope by reference."
- env = ptr_byref(cargs, offset)
- return env
-
-### Geometry error-checking routines ###
-def check_geom(result, func, cargs):
- "Checks a function that returns a geometry."
- # OGR_G_Clone may return an integer, even though the
- # restype is set to c_void_p
- if isinstance(result, (int, long)):
- result = c_void_p(result)
- if not result:
- raise OGRException('Invalid geometry pointer returned from "%s".' % func.__name__)
- return result
-
-def check_geom_offset(result, func, cargs, offset=-1):
- "Chcks the geometry at the given offset in the C parameter list."
- check_err(result)
- geom = ptr_byref(cargs, offset=offset)
- return check_geom(geom, func, cargs)
-
-### Spatial Reference error-checking routines ###
-def check_srs(result, func, cargs):
- if isinstance(result, (int, long)):
- result = c_void_p(result)
- if not result:
- raise SRSException('Invalid spatial reference pointer returned from "%s".' % func.__name__)
- return result
-
-### Other error-checking routines ###
-def check_arg_errcode(result, func, cargs):
- """
- The error code is returned in the last argument, by reference.
- Check its value with `check_err` before returning the result.
- """
- check_err(arg_byref(cargs))
- return result
-
-def check_errcode(result, func, cargs):
- """
- Check the error code returned (c_int).
- """
- check_err(result)
- return
-
-def check_pointer(result, func, cargs):
- "Makes sure the result pointer is valid."
- if isinstance(result, (int, long)):
- result = c_void_p(result)
- if bool(result):
- return result
- else:
- raise OGRException('Invalid pointer returned from "%s"' % func.__name__)
-
-def check_str_arg(result, func, cargs):
- """
- This is for the OSRGet[Angular|Linear]Units functions, which
- require that the returned string pointer not be freed. This
- returns both the double and tring values.
- """
- dbl = result
- ptr = cargs[-1]._obj
- return dbl, ptr.value
diff --git a/parts/django/django/contrib/gis/gdal/prototypes/generation.py b/parts/django/django/contrib/gis/gdal/prototypes/generation.py
deleted file mode 100644
index 1303532..0000000
--- a/parts/django/django/contrib/gis/gdal/prototypes/generation.py
+++ /dev/null
@@ -1,119 +0,0 @@
-"""
- This module contains functions that generate ctypes prototypes for the
- GDAL routines.
-"""
-
-from ctypes import c_char_p, c_double, c_int, c_void_p
-from django.contrib.gis.gdal.prototypes.errcheck import \
- check_arg_errcode, check_errcode, check_geom, check_geom_offset, \
- check_pointer, check_srs, check_str_arg, check_string, check_const_string
-
-class gdal_char_p(c_char_p):
- pass
-
-def double_output(func, argtypes, errcheck=False, strarg=False):
- "Generates a ctypes function that returns a double value."
- func.argtypes = argtypes
- func.restype = c_double
- if errcheck: func.errcheck = check_arg_errcode
- if strarg: func.errcheck = check_str_arg
- return func
-
-def geom_output(func, argtypes, offset=None):
- """
- Generates a function that returns a Geometry either by reference
- or directly (if the return_geom keyword is set to True).
- """
- # Setting the argument types
- func.argtypes = argtypes
-
- if not offset:
- # When a geometry pointer is directly returned.
- func.restype = c_void_p
- func.errcheck = check_geom
- else:
- # Error code returned, geometry is returned by-reference.
- func.restype = c_int
- def geomerrcheck(result, func, cargs):
- return check_geom_offset(result, func, cargs, offset)
- func.errcheck = geomerrcheck
-
- return func
-
-def int_output(func, argtypes):
- "Generates a ctypes function that returns an integer value."
- func.argtypes = argtypes
- func.restype = c_int
- return func
-
-def srs_output(func, argtypes):
- """
- Generates a ctypes prototype for the given function with
- the given C arguments that returns a pointer to an OGR
- Spatial Reference System.
- """
- func.argtypes = argtypes
- func.restype = c_void_p
- func.errcheck = check_srs
- return func
-
-def const_string_output(func, argtypes, offset=None):
- func.argtypes = argtypes
- if offset:
- func.restype = c_int
- else:
- func.restype = c_char_p
-
- def _check_const(result, func, cargs):
- return check_const_string(result, func, cargs, offset=offset)
- func.errcheck = _check_const
-
- return func
-
-def string_output(func, argtypes, offset=-1, str_result=False):
- """
- Generates a ctypes prototype for the given function with the
- given argument types that returns a string from a GDAL pointer.
- The `const` flag indicates whether the allocated pointer should
- be freed via the GDAL library routine VSIFree -- but only applies
- only when `str_result` is True.
- """
- func.argtypes = argtypes
- if str_result:
- # Use subclass of c_char_p so the error checking routine
- # can free the memory at the pointer's address.
- func.restype = gdal_char_p
- else:
- # Error code is returned
- func.restype = c_int
-
- # Dynamically defining our error-checking function with the
- # given offset.
- def _check_str(result, func, cargs):
- return check_string(result, func, cargs,
- offset=offset, str_result=str_result)
- func.errcheck = _check_str
- return func
-
-def void_output(func, argtypes, errcheck=True):
- """
- For functions that don't only return an error code that needs to
- be examined.
- """
- if argtypes: func.argtypes = argtypes
- if errcheck:
- # `errcheck` keyword may be set to False for routines that
- # return void, rather than a status code.
- func.restype = c_int
- func.errcheck = check_errcode
- else:
- func.restype = None
-
- return func
-
-def voidptr_output(func, argtypes):
- "For functions that return c_void_p."
- func.argtypes = argtypes
- func.restype = c_void_p
- func.errcheck = check_pointer
- return func
diff --git a/parts/django/django/contrib/gis/gdal/prototypes/geom.py b/parts/django/django/contrib/gis/gdal/prototypes/geom.py
deleted file mode 100644
index e002590..0000000
--- a/parts/django/django/contrib/gis/gdal/prototypes/geom.py
+++ /dev/null
@@ -1,106 +0,0 @@
-import re
-from datetime import date
-from ctypes import c_char, c_char_p, c_double, c_int, c_ubyte, c_void_p, POINTER
-from django.contrib.gis.gdal.envelope import OGREnvelope
-from django.contrib.gis.gdal.libgdal import lgdal, GEOJSON
-from django.contrib.gis.gdal.prototypes.errcheck import check_bool, check_envelope
-from django.contrib.gis.gdal.prototypes.generation import \
- const_string_output, double_output, geom_output, int_output, \
- srs_output, string_output, void_output
-
-### Generation routines specific to this module ###
-def env_func(f, argtypes):
- "For getting OGREnvelopes."
- f.argtypes = argtypes
- f.restype = None
- f.errcheck = check_envelope
- return f
-
-def pnt_func(f):
- "For accessing point information."
- return double_output(f, [c_void_p, c_int])
-
-def topology_func(f):
- f.argtypes = [c_void_p, c_void_p]
- f.restype = c_int
- f.errchck = check_bool
- return f
-
-### OGR_G ctypes function prototypes ###
-
-# GeoJSON routines, if supported.
-if GEOJSON:
- from_json = geom_output(lgdal.OGR_G_CreateGeometryFromJson, [c_char_p])
- to_json = string_output(lgdal.OGR_G_ExportToJson, [c_void_p], str_result=True)
- to_kml = string_output(lgdal.OGR_G_ExportToKML, [c_void_p, c_char_p], str_result=True)
-else:
- from_json = False
- to_json = False
- to_kml = False
-
-# GetX, GetY, GetZ all return doubles.
-getx = pnt_func(lgdal.OGR_G_GetX)
-gety = pnt_func(lgdal.OGR_G_GetY)
-getz = pnt_func(lgdal.OGR_G_GetZ)
-
-# Geometry creation routines.
-from_wkb = geom_output(lgdal.OGR_G_CreateFromWkb, [c_char_p, c_void_p, POINTER(c_void_p), c_int], offset=-2)
-from_wkt = geom_output(lgdal.OGR_G_CreateFromWkt, [POINTER(c_char_p), c_void_p, POINTER(c_void_p)], offset=-1)
-create_geom = geom_output(lgdal.OGR_G_CreateGeometry, [c_int])
-clone_geom = geom_output(lgdal.OGR_G_Clone, [c_void_p])
-get_geom_ref = geom_output(lgdal.OGR_G_GetGeometryRef, [c_void_p, c_int])
-get_boundary = geom_output(lgdal.OGR_G_GetBoundary, [c_void_p])
-geom_convex_hull = geom_output(lgdal.OGR_G_ConvexHull, [c_void_p])
-geom_diff = geom_output(lgdal.OGR_G_Difference, [c_void_p, c_void_p])
-geom_intersection = geom_output(lgdal.OGR_G_Intersection, [c_void_p, c_void_p])
-geom_sym_diff = geom_output(lgdal.OGR_G_SymmetricDifference, [c_void_p, c_void_p])
-geom_union = geom_output(lgdal.OGR_G_Union, [c_void_p, c_void_p])
-
-# Geometry modification routines.
-add_geom = void_output(lgdal.OGR_G_AddGeometry, [c_void_p, c_void_p])
-import_wkt = void_output(lgdal.OGR_G_ImportFromWkt, [c_void_p, POINTER(c_char_p)])
-
-# Destroys a geometry
-destroy_geom = void_output(lgdal.OGR_G_DestroyGeometry, [c_void_p], errcheck=False)
-
-# Geometry export routines.
-to_wkb = void_output(lgdal.OGR_G_ExportToWkb, None, errcheck=True) # special handling for WKB.
-to_wkt = string_output(lgdal.OGR_G_ExportToWkt, [c_void_p, POINTER(c_char_p)])
-to_gml = string_output(lgdal.OGR_G_ExportToGML, [c_void_p], str_result=True)
-get_wkbsize = int_output(lgdal.OGR_G_WkbSize, [c_void_p])
-
-# Geometry spatial-reference related routines.
-assign_srs = void_output(lgdal.OGR_G_AssignSpatialReference, [c_void_p, c_void_p], errcheck=False)
-get_geom_srs = srs_output(lgdal.OGR_G_GetSpatialReference, [c_void_p])
-
-# Geometry properties
-get_area = double_output(lgdal.OGR_G_GetArea, [c_void_p])
-get_centroid = void_output(lgdal.OGR_G_Centroid, [c_void_p, c_void_p])
-get_dims = int_output(lgdal.OGR_G_GetDimension, [c_void_p])
-get_coord_dim = int_output(lgdal.OGR_G_GetCoordinateDimension, [c_void_p])
-set_coord_dim = void_output(lgdal.OGR_G_SetCoordinateDimension, [c_void_p, c_int], errcheck=False)
-
-get_geom_count = int_output(lgdal.OGR_G_GetGeometryCount, [c_void_p])
-get_geom_name = const_string_output(lgdal.OGR_G_GetGeometryName, [c_void_p])
-get_geom_type = int_output(lgdal.OGR_G_GetGeometryType, [c_void_p])
-get_point_count = int_output(lgdal.OGR_G_GetPointCount, [c_void_p])
-get_point = void_output(lgdal.OGR_G_GetPoint, [c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double)], errcheck=False)
-geom_close_rings = void_output(lgdal.OGR_G_CloseRings, [c_void_p], errcheck=False)
-
-# Topology routines.
-ogr_contains = topology_func(lgdal.OGR_G_Contains)
-ogr_crosses = topology_func(lgdal.OGR_G_Crosses)
-ogr_disjoint = topology_func(lgdal.OGR_G_Disjoint)
-ogr_equals = topology_func(lgdal.OGR_G_Equals)
-ogr_intersects = topology_func(lgdal.OGR_G_Intersects)
-ogr_overlaps = topology_func(lgdal.OGR_G_Overlaps)
-ogr_touches = topology_func(lgdal.OGR_G_Touches)
-ogr_within = topology_func(lgdal.OGR_G_Within)
-
-# Transformation routines.
-geom_transform = void_output(lgdal.OGR_G_Transform, [c_void_p, c_void_p])
-geom_transform_to = void_output(lgdal.OGR_G_TransformTo, [c_void_p, c_void_p])
-
-# For retrieving the envelope of the geometry.
-get_envelope = env_func(lgdal.OGR_G_GetEnvelope, [c_void_p, POINTER(OGREnvelope)])
-
diff --git a/parts/django/django/contrib/gis/gdal/prototypes/srs.py b/parts/django/django/contrib/gis/gdal/prototypes/srs.py
deleted file mode 100644
index 411cec9..0000000
--- a/parts/django/django/contrib/gis/gdal/prototypes/srs.py
+++ /dev/null
@@ -1,72 +0,0 @@
-from ctypes import c_char_p, c_int, c_void_p, POINTER
-from django.contrib.gis.gdal.libgdal import lgdal, std_call
-from django.contrib.gis.gdal.prototypes.generation import \
- const_string_output, double_output, int_output, \
- srs_output, string_output, void_output
-
-## Shortcut generation for routines with known parameters.
-def srs_double(f):
- """
- Creates a function prototype for the OSR routines that take
- the OSRSpatialReference object and
- """
- return double_output(f, [c_void_p, POINTER(c_int)], errcheck=True)
-
-def units_func(f):
- """
- Creates a ctypes function prototype for OSR units functions, e.g.,
- OSRGetAngularUnits, OSRGetLinearUnits.
- """
- return double_output(f, [c_void_p, POINTER(c_char_p)], strarg=True)
-
-# Creation & destruction.
-clone_srs = srs_output(std_call('OSRClone'), [c_void_p])
-new_srs = srs_output(std_call('OSRNewSpatialReference'), [c_char_p])
-release_srs = void_output(lgdal.OSRRelease, [c_void_p], errcheck=False)
-destroy_srs = void_output(std_call('OSRDestroySpatialReference'), [c_void_p], errcheck=False)
-srs_validate = void_output(lgdal.OSRValidate, [c_void_p])
-
-# Getting the semi_major, semi_minor, and flattening functions.
-semi_major = srs_double(lgdal.OSRGetSemiMajor)
-semi_minor = srs_double(lgdal.OSRGetSemiMinor)
-invflattening = srs_double(lgdal.OSRGetInvFlattening)
-
-# WKT, PROJ, EPSG, XML importation routines.
-from_wkt = void_output(lgdal.OSRImportFromWkt, [c_void_p, POINTER(c_char_p)])
-from_proj = void_output(lgdal.OSRImportFromProj4, [c_void_p, c_char_p])
-from_epsg = void_output(std_call('OSRImportFromEPSG'), [c_void_p, c_int])
-from_xml = void_output(lgdal.OSRImportFromXML, [c_void_p, c_char_p])
-from_user_input = void_output(std_call('OSRSetFromUserInput'), [c_void_p, c_char_p])
-
-# Morphing to/from ESRI WKT.
-morph_to_esri = void_output(lgdal.OSRMorphToESRI, [c_void_p])
-morph_from_esri = void_output(lgdal.OSRMorphFromESRI, [c_void_p])
-
-# Identifying the EPSG
-identify_epsg = void_output(lgdal.OSRAutoIdentifyEPSG, [c_void_p])
-
-# Getting the angular_units, linear_units functions
-linear_units = units_func(lgdal.OSRGetLinearUnits)
-angular_units = units_func(lgdal.OSRGetAngularUnits)
-
-# For exporting to WKT, PROJ.4, "Pretty" WKT, and XML.
-to_wkt = string_output(std_call('OSRExportToWkt'), [c_void_p, POINTER(c_char_p)])
-to_proj = string_output(std_call('OSRExportToProj4'), [c_void_p, POINTER(c_char_p)])
-to_pretty_wkt = string_output(std_call('OSRExportToPrettyWkt'), [c_void_p, POINTER(c_char_p), c_int], offset=-2)
-
-# Memory leak fixed in GDAL 1.5; still exists in 1.4.
-to_xml = string_output(lgdal.OSRExportToXML, [c_void_p, POINTER(c_char_p), c_char_p], offset=-2)
-
-# String attribute retrival routines.
-get_attr_value = const_string_output(std_call('OSRGetAttrValue'), [c_void_p, c_char_p, c_int])
-get_auth_name = const_string_output(lgdal.OSRGetAuthorityName, [c_void_p, c_char_p])
-get_auth_code = const_string_output(lgdal.OSRGetAuthorityCode, [c_void_p, c_char_p])
-
-# SRS Properties
-isgeographic = int_output(lgdal.OSRIsGeographic, [c_void_p])
-islocal = int_output(lgdal.OSRIsLocal, [c_void_p])
-isprojected = int_output(lgdal.OSRIsProjected, [c_void_p])
-
-# Coordinate transformation
-new_ct= srs_output(std_call('OCTNewCoordinateTransformation'), [c_void_p, c_void_p])
-destroy_ct = void_output(std_call('OCTDestroyCoordinateTransformation'), [c_void_p], errcheck=False)
diff --git a/parts/django/django/contrib/gis/gdal/srs.py b/parts/django/django/contrib/gis/gdal/srs.py
deleted file mode 100644
index 95e71f1..0000000
--- a/parts/django/django/contrib/gis/gdal/srs.py
+++ /dev/null
@@ -1,337 +0,0 @@
-"""
- The Spatial Reference class, represensents OGR Spatial Reference objects.
-
- Example:
- >>> from django.contrib.gis.gdal import SpatialReference
- >>> srs = SpatialReference('WGS84')
- >>> print srs
- GEOGCS["WGS 84",
- DATUM["WGS_1984",
- SPHEROID["WGS 84",6378137,298.257223563,
- AUTHORITY["EPSG","7030"]],
- TOWGS84[0,0,0,0,0,0,0],
- AUTHORITY["EPSG","6326"]],
- PRIMEM["Greenwich",0,
- AUTHORITY["EPSG","8901"]],
- UNIT["degree",0.01745329251994328,
- AUTHORITY["EPSG","9122"]],
- AUTHORITY["EPSG","4326"]]
- >>> print srs.proj
- +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
- >>> print srs.ellipsoid
- (6378137.0, 6356752.3142451793, 298.25722356300003)
- >>> print srs.projected, srs.geographic
- False True
- >>> srs.import_epsg(32140)
- >>> print srs.name
- NAD83 / Texas South Central
-"""
-import re
-from ctypes import byref, c_char_p, c_int, c_void_p
-
-# Getting the error checking routine and exceptions
-from django.contrib.gis.gdal.base import GDALBase
-from django.contrib.gis.gdal.error import OGRException, SRSException
-from django.contrib.gis.gdal.prototypes import srs as capi
-
-#### Spatial Reference class. ####
-class SpatialReference(GDALBase):
- """
- A wrapper for the OGRSpatialReference object. According to the GDAL Web site,
- the SpatialReference object "provide[s] services to represent coordinate
- systems (projections and datums) and to transform between them."
- """
-
- #### Python 'magic' routines ####
- def __init__(self, srs_input=''):
- """
- Creates a GDAL OSR Spatial Reference object from the given input.
- The input may be string of OGC Well Known Text (WKT), an integer
- EPSG code, a PROJ.4 string, and/or a projection "well known" shorthand
- string (one of 'WGS84', 'WGS72', 'NAD27', 'NAD83').
- """
- buf = c_char_p('')
- srs_type = 'user'
-
- if isinstance(srs_input, basestring):
- # Encoding to ASCII if unicode passed in.
- if isinstance(srs_input, unicode):
- srs_input = srs_input.encode('ascii')
- try:
- # If SRID is a string, e.g., '4326', then make acceptable
- # as user input.
- srid = int(srs_input)
- srs_input = 'EPSG:%d' % srid
- except ValueError:
- pass
- elif isinstance(srs_input, (int, long)):
- # EPSG integer code was input.
- srs_type = 'epsg'
- elif isinstance(srs_input, self.ptr_type):
- srs = srs_input
- srs_type = 'ogr'
- else:
- raise TypeError('Invalid SRS type "%s"' % srs_type)
-
- if srs_type == 'ogr':
- # Input is already an SRS pointer.
- srs = srs_input
- else:
- # Creating a new SRS pointer, using the string buffer.
- srs = capi.new_srs(buf)
-
- # If the pointer is NULL, throw an exception.
- if not srs:
- raise SRSException('Could not create spatial reference from: %s' % srs_input)
- else:
- self.ptr = srs
-
- # Importing from either the user input string or an integer SRID.
- if srs_type == 'user':
- self.import_user_input(srs_input)
- elif srs_type == 'epsg':
- self.import_epsg(srs_input)
-
- def __del__(self):
- "Destroys this spatial reference."
- if self._ptr: capi.release_srs(self._ptr)
-
- def __getitem__(self, target):
- """
- Returns the value of the given string attribute node, None if the node
- doesn't exist. Can also take a tuple as a parameter, (target, child),
- where child is the index of the attribute in the WKT. For example:
-
- >>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]')
- >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326
- >>> print srs['GEOGCS']
- WGS 84
- >>> print srs['DATUM']
- WGS_1984
- >>> print srs['AUTHORITY']
- EPSG
- >>> print srs['AUTHORITY', 1] # The authority value
- 4326
- >>> print srs['TOWGS84', 4] # the fourth value in this wkt
- 0
- >>> print srs['UNIT|AUTHORITY'] # For the units authority, have to use the pipe symbole.
- EPSG
- >>> print srs['UNIT|AUTHORITY', 1] # The authority value for the untis
- 9122
- """
- if isinstance(target, tuple):
- return self.attr_value(*target)
- else:
- return self.attr_value(target)
-
- def __str__(self):
- "The string representation uses 'pretty' WKT."
- return self.pretty_wkt
-
- #### SpatialReference Methods ####
- def attr_value(self, target, index=0):
- """
- The attribute value for the given target node (e.g. 'PROJCS'). The index
- keyword specifies an index of the child node to return.
- """
- if not isinstance(target, basestring) or not isinstance(index, int):
- raise TypeError
- return capi.get_attr_value(self.ptr, target, index)
-
- def auth_name(self, target):
- "Returns the authority name for the given string target node."
- return capi.get_auth_name(self.ptr, target)
-
- def auth_code(self, target):
- "Returns the authority code for the given string target node."
- return capi.get_auth_code(self.ptr, target)
-
- def clone(self):
- "Returns a clone of this SpatialReference object."
- return SpatialReference(capi.clone_srs(self.ptr))
-
- def from_esri(self):
- "Morphs this SpatialReference from ESRI's format to EPSG."
- capi.morph_from_esri(self.ptr)
-
- def identify_epsg(self):
- """
- This method inspects the WKT of this SpatialReference, and will
- add EPSG authority nodes where an EPSG identifier is applicable.
- """
- capi.identify_epsg(self.ptr)
-
- def to_esri(self):
- "Morphs this SpatialReference to ESRI's format."
- capi.morph_to_esri(self.ptr)
-
- def validate(self):
- "Checks to see if the given spatial reference is valid."
- capi.srs_validate(self.ptr)
-
- #### Name & SRID properties ####
- @property
- def name(self):
- "Returns the name of this Spatial Reference."
- if self.projected: return self.attr_value('PROJCS')
- elif self.geographic: return self.attr_value('GEOGCS')
- elif self.local: return self.attr_value('LOCAL_CS')
- else: return None
-
- @property
- def srid(self):
- "Returns the SRID of top-level authority, or None if undefined."
- try:
- return int(self.attr_value('AUTHORITY', 1))
- except (TypeError, ValueError):
- return None
-
- #### Unit Properties ####
- @property
- def linear_name(self):
- "Returns the name of the linear units."
- units, name = capi.linear_units(self.ptr, byref(c_char_p()))
- return name
-
- @property
- def linear_units(self):
- "Returns the value of the linear units."
- units, name = capi.linear_units(self.ptr, byref(c_char_p()))
- return units
-
- @property
- def angular_name(self):
- "Returns the name of the angular units."
- units, name = capi.angular_units(self.ptr, byref(c_char_p()))
- return name
-
- @property
- def angular_units(self):
- "Returns the value of the angular units."
- units, name = capi.angular_units(self.ptr, byref(c_char_p()))
- return units
-
- @property
- def units(self):
- """
- Returns a 2-tuple of the units value and the units name,
- and will automatically determines whether to return the linear
- or angular units.
- """
- if self.projected or self.local:
- return capi.linear_units(self.ptr, byref(c_char_p()))
- elif self.geographic:
- return capi.angular_units(self.ptr, byref(c_char_p()))
- else:
- return (None, None)
-
- #### Spheroid/Ellipsoid Properties ####
- @property
- def ellipsoid(self):
- """
- Returns a tuple of the ellipsoid parameters:
- (semimajor axis, semiminor axis, and inverse flattening)
- """
- return (self.semi_major, self.semi_minor, self.inverse_flattening)
-
- @property
- def semi_major(self):
- "Returns the Semi Major Axis for this Spatial Reference."
- return capi.semi_major(self.ptr, byref(c_int()))
-
- @property
- def semi_minor(self):
- "Returns the Semi Minor Axis for this Spatial Reference."
- return capi.semi_minor(self.ptr, byref(c_int()))
-
- @property
- def inverse_flattening(self):
- "Returns the Inverse Flattening for this Spatial Reference."
- return capi.invflattening(self.ptr, byref(c_int()))
-
- #### Boolean Properties ####
- @property
- def geographic(self):
- """
- Returns True if this SpatialReference is geographic
- (root node is GEOGCS).
- """
- return bool(capi.isgeographic(self.ptr))
-
- @property
- def local(self):
- "Returns True if this SpatialReference is local (root node is LOCAL_CS)."
- return bool(capi.islocal(self.ptr))
-
- @property
- def projected(self):
- """
- Returns True if this SpatialReference is a projected coordinate system
- (root node is PROJCS).
- """
- return bool(capi.isprojected(self.ptr))
-
- #### Import Routines #####
- def import_epsg(self, epsg):
- "Imports the Spatial Reference from the EPSG code (an integer)."
- capi.from_epsg(self.ptr, epsg)
-
- def import_proj(self, proj):
- "Imports the Spatial Reference from a PROJ.4 string."
- capi.from_proj(self.ptr, proj)
-
- def import_user_input(self, user_input):
- "Imports the Spatial Reference from the given user input string."
- capi.from_user_input(self.ptr, user_input)
-
- def import_wkt(self, wkt):
- "Imports the Spatial Reference from OGC WKT (string)"
- capi.from_wkt(self.ptr, byref(c_char_p(wkt)))
-
- def import_xml(self, xml):
- "Imports the Spatial Reference from an XML string."
- capi.from_xml(self.ptr, xml)
-
- #### Export Properties ####
- @property
- def wkt(self):
- "Returns the WKT representation of this Spatial Reference."
- return capi.to_wkt(self.ptr, byref(c_char_p()))
-
- @property
- def pretty_wkt(self, simplify=0):
- "Returns the 'pretty' representation of the WKT."
- return capi.to_pretty_wkt(self.ptr, byref(c_char_p()), simplify)
-
- @property
- def proj(self):
- "Returns the PROJ.4 representation for this Spatial Reference."
- return capi.to_proj(self.ptr, byref(c_char_p()))
-
- @property
- def proj4(self):
- "Alias for proj()."
- return self.proj
-
- @property
- def xml(self, dialect=''):
- "Returns the XML representation of this Spatial Reference."
- return capi.to_xml(self.ptr, byref(c_char_p()), dialect)
-
-class CoordTransform(GDALBase):
- "The coordinate system transformation object."
-
- def __init__(self, source, target):
- "Initializes on a source and target SpatialReference objects."
- if not isinstance(source, SpatialReference) or not isinstance(target, SpatialReference):
- raise TypeError('source and target must be of type SpatialReference')
- self.ptr = capi.new_ct(source._ptr, target._ptr)
- self._srs1_name = source.name
- self._srs2_name = target.name
-
- def __del__(self):
- "Deletes this Coordinate Transformation object."
- if self._ptr: capi.destroy_ct(self._ptr)
-
- def __str__(self):
- return 'Transform from "%s" to "%s"' % (self._srs1_name, self._srs2_name)
diff --git a/parts/django/django/contrib/gis/gdal/tests/__init__.py b/parts/django/django/contrib/gis/gdal/tests/__init__.py
deleted file mode 100644
index aada5f4..0000000
--- a/parts/django/django/contrib/gis/gdal/tests/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
-Module for executing all of the GDAL tests. None
-of these tests require the use of the database.
-"""
-from unittest import TestSuite, TextTestRunner
-
-# Importing the GDAL test modules.
-import test_driver, test_ds, test_envelope, test_geom, test_srs
-
-test_suites = [test_driver.suite(),
- test_ds.suite(),
- test_envelope.suite(),
- test_geom.suite(),
- test_srs.suite(),
- ]
-
-def suite():
- "Builds a test suite for the GDAL tests."
- s = TestSuite()
- map(s.addTest, test_suites)
- return s
-
-def run(verbosity=1):
- "Runs the GDAL tests."
- TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/gdal/tests/test_driver.py b/parts/django/django/contrib/gis/gdal/tests/test_driver.py
deleted file mode 100644
index 1ff65ac..0000000
--- a/parts/django/django/contrib/gis/gdal/tests/test_driver.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import os, os.path, unittest
-from django.contrib.gis.gdal import Driver, OGRException
-
-valid_drivers = ('ESRI Shapefile', 'MapInfo File', 'TIGER', 'S57', 'DGN',
- 'Memory', 'CSV', 'GML', 'KML')
-
-invalid_drivers = ('Foo baz', 'clucka', 'ESRI Shp')
-
-aliases = {'eSrI' : 'ESRI Shapefile',
- 'TigER/linE' : 'TIGER',
- 'SHAPE' : 'ESRI Shapefile',
- 'sHp' : 'ESRI Shapefile',
- }
-
-class DriverTest(unittest.TestCase):
-
- def test01_valid_driver(self):
- "Testing valid OGR Data Source Drivers."
- for d in valid_drivers:
- dr = Driver(d)
- self.assertEqual(d, str(dr))
-
- def test02_invalid_driver(self):
- "Testing invalid OGR Data Source Drivers."
- for i in invalid_drivers:
- self.assertRaises(OGRException, Driver, i)
-
- def test03_aliases(self):
- "Testing driver aliases."
- for alias, full_name in aliases.items():
- dr = Driver(alias)
- self.assertEqual(full_name, str(dr))
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(DriverTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/gdal/tests/test_ds.py b/parts/django/django/contrib/gis/gdal/tests/test_ds.py
deleted file mode 100644
index e1083b2..0000000
--- a/parts/django/django/contrib/gis/gdal/tests/test_ds.py
+++ /dev/null
@@ -1,226 +0,0 @@
-import os, os.path, unittest
-from django.contrib.gis.gdal import DataSource, Envelope, OGRGeometry, OGRException, OGRIndexError, GDAL_VERSION
-from django.contrib.gis.gdal.field import OFTReal, OFTInteger, OFTString
-from django.contrib.gis.geometry.test_data import get_ds_file, TestDS
-
-# List of acceptable data sources.
-ds_list = (TestDS('test_point', nfeat=5, nfld=3, geom='POINT', gtype=1, driver='ESRI Shapefile',
- fields={'dbl' : OFTReal, 'int' : OFTInteger, 'str' : OFTString,},
- extent=(-1.35011,0.166623,-0.524093,0.824508), # Got extent from QGIS
- srs_wkt='GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]',
- field_values={'dbl' : [float(i) for i in range(1, 6)], 'int' : range(1, 6), 'str' : [str(i) for i in range(1, 6)]},
- fids=range(5)),
- TestDS('test_vrt', ext='vrt', nfeat=3, nfld=3, geom='POINT', gtype='Point25D', driver='VRT',
- fields={'POINT_X' : OFTString, 'POINT_Y' : OFTString, 'NUM' : OFTString}, # VRT uses CSV, which all types are OFTString.
- extent=(1.0, 2.0, 100.0, 523.5), # Min/Max from CSV
- field_values={'POINT_X' : ['1.0', '5.0', '100.0'], 'POINT_Y' : ['2.0', '23.0', '523.5'], 'NUM' : ['5', '17', '23']},
- fids=range(1,4)),
- TestDS('test_poly', nfeat=3, nfld=3, geom='POLYGON', gtype=3,
- driver='ESRI Shapefile',
- fields={'float' : OFTReal, 'int' : OFTInteger, 'str' : OFTString,},
- extent=(-1.01513,-0.558245,0.161876,0.839637), # Got extent from QGIS
- srs_wkt='GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]'),
- )
-
-bad_ds = (TestDS('foo'),
- )
-
-class DataSourceTest(unittest.TestCase):
-
- def test01_valid_shp(self):
- "Testing valid SHP Data Source files."
-
- for source in ds_list:
- # Loading up the data source
- ds = DataSource(source.ds)
-
- # Making sure the layer count is what's expected (only 1 layer in a SHP file)
- self.assertEqual(1, len(ds))
-
- # Making sure GetName works
- self.assertEqual(source.ds, ds.name)
-
- # Making sure the driver name matches up
- self.assertEqual(source.driver, str(ds.driver))
-
- # Making sure indexing works
- try:
- ds[len(ds)]
- except OGRIndexError:
- pass
- else:
- self.fail('Expected an IndexError!')
-
- def test02_invalid_shp(self):
- "Testing invalid SHP files for the Data Source."
- for source in bad_ds:
- self.assertRaises(OGRException, DataSource, source.ds)
-
- def test03a_layers(self):
- "Testing Data Source Layers."
- print "\nBEGIN - expecting out of range feature id error; safe to ignore.\n"
- for source in ds_list:
- ds = DataSource(source.ds)
-
- # Incrementing through each layer, this tests DataSource.__iter__
- for layer in ds:
- # Making sure we get the number of features we expect
- self.assertEqual(len(layer), source.nfeat)
-
- # Making sure we get the number of fields we expect
- self.assertEqual(source.nfld, layer.num_fields)
- self.assertEqual(source.nfld, len(layer.fields))
-
- # Testing the layer's extent (an Envelope), and it's properties
- if source.driver == 'VRT' and (GDAL_VERSION > (1, 7, 0) and GDAL_VERSION < (1, 7, 3)):
- # There's a known GDAL regression with retrieving the extent
- # of a VRT layer in versions 1.7.0-1.7.2:
- # http://trac.osgeo.org/gdal/ticket/3783
- pass
- else:
- self.assertEqual(True, isinstance(layer.extent, Envelope))
- self.assertAlmostEqual(source.extent[0], layer.extent.min_x, 5)
- self.assertAlmostEqual(source.extent[1], layer.extent.min_y, 5)
- self.assertAlmostEqual(source.extent[2], layer.extent.max_x, 5)
- self.assertAlmostEqual(source.extent[3], layer.extent.max_y, 5)
-
- # Now checking the field names.
- flds = layer.fields
- for f in flds: self.assertEqual(True, f in source.fields)
-
- # Negative FIDs are not allowed.
- self.assertRaises(OGRIndexError, layer.__getitem__, -1)
- self.assertRaises(OGRIndexError, layer.__getitem__, 50000)
-
- if hasattr(source, 'field_values'):
- fld_names = source.field_values.keys()
-
- # Testing `Layer.get_fields` (which uses Layer.__iter__)
- for fld_name in fld_names:
- self.assertEqual(source.field_values[fld_name], layer.get_fields(fld_name))
-
- # Testing `Layer.__getitem__`.
- for i, fid in enumerate(source.fids):
- feat = layer[fid]
- self.assertEqual(fid, feat.fid)
- # Maybe this should be in the test below, but we might as well test
- # the feature values here while in this loop.
- for fld_name in fld_names:
- self.assertEqual(source.field_values[fld_name][i], feat.get(fld_name))
- print "\nEND - expecting out of range feature id error; safe to ignore."
-
- def test03b_layer_slice(self):
- "Test indexing and slicing on Layers."
- # Using the first data-source because the same slice
- # can be used for both the layer and the control values.
- source = ds_list[0]
- ds = DataSource(source.ds)
-
- sl = slice(1, 3)
- feats = ds[0][sl]
-
- for fld_name in ds[0].fields:
- test_vals = [feat.get(fld_name) for feat in feats]
- control_vals = source.field_values[fld_name][sl]
- self.assertEqual(control_vals, test_vals)
-
- def test03c_layer_references(self):
- "Test to make sure Layer access is still available without the DataSource."
- source = ds_list[0]
-
- # See ticket #9448.
- def get_layer():
- # This DataSource object is not accessible outside this
- # scope. However, a reference should still be kept alive
- # on the `Layer` returned.
- ds = DataSource(source.ds)
- return ds[0]
-
- # Making sure we can call OGR routines on the Layer returned.
- lyr = get_layer()
- self.assertEqual(source.nfeat, len(lyr))
- self.assertEqual(source.gtype, lyr.geom_type.num)
-
- def test04_features(self):
- "Testing Data Source Features."
- for source in ds_list:
- ds = DataSource(source.ds)
-
- # Incrementing through each layer
- for layer in ds:
- # Incrementing through each feature in the layer
- for feat in layer:
- # Making sure the number of fields, and the geometry type
- # are what's expected.
- self.assertEqual(source.nfld, len(list(feat)))
- self.assertEqual(source.gtype, feat.geom_type)
-
- # Making sure the fields match to an appropriate OFT type.
- for k, v in source.fields.items():
- # Making sure we get the proper OGR Field instance, using
- # a string value index for the feature.
- self.assertEqual(True, isinstance(feat[k], v))
-
- # Testing Feature.__iter__
- for fld in feat: self.assertEqual(True, fld.name in source.fields.keys())
-
- def test05_geometries(self):
- "Testing Geometries from Data Source Features."
- for source in ds_list:
- ds = DataSource(source.ds)
-
- # Incrementing through each layer and feature.
- for layer in ds:
- for feat in layer:
- g = feat.geom
-
- # Making sure we get the right Geometry name & type
- self.assertEqual(source.geom, g.geom_name)
- self.assertEqual(source.gtype, g.geom_type)
-
- # Making sure the SpatialReference is as expected.
- if hasattr(source, 'srs_wkt'):
- self.assertEqual(source.srs_wkt, g.srs.wkt)
-
- def test06_spatial_filter(self):
- "Testing the Layer.spatial_filter property."
- ds = DataSource(get_ds_file('cities', 'shp'))
- lyr = ds[0]
-
- # When not set, it should be None.
- self.assertEqual(None, lyr.spatial_filter)
-
- # Must be set a/an OGRGeometry or 4-tuple.
- self.assertRaises(TypeError, lyr._set_spatial_filter, 'foo')
-
- # Setting the spatial filter with a tuple/list with the extent of
- # a buffer centering around Pueblo.
- self.assertRaises(ValueError, lyr._set_spatial_filter, range(5))
- filter_extent = (-105.609252, 37.255001, -103.609252, 39.255001)
- lyr.spatial_filter = (-105.609252, 37.255001, -103.609252, 39.255001)
- self.assertEqual(OGRGeometry.from_bbox(filter_extent), lyr.spatial_filter)
- feats = [feat for feat in lyr]
- self.assertEqual(1, len(feats))
- self.assertEqual('Pueblo', feats[0].get('Name'))
-
- # Setting the spatial filter with an OGRGeometry for buffer centering
- # around Houston.
- filter_geom = OGRGeometry('POLYGON((-96.363151 28.763374,-94.363151 28.763374,-94.363151 30.763374,-96.363151 30.763374,-96.363151 28.763374))')
- lyr.spatial_filter = filter_geom
- self.assertEqual(filter_geom, lyr.spatial_filter)
- feats = [feat for feat in lyr]
- self.assertEqual(1, len(feats))
- self.assertEqual('Houston', feats[0].get('Name'))
-
- # Clearing the spatial filter by setting it to None. Now
- # should indicate that there are 3 features in the Layer.
- lyr.spatial_filter = None
- self.assertEqual(3, len(lyr))
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(DataSourceTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/gdal/tests/test_envelope.py b/parts/django/django/contrib/gis/gdal/tests/test_envelope.py
deleted file mode 100644
index f181fa2..0000000
--- a/parts/django/django/contrib/gis/gdal/tests/test_envelope.py
+++ /dev/null
@@ -1,94 +0,0 @@
-import unittest
-from django.contrib.gis.gdal import Envelope, OGRException
-
-class TestPoint(object):
- def __init__(self, x, y):
- self.x = x
- self.y = y
-
-class EnvelopeTest(unittest.TestCase):
-
- def setUp(self):
- self.e = Envelope(0, 0, 5, 5)
-
- def test01_init(self):
- "Testing Envelope initilization."
- e1 = Envelope((0, 0, 5, 5))
- e2 = Envelope(0, 0, 5, 5)
- e3 = Envelope(0, '0', '5', 5) # Thanks to ww for this
- e4 = Envelope(e1._envelope)
- self.assertRaises(OGRException, Envelope, (5, 5, 0, 0))
- self.assertRaises(OGRException, Envelope, 5, 5, 0, 0)
- self.assertRaises(OGRException, Envelope, (0, 0, 5, 5, 3))
- self.assertRaises(OGRException, Envelope, ())
- self.assertRaises(ValueError, Envelope, 0, 'a', 5, 5)
- self.assertRaises(TypeError, Envelope, u'foo')
- self.assertRaises(OGRException, Envelope, (1, 1, 0, 0))
- try:
- Envelope(0, 0, 0, 0)
- except OGRException:
- self.fail("shouldn't raise an exception for min_x == max_x or min_y == max_y")
-
- def test02_properties(self):
- "Testing Envelope properties."
- e = Envelope(0, 0, 2, 3)
- self.assertEqual(0, e.min_x)
- self.assertEqual(0, e.min_y)
- self.assertEqual(2, e.max_x)
- self.assertEqual(3, e.max_y)
- self.assertEqual((0, 0), e.ll)
- self.assertEqual((2, 3), e.ur)
- self.assertEqual((0, 0, 2, 3), e.tuple)
- self.assertEqual('POLYGON((0.0 0.0,0.0 3.0,2.0 3.0,2.0 0.0,0.0 0.0))', e.wkt)
- self.assertEqual('(0.0, 0.0, 2.0, 3.0)', str(e))
-
- def test03_equivalence(self):
- "Testing Envelope equivalence."
- e1 = Envelope(0.523, 0.217, 253.23, 523.69)
- e2 = Envelope((0.523, 0.217, 253.23, 523.69))
- self.assertEqual(e1, e2)
- self.assertEqual((0.523, 0.217, 253.23, 523.69), e1)
-
- def test04_expand_to_include_pt_2_params(self):
- "Testing Envelope expand_to_include -- point as two parameters."
- self.e.expand_to_include(2, 6)
- self.assertEqual((0, 0, 5, 6), self.e)
- self.e.expand_to_include(-1, -1)
- self.assertEqual((-1, -1, 5, 6), self.e)
-
- def test05_expand_to_include_pt_2_tuple(self):
- "Testing Envelope expand_to_include -- point as a single 2-tuple parameter."
- self.e.expand_to_include((10, 10))
- self.assertEqual((0, 0, 10, 10), self.e)
- self.e.expand_to_include((-10, -10))
- self.assertEqual((-10, -10, 10, 10), self.e)
-
- def test06_expand_to_include_extent_4_params(self):
- "Testing Envelope expand_to_include -- extent as 4 parameters."
- self.e.expand_to_include(-1, 1, 3, 7)
- self.assertEqual((-1, 0, 5, 7), self.e)
-
- def test06_expand_to_include_extent_4_tuple(self):
- "Testing Envelope expand_to_include -- extent as a single 4-tuple parameter."
- self.e.expand_to_include((-1, 1, 3, 7))
- self.assertEqual((-1, 0, 5, 7), self.e)
-
- def test07_expand_to_include_envelope(self):
- "Testing Envelope expand_to_include with Envelope as parameter."
- self.e.expand_to_include(Envelope(-1, 1, 3, 7))
- self.assertEqual((-1, 0, 5, 7), self.e)
-
- def test08_expand_to_include_point(self):
- "Testing Envelope expand_to_include with Point as parameter."
- self.e.expand_to_include(TestPoint(-1, 1))
- self.assertEqual((-1, 0, 5, 5), self.e)
- self.e.expand_to_include(TestPoint(10, 10))
- self.assertEqual((-1, 0, 10, 10), self.e)
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(EnvelopeTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/gdal/tests/test_geom.py b/parts/django/django/contrib/gis/gdal/tests/test_geom.py
deleted file mode 100644
index f3d1ffb..0000000
--- a/parts/django/django/contrib/gis/gdal/tests/test_geom.py
+++ /dev/null
@@ -1,490 +0,0 @@
-import unittest
-from django.contrib.gis.gdal import OGRGeometry, OGRGeomType, \
- OGRException, OGRIndexError, SpatialReference, CoordTransform, \
- gdal_version
-from django.contrib.gis.geometry.test_data import TestDataMixin
-
-class OGRGeomTest(unittest.TestCase, TestDataMixin):
- "This tests the OGR Geometry."
-
- def test00a_geomtype(self):
- "Testing OGRGeomType object."
-
- # OGRGeomType should initialize on all these inputs.
- try:
- g = OGRGeomType(1)
- g = OGRGeomType(7)
- g = OGRGeomType('point')
- g = OGRGeomType('GeometrycollectioN')
- g = OGRGeomType('LINearrING')
- g = OGRGeomType('Unknown')
- except:
- self.fail('Could not create an OGRGeomType object!')
-
- # Should throw TypeError on this input
- self.assertRaises(OGRException, OGRGeomType, 23)
- self.assertRaises(OGRException, OGRGeomType, 'fooD')
- self.assertRaises(OGRException, OGRGeomType, 9)
-
- # Equivalence can take strings, ints, and other OGRGeomTypes
- self.assertEqual(True, OGRGeomType(1) == OGRGeomType(1))
- self.assertEqual(True, OGRGeomType(7) == 'GeometryCollection')
- self.assertEqual(True, OGRGeomType('point') == 'POINT')
- self.assertEqual(False, OGRGeomType('point') == 2)
- self.assertEqual(True, OGRGeomType('unknown') == 0)
- self.assertEqual(True, OGRGeomType(6) == 'MULtiPolyGON')
- self.assertEqual(False, OGRGeomType(1) != OGRGeomType('point'))
- self.assertEqual(True, OGRGeomType('POINT') != OGRGeomType(6))
-
- # Testing the Django field name equivalent property.
- self.assertEqual('PointField', OGRGeomType('Point').django)
- self.assertEqual('GeometryField', OGRGeomType('Unknown').django)
- self.assertEqual(None, OGRGeomType('none').django)
-
- # 'Geometry' initialization implies an unknown geometry type.
- gt = OGRGeomType('Geometry')
- self.assertEqual(0, gt.num)
- self.assertEqual('Unknown', gt.name)
-
- def test00b_geomtype_25d(self):
- "Testing OGRGeomType object with 25D types."
- wkb25bit = OGRGeomType.wkb25bit
- self.failUnless(OGRGeomType(wkb25bit + 1) == 'Point25D')
- self.failUnless(OGRGeomType('MultiLineString25D') == (5 + wkb25bit))
- self.assertEqual('GeometryCollectionField', OGRGeomType('GeometryCollection25D').django)
-
- def test01a_wkt(self):
- "Testing WKT output."
- for g in self.geometries.wkt_out:
- geom = OGRGeometry(g.wkt)
- self.assertEqual(g.wkt, geom.wkt)
-
- def test01a_ewkt(self):
- "Testing EWKT input/output."
- for ewkt_val in ('POINT (1 2 3)', 'LINEARRING (0 0,1 1,2 1,0 0)'):
- # First with ewkt output when no SRID in EWKT
- self.assertEqual(ewkt_val, OGRGeometry(ewkt_val).ewkt)
- # No test consumption with an SRID specified.
- ewkt_val = 'SRID=4326;%s' % ewkt_val
- geom = OGRGeometry(ewkt_val)
- self.assertEqual(ewkt_val, geom.ewkt)
- self.assertEqual(4326, geom.srs.srid)
-
- def test01b_gml(self):
- "Testing GML output."
- for g in self.geometries.wkt_out:
- geom = OGRGeometry(g.wkt)
- self.assertEqual(g.gml, geom.gml)
-
- def test01c_hex(self):
- "Testing HEX input/output."
- for g in self.geometries.hex_wkt:
- geom1 = OGRGeometry(g.wkt)
- self.assertEqual(g.hex, geom1.hex)
- # Constructing w/HEX
- geom2 = OGRGeometry(g.hex)
- self.assertEqual(geom1, geom2)
-
- def test01d_wkb(self):
- "Testing WKB input/output."
- from binascii import b2a_hex
- for g in self.geometries.hex_wkt:
- geom1 = OGRGeometry(g.wkt)
- wkb = geom1.wkb
- self.assertEqual(b2a_hex(wkb).upper(), g.hex)
- # Constructing w/WKB.
- geom2 = OGRGeometry(wkb)
- self.assertEqual(geom1, geom2)
-
- def test01e_json(self):
- "Testing GeoJSON input/output."
- from django.contrib.gis.gdal.prototypes.geom import GEOJSON
- if not GEOJSON: return
- for g in self.geometries.json_geoms:
- geom = OGRGeometry(g.wkt)
- if not hasattr(g, 'not_equal'):
- self.assertEqual(g.json, geom.json)
- self.assertEqual(g.json, geom.geojson)
- self.assertEqual(OGRGeometry(g.wkt), OGRGeometry(geom.json))
-
- def test02_points(self):
- "Testing Point objects."
-
- prev = OGRGeometry('POINT(0 0)')
- for p in self.geometries.points:
- if not hasattr(p, 'z'): # No 3D
- pnt = OGRGeometry(p.wkt)
- self.assertEqual(1, pnt.geom_type)
- self.assertEqual('POINT', pnt.geom_name)
- self.assertEqual(p.x, pnt.x)
- self.assertEqual(p.y, pnt.y)
- self.assertEqual((p.x, p.y), pnt.tuple)
-
- def test03_multipoints(self):
- "Testing MultiPoint objects."
- for mp in self.geometries.multipoints:
- mgeom1 = OGRGeometry(mp.wkt) # First one from WKT
- self.assertEqual(4, mgeom1.geom_type)
- self.assertEqual('MULTIPOINT', mgeom1.geom_name)
- mgeom2 = OGRGeometry('MULTIPOINT') # Creating empty multipoint
- mgeom3 = OGRGeometry('MULTIPOINT')
- for g in mgeom1:
- mgeom2.add(g) # adding each point from the multipoints
- mgeom3.add(g.wkt) # should take WKT as well
- self.assertEqual(mgeom1, mgeom2) # they should equal
- self.assertEqual(mgeom1, mgeom3)
- self.assertEqual(mp.coords, mgeom2.coords)
- self.assertEqual(mp.n_p, mgeom2.point_count)
-
- def test04_linestring(self):
- "Testing LineString objects."
- prev = OGRGeometry('POINT(0 0)')
- for ls in self.geometries.linestrings:
- linestr = OGRGeometry(ls.wkt)
- self.assertEqual(2, linestr.geom_type)
- self.assertEqual('LINESTRING', linestr.geom_name)
- self.assertEqual(ls.n_p, linestr.point_count)
- self.assertEqual(ls.coords, linestr.tuple)
- self.assertEqual(True, linestr == OGRGeometry(ls.wkt))
- self.assertEqual(True, linestr != prev)
- self.assertRaises(OGRIndexError, linestr.__getitem__, len(linestr))
- prev = linestr
-
- # Testing the x, y properties.
- x = [tmpx for tmpx, tmpy in ls.coords]
- y = [tmpy for tmpx, tmpy in ls.coords]
- self.assertEqual(x, linestr.x)
- self.assertEqual(y, linestr.y)
-
- def test05_multilinestring(self):
- "Testing MultiLineString objects."
- prev = OGRGeometry('POINT(0 0)')
- for mls in self.geometries.multilinestrings:
- mlinestr = OGRGeometry(mls.wkt)
- self.assertEqual(5, mlinestr.geom_type)
- self.assertEqual('MULTILINESTRING', mlinestr.geom_name)
- self.assertEqual(mls.n_p, mlinestr.point_count)
- self.assertEqual(mls.coords, mlinestr.tuple)
- self.assertEqual(True, mlinestr == OGRGeometry(mls.wkt))
- self.assertEqual(True, mlinestr != prev)
- prev = mlinestr
- for ls in mlinestr:
- self.assertEqual(2, ls.geom_type)
- self.assertEqual('LINESTRING', ls.geom_name)
- self.assertRaises(OGRIndexError, mlinestr.__getitem__, len(mlinestr))
-
- def test06_linearring(self):
- "Testing LinearRing objects."
- prev = OGRGeometry('POINT(0 0)')
- for rr in self.geometries.linearrings:
- lr = OGRGeometry(rr.wkt)
- #self.assertEqual(101, lr.geom_type.num)
- self.assertEqual('LINEARRING', lr.geom_name)
- self.assertEqual(rr.n_p, len(lr))
- self.assertEqual(True, lr == OGRGeometry(rr.wkt))
- self.assertEqual(True, lr != prev)
- prev = lr
-
- def test07a_polygons(self):
- "Testing Polygon objects."
-
- # Testing `from_bbox` class method
- bbox = (-180,-90,180,90)
- p = OGRGeometry.from_bbox( bbox )
- self.assertEqual(bbox, p.extent)
-
- prev = OGRGeometry('POINT(0 0)')
- for p in self.geometries.polygons:
- poly = OGRGeometry(p.wkt)
- self.assertEqual(3, poly.geom_type)
- self.assertEqual('POLYGON', poly.geom_name)
- self.assertEqual(p.n_p, poly.point_count)
- self.assertEqual(p.n_i + 1, len(poly))
-
- # Testing area & centroid.
- self.assertAlmostEqual(p.area, poly.area, 9)
- x, y = poly.centroid.tuple
- self.assertAlmostEqual(p.centroid[0], x, 9)
- self.assertAlmostEqual(p.centroid[1], y, 9)
-
- # Testing equivalence
- self.assertEqual(True, poly == OGRGeometry(p.wkt))
- self.assertEqual(True, poly != prev)
-
- if p.ext_ring_cs:
- ring = poly[0]
- self.assertEqual(p.ext_ring_cs, ring.tuple)
- self.assertEqual(p.ext_ring_cs, poly[0].tuple)
- self.assertEqual(len(p.ext_ring_cs), ring.point_count)
-
- for r in poly:
- self.assertEqual('LINEARRING', r.geom_name)
-
- def test07b_closepolygons(self):
- "Testing closing Polygon objects."
- # Both rings in this geometry are not closed.
- poly = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5), (1 1, 2 1, 2 2, 2 1))')
- self.assertEqual(8, poly.point_count)
- print "\nBEGIN - expecting IllegalArgumentException; safe to ignore.\n"
- try:
- c = poly.centroid
- except OGRException:
- # Should raise an OGR exception, rings are not closed
- pass
- else:
- self.fail('Should have raised an OGRException!')
- print "\nEND - expecting IllegalArgumentException; safe to ignore.\n"
-
- # Closing the rings -- doesn't work on GDAL versions 1.4.1 and below:
- # http://trac.osgeo.org/gdal/ticket/1673
- major, minor1, minor2 = gdal_version().split('.')
- if major == '1':
- iminor1 = int(minor1)
- if iminor1 < 4 or (iminor1 == 4 and minor2.startswith('1')): return
- poly.close_rings()
- self.assertEqual(10, poly.point_count) # Two closing points should've been added
- self.assertEqual(OGRGeometry('POINT(2.5 2.5)'), poly.centroid)
-
- def test08_multipolygons(self):
- "Testing MultiPolygon objects."
- prev = OGRGeometry('POINT(0 0)')
- for mp in self.geometries.multipolygons:
- mpoly = OGRGeometry(mp.wkt)
- self.assertEqual(6, mpoly.geom_type)
- self.assertEqual('MULTIPOLYGON', mpoly.geom_name)
- if mp.valid:
- self.assertEqual(mp.n_p, mpoly.point_count)
- self.assertEqual(mp.num_geom, len(mpoly))
- self.assertRaises(OGRIndexError, mpoly.__getitem__, len(mpoly))
- for p in mpoly:
- self.assertEqual('POLYGON', p.geom_name)
- self.assertEqual(3, p.geom_type)
- self.assertEqual(mpoly.wkt, OGRGeometry(mp.wkt).wkt)
-
- def test09a_srs(self):
- "Testing OGR Geometries with Spatial Reference objects."
- for mp in self.geometries.multipolygons:
- # Creating a geometry w/spatial reference
- sr = SpatialReference('WGS84')
- mpoly = OGRGeometry(mp.wkt, sr)
- self.assertEqual(sr.wkt, mpoly.srs.wkt)
-
- # Ensuring that SRS is propagated to clones.
- klone = mpoly.clone()
- self.assertEqual(sr.wkt, klone.srs.wkt)
-
- # Ensuring all children geometries (polygons and their rings) all
- # return the assigned spatial reference as well.
- for poly in mpoly:
- self.assertEqual(sr.wkt, poly.srs.wkt)
- for ring in poly:
- self.assertEqual(sr.wkt, ring.srs.wkt)
-
- # Ensuring SRS propagate in topological ops.
- a = OGRGeometry(self.geometries.topology_geoms[0].wkt_a, sr)
- b = OGRGeometry(self.geometries.topology_geoms[0].wkt_b, sr)
- diff = a.difference(b)
- union = a.union(b)
- self.assertEqual(sr.wkt, diff.srs.wkt)
- self.assertEqual(sr.srid, union.srs.srid)
-
- # Instantiating w/an integer SRID
- mpoly = OGRGeometry(mp.wkt, 4326)
- self.assertEqual(4326, mpoly.srid)
- mpoly.srs = SpatialReference(4269)
- self.assertEqual(4269, mpoly.srid)
- self.assertEqual('NAD83', mpoly.srs.name)
-
- # Incrementing through the multipolyogn after the spatial reference
- # has been re-assigned.
- for poly in mpoly:
- self.assertEqual(mpoly.srs.wkt, poly.srs.wkt)
- poly.srs = 32140
- for ring in poly:
- # Changing each ring in the polygon
- self.assertEqual(32140, ring.srs.srid)
- self.assertEqual('NAD83 / Texas South Central', ring.srs.name)
- ring.srs = str(SpatialReference(4326)) # back to WGS84
- self.assertEqual(4326, ring.srs.srid)
-
- # Using the `srid` property.
- ring.srid = 4322
- self.assertEqual('WGS 72', ring.srs.name)
- self.assertEqual(4322, ring.srid)
-
- def test09b_srs_transform(self):
- "Testing transform()."
- orig = OGRGeometry('POINT (-104.609 38.255)', 4326)
- trans = OGRGeometry('POINT (992385.4472045 481455.4944650)', 2774)
-
- # Using an srid, a SpatialReference object, and a CoordTransform object
- # or transformations.
- t1, t2, t3 = orig.clone(), orig.clone(), orig.clone()
- t1.transform(trans.srid)
- t2.transform(SpatialReference('EPSG:2774'))
- ct = CoordTransform(SpatialReference('WGS84'), SpatialReference(2774))
- t3.transform(ct)
-
- # Testing use of the `clone` keyword.
- k1 = orig.clone()
- k2 = k1.transform(trans.srid, clone=True)
- self.assertEqual(k1, orig)
- self.assertNotEqual(k1, k2)
-
- prec = 3
- for p in (t1, t2, t3, k2):
- self.assertAlmostEqual(trans.x, p.x, prec)
- self.assertAlmostEqual(trans.y, p.y, prec)
-
- def test09c_transform_dim(self):
- "Testing coordinate dimension is the same on transformed geometries."
- ls_orig = OGRGeometry('LINESTRING(-104.609 38.255)', 4326)
- ls_trans = OGRGeometry('LINESTRING(992385.4472045 481455.4944650)', 2774)
-
- prec = 3
- ls_orig.transform(ls_trans.srs)
- # Making sure the coordinate dimension is still 2D.
- self.assertEqual(2, ls_orig.coord_dim)
- self.assertAlmostEqual(ls_trans.x[0], ls_orig.x[0], prec)
- self.assertAlmostEqual(ls_trans.y[0], ls_orig.y[0], prec)
-
- def test10_difference(self):
- "Testing difference()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = OGRGeometry(self.geometries.topology_geoms[i].wkt_a)
- b = OGRGeometry(self.geometries.topology_geoms[i].wkt_b)
- d1 = OGRGeometry(self.geometries.diff_geoms[i].wkt)
- d2 = a.difference(b)
- self.assertEqual(d1, d2)
- self.assertEqual(d1, a - b) # __sub__ is difference operator
- a -= b # testing __isub__
- self.assertEqual(d1, a)
-
- def test11_intersection(self):
- "Testing intersects() and intersection()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = OGRGeometry(self.geometries.topology_geoms[i].wkt_a)
- b = OGRGeometry(self.geometries.topology_geoms[i].wkt_b)
- i1 = OGRGeometry(self.geometries.intersect_geoms[i].wkt)
- self.assertEqual(True, a.intersects(b))
- i2 = a.intersection(b)
- self.assertEqual(i1, i2)
- self.assertEqual(i1, a & b) # __and__ is intersection operator
- a &= b # testing __iand__
- self.assertEqual(i1, a)
-
- def test12_symdifference(self):
- "Testing sym_difference()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = OGRGeometry(self.geometries.topology_geoms[i].wkt_a)
- b = OGRGeometry(self.geometries.topology_geoms[i].wkt_b)
- d1 = OGRGeometry(self.geometries.sdiff_geoms[i].wkt)
- d2 = a.sym_difference(b)
- self.assertEqual(d1, d2)
- self.assertEqual(d1, a ^ b) # __xor__ is symmetric difference operator
- a ^= b # testing __ixor__
- self.assertEqual(d1, a)
-
- def test13_union(self):
- "Testing union()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = OGRGeometry(self.geometries.topology_geoms[i].wkt_a)
- b = OGRGeometry(self.geometries.topology_geoms[i].wkt_b)
- u1 = OGRGeometry(self.geometries.union_geoms[i].wkt)
- u2 = a.union(b)
- self.assertEqual(u1, u2)
- self.assertEqual(u1, a | b) # __or__ is union operator
- a |= b # testing __ior__
- self.assertEqual(u1, a)
-
- def test14_add(self):
- "Testing GeometryCollection.add()."
- # Can't insert a Point into a MultiPolygon.
- mp = OGRGeometry('MultiPolygon')
- pnt = OGRGeometry('POINT(5 23)')
- self.assertRaises(OGRException, mp.add, pnt)
-
- # GeometryCollection.add may take an OGRGeometry (if another collection
- # of the same type all child geoms will be added individually) or WKT.
- for mp in self.geometries.multipolygons:
- mpoly = OGRGeometry(mp.wkt)
- mp1 = OGRGeometry('MultiPolygon')
- mp2 = OGRGeometry('MultiPolygon')
- mp3 = OGRGeometry('MultiPolygon')
-
- for poly in mpoly:
- mp1.add(poly) # Adding a geometry at a time
- mp2.add(poly.wkt) # Adding WKT
- mp3.add(mpoly) # Adding a MultiPolygon's entire contents at once.
- for tmp in (mp1, mp2, mp3): self.assertEqual(mpoly, tmp)
-
- def test15_extent(self):
- "Testing `extent` property."
- # The xmin, ymin, xmax, ymax of the MultiPoint should be returned.
- mp = OGRGeometry('MULTIPOINT(5 23, 0 0, 10 50)')
- self.assertEqual((0.0, 0.0, 10.0, 50.0), mp.extent)
- # Testing on the 'real world' Polygon.
- poly = OGRGeometry(self.geometries.polygons[3].wkt)
- ring = poly.shell
- x, y = ring.x, ring.y
- xmin, ymin = min(x), min(y)
- xmax, ymax = max(x), max(y)
- self.assertEqual((xmin, ymin, xmax, ymax), poly.extent)
-
- def test16_25D(self):
- "Testing 2.5D geometries."
- pnt_25d = OGRGeometry('POINT(1 2 3)')
- self.assertEqual('Point25D', pnt_25d.geom_type.name)
- self.assertEqual(3.0, pnt_25d.z)
- self.assertEqual(3, pnt_25d.coord_dim)
- ls_25d = OGRGeometry('LINESTRING(1 1 1,2 2 2,3 3 3)')
- self.assertEqual('LineString25D', ls_25d.geom_type.name)
- self.assertEqual([1.0, 2.0, 3.0], ls_25d.z)
- self.assertEqual(3, ls_25d.coord_dim)
-
- def test17_pickle(self):
- "Testing pickle support."
- import cPickle
- g1 = OGRGeometry('LINESTRING(1 1 1,2 2 2,3 3 3)', 'WGS84')
- g2 = cPickle.loads(cPickle.dumps(g1))
- self.assertEqual(g1, g2)
- self.assertEqual(4326, g2.srs.srid)
- self.assertEqual(g1.srs.wkt, g2.srs.wkt)
-
- def test18_ogrgeometry_transform_workaround(self):
- "Testing coordinate dimensions on geometries after transformation."
- # A bug in GDAL versions prior to 1.7 changes the coordinate
- # dimension of a geometry after it has been transformed.
- # This test ensures that the bug workarounds employed within
- # `OGRGeometry.transform` indeed work.
- wkt_2d = "MULTILINESTRING ((0 0,1 1,2 2))"
- wkt_3d = "MULTILINESTRING ((0 0 0,1 1 1,2 2 2))"
- srid = 4326
-
- # For both the 2D and 3D MultiLineString, ensure _both_ the dimension
- # of the collection and the component LineString have the expected
- # coordinate dimension after transform.
- geom = OGRGeometry(wkt_2d, srid)
- geom.transform(srid)
- self.assertEqual(2, geom.coord_dim)
- self.assertEqual(2, geom[0].coord_dim)
- self.assertEqual(wkt_2d, geom.wkt)
-
- geom = OGRGeometry(wkt_3d, srid)
- geom.transform(srid)
- self.assertEqual(3, geom.coord_dim)
- self.assertEqual(3, geom[0].coord_dim)
- self.assertEqual(wkt_3d, geom.wkt)
-
- def test19_equivalence_regression(self):
- "Testing equivalence methods with non-OGRGeometry instances."
- self.assertNotEqual(None, OGRGeometry('POINT(0 0)'))
- self.assertEqual(False, OGRGeometry('LINESTRING(0 0, 1 1)') == 3)
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(OGRGeomTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/gdal/tests/test_srs.py b/parts/django/django/contrib/gis/gdal/tests/test_srs.py
deleted file mode 100644
index 2742c7a..0000000
--- a/parts/django/django/contrib/gis/gdal/tests/test_srs.py
+++ /dev/null
@@ -1,169 +0,0 @@
-import unittest
-from django.contrib.gis.gdal import SpatialReference, CoordTransform, OGRException, SRSException
-
-class TestSRS:
- def __init__(self, wkt, **kwargs):
- self.wkt = wkt
- for key, value in kwargs.items():
- setattr(self, key, value)
-
-# Some Spatial Reference examples
-srlist = (TestSRS('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]',
- proj='+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ',
- epsg=4326, projected=False, geographic=True, local=False,
- lin_name='unknown', ang_name='degree', lin_units=1.0, ang_units=0.0174532925199,
- auth={'GEOGCS' : ('EPSG', '4326'), 'spheroid' : ('EPSG', '7030')},
- attr=(('DATUM', 'WGS_1984'), (('SPHEROID', 1), '6378137'),('primem|authority', 'EPSG'),),
- ),
- TestSRS('PROJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32140"]]',
- proj='+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs ',
- epsg=32140, projected=True, geographic=False, local=False,
- lin_name='metre', ang_name='degree', lin_units=1.0, ang_units=0.0174532925199,
- auth={'PROJCS' : ('EPSG', '32140'), 'spheroid' : ('EPSG', '7019'), 'unit' : ('EPSG', '9001'),},
- attr=(('DATUM', 'North_American_Datum_1983'),(('SPHEROID', 2), '298.257222101'),('PROJECTION','Lambert_Conformal_Conic_2SP'),),
- ),
- TestSRS('PROJCS["NAD_1983_StatePlane_Texas_South_Central_FIPS_4204_Feet",GEOGCS["GCS_North_American_1983",DATUM["North_American_Datum_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",13123333.33333333],PARAMETER["Central_Meridian",-99.0],PARAMETER["Standard_Parallel_1",28.38333333333333],PARAMETER["Standard_Parallel_2",30.28333333333334],PARAMETER["Latitude_Of_Origin",27.83333333333333],UNIT["Foot_US",0.3048006096012192]]',
- proj='+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs ',
- epsg=None, projected=True, geographic=False, local=False,
- lin_name='Foot_US', ang_name='Degree', lin_units=0.3048006096012192, ang_units=0.0174532925199,
- auth={'PROJCS' : (None, None),},
- attr=(('PROJCS|GeOgCs|spheroid', 'GRS_1980'),(('projcs', 9), 'UNIT'), (('projcs', 11), None),),
- ),
- # This is really ESRI format, not WKT -- but the import should work the same
- TestSRS('LOCAL_CS["Non-Earth (Meter)",LOCAL_DATUM["Local Datum",0],UNIT["Meter",1.0],AXIS["X",EAST],AXIS["Y",NORTH]]',
- esri=True, proj=None, epsg=None, projected=False, geographic=False, local=True,
- lin_name='Meter', ang_name='degree', lin_units=1.0, ang_units=0.0174532925199,
- attr=(('LOCAL_DATUM', 'Local Datum'), ('unit', 'Meter')),
- ),
- )
-
-# Well-Known Names
-well_known = (TestSRS('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]', wk='WGS84', name='WGS 84', attrs=(('GEOGCS|AUTHORITY', 1, '4326'), ('SPHEROID', 'WGS 84'))),
- TestSRS('GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]]', wk='WGS72', name='WGS 72', attrs=(('GEOGCS|AUTHORITY', 1, '4322'), ('SPHEROID', 'WGS 72'))),
- TestSRS('GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982138982,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]]', wk='NAD27', name='NAD27', attrs=(('GEOGCS|AUTHORITY', 1, '4267'), ('SPHEROID', 'Clarke 1866'))),
- TestSRS('GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]', wk='NAD83', name='NAD83', attrs=(('GEOGCS|AUTHORITY', 1, '4269'), ('SPHEROID', 'GRS 1980'))),
- TestSRS('PROJCS["NZGD49 / Karamea Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.28991152777778],PARAMETER["central_meridian",172.1090281944444],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","27216"]]', wk='EPSG:27216', name='NZGD49 / Karamea Circuit', attrs=(('PROJECTION','Transverse_Mercator'), ('SPHEROID', 'International 1924'))),
- )
-
-bad_srlist = ('Foobar', 'OOJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32140"]]',)
-
-class SpatialRefTest(unittest.TestCase):
-
- def test01_wkt(self):
- "Testing initialization on valid OGC WKT."
- for s in srlist:
- srs = SpatialReference(s.wkt)
-
- def test02_bad_wkt(self):
- "Testing initialization on invalid WKT."
- for bad in bad_srlist:
- try:
- srs = SpatialReference(bad)
- srs.validate()
- except (SRSException, OGRException):
- pass
- else:
- self.fail('Should not have initialized on bad WKT "%s"!')
-
- def test03_get_wkt(self):
- "Testing getting the WKT."
- for s in srlist:
- srs = SpatialReference(s.wkt)
- self.assertEqual(s.wkt, srs.wkt)
-
- def test04_proj(self):
- "Test PROJ.4 import and export."
-
- for s in srlist:
- if s.proj:
- srs1 = SpatialReference(s.wkt)
- srs2 = SpatialReference(s.proj)
- self.assertEqual(srs1.proj, srs2.proj)
-
- def test05_epsg(self):
- "Test EPSG import."
- for s in srlist:
- if s.epsg:
- srs1 = SpatialReference(s.wkt)
- srs2 = SpatialReference(s.epsg)
- srs3 = SpatialReference(str(s.epsg))
- srs4 = SpatialReference('EPSG:%d' % s.epsg)
- #self.assertEqual(srs1.wkt, srs2.wkt)
- for srs in (srs1, srs2, srs3, srs4):
- for attr, expected in s.attr:
- self.assertEqual(expected, srs[attr])
-
- def test07_boolean_props(self):
- "Testing the boolean properties."
- for s in srlist:
- srs = SpatialReference(s.wkt)
- self.assertEqual(s.projected, srs.projected)
- self.assertEqual(s.geographic, srs.geographic)
-
- def test08_angular_linear(self):
- "Testing the linear and angular units routines."
- for s in srlist:
- srs = SpatialReference(s.wkt)
- self.assertEqual(s.ang_name, srs.angular_name)
- self.assertEqual(s.lin_name, srs.linear_name)
- self.assertAlmostEqual(s.ang_units, srs.angular_units, 9)
- self.assertAlmostEqual(s.lin_units, srs.linear_units, 9)
-
- def test09_authority(self):
- "Testing the authority name & code routines."
- for s in srlist:
- if hasattr(s, 'auth'):
- srs = SpatialReference(s.wkt)
- for target, tup in s.auth.items():
- self.assertEqual(tup[0], srs.auth_name(target))
- self.assertEqual(tup[1], srs.auth_code(target))
-
- def test10_attributes(self):
- "Testing the attribute retrieval routines."
- for s in srlist:
- srs = SpatialReference(s.wkt)
- for tup in s.attr:
- att = tup[0] # Attribute to test
- exp = tup[1] # Expected result
- self.assertEqual(exp, srs[att])
-
- def test11_wellknown(self):
- "Testing Well Known Names of Spatial References."
- for s in well_known:
- srs = SpatialReference(s.wk)
- self.assertEqual(s.name, srs.name)
- for tup in s.attrs:
- if len(tup) == 2:
- key = tup[0]
- exp = tup[1]
- elif len(tup) == 3:
- key = tup[:2]
- exp = tup[2]
- self.assertEqual(srs[key], exp)
-
- def test12_coordtransform(self):
- "Testing initialization of a CoordTransform."
- target = SpatialReference('WGS84')
- for s in srlist:
- if s.proj:
- ct = CoordTransform(SpatialReference(s.wkt), target)
-
- def test13_attr_value(self):
- "Testing the attr_value() method."
- s1 = SpatialReference('WGS84')
- self.assertRaises(TypeError, s1.__getitem__, 0)
- self.assertRaises(TypeError, s1.__getitem__, ('GEOGCS', 'foo'))
- self.assertEqual('WGS 84', s1['GEOGCS'])
- self.assertEqual('WGS_1984', s1['DATUM'])
- self.assertEqual('EPSG', s1['AUTHORITY'])
- self.assertEqual(4326, int(s1['AUTHORITY', 1]))
- #for i in range(7): self.assertEqual(0, int(s1['TOWGS84', i]))
- self.assertEqual(None, s1['FOOBAR'])
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(SpatialRefTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/geometry/__init__.py b/parts/django/django/contrib/gis/geometry/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/geometry/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/geometry/backend/__init__.py b/parts/django/django/contrib/gis/geometry/backend/__init__.py
deleted file mode 100644
index d79a556..0000000
--- a/parts/django/django/contrib/gis/geometry/backend/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.utils.importlib import import_module
-
-geom_backend = getattr(settings, 'GEOMETRY_BACKEND', 'geos')
-
-try:
- module = import_module('.%s' % geom_backend, 'django.contrib.gis.geometry.backend')
-except ImportError, e:
- try:
- module = import_module(geom_backend)
- except ImportError, e_user:
- raise ImproperlyConfigured('Could not import user-defined GEOMETRY_BACKEND '
- '"%s".' % geom_backend)
-
-try:
- Geometry = module.Geometry
- GeometryException = module.GeometryException
-except AttributeError:
- raise ImproperlyConfigured('Cannot import Geometry from the "%s" '
- 'geometry backend.' % geom_backend)
diff --git a/parts/django/django/contrib/gis/geometry/backend/geos.py b/parts/django/django/contrib/gis/geometry/backend/geos.py
deleted file mode 100644
index a1ac096..0000000
--- a/parts/django/django/contrib/gis/geometry/backend/geos.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.contrib.gis.geos import \
- GEOSGeometry as Geometry, \
- GEOSException as GeometryException
diff --git a/parts/django/django/contrib/gis/geometry/regex.py b/parts/django/django/contrib/gis/geometry/regex.py
deleted file mode 100644
index 1b9e2f4..0000000
--- a/parts/django/django/contrib/gis/geometry/regex.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import re
-
-# Regular expression for recognizing HEXEWKB and WKT. A prophylactic measure
-# to prevent potentially malicious input from reaching the underlying C
-# library. Not a substitute for good Web security programming practices.
-hex_regex = re.compile(r'^[0-9A-F]+$', re.I)
-wkt_regex = re.compile(r'^(SRID=(?P<srid>\d+);)?'
- r'(?P<wkt>'
- r'(?P<type>POINT|LINESTRING|LINEARRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON|GEOMETRYCOLLECTION)'
- r'[ACEGIMLONPSRUTYZ\d,\.\-\(\) ]+)$',
- re.I)
-json_regex = re.compile(r'^(\s+)?\{[\s\w,\[\]\{\}\-\."\':]+\}(\s+)?$')
diff --git a/parts/django/django/contrib/gis/geometry/test_data.py b/parts/django/django/contrib/gis/geometry/test_data.py
deleted file mode 100644
index 4e07348..0000000
--- a/parts/django/django/contrib/gis/geometry/test_data.py
+++ /dev/null
@@ -1,105 +0,0 @@
-"""
-This module has the mock object definitions used to hold reference geometry
-for the GEOS and GDAL tests.
-"""
-import gzip
-import os
-
-from django.contrib import gis
-from django.utils import simplejson
-
-
-# This global used to store reference geometry data.
-GEOMETRIES = None
-
-# Path where reference test data is located.
-TEST_DATA = os.path.join(os.path.dirname(gis.__file__), 'tests', 'data')
-
-
-def tuplize(seq):
- "Turn all nested sequences to tuples in given sequence."
- if isinstance(seq, (list, tuple)):
- return tuple([tuplize(i) for i in seq])
- return seq
-
-
-def strconvert(d):
- "Converts all keys in dictionary to str type."
- return dict([(str(k), v) for k, v in d.iteritems()])
-
-
-def get_ds_file(name, ext):
- return os.path.join(TEST_DATA,
- name,
- name + '.%s' % ext
- )
-
-
-class TestObj(object):
- """
- Base testing object, turns keyword args into attributes.
- """
- def __init__(self, **kwargs):
- for key, value in kwargs.items():
- setattr(self, key, value)
-
-
-class TestDS(TestObj):
- """
- Object for testing GDAL data sources.
- """
- def __init__(self, name, **kwargs):
- # Shapefile is default extension, unless specified otherwise.
- ext = kwargs.pop('ext', 'shp')
- self.ds = get_ds_file(name, ext)
- super(TestDS, self).__init__(**kwargs)
-
-
-class TestGeom(TestObj):
- """
- Testing object used for wrapping reference geometry data
- in GEOS/GDAL tests.
- """
- def __init__(self, **kwargs):
- # Converting lists to tuples of certain keyword args
- # so coordinate test cases will match (JSON has no
- # concept of tuple).
- coords = kwargs.pop('coords', None)
- if coords:
- self.coords = tuplize(coords)
-
- centroid = kwargs.pop('centroid', None)
- if centroid:
- self.centroid = tuple(centroid)
-
- ext_ring_cs = kwargs.pop('ext_ring_cs', None)
- if ext_ring_cs:
- ext_ring_cs = tuplize(ext_ring_cs)
- self.ext_ring_cs = ext_ring_cs
-
- super(TestGeom, self).__init__(**kwargs)
-
-
-class TestGeomSet(object):
- """
- Each attribute of this object is a list of `TestGeom` instances.
- """
- def __init__(self, **kwargs):
- for key, value in kwargs.items():
- setattr(self, key, [TestGeom(**strconvert(kw)) for kw in value])
-
-
-class TestDataMixin(object):
- """
- Mixin used for GEOS/GDAL test cases that defines a `geometries`
- property, which returns and/or loads the reference geometry data.
- """
- @property
- def geometries(self):
- global GEOMETRIES
- if GEOMETRIES is None:
- # Load up the test geometry data from fixture into global.
- gzf = gzip.GzipFile(os.path.join(TEST_DATA, 'geometries.json.gz'))
- geometries = simplejson.loads(gzf.read())
- GEOMETRIES = TestGeomSet(**strconvert(geometries))
- return GEOMETRIES
diff --git a/parts/django/django/contrib/gis/geos/LICENSE b/parts/django/django/contrib/gis/geos/LICENSE
deleted file mode 100644
index 0479b07..0000000
--- a/parts/django/django/contrib/gis/geos/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2007-2009 Justin Bronn
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. Neither the name of GEOSGeometry nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/parts/django/django/contrib/gis/geos/__init__.py b/parts/django/django/contrib/gis/geos/__init__.py
deleted file mode 100644
index 5885a30..0000000
--- a/parts/django/django/contrib/gis/geos/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""
-The GeoDjango GEOS module. Please consult the GeoDjango documentation
-for more details:
- http://geodjango.org/docs/geos.html
-"""
-from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex
-from django.contrib.gis.geos.point import Point
-from django.contrib.gis.geos.linestring import LineString, LinearRing
-from django.contrib.gis.geos.polygon import Polygon
-from django.contrib.gis.geos.collections import GeometryCollection, MultiPoint, MultiLineString, MultiPolygon
-from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
-from django.contrib.gis.geos.io import WKTReader, WKTWriter, WKBReader, WKBWriter
-from django.contrib.gis.geos.factory import fromfile, fromstr
-from django.contrib.gis.geos.libgeos import geos_version, geos_version_info, GEOS_PREPARE
diff --git a/parts/django/django/contrib/gis/geos/base.py b/parts/django/django/contrib/gis/geos/base.py
deleted file mode 100644
index 34c03c8..0000000
--- a/parts/django/django/contrib/gis/geos/base.py
+++ /dev/null
@@ -1,52 +0,0 @@
-from ctypes import c_void_p
-from types import NoneType
-from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
-
-# Trying to import GDAL libraries, if available. Have to place in
-# try/except since this package may be used outside GeoDjango.
-try:
- from django.contrib.gis import gdal
-except ImportError:
- # A 'dummy' gdal module.
- class GDALInfo(object):
- HAS_GDAL = False
- GEOJSON = False
- gdal = GDALInfo()
-
-# NumPy supported?
-try:
- import numpy
-except ImportError:
- numpy = False
-
-class GEOSBase(object):
- """
- Base object for GEOS objects that has a pointer access property
- that controls access to the underlying C pointer.
- """
- # Initially the pointer is NULL.
- _ptr = None
-
- # Default allowed pointer type.
- ptr_type = c_void_p
-
- # Pointer access property.
- def _get_ptr(self):
- # Raise an exception if the pointer isn't valid don't
- # want to be passing NULL pointers to routines --
- # that's very bad.
- if self._ptr: return self._ptr
- else: raise GEOSException('NULL GEOS %s pointer encountered.' % self.__class__.__name__)
-
- def _set_ptr(self, ptr):
- # Only allow the pointer to be set with pointers of the
- # compatible type or None (NULL).
- if isinstance(ptr, (self.ptr_type, NoneType)):
- self._ptr = ptr
- else:
- raise TypeError('Incompatible pointer type')
-
- # Property for controlling access to the GEOS object pointers. Using
- # this raises an exception when the pointer is NULL, thus preventing
- # the C library from attempting to access an invalid memory location.
- ptr = property(_get_ptr, _set_ptr)
diff --git a/parts/django/django/contrib/gis/geos/collections.py b/parts/django/django/contrib/gis/geos/collections.py
deleted file mode 100644
index 515f80e..0000000
--- a/parts/django/django/contrib/gis/geos/collections.py
+++ /dev/null
@@ -1,123 +0,0 @@
-"""
- This module houses the Geometry Collection objects:
- GeometryCollection, MultiPoint, MultiLineString, and MultiPolygon
-"""
-from ctypes import c_int, c_uint, byref
-from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
-from django.contrib.gis.geos.geometry import GEOSGeometry
-from django.contrib.gis.geos.libgeos import get_pointer_arr, GEOM_PTR, GEOS_PREPARE
-from django.contrib.gis.geos.linestring import LineString, LinearRing
-from django.contrib.gis.geos.point import Point
-from django.contrib.gis.geos.polygon import Polygon
-from django.contrib.gis.geos import prototypes as capi
-
-class GeometryCollection(GEOSGeometry):
- _typeid = 7
-
- def __init__(self, *args, **kwargs):
- "Initializes a Geometry Collection from a sequence of Geometry objects."
-
- # Checking the arguments
- if not args:
- raise TypeError('Must provide at least one Geometry to initialize %s.' % self.__class__.__name__)
-
- if len(args) == 1:
- # If only one geometry provided or a list of geometries is provided
- # in the first argument.
- if isinstance(args[0], (tuple, list)):
- init_geoms = args[0]
- else:
- init_geoms = args
- else:
- init_geoms = args
-
- # Ensuring that only the permitted geometries are allowed in this collection
- # this is moved to list mixin super class
- self._check_allowed(init_geoms)
-
- # Creating the geometry pointer array.
- collection = self._create_collection(len(init_geoms), iter(init_geoms))
- super(GeometryCollection, self).__init__(collection, **kwargs)
-
- def __iter__(self):
- "Iterates over each Geometry in the Collection."
- for i in xrange(len(self)):
- yield self[i]
-
- def __len__(self):
- "Returns the number of geometries in this Collection."
- return self.num_geom
-
- ### Methods for compatibility with ListMixin ###
- def _create_collection(self, length, items):
- # Creating the geometry pointer array.
- geoms = get_pointer_arr(length)
- for i, g in enumerate(items):
- # this is a little sloppy, but makes life easier
- # allow GEOSGeometry types (python wrappers) or pointer types
- geoms[i] = capi.geom_clone(getattr(g, 'ptr', g))
-
- return capi.create_collection(c_int(self._typeid), byref(geoms), c_uint(length))
-
- def _get_single_internal(self, index):
- return capi.get_geomn(self.ptr, index)
-
- def _get_single_external(self, index):
- "Returns the Geometry from this Collection at the given index (0-based)."
- # Checking the index and returning the corresponding GEOS geometry.
- return GEOSGeometry(capi.geom_clone(self._get_single_internal(index)), srid=self.srid)
-
- def _set_list(self, length, items):
- "Create a new collection, and destroy the contents of the previous pointer."
- prev_ptr = self.ptr
- srid = self.srid
- self.ptr = self._create_collection(length, items)
- if srid: self.srid = srid
- capi.destroy_geom(prev_ptr)
-
- _set_single = GEOSGeometry._set_single_rebuild
- _assign_extended_slice = GEOSGeometry._assign_extended_slice_rebuild
-
- @property
- def kml(self):
- "Returns the KML for this Geometry Collection."
- return '<MultiGeometry>%s</MultiGeometry>' % ''.join([g.kml for g in self])
-
- @property
- def tuple(self):
- "Returns a tuple of all the coordinates in this Geometry Collection"
- return tuple([g.tuple for g in self])
- coords = tuple
-
-# MultiPoint, MultiLineString, and MultiPolygon class definitions.
-class MultiPoint(GeometryCollection):
- _allowed = Point
- _typeid = 4
-
-class MultiLineString(GeometryCollection):
- _allowed = (LineString, LinearRing)
- _typeid = 5
-
- @property
- def merged(self):
- """
- Returns a LineString representing the line merge of this
- MultiLineString.
- """
- return self._topology(capi.geos_linemerge(self.ptr))
-
-class MultiPolygon(GeometryCollection):
- _allowed = Polygon
- _typeid = 6
-
- @property
- def cascaded_union(self):
- "Returns a cascaded union of this MultiPolygon."
- if GEOS_PREPARE:
- return GEOSGeometry(capi.geos_cascaded_union(self.ptr), self.srid)
- else:
- raise GEOSException('The cascaded union operation requires GEOS 3.1+.')
-
-# Setting the allowed types here since GeometryCollection is defined before
-# its subclasses.
-GeometryCollection._allowed = (Point, LineString, LinearRing, Polygon, MultiPoint, MultiLineString, MultiPolygon)
diff --git a/parts/django/django/contrib/gis/geos/coordseq.py b/parts/django/django/contrib/gis/geos/coordseq.py
deleted file mode 100644
index 027d34e..0000000
--- a/parts/django/django/contrib/gis/geos/coordseq.py
+++ /dev/null
@@ -1,156 +0,0 @@
-"""
- This module houses the GEOSCoordSeq object, which is used internally
- by GEOSGeometry to house the actual coordinates of the Point,
- LineString, and LinearRing geometries.
-"""
-from ctypes import c_double, c_uint, byref
-from django.contrib.gis.geos.base import GEOSBase, numpy
-from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
-from django.contrib.gis.geos.libgeos import CS_PTR
-from django.contrib.gis.geos import prototypes as capi
-
-class GEOSCoordSeq(GEOSBase):
- "The internal representation of a list of coordinates inside a Geometry."
-
- ptr_type = CS_PTR
-
- #### Python 'magic' routines ####
- def __init__(self, ptr, z=False):
- "Initializes from a GEOS pointer."
- if not isinstance(ptr, CS_PTR):
- raise TypeError('Coordinate sequence should initialize with a CS_PTR.')
- self._ptr = ptr
- self._z = z
-
- def __iter__(self):
- "Iterates over each point in the coordinate sequence."
- for i in xrange(self.size):
- yield self[i]
-
- def __len__(self):
- "Returns the number of points in the coordinate sequence."
- return int(self.size)
-
- def __str__(self):
- "Returns the string representation of the coordinate sequence."
- return str(self.tuple)
-
- def __getitem__(self, index):
- "Returns the coordinate sequence value at the given index."
- coords = [self.getX(index), self.getY(index)]
- if self.dims == 3 and self._z:
- coords.append(self.getZ(index))
- return tuple(coords)
-
- def __setitem__(self, index, value):
- "Sets the coordinate sequence value at the given index."
- # Checking the input value
- if isinstance(value, (list, tuple)):
- pass
- elif numpy and isinstance(value, numpy.ndarray):
- pass
- else:
- raise TypeError('Must set coordinate with a sequence (list, tuple, or numpy array).')
- # Checking the dims of the input
- if self.dims == 3 and self._z:
- n_args = 3
- set_3d = True
- else:
- n_args = 2
- set_3d = False
- if len(value) != n_args:
- raise TypeError('Dimension of value does not match.')
- # Setting the X, Y, Z
- self.setX(index, value[0])
- self.setY(index, value[1])
- if set_3d: self.setZ(index, value[2])
-
- #### Internal Routines ####
- def _checkindex(self, index):
- "Checks the given index."
- sz = self.size
- if (sz < 1) or (index < 0) or (index >= sz):
- raise GEOSIndexError('invalid GEOS Geometry index: %s' % str(index))
-
- def _checkdim(self, dim):
- "Checks the given dimension."
- if dim < 0 or dim > 2:
- raise GEOSException('invalid ordinate dimension "%d"' % dim)
-
- #### Ordinate getting and setting routines ####
- def getOrdinate(self, dimension, index):
- "Returns the value for the given dimension and index."
- self._checkindex(index)
- self._checkdim(dimension)
- return capi.cs_getordinate(self.ptr, index, dimension, byref(c_double()))
-
- def setOrdinate(self, dimension, index, value):
- "Sets the value for the given dimension and index."
- self._checkindex(index)
- self._checkdim(dimension)
- capi.cs_setordinate(self.ptr, index, dimension, value)
-
- def getX(self, index):
- "Get the X value at the index."
- return self.getOrdinate(0, index)
-
- def setX(self, index, value):
- "Set X with the value at the given index."
- self.setOrdinate(0, index, value)
-
- def getY(self, index):
- "Get the Y value at the given index."
- return self.getOrdinate(1, index)
-
- def setY(self, index, value):
- "Set Y with the value at the given index."
- self.setOrdinate(1, index, value)
-
- def getZ(self, index):
- "Get Z with the value at the given index."
- return self.getOrdinate(2, index)
-
- def setZ(self, index, value):
- "Set Z with the value at the given index."
- self.setOrdinate(2, index, value)
-
- ### Dimensions ###
- @property
- def size(self):
- "Returns the size of this coordinate sequence."
- return capi.cs_getsize(self.ptr, byref(c_uint()))
-
- @property
- def dims(self):
- "Returns the dimensions of this coordinate sequence."
- return capi.cs_getdims(self.ptr, byref(c_uint()))
-
- @property
- def hasz(self):
- """
- Returns whether this coordinate sequence is 3D. This property value is
- inherited from the parent Geometry.
- """
- return self._z
-
- ### Other Methods ###
- def clone(self):
- "Clones this coordinate sequence."
- return GEOSCoordSeq(capi.cs_clone(self.ptr), self.hasz)
-
- @property
- def kml(self):
- "Returns the KML representation for the coordinates."
- # Getting the substitution string depending on whether the coordinates have
- # a Z dimension.
- if self.hasz: substr = '%s,%s,%s '
- else: substr = '%s,%s,0 '
- return '<coordinates>%s</coordinates>' % \
- ''.join([substr % self[i] for i in xrange(len(self))]).strip()
-
- @property
- def tuple(self):
- "Returns a tuple version of this coordinate sequence."
- n = self.size
- if n == 1: return self[0]
- else: return tuple([self[i] for i in xrange(n)])
diff --git a/parts/django/django/contrib/gis/geos/error.py b/parts/django/django/contrib/gis/geos/error.py
deleted file mode 100644
index 46bdfe6..0000000
--- a/parts/django/django/contrib/gis/geos/error.py
+++ /dev/null
@@ -1,20 +0,0 @@
-"""
- This module houses the GEOS exceptions, specifically, GEOSException and
- GEOSGeometryIndexError.
-"""
-
-class GEOSException(Exception):
- "The base GEOS exception, indicates a GEOS-related error."
- pass
-
-class GEOSIndexError(GEOSException, KeyError):
- """
- This exception is raised when an invalid index is encountered, and has
- the 'silent_variable_feature' attribute set to true. This ensures that
- django's templates proceed to use the next lookup type gracefully when
- an Exception is raised. Fixes ticket #4740.
- """
- # "If, during the method lookup, a method raises an exception, the exception
- # will be propagated, unless the exception has an attribute
- # `silent_variable_failure` whose value is True." -- Django template docs.
- silent_variable_failure = True
diff --git a/parts/django/django/contrib/gis/geos/factory.py b/parts/django/django/contrib/gis/geos/factory.py
deleted file mode 100644
index df29976..0000000
--- a/parts/django/django/contrib/gis/geos/factory.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex
-
-def fromfile(file_h):
- """
- Given a string file name, returns a GEOSGeometry. The file may contain WKB,
- WKT, or HEX.
- """
- # If given a file name, get a real handle.
- if isinstance(file_h, basestring):
- file_h = open(file_h, 'rb')
-
- # Reading in the file's contents,
- buf = file_h.read()
-
- # If we get WKB need to wrap in buffer(), so run through regexes.
- if wkt_regex.match(buf) or hex_regex.match(buf):
- return GEOSGeometry(buf)
- else:
- return GEOSGeometry(buffer(buf))
-
-def fromstr(string, **kwargs):
- "Given a string value, returns a GEOSGeometry object."
- return GEOSGeometry(string, **kwargs)
diff --git a/parts/django/django/contrib/gis/geos/geometry.py b/parts/django/django/contrib/gis/geos/geometry.py
deleted file mode 100644
index 51666bc..0000000
--- a/parts/django/django/contrib/gis/geos/geometry.py
+++ /dev/null
@@ -1,661 +0,0 @@
-"""
- This module contains the 'base' GEOSGeometry object -- all GEOS Geometries
- inherit from this object.
-"""
-# Python, ctypes and types dependencies.
-import re
-from ctypes import addressof, byref, c_double, c_size_t
-
-# super-class for mutable list behavior
-from django.contrib.gis.geos.mutable_list import ListMixin
-
-# GEOS-related dependencies.
-from django.contrib.gis.geos.base import GEOSBase, gdal
-from django.contrib.gis.geos.coordseq import GEOSCoordSeq
-from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
-from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOS_PREPARE
-from django.contrib.gis.geos.mutable_list import ListMixin
-
-# All other functions in this module come from the ctypes
-# prototypes module -- which handles all interaction with
-# the underlying GEOS library.
-from django.contrib.gis.geos import prototypes as capi
-
-# These functions provide access to a thread-local instance
-# of their corresponding GEOS I/O class.
-from django.contrib.gis.geos.prototypes.io import wkt_r, wkt_w, wkb_r, wkb_w, ewkb_w, ewkb_w3d
-
-# For recognizing geometry input.
-from django.contrib.gis.geometry.regex import hex_regex, wkt_regex, json_regex
-
-class GEOSGeometry(GEOSBase, ListMixin):
- "A class that, generally, encapsulates a GEOS geometry."
-
- # Raise GEOSIndexError instead of plain IndexError
- # (see ticket #4740 and GEOSIndexError docstring)
- _IndexError = GEOSIndexError
-
- ptr_type = GEOM_PTR
-
- #### Python 'magic' routines ####
- def __init__(self, geo_input, srid=None):
- """
- The base constructor for GEOS geometry objects, and may take the
- following inputs:
-
- * strings:
- - WKT
- - HEXEWKB (a PostGIS-specific canonical form)
- - GeoJSON (requires GDAL)
- * buffer:
- - WKB
-
- The `srid` keyword is used to specify the Source Reference Identifier
- (SRID) number for this Geometry. If not set, the SRID will be None.
- """
- if isinstance(geo_input, basestring):
- if isinstance(geo_input, unicode):
- # Encoding to ASCII, WKT or HEXEWKB doesn't need any more.
- geo_input = geo_input.encode('ascii')
-
- wkt_m = wkt_regex.match(geo_input)
- if wkt_m:
- # Handling WKT input.
- if wkt_m.group('srid'): srid = int(wkt_m.group('srid'))
- g = wkt_r().read(wkt_m.group('wkt'))
- elif hex_regex.match(geo_input):
- # Handling HEXEWKB input.
- g = wkb_r().read(geo_input)
- elif gdal.GEOJSON and json_regex.match(geo_input):
- # Handling GeoJSON input.
- g = wkb_r().read(gdal.OGRGeometry(geo_input).wkb)
- else:
- raise ValueError('String or unicode input unrecognized as WKT EWKT, and HEXEWKB.')
- elif isinstance(geo_input, GEOM_PTR):
- # When the input is a pointer to a geomtry (GEOM_PTR).
- g = geo_input
- elif isinstance(geo_input, buffer):
- # When the input is a buffer (WKB).
- g = wkb_r().read(geo_input)
- elif isinstance(geo_input, GEOSGeometry):
- g = capi.geom_clone(geo_input.ptr)
- else:
- # Invalid geometry type.
- raise TypeError('Improper geometry input type: %s' % str(type(geo_input)))
-
- if bool(g):
- # Setting the pointer object with a valid pointer.
- self.ptr = g
- else:
- raise GEOSException('Could not initialize GEOS Geometry with given input.')
-
- # Post-initialization setup.
- self._post_init(srid)
-
- def _post_init(self, srid):
- "Helper routine for performing post-initialization setup."
- # Setting the SRID, if given.
- if srid and isinstance(srid, int): self.srid = srid
-
- # Setting the class type (e.g., Point, Polygon, etc.)
- self.__class__ = GEOS_CLASSES[self.geom_typeid]
-
- # Setting the coordinate sequence for the geometry (will be None on
- # geometries that do not have coordinate sequences)
- self._set_cs()
-
- def __del__(self):
- """
- Destroys this Geometry; in other words, frees the memory used by the
- GEOS C++ object.
- """
- if self._ptr: capi.destroy_geom(self._ptr)
-
- def __copy__(self):
- """
- Returns a clone because the copy of a GEOSGeometry may contain an
- invalid pointer location if the original is garbage collected.
- """
- return self.clone()
-
- def __deepcopy__(self, memodict):
- """
- The `deepcopy` routine is used by the `Node` class of django.utils.tree;
- thus, the protocol routine needs to be implemented to return correct
- copies (clones) of these GEOS objects, which use C pointers.
- """
- return self.clone()
-
- def __str__(self):
- "WKT is used for the string representation."
- return self.wkt
-
- def __repr__(self):
- "Short-hand representation because WKT may be very large."
- return '<%s object at %s>' % (self.geom_type, hex(addressof(self.ptr)))
-
- # Pickling support
- def __getstate__(self):
- # The pickled state is simply a tuple of the WKB (in string form)
- # and the SRID.
- return str(self.wkb), self.srid
-
- def __setstate__(self, state):
- # Instantiating from the tuple state that was pickled.
- wkb, srid = state
- ptr = wkb_r().read(buffer(wkb))
- if not ptr: raise GEOSException('Invalid Geometry loaded from pickled state.')
- self.ptr = ptr
- self._post_init(srid)
-
- # Comparison operators
- def __eq__(self, other):
- """
- Equivalence testing, a Geometry may be compared with another Geometry
- or a WKT representation.
- """
- if isinstance(other, basestring):
- return self.wkt == other
- elif isinstance(other, GEOSGeometry):
- return self.equals_exact(other)
- else:
- return False
-
- def __ne__(self, other):
- "The not equals operator."
- return not (self == other)
-
- ### Geometry set-like operations ###
- # Thanks to Sean Gillies for inspiration:
- # http://lists.gispython.org/pipermail/community/2007-July/001034.html
- # g = g1 | g2
- def __or__(self, other):
- "Returns the union of this Geometry and the other."
- return self.union(other)
-
- # g = g1 & g2
- def __and__(self, other):
- "Returns the intersection of this Geometry and the other."
- return self.intersection(other)
-
- # g = g1 - g2
- def __sub__(self, other):
- "Return the difference this Geometry and the other."
- return self.difference(other)
-
- # g = g1 ^ g2
- def __xor__(self, other):
- "Return the symmetric difference of this Geometry and the other."
- return self.sym_difference(other)
-
- #### Coordinate Sequence Routines ####
- @property
- def has_cs(self):
- "Returns True if this Geometry has a coordinate sequence, False if not."
- # Only these geometries are allowed to have coordinate sequences.
- if isinstance(self, (Point, LineString, LinearRing)):
- return True
- else:
- return False
-
- def _set_cs(self):
- "Sets the coordinate sequence for this Geometry."
- if self.has_cs:
- self._cs = GEOSCoordSeq(capi.get_cs(self.ptr), self.hasz)
- else:
- self._cs = None
-
- @property
- def coord_seq(self):
- "Returns a clone of the coordinate sequence for this Geometry."
- if self.has_cs:
- return self._cs.clone()
-
- #### Geometry Info ####
- @property
- def geom_type(self):
- "Returns a string representing the Geometry type, e.g. 'Polygon'"
- return capi.geos_type(self.ptr)
-
- @property
- def geom_typeid(self):
- "Returns an integer representing the Geometry type."
- return capi.geos_typeid(self.ptr)
-
- @property
- def num_geom(self):
- "Returns the number of geometries in the Geometry."
- return capi.get_num_geoms(self.ptr)
-
- @property
- def num_coords(self):
- "Returns the number of coordinates in the Geometry."
- return capi.get_num_coords(self.ptr)
-
- @property
- def num_points(self):
- "Returns the number points, or coordinates, in the Geometry."
- return self.num_coords
-
- @property
- def dims(self):
- "Returns the dimension of this Geometry (0=point, 1=line, 2=surface)."
- return capi.get_dims(self.ptr)
-
- def normalize(self):
- "Converts this Geometry to normal form (or canonical form)."
- return capi.geos_normalize(self.ptr)
-
- #### Unary predicates ####
- @property
- def empty(self):
- """
- Returns a boolean indicating whether the set of points in this Geometry
- are empty.
- """
- return capi.geos_isempty(self.ptr)
-
- @property
- def hasz(self):
- "Returns whether the geometry has a 3D dimension."
- return capi.geos_hasz(self.ptr)
-
- @property
- def ring(self):
- "Returns whether or not the geometry is a ring."
- return capi.geos_isring(self.ptr)
-
- @property
- def simple(self):
- "Returns false if the Geometry not simple."
- return capi.geos_issimple(self.ptr)
-
- @property
- def valid(self):
- "This property tests the validity of this Geometry."
- return capi.geos_isvalid(self.ptr)
-
- #### Binary predicates. ####
- def contains(self, other):
- "Returns true if other.within(this) returns true."
- return capi.geos_contains(self.ptr, other.ptr)
-
- def crosses(self, other):
- """
- Returns true if the DE-9IM intersection matrix for the two Geometries
- is T*T****** (for a point and a curve,a point and an area or a line and
- an area) 0******** (for two curves).
- """
- return capi.geos_crosses(self.ptr, other.ptr)
-
- def disjoint(self, other):
- """
- Returns true if the DE-9IM intersection matrix for the two Geometries
- is FF*FF****.
- """
- return capi.geos_disjoint(self.ptr, other.ptr)
-
- def equals(self, other):
- """
- Returns true if the DE-9IM intersection matrix for the two Geometries
- is T*F**FFF*.
- """
- return capi.geos_equals(self.ptr, other.ptr)
-
- def equals_exact(self, other, tolerance=0):
- """
- Returns true if the two Geometries are exactly equal, up to a
- specified tolerance.
- """
- return capi.geos_equalsexact(self.ptr, other.ptr, float(tolerance))
-
- def intersects(self, other):
- "Returns true if disjoint returns false."
- return capi.geos_intersects(self.ptr, other.ptr)
-
- def overlaps(self, other):
- """
- Returns true if the DE-9IM intersection matrix for the two Geometries
- is T*T***T** (for two points or two surfaces) 1*T***T** (for two curves).
- """
- return capi.geos_overlaps(self.ptr, other.ptr)
-
- def relate_pattern(self, other, pattern):
- """
- Returns true if the elements in the DE-9IM intersection matrix for the
- two Geometries match the elements in pattern.
- """
- if not isinstance(pattern, basestring) or len(pattern) > 9:
- raise GEOSException('invalid intersection matrix pattern')
- return capi.geos_relatepattern(self.ptr, other.ptr, pattern)
-
- def touches(self, other):
- """
- Returns true if the DE-9IM intersection matrix for the two Geometries
- is FT*******, F**T***** or F***T****.
- """
- return capi.geos_touches(self.ptr, other.ptr)
-
- def within(self, other):
- """
- Returns true if the DE-9IM intersection matrix for the two Geometries
- is T*F**F***.
- """
- return capi.geos_within(self.ptr, other.ptr)
-
- #### SRID Routines ####
- def get_srid(self):
- "Gets the SRID for the geometry, returns None if no SRID is set."
- s = capi.geos_get_srid(self.ptr)
- if s == 0: return None
- else: return s
-
- def set_srid(self, srid):
- "Sets the SRID for the geometry."
- capi.geos_set_srid(self.ptr, srid)
- srid = property(get_srid, set_srid)
-
- #### Output Routines ####
- @property
- def ewkt(self):
- """
- Returns the EWKT (WKT + SRID) of the Geometry. Note that Z values
- are *not* included in this representation because GEOS does not yet
- support serializing them.
- """
- if self.get_srid(): return 'SRID=%s;%s' % (self.srid, self.wkt)
- else: return self.wkt
-
- @property
- def wkt(self):
- "Returns the WKT (Well-Known Text) representation of this Geometry."
- return wkt_w().write(self)
-
- @property
- def hex(self):
- """
- Returns the WKB of this Geometry in hexadecimal form. Please note
- that the SRID and Z values are not included in this representation
- because it is not a part of the OGC specification (use the `hexewkb`
- property instead).
- """
- # A possible faster, all-python, implementation:
- # str(self.wkb).encode('hex')
- return wkb_w().write_hex(self)
-
- @property
- def hexewkb(self):
- """
- Returns the EWKB of this Geometry in hexadecimal form. This is an
- extension of the WKB specification that includes SRID and Z values
- that are a part of this geometry.
- """
- if self.hasz:
- if not GEOS_PREPARE:
- # See: http://trac.osgeo.org/geos/ticket/216
- raise GEOSException('Upgrade GEOS to 3.1 to get valid 3D HEXEWKB.')
- return ewkb_w3d().write_hex(self)
- else:
- return ewkb_w().write_hex(self)
-
- @property
- def json(self):
- """
- Returns GeoJSON representation of this Geometry if GDAL 1.5+
- is installed.
- """
- if gdal.GEOJSON:
- return self.ogr.json
- else:
- raise GEOSException('GeoJSON output only supported on GDAL 1.5+.')
- geojson = json
-
- @property
- def wkb(self):
- """
- Returns the WKB (Well-Known Binary) representation of this Geometry
- as a Python buffer. SRID and Z values are not included, use the
- `ewkb` property instead.
- """
- return wkb_w().write(self)
-
- @property
- def ewkb(self):
- """
- Return the EWKB representation of this Geometry as a Python buffer.
- This is an extension of the WKB specification that includes any SRID
- and Z values that are a part of this geometry.
- """
- if self.hasz:
- if not GEOS_PREPARE:
- # See: http://trac.osgeo.org/geos/ticket/216
- raise GEOSException('Upgrade GEOS to 3.1 to get valid 3D EWKB.')
- return ewkb_w3d().write(self)
- else:
- return ewkb_w().write(self)
-
- @property
- def kml(self):
- "Returns the KML representation of this Geometry."
- gtype = self.geom_type
- return '<%s>%s</%s>' % (gtype, self.coord_seq.kml, gtype)
-
- @property
- def prepared(self):
- """
- Returns a PreparedGeometry corresponding to this geometry -- it is
- optimized for the contains, intersects, and covers operations.
- """
- if GEOS_PREPARE:
- return PreparedGeometry(self)
- else:
- raise GEOSException('GEOS 3.1+ required for prepared geometry support.')
-
- #### GDAL-specific output routines ####
- @property
- def ogr(self):
- "Returns the OGR Geometry for this Geometry."
- if gdal.HAS_GDAL:
- if self.srid:
- return gdal.OGRGeometry(self.wkb, self.srid)
- else:
- return gdal.OGRGeometry(self.wkb)
- else:
- raise GEOSException('GDAL required to convert to an OGRGeometry.')
-
- @property
- def srs(self):
- "Returns the OSR SpatialReference for SRID of this Geometry."
- if gdal.HAS_GDAL:
- if self.srid:
- return gdal.SpatialReference(self.srid)
- else:
- return None
- else:
- raise GEOSException('GDAL required to return a SpatialReference object.')
-
- @property
- def crs(self):
- "Alias for `srs` property."
- return self.srs
-
- def transform(self, ct, clone=False):
- """
- Requires GDAL. Transforms the geometry according to the given
- transformation object, which may be an integer SRID, and WKT or
- PROJ.4 string. By default, the geometry is transformed in-place and
- nothing is returned. However if the `clone` keyword is set, then this
- geometry will not be modified and a transformed clone will be returned
- instead.
- """
- srid = self.srid
- if gdal.HAS_GDAL and srid:
- # Creating an OGR Geometry, which is then transformed.
- g = gdal.OGRGeometry(self.wkb, srid)
- g.transform(ct)
- # Getting a new GEOS pointer
- ptr = wkb_r().read(g.wkb)
- if clone:
- # User wants a cloned transformed geometry returned.
- return GEOSGeometry(ptr, srid=g.srid)
- if ptr:
- # Reassigning pointer, and performing post-initialization setup
- # again due to the reassignment.
- capi.destroy_geom(self.ptr)
- self.ptr = ptr
- self._post_init(g.srid)
- else:
- raise GEOSException('Transformed WKB was invalid.')
-
- #### Topology Routines ####
- def _topology(self, gptr):
- "Helper routine to return Geometry from the given pointer."
- return GEOSGeometry(gptr, srid=self.srid)
-
- @property
- def boundary(self):
- "Returns the boundary as a newly allocated Geometry object."
- return self._topology(capi.geos_boundary(self.ptr))
-
- def buffer(self, width, quadsegs=8):
- """
- Returns a geometry that represents all points whose distance from this
- Geometry is less than or equal to distance. Calculations are in the
- Spatial Reference System of this Geometry. The optional third parameter sets
- the number of segment used to approximate a quarter circle (defaults to 8).
- (Text from PostGIS documentation at ch. 6.1.3)
- """
- return self._topology(capi.geos_buffer(self.ptr, width, quadsegs))
-
- @property
- def centroid(self):
- """
- The centroid is equal to the centroid of the set of component Geometries
- of highest dimension (since the lower-dimension geometries contribute zero
- "weight" to the centroid).
- """
- return self._topology(capi.geos_centroid(self.ptr))
-
- @property
- def convex_hull(self):
- """
- Returns the smallest convex Polygon that contains all the points
- in the Geometry.
- """
- return self._topology(capi.geos_convexhull(self.ptr))
-
- def difference(self, other):
- """
- Returns a Geometry representing the points making up this Geometry
- that do not make up other.
- """
- return self._topology(capi.geos_difference(self.ptr, other.ptr))
-
- @property
- def envelope(self):
- "Return the envelope for this geometry (a polygon)."
- return self._topology(capi.geos_envelope(self.ptr))
-
- def intersection(self, other):
- "Returns a Geometry representing the points shared by this Geometry and other."
- return self._topology(capi.geos_intersection(self.ptr, other.ptr))
-
- @property
- def point_on_surface(self):
- "Computes an interior point of this Geometry."
- return self._topology(capi.geos_pointonsurface(self.ptr))
-
- def relate(self, other):
- "Returns the DE-9IM intersection matrix for this Geometry and the other."
- return capi.geos_relate(self.ptr, other.ptr)
-
- def simplify(self, tolerance=0.0, preserve_topology=False):
- """
- Returns the Geometry, simplified using the Douglas-Peucker algorithm
- to the specified tolerance (higher tolerance => less points). If no
- tolerance provided, defaults to 0.
-
- By default, this function does not preserve topology - e.g. polygons can
- be split, collapse to lines or disappear holes can be created or
- disappear, and lines can cross. By specifying preserve_topology=True,
- the result will have the same dimension and number of components as the
- input. This is significantly slower.
- """
- if preserve_topology:
- return self._topology(capi.geos_preservesimplify(self.ptr, tolerance))
- else:
- return self._topology(capi.geos_simplify(self.ptr, tolerance))
-
- def sym_difference(self, other):
- """
- Returns a set combining the points in this Geometry not in other,
- and the points in other not in this Geometry.
- """
- return self._topology(capi.geos_symdifference(self.ptr, other.ptr))
-
- def union(self, other):
- "Returns a Geometry representing all the points in this Geometry and other."
- return self._topology(capi.geos_union(self.ptr, other.ptr))
-
- #### Other Routines ####
- @property
- def area(self):
- "Returns the area of the Geometry."
- return capi.geos_area(self.ptr, byref(c_double()))
-
- def distance(self, other):
- """
- Returns the distance between the closest points on this Geometry
- and the other. Units will be in those of the coordinate system of
- the Geometry.
- """
- if not isinstance(other, GEOSGeometry):
- raise TypeError('distance() works only on other GEOS Geometries.')
- return capi.geos_distance(self.ptr, other.ptr, byref(c_double()))
-
- @property
- def extent(self):
- """
- Returns the extent of this geometry as a 4-tuple, consisting of
- (xmin, ymin, xmax, ymax).
- """
- env = self.envelope
- if isinstance(env, Point):
- xmin, ymin = env.tuple
- xmax, ymax = xmin, ymin
- else:
- xmin, ymin = env[0][0]
- xmax, ymax = env[0][2]
- return (xmin, ymin, xmax, ymax)
-
- @property
- def length(self):
- """
- Returns the length of this Geometry (e.g., 0 for point, or the
- circumfrence of a Polygon).
- """
- return capi.geos_length(self.ptr, byref(c_double()))
-
- def clone(self):
- "Clones this Geometry."
- return GEOSGeometry(capi.geom_clone(self.ptr), srid=self.srid)
-
-# Class mapping dictionary. Has to be at the end to avoid import
-# conflicts with GEOSGeometry.
-from django.contrib.gis.geos.linestring import LineString, LinearRing
-from django.contrib.gis.geos.point import Point
-from django.contrib.gis.geos.polygon import Polygon
-from django.contrib.gis.geos.collections import GeometryCollection, MultiPoint, MultiLineString, MultiPolygon
-GEOS_CLASSES = {0 : Point,
- 1 : LineString,
- 2 : LinearRing,
- 3 : Polygon,
- 4 : MultiPoint,
- 5 : MultiLineString,
- 6 : MultiPolygon,
- 7 : GeometryCollection,
- }
-
-# If supported, import the PreparedGeometry class.
-if GEOS_PREPARE:
- from django.contrib.gis.geos.prepared import PreparedGeometry
diff --git a/parts/django/django/contrib/gis/geos/io.py b/parts/django/django/contrib/gis/geos/io.py
deleted file mode 100644
index 54ba6b4..0000000
--- a/parts/django/django/contrib/gis/geos/io.py
+++ /dev/null
@@ -1,20 +0,0 @@
-"""
-Module that holds classes for performing I/O operations on GEOS geometry
-objects. Specifically, this has Python implementations of WKB/WKT
-reader and writer classes.
-"""
-from django.contrib.gis.geos.geometry import GEOSGeometry
-from django.contrib.gis.geos.prototypes.io import _WKTReader, _WKBReader, WKBWriter, WKTWriter
-
-# Public classes for (WKB|WKT)Reader, which return GEOSGeometry
-class WKBReader(_WKBReader):
- def read(self, wkb):
- "Returns a GEOSGeometry for the given WKB buffer."
- return GEOSGeometry(super(WKBReader, self).read(wkb))
-
-class WKTReader(_WKTReader):
- def read(self, wkt):
- "Returns a GEOSGeometry for the given WKT string."
- return GEOSGeometry(super(WKTReader, self).read(wkt))
-
-
diff --git a/parts/django/django/contrib/gis/geos/libgeos.py b/parts/django/django/contrib/gis/geos/libgeos.py
deleted file mode 100644
index 84299a0..0000000
--- a/parts/django/django/contrib/gis/geos/libgeos.py
+++ /dev/null
@@ -1,141 +0,0 @@
-"""
- This module houses the ctypes initialization procedures, as well
- as the notice and error handler function callbacks (get called
- when an error occurs in GEOS).
-
- This module also houses GEOS Pointer utilities, including
- get_pointer_arr(), and GEOM_PTR.
-"""
-import os, re, sys
-from ctypes import c_char_p, Structure, CDLL, CFUNCTYPE, POINTER
-from ctypes.util import find_library
-from django.contrib.gis.geos.error import GEOSException
-
-# Custom library path set?
-try:
- from django.conf import settings
- lib_path = settings.GEOS_LIBRARY_PATH
-except (AttributeError, EnvironmentError, ImportError):
- lib_path = None
-
-# Setting the appropriate names for the GEOS-C library.
-if lib_path:
- lib_names = None
-elif os.name == 'nt':
- # Windows NT libraries
- lib_names = ['libgeos_c-1']
-elif os.name == 'posix':
- # *NIX libraries
- lib_names = ['geos_c', 'GEOS']
-else:
- raise ImportError('Unsupported OS "%s"' % os.name)
-
-# Using the ctypes `find_library` utility to find the path to the GEOS
-# shared library. This is better than manually specifiying each library name
-# and extension (e.g., libgeos_c.[so|so.1|dylib].).
-if lib_names:
- for lib_name in lib_names:
- lib_path = find_library(lib_name)
- if not lib_path is None: break
-
-# No GEOS library could be found.
-if lib_path is None:
- raise ImportError('Could not find the GEOS library (tried "%s"). '
- 'Try setting GEOS_LIBRARY_PATH in your settings.' %
- '", "'.join(lib_names))
-
-# Getting the GEOS C library. The C interface (CDLL) is used for
-# both *NIX and Windows.
-# See the GEOS C API source code for more details on the library function calls:
-# http://geos.refractions.net/ro/doxygen_docs/html/geos__c_8h-source.html
-lgeos = CDLL(lib_path)
-
-# The notice and error handler C function callback definitions.
-# Supposed to mimic the GEOS message handler (C below):
-# typedef void (*GEOSMessageHandler)(const char *fmt, ...);
-NOTICEFUNC = CFUNCTYPE(None, c_char_p, c_char_p)
-def notice_h(fmt, lst, output_h=sys.stdout):
- try:
- warn_msg = fmt % lst
- except:
- warn_msg = fmt
- output_h.write('GEOS_NOTICE: %s\n' % warn_msg)
-notice_h = NOTICEFUNC(notice_h)
-
-ERRORFUNC = CFUNCTYPE(None, c_char_p, c_char_p)
-def error_h(fmt, lst, output_h=sys.stderr):
- try:
- err_msg = fmt % lst
- except:
- err_msg = fmt
- output_h.write('GEOS_ERROR: %s\n' % err_msg)
-error_h = ERRORFUNC(error_h)
-
-#### GEOS Geometry C data structures, and utility functions. ####
-
-# Opaque GEOS geometry structures, used for GEOM_PTR and CS_PTR
-class GEOSGeom_t(Structure): pass
-class GEOSPrepGeom_t(Structure): pass
-class GEOSCoordSeq_t(Structure): pass
-class GEOSContextHandle_t(Structure): pass
-
-# Pointers to opaque GEOS geometry structures.
-GEOM_PTR = POINTER(GEOSGeom_t)
-PREPGEOM_PTR = POINTER(GEOSPrepGeom_t)
-CS_PTR = POINTER(GEOSCoordSeq_t)
-CONTEXT_PTR = POINTER(GEOSContextHandle_t)
-
-# Used specifically by the GEOSGeom_createPolygon and GEOSGeom_createCollection
-# GEOS routines
-def get_pointer_arr(n):
- "Gets a ctypes pointer array (of length `n`) for GEOSGeom_t opaque pointer."
- GeomArr = GEOM_PTR * n
- return GeomArr()
-
-# Returns the string version of the GEOS library. Have to set the restype
-# explicitly to c_char_p to ensure compatibility accross 32 and 64-bit platforms.
-geos_version = lgeos.GEOSversion
-geos_version.argtypes = None
-geos_version.restype = c_char_p
-
-# Regular expression should be able to parse version strings such as
-# '3.0.0rc4-CAPI-1.3.3', or '3.0.0-CAPI-1.4.1'
-version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))(rc(?P<release_candidate>\d+))?-CAPI-(?P<capi_version>\d+\.\d+\.\d+)$')
-def geos_version_info():
- """
- Returns a dictionary containing the various version metadata parsed from
- the GEOS version string, including the version number, whether the version
- is a release candidate (and what number release candidate), and the C API
- version.
- """
- ver = geos_version()
- m = version_regex.match(ver)
- if not m: raise GEOSException('Could not parse version info string "%s"' % ver)
- return dict((key, m.group(key)) for key in ('version', 'release_candidate', 'capi_version', 'major', 'minor', 'subminor'))
-
-# Version numbers and whether or not prepared geometry support is available.
-_verinfo = geos_version_info()
-GEOS_MAJOR_VERSION = int(_verinfo['major'])
-GEOS_MINOR_VERSION = int(_verinfo['minor'])
-GEOS_SUBMINOR_VERSION = int(_verinfo['subminor'])
-del _verinfo
-GEOS_VERSION = (GEOS_MAJOR_VERSION, GEOS_MINOR_VERSION, GEOS_SUBMINOR_VERSION)
-GEOS_PREPARE = GEOS_VERSION >= (3, 1, 0)
-
-if GEOS_PREPARE:
- # Here we set up the prototypes for the initGEOS_r and finishGEOS_r
- # routines. These functions aren't actually called until they are
- # attached to a GEOS context handle -- this actually occurs in
- # geos/prototypes/threadsafe.py.
- lgeos.initGEOS_r.restype = CONTEXT_PTR
- lgeos.finishGEOS_r.argtypes = [CONTEXT_PTR]
-else:
- # When thread-safety isn't available, the initGEOS routine must be called
- # first. This function takes the notice and error functions, defined
- # as Python callbacks above, as parameters. Here is the C code that is
- # wrapped:
- # extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function);
- lgeos.initGEOS(notice_h, error_h)
- # Calling finishGEOS() upon exit of the interpreter.
- import atexit
- atexit.register(lgeos.finishGEOS)
diff --git a/parts/django/django/contrib/gis/geos/linestring.py b/parts/django/django/contrib/gis/geos/linestring.py
deleted file mode 100644
index ecf7741..0000000
--- a/parts/django/django/contrib/gis/geos/linestring.py
+++ /dev/null
@@ -1,152 +0,0 @@
-from django.contrib.gis.geos.base import numpy
-from django.contrib.gis.geos.coordseq import GEOSCoordSeq
-from django.contrib.gis.geos.error import GEOSException
-from django.contrib.gis.geos.geometry import GEOSGeometry
-from django.contrib.gis.geos.point import Point
-from django.contrib.gis.geos import prototypes as capi
-
-class LineString(GEOSGeometry):
- _init_func = capi.create_linestring
- _minlength = 2
-
- #### Python 'magic' routines ####
- def __init__(self, *args, **kwargs):
- """
- Initializes on the given sequence -- may take lists, tuples, NumPy arrays
- of X,Y pairs, or Point objects. If Point objects are used, ownership is
- _not_ transferred to the LineString object.
-
- Examples:
- ls = LineString((1, 1), (2, 2))
- ls = LineString([(1, 1), (2, 2)])
- ls = LineString(array([(1, 1), (2, 2)]))
- ls = LineString(Point(1, 1), Point(2, 2))
- """
- # If only one argument provided, set the coords array appropriately
- if len(args) == 1: coords = args[0]
- else: coords = args
-
- if isinstance(coords, (tuple, list)):
- # Getting the number of coords and the number of dimensions -- which
- # must stay the same, e.g., no LineString((1, 2), (1, 2, 3)).
- ncoords = len(coords)
- if coords: ndim = len(coords[0])
- else: raise TypeError('Cannot initialize on empty sequence.')
- self._checkdim(ndim)
- # Incrementing through each of the coordinates and verifying
- for i in xrange(1, ncoords):
- if not isinstance(coords[i], (tuple, list, Point)):
- raise TypeError('each coordinate should be a sequence (list or tuple)')
- if len(coords[i]) != ndim: raise TypeError('Dimension mismatch.')
- numpy_coords = False
- elif numpy and isinstance(coords, numpy.ndarray):
- shape = coords.shape # Using numpy's shape.
- if len(shape) != 2: raise TypeError('Too many dimensions.')
- self._checkdim(shape[1])
- ncoords = shape[0]
- ndim = shape[1]
- numpy_coords = True
- else:
- raise TypeError('Invalid initialization input for LineStrings.')
-
- # Creating a coordinate sequence object because it is easier to
- # set the points using GEOSCoordSeq.__setitem__().
- cs = GEOSCoordSeq(capi.create_cs(ncoords, ndim), z=bool(ndim==3))
-
- for i in xrange(ncoords):
- if numpy_coords: cs[i] = coords[i,:]
- elif isinstance(coords[i], Point): cs[i] = coords[i].tuple
- else: cs[i] = coords[i]
-
- # If SRID was passed in with the keyword arguments
- srid = kwargs.get('srid', None)
-
- # Calling the base geometry initialization with the returned pointer
- # from the function.
- super(LineString, self).__init__(self._init_func(cs.ptr), srid=srid)
-
- def __iter__(self):
- "Allows iteration over this LineString."
- for i in xrange(len(self)):
- yield self[i]
-
- def __len__(self):
- "Returns the number of points in this LineString."
- return len(self._cs)
-
- def _get_single_external(self, index):
- return self._cs[index]
-
- _get_single_internal = _get_single_external
-
- def _set_list(self, length, items):
- ndim = self._cs.dims #
- hasz = self._cs.hasz # I don't understand why these are different
-
- # create a new coordinate sequence and populate accordingly
- cs = GEOSCoordSeq(capi.create_cs(length, ndim), z=hasz)
- for i, c in enumerate(items):
- cs[i] = c
-
- ptr = self._init_func(cs.ptr)
- if ptr:
- capi.destroy_geom(self.ptr)
- self.ptr = ptr
- self._post_init(self.srid)
- else:
- # can this happen?
- raise GEOSException('Geometry resulting from slice deletion was invalid.')
-
- def _set_single(self, index, value):
- self._checkindex(index)
- self._cs[index] = value
-
- def _checkdim(self, dim):
- if dim not in (2, 3): raise TypeError('Dimension mismatch.')
-
- #### Sequence Properties ####
- @property
- def tuple(self):
- "Returns a tuple version of the geometry from the coordinate sequence."
- return self._cs.tuple
- coords = tuple
-
- def _listarr(self, func):
- """
- Internal routine that returns a sequence (list) corresponding with
- the given function. Will return a numpy array if possible.
- """
- lst = [func(i) for i in xrange(len(self))]
- if numpy: return numpy.array(lst) # ARRRR!
- else: return lst
-
- @property
- def array(self):
- "Returns a numpy array for the LineString."
- return self._listarr(self._cs.__getitem__)
-
- @property
- def merged(self):
- "Returns the line merge of this LineString."
- return self._topology(capi.geos_linemerge(self.ptr))
-
- @property
- def x(self):
- "Returns a list or numpy array of the X variable."
- return self._listarr(self._cs.getX)
-
- @property
- def y(self):
- "Returns a list or numpy array of the Y variable."
- return self._listarr(self._cs.getY)
-
- @property
- def z(self):
- "Returns a list or numpy array of the Z variable."
- if not self.hasz: return None
- else: return self._listarr(self._cs.getZ)
-
-# LinearRings are LineStrings used within Polygons.
-class LinearRing(LineString):
- _minLength = 4
- _init_func = capi.create_linearring
diff --git a/parts/django/django/contrib/gis/geos/mutable_list.py b/parts/django/django/contrib/gis/geos/mutable_list.py
deleted file mode 100644
index cc28147..0000000
--- a/parts/django/django/contrib/gis/geos/mutable_list.py
+++ /dev/null
@@ -1,309 +0,0 @@
-# Copyright (c) 2008-2009 Aryeh Leib Taurog, all rights reserved.
-# Released under the New BSD license.
-"""
-This module contains a base type which provides list-style mutations
-without specific data storage methods.
-
-See also http://www.aryehleib.com/MutableLists.html
-
-Author: Aryeh Leib Taurog.
-"""
-class ListMixin(object):
- """
- A base class which provides complete list interface.
- Derived classes must call ListMixin's __init__() function
- and implement the following:
-
- function _get_single_external(self, i):
- Return single item with index i for general use.
- The index i will always satisfy 0 <= i < len(self).
-
- function _get_single_internal(self, i):
- Same as above, but for use within the class [Optional]
- Note that if _get_single_internal and _get_single_internal return
- different types of objects, _set_list must distinguish
- between the two and handle each appropriately.
-
- function _set_list(self, length, items):
- Recreate the entire object.
-
- NOTE: items may be a generator which calls _get_single_internal.
- Therefore, it is necessary to cache the values in a temporary:
- temp = list(items)
- before clobbering the original storage.
-
- function _set_single(self, i, value):
- Set the single item at index i to value [Optional]
- If left undefined, all mutations will result in rebuilding
- the object using _set_list.
-
- function __len__(self):
- Return the length
-
- int _minlength:
- The minimum legal length [Optional]
-
- int _maxlength:
- The maximum legal length [Optional]
-
- type or tuple _allowed:
- A type or tuple of allowed item types [Optional]
-
- class _IndexError:
- The type of exception to be raise on invalid index [Optional]
- """
-
- _minlength = 0
- _maxlength = None
- _IndexError = IndexError
-
- ### Python initialization and special list interface methods ###
-
- def __init__(self, *args, **kwargs):
- if not hasattr(self, '_get_single_internal'):
- self._get_single_internal = self._get_single_external
-
- if not hasattr(self, '_set_single'):
- self._set_single = self._set_single_rebuild
- self._assign_extended_slice = self._assign_extended_slice_rebuild
-
- super(ListMixin, self).__init__(*args, **kwargs)
-
- def __getitem__(self, index):
- "Get the item(s) at the specified index/slice."
- if isinstance(index, slice):
- return [self._get_single_external(i) for i in xrange(*index.indices(len(self)))]
- else:
- index = self._checkindex(index)
- return self._get_single_external(index)
-
- def __delitem__(self, index):
- "Delete the item(s) at the specified index/slice."
- if not isinstance(index, (int, long, slice)):
- raise TypeError("%s is not a legal index" % index)
-
- # calculate new length and dimensions
- origLen = len(self)
- if isinstance(index, (int, long)):
- index = self._checkindex(index)
- indexRange = [index]
- else:
- indexRange = range(*index.indices(origLen))
-
- newLen = origLen - len(indexRange)
- newItems = ( self._get_single_internal(i)
- for i in xrange(origLen)
- if i not in indexRange )
-
- self._rebuild(newLen, newItems)
-
- def __setitem__(self, index, val):
- "Set the item(s) at the specified index/slice."
- if isinstance(index, slice):
- self._set_slice(index, val)
- else:
- index = self._checkindex(index)
- self._check_allowed((val,))
- self._set_single(index, val)
-
- def __iter__(self):
- "Iterate over the items in the list"
- for i in xrange(len(self)):
- yield self[i]
-
- ### Special methods for arithmetic operations ###
- def __add__(self, other):
- 'add another list-like object'
- return self.__class__(list(self) + list(other))
-
- def __radd__(self, other):
- 'add to another list-like object'
- return other.__class__(list(other) + list(self))
-
- def __iadd__(self, other):
- 'add another list-like object to self'
- self.extend(list(other))
- return self
-
- def __mul__(self, n):
- 'multiply'
- return self.__class__(list(self) * n)
-
- def __rmul__(self, n):
- 'multiply'
- return self.__class__(list(self) * n)
-
- def __imul__(self, n):
- 'multiply'
- if n <= 0:
- del self[:]
- else:
- cache = list(self)
- for i in range(n-1):
- self.extend(cache)
- return self
-
- def __cmp__(self, other):
- 'cmp'
- slen = len(self)
- for i in range(slen):
- try:
- c = cmp(self[i], other[i])
- except IndexError:
- # must be other is shorter
- return 1
- else:
- # elements not equal
- if c: return c
-
- return cmp(slen, len(other))
-
- ### Public list interface Methods ###
- ## Non-mutating ##
- def count(self, val):
- "Standard list count method"
- count = 0
- for i in self:
- if val == i: count += 1
- return count
-
- def index(self, val):
- "Standard list index method"
- for i in xrange(0, len(self)):
- if self[i] == val: return i
- raise ValueError('%s not found in object' % str(val))
-
- ## Mutating ##
- def append(self, val):
- "Standard list append method"
- self[len(self):] = [val]
-
- def extend(self, vals):
- "Standard list extend method"
- self[len(self):] = vals
-
- def insert(self, index, val):
- "Standard list insert method"
- if not isinstance(index, (int, long)):
- raise TypeError("%s is not a legal index" % index)
- self[index:index] = [val]
-
- def pop(self, index=-1):
- "Standard list pop method"
- result = self[index]
- del self[index]
- return result
-
- def remove(self, val):
- "Standard list remove method"
- del self[self.index(val)]
-
- def reverse(self):
- "Standard list reverse method"
- self[:] = self[-1::-1]
-
- def sort(self, cmp=cmp, key=None, reverse=False):
- "Standard list sort method"
- if key:
- temp = [(key(v),v) for v in self]
- temp.sort(cmp=cmp, key=lambda x: x[0], reverse=reverse)
- self[:] = [v[1] for v in temp]
- else:
- temp = list(self)
- temp.sort(cmp=cmp, reverse=reverse)
- self[:] = temp
-
- ### Private routines ###
- def _rebuild(self, newLen, newItems):
- if newLen < self._minlength:
- raise ValueError('Must have at least %d items' % self._minlength)
- if self._maxlength is not None and newLen > self._maxlength:
- raise ValueError('Cannot have more than %d items' % self._maxlength)
-
- self._set_list(newLen, newItems)
-
- def _set_single_rebuild(self, index, value):
- self._set_slice(slice(index, index + 1, 1), [value])
-
- def _checkindex(self, index, correct=True):
- length = len(self)
- if 0 <= index < length:
- return index
- if correct and -length <= index < 0:
- return index + length
- raise self._IndexError('invalid index: %s' % str(index))
-
- def _check_allowed(self, items):
- if hasattr(self, '_allowed'):
- if False in [isinstance(val, self._allowed) for val in items]:
- raise TypeError('Invalid type encountered in the arguments.')
-
- def _set_slice(self, index, values):
- "Assign values to a slice of the object"
- try:
- iter(values)
- except TypeError:
- raise TypeError('can only assign an iterable to a slice')
-
- self._check_allowed(values)
-
- origLen = len(self)
- valueList = list(values)
- start, stop, step = index.indices(origLen)
-
- # CAREFUL: index.step and step are not the same!
- # step will never be None
- if index.step is None:
- self._assign_simple_slice(start, stop, valueList)
- else:
- self._assign_extended_slice(start, stop, step, valueList)
-
- def _assign_extended_slice_rebuild(self, start, stop, step, valueList):
- 'Assign an extended slice by rebuilding entire list'
- indexList = range(start, stop, step)
- # extended slice, only allow assigning slice of same size
- if len(valueList) != len(indexList):
- raise ValueError('attempt to assign sequence of size %d '
- 'to extended slice of size %d'
- % (len(valueList), len(indexList)))
-
- # we're not changing the length of the sequence
- newLen = len(self)
- newVals = dict(zip(indexList, valueList))
- def newItems():
- for i in xrange(newLen):
- if i in newVals:
- yield newVals[i]
- else:
- yield self._get_single_internal(i)
-
- self._rebuild(newLen, newItems())
-
- def _assign_extended_slice(self, start, stop, step, valueList):
- 'Assign an extended slice by re-assigning individual items'
- indexList = range(start, stop, step)
- # extended slice, only allow assigning slice of same size
- if len(valueList) != len(indexList):
- raise ValueError('attempt to assign sequence of size %d '
- 'to extended slice of size %d'
- % (len(valueList), len(indexList)))
-
- for i, val in zip(indexList, valueList):
- self._set_single(i, val)
-
- def _assign_simple_slice(self, start, stop, valueList):
- 'Assign a simple slice; Can assign slice of any length'
- origLen = len(self)
- stop = max(start, stop)
- newLen = origLen - stop + start + len(valueList)
- def newItems():
- for i in xrange(origLen + 1):
- if i == start:
- for val in valueList:
- yield val
-
- if i < origLen:
- if i < start or i >= stop:
- yield self._get_single_internal(i)
-
- self._rebuild(newLen, newItems())
diff --git a/parts/django/django/contrib/gis/geos/point.py b/parts/django/django/contrib/gis/geos/point.py
deleted file mode 100644
index 5c00a93..0000000
--- a/parts/django/django/contrib/gis/geos/point.py
+++ /dev/null
@@ -1,135 +0,0 @@
-from ctypes import c_uint
-from django.contrib.gis.geos.error import GEOSException
-from django.contrib.gis.geos.geometry import GEOSGeometry
-from django.contrib.gis.geos import prototypes as capi
-
-class Point(GEOSGeometry):
- _minlength = 2
- _maxlength = 3
-
- def __init__(self, x, y=None, z=None, srid=None):
- """
- The Point object may be initialized with either a tuple, or individual
- parameters.
-
- For Example:
- >>> p = Point((5, 23)) # 2D point, passed in as a tuple
- >>> p = Point(5, 23, 8) # 3D point, passed in with individual parameters
- """
- if isinstance(x, (tuple, list)):
- # Here a tuple or list was passed in under the `x` parameter.
- ndim = len(x)
- coords = x
- elif isinstance(x, (int, float, long)) and isinstance(y, (int, float, long)):
- # Here X, Y, and (optionally) Z were passed in individually, as parameters.
- if isinstance(z, (int, float, long)):
- ndim = 3
- coords = [x, y, z]
- else:
- ndim = 2
- coords = [x, y]
- else:
- raise TypeError('Invalid parameters given for Point initialization.')
-
- point = self._create_point(ndim, coords)
-
- # Initializing using the address returned from the GEOS
- # createPoint factory.
- super(Point, self).__init__(point, srid=srid)
-
- def _create_point(self, ndim, coords):
- """
- Create a coordinate sequence, set X, Y, [Z], and create point
- """
- if ndim < 2 or ndim > 3:
- raise TypeError('Invalid point dimension: %s' % str(ndim))
-
- cs = capi.create_cs(c_uint(1), c_uint(ndim))
- i = iter(coords)
- capi.cs_setx(cs, 0, i.next())
- capi.cs_sety(cs, 0, i.next())
- if ndim == 3: capi.cs_setz(cs, 0, i.next())
-
- return capi.create_point(cs)
-
- def _set_list(self, length, items):
- ptr = self._create_point(length, items)
- if ptr:
- capi.destroy_geom(self.ptr)
- self._ptr = ptr
- self._set_cs()
- else:
- # can this happen?
- raise GEOSException('Geometry resulting from slice deletion was invalid.')
-
- def _set_single(self, index, value):
- self._cs.setOrdinate(index, 0, value)
-
- def __iter__(self):
- "Allows iteration over coordinates of this Point."
- for i in xrange(len(self)):
- yield self[i]
-
- def __len__(self):
- "Returns the number of dimensions for this Point (either 0, 2 or 3)."
- if self.empty: return 0
- if self.hasz: return 3
- else: return 2
-
- def _get_single_external(self, index):
- if index == 0:
- return self.x
- elif index == 1:
- return self.y
- elif index == 2:
- return self.z
-
- _get_single_internal = _get_single_external
-
- def get_x(self):
- "Returns the X component of the Point."
- return self._cs.getOrdinate(0, 0)
-
- def set_x(self, value):
- "Sets the X component of the Point."
- self._cs.setOrdinate(0, 0, value)
-
- def get_y(self):
- "Returns the Y component of the Point."
- return self._cs.getOrdinate(1, 0)
-
- def set_y(self, value):
- "Sets the Y component of the Point."
- self._cs.setOrdinate(1, 0, value)
-
- def get_z(self):
- "Returns the Z component of the Point."
- if self.hasz:
- return self._cs.getOrdinate(2, 0)
- else:
- return None
-
- def set_z(self, value):
- "Sets the Z component of the Point."
- if self.hasz:
- self._cs.setOrdinate(2, 0, value)
- else:
- raise GEOSException('Cannot set Z on 2D Point.')
-
- # X, Y, Z properties
- x = property(get_x, set_x)
- y = property(get_y, set_y)
- z = property(get_z, set_z)
-
- ### Tuple setting and retrieval routines. ###
- def get_coords(self):
- "Returns a tuple of the point."
- return self._cs.tuple
-
- def set_coords(self, tup):
- "Sets the coordinates of the point with the given tuple."
- self._cs[0] = tup
-
- # The tuple and coords properties
- tuple = property(get_coords, set_coords)
- coords = tuple
diff --git a/parts/django/django/contrib/gis/geos/polygon.py b/parts/django/django/contrib/gis/geos/polygon.py
deleted file mode 100644
index 92b2e4c..0000000
--- a/parts/django/django/contrib/gis/geos/polygon.py
+++ /dev/null
@@ -1,166 +0,0 @@
-from ctypes import c_uint, byref
-from django.contrib.gis.geos.error import GEOSIndexError
-from django.contrib.gis.geos.geometry import GEOSGeometry
-from django.contrib.gis.geos.libgeos import get_pointer_arr, GEOM_PTR
-from django.contrib.gis.geos.linestring import LinearRing
-from django.contrib.gis.geos import prototypes as capi
-
-class Polygon(GEOSGeometry):
- _minlength = 1
-
- def __init__(self, *args, **kwargs):
- """
- Initializes on an exterior ring and a sequence of holes (both
- instances may be either LinearRing instances, or a tuple/list
- that may be constructed into a LinearRing).
-
- Examples of initialization, where shell, hole1, and hole2 are
- valid LinearRing geometries:
- >>> poly = Polygon(shell, hole1, hole2)
- >>> poly = Polygon(shell, (hole1, hole2))
-
- Example where a tuple parameters are used:
- >>> poly = Polygon(((0, 0), (0, 10), (10, 10), (0, 10), (0, 0)),
- ((4, 4), (4, 6), (6, 6), (6, 4), (4, 4)))
- """
- if not args:
- raise TypeError('Must provide at least one LinearRing, or a tuple, to initialize a Polygon.')
-
- # Getting the ext_ring and init_holes parameters from the argument list
- ext_ring = args[0]
- init_holes = args[1:]
- n_holes = len(init_holes)
-
- # If initialized as Polygon(shell, (LinearRing, LinearRing)) [for backward-compatibility]
- if n_holes == 1 and isinstance(init_holes[0], (tuple, list)):
- if len(init_holes[0]) == 0:
- init_holes = ()
- n_holes = 0
- elif isinstance(init_holes[0][0], LinearRing):
- init_holes = init_holes[0]
- n_holes = len(init_holes)
-
- polygon = self._create_polygon(n_holes + 1, (ext_ring,) + init_holes)
- super(Polygon, self).__init__(polygon, **kwargs)
-
- def __iter__(self):
- "Iterates over each ring in the polygon."
- for i in xrange(len(self)):
- yield self[i]
-
- def __len__(self):
- "Returns the number of rings in this Polygon."
- return self.num_interior_rings + 1
-
- @classmethod
- def from_bbox(cls, bbox):
- "Constructs a Polygon from a bounding box (4-tuple)."
- x0, y0, x1, y1 = bbox
- return GEOSGeometry( 'POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))' % (
- x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) )
-
- ### These routines are needed for list-like operation w/ListMixin ###
- def _create_polygon(self, length, items):
- # Instantiate LinearRing objects if necessary, but don't clone them yet
- # _construct_ring will throw a TypeError if a parameter isn't a valid ring
- # If we cloned the pointers here, we wouldn't be able to clean up
- # in case of error.
- rings = []
- for r in items:
- if isinstance(r, GEOM_PTR):
- rings.append(r)
- else:
- rings.append(self._construct_ring(r))
-
- shell = self._clone(rings.pop(0))
-
- n_holes = length - 1
- if n_holes:
- holes = get_pointer_arr(n_holes)
- for i, r in enumerate(rings):
- holes[i] = self._clone(r)
- holes_param = byref(holes)
- else:
- holes_param = None
-
- return capi.create_polygon(shell, holes_param, c_uint(n_holes))
-
- def _clone(self, g):
- if isinstance(g, GEOM_PTR):
- return capi.geom_clone(g)
- else:
- return capi.geom_clone(g.ptr)
-
- def _construct_ring(self, param, msg='Parameter must be a sequence of LinearRings or objects that can initialize to LinearRings'):
- "Helper routine for trying to construct a ring from the given parameter."
- if isinstance(param, LinearRing): return param
- try:
- ring = LinearRing(param)
- return ring
- except TypeError:
- raise TypeError(msg)
-
- def _set_list(self, length, items):
- # Getting the current pointer, replacing with the newly constructed
- # geometry, and destroying the old geometry.
- prev_ptr = self.ptr
- srid = self.srid
- self.ptr = self._create_polygon(length, items)
- if srid: self.srid = srid
- capi.destroy_geom(prev_ptr)
-
- def _get_single_internal(self, index):
- """
- Returns the ring at the specified index. The first index, 0, will
- always return the exterior ring. Indices > 0 will return the
- interior ring at the given index (e.g., poly[1] and poly[2] would
- return the first and second interior ring, respectively).
-
- CAREFUL: Internal/External are not the same as Interior/Exterior!
- _get_single_internal returns a pointer from the existing geometries for use
- internally by the object's methods. _get_single_external returns a clone
- of the same geometry for use by external code.
- """
- if index == 0:
- return capi.get_extring(self.ptr)
- else:
- # Getting the interior ring, have to subtract 1 from the index.
- return capi.get_intring(self.ptr, index-1)
-
- def _get_single_external(self, index):
- return GEOSGeometry(capi.geom_clone(self._get_single_internal(index)), srid=self.srid)
-
- _set_single = GEOSGeometry._set_single_rebuild
- _assign_extended_slice = GEOSGeometry._assign_extended_slice_rebuild
-
- #### Polygon Properties ####
- @property
- def num_interior_rings(self):
- "Returns the number of interior rings."
- # Getting the number of rings
- return capi.get_nrings(self.ptr)
-
- def _get_ext_ring(self):
- "Gets the exterior ring of the Polygon."
- return self[0]
-
- def _set_ext_ring(self, ring):
- "Sets the exterior ring of the Polygon."
- self[0] = ring
-
- # Properties for the exterior ring/shell.
- exterior_ring = property(_get_ext_ring, _set_ext_ring)
- shell = exterior_ring
-
- @property
- def tuple(self):
- "Gets the tuple for each ring in this Polygon."
- return tuple([self[i].tuple for i in xrange(len(self))])
- coords = tuple
-
- @property
- def kml(self):
- "Returns the KML representation of this Polygon."
- inner_kml = ''.join(["<innerBoundaryIs>%s</innerBoundaryIs>" % self[i+1].kml
- for i in xrange(self.num_interior_rings)])
- return "<Polygon><outerBoundaryIs>%s</outerBoundaryIs>%s</Polygon>" % (self[0].kml, inner_kml)
diff --git a/parts/django/django/contrib/gis/geos/prepared.py b/parts/django/django/contrib/gis/geos/prepared.py
deleted file mode 100644
index 68b812d..0000000
--- a/parts/django/django/contrib/gis/geos/prepared.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from django.contrib.gis.geos.base import GEOSBase
-from django.contrib.gis.geos.geometry import GEOSGeometry
-from django.contrib.gis.geos.prototypes import prepared as capi
-
-class PreparedGeometry(GEOSBase):
- """
- A geometry that is prepared for performing certain operations.
- At the moment this includes the contains covers, and intersects
- operations.
- """
- ptr_type = capi.PREPGEOM_PTR
-
- def __init__(self, geom):
- if not isinstance(geom, GEOSGeometry): raise TypeError
- self.ptr = capi.geos_prepare(geom.ptr)
-
- def __del__(self):
- if self._ptr: capi.prepared_destroy(self._ptr)
-
- def contains(self, other):
- return capi.prepared_contains(self.ptr, other.ptr)
-
- def contains_properly(self, other):
- return capi.prepared_contains_properly(self.ptr, other.ptr)
-
- def covers(self, other):
- return capi.prepared_covers(self.ptr, other.ptr)
-
- def intersects(self, other):
- return capi.prepared_intersects(self.ptr, other.ptr)
diff --git a/parts/django/django/contrib/gis/geos/prototypes/__init__.py b/parts/django/django/contrib/gis/geos/prototypes/__init__.py
deleted file mode 100644
index 2355928..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
- This module contains all of the GEOS ctypes function prototypes. Each
- prototype handles the interaction between the GEOS library and Python
- via ctypes.
-"""
-
-# Coordinate sequence routines.
-from django.contrib.gis.geos.prototypes.coordseq import create_cs, get_cs, \
- cs_clone, cs_getordinate, cs_setordinate, cs_getx, cs_gety, cs_getz, \
- cs_setx, cs_sety, cs_setz, cs_getsize, cs_getdims
-
-# Geometry routines.
-from django.contrib.gis.geos.prototypes.geom import from_hex, from_wkb, from_wkt, \
- create_point, create_linestring, create_linearring, create_polygon, create_collection, \
- destroy_geom, get_extring, get_intring, get_nrings, get_geomn, geom_clone, \
- geos_normalize, geos_type, geos_typeid, geos_get_srid, geos_set_srid, \
- get_dims, get_num_coords, get_num_geoms, \
- to_hex, to_wkb, to_wkt
-
-# Miscellaneous routines.
-from django.contrib.gis.geos.prototypes.misc import geos_area, geos_distance, geos_length
-
-# Predicates
-from django.contrib.gis.geos.prototypes.predicates import geos_hasz, geos_isempty, \
- geos_isring, geos_issimple, geos_isvalid, geos_contains, geos_crosses, \
- geos_disjoint, geos_equals, geos_equalsexact, geos_intersects, \
- geos_intersects, geos_overlaps, geos_relatepattern, geos_touches, geos_within
-
-# Topology routines
-from django.contrib.gis.geos.prototypes.topology import *
diff --git a/parts/django/django/contrib/gis/geos/prototypes/coordseq.py b/parts/django/django/contrib/gis/geos/prototypes/coordseq.py
deleted file mode 100644
index 68b9480..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/coordseq.py
+++ /dev/null
@@ -1,83 +0,0 @@
-from ctypes import c_double, c_int, c_uint, POINTER
-from django.contrib.gis.geos.libgeos import GEOM_PTR, CS_PTR
-from django.contrib.gis.geos.prototypes.errcheck import last_arg_byref, GEOSException
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-## Error-checking routines specific to coordinate sequences. ##
-def check_cs_ptr(result, func, cargs):
- "Error checking on routines that return Geometries."
- if not result:
- raise GEOSException('Error encountered checking Coordinate Sequence returned from GEOS C function "%s".' % func.__name__)
- return result
-
-def check_cs_op(result, func, cargs):
- "Checks the status code of a coordinate sequence operation."
- if result == 0:
- raise GEOSException('Could not set value on coordinate sequence')
- else:
- return result
-
-def check_cs_get(result, func, cargs):
- "Checking the coordinate sequence retrieval."
- check_cs_op(result, func, cargs)
- # Object in by reference, return its value.
- return last_arg_byref(cargs)
-
-## Coordinate sequence prototype generation functions. ##
-def cs_int(func):
- "For coordinate sequence routines that return an integer."
- func.argtypes = [CS_PTR, POINTER(c_uint)]
- func.restype = c_int
- func.errcheck = check_cs_get
- return func
-
-def cs_operation(func, ordinate=False, get=False):
- "For coordinate sequence operations."
- if get:
- # Get routines get double parameter passed-in by reference.
- func.errcheck = check_cs_get
- dbl_param = POINTER(c_double)
- else:
- func.errcheck = check_cs_op
- dbl_param = c_double
-
- if ordinate:
- # Get/Set ordinate routines have an extra uint parameter.
- func.argtypes = [CS_PTR, c_uint, c_uint, dbl_param]
- else:
- func.argtypes = [CS_PTR, c_uint, dbl_param]
-
- func.restype = c_int
- return func
-
-def cs_output(func, argtypes):
- "For routines that return a coordinate sequence."
- func.argtypes = argtypes
- func.restype = CS_PTR
- func.errcheck = check_cs_ptr
- return func
-
-## Coordinate Sequence ctypes prototypes ##
-
-# Coordinate Sequence constructors & cloning.
-cs_clone = cs_output(GEOSFunc('GEOSCoordSeq_clone'), [CS_PTR])
-create_cs = cs_output(GEOSFunc('GEOSCoordSeq_create'), [c_uint, c_uint])
-get_cs = cs_output(GEOSFunc('GEOSGeom_getCoordSeq'), [GEOM_PTR])
-
-# Getting, setting ordinate
-cs_getordinate = cs_operation(GEOSFunc('GEOSCoordSeq_getOrdinate'), ordinate=True, get=True)
-cs_setordinate = cs_operation(GEOSFunc('GEOSCoordSeq_setOrdinate'), ordinate=True)
-
-# For getting, x, y, z
-cs_getx = cs_operation(GEOSFunc('GEOSCoordSeq_getX'), get=True)
-cs_gety = cs_operation(GEOSFunc('GEOSCoordSeq_getY'), get=True)
-cs_getz = cs_operation(GEOSFunc('GEOSCoordSeq_getZ'), get=True)
-
-# For setting, x, y, z
-cs_setx = cs_operation(GEOSFunc('GEOSCoordSeq_setX'))
-cs_sety = cs_operation(GEOSFunc('GEOSCoordSeq_setY'))
-cs_setz = cs_operation(GEOSFunc('GEOSCoordSeq_setZ'))
-
-# These routines return size & dimensions.
-cs_getsize = cs_int(GEOSFunc('GEOSCoordSeq_getSize'))
-cs_getdims = cs_int(GEOSFunc('GEOSCoordSeq_getDimensions'))
diff --git a/parts/django/django/contrib/gis/geos/prototypes/errcheck.py b/parts/django/django/contrib/gis/geos/prototypes/errcheck.py
deleted file mode 100644
index 97fcd21..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/errcheck.py
+++ /dev/null
@@ -1,95 +0,0 @@
-"""
- Error checking functions for GEOS ctypes prototype functions.
-"""
-import os
-from ctypes import c_void_p, string_at, CDLL
-from django.contrib.gis.geos.error import GEOSException
-from django.contrib.gis.geos.libgeos import GEOS_VERSION
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-# Getting the `free` routine used to free the memory allocated for
-# string pointers returned by GEOS.
-if GEOS_VERSION >= (3, 1, 1):
- # In versions 3.1.1 and above, `GEOSFree` was added to the C API
- # because `free` isn't always available on all platforms.
- free = GEOSFunc('GEOSFree')
- free.argtypes = [c_void_p]
- free.restype = None
-else:
- # Getting the `free` routine from the C library of the platform.
- if os.name == 'nt':
- # On NT, use the MS C library.
- libc = CDLL('msvcrt')
- else:
- # On POSIX platforms C library is obtained by passing None into `CDLL`.
- libc = CDLL(None)
- free = libc.free
-
-### ctypes error checking routines ###
-def last_arg_byref(args):
- "Returns the last C argument's value by reference."
- return args[-1]._obj.value
-
-def check_dbl(result, func, cargs):
- "Checks the status code and returns the double value passed in by reference."
- # Checking the status code
- if result != 1: return None
- # Double passed in by reference, return its value.
- return last_arg_byref(cargs)
-
-def check_geom(result, func, cargs):
- "Error checking on routines that return Geometries."
- if not result:
- raise GEOSException('Error encountered checking Geometry returned from GEOS C function "%s".' % func.__name__)
- return result
-
-def check_minus_one(result, func, cargs):
- "Error checking on routines that should not return -1."
- if result == -1:
- raise GEOSException('Error encountered in GEOS C function "%s".' % func.__name__)
- else:
- return result
-
-def check_predicate(result, func, cargs):
- "Error checking for unary/binary predicate functions."
- val = ord(result) # getting the ordinal from the character
- if val == 1: return True
- elif val == 0: return False
- else:
- raise GEOSException('Error encountered on GEOS C predicate function "%s".' % func.__name__)
-
-def check_sized_string(result, func, cargs):
- """
- Error checking for routines that return explicitly sized strings.
-
- This frees the memory allocated by GEOS at the result pointer.
- """
- if not result:
- raise GEOSException('Invalid string pointer returned by GEOS C function "%s"' % func.__name__)
- # A c_size_t object is passed in by reference for the second
- # argument on these routines, and its needed to determine the
- # correct size.
- s = string_at(result, last_arg_byref(cargs))
- # Freeing the memory allocated within GEOS
- free(result)
- return s
-
-def check_string(result, func, cargs):
- """
- Error checking for routines that return strings.
-
- This frees the memory allocated by GEOS at the result pointer.
- """
- if not result: raise GEOSException('Error encountered checking string return value in GEOS C function "%s".' % func.__name__)
- # Getting the string value at the pointer address.
- s = string_at(result)
- # Freeing the memory allocated within GEOS
- free(result)
- return s
-
-def check_zero(result, func, cargs):
- "Error checking on routines that should not return 0."
- if result == 0:
- raise GEOSException('Error encountered in GEOS C function "%s".' % func.__name__)
- else:
- return result
diff --git a/parts/django/django/contrib/gis/geos/prototypes/geom.py b/parts/django/django/contrib/gis/geos/prototypes/geom.py
deleted file mode 100644
index 03f9897..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/geom.py
+++ /dev/null
@@ -1,119 +0,0 @@
-from ctypes import c_char_p, c_int, c_size_t, c_ubyte, c_uint, POINTER
-from django.contrib.gis.geos.libgeos import CS_PTR, GEOM_PTR, PREPGEOM_PTR, GEOS_PREPARE
-from django.contrib.gis.geos.prototypes.errcheck import \
- check_geom, check_minus_one, check_sized_string, check_string, check_zero
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-# This is the return type used by binary output (WKB, HEX) routines.
-c_uchar_p = POINTER(c_ubyte)
-
-# We create a simple subclass of c_char_p here because when the response
-# type is set to c_char_p, you get a _Python_ string and there's no way
-# to access the string's address inside the error checking function.
-# In other words, you can't free the memory allocated inside GEOS. Previously,
-# the return type would just be omitted and the integer address would be
-# used -- but this allows us to be specific in the function definition and
-# keeps the reference so it may be free'd.
-class geos_char_p(c_char_p):
- pass
-
-### ctypes generation functions ###
-def bin_constructor(func):
- "Generates a prototype for binary construction (HEX, WKB) GEOS routines."
- func.argtypes = [c_char_p, c_size_t]
- func.restype = GEOM_PTR
- func.errcheck = check_geom
- return func
-
-# HEX & WKB output
-def bin_output(func):
- "Generates a prototype for the routines that return a a sized string."
- func.argtypes = [GEOM_PTR, POINTER(c_size_t)]
- func.errcheck = check_sized_string
- func.restype = c_uchar_p
- return func
-
-def geom_output(func, argtypes):
- "For GEOS routines that return a geometry."
- if argtypes: func.argtypes = argtypes
- func.restype = GEOM_PTR
- func.errcheck = check_geom
- return func
-
-def geom_index(func):
- "For GEOS routines that return geometries from an index."
- return geom_output(func, [GEOM_PTR, c_int])
-
-def int_from_geom(func, zero=False):
- "Argument is a geometry, return type is an integer."
- func.argtypes = [GEOM_PTR]
- func.restype = c_int
- if zero:
- func.errcheck = check_zero
- else:
- func.errcheck = check_minus_one
- return func
-
-def string_from_geom(func):
- "Argument is a Geometry, return type is a string."
- func.argtypes = [GEOM_PTR]
- func.restype = geos_char_p
- func.errcheck = check_string
- return func
-
-### ctypes prototypes ###
-
-# Deprecated creation routines from WKB, HEX, WKT
-from_hex = bin_constructor(GEOSFunc('GEOSGeomFromHEX_buf'))
-from_wkb = bin_constructor(GEOSFunc('GEOSGeomFromWKB_buf'))
-from_wkt = geom_output(GEOSFunc('GEOSGeomFromWKT'), [c_char_p])
-
-# Deprecated output routines
-to_hex = bin_output(GEOSFunc('GEOSGeomToHEX_buf'))
-to_wkb = bin_output(GEOSFunc('GEOSGeomToWKB_buf'))
-to_wkt = string_from_geom(GEOSFunc('GEOSGeomToWKT'))
-
-# The GEOS geometry type, typeid, num_coordites and number of geometries
-geos_normalize = int_from_geom(GEOSFunc('GEOSNormalize'))
-geos_type = string_from_geom(GEOSFunc('GEOSGeomType'))
-geos_typeid = int_from_geom(GEOSFunc('GEOSGeomTypeId'))
-get_dims = int_from_geom(GEOSFunc('GEOSGeom_getDimensions'), zero=True)
-get_num_coords = int_from_geom(GEOSFunc('GEOSGetNumCoordinates'))
-get_num_geoms = int_from_geom(GEOSFunc('GEOSGetNumGeometries'))
-
-# Geometry creation factories
-create_point = geom_output(GEOSFunc('GEOSGeom_createPoint'), [CS_PTR])
-create_linestring = geom_output(GEOSFunc('GEOSGeom_createLineString'), [CS_PTR])
-create_linearring = geom_output(GEOSFunc('GEOSGeom_createLinearRing'), [CS_PTR])
-
-# Polygon and collection creation routines are special and will not
-# have their argument types defined.
-create_polygon = geom_output(GEOSFunc('GEOSGeom_createPolygon'), None)
-create_collection = geom_output(GEOSFunc('GEOSGeom_createCollection'), None)
-
-# Ring routines
-get_extring = geom_output(GEOSFunc('GEOSGetExteriorRing'), [GEOM_PTR])
-get_intring = geom_index(GEOSFunc('GEOSGetInteriorRingN'))
-get_nrings = int_from_geom(GEOSFunc('GEOSGetNumInteriorRings'))
-
-# Collection Routines
-get_geomn = geom_index(GEOSFunc('GEOSGetGeometryN'))
-
-# Cloning
-geom_clone = GEOSFunc('GEOSGeom_clone')
-geom_clone.argtypes = [GEOM_PTR]
-geom_clone.restype = GEOM_PTR
-
-# Destruction routine.
-destroy_geom = GEOSFunc('GEOSGeom_destroy')
-destroy_geom.argtypes = [GEOM_PTR]
-destroy_geom.restype = None
-
-# SRID routines
-geos_get_srid = GEOSFunc('GEOSGetSRID')
-geos_get_srid.argtypes = [GEOM_PTR]
-geos_get_srid.restype = c_int
-
-geos_set_srid = GEOSFunc('GEOSSetSRID')
-geos_set_srid.argtypes = [GEOM_PTR, c_int]
-geos_set_srid.restype = None
diff --git a/parts/django/django/contrib/gis/geos/prototypes/io.py b/parts/django/django/contrib/gis/geos/prototypes/io.py
deleted file mode 100644
index 5c0c8b5..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/io.py
+++ /dev/null
@@ -1,242 +0,0 @@
-import threading
-from ctypes import byref, c_char_p, c_int, c_char, c_size_t, Structure, POINTER
-from django.contrib.gis.geos.base import GEOSBase
-from django.contrib.gis.geos.libgeos import GEOM_PTR
-from django.contrib.gis.geos.prototypes.errcheck import check_geom, check_string, check_sized_string
-from django.contrib.gis.geos.prototypes.geom import c_uchar_p, geos_char_p
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-### The WKB/WKT Reader/Writer structures and pointers ###
-class WKTReader_st(Structure): pass
-class WKTWriter_st(Structure): pass
-class WKBReader_st(Structure): pass
-class WKBWriter_st(Structure): pass
-
-WKT_READ_PTR = POINTER(WKTReader_st)
-WKT_WRITE_PTR = POINTER(WKTWriter_st)
-WKB_READ_PTR = POINTER(WKBReader_st)
-WKB_WRITE_PTR = POINTER(WKBReader_st)
-
-### WKTReader routines ###
-wkt_reader_create = GEOSFunc('GEOSWKTReader_create')
-wkt_reader_create.restype = WKT_READ_PTR
-
-wkt_reader_destroy = GEOSFunc('GEOSWKTReader_destroy')
-wkt_reader_destroy.argtypes = [WKT_READ_PTR]
-
-wkt_reader_read = GEOSFunc('GEOSWKTReader_read')
-wkt_reader_read.argtypes = [WKT_READ_PTR, c_char_p]
-wkt_reader_read.restype = GEOM_PTR
-wkt_reader_read.errcheck = check_geom
-
-### WKTWriter routines ###
-wkt_writer_create = GEOSFunc('GEOSWKTWriter_create')
-wkt_writer_create.restype = WKT_WRITE_PTR
-
-wkt_writer_destroy = GEOSFunc('GEOSWKTWriter_destroy')
-wkt_writer_destroy.argtypes = [WKT_WRITE_PTR]
-
-wkt_writer_write = GEOSFunc('GEOSWKTWriter_write')
-wkt_writer_write.argtypes = [WKT_WRITE_PTR, GEOM_PTR]
-wkt_writer_write.restype = geos_char_p
-wkt_writer_write.errcheck = check_string
-
-### WKBReader routines ###
-wkb_reader_create = GEOSFunc('GEOSWKBReader_create')
-wkb_reader_create.restype = WKB_READ_PTR
-
-wkb_reader_destroy = GEOSFunc('GEOSWKBReader_destroy')
-wkb_reader_destroy.argtypes = [WKB_READ_PTR]
-
-def wkb_read_func(func):
- # Although the function definitions take `const unsigned char *`
- # as their parameter, we use c_char_p here so the function may
- # take Python strings directly as parameters. Inside Python there
- # is not a difference between signed and unsigned characters, so
- # it is not a problem.
- func.argtypes = [WKB_READ_PTR, c_char_p, c_size_t]
- func.restype = GEOM_PTR
- func.errcheck = check_geom
- return func
-
-wkb_reader_read = wkb_read_func(GEOSFunc('GEOSWKBReader_read'))
-wkb_reader_read_hex = wkb_read_func(GEOSFunc('GEOSWKBReader_readHEX'))
-
-### WKBWriter routines ###
-wkb_writer_create = GEOSFunc('GEOSWKBWriter_create')
-wkb_writer_create.restype = WKB_WRITE_PTR
-
-wkb_writer_destroy = GEOSFunc('GEOSWKBWriter_destroy')
-wkb_writer_destroy.argtypes = [WKB_WRITE_PTR]
-
-# WKB Writing prototypes.
-def wkb_write_func(func):
- func.argtypes = [WKB_WRITE_PTR, GEOM_PTR, POINTER(c_size_t)]
- func.restype = c_uchar_p
- func.errcheck = check_sized_string
- return func
-
-wkb_writer_write = wkb_write_func(GEOSFunc('GEOSWKBWriter_write'))
-wkb_writer_write_hex = wkb_write_func(GEOSFunc('GEOSWKBWriter_writeHEX'))
-
-# WKBWriter property getter/setter prototypes.
-def wkb_writer_get(func, restype=c_int):
- func.argtypes = [WKB_WRITE_PTR]
- func.restype = restype
- return func
-
-def wkb_writer_set(func, argtype=c_int):
- func.argtypes = [WKB_WRITE_PTR, argtype]
- return func
-
-wkb_writer_get_byteorder = wkb_writer_get(GEOSFunc('GEOSWKBWriter_getByteOrder'))
-wkb_writer_set_byteorder = wkb_writer_set(GEOSFunc('GEOSWKBWriter_setByteOrder'))
-wkb_writer_get_outdim = wkb_writer_get(GEOSFunc('GEOSWKBWriter_getOutputDimension'))
-wkb_writer_set_outdim = wkb_writer_set(GEOSFunc('GEOSWKBWriter_setOutputDimension'))
-wkb_writer_get_include_srid = wkb_writer_get(GEOSFunc('GEOSWKBWriter_getIncludeSRID'), restype=c_char)
-wkb_writer_set_include_srid = wkb_writer_set(GEOSFunc('GEOSWKBWriter_setIncludeSRID'), argtype=c_char)
-
-### Base I/O Class ###
-class IOBase(GEOSBase):
- "Base class for GEOS I/O objects."
- def __init__(self):
- # Getting the pointer with the constructor.
- self.ptr = self._constructor()
-
- def __del__(self):
- # Cleaning up with the appropriate destructor.
- if self._ptr: self._destructor(self._ptr)
-
-### Base WKB/WKT Reading and Writing objects ###
-
-# Non-public WKB/WKT reader classes for internal use because
-# their `read` methods return _pointers_ instead of GEOSGeometry
-# objects.
-class _WKTReader(IOBase):
- _constructor = wkt_reader_create
- _destructor = wkt_reader_destroy
- ptr_type = WKT_READ_PTR
-
- def read(self, wkt):
- if not isinstance(wkt, basestring): raise TypeError
- return wkt_reader_read(self.ptr, wkt)
-
-class _WKBReader(IOBase):
- _constructor = wkb_reader_create
- _destructor = wkb_reader_destroy
- ptr_type = WKB_READ_PTR
-
- def read(self, wkb):
- "Returns a _pointer_ to C GEOS Geometry object from the given WKB."
- if isinstance(wkb, buffer):
- wkb_s = str(wkb)
- return wkb_reader_read(self.ptr, wkb_s, len(wkb_s))
- elif isinstance(wkb, basestring):
- return wkb_reader_read_hex(self.ptr, wkb, len(wkb))
- else:
- raise TypeError
-
-### WKB/WKT Writer Classes ###
-class WKTWriter(IOBase):
- _constructor = wkt_writer_create
- _destructor = wkt_writer_destroy
- ptr_type = WKT_WRITE_PTR
-
- def write(self, geom):
- "Returns the WKT representation of the given geometry."
- return wkt_writer_write(self.ptr, geom.ptr)
-
-class WKBWriter(IOBase):
- _constructor = wkb_writer_create
- _destructor = wkb_writer_destroy
- ptr_type = WKB_WRITE_PTR
-
- def write(self, geom):
- "Returns the WKB representation of the given geometry."
- return buffer(wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t())))
-
- def write_hex(self, geom):
- "Returns the HEXEWKB representation of the given geometry."
- return wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
-
- ### WKBWriter Properties ###
-
- # Property for getting/setting the byteorder.
- def _get_byteorder(self):
- return wkb_writer_get_byteorder(self.ptr)
-
- def _set_byteorder(self, order):
- if not order in (0, 1): raise ValueError('Byte order parameter must be 0 (Big Endian) or 1 (Little Endian).')
- wkb_writer_set_byteorder(self.ptr, order)
-
- byteorder = property(_get_byteorder, _set_byteorder)
-
- # Property for getting/setting the output dimension.
- def _get_outdim(self):
- return wkb_writer_get_outdim(self.ptr)
-
- def _set_outdim(self, new_dim):
- if not new_dim in (2, 3): raise ValueError('WKB output dimension must be 2 or 3')
- wkb_writer_set_outdim(self.ptr, new_dim)
-
- outdim = property(_get_outdim, _set_outdim)
-
- # Property for getting/setting the include srid flag.
- def _get_include_srid(self):
- return bool(ord(wkb_writer_get_include_srid(self.ptr)))
-
- def _set_include_srid(self, include):
- if bool(include): flag = chr(1)
- else: flag = chr(0)
- wkb_writer_set_include_srid(self.ptr, flag)
-
- srid = property(_get_include_srid, _set_include_srid)
-
-# `ThreadLocalIO` object holds instances of the WKT and WKB reader/writer
-# objects that are local to the thread. The `GEOSGeometry` internals
-# access these instances by calling the module-level functions, defined
-# below.
-class ThreadLocalIO(threading.local):
- wkt_r = None
- wkt_w = None
- wkb_r = None
- wkb_w = None
- ewkb_w = None
- ewkb_w3d = None
-
-thread_context = ThreadLocalIO()
-
-# These module-level routines return the I/O object that is local to the
-# the thread. If the I/O object does not exist yet it will be initialized.
-def wkt_r():
- if not thread_context.wkt_r:
- thread_context.wkt_r = _WKTReader()
- return thread_context.wkt_r
-
-def wkt_w():
- if not thread_context.wkt_w:
- thread_context.wkt_w = WKTWriter()
- return thread_context.wkt_w
-
-def wkb_r():
- if not thread_context.wkb_r:
- thread_context.wkb_r = _WKBReader()
- return thread_context.wkb_r
-
-def wkb_w():
- if not thread_context.wkb_w:
- thread_context.wkb_w = WKBWriter()
- return thread_context.wkb_w
-
-def ewkb_w():
- if not thread_context.ewkb_w:
- thread_context.ewkb_w = WKBWriter()
- thread_context.ewkb_w.srid = True
- return thread_context.ewkb_w
-
-def ewkb_w3d():
- if not thread_context.ewkb_w3d:
- thread_context.ewkb_w3d = WKBWriter()
- thread_context.ewkb_w3d.srid = True
- thread_context.ewkb_w3d.outdim = 3
- return thread_context.ewkb_w3d
diff --git a/parts/django/django/contrib/gis/geos/prototypes/misc.py b/parts/django/django/contrib/gis/geos/prototypes/misc.py
deleted file mode 100644
index 5b3b658..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/misc.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""
- This module is for the miscellaneous GEOS routines, particularly the
- ones that return the area, distance, and length.
-"""
-from ctypes import c_int, c_double, POINTER
-from django.contrib.gis.geos.libgeos import GEOM_PTR
-from django.contrib.gis.geos.prototypes.errcheck import check_dbl
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-### ctypes generator function ###
-def dbl_from_geom(func, num_geom=1):
- """
- Argument is a Geometry, return type is double that is passed
- in by reference as the last argument.
- """
- argtypes = [GEOM_PTR for i in xrange(num_geom)]
- argtypes += [POINTER(c_double)]
- func.argtypes = argtypes
- func.restype = c_int # Status code returned
- func.errcheck = check_dbl
- return func
-
-### ctypes prototypes ###
-
-# Area, distance, and length prototypes.
-geos_area = dbl_from_geom(GEOSFunc('GEOSArea'))
-geos_distance = dbl_from_geom(GEOSFunc('GEOSDistance'), num_geom=2)
-geos_length = dbl_from_geom(GEOSFunc('GEOSLength'))
diff --git a/parts/django/django/contrib/gis/geos/prototypes/predicates.py b/parts/django/django/contrib/gis/geos/prototypes/predicates.py
deleted file mode 100644
index bf69bb1..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/predicates.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""
- This module houses the GEOS ctypes prototype functions for the
- unary and binary predicate operations on geometries.
-"""
-from ctypes import c_char, c_char_p, c_double
-from django.contrib.gis.geos.libgeos import GEOM_PTR
-from django.contrib.gis.geos.prototypes.errcheck import check_predicate
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-## Binary & unary predicate functions ##
-def binary_predicate(func, *args):
- "For GEOS binary predicate functions."
- argtypes = [GEOM_PTR, GEOM_PTR]
- if args: argtypes += args
- func.argtypes = argtypes
- func.restype = c_char
- func.errcheck = check_predicate
- return func
-
-def unary_predicate(func):
- "For GEOS unary predicate functions."
- func.argtypes = [GEOM_PTR]
- func.restype = c_char
- func.errcheck = check_predicate
- return func
-
-## Unary Predicates ##
-geos_hasz = unary_predicate(GEOSFunc('GEOSHasZ'))
-geos_isempty = unary_predicate(GEOSFunc('GEOSisEmpty'))
-geos_isring = unary_predicate(GEOSFunc('GEOSisRing'))
-geos_issimple = unary_predicate(GEOSFunc('GEOSisSimple'))
-geos_isvalid = unary_predicate(GEOSFunc('GEOSisValid'))
-
-## Binary Predicates ##
-geos_contains = binary_predicate(GEOSFunc('GEOSContains'))
-geos_crosses = binary_predicate(GEOSFunc('GEOSCrosses'))
-geos_disjoint = binary_predicate(GEOSFunc('GEOSDisjoint'))
-geos_equals = binary_predicate(GEOSFunc('GEOSEquals'))
-geos_equalsexact = binary_predicate(GEOSFunc('GEOSEqualsExact'), c_double)
-geos_intersects = binary_predicate(GEOSFunc('GEOSIntersects'))
-geos_overlaps = binary_predicate(GEOSFunc('GEOSOverlaps'))
-geos_relatepattern = binary_predicate(GEOSFunc('GEOSRelatePattern'), c_char_p)
-geos_touches = binary_predicate(GEOSFunc('GEOSTouches'))
-geos_within = binary_predicate(GEOSFunc('GEOSWithin'))
diff --git a/parts/django/django/contrib/gis/geos/prototypes/prepared.py b/parts/django/django/contrib/gis/geos/prototypes/prepared.py
deleted file mode 100644
index 7342d7d..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/prepared.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from ctypes import c_char
-from django.contrib.gis.geos.libgeos import GEOM_PTR, PREPGEOM_PTR
-from django.contrib.gis.geos.prototypes.errcheck import check_predicate
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-# Prepared geometry constructor and destructors.
-geos_prepare = GEOSFunc('GEOSPrepare')
-geos_prepare.argtypes = [GEOM_PTR]
-geos_prepare.restype = PREPGEOM_PTR
-
-prepared_destroy = GEOSFunc('GEOSPreparedGeom_destroy')
-prepared_destroy.argtpes = [PREPGEOM_PTR]
-prepared_destroy.restype = None
-
-# Prepared geometry binary predicate support.
-def prepared_predicate(func):
- func.argtypes= [PREPGEOM_PTR, GEOM_PTR]
- func.restype = c_char
- func.errcheck = check_predicate
- return func
-
-prepared_contains = prepared_predicate(GEOSFunc('GEOSPreparedContains'))
-prepared_contains_properly = prepared_predicate(GEOSFunc('GEOSPreparedContainsProperly'))
-prepared_covers = prepared_predicate(GEOSFunc('GEOSPreparedCovers'))
-prepared_intersects = prepared_predicate(GEOSFunc('GEOSPreparedIntersects'))
diff --git a/parts/django/django/contrib/gis/geos/prototypes/threadsafe.py b/parts/django/django/contrib/gis/geos/prototypes/threadsafe.py
deleted file mode 100644
index 5888ed1..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/threadsafe.py
+++ /dev/null
@@ -1,90 +0,0 @@
-import threading
-from django.contrib.gis.geos.libgeos import lgeos, notice_h, error_h, CONTEXT_PTR
-
-class GEOSContextHandle(object):
- """
- Python object representing a GEOS context handle.
- """
- def __init__(self):
- # Initializing the context handler for this thread with
- # the notice and error handler.
- self.ptr = lgeos.initGEOS_r(notice_h, error_h)
-
- def __del__(self):
- if self.ptr: lgeos.finishGEOS_r(self.ptr)
-
-# Defining a thread-local object and creating an instance
-# to hold a reference to GEOSContextHandle for this thread.
-class GEOSContext(threading.local):
- handle = None
-
-thread_context = GEOSContext()
-
-def call_geos_threaded(cfunc, args):
- """
- This module-level routine calls the specified GEOS C thread-safe
- function with the context for this current thread.
- """
- # If a context handle does not exist for this thread, initialize one.
- if not thread_context.handle:
- thread_context.handle = GEOSContextHandle()
- # Call the threaded GEOS routine with pointer of the context handle
- # as the first argument.
- return cfunc(thread_context.handle.ptr, *args)
-
-class GEOSFunc(object):
- """
- Class that serves as a wrapper for GEOS C Functions, and will
- use thread-safe function variants when available.
- """
- def __init__(self, func_name):
- try:
- # GEOS thread-safe function signatures end with '_r', and
- # take an additional context handle parameter.
- self.cfunc = getattr(lgeos, func_name + '_r')
- self.threaded = True
- except AttributeError:
- # Otherwise, use usual function.
- self.cfunc = getattr(lgeos, func_name)
- self.threaded = False
-
- def __call__(self, *args):
- if self.threaded:
- return call_geos_threaded(self.cfunc, args)
- else:
- return self.cfunc(*args)
-
- def __str__(self):
- return self.cfunc.__name__
-
- # argtypes property
- def _get_argtypes(self):
- return self.cfunc.argtypes
-
- def _set_argtypes(self, argtypes):
- if self.threaded:
- new_argtypes = [CONTEXT_PTR]
- new_argtypes.extend(argtypes)
- self.cfunc.argtypes = new_argtypes
- else:
- self.cfunc.argtypes = argtypes
-
- argtypes = property(_get_argtypes, _set_argtypes)
-
- # restype property
- def _get_restype(self):
- return self.cfunc.restype
-
- def _set_restype(self, restype):
- self.cfunc.restype = restype
-
- restype = property(_get_restype, _set_restype)
-
- # errcheck property
- def _get_errcheck(self):
- return self.cfunc.errcheck
-
- def _set_errcheck(self, errcheck):
- self.cfunc.errcheck = errcheck
-
- errcheck = property(_get_errcheck, _set_errcheck)
diff --git a/parts/django/django/contrib/gis/geos/prototypes/topology.py b/parts/django/django/contrib/gis/geos/prototypes/topology.py
deleted file mode 100644
index 50817f9..0000000
--- a/parts/django/django/contrib/gis/geos/prototypes/topology.py
+++ /dev/null
@@ -1,51 +0,0 @@
-"""
- This module houses the GEOS ctypes prototype functions for the
- topological operations on geometries.
-"""
-__all__ = ['geos_boundary', 'geos_buffer', 'geos_centroid', 'geos_convexhull',
- 'geos_difference', 'geos_envelope', 'geos_intersection',
- 'geos_linemerge', 'geos_pointonsurface', 'geos_preservesimplify',
- 'geos_simplify', 'geos_symdifference', 'geos_union', 'geos_relate']
-
-from ctypes import c_char_p, c_double, c_int
-from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOS_PREPARE
-from django.contrib.gis.geos.prototypes.errcheck import check_geom, check_string
-from django.contrib.gis.geos.prototypes.geom import geos_char_p
-from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
-
-def topology(func, *args):
- "For GEOS unary topology functions."
- argtypes = [GEOM_PTR]
- if args: argtypes += args
- func.argtypes = argtypes
- func.restype = GEOM_PTR
- func.errcheck = check_geom
- return func
-
-### Topology Routines ###
-geos_boundary = topology(GEOSFunc('GEOSBoundary'))
-geos_buffer = topology(GEOSFunc('GEOSBuffer'), c_double, c_int)
-geos_centroid = topology(GEOSFunc('GEOSGetCentroid'))
-geos_convexhull = topology(GEOSFunc('GEOSConvexHull'))
-geos_difference = topology(GEOSFunc('GEOSDifference'), GEOM_PTR)
-geos_envelope = topology(GEOSFunc('GEOSEnvelope'))
-geos_intersection = topology(GEOSFunc('GEOSIntersection'), GEOM_PTR)
-geos_linemerge = topology(GEOSFunc('GEOSLineMerge'))
-geos_pointonsurface = topology(GEOSFunc('GEOSPointOnSurface'))
-geos_preservesimplify = topology(GEOSFunc('GEOSTopologyPreserveSimplify'), c_double)
-geos_simplify = topology(GEOSFunc('GEOSSimplify'), c_double)
-geos_symdifference = topology(GEOSFunc('GEOSSymDifference'), GEOM_PTR)
-geos_union = topology(GEOSFunc('GEOSUnion'), GEOM_PTR)
-
-# GEOSRelate returns a string, not a geometry.
-geos_relate = GEOSFunc('GEOSRelate')
-geos_relate.argtypes = [GEOM_PTR, GEOM_PTR]
-geos_relate.restype = geos_char_p
-geos_relate.errcheck = check_string
-
-# Routines only in GEOS 3.1+
-if GEOS_PREPARE:
- geos_cascaded_union = GEOSFunc('GEOSUnionCascaded')
- geos_cascaded_union.argtypes = [GEOM_PTR]
- geos_cascaded_union.restype = GEOM_PTR
- __all__.append('geos_cascaded_union')
diff --git a/parts/django/django/contrib/gis/geos/tests/__init__.py b/parts/django/django/contrib/gis/geos/tests/__init__.py
deleted file mode 100644
index 44c8e26..0000000
--- a/parts/django/django/contrib/gis/geos/tests/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
-GEOS Testing module.
-"""
-from unittest import TestSuite, TextTestRunner
-import test_geos, test_io, test_geos_mutation, test_mutable_list
-
-test_suites = [
- test_geos.suite(),
- test_io.suite(),
- test_geos_mutation.suite(),
- test_mutable_list.suite(),
- ]
-
-def suite():
- "Builds a test suite for the GEOS tests."
- s = TestSuite()
- map(s.addTest, test_suites)
- return s
-
-def run(verbosity=1):
- "Runs the GEOS tests."
- TextTestRunner(verbosity=verbosity).run(suite())
-
-if __name__ == '__main__':
- run(2)
diff --git a/parts/django/django/contrib/gis/geos/tests/test_geos.py b/parts/django/django/contrib/gis/geos/tests/test_geos.py
deleted file mode 100644
index 3cd021e..0000000
--- a/parts/django/django/contrib/gis/geos/tests/test_geos.py
+++ /dev/null
@@ -1,926 +0,0 @@
-import ctypes, random, unittest, sys
-from django.contrib.gis.geos import *
-from django.contrib.gis.geos.base import gdal, numpy, GEOSBase
-from django.contrib.gis.geometry.test_data import TestDataMixin
-
-class GEOSTest(unittest.TestCase, TestDataMixin):
-
- @property
- def null_srid(self):
- """
- Returns the proper null SRID depending on the GEOS version.
- See the comments in `test15_srid` for more details.
- """
- info = geos_version_info()
- if info['version'] == '3.0.0' and info['release_candidate']:
- return -1
- else:
- return None
-
- def test00_base(self):
- "Tests out the GEOSBase class."
- # Testing out GEOSBase class, which provides a `ptr` property
- # that abstracts out access to underlying C pointers.
- class FakeGeom1(GEOSBase):
- pass
-
- # This one only accepts pointers to floats
- c_float_p = ctypes.POINTER(ctypes.c_float)
- class FakeGeom2(GEOSBase):
- ptr_type = c_float_p
-
- # Default ptr_type is `c_void_p`.
- fg1 = FakeGeom1()
- # Default ptr_type is C float pointer
- fg2 = FakeGeom2()
-
- # These assignments are OK -- None is allowed because
- # it's equivalent to the NULL pointer.
- fg1.ptr = ctypes.c_void_p()
- fg1.ptr = None
- fg2.ptr = c_float_p(ctypes.c_float(5.23))
- fg2.ptr = None
-
- # Because pointers have been set to NULL, an exception should be
- # raised when we try to access it. Raising an exception is
- # preferrable to a segmentation fault that commonly occurs when
- # a C method is given a NULL memory reference.
- for fg in (fg1, fg2):
- # Equivalent to `fg.ptr`
- self.assertRaises(GEOSException, fg._get_ptr)
-
- # Anything that is either not None or the acceptable pointer type will
- # result in a TypeError when trying to assign it to the `ptr` property.
- # Thus, memmory addresses (integers) and pointers of the incorrect type
- # (in `bad_ptrs`) will not be allowed.
- bad_ptrs = (5, ctypes.c_char_p('foobar'))
- for bad_ptr in bad_ptrs:
- # Equivalent to `fg.ptr = bad_ptr`
- self.assertRaises(TypeError, fg1._set_ptr, bad_ptr)
- self.assertRaises(TypeError, fg2._set_ptr, bad_ptr)
-
- def test01a_wkt(self):
- "Testing WKT output."
- for g in self.geometries.wkt_out:
- geom = fromstr(g.wkt)
- self.assertEqual(g.ewkt, geom.wkt)
-
- def test01b_hex(self):
- "Testing HEX output."
- for g in self.geometries.hex_wkt:
- geom = fromstr(g.wkt)
- self.assertEqual(g.hex, geom.hex)
-
- def test01b_hexewkb(self):
- "Testing (HEX)EWKB output."
- from binascii import a2b_hex
-
- # For testing HEX(EWKB).
- ogc_hex = '01010000000000000000000000000000000000F03F'
- # `SELECT ST_AsHEXEWKB(ST_GeomFromText('POINT(0 1)', 4326));`
- hexewkb_2d = '0101000020E61000000000000000000000000000000000F03F'
- # `SELECT ST_AsHEXEWKB(ST_GeomFromEWKT('SRID=4326;POINT(0 1 2)'));`
- hexewkb_3d = '01010000A0E61000000000000000000000000000000000F03F0000000000000040'
-
- pnt_2d = Point(0, 1, srid=4326)
- pnt_3d = Point(0, 1, 2, srid=4326)
-
- # OGC-compliant HEX will not have SRID nor Z value.
- self.assertEqual(ogc_hex, pnt_2d.hex)
- self.assertEqual(ogc_hex, pnt_3d.hex)
-
- # HEXEWKB should be appropriate for its dimension -- have to use an
- # a WKBWriter w/dimension set accordingly, else GEOS will insert
- # garbage into 3D coordinate if there is none. Also, GEOS has a
- # a bug in versions prior to 3.1 that puts the X coordinate in
- # place of Z; an exception should be raised on those versions.
- self.assertEqual(hexewkb_2d, pnt_2d.hexewkb)
- if GEOS_PREPARE:
- self.assertEqual(hexewkb_3d, pnt_3d.hexewkb)
- self.assertEqual(True, GEOSGeometry(hexewkb_3d).hasz)
- else:
- try:
- hexewkb = pnt_3d.hexewkb
- except GEOSException:
- pass
- else:
- self.fail('Should have raised GEOSException.')
-
- # Same for EWKB.
- self.assertEqual(buffer(a2b_hex(hexewkb_2d)), pnt_2d.ewkb)
- if GEOS_PREPARE:
- self.assertEqual(buffer(a2b_hex(hexewkb_3d)), pnt_3d.ewkb)
- else:
- try:
- ewkb = pnt_3d.ewkb
- except GEOSException:
- pass
- else:
- self.fail('Should have raised GEOSException')
-
- # Redundant sanity check.
- self.assertEqual(4326, GEOSGeometry(hexewkb_2d).srid)
-
- def test01c_kml(self):
- "Testing KML output."
- for tg in self.geometries.wkt_out:
- geom = fromstr(tg.wkt)
- kml = getattr(tg, 'kml', False)
- if kml: self.assertEqual(kml, geom.kml)
-
- def test01d_errors(self):
- "Testing the Error handlers."
- # string-based
- print "\nBEGIN - expecting GEOS_ERROR; safe to ignore.\n"
- for err in self.geometries.errors:
- try:
- g = fromstr(err.wkt)
- except (GEOSException, ValueError):
- pass
-
- # Bad WKB
- self.assertRaises(GEOSException, GEOSGeometry, buffer('0'))
-
- print "\nEND - expecting GEOS_ERROR; safe to ignore.\n"
-
- class NotAGeometry(object):
- pass
-
- # Some other object
- self.assertRaises(TypeError, GEOSGeometry, NotAGeometry())
- # None
- self.assertRaises(TypeError, GEOSGeometry, None)
-
- def test01e_wkb(self):
- "Testing WKB output."
- from binascii import b2a_hex
- for g in self.geometries.hex_wkt:
- geom = fromstr(g.wkt)
- wkb = geom.wkb
- self.assertEqual(b2a_hex(wkb).upper(), g.hex)
-
- def test01f_create_hex(self):
- "Testing creation from HEX."
- for g in self.geometries.hex_wkt:
- geom_h = GEOSGeometry(g.hex)
- # we need to do this so decimal places get normalised
- geom_t = fromstr(g.wkt)
- self.assertEqual(geom_t.wkt, geom_h.wkt)
-
- def test01g_create_wkb(self):
- "Testing creation from WKB."
- from binascii import a2b_hex
- for g in self.geometries.hex_wkt:
- wkb = buffer(a2b_hex(g.hex))
- geom_h = GEOSGeometry(wkb)
- # we need to do this so decimal places get normalised
- geom_t = fromstr(g.wkt)
- self.assertEqual(geom_t.wkt, geom_h.wkt)
-
- def test01h_ewkt(self):
- "Testing EWKT."
- srid = 32140
- for p in self.geometries.polygons:
- ewkt = 'SRID=%d;%s' % (srid, p.wkt)
- poly = fromstr(ewkt)
- self.assertEqual(srid, poly.srid)
- self.assertEqual(srid, poly.shell.srid)
- self.assertEqual(srid, fromstr(poly.ewkt).srid) # Checking export
-
- def test01i_json(self):
- "Testing GeoJSON input/output (via GDAL)."
- if not gdal or not gdal.GEOJSON: return
- for g in self.geometries.json_geoms:
- geom = GEOSGeometry(g.wkt)
- if not hasattr(g, 'not_equal'):
- self.assertEqual(g.json, geom.json)
- self.assertEqual(g.json, geom.geojson)
- self.assertEqual(GEOSGeometry(g.wkt), GEOSGeometry(geom.json))
-
- def test01k_fromfile(self):
- "Testing the fromfile() factory."
- from StringIO import StringIO
- ref_pnt = GEOSGeometry('POINT(5 23)')
-
- wkt_f = StringIO()
- wkt_f.write(ref_pnt.wkt)
- wkb_f = StringIO()
- wkb_f.write(str(ref_pnt.wkb))
-
- # Other tests use `fromfile()` on string filenames so those
- # aren't tested here.
- for fh in (wkt_f, wkb_f):
- fh.seek(0)
- pnt = fromfile(fh)
- self.assertEqual(ref_pnt, pnt)
-
- def test01k_eq(self):
- "Testing equivalence."
- p = fromstr('POINT(5 23)')
- self.assertEqual(p, p.wkt)
- self.assertNotEqual(p, 'foo')
- ls = fromstr('LINESTRING(0 0, 1 1, 5 5)')
- self.assertEqual(ls, ls.wkt)
- self.assertNotEqual(p, 'bar')
- # Error shouldn't be raise on equivalence testing with
- # an invalid type.
- for g in (p, ls):
- self.assertNotEqual(g, None)
- self.assertNotEqual(g, {'foo' : 'bar'})
- self.assertNotEqual(g, False)
-
- def test02a_points(self):
- "Testing Point objects."
- prev = fromstr('POINT(0 0)')
- for p in self.geometries.points:
- # Creating the point from the WKT
- pnt = fromstr(p.wkt)
- self.assertEqual(pnt.geom_type, 'Point')
- self.assertEqual(pnt.geom_typeid, 0)
- self.assertEqual(p.x, pnt.x)
- self.assertEqual(p.y, pnt.y)
- self.assertEqual(True, pnt == fromstr(p.wkt))
- self.assertEqual(False, pnt == prev)
-
- # Making sure that the point's X, Y components are what we expect
- self.assertAlmostEqual(p.x, pnt.tuple[0], 9)
- self.assertAlmostEqual(p.y, pnt.tuple[1], 9)
-
- # Testing the third dimension, and getting the tuple arguments
- if hasattr(p, 'z'):
- self.assertEqual(True, pnt.hasz)
- self.assertEqual(p.z, pnt.z)
- self.assertEqual(p.z, pnt.tuple[2], 9)
- tup_args = (p.x, p.y, p.z)
- set_tup1 = (2.71, 3.14, 5.23)
- set_tup2 = (5.23, 2.71, 3.14)
- else:
- self.assertEqual(False, pnt.hasz)
- self.assertEqual(None, pnt.z)
- tup_args = (p.x, p.y)
- set_tup1 = (2.71, 3.14)
- set_tup2 = (3.14, 2.71)
-
- # Centroid operation on point should be point itself
- self.assertEqual(p.centroid, pnt.centroid.tuple)
-
- # Now testing the different constructors
- pnt2 = Point(tup_args) # e.g., Point((1, 2))
- pnt3 = Point(*tup_args) # e.g., Point(1, 2)
- self.assertEqual(True, pnt == pnt2)
- self.assertEqual(True, pnt == pnt3)
-
- # Now testing setting the x and y
- pnt.y = 3.14
- pnt.x = 2.71
- self.assertEqual(3.14, pnt.y)
- self.assertEqual(2.71, pnt.x)
-
- # Setting via the tuple/coords property
- pnt.tuple = set_tup1
- self.assertEqual(set_tup1, pnt.tuple)
- pnt.coords = set_tup2
- self.assertEqual(set_tup2, pnt.coords)
-
- prev = pnt # setting the previous geometry
-
- def test02b_multipoints(self):
- "Testing MultiPoint objects."
- for mp in self.geometries.multipoints:
- mpnt = fromstr(mp.wkt)
- self.assertEqual(mpnt.geom_type, 'MultiPoint')
- self.assertEqual(mpnt.geom_typeid, 4)
-
- self.assertAlmostEqual(mp.centroid[0], mpnt.centroid.tuple[0], 9)
- self.assertAlmostEqual(mp.centroid[1], mpnt.centroid.tuple[1], 9)
-
- self.assertRaises(GEOSIndexError, mpnt.__getitem__, len(mpnt))
- self.assertEqual(mp.centroid, mpnt.centroid.tuple)
- self.assertEqual(mp.coords, tuple(m.tuple for m in mpnt))
- for p in mpnt:
- self.assertEqual(p.geom_type, 'Point')
- self.assertEqual(p.geom_typeid, 0)
- self.assertEqual(p.empty, False)
- self.assertEqual(p.valid, True)
-
- def test03a_linestring(self):
- "Testing LineString objects."
- prev = fromstr('POINT(0 0)')
- for l in self.geometries.linestrings:
- ls = fromstr(l.wkt)
- self.assertEqual(ls.geom_type, 'LineString')
- self.assertEqual(ls.geom_typeid, 1)
- self.assertEqual(ls.empty, False)
- self.assertEqual(ls.ring, False)
- if hasattr(l, 'centroid'):
- self.assertEqual(l.centroid, ls.centroid.tuple)
- if hasattr(l, 'tup'):
- self.assertEqual(l.tup, ls.tuple)
-
- self.assertEqual(True, ls == fromstr(l.wkt))
- self.assertEqual(False, ls == prev)
- self.assertRaises(GEOSIndexError, ls.__getitem__, len(ls))
- prev = ls
-
- # Creating a LineString from a tuple, list, and numpy array
- self.assertEqual(ls, LineString(ls.tuple)) # tuple
- self.assertEqual(ls, LineString(*ls.tuple)) # as individual arguments
- self.assertEqual(ls, LineString([list(tup) for tup in ls.tuple])) # as list
- self.assertEqual(ls.wkt, LineString(*tuple(Point(tup) for tup in ls.tuple)).wkt) # Point individual arguments
- if numpy: self.assertEqual(ls, LineString(numpy.array(ls.tuple))) # as numpy array
-
- def test03b_multilinestring(self):
- "Testing MultiLineString objects."
- prev = fromstr('POINT(0 0)')
- for l in self.geometries.multilinestrings:
- ml = fromstr(l.wkt)
- self.assertEqual(ml.geom_type, 'MultiLineString')
- self.assertEqual(ml.geom_typeid, 5)
-
- self.assertAlmostEqual(l.centroid[0], ml.centroid.x, 9)
- self.assertAlmostEqual(l.centroid[1], ml.centroid.y, 9)
-
- self.assertEqual(True, ml == fromstr(l.wkt))
- self.assertEqual(False, ml == prev)
- prev = ml
-
- for ls in ml:
- self.assertEqual(ls.geom_type, 'LineString')
- self.assertEqual(ls.geom_typeid, 1)
- self.assertEqual(ls.empty, False)
-
- self.assertRaises(GEOSIndexError, ml.__getitem__, len(ml))
- self.assertEqual(ml.wkt, MultiLineString(*tuple(s.clone() for s in ml)).wkt)
- self.assertEqual(ml, MultiLineString(*tuple(LineString(s.tuple) for s in ml)))
-
- def test04_linearring(self):
- "Testing LinearRing objects."
- for rr in self.geometries.linearrings:
- lr = fromstr(rr.wkt)
- self.assertEqual(lr.geom_type, 'LinearRing')
- self.assertEqual(lr.geom_typeid, 2)
- self.assertEqual(rr.n_p, len(lr))
- self.assertEqual(True, lr.valid)
- self.assertEqual(False, lr.empty)
-
- # Creating a LinearRing from a tuple, list, and numpy array
- self.assertEqual(lr, LinearRing(lr.tuple))
- self.assertEqual(lr, LinearRing(*lr.tuple))
- self.assertEqual(lr, LinearRing([list(tup) for tup in lr.tuple]))
- if numpy: self.assertEqual(lr, LinearRing(numpy.array(lr.tuple)))
-
- def test05a_polygons(self):
- "Testing Polygon objects."
-
- # Testing `from_bbox` class method
- bbox = (-180, -90, 180, 90)
- p = Polygon.from_bbox( bbox )
- self.assertEqual(bbox, p.extent)
-
- prev = fromstr('POINT(0 0)')
- for p in self.geometries.polygons:
- # Creating the Polygon, testing its properties.
- poly = fromstr(p.wkt)
- self.assertEqual(poly.geom_type, 'Polygon')
- self.assertEqual(poly.geom_typeid, 3)
- self.assertEqual(poly.empty, False)
- self.assertEqual(poly.ring, False)
- self.assertEqual(p.n_i, poly.num_interior_rings)
- self.assertEqual(p.n_i + 1, len(poly)) # Testing __len__
- self.assertEqual(p.n_p, poly.num_points)
-
- # Area & Centroid
- self.assertAlmostEqual(p.area, poly.area, 9)
- self.assertAlmostEqual(p.centroid[0], poly.centroid.tuple[0], 9)
- self.assertAlmostEqual(p.centroid[1], poly.centroid.tuple[1], 9)
-
- # Testing the geometry equivalence
- self.assertEqual(True, poly == fromstr(p.wkt))
- self.assertEqual(False, poly == prev) # Should not be equal to previous geometry
- self.assertEqual(True, poly != prev)
-
- # Testing the exterior ring
- ring = poly.exterior_ring
- self.assertEqual(ring.geom_type, 'LinearRing')
- self.assertEqual(ring.geom_typeid, 2)
- if p.ext_ring_cs:
- self.assertEqual(p.ext_ring_cs, ring.tuple)
- self.assertEqual(p.ext_ring_cs, poly[0].tuple) # Testing __getitem__
-
- # Testing __getitem__ and __setitem__ on invalid indices
- self.assertRaises(GEOSIndexError, poly.__getitem__, len(poly))
- self.assertRaises(GEOSIndexError, poly.__setitem__, len(poly), False)
- self.assertRaises(GEOSIndexError, poly.__getitem__, -1 * len(poly) - 1)
-
- # Testing __iter__
- for r in poly:
- self.assertEqual(r.geom_type, 'LinearRing')
- self.assertEqual(r.geom_typeid, 2)
-
- # Testing polygon construction.
- self.assertRaises(TypeError, Polygon.__init__, 0, [1, 2, 3])
- self.assertRaises(TypeError, Polygon.__init__, 'foo')
-
- # Polygon(shell, (hole1, ... holeN))
- rings = tuple(r for r in poly)
- self.assertEqual(poly, Polygon(rings[0], rings[1:]))
-
- # Polygon(shell_tuple, hole_tuple1, ... , hole_tupleN)
- ring_tuples = tuple(r.tuple for r in poly)
- self.assertEqual(poly, Polygon(*ring_tuples))
-
- # Constructing with tuples of LinearRings.
- self.assertEqual(poly.wkt, Polygon(*tuple(r for r in poly)).wkt)
- self.assertEqual(poly.wkt, Polygon(*tuple(LinearRing(r.tuple) for r in poly)).wkt)
-
- def test05b_multipolygons(self):
- "Testing MultiPolygon objects."
- print "\nBEGIN - expecting GEOS_NOTICE; safe to ignore.\n"
- prev = fromstr('POINT (0 0)')
- for mp in self.geometries.multipolygons:
- mpoly = fromstr(mp.wkt)
- self.assertEqual(mpoly.geom_type, 'MultiPolygon')
- self.assertEqual(mpoly.geom_typeid, 6)
- self.assertEqual(mp.valid, mpoly.valid)
-
- if mp.valid:
- self.assertEqual(mp.num_geom, mpoly.num_geom)
- self.assertEqual(mp.n_p, mpoly.num_coords)
- self.assertEqual(mp.num_geom, len(mpoly))
- self.assertRaises(GEOSIndexError, mpoly.__getitem__, len(mpoly))
- for p in mpoly:
- self.assertEqual(p.geom_type, 'Polygon')
- self.assertEqual(p.geom_typeid, 3)
- self.assertEqual(p.valid, True)
- self.assertEqual(mpoly.wkt, MultiPolygon(*tuple(poly.clone() for poly in mpoly)).wkt)
-
- print "\nEND - expecting GEOS_NOTICE; safe to ignore.\n"
-
- def test06a_memory_hijinks(self):
- "Testing Geometry __del__() on rings and polygons."
- #### Memory issues with rings and polygons
-
- # These tests are needed to ensure sanity with writable geometries.
-
- # Getting a polygon with interior rings, and pulling out the interior rings
- poly = fromstr(self.geometries.polygons[1].wkt)
- ring1 = poly[0]
- ring2 = poly[1]
-
- # These deletes should be 'harmless' since they are done on child geometries
- del ring1
- del ring2
- ring1 = poly[0]
- ring2 = poly[1]
-
- # Deleting the polygon
- del poly
-
- # Access to these rings is OK since they are clones.
- s1, s2 = str(ring1), str(ring2)
-
- def test08_coord_seq(self):
- "Testing Coordinate Sequence objects."
- for p in self.geometries.polygons:
- if p.ext_ring_cs:
- # Constructing the polygon and getting the coordinate sequence
- poly = fromstr(p.wkt)
- cs = poly.exterior_ring.coord_seq
-
- self.assertEqual(p.ext_ring_cs, cs.tuple) # done in the Polygon test too.
- self.assertEqual(len(p.ext_ring_cs), len(cs)) # Making sure __len__ works
-
- # Checks __getitem__ and __setitem__
- for i in xrange(len(p.ext_ring_cs)):
- c1 = p.ext_ring_cs[i] # Expected value
- c2 = cs[i] # Value from coordseq
- self.assertEqual(c1, c2)
-
- # Constructing the test value to set the coordinate sequence with
- if len(c1) == 2: tset = (5, 23)
- else: tset = (5, 23, 8)
- cs[i] = tset
-
- # Making sure every set point matches what we expect
- for j in range(len(tset)):
- cs[i] = tset
- self.assertEqual(tset[j], cs[i][j])
-
- def test09_relate_pattern(self):
- "Testing relate() and relate_pattern()."
- g = fromstr('POINT (0 0)')
- self.assertRaises(GEOSException, g.relate_pattern, 0, 'invalid pattern, yo')
- for rg in self.geometries.relate_geoms:
- a = fromstr(rg.wkt_a)
- b = fromstr(rg.wkt_b)
- self.assertEqual(rg.result, a.relate_pattern(b, rg.pattern))
- self.assertEqual(rg.pattern, a.relate(b))
-
- def test10_intersection(self):
- "Testing intersects() and intersection()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = fromstr(self.geometries.topology_geoms[i].wkt_a)
- b = fromstr(self.geometries.topology_geoms[i].wkt_b)
- i1 = fromstr(self.geometries.intersect_geoms[i].wkt)
- self.assertEqual(True, a.intersects(b))
- i2 = a.intersection(b)
- self.assertEqual(i1, i2)
- self.assertEqual(i1, a & b) # __and__ is intersection operator
- a &= b # testing __iand__
- self.assertEqual(i1, a)
-
- def test11_union(self):
- "Testing union()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = fromstr(self.geometries.topology_geoms[i].wkt_a)
- b = fromstr(self.geometries.topology_geoms[i].wkt_b)
- u1 = fromstr(self.geometries.union_geoms[i].wkt)
- u2 = a.union(b)
- self.assertEqual(u1, u2)
- self.assertEqual(u1, a | b) # __or__ is union operator
- a |= b # testing __ior__
- self.assertEqual(u1, a)
-
- def test12_difference(self):
- "Testing difference()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = fromstr(self.geometries.topology_geoms[i].wkt_a)
- b = fromstr(self.geometries.topology_geoms[i].wkt_b)
- d1 = fromstr(self.geometries.diff_geoms[i].wkt)
- d2 = a.difference(b)
- self.assertEqual(d1, d2)
- self.assertEqual(d1, a - b) # __sub__ is difference operator
- a -= b # testing __isub__
- self.assertEqual(d1, a)
-
- def test13_symdifference(self):
- "Testing sym_difference()."
- for i in xrange(len(self.geometries.topology_geoms)):
- a = fromstr(self.geometries.topology_geoms[i].wkt_a)
- b = fromstr(self.geometries.topology_geoms[i].wkt_b)
- d1 = fromstr(self.geometries.sdiff_geoms[i].wkt)
- d2 = a.sym_difference(b)
- self.assertEqual(d1, d2)
- self.assertEqual(d1, a ^ b) # __xor__ is symmetric difference operator
- a ^= b # testing __ixor__
- self.assertEqual(d1, a)
-
- def test14_buffer(self):
- "Testing buffer()."
- for bg in self.geometries.buffer_geoms:
- g = fromstr(bg.wkt)
-
- # The buffer we expect
- exp_buf = fromstr(bg.buffer_wkt)
- quadsegs = bg.quadsegs
- width = bg.width
-
- # Can't use a floating-point for the number of quadsegs.
- self.assertRaises(ctypes.ArgumentError, g.buffer, width, float(quadsegs))
-
- # Constructing our buffer
- buf = g.buffer(width, quadsegs)
- self.assertEqual(exp_buf.num_coords, buf.num_coords)
- self.assertEqual(len(exp_buf), len(buf))
-
- # Now assuring that each point in the buffer is almost equal
- for j in xrange(len(exp_buf)):
- exp_ring = exp_buf[j]
- buf_ring = buf[j]
- self.assertEqual(len(exp_ring), len(buf_ring))
- for k in xrange(len(exp_ring)):
- # Asserting the X, Y of each point are almost equal (due to floating point imprecision)
- self.assertAlmostEqual(exp_ring[k][0], buf_ring[k][0], 9)
- self.assertAlmostEqual(exp_ring[k][1], buf_ring[k][1], 9)
-
- def test15_srid(self):
- "Testing the SRID property and keyword."
- # Testing SRID keyword on Point
- pnt = Point(5, 23, srid=4326)
- self.assertEqual(4326, pnt.srid)
- pnt.srid = 3084
- self.assertEqual(3084, pnt.srid)
- self.assertRaises(ctypes.ArgumentError, pnt.set_srid, '4326')
-
- # Testing SRID keyword on fromstr(), and on Polygon rings.
- poly = fromstr(self.geometries.polygons[1].wkt, srid=4269)
- self.assertEqual(4269, poly.srid)
- for ring in poly: self.assertEqual(4269, ring.srid)
- poly.srid = 4326
- self.assertEqual(4326, poly.shell.srid)
-
- # Testing SRID keyword on GeometryCollection
- gc = GeometryCollection(Point(5, 23), LineString((0, 0), (1.5, 1.5), (3, 3)), srid=32021)
- self.assertEqual(32021, gc.srid)
- for i in range(len(gc)): self.assertEqual(32021, gc[i].srid)
-
- # GEOS may get the SRID from HEXEWKB
- # 'POINT(5 23)' at SRID=4326 in hex form -- obtained from PostGIS
- # using `SELECT GeomFromText('POINT (5 23)', 4326);`.
- hex = '0101000020E610000000000000000014400000000000003740'
- p1 = fromstr(hex)
- self.assertEqual(4326, p1.srid)
-
- # In GEOS 3.0.0rc1-4 when the EWKB and/or HEXEWKB is exported,
- # the SRID information is lost and set to -1 -- this is not a
- # problem on the 3.0.0 version (another reason to upgrade).
- exp_srid = self.null_srid
-
- p2 = fromstr(p1.hex)
- self.assertEqual(exp_srid, p2.srid)
- p3 = fromstr(p1.hex, srid=-1) # -1 is intended.
- self.assertEqual(-1, p3.srid)
-
- def test16_mutable_geometries(self):
- "Testing the mutability of Polygons and Geometry Collections."
- ### Testing the mutability of Polygons ###
- for p in self.geometries.polygons:
- poly = fromstr(p.wkt)
-
- # Should only be able to use __setitem__ with LinearRing geometries.
- self.assertRaises(TypeError, poly.__setitem__, 0, LineString((1, 1), (2, 2)))
-
- # Constructing the new shell by adding 500 to every point in the old shell.
- shell_tup = poly.shell.tuple
- new_coords = []
- for point in shell_tup: new_coords.append((point[0] + 500., point[1] + 500.))
- new_shell = LinearRing(*tuple(new_coords))
-
- # Assigning polygon's exterior ring w/the new shell
- poly.exterior_ring = new_shell
- s = str(new_shell) # new shell is still accessible
- self.assertEqual(poly.exterior_ring, new_shell)
- self.assertEqual(poly[0], new_shell)
-
- ### Testing the mutability of Geometry Collections
- for tg in self.geometries.multipoints:
- mp = fromstr(tg.wkt)
- for i in range(len(mp)):
- # Creating a random point.
- pnt = mp[i]
- new = Point(random.randint(1, 100), random.randint(1, 100))
- # Testing the assignment
- mp[i] = new
- s = str(new) # what was used for the assignment is still accessible
- self.assertEqual(mp[i], new)
- self.assertEqual(mp[i].wkt, new.wkt)
- self.assertNotEqual(pnt, mp[i])
-
- # MultiPolygons involve much more memory management because each
- # Polygon w/in the collection has its own rings.
- for tg in self.geometries.multipolygons:
- mpoly = fromstr(tg.wkt)
- for i in xrange(len(mpoly)):
- poly = mpoly[i]
- old_poly = mpoly[i]
- # Offsetting the each ring in the polygon by 500.
- for j in xrange(len(poly)):
- r = poly[j]
- for k in xrange(len(r)): r[k] = (r[k][0] + 500., r[k][1] + 500.)
- poly[j] = r
-
- self.assertNotEqual(mpoly[i], poly)
- # Testing the assignment
- mpoly[i] = poly
- s = str(poly) # Still accessible
- self.assertEqual(mpoly[i], poly)
- self.assertNotEqual(mpoly[i], old_poly)
-
- # Extreme (!!) __setitem__ -- no longer works, have to detect
- # in the first object that __setitem__ is called in the subsequent
- # objects -- maybe mpoly[0, 0, 0] = (3.14, 2.71)?
- #mpoly[0][0][0] = (3.14, 2.71)
- #self.assertEqual((3.14, 2.71), mpoly[0][0][0])
- # Doing it more slowly..
- #self.assertEqual((3.14, 2.71), mpoly[0].shell[0])
- #del mpoly
-
- def test17_threed(self):
- "Testing three-dimensional geometries."
- # Testing a 3D Point
- pnt = Point(2, 3, 8)
- self.assertEqual((2.,3.,8.), pnt.coords)
- self.assertRaises(TypeError, pnt.set_coords, (1.,2.))
- pnt.coords = (1.,2.,3.)
- self.assertEqual((1.,2.,3.), pnt.coords)
-
- # Testing a 3D LineString
- ls = LineString((2., 3., 8.), (50., 250., -117.))
- self.assertEqual(((2.,3.,8.), (50.,250.,-117.)), ls.tuple)
- self.assertRaises(TypeError, ls.__setitem__, 0, (1.,2.))
- ls[0] = (1.,2.,3.)
- self.assertEqual((1.,2.,3.), ls[0])
-
- def test18_distance(self):
- "Testing the distance() function."
- # Distance to self should be 0.
- pnt = Point(0, 0)
- self.assertEqual(0.0, pnt.distance(Point(0, 0)))
-
- # Distance should be 1
- self.assertEqual(1.0, pnt.distance(Point(0, 1)))
-
- # Distance should be ~ sqrt(2)
- self.assertAlmostEqual(1.41421356237, pnt.distance(Point(1, 1)), 11)
-
- # Distances are from the closest vertex in each geometry --
- # should be 3 (distance from (2, 2) to (5, 2)).
- ls1 = LineString((0, 0), (1, 1), (2, 2))
- ls2 = LineString((5, 2), (6, 1), (7, 0))
- self.assertEqual(3, ls1.distance(ls2))
-
- def test19_length(self):
- "Testing the length property."
- # Points have 0 length.
- pnt = Point(0, 0)
- self.assertEqual(0.0, pnt.length)
-
- # Should be ~ sqrt(2)
- ls = LineString((0, 0), (1, 1))
- self.assertAlmostEqual(1.41421356237, ls.length, 11)
-
- # Should be circumfrence of Polygon
- poly = Polygon(LinearRing((0, 0), (0, 1), (1, 1), (1, 0), (0, 0)))
- self.assertEqual(4.0, poly.length)
-
- # Should be sum of each element's length in collection.
- mpoly = MultiPolygon(poly.clone(), poly)
- self.assertEqual(8.0, mpoly.length)
-
- def test20a_emptyCollections(self):
- "Testing empty geometries and collections."
- gc1 = GeometryCollection([])
- gc2 = fromstr('GEOMETRYCOLLECTION EMPTY')
- pnt = fromstr('POINT EMPTY')
- ls = fromstr('LINESTRING EMPTY')
- poly = fromstr('POLYGON EMPTY')
- mls = fromstr('MULTILINESTRING EMPTY')
- mpoly1 = fromstr('MULTIPOLYGON EMPTY')
- mpoly2 = MultiPolygon(())
-
- for g in [gc1, gc2, pnt, ls, poly, mls, mpoly1, mpoly2]:
- self.assertEqual(True, g.empty)
-
- # Testing len() and num_geom.
- if isinstance(g, Polygon):
- self.assertEqual(1, len(g)) # Has one empty linear ring
- self.assertEqual(1, g.num_geom)
- self.assertEqual(0, len(g[0]))
- elif isinstance(g, (Point, LineString)):
- self.assertEqual(1, g.num_geom)
- self.assertEqual(0, len(g))
- else:
- self.assertEqual(0, g.num_geom)
- self.assertEqual(0, len(g))
-
- # Testing __getitem__ (doesn't work on Point or Polygon)
- if isinstance(g, Point):
- self.assertRaises(GEOSIndexError, g.get_x)
- elif isinstance(g, Polygon):
- lr = g.shell
- self.assertEqual('LINEARRING EMPTY', lr.wkt)
- self.assertEqual(0, len(lr))
- self.assertEqual(True, lr.empty)
- self.assertRaises(GEOSIndexError, lr.__getitem__, 0)
- else:
- self.assertRaises(GEOSIndexError, g.__getitem__, 0)
-
- def test20b_collections_of_collections(self):
- "Testing GeometryCollection handling of other collections."
- # Creating a GeometryCollection WKT string composed of other
- # collections and polygons.
- coll = [mp.wkt for mp in self.geometries.multipolygons if mp.valid]
- coll.extend([mls.wkt for mls in self.geometries.multilinestrings])
- coll.extend([p.wkt for p in self.geometries.polygons])
- coll.extend([mp.wkt for mp in self.geometries.multipoints])
- gc_wkt = 'GEOMETRYCOLLECTION(%s)' % ','.join(coll)
-
- # Should construct ok from WKT
- gc1 = GEOSGeometry(gc_wkt)
-
- # Should also construct ok from individual geometry arguments.
- gc2 = GeometryCollection(*tuple(g for g in gc1))
-
- # And, they should be equal.
- self.assertEqual(gc1, gc2)
-
- def test21_test_gdal(self):
- "Testing `ogr` and `srs` properties."
- if not gdal.HAS_GDAL: return
- g1 = fromstr('POINT(5 23)')
- self.assertEqual(True, isinstance(g1.ogr, gdal.OGRGeometry))
- self.assertEqual(g1.srs, None)
-
- g2 = fromstr('LINESTRING(0 0, 5 5, 23 23)', srid=4326)
- self.assertEqual(True, isinstance(g2.ogr, gdal.OGRGeometry))
- self.assertEqual(True, isinstance(g2.srs, gdal.SpatialReference))
- self.assertEqual(g2.hex, g2.ogr.hex)
- self.assertEqual('WGS 84', g2.srs.name)
-
- def test22_copy(self):
- "Testing use with the Python `copy` module."
- import django.utils.copycompat as copy
- poly = GEOSGeometry('POLYGON((0 0, 0 23, 23 23, 23 0, 0 0), (5 5, 5 10, 10 10, 10 5, 5 5))')
- cpy1 = copy.copy(poly)
- cpy2 = copy.deepcopy(poly)
- self.assertNotEqual(poly._ptr, cpy1._ptr)
- self.assertNotEqual(poly._ptr, cpy2._ptr)
-
- def test23_transform(self):
- "Testing `transform` method."
- if not gdal.HAS_GDAL: return
- orig = GEOSGeometry('POINT (-104.609 38.255)', 4326)
- trans = GEOSGeometry('POINT (992385.4472045 481455.4944650)', 2774)
-
- # Using a srid, a SpatialReference object, and a CoordTransform object
- # for transformations.
- t1, t2, t3 = orig.clone(), orig.clone(), orig.clone()
- t1.transform(trans.srid)
- t2.transform(gdal.SpatialReference('EPSG:2774'))
- ct = gdal.CoordTransform(gdal.SpatialReference('WGS84'), gdal.SpatialReference(2774))
- t3.transform(ct)
-
- # Testing use of the `clone` keyword.
- k1 = orig.clone()
- k2 = k1.transform(trans.srid, clone=True)
- self.assertEqual(k1, orig)
- self.assertNotEqual(k1, k2)
-
- prec = 3
- for p in (t1, t2, t3, k2):
- self.assertAlmostEqual(trans.x, p.x, prec)
- self.assertAlmostEqual(trans.y, p.y, prec)
-
- def test24_extent(self):
- "Testing `extent` method."
- # The xmin, ymin, xmax, ymax of the MultiPoint should be returned.
- mp = MultiPoint(Point(5, 23), Point(0, 0), Point(10, 50))
- self.assertEqual((0.0, 0.0, 10.0, 50.0), mp.extent)
- pnt = Point(5.23, 17.8)
- # Extent of points is just the point itself repeated.
- self.assertEqual((5.23, 17.8, 5.23, 17.8), pnt.extent)
- # Testing on the 'real world' Polygon.
- poly = fromstr(self.geometries.polygons[3].wkt)
- ring = poly.shell
- x, y = ring.x, ring.y
- xmin, ymin = min(x), min(y)
- xmax, ymax = max(x), max(y)
- self.assertEqual((xmin, ymin, xmax, ymax), poly.extent)
-
- def test25_pickle(self):
- "Testing pickling and unpickling support."
- # Using both pickle and cPickle -- just 'cause.
- import pickle, cPickle
-
- # Creating a list of test geometries for pickling,
- # and setting the SRID on some of them.
- def get_geoms(lst, srid=None):
- return [GEOSGeometry(tg.wkt, srid) for tg in lst]
- tgeoms = get_geoms(self.geometries.points)
- tgeoms.extend(get_geoms(self.geometries.multilinestrings, 4326))
- tgeoms.extend(get_geoms(self.geometries.polygons, 3084))
- tgeoms.extend(get_geoms(self.geometries.multipolygons, 900913))
-
- # The SRID won't be exported in GEOS 3.0 release candidates.
- no_srid = self.null_srid == -1
- for geom in tgeoms:
- s1, s2 = cPickle.dumps(geom), pickle.dumps(geom)
- g1, g2 = cPickle.loads(s1), pickle.loads(s2)
- for tmpg in (g1, g2):
- self.assertEqual(geom, tmpg)
- if not no_srid: self.assertEqual(geom.srid, tmpg.srid)
-
- def test26_prepared(self):
- "Testing PreparedGeometry support."
- if not GEOS_PREPARE: return
- # Creating a simple multipolygon and getting a prepared version.
- mpoly = GEOSGeometry('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5)))')
- prep = mpoly.prepared
-
- # A set of test points.
- pnts = [Point(5, 5), Point(7.5, 7.5), Point(2.5, 7.5)]
- covers = [True, True, False] # No `covers` op for regular GEOS geoms.
- for pnt, c in zip(pnts, covers):
- # Results should be the same (but faster)
- self.assertEqual(mpoly.contains(pnt), prep.contains(pnt))
- self.assertEqual(mpoly.intersects(pnt), prep.intersects(pnt))
- self.assertEqual(c, prep.covers(pnt))
-
- def test26_line_merge(self):
- "Testing line merge support"
- ref_geoms = (fromstr('LINESTRING(1 1, 1 1, 3 3)'),
- fromstr('MULTILINESTRING((1 1, 3 3), (3 3, 4 2))'),
- )
- ref_merged = (fromstr('LINESTRING(1 1, 3 3)'),
- fromstr('LINESTRING (1 1, 3 3, 4 2)'),
- )
- for geom, merged in zip(ref_geoms, ref_merged):
- self.assertEqual(merged, geom.merged)
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(GEOSTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/geos/tests/test_geos_mutation.py b/parts/django/django/contrib/gis/geos/tests/test_geos_mutation.py
deleted file mode 100644
index 28f484d..0000000
--- a/parts/django/django/contrib/gis/geos/tests/test_geos_mutation.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Copyright (c) 2008-2009 Aryeh Leib Taurog, all rights reserved.
-# Modified from original contribution by Aryeh Leib Taurog, which was
-# released under the New BSD license.
-import unittest
-
-import django.utils.copycompat as copy
-
-from django.contrib.gis.geos import *
-from django.contrib.gis.geos.error import GEOSIndexError
-
-def getItem(o,i): return o[i]
-def delItem(o,i): del o[i]
-def setItem(o,i,v): o[i] = v
-
-def api_get_distance(x): return x.distance(Point(-200,-200))
-def api_get_buffer(x): return x.buffer(10)
-def api_get_geom_typeid(x): return x.geom_typeid
-def api_get_num_coords(x): return x.num_coords
-def api_get_centroid(x): return x.centroid
-def api_get_empty(x): return x.empty
-def api_get_valid(x): return x.valid
-def api_get_simple(x): return x.simple
-def api_get_ring(x): return x.ring
-def api_get_boundary(x): return x.boundary
-def api_get_convex_hull(x): return x.convex_hull
-def api_get_extent(x): return x.extent
-def api_get_area(x): return x.area
-def api_get_length(x): return x.length
-
-geos_function_tests = [ val for name, val in vars().items()
- if hasattr(val, '__call__')
- and name.startswith('api_get_') ]
-
-class GEOSMutationTest(unittest.TestCase):
- """
- Tests Pythonic Mutability of Python GEOS geometry wrappers
- get/set/delitem on a slice, normal list methods
- """
-
- def test00_GEOSIndexException(self):
- 'Testing Geometry GEOSIndexError'
- p = Point(1,2)
- for i in range(-2,2): p._checkindex(i)
- self.assertRaises(GEOSIndexError, p._checkindex, 2)
- self.assertRaises(GEOSIndexError, p._checkindex, -3)
-
- def test01_PointMutations(self):
- 'Testing Point mutations'
- for p in (Point(1,2,3), fromstr('POINT (1 2 3)')):
- self.assertEqual(p._get_single_external(1), 2.0, 'Point _get_single_external')
-
- # _set_single
- p._set_single(0,100)
- self.assertEqual(p.coords, (100.0,2.0,3.0), 'Point _set_single')
-
- # _set_list
- p._set_list(2,(50,3141))
- self.assertEqual(p.coords, (50.0,3141.0), 'Point _set_list')
-
- def test02_PointExceptions(self):
- 'Testing Point exceptions'
- self.assertRaises(TypeError, Point, range(1))
- self.assertRaises(TypeError, Point, range(4))
-
- def test03_PointApi(self):
- 'Testing Point API'
- q = Point(4,5,3)
- for p in (Point(1,2,3), fromstr('POINT (1 2 3)')):
- p[0:2] = [4,5]
- for f in geos_function_tests:
- self.assertEqual(f(q), f(p), 'Point ' + f.__name__)
-
- def test04_LineStringMutations(self):
- 'Testing LineString mutations'
- for ls in (LineString((1,0),(4,1),(6,-1)),
- fromstr('LINESTRING (1 0,4 1,6 -1)')):
- self.assertEqual(ls._get_single_external(1), (4.0,1.0), 'LineString _get_single_external')
-
- # _set_single
- ls._set_single(0,(-50,25))
- self.assertEqual(ls.coords, ((-50.0,25.0),(4.0,1.0),(6.0,-1.0)), 'LineString _set_single')
-
- # _set_list
- ls._set_list(2, ((-50.0,25.0),(6.0,-1.0)))
- self.assertEqual(ls.coords, ((-50.0,25.0),(6.0,-1.0)), 'LineString _set_list')
-
- lsa = LineString(ls.coords)
- for f in geos_function_tests:
- self.assertEqual(f(lsa), f(ls), 'LineString ' + f.__name__)
-
- def test05_Polygon(self):
- 'Testing Polygon mutations'
- for pg in (Polygon(((1,0),(4,1),(6,-1),(8,10),(1,0)),
- ((5,4),(6,4),(6,3),(5,4))),
- fromstr('POLYGON ((1 0,4 1,6 -1,8 10,1 0),(5 4,6 4,6 3,5 4))')):
- self.assertEqual(pg._get_single_external(0),
- LinearRing((1,0),(4,1),(6,-1),(8,10),(1,0)),
- 'Polygon _get_single_external(0)')
- self.assertEqual(pg._get_single_external(1),
- LinearRing((5,4),(6,4),(6,3),(5,4)),
- 'Polygon _get_single_external(1)')
-
- # _set_list
- pg._set_list(2, (((1,2),(10,0),(12,9),(-1,15),(1,2)),
- ((4,2),(5,2),(5,3),(4,2))))
- self.assertEqual(pg.coords,
- (((1.0,2.0),(10.0,0.0),(12.0,9.0),(-1.0,15.0),(1.0,2.0)),
- ((4.0,2.0),(5.0,2.0),(5.0,3.0),(4.0,2.0))),
- 'Polygon _set_list')
-
- lsa = Polygon(*pg.coords)
- for f in geos_function_tests:
- self.assertEqual(f(lsa), f(pg), 'Polygon ' + f.__name__)
-
- def test06_Collection(self):
- 'Testing Collection mutations'
- for mp in (MultiPoint(*map(Point,((3,4),(-1,2),(5,-4),(2,8)))),
- fromstr('MULTIPOINT (3 4,-1 2,5 -4,2 8)')):
- self.assertEqual(mp._get_single_external(2), Point(5,-4), 'Collection _get_single_external')
-
- mp._set_list(3, map(Point,((5,5),(3,-2),(8,1))))
- self.assertEqual(mp.coords, ((5.0,5.0),(3.0,-2.0),(8.0,1.0)), 'Collection _set_list')
-
- lsa = MultiPoint(*map(Point,((5,5),(3,-2),(8,1))))
- for f in geos_function_tests:
- self.assertEqual(f(lsa), f(mp), 'MultiPoint ' + f.__name__)
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(GEOSMutationTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
-
-if __name__ == '__main__':
- run()
diff --git a/parts/django/django/contrib/gis/geos/tests/test_io.py b/parts/django/django/contrib/gis/geos/tests/test_io.py
deleted file mode 100644
index cc0f1ed..0000000
--- a/parts/django/django/contrib/gis/geos/tests/test_io.py
+++ /dev/null
@@ -1,112 +0,0 @@
-import binascii, ctypes, unittest
-from django.contrib.gis.geos import GEOSGeometry, WKTReader, WKTWriter, WKBReader, WKBWriter, geos_version_info
-
-class GEOSIOTest(unittest.TestCase):
-
- def test01_wktreader(self):
- # Creating a WKTReader instance
- wkt_r = WKTReader()
- wkt = 'POINT (5 23)'
-
- # read() should return a GEOSGeometry
- ref = GEOSGeometry(wkt)
- g1 = wkt_r.read(wkt)
- g2 = wkt_r.read(unicode(wkt))
-
- for geom in (g1, g2):
- self.assertEqual(ref, geom)
-
- # Should only accept basestring objects.
- self.assertRaises(TypeError, wkt_r.read, 1)
- self.assertRaises(TypeError, wkt_r.read, buffer('foo'))
-
- def test02_wktwriter(self):
- # Creating a WKTWriter instance, testing its ptr property.
- wkt_w = WKTWriter()
- self.assertRaises(TypeError, wkt_w._set_ptr, WKTReader.ptr_type())
-
- ref = GEOSGeometry('POINT (5 23)')
- ref_wkt = 'POINT (5.0000000000000000 23.0000000000000000)'
- self.assertEqual(ref_wkt, wkt_w.write(ref))
-
- def test03_wkbreader(self):
- # Creating a WKBReader instance
- wkb_r = WKBReader()
-
- hex = '000000000140140000000000004037000000000000'
- wkb = buffer(binascii.a2b_hex(hex))
- ref = GEOSGeometry(hex)
-
- # read() should return a GEOSGeometry on either a hex string or
- # a WKB buffer.
- g1 = wkb_r.read(wkb)
- g2 = wkb_r.read(hex)
- for geom in (g1, g2):
- self.assertEqual(ref, geom)
-
- bad_input = (1, 5.23, None, False)
- for bad_wkb in bad_input:
- self.assertRaises(TypeError, wkb_r.read, bad_wkb)
-
- def test04_wkbwriter(self):
- wkb_w = WKBWriter()
-
- # Representations of 'POINT (5 23)' in hex -- one normal and
- # the other with the byte order changed.
- g = GEOSGeometry('POINT (5 23)')
- hex1 = '010100000000000000000014400000000000003740'
- wkb1 = buffer(binascii.a2b_hex(hex1))
- hex2 = '000000000140140000000000004037000000000000'
- wkb2 = buffer(binascii.a2b_hex(hex2))
-
- self.assertEqual(hex1, wkb_w.write_hex(g))
- self.assertEqual(wkb1, wkb_w.write(g))
-
- # Ensuring bad byteorders are not accepted.
- for bad_byteorder in (-1, 2, 523, 'foo', None):
- # Equivalent of `wkb_w.byteorder = bad_byteorder`
- self.assertRaises(ValueError, wkb_w._set_byteorder, bad_byteorder)
-
- # Setting the byteorder to 0 (for Big Endian)
- wkb_w.byteorder = 0
- self.assertEqual(hex2, wkb_w.write_hex(g))
- self.assertEqual(wkb2, wkb_w.write(g))
-
- # Back to Little Endian
- wkb_w.byteorder = 1
-
- # Now, trying out the 3D and SRID flags.
- g = GEOSGeometry('POINT (5 23 17)')
- g.srid = 4326
-
- hex3d = '0101000080000000000000144000000000000037400000000000003140'
- wkb3d = buffer(binascii.a2b_hex(hex3d))
- hex3d_srid = '01010000A0E6100000000000000000144000000000000037400000000000003140'
- wkb3d_srid = buffer(binascii.a2b_hex(hex3d_srid))
-
- # Ensuring bad output dimensions are not accepted
- for bad_outdim in (-1, 0, 1, 4, 423, 'foo', None):
- # Equivalent of `wkb_w.outdim = bad_outdim`
- self.assertRaises(ValueError, wkb_w._set_outdim, bad_outdim)
-
- # These tests will fail on 3.0.0 because of a bug that was fixed in 3.1:
- # http://trac.osgeo.org/geos/ticket/216
- if not geos_version_info()['version'].startswith('3.0.'):
- # Now setting the output dimensions to be 3
- wkb_w.outdim = 3
-
- self.assertEqual(hex3d, wkb_w.write_hex(g))
- self.assertEqual(wkb3d, wkb_w.write(g))
-
- # Telling the WKBWriter to inlcude the srid in the representation.
- wkb_w.srid = True
- self.assertEqual(hex3d_srid, wkb_w.write_hex(g))
- self.assertEqual(wkb3d_srid, wkb_w.write(g))
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(GEOSIOTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/geos/tests/test_mutable_list.py b/parts/django/django/contrib/gis/geos/tests/test_mutable_list.py
deleted file mode 100644
index ebbe8ff..0000000
--- a/parts/django/django/contrib/gis/geos/tests/test_mutable_list.py
+++ /dev/null
@@ -1,398 +0,0 @@
-# Copyright (c) 2008-2009 Aryeh Leib Taurog, http://www.aryehleib.com
-# All rights reserved.
-#
-# Modified from original contribution by Aryeh Leib Taurog, which was
-# released under the New BSD license.
-import unittest
-from django.contrib.gis.geos.mutable_list import ListMixin
-
-class UserListA(ListMixin):
- _mytype = tuple
- def __init__(self, i_list, *args, **kwargs):
- self._list = self._mytype(i_list)
- super(UserListA, self).__init__(*args, **kwargs)
-
- def __len__(self): return len(self._list)
-
- def __str__(self): return str(self._list)
-
- def __repr__(self): return repr(self._list)
-
- def _set_list(self, length, items):
- # this would work:
- # self._list = self._mytype(items)
- # but then we wouldn't be testing length parameter
- itemList = ['x'] * length
- for i, v in enumerate(items):
- itemList[i] = v
-
- self._list = self._mytype(itemList)
-
- def _get_single_external(self, index):
- return self._list[index]
-
-class UserListB(UserListA):
- _mytype = list
-
- def _set_single(self, index, value):
- self._list[index] = value
-
-def nextRange(length):
- nextRange.start += 100
- return range(nextRange.start, nextRange.start + length)
-
-nextRange.start = 0
-
-class ListMixinTest(unittest.TestCase):
- """
- Tests base class ListMixin by comparing a list clone which is
- a ListMixin subclass with a real Python list.
- """
- limit = 3
- listType = UserListA
-
- def lists_of_len(self, length=None):
- if length is None: length = self.limit
- pl = range(length)
- return pl, self.listType(pl)
-
- def limits_plus(self, b):
- return range(-self.limit - b, self.limit + b)
-
- def step_range(self):
- return range(-1 - self.limit, 0) + range(1, 1 + self.limit)
-
- def test01_getslice(self):
- 'Slice retrieval'
- pl, ul = self.lists_of_len()
- for i in self.limits_plus(1):
- self.assertEqual(pl[i:], ul[i:], 'slice [%d:]' % (i))
- self.assertEqual(pl[:i], ul[:i], 'slice [:%d]' % (i))
-
- for j in self.limits_plus(1):
- self.assertEqual(pl[i:j], ul[i:j], 'slice [%d:%d]' % (i,j))
- for k in self.step_range():
- self.assertEqual(pl[i:j:k], ul[i:j:k], 'slice [%d:%d:%d]' % (i,j,k))
-
- for k in self.step_range():
- self.assertEqual(pl[i::k], ul[i::k], 'slice [%d::%d]' % (i,k))
- self.assertEqual(pl[:i:k], ul[:i:k], 'slice [:%d:%d]' % (i,k))
-
- for k in self.step_range():
- self.assertEqual(pl[::k], ul[::k], 'slice [::%d]' % (k))
-
- def test02_setslice(self):
- 'Slice assignment'
- def setfcn(x,i,j,k,L): x[i:j:k] = range(L)
- pl, ul = self.lists_of_len()
- for slen in range(self.limit + 1):
- ssl = nextRange(slen)
- ul[:] = ssl
- pl[:] = ssl
- self.assertEqual(pl, ul[:], 'set slice [:]')
-
- for i in self.limits_plus(1):
- ssl = nextRange(slen)
- ul[i:] = ssl
- pl[i:] = ssl
- self.assertEqual(pl, ul[:], 'set slice [%d:]' % (i))
-
- ssl = nextRange(slen)
- ul[:i] = ssl
- pl[:i] = ssl
- self.assertEqual(pl, ul[:], 'set slice [:%d]' % (i))
-
- for j in self.limits_plus(1):
- ssl = nextRange(slen)
- ul[i:j] = ssl
- pl[i:j] = ssl
- self.assertEqual(pl, ul[:], 'set slice [%d:%d]' % (i, j))
-
- for k in self.step_range():
- ssl = nextRange( len(ul[i:j:k]) )
- ul[i:j:k] = ssl
- pl[i:j:k] = ssl
- self.assertEqual(pl, ul[:], 'set slice [%d:%d:%d]' % (i, j, k))
-
- sliceLen = len(ul[i:j:k])
- self.assertRaises(ValueError, setfcn, ul, i, j, k, sliceLen + 1)
- if sliceLen > 2:
- self.assertRaises(ValueError, setfcn, ul, i, j, k, sliceLen - 1)
-
- for k in self.step_range():
- ssl = nextRange( len(ul[i::k]) )
- ul[i::k] = ssl
- pl[i::k] = ssl
- self.assertEqual(pl, ul[:], 'set slice [%d::%d]' % (i, k))
-
- ssl = nextRange( len(ul[:i:k]) )
- ul[:i:k] = ssl
- pl[:i:k] = ssl
- self.assertEqual(pl, ul[:], 'set slice [:%d:%d]' % (i, k))
-
- for k in self.step_range():
- ssl = nextRange(len(ul[::k]))
- ul[::k] = ssl
- pl[::k] = ssl
- self.assertEqual(pl, ul[:], 'set slice [::%d]' % (k))
-
-
- def test03_delslice(self):
- 'Delete slice'
- for Len in range(self.limit):
- pl, ul = self.lists_of_len(Len)
- del pl[:]
- del ul[:]
- self.assertEqual(pl[:], ul[:], 'del slice [:]')
- for i in range(-Len - 1, Len + 1):
- pl, ul = self.lists_of_len(Len)
- del pl[i:]
- del ul[i:]
- self.assertEqual(pl[:], ul[:], 'del slice [%d:]' % (i))
- pl, ul = self.lists_of_len(Len)
- del pl[:i]
- del ul[:i]
- self.assertEqual(pl[:], ul[:], 'del slice [:%d]' % (i))
- for j in range(-Len - 1, Len + 1):
- pl, ul = self.lists_of_len(Len)
- del pl[i:j]
- del ul[i:j]
- self.assertEqual(pl[:], ul[:], 'del slice [%d:%d]' % (i,j))
- for k in range(-Len - 1,0) + range(1,Len):
- pl, ul = self.lists_of_len(Len)
- del pl[i:j:k]
- del ul[i:j:k]
- self.assertEqual(pl[:], ul[:], 'del slice [%d:%d:%d]' % (i,j,k))
-
- for k in range(-Len - 1,0) + range(1,Len):
- pl, ul = self.lists_of_len(Len)
- del pl[:i:k]
- del ul[:i:k]
- self.assertEqual(pl[:], ul[:], 'del slice [:%d:%d]' % (i,k))
-
- pl, ul = self.lists_of_len(Len)
- del pl[i::k]
- del ul[i::k]
- self.assertEqual(pl[:], ul[:], 'del slice [%d::%d]' % (i,k))
-
- for k in range(-Len - 1,0) + range(1,Len):
- pl, ul = self.lists_of_len(Len)
- del pl[::k]
- del ul[::k]
- self.assertEqual(pl[:], ul[:], 'del slice [::%d]' % (k))
-
- def test04_get_set_del_single(self):
- 'Get/set/delete single item'
- pl, ul = self.lists_of_len()
- for i in self.limits_plus(0):
- self.assertEqual(pl[i], ul[i], 'get single item [%d]' % i)
-
- for i in self.limits_plus(0):
- pl, ul = self.lists_of_len()
- pl[i] = 100
- ul[i] = 100
- self.assertEqual(pl[:], ul[:], 'set single item [%d]' % i)
-
- for i in self.limits_plus(0):
- pl, ul = self.lists_of_len()
- del pl[i]
- del ul[i]
- self.assertEqual(pl[:], ul[:], 'del single item [%d]' % i)
-
- def test05_out_of_range_exceptions(self):
- 'Out of range exceptions'
- def setfcn(x, i): x[i] = 20
- def getfcn(x, i): return x[i]
- def delfcn(x, i): del x[i]
- pl, ul = self.lists_of_len()
- for i in (-1 - self.limit, self.limit):
- self.assertRaises(IndexError, setfcn, ul, i) # 'set index %d' % i)
- self.assertRaises(IndexError, getfcn, ul, i) # 'get index %d' % i)
- self.assertRaises(IndexError, delfcn, ul, i) # 'del index %d' % i)
-
- def test06_list_methods(self):
- 'List methods'
- pl, ul = self.lists_of_len()
- pl.append(40)
- ul.append(40)
- self.assertEqual(pl[:], ul[:], 'append')
-
- pl.extend(range(50,55))
- ul.extend(range(50,55))
- self.assertEqual(pl[:], ul[:], 'extend')
-
- pl.reverse()
- ul.reverse()
- self.assertEqual(pl[:], ul[:], 'reverse')
-
- for i in self.limits_plus(1):
- pl, ul = self.lists_of_len()
- pl.insert(i,50)
- ul.insert(i,50)
- self.assertEqual(pl[:], ul[:], 'insert at %d' % i)
-
- for i in self.limits_plus(0):
- pl, ul = self.lists_of_len()
- self.assertEqual(pl.pop(i), ul.pop(i), 'popped value at %d' % i)
- self.assertEqual(pl[:], ul[:], 'after pop at %d' % i)
-
- pl, ul = self.lists_of_len()
- self.assertEqual(pl.pop(), ul.pop(i), 'popped value')
- self.assertEqual(pl[:], ul[:], 'after pop')
-
- pl, ul = self.lists_of_len()
- def popfcn(x, i): x.pop(i)
- self.assertRaises(IndexError, popfcn, ul, self.limit)
- self.assertRaises(IndexError, popfcn, ul, -1 - self.limit)
-
- pl, ul = self.lists_of_len()
- for val in range(self.limit):
- self.assertEqual(pl.index(val), ul.index(val), 'index of %d' % val)
-
- for val in self.limits_plus(2):
- self.assertEqual(pl.count(val), ul.count(val), 'count %d' % val)
-
- for val in range(self.limit):
- pl, ul = self.lists_of_len()
- pl.remove(val)
- ul.remove(val)
- self.assertEqual(pl[:], ul[:], 'after remove val %d' % val)
-
- def indexfcn(x, v): return x.index(v)
- def removefcn(x, v): return x.remove(v)
- self.assertRaises(ValueError, indexfcn, ul, 40)
- self.assertRaises(ValueError, removefcn, ul, 40)
-
- def test07_allowed_types(self):
- 'Type-restricted list'
- pl, ul = self.lists_of_len()
- ul._allowed = (int, long)
- ul[1] = 50
- ul[:2] = [60, 70, 80]
- def setfcn(x, i, v): x[i] = v
- self.assertRaises(TypeError, setfcn, ul, 2, 'hello')
- self.assertRaises(TypeError, setfcn, ul, slice(0,3,2), ('hello','goodbye'))
-
- def test08_min_length(self):
- 'Length limits'
- pl, ul = self.lists_of_len()
- ul._minlength = 1
- def delfcn(x,i): del x[:i]
- def setfcn(x,i): x[:i] = []
- for i in range(self.limit - ul._minlength + 1, self.limit + 1):
- self.assertRaises(ValueError, delfcn, ul, i)
- self.assertRaises(ValueError, setfcn, ul, i)
- del ul[:ul._minlength]
-
- ul._maxlength = 4
- for i in range(0, ul._maxlength - len(ul)):
- ul.append(i)
- self.assertRaises(ValueError, ul.append, 10)
-
- def test09_iterable_check(self):
- 'Error on assigning non-iterable to slice'
- pl, ul = self.lists_of_len(self.limit + 1)
- def setfcn(x, i, v): x[i] = v
- self.assertRaises(TypeError, setfcn, ul, slice(0,3,2), 2)
-
- def test10_checkindex(self):
- 'Index check'
- pl, ul = self.lists_of_len()
- for i in self.limits_plus(0):
- if i < 0:
- self.assertEqual(ul._checkindex(i), i + self.limit, '_checkindex(neg index)')
- else:
- self.assertEqual(ul._checkindex(i), i, '_checkindex(pos index)')
-
- for i in (-self.limit - 1, self.limit):
- self.assertRaises(IndexError, ul._checkindex, i)
-
- ul._IndexError = TypeError
- self.assertRaises(TypeError, ul._checkindex, -self.limit - 1)
-
- def test_11_sorting(self):
- 'Sorting'
- pl, ul = self.lists_of_len()
- pl.insert(0, pl.pop())
- ul.insert(0, ul.pop())
- pl.sort()
- ul.sort()
- self.assertEqual(pl[:], ul[:], 'sort')
- mid = pl[len(pl) / 2]
- pl.sort(key=lambda x: (mid-x)**2)
- ul.sort(key=lambda x: (mid-x)**2)
- self.assertEqual(pl[:], ul[:], 'sort w/ key')
-
- pl.insert(0, pl.pop())
- ul.insert(0, ul.pop())
- pl.sort(reverse=True)
- ul.sort(reverse=True)
- self.assertEqual(pl[:], ul[:], 'sort w/ reverse')
- mid = pl[len(pl) / 2]
- pl.sort(key=lambda x: (mid-x)**2)
- ul.sort(key=lambda x: (mid-x)**2)
- self.assertEqual(pl[:], ul[:], 'sort w/ key')
-
- def test_12_arithmetic(self):
- 'Arithmetic'
- pl, ul = self.lists_of_len()
- al = range(10,14)
- self.assertEqual(list(pl + al), list(ul + al), 'add')
- self.assertEqual(type(ul), type(ul + al), 'type of add result')
- self.assertEqual(list(al + pl), list(al + ul), 'radd')
- self.assertEqual(type(al), type(al + ul), 'type of radd result')
- objid = id(ul)
- pl += al
- ul += al
- self.assertEqual(pl[:], ul[:], 'in-place add')
- self.assertEqual(objid, id(ul), 'in-place add id')
-
- for n in (-1,0,1,3):
- pl, ul = self.lists_of_len()
- self.assertEqual(list(pl * n), list(ul * n), 'mul by %d' % n)
- self.assertEqual(type(ul), type(ul * n), 'type of mul by %d result' % n)
- self.assertEqual(list(n * pl), list(n * ul), 'rmul by %d' % n)
- self.assertEqual(type(ul), type(n * ul), 'type of rmul by %d result' % n)
- objid = id(ul)
- pl *= n
- ul *= n
- self.assertEqual(pl[:], ul[:], 'in-place mul by %d' % n)
- self.assertEqual(objid, id(ul), 'in-place mul by %d id' % n)
-
- pl, ul = self.lists_of_len()
- self.assertEqual(pl, ul, 'cmp for equal')
- self.assert_(pl >= ul, 'cmp for gte self')
- self.assert_(pl <= ul, 'cmp for lte self')
- self.assert_(ul >= pl, 'cmp for self gte')
- self.assert_(ul <= pl, 'cmp for self lte')
-
- self.assert_(pl + [5] > ul, 'cmp')
- self.assert_(pl + [5] >= ul, 'cmp')
- self.assert_(pl < ul + [2], 'cmp')
- self.assert_(pl <= ul + [2], 'cmp')
- self.assert_(ul + [5] > pl, 'cmp')
- self.assert_(ul + [5] >= pl, 'cmp')
- self.assert_(ul < pl + [2], 'cmp')
- self.assert_(ul <= pl + [2], 'cmp')
-
- pl[1] = 20
- self.assert_(pl > ul, 'cmp for gt self')
- self.assert_(ul < pl, 'cmp for self lt')
- pl[1] = -20
- self.assert_(pl < ul, 'cmp for lt self')
- self.assert_(pl < ul, 'cmp for lt self')
-
-class ListMixinTestSingle(ListMixinTest):
- listType = UserListB
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(ListMixinTest))
- s.addTest(unittest.makeSuite(ListMixinTestSingle))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
-
-if __name__ == '__main__':
- run()
diff --git a/parts/django/django/contrib/gis/management/__init__.py b/parts/django/django/contrib/gis/management/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/management/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/management/base.py b/parts/django/django/contrib/gis/management/base.py
deleted file mode 100644
index c998063..0000000
--- a/parts/django/django/contrib/gis/management/base.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from django.core.management.base import BaseCommand, CommandError
-
-class ArgsCommand(BaseCommand):
- """
- Command class for commands that take multiple arguments.
- """
- args = '<arg arg ...>'
-
- def handle(self, *args, **options):
- if not args:
- raise CommandError('Must provide the following arguments: %s' % self.args)
- return self.handle_args(*args, **options)
-
- def handle_args(self, *args, **options):
- raise NotImplementedError()
diff --git a/parts/django/django/contrib/gis/management/commands/__init__.py b/parts/django/django/contrib/gis/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/management/commands/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/management/commands/inspectdb.py b/parts/django/django/contrib/gis/management/commands/inspectdb.py
deleted file mode 100644
index 937bb8e..0000000
--- a/parts/django/django/contrib/gis/management/commands/inspectdb.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import CommandError
-from django.core.management.commands.inspectdb import Command as InspectDBCommand
-
-class Command(InspectDBCommand):
- db_module = 'django.contrib.gis.db'
- gis_tables = {}
-
- def get_field_type(self, connection, table_name, row):
- field_type, field_params, field_notes = super(Command, self).get_field_type(connection, table_name, row)
- if field_type == 'GeometryField':
- geo_col = row[0]
- # Getting a more specific field type and any additional parameters
- # from the `get_geometry_type` routine for the spatial backend.
- field_type, geo_params = connection.introspection.get_geometry_type(table_name, geo_col)
- field_params.update(geo_params)
- # Adding the table name and column to the `gis_tables` dictionary, this
- # allows us to track which tables need a GeoManager.
- if table_name in self.gis_tables:
- self.gis_tables[table_name].append(geo_col)
- else:
- self.gis_tables[table_name] = [geo_col]
- return field_type, field_params, field_notes
-
- def get_meta(self, table_name):
- meta_lines = super(Command, self).get_meta(table_name)
- if table_name in self.gis_tables:
- # If the table is a geographic one, then we need make
- # GeoManager the default manager for the model.
- meta_lines.insert(0, ' objects = models.GeoManager()')
- return meta_lines
diff --git a/parts/django/django/contrib/gis/management/commands/ogrinspect.py b/parts/django/django/contrib/gis/management/commands/ogrinspect.py
deleted file mode 100644
index a495787..0000000
--- a/parts/django/django/contrib/gis/management/commands/ogrinspect.py
+++ /dev/null
@@ -1,122 +0,0 @@
-import os, sys
-from optparse import make_option
-from django.contrib.gis import gdal
-from django.contrib.gis.management.base import ArgsCommand, CommandError
-
-def layer_option(option, opt, value, parser):
- """
- Callback for `make_option` for the `ogrinspect` `layer_key`
- keyword option which may be an integer or a string.
- """
- try:
- dest = int(value)
- except ValueError:
- dest = value
- setattr(parser.values, option.dest, dest)
-
-def list_option(option, opt, value, parser):
- """
- Callback for `make_option` for `ogrinspect` keywords that require
- a string list. If the string is 'True'/'true' then the option
- value will be a boolean instead.
- """
- if value.lower() == 'true':
- dest = True
- else:
- dest = [s for s in value.split(',')]
- setattr(parser.values, option.dest, dest)
-
-class Command(ArgsCommand):
- help = ('Inspects the given OGR-compatible data source (e.g., a shapefile) and outputs\n'
- 'a GeoDjango model with the given model name. For example:\n'
- ' ./manage.py ogrinspect zipcode.shp Zipcode')
- args = '[data_source] [model_name]'
-
- option_list = ArgsCommand.option_list + (
- make_option('--blank', dest='blank', type='string', action='callback',
- callback=list_option, default=False,
- help='Use a comma separated list of OGR field names to add '
- 'the `blank=True` option to the field definition. Set with'
- '`true` to apply to all applicable fields.'),
- make_option('--decimal', dest='decimal', type='string', action='callback',
- callback=list_option, default=False,
- help='Use a comma separated list of OGR float fields to '
- 'generate `DecimalField` instead of the default '
- '`FloatField`. Set to `true` to apply to all OGR float fields.'),
- make_option('--geom-name', dest='geom_name', type='string', default='geom',
- help='Specifies the model name for the Geometry Field '
- '(defaults to `geom`)'),
- make_option('--layer', dest='layer_key', type='string', action='callback',
- callback=layer_option, default=0,
- help='The key for specifying which layer in the OGR data '
- 'source to use. Defaults to 0 (the first layer). May be '
- 'an integer or a string identifier for the layer.'),
- make_option('--multi-geom', action='store_true', dest='multi_geom', default=False,
- help='Treat the geometry in the data source as a geometry collection.'),
- make_option('--name-field', dest='name_field',
- help='Specifies a field name to return for the `__unicode__` function.'),
- make_option('--no-imports', action='store_false', dest='imports', default=True,
- help='Do not include `from django.contrib.gis.db import models` '
- 'statement.'),
- make_option('--null', dest='null', type='string', action='callback',
- callback=list_option, default=False,
- help='Use a comma separated list of OGR field names to add '
- 'the `null=True` option to the field definition. Set with'
- '`true` to apply to all applicable fields.'),
- make_option('--srid', dest='srid',
- help='The SRID to use for the Geometry Field. If it can be '
- 'determined, the SRID of the data source is used.'),
- make_option('--mapping', action='store_true', dest='mapping',
- help='Generate mapping dictionary for use with `LayerMapping`.')
- )
-
- requires_model_validation = False
-
- def handle_args(self, *args, **options):
- try:
- data_source, model_name = args
- except ValueError:
- raise CommandError('Invalid arguments, must provide: %s' % self.args)
-
- if not gdal.HAS_GDAL:
- raise CommandError('GDAL is required to inspect geospatial data sources.')
-
- # TODO: Support non file-based OGR datasources.
- if not os.path.isfile(data_source):
- raise CommandError('The given data source cannot be found: "%s"' % data_source)
-
- # Removing options with `None` values.
- options = dict([(k, v) for k, v in options.items() if not v is None])
-
- # Getting the OGR DataSource from the string parameter.
- try:
- ds = gdal.DataSource(data_source)
- except gdal.OGRException, msg:
- raise CommandError(msg)
-
- # Whether the user wants to generate the LayerMapping dictionary as well.
- show_mapping = options.pop('mapping', False)
-
- # Popping the verbosity global option, as it's not accepted by `_ogrinspect`.
- verbosity = options.pop('verbosity', False)
-
- # Returning the output of ogrinspect with the given arguments
- # and options.
- from django.contrib.gis.utils.ogrinspect import _ogrinspect, mapping
- output = [s for s in _ogrinspect(ds, model_name, **options)]
- if show_mapping:
- # Constructing the keyword arguments for `mapping`, and
- # calling it on the data source.
- kwargs = {'geom_name' : options['geom_name'],
- 'layer_key' : options['layer_key'],
- 'multi_geom' : options['multi_geom'],
- }
- mapping_dict = mapping(ds, **kwargs)
- # This extra legwork is so that the dictionary definition comes
- # out in the same order as the fields in the model definition.
- rev_mapping = dict([(v, k) for k, v in mapping_dict.items()])
- output.extend(['', '# Auto-generated `LayerMapping` dictionary for %s model' % model_name,
- '%s_mapping = {' % model_name.lower()])
- output.extend([" '%s' : '%s'," % (rev_mapping[ogr_fld], ogr_fld) for ogr_fld in ds[options['layer_key']].fields])
- output.extend([" '%s' : '%s'," % (options['geom_name'], mapping_dict[options['geom_name']]), '}'])
- return '\n'.join(output)
diff --git a/parts/django/django/contrib/gis/maps/__init__.py b/parts/django/django/contrib/gis/maps/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/maps/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/maps/google/__init__.py b/parts/django/django/contrib/gis/maps/google/__init__.py
deleted file mode 100644
index 9be689c..0000000
--- a/parts/django/django/contrib/gis/maps/google/__init__.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
- This module houses the GoogleMap object, used for generating
- the needed javascript to embed Google Maps in a Web page.
-
- Google(R) is a registered trademark of Google, Inc. of Mountain View, California.
-
- Example:
-
- * In the view:
- return render_to_response('template.html', {'google' : GoogleMap(key="abcdefg")})
-
- * In the template:
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- {{ google.xhtml }}
- <head>
- <title>Google Maps via GeoDjango</title>
- {{ google.style }}
- {{ google.scripts }}
- </head>
- {{ google.body }}
- <div id="{{ google.dom_id }}" style="width:600px;height:400px;"></div>
- </body>
- </html>
-
- Note: If you want to be more explicit in your templates, the following are
- equivalent:
- {{ google.body }} => "<body {{ google.onload }} {{ google.onunload }}>"
- {{ google.xhtml }} => "<html xmlns="http://www.w3.org/1999/xhtml" {{ google.xmlns }}>"
- {{ google.style }} => "<style>{{ google.vml_css }}</style>"
-
- Explanation:
- - The `xhtml` property provides the correct XML namespace needed for
- Google Maps to operate in IE using XHTML. Google Maps on IE uses
- VML to draw polylines. Returns, by default:
- <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
-
- - The `style` property provides the correct style tag for the CSS
- properties required by Google Maps on IE:
- <style type="text/css">v\:* {behavior:url(#default#VML);}</style>
-
- - The `scripts` property provides the necessary <script> tags for
- including the Google Maps javascript, as well as including the
- generated javascript.
-
- - The `body` property provides the correct attributes for the
- body tag to load the generated javascript. By default, returns:
- <body onload="gmap_load()" onunload="GUnload()">
-
- - The `dom_id` property returns the DOM id for the map. Defaults to "map".
-
- The following attributes may be set or customized in your local settings:
- * GOOGLE_MAPS_API_KEY: String of your Google Maps API key. These are tied to
- to a domain. May be obtained from http://www.google.com/apis/maps/
- * GOOGLE_MAPS_API_VERSION (optional): Defaults to using "2.x"
- * GOOGLE_MAPS_URL (optional): Must have a substitution ('%s') for the API
- version.
-"""
-from django.contrib.gis.maps.google.gmap import GoogleMap, GoogleMapSet
-from django.contrib.gis.maps.google.overlays import GEvent, GIcon, GMarker, GPolygon, GPolyline
-from django.contrib.gis.maps.google.zoom import GoogleZoom
diff --git a/parts/django/django/contrib/gis/maps/google/gmap.py b/parts/django/django/contrib/gis/maps/google/gmap.py
deleted file mode 100644
index cca5dc9..0000000
--- a/parts/django/django/contrib/gis/maps/google/gmap.py
+++ /dev/null
@@ -1,226 +0,0 @@
-from django.conf import settings
-from django.contrib.gis import geos
-from django.template.loader import render_to_string
-from django.utils.safestring import mark_safe
-
-class GoogleMapException(Exception): pass
-from django.contrib.gis.maps.google.overlays import GPolygon, GPolyline, GMarker, GIcon
-
-# The default Google Maps URL (for the API javascript)
-# TODO: Internationalize for Japan, UK, etc.
-GOOGLE_MAPS_URL='http://maps.google.com/maps?file=api&amp;v=%s&amp;key='
-
-class GoogleMap(object):
- "A class for generating Google Maps JavaScript."
-
- # String constants
- onunload = mark_safe('onunload="GUnload()"') # Cleans up after Google Maps
- vml_css = mark_safe('v\:* {behavior:url(#default#VML);}') # CSS for IE VML
- xmlns = mark_safe('xmlns:v="urn:schemas-microsoft-com:vml"') # XML Namespace (for IE VML).
-
- def __init__(self, key=None, api_url=None, version=None,
- center=None, zoom=None, dom_id='map',
- kml_urls=[], polylines=None, polygons=None, markers=None,
- template='gis/google/google-map.js',
- js_module='geodjango',
- extra_context={}):
-
- # The Google Maps API Key defined in the settings will be used
- # if not passed in as a parameter. The use of an API key is
- # _required_.
- if not key:
- try:
- self.key = settings.GOOGLE_MAPS_API_KEY
- except AttributeError:
- raise GoogleMapException('Google Maps API Key not found (try adding GOOGLE_MAPS_API_KEY to your settings).')
- else:
- self.key = key
-
- # Getting the Google Maps API version, defaults to using the latest ("2.x"),
- # this is not necessarily the most stable.
- if not version:
- self.version = getattr(settings, 'GOOGLE_MAPS_API_VERSION', '2.x')
- else:
- self.version = version
-
- # Can specify the API URL in the `api_url` keyword.
- if not api_url:
- self.api_url = mark_safe(getattr(settings, 'GOOGLE_MAPS_URL', GOOGLE_MAPS_URL) % self.version)
- else:
- self.api_url = api_url
-
- # Setting the DOM id of the map, the load function, the JavaScript
- # template, and the KML URLs array.
- self.dom_id = dom_id
- self.extra_context = extra_context
- self.js_module = js_module
- self.template = template
- self.kml_urls = kml_urls
-
- # Does the user want any GMarker, GPolygon, and/or GPolyline overlays?
- overlay_info = [[GMarker, markers, 'markers'],
- [GPolygon, polygons, 'polygons'],
- [GPolyline, polylines, 'polylines']]
-
- for overlay_class, overlay_list, varname in overlay_info:
- setattr(self, varname, [])
- if overlay_list:
- for overlay in overlay_list:
- if isinstance(overlay, overlay_class):
- getattr(self, varname).append(overlay)
- else:
- getattr(self, varname).append(overlay_class(overlay))
-
- # If GMarker, GPolygons, and/or GPolylines are used the zoom will be
- # automatically calculated via the Google Maps API. If both a zoom
- # level and a center coordinate are provided with polygons/polylines,
- # no automatic determination will occur.
- self.calc_zoom = False
- if self.polygons or self.polylines or self.markers:
- if center is None or zoom is None:
- self.calc_zoom = True
-
- # Defaults for the zoom level and center coordinates if the zoom
- # is not automatically calculated.
- if zoom is None: zoom = 4
- self.zoom = zoom
- if center is None: center = (0, 0)
- self.center = center
-
- def render(self):
- """
- Generates the JavaScript necessary for displaying this Google Map.
- """
- params = {'calc_zoom' : self.calc_zoom,
- 'center' : self.center,
- 'dom_id' : self.dom_id,
- 'js_module' : self.js_module,
- 'kml_urls' : self.kml_urls,
- 'zoom' : self.zoom,
- 'polygons' : self.polygons,
- 'polylines' : self.polylines,
- 'icons': self.icons,
- 'markers' : self.markers,
- }
- params.update(self.extra_context)
- return render_to_string(self.template, params)
-
- @property
- def body(self):
- "Returns HTML body tag for loading and unloading Google Maps javascript."
- return mark_safe('<body %s %s>' % (self.onload, self.onunload))
-
- @property
- def onload(self):
- "Returns the `onload` HTML <body> attribute."
- return mark_safe('onload="%s.%s_load()"' % (self.js_module, self.dom_id))
-
- @property
- def api_script(self):
- "Returns the <script> tag for the Google Maps API javascript."
- return mark_safe('<script src="%s%s" type="text/javascript"></script>' % (self.api_url, self.key))
-
- @property
- def js(self):
- "Returns only the generated Google Maps JavaScript (no <script> tags)."
- return self.render()
-
- @property
- def scripts(self):
- "Returns all <script></script> tags required with Google Maps JavaScript."
- return mark_safe('%s\n <script type="text/javascript">\n//<![CDATA[\n%s//]]>\n </script>' % (self.api_script, self.js))
-
- @property
- def style(self):
- "Returns additional CSS styling needed for Google Maps on IE."
- return mark_safe('<style type="text/css">%s</style>' % self.vml_css)
-
- @property
- def xhtml(self):
- "Returns XHTML information needed for IE VML overlays."
- return mark_safe('<html xmlns="http://www.w3.org/1999/xhtml" %s>' % self.xmlns)
-
- @property
- def icons(self):
- "Returns a sequence of GIcon objects in this map."
- return set([marker.icon for marker in self.markers if marker.icon])
-
-class GoogleMapSet(GoogleMap):
-
- def __init__(self, *args, **kwargs):
- """
- A class for generating sets of Google Maps that will be shown on the
- same page together.
-
- Example:
- gmapset = GoogleMapSet( GoogleMap( ... ), GoogleMap( ... ) )
- gmapset = GoogleMapSet( [ gmap1, gmap2] )
- """
- # The `google-multi.js` template is used instead of `google-single.js`
- # by default.
- template = kwargs.pop('template', 'gis/google/google-multi.js')
-
- # This is the template used to generate the GMap load JavaScript for
- # each map in the set.
- self.map_template = kwargs.pop('map_template', 'gis/google/google-single.js')
-
- # Running GoogleMap.__init__(), and resetting the template
- # value with default obtained above.
- super(GoogleMapSet, self).__init__(**kwargs)
- self.template = template
-
- # If a tuple/list passed in as first element of args, then assume
- if isinstance(args[0], (tuple, list)):
- self.maps = args[0]
- else:
- self.maps = args
-
- # Generating DOM ids for each of the maps in the set.
- self.dom_ids = ['map%d' % i for i in xrange(len(self.maps))]
-
- def load_map_js(self):
- """
- Returns JavaScript containing all of the loading routines for each
- map in this set.
- """
- result = []
- for dom_id, gmap in zip(self.dom_ids, self.maps):
- # Backup copies the GoogleMap DOM id and template attributes.
- # They are overridden on each GoogleMap instance in the set so
- # that only the loading JavaScript (and not the header variables)
- # is used with the generated DOM ids.
- tmp = (gmap.template, gmap.dom_id)
- gmap.template = self.map_template
- gmap.dom_id = dom_id
- result.append(gmap.js)
- # Restoring the backup values.
- gmap.template, gmap.dom_id = tmp
- return mark_safe(''.join(result))
-
- def render(self):
- """
- Generates the JavaScript for the collection of Google Maps in
- this set.
- """
- params = {'js_module' : self.js_module,
- 'dom_ids' : self.dom_ids,
- 'load_map_js' : self.load_map_js(),
- 'icons' : self.icons,
- }
- params.update(self.extra_context)
- return render_to_string(self.template, params)
-
- @property
- def onload(self):
- "Returns the `onload` HTML <body> attribute."
- # Overloaded to use the `load` function defined in the
- # `google-multi.js`, which calls the load routines for
- # each one of the individual maps in the set.
- return mark_safe('onload="%s.load()"' % self.js_module)
-
- @property
- def icons(self):
- "Returns a sequence of all icons in each map of the set."
- icons = set()
- for map in self.maps: icons |= map.icons
- return icons
diff --git a/parts/django/django/contrib/gis/maps/google/overlays.py b/parts/django/django/contrib/gis/maps/google/overlays.py
deleted file mode 100644
index c2ebb3c..0000000
--- a/parts/django/django/contrib/gis/maps/google/overlays.py
+++ /dev/null
@@ -1,301 +0,0 @@
-from django.utils.safestring import mark_safe
-from django.contrib.gis.geos import fromstr, Point, LineString, LinearRing, Polygon
-
-class GEvent(object):
- """
- A Python wrapper for the Google GEvent object.
-
- Events can be attached to any object derived from GOverlayBase with the
- add_event() call.
-
- For more information please see the Google Maps API Reference:
- http://code.google.com/apis/maps/documentation/reference.html#GEvent
-
- Example:
-
- from django.shortcuts import render_to_response
- from django.contrib.gis.maps.google import GoogleMap, GEvent, GPolyline
-
- def sample_request(request):
- polyline = GPolyline('LINESTRING(101 26, 112 26, 102 31)')
- event = GEvent('click',
- 'function() { location.href = "http://www.google.com"}')
- polyline.add_event(event)
- return render_to_response('mytemplate.html',
- {'google' : GoogleMap(polylines=[polyline])})
- """
-
- def __init__(self, event, action):
- """
- Initializes a GEvent object.
-
- Parameters:
-
- event:
- string for the event, such as 'click'. The event must be a valid
- event for the object in the Google Maps API.
- There is no validation of the event type within Django.
-
- action:
- string containing a Javascript function, such as
- 'function() { location.href = "newurl";}'
- The string must be a valid Javascript function. Again there is no
- validation fo the function within Django.
- """
- self.event = event
- self.action = action
-
- def __unicode__(self):
- "Returns the parameter part of a GEvent."
- return mark_safe('"%s", %s' %(self.event, self.action))
-
-class GOverlayBase(object):
- def __init__(self):
- self.events = []
-
- def latlng_from_coords(self, coords):
- "Generates a JavaScript array of GLatLng objects for the given coordinates."
- return '[%s]' % ','.join(['new GLatLng(%s,%s)' % (y, x) for x, y in coords])
-
- def add_event(self, event):
- "Attaches a GEvent to the overlay object."
- self.events.append(event)
-
- def __unicode__(self):
- "The string representation is the JavaScript API call."
- return mark_safe('%s(%s)' % (self.__class__.__name__, self.js_params))
-
-class GPolygon(GOverlayBase):
- """
- A Python wrapper for the Google GPolygon object. For more information
- please see the Google Maps API Reference:
- http://code.google.com/apis/maps/documentation/reference.html#GPolygon
- """
- def __init__(self, poly,
- stroke_color='#0000ff', stroke_weight=2, stroke_opacity=1,
- fill_color='#0000ff', fill_opacity=0.4):
- """
- The GPolygon object initializes on a GEOS Polygon or a parameter that
- may be instantiated into GEOS Polygon. Please note that this will not
- depict a Polygon's internal rings.
-
- Keyword Options:
-
- stroke_color:
- The color of the polygon outline. Defaults to '#0000ff' (blue).
-
- stroke_weight:
- The width of the polygon outline, in pixels. Defaults to 2.
-
- stroke_opacity:
- The opacity of the polygon outline, between 0 and 1. Defaults to 1.
-
- fill_color:
- The color of the polygon fill. Defaults to '#0000ff' (blue).
-
- fill_opacity:
- The opacity of the polygon fill. Defaults to 0.4.
- """
- if isinstance(poly, basestring): poly = fromstr(poly)
- if isinstance(poly, (tuple, list)): poly = Polygon(poly)
- if not isinstance(poly, Polygon):
- raise TypeError('GPolygon may only initialize on GEOS Polygons.')
-
- # Getting the envelope of the input polygon (used for automatically
- # determining the zoom level).
- self.envelope = poly.envelope
-
- # Translating the coordinates into a JavaScript array of
- # Google `GLatLng` objects.
- self.points = self.latlng_from_coords(poly.shell.coords)
-
- # Stroke settings.
- self.stroke_color, self.stroke_opacity, self.stroke_weight = stroke_color, stroke_opacity, stroke_weight
-
- # Fill settings.
- self.fill_color, self.fill_opacity = fill_color, fill_opacity
-
- super(GPolygon, self).__init__()
-
- @property
- def js_params(self):
- return '%s, "%s", %s, %s, "%s", %s' % (self.points, self.stroke_color, self.stroke_weight, self.stroke_opacity,
- self.fill_color, self.fill_opacity)
-
-class GPolyline(GOverlayBase):
- """
- A Python wrapper for the Google GPolyline object. For more information
- please see the Google Maps API Reference:
- http://code.google.com/apis/maps/documentation/reference.html#GPolyline
- """
- def __init__(self, geom, color='#0000ff', weight=2, opacity=1):
- """
- The GPolyline object may be initialized on GEOS LineStirng, LinearRing,
- and Polygon objects (internal rings not supported) or a parameter that
- may instantiated into one of the above geometries.
-
- Keyword Options:
-
- color:
- The color to use for the polyline. Defaults to '#0000ff' (blue).
-
- weight:
- The width of the polyline, in pixels. Defaults to 2.
-
- opacity:
- The opacity of the polyline, between 0 and 1. Defaults to 1.
- """
- # If a GEOS geometry isn't passed in, try to contsruct one.
- if isinstance(geom, basestring): geom = fromstr(geom)
- if isinstance(geom, (tuple, list)): geom = Polygon(geom)
- # Generating the lat/lng coordinate pairs.
- if isinstance(geom, (LineString, LinearRing)):
- self.latlngs = self.latlng_from_coords(geom.coords)
- elif isinstance(geom, Polygon):
- self.latlngs = self.latlng_from_coords(geom.shell.coords)
- else:
- raise TypeError('GPolyline may only initialize on GEOS LineString, LinearRing, and/or Polygon geometries.')
-
- # Getting the envelope for automatic zoom determination.
- self.envelope = geom.envelope
- self.color, self.weight, self.opacity = color, weight, opacity
- super(GPolyline, self).__init__()
-
- @property
- def js_params(self):
- return '%s, "%s", %s, %s' % (self.latlngs, self.color, self.weight, self.opacity)
-
-
-class GIcon(object):
- """
- Creates a GIcon object to pass into a Gmarker object.
-
- The keyword arguments map to instance attributes of the same name. These,
- in turn, correspond to a subset of the attributes of the official GIcon
- javascript object:
-
- http://code.google.com/apis/maps/documentation/reference.html#GIcon
-
- Because a Google map often uses several different icons, a name field has
- been added to the required arguments.
-
- Required Arguments:
- varname:
- A string which will become the basis for the js variable name of
- the marker, for this reason, your code should assign a unique
- name for each GIcon you instantiate, otherwise there will be
- name space collisions in your javascript.
-
- Keyword Options:
- image:
- The url of the image to be used as the icon on the map defaults
- to 'G_DEFAULT_ICON'
-
- iconsize:
- a tuple representing the pixel size of the foreground (not the
- shadow) image of the icon, in the format: (width, height) ex.:
-
- GIcon('fast_food',
- image="/media/icon/star.png",
- iconsize=(15,10))
-
- Would indicate your custom icon was 15px wide and 10px height.
-
- shadow:
- the url of the image of the icon's shadow
-
- shadowsize:
- a tuple representing the pixel size of the shadow image, format is
- the same as ``iconsize``
-
- iconanchor:
- a tuple representing the pixel coordinate relative to the top left
- corner of the icon image at which this icon is anchored to the map.
- In (x, y) format. x increases to the right in the Google Maps
- coordinate system and y increases downwards in the Google Maps
- coordinate system.)
-
- infowindowanchor:
- The pixel coordinate relative to the top left corner of the icon
- image at which the info window is anchored to this icon.
-
- """
- def __init__(self, varname, image=None, iconsize=None,
- shadow=None, shadowsize=None, iconanchor=None,
- infowindowanchor=None):
- self.varname = varname
- self.image = image
- self.iconsize = iconsize
- self.shadow = shadow
- self.shadowsize = shadowsize
- self.iconanchor = iconanchor
- self.infowindowanchor = infowindowanchor
-
- def __cmp__(self, other):
- return cmp(self.varname, other.varname)
-
- def __hash__(self):
- # XOR with hash of GIcon type so that hash('varname') won't
- # equal hash(GIcon('varname')).
- return hash(self.__class__) ^ hash(self.varname)
-
-class GMarker(GOverlayBase):
- """
- A Python wrapper for the Google GMarker object. For more information
- please see the Google Maps API Reference:
- http://code.google.com/apis/maps/documentation/reference.html#GMarker
-
- Example:
-
- from django.shortcuts import render_to_response
- from django.contrib.gis.maps.google.overlays import GMarker, GEvent
-
- def sample_request(request):
- marker = GMarker('POINT(101 26)')
- event = GEvent('click',
- 'function() { location.href = "http://www.google.com"}')
- marker.add_event(event)
- return render_to_response('mytemplate.html',
- {'google' : GoogleMap(markers=[marker])})
- """
- def __init__(self, geom, title=None, draggable=False, icon=None):
- """
- The GMarker object may initialize on GEOS Points or a parameter
- that may be instantiated into a GEOS point. Keyword options map to
- GMarkerOptions -- so far only the title option is supported.
-
- Keyword Options:
- title:
- Title option for GMarker, will be displayed as a tooltip.
-
- draggable:
- Draggable option for GMarker, disabled by default.
- """
- # If a GEOS geometry isn't passed in, try to construct one.
- if isinstance(geom, basestring): geom = fromstr(geom)
- if isinstance(geom, (tuple, list)): geom = Point(geom)
- if isinstance(geom, Point):
- self.latlng = self.latlng_from_coords(geom.coords)
- else:
- raise TypeError('GMarker may only initialize on GEOS Point geometry.')
- # Getting the envelope for automatic zoom determination.
- self.envelope = geom.envelope
- # TODO: Add support for more GMarkerOptions
- self.title = title
- self.draggable = draggable
- self.icon = icon
- super(GMarker, self).__init__()
-
- def latlng_from_coords(self, coords):
- return 'new GLatLng(%s,%s)' %(coords[1], coords[0])
-
- def options(self):
- result = []
- if self.title: result.append('title: "%s"' % self.title)
- if self.icon: result.append('icon: %s' % self.icon.varname)
- if self.draggable: result.append('draggable: true')
- return '{%s}' % ','.join(result)
-
- @property
- def js_params(self):
- return '%s, %s' % (self.latlng, self.options())
diff --git a/parts/django/django/contrib/gis/maps/google/zoom.py b/parts/django/django/contrib/gis/maps/google/zoom.py
deleted file mode 100644
index abc3fbf..0000000
--- a/parts/django/django/contrib/gis/maps/google/zoom.py
+++ /dev/null
@@ -1,161 +0,0 @@
-from django.contrib.gis.geos import GEOSGeometry, LinearRing, Polygon, Point
-from django.contrib.gis.maps.google.gmap import GoogleMapException
-from math import pi, sin, cos, log, exp, atan
-
-# Constants used for degree to radian conversion, and vice-versa.
-DTOR = pi / 180.
-RTOD = 180. / pi
-
-class GoogleZoom(object):
- """
- GoogleZoom is a utility for performing operations related to the zoom
- levels on Google Maps.
-
- This class is inspired by the OpenStreetMap Mapnik tile generation routine
- `generate_tiles.py`, and the article "How Big Is the World" (Hack #16) in
- "Google Maps Hacks" by Rich Gibson and Schuyler Erle.
-
- `generate_tiles.py` may be found at:
- http://trac.openstreetmap.org/browser/applications/rendering/mapnik/generate_tiles.py
-
- "Google Maps Hacks" may be found at http://safari.oreilly.com/0596101619
- """
-
- def __init__(self, num_zoom=19, tilesize=256):
- "Initializes the Google Zoom object."
- # Google's tilesize is 256x256, square tiles are assumed.
- self._tilesize = tilesize
-
- # The number of zoom levels
- self._nzoom = num_zoom
-
- # Initializing arrays to hold the parameters for each one of the
- # zoom levels.
- self._degpp = [] # Degrees per pixel
- self._radpp = [] # Radians per pixel
- self._npix = [] # 1/2 the number of pixels for a tile at the given zoom level
-
- # Incrementing through the zoom levels and populating the parameter arrays.
- z = tilesize # The number of pixels per zoom level.
- for i in xrange(num_zoom):
- # Getting the degrees and radians per pixel, and the 1/2 the number of
- # for every zoom level.
- self._degpp.append(z / 360.) # degrees per pixel
- self._radpp.append(z / (2 * pi)) # radians per pixl
- self._npix.append(z / 2) # number of pixels to center of tile
-
- # Multiplying `z` by 2 for the next iteration.
- z *= 2
-
- def __len__(self):
- "Returns the number of zoom levels."
- return self._nzoom
-
- def get_lon_lat(self, lonlat):
- "Unpacks longitude, latitude from GEOS Points and 2-tuples."
- if isinstance(lonlat, Point):
- lon, lat = lonlat.coords
- else:
- lon, lat = lonlat
- return lon, lat
-
- def lonlat_to_pixel(self, lonlat, zoom):
- "Converts a longitude, latitude coordinate pair for the given zoom level."
- # Setting up, unpacking the longitude, latitude values and getting the
- # number of pixels for the given zoom level.
- lon, lat = self.get_lon_lat(lonlat)
- npix = self._npix[zoom]
-
- # Calculating the pixel x coordinate by multiplying the longitude value
- # with with the number of degrees/pixel at the given zoom level.
- px_x = round(npix + (lon * self._degpp[zoom]))
-
- # Creating the factor, and ensuring that 1 or -1 is not passed in as the
- # base to the logarithm. Here's why:
- # if fac = -1, we'll get log(0) which is undefined;
- # if fac = 1, our logarithm base will be divided by 0, also undefined.
- fac = min(max(sin(DTOR * lat), -0.9999), 0.9999)
-
- # Calculating the pixel y coordinate.
- px_y = round(npix + (0.5 * log((1 + fac)/(1 - fac)) * (-1.0 * self._radpp[zoom])))
-
- # Returning the pixel x, y to the caller of the function.
- return (px_x, px_y)
-
- def pixel_to_lonlat(self, px, zoom):
- "Converts a pixel to a longitude, latitude pair at the given zoom level."
- if len(px) != 2:
- raise TypeError('Pixel should be a sequence of two elements.')
-
- # Getting the number of pixels for the given zoom level.
- npix = self._npix[zoom]
-
- # Calculating the longitude value, using the degrees per pixel.
- lon = (px[0] - npix) / self._degpp[zoom]
-
- # Calculating the latitude value.
- lat = RTOD * ( 2 * atan(exp((px[1] - npix)/ (-1.0 * self._radpp[zoom]))) - 0.5 * pi)
-
- # Returning the longitude, latitude coordinate pair.
- return (lon, lat)
-
- def tile(self, lonlat, zoom):
- """
- Returns a Polygon corresponding to the region represented by a fictional
- Google Tile for the given longitude/latitude pair and zoom level. This
- tile is used to determine the size of a tile at the given point.
- """
- # The given lonlat is the center of the tile.
- delta = self._tilesize / 2
-
- # Getting the pixel coordinates corresponding to the
- # the longitude/latitude.
- px = self.lonlat_to_pixel(lonlat, zoom)
-
- # Getting the lower-left and upper-right lat/lon coordinates
- # for the bounding box of the tile.
- ll = self.pixel_to_lonlat((px[0]-delta, px[1]-delta), zoom)
- ur = self.pixel_to_lonlat((px[0]+delta, px[1]+delta), zoom)
-
- # Constructing the Polygon, representing the tile and returning.
- return Polygon(LinearRing(ll, (ll[0], ur[1]), ur, (ur[0], ll[1]), ll), srid=4326)
-
- def get_zoom(self, geom):
- "Returns the optimal Zoom level for the given geometry."
- # Checking the input type.
- if not isinstance(geom, GEOSGeometry) or geom.srid != 4326:
- raise TypeError('get_zoom() expects a GEOS Geometry with an SRID of 4326.')
-
- # Getting the envelope for the geometry, and its associated width, height
- # and centroid.
- env = geom.envelope
- env_w, env_h = self.get_width_height(env.extent)
- center = env.centroid
-
- for z in xrange(self._nzoom):
- # Getting the tile at the zoom level.
- tile_w, tile_h = self.get_width_height(self.tile(center, z).extent)
-
- # When we span more than one tile, this is an approximately good
- # zoom level.
- if (env_w > tile_w) or (env_h > tile_h):
- if z == 0:
- raise GoogleMapException('Geometry width and height should not exceed that of the Earth.')
- return z-1
-
- # Otherwise, we've zoomed in to the max.
- return self._nzoom-1
-
- def get_width_height(self, extent):
- """
- Returns the width and height for the given extent.
- """
- # Getting the lower-left, upper-left, and upper-right
- # coordinates from the extent.
- ll = Point(extent[:2])
- ul = Point(extent[0], extent[3])
- ur = Point(extent[2:])
- # Calculating the width and height.
- height = ll.distance(ul)
- width = ul.distance(ur)
- return width, height
diff --git a/parts/django/django/contrib/gis/maps/openlayers/__init__.py b/parts/django/django/contrib/gis/maps/openlayers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/maps/openlayers/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/measure.py b/parts/django/django/contrib/gis/measure.py
deleted file mode 100644
index a60398b..0000000
--- a/parts/django/django/contrib/gis/measure.py
+++ /dev/null
@@ -1,336 +0,0 @@
-# Copyright (c) 2007, Robert Coup <robert.coup@onetrackmind.co.nz>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# 3. Neither the name of Distance nor the names of its contributors may be used
-# to endorse or promote products derived from this software without
-# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-"""
-Distance and Area objects to allow for sensible and convienient calculation
-and conversions.
-
-Authors: Robert Coup, Justin Bronn
-
-Inspired by GeoPy (http://exogen.case.edu/projects/geopy/)
-and Geoff Biggs' PhD work on dimensioned units for robotics.
-"""
-__all__ = ['A', 'Area', 'D', 'Distance']
-from decimal import Decimal
-
-class MeasureBase(object):
- def default_units(self, kwargs):
- """
- Return the unit value and the default units specified
- from the given keyword arguments dictionary.
- """
- val = 0.0
- for unit, value in kwargs.iteritems():
- if not isinstance(value, float): value = float(value)
- if unit in self.UNITS:
- val += self.UNITS[unit] * value
- default_unit = unit
- elif unit in self.ALIAS:
- u = self.ALIAS[unit]
- val += self.UNITS[u] * value
- default_unit = u
- else:
- lower = unit.lower()
- if lower in self.UNITS:
- val += self.UNITS[lower] * value
- default_unit = lower
- elif lower in self.LALIAS:
- u = self.LALIAS[lower]
- val += self.UNITS[u] * value
- default_unit = u
- else:
- raise AttributeError('Unknown unit type: %s' % unit)
- return val, default_unit
-
- @classmethod
- def unit_attname(cls, unit_str):
- """
- Retrieves the unit attribute name for the given unit string.
- For example, if the given unit string is 'metre', 'm' would be returned.
- An exception is raised if an attribute cannot be found.
- """
- lower = unit_str.lower()
- if unit_str in cls.UNITS:
- return unit_str
- elif lower in cls.UNITS:
- return lower
- elif lower in cls.LALIAS:
- return cls.LALIAS[lower]
- else:
- raise Exception('Could not find a unit keyword associated with "%s"' % unit_str)
-
-class Distance(MeasureBase):
- UNITS = {
- 'chain' : 20.1168,
- 'chain_benoit' : 20.116782,
- 'chain_sears' : 20.1167645,
- 'british_chain_benoit' : 20.1167824944,
- 'british_chain_sears' : 20.1167651216,
- 'british_chain_sears_truncated' : 20.116756,
- 'cm' : 0.01,
- 'british_ft' : 0.304799471539,
- 'british_yd' : 0.914398414616,
- 'clarke_ft' : 0.3047972654,
- 'clarke_link' : 0.201166195164,
- 'fathom' : 1.8288,
- 'ft': 0.3048,
- 'german_m' : 1.0000135965,
- 'gold_coast_ft' : 0.304799710181508,
- 'indian_yd' : 0.914398530744,
- 'inch' : 0.0254,
- 'km': 1000.0,
- 'link' : 0.201168,
- 'link_benoit' : 0.20116782,
- 'link_sears' : 0.20116765,
- 'm': 1.0,
- 'mi': 1609.344,
- 'mm' : 0.001,
- 'nm': 1852.0,
- 'nm_uk' : 1853.184,
- 'rod' : 5.0292,
- 'sears_yd' : 0.91439841,
- 'survey_ft' : 0.304800609601,
- 'um' : 0.000001,
- 'yd': 0.9144,
- }
-
- # Unit aliases for `UNIT` terms encountered in Spatial Reference WKT.
- ALIAS = {
- 'centimeter' : 'cm',
- 'foot' : 'ft',
- 'inches' : 'inch',
- 'kilometer' : 'km',
- 'kilometre' : 'km',
- 'meter' : 'm',
- 'metre' : 'm',
- 'micrometer' : 'um',
- 'micrometre' : 'um',
- 'millimeter' : 'mm',
- 'millimetre' : 'mm',
- 'mile' : 'mi',
- 'yard' : 'yd',
- 'British chain (Benoit 1895 B)' : 'british_chain_benoit',
- 'British chain (Sears 1922)' : 'british_chain_sears',
- 'British chain (Sears 1922 truncated)' : 'british_chain_sears_truncated',
- 'British foot (Sears 1922)' : 'british_ft',
- 'British foot' : 'british_ft',
- 'British yard (Sears 1922)' : 'british_yd',
- 'British yard' : 'british_yd',
- "Clarke's Foot" : 'clarke_ft',
- "Clarke's link" : 'clarke_link',
- 'Chain (Benoit)' : 'chain_benoit',
- 'Chain (Sears)' : 'chain_sears',
- 'Foot (International)' : 'ft',
- 'German legal metre' : 'german_m',
- 'Gold Coast foot' : 'gold_coast_ft',
- 'Indian yard' : 'indian_yd',
- 'Link (Benoit)': 'link_benoit',
- 'Link (Sears)': 'link_sears',
- 'Nautical Mile' : 'nm',
- 'Nautical Mile (UK)' : 'nm_uk',
- 'US survey foot' : 'survey_ft',
- 'U.S. Foot' : 'survey_ft',
- 'Yard (Indian)' : 'indian_yd',
- 'Yard (Sears)' : 'sears_yd'
- }
- LALIAS = dict([(k.lower(), v) for k, v in ALIAS.items()])
-
- def __init__(self, default_unit=None, **kwargs):
- # The base unit is in meters.
- self.m, self._default_unit = self.default_units(kwargs)
- if default_unit and isinstance(default_unit, str):
- self._default_unit = default_unit
-
- def __getattr__(self, name):
- if name in self.UNITS:
- return self.m / self.UNITS[name]
- else:
- raise AttributeError('Unknown unit type: %s' % name)
-
- def __repr__(self):
- return 'Distance(%s=%s)' % (self._default_unit, getattr(self, self._default_unit))
-
- def __str__(self):
- return '%s %s' % (getattr(self, self._default_unit), self._default_unit)
-
- def __cmp__(self, other):
- if isinstance(other, Distance):
- return cmp(self.m, other.m)
- else:
- return NotImplemented
-
- def __add__(self, other):
- if isinstance(other, Distance):
- return Distance(default_unit=self._default_unit, m=(self.m + other.m))
- else:
- raise TypeError('Distance must be added with Distance')
-
- def __iadd__(self, other):
- if isinstance(other, Distance):
- self.m += other.m
- return self
- else:
- raise TypeError('Distance must be added with Distance')
-
- def __sub__(self, other):
- if isinstance(other, Distance):
- return Distance(default_unit=self._default_unit, m=(self.m - other.m))
- else:
- raise TypeError('Distance must be subtracted from Distance')
-
- def __isub__(self, other):
- if isinstance(other, Distance):
- self.m -= other.m
- return self
- else:
- raise TypeError('Distance must be subtracted from Distance')
-
- def __mul__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- return Distance(default_unit=self._default_unit, m=(self.m * float(other)))
- elif isinstance(other, Distance):
- return Area(default_unit='sq_' + self._default_unit, sq_m=(self.m * other.m))
- else:
- raise TypeError('Distance must be multiplied with number or Distance')
-
- def __imul__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- self.m *= float(other)
- return self
- else:
- raise TypeError('Distance must be multiplied with number')
-
- def __rmul__(self, other):
- return self * other
-
- def __div__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- return Distance(default_unit=self._default_unit, m=(self.m / float(other)))
- else:
- raise TypeError('Distance must be divided with number')
-
- def __idiv__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- self.m /= float(other)
- return self
- else:
- raise TypeError('Distance must be divided with number')
-
- def __nonzero__(self):
- return bool(self.m)
-
-class Area(MeasureBase):
- # Getting the square units values and the alias dictionary.
- UNITS = dict([('sq_%s' % k, v ** 2) for k, v in Distance.UNITS.items()])
- ALIAS = dict([(k, 'sq_%s' % v) for k, v in Distance.ALIAS.items()])
- LALIAS = dict([(k.lower(), v) for k, v in ALIAS.items()])
-
- def __init__(self, default_unit=None, **kwargs):
- self.sq_m, self._default_unit = self.default_units(kwargs)
- if default_unit and isinstance(default_unit, str):
- self._default_unit = default_unit
-
- def __getattr__(self, name):
- if name in self.UNITS:
- return self.sq_m / self.UNITS[name]
- else:
- raise AttributeError('Unknown unit type: ' + name)
-
- def __repr__(self):
- return 'Area(%s=%s)' % (self._default_unit, getattr(self, self._default_unit))
-
- def __str__(self):
- return '%s %s' % (getattr(self, self._default_unit), self._default_unit)
-
- def __cmp__(self, other):
- if isinstance(other, Area):
- return cmp(self.sq_m, other.sq_m)
- else:
- return NotImplemented
-
- def __add__(self, other):
- if isinstance(other, Area):
- return Area(default_unit=self._default_unit, sq_m=(self.sq_m + other.sq_m))
- else:
- raise TypeError('Area must be added with Area')
-
- def __iadd__(self, other):
- if isinstance(other, Area):
- self.sq_m += other.sq_m
- return self
- else:
- raise TypeError('Area must be added with Area')
-
- def __sub__(self, other):
- if isinstance(other, Area):
- return Area(default_unit=self._default_unit, sq_m=(self.sq_m - other.sq_m))
- else:
- raise TypeError('Area must be subtracted from Area')
-
- def __isub__(self, other):
- if isinstance(other, Area):
- self.sq_m -= other.sq_m
- return self
- else:
- raise TypeError('Area must be subtracted from Area')
-
- def __mul__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- return Area(default_unit=self._default_unit, sq_m=(self.sq_m * float(other)))
- else:
- raise TypeError('Area must be multiplied with number')
-
- def __imul__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- self.sq_m *= float(other)
- return self
- else:
- raise TypeError('Area must be multiplied with number')
-
- def __rmul__(self, other):
- return self * other
-
- def __div__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- return Area(default_unit=self._default_unit, sq_m=(self.sq_m / float(other)))
- else:
- raise TypeError('Area must be divided with number')
-
- def __idiv__(self, other):
- if isinstance(other, (int, float, long, Decimal)):
- self.sq_m /= float(other)
- return self
- else:
- raise TypeError('Area must be divided with number')
-
- def __nonzero__(self):
- return bool(self.sq_m)
-
-# Shortcuts
-D = Distance
-A = Area
diff --git a/parts/django/django/contrib/gis/models.py b/parts/django/django/contrib/gis/models.py
deleted file mode 100644
index e379e82..0000000
--- a/parts/django/django/contrib/gis/models.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.db import connection
-
-if (hasattr(connection.ops, 'spatial_version') and
- not connection.ops.mysql):
- # Getting the `SpatialRefSys` and `GeometryColumns`
- # models for the default spatial backend. These
- # aliases are provided for backwards-compatibility.
- SpatialRefSys = connection.ops.spatial_ref_sys()
- GeometryColumns = connection.ops.geometry_columns()
diff --git a/parts/django/django/contrib/gis/shortcuts.py b/parts/django/django/contrib/gis/shortcuts.py
deleted file mode 100644
index a6fb892..0000000
--- a/parts/django/django/contrib/gis/shortcuts.py
+++ /dev/null
@@ -1,32 +0,0 @@
-import cStringIO, zipfile
-from django.conf import settings
-from django.http import HttpResponse
-from django.template import loader
-
-def compress_kml(kml):
- "Returns compressed KMZ from the given KML string."
- kmz = cStringIO.StringIO()
- zf = zipfile.ZipFile(kmz, 'a', zipfile.ZIP_DEFLATED)
- zf.writestr('doc.kml', kml.encode(settings.DEFAULT_CHARSET))
- zf.close()
- kmz.seek(0)
- return kmz.read()
-
-def render_to_kml(*args, **kwargs):
- "Renders the response as KML (using the correct MIME type)."
- return HttpResponse(loader.render_to_string(*args, **kwargs),
- mimetype='application/vnd.google-earth.kml+xml')
-
-def render_to_kmz(*args, **kwargs):
- """
- Compresses the KML content and returns as KMZ (using the correct
- MIME type).
- """
- return HttpResponse(compress_kml(loader.render_to_string(*args, **kwargs)),
- mimetype='application/vnd.google-earth.kmz')
-
-
-def render_to_text(*args, **kwargs):
- "Renders the response using the MIME type for plain text."
- return HttpResponse(loader.render_to_string(*args, **kwargs),
- mimetype='text/plain')
diff --git a/parts/django/django/contrib/gis/sitemaps/__init__.py b/parts/django/django/contrib/gis/sitemaps/__init__.py
deleted file mode 100644
index 9b6287f..0000000
--- a/parts/django/django/contrib/gis/sitemaps/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# Geo-enabled Sitemap classes.
-from django.contrib.gis.sitemaps.georss import GeoRSSSitemap
-from django.contrib.gis.sitemaps.kml import KMLSitemap, KMZSitemap
-
diff --git a/parts/django/django/contrib/gis/sitemaps/georss.py b/parts/django/django/contrib/gis/sitemaps/georss.py
deleted file mode 100644
index f75cf80..0000000
--- a/parts/django/django/contrib/gis/sitemaps/georss.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from django.core import urlresolvers
-from django.contrib.sitemaps import Sitemap
-
-class GeoRSSSitemap(Sitemap):
- """
- A minimal hook to produce sitemaps for GeoRSS feeds.
- """
- def __init__(self, feed_dict, slug_dict=None):
- """
- This sitemap object initializes on a feed dictionary (as would be passed
- to `django.contrib.syndication.views.feed`) and a slug dictionary.
- If the slug dictionary is not defined, then it's assumed the keys provide
- the URL parameter to the feed. However, if you have a complex feed (e.g.,
- you override `get_object`, then you'll need to provide a slug dictionary.
- The slug dictionary should have the same keys as the feed dictionary, but
- each value in the slug dictionary should be a sequence of slugs that may
- be used for valid feeds. For example, let's say we have a feed that
- returns objects for a specific ZIP code in our feed dictionary:
-
- feed_dict = {'zipcode' : ZipFeed}
-
- Then we would use a slug dictionary with a list of the zip code slugs
- corresponding to feeds you want listed in the sitemap:
-
- slug_dict = {'zipcode' : ['77002', '77054']}
- """
- # Setting up.
- self.feed_dict = feed_dict
- self.locations = []
- if slug_dict is None: slug_dict = {}
- # Getting the feed locations.
- for section in feed_dict.keys():
- if slug_dict.get(section, False):
- for slug in slug_dict[section]:
- self.locations.append('%s/%s' % (section, slug))
- else:
- self.locations.append(section)
-
- def get_urls(self, page=1, site=None):
- """
- This method is overrridden so the appropriate `geo_format` attribute
- is placed on each URL element.
- """
- urls = Sitemap.get_urls(self, page=page, site=site)
- for url in urls: url['geo_format'] = 'georss'
- return urls
-
- def items(self):
- return self.locations
-
- def location(self, obj):
- return urlresolvers.reverse('django.contrib.syndication.views.feed', args=(obj,))
-
diff --git a/parts/django/django/contrib/gis/sitemaps/kml.py b/parts/django/django/contrib/gis/sitemaps/kml.py
deleted file mode 100644
index db30606..0000000
--- a/parts/django/django/contrib/gis/sitemaps/kml.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from django.core import urlresolvers
-from django.contrib.sitemaps import Sitemap
-from django.contrib.gis.db.models.fields import GeometryField
-from django.db import models
-
-class KMLSitemap(Sitemap):
- """
- A minimal hook to produce KML sitemaps.
- """
- geo_format = 'kml'
-
- def __init__(self, locations=None):
- # If no locations specified, then we try to build for
- # every model in installed applications.
- self.locations = self._build_kml_sources(locations)
-
- def _build_kml_sources(self, sources):
- """
- Goes through the given sources and returns a 3-tuple of
- the application label, module name, and field name of every
- GeometryField encountered in the sources.
-
- If no sources are provided, then all models.
- """
- kml_sources = []
- if sources is None:
- sources = models.get_models()
- for source in sources:
- if isinstance(source, models.base.ModelBase):
- for field in source._meta.fields:
- if isinstance(field, GeometryField):
- kml_sources.append((source._meta.app_label,
- source._meta.module_name,
- field.name))
- elif isinstance(source, (list, tuple)):
- if len(source) != 3:
- raise ValueError('Must specify a 3-tuple of (app_label, module_name, field_name).')
- kml_sources.append(source)
- else:
- raise TypeError('KML Sources must be a model or a 3-tuple.')
- return kml_sources
-
- def get_urls(self, page=1, site=None):
- """
- This method is overrridden so the appropriate `geo_format` attribute
- is placed on each URL element.
- """
- urls = Sitemap.get_urls(self, page=page, site=site)
- for url in urls: url['geo_format'] = self.geo_format
- return urls
-
- def items(self):
- return self.locations
-
- def location(self, obj):
- return urlresolvers.reverse('django.contrib.gis.sitemaps.views.%s' % self.geo_format,
- kwargs={'label' : obj[0],
- 'model' : obj[1],
- 'field_name': obj[2],
- }
- )
-class KMZSitemap(KMLSitemap):
- geo_format = 'kmz'
diff --git a/parts/django/django/contrib/gis/sitemaps/views.py b/parts/django/django/contrib/gis/sitemaps/views.py
deleted file mode 100644
index 02a0fc0..0000000
--- a/parts/django/django/contrib/gis/sitemaps/views.py
+++ /dev/null
@@ -1,111 +0,0 @@
-from django.http import HttpResponse, Http404
-from django.template import loader
-from django.contrib.sites.models import get_current_site
-from django.core import urlresolvers
-from django.core.paginator import EmptyPage, PageNotAnInteger
-from django.contrib.gis.db.models.fields import GeometryField
-from django.db import connections, DEFAULT_DB_ALIAS
-from django.db.models import get_model
-from django.utils.encoding import smart_str
-
-from django.contrib.gis.shortcuts import render_to_kml, render_to_kmz
-
-def index(request, sitemaps):
- """
- This view generates a sitemap index that uses the proper view
- for resolving geographic section sitemap URLs.
- """
- current_site = get_current_site(request)
- sites = []
- protocol = request.is_secure() and 'https' or 'http'
- for section, site in sitemaps.items():
- if callable(site):
- pages = site().paginator.num_pages
- else:
- pages = site.paginator.num_pages
- sitemap_url = urlresolvers.reverse('django.contrib.gis.sitemaps.views.sitemap', kwargs={'section': section})
- sites.append('%s://%s%s' % (protocol, current_site.domain, sitemap_url))
-
- if pages > 1:
- for page in range(2, pages+1):
- sites.append('%s://%s%s?p=%s' % (protocol, current_site.domain, sitemap_url, page))
- xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
- return HttpResponse(xml, mimetype='application/xml')
-
-def sitemap(request, sitemaps, section=None):
- """
- This view generates a sitemap with additional geographic
- elements defined by Google.
- """
- maps, urls = [], []
- if section is not None:
- if section not in sitemaps:
- raise Http404("No sitemap available for section: %r" % section)
- maps.append(sitemaps[section])
- else:
- maps = sitemaps.values()
-
- page = request.GET.get("p", 1)
- current_site = get_current_site(request)
- for site in maps:
- try:
- if callable(site):
- urls.extend(site().get_urls(page=page, site=current_site))
- else:
- urls.extend(site.get_urls(page=page, site=current_site))
- except EmptyPage:
- raise Http404("Page %s empty" % page)
- except PageNotAnInteger:
- raise Http404("No page '%s'" % page)
- xml = smart_str(loader.render_to_string('gis/sitemaps/geo_sitemap.xml', {'urlset': urls}))
- return HttpResponse(xml, mimetype='application/xml')
-
-def kml(request, label, model, field_name=None, compress=False, using=DEFAULT_DB_ALIAS):
- """
- This view generates KML for the given app label, model, and field name.
-
- The model's default manager must be GeoManager, and the field name
- must be that of a geographic field.
- """
- placemarks = []
- klass = get_model(label, model)
- if not klass:
- raise Http404('You must supply a valid app label and module name. Got "%s.%s"' % (label, model))
-
- if field_name:
- try:
- info = klass._meta.get_field_by_name(field_name)
- if not isinstance(info[0], GeometryField):
- raise Exception
- except:
- raise Http404('Invalid geometry field.')
-
- connection = connections[using]
-
- if connection.ops.postgis:
- # PostGIS will take care of transformation.
- placemarks = klass._default_manager.using(using).kml(field_name=field_name)
- else:
- # There's no KML method on Oracle or MySQL, so we use the `kml`
- # attribute of the lazy geometry instead.
- placemarks = []
- if connection.ops.oracle:
- qs = klass._default_manager.using(using).transform(4326, field_name=field_name)
- else:
- qs = klass._default_manager.using(using).all()
- for mod in qs:
- setattr(mod, 'kml', getattr(mod, field_name).kml)
- placemarks.append(mod)
-
- # Getting the render function and rendering to the correct.
- if compress:
- render = render_to_kmz
- else:
- render = render_to_kml
- return render('gis/kml/placemarks.kml', {'places' : placemarks})
-
-def kmz(request, label, model, field_name=None, using=DEFAULT_DB_ALIAS):
- """
- This view returns KMZ for the given app label, model, and field name.
- """
- return kml(request, label, model, field_name, compress=True, using=using)
diff --git a/parts/django/django/contrib/gis/templates/gis/admin/openlayers.html b/parts/django/django/contrib/gis/templates/gis/admin/openlayers.html
deleted file mode 100644
index 4292eb6..0000000
--- a/parts/django/django/contrib/gis/templates/gis/admin/openlayers.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{% block extrastyle %}
-<style type="text/css">
- #{{ id }}_map { width: {{ map_width }}px; height: {{ map_height }}px; }
- #{{ id }}_map .aligned label { float:inherit; }
- #{{ id }}_admin_map { position: relative; vertical-align: top; float: {{ LANGUAGE_BIDI|yesno:"right,left" }}; }
- {% if not display_wkt %}#{{ id }} { display: none; }{% endif %}
- .olControlEditingToolbar .olControlModifyFeatureItemActive {
- background-image: url("{{ ADMIN_MEDIA_PREFIX }}img/gis/move_vertex_on.png");
- background-repeat: no-repeat;
- }
- .olControlEditingToolbar .olControlModifyFeatureItemInactive {
- background-image: url("{{ ADMIN_MEDIA_PREFIX }}img/gis/move_vertex_off.png");
- background-repeat: no-repeat;
- }
-</style>
-<!--[if IE]>
-<style type="text/css">
- /* This fixes the mouse offset issues in IE. */
- #{{ id }}_admin_map { position: static; vertical-align: top; }
- /* `font-size: 0` fixes the 1px border between tiles, but borks LayerSwitcher.
- Thus, this is disabled until a better fix is found.
- #{{ id }}_map { width: {{ map_width }}px; height: {{ map_height }}px; font-size: 0; } */
-</style>
-<![endif]-->
-{% endblock %}
-<span id="{{ id }}_admin_map">
-<script type="text/javascript">
-//<![CDATA[
-{% block openlayers %}{% include "gis/admin/openlayers.js" %}{% endblock %}
-//]]>
-</script>
-<div id="{{ id }}_map"{% if LANGUAGE_BIDI %} dir="ltr"{% endif %}></div>
-<a href="javascript:{{ module }}.clearFeatures()">Delete all Features</a>
-{% if display_wkt %}<p> WKT debugging window:</p>{% endif %}
-<textarea id="{{ id }}" class="vWKTField required" cols="150" rows="10" name="{{ name }}">{{ wkt }}</textarea>
-<script type="text/javascript">{% block init_function %}{{ module }}.init();{% endblock %}</script>
-</span>
diff --git a/parts/django/django/contrib/gis/templates/gis/admin/openlayers.js b/parts/django/django/contrib/gis/templates/gis/admin/openlayers.js
deleted file mode 100644
index 4324693..0000000
--- a/parts/django/django/contrib/gis/templates/gis/admin/openlayers.js
+++ /dev/null
@@ -1,167 +0,0 @@
-{# Author: Justin Bronn, Travis Pinney & Dane Springmeyer #}
-{% block vars %}var {{ module }} = {};
-{{ module }}.map = null; {{ module }}.controls = null; {{ module }}.panel = null; {{ module }}.re = new RegExp("^SRID=\d+;(.+)", "i"); {{ module }}.layers = {};
-{{ module }}.modifiable = {{ modifiable|yesno:"true,false" }};
-{{ module }}.wkt_f = new OpenLayers.Format.WKT();
-{{ module }}.is_collection = {{ is_collection|yesno:"true,false" }};
-{{ module }}.collection_type = '{{ collection_type }}';
-{{ module }}.is_linestring = {{ is_linestring|yesno:"true,false" }};
-{{ module }}.is_polygon = {{ is_polygon|yesno:"true,false" }};
-{{ module }}.is_point = {{ is_point|yesno:"true,false" }};
-{% endblock %}
-{{ module }}.get_ewkt = function(feat){return 'SRID={{ srid }};' + {{ module }}.wkt_f.write(feat);}
-{{ module }}.read_wkt = function(wkt){
- // OpenLayers cannot handle EWKT -- we make sure to strip it out.
- // EWKT is only exposed to OL if there's a validation error in the admin.
- var match = {{ module }}.re.exec(wkt);
- if (match){wkt = match[1];}
- return {{ module }}.wkt_f.read(wkt);
-}
-{{ module }}.write_wkt = function(feat){
- if ({{ module }}.is_collection){ {{ module }}.num_geom = feat.geometry.components.length;}
- else { {{ module }}.num_geom = 1;}
- document.getElementById('{{ id }}').value = {{ module }}.get_ewkt(feat);
-}
-{{ module }}.add_wkt = function(event){
- // This function will sync the contents of the `vector` layer with the
- // WKT in the text field.
- if ({{ module }}.is_collection){
- var feat = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.{{ geom_type }}());
- for (var i = 0; i < {{ module }}.layers.vector.features.length; i++){
- feat.geometry.addComponents([{{ module }}.layers.vector.features[i].geometry]);
- }
- {{ module }}.write_wkt(feat);
- } else {
- // Make sure to remove any previously added features.
- if ({{ module }}.layers.vector.features.length > 1){
- old_feats = [{{ module }}.layers.vector.features[0]];
- {{ module }}.layers.vector.removeFeatures(old_feats);
- {{ module }}.layers.vector.destroyFeatures(old_feats);
- }
- {{ module }}.write_wkt(event.feature);
- }
-}
-{{ module }}.modify_wkt = function(event){
- if ({{ module }}.is_collection){
- if ({{ module }}.is_point){
- {{ module }}.add_wkt(event);
- return;
- } else {
- // When modifying the selected components are added to the
- // vector layer so we only increment to the `num_geom` value.
- var feat = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.{{ geom_type }}());
- for (var i = 0; i < {{ module }}.num_geom; i++){
- feat.geometry.addComponents([{{ module }}.layers.vector.features[i].geometry]);
- }
- {{ module }}.write_wkt(feat);
- }
- } else {
- {{ module }}.write_wkt(event.feature);
- }
-}
-// Function to clear vector features and purge wkt from div
-{{ module }}.deleteFeatures = function(){
- {{ module }}.layers.vector.removeFeatures({{ module }}.layers.vector.features);
- {{ module }}.layers.vector.destroyFeatures();
-}
-{{ module }}.clearFeatures = function (){
- {{ module }}.deleteFeatures();
- document.getElementById('{{ id }}').value = '';
- {{ module }}.map.setCenter(new OpenLayers.LonLat({{ default_lon }}, {{ default_lat }}), {{ default_zoom }});
-}
-// Add Select control
-{{ module }}.addSelectControl = function(){
- var select = new OpenLayers.Control.SelectFeature({{ module }}.layers.vector, {'toggle' : true, 'clickout' : true});
- {{ module }}.map.addControl(select);
- select.activate();
-}
-{{ module }}.enableDrawing = function(){ {{ module }}.map.getControlsByClass('OpenLayers.Control.DrawFeature')[0].activate();}
-{{ module }}.enableEditing = function(){ {{ module }}.map.getControlsByClass('OpenLayers.Control.ModifyFeature')[0].activate();}
-// Create an array of controls based on geometry type
-{{ module }}.getControls = function(lyr){
- {{ module }}.panel = new OpenLayers.Control.Panel({'displayClass': 'olControlEditingToolbar'});
- var nav = new OpenLayers.Control.Navigation();
- var draw_ctl;
- if ({{ module }}.is_linestring){
- draw_ctl = new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Path, {'displayClass': 'olControlDrawFeaturePath'});
- } else if ({{ module }}.is_polygon){
- draw_ctl = new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'});
- } else if ({{ module }}.is_point){
- draw_ctl = new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Point, {'displayClass': 'olControlDrawFeaturePoint'});
- }
- if ({{ module }}.modifiable){
- var mod = new OpenLayers.Control.ModifyFeature(lyr, {'displayClass': 'olControlModifyFeature'});
- {{ module }}.controls = [nav, draw_ctl, mod];
- } else {
- if(!lyr.features.length){
- {{ module }}.controls = [nav, draw_ctl];
- } else {
- {{ module }}.controls = [nav];
- }
- }
-}
-{{ module }}.init = function(){
- {% block map_options %}// The options hash, w/ zoom, resolution, and projection settings.
- var options = {
-{% autoescape off %}{% for item in map_options.items %} '{{ item.0 }}' : {{ item.1 }}{% if not forloop.last %},{% endif %}
-{% endfor %}{% endautoescape %} };{% endblock %}
- // The admin map for this geometry field.
- {{ module }}.map = new OpenLayers.Map('{{ id }}_map', options);
- // Base Layer
- {{ module }}.layers.base = {% block base_layer %}new OpenLayers.Layer.WMS( "{{ wms_name }}", "{{ wms_url }}", {layers: '{{ wms_layer }}'} );{% endblock %}
- {{ module }}.map.addLayer({{ module }}.layers.base);
- {% block extra_layers %}{% endblock %}
- {% if is_linestring %}OpenLayers.Feature.Vector.style["default"]["strokeWidth"] = 3; // Default too thin for linestrings. {% endif %}
- {{ module }}.layers.vector = new OpenLayers.Layer.Vector(" {{ field_name }}");
- {{ module }}.map.addLayer({{ module }}.layers.vector);
- // Read WKT from the text field.
- var wkt = document.getElementById('{{ id }}').value;
- if (wkt){
- // After reading into geometry, immediately write back to
- // WKT <textarea> as EWKT (so that SRID is included).
- var admin_geom = {{ module }}.read_wkt(wkt);
- {{ module }}.write_wkt(admin_geom);
- if ({{ module }}.is_collection){
- // If geometry collection, add each component individually so they may be
- // edited individually.
- for (var i = 0; i < {{ module }}.num_geom; i++){
- {{ module }}.layers.vector.addFeatures([new OpenLayers.Feature.Vector(admin_geom.geometry.components[i].clone())]);
- }
- } else {
- {{ module }}.layers.vector.addFeatures([admin_geom]);
- }
- // Zooming to the bounds.
- {{ module }}.map.zoomToExtent(admin_geom.geometry.getBounds());
- if ({{ module }}.is_point){
- {{ module }}.map.zoomTo({{ point_zoom }});
- }
- } else {
- {{ module }}.map.setCenter(new OpenLayers.LonLat({{ default_lon }}, {{ default_lat }}), {{ default_zoom }});
- }
- // This allows editing of the geographic fields -- the modified WKT is
- // written back to the content field (as EWKT, so that the ORM will know
- // to transform back to original SRID).
- {{ module }}.layers.vector.events.on({"featuremodified" : {{ module }}.modify_wkt});
- {{ module }}.layers.vector.events.on({"featureadded" : {{ module }}.add_wkt});
- {% block controls %}
- // Map controls:
- // Add geometry specific panel of toolbar controls
- {{ module }}.getControls({{ module }}.layers.vector);
- {{ module }}.panel.addControls({{ module }}.controls);
- {{ module }}.map.addControl({{ module }}.panel);
- {{ module }}.addSelectControl();
- // Then add optional visual controls
- {% if mouse_position %}{{ module }}.map.addControl(new OpenLayers.Control.MousePosition());{% endif %}
- {% if scale_text %}{{ module }}.map.addControl(new OpenLayers.Control.Scale());{% endif %}
- {% if layerswitcher %}{{ module }}.map.addControl(new OpenLayers.Control.LayerSwitcher());{% endif %}
- // Then add optional behavior controls
- {% if not scrollable %}{{ module }}.map.getControlsByClass('OpenLayers.Control.Navigation')[0].disableZoomWheel();{% endif %}
- {% endblock %}
- if (wkt){
- if ({{ module }}.modifiable){
- {{ module }}.enableEditing();
- }
- } else {
- {{ module }}.enableDrawing();
- }
-}
diff --git a/parts/django/django/contrib/gis/templates/gis/admin/osm.html b/parts/django/django/contrib/gis/templates/gis/admin/osm.html
deleted file mode 100644
index b74b41f..0000000
--- a/parts/django/django/contrib/gis/templates/gis/admin/osm.html
+++ /dev/null
@@ -1,2 +0,0 @@
-{% extends "gis/admin/openlayers.html" %}
-{% block openlayers %}{% include "gis/admin/osm.js" %}{% endblock %} \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/templates/gis/admin/osm.js b/parts/django/django/contrib/gis/templates/gis/admin/osm.js
deleted file mode 100644
index 2a1f59e..0000000
--- a/parts/django/django/contrib/gis/templates/gis/admin/osm.js
+++ /dev/null
@@ -1,2 +0,0 @@
-{% extends "gis/admin/openlayers.js" %}
-{% block base_layer %}new OpenLayers.Layer.OSM.Mapnik("OpenStreetMap (Mapnik)");{% endblock %}
diff --git a/parts/django/django/contrib/gis/templates/gis/google/google-map.html b/parts/django/django/contrib/gis/templates/gis/google/google-map.html
deleted file mode 100644
index fb60e44..0000000
--- a/parts/django/django/contrib/gis/templates/gis/google/google-map.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" {{ gmap.xmlns }}>
-<head>
- <title>{% block title %}Google Maps via GeoDjango{% endblock %}</title>
- {{ gmap.style }}
- {{ gmap.scripts }}
-</head>
-<body {{ gmap.onload }} {{ gmap.onunload }}>
-{% if gmap.dom_ids %}{% for dom_id in gmap.dom_ids %}<div id="{{ dom_id }}" style="width:600px;height:400px;"></div>{% endfor %}
-{% else %}<div id="{{ gmap.dom_id }}" style="width:600px;height:400px;"></div>{% endif %}
-</body>
-</html>
diff --git a/parts/django/django/contrib/gis/templates/gis/google/google-map.js b/parts/django/django/contrib/gis/templates/gis/google/google-map.js
deleted file mode 100644
index 06f11e3..0000000
--- a/parts/django/django/contrib/gis/templates/gis/google/google-map.js
+++ /dev/null
@@ -1,35 +0,0 @@
-{% autoescape off %}
-{% block vars %}var geodjango = {};{% for icon in icons %}
-var {{ icon.varname }} = new GIcon(G_DEFAULT_ICON);
-{% if icon.image %}{{ icon.varname }}.image = "{{ icon.image }}";{% endif %}
-{% if icon.shadow %}{{ icon.varname }}.shadow = "{{ icon.shadow }}";{% endif %} {% if icon.shadowsize %}{{ icon.varname }}.shadowSize = new GSize({{ icon.shadowsize.0 }}, {{ icon.shadowsize.1 }});{% endif %}
-{% if icon.iconanchor %}{{ icon.varname }}.iconAnchor = new GPoint({{ icon.iconanchor.0 }}, {{ icon.iconanchor.1 }});{% endif %} {% if icon.iconsize %}{{ icon.varname }}.iconSize = new GSize({{ icon.iconsize.0 }}, {{ icon.iconsize.1 }});{% endif %}
-{% if icon.infowindowanchor %}{{ icon.varname }}.infoWindowAnchor = new GPoint({{ icon.infowindowanchor.0 }}, {{ icon.infowindowanchor.1 }});{% endif %}{% endfor %}
-{% endblock vars %}{% block functions %}
-{% block load %}{{ js_module }}.{{ dom_id }}_load = function(){
- if (GBrowserIsCompatible()) {
- {{ js_module }}.{{ dom_id }} = new GMap2(document.getElementById("{{ dom_id }}"));
- {{ js_module }}.{{ dom_id }}.setCenter(new GLatLng({{ center.1 }}, {{ center.0 }}), {{ zoom }});
- {% block controls %}{{ js_module }}.{{ dom_id }}.setUIToDefault();{% endblock %}
- {% if calc_zoom %}var bounds = new GLatLngBounds(); var tmp_bounds = new GLatLngBounds();{% endif %}
- {% for kml_url in kml_urls %}{{ js_module }}.{{ dom_id }}_kml{{ forloop.counter }} = new GGeoXml("{{ kml_url }}");
- {{ js_module }}.{{ dom_id }}.addOverlay({{ js_module }}.{{ dom_id }}_kml{{ forloop.counter }});{% endfor %}
- {% for polygon in polygons %}{{ js_module }}.{{ dom_id }}_poly{{ forloop.counter }} = new {{ polygon }};
- {{ js_module }}.{{ dom_id }}.addOverlay({{ js_module }}.{{ dom_id }}_poly{{ forloop.counter }});
- {% for event in polygon.events %}GEvent.addListener({{ js_module }}.{{ dom_id }}_poly{{ forloop.parentloop.counter }}, {{ event }});{% endfor %}
- {% if calc_zoom %}tmp_bounds = {{ js_module }}.{{ dom_id }}_poly{{ forloop.counter }}.getBounds(); bounds.extend(tmp_bounds.getSouthWest()); bounds.extend(tmp_bounds.getNorthEast());{% endif %}{% endfor %}
- {% for polyline in polylines %}{{ js_module }}.{{ dom_id }}_polyline{{ forloop.counter }} = new {{ polyline }};
- {{ js_module }}.{{ dom_id }}.addOverlay({{ js_module }}.{{ dom_id }}_polyline{{ forloop.counter }});
- {% for event in polyline.events %}GEvent.addListener({{ js_module }}.{{ dom_id }}_polyline{{ forloop.parentloop.counter }}, {{ event }}); {% endfor %}
- {% if calc_zoom %}tmp_bounds = {{ js_module }}.{{ dom_id }}_polyline{{ forloop.counter }}.getBounds(); bounds.extend(tmp_bounds.getSouthWest()); bounds.extend(tmp_bounds.getNorthEast());{% endif %}{% endfor %}
- {% for marker in markers %}{{ js_module }}.{{ dom_id }}_marker{{ forloop.counter }} = new {{ marker }};
- {{ js_module }}.{{ dom_id }}.addOverlay({{ js_module }}.{{ dom_id }}_marker{{ forloop.counter }});
- {% for event in marker.events %}GEvent.addListener({{ js_module }}.{{ dom_id }}_marker{{ forloop.parentloop.counter }}, {{ event }}); {% endfor %}
- {% if calc_zoom %}bounds.extend({{ js_module }}.{{ dom_id }}_marker{{ forloop.counter }}.getLatLng()); {% endif %}{% endfor %}
- {% if calc_zoom %}{{ js_module }}.{{ dom_id }}.setCenter(bounds.getCenter(), {{ js_module }}.{{ dom_id }}.getBoundsZoomLevel(bounds));{% endif %}
- {% block load_extra %}{% endblock %}
- }else {
- alert("Sorry, the Google Maps API is not compatible with this browser.");
- }
-}
-{% endblock load %}{% endblock functions %}{% endautoescape %}
diff --git a/parts/django/django/contrib/gis/templates/gis/google/google-multi.js b/parts/django/django/contrib/gis/templates/gis/google/google-multi.js
deleted file mode 100644
index e3c7e8f..0000000
--- a/parts/django/django/contrib/gis/templates/gis/google/google-multi.js
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "gis/google/google-map.js" %}
-{% block functions %}
-{{ load_map_js }}
-{{ js_module }}.load = function(){
- {% for dom_id in dom_ids %}{{ js_module }}.{{ dom_id }}_load();
- {% endfor %}
-}
-{% endblock %} \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/templates/gis/google/google-single.js b/parts/django/django/contrib/gis/templates/gis/google/google-single.js
deleted file mode 100644
index b930e45..0000000
--- a/parts/django/django/contrib/gis/templates/gis/google/google-single.js
+++ /dev/null
@@ -1,2 +0,0 @@
-{% extends "gis/google/google-map.js" %}
-{% block vars %}{# No vars here because used within GoogleMapSet #}{% endblock %} \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/templates/gis/kml/base.kml b/parts/django/django/contrib/gis/templates/gis/kml/base.kml
deleted file mode 100644
index 374404c..0000000
--- a/parts/django/django/contrib/gis/templates/gis/kml/base.kml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<kml xmlns="http://earth.google.com/kml/{% block kml_version %}2.1{% endblock %}">
-<Document>{% block name %}{% endblock %}
-{% block placemarks %}{% endblock %}
-</Document>
-</kml>
diff --git a/parts/django/django/contrib/gis/templates/gis/kml/placemarks.kml b/parts/django/django/contrib/gis/templates/gis/kml/placemarks.kml
deleted file mode 100644
index ea2ac19..0000000
--- a/parts/django/django/contrib/gis/templates/gis/kml/placemarks.kml
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "gis/kml/base.kml" %}
-{% block placemarks %}{% for place in places %}
- <Placemark>
- <name>{% if place.name %}{{ place.name }}{% else %}{{ place }}{% endif %}</name>
- <description>{% if place.description %}{{ place.description }}{% else %}{{ place }}{% endif %}</description>
- {{ place.kml|safe }}
- </Placemark>{% endfor %}{% endblock %}
-
diff --git a/parts/django/django/contrib/gis/templates/gis/sitemaps/geo_sitemap.xml b/parts/django/django/contrib/gis/templates/gis/sitemaps/geo_sitemap.xml
deleted file mode 100644
index dbf858e..0000000
--- a/parts/django/django/contrib/gis/templates/gis/sitemaps/geo_sitemap.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-{% autoescape off %}<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:geo="http://www.google.com/geo/schemas/sitemap/1.0">
-{% spaceless %}
-{% for url in urlset %}
- <url>
- <loc>{{ url.location|escape }}</loc>
- {% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
- {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
- {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
- {% if url.geo_format %}<geo:geo>
- <geo:format>{{ url.geo_format }}</geo:format>
- </geo:geo>{% endif %}
- </url>
-{% endfor %}
-{% endspaceless %}
-</urlset>
-{% endautoescape %}
diff --git a/parts/django/django/contrib/gis/tests/__init__.py b/parts/django/django/contrib/gis/tests/__init__.py
deleted file mode 100644
index 138c291..0000000
--- a/parts/django/django/contrib/gis/tests/__init__.py
+++ /dev/null
@@ -1,141 +0,0 @@
-import unittest
-
-from django.conf import settings
-from django.test.simple import build_suite, DjangoTestSuiteRunner
-
-
-def run_tests(*args, **kwargs):
- from django.test.simple import run_tests as base_run_tests
- return base_run_tests(*args, **kwargs)
-
-
-def run_gis_tests(test_labels, verbosity=1, interactive=True, failfast=False, extra_tests=None):
- import warnings
- warnings.warn(
- 'The run_gis_tests() test runner has been deprecated in favor of GeoDjangoTestSuiteRunner.',
- PendingDeprecationWarning
- )
- test_runner = GeoDjangoTestSuiteRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
- return test_runner.run_tests(test_labels, extra_tests=extra_tests)
-
-
-def geo_apps(namespace=True, runtests=False):
- """
- Returns a list of GeoDjango test applications that reside in
- `django.contrib.gis.tests` that can be used with the current
- database and the spatial libraries that are installed.
- """
- from django.db import connection
- from django.contrib.gis.geos import GEOS_PREPARE
- from django.contrib.gis.gdal import HAS_GDAL
-
- apps = ['geoapp', 'relatedapp']
-
- # No distance queries on MySQL.
- if not connection.ops.mysql:
- apps.append('distapp')
-
- # Test geography support with PostGIS 1.5+.
- if connection.ops.postgis and connection.ops.geography:
- apps.append('geogapp')
-
- # The following GeoDjango test apps depend on GDAL support.
- if HAS_GDAL:
- # 3D apps use LayerMapping, which uses GDAL.
- if connection.ops.postgis and GEOS_PREPARE:
- apps.append('geo3d')
-
- apps.append('layermap')
-
- if runtests:
- return [('django.contrib.gis.tests', app) for app in apps]
- elif namespace:
- return ['django.contrib.gis.tests.%s' % app
- for app in apps]
- else:
- return apps
-
-
-def geodjango_suite(apps=True):
- """
- Returns a TestSuite consisting only of GeoDjango tests that can be run.
- """
- import sys
- from django.db.models import get_app
-
- suite = unittest.TestSuite()
-
- # Adding the GEOS tests.
- from django.contrib.gis.geos import tests as geos_tests
- suite.addTest(geos_tests.suite())
-
- # Adding the measurment tests.
- from django.contrib.gis.tests import test_measure
- suite.addTest(test_measure.suite())
-
- # Adding GDAL tests, and any test suite that depends on GDAL, to the
- # suite if GDAL is available.
- from django.contrib.gis.gdal import HAS_GDAL
- if HAS_GDAL:
- from django.contrib.gis.gdal import tests as gdal_tests
- suite.addTest(gdal_tests.suite())
-
- from django.contrib.gis.tests import test_spatialrefsys, test_geoforms
- suite.addTest(test_spatialrefsys.suite())
- suite.addTest(test_geoforms.suite())
- else:
- sys.stderr.write('GDAL not available - no tests requiring GDAL will be run.\n')
-
- # Add GeoIP tests to the suite, if the library and data is available.
- from django.contrib.gis.utils import HAS_GEOIP
- if HAS_GEOIP and hasattr(settings, 'GEOIP_PATH'):
- from django.contrib.gis.tests import test_geoip
- suite.addTest(test_geoip.suite())
-
- # Finally, adding the suites for each of the GeoDjango test apps.
- if apps:
- for app_name in geo_apps(namespace=False):
- suite.addTest(build_suite(get_app(app_name)))
-
- return suite
-
-
-class GeoDjangoTestSuiteRunner(DjangoTestSuiteRunner):
-
- def setup_test_environment(self, **kwargs):
- super(GeoDjangoTestSuiteRunner, self).setup_test_environment(**kwargs)
-
- # Saving original values of INSTALLED_APPS, ROOT_URLCONF, and SITE_ID.
- self.old_installed = getattr(settings, 'INSTALLED_APPS', None)
- self.old_root_urlconf = getattr(settings, 'ROOT_URLCONF', '')
- self.old_site_id = getattr(settings, 'SITE_ID', None)
-
- # Constructing the new INSTALLED_APPS, and including applications
- # within the GeoDjango test namespace.
- new_installed = ['django.contrib.sites',
- 'django.contrib.sitemaps',
- 'django.contrib.gis',
- ]
-
- # Calling out to `geo_apps` to get GeoDjango applications supported
- # for testing.
- new_installed.extend(geo_apps())
- settings.INSTALLED_APPS = new_installed
-
- # SITE_ID needs to be set
- settings.SITE_ID = 1
-
- # ROOT_URLCONF needs to be set, else `AttributeErrors` are raised
- # when TestCases are torn down that have `urls` defined.
- settings.ROOT_URLCONF = ''
-
-
- def teardown_test_environment(self, **kwargs):
- super(GeoDjangoTestSuiteRunner, self).teardown_test_environment(**kwargs)
- settings.INSTALLED_APPS = self.old_installed
- settings.ROOT_URLCONF = self.old_root_urlconf
- settings.SITE_ID = self.old_site_id
-
-
- def build_suite(self, test_labels, extra_tests=None, **kwargs):
- return geodjango_suite()
diff --git a/parts/django/django/contrib/gis/tests/data/cities/cities.dbf b/parts/django/django/contrib/gis/tests/data/cities/cities.dbf
deleted file mode 100644
index 8b27633..0000000
--- a/parts/django/django/contrib/gis/tests/data/cities/cities.dbf
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/cities/cities.prj b/parts/django/django/contrib/gis/tests/data/cities/cities.prj
deleted file mode 100644
index a30c00a..0000000
--- a/parts/django/django/contrib/gis/tests/data/cities/cities.prj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/tests/data/cities/cities.shp b/parts/django/django/contrib/gis/tests/data/cities/cities.shp
deleted file mode 100644
index 1c46ccc..0000000
--- a/parts/django/django/contrib/gis/tests/data/cities/cities.shp
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/cities/cities.shx b/parts/django/django/contrib/gis/tests/data/cities/cities.shx
deleted file mode 100644
index 6be3fd6..0000000
--- a/parts/django/django/contrib/gis/tests/data/cities/cities.shx
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/counties/counties.dbf b/parts/django/django/contrib/gis/tests/data/counties/counties.dbf
deleted file mode 100644
index ccdbb26..0000000
--- a/parts/django/django/contrib/gis/tests/data/counties/counties.dbf
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/counties/counties.shp b/parts/django/django/contrib/gis/tests/data/counties/counties.shp
deleted file mode 100644
index 2e7dca5..0000000
--- a/parts/django/django/contrib/gis/tests/data/counties/counties.shp
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/counties/counties.shx b/parts/django/django/contrib/gis/tests/data/counties/counties.shx
deleted file mode 100644
index 46ed3bb..0000000
--- a/parts/django/django/contrib/gis/tests/data/counties/counties.shx
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/geometries.json.gz b/parts/django/django/contrib/gis/tests/data/geometries.json.gz
deleted file mode 100644
index 683dc83..0000000
--- a/parts/django/django/contrib/gis/tests/data/geometries.json.gz
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/interstates/interstates.dbf b/parts/django/django/contrib/gis/tests/data/interstates/interstates.dbf
deleted file mode 100644
index a88d171..0000000
--- a/parts/django/django/contrib/gis/tests/data/interstates/interstates.dbf
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/interstates/interstates.prj b/parts/django/django/contrib/gis/tests/data/interstates/interstates.prj
deleted file mode 100644
index a30c00a..0000000
--- a/parts/django/django/contrib/gis/tests/data/interstates/interstates.prj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/tests/data/interstates/interstates.shp b/parts/django/django/contrib/gis/tests/data/interstates/interstates.shp
deleted file mode 100644
index 6d93de7..0000000
--- a/parts/django/django/contrib/gis/tests/data/interstates/interstates.shp
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/interstates/interstates.shx b/parts/django/django/contrib/gis/tests/data/interstates/interstates.shx
deleted file mode 100644
index 7b9088a..0000000
--- a/parts/django/django/contrib/gis/tests/data/interstates/interstates.shx
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/test_point/test_point.dbf b/parts/django/django/contrib/gis/tests/data/test_point/test_point.dbf
deleted file mode 100644
index b2b4eca..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_point/test_point.dbf
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/test_point/test_point.prj b/parts/django/django/contrib/gis/tests/data/test_point/test_point.prj
deleted file mode 100644
index a30c00a..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_point/test_point.prj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/tests/data/test_point/test_point.shp b/parts/django/django/contrib/gis/tests/data/test_point/test_point.shp
deleted file mode 100644
index 95e8b0a..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_point/test_point.shp
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/test_point/test_point.shx b/parts/django/django/contrib/gis/tests/data/test_point/test_point.shx
deleted file mode 100644
index 087f3da..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_point/test_point.shx
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.dbf b/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.dbf
deleted file mode 100644
index 7965bd6..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.dbf
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.prj b/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.prj
deleted file mode 100644
index a30c00a..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.prj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shp b/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shp
deleted file mode 100644
index b22930b..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shp
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shx b/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shx
deleted file mode 100644
index c92f78b..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_poly/test_poly.shx
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.csv b/parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.csv
deleted file mode 100644
index dff648f..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-POINT_X,POINT_Y,NUM
-1.0,2.0,5
-5.0,23.0,17
-100.0,523.5,23
diff --git a/parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.vrt b/parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.vrt
deleted file mode 100644
index 979c179..0000000
--- a/parts/django/django/contrib/gis/tests/data/test_vrt/test_vrt.vrt
+++ /dev/null
@@ -1,7 +0,0 @@
-<OGRVRTDataSource>
-<OGRVRTLayer name="test_vrt">
-<SrcDataSource relativeToVRT="1">test_vrt.csv</SrcDataSource>
-<GeometryType>wkbPoint25D</GeometryType>
-<GeometryField encoding="PointFromColumns" x="POINT_X" y="POINT_Y" z="NUM"/>
-</OGRVRTLayer>
-</OGRVRTDataSource> \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/tests/distapp/__init__.py b/parts/django/django/contrib/gis/tests/distapp/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/tests/distapp/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/tests/distapp/models.py b/parts/django/django/contrib/gis/tests/distapp/models.py
deleted file mode 100644
index 76e7d3a..0000000
--- a/parts/django/django/contrib/gis/tests/distapp/models.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from django.contrib.gis.db import models
-
-class SouthTexasCity(models.Model):
- "City model on projected coordinate system for South Texas."
- name = models.CharField(max_length=30)
- point = models.PointField(srid=32140)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class SouthTexasCityFt(models.Model):
- "Same City model as above, but U.S. survey feet are the units."
- name = models.CharField(max_length=30)
- point = models.PointField(srid=2278)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class AustraliaCity(models.Model):
- "City model for Australia, using WGS84."
- name = models.CharField(max_length=30)
- point = models.PointField()
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class CensusZipcode(models.Model):
- "Model for a few South Texas ZIP codes (in original Census NAD83)."
- name = models.CharField(max_length=5)
- poly = models.PolygonField(srid=4269)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class SouthTexasZipcode(models.Model):
- "Model for a few South Texas ZIP codes."
- name = models.CharField(max_length=5)
- poly = models.PolygonField(srid=32140, null=True)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class Interstate(models.Model):
- "Geodetic model for U.S. Interstates."
- name = models.CharField(max_length=10)
- path = models.LineStringField()
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class SouthTexasInterstate(models.Model):
- "Projected model for South Texas Interstates."
- name = models.CharField(max_length=10)
- path = models.LineStringField(srid=32140)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
diff --git a/parts/django/django/contrib/gis/tests/distapp/tests.py b/parts/django/django/contrib/gis/tests/distapp/tests.py
deleted file mode 100644
index 4f81a91..0000000
--- a/parts/django/django/contrib/gis/tests/distapp/tests.py
+++ /dev/null
@@ -1,358 +0,0 @@
-import os
-from decimal import Decimal
-
-from django.db import connection
-from django.db.models import Q
-from django.contrib.gis.geos import GEOSGeometry, Point, LineString
-from django.contrib.gis.measure import D # alias for Distance
-from django.contrib.gis.tests.utils import oracle, postgis, spatialite, no_oracle, no_spatialite
-from django.test import TestCase
-
-from models import AustraliaCity, Interstate, SouthTexasInterstate, \
- SouthTexasCity, SouthTexasCityFt, CensusZipcode, SouthTexasZipcode
-
-class DistanceTest(TestCase):
-
- # A point we are testing distances with -- using a WGS84
- # coordinate that'll be implicitly transormed to that to
- # the coordinate system of the field, EPSG:32140 (Texas South Central
- # w/units in meters)
- stx_pnt = GEOSGeometry('POINT (-95.370401017314293 29.704867409475465)', 4326)
- # Another one for Australia
- au_pnt = GEOSGeometry('POINT (150.791 -34.4919)', 4326)
-
- def get_names(self, qs):
- cities = [c.name for c in qs]
- cities.sort()
- return cities
-
- def test01_init(self):
- "Test initialization of distance models."
- self.assertEqual(9, SouthTexasCity.objects.count())
- self.assertEqual(9, SouthTexasCityFt.objects.count())
- self.assertEqual(11, AustraliaCity.objects.count())
- self.assertEqual(4, SouthTexasZipcode.objects.count())
- self.assertEqual(4, CensusZipcode.objects.count())
- self.assertEqual(1, Interstate.objects.count())
- self.assertEqual(1, SouthTexasInterstate.objects.count())
-
- @no_spatialite
- def test02_dwithin(self):
- "Testing the `dwithin` lookup type."
- # Distances -- all should be equal (except for the
- # degree/meter pair in au_cities, that's somewhat
- # approximate).
- tx_dists = [(7000, 22965.83), D(km=7), D(mi=4.349)]
- au_dists = [(0.5, 32000), D(km=32), D(mi=19.884)]
-
- # Expected cities for Australia and Texas.
- tx_cities = ['Downtown Houston', 'Southside Place']
- au_cities = ['Mittagong', 'Shellharbour', 'Thirroul', 'Wollongong']
-
- # Performing distance queries on two projected coordinate systems one
- # with units in meters and the other in units of U.S. survey feet.
- for dist in tx_dists:
- if isinstance(dist, tuple): dist1, dist2 = dist
- else: dist1 = dist2 = dist
- qs1 = SouthTexasCity.objects.filter(point__dwithin=(self.stx_pnt, dist1))
- qs2 = SouthTexasCityFt.objects.filter(point__dwithin=(self.stx_pnt, dist2))
- for qs in qs1, qs2:
- self.assertEqual(tx_cities, self.get_names(qs))
-
- # Now performing the `dwithin` queries on a geodetic coordinate system.
- for dist in au_dists:
- if isinstance(dist, D) and not oracle: type_error = True
- else: type_error = False
-
- if isinstance(dist, tuple):
- if oracle: dist = dist[1]
- else: dist = dist[0]
-
- # Creating the query set.
- qs = AustraliaCity.objects.order_by('name')
- if type_error:
- # A ValueError should be raised on PostGIS when trying to pass
- # Distance objects into a DWithin query using a geodetic field.
- self.assertRaises(ValueError, AustraliaCity.objects.filter(point__dwithin=(self.au_pnt, dist)).count)
- else:
- self.assertEqual(au_cities, self.get_names(qs.filter(point__dwithin=(self.au_pnt, dist))))
-
- def test03a_distance_method(self):
- "Testing the `distance` GeoQuerySet method on projected coordinate systems."
- # The point for La Grange, TX
- lagrange = GEOSGeometry('POINT(-96.876369 29.905320)', 4326)
- # Reference distances in feet and in meters. Got these values from
- # using the provided raw SQL statements.
- # SELECT ST_Distance(point, ST_Transform(ST_GeomFromText('POINT(-96.876369 29.905320)', 4326), 32140)) FROM distapp_southtexascity;
- m_distances = [147075.069813, 139630.198056, 140888.552826,
- 138809.684197, 158309.246259, 212183.594374,
- 70870.188967, 165337.758878, 139196.085105]
- # SELECT ST_Distance(point, ST_Transform(ST_GeomFromText('POINT(-96.876369 29.905320)', 4326), 2278)) FROM distapp_southtexascityft;
- # Oracle 11 thinks this is not a projected coordinate system, so it's s
- # not tested.
- ft_distances = [482528.79154625, 458103.408123001, 462231.860397575,
- 455411.438904354, 519386.252102563, 696139.009211594,
- 232513.278304279, 542445.630586414, 456679.155883207]
-
- # Testing using different variations of parameters and using models
- # with different projected coordinate systems.
- dist1 = SouthTexasCity.objects.distance(lagrange, field_name='point')
- dist2 = SouthTexasCity.objects.distance(lagrange) # Using GEOSGeometry parameter
- if spatialite or oracle:
- dist_qs = [dist1, dist2]
- else:
- dist3 = SouthTexasCityFt.objects.distance(lagrange.ewkt) # Using EWKT string parameter.
- dist4 = SouthTexasCityFt.objects.distance(lagrange)
- dist_qs = [dist1, dist2, dist3, dist4]
-
- # Original query done on PostGIS, have to adjust AlmostEqual tolerance
- # for Oracle.
- if oracle: tol = 2
- else: tol = 5
-
- # Ensuring expected distances are returned for each distance queryset.
- for qs in dist_qs:
- for i, c in enumerate(qs):
- self.assertAlmostEqual(m_distances[i], c.distance.m, tol)
- self.assertAlmostEqual(ft_distances[i], c.distance.survey_ft, tol)
-
- @no_spatialite
- def test03b_distance_method(self):
- "Testing the `distance` GeoQuerySet method on geodetic coordnate systems."
- if oracle: tol = 2
- else: tol = 5
-
- # Testing geodetic distance calculation with a non-point geometry
- # (a LineString of Wollongong and Shellharbour coords).
- ls = LineString( ( (150.902, -34.4245), (150.87, -34.5789) ) )
- if oracle or connection.ops.geography:
- # Reference query:
- # SELECT ST_distance_sphere(point, ST_GeomFromText('LINESTRING(150.9020 -34.4245,150.8700 -34.5789)', 4326)) FROM distapp_australiacity ORDER BY name;
- distances = [1120954.92533513, 140575.720018241, 640396.662906304,
- 60580.9693849269, 972807.955955075, 568451.8357838,
- 40435.4335201384, 0, 68272.3896586844, 12375.0643697706, 0]
- qs = AustraliaCity.objects.distance(ls).order_by('name')
- for city, distance in zip(qs, distances):
- # Testing equivalence to within a meter.
- self.assertAlmostEqual(distance, city.distance.m, 0)
- else:
- # PostGIS 1.4 and below is limited to disance queries only
- # to/from point geometries, check for raising of ValueError.
- self.assertRaises(ValueError, AustraliaCity.objects.distance, ls)
- self.assertRaises(ValueError, AustraliaCity.objects.distance, ls.wkt)
-
- # Got the reference distances using the raw SQL statements:
- # SELECT ST_distance_spheroid(point, ST_GeomFromText('POINT(151.231341 -33.952685)', 4326), 'SPHEROID["WGS 84",6378137.0,298.257223563]') FROM distapp_australiacity WHERE (NOT (id = 11));
- # SELECT ST_distance_sphere(point, ST_GeomFromText('POINT(151.231341 -33.952685)', 4326)) FROM distapp_australiacity WHERE (NOT (id = 11)); st_distance_sphere
- if connection.ops.postgis and connection.ops.proj_version_tuple() >= (4, 7, 0):
- # PROJ.4 versions 4.7+ have updated datums, and thus different
- # distance values.
- spheroid_distances = [60504.0628957201, 77023.9489850262, 49154.8867574404,
- 90847.4358768573, 217402.811919332, 709599.234564757,
- 640011.483550888, 7772.00667991925, 1047861.78619339,
- 1165126.55236034]
- sphere_distances = [60580.9693849267, 77144.0435286473, 49199.4415344719,
- 90804.7533823494, 217713.384600405, 709134.127242793,
- 639828.157159169, 7786.82949717788, 1049204.06569028,
- 1162623.7238134]
-
- else:
- spheroid_distances = [60504.0628825298, 77023.948962654, 49154.8867507115,
- 90847.435881812, 217402.811862568, 709599.234619957,
- 640011.483583758, 7772.00667666425, 1047861.7859506,
- 1165126.55237647]
- sphere_distances = [60580.7612632291, 77143.7785056615, 49199.2725132184,
- 90804.4414289463, 217712.63666124, 709131.691061906,
- 639825.959074112, 7786.80274606706, 1049200.46122281,
- 1162619.7297006]
-
- # Testing with spheroid distances first.
- hillsdale = AustraliaCity.objects.get(name='Hillsdale')
- qs = AustraliaCity.objects.exclude(id=hillsdale.id).distance(hillsdale.point, spheroid=True)
- for i, c in enumerate(qs):
- self.assertAlmostEqual(spheroid_distances[i], c.distance.m, tol)
- if postgis:
- # PostGIS uses sphere-only distances by default, testing these as well.
- qs = AustraliaCity.objects.exclude(id=hillsdale.id).distance(hillsdale.point)
- for i, c in enumerate(qs):
- self.assertAlmostEqual(sphere_distances[i], c.distance.m, tol)
-
- @no_oracle # Oracle already handles geographic distance calculation.
- def test03c_distance_method(self):
- "Testing the `distance` GeoQuerySet method used with `transform` on a geographic field."
- # Normally you can't compute distances from a geometry field
- # that is not a PointField (on PostGIS 1.4 and below).
- if not connection.ops.geography:
- self.assertRaises(ValueError, CensusZipcode.objects.distance, self.stx_pnt)
-
- # We'll be using a Polygon (created by buffering the centroid
- # of 77005 to 100m) -- which aren't allowed in geographic distance
- # queries normally, however our field has been transformed to
- # a non-geographic system.
- z = SouthTexasZipcode.objects.get(name='77005')
-
- # Reference query:
- # SELECT ST_Distance(ST_Transform("distapp_censuszipcode"."poly", 32140), ST_GeomFromText('<buffer_wkt>', 32140)) FROM "distapp_censuszipcode";
- dists_m = [3553.30384972258, 1243.18391525602, 2186.15439472242]
-
- # Having our buffer in the SRID of the transformation and of the field
- # -- should get the same results. The first buffer has no need for
- # transformation SQL because it is the same SRID as what was given
- # to `transform()`. The second buffer will need to be transformed,
- # however.
- buf1 = z.poly.centroid.buffer(100)
- buf2 = buf1.transform(4269, clone=True)
- ref_zips = ['77002', '77025', '77401']
-
- for buf in [buf1, buf2]:
- qs = CensusZipcode.objects.exclude(name='77005').transform(32140).distance(buf)
- self.assertEqual(ref_zips, self.get_names(qs))
- for i, z in enumerate(qs):
- self.assertAlmostEqual(z.distance.m, dists_m[i], 5)
-
- def test04_distance_lookups(self):
- "Testing the `distance_lt`, `distance_gt`, `distance_lte`, and `distance_gte` lookup types."
- # Retrieving the cities within a 20km 'donut' w/a 7km radius 'hole'
- # (thus, Houston and Southside place will be excluded as tested in
- # the `test02_dwithin` above).
- qs1 = SouthTexasCity.objects.filter(point__distance_gte=(self.stx_pnt, D(km=7))).filter(point__distance_lte=(self.stx_pnt, D(km=20)))
-
- # Can't determine the units on SpatiaLite from PROJ.4 string, and
- # Oracle 11 incorrectly thinks it is not projected.
- if spatialite or oracle:
- dist_qs = (qs1,)
- else:
- qs2 = SouthTexasCityFt.objects.filter(point__distance_gte=(self.stx_pnt, D(km=7))).filter(point__distance_lte=(self.stx_pnt, D(km=20)))
- dist_qs = (qs1, qs2)
-
- for qs in dist_qs:
- cities = self.get_names(qs)
- self.assertEqual(cities, ['Bellaire', 'Pearland', 'West University Place'])
-
- # Doing a distance query using Polygons instead of a Point.
- z = SouthTexasZipcode.objects.get(name='77005')
- qs = SouthTexasZipcode.objects.exclude(name='77005').filter(poly__distance_lte=(z.poly, D(m=275)))
- self.assertEqual(['77025', '77401'], self.get_names(qs))
- # If we add a little more distance 77002 should be included.
- qs = SouthTexasZipcode.objects.exclude(name='77005').filter(poly__distance_lte=(z.poly, D(m=300)))
- self.assertEqual(['77002', '77025', '77401'], self.get_names(qs))
-
- def test05_geodetic_distance_lookups(self):
- "Testing distance lookups on geodetic coordinate systems."
- # Line is from Canberra to Sydney. Query is for all other cities within
- # a 100km of that line (which should exclude only Hobart & Adelaide).
- line = GEOSGeometry('LINESTRING(144.9630 -37.8143,151.2607 -33.8870)', 4326)
- dist_qs = AustraliaCity.objects.filter(point__distance_lte=(line, D(km=100)))
-
- if oracle or connection.ops.geography:
- # Oracle and PostGIS 1.5 can do distance lookups on arbitrary geometries.
- self.assertEqual(9, dist_qs.count())
- self.assertEqual(['Batemans Bay', 'Canberra', 'Hillsdale',
- 'Melbourne', 'Mittagong', 'Shellharbour',
- 'Sydney', 'Thirroul', 'Wollongong'],
- self.get_names(dist_qs))
- else:
- # PostGIS 1.4 and below only allows geodetic distance queries (utilizing
- # ST_Distance_Sphere/ST_Distance_Spheroid) from Points to PointFields
- # on geometry columns.
- self.assertRaises(ValueError, dist_qs.count)
-
- # Ensured that a ValueError was raised, none of the rest of the test is
- # support on this backend, so bail now.
- if spatialite: return
-
- # Too many params (4 in this case) should raise a ValueError.
- self.assertRaises(ValueError, len,
- AustraliaCity.objects.filter(point__distance_lte=('POINT(5 23)', D(km=100), 'spheroid', '4')))
-
- # Not enough params should raise a ValueError.
- self.assertRaises(ValueError, len,
- AustraliaCity.objects.filter(point__distance_lte=('POINT(5 23)',)))
-
- # Getting all cities w/in 550 miles of Hobart.
- hobart = AustraliaCity.objects.get(name='Hobart')
- qs = AustraliaCity.objects.exclude(name='Hobart').filter(point__distance_lte=(hobart.point, D(mi=550)))
- cities = self.get_names(qs)
- self.assertEqual(cities, ['Batemans Bay', 'Canberra', 'Melbourne'])
-
- # Cities that are either really close or really far from Wollongong --
- # and using different units of distance.
- wollongong = AustraliaCity.objects.get(name='Wollongong')
- d1, d2 = D(yd=19500), D(nm=400) # Yards (~17km) & Nautical miles.
-
- # Normal geodetic distance lookup (uses `distance_sphere` on PostGIS.
- gq1 = Q(point__distance_lte=(wollongong.point, d1))
- gq2 = Q(point__distance_gte=(wollongong.point, d2))
- qs1 = AustraliaCity.objects.exclude(name='Wollongong').filter(gq1 | gq2)
-
- # Geodetic distance lookup but telling GeoDjango to use `distance_spheroid`
- # instead (we should get the same results b/c accuracy variance won't matter
- # in this test case).
- if postgis:
- gq3 = Q(point__distance_lte=(wollongong.point, d1, 'spheroid'))
- gq4 = Q(point__distance_gte=(wollongong.point, d2, 'spheroid'))
- qs2 = AustraliaCity.objects.exclude(name='Wollongong').filter(gq3 | gq4)
- querysets = [qs1, qs2]
- else:
- querysets = [qs1]
-
- for qs in querysets:
- cities = self.get_names(qs)
- self.assertEqual(cities, ['Adelaide', 'Hobart', 'Shellharbour', 'Thirroul'])
-
- def test06_area(self):
- "Testing the `area` GeoQuerySet method."
- # Reference queries:
- # SELECT ST_Area(poly) FROM distapp_southtexaszipcode;
- area_sq_m = [5437908.90234375, 10183031.4389648, 11254471.0073242, 9881708.91772461]
- # Tolerance has to be lower for Oracle and differences
- # with GEOS 3.0.0RC4
- tol = 2
- for i, z in enumerate(SouthTexasZipcode.objects.area()):
- self.assertAlmostEqual(area_sq_m[i], z.area.sq_m, tol)
-
- def test07_length(self):
- "Testing the `length` GeoQuerySet method."
- # Reference query (should use `length_spheroid`).
- # SELECT ST_length_spheroid(ST_GeomFromText('<wkt>', 4326) 'SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]]');
- len_m1 = 473504.769553813
- len_m2 = 4617.668
-
- if spatialite:
- # Does not support geodetic coordinate systems.
- self.assertRaises(ValueError, Interstate.objects.length)
- else:
- qs = Interstate.objects.length()
- if oracle: tol = 2
- else: tol = 5
- self.assertAlmostEqual(len_m1, qs[0].length.m, tol)
-
- # Now doing length on a projected coordinate system.
- i10 = SouthTexasInterstate.objects.length().get(name='I-10')
- self.assertAlmostEqual(len_m2, i10.length.m, 2)
-
- @no_spatialite
- def test08_perimeter(self):
- "Testing the `perimeter` GeoQuerySet method."
- # Reference query:
- # SELECT ST_Perimeter(distapp_southtexaszipcode.poly) FROM distapp_southtexaszipcode;
- perim_m = [18404.3550889361, 15627.2108551001, 20632.5588368978, 17094.5996143697]
- if oracle: tol = 2
- else: tol = 7
- for i, z in enumerate(SouthTexasZipcode.objects.perimeter()):
- self.assertAlmostEqual(perim_m[i], z.perimeter.m, tol)
-
- # Running on points; should return 0.
- for i, c in enumerate(SouthTexasCity.objects.perimeter(model_att='perim')):
- self.assertEqual(0, c.perim.m)
-
- def test09_measurement_null_fields(self):
- "Testing the measurement GeoQuerySet methods on fields with NULL values."
- # Creating SouthTexasZipcode w/NULL value.
- SouthTexasZipcode.objects.create(name='78212')
- # Performing distance/area queries against the NULL PolygonField,
- # and ensuring the result of the operations is None.
- htown = SouthTexasCity.objects.get(name='Downtown Houston')
- z = SouthTexasZipcode.objects.distance(htown.point).area().get(name='78212')
- self.assertEqual(None, z.distance)
- self.assertEqual(None, z.area)
diff --git a/parts/django/django/contrib/gis/tests/geo3d/__init__.py b/parts/django/django/contrib/gis/tests/geo3d/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/tests/geo3d/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/tests/geo3d/models.py b/parts/django/django/contrib/gis/tests/geo3d/models.py
deleted file mode 100644
index 3c4f77e..0000000
--- a/parts/django/django/contrib/gis/tests/geo3d/models.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from django.contrib.gis.db import models
-
-class City3D(models.Model):
- name = models.CharField(max_length=30)
- point = models.PointField(dim=3)
- objects = models.GeoManager()
-
- def __unicode__(self):
- return self.name
-
-class Interstate2D(models.Model):
- name = models.CharField(max_length=30)
- line = models.LineStringField(srid=4269)
- objects = models.GeoManager()
-
- def __unicode__(self):
- return self.name
-
-class Interstate3D(models.Model):
- name = models.CharField(max_length=30)
- line = models.LineStringField(dim=3, srid=4269)
- objects = models.GeoManager()
-
- def __unicode__(self):
- return self.name
-
-class InterstateProj2D(models.Model):
- name = models.CharField(max_length=30)
- line = models.LineStringField(srid=32140)
- objects = models.GeoManager()
-
- def __unicode__(self):
- return self.name
-
-class InterstateProj3D(models.Model):
- name = models.CharField(max_length=30)
- line = models.LineStringField(dim=3, srid=32140)
- objects = models.GeoManager()
-
- def __unicode__(self):
- return self.name
-
-class Polygon2D(models.Model):
- name = models.CharField(max_length=30)
- poly = models.PolygonField(srid=32140)
- objects = models.GeoManager()
-
- def __unicode__(self):
- return self.name
-
-class Polygon3D(models.Model):
- name = models.CharField(max_length=30)
- poly = models.PolygonField(dim=3, srid=32140)
- objects = models.GeoManager()
-
- def __unicode__(self):
- return self.name
-
-class Point2D(models.Model):
- point = models.PointField()
- objects = models.GeoManager()
-
-class Point3D(models.Model):
- point = models.PointField(dim=3)
- objects = models.GeoManager()
-
-class MultiPoint3D(models.Model):
- mpoint = models.MultiPointField(dim=3)
- objects = models.GeoManager()
diff --git a/parts/django/django/contrib/gis/tests/geo3d/tests.py b/parts/django/django/contrib/gis/tests/geo3d/tests.py
deleted file mode 100644
index f57445c..0000000
--- a/parts/django/django/contrib/gis/tests/geo3d/tests.py
+++ /dev/null
@@ -1,231 +0,0 @@
-import os
-import re
-from django.utils.unittest import TestCase
-from django.contrib.gis.db.models import Union, Extent3D
-from django.contrib.gis.geos import GEOSGeometry, Point, Polygon
-from django.contrib.gis.utils import LayerMapping, LayerMapError
-
-from models import City3D, Interstate2D, Interstate3D, \
- InterstateProj2D, InterstateProj3D, \
- Point2D, Point3D, MultiPoint3D, Polygon2D, Polygon3D
-
-data_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'data'))
-city_file = os.path.join(data_path, 'cities', 'cities.shp')
-vrt_file = os.path.join(data_path, 'test_vrt', 'test_vrt.vrt')
-
-# The coordinates of each city, with Z values corresponding to their
-# altitude in meters.
-city_data = (
- ('Houston', (-95.363151, 29.763374, 18)),
- ('Dallas', (-96.801611, 32.782057, 147)),
- ('Oklahoma City', (-97.521157, 34.464642, 380)),
- ('Wellington', (174.783117, -41.315268, 14)),
- ('Pueblo', (-104.609252, 38.255001, 1433)),
- ('Lawrence', (-95.235060, 38.971823, 251)),
- ('Chicago', (-87.650175, 41.850385, 181)),
- ('Victoria', (-123.305196, 48.462611, 15)),
-)
-
-# Reference mapping of city name to its altitude (Z value).
-city_dict = dict((name, coords) for name, coords in city_data)
-
-# 3D freeway data derived from the National Elevation Dataset:
-# http://seamless.usgs.gov/products/9arc.php
-interstate_data = (
- ('I-45',
- 'LINESTRING(-95.3708481 29.7765870 11.339,-95.3694580 29.7787980 4.536,-95.3690305 29.7797359 9.762,-95.3691886 29.7812450 12.448,-95.3696447 29.7850144 10.457,-95.3702511 29.7868518 9.418,-95.3706724 29.7881286 14.858,-95.3711632 29.7896157 15.386,-95.3714525 29.7936267 13.168,-95.3717848 29.7955007 15.104,-95.3717719 29.7969804 16.516,-95.3717305 29.7982117 13.923,-95.3717254 29.8000778 14.385,-95.3719875 29.8013539 15.160,-95.3720575 29.8026785 15.544,-95.3721321 29.8040912 14.975,-95.3722074 29.8050998 15.688,-95.3722779 29.8060430 16.099,-95.3733818 29.8076750 15.197,-95.3741563 29.8103686 17.268,-95.3749458 29.8129927 19.857,-95.3763564 29.8144557 15.435)',
- ( 11.339, 4.536, 9.762, 12.448, 10.457, 9.418, 14.858,
- 15.386, 13.168, 15.104, 16.516, 13.923, 14.385, 15.16 ,
- 15.544, 14.975, 15.688, 16.099, 15.197, 17.268, 19.857,
- 15.435),
- ),
- )
-
-# Bounding box polygon for inner-loop of Houston (in projected coordinate
-# system 32140), with elevation values from the National Elevation Dataset
-# (see above).
-bbox_wkt = 'POLYGON((941527.97 4225693.20,962596.48 4226349.75,963152.57 4209023.95,942051.75 4208366.38,941527.97 4225693.20))'
-bbox_z = (21.71, 13.21, 9.12, 16.40, 21.71)
-def gen_bbox():
- bbox_2d = GEOSGeometry(bbox_wkt, srid=32140)
- bbox_3d = Polygon(tuple((x, y, z) for (x, y), z in zip(bbox_2d[0].coords, bbox_z)), srid=32140)
- return bbox_2d, bbox_3d
-
-class Geo3DTest(TestCase):
- """
- Only a subset of the PostGIS routines are 3D-enabled, and this TestCase
- tries to test the features that can handle 3D and that are also
- available within GeoDjango. For more information, see the PostGIS docs
- on the routines that support 3D:
-
- http://postgis.refractions.net/documentation/manual-1.4/ch08.html#PostGIS_3D_Functions
- """
-
- def test01_3d(self):
- "Test the creation of 3D models."
- # 3D models for the rest of the tests will be populated in here.
- # For each 3D data set create model (and 2D version if necessary),
- # retrieve, and assert geometry is in 3D and contains the expected
- # 3D values.
- for name, pnt_data in city_data:
- x, y, z = pnt_data
- pnt = Point(x, y, z, srid=4326)
- City3D.objects.create(name=name, point=pnt)
- city = City3D.objects.get(name=name)
- self.failUnless(city.point.hasz)
- self.assertEqual(z, city.point.z)
-
- # Interstate (2D / 3D and Geographic/Projected variants)
- for name, line, exp_z in interstate_data:
- line_3d = GEOSGeometry(line, srid=4269)
- # Using `hex` attribute because it omits 3D.
- line_2d = GEOSGeometry(line_3d.hex, srid=4269)
-
- # Creating a geographic and projected version of the
- # interstate in both 2D and 3D.
- Interstate3D.objects.create(name=name, line=line_3d)
- InterstateProj3D.objects.create(name=name, line=line_3d)
- Interstate2D.objects.create(name=name, line=line_2d)
- InterstateProj2D.objects.create(name=name, line=line_2d)
-
- # Retrieving and making sure it's 3D and has expected
- # Z values -- shouldn't change because of coordinate system.
- interstate = Interstate3D.objects.get(name=name)
- interstate_proj = InterstateProj3D.objects.get(name=name)
- for i in [interstate, interstate_proj]:
- self.failUnless(i.line.hasz)
- self.assertEqual(exp_z, tuple(i.line.z))
-
- # Creating 3D Polygon.
- bbox2d, bbox3d = gen_bbox()
- Polygon2D.objects.create(name='2D BBox', poly=bbox2d)
- Polygon3D.objects.create(name='3D BBox', poly=bbox3d)
- p3d = Polygon3D.objects.get(name='3D BBox')
- self.failUnless(p3d.poly.hasz)
- self.assertEqual(bbox3d, p3d.poly)
-
- def test01a_3d_layermapping(self):
- "Testing LayerMapping on 3D models."
- from models import Point2D, Point3D
-
- point_mapping = {'point' : 'POINT'}
- mpoint_mapping = {'mpoint' : 'MULTIPOINT'}
-
- # The VRT is 3D, but should still be able to map sans the Z.
- lm = LayerMapping(Point2D, vrt_file, point_mapping, transform=False)
- lm.save()
- self.assertEqual(3, Point2D.objects.count())
-
- # The city shapefile is 2D, and won't be able to fill the coordinates
- # in the 3D model -- thus, a LayerMapError is raised.
- self.assertRaises(LayerMapError, LayerMapping,
- Point3D, city_file, point_mapping, transform=False)
-
- # 3D model should take 3D data just fine.
- lm = LayerMapping(Point3D, vrt_file, point_mapping, transform=False)
- lm.save()
- self.assertEqual(3, Point3D.objects.count())
-
- # Making sure LayerMapping.make_multi works right, by converting
- # a Point25D into a MultiPoint25D.
- lm = LayerMapping(MultiPoint3D, vrt_file, mpoint_mapping, transform=False)
- lm.save()
- self.assertEqual(3, MultiPoint3D.objects.count())
-
- def test02a_kml(self):
- "Test GeoQuerySet.kml() with Z values."
- h = City3D.objects.kml(precision=6).get(name='Houston')
- # KML should be 3D.
- # `SELECT ST_AsKML(point, 6) FROM geo3d_city3d WHERE name = 'Houston';`
- ref_kml_regex = re.compile(r'^<Point><coordinates>-95.363\d+,29.763\d+,18</coordinates></Point>$')
- self.failUnless(ref_kml_regex.match(h.kml))
-
- def test02b_geojson(self):
- "Test GeoQuerySet.geojson() with Z values."
- h = City3D.objects.geojson(precision=6).get(name='Houston')
- # GeoJSON should be 3D
- # `SELECT ST_AsGeoJSON(point, 6) FROM geo3d_city3d WHERE name='Houston';`
- ref_json_regex = re.compile(r'^{"type":"Point","coordinates":\[-95.363151,29.763374,18(\.0+)?\]}$')
- self.failUnless(ref_json_regex.match(h.geojson))
-
- def test03a_union(self):
- "Testing the Union aggregate of 3D models."
- # PostGIS query that returned the reference EWKT for this test:
- # `SELECT ST_AsText(ST_Union(point)) FROM geo3d_city3d;`
- ref_ewkt = 'SRID=4326;MULTIPOINT(-123.305196 48.462611 15,-104.609252 38.255001 1433,-97.521157 34.464642 380,-96.801611 32.782057 147,-95.363151 29.763374 18,-95.23506 38.971823 251,-87.650175 41.850385 181,174.783117 -41.315268 14)'
- ref_union = GEOSGeometry(ref_ewkt)
- union = City3D.objects.aggregate(Union('point'))['point__union']
- self.failUnless(union.hasz)
- self.assertEqual(ref_union, union)
-
- def test03b_extent(self):
- "Testing the Extent3D aggregate for 3D models."
- # `SELECT ST_Extent3D(point) FROM geo3d_city3d;`
- ref_extent3d = (-123.305196, -41.315268, 14,174.783117, 48.462611, 1433)
- extent1 = City3D.objects.aggregate(Extent3D('point'))['point__extent3d']
- extent2 = City3D.objects.extent3d()
-
- def check_extent3d(extent3d, tol=6):
- for ref_val, ext_val in zip(ref_extent3d, extent3d):
- self.assertAlmostEqual(ref_val, ext_val, tol)
-
- for e3d in [extent1, extent2]:
- check_extent3d(e3d)
-
- def test04_perimeter(self):
- "Testing GeoQuerySet.perimeter() on 3D fields."
- # Reference query for values below:
- # `SELECT ST_Perimeter3D(poly), ST_Perimeter2D(poly) FROM geo3d_polygon3d;`
- ref_perim_3d = 76859.2620451
- ref_perim_2d = 76859.2577803
- tol = 6
- self.assertAlmostEqual(ref_perim_2d,
- Polygon2D.objects.perimeter().get(name='2D BBox').perimeter.m,
- tol)
- self.assertAlmostEqual(ref_perim_3d,
- Polygon3D.objects.perimeter().get(name='3D BBox').perimeter.m,
- tol)
-
- def test05_length(self):
- "Testing GeoQuerySet.length() on 3D fields."
- # ST_Length_Spheroid Z-aware, and thus does not need to use
- # a separate function internally.
- # `SELECT ST_Length_Spheroid(line, 'SPHEROID["GRS 1980",6378137,298.257222101]')
- # FROM geo3d_interstate[2d|3d];`
- tol = 3
- ref_length_2d = 4368.1721949481
- ref_length_3d = 4368.62547052088
- self.assertAlmostEqual(ref_length_2d,
- Interstate2D.objects.length().get(name='I-45').length.m,
- tol)
- self.assertAlmostEqual(ref_length_3d,
- Interstate3D.objects.length().get(name='I-45').length.m,
- tol)
-
- # Making sure `ST_Length3D` is used on for a projected
- # and 3D model rather than `ST_Length`.
- # `SELECT ST_Length(line) FROM geo3d_interstateproj2d;`
- ref_length_2d = 4367.71564892392
- # `SELECT ST_Length3D(line) FROM geo3d_interstateproj3d;`
- ref_length_3d = 4368.16897234101
- self.assertAlmostEqual(ref_length_2d,
- InterstateProj2D.objects.length().get(name='I-45').length.m,
- tol)
- self.assertAlmostEqual(ref_length_3d,
- InterstateProj3D.objects.length().get(name='I-45').length.m,
- tol)
-
- def test06_scale(self):
- "Testing GeoQuerySet.scale() on Z values."
- # Mapping of City name to reference Z values.
- zscales = (-3, 4, 23)
- for zscale in zscales:
- for city in City3D.objects.scale(1.0, 1.0, zscale):
- self.assertEqual(city_dict[city.name][2] * zscale, city.scale.z)
-
- def test07_translate(self):
- "Testing GeoQuerySet.translate() on Z values."
- ztranslations = (5.23, 23, -17)
- for ztrans in ztranslations:
- for city in City3D.objects.translate(0, 0, ztrans):
- self.assertEqual(city_dict[city.name][2] + ztrans, city.translate.z)
diff --git a/parts/django/django/contrib/gis/tests/geo3d/views.py b/parts/django/django/contrib/gis/tests/geo3d/views.py
deleted file mode 100644
index 60f00ef..0000000
--- a/parts/django/django/contrib/gis/tests/geo3d/views.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create your views here.
diff --git a/parts/django/django/contrib/gis/tests/geoapp/__init__.py b/parts/django/django/contrib/gis/tests/geoapp/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/tests/geoapp/feeds.py b/parts/django/django/contrib/gis/tests/geoapp/feeds.py
deleted file mode 100644
index 942b140..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/feeds.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from django.contrib.gis import feeds
-from django.contrib.gis.tests.utils import mysql
-from models import City, Country
-
-class TestGeoRSS1(feeds.Feed):
- link = '/city/'
- title = 'Test GeoDjango Cities'
-
- def items(self):
- return City.objects.all()
-
- def item_link(self, item):
- return '/city/%s/' % item.pk
-
- def item_geometry(self, item):
- return item.point
-
-class TestGeoRSS2(TestGeoRSS1):
- def geometry(self, obj):
- # This should attach a <georss:box> element for the extent of
- # of the cities in the database. This tuple came from
- # calling `City.objects.extent()` -- we can't do that call here
- # because `extent` is not implemented for MySQL/Oracle.
- return (-123.30, -41.32, 174.78, 48.46)
-
- def item_geometry(self, item):
- # Returning a simple tuple for the geometry.
- return item.point.x, item.point.y
-
-class TestGeoAtom1(TestGeoRSS1):
- feed_type = feeds.GeoAtom1Feed
-
-class TestGeoAtom2(TestGeoRSS2):
- feed_type = feeds.GeoAtom1Feed
-
- def geometry(self, obj):
- # This time we'll use a 2-tuple of coordinates for the box.
- return ((-123.30, -41.32), (174.78, 48.46))
-
-class TestW3CGeo1(TestGeoRSS1):
- feed_type = feeds.W3CGeoFeed
-
-# The following feeds are invalid, and will raise exceptions.
-class TestW3CGeo2(TestGeoRSS2):
- feed_type = feeds.W3CGeoFeed
-
-class TestW3CGeo3(TestGeoRSS1):
- feed_type = feeds.W3CGeoFeed
-
- def item_geometry(self, item):
- from django.contrib.gis.geos import Polygon
- return Polygon(((0, 0), (0, 1), (1, 1), (1, 0), (0, 0)))
-
-# The feed dictionary to use for URLs.
-feed_dict = {
- 'rss1' : TestGeoRSS1,
- 'rss2' : TestGeoRSS2,
- 'atom1' : TestGeoAtom1,
- 'atom2' : TestGeoAtom2,
- 'w3cgeo1' : TestW3CGeo1,
- 'w3cgeo2' : TestW3CGeo2,
- 'w3cgeo3' : TestW3CGeo3,
-}
diff --git a/parts/django/django/contrib/gis/tests/geoapp/fixtures/initial_data.json.gz b/parts/django/django/contrib/gis/tests/geoapp/fixtures/initial_data.json.gz
deleted file mode 100644
index c695082..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/fixtures/initial_data.json.gz
+++ /dev/null
Binary files differ
diff --git a/parts/django/django/contrib/gis/tests/geoapp/models.py b/parts/django/django/contrib/gis/tests/geoapp/models.py
deleted file mode 100644
index 89027ee..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/models.py
+++ /dev/null
@@ -1,45 +0,0 @@
-from django.contrib.gis.db import models
-from django.contrib.gis.tests.utils import mysql, spatialite
-
-# MySQL spatial indices can't handle NULL geometries.
-null_flag = not mysql
-
-class Country(models.Model):
- name = models.CharField(max_length=30)
- mpoly = models.MultiPolygonField() # SRID, by default, is 4326
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class City(models.Model):
- name = models.CharField(max_length=30)
- point = models.PointField()
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-# This is an inherited model from City
-class PennsylvaniaCity(City):
- county = models.CharField(max_length=30)
- objects = models.GeoManager() # TODO: This should be implicitly inherited.
-
-class State(models.Model):
- name = models.CharField(max_length=30)
- poly = models.PolygonField(null=null_flag) # Allowing NULL geometries here.
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class Track(models.Model):
- name = models.CharField(max_length=30)
- line = models.LineStringField()
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-if not spatialite:
- class Feature(models.Model):
- name = models.CharField(max_length=20)
- geom = models.GeometryField()
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
- class MinusOneSRID(models.Model):
- geom = models.PointField(srid=-1) # Minus one SRID.
- objects = models.GeoManager()
diff --git a/parts/django/django/contrib/gis/tests/geoapp/sitemaps.py b/parts/django/django/contrib/gis/tests/geoapp/sitemaps.py
deleted file mode 100644
index ca785f2..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/sitemaps.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.contrib.gis.sitemaps import GeoRSSSitemap, KMLSitemap, KMZSitemap
-from models import City, Country
-from feeds import feed_dict
-
-sitemaps = {'kml' : KMLSitemap([City, Country]),
- 'kmz' : KMZSitemap([City, Country]),
- 'georss' : GeoRSSSitemap(feed_dict),
- }
diff --git a/parts/django/django/contrib/gis/tests/geoapp/test_feeds.py b/parts/django/django/contrib/gis/tests/geoapp/test_feeds.py
deleted file mode 100644
index 7ec9a3c..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/test_feeds.py
+++ /dev/null
@@ -1,78 +0,0 @@
-from xml.dom import minidom
-from django.test import TestCase
-
-from models import City
-
-
-class GeoFeedTest(TestCase):
-
- urls = 'django.contrib.gis.tests.geoapp.urls'
-
- def assertChildNodes(self, elem, expected):
- "Taken from regressiontests/syndication/tests.py."
- actual = set([n.nodeName for n in elem.childNodes])
- expected = set(expected)
- self.assertEqual(actual, expected)
-
- def test_geofeed_rss(self):
- "Tests geographic feeds using GeoRSS over RSSv2."
- # Uses `GEOSGeometry` in `item_geometry`
- doc1 = minidom.parseString(self.client.get('/feeds/rss1/').content)
- # Uses a 2-tuple in `item_geometry`
- doc2 = minidom.parseString(self.client.get('/feeds/rss2/').content)
- feed1, feed2 = doc1.firstChild, doc2.firstChild
-
- # Making sure the box got added to the second GeoRSS feed.
- self.assertChildNodes(feed2.getElementsByTagName('channel')[0],
- ['title', 'link', 'description', 'language',
- 'lastBuildDate', 'item', 'georss:box', 'atom:link']
- )
-
- # Incrementing through the feeds.
- for feed in [feed1, feed2]:
- # Ensuring the georss namespace was added to the <rss> element.
- self.assertEqual(feed.getAttribute(u'xmlns:georss'), u'http://www.georss.org/georss')
- chan = feed.getElementsByTagName('channel')[0]
- items = chan.getElementsByTagName('item')
- self.assertEqual(len(items), City.objects.count())
-
- # Ensuring the georss element was added to each item in the feed.
- for item in items:
- self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'georss:point'])
-
- def test_geofeed_atom(self):
- "Testing geographic feeds using GeoRSS over Atom."
- doc1 = minidom.parseString(self.client.get('/feeds/atom1/').content)
- doc2 = minidom.parseString(self.client.get('/feeds/atom2/').content)
- feed1, feed2 = doc1.firstChild, doc2.firstChild
-
- # Making sure the box got added to the second GeoRSS feed.
- self.assertChildNodes(feed2, ['title', 'link', 'id', 'updated', 'entry', 'georss:box'])
-
- for feed in [feed1, feed2]:
- # Ensuring the georsss namespace was added to the <feed> element.
- self.assertEqual(feed.getAttribute(u'xmlns:georss'), u'http://www.georss.org/georss')
- entries = feed.getElementsByTagName('entry')
- self.assertEqual(len(entries), City.objects.count())
-
- # Ensuring the georss element was added to each entry in the feed.
- for entry in entries:
- self.assertChildNodes(entry, ['title', 'link', 'id', 'summary', 'georss:point'])
-
- def test_geofeed_w3c(self):
- "Testing geographic feeds using W3C Geo."
- doc = minidom.parseString(self.client.get('/feeds/w3cgeo1/').content)
- feed = doc.firstChild
- # Ensuring the geo namespace was added to the <feed> element.
- self.assertEqual(feed.getAttribute(u'xmlns:geo'), u'http://www.w3.org/2003/01/geo/wgs84_pos#')
- chan = feed.getElementsByTagName('channel')[0]
- items = chan.getElementsByTagName('item')
- self.assertEqual(len(items), City.objects.count())
-
- # Ensuring the geo:lat and geo:lon element was added to each item in the feed.
- for item in items:
- self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'geo:lat', 'geo:lon'])
-
- # Boxes and Polygons aren't allowed in W3C Geo feeds.
- self.assertRaises(ValueError, self.client.get, '/feeds/w3cgeo2/') # Box in <channel>
- self.assertRaises(ValueError, self.client.get, '/feeds/w3cgeo3/') # Polygons in <entry>
diff --git a/parts/django/django/contrib/gis/tests/geoapp/test_regress.py b/parts/django/django/contrib/gis/tests/geoapp/test_regress.py
deleted file mode 100644
index 0295526..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/test_regress.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import os, unittest
-from django.contrib.gis.tests.utils import no_mysql, no_oracle, no_postgis, no_spatialite
-from django.contrib.gis.shortcuts import render_to_kmz
-from models import City
-
-class GeoRegressionTests(unittest.TestCase):
-
- def test01_update(self):
- "Testing GeoQuerySet.update(), see #10411."
- pnt = City.objects.get(name='Pueblo').point
- bak = pnt.clone()
- pnt.y += 0.005
- pnt.x += 0.005
-
- City.objects.filter(name='Pueblo').update(point=pnt)
- self.assertEqual(pnt, City.objects.get(name='Pueblo').point)
- City.objects.filter(name='Pueblo').update(point=bak)
- self.assertEqual(bak, City.objects.get(name='Pueblo').point)
-
- def test02_kmz(self):
- "Testing `render_to_kmz` with non-ASCII data, see #11624."
- name = '\xc3\x85land Islands'.decode('iso-8859-1')
- places = [{'name' : name,
- 'description' : name,
- 'kml' : '<Point><coordinates>5.0,23.0</coordinates></Point>'
- }]
- kmz = render_to_kmz('gis/kml/placemarks.kml', {'places' : places})
-
- @no_spatialite
- @no_mysql
- def test03_extent(self):
- "Testing `extent` on a table with a single point, see #11827."
- pnt = City.objects.get(name='Pueblo').point
- ref_ext = (pnt.x, pnt.y, pnt.x, pnt.y)
- extent = City.objects.filter(name='Pueblo').extent()
- for ref_val, val in zip(ref_ext, extent):
- self.assertAlmostEqual(ref_val, val, 4)
diff --git a/parts/django/django/contrib/gis/tests/geoapp/test_sitemaps.py b/parts/django/django/contrib/gis/tests/geoapp/test_sitemaps.py
deleted file mode 100644
index c8c43f4..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/test_sitemaps.py
+++ /dev/null
@@ -1,86 +0,0 @@
-import cStringIO
-from xml.dom import minidom
-import zipfile
-from django.test import TestCase
-
-from models import City, Country
-
-
-class GeoSitemapTest(TestCase):
-
- urls = 'django.contrib.gis.tests.geoapp.urls'
-
- def assertChildNodes(self, elem, expected):
- "Taken from regressiontests/syndication/tests.py."
- actual = set([n.nodeName for n in elem.childNodes])
- expected = set(expected)
- self.assertEqual(actual, expected)
-
- def test_geositemap_index(self):
- "Tests geographic sitemap index."
- # Getting the geo index.
- doc = minidom.parseString(self.client.get('/sitemap.xml').content)
- index = doc.firstChild
- self.assertEqual(index.getAttribute(u'xmlns'), u'http://www.sitemaps.org/schemas/sitemap/0.9')
- self.assertEqual(3, len(index.getElementsByTagName('sitemap')))
-
- def test_geositemap_kml(self):
- "Tests KML/KMZ geographic sitemaps."
- for kml_type in ('kml', 'kmz'):
- doc = minidom.parseString(self.client.get('/sitemaps/%s.xml' % kml_type).content)
-
- # Ensuring the right sitemaps namespaces are present.
- urlset = doc.firstChild
- self.assertEqual(urlset.getAttribute(u'xmlns'), u'http://www.sitemaps.org/schemas/sitemap/0.9')
- self.assertEqual(urlset.getAttribute(u'xmlns:geo'), u'http://www.google.com/geo/schemas/sitemap/1.0')
-
- urls = urlset.getElementsByTagName('url')
- self.assertEqual(2, len(urls)) # Should only be 2 sitemaps.
- for url in urls:
- self.assertChildNodes(url, ['loc', 'geo:geo'])
- # Making sure the 'geo:format' element was properly set.
- geo_elem = url.getElementsByTagName('geo:geo')[0]
- geo_format = geo_elem.getElementsByTagName('geo:format')[0]
- self.assertEqual(kml_type, geo_format.childNodes[0].data)
-
- # Getting the relative URL since we don't have a real site.
- kml_url = url.getElementsByTagName('loc')[0].childNodes[0].data.split('http://example.com')[1]
-
- if kml_type == 'kml':
- kml_doc = minidom.parseString(self.client.get(kml_url).content)
- elif kml_type == 'kmz':
- # Have to decompress KMZ before parsing.
- buf = cStringIO.StringIO(self.client.get(kml_url).content)
- zf = zipfile.ZipFile(buf)
- self.assertEqual(1, len(zf.filelist))
- self.assertEqual('doc.kml', zf.filelist[0].filename)
- kml_doc = minidom.parseString(zf.read('doc.kml'))
-
- # Ensuring the correct number of placemarks are in the KML doc.
- if 'city' in kml_url:
- model = City
- elif 'country' in kml_url:
- model = Country
- self.assertEqual(model.objects.count(), len(kml_doc.getElementsByTagName('Placemark')))
-
- def test_geositemap_georss(self):
- "Tests GeoRSS geographic sitemaps."
- from feeds import feed_dict
-
- doc = minidom.parseString(self.client.get('/sitemaps/georss.xml').content)
-
- # Ensuring the right sitemaps namespaces are present.
- urlset = doc.firstChild
- self.assertEqual(urlset.getAttribute(u'xmlns'), u'http://www.sitemaps.org/schemas/sitemap/0.9')
- self.assertEqual(urlset.getAttribute(u'xmlns:geo'), u'http://www.google.com/geo/schemas/sitemap/1.0')
-
- # Making sure the correct number of feed URLs were included.
- urls = urlset.getElementsByTagName('url')
- self.assertEqual(len(feed_dict), len(urls))
-
- for url in urls:
- self.assertChildNodes(url, ['loc', 'geo:geo'])
- # Making sure the 'geo:format' element was properly set to 'georss'.
- geo_elem = url.getElementsByTagName('geo:geo')[0]
- geo_format = geo_elem.getElementsByTagName('geo:format')[0]
- self.assertEqual('georss', geo_format.childNodes[0].data)
diff --git a/parts/django/django/contrib/gis/tests/geoapp/tests.py b/parts/django/django/contrib/gis/tests/geoapp/tests.py
deleted file mode 100644
index a2b81c6..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/tests.py
+++ /dev/null
@@ -1,735 +0,0 @@
-import re
-from django.db import connection
-from django.contrib.gis import gdal
-from django.contrib.gis.geos import fromstr, GEOSGeometry, \
- Point, LineString, LinearRing, Polygon, GeometryCollection
-from django.contrib.gis.measure import Distance
-from django.contrib.gis.tests.utils import \
- no_mysql, no_oracle, no_spatialite, \
- mysql, oracle, postgis, spatialite
-from django.test import TestCase
-
-from models import Country, City, PennsylvaniaCity, State, Track
-
-if not spatialite:
- from models import Feature, MinusOneSRID
-
-class GeoModelTest(TestCase):
-
- def test01_fixtures(self):
- "Testing geographic model initialization from fixtures."
- # Ensuring that data was loaded from initial data fixtures.
- self.assertEqual(2, Country.objects.count())
- self.assertEqual(8, City.objects.count())
- self.assertEqual(2, State.objects.count())
-
- def test02_proxy(self):
- "Testing Lazy-Geometry support (using the GeometryProxy)."
- ## Testing on a Point
- pnt = Point(0, 0)
- nullcity = City(name='NullCity', point=pnt)
- nullcity.save()
-
- # Making sure TypeError is thrown when trying to set with an
- # incompatible type.
- for bad in [5, 2.0, LineString((0, 0), (1, 1))]:
- try:
- nullcity.point = bad
- except TypeError:
- pass
- else:
- self.fail('Should throw a TypeError')
-
- # Now setting with a compatible GEOS Geometry, saving, and ensuring
- # the save took, notice no SRID is explicitly set.
- new = Point(5, 23)
- nullcity.point = new
-
- # Ensuring that the SRID is automatically set to that of the
- # field after assignment, but before saving.
- self.assertEqual(4326, nullcity.point.srid)
- nullcity.save()
-
- # Ensuring the point was saved correctly after saving
- self.assertEqual(new, City.objects.get(name='NullCity').point)
-
- # Setting the X and Y of the Point
- nullcity.point.x = 23
- nullcity.point.y = 5
- # Checking assignments pre & post-save.
- self.assertNotEqual(Point(23, 5), City.objects.get(name='NullCity').point)
- nullcity.save()
- self.assertEqual(Point(23, 5), City.objects.get(name='NullCity').point)
- nullcity.delete()
-
- ## Testing on a Polygon
- shell = LinearRing((0, 0), (0, 100), (100, 100), (100, 0), (0, 0))
- inner = LinearRing((40, 40), (40, 60), (60, 60), (60, 40), (40, 40))
-
- # Creating a State object using a built Polygon
- ply = Polygon(shell, inner)
- nullstate = State(name='NullState', poly=ply)
- self.assertEqual(4326, nullstate.poly.srid) # SRID auto-set from None
- nullstate.save()
-
- ns = State.objects.get(name='NullState')
- self.assertEqual(ply, ns.poly)
-
- # Testing the `ogr` and `srs` lazy-geometry properties.
- if gdal.HAS_GDAL:
- self.assertEqual(True, isinstance(ns.poly.ogr, gdal.OGRGeometry))
- self.assertEqual(ns.poly.wkb, ns.poly.ogr.wkb)
- self.assertEqual(True, isinstance(ns.poly.srs, gdal.SpatialReference))
- self.assertEqual('WGS 84', ns.poly.srs.name)
-
- # Changing the interior ring on the poly attribute.
- new_inner = LinearRing((30, 30), (30, 70), (70, 70), (70, 30), (30, 30))
- ns.poly[1] = new_inner
- ply[1] = new_inner
- self.assertEqual(4326, ns.poly.srid)
- ns.save()
- self.assertEqual(ply, State.objects.get(name='NullState').poly)
- ns.delete()
-
- def test03a_kml(self):
- "Testing KML output from the database using GeoQuerySet.kml()."
- # Only PostGIS supports KML serialization
- if not postgis:
- self.assertRaises(NotImplementedError, State.objects.all().kml, field_name='poly')
- return
-
- # Should throw a TypeError when trying to obtain KML from a
- # non-geometry field.
- qs = City.objects.all()
- self.assertRaises(TypeError, qs.kml, 'name')
-
- # The reference KML depends on the version of PostGIS used
- # (the output stopped including altitude in 1.3.3).
- if connection.ops.spatial_version >= (1, 3, 3):
- ref_kml = '<Point><coordinates>-104.609252,38.255001</coordinates></Point>'
- else:
- ref_kml = '<Point><coordinates>-104.609252,38.255001,0</coordinates></Point>'
-
- # Ensuring the KML is as expected.
- ptown1 = City.objects.kml(field_name='point', precision=9).get(name='Pueblo')
- ptown2 = City.objects.kml(precision=9).get(name='Pueblo')
- for ptown in [ptown1, ptown2]:
- self.assertEqual(ref_kml, ptown.kml)
-
- def test03b_gml(self):
- "Testing GML output from the database using GeoQuerySet.gml()."
- if mysql or spatialite:
- self.assertRaises(NotImplementedError, Country.objects.all().gml, field_name='mpoly')
- return
-
- # Should throw a TypeError when tyring to obtain GML from a
- # non-geometry field.
- qs = City.objects.all()
- self.assertRaises(TypeError, qs.gml, field_name='name')
- ptown1 = City.objects.gml(field_name='point', precision=9).get(name='Pueblo')
- ptown2 = City.objects.gml(precision=9).get(name='Pueblo')
-
- if oracle:
- # No precision parameter for Oracle :-/
- gml_regex = re.compile(r'^<gml:Point srsName="SDO:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="\." cs="," ts=" ">-104.60925\d+,38.25500\d+ </gml:coordinates></gml:Point>')
- for ptown in [ptown1, ptown2]:
- self.failUnless(gml_regex.match(ptown.gml))
- else:
- gml_regex = re.compile(r'^<gml:Point srsName="EPSG:4326"><gml:coordinates>-104\.60925\d+,38\.255001</gml:coordinates></gml:Point>')
- for ptown in [ptown1, ptown2]:
- self.failUnless(gml_regex.match(ptown.gml))
-
- def test03c_geojson(self):
- "Testing GeoJSON output from the database using GeoQuerySet.geojson()."
- # Only PostGIS 1.3.4+ supports GeoJSON.
- if not connection.ops.geojson:
- self.assertRaises(NotImplementedError, Country.objects.all().geojson, field_name='mpoly')
- return
-
- if connection.ops.spatial_version >= (1, 4, 0):
- pueblo_json = '{"type":"Point","coordinates":[-104.609252,38.255001]}'
- houston_json = '{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[-95.363151,29.763374]}'
- victoria_json = '{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.305196,48.462611]}'
- chicago_json = '{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
- else:
- pueblo_json = '{"type":"Point","coordinates":[-104.60925200,38.25500100]}'
- houston_json = '{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"coordinates":[-95.36315100,29.76337400]}'
- victoria_json = '{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.30519600,48.46261100]}'
- chicago_json = '{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
-
- # Precision argument should only be an integer
- self.assertRaises(TypeError, City.objects.geojson, precision='foo')
-
- # Reference queries and values.
- # SELECT ST_AsGeoJson("geoapp_city"."point", 8, 0) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Pueblo';
- self.assertEqual(pueblo_json, City.objects.geojson().get(name='Pueblo').geojson)
-
- # 1.3.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 1) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Houston';
- # 1.4.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 2) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Houston';
- # This time we want to include the CRS by using the `crs` keyword.
- self.assertEqual(houston_json, City.objects.geojson(crs=True, model_att='json').get(name='Houston').json)
-
- # 1.3.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 2) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Victoria';
- # 1.4.x: SELECT ST_AsGeoJson("geoapp_city"."point", 8, 1) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Houston';
- # This time we include the bounding box by using the `bbox` keyword.
- self.assertEqual(victoria_json, City.objects.geojson(bbox=True).get(name='Victoria').geojson)
-
- # 1.(3|4).x: SELECT ST_AsGeoJson("geoapp_city"."point", 5, 3) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Chicago';
- # Finally, we set every available keyword.
- self.assertEqual(chicago_json, City.objects.geojson(bbox=True, crs=True, precision=5).get(name='Chicago').geojson)
-
- def test03d_svg(self):
- "Testing SVG output using GeoQuerySet.svg()."
- if mysql or oracle:
- self.assertRaises(NotImplementedError, City.objects.svg)
- return
-
- self.assertRaises(TypeError, City.objects.svg, precision='foo')
- # SELECT AsSVG(geoapp_city.point, 0, 8) FROM geoapp_city WHERE name = 'Pueblo';
- svg1 = 'cx="-104.609252" cy="-38.255001"'
- # Even though relative, only one point so it's practically the same except for
- # the 'c' letter prefix on the x,y values.
- svg2 = svg1.replace('c', '')
- self.assertEqual(svg1, City.objects.svg().get(name='Pueblo').svg)
- self.assertEqual(svg2, City.objects.svg(relative=5).get(name='Pueblo').svg)
-
- @no_mysql
- def test04_transform(self):
- "Testing the transform() GeoManager method."
- # Pre-transformed points for Houston and Pueblo.
- htown = fromstr('POINT(1947516.83115183 6322297.06040572)', srid=3084)
- ptown = fromstr('POINT(992363.390841912 481455.395105533)', srid=2774)
- prec = 3 # Precision is low due to version variations in PROJ and GDAL.
-
- # Asserting the result of the transform operation with the values in
- # the pre-transformed points. Oracle does not have the 3084 SRID.
- if not oracle:
- h = City.objects.transform(htown.srid).get(name='Houston')
- self.assertEqual(3084, h.point.srid)
- self.assertAlmostEqual(htown.x, h.point.x, prec)
- self.assertAlmostEqual(htown.y, h.point.y, prec)
-
- p1 = City.objects.transform(ptown.srid, field_name='point').get(name='Pueblo')
- p2 = City.objects.transform(srid=ptown.srid).get(name='Pueblo')
- for p in [p1, p2]:
- self.assertEqual(2774, p.point.srid)
- self.assertAlmostEqual(ptown.x, p.point.x, prec)
- self.assertAlmostEqual(ptown.y, p.point.y, prec)
-
- @no_mysql
- @no_spatialite # SpatiaLite does not have an Extent function
- def test05_extent(self):
- "Testing the `extent` GeoQuerySet method."
- # Reference query:
- # `SELECT ST_extent(point) FROM geoapp_city WHERE (name='Houston' or name='Dallas');`
- # => BOX(-96.8016128540039 29.7633724212646,-95.3631439208984 32.7820587158203)
- expected = (-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
-
- qs = City.objects.filter(name__in=('Houston', 'Dallas'))
- extent = qs.extent()
-
- for val, exp in zip(extent, expected):
- self.assertAlmostEqual(exp, val, 4)
-
- # Only PostGIS has support for the MakeLine aggregate.
- @no_mysql
- @no_oracle
- @no_spatialite
- def test06_make_line(self):
- "Testing the `make_line` GeoQuerySet method."
- # Ensuring that a `TypeError` is raised on models without PointFields.
- self.assertRaises(TypeError, State.objects.make_line)
- self.assertRaises(TypeError, Country.objects.make_line)
- # Reference query:
- # SELECT AsText(ST_MakeLine(geoapp_city.point)) FROM geoapp_city;
- ref_line = GEOSGeometry('LINESTRING(-95.363151 29.763374,-96.801611 32.782057,-97.521157 34.464642,174.783117 -41.315268,-104.609252 38.255001,-95.23506 38.971823,-87.650175 41.850385,-123.305196 48.462611)', srid=4326)
- self.assertEqual(ref_line, City.objects.make_line())
-
- @no_mysql
- def test09_disjoint(self):
- "Testing the `disjoint` lookup type."
- ptown = City.objects.get(name='Pueblo')
- qs1 = City.objects.filter(point__disjoint=ptown.point)
- self.assertEqual(7, qs1.count())
-
- qs2 = State.objects.filter(poly__disjoint=ptown.point)
- self.assertEqual(1, qs2.count())
- self.assertEqual('Kansas', qs2[0].name)
-
- def test10_contains_contained(self):
- "Testing the 'contained', 'contains', and 'bbcontains' lookup types."
- # Getting Texas, yes we were a country -- once ;)
- texas = Country.objects.get(name='Texas')
-
- # Seeing what cities are in Texas, should get Houston and Dallas,
- # and Oklahoma City because 'contained' only checks on the
- # _bounding box_ of the Geometries.
- if not oracle:
- qs = City.objects.filter(point__contained=texas.mpoly)
- self.assertEqual(3, qs.count())
- cities = ['Houston', 'Dallas', 'Oklahoma City']
- for c in qs: self.assertEqual(True, c.name in cities)
-
- # Pulling out some cities.
- houston = City.objects.get(name='Houston')
- wellington = City.objects.get(name='Wellington')
- pueblo = City.objects.get(name='Pueblo')
- okcity = City.objects.get(name='Oklahoma City')
- lawrence = City.objects.get(name='Lawrence')
-
- # Now testing contains on the countries using the points for
- # Houston and Wellington.
- tx = Country.objects.get(mpoly__contains=houston.point) # Query w/GEOSGeometry
- nz = Country.objects.get(mpoly__contains=wellington.point.hex) # Query w/EWKBHEX
- self.assertEqual('Texas', tx.name)
- self.assertEqual('New Zealand', nz.name)
-
- # Spatialite 2.3 thinks that Lawrence is in Puerto Rico (a NULL geometry).
- if not spatialite:
- ks = State.objects.get(poly__contains=lawrence.point)
- self.assertEqual('Kansas', ks.name)
-
- # Pueblo and Oklahoma City (even though OK City is within the bounding box of Texas)
- # are not contained in Texas or New Zealand.
- self.assertEqual(0, len(Country.objects.filter(mpoly__contains=pueblo.point))) # Query w/GEOSGeometry object
- self.assertEqual((mysql and 1) or 0,
- len(Country.objects.filter(mpoly__contains=okcity.point.wkt))) # Qeury w/WKT
-
- # OK City is contained w/in bounding box of Texas.
- if not oracle:
- qs = Country.objects.filter(mpoly__bbcontains=okcity.point)
- self.assertEqual(1, len(qs))
- self.assertEqual('Texas', qs[0].name)
-
- @no_mysql
- def test11_lookup_insert_transform(self):
- "Testing automatic transform for lookups and inserts."
- # San Antonio in 'WGS84' (SRID 4326)
- sa_4326 = 'POINT (-98.493183 29.424170)'
- wgs_pnt = fromstr(sa_4326, srid=4326) # Our reference point in WGS84
-
- # Oracle doesn't have SRID 3084, using 41157.
- if oracle:
- # San Antonio in 'Texas 4205, Southern Zone (1983, meters)' (SRID 41157)
- # Used the following Oracle SQL to get this value:
- # SELECT SDO_UTIL.TO_WKTGEOMETRY(SDO_CS.TRANSFORM(SDO_GEOMETRY('POINT (-98.493183 29.424170)', 4326), 41157)) FROM DUAL;
- nad_wkt = 'POINT (300662.034646583 5416427.45974934)'
- nad_srid = 41157
- else:
- # San Antonio in 'NAD83(HARN) / Texas Centric Lambert Conformal' (SRID 3084)
- nad_wkt = 'POINT (1645978.362408288754523 6276356.025927528738976)' # Used ogr.py in gdal 1.4.1 for this transform
- nad_srid = 3084
-
- # Constructing & querying with a point from a different SRID. Oracle
- # `SDO_OVERLAPBDYINTERSECT` operates differently from
- # `ST_Intersects`, so contains is used instead.
- nad_pnt = fromstr(nad_wkt, srid=nad_srid)
- if oracle:
- tx = Country.objects.get(mpoly__contains=nad_pnt)
- else:
- tx = Country.objects.get(mpoly__intersects=nad_pnt)
- self.assertEqual('Texas', tx.name)
-
- # Creating San Antonio. Remember the Alamo.
- sa = City.objects.create(name='San Antonio', point=nad_pnt)
-
- # Now verifying that San Antonio was transformed correctly
- sa = City.objects.get(name='San Antonio')
- self.assertAlmostEqual(wgs_pnt.x, sa.point.x, 6)
- self.assertAlmostEqual(wgs_pnt.y, sa.point.y, 6)
-
- # If the GeometryField SRID is -1, then we shouldn't perform any
- # transformation if the SRID of the input geometry is different.
- # SpatiaLite does not support missing SRID values.
- if not spatialite:
- m1 = MinusOneSRID(geom=Point(17, 23, srid=4326))
- m1.save()
- self.assertEqual(-1, m1.geom.srid)
-
- @no_mysql
- def test12_null_geometries(self):
- "Testing NULL geometry support, and the `isnull` lookup type."
- # Creating a state with a NULL boundary.
- State.objects.create(name='Puerto Rico')
-
- # Querying for both NULL and Non-NULL values.
- nullqs = State.objects.filter(poly__isnull=True)
- validqs = State.objects.filter(poly__isnull=False)
-
- # Puerto Rico should be NULL (it's a commonwealth unincorporated territory)
- self.assertEqual(1, len(nullqs))
- self.assertEqual('Puerto Rico', nullqs[0].name)
-
- # The valid states should be Colorado & Kansas
- self.assertEqual(2, len(validqs))
- state_names = [s.name for s in validqs]
- self.assertEqual(True, 'Colorado' in state_names)
- self.assertEqual(True, 'Kansas' in state_names)
-
- # Saving another commonwealth w/a NULL geometry.
- nmi = State.objects.create(name='Northern Mariana Islands', poly=None)
- self.assertEqual(nmi.poly, None)
-
- # Assigning a geomery and saving -- then UPDATE back to NULL.
- nmi.poly = 'POLYGON((0 0,1 0,1 1,1 0,0 0))'
- nmi.save()
- State.objects.filter(name='Northern Mariana Islands').update(poly=None)
- self.assertEqual(None, State.objects.get(name='Northern Mariana Islands').poly)
-
- # Only PostGIS has `left` and `right` lookup types.
- @no_mysql
- @no_oracle
- @no_spatialite
- def test13_left_right(self):
- "Testing the 'left' and 'right' lookup types."
- # Left: A << B => true if xmax(A) < xmin(B)
- # Right: A >> B => true if xmin(A) > xmax(B)
- # See: BOX2D_left() and BOX2D_right() in lwgeom_box2dfloat4.c in PostGIS source.
-
- # Getting the borders for Colorado & Kansas
- co_border = State.objects.get(name='Colorado').poly
- ks_border = State.objects.get(name='Kansas').poly
-
- # Note: Wellington has an 'X' value of 174, so it will not be considered
- # to the left of CO.
-
- # These cities should be strictly to the right of the CO border.
- cities = ['Houston', 'Dallas', 'Oklahoma City',
- 'Lawrence', 'Chicago', 'Wellington']
- qs = City.objects.filter(point__right=co_border)
- self.assertEqual(6, len(qs))
- for c in qs: self.assertEqual(True, c.name in cities)
-
- # These cities should be strictly to the right of the KS border.
- cities = ['Chicago', 'Wellington']
- qs = City.objects.filter(point__right=ks_border)
- self.assertEqual(2, len(qs))
- for c in qs: self.assertEqual(True, c.name in cities)
-
- # Note: Wellington has an 'X' value of 174, so it will not be considered
- # to the left of CO.
- vic = City.objects.get(point__left=co_border)
- self.assertEqual('Victoria', vic.name)
-
- cities = ['Pueblo', 'Victoria']
- qs = City.objects.filter(point__left=ks_border)
- self.assertEqual(2, len(qs))
- for c in qs: self.assertEqual(True, c.name in cities)
-
- def test14_equals(self):
- "Testing the 'same_as' and 'equals' lookup types."
- pnt = fromstr('POINT (-95.363151 29.763374)', srid=4326)
- c1 = City.objects.get(point=pnt)
- c2 = City.objects.get(point__same_as=pnt)
- c3 = City.objects.get(point__equals=pnt)
- for c in [c1, c2, c3]: self.assertEqual('Houston', c.name)
-
- @no_mysql
- def test15_relate(self):
- "Testing the 'relate' lookup type."
- # To make things more interesting, we will have our Texas reference point in
- # different SRIDs.
- pnt1 = fromstr('POINT (649287.0363174 4177429.4494686)', srid=2847)
- pnt2 = fromstr('POINT(-98.4919715741052 29.4333344025053)', srid=4326)
-
- # Not passing in a geometry as first param shoud
- # raise a type error when initializing the GeoQuerySet
- self.assertRaises(ValueError, Country.objects.filter, mpoly__relate=(23, 'foo'))
-
- # Making sure the right exception is raised for the given
- # bad arguments.
- for bad_args, e in [((pnt1, 0), ValueError), ((pnt2, 'T*T***FF*', 0), ValueError)]:
- qs = Country.objects.filter(mpoly__relate=bad_args)
- self.assertRaises(e, qs.count)
-
- # Relate works differently for the different backends.
- if postgis or spatialite:
- contains_mask = 'T*T***FF*'
- within_mask = 'T*F**F***'
- intersects_mask = 'T********'
- elif oracle:
- contains_mask = 'contains'
- within_mask = 'inside'
- # TODO: This is not quite the same as the PostGIS mask above
- intersects_mask = 'overlapbdyintersect'
-
- # Testing contains relation mask.
- self.assertEqual('Texas', Country.objects.get(mpoly__relate=(pnt1, contains_mask)).name)
- self.assertEqual('Texas', Country.objects.get(mpoly__relate=(pnt2, contains_mask)).name)
-
- # Testing within relation mask.
- ks = State.objects.get(name='Kansas')
- self.assertEqual('Lawrence', City.objects.get(point__relate=(ks.poly, within_mask)).name)
-
- # Testing intersection relation mask.
- if not oracle:
- self.assertEqual('Texas', Country.objects.get(mpoly__relate=(pnt1, intersects_mask)).name)
- self.assertEqual('Texas', Country.objects.get(mpoly__relate=(pnt2, intersects_mask)).name)
- self.assertEqual('Lawrence', City.objects.get(point__relate=(ks.poly, intersects_mask)).name)
-
- def test16_createnull(self):
- "Testing creating a model instance and the geometry being None"
- c = City()
- self.assertEqual(c.point, None)
-
- @no_mysql
- def test17_unionagg(self):
- "Testing the `unionagg` (aggregate union) GeoManager method."
- tx = Country.objects.get(name='Texas').mpoly
- # Houston, Dallas -- Oracle has different order.
- union1 = fromstr('MULTIPOINT(-96.801611 32.782057,-95.363151 29.763374)')
- union2 = fromstr('MULTIPOINT(-96.801611 32.782057,-95.363151 29.763374)')
- qs = City.objects.filter(point__within=tx)
- self.assertRaises(TypeError, qs.unionagg, 'name')
- # Using `field_name` keyword argument in one query and specifying an
- # order in the other (which should not be used because this is
- # an aggregate method on a spatial column)
- u1 = qs.unionagg(field_name='point')
- u2 = qs.order_by('name').unionagg()
- tol = 0.00001
- if oracle:
- union = union2
- else:
- union = union1
- self.assertEqual(True, union.equals_exact(u1, tol))
- self.assertEqual(True, union.equals_exact(u2, tol))
- qs = City.objects.filter(name='NotACity')
- self.assertEqual(None, qs.unionagg(field_name='point'))
-
- @no_spatialite # SpatiaLite does not support abstract geometry columns
- def test18_geometryfield(self):
- "Testing the general GeometryField."
- Feature(name='Point', geom=Point(1, 1)).save()
- Feature(name='LineString', geom=LineString((0, 0), (1, 1), (5, 5))).save()
- Feature(name='Polygon', geom=Polygon(LinearRing((0, 0), (0, 5), (5, 5), (5, 0), (0, 0)))).save()
- Feature(name='GeometryCollection',
- geom=GeometryCollection(Point(2, 2), LineString((0, 0), (2, 2)),
- Polygon(LinearRing((0, 0), (0, 5), (5, 5), (5, 0), (0, 0))))).save()
-
- f_1 = Feature.objects.get(name='Point')
- self.assertEqual(True, isinstance(f_1.geom, Point))
- self.assertEqual((1.0, 1.0), f_1.geom.tuple)
- f_2 = Feature.objects.get(name='LineString')
- self.assertEqual(True, isinstance(f_2.geom, LineString))
- self.assertEqual(((0.0, 0.0), (1.0, 1.0), (5.0, 5.0)), f_2.geom.tuple)
-
- f_3 = Feature.objects.get(name='Polygon')
- self.assertEqual(True, isinstance(f_3.geom, Polygon))
- f_4 = Feature.objects.get(name='GeometryCollection')
- self.assertEqual(True, isinstance(f_4.geom, GeometryCollection))
- self.assertEqual(f_3.geom, f_4.geom[2])
-
- @no_mysql
- def test19_centroid(self):
- "Testing the `centroid` GeoQuerySet method."
- qs = State.objects.exclude(poly__isnull=True).centroid()
- if oracle:
- tol = 0.1
- elif spatialite:
- tol = 0.000001
- else:
- tol = 0.000000001
- for s in qs:
- self.assertEqual(True, s.poly.centroid.equals_exact(s.centroid, tol))
-
- @no_mysql
- def test20_pointonsurface(self):
- "Testing the `point_on_surface` GeoQuerySet method."
- # Reference values.
- if oracle:
- # SELECT SDO_UTIL.TO_WKTGEOMETRY(SDO_GEOM.SDO_POINTONSURFACE(GEOAPP_COUNTRY.MPOLY, 0.05)) FROM GEOAPP_COUNTRY;
- ref = {'New Zealand' : fromstr('POINT (174.616364 -36.100861)', srid=4326),
- 'Texas' : fromstr('POINT (-103.002434 36.500397)', srid=4326),
- }
-
- elif postgis or spatialite:
- # Using GEOSGeometry to compute the reference point on surface values
- # -- since PostGIS also uses GEOS these should be the same.
- ref = {'New Zealand' : Country.objects.get(name='New Zealand').mpoly.point_on_surface,
- 'Texas' : Country.objects.get(name='Texas').mpoly.point_on_surface
- }
-
- for c in Country.objects.point_on_surface():
- if spatialite:
- # XXX This seems to be a WKT-translation-related precision issue?
- tol = 0.00001
- else:
- tol = 0.000000001
- self.assertEqual(True, ref[c.name].equals_exact(c.point_on_surface, tol))
-
- @no_mysql
- @no_oracle
- def test21_scale(self):
- "Testing the `scale` GeoQuerySet method."
- xfac, yfac = 2, 3
- tol = 5 # XXX The low precision tolerance is for SpatiaLite
- qs = Country.objects.scale(xfac, yfac, model_att='scaled')
- for c in qs:
- for p1, p2 in zip(c.mpoly, c.scaled):
- for r1, r2 in zip(p1, p2):
- for c1, c2 in zip(r1.coords, r2.coords):
- self.assertAlmostEqual(c1[0] * xfac, c2[0], tol)
- self.assertAlmostEqual(c1[1] * yfac, c2[1], tol)
-
- @no_mysql
- @no_oracle
- def test22_translate(self):
- "Testing the `translate` GeoQuerySet method."
- xfac, yfac = 5, -23
- qs = Country.objects.translate(xfac, yfac, model_att='translated')
- for c in qs:
- for p1, p2 in zip(c.mpoly, c.translated):
- for r1, r2 in zip(p1, p2):
- for c1, c2 in zip(r1.coords, r2.coords):
- # XXX The low precision is for SpatiaLite
- self.assertAlmostEqual(c1[0] + xfac, c2[0], 5)
- self.assertAlmostEqual(c1[1] + yfac, c2[1], 5)
-
- @no_mysql
- def test23_numgeom(self):
- "Testing the `num_geom` GeoQuerySet method."
- # Both 'countries' only have two geometries.
- for c in Country.objects.num_geom(): self.assertEqual(2, c.num_geom)
- for c in City.objects.filter(point__isnull=False).num_geom():
- # Oracle will return 1 for the number of geometries on non-collections,
- # whereas PostGIS will return None.
- if postgis:
- self.assertEqual(None, c.num_geom)
- else:
- self.assertEqual(1, c.num_geom)
-
- @no_mysql
- @no_spatialite # SpatiaLite can only count vertices in LineStrings
- def test24_numpoints(self):
- "Testing the `num_points` GeoQuerySet method."
- for c in Country.objects.num_points():
- self.assertEqual(c.mpoly.num_points, c.num_points)
-
- if not oracle:
- # Oracle cannot count vertices in Point geometries.
- for c in City.objects.num_points(): self.assertEqual(1, c.num_points)
-
- @no_mysql
- def test25_geoset(self):
- "Testing the `difference`, `intersection`, `sym_difference`, and `union` GeoQuerySet methods."
- geom = Point(5, 23)
- tol = 1
- qs = Country.objects.all().difference(geom).sym_difference(geom).union(geom)
-
- # XXX For some reason SpatiaLite does something screwey with the Texas geometry here. Also,
- # XXX it doesn't like the null intersection.
- if spatialite:
- qs = qs.exclude(name='Texas')
- else:
- qs = qs.intersection(geom)
-
- for c in qs:
- if oracle:
- # Should be able to execute the queries; however, they won't be the same
- # as GEOS (because Oracle doesn't use GEOS internally like PostGIS or
- # SpatiaLite).
- pass
- else:
- self.assertEqual(c.mpoly.difference(geom), c.difference)
- if not spatialite:
- self.assertEqual(c.mpoly.intersection(geom), c.intersection)
- self.assertEqual(c.mpoly.sym_difference(geom), c.sym_difference)
- self.assertEqual(c.mpoly.union(geom), c.union)
-
- @no_mysql
- def test26_inherited_geofields(self):
- "Test GeoQuerySet methods on inherited Geometry fields."
- # Creating a Pennsylvanian city.
- mansfield = PennsylvaniaCity.objects.create(name='Mansfield', county='Tioga', point='POINT(-77.071445 41.823881)')
-
- # All transformation SQL will need to be performed on the
- # _parent_ table.
- qs = PennsylvaniaCity.objects.transform(32128)
-
- self.assertEqual(1, qs.count())
- for pc in qs: self.assertEqual(32128, pc.point.srid)
-
- @no_mysql
- @no_oracle
- @no_spatialite
- def test27_snap_to_grid(self):
- "Testing GeoQuerySet.snap_to_grid()."
- # Let's try and break snap_to_grid() with bad combinations of arguments.
- for bad_args in ((), range(3), range(5)):
- self.assertRaises(ValueError, Country.objects.snap_to_grid, *bad_args)
- for bad_args in (('1.0',), (1.0, None), tuple(map(unicode, range(4)))):
- self.assertRaises(TypeError, Country.objects.snap_to_grid, *bad_args)
-
- # Boundary for San Marino, courtesy of Bjorn Sandvik of thematicmapping.org
- # from the world borders dataset he provides.
- wkt = ('MULTIPOLYGON(((12.41580 43.95795,12.45055 43.97972,12.45389 43.98167,'
- '12.46250 43.98472,12.47167 43.98694,12.49278 43.98917,'
- '12.50555 43.98861,12.51000 43.98694,12.51028 43.98277,'
- '12.51167 43.94333,12.51056 43.93916,12.49639 43.92333,'
- '12.49500 43.91472,12.48778 43.90583,12.47444 43.89722,'
- '12.46472 43.89555,12.45917 43.89611,12.41639 43.90472,'
- '12.41222 43.90610,12.40782 43.91366,12.40389 43.92667,'
- '12.40500 43.94833,12.40889 43.95499,12.41580 43.95795)))')
- sm = Country.objects.create(name='San Marino', mpoly=fromstr(wkt))
-
- # Because floating-point arithmitic isn't exact, we set a tolerance
- # to pass into GEOS `equals_exact`.
- tol = 0.000000001
-
- # SELECT AsText(ST_SnapToGrid("geoapp_country"."mpoly", 0.1)) FROM "geoapp_country" WHERE "geoapp_country"."name" = 'San Marino';
- ref = fromstr('MULTIPOLYGON(((12.4 44,12.5 44,12.5 43.9,12.4 43.9,12.4 44)))')
- self.failUnless(ref.equals_exact(Country.objects.snap_to_grid(0.1).get(name='San Marino').snap_to_grid, tol))
-
- # SELECT AsText(ST_SnapToGrid("geoapp_country"."mpoly", 0.05, 0.23)) FROM "geoapp_country" WHERE "geoapp_country"."name" = 'San Marino';
- ref = fromstr('MULTIPOLYGON(((12.4 43.93,12.45 43.93,12.5 43.93,12.45 43.93,12.4 43.93)))')
- self.failUnless(ref.equals_exact(Country.objects.snap_to_grid(0.05, 0.23).get(name='San Marino').snap_to_grid, tol))
-
- # SELECT AsText(ST_SnapToGrid("geoapp_country"."mpoly", 0.5, 0.17, 0.05, 0.23)) FROM "geoapp_country" WHERE "geoapp_country"."name" = 'San Marino';
- ref = fromstr('MULTIPOLYGON(((12.4 43.87,12.45 43.87,12.45 44.1,12.5 44.1,12.5 43.87,12.45 43.87,12.4 43.87)))')
- self.failUnless(ref.equals_exact(Country.objects.snap_to_grid(0.05, 0.23, 0.5, 0.17).get(name='San Marino').snap_to_grid, tol))
-
- @no_mysql
- @no_spatialite
- def test28_reverse(self):
- "Testing GeoQuerySet.reverse_geom()."
- coords = [ (-95.363151, 29.763374), (-95.448601, 29.713803) ]
- Track.objects.create(name='Foo', line=LineString(coords))
- t = Track.objects.reverse_geom().get(name='Foo')
- coords.reverse()
- self.assertEqual(tuple(coords), t.reverse_geom.coords)
- if oracle:
- self.assertRaises(TypeError, State.objects.reverse_geom)
-
- @no_mysql
- @no_oracle
- @no_spatialite
- def test29_force_rhr(self):
- "Testing GeoQuerySet.force_rhr()."
- rings = ( ( (0, 0), (5, 0), (0, 5), (0, 0) ),
- ( (1, 1), (1, 3), (3, 1), (1, 1) ),
- )
- rhr_rings = ( ( (0, 0), (0, 5), (5, 0), (0, 0) ),
- ( (1, 1), (3, 1), (1, 3), (1, 1) ),
- )
- State.objects.create(name='Foo', poly=Polygon(*rings))
- s = State.objects.force_rhr().get(name='Foo')
- self.assertEqual(rhr_rings, s.force_rhr.coords)
-
- @no_mysql
- @no_oracle
- @no_spatialite
- def test29_force_rhr(self):
- "Testing GeoQuerySet.geohash()."
- if not connection.ops.geohash: return
- # Reference query:
- # SELECT ST_GeoHash(point) FROM geoapp_city WHERE name='Houston';
- # SELECT ST_GeoHash(point, 5) FROM geoapp_city WHERE name='Houston';
- ref_hash = '9vk1mfq8jx0c8e0386z6'
- h1 = City.objects.geohash().get(name='Houston')
- h2 = City.objects.geohash(precision=5).get(name='Houston')
- self.assertEqual(ref_hash, h1.geohash)
- self.assertEqual(ref_hash[:5], h2.geohash)
-
-from test_feeds import GeoFeedTest
-from test_regress import GeoRegressionTests
-from test_sitemaps import GeoSitemapTest
diff --git a/parts/django/django/contrib/gis/tests/geoapp/urls.py b/parts/django/django/contrib/gis/tests/geoapp/urls.py
deleted file mode 100644
index edaf280..0000000
--- a/parts/django/django/contrib/gis/tests/geoapp/urls.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.conf.urls.defaults import *
-from feeds import feed_dict
-
-urlpatterns = patterns('',
- (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feed_dict}),
-)
-
-from sitemaps import sitemaps
-urlpatterns += patterns('django.contrib.gis.sitemaps.views',
- (r'^sitemap.xml$', 'index', {'sitemaps' : sitemaps}),
- (r'^sitemaps/(?P<section>\w+)\.xml$', 'sitemap', {'sitemaps' : sitemaps}),
- (r'^sitemaps/kml/(?P<label>\w+)/(?P<model>\w+)/(?P<field_name>\w+)\.kml$', 'kml'),
- (r'^sitemaps/kml/(?P<label>\w+)/(?P<model>\w+)/(?P<field_name>\w+)\.kmz$', 'kmz'),
-)
diff --git a/parts/django/django/contrib/gis/tests/geogapp/__init__.py b/parts/django/django/contrib/gis/tests/geogapp/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/tests/geogapp/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/tests/geogapp/fixtures/initial_data.json b/parts/django/django/contrib/gis/tests/geogapp/fixtures/initial_data.json
deleted file mode 100644
index 0664411..0000000
--- a/parts/django/django/contrib/gis/tests/geogapp/fixtures/initial_data.json
+++ /dev/null
@@ -1,98 +0,0 @@
-[
- {
- "pk": 1,
- "model": "geogapp.city",
- "fields": {
- "name": "Houston",
- "point": "POINT (-95.363151 29.763374)"
- }
- },
- {
- "pk": 2,
- "model": "geogapp.city",
- "fields": {
- "name": "Dallas",
- "point": "POINT (-96.801611 32.782057)"
- }
- },
- {
- "pk": 3,
- "model": "geogapp.city",
- "fields": {
- "name": "Oklahoma City",
- "point": "POINT (-97.521157 34.464642)"
- }
- },
- {
- "pk": 4,
- "model": "geogapp.city",
- "fields": {
- "name": "Wellington",
- "point": "POINT (174.783117 -41.315268)"
- }
- },
- {
- "pk": 5,
- "model": "geogapp.city",
- "fields": {
- "name": "Pueblo",
- "point": "POINT (-104.609252 38.255001)"
- }
- },
- {
- "pk": 6,
- "model": "geogapp.city",
- "fields": {
- "name": "Lawrence",
- "point": "POINT (-95.235060 38.971823)"
- }
- },
- {
- "pk": 7,
- "model": "geogapp.city",
- "fields": {
- "name": "Chicago",
- "point": "POINT (-87.650175 41.850385)"
- }
- },
- {
- "pk": 8,
- "model": "geogapp.city",
- "fields": {
- "name": "Victoria",
- "point": "POINT (-123.305196 48.462611)"
- }
- },
- {
- "pk": 1,
- "model": "geogapp.zipcode",
- "fields" : {
- "code" : "77002",
- "poly" : "SRID=4269;POLYGON ((-95.365015 29.772327, -95.362415 29.772327, -95.360915 29.771827, -95.354615 29.771827, -95.351515 29.772527, -95.350915 29.765327, -95.351015 29.762436, -95.350115 29.760328, -95.347515 29.758528, -95.352315 29.753928, -95.356415 29.756328, -95.358215 29.754028, -95.360215 29.756328, -95.363415 29.757128, -95.364014 29.75638, -95.363415 29.753928, -95.360015 29.751828, -95.361815 29.749528, -95.362715 29.750028, -95.367516 29.744128, -95.369316 29.745128, -95.373916 29.744128, -95.380116 29.738028, -95.387916 29.727929, -95.388516 29.729629, -95.387916 29.732129, -95.382916 29.737428, -95.376616 29.742228, -95.372616 29.747228, -95.378601 29.750846, -95.378616 29.752028, -95.378616 29.754428, -95.376016 29.754528, -95.374616 29.759828, -95.373616 29.761128, -95.371916 29.763928, -95.372316 29.768727, -95.365884 29.76791, -95.366015 29.767127, -95.358715 29.765327, -95.358615 29.766327, -95.359115 29.767227, -95.360215 29.767027, -95.362783 29.768267, -95.365315 29.770527, -95.365015 29.772327))"
- }
- },
- {
- "pk": 2,
- "model": "geogapp.zipcode",
- "fields" : {
- "code" : "77005",
- "poly" : "SRID=4269;POLYGON ((-95.447918 29.727275, -95.428017 29.728729, -95.421117 29.729029, -95.418617 29.727629, -95.418517 29.726429, -95.402117 29.726629, -95.402117 29.725729, -95.395316 29.725729, -95.391916 29.726229, -95.389716 29.725829, -95.396517 29.715429, -95.397517 29.715929, -95.400917 29.711429, -95.411417 29.715029, -95.418417 29.714729, -95.418317 29.70623, -95.440818 29.70593, -95.445018 29.70683, -95.446618 29.70763, -95.447418 29.71003, -95.447918 29.727275))"
- }
- },
- {
- "pk": 3,
- "model": "geogapp.zipcode",
- "fields" : {
- "code" : "77025",
- "poly" : "SRID=4269;POLYGON ((-95.418317 29.70623, -95.414717 29.706129, -95.414617 29.70533, -95.418217 29.70533, -95.419817 29.69533, -95.419484 29.694196, -95.417166 29.690901, -95.414517 29.69433, -95.413317 29.69263, -95.412617 29.68973, -95.412817 29.68753, -95.414087 29.685055, -95.419165 29.685428, -95.421617 29.68513, -95.425717 29.67983, -95.425017 29.67923, -95.424517 29.67763, -95.427418 29.67763, -95.438018 29.664631, -95.436713 29.664411, -95.440118 29.662231, -95.439218 29.661031, -95.437718 29.660131, -95.435718 29.659731, -95.431818 29.660331, -95.441418 29.656631, -95.441318 29.656331, -95.441818 29.656131, -95.441718 29.659031, -95.441118 29.661031, -95.446718 29.656431, -95.446518 29.673431, -95.446918 29.69013, -95.447418 29.71003, -95.446618 29.70763, -95.445018 29.70683, -95.440818 29.70593, -95.418317 29.70623))"
- }
- },
- {
- "pk": 4,
- "model": "geogapp.zipcode",
- "fields" : {
- "code" : "77401",
- "poly" : "SRID=4269;POLYGON ((-95.447918 29.727275, -95.447418 29.71003, -95.446918 29.69013, -95.454318 29.68893, -95.475819 29.68903, -95.475819 29.69113, -95.484419 29.69103, -95.484519 29.69903, -95.480419 29.70133, -95.480419 29.69833, -95.474119 29.69833, -95.474119 29.70453, -95.472719 29.71283, -95.468019 29.71293, -95.468219 29.720229, -95.464018 29.720229, -95.464118 29.724529, -95.463018 29.725929, -95.459818 29.726129, -95.459918 29.720329, -95.451418 29.720429, -95.451775 29.726303, -95.451318 29.727029, -95.447918 29.727275))"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/django/contrib/gis/tests/geogapp/models.py b/parts/django/django/contrib/gis/tests/geogapp/models.py
deleted file mode 100644
index 3696ba2..0000000
--- a/parts/django/django/contrib/gis/tests/geogapp/models.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.contrib.gis.db import models
-
-class City(models.Model):
- name = models.CharField(max_length=30)
- point = models.PointField(geography=True)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class Zipcode(models.Model):
- code = models.CharField(max_length=10)
- poly = models.PolygonField(geography=True)
- objects = models.GeoManager()
- def __unicode__(self): return self.code
-
-class County(models.Model):
- name = models.CharField(max_length=25)
- state = models.CharField(max_length=20)
- mpoly = models.MultiPolygonField(geography=True)
- objects = models.GeoManager()
- def __unicode__(self): return ' County, '.join([self.name, self.state])
diff --git a/parts/django/django/contrib/gis/tests/geogapp/tests.py b/parts/django/django/contrib/gis/tests/geogapp/tests.py
deleted file mode 100644
index cb69ce9..0000000
--- a/parts/django/django/contrib/gis/tests/geogapp/tests.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-Tests for geography support in PostGIS 1.5+
-"""
-import os
-from django.contrib.gis import gdal
-from django.contrib.gis.measure import D
-from django.test import TestCase
-from models import City, County, Zipcode
-
-class GeographyTest(TestCase):
-
- def test01_fixture_load(self):
- "Ensure geography features loaded properly."
- self.assertEqual(8, City.objects.count())
-
- def test02_distance_lookup(self):
- "Testing GeoQuerySet distance lookup support on non-point geography fields."
- z = Zipcode.objects.get(code='77002')
- cities1 = list(City.objects
- .filter(point__distance_lte=(z.poly, D(mi=500)))
- .order_by('name')
- .values_list('name', flat=True))
- cities2 = list(City.objects
- .filter(point__dwithin=(z.poly, D(mi=500)))
- .order_by('name')
- .values_list('name', flat=True))
- for cities in [cities1, cities2]:
- self.assertEqual(['Dallas', 'Houston', 'Oklahoma City'], cities)
-
- def test03_distance_method(self):
- "Testing GeoQuerySet.distance() support on non-point geography fields."
- # `GeoQuerySet.distance` is not allowed geometry fields.
- htown = City.objects.get(name='Houston')
- qs = Zipcode.objects.distance(htown.point)
-
- def test04_invalid_operators_functions(self):
- "Ensuring exceptions are raised for operators & functions invalid on geography fields."
- # Only a subset of the geometry functions & operator are available
- # to PostGIS geography types. For more information, visit:
- # http://postgis.refractions.net/documentation/manual-1.5/ch08.html#PostGIS_GeographyFunctions
- z = Zipcode.objects.get(code='77002')
- # ST_Within not available.
- self.assertRaises(ValueError, City.objects.filter(point__within=z.poly).count)
- # `@` operator not available.
- self.assertRaises(ValueError, City.objects.filter(point__contained=z.poly).count)
-
- # Regression test for #14060, `~=` was never really implemented for PostGIS.
- htown = City.objects.get(name='Houston')
- self.assertRaises(ValueError, City.objects.get, point__exact=htown.point)
-
- def test05_geography_layermapping(self):
- "Testing LayerMapping support on models with geography fields."
- # There is a similar test in `layermap` that uses the same data set,
- # but the County model here is a bit different.
- if not gdal.HAS_GDAL: return
- from django.contrib.gis.utils import LayerMapping
-
- # Getting the shapefile and mapping dictionary.
- shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'data'))
- co_shp = os.path.join(shp_path, 'counties', 'counties.shp')
- co_mapping = {'name' : 'Name',
- 'state' : 'State',
- 'mpoly' : 'MULTIPOLYGON',
- }
-
- # Reference county names, number of polygons, and state names.
- names = ['Bexar', 'Galveston', 'Harris', 'Honolulu', 'Pueblo']
- num_polys = [1, 2, 1, 19, 1] # Number of polygons for each.
- st_names = ['Texas', 'Texas', 'Texas', 'Hawaii', 'Colorado']
-
- lm = LayerMapping(County, co_shp, co_mapping, source_srs=4269, unique='name')
- lm.save(silent=True, strict=True)
-
- for c, name, num_poly, state in zip(County.objects.order_by('name'), names, num_polys, st_names):
- self.assertEqual(4326, c.mpoly.srid)
- self.assertEqual(num_poly, len(c.mpoly))
- self.assertEqual(name, c.name)
- self.assertEqual(state, c.state)
-
- def test06_geography_area(self):
- "Testing that Area calculations work on geography columns."
- from django.contrib.gis.measure import A
- # SELECT ST_Area(poly) FROM geogapp_zipcode WHERE code='77002';
- ref_area = 5439084.70637573
- tol = 5
- z = Zipcode.objects.area().get(code='77002')
- self.assertAlmostEqual(z.area.sq_m, ref_area, tol)
diff --git a/parts/django/django/contrib/gis/tests/layermap/__init__.py b/parts/django/django/contrib/gis/tests/layermap/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/tests/layermap/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/tests/layermap/models.py b/parts/django/django/contrib/gis/tests/layermap/models.py
deleted file mode 100644
index 3a34d16..0000000
--- a/parts/django/django/contrib/gis/tests/layermap/models.py
+++ /dev/null
@@ -1,66 +0,0 @@
-from django.contrib.gis.db import models
-
-class State(models.Model):
- name = models.CharField(max_length=20)
- objects = models.GeoManager()
-
-class County(models.Model):
- name = models.CharField(max_length=25)
- state = models.ForeignKey(State)
- mpoly = models.MultiPolygonField(srid=4269) # Multipolygon in NAD83
- objects = models.GeoManager()
-
-class CountyFeat(models.Model):
- name = models.CharField(max_length=25)
- poly = models.PolygonField(srid=4269)
- objects = models.GeoManager()
-
-class City(models.Model):
- name = models.CharField(max_length=25)
- population = models.IntegerField()
- density = models.DecimalField(max_digits=7, decimal_places=1)
- dt = models.DateField()
- point = models.PointField()
- objects = models.GeoManager()
-
-class Interstate(models.Model):
- name = models.CharField(max_length=20)
- length = models.DecimalField(max_digits=6, decimal_places=2)
- path = models.LineStringField()
- objects = models.GeoManager()
-
-# Same as `City` above, but for testing model inheritance.
-class CityBase(models.Model):
- name = models.CharField(max_length=25)
- population = models.IntegerField()
- density = models.DecimalField(max_digits=7, decimal_places=1)
- point = models.PointField()
- objects = models.GeoManager()
-
-class ICity1(CityBase):
- dt = models.DateField()
-
-class ICity2(ICity1):
- dt_time = models.DateTimeField(auto_now=True)
-
-# Mapping dictionaries for the models above.
-co_mapping = {'name' : 'Name',
- 'state' : {'name' : 'State'}, # ForeignKey's use another mapping dictionary for the _related_ Model (State in this case).
- 'mpoly' : 'MULTIPOLYGON', # Will convert POLYGON features into MULTIPOLYGONS.
- }
-
-cofeat_mapping = {'name' : 'Name',
- 'poly' : 'POLYGON',
- }
-
-city_mapping = {'name' : 'Name',
- 'population' : 'Population',
- 'density' : 'Density',
- 'dt' : 'Created',
- 'point' : 'POINT',
- }
-
-inter_mapping = {'name' : 'Name',
- 'length' : 'Length',
- 'path' : 'LINESTRING',
- }
diff --git a/parts/django/django/contrib/gis/tests/layermap/tests.py b/parts/django/django/contrib/gis/tests/layermap/tests.py
deleted file mode 100644
index 6394b04..0000000
--- a/parts/django/django/contrib/gis/tests/layermap/tests.py
+++ /dev/null
@@ -1,268 +0,0 @@
-import os
-import unittest
-from decimal import Decimal
-
-from django.utils.copycompat import copy
-
-from django.contrib.gis.gdal import DataSource
-from django.contrib.gis.tests.utils import mysql
-from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError, InvalidDecimal, MissingForeignKey
-
-from models import City, County, CountyFeat, Interstate, ICity1, ICity2, State, city_mapping, co_mapping, cofeat_mapping, inter_mapping
-
-shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), os.pardir, 'data'))
-city_shp = os.path.join(shp_path, 'cities', 'cities.shp')
-co_shp = os.path.join(shp_path, 'counties', 'counties.shp')
-inter_shp = os.path.join(shp_path, 'interstates', 'interstates.shp')
-
-# Dictionaries to hold what's expected in the county shapefile.
-NAMES = ['Bexar', 'Galveston', 'Harris', 'Honolulu', 'Pueblo']
-NUMS = [1, 2, 1, 19, 1] # Number of polygons for each.
-STATES = ['Texas', 'Texas', 'Texas', 'Hawaii', 'Colorado']
-
-class LayerMapTest(unittest.TestCase):
-
- def test01_init(self):
- "Testing LayerMapping initialization."
-
- # Model field that does not exist.
- bad1 = copy(city_mapping)
- bad1['foobar'] = 'FooField'
-
- # Shapefile field that does not exist.
- bad2 = copy(city_mapping)
- bad2['name'] = 'Nombre'
-
- # Nonexistent geographic field type.
- bad3 = copy(city_mapping)
- bad3['point'] = 'CURVE'
-
- # Incrementing through the bad mapping dictionaries and
- # ensuring that a LayerMapError is raised.
- for bad_map in (bad1, bad2, bad3):
- try:
- lm = LayerMapping(City, city_shp, bad_map)
- except LayerMapError:
- pass
- else:
- self.fail('Expected a LayerMapError.')
-
- # A LookupError should be thrown for bogus encodings.
- try:
- lm = LayerMapping(City, city_shp, city_mapping, encoding='foobar')
- except LookupError:
- pass
- else:
- self.fail('Expected a LookupError')
-
- def test02_simple_layermap(self):
- "Test LayerMapping import of a simple point shapefile."
- # Setting up for the LayerMapping.
- lm = LayerMapping(City, city_shp, city_mapping)
- lm.save()
-
- # There should be three cities in the shape file.
- self.assertEqual(3, City.objects.count())
-
- # Opening up the shapefile, and verifying the values in each
- # of the features made it to the model.
- ds = DataSource(city_shp)
- layer = ds[0]
- for feat in layer:
- city = City.objects.get(name=feat['Name'].value)
- self.assertEqual(feat['Population'].value, city.population)
- self.assertEqual(Decimal(str(feat['Density'])), city.density)
- self.assertEqual(feat['Created'].value, city.dt)
-
- # Comparing the geometries.
- pnt1, pnt2 = feat.geom, city.point
- self.assertAlmostEqual(pnt1.x, pnt2.x, 6)
- self.assertAlmostEqual(pnt1.y, pnt2.y, 6)
-
- def test03_layermap_strict(self):
- "Testing the `strict` keyword, and import of a LineString shapefile."
- # When the `strict` keyword is set an error encountered will force
- # the importation to stop.
- try:
- lm = LayerMapping(Interstate, inter_shp, inter_mapping)
- lm.save(silent=True, strict=True)
- except InvalidDecimal:
- # No transactions for geoms on MySQL; delete added features.
- if mysql: Interstate.objects.all().delete()
- else:
- self.fail('Should have failed on strict import with invalid decimal values.')
-
- # This LayerMapping should work b/c `strict` is not set.
- lm = LayerMapping(Interstate, inter_shp, inter_mapping)
- lm.save(silent=True)
-
- # Two interstate should have imported correctly.
- self.assertEqual(2, Interstate.objects.count())
-
- # Verifying the values in the layer w/the model.
- ds = DataSource(inter_shp)
-
- # Only the first two features of this shapefile are valid.
- valid_feats = ds[0][:2]
- for feat in valid_feats:
- istate = Interstate.objects.get(name=feat['Name'].value)
-
- if feat.fid == 0:
- self.assertEqual(Decimal(str(feat['Length'])), istate.length)
- elif feat.fid == 1:
- # Everything but the first two decimal digits were truncated,
- # because the Interstate model's `length` field has decimal_places=2.
- self.assertAlmostEqual(feat.get('Length'), float(istate.length), 2)
-
- for p1, p2 in zip(feat.geom, istate.path):
- self.assertAlmostEqual(p1[0], p2[0], 6)
- self.assertAlmostEqual(p1[1], p2[1], 6)
-
- def county_helper(self, county_feat=True):
- "Helper function for ensuring the integrity of the mapped County models."
- for name, n, st in zip(NAMES, NUMS, STATES):
- # Should only be one record b/c of `unique` keyword.
- c = County.objects.get(name=name)
- self.assertEqual(n, len(c.mpoly))
- self.assertEqual(st, c.state.name) # Checking ForeignKey mapping.
-
- # Multiple records because `unique` was not set.
- if county_feat:
- qs = CountyFeat.objects.filter(name=name)
- self.assertEqual(n, qs.count())
-
- def test04_layermap_unique_multigeometry_fk(self):
- "Testing the `unique`, and `transform`, geometry collection conversion, and ForeignKey mappings."
- # All the following should work.
- try:
- # Telling LayerMapping that we want no transformations performed on the data.
- lm = LayerMapping(County, co_shp, co_mapping, transform=False)
-
- # Specifying the source spatial reference system via the `source_srs` keyword.
- lm = LayerMapping(County, co_shp, co_mapping, source_srs=4269)
- lm = LayerMapping(County, co_shp, co_mapping, source_srs='NAD83')
-
- # Unique may take tuple or string parameters.
- for arg in ('name', ('name', 'mpoly')):
- lm = LayerMapping(County, co_shp, co_mapping, transform=False, unique=arg)
- except:
- self.fail('No exception should be raised for proper use of keywords.')
-
- # Testing invalid params for the `unique` keyword.
- for e, arg in ((TypeError, 5.0), (ValueError, 'foobar'), (ValueError, ('name', 'mpolygon'))):
- self.assertRaises(e, LayerMapping, County, co_shp, co_mapping, transform=False, unique=arg)
-
- # No source reference system defined in the shapefile, should raise an error.
- if not mysql:
- self.assertRaises(LayerMapError, LayerMapping, County, co_shp, co_mapping)
-
- # Passing in invalid ForeignKey mapping parameters -- must be a dictionary
- # mapping for the model the ForeignKey points to.
- bad_fk_map1 = copy(co_mapping); bad_fk_map1['state'] = 'name'
- bad_fk_map2 = copy(co_mapping); bad_fk_map2['state'] = {'nombre' : 'State'}
- self.assertRaises(TypeError, LayerMapping, County, co_shp, bad_fk_map1, transform=False)
- self.assertRaises(LayerMapError, LayerMapping, County, co_shp, bad_fk_map2, transform=False)
-
- # There exist no State models for the ForeignKey mapping to work -- should raise
- # a MissingForeignKey exception (this error would be ignored if the `strict`
- # keyword is not set).
- lm = LayerMapping(County, co_shp, co_mapping, transform=False, unique='name')
- self.assertRaises(MissingForeignKey, lm.save, silent=True, strict=True)
-
- # Now creating the state models so the ForeignKey mapping may work.
- co, hi, tx = State(name='Colorado'), State(name='Hawaii'), State(name='Texas')
- co.save(), hi.save(), tx.save()
-
- # If a mapping is specified as a collection, all OGR fields that
- # are not collections will be converted into them. For example,
- # a Point column would be converted to MultiPoint. Other things being done
- # w/the keyword args:
- # `transform=False`: Specifies that no transform is to be done; this
- # has the effect of ignoring the spatial reference check (because the
- # county shapefile does not have implicit spatial reference info).
- #
- # `unique='name'`: Creates models on the condition that they have
- # unique county names; geometries from each feature however will be
- # appended to the geometry collection of the unique model. Thus,
- # all of the various islands in Honolulu county will be in in one
- # database record with a MULTIPOLYGON type.
- lm = LayerMapping(County, co_shp, co_mapping, transform=False, unique='name')
- lm.save(silent=True, strict=True)
-
- # A reference that doesn't use the unique keyword; a new database record will
- # created for each polygon.
- lm = LayerMapping(CountyFeat, co_shp, cofeat_mapping, transform=False)
- lm.save(silent=True, strict=True)
-
- # The county helper is called to ensure integrity of County models.
- self.county_helper()
-
- def test05_test_fid_range_step(self):
- "Tests the `fid_range` keyword and the `step` keyword of .save()."
- # Function for clearing out all the counties before testing.
- def clear_counties(): County.objects.all().delete()
-
- # Initializing the LayerMapping object to use in these tests.
- lm = LayerMapping(County, co_shp, co_mapping, transform=False, unique='name')
-
- # Bad feature id ranges should raise a type error.
- clear_counties()
- bad_ranges = (5.0, 'foo', co_shp)
- for bad in bad_ranges:
- self.assertRaises(TypeError, lm.save, fid_range=bad)
-
- # Step keyword should not be allowed w/`fid_range`.
- fr = (3, 5) # layer[3:5]
- self.assertRaises(LayerMapError, lm.save, fid_range=fr, step=10)
- lm.save(fid_range=fr)
-
- # Features IDs 3 & 4 are for Galveston County, Texas -- only
- # one model is returned because the `unique` keyword was set.
- qs = County.objects.all()
- self.assertEqual(1, qs.count())
- self.assertEqual('Galveston', qs[0].name)
-
- # Features IDs 5 and beyond for Honolulu County, Hawaii, and
- # FID 0 is for Pueblo County, Colorado.
- clear_counties()
- lm.save(fid_range=slice(5, None), silent=True, strict=True) # layer[5:]
- lm.save(fid_range=slice(None, 1), silent=True, strict=True) # layer[:1]
-
- # Only Pueblo & Honolulu counties should be present because of
- # the `unique` keyword. Have to set `order_by` on this QuerySet
- # or else MySQL will return a different ordering than the other dbs.
- qs = County.objects.order_by('name')
- self.assertEqual(2, qs.count())
- hi, co = tuple(qs)
- hi_idx, co_idx = tuple(map(NAMES.index, ('Honolulu', 'Pueblo')))
- self.assertEqual('Pueblo', co.name); self.assertEqual(NUMS[co_idx], len(co.mpoly))
- self.assertEqual('Honolulu', hi.name); self.assertEqual(NUMS[hi_idx], len(hi.mpoly))
-
- # Testing the `step` keyword -- should get the same counties
- # regardless of we use a step that divides equally, that is odd,
- # or that is larger than the dataset.
- for st in (4,7,1000):
- clear_counties()
- lm.save(step=st, strict=True)
- self.county_helper(county_feat=False)
-
- def test06_model_inheritance(self):
- "Tests LayerMapping on inherited models. See #12093."
- icity_mapping = {'name' : 'Name',
- 'population' : 'Population',
- 'density' : 'Density',
- 'point' : 'POINT',
- 'dt' : 'Created',
- }
-
- # Parent model has geometry field.
- lm1 = LayerMapping(ICity1, city_shp, icity_mapping)
- lm1.save()
-
- # Grandparent has geometry field.
- lm2 = LayerMapping(ICity2, city_shp, icity_mapping)
- lm2.save()
-
- self.assertEqual(6, ICity1.objects.count())
- self.assertEqual(3, ICity2.objects.count())
-
diff --git a/parts/django/django/contrib/gis/tests/relatedapp/__init__.py b/parts/django/django/contrib/gis/tests/relatedapp/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/gis/tests/relatedapp/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/gis/tests/relatedapp/models.py b/parts/django/django/contrib/gis/tests/relatedapp/models.py
deleted file mode 100644
index 2e9a62b..0000000
--- a/parts/django/django/contrib/gis/tests/relatedapp/models.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from django.contrib.gis.db import models
-from django.contrib.localflavor.us.models import USStateField
-
-class Location(models.Model):
- point = models.PointField()
- objects = models.GeoManager()
- def __unicode__(self): return self.point.wkt
-
-class City(models.Model):
- name = models.CharField(max_length=50)
- state = USStateField()
- location = models.ForeignKey(Location)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-class AugmentedLocation(Location):
- extra_text = models.TextField(blank=True)
- objects = models.GeoManager()
-
-class DirectoryEntry(models.Model):
- listing_text = models.CharField(max_length=50)
- location = models.ForeignKey(AugmentedLocation)
- objects = models.GeoManager()
-
-class Parcel(models.Model):
- name = models.CharField(max_length=30)
- city = models.ForeignKey(City)
- center1 = models.PointField()
- # Throwing a curveball w/`db_column` here.
- center2 = models.PointField(srid=2276, db_column='mycenter')
- border1 = models.PolygonField()
- border2 = models.PolygonField(srid=2276)
- objects = models.GeoManager()
- def __unicode__(self): return self.name
-
-# These use the GeoManager but do not have any geographic fields.
-class Author(models.Model):
- name = models.CharField(max_length=100)
- objects = models.GeoManager()
-
-class Article(models.Model):
- title = models.CharField(max_length=100)
- author = models.ForeignKey(Author, unique=True)
- objects = models.GeoManager()
-
-class Book(models.Model):
- title = models.CharField(max_length=100)
- author = models.ForeignKey(Author, related_name='books', null=True)
- objects = models.GeoManager()
diff --git a/parts/django/django/contrib/gis/tests/relatedapp/tests.py b/parts/django/django/contrib/gis/tests/relatedapp/tests.py
deleted file mode 100644
index c8aeb28..0000000
--- a/parts/django/django/contrib/gis/tests/relatedapp/tests.py
+++ /dev/null
@@ -1,284 +0,0 @@
-from django.test import TestCase
-
-from django.contrib.gis.geos import GEOSGeometry, Point, MultiPoint
-from django.contrib.gis.db.models import Collect, Count, Extent, F, Union
-from django.contrib.gis.geometry.backend import Geometry
-from django.contrib.gis.tests.utils import mysql, oracle, no_mysql, no_oracle, no_spatialite
-
-from models import City, Location, DirectoryEntry, Parcel, Book, Author, Article
-
-class RelatedGeoModelTest(TestCase):
-
- def test02_select_related(self):
- "Testing `select_related` on geographic models (see #7126)."
- qs1 = City.objects.all()
- qs2 = City.objects.select_related()
- qs3 = City.objects.select_related('location')
-
- # Reference data for what's in the fixtures.
- cities = (
- ('Aurora', 'TX', -97.516111, 33.058333),
- ('Roswell', 'NM', -104.528056, 33.387222),
- ('Kecksburg', 'PA', -79.460734, 40.18476),
- )
-
- for qs in (qs1, qs2, qs3):
- for ref, c in zip(cities, qs):
- nm, st, lon, lat = ref
- self.assertEqual(nm, c.name)
- self.assertEqual(st, c.state)
- self.assertEqual(Point(lon, lat), c.location.point)
-
- @no_mysql
- def test03_transform_related(self):
- "Testing the `transform` GeoQuerySet method on related geographic models."
- # All the transformations are to state plane coordinate systems using
- # US Survey Feet (thus a tolerance of 0 implies error w/in 1 survey foot).
- tol = 0
-
- def check_pnt(ref, pnt):
- self.assertAlmostEqual(ref.x, pnt.x, tol)
- self.assertAlmostEqual(ref.y, pnt.y, tol)
- self.assertEqual(ref.srid, pnt.srid)
-
- # Each city transformed to the SRID of their state plane coordinate system.
- transformed = (('Kecksburg', 2272, 'POINT(1490553.98959621 314792.131023984)'),
- ('Roswell', 2257, 'POINT(481902.189077221 868477.766629735)'),
- ('Aurora', 2276, 'POINT(2269923.2484839 7069381.28722222)'),
- )
-
- for name, srid, wkt in transformed:
- # Doing this implicitly sets `select_related` select the location.
- # TODO: Fix why this breaks on Oracle.
- qs = list(City.objects.filter(name=name).transform(srid, field_name='location__point'))
- check_pnt(GEOSGeometry(wkt, srid), qs[0].location.point)
-
- @no_mysql
- @no_spatialite
- def test04a_related_extent_aggregate(self):
- "Testing the `extent` GeoQuerySet aggregates on related geographic models."
- # This combines the Extent and Union aggregates into one query
- aggs = City.objects.aggregate(Extent('location__point'))
-
- # One for all locations, one that excludes New Mexico (Roswell).
- all_extent = (-104.528056, 29.763374, -79.460734, 40.18476)
- txpa_extent = (-97.516111, 29.763374, -79.460734, 40.18476)
- e1 = City.objects.extent(field_name='location__point')
- e2 = City.objects.exclude(state='NM').extent(field_name='location__point')
- e3 = aggs['location__point__extent']
-
- # The tolerance value is to four decimal places because of differences
- # between the Oracle and PostGIS spatial backends on the extent calculation.
- tol = 4
- for ref, e in [(all_extent, e1), (txpa_extent, e2), (all_extent, e3)]:
- for ref_val, e_val in zip(ref, e): self.assertAlmostEqual(ref_val, e_val, tol)
-
- @no_mysql
- def test04b_related_union_aggregate(self):
- "Testing the `unionagg` GeoQuerySet aggregates on related geographic models."
- # This combines the Extent and Union aggregates into one query
- aggs = City.objects.aggregate(Union('location__point'))
-
- # These are the points that are components of the aggregate geographic
- # union that is returned. Each point # corresponds to City PK.
- p1 = Point(-104.528056, 33.387222)
- p2 = Point(-97.516111, 33.058333)
- p3 = Point(-79.460734, 40.18476)
- p4 = Point(-96.801611, 32.782057)
- p5 = Point(-95.363151, 29.763374)
-
- # Creating the reference union geometry depending on the spatial backend,
- # as Oracle will have a different internal ordering of the component
- # geometries than PostGIS. The second union aggregate is for a union
- # query that includes limiting information in the WHERE clause (in other
- # words a `.filter()` precedes the call to `.unionagg()`).
- if oracle:
- ref_u1 = MultiPoint(p4, p5, p3, p1, p2, srid=4326)
- ref_u2 = MultiPoint(p3, p2, srid=4326)
- else:
- # Looks like PostGIS points by longitude value.
- ref_u1 = MultiPoint(p1, p2, p4, p5, p3, srid=4326)
- ref_u2 = MultiPoint(p2, p3, srid=4326)
-
- u1 = City.objects.unionagg(field_name='location__point')
- u2 = City.objects.exclude(name__in=('Roswell', 'Houston', 'Dallas', 'Fort Worth')).unionagg(field_name='location__point')
- u3 = aggs['location__point__union']
-
- self.assertEqual(ref_u1, u1)
- self.assertEqual(ref_u2, u2)
- self.assertEqual(ref_u1, u3)
-
- def test05_select_related_fk_to_subclass(self):
- "Testing that calling select_related on a query over a model with an FK to a model subclass works"
- # Regression test for #9752.
- l = list(DirectoryEntry.objects.all().select_related())
-
- def test06_f_expressions(self):
- "Testing F() expressions on GeometryFields."
- # Constructing a dummy parcel border and getting the City instance for
- # assigning the FK.
- b1 = GEOSGeometry('POLYGON((-97.501205 33.052520,-97.501205 33.052576,-97.501150 33.052576,-97.501150 33.052520,-97.501205 33.052520))', srid=4326)
- pcity = City.objects.get(name='Aurora')
-
- # First parcel has incorrect center point that is equal to the City;
- # it also has a second border that is different from the first as a
- # 100ft buffer around the City.
- c1 = pcity.location.point
- c2 = c1.transform(2276, clone=True)
- b2 = c2.buffer(100)
- p1 = Parcel.objects.create(name='P1', city=pcity, center1=c1, center2=c2, border1=b1, border2=b2)
-
- # Now creating a second Parcel where the borders are the same, just
- # in different coordinate systems. The center points are also the
- # the same (but in different coordinate systems), and this time they
- # actually correspond to the centroid of the border.
- c1 = b1.centroid
- c2 = c1.transform(2276, clone=True)
- p2 = Parcel.objects.create(name='P2', city=pcity, center1=c1, center2=c2, border1=b1, border2=b1)
-
- # Should return the second Parcel, which has the center within the
- # border.
- qs = Parcel.objects.filter(center1__within=F('border1'))
- self.assertEqual(1, len(qs))
- self.assertEqual('P2', qs[0].name)
-
- if not mysql:
- # This time center2 is in a different coordinate system and needs
- # to be wrapped in transformation SQL.
- qs = Parcel.objects.filter(center2__within=F('border1'))
- self.assertEqual(1, len(qs))
- self.assertEqual('P2', qs[0].name)
-
- # Should return the first Parcel, which has the center point equal
- # to the point in the City ForeignKey.
- qs = Parcel.objects.filter(center1=F('city__location__point'))
- self.assertEqual(1, len(qs))
- self.assertEqual('P1', qs[0].name)
-
- if not mysql:
- # This time the city column should be wrapped in transformation SQL.
- qs = Parcel.objects.filter(border2__contains=F('city__location__point'))
- self.assertEqual(1, len(qs))
- self.assertEqual('P1', qs[0].name)
-
- def test07_values(self):
- "Testing values() and values_list() and GeoQuerySets."
- # GeoQuerySet and GeoValuesQuerySet, and GeoValuesListQuerySet respectively.
- gqs = Location.objects.all()
- gvqs = Location.objects.values()
- gvlqs = Location.objects.values_list()
-
- # Incrementing through each of the models, dictionaries, and tuples
- # returned by the different types of GeoQuerySets.
- for m, d, t in zip(gqs, gvqs, gvlqs):
- # The values should be Geometry objects and not raw strings returned
- # by the spatial database.
- self.failUnless(isinstance(d['point'], Geometry))
- self.failUnless(isinstance(t[1], Geometry))
- self.assertEqual(m.point, d['point'])
- self.assertEqual(m.point, t[1])
-
- def test08_defer_only(self):
- "Testing defer() and only() on Geographic models."
- qs = Location.objects.all()
- def_qs = Location.objects.defer('point')
- for loc, def_loc in zip(qs, def_qs):
- self.assertEqual(loc.point, def_loc.point)
-
- def test09_pk_relations(self):
- "Ensuring correct primary key column is selected across relations. See #10757."
- # The expected ID values -- notice the last two location IDs
- # are out of order. Dallas and Houston have location IDs that differ
- # from their PKs -- this is done to ensure that the related location
- # ID column is selected instead of ID column for the city.
- city_ids = (1, 2, 3, 4, 5)
- loc_ids = (1, 2, 3, 5, 4)
- ids_qs = City.objects.order_by('id').values('id', 'location__id')
- for val_dict, c_id, l_id in zip(ids_qs, city_ids, loc_ids):
- self.assertEqual(val_dict['id'], c_id)
- self.assertEqual(val_dict['location__id'], l_id)
-
- def test10_combine(self):
- "Testing the combination of two GeoQuerySets. See #10807."
- buf1 = City.objects.get(name='Aurora').location.point.buffer(0.1)
- buf2 = City.objects.get(name='Kecksburg').location.point.buffer(0.1)
- qs1 = City.objects.filter(location__point__within=buf1)
- qs2 = City.objects.filter(location__point__within=buf2)
- combined = qs1 | qs2
- names = [c.name for c in combined]
- self.assertEqual(2, len(names))
- self.failUnless('Aurora' in names)
- self.failUnless('Kecksburg' in names)
-
- def test11_geoquery_pickle(self):
- "Ensuring GeoQuery objects are unpickled correctly. See #10839."
- import pickle
- from django.contrib.gis.db.models.sql import GeoQuery
- qs = City.objects.all()
- q_str = pickle.dumps(qs.query)
- q = pickle.loads(q_str)
- self.assertEqual(GeoQuery, q.__class__)
-
- # TODO: fix on Oracle -- get the following error because the SQL is ordered
- # by a geometry object, which Oracle apparently doesn't like:
- # ORA-22901: cannot compare nested table or VARRAY or LOB attributes of an object type
- @no_oracle
- def test12a_count(self):
- "Testing `Count` aggregate use with the `GeoManager` on geo-fields."
- # The City, 'Fort Worth' uses the same location as Dallas.
- dallas = City.objects.get(name='Dallas')
-
- # Count annotation should be 2 for the Dallas location now.
- loc = Location.objects.annotate(num_cities=Count('city')).get(id=dallas.location.id)
- self.assertEqual(2, loc.num_cities)
-
- def test12b_count(self):
- "Testing `Count` aggregate use with the `GeoManager` on non geo-fields. See #11087."
- # Should only be one author (Trevor Paglen) returned by this query, and
- # the annotation should have 3 for the number of books, see #11087.
- # Also testing with a `GeoValuesQuerySet`, see #11489.
- qs = Author.objects.annotate(num_books=Count('books')).filter(num_books__gt=1)
- vqs = Author.objects.values('name').annotate(num_books=Count('books')).filter(num_books__gt=1)
- self.assertEqual(1, len(qs))
- self.assertEqual(3, qs[0].num_books)
- self.assertEqual(1, len(vqs))
- self.assertEqual(3, vqs[0]['num_books'])
-
- # TODO: The phantom model does appear on Oracle.
- @no_oracle
- def test13_select_related_null_fk(self):
- "Testing `select_related` on a nullable ForeignKey via `GeoManager`. See #11381."
- no_author = Book.objects.create(title='Without Author')
- b = Book.objects.select_related('author').get(title='Without Author')
- # Should be `None`, and not a 'dummy' model.
- self.assertEqual(None, b.author)
-
- @no_mysql
- @no_oracle
- @no_spatialite
- def test14_collect(self):
- "Testing the `collect` GeoQuerySet method and `Collect` aggregate."
- # Reference query:
- # SELECT AsText(ST_Collect("relatedapp_location"."point")) FROM "relatedapp_city" LEFT OUTER JOIN
- # "relatedapp_location" ON ("relatedapp_city"."location_id" = "relatedapp_location"."id")
- # WHERE "relatedapp_city"."state" = 'TX';
- ref_geom = GEOSGeometry('MULTIPOINT(-97.516111 33.058333,-96.801611 32.782057,-95.363151 29.763374,-96.801611 32.782057)')
-
- c1 = City.objects.filter(state='TX').collect(field_name='location__point')
- c2 = City.objects.filter(state='TX').aggregate(Collect('location__point'))['location__point__collect']
-
- for coll in (c1, c2):
- # Even though Dallas and Ft. Worth share same point, Collect doesn't
- # consolidate -- that's why 4 points in MultiPoint.
- self.assertEqual(4, len(coll))
- self.assertEqual(ref_geom, coll)
-
- def test15_invalid_select_related(self):
- "Testing doing select_related on the related name manager of a unique FK. See #13934."
- qs = Article.objects.select_related('author__article')
- # This triggers TypeError when `get_default_columns` has no `local_only`
- # keyword. The TypeError is swallowed if QuerySet is actually
- # evaluated as list generation swallows TypeError in CPython.
- sql = str(qs.query)
-
- # TODO: Related tests for KML, GML, and distance lookups.
diff --git a/parts/django/django/contrib/gis/tests/test_geoforms.py b/parts/django/django/contrib/gis/tests/test_geoforms.py
deleted file mode 100644
index aa6b25e..0000000
--- a/parts/django/django/contrib/gis/tests/test_geoforms.py
+++ /dev/null
@@ -1,65 +0,0 @@
-import unittest
-
-from django.forms import ValidationError
-from django.contrib.gis import forms
-from django.contrib.gis.geos import GEOSGeometry
-
-class GeometryFieldTest(unittest.TestCase):
-
- def test00_init(self):
- "Testing GeometryField initialization with defaults."
- fld = forms.GeometryField()
- for bad_default in ('blah', 3, 'FoO', None, 0):
- self.assertRaises(ValidationError, fld.clean, bad_default)
-
- def test01_srid(self):
- "Testing GeometryField with a SRID set."
- # Input that doesn't specify the SRID is assumed to be in the SRID
- # of the input field.
- fld = forms.GeometryField(srid=4326)
- geom = fld.clean('POINT(5 23)')
- self.assertEqual(4326, geom.srid)
- # Making the field in a different SRID from that of the geometry, and
- # asserting it transforms.
- fld = forms.GeometryField(srid=32140)
- tol = 0.0000001
- xform_geom = GEOSGeometry('POINT (951640.547328465 4219369.26171664)', srid=32140)
- # The cleaned geometry should be transformed to 32140.
- cleaned_geom = fld.clean('SRID=4326;POINT (-95.363151 29.763374)')
- self.failUnless(xform_geom.equals_exact(cleaned_geom, tol))
-
- def test02_null(self):
- "Testing GeometryField's handling of null (None) geometries."
- # Form fields, by default, are required (`required=True`)
- fld = forms.GeometryField()
- self.assertRaises(forms.ValidationError, fld.clean, None)
-
- # Still not allowed if `null=False`.
- fld = forms.GeometryField(required=False, null=False)
- self.assertRaises(forms.ValidationError, fld.clean, None)
-
- # This will clean None as a geometry (See #10660).
- fld = forms.GeometryField(required=False)
- self.assertEqual(None, fld.clean(None))
-
- def test03_geom_type(self):
- "Testing GeometryField's handling of different geometry types."
- # By default, all geometry types are allowed.
- fld = forms.GeometryField()
- for wkt in ('POINT(5 23)', 'MULTIPOLYGON(((0 0, 0 1, 1 1, 1 0, 0 0)))', 'LINESTRING(0 0, 1 1)'):
- self.assertEqual(GEOSGeometry(wkt), fld.clean(wkt))
-
- pnt_fld = forms.GeometryField(geom_type='POINT')
- self.assertEqual(GEOSGeometry('POINT(5 23)'), pnt_fld.clean('POINT(5 23)'))
- self.assertRaises(forms.ValidationError, pnt_fld.clean, 'LINESTRING(0 0, 1 1)')
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(GeometryFieldTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
-
-if __name__=="__main__":
- run()
diff --git a/parts/django/django/contrib/gis/tests/test_geoip.py b/parts/django/django/contrib/gis/tests/test_geoip.py
deleted file mode 100644
index a9ab6a6..0000000
--- a/parts/django/django/contrib/gis/tests/test_geoip.py
+++ /dev/null
@@ -1,103 +0,0 @@
-import os, unittest
-from django.db import settings
-from django.contrib.gis.geos import GEOSGeometry
-from django.contrib.gis.utils import GeoIP, GeoIPException
-
-# Note: Requires use of both the GeoIP country and city datasets.
-# The GEOIP_DATA path should be the only setting set (the directory
-# should contain links or the actual database files 'GeoIP.dat' and
-# 'GeoLiteCity.dat'.
-class GeoIPTest(unittest.TestCase):
-
- def test01_init(self):
- "Testing GeoIP initialization."
- g1 = GeoIP() # Everything inferred from GeoIP path
- path = settings.GEOIP_PATH
- g2 = GeoIP(path, 0) # Passing in data path explicitly.
- g3 = GeoIP.open(path, 0) # MaxMind Python API syntax.
-
- for g in (g1, g2, g3):
- self.assertEqual(True, bool(g._country))
- self.assertEqual(True, bool(g._city))
-
- # Only passing in the location of one database.
- city = os.path.join(path, 'GeoLiteCity.dat')
- cntry = os.path.join(path, 'GeoIP.dat')
- g4 = GeoIP(city, country='')
- self.assertEqual(None, g4._country)
- g5 = GeoIP(cntry, city='')
- self.assertEqual(None, g5._city)
-
- # Improper parameters.
- bad_params = (23, 'foo', 15.23)
- for bad in bad_params:
- self.assertRaises(GeoIPException, GeoIP, cache=bad)
- if isinstance(bad, basestring):
- e = GeoIPException
- else:
- e = TypeError
- self.assertRaises(e, GeoIP, bad, 0)
-
- def test02_bad_query(self):
- "Testing GeoIP query parameter checking."
- cntry_g = GeoIP(city='<foo>')
- # No city database available, these calls should fail.
- self.assertRaises(GeoIPException, cntry_g.city, 'google.com')
- self.assertRaises(GeoIPException, cntry_g.coords, 'yahoo.com')
-
- # Non-string query should raise TypeError
- self.assertRaises(TypeError, cntry_g.country_code, 17)
- self.assertRaises(TypeError, cntry_g.country_name, GeoIP)
-
- def test03_country(self):
- "Testing GeoIP country querying methods."
- g = GeoIP(city='<foo>')
-
- fqdn = 'www.google.com'
- addr = '12.215.42.19'
-
- for query in (fqdn, addr):
- for func in (g.country_code, g.country_code_by_addr, g.country_code_by_name):
- self.assertEqual('US', func(query))
- for func in (g.country_name, g.country_name_by_addr, g.country_name_by_name):
- self.assertEqual('United States', func(query))
- self.assertEqual({'country_code' : 'US', 'country_name' : 'United States'},
- g.country(query))
-
- def test04_city(self):
- "Testing GeoIP city querying methods."
- g = GeoIP(country='<foo>')
-
- addr = '130.80.29.3'
- fqdn = 'chron.com'
- for query in (fqdn, addr):
- # Country queries should still work.
- for func in (g.country_code, g.country_code_by_addr, g.country_code_by_name):
- self.assertEqual('US', func(query))
- for func in (g.country_name, g.country_name_by_addr, g.country_name_by_name):
- self.assertEqual('United States', func(query))
- self.assertEqual({'country_code' : 'US', 'country_name' : 'United States'},
- g.country(query))
-
- # City information dictionary.
- d = g.city(query)
- self.assertEqual('USA', d['country_code3'])
- self.assertEqual('Houston', d['city'])
- self.assertEqual('TX', d['region'])
- self.assertEqual(713, d['area_code'])
- geom = g.geos(query)
- self.failIf(not isinstance(geom, GEOSGeometry))
- lon, lat = (-95.3670, 29.7523)
- lat_lon = g.lat_lon(query)
- lat_lon = (lat_lon[1], lat_lon[0])
- for tup in (geom.tuple, g.coords(query), g.lon_lat(query), lat_lon):
- self.assertAlmostEqual(lon, tup[0], 4)
- self.assertAlmostEqual(lat, tup[1], 4)
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(GeoIPTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/tests/test_measure.py b/parts/django/django/contrib/gis/tests/test_measure.py
deleted file mode 100644
index 28d5048..0000000
--- a/parts/django/django/contrib/gis/tests/test_measure.py
+++ /dev/null
@@ -1,336 +0,0 @@
-"""
-Distance and Area objects to allow for sensible and convienient calculation
-and conversions. Here are some tests.
-"""
-
-import unittest
-from django.contrib.gis.measure import Distance, Area, D, A
-
-class DistanceTest(unittest.TestCase):
- "Testing the Distance object"
-
- def testInit(self):
- "Testing initialisation from valid units"
- d = Distance(m=100)
- self.assertEqual(d.m, 100)
-
- d1, d2, d3 = D(m=100), D(meter=100), D(metre=100)
- for d in (d1, d2, d3):
- self.assertEqual(d.m, 100)
-
- d = D(nm=100)
- self.assertEqual(d.m, 185200)
-
- y1, y2, y3 = D(yd=100), D(yard=100), D(Yard=100)
- for d in (y1, y2, y3):
- self.assertEqual(d.yd, 100)
-
- mm1, mm2 = D(millimeter=1000), D(MiLLiMeTeR=1000)
- for d in (mm1, mm2):
- self.assertEqual(d.m, 1.0)
- self.assertEqual(d.mm, 1000.0)
-
-
- def testInitInvalid(self):
- "Testing initialisation from invalid units"
- self.assertRaises(AttributeError, D, banana=100)
-
- def testAccess(self):
- "Testing access in different units"
- d = D(m=100)
- self.assertEqual(d.km, 0.1)
- self.assertAlmostEqual(d.ft, 328.084, 3)
-
- def testAccessInvalid(self):
- "Testing access in invalid units"
- d = D(m=100)
- self.failIf(hasattr(d, 'banana'))
-
- def testAddition(self):
- "Test addition & subtraction"
- d1 = D(m=100)
- d2 = D(m=200)
-
- d3 = d1 + d2
- self.assertEqual(d3.m, 300)
- d3 += d1
- self.assertEqual(d3.m, 400)
-
- d4 = d1 - d2
- self.assertEqual(d4.m, -100)
- d4 -= d1
- self.assertEqual(d4.m, -200)
-
- try:
- d5 = d1 + 1
- except TypeError, e:
- pass
- else:
- self.fail('Distance + number should raise TypeError')
-
- try:
- d5 = d1 - 1
- except TypeError, e:
- pass
- else:
- self.fail('Distance - number should raise TypeError')
-
- try:
- d1 += 1
- except TypeError, e:
- pass
- else:
- self.fail('Distance += number should raise TypeError')
-
- try:
- d1 -= 1
- except TypeError, e:
- pass
- else:
- self.fail('Distance -= number should raise TypeError')
-
- def testMultiplication(self):
- "Test multiplication & division"
- d1 = D(m=100)
-
- d3 = d1 * 2
- self.assertEqual(d3.m, 200)
- d3 = 2 * d1
- self.assertEqual(d3.m, 200)
- d3 *= 5
- self.assertEqual(d3.m, 1000)
-
- d4 = d1 / 2
- self.assertEqual(d4.m, 50)
- d4 /= 5
- self.assertEqual(d4.m, 10)
-
- a5 = d1 * D(m=10)
- self.assert_(isinstance(a5, Area))
- self.assertEqual(a5.sq_m, 100*10)
-
- try:
- d1 *= D(m=1)
- except TypeError, e:
- pass
- else:
- self.fail('Distance *= Distance should raise TypeError')
-
- try:
- d5 = d1 / D(m=1)
- except TypeError, e:
- pass
- else:
- self.fail('Distance / Distance should raise TypeError')
-
- try:
- d1 /= D(m=1)
- except TypeError, e:
- pass
- else:
- self.fail('Distance /= Distance should raise TypeError')
-
- def testUnitConversions(self):
- "Testing default units during maths"
- d1 = D(m=100)
- d2 = D(km=1)
-
- d3 = d1 + d2
- self.assertEqual(d3._default_unit, 'm')
- d4 = d2 + d1
- self.assertEqual(d4._default_unit, 'km')
- d5 = d1 * 2
- self.assertEqual(d5._default_unit, 'm')
- d6 = d1 / 2
- self.assertEqual(d6._default_unit, 'm')
-
- def testComparisons(self):
- "Testing comparisons"
- d1 = D(m=100)
- d2 = D(km=1)
- d3 = D(km=0)
-
- self.assert_(d2 > d1)
- self.assert_(d1 == d1)
- self.assert_(d1 < d2)
- self.failIf(d3)
-
- def testUnitsStr(self):
- "Testing conversion to strings"
- d1 = D(m=100)
- d2 = D(km=3.5)
-
- self.assertEqual(str(d1), '100.0 m')
- self.assertEqual(str(d2), '3.5 km')
- self.assertEqual(repr(d1), 'Distance(m=100.0)')
- self.assertEqual(repr(d2), 'Distance(km=3.5)')
-
- def testUnitAttName(self):
- "Testing the `unit_attname` class method"
- unit_tuple = [('Yard', 'yd'), ('Nautical Mile', 'nm'), ('German legal metre', 'german_m'),
- ('Indian yard', 'indian_yd'), ('Chain (Sears)', 'chain_sears'), ('Chain', 'chain')]
- for nm, att in unit_tuple:
- self.assertEqual(att, D.unit_attname(nm))
-
-class AreaTest(unittest.TestCase):
- "Testing the Area object"
-
- def testInit(self):
- "Testing initialisation from valid units"
- a = Area(sq_m=100)
- self.assertEqual(a.sq_m, 100)
-
- a = A(sq_m=100)
- self.assertEqual(a.sq_m, 100)
-
- a = A(sq_mi=100)
- self.assertEqual(a.sq_m, 258998811.0336)
-
- def testInitInvaliA(self):
- "Testing initialisation from invalid units"
- self.assertRaises(AttributeError, A, banana=100)
-
- def testAccess(self):
- "Testing access in different units"
- a = A(sq_m=100)
- self.assertEqual(a.sq_km, 0.0001)
- self.assertAlmostEqual(a.sq_ft, 1076.391, 3)
-
- def testAccessInvaliA(self):
- "Testing access in invalid units"
- a = A(sq_m=100)
- self.failIf(hasattr(a, 'banana'))
-
- def testAddition(self):
- "Test addition & subtraction"
- a1 = A(sq_m=100)
- a2 = A(sq_m=200)
-
- a3 = a1 + a2
- self.assertEqual(a3.sq_m, 300)
- a3 += a1
- self.assertEqual(a3.sq_m, 400)
-
- a4 = a1 - a2
- self.assertEqual(a4.sq_m, -100)
- a4 -= a1
- self.assertEqual(a4.sq_m, -200)
-
- try:
- a5 = a1 + 1
- except TypeError, e:
- pass
- else:
- self.fail('Area + number should raise TypeError')
-
- try:
- a5 = a1 - 1
- except TypeError, e:
- pass
- else:
- self.fail('Area - number should raise TypeError')
-
- try:
- a1 += 1
- except TypeError, e:
- pass
- else:
- self.fail('Area += number should raise TypeError')
-
- try:
- a1 -= 1
- except TypeError, e:
- pass
- else:
- self.fail('Area -= number should raise TypeError')
-
- def testMultiplication(self):
- "Test multiplication & division"
- a1 = A(sq_m=100)
-
- a3 = a1 * 2
- self.assertEqual(a3.sq_m, 200)
- a3 = 2 * a1
- self.assertEqual(a3.sq_m, 200)
- a3 *= 5
- self.assertEqual(a3.sq_m, 1000)
-
- a4 = a1 / 2
- self.assertEqual(a4.sq_m, 50)
- a4 /= 5
- self.assertEqual(a4.sq_m, 10)
-
- try:
- a5 = a1 * A(sq_m=1)
- except TypeError, e:
- pass
- else:
- self.fail('Area * Area should raise TypeError')
-
- try:
- a1 *= A(sq_m=1)
- except TypeError, e:
- pass
- else:
- self.fail('Area *= Area should raise TypeError')
-
- try:
- a5 = a1 / A(sq_m=1)
- except TypeError, e:
- pass
- else:
- self.fail('Area / Area should raise TypeError')
-
- try:
- a1 /= A(sq_m=1)
- except TypeError, e:
- pass
- else:
- self.fail('Area /= Area should raise TypeError')
-
- def testUnitConversions(self):
- "Testing default units during maths"
- a1 = A(sq_m=100)
- a2 = A(sq_km=1)
-
- a3 = a1 + a2
- self.assertEqual(a3._default_unit, 'sq_m')
- a4 = a2 + a1
- self.assertEqual(a4._default_unit, 'sq_km')
- a5 = a1 * 2
- self.assertEqual(a5._default_unit, 'sq_m')
- a6 = a1 / 2
- self.assertEqual(a6._default_unit, 'sq_m')
-
- def testComparisons(self):
- "Testing comparisons"
- a1 = A(sq_m=100)
- a2 = A(sq_km=1)
- a3 = A(sq_km=0)
-
- self.assert_(a2 > a1)
- self.assert_(a1 == a1)
- self.assert_(a1 < a2)
- self.failIf(a3)
-
- def testUnitsStr(self):
- "Testing conversion to strings"
- a1 = A(sq_m=100)
- a2 = A(sq_km=3.5)
-
- self.assertEqual(str(a1), '100.0 sq_m')
- self.assertEqual(str(a2), '3.5 sq_km')
- self.assertEqual(repr(a1), 'Area(sq_m=100.0)')
- self.assertEqual(repr(a2), 'Area(sq_km=3.5)')
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(DistanceTest))
- s.addTest(unittest.makeSuite(AreaTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
-
-if __name__=="__main__":
- run()
diff --git a/parts/django/django/contrib/gis/tests/test_spatialrefsys.py b/parts/django/django/contrib/gis/tests/test_spatialrefsys.py
deleted file mode 100644
index a9fcbff..0000000
--- a/parts/django/django/contrib/gis/tests/test_spatialrefsys.py
+++ /dev/null
@@ -1,113 +0,0 @@
-import unittest
-
-from django.db import connection
-from django.contrib.gis.tests.utils import mysql, no_mysql, oracle, postgis, spatialite
-
-test_srs = ({'srid' : 4326,
- 'auth_name' : ('EPSG', True),
- 'auth_srid' : 4326,
- 'srtext' : 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]',
- 'srtext14' : 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]',
- 'proj4' : '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ',
- 'spheroid' : 'WGS 84', 'name' : 'WGS 84',
- 'geographic' : True, 'projected' : False, 'spatialite' : True,
- 'ellipsoid' : (6378137.0, 6356752.3, 298.257223563), # From proj's "cs2cs -le" and Wikipedia (semi-minor only)
- 'eprec' : (1, 1, 9),
- },
- {'srid' : 32140,
- 'auth_name' : ('EPSG', False),
- 'auth_srid' : 32140,
- 'srtext' : 'PROJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32140"]]',
- 'srtext14': 'PROJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],AUTHORITY["EPSG","32140"],AXIS["X",EAST],AXIS["Y",NORTH]]',
- 'proj4' : '+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs ',
- 'spheroid' : 'GRS 1980', 'name' : 'NAD83 / Texas South Central',
- 'geographic' : False, 'projected' : True, 'spatialite' : False,
- 'ellipsoid' : (6378137.0, 6356752.31414, 298.257222101), # From proj's "cs2cs -le" and Wikipedia (semi-minor only)
- 'eprec' : (1, 5, 10),
- },
- )
-
-if oracle:
- from django.contrib.gis.db.backends.oracle.models import SpatialRefSys
-elif postgis:
- from django.contrib.gis.db.backends.postgis.models import SpatialRefSys
-elif spatialite:
- from django.contrib.gis.db.backends.spatialite.models import SpatialRefSys
-
-class SpatialRefSysTest(unittest.TestCase):
-
- @no_mysql
- def test01_retrieve(self):
- "Testing retrieval of SpatialRefSys model objects."
- for sd in test_srs:
- srs = SpatialRefSys.objects.get(srid=sd['srid'])
- self.assertEqual(sd['srid'], srs.srid)
-
- # Some of the authority names are borked on Oracle, e.g., SRID=32140.
- # also, Oracle Spatial seems to add extraneous info to fields, hence the
- # the testing with the 'startswith' flag.
- auth_name, oracle_flag = sd['auth_name']
- if postgis or (oracle and oracle_flag):
- self.assertEqual(True, srs.auth_name.startswith(auth_name))
-
- self.assertEqual(sd['auth_srid'], srs.auth_srid)
-
- # No proj.4 and different srtext on oracle backends :(
- if postgis:
- if connection.ops.spatial_version >= (1, 4, 0):
- srtext = sd['srtext14']
- else:
- srtext = sd['srtext']
- self.assertEqual(srtext, srs.wkt)
- self.assertEqual(sd['proj4'], srs.proj4text)
-
- @no_mysql
- def test02_osr(self):
- "Testing getting OSR objects from SpatialRefSys model objects."
- for sd in test_srs:
- sr = SpatialRefSys.objects.get(srid=sd['srid'])
- self.assertEqual(True, sr.spheroid.startswith(sd['spheroid']))
- self.assertEqual(sd['geographic'], sr.geographic)
- self.assertEqual(sd['projected'], sr.projected)
-
- if not (spatialite and not sd['spatialite']):
- # Can't get 'NAD83 / Texas South Central' from PROJ.4 string
- # on SpatiaLite
- self.assertEqual(True, sr.name.startswith(sd['name']))
-
- # Testing the SpatialReference object directly.
- if postgis or spatialite:
- srs = sr.srs
- self.assertEqual(sd['proj4'], srs.proj4)
- # No `srtext` field in the `spatial_ref_sys` table in SpatiaLite
- if not spatialite:
- if connection.ops.spatial_version >= (1, 4, 0):
- srtext = sd['srtext14']
- else:
- srtext = sd['srtext']
- self.assertEqual(srtext, srs.wkt)
-
- @no_mysql
- def test03_ellipsoid(self):
- "Testing the ellipsoid property."
- for sd in test_srs:
- # Getting the ellipsoid and precision parameters.
- ellps1 = sd['ellipsoid']
- prec = sd['eprec']
-
- # Getting our spatial reference and its ellipsoid
- srs = SpatialRefSys.objects.get(srid=sd['srid'])
- ellps2 = srs.ellipsoid
-
- for i in range(3):
- param1 = ellps1[i]
- param2 = ellps2[i]
- self.assertAlmostEqual(ellps1[i], ellps2[i], prec[i])
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(SpatialRefSysTest))
- return s
-
-def run(verbosity=2):
- unittest.TextTestRunner(verbosity=verbosity).run(suite())
diff --git a/parts/django/django/contrib/gis/tests/utils.py b/parts/django/django/contrib/gis/tests/utils.py
deleted file mode 100644
index b758fd0..0000000
--- a/parts/django/django/contrib/gis/tests/utils.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from django.conf import settings
-from django.db import DEFAULT_DB_ALIAS
-
-# function that will pass a test.
-def pass_test(*args): return
-
-def no_backend(test_func, backend):
- "Use this decorator to disable test on specified backend."
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'].rsplit('.')[-1] == backend:
- return pass_test
- else:
- return test_func
-
-# Decorators to disable entire test functions for specific
-# spatial backends.
-def no_oracle(func): return no_backend(func, 'oracle')
-def no_postgis(func): return no_backend(func, 'postgis')
-def no_mysql(func): return no_backend(func, 'mysql')
-def no_spatialite(func): return no_backend(func, 'spatialite')
-
-# Shortcut booleans to omit only portions of tests.
-_default_db = settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'].rsplit('.')[-1]
-oracle = _default_db == 'oracle'
-postgis = _default_db == 'postgis'
-mysql = _default_db == 'mysql'
-spatialite = _default_db == 'spatialite'
diff --git a/parts/django/django/contrib/gis/utils/__init__.py b/parts/django/django/contrib/gis/utils/__init__.py
deleted file mode 100644
index 1cff4d9..0000000
--- a/parts/django/django/contrib/gis/utils/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
- This module contains useful utilities for GeoDjango.
-"""
-# Importing the utilities that depend on GDAL, if available.
-from django.contrib.gis.gdal import HAS_GDAL
-if HAS_GDAL:
- from django.contrib.gis.utils.ogrinfo import ogrinfo, sample
- from django.contrib.gis.utils.ogrinspect import mapping, ogrinspect
- from django.contrib.gis.utils.srs import add_postgis_srs, add_srs_entry
- try:
- # LayerMapping requires DJANGO_SETTINGS_MODULE to be set,
- # so this needs to be in try/except.
- from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError
- except:
- pass
-
-# Attempting to import the GeoIP class.
-try:
- from django.contrib.gis.utils.geoip import GeoIP, GeoIPException
- HAS_GEOIP = True
-except:
- HAS_GEOIP = False
-
-from django.contrib.gis.utils.wkt import precision_wkt
-
diff --git a/parts/django/django/contrib/gis/utils/geoip.py b/parts/django/django/contrib/gis/utils/geoip.py
deleted file mode 100644
index eedaef9..0000000
--- a/parts/django/django/contrib/gis/utils/geoip.py
+++ /dev/null
@@ -1,361 +0,0 @@
-"""
- This module houses the GeoIP object, a ctypes wrapper for the MaxMind GeoIP(R)
- C API (http://www.maxmind.com/app/c). This is an alternative to the GPL
- licensed Python GeoIP interface provided by MaxMind.
-
- GeoIP(R) is a registered trademark of MaxMind, LLC of Boston, Massachusetts.
-
- For IP-based geolocation, this module requires the GeoLite Country and City
- datasets, in binary format (CSV will not work!). The datasets may be
- downloaded from MaxMind at http://www.maxmind.com/download/geoip/database/.
- Grab GeoIP.dat.gz and GeoLiteCity.dat.gz, and unzip them in the directory
- corresponding to settings.GEOIP_PATH. See the GeoIP docstring and examples
- below for more details.
-
- TODO: Verify compatibility with Windows.
-
- Example:
-
- >>> from django.contrib.gis.utils import GeoIP
- >>> g = GeoIP()
- >>> g.country('google.com')
- {'country_code': 'US', 'country_name': 'United States'}
- >>> g.city('72.14.207.99')
- {'area_code': 650,
- 'city': 'Mountain View',
- 'country_code': 'US',
- 'country_code3': 'USA',
- 'country_name': 'United States',
- 'dma_code': 807,
- 'latitude': 37.419200897216797,
- 'longitude': -122.05740356445312,
- 'postal_code': '94043',
- 'region': 'CA'}
- >>> g.lat_lon('salon.com')
- (37.789798736572266, -122.39420318603516)
- >>> g.lon_lat('uh.edu')
- (-95.415199279785156, 29.77549934387207)
- >>> g.geos('24.124.1.80').wkt
- 'POINT (-95.2087020874023438 39.0392990112304688)'
-"""
-import os, re
-from ctypes import c_char_p, c_float, c_int, Structure, CDLL, POINTER
-from ctypes.util import find_library
-from django.conf import settings
-if not settings.configured: settings.configure()
-
-# Creating the settings dictionary with any settings, if needed.
-GEOIP_SETTINGS = dict((key, getattr(settings, key))
- for key in ('GEOIP_PATH', 'GEOIP_LIBRARY_PATH', 'GEOIP_COUNTRY', 'GEOIP_CITY')
- if hasattr(settings, key))
-lib_path = GEOIP_SETTINGS.get('GEOIP_LIBRARY_PATH', None)
-
-# GeoIP Exception class.
-class GeoIPException(Exception): pass
-
-# The shared library for the GeoIP C API. May be downloaded
-# from http://www.maxmind.com/download/geoip/api/c/
-if lib_path:
- lib_name = None
-else:
- # TODO: Is this really the library name for Windows?
- lib_name = 'GeoIP'
-
-# Getting the path to the GeoIP library.
-if lib_name: lib_path = find_library(lib_name)
-if lib_path is None: raise GeoIPException('Could not find the GeoIP library (tried "%s"). '
- 'Try setting GEOIP_LIBRARY_PATH in your settings.' % lib_name)
-lgeoip = CDLL(lib_path)
-
-# Regular expressions for recognizing IP addresses and the GeoIP
-# free database editions.
-ipregex = re.compile(r'^(?P<w>\d\d?\d?)\.(?P<x>\d\d?\d?)\.(?P<y>\d\d?\d?)\.(?P<z>\d\d?\d?)$')
-free_regex = re.compile(r'^GEO-\d{3}FREE')
-lite_regex = re.compile(r'^GEO-\d{3}LITE')
-
-#### GeoIP C Structure definitions ####
-class GeoIPRecord(Structure):
- _fields_ = [('country_code', c_char_p),
- ('country_code3', c_char_p),
- ('country_name', c_char_p),
- ('region', c_char_p),
- ('city', c_char_p),
- ('postal_code', c_char_p),
- ('latitude', c_float),
- ('longitude', c_float),
- # TODO: In 1.4.6 this changed from `int dma_code;` to
- # `union {int metro_code; int dma_code;};`. Change
- # to a `ctypes.Union` in to accomodate in future when
- # pre-1.4.6 versions are no longer distributed.
- ('dma_code', c_int),
- ('area_code', c_int),
- # TODO: The following structure fields were added in 1.4.3 --
- # uncomment these fields when sure previous versions are no
- # longer distributed by package maintainers.
- #('charset', c_int),
- #('continent_code', c_char_p),
- ]
-class GeoIPTag(Structure): pass
-
-#### ctypes function prototypes ####
-RECTYPE = POINTER(GeoIPRecord)
-DBTYPE = POINTER(GeoIPTag)
-
-# For retrieving records by name or address.
-def record_output(func):
- func.restype = RECTYPE
- return func
-rec_by_addr = record_output(lgeoip.GeoIP_record_by_addr)
-rec_by_name = record_output(lgeoip.GeoIP_record_by_name)
-
-# For opening & closing GeoIP database files.
-geoip_open = lgeoip.GeoIP_open
-geoip_open.restype = DBTYPE
-geoip_close = lgeoip.GeoIP_delete
-geoip_close.argtypes = [DBTYPE]
-geoip_close.restype = None
-
-# String output routines.
-def string_output(func):
- func.restype = c_char_p
- return func
-geoip_dbinfo = string_output(lgeoip.GeoIP_database_info)
-cntry_code_by_addr = string_output(lgeoip.GeoIP_country_code_by_addr)
-cntry_code_by_name = string_output(lgeoip.GeoIP_country_code_by_name)
-cntry_name_by_addr = string_output(lgeoip.GeoIP_country_name_by_addr)
-cntry_name_by_name = string_output(lgeoip.GeoIP_country_name_by_name)
-
-#### GeoIP class ####
-class GeoIP(object):
- # The flags for GeoIP memory caching.
- # GEOIP_STANDARD - read database from filesystem, uses least memory.
- #
- # GEOIP_MEMORY_CACHE - load database into memory, faster performance
- # but uses more memory
- #
- # GEOIP_CHECK_CACHE - check for updated database. If database has been updated,
- # reload filehandle and/or memory cache.
- #
- # GEOIP_INDEX_CACHE - just cache
- # the most frequently accessed index portion of the database, resulting
- # in faster lookups than GEOIP_STANDARD, but less memory usage than
- # GEOIP_MEMORY_CACHE - useful for larger databases such as
- # GeoIP Organization and GeoIP City. Note, for GeoIP Country, Region
- # and Netspeed databases, GEOIP_INDEX_CACHE is equivalent to GEOIP_MEMORY_CACHE
- #
- GEOIP_STANDARD = 0
- GEOIP_MEMORY_CACHE = 1
- GEOIP_CHECK_CACHE = 2
- GEOIP_INDEX_CACHE = 4
- cache_options = dict((opt, None) for opt in (0, 1, 2, 4))
- _city_file = ''
- _country_file = ''
-
- # Initially, pointers to GeoIP file references are NULL.
- _city = None
- _country = None
-
- def __init__(self, path=None, cache=0, country=None, city=None):
- """
- Initializes the GeoIP object, no parameters are required to use default
- settings. Keyword arguments may be passed in to customize the locations
- of the GeoIP data sets.
-
- * path: Base directory to where GeoIP data is located or the full path
- to where the city or country data files (*.dat) are located.
- Assumes that both the city and country data sets are located in
- this directory; overrides the GEOIP_PATH settings attribute.
-
- * cache: The cache settings when opening up the GeoIP datasets,
- and may be an integer in (0, 1, 2, 4) corresponding to
- the GEOIP_STANDARD, GEOIP_MEMORY_CACHE, GEOIP_CHECK_CACHE,
- and GEOIP_INDEX_CACHE `GeoIPOptions` C API settings,
- respectively. Defaults to 0, meaning that the data is read
- from the disk.
-
- * country: The name of the GeoIP country data file. Defaults to
- 'GeoIP.dat'; overrides the GEOIP_COUNTRY settings attribute.
-
- * city: The name of the GeoIP city data file. Defaults to
- 'GeoLiteCity.dat'; overrides the GEOIP_CITY settings attribute.
- """
- # Checking the given cache option.
- if cache in self.cache_options:
- self._cache = self.cache_options[cache]
- else:
- raise GeoIPException('Invalid caching option: %s' % cache)
-
- # Getting the GeoIP data path.
- if not path:
- path = GEOIP_SETTINGS.get('GEOIP_PATH', None)
- if not path: raise GeoIPException('GeoIP path must be provided via parameter or the GEOIP_PATH setting.')
- if not isinstance(path, basestring):
- raise TypeError('Invalid path type: %s' % type(path).__name__)
-
- if os.path.isdir(path):
- # Constructing the GeoIP database filenames using the settings
- # dictionary. If the database files for the GeoLite country
- # and/or city datasets exist, then try and open them.
- country_db = os.path.join(path, country or GEOIP_SETTINGS.get('GEOIP_COUNTRY', 'GeoIP.dat'))
- if os.path.isfile(country_db):
- self._country = geoip_open(country_db, cache)
- self._country_file = country_db
-
- city_db = os.path.join(path, city or GEOIP_SETTINGS.get('GEOIP_CITY', 'GeoLiteCity.dat'))
- if os.path.isfile(city_db):
- self._city = geoip_open(city_db, cache)
- self._city_file = city_db
- elif os.path.isfile(path):
- # Otherwise, some detective work will be needed to figure
- # out whether the given database path is for the GeoIP country
- # or city databases.
- ptr = geoip_open(path, cache)
- info = geoip_dbinfo(ptr)
- if lite_regex.match(info):
- # GeoLite City database detected.
- self._city = ptr
- self._city_file = path
- elif free_regex.match(info):
- # GeoIP Country database detected.
- self._country = ptr
- self._country_file = path
- else:
- raise GeoIPException('Unable to recognize database edition: %s' % info)
- else:
- raise GeoIPException('GeoIP path must be a valid file or directory.')
-
- def __del__(self):
- # Cleaning any GeoIP file handles lying around.
- if self._country: geoip_close(self._country)
- if self._city: geoip_close(self._city)
-
- def _check_query(self, query, country=False, city=False, city_or_country=False):
- "Helper routine for checking the query and database availability."
- # Making sure a string was passed in for the query.
- if not isinstance(query, basestring):
- raise TypeError('GeoIP query must be a string, not type %s' % type(query).__name__)
-
- # Extra checks for the existence of country and city databases.
- if city_or_country and not (self._country or self._city):
- raise GeoIPException('Invalid GeoIP country and city data files.')
- elif country and not self._country:
- raise GeoIPException('Invalid GeoIP country data file: %s' % self._country_file)
- elif city and not self._city:
- raise GeoIPException('Invalid GeoIP city data file: %s' % self._city_file)
-
- def city(self, query):
- """
- Returns a dictionary of city information for the given IP address or
- Fully Qualified Domain Name (FQDN). Some information in the dictionary
- may be undefined (None).
- """
- self._check_query(query, city=True)
- if ipregex.match(query):
- # If an IP address was passed in
- ptr = rec_by_addr(self._city, c_char_p(query))
- else:
- # If a FQDN was passed in.
- ptr = rec_by_name(self._city, c_char_p(query))
-
- # Checking the pointer to the C structure, if valid pull out elements
- # into a dicionary and return.
- if bool(ptr):
- record = ptr.contents
- return dict((tup[0], getattr(record, tup[0])) for tup in record._fields_)
- else:
- return None
-
- def country_code(self, query):
- "Returns the country code for the given IP Address or FQDN."
- self._check_query(query, city_or_country=True)
- if self._country:
- if ipregex.match(query): return cntry_code_by_addr(self._country, query)
- else: return cntry_code_by_name(self._country, query)
- else:
- return self.city(query)['country_code']
-
- def country_name(self, query):
- "Returns the country name for the given IP Address or FQDN."
- self._check_query(query, city_or_country=True)
- if self._country:
- if ipregex.match(query): return cntry_name_by_addr(self._country, query)
- else: return cntry_name_by_name(self._country, query)
- else:
- return self.city(query)['country_name']
-
- def country(self, query):
- """
- Returns a dictonary with with the country code and name when given an
- IP address or a Fully Qualified Domain Name (FQDN). For example, both
- '24.124.1.80' and 'djangoproject.com' are valid parameters.
- """
- # Returning the country code and name
- return {'country_code' : self.country_code(query),
- 'country_name' : self.country_name(query),
- }
-
- #### Coordinate retrieval routines ####
- def coords(self, query, ordering=('longitude', 'latitude')):
- cdict = self.city(query)
- if cdict is None: return None
- else: return tuple(cdict[o] for o in ordering)
-
- def lon_lat(self, query):
- "Returns a tuple of the (longitude, latitude) for the given query."
- return self.coords(query)
-
- def lat_lon(self, query):
- "Returns a tuple of the (latitude, longitude) for the given query."
- return self.coords(query, ('latitude', 'longitude'))
-
- def geos(self, query):
- "Returns a GEOS Point object for the given query."
- ll = self.lon_lat(query)
- if ll:
- from django.contrib.gis.geos import Point
- return Point(ll, srid=4326)
- else:
- return None
-
- #### GeoIP Database Information Routines ####
- def country_info(self):
- "Returns information about the GeoIP country database."
- if self._country is None:
- ci = 'No GeoIP Country data in "%s"' % self._country_file
- else:
- ci = geoip_dbinfo(self._country)
- return ci
- country_info = property(country_info)
-
- def city_info(self):
- "Retuns information about the GeoIP city database."
- if self._city is None:
- ci = 'No GeoIP City data in "%s"' % self._city_file
- else:
- ci = geoip_dbinfo(self._city)
- return ci
- city_info = property(city_info)
-
- def info(self):
- "Returns information about all GeoIP databases in use."
- return 'Country:\n\t%s\nCity:\n\t%s' % (self.country_info, self.city_info)
- info = property(info)
-
- #### Methods for compatibility w/the GeoIP-Python API. ####
- @classmethod
- def open(cls, full_path, cache):
- return GeoIP(full_path, cache)
-
- def _rec_by_arg(self, arg):
- if self._city:
- return self.city(arg)
- else:
- return self.country(arg)
- region_by_addr = city
- region_by_name = city
- record_by_addr = _rec_by_arg
- record_by_name = _rec_by_arg
- country_code_by_addr = country_code
- country_code_by_name = country_code
- country_name_by_addr = country_name
- country_name_by_name = country_name
diff --git a/parts/django/django/contrib/gis/utils/layermapping.py b/parts/django/django/contrib/gis/utils/layermapping.py
deleted file mode 100644
index cec1989..0000000
--- a/parts/django/django/contrib/gis/utils/layermapping.py
+++ /dev/null
@@ -1,602 +0,0 @@
-# LayerMapping -- A Django Model/OGR Layer Mapping Utility
-"""
- The LayerMapping class provides a way to map the contents of OGR
- vector files (e.g. SHP files) to Geographic-enabled Django models.
-
- For more information, please consult the GeoDjango documentation:
- http://geodjango.org/docs/layermapping.html
-"""
-import sys
-from datetime import date, datetime
-from decimal import Decimal
-from django.core.exceptions import ObjectDoesNotExist
-from django.db import connections, DEFAULT_DB_ALIAS
-from django.contrib.gis.db.models import GeometryField
-from django.contrib.gis.gdal import CoordTransform, DataSource, \
- OGRException, OGRGeometry, OGRGeomType, SpatialReference
-from django.contrib.gis.gdal.field import \
- OFTDate, OFTDateTime, OFTInteger, OFTReal, OFTString, OFTTime
-from django.db import models, transaction
-from django.contrib.localflavor.us.models import USStateField
-
-# LayerMapping exceptions.
-class LayerMapError(Exception): pass
-class InvalidString(LayerMapError): pass
-class InvalidDecimal(LayerMapError): pass
-class InvalidInteger(LayerMapError): pass
-class MissingForeignKey(LayerMapError): pass
-
-class LayerMapping(object):
- "A class that maps OGR Layers to GeoDjango Models."
-
- # Acceptable 'base' types for a multi-geometry type.
- MULTI_TYPES = {1 : OGRGeomType('MultiPoint'),
- 2 : OGRGeomType('MultiLineString'),
- 3 : OGRGeomType('MultiPolygon'),
- OGRGeomType('Point25D').num : OGRGeomType('MultiPoint25D'),
- OGRGeomType('LineString25D').num : OGRGeomType('MultiLineString25D'),
- OGRGeomType('Polygon25D').num : OGRGeomType('MultiPolygon25D'),
- }
-
- # Acceptable Django field types and corresponding acceptable OGR
- # counterparts.
- FIELD_TYPES = {
- models.AutoField : OFTInteger,
- models.IntegerField : (OFTInteger, OFTReal, OFTString),
- models.FloatField : (OFTInteger, OFTReal),
- models.DateField : OFTDate,
- models.DateTimeField : OFTDateTime,
- models.EmailField : OFTString,
- models.TimeField : OFTTime,
- models.DecimalField : (OFTInteger, OFTReal),
- models.CharField : OFTString,
- models.SlugField : OFTString,
- models.TextField : OFTString,
- models.URLField : OFTString,
- USStateField : OFTString,
- models.XMLField : OFTString,
- models.SmallIntegerField : (OFTInteger, OFTReal, OFTString),
- models.PositiveSmallIntegerField : (OFTInteger, OFTReal, OFTString),
- }
-
- # The acceptable transaction modes.
- TRANSACTION_MODES = {'autocommit' : transaction.autocommit,
- 'commit_on_success' : transaction.commit_on_success,
- }
-
- def __init__(self, model, data, mapping, layer=0,
- source_srs=None, encoding=None,
- transaction_mode='commit_on_success',
- transform=True, unique=None, using=DEFAULT_DB_ALIAS):
- """
- A LayerMapping object is initialized using the given Model (not an instance),
- a DataSource (or string path to an OGR-supported data file), and a mapping
- dictionary. See the module level docstring for more details and keyword
- argument usage.
- """
- # Getting the DataSource and the associated Layer.
- if isinstance(data, basestring):
- self.ds = DataSource(data)
- else:
- self.ds = data
- self.layer = self.ds[layer]
-
- self.using = using
- self.spatial_backend = connections[using].ops
-
- # Setting the mapping & model attributes.
- self.mapping = mapping
- self.model = model
-
- # Checking the layer -- intitialization of the object will fail if
- # things don't check out before hand.
- self.check_layer()
-
- # Getting the geometry column associated with the model (an
- # exception will be raised if there is no geometry column).
- if self.spatial_backend.mysql:
- transform = False
- else:
- self.geo_field = self.geometry_field()
-
- # Checking the source spatial reference system, and getting
- # the coordinate transformation object (unless the `transform`
- # keyword is set to False)
- if transform:
- self.source_srs = self.check_srs(source_srs)
- self.transform = self.coord_transform()
- else:
- self.transform = transform
-
- # Setting the encoding for OFTString fields, if specified.
- if encoding:
- # Making sure the encoding exists, if not a LookupError
- # exception will be thrown.
- from codecs import lookup
- lookup(encoding)
- self.encoding = encoding
- else:
- self.encoding = None
-
- if unique:
- self.check_unique(unique)
- transaction_mode = 'autocommit' # Has to be set to autocommit.
- self.unique = unique
- else:
- self.unique = None
-
- # Setting the transaction decorator with the function in the
- # transaction modes dictionary.
- if transaction_mode in self.TRANSACTION_MODES:
- self.transaction_decorator = self.TRANSACTION_MODES[transaction_mode]
- self.transaction_mode = transaction_mode
- else:
- raise LayerMapError('Unrecognized transaction mode: %s' % transaction_mode)
-
- if using is None:
- pass
-
- #### Checking routines used during initialization ####
- def check_fid_range(self, fid_range):
- "This checks the `fid_range` keyword."
- if fid_range:
- if isinstance(fid_range, (tuple, list)):
- return slice(*fid_range)
- elif isinstance(fid_range, slice):
- return fid_range
- else:
- raise TypeError
- else:
- return None
-
- def check_layer(self):
- """
- This checks the Layer metadata, and ensures that it is compatible
- with the mapping information and model. Unlike previous revisions,
- there is no need to increment through each feature in the Layer.
- """
- # The geometry field of the model is set here.
- # TODO: Support more than one geometry field / model. However, this
- # depends on the GDAL Driver in use.
- self.geom_field = False
- self.fields = {}
-
- # Getting lists of the field names and the field types available in
- # the OGR Layer.
- ogr_fields = self.layer.fields
- ogr_field_types = self.layer.field_types
-
- # Function for determining if the OGR mapping field is in the Layer.
- def check_ogr_fld(ogr_map_fld):
- try:
- idx = ogr_fields.index(ogr_map_fld)
- except ValueError:
- raise LayerMapError('Given mapping OGR field "%s" not found in OGR Layer.' % ogr_map_fld)
- return idx
-
- # No need to increment through each feature in the model, simply check
- # the Layer metadata against what was given in the mapping dictionary.
- for field_name, ogr_name in self.mapping.items():
- # Ensuring that a corresponding field exists in the model
- # for the given field name in the mapping.
- try:
- model_field = self.model._meta.get_field(field_name)
- except models.fields.FieldDoesNotExist:
- raise LayerMapError('Given mapping field "%s" not in given Model fields.' % field_name)
-
- # Getting the string name for the Django field class (e.g., 'PointField').
- fld_name = model_field.__class__.__name__
-
- if isinstance(model_field, GeometryField):
- if self.geom_field:
- raise LayerMapError('LayerMapping does not support more than one GeometryField per model.')
-
- # Getting the coordinate dimension of the geometry field.
- coord_dim = model_field.dim
-
- try:
- if coord_dim == 3:
- gtype = OGRGeomType(ogr_name + '25D')
- else:
- gtype = OGRGeomType(ogr_name)
- except OGRException:
- raise LayerMapError('Invalid mapping for GeometryField "%s".' % field_name)
-
- # Making sure that the OGR Layer's Geometry is compatible.
- ltype = self.layer.geom_type
- if not (ltype.name.startswith(gtype.name) or self.make_multi(ltype, model_field)):
- raise LayerMapError('Invalid mapping geometry; model has %s%s, '
- 'layer geometry type is %s.' %
- (fld_name, (coord_dim == 3 and '(dim=3)') or '', ltype))
-
- # Setting the `geom_field` attribute w/the name of the model field
- # that is a Geometry. Also setting the coordinate dimension
- # attribute.
- self.geom_field = field_name
- self.coord_dim = coord_dim
- fields_val = model_field
- elif isinstance(model_field, models.ForeignKey):
- if isinstance(ogr_name, dict):
- # Is every given related model mapping field in the Layer?
- rel_model = model_field.rel.to
- for rel_name, ogr_field in ogr_name.items():
- idx = check_ogr_fld(ogr_field)
- try:
- rel_field = rel_model._meta.get_field(rel_name)
- except models.fields.FieldDoesNotExist:
- raise LayerMapError('ForeignKey mapping field "%s" not in %s fields.' %
- (rel_name, rel_model.__class__.__name__))
- fields_val = rel_model
- else:
- raise TypeError('ForeignKey mapping must be of dictionary type.')
- else:
- # Is the model field type supported by LayerMapping?
- if not model_field.__class__ in self.FIELD_TYPES:
- raise LayerMapError('Django field type "%s" has no OGR mapping (yet).' % fld_name)
-
- # Is the OGR field in the Layer?
- idx = check_ogr_fld(ogr_name)
- ogr_field = ogr_field_types[idx]
-
- # Can the OGR field type be mapped to the Django field type?
- if not issubclass(ogr_field, self.FIELD_TYPES[model_field.__class__]):
- raise LayerMapError('OGR field "%s" (of type %s) cannot be mapped to Django %s.' %
- (ogr_field, ogr_field.__name__, fld_name))
- fields_val = model_field
-
- self.fields[field_name] = fields_val
-
- def check_srs(self, source_srs):
- "Checks the compatibility of the given spatial reference object."
-
- if isinstance(source_srs, SpatialReference):
- sr = source_srs
- elif isinstance(source_srs, self.spatial_backend.spatial_ref_sys()):
- sr = source_srs.srs
- elif isinstance(source_srs, (int, basestring)):
- sr = SpatialReference(source_srs)
- else:
- # Otherwise just pulling the SpatialReference from the layer
- sr = self.layer.srs
-
- if not sr:
- raise LayerMapError('No source reference system defined.')
- else:
- return sr
-
- def check_unique(self, unique):
- "Checks the `unique` keyword parameter -- may be a sequence or string."
- if isinstance(unique, (list, tuple)):
- # List of fields to determine uniqueness with
- for attr in unique:
- if not attr in self.mapping: raise ValueError
- elif isinstance(unique, basestring):
- # Only a single field passed in.
- if unique not in self.mapping: raise ValueError
- else:
- raise TypeError('Unique keyword argument must be set with a tuple, list, or string.')
-
- #### Keyword argument retrieval routines ####
- def feature_kwargs(self, feat):
- """
- Given an OGR Feature, this will return a dictionary of keyword arguments
- for constructing the mapped model.
- """
- # The keyword arguments for model construction.
- kwargs = {}
-
- # Incrementing through each model field and OGR field in the
- # dictionary mapping.
- for field_name, ogr_name in self.mapping.items():
- model_field = self.fields[field_name]
-
- if isinstance(model_field, GeometryField):
- # Verify OGR geometry.
- val = self.verify_geom(feat.geom, model_field)
- elif isinstance(model_field, models.base.ModelBase):
- # The related _model_, not a field was passed in -- indicating
- # another mapping for the related Model.
- val = self.verify_fk(feat, model_field, ogr_name)
- else:
- # Otherwise, verify OGR Field type.
- val = self.verify_ogr_field(feat[ogr_name], model_field)
-
- # Setting the keyword arguments for the field name with the
- # value obtained above.
- kwargs[field_name] = val
-
- return kwargs
-
- def unique_kwargs(self, kwargs):
- """
- Given the feature keyword arguments (from `feature_kwargs`) this routine
- will construct and return the uniqueness keyword arguments -- a subset
- of the feature kwargs.
- """
- if isinstance(self.unique, basestring):
- return {self.unique : kwargs[self.unique]}
- else:
- return dict((fld, kwargs[fld]) for fld in self.unique)
-
- #### Verification routines used in constructing model keyword arguments. ####
- def verify_ogr_field(self, ogr_field, model_field):
- """
- Verifies if the OGR Field contents are acceptable to the Django
- model field. If they are, the verified value is returned,
- otherwise the proper exception is raised.
- """
- if (isinstance(ogr_field, OFTString) and
- isinstance(model_field, (models.CharField, models.TextField))):
- if self.encoding:
- # The encoding for OGR data sources may be specified here
- # (e.g., 'cp437' for Census Bureau boundary files).
- val = unicode(ogr_field.value, self.encoding)
- else:
- val = ogr_field.value
- if len(val) > model_field.max_length:
- raise InvalidString('%s model field maximum string length is %s, given %s characters.' %
- (model_field.name, model_field.max_length, len(val)))
- elif isinstance(ogr_field, OFTReal) and isinstance(model_field, models.DecimalField):
- try:
- # Creating an instance of the Decimal value to use.
- d = Decimal(str(ogr_field.value))
- except:
- raise InvalidDecimal('Could not construct decimal from: %s' % ogr_field.value)
-
- # Getting the decimal value as a tuple.
- dtup = d.as_tuple()
- digits = dtup[1]
- d_idx = dtup[2] # index where the decimal is
-
- # Maximum amount of precision, or digits to the left of the decimal.
- max_prec = model_field.max_digits - model_field.decimal_places
-
- # Getting the digits to the left of the decimal place for the
- # given decimal.
- if d_idx < 0:
- n_prec = len(digits[:d_idx])
- else:
- n_prec = len(digits) + d_idx
-
- # If we have more than the maximum digits allowed, then throw an
- # InvalidDecimal exception.
- if n_prec > max_prec:
- raise InvalidDecimal('A DecimalField with max_digits %d, decimal_places %d must round to an absolute value less than 10^%d.' %
- (model_field.max_digits, model_field.decimal_places, max_prec))
- val = d
- elif isinstance(ogr_field, (OFTReal, OFTString)) and isinstance(model_field, models.IntegerField):
- # Attempt to convert any OFTReal and OFTString value to an OFTInteger.
- try:
- val = int(ogr_field.value)
- except:
- raise InvalidInteger('Could not construct integer from: %s' % ogr_field.value)
- else:
- val = ogr_field.value
- return val
-
- def verify_fk(self, feat, rel_model, rel_mapping):
- """
- Given an OGR Feature, the related model and its dictionary mapping,
- this routine will retrieve the related model for the ForeignKey
- mapping.
- """
- # TODO: It is expensive to retrieve a model for every record --
- # explore if an efficient mechanism exists for caching related
- # ForeignKey models.
-
- # Constructing and verifying the related model keyword arguments.
- fk_kwargs = {}
- for field_name, ogr_name in rel_mapping.items():
- fk_kwargs[field_name] = self.verify_ogr_field(feat[ogr_name], rel_model._meta.get_field(field_name))
-
- # Attempting to retrieve and return the related model.
- try:
- return rel_model.objects.get(**fk_kwargs)
- except ObjectDoesNotExist:
- raise MissingForeignKey('No ForeignKey %s model found with keyword arguments: %s' % (rel_model.__name__, fk_kwargs))
-
- def verify_geom(self, geom, model_field):
- """
- Verifies the geometry -- will construct and return a GeometryCollection
- if necessary (for example if the model field is MultiPolygonField while
- the mapped shapefile only contains Polygons).
- """
- # Downgrade a 3D geom to a 2D one, if necessary.
- if self.coord_dim != geom.coord_dim:
- geom.coord_dim = self.coord_dim
-
- if self.make_multi(geom.geom_type, model_field):
- # Constructing a multi-geometry type to contain the single geometry
- multi_type = self.MULTI_TYPES[geom.geom_type.num]
- g = OGRGeometry(multi_type)
- g.add(geom)
- else:
- g = geom
-
- # Transforming the geometry with our Coordinate Transformation object,
- # but only if the class variable `transform` is set w/a CoordTransform
- # object.
- if self.transform: g.transform(self.transform)
-
- # Returning the WKT of the geometry.
- return g.wkt
-
- #### Other model methods ####
- def coord_transform(self):
- "Returns the coordinate transformation object."
- SpatialRefSys = self.spatial_backend.spatial_ref_sys()
- try:
- # Getting the target spatial reference system
- target_srs = SpatialRefSys.objects.get(srid=self.geo_field.srid).srs
-
- # Creating the CoordTransform object
- return CoordTransform(self.source_srs, target_srs)
- except Exception, msg:
- raise LayerMapError('Could not translate between the data source and model geometry: %s' % msg)
-
- def geometry_field(self):
- "Returns the GeometryField instance associated with the geographic column."
- # Use the `get_field_by_name` on the model's options so that we
- # get the correct field instance if there's model inheritance.
- opts = self.model._meta
- fld, model, direct, m2m = opts.get_field_by_name(self.geom_field)
- return fld
-
- def make_multi(self, geom_type, model_field):
- """
- Given the OGRGeomType for a geometry and its associated GeometryField,
- determine whether the geometry should be turned into a GeometryCollection.
- """
- return (geom_type.num in self.MULTI_TYPES and
- model_field.__class__.__name__ == 'Multi%s' % geom_type.django)
-
- def save(self, verbose=False, fid_range=False, step=False,
- progress=False, silent=False, stream=sys.stdout, strict=False):
- """
- Saves the contents from the OGR DataSource Layer into the database
- according to the mapping dictionary given at initialization.
-
- Keyword Parameters:
- verbose:
- If set, information will be printed subsequent to each model save
- executed on the database.
-
- fid_range:
- May be set with a slice or tuple of (begin, end) feature ID's to map
- from the data source. In other words, this keyword enables the user
- to selectively import a subset range of features in the geographic
- data source.
-
- step:
- If set with an integer, transactions will occur at every step
- interval. For example, if step=1000, a commit would occur after
- the 1,000th feature, the 2,000th feature etc.
-
- progress:
- When this keyword is set, status information will be printed giving
- the number of features processed and sucessfully saved. By default,
- progress information will pe printed every 1000 features processed,
- however, this default may be overridden by setting this keyword with an
- integer for the desired interval.
-
- stream:
- Status information will be written to this file handle. Defaults to
- using `sys.stdout`, but any object with a `write` method is supported.
-
- silent:
- By default, non-fatal error notifications are printed to stdout, but
- this keyword may be set to disable these notifications.
-
- strict:
- Execution of the model mapping will cease upon the first error
- encountered. The default behavior is to attempt to continue.
- """
- # Getting the default Feature ID range.
- default_range = self.check_fid_range(fid_range)
-
- # Setting the progress interval, if requested.
- if progress:
- if progress is True or not isinstance(progress, int):
- progress_interval = 1000
- else:
- progress_interval = progress
-
- # Defining the 'real' save method, utilizing the transaction
- # decorator created during initialization.
- @self.transaction_decorator
- def _save(feat_range=default_range, num_feat=0, num_saved=0):
- if feat_range:
- layer_iter = self.layer[feat_range]
- else:
- layer_iter = self.layer
-
- for feat in layer_iter:
- num_feat += 1
- # Getting the keyword arguments
- try:
- kwargs = self.feature_kwargs(feat)
- except LayerMapError, msg:
- # Something borked the validation
- if strict: raise
- elif not silent:
- stream.write('Ignoring Feature ID %s because: %s\n' % (feat.fid, msg))
- else:
- # Constructing the model using the keyword args
- is_update = False
- if self.unique:
- # If we want unique models on a particular field, handle the
- # geometry appropriately.
- try:
- # Getting the keyword arguments and retrieving
- # the unique model.
- u_kwargs = self.unique_kwargs(kwargs)
- m = self.model.objects.using(self.using).get(**u_kwargs)
- is_update = True
-
- # Getting the geometry (in OGR form), creating
- # one from the kwargs WKT, adding in additional
- # geometries, and update the attribute with the
- # just-updated geometry WKT.
- geom = getattr(m, self.geom_field).ogr
- new = OGRGeometry(kwargs[self.geom_field])
- for g in new: geom.add(g)
- setattr(m, self.geom_field, geom.wkt)
- except ObjectDoesNotExist:
- # No unique model exists yet, create.
- m = self.model(**kwargs)
- else:
- m = self.model(**kwargs)
-
- try:
- # Attempting to save.
- m.save(using=self.using)
- num_saved += 1
- if verbose: stream.write('%s: %s\n' % (is_update and 'Updated' or 'Saved', m))
- except SystemExit:
- raise
- except Exception, msg:
- if self.transaction_mode == 'autocommit':
- # Rolling back the transaction so that other model saves
- # will work.
- transaction.rollback_unless_managed()
- if strict:
- # Bailing out if the `strict` keyword is set.
- if not silent:
- stream.write('Failed to save the feature (id: %s) into the model with the keyword arguments:\n' % feat.fid)
- stream.write('%s\n' % kwargs)
- raise
- elif not silent:
- stream.write('Failed to save %s:\n %s\nContinuing\n' % (kwargs, msg))
-
- # Printing progress information, if requested.
- if progress and num_feat % progress_interval == 0:
- stream.write('Processed %d features, saved %d ...\n' % (num_feat, num_saved))
-
- # Only used for status output purposes -- incremental saving uses the
- # values returned here.
- return num_saved, num_feat
-
- nfeat = self.layer.num_feat
- if step and isinstance(step, int) and step < nfeat:
- # Incremental saving is requested at the given interval (step)
- if default_range:
- raise LayerMapError('The `step` keyword may not be used in conjunction with the `fid_range` keyword.')
- beg, num_feat, num_saved = (0, 0, 0)
- indices = range(step, nfeat, step)
- n_i = len(indices)
-
- for i, end in enumerate(indices):
- # Constructing the slice to use for this step; the last slice is
- # special (e.g, [100:] instead of [90:100]).
- if i+1 == n_i: step_slice = slice(beg, None)
- else: step_slice = slice(beg, end)
-
- try:
- num_feat, num_saved = _save(step_slice, num_feat, num_saved)
- beg = end
- except:
- stream.write('%s\nFailed to save slice: %s\n' % ('=-' * 20, step_slice))
- raise
- else:
- # Otherwise, just calling the previously defined _save() function.
- _save()
diff --git a/parts/django/django/contrib/gis/utils/ogrinfo.py b/parts/django/django/contrib/gis/utils/ogrinfo.py
deleted file mode 100644
index 1e4c42d..0000000
--- a/parts/django/django/contrib/gis/utils/ogrinfo.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-This module includes some utility functions for inspecting the layout
-of a GDAL data source -- the functionality is analogous to the output
-produced by the `ogrinfo` utility.
-"""
-
-from django.contrib.gis.gdal import DataSource
-from django.contrib.gis.gdal.geometries import GEO_CLASSES
-
-def ogrinfo(data_source, num_features=10):
- """
- Walks the available layers in the supplied `data_source`, displaying
- the fields for the first `num_features` features.
- """
-
- # Checking the parameters.
- if isinstance(data_source, str):
- data_source = DataSource(data_source)
- elif isinstance(data_source, DataSource):
- pass
- else:
- raise Exception('Data source parameter must be a string or a DataSource object.')
-
- for i, layer in enumerate(data_source):
- print "data source : %s" % data_source.name
- print "==== layer %s" % i
- print " shape type: %s" % GEO_CLASSES[layer.geom_type.num].__name__
- print " # features: %s" % len(layer)
- print " srs: %s" % layer.srs
- extent_tup = layer.extent.tuple
- print " extent: %s - %s" % (extent_tup[0:2], extent_tup[2:4])
- print "Displaying the first %s features ====" % num_features
-
- width = max(*map(len,layer.fields))
- fmt = " %%%ss: %%s" % width
- for j, feature in enumerate(layer[:num_features]):
- print "=== Feature %s" % j
- for fld_name in layer.fields:
- type_name = feature[fld_name].type_name
- output = fmt % (fld_name, type_name)
- val = feature.get(fld_name)
- if val:
- if isinstance(val, str):
- val_fmt = ' ("%s")'
- else:
- val_fmt = ' (%s)'
- output += val_fmt % val
- else:
- output += ' (None)'
- print output
-
-# For backwards compatibility.
-sample = ogrinfo
diff --git a/parts/django/django/contrib/gis/utils/ogrinspect.py b/parts/django/django/contrib/gis/utils/ogrinspect.py
deleted file mode 100644
index 145bd22..0000000
--- a/parts/django/django/contrib/gis/utils/ogrinspect.py
+++ /dev/null
@@ -1,225 +0,0 @@
-"""
-This module is for inspecting OGR data sources and generating either
-models for GeoDjango and/or mapping dictionaries for use with the
-`LayerMapping` utility.
-
-Author: Travis Pinney, Dane Springmeyer, & Justin Bronn
-"""
-from itertools import izip
-# Requires GDAL to use.
-from django.contrib.gis.gdal import DataSource
-from django.contrib.gis.gdal.field import OFTDate, OFTDateTime, OFTInteger, OFTReal, OFTString, OFTTime
-
-def mapping(data_source, geom_name='geom', layer_key=0, multi_geom=False):
- """
- Given a DataSource, generates a dictionary that may be used
- for invoking the LayerMapping utility.
-
- Keyword Arguments:
- `geom_name` => The name of the geometry field to use for the model.
-
- `layer_key` => The key for specifying which layer in the DataSource to use;
- defaults to 0 (the first layer). May be an integer index or a string
- identifier for the layer.
-
- `multi_geom` => Boolean (default: False) - specify as multigeometry.
- """
- if isinstance(data_source, basestring):
- # Instantiating the DataSource from the string.
- data_source = DataSource(data_source)
- elif isinstance(data_source, DataSource):
- pass
- else:
- raise TypeError('Data source parameter must be a string or a DataSource object.')
-
- # Creating the dictionary.
- _mapping = {}
-
- # Generating the field name for each field in the layer.
- for field in data_source[layer_key].fields:
- mfield = field.lower()
- if mfield[-1:] == '_': mfield += 'field'
- _mapping[mfield] = field
- gtype = data_source[layer_key].geom_type
- if multi_geom and gtype.num in (1, 2, 3): prefix = 'MULTI'
- else: prefix = ''
- _mapping[geom_name] = prefix + str(gtype).upper()
- return _mapping
-
-def ogrinspect(*args, **kwargs):
- """
- Given a data source (either a string or a DataSource object) and a string
- model name this function will generate a GeoDjango model.
-
- Usage:
-
- >>> from django.contrib.gis.utils import ogrinspect
- >>> ogrinspect('/path/to/shapefile.shp','NewModel')
-
- ...will print model definition to stout
-
- or put this in a python script and use to redirect the output to a new
- model like:
-
- $ python generate_model.py > myapp/models.py
-
- # generate_model.py
- from django.contrib.gis.utils import ogrinspect
- shp_file = 'data/mapping_hacks/world_borders.shp'
- model_name = 'WorldBorders'
-
- print ogrinspect(shp_file, model_name, multi_geom=True, srid=4326,
- geom_name='shapes', blank=True)
-
- Required Arguments
- `datasource` => string or DataSource object to file pointer
-
- `model name` => string of name of new model class to create
-
- Optional Keyword Arguments
- `geom_name` => For specifying the model name for the Geometry Field.
- Otherwise will default to `geom`
-
- `layer_key` => The key for specifying which layer in the DataSource to use;
- defaults to 0 (the first layer). May be an integer index or a string
- identifier for the layer.
-
- `srid` => The SRID to use for the Geometry Field. If it can be determined,
- the SRID of the datasource is used.
-
- `multi_geom` => Boolean (default: False) - specify as multigeometry.
-
- `name_field` => String - specifies a field name to return for the
- `__unicode__` function (which will be generated if specified).
-
- `imports` => Boolean (default: True) - set to False to omit the
- `from django.contrib.gis.db import models` code from the
- autogenerated models thus avoiding duplicated imports when building
- more than one model by batching ogrinspect()
-
- `decimal` => Boolean or sequence (default: False). When set to True
- all generated model fields corresponding to the `OFTReal` type will
- be `DecimalField` instead of `FloatField`. A sequence of specific
- field names to generate as `DecimalField` may also be used.
-
- `blank` => Boolean or sequence (default: False). When set to True all
- generated model fields will have `blank=True`. If the user wants to
- give specific fields to have blank, then a list/tuple of OGR field
- names may be used.
-
- `null` => Boolean (default: False) - When set to True all generated
- model fields will have `null=True`. If the user wants to specify
- give specific fields to have null, then a list/tuple of OGR field
- names may be used.
-
- Note: This routine calls the _ogrinspect() helper to do the heavy lifting.
- """
- return '\n'.join(s for s in _ogrinspect(*args, **kwargs))
-
-def _ogrinspect(data_source, model_name, geom_name='geom', layer_key=0, srid=None,
- multi_geom=False, name_field=None, imports=True,
- decimal=False, blank=False, null=False):
- """
- Helper routine for `ogrinspect` that generates GeoDjango models corresponding
- to the given data source. See the `ogrinspect` docstring for more details.
- """
- # Getting the DataSource
- if isinstance(data_source, str):
- data_source = DataSource(data_source)
- elif isinstance(data_source, DataSource):
- pass
- else:
- raise TypeError('Data source parameter must be a string or a DataSource object.')
-
- # Getting the layer corresponding to the layer key and getting
- # a string listing of all OGR fields in the Layer.
- layer = data_source[layer_key]
- ogr_fields = layer.fields
-
- # Creating lists from the `null`, `blank`, and `decimal`
- # keyword arguments.
- def process_kwarg(kwarg):
- if isinstance(kwarg, (list, tuple)):
- return [s.lower() for s in kwarg]
- elif kwarg:
- return [s.lower() for s in ogr_fields]
- else:
- return []
- null_fields = process_kwarg(null)
- blank_fields = process_kwarg(blank)
- decimal_fields = process_kwarg(decimal)
-
- # Gets the `null` and `blank` keywords for the given field name.
- def get_kwargs_str(field_name):
- kwlist = []
- if field_name.lower() in null_fields: kwlist.append('null=True')
- if field_name.lower() in blank_fields: kwlist.append('blank=True')
- if kwlist: return ', ' + ', '.join(kwlist)
- else: return ''
-
- # For those wishing to disable the imports.
- if imports:
- yield '# This is an auto-generated Django model module created by ogrinspect.'
- yield 'from django.contrib.gis.db import models'
- yield ''
-
- yield 'class %s(models.Model):' % model_name
-
- for field_name, width, precision, field_type in izip(ogr_fields, layer.field_widths, layer.field_precisions, layer.field_types):
- # The model field name.
- mfield = field_name.lower()
- if mfield[-1:] == '_': mfield += 'field'
-
- # Getting the keyword args string.
- kwargs_str = get_kwargs_str(field_name)
-
- if field_type is OFTReal:
- # By default OFTReals are mapped to `FloatField`, however, they
- # may also be mapped to `DecimalField` if specified in the
- # `decimal` keyword.
- if field_name.lower() in decimal_fields:
- yield ' %s = models.DecimalField(max_digits=%d, decimal_places=%d%s)' % (mfield, width, precision, kwargs_str)
- else:
- yield ' %s = models.FloatField(%s)' % (mfield, kwargs_str[2:])
- elif field_type is OFTInteger:
- yield ' %s = models.IntegerField(%s)' % (mfield, kwargs_str[2:])
- elif field_type is OFTString:
- yield ' %s = models.CharField(max_length=%s%s)' % (mfield, width, kwargs_str)
- elif field_type is OFTDate:
- yield ' %s = models.DateField(%s)' % (mfield, kwargs_str[2:])
- elif field_type is OFTDateTime:
- yield ' %s = models.DateTimeField(%s)' % (mfield, kwargs_str[2:])
- elif field_type is OFTDate:
- yield ' %s = models.TimeField(%s)' % (mfield, kwargs_str[2:])
- else:
- raise TypeError('Unknown field type %s in %s' % (field_type, mfield))
-
- # TODO: Autodetection of multigeometry types (see #7218).
- gtype = layer.geom_type
- if multi_geom and gtype.num in (1, 2, 3):
- geom_field = 'Multi%s' % gtype.django
- else:
- geom_field = gtype.django
-
- # Setting up the SRID keyword string.
- if srid is None:
- if layer.srs is None:
- srid_str = 'srid=-1'
- else:
- srid = layer.srs.srid
- if srid is None:
- srid_str = 'srid=-1'
- elif srid == 4326:
- # WGS84 is already the default.
- srid_str = ''
- else:
- srid_str = 'srid=%s' % srid
- else:
- srid_str = 'srid=%s' % srid
-
- yield ' %s = models.%s(%s)' % (geom_name, geom_field, srid_str)
- yield ' objects = models.GeoManager()'
-
- if name_field:
- yield ''
- yield ' def __unicode__(self): return self.%s' % name_field
diff --git a/parts/django/django/contrib/gis/utils/srs.py b/parts/django/django/contrib/gis/utils/srs.py
deleted file mode 100644
index 989929e..0000000
--- a/parts/django/django/contrib/gis/utils/srs.py
+++ /dev/null
@@ -1,77 +0,0 @@
-from django.contrib.gis.gdal import SpatialReference
-from django.db import connections, DEFAULT_DB_ALIAS
-
-def add_srs_entry(srs, auth_name='EPSG', auth_srid=None, ref_sys_name=None,
- database=DEFAULT_DB_ALIAS):
- """
- This function takes a GDAL SpatialReference system and adds its information
- to the `spatial_ref_sys` table of the spatial backend. Doing this enables
- database-level spatial transformations for the backend. Thus, this utility
- is useful for adding spatial reference systems not included by default with
- the backend -- for example, the so-called "Google Maps Mercator Projection"
- is excluded in PostGIS 1.3 and below, and the following adds it to the
- `spatial_ref_sys` table:
-
- >>> from django.contrib.gis.utils import add_srs_entry
- >>> add_srs_entry(900913)
-
- Keyword Arguments:
- auth_name:
- This keyword may be customized with the value of the `auth_name` field.
- Defaults to 'EPSG'.
-
- auth_srid:
- This keyword may be customized with the value of the `auth_srid` field.
- Defaults to the SRID determined by GDAL.
-
- ref_sys_name:
- For SpatiaLite users only, sets the value of the the `ref_sys_name` field.
- Defaults to the name determined by GDAL.
-
- database:
- The name of the database connection to use; the default is the value
- of `django.db.DEFAULT_DB_ALIAS` (at the time of this writing, it's value
- is 'default').
- """
- connection = connections[database]
- if not hasattr(connection.ops, 'spatial_version'):
- raise Exception('The `add_srs_entry` utility only works '
- 'with spatial backends.')
- if connection.ops.oracle or connection.ops.mysql:
- raise Exception('This utility does not support the '
- 'Oracle or MySQL spatial backends.')
- SpatialRefSys = connection.ops.spatial_ref_sys()
-
- # If argument is not a `SpatialReference` instance, use it as parameter
- # to construct a `SpatialReference` instance.
- if not isinstance(srs, SpatialReference):
- srs = SpatialReference(srs)
-
- if srs.srid is None:
- raise Exception('Spatial reference requires an SRID to be '
- 'compatible with the spatial backend.')
-
- # Initializing the keyword arguments dictionary for both PostGIS
- # and SpatiaLite.
- kwargs = {'srid' : srs.srid,
- 'auth_name' : auth_name,
- 'auth_srid' : auth_srid or srs.srid,
- 'proj4text' : srs.proj4,
- }
-
- # Backend-specific fields for the SpatialRefSys model.
- if connection.ops.postgis:
- kwargs['srtext'] = srs.wkt
- if connection.ops.spatialite:
- kwargs['ref_sys_name'] = ref_sys_name or srs.name
-
- # Creating the spatial_ref_sys model.
- try:
- # Try getting via SRID only, because using all kwargs may
- # differ from exact wkt/proj in database.
- sr = SpatialRefSys.objects.get(srid=srs.srid)
- except SpatialRefSys.DoesNotExist:
- sr = SpatialRefSys.objects.create(**kwargs)
-
-# Alias is for backwards-compatibility purposes.
-add_postgis_srs = add_srs_entry
diff --git a/parts/django/django/contrib/gis/utils/wkt.py b/parts/django/django/contrib/gis/utils/wkt.py
deleted file mode 100644
index 4aecc62..0000000
--- a/parts/django/django/contrib/gis/utils/wkt.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
- Utilities for manipulating Geometry WKT.
-"""
-
-def precision_wkt(geom, prec):
- """
- Returns WKT text of the geometry according to the given precision (an
- integer or a string). If the precision is an integer, then the decimal
- places of coordinates WKT will be truncated to that number:
-
- >>> pnt = Point(5, 23)
- >>> pnt.wkt
- 'POINT (5.0000000000000000 23.0000000000000000)'
- >>> precision(geom, 1)
- 'POINT (5.0 23.0)'
-
- If the precision is a string, it must be valid Python format string
- (e.g., '%20.7f') -- thus, you should know what you're doing.
- """
- if isinstance(prec, int):
- num_fmt = '%%.%df' % prec
- elif isinstance(prec, basestring):
- num_fmt = prec
- else:
- raise TypeError
-
- # TODO: Support 3D geometries.
- coord_fmt = ' '.join([num_fmt, num_fmt])
-
- def formatted_coords(coords):
- return ','.join([coord_fmt % c[:2] for c in coords])
-
- def formatted_poly(poly):
- return ','.join(['(%s)' % formatted_coords(r) for r in poly])
-
- def formatted_geom(g):
- gtype = str(g.geom_type).upper()
- yield '%s(' % gtype
- if gtype == 'POINT':
- yield formatted_coords((g.coords,))
- elif gtype in ('LINESTRING', 'LINEARRING'):
- yield formatted_coords(g.coords)
- elif gtype in ('POLYGON', 'MULTILINESTRING'):
- yield formatted_poly(g)
- elif gtype == 'MULTIPOINT':
- yield formatted_coords(g.coords)
- elif gtype == 'MULTIPOLYGON':
- yield ','.join(['(%s)' % formatted_poly(p) for p in g])
- elif gtype == 'GEOMETRYCOLLECTION':
- yield ','.join([''.join([wkt for wkt in formatted_geom(child)]) for child in g])
- else:
- raise TypeError
- yield ')'
-
- return ''.join([wkt for wkt in formatted_geom(geom)])
diff --git a/parts/django/django/contrib/humanize/__init__.py b/parts/django/django/contrib/humanize/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/humanize/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/humanize/templatetags/__init__.py b/parts/django/django/contrib/humanize/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/humanize/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/humanize/templatetags/humanize.py b/parts/django/django/contrib/humanize/templatetags/humanize.py
deleted file mode 100644
index cfa93fe..0000000
--- a/parts/django/django/contrib/humanize/templatetags/humanize.py
+++ /dev/null
@@ -1,102 +0,0 @@
-from django.utils.translation import ungettext, ugettext as _
-from django.utils.encoding import force_unicode
-from django import template
-from django.template import defaultfilters
-from datetime import date
-import re
-
-register = template.Library()
-
-def ordinal(value):
- """
- Converts an integer to its ordinal as a string. 1 is '1st', 2 is '2nd',
- 3 is '3rd', etc. Works for any integer.
- """
- try:
- value = int(value)
- except (TypeError, ValueError):
- return value
- t = (_('th'), _('st'), _('nd'), _('rd'), _('th'), _('th'), _('th'), _('th'), _('th'), _('th'))
- if value % 100 in (11, 12, 13): # special case
- return u"%d%s" % (value, t[0])
- return u'%d%s' % (value, t[value % 10])
-ordinal.is_safe = True
-register.filter(ordinal)
-
-def intcomma(value):
- """
- Converts an integer to a string containing commas every three digits.
- For example, 3000 becomes '3,000' and 45000 becomes '45,000'.
- """
- orig = force_unicode(value)
- new = re.sub("^(-?\d+)(\d{3})", '\g<1>,\g<2>', orig)
- if orig == new:
- return new
- else:
- return intcomma(new)
-intcomma.is_safe = True
-register.filter(intcomma)
-
-def intword(value):
- """
- Converts a large integer to a friendly text representation. Works best for
- numbers over 1 million. For example, 1000000 becomes '1.0 million', 1200000
- becomes '1.2 million' and '1200000000' becomes '1.2 billion'.
- """
- try:
- value = int(value)
- except (TypeError, ValueError):
- return value
- if value < 1000000:
- return value
- if value < 1000000000:
- new_value = value / 1000000.0
- return ungettext('%(value).1f million', '%(value).1f million', new_value) % {'value': new_value}
- if value < 1000000000000:
- new_value = value / 1000000000.0
- return ungettext('%(value).1f billion', '%(value).1f billion', new_value) % {'value': new_value}
- if value < 1000000000000000:
- new_value = value / 1000000000000.0
- return ungettext('%(value).1f trillion', '%(value).1f trillion', new_value) % {'value': new_value}
- return value
-intword.is_safe = False
-register.filter(intword)
-
-def apnumber(value):
- """
- For numbers 1-9, returns the number spelled out. Otherwise, returns the
- number. This follows Associated Press style.
- """
- try:
- value = int(value)
- except (TypeError, ValueError):
- return value
- if not 0 < value < 10:
- return value
- return (_('one'), _('two'), _('three'), _('four'), _('five'), _('six'), _('seven'), _('eight'), _('nine'))[value-1]
-apnumber.is_safe = True
-register.filter(apnumber)
-
-def naturalday(value, arg=None):
- """
- For date values that are tomorrow, today or yesterday compared to
- present day returns representing string. Otherwise, returns a string
- formatted according to settings.DATE_FORMAT.
- """
- try:
- value = date(value.year, value.month, value.day)
- except AttributeError:
- # Passed value wasn't a date object
- return value
- except ValueError:
- # Date arguments out of range
- return value
- delta = value - date.today()
- if delta.days == 0:
- return _(u'today')
- elif delta.days == 1:
- return _(u'tomorrow')
- elif delta.days == -1:
- return _(u'yesterday')
- return defaultfilters.date(value, arg)
-register.filter(naturalday)
diff --git a/parts/django/django/contrib/localflavor/__init__.py b/parts/django/django/contrib/localflavor/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/ar/__init__.py b/parts/django/django/contrib/localflavor/ar/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/ar/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/ar/ar_provinces.py b/parts/django/django/contrib/localflavor/ar/ar_provinces.py
deleted file mode 100644
index a0efd4b..0000000
--- a/parts/django/django/contrib/localflavor/ar/ar_provinces.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-A list of Argentinean provinces and autonomous cities as `choices` in a
-formfield. From
-http://www.argentina.gov.ar/argentina/portal/paginas.dhtml?pagina=425
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-PROVINCE_CHOICES = (
- ('B', u'Buenos Aires'),
- ('K', u'Catamarca'),
- ('H', u'Chaco'),
- ('U', u'Chubut'),
- ('C', u'Ciudad Autónoma de Buenos Aires'),
- ('X', u'Córdoba'),
- ('W', u'Corrientes'),
- ('E', u'Entre Ríos'),
- ('P', u'Formosa'),
- ('Y', u'Jujuy'),
- ('L', u'La Pampa'),
- ('F', u'La Rioja'),
- ('M', u'Mendoza'),
- ('N', u'Misiones'),
- ('Q', u'Neuquén'),
- ('R', u'Río Negro'),
- ('A', u'Salta'),
- ('J', u'San Juan'),
- ('D', u'San Luis'),
- ('Z', u'Santa Cruz'),
- ('S', u'Santa Fe'),
- ('G', u'Santiago del Estero'),
- ('V', u'Tierra del Fuego, Antártida e Islas del Atlántico Sur'),
- ('T', u'Tucumán'),
-)
diff --git a/parts/django/django/contrib/localflavor/ar/forms.py b/parts/django/django/contrib/localflavor/ar/forms.py
deleted file mode 100644
index 53721a1..0000000
--- a/parts/django/django/contrib/localflavor/ar/forms.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-AR-specific Form helpers.
-"""
-
-from django.forms import ValidationError
-from django.core.validators import EMPTY_VALUES
-from django.forms.fields import RegexField, CharField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-
-class ARProvinceSelect(Select):
- """
- A Select widget that uses a list of Argentinean provinces/autonomous cities
- as its choices.
- """
- def __init__(self, attrs=None):
- from ar_provinces import PROVINCE_CHOICES
- super(ARProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)
-
-class ARPostalCodeField(RegexField):
- """
- A field that accepts a 'classic' NNNN Postal Code or a CPA.
-
- See http://www.correoargentino.com.ar/consulta_cpa/home.php
- """
- default_error_messages = {
- 'invalid': _("Enter a postal code in the format NNNN or ANNNNAAA."),
- }
-
- def __init__(self, *args, **kwargs):
- super(ARPostalCodeField, self).__init__(r'^\d{4}$|^[A-HJ-NP-Za-hj-np-z]\d{4}\D{3}$',
- min_length=4, max_length=8, *args, **kwargs)
-
- def clean(self, value):
- value = super(ARPostalCodeField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- if len(value) not in (4, 8):
- raise ValidationError(self.error_messages['invalid'])
- if len(value) == 8:
- return u'%s%s%s' % (value[0].upper(), value[1:5], value[5:].upper())
- return value
-
-class ARDNIField(CharField):
- """
- A field that validates 'Documento Nacional de Identidad' (DNI) numbers.
- """
- default_error_messages = {
- 'invalid': _("This field requires only numbers."),
- 'max_digits': _("This field requires 7 or 8 digits."),
- }
-
- def __init__(self, *args, **kwargs):
- super(ARDNIField, self).__init__(max_length=10, min_length=7, *args,
- **kwargs)
-
- def clean(self, value):
- """
- Value can be a string either in the [X]X.XXX.XXX or [X]XXXXXXX formats.
- """
- value = super(ARDNIField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- if not value.isdigit():
- value = value.replace('.', '')
- if not value.isdigit():
- raise ValidationError(self.error_messages['invalid'])
- if len(value) not in (7, 8):
- raise ValidationError(self.error_messages['max_digits'])
-
- return value
-
-class ARCUITField(RegexField):
- """
- This field validates a CUIT (Código Único de Identificación Tributaria). A
- CUIT is of the form XX-XXXXXXXX-V. The last digit is a check digit.
- """
- default_error_messages = {
- 'invalid': _('Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'),
- 'checksum': _("Invalid CUIT."),
- }
-
- def __init__(self, *args, **kwargs):
- super(ARCUITField, self).__init__(r'^\d{2}-?\d{8}-?\d$',
- *args, **kwargs)
-
- def clean(self, value):
- """
- Value can be either a string in the format XX-XXXXXXXX-X or an
- 11-digit number.
- """
- value = super(ARCUITField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value, cd = self._canon(value)
- if self._calc_cd(value) != cd:
- raise ValidationError(self.error_messages['checksum'])
- return self._format(value, cd)
-
- def _canon(self, cuit):
- cuit = cuit.replace('-', '')
- return cuit[:-1], cuit[-1]
-
- def _calc_cd(self, cuit):
- mults = (5, 4, 3, 2, 7, 6, 5, 4, 3, 2)
- tmp = sum([m * int(cuit[idx]) for idx, m in enumerate(mults)])
- return str(11 - tmp % 11)
-
- def _format(self, cuit, check_digit=None):
- if check_digit == None:
- check_digit = cuit[-1]
- cuit = cuit[:-1]
- return u'%s-%s-%s' % (cuit[:2], cuit[2:], check_digit)
-
diff --git a/parts/django/django/contrib/localflavor/at/__init__.py b/parts/django/django/contrib/localflavor/at/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/at/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/at/at_states.py b/parts/django/django/contrib/localflavor/at/at_states.py
deleted file mode 100644
index d4b4d8a..0000000
--- a/parts/django/django/contrib/localflavor/at/at_states.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- coding: utf-8 -*
-from django.utils.translation import ugettext_lazy as _
-
-STATE_CHOICES = (
- ('BL', _('Burgenland')),
- ('KA', _('Carinthia')),
- ('NO', _('Lower Austria')),
- ('OO', _('Upper Austria')),
- ('SA', _('Salzburg')),
- ('ST', _('Styria')),
- ('TI', _('Tyrol')),
- ('VO', _('Vorarlberg')),
- ('WI', _('Vienna')),
-) \ No newline at end of file
diff --git a/parts/django/django/contrib/localflavor/at/forms.py b/parts/django/django/contrib/localflavor/at/forms.py
deleted file mode 100644
index cfe0206..0000000
--- a/parts/django/django/contrib/localflavor/at/forms.py
+++ /dev/null
@@ -1,69 +0,0 @@
-"""
-AT-specific Form helpers
-"""
-
-import re
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-
-re_ssn = re.compile(r'^\d{4} \d{6}')
-
-
-class ATZipCodeField(RegexField):
- """
- A form field that validates its input is an Austrian postcode.
-
- Accepts 4 digits.
- """
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXX.'),
- }
- def __init__(self, *args, **kwargs):
- super(ATZipCodeField, self).__init__(r'^\d{4}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class ATStateSelect(Select):
- """
- A Select widget that uses a list of AT states as its choices.
- """
- def __init__(self, attrs=None):
- from django.contrib.localflavor.at.at_states import STATE_CHOICES
- super(ATStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
-
-class ATSocialSecurityNumberField(Field):
- """
- Austrian Social Security numbers are composed of a 4 digits and 6 digits
- field. The latter represents in most cases the person's birthdate while
- the first 4 digits represent a 3-digits counter and a one-digit checksum.
-
- The 6-digits field can also differ from the person's birthdate if the
- 3-digits counter suffered an overflow.
-
- This code is based on information available on
- http://de.wikipedia.org/wiki/Sozialversicherungsnummer#.C3.96sterreich
- """
-
- default_error_messages = {
- 'invalid': _(u'Enter a valid Austrian Social Security Number in XXXX XXXXXX format.'),
- }
-
- def clean(self, value):
- value = super(ATSocialSecurityNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u""
- if not re_ssn.search(value):
- raise ValidationError(self.error_messages['invalid'])
- sqnr, date = value.split(" ")
- sqnr, check = (sqnr[:3], (sqnr[3]))
- if int(sqnr) < 100:
- raise ValidationError(self.error_messages['invalid'])
- res = int(sqnr[0])*3 + int(sqnr[1])*7 + int(sqnr[2])*9 \
- + int(date[0])*5 + int(date[1])*8 + int(date[2])*4 \
- + int(date[3])*2 + int(date[4])*1 + int(date[5])*6
- res = res % 11
- if res != int(check):
- raise ValidationError(self.error_messages['invalid'])
- return u'%s%s %s'%(sqnr, check, date,)
diff --git a/parts/django/django/contrib/localflavor/au/__init__.py b/parts/django/django/contrib/localflavor/au/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/au/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/au/au_states.py b/parts/django/django/contrib/localflavor/au/au_states.py
deleted file mode 100644
index 578d61b..0000000
--- a/parts/django/django/contrib/localflavor/au/au_states.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-An alphabetical list of states for use as `choices` in a formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-STATE_CHOICES = (
- ('ACT', 'Australian Capital Territory'),
- ('NSW', 'New South Wales'),
- ('NT', 'Northern Territory'),
- ('QLD', 'Queensland'),
- ('SA', 'South Australia'),
- ('TAS', 'Tasmania'),
- ('VIC', 'Victoria'),
- ('WA', 'Western Australia'),
-)
diff --git a/parts/django/django/contrib/localflavor/au/forms.py b/parts/django/django/contrib/localflavor/au/forms.py
deleted file mode 100644
index 87e0438..0000000
--- a/parts/django/django/contrib/localflavor/au/forms.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""
-Australian-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-import re
-
-PHONE_DIGITS_RE = re.compile(r'^(\d{10})$')
-
-class AUPostCodeField(RegexField):
- """Australian post code field."""
- default_error_messages = {
- 'invalid': _('Enter a 4 digit post code.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(AUPostCodeField, self).__init__(r'^\d{4}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class AUPhoneNumberField(Field):
- """Australian phone number field."""
- default_error_messages = {
- 'invalid': u'Phone numbers must contain 10 digits.',
- }
-
- def clean(self, value):
- """
- Validate a phone number. Strips parentheses, whitespace and hyphens.
- """
- super(AUPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\(|\)|\s+|-)', '', smart_unicode(value))
- phone_match = PHONE_DIGITS_RE.search(value)
- if phone_match:
- return u'%s' % phone_match.group(1)
- raise ValidationError(self.error_messages['invalid'])
-
-class AUStateSelect(Select):
- """
- A Select widget that uses a list of Australian states/territories as its
- choices.
- """
- def __init__(self, attrs=None):
- from au_states import STATE_CHOICES
- super(AUStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
diff --git a/parts/django/django/contrib/localflavor/br/__init__.py b/parts/django/django/contrib/localflavor/br/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/br/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/br/br_states.py b/parts/django/django/contrib/localflavor/br/br_states.py
deleted file mode 100644
index 98e54bc..0000000
--- a/parts/django/django/contrib/localflavor/br/br_states.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-An alphabetical list of Brazilian states for use as `choices` in a formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-STATE_CHOICES = (
- ('AC', 'Acre'),
- ('AL', 'Alagoas'),
- ('AP', u'Amapá'),
- ('AM', 'Amazonas'),
- ('BA', 'Bahia'),
- ('CE', u'Ceará'),
- ('DF', 'Distrito Federal'),
- ('ES', u'Espírito Santo'),
- ('GO', u'Goiás'),
- ('MA', u'Maranhão'),
- ('MT', 'Mato Grosso'),
- ('MS', 'Mato Grosso do Sul'),
- ('MG', 'Minas Gerais'),
- ('PA', u'Pará'),
- ('PB', u'Paraíba'),
- ('PR', u'Paraná'),
- ('PE', 'Pernambuco'),
- ('PI', u'Piauí'),
- ('RJ', 'Rio de Janeiro'),
- ('RN', 'Rio Grande do Norte'),
- ('RS', 'Rio Grande do Sul'),
- ('RO', u'Rondônia'),
- ('RR', 'Roraima'),
- ('SC', 'Santa Catarina'),
- ('SP', u'São Paulo'),
- ('SE', 'Sergipe'),
- ('TO', 'Tocantins'),
-)
diff --git a/parts/django/django/contrib/localflavor/br/forms.py b/parts/django/django/contrib/localflavor/br/forms.py
deleted file mode 100644
index 7a7a858..0000000
--- a/parts/django/django/contrib/localflavor/br/forms.py
+++ /dev/null
@@ -1,163 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-BR-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, CharField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-import re
-
-phone_digits_re = re.compile(r'^(\d{2})[-\.]?(\d{4})[-\.]?(\d{4})$')
-
-class BRZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXXX-XXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(BRZipCodeField, self).__init__(r'^\d{5}-\d{3}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class BRPhoneNumberField(Field):
- default_error_messages = {
- 'invalid': _('Phone numbers must be in XX-XXXX-XXXX format.'),
- }
-
- def clean(self, value):
- super(BRPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\(|\)|\s+)', '', smart_unicode(value))
- m = phone_digits_re.search(value)
- if m:
- return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3))
- raise ValidationError(self.error_messages['invalid'])
-
-class BRStateSelect(Select):
- """
- A Select widget that uses a list of Brazilian states/territories
- as its choices.
- """
- def __init__(self, attrs=None):
- from br_states import STATE_CHOICES
- super(BRStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
-
-class BRStateChoiceField(Field):
- """
- A choice field that uses a list of Brazilian states as its choices.
- """
- widget = Select
- default_error_messages = {
- 'invalid': _(u'Select a valid brazilian state. That state is not one of the available states.'),
- }
-
- def __init__(self, required=True, widget=None, label=None,
- initial=None, help_text=None):
- super(BRStateChoiceField, self).__init__(required, widget, label,
- initial, help_text)
- from br_states import STATE_CHOICES
- self.widget.choices = STATE_CHOICES
-
- def clean(self, value):
- value = super(BRStateChoiceField, self).clean(value)
- if value in EMPTY_VALUES:
- value = u''
- value = smart_unicode(value)
- if value == u'':
- return value
- valid_values = set([smart_unicode(k) for k, v in self.widget.choices])
- if value not in valid_values:
- raise ValidationError(self.error_messages['invalid'])
- return value
-
-def DV_maker(v):
- if v >= 2:
- return 11 - v
- return 0
-
-class BRCPFField(CharField):
- """
- This field validate a CPF number or a CPF string. A CPF number is
- compounded by XXX.XXX.XXX-VD. The two last digits are check digits.
-
- More information:
- http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas
- """
- default_error_messages = {
- 'invalid': _("Invalid CPF number."),
- 'max_digits': _("This field requires at most 11 digits or 14 characters."),
- 'digits_only': _("This field requires only numbers."),
- }
-
- def __init__(self, *args, **kwargs):
- super(BRCPFField, self).__init__(max_length=14, min_length=11, *args, **kwargs)
-
- def clean(self, value):
- """
- Value can be either a string in the format XXX.XXX.XXX-XX or an
- 11-digit number.
- """
- value = super(BRCPFField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- orig_value = value[:]
- if not value.isdigit():
- value = re.sub("[-\.]", "", value)
- try:
- int(value)
- except ValueError:
- raise ValidationError(self.error_messages['digits_only'])
- if len(value) != 11:
- raise ValidationError(self.error_messages['max_digits'])
- orig_dv = value[-2:]
-
- new_1dv = sum([i * int(value[idx]) for idx, i in enumerate(range(10, 1, -1))])
- new_1dv = DV_maker(new_1dv % 11)
- value = value[:-2] + str(new_1dv) + value[-1]
- new_2dv = sum([i * int(value[idx]) for idx, i in enumerate(range(11, 1, -1))])
- new_2dv = DV_maker(new_2dv % 11)
- value = value[:-1] + str(new_2dv)
- if value[-2:] != orig_dv:
- raise ValidationError(self.error_messages['invalid'])
-
- return orig_value
-
-class BRCNPJField(Field):
- default_error_messages = {
- 'invalid': _("Invalid CNPJ number."),
- 'digits_only': _("This field requires only numbers."),
- 'max_digits': _("This field requires at least 14 digits"),
- }
-
- def clean(self, value):
- """
- Value can be either a string in the format XX.XXX.XXX/XXXX-XX or a
- group of 14 characters.
- """
- value = super(BRCNPJField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- orig_value = value[:]
- if not value.isdigit():
- value = re.sub("[-/\.]", "", value)
- try:
- int(value)
- except ValueError:
- raise ValidationError(self.error_messages['digits_only'])
- if len(value) != 14:
- raise ValidationError(self.error_messages['max_digits'])
- orig_dv = value[-2:]
-
- new_1dv = sum([i * int(value[idx]) for idx, i in enumerate(range(5, 1, -1) + range(9, 1, -1))])
- new_1dv = DV_maker(new_1dv % 11)
- value = value[:-2] + str(new_1dv) + value[-1]
- new_2dv = sum([i * int(value[idx]) for idx, i in enumerate(range(6, 1, -1) + range(9, 1, -1))])
- new_2dv = DV_maker(new_2dv % 11)
- value = value[:-1] + str(new_2dv)
- if value[-2:] != orig_dv:
- raise ValidationError(self.error_messages['invalid'])
-
- return orig_value
diff --git a/parts/django/django/contrib/localflavor/ca/__init__.py b/parts/django/django/contrib/localflavor/ca/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/ca/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/ca/ca_provinces.py b/parts/django/django/contrib/localflavor/ca/ca_provinces.py
deleted file mode 100644
index 746716f..0000000
--- a/parts/django/django/contrib/localflavor/ca/ca_provinces.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-An alphabetical list of provinces and territories for use as `choices`
-in a formfield., and a mapping of province misspellings/abbreviations to
-normalized abbreviations
-
-Source: http://www.canada.gc.ca/othergov/prov_e.html
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-PROVINCE_CHOICES = (
- ('AB', 'Alberta'),
- ('BC', 'British Columbia'),
- ('MB', 'Manitoba'),
- ('NB', 'New Brunswick'),
- ('NF', 'Newfoundland and Labrador'),
- ('NT', 'Northwest Territories'),
- ('NS', 'Nova Scotia'),
- ('NU', 'Nunavut'),
- ('ON', 'Ontario'),
- ('PE', 'Prince Edward Island'),
- ('QC', 'Quebec'),
- ('SK', 'Saskatchewan'),
- ('YK', 'Yukon')
-)
-
-PROVINCES_NORMALIZED = {
- 'ab': 'AB',
- 'alberta': 'AB',
- 'bc': 'BC',
- 'b.c.': 'BC',
- 'british columbia': 'BC',
- 'mb': 'MB',
- 'manitoba': 'MB',
- 'nb': 'NB',
- 'new brunswick': 'NB',
- 'nf': 'NF',
- 'newfoundland': 'NF',
- 'newfoundland and labrador': 'NF',
- 'nt': 'NT',
- 'northwest territories': 'NT',
- 'ns': 'NS',
- 'nova scotia': 'NS',
- 'nu': 'NU',
- 'nunavut': 'NU',
- 'on': 'ON',
- 'ontario': 'ON',
- 'pe': 'PE',
- 'pei': 'PE',
- 'p.e.i.': 'PE',
- 'prince edward island': 'PE',
- 'qc': 'QC',
- 'quebec': 'QC',
- 'sk': 'SK',
- 'saskatchewan': 'SK',
- 'yk': 'YK',
- 'yukon': 'YK',
-} \ No newline at end of file
diff --git a/parts/django/django/contrib/localflavor/ca/forms.py b/parts/django/django/contrib/localflavor/ca/forms.py
deleted file mode 100644
index ae3c76e..0000000
--- a/parts/django/django/contrib/localflavor/ca/forms.py
+++ /dev/null
@@ -1,134 +0,0 @@
-"""
-Canada-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-import re
-
-phone_digits_re = re.compile(r'^(?:1-?)?(\d{3})[-\.]?(\d{3})[-\.]?(\d{4})$')
-sin_re = re.compile(r"^(\d{3})-(\d{3})-(\d{3})$")
-
-class CAPostalCodeField(RegexField):
- """
- Canadian postal code field.
-
- Validates against known invalid characters: D, F, I, O, Q, U
- Additionally the first character cannot be Z or W.
- For more info see:
- http://www.canadapost.ca/tools/pg/manual/PGaddress-e.asp#1402170
- """
- default_error_messages = {
- 'invalid': _(u'Enter a postal code in the format XXX XXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] \d[ABCEGHJKLMNPRSTVWXYZ]\d$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class CAPhoneNumberField(Field):
- """Canadian phone number field."""
- default_error_messages = {
- 'invalid': u'Phone numbers must be in XXX-XXX-XXXX format.',
- }
-
- def clean(self, value):
- """Validate a phone number.
- """
- super(CAPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\(|\)|\s+)', '', smart_unicode(value))
- m = phone_digits_re.search(value)
- if m:
- return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3))
- raise ValidationError(self.error_messages['invalid'])
-
-class CAProvinceField(Field):
- """
- A form field that validates its input is a Canadian province name or abbreviation.
- It normalizes the input to the standard two-leter postal service
- abbreviation for the given province.
- """
- default_error_messages = {
- 'invalid': u'Enter a Canadian province or territory.',
- }
-
- def clean(self, value):
- from ca_provinces import PROVINCES_NORMALIZED
- super(CAProvinceField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- try:
- value = value.strip().lower()
- except AttributeError:
- pass
- else:
- try:
- return PROVINCES_NORMALIZED[value.strip().lower()].decode('ascii')
- except KeyError:
- pass
- raise ValidationError(self.error_messages['invalid'])
-
-class CAProvinceSelect(Select):
- """
- A Select widget that uses a list of Canadian provinces and
- territories as its choices.
- """
- def __init__(self, attrs=None):
- from ca_provinces import PROVINCE_CHOICES # relative import
- super(CAProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)
-
-class CASocialInsuranceNumberField(Field):
- """
- A Canadian Social Insurance Number (SIN).
-
- Checks the following rules to determine whether the number is valid:
-
- * Conforms to the XXX-XXX-XXX format.
- * Passes the check digit process "Luhn Algorithm"
- See: http://en.wikipedia.org/wiki/Social_Insurance_Number
- """
- default_error_messages = {
- 'invalid': _('Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format.'),
- }
-
- def clean(self, value):
- super(CASocialInsuranceNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- match = re.match(sin_re, value)
- if not match:
- raise ValidationError(self.error_messages['invalid'])
-
- number = u'%s-%s-%s' % (match.group(1), match.group(2), match.group(3))
- check_number = u'%s%s%s' % (match.group(1), match.group(2), match.group(3))
- if not self.luhn_checksum_is_valid(check_number):
- raise ValidationError(self.error_messages['invalid'])
- return number
-
- def luhn_checksum_is_valid(self, number):
- """
- Checks to make sure that the SIN passes a luhn mod-10 checksum
- See: http://en.wikipedia.org/wiki/Luhn_algorithm
- """
-
- sum = 0
- num_digits = len(number)
- oddeven = num_digits & 1
-
- for count in range(0, num_digits):
- digit = int(number[count])
-
- if not (( count & 1 ) ^ oddeven ):
- digit = digit * 2
- if digit > 9:
- digit = digit - 9
-
- sum = sum + digit
-
- return ( (sum % 10) == 0 )
diff --git a/parts/django/django/contrib/localflavor/ch/__init__.py b/parts/django/django/contrib/localflavor/ch/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/ch/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/ch/ch_states.py b/parts/django/django/contrib/localflavor/ch/ch_states.py
deleted file mode 100644
index ba5934a..0000000
--- a/parts/django/django/contrib/localflavor/ch/ch_states.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- coding: utf-8 -*
-from django.utils.translation import ugettext_lazy as _
-
-STATE_CHOICES = (
- ('AG', _('Aargau')),
- ('AI', _('Appenzell Innerrhoden')),
- ('AR', _('Appenzell Ausserrhoden')),
- ('BS', _('Basel-Stadt')),
- ('BL', _('Basel-Land')),
- ('BE', _('Berne')),
- ('FR', _('Fribourg')),
- ('GE', _('Geneva')),
- ('GL', _('Glarus')),
- ('GR', _('Graubuenden')),
- ('JU', _('Jura')),
- ('LU', _('Lucerne')),
- ('NE', _('Neuchatel')),
- ('NW', _('Nidwalden')),
- ('OW', _('Obwalden')),
- ('SH', _('Schaffhausen')),
- ('SZ', _('Schwyz')),
- ('SO', _('Solothurn')),
- ('SG', _('St. Gallen')),
- ('TG', _('Thurgau')),
- ('TI', _('Ticino')),
- ('UR', _('Uri')),
- ('VS', _('Valais')),
- ('VD', _('Vaud')),
- ('ZG', _('Zug')),
- ('ZH', _('Zurich'))
-)
diff --git a/parts/django/django/contrib/localflavor/ch/forms.py b/parts/django/django/contrib/localflavor/ch/forms.py
deleted file mode 100644
index eb1ae68..0000000
--- a/parts/django/django/contrib/localflavor/ch/forms.py
+++ /dev/null
@@ -1,119 +0,0 @@
-"""
-Swiss-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-import re
-
-id_re = re.compile(r"^(?P<idnumber>\w{8})(?P<pos9>(\d{1}|<))(?P<checksum>\d{1})$")
-phone_digits_re = re.compile(r'^0([1-9]{1})\d{8}$')
-
-class CHZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(CHZipCodeField, self).__init__(r'^\d{4}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class CHPhoneNumberField(Field):
- """
- Validate local Swiss phone number (not international ones)
- The correct format is '0XX XXX XX XX'.
- '0XX.XXX.XX.XX' and '0XXXXXXXXX' validate but are corrected to
- '0XX XXX XX XX'.
- """
- default_error_messages = {
- 'invalid': 'Phone numbers must be in 0XX XXX XX XX format.',
- }
-
- def clean(self, value):
- super(CHPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\.|\s|/|-)', '', smart_unicode(value))
- m = phone_digits_re.search(value)
- if m:
- return u'%s %s %s %s' % (value[0:3], value[3:6], value[6:8], value[8:10])
- raise ValidationError(self.error_messages['invalid'])
-
-class CHStateSelect(Select):
- """
- A Select widget that uses a list of CH states as its choices.
- """
- def __init__(self, attrs=None):
- from ch_states import STATE_CHOICES # relative import
- super(CHStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
-
-class CHIdentityCardNumberField(Field):
- """
- A Swiss identity card number.
-
- Checks the following rules to determine whether the number is valid:
-
- * Conforms to the X1234567<0 or 1234567890 format.
- * Included checksums match calculated checksums
-
- Algorithm is documented at http://adi.kousz.ch/artikel/IDCHE.htm
- """
- default_error_messages = {
- 'invalid': _('Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.'),
- }
-
- def has_valid_checksum(self, number):
- given_number, given_checksum = number[:-1], number[-1]
- new_number = given_number
- calculated_checksum = 0
- fragment = ""
- parameter = 7
-
- first = str(number[:1])
- if first.isalpha():
- num = ord(first.upper()) - 65
- if num < 0 or num > 8:
- return False
- new_number = str(num) + new_number[1:]
- new_number = new_number[:8] + '0'
-
- if not new_number.isdigit():
- return False
-
- for i in range(len(new_number)):
- fragment = int(new_number[i])*parameter
- calculated_checksum += fragment
-
- if parameter == 1:
- parameter = 7
- elif parameter == 3:
- parameter = 1
- elif parameter ==7:
- parameter = 3
-
- return str(calculated_checksum)[-1] == given_checksum
-
- def clean(self, value):
- super(CHIdentityCardNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- match = re.match(id_re, value)
- if not match:
- raise ValidationError(self.error_messages['invalid'])
-
- idnumber, pos9, checksum = match.groupdict()['idnumber'], match.groupdict()['pos9'], match.groupdict()['checksum']
-
- if idnumber == '00000000' or \
- idnumber == 'A0000000':
- raise ValidationError(self.error_messages['invalid'])
-
- all_digits = "%s%s%s" % (idnumber, pos9, checksum)
- if not self.has_valid_checksum(all_digits):
- raise ValidationError(self.error_messages['invalid'])
-
- return u'%s%s%s' % (idnumber, pos9, checksum)
-
diff --git a/parts/django/django/contrib/localflavor/cl/__init__.py b/parts/django/django/contrib/localflavor/cl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/cl/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/cl/cl_regions.py b/parts/django/django/contrib/localflavor/cl/cl_regions.py
deleted file mode 100644
index 47db6d3..0000000
--- a/parts/django/django/contrib/localflavor/cl/cl_regions.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-A list of Chilean regions as `choices` in a formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-REGION_CHOICES = (
- ('RM', u'Región Metropolitana de Santiago'),
- ('I', u'Región de Tarapacá'),
- ('II', u'Región de Antofagasta'),
- ('III', u'Región de Atacama'),
- ('IV', u'Región de Coquimbo'),
- ('V', u'Región de Valparaíso'),
- ('VI', u'Región del Libertador Bernardo O\'Higgins'),
- ('VII', u'Región del Maule'),
- ('VIII',u'Región del Bío Bío'),
- ('IX', u'Región de la Araucanía'),
- ('X', u'Región de los Lagos'),
- ('XI', u'Región de Aysén del General Carlos Ibáñez del Campo'),
- ('XII', u'Región de Magallanes y la Antártica Chilena'),
- ('XIV', u'Región de Los Ríos'),
- ('XV', u'Región de Arica-Parinacota'),
-)
diff --git a/parts/django/django/contrib/localflavor/cl/forms.py b/parts/django/django/contrib/localflavor/cl/forms.py
deleted file mode 100644
index 48219e8..0000000
--- a/parts/django/django/contrib/localflavor/cl/forms.py
+++ /dev/null
@@ -1,95 +0,0 @@
-"""
-Chile specific form helpers.
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-
-
-class CLRegionSelect(Select):
- """
- A Select widget that uses a list of Chilean Regions (Regiones)
- as its choices.
- """
- def __init__(self, attrs=None):
- from cl_regions import REGION_CHOICES
- super(CLRegionSelect, self).__init__(attrs, choices=REGION_CHOICES)
-
-class CLRutField(RegexField):
- """
- Chilean "Rol Unico Tributario" (RUT) field. This is the Chilean national
- identification number.
-
- Samples for testing are available from
- https://palena.sii.cl/cvc/dte/ee_empresas_emisoras.html
- """
- default_error_messages = {
- 'invalid': _('Enter a valid Chilean RUT.'),
- 'strict': _('Enter a valid Chilean RUT. The format is XX.XXX.XXX-X.'),
- 'checksum': _('The Chilean RUT is not valid.'),
- }
-
- def __init__(self, *args, **kwargs):
- if 'strict' in kwargs:
- del kwargs['strict']
- super(CLRutField, self).__init__(r'^(\d{1,2}\.)?\d{3}\.\d{3}-[\dkK]$',
- error_message=self.default_error_messages['strict'], *args, **kwargs)
- else:
- # In non-strict mode, accept RUTs that validate but do not exist in
- # the real world.
- super(CLRutField, self).__init__(r'^[\d\.]{1,11}-?[\dkK]$', *args, **kwargs)
-
- def clean(self, value):
- """
- Check and clean the Chilean RUT.
- """
- super(CLRutField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- rut, verificador = self._canonify(value)
- if self._algorithm(rut) == verificador:
- return self._format(rut, verificador)
- else:
- raise ValidationError(self.error_messages['checksum'])
-
- def _algorithm(self, rut):
- """
- Takes RUT in pure canonical form, calculates the verifier digit.
- """
- suma = 0
- multi = 2
- for r in rut[::-1]:
- suma += int(r) * multi
- multi += 1
- if multi == 8:
- multi = 2
- return u'0123456789K0'[11 - suma % 11]
-
- def _canonify(self, rut):
- """
- Turns the RUT into one normalized format. Returns a (rut, verifier)
- tuple.
- """
- rut = smart_unicode(rut).replace(' ', '').replace('.', '').replace('-', '')
- return rut[:-1], rut[-1]
-
- def _format(self, code, verifier=None):
- """
- Formats the RUT from canonical form to the common string representation.
- If verifier=None, then the last digit in 'code' is the verifier.
- """
- if verifier is None:
- verifier = code[-1]
- code = code[:-1]
- while len(code) > 3 and '.' not in code[:3]:
- pos = code.find('.')
- if pos == -1:
- new_dot = -3
- else:
- new_dot = pos - 3
- code = code[:new_dot] + '.' + code[new_dot:]
- return u'%s-%s' % (code, verifier)
-
diff --git a/parts/django/django/contrib/localflavor/cz/__init__.py b/parts/django/django/contrib/localflavor/cz/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/cz/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/cz/cz_regions.py b/parts/django/django/contrib/localflavor/cz/cz_regions.py
deleted file mode 100644
index 51827e3..0000000
--- a/parts/django/django/contrib/localflavor/cz/cz_regions.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""
-Czech regions, translations get from http://www.crwflags.com/fotw/Flags/cz-re.html
-"""
-
-from django.utils.translation import ugettext_lazy as _
-
-REGION_CHOICES = (
- ('PR', _('Prague')),
- ('CE', _('Central Bohemian Region')),
- ('SO', _('South Bohemian Region')),
- ('PI', _('Pilsen Region')),
- ('CA', _('Carlsbad Region')),
- ('US', _('Usti Region')),
- ('LB', _('Liberec Region')),
- ('HK', _('Hradec Region')),
- ('PA', _('Pardubice Region')),
- ('VY', _('Vysocina Region')),
- ('SM', _('South Moravian Region')),
- ('OL', _('Olomouc Region')),
- ('ZL', _('Zlin Region')),
- ('MS', _('Moravian-Silesian Region')),
-)
diff --git a/parts/django/django/contrib/localflavor/cz/forms.py b/parts/django/django/contrib/localflavor/cz/forms.py
deleted file mode 100644
index 655e5ce..0000000
--- a/parts/django/django/contrib/localflavor/cz/forms.py
+++ /dev/null
@@ -1,141 +0,0 @@
-"""
-Czech-specific form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Select, RegexField, Field
-from django.utils.translation import ugettext_lazy as _
-import re
-
-birth_number = re.compile(r'^(?P<birth>\d{6})/?(?P<id>\d{3,4})$')
-ic_number = re.compile(r'^(?P<number>\d{7})(?P<check>\d)$')
-
-class CZRegionSelect(Select):
- """
- A select widget widget with list of Czech regions as choices.
- """
- def __init__(self, attrs=None):
- from cz_regions import REGION_CHOICES
- super(CZRegionSelect, self).__init__(attrs, choices=REGION_CHOICES)
-
-class CZPostalCodeField(RegexField):
- """
- A form field that validates its input as Czech postal code.
- Valid form is XXXXX or XXX XX, where X represents integer.
- """
- default_error_messages = {
- 'invalid': _(u'Enter a postal code in the format XXXXX or XXX XX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(CZPostalCodeField, self).__init__(r'^\d{5}$|^\d{3} \d{2}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self, value):
- """
- Validates the input and returns a string that contains only numbers.
- Returns an empty string for empty values.
- """
- v = super(CZPostalCodeField, self).clean(value)
- return v.replace(' ', '')
-
-class CZBirthNumberField(Field):
- """
- Czech birth number field.
- """
- default_error_messages = {
- 'invalid_format': _(u'Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX.'),
- 'invalid_gender': _(u'Invalid optional parameter Gender, valid values are \'f\' and \'m\''),
- 'invalid': _(u'Enter a valid birth number.'),
- }
-
- def clean(self, value, gender=None):
- super(CZBirthNumberField, self).clean(value)
-
- if value in EMPTY_VALUES:
- return u''
-
- match = re.match(birth_number, value)
- if not match:
- raise ValidationError(self.error_messages['invalid_format'])
-
- birth, id = match.groupdict()['birth'], match.groupdict()['id']
-
- # Three digits for verificatin number were used until 1. january 1954
- if len(id) == 3:
- return u'%s' % value
-
- # Birth number is in format YYMMDD. Females have month value raised by 50.
- # In case that all possible number are already used (for given date),
- # the month field is raised by 20.
- if gender is not None:
- if gender == 'f':
- female_const = 50
- elif gender == 'm':
- female_const = 0
- else:
- raise ValidationError(self.error_messages['invalid_gender'])
-
- month = int(birth[2:4]) - female_const
- if (not 1 <= month <= 12):
- if (not 1 <= (month - 20) <= 12):
- raise ValidationError(self.error_messages['invalid'])
-
- day = int(birth[4:6])
- if not (1 <= day <= 31):
- raise ValidationError(self.error_messages['invalid'])
-
- # Fourth digit has been added since 1. January 1954.
- # It is modulo of dividing birth number and verification number by 11.
- # If the modulo were 10, the last number was 0 (and therefore, the whole
- # birth number wasn't divisable by 11. These number are no longer used (since 1985)
- # and the condition 'modulo == 10' can be removed in 2085.
-
- modulo = int(birth + id[:3]) % 11
-
- if (modulo == int(id[-1])) or (modulo == 10 and id[-1] == '0'):
- return u'%s' % value
- else:
- raise ValidationError(self.error_messages['invalid'])
-
-class CZICNumberField(Field):
- """
- Czech IC number field.
- """
- default_error_messages = {
- 'invalid': _(u'Enter a valid IC number.'),
- }
-
- def clean(self, value):
- super(CZICNumberField, self).clean(value)
-
- if value in EMPTY_VALUES:
- return u''
-
- match = re.match(ic_number, value)
- if not match:
- raise ValidationError(self.error_messages['invalid'])
-
- number, check = match.groupdict()['number'], int(match.groupdict()['check'])
-
- sum = 0
- weight = 8
- for digit in number:
- sum += int(digit)*weight
- weight -= 1
-
- remainder = sum % 11
-
- # remainder is equal:
- # 0 or 10: last digit is 1
- # 1: last digit is 0
- # in other case, last digin is 11 - remainder
-
- if (not remainder % 10 and check == 1) or \
- (remainder == 1 and check == 0) or \
- (check == (11 - remainder)):
- return u'%s' % value
-
- raise ValidationError(self.error_messages['invalid'])
-
diff --git a/parts/django/django/contrib/localflavor/de/__init__.py b/parts/django/django/contrib/localflavor/de/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/de/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/de/de_states.py b/parts/django/django/contrib/localflavor/de/de_states.py
deleted file mode 100644
index 2872a78..0000000
--- a/parts/django/django/contrib/localflavor/de/de_states.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*
-from django.utils.translation import ugettext_lazy as _
-
-STATE_CHOICES = (
- ('BW', _('Baden-Wuerttemberg')),
- ('BY', _('Bavaria')),
- ('BE', _('Berlin')),
- ('BB', _('Brandenburg')),
- ('HB', _('Bremen')),
- ('HH', _('Hamburg')),
- ('HE', _('Hessen')),
- ('MV', _('Mecklenburg-Western Pomerania')),
- ('NI', _('Lower Saxony')),
- ('NW', _('North Rhine-Westphalia')),
- ('RP', _('Rhineland-Palatinate')),
- ('SL', _('Saarland')),
- ('SN', _('Saxony')),
- ('ST', _('Saxony-Anhalt')),
- ('SH', _('Schleswig-Holstein')),
- ('TH', _('Thuringia')),
-)
diff --git a/parts/django/django/contrib/localflavor/de/forms.py b/parts/django/django/contrib/localflavor/de/forms.py
deleted file mode 100644
index a785a71..0000000
--- a/parts/django/django/contrib/localflavor/de/forms.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-DE-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-import re
-
-id_re = re.compile(r"^(?P<residence>\d{10})(?P<origin>\w{1,3})[-\ ]?(?P<birthday>\d{7})[-\ ]?(?P<validity>\d{7})[-\ ]?(?P<checksum>\d{1})$")
-
-class DEZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXXX.'),
- }
- def __init__(self, *args, **kwargs):
- super(DEZipCodeField, self).__init__(r'^\d{5}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class DEStateSelect(Select):
- """
- A Select widget that uses a list of DE states as its choices.
- """
- def __init__(self, attrs=None):
- from de_states import STATE_CHOICES
- super(DEStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
-
-class DEIdentityCardNumberField(Field):
- """
- A German identity card number.
-
- Checks the following rules to determine whether the number is valid:
-
- * Conforms to the XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.
- * No group consists entirely of zeroes.
- * Included checksums match calculated checksums
-
- Algorithm is documented at http://de.wikipedia.org/wiki/Personalausweis
- """
- default_error_messages = {
- 'invalid': _('Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.'),
- }
-
- def has_valid_checksum(self, number):
- given_number, given_checksum = number[:-1], number[-1]
- calculated_checksum = 0
- fragment = ""
- parameter = 7
-
- for i in range(len(given_number)):
- fragment = str(int(given_number[i]) * parameter)
- if fragment.isalnum():
- calculated_checksum += int(fragment[-1])
- if parameter == 1:
- parameter = 7
- elif parameter == 3:
- parameter = 1
- elif parameter ==7:
- parameter = 3
-
- return str(calculated_checksum)[-1] == given_checksum
-
- def clean(self, value):
- super(DEIdentityCardNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- match = re.match(id_re, value)
- if not match:
- raise ValidationError(self.error_messages['invalid'])
-
- gd = match.groupdict()
- residence, origin = gd['residence'], gd['origin']
- birthday, validity, checksum = gd['birthday'], gd['validity'], gd['checksum']
-
- if residence == '0000000000' or birthday == '0000000' or validity == '0000000':
- raise ValidationError(self.error_messages['invalid'])
-
- all_digits = u"%s%s%s%s" % (residence, birthday, validity, checksum)
- if not self.has_valid_checksum(residence) or not self.has_valid_checksum(birthday) or \
- not self.has_valid_checksum(validity) or not self.has_valid_checksum(all_digits):
- raise ValidationError(self.error_messages['invalid'])
-
- return u'%s%s-%s-%s-%s' % (residence, origin, birthday, validity, checksum)
diff --git a/parts/django/django/contrib/localflavor/es/__init__.py b/parts/django/django/contrib/localflavor/es/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/es/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/es/es_provinces.py b/parts/django/django/contrib/localflavor/es/es_provinces.py
deleted file mode 100644
index 9f5e126..0000000
--- a/parts/django/django/contrib/localflavor/es/es_provinces.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.utils.translation import ugettext_lazy as _
-
-PROVINCE_CHOICES = (
- ('01', _('Arava')),
- ('02', _('Albacete')),
- ('03', _('Alacant')),
- ('04', _('Almeria')),
- ('05', _('Avila')),
- ('06', _('Badajoz')),
- ('07', _('Illes Balears')),
- ('08', _('Barcelona')),
- ('09', _('Burgos')),
- ('10', _('Caceres')),
- ('11', _('Cadiz')),
- ('12', _('Castello')),
- ('13', _('Ciudad Real')),
- ('14', _('Cordoba')),
- ('15', _('A Coruna')),
- ('16', _('Cuenca')),
- ('17', _('Girona')),
- ('18', _('Granada')),
- ('19', _('Guadalajara')),
- ('20', _('Guipuzkoa')),
- ('21', _('Huelva')),
- ('22', _('Huesca')),
- ('23', _('Jaen')),
- ('24', _('Leon')),
- ('25', _('Lleida')),
- ('26', _('La Rioja')),
- ('27', _('Lugo')),
- ('28', _('Madrid')),
- ('29', _('Malaga')),
- ('30', _('Murcia')),
- ('31', _('Navarre')),
- ('32', _('Ourense')),
- ('33', _('Asturias')),
- ('34', _('Palencia')),
- ('35', _('Las Palmas')),
- ('36', _('Pontevedra')),
- ('37', _('Salamanca')),
- ('38', _('Santa Cruz de Tenerife')),
- ('39', _('Cantabria')),
- ('40', _('Segovia')),
- ('41', _('Seville')),
- ('42', _('Soria')),
- ('43', _('Tarragona')),
- ('44', _('Teruel')),
- ('45', _('Toledo')),
- ('46', _('Valencia')),
- ('47', _('Valladolid')),
- ('48', _('Bizkaia')),
- ('49', _('Zamora')),
- ('50', _('Zaragoza')),
- ('51', _('Ceuta')),
- ('52', _('Melilla')),
-)
-
diff --git a/parts/django/django/contrib/localflavor/es/es_regions.py b/parts/django/django/contrib/localflavor/es/es_regions.py
deleted file mode 100644
index 3c1ea0e..0000000
--- a/parts/django/django/contrib/localflavor/es/es_regions.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.utils.translation import ugettext_lazy as _
-
-REGION_CHOICES = (
- ('AN', _('Andalusia')),
- ('AR', _('Aragon')),
- ('O', _('Principality of Asturias')),
- ('IB', _('Balearic Islands')),
- ('PV', _('Basque Country')),
- ('CN', _('Canary Islands')),
- ('S', _('Cantabria')),
- ('CM', _('Castile-La Mancha')),
- ('CL', _('Castile and Leon')),
- ('CT', _('Catalonia')),
- ('EX', _('Extremadura')),
- ('GA', _('Galicia')),
- ('LO', _('La Rioja')),
- ('M', _('Madrid')),
- ('MU', _('Region of Murcia')),
- ('NA', _('Foral Community of Navarre')),
- ('VC', _('Valencian Community')),
-)
-
diff --git a/parts/django/django/contrib/localflavor/es/forms.py b/parts/django/django/contrib/localflavor/es/forms.py
deleted file mode 100644
index b61860d..0000000
--- a/parts/django/django/contrib/localflavor/es/forms.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Spanish-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-import re
-
-class ESPostalCodeField(RegexField):
- """
- A form field that validates its input as a spanish postal code.
-
- Spanish postal code is a five digits string, with two first digits
- between 01 and 52, assigned to provinces code.
- """
- default_error_messages = {
- 'invalid': _('Enter a valid postal code in the range and format 01XXX - 52XXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ESPostalCodeField, self).__init__(
- r'^(0[1-9]|[1-4][0-9]|5[0-2])\d{3}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class ESPhoneNumberField(RegexField):
- """
- A form field that validates its input as a Spanish phone number.
- Information numbers are ommited.
-
- Spanish phone numbers are nine digit numbers, where first digit is 6 (for
- cell phones), 8 (for special phones), or 9 (for landlines and special
- phones)
-
- TODO: accept and strip characters like dot, hyphen... in phone number
- """
- default_error_messages = {
- 'invalid': _('Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ESPhoneNumberField, self).__init__(r'^(6|8|9)\d{8}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class ESIdentityCardNumberField(RegexField):
- """
- Spanish NIF/NIE/CIF (Fiscal Identification Number) code.
-
- Validates three diferent formats:
-
- NIF (individuals): 12345678A
- CIF (companies): A12345678
- NIE (foreigners): X12345678A
-
- according to a couple of simple checksum algorithms.
-
- Value can include a space or hyphen separator between number and letters.
- Number length is not checked for NIF (or NIE), old values start with a 1,
- and future values can contain digits greater than 8. The CIF control digit
- can be a number or a letter depending on company type. Algorithm is not
- public, and different authors have different opinions on which ones allows
- letters, so both validations are assumed true for all types.
- """
- default_error_messages = {
- 'invalid': _('Please enter a valid NIF, NIE, or CIF.'),
- 'invalid_only_nif': _('Please enter a valid NIF or NIE.'),
- 'invalid_nif': _('Invalid checksum for NIF.'),
- 'invalid_nie': _('Invalid checksum for NIE.'),
- 'invalid_cif': _('Invalid checksum for CIF.'),
- }
-
- def __init__(self, only_nif=False, *args, **kwargs):
- self.only_nif = only_nif
- self.nif_control = 'TRWAGMYFPDXBNJZSQVHLCKE'
- self.cif_control = 'JABCDEFGHI'
- self.cif_types = 'ABCDEFGHKLMNPQS'
- self.nie_types = 'XT'
- id_card_re = re.compile(r'^([%s]?)[ -]?(\d+)[ -]?([%s]?)$' % (self.cif_types + self.nie_types, self.nif_control + self.cif_control), re.IGNORECASE)
- super(ESIdentityCardNumberField, self).__init__(id_card_re, max_length=None, min_length=None,
- error_message=self.default_error_messages['invalid%s' % (self.only_nif and '_only_nif' or '')],
- *args, **kwargs)
-
- def clean(self, value):
- super(ESIdentityCardNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- nif_get_checksum = lambda d: self.nif_control[int(d)%23]
-
- value = value.upper().replace(' ', '').replace('-', '')
- m = re.match(r'^([%s]?)[ -]?(\d+)[ -]?([%s]?)$' % (self.cif_types + self.nie_types, self.nif_control + self.cif_control), value)
- letter1, number, letter2 = m.groups()
-
- if not letter1 and letter2:
- # NIF
- if letter2 == nif_get_checksum(number):
- return value
- else:
- raise ValidationError(self.error_messages['invalid_nif'])
- elif letter1 in self.nie_types and letter2:
- # NIE
- if letter2 == nif_get_checksum(number):
- return value
- else:
- raise ValidationError(self.error_messages['invalid_nie'])
- elif not self.only_nif and letter1 in self.cif_types and len(number) in [7, 8]:
- # CIF
- if not letter2:
- number, letter2 = number[:-1], int(number[-1])
- checksum = cif_get_checksum(number)
- if letter2 in (checksum, self.cif_control[checksum]):
- return value
- else:
- raise ValidationError(self.error_messages['invalid_cif'])
- else:
- raise ValidationError(self.error_messages['invalid'])
-
-class ESCCCField(RegexField):
- """
- A form field that validates its input as a Spanish bank account or CCC
- (Codigo Cuenta Cliente).
-
- Spanish CCC is in format EEEE-OOOO-CC-AAAAAAAAAA where:
-
- E = entity
- O = office
- C = checksum
- A = account
-
- It's also valid to use a space as delimiter, or to use no delimiter.
-
- First checksum digit validates entity and office, and last one
- validates account. Validation is done multiplying every digit of 10
- digit value (with leading 0 if necessary) by number in its position in
- string 1, 2, 4, 8, 5, 10, 9, 7, 3, 6. Sum resulting numbers and extract
- it from 11. Result is checksum except when 10 then is 1, or when 11
- then is 0.
-
- TODO: allow IBAN validation too
- """
- default_error_messages = {
- 'invalid': _('Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX.'),
- 'checksum': _('Invalid checksum for bank account number.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ESCCCField, self).__init__(r'^\d{4}[ -]?\d{4}[ -]?\d{2}[ -]?\d{10}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self, value):
- super(ESCCCField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- control_str = [1, 2, 4, 8, 5, 10, 9, 7, 3, 6]
- m = re.match(r'^(\d{4})[ -]?(\d{4})[ -]?(\d{2})[ -]?(\d{10})$', value)
- entity, office, checksum, account = m.groups()
- get_checksum = lambda d: str(11 - sum([int(digit) * int(control) for digit, control in zip(d, control_str)]) % 11).replace('10', '1').replace('11', '0')
- if get_checksum('00' + entity + office) + get_checksum(account) == checksum:
- return value
- else:
- raise ValidationError(self.error_messages['checksum'])
-
-class ESRegionSelect(Select):
- """
- A Select widget that uses a list of spanish regions as its choices.
- """
- def __init__(self, attrs=None):
- from es_regions import REGION_CHOICES
- super(ESRegionSelect, self).__init__(attrs, choices=REGION_CHOICES)
-
-class ESProvinceSelect(Select):
- """
- A Select widget that uses a list of spanish provinces as its choices.
- """
- def __init__(self, attrs=None):
- from es_provinces import PROVINCE_CHOICES
- super(ESProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)
-
-
-def cif_get_checksum(number):
- s1 = sum([int(digit) for pos, digit in enumerate(number) if int(pos) % 2])
- s2 = sum([sum([int(unit) for unit in str(int(digit) * 2)]) for pos, digit in enumerate(number) if not int(pos) % 2])
- return (10 - ((s1 + s2) % 10)) % 10
-
diff --git a/parts/django/django/contrib/localflavor/fi/__init__.py b/parts/django/django/contrib/localflavor/fi/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/fi/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/fi/fi_municipalities.py b/parts/django/django/contrib/localflavor/fi/fi_municipalities.py
deleted file mode 100644
index 4b8b886..0000000
--- a/parts/django/django/contrib/localflavor/fi/fi_municipalities.py
+++ /dev/null
@@ -1,353 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-An alphabetical list of Finnish municipalities for use as `choices` in a
-formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-MUNICIPALITY_CHOICES = (
- ('akaa', u"Akaa"),
- ('alajarvi', u"Alajärvi"),
- ('alavieska', u"Alavieska"),
- ('alavus', u"Alavus"),
- ('artjarvi', u"Artjärvi"),
- ('asikkala', u"Asikkala"),
- ('askola', u"Askola"),
- ('aura', u"Aura"),
- ('brando', u"Brändö"),
- ('eckero', u"Eckerö"),
- ('enonkoski', u"Enonkoski"),
- ('enontekio', u"Enontekiö"),
- ('espoo', u"Espoo"),
- ('eura', u"Eura"),
- ('eurajoki', u"Eurajoki"),
- ('evijarvi', u"Evijärvi"),
- ('finstrom', u"Finström"),
- ('forssa', u"Forssa"),
- ('foglo', u"Föglö"),
- ('geta', u"Geta"),
- ('haapajarvi', u"Haapajärvi"),
- ('haapavesi', u"Haapavesi"),
- ('hailuoto', u"Hailuoto"),
- ('halsua', u"Halsua"),
- ('hamina', u"Hamina"),
- ('hammarland', u"Hammarland"),
- ('hankasalmi', u"Hankasalmi"),
- ('hanko', u"Hanko"),
- ('harjavalta', u"Harjavalta"),
- ('hartola', u"Hartola"),
- ('hattula', u"Hattula"),
- ('haukipudas', u"Haukipudas"),
- ('hausjarvi', u"Hausjärvi"),
- ('heinola', u"Heinola"),
- ('heinavesi', u"Heinävesi"),
- ('helsinki', u"Helsinki"),
- ('hirvensalmi', u"Hirvensalmi"),
- ('hollola', u"Hollola"),
- ('honkajoki', u"Honkajoki"),
- ('huittinen', u"Huittinen"),
- ('humppila', u"Humppila"),
- ('hyrynsalmi', u"Hyrynsalmi"),
- ('hyvinkaa', u"Hyvinkää"),
- ('hameenkoski', u"Hämeenkoski"),
- ('hameenkyro', u"Hämeenkyrö"),
- ('hameenlinna', u"Hämeenlinna"),
- ('ii', u"Ii"),
- ('iisalmi', u"Iisalmi"),
- ('iitti', u"Iitti"),
- ('ikaalinen', u"Ikaalinen"),
- ('ilmajoki', u"Ilmajoki"),
- ('ilomantsi', u"Ilomantsi"),
- ('imatra', u"Imatra"),
- ('inari', u"Inari"),
- ('inkoo', u"Inkoo"),
- ('isojoki', u"Isojoki"),
- ('isokyro', u"Isokyrö"),
- ('jalasjarvi', u"Jalasjärvi"),
- ('janakkala', u"Janakkala"),
- ('joensuu', u"Joensuu"),
- ('jokioinen', u"Jokioinen"),
- ('jomala', u"Jomala"),
- ('joroinen', u"Joroinen"),
- ('joutsa', u"Joutsa"),
- ('juankoski', u"Juankoski"),
- ('juuka', u"Juuka"),
- ('juupajoki', u"Juupajoki"),
- ('juva', u"Juva"),
- ('jyvaskyla', u"Jyväskylä"),
- ('jamijarvi', u"Jämijärvi"),
- ('jamsa', u"Jämsä"),
- ('jarvenpaa', u"Järvenpää"),
- ('kaarina', u"Kaarina"),
- ('kaavi', u"Kaavi"),
- ('kajaani', u"Kajaani"),
- ('kalajoki', u"Kalajoki"),
- ('kangasala', u"Kangasala"),
- ('kangasniemi', u"Kangasniemi"),
- ('kankaanpaa', u"Kankaanpää"),
- ('kannonkoski', u"Kannonkoski"),
- ('kannus', u"Kannus"),
- ('karijoki', u"Karijoki"),
- ('karjalohja', u"Karjalohja"),
- ('karkkila', u"Karkkila"),
- ('karstula', u"Karstula"),
- ('karttula', u"Karttula"),
- ('karvia', u"Karvia"),
- ('kaskinen', u"Kaskinen"),
- ('kauhajoki', u"Kauhajoki"),
- ('kauhava', u"Kauhava"),
- ('kauniainen', u"Kauniainen"),
- ('kaustinen', u"Kaustinen"),
- ('keitele', u"Keitele"),
- ('kemi', u"Kemi"),
- ('kemijarvi', u"Kemijärvi"),
- ('keminmaa', u"Keminmaa"),
- ('kemionsaari', u"Kemiönsaari"),
- ('kempele', u"Kempele"),
- ('kerava', u"Kerava"),
- ('kerimaki', u"Kerimäki"),
- ('kesalahti', u"Kesälahti"),
- ('keuruu', u"Keuruu"),
- ('kihnio', u"Kihniö"),
- ('kiikoinen', u"Kiikoinen"),
- ('kiiminki', u"Kiiminki"),
- ('kinnula', u"Kinnula"),
- ('kirkkonummi', u"Kirkkonummi"),
- ('kitee', u"Kitee"),
- ('kittila', u"Kittilä"),
- ('kiuruvesi', u"Kiuruvesi"),
- ('kivijarvi', u"Kivijärvi"),
- ('kokemaki', u"Kokemäki"),
- ('kokkola', u"Kokkola"),
- ('kolari', u"Kolari"),
- ('konnevesi', u"Konnevesi"),
- ('kontiolahti', u"Kontiolahti"),
- ('korsnas', u"Korsnäs"),
- ('koskitl', u"Koski Tl"),
- ('kotka', u"Kotka"),
- ('kouvola', u"Kouvola"),
- ('kristiinankaupunki', u"Kristiinankaupunki"),
- ('kruunupyy', u"Kruunupyy"),
- ('kuhmalahti', u"Kuhmalahti"),
- ('kuhmo', u"Kuhmo"),
- ('kuhmoinen', u"Kuhmoinen"),
- ('kumlinge', u"Kumlinge"),
- ('kuopio', u"Kuopio"),
- ('kuortane', u"Kuortane"),
- ('kurikka', u"Kurikka"),
- ('kustavi', u"Kustavi"),
- ('kuusamo', u"Kuusamo"),
- ('kylmakoski', u"Kylmäkoski"),
- ('kyyjarvi', u"Kyyjärvi"),
- ('karkola', u"Kärkölä"),
- ('karsamaki', u"Kärsämäki"),
- ('kokar', u"Kökar"),
- ('koylio', u"Köyliö"),
- ('lahti', u"Lahti"),
- ('laihia', u"Laihia"),
- ('laitila', u"Laitila"),
- ('lapinjarvi', u"Lapinjärvi"),
- ('lapinlahti', u"Lapinlahti"),
- ('lappajarvi', u"Lappajärvi"),
- ('lappeenranta', u"Lappeenranta"),
- ('lapua', u"Lapua"),
- ('laukaa', u"Laukaa"),
- ('lavia', u"Lavia"),
- ('lemi', u"Lemi"),
- ('lemland', u"Lemland"),
- ('lempaala', u"Lempäälä"),
- ('leppavirta', u"Leppävirta"),
- ('lestijarvi', u"Lestijärvi"),
- ('lieksa', u"Lieksa"),
- ('lieto', u"Lieto"),
- ('liminka', u"Liminka"),
- ('liperi', u"Liperi"),
- ('lohja', u"Lohja"),
- ('loimaa', u"Loimaa"),
- ('loppi', u"Loppi"),
- ('loviisa', u"Loviisa"),
- ('luhanka', u"Luhanka"),
- ('lumijoki', u"Lumijoki"),
- ('lumparland', u"Lumparland"),
- ('luoto', u"Luoto"),
- ('luumaki', u"Luumäki"),
- ('luvia', u"Luvia"),
- ('lansi-turunmaa', u"Länsi-Turunmaa"),
- ('maalahti', u"Maalahti"),
- ('maaninka', u"Maaninka"),
- ('maarianhamina', u"Maarianhamina"),
- ('marttila', u"Marttila"),
- ('masku', u"Masku"),
- ('merijarvi', u"Merijärvi"),
- ('merikarvia', u"Merikarvia"),
- ('miehikkala', u"Miehikkälä"),
- ('mikkeli', u"Mikkeli"),
- ('muhos', u"Muhos"),
- ('multia', u"Multia"),
- ('muonio', u"Muonio"),
- ('mustasaari', u"Mustasaari"),
- ('muurame', u"Muurame"),
- ('mynamaki', u"Mynämäki"),
- ('myrskyla', u"Myrskylä"),
- ('mantsala', u"Mäntsälä"),
- ('mantta-vilppula', u"Mänttä-Vilppula"),
- ('mantyharju', u"Mäntyharju"),
- ('naantali', u"Naantali"),
- ('nakkila', u"Nakkila"),
- ('nastola', u"Nastola"),
- ('nilsia', u"Nilsiä"),
- ('nivala', u"Nivala"),
- ('nokia', u"Nokia"),
- ('nousiainen', u"Nousiainen"),
- ('nummi-pusula', u"Nummi-Pusula"),
- ('nurmes', u"Nurmes"),
- ('nurmijarvi', u"Nurmijärvi"),
- ('narpio', u"Närpiö"),
- ('oravainen', u"Oravainen"),
- ('orimattila', u"Orimattila"),
- ('oripaa', u"Oripää"),
- ('orivesi', u"Orivesi"),
- ('oulainen', u"Oulainen"),
- ('oulu', u"Oulu"),
- ('oulunsalo', u"Oulunsalo"),
- ('outokumpu', u"Outokumpu"),
- ('padasjoki', u"Padasjoki"),
- ('paimio', u"Paimio"),
- ('paltamo', u"Paltamo"),
- ('parikkala', u"Parikkala"),
- ('parkano', u"Parkano"),
- ('pedersore', u"Pedersöre"),
- ('pelkosenniemi', u"Pelkosenniemi"),
- ('pello', u"Pello"),
- ('perho', u"Perho"),
- ('pertunmaa', u"Pertunmaa"),
- ('petajavesi', u"Petäjävesi"),
- ('pieksamaki', u"Pieksämäki"),
- ('pielavesi', u"Pielavesi"),
- ('pietarsaari', u"Pietarsaari"),
- ('pihtipudas', u"Pihtipudas"),
- ('pirkkala', u"Pirkkala"),
- ('polvijarvi', u"Polvijärvi"),
- ('pomarkku', u"Pomarkku"),
- ('pori', u"Pori"),
- ('pornainen', u"Pornainen"),
- ('porvoo', u"Porvoo"),
- ('posio', u"Posio"),
- ('pudasjarvi', u"Pudasjärvi"),
- ('pukkila', u"Pukkila"),
- ('punkaharju', u"Punkaharju"),
- ('punkalaidun', u"Punkalaidun"),
- ('puolanka', u"Puolanka"),
- ('puumala', u"Puumala"),
- ('pyhtaa', u"Pyhtää"),
- ('pyhajoki', u"Pyhäjoki"),
- ('pyhajarvi', u"Pyhäjärvi"),
- ('pyhanta', u"Pyhäntä"),
- ('pyharanta', u"Pyhäranta"),
- ('palkane', u"Pälkäne"),
- ('poytya', u"Pöytyä"),
- ('raahe', u"Raahe"),
- ('raasepori', u"Raasepori"),
- ('raisio', u"Raisio"),
- ('rantasalmi', u"Rantasalmi"),
- ('ranua', u"Ranua"),
- ('rauma', u"Rauma"),
- ('rautalampi', u"Rautalampi"),
- ('rautavaara', u"Rautavaara"),
- ('rautjarvi', u"Rautjärvi"),
- ('reisjarvi', u"Reisjärvi"),
- ('riihimaki', u"Riihimäki"),
- ('ristiina', u"Ristiina"),
- ('ristijarvi', u"Ristijärvi"),
- ('rovaniemi', u"Rovaniemi"),
- ('ruokolahti', u"Ruokolahti"),
- ('ruovesi', u"Ruovesi"),
- ('rusko', u"Rusko"),
- ('raakkyla', u"Rääkkylä"),
- ('saarijarvi', u"Saarijärvi"),
- ('salla', u"Salla"),
- ('salo', u"Salo"),
- ('saltvik', u"Saltvik"),
- ('sastamala', u"Sastamala"),
- ('sauvo', u"Sauvo"),
- ('savitaipale', u"Savitaipale"),
- ('savonlinna', u"Savonlinna"),
- ('savukoski', u"Savukoski"),
- ('seinajoki', u"Seinäjoki"),
- ('sievi', u"Sievi"),
- ('siikainen', u"Siikainen"),
- ('siikajoki', u"Siikajoki"),
- ('siikalatva', u"Siikalatva"),
- ('siilinjarvi', u"Siilinjärvi"),
- ('simo', u"Simo"),
- ('sipoo', u"Sipoo"),
- ('siuntio', u"Siuntio"),
- ('sodankyla', u"Sodankylä"),
- ('soini', u"Soini"),
- ('somero', u"Somero"),
- ('sonkajarvi', u"Sonkajärvi"),
- ('sotkamo', u"Sotkamo"),
- ('sottunga', u"Sottunga"),
- ('sulkava', u"Sulkava"),
- ('sund', u"Sund"),
- ('suomenniemi', u"Suomenniemi"),
- ('suomussalmi', u"Suomussalmi"),
- ('suonenjoki', u"Suonenjoki"),
- ('sysma', u"Sysmä"),
- ('sakyla', u"Säkylä"),
- ('taipalsaari', u"Taipalsaari"),
- ('taivalkoski', u"Taivalkoski"),
- ('taivassalo', u"Taivassalo"),
- ('tammela', u"Tammela"),
- ('tampere', u"Tampere"),
- ('tarvasjoki', u"Tarvasjoki"),
- ('tervo', u"Tervo"),
- ('tervola', u"Tervola"),
- ('teuva', u"Teuva"),
- ('tohmajarvi', u"Tohmajärvi"),
- ('toholampi', u"Toholampi"),
- ('toivakka', u"Toivakka"),
- ('tornio', u"Tornio"),
- ('turku', u"Turku"),
- ('tuusniemi', u"Tuusniemi"),
- ('tuusula', u"Tuusula"),
- ('tyrnava', u"Tyrnävä"),
- ('toysa', u"Töysä"),
- ('ulvila', u"Ulvila"),
- ('urjala', u"Urjala"),
- ('utajarvi', u"Utajärvi"),
- ('utsjoki', u"Utsjoki"),
- ('uurainen', u"Uurainen"),
- ('uusikaarlepyy', u"Uusikaarlepyy"),
- ('uusikaupunki', u"Uusikaupunki"),
- ('vaala', u"Vaala"),
- ('vaasa', u"Vaasa"),
- ('valkeakoski', u"Valkeakoski"),
- ('valtimo', u"Valtimo"),
- ('vantaa', u"Vantaa"),
- ('varkaus', u"Varkaus"),
- ('varpaisjarvi', u"Varpaisjärvi"),
- ('vehmaa', u"Vehmaa"),
- ('vesanto', u"Vesanto"),
- ('vesilahti', u"Vesilahti"),
- ('veteli', u"Veteli"),
- ('vierema', u"Vieremä"),
- ('vihanti', u"Vihanti"),
- ('vihti', u"Vihti"),
- ('viitasaari', u"Viitasaari"),
- ('vimpeli', u"Vimpeli"),
- ('virolahti', u"Virolahti"),
- ('virrat', u"Virrat"),
- ('vardo', u"Vårdö"),
- ('vahakyro', u"Vähäkyrö"),
- ('voyri-maksamaa', u"Vöyri-Maksamaa"),
- ('yli-ii', u"Yli-Ii"),
- ('ylitornio', u"Ylitornio"),
- ('ylivieska', u"Ylivieska"),
- ('ylojarvi', u"Ylöjärvi"),
- ('ypaja', u"Ypäjä"),
- ('ahtari', u"Ähtäri"),
- ('aanekoski', u"Äänekoski")
-) \ No newline at end of file
diff --git a/parts/django/django/contrib/localflavor/fi/forms.py b/parts/django/django/contrib/localflavor/fi/forms.py
deleted file mode 100644
index 9c163c9..0000000
--- a/parts/django/django/contrib/localflavor/fi/forms.py
+++ /dev/null
@@ -1,51 +0,0 @@
-"""
-FI-specific Form helpers
-"""
-
-import re
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-
-class FIZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXXX.'),
- }
- def __init__(self, *args, **kwargs):
- super(FIZipCodeField, self).__init__(r'^\d{5}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class FIMunicipalitySelect(Select):
- """
- A Select widget that uses a list of Finnish municipalities as its choices.
- """
- def __init__(self, attrs=None):
- from fi_municipalities import MUNICIPALITY_CHOICES
- super(FIMunicipalitySelect, self).__init__(attrs, choices=MUNICIPALITY_CHOICES)
-
-class FISocialSecurityNumber(Field):
- default_error_messages = {
- 'invalid': _('Enter a valid Finnish social security number.'),
- }
-
- def clean(self, value):
- super(FISocialSecurityNumber, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- checkmarks = "0123456789ABCDEFHJKLMNPRSTUVWXY"
- result = re.match(r"""^
- (?P<date>([0-2]\d|3[01])
- (0\d|1[012])
- (\d{2}))
- [A+-]
- (?P<serial>(\d{3}))
- (?P<checksum>[%s])$""" % checkmarks, value, re.VERBOSE | re.IGNORECASE)
- if not result:
- raise ValidationError(self.error_messages['invalid'])
- gd = result.groupdict()
- checksum = int(gd['date'] + gd['serial'])
- if checkmarks[checksum % len(checkmarks)] == gd['checksum'].upper():
- return u'%s' % value.upper()
- raise ValidationError(self.error_messages['invalid'])
diff --git a/parts/django/django/contrib/localflavor/fr/__init__.py b/parts/django/django/contrib/localflavor/fr/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/fr/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/fr/forms.py b/parts/django/django/contrib/localflavor/fr/forms.py
deleted file mode 100644
index 963eadc..0000000
--- a/parts/django/django/contrib/localflavor/fr/forms.py
+++ /dev/null
@@ -1,51 +0,0 @@
-"""
-FR-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-import re
-
-phone_digits_re = re.compile(r'^0\d(\s|\.)?(\d{2}(\s|\.)?){3}\d{2}$')
-
-class FRZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(FRZipCodeField, self).__init__(r'^\d{5}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class FRPhoneNumberField(Field):
- """
- Validate local French phone number (not international ones)
- The correct format is '0X XX XX XX XX'.
- '0X.XX.XX.XX.XX' and '0XXXXXXXXX' validate but are corrected to
- '0X XX XX XX XX'.
- """
- default_error_messages = {
- 'invalid': _('Phone numbers must be in 0X XX XX XX XX format.'),
- }
-
- def clean(self, value):
- super(FRPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\.|\s)', '', smart_unicode(value))
- m = phone_digits_re.search(value)
- if m:
- return u'%s %s %s %s %s' % (value[0:2], value[2:4], value[4:6], value[6:8], value[8:10])
- raise ValidationError(self.error_messages['invalid'])
-
-class FRDepartmentSelect(Select):
- """
- A Select widget that uses a list of FR departments as its choices.
- """
- def __init__(self, attrs=None):
- from fr_department import DEPARTMENT_ASCII_CHOICES
- super(FRDepartmentSelect, self).__init__(attrs, choices=DEPARTMENT_ASCII_CHOICES)
-
diff --git a/parts/django/django/contrib/localflavor/fr/fr_department.py b/parts/django/django/contrib/localflavor/fr/fr_department.py
deleted file mode 100644
index bf7f74c..0000000
--- a/parts/django/django/contrib/localflavor/fr/fr_department.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# -*- coding: utf-8 -*-
-
-DEPARTMENT_ASCII_CHOICES = (
- ('01', '01 - Ain'),
- ('02', '02 - Aisne'),
- ('03', '03 - Allier'),
- ('04', '04 - Alpes-de-Haute-Provence'),
- ('05', '05 - Hautes-Alpes'),
- ('06', '06 - Alpes-Maritimes'),
- ('07', '07 - Ardeche'),
- ('08', '08 - Ardennes'),
- ('09', '09 - Ariege'),
- ('10', '10 - Aube'),
- ('11', '11 - Aude'),
- ('12', '12 - Aveyron'),
- ('13', '13 - Bouches-du-Rhone'),
- ('14', '14 - Calvados'),
- ('15', '15 - Cantal'),
- ('16', '16 - Charente'),
- ('17', '17 - Charente-Maritime'),
- ('18', '18 - Cher'),
- ('19', '19 - Correze'),
- ('21', '21 - Cote-d\'Or'),
- ('22', '22 - Cotes-d\'Armor'),
- ('23', '23 - Creuse'),
- ('24', '24 - Dordogne'),
- ('25', '25 - Doubs'),
- ('26', '26 - Drome'),
- ('27', '27 - Eure'),
- ('28', '28 - Eure-et-Loire'),
- ('29', '29 - Finistere'),
- ('2A', '2A - Corse-du-Sud'),
- ('2B', '2B - Haute-Corse'),
- ('30', '30 - Gard'),
- ('31', '31 - Haute-Garonne'),
- ('32', '32 - Gers'),
- ('33', '33 - Gironde'),
- ('34', '34 - Herault'),
- ('35', '35 - Ille-et-Vilaine'),
- ('36', '36 - Indre'),
- ('37', '37 - Indre-et-Loire'),
- ('38', '38 - Isere'),
- ('39', '39 - Jura'),
- ('40', '40 - Landes'),
- ('41', '41 - Loir-et-Cher'),
- ('42', '42 - Loire'),
- ('43', '43 - Haute-Loire'),
- ('44', '44 - Loire-Atlantique'),
- ('45', '45 - Loiret'),
- ('46', '46 - Lot'),
- ('47', '47 - Lot-et-Garonne'),
- ('48', '48 - Lozere'),
- ('49', '49 - Maine-et-Loire'),
- ('50', '50 - Manche'),
- ('51', '51 - Marne'),
- ('52', '52 - Haute-Marne'),
- ('53', '53 - Mayenne'),
- ('54', '54 - Meurthe-et-Moselle'),
- ('55', '55 - Meuse'),
- ('56', '56 - Morbihan'),
- ('57', '57 - Moselle'),
- ('58', '58 - Nievre'),
- ('59', '59 - Nord'),
- ('60', '60 - Oise'),
- ('61', '61 - Orne'),
- ('62', '62 - Pas-de-Calais'),
- ('63', '63 - Puy-de-Dome'),
- ('64', '64 - Pyrenees-Atlantiques'),
- ('65', '65 - Hautes-Pyrenees'),
- ('66', '66 - Pyrenees-Orientales'),
- ('67', '67 - Bas-Rhin'),
- ('68', '68 - Haut-Rhin'),
- ('69', '69 - Rhone'),
- ('70', '70 - Haute-Saone'),
- ('71', '71 - Saone-et-Loire'),
- ('72', '72 - Sarthe'),
- ('73', '73 - Savoie'),
- ('74', '74 - Haute-Savoie'),
- ('75', '75 - Paris'),
- ('76', '76 - Seine-Maritime'),
- ('77', '77 - Seine-et-Marne'),
- ('78', '78 - Yvelines'),
- ('79', '79 - Deux-Sevres'),
- ('80', '80 - Somme'),
- ('81', '81 - Tarn'),
- ('82', '82 - Tarn-et-Garonne'),
- ('83', '83 - Var'),
- ('84', '84 - Vaucluse'),
- ('85', '85 - Vendee'),
- ('86', '86 - Vienne'),
- ('87', '87 - Haute-Vienne'),
- ('88', '88 - Vosges'),
- ('89', '89 - Yonne'),
- ('90', '90 - Territoire de Belfort'),
- ('91', '91 - Essonne'),
- ('92', '92 - Hauts-de-Seine'),
- ('93', '93 - Seine-Saint-Denis'),
- ('94', '94 - Val-de-Marne'),
- ('95', '95 - Val-d\'Oise'),
- ('971', '971 - Guadeloupe'),
- ('972', '972 - Martinique'),
- ('973', '973 - Guyane'),
- ('974', '974 - La Reunion'),
- ('975', '975 - Saint-Pierre-et-Miquelon'),
- ('976', '976 - Mayotte'),
- ('984', '984 - Terres Australes et Antarctiques'),
- ('986', '986 - Wallis et Futuna'),
- ('987', '987 - Polynesie Francaise'),
- ('988', '988 - Nouvelle-Caledonie'),
-)
diff --git a/parts/django/django/contrib/localflavor/generic/__init__.py b/parts/django/django/contrib/localflavor/generic/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/generic/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/generic/forms.py b/parts/django/django/contrib/localflavor/generic/forms.py
deleted file mode 100644
index b040f68..0000000
--- a/parts/django/django/contrib/localflavor/generic/forms.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from django import forms
-
-DEFAULT_DATE_INPUT_FORMATS = (
- '%Y-%m-%d', '%d/%m/%Y', '%d/%m/%y', # '2006-10-25', '25/10/2006', '25/10/06'
- '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
- '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
- '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
-)
-
-DEFAULT_DATETIME_INPUT_FORMATS = (
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
- '%d/%m/%Y %H:%M', # '25/10/2006 14:30'
- '%d/%m/%Y', # '25/10/2006'
- '%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
- '%d/%m/%y %H:%M', # '25/10/06 14:30'
- '%d/%m/%y', # '25/10/06'
-)
-
-class DateField(forms.DateField):
- """
- A date input field which uses non-US date input formats by default.
- """
- def __init__(self, input_formats=None, *args, **kwargs):
- input_formats = input_formats or DEFAULT_DATE_INPUT_FORMATS
- super(DateField, self).__init__(input_formats=input_formats, *args, **kwargs)
-
-class DateTimeField(forms.DateTimeField):
- """
- A date and time input field which uses non-US date and time input formats
- by default.
- """
- def __init__(self, input_formats=None, *args, **kwargs):
- input_formats = input_formats or DEFAULT_DATETIME_INPUT_FORMATS
- super(DateTimeField, self).__init__(input_formats=input_formats, *args, **kwargs)
-
-class SplitDateTimeField(forms.SplitDateTimeField):
- """
- Split date and time input fields which use non-US date and time input
- formats by default.
- """
- def __init__(self, input_date_formats=None, input_time_formats=None, *args, **kwargs):
- input_date_formats = input_date_formats or DEFAULT_DATE_INPUT_FORMATS
- super(SplitDateTimeField, self).__init__(input_date_formats=input_date_formats,
- input_time_formats=input_time_formats, *args, **kwargs)
diff --git a/parts/django/django/contrib/localflavor/id/__init__.py b/parts/django/django/contrib/localflavor/id/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/id/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/id/forms.py b/parts/django/django/contrib/localflavor/id/forms.py
deleted file mode 100644
index 834e588..0000000
--- a/parts/django/django/contrib/localflavor/id/forms.py
+++ /dev/null
@@ -1,211 +0,0 @@
-"""
-ID-specific Form helpers
-"""
-
-import re
-import time
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, Select
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-
-postcode_re = re.compile(r'^[1-9]\d{4}$')
-phone_re = re.compile(r'^(\+62|0)[2-9]\d{7,10}$')
-plate_re = re.compile(r'^(?P<prefix>[A-Z]{1,2}) ' + \
- r'(?P<number>\d{1,5})( (?P<suffix>([A-Z]{1,3}|[1-9][0-9]{,2})))?$')
-nik_re = re.compile(r'^\d{16}$')
-
-
-class IDPostCodeField(Field):
- """
- An Indonesian post code field.
-
- http://id.wikipedia.org/wiki/Kode_pos
- """
- default_error_messages = {
- 'invalid': _('Enter a valid post code'),
- }
-
- def clean(self, value):
- super(IDPostCodeField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- value = value.strip()
- if not postcode_re.search(value):
- raise ValidationError(self.error_messages['invalid'])
-
- if int(value) < 10110:
- raise ValidationError(self.error_messages['invalid'])
-
- # 1xxx0
- if value[0] == '1' and value[4] != '0':
- raise ValidationError(self.error_messages['invalid'])
-
- return u'%s' % (value, )
-
-
-class IDProvinceSelect(Select):
- """
- A Select widget that uses a list of provinces of Indonesia as its
- choices.
- """
-
- def __init__(self, attrs=None):
- from id_choices import PROVINCE_CHOICES
- super(IDProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)
-
-
-class IDPhoneNumberField(Field):
- """
- An Indonesian telephone number field.
-
- http://id.wikipedia.org/wiki/Daftar_kode_telepon_di_Indonesia
- """
- default_error_messages = {
- 'invalid': _('Enter a valid phone number'),
- }
-
- def clean(self, value):
- super(IDPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- phone_number = re.sub(r'[\-\s\(\)]', '', smart_unicode(value))
-
- if phone_re.search(phone_number):
- return smart_unicode(value)
-
- raise ValidationError(self.error_messages['invalid'])
-
-
-class IDLicensePlatePrefixSelect(Select):
- """
- A Select widget that uses a list of vehicle license plate prefix code
- of Indonesia as its choices.
-
- http://id.wikipedia.org/wiki/Tanda_Nomor_Kendaraan_Bermotor
- """
-
- def __init__(self, attrs=None):
- from id_choices import LICENSE_PLATE_PREFIX_CHOICES
- super(IDLicensePlatePrefixSelect, self).__init__(attrs,
- choices=LICENSE_PLATE_PREFIX_CHOICES)
-
-
-class IDLicensePlateField(Field):
- """
- An Indonesian vehicle license plate field.
-
- http://id.wikipedia.org/wiki/Tanda_Nomor_Kendaraan_Bermotor
-
- Plus: "B 12345 12"
- """
- default_error_messages = {
- 'invalid': _('Enter a valid vehicle license plate number'),
- }
-
- def clean(self, value):
- super(IDLicensePlateField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- plate_number = re.sub(r'\s+', ' ',
- smart_unicode(value.strip())).upper()
-
- matches = plate_re.search(plate_number)
- if matches is None:
- raise ValidationError(self.error_messages['invalid'])
-
- # Make sure prefix is in the list of known codes.
- from id_choices import LICENSE_PLATE_PREFIX_CHOICES
- prefix = matches.group('prefix')
- if prefix not in [choice[0] for choice in LICENSE_PLATE_PREFIX_CHOICES]:
- raise ValidationError(self.error_messages['invalid'])
-
- # Only Jakarta (prefix B) can have 3 letter suffix.
- suffix = matches.group('suffix')
- if suffix is not None and len(suffix) == 3 and prefix != 'B':
- raise ValidationError(self.error_messages['invalid'])
-
- # RI plates don't have suffix.
- if prefix == 'RI' and suffix is not None and suffix != '':
- raise ValidationError(self.error_messages['invalid'])
-
- # Number can't be zero.
- number = matches.group('number')
- if number == '0':
- raise ValidationError(self.error_messages['invalid'])
-
- # CD, CC and B 12345 12
- if len(number) == 5 or prefix in ('CD', 'CC'):
- # suffix must be numeric and non-empty
- if re.match(r'^\d+$', suffix) is None:
- raise ValidationError(self.error_messages['invalid'])
-
- # Known codes range is 12-124
- if prefix in ('CD', 'CC') and not (12 <= int(number) <= 124):
- raise ValidationError(self.error_messages['invalid'])
- if len(number) == 5 and not (12 <= int(suffix) <= 124):
- raise ValidationError(self.error_messages['invalid'])
- else:
- # suffix must be non-numeric
- if suffix is not None and re.match(r'^[A-Z]{,3}$', suffix) is None:
- raise ValidationError(self.error_messages['invalid'])
-
- return plate_number
-
-
-class IDNationalIdentityNumberField(Field):
- """
- An Indonesian national identity number (NIK/KTP#) field.
-
- http://id.wikipedia.org/wiki/Nomor_Induk_Kependudukan
-
- xx.xxxx.ddmmyy.xxxx - 16 digits (excl. dots)
- """
- default_error_messages = {
- 'invalid': _('Enter a valid NIK/KTP number'),
- }
-
- def clean(self, value):
- super(IDNationalIdentityNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- value = re.sub(r'[\s.]', '', smart_unicode(value))
-
- if not nik_re.search(value):
- raise ValidationError(self.error_messages['invalid'])
-
- if int(value) == 0:
- raise ValidationError(self.error_messages['invalid'])
-
- def valid_nik_date(year, month, day):
- try:
- t1 = (int(year), int(month), int(day), 0, 0, 0, 0, 0, -1)
- d = time.mktime(t1)
- t2 = time.localtime(d)
- if t1[:3] != t2[:3]:
- return False
- else:
- return True
- except (OverflowError, ValueError):
- return False
-
- year = int(value[10:12])
- month = int(value[8:10])
- day = int(value[6:8])
- current_year = time.localtime().tm_year
- if year < int(str(current_year)[-2:]):
- if not valid_nik_date(2000 + int(year), month, day):
- raise ValidationError(self.error_messages['invalid'])
- elif not valid_nik_date(1900 + int(year), month, day):
- raise ValidationError(self.error_messages['invalid'])
-
- if value[:6] == '000000' or value[12:] == '0000':
- raise ValidationError(self.error_messages['invalid'])
-
- return '%s.%s.%s.%s' % (value[:2], value[2:6], value[6:12], value[12:])
diff --git a/parts/django/django/contrib/localflavor/id/id_choices.py b/parts/django/django/contrib/localflavor/id/id_choices.py
deleted file mode 100644
index ed1ea01..0000000
--- a/parts/django/django/contrib/localflavor/id/id_choices.py
+++ /dev/null
@@ -1,101 +0,0 @@
-from django.utils.translation import ugettext_lazy as _
-
-# Reference: http://id.wikipedia.org/wiki/Daftar_provinsi_Indonesia
-
-# Indonesia does not have an official Province code standard.
-# I decided to use unambiguous and consistent (some are common) 3-letter codes.
-
-PROVINCE_CHOICES = (
- ('BLI', _('Bali')),
- ('BTN', _('Banten')),
- ('BKL', _('Bengkulu')),
- ('DIY', _('Yogyakarta')),
- ('JKT', _('Jakarta')),
- ('GOR', _('Gorontalo')),
- ('JMB', _('Jambi')),
- ('JBR', _('Jawa Barat')),
- ('JTG', _('Jawa Tengah')),
- ('JTM', _('Jawa Timur')),
- ('KBR', _('Kalimantan Barat')),
- ('KSL', _('Kalimantan Selatan')),
- ('KTG', _('Kalimantan Tengah')),
- ('KTM', _('Kalimantan Timur')),
- ('BBL', _('Kepulauan Bangka-Belitung')),
- ('KRI', _('Kepulauan Riau')),
- ('LPG', _('Lampung')),
- ('MLK', _('Maluku')),
- ('MUT', _('Maluku Utara')),
- ('NAD', _('Nanggroe Aceh Darussalam')),
- ('NTB', _('Nusa Tenggara Barat')),
- ('NTT', _('Nusa Tenggara Timur')),
- ('PPA', _('Papua')),
- ('PPB', _('Papua Barat')),
- ('RIU', _('Riau')),
- ('SLB', _('Sulawesi Barat')),
- ('SLS', _('Sulawesi Selatan')),
- ('SLT', _('Sulawesi Tengah')),
- ('SLR', _('Sulawesi Tenggara')),
- ('SLU', _('Sulawesi Utara')),
- ('SMB', _('Sumatera Barat')),
- ('SMS', _('Sumatera Selatan')),
- ('SMU', _('Sumatera Utara')),
-)
-
-LICENSE_PLATE_PREFIX_CHOICES = (
- ('A', _('Banten')),
- ('AA', _('Magelang')),
- ('AB', _('Yogyakarta')),
- ('AD', _('Surakarta - Solo')),
- ('AE', _('Madiun')),
- ('AG', _('Kediri')),
- ('B', _('Jakarta')),
- ('BA', _('Sumatera Barat')),
- ('BB', _('Tapanuli')),
- ('BD', _('Bengkulu')),
- ('BE', _('Lampung')),
- ('BG', _('Sumatera Selatan')),
- ('BH', _('Jambi')),
- ('BK', _('Sumatera Utara')),
- ('BL', _('Nanggroe Aceh Darussalam')),
- ('BM', _('Riau')),
- ('BN', _('Kepulauan Bangka Belitung')),
- ('BP', _('Kepulauan Riau')),
- ('CC', _('Corps Consulate')),
- ('CD', _('Corps Diplomatic')),
- ('D', _('Bandung')),
- ('DA', _('Kalimantan Selatan')),
- ('DB', _('Sulawesi Utara Daratan')),
- ('DC', _('Sulawesi Barat')),
- ('DD', _('Sulawesi Selatan')),
- ('DE', _('Maluku')),
- ('DG', _('Maluku Utara')),
- ('DH', _('NTT - Timor')),
- ('DK', _('Bali')),
- ('DL', _('Sulawesi Utara Kepulauan')),
- ('DM', _('Gorontalo')),
- ('DN', _('Sulawesi Tengah')),
- ('DR', _('NTB - Lombok')),
- ('DS', _('Papua dan Papua Barat')),
- ('DT', _('Sulawesi Tenggara')),
- ('E', _('Cirebon')),
- ('EA', _('NTB - Sumbawa')),
- ('EB', _('NTT - Flores')),
- ('ED', _('NTT - Sumba')),
- ('F', _('Bogor')),
- ('G', _('Pekalongan')),
- ('H', _('Semarang')),
- ('K', _('Pati')),
- ('KB', _('Kalimantan Barat')),
- ('KH', _('Kalimantan Tengah')),
- ('KT', _('Kalimantan Timur')),
- ('L', _('Surabaya')),
- ('M', _('Madura')),
- ('N', _('Malang')),
- ('P', _('Jember')),
- ('R', _('Banyumas')),
- ('RI', _('Federal Government')),
- ('S', _('Bojonegoro')),
- ('T', _('Purwakarta')),
- ('W', _('Sidoarjo')),
- ('Z', _('Garut')),
-)
diff --git a/parts/django/django/contrib/localflavor/ie/__init__.py b/parts/django/django/contrib/localflavor/ie/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/ie/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/ie/forms.py b/parts/django/django/contrib/localflavor/ie/forms.py
deleted file mode 100644
index 2cfd2f2..0000000
--- a/parts/django/django/contrib/localflavor/ie/forms.py
+++ /dev/null
@@ -1,13 +0,0 @@
-"""
-UK-specific Form helpers
-"""
-
-from django.forms.fields import Select
-
-class IECountySelect(Select):
- """
- A Select widget that uses a list of Irish Counties as its choices.
- """
- def __init__(self, attrs=None):
- from ie_counties import IE_COUNTY_CHOICES
- super(IECountySelect, self).__init__(attrs, choices=IE_COUNTY_CHOICES)
diff --git a/parts/django/django/contrib/localflavor/ie/ie_counties.py b/parts/django/django/contrib/localflavor/ie/ie_counties.py
deleted file mode 100644
index c8991e0..0000000
--- a/parts/django/django/contrib/localflavor/ie/ie_counties.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-Sources:
- Irish Counties: http://en.wikipedia.org/wiki/Counties_of_Ireland
-"""
-from django.utils.translation import ugettext_lazy as _
-
-IE_COUNTY_CHOICES = (
- ('antrim', _('Antrim')),
- ('armagh', _('Armagh')),
- ('carlow', _('Carlow')),
- ('cavan', _('Cavan')),
- ('clare', _('Clare')),
- ('cork', _('Cork')),
- ('derry', _('Derry')),
- ('donegal', _('Donegal')),
- ('down', _('Down')),
- ('dublin', _('Dublin')),
- ('fermanagh', _('Fermanagh')),
- ('galway', _('Galway')),
- ('kerry', _('Kerry')),
- ('kildare', _('Kildare')),
- ('kilkenny', _('Kilkenny')),
- ('laois', _('Laois')),
- ('leitrim', _('Leitrim')),
- ('limerick', _('Limerick')),
- ('longford', _('Longford')),
- ('louth', _('Louth')),
- ('mayo', _('Mayo')),
- ('meath', _('Meath')),
- ('monaghan', _('Monaghan')),
- ('offaly', _('Offaly')),
- ('roscommon', _('Roscommon')),
- ('sligo', _('Sligo')),
- ('tipperary', _('Tipperary')),
- ('tyrone', _('Tyrone')),
- ('waterford', _('Waterford')),
- ('westmeath', _('Westmeath')),
- ('wexford', _('Wexford')),
- ('wicklow', _('Wicklow')),
-)
diff --git a/parts/django/django/contrib/localflavor/in_/__init__.py b/parts/django/django/contrib/localflavor/in_/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/in_/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/in_/forms.py b/parts/django/django/contrib/localflavor/in_/forms.py
deleted file mode 100644
index 0597623..0000000
--- a/parts/django/django/contrib/localflavor/in_/forms.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-India-specific Form helpers.
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import gettext
-import re
-
-
-class INZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': gettext(u'Enter a zip code in the format XXXXXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(INZipCodeField, self).__init__(r'^\d{6}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class INStateField(Field):
- """
- A form field that validates its input is a Indian state name or
- abbreviation. It normalizes the input to the standard two-letter vehicle
- registration abbreviation for the given state or union territory
- """
- default_error_messages = {
- 'invalid': u'Enter a Indian state or territory.',
- }
-
- def clean(self, value):
- from in_states import STATES_NORMALIZED
- super(INStateField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- try:
- value = value.strip().lower()
- except AttributeError:
- pass
- else:
- try:
- return smart_unicode(STATES_NORMALIZED[value.strip().lower()])
- except KeyError:
- pass
- raise ValidationError(self.error_messages['invalid'])
-
-class INStateSelect(Select):
- """
- A Select widget that uses a list of Indian states/territories as its
- choices.
- """
- def __init__(self, attrs=None):
- from in_states import STATE_CHOICES
- super(INStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
-
diff --git a/parts/django/django/contrib/localflavor/in_/in_states.py b/parts/django/django/contrib/localflavor/in_/in_states.py
deleted file mode 100644
index bb4a748..0000000
--- a/parts/django/django/contrib/localflavor/in_/in_states.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-A mapping of state misspellings/abbreviations to normalized abbreviations, and
-an alphabetical list of states for use as `choices` in a formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-STATE_CHOICES = (
- ('KA', 'Karnataka'),
- ('AP', 'Andhra Pradesh'),
- ('KL', 'Kerala'),
- ('TN', 'Tamil Nadu'),
- ('MH', 'Maharashtra'),
- ('UP', 'Uttar Pradesh'),
- ('GA', 'Goa'),
- ('GJ', 'Gujarat'),
- ('RJ', 'Rajasthan'),
- ('HP', 'Himachal Pradesh'),
- ('JK', 'Jammu and Kashmir'),
- ('AR', 'Arunachal Pradesh'),
- ('AS', 'Assam'),
- ('BR', 'Bihar'),
- ('CG', 'Chattisgarh'),
- ('HR', 'Haryana'),
- ('JH', 'Jharkhand'),
- ('MP', 'Madhya Pradesh'),
- ('MN', 'Manipur'),
- ('ML', 'Meghalaya'),
- ('MZ', 'Mizoram'),
- ('NL', 'Nagaland'),
- ('OR', 'Orissa'),
- ('PB', 'Punjab'),
- ('SK', 'Sikkim'),
- ('TR', 'Tripura'),
- ('UA', 'Uttarakhand'),
- ('WB', 'West Bengal'),
-
- # Union Territories
- ('AN', 'Andaman and Nicobar'),
- ('CH', 'Chandigarh'),
- ('DN', 'Dadra and Nagar Haveli'),
- ('DD', 'Daman and Diu'),
- ('DL', 'Delhi'),
- ('LD', 'Lakshadweep'),
- ('PY', 'Pondicherry'),
-)
-
-STATES_NORMALIZED = {
- 'ka': 'KA',
- 'karnatka': 'KA',
- 'tn': 'TN',
- 'tamilnad': 'TN',
- 'tamilnadu': 'TN',
- 'andra pradesh': 'AP',
- 'andrapradesh': 'AP',
- 'andhrapradesh': 'AP',
- 'maharastra': 'MH',
- 'mh': 'MH',
- 'ap': 'AP',
- 'dl': 'DL',
- 'dd': 'DD',
- 'br': 'BR',
- 'ar': 'AR',
- 'sk': 'SK',
- 'kl': 'KL',
- 'ga': 'GA',
- 'rj': 'RJ',
- 'rajastan': 'RJ',
- 'rajasthan': 'RJ',
- 'hp': 'HP',
- 'ua': 'UA',
- 'up': 'UP',
- 'mp': 'MP',
- 'mz': 'MZ',
- 'bengal': 'WB',
- 'westbengal': 'WB',
- 'mizo': 'MZ',
- 'orisa': 'OR',
- 'odisa': 'OR',
- 'or': 'OR',
- 'ar': 'AR',
-}
-
diff --git a/parts/django/django/contrib/localflavor/is_/__init__.py b/parts/django/django/contrib/localflavor/is_/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/is_/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/is_/forms.py b/parts/django/django/contrib/localflavor/is_/forms.py
deleted file mode 100644
index abf858d..0000000
--- a/parts/django/django/contrib/localflavor/is_/forms.py
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-Iceland specific form helpers.
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import RegexField
-from django.forms.widgets import Select
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-
-class ISIdNumberField(RegexField):
- """
- Icelandic identification number (kennitala). This is a number every citizen
- of Iceland has.
- """
- default_error_messages = {
- 'invalid': _('Enter a valid Icelandic identification number. The format is XXXXXX-XXXX.'),
- 'checksum': _(u'The Icelandic identification number is not valid.'),
- }
-
- def __init__(self, *args, **kwargs):
- kwargs['min_length'],kwargs['max_length'] = 10,11
- super(ISIdNumberField, self).__init__(r'^\d{6}(-| )?\d{4}$', *args, **kwargs)
-
- def clean(self, value):
- value = super(ISIdNumberField, self).clean(value)
-
- if value in EMPTY_VALUES:
- return u''
-
- value = self._canonify(value)
- if self._validate(value):
- return self._format(value)
- else:
- raise ValidationError(self.error_messages['checksum'])
-
- def _canonify(self, value):
- """
- Returns the value as only digits.
- """
- return value.replace('-', '').replace(' ', '')
-
- def _validate(self, value):
- """
- Takes in the value in canonical form and checks the verifier digit. The
- method is modulo 11.
- """
- check = [3, 2, 7, 6, 5, 4, 3, 2, 1, 0]
- return sum([int(value[i]) * check[i] for i in range(10)]) % 11 == 0
-
- def _format(self, value):
- """
- Takes in the value in canonical form and returns it in the common
- display format.
- """
- return smart_unicode(value[:6]+'-'+value[6:])
-
-class ISPhoneNumberField(RegexField):
- """
- Icelandic phone number. Seven digits with an optional hyphen or space after
- the first three digits.
- """
- def __init__(self, *args, **kwargs):
- kwargs['min_length'], kwargs['max_length'] = 7,8
- super(ISPhoneNumberField, self).__init__(r'^\d{3}(-| )?\d{4}$', *args, **kwargs)
-
- def clean(self, value):
- value = super(ISPhoneNumberField, self).clean(value)
-
- if value in EMPTY_VALUES:
- return u''
-
- return value.replace('-', '').replace(' ', '')
-
-class ISPostalCodeSelect(Select):
- """
- A Select widget that uses a list of Icelandic postal codes as its choices.
- """
- def __init__(self, attrs=None):
- from is_postalcodes import IS_POSTALCODES
- super(ISPostalCodeSelect, self).__init__(attrs, choices=IS_POSTALCODES)
-
diff --git a/parts/django/django/contrib/localflavor/is_/is_postalcodes.py b/parts/django/django/contrib/localflavor/is_/is_postalcodes.py
deleted file mode 100644
index 4feca9c..0000000
--- a/parts/django/django/contrib/localflavor/is_/is_postalcodes.py
+++ /dev/null
@@ -1,151 +0,0 @@
-# -*- coding: utf-8 -*-
-
-IS_POSTALCODES = (
- ('101', u'101 Reykjavík'),
- ('103', u'103 Reykjavík'),
- ('104', u'104 Reykjavík'),
- ('105', u'105 Reykjavík'),
- ('107', u'107 Reykjavík'),
- ('108', u'108 Reykjavík'),
- ('109', u'109 Reykjavík'),
- ('110', u'110 Reykjavík'),
- ('111', u'111 Reykjavík'),
- ('112', u'112 Reykjavík'),
- ('113', u'113 Reykjavík'),
- ('116', u'116 Kjalarnes'),
- ('121', u'121 Reykjavík'),
- ('123', u'123 Reykjavík'),
- ('124', u'124 Reykjavík'),
- ('125', u'125 Reykjavík'),
- ('127', u'127 Reykjavík'),
- ('128', u'128 Reykjavík'),
- ('129', u'129 Reykjavík'),
- ('130', u'130 Reykjavík'),
- ('132', u'132 Reykjavík'),
- ('150', u'150 Reykjavík'),
- ('155', u'155 Reykjavík'),
- ('170', u'170 Seltjarnarnes'),
- ('172', u'172 Seltjarnarnes'),
- ('190', u'190 Vogar'),
- ('200', u'200 Kópavogur'),
- ('201', u'201 Kópavogur'),
- ('202', u'202 Kópavogur'),
- ('203', u'203 Kópavogur'),
- ('210', u'210 Garðabær'),
- ('212', u'212 Garðabær'),
- ('220', u'220 Hafnarfjörður'),
- ('221', u'221 Hafnarfjörður'),
- ('222', u'222 Hafnarfjörður'),
- ('225', u'225 Álftanes'),
- ('230', u'230 Reykjanesbær'),
- ('232', u'232 Reykjanesbær'),
- ('233', u'233 Reykjanesbær'),
- ('235', u'235 Keflavíkurflugvöllur'),
- ('240', u'240 Grindavík'),
- ('245', u'245 Sandgerði'),
- ('250', u'250 Garður'),
- ('260', u'260 Reykjanesbær'),
- ('270', u'270 Mosfellsbær'),
- ('300', u'300 Akranes'),
- ('301', u'301 Akranes'),
- ('302', u'302 Akranes'),
- ('310', u'310 Borgarnes'),
- ('311', u'311 Borgarnes'),
- ('320', u'320 Reykholt í Borgarfirði'),
- ('340', u'340 Stykkishólmur'),
- ('345', u'345 Flatey á Breiðafirði'),
- ('350', u'350 Grundarfjörður'),
- ('355', u'355 Ólafsvík'),
- ('356', u'356 Snæfellsbær'),
- ('360', u'360 Hellissandur'),
- ('370', u'370 Búðardalur'),
- ('371', u'371 Búðardalur'),
- ('380', u'380 Reykhólahreppur'),
- ('400', u'400 Ísafjörður'),
- ('401', u'401 Ísafjörður'),
- ('410', u'410 Hnífsdalur'),
- ('415', u'415 Bolungarvík'),
- ('420', u'420 Súðavík'),
- ('425', u'425 Flateyri'),
- ('430', u'430 Suðureyri'),
- ('450', u'450 Patreksfjörður'),
- ('451', u'451 Patreksfjörður'),
- ('460', u'460 Tálknafjörður'),
- ('465', u'465 Bíldudalur'),
- ('470', u'470 Þingeyri'),
- ('471', u'471 Þingeyri'),
- ('500', u'500 Staður'),
- ('510', u'510 Hólmavík'),
- ('512', u'512 Hólmavík'),
- ('520', u'520 Drangsnes'),
- ('522', u'522 Kjörvogur'),
- ('523', u'523 Bær'),
- ('524', u'524 Norðurfjörður'),
- ('530', u'530 Hvammstangi'),
- ('531', u'531 Hvammstangi'),
- ('540', u'540 Blönduós'),
- ('541', u'541 Blönduós'),
- ('545', u'545 Skagaströnd'),
- ('550', u'550 Sauðárkrókur'),
- ('551', u'551 Sauðárkrókur'),
- ('560', u'560 Varmahlíð'),
- ('565', u'565 Hofsós'),
- ('566', u'566 Hofsós'),
- ('570', u'570 Fljót'),
- ('580', u'580 Siglufjörður'),
- ('600', u'600 Akureyri'),
- ('601', u'601 Akureyri'),
- ('602', u'602 Akureyri'),
- ('603', u'603 Akureyri'),
- ('610', u'610 Grenivík'),
- ('611', u'611 Grímsey'),
- ('620', u'620 Dalvík'),
- ('621', u'621 Dalvík'),
- ('625', u'625 Ólafsfjörður'),
- ('630', u'630 Hrísey'),
- ('640', u'640 Húsavík'),
- ('641', u'641 Húsavík'),
- ('645', u'645 Fosshóll'),
- ('650', u'650 Laugar'),
- ('660', u'660 Mývatn'),
- ('670', u'670 Kópasker'),
- ('671', u'671 Kópasker'),
- ('675', u'675 Raufarhöfn'),
- ('680', u'680 Þórshöfn'),
- ('681', u'681 Þórshöfn'),
- ('685', u'685 Bakkafjörður'),
- ('690', u'690 Vopnafjörður'),
- ('700', u'700 Egilsstaðir'),
- ('701', u'701 Egilsstaðir'),
- ('710', u'710 Seyðisfjörður'),
- ('715', u'715 Mjóifjörður'),
- ('720', u'720 Borgarfjörður eystri'),
- ('730', u'730 Reyðarfjörður'),
- ('735', u'735 Eskifjörður'),
- ('740', u'740 Neskaupstaður'),
- ('750', u'750 Fáskrúðsfjörður'),
- ('755', u'755 Stöðvarfjörður'),
- ('760', u'760 Breiðdalsvík'),
- ('765', u'765 Djúpivogur'),
- ('780', u'780 Höfn í Hornafirði'),
- ('781', u'781 Höfn í Hornafirði'),
- ('785', u'785 Öræfi'),
- ('800', u'800 Selfoss'),
- ('801', u'801 Selfoss'),
- ('802', u'802 Selfoss'),
- ('810', u'810 Hveragerði'),
- ('815', u'815 Þorlákshöfn'),
- ('820', u'820 Eyrarbakki'),
- ('825', u'825 Stokkseyri'),
- ('840', u'840 Laugarvatn'),
- ('845', u'845 Flúðir'),
- ('850', u'850 Hella'),
- ('851', u'851 Hella'),
- ('860', u'860 Hvolsvöllur'),
- ('861', u'861 Hvolsvöllur'),
- ('870', u'870 Vík'),
- ('871', u'871 Vík'),
- ('880', u'880 Kirkjubæjarklaustur'),
- ('900', u'900 Vestmannaeyjar'),
- ('902', u'902 Vestmannaeyjar')
-)
diff --git a/parts/django/django/contrib/localflavor/it/__init__.py b/parts/django/django/contrib/localflavor/it/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/it/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/it/forms.py b/parts/django/django/contrib/localflavor/it/forms.py
deleted file mode 100644
index bf02276..0000000
--- a/parts/django/django/contrib/localflavor/it/forms.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-IT-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-from django.contrib.localflavor.it.util import ssn_check_digit, vat_number_check_digit
-import re
-
-class ITZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a valid zip code.'),
- }
- def __init__(self, *args, **kwargs):
- super(ITZipCodeField, self).__init__(r'^\d{5}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class ITRegionSelect(Select):
- """
- A Select widget that uses a list of IT regions as its choices.
- """
- def __init__(self, attrs=None):
- from it_region import REGION_CHOICES
- super(ITRegionSelect, self).__init__(attrs, choices=REGION_CHOICES)
-
-class ITProvinceSelect(Select):
- """
- A Select widget that uses a list of IT provinces as its choices.
- """
- def __init__(self, attrs=None):
- from it_province import PROVINCE_CHOICES
- super(ITProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)
-
-class ITSocialSecurityNumberField(RegexField):
- """
- A form field that validates Italian Social Security numbers (codice fiscale).
- For reference see http://www.agenziaentrate.it/ and search for
- 'Informazioni sulla codificazione delle persone fisiche'.
- """
- default_error_messages = {
- 'invalid': _(u'Enter a valid Social Security number.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ITSocialSecurityNumberField, self).__init__(r'^\w{3}\s*\w{3}\s*\w{5}\s*\w{5}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self, value):
- value = super(ITSocialSecurityNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('\s', u'', value).upper()
- try:
- check_digit = ssn_check_digit(value)
- except ValueError:
- raise ValidationError(self.error_messages['invalid'])
- if not value[15] == check_digit:
- raise ValidationError(self.error_messages['invalid'])
- return value
-
-class ITVatNumberField(Field):
- """
- A form field that validates Italian VAT numbers (partita IVA).
- """
- default_error_messages = {
- 'invalid': _(u'Enter a valid VAT number.'),
- }
-
- def clean(self, value):
- value = super(ITVatNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- try:
- vat_number = int(value)
- except ValueError:
- raise ValidationError(self.error_messages['invalid'])
- vat_number = str(vat_number).zfill(11)
- check_digit = vat_number_check_digit(vat_number[0:10])
- if not vat_number[10] == check_digit:
- raise ValidationError(self.error_messages['invalid'])
- return smart_unicode(vat_number)
diff --git a/parts/django/django/contrib/localflavor/it/it_province.py b/parts/django/django/contrib/localflavor/it/it_province.py
deleted file mode 100644
index dcaad98..0000000
--- a/parts/django/django/contrib/localflavor/it/it_province.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# -*- coding: utf-8 -*
-
-PROVINCE_CHOICES = (
- ('AG', 'Agrigento'),
- ('AL', 'Alessandria'),
- ('AN', 'Ancona'),
- ('AO', 'Aosta'),
- ('AR', 'Arezzo'),
- ('AP', 'Ascoli Piceno'),
- ('AT', 'Asti'),
- ('AV', 'Avellino'),
- ('BA', 'Bari'),
- ('BT', 'Barletta-Andria-Trani'), # active starting from 2009
- ('BL', 'Belluno'),
- ('BN', 'Benevento'),
- ('BG', 'Bergamo'),
- ('BI', 'Biella'),
- ('BO', 'Bologna'),
- ('BZ', 'Bolzano/Bozen'),
- ('BS', 'Brescia'),
- ('BR', 'Brindisi'),
- ('CA', 'Cagliari'),
- ('CL', 'Caltanissetta'),
- ('CB', 'Campobasso'),
- ('CI', 'Carbonia-Iglesias'),
- ('CE', 'Caserta'),
- ('CT', 'Catania'),
- ('CZ', 'Catanzaro'),
- ('CH', 'Chieti'),
- ('CO', 'Como'),
- ('CS', 'Cosenza'),
- ('CR', 'Cremona'),
- ('KR', 'Crotone'),
- ('CN', 'Cuneo'),
- ('EN', 'Enna'),
- ('FM', 'Fermo'), # active starting from 2009
- ('FE', 'Ferrara'),
- ('FI', 'Firenze'),
- ('FG', 'Foggia'),
- ('FC', 'Forlì-Cesena'),
- ('FR', 'Frosinone'),
- ('GE', 'Genova'),
- ('GO', 'Gorizia'),
- ('GR', 'Grosseto'),
- ('IM', 'Imperia'),
- ('IS', 'Isernia'),
- ('SP', 'La Spezia'),
- ('AQ', u'L’Aquila'),
- ('LT', 'Latina'),
- ('LE', 'Lecce'),
- ('LC', 'Lecco'),
- ('LI', 'Livorno'),
- ('LO', 'Lodi'),
- ('LU', 'Lucca'),
- ('MC', 'Macerata'),
- ('MN', 'Mantova'),
- ('MS', 'Massa-Carrara'),
- ('MT', 'Matera'),
- ('VS', 'Medio Campidano'),
- ('ME', 'Messina'),
- ('MI', 'Milano'),
- ('MO', 'Modena'),
- ('MB', 'Monza e Brianza'), # active starting from 2009
- ('NA', 'Napoli'),
- ('NO', 'Novara'),
- ('NU', 'Nuoro'),
- ('OG', 'Ogliastra'),
- ('OT', 'Olbia-Tempio'),
- ('OR', 'Oristano'),
- ('PD', 'Padova'),
- ('PA', 'Palermo'),
- ('PR', 'Parma'),
- ('PV', 'Pavia'),
- ('PG', 'Perugia'),
- ('PU', 'Pesaro e Urbino'),
- ('PE', 'Pescara'),
- ('PC', 'Piacenza'),
- ('PI', 'Pisa'),
- ('PT', 'Pistoia'),
- ('PN', 'Pordenone'),
- ('PZ', 'Potenza'),
- ('PO', 'Prato'),
- ('RG', 'Ragusa'),
- ('RA', 'Ravenna'),
- ('RC', 'Reggio Calabria'),
- ('RE', 'Reggio Emilia'),
- ('RI', 'Rieti'),
- ('RN', 'Rimini'),
- ('RM', 'Roma'),
- ('RO', 'Rovigo'),
- ('SA', 'Salerno'),
- ('SS', 'Sassari'),
- ('SV', 'Savona'),
- ('SI', 'Siena'),
- ('SR', 'Siracusa'),
- ('SO', 'Sondrio'),
- ('TA', 'Taranto'),
- ('TE', 'Teramo'),
- ('TR', 'Terni'),
- ('TO', 'Torino'),
- ('TP', 'Trapani'),
- ('TN', 'Trento'),
- ('TV', 'Treviso'),
- ('TS', 'Trieste'),
- ('UD', 'Udine'),
- ('VA', 'Varese'),
- ('VE', 'Venezia'),
- ('VB', 'Verbano Cusio Ossola'),
- ('VC', 'Vercelli'),
- ('VR', 'Verona'),
- ('VV', 'Vibo Valentia'),
- ('VI', 'Vicenza'),
- ('VT', 'Viterbo'),
-)
diff --git a/parts/django/django/contrib/localflavor/it/it_region.py b/parts/django/django/contrib/localflavor/it/it_region.py
deleted file mode 100644
index 0700b46..0000000
--- a/parts/django/django/contrib/localflavor/it/it_region.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*
-
-REGION_CHOICES = (
- ('ABR', 'Abruzzo'),
- ('BAS', 'Basilicata'),
- ('CAL', 'Calabria'),
- ('CAM', 'Campania'),
- ('EMR', 'Emilia-Romagna'),
- ('FVG', 'Friuli-Venezia Giulia'),
- ('LAZ', 'Lazio'),
- ('LIG', 'Liguria'),
- ('LOM', 'Lombardia'),
- ('MAR', 'Marche'),
- ('MOL', 'Molise'),
- ('PMN', 'Piemonte'),
- ('PUG', 'Puglia'),
- ('SAR', 'Sardegna'),
- ('SIC', 'Sicilia'),
- ('TOS', 'Toscana'),
- ('TAA', 'Trentino-Alto Adige'),
- ('UMB', 'Umbria'),
- ('VAO', u'Valle d’Aosta'),
- ('VEN', 'Veneto'),
-)
diff --git a/parts/django/django/contrib/localflavor/it/util.py b/parts/django/django/contrib/localflavor/it/util.py
deleted file mode 100644
index c162ff7..0000000
--- a/parts/django/django/contrib/localflavor/it/util.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from django.utils.encoding import smart_str, smart_unicode
-
-def ssn_check_digit(value):
- "Calculate Italian social security number check digit."
- ssn_even_chars = {
- '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8,
- '9': 9, 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7,
- 'I': 8, 'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15,
- 'Q': 16, 'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23,
- 'Y': 24, 'Z': 25
- }
- ssn_odd_chars = {
- '0': 1, '1': 0, '2': 5, '3': 7, '4': 9, '5': 13, '6': 15, '7': 17, '8':
- 19, '9': 21, 'A': 1, 'B': 0, 'C': 5, 'D': 7, 'E': 9, 'F': 13, 'G': 15,
- 'H': 17, 'I': 19, 'J': 21, 'K': 2, 'L': 4, 'M': 18, 'N': 20, 'O': 11,
- 'P': 3, 'Q': 6, 'R': 8, 'S': 12, 'T': 14, 'U': 16, 'V': 10, 'W': 22,
- 'X': 25, 'Y': 24, 'Z': 23
- }
- # Chars from 'A' to 'Z'
- ssn_check_digits = [chr(x) for x in range(65, 91)]
-
- ssn = value.upper()
- total = 0
- for i in range(0, 15):
- try:
- if i % 2 == 0:
- total += ssn_odd_chars[ssn[i]]
- else:
- total += ssn_even_chars[ssn[i]]
- except KeyError:
- msg = "Character '%(char)s' is not allowed." % {'char': ssn[i]}
- raise ValueError(msg)
- return ssn_check_digits[total % 26]
-
-def vat_number_check_digit(vat_number):
- "Calculate Italian VAT number check digit."
- normalized_vat_number = smart_str(vat_number).zfill(10)
- total = 0
- for i in range(0, 10, 2):
- total += int(normalized_vat_number[i])
- for i in range(1, 11, 2):
- quotient , remainder = divmod(int(normalized_vat_number[i]) * 2, 10)
- total += quotient + remainder
- return smart_unicode((10 - total % 10) % 10)
diff --git a/parts/django/django/contrib/localflavor/jp/__init__.py b/parts/django/django/contrib/localflavor/jp/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/jp/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/jp/forms.py b/parts/django/django/contrib/localflavor/jp/forms.py
deleted file mode 100644
index 1d765c8..0000000
--- a/parts/django/django/contrib/localflavor/jp/forms.py
+++ /dev/null
@@ -1,37 +0,0 @@
-"""
-JP-specific Form helpers
-"""
-
-from django.forms import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from django.forms.fields import RegexField, Select
-
-class JPPostalCodeField(RegexField):
- """
- A form field that validates its input is a Japanese postcode.
-
- Accepts 7 digits, with or without a hyphen.
- """
- default_error_messages = {
- 'invalid': _('Enter a postal code in the format XXXXXXX or XXX-XXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(JPPostalCodeField, self).__init__(r'^\d{3}-\d{4}$|^\d{7}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self, value):
- """
- Validates the input and returns a string that contains only numbers.
- Returns an empty string for empty values.
- """
- v = super(JPPostalCodeField, self).clean(value)
- return v.replace('-', '')
-
-class JPPrefectureSelect(Select):
- """
- A Select widget that uses a list of Japanese prefectures as its choices.
- """
- def __init__(self, attrs=None):
- from jp_prefectures import JP_PREFECTURES
- super(JPPrefectureSelect, self).__init__(attrs, choices=JP_PREFECTURES)
diff --git a/parts/django/django/contrib/localflavor/jp/jp_prefectures.py b/parts/django/django/contrib/localflavor/jp/jp_prefectures.py
deleted file mode 100644
index f079fe6..0000000
--- a/parts/django/django/contrib/localflavor/jp/jp_prefectures.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from django.utils.translation import ugettext_lazy
-
-JP_PREFECTURES = (
- ('hokkaido', ugettext_lazy('Hokkaido'),),
- ('aomori', ugettext_lazy('Aomori'),),
- ('iwate', ugettext_lazy('Iwate'),),
- ('miyagi', ugettext_lazy('Miyagi'),),
- ('akita', ugettext_lazy('Akita'),),
- ('yamagata', ugettext_lazy('Yamagata'),),
- ('fukushima', ugettext_lazy('Fukushima'),),
- ('ibaraki', ugettext_lazy('Ibaraki'),),
- ('tochigi', ugettext_lazy('Tochigi'),),
- ('gunma', ugettext_lazy('Gunma'),),
- ('saitama', ugettext_lazy('Saitama'),),
- ('chiba', ugettext_lazy('Chiba'),),
- ('tokyo', ugettext_lazy('Tokyo'),),
- ('kanagawa', ugettext_lazy('Kanagawa'),),
- ('yamanashi', ugettext_lazy('Yamanashi'),),
- ('nagano', ugettext_lazy('Nagano'),),
- ('niigata', ugettext_lazy('Niigata'),),
- ('toyama', ugettext_lazy('Toyama'),),
- ('ishikawa', ugettext_lazy('Ishikawa'),),
- ('fukui', ugettext_lazy('Fukui'),),
- ('gifu', ugettext_lazy('Gifu'),),
- ('shizuoka', ugettext_lazy('Shizuoka'),),
- ('aichi', ugettext_lazy('Aichi'),),
- ('mie', ugettext_lazy('Mie'),),
- ('shiga', ugettext_lazy('Shiga'),),
- ('kyoto', ugettext_lazy('Kyoto'),),
- ('osaka', ugettext_lazy('Osaka'),),
- ('hyogo', ugettext_lazy('Hyogo'),),
- ('nara', ugettext_lazy('Nara'),),
- ('wakayama', ugettext_lazy('Wakayama'),),
- ('tottori', ugettext_lazy('Tottori'),),
- ('shimane', ugettext_lazy('Shimane'),),
- ('okayama', ugettext_lazy('Okayama'),),
- ('hiroshima', ugettext_lazy('Hiroshima'),),
- ('yamaguchi', ugettext_lazy('Yamaguchi'),),
- ('tokushima', ugettext_lazy('Tokushima'),),
- ('kagawa', ugettext_lazy('Kagawa'),),
- ('ehime', ugettext_lazy('Ehime'),),
- ('kochi', ugettext_lazy('Kochi'),),
- ('fukuoka', ugettext_lazy('Fukuoka'),),
- ('saga', ugettext_lazy('Saga'),),
- ('nagasaki', ugettext_lazy('Nagasaki'),),
- ('kumamoto', ugettext_lazy('Kumamoto'),),
- ('oita', ugettext_lazy('Oita'),),
- ('miyazaki', ugettext_lazy('Miyazaki'),),
- ('kagoshima', ugettext_lazy('Kagoshima'),),
- ('okinawa', ugettext_lazy('Okinawa'),),
-)
diff --git a/parts/django/django/contrib/localflavor/kw/__init__.py b/parts/django/django/contrib/localflavor/kw/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/kw/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/kw/forms.py b/parts/django/django/contrib/localflavor/kw/forms.py
deleted file mode 100644
index 9429625..0000000
--- a/parts/django/django/contrib/localflavor/kw/forms.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-Kuwait-specific Form helpers
-"""
-import re
-from datetime import date
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField
-from django.utils.translation import gettext as _
-
-id_re = re.compile(r'^(?P<initial>\d{1})(?P<yy>\d\d)(?P<mm>\d\d)(?P<dd>\d\d)(?P<mid>\d{4})(?P<checksum>\d{1})')
-
-class KWCivilIDNumberField(Field):
- """
- Kuwaiti Civil ID numbers are 12 digits, second to seventh digits
- represents the person's birthdate.
-
- Checks the following rules to determine the validty of the number:
- * The number consist of 12 digits.
- * The birthdate of the person is a valid date.
- * The calculated checksum equals to the last digit of the Civil ID.
- """
- default_error_messages = {
- 'invalid': _('Enter a valid Kuwaiti Civil ID number'),
- }
-
- def has_valid_checksum(self, value):
- weight = (2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
- calculated_checksum = 0
- for i in range(11):
- calculated_checksum += int(value[i]) * weight[i]
-
- remainder = calculated_checksum % 11
- checkdigit = 11 - remainder
- if checkdigit != int(value[11]):
- return False
- return True
-
- def clean(self, value):
- super(KWCivilIDNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- if not re.match(r'^\d{12}$', value):
- raise ValidationError(self.error_messages['invalid'])
-
- match = re.match(id_re, value)
-
- if not match:
- raise ValidationError(self.error_messages['invalid'])
-
- gd = match.groupdict()
-
- try:
- d = date(int(gd['yy']), int(gd['mm']), int(gd['dd']))
- except ValueError:
- raise ValidationError(self.error_messages['invalid'])
-
- if not self.has_valid_checksum(value):
- raise ValidationError(self.error_messages['invalid'])
-
- return value
diff --git a/parts/django/django/contrib/localflavor/mx/__init__.py b/parts/django/django/contrib/localflavor/mx/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/mx/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/mx/forms.py b/parts/django/django/contrib/localflavor/mx/forms.py
deleted file mode 100644
index 9581937..0000000
--- a/parts/django/django/contrib/localflavor/mx/forms.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""
-Mexican-specific form helpers.
-"""
-
-from django.forms.fields import Select
-
-class MXStateSelect(Select):
- """
- A Select widget that uses a list of Mexican states as its choices.
- """
- def __init__(self, attrs=None):
- from mx_states import STATE_CHOICES
- super(MXStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
-
diff --git a/parts/django/django/contrib/localflavor/mx/mx_states.py b/parts/django/django/contrib/localflavor/mx/mx_states.py
deleted file mode 100644
index eed1700..0000000
--- a/parts/django/django/contrib/localflavor/mx/mx_states.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-A list of Mexican states for use as `choices` in a formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-from django.utils.translation import ugettext_lazy as _
-
-STATE_CHOICES = (
- ('AGU', _(u'Aguascalientes')),
- ('BCN', _(u'Baja California')),
- ('BCS', _(u'Baja California Sur')),
- ('CAM', _(u'Campeche')),
- ('CHH', _(u'Chihuahua')),
- ('CHP', _(u'Chiapas')),
- ('COA', _(u'Coahuila')),
- ('COL', _(u'Colima')),
- ('DIF', _(u'Distrito Federal')),
- ('DUR', _(u'Durango')),
- ('GRO', _(u'Guerrero')),
- ('GUA', _(u'Guanajuato')),
- ('HID', _(u'Hidalgo')),
- ('JAL', _(u'Jalisco')),
- ('MEX', _(u'Estado de México')),
- ('MIC', _(u'Michoacán')),
- ('MOR', _(u'Morelos')),
- ('NAY', _(u'Nayarit')),
- ('NLE', _(u'Nuevo León')),
- ('OAX', _(u'Oaxaca')),
- ('PUE', _(u'Puebla')),
- ('QUE', _(u'Querétaro')),
- ('ROO', _(u'Quintana Roo')),
- ('SIN', _(u'Sinaloa')),
- ('SLP', _(u'San Luis Potosí')),
- ('SON', _(u'Sonora')),
- ('TAB', _(u'Tabasco')),
- ('TAM', _(u'Tamaulipas')),
- ('TLA', _(u'Tlaxcala')),
- ('VER', _(u'Veracruz')),
- ('YUC', _(u'Yucatán')),
- ('ZAC', _(u'Zacatecas')),
-)
-
diff --git a/parts/django/django/contrib/localflavor/nl/__init__.py b/parts/django/django/contrib/localflavor/nl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/nl/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/nl/forms.py b/parts/django/django/contrib/localflavor/nl/forms.py
deleted file mode 100644
index 997c28f..0000000
--- a/parts/django/django/contrib/localflavor/nl/forms.py
+++ /dev/null
@@ -1,101 +0,0 @@
-"""
-NL-specific Form helpers
-"""
-
-import re
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, Select
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-
-pc_re = re.compile('^\d{4}[A-Z]{2}$')
-sofi_re = re.compile('^\d{9}$')
-numeric_re = re.compile('^\d+$')
-
-class NLZipCodeField(Field):
- """
- A Dutch postal code field.
- """
- default_error_messages = {
- 'invalid': _('Enter a valid postal code'),
- }
-
- def clean(self, value):
- super(NLZipCodeField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- value = value.strip().upper().replace(' ', '')
- if not pc_re.search(value):
- raise ValidationError(self.error_messages['invalid'])
-
- if int(value[:4]) < 1000:
- raise ValidationError(self.error_messages['invalid'])
-
- return u'%s %s' % (value[:4], value[4:])
-
-class NLProvinceSelect(Select):
- """
- A Select widget that uses a list of provinces of the Netherlands as its
- choices.
- """
- def __init__(self, attrs=None):
- from nl_provinces import PROVINCE_CHOICES
- super(NLProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)
-
-class NLPhoneNumberField(Field):
- """
- A Dutch telephone number field.
- """
- default_error_messages = {
- 'invalid': _('Enter a valid phone number'),
- }
-
- def clean(self, value):
- super(NLPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- phone_nr = re.sub('[\-\s\(\)]', '', smart_unicode(value))
-
- if len(phone_nr) == 10 and numeric_re.search(phone_nr):
- return value
-
- if phone_nr[:3] == '+31' and len(phone_nr) == 12 and \
- numeric_re.search(phone_nr[3:]):
- return value
-
- raise ValidationError(self.error_messages['invalid'])
-
-class NLSoFiNumberField(Field):
- """
- A Dutch social security number (SoFi/BSN) field.
-
- http://nl.wikipedia.org/wiki/Sofinummer
- """
- default_error_messages = {
- 'invalid': _('Enter a valid SoFi number'),
- }
-
- def clean(self, value):
- super(NLSoFiNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- if not sofi_re.search(value):
- raise ValidationError(self.error_messages['invalid'])
-
- if int(value) == 0:
- raise ValidationError(self.error_messages['invalid'])
-
- checksum = 0
- for i in range(9, 1, -1):
- checksum += int(value[9-i]) * i
- checksum -= int(value[-1])
-
- if checksum % 11 != 0:
- raise ValidationError(self.error_messages['invalid'])
-
- return value
diff --git a/parts/django/django/contrib/localflavor/nl/nl_provinces.py b/parts/django/django/contrib/localflavor/nl/nl_provinces.py
deleted file mode 100644
index 602917d..0000000
--- a/parts/django/django/contrib/localflavor/nl/nl_provinces.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.utils.translation import ugettext_lazy as _
-
-PROVINCE_CHOICES = (
- ('DR', _('Drenthe')),
- ('FL', _('Flevoland')),
- ('FR', _('Friesland')),
- ('GL', _('Gelderland')),
- ('GR', _('Groningen')),
- ('LB', _('Limburg')),
- ('NB', _('Noord-Brabant')),
- ('NH', _('Noord-Holland')),
- ('OV', _('Overijssel')),
- ('UT', _('Utrecht')),
- ('ZE', _('Zeeland')),
- ('ZH', _('Zuid-Holland')),
-)
diff --git a/parts/django/django/contrib/localflavor/no/__init__.py b/parts/django/django/contrib/localflavor/no/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/no/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/no/forms.py b/parts/django/django/contrib/localflavor/no/forms.py
deleted file mode 100644
index 61a269c..0000000
--- a/parts/django/django/contrib/localflavor/no/forms.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""
-Norwegian-specific Form helpers
-"""
-
-import re, datetime
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-
-class NOZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(NOZipCodeField, self).__init__(r'^\d{4}$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class NOMunicipalitySelect(Select):
- """
- A Select widget that uses a list of Norwegian municipalities (fylker)
- as its choices.
- """
- def __init__(self, attrs=None):
- from no_municipalities import MUNICIPALITY_CHOICES
- super(NOMunicipalitySelect, self).__init__(attrs, choices=MUNICIPALITY_CHOICES)
-
-class NOSocialSecurityNumber(Field):
- """
- Algorithm is documented at http://no.wikipedia.org/wiki/Personnummer
- """
- default_error_messages = {
- 'invalid': _(u'Enter a valid Norwegian social security number.'),
- }
-
- def clean(self, value):
- super(NOSocialSecurityNumber, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
-
- if not re.match(r'^\d{11}$', value):
- raise ValidationError(self.error_messages['invalid'])
-
- day = int(value[:2])
- month = int(value[2:4])
- year2 = int(value[4:6])
-
- inum = int(value[6:9])
- self.birthday = None
- try:
- if 000 <= inum < 500:
- self.birthday = datetime.date(1900+year2, month, day)
- if 500 <= inum < 750 and year2 > 54:
- self.birthday = datetime.date(1800+year2, month, day)
- if 500 <= inum < 1000 and year2 < 40:
- self.birthday = datetime.date(2000+year2, month, day)
- if 900 <= inum < 1000 and year2 > 39:
- self.birthday = datetime.date(1900+year2, month, day)
- except ValueError:
- raise ValidationError(self.error_messages['invalid'])
-
- sexnum = int(value[8])
- if sexnum % 2 == 0:
- self.gender = 'F'
- else:
- self.gender = 'M'
-
- digits = map(int, list(value))
- weight_1 = [3, 7, 6, 1, 8, 9, 4, 5, 2, 1, 0]
- weight_2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2, 1]
-
- def multiply_reduce(aval, bval):
- return sum([(a * b) for (a, b) in zip(aval, bval)])
-
- if multiply_reduce(digits, weight_1) % 11 != 0:
- raise ValidationError(self.error_messages['invalid'])
- if multiply_reduce(digits, weight_2) % 11 != 0:
- raise ValidationError(self.error_messages['invalid'])
-
- return value
-
diff --git a/parts/django/django/contrib/localflavor/no/no_municipalities.py b/parts/django/django/contrib/localflavor/no/no_municipalities.py
deleted file mode 100644
index d6bacda..0000000
--- a/parts/django/django/contrib/localflavor/no/no_municipalities.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-An alphabetical list of Norwegian municipalities (fylker) fro use as `choices`
-in a formfield.
-
-This exists in this standalone file so that it's on ly imported into memory
-when explicitly needed.
-"""
-
-MUNICIPALITY_CHOICES = (
- ('akershus', u'Akershus'),
- ('austagder', u'Aust-Agder'),
- ('buskerud', u'Buskerud'),
- ('finnmark', u'Finnmark'),
- ('hedmark', u'Hedmark'),
- ('hordaland', u'Hordaland'),
- ('janmayen', u'Jan Mayen'),
- ('moreogromsdal', u'Møre og Romsdal'),
- ('nordtrondelag', u'Nord-Trøndelag'),
- ('nordland', u'Nordland'),
- ('oppland', u'Oppland'),
- ('oslo', u'Oslo'),
- ('rogaland', u'Rogaland'),
- ('sognogfjordane', u'Sogn og Fjordane'),
- ('svalbard', u'Svalbard'),
- ('sortrondelag', u'Sør-Trøndelag'),
- ('telemark', u'Telemark'),
- ('troms', u'Troms'),
- ('vestagder', u'Vest-Agder'),
- ('vestfold', u'Vestfold'),
- ('ostfold', u'Østfold')
-)
diff --git a/parts/django/django/contrib/localflavor/pe/__init__.py b/parts/django/django/contrib/localflavor/pe/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/pe/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/pe/forms.py b/parts/django/django/contrib/localflavor/pe/forms.py
deleted file mode 100644
index 7a4ac9e..0000000
--- a/parts/django/django/contrib/localflavor/pe/forms.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-PE-specific Form helpers.
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import RegexField, CharField, Select
-from django.utils.translation import ugettext_lazy as _
-
-class PERegionSelect(Select):
- """
- A Select widget that uses a list of Peruvian Regions as its choices.
- """
- def __init__(self, attrs=None):
- from pe_region import REGION_CHOICES
- super(PERegionSelect, self).__init__(attrs, choices=REGION_CHOICES)
-
-class PEDNIField(CharField):
- """
- A field that validates `Documento Nacional de IdentidadŽ (DNI) numbers.
- """
- default_error_messages = {
- 'invalid': _("This field requires only numbers."),
- 'max_digits': _("This field requires 8 digits."),
- }
-
- def __init__(self, *args, **kwargs):
- super(PEDNIField, self).__init__(max_length=8, min_length=8, *args,
- **kwargs)
-
- def clean(self, value):
- """
- Value must be a string in the XXXXXXXX formats.
- """
- value = super(PEDNIField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- if not value.isdigit():
- raise ValidationError(self.error_messages['invalid'])
- if len(value) != 8:
- raise ValidationError(self.error_messages['max_digits'])
-
- return value
-
-class PERUCField(RegexField):
- """
- This field validates a RUC (Registro Unico de Contribuyentes). A RUC is of
- the form XXXXXXXXXXX.
- """
- default_error_messages = {
- 'invalid': _("This field requires only numbers."),
- 'max_digits': _("This field requires 11 digits."),
- }
-
- def __init__(self, *args, **kwargs):
- super(PERUCField, self).__init__(max_length=11, min_length=11, *args,
- **kwargs)
-
- def clean(self, value):
- """
- Value must be an 11-digit number.
- """
- value = super(PERUCField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- if not value.isdigit():
- raise ValidationError(self.error_messages['invalid'])
- if len(value) != 11:
- raise ValidationError(self.error_messages['max_digits'])
- return value
-
diff --git a/parts/django/django/contrib/localflavor/pe/pe_region.py b/parts/django/django/contrib/localflavor/pe/pe_region.py
deleted file mode 100644
index 9863bd3..0000000
--- a/parts/django/django/contrib/localflavor/pe/pe_region.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-A list of Peru regions as `choices` in a formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-REGION_CHOICES = (
- ('AMA', u'Amazonas'),
- ('ANC', u'Ancash'),
- ('APU', u'Apurímac'),
- ('ARE', u'Arequipa'),
- ('AYA', u'Ayacucho'),
- ('CAJ', u'Cajamarca'),
- ('CAL', u'Callao'),
- ('CUS', u'Cusco'),
- ('HUV', u'Huancavelica'),
- ('HUC', u'Huánuco'),
- ('ICA', u'Ica'),
- ('JUN', u'Junín'),
- ('LAL', u'La Libertad'),
- ('LAM', u'Lambayeque'),
- ('LIM', u'Lima'),
- ('LOR', u'Loreto'),
- ('MDD', u'Madre de Dios'),
- ('MOQ', u'Moquegua'),
- ('PAS', u'Pasco'),
- ('PIU', u'Piura'),
- ('PUN', u'Puno'),
- ('SAM', u'San Martín'),
- ('TAC', u'Tacna'),
- ('TUM', u'Tumbes'),
- ('UCA', u'Ucayali'),
-)
diff --git a/parts/django/django/contrib/localflavor/pl/__init__.py b/parts/django/django/contrib/localflavor/pl/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/pl/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/pl/forms.py b/parts/django/django/contrib/localflavor/pl/forms.py
deleted file mode 100644
index d1e9773..0000000
--- a/parts/django/django/contrib/localflavor/pl/forms.py
+++ /dev/null
@@ -1,160 +0,0 @@
-"""
-Polish-specific form helpers
-"""
-
-import re
-
-from django.forms import ValidationError
-from django.forms.fields import Select, RegexField
-from django.utils.translation import ugettext_lazy as _
-from django.core.validators import EMPTY_VALUES
-
-class PLProvinceSelect(Select):
- """
- A select widget with list of Polish administrative provinces as choices.
- """
- def __init__(self, attrs=None):
- from pl_voivodeships import VOIVODESHIP_CHOICES
- super(PLProvinceSelect, self).__init__(attrs, choices=VOIVODESHIP_CHOICES)
-
-class PLCountySelect(Select):
- """
- A select widget with list of Polish administrative units as choices.
- """
- def __init__(self, attrs=None):
- from pl_administrativeunits import ADMINISTRATIVE_UNIT_CHOICES
- super(PLCountySelect, self).__init__(attrs, choices=ADMINISTRATIVE_UNIT_CHOICES)
-
-class PLPESELField(RegexField):
- """
- A form field that validates as Polish Identification Number (PESEL).
-
- Checks the following rules:
- * the length consist of 11 digits
- * has a valid checksum
-
- The algorithm is documented at http://en.wikipedia.org/wiki/PESEL.
- """
- default_error_messages = {
- 'invalid': _(u'National Identification Number consists of 11 digits.'),
- 'checksum': _(u'Wrong checksum for the National Identification Number.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(PLPESELField, self).__init__(r'^\d{11}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self,value):
- super(PLPESELField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- if not self.has_valid_checksum(value):
- raise ValidationError(self.error_messages['checksum'])
- return u'%s' % value
-
- def has_valid_checksum(self, number):
- """
- Calculates a checksum with the provided algorithm.
- """
- multiple_table = (1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1)
- result = 0
- for i in range(len(number)):
- result += int(number[i]) * multiple_table[i]
- return result % 10 == 0
-
-class PLNIPField(RegexField):
- """
- A form field that validates as Polish Tax Number (NIP).
- Valid forms are: XXX-XXX-YY-YY or XX-XX-YYY-YYY.
-
- Checksum algorithm based on documentation at
- http://wipos.p.lodz.pl/zylla/ut/nip-rego.html
- """
- default_error_messages = {
- 'invalid': _(u'Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX.'),
- 'checksum': _(u'Wrong checksum for the Tax Number (NIP).'),
- }
-
- def __init__(self, *args, **kwargs):
- super(PLNIPField, self).__init__(r'^\d{3}-\d{3}-\d{2}-\d{2}$|^\d{2}-\d{2}-\d{3}-\d{3}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self,value):
- super(PLNIPField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub("[-]", "", value)
- if not self.has_valid_checksum(value):
- raise ValidationError(self.error_messages['checksum'])
- return u'%s' % value
-
- def has_valid_checksum(self, number):
- """
- Calculates a checksum with the provided algorithm.
- """
- multiple_table = (6, 5, 7, 2, 3, 4, 5, 6, 7)
- result = 0
- for i in range(len(number)-1):
- result += int(number[i]) * multiple_table[i]
-
- result %= 11
- if result == int(number[-1]):
- return True
- else:
- return False
-
-class PLREGONField(RegexField):
- """
- A form field that validates its input is a REGON number.
-
- Valid regon number consists of 9 or 14 digits.
- See http://www.stat.gov.pl/bip/regon_ENG_HTML.htm for more information.
- """
- default_error_messages = {
- 'invalid': _(u'National Business Register Number (REGON) consists of 9 or 14 digits.'),
- 'checksum': _(u'Wrong checksum for the National Business Register Number (REGON).'),
- }
-
- def __init__(self, *args, **kwargs):
- super(PLREGONField, self).__init__(r'^\d{9,14}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self,value):
- super(PLREGONField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- if not self.has_valid_checksum(value):
- raise ValidationError(self.error_messages['checksum'])
- return u'%s' % value
-
- def has_valid_checksum(self, number):
- """
- Calculates a checksum with the provided algorithm.
- """
- weights = (
- (8, 9, 2, 3, 4, 5, 6, 7, -1),
- (2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8, -1),
- (8, 9, 2, 3, 4, 5, 6, 7, -1, 0, 0, 0, 0, 0),
- )
-
- weights = [table for table in weights if len(table) == len(number)]
-
- for table in weights:
- checksum = sum([int(n) * w for n, w in zip(number, table)])
- if checksum % 11 % 10:
- return False
-
- return bool(weights)
-
-class PLPostalCodeField(RegexField):
- """
- A form field that validates as Polish postal code.
- Valid code is XX-XXX where X is digit.
- """
- default_error_messages = {
- 'invalid': _(u'Enter a postal code in the format XX-XXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(PLPostalCodeField, self).__init__(r'^\d{2}-\d{3}$',
- max_length=None, min_length=None, *args, **kwargs)
diff --git a/parts/django/django/contrib/localflavor/pl/pl_administrativeunits.py b/parts/django/django/contrib/localflavor/pl/pl_administrativeunits.py
deleted file mode 100644
index 9777ea2..0000000
--- a/parts/django/django/contrib/localflavor/pl/pl_administrativeunits.py
+++ /dev/null
@@ -1,385 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Polish administrative units as in http://pl.wikipedia.org/wiki/Podzia%C5%82_administracyjny_Polski
-"""
-
-
-ADMINISTRATIVE_UNIT_CHOICES = (
- ('wroclaw', u'Wrocław'),
- ('jeleniagora', u'Jelenia Góra'),
- ('legnica', u'Legnica'),
- ('boleslawiecki', u'bolesławiecki'),
- ('dzierzoniowski', u'dzierżoniowski'),
- ('glogowski', u'głogowski'),
- ('gorowski', u'górowski'),
- ('jaworski', u'jaworski'),
- ('jeleniogorski', u'jeleniogórski'),
- ('kamiennogorski', u'kamiennogórski'),
- ('klodzki', u'kłodzki'),
- ('legnicki', u'legnicki'),
- ('lubanski', u'lubański'),
- ('lubinski', u'lubiński'),
- ('lwowecki', u'lwówecki'),
- ('milicki', u'milicki'),
- ('olesnicki', u'oleśnicki'),
- ('olawski', u'oławski'),
- ('polkowicki', u'polkowicki'),
- ('strzelinski', u'strzeliński'),
- ('sredzki', u'średzki'),
- ('swidnicki', u'świdnicki'),
- ('trzebnicki', u'trzebnicki'),
- ('walbrzyski', u'wałbrzyski'),
- ('wolowski', u'wołowski'),
- ('wroclawski', u'wrocławski'),
- ('zabkowicki', u'ząbkowicki'),
- ('zgorzelecki', u'zgorzelecki'),
- ('zlotoryjski', u'złotoryjski'),
- ('bydgoszcz', u'Bydgoszcz'),
- ('torun', u'Toruń'),
- ('wloclawek', u'Włocławek'),
- ('grudziadz', u'Grudziądz'),
- ('aleksandrowski', u'aleksandrowski'),
- ('brodnicki', u'brodnicki'),
- ('bydgoski', u'bydgoski'),
- ('chelminski', u'chełmiński'),
- ('golubsko-dobrzynski', u'golubsko-dobrzyński'),
- ('grudziadzki', u'grudziądzki'),
- ('inowroclawski', u'inowrocławski'),
- ('lipnowski', u'lipnowski'),
- ('mogilenski', u'mogileński'),
- ('nakielski', u'nakielski'),
- ('radziejowski', u'radziejowski'),
- ('rypinski', u'rypiński'),
- ('sepolenski', u'sępoleński'),
- ('swiecki', u'świecki'),
- ('torunski', u'toruński'),
- ('tucholski', u'tucholski'),
- ('wabrzeski', u'wąbrzeski'),
- ('wloclawski', u'wrocławski'),
- ('zninski', u'źniński'),
- ('lublin', u'Lublin'),
- ('biala-podlaska', u'Biała Podlaska'),
- ('chelm', u'Chełm'),
- ('zamosc', u'Zamość'),
- ('bialski', u'bialski'),
- ('bilgorajski', u'biłgorajski'),
- ('chelmski', u'chełmski'),
- ('hrubieszowski', u'hrubieszowski'),
- ('janowski', u'janowski'),
- ('krasnostawski', u'krasnostawski'),
- ('krasnicki', u'kraśnicki'),
- ('lubartowski', u'lubartowski'),
- ('lubelski', u'lubelski'),
- ('leczynski', u'łęczyński'),
- ('lukowski', u'łukowski'),
- ('opolski', u'opolski'),
- ('parczewski', u'parczewski'),
- ('pulawski', u'puławski'),
- ('radzynski', u'radzyński'),
- ('rycki', u'rycki'),
- ('swidnicki', u'świdnicki'),
- ('tomaszowski', u'tomaszowski'),
- ('wlodawski', u'włodawski'),
- ('zamojski', u'zamojski'),
- ('gorzow-wielkopolski', u'Gorzów Wielkopolski'),
- ('zielona-gora', u'Zielona Góra'),
- ('gorzowski', u'gorzowski'),
- ('krosnienski', u'krośnieński'),
- ('miedzyrzecki', u'międzyrzecki'),
- ('nowosolski', u'nowosolski'),
- ('slubicki', u'słubicki'),
- ('strzelecko-drezdenecki', u'strzelecko-drezdenecki'),
- ('sulecinski', u'suleńciński'),
- ('swiebodzinski', u'świebodziński'),
- ('wschowski', u'wschowski'),
- ('zielonogorski', u'zielonogórski'),
- ('zaganski', u'żagański'),
- ('zarski', u'żarski'),
- ('lodz', u'Łódź'),
- ('piotrkow-trybunalski', u'Piotrków Trybunalski'),
- ('skierniewice', u'Skierniewice'),
- ('belchatowski', u'bełchatowski'),
- ('brzezinski', u'brzeziński'),
- ('kutnowski', u'kutnowski'),
- ('laski', u'łaski'),
- ('leczycki', u'łęczycki'),
- ('lowicki', u'łowicki'),
- ('lodzki wschodni', u'łódzki wschodni'),
- ('opoczynski', u'opoczyński'),
- ('pabianicki', u'pabianicki'),
- ('pajeczanski', u'pajęczański'),
- ('piotrkowski', u'piotrkowski'),
- ('poddebicki', u'poddębicki'),
- ('radomszczanski', u'radomszczański'),
- ('rawski', u'rawski'),
- ('sieradzki', u'sieradzki'),
- ('skierniewicki', u'skierniewicki'),
- ('tomaszowski', u'tomaszowski'),
- ('wielunski', u'wieluński'),
- ('wieruszowski', u'wieruszowski'),
- ('zdunskowolski', u'zduńskowolski'),
- ('zgierski', u'zgierski'),
- ('krakow', u'Kraków'),
- ('tarnow', u'Tarnów'),
- ('nowy-sacz', u'Nowy Sącz'),
- ('bochenski', u'bocheński'),
- ('brzeski', u'brzeski'),
- ('chrzanowski', u'chrzanowski'),
- ('dabrowski', u'dąbrowski'),
- ('gorlicki', u'gorlicki'),
- ('krakowski', u'krakowski'),
- ('limanowski', u'limanowski'),
- ('miechowski', u'miechowski'),
- ('myslenicki', u'myślenicki'),
- ('nowosadecki', u'nowosądecki'),
- ('nowotarski', u'nowotarski'),
- ('olkuski', u'olkuski'),
- ('oswiecimski', u'oświęcimski'),
- ('proszowicki', u'proszowicki'),
- ('suski', u'suski'),
- ('tarnowski', u'tarnowski'),
- ('tatrzanski', u'tatrzański'),
- ('wadowicki', u'wadowicki'),
- ('wielicki', u'wielicki'),
- ('warszawa', u'Warszawa'),
- ('ostroleka', u'Ostrołęka'),
- ('plock', u'Płock'),
- ('radom', u'Radom'),
- ('siedlce', u'Siedlce'),
- ('bialobrzeski', u'białobrzeski'),
- ('ciechanowski', u'ciechanowski'),
- ('garwolinski', u'garwoliński'),
- ('gostyninski', u'gostyniński'),
- ('grodziski', u'grodziski'),
- ('grojecki', u'grójecki'),
- ('kozienicki', u'kozenicki'),
- ('legionowski', u'legionowski'),
- ('lipski', u'lipski'),
- ('losicki', u'łosicki'),
- ('makowski', u'makowski'),
- ('minski', u'miński'),
- ('mlawski', u'mławski'),
- ('nowodworski', u'nowodworski'),
- ('ostrolecki', u'ostrołęcki'),
- ('ostrowski', u'ostrowski'),
- ('otwocki', u'otwocki'),
- ('piaseczynski', u'piaseczyński'),
- ('plocki', u'płocki'),
- ('plonski', u'płoński'),
- ('pruszkowski', u'pruszkowski'),
- ('przasnyski', u'przasnyski'),
- ('przysuski', u'przysuski'),
- ('pultuski', u'pułtuski'),
- ('radomski', u'radomski'),
- ('siedlecki', u'siedlecki'),
- ('sierpecki', u'sierpecki'),
- ('sochaczewski', u'sochaczewski'),
- ('sokolowski', u'sokołowski'),
- ('szydlowiecki', u'szydłowiecki'),
- ('warszawski-zachodni', u'warszawski zachodni'),
- ('wegrowski', u'węgrowski'),
- ('wolominski', u'wołomiński'),
- ('wyszkowski', u'wyszkowski'),
- ('zwolenski', u'zwoleński'),
- ('zurominski', u'żuromiński'),
- ('zyrardowski', u'żyrardowski'),
- ('opole', u'Opole'),
- ('brzeski', u'brzeski'),
- ('glubczycki', u'głubczyski'),
- ('kedzierzynsko-kozielski', u'kędzierzyński-kozielski'),
- ('kluczborski', u'kluczborski'),
- ('krapkowicki', u'krapkowicki'),
- ('namyslowski', u'namysłowski'),
- ('nyski', u'nyski'),
- ('oleski', u'oleski'),
- ('opolski', u'opolski'),
- ('prudnicki', u'prudnicki'),
- ('strzelecki', u'strzelecki'),
- ('rzeszow', u'Rzeszów'),
- ('krosno', u'Krosno'),
- ('przemysl', u'Przemyśl'),
- ('tarnobrzeg', u'Tarnobrzeg'),
- ('bieszczadzki', u'bieszczadzki'),
- ('brzozowski', u'brzozowski'),
- ('debicki', u'dębicki'),
- ('jaroslawski', u'jarosławski'),
- ('jasielski', u'jasielski'),
- ('kolbuszowski', u'kolbuszowski'),
- ('krosnienski', u'krośnieński'),
- ('leski', u'leski'),
- ('lezajski', u'leżajski'),
- ('lubaczowski', u'lubaczowski'),
- ('lancucki', u'łańcucki'),
- ('mielecki', u'mielecki'),
- ('nizanski', u'niżański'),
- ('przemyski', u'przemyski'),
- ('przeworski', u'przeworski'),
- ('ropczycko-sedziszowski', u'ropczycko-sędziszowski'),
- ('rzeszowski', u'rzeszowski'),
- ('sanocki', u'sanocki'),
- ('stalowowolski', u'stalowowolski'),
- ('strzyzowski', u'strzyżowski'),
- ('tarnobrzeski', u'tarnobrzeski'),
- ('bialystok', u'Białystok'),
- ('lomza', u'Łomża'),
- ('suwalki', u'Suwałki'),
- ('augustowski', u'augustowski'),
- ('bialostocki', u'białostocki'),
- ('bielski', u'bielski'),
- ('grajewski', u'grajewski'),
- ('hajnowski', u'hajnowski'),
- ('kolnenski', u'kolneński'),
- ('łomzynski', u'łomżyński'),
- ('moniecki', u'moniecki'),
- ('sejnenski', u'sejneński'),
- ('siemiatycki', u'siematycki'),
- ('sokolski', u'sokólski'),
- ('suwalski', u'suwalski'),
- ('wysokomazowiecki', u'wysokomazowiecki'),
- ('zambrowski', u'zambrowski'),
- ('gdansk', u'Gdańsk'),
- ('gdynia', u'Gdynia'),
- ('slupsk', u'Słupsk'),
- ('sopot', u'Sopot'),
- ('bytowski', u'bytowski'),
- ('chojnicki', u'chojnicki'),
- ('czluchowski', u'człuchowski'),
- ('kartuski', u'kartuski'),
- ('koscierski', u'kościerski'),
- ('kwidzynski', u'kwidzyński'),
- ('leborski', u'lęborski'),
- ('malborski', u'malborski'),
- ('nowodworski', u'nowodworski'),
- ('gdanski', u'gdański'),
- ('pucki', u'pucki'),
- ('slupski', u'słupski'),
- ('starogardzki', u'starogardzki'),
- ('sztumski', u'sztumski'),
- ('tczewski', u'tczewski'),
- ('wejherowski', u'wejcherowski'),
- ('katowice', u'Katowice'),
- ('bielsko-biala', u'Bielsko-Biała'),
- ('bytom', u'Bytom'),
- ('chorzow', u'Chorzów'),
- ('czestochowa', u'Częstochowa'),
- ('dabrowa-gornicza', u'Dąbrowa Górnicza'),
- ('gliwice', u'Gliwice'),
- ('jastrzebie-zdroj', u'Jastrzębie Zdrój'),
- ('jaworzno', u'Jaworzno'),
- ('myslowice', u'Mysłowice'),
- ('piekary-slaskie', u'Piekary Śląskie'),
- ('ruda-slaska', u'Ruda Śląska'),
- ('rybnik', u'Rybnik'),
- ('siemianowice-slaskie', u'Siemianowice Śląskie'),
- ('sosnowiec', u'Sosnowiec'),
- ('swietochlowice', u'Świętochłowice'),
- ('tychy', u'Tychy'),
- ('zabrze', u'Zabrze'),
- ('zory', u'Żory'),
- ('bedzinski', u'będziński'),
- ('bielski', u'bielski'),
- ('bierunsko-ledzinski', u'bieruńsko-lędziński'),
- ('cieszynski', u'cieszyński'),
- ('czestochowski', u'częstochowski'),
- ('gliwicki', u'gliwicki'),
- ('klobucki', u'kłobucki'),
- ('lubliniecki', u'lubliniecki'),
- ('mikolowski', u'mikołowski'),
- ('myszkowski', u'myszkowski'),
- ('pszczynski', u'pszczyński'),
- ('raciborski', u'raciborski'),
- ('rybnicki', u'rybnicki'),
- ('tarnogorski', u'tarnogórski'),
- ('wodzislawski', u'wodzisławski'),
- ('zawiercianski', u'zawierciański'),
- ('zywiecki', u'żywiecki'),
- ('kielce', u'Kielce'),
- ('buski', u'buski'),
- ('jedrzejowski', u'jędrzejowski'),
- ('kazimierski', u'kazimierski'),
- ('kielecki', u'kielecki'),
- ('konecki', u'konecki'),
- ('opatowski', u'opatowski'),
- ('ostrowiecki', u'ostrowiecki'),
- ('pinczowski', u'pińczowski'),
- ('sandomierski', u'sandomierski'),
- ('skarzyski', u'skarżyski'),
- ('starachowicki', u'starachowicki'),
- ('staszowski', u'staszowski'),
- ('wloszczowski', u'włoszczowski'),
- ('olsztyn', u'Olsztyn'),
- ('elblag', u'Elbląg'),
- ('bartoszycki', u'bartoszycki'),
- ('braniewski', u'braniewski'),
- ('dzialdowski', u'działdowski'),
- ('elblaski', u'elbląski'),
- ('elcki', u'ełcki'),
- ('gizycki', u'giżycki'),
- ('goldapski', u'gołdapski'),
- ('ilawski', u'iławski'),
- ('ketrzynski', u'kętrzyński'),
- ('lidzbarski', u'lidzbarski'),
- ('mragowski', u'mrągowski'),
- ('nidzicki', u'nidzicki'),
- ('nowomiejski', u'nowomiejski'),
- ('olecki', u'olecki'),
- ('olsztynski', u'olsztyński'),
- ('ostrodzki', u'ostródzki'),
- ('piski', u'piski'),
- ('szczycienski', u'szczycieński'),
- ('wegorzewski', u'węgorzewski'),
- ('poznan', u'Poznań'),
- ('kalisz', u'Kalisz'),
- ('konin', u'Konin'),
- ('leszno', u'Leszno'),
- ('chodzieski', u'chodziejski'),
- ('czarnkowsko-trzcianecki', u'czarnkowsko-trzcianecki'),
- ('gnieznienski', u'gnieźnieński'),
- ('gostynski', u'gostyński'),
- ('grodziski', u'grodziski'),
- ('jarocinski', u'jarociński'),
- ('kaliski', u'kaliski'),
- ('kepinski', u'kępiński'),
- ('kolski', u'kolski'),
- ('koninski', u'koniński'),
- ('koscianski', u'kościański'),
- ('krotoszynski', u'krotoszyński'),
- ('leszczynski', u'leszczyński'),
- ('miedzychodzki', u'międzychodzki'),
- ('nowotomyski', u'nowotomyski'),
- ('obornicki', u'obornicki'),
- ('ostrowski', u'ostrowski'),
- ('ostrzeszowski', u'ostrzeszowski'),
- ('pilski', u'pilski'),
- ('pleszewski', u'pleszewski'),
- ('poznanski', u'poznański'),
- ('rawicki', u'rawicki'),
- ('slupecki', u'słupecki'),
- ('szamotulski', u'szamotulski'),
- ('sredzki', u'średzki'),
- ('sremski', u'śremski'),
- ('turecki', u'turecki'),
- ('wagrowiecki', u'wągrowiecki'),
- ('wolsztynski', u'wolsztyński'),
- ('wrzesinski', u'wrzesiński'),
- ('zlotowski', u'złotowski'),
- ('bialogardzki', u'białogardzki'),
- ('choszczenski', u'choszczeński'),
- ('drawski', u'drawski'),
- ('goleniowski', u'goleniowski'),
- ('gryficki', u'gryficki'),
- ('gryfinski', u'gryfiński'),
- ('kamienski', u'kamieński'),
- ('kolobrzeski', u'kołobrzeski'),
- ('koszalinski', u'koszaliński'),
- ('lobeski', u'łobeski'),
- ('mysliborski', u'myśliborski'),
- ('policki', u'policki'),
- ('pyrzycki', u'pyrzycki'),
- ('slawienski', u'sławieński'),
- ('stargardzki', u'stargardzki'),
- ('szczecinecki', u'szczecinecki'),
- ('swidwinski', u'świdwiński'),
- ('walecki', u'wałecki'),
-)
-
diff --git a/parts/django/django/contrib/localflavor/pl/pl_voivodeships.py b/parts/django/django/contrib/localflavor/pl/pl_voivodeships.py
deleted file mode 100644
index d8caede..0000000
--- a/parts/django/django/contrib/localflavor/pl/pl_voivodeships.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-Polish voivodeship as in http://en.wikipedia.org/wiki/Poland#Administrative_division
-"""
-
-from django.utils.translation import ugettext_lazy as _
-
-VOIVODESHIP_CHOICES = (
- ('lower_silesia', _('Lower Silesia')),
- ('kuyavia-pomerania', _('Kuyavia-Pomerania')),
- ('lublin', _('Lublin')),
- ('lubusz', _('Lubusz')),
- ('lodz', _('Lodz')),
- ('lesser_poland', _('Lesser Poland')),
- ('masovia', _('Masovia')),
- ('opole', _('Opole')),
- ('subcarpatia', _('Subcarpatia')),
- ('podlasie', _('Podlasie')),
- ('pomerania', _('Pomerania')),
- ('silesia', _('Silesia')),
- ('swietokrzyskie', _('Swietokrzyskie')),
- ('warmia-masuria', _('Warmia-Masuria')),
- ('greater_poland', _('Greater Poland')),
- ('west_pomerania', _('West Pomerania')),
-)
diff --git a/parts/django/django/contrib/localflavor/pt/__init__.py b/parts/django/django/contrib/localflavor/pt/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/pt/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/pt/forms.py b/parts/django/django/contrib/localflavor/pt/forms.py
deleted file mode 100644
index 1f51679..0000000
--- a/parts/django/django/contrib/localflavor/pt/forms.py
+++ /dev/null
@@ -1,48 +0,0 @@
-"""
-PT-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-import re
-
-phone_digits_re = re.compile(r'^(\d{9}|(00|\+)\d*)$')
-
-
-class PTZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXX-XXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(PTZipCodeField, self).__init__(r'^(\d{4}-\d{3}|\d{7})$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self,value):
- cleaned = super(PTZipCodeField, self).clean(value)
- if len(cleaned) == 7:
- return u'%s-%s' % (cleaned[:4],cleaned[4:])
- else:
- return cleaned
-
-class PTPhoneNumberField(Field):
- """
- Validate local Portuguese phone number (including international ones)
- It should have 9 digits (may include spaces) or start by 00 or + (international)
- """
- default_error_messages = {
- 'invalid': _('Phone numbers must have 9 digits, or start by + or 00.'),
- }
-
- def clean(self, value):
- super(PTPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\.|\s)', '', smart_unicode(value))
- m = phone_digits_re.search(value)
- if m:
- return u'%s' % value
- raise ValidationError(self.error_messages['invalid'])
diff --git a/parts/django/django/contrib/localflavor/ro/__init__.py b/parts/django/django/contrib/localflavor/ro/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/ro/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/ro/forms.py b/parts/django/django/contrib/localflavor/ro/forms.py
deleted file mode 100644
index a218bfd..0000000
--- a/parts/django/django/contrib/localflavor/ro/forms.py
+++ /dev/null
@@ -1,206 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Romanian specific form helpers.
-"""
-
-import re
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError, Field, RegexField, Select
-from django.utils.translation import ugettext_lazy as _
-
-class ROCIFField(RegexField):
- """
- A Romanian fiscal identity code (CIF) field
-
- For CIF validation algorithm see http://www.validari.ro/cui.html
- """
- default_error_messages = {
- 'invalid': _("Enter a valid CIF."),
- }
-
- def __init__(self, *args, **kwargs):
- super(ROCIFField, self).__init__(r'^(RO)?[0-9]{2,10}', max_length=10,
- min_length=2, *args, **kwargs)
-
- def clean(self, value):
- """
- CIF validation
- """
- value = super(ROCIFField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- # strip RO part
- if value[0:2] == 'RO':
- value = value[2:]
- key = '753217532'[::-1]
- value = value[::-1]
- key_iter = iter(key)
- checksum = 0
- for digit in value[1:]:
- checksum += int(digit) * int(key_iter.next())
- checksum = checksum * 10 % 11
- if checksum == 10:
- checksum = 0
- if checksum != int(value[0]):
- raise ValidationError(self.error_messages['invalid'])
- return value[::-1]
-
-class ROCNPField(RegexField):
- """
- A Romanian personal identity code (CNP) field
-
- For CNP validation algorithm see http://www.validari.ro/cnp.html
- """
- default_error_messages = {
- 'invalid': _("Enter a valid CNP."),
- }
-
- def __init__(self, *args, **kwargs):
- super(ROCNPField, self).__init__(r'^[1-9][0-9]{12}', max_length=13,
- min_length=13, *args, **kwargs)
-
- def clean(self, value):
- """
- CNP validations
- """
- value = super(ROCNPField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- # check birthdate digits
- import datetime
- try:
- datetime.date(int(value[1:3]),int(value[3:5]),int(value[5:7]))
- except:
- raise ValidationError(self.error_messages['invalid'])
- # checksum
- key = '279146358279'
- checksum = 0
- value_iter = iter(value)
- for digit in key:
- checksum += int(digit) * int(value_iter.next())
- checksum %= 11
- if checksum == 10:
- checksum = 1
- if checksum != int(value[12]):
- raise ValidationError(self.error_messages['invalid'])
- return value
-
-class ROCountyField(Field):
- """
- A form field that validates its input is a Romanian county name or
- abbreviation. It normalizes the input to the standard vehicle registration
- abbreviation for the given county
-
- WARNING: This field will only accept names written with diacritics; consider
- using ROCountySelect if this behavior is unnaceptable for you
- Example:
- Argeş => valid
- Arges => invalid
- """
- default_error_messages = {
- 'invalid': u'Enter a Romanian county code or name.',
- }
-
- def clean(self, value):
- from ro_counties import COUNTIES_CHOICES
- super(ROCountyField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- try:
- value = value.strip().upper()
- except AttributeError:
- pass
- # search for county code
- for entry in COUNTIES_CHOICES:
- if value in entry:
- return value
- # search for county name
- normalized_CC = []
- for entry in COUNTIES_CHOICES:
- normalized_CC.append((entry[0],entry[1].upper()))
- for entry in normalized_CC:
- if entry[1] == value:
- return entry[0]
- raise ValidationError(self.error_messages['invalid'])
-
-class ROCountySelect(Select):
- """
- A Select widget that uses a list of Romanian counties (judete) as its
- choices.
- """
- def __init__(self, attrs=None):
- from ro_counties import COUNTIES_CHOICES
- super(ROCountySelect, self).__init__(attrs, choices=COUNTIES_CHOICES)
-
-class ROIBANField(RegexField):
- """
- Romanian International Bank Account Number (IBAN) field
-
- For Romanian IBAN validation algorithm see http://validari.ro/iban.html
- """
- default_error_messages = {
- 'invalid': _('Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ROIBANField, self).__init__(r'^[0-9A-Za-z\-\s]{24,40}$',
- max_length=40, min_length=24, *args, **kwargs)
-
- def clean(self, value):
- """
- Strips - and spaces, performs country code and checksum validation
- """
- value = super(ROIBANField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = value.replace('-','')
- value = value.replace(' ','')
- value = value.upper()
- if value[0:2] != 'RO':
- raise ValidationError(self.error_messages['invalid'])
- numeric_format = ''
- for char in value[4:] + value[0:4]:
- if char.isalpha():
- numeric_format += str(ord(char) - 55)
- else:
- numeric_format += char
- if int(numeric_format) % 97 != 1:
- raise ValidationError(self.error_messages['invalid'])
- return value
-
-class ROPhoneNumberField(RegexField):
- """Romanian phone number field"""
- default_error_messages = {
- 'invalid': _('Phone numbers must be in XXXX-XXXXXX format.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ROPhoneNumberField, self).__init__(r'^[0-9\-\(\)\s]{10,20}$',
- max_length=20, min_length=10, *args, **kwargs)
-
- def clean(self, value):
- """
- Strips -, (, ) and spaces. Checks the final length.
- """
- value = super(ROPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = value.replace('-','')
- value = value.replace('(','')
- value = value.replace(')','')
- value = value.replace(' ','')
- if len(value) != 10:
- raise ValidationError(self.error_messages['invalid'])
- return value
-
-class ROPostalCodeField(RegexField):
- """Romanian postal code field."""
- default_error_messages = {
- 'invalid': _('Enter a valid postal code in the format XXXXXX'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ROPostalCodeField, self).__init__(r'^[0-9][0-8][0-9]{4}$',
- max_length=6, min_length=6, *args, **kwargs)
-
diff --git a/parts/django/django/contrib/localflavor/ro/ro_counties.py b/parts/django/django/contrib/localflavor/ro/ro_counties.py
deleted file mode 100644
index 40423dd..0000000
--- a/parts/django/django/contrib/localflavor/ro/ro_counties.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-A list of Romanian counties as `choices` in a formfield.
-
-This exists as a standalone file so that it's only imported into memory when
-explicitly needed.
-"""
-
-COUNTIES_CHOICES = (
- ('AB', u'Alba'),
- ('AR', u'Arad'),
- ('AG', u'Argeş'),
- ('BC', u'Bacău'),
- ('BH', u'Bihor'),
- ('BN', u'Bistriţa-Năsăud'),
- ('BT', u'Botoşani'),
- ('BV', u'Braşov'),
- ('BR', u'Brăila'),
- ('B', u'Bucureşti'),
- ('BZ', u'Buzău'),
- ('CS', u'Caraş-Severin'),
- ('CL', u'Călăraşi'),
- ('CJ', u'Cluj'),
- ('CT', u'Constanţa'),
- ('CV', u'Covasna'),
- ('DB', u'Dâmboviţa'),
- ('DJ', u'Dolj'),
- ('GL', u'Galaţi'),
- ('GR', u'Giurgiu'),
- ('GJ', u'Gorj'),
- ('HR', u'Harghita'),
- ('HD', u'Hunedoara'),
- ('IL', u'Ialomiţa'),
- ('IS', u'Iaşi'),
- ('IF', u'Ilfov'),
- ('MM', u'Maramureş'),
- ('MH', u'Mehedinţi'),
- ('MS', u'Mureş'),
- ('NT', u'Neamţ'),
- ('OT', u'Olt'),
- ('PH', u'Prahova'),
- ('SM', u'Satu Mare'),
- ('SJ', u'Sălaj'),
- ('SB', u'Sibiu'),
- ('SV', u'Suceava'),
- ('TR', u'Teleorman'),
- ('TM', u'Timiş'),
- ('TL', u'Tulcea'),
- ('VS', u'Vaslui'),
- ('VL', u'Vâlcea'),
- ('VN', u'Vrancea'),
-)
diff --git a/parts/django/django/contrib/localflavor/se/__init__.py b/parts/django/django/contrib/localflavor/se/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/se/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/se/forms.py b/parts/django/django/contrib/localflavor/se/forms.py
deleted file mode 100644
index 951f4f8..0000000
--- a/parts/django/django/contrib/localflavor/se/forms.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Swedish specific Form helpers
-"""
-import re
-from django import forms
-from django.utils.translation import ugettext_lazy as _
-from django.core.validators import EMPTY_VALUES
-from django.contrib.localflavor.se.utils import (id_number_checksum,
- validate_id_birthday, format_personal_id_number, valid_organisation,
- format_organisation_number)
-
-__all__ = ('SECountySelect', 'SEOrganisationNumberField',
- 'SEPersonalIdentityNumberField', 'SEPostalCodeField')
-
-SWEDISH_ID_NUMBER = re.compile(r'^(?P<century>\d{2})?(?P<year>\d{2})(?P<month>\d{2})(?P<day>\d{2})(?P<sign>[\-+])?(?P<serial>\d{3})(?P<checksum>\d)$')
-SE_POSTAL_CODE = re.compile(r'^[1-9]\d{2} ?\d{2}$')
-
-class SECountySelect(forms.Select):
- """
- A Select form widget that uses a list of the Swedish counties (län) as its
- choices.
-
- The cleaned value is the official county code -- see
- http://en.wikipedia.org/wiki/Counties_of_Sweden for a list.
- """
-
- def __init__(self, attrs=None):
- from se_counties import COUNTY_CHOICES
- super(SECountySelect, self).__init__(attrs=attrs,
- choices=COUNTY_CHOICES)
-
-class SEOrganisationNumberField(forms.CharField):
- """
- A form field that validates input as a Swedish organisation number
- (organisationsnummer).
-
- It accepts the same input as SEPersonalIdentityField (for sole
- proprietorships (enskild firma). However, co-ordination numbers are not
- accepted.
-
- It also accepts ordinary Swedish organisation numbers with the format
- NNNNNNNNNN.
-
- The return value will be YYYYMMDDXXXX for sole proprietors, and NNNNNNNNNN
- for other organisations.
- """
-
- default_error_messages = {
- 'invalid': _('Enter a valid Swedish organisation number.'),
- }
-
- def clean(self, value):
- value = super(SEOrganisationNumberField, self).clean(value)
-
- if value in EMPTY_VALUES:
- return u''
-
- match = SWEDISH_ID_NUMBER.match(value)
- if not match:
- raise forms.ValidationError(self.error_messages['invalid'])
-
- gd = match.groupdict()
-
- # Compare the calculated value with the checksum
- if id_number_checksum(gd) != int(gd['checksum']):
- raise forms.ValidationError(self.error_messages['invalid'])
-
- # First: check if this is a real organisation_number
- if valid_organisation(gd):
- return format_organisation_number(gd)
-
- # Is this a single properitor (enskild firma)?
- try:
- birth_day = validate_id_birthday(gd, False)
- return format_personal_id_number(birth_day, gd)
- except ValueError:
- raise forms.ValidationError(self.error_messages['invalid'])
-
-
-class SEPersonalIdentityNumberField(forms.CharField):
- """
- A form field that validates input as a Swedish personal identity number
- (personnummer).
-
- The correct formats are YYYYMMDD-XXXX, YYYYMMDDXXXX, YYMMDD-XXXX,
- YYMMDDXXXX and YYMMDD+XXXX.
-
- A + indicates that the person is older than 100 years, which will be taken
- into consideration when the date is validated.
-
- The checksum will be calculated and checked. The birth date is checked to
- be a valid date.
-
- By default, co-ordination numbers (samordningsnummer) will be accepted. To
- only allow real personal identity numbers, pass the keyword argument
- coordination_number=False to the constructor.
-
- The cleaned value will always have the format YYYYMMDDXXXX.
- """
-
- def __init__(self, coordination_number=True, *args, **kwargs):
- self.coordination_number = coordination_number
- super(SEPersonalIdentityNumberField, self).__init__(*args, **kwargs)
-
- default_error_messages = {
- 'invalid': _('Enter a valid Swedish personal identity number.'),
- 'coordination_number': _('Co-ordination numbers are not allowed.'),
- }
-
- def clean(self, value):
- value = super(SEPersonalIdentityNumberField, self).clean(value)
-
- if value in EMPTY_VALUES:
- return u''
-
- match = SWEDISH_ID_NUMBER.match(value)
- if match is None:
- raise forms.ValidationError(self.error_messages['invalid'])
-
- gd = match.groupdict()
-
- # compare the calculated value with the checksum
- if id_number_checksum(gd) != int(gd['checksum']):
- raise forms.ValidationError(self.error_messages['invalid'])
-
- # check for valid birthday
- try:
- birth_day = validate_id_birthday(gd)
- except ValueError:
- raise forms.ValidationError(self.error_messages['invalid'])
-
- # make sure that co-ordination numbers do not pass if not allowed
- if not self.coordination_number and int(gd['day']) > 60:
- raise forms.ValidationError(self.error_messages['coordination_number'])
-
- return format_personal_id_number(birth_day, gd)
-
-
-class SEPostalCodeField(forms.RegexField):
- """
- A form field that validates input as a Swedish postal code (postnummer).
- Valid codes consist of five digits (XXXXX). The number can optionally be
- formatted with a space after the third digit (XXX XX).
-
- The cleaned value will never contain the space.
- """
-
- default_error_messages = {
- 'invalid': _('Enter a Swedish postal code in the format XXXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(SEPostalCodeField, self).__init__(SE_POSTAL_CODE, *args, **kwargs)
-
- def clean(self, value):
- return super(SEPostalCodeField, self).clean(value).replace(' ', '')
diff --git a/parts/django/django/contrib/localflavor/se/se_counties.py b/parts/django/django/contrib/localflavor/se/se_counties.py
deleted file mode 100644
index db54fb9..0000000
--- a/parts/django/django/contrib/localflavor/se/se_counties.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-An alphabetical list of Swedish counties, sorted by codes.
-
-http://en.wikipedia.org/wiki/Counties_of_Sweden
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-
-"""
-
-from django.utils.translation import ugettext_lazy as _
-
-COUNTY_CHOICES = (
- ('AB', _(u'Stockholm')),
- ('AC', _(u'Västerbotten')),
- ('BD', _(u'Norrbotten')),
- ('C', _(u'Uppsala')),
- ('D', _(u'Södermanland')),
- ('E', _(u'Östergötland')),
- ('F', _(u'Jönköping')),
- ('G', _(u'Kronoberg')),
- ('H', _(u'Kalmar')),
- ('I', _(u'Gotland')),
- ('K', _(u'Blekinge')),
- ('M', _(u'Skåne')),
- ('N', _(u'Halland')),
- ('O', _(u'Västra Götaland')),
- ('S', _(u'Värmland')),
- ('T', _(u'Örebro')),
- ('U', _(u'Västmanland')),
- ('W', _(u'Dalarna')),
- ('X', _(u'Gävleborg')),
- ('Y', _(u'Västernorrland')),
- ('Z', _(u'Jämtland')),
-)
diff --git a/parts/django/django/contrib/localflavor/se/utils.py b/parts/django/django/contrib/localflavor/se/utils.py
deleted file mode 100644
index 7fe2b09..0000000
--- a/parts/django/django/contrib/localflavor/se/utils.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import re
-import datetime
-
-def id_number_checksum(gd):
- """
- Calculates a Swedish ID number checksum, using the
- "Luhn"-algoritm
- """
- n = s = 0
- for c in (gd['year'] + gd['month'] + gd['day'] + gd['serial']):
- tmp = ((n % 2) and 1 or 2) * int(c)
-
- if tmp > 9:
- tmp = sum([int(i) for i in str(tmp)])
-
- s += tmp
- n += 1
-
- if (s % 10) == 0:
- return 0
-
- return (((s / 10) + 1) * 10) - s
-
-def validate_id_birthday(gd, fix_coordination_number_day=True):
- """
- Validates the birth_day and returns the datetime.date object for
- the birth_day.
-
- If the date is an invalid birth day, a ValueError will be raised.
- """
-
- today = datetime.date.today()
-
- day = int(gd['day'])
- if fix_coordination_number_day and day > 60:
- day -= 60
-
- if gd['century'] is None:
-
- # The century was not specified, and need to be calculated from todays date
- current_year = today.year
- year = int(today.strftime('%Y')) - int(today.strftime('%y')) + int(gd['year'])
-
- if ('%s%s%02d' % (gd['year'], gd['month'], day)) > today.strftime('%y%m%d'):
- year -= 100
-
- # If the person is older than 100 years
- if gd['sign'] == '+':
- year -= 100
- else:
- year = int(gd['century'] + gd['year'])
-
- # Make sure the year is valid
- # There are no swedish personal identity numbers where year < 1800
- if year < 1800:
- raise ValueError
-
- # ValueError will be raise for invalid dates
- birth_day = datetime.date(year, int(gd['month']), day)
-
- # birth_day must not be in the future
- if birth_day > today:
- raise ValueError
-
- return birth_day
-
-def format_personal_id_number(birth_day, gd):
- # birth_day.strftime cannot be used, since it does not support dates < 1900
- return unicode(str(birth_day.year) + gd['month'] + gd['day'] + gd['serial'] + gd['checksum'])
-
-def format_organisation_number(gd):
- if gd['century'] is None:
- century = ''
- else:
- century = gd['century']
-
- return unicode(century + gd['year'] + gd['month'] + gd['day'] + gd['serial'] + gd['checksum'])
-
-def valid_organisation(gd):
- return gd['century'] in (None, 16) and \
- int(gd['month']) >= 20 and \
- gd['sign'] in (None, '-') and \
- gd['year'][0] in ('2', '5', '7', '8', '9') # group identifier
-
diff --git a/parts/django/django/contrib/localflavor/sk/__init__.py b/parts/django/django/contrib/localflavor/sk/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/sk/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/sk/forms.py b/parts/django/django/contrib/localflavor/sk/forms.py
deleted file mode 100644
index 863a612..0000000
--- a/parts/django/django/contrib/localflavor/sk/forms.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""
-Slovak-specific form helpers
-"""
-
-from django.forms.fields import Select, RegexField
-from django.utils.translation import ugettext_lazy as _
-
-class SKRegionSelect(Select):
- """
- A select widget widget with list of Slovak regions as choices.
- """
- def __init__(self, attrs=None):
- from sk_regions import REGION_CHOICES
- super(SKRegionSelect, self).__init__(attrs, choices=REGION_CHOICES)
-
-class SKDistrictSelect(Select):
- """
- A select widget with list of Slovak districts as choices.
- """
- def __init__(self, attrs=None):
- from sk_districts import DISTRICT_CHOICES
- super(SKDistrictSelect, self).__init__(attrs, choices=DISTRICT_CHOICES)
-
-class SKPostalCodeField(RegexField):
- """
- A form field that validates its input as Slovak postal code.
- Valid form is XXXXX or XXX XX, where X represents integer.
- """
- default_error_messages = {
- 'invalid': _(u'Enter a postal code in the format XXXXX or XXX XX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(SKPostalCodeField, self).__init__(r'^\d{5}$|^\d{3} \d{2}$',
- max_length=None, min_length=None, *args, **kwargs)
-
- def clean(self, value):
- """
- Validates the input and returns a string that contains only numbers.
- Returns an empty string for empty values.
- """
- v = super(SKPostalCodeField, self).clean(value)
- return v.replace(' ', '')
diff --git a/parts/django/django/contrib/localflavor/sk/sk_districts.py b/parts/django/django/contrib/localflavor/sk/sk_districts.py
deleted file mode 100644
index 95e8796..0000000
--- a/parts/django/django/contrib/localflavor/sk/sk_districts.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-Slovak districts according to http://sk.wikipedia.org/wiki/Administrat%C3%ADvne_%C4%8Dlenenie_Slovenska
-"""
-
-from django.utils.translation import ugettext_lazy as _
-
-DISTRICT_CHOICES = (
- ('BB', _('Banska Bystrica')),
- ('BS', _('Banska Stiavnica')),
- ('BJ', _('Bardejov')),
- ('BN', _('Banovce nad Bebravou')),
- ('BR', _('Brezno')),
- ('BA1', _('Bratislava I')),
- ('BA2', _('Bratislava II')),
- ('BA3', _('Bratislava III')),
- ('BA4', _('Bratislava IV')),
- ('BA5', _('Bratislava V')),
- ('BY', _('Bytca')),
- ('CA', _('Cadca')),
- ('DT', _('Detva')),
- ('DK', _('Dolny Kubin')),
- ('DS', _('Dunajska Streda')),
- ('GA', _('Galanta')),
- ('GL', _('Gelnica')),
- ('HC', _('Hlohovec')),
- ('HE', _('Humenne')),
- ('IL', _('Ilava')),
- ('KK', _('Kezmarok')),
- ('KN', _('Komarno')),
- ('KE1', _('Kosice I')),
- ('KE2', _('Kosice II')),
- ('KE3', _('Kosice III')),
- ('KE4', _('Kosice IV')),
- ('KEO', _('Kosice - okolie')),
- ('KA', _('Krupina')),
- ('KM', _('Kysucke Nove Mesto')),
- ('LV', _('Levice')),
- ('LE', _('Levoca')),
- ('LM', _('Liptovsky Mikulas')),
- ('LC', _('Lucenec')),
- ('MA', _('Malacky')),
- ('MT', _('Martin')),
- ('ML', _('Medzilaborce')),
- ('MI', _('Michalovce')),
- ('MY', _('Myjava')),
- ('NO', _('Namestovo')),
- ('NR', _('Nitra')),
- ('NM', _('Nove Mesto nad Vahom')),
- ('NZ', _('Nove Zamky')),
- ('PE', _('Partizanske')),
- ('PK', _('Pezinok')),
- ('PN', _('Piestany')),
- ('PT', _('Poltar')),
- ('PP', _('Poprad')),
- ('PB', _('Povazska Bystrica')),
- ('PO', _('Presov')),
- ('PD', _('Prievidza')),
- ('PU', _('Puchov')),
- ('RA', _('Revuca')),
- ('RS', _('Rimavska Sobota')),
- ('RV', _('Roznava')),
- ('RK', _('Ruzomberok')),
- ('SB', _('Sabinov')),
- ('SC', _('Senec')),
- ('SE', _('Senica')),
- ('SI', _('Skalica')),
- ('SV', _('Snina')),
- ('SO', _('Sobrance')),
- ('SN', _('Spisska Nova Ves')),
- ('SL', _('Stara Lubovna')),
- ('SP', _('Stropkov')),
- ('SK', _('Svidnik')),
- ('SA', _('Sala')),
- ('TO', _('Topolcany')),
- ('TV', _('Trebisov')),
- ('TN', _('Trencin')),
- ('TT', _('Trnava')),
- ('TR', _('Turcianske Teplice')),
- ('TS', _('Tvrdosin')),
- ('VK', _('Velky Krtis')),
- ('VT', _('Vranov nad Toplou')),
- ('ZM', _('Zlate Moravce')),
- ('ZV', _('Zvolen')),
- ('ZC', _('Zarnovica')),
- ('ZH', _('Ziar nad Hronom')),
- ('ZA', _('Zilina')),
-)
diff --git a/parts/django/django/contrib/localflavor/sk/sk_regions.py b/parts/django/django/contrib/localflavor/sk/sk_regions.py
deleted file mode 100644
index 66de814..0000000
--- a/parts/django/django/contrib/localflavor/sk/sk_regions.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-Slovak regions according to http://sk.wikipedia.org/wiki/Administrat%C3%ADvne_%C4%8Dlenenie_Slovenska
-"""
-
-from django.utils.translation import ugettext_lazy as _
-
-REGION_CHOICES = (
- ('BB', _('Banska Bystrica region')),
- ('BA', _('Bratislava region')),
- ('KE', _('Kosice region')),
- ('NR', _('Nitra region')),
- ('PO', _('Presov region')),
- ('TN', _('Trencin region')),
- ('TT', _('Trnava region')),
- ('ZA', _('Zilina region')),
-)
diff --git a/parts/django/django/contrib/localflavor/uk/__init__.py b/parts/django/django/contrib/localflavor/uk/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/uk/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/uk/forms.py b/parts/django/django/contrib/localflavor/uk/forms.py
deleted file mode 100644
index aafe973..0000000
--- a/parts/django/django/contrib/localflavor/uk/forms.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-UK-specific Form helpers
-"""
-
-import re
-
-from django.forms.fields import CharField, Select
-from django.forms import ValidationError
-from django.utils.translation import ugettext_lazy as _
-
-class UKPostcodeField(CharField):
- """
- A form field that validates its input is a UK postcode.
-
- The regular expression used is sourced from the schema for British Standard
- BS7666 address types: http://www.govtalk.gov.uk/gdsc/schemas/bs7666-v2-0.xsd
-
- The value is uppercased and a space added in the correct place, if required.
- """
- default_error_messages = {
- 'invalid': _(u'Enter a valid postcode.'),
- }
- outcode_pattern = '[A-PR-UWYZ]([0-9]{1,2}|([A-HIK-Y][0-9](|[0-9]|[ABEHMNPRVWXY]))|[0-9][A-HJKSTUW])'
- incode_pattern = '[0-9][ABD-HJLNP-UW-Z]{2}'
- postcode_regex = re.compile(r'^(GIR 0AA|%s %s)$' % (outcode_pattern, incode_pattern))
- space_regex = re.compile(r' *(%s)$' % incode_pattern)
-
- def clean(self, value):
- value = super(UKPostcodeField, self).clean(value)
- if value == u'':
- return value
- postcode = value.upper().strip()
- # Put a single space before the incode (second part).
- postcode = self.space_regex.sub(r' \1', postcode)
- if not self.postcode_regex.search(postcode):
- raise ValidationError(self.error_messages['invalid'])
- return postcode
-
-class UKCountySelect(Select):
- """
- A Select widget that uses a list of UK Counties/Regions as its choices.
- """
- def __init__(self, attrs=None):
- from uk_regions import UK_REGION_CHOICES
- super(UKCountySelect, self).__init__(attrs, choices=UK_REGION_CHOICES)
-
-class UKNationSelect(Select):
- """
- A Select widget that uses a list of UK Nations as its choices.
- """
- def __init__(self, attrs=None):
- from uk_regions import UK_NATIONS_CHOICES
- super(UKNationSelect, self).__init__(attrs, choices=UK_NATIONS_CHOICES)
diff --git a/parts/django/django/contrib/localflavor/uk/uk_regions.py b/parts/django/django/contrib/localflavor/uk/uk_regions.py
deleted file mode 100644
index dd92f5e..0000000
--- a/parts/django/django/contrib/localflavor/uk/uk_regions.py
+++ /dev/null
@@ -1,97 +0,0 @@
-"""
-Sources:
- English regions: http://www.statistics.gov.uk/geography/downloads/31_10_01_REGION_names_and_codes_12_00.xls
- Northern Ireland regions: http://en.wikipedia.org/wiki/List_of_Irish_counties_by_area
- Welsh regions: http://en.wikipedia.org/wiki/Preserved_counties_of_Wales
- Scottish regions: http://en.wikipedia.org/wiki/Regions_and_districts_of_Scotland
-"""
-from django.utils.translation import ugettext_lazy as _
-
-ENGLAND_REGION_CHOICES = (
- ("Bedfordshire", _("Bedfordshire")),
- ("Buckinghamshire", _("Buckinghamshire")),
- ("Cambridgeshire", ("Cambridgeshire")),
- ("Cheshire", _("Cheshire")),
- ("Cornwall and Isles of Scilly", _("Cornwall and Isles of Scilly")),
- ("Cumbria", _("Cumbria")),
- ("Derbyshire", _("Derbyshire")),
- ("Devon", _("Devon")),
- ("Dorset", _("Dorset")),
- ("Durham", _("Durham")),
- ("East Sussex", _("East Sussex")),
- ("Essex", _("Essex")),
- ("Gloucestershire", _("Gloucestershire")),
- ("Greater London", _("Greater London")),
- ("Greater Manchester", _("Greater Manchester")),
- ("Hampshire", _("Hampshire")),
- ("Hertfordshire", _("Hertfordshire")),
- ("Kent", _("Kent")),
- ("Lancashire", _("Lancashire")),
- ("Leicestershire", _("Leicestershire")),
- ("Lincolnshire", _("Lincolnshire")),
- ("Merseyside", _("Merseyside")),
- ("Norfolk", _("Norfolk")),
- ("North Yorkshire", _("North Yorkshire")),
- ("Northamptonshire", _("Northamptonshire")),
- ("Northumberland", _("Northumberland")),
- ("Nottinghamshire", _("Nottinghamshire")),
- ("Oxfordshire", _("Oxfordshire")),
- ("Shropshire", _("Shropshire")),
- ("Somerset", _("Somerset")),
- ("South Yorkshire", _("South Yorkshire")),
- ("Staffordshire", _("Staffordshire")),
- ("Suffolk", _("Suffolk")),
- ("Surrey", _("Surrey")),
- ("Tyne and Wear", _("Tyne and Wear")),
- ("Warwickshire", _("Warwickshire")),
- ("West Midlands", _("West Midlands")),
- ("West Sussex", _("West Sussex")),
- ("West Yorkshire", _("West Yorkshire")),
- ("Wiltshire", _("Wiltshire")),
- ("Worcestershire", _("Worcestershire")),
-)
-
-NORTHERN_IRELAND_REGION_CHOICES = (
- ("County Antrim", _("County Antrim")),
- ("County Armagh", _("County Armagh")),
- ("County Down", _("County Down")),
- ("County Fermanagh", _("County Fermanagh")),
- ("County Londonderry", _("County Londonderry")),
- ("County Tyrone", _("County Tyrone")),
-)
-
-WALES_REGION_CHOICES = (
- ("Clwyd", _("Clwyd")),
- ("Dyfed", _("Dyfed")),
- ("Gwent", _("Gwent")),
- ("Gwynedd", _("Gwynedd")),
- ("Mid Glamorgan", _("Mid Glamorgan")),
- ("Powys", _("Powys")),
- ("South Glamorgan", _("South Glamorgan")),
- ("West Glamorgan", _("West Glamorgan")),
-)
-
-SCOTTISH_REGION_CHOICES = (
- ("Borders", _("Borders")),
- ("Central Scotland", _("Central Scotland")),
- ("Dumfries and Galloway", _("Dumfries and Galloway")),
- ("Fife", _("Fife")),
- ("Grampian", _("Grampian")),
- ("Highland", _("Highland")),
- ("Lothian", _("Lothian")),
- ("Orkney Islands", _("Orkney Islands")),
- ("Shetland Islands", _("Shetland Islands")),
- ("Strathclyde", _("Strathclyde")),
- ("Tayside", _("Tayside")),
- ("Western Isles", _("Western Isles")),
-)
-
-UK_NATIONS_CHOICES = (
- ("England", _("England")),
- ("Northern Ireland", _("Northern Ireland")),
- ("Scotland", _("Scotland")),
- ("Wales", _("Wales")),
-)
-
-UK_REGION_CHOICES = ENGLAND_REGION_CHOICES + NORTHERN_IRELAND_REGION_CHOICES + WALES_REGION_CHOICES + SCOTTISH_REGION_CHOICES
-
diff --git a/parts/django/django/contrib/localflavor/us/__init__.py b/parts/django/django/contrib/localflavor/us/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/us/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/us/forms.py b/parts/django/django/contrib/localflavor/us/forms.py
deleted file mode 100644
index c426d36..0000000
--- a/parts/django/django/contrib/localflavor/us/forms.py
+++ /dev/null
@@ -1,113 +0,0 @@
-"""
-USA-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, CharField
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _
-import re
-
-phone_digits_re = re.compile(r'^(?:1-?)?(\d{3})[-\.]?(\d{3})[-\.]?(\d{4})$')
-ssn_re = re.compile(r"^(?P<area>\d{3})[-\ ]?(?P<group>\d{2})[-\ ]?(?P<serial>\d{4})$")
-
-class USZipCodeField(RegexField):
- default_error_messages = {
- 'invalid': _('Enter a zip code in the format XXXXX or XXXXX-XXXX.'),
- }
-
- def __init__(self, *args, **kwargs):
- super(USZipCodeField, self).__init__(r'^\d{5}(?:-\d{4})?$',
- max_length=None, min_length=None, *args, **kwargs)
-
-class USPhoneNumberField(CharField):
- default_error_messages = {
- 'invalid': _('Phone numbers must be in XXX-XXX-XXXX format.'),
- }
-
- def clean(self, value):
- super(USPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\(|\)|\s+)', '', smart_unicode(value))
- m = phone_digits_re.search(value)
- if m:
- return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3))
- raise ValidationError(self.error_messages['invalid'])
-
-class USSocialSecurityNumberField(Field):
- """
- A United States Social Security number.
-
- Checks the following rules to determine whether the number is valid:
-
- * Conforms to the XXX-XX-XXXX format.
- * No group consists entirely of zeroes.
- * The leading group is not "666" (block "666" will never be allocated).
- * The number is not in the promotional block 987-65-4320 through
- 987-65-4329, which are permanently invalid.
- * The number is not one known to be invalid due to otherwise widespread
- promotional use or distribution (e.g., the Woolworth's number or the
- 1962 promotional number).
- """
- default_error_messages = {
- 'invalid': _('Enter a valid U.S. Social Security number in XXX-XX-XXXX format.'),
- }
-
- def clean(self, value):
- super(USSocialSecurityNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- match = re.match(ssn_re, value)
- if not match:
- raise ValidationError(self.error_messages['invalid'])
- area, group, serial = match.groupdict()['area'], match.groupdict()['group'], match.groupdict()['serial']
-
- # First pass: no blocks of all zeroes.
- if area == '000' or \
- group == '00' or \
- serial == '0000':
- raise ValidationError(self.error_messages['invalid'])
-
- # Second pass: promotional and otherwise permanently invalid numbers.
- if area == '666' or \
- (area == '987' and group == '65' and 4320 <= int(serial) <= 4329) or \
- value == '078-05-1120' or \
- value == '219-09-9999':
- raise ValidationError(self.error_messages['invalid'])
- return u'%s-%s-%s' % (area, group, serial)
-
-class USStateField(Field):
- """
- A form field that validates its input is a U.S. state name or abbreviation.
- It normalizes the input to the standard two-leter postal service
- abbreviation for the given state.
- """
- default_error_messages = {
- 'invalid': _('Enter a U.S. state or territory.'),
- }
-
- def clean(self, value):
- from us_states import STATES_NORMALIZED
- super(USStateField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- try:
- value = value.strip().lower()
- except AttributeError:
- pass
- else:
- try:
- return STATES_NORMALIZED[value.strip().lower()].decode('ascii')
- except KeyError:
- pass
- raise ValidationError(self.error_messages['invalid'])
-
-class USStateSelect(Select):
- """
- A Select widget that uses a list of U.S. states/territories as its choices.
- """
- def __init__(self, attrs=None):
- from us_states import STATE_CHOICES
- super(USStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
diff --git a/parts/django/django/contrib/localflavor/us/models.py b/parts/django/django/contrib/localflavor/us/models.py
deleted file mode 100644
index 1f78e45..0000000
--- a/parts/django/django/contrib/localflavor/us/models.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from django.conf import settings
-from django.utils.translation import ugettext_lazy as _
-from django.db.models.fields import CharField
-from django.contrib.localflavor.us.us_states import STATE_CHOICES
-
-class USStateField(CharField):
-
- description = _("U.S. state (two uppercase letters)")
-
- def __init__(self, *args, **kwargs):
- kwargs['choices'] = STATE_CHOICES
- kwargs['max_length'] = 2
- super(USStateField, self).__init__(*args, **kwargs)
-
-class PhoneNumberField(CharField):
-
- description = _("Phone number")
-
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = 20
- super(PhoneNumberField, self).__init__(*args, **kwargs)
-
- def formfield(self, **kwargs):
- from django.contrib.localflavor.us.forms import USPhoneNumberField
- defaults = {'form_class': USPhoneNumberField}
- defaults.update(kwargs)
- return super(PhoneNumberField, self).formfield(**defaults)
diff --git a/parts/django/django/contrib/localflavor/us/us_states.py b/parts/django/django/contrib/localflavor/us/us_states.py
deleted file mode 100644
index 59c48bb..0000000
--- a/parts/django/django/contrib/localflavor/us/us_states.py
+++ /dev/null
@@ -1,234 +0,0 @@
-"""
-A mapping of state misspellings/abbreviations to normalized abbreviations, and
-an alphabetical list of states for use as `choices` in a formfield.
-
-This exists in this standalone file so that it's only imported into memory
-when explicitly needed.
-"""
-
-STATE_CHOICES = (
- ('AL', 'Alabama'),
- ('AK', 'Alaska'),
- ('AS', 'American Samoa'),
- ('AZ', 'Arizona'),
- ('AR', 'Arkansas'),
- ('CA', 'California'),
- ('CO', 'Colorado'),
- ('CT', 'Connecticut'),
- ('DE', 'Delaware'),
- ('DC', 'District of Columbia'),
- ('FL', 'Florida'),
- ('GA', 'Georgia'),
- ('GU', 'Guam'),
- ('HI', 'Hawaii'),
- ('ID', 'Idaho'),
- ('IL', 'Illinois'),
- ('IN', 'Indiana'),
- ('IA', 'Iowa'),
- ('KS', 'Kansas'),
- ('KY', 'Kentucky'),
- ('LA', 'Louisiana'),
- ('ME', 'Maine'),
- ('MD', 'Maryland'),
- ('MA', 'Massachusetts'),
- ('MI', 'Michigan'),
- ('MN', 'Minnesota'),
- ('MS', 'Mississippi'),
- ('MO', 'Missouri'),
- ('MT', 'Montana'),
- ('NE', 'Nebraska'),
- ('NV', 'Nevada'),
- ('NH', 'New Hampshire'),
- ('NJ', 'New Jersey'),
- ('NM', 'New Mexico'),
- ('NY', 'New York'),
- ('NC', 'North Carolina'),
- ('ND', 'North Dakota'),
- ('MP', 'Northern Mariana Islands'),
- ('OH', 'Ohio'),
- ('OK', 'Oklahoma'),
- ('OR', 'Oregon'),
- ('PA', 'Pennsylvania'),
- ('PR', 'Puerto Rico'),
- ('RI', 'Rhode Island'),
- ('SC', 'South Carolina'),
- ('SD', 'South Dakota'),
- ('TN', 'Tennessee'),
- ('TX', 'Texas'),
- ('UT', 'Utah'),
- ('VT', 'Vermont'),
- ('VI', 'Virgin Islands'),
- ('VA', 'Virginia'),
- ('WA', 'Washington'),
- ('WV', 'West Virginia'),
- ('WI', 'Wisconsin'),
- ('WY', 'Wyoming'),
-)
-
-STATES_NORMALIZED = {
- 'ak': 'AK',
- 'al': 'AL',
- 'ala': 'AL',
- 'alabama': 'AL',
- 'alaska': 'AK',
- 'american samao': 'AS',
- 'american samoa': 'AS',
- 'ar': 'AR',
- 'ariz': 'AZ',
- 'arizona': 'AZ',
- 'ark': 'AR',
- 'arkansas': 'AR',
- 'as': 'AS',
- 'az': 'AZ',
- 'ca': 'CA',
- 'calf': 'CA',
- 'calif': 'CA',
- 'california': 'CA',
- 'co': 'CO',
- 'colo': 'CO',
- 'colorado': 'CO',
- 'conn': 'CT',
- 'connecticut': 'CT',
- 'ct': 'CT',
- 'dc': 'DC',
- 'de': 'DE',
- 'del': 'DE',
- 'delaware': 'DE',
- 'deleware': 'DE',
- 'district of columbia': 'DC',
- 'fl': 'FL',
- 'fla': 'FL',
- 'florida': 'FL',
- 'ga': 'GA',
- 'georgia': 'GA',
- 'gu': 'GU',
- 'guam': 'GU',
- 'hawaii': 'HI',
- 'hi': 'HI',
- 'ia': 'IA',
- 'id': 'ID',
- 'idaho': 'ID',
- 'il': 'IL',
- 'ill': 'IL',
- 'illinois': 'IL',
- 'in': 'IN',
- 'ind': 'IN',
- 'indiana': 'IN',
- 'iowa': 'IA',
- 'kan': 'KS',
- 'kans': 'KS',
- 'kansas': 'KS',
- 'kentucky': 'KY',
- 'ks': 'KS',
- 'ky': 'KY',
- 'la': 'LA',
- 'louisiana': 'LA',
- 'ma': 'MA',
- 'maine': 'ME',
- 'marianas islands': 'MP',
- 'marianas islands of the pacific': 'MP',
- 'marinas islands of the pacific': 'MP',
- 'maryland': 'MD',
- 'mass': 'MA',
- 'massachusetts': 'MA',
- 'massachussetts': 'MA',
- 'md': 'MD',
- 'me': 'ME',
- 'mi': 'MI',
- 'mich': 'MI',
- 'michigan': 'MI',
- 'minn': 'MN',
- 'minnesota': 'MN',
- 'miss': 'MS',
- 'mississippi': 'MS',
- 'missouri': 'MO',
- 'mn': 'MN',
- 'mo': 'MO',
- 'mont': 'MT',
- 'montana': 'MT',
- 'mp': 'MP',
- 'ms': 'MS',
- 'mt': 'MT',
- 'n d': 'ND',
- 'n dak': 'ND',
- 'n h': 'NH',
- 'n j': 'NJ',
- 'n m': 'NM',
- 'n mex': 'NM',
- 'nc': 'NC',
- 'nd': 'ND',
- 'ne': 'NE',
- 'neb': 'NE',
- 'nebr': 'NE',
- 'nebraska': 'NE',
- 'nev': 'NV',
- 'nevada': 'NV',
- 'new hampshire': 'NH',
- 'new jersey': 'NJ',
- 'new mexico': 'NM',
- 'new york': 'NY',
- 'nh': 'NH',
- 'nj': 'NJ',
- 'nm': 'NM',
- 'nmex': 'NM',
- 'north carolina': 'NC',
- 'north dakota': 'ND',
- 'northern mariana islands': 'MP',
- 'nv': 'NV',
- 'ny': 'NY',
- 'oh': 'OH',
- 'ohio': 'OH',
- 'ok': 'OK',
- 'okla': 'OK',
- 'oklahoma': 'OK',
- 'or': 'OR',
- 'ore': 'OR',
- 'oreg': 'OR',
- 'oregon': 'OR',
- 'pa': 'PA',
- 'penn': 'PA',
- 'pennsylvania': 'PA',
- 'pr': 'PR',
- 'puerto rico': 'PR',
- 'rhode island': 'RI',
- 'ri': 'RI',
- 's dak': 'SD',
- 'sc': 'SC',
- 'sd': 'SD',
- 'sdak': 'SD',
- 'south carolina': 'SC',
- 'south dakota': 'SD',
- 'tenn': 'TN',
- 'tennessee': 'TN',
- 'territory of hawaii': 'HI',
- 'tex': 'TX',
- 'texas': 'TX',
- 'tn': 'TN',
- 'tx': 'TX',
- 'us virgin islands': 'VI',
- 'usvi': 'VI',
- 'ut': 'UT',
- 'utah': 'UT',
- 'va': 'VA',
- 'vermont': 'VT',
- 'vi': 'VI',
- 'viginia': 'VA',
- 'virgin islands': 'VI',
- 'virgina': 'VA',
- 'virginia': 'VA',
- 'vt': 'VT',
- 'w va': 'WV',
- 'wa': 'WA',
- 'wash': 'WA',
- 'washington': 'WA',
- 'west virginia': 'WV',
- 'wi': 'WI',
- 'wis': 'WI',
- 'wisc': 'WI',
- 'wisconsin': 'WI',
- 'wv': 'WV',
- 'wva': 'WV',
- 'wy': 'WY',
- 'wyo': 'WY',
- 'wyoming': 'WY',
-}
diff --git a/parts/django/django/contrib/localflavor/uy/__init__.py b/parts/django/django/contrib/localflavor/uy/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/uy/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/uy/forms.py b/parts/django/django/contrib/localflavor/uy/forms.py
deleted file mode 100644
index 3f70cf3..0000000
--- a/parts/django/django/contrib/localflavor/uy/forms.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-UY-specific form helpers.
-"""
-import re
-
-from django.core.validators import EMPTY_VALUES
-from django.forms.fields import Select, RegexField
-from django.forms import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from django.contrib.localflavor.uy.util import get_validation_digit
-
-
-class UYDepartamentSelect(Select):
- """
- A Select widget that uses a list of Uruguayan departaments as its choices.
- """
- def __init__(self, attrs=None):
- from uy_departaments import DEPARTAMENT_CHOICES
- super(UYDepartamentSelect, self).__init__(attrs, choices=DEPARTAMENT_CHOICES)
-
-
-class UYCIField(RegexField):
- """
- A field that validates Uruguayan 'Cedula de identidad' (CI) numbers.
- """
- default_error_messages = {
- 'invalid': _("Enter a valid CI number in X.XXX.XXX-X,"
- "XXXXXXX-X or XXXXXXXX format."),
- 'invalid_validation_digit': _("Enter a valid CI number."),
- }
-
- def __init__(self, *args, **kwargs):
- super(UYCIField, self).__init__(r'(?P<num>(\d{6,7}|(\d\.)?\d{3}\.\d{3}))-?(?P<val>\d)',
- *args, **kwargs)
-
- def clean(self, value):
- """
- Validates format and validation digit.
-
- The official format is [X.]XXX.XXX-X but usually dots and/or slash are
- omitted so, when validating, those characters are ignored if found in
- the correct place. The three typically used formats are supported:
- [X]XXXXXXX, [X]XXXXXX-X and [X.]XXX.XXX-X.
- """
-
- value = super(UYCIField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- match = self.regex.match(value)
- if not match:
- raise ValidationError(self.error_messages['invalid'])
-
- number = int(match.group('num').replace('.', ''))
- validation_digit = int(match.group('val'))
-
- if not validation_digit == get_validation_digit(number):
- raise ValidationError(self.error_messages['invalid_validation_digit'])
-
- return value
diff --git a/parts/django/django/contrib/localflavor/uy/util.py b/parts/django/django/contrib/localflavor/uy/util.py
deleted file mode 100644
index 0c1a8f8..0000000
--- a/parts/django/django/contrib/localflavor/uy/util.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- coding: utf-8 -*-
-
-def get_validation_digit(number):
- """ Calculates the validation digit for the given number. """
- sum = 0
- dvs = [4, 3, 6, 7, 8, 9, 2]
- number = str(number)
-
- for i in range(0, len(number)):
- sum = (int(number[-1 - i]) * dvs[i] + sum) % 10
-
- return (10-sum) % 10
diff --git a/parts/django/django/contrib/localflavor/uy/uy_departaments.py b/parts/django/django/contrib/localflavor/uy/uy_departaments.py
deleted file mode 100644
index 97795f8..0000000
--- a/parts/django/django/contrib/localflavor/uy/uy_departaments.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-"""A list of Urguayan departaments as `choices` in a formfield."""
-
-DEPARTAMENT_CHOICES = (
- ('G', u'Artigas'),
- ('A', u'Canelones'),
- ('E', u'Cerro Largo'),
- ('L', u'Colonia'),
- ('Q', u'Durazno'),
- ('N', u'Flores'),
- ('O', u'Florida'),
- ('P', u'Lavalleja'),
- ('B', u'Maldonado'),
- ('S', u'Montevideo'),
- ('I', u'Paysandú'),
- ('J', u'Río Negro'),
- ('F', u'Rivera'),
- ('C', u'Rocha'),
- ('H', u'Salto'),
- ('M', u'San José'),
- ('K', u'Soriano'),
- ('R', u'Tacuarembó'),
- ('D', u'Treinta y Tres'),
-)
diff --git a/parts/django/django/contrib/localflavor/za/__init__.py b/parts/django/django/contrib/localflavor/za/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/localflavor/za/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/localflavor/za/forms.py b/parts/django/django/contrib/localflavor/za/forms.py
deleted file mode 100644
index 4fb4203..0000000
--- a/parts/django/django/contrib/localflavor/za/forms.py
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
-South Africa-specific Form helpers
-"""
-
-from django.core.validators import EMPTY_VALUES
-from django.forms import ValidationError
-from django.forms.fields import Field, RegexField
-from django.utils.checksums import luhn
-from django.utils.translation import gettext as _
-import re
-from datetime import date
-
-id_re = re.compile(r'^(?P<yy>\d\d)(?P<mm>\d\d)(?P<dd>\d\d)(?P<mid>\d{4})(?P<end>\d{3})')
-
-class ZAIDField(Field):
- """A form field for South African ID numbers -- the checksum is validated
- using the Luhn checksum, and uses a simlistic (read: not entirely accurate)
- check for the birthdate
- """
- default_error_messages = {
- 'invalid': _(u'Enter a valid South African ID number'),
- }
-
- def clean(self, value):
- super(ZAIDField, self).clean(value)
-
- if value in EMPTY_VALUES:
- return u''
-
- # strip spaces and dashes
- value = value.strip().replace(' ', '').replace('-', '')
-
- match = re.match(id_re, value)
-
- if not match:
- raise ValidationError(self.error_messages['invalid'])
-
- g = match.groupdict()
-
- try:
- # The year 2000 is conveniently a leapyear.
- # This algorithm will break in xx00 years which aren't leap years
- # There is no way to guess the century of a ZA ID number
- d = date(int(g['yy']) + 2000, int(g['mm']), int(g['dd']))
- except ValueError:
- raise ValidationError(self.error_messages['invalid'])
-
- if not luhn(value):
- raise ValidationError(self.error_messages['invalid'])
-
- return value
-
-class ZAPostCodeField(RegexField):
- default_error_messages = {
- 'invalid': _(u'Enter a valid South African postal code'),
- }
-
- def __init__(self, *args, **kwargs):
- super(ZAPostCodeField, self).__init__(r'^\d{4}$',
- max_length=None, min_length=None, *args, **kwargs)
diff --git a/parts/django/django/contrib/localflavor/za/za_provinces.py b/parts/django/django/contrib/localflavor/za/za_provinces.py
deleted file mode 100644
index 0bc6fe1..0000000
--- a/parts/django/django/contrib/localflavor/za/za_provinces.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.utils.translation import gettext_lazy as _
-
-PROVINCE_CHOICES = (
- ('EC', _('Eastern Cape')),
- ('FS', _('Free State')),
- ('GP', _('Gauteng')),
- ('KN', _('KwaZulu-Natal')),
- ('LP', _('Limpopo')),
- ('MP', _('Mpumalanga')),
- ('NC', _('Northern Cape')),
- ('NW', _('North West')),
- ('WC', _('Western Cape')),
-)
diff --git a/parts/django/django/contrib/markup/__init__.py b/parts/django/django/contrib/markup/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/markup/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/markup/models.py b/parts/django/django/contrib/markup/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/markup/models.py
+++ /dev/null
diff --git a/parts/django/django/contrib/markup/templatetags/__init__.py b/parts/django/django/contrib/markup/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/markup/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/markup/templatetags/markup.py b/parts/django/django/contrib/markup/templatetags/markup.py
deleted file mode 100644
index 7cdc04c..0000000
--- a/parts/django/django/contrib/markup/templatetags/markup.py
+++ /dev/null
@@ -1,91 +0,0 @@
-"""
-Set of "markup" template filters for Django. These filters transform plain text
-markup syntaxes to HTML; currently there is support for:
-
- * Textile, which requires the PyTextile library available at
- http://loopcore.com/python-textile/
-
- * Markdown, which requires the Python-markdown library from
- http://www.freewisdom.org/projects/python-markdown
-
- * reStructuredText, which requires docutils from http://docutils.sf.net/
-"""
-
-from django import template
-from django.conf import settings
-from django.utils.encoding import smart_str, force_unicode
-from django.utils.safestring import mark_safe
-
-register = template.Library()
-
-def textile(value):
- try:
- import textile
- except ImportError:
- if settings.DEBUG:
- raise template.TemplateSyntaxError("Error in {% textile %} filter: The Python textile library isn't installed.")
- return force_unicode(value)
- else:
- return mark_safe(force_unicode(textile.textile(smart_str(value), encoding='utf-8', output='utf-8')))
-textile.is_safe = True
-
-def markdown(value, arg=''):
- """
- Runs Markdown over a given value, optionally using various
- extensions python-markdown supports.
-
- Syntax::
-
- {{ value|markdown:"extension1_name,extension2_name..." }}
-
- To enable safe mode, which strips raw HTML and only returns HTML
- generated by actual Markdown syntax, pass "safe" as the first
- extension in the list.
-
- If the version of Markdown in use does not support extensions,
- they will be silently ignored.
-
- """
- try:
- import markdown
- except ImportError:
- if settings.DEBUG:
- raise template.TemplateSyntaxError("Error in {% markdown %} filter: The Python markdown library isn't installed.")
- return force_unicode(value)
- else:
- # markdown.version was first added in 1.6b. The only version of markdown
- # to fully support extensions before 1.6b was the shortlived 1.6a.
- if hasattr(markdown, 'version'):
- extensions = [e for e in arg.split(",") if e]
- if len(extensions) > 0 and extensions[0] == "safe":
- extensions = extensions[1:]
- safe_mode = True
- else:
- safe_mode = False
-
- # Unicode support only in markdown v1.7 or above. Version_info
- # exist only in markdown v1.6.2rc-2 or above.
- if getattr(markdown, "version_info", None) < (1,7):
- return mark_safe(force_unicode(markdown.markdown(smart_str(value), extensions, safe_mode=safe_mode)))
- else:
- return mark_safe(markdown.markdown(force_unicode(value), extensions, safe_mode=safe_mode))
- else:
- return mark_safe(force_unicode(markdown.markdown(smart_str(value))))
-markdown.is_safe = True
-
-def restructuredtext(value):
- try:
- from docutils.core import publish_parts
- except ImportError:
- if settings.DEBUG:
- raise template.TemplateSyntaxError("Error in {% restructuredtext %} filter: The Python docutils library isn't installed.")
- return force_unicode(value)
- else:
- docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
- parts = publish_parts(source=smart_str(value), writer_name="html4css1", settings_overrides=docutils_settings)
- return mark_safe(force_unicode(parts["fragment"]))
-restructuredtext.is_safe = True
-
-register.filter(textile)
-register.filter(markdown)
-register.filter(restructuredtext)
diff --git a/parts/django/django/contrib/markup/tests.py b/parts/django/django/contrib/markup/tests.py
deleted file mode 100644
index 6a22e53..0000000
--- a/parts/django/django/contrib/markup/tests.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Quick tests for the markup templatetags (django.contrib.markup)
-
-import re
-import unittest
-
-from django.template import Template, Context, add_to_builtins
-from django.utils.html import escape
-
-add_to_builtins('django.contrib.markup.templatetags.markup')
-
-class Templates(unittest.TestCase):
- def test_textile(self):
- try:
- import textile
- except ImportError:
- textile = None
-
- textile_content = """Paragraph 1
-
-Paragraph 2 with "quotes" and @code@"""
-
- t = Template("{{ textile_content|textile }}")
- rendered = t.render(Context(locals())).strip()
- if textile:
- self.assertEqual(rendered.replace('\t', ''), """<p>Paragraph 1</p>
-
-<p>Paragraph 2 with &#8220;quotes&#8221; and <code>code</code></p>""")
- else:
- self.assertEqual(rendered, escape(textile_content))
-
- def test_markdown(self):
- try:
- import markdown
- except ImportError:
- markdown = None
-
- markdown_content = """Paragraph 1
-
-## An h2"""
-
- t = Template("{{ markdown_content|markdown }}")
- rendered = t.render(Context(locals())).strip()
- if markdown:
- pattern = re.compile("""<p>Paragraph 1\s*</p>\s*<h2>\s*An h2</h2>""")
- self.assert_(pattern.match(rendered))
- else:
- self.assertEqual(rendered, markdown_content)
-
- def test_docutils(self):
- try:
- import docutils
- except ImportError:
- docutils = None
-
- rest_content = """Paragraph 1
-
-Paragraph 2 with a link_
-
-.. _link: http://www.example.com/"""
-
- t = Template("{{ rest_content|restructuredtext }}")
- rendered = t.render(Context(locals())).strip()
- if docutils:
- # Different versions of docutils return slightly different HTML
- try:
- # Docutils v0.4 and earlier
- self.assertEqual(rendered, """<p>Paragraph 1</p>
-<p>Paragraph 2 with a <a class="reference" href="http://www.example.com/">link</a></p>""")
- except AssertionError, e:
- # Docutils from SVN (which will become 0.5)
- self.assertEqual(rendered, """<p>Paragraph 1</p>
-<p>Paragraph 2 with a <a class="reference external" href="http://www.example.com/">link</a></p>""")
- else:
- self.assertEqual(rendered, rest_content)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/parts/django/django/contrib/messages/__init__.py b/parts/django/django/contrib/messages/__init__.py
deleted file mode 100644
index 36a990c..0000000
--- a/parts/django/django/contrib/messages/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from api import *
-from constants import *
diff --git a/parts/django/django/contrib/messages/api.py b/parts/django/django/contrib/messages/api.py
deleted file mode 100644
index 65fd188..0000000
--- a/parts/django/django/contrib/messages/api.py
+++ /dev/null
@@ -1,114 +0,0 @@
-from django.contrib.messages import constants
-from django.contrib.messages.storage import default_storage
-from django.utils.functional import lazy, memoize
-
-__all__ = (
- 'add_message', 'get_messages',
- 'get_level', 'set_level',
- 'debug', 'info', 'success', 'warning', 'error',
-)
-
-
-class MessageFailure(Exception):
- pass
-
-
-def add_message(request, level, message, extra_tags='', fail_silently=False):
- """
- Attempts to add a message to the request using the 'messages' app, falling
- back to the user's message_set if MessageMiddleware hasn't been enabled.
- """
- if hasattr(request, '_messages'):
- return request._messages.add(level, message, extra_tags)
- if hasattr(request, 'user') and request.user.is_authenticated():
- return request.user.message_set.create(message=message)
- if not fail_silently:
- raise MessageFailure('Without the django.contrib.messages '
- 'middleware, messages can only be added to '
- 'authenticated users.')
-
-
-def get_messages(request):
- """
- Returns the message storage on the request if it exists, otherwise returns
- user.message_set.all() as the old auth context processor did.
- """
- if hasattr(request, '_messages'):
- return request._messages
-
- def get_user():
- if hasattr(request, 'user'):
- return request.user
- else:
- from django.contrib.auth.models import AnonymousUser
- return AnonymousUser()
-
- return lazy(memoize(get_user().get_and_delete_messages, {}, 0), list)()
-
-
-def get_level(request):
- """
- Returns the minimum level of messages to be recorded.
-
- The default level is the ``MESSAGE_LEVEL`` setting. If this is not found,
- the ``INFO`` level is used.
- """
- if hasattr(request, '_messages'):
- storage = request._messages
- else:
- storage = default_storage(request)
- return storage.level
-
-
-def set_level(request, level):
- """
- Sets the minimum level of messages to be recorded, returning ``True`` if
- the level was recorded successfully.
-
- If set to ``None``, the default level will be used (see the ``get_level``
- method).
- """
- if not hasattr(request, '_messages'):
- return False
- request._messages.level = level
- return True
-
-
-def debug(request, message, extra_tags='', fail_silently=False):
- """
- Adds a message with the ``DEBUG`` level.
- """
- add_message(request, constants.DEBUG, message, extra_tags=extra_tags,
- fail_silently=fail_silently)
-
-
-def info(request, message, extra_tags='', fail_silently=False):
- """
- Adds a message with the ``INFO`` level.
- """
- add_message(request, constants.INFO, message, extra_tags=extra_tags,
- fail_silently=fail_silently)
-
-
-def success(request, message, extra_tags='', fail_silently=False):
- """
- Adds a message with the ``SUCCESS`` level.
- """
- add_message(request, constants.SUCCESS, message, extra_tags=extra_tags,
- fail_silently=fail_silently)
-
-
-def warning(request, message, extra_tags='', fail_silently=False):
- """
- Adds a message with the ``WARNING`` level.
- """
- add_message(request, constants.WARNING, message, extra_tags=extra_tags,
- fail_silently=fail_silently)
-
-
-def error(request, message, extra_tags='', fail_silently=False):
- """
- Adds a message with the ``ERROR`` level.
- """
- add_message(request, constants.ERROR, message, extra_tags=extra_tags,
- fail_silently=fail_silently)
diff --git a/parts/django/django/contrib/messages/constants.py b/parts/django/django/contrib/messages/constants.py
deleted file mode 100644
index bf83bfa..0000000
--- a/parts/django/django/contrib/messages/constants.py
+++ /dev/null
@@ -1,13 +0,0 @@
-DEBUG = 10
-INFO = 20
-SUCCESS = 25
-WARNING = 30
-ERROR = 40
-
-DEFAULT_TAGS = {
- DEBUG: 'debug',
- INFO: 'info',
- SUCCESS: 'success',
- WARNING: 'warning',
- ERROR: 'error',
-}
diff --git a/parts/django/django/contrib/messages/context_processors.py b/parts/django/django/contrib/messages/context_processors.py
deleted file mode 100644
index 26cbcd5..0000000
--- a/parts/django/django/contrib/messages/context_processors.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.contrib.messages.api import get_messages
-
-
-def messages(request):
- """
- Returns a lazy 'messages' context variable.
- """
- return {'messages': get_messages(request)}
diff --git a/parts/django/django/contrib/messages/middleware.py b/parts/django/django/contrib/messages/middleware.py
deleted file mode 100644
index a84dc6c..0000000
--- a/parts/django/django/contrib/messages/middleware.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from django.conf import settings
-from django.contrib.messages.storage import default_storage
-
-
-class MessageMiddleware(object):
- """
- Middleware that handles temporary messages.
- """
-
- def process_request(self, request):
- request._messages = default_storage(request)
-
- def process_response(self, request, response):
- """
- Updates the storage backend (i.e., saves the messages).
-
- If not all messages could not be stored and ``DEBUG`` is ``True``, a
- ``ValueError`` is raised.
- """
- # A higher middleware layer may return a request which does not contain
- # messages storage, so make no assumption that it will be there.
- if hasattr(request, '_messages'):
- unstored_messages = request._messages.update(response)
- if unstored_messages and settings.DEBUG:
- raise ValueError('Not all temporary messages could be stored.')
- return response
diff --git a/parts/django/django/contrib/messages/models.py b/parts/django/django/contrib/messages/models.py
deleted file mode 100644
index 4f656f5..0000000
--- a/parts/django/django/contrib/messages/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# Models module required so tests are discovered.
diff --git a/parts/django/django/contrib/messages/storage/__init__.py b/parts/django/django/contrib/messages/storage/__init__.py
deleted file mode 100644
index ce3971b..0000000
--- a/parts/django/django/contrib/messages/storage/__init__.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.utils.importlib import import_module
-
-
-def get_storage(import_path):
- """
- Imports the message storage class described by import_path, where
- import_path is the full Python path to the class.
- """
- try:
- dot = import_path.rindex('.')
- except ValueError:
- raise ImproperlyConfigured("%s isn't a Python path." % import_path)
- module, classname = import_path[:dot], import_path[dot + 1:]
- try:
- mod = import_module(module)
- except ImportError, e:
- raise ImproperlyConfigured('Error importing module %s: "%s"' %
- (module, e))
- try:
- return getattr(mod, classname)
- except AttributeError:
- raise ImproperlyConfigured('Module "%s" does not define a "%s" '
- 'class.' % (module, classname))
-
-
-# Callable with the same interface as the storage classes i.e. accepts a
-# 'request' object. It is wrapped in a lambda to stop 'settings' being used at
-# the module level
-default_storage = lambda request: get_storage(settings.MESSAGE_STORAGE)(request)
diff --git a/parts/django/django/contrib/messages/storage/base.py b/parts/django/django/contrib/messages/storage/base.py
deleted file mode 100644
index 65e8526..0000000
--- a/parts/django/django/contrib/messages/storage/base.py
+++ /dev/null
@@ -1,181 +0,0 @@
-from django.conf import settings
-from django.utils.encoding import force_unicode, StrAndUnicode
-from django.contrib.messages import constants, utils
-
-
-LEVEL_TAGS = utils.get_level_tags()
-
-
-class Message(StrAndUnicode):
- """
- Represents an actual message that can be stored in any of the supported
- storage classes (typically session- or cookie-based) and rendered in a view
- or template.
- """
-
- def __init__(self, level, message, extra_tags=None):
- self.level = int(level)
- self.message = message
- self.extra_tags = extra_tags
-
- def _prepare(self):
- """
- Prepares the message for serialization by forcing the ``message``
- and ``extra_tags`` to unicode in case they are lazy translations.
-
- Known "safe" types (None, int, etc.) are not converted (see Django's
- ``force_unicode`` implementation for details).
- """
- self.message = force_unicode(self.message, strings_only=True)
- self.extra_tags = force_unicode(self.extra_tags, strings_only=True)
-
- def __eq__(self, other):
- return isinstance(other, Message) and self.level == other.level and \
- self.message == other.message
-
- def __unicode__(self):
- return force_unicode(self.message)
-
- def _get_tags(self):
- label_tag = force_unicode(LEVEL_TAGS.get(self.level, ''),
- strings_only=True)
- extra_tags = force_unicode(self.extra_tags, strings_only=True)
- if extra_tags and label_tag:
- return u' '.join([extra_tags, label_tag])
- elif extra_tags:
- return extra_tags
- elif label_tag:
- return label_tag
- return ''
- tags = property(_get_tags)
-
-
-class BaseStorage(object):
- """
- This is the base backend for temporary message storage.
-
- This is not a complete class; to be a usable storage backend, it must be
- subclassed and the two methods ``_get`` and ``_store`` overridden.
- """
-
- def __init__(self, request, *args, **kwargs):
- self.request = request
- self._queued_messages = []
- self.used = False
- self.added_new = False
- super(BaseStorage, self).__init__(*args, **kwargs)
-
- def __len__(self):
- return len(self._loaded_messages) + len(self._queued_messages)
-
- def __iter__(self):
- self.used = True
- if self._queued_messages:
- self._loaded_messages.extend(self._queued_messages)
- self._queued_messages = []
- return iter(self._loaded_messages)
-
- def __contains__(self, item):
- return item in self._loaded_messages or item in self._queued_messages
-
- @property
- def _loaded_messages(self):
- """
- Returns a list of loaded messages, retrieving them first if they have
- not been loaded yet.
- """
- if not hasattr(self, '_loaded_data'):
- messages, all_retrieved = self._get()
- self._loaded_data = messages or []
- return self._loaded_data
-
- def _get(self, *args, **kwargs):
- """
- Retrieves a list of stored messages. Returns a tuple of the messages
- and a flag indicating whether or not all the messages originally
- intended to be stored in this storage were, in fact, stored and
- retrieved; e.g., ``(messages, all_retrieved)``.
-
- **This method must be implemented by a subclass.**
-
- If it is possible to tell if the backend was not used (as opposed to
- just containing no messages) then ``None`` should be returned in
- place of ``messages``.
- """
- raise NotImplementedError()
-
- def _store(self, messages, response, *args, **kwargs):
- """
- Stores a list of messages, returning a list of any messages which could
- not be stored.
-
- One type of object must be able to be stored, ``Message``.
-
- **This method must be implemented by a subclass.**
- """
- raise NotImplementedError()
-
- def _prepare_messages(self, messages):
- """
- Prepares a list of messages for storage.
- """
- for message in messages:
- message._prepare()
-
- def update(self, response):
- """
- Stores all unread messages.
-
- If the backend has yet to be iterated, previously stored messages will
- be stored again. Otherwise, only messages added after the last
- iteration will be stored.
- """
- self._prepare_messages(self._queued_messages)
- if self.used:
- return self._store(self._queued_messages, response)
- elif self.added_new:
- messages = self._loaded_messages + self._queued_messages
- return self._store(messages, response)
-
- def add(self, level, message, extra_tags=''):
- """
- Queues a message to be stored.
-
- The message is only queued if it contained something and its level is
- not less than the recording level (``self.level``).
- """
- if not message:
- return
- # Check that the message level is not less than the recording level.
- level = int(level)
- if level < self.level:
- return
- # Add the message.
- self.added_new = True
- message = Message(level, message, extra_tags=extra_tags)
- self._queued_messages.append(message)
-
- def _get_level(self):
- """
- Returns the minimum recorded level.
-
- The default level is the ``MESSAGE_LEVEL`` setting. If this is
- not found, the ``INFO`` level is used.
- """
- if not hasattr(self, '_level'):
- self._level = getattr(settings, 'MESSAGE_LEVEL', constants.INFO)
- return self._level
-
- def _set_level(self, value=None):
- """
- Sets a custom minimum recorded level.
-
- If set to ``None``, the default level will be used (see the
- ``_get_level`` method).
- """
- if value is None and hasattr(self, '_level'):
- del self._level
- else:
- self._level = int(value)
-
- level = property(_get_level, _set_level, _set_level)
diff --git a/parts/django/django/contrib/messages/storage/cookie.py b/parts/django/django/contrib/messages/storage/cookie.py
deleted file mode 100644
index 1fd3ed9..0000000
--- a/parts/django/django/contrib/messages/storage/cookie.py
+++ /dev/null
@@ -1,152 +0,0 @@
-import hmac
-
-from django.conf import settings
-from django.contrib.messages import constants
-from django.contrib.messages.storage.base import BaseStorage, Message
-from django.http import CompatCookie
-from django.utils import simplejson as json
-from django.utils.hashcompat import sha_hmac
-
-
-class MessageEncoder(json.JSONEncoder):
- """
- Compactly serializes instances of the ``Message`` class as JSON.
- """
- message_key = '__json_message'
-
- def default(self, obj):
- if isinstance(obj, Message):
- message = [self.message_key, obj.level, obj.message]
- if obj.extra_tags:
- message.append(obj.extra_tags)
- return message
- return super(MessageEncoder, self).default(obj)
-
-
-class MessageDecoder(json.JSONDecoder):
- """
- Decodes JSON that includes serialized ``Message`` instances.
- """
-
- def process_messages(self, obj):
- if isinstance(obj, list) and obj:
- if obj[0] == MessageEncoder.message_key:
- return Message(*obj[1:])
- return [self.process_messages(item) for item in obj]
- if isinstance(obj, dict):
- return dict([(key, self.process_messages(value))
- for key, value in obj.iteritems()])
- return obj
-
- def decode(self, s, **kwargs):
- decoded = super(MessageDecoder, self).decode(s, **kwargs)
- return self.process_messages(decoded)
-
-class CookieStorage(BaseStorage):
- """
- Stores messages in a cookie.
- """
- cookie_name = 'messages'
- # We should be able to store 4K in a cookie, but Internet Explorer
- # imposes 4K as the *total* limit for a domain. To allow other
- # cookies, we go for 3/4 of 4K.
- max_cookie_size = 3072
- not_finished = '__messagesnotfinished__'
-
- def _get(self, *args, **kwargs):
- """
- Retrieves a list of messages from the messages cookie. If the
- not_finished sentinel value is found at the end of the message list,
- remove it and return a result indicating that not all messages were
- retrieved by this storage.
- """
- data = self.request.COOKIES.get(self.cookie_name)
- messages = self._decode(data)
- all_retrieved = not (messages and messages[-1] == self.not_finished)
- if messages and not all_retrieved:
- # remove the sentinel value
- messages.pop()
- return messages, all_retrieved
-
- def _update_cookie(self, encoded_data, response):
- """
- Either sets the cookie with the encoded data if there is any data to
- store, or deletes the cookie.
- """
- if encoded_data:
- response.set_cookie(self.cookie_name, encoded_data)
- else:
- response.delete_cookie(self.cookie_name)
-
- def _store(self, messages, response, remove_oldest=True, *args, **kwargs):
- """
- Stores the messages to a cookie, returning a list of any messages which
- could not be stored.
-
- If the encoded data is larger than ``max_cookie_size``, removes
- messages until the data fits (these are the messages which are
- returned), and add the not_finished sentinel value to indicate as much.
- """
- unstored_messages = []
- encoded_data = self._encode(messages)
- if self.max_cookie_size:
- # data is going to be stored eventually by CompatCookie, which
- # adds it's own overhead, which we must account for.
- cookie = CompatCookie() # create outside the loop
- def stored_length(val):
- return len(cookie.value_encode(val)[1])
-
- while encoded_data and stored_length(encoded_data) > self.max_cookie_size:
- if remove_oldest:
- unstored_messages.append(messages.pop(0))
- else:
- unstored_messages.insert(0, messages.pop())
- encoded_data = self._encode(messages + [self.not_finished],
- encode_empty=unstored_messages)
- self._update_cookie(encoded_data, response)
- return unstored_messages
-
- def _hash(self, value):
- """
- Creates an HMAC/SHA1 hash based on the value and the project setting's
- SECRET_KEY, modified to make it unique for the present purpose.
- """
- key = 'django.contrib.messages' + settings.SECRET_KEY
- return hmac.new(key, value, sha_hmac).hexdigest()
-
- def _encode(self, messages, encode_empty=False):
- """
- Returns an encoded version of the messages list which can be stored as
- plain text.
-
- Since the data will be retrieved from the client-side, the encoded data
- also contains a hash to ensure that the data was not tampered with.
- """
- if messages or encode_empty:
- encoder = MessageEncoder(separators=(',', ':'))
- value = encoder.encode(messages)
- return '%s$%s' % (self._hash(value), value)
-
- def _decode(self, data):
- """
- Safely decodes a encoded text stream back into a list of messages.
-
- If the encoded text stream contained an invalid hash or was in an
- invalid format, ``None`` is returned.
- """
- if not data:
- return None
- bits = data.split('$', 1)
- if len(bits) == 2:
- hash, value = bits
- if hash == self._hash(value):
- try:
- # If we get here (and the JSON decode works), everything is
- # good. In any other case, drop back and return None.
- return json.loads(value, cls=MessageDecoder)
- except ValueError:
- pass
- # Mark the data as used (so it gets removed) since something was wrong
- # with the data.
- self.used = True
- return None
diff --git a/parts/django/django/contrib/messages/storage/fallback.py b/parts/django/django/contrib/messages/storage/fallback.py
deleted file mode 100644
index 6c35343..0000000
--- a/parts/django/django/contrib/messages/storage/fallback.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from django.contrib.messages.storage.base import BaseStorage
-from django.contrib.messages.storage.cookie import CookieStorage
-from django.contrib.messages.storage.session import SessionStorage
-
-class FallbackStorage(BaseStorage):
- """
- Tries to store all messages in the first backend, storing any unstored
- messages in each subsequent backend backend.
- """
- storage_classes = (CookieStorage, SessionStorage)
-
- def __init__(self, *args, **kwargs):
- super(FallbackStorage, self).__init__(*args, **kwargs)
- self.storages = [storage_class(*args, **kwargs)
- for storage_class in self.storage_classes]
- self._used_storages = set()
-
- def _get(self, *args, **kwargs):
- """
- Gets a single list of messages from all storage backends.
- """
- all_messages = []
- for storage in self.storages:
- messages, all_retrieved = storage._get()
- # If the backend hasn't been used, no more retrieval is necessary.
- if messages is None:
- break
- if messages:
- self._used_storages.add(storage)
- all_messages.extend(messages)
- # If this storage class contained all the messages, no further
- # retrieval is necessary
- if all_retrieved:
- break
- return all_messages, all_retrieved
-
- def _store(self, messages, response, *args, **kwargs):
- """
- Stores the messages, returning any unstored messages after trying all
- backends.
-
- For each storage backend, any messages not stored are passed on to the
- next backend.
- """
- for storage in self.storages:
- if messages:
- messages = storage._store(messages, response,
- remove_oldest=False)
- # Even if there are no more messages, continue iterating to ensure
- # storages which contained messages are flushed.
- elif storage in self._used_storages:
- storage._store([], response)
- self._used_storages.remove(storage)
- return messages
diff --git a/parts/django/django/contrib/messages/storage/session.py b/parts/django/django/contrib/messages/storage/session.py
deleted file mode 100644
index 225dfda..0000000
--- a/parts/django/django/contrib/messages/storage/session.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from django.contrib.messages.storage.base import BaseStorage
-
-
-class SessionStorage(BaseStorage):
- """
- Stores messages in the session (that is, django.contrib.sessions).
- """
- session_key = '_messages'
-
- def __init__(self, request, *args, **kwargs):
- assert hasattr(request, 'session'), "The session-based temporary "\
- "message storage requires session middleware to be installed, "\
- "and come before the message middleware in the "\
- "MIDDLEWARE_CLASSES list."
- super(SessionStorage, self).__init__(request, *args, **kwargs)
-
- def _get(self, *args, **kwargs):
- """
- Retrieves a list of messages from the request's session. This storage
- always stores everything it is given, so return True for the
- all_retrieved flag.
- """
- return self.request.session.get(self.session_key), True
-
- def _store(self, messages, response, *args, **kwargs):
- """
- Stores a list of messages to the request's session.
- """
- if messages:
- self.request.session[self.session_key] = messages
- else:
- self.request.session.pop(self.session_key, None)
- return []
diff --git a/parts/django/django/contrib/messages/storage/user_messages.py b/parts/django/django/contrib/messages/storage/user_messages.py
deleted file mode 100644
index 17f0c55..0000000
--- a/parts/django/django/contrib/messages/storage/user_messages.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-Storages used to assist in the deprecation of contrib.auth User messages.
-
-"""
-from django.contrib.messages import constants
-from django.contrib.messages.storage.base import BaseStorage, Message
-from django.contrib.auth.models import User
-from django.contrib.messages.storage.fallback import FallbackStorage
-
-
-class UserMessagesStorage(BaseStorage):
- """
- Retrieves messages from the User, using the legacy user.message_set API.
-
- This storage is "read-only" insofar as it can only retrieve and delete
- messages, not store them.
- """
- session_key = '_messages'
-
- def _get_messages_queryset(self):
- """
- Returns the QuerySet containing all user messages (or ``None`` if
- request.user is not a contrib.auth User).
- """
- user = getattr(self.request, 'user', None)
- if isinstance(user, User):
- return user._message_set.all()
-
- def add(self, *args, **kwargs):
- raise NotImplementedError('This message storage is read-only.')
-
- def _get(self, *args, **kwargs):
- """
- Retrieves a list of messages assigned to the User. This backend never
- stores anything, so all_retrieved is assumed to be False.
- """
- queryset = self._get_messages_queryset()
- if queryset is None:
- # This is a read-only and optional storage, so to ensure other
- # storages will also be read if used with FallbackStorage an empty
- # list is returned rather than None.
- return [], False
- messages = []
- for user_message in queryset:
- messages.append(Message(constants.INFO, user_message.message))
- return messages, False
-
- def _store(self, messages, *args, **kwargs):
- """
- Removes any messages assigned to the User and returns the list of
- messages (since no messages are stored in this read-only storage).
- """
- queryset = self._get_messages_queryset()
- if queryset is not None:
- queryset.delete()
- return messages
-
-
-class LegacyFallbackStorage(FallbackStorage):
- """
- Works like ``FallbackStorage`` but also handles retrieving (and clearing)
- contrib.auth User messages.
- """
- storage_classes = (UserMessagesStorage,) + FallbackStorage.storage_classes
diff --git a/parts/django/django/contrib/messages/tests/__init__.py b/parts/django/django/contrib/messages/tests/__init__.py
deleted file mode 100644
index 84581e0..0000000
--- a/parts/django/django/contrib/messages/tests/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.contrib.messages.tests.cookie import CookieTest
-from django.contrib.messages.tests.fallback import FallbackTest
-from django.contrib.messages.tests.middleware import MiddlewareTest
-from django.contrib.messages.tests.session import SessionTest
-from django.contrib.messages.tests.user_messages import \
- UserMessagesTest, LegacyFallbackTest
diff --git a/parts/django/django/contrib/messages/tests/base.py b/parts/django/django/contrib/messages/tests/base.py
deleted file mode 100644
index 2dea5a4..0000000
--- a/parts/django/django/contrib/messages/tests/base.py
+++ /dev/null
@@ -1,402 +0,0 @@
-from django import http
-from django.test import TestCase
-from django.conf import settings
-from django.utils.translation import ugettext_lazy
-from django.contrib.messages import constants, utils, get_level, set_level
-from django.contrib.messages.api import MessageFailure
-from django.contrib.messages.storage import default_storage, base
-from django.contrib.messages.storage.base import Message
-from django.core.urlresolvers import reverse
-from django.contrib.auth.models import User
-
-
-def add_level_messages(storage):
- """
- Adds 6 messages from different levels (including a custom one) to a storage
- instance.
- """
- storage.add(constants.INFO, 'A generic info message')
- storage.add(29, 'Some custom level')
- storage.add(constants.DEBUG, 'A debugging message', extra_tags='extra-tag')
- storage.add(constants.WARNING, 'A warning')
- storage.add(constants.ERROR, 'An error')
- storage.add(constants.SUCCESS, 'This was a triumph.')
-
-
-class BaseTest(TestCase):
- storage_class = default_storage
- restore_settings = ['MESSAGE_LEVEL', 'MESSAGE_TAGS']
- urls = 'django.contrib.messages.tests.urls'
- levels = {
- 'debug': constants.DEBUG,
- 'info': constants.INFO,
- 'success': constants.SUCCESS,
- 'warning': constants.WARNING,
- 'error': constants.ERROR,
- }
-
- def setUp(self):
- self._remembered_settings = {}
- for setting in self.restore_settings:
- if hasattr(settings, setting):
- self._remembered_settings[setting] = getattr(settings, setting)
- delattr(settings._wrapped, setting)
- # Backup these manually because we do not want them deleted.
- self._middleware_classes = settings.MIDDLEWARE_CLASSES
- self._template_context_processors = \
- settings.TEMPLATE_CONTEXT_PROCESSORS
- self._installed_apps = settings.INSTALLED_APPS
- self._message_storage = settings.MESSAGE_STORAGE
- settings.MESSAGE_STORAGE = '%s.%s' % (self.storage_class.__module__,
- self.storage_class.__name__)
-
- def tearDown(self):
- for setting in self.restore_settings:
- self.restore_setting(setting)
- # Restore these manually (see above).
- settings.MIDDLEWARE_CLASSES = self._middleware_classes
- settings.TEMPLATE_CONTEXT_PROCESSORS = \
- self._template_context_processors
- settings.INSTALLED_APPS = self._installed_apps
- settings.MESSAGE_STORAGE = self._message_storage
-
- def restore_setting(self, setting):
- if setting in self._remembered_settings:
- value = self._remembered_settings.pop(setting)
- setattr(settings, setting, value)
- elif hasattr(settings, setting):
- delattr(settings._wrapped, setting)
-
- def get_request(self):
- return http.HttpRequest()
-
- def get_response(self):
- return http.HttpResponse()
-
- def get_storage(self, data=None):
- """
- Returns the storage backend, setting its loaded data to the ``data``
- argument.
-
- This method avoids the storage ``_get`` method from getting called so
- that other parts of the storage backend can be tested independent of
- the message retrieval logic.
- """
- storage = self.storage_class(self.get_request())
- storage._loaded_data = data or []
- return storage
-
- def test_add(self):
- storage = self.get_storage()
- self.assertFalse(storage.added_new)
- storage.add(constants.INFO, 'Test message 1')
- self.assert_(storage.added_new)
- storage.add(constants.INFO, 'Test message 2', extra_tags='tag')
- self.assertEqual(len(storage), 2)
-
- def test_add_lazy_translation(self):
- storage = self.get_storage()
- response = self.get_response()
-
- storage.add(constants.INFO, ugettext_lazy('lazy message'))
- storage.update(response)
-
- storing = self.stored_messages_count(storage, response)
- self.assertEqual(storing, 1)
-
- def test_no_update(self):
- storage = self.get_storage()
- response = self.get_response()
- storage.update(response)
- storing = self.stored_messages_count(storage, response)
- self.assertEqual(storing, 0)
-
- def test_add_update(self):
- storage = self.get_storage()
- response = self.get_response()
-
- storage.add(constants.INFO, 'Test message 1')
- storage.add(constants.INFO, 'Test message 1', extra_tags='tag')
- storage.update(response)
-
- storing = self.stored_messages_count(storage, response)
- self.assertEqual(storing, 2)
-
- def test_existing_add_read_update(self):
- storage = self.get_existing_storage()
- response = self.get_response()
-
- storage.add(constants.INFO, 'Test message 3')
- list(storage) # Simulates a read
- storage.update(response)
-
- storing = self.stored_messages_count(storage, response)
- self.assertEqual(storing, 0)
-
- def test_existing_read_add_update(self):
- storage = self.get_existing_storage()
- response = self.get_response()
-
- list(storage) # Simulates a read
- storage.add(constants.INFO, 'Test message 3')
- storage.update(response)
-
- storing = self.stored_messages_count(storage, response)
- self.assertEqual(storing, 1)
-
- def test_full_request_response_cycle(self):
- """
- With the message middleware enabled, tests that messages are properly
- stored and then retrieved across the full request/redirect/response
- cycle.
- """
- settings.MESSAGE_LEVEL = constants.DEBUG
- data = {
- 'messages': ['Test message %d' % x for x in xrange(10)],
- }
- show_url = reverse('django.contrib.messages.tests.urls.show')
- for level in ('debug', 'info', 'success', 'warning', 'error'):
- add_url = reverse('django.contrib.messages.tests.urls.add',
- args=(level,))
- response = self.client.post(add_url, data, follow=True)
- self.assertRedirects(response, show_url)
- self.assertTrue('messages' in response.context)
- messages = [Message(self.levels[level], msg) for msg in
- data['messages']]
- self.assertEqual(list(response.context['messages']), messages)
- for msg in data['messages']:
- self.assertContains(response, msg)
-
- def test_multiple_posts(self):
- """
- Tests that messages persist properly when multiple POSTs are made
- before a GET.
- """
- settings.MESSAGE_LEVEL = constants.DEBUG
- data = {
- 'messages': ['Test message %d' % x for x in xrange(10)],
- }
- show_url = reverse('django.contrib.messages.tests.urls.show')
- messages = []
- for level in ('debug', 'info', 'success', 'warning', 'error'):
- messages.extend([Message(self.levels[level], msg) for msg in
- data['messages']])
- add_url = reverse('django.contrib.messages.tests.urls.add',
- args=(level,))
- self.client.post(add_url, data)
- response = self.client.get(show_url)
- self.assertTrue('messages' in response.context)
- self.assertEqual(list(response.context['messages']), messages)
- for msg in data['messages']:
- self.assertContains(response, msg)
-
- def test_middleware_disabled_auth_user(self):
- """
- Tests that the messages API successfully falls back to using
- user.message_set to store messages directly when the middleware is
- disabled.
- """
- settings.MESSAGE_LEVEL = constants.DEBUG
- user = User.objects.create_user('test', 'test@example.com', 'test')
- self.client.login(username='test', password='test')
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS)
- settings.INSTALLED_APPS.remove(
- 'django.contrib.messages',
- )
- settings.MIDDLEWARE_CLASSES = list(settings.MIDDLEWARE_CLASSES)
- settings.MIDDLEWARE_CLASSES.remove(
- 'django.contrib.messages.middleware.MessageMiddleware',
- )
- settings.TEMPLATE_CONTEXT_PROCESSORS = \
- list(settings.TEMPLATE_CONTEXT_PROCESSORS)
- settings.TEMPLATE_CONTEXT_PROCESSORS.remove(
- 'django.contrib.messages.context_processors.messages',
- )
- data = {
- 'messages': ['Test message %d' % x for x in xrange(10)],
- }
- show_url = reverse('django.contrib.messages.tests.urls.show')
- for level in ('debug', 'info', 'success', 'warning', 'error'):
- add_url = reverse('django.contrib.messages.tests.urls.add',
- args=(level,))
- response = self.client.post(add_url, data, follow=True)
- self.assertRedirects(response, show_url)
- self.assertTrue('messages' in response.context)
- context_messages = list(response.context['messages'])
- for msg in data['messages']:
- self.assertTrue(msg in context_messages)
- self.assertContains(response, msg)
-
- def test_middleware_disabled_anon_user(self):
- """
- Tests that, when the middleware is disabled and a user is not logged
- in, an exception is raised when one attempts to store a message.
- """
- settings.MESSAGE_LEVEL = constants.DEBUG
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS)
- settings.INSTALLED_APPS.remove(
- 'django.contrib.messages',
- )
- settings.MIDDLEWARE_CLASSES = list(settings.MIDDLEWARE_CLASSES)
- settings.MIDDLEWARE_CLASSES.remove(
- 'django.contrib.messages.middleware.MessageMiddleware',
- )
- settings.TEMPLATE_CONTEXT_PROCESSORS = \
- list(settings.TEMPLATE_CONTEXT_PROCESSORS)
- settings.TEMPLATE_CONTEXT_PROCESSORS.remove(
- 'django.contrib.messages.context_processors.messages',
- )
- data = {
- 'messages': ['Test message %d' % x for x in xrange(10)],
- }
- show_url = reverse('django.contrib.messages.tests.urls.show')
- for level in ('debug', 'info', 'success', 'warning', 'error'):
- add_url = reverse('django.contrib.messages.tests.urls.add',
- args=(level,))
- self.assertRaises(MessageFailure, self.client.post, add_url,
- data, follow=True)
-
- def test_middleware_disabled_anon_user_fail_silently(self):
- """
- Tests that, when the middleware is disabled and a user is not logged
- in, an exception is not raised if 'fail_silently' = True
- """
- settings.MESSAGE_LEVEL = constants.DEBUG
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS)
- settings.INSTALLED_APPS.remove(
- 'django.contrib.messages',
- )
- settings.MIDDLEWARE_CLASSES = list(settings.MIDDLEWARE_CLASSES)
- settings.MIDDLEWARE_CLASSES.remove(
- 'django.contrib.messages.middleware.MessageMiddleware',
- )
- settings.TEMPLATE_CONTEXT_PROCESSORS = \
- list(settings.TEMPLATE_CONTEXT_PROCESSORS)
- settings.TEMPLATE_CONTEXT_PROCESSORS.remove(
- 'django.contrib.messages.context_processors.messages',
- )
- data = {
- 'messages': ['Test message %d' % x for x in xrange(10)],
- 'fail_silently': True,
- }
- show_url = reverse('django.contrib.messages.tests.urls.show')
- for level in ('debug', 'info', 'success', 'warning', 'error'):
- add_url = reverse('django.contrib.messages.tests.urls.add',
- args=(level,))
- response = self.client.post(add_url, data, follow=True)
- self.assertRedirects(response, show_url)
- self.assertTrue('messages' in response.context)
- self.assertEqual(list(response.context['messages']), [])
-
- def stored_messages_count(self, storage, response):
- """
- Returns the number of messages being stored after a
- ``storage.update()`` call.
- """
- raise NotImplementedError('This method must be set by a subclass.')
-
- def test_get(self):
- raise NotImplementedError('This method must be set by a subclass.')
-
- def get_existing_storage(self):
- return self.get_storage([Message(constants.INFO, 'Test message 1'),
- Message(constants.INFO, 'Test message 2',
- extra_tags='tag')])
-
- def test_existing_read(self):
- """
- Tests that reading the existing storage doesn't cause the data to be
- lost.
- """
- storage = self.get_existing_storage()
- self.assertFalse(storage.used)
- # After iterating the storage engine directly, the used flag is set.
- data = list(storage)
- self.assert_(storage.used)
- # The data does not disappear because it has been iterated.
- self.assertEqual(data, list(storage))
-
- def test_existing_add(self):
- storage = self.get_existing_storage()
- self.assertFalse(storage.added_new)
- storage.add(constants.INFO, 'Test message 3')
- self.assert_(storage.added_new)
-
- def test_default_level(self):
- # get_level works even with no storage on the request.
- request = self.get_request()
- self.assertEqual(get_level(request), constants.INFO)
-
- # get_level returns the default level if it hasn't been set.
- storage = self.get_storage()
- request._messages = storage
- self.assertEqual(get_level(request), constants.INFO)
-
- # Only messages of sufficient level get recorded.
- add_level_messages(storage)
- self.assertEqual(len(storage), 5)
-
- def test_low_level(self):
- request = self.get_request()
- storage = self.storage_class(request)
- request._messages = storage
-
- self.assert_(set_level(request, 5))
- self.assertEqual(get_level(request), 5)
-
- add_level_messages(storage)
- self.assertEqual(len(storage), 6)
-
- def test_high_level(self):
- request = self.get_request()
- storage = self.storage_class(request)
- request._messages = storage
-
- self.assert_(set_level(request, 30))
- self.assertEqual(get_level(request), 30)
-
- add_level_messages(storage)
- self.assertEqual(len(storage), 2)
-
- def test_settings_level(self):
- request = self.get_request()
- storage = self.storage_class(request)
-
- settings.MESSAGE_LEVEL = 29
- self.assertEqual(get_level(request), 29)
-
- add_level_messages(storage)
- self.assertEqual(len(storage), 3)
-
- def test_tags(self):
- storage = self.get_storage()
- storage.level = 0
- add_level_messages(storage)
- tags = [msg.tags for msg in storage]
- self.assertEqual(tags,
- ['info', '', 'extra-tag debug', 'warning', 'error',
- 'success'])
-
- def test_custom_tags(self):
- settings.MESSAGE_TAGS = {
- constants.INFO: 'info',
- constants.DEBUG: '',
- constants.WARNING: '',
- constants.ERROR: 'bad',
- 29: 'custom',
- }
- # LEVEL_TAGS is a constant defined in the
- # django.contrib.messages.storage.base module, so after changing
- # settings.MESSAGE_TAGS, we need to update that constant too.
- base.LEVEL_TAGS = utils.get_level_tags()
- try:
- storage = self.get_storage()
- storage.level = 0
- add_level_messages(storage)
- tags = [msg.tags for msg in storage]
- self.assertEqual(tags,
- ['info', 'custom', 'extra-tag', '', 'bad', 'success'])
- finally:
- # Ensure the level tags constant is put back like we found it.
- self.restore_setting('MESSAGE_TAGS')
- base.LEVEL_TAGS = utils.get_level_tags()
diff --git a/parts/django/django/contrib/messages/tests/cookie.py b/parts/django/django/contrib/messages/tests/cookie.py
deleted file mode 100644
index 9aadcf4..0000000
--- a/parts/django/django/contrib/messages/tests/cookie.py
+++ /dev/null
@@ -1,106 +0,0 @@
-from django.contrib.messages import constants
-from django.contrib.messages.tests.base import BaseTest
-from django.contrib.messages.storage.cookie import CookieStorage, \
- MessageEncoder, MessageDecoder
-from django.contrib.messages.storage.base import Message
-from django.utils import simplejson as json
-
-
-def set_cookie_data(storage, messages, invalid=False, encode_empty=False):
- """
- Sets ``request.COOKIES`` with the encoded data and removes the storage
- backend's loaded data cache.
- """
- encoded_data = storage._encode(messages, encode_empty=encode_empty)
- if invalid:
- # Truncate the first character so that the hash is invalid.
- encoded_data = encoded_data[1:]
- storage.request.COOKIES = {CookieStorage.cookie_name: encoded_data}
- if hasattr(storage, '_loaded_data'):
- del storage._loaded_data
-
-
-def stored_cookie_messages_count(storage, response):
- """
- Returns an integer containing the number of messages stored.
- """
- # Get a list of cookies, excluding ones with a max-age of 0 (because
- # they have been marked for deletion).
- cookie = response.cookies.get(storage.cookie_name)
- if not cookie or cookie['max-age'] == 0:
- return 0
- data = storage._decode(cookie.value)
- if not data:
- return 0
- if data[-1] == CookieStorage.not_finished:
- data.pop()
- return len(data)
-
-
-class CookieTest(BaseTest):
- storage_class = CookieStorage
-
- def stored_messages_count(self, storage, response):
- return stored_cookie_messages_count(storage, response)
-
- def test_get(self):
- storage = self.storage_class(self.get_request())
- # Set initial data.
- example_messages = ['test', 'me']
- set_cookie_data(storage, example_messages)
- # Test that the message actually contains what we expect.
- self.assertEqual(list(storage), example_messages)
-
- def test_get_bad_cookie(self):
- request = self.get_request()
- storage = self.storage_class(request)
- # Set initial (invalid) data.
- example_messages = ['test', 'me']
- set_cookie_data(storage, example_messages, invalid=True)
- # Test that the message actually contains what we expect.
- self.assertEqual(list(storage), [])
-
- def test_max_cookie_length(self):
- """
- Tests that, if the data exceeds what is allowed in a cookie, older
- messages are removed before saving (and returned by the ``update``
- method).
- """
- storage = self.get_storage()
- response = self.get_response()
-
- # When storing as a cookie, the cookie has constant overhead of approx
- # 54 chars, and each message has a constant overhead of about 37 chars
- # and a variable overhead of zero in the best case. We aim for a message
- # size which will fit 4 messages into the cookie, but not 5.
- # See also FallbackTest.test_session_fallback
- msg_size = int((CookieStorage.max_cookie_size - 54) / 4.5 - 37)
- for i in range(5):
- storage.add(constants.INFO, str(i) * msg_size)
- unstored_messages = storage.update(response)
-
- cookie_storing = self.stored_messages_count(storage, response)
- self.assertEqual(cookie_storing, 4)
-
- self.assertEqual(len(unstored_messages), 1)
- self.assert_(unstored_messages[0].message == '0' * msg_size)
-
- def test_json_encoder_decoder(self):
- """
- Tests that a complex nested data structure containing Message
- instances is properly encoded/decoded by the custom JSON
- encoder/decoder classes.
- """
- messages = [
- {
- 'message': Message(constants.INFO, 'Test message'),
- 'message_list': [Message(constants.INFO, 'message %s') \
- for x in xrange(5)] + [{'another-message': \
- Message(constants.ERROR, 'error')}],
- },
- Message(constants.INFO, 'message %s'),
- ]
- encoder = MessageEncoder(separators=(',', ':'))
- value = encoder.encode(messages)
- decoded_messages = json.loads(value, cls=MessageDecoder)
- self.assertEqual(messages, decoded_messages)
diff --git a/parts/django/django/contrib/messages/tests/fallback.py b/parts/django/django/contrib/messages/tests/fallback.py
deleted file mode 100644
index 9e4f657..0000000
--- a/parts/django/django/contrib/messages/tests/fallback.py
+++ /dev/null
@@ -1,175 +0,0 @@
-from django.contrib.messages import constants
-from django.contrib.messages.storage.fallback import FallbackStorage, \
- CookieStorage
-from django.contrib.messages.tests.base import BaseTest
-from django.contrib.messages.tests.cookie import set_cookie_data, \
- stored_cookie_messages_count
-from django.contrib.messages.tests.session import set_session_data, \
- stored_session_messages_count
-
-
-class FallbackTest(BaseTest):
- storage_class = FallbackStorage
-
- def get_request(self):
- self.session = {}
- request = super(FallbackTest, self).get_request()
- request.session = self.session
- return request
-
- def get_cookie_storage(self, storage):
- return storage.storages[-2]
-
- def get_session_storage(self, storage):
- return storage.storages[-1]
-
- def stored_cookie_messages_count(self, storage, response):
- return stored_cookie_messages_count(self.get_cookie_storage(storage),
- response)
-
- def stored_session_messages_count(self, storage, response):
- return stored_session_messages_count(self.get_session_storage(storage))
-
- def stored_messages_count(self, storage, response):
- """
- Return the storage totals from both cookie and session backends.
- """
- total = (self.stored_cookie_messages_count(storage, response) +
- self.stored_session_messages_count(storage, response))
- return total
-
- def test_get(self):
- request = self.get_request()
- storage = self.storage_class(request)
- cookie_storage = self.get_cookie_storage(storage)
-
- # Set initial cookie data.
- example_messages = [str(i) for i in range(5)]
- set_cookie_data(cookie_storage, example_messages)
-
- # Overwrite the _get method of the fallback storage to prove it is not
- # used (it would cause a TypeError: 'NoneType' object is not callable).
- self.get_session_storage(storage)._get = None
-
- # Test that the message actually contains what we expect.
- self.assertEqual(list(storage), example_messages)
-
- def test_get_empty(self):
- request = self.get_request()
- storage = self.storage_class(request)
-
- # Overwrite the _get method of the fallback storage to prove it is not
- # used (it would cause a TypeError: 'NoneType' object is not callable).
- self.get_session_storage(storage)._get = None
-
- # Test that the message actually contains what we expect.
- self.assertEqual(list(storage), [])
-
- def test_get_fallback(self):
- request = self.get_request()
- storage = self.storage_class(request)
- cookie_storage = self.get_cookie_storage(storage)
- session_storage = self.get_session_storage(storage)
-
- # Set initial cookie and session data.
- example_messages = [str(i) for i in range(5)]
- set_cookie_data(cookie_storage, example_messages[:4] +
- [CookieStorage.not_finished])
- set_session_data(session_storage, example_messages[4:])
-
- # Test that the message actually contains what we expect.
- self.assertEqual(list(storage), example_messages)
-
- def test_get_fallback_only(self):
- request = self.get_request()
- storage = self.storage_class(request)
- cookie_storage = self.get_cookie_storage(storage)
- session_storage = self.get_session_storage(storage)
-
- # Set initial cookie and session data.
- example_messages = [str(i) for i in range(5)]
- set_cookie_data(cookie_storage, [CookieStorage.not_finished],
- encode_empty=True)
- set_session_data(session_storage, example_messages)
-
- # Test that the message actually contains what we expect.
- self.assertEqual(list(storage), example_messages)
-
- def test_flush_used_backends(self):
- request = self.get_request()
- storage = self.storage_class(request)
- cookie_storage = self.get_cookie_storage(storage)
- session_storage = self.get_session_storage(storage)
-
- # Set initial cookie and session data.
- set_cookie_data(cookie_storage, ['cookie', CookieStorage.not_finished])
- set_session_data(session_storage, ['session'])
-
- # When updating, previously used but no longer needed backends are
- # flushed.
- response = self.get_response()
- list(storage)
- storage.update(response)
- session_storing = self.stored_session_messages_count(storage, response)
- self.assertEqual(session_storing, 0)
-
- def test_no_fallback(self):
- """
- Confirms that:
-
- (1) A short number of messages whose data size doesn't exceed what is
- allowed in a cookie will all be stored in the CookieBackend.
-
- (2) If the CookieBackend can store all messages, the SessionBackend
- won't be written to at all.
- """
- storage = self.get_storage()
- response = self.get_response()
-
- # Overwrite the _store method of the fallback storage to prove it isn't
- # used (it would cause a TypeError: 'NoneType' object is not callable).
- self.get_session_storage(storage)._store = None
-
- for i in range(5):
- storage.add(constants.INFO, str(i) * 100)
- storage.update(response)
-
- cookie_storing = self.stored_cookie_messages_count(storage, response)
- self.assertEqual(cookie_storing, 5)
- session_storing = self.stored_session_messages_count(storage, response)
- self.assertEqual(session_storing, 0)
-
- def test_session_fallback(self):
- """
- Confirms that, if the data exceeds what is allowed in a cookie,
- messages which did not fit are stored in the SessionBackend.
- """
- storage = self.get_storage()
- response = self.get_response()
-
- # see comment in CookieText.test_cookie_max_length
- msg_size = int((CookieStorage.max_cookie_size - 54) / 4.5 - 37)
- for i in range(5):
- storage.add(constants.INFO, str(i) * msg_size)
- storage.update(response)
-
- cookie_storing = self.stored_cookie_messages_count(storage, response)
- self.assertEqual(cookie_storing, 4)
- session_storing = self.stored_session_messages_count(storage, response)
- self.assertEqual(session_storing, 1)
-
- def test_session_fallback_only(self):
- """
- Confirms that large messages, none of which fit in a cookie, are stored
- in the SessionBackend (and nothing is stored in the CookieBackend).
- """
- storage = self.get_storage()
- response = self.get_response()
-
- storage.add(constants.INFO, 'x' * 5000)
- storage.update(response)
-
- cookie_storing = self.stored_cookie_messages_count(storage, response)
- self.assertEqual(cookie_storing, 0)
- session_storing = self.stored_session_messages_count(storage, response)
- self.assertEqual(session_storing, 1)
diff --git a/parts/django/django/contrib/messages/tests/middleware.py b/parts/django/django/contrib/messages/tests/middleware.py
deleted file mode 100644
index 654217a..0000000
--- a/parts/django/django/contrib/messages/tests/middleware.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import unittest
-from django import http
-from django.contrib.messages.middleware import MessageMiddleware
-
-
-class MiddlewareTest(unittest.TestCase):
-
- def setUp(self):
- self.middleware = MessageMiddleware()
-
- def test_response_without_messages(self):
- """
- Makes sure that the response middleware is tolerant of messages not
- existing on request.
- """
- request = http.HttpRequest()
- response = http.HttpResponse()
- self.middleware.process_response(request, response)
diff --git a/parts/django/django/contrib/messages/tests/session.py b/parts/django/django/contrib/messages/tests/session.py
deleted file mode 100644
index 741f531..0000000
--- a/parts/django/django/contrib/messages/tests/session.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from django.contrib.messages.tests.base import BaseTest
-from django.contrib.messages.storage.session import SessionStorage
-
-
-def set_session_data(storage, messages):
- """
- Sets the messages into the backend request's session and remove the
- backend's loaded data cache.
- """
- storage.request.session[storage.session_key] = messages
- if hasattr(storage, '_loaded_data'):
- del storage._loaded_data
-
-
-def stored_session_messages_count(storage):
- data = storage.request.session.get(storage.session_key, [])
- return len(data)
-
-
-class SessionTest(BaseTest):
- storage_class = SessionStorage
-
- def get_request(self):
- self.session = {}
- request = super(SessionTest, self).get_request()
- request.session = self.session
- return request
-
- def stored_messages_count(self, storage, response):
- return stored_session_messages_count(storage)
-
- def test_get(self):
- storage = self.storage_class(self.get_request())
- # Set initial data.
- example_messages = ['test', 'me']
- set_session_data(storage, example_messages)
- # Test that the message actually contains what we expect.
- self.assertEqual(list(storage), example_messages)
diff --git a/parts/django/django/contrib/messages/tests/urls.py b/parts/django/django/contrib/messages/tests/urls.py
deleted file mode 100644
index 6252adc..0000000
--- a/parts/django/django/contrib/messages/tests/urls.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from django.conf.urls.defaults import *
-from django.contrib import messages
-from django.core.urlresolvers import reverse
-from django.http import HttpResponseRedirect, HttpResponse
-from django.shortcuts import render_to_response
-from django.template import RequestContext, Template
-
-
-def add(request, message_type):
- # don't default to False here, because we want to test that it defaults
- # to False if unspecified
- fail_silently = request.POST.get('fail_silently', None)
- for msg in request.POST.getlist('messages'):
- if fail_silently is not None:
- getattr(messages, message_type)(request, msg,
- fail_silently=fail_silently)
- else:
- getattr(messages, message_type)(request, msg)
- show_url = reverse('django.contrib.messages.tests.urls.show')
- return HttpResponseRedirect(show_url)
-
-
-def show(request):
- t = Template("""{% if messages %}
-<ul class="messages">
- {% for message in messages %}
- <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
- {{ message }}
- </li>
- {% endfor %}
-</ul>
-{% endif %}""")
- return HttpResponse(t.render(RequestContext(request)))
-
-
-urlpatterns = patterns('',
- ('^add/(debug|info|success|warning|error)/$', add),
- ('^show/$', show),
-)
diff --git a/parts/django/django/contrib/messages/tests/user_messages.py b/parts/django/django/contrib/messages/tests/user_messages.py
deleted file mode 100644
index 8d7aeb7..0000000
--- a/parts/django/django/contrib/messages/tests/user_messages.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from django import http
-from django.contrib.auth.models import User
-from django.contrib.messages.storage.user_messages import UserMessagesStorage,\
- LegacyFallbackStorage
-from django.contrib.messages.tests.cookie import set_cookie_data
-from django.contrib.messages.tests.fallback import FallbackTest
-from django.test import TestCase
-
-
-class UserMessagesTest(TestCase):
-
- def setUp(self):
- self.user = User.objects.create(username='tester')
-
- def test_add(self):
- storage = UserMessagesStorage(http.HttpRequest())
- self.assertRaises(NotImplementedError, storage.add, 'Test message 1')
-
- def test_get_anonymous(self):
- # Ensure that the storage still works if no user is attached to the
- # request.
- storage = UserMessagesStorage(http.HttpRequest())
- self.assertEqual(len(storage), 0)
-
- def test_get(self):
- storage = UserMessagesStorage(http.HttpRequest())
- storage.request.user = self.user
- self.user.message_set.create(message='test message')
-
- self.assertEqual(len(storage), 1)
- self.assertEqual(list(storage)[0].message, 'test message')
-
-
-class LegacyFallbackTest(FallbackTest, TestCase):
- storage_class = LegacyFallbackStorage
-
- def setUp(self):
- super(LegacyFallbackTest, self).setUp()
- self.user = User.objects.create(username='tester')
-
- def get_request(self, *args, **kwargs):
- request = super(LegacyFallbackTest, self).get_request(*args, **kwargs)
- request.user = self.user
- return request
-
- def test_get_legacy_only(self):
- request = self.get_request()
- storage = self.storage_class(request)
- self.user.message_set.create(message='user message')
-
- # Test that the message actually contains what we expect.
- self.assertEqual(len(storage), 1)
- self.assertEqual(list(storage)[0].message, 'user message')
-
- def test_get_legacy(self):
- request = self.get_request()
- storage = self.storage_class(request)
- cookie_storage = self.get_cookie_storage(storage)
- self.user.message_set.create(message='user message')
- set_cookie_data(cookie_storage, ['cookie'])
-
- # Test that the message actually contains what we expect.
- self.assertEqual(len(storage), 2)
- self.assertEqual(list(storage)[0].message, 'user message')
- self.assertEqual(list(storage)[1], 'cookie')
diff --git a/parts/django/django/contrib/messages/utils.py b/parts/django/django/contrib/messages/utils.py
deleted file mode 100644
index 838860b..0000000
--- a/parts/django/django/contrib/messages/utils.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.conf import settings
-from django.contrib.messages import constants
-
-
-def get_level_tags():
- """
- Returns the message level tags.
- """
- level_tags = constants.DEFAULT_TAGS.copy()
- level_tags.update(getattr(settings, 'MESSAGE_TAGS', {}))
- return level_tags
diff --git a/parts/django/django/contrib/redirects/__init__.py b/parts/django/django/contrib/redirects/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/redirects/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/redirects/admin.py b/parts/django/django/contrib/redirects/admin.py
deleted file mode 100644
index a9b2a32..0000000
--- a/parts/django/django/contrib/redirects/admin.py
+++ /dev/null
@@ -1,11 +0,0 @@
-
-from django.contrib import admin
-from django.contrib.redirects.models import Redirect
-
-class RedirectAdmin(admin.ModelAdmin):
- list_display = ('old_path', 'new_path')
- list_filter = ('site',)
- search_fields = ('old_path', 'new_path')
- radio_fields = {'site': admin.VERTICAL}
-
-admin.site.register(Redirect, RedirectAdmin) \ No newline at end of file
diff --git a/parts/django/django/contrib/redirects/middleware.py b/parts/django/django/contrib/redirects/middleware.py
deleted file mode 100644
index 8998c2c..0000000
--- a/parts/django/django/contrib/redirects/middleware.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from django.contrib.redirects.models import Redirect
-from django import http
-from django.conf import settings
-
-class RedirectFallbackMiddleware(object):
- def process_response(self, request, response):
- if response.status_code != 404:
- return response # No need to check for a redirect for non-404 responses.
- path = request.get_full_path()
- try:
- r = Redirect.objects.get(site__id__exact=settings.SITE_ID, old_path=path)
- except Redirect.DoesNotExist:
- r = None
- if r is None and settings.APPEND_SLASH:
- # Try removing the trailing slash.
- try:
- r = Redirect.objects.get(site__id__exact=settings.SITE_ID,
- old_path=path[:path.rfind('/')]+path[path.rfind('/')+1:])
- except Redirect.DoesNotExist:
- pass
- if r is not None:
- if r.new_path == '':
- return http.HttpResponseGone()
- return http.HttpResponsePermanentRedirect(r.new_path)
-
- # No redirect was found. Return the response.
- return response
diff --git a/parts/django/django/contrib/redirects/models.py b/parts/django/django/contrib/redirects/models.py
deleted file mode 100644
index 4233d55..0000000
--- a/parts/django/django/contrib/redirects/models.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.db import models
-from django.contrib.sites.models import Site
-from django.utils.translation import ugettext_lazy as _
-
-class Redirect(models.Model):
- site = models.ForeignKey(Site)
- old_path = models.CharField(_('redirect from'), max_length=200, db_index=True,
- help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))
- new_path = models.CharField(_('redirect to'), max_length=200, blank=True,
- help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))
-
- class Meta:
- verbose_name = _('redirect')
- verbose_name_plural = _('redirects')
- db_table = 'django_redirect'
- unique_together=(('site', 'old_path'),)
- ordering = ('old_path',)
-
- def __unicode__(self):
- return "%s ---> %s" % (self.old_path, self.new_path)
diff --git a/parts/django/django/contrib/sessions/__init__.py b/parts/django/django/contrib/sessions/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/sessions/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/sessions/backends/__init__.py b/parts/django/django/contrib/sessions/backends/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/sessions/backends/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/sessions/backends/base.py b/parts/django/django/contrib/sessions/backends/base.py
deleted file mode 100644
index b4cdead..0000000
--- a/parts/django/django/contrib/sessions/backends/base.py
+++ /dev/null
@@ -1,287 +0,0 @@
-import base64
-import os
-import random
-import sys
-import time
-from datetime import datetime, timedelta
-try:
- import cPickle as pickle
-except ImportError:
- import pickle
-
-from django.conf import settings
-from django.core.exceptions import SuspiciousOperation
-from django.utils.hashcompat import md5_constructor
-
-# Use the system (hardware-based) random number generator if it exists.
-if hasattr(random, 'SystemRandom'):
- randrange = random.SystemRandom().randrange
-else:
- randrange = random.randrange
-MAX_SESSION_KEY = 18446744073709551616L # 2 << 63
-
-class CreateError(Exception):
- """
- Used internally as a consistent exception type to catch from save (see the
- docstring for SessionBase.save() for details).
- """
- pass
-
-class SessionBase(object):
- """
- Base class for all Session classes.
- """
- TEST_COOKIE_NAME = 'testcookie'
- TEST_COOKIE_VALUE = 'worked'
-
- def __init__(self, session_key=None):
- self._session_key = session_key
- self.accessed = False
- self.modified = False
-
- def __contains__(self, key):
- return key in self._session
-
- def __getitem__(self, key):
- return self._session[key]
-
- def __setitem__(self, key, value):
- self._session[key] = value
- self.modified = True
-
- def __delitem__(self, key):
- del self._session[key]
- self.modified = True
-
- def keys(self):
- return self._session.keys()
-
- def items(self):
- return self._session.items()
-
- def get(self, key, default=None):
- return self._session.get(key, default)
-
- def pop(self, key, *args):
- self.modified = self.modified or key in self._session
- return self._session.pop(key, *args)
-
- def setdefault(self, key, value):
- if key in self._session:
- return self._session[key]
- else:
- self.modified = True
- self._session[key] = value
- return value
-
- def set_test_cookie(self):
- self[self.TEST_COOKIE_NAME] = self.TEST_COOKIE_VALUE
-
- def test_cookie_worked(self):
- return self.get(self.TEST_COOKIE_NAME) == self.TEST_COOKIE_VALUE
-
- def delete_test_cookie(self):
- del self[self.TEST_COOKIE_NAME]
-
- def encode(self, session_dict):
- "Returns the given session dictionary pickled and encoded as a string."
- pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL)
- pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest()
- return base64.encodestring(pickled + pickled_md5)
-
- def decode(self, session_data):
- encoded_data = base64.decodestring(session_data)
- pickled, tamper_check = encoded_data[:-32], encoded_data[-32:]
- if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check:
- raise SuspiciousOperation("User tampered with session cookie.")
- try:
- return pickle.loads(pickled)
- # Unpickling can cause a variety of exceptions. If something happens,
- # just return an empty dictionary (an empty session).
- except:
- return {}
-
- def update(self, dict_):
- self._session.update(dict_)
- self.modified = True
-
- def has_key(self, key):
- return self._session.has_key(key)
-
- def values(self):
- return self._session.values()
-
- def iterkeys(self):
- return self._session.iterkeys()
-
- def itervalues(self):
- return self._session.itervalues()
-
- def iteritems(self):
- return self._session.iteritems()
-
- def clear(self):
- # To avoid unnecessary persistent storage accesses, we set up the
- # internals directly (loading data wastes time, since we are going to
- # set it to an empty dict anyway).
- self._session_cache = {}
- self.accessed = True
- self.modified = True
-
- def _get_new_session_key(self):
- "Returns session key that isn't being used."
- # The random module is seeded when this Apache child is created.
- # Use settings.SECRET_KEY as added salt.
- try:
- pid = os.getpid()
- except AttributeError:
- # No getpid() in Jython, for example
- pid = 1
- while 1:
- session_key = md5_constructor("%s%s%s%s"
- % (randrange(0, MAX_SESSION_KEY), pid, time.time(),
- settings.SECRET_KEY)).hexdigest()
- if not self.exists(session_key):
- break
- return session_key
-
- def _get_session_key(self):
- if self._session_key:
- return self._session_key
- else:
- self._session_key = self._get_new_session_key()
- return self._session_key
-
- def _set_session_key(self, session_key):
- self._session_key = session_key
-
- session_key = property(_get_session_key, _set_session_key)
-
- def _get_session(self, no_load=False):
- """
- Lazily loads session from storage (unless "no_load" is True, when only
- an empty dict is stored) and stores it in the current instance.
- """
- self.accessed = True
- try:
- return self._session_cache
- except AttributeError:
- if self._session_key is None or no_load:
- self._session_cache = {}
- else:
- self._session_cache = self.load()
- return self._session_cache
-
- _session = property(_get_session)
-
- def get_expiry_age(self):
- """Get the number of seconds until the session expires."""
- expiry = self.get('_session_expiry')
- if not expiry: # Checks both None and 0 cases
- return settings.SESSION_COOKIE_AGE
- if not isinstance(expiry, datetime):
- return expiry
- delta = expiry - datetime.now()
- return delta.days * 86400 + delta.seconds
-
- def get_expiry_date(self):
- """Get session the expiry date (as a datetime object)."""
- expiry = self.get('_session_expiry')
- if isinstance(expiry, datetime):
- return expiry
- if not expiry: # Checks both None and 0 cases
- expiry = settings.SESSION_COOKIE_AGE
- return datetime.now() + timedelta(seconds=expiry)
-
- def set_expiry(self, value):
- """
- Sets a custom expiration for the session. ``value`` can be an integer,
- a Python ``datetime`` or ``timedelta`` object or ``None``.
-
- If ``value`` is an integer, the session will expire after that many
- seconds of inactivity. If set to ``0`` then the session will expire on
- browser close.
-
- If ``value`` is a ``datetime`` or ``timedelta`` object, the session
- will expire at that specific future time.
-
- If ``value`` is ``None``, the session uses the global session expiry
- policy.
- """
- if value is None:
- # Remove any custom expiration for this session.
- try:
- del self['_session_expiry']
- except KeyError:
- pass
- return
- if isinstance(value, timedelta):
- value = datetime.now() + value
- self['_session_expiry'] = value
-
- def get_expire_at_browser_close(self):
- """
- Returns ``True`` if the session is set to expire when the browser
- closes, and ``False`` if there's an expiry date. Use
- ``get_expiry_date()`` or ``get_expiry_age()`` to find the actual expiry
- date/age, if there is one.
- """
- if self.get('_session_expiry') is None:
- return settings.SESSION_EXPIRE_AT_BROWSER_CLOSE
- return self.get('_session_expiry') == 0
-
- def flush(self):
- """
- Removes the current session data from the database and regenerates the
- key.
- """
- self.clear()
- self.delete()
- self.create()
-
- def cycle_key(self):
- """
- Creates a new session key, whilst retaining the current session data.
- """
- data = self._session_cache
- key = self.session_key
- self.create()
- self._session_cache = data
- self.delete(key)
-
- # Methods that child classes must implement.
-
- def exists(self, session_key):
- """
- Returns True if the given session_key already exists.
- """
- raise NotImplementedError
-
- def create(self):
- """
- Creates a new session instance. Guaranteed to create a new object with
- a unique key and will have saved the result once (with empty data)
- before the method returns.
- """
- raise NotImplementedError
-
- def save(self, must_create=False):
- """
- Saves the session data. If 'must_create' is True, a new session object
- is created (otherwise a CreateError exception is raised). Otherwise,
- save() can update an existing object with the same key.
- """
- raise NotImplementedError
-
- def delete(self, session_key=None):
- """
- Deletes the session data under this key. If the key is None, the
- current session key value is used.
- """
- raise NotImplementedError
-
- def load(self):
- """
- Loads the session data and returns a dictionary.
- """
- raise NotImplementedError
diff --git a/parts/django/django/contrib/sessions/backends/cache.py b/parts/django/django/contrib/sessions/backends/cache.py
deleted file mode 100644
index ab0716d..0000000
--- a/parts/django/django/contrib/sessions/backends/cache.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from django.contrib.sessions.backends.base import SessionBase, CreateError
-from django.core.cache import cache
-
-class SessionStore(SessionBase):
- """
- A cache-based session store.
- """
- def __init__(self, session_key=None):
- self._cache = cache
- super(SessionStore, self).__init__(session_key)
-
- def load(self):
- session_data = self._cache.get(self.session_key)
- if session_data is not None:
- return session_data
- self.create()
- return {}
-
- def create(self):
- # Because a cache can fail silently (e.g. memcache), we don't know if
- # we are failing to create a new session because of a key collision or
- # because the cache is missing. So we try for a (large) number of times
- # and then raise an exception. That's the risk you shoulder if using
- # cache backing.
- for i in xrange(10000):
- self.session_key = self._get_new_session_key()
- try:
- self.save(must_create=True)
- except CreateError:
- continue
- self.modified = True
- return
- raise RuntimeError("Unable to create a new session key.")
-
- def save(self, must_create=False):
- if must_create:
- func = self._cache.add
- else:
- func = self._cache.set
- result = func(self.session_key, self._get_session(no_load=must_create),
- self.get_expiry_age())
- if must_create and not result:
- raise CreateError
-
- def exists(self, session_key):
- if self._cache.has_key(session_key):
- return True
- return False
-
- def delete(self, session_key=None):
- if session_key is None:
- if self._session_key is None:
- return
- session_key = self._session_key
- self._cache.delete(session_key)
-
diff --git a/parts/django/django/contrib/sessions/backends/cached_db.py b/parts/django/django/contrib/sessions/backends/cached_db.py
deleted file mode 100644
index 9e22c69..0000000
--- a/parts/django/django/contrib/sessions/backends/cached_db.py
+++ /dev/null
@@ -1,42 +0,0 @@
-"""
-Cached, database-backed sessions.
-"""
-
-from django.conf import settings
-from django.contrib.sessions.backends.db import SessionStore as DBStore
-from django.core.cache import cache
-
-class SessionStore(DBStore):
- """
- Implements cached, database backed sessions.
- """
-
- def __init__(self, session_key=None):
- super(SessionStore, self).__init__(session_key)
-
- def load(self):
- data = cache.get(self.session_key, None)
- if data is None:
- data = super(SessionStore, self).load()
- cache.set(self.session_key, data, settings.SESSION_COOKIE_AGE)
- return data
-
- def exists(self, session_key):
- return super(SessionStore, self).exists(session_key)
-
- def save(self, must_create=False):
- super(SessionStore, self).save(must_create)
- cache.set(self.session_key, self._session, settings.SESSION_COOKIE_AGE)
-
- def delete(self, session_key=None):
- super(SessionStore, self).delete(session_key)
- cache.delete(session_key or self.session_key)
-
- def flush(self):
- """
- Removes the current session data from the database and regenerates the
- key.
- """
- self.clear()
- self.delete(self.session_key)
- self.create() \ No newline at end of file
diff --git a/parts/django/django/contrib/sessions/backends/db.py b/parts/django/django/contrib/sessions/backends/db.py
deleted file mode 100644
index 3328cc8..0000000
--- a/parts/django/django/contrib/sessions/backends/db.py
+++ /dev/null
@@ -1,78 +0,0 @@
-import datetime
-from django.conf import settings
-from django.contrib.sessions.models import Session
-from django.contrib.sessions.backends.base import SessionBase, CreateError
-from django.core.exceptions import SuspiciousOperation
-from django.db import IntegrityError, transaction, router
-from django.utils.encoding import force_unicode
-
-class SessionStore(SessionBase):
- """
- Implements database session store.
- """
- def __init__(self, session_key=None):
- super(SessionStore, self).__init__(session_key)
-
- def load(self):
- try:
- s = Session.objects.get(
- session_key = self.session_key,
- expire_date__gt=datetime.datetime.now()
- )
- return self.decode(force_unicode(s.session_data))
- except (Session.DoesNotExist, SuspiciousOperation):
- self.create()
- return {}
-
- def exists(self, session_key):
- try:
- Session.objects.get(session_key=session_key)
- except Session.DoesNotExist:
- return False
- return True
-
- def create(self):
- while True:
- self.session_key = self._get_new_session_key()
- try:
- # Save immediately to ensure we have a unique entry in the
- # database.
- self.save(must_create=True)
- except CreateError:
- # Key wasn't unique. Try again.
- continue
- self.modified = True
- self._session_cache = {}
- return
-
- def save(self, must_create=False):
- """
- Saves the current session data to the database. If 'must_create' is
- True, a database error will be raised if the saving operation doesn't
- create a *new* entry (as opposed to possibly updating an existing
- entry).
- """
- obj = Session(
- session_key = self.session_key,
- session_data = self.encode(self._get_session(no_load=must_create)),
- expire_date = self.get_expiry_date()
- )
- using = router.db_for_write(Session, instance=obj)
- sid = transaction.savepoint(using=using)
- try:
- obj.save(force_insert=must_create, using=using)
- except IntegrityError:
- if must_create:
- transaction.savepoint_rollback(sid, using=using)
- raise CreateError
- raise
-
- def delete(self, session_key=None):
- if session_key is None:
- if self._session_key is None:
- return
- session_key = self._session_key
- try:
- Session.objects.get(session_key=session_key).delete()
- except Session.DoesNotExist:
- pass
diff --git a/parts/django/django/contrib/sessions/backends/file.py b/parts/django/django/contrib/sessions/backends/file.py
deleted file mode 100644
index 3f63503..0000000
--- a/parts/django/django/contrib/sessions/backends/file.py
+++ /dev/null
@@ -1,147 +0,0 @@
-import errno
-import os
-import tempfile
-
-from django.conf import settings
-from django.contrib.sessions.backends.base import SessionBase, CreateError
-from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured
-
-
-class SessionStore(SessionBase):
- """
- Implements a file based session store.
- """
- def __init__(self, session_key=None):
- self.storage_path = getattr(settings, "SESSION_FILE_PATH", None)
- if not self.storage_path:
- self.storage_path = tempfile.gettempdir()
-
- # Make sure the storage path is valid.
- if not os.path.isdir(self.storage_path):
- raise ImproperlyConfigured(
- "The session storage path %r doesn't exist. Please set your"
- " SESSION_FILE_PATH setting to an existing directory in which"
- " Django can store session data." % self.storage_path)
-
- self.file_prefix = settings.SESSION_COOKIE_NAME
- super(SessionStore, self).__init__(session_key)
-
- def _key_to_file(self, session_key=None):
- """
- Get the file associated with this session key.
- """
- if session_key is None:
- session_key = self.session_key
-
- # Make sure we're not vulnerable to directory traversal. Session keys
- # should always be md5s, so they should never contain directory
- # components.
- if os.path.sep in session_key:
- raise SuspiciousOperation(
- "Invalid characters (directory components) in session key")
-
- return os.path.join(self.storage_path, self.file_prefix + session_key)
-
- def load(self):
- session_data = {}
- try:
- session_file = open(self._key_to_file(), "rb")
- try:
- file_data = session_file.read()
- # Don't fail if there is no data in the session file.
- # We may have opened the empty placeholder file.
- if file_data:
- try:
- session_data = self.decode(file_data)
- except (EOFError, SuspiciousOperation):
- self.create()
- finally:
- session_file.close()
- except IOError:
- pass
- return session_data
-
- def create(self):
- while True:
- self._session_key = self._get_new_session_key()
- try:
- self.save(must_create=True)
- except CreateError:
- continue
- self.modified = True
- self._session_cache = {}
- return
-
- def save(self, must_create=False):
- # Get the session data now, before we start messing
- # with the file it is stored within.
- session_data = self._get_session(no_load=must_create)
-
- session_file_name = self._key_to_file()
-
- try:
- # Make sure the file exists. If it does not already exist, an
- # empty placeholder file is created.
- flags = os.O_WRONLY | os.O_CREAT | getattr(os, 'O_BINARY', 0)
- if must_create:
- flags |= os.O_EXCL
- fd = os.open(session_file_name, flags)
- os.close(fd)
-
- except OSError, e:
- if must_create and e.errno == errno.EEXIST:
- raise CreateError
- raise
-
- # Write the session file without interfering with other threads
- # or processes. By writing to an atomically generated temporary
- # file and then using the atomic os.rename() to make the complete
- # file visible, we avoid having to lock the session file, while
- # still maintaining its integrity.
- #
- # Note: Locking the session file was explored, but rejected in part
- # because in order to be atomic and cross-platform, it required a
- # long-lived lock file for each session, doubling the number of
- # files in the session storage directory at any given time. This
- # rename solution is cleaner and avoids any additional overhead
- # when reading the session data, which is the more common case
- # unless SESSION_SAVE_EVERY_REQUEST = True.
- #
- # See ticket #8616.
- dir, prefix = os.path.split(session_file_name)
-
- try:
- output_file_fd, output_file_name = tempfile.mkstemp(dir=dir,
- prefix=prefix + '_out_')
- renamed = False
- try:
- try:
- os.write(output_file_fd, self.encode(session_data))
- finally:
- os.close(output_file_fd)
- os.rename(output_file_name, session_file_name)
- renamed = True
- finally:
- if not renamed:
- os.unlink(output_file_name)
-
- except (OSError, IOError, EOFError):
- pass
-
- def exists(self, session_key):
- if os.path.exists(self._key_to_file(session_key)):
- return True
- return False
-
- def delete(self, session_key=None):
- if session_key is None:
- if self._session_key is None:
- return
- session_key = self._session_key
- try:
- os.unlink(self._key_to_file(session_key))
- except OSError:
- pass
-
- def clean(self):
- pass
diff --git a/parts/django/django/contrib/sessions/middleware.py b/parts/django/django/contrib/sessions/middleware.py
deleted file mode 100644
index 57fcb90..0000000
--- a/parts/django/django/contrib/sessions/middleware.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import time
-
-from django.conf import settings
-from django.utils.cache import patch_vary_headers
-from django.utils.http import cookie_date
-from django.utils.importlib import import_module
-
-class SessionMiddleware(object):
- def process_request(self, request):
- engine = import_module(settings.SESSION_ENGINE)
- session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)
- request.session = engine.SessionStore(session_key)
-
- def process_response(self, request, response):
- """
- If request.session was modified, or if the configuration is to save the
- session every time, save the changes and set a session cookie.
- """
- try:
- accessed = request.session.accessed
- modified = request.session.modified
- except AttributeError:
- pass
- else:
- if accessed:
- patch_vary_headers(response, ('Cookie',))
- if modified or settings.SESSION_SAVE_EVERY_REQUEST:
- if request.session.get_expire_at_browser_close():
- max_age = None
- expires = None
- else:
- max_age = request.session.get_expiry_age()
- expires_time = time.time() + max_age
- expires = cookie_date(expires_time)
- # Save the session data and refresh the client cookie.
- request.session.save()
- response.set_cookie(settings.SESSION_COOKIE_NAME,
- request.session.session_key, max_age=max_age,
- expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
- path=settings.SESSION_COOKIE_PATH,
- secure=settings.SESSION_COOKIE_SECURE or None)
- return response
diff --git a/parts/django/django/contrib/sessions/models.py b/parts/django/django/contrib/sessions/models.py
deleted file mode 100644
index 4c76ddf..0000000
--- a/parts/django/django/contrib/sessions/models.py
+++ /dev/null
@@ -1,67 +0,0 @@
-import base64
-import cPickle as pickle
-
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-from django.conf import settings
-from django.utils.hashcompat import md5_constructor
-
-
-class SessionManager(models.Manager):
- def encode(self, session_dict):
- """
- Returns the given session dictionary pickled and encoded as a string.
- """
- pickled = pickle.dumps(session_dict)
- pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest()
- return base64.encodestring(pickled + pickled_md5)
-
- def save(self, session_key, session_dict, expire_date):
- s = self.model(session_key, self.encode(session_dict), expire_date)
- if session_dict:
- s.save()
- else:
- s.delete() # Clear sessions with no data.
- return s
-
-
-class Session(models.Model):
- """
- Django provides full support for anonymous sessions. The session
- framework lets you store and retrieve arbitrary data on a
- per-site-visitor basis. It stores data on the server side and
- abstracts the sending and receiving of cookies. Cookies contain a
- session ID -- not the data itself.
-
- The Django sessions framework is entirely cookie-based. It does
- not fall back to putting session IDs in URLs. This is an intentional
- design decision. Not only does that behavior make URLs ugly, it makes
- your site vulnerable to session-ID theft via the "Referer" header.
-
- For complete documentation on using Sessions in your code, consult
- the sessions documentation that is shipped with Django (also available
- on the Django Web site).
- """
- session_key = models.CharField(_('session key'), max_length=40,
- primary_key=True)
- session_data = models.TextField(_('session data'))
- expire_date = models.DateTimeField(_('expire date'))
- objects = SessionManager()
-
- class Meta:
- db_table = 'django_session'
- verbose_name = _('session')
- verbose_name_plural = _('sessions')
-
- def get_decoded(self):
- encoded_data = base64.decodestring(self.session_data)
- pickled, tamper_check = encoded_data[:-32], encoded_data[-32:]
- if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check:
- from django.core.exceptions import SuspiciousOperation
- raise SuspiciousOperation("User tampered with session cookie.")
- try:
- return pickle.loads(pickled)
- # Unpickling can cause a variety of exceptions. If something happens,
- # just return an empty dictionary (an empty session).
- except:
- return {}
diff --git a/parts/django/django/contrib/sessions/tests.py b/parts/django/django/contrib/sessions/tests.py
deleted file mode 100644
index f0a3c4e..0000000
--- a/parts/django/django/contrib/sessions/tests.py
+++ /dev/null
@@ -1,388 +0,0 @@
-r"""
-
->>> from django.conf import settings
->>> from django.contrib.sessions.backends.db import SessionStore as DatabaseSession
->>> from django.contrib.sessions.backends.cache import SessionStore as CacheSession
->>> from django.contrib.sessions.backends.cached_db import SessionStore as CacheDBSession
->>> from django.contrib.sessions.backends.file import SessionStore as FileSession
->>> from django.contrib.sessions.backends.base import SessionBase
->>> from django.contrib.sessions.models import Session
-
->>> db_session = DatabaseSession()
->>> db_session.modified
-False
->>> db_session.get('cat')
->>> db_session['cat'] = "dog"
->>> db_session.modified
-True
->>> db_session.pop('cat')
-'dog'
->>> db_session.pop('some key', 'does not exist')
-'does not exist'
->>> db_session.save()
->>> db_session.exists(db_session.session_key)
-True
->>> db_session.delete(db_session.session_key)
->>> db_session.exists(db_session.session_key)
-False
-
->>> db_session['foo'] = 'bar'
->>> db_session.save()
->>> db_session.exists(db_session.session_key)
-True
->>> prev_key = db_session.session_key
->>> db_session.flush()
->>> db_session.exists(prev_key)
-False
->>> db_session.session_key == prev_key
-False
->>> db_session.modified, db_session.accessed
-(True, True)
->>> db_session['a'], db_session['b'] = 'c', 'd'
->>> db_session.save()
->>> prev_key = db_session.session_key
->>> prev_data = db_session.items()
->>> db_session.cycle_key()
->>> db_session.session_key == prev_key
-False
->>> db_session.items() == prev_data
-True
-
-# Submitting an invalid session key (either by guessing, or if the db has
-# removed the key) results in a new key being generated.
->>> Session.objects.filter(pk=db_session.session_key).delete()
->>> db_session = DatabaseSession(db_session.session_key)
->>> db_session.save()
->>> DatabaseSession('1').get('cat')
-
-#
-# Cached DB session tests
-#
-
->>> cdb_session = CacheDBSession()
->>> cdb_session.modified
-False
->>> cdb_session['cat'] = "dog"
->>> cdb_session.modified
-True
->>> cdb_session.pop('cat')
-'dog'
->>> cdb_session.pop('some key', 'does not exist')
-'does not exist'
->>> cdb_session.save()
->>> cdb_session.exists(cdb_session.session_key)
-True
->>> cdb_session.delete(cdb_session.session_key)
->>> cdb_session.exists(cdb_session.session_key)
-False
-
-#
-# File session tests.
-#
-
-# Do file session tests in an isolated directory, and kill it after we're done.
->>> original_session_file_path = settings.SESSION_FILE_PATH
->>> import tempfile
->>> temp_session_store = settings.SESSION_FILE_PATH = tempfile.mkdtemp()
-
->>> file_session = FileSession()
->>> file_session.modified
-False
->>> file_session['cat'] = "dog"
->>> file_session.modified
-True
->>> file_session.pop('cat')
-'dog'
->>> file_session.pop('some key', 'does not exist')
-'does not exist'
->>> file_session.save()
->>> file_session.exists(file_session.session_key)
-True
->>> file_session.delete(file_session.session_key)
->>> file_session.exists(file_session.session_key)
-False
->>> FileSession('1').get('cat')
-
->>> file_session['foo'] = 'bar'
->>> file_session.save()
->>> file_session.exists(file_session.session_key)
-True
->>> prev_key = file_session.session_key
->>> file_session.flush()
->>> file_session.exists(prev_key)
-False
->>> file_session.session_key == prev_key
-False
->>> file_session.modified, file_session.accessed
-(True, True)
->>> file_session['a'], file_session['b'] = 'c', 'd'
->>> file_session.save()
->>> prev_key = file_session.session_key
->>> prev_data = file_session.items()
->>> file_session.cycle_key()
->>> file_session.session_key == prev_key
-False
->>> file_session.items() == prev_data
-True
-
->>> Session.objects.filter(pk=file_session.session_key).delete()
->>> file_session = FileSession(file_session.session_key)
->>> file_session.save()
-
-# Make sure the file backend checks for a good storage dir
->>> settings.SESSION_FILE_PATH = "/if/this/directory/exists/you/have/a/weird/computer"
->>> FileSession()
-Traceback (innermost last):
- ...
-ImproperlyConfigured: The session storage path '/if/this/directory/exists/you/have/a/weird/computer' doesn't exist. Please set your SESSION_FILE_PATH setting to an existing directory in which Django can store session data.
-
-# Clean up after the file tests
->>> settings.SESSION_FILE_PATH = original_session_file_path
->>> import shutil
->>> shutil.rmtree(temp_session_store)
-
-#
-# Cache-based tests
-# NB: be careful to delete any sessions created; stale sessions fill up the
-# /tmp and eventually overwhelm it after lots of runs (think buildbots)
-#
-
->>> cache_session = CacheSession()
->>> cache_session.modified
-False
->>> cache_session['cat'] = "dog"
->>> cache_session.modified
-True
->>> cache_session.pop('cat')
-'dog'
->>> cache_session.pop('some key', 'does not exist')
-'does not exist'
->>> cache_session.save()
->>> cache_session.delete(cache_session.session_key)
->>> cache_session.exists(cache_session.session_key)
-False
->>> cache_session['foo'] = 'bar'
->>> cache_session.save()
->>> cache_session.exists(cache_session.session_key)
-True
->>> prev_key = cache_session.session_key
->>> cache_session.flush()
->>> cache_session.exists(prev_key)
-False
->>> cache_session.session_key == prev_key
-False
->>> cache_session.modified, cache_session.accessed
-(True, True)
->>> cache_session['a'], cache_session['b'] = 'c', 'd'
->>> cache_session.save()
->>> prev_key = cache_session.session_key
->>> prev_data = cache_session.items()
->>> cache_session.cycle_key()
->>> cache_session.session_key == prev_key
-False
->>> cache_session.items() == prev_data
-True
->>> cache_session = CacheSession()
->>> cache_session.save()
->>> key = cache_session.session_key
->>> cache_session.exists(key)
-True
-
->>> Session.objects.filter(pk=cache_session.session_key).delete()
->>> cache_session = CacheSession(cache_session.session_key)
->>> cache_session.save()
->>> cache_session.delete(cache_session.session_key)
-
->>> s = SessionBase()
->>> s._session['some key'] = 'exists' # Pre-populate the session with some data
->>> s.accessed = False # Reset to pretend this wasn't accessed previously
-
->>> s.accessed, s.modified
-(False, False)
-
->>> s.pop('non existant key', 'does not exist')
-'does not exist'
->>> s.accessed, s.modified
-(True, False)
-
->>> s.setdefault('foo', 'bar')
-'bar'
->>> s.setdefault('foo', 'baz')
-'bar'
-
->>> s.accessed = False # Reset the accessed flag
-
->>> s.pop('some key')
-'exists'
->>> s.accessed, s.modified
-(True, True)
-
->>> s.pop('some key', 'does not exist')
-'does not exist'
-
-
->>> s.get('update key', None)
-
-# test .update()
->>> s.modified = s.accessed = False # Reset to pretend this wasn't accessed previously
->>> s.update({'update key':1})
->>> s.accessed, s.modified
-(True, True)
->>> s.get('update key', None)
-1
-
-# test .has_key()
->>> s.modified = s.accessed = False # Reset to pretend this wasn't accessed previously
->>> s.has_key('update key')
-True
->>> s.accessed, s.modified
-(True, False)
-
-# test .values()
->>> s = SessionBase()
->>> s.values()
-[]
->>> s.accessed
-True
->>> s['x'] = 1
->>> s.values()
-[1]
-
-# test .iterkeys()
->>> s.accessed = False
->>> i = s.iterkeys()
->>> hasattr(i,'__iter__')
-True
->>> s.accessed
-True
->>> list(i)
-['x']
-
-# test .itervalues()
->>> s.accessed = False
->>> i = s.itervalues()
->>> hasattr(i,'__iter__')
-True
->>> s.accessed
-True
->>> list(i)
-[1]
-
-# test .iteritems()
->>> s.accessed = False
->>> i = s.iteritems()
->>> hasattr(i,'__iter__')
-True
->>> s.accessed
-True
->>> list(i)
-[('x', 1)]
-
-# test .clear()
->>> s.modified = s.accessed = False
->>> s.items()
-[('x', 1)]
->>> s.clear()
->>> s.items()
-[]
->>> s.accessed, s.modified
-(True, True)
-
-#########################
-# Custom session expiry #
-#########################
-
->>> from django.conf import settings
->>> from datetime import datetime, timedelta
-
->>> td10 = timedelta(seconds=10)
-
-# A normal session has a max age equal to settings
->>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
-True
-
-# So does a custom session with an idle expiration time of 0 (but it'll expire
-# at browser close)
->>> s.set_expiry(0)
->>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
-True
-
-# Custom session idle expiration time
->>> s.set_expiry(10)
->>> delta = s.get_expiry_date() - datetime.now()
->>> delta.seconds in (9, 10)
-True
->>> age = s.get_expiry_age()
->>> age in (9, 10)
-True
-
-# Custom session fixed expiry date (timedelta)
->>> s.set_expiry(td10)
->>> delta = s.get_expiry_date() - datetime.now()
->>> delta.seconds in (9, 10)
-True
->>> age = s.get_expiry_age()
->>> age in (9, 10)
-True
-
-# Custom session fixed expiry date (fixed datetime)
->>> s.set_expiry(datetime.now() + td10)
->>> delta = s.get_expiry_date() - datetime.now()
->>> delta.seconds in (9, 10)
-True
->>> age = s.get_expiry_age()
->>> age in (9, 10)
-True
-
-# Set back to default session age
->>> s.set_expiry(None)
->>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
-True
-
-# Allow to set back to default session age even if no alternate has been set
->>> s.set_expiry(None)
-
-
-# We're changing the setting then reverting back to the original setting at the
-# end of these tests.
->>> original_expire_at_browser_close = settings.SESSION_EXPIRE_AT_BROWSER_CLOSE
->>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False
-
-# Custom session age
->>> s.set_expiry(10)
->>> s.get_expire_at_browser_close()
-False
-
-# Custom expire-at-browser-close
->>> s.set_expiry(0)
->>> s.get_expire_at_browser_close()
-True
-
-# Default session age
->>> s.set_expiry(None)
->>> s.get_expire_at_browser_close()
-False
-
->>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = True
-
-# Custom session age
->>> s.set_expiry(10)
->>> s.get_expire_at_browser_close()
-False
-
-# Custom expire-at-browser-close
->>> s.set_expiry(0)
->>> s.get_expire_at_browser_close()
-True
-
-# Default session age
->>> s.set_expiry(None)
->>> s.get_expire_at_browser_close()
-True
-
->>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = original_expire_at_browser_close
-"""
-
-if __name__ == '__main__':
- import doctest
- doctest.testmod()
diff --git a/parts/django/django/contrib/sitemaps/__init__.py b/parts/django/django/contrib/sitemaps/__init__.py
deleted file mode 100644
index 6b8d5a0..0000000
--- a/parts/django/django/contrib/sitemaps/__init__.py
+++ /dev/null
@@ -1,109 +0,0 @@
-from django.contrib.sites.models import Site, get_current_site
-from django.core import urlresolvers, paginator
-from django.core.exceptions import ImproperlyConfigured
-import urllib
-
-PING_URL = "http://www.google.com/webmasters/tools/ping"
-
-class SitemapNotFound(Exception):
- pass
-
-def ping_google(sitemap_url=None, ping_url=PING_URL):
- """
- Alerts Google that the sitemap for the current site has been updated.
- If sitemap_url is provided, it should be an absolute path to the sitemap
- for this site -- e.g., '/sitemap.xml'. If sitemap_url is not provided, this
- function will attempt to deduce it by using urlresolvers.reverse().
- """
- if sitemap_url is None:
- try:
- # First, try to get the "index" sitemap URL.
- sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.index')
- except urlresolvers.NoReverseMatch:
- try:
- # Next, try for the "global" sitemap URL.
- sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.sitemap')
- except urlresolvers.NoReverseMatch:
- pass
-
- if sitemap_url is None:
- raise SitemapNotFound("You didn't provide a sitemap_url, and the sitemap URL couldn't be auto-detected.")
-
- from django.contrib.sites.models import Site
- current_site = Site.objects.get_current()
- url = "http://%s%s" % (current_site.domain, sitemap_url)
- params = urllib.urlencode({'sitemap':url})
- urllib.urlopen("%s?%s" % (ping_url, params))
-
-class Sitemap(object):
- # This limit is defined by Google. See the index documentation at
- # http://sitemaps.org/protocol.php#index.
- limit = 50000
-
- def __get(self, name, obj, default=None):
- try:
- attr = getattr(self, name)
- except AttributeError:
- return default
- if callable(attr):
- return attr(obj)
- return attr
-
- def items(self):
- return []
-
- def location(self, obj):
- return obj.get_absolute_url()
-
- def _get_paginator(self):
- if not hasattr(self, "_paginator"):
- self._paginator = paginator.Paginator(self.items(), self.limit)
- return self._paginator
- paginator = property(_get_paginator)
-
- def get_urls(self, page=1, site=None):
- if site is None:
- if Site._meta.installed:
- try:
- site = Site.objects.get_current()
- except Site.DoesNotExist:
- pass
- if site is None:
- raise ImproperlyConfigured("In order to use Sitemaps you must either use the sites framework or pass in a Site or RequestSite object in your view code.")
-
- urls = []
- for item in self.paginator.page(page).object_list:
- loc = "http://%s%s" % (site.domain, self.__get('location', item))
- priority = self.__get('priority', item, None)
- url_info = {
- 'location': loc,
- 'lastmod': self.__get('lastmod', item, None),
- 'changefreq': self.__get('changefreq', item, None),
- 'priority': str(priority is not None and priority or '')
- }
- urls.append(url_info)
- return urls
-
-class FlatPageSitemap(Sitemap):
- def items(self):
- current_site = Site.objects.get_current()
- return current_site.flatpage_set.filter(registration_required=False)
-
-class GenericSitemap(Sitemap):
- priority = None
- changefreq = None
-
- def __init__(self, info_dict, priority=None, changefreq=None):
- self.queryset = info_dict['queryset']
- self.date_field = info_dict.get('date_field', None)
- self.priority = priority
- self.changefreq = changefreq
-
- def items(self):
- # Make sure to return a clone; we don't want premature evaluation.
- return self.queryset.filter()
-
- def lastmod(self, item):
- if self.date_field is not None:
- return getattr(item, self.date_field)
- return None
diff --git a/parts/django/django/contrib/sitemaps/management/__init__.py b/parts/django/django/contrib/sitemaps/management/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/sitemaps/management/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/sitemaps/management/commands/__init__.py b/parts/django/django/contrib/sitemaps/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/sitemaps/management/commands/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/sitemaps/management/commands/ping_google.py b/parts/django/django/contrib/sitemaps/management/commands/ping_google.py
deleted file mode 100644
index 7fa1690..0000000
--- a/parts/django/django/contrib/sitemaps/management/commands/ping_google.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.core.management.base import BaseCommand
-from django.contrib.sitemaps import ping_google
-
-
-class Command(BaseCommand):
- help = "Ping Google with an updated sitemap, pass optional url of sitemap"
-
- def execute(self, *args, **options):
- if len(args) == 1:
- sitemap_url = args[0]
- else:
- sitemap_url = None
- ping_google(sitemap_url=sitemap_url)
-
diff --git a/parts/django/django/contrib/sitemaps/models.py b/parts/django/django/contrib/sitemaps/models.py
deleted file mode 100644
index 7ff128f..0000000
--- a/parts/django/django/contrib/sitemaps/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# This file intentionally left blank \ No newline at end of file
diff --git a/parts/django/django/contrib/sitemaps/templates/sitemap.xml b/parts/django/django/contrib/sitemaps/templates/sitemap.xml
deleted file mode 100644
index 30ca3c0..0000000
--- a/parts/django/django/contrib/sitemaps/templates/sitemap.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-{% spaceless %}
-{% for url in urlset %}
- <url>
- <loc>{{ url.location }}</loc>
- {% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
- {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
- {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
- </url>
-{% endfor %}
-{% endspaceless %}
-</urlset>
diff --git a/parts/django/django/contrib/sitemaps/templates/sitemap_index.xml b/parts/django/django/contrib/sitemaps/templates/sitemap_index.xml
deleted file mode 100644
index f19e622..0000000
--- a/parts/django/django/contrib/sitemaps/templates/sitemap_index.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-{% for location in sitemaps %}<sitemap><loc>{{ location }}</loc></sitemap>{% endfor %}
-</sitemapindex>
diff --git a/parts/django/django/contrib/sitemaps/tests/__init__.py b/parts/django/django/contrib/sitemaps/tests/__init__.py
deleted file mode 100644
index c5b483c..0000000
--- a/parts/django/django/contrib/sitemaps/tests/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from django.contrib.sitemaps.tests.basic import *
diff --git a/parts/django/django/contrib/sitemaps/tests/basic.py b/parts/django/django/contrib/sitemaps/tests/basic.py
deleted file mode 100644
index a47f4d8..0000000
--- a/parts/django/django/contrib/sitemaps/tests/basic.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from datetime import date
-from django.conf import settings
-from django.contrib.auth.models import User
-from django.contrib.sitemaps import Sitemap
-from django.contrib.sites.models import Site
-from django.core.exceptions import ImproperlyConfigured
-from django.test import TestCase
-from django.utils.formats import localize
-from django.utils.translation import activate, deactivate
-
-
-class SitemapTests(TestCase):
- urls = 'django.contrib.sitemaps.tests.urls'
-
- def setUp(self):
- self.old_USE_L10N = settings.USE_L10N
- self.old_Site_meta_installed = Site._meta.installed
- # Create a user that will double as sitemap content
- User.objects.create_user('testuser', 'test@example.com', 's3krit')
-
- def tearDown(self):
- settings.USE_L10N = self.old_USE_L10N
- Site._meta.installed = self.old_Site_meta_installed
-
- def test_simple_sitemap(self):
- "A simple sitemap can be rendered"
- # Retrieve the sitemap.
- response = self.client.get('/simple/sitemap.xml')
- # Check for all the important bits:
- self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-<url><loc>http://example.com/location/</loc><lastmod>%s</lastmod><changefreq>never</changefreq><priority>0.5</priority></url>
-</urlset>
-""" % date.today().strftime('%Y-%m-%d'))
-
- if settings.USE_I18N:
- def test_localized_priority(self):
- "The priority value should not be localized (Refs #14164)"
- # Localization should be active
- settings.USE_L10N = True
- activate('fr')
- self.assertEqual(u'0,3', localize(0.3))
-
- # Retrieve the sitemap. Check that priorities
- # haven't been rendered in localized format
- response = self.client.get('/simple/sitemap.xml')
- self.assertContains(response, '<priority>0.5</priority>')
- self.assertContains(response, '<lastmod>%s</lastmod>' % date.today().strftime('%Y-%m-%d'))
- deactivate()
-
- def test_generic_sitemap(self):
- "A minimal generic sitemap can be rendered"
- # Retrieve the sitemap.
- response = self.client.get('/generic/sitemap.xml')
-
- expected = ''
- for username in User.objects.values_list("username", flat=True):
- expected += "<url><loc>http://example.com/users/%s/</loc></url>" %username
- # Check for all the important bits:
- self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-%s
-</urlset>
-""" %expected)
-
- if "django.contrib.flatpages" in settings.INSTALLED_APPS:
- def test_flatpage_sitemap(self):
- "Basic FlatPage sitemap test"
-
- # Import FlatPage inside the test so that when django.contrib.flatpages
- # is not installed we don't get problems trying to delete Site
- # objects (FlatPage has an M2M to Site, Site.delete() tries to
- # delete related objects, but the M2M table doesn't exist.
- from django.contrib.flatpages.models import FlatPage
-
- public = FlatPage.objects.create(
- url=u'/public/',
- title=u'Public Page',
- enable_comments=True,
- registration_required=False,
- )
- public.sites.add(settings.SITE_ID)
- private = FlatPage.objects.create(
- url=u'/private/',
- title=u'Private Page',
- enable_comments=True,
- registration_required=True
- )
- private.sites.add(settings.SITE_ID)
- response = self.client.get('/flatpages/sitemap.xml')
- # Public flatpage should be in the sitemap
- self.assertContains(response, '<loc>http://example.com%s</loc>' % public.url)
- # Private flatpage should not be in the sitemap
- self.assertNotContains(response, '<loc>http://example.com%s</loc>' % private.url)
-
- def test_requestsite_sitemap(self):
- # Make sure hitting the flatpages sitemap without the sites framework
- # installed doesn't raise an exception
- Site._meta.installed = False
- # Retrieve the sitemap.
- response = self.client.get('/simple/sitemap.xml')
- # Check for all the important bits:
- self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-<url><loc>http://testserver/location/</loc><lastmod>%s</lastmod><changefreq>never</changefreq><priority>0.5</priority></url>
-</urlset>
-""" % date.today().strftime('%Y-%m-%d'))
-
- def test_sitemap_get_urls_no_site_1(self):
- """
- Check we get ImproperlyConfigured if we don't pass a site object to
- Sitemap.get_urls and no Site objects exist
- """
- Site._meta.installed = True
- Site.objects.all().delete()
- self.assertRaises(ImproperlyConfigured, Sitemap().get_urls)
-
- def test_sitemap_get_urls_no_site_2(self):
- """
- Check we get ImproperlyConfigured when we don't pass a site object to
- Sitemap.get_urls if Site objects exists, but the sites framework is not
- actually installed.
- """
- Site.objects.get_current()
- Site._meta.installed = False
- self.assertRaises(ImproperlyConfigured, Sitemap().get_urls)
diff --git a/parts/django/django/contrib/sitemaps/tests/urls.py b/parts/django/django/contrib/sitemaps/tests/urls.py
deleted file mode 100644
index 6cdba36..0000000
--- a/parts/django/django/contrib/sitemaps/tests/urls.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from datetime import datetime
-from django.conf.urls.defaults import *
-from django.contrib.sitemaps import Sitemap, GenericSitemap, FlatPageSitemap
-from django.contrib.auth.models import User
-
-class SimpleSitemap(Sitemap):
- changefreq = "never"
- priority = 0.5
- location = '/location/'
- lastmod = datetime.now()
-
- def items(self):
- return [object()]
-
-simple_sitemaps = {
- 'simple': SimpleSitemap,
-}
-
-generic_sitemaps = {
- 'generic': GenericSitemap({
- 'queryset': User.objects.all()
- }),
-}
-
-flatpage_sitemaps = {
- 'flatpages': FlatPageSitemap,
-}
-
-urlpatterns = patterns('django.contrib.sitemaps.views',
- (r'^simple/sitemap\.xml$', 'sitemap', {'sitemaps': simple_sitemaps}),
- (r'^generic/sitemap\.xml$', 'sitemap', {'sitemaps': generic_sitemaps}),
- (r'^flatpages/sitemap\.xml$', 'sitemap', {'sitemaps': flatpage_sitemaps}),
-)
diff --git a/parts/django/django/contrib/sitemaps/views.py b/parts/django/django/contrib/sitemaps/views.py
deleted file mode 100644
index b7a96e1..0000000
--- a/parts/django/django/contrib/sitemaps/views.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from django.http import HttpResponse, Http404
-from django.template import loader
-from django.contrib.sites.models import get_current_site
-from django.core import urlresolvers
-from django.utils.encoding import smart_str
-from django.core.paginator import EmptyPage, PageNotAnInteger
-
-def index(request, sitemaps):
- current_site = get_current_site(request)
- sites = []
- protocol = request.is_secure() and 'https' or 'http'
- for section, site in sitemaps.items():
- site.request = request
- if callable(site):
- pages = site().paginator.num_pages
- else:
- pages = site.paginator.num_pages
- sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.sitemap', kwargs={'section': section})
- sites.append('%s://%s%s' % (protocol, current_site.domain, sitemap_url))
- if pages > 1:
- for page in range(2, pages+1):
- sites.append('%s://%s%s?p=%s' % (protocol, current_site.domain, sitemap_url, page))
- xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
- return HttpResponse(xml, mimetype='application/xml')
-
-def sitemap(request, sitemaps, section=None):
- maps, urls = [], []
- if section is not None:
- if section not in sitemaps:
- raise Http404("No sitemap available for section: %r" % section)
- maps.append(sitemaps[section])
- else:
- maps = sitemaps.values()
- page = request.GET.get("p", 1)
- current_site = get_current_site(request)
- for site in maps:
- try:
- if callable(site):
- urls.extend(site().get_urls(page=page, site=current_site))
- else:
- urls.extend(site.get_urls(page=page, site=current_site))
- except EmptyPage:
- raise Http404("Page %s empty" % page)
- except PageNotAnInteger:
- raise Http404("No page '%s'" % page)
- xml = smart_str(loader.render_to_string('sitemap.xml', {'urlset': urls}))
- return HttpResponse(xml, mimetype='application/xml')
diff --git a/parts/django/django/contrib/sites/__init__.py b/parts/django/django/contrib/sites/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/sites/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/sites/admin.py b/parts/django/django/contrib/sites/admin.py
deleted file mode 100644
index 2442c24..0000000
--- a/parts/django/django/contrib/sites/admin.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.contrib import admin
-from django.contrib.sites.models import Site
-
-
-class SiteAdmin(admin.ModelAdmin):
- list_display = ('domain', 'name')
- search_fields = ('domain', 'name')
-
-admin.site.register(Site, SiteAdmin) \ No newline at end of file
diff --git a/parts/django/django/contrib/sites/management.py b/parts/django/django/contrib/sites/management.py
deleted file mode 100644
index 1987274..0000000
--- a/parts/django/django/contrib/sites/management.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-Creates the default Site object.
-"""
-
-from django.db.models import signals
-from django.contrib.sites.models import Site
-from django.contrib.sites import models as site_app
-
-def create_default_site(app, created_models, verbosity, db, **kwargs):
- if Site in created_models:
- if verbosity >= 2:
- print "Creating example.com Site object"
- s = Site(domain="example.com", name="example.com")
- s.save(using=db)
- Site.objects.clear_cache()
-
-signals.post_syncdb.connect(create_default_site, sender=site_app)
diff --git a/parts/django/django/contrib/sites/managers.py b/parts/django/django/contrib/sites/managers.py
deleted file mode 100644
index 3df485a..0000000
--- a/parts/django/django/contrib/sites/managers.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from django.conf import settings
-from django.db import models
-from django.db.models.fields import FieldDoesNotExist
-
-class CurrentSiteManager(models.Manager):
- "Use this to limit objects to those associated with the current site."
- def __init__(self, field_name=None):
- super(CurrentSiteManager, self).__init__()
- self.__field_name = field_name
- self.__is_validated = False
-
- def _validate_field_name(self):
- field_names = self.model._meta.get_all_field_names()
-
- # If a custom name is provided, make sure the field exists on the model
- if self.__field_name is not None and self.__field_name not in field_names:
- raise ValueError("%s couldn't find a field named %s in %s." % \
- (self.__class__.__name__, self.__field_name, self.model._meta.object_name))
-
- # Otherwise, see if there is a field called either 'site' or 'sites'
- else:
- for potential_name in ['site', 'sites']:
- if potential_name in field_names:
- self.__field_name = potential_name
- self.__is_validated = True
- break
-
- # Now do a type check on the field (FK or M2M only)
- try:
- field = self.model._meta.get_field(self.__field_name)
- if not isinstance(field, (models.ForeignKey, models.ManyToManyField)):
- raise TypeError("%s must be a ForeignKey or ManyToManyField." %self.__field_name)
- except FieldDoesNotExist:
- raise ValueError("%s couldn't find a field named %s in %s." % \
- (self.__class__.__name__, self.__field_name, self.model._meta.object_name))
- self.__is_validated = True
-
- def get_query_set(self):
- if not self.__is_validated:
- self._validate_field_name()
- return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
diff --git a/parts/django/django/contrib/sites/models.py b/parts/django/django/contrib/sites/models.py
deleted file mode 100644
index fecbff7..0000000
--- a/parts/django/django/contrib/sites/models.py
+++ /dev/null
@@ -1,95 +0,0 @@
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-
-
-SITE_CACHE = {}
-
-
-class SiteManager(models.Manager):
-
- def get_current(self):
- """
- Returns the current ``Site`` based on the SITE_ID in the
- project's settings. The ``Site`` object is cached the first
- time it's retrieved from the database.
- """
- from django.conf import settings
- try:
- sid = settings.SITE_ID
- except AttributeError:
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("You're using the Django \"sites framework\" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.")
- try:
- current_site = SITE_CACHE[sid]
- except KeyError:
- current_site = self.get(pk=sid)
- SITE_CACHE[sid] = current_site
- return current_site
-
- def clear_cache(self):
- """Clears the ``Site`` object cache."""
- global SITE_CACHE
- SITE_CACHE = {}
-
-
-class Site(models.Model):
-
- domain = models.CharField(_('domain name'), max_length=100)
- name = models.CharField(_('display name'), max_length=50)
- objects = SiteManager()
-
- class Meta:
- db_table = 'django_site'
- verbose_name = _('site')
- verbose_name_plural = _('sites')
- ordering = ('domain',)
-
- def __unicode__(self):
- return self.domain
-
- def save(self, *args, **kwargs):
- super(Site, self).save(*args, **kwargs)
- # Cached information will likely be incorrect now.
- if self.id in SITE_CACHE:
- del SITE_CACHE[self.id]
-
- def delete(self):
- pk = self.pk
- super(Site, self).delete()
- try:
- del SITE_CACHE[pk]
- except KeyError:
- pass
-
-
-class RequestSite(object):
- """
- A class that shares the primary interface of Site (i.e., it has
- ``domain`` and ``name`` attributes) but gets its data from a Django
- HttpRequest object rather than from a database.
-
- The save() and delete() methods raise NotImplementedError.
- """
- def __init__(self, request):
- self.domain = self.name = request.get_host()
-
- def __unicode__(self):
- return self.domain
-
- def save(self, force_insert=False, force_update=False):
- raise NotImplementedError('RequestSite cannot be saved.')
-
- def delete(self):
- raise NotImplementedError('RequestSite cannot be deleted.')
-
-
-def get_current_site(request):
- """
- Checks if contrib.sites is installed and returns either the current
- ``Site`` object or a ``RequestSite`` object based on the request.
- """
- if Site._meta.installed:
- current_site = Site.objects.get_current()
- else:
- current_site = RequestSite(request)
- return current_site
diff --git a/parts/django/django/contrib/sites/tests.py b/parts/django/django/contrib/sites/tests.py
deleted file mode 100644
index 85cb53c..0000000
--- a/parts/django/django/contrib/sites/tests.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from django.conf import settings
-from django.contrib.sites.models import Site, RequestSite, get_current_site
-from django.core.exceptions import ObjectDoesNotExist
-from django.http import HttpRequest
-from django.test import TestCase
-
-
-class SitesFrameworkTests(TestCase):
-
- def setUp(self):
- Site(id=settings.SITE_ID, domain="example.com", name="example.com").save()
- self.old_Site_meta_installed = Site._meta.installed
- Site._meta.installed = True
-
- def tearDown(self):
- Site._meta.installed = self.old_Site_meta_installed
-
- def test_site_manager(self):
- # Make sure that get_current() does not return a deleted Site object.
- s = Site.objects.get_current()
- self.assert_(isinstance(s, Site))
- s.delete()
- self.assertRaises(ObjectDoesNotExist, Site.objects.get_current)
-
- def test_site_cache(self):
- # After updating a Site object (e.g. via the admin), we shouldn't return a
- # bogus value from the SITE_CACHE.
- site = Site.objects.get_current()
- self.assertEqual(u"example.com", site.name)
- s2 = Site.objects.get(id=settings.SITE_ID)
- s2.name = "Example site"
- s2.save()
- site = Site.objects.get_current()
- self.assertEqual(u"Example site", site.name)
-
- def test_get_current_site(self):
- # Test that the correct Site object is returned
- request = HttpRequest()
- request.META = {
- "SERVER_NAME": "example.com",
- "SERVER_PORT": "80",
- }
- site = get_current_site(request)
- self.assert_(isinstance(site, Site))
- self.assertEqual(site.id, settings.SITE_ID)
-
- # Test that an exception is raised if the sites framework is installed
- # but there is no matching Site
- site.delete()
- self.assertRaises(ObjectDoesNotExist, get_current_site, request)
-
- # A RequestSite is returned if the sites framework is not installed
- Site._meta.installed = False
- site = get_current_site(request)
- self.assert_(isinstance(site, RequestSite))
- self.assertEqual(site.name, u"example.com")
diff --git a/parts/django/django/contrib/syndication/__init__.py b/parts/django/django/contrib/syndication/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/syndication/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/syndication/feeds.py b/parts/django/django/contrib/syndication/feeds.py
deleted file mode 100644
index e4e99da..0000000
--- a/parts/django/django/contrib/syndication/feeds.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from django.contrib.syndication import views
-from django.core.exceptions import ObjectDoesNotExist
-import warnings
-
-# This is part of the deprecated API
-from django.contrib.syndication.views import FeedDoesNotExist, add_domain
-
-class Feed(views.Feed):
- """Provided for backwards compatibility."""
- def __init__(self, slug, request):
- warnings.warn('The syndication feeds.Feed class is deprecated. Please '
- 'use the new class based view API.',
- category=PendingDeprecationWarning)
-
- self.slug = slug
- self.request = request
- self.feed_url = getattr(self, 'feed_url', None) or request.path
- self.title_template = self.title_template or ('feeds/%s_title.html' % slug)
- self.description_template = self.description_template or ('feeds/%s_description.html' % slug)
-
- def get_object(self, bits):
- return None
-
- def get_feed(self, url=None):
- """
- Returns a feedgenerator.DefaultFeed object, fully populated, for
- this feed. Raises FeedDoesNotExist for invalid parameters.
- """
- if url:
- bits = url.split('/')
- else:
- bits = []
- try:
- obj = self.get_object(bits)
- except ObjectDoesNotExist:
- raise FeedDoesNotExist
- return super(Feed, self).get_feed(obj, self.request)
-
diff --git a/parts/django/django/contrib/syndication/views.py b/parts/django/django/contrib/syndication/views.py
deleted file mode 100644
index d942b2f..0000000
--- a/parts/django/django/contrib/syndication/views.py
+++ /dev/null
@@ -1,217 +0,0 @@
-import datetime
-from django.conf import settings
-from django.contrib.sites.models import get_current_site
-from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
-from django.http import HttpResponse, Http404
-from django.template import loader, Template, TemplateDoesNotExist, RequestContext
-from django.utils import feedgenerator, tzinfo
-from django.utils.encoding import force_unicode, iri_to_uri, smart_unicode
-from django.utils.html import escape
-
-def add_domain(domain, url, secure=False):
- if not (url.startswith('http://')
- or url.startswith('https://')
- or url.startswith('mailto:')):
- # 'url' must already be ASCII and URL-quoted, so no need for encoding
- # conversions here.
- if secure:
- protocol = 'https'
- else:
- protocol = 'http'
- url = iri_to_uri(u'%s://%s%s' % (protocol, domain, url))
- return url
-
-class FeedDoesNotExist(ObjectDoesNotExist):
- pass
-
-
-class Feed(object):
- feed_type = feedgenerator.DefaultFeed
- title_template = None
- description_template = None
-
- def __call__(self, request, *args, **kwargs):
- try:
- obj = self.get_object(request, *args, **kwargs)
- except ObjectDoesNotExist:
- raise Http404('Feed object does not exist.')
- feedgen = self.get_feed(obj, request)
- response = HttpResponse(mimetype=feedgen.mime_type)
- feedgen.write(response, 'utf-8')
- return response
-
- def item_title(self, item):
- # Titles should be double escaped by default (see #6533)
- return escape(force_unicode(item))
-
- def item_description(self, item):
- return force_unicode(item)
-
- def item_link(self, item):
- try:
- return item.get_absolute_url()
- except AttributeError:
- raise ImproperlyConfigured('Give your %s class a get_absolute_url() method, or define an item_link() method in your Feed class.' % item.__class__.__name__)
-
- def __get_dynamic_attr(self, attname, obj, default=None):
- try:
- attr = getattr(self, attname)
- except AttributeError:
- return default
- if callable(attr):
- # Check func_code.co_argcount rather than try/excepting the
- # function and catching the TypeError, because something inside
- # the function may raise the TypeError. This technique is more
- # accurate.
- if hasattr(attr, 'func_code'):
- argcount = attr.func_code.co_argcount
- else:
- argcount = attr.__call__.func_code.co_argcount
- if argcount == 2: # one argument is 'self'
- return attr(obj)
- else:
- return attr()
- return attr
-
- def feed_extra_kwargs(self, obj):
- """
- Returns an extra keyword arguments dictionary that is used when
- initializing the feed generator.
- """
- return {}
-
- def item_extra_kwargs(self, item):
- """
- Returns an extra keyword arguments dictionary that is used with
- the `add_item` call of the feed generator.
- """
- return {}
-
- def get_object(self, request, *args, **kwargs):
- return None
-
- def get_feed(self, obj, request):
- """
- Returns a feedgenerator.DefaultFeed object, fully populated, for
- this feed. Raises FeedDoesNotExist for invalid parameters.
- """
- current_site = get_current_site(request)
-
- link = self.__get_dynamic_attr('link', obj)
- link = add_domain(current_site.domain, link, request.is_secure())
-
- feed = self.feed_type(
- title = self.__get_dynamic_attr('title', obj),
- subtitle = self.__get_dynamic_attr('subtitle', obj),
- link = link,
- description = self.__get_dynamic_attr('description', obj),
- language = settings.LANGUAGE_CODE.decode(),
- feed_url = add_domain(
- current_site.domain,
- self.__get_dynamic_attr('feed_url', obj) or request.path,
- request.is_secure(),
- ),
- author_name = self.__get_dynamic_attr('author_name', obj),
- author_link = self.__get_dynamic_attr('author_link', obj),
- author_email = self.__get_dynamic_attr('author_email', obj),
- categories = self.__get_dynamic_attr('categories', obj),
- feed_copyright = self.__get_dynamic_attr('feed_copyright', obj),
- feed_guid = self.__get_dynamic_attr('feed_guid', obj),
- ttl = self.__get_dynamic_attr('ttl', obj),
- **self.feed_extra_kwargs(obj)
- )
-
- title_tmp = None
- if self.title_template is not None:
- try:
- title_tmp = loader.get_template(self.title_template)
- except TemplateDoesNotExist:
- pass
-
- description_tmp = None
- if self.description_template is not None:
- try:
- description_tmp = loader.get_template(self.description_template)
- except TemplateDoesNotExist:
- pass
-
- for item in self.__get_dynamic_attr('items', obj):
- if title_tmp is not None:
- title = title_tmp.render(RequestContext(request, {'obj': item, 'site': current_site}))
- else:
- title = self.__get_dynamic_attr('item_title', item)
- if description_tmp is not None:
- description = description_tmp.render(RequestContext(request, {'obj': item, 'site': current_site}))
- else:
- description = self.__get_dynamic_attr('item_description', item)
- link = add_domain(
- current_site.domain,
- self.__get_dynamic_attr('item_link', item),
- request.is_secure(),
- )
- enc = None
- enc_url = self.__get_dynamic_attr('item_enclosure_url', item)
- if enc_url:
- enc = feedgenerator.Enclosure(
- url = smart_unicode(enc_url),
- length = smart_unicode(self.__get_dynamic_attr('item_enclosure_length', item)),
- mime_type = smart_unicode(self.__get_dynamic_attr('item_enclosure_mime_type', item))
- )
- author_name = self.__get_dynamic_attr('item_author_name', item)
- if author_name is not None:
- author_email = self.__get_dynamic_attr('item_author_email', item)
- author_link = self.__get_dynamic_attr('item_author_link', item)
- else:
- author_email = author_link = None
-
- pubdate = self.__get_dynamic_attr('item_pubdate', item)
- if pubdate and not pubdate.tzinfo:
- ltz = tzinfo.LocalTimezone(pubdate)
- pubdate = pubdate.replace(tzinfo=ltz)
-
- feed.add_item(
- title = title,
- link = link,
- description = description,
- unique_id = self.__get_dynamic_attr('item_guid', item, link),
- enclosure = enc,
- pubdate = pubdate,
- author_name = author_name,
- author_email = author_email,
- author_link = author_link,
- categories = self.__get_dynamic_attr('item_categories', item),
- item_copyright = self.__get_dynamic_attr('item_copyright', item),
- **self.item_extra_kwargs(item)
- )
- return feed
-
-
-def feed(request, url, feed_dict=None):
- """Provided for backwards compatibility."""
- import warnings
- warnings.warn('The syndication feed() view is deprecated. Please use the '
- 'new class based view API.',
- category=PendingDeprecationWarning)
-
- if not feed_dict:
- raise Http404("No feeds are registered.")
-
- try:
- slug, param = url.split('/', 1)
- except ValueError:
- slug, param = url, ''
-
- try:
- f = feed_dict[slug]
- except KeyError:
- raise Http404("Slug %r isn't registered." % slug)
-
- try:
- feedgen = f(slug, request).get_feed(param)
- except FeedDoesNotExist:
- raise Http404("Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug)
-
- response = HttpResponse(mimetype=feedgen.mime_type)
- feedgen.write(response, 'utf-8')
- return response
-
diff --git a/parts/django/django/contrib/webdesign/__init__.py b/parts/django/django/contrib/webdesign/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/webdesign/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/webdesign/lorem_ipsum.py b/parts/django/django/contrib/webdesign/lorem_ipsum.py
deleted file mode 100644
index 4ad175d..0000000
--- a/parts/django/django/contrib/webdesign/lorem_ipsum.py
+++ /dev/null
@@ -1,101 +0,0 @@
-"""
-Utility functions for generating "lorem ipsum" Latin text.
-"""
-
-import random
-
-COMMON_P = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
-
-WORDS = ('exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet',
- 'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi',
- 'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi',
- 'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos',
- 'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum',
- 'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus',
- 'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus',
- 'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum',
- 'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem',
- 'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus',
- 'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente',
- 'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet',
- 'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta',
- 'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima',
- 'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim',
- 'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores',
- 'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias',
- 'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea',
- 'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt',
- 'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate',
- 'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius',
- 'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos',
- 'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore',
- 'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo',
- 'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi',
- 'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam',
- 'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique',
- 'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere',
- 'maxime', 'corrupti')
-
-COMMON_WORDS = ('lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur',
- 'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt',
- 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua')
-
-def sentence():
- """
- Returns a randomly generated sentence of lorem ipsum text.
-
- The first word is capitalized, and the sentence ends in either a period or
- question mark. Commas are added at random.
- """
- # Determine the number of comma-separated sections and number of words in
- # each section for this sentence.
- sections = [u' '.join(random.sample(WORDS, random.randint(3, 12))) for i in range(random.randint(1, 5))]
- s = u', '.join(sections)
- # Convert to sentence case and add end punctuation.
- return u'%s%s%s' % (s[0].upper(), s[1:], random.choice('?.'))
-
-def paragraph():
- """
- Returns a randomly generated paragraph of lorem ipsum text.
-
- The paragraph consists of between 1 and 4 sentences, inclusive.
- """
- return u' '.join([sentence() for i in range(random.randint(1, 4))])
-
-def paragraphs(count, common=True):
- """
- Returns a list of paragraphs as returned by paragraph().
-
- If `common` is True, then the first paragraph will be the standard
- 'lorem ipsum' paragraph. Otherwise, the first paragraph will be random
- Latin text. Either way, subsequent paragraphs will be random Latin text.
- """
- paras = []
- for i in range(count):
- if common and i == 0:
- paras.append(COMMON_P)
- else:
- paras.append(paragraph())
- return paras
-
-def words(count, common=True):
- """
- Returns a string of `count` lorem ipsum words separated by a single space.
-
- If `common` is True, then the first 19 words will be the standard
- 'lorem ipsum' words. Otherwise, all words will be selected randomly.
- """
- if common:
- word_list = list(COMMON_WORDS)
- else:
- word_list = []
- c = len(word_list)
- if count > c:
- count -= c
- while count > 0:
- c = min(count, len(WORDS))
- count -= c
- word_list += random.sample(WORDS, c)
- else:
- word_list = word_list[:count]
- return u' '.join(word_list)
diff --git a/parts/django/django/contrib/webdesign/models.py b/parts/django/django/contrib/webdesign/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/webdesign/models.py
+++ /dev/null
diff --git a/parts/django/django/contrib/webdesign/templatetags/__init__.py b/parts/django/django/contrib/webdesign/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/contrib/webdesign/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/django/contrib/webdesign/templatetags/webdesign.py b/parts/django/django/contrib/webdesign/templatetags/webdesign.py
deleted file mode 100644
index 1eb1790..0000000
--- a/parts/django/django/contrib/webdesign/templatetags/webdesign.py
+++ /dev/null
@@ -1,67 +0,0 @@
-from django.contrib.webdesign.lorem_ipsum import words, paragraphs
-from django import template
-
-register = template.Library()
-
-class LoremNode(template.Node):
- def __init__(self, count, method, common):
- self.count, self.method, self.common = count, method, common
-
- def render(self, context):
- try:
- count = int(self.count.resolve(context))
- except (ValueError, TypeError):
- count = 1
- if self.method == 'w':
- return words(count, common=self.common)
- else:
- paras = paragraphs(count, common=self.common)
- if self.method == 'p':
- paras = ['<p>%s</p>' % p for p in paras]
- return u'\n\n'.join(paras)
-
-#@register.tag
-def lorem(parser, token):
- """
- Creates random Latin text useful for providing test data in templates.
-
- Usage format::
-
- {% lorem [count] [method] [random] %}
-
- ``count`` is a number (or variable) containing the number of paragraphs or
- words to generate (default is 1).
-
- ``method`` is either ``w`` for words, ``p`` for HTML paragraphs, ``b`` for
- plain-text paragraph blocks (default is ``b``).
-
- ``random`` is the word ``random``, which if given, does not use the common
- paragraph (starting "Lorem ipsum dolor sit amet, consectetuer...").
-
- Examples:
- * ``{% lorem %}`` will output the common "lorem ipsum" paragraph
- * ``{% lorem 3 p %}`` will output the common "lorem ipsum" paragraph
- and two random paragraphs each wrapped in HTML ``<p>`` tags
- * ``{% lorem 2 w random %}`` will output two random latin words
- """
- bits = list(token.split_contents())
- tagname = bits[0]
- # Random bit
- common = bits[-1] != 'random'
- if not common:
- bits.pop()
- # Method bit
- if bits[-1] in ('w', 'p', 'b'):
- method = bits.pop()
- else:
- method = 'b'
- # Count bit
- if len(bits) > 1:
- count = bits.pop()
- else:
- count = '1'
- count = parser.compile_filter(count)
- if len(bits) != 1:
- raise template.TemplateSyntaxError("Incorrect format for %r tag" % tagname)
- return LoremNode(count, method, common)
-lorem = register.tag(lorem)
diff --git a/parts/django/django/contrib/webdesign/tests.py b/parts/django/django/contrib/webdesign/tests.py
deleted file mode 100644
index 8907ea3..0000000
--- a/parts/django/django/contrib/webdesign/tests.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import unittest
-
-from django.contrib.webdesign.lorem_ipsum import *
-from django.template import loader, Context
-
-
-class WebdesignTest(unittest.TestCase):
-
- def test_words(self):
- self.assertEqual(words(7), u'lorem ipsum dolor sit amet consectetur adipisicing')
-
- def test_paragraphs(self):
- self.assertEqual(paragraphs(1),
- ['Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'])
-
- def test_lorem_tag(self):
- t = loader.get_template_from_string("{% load webdesign %}{% lorem 3 w %}")
- self.assertEqual(t.render(Context({})),
- u'lorem ipsum dolor')
diff --git a/parts/django/django/core/__init__.py b/parts/django/django/core/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/core/__init__.py
+++ /dev/null
diff --git a/parts/django/django/core/cache/__init__.py b/parts/django/django/core/cache/__init__.py
deleted file mode 100644
index 334a932..0000000
--- a/parts/django/django/core/cache/__init__.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""
-Caching framework.
-
-This package defines set of cache backends that all conform to a simple API.
-In a nutshell, a cache is a set of values -- which can be any object that
-may be pickled -- identified by string keys. For the complete API, see
-the abstract BaseCache class in django.core.cache.backends.base.
-
-Client code should not access a cache backend directly; instead it should
-either use the "cache" variable made available here, or it should use the
-get_cache() function made available here. get_cache() takes a backend URI
-(e.g. "memcached://127.0.0.1:11211/") and returns an instance of a backend
-cache class.
-
-See docs/cache.txt for information on the public API.
-"""
-
-try:
- from urlparse import parse_qsl
-except ImportError:
- from cgi import parse_qsl
-
-from django.conf import settings
-from django.core import signals
-from django.core.cache.backends.base import InvalidCacheBackendError, CacheKeyWarning
-from django.utils import importlib
-
-# Name for use in settings file --> name of module in "backends" directory.
-# Any backend scheme that is not in this dictionary is treated as a Python
-# import path to a custom backend.
-BACKENDS = {
- 'memcached': 'memcached',
- 'locmem': 'locmem',
- 'file': 'filebased',
- 'db': 'db',
- 'dummy': 'dummy',
-}
-
-def parse_backend_uri(backend_uri):
- """
- Converts the "backend_uri" into a cache scheme ('db', 'memcached', etc), a
- host and any extra params that are required for the backend. Returns a
- (scheme, host, params) tuple.
- """
- if backend_uri.find(':') == -1:
- raise InvalidCacheBackendError("Backend URI must start with scheme://")
- scheme, rest = backend_uri.split(':', 1)
- if not rest.startswith('//'):
- raise InvalidCacheBackendError("Backend URI must start with scheme://")
-
- host = rest[2:]
- qpos = rest.find('?')
- if qpos != -1:
- params = dict(parse_qsl(rest[qpos+1:]))
- host = rest[2:qpos]
- else:
- params = {}
- if host.endswith('/'):
- host = host[:-1]
-
- return scheme, host, params
-
-def get_cache(backend_uri):
- scheme, host, params = parse_backend_uri(backend_uri)
- if scheme in BACKENDS:
- name = 'django.core.cache.backends.%s' % BACKENDS[scheme]
- else:
- name = scheme
- module = importlib.import_module(name)
- return getattr(module, 'CacheClass')(host, params)
-
-cache = get_cache(settings.CACHE_BACKEND)
-
-# Some caches -- pythont-memcached in particular -- need to do a cleanup at the
-# end of a request cycle. If the cache provides a close() method, wire it up
-# here.
-if hasattr(cache, 'close'):
- signals.request_finished.connect(cache.close)
-
diff --git a/parts/django/django/core/cache/backends/__init__.py b/parts/django/django/core/cache/backends/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/core/cache/backends/__init__.py
+++ /dev/null
diff --git a/parts/django/django/core/cache/backends/base.py b/parts/django/django/core/cache/backends/base.py
deleted file mode 100644
index 83dd461..0000000
--- a/parts/django/django/core/cache/backends/base.py
+++ /dev/null
@@ -1,144 +0,0 @@
-"Base Cache class."
-
-import warnings
-
-from django.core.exceptions import ImproperlyConfigured, DjangoRuntimeWarning
-
-class InvalidCacheBackendError(ImproperlyConfigured):
- pass
-
-class CacheKeyWarning(DjangoRuntimeWarning):
- pass
-
-# Memcached does not accept keys longer than this.
-MEMCACHE_MAX_KEY_LENGTH = 250
-
-class BaseCache(object):
- def __init__(self, params):
- timeout = params.get('timeout', 300)
- try:
- timeout = int(timeout)
- except (ValueError, TypeError):
- timeout = 300
- self.default_timeout = timeout
-
- def add(self, key, value, timeout=None):
- """
- Set a value in the cache if the key does not already exist. If
- timeout is given, that timeout will be used for the key; otherwise
- the default cache timeout will be used.
-
- Returns True if the value was stored, False otherwise.
- """
- raise NotImplementedError
-
- def get(self, key, default=None):
- """
- Fetch a given key from the cache. If the key does not exist, return
- default, which itself defaults to None.
- """
- raise NotImplementedError
-
- def set(self, key, value, timeout=None):
- """
- Set a value in the cache. If timeout is given, that timeout will be
- used for the key; otherwise the default cache timeout will be used.
- """
- raise NotImplementedError
-
- def delete(self, key):
- """
- Delete a key from the cache, failing silently.
- """
- raise NotImplementedError
-
- def get_many(self, keys):
- """
- Fetch a bunch of keys from the cache. For certain backends (memcached,
- pgsql) this can be *much* faster when fetching multiple values.
-
- Returns a dict mapping each key in keys to its value. If the given
- key is missing, it will be missing from the response dict.
- """
- d = {}
- for k in keys:
- val = self.get(k)
- if val is not None:
- d[k] = val
- return d
-
- def has_key(self, key):
- """
- Returns True if the key is in the cache and has not expired.
- """
- return self.get(key) is not None
-
- def incr(self, key, delta=1):
- """
- Add delta to value in the cache. If the key does not exist, raise a
- ValueError exception.
- """
- if key not in self:
- raise ValueError("Key '%s' not found" % key)
- new_value = self.get(key) + delta
- self.set(key, new_value)
- return new_value
-
- def decr(self, key, delta=1):
- """
- Subtract delta from value in the cache. If the key does not exist, raise
- a ValueError exception.
- """
- return self.incr(key, -delta)
-
- def __contains__(self, key):
- """
- Returns True if the key is in the cache and has not expired.
- """
- # This is a separate method, rather than just a copy of has_key(),
- # so that it always has the same functionality as has_key(), even
- # if a subclass overrides it.
- return self.has_key(key)
-
- def set_many(self, data, timeout=None):
- """
- Set a bunch of values in the cache at once from a dict of key/value
- pairs. For certain backends (memcached), this is much more efficient
- than calling set() multiple times.
-
- If timeout is given, that timeout will be used for the key; otherwise
- the default cache timeout will be used.
- """
- for key, value in data.items():
- self.set(key, value, timeout)
-
- def delete_many(self, keys):
- """
- Set a bunch of values in the cache at once. For certain backends
- (memcached), this is much more efficient than calling delete() multiple
- times.
- """
- for key in keys:
- self.delete(key)
-
- def clear(self):
- """Remove *all* values from the cache at once."""
- raise NotImplementedError
-
- def validate_key(self, key):
- """
- Warn about keys that would not be portable to the memcached
- backend. This encourages (but does not force) writing backend-portable
- cache code.
-
- """
- if len(key) > MEMCACHE_MAX_KEY_LENGTH:
- warnings.warn('Cache key will cause errors if used with memcached: '
- '%s (longer than %s)' % (key, MEMCACHE_MAX_KEY_LENGTH),
- CacheKeyWarning)
- for char in key:
- if ord(char) < 33 or ord(char) == 127:
- warnings.warn('Cache key contains characters that will cause '
- 'errors if used with memcached: %r' % key,
- CacheKeyWarning)
-
diff --git a/parts/django/django/core/cache/backends/db.py b/parts/django/django/core/cache/backends/db.py
deleted file mode 100644
index c4429c8..0000000
--- a/parts/django/django/core/cache/backends/db.py
+++ /dev/null
@@ -1,145 +0,0 @@
-"Database cache backend."
-
-from django.core.cache.backends.base import BaseCache
-from django.db import connections, router, transaction, DatabaseError
-import base64, time
-from datetime import datetime
-try:
- import cPickle as pickle
-except ImportError:
- import pickle
-
-class Options(object):
- """A class that will quack like a Django model _meta class.
-
- This allows cache operations to be controlled by the router
- """
- def __init__(self, table):
- self.db_table = table
- self.app_label = 'django_cache'
- self.module_name = 'cacheentry'
- self.verbose_name = 'cache entry'
- self.verbose_name_plural = 'cache entries'
- self.object_name = 'CacheEntry'
- self.abstract = False
- self.managed = True
- self.proxy = False
-
-class CacheClass(BaseCache):
- def __init__(self, table, params):
- BaseCache.__init__(self, params)
- self._table = table
-
- class CacheEntry(object):
- _meta = Options(table)
- self.cache_model_class = CacheEntry
-
- max_entries = params.get('max_entries', 300)
- try:
- self._max_entries = int(max_entries)
- except (ValueError, TypeError):
- self._max_entries = 300
- cull_frequency = params.get('cull_frequency', 3)
- try:
- self._cull_frequency = int(cull_frequency)
- except (ValueError, TypeError):
- self._cull_frequency = 3
-
- def get(self, key, default=None):
- self.validate_key(key)
- db = router.db_for_read(self.cache_model_class)
- table = connections[db].ops.quote_name(self._table)
- cursor = connections[db].cursor()
-
- cursor.execute("SELECT cache_key, value, expires FROM %s WHERE cache_key = %%s" % table, [key])
- row = cursor.fetchone()
- if row is None:
- return default
- now = datetime.now()
- if row[2] < now:
- db = router.db_for_write(self.cache_model_class)
- cursor = connections[db].cursor()
- cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % table, [key])
- transaction.commit_unless_managed(using=db)
- return default
- value = connections[db].ops.process_clob(row[1])
- return pickle.loads(base64.decodestring(value))
-
- def set(self, key, value, timeout=None):
- self.validate_key(key)
- self._base_set('set', key, value, timeout)
-
- def add(self, key, value, timeout=None):
- self.validate_key(key)
- return self._base_set('add', key, value, timeout)
-
- def _base_set(self, mode, key, value, timeout=None):
- if timeout is None:
- timeout = self.default_timeout
- db = router.db_for_write(self.cache_model_class)
- table = connections[db].ops.quote_name(self._table)
- cursor = connections[db].cursor()
-
- cursor.execute("SELECT COUNT(*) FROM %s" % table)
- num = cursor.fetchone()[0]
- now = datetime.now().replace(microsecond=0)
- exp = datetime.fromtimestamp(time.time() + timeout).replace(microsecond=0)
- if num > self._max_entries:
- self._cull(db, cursor, now)
- encoded = base64.encodestring(pickle.dumps(value, 2)).strip()
- cursor.execute("SELECT cache_key, expires FROM %s WHERE cache_key = %%s" % table, [key])
- try:
- result = cursor.fetchone()
- if result and (mode == 'set' or
- (mode == 'add' and result[1] < now)):
- cursor.execute("UPDATE %s SET value = %%s, expires = %%s WHERE cache_key = %%s" % table,
- [encoded, connections[db].ops.value_to_db_datetime(exp), key])
- else:
- cursor.execute("INSERT INTO %s (cache_key, value, expires) VALUES (%%s, %%s, %%s)" % table,
- [key, encoded, connections[db].ops.value_to_db_datetime(exp)])
- except DatabaseError:
- # To be threadsafe, updates/inserts are allowed to fail silently
- transaction.rollback_unless_managed(using=db)
- return False
- else:
- transaction.commit_unless_managed(using=db)
- return True
-
- def delete(self, key):
- self.validate_key(key)
- db = router.db_for_write(self.cache_model_class)
- table = connections[db].ops.quote_name(self._table)
- cursor = connections[db].cursor()
-
- cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % table, [key])
- transaction.commit_unless_managed(using=db)
-
- def has_key(self, key):
- self.validate_key(key)
- db = router.db_for_read(self.cache_model_class)
- table = connections[db].ops.quote_name(self._table)
- cursor = connections[db].cursor()
-
- now = datetime.now().replace(microsecond=0)
- cursor.execute("SELECT cache_key FROM %s WHERE cache_key = %%s and expires > %%s" % table,
- [key, connections[db].ops.value_to_db_datetime(now)])
- return cursor.fetchone() is not None
-
- def _cull(self, db, cursor, now):
- if self._cull_frequency == 0:
- self.clear()
- else:
- table = connections[db].ops.quote_name(self._table)
- cursor.execute("DELETE FROM %s WHERE expires < %%s" % table,
- [connections[db].ops.value_to_db_datetime(now)])
- cursor.execute("SELECT COUNT(*) FROM %s" % table)
- num = cursor.fetchone()[0]
- if num > self._max_entries:
- cursor.execute("SELECT cache_key FROM %s ORDER BY cache_key LIMIT 1 OFFSET %%s" % table, [num / self._cull_frequency])
- cursor.execute("DELETE FROM %s WHERE cache_key < %%s" % table, [cursor.fetchone()[0]])
-
- def clear(self):
- db = router.db_for_write(self.cache_model_class)
- table = connections[db].ops.quote_name(self._table)
- cursor = connections[db].cursor()
- cursor.execute('DELETE FROM %s' % table)
diff --git a/parts/django/django/core/cache/backends/dummy.py b/parts/django/django/core/cache/backends/dummy.py
deleted file mode 100644
index f73b740..0000000
--- a/parts/django/django/core/cache/backends/dummy.py
+++ /dev/null
@@ -1,37 +0,0 @@
-"Dummy cache backend"
-
-from django.core.cache.backends.base import BaseCache
-
-class CacheClass(BaseCache):
- def __init__(self, *args, **kwargs):
- pass
-
- def add(self, key, *args, **kwargs):
- self.validate_key(key)
- return True
-
- def get(self, key, default=None):
- self.validate_key(key)
- return default
-
- def set(self, key, *args, **kwargs):
- self.validate_key(key)
-
- def delete(self, key, *args, **kwargs):
- self.validate_key(key)
-
- def get_many(self, *args, **kwargs):
- return {}
-
- def has_key(self, key, *args, **kwargs):
- self.validate_key(key)
- return False
-
- def set_many(self, *args, **kwargs):
- pass
-
- def delete_many(self, *args, **kwargs):
- pass
-
- def clear(self):
- pass
diff --git a/parts/django/django/core/cache/backends/filebased.py b/parts/django/django/core/cache/backends/filebased.py
deleted file mode 100644
index 46e69f3..0000000
--- a/parts/django/django/core/cache/backends/filebased.py
+++ /dev/null
@@ -1,171 +0,0 @@
-"File-based cache backend"
-
-import os
-import time
-import shutil
-try:
- import cPickle as pickle
-except ImportError:
- import pickle
-
-from django.core.cache.backends.base import BaseCache
-from django.utils.hashcompat import md5_constructor
-
-class CacheClass(BaseCache):
- def __init__(self, dir, params):
- BaseCache.__init__(self, params)
-
- max_entries = params.get('max_entries', 300)
- try:
- self._max_entries = int(max_entries)
- except (ValueError, TypeError):
- self._max_entries = 300
-
- cull_frequency = params.get('cull_frequency', 3)
- try:
- self._cull_frequency = int(cull_frequency)
- except (ValueError, TypeError):
- self._cull_frequency = 3
-
- self._dir = dir
- if not os.path.exists(self._dir):
- self._createdir()
-
- def add(self, key, value, timeout=None):
- self.validate_key(key)
- if self.has_key(key):
- return False
-
- self.set(key, value, timeout)
- return True
-
- def get(self, key, default=None):
- self.validate_key(key)
- fname = self._key_to_file(key)
- try:
- f = open(fname, 'rb')
- try:
- exp = pickle.load(f)
- now = time.time()
- if exp < now:
- self._delete(fname)
- else:
- return pickle.load(f)
- finally:
- f.close()
- except (IOError, OSError, EOFError, pickle.PickleError):
- pass
- return default
-
- def set(self, key, value, timeout=None):
- self.validate_key(key)
- fname = self._key_to_file(key)
- dirname = os.path.dirname(fname)
-
- if timeout is None:
- timeout = self.default_timeout
-
- self._cull()
-
- try:
- if not os.path.exists(dirname):
- os.makedirs(dirname)
-
- f = open(fname, 'wb')
- try:
- now = time.time()
- pickle.dump(now + timeout, f, pickle.HIGHEST_PROTOCOL)
- pickle.dump(value, f, pickle.HIGHEST_PROTOCOL)
- finally:
- f.close()
- except (IOError, OSError):
- pass
-
- def delete(self, key):
- self.validate_key(key)
- try:
- self._delete(self._key_to_file(key))
- except (IOError, OSError):
- pass
-
- def _delete(self, fname):
- os.remove(fname)
- try:
- # Remove the 2 subdirs if they're empty
- dirname = os.path.dirname(fname)
- os.rmdir(dirname)
- os.rmdir(os.path.dirname(dirname))
- except (IOError, OSError):
- pass
-
- def has_key(self, key):
- self.validate_key(key)
- fname = self._key_to_file(key)
- try:
- f = open(fname, 'rb')
- try:
- exp = pickle.load(f)
- now = time.time()
- if exp < now:
- self._delete(fname)
- return False
- else:
- return True
- finally:
- f.close()
- except (IOError, OSError, EOFError, pickle.PickleError):
- return False
-
- def _cull(self):
- if int(self._num_entries) < self._max_entries:
- return
-
- try:
- filelist = sorted(os.listdir(self._dir))
- except (IOError, OSError):
- return
-
- if self._cull_frequency == 0:
- doomed = filelist
- else:
- doomed = [os.path.join(self._dir, k) for (i, k) in enumerate(filelist) if i % self._cull_frequency == 0]
-
- for topdir in doomed:
- try:
- for root, _, files in os.walk(topdir):
- for f in files:
- self._delete(os.path.join(root, f))
- except (IOError, OSError):
- pass
-
- def _createdir(self):
- try:
- os.makedirs(self._dir)
- except OSError:
- raise EnvironmentError("Cache directory '%s' does not exist and could not be created'" % self._dir)
-
- def _key_to_file(self, key):
- """
- Convert the filename into an md5 string. We'll turn the first couple
- bits of the path into directory prefixes to be nice to filesystems
- that have problems with large numbers of files in a directory.
-
- Thus, a cache key of "foo" gets turnned into a file named
- ``{cache-dir}ac/bd/18db4cc2f85cedef654fccc4a4d8``.
- """
- path = md5_constructor(key.encode('utf-8')).hexdigest()
- path = os.path.join(path[:2], path[2:4], path[4:])
- return os.path.join(self._dir, path)
-
- def _get_num_entries(self):
- count = 0
- for _,_,files in os.walk(self._dir):
- count += len(files)
- return count
- _num_entries = property(_get_num_entries)
-
- def clear(self):
- try:
- shutil.rmtree(self._dir)
- except (IOError, OSError):
- pass
diff --git a/parts/django/django/core/cache/backends/locmem.py b/parts/django/django/core/cache/backends/locmem.py
deleted file mode 100644
index fe33d33..0000000
--- a/parts/django/django/core/cache/backends/locmem.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"Thread-safe in-memory cache backend."
-
-import time
-try:
- import cPickle as pickle
-except ImportError:
- import pickle
-
-from django.core.cache.backends.base import BaseCache
-from django.utils.synch import RWLock
-
-class CacheClass(BaseCache):
- def __init__(self, _, params):
- BaseCache.__init__(self, params)
- self._cache = {}
- self._expire_info = {}
-
- max_entries = params.get('max_entries', 300)
- try:
- self._max_entries = int(max_entries)
- except (ValueError, TypeError):
- self._max_entries = 300
-
- cull_frequency = params.get('cull_frequency', 3)
- try:
- self._cull_frequency = int(cull_frequency)
- except (ValueError, TypeError):
- self._cull_frequency = 3
-
- self._lock = RWLock()
-
- def add(self, key, value, timeout=None):
- self.validate_key(key)
- self._lock.writer_enters()
- try:
- exp = self._expire_info.get(key)
- if exp is None or exp <= time.time():
- try:
- self._set(key, pickle.dumps(value), timeout)
- return True
- except pickle.PickleError:
- pass
- return False
- finally:
- self._lock.writer_leaves()
-
- def get(self, key, default=None):
- self.validate_key(key)
- self._lock.reader_enters()
- try:
- exp = self._expire_info.get(key)
- if exp is None:
- return default
- elif exp > time.time():
- try:
- return pickle.loads(self._cache[key])
- except pickle.PickleError:
- return default
- finally:
- self._lock.reader_leaves()
- self._lock.writer_enters()
- try:
- try:
- del self._cache[key]
- del self._expire_info[key]
- except KeyError:
- pass
- return default
- finally:
- self._lock.writer_leaves()
-
- def _set(self, key, value, timeout=None):
- if len(self._cache) >= self._max_entries:
- self._cull()
- if timeout is None:
- timeout = self.default_timeout
- self._cache[key] = value
- self._expire_info[key] = time.time() + timeout
-
- def set(self, key, value, timeout=None):
- self.validate_key(key)
- self._lock.writer_enters()
- # Python 2.4 doesn't allow combined try-except-finally blocks.
- try:
- try:
- self._set(key, pickle.dumps(value), timeout)
- except pickle.PickleError:
- pass
- finally:
- self._lock.writer_leaves()
-
- def has_key(self, key):
- self.validate_key(key)
- self._lock.reader_enters()
- try:
- exp = self._expire_info.get(key)
- if exp is None:
- return False
- elif exp > time.time():
- return True
- finally:
- self._lock.reader_leaves()
-
- self._lock.writer_enters()
- try:
- try:
- del self._cache[key]
- del self._expire_info[key]
- except KeyError:
- pass
- return False
- finally:
- self._lock.writer_leaves()
-
- def _cull(self):
- if self._cull_frequency == 0:
- self.clear()
- else:
- doomed = [k for (i, k) in enumerate(self._cache) if i % self._cull_frequency == 0]
- for k in doomed:
- self._delete(k)
-
- def _delete(self, key):
- try:
- del self._cache[key]
- except KeyError:
- pass
- try:
- del self._expire_info[key]
- except KeyError:
- pass
-
- def delete(self, key):
- self.validate_key(key)
- self._lock.writer_enters()
- try:
- self._delete(key)
- finally:
- self._lock.writer_leaves()
-
- def clear(self):
- self._cache.clear()
- self._expire_info.clear()
diff --git a/parts/django/django/core/cache/backends/memcached.py b/parts/django/django/core/cache/backends/memcached.py
deleted file mode 100644
index 7d6b5b3..0000000
--- a/parts/django/django/core/cache/backends/memcached.py
+++ /dev/null
@@ -1,104 +0,0 @@
-"Memcached cache backend"
-
-import time
-
-from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError
-from django.utils.encoding import smart_unicode, smart_str
-
-try:
- import cmemcache as memcache
- import warnings
- warnings.warn(
- "Support for the 'cmemcache' library has been deprecated. Please use python-memcached instead.",
- PendingDeprecationWarning
- )
-except ImportError:
- try:
- import memcache
- except:
- raise InvalidCacheBackendError("Memcached cache backend requires either the 'memcache' or 'cmemcache' library")
-
-class CacheClass(BaseCache):
- def __init__(self, server, params):
- BaseCache.__init__(self, params)
- self._cache = memcache.Client(server.split(';'))
-
- def _get_memcache_timeout(self, timeout):
- """
- Memcached deals with long (> 30 days) timeouts in a special
- way. Call this function to obtain a safe value for your timeout.
- """
- timeout = timeout or self.default_timeout
- if timeout > 2592000: # 60*60*24*30, 30 days
- # See http://code.google.com/p/memcached/wiki/FAQ
- # "You can set expire times up to 30 days in the future. After that
- # memcached interprets it as a date, and will expire the item after
- # said date. This is a simple (but obscure) mechanic."
- #
- # This means that we have to switch to absolute timestamps.
- timeout += int(time.time())
- return timeout
-
- def add(self, key, value, timeout=0):
- if isinstance(value, unicode):
- value = value.encode('utf-8')
- return self._cache.add(smart_str(key), value, self._get_memcache_timeout(timeout))
-
- def get(self, key, default=None):
- val = self._cache.get(smart_str(key))
- if val is None:
- return default
- return val
-
- def set(self, key, value, timeout=0):
- self._cache.set(smart_str(key), value, self._get_memcache_timeout(timeout))
-
- def delete(self, key):
- self._cache.delete(smart_str(key))
-
- def get_many(self, keys):
- return self._cache.get_multi(map(smart_str,keys))
-
- def close(self, **kwargs):
- self._cache.disconnect_all()
-
- def incr(self, key, delta=1):
- try:
- val = self._cache.incr(key, delta)
-
- # python-memcache responds to incr on non-existent keys by
- # raising a ValueError. Cmemcache returns None. In both
- # cases, we should raise a ValueError though.
- except ValueError:
- val = None
- if val is None:
- raise ValueError("Key '%s' not found" % key)
-
- return val
-
- def decr(self, key, delta=1):
- try:
- val = self._cache.decr(key, delta)
-
- # python-memcache responds to decr on non-existent keys by
- # raising a ValueError. Cmemcache returns None. In both
- # cases, we should raise a ValueError though.
- except ValueError:
- val = None
- if val is None:
- raise ValueError("Key '%s' not found" % key)
- return val
-
- def set_many(self, data, timeout=0):
- safe_data = {}
- for key, value in data.items():
- if isinstance(value, unicode):
- value = value.encode('utf-8')
- safe_data[smart_str(key)] = value
- self._cache.set_multi(safe_data, self._get_memcache_timeout(timeout))
-
- def delete_many(self, keys):
- self._cache.delete_multi(map(smart_str, keys))
-
- def clear(self):
- self._cache.flush_all()
diff --git a/parts/django/django/core/context_processors.py b/parts/django/django/core/context_processors.py
deleted file mode 100644
index a5f29df..0000000
--- a/parts/django/django/core/context_processors.py
+++ /dev/null
@@ -1,104 +0,0 @@
-"""
-A set of request processors that return dictionaries to be merged into a
-template context. Each function takes the request object as its only parameter
-and returns a dictionary to add to the context.
-
-These are referenced from the setting TEMPLATE_CONTEXT_PROCESSORS and used by
-RequestContext.
-"""
-
-from django.conf import settings
-from django.middleware.csrf import get_token
-from django.utils.functional import lazy
-
-def auth(request):
- """
- DEPRECATED. This context processor is the old location, and has been moved
- to `django.contrib.auth.context_processors`.
-
- This function still exists for backwards-compatibility; it will be removed
- in Django 1.4.
- """
- import warnings
- warnings.warn(
- "The context processor at `django.core.context_processors.auth` is " \
- "deprecated; use the path `django.contrib.auth.context_processors.auth` " \
- "instead.",
- PendingDeprecationWarning
- )
- from django.contrib.auth.context_processors import auth as auth_context_processor
- return auth_context_processor(request)
-
-def csrf(request):
- """
- Context processor that provides a CSRF token, or the string 'NOTPROVIDED' if
- it has not been provided by either a view decorator or the middleware
- """
- def _get_val():
- token = get_token(request)
- if token is None:
- # In order to be able to provide debugging info in the
- # case of misconfiguration, we use a sentinel value
- # instead of returning an empty dict.
- return 'NOTPROVIDED'
- else:
- return token
- _get_val = lazy(_get_val, str)
-
- return {'csrf_token': _get_val() }
-
-def debug(request):
- "Returns context variables helpful for debugging."
- context_extras = {}
- if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
- context_extras['debug'] = True
- from django.db import connection
- context_extras['sql_queries'] = connection.queries
- return context_extras
-
-def i18n(request):
- from django.utils import translation
-
- context_extras = {}
- context_extras['LANGUAGES'] = settings.LANGUAGES
- context_extras['LANGUAGE_CODE'] = translation.get_language()
- context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
-
- return context_extras
-
-def media(request):
- """
- Adds media-related context variables to the context.
-
- """
- return {'MEDIA_URL': settings.MEDIA_URL}
-
-def request(request):
- return {'request': request}
-
-# PermWrapper and PermLookupDict proxy the permissions system into objects that
-# the template system can understand.
-
-class PermLookupDict(object):
- def __init__(self, user, module_name):
- self.user, self.module_name = user, module_name
-
- def __repr__(self):
- return str(self.user.get_all_permissions())
-
- def __getitem__(self, perm_name):
- return self.user.has_perm("%s.%s" % (self.module_name, perm_name))
-
- def __nonzero__(self):
- return self.user.has_module_perms(self.module_name)
-
-class PermWrapper(object):
- def __init__(self, user):
- self.user = user
-
- def __getitem__(self, module_name):
- return PermLookupDict(self.user, module_name)
-
- def __iter__(self):
- # I am large, I contain multitudes.
- raise TypeError("PermWrapper is not iterable.")
diff --git a/parts/django/django/core/exceptions.py b/parts/django/django/core/exceptions.py
deleted file mode 100644
index 21be870..0000000
--- a/parts/django/django/core/exceptions.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-Global Django exception and warning classes.
-"""
-
-class DjangoRuntimeWarning(RuntimeWarning):
- pass
-
-class ObjectDoesNotExist(Exception):
- "The requested object does not exist"
- silent_variable_failure = True
-
-class MultipleObjectsReturned(Exception):
- "The query returned multiple objects when only one was expected."
- pass
-
-class SuspiciousOperation(Exception):
- "The user did something suspicious"
- pass
-
-class PermissionDenied(Exception):
- "The user did not have permission to do that"
- pass
-
-class ViewDoesNotExist(Exception):
- "The requested view does not exist"
- pass
-
-class MiddlewareNotUsed(Exception):
- "This middleware is not used in this server configuration"
- pass
-
-class ImproperlyConfigured(Exception):
- "Django is somehow improperly configured"
- pass
-
-class FieldError(Exception):
- """Some kind of problem with a model field."""
- pass
-
-NON_FIELD_ERRORS = '__all__'
-class ValidationError(Exception):
- """An error while validating data."""
- def __init__(self, message, code=None, params=None):
- import operator
- from django.utils.encoding import force_unicode
- """
- ValidationError can be passed any object that can be printed (usually
- a string), a list of objects or a dictionary.
- """
- if isinstance(message, dict):
- self.message_dict = message
- # Reduce each list of messages into a single list.
- message = reduce(operator.add, message.values())
-
- if isinstance(message, list):
- self.messages = [force_unicode(msg) for msg in message]
- else:
- self.code = code
- self.params = params
- message = force_unicode(message)
- self.messages = [message]
-
- def __str__(self):
- # This is needed because, without a __str__(), printing an exception
- # instance would result in this:
- # AttributeError: ValidationError instance has no attribute 'args'
- # See http://www.python.org/doc/current/tut/node10.html#handling
- if hasattr(self, 'message_dict'):
- return repr(self.message_dict)
- return repr(self.messages)
-
- def __repr__(self):
- if hasattr(self, 'message_dict'):
- return 'ValidationError(%s)' % repr(self.message_dict)
- return 'ValidationError(%s)' % repr(self.messages)
-
- def update_error_dict(self, error_dict):
- if hasattr(self, 'message_dict'):
- if error_dict:
- for k, v in self.message_dict.items():
- error_dict.setdefault(k, []).extend(v)
- else:
- error_dict = self.message_dict
- else:
- error_dict[NON_FIELD_ERRORS] = self.messages
- return error_dict
-
diff --git a/parts/django/django/core/files/__init__.py b/parts/django/django/core/files/__init__.py
deleted file mode 100644
index 0c3ef57..0000000
--- a/parts/django/django/core/files/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from django.core.files.base import File
diff --git a/parts/django/django/core/files/base.py b/parts/django/django/core/files/base.py
deleted file mode 100644
index f9e3f10..0000000
--- a/parts/django/django/core/files/base.py
+++ /dev/null
@@ -1,134 +0,0 @@
-import os
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.utils.encoding import smart_str, smart_unicode
-from django.core.files.utils import FileProxyMixin
-
-class File(FileProxyMixin):
- DEFAULT_CHUNK_SIZE = 64 * 2**10
-
- def __init__(self, file, name=None):
- self.file = file
- if name is None:
- name = getattr(file, 'name', None)
- self.name = name
- self.mode = getattr(file, 'mode', None)
-
- def __str__(self):
- return smart_str(self.name or '')
-
- def __unicode__(self):
- return smart_unicode(self.name or u'')
-
- def __repr__(self):
- return "<%s: %s>" % (self.__class__.__name__, self or "None")
-
- def __nonzero__(self):
- return bool(self.name)
-
- def __len__(self):
- return self.size
-
- def _get_size(self):
- if not hasattr(self, '_size'):
- if hasattr(self.file, 'size'):
- self._size = self.file.size
- elif os.path.exists(self.file.name):
- self._size = os.path.getsize(self.file.name)
- else:
- raise AttributeError("Unable to determine the file's size.")
- return self._size
-
- def _set_size(self, size):
- self._size = size
-
- size = property(_get_size, _set_size)
-
- def _get_closed(self):
- return not self.file or self.file.closed
- closed = property(_get_closed)
-
- def chunks(self, chunk_size=None):
- """
- Read the file and yield chucks of ``chunk_size`` bytes (defaults to
- ``UploadedFile.DEFAULT_CHUNK_SIZE``).
- """
- if not chunk_size:
- chunk_size = self.DEFAULT_CHUNK_SIZE
-
- if hasattr(self, 'seek'):
- self.seek(0)
- # Assume the pointer is at zero...
- counter = self.size
-
- while counter > 0:
- yield self.read(chunk_size)
- counter -= chunk_size
-
- def multiple_chunks(self, chunk_size=None):
- """
- Returns ``True`` if you can expect multiple chunks.
-
- NB: If a particular file representation is in memory, subclasses should
- always return ``False`` -- there's no good reason to read from memory in
- chunks.
- """
- if not chunk_size:
- chunk_size = self.DEFAULT_CHUNK_SIZE
- return self.size > chunk_size
-
- def __iter__(self):
- # Iterate over this file-like object by newlines
- buffer_ = None
- for chunk in self.chunks():
- chunk_buffer = StringIO(chunk)
-
- for line in chunk_buffer:
- if buffer_:
- line = buffer_ + line
- buffer_ = None
-
- # If this is the end of a line, yield
- # otherwise, wait for the next round
- if line[-1] in ('\n', '\r'):
- yield line
- else:
- buffer_ = line
-
- if buffer_ is not None:
- yield buffer_
-
- def open(self, mode=None):
- if not self.closed:
- self.seek(0)
- elif self.name and os.path.exists(self.name):
- self.file = open(self.name, mode or self.mode)
- else:
- raise ValueError("The file cannot be reopened.")
-
- def close(self):
- self.file.close()
-
-class ContentFile(File):
- """
- A File-like object that takes just raw content, rather than an actual file.
- """
- def __init__(self, content):
- content = content or ''
- super(ContentFile, self).__init__(StringIO(content))
- self.size = len(content)
-
- def __str__(self):
- return 'Raw content'
-
- def __nonzero__(self):
- return True
-
- def open(self, mode=None):
- self.seek(0)
-
- def close(self):
- pass
diff --git a/parts/django/django/core/files/images.py b/parts/django/django/core/files/images.py
deleted file mode 100644
index 228a711..0000000
--- a/parts/django/django/core/files/images.py
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-Utility functions for handling images.
-
-Requires PIL, as you might imagine.
-"""
-
-from django.core.files import File
-
-class ImageFile(File):
- """
- A mixin for use alongside django.core.files.base.File, which provides
- additional features for dealing with images.
- """
- def _get_width(self):
- return self._get_image_dimensions()[0]
- width = property(_get_width)
-
- def _get_height(self):
- return self._get_image_dimensions()[1]
- height = property(_get_height)
-
- def _get_image_dimensions(self):
- if not hasattr(self, '_dimensions_cache'):
- close = self.closed
- self.open()
- self._dimensions_cache = get_image_dimensions(self, close=close)
- return self._dimensions_cache
-
-def get_image_dimensions(file_or_path, close=False):
- """
- Returns the (width, height) of an image, given an open file or a path. Set
- 'close' to True to close the file at the end if it is initially in an open
- state.
- """
- # Try to import PIL in either of the two ways it can end up installed.
- try:
- from PIL import ImageFile as PILImageFile
- except ImportError:
- import ImageFile as PILImageFile
-
- p = PILImageFile.Parser()
- if hasattr(file_or_path, 'read'):
- file = file_or_path
- file_pos = file.tell()
- file.seek(0)
- else:
- file = open(file_or_path, 'rb')
- close = True
- try:
- while 1:
- data = file.read(1024)
- if not data:
- break
- p.feed(data)
- if p.image:
- return p.image.size
- return None
- finally:
- if close:
- file.close()
- else:
- file.seek(file_pos)
diff --git a/parts/django/django/core/files/locks.py b/parts/django/django/core/files/locks.py
deleted file mode 100644
index 7f187ef..0000000
--- a/parts/django/django/core/files/locks.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""
-Portable file locking utilities.
-
-Based partially on example by Jonathan Feignberg <jdf@pobox.com> in the Python
-Cookbook, licensed under the Python Software License.
-
- http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65203
-
-Example Usage::
-
- >>> from django.core.files import locks
- >>> f = open('./file', 'wb')
- >>> locks.lock(f, locks.LOCK_EX)
- >>> f.write('Django')
- >>> f.close()
-"""
-
-__all__ = ('LOCK_EX','LOCK_SH','LOCK_NB','lock','unlock')
-
-system_type = None
-
-try:
- import win32con
- import win32file
- import pywintypes
- LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK
- LOCK_SH = 0
- LOCK_NB = win32con.LOCKFILE_FAIL_IMMEDIATELY
- __overlapped = pywintypes.OVERLAPPED()
- system_type = 'nt'
-except (ImportError, AttributeError):
- pass
-
-try:
- import fcntl
- LOCK_EX = fcntl.LOCK_EX
- LOCK_SH = fcntl.LOCK_SH
- LOCK_NB = fcntl.LOCK_NB
- system_type = 'posix'
-except (ImportError, AttributeError):
- pass
-
-def fd(f):
- """Get a filedescriptor from something which could be a file or an fd."""
- return hasattr(f, 'fileno') and f.fileno() or f
-
-if system_type == 'nt':
- def lock(file, flags):
- hfile = win32file._get_osfhandle(fd(file))
- win32file.LockFileEx(hfile, flags, 0, -0x10000, __overlapped)
-
- def unlock(file):
- hfile = win32file._get_osfhandle(fd(file))
- win32file.UnlockFileEx(hfile, 0, -0x10000, __overlapped)
-elif system_type == 'posix':
- def lock(file, flags):
- fcntl.lockf(fd(file), flags)
-
- def unlock(file):
- fcntl.lockf(fd(file), fcntl.LOCK_UN)
-else:
- # File locking is not supported.
- LOCK_EX = LOCK_SH = LOCK_NB = None
-
- # Dummy functions that don't do anything.
- def lock(file, flags):
- pass
-
- def unlock(file):
- pass
diff --git a/parts/django/django/core/files/move.py b/parts/django/django/core/files/move.py
deleted file mode 100644
index 3349fc2..0000000
--- a/parts/django/django/core/files/move.py
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-Move a file in the safest way possible::
-
- >>> from django.core.files.move import file_move_safe
- >>> file_move_safe("/tmp/old_file", "/tmp/new_file")
-"""
-
-import os
-from django.core.files import locks
-
-try:
- from shutil import copystat
-except ImportError:
- import stat
- def copystat(src, dst):
- """Copy all stat info (mode bits, atime and mtime) from src to dst"""
- st = os.stat(src)
- mode = stat.S_IMODE(st.st_mode)
- if hasattr(os, 'utime'):
- os.utime(dst, (st.st_atime, st.st_mtime))
- if hasattr(os, 'chmod'):
- os.chmod(dst, mode)
-
-__all__ = ['file_move_safe']
-
-def _samefile(src, dst):
- # Macintosh, Unix.
- if hasattr(os.path,'samefile'):
- try:
- return os.path.samefile(src, dst)
- except OSError:
- return False
-
- # All other platforms: check for same pathname.
- return (os.path.normcase(os.path.abspath(src)) ==
- os.path.normcase(os.path.abspath(dst)))
-
-def file_move_safe(old_file_name, new_file_name, chunk_size = 1024*64, allow_overwrite=False):
- """
- Moves a file from one location to another in the safest way possible.
-
- First, tries ``os.rename``, which is simple but will break across filesystems.
- If that fails, streams manually from one file to another in pure Python.
-
- If the destination file exists and ``allow_overwrite`` is ``False``, this
- function will throw an ``IOError``.
- """
-
- # There's no reason to move if we don't have to.
- if _samefile(old_file_name, new_file_name):
- return
-
- try:
- os.rename(old_file_name, new_file_name)
- return
- except OSError:
- # This will happen with os.rename if moving to another filesystem
- # or when moving opened files on certain operating systems
- pass
-
- # first open the old file, so that it won't go away
- old_file = open(old_file_name, 'rb')
- try:
- # now open the new file, not forgetting allow_overwrite
- fd = os.open(new_file_name, os.O_WRONLY | os.O_CREAT | getattr(os, 'O_BINARY', 0) |
- (not allow_overwrite and os.O_EXCL or 0))
- try:
- locks.lock(fd, locks.LOCK_EX)
- current_chunk = None
- while current_chunk != '':
- current_chunk = old_file.read(chunk_size)
- os.write(fd, current_chunk)
- finally:
- locks.unlock(fd)
- os.close(fd)
- finally:
- old_file.close()
- copystat(old_file_name, new_file_name)
-
- try:
- os.remove(old_file_name)
- except OSError, e:
- # Certain operating systems (Cygwin and Windows)
- # fail when deleting opened files, ignore it. (For the
- # systems where this happens, temporary files will be auto-deleted
- # on close anyway.)
- if getattr(e, 'winerror', 0) != 32 and getattr(e, 'errno', 0) != 13:
- raise
diff --git a/parts/django/django/core/files/storage.py b/parts/django/django/core/files/storage.py
deleted file mode 100644
index 17e6947..0000000
--- a/parts/django/django/core/files/storage.py
+++ /dev/null
@@ -1,244 +0,0 @@
-import os
-import errno
-import urlparse
-import itertools
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation
-from django.core.files import locks, File
-from django.core.files.move import file_move_safe
-from django.utils.encoding import force_unicode
-from django.utils.functional import LazyObject
-from django.utils.importlib import import_module
-from django.utils.text import get_valid_filename
-from django.utils._os import safe_join
-
-__all__ = ('Storage', 'FileSystemStorage', 'DefaultStorage', 'default_storage')
-
-class Storage(object):
- """
- A base storage class, providing some default behaviors that all other
- storage systems can inherit or override, as necessary.
- """
-
- # The following methods represent a public interface to private methods.
- # These shouldn't be overridden by subclasses unless absolutely necessary.
-
- def open(self, name, mode='rb', mixin=None):
- """
- Retrieves the specified file from storage, using the optional mixin
- class to customize what features are available on the File returned.
- """
- file = self._open(name, mode)
- if mixin:
- # Add the mixin as a parent class of the File returned from storage.
- file.__class__ = type(mixin.__name__, (mixin, file.__class__), {})
- return file
-
- def save(self, name, content):
- """
- Saves new content to the file specified by name. The content should be a
- proper File object, ready to be read from the beginning.
- """
- # Get the proper name for the file, as it will actually be saved.
- if name is None:
- name = content.name
-
- name = self.get_available_name(name)
- name = self._save(name, content)
-
- # Store filenames with forward slashes, even on Windows
- return force_unicode(name.replace('\\', '/'))
-
- # These methods are part of the public API, with default implementations.
-
- def get_valid_name(self, name):
- """
- Returns a filename, based on the provided filename, that's suitable for
- use in the target storage system.
- """
- return get_valid_filename(name)
-
- def get_available_name(self, name):
- """
- Returns a filename that's free on the target storage system, and
- available for new content to be written to.
- """
- dir_name, file_name = os.path.split(name)
- file_root, file_ext = os.path.splitext(file_name)
- # If the filename already exists, add an underscore and a number (before
- # the file extension, if one exists) to the filename until the generated
- # filename doesn't exist.
- count = itertools.count(1)
- while self.exists(name):
- # file_ext includes the dot.
- name = os.path.join(dir_name, "%s_%s%s" % (file_root, count.next(), file_ext))
-
- return name
-
- def path(self, name):
- """
- Returns a local filesystem path where the file can be retrieved using
- Python's built-in open() function. Storage systems that can't be
- accessed using open() should *not* implement this method.
- """
- raise NotImplementedError("This backend doesn't support absolute paths.")
-
- # The following methods form the public API for storage systems, but with
- # no default implementations. Subclasses must implement *all* of these.
-
- def delete(self, name):
- """
- Deletes the specified file from the storage system.
- """
- raise NotImplementedError()
-
- def exists(self, name):
- """
- Returns True if a file referened by the given name already exists in the
- storage system, or False if the name is available for a new file.
- """
- raise NotImplementedError()
-
- def listdir(self, path):
- """
- Lists the contents of the specified path, returning a 2-tuple of lists;
- the first item being directories, the second item being files.
- """
- raise NotImplementedError()
-
- def size(self, name):
- """
- Returns the total size, in bytes, of the file specified by name.
- """
- raise NotImplementedError()
-
- def url(self, name):
- """
- Returns an absolute URL where the file's contents can be accessed
- directly by a Web browser.
- """
- raise NotImplementedError()
-
-class FileSystemStorage(Storage):
- """
- Standard filesystem storage
- """
-
- def __init__(self, location=None, base_url=None):
- if location is None:
- location = settings.MEDIA_ROOT
- if base_url is None:
- base_url = settings.MEDIA_URL
- self.location = os.path.abspath(location)
- self.base_url = base_url
-
- def _open(self, name, mode='rb'):
- return File(open(self.path(name), mode))
-
- def _save(self, name, content):
- full_path = self.path(name)
-
- directory = os.path.dirname(full_path)
- if not os.path.exists(directory):
- os.makedirs(directory)
- elif not os.path.isdir(directory):
- raise IOError("%s exists and is not a directory." % directory)
-
- # There's a potential race condition between get_available_name and
- # saving the file; it's possible that two threads might return the
- # same name, at which point all sorts of fun happens. So we need to
- # try to create the file, but if it already exists we have to go back
- # to get_available_name() and try again.
-
- while True:
- try:
- # This file has a file path that we can move.
- if hasattr(content, 'temporary_file_path'):
- file_move_safe(content.temporary_file_path(), full_path)
- content.close()
-
- # This is a normal uploadedfile that we can stream.
- else:
- # This fun binary flag incantation makes os.open throw an
- # OSError if the file already exists before we open it.
- fd = os.open(full_path, os.O_WRONLY | os.O_CREAT | os.O_EXCL | getattr(os, 'O_BINARY', 0))
- try:
- locks.lock(fd, locks.LOCK_EX)
- for chunk in content.chunks():
- os.write(fd, chunk)
- finally:
- locks.unlock(fd)
- os.close(fd)
- except OSError, e:
- if e.errno == errno.EEXIST:
- # Ooops, the file exists. We need a new file name.
- name = self.get_available_name(name)
- full_path = self.path(name)
- else:
- raise
- else:
- # OK, the file save worked. Break out of the loop.
- break
-
- if settings.FILE_UPLOAD_PERMISSIONS is not None:
- os.chmod(full_path, settings.FILE_UPLOAD_PERMISSIONS)
-
- return name
-
- def delete(self, name):
- name = self.path(name)
- # If the file exists, delete it from the filesystem.
- if os.path.exists(name):
- os.remove(name)
-
- def exists(self, name):
- return os.path.exists(self.path(name))
-
- def listdir(self, path):
- path = self.path(path)
- directories, files = [], []
- for entry in os.listdir(path):
- if os.path.isdir(os.path.join(path, entry)):
- directories.append(entry)
- else:
- files.append(entry)
- return directories, files
-
- def path(self, name):
- try:
- path = safe_join(self.location, name)
- except ValueError:
- raise SuspiciousOperation("Attempted access to '%s' denied." % name)
- return os.path.normpath(path)
-
- def size(self, name):
- return os.path.getsize(self.path(name))
-
- def url(self, name):
- if self.base_url is None:
- raise ValueError("This file is not accessible via a URL.")
- return urlparse.urljoin(self.base_url, name).replace('\\', '/')
-
-def get_storage_class(import_path=None):
- if import_path is None:
- import_path = settings.DEFAULT_FILE_STORAGE
- try:
- dot = import_path.rindex('.')
- except ValueError:
- raise ImproperlyConfigured("%s isn't a storage module." % import_path)
- module, classname = import_path[:dot], import_path[dot+1:]
- try:
- mod = import_module(module)
- except ImportError, e:
- raise ImproperlyConfigured('Error importing storage module %s: "%s"' % (module, e))
- try:
- return getattr(mod, classname)
- except AttributeError:
- raise ImproperlyConfigured('Storage module "%s" does not define a "%s" class.' % (module, classname))
-
-class DefaultStorage(LazyObject):
- def _setup(self):
- self._wrapped = get_storage_class()()
-
-default_storage = DefaultStorage()
diff --git a/parts/django/django/core/files/temp.py b/parts/django/django/core/files/temp.py
deleted file mode 100644
index b607291..0000000
--- a/parts/django/django/core/files/temp.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-The temp module provides a NamedTemporaryFile that can be re-opened on any
-platform. Most platforms use the standard Python tempfile.TemporaryFile class,
-but MS Windows users are given a custom class.
-
-This is needed because in Windows NT, the default implementation of
-NamedTemporaryFile uses the O_TEMPORARY flag, and thus cannot be reopened [1].
-
-1: http://mail.python.org/pipermail/python-list/2005-December/359474.html
-"""
-
-import os
-import tempfile
-from django.core.files.utils import FileProxyMixin
-
-__all__ = ('NamedTemporaryFile', 'gettempdir',)
-
-if os.name == 'nt':
- class TemporaryFile(FileProxyMixin):
- """
- Temporary file object constructor that works in Windows and supports
- reopening of the temporary file in windows.
- """
- def __init__(self, mode='w+b', bufsize=-1, suffix='', prefix='',
- dir=None):
- fd, name = tempfile.mkstemp(suffix=suffix, prefix=prefix,
- dir=dir)
- self.name = name
- self.file = os.fdopen(fd, mode, bufsize)
- self.close_called = False
-
- # Because close can be called during shutdown
- # we need to cache os.unlink and access it
- # as self.unlink only
- unlink = os.unlink
-
- def close(self):
- if not self.close_called:
- self.close_called = True
- try:
- self.file.close()
- except (OSError, IOError):
- pass
- try:
- self.unlink(self.name)
- except (OSError):
- pass
-
- def __del__(self):
- self.close()
-
- NamedTemporaryFile = TemporaryFile
-else:
- NamedTemporaryFile = tempfile.NamedTemporaryFile
-
-gettempdir = tempfile.gettempdir
diff --git a/parts/django/django/core/files/uploadedfile.py b/parts/django/django/core/files/uploadedfile.py
deleted file mode 100644
index 5178f0b..0000000
--- a/parts/django/django/core/files/uploadedfile.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""
-Classes representing uploaded files.
-"""
-
-import os
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.conf import settings
-from django.core.files.base import File
-from django.core.files import temp as tempfile
-from django.utils.encoding import smart_str
-
-__all__ = ('UploadedFile', 'TemporaryUploadedFile', 'InMemoryUploadedFile',
- 'SimpleUploadedFile')
-
-class UploadedFile(File):
- """
- A abstract uploaded file (``TemporaryUploadedFile`` and
- ``InMemoryUploadedFile`` are the built-in concrete subclasses).
-
- An ``UploadedFile`` object behaves somewhat like a file object and
- represents some file data that the user submitted with a form.
- """
- DEFAULT_CHUNK_SIZE = 64 * 2**10
-
- def __init__(self, file=None, name=None, content_type=None, size=None, charset=None):
- super(UploadedFile, self).__init__(file, name)
- self.size = size
- self.content_type = content_type
- self.charset = charset
-
- def __repr__(self):
- return "<%s: %s (%s)>" % (
- self.__class__.__name__, smart_str(self.name), self.content_type)
-
- def _get_name(self):
- return self._name
-
- def _set_name(self, name):
- # Sanitize the file name so that it can't be dangerous.
- if name is not None:
- # Just use the basename of the file -- anything else is dangerous.
- name = os.path.basename(name)
-
- # File names longer than 255 characters can cause problems on older OSes.
- if len(name) > 255:
- name, ext = os.path.splitext(name)
- name = name[:255 - len(ext)] + ext
-
- self._name = name
-
- name = property(_get_name, _set_name)
-
-class TemporaryUploadedFile(UploadedFile):
- """
- A file uploaded to a temporary location (i.e. stream-to-disk).
- """
- def __init__(self, name, content_type, size, charset):
- if settings.FILE_UPLOAD_TEMP_DIR:
- file = tempfile.NamedTemporaryFile(suffix='.upload',
- dir=settings.FILE_UPLOAD_TEMP_DIR)
- else:
- file = tempfile.NamedTemporaryFile(suffix='.upload')
- super(TemporaryUploadedFile, self).__init__(file, name, content_type, size, charset)
-
- def temporary_file_path(self):
- """
- Returns the full path of this file.
- """
- return self.file.name
-
- def close(self):
- try:
- return self.file.close()
- except OSError, e:
- if e.errno != 2:
- # Means the file was moved or deleted before the tempfile
- # could unlink it. Still sets self.file.close_called and
- # calls self.file.file.close() before the exception
- raise
-
-class InMemoryUploadedFile(UploadedFile):
- """
- A file uploaded into memory (i.e. stream-to-memory).
- """
- def __init__(self, file, field_name, name, content_type, size, charset):
- super(InMemoryUploadedFile, self).__init__(file, name, content_type, size, charset)
- self.field_name = field_name
-
- def open(self, mode=None):
- self.file.seek(0)
-
- def close(self):
- pass
-
- def chunks(self, chunk_size=None):
- self.file.seek(0)
- yield self.read()
-
- def multiple_chunks(self, chunk_size=None):
- # Since it's in memory, we'll never have multiple chunks.
- return False
-
-
-class SimpleUploadedFile(InMemoryUploadedFile):
- """
- A simple representation of a file, which just has content, size, and a name.
- """
- def __init__(self, name, content, content_type='text/plain'):
- content = content or ''
- super(SimpleUploadedFile, self).__init__(StringIO(content), None, name,
- content_type, len(content), None)
-
- def from_dict(cls, file_dict):
- """
- Creates a SimpleUploadedFile object from
- a dictionary object with the following keys:
- - filename
- - content-type
- - content
- """
- return cls(file_dict['filename'],
- file_dict['content'],
- file_dict.get('content-type', 'text/plain'))
- from_dict = classmethod(from_dict)
diff --git a/parts/django/django/core/files/uploadhandler.py b/parts/django/django/core/files/uploadhandler.py
deleted file mode 100644
index 2afb79e..0000000
--- a/parts/django/django/core/files/uploadhandler.py
+++ /dev/null
@@ -1,215 +0,0 @@
-"""
-Base file upload handler classes, and the built-in concrete subclasses
-"""
-
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.core.files.uploadedfile import TemporaryUploadedFile, InMemoryUploadedFile
-from django.utils import importlib
-
-__all__ = ['UploadFileException','StopUpload', 'SkipFile', 'FileUploadHandler',
- 'TemporaryFileUploadHandler', 'MemoryFileUploadHandler',
- 'load_handler', 'StopFutureHandlers']
-
-class UploadFileException(Exception):
- """
- Any error having to do with uploading files.
- """
- pass
-
-class StopUpload(UploadFileException):
- """
- This exception is raised when an upload must abort.
- """
- def __init__(self, connection_reset=False):
- """
- If ``connection_reset`` is ``True``, Django knows will halt the upload
- without consuming the rest of the upload. This will cause the browser to
- show a "connection reset" error.
- """
- self.connection_reset = connection_reset
-
- def __unicode__(self):
- if self.connection_reset:
- return u'StopUpload: Halt current upload.'
- else:
- return u'StopUpload: Consume request data, then halt.'
-
-class SkipFile(UploadFileException):
- """
- This exception is raised by an upload handler that wants to skip a given file.
- """
- pass
-
-class StopFutureHandlers(UploadFileException):
- """
- Upload handers that have handled a file and do not want future handlers to
- run should raise this exception instead of returning None.
- """
- pass
-
-class FileUploadHandler(object):
- """
- Base class for streaming upload handlers.
- """
- chunk_size = 64 * 2 ** 10 #: The default chunk size is 64 KB.
-
- def __init__(self, request=None):
- self.file_name = None
- self.content_type = None
- self.content_length = None
- self.charset = None
- self.request = request
-
- def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None):
- """
- Handle the raw input from the client.
-
- Parameters:
-
- :input_data:
- An object that supports reading via .read().
- :META:
- ``request.META``.
- :content_length:
- The (integer) value of the Content-Length header from the
- client.
- :boundary: The boundary from the Content-Type header. Be sure to
- prepend two '--'.
- """
- pass
-
- def new_file(self, field_name, file_name, content_type, content_length, charset=None):
- """
- Signal that a new file has been started.
-
- Warning: As with any data from the client, you should not trust
- content_length (and sometimes won't even get it).
- """
- self.field_name = field_name
- self.file_name = file_name
- self.content_type = content_type
- self.content_length = content_length
- self.charset = charset
-
- def receive_data_chunk(self, raw_data, start):
- """
- Receive data from the streamed upload parser. ``start`` is the position
- in the file of the chunk.
- """
- raise NotImplementedError()
-
- def file_complete(self, file_size):
- """
- Signal that a file has completed. File size corresponds to the actual
- size accumulated by all the chunks.
-
- Subclasses should return a valid ``UploadedFile`` object.
- """
- raise NotImplementedError()
-
- def upload_complete(self):
- """
- Signal that the upload is complete. Subclasses should perform cleanup
- that is necessary for this handler.
- """
- pass
-
-class TemporaryFileUploadHandler(FileUploadHandler):
- """
- Upload handler that streams data into a temporary file.
- """
- def __init__(self, *args, **kwargs):
- super(TemporaryFileUploadHandler, self).__init__(*args, **kwargs)
-
- def new_file(self, file_name, *args, **kwargs):
- """
- Create the file object to append to as data is coming in.
- """
- super(TemporaryFileUploadHandler, self).new_file(file_name, *args, **kwargs)
- self.file = TemporaryUploadedFile(self.file_name, self.content_type, 0, self.charset)
-
- def receive_data_chunk(self, raw_data, start):
- self.file.write(raw_data)
-
- def file_complete(self, file_size):
- self.file.seek(0)
- self.file.size = file_size
- return self.file
-
-class MemoryFileUploadHandler(FileUploadHandler):
- """
- File upload handler to stream uploads into memory (used for small files).
- """
-
- def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None):
- """
- Use the content_length to signal whether or not this handler should be in use.
- """
- # Check the content-length header to see if we should
- # If the post is too large, we cannot use the Memory handler.
- if content_length > settings.FILE_UPLOAD_MAX_MEMORY_SIZE:
- self.activated = False
- else:
- self.activated = True
-
- def new_file(self, *args, **kwargs):
- super(MemoryFileUploadHandler, self).new_file(*args, **kwargs)
- if self.activated:
- self.file = StringIO()
- raise StopFutureHandlers()
-
- def receive_data_chunk(self, raw_data, start):
- """
- Add the data to the StringIO file.
- """
- if self.activated:
- self.file.write(raw_data)
- else:
- return raw_data
-
- def file_complete(self, file_size):
- """
- Return a file object if we're activated.
- """
- if not self.activated:
- return
-
- self.file.seek(0)
- return InMemoryUploadedFile(
- file = self.file,
- field_name = self.field_name,
- name = self.file_name,
- content_type = self.content_type,
- size = file_size,
- charset = self.charset
- )
-
-
-def load_handler(path, *args, **kwargs):
- """
- Given a path to a handler, return an instance of that handler.
-
- E.g.::
- >>> load_handler('django.core.files.uploadhandler.TemporaryFileUploadHandler', request)
- <TemporaryFileUploadHandler object at 0x...>
-
- """
- i = path.rfind('.')
- module, attr = path[:i], path[i+1:]
- try:
- mod = importlib.import_module(module)
- except ImportError, e:
- raise ImproperlyConfigured('Error importing upload handler module %s: "%s"' % (module, e))
- except ValueError, e:
- raise ImproperlyConfigured('Error importing upload handler module. Is FILE_UPLOAD_HANDLERS a correctly defined list or tuple?')
- try:
- cls = getattr(mod, attr)
- except AttributeError:
- raise ImproperlyConfigured('Module "%s" does not define a "%s" upload handler backend' % (module, attr))
- return cls(*args, **kwargs)
diff --git a/parts/django/django/core/files/utils.py b/parts/django/django/core/files/utils.py
deleted file mode 100644
index 8cc212f..0000000
--- a/parts/django/django/core/files/utils.py
+++ /dev/null
@@ -1,29 +0,0 @@
-class FileProxyMixin(object):
- """
- A mixin class used to forward file methods to an underlaying file
- object. The internal file object has to be called "file"::
-
- class FileProxy(FileProxyMixin):
- def __init__(self, file):
- self.file = file
- """
-
- encoding = property(lambda self: self.file.encoding)
- fileno = property(lambda self: self.file.fileno)
- flush = property(lambda self: self.file.flush)
- isatty = property(lambda self: self.file.isatty)
- newlines = property(lambda self: self.file.newlines)
- read = property(lambda self: self.file.read)
- readinto = property(lambda self: self.file.readinto)
- readline = property(lambda self: self.file.readline)
- readlines = property(lambda self: self.file.readlines)
- seek = property(lambda self: self.file.seek)
- softspace = property(lambda self: self.file.softspace)
- tell = property(lambda self: self.file.tell)
- truncate = property(lambda self: self.file.truncate)
- write = property(lambda self: self.file.write)
- writelines = property(lambda self: self.file.writelines)
- xreadlines = property(lambda self: self.file.xreadlines)
-
- def __iter__(self):
- return iter(self.file)
diff --git a/parts/django/django/core/handlers/__init__.py b/parts/django/django/core/handlers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/core/handlers/__init__.py
+++ /dev/null
diff --git a/parts/django/django/core/handlers/base.py b/parts/django/django/core/handlers/base.py
deleted file mode 100644
index 45f8445..0000000
--- a/parts/django/django/core/handlers/base.py
+++ /dev/null
@@ -1,220 +0,0 @@
-import sys
-
-from django import http
-from django.core import signals
-from django.utils.encoding import force_unicode
-from django.utils.importlib import import_module
-
-class BaseHandler(object):
- # Changes that are always applied to a response (in this order).
- response_fixes = [
- http.fix_location_header,
- http.conditional_content_removal,
- http.fix_IE_for_attach,
- http.fix_IE_for_vary,
- ]
-
- def __init__(self):
- self._request_middleware = self._view_middleware = self._response_middleware = self._exception_middleware = None
-
- def load_middleware(self):
- """
- Populate middleware lists from settings.MIDDLEWARE_CLASSES.
-
- Must be called after the environment is fixed (see __call__).
- """
- from django.conf import settings
- from django.core import exceptions
- self._view_middleware = []
- self._response_middleware = []
- self._exception_middleware = []
-
- request_middleware = []
- for middleware_path in settings.MIDDLEWARE_CLASSES:
- try:
- dot = middleware_path.rindex('.')
- except ValueError:
- raise exceptions.ImproperlyConfigured('%s isn\'t a middleware module' % middleware_path)
- mw_module, mw_classname = middleware_path[:dot], middleware_path[dot+1:]
- try:
- mod = import_module(mw_module)
- except ImportError, e:
- raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
- try:
- mw_class = getattr(mod, mw_classname)
- except AttributeError:
- raise exceptions.ImproperlyConfigured('Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname))
-
- try:
- mw_instance = mw_class()
- except exceptions.MiddlewareNotUsed:
- continue
-
- if hasattr(mw_instance, 'process_request'):
- request_middleware.append(mw_instance.process_request)
- if hasattr(mw_instance, 'process_view'):
- self._view_middleware.append(mw_instance.process_view)
- if hasattr(mw_instance, 'process_response'):
- self._response_middleware.insert(0, mw_instance.process_response)
- if hasattr(mw_instance, 'process_exception'):
- self._exception_middleware.insert(0, mw_instance.process_exception)
-
- # We only assign to this when initialization is complete as it is used
- # as a flag for initialization being complete.
- self._request_middleware = request_middleware
-
- def get_response(self, request):
- "Returns an HttpResponse object for the given HttpRequest"
- from django.core import exceptions, urlresolvers
- from django.conf import settings
-
- try:
- try:
- # Setup default url resolver for this thread.
- urlconf = settings.ROOT_URLCONF
- urlresolvers.set_urlconf(urlconf)
- resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
-
- # Apply request middleware
- for middleware_method in self._request_middleware:
- response = middleware_method(request)
- if response:
- return response
-
- if hasattr(request, "urlconf"):
- # Reset url resolver with a custom urlconf.
- urlconf = request.urlconf
- urlresolvers.set_urlconf(urlconf)
- resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
-
- callback, callback_args, callback_kwargs = resolver.resolve(
- request.path_info)
-
- # Apply view middleware
- for middleware_method in self._view_middleware:
- response = middleware_method(request, callback, callback_args, callback_kwargs)
- if response:
- return response
-
- try:
- response = callback(request, *callback_args, **callback_kwargs)
- except Exception, e:
- # If the view raised an exception, run it through exception
- # middleware, and if the exception middleware returns a
- # response, use that. Otherwise, reraise the exception.
- for middleware_method in self._exception_middleware:
- response = middleware_method(request, e)
- if response:
- return response
- raise
-
- # Complain if the view returned None (a common error).
- if response is None:
- try:
- view_name = callback.func_name # If it's a function
- except AttributeError:
- view_name = callback.__class__.__name__ + '.__call__' # If it's a class
- raise ValueError("The view %s.%s didn't return an HttpResponse object." % (callback.__module__, view_name))
-
- return response
- except http.Http404, e:
- if settings.DEBUG:
- from django.views import debug
- return debug.technical_404_response(request, e)
- else:
- try:
- callback, param_dict = resolver.resolve404()
- return callback(request, **param_dict)
- except:
- try:
- return self.handle_uncaught_exception(request, resolver, sys.exc_info())
- finally:
- receivers = signals.got_request_exception.send(sender=self.__class__, request=request)
- except exceptions.PermissionDenied:
- return http.HttpResponseForbidden('<h1>Permission denied</h1>')
- except SystemExit:
- # Allow sys.exit() to actually exit. See tickets #1023 and #4701
- raise
- except: # Handle everything else, including SuspiciousOperation, etc.
- # Get the exception info now, in case another exception is thrown later.
- receivers = signals.got_request_exception.send(sender=self.__class__, request=request)
- return self.handle_uncaught_exception(request, resolver, sys.exc_info())
- finally:
- # Reset URLconf for this thread on the way out for complete
- # isolation of request.urlconf
- urlresolvers.set_urlconf(None)
-
- def handle_uncaught_exception(self, request, resolver, exc_info):
- """
- Processing for any otherwise uncaught exceptions (those that will
- generate HTTP 500 responses). Can be overridden by subclasses who want
- customised 500 handling.
-
- Be *very* careful when overriding this because the error could be
- caused by anything, so assuming something like the database is always
- available would be an error.
- """
- from django.conf import settings
- from django.core.mail import mail_admins
-
- if settings.DEBUG_PROPAGATE_EXCEPTIONS:
- raise
-
- if settings.DEBUG:
- from django.views import debug
- return debug.technical_500_response(request, *exc_info)
-
- # When DEBUG is False, send an error message to the admins.
- subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
- try:
- request_repr = repr(request)
- except:
- request_repr = "Request repr() unavailable"
- message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
- mail_admins(subject, message, fail_silently=True)
- # If Http500 handler is not installed, re-raise last exception
- if resolver.urlconf_module is None:
- raise exc_info[1], None, exc_info[2]
- # Return an HttpResponse that displays a friendly error message.
- callback, param_dict = resolver.resolve500()
- return callback(request, **param_dict)
-
- def _get_traceback(self, exc_info=None):
- "Helper function to return the traceback as a string"
- import traceback
- return '\n'.join(traceback.format_exception(*(exc_info or sys.exc_info())))
-
- def apply_response_fixes(self, request, response):
- """
- Applies each of the functions in self.response_fixes to the request and
- response, modifying the response in the process. Returns the new
- response.
- """
- for func in self.response_fixes:
- response = func(request, response)
- return response
-
-def get_script_name(environ):
- """
- Returns the equivalent of the HTTP request's SCRIPT_NAME environment
- variable. If Apache mod_rewrite has been used, returns what would have been
- the script name prior to any rewriting (so it's the script name as seen
- from the client's perspective), unless DJANGO_USE_POST_REWRITE is set (to
- anything).
- """
- from django.conf import settings
- if settings.FORCE_SCRIPT_NAME is not None:
- return force_unicode(settings.FORCE_SCRIPT_NAME)
-
- # If Apache's mod_rewrite had a whack at the URL, Apache set either
- # SCRIPT_URL or REDIRECT_URL to the full resource URL before applying any
- # rewrites. Unfortunately not every Web server (lighttpd!) passes this
- # information through all the time, so FORCE_SCRIPT_NAME, above, is still
- # needed.
- script_url = environ.get('SCRIPT_URL', u'')
- if not script_url:
- script_url = environ.get('REDIRECT_URL', u'')
- if script_url:
- return force_unicode(script_url[:-len(environ.get('PATH_INFO', ''))])
- return force_unicode(environ.get('SCRIPT_NAME', u''))
-
diff --git a/parts/django/django/core/handlers/modpython.py b/parts/django/django/core/handlers/modpython.py
deleted file mode 100644
index b1e3e17..0000000
--- a/parts/django/django/core/handlers/modpython.py
+++ /dev/null
@@ -1,228 +0,0 @@
-import os
-from pprint import pformat
-
-from django import http
-from django.core import signals
-from django.core.handlers.base import BaseHandler
-from django.core.urlresolvers import set_script_prefix
-from django.utils import datastructures
-from django.utils.encoding import force_unicode, smart_str, iri_to_uri
-
-# NOTE: do *not* import settings (or any module which eventually imports
-# settings) until after ModPythonHandler has been called; otherwise os.environ
-# won't be set up correctly (with respect to settings).
-
-class ModPythonRequest(http.HttpRequest):
- def __init__(self, req):
- self._req = req
- # FIXME: This isn't ideal. The request URI may be encoded (it's
- # non-normalized) slightly differently to the "real" SCRIPT_NAME
- # and PATH_INFO values. This causes problems when we compute path_info,
- # below. For now, don't use script names that will be subject to
- # encoding/decoding.
- self.path = force_unicode(req.uri)
- root = req.get_options().get('django.root', '')
- self.django_root = root
- # req.path_info isn't necessarily computed correctly in all
- # circumstances (it's out of mod_python's control a bit), so we use
- # req.uri and some string manipulations to get the right value.
- if root and req.uri.startswith(root):
- self.path_info = force_unicode(req.uri[len(root):])
- else:
- self.path_info = self.path
- if not self.path_info:
- # Django prefers empty paths to be '/', rather than '', to give us
- # a common start character for URL patterns. So this is a little
- # naughty, but also pretty harmless.
- self.path_info = u'/'
- self._post_parse_error = False
-
- def __repr__(self):
- # Since this is called as part of error handling, we need to be very
- # robust against potentially malformed input.
- try:
- get = pformat(self.GET)
- except:
- get = '<could not parse>'
- if self._post_parse_error:
- post = '<could not parse>'
- else:
- try:
- post = pformat(self.POST)
- except:
- post = '<could not parse>'
- try:
- cookies = pformat(self.COOKIES)
- except:
- cookies = '<could not parse>'
- try:
- meta = pformat(self.META)
- except:
- meta = '<could not parse>'
- return smart_str(u'<ModPythonRequest\npath:%s,\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' %
- (self.path, unicode(get), unicode(post),
- unicode(cookies), unicode(meta)))
-
- def get_full_path(self):
- # RFC 3986 requires self._req.args to be in the ASCII range, but this
- # doesn't always happen, so rather than crash, we defensively encode it.
- return '%s%s' % (self.path, self._req.args and ('?' + iri_to_uri(self._req.args)) or '')
-
- def is_secure(self):
- try:
- return self._req.is_https()
- except AttributeError:
- # mod_python < 3.2.10 doesn't have req.is_https().
- return self._req.subprocess_env.get('HTTPS', '').lower() in ('on', '1')
-
- def _load_post_and_files(self):
- "Populates self._post and self._files"
- if self.method != 'POST':
- self._post, self._files = http.QueryDict('', encoding=self._encoding), datastructures.MultiValueDict()
- return
-
- if 'content-type' in self._req.headers_in and self._req.headers_in['content-type'].startswith('multipart'):
- self._raw_post_data = ''
- try:
- self._post, self._files = self.parse_file_upload(self.META, self._req)
- except:
- # See django.core.handlers.wsgi.WSGIHandler for an explanation
- # of what's going on here.
- self._post = http.QueryDict('')
- self._files = datastructures.MultiValueDict()
- self._post_parse_error = True
- raise
- else:
- self._post, self._files = http.QueryDict(self.raw_post_data, encoding=self._encoding), datastructures.MultiValueDict()
-
- def _get_request(self):
- if not hasattr(self, '_request'):
- self._request = datastructures.MergeDict(self.POST, self.GET)
- return self._request
-
- def _get_get(self):
- if not hasattr(self, '_get'):
- self._get = http.QueryDict(self._req.args, encoding=self._encoding)
- return self._get
-
- def _set_get(self, get):
- self._get = get
-
- def _get_post(self):
- if not hasattr(self, '_post'):
- self._load_post_and_files()
- return self._post
-
- def _set_post(self, post):
- self._post = post
-
- def _get_cookies(self):
- if not hasattr(self, '_cookies'):
- self._cookies = http.parse_cookie(self._req.headers_in.get('cookie', ''))
- return self._cookies
-
- def _set_cookies(self, cookies):
- self._cookies = cookies
-
- def _get_files(self):
- if not hasattr(self, '_files'):
- self._load_post_and_files()
- return self._files
-
- def _get_meta(self):
- "Lazy loader that returns self.META dictionary"
- if not hasattr(self, '_meta'):
- self._meta = {
- 'AUTH_TYPE': self._req.ap_auth_type,
- 'CONTENT_LENGTH': self._req.headers_in.get('content-length', 0),
- 'CONTENT_TYPE': self._req.headers_in.get('content-type'),
- 'GATEWAY_INTERFACE': 'CGI/1.1',
- 'PATH_INFO': self.path_info,
- 'PATH_TRANSLATED': None, # Not supported
- 'QUERY_STRING': self._req.args,
- 'REMOTE_ADDR': self._req.connection.remote_ip,
- 'REMOTE_HOST': None, # DNS lookups not supported
- 'REMOTE_IDENT': self._req.connection.remote_logname,
- 'REMOTE_USER': self._req.user,
- 'REQUEST_METHOD': self._req.method,
- 'SCRIPT_NAME': self.django_root,
- 'SERVER_NAME': self._req.server.server_hostname,
- 'SERVER_PORT': self._req.connection.local_addr[1],
- 'SERVER_PROTOCOL': self._req.protocol,
- 'SERVER_SOFTWARE': 'mod_python'
- }
- for key, value in self._req.headers_in.items():
- key = 'HTTP_' + key.upper().replace('-', '_')
- self._meta[key] = value
- return self._meta
-
- def _get_raw_post_data(self):
- try:
- return self._raw_post_data
- except AttributeError:
- self._raw_post_data = self._req.read()
- return self._raw_post_data
-
- def _get_method(self):
- return self.META['REQUEST_METHOD'].upper()
-
- GET = property(_get_get, _set_get)
- POST = property(_get_post, _set_post)
- COOKIES = property(_get_cookies, _set_cookies)
- FILES = property(_get_files)
- META = property(_get_meta)
- REQUEST = property(_get_request)
- raw_post_data = property(_get_raw_post_data)
- method = property(_get_method)
-
-class ModPythonHandler(BaseHandler):
- request_class = ModPythonRequest
-
- def __call__(self, req):
- # mod_python fakes the environ, and thus doesn't process SetEnv. This fixes that
- os.environ.update(req.subprocess_env)
-
- # now that the environ works we can see the correct settings, so imports
- # that use settings now can work
- from django.conf import settings
-
- # if we need to set up middleware, now that settings works we can do it now.
- if self._request_middleware is None:
- self.load_middleware()
-
- set_script_prefix(req.get_options().get('django.root', ''))
- signals.request_started.send(sender=self.__class__)
- try:
- try:
- request = self.request_class(req)
- except UnicodeDecodeError:
- response = http.HttpResponseBadRequest()
- else:
- response = self.get_response(request)
-
- # Apply response middleware
- for middleware_method in self._response_middleware:
- response = middleware_method(request, response)
- response = self.apply_response_fixes(request, response)
- finally:
- signals.request_finished.send(sender=self.__class__)
-
- # Convert our custom HttpResponse object back into the mod_python req.
- req.content_type = response['Content-Type']
- for key, value in response.items():
- if key != 'content-type':
- req.headers_out[str(key)] = str(value)
- for c in response.cookies.values():
- req.headers_out.add('Set-Cookie', c.output(header=''))
- req.status = response.status_code
- try:
- for chunk in response:
- req.write(chunk)
- finally:
- response.close()
-
- return 0 # mod_python.apache.OK
-
-def handler(req):
- # mod_python hooks into this function.
- return ModPythonHandler()(req)
diff --git a/parts/django/django/core/handlers/profiler-hotshot.py b/parts/django/django/core/handlers/profiler-hotshot.py
deleted file mode 100644
index 6cf94b0..0000000
--- a/parts/django/django/core/handlers/profiler-hotshot.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import hotshot, time, os
-from django.core.handlers.modpython import ModPythonHandler
-
-PROFILE_DATA_DIR = "/var/log/cmsprofile"
-
-def handler(req):
- '''
- Handler that uses hotshot to store profile data.
-
- Stores profile data in PROFILE_DATA_DIR. Since hotshot has no way (that I
- know of) to append profile data to a single file, each request gets its own
- profile. The file names are in the format <url>.<n>.prof where <url> is
- the request path with "/" replaced by ".", and <n> is a timestamp with
- microseconds to prevent overwriting files.
-
- Use the gather_profile_stats.py script to gather these individual request
- profiles into aggregated profiles by request path.
- '''
- profname = "%s.%.3f.prof" % (req.uri.strip("/").replace('/', '.'), time.time())
- profname = os.path.join(PROFILE_DATA_DIR, profname)
- prof = hotshot.Profile(profname)
- return prof.runcall(ModPythonHandler(), req)
diff --git a/parts/django/django/core/handlers/wsgi.py b/parts/django/django/core/handlers/wsgi.py
deleted file mode 100644
index 927b098..0000000
--- a/parts/django/django/core/handlers/wsgi.py
+++ /dev/null
@@ -1,260 +0,0 @@
-from threading import Lock
-from pprint import pformat
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django import http
-from django.core import signals
-from django.core.handlers import base
-from django.core.urlresolvers import set_script_prefix
-from django.utils import datastructures
-from django.utils.encoding import force_unicode, iri_to_uri
-
-# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
-STATUS_CODE_TEXT = {
- 100: 'CONTINUE',
- 101: 'SWITCHING PROTOCOLS',
- 200: 'OK',
- 201: 'CREATED',
- 202: 'ACCEPTED',
- 203: 'NON-AUTHORITATIVE INFORMATION',
- 204: 'NO CONTENT',
- 205: 'RESET CONTENT',
- 206: 'PARTIAL CONTENT',
- 300: 'MULTIPLE CHOICES',
- 301: 'MOVED PERMANENTLY',
- 302: 'FOUND',
- 303: 'SEE OTHER',
- 304: 'NOT MODIFIED',
- 305: 'USE PROXY',
- 306: 'RESERVED',
- 307: 'TEMPORARY REDIRECT',
- 400: 'BAD REQUEST',
- 401: 'UNAUTHORIZED',
- 402: 'PAYMENT REQUIRED',
- 403: 'FORBIDDEN',
- 404: 'NOT FOUND',
- 405: 'METHOD NOT ALLOWED',
- 406: 'NOT ACCEPTABLE',
- 407: 'PROXY AUTHENTICATION REQUIRED',
- 408: 'REQUEST TIMEOUT',
- 409: 'CONFLICT',
- 410: 'GONE',
- 411: 'LENGTH REQUIRED',
- 412: 'PRECONDITION FAILED',
- 413: 'REQUEST ENTITY TOO LARGE',
- 414: 'REQUEST-URI TOO LONG',
- 415: 'UNSUPPORTED MEDIA TYPE',
- 416: 'REQUESTED RANGE NOT SATISFIABLE',
- 417: 'EXPECTATION FAILED',
- 500: 'INTERNAL SERVER ERROR',
- 501: 'NOT IMPLEMENTED',
- 502: 'BAD GATEWAY',
- 503: 'SERVICE UNAVAILABLE',
- 504: 'GATEWAY TIMEOUT',
- 505: 'HTTP VERSION NOT SUPPORTED',
-}
-
-def safe_copyfileobj(fsrc, fdst, length=16*1024, size=0):
- """
- A version of shutil.copyfileobj that will not read more than 'size' bytes.
- This makes it safe from clients sending more than CONTENT_LENGTH bytes of
- data in the body.
- """
- if not size:
- return
- while size > 0:
- buf = fsrc.read(min(length, size))
- if not buf:
- break
- fdst.write(buf)
- size -= len(buf)
-
-class WSGIRequest(http.HttpRequest):
- def __init__(self, environ):
- script_name = base.get_script_name(environ)
- path_info = force_unicode(environ.get('PATH_INFO', u'/'))
- if not path_info or path_info == script_name:
- # Sometimes PATH_INFO exists, but is empty (e.g. accessing
- # the SCRIPT_NAME URL without a trailing slash). We really need to
- # operate as if they'd requested '/'. Not amazingly nice to force
- # the path like this, but should be harmless.
- #
- # (The comparison of path_info to script_name is to work around an
- # apparent bug in flup 1.0.1. Se Django ticket #8490).
- path_info = u'/'
- self.environ = environ
- self.path_info = path_info
- self.path = '%s%s' % (script_name, path_info)
- self.META = environ
- self.META['PATH_INFO'] = path_info
- self.META['SCRIPT_NAME'] = script_name
- self.method = environ['REQUEST_METHOD'].upper()
- self._post_parse_error = False
-
- def __repr__(self):
- # Since this is called as part of error handling, we need to be very
- # robust against potentially malformed input.
- try:
- get = pformat(self.GET)
- except:
- get = '<could not parse>'
- if self._post_parse_error:
- post = '<could not parse>'
- else:
- try:
- post = pformat(self.POST)
- except:
- post = '<could not parse>'
- try:
- cookies = pformat(self.COOKIES)
- except:
- cookies = '<could not parse>'
- try:
- meta = pformat(self.META)
- except:
- meta = '<could not parse>'
- return '<WSGIRequest\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' % \
- (get, post, cookies, meta)
-
- def get_full_path(self):
- # RFC 3986 requires query string arguments to be in the ASCII range.
- # Rather than crash if this doesn't happen, we encode defensively.
- return '%s%s' % (self.path, self.environ.get('QUERY_STRING', '') and ('?' + iri_to_uri(self.environ.get('QUERY_STRING', ''))) or '')
-
- def is_secure(self):
- return 'wsgi.url_scheme' in self.environ \
- and self.environ['wsgi.url_scheme'] == 'https'
-
- def _load_post_and_files(self):
- # Populates self._post and self._files
- if self.method == 'POST':
- if self.environ.get('CONTENT_TYPE', '').startswith('multipart'):
- self._raw_post_data = ''
- try:
- self._post, self._files = self.parse_file_upload(self.META, self.environ['wsgi.input'])
- except:
- # An error occured while parsing POST data. Since when
- # formatting the error the request handler might access
- # self.POST, set self._post and self._file to prevent
- # attempts to parse POST data again.
- self._post = http.QueryDict('')
- self._files = datastructures.MultiValueDict()
- # Mark that an error occured. This allows self.__repr__ to
- # be explicit about it instead of simply representing an
- # empty POST
- self._post_parse_error = True
- raise
- else:
- self._post, self._files = http.QueryDict(self.raw_post_data, encoding=self._encoding), datastructures.MultiValueDict()
- else:
- self._post, self._files = http.QueryDict('', encoding=self._encoding), datastructures.MultiValueDict()
-
- def _get_request(self):
- if not hasattr(self, '_request'):
- self._request = datastructures.MergeDict(self.POST, self.GET)
- return self._request
-
- def _get_get(self):
- if not hasattr(self, '_get'):
- # The WSGI spec says 'QUERY_STRING' may be absent.
- self._get = http.QueryDict(self.environ.get('QUERY_STRING', ''), encoding=self._encoding)
- return self._get
-
- def _set_get(self, get):
- self._get = get
-
- def _get_post(self):
- if not hasattr(self, '_post'):
- self._load_post_and_files()
- return self._post
-
- def _set_post(self, post):
- self._post = post
-
- def _get_cookies(self):
- if not hasattr(self, '_cookies'):
- self._cookies = http.parse_cookie(self.environ.get('HTTP_COOKIE', ''))
- return self._cookies
-
- def _set_cookies(self, cookies):
- self._cookies = cookies
-
- def _get_files(self):
- if not hasattr(self, '_files'):
- self._load_post_and_files()
- return self._files
-
- def _get_raw_post_data(self):
- try:
- return self._raw_post_data
- except AttributeError:
- buf = StringIO()
- try:
- # CONTENT_LENGTH might be absent if POST doesn't have content at all (lighttpd)
- content_length = int(self.environ.get('CONTENT_LENGTH', 0))
- except (ValueError, TypeError):
- # If CONTENT_LENGTH was empty string or not an integer, don't
- # error out. We've also seen None passed in here (against all
- # specs, but see ticket #8259), so we handle TypeError as well.
- content_length = 0
- if content_length > 0:
- safe_copyfileobj(self.environ['wsgi.input'], buf,
- size=content_length)
- self._raw_post_data = buf.getvalue()
- buf.close()
- return self._raw_post_data
-
- GET = property(_get_get, _set_get)
- POST = property(_get_post, _set_post)
- COOKIES = property(_get_cookies, _set_cookies)
- FILES = property(_get_files)
- REQUEST = property(_get_request)
- raw_post_data = property(_get_raw_post_data)
-
-class WSGIHandler(base.BaseHandler):
- initLock = Lock()
- request_class = WSGIRequest
-
- def __call__(self, environ, start_response):
- from django.conf import settings
-
- # Set up middleware if needed. We couldn't do this earlier, because
- # settings weren't available.
- if self._request_middleware is None:
- self.initLock.acquire()
- # Check that middleware is still uninitialised.
- if self._request_middleware is None:
- self.load_middleware()
- self.initLock.release()
-
- set_script_prefix(base.get_script_name(environ))
- signals.request_started.send(sender=self.__class__)
- try:
- try:
- request = self.request_class(environ)
- except UnicodeDecodeError:
- response = http.HttpResponseBadRequest()
- else:
- response = self.get_response(request)
-
- # Apply response middleware
- for middleware_method in self._response_middleware:
- response = middleware_method(request, response)
- response = self.apply_response_fixes(request, response)
- finally:
- signals.request_finished.send(sender=self.__class__)
-
- try:
- status_text = STATUS_CODE_TEXT[response.status_code]
- except KeyError:
- status_text = 'UNKNOWN STATUS CODE'
- status = '%s %s' % (response.status_code, status_text)
- response_headers = [(str(k), str(v)) for k, v in response.items()]
- for c in response.cookies.values():
- response_headers.append(('Set-Cookie', str(c.output(header=''))))
- start_response(status, response_headers)
- return response
-
diff --git a/parts/django/django/core/mail/__init__.py b/parts/django/django/core/mail/__init__.py
deleted file mode 100644
index 8a2d9bf..0000000
--- a/parts/django/django/core/mail/__init__.py
+++ /dev/null
@@ -1,111 +0,0 @@
-"""
-Tools for sending email.
-"""
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.utils.importlib import import_module
-
-# Imported for backwards compatibility, and for the sake
-# of a cleaner namespace. These symbols used to be in
-# django/core/mail.py before the introduction of email
-# backends and the subsequent reorganization (See #10355)
-from django.core.mail.utils import CachedDnsName, DNS_NAME
-from django.core.mail.message import \
- EmailMessage, EmailMultiAlternatives, \
- SafeMIMEText, SafeMIMEMultipart, \
- DEFAULT_ATTACHMENT_MIME_TYPE, make_msgid, \
- BadHeaderError, forbid_multi_line_headers
-from django.core.mail.backends.smtp import EmailBackend as _SMTPConnection
-
-def get_connection(backend=None, fail_silently=False, **kwds):
- """Load an e-mail backend and return an instance of it.
-
- If backend is None (default) settings.EMAIL_BACKEND is used.
-
- Both fail_silently and other keyword arguments are used in the
- constructor of the backend.
- """
- path = backend or settings.EMAIL_BACKEND
- try:
- mod_name, klass_name = path.rsplit('.', 1)
- mod = import_module(mod_name)
- except ImportError, e:
- raise ImproperlyConfigured(('Error importing email backend module %s: "%s"'
- % (mod_name, e)))
- try:
- klass = getattr(mod, klass_name)
- except AttributeError:
- raise ImproperlyConfigured(('Module "%s" does not define a '
- '"%s" class' % (mod_name, klass_name)))
- return klass(fail_silently=fail_silently, **kwds)
-
-
-def send_mail(subject, message, from_email, recipient_list,
- fail_silently=False, auth_user=None, auth_password=None,
- connection=None):
- """
- Easy wrapper for sending a single message to a recipient list. All members
- of the recipient list will see the other recipients in the 'To' field.
-
- If auth_user is None, the EMAIL_HOST_USER setting is used.
- If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
-
- Note: The API for this method is frozen. New code wanting to extend the
- functionality should use the EmailMessage class directly.
- """
- connection = connection or get_connection(username=auth_user,
- password=auth_password,
- fail_silently=fail_silently)
- return EmailMessage(subject, message, from_email, recipient_list,
- connection=connection).send()
-
-
-def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
- auth_password=None, connection=None):
- """
- Given a datatuple of (subject, message, from_email, recipient_list), sends
- each message to each recipient list. Returns the number of e-mails sent.
-
- If from_email is None, the DEFAULT_FROM_EMAIL setting is used.
- If auth_user and auth_password are set, they're used to log in.
- If auth_user is None, the EMAIL_HOST_USER setting is used.
- If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
-
- Note: The API for this method is frozen. New code wanting to extend the
- functionality should use the EmailMessage class directly.
- """
- connection = connection or get_connection(username=auth_user,
- password=auth_password,
- fail_silently=fail_silently)
- messages = [EmailMessage(subject, message, sender, recipient)
- for subject, message, sender, recipient in datatuple]
- return connection.send_messages(messages)
-
-
-def mail_admins(subject, message, fail_silently=False, connection=None):
- """Sends a message to the admins, as defined by the ADMINS setting."""
- if not settings.ADMINS:
- return
- EmailMessage(u'%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message,
- settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS],
- connection=connection).send(fail_silently=fail_silently)
-
-
-def mail_managers(subject, message, fail_silently=False, connection=None):
- """Sends a message to the managers, as defined by the MANAGERS setting."""
- if not settings.MANAGERS:
- return
- EmailMessage(u'%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message,
- settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS],
- connection=connection).send(fail_silently=fail_silently)
-
-
-class SMTPConnection(_SMTPConnection):
- def __init__(self, *args, **kwds):
- import warnings
- warnings.warn(
- 'mail.SMTPConnection is deprecated; use mail.get_connection() instead.',
- PendingDeprecationWarning
- )
- super(SMTPConnection, self).__init__(*args, **kwds)
diff --git a/parts/django/django/core/mail/backends/__init__.py b/parts/django/django/core/mail/backends/__init__.py
deleted file mode 100644
index 5973b49..0000000
--- a/parts/django/django/core/mail/backends/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# Mail backends shipped with Django.
diff --git a/parts/django/django/core/mail/backends/base.py b/parts/django/django/core/mail/backends/base.py
deleted file mode 100644
index 9a30928..0000000
--- a/parts/django/django/core/mail/backends/base.py
+++ /dev/null
@@ -1,39 +0,0 @@
-"""Base email backend class."""
-
-class BaseEmailBackend(object):
- """
- Base class for email backend implementations.
-
- Subclasses must at least overwrite send_messages().
- """
- def __init__(self, fail_silently=False, **kwargs):
- self.fail_silently = fail_silently
-
- def open(self):
- """Open a network connection.
-
- This method can be overwritten by backend implementations to
- open a network connection.
-
- It's up to the backend implementation to track the status of
- a network connection if it's needed by the backend.
-
- This method can be called by applications to force a single
- network connection to be used when sending mails. See the
- send_messages() method of the SMTP backend for a reference
- implementation.
-
- The default implementation does nothing.
- """
- pass
-
- def close(self):
- """Close a network connection."""
- pass
-
- def send_messages(self, email_messages):
- """
- Sends one or more EmailMessage objects and returns the number of email
- messages sent.
- """
- raise NotImplementedError
diff --git a/parts/django/django/core/mail/backends/console.py b/parts/django/django/core/mail/backends/console.py
deleted file mode 100644
index fa71f38..0000000
--- a/parts/django/django/core/mail/backends/console.py
+++ /dev/null
@@ -1,37 +0,0 @@
-"""
-Email backend that writes messages to console instead of sending them.
-"""
-import sys
-import threading
-
-from django.core.mail.backends.base import BaseEmailBackend
-
-class EmailBackend(BaseEmailBackend):
- def __init__(self, *args, **kwargs):
- self.stream = kwargs.pop('stream', sys.stdout)
- self._lock = threading.RLock()
- super(EmailBackend, self).__init__(*args, **kwargs)
-
- def send_messages(self, email_messages):
- """Write all messages to the stream in a thread-safe way."""
- if not email_messages:
- return
- self._lock.acquire()
- try:
- # The try-except is nested to allow for
- # Python 2.4 support (Refs #12147)
- try:
- stream_created = self.open()
- for message in email_messages:
- self.stream.write('%s\n' % message.message().as_string())
- self.stream.write('-'*79)
- self.stream.write('\n')
- self.stream.flush() # flush after each message
- if stream_created:
- self.close()
- except:
- if not self.fail_silently:
- raise
- finally:
- self._lock.release()
- return len(email_messages)
diff --git a/parts/django/django/core/mail/backends/dummy.py b/parts/django/django/core/mail/backends/dummy.py
deleted file mode 100644
index 273aa0d..0000000
--- a/parts/django/django/core/mail/backends/dummy.py
+++ /dev/null
@@ -1,9 +0,0 @@
-"""
-Dummy email backend that does nothing.
-"""
-
-from django.core.mail.backends.base import BaseEmailBackend
-
-class EmailBackend(BaseEmailBackend):
- def send_messages(self, email_messages):
- return len(email_messages)
diff --git a/parts/django/django/core/mail/backends/filebased.py b/parts/django/django/core/mail/backends/filebased.py
deleted file mode 100644
index 3f6b99b..0000000
--- a/parts/django/django/core/mail/backends/filebased.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""Email backend that writes messages to a file."""
-
-import datetime
-import os
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.core.mail.backends.console import EmailBackend as ConsoleEmailBackend
-
-class EmailBackend(ConsoleEmailBackend):
- def __init__(self, *args, **kwargs):
- self._fname = None
- if 'file_path' in kwargs:
- self.file_path = kwargs.pop('file_path')
- else:
- self.file_path = getattr(settings, 'EMAIL_FILE_PATH',None)
- # Make sure self.file_path is a string.
- if not isinstance(self.file_path, basestring):
- raise ImproperlyConfigured('Path for saving emails is invalid: %r' % self.file_path)
- self.file_path = os.path.abspath(self.file_path)
- # Make sure that self.file_path is an directory if it exists.
- if os.path.exists(self.file_path) and not os.path.isdir(self.file_path):
- raise ImproperlyConfigured('Path for saving email messages exists, but is not a directory: %s' % self.file_path)
- # Try to create it, if it not exists.
- elif not os.path.exists(self.file_path):
- try:
- os.makedirs(self.file_path)
- except OSError, err:
- raise ImproperlyConfigured('Could not create directory for saving email messages: %s (%s)' % (self.file_path, err))
- # Make sure that self.file_path is writable.
- if not os.access(self.file_path, os.W_OK):
- raise ImproperlyConfigured('Could not write to directory: %s' % self.file_path)
- # Finally, call super().
- # Since we're using the console-based backend as a base,
- # force the stream to be None, so we don't default to stdout
- kwargs['stream'] = None
- super(EmailBackend, self).__init__(*args, **kwargs)
-
- def _get_filename(self):
- """Return a unique file name."""
- if self._fname is None:
- timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
- fname = "%s-%s.log" % (timestamp, abs(id(self)))
- self._fname = os.path.join(self.file_path, fname)
- return self._fname
-
- def open(self):
- if self.stream is None:
- self.stream = open(self._get_filename(), 'a')
- return True
- return False
-
- def close(self):
- try:
- if self.stream is not None:
- self.stream.close()
- finally:
- self.stream = None
-
diff --git a/parts/django/django/core/mail/backends/locmem.py b/parts/django/django/core/mail/backends/locmem.py
deleted file mode 100644
index 642bfc4..0000000
--- a/parts/django/django/core/mail/backends/locmem.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-Backend for test environment.
-"""
-
-from django.core import mail
-from django.core.mail.backends.base import BaseEmailBackend
-
-class EmailBackend(BaseEmailBackend):
- """A email backend for use during test sessions.
-
- The test connection stores email messages in a dummy outbox,
- rather than sending them out on the wire.
-
- The dummy outbox is accessible through the outbox instance attribute.
- """
- def __init__(self, *args, **kwargs):
- super(EmailBackend, self).__init__(*args, **kwargs)
- if not hasattr(mail, 'outbox'):
- mail.outbox = []
-
- def send_messages(self, messages):
- """Redirect messages to the dummy outbox"""
- mail.outbox.extend(messages)
- return len(messages)
diff --git a/parts/django/django/core/mail/backends/smtp.py b/parts/django/django/core/mail/backends/smtp.py
deleted file mode 100644
index 3b2962f..0000000
--- a/parts/django/django/core/mail/backends/smtp.py
+++ /dev/null
@@ -1,112 +0,0 @@
-"""SMTP email backend class."""
-
-import smtplib
-import socket
-import threading
-
-from django.conf import settings
-from django.core.mail.backends.base import BaseEmailBackend
-from django.core.mail.utils import DNS_NAME
-
-class EmailBackend(BaseEmailBackend):
- """
- A wrapper that manages the SMTP network connection.
- """
- def __init__(self, host=None, port=None, username=None, password=None,
- use_tls=None, fail_silently=False, **kwargs):
- super(EmailBackend, self).__init__(fail_silently=fail_silently)
- self.host = host or settings.EMAIL_HOST
- self.port = port or settings.EMAIL_PORT
- self.username = username or settings.EMAIL_HOST_USER
- self.password = password or settings.EMAIL_HOST_PASSWORD
- if use_tls is None:
- self.use_tls = settings.EMAIL_USE_TLS
- else:
- self.use_tls = use_tls
- self.connection = None
- self._lock = threading.RLock()
-
- def open(self):
- """
- Ensures we have a connection to the email server. Returns whether or
- not a new connection was required (True or False).
- """
- if self.connection:
- # Nothing to do if the connection is already open.
- return False
- try:
- # If local_hostname is not specified, socket.getfqdn() gets used.
- # For performance, we use the cached FQDN for local_hostname.
- self.connection = smtplib.SMTP(self.host, self.port,
- local_hostname=DNS_NAME.get_fqdn())
- if self.use_tls:
- self.connection.ehlo()
- self.connection.starttls()
- self.connection.ehlo()
- if self.username and self.password:
- self.connection.login(self.username, self.password)
- return True
- except:
- if not self.fail_silently:
- raise
-
- def close(self):
- """Closes the connection to the email server."""
- try:
- try:
- self.connection.quit()
- except socket.sslerror:
- # This happens when calling quit() on a TLS connection
- # sometimes.
- self.connection.close()
- except:
- if self.fail_silently:
- return
- raise
- finally:
- self.connection = None
-
- def send_messages(self, email_messages):
- """
- Sends one or more EmailMessage objects and returns the number of email
- messages sent.
- """
- if not email_messages:
- return
- self._lock.acquire()
- try:
- new_conn_created = self.open()
- if not self.connection:
- # We failed silently on open().
- # Trying to send would be pointless.
- return
- num_sent = 0
- for message in email_messages:
- sent = self._send(message)
- if sent:
- num_sent += 1
- if new_conn_created:
- self.close()
- finally:
- self._lock.release()
- return num_sent
-
- def _sanitize(self, email):
- name, domain = email.split('@', 1)
- email = '@'.join([name, domain.encode('idna')])
- return email
-
- def _send(self, email_message):
- """A helper method that does the actual sending."""
- if not email_message.recipients():
- return False
- from_email = self._sanitize(email_message.from_email)
- recipients = map(self._sanitize, email_message.recipients())
- try:
- self.connection.sendmail(from_email, recipients,
- email_message.message().as_string())
- except:
- if not self.fail_silently:
- raise
- return False
- return True
diff --git a/parts/django/django/core/mail/message.py b/parts/django/django/core/mail/message.py
deleted file mode 100644
index ad0fbc8..0000000
--- a/parts/django/django/core/mail/message.py
+++ /dev/null
@@ -1,289 +0,0 @@
-import mimetypes
-import os
-import random
-import time
-from email import Charset, Encoders
-from email.MIMEText import MIMEText
-from email.MIMEMultipart import MIMEMultipart
-from email.MIMEBase import MIMEBase
-from email.Header import Header
-from email.Utils import formatdate, getaddresses, formataddr
-
-from django.conf import settings
-from django.core.mail.utils import DNS_NAME
-from django.utils.encoding import smart_str, force_unicode
-
-# Don't BASE64-encode UTF-8 messages so that we avoid unwanted attention from
-# some spam filters.
-Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8')
-
-# Default MIME type to use on attachments (if it is not explicitly given
-# and cannot be guessed).
-DEFAULT_ATTACHMENT_MIME_TYPE = 'application/octet-stream'
-
-
-class BadHeaderError(ValueError):
- pass
-
-
-# Copied from Python standard library, with the following modifications:
-# * Used cached hostname for performance.
-# * Added try/except to support lack of getpid() in Jython (#5496).
-def make_msgid(idstring=None):
- """Returns a string suitable for RFC 2822 compliant Message-ID, e.g:
-
- <20020201195627.33539.96671@nightshade.la.mastaler.com>
-
- Optional idstring if given is a string used to strengthen the
- uniqueness of the message id.
- """
- timeval = time.time()
- utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval))
- try:
- pid = os.getpid()
- except AttributeError:
- # No getpid() in Jython, for example.
- pid = 1
- randint = random.randrange(100000)
- if idstring is None:
- idstring = ''
- else:
- idstring = '.' + idstring
- idhost = DNS_NAME
- msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, idhost)
- return msgid
-
-
-def forbid_multi_line_headers(name, val, encoding):
- """Forbids multi-line headers, to prevent header injection."""
- encoding = encoding or settings.DEFAULT_CHARSET
- val = force_unicode(val)
- if '\n' in val or '\r' in val:
- raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name))
- try:
- val = val.encode('ascii')
- except UnicodeEncodeError:
- if name.lower() in ('to', 'from', 'cc'):
- result = []
- for nm, addr in getaddresses((val,)):
- nm = str(Header(nm.encode(encoding), encoding))
- try:
- addr = addr.encode('ascii')
- except UnicodeEncodeError: # IDN
- addr = str(Header(addr.encode(encoding), encoding))
- result.append(formataddr((nm, addr)))
- val = ', '.join(result)
- else:
- val = Header(val.encode(encoding), encoding)
- else:
- if name.lower() == 'subject':
- val = Header(val)
- return name, val
-
-class SafeMIMEText(MIMEText):
-
- def __init__(self, text, subtype, charset):
- self.encoding = charset
- MIMEText.__init__(self, text, subtype, charset)
-
- def __setitem__(self, name, val):
- name, val = forbid_multi_line_headers(name, val, self.encoding)
- MIMEText.__setitem__(self, name, val)
-
-class SafeMIMEMultipart(MIMEMultipart):
-
- def __init__(self, _subtype='mixed', boundary=None, _subparts=None, encoding=None, **_params):
- self.encoding = encoding
- MIMEMultipart.__init__(self, _subtype, boundary, _subparts, **_params)
-
- def __setitem__(self, name, val):
- name, val = forbid_multi_line_headers(name, val, self.encoding)
- MIMEMultipart.__setitem__(self, name, val)
-
-class EmailMessage(object):
- """
- A container for email information.
- """
- content_subtype = 'plain'
- mixed_subtype = 'mixed'
- encoding = None # None => use settings default
-
- def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
- connection=None, attachments=None, headers=None):
- """
- Initialize a single email message (which can be sent to multiple
- recipients).
-
- All strings used to create the message can be unicode strings
- (or UTF-8 bytestrings). The SafeMIMEText class will handle any
- necessary encoding conversions.
- """
- if to:
- assert not isinstance(to, basestring), '"to" argument must be a list or tuple'
- self.to = list(to)
- else:
- self.to = []
- if bcc:
- assert not isinstance(bcc, basestring), '"bcc" argument must be a list or tuple'
- self.bcc = list(bcc)
- else:
- self.bcc = []
- self.from_email = from_email or settings.DEFAULT_FROM_EMAIL
- self.subject = subject
- self.body = body
- self.attachments = attachments or []
- self.extra_headers = headers or {}
- self.connection = connection
-
- def get_connection(self, fail_silently=False):
- from django.core.mail import get_connection
- if not self.connection:
- self.connection = get_connection(fail_silently=fail_silently)
- return self.connection
-
- def message(self):
- encoding = self.encoding or settings.DEFAULT_CHARSET
- msg = SafeMIMEText(smart_str(self.body, encoding),
- self.content_subtype, encoding)
- msg = self._create_message(msg)
- msg['Subject'] = self.subject
- msg['From'] = self.extra_headers.get('From', self.from_email)
- msg['To'] = ', '.join(self.to)
-
- # Email header names are case-insensitive (RFC 2045), so we have to
- # accommodate that when doing comparisons.
- header_names = [key.lower() for key in self.extra_headers]
- if 'date' not in header_names:
- msg['Date'] = formatdate()
- if 'message-id' not in header_names:
- msg['Message-ID'] = make_msgid()
- for name, value in self.extra_headers.items():
- if name.lower() == 'from': # From is already handled
- continue
- msg[name] = value
- return msg
-
- def recipients(self):
- """
- Returns a list of all recipients of the email (includes direct
- addressees as well as Bcc entries).
- """
- return self.to + self.bcc
-
- def send(self, fail_silently=False):
- """Sends the email message."""
- if not self.recipients():
- # Don't bother creating the network connection if there's nobody to
- # send to.
- return 0
- return self.get_connection(fail_silently).send_messages([self])
-
- def attach(self, filename=None, content=None, mimetype=None):
- """
- Attaches a file with the given filename and content. The filename can
- be omitted and the mimetype is guessed, if not provided.
-
- If the first parameter is a MIMEBase subclass it is inserted directly
- into the resulting message attachments.
- """
- if isinstance(filename, MIMEBase):
- assert content == mimetype == None
- self.attachments.append(filename)
- else:
- assert content is not None
- self.attachments.append((filename, content, mimetype))
-
- def attach_file(self, path, mimetype=None):
- """Attaches a file from the filesystem."""
- filename = os.path.basename(path)
- content = open(path, 'rb').read()
- self.attach(filename, content, mimetype)
-
- def _create_message(self, msg):
- return self._create_attachments(msg)
-
- def _create_attachments(self, msg):
- if self.attachments:
- encoding = self.encoding or settings.DEFAULT_CHARSET
- body_msg = msg
- msg = SafeMIMEMultipart(_subtype=self.mixed_subtype, encoding=encoding)
- if self.body:
- msg.attach(body_msg)
- for attachment in self.attachments:
- if isinstance(attachment, MIMEBase):
- msg.attach(attachment)
- else:
- msg.attach(self._create_attachment(*attachment))
- return msg
-
- def _create_mime_attachment(self, content, mimetype):
- """
- Converts the content, mimetype pair into a MIME attachment object.
- """
- basetype, subtype = mimetype.split('/', 1)
- if basetype == 'text':
- encoding = self.encoding or settings.DEFAULT_CHARSET
- attachment = SafeMIMEText(smart_str(content, encoding), subtype, encoding)
- else:
- # Encode non-text attachments with base64.
- attachment = MIMEBase(basetype, subtype)
- attachment.set_payload(content)
- Encoders.encode_base64(attachment)
- return attachment
-
- def _create_attachment(self, filename, content, mimetype=None):
- """
- Converts the filename, content, mimetype triple into a MIME attachment
- object.
- """
- if mimetype is None:
- mimetype, _ = mimetypes.guess_type(filename)
- if mimetype is None:
- mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
- attachment = self._create_mime_attachment(content, mimetype)
- if filename:
- attachment.add_header('Content-Disposition', 'attachment',
- filename=filename)
- return attachment
-
-
-class EmailMultiAlternatives(EmailMessage):
- """
- A version of EmailMessage that makes it easy to send multipart/alternative
- messages. For example, including text and HTML versions of the text is
- made easier.
- """
- alternative_subtype = 'alternative'
-
- def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
- connection=None, attachments=None, headers=None, alternatives=None):
- """
- Initialize a single email message (which can be sent to multiple
- recipients).
-
- All strings used to create the message can be unicode strings (or UTF-8
- bytestrings). The SafeMIMEText class will handle any necessary encoding
- conversions.
- """
- super(EmailMultiAlternatives, self).__init__(subject, body, from_email, to, bcc, connection, attachments, headers)
- self.alternatives=alternatives or []
-
- def attach_alternative(self, content, mimetype):
- """Attach an alternative content representation."""
- assert content is not None
- assert mimetype is not None
- self.alternatives.append((content, mimetype))
-
- def _create_message(self, msg):
- return self._create_attachments(self._create_alternatives(msg))
-
- def _create_alternatives(self, msg):
- encoding = self.encoding or settings.DEFAULT_CHARSET
- if self.alternatives:
- body_msg = msg
- msg = SafeMIMEMultipart(_subtype=self.alternative_subtype, encoding=encoding)
- if self.body:
- msg.attach(body_msg)
- for alternative in self.alternatives:
- msg.attach(self._create_mime_attachment(*alternative))
- return msg
diff --git a/parts/django/django/core/mail/utils.py b/parts/django/django/core/mail/utils.py
deleted file mode 100644
index 322a3a1..0000000
--- a/parts/django/django/core/mail/utils.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""
-Email message and email sending related helper functions.
-"""
-
-import socket
-
-
-# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of
-# seconds, which slows down the restart of the server.
-class CachedDnsName(object):
- def __str__(self):
- return self.get_fqdn()
-
- def get_fqdn(self):
- if not hasattr(self, '_fqdn'):
- self._fqdn = socket.getfqdn()
- return self._fqdn
-
-DNS_NAME = CachedDnsName()
diff --git a/parts/django/django/core/management/__init__.py b/parts/django/django/core/management/__init__.py
deleted file mode 100644
index 85bf324..0000000
--- a/parts/django/django/core/management/__init__.py
+++ /dev/null
@@ -1,438 +0,0 @@
-import os
-import sys
-from optparse import OptionParser, NO_DEFAULT
-import imp
-
-import django
-from django.core.management.base import BaseCommand, CommandError, handle_default_options
-from django.utils.importlib import import_module
-
-# For backwards compatibility: get_version() used to be in this module.
-get_version = django.get_version
-
-# A cache of loaded commands, so that call_command
-# doesn't have to reload every time it's called.
-_commands = None
-
-def find_commands(management_dir):
- """
- Given a path to a management directory, returns a list of all the command
- names that are available.
-
- Returns an empty list if no commands are defined.
- """
- command_dir = os.path.join(management_dir, 'commands')
- try:
- return [f[:-3] for f in os.listdir(command_dir)
- if not f.startswith('_') and f.endswith('.py')]
- except OSError:
- return []
-
-def find_management_module(app_name):
- """
- Determines the path to the management module for the given app_name,
- without actually importing the application or the management module.
-
- Raises ImportError if the management module cannot be found for any reason.
- """
- parts = app_name.split('.')
- parts.append('management')
- parts.reverse()
- part = parts.pop()
- path = None
-
- # When using manage.py, the project module is added to the path,
- # loaded, then removed from the path. This means that
- # testproject.testapp.models can be loaded in future, even if
- # testproject isn't in the path. When looking for the management
- # module, we need look for the case where the project name is part
- # of the app_name but the project directory itself isn't on the path.
- try:
- f, path, descr = imp.find_module(part,path)
- except ImportError,e:
- if os.path.basename(os.getcwd()) != part:
- raise e
-
- while parts:
- part = parts.pop()
- f, path, descr = imp.find_module(part, path and [path] or None)
- return path
-
-def load_command_class(app_name, name):
- """
- Given a command name and an application name, returns the Command
- class instance. All errors raised by the import process
- (ImportError, AttributeError) are allowed to propagate.
- """
- module = import_module('%s.management.commands.%s' % (app_name, name))
- return module.Command()
-
-def get_commands():
- """
- Returns a dictionary mapping command names to their callback applications.
-
- This works by looking for a management.commands package in django.core, and
- in each installed application -- if a commands package exists, all commands
- in that package are registered.
-
- Core commands are always included. If a settings module has been
- specified, user-defined commands will also be included, the
- startproject command will be disabled, and the startapp command
- will be modified to use the directory in which the settings module appears.
-
- The dictionary is in the format {command_name: app_name}. Key-value
- pairs from this dictionary can then be used in calls to
- load_command_class(app_name, command_name)
-
- If a specific version of a command must be loaded (e.g., with the
- startapp command), the instantiated module can be placed in the
- dictionary in place of the application name.
-
- The dictionary is cached on the first call and reused on subsequent
- calls.
- """
- global _commands
- if _commands is None:
- _commands = dict([(name, 'django.core') for name in find_commands(__path__[0])])
-
- # Find the installed apps
- try:
- from django.conf import settings
- apps = settings.INSTALLED_APPS
- except (AttributeError, EnvironmentError, ImportError):
- apps = []
-
- # Find the project directory
- try:
- from django.conf import settings
- module = import_module(settings.SETTINGS_MODULE)
- project_directory = setup_environ(module, settings.SETTINGS_MODULE)
- except (AttributeError, EnvironmentError, ImportError, KeyError):
- project_directory = None
-
- # Find and load the management module for each installed app.
- for app_name in apps:
- try:
- path = find_management_module(app_name)
- _commands.update(dict([(name, app_name)
- for name in find_commands(path)]))
- except ImportError:
- pass # No management module - ignore this app
-
- if project_directory:
- # Remove the "startproject" command from self.commands, because
- # that's a django-admin.py command, not a manage.py command.
- del _commands['startproject']
-
- # Override the startapp command so that it always uses the
- # project_directory, not the current working directory
- # (which is default).
- from django.core.management.commands.startapp import ProjectCommand
- _commands['startapp'] = ProjectCommand(project_directory)
-
- return _commands
-
-def call_command(name, *args, **options):
- """
- Calls the given command, with the given options and args/kwargs.
-
- This is the primary API you should use for calling specific commands.
-
- Some examples:
- call_command('syncdb')
- call_command('shell', plain=True)
- call_command('sqlall', 'myapp')
- """
- # Load the command object.
- try:
- app_name = get_commands()[name]
- if isinstance(app_name, BaseCommand):
- # If the command is already loaded, use it directly.
- klass = app_name
- else:
- klass = load_command_class(app_name, name)
- except KeyError:
- raise CommandError("Unknown command: %r" % name)
-
- # Grab out a list of defaults from the options. optparse does this for us
- # when the script runs from the command line, but since call_command can
- # be called programatically, we need to simulate the loading and handling
- # of defaults (see #10080 for details).
- defaults = dict([(o.dest, o.default)
- for o in klass.option_list
- if o.default is not NO_DEFAULT])
- defaults.update(options)
-
- return klass.execute(*args, **defaults)
-
-class LaxOptionParser(OptionParser):
- """
- An option parser that doesn't raise any errors on unknown options.
-
- This is needed because the --settings and --pythonpath options affect
- the commands (and thus the options) that are available to the user.
- """
- def error(self, msg):
- pass
-
- def print_help(self):
- """Output nothing.
-
- The lax options are included in the normal option parser, so under
- normal usage, we don't need to print the lax options.
- """
- pass
-
- def print_lax_help(self):
- """Output the basic options available to every command.
-
- This just redirects to the default print_help() behaviour.
- """
- OptionParser.print_help(self)
-
- def _process_args(self, largs, rargs, values):
- """
- Overrides OptionParser._process_args to exclusively handle default
- options and ignore args and other options.
-
- This overrides the behavior of the super class, which stop parsing
- at the first unrecognized option.
- """
- while rargs:
- arg = rargs[0]
- try:
- if arg[0:2] == "--" and len(arg) > 2:
- # process a single long option (possibly with value(s))
- # the superclass code pops the arg off rargs
- self._process_long_opt(rargs, values)
- elif arg[:1] == "-" and len(arg) > 1:
- # process a cluster of short options (possibly with
- # value(s) for the last one only)
- # the superclass code pops the arg off rargs
- self._process_short_opts(rargs, values)
- else:
- # it's either a non-default option or an arg
- # either way, add it to the args list so we can keep
- # dealing with options
- del rargs[0]
- raise Exception
- except:
- largs.append(arg)
-
-class ManagementUtility(object):
- """
- Encapsulates the logic of the django-admin.py and manage.py utilities.
-
- A ManagementUtility has a number of commands, which can be manipulated
- by editing the self.commands dictionary.
- """
- def __init__(self, argv=None):
- self.argv = argv or sys.argv[:]
- self.prog_name = os.path.basename(self.argv[0])
-
- def main_help_text(self):
- """
- Returns the script's main help text, as a string.
- """
- usage = ['',"Type '%s help <subcommand>' for help on a specific subcommand." % self.prog_name,'']
- usage.append('Available subcommands:')
- commands = get_commands().keys()
- commands.sort()
- for cmd in commands:
- usage.append(' %s' % cmd)
- return '\n'.join(usage)
-
- def fetch_command(self, subcommand):
- """
- Tries to fetch the given subcommand, printing a message with the
- appropriate command called from the command line (usually
- "django-admin.py" or "manage.py") if it can't be found.
- """
- try:
- app_name = get_commands()[subcommand]
- except KeyError:
- sys.stderr.write("Unknown command: %r\nType '%s help' for usage.\n" % \
- (subcommand, self.prog_name))
- sys.exit(1)
- if isinstance(app_name, BaseCommand):
- # If the command is already loaded, use it directly.
- klass = app_name
- else:
- klass = load_command_class(app_name, subcommand)
- return klass
-
- def autocomplete(self):
- """
- Output completion suggestions for BASH.
-
- The output of this function is passed to BASH's `COMREPLY` variable and
- treated as completion suggestions. `COMREPLY` expects a space
- separated string as the result.
-
- The `COMP_WORDS` and `COMP_CWORD` BASH environment variables are used
- to get information about the cli input. Please refer to the BASH
- man-page for more information about this variables.
-
- Subcommand options are saved as pairs. A pair consists of
- the long option string (e.g. '--exclude') and a boolean
- value indicating if the option requires arguments. When printing to
- stdout, a equal sign is appended to options which require arguments.
-
- Note: If debugging this function, it is recommended to write the debug
- output in a separate file. Otherwise the debug output will be treated
- and formatted as potential completion suggestions.
- """
- # Don't complete if user hasn't sourced bash_completion file.
- if not os.environ.has_key('DJANGO_AUTO_COMPLETE'):
- return
-
- cwords = os.environ['COMP_WORDS'].split()[1:]
- cword = int(os.environ['COMP_CWORD'])
-
- try:
- curr = cwords[cword-1]
- except IndexError:
- curr = ''
-
- subcommands = get_commands().keys() + ['help']
- options = [('--help', None)]
-
- # subcommand
- if cword == 1:
- print ' '.join(sorted(filter(lambda x: x.startswith(curr), subcommands)))
- # subcommand options
- # special case: the 'help' subcommand has no options
- elif cwords[0] in subcommands and cwords[0] != 'help':
- subcommand_cls = self.fetch_command(cwords[0])
- # special case: 'runfcgi' stores additional options as
- # 'key=value' pairs
- if cwords[0] == 'runfcgi':
- from django.core.servers.fastcgi import FASTCGI_OPTIONS
- options += [(k, 1) for k in FASTCGI_OPTIONS]
- # special case: add the names of installed apps to options
- elif cwords[0] in ('dumpdata', 'reset', 'sql', 'sqlall',
- 'sqlclear', 'sqlcustom', 'sqlindexes',
- 'sqlreset', 'sqlsequencereset', 'test'):
- try:
- from django.conf import settings
- # Get the last part of the dotted path as the app name.
- options += [(a.split('.')[-1], 0) for a in settings.INSTALLED_APPS]
- except ImportError:
- # Fail silently if DJANGO_SETTINGS_MODULE isn't set. The
- # user will find out once they execute the command.
- pass
- options += [(s_opt.get_opt_string(), s_opt.nargs) for s_opt in
- subcommand_cls.option_list]
- # filter out previously specified options from available options
- prev_opts = [x.split('=')[0] for x in cwords[1:cword-1]]
- options = filter(lambda (x, v): x not in prev_opts, options)
-
- # filter options by current input
- options = sorted([(k, v) for k, v in options if k.startswith(curr)])
- for option in options:
- opt_label = option[0]
- # append '=' to options which require args
- if option[1]:
- opt_label += '='
- print opt_label
- sys.exit(1)
-
- def execute(self):
- """
- Given the command-line arguments, this figures out which subcommand is
- being run, creates a parser appropriate to that command, and runs it.
- """
- # Preprocess options to extract --settings and --pythonpath.
- # These options could affect the commands that are available, so they
- # must be processed early.
- parser = LaxOptionParser(usage="%prog subcommand [options] [args]",
- version=get_version(),
- option_list=BaseCommand.option_list)
- self.autocomplete()
- try:
- options, args = parser.parse_args(self.argv)
- handle_default_options(options)
- except:
- pass # Ignore any option errors at this point.
-
- try:
- subcommand = self.argv[1]
- except IndexError:
- subcommand = 'help' # Display help if no arguments were given.
-
- if subcommand == 'help':
- if len(args) > 2:
- self.fetch_command(args[2]).print_help(self.prog_name, args[2])
- else:
- parser.print_lax_help()
- sys.stderr.write(self.main_help_text() + '\n')
- sys.exit(1)
- # Special-cases: We want 'django-admin.py --version' and
- # 'django-admin.py --help' to work, for backwards compatibility.
- elif self.argv[1:] == ['--version']:
- # LaxOptionParser already takes care of printing the version.
- pass
- elif self.argv[1:] == ['--help']:
- parser.print_lax_help()
- sys.stderr.write(self.main_help_text() + '\n')
- else:
- self.fetch_command(subcommand).run_from_argv(self.argv)
-
-def setup_environ(settings_mod, original_settings_path=None):
- """
- Configures the runtime environment. This can also be used by external
- scripts wanting to set up a similar environment to manage.py.
- Returns the project directory (assuming the passed settings module is
- directly in the project directory).
-
- The "original_settings_path" parameter is optional, but recommended, since
- trying to work out the original path from the module can be problematic.
- """
- # Add this project to sys.path so that it's importable in the conventional
- # way. For example, if this file (manage.py) lives in a directory
- # "myproject", this code would add "/path/to/myproject" to sys.path.
- if '__init__.py' in settings_mod.__file__:
- p = os.path.dirname(settings_mod.__file__)
- else:
- p = settings_mod.__file__
- project_directory, settings_filename = os.path.split(p)
- if project_directory == os.curdir or not project_directory:
- project_directory = os.getcwd()
- project_name = os.path.basename(project_directory)
-
- # Strip filename suffix to get the module name.
- settings_name = os.path.splitext(settings_filename)[0]
-
- # Strip $py for Jython compiled files (like settings$py.class)
- if settings_name.endswith("$py"):
- settings_name = settings_name[:-3]
-
- # Set DJANGO_SETTINGS_MODULE appropriately.
- if original_settings_path:
- os.environ['DJANGO_SETTINGS_MODULE'] = original_settings_path
- else:
- os.environ['DJANGO_SETTINGS_MODULE'] = '%s.%s' % (project_name, settings_name)
-
- # Import the project module. We add the parent directory to PYTHONPATH to
- # avoid some of the path errors new users can have.
- sys.path.append(os.path.join(project_directory, os.pardir))
- project_module = import_module(project_name)
- sys.path.pop()
-
- return project_directory
-
-def execute_from_command_line(argv=None):
- """
- A simple method that runs a ManagementUtility.
- """
- utility = ManagementUtility(argv)
- utility.execute()
-
-def execute_manager(settings_mod, argv=None):
- """
- Like execute_from_command_line(), but for use by manage.py, a
- project-specific django-admin.py utility.
- """
- setup_environ(settings_mod)
- utility = ManagementUtility(argv)
- utility.execute()
diff --git a/parts/django/django/core/management/base.py b/parts/django/django/core/management/base.py
deleted file mode 100644
index 282fbd7..0000000
--- a/parts/django/django/core/management/base.py
+++ /dev/null
@@ -1,431 +0,0 @@
-"""
-Base classes for writing management commands (named commands which can
-be executed through ``django-admin.py`` or ``manage.py``).
-
-"""
-
-import os
-import sys
-from optparse import make_option, OptionParser
-
-import django
-from django.core.exceptions import ImproperlyConfigured
-from django.core.management.color import color_style
-from django.utils.encoding import smart_str
-
-class CommandError(Exception):
- """
- Exception class indicating a problem while executing a management
- command.
-
- If this exception is raised during the execution of a management
- command, it will be caught and turned into a nicely-printed error
- message to the appropriate output stream (i.e., stderr); as a
- result, raising this exception (with a sensible description of the
- error) is the preferred way to indicate that something has gone
- wrong in the execution of a command.
-
- """
- pass
-
-def handle_default_options(options):
- """
- Include any default options that all commands should accept here
- so that ManagementUtility can handle them before searching for
- user commands.
-
- """
- if options.settings:
- os.environ['DJANGO_SETTINGS_MODULE'] = options.settings
- if options.pythonpath:
- sys.path.insert(0, options.pythonpath)
-
-class BaseCommand(object):
- """
- The base class from which all management commands ultimately
- derive.
-
- Use this class if you want access to all of the mechanisms which
- parse the command-line arguments and work out what code to call in
- response; if you don't need to change any of that behavior,
- consider using one of the subclasses defined in this file.
-
- If you are interested in overriding/customizing various aspects of
- the command-parsing and -execution behavior, the normal flow works
- as follows:
-
- 1. ``django-admin.py`` or ``manage.py`` loads the command class
- and calls its ``run_from_argv()`` method.
-
- 2. The ``run_from_argv()`` method calls ``create_parser()`` to get
- an ``OptionParser`` for the arguments, parses them, performs
- any environment changes requested by options like
- ``pythonpath``, and then calls the ``execute()`` method,
- passing the parsed arguments.
-
- 3. The ``execute()`` method attempts to carry out the command by
- calling the ``handle()`` method with the parsed arguments; any
- output produced by ``handle()`` will be printed to standard
- output and, if the command is intended to produce a block of
- SQL statements, will be wrapped in ``BEGIN`` and ``COMMIT``.
-
- 4. If ``handle()`` raised a ``CommandError``, ``execute()`` will
- instead print an error message to ``stderr``.
-
- Thus, the ``handle()`` method is typically the starting point for
- subclasses; many built-in commands and command types either place
- all of their logic in ``handle()``, or perform some additional
- parsing work in ``handle()`` and then delegate from it to more
- specialized methods as needed.
-
- Several attributes affect behavior at various steps along the way:
-
- ``args``
- A string listing the arguments accepted by the command,
- suitable for use in help messages; e.g., a command which takes
- a list of application names might set this to '<appname
- appname ...>'.
-
- ``can_import_settings``
- A boolean indicating whether the command needs to be able to
- import Django settings; if ``True``, ``execute()`` will verify
- that this is possible before proceeding. Default value is
- ``True``.
-
- ``help``
- A short description of the command, which will be printed in
- help messages.
-
- ``option_list``
- This is the list of ``optparse`` options which will be fed
- into the command's ``OptionParser`` for parsing arguments.
-
- ``output_transaction``
- A boolean indicating whether the command outputs SQL
- statements; if ``True``, the output will automatically be
- wrapped with ``BEGIN;`` and ``COMMIT;``. Default value is
- ``False``.
-
- ``requires_model_validation``
- A boolean; if ``True``, validation of installed models will be
- performed prior to executing the command. Default value is
- ``True``. To validate an individual application's models
- rather than all applications' models, call
- ``self.validate(app)`` from ``handle()``, where ``app`` is the
- application's Python module.
-
- """
- # Metadata about this command.
- option_list = (
- make_option('-v', '--verbosity', action='store', dest='verbosity', default='1',
- type='choice', choices=['0', '1', '2'],
- help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'),
- make_option('--settings',
- help='The Python path to a settings module, e.g. "myproject.settings.main". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.'),
- make_option('--pythonpath',
- help='A directory to add to the Python path, e.g. "/home/djangoprojects/myproject".'),
- make_option('--traceback', action='store_true',
- help='Print traceback on exception'),
- )
- help = ''
- args = ''
-
- # Configuration shortcuts that alter various logic.
- can_import_settings = True
- requires_model_validation = True
- output_transaction = False # Whether to wrap the output in a "BEGIN; COMMIT;"
-
- def __init__(self):
- self.style = color_style()
-
- def get_version(self):
- """
- Return the Django version, which should be correct for all
- built-in Django commands. User-supplied commands should
- override this method.
-
- """
- return django.get_version()
-
- def usage(self, subcommand):
- """
- Return a brief description of how to use this command, by
- default from the attribute ``self.help``.
-
- """
- usage = '%%prog %s [options] %s' % (subcommand, self.args)
- if self.help:
- return '%s\n\n%s' % (usage, self.help)
- else:
- return usage
-
- def create_parser(self, prog_name, subcommand):
- """
- Create and return the ``OptionParser`` which will be used to
- parse the arguments to this command.
-
- """
- return OptionParser(prog=prog_name,
- usage=self.usage(subcommand),
- version=self.get_version(),
- option_list=self.option_list)
-
- def print_help(self, prog_name, subcommand):
- """
- Print the help message for this command, derived from
- ``self.usage()``.
-
- """
- parser = self.create_parser(prog_name, subcommand)
- parser.print_help()
-
- def run_from_argv(self, argv):
- """
- Set up any environment changes requested (e.g., Python path
- and Django settings), then run this command.
-
- """
- parser = self.create_parser(argv[0], argv[1])
- options, args = parser.parse_args(argv[2:])
- handle_default_options(options)
- self.execute(*args, **options.__dict__)
-
- def execute(self, *args, **options):
- """
- Try to execute this command, performing model validation if
- needed (as controlled by the attribute
- ``self.requires_model_validation``). If the command raises a
- ``CommandError``, intercept it and print it sensibly to
- stderr.
-
- """
- # Switch to English, because django-admin.py creates database content
- # like permissions, and those shouldn't contain any translations.
- # But only do this if we can assume we have a working settings file,
- # because django.utils.translation requires settings.
- if self.can_import_settings:
- try:
- from django.utils import translation
- translation.activate('en-us')
- except ImportError, e:
- # If settings should be available, but aren't,
- # raise the error and quit.
- sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e)))
- sys.exit(1)
- try:
- self.stdout = options.get('stdout', sys.stdout)
- self.stderr = options.get('stderr', sys.stderr)
- if self.requires_model_validation:
- self.validate()
- output = self.handle(*args, **options)
- if output:
- if self.output_transaction:
- # This needs to be imported here, because it relies on
- # settings.
- from django.db import connections, DEFAULT_DB_ALIAS
- connection = connections[options.get('database', DEFAULT_DB_ALIAS)]
- if connection.ops.start_transaction_sql():
- self.stdout.write(self.style.SQL_KEYWORD(connection.ops.start_transaction_sql()) + '\n')
- self.stdout.write(output)
- if self.output_transaction:
- self.stdout.write('\n' + self.style.SQL_KEYWORD("COMMIT;") + '\n')
- except CommandError, e:
- self.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e)))
- sys.exit(1)
-
- def validate(self, app=None, display_num_errors=False):
- """
- Validates the given app, raising CommandError for any errors.
-
- If app is None, then this will validate all installed apps.
-
- """
- from django.core.management.validation import get_validation_errors
- try:
- from cStringIO import StringIO
- except ImportError:
- from StringIO import StringIO
- s = StringIO()
- num_errors = get_validation_errors(s, app)
- if num_errors:
- s.seek(0)
- error_text = s.read()
- raise CommandError("One or more models did not validate:\n%s" % error_text)
- if display_num_errors:
- self.stdout.write("%s error%s found\n" % (num_errors, num_errors != 1 and 's' or ''))
-
- def handle(self, *args, **options):
- """
- The actual logic of the command. Subclasses must implement
- this method.
-
- """
- raise NotImplementedError()
-
-class AppCommand(BaseCommand):
- """
- A management command which takes one or more installed application
- names as arguments, and does something with each of them.
-
- Rather than implementing ``handle()``, subclasses must implement
- ``handle_app()``, which will be called once for each application.
-
- """
- args = '<appname appname ...>'
-
- def handle(self, *app_labels, **options):
- from django.db import models
- if not app_labels:
- raise CommandError('Enter at least one appname.')
- try:
- app_list = [models.get_app(app_label) for app_label in app_labels]
- except (ImproperlyConfigured, ImportError), e:
- raise CommandError("%s. Are you sure your INSTALLED_APPS setting is correct?" % e)
- output = []
- for app in app_list:
- app_output = self.handle_app(app, **options)
- if app_output:
- output.append(app_output)
- return '\n'.join(output)
-
- def handle_app(self, app, **options):
- """
- Perform the command's actions for ``app``, which will be the
- Python module corresponding to an application name given on
- the command line.
-
- """
- raise NotImplementedError()
-
-class LabelCommand(BaseCommand):
- """
- A management command which takes one or more arbitrary arguments
- (labels) on the command line, and does something with each of
- them.
-
- Rather than implementing ``handle()``, subclasses must implement
- ``handle_label()``, which will be called once for each label.
-
- If the arguments should be names of installed applications, use
- ``AppCommand`` instead.
-
- """
- args = '<label label ...>'
- label = 'label'
-
- def handle(self, *labels, **options):
- if not labels:
- raise CommandError('Enter at least one %s.' % self.label)
-
- output = []
- for label in labels:
- label_output = self.handle_label(label, **options)
- if label_output:
- output.append(label_output)
- return '\n'.join(output)
-
- def handle_label(self, label, **options):
- """
- Perform the command's actions for ``label``, which will be the
- string as given on the command line.
-
- """
- raise NotImplementedError()
-
-class NoArgsCommand(BaseCommand):
- """
- A command which takes no arguments on the command line.
-
- Rather than implementing ``handle()``, subclasses must implement
- ``handle_noargs()``; ``handle()`` itself is overridden to ensure
- no arguments are passed to the command.
-
- Attempting to pass arguments will raise ``CommandError``.
-
- """
- args = ''
-
- def handle(self, *args, **options):
- if args:
- raise CommandError("Command doesn't accept any arguments")
- return self.handle_noargs(**options)
-
- def handle_noargs(self, **options):
- """
- Perform this command's actions.
-
- """
- raise NotImplementedError()
-
-def copy_helper(style, app_or_project, name, directory, other_name=''):
- """
- Copies either a Django application layout template or a Django project
- layout template into the specified directory.
-
- """
- # style -- A color style object (see django.core.management.color).
- # app_or_project -- The string 'app' or 'project'.
- # name -- The name of the application or project.
- # directory -- The directory to which the layout template should be copied.
- # other_name -- When copying an application layout, this should be the name
- # of the project.
- import re
- import shutil
- other = {'project': 'app', 'app': 'project'}[app_or_project]
- if not re.search(r'^[_a-zA-Z]\w*$', name): # If it's not a valid directory name.
- # Provide a smart error message, depending on the error.
- if not re.search(r'^[_a-zA-Z]', name):
- message = 'make sure the name begins with a letter or underscore'
- else:
- message = 'use only numbers, letters and underscores'
- raise CommandError("%r is not a valid %s name. Please %s." % (name, app_or_project, message))
- top_dir = os.path.join(directory, name)
- try:
- os.mkdir(top_dir)
- except OSError, e:
- raise CommandError(e)
-
- # Determine where the app or project templates are. Use
- # django.__path__[0] because we don't know into which directory
- # django has been installed.
- template_dir = os.path.join(django.__path__[0], 'conf', '%s_template' % app_or_project)
-
- for d, subdirs, files in os.walk(template_dir):
- relative_dir = d[len(template_dir)+1:].replace('%s_name' % app_or_project, name)
- if relative_dir:
- os.mkdir(os.path.join(top_dir, relative_dir))
- for subdir in subdirs[:]:
- if subdir.startswith('.'):
- subdirs.remove(subdir)
- for f in files:
- if not f.endswith('.py'):
- # Ignore .pyc, .pyo, .py.class etc, as they cause various
- # breakages.
- continue
- path_old = os.path.join(d, f)
- path_new = os.path.join(top_dir, relative_dir, f.replace('%s_name' % app_or_project, name))
- fp_old = open(path_old, 'r')
- fp_new = open(path_new, 'w')
- fp_new.write(fp_old.read().replace('{{ %s_name }}' % app_or_project, name).replace('{{ %s_name }}' % other, other_name))
- fp_old.close()
- fp_new.close()
- try:
- shutil.copymode(path_old, path_new)
- _make_writeable(path_new)
- except OSError:
- sys.stderr.write(style.NOTICE("Notice: Couldn't set permission bits on %s. You're probably using an uncommon filesystem setup. No problem.\n" % path_new))
-
-def _make_writeable(filename):
- """
- Make sure that the file is writeable. Useful if our source is
- read-only.
-
- """
- import stat
- if sys.platform.startswith('java'):
- # On Jython there is no os.access()
- return
- if not os.access(filename, os.W_OK):
- st = os.stat(filename)
- new_permissions = stat.S_IMODE(st.st_mode) | stat.S_IWUSR
- os.chmod(filename, new_permissions)
diff --git a/parts/django/django/core/management/color.py b/parts/django/django/core/management/color.py
deleted file mode 100644
index 8c7a87f..0000000
--- a/parts/django/django/core/management/color.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""
-Sets up the terminal color scheme.
-"""
-
-import os
-import sys
-
-from django.utils import termcolors
-
-def supports_color():
- """
- Returns True if the running system's terminal supports color, and False
- otherwise.
- """
- unsupported_platform = (sys.platform in ('win32', 'Pocket PC'))
- # isatty is not always implemented, #6223.
- is_a_tty = hasattr(sys.stdout, 'isatty') and sys.stdout.isatty()
- if unsupported_platform or not is_a_tty:
- return False
- return True
-
-def color_style():
- """Returns a Style object with the Django color scheme."""
- if not supports_color():
- style = no_style()
- else:
- DJANGO_COLORS = os.environ.get('DJANGO_COLORS', '')
- color_settings = termcolors.parse_color_setting(DJANGO_COLORS)
- if color_settings:
- class dummy: pass
- style = dummy()
- # The nocolor palette has all available roles.
- # Use that pallete as the basis for populating
- # the palette as defined in the environment.
- for role in termcolors.PALETTES[termcolors.NOCOLOR_PALETTE]:
- format = color_settings.get(role,{})
- setattr(style, role, termcolors.make_style(**format))
- # For backwards compatibility,
- # set style for ERROR_OUTPUT == ERROR
- style.ERROR_OUTPUT = style.ERROR
- else:
- style = no_style()
- return style
-
-def no_style():
- """Returns a Style object that has no colors."""
- class dummy:
- def __getattr__(self, attr):
- return lambda x: x
- return dummy()
diff --git a/parts/django/django/core/management/commands/__init__.py b/parts/django/django/core/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/core/management/commands/__init__.py
+++ /dev/null
diff --git a/parts/django/django/core/management/commands/cleanup.py b/parts/django/django/core/management/commands/cleanup.py
deleted file mode 100644
index a5c932b..0000000
--- a/parts/django/django/core/management/commands/cleanup.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import datetime
-from django.core.management.base import NoArgsCommand
-
-class Command(NoArgsCommand):
- help = "Can be run as a cronjob or directly to clean out old data from the database (only expired sessions at the moment)."
-
- def handle_noargs(self, **options):
- from django.db import transaction
- from django.contrib.sessions.models import Session
- Session.objects.filter(expire_date__lt=datetime.datetime.now()).delete()
- transaction.commit_unless_managed()
diff --git a/parts/django/django/core/management/commands/compilemessages.py b/parts/django/django/core/management/commands/compilemessages.py
deleted file mode 100644
index b5eaeb1..0000000
--- a/parts/django/django/core/management/commands/compilemessages.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import codecs
-import os
-import sys
-from optparse import make_option
-from django.core.management.base import BaseCommand, CommandError
-
-def has_bom(fn):
- f = open(fn, 'r')
- sample = f.read(4)
- return sample[:3] == '\xef\xbb\xbf' or \
- sample.startswith(codecs.BOM_UTF16_LE) or \
- sample.startswith(codecs.BOM_UTF16_BE)
-
-def compile_messages(stderr, locale=None):
- basedirs = [os.path.join('conf', 'locale'), 'locale']
- if os.environ.get('DJANGO_SETTINGS_MODULE'):
- from django.conf import settings
- basedirs.extend(settings.LOCALE_PATHS)
-
- # Gather existing directories.
- basedirs = set(map(os.path.abspath, filter(os.path.isdir, basedirs)))
-
- if not basedirs:
- raise CommandError("This script should be run from the Django SVN tree or your project or app tree, or with the settings module specified.")
-
- for basedir in basedirs:
- if locale:
- basedir = os.path.join(basedir, locale, 'LC_MESSAGES')
- for dirpath, dirnames, filenames in os.walk(basedir):
- for f in filenames:
- if f.endswith('.po'):
- stderr.write('processing file %s in %s\n' % (f, dirpath))
- fn = os.path.join(dirpath, f)
- if has_bom(fn):
- raise CommandError("The %s file has a BOM (Byte Order Mark). Django only supports .po files encoded in UTF-8 and without any BOM." % fn)
- pf = os.path.splitext(fn)[0]
- # Store the names of the .mo and .po files in an environment
- # variable, rather than doing a string replacement into the
- # command, so that we can take advantage of shell quoting, to
- # quote any malicious characters/escaping.
- # See http://cyberelk.net/tim/articles/cmdline/ar01s02.html
- os.environ['djangocompilemo'] = pf + '.mo'
- os.environ['djangocompilepo'] = pf + '.po'
- if sys.platform == 'win32': # Different shell-variable syntax
- cmd = 'msgfmt --check-format -o "%djangocompilemo%" "%djangocompilepo%"'
- else:
- cmd = 'msgfmt --check-format -o "$djangocompilemo" "$djangocompilepo"'
- os.system(cmd)
-
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--locale', '-l', dest='locale',
- help='The locale to process. Default is to process all.'),
- )
- help = 'Compiles .po files to .mo files for use with builtin gettext support.'
-
- requires_model_validation = False
- can_import_settings = False
-
- def handle(self, **options):
- locale = options.get('locale')
- compile_messages(self.stderr, locale=locale)
diff --git a/parts/django/django/core/management/commands/createcachetable.py b/parts/django/django/core/management/commands/createcachetable.py
deleted file mode 100644
index 90172b6..0000000
--- a/parts/django/django/core/management/commands/createcachetable.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import LabelCommand
-from django.db import connections, transaction, models, DEFAULT_DB_ALIAS
-
-class Command(LabelCommand):
- help = "Creates the table needed to use the SQL cache backend."
- args = "<tablename>"
- label = 'tablename'
-
- option_list = LabelCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database onto '
- 'which the cache table will be installed. '
- 'Defaults to the "default" database.'),
- )
-
- requires_model_validation = False
-
- def handle_label(self, tablename, **options):
- alias = options.get('database', DEFAULT_DB_ALIAS)
- connection = connections[alias]
- fields = (
- # "key" is a reserved word in MySQL, so use "cache_key" instead.
- models.CharField(name='cache_key', max_length=255, unique=True, primary_key=True),
- models.TextField(name='value'),
- models.DateTimeField(name='expires', db_index=True),
- )
- table_output = []
- index_output = []
- qn = connection.ops.quote_name
- for f in fields:
- field_output = [qn(f.name), f.db_type(connection=connection)]
- field_output.append("%sNULL" % (not f.null and "NOT " or ""))
- if f.primary_key:
- field_output.append("PRIMARY KEY")
- elif f.unique:
- field_output.append("UNIQUE")
- if f.db_index:
- unique = f.unique and "UNIQUE " or ""
- index_output.append("CREATE %sINDEX %s ON %s (%s);" % \
- (unique, qn('%s_%s' % (tablename, f.name)), qn(tablename),
- qn(f.name)))
- table_output.append(" ".join(field_output))
- full_statement = ["CREATE TABLE %s (" % qn(tablename)]
- for i, line in enumerate(table_output):
- full_statement.append(' %s%s' % (line, i < len(table_output)-1 and ',' or ''))
- full_statement.append(');')
- curs = connection.cursor()
- curs.execute("\n".join(full_statement))
- for statement in index_output:
- curs.execute(statement)
- transaction.commit_unless_managed(using=alias)
diff --git a/parts/django/django/core/management/commands/dbshell.py b/parts/django/django/core/management/commands/dbshell.py
deleted file mode 100644
index a6b5427..0000000
--- a/parts/django/django/core/management/commands/dbshell.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import BaseCommand, CommandError
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(BaseCommand):
- help = ("Runs the command-line client for specified database, or the "
- "default database if none is provided.")
-
- option_list = BaseCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database onto which to '
- 'open a shell. Defaults to the "default" database.'),
- )
-
- requires_model_validation = False
-
- def handle(self, **options):
- connection = connections[options.get('database', DEFAULT_DB_ALIAS)]
- try:
- connection.client.runshell()
- except OSError:
- # Note that we're assuming OSError means that the client program
- # isn't installed. There's a possibility OSError would be raised
- # for some other reason, in which case this error message would be
- # inaccurate. Still, this message catches the common case.
- raise CommandError('You appear not to have the %r program installed or on your path.' % \
- connection.client.executable_name)
diff --git a/parts/django/django/core/management/commands/diffsettings.py b/parts/django/django/core/management/commands/diffsettings.py
deleted file mode 100644
index 98b53b4..0000000
--- a/parts/django/django/core/management/commands/diffsettings.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from django.core.management.base import NoArgsCommand
-
-def module_to_dict(module, omittable=lambda k: k.startswith('_')):
- "Converts a module namespace to a Python dictionary. Used by get_settings_diff."
- return dict([(k, repr(v)) for k, v in module.__dict__.items() if not omittable(k)])
-
-class Command(NoArgsCommand):
- help = """Displays differences between the current settings.py and Django's
- default settings. Settings that don't appear in the defaults are
- followed by "###"."""
-
- requires_model_validation = False
-
- def handle_noargs(self, **options):
- # Inspired by Postfix's "postconf -n".
- from django.conf import settings, global_settings
-
- # Because settings are imported lazily, we need to explicitly load them.
- settings._setup()
-
- user_settings = module_to_dict(settings._wrapped)
- default_settings = module_to_dict(global_settings)
-
- output = []
- keys = user_settings.keys()
- keys.sort()
- for key in keys:
- if key not in default_settings:
- output.append("%s = %s ###" % (key, user_settings[key]))
- elif user_settings[key] != default_settings[key]:
- output.append("%s = %s" % (key, user_settings[key]))
- return '\n'.join(output)
diff --git a/parts/django/django/core/management/commands/dumpdata.py b/parts/django/django/core/management/commands/dumpdata.py
deleted file mode 100644
index 23c03e7..0000000
--- a/parts/django/django/core/management/commands/dumpdata.py
+++ /dev/null
@@ -1,167 +0,0 @@
-from django.core.exceptions import ImproperlyConfigured
-from django.core.management.base import BaseCommand, CommandError
-from django.core import serializers
-from django.db import connections, router, DEFAULT_DB_ALIAS
-from django.utils.datastructures import SortedDict
-
-from optparse import make_option
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--format', default='json', dest='format',
- help='Specifies the output serialization format for fixtures.'),
- make_option('--indent', default=None, dest='indent', type='int',
- help='Specifies the indent level to use when pretty-printing output'),
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a specific database to load '
- 'fixtures into. Defaults to the "default" database.'),
- make_option('-e', '--exclude', dest='exclude',action='append', default=[],
- help='App to exclude (use multiple --exclude to exclude multiple apps).'),
- make_option('-n', '--natural', action='store_true', dest='use_natural_keys', default=False,
- help='Use natural keys if they are available.'),
- )
- help = ("Output the contents of the database as a fixture of the given "
- "format (using each model's default manager).")
- args = '[appname appname.ModelName ...]'
-
- def handle(self, *app_labels, **options):
- from django.db.models import get_app, get_apps, get_models, get_model
-
- format = options.get('format','json')
- indent = options.get('indent',None)
- using = options.get('database', DEFAULT_DB_ALIAS)
- connection = connections[using]
- exclude = options.get('exclude',[])
- show_traceback = options.get('traceback', False)
- use_natural_keys = options.get('use_natural_keys', False)
-
- excluded_apps = set(get_app(app_label) for app_label in exclude)
-
- if len(app_labels) == 0:
- app_list = SortedDict((app, None) for app in get_apps() if app not in excluded_apps)
- else:
- app_list = SortedDict()
- for label in app_labels:
- try:
- app_label, model_label = label.split('.')
- try:
- app = get_app(app_label)
- except ImproperlyConfigured:
- raise CommandError("Unknown application: %s" % app_label)
-
- model = get_model(app_label, model_label)
- if model is None:
- raise CommandError("Unknown model: %s.%s" % (app_label, model_label))
-
- if app in app_list.keys():
- if app_list[app] and model not in app_list[app]:
- app_list[app].append(model)
- else:
- app_list[app] = [model]
- except ValueError:
- # This is just an app - no model qualifier
- app_label = label
- try:
- app = get_app(app_label)
- except ImproperlyConfigured:
- raise CommandError("Unknown application: %s" % app_label)
- app_list[app] = None
-
- # Check that the serialization format exists; this is a shortcut to
- # avoid collating all the objects and _then_ failing.
- if format not in serializers.get_public_serializer_formats():
- raise CommandError("Unknown serialization format: %s" % format)
-
- try:
- serializers.get_serializer(format)
- except KeyError:
- raise CommandError("Unknown serialization format: %s" % format)
-
- # Now collate the objects to be serialized.
- objects = []
- for model in sort_dependencies(app_list.items()):
- if not model._meta.proxy and router.allow_syncdb(using, model):
- objects.extend(model._default_manager.using(using).all())
-
- try:
- return serializers.serialize(format, objects, indent=indent,
- use_natural_keys=use_natural_keys)
- except Exception, e:
- if show_traceback:
- raise
- raise CommandError("Unable to serialize database: %s" % e)
-
-def sort_dependencies(app_list):
- """Sort a list of app,modellist pairs into a single list of models.
-
- The single list of models is sorted so that any model with a natural key
- is serialized before a normal model, and any model with a natural key
- dependency has it's dependencies serialized first.
- """
- from django.db.models import get_model, get_models
- # Process the list of models, and get the list of dependencies
- model_dependencies = []
- models = set()
- for app, model_list in app_list:
- if model_list is None:
- model_list = get_models(app)
-
- for model in model_list:
- models.add(model)
- # Add any explicitly defined dependencies
- if hasattr(model, 'natural_key'):
- deps = getattr(model.natural_key, 'dependencies', [])
- if deps:
- deps = [get_model(*d.split('.')) for d in deps]
- else:
- deps = []
-
- # Now add a dependency for any FK or M2M relation with
- # a model that defines a natural key
- for field in model._meta.fields:
- if hasattr(field.rel, 'to'):
- rel_model = field.rel.to
- if hasattr(rel_model, 'natural_key'):
- deps.append(rel_model)
- for field in model._meta.many_to_many:
- rel_model = field.rel.to
- if hasattr(rel_model, 'natural_key'):
- deps.append(rel_model)
- model_dependencies.append((model, deps))
-
- model_dependencies.reverse()
- # Now sort the models to ensure that dependencies are met. This
- # is done by repeatedly iterating over the input list of models.
- # If all the dependencies of a given model are in the final list,
- # that model is promoted to the end of the final list. This process
- # continues until the input list is empty, or we do a full iteration
- # over the input models without promoting a model to the final list.
- # If we do a full iteration without a promotion, that means there are
- # circular dependencies in the list.
- model_list = []
- while model_dependencies:
- skipped = []
- changed = False
- while model_dependencies:
- model, deps = model_dependencies.pop()
-
- # If all of the models in the dependency list are either already
- # on the final model list, or not on the original serialization list,
- # then we've found another model with all it's dependencies satisfied.
- found = True
- for candidate in ((d not in models or d in model_list) for d in deps):
- if not candidate:
- found = False
- if found:
- model_list.append(model)
- changed = True
- else:
- skipped.append((model, deps))
- if not changed:
- raise CommandError("Can't resolve dependencies for %s in serialized app list." %
- ', '.join('%s.%s' % (model._meta.app_label, model._meta.object_name)
- for model, deps in sorted(skipped, key=lambda obj: obj[0].__name__))
- )
- model_dependencies = skipped
-
- return model_list
diff --git a/parts/django/django/core/management/commands/flush.py b/parts/django/django/core/management/commands/flush.py
deleted file mode 100644
index f7e769b..0000000
--- a/parts/django/django/core/management/commands/flush.py
+++ /dev/null
@@ -1,83 +0,0 @@
-from optparse import make_option
-
-from django.conf import settings
-from django.db import connections, router, transaction, models, DEFAULT_DB_ALIAS
-from django.core.management import call_command
-from django.core.management.base import NoArgsCommand, CommandError
-from django.core.management.color import no_style
-from django.core.management.sql import sql_flush, emit_post_sync_signal
-from django.utils.importlib import import_module
-
-
-
-class Command(NoArgsCommand):
- option_list = NoArgsCommand.option_list + (
- make_option('--noinput', action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.'),
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to flush. '
- 'Defaults to the "default" database.'),
- )
- help = "Executes ``sqlflush`` on the current database."
-
- def handle_noargs(self, **options):
- db = options.get('database', DEFAULT_DB_ALIAS)
- connection = connections[db]
- verbosity = int(options.get('verbosity', 1))
- interactive = options.get('interactive')
-
- self.style = no_style()
-
- # Import the 'management' module within each installed app, to register
- # dispatcher events.
- for app_name in settings.INSTALLED_APPS:
- try:
- import_module('.management', app_name)
- except ImportError:
- pass
-
- sql_list = sql_flush(self.style, connection, only_django=True)
-
- if interactive:
- confirm = raw_input("""You have requested a flush of the database.
-This will IRREVERSIBLY DESTROY all data currently in the %r database,
-and return each table to the state it was in after syncdb.
-Are you sure you want to do this?
-
- Type 'yes' to continue, or 'no' to cancel: """ % connection.settings_dict['NAME'])
- else:
- confirm = 'yes'
-
- if confirm == 'yes':
- try:
- cursor = connection.cursor()
- for sql in sql_list:
- cursor.execute(sql)
- except Exception, e:
- transaction.rollback_unless_managed(using=db)
- raise CommandError("""Database %s couldn't be flushed. Possible reasons:
- * The database isn't running or isn't configured correctly.
- * At least one of the expected database tables doesn't exist.
- * The SQL was invalid.
-Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run.
-The full error: %s""" % (connection.settings_dict['NAME'], e))
- transaction.commit_unless_managed(using=db)
-
- # Emit the post sync signal. This allows individual
- # applications to respond as if the database had been
- # sync'd from scratch.
- all_models = []
- for app in models.get_apps():
- all_models.extend([
- m for m in models.get_models(app, include_auto_created=True)
- if router.allow_syncdb(db, m)
- ])
- emit_post_sync_signal(all_models, verbosity, interactive, db)
-
- # Reinstall the initial_data fixture.
- kwargs = options.copy()
- kwargs['database'] = db
- call_command('loaddata', 'initial_data', **kwargs)
-
- else:
- print "Flush cancelled."
diff --git a/parts/django/django/core/management/commands/inspectdb.py b/parts/django/django/core/management/commands/inspectdb.py
deleted file mode 100644
index e45f22c..0000000
--- a/parts/django/django/core/management/commands/inspectdb.py
+++ /dev/null
@@ -1,164 +0,0 @@
-import keyword
-from optparse import make_option
-
-from django.core.management.base import NoArgsCommand, CommandError
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(NoArgsCommand):
- help = "Introspects the database tables in the given database and outputs a Django model module."
-
- option_list = NoArgsCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to '
- 'introspect. Defaults to using the "default" database.'),
- )
-
- requires_model_validation = False
-
- db_module = 'django.db'
-
- def handle_noargs(self, **options):
- try:
- for line in self.handle_inspection(options):
- print line
- except NotImplementedError:
- raise CommandError("Database inspection isn't supported for the currently selected database backend.")
-
- def handle_inspection(self, options):
- connection = connections[options.get('database', DEFAULT_DB_ALIAS)]
-
- table2model = lambda table_name: table_name.title().replace('_', '').replace(' ', '').replace('-', '')
-
- cursor = connection.cursor()
- yield "# This is an auto-generated Django model module."
- yield "# You'll have to do the following manually to clean this up:"
- yield "# * Rearrange models' order"
- yield "# * Make sure each model has one field with primary_key=True"
- yield "# Feel free to rename the models, but don't rename db_table values or field names."
- yield "#"
- yield "# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'"
- yield "# into your database."
- yield ''
- yield 'from %s import models' % self.db_module
- yield ''
- for table_name in connection.introspection.get_table_list(cursor):
- yield 'class %s(models.Model):' % table2model(table_name)
- try:
- relations = connection.introspection.get_relations(cursor, table_name)
- except NotImplementedError:
- relations = {}
- try:
- indexes = connection.introspection.get_indexes(cursor, table_name)
- except NotImplementedError:
- indexes = {}
- for i, row in enumerate(connection.introspection.get_table_description(cursor, table_name)):
- column_name = row[0]
- att_name = column_name.lower()
- comment_notes = [] # Holds Field notes, to be displayed in a Python comment.
- extra_params = {} # Holds Field parameters such as 'db_column'.
-
- # If the column name can't be used verbatim as a Python
- # attribute, set the "db_column" for this Field.
- if ' ' in att_name or '-' in att_name or keyword.iskeyword(att_name) or column_name != att_name:
- extra_params['db_column'] = column_name
-
- # Modify the field name to make it Python-compatible.
- if ' ' in att_name:
- att_name = att_name.replace(' ', '_')
- comment_notes.append('Field renamed to remove spaces.')
- if '-' in att_name:
- att_name = att_name.replace('-', '_')
- comment_notes.append('Field renamed to remove dashes.')
- if keyword.iskeyword(att_name):
- att_name += '_field'
- comment_notes.append('Field renamed because it was a Python reserved word.')
- if column_name != att_name:
- comment_notes.append('Field name made lowercase.')
-
- if i in relations:
- rel_to = relations[i][1] == table_name and "'self'" or table2model(relations[i][1])
- field_type = 'ForeignKey(%s' % rel_to
- if att_name.endswith('_id'):
- att_name = att_name[:-3]
- else:
- extra_params['db_column'] = column_name
- else:
- # Calling `get_field_type` to get the field type string and any
- # additional paramters and notes.
- field_type, field_params, field_notes = self.get_field_type(connection, table_name, row)
- extra_params.update(field_params)
- comment_notes.extend(field_notes)
-
- # Add primary_key and unique, if necessary.
- if column_name in indexes:
- if indexes[column_name]['primary_key']:
- extra_params['primary_key'] = True
- elif indexes[column_name]['unique']:
- extra_params['unique'] = True
-
- field_type += '('
-
- # Don't output 'id = meta.AutoField(primary_key=True)', because
- # that's assumed if it doesn't exist.
- if att_name == 'id' and field_type == 'AutoField(' and extra_params == {'primary_key': True}:
- continue
-
- # Add 'null' and 'blank', if the 'null_ok' flag was present in the
- # table description.
- if row[6]: # If it's NULL...
- extra_params['blank'] = True
- if not field_type in ('TextField(', 'CharField('):
- extra_params['null'] = True
-
- field_desc = '%s = models.%s' % (att_name, field_type)
- if extra_params:
- if not field_desc.endswith('('):
- field_desc += ', '
- field_desc += ', '.join(['%s=%r' % (k, v) for k, v in extra_params.items()])
- field_desc += ')'
- if comment_notes:
- field_desc += ' # ' + ' '.join(comment_notes)
- yield ' %s' % field_desc
- for meta_line in self.get_meta(table_name):
- yield meta_line
-
- def get_field_type(self, connection, table_name, row):
- """
- Given the database connection, the table name, and the cursor row
- description, this routine will return the given field type name, as
- well as any additional keyword parameters and notes for the field.
- """
- field_params = {}
- field_notes = []
-
- try:
- field_type = connection.introspection.get_field_type(row[1], row)
- except KeyError:
- field_type = 'TextField'
- field_notes.append('This field type is a guess.')
-
- # This is a hook for DATA_TYPES_REVERSE to return a tuple of
- # (field_type, field_params_dict).
- if type(field_type) is tuple:
- field_type, new_params = field_type
- field_params.update(new_params)
-
- # Add max_length for all CharFields.
- if field_type == 'CharField' and row[3]:
- field_params['max_length'] = row[3]
-
- if field_type == 'DecimalField':
- field_params['max_digits'] = row[4]
- field_params['decimal_places'] = row[5]
-
- return field_type, field_params, field_notes
-
- def get_meta(self, table_name):
- """
- Return a sequence comprising the lines of code necessary
- to construct the inner Meta class for the model corresponding
- to the given database table name.
- """
- return [' class Meta:',
- ' db_table = %r' % table_name,
- '']
diff --git a/parts/django/django/core/management/commands/loaddata.py b/parts/django/django/core/management/commands/loaddata.py
deleted file mode 100644
index b8bb62f..0000000
--- a/parts/django/django/core/management/commands/loaddata.py
+++ /dev/null
@@ -1,243 +0,0 @@
-import sys
-import os
-import gzip
-import zipfile
-from optparse import make_option
-
-from django.conf import settings
-from django.core import serializers
-from django.core.management.base import BaseCommand
-from django.core.management.color import no_style
-from django.db import connections, router, transaction, DEFAULT_DB_ALIAS
-from django.db.models import get_apps
-from django.utils.itercompat import product
-
-try:
- import bz2
- has_bz2 = True
-except ImportError:
- has_bz2 = False
-
-class Command(BaseCommand):
- help = 'Installs the named fixture(s) in the database.'
- args = "fixture [fixture ...]"
-
- option_list = BaseCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a specific database to load '
- 'fixtures into. Defaults to the "default" database.'),
- )
-
- def handle(self, *fixture_labels, **options):
- using = options.get('database', DEFAULT_DB_ALIAS)
-
- connection = connections[using]
- self.style = no_style()
-
- verbosity = int(options.get('verbosity', 1))
- show_traceback = options.get('traceback', False)
-
- # commit is a stealth option - it isn't really useful as
- # a command line option, but it can be useful when invoking
- # loaddata from within another script.
- # If commit=True, loaddata will use its own transaction;
- # if commit=False, the data load SQL will become part of
- # the transaction in place when loaddata was invoked.
- commit = options.get('commit', True)
-
- # Keep a count of the installed objects and fixtures
- fixture_count = 0
- loaded_object_count = 0
- fixture_object_count = 0
- models = set()
-
- humanize = lambda dirname: dirname and "'%s'" % dirname or 'absolute path'
-
- # Get a cursor (even though we don't need one yet). This has
- # the side effect of initializing the test database (if
- # it isn't already initialized).
- cursor = connection.cursor()
-
- # Start transaction management. All fixtures are installed in a
- # single transaction to ensure that all references are resolved.
- if commit:
- transaction.commit_unless_managed(using=using)
- transaction.enter_transaction_management(using=using)
- transaction.managed(True, using=using)
-
- class SingleZipReader(zipfile.ZipFile):
- def __init__(self, *args, **kwargs):
- zipfile.ZipFile.__init__(self, *args, **kwargs)
- if settings.DEBUG:
- assert len(self.namelist()) == 1, "Zip-compressed fixtures must contain only one file."
- def read(self):
- return zipfile.ZipFile.read(self, self.namelist()[0])
-
- compression_types = {
- None: file,
- 'gz': gzip.GzipFile,
- 'zip': SingleZipReader
- }
- if has_bz2:
- compression_types['bz2'] = bz2.BZ2File
-
- app_module_paths = []
- for app in get_apps():
- if hasattr(app, '__path__'):
- # It's a 'models/' subpackage
- for path in app.__path__:
- app_module_paths.append(path)
- else:
- # It's a models.py module
- app_module_paths.append(app.__file__)
-
- app_fixtures = [os.path.join(os.path.dirname(path), 'fixtures') for path in app_module_paths]
- for fixture_label in fixture_labels:
- parts = fixture_label.split('.')
-
- if len(parts) > 1 and parts[-1] in compression_types:
- compression_formats = [parts[-1]]
- parts = parts[:-1]
- else:
- compression_formats = compression_types.keys()
-
- if len(parts) == 1:
- fixture_name = parts[0]
- formats = serializers.get_public_serializer_formats()
- else:
- fixture_name, format = '.'.join(parts[:-1]), parts[-1]
- if format in serializers.get_public_serializer_formats():
- formats = [format]
- else:
- formats = []
-
- if formats:
- if verbosity > 1:
- self.stdout.write("Loading '%s' fixtures...\n" % fixture_name)
- else:
- self.stderr.write(
- self.style.ERROR("Problem installing fixture '%s': %s is not a known serialization format.\n" %
- (fixture_name, format)))
- if commit:
- transaction.rollback(using=using)
- transaction.leave_transaction_management(using=using)
- return
-
- if os.path.isabs(fixture_name):
- fixture_dirs = [fixture_name]
- else:
- fixture_dirs = app_fixtures + list(settings.FIXTURE_DIRS) + ['']
-
- for fixture_dir in fixture_dirs:
- if verbosity > 1:
- self.stdout.write("Checking %s for fixtures...\n" % humanize(fixture_dir))
-
- label_found = False
- for combo in product([using, None], formats, compression_formats):
- database, format, compression_format = combo
- file_name = '.'.join(
- p for p in [
- fixture_name, database, format, compression_format
- ]
- if p
- )
-
- if verbosity > 1:
- self.stdout.write("Trying %s for %s fixture '%s'...\n" % \
- (humanize(fixture_dir), file_name, fixture_name))
- full_path = os.path.join(fixture_dir, file_name)
- open_method = compression_types[compression_format]
- try:
- fixture = open_method(full_path, 'r')
- if label_found:
- fixture.close()
- self.stderr.write(self.style.ERROR("Multiple fixtures named '%s' in %s. Aborting.\n" %
- (fixture_name, humanize(fixture_dir))))
- if commit:
- transaction.rollback(using=using)
- transaction.leave_transaction_management(using=using)
- return
- else:
- fixture_count += 1
- objects_in_fixture = 0
- loaded_objects_in_fixture = 0
- if verbosity > 0:
- self.stdout.write("Installing %s fixture '%s' from %s.\n" % \
- (format, fixture_name, humanize(fixture_dir)))
- try:
- objects = serializers.deserialize(format, fixture, using=using)
- for obj in objects:
- objects_in_fixture += 1
- if router.allow_syncdb(using, obj.object.__class__):
- loaded_objects_in_fixture += 1
- models.add(obj.object.__class__)
- obj.save(using=using)
- loaded_object_count += loaded_objects_in_fixture
- fixture_object_count += objects_in_fixture
- label_found = True
- except (SystemExit, KeyboardInterrupt):
- raise
- except Exception:
- import traceback
- fixture.close()
- if commit:
- transaction.rollback(using=using)
- transaction.leave_transaction_management(using=using)
- if show_traceback:
- traceback.print_exc()
- else:
- self.stderr.write(
- self.style.ERROR("Problem installing fixture '%s': %s\n" %
- (full_path, ''.join(traceback.format_exception(sys.exc_type,
- sys.exc_value, sys.exc_traceback)))))
- return
- fixture.close()
-
- # If the fixture we loaded contains 0 objects, assume that an
- # error was encountered during fixture loading.
- if objects_in_fixture == 0:
- self.stderr.write(
- self.style.ERROR("No fixture data found for '%s'. (File format may be invalid.)\n" %
- (fixture_name)))
- if commit:
- transaction.rollback(using=using)
- transaction.leave_transaction_management(using=using)
- return
-
- except Exception, e:
- if verbosity > 1:
- self.stdout.write("No %s fixture '%s' in %s.\n" % \
- (format, fixture_name, humanize(fixture_dir)))
-
- # If we found even one object in a fixture, we need to reset the
- # database sequences.
- if loaded_object_count > 0:
- sequence_sql = connection.ops.sequence_reset_sql(self.style, models)
- if sequence_sql:
- if verbosity > 1:
- self.stdout.write("Resetting sequences\n")
- for line in sequence_sql:
- cursor.execute(line)
-
- if commit:
- transaction.commit(using=using)
- transaction.leave_transaction_management(using=using)
-
- if fixture_object_count == 0:
- if verbosity > 0:
- self.stdout.write("No fixtures found.\n")
- else:
- if verbosity > 0:
- if fixture_object_count == loaded_object_count:
- self.stdout.write("Installed %d object(s) from %d fixture(s)\n" % (
- loaded_object_count, fixture_count))
- else:
- self.stdout.write("Installed %d object(s) (of %d) from %d fixture(s)\n" % (
- loaded_object_count, fixture_object_count, fixture_count))
-
- # Close the DB connection. This is required as a workaround for an
- # edge case in MySQL: if the same connection is used to
- # create tables, load data, and query, the query can return
- # incorrect results. See Django #7572, MySQL #37735.
- if commit:
- connection.close()
diff --git a/parts/django/django/core/management/commands/makemessages.py b/parts/django/django/core/management/commands/makemessages.py
deleted file mode 100644
index 955a822..0000000
--- a/parts/django/django/core/management/commands/makemessages.py
+++ /dev/null
@@ -1,321 +0,0 @@
-import fnmatch
-import glob
-import os
-import re
-import sys
-from itertools import dropwhile
-from optparse import make_option
-from subprocess import PIPE, Popen
-
-from django.core.management.base import CommandError, BaseCommand
-from django.utils.text import get_text_list
-
-pythonize_re = re.compile(r'(?:^|\n)\s*//')
-plural_forms_re = re.compile(r'^(?P<value>"Plural-Forms.+?\\n")\s*$', re.MULTILINE | re.DOTALL)
-
-def handle_extensions(extensions=('html',)):
- """
- organizes multiple extensions that are separated with commas or passed by
- using --extension/-e multiple times.
-
- for example: running 'django-admin makemessages -e js,txt -e xhtml -a'
- would result in a extension list: ['.js', '.txt', '.xhtml']
-
- >>> handle_extensions(['.html', 'html,js,py,py,py,.py', 'py,.py'])
- ['.html', '.js']
- >>> handle_extensions(['.html, txt,.tpl'])
- ['.html', '.tpl', '.txt']
- """
- ext_list = []
- for ext in extensions:
- ext_list.extend(ext.replace(' ','').split(','))
- for i, ext in enumerate(ext_list):
- if not ext.startswith('.'):
- ext_list[i] = '.%s' % ext_list[i]
-
- # we don't want *.py files here because of the way non-*.py files
- # are handled in make_messages() (they are copied to file.ext.py files to
- # trick xgettext to parse them as Python files)
- return set([x for x in ext_list if x != '.py'])
-
-def _popen(cmd):
- """
- Friendly wrapper around Popen for Windows
- """
- p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE, close_fds=os.name != 'nt', universal_newlines=True)
- return p.communicate()
-
-def walk(root, topdown=True, onerror=None, followlinks=False):
- """
- A version of os.walk that can follow symlinks for Python < 2.6
- """
- for dirpath, dirnames, filenames in os.walk(root, topdown, onerror):
- yield (dirpath, dirnames, filenames)
- if followlinks:
- for d in dirnames:
- p = os.path.join(dirpath, d)
- if os.path.islink(p):
- for link_dirpath, link_dirnames, link_filenames in walk(p):
- yield (link_dirpath, link_dirnames, link_filenames)
-
-def is_ignored(path, ignore_patterns):
- """
- Helper function to check if the given path should be ignored or not.
- """
- for pattern in ignore_patterns:
- if fnmatch.fnmatchcase(path, pattern):
- return True
- return False
-
-def find_files(root, ignore_patterns, verbosity, symlinks=False):
- """
- Helper function to get all files in the given root.
- """
- all_files = []
- for (dirpath, dirnames, filenames) in walk(".", followlinks=symlinks):
- for f in filenames:
- norm_filepath = os.path.normpath(os.path.join(dirpath, f))
- if is_ignored(norm_filepath, ignore_patterns):
- if verbosity > 1:
- sys.stdout.write('ignoring file %s in %s\n' % (f, dirpath))
- else:
- all_files.extend([(dirpath, f)])
- all_files.sort()
- return all_files
-
-def copy_plural_forms(msgs, locale, domain, verbosity):
- """
- Copies plural forms header contents from a Django catalog of locale to
- the msgs string, inserting it at the right place. msgs should be the
- contents of a newly created .po file.
- """
- import django
- django_dir = os.path.normpath(os.path.join(os.path.dirname(django.__file__)))
- if domain == 'djangojs':
- domains = ('djangojs', 'django')
- else:
- domains = ('django',)
- for domain in domains:
- django_po = os.path.join(django_dir, 'conf', 'locale', locale, 'LC_MESSAGES', '%s.po' % domain)
- if os.path.exists(django_po):
- m = plural_forms_re.search(open(django_po, 'rU').read())
- if m:
- if verbosity > 1:
- sys.stderr.write("copying plural forms: %s\n" % m.group('value'))
- lines = []
- seen = False
- for line in msgs.split('\n'):
- if not line and not seen:
- line = '%s\n' % m.group('value')
- seen = True
- lines.append(line)
- msgs = '\n'.join(lines)
- break
- return msgs
-
-
-def make_messages(locale=None, domain='django', verbosity='1', all=False,
- extensions=None, symlinks=False, ignore_patterns=[]):
- """
- Uses the locale directory from the Django SVN tree or an application/
- project to process all
- """
- # Need to ensure that the i18n framework is enabled
- from django.conf import settings
- if settings.configured:
- settings.USE_I18N = True
- else:
- settings.configure(USE_I18N = True)
-
- from django.utils.translation import templatize
-
- invoked_for_django = False
- if os.path.isdir(os.path.join('conf', 'locale')):
- localedir = os.path.abspath(os.path.join('conf', 'locale'))
- invoked_for_django = True
- elif os.path.isdir('locale'):
- localedir = os.path.abspath('locale')
- else:
- raise CommandError("This script should be run from the Django SVN tree or your project or app tree. If you did indeed run it from the SVN checkout or your project or application, maybe you are just missing the conf/locale (in the django tree) or locale (for project and application) directory? It is not created automatically, you have to create it by hand if you want to enable i18n for your project or application.")
-
- if domain not in ('django', 'djangojs'):
- raise CommandError("currently makemessages only supports domains 'django' and 'djangojs'")
-
- if (locale is None and not all) or domain is None:
- # backwards compatible error message
- if not sys.argv[0].endswith("make-messages.py"):
- message = "Type '%s help %s' for usage.\n" % (os.path.basename(sys.argv[0]), sys.argv[1])
- else:
- message = "usage: make-messages.py -l <language>\n or: make-messages.py -a\n"
- raise CommandError(message)
-
- # We require gettext version 0.15 or newer.
- output = _popen('xgettext --version')[0]
- match = re.search(r'(?P<major>\d+)\.(?P<minor>\d+)', output)
- if match:
- xversion = (int(match.group('major')), int(match.group('minor')))
- if xversion < (0, 15):
- raise CommandError("Django internationalization requires GNU gettext 0.15 or newer. You are using version %s, please upgrade your gettext toolset." % match.group())
-
- languages = []
- if locale is not None:
- languages.append(locale)
- elif all:
- locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % localedir))
- languages = [os.path.basename(l) for l in locale_dirs]
-
- for locale in languages:
- if verbosity > 0:
- print "processing language", locale
- basedir = os.path.join(localedir, locale, 'LC_MESSAGES')
- if not os.path.isdir(basedir):
- os.makedirs(basedir)
-
- pofile = os.path.join(basedir, '%s.po' % domain)
- potfile = os.path.join(basedir, '%s.pot' % domain)
-
- if os.path.exists(potfile):
- os.unlink(potfile)
-
- for dirpath, file in find_files(".", ignore_patterns, verbosity, symlinks=symlinks):
- file_base, file_ext = os.path.splitext(file)
- if domain == 'djangojs' and file_ext in extensions:
- if verbosity > 1:
- sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
- src = open(os.path.join(dirpath, file), "rU").read()
- src = pythonize_re.sub('\n#', src)
- thefile = '%s.py' % file
- f = open(os.path.join(dirpath, thefile), "w")
- try:
- f.write(src)
- finally:
- f.close()
- cmd = 'xgettext -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (domain, os.path.join(dirpath, thefile))
- msgs, errors = _popen(cmd)
- if errors:
- raise CommandError("errors happened while running xgettext on %s\n%s" % (file, errors))
- old = '#: '+os.path.join(dirpath, thefile)[2:]
- new = '#: '+os.path.join(dirpath, file)[2:]
- msgs = msgs.replace(old, new)
- if os.path.exists(potfile):
- # Strip the header
- msgs = '\n'.join(dropwhile(len, msgs.split('\n')))
- else:
- msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')
- if msgs:
- f = open(potfile, 'ab')
- try:
- f.write(msgs)
- finally:
- f.close()
- os.unlink(os.path.join(dirpath, thefile))
- elif domain == 'django' and (file_ext == '.py' or file_ext in extensions):
- thefile = file
- if file_ext in extensions:
- src = open(os.path.join(dirpath, file), "rU").read()
- thefile = '%s.py' % file
- try:
- f = open(os.path.join(dirpath, thefile), "w")
- try:
- f.write(templatize(src))
- finally:
- f.close()
- except SyntaxError, msg:
- msg = "%s (file: %s)" % (msg, os.path.join(dirpath, file))
- raise SyntaxError(msg)
- if verbosity > 1:
- sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
- cmd = 'xgettext -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
- domain, os.path.join(dirpath, thefile))
- msgs, errors = _popen(cmd)
- if errors:
- raise CommandError("errors happened while running xgettext on %s\n%s" % (file, errors))
-
- if thefile != file:
- old = '#: '+os.path.join(dirpath, thefile)[2:]
- new = '#: '+os.path.join(dirpath, file)[2:]
- msgs = msgs.replace(old, new)
- if os.path.exists(potfile):
- # Strip the header
- msgs = '\n'.join(dropwhile(len, msgs.split('\n')))
- else:
- msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')
- if msgs:
- f = open(potfile, 'ab')
- try:
- f.write(msgs)
- finally:
- f.close()
- if thefile != file:
- os.unlink(os.path.join(dirpath, thefile))
-
- if os.path.exists(potfile):
- msgs, errors = _popen('msguniq --to-code=utf-8 "%s"' % potfile)
- if errors:
- raise CommandError("errors happened while running msguniq\n%s" % errors)
- f = open(potfile, 'w')
- try:
- f.write(msgs)
- finally:
- f.close()
- if os.path.exists(pofile):
- msgs, errors = _popen('msgmerge -q "%s" "%s"' % (pofile, potfile))
- if errors:
- raise CommandError("errors happened while running msgmerge\n%s" % errors)
- elif not invoked_for_django:
- msgs = copy_plural_forms(msgs, locale, domain, verbosity)
- f = open(pofile, 'wb')
- try:
- f.write(msgs)
- finally:
- f.close()
- os.unlink(potfile)
-
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--locale', '-l', default=None, dest='locale',
- help='Creates or updates the message files only for the given locale (e.g. pt_BR).'),
- make_option('--domain', '-d', default='django', dest='domain',
- help='The domain of the message files (default: "django").'),
- make_option('--all', '-a', action='store_true', dest='all',
- default=False, help='Reexamines all source code and templates for new translation strings and updates all message files for all available languages.'),
- make_option('--extension', '-e', dest='extensions',
- help='The file extension(s) to examine (default: ".html", separate multiple extensions with commas, or use -e multiple times)',
- action='append'),
- make_option('--symlinks', '-s', action='store_true', dest='symlinks',
- default=False, help='Follows symlinks to directories when examining source code and templates for translation strings.'),
- make_option('--ignore', '-i', action='append', dest='ignore_patterns',
- default=[], metavar='PATTERN', help='Ignore files or directories matching this glob-style pattern. Use multiple times to ignore more.'),
- make_option('--no-default-ignore', action='store_false', dest='use_default_ignore_patterns',
- default=True, help="Don't ignore the common glob-style patterns 'CVS', '.*' and '*~'."),
- )
- help = "Runs over the entire source tree of the current directory and pulls out all strings marked for translation. It creates (or updates) a message file in the conf/locale (in the django tree) or locale (for project and application) directory."
-
- requires_model_validation = False
- can_import_settings = False
-
- def handle(self, *args, **options):
- if len(args) != 0:
- raise CommandError("Command doesn't accept any arguments")
-
- locale = options.get('locale')
- domain = options.get('domain')
- verbosity = int(options.get('verbosity'))
- process_all = options.get('all')
- extensions = options.get('extensions')
- symlinks = options.get('symlinks')
- ignore_patterns = options.get('ignore_patterns')
- if options.get('use_default_ignore_patterns'):
- ignore_patterns += ['CVS', '.*', '*~']
- ignore_patterns = list(set(ignore_patterns))
-
- if domain == 'djangojs':
- extensions = handle_extensions(extensions or ['js'])
- else:
- extensions = handle_extensions(extensions or ['html'])
-
- if verbosity > 1:
- sys.stdout.write('examining files with the extensions: %s\n' % get_text_list(list(extensions), 'and'))
-
- make_messages(locale, domain, verbosity, process_all, extensions, symlinks, ignore_patterns)
diff --git a/parts/django/django/core/management/commands/reset.py b/parts/django/django/core/management/commands/reset.py
deleted file mode 100644
index 475fd25..0000000
--- a/parts/django/django/core/management/commands/reset.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from optparse import make_option
-
-from django.conf import settings
-from django.core.management.base import AppCommand, CommandError
-from django.core.management.color import no_style
-from django.core.management.sql import sql_reset
-from django.db import connections, transaction, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- option_list = AppCommand.option_list + (
- make_option('--noinput', action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.'),
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to reset. '
- 'Defaults to the "default" database.'),
- )
- help = "Executes ``sqlreset`` for the given app(s) in the current database."
- args = '[appname ...]'
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- using = options.get('database', DEFAULT_DB_ALIAS)
- connection = connections[using]
-
- app_name = app.__name__.split('.')[-2]
- self.style = no_style()
-
- sql_list = sql_reset(app, self.style, connection)
-
- if options.get('interactive'):
- confirm = raw_input("""
-You have requested a database reset.
-This will IRREVERSIBLY DESTROY any data for
-the "%s" application in the database "%s".
-Are you sure you want to do this?
-
-Type 'yes' to continue, or 'no' to cancel: """ % (app_name, connection.settings_dict['NAME']))
- else:
- confirm = 'yes'
-
- if confirm == 'yes':
- try:
- cursor = connection.cursor()
- for sql in sql_list:
- cursor.execute(sql)
- except Exception, e:
- transaction.rollback_unless_managed()
- raise CommandError("""Error: %s couldn't be reset. Possible reasons:
- * The database isn't running or isn't configured correctly.
- * At least one of the database tables doesn't exist.
- * The SQL was invalid.
-Hint: Look at the output of 'django-admin.py sqlreset %s'. That's the SQL this command wasn't able to run.
-The full error: %s""" % (app_name, app_name, e))
- transaction.commit_unless_managed()
- else:
- print "Reset cancelled."
diff --git a/parts/django/django/core/management/commands/runfcgi.py b/parts/django/django/core/management/commands/runfcgi.py
deleted file mode 100644
index a60d4eb..0000000
--- a/parts/django/django/core/management/commands/runfcgi.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.core.management.base import BaseCommand
-
-class Command(BaseCommand):
- help = "Runs this project as a FastCGI application. Requires flup."
- args = '[various KEY=val options, use `runfcgi help` for help]'
-
- def handle(self, *args, **options):
- from django.conf import settings
- from django.utils import translation
- # Activate the current language, because it won't get activated later.
- try:
- translation.activate(settings.LANGUAGE_CODE)
- except AttributeError:
- pass
- from django.core.servers.fastcgi import runfastcgi
- runfastcgi(args)
-
- def usage(self, subcommand):
- from django.core.servers.fastcgi import FASTCGI_HELP
- return FASTCGI_HELP
diff --git a/parts/django/django/core/management/commands/runserver.py b/parts/django/django/core/management/commands/runserver.py
deleted file mode 100644
index fc2c694..0000000
--- a/parts/django/django/core/management/commands/runserver.py
+++ /dev/null
@@ -1,84 +0,0 @@
-from django.core.management.base import BaseCommand, CommandError
-from optparse import make_option
-import os
-import sys
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--noreload', action='store_false', dest='use_reloader', default=True,
- help='Tells Django to NOT use the auto-reloader.'),
- make_option('--adminmedia', dest='admin_media_path', default='',
- help='Specifies the directory from which to serve admin media.'),
- )
- help = "Starts a lightweight Web server for development."
- args = '[optional port number, or ipaddr:port]'
-
- # Validation is called explicitly each time the server is reloaded.
- requires_model_validation = False
-
- def handle(self, addrport='', *args, **options):
- import django
- from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException
- from django.core.handlers.wsgi import WSGIHandler
- if args:
- raise CommandError('Usage is runserver %s' % self.args)
- if not addrport:
- addr = ''
- port = '8000'
- else:
- try:
- addr, port = addrport.split(':')
- except ValueError:
- addr, port = '', addrport
- if not addr:
- addr = '127.0.0.1'
-
- if not port.isdigit():
- raise CommandError("%r is not a valid port number." % port)
-
- use_reloader = options.get('use_reloader', True)
- admin_media_path = options.get('admin_media_path', '')
- shutdown_message = options.get('shutdown_message', '')
- quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C'
-
- def inner_run():
- from django.conf import settings
- from django.utils import translation
- print "Validating models..."
- self.validate(display_num_errors=True)
- print "\nDjango version %s, using settings %r" % (django.get_version(), settings.SETTINGS_MODULE)
- print "Development server is running at http://%s:%s/" % (addr, port)
- print "Quit the server with %s." % quit_command
-
- # django.core.management.base forces the locale to en-us. We should
- # set it up correctly for the first request (particularly important
- # in the "--noreload" case).
- translation.activate(settings.LANGUAGE_CODE)
-
- try:
- handler = AdminMediaHandler(WSGIHandler(), admin_media_path)
- run(addr, int(port), handler)
- except WSGIServerException, e:
- # Use helpful error messages instead of ugly tracebacks.
- ERRORS = {
- 13: "You don't have permission to access that port.",
- 98: "That port is already in use.",
- 99: "That IP address can't be assigned-to.",
- }
- try:
- error_text = ERRORS[e.args[0].args[0]]
- except (AttributeError, KeyError):
- error_text = str(e)
- sys.stderr.write(self.style.ERROR("Error: %s" % error_text) + '\n')
- # Need to use an OS exit because sys.exit doesn't work in a thread
- os._exit(1)
- except KeyboardInterrupt:
- if shutdown_message:
- print shutdown_message
- sys.exit(0)
-
- if use_reloader:
- from django.utils import autoreload
- autoreload.main(inner_run)
- else:
- inner_run()
diff --git a/parts/django/django/core/management/commands/shell.py b/parts/django/django/core/management/commands/shell.py
deleted file mode 100644
index abb440e..0000000
--- a/parts/django/django/core/management/commands/shell.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import os
-from django.core.management.base import NoArgsCommand
-from optparse import make_option
-
-class Command(NoArgsCommand):
- option_list = NoArgsCommand.option_list + (
- make_option('--plain', action='store_true', dest='plain',
- help='Tells Django to use plain Python, not IPython.'),
- )
- help = "Runs a Python interactive interpreter. Tries to use IPython, if it's available."
-
- requires_model_validation = False
-
- def handle_noargs(self, **options):
- # XXX: (Temporary) workaround for ticket #1796: force early loading of all
- # models from installed apps.
- from django.db.models.loading import get_models
- loaded_models = get_models()
-
- use_plain = options.get('plain', False)
-
- try:
- if use_plain:
- # Don't bother loading IPython, because the user wants plain Python.
- raise ImportError
- try:
- from IPython.frontend.terminal.embed import TerminalInteractiveShell
- shell = TerminalInteractiveShell()
- shell.mainloop()
- except ImportError:
- # IPython < 0.11
- # Explicitly pass an empty list as arguments, because otherwise
- # IPython would use sys.argv from this script.
- try:
- from IPython.Shell import IPShell
- shell = IPShell(argv=[])
- shell.mainloop()
- except ImportError:
- # IPython not found at all, raise ImportError
- raise
- except ImportError:
- import code
- # Set up a dictionary to serve as the environment for the shell, so
- # that tab completion works on objects that are imported at runtime.
- # See ticket 5082.
- imported_objects = {}
- try: # Try activating rlcompleter, because it's handy.
- import readline
- except ImportError:
- pass
- else:
- # We don't have to wrap the following import in a 'try', because
- # we already know 'readline' was imported successfully.
- import rlcompleter
- readline.set_completer(rlcompleter.Completer(imported_objects).complete)
- readline.parse_and_bind("tab:complete")
-
- # We want to honor both $PYTHONSTARTUP and .pythonrc.py, so follow system
- # conventions and get $PYTHONSTARTUP first then import user.
- if not use_plain:
- pythonrc = os.environ.get("PYTHONSTARTUP")
- if pythonrc and os.path.isfile(pythonrc):
- try:
- execfile(pythonrc)
- except NameError:
- pass
- # This will import .pythonrc.py as a side-effect
- import user
- code.interact(local=imported_objects)
diff --git a/parts/django/django/core/management/commands/sql.py b/parts/django/django/core/management/commands/sql.py
deleted file mode 100644
index 582bc8e..0000000
--- a/parts/django/django/core/management/commands/sql.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import AppCommand
-from django.core.management.sql import sql_create
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- help = "Prints the CREATE TABLE SQL statements for the given app name(s)."
-
- option_list = AppCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
- )
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- return u'\n'.join(sql_create(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/sqlall.py b/parts/django/django/core/management/commands/sqlall.py
deleted file mode 100644
index 8f3a38e..0000000
--- a/parts/django/django/core/management/commands/sqlall.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import AppCommand
-from django.core.management.sql import sql_all
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- help = "Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s)."
-
- option_list = AppCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
- )
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- return u'\n'.join(sql_all(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/sqlclear.py b/parts/django/django/core/management/commands/sqlclear.py
deleted file mode 100644
index c7e3a5e..0000000
--- a/parts/django/django/core/management/commands/sqlclear.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import AppCommand
-from django.core.management.sql import sql_delete
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- help = "Prints the DROP TABLE SQL statements for the given app name(s)."
-
- option_list = AppCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
- )
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- return u'\n'.join(sql_delete(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/sqlcustom.py b/parts/django/django/core/management/commands/sqlcustom.py
deleted file mode 100644
index d206b04..0000000
--- a/parts/django/django/core/management/commands/sqlcustom.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import AppCommand
-from django.core.management.sql import sql_custom
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- help = "Prints the custom table modifying SQL statements for the given app name(s)."
-
- option_list = AppCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
- )
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- return u'\n'.join(sql_custom(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/sqlflush.py b/parts/django/django/core/management/commands/sqlflush.py
deleted file mode 100644
index 004f0a5..0000000
--- a/parts/django/django/core/management/commands/sqlflush.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import NoArgsCommand
-from django.core.management.sql import sql_flush
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(NoArgsCommand):
- help = "Returns a list of the SQL statements required to return all tables in the database to the state they were in just after they were installed."
-
- option_list = NoArgsCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
- )
-
- output_transaction = True
-
- def handle_noargs(self, **options):
- return u'\n'.join(sql_flush(self.style, connections[options.get('database', DEFAULT_DB_ALIAS)], only_django=True)).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/sqlindexes.py b/parts/django/django/core/management/commands/sqlindexes.py
deleted file mode 100644
index c889f03..0000000
--- a/parts/django/django/core/management/commands/sqlindexes.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import AppCommand
-from django.core.management.sql import sql_indexes
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- help = "Prints the CREATE INDEX SQL statements for the given model module name(s)."
-
- option_list = AppCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
-
- )
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- return u'\n'.join(sql_indexes(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/sqlinitialdata.py b/parts/django/django/core/management/commands/sqlinitialdata.py
deleted file mode 100644
index b9e2249..0000000
--- a/parts/django/django/core/management/commands/sqlinitialdata.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.core.management.base import AppCommand, CommandError
-
-class Command(AppCommand):
- help = "RENAMED: see 'sqlcustom'"
-
- def handle(self, *apps, **options):
- raise CommandError("This command has been renamed. Use the 'sqlcustom' command instead.")
diff --git a/parts/django/django/core/management/commands/sqlreset.py b/parts/django/django/core/management/commands/sqlreset.py
deleted file mode 100644
index 13f40de..0000000
--- a/parts/django/django/core/management/commands/sqlreset.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import AppCommand
-from django.core.management.sql import sql_reset
-from django.db import connections, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- help = "Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s)."
-
- option_list = AppCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
-
- )
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- return u'\n'.join(sql_reset(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/sqlsequencereset.py b/parts/django/django/core/management/commands/sqlsequencereset.py
deleted file mode 100644
index aaab38b..0000000
--- a/parts/django/django/core/management/commands/sqlsequencereset.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from optparse import make_option
-
-from django.core.management.base import AppCommand
-from django.db import connections, models, DEFAULT_DB_ALIAS
-
-class Command(AppCommand):
- help = 'Prints the SQL statements for resetting sequences for the given app name(s).'
-
- option_list = AppCommand.option_list + (
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
- 'SQL for. Defaults to the "default" database.'),
-
- )
-
- output_transaction = True
-
- def handle_app(self, app, **options):
- connection = connections[options.get('database', DEFAULT_DB_ALIAS)]
- return u'\n'.join(connection.ops.sequence_reset_sql(self.style, models.get_models(app, include_auto_created=True))).encode('utf-8')
diff --git a/parts/django/django/core/management/commands/startapp.py b/parts/django/django/core/management/commands/startapp.py
deleted file mode 100644
index 13d6483..0000000
--- a/parts/django/django/core/management/commands/startapp.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import os
-
-from django.core.management.base import copy_helper, CommandError, LabelCommand
-from django.utils.importlib import import_module
-
-class Command(LabelCommand):
- help = "Creates a Django app directory structure for the given app name in the current directory."
- args = "[appname]"
- label = 'application name'
-
- requires_model_validation = False
- # Can't import settings during this command, because they haven't
- # necessarily been created.
- can_import_settings = False
-
- def handle_label(self, app_name, directory=None, **options):
- if directory is None:
- directory = os.getcwd()
-
- # Determine the project_name by using the basename of directory,
- # which should be the full path of the project directory (or the
- # current directory if no directory was passed).
- project_name = os.path.basename(directory)
- if app_name == project_name:
- raise CommandError("You cannot create an app with the same name"
- " (%r) as your project." % app_name)
-
- # Check that the app_name cannot be imported.
- try:
- import_module(app_name)
- except ImportError:
- pass
- else:
- raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as an app name. Please try another name." % app_name)
-
- copy_helper(self.style, 'app', app_name, directory, project_name)
-
-class ProjectCommand(Command):
- help = ("Creates a Django app directory structure for the given app name"
- " in this project's directory.")
-
- def __init__(self, project_directory):
- super(ProjectCommand, self).__init__()
- self.project_directory = project_directory
-
- def handle_label(self, app_name, **options):
- super(ProjectCommand, self).handle_label(app_name, self.project_directory, **options)
diff --git a/parts/django/django/core/management/commands/startproject.py b/parts/django/django/core/management/commands/startproject.py
deleted file mode 100644
index 712e43d..0000000
--- a/parts/django/django/core/management/commands/startproject.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from django.core.management.base import copy_helper, CommandError, LabelCommand
-from django.utils.importlib import import_module
-import os
-import re
-from random import choice
-
-class Command(LabelCommand):
- help = "Creates a Django project directory structure for the given project name in the current directory."
- args = "[projectname]"
- label = 'project name'
-
- requires_model_validation = False
- # Can't import settings during this command, because they haven't
- # necessarily been created.
- can_import_settings = False
-
- def handle_label(self, project_name, **options):
- # Determine the project_name a bit naively -- by looking at the name of
- # the parent directory.
- directory = os.getcwd()
-
- # Check that the project_name cannot be imported.
- try:
- import_module(project_name)
- except ImportError:
- pass
- else:
- raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name." % project_name)
-
- copy_helper(self.style, 'project', project_name, directory)
-
- # Create a random SECRET_KEY hash, and put it in the main settings.
- main_settings_file = os.path.join(directory, project_name, 'settings.py')
- settings_contents = open(main_settings_file, 'r').read()
- fp = open(main_settings_file, 'w')
- secret_key = ''.join([choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)])
- settings_contents = re.sub(r"(?<=SECRET_KEY = ')'", secret_key + "'", settings_contents)
- fp.write(settings_contents)
- fp.close()
diff --git a/parts/django/django/core/management/commands/syncdb.py b/parts/django/django/core/management/commands/syncdb.py
deleted file mode 100644
index d1dd49b..0000000
--- a/parts/django/django/core/management/commands/syncdb.py
+++ /dev/null
@@ -1,152 +0,0 @@
-from optparse import make_option
-import sys
-
-from django.conf import settings
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
-from django.db import connections, router, transaction, models, DEFAULT_DB_ALIAS
-from django.utils.datastructures import SortedDict
-from django.utils.importlib import import_module
-
-
-class Command(NoArgsCommand):
- option_list = NoArgsCommand.option_list + (
- make_option('--noinput', action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.'),
- make_option('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to synchronize. '
- 'Defaults to the "default" database.'),
- )
- help = "Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created."
-
- def handle_noargs(self, **options):
-
- verbosity = int(options.get('verbosity', 1))
- interactive = options.get('interactive')
- show_traceback = options.get('traceback', False)
-
- self.style = no_style()
-
- # Import the 'management' module within each installed app, to register
- # dispatcher events.
- for app_name in settings.INSTALLED_APPS:
- try:
- import_module('.management', app_name)
- except ImportError, exc:
- # This is slightly hackish. We want to ignore ImportErrors
- # if the "management" module itself is missing -- but we don't
- # want to ignore the exception if the management module exists
- # but raises an ImportError for some reason. The only way we
- # can do this is to check the text of the exception. Note that
- # we're a bit broad in how we check the text, because different
- # Python implementations may not use the same text.
- # CPython uses the text "No module named management"
- # PyPy uses "No module named myproject.myapp.management"
- msg = exc.args[0]
- if not msg.startswith('No module named') or 'management' not in msg:
- raise
-
- db = options.get('database', DEFAULT_DB_ALIAS)
- connection = connections[db]
- cursor = connection.cursor()
-
- # Get a list of already installed *models* so that references work right.
- tables = connection.introspection.table_names()
- seen_models = connection.introspection.installed_models(tables)
- created_models = set()
- pending_references = {}
-
- # Build the manifest of apps and models that are to be synchronized
- all_models = [
- (app.__name__.split('.')[-2],
- [m for m in models.get_models(app, include_auto_created=True)
- if router.allow_syncdb(db, m)])
- for app in models.get_apps()
- ]
- def model_installed(model):
- opts = model._meta
- converter = connection.introspection.table_name_converter
- return not ((converter(opts.db_table) in tables) or
- (opts.auto_created and converter(opts.auto_created._meta.db_table) in tables))
-
- manifest = SortedDict(
- (app_name, filter(model_installed, model_list))
- for app_name, model_list in all_models
- )
-
- # Create the tables for each model
- for app_name, model_list in manifest.items():
- for model in model_list:
- # Create the model's database table, if it doesn't already exist.
- if verbosity >= 2:
- print "Processing %s.%s model" % (app_name, model._meta.object_name)
- sql, references = connection.creation.sql_create_model(model, self.style, seen_models)
- seen_models.add(model)
- created_models.add(model)
- for refto, refs in references.items():
- pending_references.setdefault(refto, []).extend(refs)
- if refto in seen_models:
- sql.extend(connection.creation.sql_for_pending_references(refto, self.style, pending_references))
- sql.extend(connection.creation.sql_for_pending_references(model, self.style, pending_references))
- if verbosity >= 1 and sql:
- print "Creating table %s" % model._meta.db_table
- for statement in sql:
- cursor.execute(statement)
- tables.append(connection.introspection.table_name_converter(model._meta.db_table))
-
-
- transaction.commit_unless_managed(using=db)
-
- # Send the post_syncdb signal, so individual apps can do whatever they need
- # to do at this point.
- emit_post_sync_signal(created_models, verbosity, interactive, db)
-
- # The connection may have been closed by a syncdb handler.
- cursor = connection.cursor()
-
- # Install custom SQL for the app (but only if this
- # is a model we've just created)
- for app_name, model_list in manifest.items():
- for model in model_list:
- if model in created_models:
- custom_sql = custom_sql_for_model(model, self.style, connection)
- if custom_sql:
- if verbosity >= 1:
- print "Installing custom SQL for %s.%s model" % (app_name, model._meta.object_name)
- try:
- for sql in custom_sql:
- cursor.execute(sql)
- except Exception, e:
- sys.stderr.write("Failed to install custom SQL for %s.%s model: %s\n" % \
- (app_name, model._meta.object_name, e))
- if show_traceback:
- import traceback
- traceback.print_exc()
- transaction.rollback_unless_managed(using=db)
- else:
- transaction.commit_unless_managed(using=db)
- else:
- if verbosity >= 2:
- print "No custom SQL for %s.%s model" % (app_name, model._meta.object_name)
-
- # Install SQL indicies for all newly created models
- for app_name, model_list in manifest.items():
- for model in model_list:
- if model in created_models:
- index_sql = connection.creation.sql_indexes_for_model(model, self.style)
- if index_sql:
- if verbosity >= 1:
- print "Installing index for %s.%s model" % (app_name, model._meta.object_name)
- try:
- for sql in index_sql:
- cursor.execute(sql)
- except Exception, e:
- sys.stderr.write("Failed to install index for %s.%s model: %s\n" % \
- (app_name, model._meta.object_name, e))
- transaction.rollback_unless_managed(using=db)
- else:
- transaction.commit_unless_managed(using=db)
-
- from django.core.management import call_command
- call_command('loaddata', 'initial_data', verbosity=verbosity, database=db)
diff --git a/parts/django/django/core/management/commands/test.py b/parts/django/django/core/management/commands/test.py
deleted file mode 100644
index 6d0a5d8..0000000
--- a/parts/django/django/core/management/commands/test.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from django.core.management.base import BaseCommand
-from optparse import make_option
-import sys
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--noinput', action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.'),
- make_option('--failfast', action='store_true', dest='failfast', default=False,
- help='Tells Django to stop running the test suite after first failed test.')
- )
- help = 'Runs the test suite for the specified applications, or the entire site if no apps are specified.'
- args = '[appname ...]'
-
- requires_model_validation = False
-
- def handle(self, *test_labels, **options):
- from django.conf import settings
- from django.test.utils import get_runner
-
- verbosity = int(options.get('verbosity', 1))
- interactive = options.get('interactive', True)
- failfast = options.get('failfast', False)
- TestRunner = get_runner(settings)
-
- if hasattr(TestRunner, 'func_name'):
- # Pre 1.2 test runners were just functions,
- # and did not support the 'failfast' option.
- import warnings
- warnings.warn(
- 'Function-based test runners are deprecated. Test runners should be classes with a run_tests() method.',
- PendingDeprecationWarning
- )
- failures = TestRunner(test_labels, verbosity=verbosity, interactive=interactive)
- else:
- test_runner = TestRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
- failures = test_runner.run_tests(test_labels)
-
- if failures:
- sys.exit(bool(failures))
diff --git a/parts/django/django/core/management/commands/testserver.py b/parts/django/django/core/management/commands/testserver.py
deleted file mode 100644
index 6c75a3e..0000000
--- a/parts/django/django/core/management/commands/testserver.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from django.core.management.base import BaseCommand
-
-from optparse import make_option
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--addrport', action='store', dest='addrport',
- type='string', default='',
- help='port number or ipaddr:port to run the server on'),
- )
- help = 'Runs a development server with data from the given fixture(s).'
- args = '[fixture ...]'
-
- requires_model_validation = False
-
- def handle(self, *fixture_labels, **options):
- from django.core.management import call_command
- from django.db import connection
-
- verbosity = int(options.get('verbosity', 1))
- addrport = options.get('addrport')
-
- # Create a test database.
- db_name = connection.creation.create_test_db(verbosity=verbosity)
-
- # Import the fixture data into the test database.
- call_command('loaddata', *fixture_labels, **{'verbosity': verbosity})
-
- # Run the development server. Turn off auto-reloading because it causes
- # a strange error -- it causes this handle() method to be called
- # multiple times.
- shutdown_message = '\nServer stopped.\nNote that the test database, %r, has not been deleted. You can explore it on your own.' % db_name
- call_command('runserver', addrport=addrport, shutdown_message=shutdown_message, use_reloader=False)
diff --git a/parts/django/django/core/management/commands/validate.py b/parts/django/django/core/management/commands/validate.py
deleted file mode 100644
index 760d41c..0000000
--- a/parts/django/django/core/management/commands/validate.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.core.management.base import NoArgsCommand
-
-class Command(NoArgsCommand):
- help = "Validates all installed models."
-
- requires_model_validation = False
-
- def handle_noargs(self, **options):
- self.validate(display_num_errors=True)
diff --git a/parts/django/django/core/management/sql.py b/parts/django/django/core/management/sql.py
deleted file mode 100644
index 86d91fa..0000000
--- a/parts/django/django/core/management/sql.py
+++ /dev/null
@@ -1,182 +0,0 @@
-import os
-import re
-
-from django.conf import settings
-from django.core.management.base import CommandError
-from django.db import models
-from django.db.models import get_models
-
-def sql_create(app, style, connection):
- "Returns a list of the CREATE TABLE SQL statements for the given app."
-
- if connection.settings_dict['ENGINE'] == 'django.db.backends.dummy':
- # This must be the "dummy" database backend, which means the user
- # hasn't set ENGINE for the databse.
- raise CommandError("Django doesn't know which syntax to use for your SQL statements,\n" +
- "because you haven't specified the ENGINE setting for the database.\n" +
- "Edit your settings file and change DATBASES['default']['ENGINE'] to something like\n" +
- "'django.db.backends.postgresql' or 'django.db.backends.mysql'.")
-
- # Get installed models, so we generate REFERENCES right.
- # We trim models from the current app so that the sqlreset command does not
- # generate invalid SQL (leaving models out of known_models is harmless, so
- # we can be conservative).
- app_models = models.get_models(app, include_auto_created=True)
- final_output = []
- tables = connection.introspection.table_names()
- known_models = set([model for model in connection.introspection.installed_models(tables) if model not in app_models])
- pending_references = {}
-
- for model in app_models:
- output, references = connection.creation.sql_create_model(model, style, known_models)
- final_output.extend(output)
- for refto, refs in references.items():
- pending_references.setdefault(refto, []).extend(refs)
- if refto in known_models:
- final_output.extend(connection.creation.sql_for_pending_references(refto, style, pending_references))
- final_output.extend(connection.creation.sql_for_pending_references(model, style, pending_references))
- # Keep track of the fact that we've created the table for this model.
- known_models.add(model)
-
- # Handle references to tables that are from other apps
- # but don't exist physically.
- not_installed_models = set(pending_references.keys())
- if not_installed_models:
- alter_sql = []
- for model in not_installed_models:
- alter_sql.extend(['-- ' + sql for sql in
- connection.creation.sql_for_pending_references(model, style, pending_references)])
- if alter_sql:
- final_output.append('-- The following references should be added but depend on non-existent tables:')
- final_output.extend(alter_sql)
-
- return final_output
-
-def sql_delete(app, style, connection):
- "Returns a list of the DROP TABLE SQL statements for the given app."
-
- # This should work even if a connection isn't available
- try:
- cursor = connection.cursor()
- except:
- cursor = None
-
- # Figure out which tables already exist
- if cursor:
- table_names = connection.introspection.get_table_list(cursor)
- else:
- table_names = []
-
- output = []
-
- # Output DROP TABLE statements for standard application tables.
- to_delete = set()
-
- references_to_delete = {}
- app_models = models.get_models(app, include_auto_created=True)
- for model in app_models:
- if cursor and connection.introspection.table_name_converter(model._meta.db_table) in table_names:
- # The table exists, so it needs to be dropped
- opts = model._meta
- for f in opts.local_fields:
- if f.rel and f.rel.to not in to_delete:
- references_to_delete.setdefault(f.rel.to, []).append( (model, f) )
-
- to_delete.add(model)
-
- for model in app_models:
- if connection.introspection.table_name_converter(model._meta.db_table) in table_names:
- output.extend(connection.creation.sql_destroy_model(model, references_to_delete, style))
-
- # Close database connection explicitly, in case this output is being piped
- # directly into a database client, to avoid locking issues.
- if cursor:
- cursor.close()
- connection.close()
-
- return output[::-1] # Reverse it, to deal with table dependencies.
-
-def sql_reset(app, style, connection):
- "Returns a list of the DROP TABLE SQL, then the CREATE TABLE SQL, for the given module."
- return sql_delete(app, style, connection) + sql_all(app, style, connection)
-
-def sql_flush(style, connection, only_django=False):
- """
- Returns a list of the SQL statements used to flush the database.
-
- If only_django is True, then only table names that have associated Django
- models and are in INSTALLED_APPS will be included.
- """
- if only_django:
- tables = connection.introspection.django_table_names(only_existing=True)
- else:
- tables = connection.introspection.table_names()
- statements = connection.ops.sql_flush(style, tables, connection.introspection.sequence_list())
- return statements
-
-def sql_custom(app, style, connection):
- "Returns a list of the custom table modifying SQL statements for the given app."
- output = []
-
- app_models = get_models(app)
- app_dir = os.path.normpath(os.path.join(os.path.dirname(app.__file__), 'sql'))
-
- for model in app_models:
- output.extend(custom_sql_for_model(model, style, connection))
-
- return output
-
-def sql_indexes(app, style, connection):
- "Returns a list of the CREATE INDEX SQL statements for all models in the given app."
- output = []
- for model in models.get_models(app):
- output.extend(connection.creation.sql_indexes_for_model(model, style))
- return output
-
-def sql_all(app, style, connection):
- "Returns a list of CREATE TABLE SQL, initial-data inserts, and CREATE INDEX SQL for the given module."
- return sql_create(app, style, connection) + sql_custom(app, style, connection) + sql_indexes(app, style, connection)
-
-def custom_sql_for_model(model, style, connection):
- opts = model._meta
- app_dir = os.path.normpath(os.path.join(os.path.dirname(models.get_app(model._meta.app_label).__file__), 'sql'))
- output = []
-
- # Post-creation SQL should come before any initial SQL data is loaded.
- # However, this should not be done for models that are unmanaged or
- # for fields that are part of a parent model (via model inheritance).
- if opts.managed:
- post_sql_fields = [f for f in opts.local_fields if hasattr(f, 'post_create_sql')]
- for f in post_sql_fields:
- output.extend(f.post_create_sql(style, model._meta.db_table))
-
- # Some backends can't execute more than one SQL statement at a time,
- # so split into separate statements.
- statements = re.compile(r";[ \t]*$", re.M)
-
- # Find custom SQL, if it's available.
- backend_name = connection.settings_dict['ENGINE'].split('.')[-1]
- sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), backend_name)),
- os.path.join(app_dir, "%s.sql" % opts.object_name.lower())]
- for sql_file in sql_files:
- if os.path.exists(sql_file):
- fp = open(sql_file, 'U')
- for statement in statements.split(fp.read().decode(settings.FILE_CHARSET)):
- # Remove any comments from the file
- statement = re.sub(ur"--.*([\n\Z]|$)", "", statement)
- if statement.strip():
- output.append(statement + u";")
- fp.close()
-
- return output
-
-
-def emit_post_sync_signal(created_models, verbosity, interactive, db):
- # Emit the post_sync signal for every application.
- for app in models.get_apps():
- app_name = app.__name__.split('.')[-2]
- if verbosity >= 2:
- print "Running post-sync handlers for application", app_name
- models.signals.post_syncdb.send(sender=app, app=app,
- created_models=created_models, verbosity=verbosity,
- interactive=interactive, db=db)
diff --git a/parts/django/django/core/management/validation.py b/parts/django/django/core/management/validation.py
deleted file mode 100644
index 0a0fe8f..0000000
--- a/parts/django/django/core/management/validation.py
+++ /dev/null
@@ -1,293 +0,0 @@
-import sys
-
-from django.contrib.contenttypes.generic import GenericForeignKey, GenericRelation
-from django.core.management.color import color_style
-from django.utils.itercompat import is_iterable
-
-try:
- any
-except NameError:
- from django.utils.itercompat import any
-
-class ModelErrorCollection:
- def __init__(self, outfile=sys.stdout):
- self.errors = []
- self.outfile = outfile
- self.style = color_style()
-
- def add(self, context, error):
- self.errors.append((context, error))
- self.outfile.write(self.style.ERROR("%s: %s\n" % (context, error)))
-
-def get_validation_errors(outfile, app=None):
- """
- Validates all models that are part of the specified app. If no app name is provided,
- validates all models of all installed apps. Writes errors, if any, to outfile.
- Returns number of errors.
- """
- from django.conf import settings
- from django.db import models, connection
- from django.db.models.loading import get_app_errors
- from django.db.models.fields.related import RelatedObject
-
- e = ModelErrorCollection(outfile)
-
- for (app_name, error) in get_app_errors().items():
- e.add(app_name, error)
-
- for cls in models.get_models(app):
- opts = cls._meta
-
- # Do field-specific validation.
- for f in opts.local_fields:
- if f.name == 'id' and not f.primary_key and opts.pk.name == 'id':
- e.add(opts, '"%s": You can\'t use "id" as a field name, because each model automatically gets an "id" field if none of the fields have primary_key=True. You need to either remove/rename your "id" field or add primary_key=True to a field.' % f.name)
- if f.name.endswith('_'):
- e.add(opts, '"%s": Field names cannot end with underscores, because this would lead to ambiguous queryset filters.' % f.name)
- if isinstance(f, models.CharField):
- try:
- max_length = int(f.max_length)
- if max_length <= 0:
- e.add(opts, '"%s": CharFields require a "max_length" attribute that is a positive integer.' % f.name)
- except (ValueError, TypeError):
- e.add(opts, '"%s": CharFields require a "max_length" attribute that is a positive integer.' % f.name)
- if isinstance(f, models.DecimalField):
- decimalp_msg ='"%s": DecimalFields require a "decimal_places" attribute that is a non-negative integer.'
- try:
- decimal_places = int(f.decimal_places)
- if decimal_places < 0:
- e.add(opts, decimalp_msg % f.name)
- except (ValueError, TypeError):
- e.add(opts, decimalp_msg % f.name)
- mdigits_msg = '"%s": DecimalFields require a "max_digits" attribute that is a positive integer.'
- try:
- max_digits = int(f.max_digits)
- if max_digits <= 0:
- e.add(opts, mdigits_msg % f.name)
- except (ValueError, TypeError):
- e.add(opts, mdigits_msg % f.name)
- if isinstance(f, models.FileField) and not f.upload_to:
- e.add(opts, '"%s": FileFields require an "upload_to" attribute.' % f.name)
- if isinstance(f, models.ImageField):
- # Try to import PIL in either of the two ways it can end up installed.
- try:
- from PIL import Image
- except ImportError:
- try:
- import Image
- except ImportError:
- e.add(opts, '"%s": To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .' % f.name)
- if isinstance(f, models.BooleanField) and getattr(f, 'null', False):
- e.add(opts, '"%s": BooleanFields do not accept null values. Use a NullBooleanField instead.' % f.name)
- if f.choices:
- if isinstance(f.choices, basestring) or not is_iterable(f.choices):
- e.add(opts, '"%s": "choices" should be iterable (e.g., a tuple or list).' % f.name)
- else:
- for c in f.choices:
- if not isinstance(c, (list, tuple)) or len(c) != 2:
- e.add(opts, '"%s": "choices" should be a sequence of two-tuples.' % f.name)
- if f.db_index not in (None, True, False):
- e.add(opts, '"%s": "db_index" should be either None, True or False.' % f.name)
-
- # Perform any backend-specific field validation.
- connection.validation.validate_field(e, opts, f)
-
- # Check to see if the related field will clash with any existing
- # fields, m2m fields, m2m related objects or related objects
- if f.rel:
- if f.rel.to not in models.get_models():
- e.add(opts, "'%s' has a relation with model %s, which has either not been installed or is abstract." % (f.name, f.rel.to))
- # it is a string and we could not find the model it refers to
- # so skip the next section
- if isinstance(f.rel.to, (str, unicode)):
- continue
-
- # Make sure the related field specified by a ForeignKey is unique
- if not f.rel.to._meta.get_field(f.rel.field_name).unique:
- e.add(opts, "Field '%s' under model '%s' must have a unique=True constraint." % (f.rel.field_name, f.rel.to.__name__))
-
- rel_opts = f.rel.to._meta
- rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name()
- rel_query_name = f.related_query_name()
- if not f.rel.is_hidden():
- for r in rel_opts.fields:
- if r.name == rel_name:
- e.add(opts, "Accessor for field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- if r.name == rel_query_name:
- e.add(opts, "Reverse query name for field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- for r in rel_opts.local_many_to_many:
- if r.name == rel_name:
- e.add(opts, "Accessor for field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- if r.name == rel_query_name:
- e.add(opts, "Reverse query name for field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- for r in rel_opts.get_all_related_many_to_many_objects():
- if r.get_accessor_name() == rel_name:
- e.add(opts, "Accessor for field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
- if r.get_accessor_name() == rel_query_name:
- e.add(opts, "Reverse query name for field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
- for r in rel_opts.get_all_related_objects():
- if r.field is not f:
- if r.get_accessor_name() == rel_name:
- e.add(opts, "Accessor for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
- if r.get_accessor_name() == rel_query_name:
- e.add(opts, "Reverse query name for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
-
- seen_intermediary_signatures = []
- for i, f in enumerate(opts.local_many_to_many):
- # Check to see if the related m2m field will clash with any
- # existing fields, m2m fields, m2m related objects or related
- # objects
- if f.rel.to not in models.get_models():
- e.add(opts, "'%s' has an m2m relation with model %s, which has either not been installed or is abstract." % (f.name, f.rel.to))
- # it is a string and we could not find the model it refers to
- # so skip the next section
- if isinstance(f.rel.to, (str, unicode)):
- continue
-
- # Check that the field is not set to unique. ManyToManyFields do not support unique.
- if f.unique:
- e.add(opts, "ManyToManyFields cannot be unique. Remove the unique argument on '%s'." % f.name)
-
- if f.rel.through is not None and not isinstance(f.rel.through, basestring):
- from_model, to_model = cls, f.rel.to
- if from_model == to_model and f.rel.symmetrical and not f.rel.through._meta.auto_created:
- e.add(opts, "Many-to-many fields with intermediate tables cannot be symmetrical.")
- seen_from, seen_to, seen_self = False, False, 0
- for inter_field in f.rel.through._meta.fields:
- rel_to = getattr(inter_field.rel, 'to', None)
- if from_model == to_model: # relation to self
- if rel_to == from_model:
- seen_self += 1
- if seen_self > 2:
- e.add(opts, "Intermediary model %s has more than "
- "two foreign keys to %s, which is ambiguous "
- "and is not permitted." % (
- f.rel.through._meta.object_name,
- from_model._meta.object_name
- )
- )
- else:
- if rel_to == from_model:
- if seen_from:
- e.add(opts, "Intermediary model %s has more "
- "than one foreign key to %s, which is "
- "ambiguous and is not permitted." % (
- f.rel.through._meta.object_name,
- from_model._meta.object_name
- )
- )
- else:
- seen_from = True
- elif rel_to == to_model:
- if seen_to:
- e.add(opts, "Intermediary model %s has more "
- "than one foreign key to %s, which is "
- "ambiguous and is not permitted." % (
- f.rel.through._meta.object_name,
- rel_to._meta.object_name
- )
- )
- else:
- seen_to = True
- if f.rel.through not in models.get_models(include_auto_created=True):
- e.add(opts, "'%s' specifies an m2m relation through model "
- "%s, which has not been installed." % (f.name, f.rel.through)
- )
- signature = (f.rel.to, cls, f.rel.through)
- if signature in seen_intermediary_signatures:
- e.add(opts, "The model %s has two manually-defined m2m "
- "relations through the model %s, which is not "
- "permitted. Please consider using an extra field on "
- "your intermediary model instead." % (
- cls._meta.object_name,
- f.rel.through._meta.object_name
- )
- )
- else:
- seen_intermediary_signatures.append(signature)
- if not f.rel.through._meta.auto_created:
- seen_related_fk, seen_this_fk = False, False
- for field in f.rel.through._meta.fields:
- if field.rel:
- if not seen_related_fk and field.rel.to == f.rel.to:
- seen_related_fk = True
- elif field.rel.to == cls:
- seen_this_fk = True
- if not seen_related_fk or not seen_this_fk:
- e.add(opts, "'%s' is a manually-defined m2m relation "
- "through model %s, which does not have foreign keys "
- "to %s and %s" % (f.name, f.rel.through._meta.object_name,
- f.rel.to._meta.object_name, cls._meta.object_name)
- )
- elif isinstance(f.rel.through, basestring):
- e.add(opts, "'%s' specifies an m2m relation through model %s, "
- "which has not been installed" % (f.name, f.rel.through)
- )
- elif isinstance(f, GenericRelation):
- if not any([isinstance(vfield, GenericForeignKey) for vfield in f.rel.to._meta.virtual_fields]):
- e.add(opts, "Model '%s' must have a GenericForeignKey in "
- "order to create a GenericRelation that points to it."
- % f.rel.to.__name__
- )
-
- rel_opts = f.rel.to._meta
- rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name()
- rel_query_name = f.related_query_name()
- # If rel_name is none, there is no reverse accessor (this only
- # occurs for symmetrical m2m relations to self). If this is the
- # case, there are no clashes to check for this field, as there are
- # no reverse descriptors for this field.
- if rel_name is not None:
- for r in rel_opts.fields:
- if r.name == rel_name:
- e.add(opts, "Accessor for m2m field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- if r.name == rel_query_name:
- e.add(opts, "Reverse query name for m2m field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- for r in rel_opts.local_many_to_many:
- if r.name == rel_name:
- e.add(opts, "Accessor for m2m field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- if r.name == rel_query_name:
- e.add(opts, "Reverse query name for m2m field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
- for r in rel_opts.get_all_related_many_to_many_objects():
- if r.field is not f:
- if r.get_accessor_name() == rel_name:
- e.add(opts, "Accessor for m2m field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
- if r.get_accessor_name() == rel_query_name:
- e.add(opts, "Reverse query name for m2m field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
- for r in rel_opts.get_all_related_objects():
- if r.get_accessor_name() == rel_name:
- e.add(opts, "Accessor for m2m field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
- if r.get_accessor_name() == rel_query_name:
- e.add(opts, "Reverse query name for m2m field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
-
- # Check ordering attribute.
- if opts.ordering:
- for field_name in opts.ordering:
- if field_name == '?': continue
- if field_name.startswith('-'):
- field_name = field_name[1:]
- if opts.order_with_respect_to and field_name == '_order':
- continue
- # Skip ordering in the format field1__field2 (FIXME: checking
- # this format would be nice, but it's a little fiddly).
- if '__' in field_name:
- continue
- try:
- opts.get_field(field_name, many_to_many=False)
- except models.FieldDoesNotExist:
- e.add(opts, '"ordering" refers to "%s", a field that doesn\'t exist.' % field_name)
-
- # Check unique_together.
- for ut in opts.unique_together:
- for field_name in ut:
- try:
- f = opts.get_field(field_name, many_to_many=True)
- except models.FieldDoesNotExist:
- e.add(opts, '"unique_together" refers to %s, a field that doesn\'t exist. Check your syntax.' % field_name)
- else:
- if isinstance(f.rel, models.ManyToManyRel):
- e.add(opts, '"unique_together" refers to %s. ManyToManyFields are not supported in unique_together.' % f.name)
- if f not in opts.local_fields:
- e.add(opts, '"unique_together" refers to %s. This is not in the same model as the unique_together statement.' % f.name)
-
- return len(e.errors)
diff --git a/parts/django/django/core/paginator.py b/parts/django/django/core/paginator.py
deleted file mode 100644
index 495cdf2..0000000
--- a/parts/django/django/core/paginator.py
+++ /dev/null
@@ -1,120 +0,0 @@
-from math import ceil
-
-class InvalidPage(Exception):
- pass
-
-class PageNotAnInteger(InvalidPage):
- pass
-
-class EmptyPage(InvalidPage):
- pass
-
-class Paginator(object):
- def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True):
- self.object_list = object_list
- self.per_page = per_page
- self.orphans = orphans
- self.allow_empty_first_page = allow_empty_first_page
- self._num_pages = self._count = None
-
- def validate_number(self, number):
- "Validates the given 1-based page number."
- try:
- number = int(number)
- except ValueError:
- raise PageNotAnInteger('That page number is not an integer')
- if number < 1:
- raise EmptyPage('That page number is less than 1')
- if number > self.num_pages:
- if number == 1 and self.allow_empty_first_page:
- pass
- else:
- raise EmptyPage('That page contains no results')
- return number
-
- def page(self, number):
- "Returns a Page object for the given 1-based page number."
- number = self.validate_number(number)
- bottom = (number - 1) * self.per_page
- top = bottom + self.per_page
- if top + self.orphans >= self.count:
- top = self.count
- return Page(self.object_list[bottom:top], number, self)
-
- def _get_count(self):
- "Returns the total number of objects, across all pages."
- if self._count is None:
- try:
- self._count = self.object_list.count()
- except (AttributeError, TypeError):
- # AttributeError if object_list has no count() method.
- # TypeError if object_list.count() requires arguments
- # (i.e. is of type list).
- self._count = len(self.object_list)
- return self._count
- count = property(_get_count)
-
- def _get_num_pages(self):
- "Returns the total number of pages."
- if self._num_pages is None:
- if self.count == 0 and not self.allow_empty_first_page:
- self._num_pages = 0
- else:
- hits = max(1, self.count - self.orphans)
- self._num_pages = int(ceil(hits / float(self.per_page)))
- return self._num_pages
- num_pages = property(_get_num_pages)
-
- def _get_page_range(self):
- """
- Returns a 1-based range of pages for iterating through within
- a template for loop.
- """
- return range(1, self.num_pages + 1)
- page_range = property(_get_page_range)
-
-QuerySetPaginator = Paginator # For backwards-compatibility.
-
-class Page(object):
- def __init__(self, object_list, number, paginator):
- self.object_list = object_list
- self.number = number
- self.paginator = paginator
-
- def __repr__(self):
- return '<Page %s of %s>' % (self.number, self.paginator.num_pages)
-
- def has_next(self):
- return self.number < self.paginator.num_pages
-
- def has_previous(self):
- return self.number > 1
-
- def has_other_pages(self):
- return self.has_previous() or self.has_next()
-
- def next_page_number(self):
- return self.number + 1
-
- def previous_page_number(self):
- return self.number - 1
-
- def start_index(self):
- """
- Returns the 1-based index of the first object on this page,
- relative to total objects in the paginator.
- """
- # Special case, return zero if no items.
- if self.paginator.count == 0:
- return 0
- return (self.paginator.per_page * (self.number - 1)) + 1
-
- def end_index(self):
- """
- Returns the 1-based index of the last object on this page,
- relative to total objects found (hits).
- """
- # Special case for the last page because there can be orphans.
- if self.number == self.paginator.num_pages:
- return self.paginator.count
- return self.number * self.paginator.per_page
diff --git a/parts/django/django/core/serializers/__init__.py b/parts/django/django/core/serializers/__init__.py
deleted file mode 100644
index bed1fa2..0000000
--- a/parts/django/django/core/serializers/__init__.py
+++ /dev/null
@@ -1,113 +0,0 @@
-"""
-Interfaces for serializing Django objects.
-
-Usage::
-
- from django.core import serializers
- json = serializers.serialize("json", some_query_set)
- objects = list(serializers.deserialize("json", json))
-
-To add your own serializers, use the SERIALIZATION_MODULES setting::
-
- SERIALIZATION_MODULES = {
- "csv" : "path.to.csv.serializer",
- "txt" : "path.to.txt.serializer",
- }
-
-"""
-
-from django.conf import settings
-from django.utils import importlib
-
-# Built-in serializers
-BUILTIN_SERIALIZERS = {
- "xml" : "django.core.serializers.xml_serializer",
- "python" : "django.core.serializers.python",
- "json" : "django.core.serializers.json",
-}
-
-# Check for PyYaml and register the serializer if it's available.
-try:
- import yaml
- BUILTIN_SERIALIZERS["yaml"] = "django.core.serializers.pyyaml"
-except ImportError:
- pass
-
-_serializers = {}
-
-def register_serializer(format, serializer_module, serializers=None):
- """Register a new serializer.
-
- ``serializer_module`` should be the fully qualified module name
- for the serializer.
-
- If ``serializers`` is provided, the registration will be added
- to the provided dictionary.
-
- If ``serializers`` is not provided, the registration will be made
- directly into the global register of serializers. Adding serializers
- directly is not a thread-safe operation.
- """
- module = importlib.import_module(serializer_module)
- if serializers is None:
- _serializers[format] = module
- else:
- serializers[format] = module
-
-def unregister_serializer(format):
- "Unregister a given serializer. This is not a thread-safe operation."
- del _serializers[format]
-
-def get_serializer(format):
- if not _serializers:
- _load_serializers()
- return _serializers[format].Serializer
-
-def get_serializer_formats():
- if not _serializers:
- _load_serializers()
- return _serializers.keys()
-
-def get_public_serializer_formats():
- if not _serializers:
- _load_serializers()
- return [k for k, v in _serializers.iteritems() if not v.Serializer.internal_use_only]
-
-def get_deserializer(format):
- if not _serializers:
- _load_serializers()
- return _serializers[format].Deserializer
-
-def serialize(format, queryset, **options):
- """
- Serialize a queryset (or any iterator that returns database objects) using
- a certain serializer.
- """
- s = get_serializer(format)()
- s.serialize(queryset, **options)
- return s.getvalue()
-
-def deserialize(format, stream_or_string, **options):
- """
- Deserialize a stream or a string. Returns an iterator that yields ``(obj,
- m2m_relation_dict)``, where ``obj`` is a instantiated -- but *unsaved* --
- object, and ``m2m_relation_dict`` is a dictionary of ``{m2m_field_name :
- list_of_related_objects}``.
- """
- d = get_deserializer(format)
- return d(stream_or_string, **options)
-
-def _load_serializers():
- """
- Register built-in and settings-defined serializers. This is done lazily so
- that user code has a chance to (e.g.) set up custom settings without
- needing to be careful of import order.
- """
- global _serializers
- serializers = {}
- for format in BUILTIN_SERIALIZERS:
- register_serializer(format, BUILTIN_SERIALIZERS[format], serializers)
- if hasattr(settings, "SERIALIZATION_MODULES"):
- for format in settings.SERIALIZATION_MODULES:
- register_serializer(format, settings.SERIALIZATION_MODULES[format], serializers)
- _serializers = serializers
diff --git a/parts/django/django/core/serializers/base.py b/parts/django/django/core/serializers/base.py
deleted file mode 100644
index 190636e..0000000
--- a/parts/django/django/core/serializers/base.py
+++ /dev/null
@@ -1,172 +0,0 @@
-"""
-Module for abstract serializer/unserializer base classes.
-"""
-
-from StringIO import StringIO
-
-from django.db import models
-from django.utils.encoding import smart_str, smart_unicode
-from django.utils import datetime_safe
-
-class SerializationError(Exception):
- """Something bad happened during serialization."""
- pass
-
-class DeserializationError(Exception):
- """Something bad happened during deserialization."""
- pass
-
-class Serializer(object):
- """
- Abstract serializer base class.
- """
-
- # Indicates if the implemented serializer is only available for
- # internal Django use.
- internal_use_only = False
-
- def serialize(self, queryset, **options):
- """
- Serialize a queryset.
- """
- self.options = options
-
- self.stream = options.get("stream", StringIO())
- self.selected_fields = options.get("fields")
- self.use_natural_keys = options.get("use_natural_keys", False)
-
- self.start_serialization()
- for obj in queryset:
- self.start_object(obj)
- for field in obj._meta.local_fields:
- if field.serialize:
- if field.rel is None:
- if self.selected_fields is None or field.attname in self.selected_fields:
- self.handle_field(obj, field)
- else:
- if self.selected_fields is None or field.attname[:-3] in self.selected_fields:
- self.handle_fk_field(obj, field)
- for field in obj._meta.many_to_many:
- if field.serialize:
- if self.selected_fields is None or field.attname in self.selected_fields:
- self.handle_m2m_field(obj, field)
- self.end_object(obj)
- self.end_serialization()
- return self.getvalue()
-
- def get_string_value(self, obj, field):
- """
- Convert a field's value to a string.
- """
- return smart_unicode(field.value_to_string(obj))
-
- def start_serialization(self):
- """
- Called when serializing of the queryset starts.
- """
- raise NotImplementedError
-
- def end_serialization(self):
- """
- Called when serializing of the queryset ends.
- """
- pass
-
- def start_object(self, obj):
- """
- Called when serializing of an object starts.
- """
- raise NotImplementedError
-
- def end_object(self, obj):
- """
- Called when serializing of an object ends.
- """
- pass
-
- def handle_field(self, obj, field):
- """
- Called to handle each individual (non-relational) field on an object.
- """
- raise NotImplementedError
-
- def handle_fk_field(self, obj, field):
- """
- Called to handle a ForeignKey field.
- """
- raise NotImplementedError
-
- def handle_m2m_field(self, obj, field):
- """
- Called to handle a ManyToManyField.
- """
- raise NotImplementedError
-
- def getvalue(self):
- """
- Return the fully serialized queryset (or None if the output stream is
- not seekable).
- """
- if callable(getattr(self.stream, 'getvalue', None)):
- return self.stream.getvalue()
-
-class Deserializer(object):
- """
- Abstract base deserializer class.
- """
-
- def __init__(self, stream_or_string, **options):
- """
- Init this serializer given a stream or a string
- """
- self.options = options
- if isinstance(stream_or_string, basestring):
- self.stream = StringIO(stream_or_string)
- else:
- self.stream = stream_or_string
- # hack to make sure that the models have all been loaded before
- # deserialization starts (otherwise subclass calls to get_model()
- # and friends might fail...)
- models.get_apps()
-
- def __iter__(self):
- return self
-
- def next(self):
- """Iteration iterface -- return the next item in the stream"""
- raise NotImplementedError
-
-class DeserializedObject(object):
- """
- A deserialized model.
-
- Basically a container for holding the pre-saved deserialized data along
- with the many-to-many data saved with the object.
-
- Call ``save()`` to save the object (with the many-to-many data) to the
- database; call ``save(save_m2m=False)`` to save just the object fields
- (and not touch the many-to-many stuff.)
- """
-
- def __init__(self, obj, m2m_data=None):
- self.object = obj
- self.m2m_data = m2m_data
-
- def __repr__(self):
- return "<DeserializedObject: %s.%s(pk=%s)>" % (
- self.object._meta.app_label, self.object._meta.object_name, self.object.pk)
-
- def save(self, save_m2m=True, using=None):
- # Call save on the Model baseclass directly. This bypasses any
- # model-defined save. The save is also forced to be raw.
- # This ensures that the data that is deserialized is literally
- # what came from the file, not post-processed by pre_save/save
- # methods.
- models.Model.save_base(self.object, using=using, raw=True)
- if self.m2m_data and save_m2m:
- for accessor_name, object_list in self.m2m_data.items():
- setattr(self.object, accessor_name, object_list)
-
- # prevent a second (possibly accidental) call to save() from saving
- # the m2m data twice.
- self.m2m_data = None
diff --git a/parts/django/django/core/serializers/json.py b/parts/django/django/core/serializers/json.py
deleted file mode 100644
index b82c0a0..0000000
--- a/parts/django/django/core/serializers/json.py
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
-Serialize data to/from JSON
-"""
-
-import datetime
-import decimal
-from StringIO import StringIO
-
-from django.core.serializers.python import Serializer as PythonSerializer
-from django.core.serializers.python import Deserializer as PythonDeserializer
-from django.utils import datetime_safe
-from django.utils import simplejson
-
-class Serializer(PythonSerializer):
- """
- Convert a queryset to JSON.
- """
- internal_use_only = False
-
- def end_serialization(self):
- self.options.pop('stream', None)
- self.options.pop('fields', None)
- self.options.pop('use_natural_keys', None)
- simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
-
- def getvalue(self):
- if callable(getattr(self.stream, 'getvalue', None)):
- return self.stream.getvalue()
-
-def Deserializer(stream_or_string, **options):
- """
- Deserialize a stream or string of JSON data.
- """
- if isinstance(stream_or_string, basestring):
- stream = StringIO(stream_or_string)
- else:
- stream = stream_or_string
- for obj in PythonDeserializer(simplejson.load(stream), **options):
- yield obj
-
-class DjangoJSONEncoder(simplejson.JSONEncoder):
- """
- JSONEncoder subclass that knows how to encode date/time and decimal types.
- """
-
- DATE_FORMAT = "%Y-%m-%d"
- TIME_FORMAT = "%H:%M:%S"
-
- def default(self, o):
- if isinstance(o, datetime.datetime):
- d = datetime_safe.new_datetime(o)
- return d.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT))
- elif isinstance(o, datetime.date):
- d = datetime_safe.new_date(o)
- return d.strftime(self.DATE_FORMAT)
- elif isinstance(o, datetime.time):
- return o.strftime(self.TIME_FORMAT)
- elif isinstance(o, decimal.Decimal):
- return str(o)
- else:
- return super(DjangoJSONEncoder, self).default(o)
-
-# Older, deprecated class name (for backwards compatibility purposes).
-DateTimeAwareJSONEncoder = DjangoJSONEncoder
-
diff --git a/parts/django/django/core/serializers/python.py b/parts/django/django/core/serializers/python.py
deleted file mode 100644
index a68ea21..0000000
--- a/parts/django/django/core/serializers/python.py
+++ /dev/null
@@ -1,142 +0,0 @@
-"""
-A Python "serializer". Doesn't do much serializing per se -- just converts to
-and from basic Python data types (lists, dicts, strings, etc.). Useful as a basis for
-other serializers.
-"""
-
-from django.conf import settings
-from django.core.serializers import base
-from django.db import models, DEFAULT_DB_ALIAS
-from django.utils.encoding import smart_unicode, is_protected_type
-
-class Serializer(base.Serializer):
- """
- Serializes a QuerySet to basic Python objects.
- """
-
- internal_use_only = True
-
- def start_serialization(self):
- self._current = None
- self.objects = []
-
- def end_serialization(self):
- pass
-
- def start_object(self, obj):
- self._current = {}
-
- def end_object(self, obj):
- self.objects.append({
- "model" : smart_unicode(obj._meta),
- "pk" : smart_unicode(obj._get_pk_val(), strings_only=True),
- "fields" : self._current
- })
- self._current = None
-
- def handle_field(self, obj, field):
- value = field._get_val_from_obj(obj)
- # Protected types (i.e., primitives like None, numbers, dates,
- # and Decimals) are passed through as is. All other values are
- # converted to string first.
- if is_protected_type(value):
- self._current[field.name] = value
- else:
- self._current[field.name] = field.value_to_string(obj)
-
- def handle_fk_field(self, obj, field):
- related = getattr(obj, field.name)
- if related is not None:
- if self.use_natural_keys and hasattr(related, 'natural_key'):
- related = related.natural_key()
- else:
- if field.rel.field_name == related._meta.pk.name:
- # Related to remote object via primary key
- related = related._get_pk_val()
- else:
- # Related to remote object via other field
- related = smart_unicode(getattr(related, field.rel.field_name), strings_only=True)
- self._current[field.name] = related
-
- def handle_m2m_field(self, obj, field):
- if field.rel.through._meta.auto_created:
- if self.use_natural_keys and hasattr(field.rel.to, 'natural_key'):
- m2m_value = lambda value: value.natural_key()
- else:
- m2m_value = lambda value: smart_unicode(value._get_pk_val(), strings_only=True)
- self._current[field.name] = [m2m_value(related)
- for related in getattr(obj, field.name).iterator()]
-
- def getvalue(self):
- return self.objects
-
-def Deserializer(object_list, **options):
- """
- Deserialize simple Python objects back into Django ORM instances.
-
- It's expected that you pass the Python objects themselves (instead of a
- stream or a string) to the constructor
- """
- db = options.pop('using', DEFAULT_DB_ALIAS)
- models.get_apps()
- for d in object_list:
- # Look up the model and starting build a dict of data for it.
- Model = _get_model(d["model"])
- data = {Model._meta.pk.attname : Model._meta.pk.to_python(d["pk"])}
- m2m_data = {}
-
- # Handle each field
- for (field_name, field_value) in d["fields"].iteritems():
- if isinstance(field_value, str):
- field_value = smart_unicode(field_value, options.get("encoding", settings.DEFAULT_CHARSET), strings_only=True)
-
- field = Model._meta.get_field(field_name)
-
- # Handle M2M relations
- if field.rel and isinstance(field.rel, models.ManyToManyRel):
- if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
- def m2m_convert(value):
- if hasattr(value, '__iter__'):
- return field.rel.to._default_manager.db_manager(db).get_by_natural_key(*value).pk
- else:
- return smart_unicode(field.rel.to._meta.pk.to_python(value))
- else:
- m2m_convert = lambda v: smart_unicode(field.rel.to._meta.pk.to_python(v))
- m2m_data[field.name] = [m2m_convert(pk) for pk in field_value]
-
- # Handle FK fields
- elif field.rel and isinstance(field.rel, models.ManyToOneRel):
- if field_value is not None:
- if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
- if hasattr(field_value, '__iter__'):
- obj = field.rel.to._default_manager.db_manager(db).get_by_natural_key(*field_value)
- value = getattr(obj, field.rel.field_name)
- # If this is a natural foreign key to an object that
- # has a FK/O2O as the foreign key, use the FK value
- if field.rel.to._meta.pk.rel:
- value = value.pk
- else:
- value = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
- data[field.attname] = value
- else:
- data[field.attname] = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
- else:
- data[field.attname] = None
-
- # Handle all other fields
- else:
- data[field.name] = field.to_python(field_value)
-
- yield base.DeserializedObject(Model(**data), m2m_data)
-
-def _get_model(model_identifier):
- """
- Helper to look up a model from an "app_label.module_name" string.
- """
- try:
- Model = models.get_model(*model_identifier.split("."))
- except TypeError:
- Model = None
- if Model is None:
- raise base.DeserializationError(u"Invalid model identifier: '%s'" % model_identifier)
- return Model
diff --git a/parts/django/django/core/serializers/pyyaml.py b/parts/django/django/core/serializers/pyyaml.py
deleted file mode 100644
index 2ca68fe..0000000
--- a/parts/django/django/core/serializers/pyyaml.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-YAML serializer.
-
-Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__.
-"""
-
-from StringIO import StringIO
-import decimal
-import yaml
-
-from django.db import models
-from django.core.serializers.python import Serializer as PythonSerializer
-from django.core.serializers.python import Deserializer as PythonDeserializer
-
-class DjangoSafeDumper(yaml.SafeDumper):
- def represent_decimal(self, data):
- return self.represent_scalar('tag:yaml.org,2002:str', str(data))
-
-DjangoSafeDumper.add_representer(decimal.Decimal, DjangoSafeDumper.represent_decimal)
-
-class Serializer(PythonSerializer):
- """
- Convert a queryset to YAML.
- """
-
- internal_use_only = False
-
- def handle_field(self, obj, field):
- # A nasty special case: base YAML doesn't support serialization of time
- # types (as opposed to dates or datetimes, which it does support). Since
- # we want to use the "safe" serializer for better interoperability, we
- # need to do something with those pesky times. Converting 'em to strings
- # isn't perfect, but it's better than a "!!python/time" type which would
- # halt deserialization under any other language.
- if isinstance(field, models.TimeField) and getattr(obj, field.name) is not None:
- self._current[field.name] = str(getattr(obj, field.name))
- else:
- super(Serializer, self).handle_field(obj, field)
-
- def end_serialization(self):
- self.options.pop('stream', None)
- self.options.pop('fields', None)
- self.options.pop('use_natural_keys', None)
- yaml.dump(self.objects, self.stream, Dumper=DjangoSafeDumper, **self.options)
-
- def getvalue(self):
- return self.stream.getvalue()
-
-def Deserializer(stream_or_string, **options):
- """
- Deserialize a stream or string of YAML data.
- """
- if isinstance(stream_or_string, basestring):
- stream = StringIO(stream_or_string)
- else:
- stream = stream_or_string
- for obj in PythonDeserializer(yaml.load(stream), **options):
- yield obj
-
diff --git a/parts/django/django/core/serializers/xml_serializer.py b/parts/django/django/core/serializers/xml_serializer.py
deleted file mode 100644
index bcf5631..0000000
--- a/parts/django/django/core/serializers/xml_serializer.py
+++ /dev/null
@@ -1,297 +0,0 @@
-"""
-XML serializer.
-"""
-
-from django.conf import settings
-from django.core.serializers import base
-from django.db import models, DEFAULT_DB_ALIAS
-from django.utils.xmlutils import SimplerXMLGenerator
-from django.utils.encoding import smart_unicode
-from xml.dom import pulldom
-
-class Serializer(base.Serializer):
- """
- Serializes a QuerySet to XML.
- """
-
- def indent(self, level):
- if self.options.get('indent', None) is not None:
- self.xml.ignorableWhitespace('\n' + ' ' * self.options.get('indent', None) * level)
-
- def start_serialization(self):
- """
- Start serialization -- open the XML document and the root element.
- """
- self.xml = SimplerXMLGenerator(self.stream, self.options.get("encoding", settings.DEFAULT_CHARSET))
- self.xml.startDocument()
- self.xml.startElement("django-objects", {"version" : "1.0"})
-
- def end_serialization(self):
- """
- End serialization -- end the document.
- """
- self.indent(0)
- self.xml.endElement("django-objects")
- self.xml.endDocument()
-
- def start_object(self, obj):
- """
- Called as each object is handled.
- """
- if not hasattr(obj, "_meta"):
- raise base.SerializationError("Non-model object (%s) encountered during serialization" % type(obj))
-
- self.indent(1)
- obj_pk = obj._get_pk_val()
- if obj_pk is None:
- attrs = {"model": smart_unicode(obj._meta),}
- else:
- attrs = {
- "pk": smart_unicode(obj._get_pk_val()),
- "model": smart_unicode(obj._meta),
- }
-
- self.xml.startElement("object", attrs)
-
- def end_object(self, obj):
- """
- Called after handling all fields for an object.
- """
- self.indent(1)
- self.xml.endElement("object")
-
- def handle_field(self, obj, field):
- """
- Called to handle each field on an object (except for ForeignKeys and
- ManyToManyFields)
- """
- self.indent(2)
- self.xml.startElement("field", {
- "name" : field.name,
- "type" : field.get_internal_type()
- })
-
- # Get a "string version" of the object's data.
- if getattr(obj, field.name) is not None:
- self.xml.characters(field.value_to_string(obj))
- else:
- self.xml.addQuickElement("None")
-
- self.xml.endElement("field")
-
- def handle_fk_field(self, obj, field):
- """
- Called to handle a ForeignKey (we need to treat them slightly
- differently from regular fields).
- """
- self._start_relational_field(field)
- related = getattr(obj, field.name)
- if related is not None:
- if self.use_natural_keys and hasattr(related, 'natural_key'):
- # If related object has a natural key, use it
- related = related.natural_key()
- # Iterable natural keys are rolled out as subelements
- for key_value in related:
- self.xml.startElement("natural", {})
- self.xml.characters(smart_unicode(key_value))
- self.xml.endElement("natural")
- else:
- if field.rel.field_name == related._meta.pk.name:
- # Related to remote object via primary key
- related = related._get_pk_val()
- else:
- # Related to remote object via other field
- related = getattr(related, field.rel.field_name)
- self.xml.characters(smart_unicode(related))
- else:
- self.xml.addQuickElement("None")
- self.xml.endElement("field")
-
- def handle_m2m_field(self, obj, field):
- """
- Called to handle a ManyToManyField. Related objects are only
- serialized as references to the object's PK (i.e. the related *data*
- is not dumped, just the relation).
- """
- if field.rel.through._meta.auto_created:
- self._start_relational_field(field)
- if self.use_natural_keys and hasattr(field.rel.to, 'natural_key'):
- # If the objects in the m2m have a natural key, use it
- def handle_m2m(value):
- natural = value.natural_key()
- # Iterable natural keys are rolled out as subelements
- self.xml.startElement("object", {})
- for key_value in natural:
- self.xml.startElement("natural", {})
- self.xml.characters(smart_unicode(key_value))
- self.xml.endElement("natural")
- self.xml.endElement("object")
- else:
- def handle_m2m(value):
- self.xml.addQuickElement("object", attrs={
- 'pk' : smart_unicode(value._get_pk_val())
- })
- for relobj in getattr(obj, field.name).iterator():
- handle_m2m(relobj)
-
- self.xml.endElement("field")
-
- def _start_relational_field(self, field):
- """
- Helper to output the <field> element for relational fields
- """
- self.indent(2)
- self.xml.startElement("field", {
- "name" : field.name,
- "rel" : field.rel.__class__.__name__,
- "to" : smart_unicode(field.rel.to._meta),
- })
-
-class Deserializer(base.Deserializer):
- """
- Deserialize XML.
- """
-
- def __init__(self, stream_or_string, **options):
- super(Deserializer, self).__init__(stream_or_string, **options)
- self.event_stream = pulldom.parse(self.stream)
- self.db = options.pop('using', DEFAULT_DB_ALIAS)
-
- def next(self):
- for event, node in self.event_stream:
- if event == "START_ELEMENT" and node.nodeName == "object":
- self.event_stream.expandNode(node)
- return self._handle_object(node)
- raise StopIteration
-
- def _handle_object(self, node):
- """
- Convert an <object> node to a DeserializedObject.
- """
- # Look up the model using the model loading mechanism. If this fails,
- # bail.
- Model = self._get_model_from_node(node, "model")
-
- # Start building a data dictionary from the object.
- # If the node is missing the pk set it to None
- if node.hasAttribute("pk"):
- pk = node.getAttribute("pk")
- else:
- pk = None
-
- data = {Model._meta.pk.attname : Model._meta.pk.to_python(pk)}
-
- # Also start building a dict of m2m data (this is saved as
- # {m2m_accessor_attribute : [list_of_related_objects]})
- m2m_data = {}
-
- # Deseralize each field.
- for field_node in node.getElementsByTagName("field"):
- # If the field is missing the name attribute, bail (are you
- # sensing a pattern here?)
- field_name = field_node.getAttribute("name")
- if not field_name:
- raise base.DeserializationError("<field> node is missing the 'name' attribute")
-
- # Get the field from the Model. This will raise a
- # FieldDoesNotExist if, well, the field doesn't exist, which will
- # be propagated correctly.
- field = Model._meta.get_field(field_name)
-
- # As is usually the case, relation fields get the special treatment.
- if field.rel and isinstance(field.rel, models.ManyToManyRel):
- m2m_data[field.name] = self._handle_m2m_field_node(field_node, field)
- elif field.rel and isinstance(field.rel, models.ManyToOneRel):
- data[field.attname] = self._handle_fk_field_node(field_node, field)
- else:
- if field_node.getElementsByTagName('None'):
- value = None
- else:
- value = field.to_python(getInnerText(field_node).strip())
- data[field.name] = value
-
- # Return a DeserializedObject so that the m2m data has a place to live.
- return base.DeserializedObject(Model(**data), m2m_data)
-
- def _handle_fk_field_node(self, node, field):
- """
- Handle a <field> node for a ForeignKey
- """
- # Check if there is a child node named 'None', returning None if so.
- if node.getElementsByTagName('None'):
- return None
- else:
- if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
- keys = node.getElementsByTagName('natural')
- if keys:
- # If there are 'natural' subelements, it must be a natural key
- field_value = [getInnerText(k).strip() for k in keys]
- obj = field.rel.to._default_manager.db_manager(self.db).get_by_natural_key(*field_value)
- obj_pk = getattr(obj, field.rel.field_name)
- # If this is a natural foreign key to an object that
- # has a FK/O2O as the foreign key, use the FK value
- if field.rel.to._meta.pk.rel:
- obj_pk = obj_pk.pk
- else:
- # Otherwise, treat like a normal PK
- field_value = getInnerText(node).strip()
- obj_pk = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
- return obj_pk
- else:
- field_value = getInnerText(node).strip()
- return field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
-
- def _handle_m2m_field_node(self, node, field):
- """
- Handle a <field> node for a ManyToManyField.
- """
- if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
- def m2m_convert(n):
- keys = n.getElementsByTagName('natural')
- if keys:
- # If there are 'natural' subelements, it must be a natural key
- field_value = [getInnerText(k).strip() for k in keys]
- obj_pk = field.rel.to._default_manager.db_manager(self.db).get_by_natural_key(*field_value).pk
- else:
- # Otherwise, treat like a normal PK value.
- obj_pk = field.rel.to._meta.pk.to_python(n.getAttribute('pk'))
- return obj_pk
- else:
- m2m_convert = lambda n: field.rel.to._meta.pk.to_python(n.getAttribute('pk'))
- return [m2m_convert(c) for c in node.getElementsByTagName("object")]
-
- def _get_model_from_node(self, node, attr):
- """
- Helper to look up a model from a <object model=...> or a <field
- rel=... to=...> node.
- """
- model_identifier = node.getAttribute(attr)
- if not model_identifier:
- raise base.DeserializationError(
- "<%s> node is missing the required '%s' attribute" \
- % (node.nodeName, attr))
- try:
- Model = models.get_model(*model_identifier.split("."))
- except TypeError:
- Model = None
- if Model is None:
- raise base.DeserializationError(
- "<%s> node has invalid model identifier: '%s'" % \
- (node.nodeName, model_identifier))
- return Model
-
-
-def getInnerText(node):
- """
- Get all the inner text of a DOM node (recursively).
- """
- # inspired by http://mail.python.org/pipermail/xml-sig/2005-March/011022.html
- inner_text = []
- for child in node.childNodes:
- if child.nodeType == child.TEXT_NODE or child.nodeType == child.CDATA_SECTION_NODE:
- inner_text.append(child.data)
- elif child.nodeType == child.ELEMENT_NODE:
- inner_text.extend(getInnerText(child))
- else:
- pass
- return u"".join(inner_text)
diff --git a/parts/django/django/core/servers/__init__.py b/parts/django/django/core/servers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/core/servers/__init__.py
+++ /dev/null
diff --git a/parts/django/django/core/servers/basehttp.py b/parts/django/django/core/servers/basehttp.py
deleted file mode 100644
index dae4297..0000000
--- a/parts/django/django/core/servers/basehttp.py
+++ /dev/null
@@ -1,721 +0,0 @@
-"""
-BaseHTTPServer that implements the Python WSGI protocol (PEP 333, rev 1.21).
-
-Adapted from wsgiref.simple_server: http://svn.eby-sarna.com/wsgiref/
-
-This is a simple server for use in testing or debugging Django apps. It hasn't
-been reviewed for security issues. Don't use it for production use.
-"""
-
-from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
-import mimetypes
-import os
-import re
-import stat
-import sys
-import urllib
-
-from django.core.management.color import color_style
-from django.utils.http import http_date
-from django.utils._os import safe_join
-
-__version__ = "0.1"
-__all__ = ['WSGIServer','WSGIRequestHandler']
-
-server_version = "WSGIServer/" + __version__
-sys_version = "Python/" + sys.version.split()[0]
-software_version = server_version + ' ' + sys_version
-
-class WSGIServerException(Exception):
- pass
-
-class FileWrapper(object):
- """Wrapper to convert file-like objects to iterables"""
-
- def __init__(self, filelike, blksize=8192):
- self.filelike = filelike
- self.blksize = blksize
- if hasattr(filelike,'close'):
- self.close = filelike.close
-
- def __getitem__(self,key):
- data = self.filelike.read(self.blksize)
- if data:
- return data
- raise IndexError
-
- def __iter__(self):
- return self
-
- def next(self):
- data = self.filelike.read(self.blksize)
- if data:
- return data
- raise StopIteration
-
-# Regular expression that matches `special' characters in parameters, the
-# existence of which force quoting of the parameter value.
-tspecials = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]')
-
-def _formatparam(param, value=None, quote=1):
- """Convenience function to format and return a key=value pair.
-
- This will quote the value if needed or if quote is true.
- """
- if value is not None and len(value) > 0:
- if quote or tspecials.search(value):
- value = value.replace('\\', '\\\\').replace('"', r'\"')
- return '%s="%s"' % (param, value)
- else:
- return '%s=%s' % (param, value)
- else:
- return param
-
-class Headers(object):
- """Manage a collection of HTTP response headers"""
- def __init__(self,headers):
- if not isinstance(headers, list):
- raise TypeError("Headers must be a list of name/value tuples")
- self._headers = headers
-
- def __len__(self):
- """Return the total number of headers, including duplicates."""
- return len(self._headers)
-
- def __setitem__(self, name, val):
- """Set the value of a header."""
- del self[name]
- self._headers.append((name, val))
-
- def __delitem__(self,name):
- """Delete all occurrences of a header, if present.
-
- Does *not* raise an exception if the header is missing.
- """
- name = name.lower()
- self._headers[:] = [kv for kv in self._headers if kv[0].lower()<>name]
-
- def __getitem__(self,name):
- """Get the first header value for 'name'
-
- Return None if the header is missing instead of raising an exception.
-
- Note that if the header appeared multiple times, the first exactly which
- occurrance gets returned is undefined. Use getall() to get all
- the values matching a header field name.
- """
- return self.get(name)
-
- def has_key(self, name):
- """Return true if the message contains the header."""
- return self.get(name) is not None
-
- __contains__ = has_key
-
- def get_all(self, name):
- """Return a list of all the values for the named field.
-
- These will be sorted in the order they appeared in the original header
- list or were added to this instance, and may contain duplicates. Any
- fields deleted and re-inserted are always appended to the header list.
- If no fields exist with the given name, returns an empty list.
- """
- name = name.lower()
- return [kv[1] for kv in self._headers if kv[0].lower()==name]
-
-
- def get(self,name,default=None):
- """Get the first header value for 'name', or return 'default'"""
- name = name.lower()
- for k,v in self._headers:
- if k.lower()==name:
- return v
- return default
-
- def keys(self):
- """Return a list of all the header field names.
-
- These will be sorted in the order they appeared in the original header
- list, or were added to this instance, and may contain duplicates.
- Any fields deleted and re-inserted are always appended to the header
- list.
- """
- return [k for k, v in self._headers]
-
- def values(self):
- """Return a list of all header values.
-
- These will be sorted in the order they appeared in the original header
- list, or were added to this instance, and may contain duplicates.
- Any fields deleted and re-inserted are always appended to the header
- list.
- """
- return [v for k, v in self._headers]
-
- def items(self):
- """Get all the header fields and values.
-
- These will be sorted in the order they were in the original header
- list, or were added to this instance, and may contain duplicates.
- Any fields deleted and re-inserted are always appended to the header
- list.
- """
- return self._headers[:]
-
- def __repr__(self):
- return "Headers(%s)" % `self._headers`
-
- def __str__(self):
- """str() returns the formatted headers, complete with end line,
- suitable for direct HTTP transmission."""
- return '\r\n'.join(["%s: %s" % kv for kv in self._headers]+['',''])
-
- def setdefault(self,name,value):
- """Return first matching header value for 'name', or 'value'
-
- If there is no header named 'name', add a new header with name 'name'
- and value 'value'."""
- result = self.get(name)
- if result is None:
- self._headers.append((name,value))
- return value
- else:
- return result
-
- def add_header(self, _name, _value, **_params):
- """Extended header setting.
-
- _name is the header field to add. keyword arguments can be used to set
- additional parameters for the header field, with underscores converted
- to dashes. Normally the parameter will be added as key="value" unless
- value is None, in which case only the key will be added.
-
- Example:
-
- h.add_header('content-disposition', 'attachment', filename='bud.gif')
-
- Note that unlike the corresponding 'email.Message' method, this does
- *not* handle '(charset, language, value)' tuples: all values must be
- strings or None.
- """
- parts = []
- if _value is not None:
- parts.append(_value)
- for k, v in _params.items():
- if v is None:
- parts.append(k.replace('_', '-'))
- else:
- parts.append(_formatparam(k.replace('_', '-'), v))
- self._headers.append((_name, "; ".join(parts)))
-
-def guess_scheme(environ):
- """Return a guess for whether 'wsgi.url_scheme' should be 'http' or 'https'
- """
- if environ.get("HTTPS") in ('yes','on','1'):
- return 'https'
- else:
- return 'http'
-
-_hop_headers = {
- 'connection':1, 'keep-alive':1, 'proxy-authenticate':1,
- 'proxy-authorization':1, 'te':1, 'trailers':1, 'transfer-encoding':1,
- 'upgrade':1
-}
-
-def is_hop_by_hop(header_name):
- """Return true if 'header_name' is an HTTP/1.1 "Hop-by-Hop" header"""
- return header_name.lower() in _hop_headers
-
-class ServerHandler(object):
- """Manage the invocation of a WSGI application"""
-
- # Configuration parameters; can override per-subclass or per-instance
- wsgi_version = (1,0)
- wsgi_multithread = True
- wsgi_multiprocess = True
- wsgi_run_once = False
-
- origin_server = True # We are transmitting direct to client
- http_version = "1.0" # Version that should be used for response
- server_software = software_version
-
- # os_environ is used to supply configuration from the OS environment:
- # by default it's a copy of 'os.environ' as of import time, but you can
- # override this in e.g. your __init__ method.
- os_environ = dict(os.environ.items())
-
- # Collaborator classes
- wsgi_file_wrapper = FileWrapper # set to None to disable
- headers_class = Headers # must be a Headers-like class
-
- # Error handling (also per-subclass or per-instance)
- traceback_limit = None # Print entire traceback to self.get_stderr()
- error_status = "500 INTERNAL SERVER ERROR"
- error_headers = [('Content-Type','text/plain')]
-
- # State variables (don't mess with these)
- status = result = None
- headers_sent = False
- headers = None
- bytes_sent = 0
-
- def __init__(self, stdin, stdout, stderr, environ, multithread=True,
- multiprocess=False):
- self.stdin = stdin
- self.stdout = stdout
- self.stderr = stderr
- self.base_env = environ
- self.wsgi_multithread = multithread
- self.wsgi_multiprocess = multiprocess
-
- def run(self, application):
- """Invoke the application"""
- # Note to self: don't move the close()! Asynchronous servers shouldn't
- # call close() from finish_response(), so if you close() anywhere but
- # the double-error branch here, you'll break asynchronous servers by
- # prematurely closing. Async servers must return from 'run()' without
- # closing if there might still be output to iterate over.
- try:
- self.setup_environ()
- self.result = application(self.environ, self.start_response)
- self.finish_response()
- except:
- try:
- self.handle_error()
- except:
- # If we get an error handling an error, just give up already!
- self.close()
- raise # ...and let the actual server figure it out.
-
- def setup_environ(self):
- """Set up the environment for one request"""
-
- env = self.environ = self.os_environ.copy()
- self.add_cgi_vars()
-
- env['wsgi.input'] = self.get_stdin()
- env['wsgi.errors'] = self.get_stderr()
- env['wsgi.version'] = self.wsgi_version
- env['wsgi.run_once'] = self.wsgi_run_once
- env['wsgi.url_scheme'] = self.get_scheme()
- env['wsgi.multithread'] = self.wsgi_multithread
- env['wsgi.multiprocess'] = self.wsgi_multiprocess
-
- if self.wsgi_file_wrapper is not None:
- env['wsgi.file_wrapper'] = self.wsgi_file_wrapper
-
- if self.origin_server and self.server_software:
- env.setdefault('SERVER_SOFTWARE',self.server_software)
-
- def finish_response(self):
- """
- Send any iterable data, then close self and the iterable
-
- Subclasses intended for use in asynchronous servers will want to
- redefine this method, such that it sets up callbacks in the event loop
- to iterate over the data, and to call 'self.close()' once the response
- is finished.
- """
- if not self.result_is_file() or not self.sendfile():
- for data in self.result:
- self.write(data)
- self.finish_content()
- self.close()
-
- def get_scheme(self):
- """Return the URL scheme being used"""
- return guess_scheme(self.environ)
-
- def set_content_length(self):
- """Compute Content-Length or switch to chunked encoding if possible"""
- try:
- blocks = len(self.result)
- except (TypeError, AttributeError, NotImplementedError):
- pass
- else:
- if blocks==1:
- self.headers['Content-Length'] = str(self.bytes_sent)
- return
- # XXX Try for chunked encoding if origin server and client is 1.1
-
- def cleanup_headers(self):
- """Make any necessary header changes or defaults
-
- Subclasses can extend this to add other defaults.
- """
- if 'Content-Length' not in self.headers:
- self.set_content_length()
-
- def start_response(self, status, headers,exc_info=None):
- """'start_response()' callable as specified by PEP 333"""
-
- if exc_info:
- try:
- if self.headers_sent:
- # Re-raise original exception if headers sent
- raise exc_info[0], exc_info[1], exc_info[2]
- finally:
- exc_info = None # avoid dangling circular ref
- elif self.headers is not None:
- raise AssertionError("Headers already set!")
-
- assert isinstance(status, str),"Status must be a string"
- assert len(status)>=4,"Status must be at least 4 characters"
- assert int(status[:3]),"Status message must begin w/3-digit code"
- assert status[3]==" ", "Status message must have a space after code"
- if __debug__:
- for name,val in headers:
- assert isinstance(name, str),"Header names must be strings"
- assert isinstance(val, str),"Header values must be strings"
- assert not is_hop_by_hop(name),"Hop-by-hop headers not allowed"
- self.status = status
- self.headers = self.headers_class(headers)
- return self.write
-
- def send_preamble(self):
- """Transmit version/status/date/server, via self._write()"""
- if self.origin_server:
- if self.client_is_modern():
- self._write('HTTP/%s %s\r\n' % (self.http_version,self.status))
- if 'Date' not in self.headers:
- self._write(
- 'Date: %s\r\n' % http_date()
- )
- if self.server_software and 'Server' not in self.headers:
- self._write('Server: %s\r\n' % self.server_software)
- else:
- self._write('Status: %s\r\n' % self.status)
-
- def write(self, data):
- """'write()' callable as specified by PEP 333"""
-
- assert isinstance(data, str), "write() argument must be string"
-
- if not self.status:
- raise AssertionError("write() before start_response()")
-
- elif not self.headers_sent:
- # Before the first output, send the stored headers
- self.bytes_sent = len(data) # make sure we know content-length
- self.send_headers()
- else:
- self.bytes_sent += len(data)
-
- # XXX check Content-Length and truncate if too many bytes written?
-
- # If data is too large, socket will choke, so write chunks no larger
- # than 32MB at a time.
- length = len(data)
- if length > 33554432:
- offset = 0
- while offset < length:
- chunk_size = min(33554432, length)
- self._write(data[offset:offset+chunk_size])
- self._flush()
- offset += chunk_size
- else:
- self._write(data)
- self._flush()
-
- def sendfile(self):
- """Platform-specific file transmission
-
- Override this method in subclasses to support platform-specific
- file transmission. It is only called if the application's
- return iterable ('self.result') is an instance of
- 'self.wsgi_file_wrapper'.
-
- This method should return a true value if it was able to actually
- transmit the wrapped file-like object using a platform-specific
- approach. It should return a false value if normal iteration
- should be used instead. An exception can be raised to indicate
- that transmission was attempted, but failed.
-
- NOTE: this method should call 'self.send_headers()' if
- 'self.headers_sent' is false and it is going to attempt direct
- transmission of the file1.
- """
- return False # No platform-specific transmission by default
-
- def finish_content(self):
- """Ensure headers and content have both been sent"""
- if not self.headers_sent:
- self.headers['Content-Length'] = "0"
- self.send_headers()
- else:
- pass # XXX check if content-length was too short?
-
- def close(self):
- try:
- self.request_handler.log_request(self.status.split(' ',1)[0], self.bytes_sent)
- finally:
- try:
- if hasattr(self.result,'close'):
- self.result.close()
- finally:
- self.result = self.headers = self.status = self.environ = None
- self.bytes_sent = 0; self.headers_sent = False
-
- def send_headers(self):
- """Transmit headers to the client, via self._write()"""
- self.cleanup_headers()
- self.headers_sent = True
- if not self.origin_server or self.client_is_modern():
- self.send_preamble()
- self._write(str(self.headers))
-
- def result_is_file(self):
- """True if 'self.result' is an instance of 'self.wsgi_file_wrapper'"""
- wrapper = self.wsgi_file_wrapper
- return wrapper is not None and isinstance(self.result,wrapper)
-
- def client_is_modern(self):
- """True if client can accept status and headers"""
- return self.environ['SERVER_PROTOCOL'].upper() != 'HTTP/0.9'
-
- def log_exception(self,exc_info):
- """Log the 'exc_info' tuple in the server log
-
- Subclasses may override to retarget the output or change its format.
- """
- try:
- from traceback import print_exception
- stderr = self.get_stderr()
- print_exception(
- exc_info[0], exc_info[1], exc_info[2],
- self.traceback_limit, stderr
- )
- stderr.flush()
- finally:
- exc_info = None
-
- def handle_error(self):
- """Log current error, and send error output to client if possible"""
- self.log_exception(sys.exc_info())
- if not self.headers_sent:
- self.result = self.error_output(self.environ, self.start_response)
- self.finish_response()
- # XXX else: attempt advanced recovery techniques for HTML or text?
-
- def error_output(self, environ, start_response):
- import traceback
- start_response(self.error_status, self.error_headers[:], sys.exc_info())
- return ['\n'.join(traceback.format_exception(*sys.exc_info()))]
-
- # Pure abstract methods; *must* be overridden in subclasses
-
- def _write(self,data):
- self.stdout.write(data)
- self._write = self.stdout.write
-
- def _flush(self):
- self.stdout.flush()
- self._flush = self.stdout.flush
-
- def get_stdin(self):
- return self.stdin
-
- def get_stderr(self):
- return self.stderr
-
- def add_cgi_vars(self):
- self.environ.update(self.base_env)
-
-class WSGIServer(HTTPServer):
- """BaseHTTPServer that implements the Python WSGI protocol"""
- application = None
-
- def server_bind(self):
- """Override server_bind to store the server name."""
- try:
- HTTPServer.server_bind(self)
- except Exception, e:
- raise WSGIServerException(e)
- self.setup_environ()
-
- def setup_environ(self):
- # Set up base environment
- env = self.base_environ = {}
- env['SERVER_NAME'] = self.server_name
- env['GATEWAY_INTERFACE'] = 'CGI/1.1'
- env['SERVER_PORT'] = str(self.server_port)
- env['REMOTE_HOST']=''
- env['CONTENT_LENGTH']=''
- env['SCRIPT_NAME'] = ''
-
- def get_app(self):
- return self.application
-
- def set_app(self,application):
- self.application = application
-
-class WSGIRequestHandler(BaseHTTPRequestHandler):
- server_version = "WSGIServer/" + __version__
-
- def __init__(self, *args, **kwargs):
- from django.conf import settings
- self.admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
- # We set self.path to avoid crashes in log_message() on unsupported
- # requests (like "OPTIONS").
- self.path = ''
- self.style = color_style()
- BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
-
- def get_environ(self):
- env = self.server.base_environ.copy()
- env['SERVER_PROTOCOL'] = self.request_version
- env['REQUEST_METHOD'] = self.command
- if '?' in self.path:
- path,query = self.path.split('?',1)
- else:
- path,query = self.path,''
-
- env['PATH_INFO'] = urllib.unquote(path)
- env['QUERY_STRING'] = query
- env['REMOTE_ADDR'] = self.client_address[0]
-
- if self.headers.typeheader is None:
- env['CONTENT_TYPE'] = self.headers.type
- else:
- env['CONTENT_TYPE'] = self.headers.typeheader
-
- length = self.headers.getheader('content-length')
- if length:
- env['CONTENT_LENGTH'] = length
-
- for h in self.headers.headers:
- k,v = h.split(':',1)
- k=k.replace('-','_').upper(); v=v.strip()
- if k in env:
- continue # skip content length, type,etc.
- if 'HTTP_'+k in env:
- env['HTTP_'+k] += ','+v # comma-separate multiple headers
- else:
- env['HTTP_'+k] = v
- return env
-
- def get_stderr(self):
- return sys.stderr
-
- def handle(self):
- """Handle a single HTTP request"""
- self.raw_requestline = self.rfile.readline()
- if not self.parse_request(): # An error code has been sent, just exit
- return
- handler = ServerHandler(self.rfile, self.wfile, self.get_stderr(), self.get_environ())
- handler.request_handler = self # backpointer for logging
- handler.run(self.server.get_app())
-
- def log_message(self, format, *args):
- # Don't bother logging requests for admin images or the favicon.
- if self.path.startswith(self.admin_media_prefix) or self.path == '/favicon.ico':
- return
-
- msg = "[%s] %s\n" % (self.log_date_time_string(), format % args)
-
- # Utilize terminal colors, if available
- if args[1][0] == '2':
- # Put 2XX first, since it should be the common case
- msg = self.style.HTTP_SUCCESS(msg)
- elif args[1][0] == '1':
- msg = self.style.HTTP_INFO(msg)
- elif args[1] == '304':
- msg = self.style.HTTP_NOT_MODIFIED(msg)
- elif args[1][0] == '3':
- msg = self.style.HTTP_REDIRECT(msg)
- elif args[1] == '404':
- msg = self.style.HTTP_NOT_FOUND(msg)
- elif args[1][0] == '4':
- msg = self.style.HTTP_BAD_REQUEST(msg)
- else:
- # Any 5XX, or any other response
- msg = self.style.HTTP_SERVER_ERROR(msg)
-
- sys.stderr.write(msg)
-
-class AdminMediaHandler(object):
- """
- WSGI middleware that intercepts calls to the admin media directory, as
- defined by the ADMIN_MEDIA_PREFIX setting, and serves those images.
- Use this ONLY LOCALLY, for development! This hasn't been tested for
- security and is not super efficient.
- """
- def __init__(self, application, media_dir=None):
- from django.conf import settings
- self.application = application
- if not media_dir:
- import django
- self.media_dir = \
- os.path.join(django.__path__[0], 'contrib', 'admin', 'media')
- else:
- self.media_dir = media_dir
- self.media_url = settings.ADMIN_MEDIA_PREFIX
-
- def file_path(self, url):
- """
- Returns the path to the media file on disk for the given URL.
-
- The passed URL is assumed to begin with ADMIN_MEDIA_PREFIX. If the
- resultant file path is outside the media directory, then a ValueError
- is raised.
- """
- # Remove ADMIN_MEDIA_PREFIX.
- relative_url = url[len(self.media_url):]
- relative_path = urllib.url2pathname(relative_url)
- return safe_join(self.media_dir, relative_path)
-
- def __call__(self, environ, start_response):
- import os.path
-
- # Ignore requests that aren't under ADMIN_MEDIA_PREFIX. Also ignore
- # all requests if ADMIN_MEDIA_PREFIX isn't a relative URL.
- if self.media_url.startswith('http://') or self.media_url.startswith('https://') \
- or not environ['PATH_INFO'].startswith(self.media_url):
- return self.application(environ, start_response)
-
- # Find the admin file and serve it up, if it exists and is readable.
- try:
- file_path = self.file_path(environ['PATH_INFO'])
- except ValueError: # Resulting file path was not valid.
- status = '404 NOT FOUND'
- headers = {'Content-type': 'text/plain'}
- output = ['Page not found: %s' % environ['PATH_INFO']]
- start_response(status, headers.items())
- return output
- if not os.path.exists(file_path):
- status = '404 NOT FOUND'
- headers = {'Content-type': 'text/plain'}
- output = ['Page not found: %s' % environ['PATH_INFO']]
- else:
- try:
- fp = open(file_path, 'rb')
- except IOError:
- status = '401 UNAUTHORIZED'
- headers = {'Content-type': 'text/plain'}
- output = ['Permission denied: %s' % environ['PATH_INFO']]
- else:
- # This is a very simple implementation of conditional GET with
- # the Last-Modified header. It makes media files a bit speedier
- # because the files are only read off disk for the first
- # request (assuming the browser/client supports conditional
- # GET).
- mtime = http_date(os.stat(file_path)[stat.ST_MTIME])
- headers = {'Last-Modified': mtime}
- if environ.get('HTTP_IF_MODIFIED_SINCE', None) == mtime:
- status = '304 NOT MODIFIED'
- output = []
- else:
- status = '200 OK'
- mime_type = mimetypes.guess_type(file_path)[0]
- if mime_type:
- headers['Content-Type'] = mime_type
- output = [fp.read()]
- fp.close()
- start_response(status, headers.items())
- return output
-
-def run(addr, port, wsgi_handler):
- server_address = (addr, port)
- httpd = WSGIServer(server_address, WSGIRequestHandler)
- httpd.set_app(wsgi_handler)
- httpd.serve_forever()
diff --git a/parts/django/django/core/servers/fastcgi.py b/parts/django/django/core/servers/fastcgi.py
deleted file mode 100644
index 7e724c2..0000000
--- a/parts/django/django/core/servers/fastcgi.py
+++ /dev/null
@@ -1,183 +0,0 @@
-"""
-FastCGI (or SCGI, or AJP1.3 ...) server that implements the WSGI protocol.
-
-Uses the flup python package: http://www.saddi.com/software/flup/
-
-This is a adaptation of the flup package to add FastCGI server support
-to run Django apps from Web servers that support the FastCGI protocol.
-This module can be run standalone or from the django-admin / manage.py
-scripts using the "runfcgi" directive.
-
-Run with the extra option "help" for a list of additional options you can
-pass to this server.
-"""
-
-from django.utils import importlib
-import sys, os
-
-__version__ = "0.1"
-__all__ = ["runfastcgi"]
-
-FASTCGI_HELP = r"""
- Run this project as a fastcgi (or some other protocol supported
- by flup) application. To do this, the flup package from
- http://www.saddi.com/software/flup/ is required.
-
- runfcgi [options] [fcgi settings]
-
-Optional Fcgi settings: (setting=value)
- protocol=PROTOCOL fcgi, scgi, ajp, ... (default fcgi)
- host=HOSTNAME hostname to listen on.
- port=PORTNUM port to listen on.
- socket=FILE UNIX socket to listen on.
- method=IMPL prefork or threaded (default prefork).
- maxrequests=NUMBER number of requests a child handles before it is
- killed and a new child is forked (0 = no limit).
- maxspare=NUMBER max number of spare processes / threads.
- minspare=NUMBER min number of spare processes / threads.
- maxchildren=NUMBER hard limit number of processes / threads.
- daemonize=BOOL whether to detach from terminal.
- pidfile=FILE write the spawned process-id to this file.
- workdir=DIRECTORY change to this directory when daemonizing.
- debug=BOOL set to true to enable flup tracebacks.
- outlog=FILE write stdout to this file.
- errlog=FILE write stderr to this file.
- umask=UMASK umask to use when daemonizing, in octal notation (default 022).
-
-Examples:
- Run a "standard" fastcgi process on a file-descriptor
- (for Web servers which spawn your processes for you)
- $ manage.py runfcgi method=threaded
-
- Run a scgi server on a TCP host/port
- $ manage.py runfcgi protocol=scgi method=prefork host=127.0.0.1 port=8025
-
- Run a fastcgi server on a UNIX domain socket (posix platforms only)
- $ manage.py runfcgi method=prefork socket=/tmp/fcgi.sock
-
- Run a fastCGI as a daemon and write the spawned PID in a file
- $ manage.py runfcgi socket=/tmp/fcgi.sock method=prefork \
- daemonize=true pidfile=/var/run/django-fcgi.pid
-
-"""
-
-FASTCGI_OPTIONS = {
- 'protocol': 'fcgi',
- 'host': None,
- 'port': None,
- 'socket': None,
- 'method': 'fork',
- 'daemonize': None,
- 'workdir': '/',
- 'pidfile': None,
- 'maxspare': 5,
- 'minspare': 2,
- 'maxchildren': 50,
- 'maxrequests': 0,
- 'debug': None,
- 'outlog': None,
- 'errlog': None,
- 'umask': None,
-}
-
-def fastcgi_help(message=None):
- print FASTCGI_HELP
- if message:
- print message
- return False
-
-def runfastcgi(argset=[], **kwargs):
- options = FASTCGI_OPTIONS.copy()
- options.update(kwargs)
- for x in argset:
- if "=" in x:
- k, v = x.split('=', 1)
- else:
- k, v = x, True
- options[k.lower()] = v
-
- if "help" in options:
- return fastcgi_help()
-
- try:
- import flup
- except ImportError, e:
- print >> sys.stderr, "ERROR: %s" % e
- print >> sys.stderr, " Unable to load the flup package. In order to run django"
- print >> sys.stderr, " as a FastCGI application, you will need to get flup from"
- print >> sys.stderr, " http://www.saddi.com/software/flup/ If you've already"
- print >> sys.stderr, " installed flup, then make sure you have it in your PYTHONPATH."
- return False
-
- flup_module = 'server.' + options['protocol']
-
- if options['method'] in ('prefork', 'fork'):
- wsgi_opts = {
- 'maxSpare': int(options["maxspare"]),
- 'minSpare': int(options["minspare"]),
- 'maxChildren': int(options["maxchildren"]),
- 'maxRequests': int(options["maxrequests"]),
- }
- flup_module += '_fork'
- elif options['method'] in ('thread', 'threaded'):
- wsgi_opts = {
- 'maxSpare': int(options["maxspare"]),
- 'minSpare': int(options["minspare"]),
- 'maxThreads': int(options["maxchildren"]),
- }
- else:
- return fastcgi_help("ERROR: Implementation must be one of prefork or thread.")
-
- wsgi_opts['debug'] = options['debug'] is not None
-
- try:
- module = importlib.import_module('.%s' % flup_module, 'flup')
- WSGIServer = module.WSGIServer
- except:
- print "Can't import flup." + flup_module
- return False
-
- # Prep up and go
- from django.core.handlers.wsgi import WSGIHandler
-
- if options["host"] and options["port"] and not options["socket"]:
- wsgi_opts['bindAddress'] = (options["host"], int(options["port"]))
- elif options["socket"] and not options["host"] and not options["port"]:
- wsgi_opts['bindAddress'] = options["socket"]
- elif not options["socket"] and not options["host"] and not options["port"]:
- wsgi_opts['bindAddress'] = None
- else:
- return fastcgi_help("Invalid combination of host, port, socket.")
-
- if options["daemonize"] is None:
- # Default to daemonizing if we're running on a socket/named pipe.
- daemonize = (wsgi_opts['bindAddress'] is not None)
- else:
- if options["daemonize"].lower() in ('true', 'yes', 't'):
- daemonize = True
- elif options["daemonize"].lower() in ('false', 'no', 'f'):
- daemonize = False
- else:
- return fastcgi_help("ERROR: Invalid option for daemonize parameter.")
-
- daemon_kwargs = {}
- if options['outlog']:
- daemon_kwargs['out_log'] = options['outlog']
- if options['errlog']:
- daemon_kwargs['err_log'] = options['errlog']
- if options['umask']:
- daemon_kwargs['umask'] = int(options['umask'], 8)
-
- if daemonize:
- from django.utils.daemonize import become_daemon
- become_daemon(our_home_dir=options["workdir"], **daemon_kwargs)
-
- if options["pidfile"]:
- fp = open(options["pidfile"], "w")
- fp.write("%d\n" % os.getpid())
- fp.close()
-
- WSGIServer(WSGIHandler(), **wsgi_opts).run()
-
-if __name__ == '__main__':
- runfastcgi(sys.argv[1:])
diff --git a/parts/django/django/core/signals.py b/parts/django/django/core/signals.py
deleted file mode 100644
index a14af00..0000000
--- a/parts/django/django/core/signals.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.dispatch import Signal
-
-request_started = Signal()
-request_finished = Signal()
-got_request_exception = Signal(providing_args=["request"])
diff --git a/parts/django/django/core/template_loader.py b/parts/django/django/core/template_loader.py
deleted file mode 100644
index ee86178..0000000
--- a/parts/django/django/core/template_loader.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# This module is DEPRECATED!
-#
-# You should no longer be using django.template_loader.
-#
-# Use django.template.loader instead.
-
-from django.template.loader import *
diff --git a/parts/django/django/core/urlresolvers.py b/parts/django/django/core/urlresolvers.py
deleted file mode 100644
index 8ecec94..0000000
--- a/parts/django/django/core/urlresolvers.py
+++ /dev/null
@@ -1,396 +0,0 @@
-"""
-This module converts requested URLs to callback view functions.
-
-RegexURLResolver is the main class here. Its resolve() method takes a URL (as
-a string) and returns a tuple in this format:
-
- (view_function, function_args, function_kwargs)
-"""
-
-import re
-
-from django.http import Http404
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
-from django.utils.datastructures import MultiValueDict
-from django.utils.encoding import iri_to_uri, force_unicode, smart_str
-from django.utils.functional import memoize
-from django.utils.importlib import import_module
-from django.utils.regex_helper import normalize
-from django.utils.thread_support import currentThread
-
-_resolver_cache = {} # Maps URLconf modules to RegexURLResolver instances.
-_callable_cache = {} # Maps view and url pattern names to their view functions.
-
-# SCRIPT_NAME prefixes for each thread are stored here. If there's no entry for
-# the current thread (which is the only one we ever access), it is assumed to
-# be empty.
-_prefixes = {}
-
-# Overridden URLconfs for each thread are stored here.
-_urlconfs = {}
-
-class Resolver404(Http404):
- pass
-
-class NoReverseMatch(Exception):
- # Don't make this raise an error when used in a template.
- silent_variable_failure = True
-
-def get_callable(lookup_view, can_fail=False):
- """
- Convert a string version of a function name to the callable object.
-
- If the lookup_view is not an import path, it is assumed to be a URL pattern
- label and the original string is returned.
-
- If can_fail is True, lookup_view might be a URL pattern label, so errors
- during the import fail and the string is returned.
- """
- if not callable(lookup_view):
- try:
- # Bail early for non-ASCII strings (they can't be functions).
- lookup_view = lookup_view.encode('ascii')
- mod_name, func_name = get_mod_func(lookup_view)
- if func_name != '':
- lookup_view = getattr(import_module(mod_name), func_name)
- if not callable(lookup_view):
- raise AttributeError("'%s.%s' is not a callable." % (mod_name, func_name))
- except (ImportError, AttributeError):
- if not can_fail:
- raise
- except UnicodeEncodeError:
- pass
- return lookup_view
-get_callable = memoize(get_callable, _callable_cache, 1)
-
-def get_resolver(urlconf):
- if urlconf is None:
- from django.conf import settings
- urlconf = settings.ROOT_URLCONF
- return RegexURLResolver(r'^/', urlconf)
-get_resolver = memoize(get_resolver, _resolver_cache, 1)
-
-def get_mod_func(callback):
- # Converts 'django.views.news.stories.story_detail' to
- # ['django.views.news.stories', 'story_detail']
- try:
- dot = callback.rindex('.')
- except ValueError:
- return callback, ''
- return callback[:dot], callback[dot+1:]
-
-class RegexURLPattern(object):
- def __init__(self, regex, callback, default_args=None, name=None):
- # regex is a string representing a regular expression.
- # callback is either a string like 'foo.views.news.stories.story_detail'
- # which represents the path to a module and a view function name, or a
- # callable object (view).
- self.regex = re.compile(regex, re.UNICODE)
- if callable(callback):
- self._callback = callback
- else:
- self._callback = None
- self._callback_str = callback
- self.default_args = default_args or {}
- self.name = name
-
- def __repr__(self):
- return '<%s %s %s>' % (self.__class__.__name__, self.name, self.regex.pattern)
-
- def add_prefix(self, prefix):
- """
- Adds the prefix string to a string-based callback.
- """
- if not prefix or not hasattr(self, '_callback_str'):
- return
- self._callback_str = prefix + '.' + self._callback_str
-
- def resolve(self, path):
- match = self.regex.search(path)
- if match:
- # If there are any named groups, use those as kwargs, ignoring
- # non-named groups. Otherwise, pass all non-named arguments as
- # positional arguments.
- kwargs = match.groupdict()
- if kwargs:
- args = ()
- else:
- args = match.groups()
- # In both cases, pass any extra_kwargs as **kwargs.
- kwargs.update(self.default_args)
-
- return self.callback, args, kwargs
-
- def _get_callback(self):
- if self._callback is not None:
- return self._callback
- try:
- self._callback = get_callable(self._callback_str)
- except ImportError, e:
- mod_name, _ = get_mod_func(self._callback_str)
- raise ViewDoesNotExist("Could not import %s. Error was: %s" % (mod_name, str(e)))
- except AttributeError, e:
- mod_name, func_name = get_mod_func(self._callback_str)
- raise ViewDoesNotExist("Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e)))
- return self._callback
- callback = property(_get_callback)
-
-class RegexURLResolver(object):
- def __init__(self, regex, urlconf_name, default_kwargs=None, app_name=None, namespace=None):
- # regex is a string representing a regular expression.
- # urlconf_name is a string representing the module containing URLconfs.
- self.regex = re.compile(regex, re.UNICODE)
- self.urlconf_name = urlconf_name
- if not isinstance(urlconf_name, basestring):
- self._urlconf_module = self.urlconf_name
- self.callback = None
- self.default_kwargs = default_kwargs or {}
- self.namespace = namespace
- self.app_name = app_name
- self._reverse_dict = None
- self._namespace_dict = None
- self._app_dict = None
-
- def __repr__(self):
- return '<%s %s (%s:%s) %s>' % (self.__class__.__name__, self.urlconf_name, self.app_name, self.namespace, self.regex.pattern)
-
- def _populate(self):
- lookups = MultiValueDict()
- namespaces = {}
- apps = {}
- for pattern in reversed(self.url_patterns):
- p_pattern = pattern.regex.pattern
- if p_pattern.startswith('^'):
- p_pattern = p_pattern[1:]
- if isinstance(pattern, RegexURLResolver):
- if pattern.namespace:
- namespaces[pattern.namespace] = (p_pattern, pattern)
- if pattern.app_name:
- apps.setdefault(pattern.app_name, []).append(pattern.namespace)
- else:
- parent = normalize(pattern.regex.pattern)
- for name in pattern.reverse_dict:
- for matches, pat in pattern.reverse_dict.getlist(name):
- new_matches = []
- for piece, p_args in parent:
- new_matches.extend([(piece + suffix, p_args + args) for (suffix, args) in matches])
- lookups.appendlist(name, (new_matches, p_pattern + pat))
- for namespace, (prefix, sub_pattern) in pattern.namespace_dict.items():
- namespaces[namespace] = (p_pattern + prefix, sub_pattern)
- for app_name, namespace_list in pattern.app_dict.items():
- apps.setdefault(app_name, []).extend(namespace_list)
- else:
- bits = normalize(p_pattern)
- lookups.appendlist(pattern.callback, (bits, p_pattern))
- if pattern.name is not None:
- lookups.appendlist(pattern.name, (bits, p_pattern))
- self._reverse_dict = lookups
- self._namespace_dict = namespaces
- self._app_dict = apps
-
- def _get_reverse_dict(self):
- if self._reverse_dict is None:
- self._populate()
- return self._reverse_dict
- reverse_dict = property(_get_reverse_dict)
-
- def _get_namespace_dict(self):
- if self._namespace_dict is None:
- self._populate()
- return self._namespace_dict
- namespace_dict = property(_get_namespace_dict)
-
- def _get_app_dict(self):
- if self._app_dict is None:
- self._populate()
- return self._app_dict
- app_dict = property(_get_app_dict)
-
- def resolve(self, path):
- tried = []
- match = self.regex.search(path)
- if match:
- new_path = path[match.end():]
- for pattern in self.url_patterns:
- try:
- sub_match = pattern.resolve(new_path)
- except Resolver404, e:
- sub_tried = e.args[0].get('tried')
- if sub_tried is not None:
- tried.extend([(pattern.regex.pattern + ' ' + t) for t in sub_tried])
- else:
- tried.append(pattern.regex.pattern)
- else:
- if sub_match:
- sub_match_dict = dict([(smart_str(k), v) for k, v in match.groupdict().items()])
- sub_match_dict.update(self.default_kwargs)
- for k, v in sub_match[2].iteritems():
- sub_match_dict[smart_str(k)] = v
- return sub_match[0], sub_match[1], sub_match_dict
- tried.append(pattern.regex.pattern)
- raise Resolver404({'tried': tried, 'path': new_path})
- raise Resolver404({'path' : path})
-
- def _get_urlconf_module(self):
- try:
- return self._urlconf_module
- except AttributeError:
- self._urlconf_module = import_module(self.urlconf_name)
- return self._urlconf_module
- urlconf_module = property(_get_urlconf_module)
-
- def _get_url_patterns(self):
- patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
- try:
- iter(patterns)
- except TypeError:
- raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name)
- return patterns
- url_patterns = property(_get_url_patterns)
-
- def _resolve_special(self, view_type):
- callback = getattr(self.urlconf_module, 'handler%s' % view_type)
- try:
- return get_callable(callback), {}
- except (ImportError, AttributeError), e:
- raise ViewDoesNotExist("Tried %s. Error was: %s" % (callback, str(e)))
-
- def resolve404(self):
- return self._resolve_special('404')
-
- def resolve500(self):
- return self._resolve_special('500')
-
- def reverse(self, lookup_view, *args, **kwargs):
- if args and kwargs:
- raise ValueError("Don't mix *args and **kwargs in call to reverse()!")
- try:
- lookup_view = get_callable(lookup_view, True)
- except (ImportError, AttributeError), e:
- raise NoReverseMatch("Error importing '%s': %s." % (lookup_view, e))
- possibilities = self.reverse_dict.getlist(lookup_view)
- for possibility, pattern in possibilities:
- for result, params in possibility:
- if args:
- if len(args) != len(params):
- continue
- unicode_args = [force_unicode(val) for val in args]
- candidate = result % dict(zip(params, unicode_args))
- else:
- if set(kwargs.keys()) != set(params):
- continue
- unicode_kwargs = dict([(k, force_unicode(v)) for (k, v) in kwargs.items()])
- candidate = result % unicode_kwargs
- if re.search(u'^%s' % pattern, candidate, re.UNICODE):
- return candidate
- # lookup_view can be URL label, or dotted path, or callable, Any of
- # these can be passed in at the top, but callables are not friendly in
- # error messages.
- m = getattr(lookup_view, '__module__', None)
- n = getattr(lookup_view, '__name__', None)
- if m is not None and n is not None:
- lookup_view_s = "%s.%s" % (m, n)
- else:
- lookup_view_s = lookup_view
- raise NoReverseMatch("Reverse for '%s' with arguments '%s' and keyword "
- "arguments '%s' not found." % (lookup_view_s, args, kwargs))
-
-def resolve(path, urlconf=None):
- if urlconf is None:
- urlconf = get_urlconf()
- return get_resolver(urlconf).resolve(path)
-
-def reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None):
- if urlconf is None:
- urlconf = get_urlconf()
- resolver = get_resolver(urlconf)
- args = args or []
- kwargs = kwargs or {}
-
- if prefix is None:
- prefix = get_script_prefix()
-
- if not isinstance(viewname, basestring):
- view = viewname
- else:
- parts = viewname.split(':')
- parts.reverse()
- view = parts[0]
- path = parts[1:]
-
- resolved_path = []
- while path:
- ns = path.pop()
-
- # Lookup the name to see if it could be an app identifier
- try:
- app_list = resolver.app_dict[ns]
- # Yes! Path part matches an app in the current Resolver
- if current_app and current_app in app_list:
- # If we are reversing for a particular app, use that namespace
- ns = current_app
- elif ns not in app_list:
- # The name isn't shared by one of the instances (i.e., the default)
- # so just pick the first instance as the default.
- ns = app_list[0]
- except KeyError:
- pass
-
- try:
- extra, resolver = resolver.namespace_dict[ns]
- resolved_path.append(ns)
- prefix = prefix + extra
- except KeyError, key:
- if resolved_path:
- raise NoReverseMatch("%s is not a registered namespace inside '%s'" % (key, ':'.join(resolved_path)))
- else:
- raise NoReverseMatch("%s is not a registered namespace" % key)
-
- return iri_to_uri(u'%s%s' % (prefix, resolver.reverse(view,
- *args, **kwargs)))
-
-def clear_url_caches():
- global _resolver_cache
- global _callable_cache
- _resolver_cache.clear()
- _callable_cache.clear()
-
-def set_script_prefix(prefix):
- """
- Sets the script prefix for the current thread.
- """
- if not prefix.endswith('/'):
- prefix += '/'
- _prefixes[currentThread()] = prefix
-
-def get_script_prefix():
- """
- Returns the currently active script prefix. Useful for client code that
- wishes to construct their own URLs manually (although accessing the request
- instance is normally going to be a lot cleaner).
- """
- return _prefixes.get(currentThread(), u'/')
-
-def set_urlconf(urlconf_name):
- """
- Sets the URLconf for the current thread (overriding the default one in
- settings). Set to None to revert back to the default.
- """
- thread = currentThread()
- if urlconf_name:
- _urlconfs[thread] = urlconf_name
- else:
- # faster than wrapping in a try/except
- if thread in _urlconfs:
- del _urlconfs[thread]
-
-def get_urlconf(default=None):
- """
- Returns the root URLconf to use for the current thread if it has been
- changed from the default one.
- """
- thread = currentThread()
- if thread in _urlconfs:
- return _urlconfs[thread]
- return default
diff --git a/parts/django/django/core/validators.py b/parts/django/django/core/validators.py
deleted file mode 100644
index b1b82db..0000000
--- a/parts/django/django/core/validators.py
+++ /dev/null
@@ -1,172 +0,0 @@
-import re
-import urlparse
-
-from django.core.exceptions import ValidationError
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode
-
-# These values, if given to validate(), will trigger the self.required check.
-EMPTY_VALUES = (None, '', [], (), {})
-
-try:
- from django.conf import settings
- URL_VALIDATOR_USER_AGENT = settings.URL_VALIDATOR_USER_AGENT
-except ImportError:
- # It's OK if Django settings aren't configured.
- URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)'
-
-class RegexValidator(object):
- regex = ''
- message = _(u'Enter a valid value.')
- code = 'invalid'
-
- def __init__(self, regex=None, message=None, code=None):
- if regex is not None:
- self.regex = regex
- if message is not None:
- self.message = message
- if code is not None:
- self.code = code
-
- if isinstance(self.regex, basestring):
- self.regex = re.compile(regex)
-
- def __call__(self, value):
- """
- Validates that the input matches the regular expression.
- """
- if not self.regex.search(smart_unicode(value)):
- raise ValidationError(self.message, code=self.code)
-
-class URLValidator(RegexValidator):
- regex = re.compile(
- r'^https?://' # http:// or https://
- r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' #domain...
- r'localhost|' #localhost...
- r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
- r'(?::\d+)?' # optional port
- r'(?:/?|[/?]\S+)$', re.IGNORECASE)
-
- def __init__(self, verify_exists=False, validator_user_agent=URL_VALIDATOR_USER_AGENT):
- super(URLValidator, self).__init__()
- self.verify_exists = verify_exists
- self.user_agent = validator_user_agent
-
- def __call__(self, value):
- try:
- super(URLValidator, self).__call__(value)
- except ValidationError, e:
- # Trivial case failed. Try for possible IDN domain
- if value:
- value = smart_unicode(value)
- scheme, netloc, path, query, fragment = urlparse.urlsplit(value)
- try:
- netloc = netloc.encode('idna') # IDN -> ACE
- except UnicodeError: # invalid domain part
- raise e
- url = urlparse.urlunsplit((scheme, netloc, path, query, fragment))
- super(URLValidator, self).__call__(url)
- else:
- raise
- else:
- url = value
-
- if self.verify_exists:
- import urllib2
- headers = {
- "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
- "Accept-Language": "en-us,en;q=0.5",
- "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
- "Connection": "close",
- "User-Agent": self.user_agent,
- }
- try:
- req = urllib2.Request(url, None, headers)
- u = urllib2.urlopen(req)
- except ValueError:
- raise ValidationError(_(u'Enter a valid URL.'), code='invalid')
- except: # urllib2.URLError, httplib.InvalidURL, etc.
- raise ValidationError(_(u'This URL appears to be a broken link.'), code='invalid_link')
-
-
-def validate_integer(value):
- try:
- int(value)
- except (ValueError, TypeError), e:
- raise ValidationError('')
-
-class EmailValidator(RegexValidator):
-
- def __call__(self, value):
- try:
- super(EmailValidator, self).__call__(value)
- except ValidationError, e:
- # Trivial case failed. Try for possible IDN domain-part
- if value and u'@' in value:
- parts = value.split(u'@')
- domain_part = parts[-1]
- try:
- parts[-1] = parts[-1].encode('idna')
- except UnicodeError:
- raise e
- super(EmailValidator, self).__call__(u'@'.join(parts))
- else:
- raise
-
-email_re = re.compile(
- r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
- r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
- r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$', re.IGNORECASE) # domain
-validate_email = EmailValidator(email_re, _(u'Enter a valid e-mail address.'), 'invalid')
-
-slug_re = re.compile(r'^[-\w]+$')
-validate_slug = RegexValidator(slug_re, _(u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."), 'invalid')
-
-ipv4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
-validate_ipv4_address = RegexValidator(ipv4_re, _(u'Enter a valid IPv4 address.'), 'invalid')
-
-comma_separated_int_list_re = re.compile('^[\d,]+$')
-validate_comma_separated_integer_list = RegexValidator(comma_separated_int_list_re, _(u'Enter only digits separated by commas.'), 'invalid')
-
-
-class BaseValidator(object):
- compare = lambda self, a, b: a is not b
- clean = lambda self, x: x
- message = _(u'Ensure this value is %(limit_value)s (it is %(show_value)s).')
- code = 'limit_value'
-
- def __init__(self, limit_value):
- self.limit_value = limit_value
-
- def __call__(self, value):
- cleaned = self.clean(value)
- params = {'limit_value': self.limit_value, 'show_value': cleaned}
- if self.compare(cleaned, self.limit_value):
- raise ValidationError(
- self.message % params,
- code=self.code,
- params=params,
- )
-
-class MaxValueValidator(BaseValidator):
- compare = lambda self, a, b: a > b
- message = _(u'Ensure this value is less than or equal to %(limit_value)s.')
- code = 'max_value'
-
-class MinValueValidator(BaseValidator):
- compare = lambda self, a, b: a < b
- message = _(u'Ensure this value is greater than or equal to %(limit_value)s.')
- code = 'min_value'
-
-class MinLengthValidator(BaseValidator):
- compare = lambda self, a, b: a < b
- clean = lambda self, x: len(x)
- message = _(u'Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).')
- code = 'min_length'
-
-class MaxLengthValidator(BaseValidator):
- compare = lambda self, a, b: a > b
- clean = lambda self, x: len(x)
- message = _(u'Ensure this value has at most %(limit_value)d characters (it has %(show_value)d).')
- code = 'max_length'
-
diff --git a/parts/django/django/core/xheaders.py b/parts/django/django/core/xheaders.py
deleted file mode 100644
index b650a3a..0000000
--- a/parts/django/django/core/xheaders.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-Pages in Django can are served up with custom HTTP headers containing useful
-information about those pages -- namely, the content type and object ID.
-
-This module contains utility functions for retrieving and doing interesting
-things with these special "X-Headers" (so called because the HTTP spec demands
-that custom headers are prefixed with "X-").
-
-Next time you're at slashdot.org, watch out for X-Fry and X-Bender. :)
-"""
-
-def populate_xheaders(request, response, model, object_id):
- """
- Adds the "X-Object-Type" and "X-Object-Id" headers to the given
- HttpResponse according to the given model and object_id -- but only if the
- given HttpRequest object has an IP address within the INTERNAL_IPS setting
- or if the request is from a logged in staff member.
- """
- from django.conf import settings
- if (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
- or (hasattr(request, 'user') and request.user.is_active
- and request.user.is_staff)):
- response['X-Object-Type'] = "%s.%s" % (model._meta.app_label, model._meta.object_name.lower())
- response['X-Object-Id'] = str(object_id)
diff --git a/parts/django/django/db/__init__.py b/parts/django/django/db/__init__.py
deleted file mode 100644
index 7136b2f..0000000
--- a/parts/django/django/db/__init__.py
+++ /dev/null
@@ -1,103 +0,0 @@
-from django.conf import settings
-from django.core import signals
-from django.core.exceptions import ImproperlyConfigured
-from django.db.utils import ConnectionHandler, ConnectionRouter, load_backend, DEFAULT_DB_ALIAS, \
- DatabaseError, IntegrityError
-from django.utils.functional import curry
-
-__all__ = ('backend', 'connection', 'connections', 'router', 'DatabaseError',
- 'IntegrityError', 'DEFAULT_DB_ALIAS')
-
-
-# For backwards compatibility - Port any old database settings over to
-# the new values.
-if not settings.DATABASES:
- import warnings
- warnings.warn(
- "settings.DATABASE_* is deprecated; use settings.DATABASES instead.",
- PendingDeprecationWarning
- )
-
- settings.DATABASES[DEFAULT_DB_ALIAS] = {
- 'ENGINE': settings.DATABASE_ENGINE,
- 'HOST': settings.DATABASE_HOST,
- 'NAME': settings.DATABASE_NAME,
- 'OPTIONS': settings.DATABASE_OPTIONS,
- 'PASSWORD': settings.DATABASE_PASSWORD,
- 'PORT': settings.DATABASE_PORT,
- 'USER': settings.DATABASE_USER,
- 'TEST_CHARSET': settings.TEST_DATABASE_CHARSET,
- 'TEST_COLLATION': settings.TEST_DATABASE_COLLATION,
- 'TEST_NAME': settings.TEST_DATABASE_NAME,
- }
-
-if DEFAULT_DB_ALIAS not in settings.DATABASES:
- raise ImproperlyConfigured("You must define a '%s' database" % DEFAULT_DB_ALIAS)
-
-for alias, database in settings.DATABASES.items():
- if 'ENGINE' not in database:
- raise ImproperlyConfigured("You must specify a 'ENGINE' for database '%s'" % alias)
- if database['ENGINE'] in ("postgresql", "postgresql_psycopg2", "sqlite3", "mysql", "oracle"):
- import warnings
- if 'django.contrib.gis' in settings.INSTALLED_APPS:
- warnings.warn(
- "django.contrib.gis is now implemented as a full database backend. "
- "Modify ENGINE in the %s database configuration to select "
- "a backend from 'django.contrib.gis.db.backends'" % alias,
- PendingDeprecationWarning
- )
- if database['ENGINE'] == 'postgresql_psycopg2':
- full_engine = 'django.contrib.gis.db.backends.postgis'
- elif database['ENGINE'] == 'sqlite3':
- full_engine = 'django.contrib.gis.db.backends.spatialite'
- else:
- full_engine = 'django.contrib.gis.db.backends.%s' % database['ENGINE']
- else:
- warnings.warn(
- "Short names for ENGINE in database configurations are deprecated. "
- "Prepend %s.ENGINE with 'django.db.backends.'" % alias,
- PendingDeprecationWarning
- )
- full_engine = "django.db.backends.%s" % database['ENGINE']
- database['ENGINE'] = full_engine
-
-connections = ConnectionHandler(settings.DATABASES)
-
-router = ConnectionRouter(settings.DATABASE_ROUTERS)
-
-# `connection`, `DatabaseError` and `IntegrityError` are convenient aliases
-# for backend bits.
-
-# DatabaseWrapper.__init__() takes a dictionary, not a settings module, so
-# we manually create the dictionary from the settings, passing only the
-# settings that the database backends care about. Note that TIME_ZONE is used
-# by the PostgreSQL backends.
-# we load all these up for backwards compatibility, you should use
-# connections['default'] instead.
-connection = connections[DEFAULT_DB_ALIAS]
-backend = load_backend(connection.settings_dict['ENGINE'])
-
-# Register an event that closes the database connection
-# when a Django request is finished.
-def close_connection(**kwargs):
- for conn in connections.all():
- conn.close()
-signals.request_finished.connect(close_connection)
-
-# Register an event that resets connection.queries
-# when a Django request is started.
-def reset_queries(**kwargs):
- for conn in connections.all():
- conn.queries = []
-signals.request_started.connect(reset_queries)
-
-# Register an event that rolls back the connections
-# when a Django request has an exception.
-def _rollback_on_exception(**kwargs):
- from django.db import transaction
- for conn in connections:
- try:
- transaction.rollback_unless_managed(using=conn)
- except DatabaseError:
- pass
-signals.got_request_exception.connect(_rollback_on_exception)
diff --git a/parts/django/django/db/backends/__init__.py b/parts/django/django/db/backends/__init__.py
deleted file mode 100644
index 0d9f533..0000000
--- a/parts/django/django/db/backends/__init__.py
+++ /dev/null
@@ -1,592 +0,0 @@
-import decimal
-from threading import local
-
-from django.db import DEFAULT_DB_ALIAS
-from django.db.backends import util
-from django.utils import datetime_safe
-from django.utils.importlib import import_module
-
-class BaseDatabaseWrapper(local):
- """
- Represents a database connection.
- """
- ops = None
-
- def __init__(self, settings_dict, alias=DEFAULT_DB_ALIAS):
- # `settings_dict` should be a dictionary containing keys such as
- # NAME, USER, etc. It's called `settings_dict` instead of `settings`
- # to disambiguate it from Django settings modules.
- self.connection = None
- self.queries = []
- self.settings_dict = settings_dict
- self.alias = alias
-
- def __eq__(self, other):
- return self.alias == other.alias
-
- def __ne__(self, other):
- return not self == other
-
- def _commit(self):
- if self.connection is not None:
- return self.connection.commit()
-
- def _rollback(self):
- if self.connection is not None:
- return self.connection.rollback()
-
- def _enter_transaction_management(self, managed):
- """
- A hook for backend-specific changes required when entering manual
- transaction handling.
- """
- pass
-
- def _leave_transaction_management(self, managed):
- """
- A hook for backend-specific changes required when leaving manual
- transaction handling. Will usually be implemented only when
- _enter_transaction_management() is also required.
- """
- pass
-
- def _savepoint(self, sid):
- if not self.features.uses_savepoints:
- return
- self.cursor().execute(self.ops.savepoint_create_sql(sid))
-
- def _savepoint_rollback(self, sid):
- if not self.features.uses_savepoints:
- return
- self.cursor().execute(self.ops.savepoint_rollback_sql(sid))
-
- def _savepoint_commit(self, sid):
- if not self.features.uses_savepoints:
- return
- self.cursor().execute(self.ops.savepoint_commit_sql(sid))
-
- def close(self):
- if self.connection is not None:
- self.connection.close()
- self.connection = None
-
- def cursor(self):
- from django.conf import settings
- cursor = self._cursor()
- if settings.DEBUG:
- return self.make_debug_cursor(cursor)
- return cursor
-
- def make_debug_cursor(self, cursor):
- return util.CursorDebugWrapper(cursor, self)
-
-class BaseDatabaseFeatures(object):
- allows_group_by_pk = False
- # True if django.db.backend.utils.typecast_timestamp is used on values
- # returned from dates() calls.
- needs_datetime_string_cast = True
- empty_fetchmany_value = []
- update_can_self_select = True
- interprets_empty_strings_as_nulls = False
- can_use_chunked_reads = True
- can_return_id_from_insert = False
- uses_autocommit = False
- uses_savepoints = False
- # If True, don't use integer foreign keys referring to, e.g., positive
- # integer primary keys.
- related_fields_match_type = False
- allow_sliced_subqueries = True
-
-class BaseDatabaseOperations(object):
- """
- This class encapsulates all backend-specific differences, such as the way
- a backend performs ordering or calculates the ID of a recently-inserted
- row.
- """
- compiler_module = "django.db.models.sql.compiler"
-
- def __init__(self):
- self._cache = {}
-
- def autoinc_sql(self, table, column):
- """
- Returns any SQL needed to support auto-incrementing primary keys, or
- None if no SQL is necessary.
-
- This SQL is executed when a table is created.
- """
- return None
-
- def date_extract_sql(self, lookup_type, field_name):
- """
- Given a lookup_type of 'year', 'month' or 'day', returns the SQL that
- extracts a value from the given date field field_name.
- """
- raise NotImplementedError()
-
- def date_trunc_sql(self, lookup_type, field_name):
- """
- Given a lookup_type of 'year', 'month' or 'day', returns the SQL that
- truncates the given date field field_name to a DATE object with only
- the given specificity.
- """
- raise NotImplementedError()
-
- def datetime_cast_sql(self):
- """
- Returns the SQL necessary to cast a datetime value so that it will be
- retrieved as a Python datetime object instead of a string.
-
- This SQL should include a '%s' in place of the field's name.
- """
- return "%s"
-
- def deferrable_sql(self):
- """
- Returns the SQL necessary to make a constraint "initially deferred"
- during a CREATE TABLE statement.
- """
- return ''
-
- def drop_foreignkey_sql(self):
- """
- Returns the SQL command that drops a foreign key.
- """
- return "DROP CONSTRAINT"
-
- def drop_sequence_sql(self, table):
- """
- Returns any SQL necessary to drop the sequence for the given table.
- Returns None if no SQL is necessary.
- """
- return None
-
- def fetch_returned_insert_id(self, cursor):
- """
- Given a cursor object that has just performed an INSERT...RETURNING
- statement into a table that has an auto-incrementing ID, returns the
- newly created ID.
- """
- return cursor.fetchone()[0]
-
- def field_cast_sql(self, db_type):
- """
- Given a column type (e.g. 'BLOB', 'VARCHAR'), returns the SQL necessary
- to cast it before using it in a WHERE statement. Note that the
- resulting string should contain a '%s' placeholder for the column being
- searched against.
- """
- return '%s'
-
- def force_no_ordering(self):
- """
- Returns a list used in the "ORDER BY" clause to force no ordering at
- all. Returning an empty list means that nothing will be included in the
- ordering.
- """
- return []
-
- def fulltext_search_sql(self, field_name):
- """
- Returns the SQL WHERE clause to use in order to perform a full-text
- search of the given field_name. Note that the resulting string should
- contain a '%s' placeholder for the value being searched against.
- """
- raise NotImplementedError('Full-text search is not implemented for this database backend')
-
- def last_executed_query(self, cursor, sql, params):
- """
- Returns a string of the query last executed by the given cursor, with
- placeholders replaced with actual values.
-
- `sql` is the raw query containing placeholders, and `params` is the
- sequence of parameters. These are used by default, but this method
- exists for database backends to provide a better implementation
- according to their own quoting schemes.
- """
- from django.utils.encoding import smart_unicode, force_unicode
-
- # Convert params to contain Unicode values.
- to_unicode = lambda s: force_unicode(s, strings_only=True, errors='replace')
- if isinstance(params, (list, tuple)):
- u_params = tuple([to_unicode(val) for val in params])
- else:
- u_params = dict([(to_unicode(k), to_unicode(v)) for k, v in params.items()])
-
- return smart_unicode(sql) % u_params
-
- def last_insert_id(self, cursor, table_name, pk_name):
- """
- Given a cursor object that has just performed an INSERT statement into
- a table that has an auto-incrementing ID, returns the newly created ID.
-
- This method also receives the table name and the name of the primary-key
- column.
- """
- return cursor.lastrowid
-
- def lookup_cast(self, lookup_type):
- """
- Returns the string to use in a query when performing lookups
- ("contains", "like", etc). The resulting string should contain a '%s'
- placeholder for the column being searched against.
- """
- return "%s"
-
- def max_in_list_size(self):
- """
- Returns the maximum number of items that can be passed in a single 'IN'
- list condition, or None if the backend does not impose a limit.
- """
- return None
-
- def max_name_length(self):
- """
- Returns the maximum length of table and column names, or None if there
- is no limit.
- """
- return None
-
- def no_limit_value(self):
- """
- Returns the value to use for the LIMIT when we are wanting "LIMIT
- infinity". Returns None if the limit clause can be omitted in this case.
- """
- raise NotImplementedError
-
- def pk_default_value(self):
- """
- Returns the value to use during an INSERT statement to specify that
- the field should use its default value.
- """
- return 'DEFAULT'
-
- def process_clob(self, value):
- """
- Returns the value of a CLOB column, for backends that return a locator
- object that requires additional processing.
- """
- return value
-
- def return_insert_id(self):
- """
- For backends that support returning the last insert ID as part
- of an insert query, this method returns the SQL and params to
- append to the INSERT query. The returned fragment should
- contain a format string to hold the appropriate column.
- """
- pass
-
- def compiler(self, compiler_name):
- """
- Returns the SQLCompiler class corresponding to the given name,
- in the namespace corresponding to the `compiler_module` attribute
- on this backend.
- """
- if compiler_name not in self._cache:
- self._cache[compiler_name] = getattr(
- import_module(self.compiler_module), compiler_name
- )
- return self._cache[compiler_name]
-
- def quote_name(self, name):
- """
- Returns a quoted version of the given table, index or column name. Does
- not quote the given name if it's already been quoted.
- """
- raise NotImplementedError()
-
- def random_function_sql(self):
- """
- Returns a SQL expression that returns a random value.
- """
- return 'RANDOM()'
-
- def regex_lookup(self, lookup_type):
- """
- Returns the string to use in a query when performing regular expression
- lookups (using "regex" or "iregex"). The resulting string should
- contain a '%s' placeholder for the column being searched against.
-
- If the feature is not supported (or part of it is not supported), a
- NotImplementedError exception can be raised.
- """
- raise NotImplementedError
-
- def savepoint_create_sql(self, sid):
- """
- Returns the SQL for starting a new savepoint. Only required if the
- "uses_savepoints" feature is True. The "sid" parameter is a string
- for the savepoint id.
- """
- raise NotImplementedError
-
- def savepoint_commit_sql(self, sid):
- """
- Returns the SQL for committing the given savepoint.
- """
- raise NotImplementedError
-
- def savepoint_rollback_sql(self, sid):
- """
- Returns the SQL for rolling back the given savepoint.
- """
- raise NotImplementedError
-
- def sql_flush(self, style, tables, sequences):
- """
- Returns a list of SQL statements required to remove all data from
- the given database tables (without actually removing the tables
- themselves).
-
- The `style` argument is a Style object as returned by either
- color_style() or no_style() in django.core.management.color.
- """
- raise NotImplementedError()
-
- def sequence_reset_sql(self, style, model_list):
- """
- Returns a list of the SQL statements required to reset sequences for
- the given models.
-
- The `style` argument is a Style object as returned by either
- color_style() or no_style() in django.core.management.color.
- """
- return [] # No sequence reset required by default.
-
- def start_transaction_sql(self):
- """
- Returns the SQL statement required to start a transaction.
- """
- return "BEGIN;"
-
- def end_transaction_sql(self, success=True):
- if not success:
- return "ROLLBACK;"
- return "COMMIT;"
-
- def tablespace_sql(self, tablespace, inline=False):
- """
- Returns the SQL that will be appended to tables or rows to define
- a tablespace. Returns '' if the backend doesn't use tablespaces.
- """
- return ''
-
- def prep_for_like_query(self, x):
- """Prepares a value for use in a LIKE query."""
- from django.utils.encoding import smart_unicode
- return smart_unicode(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_")
-
- # Same as prep_for_like_query(), but called for "iexact" matches, which
- # need not necessarily be implemented using "LIKE" in the backend.
- prep_for_iexact_query = prep_for_like_query
-
- def value_to_db_date(self, value):
- """
- Transform a date value to an object compatible with what is expected
- by the backend driver for date columns.
- """
- if value is None:
- return None
- return datetime_safe.new_date(value).strftime('%Y-%m-%d')
-
- def value_to_db_datetime(self, value):
- """
- Transform a datetime value to an object compatible with what is expected
- by the backend driver for datetime columns.
- """
- if value is None:
- return None
- return unicode(value)
-
- def value_to_db_time(self, value):
- """
- Transform a datetime value to an object compatible with what is expected
- by the backend driver for time columns.
- """
- if value is None:
- return None
- return unicode(value)
-
- def value_to_db_decimal(self, value, max_digits, decimal_places):
- """
- Transform a decimal.Decimal value to an object compatible with what is
- expected by the backend driver for decimal (numeric) columns.
- """
- if value is None:
- return None
- return util.format_number(value, max_digits, decimal_places)
-
- def year_lookup_bounds(self, value):
- """
- Returns a two-elements list with the lower and upper bound to be used
- with a BETWEEN operator to query a field value using a year lookup
-
- `value` is an int, containing the looked-up year.
- """
- first = '%s-01-01 00:00:00'
- second = '%s-12-31 23:59:59.999999'
- return [first % value, second % value]
-
- def year_lookup_bounds_for_date_field(self, value):
- """
- Returns a two-elements list with the lower and upper bound to be used
- with a BETWEEN operator to query a DateField value using a year lookup
-
- `value` is an int, containing the looked-up year.
-
- By default, it just calls `self.year_lookup_bounds`. Some backends need
- this hook because on their DB date fields can't be compared to values
- which include a time part.
- """
- return self.year_lookup_bounds(value)
-
- def convert_values(self, value, field):
- """Coerce the value returned by the database backend into a consistent type that
- is compatible with the field type.
- """
- internal_type = field.get_internal_type()
- if internal_type == 'DecimalField':
- return value
- elif internal_type and internal_type.endswith('IntegerField') or internal_type == 'AutoField':
- return int(value)
- elif internal_type in ('DateField', 'DateTimeField', 'TimeField'):
- return value
- # No field, or the field isn't known to be a decimal or integer
- # Default to a float
- return float(value)
-
- def check_aggregate_support(self, aggregate_func):
- """Check that the backend supports the provided aggregate
-
- This is used on specific backends to rule out known aggregates
- that are known to have faulty implementations. If the named
- aggregate function has a known problem, the backend should
- raise NotImplemented.
- """
- pass
-
- def combine_expression(self, connector, sub_expressions):
- """Combine a list of subexpressions into a single expression, using
- the provided connecting operator. This is required because operators
- can vary between backends (e.g., Oracle with %% and &) and between
- subexpression types (e.g., date expressions)
- """
- conn = ' %s ' % connector
- return conn.join(sub_expressions)
-
-class BaseDatabaseIntrospection(object):
- """
- This class encapsulates all backend-specific introspection utilities
- """
- data_types_reverse = {}
-
- def __init__(self, connection):
- self.connection = connection
-
- def get_field_type(self, data_type, description):
- """Hook for a database backend to use the cursor description to
- match a Django field type to a database column.
-
- For Oracle, the column data_type on its own is insufficient to
- distinguish between a FloatField and IntegerField, for example."""
- return self.data_types_reverse[data_type]
-
- def table_name_converter(self, name):
- """Apply a conversion to the name for the purposes of comparison.
-
- The default table name converter is for case sensitive comparison.
- """
- return name
-
- def table_names(self):
- "Returns a list of names of all tables that exist in the database."
- cursor = self.connection.cursor()
- return self.get_table_list(cursor)
-
- def django_table_names(self, only_existing=False):
- """
- Returns a list of all table names that have associated Django models and
- are in INSTALLED_APPS.
-
- If only_existing is True, the resulting list will only include the tables
- that actually exist in the database.
- """
- from django.db import models, router
- tables = set()
- for app in models.get_apps():
- for model in models.get_models(app):
- if not model._meta.managed:
- continue
- if not router.allow_syncdb(self.connection.alias, model):
- continue
- tables.add(model._meta.db_table)
- tables.update([f.m2m_db_table() for f in model._meta.local_many_to_many])
- if only_existing:
- tables = [t for t in tables if self.table_name_converter(t) in self.table_names()]
- return tables
-
- def installed_models(self, tables):
- "Returns a set of all models represented by the provided list of table names."
- from django.db import models, router
- all_models = []
- for app in models.get_apps():
- for model in models.get_models(app):
- if router.allow_syncdb(self.connection.alias, model):
- all_models.append(model)
- return set([m for m in all_models
- if self.table_name_converter(m._meta.db_table) in map(self.table_name_converter, tables)
- ])
-
- def sequence_list(self):
- "Returns a list of information about all DB sequences for all models in all apps."
- from django.db import models, router
-
- apps = models.get_apps()
- sequence_list = []
-
- for app in apps:
- for model in models.get_models(app):
- if not model._meta.managed:
- continue
- if not router.allow_syncdb(self.connection.alias, model):
- continue
- for f in model._meta.local_fields:
- if isinstance(f, models.AutoField):
- sequence_list.append({'table': model._meta.db_table, 'column': f.column})
- break # Only one AutoField is allowed per model, so don't bother continuing.
-
- for f in model._meta.local_many_to_many:
- # If this is an m2m using an intermediate table,
- # we don't need to reset the sequence.
- if f.rel.through is None:
- sequence_list.append({'table': f.m2m_db_table(), 'column': None})
-
- return sequence_list
-
-class BaseDatabaseClient(object):
- """
- This class encapsulates all backend-specific methods for opening a
- client shell.
- """
- # This should be a string representing the name of the executable
- # (e.g., "psql"). Subclasses must override this.
- executable_name = None
-
- def __init__(self, connection):
- # connection is an instance of BaseDatabaseWrapper.
- self.connection = connection
-
- def runshell(self):
- raise NotImplementedError()
-
-class BaseDatabaseValidation(object):
- """
- This class encapsualtes all backend-specific model validation.
- """
- def __init__(self, connection):
- self.connection = connection
-
- def validate_field(self, errors, opts, f):
- "By default, there is no backend-specific validation"
- pass
diff --git a/parts/django/django/db/backends/creation.py b/parts/django/django/db/backends/creation.py
deleted file mode 100644
index be9b6fc..0000000
--- a/parts/django/django/db/backends/creation.py
+++ /dev/null
@@ -1,456 +0,0 @@
-import sys
-import time
-
-from django.conf import settings
-from django.core.management import call_command
-
-# The prefix to put on the default database name when creating
-# the test database.
-TEST_DATABASE_PREFIX = 'test_'
-
-class BaseDatabaseCreation(object):
- """
- This class encapsulates all backend-specific differences that pertain to
- database *creation*, such as the column types to use for particular Django
- Fields, the SQL used to create and destroy tables, and the creation and
- destruction of test databases.
- """
- data_types = {}
-
- def __init__(self, connection):
- self.connection = connection
-
- def _digest(self, *args):
- """
- Generates a 32-bit digest of a set of arguments that can be used to
- shorten identifying names.
- """
- return '%x' % (abs(hash(args)) % 4294967296L) # 2**32
-
- def sql_create_model(self, model, style, known_models=set()):
- """
- Returns the SQL required to create a single model, as a tuple of:
- (list_of_sql, pending_references_dict)
- """
- from django.db import models
-
- opts = model._meta
- if not opts.managed or opts.proxy:
- return [], {}
- final_output = []
- table_output = []
- pending_references = {}
- qn = self.connection.ops.quote_name
- for f in opts.local_fields:
- col_type = f.db_type(connection=self.connection)
- tablespace = f.db_tablespace or opts.db_tablespace
- if col_type is None:
- # Skip ManyToManyFields, because they're not represented as
- # database columns in this table.
- continue
- # Make the definition (e.g. 'foo VARCHAR(30)') for this field.
- field_output = [style.SQL_FIELD(qn(f.column)),
- style.SQL_COLTYPE(col_type)]
- if not f.null:
- field_output.append(style.SQL_KEYWORD('NOT NULL'))
- if f.primary_key:
- field_output.append(style.SQL_KEYWORD('PRIMARY KEY'))
- elif f.unique:
- field_output.append(style.SQL_KEYWORD('UNIQUE'))
- if tablespace and f.unique:
- # We must specify the index tablespace inline, because we
- # won't be generating a CREATE INDEX statement for this field.
- field_output.append(self.connection.ops.tablespace_sql(tablespace, inline=True))
- if f.rel:
- ref_output, pending = self.sql_for_inline_foreign_key_references(f, known_models, style)
- if pending:
- pr = pending_references.setdefault(f.rel.to, []).append((model, f))
- else:
- field_output.extend(ref_output)
- table_output.append(' '.join(field_output))
- for field_constraints in opts.unique_together:
- table_output.append(style.SQL_KEYWORD('UNIQUE') + ' (%s)' % \
- ", ".join([style.SQL_FIELD(qn(opts.get_field(f).column)) for f in field_constraints]))
-
- full_statement = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + style.SQL_TABLE(qn(opts.db_table)) + ' (']
- for i, line in enumerate(table_output): # Combine and add commas.
- full_statement.append(' %s%s' % (line, i < len(table_output)-1 and ',' or ''))
- full_statement.append(')')
- if opts.db_tablespace:
- full_statement.append(self.connection.ops.tablespace_sql(opts.db_tablespace))
- full_statement.append(';')
- final_output.append('\n'.join(full_statement))
-
- if opts.has_auto_field:
- # Add any extra SQL needed to support auto-incrementing primary keys.
- auto_column = opts.auto_field.db_column or opts.auto_field.name
- autoinc_sql = self.connection.ops.autoinc_sql(opts.db_table, auto_column)
- if autoinc_sql:
- for stmt in autoinc_sql:
- final_output.append(stmt)
-
- return final_output, pending_references
-
- def sql_for_inline_foreign_key_references(self, field, known_models, style):
- "Return the SQL snippet defining the foreign key reference for a field"
- qn = self.connection.ops.quote_name
- if field.rel.to in known_models:
- output = [style.SQL_KEYWORD('REFERENCES') + ' ' + \
- style.SQL_TABLE(qn(field.rel.to._meta.db_table)) + ' (' + \
- style.SQL_FIELD(qn(field.rel.to._meta.get_field(field.rel.field_name).column)) + ')' +
- self.connection.ops.deferrable_sql()
- ]
- pending = False
- else:
- # We haven't yet created the table to which this field
- # is related, so save it for later.
- output = []
- pending = True
-
- return output, pending
-
- def sql_for_pending_references(self, model, style, pending_references):
- "Returns any ALTER TABLE statements to add constraints after the fact."
- from django.db.backends.util import truncate_name
-
- if not model._meta.managed or model._meta.proxy:
- return []
- qn = self.connection.ops.quote_name
- final_output = []
- opts = model._meta
- if model in pending_references:
- for rel_class, f in pending_references[model]:
- rel_opts = rel_class._meta
- r_table = rel_opts.db_table
- r_col = f.column
- table = opts.db_table
- col = opts.get_field(f.rel.field_name).column
- # For MySQL, r_name must be unique in the first 64 characters.
- # So we are careful with character usage here.
- r_name = '%s_refs_%s_%s' % (r_col, col, self._digest(r_table, table))
- final_output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)%s;' % \
- (qn(r_table), qn(truncate_name(r_name, self.connection.ops.max_name_length())),
- qn(r_col), qn(table), qn(col),
- self.connection.ops.deferrable_sql()))
- del pending_references[model]
- return final_output
-
- def sql_for_many_to_many(self, model, style):
- "Return the CREATE TABLE statments for all the many-to-many tables defined on a model"
- import warnings
- warnings.warn(
- 'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
- PendingDeprecationWarning
- )
-
- output = []
- for f in model._meta.local_many_to_many:
- if model._meta.managed or f.rel.to._meta.managed:
- output.extend(self.sql_for_many_to_many_field(model, f, style))
- return output
-
- def sql_for_many_to_many_field(self, model, f, style):
- "Return the CREATE TABLE statements for a single m2m field"
- import warnings
- warnings.warn(
- 'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
- PendingDeprecationWarning
- )
-
- from django.db import models
- from django.db.backends.util import truncate_name
-
- output = []
- if f.auto_created:
- opts = model._meta
- qn = self.connection.ops.quote_name
- tablespace = f.db_tablespace or opts.db_tablespace
- if tablespace:
- sql = self.connection.ops.tablespace_sql(tablespace, inline=True)
- if sql:
- tablespace_sql = ' ' + sql
- else:
- tablespace_sql = ''
- else:
- tablespace_sql = ''
- table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \
- style.SQL_TABLE(qn(f.m2m_db_table())) + ' (']
- table_output.append(' %s %s %s%s,' %
- (style.SQL_FIELD(qn('id')),
- style.SQL_COLTYPE(models.AutoField(primary_key=True).db_type(connection=self.connection)),
- style.SQL_KEYWORD('NOT NULL PRIMARY KEY'),
- tablespace_sql))
-
- deferred = []
- inline_output, deferred = self.sql_for_inline_many_to_many_references(model, f, style)
- table_output.extend(inline_output)
-
- table_output.append(' %s (%s, %s)%s' %
- (style.SQL_KEYWORD('UNIQUE'),
- style.SQL_FIELD(qn(f.m2m_column_name())),
- style.SQL_FIELD(qn(f.m2m_reverse_name())),
- tablespace_sql))
- table_output.append(')')
- if opts.db_tablespace:
- # f.db_tablespace is only for indices, so ignore its value here.
- table_output.append(self.connection.ops.tablespace_sql(opts.db_tablespace))
- table_output.append(';')
- output.append('\n'.join(table_output))
-
- for r_table, r_col, table, col in deferred:
- r_name = '%s_refs_%s_%s' % (r_col, col, self._digest(r_table, table))
- output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)%s;' %
- (qn(r_table),
- qn(truncate_name(r_name, self.connection.ops.max_name_length())),
- qn(r_col), qn(table), qn(col),
- self.connection.ops.deferrable_sql()))
-
- # Add any extra SQL needed to support auto-incrementing PKs
- autoinc_sql = self.connection.ops.autoinc_sql(f.m2m_db_table(), 'id')
- if autoinc_sql:
- for stmt in autoinc_sql:
- output.append(stmt)
- return output
-
- def sql_for_inline_many_to_many_references(self, model, field, style):
- "Create the references to other tables required by a many-to-many table"
- import warnings
- warnings.warn(
- 'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
- PendingDeprecationWarning
- )
-
- from django.db import models
- opts = model._meta
- qn = self.connection.ops.quote_name
-
- table_output = [
- ' %s %s %s %s (%s)%s,' %
- (style.SQL_FIELD(qn(field.m2m_column_name())),
- style.SQL_COLTYPE(models.ForeignKey(model).db_type(connection=self.connection)),
- style.SQL_KEYWORD('NOT NULL REFERENCES'),
- style.SQL_TABLE(qn(opts.db_table)),
- style.SQL_FIELD(qn(opts.pk.column)),
- self.connection.ops.deferrable_sql()),
- ' %s %s %s %s (%s)%s,' %
- (style.SQL_FIELD(qn(field.m2m_reverse_name())),
- style.SQL_COLTYPE(models.ForeignKey(field.rel.to).db_type(connection=self.connection)),
- style.SQL_KEYWORD('NOT NULL REFERENCES'),
- style.SQL_TABLE(qn(field.rel.to._meta.db_table)),
- style.SQL_FIELD(qn(field.rel.to._meta.pk.column)),
- self.connection.ops.deferrable_sql())
- ]
- deferred = []
-
- return table_output, deferred
-
- def sql_indexes_for_model(self, model, style):
- "Returns the CREATE INDEX SQL statements for a single model"
- if not model._meta.managed or model._meta.proxy:
- return []
- output = []
- for f in model._meta.local_fields:
- output.extend(self.sql_indexes_for_field(model, f, style))
- return output
-
- def sql_indexes_for_field(self, model, f, style):
- "Return the CREATE INDEX SQL statements for a single model field"
- from django.db.backends.util import truncate_name
-
- if f.db_index and not f.unique:
- qn = self.connection.ops.quote_name
- tablespace = f.db_tablespace or model._meta.db_tablespace
- if tablespace:
- sql = self.connection.ops.tablespace_sql(tablespace)
- if sql:
- tablespace_sql = ' ' + sql
- else:
- tablespace_sql = ''
- else:
- tablespace_sql = ''
- i_name = '%s_%s' % (model._meta.db_table, self._digest(f.column))
- output = [style.SQL_KEYWORD('CREATE INDEX') + ' ' +
- style.SQL_TABLE(qn(truncate_name(i_name, self.connection.ops.max_name_length()))) + ' ' +
- style.SQL_KEYWORD('ON') + ' ' +
- style.SQL_TABLE(qn(model._meta.db_table)) + ' ' +
- "(%s)" % style.SQL_FIELD(qn(f.column)) +
- "%s;" % tablespace_sql]
- else:
- output = []
- return output
-
- def sql_destroy_model(self, model, references_to_delete, style):
- "Return the DROP TABLE and restraint dropping statements for a single model"
- if not model._meta.managed or model._meta.proxy:
- return []
- # Drop the table now
- qn = self.connection.ops.quote_name
- output = ['%s %s;' % (style.SQL_KEYWORD('DROP TABLE'),
- style.SQL_TABLE(qn(model._meta.db_table)))]
- if model in references_to_delete:
- output.extend(self.sql_remove_table_constraints(model, references_to_delete, style))
-
- if model._meta.has_auto_field:
- ds = self.connection.ops.drop_sequence_sql(model._meta.db_table)
- if ds:
- output.append(ds)
- return output
-
- def sql_remove_table_constraints(self, model, references_to_delete, style):
- from django.db.backends.util import truncate_name
-
- if not model._meta.managed or model._meta.proxy:
- return []
- output = []
- qn = self.connection.ops.quote_name
- for rel_class, f in references_to_delete[model]:
- table = rel_class._meta.db_table
- col = f.column
- r_table = model._meta.db_table
- r_col = model._meta.get_field(f.rel.field_name).column
- r_name = '%s_refs_%s_%s' % (col, r_col, self._digest(table, r_table))
- output.append('%s %s %s %s;' % \
- (style.SQL_KEYWORD('ALTER TABLE'),
- style.SQL_TABLE(qn(table)),
- style.SQL_KEYWORD(self.connection.ops.drop_foreignkey_sql()),
- style.SQL_FIELD(qn(truncate_name(r_name, self.connection.ops.max_name_length())))))
- del references_to_delete[model]
- return output
-
- def sql_destroy_many_to_many(self, model, f, style):
- "Returns the DROP TABLE statements for a single m2m field"
- import warnings
- warnings.warn(
- 'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
- PendingDeprecationWarning
- )
-
- qn = self.connection.ops.quote_name
- output = []
- if f.auto_created:
- output.append("%s %s;" % (style.SQL_KEYWORD('DROP TABLE'),
- style.SQL_TABLE(qn(f.m2m_db_table()))))
- ds = self.connection.ops.drop_sequence_sql("%s_%s" % (model._meta.db_table, f.column))
- if ds:
- output.append(ds)
- return output
-
- def create_test_db(self, verbosity=1, autoclobber=False):
- """
- Creates a test database, prompting the user for confirmation if the
- database already exists. Returns the name of the test database created.
- """
- if verbosity >= 1:
- print "Creating test database '%s'..." % self.connection.alias
-
- test_database_name = self._create_test_db(verbosity, autoclobber)
-
- self.connection.close()
- self.connection.settings_dict["NAME"] = test_database_name
- can_rollback = self._rollback_works()
- self.connection.settings_dict["SUPPORTS_TRANSACTIONS"] = can_rollback
-
- call_command('syncdb', verbosity=verbosity, interactive=False, database=self.connection.alias)
-
- if settings.CACHE_BACKEND.startswith('db://'):
- from django.core.cache import parse_backend_uri, cache
- from django.db import router
- if router.allow_syncdb(self.connection.alias, cache.cache_model_class):
- _, cache_name, _ = parse_backend_uri(settings.CACHE_BACKEND)
- call_command('createcachetable', cache_name, database=self.connection.alias)
-
- # Get a cursor (even though we don't need one yet). This has
- # the side effect of initializing the test database.
- cursor = self.connection.cursor()
-
- return test_database_name
-
- def _create_test_db(self, verbosity, autoclobber):
- "Internal implementation - creates the test db tables."
- suffix = self.sql_table_creation_suffix()
-
- if self.connection.settings_dict['TEST_NAME']:
- test_database_name = self.connection.settings_dict['TEST_NAME']
- else:
- test_database_name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME']
-
- qn = self.connection.ops.quote_name
-
- # Create the test database and connect to it. We need to autocommit
- # if the database supports it because PostgreSQL doesn't allow
- # CREATE/DROP DATABASE statements within transactions.
- cursor = self.connection.cursor()
- self.set_autocommit()
- try:
- cursor.execute("CREATE DATABASE %s %s" % (qn(test_database_name), suffix))
- except Exception, e:
- sys.stderr.write("Got an error creating the test database: %s\n" % e)
- if not autoclobber:
- confirm = raw_input("Type 'yes' if you would like to try deleting the test database '%s', or 'no' to cancel: " % test_database_name)
- if autoclobber or confirm == 'yes':
- try:
- if verbosity >= 1:
- print "Destroying old test database..."
- cursor.execute("DROP DATABASE %s" % qn(test_database_name))
- if verbosity >= 1:
- print "Creating test database..."
- cursor.execute("CREATE DATABASE %s %s" % (qn(test_database_name), suffix))
- except Exception, e:
- sys.stderr.write("Got an error recreating the test database: %s\n" % e)
- sys.exit(2)
- else:
- print "Tests cancelled."
- sys.exit(1)
-
- return test_database_name
-
- def _rollback_works(self):
- cursor = self.connection.cursor()
- cursor.execute('CREATE TABLE ROLLBACK_TEST (X INT)')
- self.connection._commit()
- cursor.execute('INSERT INTO ROLLBACK_TEST (X) VALUES (8)')
- self.connection._rollback()
- cursor.execute('SELECT COUNT(X) FROM ROLLBACK_TEST')
- count, = cursor.fetchone()
- cursor.execute('DROP TABLE ROLLBACK_TEST')
- self.connection._commit()
- return count == 0
-
- def destroy_test_db(self, old_database_name, verbosity=1):
- """
- Destroy a test database, prompting the user for confirmation if the
- database already exists. Returns the name of the test database created.
- """
- if verbosity >= 1:
- print "Destroying test database '%s'..." % self.connection.alias
- self.connection.close()
- test_database_name = self.connection.settings_dict['NAME']
- self.connection.settings_dict['NAME'] = old_database_name
-
- self._destroy_test_db(test_database_name, verbosity)
-
- def _destroy_test_db(self, test_database_name, verbosity):
- "Internal implementation - remove the test db tables."
- # Remove the test database to clean up after
- # ourselves. Connect to the previous database (not the test database)
- # to do so, because it's not allowed to delete a database while being
- # connected to it.
- cursor = self.connection.cursor()
- self.set_autocommit()
- time.sleep(1) # To avoid "database is being accessed by other users" errors.
- cursor.execute("DROP DATABASE %s" % self.connection.ops.quote_name(test_database_name))
- self.connection.close()
-
- def set_autocommit(self):
- "Make sure a connection is in autocommit mode."
- if hasattr(self.connection.connection, "autocommit"):
- if callable(self.connection.connection.autocommit):
- self.connection.connection.autocommit(True)
- else:
- self.connection.connection.autocommit = True
- elif hasattr(self.connection.connection, "set_isolation_level"):
- self.connection.connection.set_isolation_level(0)
-
- def sql_table_creation_suffix(self):
- "SQL to append to the end of the test table creation statements"
- return ''
diff --git a/parts/django/django/db/backends/dummy/__init__.py b/parts/django/django/db/backends/dummy/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/db/backends/dummy/__init__.py
+++ /dev/null
diff --git a/parts/django/django/db/backends/dummy/base.py b/parts/django/django/db/backends/dummy/base.py
deleted file mode 100644
index 2cda04e..0000000
--- a/parts/django/django/db/backends/dummy/base.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-Dummy database backend for Django.
-
-Django uses this if the database ENGINE setting is empty (None or empty string).
-
-Each of these API functions, except connection.close(), raises
-ImproperlyConfigured.
-"""
-
-from django.core.exceptions import ImproperlyConfigured
-from django.db.backends import *
-from django.db.backends.creation import BaseDatabaseCreation
-
-def complain(*args, **kwargs):
- raise ImproperlyConfigured("You haven't set the database ENGINE setting yet.")
-
-def ignore(*args, **kwargs):
- pass
-
-class DatabaseError(Exception):
- pass
-
-class IntegrityError(DatabaseError):
- pass
-
-class DatabaseOperations(BaseDatabaseOperations):
- quote_name = complain
-
-class DatabaseClient(BaseDatabaseClient):
- runshell = complain
-
-class DatabaseIntrospection(BaseDatabaseIntrospection):
- get_table_list = complain
- get_table_description = complain
- get_relations = complain
- get_indexes = complain
-
-class DatabaseWrapper(object):
- operators = {}
- cursor = complain
- _commit = complain
- _rollback = ignore
-
- def __init__(self, settings_dict, alias, *args, **kwargs):
- self.features = BaseDatabaseFeatures()
- self.ops = DatabaseOperations()
- self.client = DatabaseClient(self)
- self.creation = BaseDatabaseCreation(self)
- self.introspection = DatabaseIntrospection(self)
- self.validation = BaseDatabaseValidation(self)
-
- self.settings_dict = settings_dict
- self.alias = alias
-
- def close(self):
- pass
diff --git a/parts/django/django/db/backends/mysql/__init__.py b/parts/django/django/db/backends/mysql/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/db/backends/mysql/__init__.py
+++ /dev/null
diff --git a/parts/django/django/db/backends/mysql/base.py b/parts/django/django/db/backends/mysql/base.py
deleted file mode 100644
index a39c41f..0000000
--- a/parts/django/django/db/backends/mysql/base.py
+++ /dev/null
@@ -1,318 +0,0 @@
-"""
-MySQL database backend for Django.
-
-Requires MySQLdb: http://sourceforge.net/projects/mysql-python
-"""
-
-import re
-import sys
-
-try:
- import MySQLdb as Database
-except ImportError, e:
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
-
-# We want version (1, 2, 1, 'final', 2) or later. We can't just use
-# lexicographic ordering in this check because then (1, 2, 1, 'gamma')
-# inadvertently passes the version test.
-version = Database.version_info
-if (version < (1,2,1) or (version[:3] == (1, 2, 1) and
- (len(version) < 5 or version[3] != 'final' or version[4] < 2))):
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("MySQLdb-1.2.1p2 or newer is required; you have %s" % Database.__version__)
-
-from MySQLdb.converters import conversions
-from MySQLdb.constants import FIELD_TYPE, FLAG, CLIENT
-
-from django.db import utils
-from django.db.backends import *
-from django.db.backends.signals import connection_created
-from django.db.backends.mysql.client import DatabaseClient
-from django.db.backends.mysql.creation import DatabaseCreation
-from django.db.backends.mysql.introspection import DatabaseIntrospection
-from django.db.backends.mysql.validation import DatabaseValidation
-from django.utils.safestring import SafeString, SafeUnicode
-
-# Raise exceptions for database warnings if DEBUG is on
-from django.conf import settings
-if settings.DEBUG:
- from warnings import filterwarnings
- filterwarnings("error", category=Database.Warning)
-
-DatabaseError = Database.DatabaseError
-IntegrityError = Database.IntegrityError
-
-# MySQLdb-1.2.1 returns TIME columns as timedelta -- they are more like
-# timedelta in terms of actual behavior as they are signed and include days --
-# and Django expects time, so we still need to override that. We also need to
-# add special handling for SafeUnicode and SafeString as MySQLdb's type
-# checking is too tight to catch those (see Django ticket #6052).
-django_conversions = conversions.copy()
-django_conversions.update({
- FIELD_TYPE.TIME: util.typecast_time,
- FIELD_TYPE.DECIMAL: util.typecast_decimal,
- FIELD_TYPE.NEWDECIMAL: util.typecast_decimal,
-})
-
-# This should match the numerical portion of the version numbers (we can treat
-# versions like 5.0.24 and 5.0.24a as the same). Based on the list of version
-# at http://dev.mysql.com/doc/refman/4.1/en/news.html and
-# http://dev.mysql.com/doc/refman/5.0/en/news.html .
-server_version_re = re.compile(r'(\d{1,2})\.(\d{1,2})\.(\d{1,2})')
-
-# MySQLdb-1.2.1 and newer automatically makes use of SHOW WARNINGS on
-# MySQL-4.1 and newer, so the MysqlDebugWrapper is unnecessary. Since the
-# point is to raise Warnings as exceptions, this can be done with the Python
-# warning module, and this is setup when the connection is created, and the
-# standard util.CursorDebugWrapper can be used. Also, using sql_mode
-# TRADITIONAL will automatically cause most warnings to be treated as errors.
-
-class CursorWrapper(object):
- """
- A thin wrapper around MySQLdb's normal cursor class so that we can catch
- particular exception instances and reraise them with the right types.
-
- Implemented as a wrapper, rather than a subclass, so that we aren't stuck
- to the particular underlying representation returned by Connection.cursor().
- """
- codes_for_integrityerror = (1048,)
-
- def __init__(self, cursor):
- self.cursor = cursor
-
- def execute(self, query, args=None):
- try:
- return self.cursor.execute(query, args)
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.OperationalError, e:
- # Map some error codes to IntegrityError, since they seem to be
- # misclassified and Django would prefer the more logical place.
- if e[0] in self.codes_for_integrityerror:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- raise
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def executemany(self, query, args):
- try:
- return self.cursor.executemany(query, args)
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.OperationalError, e:
- # Map some error codes to IntegrityError, since they seem to be
- # misclassified and Django would prefer the more logical place.
- if e[0] in self.codes_for_integrityerror:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- raise
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def __getattr__(self, attr):
- if attr in self.__dict__:
- return self.__dict__[attr]
- else:
- return getattr(self.cursor, attr)
-
- def __iter__(self):
- return iter(self.cursor)
-
-class DatabaseFeatures(BaseDatabaseFeatures):
- empty_fetchmany_value = ()
- update_can_self_select = False
- allows_group_by_pk = True
- related_fields_match_type = True
- allow_sliced_subqueries = False
-
-class DatabaseOperations(BaseDatabaseOperations):
- compiler_module = "django.db.backends.mysql.compiler"
-
- def date_extract_sql(self, lookup_type, field_name):
- # http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
- if lookup_type == 'week_day':
- # DAYOFWEEK() returns an integer, 1-7, Sunday=1.
- # Note: WEEKDAY() returns 0-6, Monday=0.
- return "DAYOFWEEK(%s)" % field_name
- else:
- return "EXTRACT(%s FROM %s)" % (lookup_type.upper(), field_name)
-
- def date_trunc_sql(self, lookup_type, field_name):
- fields = ['year', 'month', 'day', 'hour', 'minute', 'second']
- format = ('%%Y-', '%%m', '-%%d', ' %%H:', '%%i', ':%%s') # Use double percents to escape.
- format_def = ('0000-', '01', '-01', ' 00:', '00', ':00')
- try:
- i = fields.index(lookup_type) + 1
- except ValueError:
- sql = field_name
- else:
- format_str = ''.join([f for f in format[:i]] + [f for f in format_def[i:]])
- sql = "CAST(DATE_FORMAT(%s, '%s') AS DATETIME)" % (field_name, format_str)
- return sql
-
- def drop_foreignkey_sql(self):
- return "DROP FOREIGN KEY"
-
- def force_no_ordering(self):
- """
- "ORDER BY NULL" prevents MySQL from implicitly ordering by grouped
- columns. If no ordering would otherwise be applied, we don't want any
- implicit sorting going on.
- """
- return ["NULL"]
-
- def fulltext_search_sql(self, field_name):
- return 'MATCH (%s) AGAINST (%%s IN BOOLEAN MODE)' % field_name
-
- def no_limit_value(self):
- # 2**64 - 1, as recommended by the MySQL documentation
- return 18446744073709551615L
-
- def quote_name(self, name):
- if name.startswith("`") and name.endswith("`"):
- return name # Quoting once is enough.
- return "`%s`" % name
-
- def random_function_sql(self):
- return 'RAND()'
-
- def sql_flush(self, style, tables, sequences):
- # NB: The generated SQL below is specific to MySQL
- # 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements
- # to clear all tables of all data
- if tables:
- sql = ['SET FOREIGN_KEY_CHECKS = 0;']
- for table in tables:
- sql.append('%s %s;' % (style.SQL_KEYWORD('TRUNCATE'), style.SQL_FIELD(self.quote_name(table))))
- sql.append('SET FOREIGN_KEY_CHECKS = 1;')
-
- # 'ALTER TABLE table AUTO_INCREMENT = 1;'... style SQL statements
- # to reset sequence indices
- sql.extend(["%s %s %s %s %s;" % \
- (style.SQL_KEYWORD('ALTER'),
- style.SQL_KEYWORD('TABLE'),
- style.SQL_TABLE(self.quote_name(sequence['table'])),
- style.SQL_KEYWORD('AUTO_INCREMENT'),
- style.SQL_FIELD('= 1'),
- ) for sequence in sequences])
- return sql
- else:
- return []
-
- def value_to_db_datetime(self, value):
- if value is None:
- return None
-
- # MySQL doesn't support tz-aware datetimes
- if value.tzinfo is not None:
- raise ValueError("MySQL backend does not support timezone-aware datetimes.")
-
- # MySQL doesn't support microseconds
- return unicode(value.replace(microsecond=0))
-
- def value_to_db_time(self, value):
- if value is None:
- return None
-
- # MySQL doesn't support tz-aware datetimes
- if value.tzinfo is not None:
- raise ValueError("MySQL backend does not support timezone-aware datetimes.")
-
- # MySQL doesn't support microseconds
- return unicode(value.replace(microsecond=0))
-
- def year_lookup_bounds(self, value):
- # Again, no microseconds
- first = '%s-01-01 00:00:00'
- second = '%s-12-31 23:59:59.99'
- return [first % value, second % value]
-
- def max_name_length(self):
- return 64
-
-class DatabaseWrapper(BaseDatabaseWrapper):
-
- operators = {
- 'exact': '= %s',
- 'iexact': 'LIKE %s',
- 'contains': 'LIKE BINARY %s',
- 'icontains': 'LIKE %s',
- 'regex': 'REGEXP BINARY %s',
- 'iregex': 'REGEXP %s',
- 'gt': '> %s',
- 'gte': '>= %s',
- 'lt': '< %s',
- 'lte': '<= %s',
- 'startswith': 'LIKE BINARY %s',
- 'endswith': 'LIKE BINARY %s',
- 'istartswith': 'LIKE %s',
- 'iendswith': 'LIKE %s',
- }
-
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
-
- self.server_version = None
- self.features = DatabaseFeatures()
- self.ops = DatabaseOperations()
- self.client = DatabaseClient(self)
- self.creation = DatabaseCreation(self)
- self.introspection = DatabaseIntrospection(self)
- self.validation = DatabaseValidation(self)
-
- def _valid_connection(self):
- if self.connection is not None:
- try:
- self.connection.ping()
- return True
- except DatabaseError:
- self.connection.close()
- self.connection = None
- return False
-
- def _cursor(self):
- if not self._valid_connection():
- kwargs = {
- 'conv': django_conversions,
- 'charset': 'utf8',
- 'use_unicode': True,
- }
- settings_dict = self.settings_dict
- if settings_dict['USER']:
- kwargs['user'] = settings_dict['USER']
- if settings_dict['NAME']:
- kwargs['db'] = settings_dict['NAME']
- if settings_dict['PASSWORD']:
- kwargs['passwd'] = settings_dict['PASSWORD']
- if settings_dict['HOST'].startswith('/'):
- kwargs['unix_socket'] = settings_dict['HOST']
- elif settings_dict['HOST']:
- kwargs['host'] = settings_dict['HOST']
- if settings_dict['PORT']:
- kwargs['port'] = int(settings_dict['PORT'])
- # We need the number of potentially affected rows after an
- # "UPDATE", not the number of changed rows.
- kwargs['client_flag'] = CLIENT.FOUND_ROWS
- kwargs.update(settings_dict['OPTIONS'])
- self.connection = Database.connect(**kwargs)
- self.connection.encoders[SafeUnicode] = self.connection.encoders[unicode]
- self.connection.encoders[SafeString] = self.connection.encoders[str]
- connection_created.send(sender=self.__class__, connection=self)
- cursor = CursorWrapper(self.connection.cursor())
- return cursor
-
- def _rollback(self):
- try:
- BaseDatabaseWrapper._rollback(self)
- except Database.NotSupportedError:
- pass
-
- def get_server_version(self):
- if not self.server_version:
- if not self._valid_connection():
- self.cursor()
- m = server_version_re.match(self.connection.get_server_info())
- if not m:
- raise Exception('Unable to determine MySQL version from version string %r' % self.connection.get_server_info())
- self.server_version = tuple([int(x) for x in m.groups()])
- return self.server_version
diff --git a/parts/django/django/db/backends/mysql/client.py b/parts/django/django/db/backends/mysql/client.py
deleted file mode 100644
index 24dc642..0000000
--- a/parts/django/django/db/backends/mysql/client.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import os
-import sys
-
-from django.db.backends import BaseDatabaseClient
-
-class DatabaseClient(BaseDatabaseClient):
- executable_name = 'mysql'
-
- def runshell(self):
- settings_dict = self.connection.settings_dict
- args = [self.executable_name]
- db = settings_dict['OPTIONS'].get('db', settings_dict['NAME'])
- user = settings_dict['OPTIONS'].get('user', settings_dict['USER'])
- passwd = settings_dict['OPTIONS'].get('passwd', settings_dict['PASSWORD'])
- host = settings_dict['OPTIONS'].get('host', settings_dict['HOST'])
- port = settings_dict['OPTIONS'].get('port', settings_dict['PORT'])
- defaults_file = settings_dict['OPTIONS'].get('read_default_file')
- # Seems to be no good way to set sql_mode with CLI.
-
- if defaults_file:
- args += ["--defaults-file=%s" % defaults_file]
- if user:
- args += ["--user=%s" % user]
- if passwd:
- args += ["--password=%s" % passwd]
- if host:
- if '/' in host:
- args += ["--socket=%s" % host]
- else:
- args += ["--host=%s" % host]
- if port:
- args += ["--port=%s" % port]
- if db:
- args += [db]
-
- if os.name == 'nt':
- sys.exit(os.system(" ".join(args)))
- else:
- os.execvp(self.executable_name, args)
-
diff --git a/parts/django/django/db/backends/mysql/compiler.py b/parts/django/django/db/backends/mysql/compiler.py
deleted file mode 100644
index bd4105f..0000000
--- a/parts/django/django/db/backends/mysql/compiler.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from django.db.models.sql import compiler
-
-class SQLCompiler(compiler.SQLCompiler):
- def resolve_columns(self, row, fields=()):
- values = []
- index_extra_select = len(self.query.extra_select.keys())
- for value, field in map(None, row[index_extra_select:], fields):
- if (field and field.get_internal_type() in ("BooleanField", "NullBooleanField") and
- value in (0, 1)):
- value = bool(value)
- values.append(value)
- return row[:index_extra_select] + tuple(values)
-
-class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
- pass
-
-class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler):
- pass
-
-class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler):
- pass
-
-class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler):
- pass
-
-class SQLDateCompiler(compiler.SQLDateCompiler, SQLCompiler):
- pass
diff --git a/parts/django/django/db/backends/mysql/creation.py b/parts/django/django/db/backends/mysql/creation.py
deleted file mode 100644
index 8b026a9..0000000
--- a/parts/django/django/db/backends/mysql/creation.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from django.db.backends.creation import BaseDatabaseCreation
-
-class DatabaseCreation(BaseDatabaseCreation):
- # This dictionary maps Field objects to their associated MySQL column
- # types, as strings. Column-type strings can contain format strings; they'll
- # be interpolated against the values of Field.__dict__ before being output.
- # If a column type is set to None, it won't be included in the output.
- data_types = {
- 'AutoField': 'integer AUTO_INCREMENT',
- 'BooleanField': 'bool',
- 'CharField': 'varchar(%(max_length)s)',
- 'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
- 'DateField': 'date',
- 'DateTimeField': 'datetime',
- 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
- 'FileField': 'varchar(%(max_length)s)',
- 'FilePathField': 'varchar(%(max_length)s)',
- 'FloatField': 'double precision',
- 'IntegerField': 'integer',
- 'BigIntegerField': 'bigint',
- 'IPAddressField': 'char(15)',
- 'NullBooleanField': 'bool',
- 'OneToOneField': 'integer',
- 'PositiveIntegerField': 'integer UNSIGNED',
- 'PositiveSmallIntegerField': 'smallint UNSIGNED',
- 'SlugField': 'varchar(%(max_length)s)',
- 'SmallIntegerField': 'smallint',
- 'TextField': 'longtext',
- 'TimeField': 'time',
- }
-
- def sql_table_creation_suffix(self):
- suffix = []
- if self.connection.settings_dict['TEST_CHARSET']:
- suffix.append('CHARACTER SET %s' % self.connection.settings_dict['TEST_CHARSET'])
- if self.connection.settings_dict['TEST_COLLATION']:
- suffix.append('COLLATE %s' % self.connection.settings_dict['TEST_COLLATION'])
- return ' '.join(suffix)
-
- def sql_for_inline_foreign_key_references(self, field, known_models, style):
- "All inline references are pending under MySQL"
- return [], True
-
- def sql_for_inline_many_to_many_references(self, model, field, style):
- from django.db import models
- opts = model._meta
- qn = self.connection.ops.quote_name
-
- table_output = [
- ' %s %s %s,' %
- (style.SQL_FIELD(qn(field.m2m_column_name())),
- style.SQL_COLTYPE(models.ForeignKey(model).db_type(connection=self.connection)),
- style.SQL_KEYWORD('NOT NULL')),
- ' %s %s %s,' %
- (style.SQL_FIELD(qn(field.m2m_reverse_name())),
- style.SQL_COLTYPE(models.ForeignKey(field.rel.to).db_type(connection=self.connection)),
- style.SQL_KEYWORD('NOT NULL'))
- ]
- deferred = [
- (field.m2m_db_table(), field.m2m_column_name(), opts.db_table,
- opts.pk.column),
- (field.m2m_db_table(), field.m2m_reverse_name(),
- field.rel.to._meta.db_table, field.rel.to._meta.pk.column)
- ]
- return table_output, deferred
diff --git a/parts/django/django/db/backends/mysql/introspection.py b/parts/django/django/db/backends/mysql/introspection.py
deleted file mode 100644
index 9e1518b..0000000
--- a/parts/django/django/db/backends/mysql/introspection.py
+++ /dev/null
@@ -1,98 +0,0 @@
-from django.db.backends import BaseDatabaseIntrospection
-from MySQLdb import ProgrammingError, OperationalError
-from MySQLdb.constants import FIELD_TYPE
-import re
-
-foreign_key_re = re.compile(r"\sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REFERENCES `([^`]*)` \(`([^`]*)`\)")
-
-class DatabaseIntrospection(BaseDatabaseIntrospection):
- data_types_reverse = {
- FIELD_TYPE.BLOB: 'TextField',
- FIELD_TYPE.CHAR: 'CharField',
- FIELD_TYPE.DECIMAL: 'DecimalField',
- FIELD_TYPE.NEWDECIMAL: 'DecimalField',
- FIELD_TYPE.DATE: 'DateField',
- FIELD_TYPE.DATETIME: 'DateTimeField',
- FIELD_TYPE.DOUBLE: 'FloatField',
- FIELD_TYPE.FLOAT: 'FloatField',
- FIELD_TYPE.INT24: 'IntegerField',
- FIELD_TYPE.LONG: 'IntegerField',
- FIELD_TYPE.LONGLONG: 'BigIntegerField',
- FIELD_TYPE.SHORT: 'IntegerField',
- FIELD_TYPE.STRING: 'CharField',
- FIELD_TYPE.TIMESTAMP: 'DateTimeField',
- FIELD_TYPE.TINY: 'IntegerField',
- FIELD_TYPE.TINY_BLOB: 'TextField',
- FIELD_TYPE.MEDIUM_BLOB: 'TextField',
- FIELD_TYPE.LONG_BLOB: 'TextField',
- FIELD_TYPE.VAR_STRING: 'CharField',
- }
-
- def get_table_list(self, cursor):
- "Returns a list of table names in the current database."
- cursor.execute("SHOW TABLES")
- return [row[0] for row in cursor.fetchall()]
-
- def get_table_description(self, cursor, table_name):
- "Returns a description of the table, with the DB-API cursor.description interface."
- cursor.execute("SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name))
- return cursor.description
-
- def _name_to_index(self, cursor, table_name):
- """
- Returns a dictionary of {field_name: field_index} for the given table.
- Indexes are 0-based.
- """
- return dict([(d[0], i) for i, d in enumerate(self.get_table_description(cursor, table_name))])
-
- def get_relations(self, cursor, table_name):
- """
- Returns a dictionary of {field_index: (field_index_other_table, other_table)}
- representing all relationships to the given table. Indexes are 0-based.
- """
- my_field_dict = self._name_to_index(cursor, table_name)
- constraints = []
- relations = {}
- try:
- # This should work for MySQL 5.0.
- cursor.execute("""
- SELECT column_name, referenced_table_name, referenced_column_name
- FROM information_schema.key_column_usage
- WHERE table_name = %s
- AND table_schema = DATABASE()
- AND referenced_table_name IS NOT NULL
- AND referenced_column_name IS NOT NULL""", [table_name])
- constraints.extend(cursor.fetchall())
- except (ProgrammingError, OperationalError):
- # Fall back to "SHOW CREATE TABLE", for previous MySQL versions.
- # Go through all constraints and save the equal matches.
- cursor.execute("SHOW CREATE TABLE %s" % self.connection.ops.quote_name(table_name))
- for row in cursor.fetchall():
- pos = 0
- while True:
- match = foreign_key_re.search(row[1], pos)
- if match == None:
- break
- pos = match.end()
- constraints.append(match.groups())
-
- for my_fieldname, other_table, other_field in constraints:
- other_field_index = self._name_to_index(cursor, other_table)[other_field]
- my_field_index = my_field_dict[my_fieldname]
- relations[my_field_index] = (other_field_index, other_table)
-
- return relations
-
- def get_indexes(self, cursor, table_name):
- """
- Returns a dictionary of fieldname -> infodict for the given table,
- where each infodict is in the format:
- {'primary_key': boolean representing whether it's the primary key,
- 'unique': boolean representing whether it's a unique index}
- """
- cursor.execute("SHOW INDEX FROM %s" % self.connection.ops.quote_name(table_name))
- indexes = {}
- for row in cursor.fetchall():
- indexes[row[4]] = {'primary_key': (row[2] == 'PRIMARY'), 'unique': not bool(row[1])}
- return indexes
-
diff --git a/parts/django/django/db/backends/mysql/validation.py b/parts/django/django/db/backends/mysql/validation.py
deleted file mode 100644
index 197f913..0000000
--- a/parts/django/django/db/backends/mysql/validation.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from django.db.backends import BaseDatabaseValidation
-
-class DatabaseValidation(BaseDatabaseValidation):
- def validate_field(self, errors, opts, f):
- """
- There are some field length restrictions for MySQL:
-
- - Prior to version 5.0.3, character fields could not exceed 255
- characters in length.
- - No character (varchar) fields can have a length exceeding 255
- characters if they have a unique index on them.
- """
- from django.db import models
- db_version = self.connection.get_server_version()
- varchar_fields = (models.CharField, models.CommaSeparatedIntegerField,
- models.SlugField)
- if isinstance(f, varchar_fields) and f.max_length > 255:
- if db_version < (5, 0, 3):
- msg = '"%(name)s": %(cls)s cannot have a "max_length" greater than 255 when you are using a version of MySQL prior to 5.0.3 (you are using %(version)s).'
- elif f.unique == True:
- msg = '"%(name)s": %(cls)s cannot have a "max_length" greater than 255 when using "unique=True".'
- else:
- msg = None
-
- if msg:
- errors.add(opts, msg % {'name': f.name, 'cls': f.__class__.__name__, 'version': '.'.join([str(n) for n in db_version[:3]])})
diff --git a/parts/django/django/db/backends/oracle/__init__.py b/parts/django/django/db/backends/oracle/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/db/backends/oracle/__init__.py
+++ /dev/null
diff --git a/parts/django/django/db/backends/oracle/base.py b/parts/django/django/db/backends/oracle/base.py
deleted file mode 100644
index 1387e60..0000000
--- a/parts/django/django/db/backends/oracle/base.py
+++ /dev/null
@@ -1,711 +0,0 @@
-"""
-Oracle database backend for Django.
-
-Requires cx_Oracle: http://cx-oracle.sourceforge.net/
-"""
-
-
-import datetime
-import sys
-import time
-from decimal import Decimal
-
-
-def _setup_environment(environ):
- import platform
- # Cygwin requires some special voodoo to set the environment variables
- # properly so that Oracle will see them.
- if platform.system().upper().startswith('CYGWIN'):
- try:
- import ctypes
- except ImportError, e:
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("Error loading ctypes: %s; "
- "the Oracle backend requires ctypes to "
- "operate correctly under Cygwin." % e)
- kernel32 = ctypes.CDLL('kernel32')
- for name, value in environ:
- kernel32.SetEnvironmentVariableA(name, value)
- else:
- import os
- os.environ.update(environ)
-
-_setup_environment([
- # Oracle takes client-side character set encoding from the environment.
- ('NLS_LANG', '.UTF8'),
- # This prevents unicode from getting mangled by getting encoded into the
- # potentially non-unicode database character set.
- ('ORA_NCHAR_LITERAL_REPLACE', 'TRUE'),
-])
-
-
-try:
- import cx_Oracle as Database
-except ImportError, e:
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("Error loading cx_Oracle module: %s" % e)
-
-from django.db import utils
-from django.db.backends import *
-from django.db.backends.signals import connection_created
-from django.db.backends.oracle.client import DatabaseClient
-from django.db.backends.oracle.creation import DatabaseCreation
-from django.db.backends.oracle.introspection import DatabaseIntrospection
-from django.utils.encoding import smart_str, force_unicode
-
-DatabaseError = Database.DatabaseError
-IntegrityError = Database.IntegrityError
-
-
-# Check whether cx_Oracle was compiled with the WITH_UNICODE option. This will
-# also be True in Python 3.0.
-if int(Database.version.split('.', 1)[0]) >= 5 and not hasattr(Database, 'UNICODE'):
- convert_unicode = force_unicode
-else:
- convert_unicode = smart_str
-
-
-class DatabaseFeatures(BaseDatabaseFeatures):
- empty_fetchmany_value = ()
- needs_datetime_string_cast = False
- interprets_empty_strings_as_nulls = True
- uses_savepoints = True
- can_return_id_from_insert = True
- allow_sliced_subqueries = False
-
-
-class DatabaseOperations(BaseDatabaseOperations):
- compiler_module = "django.db.backends.oracle.compiler"
-
- def autoinc_sql(self, table, column):
- # To simulate auto-incrementing primary keys in Oracle, we have to
- # create a sequence and a trigger.
- sq_name = get_sequence_name(table)
- tr_name = get_trigger_name(table)
- tbl_name = self.quote_name(table)
- col_name = self.quote_name(column)
- sequence_sql = """
-DECLARE
- i INTEGER;
-BEGIN
- SELECT COUNT(*) INTO i FROM USER_CATALOG
- WHERE TABLE_NAME = '%(sq_name)s' AND TABLE_TYPE = 'SEQUENCE';
- IF i = 0 THEN
- EXECUTE IMMEDIATE 'CREATE SEQUENCE "%(sq_name)s"';
- END IF;
-END;
-/""" % locals()
- trigger_sql = """
-CREATE OR REPLACE TRIGGER "%(tr_name)s"
-BEFORE INSERT ON %(tbl_name)s
-FOR EACH ROW
-WHEN (new.%(col_name)s IS NULL)
- BEGIN
- SELECT "%(sq_name)s".nextval
- INTO :new.%(col_name)s FROM dual;
- END;
-/""" % locals()
- return sequence_sql, trigger_sql
-
- def date_extract_sql(self, lookup_type, field_name):
- # http://download-east.oracle.com/docs/cd/B10501_01/server.920/a96540/functions42a.htm#1017163
- if lookup_type == 'week_day':
- # TO_CHAR(field, 'D') returns an integer from 1-7, where 1=Sunday.
- return "TO_CHAR(%s, 'D')" % field_name
- else:
- return "EXTRACT(%s FROM %s)" % (lookup_type, field_name)
-
- def date_trunc_sql(self, lookup_type, field_name):
- # Oracle uses TRUNC() for both dates and numbers.
- # http://download-east.oracle.com/docs/cd/B10501_01/server.920/a96540/functions155a.htm#SQLRF06151
- if lookup_type == 'day':
- sql = 'TRUNC(%s)' % field_name
- else:
- sql = "TRUNC(%s, '%s')" % (field_name, lookup_type)
- return sql
-
- def convert_values(self, value, field):
- if isinstance(value, Database.LOB):
- value = value.read()
- if field and field.get_internal_type() == 'TextField':
- value = force_unicode(value)
-
- # Oracle stores empty strings as null. We need to undo this in
- # order to adhere to the Django convention of using the empty
- # string instead of null, but only if the field accepts the
- # empty string.
- if value is None and field and field.empty_strings_allowed:
- value = u''
- # Convert 1 or 0 to True or False
- elif value in (1, 0) and field and field.get_internal_type() in ('BooleanField', 'NullBooleanField'):
- value = bool(value)
- # Force floats to the correct type
- elif value is not None and field and field.get_internal_type() == 'FloatField':
- value = float(value)
- # Convert floats to decimals
- elif value is not None and field and field.get_internal_type() == 'DecimalField':
- value = util.typecast_decimal(field.format_number(value))
- # cx_Oracle always returns datetime.datetime objects for
- # DATE and TIMESTAMP columns, but Django wants to see a
- # python datetime.date, .time, or .datetime. We use the type
- # of the Field to determine which to cast to, but it's not
- # always available.
- # As a workaround, we cast to date if all the time-related
- # values are 0, or to time if the date is 1/1/1900.
- # This could be cleaned a bit by adding a method to the Field
- # classes to normalize values from the database (the to_python
- # method is used for validation and isn't what we want here).
- elif isinstance(value, Database.Timestamp):
- # In Python 2.3, the cx_Oracle driver returns its own
- # Timestamp object that we must convert to a datetime class.
- if not isinstance(value, datetime.datetime):
- value = datetime.datetime(value.year, value.month,
- value.day, value.hour, value.minute, value.second,
- value.fsecond)
- if field and field.get_internal_type() == 'DateTimeField':
- pass
- elif field and field.get_internal_type() == 'DateField':
- value = value.date()
- elif field and field.get_internal_type() == 'TimeField' or (value.year == 1900 and value.month == value.day == 1):
- value = value.time()
- elif value.hour == value.minute == value.second == value.microsecond == 0:
- value = value.date()
- return value
-
- def datetime_cast_sql(self):
- return "TO_TIMESTAMP(%s, 'YYYY-MM-DD HH24:MI:SS.FF')"
-
- def deferrable_sql(self):
- return " DEFERRABLE INITIALLY DEFERRED"
-
- def drop_sequence_sql(self, table):
- return "DROP SEQUENCE %s;" % self.quote_name(get_sequence_name(table))
-
- def fetch_returned_insert_id(self, cursor):
- return long(cursor._insert_id_var.getvalue())
-
- def field_cast_sql(self, db_type):
- if db_type and db_type.endswith('LOB'):
- return "DBMS_LOB.SUBSTR(%s)"
- else:
- return "%s"
-
- def last_insert_id(self, cursor, table_name, pk_name):
- sq_name = get_sequence_name(table_name)
- cursor.execute('SELECT "%s".currval FROM dual' % sq_name)
- return cursor.fetchone()[0]
-
- def lookup_cast(self, lookup_type):
- if lookup_type in ('iexact', 'icontains', 'istartswith', 'iendswith'):
- return "UPPER(%s)"
- return "%s"
-
- def max_in_list_size(self):
- return 1000
-
- def max_name_length(self):
- return 30
-
- def prep_for_iexact_query(self, x):
- return x
-
- def process_clob(self, value):
- if value is None:
- return u''
- return force_unicode(value.read())
-
- def quote_name(self, name):
- # SQL92 requires delimited (quoted) names to be case-sensitive. When
- # not quoted, Oracle has case-insensitive behavior for identifiers, but
- # always defaults to uppercase.
- # We simplify things by making Oracle identifiers always uppercase.
- if not name.startswith('"') and not name.endswith('"'):
- name = '"%s"' % util.truncate_name(name.upper(),
- self.max_name_length())
- return name.upper()
-
- def random_function_sql(self):
- return "DBMS_RANDOM.RANDOM"
-
- def regex_lookup_9(self, lookup_type):
- raise NotImplementedError("Regexes are not supported in Oracle before version 10g.")
-
- def regex_lookup_10(self, lookup_type):
- if lookup_type == 'regex':
- match_option = "'c'"
- else:
- match_option = "'i'"
- return 'REGEXP_LIKE(%%s, %%s, %s)' % match_option
-
- def regex_lookup(self, lookup_type):
- # If regex_lookup is called before it's been initialized, then create
- # a cursor to initialize it and recur.
- from django.db import connection
- connection.cursor()
- return connection.ops.regex_lookup(lookup_type)
-
- def return_insert_id(self):
- return "RETURNING %s INTO %%s", (InsertIdVar(),)
-
- def savepoint_create_sql(self, sid):
- return convert_unicode("SAVEPOINT " + self.quote_name(sid))
-
- def savepoint_rollback_sql(self, sid):
- return convert_unicode("ROLLBACK TO SAVEPOINT " + self.quote_name(sid))
-
- def sql_flush(self, style, tables, sequences):
- # Return a list of 'TRUNCATE x;', 'TRUNCATE y;',
- # 'TRUNCATE z;'... style SQL statements
- if tables:
- # Oracle does support TRUNCATE, but it seems to get us into
- # FK referential trouble, whereas DELETE FROM table works.
- sql = ['%s %s %s;' % \
- (style.SQL_KEYWORD('DELETE'),
- style.SQL_KEYWORD('FROM'),
- style.SQL_FIELD(self.quote_name(table)))
- for table in tables]
- # Since we've just deleted all the rows, running our sequence
- # ALTER code will reset the sequence to 0.
- for sequence_info in sequences:
- sequence_name = get_sequence_name(sequence_info['table'])
- table_name = self.quote_name(sequence_info['table'])
- column_name = self.quote_name(sequence_info['column'] or 'id')
- query = _get_sequence_reset_sql() % {'sequence': sequence_name,
- 'table': table_name,
- 'column': column_name}
- sql.append(query)
- return sql
- else:
- return []
-
- def sequence_reset_sql(self, style, model_list):
- from django.db import models
- output = []
- query = _get_sequence_reset_sql()
- for model in model_list:
- for f in model._meta.local_fields:
- if isinstance(f, models.AutoField):
- table_name = self.quote_name(model._meta.db_table)
- sequence_name = get_sequence_name(model._meta.db_table)
- column_name = self.quote_name(f.column)
- output.append(query % {'sequence': sequence_name,
- 'table': table_name,
- 'column': column_name})
- # Only one AutoField is allowed per model, so don't
- # continue to loop
- break
- for f in model._meta.many_to_many:
- if not f.rel.through:
- table_name = self.quote_name(f.m2m_db_table())
- sequence_name = get_sequence_name(f.m2m_db_table())
- column_name = self.quote_name('id')
- output.append(query % {'sequence': sequence_name,
- 'table': table_name,
- 'column': column_name})
- return output
-
- def start_transaction_sql(self):
- return ''
-
- def tablespace_sql(self, tablespace, inline=False):
- return "%sTABLESPACE %s" % ((inline and "USING INDEX " or ""),
- self.quote_name(tablespace))
-
- def value_to_db_time(self, value):
- if value is None:
- return None
- if isinstance(value, basestring):
- return datetime.datetime(*(time.strptime(value, '%H:%M:%S')[:6]))
- return datetime.datetime(1900, 1, 1, value.hour, value.minute,
- value.second, value.microsecond)
-
- def year_lookup_bounds_for_date_field(self, value):
- first = '%s-01-01'
- second = '%s-12-31'
- return [first % value, second % value]
-
- def combine_expression(self, connector, sub_expressions):
- "Oracle requires special cases for %% and & operators in query expressions"
- if connector == '%%':
- return 'MOD(%s)' % ','.join(sub_expressions)
- elif connector == '&':
- return 'BITAND(%s)' % ','.join(sub_expressions)
- elif connector == '|':
- raise NotImplementedError("Bit-wise or is not supported in Oracle.")
- return super(DatabaseOperations, self).combine_expression(connector, sub_expressions)
-
-
-class DatabaseWrapper(BaseDatabaseWrapper):
-
- operators = {
- 'exact': '= %s',
- 'iexact': '= UPPER(%s)',
- 'contains': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
- 'icontains': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
- 'gt': '> %s',
- 'gte': '>= %s',
- 'lt': '< %s',
- 'lte': '<= %s',
- 'startswith': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
- 'endswith': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
- 'istartswith': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
- 'iendswith': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
- }
-
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
-
- self.oracle_version = None
- self.features = DatabaseFeatures()
- self.ops = DatabaseOperations()
- self.client = DatabaseClient(self)
- self.creation = DatabaseCreation(self)
- self.introspection = DatabaseIntrospection(self)
- self.validation = BaseDatabaseValidation(self)
-
- def _valid_connection(self):
- return self.connection is not None
-
- def _connect_string(self):
- settings_dict = self.settings_dict
- if not settings_dict['HOST'].strip():
- settings_dict['HOST'] = 'localhost'
- if settings_dict['PORT'].strip():
- dsn = Database.makedsn(settings_dict['HOST'],
- int(settings_dict['PORT']),
- settings_dict['NAME'])
- else:
- dsn = settings_dict['NAME']
- return "%s/%s@%s" % (settings_dict['USER'],
- settings_dict['PASSWORD'], dsn)
-
- def _cursor(self):
- cursor = None
- if not self._valid_connection():
- conn_string = convert_unicode(self._connect_string())
- self.connection = Database.connect(conn_string, **self.settings_dict['OPTIONS'])
- cursor = FormatStylePlaceholderCursor(self.connection)
- # Set oracle date to ansi date format. This only needs to execute
- # once when we create a new connection. We also set the Territory
- # to 'AMERICA' which forces Sunday to evaluate to a '1' in TO_CHAR().
- cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' "
- "NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF' "
- "NLS_TERRITORY = 'AMERICA'")
- try:
- self.oracle_version = int(self.connection.version.split('.')[0])
- # There's no way for the DatabaseOperations class to know the
- # currently active Oracle version, so we do some setups here.
- # TODO: Multi-db support will need a better solution (a way to
- # communicate the current version).
- if self.oracle_version <= 9:
- self.ops.regex_lookup = self.ops.regex_lookup_9
- else:
- self.ops.regex_lookup = self.ops.regex_lookup_10
- except ValueError:
- pass
- try:
- self.connection.stmtcachesize = 20
- except:
- # Django docs specify cx_Oracle version 4.3.1 or higher, but
- # stmtcachesize is available only in 4.3.2 and up.
- pass
- connection_created.send(sender=self.__class__, connection=self)
- if not cursor:
- cursor = FormatStylePlaceholderCursor(self.connection)
- return cursor
-
- # Oracle doesn't support savepoint commits. Ignore them.
- def _savepoint_commit(self, sid):
- pass
-
- def _commit(self):
- if self.connection is not None:
- try:
- return self.connection.commit()
- except Database.IntegrityError, e:
- # In case cx_Oracle implements (now or in a future version)
- # raising this specific exception
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- # cx_Oracle 5.0.4 raises a cx_Oracle.DatabaseError exception
- # with the following attributes and values:
- # code = 2091
- # message = 'ORA-02091: transaction rolled back
- # 'ORA-02291: integrity constraint (TEST_DJANGOTEST.SYS
- # _C00102056) violated - parent key not found'
- # We convert that particular case to our IntegrityError exception
- x = e.args[0]
- if hasattr(x, 'code') and hasattr(x, 'message') \
- and x.code == 2091 and 'ORA-02291' in x.message:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
-
-class OracleParam(object):
- """
- Wrapper object for formatting parameters for Oracle. If the string
- representation of the value is large enough (greater than 4000 characters)
- the input size needs to be set as CLOB. Alternatively, if the parameter
- has an `input_size` attribute, then the value of the `input_size` attribute
- will be used instead. Otherwise, no input size will be set for the
- parameter when executing the query.
- """
-
- def __init__(self, param, cursor, strings_only=False):
- if hasattr(param, 'bind_parameter'):
- self.smart_str = param.bind_parameter(cursor)
- else:
- self.smart_str = convert_unicode(param, cursor.charset,
- strings_only)
- if hasattr(param, 'input_size'):
- # If parameter has `input_size` attribute, use that.
- self.input_size = param.input_size
- elif isinstance(param, basestring) and len(param) > 4000:
- # Mark any string param greater than 4000 characters as a CLOB.
- self.input_size = Database.CLOB
- else:
- self.input_size = None
-
-
-class VariableWrapper(object):
- """
- An adapter class for cursor variables that prevents the wrapped object
- from being converted into a string when used to instanciate an OracleParam.
- This can be used generally for any other object that should be passed into
- Cursor.execute as-is.
- """
-
- def __init__(self, var):
- self.var = var
-
- def bind_parameter(self, cursor):
- return self.var
-
- def __getattr__(self, key):
- return getattr(self.var, key)
-
- def __setattr__(self, key, value):
- if key == 'var':
- self.__dict__[key] = value
- else:
- setattr(self.var, key, value)
-
-
-class InsertIdVar(object):
- """
- A late-binding cursor variable that can be passed to Cursor.execute
- as a parameter, in order to receive the id of the row created by an
- insert statement.
- """
-
- def bind_parameter(self, cursor):
- param = cursor.cursor.var(Database.NUMBER)
- cursor._insert_id_var = param
- return param
-
-
-class FormatStylePlaceholderCursor(object):
- """
- Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var"
- style. This fixes it -- but note that if you want to use a literal "%s" in
- a query, you'll need to use "%%s".
-
- We also do automatic conversion between Unicode on the Python side and
- UTF-8 -- for talking to Oracle -- in here.
- """
- charset = 'utf-8'
-
- def __init__(self, connection):
- self.cursor = connection.cursor()
- # Necessary to retrieve decimal values without rounding error.
- self.cursor.numbersAsStrings = True
- # Default arraysize of 1 is highly sub-optimal.
- self.cursor.arraysize = 100
-
- def _format_params(self, params):
- return tuple([OracleParam(p, self, True) for p in params])
-
- def _guess_input_sizes(self, params_list):
- sizes = [None] * len(params_list[0])
- for params in params_list:
- for i, value in enumerate(params):
- if value.input_size:
- sizes[i] = value.input_size
- self.setinputsizes(*sizes)
-
- def _param_generator(self, params):
- return [p.smart_str for p in params]
-
- def execute(self, query, params=None):
- if params is None:
- params = []
- else:
- params = self._format_params(params)
- args = [(':arg%d' % i) for i in range(len(params))]
- # cx_Oracle wants no trailing ';' for SQL statements. For PL/SQL, it
- # it does want a trailing ';' but not a trailing '/'. However, these
- # characters must be included in the original query in case the query
- # is being passed to SQL*Plus.
- if query.endswith(';') or query.endswith('/'):
- query = query[:-1]
- query = convert_unicode(query % tuple(args), self.charset)
- self._guess_input_sizes([params])
- try:
- return self.cursor.execute(query, self._param_generator(params))
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400.
- if hasattr(e.args[0], 'code') and e.args[0].code == 1400 and not isinstance(e, IntegrityError):
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def executemany(self, query, params=None):
- try:
- args = [(':arg%d' % i) for i in range(len(params[0]))]
- except (IndexError, TypeError):
- # No params given, nothing to do
- return None
- # cx_Oracle wants no trailing ';' for SQL statements. For PL/SQL, it
- # it does want a trailing ';' but not a trailing '/'. However, these
- # characters must be included in the original query in case the query
- # is being passed to SQL*Plus.
- if query.endswith(';') or query.endswith('/'):
- query = query[:-1]
- query = convert_unicode(query % tuple(args), self.charset)
- formatted = [self._format_params(i) for i in params]
- self._guess_input_sizes(formatted)
- try:
- return self.cursor.executemany(query,
- [self._param_generator(p) for p in formatted])
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400.
- if hasattr(e.args[0], 'code') and e.args[0].code == 1400 and not isinstance(e, IntegrityError):
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def fetchone(self):
- row = self.cursor.fetchone()
- if row is None:
- return row
- return _rowfactory(row, self.cursor)
-
- def fetchmany(self, size=None):
- if size is None:
- size = self.arraysize
- return tuple([_rowfactory(r, self.cursor)
- for r in self.cursor.fetchmany(size)])
-
- def fetchall(self):
- return tuple([_rowfactory(r, self.cursor)
- for r in self.cursor.fetchall()])
-
- def var(self, *args):
- return VariableWrapper(self.cursor.var(*args))
-
- def arrayvar(self, *args):
- return VariableWrapper(self.cursor.arrayvar(*args))
-
- def __getattr__(self, attr):
- if attr in self.__dict__:
- return self.__dict__[attr]
- else:
- return getattr(self.cursor, attr)
-
- def __iter__(self):
- return CursorIterator(self.cursor)
-
-
-class CursorIterator(object):
-
- """Cursor iterator wrapper that invokes our custom row factory."""
-
- def __init__(self, cursor):
- self.cursor = cursor
- self.iter = iter(cursor)
-
- def __iter__(self):
- return self
-
- def next(self):
- return _rowfactory(self.iter.next(), self.cursor)
-
-
-def _rowfactory(row, cursor):
- # Cast numeric values as the appropriate Python type based upon the
- # cursor description, and convert strings to unicode.
- casted = []
- for value, desc in zip(row, cursor.description):
- if value is not None and desc[1] is Database.NUMBER:
- precision, scale = desc[4:6]
- if scale == -127:
- if precision == 0:
- # NUMBER column: decimal-precision floating point
- # This will normally be an integer from a sequence,
- # but it could be a decimal value.
- if '.' in value:
- value = Decimal(value)
- else:
- value = int(value)
- else:
- # FLOAT column: binary-precision floating point.
- # This comes from FloatField columns.
- value = float(value)
- elif precision > 0:
- # NUMBER(p,s) column: decimal-precision fixed point.
- # This comes from IntField and DecimalField columns.
- if scale == 0:
- value = int(value)
- else:
- value = Decimal(value)
- elif '.' in value:
- # No type information. This normally comes from a
- # mathematical expression in the SELECT list. Guess int
- # or Decimal based on whether it has a decimal point.
- value = Decimal(value)
- else:
- value = int(value)
- elif desc[1] in (Database.STRING, Database.FIXED_CHAR,
- Database.LONG_STRING):
- value = to_unicode(value)
- casted.append(value)
- return tuple(casted)
-
-
-def to_unicode(s):
- """
- Convert strings to Unicode objects (and return all other data types
- unchanged).
- """
- if isinstance(s, basestring):
- return force_unicode(s)
- return s
-
-
-def _get_sequence_reset_sql():
- # TODO: colorize this SQL code with style.SQL_KEYWORD(), etc.
- return """
-DECLARE
- table_value integer;
- seq_value integer;
-BEGIN
- SELECT NVL(MAX(%(column)s), 0) INTO table_value FROM %(table)s;
- SELECT NVL(last_number - cache_size, 0) INTO seq_value FROM user_sequences
- WHERE sequence_name = '%(sequence)s';
- WHILE table_value > seq_value LOOP
- SELECT "%(sequence)s".nextval INTO seq_value FROM dual;
- END LOOP;
-END;
-/"""
-
-
-def get_sequence_name(table):
- name_length = DatabaseOperations().max_name_length() - 3
- return '%s_SQ' % util.truncate_name(table, name_length).upper()
-
-
-def get_trigger_name(table):
- name_length = DatabaseOperations().max_name_length() - 3
- return '%s_TR' % util.truncate_name(table, name_length).upper()
diff --git a/parts/django/django/db/backends/oracle/client.py b/parts/django/django/db/backends/oracle/client.py
deleted file mode 100644
index ccc64eb..0000000
--- a/parts/django/django/db/backends/oracle/client.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import os
-import sys
-
-from django.db.backends import BaseDatabaseClient
-
-class DatabaseClient(BaseDatabaseClient):
- executable_name = 'sqlplus'
-
- def runshell(self):
- conn_string = self.connection._connect_string()
- args = [self.executable_name, "-L", conn_string]
- if os.name == 'nt':
- sys.exit(os.system(" ".join(args)))
- else:
- os.execvp(self.executable_name, args)
-
diff --git a/parts/django/django/db/backends/oracle/compiler.py b/parts/django/django/db/backends/oracle/compiler.py
deleted file mode 100644
index cc1541f..0000000
--- a/parts/django/django/db/backends/oracle/compiler.py
+++ /dev/null
@@ -1,66 +0,0 @@
-from django.db.models.sql import compiler
-
-
-class SQLCompiler(compiler.SQLCompiler):
- def resolve_columns(self, row, fields=()):
- # If this query has limit/offset information, then we expect the
- # first column to be an extra "_RN" column that we need to throw
- # away.
- if self.query.high_mark is not None or self.query.low_mark:
- rn_offset = 1
- else:
- rn_offset = 0
- index_start = rn_offset + len(self.query.extra_select.keys())
- values = [self.query.convert_values(v, None, connection=self.connection)
- for v in row[rn_offset:index_start]]
- for value, field in map(None, row[index_start:], fields):
- values.append(self.query.convert_values(value, field, connection=self.connection))
- return tuple(values)
-
- def as_sql(self, with_limits=True, with_col_aliases=False):
- """
- Creates the SQL for this query. Returns the SQL string and list
- of parameters. This is overriden from the original Query class
- to handle the additional SQL Oracle requires to emulate LIMIT
- and OFFSET.
-
- If 'with_limits' is False, any limit/offset information is not
- included in the query.
- """
-
- # The `do_offset` flag indicates whether we need to construct
- # the SQL needed to use limit/offset with Oracle.
- do_offset = with_limits and (self.query.high_mark is not None
- or self.query.low_mark)
- if not do_offset:
- sql, params = super(SQLCompiler, self).as_sql(with_limits=False,
- with_col_aliases=with_col_aliases)
- else:
- sql, params = super(SQLCompiler, self).as_sql(with_limits=False,
- with_col_aliases=True)
-
- # Wrap the base query in an outer SELECT * with boundaries on
- # the "_RN" column. This is the canonical way to emulate LIMIT
- # and OFFSET on Oracle.
- high_where = ''
- if self.query.high_mark is not None:
- high_where = 'WHERE ROWNUM <= %d' % (self.query.high_mark,)
- sql = 'SELECT * FROM (SELECT ROWNUM AS "_RN", "_SUB".* FROM (%s) "_SUB" %s) WHERE "_RN" > %d' % (sql, high_where, self.query.low_mark)
-
- return sql, params
-
-
-class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
- pass
-
-class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler):
- pass
-
-class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler):
- pass
-
-class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler):
- pass
-
-class SQLDateCompiler(compiler.SQLDateCompiler, SQLCompiler):
- pass
diff --git a/parts/django/django/db/backends/oracle/creation.py b/parts/django/django/db/backends/oracle/creation.py
deleted file mode 100644
index 940af15..0000000
--- a/parts/django/django/db/backends/oracle/creation.py
+++ /dev/null
@@ -1,257 +0,0 @@
-import sys, time
-from django.db.backends.creation import BaseDatabaseCreation
-
-TEST_DATABASE_PREFIX = 'test_'
-PASSWORD = 'Im_a_lumberjack'
-
-class DatabaseCreation(BaseDatabaseCreation):
- # This dictionary maps Field objects to their associated Oracle column
- # types, as strings. Column-type strings can contain format strings; they'll
- # be interpolated against the values of Field.__dict__ before being output.
- # If a column type is set to None, it won't be included in the output.
- #
- # Any format strings starting with "qn_" are quoted before being used in the
- # output (the "qn_" prefix is stripped before the lookup is performed.
-
- data_types = {
- 'AutoField': 'NUMBER(11)',
- 'BooleanField': 'NUMBER(1) CHECK (%(qn_column)s IN (0,1))',
- 'CharField': 'NVARCHAR2(%(max_length)s)',
- 'CommaSeparatedIntegerField': 'VARCHAR2(%(max_length)s)',
- 'DateField': 'DATE',
- 'DateTimeField': 'TIMESTAMP',
- 'DecimalField': 'NUMBER(%(max_digits)s, %(decimal_places)s)',
- 'FileField': 'NVARCHAR2(%(max_length)s)',
- 'FilePathField': 'NVARCHAR2(%(max_length)s)',
- 'FloatField': 'DOUBLE PRECISION',
- 'IntegerField': 'NUMBER(11)',
- 'BigIntegerField': 'NUMBER(19)',
- 'IPAddressField': 'VARCHAR2(15)',
- 'NullBooleanField': 'NUMBER(1) CHECK ((%(qn_column)s IN (0,1)) OR (%(qn_column)s IS NULL))',
- 'OneToOneField': 'NUMBER(11)',
- 'PositiveIntegerField': 'NUMBER(11) CHECK (%(qn_column)s >= 0)',
- 'PositiveSmallIntegerField': 'NUMBER(11) CHECK (%(qn_column)s >= 0)',
- 'SlugField': 'NVARCHAR2(%(max_length)s)',
- 'SmallIntegerField': 'NUMBER(11)',
- 'TextField': 'NCLOB',
- 'TimeField': 'TIMESTAMP',
- 'URLField': 'VARCHAR2(%(max_length)s)',
- }
-
- def __init__(self, connection):
- self.remember = {}
- super(DatabaseCreation, self).__init__(connection)
-
- def _create_test_db(self, verbosity=1, autoclobber=False):
- TEST_NAME = self._test_database_name()
- TEST_USER = self._test_database_user()
- TEST_PASSWD = self._test_database_passwd()
- TEST_TBLSPACE = self._test_database_tblspace()
- TEST_TBLSPACE_TMP = self._test_database_tblspace_tmp()
-
- parameters = {
- 'dbname': TEST_NAME,
- 'user': TEST_USER,
- 'password': TEST_PASSWD,
- 'tblspace': TEST_TBLSPACE,
- 'tblspace_temp': TEST_TBLSPACE_TMP,
- }
-
- self.remember['user'] = self.connection.settings_dict['USER']
- self.remember['passwd'] = self.connection.settings_dict['PASSWORD']
-
- cursor = self.connection.cursor()
- if self._test_database_create():
- if verbosity >= 1:
- print 'Creating test database...'
- try:
- self._execute_test_db_creation(cursor, parameters, verbosity)
- except Exception, e:
- sys.stderr.write("Got an error creating the test database: %s\n" % e)
- if not autoclobber:
- confirm = raw_input("It appears the test database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_NAME)
- if autoclobber or confirm == 'yes':
- try:
- if verbosity >= 1:
- print "Destroying old test database..."
- self._execute_test_db_destruction(cursor, parameters, verbosity)
- if verbosity >= 1:
- print "Creating test database..."
- self._execute_test_db_creation(cursor, parameters, verbosity)
- except Exception, e:
- sys.stderr.write("Got an error recreating the test database: %s\n" % e)
- sys.exit(2)
- else:
- print "Tests cancelled."
- sys.exit(1)
-
- if self._test_user_create():
- if verbosity >= 1:
- print "Creating test user..."
- try:
- self._create_test_user(cursor, parameters, verbosity)
- except Exception, e:
- sys.stderr.write("Got an error creating the test user: %s\n" % e)
- if not autoclobber:
- confirm = raw_input("It appears the test user, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_USER)
- if autoclobber or confirm == 'yes':
- try:
- if verbosity >= 1:
- print "Destroying old test user..."
- self._destroy_test_user(cursor, parameters, verbosity)
- if verbosity >= 1:
- print "Creating test user..."
- self._create_test_user(cursor, parameters, verbosity)
- except Exception, e:
- sys.stderr.write("Got an error recreating the test user: %s\n" % e)
- sys.exit(2)
- else:
- print "Tests cancelled."
- sys.exit(1)
-
- self.connection.settings_dict['TEST_USER'] = self.connection.settings_dict["USER"] = TEST_USER
- self.connection.settings_dict["PASSWORD"] = TEST_PASSWD
-
- return self.connection.settings_dict['NAME']
-
- def _destroy_test_db(self, test_database_name, verbosity=1):
- """
- Destroy a test database, prompting the user for confirmation if the
- database already exists. Returns the name of the test database created.
- """
- TEST_NAME = self._test_database_name()
- TEST_USER = self._test_database_user()
- TEST_PASSWD = self._test_database_passwd()
- TEST_TBLSPACE = self._test_database_tblspace()
- TEST_TBLSPACE_TMP = self._test_database_tblspace_tmp()
-
- self.connection.settings_dict["USER"] = self.remember['user']
- self.connection.settings_dict["PASSWORD"] = self.remember['passwd']
-
- parameters = {
- 'dbname': TEST_NAME,
- 'user': TEST_USER,
- 'password': TEST_PASSWD,
- 'tblspace': TEST_TBLSPACE,
- 'tblspace_temp': TEST_TBLSPACE_TMP,
- }
-
- cursor = self.connection.cursor()
- time.sleep(1) # To avoid "database is being accessed by other users" errors.
- if self._test_user_create():
- if verbosity >= 1:
- print 'Destroying test user...'
- self._destroy_test_user(cursor, parameters, verbosity)
- if self._test_database_create():
- if verbosity >= 1:
- print 'Destroying test database tables...'
- self._execute_test_db_destruction(cursor, parameters, verbosity)
- self.connection.close()
-
- def _execute_test_db_creation(self, cursor, parameters, verbosity):
- if verbosity >= 2:
- print "_create_test_db(): dbname = %s" % parameters['dbname']
- statements = [
- """CREATE TABLESPACE %(tblspace)s
- DATAFILE '%(tblspace)s.dbf' SIZE 20M
- REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 200M
- """,
- """CREATE TEMPORARY TABLESPACE %(tblspace_temp)s
- TEMPFILE '%(tblspace_temp)s.dbf' SIZE 20M
- REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 100M
- """,
- ]
- self._execute_statements(cursor, statements, parameters, verbosity)
-
- def _create_test_user(self, cursor, parameters, verbosity):
- if verbosity >= 2:
- print "_create_test_user(): username = %s" % parameters['user']
- statements = [
- """CREATE USER %(user)s
- IDENTIFIED BY %(password)s
- DEFAULT TABLESPACE %(tblspace)s
- TEMPORARY TABLESPACE %(tblspace_temp)s
- """,
- """GRANT CONNECT, RESOURCE TO %(user)s""",
- ]
- self._execute_statements(cursor, statements, parameters, verbosity)
-
- def _execute_test_db_destruction(self, cursor, parameters, verbosity):
- if verbosity >= 2:
- print "_execute_test_db_destruction(): dbname=%s" % parameters['dbname']
- statements = [
- 'DROP TABLESPACE %(tblspace)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS',
- 'DROP TABLESPACE %(tblspace_temp)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS',
- ]
- self._execute_statements(cursor, statements, parameters, verbosity)
-
- def _destroy_test_user(self, cursor, parameters, verbosity):
- if verbosity >= 2:
- print "_destroy_test_user(): user=%s" % parameters['user']
- print "Be patient. This can take some time..."
- statements = [
- 'DROP USER %(user)s CASCADE',
- ]
- self._execute_statements(cursor, statements, parameters, verbosity)
-
- def _execute_statements(self, cursor, statements, parameters, verbosity):
- for template in statements:
- stmt = template % parameters
- if verbosity >= 2:
- print stmt
- try:
- cursor.execute(stmt)
- except Exception, err:
- sys.stderr.write("Failed (%s)\n" % (err))
- raise
-
- def _test_database_name(self):
- name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME']
- try:
- if self.connection.settings_dict['TEST_NAME']:
- name = self.connection.settings_dict['TEST_NAME']
- except AttributeError:
- pass
- return name
-
- def _test_database_create(self):
- return self.connection.settings_dict.get('TEST_CREATE', True)
-
- def _test_user_create(self):
- return self.connection.settings_dict.get('TEST_USER_CREATE', True)
-
- def _test_database_user(self):
- name = TEST_DATABASE_PREFIX + self.connection.settings_dict['USER']
- try:
- if self.connection.settings_dict['TEST_USER']:
- name = self.connection.settings_dict['TEST_USER']
- except KeyError:
- pass
- return name
-
- def _test_database_passwd(self):
- name = PASSWORD
- try:
- if self.connection.settings_dict['TEST_PASSWD']:
- name = self.connection.settings_dict['TEST_PASSWD']
- except KeyError:
- pass
- return name
-
- def _test_database_tblspace(self):
- name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME']
- try:
- if self.connection.settings_dict['TEST_TBLSPACE']:
- name = self.connection.settings_dict['TEST_TBLSPACE']
- except KeyError:
- pass
- return name
-
- def _test_database_tblspace_tmp(self):
- name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME'] + '_temp'
- try:
- if self.connection.settings_dict['TEST_TBLSPACE_TMP']:
- name = self.connection.settings_dict['TEST_TBLSPACE_TMP']
- except KeyError:
- pass
- return name
diff --git a/parts/django/django/db/backends/oracle/introspection.py b/parts/django/django/db/backends/oracle/introspection.py
deleted file mode 100644
index 0dd0304..0000000
--- a/parts/django/django/db/backends/oracle/introspection.py
+++ /dev/null
@@ -1,121 +0,0 @@
-from django.db.backends import BaseDatabaseIntrospection
-import cx_Oracle
-import re
-
-foreign_key_re = re.compile(r"\sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REFERENCES `([^`]*)` \(`([^`]*)`\)")
-
-class DatabaseIntrospection(BaseDatabaseIntrospection):
- # Maps type objects to Django Field types.
- data_types_reverse = {
- cx_Oracle.CLOB: 'TextField',
- cx_Oracle.DATETIME: 'DateField',
- cx_Oracle.FIXED_CHAR: 'CharField',
- cx_Oracle.NCLOB: 'TextField',
- cx_Oracle.NUMBER: 'DecimalField',
- cx_Oracle.STRING: 'CharField',
- cx_Oracle.TIMESTAMP: 'DateTimeField',
- }
-
- try:
- data_types_reverse[cx_Oracle.NATIVE_FLOAT] = 'FloatField'
- except AttributeError:
- pass
-
- try:
- data_types_reverse[cx_Oracle.UNICODE] = 'CharField'
- except AttributeError:
- pass
-
- def get_field_type(self, data_type, description):
- # If it's a NUMBER with scale == 0, consider it an IntegerField
- if data_type == cx_Oracle.NUMBER and description[5] == 0:
- if description[4] > 11:
- return 'BigIntegerField'
- else:
- return 'IntegerField'
- else:
- return super(DatabaseIntrospection, self).get_field_type(
- data_type, description)
-
- def get_table_list(self, cursor):
- "Returns a list of table names in the current database."
- cursor.execute("SELECT TABLE_NAME FROM USER_TABLES")
- return [row[0].lower() for row in cursor.fetchall()]
-
- def get_table_description(self, cursor, table_name):
- "Returns a description of the table, with the DB-API cursor.description interface."
- cursor.execute("SELECT * FROM %s WHERE ROWNUM < 2" % self.connection.ops.quote_name(table_name))
- description = []
- for desc in cursor.description:
- description.append((desc[0].lower(),) + desc[1:])
- return description
-
- def table_name_converter(self, name):
- "Table name comparison is case insensitive under Oracle"
- return name.lower()
-
- def _name_to_index(self, cursor, table_name):
- """
- Returns a dictionary of {field_name: field_index} for the given table.
- Indexes are 0-based.
- """
- return dict([(d[0], i) for i, d in enumerate(self.get_table_description(cursor, table_name))])
-
- def get_relations(self, cursor, table_name):
- """
- Returns a dictionary of {field_index: (field_index_other_table, other_table)}
- representing all relationships to the given table. Indexes are 0-based.
- """
- cursor.execute("""
- SELECT ta.column_id - 1, tb.table_name, tb.column_id - 1
- FROM user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb,
- user_tab_cols ta, user_tab_cols tb
- WHERE user_constraints.table_name = %s AND
- ta.table_name = %s AND
- ta.column_name = ca.column_name AND
- ca.table_name = %s AND
- user_constraints.constraint_name = ca.constraint_name AND
- user_constraints.r_constraint_name = cb.constraint_name AND
- cb.table_name = tb.table_name AND
- cb.column_name = tb.column_name AND
- ca.position = cb.position""", [table_name, table_name, table_name])
-
- relations = {}
- for row in cursor.fetchall():
- relations[row[0]] = (row[2], row[1])
- return relations
-
- def get_indexes(self, cursor, table_name):
- """
- Returns a dictionary of fieldname -> infodict for the given table,
- where each infodict is in the format:
- {'primary_key': boolean representing whether it's the primary key,
- 'unique': boolean representing whether it's a unique index}
- """
- # This query retrieves each index on the given table, including the
- # first associated field name
- # "We were in the nick of time; you were in great peril!"
- sql = """\
-SELECT LOWER(all_tab_cols.column_name) AS column_name,
- CASE user_constraints.constraint_type
- WHEN 'P' THEN 1 ELSE 0
- END AS is_primary_key,
- CASE user_indexes.uniqueness
- WHEN 'UNIQUE' THEN 1 ELSE 0
- END AS is_unique
-FROM all_tab_cols, user_cons_columns, user_constraints, user_ind_columns, user_indexes
-WHERE all_tab_cols.column_name = user_cons_columns.column_name (+)
- AND all_tab_cols.table_name = user_cons_columns.table_name (+)
- AND user_cons_columns.constraint_name = user_constraints.constraint_name (+)
- AND user_constraints.constraint_type (+) = 'P'
- AND user_ind_columns.column_name (+) = all_tab_cols.column_name
- AND user_ind_columns.table_name (+) = all_tab_cols.table_name
- AND user_indexes.uniqueness (+) = 'UNIQUE'
- AND user_indexes.index_name (+) = user_ind_columns.index_name
- AND all_tab_cols.table_name = UPPER(%s)
-"""
- cursor.execute(sql, [table_name])
- indexes = {}
- for row in cursor.fetchall():
- indexes[row[0]] = {'primary_key': row[1], 'unique': row[2]}
- return indexes
diff --git a/parts/django/django/db/backends/postgresql/__init__.py b/parts/django/django/db/backends/postgresql/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/db/backends/postgresql/__init__.py
+++ /dev/null
diff --git a/parts/django/django/db/backends/postgresql/base.py b/parts/django/django/db/backends/postgresql/base.py
deleted file mode 100644
index 5f4d791..0000000
--- a/parts/django/django/db/backends/postgresql/base.py
+++ /dev/null
@@ -1,179 +0,0 @@
-"""
-PostgreSQL database backend for Django.
-
-Requires psycopg 1: http://initd.org/projects/psycopg1
-"""
-
-import sys
-
-from django.db import utils
-from django.db.backends import *
-from django.db.backends.signals import connection_created
-from django.db.backends.postgresql.client import DatabaseClient
-from django.db.backends.postgresql.creation import DatabaseCreation
-from django.db.backends.postgresql.introspection import DatabaseIntrospection
-from django.db.backends.postgresql.operations import DatabaseOperations
-from django.db.backends.postgresql.version import get_version
-from django.utils.encoding import smart_str, smart_unicode
-
-try:
- import psycopg as Database
-except ImportError, e:
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("Error loading psycopg module: %s" % e)
-
-DatabaseError = Database.DatabaseError
-IntegrityError = Database.IntegrityError
-
-class UnicodeCursorWrapper(object):
- """
- A thin wrapper around psycopg cursors that allows them to accept Unicode
- strings as params.
-
- This is necessary because psycopg doesn't apply any DB quoting to
- parameters that are Unicode strings. If a param is Unicode, this will
- convert it to a bytestring using database client's encoding before passing
- it to psycopg.
-
- All results retrieved from the database are converted into Unicode strings
- before being returned to the caller.
- """
- def __init__(self, cursor, charset):
- self.cursor = cursor
- self.charset = charset
-
- def format_params(self, params):
- if isinstance(params, dict):
- result = {}
- charset = self.charset
- for key, value in params.items():
- result[smart_str(key, charset)] = smart_str(value, charset)
- return result
- else:
- return tuple([smart_str(p, self.charset, True) for p in params])
-
- def execute(self, sql, params=()):
- try:
- return self.cursor.execute(smart_str(sql, self.charset), self.format_params(params))
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def executemany(self, sql, param_list):
- try:
- new_param_list = [self.format_params(params) for params in param_list]
- return self.cursor.executemany(sql, new_param_list)
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def __getattr__(self, attr):
- if attr in self.__dict__:
- return self.__dict__[attr]
- else:
- return getattr(self.cursor, attr)
-
- def __iter__(self):
- return iter(self.cursor.fetchall())
-
-class DatabaseFeatures(BaseDatabaseFeatures):
- uses_savepoints = True
-
-class DatabaseWrapper(BaseDatabaseWrapper):
- operators = {
- 'exact': '= %s',
- 'iexact': '= UPPER(%s)',
- 'contains': 'LIKE %s',
- 'icontains': 'LIKE UPPER(%s)',
- 'regex': '~ %s',
- 'iregex': '~* %s',
- 'gt': '> %s',
- 'gte': '>= %s',
- 'lt': '< %s',
- 'lte': '<= %s',
- 'startswith': 'LIKE %s',
- 'endswith': 'LIKE %s',
- 'istartswith': 'LIKE UPPER(%s)',
- 'iendswith': 'LIKE UPPER(%s)',
- }
-
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
-
- import warnings
- warnings.warn(
- 'The "postgresql" backend has been deprecated. Use "postgresql_psycopg2" instead.',
- PendingDeprecationWarning
- )
-
- self.features = DatabaseFeatures()
- self.ops = DatabaseOperations(self)
- self.client = DatabaseClient(self)
- self.creation = DatabaseCreation(self)
- self.introspection = DatabaseIntrospection(self)
- self.validation = BaseDatabaseValidation(self)
-
- def _cursor(self):
- new_connection = False
- set_tz = False
- settings_dict = self.settings_dict
- if self.connection is None:
- new_connection = True
- set_tz = settings_dict.get('TIME_ZONE')
- if settings_dict['NAME'] == '':
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("You need to specify NAME in your Django settings file.")
- conn_string = "dbname=%s" % settings_dict['NAME']
- if settings_dict['USER']:
- conn_string = "user=%s %s" % (settings_dict['USER'], conn_string)
- if settings_dict['PASSWORD']:
- conn_string += " password='%s'" % settings_dict['PASSWORD']
- if settings_dict['HOST']:
- conn_string += " host=%s" % settings_dict['HOST']
- if settings_dict['PORT']:
- conn_string += " port=%s" % settings_dict['PORT']
- self.connection = Database.connect(conn_string, **settings_dict['OPTIONS'])
- # make transactions transparent to all cursors
- self.connection.set_isolation_level(1)
- connection_created.send(sender=self.__class__, connection=self)
- cursor = self.connection.cursor()
- if new_connection:
- if set_tz:
- cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
- if not hasattr(self, '_version'):
- self.__class__._version = get_version(cursor)
- if self._version[0:2] < (8, 0):
- # No savepoint support for earlier version of PostgreSQL.
- self.features.uses_savepoints = False
- cursor.execute("SET client_encoding to 'UNICODE'")
- return UnicodeCursorWrapper(cursor, 'utf-8')
-
- def _commit(self):
- if self.connection is not None:
- try:
- return self.connection.commit()
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
-
-def typecast_string(s):
- """
- Cast all returned strings to unicode strings.
- """
- if not s and not isinstance(s, str):
- return s
- return smart_unicode(s)
-
-# Register these custom typecasts, because Django expects dates/times to be
-# in Python's native (standard-library) datetime/time format, whereas psycopg
-# use mx.DateTime by default.
-try:
- Database.register_type(Database.new_type((1082,), "DATE", util.typecast_date))
-except AttributeError:
- raise Exception("You appear to be using psycopg version 2. Set your DATABASES.ENGINE to 'postgresql_psycopg2' instead of 'postgresql'.")
-Database.register_type(Database.new_type((1083,1266), "TIME", util.typecast_time))
-Database.register_type(Database.new_type((1114,1184), "TIMESTAMP", util.typecast_timestamp))
-Database.register_type(Database.new_type((16,), "BOOLEAN", util.typecast_boolean))
-Database.register_type(Database.new_type((1700,), "NUMERIC", util.typecast_decimal))
-Database.register_type(Database.new_type(Database.types[1043].values, 'STRING', typecast_string))
diff --git a/parts/django/django/db/backends/postgresql/client.py b/parts/django/django/db/backends/postgresql/client.py
deleted file mode 100644
index a5c0296..0000000
--- a/parts/django/django/db/backends/postgresql/client.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import os
-import sys
-
-from django.db.backends import BaseDatabaseClient
-
-class DatabaseClient(BaseDatabaseClient):
- executable_name = 'psql'
-
- def runshell(self):
- settings_dict = self.connection.settings_dict
- args = [self.executable_name]
- if settings_dict['USER']:
- args += ["-U", settings_dict['USER']]
- if settings_dict['HOST']:
- args.extend(["-h", settings_dict['HOST']])
- if settings_dict['PORT']:
- args.extend(["-p", str(settings_dict['PORT'])])
- args += [settings_dict['NAME']]
- if os.name == 'nt':
- sys.exit(os.system(" ".join(args)))
- else:
- os.execvp(self.executable_name, args)
-
diff --git a/parts/django/django/db/backends/postgresql/creation.py b/parts/django/django/db/backends/postgresql/creation.py
deleted file mode 100644
index 1a821af..0000000
--- a/parts/django/django/db/backends/postgresql/creation.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from django.db.backends.creation import BaseDatabaseCreation
-
-class DatabaseCreation(BaseDatabaseCreation):
- # This dictionary maps Field objects to their associated PostgreSQL column
- # types, as strings. Column-type strings can contain format strings; they'll
- # be interpolated against the values of Field.__dict__ before being output.
- # If a column type is set to None, it won't be included in the output.
- data_types = {
- 'AutoField': 'serial',
- 'BooleanField': 'boolean',
- 'CharField': 'varchar(%(max_length)s)',
- 'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
- 'DateField': 'date',
- 'DateTimeField': 'timestamp with time zone',
- 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
- 'FileField': 'varchar(%(max_length)s)',
- 'FilePathField': 'varchar(%(max_length)s)',
- 'FloatField': 'double precision',
- 'IntegerField': 'integer',
- 'BigIntegerField': 'bigint',
- 'IPAddressField': 'inet',
- 'NullBooleanField': 'boolean',
- 'OneToOneField': 'integer',
- 'PositiveIntegerField': 'integer CHECK ("%(column)s" >= 0)',
- 'PositiveSmallIntegerField': 'smallint CHECK ("%(column)s" >= 0)',
- 'SlugField': 'varchar(%(max_length)s)',
- 'SmallIntegerField': 'smallint',
- 'TextField': 'text',
- 'TimeField': 'time',
- }
-
- def sql_table_creation_suffix(self):
- assert self.connection.settings_dict['TEST_COLLATION'] is None, "PostgreSQL does not support collation setting at database creation time."
- if self.connection.settings_dict['TEST_CHARSET']:
- return "WITH ENCODING '%s'" % self.connection.settings_dict['TEST_CHARSET']
- return ''
-
- def sql_indexes_for_field(self, model, f, style):
- if f.db_index and not f.unique:
- qn = self.connection.ops.quote_name
- db_table = model._meta.db_table
- tablespace = f.db_tablespace or model._meta.db_tablespace
- if tablespace:
- sql = self.connection.ops.tablespace_sql(tablespace)
- if sql:
- tablespace_sql = ' ' + sql
- else:
- tablespace_sql = ''
- else:
- tablespace_sql = ''
-
- def get_index_sql(index_name, opclass=''):
- return (style.SQL_KEYWORD('CREATE INDEX') + ' ' +
- style.SQL_TABLE(qn(index_name)) + ' ' +
- style.SQL_KEYWORD('ON') + ' ' +
- style.SQL_TABLE(qn(db_table)) + ' ' +
- "(%s%s)" % (style.SQL_FIELD(qn(f.column)), opclass) +
- "%s;" % tablespace_sql)
-
- output = [get_index_sql('%s_%s' % (db_table, f.column))]
-
- # Fields with database column types of `varchar` and `text` need
- # a second index that specifies their operator class, which is
- # needed when performing correct LIKE queries outside the
- # C locale. See #12234.
- db_type = f.db_type(connection=self.connection)
- if db_type.startswith('varchar'):
- output.append(get_index_sql('%s_%s_like' % (db_table, f.column),
- ' varchar_pattern_ops'))
- elif db_type.startswith('text'):
- output.append(get_index_sql('%s_%s_like' % (db_table, f.column),
- ' text_pattern_ops'))
- else:
- output = []
- return output
diff --git a/parts/django/django/db/backends/postgresql/introspection.py b/parts/django/django/db/backends/postgresql/introspection.py
deleted file mode 100644
index 534bf41..0000000
--- a/parts/django/django/db/backends/postgresql/introspection.py
+++ /dev/null
@@ -1,88 +0,0 @@
-from django.db.backends import BaseDatabaseIntrospection
-
-class DatabaseIntrospection(BaseDatabaseIntrospection):
- # Maps type codes to Django Field types.
- data_types_reverse = {
- 16: 'BooleanField',
- 20: 'BigIntegerField',
- 21: 'SmallIntegerField',
- 23: 'IntegerField',
- 25: 'TextField',
- 700: 'FloatField',
- 701: 'FloatField',
- 869: 'IPAddressField',
- 1043: 'CharField',
- 1082: 'DateField',
- 1083: 'TimeField',
- 1114: 'DateTimeField',
- 1184: 'DateTimeField',
- 1266: 'TimeField',
- 1700: 'DecimalField',
- }
-
- def get_table_list(self, cursor):
- "Returns a list of table names in the current database."
- cursor.execute("""
- SELECT c.relname
- FROM pg_catalog.pg_class c
- LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
- WHERE c.relkind IN ('r', 'v', '')
- AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
- AND pg_catalog.pg_table_is_visible(c.oid)""")
- return [row[0] for row in cursor.fetchall()]
-
- def get_table_description(self, cursor, table_name):
- "Returns a description of the table, with the DB-API cursor.description interface."
- cursor.execute("SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name))
- return cursor.description
-
- def get_relations(self, cursor, table_name):
- """
- Returns a dictionary of {field_index: (field_index_other_table, other_table)}
- representing all relationships to the given table. Indexes are 0-based.
- """
- cursor.execute("""
- SELECT con.conkey, con.confkey, c2.relname
- FROM pg_constraint con, pg_class c1, pg_class c2
- WHERE c1.oid = con.conrelid
- AND c2.oid = con.confrelid
- AND c1.relname = %s
- AND con.contype = 'f'""", [table_name])
- relations = {}
- for row in cursor.fetchall():
- try:
- # row[0] and row[1] are like "{2}", so strip the curly braces.
- relations[int(row[0][1:-1]) - 1] = (int(row[1][1:-1]) - 1, row[2])
- except ValueError:
- continue
- return relations
-
- def get_indexes(self, cursor, table_name):
- """
- Returns a dictionary of fieldname -> infodict for the given table,
- where each infodict is in the format:
- {'primary_key': boolean representing whether it's the primary key,
- 'unique': boolean representing whether it's a unique index}
- """
- # This query retrieves each index on the given table, including the
- # first associated field name
- cursor.execute("""
- SELECT attr.attname, idx.indkey, idx.indisunique, idx.indisprimary
- FROM pg_catalog.pg_class c, pg_catalog.pg_class c2,
- pg_catalog.pg_index idx, pg_catalog.pg_attribute attr
- WHERE c.oid = idx.indrelid
- AND idx.indexrelid = c2.oid
- AND attr.attrelid = c.oid
- AND attr.attnum = idx.indkey[0]
- AND c.relname = %s""", [table_name])
- indexes = {}
- for row in cursor.fetchall():
- # row[1] (idx.indkey) is stored in the DB as an array. It comes out as
- # a string of space-separated integers. This designates the field
- # indexes (1-based) of the fields that have indexes on the table.
- # Here, we skip any indexes across multiple fields.
- if ' ' in row[1]:
- continue
- indexes[row[0]] = {'primary_key': row[3], 'unique': row[2]}
- return indexes
-
diff --git a/parts/django/django/db/backends/postgresql/operations.py b/parts/django/django/db/backends/postgresql/operations.py
deleted file mode 100644
index 2951c33..0000000
--- a/parts/django/django/db/backends/postgresql/operations.py
+++ /dev/null
@@ -1,179 +0,0 @@
-import re
-
-from django.db.backends import BaseDatabaseOperations
-
-# This DatabaseOperations class lives in here instead of base.py because it's
-# used by both the 'postgresql' and 'postgresql_psycopg2' backends.
-
-class DatabaseOperations(BaseDatabaseOperations):
- def __init__(self, connection):
- super(DatabaseOperations, self).__init__()
- self._postgres_version = None
- self.connection = connection
-
- def _get_postgres_version(self):
- if self._postgres_version is None:
- from django.db.backends.postgresql.version import get_version
- cursor = self.connection.cursor()
- self._postgres_version = get_version(cursor)
- return self._postgres_version
- postgres_version = property(_get_postgres_version)
-
- def date_extract_sql(self, lookup_type, field_name):
- # http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT
- if lookup_type == 'week_day':
- # For consistency across backends, we return Sunday=1, Saturday=7.
- return "EXTRACT('dow' FROM %s) + 1" % field_name
- else:
- return "EXTRACT('%s' FROM %s)" % (lookup_type, field_name)
-
- def date_trunc_sql(self, lookup_type, field_name):
- # http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
- return "DATE_TRUNC('%s', %s)" % (lookup_type, field_name)
-
- def deferrable_sql(self):
- return " DEFERRABLE INITIALLY DEFERRED"
-
- def lookup_cast(self, lookup_type):
- lookup = '%s'
-
- # Cast text lookups to text to allow things like filter(x__contains=4)
- if lookup_type in ('iexact', 'contains', 'icontains', 'startswith',
- 'istartswith', 'endswith', 'iendswith'):
- lookup = "%s::text"
-
- # Use UPPER(x) for case-insensitive lookups; it's faster.
- if lookup_type in ('iexact', 'icontains', 'istartswith', 'iendswith'):
- lookup = 'UPPER(%s)' % lookup
-
- return lookup
-
- def field_cast_sql(self, db_type):
- if db_type == 'inet':
- return 'HOST(%s)'
- return '%s'
-
- def last_insert_id(self, cursor, table_name, pk_name):
- cursor.execute("SELECT CURRVAL('\"%s_%s_seq\"')" % (table_name, pk_name))
- return cursor.fetchone()[0]
-
- def no_limit_value(self):
- return None
-
- def quote_name(self, name):
- if name.startswith('"') and name.endswith('"'):
- return name # Quoting once is enough.
- return '"%s"' % name
-
- def sql_flush(self, style, tables, sequences):
- if tables:
- if self.postgres_version[0:2] >= (8,1):
- # Postgres 8.1+ can do 'TRUNCATE x, y, z...;'. In fact, it *has to*
- # in order to be able to truncate tables referenced by a foreign
- # key in any other table. The result is a single SQL TRUNCATE
- # statement.
- sql = ['%s %s;' % \
- (style.SQL_KEYWORD('TRUNCATE'),
- style.SQL_FIELD(', '.join([self.quote_name(table) for table in tables]))
- )]
- else:
- # Older versions of Postgres can't do TRUNCATE in a single call, so
- # they must use a simple delete.
- sql = ['%s %s %s;' % \
- (style.SQL_KEYWORD('DELETE'),
- style.SQL_KEYWORD('FROM'),
- style.SQL_FIELD(self.quote_name(table))
- ) for table in tables]
-
- # 'ALTER SEQUENCE sequence_name RESTART WITH 1;'... style SQL statements
- # to reset sequence indices
- for sequence_info in sequences:
- table_name = sequence_info['table']
- column_name = sequence_info['column']
- if column_name and len(column_name) > 0:
- sequence_name = '%s_%s_seq' % (table_name, column_name)
- else:
- sequence_name = '%s_id_seq' % table_name
- sql.append("%s setval('%s', 1, false);" % \
- (style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD(self.quote_name(sequence_name)))
- )
- return sql
- else:
- return []
-
- def sequence_reset_sql(self, style, model_list):
- from django.db import models
- output = []
- qn = self.quote_name
- for model in model_list:
- # Use `coalesce` to set the sequence for each model to the max pk value if there are records,
- # or 1 if there are none. Set the `is_called` property (the third argument to `setval`) to true
- # if there are records (as the max pk value is already in use), otherwise set it to false.
- for f in model._meta.local_fields:
- if isinstance(f, models.AutoField):
- output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) %s null) %s %s;" % \
- (style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD(qn('%s_%s_seq' % (model._meta.db_table, f.column))),
- style.SQL_FIELD(qn(f.column)),
- style.SQL_FIELD(qn(f.column)),
- style.SQL_KEYWORD('IS NOT'),
- style.SQL_KEYWORD('FROM'),
- style.SQL_TABLE(qn(model._meta.db_table))))
- break # Only one AutoField is allowed per model, so don't bother continuing.
- for f in model._meta.many_to_many:
- if not f.rel.through:
- output.append("%s setval('%s', coalesce(max(%s), 1), max(%s) %s null) %s %s;" % \
- (style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD(qn('%s_id_seq' % f.m2m_db_table())),
- style.SQL_FIELD(qn('id')),
- style.SQL_FIELD(qn('id')),
- style.SQL_KEYWORD('IS NOT'),
- style.SQL_KEYWORD('FROM'),
- style.SQL_TABLE(qn(f.m2m_db_table()))))
- return output
-
- def savepoint_create_sql(self, sid):
- return "SAVEPOINT %s" % sid
-
- def savepoint_commit_sql(self, sid):
- return "RELEASE SAVEPOINT %s" % sid
-
- def savepoint_rollback_sql(self, sid):
- return "ROLLBACK TO SAVEPOINT %s" % sid
-
- def prep_for_iexact_query(self, x):
- return x
-
- def check_aggregate_support(self, aggregate):
- """Check that the backend fully supports the provided aggregate.
-
- The population and sample statistics (STDDEV_POP, STDDEV_SAMP,
- VAR_POP, VAR_SAMP) were first implemented in Postgres 8.2.
-
- The implementation of population statistics (STDDEV_POP and VAR_POP)
- under Postgres 8.2 - 8.2.4 is known to be faulty. Raise
- NotImplementedError if this is the database in use.
- """
- if aggregate.sql_function in ('STDDEV_POP', 'STDDEV_SAMP', 'VAR_POP', 'VAR_SAMP'):
- if self.postgres_version[0:2] < (8,2):
- raise NotImplementedError('PostgreSQL does not support %s prior to version 8.2. Please upgrade your version of PostgreSQL.' % aggregate.sql_function)
-
- if aggregate.sql_function in ('STDDEV_POP', 'VAR_POP'):
- if self.postgres_version[0:2] == (8,2):
- if self.postgres_version[2] is None or self.postgres_version[2] <= 4:
- raise NotImplementedError('PostgreSQL 8.2 to 8.2.4 is known to have a faulty implementation of %s. Please upgrade your version of PostgreSQL.' % aggregate.sql_function)
-
- def max_name_length(self):
- """
- Returns the maximum length of an identifier.
-
- Note that the maximum length of an identifier is 63 by default, but can
- be changed by recompiling PostgreSQL after editing the NAMEDATALEN
- macro in src/include/pg_config_manual.h .
-
- This implementation simply returns 63, but can easily be overridden by a
- custom database backend that inherits most of its behavior from this one.
- """
-
- return 63
diff --git a/parts/django/django/db/backends/postgresql/version.py b/parts/django/django/db/backends/postgresql/version.py
deleted file mode 100644
index 8fd773e..0000000
--- a/parts/django/django/db/backends/postgresql/version.py
+++ /dev/null
@@ -1,31 +0,0 @@
-"""
-Extracts the version of the PostgreSQL server.
-"""
-
-import re
-
-# This reg-exp is intentionally fairly flexible here.
-# Needs to be able to handle stuff like:
-# PostgreSQL 8.3.6
-# EnterpriseDB 8.3
-# PostgreSQL 8.3 beta4
-# PostgreSQL 8.4beta1
-VERSION_RE = re.compile(r'\S+ (\d+)\.(\d+)\.?(\d+)?')
-
-def _parse_version(text):
- "Internal parsing method. Factored out for testing purposes."
- major, major2, minor = VERSION_RE.search(text).groups()
- try:
- return int(major), int(major2), int(minor)
- except (ValueError, TypeError):
- return int(major), int(major2), None
-
-def get_version(cursor):
- """
- Returns a tuple representing the major, minor and revision number of the
- server. For example, (7, 4, 1) or (8, 3, 4). The revision number will be
- None in the case of initial releases (e.g., 'PostgreSQL 8.3') or in the
- case of beta and prereleases ('PostgreSQL 8.4beta1').
- """
- cursor.execute("SELECT version()")
- return _parse_version(cursor.fetchone()[0])
diff --git a/parts/django/django/db/backends/postgresql_psycopg2/__init__.py b/parts/django/django/db/backends/postgresql_psycopg2/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/db/backends/postgresql_psycopg2/__init__.py
+++ /dev/null
diff --git a/parts/django/django/db/backends/postgresql_psycopg2/base.py b/parts/django/django/db/backends/postgresql_psycopg2/base.py
deleted file mode 100644
index c9f1af1..0000000
--- a/parts/django/django/db/backends/postgresql_psycopg2/base.py
+++ /dev/null
@@ -1,198 +0,0 @@
-"""
-PostgreSQL database backend for Django.
-
-Requires psycopg 2: http://initd.org/projects/psycopg2
-"""
-
-import sys
-
-from django.db import utils
-from django.db.backends import *
-from django.db.backends.signals import connection_created
-from django.db.backends.postgresql.operations import DatabaseOperations as PostgresqlDatabaseOperations
-from django.db.backends.postgresql.client import DatabaseClient
-from django.db.backends.postgresql.creation import DatabaseCreation
-from django.db.backends.postgresql.version import get_version
-from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection
-from django.utils.safestring import SafeUnicode, SafeString
-
-try:
- import psycopg2 as Database
- import psycopg2.extensions
-except ImportError, e:
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
-
-DatabaseError = Database.DatabaseError
-IntegrityError = Database.IntegrityError
-
-psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
-psycopg2.extensions.register_adapter(SafeString, psycopg2.extensions.QuotedString)
-psycopg2.extensions.register_adapter(SafeUnicode, psycopg2.extensions.QuotedString)
-
-class CursorWrapper(object):
- """
- A thin wrapper around psycopg2's normal cursor class so that we can catch
- particular exception instances and reraise them with the right types.
- """
-
- def __init__(self, cursor):
- self.cursor = cursor
-
- def execute(self, query, args=None):
- try:
- return self.cursor.execute(query, args)
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def executemany(self, query, args):
- try:
- return self.cursor.executemany(query, args)
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def __getattr__(self, attr):
- if attr in self.__dict__:
- return self.__dict__[attr]
- else:
- return getattr(self.cursor, attr)
-
- def __iter__(self):
- return iter(self.cursor)
-
-class DatabaseFeatures(BaseDatabaseFeatures):
- needs_datetime_string_cast = False
- can_return_id_from_insert = False
-
-class DatabaseOperations(PostgresqlDatabaseOperations):
- def last_executed_query(self, cursor, sql, params):
- # With psycopg2, cursor objects have a "query" attribute that is the
- # exact query sent to the database. See docs here:
- # http://www.initd.org/tracker/psycopg/wiki/psycopg2_documentation#postgresql-status-message-and-executed-query
- return cursor.query
-
- def return_insert_id(self):
- return "RETURNING %s", ()
-
-class DatabaseWrapper(BaseDatabaseWrapper):
- operators = {
- 'exact': '= %s',
- 'iexact': '= UPPER(%s)',
- 'contains': 'LIKE %s',
- 'icontains': 'LIKE UPPER(%s)',
- 'regex': '~ %s',
- 'iregex': '~* %s',
- 'gt': '> %s',
- 'gte': '>= %s',
- 'lt': '< %s',
- 'lte': '<= %s',
- 'startswith': 'LIKE %s',
- 'endswith': 'LIKE %s',
- 'istartswith': 'LIKE UPPER(%s)',
- 'iendswith': 'LIKE UPPER(%s)',
- }
-
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
-
- self.features = DatabaseFeatures()
- autocommit = self.settings_dict["OPTIONS"].get('autocommit', False)
- self.features.uses_autocommit = autocommit
- self._set_isolation_level(int(not autocommit))
- self.ops = DatabaseOperations(self)
- self.client = DatabaseClient(self)
- self.creation = DatabaseCreation(self)
- self.introspection = DatabaseIntrospection(self)
- self.validation = BaseDatabaseValidation(self)
-
- def _cursor(self):
- new_connection = False
- set_tz = False
- settings_dict = self.settings_dict
- if self.connection is None:
- new_connection = True
- set_tz = settings_dict.get('TIME_ZONE')
- if settings_dict['NAME'] == '':
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("You need to specify NAME in your Django settings file.")
- conn_params = {
- 'database': settings_dict['NAME'],
- }
- conn_params.update(settings_dict['OPTIONS'])
- if 'autocommit' in conn_params:
- del conn_params['autocommit']
- if settings_dict['USER']:
- conn_params['user'] = settings_dict['USER']
- if settings_dict['PASSWORD']:
- conn_params['password'] = settings_dict['PASSWORD']
- if settings_dict['HOST']:
- conn_params['host'] = settings_dict['HOST']
- if settings_dict['PORT']:
- conn_params['port'] = settings_dict['PORT']
- self.connection = Database.connect(**conn_params)
- self.connection.set_client_encoding('UTF8')
- self.connection.set_isolation_level(self.isolation_level)
- connection_created.send(sender=self.__class__, connection=self)
- cursor = self.connection.cursor()
- cursor.tzinfo_factory = None
- if new_connection:
- if set_tz:
- cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
- if not hasattr(self, '_version'):
- self.__class__._version = get_version(cursor)
- if self._version[0:2] < (8, 0):
- # No savepoint support for earlier version of PostgreSQL.
- self.features.uses_savepoints = False
- if self.features.uses_autocommit:
- if self._version[0:2] < (8, 2):
- # FIXME: Needs extra code to do reliable model insert
- # handling, so we forbid it for now.
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("You cannot use autocommit=True with PostgreSQL prior to 8.2 at the moment.")
- else:
- # FIXME: Eventually we're enable this by default for
- # versions that support it, but, right now, that's hard to
- # do without breaking other things (#10509).
- self.features.can_return_id_from_insert = True
- return CursorWrapper(cursor)
-
- def _enter_transaction_management(self, managed):
- """
- Switch the isolation level when needing transaction support, so that
- the same transaction is visible across all the queries.
- """
- if self.features.uses_autocommit and managed and not self.isolation_level:
- self._set_isolation_level(1)
-
- def _leave_transaction_management(self, managed):
- """
- If the normal operating mode is "autocommit", switch back to that when
- leaving transaction management.
- """
- if self.features.uses_autocommit and not managed and self.isolation_level:
- self._set_isolation_level(0)
-
- def _set_isolation_level(self, level):
- """
- Do all the related feature configurations for changing isolation
- levels. This doesn't touch the uses_autocommit feature, since that
- controls the movement *between* isolation levels.
- """
- assert level in (0, 1)
- try:
- if self.connection is not None:
- self.connection.set_isolation_level(level)
- finally:
- self.isolation_level = level
- self.features.uses_savepoints = bool(level)
-
- def _commit(self):
- if self.connection is not None:
- try:
- return self.connection.commit()
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
diff --git a/parts/django/django/db/backends/postgresql_psycopg2/introspection.py b/parts/django/django/db/backends/postgresql_psycopg2/introspection.py
deleted file mode 100644
index 83bd9b4..0000000
--- a/parts/django/django/db/backends/postgresql_psycopg2/introspection.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from django.db.backends.postgresql.introspection import DatabaseIntrospection as PostgresDatabaseIntrospection
-
-class DatabaseIntrospection(PostgresDatabaseIntrospection):
-
- def get_relations(self, cursor, table_name):
- """
- Returns a dictionary of {field_index: (field_index_other_table, other_table)}
- representing all relationships to the given table. Indexes are 0-based.
- """
- cursor.execute("""
- SELECT con.conkey, con.confkey, c2.relname
- FROM pg_constraint con, pg_class c1, pg_class c2
- WHERE c1.oid = con.conrelid
- AND c2.oid = con.confrelid
- AND c1.relname = %s
- AND con.contype = 'f'""", [table_name])
- relations = {}
- for row in cursor.fetchall():
- # row[0] and row[1] are single-item lists, so grab the single item.
- relations[row[0][0] - 1] = (row[1][0] - 1, row[2])
- return relations
diff --git a/parts/django/django/db/backends/signals.py b/parts/django/django/db/backends/signals.py
deleted file mode 100644
index c16a63f..0000000
--- a/parts/django/django/db/backends/signals.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.dispatch import Signal
-
-connection_created = Signal(providing_args=["connection"])
diff --git a/parts/django/django/db/backends/sqlite3/__init__.py b/parts/django/django/db/backends/sqlite3/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/db/backends/sqlite3/__init__.py
+++ /dev/null
diff --git a/parts/django/django/db/backends/sqlite3/base.py b/parts/django/django/db/backends/sqlite3/base.py
deleted file mode 100644
index 1ab2557..0000000
--- a/parts/django/django/db/backends/sqlite3/base.py
+++ /dev/null
@@ -1,247 +0,0 @@
-"""
-SQLite3 backend for django.
-
-Python 2.4 requires pysqlite2 (http://pysqlite.org/).
-
-Python 2.5 and later can use a pysqlite2 module or the sqlite3 module in the
-standard library.
-"""
-
-import re
-import sys
-
-from django.db import utils
-from django.db.backends import *
-from django.db.backends.signals import connection_created
-from django.db.backends.sqlite3.client import DatabaseClient
-from django.db.backends.sqlite3.creation import DatabaseCreation
-from django.db.backends.sqlite3.introspection import DatabaseIntrospection
-from django.utils.safestring import SafeString
-
-try:
- try:
- from pysqlite2 import dbapi2 as Database
- except ImportError, e1:
- from sqlite3 import dbapi2 as Database
-except ImportError, exc:
- import sys
- from django.core.exceptions import ImproperlyConfigured
- if sys.version_info < (2, 5, 0):
- module = 'pysqlite2 module'
- exc = e1
- else:
- module = 'either pysqlite2 or sqlite3 modules (tried in that order)'
- raise ImproperlyConfigured("Error loading %s: %s" % (module, exc))
-
-
-DatabaseError = Database.DatabaseError
-IntegrityError = Database.IntegrityError
-
-Database.register_converter("bool", lambda s: str(s) == '1')
-Database.register_converter("time", util.typecast_time)
-Database.register_converter("date", util.typecast_date)
-Database.register_converter("datetime", util.typecast_timestamp)
-Database.register_converter("timestamp", util.typecast_timestamp)
-Database.register_converter("TIMESTAMP", util.typecast_timestamp)
-Database.register_converter("decimal", util.typecast_decimal)
-Database.register_adapter(decimal.Decimal, util.rev_typecast_decimal)
-if Database.version_info >= (2,4,1):
- # Starting in 2.4.1, the str type is not accepted anymore, therefore,
- # we convert all str objects to Unicode
- # As registering a adapter for a primitive type causes a small
- # slow-down, this adapter is only registered for sqlite3 versions
- # needing it.
- Database.register_adapter(str, lambda s:s.decode('utf-8'))
- Database.register_adapter(SafeString, lambda s:s.decode('utf-8'))
-
-class DatabaseFeatures(BaseDatabaseFeatures):
- # SQLite cannot handle us only partially reading from a cursor's result set
- # and then writing the same rows to the database in another cursor. This
- # setting ensures we always read result sets fully into memory all in one
- # go.
- can_use_chunked_reads = False
-
-class DatabaseOperations(BaseDatabaseOperations):
- def date_extract_sql(self, lookup_type, field_name):
- # sqlite doesn't support extract, so we fake it with the user-defined
- # function django_extract that's registered in connect(). Note that
- # single quotes are used because this is a string (and could otherwise
- # cause a collision with a field name).
- return "django_extract('%s', %s)" % (lookup_type.lower(), field_name)
-
- def date_trunc_sql(self, lookup_type, field_name):
- # sqlite doesn't support DATE_TRUNC, so we fake it with a user-defined
- # function django_date_trunc that's registered in connect(). Note that
- # single quotes are used because this is a string (and could otherwise
- # cause a collision with a field name).
- return "django_date_trunc('%s', %s)" % (lookup_type.lower(), field_name)
-
- def drop_foreignkey_sql(self):
- return ""
-
- def pk_default_value(self):
- return 'NULL'
-
- def quote_name(self, name):
- if name.startswith('"') and name.endswith('"'):
- return name # Quoting once is enough.
- return '"%s"' % name
-
- def no_limit_value(self):
- return -1
-
- def sql_flush(self, style, tables, sequences):
- # NB: The generated SQL below is specific to SQLite
- # Note: The DELETE FROM... SQL generated below works for SQLite databases
- # because constraints don't exist
- sql = ['%s %s %s;' % \
- (style.SQL_KEYWORD('DELETE'),
- style.SQL_KEYWORD('FROM'),
- style.SQL_FIELD(self.quote_name(table))
- ) for table in tables]
- # Note: No requirement for reset of auto-incremented indices (cf. other
- # sql_flush() implementations). Just return SQL at this point
- return sql
-
- def year_lookup_bounds(self, value):
- first = '%s-01-01'
- second = '%s-12-31 23:59:59.999999'
- return [first % value, second % value]
-
- def convert_values(self, value, field):
- """SQLite returns floats when it should be returning decimals,
- and gets dates and datetimes wrong.
- For consistency with other backends, coerce when required.
- """
- internal_type = field.get_internal_type()
- if internal_type == 'DecimalField':
- return util.typecast_decimal(field.format_number(value))
- elif internal_type and internal_type.endswith('IntegerField') or internal_type == 'AutoField':
- return int(value)
- elif internal_type == 'DateField':
- return util.typecast_date(value)
- elif internal_type == 'DateTimeField':
- return util.typecast_timestamp(value)
- elif internal_type == 'TimeField':
- return util.typecast_time(value)
-
- # No field, or the field isn't known to be a decimal or integer
- return value
-
-class DatabaseWrapper(BaseDatabaseWrapper):
-
- # SQLite requires LIKE statements to include an ESCAPE clause if the value
- # being escaped has a percent or underscore in it.
- # See http://www.sqlite.org/lang_expr.html for an explanation.
- operators = {
- 'exact': '= %s',
- 'iexact': "LIKE %s ESCAPE '\\'",
- 'contains': "LIKE %s ESCAPE '\\'",
- 'icontains': "LIKE %s ESCAPE '\\'",
- 'regex': 'REGEXP %s',
- 'iregex': "REGEXP '(?i)' || %s",
- 'gt': '> %s',
- 'gte': '>= %s',
- 'lt': '< %s',
- 'lte': '<= %s',
- 'startswith': "LIKE %s ESCAPE '\\'",
- 'endswith': "LIKE %s ESCAPE '\\'",
- 'istartswith': "LIKE %s ESCAPE '\\'",
- 'iendswith': "LIKE %s ESCAPE '\\'",
- }
-
- def __init__(self, *args, **kwargs):
- super(DatabaseWrapper, self).__init__(*args, **kwargs)
-
- self.features = DatabaseFeatures()
- self.ops = DatabaseOperations()
- self.client = DatabaseClient(self)
- self.creation = DatabaseCreation(self)
- self.introspection = DatabaseIntrospection(self)
- self.validation = BaseDatabaseValidation(self)
-
- def _cursor(self):
- if self.connection is None:
- settings_dict = self.settings_dict
- if not settings_dict['NAME']:
- from django.core.exceptions import ImproperlyConfigured
- raise ImproperlyConfigured("Please fill out the database NAME in the settings module before using the database.")
- kwargs = {
- 'database': settings_dict['NAME'],
- 'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES,
- }
- kwargs.update(settings_dict['OPTIONS'])
- self.connection = Database.connect(**kwargs)
- # Register extract, date_trunc, and regexp functions.
- self.connection.create_function("django_extract", 2, _sqlite_extract)
- self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
- self.connection.create_function("regexp", 2, _sqlite_regexp)
- connection_created.send(sender=self.__class__, connection=self)
- return self.connection.cursor(factory=SQLiteCursorWrapper)
-
- def close(self):
- # If database is in memory, closing the connection destroys the
- # database. To prevent accidental data loss, ignore close requests on
- # an in-memory db.
- if self.settings_dict['NAME'] != ":memory:":
- BaseDatabaseWrapper.close(self)
-
-FORMAT_QMARK_REGEX = re.compile(r'(?![^%])%s')
-
-class SQLiteCursorWrapper(Database.Cursor):
- """
- Django uses "format" style placeholders, but pysqlite2 uses "qmark" style.
- This fixes it -- but note that if you want to use a literal "%s" in a query,
- you'll need to use "%%s".
- """
- def execute(self, query, params=()):
- query = self.convert_query(query)
- try:
- return Database.Cursor.execute(self, query, params)
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def executemany(self, query, param_list):
- query = self.convert_query(query)
- try:
- return Database.Cursor.executemany(self, query, param_list)
- except Database.IntegrityError, e:
- raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
- except Database.DatabaseError, e:
- raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
-
- def convert_query(self, query):
- return FORMAT_QMARK_REGEX.sub('?', query).replace('%%','%')
-
-def _sqlite_extract(lookup_type, dt):
- if dt is None:
- return None
- try:
- dt = util.typecast_timestamp(dt)
- except (ValueError, TypeError):
- return None
- if lookup_type == 'week_day':
- return (dt.isoweekday() % 7) + 1
- else:
- return getattr(dt, lookup_type)
-
-def _sqlite_date_trunc(lookup_type, dt):
- try:
- dt = util.typecast_timestamp(dt)
- except (ValueError, TypeError):
- return None
- if lookup_type == 'year':
- return "%i-01-01 00:00:00" % dt.year
- elif lookup_type == 'month':
- return "%i-%02i-01 00:00:00" % (dt.year, dt.month)
- elif lookup_type == 'day':
- return "%i-%02i-%02i 00:00:00" % (dt.year, dt.month, dt.day)
-
-def _sqlite_regexp(re_pattern, re_string):
- import re
- try:
- return bool(re.search(re_pattern, re_string))
- except:
- return False
diff --git a/parts/django/django/db/backends/sqlite3/client.py b/parts/django/django/db/backends/sqlite3/client.py
deleted file mode 100644
index 5b5b732..0000000
--- a/parts/django/django/db/backends/sqlite3/client.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import os
-import sys
-
-from django.db.backends import BaseDatabaseClient
-
-class DatabaseClient(BaseDatabaseClient):
- executable_name = 'sqlite3'
-
- def runshell(self):
- args = [self.executable_name,
- self.connection.settings_dict['NAME']]
- if os.name == 'nt':
- sys.exit(os.system(" ".join(args)))
- else:
- os.execvp(self.executable_name, args)
-
diff --git a/parts/django/django/db/backends/sqlite3/creation.py b/parts/django/django/db/backends/sqlite3/creation.py
deleted file mode 100644
index 0389707..0000000
--- a/parts/django/django/db/backends/sqlite3/creation.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import os
-import sys
-from django.db.backends.creation import BaseDatabaseCreation
-
-class DatabaseCreation(BaseDatabaseCreation):
- # SQLite doesn't actually support most of these types, but it "does the right
- # thing" given more verbose field definitions, so leave them as is so that
- # schema inspection is more useful.
- data_types = {
- 'AutoField': 'integer',
- 'BooleanField': 'bool',
- 'CharField': 'varchar(%(max_length)s)',
- 'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
- 'DateField': 'date',
- 'DateTimeField': 'datetime',
- 'DecimalField': 'decimal',
- 'FileField': 'varchar(%(max_length)s)',
- 'FilePathField': 'varchar(%(max_length)s)',
- 'FloatField': 'real',
- 'IntegerField': 'integer',
- 'BigIntegerField': 'bigint',
- 'IPAddressField': 'char(15)',
- 'NullBooleanField': 'bool',
- 'OneToOneField': 'integer',
- 'PositiveIntegerField': 'integer unsigned',
- 'PositiveSmallIntegerField': 'smallint unsigned',
- 'SlugField': 'varchar(%(max_length)s)',
- 'SmallIntegerField': 'smallint',
- 'TextField': 'text',
- 'TimeField': 'time',
- }
-
- def sql_for_pending_references(self, model, style, pending_references):
- "SQLite3 doesn't support constraints"
- return []
-
- def sql_remove_table_constraints(self, model, references_to_delete, style):
- "SQLite3 doesn't support constraints"
- return []
-
- def _create_test_db(self, verbosity, autoclobber):
- test_database_name = self.connection.settings_dict['TEST_NAME']
- if test_database_name and test_database_name != ":memory:":
- # Erase the old test database
- if verbosity >= 1:
- print "Destroying old test database..."
- if os.access(test_database_name, os.F_OK):
- if not autoclobber:
- confirm = raw_input("Type 'yes' if you would like to try deleting the test database '%s', or 'no' to cancel: " % test_database_name)
- if autoclobber or confirm == 'yes':
- try:
- if verbosity >= 1:
- print "Destroying old test database..."
- os.remove(test_database_name)
- except Exception, e:
- sys.stderr.write("Got an error deleting the old test database: %s\n" % e)
- sys.exit(2)
- else:
- print "Tests cancelled."
- sys.exit(1)
- if verbosity >= 1:
- print "Creating test database..."
- else:
- test_database_name = ":memory:"
- return test_database_name
-
- def _destroy_test_db(self, test_database_name, verbosity):
- if test_database_name and test_database_name != ":memory:":
- # Remove the SQLite database file
- os.remove(test_database_name)
diff --git a/parts/django/django/db/backends/sqlite3/introspection.py b/parts/django/django/db/backends/sqlite3/introspection.py
deleted file mode 100644
index c243e58..0000000
--- a/parts/django/django/db/backends/sqlite3/introspection.py
+++ /dev/null
@@ -1,141 +0,0 @@
-import re
-from django.db.backends import BaseDatabaseIntrospection
-
-# This light wrapper "fakes" a dictionary interface, because some SQLite data
-# types include variables in them -- e.g. "varchar(30)" -- and can't be matched
-# as a simple dictionary lookup.
-class FlexibleFieldLookupDict:
- # Maps SQL types to Django Field types. Some of the SQL types have multiple
- # entries here because SQLite allows for anything and doesn't normalize the
- # field type; it uses whatever was given.
- base_data_types_reverse = {
- 'bool': 'BooleanField',
- 'boolean': 'BooleanField',
- 'smallint': 'SmallIntegerField',
- 'smallint unsigned': 'PositiveSmallIntegerField',
- 'smallinteger': 'SmallIntegerField',
- 'int': 'IntegerField',
- 'integer': 'IntegerField',
- 'bigint': 'BigIntegerField',
- 'integer unsigned': 'PositiveIntegerField',
- 'decimal': 'DecimalField',
- 'real': 'FloatField',
- 'text': 'TextField',
- 'char': 'CharField',
- 'date': 'DateField',
- 'datetime': 'DateTimeField',
- 'time': 'TimeField',
- }
-
- def __getitem__(self, key):
- key = key.lower()
- try:
- return self.base_data_types_reverse[key]
- except KeyError:
- import re
- m = re.search(r'^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$', key)
- if m:
- return ('CharField', {'max_length': int(m.group(1))})
- raise KeyError
-
-class DatabaseIntrospection(BaseDatabaseIntrospection):
- data_types_reverse = FlexibleFieldLookupDict()
-
- def get_table_list(self, cursor):
- "Returns a list of table names in the current database."
- # Skip the sqlite_sequence system table used for autoincrement key
- # generation.
- cursor.execute("""
- SELECT name FROM sqlite_master
- WHERE type='table' AND NOT name='sqlite_sequence'
- ORDER BY name""")
- return [row[0] for row in cursor.fetchall()]
-
- def get_table_description(self, cursor, table_name):
- "Returns a description of the table, with the DB-API cursor.description interface."
- return [(info['name'], info['type'], None, None, None, None,
- info['null_ok']) for info in self._table_info(cursor, table_name)]
-
- def get_relations(self, cursor, table_name):
- """
- Returns a dictionary of {field_index: (field_index_other_table, other_table)}
- representing all relationships to the given table. Indexes are 0-based.
- """
-
- # Dictionary of relations to return
- relations = {}
-
- # Schema for this table
- cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s AND type = %s", [table_name, "table"])
- results = cursor.fetchone()[0].strip()
- results = results[results.index('(')+1:results.rindex(')')]
-
- # Walk through and look for references to other tables. SQLite doesn't
- # really have enforced references, but since it echoes out the SQL used
- # to create the table we can look for REFERENCES statements used there.
- for field_index, field_desc in enumerate(results.split(',')):
- field_desc = field_desc.strip()
- if field_desc.startswith("UNIQUE"):
- continue
-
- m = re.search('references (.*) \(["|](.*)["|]\)', field_desc, re.I)
- if not m:
- continue
-
- table, column = [s.strip('"') for s in m.groups()]
-
- cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s", [table])
- result = cursor.fetchone()
- if not result:
- continue
- other_table_results = result[0].strip()
- li, ri = other_table_results.index('('), other_table_results.rindex(')')
- other_table_results = other_table_results[li+1:ri]
-
-
- for other_index, other_desc in enumerate(other_table_results.split(',')):
- other_desc = other_desc.strip()
- if other_desc.startswith('UNIQUE'):
- continue
-
- name = other_desc.split(' ', 1)[0].strip('"')
- if name == column:
- relations[field_index] = (other_index, table)
- break
-
- return relations
-
- def get_indexes(self, cursor, table_name):
- """
- Returns a dictionary of fieldname -> infodict for the given table,
- where each infodict is in the format:
- {'primary_key': boolean representing whether it's the primary key,
- 'unique': boolean representing whether it's a unique index}
- """
- indexes = {}
- for info in self._table_info(cursor, table_name):
- indexes[info['name']] = {'primary_key': info['pk'] != 0,
- 'unique': False}
- cursor.execute('PRAGMA index_list(%s)' % self.connection.ops.quote_name(table_name))
- # seq, name, unique
- for index, unique in [(field[1], field[2]) for field in cursor.fetchall()]:
- if not unique:
- continue
- cursor.execute('PRAGMA index_info(%s)' % self.connection.ops.quote_name(index))
- info = cursor.fetchall()
- # Skip indexes across multiple fields
- if len(info) != 1:
- continue
- name = info[0][2] # seqno, cid, name
- indexes[name]['unique'] = True
- return indexes
-
- def _table_info(self, cursor, name):
- cursor.execute('PRAGMA table_info(%s)' % self.connection.ops.quote_name(name))
- # cid, name, type, notnull, dflt_value, pk
- return [{'name': field[1],
- 'type': field[2],
- 'null_ok': not field[3],
- 'pk': field[5] # undocumented
- } for field in cursor.fetchall()]
-
diff --git a/parts/django/django/db/backends/util.py b/parts/django/django/db/backends/util.py
deleted file mode 100644
index aad668e..0000000
--- a/parts/django/django/db/backends/util.py
+++ /dev/null
@@ -1,128 +0,0 @@
-import datetime
-import decimal
-from time import time
-
-from django.utils.hashcompat import md5_constructor
-
-class CursorDebugWrapper(object):
- def __init__(self, cursor, db):
- self.cursor = cursor
- self.db = db # Instance of a BaseDatabaseWrapper subclass
-
- def execute(self, sql, params=()):
- start = time()
- try:
- return self.cursor.execute(sql, params)
- finally:
- stop = time()
- sql = self.db.ops.last_executed_query(self.cursor, sql, params)
- self.db.queries.append({
- 'sql': sql,
- 'time': "%.3f" % (stop - start),
- })
-
- def executemany(self, sql, param_list):
- start = time()
- try:
- return self.cursor.executemany(sql, param_list)
- finally:
- stop = time()
- self.db.queries.append({
- 'sql': '%s times: %s' % (len(param_list), sql),
- 'time': "%.3f" % (stop - start),
- })
-
- def __getattr__(self, attr):
- if attr in self.__dict__:
- return self.__dict__[attr]
- else:
- return getattr(self.cursor, attr)
-
- def __iter__(self):
- return iter(self.cursor)
-
-###############################################
-# Converters from database (string) to Python #
-###############################################
-
-def typecast_date(s):
- return s and datetime.date(*map(int, s.split('-'))) or None # returns None if s is null
-
-def typecast_time(s): # does NOT store time zone information
- if not s: return None
- hour, minutes, seconds = s.split(':')
- if '.' in seconds: # check whether seconds have a fractional part
- seconds, microseconds = seconds.split('.')
- else:
- microseconds = '0'
- return datetime.time(int(hour), int(minutes), int(seconds), int(float('.'+microseconds) * 1000000))
-
-def typecast_timestamp(s): # does NOT store time zone information
- # "2005-07-29 15:48:00.590358-05"
- # "2005-07-29 09:56:00-05"
- if not s: return None
- if not ' ' in s: return typecast_date(s)
- d, t = s.split()
- # Extract timezone information, if it exists. Currently we just throw
- # it away, but in the future we may make use of it.
- if '-' in t:
- t, tz = t.split('-', 1)
- tz = '-' + tz
- elif '+' in t:
- t, tz = t.split('+', 1)
- tz = '+' + tz
- else:
- tz = ''
- dates = d.split('-')
- times = t.split(':')
- seconds = times[2]
- if '.' in seconds: # check whether seconds have a fractional part
- seconds, microseconds = seconds.split('.')
- else:
- microseconds = '0'
- return datetime.datetime(int(dates[0]), int(dates[1]), int(dates[2]),
- int(times[0]), int(times[1]), int(seconds), int((microseconds + '000000')[:6]))
-
-def typecast_boolean(s):
- if s is None: return None
- if not s: return False
- return str(s)[0].lower() == 't'
-
-def typecast_decimal(s):
- if s is None or s == '':
- return None
- return decimal.Decimal(s)
-
-###############################################
-# Converters from Python to database (string) #
-###############################################
-
-def rev_typecast_boolean(obj, d):
- return obj and '1' or '0'
-
-def rev_typecast_decimal(d):
- if d is None:
- return None
- return str(d)
-
-def truncate_name(name, length=None):
- """Shortens a string to a repeatable mangled version with the given length.
- """
- if length is None or len(name) <= length:
- return name
-
- hash = md5_constructor(name).hexdigest()[:4]
-
- return '%s%s' % (name[:length-4], hash)
-
-def format_number(value, max_digits, decimal_places):
- """
- Formats a number into a string with the requisite number of digits and
- decimal places.
- """
- if isinstance(value, decimal.Decimal):
- context = decimal.getcontext().copy()
- context.prec = max_digits
- return u'%s' % str(value.quantize(decimal.Decimal(".1") ** decimal_places, context=context))
- else:
- return u"%.*f" % (decimal_places, value)
diff --git a/parts/django/django/db/models/__init__.py b/parts/django/django/db/models/__init__.py
deleted file mode 100644
index c28bce8..0000000
--- a/parts/django/django/db/models/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from django.conf import settings
-from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
-from django.db import connection
-from django.db.models.loading import get_apps, get_app, get_models, get_model, register_models
-from django.db.models.query import Q
-from django.db.models.expressions import F
-from django.db.models.manager import Manager
-from django.db.models.base import Model
-from django.db.models.aggregates import *
-from django.db.models.fields import *
-from django.db.models.fields.subclassing import SubfieldBase
-from django.db.models.fields.files import FileField, ImageField
-from django.db.models.fields.related import ForeignKey, OneToOneField, ManyToManyField, ManyToOneRel, ManyToManyRel, OneToOneRel
-from django.db.models import signals
-
-# Admin stages.
-ADD, CHANGE, BOTH = 1, 2, 3
-
-def permalink(func):
- """
- Decorator that calls urlresolvers.reverse() to return a URL using
- parameters returned by the decorated function "func".
-
- "func" should be a function that returns a tuple in one of the
- following formats:
- (viewname, viewargs)
- (viewname, viewargs, viewkwargs)
- """
- from django.core.urlresolvers import reverse
- def inner(*args, **kwargs):
- bits = func(*args, **kwargs)
- return reverse(bits[0], None, *bits[1:3])
- return inner
diff --git a/parts/django/django/db/models/aggregates.py b/parts/django/django/db/models/aggregates.py
deleted file mode 100644
index a2349cf..0000000
--- a/parts/django/django/db/models/aggregates.py
+++ /dev/null
@@ -1,67 +0,0 @@
-"""
-Classes to represent the definitions of aggregate functions.
-"""
-
-class Aggregate(object):
- """
- Default Aggregate definition.
- """
- def __init__(self, lookup, **extra):
- """Instantiate a new aggregate.
-
- * lookup is the field on which the aggregate operates.
- * extra is a dictionary of additional data to provide for the
- aggregate definition
-
- Also utilizes the class variables:
- * name, the identifier for this aggregate function.
- """
- self.lookup = lookup
- self.extra = extra
-
- def _default_alias(self):
- return '%s__%s' % (self.lookup, self.name.lower())
- default_alias = property(_default_alias)
-
- def add_to_query(self, query, alias, col, source, is_summary):
- """Add the aggregate to the nominated query.
-
- This method is used to convert the generic Aggregate definition into a
- backend-specific definition.
-
- * query is the backend-specific query instance to which the aggregate
- is to be added.
- * col is a column reference describing the subject field
- of the aggregate. It can be an alias, or a tuple describing
- a table and column name.
- * source is the underlying field or aggregate definition for
- the column reference. If the aggregate is not an ordinal or
- computed type, this reference is used to determine the coerced
- output type of the aggregate.
- * is_summary is a boolean that is set True if the aggregate is a
- summary value rather than an annotation.
- """
- klass = getattr(query.aggregates_module, self.name)
- aggregate = klass(col, source=source, is_summary=is_summary, **self.extra)
- query.aggregates[alias] = aggregate
-
-class Avg(Aggregate):
- name = 'Avg'
-
-class Count(Aggregate):
- name = 'Count'
-
-class Max(Aggregate):
- name = 'Max'
-
-class Min(Aggregate):
- name = 'Min'
-
-class StdDev(Aggregate):
- name = 'StdDev'
-
-class Sum(Aggregate):
- name = 'Sum'
-
-class Variance(Aggregate):
- name = 'Variance'
diff --git a/parts/django/django/db/models/base.py b/parts/django/django/db/models/base.py
deleted file mode 100644
index 2711774..0000000
--- a/parts/django/django/db/models/base.py
+++ /dev/null
@@ -1,998 +0,0 @@
-import types
-import sys
-from itertools import izip
-import django.db.models.manager # Imported to register signal handler.
-from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError, ValidationError, NON_FIELD_ERRORS
-from django.core import validators
-from django.db.models.fields import AutoField, FieldDoesNotExist
-from django.db.models.fields.related import (OneToOneRel, ManyToOneRel,
- OneToOneField, add_lazy_relation)
-from django.db.models.query import delete_objects, Q
-from django.db.models.query_utils import CollectedObjects, DeferredAttribute
-from django.db.models.options import Options
-from django.db import connections, router, transaction, DatabaseError, DEFAULT_DB_ALIAS
-from django.db.models import signals
-from django.db.models.loading import register_models, get_model
-from django.utils.translation import ugettext_lazy as _
-import django.utils.copycompat as copy
-from django.utils.functional import curry, update_wrapper
-from django.utils.encoding import smart_str, force_unicode
-from django.utils.text import get_text_list, capfirst
-from django.conf import settings
-
-class ModelBase(type):
- """
- Metaclass for all models.
- """
- def __new__(cls, name, bases, attrs):
- super_new = super(ModelBase, cls).__new__
- parents = [b for b in bases if isinstance(b, ModelBase)]
- if not parents:
- # If this isn't a subclass of Model, don't do anything special.
- return super_new(cls, name, bases, attrs)
-
- # Create the class.
- module = attrs.pop('__module__')
- new_class = super_new(cls, name, bases, {'__module__': module})
- attr_meta = attrs.pop('Meta', None)
- abstract = getattr(attr_meta, 'abstract', False)
- if not attr_meta:
- meta = getattr(new_class, 'Meta', None)
- else:
- meta = attr_meta
- base_meta = getattr(new_class, '_meta', None)
-
- if getattr(meta, 'app_label', None) is None:
- # Figure out the app_label by looking one level up.
- # For 'django.contrib.sites.models', this would be 'sites'.
- model_module = sys.modules[new_class.__module__]
- kwargs = {"app_label": model_module.__name__.split('.')[-2]}
- else:
- kwargs = {}
-
- new_class.add_to_class('_meta', Options(meta, **kwargs))
- if not abstract:
- new_class.add_to_class('DoesNotExist', subclass_exception('DoesNotExist',
- tuple(x.DoesNotExist
- for x in parents if hasattr(x, '_meta') and not x._meta.abstract)
- or (ObjectDoesNotExist,), module))
- new_class.add_to_class('MultipleObjectsReturned', subclass_exception('MultipleObjectsReturned',
- tuple(x.MultipleObjectsReturned
- for x in parents if hasattr(x, '_meta') and not x._meta.abstract)
- or (MultipleObjectsReturned,), module))
- if base_meta and not base_meta.abstract:
- # Non-abstract child classes inherit some attributes from their
- # non-abstract parent (unless an ABC comes before it in the
- # method resolution order).
- if not hasattr(meta, 'ordering'):
- new_class._meta.ordering = base_meta.ordering
- if not hasattr(meta, 'get_latest_by'):
- new_class._meta.get_latest_by = base_meta.get_latest_by
-
- is_proxy = new_class._meta.proxy
-
- if getattr(new_class, '_default_manager', None):
- if not is_proxy:
- # Multi-table inheritance doesn't inherit default manager from
- # parents.
- new_class._default_manager = None
- new_class._base_manager = None
- else:
- # Proxy classes do inherit parent's default manager, if none is
- # set explicitly.
- new_class._default_manager = new_class._default_manager._copy_to_model(new_class)
- new_class._base_manager = new_class._base_manager._copy_to_model(new_class)
-
- # Bail out early if we have already created this class.
- m = get_model(new_class._meta.app_label, name, False)
- if m is not None:
- return m
-
- # Add all attributes to the class.
- for obj_name, obj in attrs.items():
- new_class.add_to_class(obj_name, obj)
-
- # All the fields of any type declared on this model
- new_fields = new_class._meta.local_fields + \
- new_class._meta.local_many_to_many + \
- new_class._meta.virtual_fields
- field_names = set([f.name for f in new_fields])
-
- # Basic setup for proxy models.
- if is_proxy:
- base = None
- for parent in [cls for cls in parents if hasattr(cls, '_meta')]:
- if parent._meta.abstract:
- if parent._meta.fields:
- raise TypeError("Abstract base class containing model fields not permitted for proxy model '%s'." % name)
- else:
- continue
- if base is not None:
- raise TypeError("Proxy model '%s' has more than one non-abstract model base class." % name)
- else:
- base = parent
- if base is None:
- raise TypeError("Proxy model '%s' has no non-abstract model base class." % name)
- if (new_class._meta.local_fields or
- new_class._meta.local_many_to_many):
- raise FieldError("Proxy model '%s' contains model fields." % name)
- while base._meta.proxy:
- base = base._meta.proxy_for_model
- new_class._meta.setup_proxy(base)
-
- # Do the appropriate setup for any model parents.
- o2o_map = dict([(f.rel.to, f) for f in new_class._meta.local_fields
- if isinstance(f, OneToOneField)])
-
- for base in parents:
- original_base = base
- if not hasattr(base, '_meta'):
- # Things without _meta aren't functional models, so they're
- # uninteresting parents.
- continue
-
- parent_fields = base._meta.local_fields + base._meta.local_many_to_many
- # Check for clashes between locally declared fields and those
- # on the base classes (we cannot handle shadowed fields at the
- # moment).
- for field in parent_fields:
- if field.name in field_names:
- raise FieldError('Local field %r in class %r clashes '
- 'with field of similar name from '
- 'base class %r' %
- (field.name, name, base.__name__))
- if not base._meta.abstract:
- # Concrete classes...
- while base._meta.proxy:
- # Skip over a proxy class to the "real" base it proxies.
- base = base._meta.proxy_for_model
- if base in o2o_map:
- field = o2o_map[base]
- elif not is_proxy:
- attr_name = '%s_ptr' % base._meta.module_name
- field = OneToOneField(base, name=attr_name,
- auto_created=True, parent_link=True)
- new_class.add_to_class(attr_name, field)
- else:
- field = None
- new_class._meta.parents[base] = field
- else:
- # .. and abstract ones.
- for field in parent_fields:
- new_class.add_to_class(field.name, copy.deepcopy(field))
-
- # Pass any non-abstract parent classes onto child.
- new_class._meta.parents.update(base._meta.parents)
-
- # Inherit managers from the abstract base classes.
- new_class.copy_managers(base._meta.abstract_managers)
-
- # Proxy models inherit the non-abstract managers from their base,
- # unless they have redefined any of them.
- if is_proxy:
- new_class.copy_managers(original_base._meta.concrete_managers)
-
- # Inherit virtual fields (like GenericForeignKey) from the parent
- # class
- for field in base._meta.virtual_fields:
- if base._meta.abstract and field.name in field_names:
- raise FieldError('Local field %r in class %r clashes '\
- 'with field of similar name from '\
- 'abstract base class %r' % \
- (field.name, name, base.__name__))
- new_class.add_to_class(field.name, copy.deepcopy(field))
-
- if abstract:
- # Abstract base models can't be instantiated and don't appear in
- # the list of models for an app. We do the final setup for them a
- # little differently from normal models.
- attr_meta.abstract = False
- new_class.Meta = attr_meta
- return new_class
-
- new_class._prepare()
- register_models(new_class._meta.app_label, new_class)
-
- # Because of the way imports happen (recursively), we may or may not be
- # the first time this model tries to register with the framework. There
- # should only be one class for each model, so we always return the
- # registered version.
- return get_model(new_class._meta.app_label, name, False)
-
- def copy_managers(cls, base_managers):
- # This is in-place sorting of an Options attribute, but that's fine.
- base_managers.sort()
- for _, mgr_name, manager in base_managers:
- val = getattr(cls, mgr_name, None)
- if not val or val is manager:
- new_manager = manager._copy_to_model(cls)
- cls.add_to_class(mgr_name, new_manager)
-
- def add_to_class(cls, name, value):
- if hasattr(value, 'contribute_to_class'):
- value.contribute_to_class(cls, name)
- else:
- setattr(cls, name, value)
-
- def _prepare(cls):
- """
- Creates some methods once self._meta has been populated.
- """
- opts = cls._meta
- opts._prepare(cls)
-
- if opts.order_with_respect_to:
- cls.get_next_in_order = curry(cls._get_next_or_previous_in_order, is_next=True)
- cls.get_previous_in_order = curry(cls._get_next_or_previous_in_order, is_next=False)
- # defer creating accessors on the foreign class until we are
- # certain it has been created
- def make_foreign_order_accessors(field, model, cls):
- setattr(
- field.rel.to,
- 'get_%s_order' % cls.__name__.lower(),
- curry(method_get_order, cls)
- )
- setattr(
- field.rel.to,
- 'set_%s_order' % cls.__name__.lower(),
- curry(method_set_order, cls)
- )
- add_lazy_relation(
- cls,
- opts.order_with_respect_to,
- opts.order_with_respect_to.rel.to,
- make_foreign_order_accessors
- )
-
- # Give the class a docstring -- its definition.
- if cls.__doc__ is None:
- cls.__doc__ = "%s(%s)" % (cls.__name__, ", ".join([f.attname for f in opts.fields]))
-
- if hasattr(cls, 'get_absolute_url'):
- cls.get_absolute_url = update_wrapper(curry(get_absolute_url, opts, cls.get_absolute_url),
- cls.get_absolute_url)
-
- signals.class_prepared.send(sender=cls)
-
-class ModelState(object):
- """
- A class for storing instance state
- """
- def __init__(self, db=None):
- self.db = db
- # If true, uniqueness validation checks will consider this a new, as-yet-unsaved object.
- # Necessary for correct validation of new instances of objects with explicit (non-auto) PKs.
- # This impacts validation only; it has no effect on the actual save.
- self.adding = True
-
-class Model(object):
- __metaclass__ = ModelBase
- _deferred = False
-
- def __init__(self, *args, **kwargs):
- signals.pre_init.send(sender=self.__class__, args=args, kwargs=kwargs)
-
- # Set up the storage for instance state
- self._state = ModelState()
-
- # There is a rather weird disparity here; if kwargs, it's set, then args
- # overrides it. It should be one or the other; don't duplicate the work
- # The reason for the kwargs check is that standard iterator passes in by
- # args, and instantiation for iteration is 33% faster.
- args_len = len(args)
- if args_len > len(self._meta.fields):
- # Daft, but matches old exception sans the err msg.
- raise IndexError("Number of args exceeds number of fields")
-
- fields_iter = iter(self._meta.fields)
- if not kwargs:
- # The ordering of the izip calls matter - izip throws StopIteration
- # when an iter throws it. So if the first iter throws it, the second
- # is *not* consumed. We rely on this, so don't change the order
- # without changing the logic.
- for val, field in izip(args, fields_iter):
- setattr(self, field.attname, val)
- else:
- # Slower, kwargs-ready version.
- for val, field in izip(args, fields_iter):
- setattr(self, field.attname, val)
- kwargs.pop(field.name, None)
- # Maintain compatibility with existing calls.
- if isinstance(field.rel, ManyToOneRel):
- kwargs.pop(field.attname, None)
-
- # Now we're left with the unprocessed fields that *must* come from
- # keywords, or default.
-
- for field in fields_iter:
- is_related_object = False
- # This slightly odd construct is so that we can access any
- # data-descriptor object (DeferredAttribute) without triggering its
- # __get__ method.
- if (field.attname not in kwargs and
- isinstance(self.__class__.__dict__.get(field.attname), DeferredAttribute)):
- # This field will be populated on request.
- continue
- if kwargs:
- if isinstance(field.rel, ManyToOneRel):
- try:
- # Assume object instance was passed in.
- rel_obj = kwargs.pop(field.name)
- is_related_object = True
- except KeyError:
- try:
- # Object instance wasn't passed in -- must be an ID.
- val = kwargs.pop(field.attname)
- except KeyError:
- val = field.get_default()
- else:
- # Object instance was passed in. Special case: You can
- # pass in "None" for related objects if it's allowed.
- if rel_obj is None and field.null:
- val = None
- else:
- try:
- val = kwargs.pop(field.attname)
- except KeyError:
- # This is done with an exception rather than the
- # default argument on pop because we don't want
- # get_default() to be evaluated, and then not used.
- # Refs #12057.
- val = field.get_default()
- else:
- val = field.get_default()
- if is_related_object:
- # If we are passed a related instance, set it using the
- # field.name instead of field.attname (e.g. "user" instead of
- # "user_id") so that the object gets properly cached (and type
- # checked) by the RelatedObjectDescriptor.
- setattr(self, field.name, rel_obj)
- else:
- setattr(self, field.attname, val)
-
- if kwargs:
- for prop in kwargs.keys():
- try:
- if isinstance(getattr(self.__class__, prop), property):
- setattr(self, prop, kwargs.pop(prop))
- except AttributeError:
- pass
- if kwargs:
- raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0])
- signals.post_init.send(sender=self.__class__, instance=self)
-
- def __repr__(self):
- try:
- u = unicode(self)
- except (UnicodeEncodeError, UnicodeDecodeError):
- u = '[Bad Unicode data]'
- return smart_str(u'<%s: %s>' % (self.__class__.__name__, u))
-
- def __str__(self):
- if hasattr(self, '__unicode__'):
- return force_unicode(self).encode('utf-8')
- return '%s object' % self.__class__.__name__
-
- def __eq__(self, other):
- return isinstance(other, self.__class__) and self._get_pk_val() == other._get_pk_val()
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __hash__(self):
- return hash(self._get_pk_val())
-
- def __reduce__(self):
- """
- Provide pickling support. Normally, this just dispatches to Python's
- standard handling. However, for models with deferred field loading, we
- need to do things manually, as they're dynamically created classes and
- only module-level classes can be pickled by the default path.
- """
- data = self.__dict__
- model = self.__class__
- # The obvious thing to do here is to invoke super().__reduce__()
- # for the non-deferred case. Don't do that.
- # On Python 2.4, there is something wierd with __reduce__,
- # and as a result, the super call will cause an infinite recursion.
- # See #10547 and #12121.
- defers = []
- pk_val = None
- if self._deferred:
- from django.db.models.query_utils import deferred_class_factory
- factory = deferred_class_factory
- for field in self._meta.fields:
- if isinstance(self.__class__.__dict__.get(field.attname),
- DeferredAttribute):
- defers.append(field.attname)
- if pk_val is None:
- # The pk_val and model values are the same for all
- # DeferredAttribute classes, so we only need to do this
- # once.
- obj = self.__class__.__dict__[field.attname]
- model = obj.model_ref()
- else:
- factory = simple_class_factory
- return (model_unpickle, (model, defers, factory), data)
-
- def _get_pk_val(self, meta=None):
- if not meta:
- meta = self._meta
- return getattr(self, meta.pk.attname)
-
- def _set_pk_val(self, value):
- return setattr(self, self._meta.pk.attname, value)
-
- pk = property(_get_pk_val, _set_pk_val)
-
- def serializable_value(self, field_name):
- """
- Returns the value of the field name for this instance. If the field is
- a foreign key, returns the id value, instead of the object. If there's
- no Field object with this name on the model, the model attribute's
- value is returned directly.
-
- Used to serialize a field's value (in the serializer, or form output,
- for example). Normally, you would just access the attribute directly
- and not use this method.
- """
- try:
- field = self._meta.get_field_by_name(field_name)[0]
- except FieldDoesNotExist:
- return getattr(self, field_name)
- return getattr(self, field.attname)
-
- def save(self, force_insert=False, force_update=False, using=None):
- """
- Saves the current instance. Override this in a subclass if you want to
- control the saving process.
-
- The 'force_insert' and 'force_update' parameters can be used to insist
- that the "save" must be an SQL insert or update (or equivalent for
- non-SQL backends), respectively. Normally, they should not be set.
- """
- if force_insert and force_update:
- raise ValueError("Cannot force both insert and updating in model saving.")
- self.save_base(using=using, force_insert=force_insert, force_update=force_update)
-
- save.alters_data = True
-
- def save_base(self, raw=False, cls=None, origin=None, force_insert=False,
- force_update=False, using=None):
- """
- Does the heavy-lifting involved in saving. Subclasses shouldn't need to
- override this method. It's separate from save() in order to hide the
- need for overrides of save() to pass around internal-only parameters
- ('raw', 'cls', and 'origin').
- """
- using = using or router.db_for_write(self.__class__, instance=self)
- connection = connections[using]
- assert not (force_insert and force_update)
- if cls is None:
- cls = self.__class__
- meta = cls._meta
- if not meta.proxy:
- origin = cls
- else:
- meta = cls._meta
-
- if origin and not meta.auto_created:
- signals.pre_save.send(sender=origin, instance=self, raw=raw)
-
- # If we are in a raw save, save the object exactly as presented.
- # That means that we don't try to be smart about saving attributes
- # that might have come from the parent class - we just save the
- # attributes we have been given to the class we have been given.
- # We also go through this process to defer the save of proxy objects
- # to their actual underlying model.
- if not raw or meta.proxy:
- if meta.proxy:
- org = cls
- else:
- org = None
- for parent, field in meta.parents.items():
- # At this point, parent's primary key field may be unknown
- # (for example, from administration form which doesn't fill
- # this field). If so, fill it.
- if field and getattr(self, parent._meta.pk.attname) is None and getattr(self, field.attname) is not None:
- setattr(self, parent._meta.pk.attname, getattr(self, field.attname))
-
- self.save_base(cls=parent, origin=org, using=using)
-
- if field:
- setattr(self, field.attname, self._get_pk_val(parent._meta))
- if meta.proxy:
- return
-
- if not meta.proxy:
- non_pks = [f for f in meta.local_fields if not f.primary_key]
-
- # First, try an UPDATE. If that doesn't update anything, do an INSERT.
- pk_val = self._get_pk_val(meta)
- pk_set = pk_val is not None
- record_exists = True
- manager = cls._base_manager
- if pk_set:
- # Determine whether a record with the primary key already exists.
- if (force_update or (not force_insert and
- manager.using(using).filter(pk=pk_val).exists())):
- # It does already exist, so do an UPDATE.
- if force_update or non_pks:
- values = [(f, None, (raw and getattr(self, f.attname) or f.pre_save(self, False))) for f in non_pks]
- rows = manager.using(using).filter(pk=pk_val)._update(values)
- if force_update and not rows:
- raise DatabaseError("Forced update did not affect any rows.")
- else:
- record_exists = False
- if not pk_set or not record_exists:
- if meta.order_with_respect_to:
- # If this is a model with an order_with_respect_to
- # autopopulate the _order field
- field = meta.order_with_respect_to
- order_value = manager.using(using).filter(**{field.name: getattr(self, field.attname)}).count()
- setattr(self, '_order', order_value)
-
- if not pk_set:
- if force_update:
- raise ValueError("Cannot force an update in save() with no primary key.")
- values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True), connection=connection))
- for f in meta.local_fields if not isinstance(f, AutoField)]
- else:
- values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True), connection=connection))
- for f in meta.local_fields]
-
- record_exists = False
-
- update_pk = bool(meta.has_auto_field and not pk_set)
- if values:
- # Create a new record.
- result = manager._insert(values, return_id=update_pk, using=using)
- else:
- # Create a new record with defaults for everything.
- result = manager._insert([(meta.pk, connection.ops.pk_default_value())], return_id=update_pk, raw_values=True, using=using)
-
- if update_pk:
- setattr(self, meta.pk.attname, result)
- transaction.commit_unless_managed(using=using)
-
- # Store the database on which the object was saved
- self._state.db = using
- # Once saved, this is no longer a to-be-added instance.
- self._state.adding = False
-
- # Signal that the save is complete
- if origin and not meta.auto_created:
- signals.post_save.send(sender=origin, instance=self,
- created=(not record_exists), raw=raw)
-
-
- save_base.alters_data = True
-
- def _collect_sub_objects(self, seen_objs, parent=None, nullable=False):
- """
- Recursively populates seen_objs with all objects related to this
- object.
-
- When done, seen_objs.items() will be in the format:
- [(model_class, {pk_val: obj, pk_val: obj, ...}),
- (model_class, {pk_val: obj, pk_val: obj, ...}), ...]
- """
- pk_val = self._get_pk_val()
- if seen_objs.add(self.__class__, pk_val, self,
- type(parent), parent, nullable):
- return
-
- for related in self._meta.get_all_related_objects():
- rel_opts_name = related.get_accessor_name()
- if not related.field.rel.multiple:
- try:
- sub_obj = getattr(self, rel_opts_name)
- except ObjectDoesNotExist:
- pass
- else:
- sub_obj._collect_sub_objects(seen_objs, self, related.field.null)
- else:
- # To make sure we can access all elements, we can't use the
- # normal manager on the related object. So we work directly
- # with the descriptor object.
- for cls in self.__class__.mro():
- if rel_opts_name in cls.__dict__:
- rel_descriptor = cls.__dict__[rel_opts_name]
- break
- else:
- # in the case of a hidden fkey just skip it, it'll get
- # processed as an m2m
- if not related.field.rel.is_hidden():
- raise AssertionError("Should never get here.")
- else:
- continue
- delete_qs = rel_descriptor.delete_manager(self).all()
- for sub_obj in delete_qs:
- sub_obj._collect_sub_objects(seen_objs, self, related.field.null)
-
- for related in self._meta.get_all_related_many_to_many_objects():
- if related.field.rel.through:
- db = router.db_for_write(related.field.rel.through.__class__, instance=self)
- opts = related.field.rel.through._meta
- reverse_field_name = related.field.m2m_reverse_field_name()
- nullable = opts.get_field(reverse_field_name).null
- filters = {reverse_field_name: self}
- for sub_obj in related.field.rel.through._base_manager.using(db).filter(**filters):
- sub_obj._collect_sub_objects(seen_objs, self, nullable)
-
- for f in self._meta.many_to_many:
- if f.rel.through:
- db = router.db_for_write(f.rel.through.__class__, instance=self)
- opts = f.rel.through._meta
- field_name = f.m2m_field_name()
- nullable = opts.get_field(field_name).null
- filters = {field_name: self}
- for sub_obj in f.rel.through._base_manager.using(db).filter(**filters):
- sub_obj._collect_sub_objects(seen_objs, self, nullable)
- else:
- # m2m-ish but with no through table? GenericRelation: cascade delete
- for sub_obj in f.value_from_object(self).all():
- # Generic relations not enforced by db constraints, thus we can set
- # nullable=True, order does not matter
- sub_obj._collect_sub_objects(seen_objs, self, True)
-
- # Handle any ancestors (for the model-inheritance case). We do this by
- # traversing to the most remote parent classes -- those with no parents
- # themselves -- and then adding those instances to the collection. That
- # will include all the child instances down to "self".
- parent_stack = [p for p in self._meta.parents.values() if p is not None]
- while parent_stack:
- link = parent_stack.pop()
- parent_obj = getattr(self, link.name)
- if parent_obj._meta.parents:
- parent_stack.extend(parent_obj._meta.parents.values())
- continue
- # At this point, parent_obj is base class (no ancestor models). So
- # delete it and all its descendents.
- parent_obj._collect_sub_objects(seen_objs)
-
- def delete(self, using=None):
- using = using or router.db_for_write(self.__class__, instance=self)
- assert self._get_pk_val() is not None, "%s object can't be deleted because its %s attribute is set to None." % (self._meta.object_name, self._meta.pk.attname)
-
- # Find all the objects than need to be deleted.
- seen_objs = CollectedObjects()
- self._collect_sub_objects(seen_objs)
-
- # Actually delete the objects.
- delete_objects(seen_objs, using)
-
- delete.alters_data = True
-
- def _get_FIELD_display(self, field):
- value = getattr(self, field.attname)
- return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True)
-
- def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
- op = is_next and 'gt' or 'lt'
- order = not is_next and '-' or ''
- param = smart_str(getattr(self, field.attname))
- q = Q(**{'%s__%s' % (field.name, op): param})
- q = q|Q(**{field.name: param, 'pk__%s' % op: self.pk})
- qs = self.__class__._default_manager.using(self._state.db).filter(**kwargs).filter(q).order_by('%s%s' % (order, field.name), '%spk' % order)
- try:
- return qs[0]
- except IndexError:
- raise self.DoesNotExist("%s matching query does not exist." % self.__class__._meta.object_name)
-
- def _get_next_or_previous_in_order(self, is_next):
- cachename = "__%s_order_cache" % is_next
- if not hasattr(self, cachename):
- op = is_next and 'gt' or 'lt'
- order = not is_next and '-_order' or '_order'
- order_field = self._meta.order_with_respect_to
- obj = self._default_manager.filter(**{
- order_field.name: getattr(self, order_field.attname)
- }).filter(**{
- '_order__%s' % op: self._default_manager.values('_order').filter(**{
- self._meta.pk.name: self.pk
- })
- }).order_by(order)[:1].get()
- setattr(self, cachename, obj)
- return getattr(self, cachename)
-
- def prepare_database_save(self, unused):
- return self.pk
-
- def clean(self):
- """
- Hook for doing any extra model-wide validation after clean() has been
- called on every field by self.clean_fields. Any ValidationError raised
- by this method will not be associated with a particular field; it will
- have a special-case association with the field defined by NON_FIELD_ERRORS.
- """
- pass
-
- def validate_unique(self, exclude=None):
- """
- Checks unique constraints on the model and raises ``ValidationError``
- if any failed.
- """
- unique_checks, date_checks = self._get_unique_checks(exclude=exclude)
-
- errors = self._perform_unique_checks(unique_checks)
- date_errors = self._perform_date_checks(date_checks)
-
- for k, v in date_errors.items():
- errors.setdefault(k, []).extend(v)
-
- if errors:
- raise ValidationError(errors)
-
- def _get_unique_checks(self, exclude=None):
- """
- Gather a list of checks to perform. Since validate_unique could be
- called from a ModelForm, some fields may have been excluded; we can't
- perform a unique check on a model that is missing fields involved
- in that check.
- Fields that did not validate should also be exluded, but they need
- to be passed in via the exclude argument.
- """
- if exclude is None:
- exclude = []
- unique_checks = []
-
- unique_togethers = [(self.__class__, self._meta.unique_together)]
- for parent_class in self._meta.parents.keys():
- if parent_class._meta.unique_together:
- unique_togethers.append((parent_class, parent_class._meta.unique_together))
-
- for model_class, unique_together in unique_togethers:
- for check in unique_together:
- for name in check:
- # If this is an excluded field, don't add this check.
- if name in exclude:
- break
- else:
- unique_checks.append((model_class, tuple(check)))
-
- # These are checks for the unique_for_<date/year/month>.
- date_checks = []
-
- # Gather a list of checks for fields declared as unique and add them to
- # the list of checks.
-
- fields_with_class = [(self.__class__, self._meta.local_fields)]
- for parent_class in self._meta.parents.keys():
- fields_with_class.append((parent_class, parent_class._meta.local_fields))
-
- for model_class, fields in fields_with_class:
- for f in fields:
- name = f.name
- if name in exclude:
- continue
- if f.unique:
- unique_checks.append((model_class, (name,)))
- if f.unique_for_date and f.unique_for_date not in exclude:
- date_checks.append((model_class, 'date', name, f.unique_for_date))
- if f.unique_for_year and f.unique_for_year not in exclude:
- date_checks.append((model_class, 'year', name, f.unique_for_year))
- if f.unique_for_month and f.unique_for_month not in exclude:
- date_checks.append((model_class, 'month', name, f.unique_for_month))
- return unique_checks, date_checks
-
- def _perform_unique_checks(self, unique_checks):
- errors = {}
-
- for model_class, unique_check in unique_checks:
- # Try to look up an existing object with the same values as this
- # object's values for all the unique field.
-
- lookup_kwargs = {}
- for field_name in unique_check:
- f = self._meta.get_field(field_name)
- lookup_value = getattr(self, f.attname)
- if lookup_value is None:
- # no value, skip the lookup
- continue
- if f.primary_key and not self._state.adding:
- # no need to check for unique primary key when editing
- continue
- lookup_kwargs[str(field_name)] = lookup_value
-
- # some fields were skipped, no reason to do the check
- if len(unique_check) != len(lookup_kwargs.keys()):
- continue
-
- qs = model_class._default_manager.filter(**lookup_kwargs)
-
- # Exclude the current object from the query if we are editing an
- # instance (as opposed to creating a new one)
- if not self._state.adding and self.pk is not None:
- qs = qs.exclude(pk=self.pk)
-
- if qs.exists():
- if len(unique_check) == 1:
- key = unique_check[0]
- else:
- key = NON_FIELD_ERRORS
- errors.setdefault(key, []).append(self.unique_error_message(model_class, unique_check))
-
- return errors
-
- def _perform_date_checks(self, date_checks):
- errors = {}
- for model_class, lookup_type, field, unique_for in date_checks:
- lookup_kwargs = {}
- # there's a ticket to add a date lookup, we can remove this special
- # case if that makes it's way in
- date = getattr(self, unique_for)
- if lookup_type == 'date':
- lookup_kwargs['%s__day' % unique_for] = date.day
- lookup_kwargs['%s__month' % unique_for] = date.month
- lookup_kwargs['%s__year' % unique_for] = date.year
- else:
- lookup_kwargs['%s__%s' % (unique_for, lookup_type)] = getattr(date, lookup_type)
- lookup_kwargs[field] = getattr(self, field)
-
- qs = model_class._default_manager.filter(**lookup_kwargs)
- # Exclude the current object from the query if we are editing an
- # instance (as opposed to creating a new one)
- if not self._state.adding and self.pk is not None:
- qs = qs.exclude(pk=self.pk)
-
- if qs.exists():
- errors.setdefault(field, []).append(
- self.date_error_message(lookup_type, field, unique_for)
- )
- return errors
-
- def date_error_message(self, lookup_type, field, unique_for):
- opts = self._meta
- return _(u"%(field_name)s must be unique for %(date_field)s %(lookup)s.") % {
- 'field_name': unicode(capfirst(opts.get_field(field).verbose_name)),
- 'date_field': unicode(capfirst(opts.get_field(unique_for).verbose_name)),
- 'lookup': lookup_type,
- }
-
- def unique_error_message(self, model_class, unique_check):
- opts = model_class._meta
- model_name = capfirst(opts.verbose_name)
-
- # A unique field
- if len(unique_check) == 1:
- field_name = unique_check[0]
- field_label = capfirst(opts.get_field(field_name).verbose_name)
- # Insert the error into the error dict, very sneaky
- return _(u"%(model_name)s with this %(field_label)s already exists.") % {
- 'model_name': unicode(model_name),
- 'field_label': unicode(field_label)
- }
- # unique_together
- else:
- field_labels = map(lambda f: capfirst(opts.get_field(f).verbose_name), unique_check)
- field_labels = get_text_list(field_labels, _('and'))
- return _(u"%(model_name)s with this %(field_label)s already exists.") % {
- 'model_name': unicode(model_name),
- 'field_label': unicode(field_labels)
- }
-
- def full_clean(self, exclude=None):
- """
- Calls clean_fields, clean, and validate_unique, on the model,
- and raises a ``ValidationError`` for any errors that occured.
- """
- errors = {}
- if exclude is None:
- exclude = []
-
- try:
- self.clean_fields(exclude=exclude)
- except ValidationError, e:
- errors = e.update_error_dict(errors)
-
- # Form.clean() is run even if other validation fails, so do the
- # same with Model.clean() for consistency.
- try:
- self.clean()
- except ValidationError, e:
- errors = e.update_error_dict(errors)
-
- # Run unique checks, but only for fields that passed validation.
- for name in errors.keys():
- if name != NON_FIELD_ERRORS and name not in exclude:
- exclude.append(name)
- try:
- self.validate_unique(exclude=exclude)
- except ValidationError, e:
- errors = e.update_error_dict(errors)
-
- if errors:
- raise ValidationError(errors)
-
- def clean_fields(self, exclude=None):
- """
- Cleans all fields and raises a ValidationError containing message_dict
- of all validation errors if any occur.
- """
- if exclude is None:
- exclude = []
-
- errors = {}
- for f in self._meta.fields:
- if f.name in exclude:
- continue
- # Skip validation for empty fields with blank=True. The developer
- # is responsible for making sure they have a valid value.
- raw_value = getattr(self, f.attname)
- if f.blank and raw_value in validators.EMPTY_VALUES:
- continue
- try:
- setattr(self, f.attname, f.clean(raw_value, self))
- except ValidationError, e:
- errors[f.name] = e.messages
-
- if errors:
- raise ValidationError(errors)
-
-
-############################################
-# HELPER FUNCTIONS (CURRIED MODEL METHODS) #
-############################################
-
-# ORDERING METHODS #########################
-
-def method_set_order(ordered_obj, self, id_list, using=None):
- if using is None:
- using = DEFAULT_DB_ALIAS
- rel_val = getattr(self, ordered_obj._meta.order_with_respect_to.rel.field_name)
- order_name = ordered_obj._meta.order_with_respect_to.name
- # FIXME: It would be nice if there was an "update many" version of update
- # for situations like this.
- for i, j in enumerate(id_list):
- ordered_obj.objects.filter(**{'pk': j, order_name: rel_val}).update(_order=i)
- transaction.commit_unless_managed(using=using)
-
-
-def method_get_order(ordered_obj, self):
- rel_val = getattr(self, ordered_obj._meta.order_with_respect_to.rel.field_name)
- order_name = ordered_obj._meta.order_with_respect_to.name
- pk_name = ordered_obj._meta.pk.name
- return [r[pk_name] for r in
- ordered_obj.objects.filter(**{order_name: rel_val}).values(pk_name)]
-
-
-##############################################
-# HELPER FUNCTIONS (CURRIED MODEL FUNCTIONS) #
-##############################################
-
-def get_absolute_url(opts, func, self, *args, **kwargs):
- return settings.ABSOLUTE_URL_OVERRIDES.get('%s.%s' % (opts.app_label, opts.module_name), func)(self, *args, **kwargs)
-
-
-########
-# MISC #
-########
-
-class Empty(object):
- pass
-
-def simple_class_factory(model, attrs):
- """Used to unpickle Models without deferred fields.
-
- We need to do this the hard way, rather than just using
- the default __reduce__ implementation, because of a
- __deepcopy__ problem in Python 2.4
- """
- return model
-
-def model_unpickle(model, attrs, factory):
- """
- Used to unpickle Model subclasses with deferred fields.
- """
- cls = factory(model, attrs)
- return cls.__new__(cls)
-model_unpickle.__safe_for_unpickle__ = True
-
-if sys.version_info < (2, 5):
- # Prior to Python 2.5, Exception was an old-style class
- def subclass_exception(name, parents, unused):
- return types.ClassType(name, parents, {})
-else:
- def subclass_exception(name, parents, module):
- return type(name, parents, {'__module__': module})
diff --git a/parts/django/django/db/models/expressions.py b/parts/django/django/db/models/expressions.py
deleted file mode 100644
index f760e4c..0000000
--- a/parts/django/django/db/models/expressions.py
+++ /dev/null
@@ -1,113 +0,0 @@
-from datetime import datetime
-
-from django.utils import tree
-from django.utils.copycompat import deepcopy
-
-class ExpressionNode(tree.Node):
- """
- Base class for all query expressions.
- """
- # Arithmetic connectors
- ADD = '+'
- SUB = '-'
- MUL = '*'
- DIV = '/'
- MOD = '%%' # This is a quoted % operator - it is quoted
- # because it can be used in strings that also
- # have parameter substitution.
-
- # Bitwise operators
- AND = '&'
- OR = '|'
-
- def __init__(self, children=None, connector=None, negated=False):
- if children is not None and len(children) > 1 and connector is None:
- raise TypeError('You have to specify a connector.')
- super(ExpressionNode, self).__init__(children, connector, negated)
-
- def _combine(self, other, connector, reversed, node=None):
- if reversed:
- obj = ExpressionNode([other], connector)
- obj.add(node or self, connector)
- else:
- obj = node or ExpressionNode([self], connector)
- obj.add(other, connector)
- return obj
-
- ###################
- # VISITOR METHODS #
- ###################
-
- def prepare(self, evaluator, query, allow_joins):
- return evaluator.prepare_node(self, query, allow_joins)
-
- def evaluate(self, evaluator, qn, connection):
- return evaluator.evaluate_node(self, qn, connection)
-
- #############
- # OPERATORS #
- #############
-
- def __add__(self, other):
- return self._combine(other, self.ADD, False)
-
- def __sub__(self, other):
- return self._combine(other, self.SUB, False)
-
- def __mul__(self, other):
- return self._combine(other, self.MUL, False)
-
- def __div__(self, other):
- return self._combine(other, self.DIV, False)
-
- def __mod__(self, other):
- return self._combine(other, self.MOD, False)
-
- def __and__(self, other):
- return self._combine(other, self.AND, False)
-
- def __or__(self, other):
- return self._combine(other, self.OR, False)
-
- def __radd__(self, other):
- return self._combine(other, self.ADD, True)
-
- def __rsub__(self, other):
- return self._combine(other, self.SUB, True)
-
- def __rmul__(self, other):
- return self._combine(other, self.MUL, True)
-
- def __rdiv__(self, other):
- return self._combine(other, self.DIV, True)
-
- def __rmod__(self, other):
- return self._combine(other, self.MOD, True)
-
- def __rand__(self, other):
- return self._combine(other, self.AND, True)
-
- def __ror__(self, other):
- return self._combine(other, self.OR, True)
-
- def prepare_database_save(self, unused):
- return self
-
-class F(ExpressionNode):
- """
- An expression representing the value of the given field.
- """
- def __init__(self, name):
- super(F, self).__init__(None, None, False)
- self.name = name
-
- def __deepcopy__(self, memodict):
- obj = super(F, self).__deepcopy__(memodict)
- obj.name = self.name
- return obj
-
- def prepare(self, evaluator, query, allow_joins):
- return evaluator.prepare_leaf(self, query, allow_joins)
-
- def evaluate(self, evaluator, qn, connection):
- return evaluator.evaluate_leaf(self, qn, connection)
diff --git a/parts/django/django/db/models/fields/__init__.py b/parts/django/django/db/models/fields/__init__.py
deleted file mode 100644
index fd0a295..0000000
--- a/parts/django/django/db/models/fields/__init__.py
+++ /dev/null
@@ -1,1141 +0,0 @@
-import datetime
-import decimal
-import re
-import time
-import math
-from itertools import tee
-
-import django.utils.copycompat as copy
-
-from django.db import connection
-from django.db.models.fields.subclassing import LegacyConnection
-from django.db.models.query_utils import QueryWrapper
-from django.conf import settings
-from django import forms
-from django.core import exceptions, validators
-from django.utils.datastructures import DictWrapper
-from django.utils.functional import curry
-from django.utils.text import capfirst
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode, force_unicode, smart_str
-from django.utils import datetime_safe
-
-class NOT_PROVIDED:
- pass
-
-# The values to use for "blank" in SelectFields. Will be appended to the start of most "choices" lists.
-BLANK_CHOICE_DASH = [("", "---------")]
-BLANK_CHOICE_NONE = [("", "None")]
-
-class FieldDoesNotExist(Exception):
- pass
-
-# A guide to Field parameters:
-#
-# * name: The name of the field specifed in the model.
-# * attname: The attribute to use on the model object. This is the same as
-# "name", except in the case of ForeignKeys, where "_id" is
-# appended.
-# * db_column: The db_column specified in the model (or None).
-# * column: The database column for this field. This is the same as
-# "attname", except if db_column is specified.
-#
-# Code that introspects values, or does other dynamic things, should use
-# attname. For example, this gets the primary key value of object "obj":
-#
-# getattr(obj, opts.pk.attname)
-
-class Field(object):
- """Base class for all field types"""
- __metaclass__ = LegacyConnection
-
- # Designates whether empty strings fundamentally are allowed at the
- # database level.
- empty_strings_allowed = True
-
- # These track each time a Field instance is created. Used to retain order.
- # The auto_creation_counter is used for fields that Django implicitly
- # creates, creation_counter is used for all user-specified fields.
- creation_counter = 0
- auto_creation_counter = -1
- default_validators = [] # Default set of validators
- default_error_messages = {
- 'invalid_choice': _(u'Value %r is not a valid choice.'),
- 'null': _(u'This field cannot be null.'),
- 'blank': _(u'This field cannot be blank.'),
- }
-
- # Generic field type description, usually overriden by subclasses
- def _description(self):
- return _(u'Field of type: %(field_type)s') % {
- 'field_type': self.__class__.__name__
- }
- description = property(_description)
-
- def __init__(self, verbose_name=None, name=None, primary_key=False,
- max_length=None, unique=False, blank=False, null=False,
- db_index=False, rel=None, default=NOT_PROVIDED, editable=True,
- serialize=True, unique_for_date=None, unique_for_month=None,
- unique_for_year=None, choices=None, help_text='', db_column=None,
- db_tablespace=None, auto_created=False, validators=[],
- error_messages=None):
- self.name = name
- self.verbose_name = verbose_name
- self.primary_key = primary_key
- self.max_length, self._unique = max_length, unique
- self.blank, self.null = blank, null
- # Oracle treats the empty string ('') as null, so coerce the null
- # option whenever '' is a possible value.
- if self.empty_strings_allowed and connection.features.interprets_empty_strings_as_nulls:
- self.null = True
- self.rel = rel
- self.default = default
- self.editable = editable
- self.serialize = serialize
- self.unique_for_date, self.unique_for_month = unique_for_date, unique_for_month
- self.unique_for_year = unique_for_year
- self._choices = choices or []
- self.help_text = help_text
- self.db_column = db_column
- self.db_tablespace = db_tablespace or settings.DEFAULT_INDEX_TABLESPACE
- self.auto_created = auto_created
-
- # Set db_index to True if the field has a relationship and doesn't explicitly set db_index.
- self.db_index = db_index
-
- # Adjust the appropriate creation counter, and save our local copy.
- if auto_created:
- self.creation_counter = Field.auto_creation_counter
- Field.auto_creation_counter -= 1
- else:
- self.creation_counter = Field.creation_counter
- Field.creation_counter += 1
-
- self.validators = self.default_validators + validators
-
- messages = {}
- for c in reversed(self.__class__.__mro__):
- messages.update(getattr(c, 'default_error_messages', {}))
- messages.update(error_messages or {})
- self.error_messages = messages
-
- def __cmp__(self, other):
- # This is needed because bisect does not take a comparison function.
- return cmp(self.creation_counter, other.creation_counter)
-
- def __deepcopy__(self, memodict):
- # We don't have to deepcopy very much here, since most things are not
- # intended to be altered after initial creation.
- obj = copy.copy(self)
- if self.rel:
- obj.rel = copy.copy(self.rel)
- memodict[id(self)] = obj
- return obj
-
- def to_python(self, value):
- """
- Converts the input value into the expected Python data type, raising
- django.core.exceptions.ValidationError if the data can't be converted.
- Returns the converted value. Subclasses should override this.
- """
- return value
-
- def run_validators(self, value):
- if value in validators.EMPTY_VALUES:
- return
-
- errors = []
- for v in self.validators:
- try:
- v(value)
- except exceptions.ValidationError, e:
- if hasattr(e, 'code') and e.code in self.error_messages:
- message = self.error_messages[e.code]
- if e.params:
- message = message % e.params
- errors.append(message)
- else:
- errors.extend(e.messages)
- if errors:
- raise exceptions.ValidationError(errors)
-
- def validate(self, value, model_instance):
- """
- Validates value and throws ValidationError. Subclasses should override
- this to provide validation logic.
- """
- if not self.editable:
- # Skip validation for non-editable fields.
- return
- if self._choices and value:
- for option_key, option_value in self.choices:
- if isinstance(option_value, (list, tuple)):
- # This is an optgroup, so look inside the group for options.
- for optgroup_key, optgroup_value in option_value:
- if value == optgroup_key:
- return
- elif value == option_key:
- return
- raise exceptions.ValidationError(self.error_messages['invalid_choice'] % value)
-
- if value is None and not self.null:
- raise exceptions.ValidationError(self.error_messages['null'])
-
- if not self.blank and value in validators.EMPTY_VALUES:
- raise exceptions.ValidationError(self.error_messages['blank'])
-
- def clean(self, value, model_instance):
- """
- Convert the value's type and run validation. Validation errors from to_python
- and validate are propagated. The correct value is returned if no error is
- raised.
- """
- value = self.to_python(value)
- self.validate(value, model_instance)
- self.run_validators(value)
- return value
-
- def db_type(self, connection):
- """
- Returns the database column data type for this field, for the provided
- connection.
- """
- # The default implementation of this method looks at the
- # backend-specific DATA_TYPES dictionary, looking up the field by its
- # "internal type".
- #
- # A Field class can implement the get_internal_type() method to specify
- # which *preexisting* Django Field class it's most similar to -- i.e.,
- # an XMLField is represented by a TEXT column type, which is the same
- # as the TextField Django field type, which means XMLField's
- # get_internal_type() returns 'TextField'.
- #
- # But the limitation of the get_internal_type() / data_types approach
- # is that it cannot handle database column types that aren't already
- # mapped to one of the built-in Django field types. In this case, you
- # can implement db_type() instead of get_internal_type() to specify
- # exactly which wacky database column type you want to use.
- data = DictWrapper(self.__dict__, connection.ops.quote_name, "qn_")
- try:
- return connection.creation.data_types[self.get_internal_type()] % data
- except KeyError:
- return None
-
- def unique(self):
- return self._unique or self.primary_key
- unique = property(unique)
-
- def set_attributes_from_name(self, name):
- self.name = name
- self.attname, self.column = self.get_attname_column()
- if self.verbose_name is None and name:
- self.verbose_name = name.replace('_', ' ')
-
- def contribute_to_class(self, cls, name):
- self.set_attributes_from_name(name)
- self.model = cls
- cls._meta.add_field(self)
- if self.choices:
- setattr(cls, 'get_%s_display' % self.name, curry(cls._get_FIELD_display, field=self))
-
- def get_attname(self):
- return self.name
-
- def get_attname_column(self):
- attname = self.get_attname()
- column = self.db_column or attname
- return attname, column
-
- def get_cache_name(self):
- return '_%s_cache' % self.name
-
- def get_internal_type(self):
- return self.__class__.__name__
-
- def pre_save(self, model_instance, add):
- "Returns field's value just before saving."
- return getattr(model_instance, self.attname)
-
- def get_prep_value(self, value):
- "Perform preliminary non-db specific value checks and conversions."
- return value
-
- def get_db_prep_value(self, value, connection, prepared=False):
- """Returns field's value prepared for interacting with the database
- backend.
-
- Used by the default implementations of ``get_db_prep_save``and
- `get_db_prep_lookup```
- """
- if not prepared:
- value = self.get_prep_value(value)
- return value
-
- def get_db_prep_save(self, value, connection):
- "Returns field's value prepared for saving into a database."
- return self.get_db_prep_value(value, connection=connection, prepared=False)
-
- def get_prep_lookup(self, lookup_type, value):
- "Perform preliminary non-db specific lookup checks and conversions"
- if hasattr(value, 'prepare'):
- return value.prepare()
- if hasattr(value, '_prepare'):
- return value._prepare()
-
- if lookup_type in (
- 'regex', 'iregex', 'month', 'day', 'week_day', 'search',
- 'contains', 'icontains', 'iexact', 'startswith', 'istartswith',
- 'endswith', 'iendswith', 'isnull'
- ):
- return value
- elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte'):
- return self.get_prep_value(value)
- elif lookup_type in ('range', 'in'):
- return [self.get_prep_value(v) for v in value]
- elif lookup_type == 'year':
- try:
- return int(value)
- except ValueError:
- raise ValueError("The __year lookup type requires an integer argument")
-
- raise TypeError("Field has invalid lookup: %s" % lookup_type)
-
- def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
- "Returns field's value prepared for database lookup."
- if not prepared:
- value = self.get_prep_lookup(lookup_type, value)
- if hasattr(value, 'get_compiler'):
- value = value.get_compiler(connection=connection)
- if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
- # If the value has a relabel_aliases method, it will need to
- # be invoked before the final SQL is evaluated
- if hasattr(value, 'relabel_aliases'):
- return value
- if hasattr(value, 'as_sql'):
- sql, params = value.as_sql()
- else:
- sql, params = value._as_sql(connection=connection)
- return QueryWrapper(('(%s)' % sql), params)
-
- if lookup_type in ('regex', 'iregex', 'month', 'day', 'week_day', 'search'):
- return [value]
- elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte'):
- return [self.get_db_prep_value(value, connection=connection, prepared=prepared)]
- elif lookup_type in ('range', 'in'):
- return [self.get_db_prep_value(v, connection=connection, prepared=prepared) for v in value]
- elif lookup_type in ('contains', 'icontains'):
- return ["%%%s%%" % connection.ops.prep_for_like_query(value)]
- elif lookup_type == 'iexact':
- return [connection.ops.prep_for_iexact_query(value)]
- elif lookup_type in ('startswith', 'istartswith'):
- return ["%s%%" % connection.ops.prep_for_like_query(value)]
- elif lookup_type in ('endswith', 'iendswith'):
- return ["%%%s" % connection.ops.prep_for_like_query(value)]
- elif lookup_type == 'isnull':
- return []
- elif lookup_type == 'year':
- if self.get_internal_type() == 'DateField':
- return connection.ops.year_lookup_bounds_for_date_field(value)
- else:
- return connection.ops.year_lookup_bounds(value)
-
- def has_default(self):
- "Returns a boolean of whether this field has a default value."
- return self.default is not NOT_PROVIDED
-
- def get_default(self):
- "Returns the default value for this field."
- if self.has_default():
- if callable(self.default):
- return self.default()
- return force_unicode(self.default, strings_only=True)
- if not self.empty_strings_allowed or (self.null and not connection.features.interprets_empty_strings_as_nulls):
- return None
- return ""
-
- def get_validator_unique_lookup_type(self):
- return '%s__exact' % self.name
-
- def get_choices(self, include_blank=True, blank_choice=BLANK_CHOICE_DASH):
- """Returns choices with a default blank choices included, for use
- as SelectField choices for this field."""
- first_choice = include_blank and blank_choice or []
- if self.choices:
- return first_choice + list(self.choices)
- rel_model = self.rel.to
- if hasattr(self.rel, 'get_related_field'):
- lst = [(getattr(x, self.rel.get_related_field().attname), smart_unicode(x)) for x in rel_model._default_manager.complex_filter(self.rel.limit_choices_to)]
- else:
- lst = [(x._get_pk_val(), smart_unicode(x)) for x in rel_model._default_manager.complex_filter(self.rel.limit_choices_to)]
- return first_choice + lst
-
- def get_choices_default(self):
- return self.get_choices()
-
- def get_flatchoices(self, include_blank=True, blank_choice=BLANK_CHOICE_DASH):
- "Returns flattened choices with a default blank choice included."
- first_choice = include_blank and blank_choice or []
- return first_choice + list(self.flatchoices)
-
- def _get_val_from_obj(self, obj):
- if obj is not None:
- return getattr(obj, self.attname)
- else:
- return self.get_default()
-
- def value_to_string(self, obj):
- """
- Returns a string value of this field from the passed obj.
- This is used by the serialization framework.
- """
- return smart_unicode(self._get_val_from_obj(obj))
-
- def bind(self, fieldmapping, original, bound_field_class):
- return bound_field_class(self, fieldmapping, original)
-
- def _get_choices(self):
- if hasattr(self._choices, 'next'):
- choices, self._choices = tee(self._choices)
- return choices
- else:
- return self._choices
- choices = property(_get_choices)
-
- def _get_flatchoices(self):
- """Flattened version of choices tuple."""
- flat = []
- for choice, value in self.choices:
- if isinstance(value, (list, tuple)):
- flat.extend(value)
- else:
- flat.append((choice,value))
- return flat
- flatchoices = property(_get_flatchoices)
-
- def save_form_data(self, instance, data):
- setattr(instance, self.name, data)
-
- def formfield(self, form_class=forms.CharField, **kwargs):
- "Returns a django.forms.Field instance for this database Field."
- defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
- if self.has_default():
- if callable(self.default):
- defaults['initial'] = self.default
- defaults['show_hidden_initial'] = True
- else:
- defaults['initial'] = self.get_default()
- if self.choices:
- # Fields with choices get special treatment.
- include_blank = self.blank or not (self.has_default() or 'initial' in kwargs)
- defaults['choices'] = self.get_choices(include_blank=include_blank)
- defaults['coerce'] = self.to_python
- if self.null:
- defaults['empty_value'] = None
- form_class = forms.TypedChoiceField
- # Many of the subclass-specific formfield arguments (min_value,
- # max_value) don't apply for choice fields, so be sure to only pass
- # the values that TypedChoiceField will understand.
- for k in kwargs.keys():
- if k not in ('coerce', 'empty_value', 'choices', 'required',
- 'widget', 'label', 'initial', 'help_text',
- 'error_messages', 'show_hidden_initial'):
- del kwargs[k]
- defaults.update(kwargs)
- return form_class(**defaults)
-
- def value_from_object(self, obj):
- "Returns the value of this field in the given model instance."
- return getattr(obj, self.attname)
-
-class AutoField(Field):
- description = _("Integer")
-
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _(u'This value must be an integer.'),
- }
- def __init__(self, *args, **kwargs):
- assert kwargs.get('primary_key', False) is True, "%ss must have primary_key=True." % self.__class__.__name__
- kwargs['blank'] = True
- Field.__init__(self, *args, **kwargs)
-
- def get_internal_type(self):
- return "AutoField"
-
- def to_python(self, value):
- if value is None:
- return value
- try:
- return int(value)
- except (TypeError, ValueError):
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def validate(self, value, model_instance):
- pass
-
- def get_prep_value(self, value):
- if value is None:
- return None
- return int(value)
-
- def contribute_to_class(self, cls, name):
- assert not cls._meta.has_auto_field, "A model can't have more than one AutoField."
- super(AutoField, self).contribute_to_class(cls, name)
- cls._meta.has_auto_field = True
- cls._meta.auto_field = self
-
- def formfield(self, **kwargs):
- return None
-
-class BooleanField(Field):
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _(u'This value must be either True or False.'),
- }
- description = _("Boolean (Either True or False)")
- def __init__(self, *args, **kwargs):
- kwargs['blank'] = True
- if 'default' not in kwargs and not kwargs.get('null'):
- kwargs['default'] = False
- Field.__init__(self, *args, **kwargs)
-
- def get_internal_type(self):
- return "BooleanField"
-
- def to_python(self, value):
- if value in (True, False):
- # if value is 1 or 0 than it's equal to True or False, but we want
- # to return a true bool for semantic reasons.
- return bool(value)
- if value in ('t', 'True', '1'):
- return True
- if value in ('f', 'False', '0'):
- return False
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def get_prep_lookup(self, lookup_type, value):
- # Special-case handling for filters coming from a Web request (e.g. the
- # admin interface). Only works for scalar values (not lists). If you're
- # passing in a list, you might as well make things the right type when
- # constructing the list.
- if value in ('1', '0'):
- value = bool(int(value))
- return super(BooleanField, self).get_prep_lookup(lookup_type, value)
-
- def get_prep_value(self, value):
- if value is None:
- return None
- return bool(value)
-
- def formfield(self, **kwargs):
- # Unlike most fields, BooleanField figures out include_blank from
- # self.null instead of self.blank.
- if self.choices:
- include_blank = self.null or not (self.has_default() or 'initial' in kwargs)
- defaults = {'choices': self.get_choices(include_blank=include_blank)}
- else:
- defaults = {'form_class': forms.BooleanField}
- defaults.update(kwargs)
- return super(BooleanField, self).formfield(**defaults)
-
-class CharField(Field):
- description = _("String (up to %(max_length)s)")
-
- def __init__(self, *args, **kwargs):
- super(CharField, self).__init__(*args, **kwargs)
- self.validators.append(validators.MaxLengthValidator(self.max_length))
-
- def get_internal_type(self):
- return "CharField"
-
- def to_python(self, value):
- if isinstance(value, basestring) or value is None:
- return value
- return smart_unicode(value)
-
- def get_prep_value(self, value):
- return self.to_python(value)
-
- def formfield(self, **kwargs):
- # Passing max_length to forms.CharField means that the value's length
- # will be validated twice. This is considered acceptable since we want
- # the value in the form field (to pass into widget for example).
- defaults = {'max_length': self.max_length}
- defaults.update(kwargs)
- return super(CharField, self).formfield(**defaults)
-
-# TODO: Maybe move this into contrib, because it's specialized.
-class CommaSeparatedIntegerField(CharField):
- default_validators = [validators.validate_comma_separated_integer_list]
- description = _("Comma-separated integers")
-
- def formfield(self, **kwargs):
- defaults = {
- 'error_messages': {
- 'invalid': _(u'Enter only digits separated by commas.'),
- }
- }
- defaults.update(kwargs)
- return super(CommaSeparatedIntegerField, self).formfield(**defaults)
-
-ansi_date_re = re.compile(r'^\d{4}-\d{1,2}-\d{1,2}$')
-
-class DateField(Field):
- description = _("Date (without time)")
-
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _('Enter a valid date in YYYY-MM-DD format.'),
- 'invalid_date': _('Invalid date: %s'),
- }
- def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
- self.auto_now, self.auto_now_add = auto_now, auto_now_add
- #HACKs : auto_now_add/auto_now should be done as a default or a pre_save.
- if auto_now or auto_now_add:
- kwargs['editable'] = False
- kwargs['blank'] = True
- Field.__init__(self, verbose_name, name, **kwargs)
-
- def get_internal_type(self):
- return "DateField"
-
- def to_python(self, value):
- if value is None:
- return value
- if isinstance(value, datetime.datetime):
- return value.date()
- if isinstance(value, datetime.date):
- return value
-
- if not ansi_date_re.search(value):
- raise exceptions.ValidationError(self.error_messages['invalid'])
- # Now that we have the date string in YYYY-MM-DD format, check to make
- # sure it's a valid date.
- # We could use time.strptime here and catch errors, but datetime.date
- # produces much friendlier error messages.
- year, month, day = map(int, value.split('-'))
- try:
- return datetime.date(year, month, day)
- except ValueError, e:
- msg = self.error_messages['invalid_date'] % _(str(e))
- raise exceptions.ValidationError(msg)
-
- def pre_save(self, model_instance, add):
- if self.auto_now or (self.auto_now_add and add):
- value = datetime.date.today()
- setattr(model_instance, self.attname, value)
- return value
- else:
- return super(DateField, self).pre_save(model_instance, add)
-
- def contribute_to_class(self, cls, name):
- super(DateField,self).contribute_to_class(cls, name)
- if not self.null:
- setattr(cls, 'get_next_by_%s' % self.name,
- curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=True))
- setattr(cls, 'get_previous_by_%s' % self.name,
- curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=False))
-
- def get_prep_lookup(self, lookup_type, value):
- # For "__month", "__day", and "__week_day" lookups, convert the value
- # to an int so the database backend always sees a consistent type.
- if lookup_type in ('month', 'day', 'week_day'):
- return int(value)
- return super(DateField, self).get_prep_lookup(lookup_type, value)
-
- def get_prep_value(self, value):
- return self.to_python(value)
-
- def get_db_prep_value(self, value, connection, prepared=False):
- # Casts dates into the format expected by the backend
- if not prepared:
- value = self.get_prep_value(value)
- return connection.ops.value_to_db_date(value)
-
- def value_to_string(self, obj):
- val = self._get_val_from_obj(obj)
- if val is None:
- data = ''
- else:
- data = datetime_safe.new_date(val).strftime("%Y-%m-%d")
- return data
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.DateField}
- defaults.update(kwargs)
- return super(DateField, self).formfield(**defaults)
-
-class DateTimeField(DateField):
- default_error_messages = {
- 'invalid': _(u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.'),
- }
- description = _("Date (with time)")
-
- def get_internal_type(self):
- return "DateTimeField"
-
- def to_python(self, value):
- if value is None:
- return value
- if isinstance(value, datetime.datetime):
- return value
- if isinstance(value, datetime.date):
- return datetime.datetime(value.year, value.month, value.day)
-
- # Attempt to parse a datetime:
- value = smart_str(value)
- # split usecs, because they are not recognized by strptime.
- if '.' in value:
- try:
- value, usecs = value.split('.')
- usecs = int(usecs)
- except ValueError:
- raise exceptions.ValidationError(self.error_messages['invalid'])
- else:
- usecs = 0
- kwargs = {'microsecond': usecs}
- try: # Seconds are optional, so try converting seconds first.
- return datetime.datetime(*time.strptime(value, '%Y-%m-%d %H:%M:%S')[:6],
- **kwargs)
-
- except ValueError:
- try: # Try without seconds.
- return datetime.datetime(*time.strptime(value, '%Y-%m-%d %H:%M')[:5],
- **kwargs)
- except ValueError: # Try without hour/minutes/seconds.
- try:
- return datetime.datetime(*time.strptime(value, '%Y-%m-%d')[:3],
- **kwargs)
- except ValueError:
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def pre_save(self, model_instance, add):
- if self.auto_now or (self.auto_now_add and add):
- value = datetime.datetime.now()
- setattr(model_instance, self.attname, value)
- return value
- else:
- return super(DateTimeField, self).pre_save(model_instance, add)
-
- def get_prep_value(self, value):
- return self.to_python(value)
-
- def get_db_prep_value(self, value, connection, prepared=False):
- # Casts dates into the format expected by the backend
- if not prepared:
- value = self.get_prep_value(value)
- return connection.ops.value_to_db_datetime(value)
-
- def value_to_string(self, obj):
- val = self._get_val_from_obj(obj)
- if val is None:
- data = ''
- else:
- d = datetime_safe.new_datetime(val)
- data = d.strftime('%Y-%m-%d %H:%M:%S')
- return data
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.DateTimeField}
- defaults.update(kwargs)
- return super(DateTimeField, self).formfield(**defaults)
-
-class DecimalField(Field):
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _(u'This value must be a decimal number.'),
- }
- description = _("Decimal number")
-
- def __init__(self, verbose_name=None, name=None, max_digits=None, decimal_places=None, **kwargs):
- self.max_digits, self.decimal_places = max_digits, decimal_places
- Field.__init__(self, verbose_name, name, **kwargs)
-
- def get_internal_type(self):
- return "DecimalField"
-
- def to_python(self, value):
- if value is None:
- return value
- try:
- return decimal.Decimal(value)
- except decimal.InvalidOperation:
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def _format(self, value):
- if isinstance(value, basestring) or value is None:
- return value
- else:
- return self.format_number(value)
-
- def format_number(self, value):
- """
- Formats a number into a string with the requisite number of digits and
- decimal places.
- """
- # Method moved to django.db.backends.util.
- #
- # It is preserved because it is used by the oracle backend
- # (django.db.backends.oracle.query), and also for
- # backwards-compatibility with any external code which may have used
- # this method.
- from django.db.backends import util
- return util.format_number(value, self.max_digits, self.decimal_places)
-
- def get_db_prep_save(self, value, connection):
- return connection.ops.value_to_db_decimal(self.to_python(value),
- self.max_digits, self.decimal_places)
-
- def get_prep_value(self, value):
- return self.to_python(value)
-
- def formfield(self, **kwargs):
- defaults = {
- 'max_digits': self.max_digits,
- 'decimal_places': self.decimal_places,
- 'form_class': forms.DecimalField,
- }
- defaults.update(kwargs)
- return super(DecimalField, self).formfield(**defaults)
-
-class EmailField(CharField):
- default_validators = [validators.validate_email]
- description = _("E-mail address")
-
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = kwargs.get('max_length', 75)
- CharField.__init__(self, *args, **kwargs)
-
- def formfield(self, **kwargs):
- # As with CharField, this will cause email validation to be performed twice
- defaults = {
- 'form_class': forms.EmailField,
- }
- defaults.update(kwargs)
- return super(EmailField, self).formfield(**defaults)
-
-class FilePathField(Field):
- description = _("File path")
-
- def __init__(self, verbose_name=None, name=None, path='', match=None, recursive=False, **kwargs):
- self.path, self.match, self.recursive = path, match, recursive
- kwargs['max_length'] = kwargs.get('max_length', 100)
- Field.__init__(self, verbose_name, name, **kwargs)
-
- def formfield(self, **kwargs):
- defaults = {
- 'path': self.path,
- 'match': self.match,
- 'recursive': self.recursive,
- 'form_class': forms.FilePathField,
- }
- defaults.update(kwargs)
- return super(FilePathField, self).formfield(**defaults)
-
- def get_internal_type(self):
- return "FilePathField"
-
-class FloatField(Field):
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _("This value must be a float."),
- }
- description = _("Floating point number")
-
- def get_prep_value(self, value):
- if value is None:
- return None
- return float(value)
-
- def get_internal_type(self):
- return "FloatField"
-
- def to_python(self, value):
- if value is None:
- return value
- try:
- return float(value)
- except (TypeError, ValueError):
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.FloatField}
- defaults.update(kwargs)
- return super(FloatField, self).formfield(**defaults)
-
-class IntegerField(Field):
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _("This value must be an integer."),
- }
- description = _("Integer")
-
- def get_prep_value(self, value):
- if value is None:
- return None
- return int(value)
-
- def get_prep_lookup(self, lookup_type, value):
- if (lookup_type == 'gte' or lookup_type == 'lt') \
- and isinstance(value, float):
- value = math.ceil(value)
- return super(IntegerField, self).get_prep_lookup(lookup_type, value)
-
- def get_internal_type(self):
- return "IntegerField"
-
- def to_python(self, value):
- if value is None:
- return value
- try:
- return int(value)
- except (TypeError, ValueError):
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.IntegerField}
- defaults.update(kwargs)
- return super(IntegerField, self).formfield(**defaults)
-
-class BigIntegerField(IntegerField):
- empty_strings_allowed = False
- description = _("Big (8 byte) integer")
- MAX_BIGINT = 9223372036854775807
- def get_internal_type(self):
- return "BigIntegerField"
-
- def formfield(self, **kwargs):
- defaults = {'min_value': -BigIntegerField.MAX_BIGINT - 1,
- 'max_value': BigIntegerField.MAX_BIGINT}
- defaults.update(kwargs)
- return super(BigIntegerField, self).formfield(**defaults)
-
-class IPAddressField(Field):
- empty_strings_allowed = False
- description = _("IP address")
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = 15
- Field.__init__(self, *args, **kwargs)
-
- def get_internal_type(self):
- return "IPAddressField"
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.IPAddressField}
- defaults.update(kwargs)
- return super(IPAddressField, self).formfield(**defaults)
-
-class NullBooleanField(Field):
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _("This value must be either None, True or False."),
- }
- description = _("Boolean (Either True, False or None)")
-
- def __init__(self, *args, **kwargs):
- kwargs['null'] = True
- kwargs['blank'] = True
- Field.__init__(self, *args, **kwargs)
-
- def get_internal_type(self):
- return "NullBooleanField"
-
- def to_python(self, value):
- if value is None:
- return None
- if value in (True, False):
- return bool(value)
- if value in ('None',):
- return None
- if value in ('t', 'True', '1'):
- return True
- if value in ('f', 'False', '0'):
- return False
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def get_prep_lookup(self, lookup_type, value):
- # Special-case handling for filters coming from a Web request (e.g. the
- # admin interface). Only works for scalar values (not lists). If you're
- # passing in a list, you might as well make things the right type when
- # constructing the list.
- if value in ('1', '0'):
- value = bool(int(value))
- return super(NullBooleanField, self).get_prep_lookup(lookup_type, value)
-
- def get_prep_value(self, value):
- if value is None:
- return None
- return bool(value)
-
- def formfield(self, **kwargs):
- defaults = {
- 'form_class': forms.NullBooleanField,
- 'required': not self.blank,
- 'label': capfirst(self.verbose_name),
- 'help_text': self.help_text}
- defaults.update(kwargs)
- return super(NullBooleanField, self).formfield(**defaults)
-
-class PositiveIntegerField(IntegerField):
- description = _("Integer")
-
- def get_internal_type(self):
- return "PositiveIntegerField"
-
- def formfield(self, **kwargs):
- defaults = {'min_value': 0}
- defaults.update(kwargs)
- return super(PositiveIntegerField, self).formfield(**defaults)
-
-class PositiveSmallIntegerField(IntegerField):
- description = _("Integer")
- def get_internal_type(self):
- return "PositiveSmallIntegerField"
-
- def formfield(self, **kwargs):
- defaults = {'min_value': 0}
- defaults.update(kwargs)
- return super(PositiveSmallIntegerField, self).formfield(**defaults)
-
-class SlugField(CharField):
- description = _("String (up to %(max_length)s)")
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = kwargs.get('max_length', 50)
- # Set db_index=True unless it's been set manually.
- if 'db_index' not in kwargs:
- kwargs['db_index'] = True
- super(SlugField, self).__init__(*args, **kwargs)
-
- def get_internal_type(self):
- return "SlugField"
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.SlugField}
- defaults.update(kwargs)
- return super(SlugField, self).formfield(**defaults)
-
-class SmallIntegerField(IntegerField):
- description = _("Integer")
-
- def get_internal_type(self):
- return "SmallIntegerField"
-
-class TextField(Field):
- description = _("Text")
-
- def get_internal_type(self):
- return "TextField"
-
- def get_prep_value(self, value):
- if isinstance(value, basestring) or value is None:
- return value
- return smart_unicode(value)
-
- def formfield(self, **kwargs):
- defaults = {'widget': forms.Textarea}
- defaults.update(kwargs)
- return super(TextField, self).formfield(**defaults)
-
-class TimeField(Field):
- description = _("Time")
-
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _('Enter a valid time in HH:MM[:ss[.uuuuuu]] format.'),
- }
- def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
- self.auto_now, self.auto_now_add = auto_now, auto_now_add
- if auto_now or auto_now_add:
- kwargs['editable'] = False
- Field.__init__(self, verbose_name, name, **kwargs)
-
- def get_internal_type(self):
- return "TimeField"
-
- def to_python(self, value):
- if value is None:
- return None
- if isinstance(value, datetime.time):
- return value
- if isinstance(value, datetime.datetime):
- # Not usually a good idea to pass in a datetime here (it loses
- # information), but this can be a side-effect of interacting with a
- # database backend (e.g. Oracle), so we'll be accommodating.
- return value.time()
-
- # Attempt to parse a datetime:
- value = smart_str(value)
- # split usecs, because they are not recognized by strptime.
- if '.' in value:
- try:
- value, usecs = value.split('.')
- usecs = int(usecs)
- except ValueError:
- raise exceptions.ValidationError(self.error_messages['invalid'])
- else:
- usecs = 0
- kwargs = {'microsecond': usecs}
-
- try: # Seconds are optional, so try converting seconds first.
- return datetime.time(*time.strptime(value, '%H:%M:%S')[3:6],
- **kwargs)
- except ValueError:
- try: # Try without seconds.
- return datetime.time(*time.strptime(value, '%H:%M')[3:5],
- **kwargs)
- except ValueError:
- raise exceptions.ValidationError(self.error_messages['invalid'])
-
- def pre_save(self, model_instance, add):
- if self.auto_now or (self.auto_now_add and add):
- value = datetime.datetime.now().time()
- setattr(model_instance, self.attname, value)
- return value
- else:
- return super(TimeField, self).pre_save(model_instance, add)
-
- def get_prep_value(self, value):
- return self.to_python(value)
-
- def get_db_prep_value(self, value, connection, prepared=False):
- # Casts times into the format expected by the backend
- if not prepared:
- value = self.get_prep_value(value)
- return connection.ops.value_to_db_time(value)
-
- def value_to_string(self, obj):
- val = self._get_val_from_obj(obj)
- if val is None:
- data = ''
- else:
- data = val.strftime("%H:%M:%S")
- return data
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.TimeField}
- defaults.update(kwargs)
- return super(TimeField, self).formfield(**defaults)
-
-class URLField(CharField):
- description = _("URL")
-
- def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs):
- kwargs['max_length'] = kwargs.get('max_length', 200)
- CharField.__init__(self, verbose_name, name, **kwargs)
- self.validators.append(validators.URLValidator(verify_exists=verify_exists))
-
- def formfield(self, **kwargs):
- # As with CharField, this will cause URL validation to be performed twice
- defaults = {
- 'form_class': forms.URLField,
- }
- defaults.update(kwargs)
- return super(URLField, self).formfield(**defaults)
-
-class XMLField(TextField):
- description = _("XML text")
-
- def __init__(self, verbose_name=None, name=None, schema_path=None, **kwargs):
- self.schema_path = schema_path
- Field.__init__(self, verbose_name, name, **kwargs)
-
diff --git a/parts/django/django/db/models/fields/files.py b/parts/django/django/db/models/fields/files.py
deleted file mode 100644
index e51f444..0000000
--- a/parts/django/django/db/models/fields/files.py
+++ /dev/null
@@ -1,403 +0,0 @@
-import datetime
-import os
-
-import django.utils.copycompat as copy
-
-from django.conf import settings
-from django.db.models.fields import Field
-from django.core.files.base import File, ContentFile
-from django.core.files.storage import default_storage
-from django.core.files.images import ImageFile, get_image_dimensions
-from django.core.files.uploadedfile import UploadedFile
-from django.utils.functional import curry
-from django.db.models import signals
-from django.utils.encoding import force_unicode, smart_str
-from django.utils.translation import ugettext_lazy, ugettext as _
-from django import forms
-from django.db.models.loading import cache
-
-class FieldFile(File):
- def __init__(self, instance, field, name):
- super(FieldFile, self).__init__(None, name)
- self.instance = instance
- self.field = field
- self.storage = field.storage
- self._committed = True
-
- def __eq__(self, other):
- # Older code may be expecting FileField values to be simple strings.
- # By overriding the == operator, it can remain backwards compatibility.
- if hasattr(other, 'name'):
- return self.name == other.name
- return self.name == other
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __hash__(self):
- # Required because we defined a custom __eq__.
- return hash(self.name)
-
- # The standard File contains most of the necessary properties, but
- # FieldFiles can be instantiated without a name, so that needs to
- # be checked for here.
-
- def _require_file(self):
- if not self:
- raise ValueError("The '%s' attribute has no file associated with it." % self.field.name)
-
- def _get_file(self):
- self._require_file()
- if not hasattr(self, '_file') or self._file is None:
- self._file = self.storage.open(self.name, 'rb')
- return self._file
-
- def _set_file(self, file):
- self._file = file
-
- def _del_file(self):
- del self._file
-
- file = property(_get_file, _set_file, _del_file)
-
- def _get_path(self):
- self._require_file()
- return self.storage.path(self.name)
- path = property(_get_path)
-
- def _get_url(self):
- self._require_file()
- return self.storage.url(self.name)
- url = property(_get_url)
-
- def _get_size(self):
- self._require_file()
- if not self._committed:
- return self.file.size
- return self.storage.size(self.name)
- size = property(_get_size)
-
- def open(self, mode='rb'):
- self._require_file()
- self.file.open(mode)
- # open() doesn't alter the file's contents, but it does reset the pointer
- open.alters_data = True
-
- # In addition to the standard File API, FieldFiles have extra methods
- # to further manipulate the underlying file, as well as update the
- # associated model instance.
-
- def save(self, name, content, save=True):
- name = self.field.generate_filename(self.instance, name)
- self.name = self.storage.save(name, content)
- setattr(self.instance, self.field.name, self.name)
-
- # Update the filesize cache
- self._size = content.size
- self._committed = True
-
- # Save the object because it has changed, unless save is False
- if save:
- self.instance.save()
- save.alters_data = True
-
- def delete(self, save=True):
- # Only close the file if it's already open, which we know by the
- # presence of self._file
- if hasattr(self, '_file'):
- self.close()
- del self.file
-
- self.storage.delete(self.name)
-
- self.name = None
- setattr(self.instance, self.field.name, self.name)
-
- # Delete the filesize cache
- if hasattr(self, '_size'):
- del self._size
- self._committed = False
-
- if save:
- self.instance.save()
- delete.alters_data = True
-
- def _get_closed(self):
- file = getattr(self, '_file', None)
- return file is None or file.closed
- closed = property(_get_closed)
-
- def close(self):
- file = getattr(self, '_file', None)
- if file is not None:
- file.close()
-
- def __getstate__(self):
- # FieldFile needs access to its associated model field and an instance
- # it's attached to in order to work properly, but the only necessary
- # data to be pickled is the file's name itself. Everything else will
- # be restored later, by FileDescriptor below.
- return {'name': self.name, 'closed': False, '_committed': True, '_file': None}
-
-class FileDescriptor(object):
- """
- The descriptor for the file attribute on the model instance. Returns a
- FieldFile when accessed so you can do stuff like::
-
- >>> instance.file.size
-
- Assigns a file object on assignment so you can do::
-
- >>> instance.file = File(...)
-
- """
- def __init__(self, field):
- self.field = field
-
- def __get__(self, instance=None, owner=None):
- if instance is None:
- raise AttributeError(
- "The '%s' attribute can only be accessed from %s instances."
- % (self.field.name, owner.__name__))
-
- # This is slightly complicated, so worth an explanation.
- # instance.file`needs to ultimately return some instance of `File`,
- # probably a subclass. Additionally, this returned object needs to have
- # the FieldFile API so that users can easily do things like
- # instance.file.path and have that delegated to the file storage engine.
- # Easy enough if we're strict about assignment in __set__, but if you
- # peek below you can see that we're not. So depending on the current
- # value of the field we have to dynamically construct some sort of
- # "thing" to return.
-
- # The instance dict contains whatever was originally assigned
- # in __set__.
- file = instance.__dict__[self.field.name]
-
- # If this value is a string (instance.file = "path/to/file") or None
- # then we simply wrap it with the appropriate attribute class according
- # to the file field. [This is FieldFile for FileFields and
- # ImageFieldFile for ImageFields; it's also conceivable that user
- # subclasses might also want to subclass the attribute class]. This
- # object understands how to convert a path to a file, and also how to
- # handle None.
- if isinstance(file, basestring) or file is None:
- attr = self.field.attr_class(instance, self.field, file)
- instance.__dict__[self.field.name] = attr
-
- # Other types of files may be assigned as well, but they need to have
- # the FieldFile interface added to the. Thus, we wrap any other type of
- # File inside a FieldFile (well, the field's attr_class, which is
- # usually FieldFile).
- elif isinstance(file, File) and not isinstance(file, FieldFile):
- file_copy = self.field.attr_class(instance, self.field, file.name)
- file_copy.file = file
- file_copy._committed = False
- instance.__dict__[self.field.name] = file_copy
-
- # Finally, because of the (some would say boneheaded) way pickle works,
- # the underlying FieldFile might not actually itself have an associated
- # file. So we need to reset the details of the FieldFile in those cases.
- elif isinstance(file, FieldFile) and not hasattr(file, 'field'):
- file.instance = instance
- file.field = self.field
- file.storage = self.field.storage
-
- # That was fun, wasn't it?
- return instance.__dict__[self.field.name]
-
- def __set__(self, instance, value):
- instance.__dict__[self.field.name] = value
-
-class FileField(Field):
- # The class to wrap instance attributes in. Accessing the file object off
- # the instance will always return an instance of attr_class.
- attr_class = FieldFile
-
- # The descriptor to use for accessing the attribute off of the class.
- descriptor_class = FileDescriptor
-
- description = ugettext_lazy("File path")
-
- def __init__(self, verbose_name=None, name=None, upload_to='', storage=None, **kwargs):
- for arg in ('primary_key', 'unique'):
- if arg in kwargs:
- raise TypeError("'%s' is not a valid argument for %s." % (arg, self.__class__))
-
- self.storage = storage or default_storage
- self.upload_to = upload_to
- if callable(upload_to):
- self.generate_filename = upload_to
-
- kwargs['max_length'] = kwargs.get('max_length', 100)
- super(FileField, self).__init__(verbose_name, name, **kwargs)
-
- def get_internal_type(self):
- return "FileField"
-
- def get_prep_lookup(self, lookup_type, value):
- if hasattr(value, 'name'):
- value = value.name
- return super(FileField, self).get_prep_lookup(lookup_type, value)
-
- def get_prep_value(self, value):
- "Returns field's value prepared for saving into a database."
- # Need to convert File objects provided via a form to unicode for database insertion
- if value is None:
- return None
- return unicode(value)
-
- def pre_save(self, model_instance, add):
- "Returns field's value just before saving."
- file = super(FileField, self).pre_save(model_instance, add)
- if file and not file._committed:
- # Commit the file to storage prior to saving the model
- file.save(file.name, file, save=False)
- return file
-
- def contribute_to_class(self, cls, name):
- super(FileField, self).contribute_to_class(cls, name)
- setattr(cls, self.name, self.descriptor_class(self))
- signals.post_delete.connect(self.delete_file, sender=cls)
-
- def delete_file(self, instance, sender, **kwargs):
- file = getattr(instance, self.attname)
- # If no other object of this type references the file,
- # and it's not the default value for future objects,
- # delete it from the backend.
- if file and file.name != self.default and \
- not sender._default_manager.filter(**{self.name: file.name}):
- file.delete(save=False)
- elif file:
- # Otherwise, just close the file, so it doesn't tie up resources.
- file.close()
-
- def get_directory_name(self):
- return os.path.normpath(force_unicode(datetime.datetime.now().strftime(smart_str(self.upload_to))))
-
- def get_filename(self, filename):
- return os.path.normpath(self.storage.get_valid_name(os.path.basename(filename)))
-
- def generate_filename(self, instance, filename):
- return os.path.join(self.get_directory_name(), self.get_filename(filename))
-
- def save_form_data(self, instance, data):
- if data:
- setattr(instance, self.name, data)
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.FileField, 'max_length': self.max_length}
- # If a file has been provided previously, then the form doesn't require
- # that a new file is provided this time.
- # The code to mark the form field as not required is used by
- # form_for_instance, but can probably be removed once form_for_instance
- # is gone. ModelForm uses a different method to check for an existing file.
- if 'initial' in kwargs:
- defaults['required'] = False
- defaults.update(kwargs)
- return super(FileField, self).formfield(**defaults)
-
-class ImageFileDescriptor(FileDescriptor):
- """
- Just like the FileDescriptor, but for ImageFields. The only difference is
- assigning the width/height to the width_field/height_field, if appropriate.
- """
- def __set__(self, instance, value):
- previous_file = instance.__dict__.get(self.field.name)
- super(ImageFileDescriptor, self).__set__(instance, value)
-
- # To prevent recalculating image dimensions when we are instantiating
- # an object from the database (bug #11084), only update dimensions if
- # the field had a value before this assignment. Since the default
- # value for FileField subclasses is an instance of field.attr_class,
- # previous_file will only be None when we are called from
- # Model.__init__(). The ImageField.update_dimension_fields method
- # hooked up to the post_init signal handles the Model.__init__() cases.
- # Assignment happening outside of Model.__init__() will trigger the
- # update right here.
- if previous_file is not None:
- self.field.update_dimension_fields(instance, force=True)
-
-class ImageFieldFile(ImageFile, FieldFile):
- def delete(self, save=True):
- # Clear the image dimensions cache
- if hasattr(self, '_dimensions_cache'):
- del self._dimensions_cache
- super(ImageFieldFile, self).delete(save)
-
-class ImageField(FileField):
- attr_class = ImageFieldFile
- descriptor_class = ImageFileDescriptor
- description = ugettext_lazy("File path")
-
- def __init__(self, verbose_name=None, name=None, width_field=None, height_field=None, **kwargs):
- self.width_field, self.height_field = width_field, height_field
- FileField.__init__(self, verbose_name, name, **kwargs)
-
- def contribute_to_class(self, cls, name):
- super(ImageField, self).contribute_to_class(cls, name)
- # Attach update_dimension_fields so that dimension fields declared
- # after their corresponding image field don't stay cleared by
- # Model.__init__, see bug #11196.
- signals.post_init.connect(self.update_dimension_fields, sender=cls)
-
- def update_dimension_fields(self, instance, force=False, *args, **kwargs):
- """
- Updates field's width and height fields, if defined.
-
- This method is hooked up to model's post_init signal to update
- dimensions after instantiating a model instance. However, dimensions
- won't be updated if the dimensions fields are already populated. This
- avoids unnecessary recalculation when loading an object from the
- database.
-
- Dimensions can be forced to update with force=True, which is how
- ImageFileDescriptor.__set__ calls this method.
- """
- # Nothing to update if the field doesn't have have dimension fields.
- has_dimension_fields = self.width_field or self.height_field
- if not has_dimension_fields:
- return
-
- # getattr will call the ImageFileDescriptor's __get__ method, which
- # coerces the assigned value into an instance of self.attr_class
- # (ImageFieldFile in this case).
- file = getattr(instance, self.attname)
-
- # Nothing to update if we have no file and not being forced to update.
- if not file and not force:
- return
-
- dimension_fields_filled = not(
- (self.width_field and not getattr(instance, self.width_field))
- or (self.height_field and not getattr(instance, self.height_field))
- )
- # When both dimension fields have values, we are most likely loading
- # data from the database or updating an image field that already had
- # an image stored. In the first case, we don't want to update the
- # dimension fields because we are already getting their values from the
- # database. In the second case, we do want to update the dimensions
- # fields and will skip this return because force will be True since we
- # were called from ImageFileDescriptor.__set__.
- if dimension_fields_filled and not force:
- return
-
- # file should be an instance of ImageFieldFile or should be None.
- if file:
- width = file.width
- height = file.height
- else:
- # No file, so clear dimensions fields.
- width = None
- height = None
-
- # Update the width and height fields.
- if self.width_field:
- setattr(instance, self.width_field, width)
- if self.height_field:
- setattr(instance, self.height_field, height)
-
- def formfield(self, **kwargs):
- defaults = {'form_class': forms.ImageField}
- defaults.update(kwargs)
- return super(ImageField, self).formfield(**defaults)
diff --git a/parts/django/django/db/models/fields/proxy.py b/parts/django/django/db/models/fields/proxy.py
deleted file mode 100644
index c0cc873..0000000
--- a/parts/django/django/db/models/fields/proxy.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-Field-like classes that aren't really fields. It's easier to use objects that
-have the same attributes as fields sometimes (avoids a lot of special casing).
-"""
-
-from django.db.models import fields
-
-class OrderWrt(fields.IntegerField):
- """
- A proxy for the _order database field that is used when
- Meta.order_with_respect_to is specified.
- """
-
- def __init__(self, *args, **kwargs):
- kwargs['name'] = '_order'
- kwargs['editable'] = False
- super(OrderWrt, self).__init__(*args, **kwargs)
diff --git a/parts/django/django/db/models/fields/related.py b/parts/django/django/db/models/fields/related.py
deleted file mode 100644
index 8d08230..0000000
--- a/parts/django/django/db/models/fields/related.py
+++ /dev/null
@@ -1,1165 +0,0 @@
-from django.conf import settings
-from django.db import connection, router, transaction
-from django.db.backends import util
-from django.db.models import signals, get_model
-from django.db.models.fields import (AutoField, Field, IntegerField,
- PositiveIntegerField, PositiveSmallIntegerField, FieldDoesNotExist)
-from django.db.models.related import RelatedObject
-from django.db.models.query import QuerySet
-from django.db.models.query_utils import QueryWrapper
-from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy as _, string_concat, ungettext, ugettext
-from django.utils.functional import curry
-from django.core import exceptions
-from django import forms
-
-
-RECURSIVE_RELATIONSHIP_CONSTANT = 'self'
-
-pending_lookups = {}
-
-def add_lazy_relation(cls, field, relation, operation):
- """
- Adds a lookup on ``cls`` when a related field is defined using a string,
- i.e.::
-
- class MyModel(Model):
- fk = ForeignKey("AnotherModel")
-
- This string can be:
-
- * RECURSIVE_RELATIONSHIP_CONSTANT (i.e. "self") to indicate a recursive
- relation.
-
- * The name of a model (i.e "AnotherModel") to indicate another model in
- the same app.
-
- * An app-label and model name (i.e. "someapp.AnotherModel") to indicate
- another model in a different app.
-
- If the other model hasn't yet been loaded -- almost a given if you're using
- lazy relationships -- then the relation won't be set up until the
- class_prepared signal fires at the end of model initialization.
-
- operation is the work that must be performed once the relation can be resolved.
- """
- # Check for recursive relations
- if relation == RECURSIVE_RELATIONSHIP_CONSTANT:
- app_label = cls._meta.app_label
- model_name = cls.__name__
-
- else:
- # Look for an "app.Model" relation
- try:
- app_label, model_name = relation.split(".")
- except ValueError:
- # If we can't split, assume a model in current app
- app_label = cls._meta.app_label
- model_name = relation
- except AttributeError:
- # If it doesn't have a split it's actually a model class
- app_label = relation._meta.app_label
- model_name = relation._meta.object_name
-
- # Try to look up the related model, and if it's already loaded resolve the
- # string right away. If get_model returns None, it means that the related
- # model isn't loaded yet, so we need to pend the relation until the class
- # is prepared.
- model = get_model(app_label, model_name, False)
- if model:
- operation(field, model, cls)
- else:
- key = (app_label, model_name)
- value = (cls, field, operation)
- pending_lookups.setdefault(key, []).append(value)
-
-def do_pending_lookups(sender, **kwargs):
- """
- Handle any pending relations to the sending model. Sent from class_prepared.
- """
- key = (sender._meta.app_label, sender.__name__)
- for cls, field, operation in pending_lookups.pop(key, []):
- operation(field, sender, cls)
-
-signals.class_prepared.connect(do_pending_lookups)
-
-#HACK
-class RelatedField(object):
- def contribute_to_class(self, cls, name):
- sup = super(RelatedField, self)
-
- # Store the opts for related_query_name()
- self.opts = cls._meta
-
- if hasattr(sup, 'contribute_to_class'):
- sup.contribute_to_class(cls, name)
-
- if not cls._meta.abstract and self.rel.related_name:
- self.rel.related_name = self.rel.related_name % {
- 'class': cls.__name__.lower(),
- 'app_label': cls._meta.app_label.lower(),
- }
-
- other = self.rel.to
- if isinstance(other, basestring) or other._meta.pk is None:
- def resolve_related_class(field, model, cls):
- field.rel.to = model
- field.do_related_class(model, cls)
- add_lazy_relation(cls, self, other, resolve_related_class)
- else:
- self.do_related_class(other, cls)
-
- def set_attributes_from_rel(self):
- self.name = self.name or (self.rel.to._meta.object_name.lower() + '_' + self.rel.to._meta.pk.name)
- if self.verbose_name is None:
- self.verbose_name = self.rel.to._meta.verbose_name
- self.rel.field_name = self.rel.field_name or self.rel.to._meta.pk.name
-
- def do_related_class(self, other, cls):
- self.set_attributes_from_rel()
- self.related = RelatedObject(other, cls, self)
- if not cls._meta.abstract:
- self.contribute_to_related_class(other, self.related)
-
- def get_prep_lookup(self, lookup_type, value):
- if hasattr(value, 'prepare'):
- return value.prepare()
- if hasattr(value, '_prepare'):
- return value._prepare()
- # FIXME: lt and gt are explicitly allowed to make
- # get_(next/prev)_by_date work; other lookups are not allowed since that
- # gets messy pretty quick. This is a good candidate for some refactoring
- # in the future.
- if lookup_type in ['exact', 'gt', 'lt', 'gte', 'lte']:
- return self._pk_trace(value, 'get_prep_lookup', lookup_type)
- if lookup_type in ('range', 'in'):
- return [self._pk_trace(v, 'get_prep_lookup', lookup_type) for v in value]
- elif lookup_type == 'isnull':
- return []
- raise TypeError("Related Field has invalid lookup: %s" % lookup_type)
-
- def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
- if not prepared:
- value = self.get_prep_lookup(lookup_type, value)
- if hasattr(value, 'get_compiler'):
- value = value.get_compiler(connection=connection)
- if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
- # If the value has a relabel_aliases method, it will need to
- # be invoked before the final SQL is evaluated
- if hasattr(value, 'relabel_aliases'):
- return value
- if hasattr(value, 'as_sql'):
- sql, params = value.as_sql()
- else:
- sql, params = value._as_sql(connection=connection)
- return QueryWrapper(('(%s)' % sql), params)
-
- # FIXME: lt and gt are explicitly allowed to make
- # get_(next/prev)_by_date work; other lookups are not allowed since that
- # gets messy pretty quick. This is a good candidate for some refactoring
- # in the future.
- if lookup_type in ['exact', 'gt', 'lt', 'gte', 'lte']:
- return [self._pk_trace(value, 'get_db_prep_lookup', lookup_type,
- connection=connection, prepared=prepared)]
- if lookup_type in ('range', 'in'):
- return [self._pk_trace(v, 'get_db_prep_lookup', lookup_type,
- connection=connection, prepared=prepared)
- for v in value]
- elif lookup_type == 'isnull':
- return []
- raise TypeError("Related Field has invalid lookup: %s" % lookup_type)
-
- def _pk_trace(self, value, prep_func, lookup_type, **kwargs):
- # Value may be a primary key, or an object held in a relation.
- # If it is an object, then we need to get the primary key value for
- # that object. In certain conditions (especially one-to-one relations),
- # the primary key may itself be an object - so we need to keep drilling
- # down until we hit a value that can be used for a comparison.
- v = value
- try:
- while True:
- v = getattr(v, v._meta.pk.name)
- except AttributeError:
- pass
- except exceptions.ObjectDoesNotExist:
- v = None
-
- field = self
- while field.rel:
- if hasattr(field.rel, 'field_name'):
- field = field.rel.to._meta.get_field(field.rel.field_name)
- else:
- field = field.rel.to._meta.pk
-
- if lookup_type in ('range', 'in'):
- v = [v]
- v = getattr(field, prep_func)(lookup_type, v, **kwargs)
- if isinstance(v, list):
- v = v[0]
- return v
-
- def related_query_name(self):
- # This method defines the name that can be used to identify this
- # related object in a table-spanning query. It uses the lower-cased
- # object_name by default, but this can be overridden with the
- # "related_name" option.
- return self.rel.related_name or self.opts.object_name.lower()
-
-class SingleRelatedObjectDescriptor(object):
- # This class provides the functionality that makes the related-object
- # managers available as attributes on a model class, for fields that have
- # a single "remote" value, on the class pointed to by a related field.
- # In the example "place.restaurant", the restaurant attribute is a
- # SingleRelatedObjectDescriptor instance.
- def __init__(self, related):
- self.related = related
- self.cache_name = related.get_cache_name()
-
- def __get__(self, instance, instance_type=None):
- if instance is None:
- return self
- try:
- return getattr(instance, self.cache_name)
- except AttributeError:
- params = {'%s__pk' % self.related.field.name: instance._get_pk_val()}
- db = router.db_for_read(self.related.model, instance=instance)
- rel_obj = self.related.model._base_manager.using(db).get(**params)
- setattr(instance, self.cache_name, rel_obj)
- return rel_obj
-
- def __set__(self, instance, value):
- if instance is None:
- raise AttributeError("%s must be accessed via instance" % self.related.opts.object_name)
-
- # The similarity of the code below to the code in
- # ReverseSingleRelatedObjectDescriptor is annoying, but there's a bunch
- # of small differences that would make a common base class convoluted.
-
- # If null=True, we can assign null here, but otherwise the value needs
- # to be an instance of the related class.
- if value is None and self.related.field.null == False:
- raise ValueError('Cannot assign None: "%s.%s" does not allow null values.' %
- (instance._meta.object_name, self.related.get_accessor_name()))
- elif value is not None and not isinstance(value, self.related.model):
- raise ValueError('Cannot assign "%r": "%s.%s" must be a "%s" instance.' %
- (value, instance._meta.object_name,
- self.related.get_accessor_name(), self.related.opts.object_name))
- elif value is not None:
- if instance._state.db is None:
- instance._state.db = router.db_for_write(instance.__class__, instance=value)
- elif value._state.db is None:
- value._state.db = router.db_for_write(value.__class__, instance=instance)
- elif value._state.db is not None and instance._state.db is not None:
- if not router.allow_relation(value, instance):
- raise ValueError('Cannot assign "%r": instance is on database "%s", value is on database "%s"' %
- (value, instance._state.db, value._state.db))
-
- # Set the value of the related field to the value of the related object's related field
- setattr(value, self.related.field.attname, getattr(instance, self.related.field.rel.get_related_field().attname))
-
- # Since we already know what the related object is, seed the related
- # object caches now, too. This avoids another db hit if you get the
- # object you just set.
- setattr(instance, self.cache_name, value)
- setattr(value, self.related.field.get_cache_name(), instance)
-
-class ReverseSingleRelatedObjectDescriptor(object):
- # This class provides the functionality that makes the related-object
- # managers available as attributes on a model class, for fields that have
- # a single "remote" value, on the class that defines the related field.
- # In the example "choice.poll", the poll attribute is a
- # ReverseSingleRelatedObjectDescriptor instance.
- def __init__(self, field_with_rel):
- self.field = field_with_rel
-
- def __get__(self, instance, instance_type=None):
- if instance is None:
- return self
-
- cache_name = self.field.get_cache_name()
- try:
- return getattr(instance, cache_name)
- except AttributeError:
- val = getattr(instance, self.field.attname)
- if val is None:
- # If NULL is an allowed value, return it.
- if self.field.null:
- return None
- raise self.field.rel.to.DoesNotExist
- other_field = self.field.rel.get_related_field()
- if other_field.rel:
- params = {'%s__pk' % self.field.rel.field_name: val}
- else:
- params = {'%s__exact' % self.field.rel.field_name: val}
-
- # If the related manager indicates that it should be used for
- # related fields, respect that.
- rel_mgr = self.field.rel.to._default_manager
- db = router.db_for_read(self.field.rel.to, instance=instance)
- if getattr(rel_mgr, 'use_for_related_fields', False):
- rel_obj = rel_mgr.using(db).get(**params)
- else:
- rel_obj = QuerySet(self.field.rel.to).using(db).get(**params)
- setattr(instance, cache_name, rel_obj)
- return rel_obj
-
- def __set__(self, instance, value):
- if instance is None:
- raise AttributeError("%s must be accessed via instance" % self._field.name)
-
- # If null=True, we can assign null here, but otherwise the value needs
- # to be an instance of the related class.
- if value is None and self.field.null == False:
- raise ValueError('Cannot assign None: "%s.%s" does not allow null values.' %
- (instance._meta.object_name, self.field.name))
- elif value is not None and not isinstance(value, self.field.rel.to):
- raise ValueError('Cannot assign "%r": "%s.%s" must be a "%s" instance.' %
- (value, instance._meta.object_name,
- self.field.name, self.field.rel.to._meta.object_name))
- elif value is not None:
- if instance._state.db is None:
- instance._state.db = router.db_for_write(instance.__class__, instance=value)
- elif value._state.db is None:
- value._state.db = router.db_for_write(value.__class__, instance=instance)
- elif value._state.db is not None and instance._state.db is not None:
- if not router.allow_relation(value, instance):
- raise ValueError('Cannot assign "%r": instance is on database "%s", value is on database "%s"' %
- (value, instance._state.db, value._state.db))
-
- # If we're setting the value of a OneToOneField to None, we need to clear
- # out the cache on any old related object. Otherwise, deleting the
- # previously-related object will also cause this object to be deleted,
- # which is wrong.
- if value is None:
- # Look up the previously-related object, which may still be available
- # since we've not yet cleared out the related field.
- # Use the cache directly, instead of the accessor; if we haven't
- # populated the cache, then we don't care - we're only accessing
- # the object to invalidate the accessor cache, so there's no
- # need to populate the cache just to expire it again.
- related = getattr(instance, self.field.get_cache_name(), None)
-
- # If we've got an old related object, we need to clear out its
- # cache. This cache also might not exist if the related object
- # hasn't been accessed yet.
- if related:
- cache_name = self.field.related.get_cache_name()
- try:
- delattr(related, cache_name)
- except AttributeError:
- pass
-
- # Set the value of the related field
- try:
- val = getattr(value, self.field.rel.get_related_field().attname)
- except AttributeError:
- val = None
- setattr(instance, self.field.attname, val)
-
- # Since we already know what the related object is, seed the related
- # object cache now, too. This avoids another db hit if you get the
- # object you just set.
- setattr(instance, self.field.get_cache_name(), value)
-
-class ForeignRelatedObjectsDescriptor(object):
- # This class provides the functionality that makes the related-object
- # managers available as attributes on a model class, for fields that have
- # multiple "remote" values and have a ForeignKey pointed at them by
- # some other model. In the example "poll.choice_set", the choice_set
- # attribute is a ForeignRelatedObjectsDescriptor instance.
- def __init__(self, related):
- self.related = related # RelatedObject instance
-
- def __get__(self, instance, instance_type=None):
- if instance is None:
- return self
-
- return self.create_manager(instance,
- self.related.model._default_manager.__class__)
-
- def __set__(self, instance, value):
- if instance is None:
- raise AttributeError("Manager must be accessed via instance")
-
- manager = self.__get__(instance)
- # If the foreign key can support nulls, then completely clear the related set.
- # Otherwise, just move the named objects into the set.
- if self.related.field.null:
- manager.clear()
- manager.add(*value)
-
- def delete_manager(self, instance):
- """
- Returns a queryset based on the related model's base manager (rather
- than the default manager, as returned by __get__). Used by
- Model.delete().
- """
- return self.create_manager(instance,
- self.related.model._base_manager.__class__)
-
- def create_manager(self, instance, superclass):
- """
- Creates the managers used by other methods (__get__() and delete()).
- """
- rel_field = self.related.field
- rel_model = self.related.model
-
- class RelatedManager(superclass):
- def get_query_set(self):
- db = self._db or router.db_for_read(rel_model, instance=instance)
- return superclass.get_query_set(self).using(db).filter(**(self.core_filters))
-
- def add(self, *objs):
- for obj in objs:
- if not isinstance(obj, self.model):
- raise TypeError("'%s' instance expected" % self.model._meta.object_name)
- setattr(obj, rel_field.name, instance)
- obj.save()
- add.alters_data = True
-
- def create(self, **kwargs):
- kwargs.update({rel_field.name: instance})
- db = router.db_for_write(rel_model, instance=instance)
- return super(RelatedManager, self.db_manager(db)).create(**kwargs)
- create.alters_data = True
-
- def get_or_create(self, **kwargs):
- # Update kwargs with the related object that this
- # ForeignRelatedObjectsDescriptor knows about.
- kwargs.update({rel_field.name: instance})
- db = router.db_for_write(rel_model, instance=instance)
- return super(RelatedManager, self.db_manager(db)).get_or_create(**kwargs)
- get_or_create.alters_data = True
-
- # remove() and clear() are only provided if the ForeignKey can have a value of null.
- if rel_field.null:
- def remove(self, *objs):
- val = getattr(instance, rel_field.rel.get_related_field().attname)
- for obj in objs:
- # Is obj actually part of this descriptor set?
- if getattr(obj, rel_field.attname) == val:
- setattr(obj, rel_field.name, None)
- obj.save()
- else:
- raise rel_field.rel.to.DoesNotExist("%r is not related to %r." % (obj, instance))
- remove.alters_data = True
-
- def clear(self):
- for obj in self.all():
- setattr(obj, rel_field.name, None)
- obj.save()
- clear.alters_data = True
-
- manager = RelatedManager()
- attname = rel_field.rel.get_related_field().name
- manager.core_filters = {'%s__%s' % (rel_field.name, attname):
- getattr(instance, attname)}
- manager.model = self.related.model
-
- return manager
-
-def create_many_related_manager(superclass, rel=False):
- """Creates a manager that subclasses 'superclass' (which is a Manager)
- and adds behavior for many-to-many related objects."""
- through = rel.through
- class ManyRelatedManager(superclass):
- def __init__(self, model=None, core_filters=None, instance=None, symmetrical=None,
- join_table=None, source_field_name=None, target_field_name=None,
- reverse=False):
- super(ManyRelatedManager, self).__init__()
- self.core_filters = core_filters
- self.model = model
- self.symmetrical = symmetrical
- self.instance = instance
- self.source_field_name = source_field_name
- self.target_field_name = target_field_name
- self.through = through
- self._pk_val = self.instance.pk
- self.reverse = reverse
- if self._pk_val is None:
- raise ValueError("%r instance needs to have a primary key value before a many-to-many relationship can be used." % instance.__class__.__name__)
-
- def get_query_set(self):
- db = self._db or router.db_for_read(self.instance.__class__, instance=self.instance)
- return superclass.get_query_set(self).using(db)._next_is_sticky().filter(**(self.core_filters))
-
- # If the ManyToMany relation has an intermediary model,
- # the add and remove methods do not exist.
- if rel.through._meta.auto_created:
- def add(self, *objs):
- self._add_items(self.source_field_name, self.target_field_name, *objs)
-
- # If this is a symmetrical m2m relation to self, add the mirror entry in the m2m table
- if self.symmetrical:
- self._add_items(self.target_field_name, self.source_field_name, *objs)
- add.alters_data = True
-
- def remove(self, *objs):
- self._remove_items(self.source_field_name, self.target_field_name, *objs)
-
- # If this is a symmetrical m2m relation to self, remove the mirror entry in the m2m table
- if self.symmetrical:
- self._remove_items(self.target_field_name, self.source_field_name, *objs)
- remove.alters_data = True
-
- def clear(self):
- self._clear_items(self.source_field_name)
-
- # If this is a symmetrical m2m relation to self, clear the mirror entry in the m2m table
- if self.symmetrical:
- self._clear_items(self.target_field_name)
- clear.alters_data = True
-
- def create(self, **kwargs):
- # This check needs to be done here, since we can't later remove this
- # from the method lookup table, as we do with add and remove.
- if not rel.through._meta.auto_created:
- opts = through._meta
- raise AttributeError("Cannot use create() on a ManyToManyField which specifies an intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name))
- db = router.db_for_write(self.instance.__class__, instance=self.instance)
- new_obj = super(ManyRelatedManager, self.db_manager(db)).create(**kwargs)
- self.add(new_obj)
- return new_obj
- create.alters_data = True
-
- def get_or_create(self, **kwargs):
- db = router.db_for_write(self.instance.__class__, instance=self.instance)
- obj, created = \
- super(ManyRelatedManager, self.db_manager(db)).get_or_create(**kwargs)
- # We only need to add() if created because if we got an object back
- # from get() then the relationship already exists.
- if created:
- self.add(obj)
- return obj, created
- get_or_create.alters_data = True
-
- def _add_items(self, source_field_name, target_field_name, *objs):
- # join_table: name of the m2m link table
- # source_field_name: the PK fieldname in join_table for the source object
- # target_field_name: the PK fieldname in join_table for the target object
- # *objs - objects to add. Either object instances, or primary keys of object instances.
-
- # If there aren't any objects, there is nothing to do.
- from django.db.models import Model
- if objs:
- new_ids = set()
- for obj in objs:
- if isinstance(obj, self.model):
- if not router.allow_relation(obj, self.instance):
- raise ValueError('Cannot add "%r": instance is on database "%s", value is on database "%s"' %
- (obj, self.instance._state.db, obj._state.db))
- new_ids.add(obj.pk)
- elif isinstance(obj, Model):
- raise TypeError("'%s' instance expected" % self.model._meta.object_name)
- else:
- new_ids.add(obj)
- db = router.db_for_write(self.through.__class__, instance=self.instance)
- vals = self.through._default_manager.using(db).values_list(target_field_name, flat=True)
- vals = vals.filter(**{
- source_field_name: self._pk_val,
- '%s__in' % target_field_name: new_ids,
- })
- new_ids = new_ids - set(vals)
-
- if self.reverse or source_field_name == self.source_field_name:
- # Don't send the signal when we are inserting the
- # duplicate data row for symmetrical reverse entries.
- signals.m2m_changed.send(sender=rel.through, action='pre_add',
- instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=new_ids)
- # Add the ones that aren't there already
- for obj_id in new_ids:
- self.through._default_manager.using(db).create(**{
- '%s_id' % source_field_name: self._pk_val,
- '%s_id' % target_field_name: obj_id,
- })
- if self.reverse or source_field_name == self.source_field_name:
- # Don't send the signal when we are inserting the
- # duplicate data row for symmetrical reverse entries.
- signals.m2m_changed.send(sender=rel.through, action='post_add',
- instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=new_ids)
-
- def _remove_items(self, source_field_name, target_field_name, *objs):
- # source_col_name: the PK colname in join_table for the source object
- # target_col_name: the PK colname in join_table for the target object
- # *objs - objects to remove
-
- # If there aren't any objects, there is nothing to do.
- if objs:
- # Check that all the objects are of the right type
- old_ids = set()
- for obj in objs:
- if isinstance(obj, self.model):
- old_ids.add(obj.pk)
- else:
- old_ids.add(obj)
- if self.reverse or source_field_name == self.source_field_name:
- # Don't send the signal when we are deleting the
- # duplicate data row for symmetrical reverse entries.
- signals.m2m_changed.send(sender=rel.through, action="pre_remove",
- instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=old_ids)
- # Remove the specified objects from the join table
- db = router.db_for_write(self.through.__class__, instance=self.instance)
- self.through._default_manager.using(db).filter(**{
- source_field_name: self._pk_val,
- '%s__in' % target_field_name: old_ids
- }).delete()
- if self.reverse or source_field_name == self.source_field_name:
- # Don't send the signal when we are deleting the
- # duplicate data row for symmetrical reverse entries.
- signals.m2m_changed.send(sender=rel.through, action="post_remove",
- instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=old_ids)
-
- def _clear_items(self, source_field_name):
- # source_col_name: the PK colname in join_table for the source object
- if self.reverse or source_field_name == self.source_field_name:
- # Don't send the signal when we are clearing the
- # duplicate data rows for symmetrical reverse entries.
- signals.m2m_changed.send(sender=rel.through, action="pre_clear",
- instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=None)
- db = router.db_for_write(self.through.__class__, instance=self.instance)
- self.through._default_manager.using(db).filter(**{
- source_field_name: self._pk_val
- }).delete()
- if self.reverse or source_field_name == self.source_field_name:
- # Don't send the signal when we are clearing the
- # duplicate data rows for symmetrical reverse entries.
- signals.m2m_changed.send(sender=rel.through, action="post_clear",
- instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=None)
-
- return ManyRelatedManager
-
-class ManyRelatedObjectsDescriptor(object):
- # This class provides the functionality that makes the related-object
- # managers available as attributes on a model class, for fields that have
- # multiple "remote" values and have a ManyToManyField pointed at them by
- # some other model (rather than having a ManyToManyField themselves).
- # In the example "publication.article_set", the article_set attribute is a
- # ManyRelatedObjectsDescriptor instance.
- def __init__(self, related):
- self.related = related # RelatedObject instance
-
- def __get__(self, instance, instance_type=None):
- if instance is None:
- return self
-
- # Dynamically create a class that subclasses the related
- # model's default manager.
- rel_model = self.related.model
- superclass = rel_model._default_manager.__class__
- RelatedManager = create_many_related_manager(superclass, self.related.field.rel)
-
- manager = RelatedManager(
- model=rel_model,
- core_filters={'%s__pk' % self.related.field.name: instance._get_pk_val()},
- instance=instance,
- symmetrical=False,
- source_field_name=self.related.field.m2m_reverse_field_name(),
- target_field_name=self.related.field.m2m_field_name(),
- reverse=True
- )
-
- return manager
-
- def __set__(self, instance, value):
- if instance is None:
- raise AttributeError("Manager must be accessed via instance")
-
- if not self.related.field.rel.through._meta.auto_created:
- opts = self.related.field.rel.through._meta
- raise AttributeError("Cannot set values on a ManyToManyField which specifies an intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name))
-
- manager = self.__get__(instance)
- manager.clear()
- manager.add(*value)
-
-
-class ReverseManyRelatedObjectsDescriptor(object):
- # This class provides the functionality that makes the related-object
- # managers available as attributes on a model class, for fields that have
- # multiple "remote" values and have a ManyToManyField defined in their
- # model (rather than having another model pointed *at* them).
- # In the example "article.publications", the publications attribute is a
- # ReverseManyRelatedObjectsDescriptor instance.
- def __init__(self, m2m_field):
- self.field = m2m_field
-
- def _through(self):
- # through is provided so that you have easy access to the through
- # model (Book.authors.through) for inlines, etc. This is done as
- # a property to ensure that the fully resolved value is returned.
- return self.field.rel.through
- through = property(_through)
-
- def __get__(self, instance, instance_type=None):
- if instance is None:
- return self
-
- # Dynamically create a class that subclasses the related
- # model's default manager.
- rel_model=self.field.rel.to
- superclass = rel_model._default_manager.__class__
- RelatedManager = create_many_related_manager(superclass, self.field.rel)
-
- manager = RelatedManager(
- model=rel_model,
- core_filters={'%s__pk' % self.field.related_query_name(): instance._get_pk_val()},
- instance=instance,
- symmetrical=self.field.rel.symmetrical,
- source_field_name=self.field.m2m_field_name(),
- target_field_name=self.field.m2m_reverse_field_name(),
- reverse=False
- )
-
- return manager
-
- def __set__(self, instance, value):
- if instance is None:
- raise AttributeError("Manager must be accessed via instance")
-
- if not self.field.rel.through._meta.auto_created:
- opts = self.field.rel.through._meta
- raise AttributeError("Cannot set values on a ManyToManyField which specifies an intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name))
-
- manager = self.__get__(instance)
- manager.clear()
- manager.add(*value)
-
-class ManyToOneRel(object):
- def __init__(self, to, field_name, related_name=None,
- limit_choices_to=None, lookup_overrides=None, parent_link=False):
- try:
- to._meta
- except AttributeError: # to._meta doesn't exist, so it must be RECURSIVE_RELATIONSHIP_CONSTANT
- assert isinstance(to, basestring), "'to' must be either a model, a model name or the string %r" % RECURSIVE_RELATIONSHIP_CONSTANT
- self.to, self.field_name = to, field_name
- self.related_name = related_name
- if limit_choices_to is None:
- limit_choices_to = {}
- self.limit_choices_to = limit_choices_to
- self.lookup_overrides = lookup_overrides or {}
- self.multiple = True
- self.parent_link = parent_link
-
- def is_hidden(self):
- "Should the related object be hidden?"
- return self.related_name and self.related_name[-1] == '+'
-
- def get_related_field(self):
- """
- Returns the Field in the 'to' object to which this relationship is
- tied.
- """
- data = self.to._meta.get_field_by_name(self.field_name)
- if not data[2]:
- raise FieldDoesNotExist("No related field named '%s'" %
- self.field_name)
- return data[0]
-
-class OneToOneRel(ManyToOneRel):
- def __init__(self, to, field_name, related_name=None,
- limit_choices_to=None, lookup_overrides=None, parent_link=False):
- super(OneToOneRel, self).__init__(to, field_name,
- related_name=related_name, limit_choices_to=limit_choices_to,
- lookup_overrides=lookup_overrides, parent_link=parent_link)
- self.multiple = False
-
-class ManyToManyRel(object):
- def __init__(self, to, related_name=None, limit_choices_to=None,
- symmetrical=True, through=None):
- self.to = to
- self.related_name = related_name
- if limit_choices_to is None:
- limit_choices_to = {}
- self.limit_choices_to = limit_choices_to
- self.symmetrical = symmetrical
- self.multiple = True
- self.through = through
-
- def is_hidden(self):
- "Should the related object be hidden?"
- return self.related_name and self.related_name[-1] == '+'
-
- def get_related_field(self):
- """
- Returns the field in the to' object to which this relationship is tied
- (this is always the primary key on the target model). Provided for
- symmetry with ManyToOneRel.
- """
- return self.to._meta.pk
-
-class ForeignKey(RelatedField, Field):
- empty_strings_allowed = False
- default_error_messages = {
- 'invalid': _('Model %(model)s with pk %(pk)r does not exist.')
- }
- description = _("Foreign Key (type determined by related field)")
- def __init__(self, to, to_field=None, rel_class=ManyToOneRel, **kwargs):
- try:
- to_name = to._meta.object_name.lower()
- except AttributeError: # to._meta doesn't exist, so it must be RECURSIVE_RELATIONSHIP_CONSTANT
- assert isinstance(to, basestring), "%s(%r) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)
- else:
- assert not to._meta.abstract, "%s cannot define a relation with abstract class %s" % (self.__class__.__name__, to._meta.object_name)
- # For backwards compatibility purposes, we need to *try* and set
- # the to_field during FK construction. It won't be guaranteed to
- # be correct until contribute_to_class is called. Refs #12190.
- to_field = to_field or (to._meta.pk and to._meta.pk.name)
- kwargs['verbose_name'] = kwargs.get('verbose_name', None)
-
- if 'db_index' not in kwargs:
- kwargs['db_index'] = True
-
- kwargs['rel'] = rel_class(to, to_field,
- related_name=kwargs.pop('related_name', None),
- limit_choices_to=kwargs.pop('limit_choices_to', None),
- lookup_overrides=kwargs.pop('lookup_overrides', None),
- parent_link=kwargs.pop('parent_link', False))
- Field.__init__(self, **kwargs)
-
- def validate(self, value, model_instance):
- if self.rel.parent_link:
- return
- super(ForeignKey, self).validate(value, model_instance)
- if value is None:
- return
-
- using = router.db_for_read(model_instance.__class__, instance=model_instance)
- qs = self.rel.to._default_manager.using(using).filter(
- **{self.rel.field_name: value}
- )
- qs = qs.complex_filter(self.rel.limit_choices_to)
- if not qs.exists():
- raise exceptions.ValidationError(self.error_messages['invalid'] % {
- 'model': self.rel.to._meta.verbose_name, 'pk': value})
-
- def get_attname(self):
- return '%s_id' % self.name
-
- def get_validator_unique_lookup_type(self):
- return '%s__%s__exact' % (self.name, self.rel.get_related_field().name)
-
- def get_default(self):
- "Here we check if the default value is an object and return the to_field if so."
- field_default = super(ForeignKey, self).get_default()
- if isinstance(field_default, self.rel.to):
- return getattr(field_default, self.rel.get_related_field().attname)
- return field_default
-
- def get_db_prep_save(self, value, connection):
- if value == '' or value == None:
- return None
- else:
- return self.rel.get_related_field().get_db_prep_save(value,
- connection=connection)
-
- def value_to_string(self, obj):
- if not obj:
- # In required many-to-one fields with only one available choice,
- # select that one available choice. Note: For SelectFields
- # we have to check that the length of choices is *2*, not 1,
- # because SelectFields always have an initial "blank" value.
- if not self.blank and self.choices:
- choice_list = self.get_choices_default()
- if len(choice_list) == 2:
- return smart_unicode(choice_list[1][0])
- return Field.value_to_string(self, obj)
-
- def contribute_to_class(self, cls, name):
- super(ForeignKey, self).contribute_to_class(cls, name)
- setattr(cls, self.name, ReverseSingleRelatedObjectDescriptor(self))
- if isinstance(self.rel.to, basestring):
- target = self.rel.to
- else:
- target = self.rel.to._meta.db_table
- cls._meta.duplicate_targets[self.column] = (target, "o2m")
-
- def contribute_to_related_class(self, cls, related):
- # Internal FK's - i.e., those with a related name ending with '+' -
- # don't get a related descriptor.
- if not self.rel.is_hidden():
- setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
- if self.rel.field_name is None:
- self.rel.field_name = cls._meta.pk.name
-
- def formfield(self, **kwargs):
- db = kwargs.pop('using', None)
- defaults = {
- 'form_class': forms.ModelChoiceField,
- 'queryset': self.rel.to._default_manager.using(db).complex_filter(self.rel.limit_choices_to),
- 'to_field_name': self.rel.field_name,
- }
- defaults.update(kwargs)
- return super(ForeignKey, self).formfield(**defaults)
-
- def db_type(self, connection):
- # The database column type of a ForeignKey is the column type
- # of the field to which it points. An exception is if the ForeignKey
- # points to an AutoField/PositiveIntegerField/PositiveSmallIntegerField,
- # in which case the column type is simply that of an IntegerField.
- # If the database needs similar types for key fields however, the only
- # thing we can do is making AutoField an IntegerField.
- rel_field = self.rel.get_related_field()
- if (isinstance(rel_field, AutoField) or
- (not connection.features.related_fields_match_type and
- isinstance(rel_field, (PositiveIntegerField,
- PositiveSmallIntegerField)))):
- return IntegerField().db_type(connection=connection)
- return rel_field.db_type(connection=connection)
-
-class OneToOneField(ForeignKey):
- """
- A OneToOneField is essentially the same as a ForeignKey, with the exception
- that always carries a "unique" constraint with it and the reverse relation
- always returns the object pointed to (since there will only ever be one),
- rather than returning a list.
- """
- description = _("One-to-one relationship")
- def __init__(self, to, to_field=None, **kwargs):
- kwargs['unique'] = True
- super(OneToOneField, self).__init__(to, to_field, OneToOneRel, **kwargs)
-
- def contribute_to_related_class(self, cls, related):
- setattr(cls, related.get_accessor_name(),
- SingleRelatedObjectDescriptor(related))
-
- def formfield(self, **kwargs):
- if self.rel.parent_link:
- return None
- return super(OneToOneField, self).formfield(**kwargs)
-
- def save_form_data(self, instance, data):
- if isinstance(data, self.rel.to):
- setattr(instance, self.name, data)
- else:
- setattr(instance, self.attname, data)
-
-def create_many_to_many_intermediary_model(field, klass):
- from django.db import models
- managed = True
- if isinstance(field.rel.to, basestring) and field.rel.to != RECURSIVE_RELATIONSHIP_CONSTANT:
- to_model = field.rel.to
- to = to_model.split('.')[-1]
- def set_managed(field, model, cls):
- field.rel.through._meta.managed = model._meta.managed or cls._meta.managed
- add_lazy_relation(klass, field, to_model, set_managed)
- elif isinstance(field.rel.to, basestring):
- to = klass._meta.object_name
- to_model = klass
- managed = klass._meta.managed
- else:
- to = field.rel.to._meta.object_name
- to_model = field.rel.to
- managed = klass._meta.managed or to_model._meta.managed
- name = '%s_%s' % (klass._meta.object_name, field.name)
- if field.rel.to == RECURSIVE_RELATIONSHIP_CONSTANT or to == klass._meta.object_name:
- from_ = 'from_%s' % to.lower()
- to = 'to_%s' % to.lower()
- else:
- from_ = klass._meta.object_name.lower()
- to = to.lower()
- meta = type('Meta', (object,), {
- 'db_table': field._get_m2m_db_table(klass._meta),
- 'managed': managed,
- 'auto_created': klass,
- 'app_label': klass._meta.app_label,
- 'unique_together': (from_, to),
- 'verbose_name': '%(from)s-%(to)s relationship' % {'from': from_, 'to': to},
- 'verbose_name_plural': '%(from)s-%(to)s relationships' % {'from': from_, 'to': to},
- })
- # Construct and return the new class.
- return type(name, (models.Model,), {
- 'Meta': meta,
- '__module__': klass.__module__,
- from_: models.ForeignKey(klass, related_name='%s+' % name),
- to: models.ForeignKey(to_model, related_name='%s+' % name)
- })
-
-class ManyToManyField(RelatedField, Field):
- description = _("Many-to-many relationship")
- def __init__(self, to, **kwargs):
- try:
- assert not to._meta.abstract, "%s cannot define a relation with abstract class %s" % (self.__class__.__name__, to._meta.object_name)
- except AttributeError: # to._meta doesn't exist, so it must be RECURSIVE_RELATIONSHIP_CONSTANT
- assert isinstance(to, basestring), "%s(%r) is invalid. First parameter to ManyToManyField must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)
-
- kwargs['verbose_name'] = kwargs.get('verbose_name', None)
- kwargs['rel'] = ManyToManyRel(to,
- related_name=kwargs.pop('related_name', None),
- limit_choices_to=kwargs.pop('limit_choices_to', None),
- symmetrical=kwargs.pop('symmetrical', to==RECURSIVE_RELATIONSHIP_CONSTANT),
- through=kwargs.pop('through', None))
-
- self.db_table = kwargs.pop('db_table', None)
- if kwargs['rel'].through is not None:
- assert self.db_table is None, "Cannot specify a db_table if an intermediary model is used."
-
- Field.__init__(self, **kwargs)
-
- msg = _('Hold down "Control", or "Command" on a Mac, to select more than one.')
- self.help_text = string_concat(self.help_text, ' ', msg)
-
- def get_choices_default(self):
- return Field.get_choices(self, include_blank=False)
-
- def _get_m2m_db_table(self, opts):
- "Function that can be curried to provide the m2m table name for this relation"
- if self.rel.through is not None:
- return self.rel.through._meta.db_table
- elif self.db_table:
- return self.db_table
- else:
- return util.truncate_name('%s_%s' % (opts.db_table, self.name),
- connection.ops.max_name_length())
-
- def _get_m2m_attr(self, related, attr):
- "Function that can be curried to provide the source accessor or DB column name for the m2m table"
- cache_attr = '_m2m_%s_cache' % attr
- if hasattr(self, cache_attr):
- return getattr(self, cache_attr)
- for f in self.rel.through._meta.fields:
- if hasattr(f,'rel') and f.rel and f.rel.to == related.model:
- setattr(self, cache_attr, getattr(f, attr))
- return getattr(self, cache_attr)
-
- def _get_m2m_reverse_attr(self, related, attr):
- "Function that can be curried to provide the related accessor or DB column name for the m2m table"
- cache_attr = '_m2m_reverse_%s_cache' % attr
- if hasattr(self, cache_attr):
- return getattr(self, cache_attr)
- found = False
- for f in self.rel.through._meta.fields:
- if hasattr(f,'rel') and f.rel and f.rel.to == related.parent_model:
- if related.model == related.parent_model:
- # If this is an m2m-intermediate to self,
- # the first foreign key you find will be
- # the source column. Keep searching for
- # the second foreign key.
- if found:
- setattr(self, cache_attr, getattr(f, attr))
- break
- else:
- found = True
- else:
- setattr(self, cache_attr, getattr(f, attr))
- break
- return getattr(self, cache_attr)
-
- def isValidIDList(self, field_data, all_data):
- "Validates that the value is a valid list of foreign keys"
- mod = self.rel.to
- try:
- pks = map(int, field_data.split(','))
- except ValueError:
- # the CommaSeparatedIntegerField validator will catch this error
- return
- objects = mod._default_manager.in_bulk(pks)
- if len(objects) != len(pks):
- badkeys = [k for k in pks if k not in objects]
- raise exceptions.ValidationError(
- ungettext("Please enter valid %(self)s IDs. The value %(value)r is invalid.",
- "Please enter valid %(self)s IDs. The values %(value)r are invalid.",
- len(badkeys)) % {
- 'self': self.verbose_name,
- 'value': len(badkeys) == 1 and badkeys[0] or tuple(badkeys),
- })
-
- def value_to_string(self, obj):
- data = ''
- if obj:
- qs = getattr(obj, self.name).all()
- data = [instance._get_pk_val() for instance in qs]
- else:
- # In required many-to-many fields with only one available choice,
- # select that one available choice.
- if not self.blank:
- choices_list = self.get_choices_default()
- if len(choices_list) == 1:
- data = [choices_list[0][0]]
- return smart_unicode(data)
-
- def contribute_to_class(self, cls, name):
- # To support multiple relations to self, it's useful to have a non-None
- # related name on symmetrical relations for internal reasons. The
- # concept doesn't make a lot of sense externally ("you want me to
- # specify *what* on my non-reversible relation?!"), so we set it up
- # automatically. The funky name reduces the chance of an accidental
- # clash.
- if self.rel.symmetrical and (self.rel.to == "self" or self.rel.to == cls._meta.object_name):
- self.rel.related_name = "%s_rel_+" % name
-
- super(ManyToManyField, self).contribute_to_class(cls, name)
-
- # The intermediate m2m model is not auto created if:
- # 1) There is a manually specified intermediate, or
- # 2) The class owning the m2m field is abstract.
- if not self.rel.through and not cls._meta.abstract:
- self.rel.through = create_many_to_many_intermediary_model(self, cls)
-
- # Add the descriptor for the m2m relation
- setattr(cls, self.name, ReverseManyRelatedObjectsDescriptor(self))
-
- # Set up the accessor for the m2m table name for the relation
- self.m2m_db_table = curry(self._get_m2m_db_table, cls._meta)
-
- # Populate some necessary rel arguments so that cross-app relations
- # work correctly.
- if isinstance(self.rel.through, basestring):
- def resolve_through_model(field, model, cls):
- field.rel.through = model
- add_lazy_relation(cls, self, self.rel.through, resolve_through_model)
-
- if isinstance(self.rel.to, basestring):
- target = self.rel.to
- else:
- target = self.rel.to._meta.db_table
- cls._meta.duplicate_targets[self.column] = (target, "m2m")
-
- def contribute_to_related_class(self, cls, related):
- # Internal M2Ms (i.e., those with a related name ending with '+')
- # don't get a related descriptor.
- if not self.rel.is_hidden():
- setattr(cls, related.get_accessor_name(), ManyRelatedObjectsDescriptor(related))
-
- # Set up the accessors for the column names on the m2m table
- self.m2m_column_name = curry(self._get_m2m_attr, related, 'column')
- self.m2m_reverse_name = curry(self._get_m2m_reverse_attr, related, 'column')
-
- self.m2m_field_name = curry(self._get_m2m_attr, related, 'name')
- self.m2m_reverse_field_name = curry(self._get_m2m_reverse_attr, related, 'name')
-
- def set_attributes_from_rel(self):
- pass
-
- def value_from_object(self, obj):
- "Returns the value of this field in the given model instance."
- return getattr(obj, self.attname).all()
-
- def save_form_data(self, instance, data):
- setattr(instance, self.attname, data)
-
- def formfield(self, **kwargs):
- db = kwargs.pop('using', None)
- defaults = {
- 'form_class': forms.ModelMultipleChoiceField,
- 'queryset': self.rel.to._default_manager.using(db).complex_filter(self.rel.limit_choices_to)
- }
- defaults.update(kwargs)
- # If initial is passed in, it's a list of related objects, but the
- # MultipleChoiceField takes a list of IDs.
- if defaults.get('initial') is not None:
- initial = defaults['initial']
- if callable(initial):
- initial = initial()
- defaults['initial'] = [i._get_pk_val() for i in initial]
- return super(ManyToManyField, self).formfield(**defaults)
-
- def db_type(self, connection):
- # A ManyToManyField is not represented by a single column,
- # so return None.
- return None
diff --git a/parts/django/django/db/models/fields/subclassing.py b/parts/django/django/db/models/fields/subclassing.py
deleted file mode 100644
index 8647cb3..0000000
--- a/parts/django/django/db/models/fields/subclassing.py
+++ /dev/null
@@ -1,117 +0,0 @@
-"""
-Convenience routines for creating non-trivial Field subclasses, as well as
-backwards compatibility utilities.
-
-Add SubfieldBase as the __metaclass__ for your Field subclass, implement
-to_python() and the other necessary methods and everything will work seamlessly.
-"""
-
-from inspect import getargspec
-from warnings import warn
-
-def call_with_connection(func):
- arg_names, varargs, varkwargs, defaults = getargspec(func)
- updated = ('connection' in arg_names or varkwargs)
- if not updated:
- warn("A Field class whose %s method hasn't been updated to take a "
- "`connection` argument." % func.__name__,
- PendingDeprecationWarning, stacklevel=2)
-
- def inner(*args, **kwargs):
- if 'connection' not in kwargs:
- from django.db import connection
- kwargs['connection'] = connection
- warn("%s has been called without providing a connection argument. " %
- func.__name__, PendingDeprecationWarning,
- stacklevel=1)
- if updated:
- return func(*args, **kwargs)
- if 'connection' in kwargs:
- del kwargs['connection']
- return func(*args, **kwargs)
- return inner
-
-def call_with_connection_and_prepared(func):
- arg_names, varargs, varkwargs, defaults = getargspec(func)
- updated = (
- ('connection' in arg_names or varkwargs) and
- ('prepared' in arg_names or varkwargs)
- )
- if not updated:
- warn("A Field class whose %s method hasn't been updated to take "
- "`connection` and `prepared` arguments." % func.__name__,
- PendingDeprecationWarning, stacklevel=2)
-
- def inner(*args, **kwargs):
- if 'connection' not in kwargs:
- from django.db import connection
- kwargs['connection'] = connection
- warn("%s has been called without providing a connection argument. " %
- func.__name__, PendingDeprecationWarning,
- stacklevel=1)
- if updated:
- return func(*args, **kwargs)
- if 'connection' in kwargs:
- del kwargs['connection']
- if 'prepared' in kwargs:
- del kwargs['prepared']
- return func(*args, **kwargs)
- return inner
-
-class LegacyConnection(type):
- """
- A metaclass to normalize arguments give to the get_db_prep_* and db_type
- methods on fields.
- """
- def __new__(cls, name, bases, attrs):
- new_cls = super(LegacyConnection, cls).__new__(cls, name, bases, attrs)
- for attr in ('db_type', 'get_db_prep_save'):
- setattr(new_cls, attr, call_with_connection(getattr(new_cls, attr)))
- for attr in ('get_db_prep_lookup', 'get_db_prep_value'):
- setattr(new_cls, attr, call_with_connection_and_prepared(getattr(new_cls, attr)))
- return new_cls
-
-class SubfieldBase(LegacyConnection):
- """
- A metaclass for custom Field subclasses. This ensures the model's attribute
- has the descriptor protocol attached to it.
- """
- def __new__(cls, name, bases, attrs):
- new_class = super(SubfieldBase, cls).__new__(cls, name, bases, attrs)
- new_class.contribute_to_class = make_contrib(
- new_class, attrs.get('contribute_to_class')
- )
- return new_class
-
-class Creator(object):
- """
- A placeholder class that provides a way to set the attribute on the model.
- """
- def __init__(self, field):
- self.field = field
-
- def __get__(self, obj, type=None):
- if obj is None:
- raise AttributeError('Can only be accessed via an instance.')
- return obj.__dict__[self.field.name]
-
- def __set__(self, obj, value):
- obj.__dict__[self.field.name] = self.field.to_python(value)
-
-def make_contrib(superclass, func=None):
- """
- Returns a suitable contribute_to_class() method for the Field subclass.
-
- If 'func' is passed in, it is the existing contribute_to_class() method on
- the subclass and it is called before anything else. It is assumed in this
- case that the existing contribute_to_class() calls all the necessary
- superclass methods.
- """
- def contribute_to_class(self, cls, name):
- if func:
- func(self, cls, name)
- else:
- super(superclass, self).contribute_to_class(cls, name)
- setattr(cls, self.name, Creator(self))
-
- return contribute_to_class
diff --git a/parts/django/django/db/models/loading.py b/parts/django/django/db/models/loading.py
deleted file mode 100644
index 620cebc..0000000
--- a/parts/django/django/db/models/loading.py
+++ /dev/null
@@ -1,227 +0,0 @@
-"Utilities for loading models and the modules that contain them."
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.utils.datastructures import SortedDict
-from django.utils.importlib import import_module
-from django.utils.module_loading import module_has_submodule
-
-import imp
-import sys
-import os
-import threading
-
-__all__ = ('get_apps', 'get_app', 'get_models', 'get_model', 'register_models',
- 'load_app', 'app_cache_ready')
-
-class AppCache(object):
- """
- A cache that stores installed applications and their models. Used to
- provide reverse-relations and for app introspection (e.g. admin).
- """
- # Use the Borg pattern to share state between all instances. Details at
- # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66531.
- __shared_state = dict(
- # Keys of app_store are the model modules for each application.
- app_store = SortedDict(),
-
- # Mapping of app_labels to a dictionary of model names to model code.
- app_models = SortedDict(),
-
- # Mapping of app_labels to errors raised when trying to import the app.
- app_errors = {},
-
- # -- Everything below here is only used when populating the cache --
- loaded = False,
- handled = {},
- postponed = [],
- nesting_level = 0,
- write_lock = threading.RLock(),
- _get_models_cache = {},
- )
-
- def __init__(self):
- self.__dict__ = self.__shared_state
-
- def _populate(self):
- """
- Fill in all the cache information. This method is threadsafe, in the
- sense that every caller will see the same state upon return, and if the
- cache is already initialised, it does no work.
- """
- if self.loaded:
- return
- self.write_lock.acquire()
- try:
- if self.loaded:
- return
- for app_name in settings.INSTALLED_APPS:
- if app_name in self.handled:
- continue
- self.load_app(app_name, True)
- if not self.nesting_level:
- for app_name in self.postponed:
- self.load_app(app_name)
- self.loaded = True
- finally:
- self.write_lock.release()
-
- def load_app(self, app_name, can_postpone=False):
- """
- Loads the app with the provided fully qualified name, and returns the
- model module.
- """
- self.handled[app_name] = None
- self.nesting_level += 1
- app_module = import_module(app_name)
- try:
- models = import_module('.models', app_name)
- except ImportError:
- self.nesting_level -= 1
- # If the app doesn't have a models module, we can just ignore the
- # ImportError and return no models for it.
- if not module_has_submodule(app_module, 'models'):
- return None
- # But if the app does have a models module, we need to figure out
- # whether to suppress or propagate the error. If can_postpone is
- # True then it may be that the package is still being imported by
- # Python and the models module isn't available yet. So we add the
- # app to the postponed list and we'll try it again after all the
- # recursion has finished (in populate). If can_postpone is False
- # then it's time to raise the ImportError.
- else:
- if can_postpone:
- self.postponed.append(app_name)
- return None
- else:
- raise
-
- self.nesting_level -= 1
- if models not in self.app_store:
- self.app_store[models] = len(self.app_store)
- return models
-
- def app_cache_ready(self):
- """
- Returns true if the model cache is fully populated.
-
- Useful for code that wants to cache the results of get_models() for
- themselves once it is safe to do so.
- """
- return self.loaded
-
- def get_apps(self):
- "Returns a list of all installed modules that contain models."
- self._populate()
-
- # Ensure the returned list is always in the same order (with new apps
- # added at the end). This avoids unstable ordering on the admin app
- # list page, for example.
- apps = [(v, k) for k, v in self.app_store.items()]
- apps.sort()
- return [elt[1] for elt in apps]
-
- def get_app(self, app_label, emptyOK=False):
- """
- Returns the module containing the models for the given app_label. If
- the app has no models in it and 'emptyOK' is True, returns None.
- """
- self._populate()
- self.write_lock.acquire()
- try:
- for app_name in settings.INSTALLED_APPS:
- if app_label == app_name.split('.')[-1]:
- mod = self.load_app(app_name, False)
- if mod is None:
- if emptyOK:
- return None
- else:
- return mod
- raise ImproperlyConfigured("App with label %s could not be found" % app_label)
- finally:
- self.write_lock.release()
-
- def get_app_errors(self):
- "Returns the map of known problems with the INSTALLED_APPS."
- self._populate()
- return self.app_errors
-
- def get_models(self, app_mod=None, include_auto_created=False, include_deferred=False):
- """
- Given a module containing models, returns a list of the models.
- Otherwise returns a list of all installed models.
-
- By default, auto-created models (i.e., m2m models without an
- explicit intermediate table) are not included. However, if you
- specify include_auto_created=True, they will be.
-
- By default, models created to satisfy deferred attribute
- queries are *not* included in the list of models. However, if
- you specify include_deferred, they will be.
- """
- cache_key = (app_mod, include_auto_created, include_deferred)
- try:
- return self._get_models_cache[cache_key]
- except KeyError:
- pass
- self._populate()
- if app_mod:
- app_list = [self.app_models.get(app_mod.__name__.split('.')[-2], SortedDict())]
- else:
- app_list = self.app_models.itervalues()
- model_list = []
- for app in app_list:
- model_list.extend(
- model for model in app.values()
- if ((not model._deferred or include_deferred)
- and (not model._meta.auto_created or include_auto_created))
- )
- self._get_models_cache[cache_key] = model_list
- return model_list
-
- def get_model(self, app_label, model_name, seed_cache=True):
- """
- Returns the model matching the given app_label and case-insensitive
- model_name.
-
- Returns None if no model is found.
- """
- if seed_cache:
- self._populate()
- return self.app_models.get(app_label, SortedDict()).get(model_name.lower())
-
- def register_models(self, app_label, *models):
- """
- Register a set of models as belonging to an app.
- """
- for model in models:
- # Store as 'name: model' pair in a dictionary
- # in the app_models dictionary
- model_name = model._meta.object_name.lower()
- model_dict = self.app_models.setdefault(app_label, SortedDict())
- if model_name in model_dict:
- # The same model may be imported via different paths (e.g.
- # appname.models and project.appname.models). We use the source
- # filename as a means to detect identity.
- fname1 = os.path.abspath(sys.modules[model.__module__].__file__)
- fname2 = os.path.abspath(sys.modules[model_dict[model_name].__module__].__file__)
- # Since the filename extension could be .py the first time and
- # .pyc or .pyo the second time, ignore the extension when
- # comparing.
- if os.path.splitext(fname1)[0] == os.path.splitext(fname2)[0]:
- continue
- model_dict[model_name] = model
- self._get_models_cache.clear()
-
-cache = AppCache()
-
-# These methods were always module level, so are kept that way for backwards
-# compatibility.
-get_apps = cache.get_apps
-get_app = cache.get_app
-get_app_errors = cache.get_app_errors
-get_models = cache.get_models
-get_model = cache.get_model
-register_models = cache.register_models
-load_app = cache.load_app
-app_cache_ready = cache.app_cache_ready
diff --git a/parts/django/django/db/models/manager.py b/parts/django/django/db/models/manager.py
deleted file mode 100644
index 6a62c25..0000000
--- a/parts/django/django/db/models/manager.py
+++ /dev/null
@@ -1,216 +0,0 @@
-from django.utils import copycompat as copy
-from django.conf import settings
-from django.db import router
-from django.db.models.query import QuerySet, EmptyQuerySet, insert_query, RawQuerySet
-from django.db.models import signals
-from django.db.models.fields import FieldDoesNotExist
-
-
-def ensure_default_manager(sender, **kwargs):
- """
- Ensures that a Model subclass contains a default manager and sets the
- _default_manager attribute on the class. Also sets up the _base_manager
- points to a plain Manager instance (which could be the same as
- _default_manager if it's not a subclass of Manager).
- """
- cls = sender
- if cls._meta.abstract:
- return
- if not getattr(cls, '_default_manager', None):
- # Create the default manager, if needed.
- try:
- cls._meta.get_field('objects')
- raise ValueError("Model %s must specify a custom Manager, because it has a field named 'objects'" % cls.__name__)
- except FieldDoesNotExist:
- pass
- cls.add_to_class('objects', Manager())
- cls._base_manager = cls.objects
- elif not getattr(cls, '_base_manager', None):
- default_mgr = cls._default_manager.__class__
- if (default_mgr is Manager or
- getattr(default_mgr, "use_for_related_fields", False)):
- cls._base_manager = cls._default_manager
- else:
- # Default manager isn't a plain Manager class, or a suitable
- # replacement, so we walk up the base class hierarchy until we hit
- # something appropriate.
- for base_class in default_mgr.mro()[1:]:
- if (base_class is Manager or
- getattr(base_class, "use_for_related_fields", False)):
- cls.add_to_class('_base_manager', base_class())
- return
- raise AssertionError("Should never get here. Please report a bug, including your model and model manager setup.")
-
-signals.class_prepared.connect(ensure_default_manager)
-
-class Manager(object):
- # Tracks each time a Manager instance is created. Used to retain order.
- creation_counter = 0
-
- def __init__(self):
- super(Manager, self).__init__()
- self._set_creation_counter()
- self.model = None
- self._inherited = False
- self._db = None
-
- def contribute_to_class(self, model, name):
- # TODO: Use weakref because of possible memory leak / circular reference.
- self.model = model
- setattr(model, name, ManagerDescriptor(self))
- if not getattr(model, '_default_manager', None) or self.creation_counter < model._default_manager.creation_counter:
- model._default_manager = self
- if model._meta.abstract or (self._inherited and not self.model._meta.proxy):
- model._meta.abstract_managers.append((self.creation_counter, name,
- self))
- else:
- model._meta.concrete_managers.append((self.creation_counter, name,
- self))
-
- def _set_creation_counter(self):
- """
- Sets the creation counter value for this instance and increments the
- class-level copy.
- """
- self.creation_counter = Manager.creation_counter
- Manager.creation_counter += 1
-
- def _copy_to_model(self, model):
- """
- Makes a copy of the manager and assigns it to 'model', which should be
- a child of the existing model (used when inheriting a manager from an
- abstract base class).
- """
- assert issubclass(model, self.model)
- mgr = copy.copy(self)
- mgr._set_creation_counter()
- mgr.model = model
- mgr._inherited = True
- return mgr
-
- def db_manager(self, using):
- obj = copy.copy(self)
- obj._db = using
- return obj
-
- @property
- def db(self):
- return self._db or router.db_for_read(self.model)
-
- #######################
- # PROXIES TO QUERYSET #
- #######################
-
- def get_empty_query_set(self):
- return EmptyQuerySet(self.model, using=self._db)
-
- def get_query_set(self):
- """Returns a new QuerySet object. Subclasses can override this method
- to easily customize the behavior of the Manager.
- """
- return QuerySet(self.model, using=self._db)
-
- def none(self):
- return self.get_empty_query_set()
-
- def all(self):
- return self.get_query_set()
-
- def count(self):
- return self.get_query_set().count()
-
- def dates(self, *args, **kwargs):
- return self.get_query_set().dates(*args, **kwargs)
-
- def distinct(self, *args, **kwargs):
- return self.get_query_set().distinct(*args, **kwargs)
-
- def extra(self, *args, **kwargs):
- return self.get_query_set().extra(*args, **kwargs)
-
- def get(self, *args, **kwargs):
- return self.get_query_set().get(*args, **kwargs)
-
- def get_or_create(self, **kwargs):
- return self.get_query_set().get_or_create(**kwargs)
-
- def create(self, **kwargs):
- return self.get_query_set().create(**kwargs)
-
- def filter(self, *args, **kwargs):
- return self.get_query_set().filter(*args, **kwargs)
-
- def aggregate(self, *args, **kwargs):
- return self.get_query_set().aggregate(*args, **kwargs)
-
- def annotate(self, *args, **kwargs):
- return self.get_query_set().annotate(*args, **kwargs)
-
- def complex_filter(self, *args, **kwargs):
- return self.get_query_set().complex_filter(*args, **kwargs)
-
- def exclude(self, *args, **kwargs):
- return self.get_query_set().exclude(*args, **kwargs)
-
- def in_bulk(self, *args, **kwargs):
- return self.get_query_set().in_bulk(*args, **kwargs)
-
- def iterator(self, *args, **kwargs):
- return self.get_query_set().iterator(*args, **kwargs)
-
- def latest(self, *args, **kwargs):
- return self.get_query_set().latest(*args, **kwargs)
-
- def order_by(self, *args, **kwargs):
- return self.get_query_set().order_by(*args, **kwargs)
-
- def select_related(self, *args, **kwargs):
- return self.get_query_set().select_related(*args, **kwargs)
-
- def values(self, *args, **kwargs):
- return self.get_query_set().values(*args, **kwargs)
-
- def values_list(self, *args, **kwargs):
- return self.get_query_set().values_list(*args, **kwargs)
-
- def update(self, *args, **kwargs):
- return self.get_query_set().update(*args, **kwargs)
-
- def reverse(self, *args, **kwargs):
- return self.get_query_set().reverse(*args, **kwargs)
-
- def defer(self, *args, **kwargs):
- return self.get_query_set().defer(*args, **kwargs)
-
- def only(self, *args, **kwargs):
- return self.get_query_set().only(*args, **kwargs)
-
- def using(self, *args, **kwargs):
- return self.get_query_set().using(*args, **kwargs)
-
- def exists(self, *args, **kwargs):
- return self.get_query_set().exists(*args, **kwargs)
-
- def _insert(self, values, **kwargs):
- return insert_query(self.model, values, **kwargs)
-
- def _update(self, values, **kwargs):
- return self.get_query_set()._update(values, **kwargs)
-
- def raw(self, raw_query, params=None, *args, **kwargs):
- return RawQuerySet(raw_query=raw_query, model=self.model, params=params, using=self._db, *args, **kwargs)
-
-class ManagerDescriptor(object):
- # This class ensures managers aren't accessible via model instances.
- # For example, Poll.objects works, but poll_obj.objects raises AttributeError.
- def __init__(self, manager):
- self.manager = manager
-
- def __get__(self, instance, type=None):
- if instance != None:
- raise AttributeError("Manager isn't accessible via %s instances" % type.__name__)
- return self.manager
-
-class EmptyManager(Manager):
- def get_query_set(self):
- return self.get_empty_query_set()
diff --git a/parts/django/django/db/models/options.py b/parts/django/django/db/models/options.py
deleted file mode 100644
index 4301c75..0000000
--- a/parts/django/django/db/models/options.py
+++ /dev/null
@@ -1,485 +0,0 @@
-import re
-from bisect import bisect
-
-from django.conf import settings
-from django.db.models.related import RelatedObject
-from django.db.models.fields.related import ManyToManyRel
-from django.db.models.fields import AutoField, FieldDoesNotExist
-from django.db.models.fields.proxy import OrderWrt
-from django.db.models.loading import get_models, app_cache_ready
-from django.utils.translation import activate, deactivate_all, get_language, string_concat
-from django.utils.encoding import force_unicode, smart_str
-from django.utils.datastructures import SortedDict
-
-# Calculate the verbose_name by converting from InitialCaps to "lowercase with spaces".
-get_verbose_name = lambda class_name: re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', ' \\1', class_name).lower().strip()
-
-DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
- 'unique_together', 'permissions', 'get_latest_by',
- 'order_with_respect_to', 'app_label', 'db_tablespace',
- 'abstract', 'managed', 'proxy', 'auto_created')
-
-class Options(object):
- def __init__(self, meta, app_label=None):
- self.local_fields, self.local_many_to_many = [], []
- self.virtual_fields = []
- self.module_name, self.verbose_name = None, None
- self.verbose_name_plural = None
- self.db_table = ''
- self.ordering = []
- self.unique_together = []
- self.permissions = []
- self.object_name, self.app_label = None, app_label
- self.get_latest_by = None
- self.order_with_respect_to = None
- self.db_tablespace = settings.DEFAULT_TABLESPACE
- self.admin = None
- self.meta = meta
- self.pk = None
- self.has_auto_field, self.auto_field = False, None
- self.abstract = False
- self.managed = True
- self.proxy = False
- self.proxy_for_model = None
- self.parents = SortedDict()
- self.duplicate_targets = {}
- self.auto_created = False
-
- # To handle various inheritance situations, we need to track where
- # managers came from (concrete or abstract base classes).
- self.abstract_managers = []
- self.concrete_managers = []
-
- def contribute_to_class(self, cls, name):
- from django.db import connection
- from django.db.backends.util import truncate_name
-
- cls._meta = self
- self.installed = re.sub('\.models$', '', cls.__module__) in settings.INSTALLED_APPS
- # First, construct the default values for these options.
- self.object_name = cls.__name__
- self.module_name = self.object_name.lower()
- self.verbose_name = get_verbose_name(self.object_name)
-
- # Next, apply any overridden values from 'class Meta'.
- if self.meta:
- meta_attrs = self.meta.__dict__.copy()
- for name in self.meta.__dict__:
- # Ignore any private attributes that Django doesn't care about.
- # NOTE: We can't modify a dictionary's contents while looping
- # over it, so we loop over the *original* dictionary instead.
- if name.startswith('_'):
- del meta_attrs[name]
- for attr_name in DEFAULT_NAMES:
- if attr_name in meta_attrs:
- setattr(self, attr_name, meta_attrs.pop(attr_name))
- elif hasattr(self.meta, attr_name):
- setattr(self, attr_name, getattr(self.meta, attr_name))
-
- # unique_together can be either a tuple of tuples, or a single
- # tuple of two strings. Normalize it to a tuple of tuples, so that
- # calling code can uniformly expect that.
- ut = meta_attrs.pop('unique_together', getattr(self, 'unique_together'))
- if ut and not isinstance(ut[0], (tuple, list)):
- ut = (ut,)
- setattr(self, 'unique_together', ut)
-
- # verbose_name_plural is a special case because it uses a 's'
- # by default.
- if self.verbose_name_plural is None:
- self.verbose_name_plural = string_concat(self.verbose_name, 's')
-
- # Any leftover attributes must be invalid.
- if meta_attrs != {}:
- raise TypeError("'class Meta' got invalid attribute(s): %s" % ','.join(meta_attrs.keys()))
- else:
- self.verbose_name_plural = string_concat(self.verbose_name, 's')
- del self.meta
-
- # If the db_table wasn't provided, use the app_label + module_name.
- if not self.db_table:
- self.db_table = "%s_%s" % (self.app_label, self.module_name)
- self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
-
- def _prepare(self, model):
- if self.order_with_respect_to:
- self.order_with_respect_to = self.get_field(self.order_with_respect_to)
- self.ordering = ('_order',)
- model.add_to_class('_order', OrderWrt())
- else:
- self.order_with_respect_to = None
-
- if self.pk is None:
- if self.parents:
- # Promote the first parent link in lieu of adding yet another
- # field.
- field = self.parents.value_for_index(0)
- field.primary_key = True
- self.setup_pk(field)
- else:
- auto = AutoField(verbose_name='ID', primary_key=True,
- auto_created=True)
- model.add_to_class('id', auto)
-
- # Determine any sets of fields that are pointing to the same targets
- # (e.g. two ForeignKeys to the same remote model). The query
- # construction code needs to know this. At the end of this,
- # self.duplicate_targets will map each duplicate field column to the
- # columns it duplicates.
- collections = {}
- for column, target in self.duplicate_targets.iteritems():
- try:
- collections[target].add(column)
- except KeyError:
- collections[target] = set([column])
- self.duplicate_targets = {}
- for elt in collections.itervalues():
- if len(elt) == 1:
- continue
- for column in elt:
- self.duplicate_targets[column] = elt.difference(set([column]))
-
- def add_field(self, field):
- # Insert the given field in the order in which it was created, using
- # the "creation_counter" attribute of the field.
- # Move many-to-many related fields from self.fields into
- # self.many_to_many.
- if field.rel and isinstance(field.rel, ManyToManyRel):
- self.local_many_to_many.insert(bisect(self.local_many_to_many, field), field)
- if hasattr(self, '_m2m_cache'):
- del self._m2m_cache
- else:
- self.local_fields.insert(bisect(self.local_fields, field), field)
- self.setup_pk(field)
- if hasattr(self, '_field_cache'):
- del self._field_cache
- del self._field_name_cache
-
- if hasattr(self, '_name_map'):
- del self._name_map
-
- def add_virtual_field(self, field):
- self.virtual_fields.append(field)
-
- def setup_pk(self, field):
- if not self.pk and field.primary_key:
- self.pk = field
- field.serialize = False
-
- def setup_proxy(self, target):
- """
- Does the internal setup so that the current model is a proxy for
- "target".
- """
- self.pk = target._meta.pk
- self.proxy_for_model = target
- self.db_table = target._meta.db_table
-
- def __repr__(self):
- return '<Options for %s>' % self.object_name
-
- def __str__(self):
- return "%s.%s" % (smart_str(self.app_label), smart_str(self.module_name))
-
- def verbose_name_raw(self):
- """
- There are a few places where the untranslated verbose name is needed
- (so that we get the same value regardless of currently active
- locale).
- """
- lang = get_language()
- deactivate_all()
- raw = force_unicode(self.verbose_name)
- activate(lang)
- return raw
- verbose_name_raw = property(verbose_name_raw)
-
- def _fields(self):
- """
- The getter for self.fields. This returns the list of field objects
- available to this model (including through parent models).
-
- Callers are not permitted to modify this list, since it's a reference
- to this instance (not a copy).
- """
- try:
- self._field_name_cache
- except AttributeError:
- self._fill_fields_cache()
- return self._field_name_cache
- fields = property(_fields)
-
- def get_fields_with_model(self):
- """
- Returns a sequence of (field, model) pairs for all fields. The "model"
- element is None for fields on the current model. Mostly of use when
- constructing queries so that we know which model a field belongs to.
- """
- try:
- self._field_cache
- except AttributeError:
- self._fill_fields_cache()
- return self._field_cache
-
- def _fill_fields_cache(self):
- cache = []
- for parent in self.parents:
- for field, model in parent._meta.get_fields_with_model():
- if model:
- cache.append((field, model))
- else:
- cache.append((field, parent))
- cache.extend([(f, None) for f in self.local_fields])
- self._field_cache = tuple(cache)
- self._field_name_cache = [x for x, _ in cache]
-
- def _many_to_many(self):
- try:
- self._m2m_cache
- except AttributeError:
- self._fill_m2m_cache()
- return self._m2m_cache.keys()
- many_to_many = property(_many_to_many)
-
- def get_m2m_with_model(self):
- """
- The many-to-many version of get_fields_with_model().
- """
- try:
- self._m2m_cache
- except AttributeError:
- self._fill_m2m_cache()
- return self._m2m_cache.items()
-
- def _fill_m2m_cache(self):
- cache = SortedDict()
- for parent in self.parents:
- for field, model in parent._meta.get_m2m_with_model():
- if model:
- cache[field] = model
- else:
- cache[field] = parent
- for field in self.local_many_to_many:
- cache[field] = None
- self._m2m_cache = cache
-
- def get_field(self, name, many_to_many=True):
- """
- Returns the requested field by name. Raises FieldDoesNotExist on error.
- """
- to_search = many_to_many and (self.fields + self.many_to_many) or self.fields
- for f in to_search:
- if f.name == name:
- return f
- raise FieldDoesNotExist('%s has no field named %r' % (self.object_name, name))
-
- def get_field_by_name(self, name):
- """
- Returns the (field_object, model, direct, m2m), where field_object is
- the Field instance for the given name, model is the model containing
- this field (None for local fields), direct is True if the field exists
- on this model, and m2m is True for many-to-many relations. When
- 'direct' is False, 'field_object' is the corresponding RelatedObject
- for this field (since the field doesn't have an instance associated
- with it).
-
- Uses a cache internally, so after the first access, this is very fast.
- """
- try:
- try:
- return self._name_map[name]
- except AttributeError:
- cache = self.init_name_map()
- return cache[name]
- except KeyError:
- raise FieldDoesNotExist('%s has no field named %r'
- % (self.object_name, name))
-
- def get_all_field_names(self):
- """
- Returns a list of all field names that are possible for this model
- (including reverse relation names). This is used for pretty printing
- debugging output (a list of choices), so any internal-only field names
- are not included.
- """
- try:
- cache = self._name_map
- except AttributeError:
- cache = self.init_name_map()
- names = cache.keys()
- names.sort()
- # Internal-only names end with "+" (symmetrical m2m related names being
- # the main example). Trim them.
- return [val for val in names if not val.endswith('+')]
-
- def init_name_map(self):
- """
- Initialises the field name -> field object mapping.
- """
- cache = {}
- # We intentionally handle related m2m objects first so that symmetrical
- # m2m accessor names can be overridden, if necessary.
- for f, model in self.get_all_related_m2m_objects_with_model():
- cache[f.field.related_query_name()] = (f, model, False, True)
- for f, model in self.get_all_related_objects_with_model():
- cache[f.field.related_query_name()] = (f, model, False, False)
- for f, model in self.get_m2m_with_model():
- cache[f.name] = (f, model, True, True)
- for f, model in self.get_fields_with_model():
- cache[f.name] = (f, model, True, False)
- if app_cache_ready():
- self._name_map = cache
- return cache
-
- def get_add_permission(self):
- return 'add_%s' % self.object_name.lower()
-
- def get_change_permission(self):
- return 'change_%s' % self.object_name.lower()
-
- def get_delete_permission(self):
- return 'delete_%s' % self.object_name.lower()
-
- def get_all_related_objects(self, local_only=False):
- try:
- self._related_objects_cache
- except AttributeError:
- self._fill_related_objects_cache()
- if local_only:
- return [k for k, v in self._related_objects_cache.items() if not v]
- return self._related_objects_cache.keys()
-
- def get_all_related_objects_with_model(self):
- """
- Returns a list of (related-object, model) pairs. Similar to
- get_fields_with_model().
- """
- try:
- self._related_objects_cache
- except AttributeError:
- self._fill_related_objects_cache()
- return self._related_objects_cache.items()
-
- def _fill_related_objects_cache(self):
- cache = SortedDict()
- parent_list = self.get_parent_list()
- for parent in self.parents:
- for obj, model in parent._meta.get_all_related_objects_with_model():
- if (obj.field.creation_counter < 0 or obj.field.rel.parent_link) and obj.model not in parent_list:
- continue
- if not model:
- cache[obj] = parent
- else:
- cache[obj] = model
- for klass in get_models():
- for f in klass._meta.local_fields:
- if f.rel and not isinstance(f.rel.to, str) and self == f.rel.to._meta:
- cache[RelatedObject(f.rel.to, klass, f)] = None
- self._related_objects_cache = cache
-
- def get_all_related_many_to_many_objects(self, local_only=False):
- try:
- cache = self._related_many_to_many_cache
- except AttributeError:
- cache = self._fill_related_many_to_many_cache()
- if local_only:
- return [k for k, v in cache.items() if not v]
- return cache.keys()
-
- def get_all_related_m2m_objects_with_model(self):
- """
- Returns a list of (related-m2m-object, model) pairs. Similar to
- get_fields_with_model().
- """
- try:
- cache = self._related_many_to_many_cache
- except AttributeError:
- cache = self._fill_related_many_to_many_cache()
- return cache.items()
-
- def _fill_related_many_to_many_cache(self):
- cache = SortedDict()
- parent_list = self.get_parent_list()
- for parent in self.parents:
- for obj, model in parent._meta.get_all_related_m2m_objects_with_model():
- if obj.field.creation_counter < 0 and obj.model not in parent_list:
- continue
- if not model:
- cache[obj] = parent
- else:
- cache[obj] = model
- for klass in get_models():
- for f in klass._meta.local_many_to_many:
- if f.rel and not isinstance(f.rel.to, str) and self == f.rel.to._meta:
- cache[RelatedObject(f.rel.to, klass, f)] = None
- if app_cache_ready():
- self._related_many_to_many_cache = cache
- return cache
-
- def get_base_chain(self, model):
- """
- Returns a list of parent classes leading to 'model' (order from closet
- to most distant ancestor). This has to handle the case were 'model' is
- a granparent or even more distant relation.
- """
- if not self.parents:
- return
- if model in self.parents:
- return [model]
- for parent in self.parents:
- res = parent._meta.get_base_chain(model)
- if res:
- res.insert(0, parent)
- return res
- raise TypeError('%r is not an ancestor of this model'
- % model._meta.module_name)
-
- def get_parent_list(self):
- """
- Returns a list of all the ancestor of this model as a list. Useful for
- determining if something is an ancestor, regardless of lineage.
- """
- result = set()
- for parent in self.parents:
- result.add(parent)
- result.update(parent._meta.get_parent_list())
- return result
-
- def get_ancestor_link(self, ancestor):
- """
- Returns the field on the current model which points to the given
- "ancestor". This is possible an indirect link (a pointer to a parent
- model, which points, eventually, to the ancestor). Used when
- constructing table joins for model inheritance.
-
- Returns None if the model isn't an ancestor of this one.
- """
- if ancestor in self.parents:
- return self.parents[ancestor]
- for parent in self.parents:
- # Tries to get a link field from the immediate parent
- parent_link = parent._meta.get_ancestor_link(ancestor)
- if parent_link:
- # In case of a proxied model, the first link
- # of the chain to the ancestor is that parent
- # links
- return self.parents[parent] or parent_link
-
- def get_ordered_objects(self):
- "Returns a list of Options objects that are ordered with respect to this object."
- if not hasattr(self, '_ordered_objects'):
- objects = []
- # TODO
- #for klass in get_models(get_app(self.app_label)):
- # opts = klass._meta
- # if opts.order_with_respect_to and opts.order_with_respect_to.rel \
- # and self == opts.order_with_respect_to.rel.to._meta:
- # objects.append(opts)
- self._ordered_objects = objects
- return self._ordered_objects
-
- def pk_index(self):
- """
- Returns the index of the primary key field in the self.fields list.
- """
- return self.fields.index(self.pk)
diff --git a/parts/django/django/db/models/query.py b/parts/django/django/db/models/query.py
deleted file mode 100644
index 362114b..0000000
--- a/parts/django/django/db/models/query.py
+++ /dev/null
@@ -1,1518 +0,0 @@
-"""
-The main QuerySet implementation. This provides the public API for the ORM.
-"""
-
-from itertools import izip
-
-from django.db import connections, router, transaction, IntegrityError
-from django.db.models.aggregates import Aggregate
-from django.db.models.fields import DateField
-from django.db.models.query_utils import Q, select_related_descend, CollectedObjects, CyclicDependency, deferred_class_factory, InvalidQuery
-from django.db.models import signals, sql
-from django.utils.copycompat import deepcopy
-
-# Used to control how many objects are worked with at once in some cases (e.g.
-# when deleting objects).
-CHUNK_SIZE = 100
-ITER_CHUNK_SIZE = CHUNK_SIZE
-
-# The maximum number of items to display in a QuerySet.__repr__
-REPR_OUTPUT_SIZE = 20
-
-# Pull into this namespace for backwards compatibility.
-EmptyResultSet = sql.EmptyResultSet
-
-class QuerySet(object):
- """
- Represents a lazy database lookup for a set of objects.
- """
- def __init__(self, model=None, query=None, using=None):
- self.model = model
- # EmptyQuerySet instantiates QuerySet with model as None
- self._db = using
- self.query = query or sql.Query(self.model)
- self._result_cache = None
- self._iter = None
- self._sticky_filter = False
- self._for_write = False
-
- ########################
- # PYTHON MAGIC METHODS #
- ########################
-
- def __deepcopy__(self, memo):
- """
- Deep copy of a QuerySet doesn't populate the cache
- """
- obj = self.__class__()
- for k,v in self.__dict__.items():
- if k in ('_iter','_result_cache'):
- obj.__dict__[k] = None
- else:
- obj.__dict__[k] = deepcopy(v, memo)
- return obj
-
- def __getstate__(self):
- """
- Allows the QuerySet to be pickled.
- """
- # Force the cache to be fully populated.
- len(self)
-
- obj_dict = self.__dict__.copy()
- obj_dict['_iter'] = None
- return obj_dict
-
- def __repr__(self):
- data = list(self[:REPR_OUTPUT_SIZE + 1])
- if len(data) > REPR_OUTPUT_SIZE:
- data[-1] = "...(remaining elements truncated)..."
- return repr(data)
-
- def __len__(self):
- # Since __len__ is called quite frequently (for example, as part of
- # list(qs), we make some effort here to be as efficient as possible
- # whilst not messing up any existing iterators against the QuerySet.
- if self._result_cache is None:
- if self._iter:
- self._result_cache = list(self._iter)
- else:
- self._result_cache = list(self.iterator())
- elif self._iter:
- self._result_cache.extend(list(self._iter))
- return len(self._result_cache)
-
- def __iter__(self):
- if self._result_cache is None:
- self._iter = self.iterator()
- self._result_cache = []
- if self._iter:
- return self._result_iter()
- # Python's list iterator is better than our version when we're just
- # iterating over the cache.
- return iter(self._result_cache)
-
- def _result_iter(self):
- pos = 0
- while 1:
- upper = len(self._result_cache)
- while pos < upper:
- yield self._result_cache[pos]
- pos = pos + 1
- if not self._iter:
- raise StopIteration
- if len(self._result_cache) <= pos:
- self._fill_cache()
-
- def __nonzero__(self):
- if self._result_cache is not None:
- return bool(self._result_cache)
- try:
- iter(self).next()
- except StopIteration:
- return False
- return True
-
- def __contains__(self, val):
- # The 'in' operator works without this method, due to __iter__. This
- # implementation exists only to shortcut the creation of Model
- # instances, by bailing out early if we find a matching element.
- pos = 0
- if self._result_cache is not None:
- if val in self._result_cache:
- return True
- elif self._iter is None:
- # iterator is exhausted, so we have our answer
- return False
- # remember not to check these again:
- pos = len(self._result_cache)
- else:
- # We need to start filling the result cache out. The following
- # ensures that self._iter is not None and self._result_cache is not
- # None
- it = iter(self)
-
- # Carry on, one result at a time.
- while True:
- if len(self._result_cache) <= pos:
- self._fill_cache(num=1)
- if self._iter is None:
- # we ran out of items
- return False
- if self._result_cache[pos] == val:
- return True
- pos += 1
-
- def __getitem__(self, k):
- """
- Retrieves an item or slice from the set of results.
- """
- if not isinstance(k, (slice, int, long)):
- raise TypeError
- assert ((not isinstance(k, slice) and (k >= 0))
- or (isinstance(k, slice) and (k.start is None or k.start >= 0)
- and (k.stop is None or k.stop >= 0))), \
- "Negative indexing is not supported."
-
- if self._result_cache is not None:
- if self._iter is not None:
- # The result cache has only been partially populated, so we may
- # need to fill it out a bit more.
- if isinstance(k, slice):
- if k.stop is not None:
- # Some people insist on passing in strings here.
- bound = int(k.stop)
- else:
- bound = None
- else:
- bound = k + 1
- if len(self._result_cache) < bound:
- self._fill_cache(bound - len(self._result_cache))
- return self._result_cache[k]
-
- if isinstance(k, slice):
- qs = self._clone()
- if k.start is not None:
- start = int(k.start)
- else:
- start = None
- if k.stop is not None:
- stop = int(k.stop)
- else:
- stop = None
- qs.query.set_limits(start, stop)
- return k.step and list(qs)[::k.step] or qs
- try:
- qs = self._clone()
- qs.query.set_limits(k, k + 1)
- return list(qs)[0]
- except self.model.DoesNotExist, e:
- raise IndexError(e.args)
-
- def __and__(self, other):
- self._merge_sanity_check(other)
- if isinstance(other, EmptyQuerySet):
- return other._clone()
- combined = self._clone()
- combined.query.combine(other.query, sql.AND)
- return combined
-
- def __or__(self, other):
- self._merge_sanity_check(other)
- combined = self._clone()
- if isinstance(other, EmptyQuerySet):
- return combined
- combined.query.combine(other.query, sql.OR)
- return combined
-
- ####################################
- # METHODS THAT DO DATABASE QUERIES #
- ####################################
-
- def iterator(self):
- """
- An iterator over the results from applying this QuerySet to the
- database.
- """
- fill_cache = self.query.select_related
- if isinstance(fill_cache, dict):
- requested = fill_cache
- else:
- requested = None
- max_depth = self.query.max_depth
-
- extra_select = self.query.extra_select.keys()
- aggregate_select = self.query.aggregate_select.keys()
-
- only_load = self.query.get_loaded_field_names()
- if not fill_cache:
- fields = self.model._meta.fields
- pk_idx = self.model._meta.pk_index()
-
- index_start = len(extra_select)
- aggregate_start = index_start + len(self.model._meta.fields)
-
- load_fields = []
- # If only/defer clauses have been specified,
- # build the list of fields that are to be loaded.
- if only_load:
- for field, model in self.model._meta.get_fields_with_model():
- if model is None:
- model = self.model
- if field == self.model._meta.pk:
- # Record the index of the primary key when it is found
- pk_idx = len(load_fields)
- try:
- if field.name in only_load[model]:
- # Add a field that has been explicitly included
- load_fields.append(field.name)
- except KeyError:
- # Model wasn't explicitly listed in the only_load table
- # Therefore, we need to load all fields from this model
- load_fields.append(field.name)
-
- skip = None
- if load_fields and not fill_cache:
- # Some fields have been deferred, so we have to initialise
- # via keyword arguments.
- skip = set()
- init_list = []
- for field in fields:
- if field.name not in load_fields:
- skip.add(field.attname)
- else:
- init_list.append(field.attname)
- model_cls = deferred_class_factory(self.model, skip)
-
- # Cache db and model outside the loop
- db = self.db
- model = self.model
- compiler = self.query.get_compiler(using=db)
- for row in compiler.results_iter():
- if fill_cache:
- obj, _ = get_cached_row(model, row,
- index_start, using=db, max_depth=max_depth,
- requested=requested, offset=len(aggregate_select),
- only_load=only_load)
- else:
- if skip:
- row_data = row[index_start:aggregate_start]
- pk_val = row_data[pk_idx]
- obj = model_cls(**dict(zip(init_list, row_data)))
- else:
- # Omit aggregates in object creation.
- obj = model(*row[index_start:aggregate_start])
-
- # Store the source database of the object
- obj._state.db = db
- # This object came from the database; it's not being added.
- obj._state.adding = False
-
- if extra_select:
- for i, k in enumerate(extra_select):
- setattr(obj, k, row[i])
-
- # Add the aggregates to the model
- if aggregate_select:
- for i, aggregate in enumerate(aggregate_select):
- setattr(obj, aggregate, row[i+aggregate_start])
-
- yield obj
-
- def aggregate(self, *args, **kwargs):
- """
- Returns a dictionary containing the calculations (aggregation)
- over the current queryset
-
- If args is present the expression is passed as a kwarg using
- the Aggregate object's default alias.
- """
- for arg in args:
- kwargs[arg.default_alias] = arg
-
- query = self.query.clone()
-
- for (alias, aggregate_expr) in kwargs.items():
- query.add_aggregate(aggregate_expr, self.model, alias,
- is_summary=True)
-
- return query.get_aggregation(using=self.db)
-
- def count(self):
- """
- Performs a SELECT COUNT() and returns the number of records as an
- integer.
-
- If the QuerySet is already fully cached this simply returns the length
- of the cached results set to avoid multiple SELECT COUNT(*) calls.
- """
- if self._result_cache is not None and not self._iter:
- return len(self._result_cache)
-
- return self.query.get_count(using=self.db)
-
- def get(self, *args, **kwargs):
- """
- Performs the query and returns a single object matching the given
- keyword arguments.
- """
- clone = self.filter(*args, **kwargs)
- if self.query.can_filter():
- clone = clone.order_by()
- num = len(clone)
- if num == 1:
- return clone._result_cache[0]
- if not num:
- raise self.model.DoesNotExist("%s matching query does not exist."
- % self.model._meta.object_name)
- raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s! Lookup parameters were %s"
- % (self.model._meta.object_name, num, kwargs))
-
- def create(self, **kwargs):
- """
- Creates a new object with the given kwargs, saving it to the database
- and returning the created object.
- """
- obj = self.model(**kwargs)
- self._for_write = True
- obj.save(force_insert=True, using=self.db)
- return obj
-
- def get_or_create(self, **kwargs):
- """
- Looks up an object with the given kwargs, creating one if necessary.
- Returns a tuple of (object, created), where created is a boolean
- specifying whether an object was created.
- """
- assert kwargs, \
- 'get_or_create() must be passed at least one keyword argument'
- defaults = kwargs.pop('defaults', {})
- try:
- self._for_write = True
- return self.get(**kwargs), False
- except self.model.DoesNotExist:
- try:
- params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
- params.update(defaults)
- obj = self.model(**params)
- sid = transaction.savepoint(using=self.db)
- obj.save(force_insert=True, using=self.db)
- transaction.savepoint_commit(sid, using=self.db)
- return obj, True
- except IntegrityError, e:
- transaction.savepoint_rollback(sid, using=self.db)
- try:
- return self.get(**kwargs), False
- except self.model.DoesNotExist:
- raise e
-
- def latest(self, field_name=None):
- """
- Returns the latest object, according to the model's 'get_latest_by'
- option or optional given field_name.
- """
- latest_by = field_name or self.model._meta.get_latest_by
- assert bool(latest_by), "latest() requires either a field_name parameter or 'get_latest_by' in the model"
- assert self.query.can_filter(), \
- "Cannot change a query once a slice has been taken."
- obj = self._clone()
- obj.query.set_limits(high=1)
- obj.query.add_ordering('-%s' % latest_by)
- return obj.get()
-
- def in_bulk(self, id_list):
- """
- Returns a dictionary mapping each of the given IDs to the object with
- that ID.
- """
- assert self.query.can_filter(), \
- "Cannot use 'limit' or 'offset' with in_bulk"
- assert isinstance(id_list, (tuple, list, set, frozenset)), \
- "in_bulk() must be provided with a list of IDs."
- if not id_list:
- return {}
- qs = self._clone()
- qs.query.add_filter(('pk__in', id_list))
- return dict([(obj._get_pk_val(), obj) for obj in qs.iterator()])
-
- def delete(self):
- """
- Deletes the records in the current QuerySet.
- """
- assert self.query.can_filter(), \
- "Cannot use 'limit' or 'offset' with delete."
-
- del_query = self._clone()
-
- # The delete is actually 2 queries - one to find related objects,
- # and one to delete. Make sure that the discovery of related
- # objects is performed on the same database as the deletion.
- del_query._for_write = True
-
- # Disable non-supported fields.
- del_query.query.select_related = False
- del_query.query.clear_ordering()
-
- # Delete objects in chunks to prevent the list of related objects from
- # becoming too long.
- seen_objs = None
- del_itr = iter(del_query)
- while 1:
- # Collect a chunk of objects to be deleted, and then all the
- # objects that are related to the objects that are to be deleted.
- # The chunking *isn't* done by slicing the del_query because we
- # need to maintain the query cache on del_query (see #12328)
- seen_objs = CollectedObjects(seen_objs)
- for i, obj in izip(xrange(CHUNK_SIZE), del_itr):
- obj._collect_sub_objects(seen_objs)
-
- if not seen_objs:
- break
- delete_objects(seen_objs, del_query.db)
-
- # Clear the result cache, in case this QuerySet gets reused.
- self._result_cache = None
- delete.alters_data = True
-
- def update(self, **kwargs):
- """
- Updates all elements in the current QuerySet, setting all the given
- fields to the appropriate values.
- """
- assert self.query.can_filter(), \
- "Cannot update a query once a slice has been taken."
- self._for_write = True
- query = self.query.clone(sql.UpdateQuery)
- query.add_update_values(kwargs)
- if not transaction.is_managed(using=self.db):
- transaction.enter_transaction_management(using=self.db)
- forced_managed = True
- else:
- forced_managed = False
- try:
- rows = query.get_compiler(self.db).execute_sql(None)
- if forced_managed:
- transaction.commit(using=self.db)
- else:
- transaction.commit_unless_managed(using=self.db)
- finally:
- if forced_managed:
- transaction.leave_transaction_management(using=self.db)
- self._result_cache = None
- return rows
- update.alters_data = True
-
- def _update(self, values):
- """
- A version of update that accepts field objects instead of field names.
- Used primarily for model saving and not intended for use by general
- code (it requires too much poking around at model internals to be
- useful at that level).
- """
- assert self.query.can_filter(), \
- "Cannot update a query once a slice has been taken."
- query = self.query.clone(sql.UpdateQuery)
- query.add_update_fields(values)
- self._result_cache = None
- return query.get_compiler(self.db).execute_sql(None)
- _update.alters_data = True
-
- def exists(self):
- if self._result_cache is None:
- return self.query.has_results(using=self.db)
- return bool(self._result_cache)
-
- ##################################################
- # PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS #
- ##################################################
-
- def values(self, *fields):
- return self._clone(klass=ValuesQuerySet, setup=True, _fields=fields)
-
- def values_list(self, *fields, **kwargs):
- flat = kwargs.pop('flat', False)
- if kwargs:
- raise TypeError('Unexpected keyword arguments to values_list: %s'
- % (kwargs.keys(),))
- if flat and len(fields) > 1:
- raise TypeError("'flat' is not valid when values_list is called with more than one field.")
- return self._clone(klass=ValuesListQuerySet, setup=True, flat=flat,
- _fields=fields)
-
- def dates(self, field_name, kind, order='ASC'):
- """
- Returns a list of datetime objects representing all available dates for
- the given field_name, scoped to 'kind'.
- """
- assert kind in ("month", "year", "day"), \
- "'kind' must be one of 'year', 'month' or 'day'."
- assert order in ('ASC', 'DESC'), \
- "'order' must be either 'ASC' or 'DESC'."
- return self._clone(klass=DateQuerySet, setup=True,
- _field_name=field_name, _kind=kind, _order=order)
-
- def none(self):
- """
- Returns an empty QuerySet.
- """
- return self._clone(klass=EmptyQuerySet)
-
- ##################################################################
- # PUBLIC METHODS THAT ALTER ATTRIBUTES AND RETURN A NEW QUERYSET #
- ##################################################################
-
- def all(self):
- """
- Returns a new QuerySet that is a copy of the current one. This allows a
- QuerySet to proxy for a model manager in some cases.
- """
- return self._clone()
-
- def filter(self, *args, **kwargs):
- """
- Returns a new QuerySet instance with the args ANDed to the existing
- set.
- """
- return self._filter_or_exclude(False, *args, **kwargs)
-
- def exclude(self, *args, **kwargs):
- """
- Returns a new QuerySet instance with NOT (args) ANDed to the existing
- set.
- """
- return self._filter_or_exclude(True, *args, **kwargs)
-
- def _filter_or_exclude(self, negate, *args, **kwargs):
- if args or kwargs:
- assert self.query.can_filter(), \
- "Cannot filter a query once a slice has been taken."
-
- clone = self._clone()
- if negate:
- clone.query.add_q(~Q(*args, **kwargs))
- else:
- clone.query.add_q(Q(*args, **kwargs))
- return clone
-
- def complex_filter(self, filter_obj):
- """
- Returns a new QuerySet instance with filter_obj added to the filters.
-
- filter_obj can be a Q object (or anything with an add_to_query()
- method) or a dictionary of keyword lookup arguments.
-
- This exists to support framework features such as 'limit_choices_to',
- and usually it will be more natural to use other methods.
- """
- if isinstance(filter_obj, Q) or hasattr(filter_obj, 'add_to_query'):
- clone = self._clone()
- clone.query.add_q(filter_obj)
- return clone
- else:
- return self._filter_or_exclude(None, **filter_obj)
-
- def select_related(self, *fields, **kwargs):
- """
- Returns a new QuerySet instance that will select related objects.
-
- If fields are specified, they must be ForeignKey fields and only those
- related objects are included in the selection.
- """
- depth = kwargs.pop('depth', 0)
- if kwargs:
- raise TypeError('Unexpected keyword arguments to select_related: %s'
- % (kwargs.keys(),))
- obj = self._clone()
- if fields:
- if depth:
- raise TypeError('Cannot pass both "depth" and fields to select_related()')
- obj.query.add_select_related(fields)
- else:
- obj.query.select_related = True
- if depth:
- obj.query.max_depth = depth
- return obj
-
- def dup_select_related(self, other):
- """
- Copies the related selection status from the QuerySet 'other' to the
- current QuerySet.
- """
- self.query.select_related = other.query.select_related
-
- def annotate(self, *args, **kwargs):
- """
- Return a query set in which the returned objects have been annotated
- with data aggregated from related fields.
- """
- for arg in args:
- if arg.default_alias in kwargs:
- raise ValueError("The %s named annotation conflicts with the "
- "default name for another annotation."
- % arg.default_alias)
- kwargs[arg.default_alias] = arg
-
- names = set(self.model._meta.get_all_field_names())
- for aggregate in kwargs:
- if aggregate in names:
- raise ValueError("The %s annotation conflicts with a field on "
- "the model." % aggregate)
-
-
- obj = self._clone()
-
- obj._setup_aggregate_query(kwargs.keys())
-
- # Add the aggregates to the query
- for (alias, aggregate_expr) in kwargs.items():
- obj.query.add_aggregate(aggregate_expr, self.model, alias,
- is_summary=False)
-
- return obj
-
- def order_by(self, *field_names):
- """
- Returns a new QuerySet instance with the ordering changed.
- """
- assert self.query.can_filter(), \
- "Cannot reorder a query once a slice has been taken."
- obj = self._clone()
- obj.query.clear_ordering()
- obj.query.add_ordering(*field_names)
- return obj
-
- def distinct(self, true_or_false=True):
- """
- Returns a new QuerySet instance that will select only distinct results.
- """
- obj = self._clone()
- obj.query.distinct = true_or_false
- return obj
-
- def extra(self, select=None, where=None, params=None, tables=None,
- order_by=None, select_params=None):
- """
- Adds extra SQL fragments to the query.
- """
- assert self.query.can_filter(), \
- "Cannot change a query once a slice has been taken"
- clone = self._clone()
- clone.query.add_extra(select, select_params, where, params, tables, order_by)
- return clone
-
- def reverse(self):
- """
- Reverses the ordering of the QuerySet.
- """
- clone = self._clone()
- clone.query.standard_ordering = not clone.query.standard_ordering
- return clone
-
- def defer(self, *fields):
- """
- Defers the loading of data for certain fields until they are accessed.
- The set of fields to defer is added to any existing set of deferred
- fields. The only exception to this is if None is passed in as the only
- parameter, in which case all deferrals are removed (None acts as a
- reset option).
- """
- clone = self._clone()
- if fields == (None,):
- clone.query.clear_deferred_loading()
- else:
- clone.query.add_deferred_loading(fields)
- return clone
-
- def only(self, *fields):
- """
- Essentially, the opposite of defer. Only the fields passed into this
- method and that are not already specified as deferred are loaded
- immediately when the queryset is evaluated.
- """
- if fields == (None,):
- # Can only pass None to defer(), not only(), as the rest option.
- # That won't stop people trying to do this, so let's be explicit.
- raise TypeError("Cannot pass None as an argument to only().")
- clone = self._clone()
- clone.query.add_immediate_loading(fields)
- return clone
-
- def using(self, alias):
- """
- Selects which database this QuerySet should excecute it's query against.
- """
- clone = self._clone()
- clone._db = alias
- return clone
-
- ###################################
- # PUBLIC INTROSPECTION ATTRIBUTES #
- ###################################
-
- def ordered(self):
- """
- Returns True if the QuerySet is ordered -- i.e. has an order_by()
- clause or a default ordering on the model.
- """
- if self.query.extra_order_by or self.query.order_by:
- return True
- elif self.query.default_ordering and self.query.model._meta.ordering:
- return True
- else:
- return False
- ordered = property(ordered)
-
- @property
- def db(self):
- "Return the database that will be used if this query is executed now"
- if self._for_write:
- return self._db or router.db_for_write(self.model)
- return self._db or router.db_for_read(self.model)
-
- ###################
- # PRIVATE METHODS #
- ###################
-
- def _clone(self, klass=None, setup=False, **kwargs):
- if klass is None:
- klass = self.__class__
- query = self.query.clone()
- if self._sticky_filter:
- query.filter_is_sticky = True
- c = klass(model=self.model, query=query, using=self._db)
- c._for_write = self._for_write
- c.__dict__.update(kwargs)
- if setup and hasattr(c, '_setup_query'):
- c._setup_query()
- return c
-
- def _fill_cache(self, num=None):
- """
- Fills the result cache with 'num' more entries (or until the results
- iterator is exhausted).
- """
- if self._iter:
- try:
- for i in range(num or ITER_CHUNK_SIZE):
- self._result_cache.append(self._iter.next())
- except StopIteration:
- self._iter = None
-
- def _next_is_sticky(self):
- """
- Indicates that the next filter call and the one following that should
- be treated as a single filter. This is only important when it comes to
- determining when to reuse tables for many-to-many filters. Required so
- that we can filter naturally on the results of related managers.
-
- This doesn't return a clone of the current QuerySet (it returns
- "self"). The method is only used internally and should be immediately
- followed by a filter() that does create a clone.
- """
- self._sticky_filter = True
- return self
-
- def _merge_sanity_check(self, other):
- """
- Checks that we are merging two comparable QuerySet classes. By default
- this does nothing, but see the ValuesQuerySet for an example of where
- it's useful.
- """
- pass
-
- def _setup_aggregate_query(self, aggregates):
- """
- Prepare the query for computing a result that contains aggregate annotations.
- """
- opts = self.model._meta
- if self.query.group_by is None:
- field_names = [f.attname for f in opts.fields]
- self.query.add_fields(field_names, False)
- self.query.set_group_by()
-
- def _prepare(self):
- return self
-
- def _as_sql(self, connection):
- """
- Returns the internal query's SQL and parameters (as a tuple).
- """
- obj = self.values("pk")
- if obj._db is None or connection == connections[obj._db]:
- return obj.query.get_compiler(connection=connection).as_nested_sql()
- raise ValueError("Can't do subqueries with queries on different DBs.")
-
- # When used as part of a nested query, a queryset will never be an "always
- # empty" result.
- value_annotation = True
-
-class ValuesQuerySet(QuerySet):
- def __init__(self, *args, **kwargs):
- super(ValuesQuerySet, self).__init__(*args, **kwargs)
- # select_related isn't supported in values(). (FIXME -#3358)
- self.query.select_related = False
-
- # QuerySet.clone() will also set up the _fields attribute with the
- # names of the model fields to select.
-
- def iterator(self):
- # Purge any extra columns that haven't been explicitly asked for
- extra_names = self.query.extra_select.keys()
- field_names = self.field_names
- aggregate_names = self.query.aggregate_select.keys()
-
- names = extra_names + field_names + aggregate_names
-
- for row in self.query.get_compiler(self.db).results_iter():
- yield dict(zip(names, row))
-
- def _setup_query(self):
- """
- Constructs the field_names list that the values query will be
- retrieving.
-
- Called by the _clone() method after initializing the rest of the
- instance.
- """
- self.query.clear_deferred_loading()
- self.query.clear_select_fields()
-
- if self._fields:
- self.extra_names = []
- self.aggregate_names = []
- if not self.query.extra and not self.query.aggregates:
- # Short cut - if there are no extra or aggregates, then
- # the values() clause must be just field names.
- self.field_names = list(self._fields)
- else:
- self.query.default_cols = False
- self.field_names = []
- for f in self._fields:
- # we inspect the full extra_select list since we might
- # be adding back an extra select item that we hadn't
- # had selected previously.
- if self.query.extra.has_key(f):
- self.extra_names.append(f)
- elif self.query.aggregate_select.has_key(f):
- self.aggregate_names.append(f)
- else:
- self.field_names.append(f)
- else:
- # Default to all fields.
- self.extra_names = None
- self.field_names = [f.attname for f in self.model._meta.fields]
- self.aggregate_names = None
-
- self.query.select = []
- if self.extra_names is not None:
- self.query.set_extra_mask(self.extra_names)
- self.query.add_fields(self.field_names, False)
- if self.aggregate_names is not None:
- self.query.set_aggregate_mask(self.aggregate_names)
-
- def _clone(self, klass=None, setup=False, **kwargs):
- """
- Cloning a ValuesQuerySet preserves the current fields.
- """
- c = super(ValuesQuerySet, self)._clone(klass, **kwargs)
- if not hasattr(c, '_fields'):
- # Only clone self._fields if _fields wasn't passed into the cloning
- # call directly.
- c._fields = self._fields[:]
- c.field_names = self.field_names
- c.extra_names = self.extra_names
- c.aggregate_names = self.aggregate_names
- if setup and hasattr(c, '_setup_query'):
- c._setup_query()
- return c
-
- def _merge_sanity_check(self, other):
- super(ValuesQuerySet, self)._merge_sanity_check(other)
- if (set(self.extra_names) != set(other.extra_names) or
- set(self.field_names) != set(other.field_names) or
- self.aggregate_names != other.aggregate_names):
- raise TypeError("Merging '%s' classes must involve the same values in each case."
- % self.__class__.__name__)
-
- def _setup_aggregate_query(self, aggregates):
- """
- Prepare the query for computing a result that contains aggregate annotations.
- """
- self.query.set_group_by()
-
- if self.aggregate_names is not None:
- self.aggregate_names.extend(aggregates)
- self.query.set_aggregate_mask(self.aggregate_names)
-
- super(ValuesQuerySet, self)._setup_aggregate_query(aggregates)
-
- def _as_sql(self, connection):
- """
- For ValueQuerySet (and subclasses like ValuesListQuerySet), they can
- only be used as nested queries if they're already set up to select only
- a single field (in which case, that is the field column that is
- returned). This differs from QuerySet.as_sql(), where the column to
- select is set up by Django.
- """
- if ((self._fields and len(self._fields) > 1) or
- (not self._fields and len(self.model._meta.fields) > 1)):
- raise TypeError('Cannot use a multi-field %s as a filter value.'
- % self.__class__.__name__)
-
- obj = self._clone()
- if obj._db is None or connection == connections[obj._db]:
- return obj.query.get_compiler(connection=connection).as_nested_sql()
- raise ValueError("Can't do subqueries with queries on different DBs.")
-
- def _prepare(self):
- """
- Validates that we aren't trying to do a query like
- value__in=qs.values('value1', 'value2'), which isn't valid.
- """
- if ((self._fields and len(self._fields) > 1) or
- (not self._fields and len(self.model._meta.fields) > 1)):
- raise TypeError('Cannot use a multi-field %s as a filter value.'
- % self.__class__.__name__)
- return self
-
-class ValuesListQuerySet(ValuesQuerySet):
- def iterator(self):
- if self.flat and len(self._fields) == 1:
- for row in self.query.get_compiler(self.db).results_iter():
- yield row[0]
- elif not self.query.extra_select and not self.query.aggregate_select:
- for row in self.query.get_compiler(self.db).results_iter():
- yield tuple(row)
- else:
- # When extra(select=...) or an annotation is involved, the extra
- # cols are always at the start of the row, and we need to reorder
- # the fields to match the order in self._fields.
- extra_names = self.query.extra_select.keys()
- field_names = self.field_names
- aggregate_names = self.query.aggregate_select.keys()
-
- names = extra_names + field_names + aggregate_names
-
- # If a field list has been specified, use it. Otherwise, use the
- # full list of fields, including extras and aggregates.
- if self._fields:
- fields = list(self._fields) + filter(lambda f: f not in self._fields, aggregate_names)
- else:
- fields = names
-
- for row in self.query.get_compiler(self.db).results_iter():
- data = dict(zip(names, row))
- yield tuple([data[f] for f in fields])
-
- def _clone(self, *args, **kwargs):
- clone = super(ValuesListQuerySet, self)._clone(*args, **kwargs)
- if not hasattr(clone, "flat"):
- # Only assign flat if the clone didn't already get it from kwargs
- clone.flat = self.flat
- return clone
-
-
-class DateQuerySet(QuerySet):
- def iterator(self):
- return self.query.get_compiler(self.db).results_iter()
-
- def _setup_query(self):
- """
- Sets up any special features of the query attribute.
-
- Called by the _clone() method after initializing the rest of the
- instance.
- """
- self.query.clear_deferred_loading()
- self.query = self.query.clone(klass=sql.DateQuery, setup=True)
- self.query.select = []
- field = self.model._meta.get_field(self._field_name, many_to_many=False)
- assert isinstance(field, DateField), "%r isn't a DateField." \
- % field.name
- self.query.add_date_select(field, self._kind, self._order)
- if field.null:
- self.query.add_filter(('%s__isnull' % field.name, False))
-
- def _clone(self, klass=None, setup=False, **kwargs):
- c = super(DateQuerySet, self)._clone(klass, False, **kwargs)
- c._field_name = self._field_name
- c._kind = self._kind
- if setup and hasattr(c, '_setup_query'):
- c._setup_query()
- return c
-
-
-class EmptyQuerySet(QuerySet):
- def __init__(self, model=None, query=None, using=None):
- super(EmptyQuerySet, self).__init__(model, query, using)
- self._result_cache = []
-
- def __and__(self, other):
- return self._clone()
-
- def __or__(self, other):
- return other._clone()
-
- def count(self):
- return 0
-
- def delete(self):
- pass
-
- def _clone(self, klass=None, setup=False, **kwargs):
- c = super(EmptyQuerySet, self)._clone(klass, setup=setup, **kwargs)
- c._result_cache = []
- return c
-
- def iterator(self):
- # This slightly odd construction is because we need an empty generator
- # (it raises StopIteration immediately).
- yield iter([]).next()
-
- def all(self):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def filter(self, *args, **kwargs):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def exclude(self, *args, **kwargs):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def complex_filter(self, filter_obj):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def select_related(self, *fields, **kwargs):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def annotate(self, *args, **kwargs):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def order_by(self, *field_names):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def distinct(self, true_or_false=True):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def extra(self, select=None, where=None, params=None, tables=None,
- order_by=None, select_params=None):
- """
- Always returns EmptyQuerySet.
- """
- assert self.query.can_filter(), \
- "Cannot change a query once a slice has been taken"
- return self
-
- def reverse(self):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def defer(self, *fields):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def only(self, *fields):
- """
- Always returns EmptyQuerySet.
- """
- return self
-
- def update(self, **kwargs):
- """
- Don't update anything.
- """
- return 0
-
- # EmptyQuerySet is always an empty result in where-clauses (and similar
- # situations).
- value_annotation = False
-
-
-def get_cached_row(klass, row, index_start, using, max_depth=0, cur_depth=0,
- requested=None, offset=0, only_load=None, local_only=False):
- """
- Helper function that recursively returns an object with the specified
- related attributes already populated.
-
- This method may be called recursively to populate deep select_related()
- clauses.
-
- Arguments:
- * klass - the class to retrieve (and instantiate)
- * row - the row of data returned by the database cursor
- * index_start - the index of the row at which data for this
- object is known to start
- * using - the database alias on which the query is being executed.
- * max_depth - the maximum depth to which a select_related()
- relationship should be explored.
- * cur_depth - the current depth in the select_related() tree.
- Used in recursive calls to determin if we should dig deeper.
- * requested - A dictionary describing the select_related() tree
- that is to be retrieved. keys are field names; values are
- dictionaries describing the keys on that related object that
- are themselves to be select_related().
- * offset - the number of additional fields that are known to
- exist in `row` for `klass`. This usually means the number of
- annotated results on `klass`.
- * only_load - if the query has had only() or defer() applied,
- this is the list of field names that will be returned. If None,
- the full field list for `klass` can be assumed.
- * local_only - Only populate local fields. This is used when building
- following reverse select-related relations
- """
- if max_depth and requested is None and cur_depth > max_depth:
- # We've recursed deeply enough; stop now.
- return None
-
- restricted = requested is not None
- if only_load:
- load_fields = only_load.get(klass)
- # When we create the object, we will also be creating populating
- # all the parent classes, so traverse the parent classes looking
- # for fields that must be included on load.
- for parent in klass._meta.get_parent_list():
- fields = only_load.get(parent)
- if fields:
- load_fields.update(fields)
- else:
- load_fields = None
- if load_fields:
- # Handle deferred fields.
- skip = set()
- init_list = []
- # Build the list of fields that *haven't* been requested
- for field, model in klass._meta.get_fields_with_model():
- if field.name not in load_fields:
- skip.add(field.name)
- elif local_only and model is not None:
- continue
- else:
- init_list.append(field.attname)
- # Retrieve all the requested fields
- field_count = len(init_list)
- fields = row[index_start : index_start + field_count]
- # If all the select_related columns are None, then the related
- # object must be non-existent - set the relation to None.
- # Otherwise, construct the related object.
- if fields == (None,) * field_count:
- obj = None
- elif skip:
- klass = deferred_class_factory(klass, skip)
- obj = klass(**dict(zip(init_list, fields)))
- else:
- obj = klass(*fields)
-
- else:
- # Load all fields on klass
- if local_only:
- field_names = [f.attname for f in klass._meta.local_fields]
- else:
- field_names = [f.attname for f in klass._meta.fields]
- field_count = len(field_names)
- fields = row[index_start : index_start + field_count]
- # If all the select_related columns are None, then the related
- # object must be non-existent - set the relation to None.
- # Otherwise, construct the related object.
- if fields == (None,) * field_count:
- obj = None
- else:
- obj = klass(**dict(zip(field_names, fields)))
-
- # If an object was retrieved, set the database state.
- if obj:
- obj._state.db = using
- obj._state.adding = False
-
- index_end = index_start + field_count + offset
- # Iterate over each related object, populating any
- # select_related() fields
- for f in klass._meta.fields:
- if not select_related_descend(f, restricted, requested):
- continue
- if restricted:
- next = requested[f.name]
- else:
- next = None
- # Recursively retrieve the data for the related object
- cached_row = get_cached_row(f.rel.to, row, index_end, using,
- max_depth, cur_depth+1, next, only_load=only_load)
- # If the recursive descent found an object, populate the
- # descriptor caches relevant to the object
- if cached_row:
- rel_obj, index_end = cached_row
- if obj is not None:
- # If the base object exists, populate the
- # descriptor cache
- setattr(obj, f.get_cache_name(), rel_obj)
- if f.unique and rel_obj is not None:
- # If the field is unique, populate the
- # reverse descriptor cache on the related object
- setattr(rel_obj, f.related.get_cache_name(), obj)
-
- # Now do the same, but for reverse related objects.
- # Only handle the restricted case - i.e., don't do a depth
- # descent into reverse relations unless explicitly requested
- if restricted:
- related_fields = [
- (o.field, o.model)
- for o in klass._meta.get_all_related_objects()
- if o.field.unique
- ]
- for f, model in related_fields:
- if not select_related_descend(f, restricted, requested, reverse=True):
- continue
- next = requested[f.related_query_name()]
- # Recursively retrieve the data for the related object
- cached_row = get_cached_row(model, row, index_end, using,
- max_depth, cur_depth+1, next, only_load=only_load, local_only=True)
- # If the recursive descent found an object, populate the
- # descriptor caches relevant to the object
- if cached_row:
- rel_obj, index_end = cached_row
- if obj is not None:
- # If the field is unique, populate the
- # reverse descriptor cache
- setattr(obj, f.related.get_cache_name(), rel_obj)
- if rel_obj is not None:
- # If the related object exists, populate
- # the descriptor cache.
- setattr(rel_obj, f.get_cache_name(), obj)
- # Now populate all the non-local field values
- # on the related object
- for rel_field,rel_model in rel_obj._meta.get_fields_with_model():
- if rel_model is not None:
- setattr(rel_obj, rel_field.attname, getattr(obj, rel_field.attname))
- # populate the field cache for any related object
- # that has already been retrieved
- if rel_field.rel:
- try:
- cached_obj = getattr(obj, rel_field.get_cache_name())
- setattr(rel_obj, rel_field.get_cache_name(), cached_obj)
- except AttributeError:
- # Related object hasn't been cached yet
- pass
- return obj, index_end
-
-def delete_objects(seen_objs, using):
- """
- Iterate through a list of seen classes, and remove any instances that are
- referred to.
- """
- connection = connections[using]
- if not transaction.is_managed(using=using):
- transaction.enter_transaction_management(using=using)
- forced_managed = True
- else:
- forced_managed = False
- try:
- ordered_classes = seen_objs.keys()
- except CyclicDependency:
- # If there is a cyclic dependency, we cannot in general delete the
- # objects. However, if an appropriate transaction is set up, or if the
- # database is lax enough, it will succeed. So for now, we go ahead and
- # try anyway.
- ordered_classes = seen_objs.unordered_keys()
-
- obj_pairs = {}
- try:
- for cls in ordered_classes:
- items = seen_objs[cls].items()
- items.sort()
- obj_pairs[cls] = items
-
- # Pre-notify all instances to be deleted.
- for pk_val, instance in items:
- if not cls._meta.auto_created:
- signals.pre_delete.send(sender=cls, instance=instance)
-
- pk_list = [pk for pk,instance in items]
-
- update_query = sql.UpdateQuery(cls)
- for field, model in cls._meta.get_fields_with_model():
- if (field.rel and field.null and field.rel.to in seen_objs and
- filter(lambda f: f.column == field.rel.get_related_field().column,
- field.rel.to._meta.fields)):
- if model:
- sql.UpdateQuery(model).clear_related(field, pk_list, using=using)
- else:
- update_query.clear_related(field, pk_list, using=using)
-
- # Now delete the actual data.
- for cls in ordered_classes:
- items = obj_pairs[cls]
- items.reverse()
-
- pk_list = [pk for pk,instance in items]
- del_query = sql.DeleteQuery(cls)
- del_query.delete_batch(pk_list, using=using)
-
- # Last cleanup; set NULLs where there once was a reference to the
- # object, NULL the primary key of the found objects, and perform
- # post-notification.
- for pk_val, instance in items:
- for field in cls._meta.fields:
- if field.rel and field.null and field.rel.to in seen_objs:
- setattr(instance, field.attname, None)
-
- if not cls._meta.auto_created:
- signals.post_delete.send(sender=cls, instance=instance)
- setattr(instance, cls._meta.pk.attname, None)
-
- if forced_managed:
- transaction.commit(using=using)
- else:
- transaction.commit_unless_managed(using=using)
- finally:
- if forced_managed:
- transaction.leave_transaction_management(using=using)
-
-class RawQuerySet(object):
- """
- Provides an iterator which converts the results of raw SQL queries into
- annotated model instances.
- """
- def __init__(self, raw_query, model=None, query=None, params=None,
- translations=None, using=None):
- self.raw_query = raw_query
- self.model = model
- self._db = using
- self.query = query or sql.RawQuery(sql=raw_query, using=self.db, params=params)
- self.params = params or ()
- self.translations = translations or {}
-
- def __iter__(self):
- # Mapping of attrnames to row column positions. Used for constructing
- # the model using kwargs, needed when not all model's fields are present
- # in the query.
- model_init_field_names = {}
- # A list of tuples of (column name, column position). Used for
- # annotation fields.
- annotation_fields = []
-
- # Cache some things for performance reasons outside the loop.
- db = self.db
- compiler = connections[db].ops.compiler('SQLCompiler')(
- self.query, connections[db], db
- )
- need_resolv_columns = hasattr(compiler, 'resolve_columns')
-
- query = iter(self.query)
-
- # Find out which columns are model's fields, and which ones should be
- # annotated to the model.
- for pos, column in enumerate(self.columns):
- if column in self.model_fields:
- model_init_field_names[self.model_fields[column].attname] = pos
- else:
- annotation_fields.append((column, pos))
-
- # Find out which model's fields are not present in the query.
- skip = set()
- for field in self.model._meta.fields:
- if field.attname not in model_init_field_names:
- skip.add(field.attname)
- if skip:
- if self.model._meta.pk.attname in skip:
- raise InvalidQuery('Raw query must include the primary key')
- model_cls = deferred_class_factory(self.model, skip)
- else:
- model_cls = self.model
- # All model's fields are present in the query. So, it is possible
- # to use *args based model instantation. For each field of the model,
- # record the query column position matching that field.
- model_init_field_pos = []
- for field in self.model._meta.fields:
- model_init_field_pos.append(model_init_field_names[field.attname])
- if need_resolv_columns:
- fields = [self.model_fields.get(c, None) for c in self.columns]
- # Begin looping through the query values.
- for values in query:
- if need_resolv_columns:
- values = compiler.resolve_columns(values, fields)
- # Associate fields to values
- if skip:
- model_init_kwargs = {}
- for attname, pos in model_init_field_names.iteritems():
- model_init_kwargs[attname] = values[pos]
- instance = model_cls(**model_init_kwargs)
- else:
- model_init_args = [values[pos] for pos in model_init_field_pos]
- instance = model_cls(*model_init_args)
- if annotation_fields:
- for column, pos in annotation_fields:
- setattr(instance, column, values[pos])
-
- instance._state.db = db
- instance._state.adding = False
-
- yield instance
-
- def __repr__(self):
- return "<RawQuerySet: %r>" % (self.raw_query % self.params)
-
- def __getitem__(self, k):
- return list(self)[k]
-
- @property
- def db(self):
- "Return the database that will be used if this query is executed now"
- return self._db or router.db_for_read(self.model)
-
- def using(self, alias):
- """
- Selects which database this Raw QuerySet should excecute it's query against.
- """
- return RawQuerySet(self.raw_query, model=self.model,
- query=self.query.clone(using=alias),
- params=self.params, translations=self.translations,
- using=alias)
-
- @property
- def columns(self):
- """
- A list of model field names in the order they'll appear in the
- query results.
- """
- if not hasattr(self, '_columns'):
- self._columns = self.query.get_columns()
-
- # Adjust any column names which don't match field names
- for (query_name, model_name) in self.translations.items():
- try:
- index = self._columns.index(query_name)
- self._columns[index] = model_name
- except ValueError:
- # Ignore translations for non-existant column names
- pass
-
- return self._columns
-
- @property
- def model_fields(self):
- """
- A dict mapping column names to model field names.
- """
- if not hasattr(self, '_model_fields'):
- converter = connections[self.db].introspection.table_name_converter
- self._model_fields = {}
- for field in self.model._meta.fields:
- name, column = field.get_attname_column()
- self._model_fields[converter(column)] = field
- return self._model_fields
-
-def insert_query(model, values, return_id=False, raw_values=False, using=None):
- """
- Inserts a new record for the given model. This provides an interface to
- the InsertQuery class and is how Model.save() is implemented. It is not
- part of the public API.
- """
- query = sql.InsertQuery(model)
- query.insert_values(values, raw_values)
- return query.get_compiler(using=using).execute_sql(return_id)
diff --git a/parts/django/django/db/models/query_utils.py b/parts/django/django/db/models/query_utils.py
deleted file mode 100644
index f75b155..0000000
--- a/parts/django/django/db/models/query_utils.py
+++ /dev/null
@@ -1,278 +0,0 @@
-"""
-Various data structures used in query construction.
-
-Factored out from django.db.models.query to avoid making the main module very
-large and/or so that they can be used by other modules without getting into
-circular import difficulties.
-"""
-
-import weakref
-from django.utils.copycompat import deepcopy
-
-from django.utils import tree
-from django.utils.datastructures import SortedDict
-
-
-class CyclicDependency(Exception):
- """
- An error when dealing with a collection of objects that have a cyclic
- dependency, i.e. when deleting multiple objects.
- """
- pass
-
-class InvalidQuery(Exception):
- """
- The query passed to raw isn't a safe query to use with raw.
- """
- pass
-
-
-class CollectedObjects(object):
- """
- A container that stores keys and lists of values along with remembering the
- parent objects for all the keys.
-
- This is used for the database object deletion routines so that we can
- calculate the 'leaf' objects which should be deleted first.
-
- previously_seen is an optional argument. It must be a CollectedObjects
- instance itself; any previously_seen collected object will be blocked from
- being added to this instance.
- """
-
- def __init__(self, previously_seen=None):
- self.data = {}
- self.children = {}
- if previously_seen:
- self.blocked = previously_seen.blocked
- for cls, seen in previously_seen.data.items():
- self.blocked.setdefault(cls, SortedDict()).update(seen)
- else:
- self.blocked = {}
-
- def add(self, model, pk, obj, parent_model, parent_obj=None, nullable=False):
- """
- Adds an item to the container.
-
- Arguments:
- * model - the class of the object being added.
- * pk - the primary key.
- * obj - the object itself.
- * parent_model - the model of the parent object that this object was
- reached through.
- * parent_obj - the parent object this object was reached
- through (not used here, but needed in the API for use elsewhere)
- * nullable - should be True if this relation is nullable.
-
- Returns True if the item already existed in the structure and
- False otherwise.
- """
- if pk in self.blocked.get(model, {}):
- return True
-
- d = self.data.setdefault(model, SortedDict())
- retval = pk in d
- d[pk] = obj
- # Nullable relationships can be ignored -- they are nulled out before
- # deleting, and therefore do not affect the order in which objects
- # have to be deleted.
- if parent_model is not None and not nullable:
- self.children.setdefault(parent_model, []).append(model)
- return retval
-
- def __contains__(self, key):
- return self.data.__contains__(key)
-
- def __getitem__(self, key):
- return self.data[key]
-
- def __nonzero__(self):
- return bool(self.data)
-
- def iteritems(self):
- for k in self.ordered_keys():
- yield k, self[k]
-
- def items(self):
- return list(self.iteritems())
-
- def keys(self):
- return self.ordered_keys()
-
- def ordered_keys(self):
- """
- Returns the models in the order that they should be dealt with (i.e.
- models with no dependencies first).
- """
- dealt_with = SortedDict()
- # Start with items that have no children
- models = self.data.keys()
- while len(dealt_with) < len(models):
- found = False
- for model in models:
- if model in dealt_with:
- continue
- children = self.children.setdefault(model, [])
- if len([c for c in children if c not in dealt_with]) == 0:
- dealt_with[model] = None
- found = True
- if not found:
- raise CyclicDependency(
- "There is a cyclic dependency of items to be processed.")
-
- return dealt_with.keys()
-
- def unordered_keys(self):
- """
- Fallback for the case where is a cyclic dependency but we don't care.
- """
- return self.data.keys()
-
-class QueryWrapper(object):
- """
- A type that indicates the contents are an SQL fragment and the associate
- parameters. Can be used to pass opaque data to a where-clause, for example.
- """
- def __init__(self, sql, params):
- self.data = sql, params
-
- def as_sql(self, qn=None, connection=None):
- return self.data
-
-class Q(tree.Node):
- """
- Encapsulates filters as objects that can then be combined logically (using
- & and |).
- """
- # Connection types
- AND = 'AND'
- OR = 'OR'
- default = AND
-
- def __init__(self, *args, **kwargs):
- super(Q, self).__init__(children=list(args) + kwargs.items())
-
- def _combine(self, other, conn):
- if not isinstance(other, Q):
- raise TypeError(other)
- obj = type(self)()
- obj.add(self, conn)
- obj.add(other, conn)
- return obj
-
- def __or__(self, other):
- return self._combine(other, self.OR)
-
- def __and__(self, other):
- return self._combine(other, self.AND)
-
- def __invert__(self):
- obj = type(self)()
- obj.add(self, self.AND)
- obj.negate()
- return obj
-
-class DeferredAttribute(object):
- """
- A wrapper for a deferred-loading field. When the value is read from this
- object the first time, the query is executed.
- """
- def __init__(self, field_name, model):
- self.field_name = field_name
- self.model_ref = weakref.ref(model)
- self.loaded = False
-
- def __get__(self, instance, owner):
- """
- Retrieves and caches the value from the datastore on the first lookup.
- Returns the cached value.
- """
- from django.db.models.fields import FieldDoesNotExist
-
- assert instance is not None
- cls = self.model_ref()
- data = instance.__dict__
- if data.get(self.field_name, self) is self:
- # self.field_name is the attname of the field, but only() takes the
- # actual name, so we need to translate it here.
- try:
- cls._meta.get_field_by_name(self.field_name)
- name = self.field_name
- except FieldDoesNotExist:
- name = [f.name for f in cls._meta.fields
- if f.attname == self.field_name][0]
- # We use only() instead of values() here because we want the
- # various data coersion methods (to_python(), etc.) to be called
- # here.
- val = getattr(
- cls._base_manager.filter(pk=instance.pk).only(name).using(
- instance._state.db).get(),
- self.field_name
- )
- data[self.field_name] = val
- return data[self.field_name]
-
- def __set__(self, instance, value):
- """
- Deferred loading attributes can be set normally (which means there will
- never be a database lookup involved.
- """
- instance.__dict__[self.field_name] = value
-
-def select_related_descend(field, restricted, requested, reverse=False):
- """
- Returns True if this field should be used to descend deeper for
- select_related() purposes. Used by both the query construction code
- (sql.query.fill_related_selections()) and the model instance creation code
- (query.get_cached_row()).
-
- Arguments:
- * field - the field to be checked
- * restricted - a boolean field, indicating if the field list has been
- manually restricted using a requested clause)
- * requested - The select_related() dictionary.
- * reverse - boolean, True if we are checking a reverse select related
- """
- if not field.rel:
- return False
- if field.rel.parent_link and not reverse:
- return False
- if restricted:
- if reverse and field.related_query_name() not in requested:
- return False
- if not reverse and field.name not in requested:
- return False
- if not restricted and field.null:
- return False
- return True
-
-# This function is needed because data descriptors must be defined on a class
-# object, not an instance, to have any effect.
-
-def deferred_class_factory(model, attrs):
- """
- Returns a class object that is a copy of "model" with the specified "attrs"
- being replaced with DeferredAttribute objects. The "pk_value" ties the
- deferred attributes to a particular instance of the model.
- """
- class Meta:
- pass
- setattr(Meta, "proxy", True)
- setattr(Meta, "app_label", model._meta.app_label)
-
- # The app_cache wants a unique name for each model, otherwise the new class
- # won't be created (we get an old one back). Therefore, we generate the
- # name using the passed in attrs. It's OK to reuse an old case if the attrs
- # are identical.
- name = "%s_Deferred_%s" % (model.__name__, '_'.join(sorted(list(attrs))))
-
- overrides = dict([(attr, DeferredAttribute(attr, model))
- for attr in attrs])
- overrides["Meta"] = Meta
- overrides["__module__"] = model.__module__
- overrides["_deferred"] = True
- return type(name, (model,), overrides)
-
-# The above function is also used to unpickle model instances with deferred
-# fields.
-deferred_class_factory.__safe_for_unpickling__ = True
diff --git a/parts/django/django/db/models/related.py b/parts/django/django/db/models/related.py
deleted file mode 100644
index e4afd8a..0000000
--- a/parts/django/django/db/models/related.py
+++ /dev/null
@@ -1,50 +0,0 @@
-class BoundRelatedObject(object):
- def __init__(self, related_object, field_mapping, original):
- self.relation = related_object
- self.field_mappings = field_mapping[related_object.name]
-
- def template_name(self):
- raise NotImplementedError
-
- def __repr__(self):
- return repr(self.__dict__)
-
-class RelatedObject(object):
- def __init__(self, parent_model, model, field):
- self.parent_model = parent_model
- self.model = model
- self.opts = model._meta
- self.field = field
- self.name = '%s:%s' % (self.opts.app_label, self.opts.module_name)
- self.var_name = self.opts.object_name.lower()
-
- def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
- # Defer to the actual field definition for db prep
- return self.field.get_db_prep_lookup(lookup_type, value,
- connection=connection, prepared=prepared)
-
- def editable_fields(self):
- "Get the fields in this class that should be edited inline."
- return [f for f in self.opts.fields + self.opts.many_to_many if f.editable and f != self.field]
-
- def __repr__(self):
- return "<RelatedObject: %s related to %s>" % (self.name, self.field.name)
-
- def bind(self, field_mapping, original, bound_related_object_class=BoundRelatedObject):
- return bound_related_object_class(self, field_mapping, original)
-
- def get_accessor_name(self):
- # This method encapsulates the logic that decides what name to give an
- # accessor descriptor that retrieves related many-to-one or
- # many-to-many objects. It uses the lower-cased object_name + "_set",
- # but this can be overridden with the "related_name" option.
- if self.field.rel.multiple:
- # If this is a symmetrical m2m relation on self, there is no reverse accessor.
- if getattr(self.field.rel, 'symmetrical', False) and self.model == self.parent_model:
- return None
- return self.field.rel.related_name or (self.opts.object_name.lower() + '_set')
- else:
- return self.field.rel.related_name or (self.opts.object_name.lower())
-
- def get_cache_name(self):
- return "_%s_cache" % self.get_accessor_name()
diff --git a/parts/django/django/db/models/signals.py b/parts/django/django/db/models/signals.py
deleted file mode 100644
index cd0350b..0000000
--- a/parts/django/django/db/models/signals.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.dispatch import Signal
-
-class_prepared = Signal(providing_args=["class"])
-
-pre_init = Signal(providing_args=["instance", "args", "kwargs"])
-post_init = Signal(providing_args=["instance"])
-
-pre_save = Signal(providing_args=["instance", "raw"])
-post_save = Signal(providing_args=["instance", "raw", "created"])
-
-pre_delete = Signal(providing_args=["instance"])
-post_delete = Signal(providing_args=["instance"])
-
-post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive"])
-
-m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set"])
diff --git a/parts/django/django/db/models/sql/__init__.py b/parts/django/django/db/models/sql/__init__.py
deleted file mode 100644
index 7310982..0000000
--- a/parts/django/django/db/models/sql/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from query import *
-from subqueries import *
-from where import AND, OR
-from datastructures import EmptyResultSet
-
-__all__ = ['Query', 'AND', 'OR', 'EmptyResultSet']
-
diff --git a/parts/django/django/db/models/sql/aggregates.py b/parts/django/django/db/models/sql/aggregates.py
deleted file mode 100644
index 207bc0c..0000000
--- a/parts/django/django/db/models/sql/aggregates.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""
-Classes to represent the default SQL aggregate functions
-"""
-
-class AggregateField(object):
- """An internal field mockup used to identify aggregates in the
- data-conversion parts of the database backend.
- """
- def __init__(self, internal_type):
- self.internal_type = internal_type
-
- def get_internal_type(self):
- return self.internal_type
-
-ordinal_aggregate_field = AggregateField('IntegerField')
-computed_aggregate_field = AggregateField('FloatField')
-
-class Aggregate(object):
- """
- Default SQL Aggregate.
- """
- is_ordinal = False
- is_computed = False
- sql_template = '%(function)s(%(field)s)'
-
- def __init__(self, col, source=None, is_summary=False, **extra):
- """Instantiate an SQL aggregate
-
- * col is a column reference describing the subject field
- of the aggregate. It can be an alias, or a tuple describing
- a table and column name.
- * source is the underlying field or aggregate definition for
- the column reference. If the aggregate is not an ordinal or
- computed type, this reference is used to determine the coerced
- output type of the aggregate.
- * extra is a dictionary of additional data to provide for the
- aggregate definition
-
- Also utilizes the class variables:
- * sql_function, the name of the SQL function that implements the
- aggregate.
- * sql_template, a template string that is used to render the
- aggregate into SQL.
- * is_ordinal, a boolean indicating if the output of this aggregate
- is an integer (e.g., a count)
- * is_computed, a boolean indicating if this output of this aggregate
- is a computed float (e.g., an average), regardless of the input
- type.
-
- """
- self.col = col
- self.source = source
- self.is_summary = is_summary
- self.extra = extra
-
- # Follow the chain of aggregate sources back until you find an
- # actual field, or an aggregate that forces a particular output
- # type. This type of this field will be used to coerce values
- # retrieved from the database.
- tmp = self
-
- while tmp and isinstance(tmp, Aggregate):
- if getattr(tmp, 'is_ordinal', False):
- tmp = ordinal_aggregate_field
- elif getattr(tmp, 'is_computed', False):
- tmp = computed_aggregate_field
- else:
- tmp = tmp.source
-
- self.field = tmp
-
- def relabel_aliases(self, change_map):
- if isinstance(self.col, (list, tuple)):
- self.col = (change_map.get(self.col[0], self.col[0]), self.col[1])
-
- def as_sql(self, qn, connection):
- "Return the aggregate, rendered as SQL."
-
- if hasattr(self.col, 'as_sql'):
- field_name = self.col.as_sql(qn, connection)
- elif isinstance(self.col, (list, tuple)):
- field_name = '.'.join([qn(c) for c in self.col])
- else:
- field_name = self.col
-
- params = {
- 'function': self.sql_function,
- 'field': field_name
- }
- params.update(self.extra)
-
- return self.sql_template % params
-
-
-class Avg(Aggregate):
- is_computed = True
- sql_function = 'AVG'
-
-class Count(Aggregate):
- is_ordinal = True
- sql_function = 'COUNT'
- sql_template = '%(function)s(%(distinct)s%(field)s)'
-
- def __init__(self, col, distinct=False, **extra):
- super(Count, self).__init__(col, distinct=distinct and 'DISTINCT ' or '', **extra)
-
-class Max(Aggregate):
- sql_function = 'MAX'
-
-class Min(Aggregate):
- sql_function = 'MIN'
-
-class StdDev(Aggregate):
- is_computed = True
-
- def __init__(self, col, sample=False, **extra):
- super(StdDev, self).__init__(col, **extra)
- self.sql_function = sample and 'STDDEV_SAMP' or 'STDDEV_POP'
-
-class Sum(Aggregate):
- sql_function = 'SUM'
-
-class Variance(Aggregate):
- is_computed = True
-
- def __init__(self, col, sample=False, **extra):
- super(Variance, self).__init__(col, **extra)
- self.sql_function = sample and 'VAR_SAMP' or 'VAR_POP'
diff --git a/parts/django/django/db/models/sql/compiler.py b/parts/django/django/db/models/sql/compiler.py
deleted file mode 100644
index d464061..0000000
--- a/parts/django/django/db/models/sql/compiler.py
+++ /dev/null
@@ -1,979 +0,0 @@
-from django.core.exceptions import FieldError
-from django.db import connections
-from django.db.backends.util import truncate_name
-from django.db.models.sql.constants import *
-from django.db.models.sql.datastructures import EmptyResultSet
-from django.db.models.sql.expressions import SQLEvaluator
-from django.db.models.sql.query import get_proxied_model, get_order_dir, \
- select_related_descend, Query
-
-class SQLCompiler(object):
- def __init__(self, query, connection, using):
- self.query = query
- self.connection = connection
- self.using = using
- self.quote_cache = {}
-
- def pre_sql_setup(self):
- """
- Does any necessary class setup immediately prior to producing SQL. This
- is for things that can't necessarily be done in __init__ because we
- might not have all the pieces in place at that time.
- """
- if not self.query.tables:
- self.query.join((None, self.query.model._meta.db_table, None, None))
- if (not self.query.select and self.query.default_cols and not
- self.query.included_inherited_models):
- self.query.setup_inherited_models()
- if self.query.select_related and not self.query.related_select_cols:
- self.fill_related_selections()
-
- def quote_name_unless_alias(self, name):
- """
- A wrapper around connection.ops.quote_name that doesn't quote aliases
- for table names. This avoids problems with some SQL dialects that treat
- quoted strings specially (e.g. PostgreSQL).
- """
- if name in self.quote_cache:
- return self.quote_cache[name]
- if ((name in self.query.alias_map and name not in self.query.table_map) or
- name in self.query.extra_select):
- self.quote_cache[name] = name
- return name
- r = self.connection.ops.quote_name(name)
- self.quote_cache[name] = r
- return r
-
- def as_sql(self, with_limits=True, with_col_aliases=False):
- """
- Creates the SQL for this query. Returns the SQL string and list of
- parameters.
-
- If 'with_limits' is False, any limit/offset information is not included
- in the query.
- """
- self.pre_sql_setup()
- out_cols = self.get_columns(with_col_aliases)
- ordering, ordering_group_by = self.get_ordering()
-
- # This must come after 'select' and 'ordering' -- see docstring of
- # get_from_clause() for details.
- from_, f_params = self.get_from_clause()
-
- qn = self.quote_name_unless_alias
-
- where, w_params = self.query.where.as_sql(qn=qn, connection=self.connection)
- having, h_params = self.query.having.as_sql(qn=qn, connection=self.connection)
- params = []
- for val in self.query.extra_select.itervalues():
- params.extend(val[1])
-
- result = ['SELECT']
- if self.query.distinct:
- result.append('DISTINCT')
- result.append(', '.join(out_cols + self.query.ordering_aliases))
-
- result.append('FROM')
- result.extend(from_)
- params.extend(f_params)
-
- if where:
- result.append('WHERE %s' % where)
- params.extend(w_params)
-
- grouping, gb_params = self.get_grouping()
- if grouping:
- if ordering:
- # If the backend can't group by PK (i.e., any database
- # other than MySQL), then any fields mentioned in the
- # ordering clause needs to be in the group by clause.
- if not self.connection.features.allows_group_by_pk:
- for col, col_params in ordering_group_by:
- if col not in grouping:
- grouping.append(str(col))
- gb_params.extend(col_params)
- else:
- ordering = self.connection.ops.force_no_ordering()
- result.append('GROUP BY %s' % ', '.join(grouping))
- params.extend(gb_params)
-
- if having:
- result.append('HAVING %s' % having)
- params.extend(h_params)
-
- if ordering:
- result.append('ORDER BY %s' % ', '.join(ordering))
-
- if with_limits:
- if self.query.high_mark is not None:
- result.append('LIMIT %d' % (self.query.high_mark - self.query.low_mark))
- if self.query.low_mark:
- if self.query.high_mark is None:
- val = self.connection.ops.no_limit_value()
- if val:
- result.append('LIMIT %d' % val)
- result.append('OFFSET %d' % self.query.low_mark)
-
- return ' '.join(result), tuple(params)
-
- def as_nested_sql(self):
- """
- Perform the same functionality as the as_sql() method, returning an
- SQL string and parameters. However, the alias prefixes are bumped
- beforehand (in a copy -- the current query isn't changed), and any
- ordering is removed if the query is unsliced.
-
- Used when nesting this query inside another.
- """
- obj = self.query.clone()
- if obj.low_mark == 0 and obj.high_mark is None:
- # If there is no slicing in use, then we can safely drop all ordering
- obj.clear_ordering(True)
- obj.bump_prefix()
- return obj.get_compiler(connection=self.connection).as_sql()
-
- def get_columns(self, with_aliases=False):
- """
- Returns the list of columns to use in the select statement. If no
- columns have been specified, returns all columns relating to fields in
- the model.
-
- If 'with_aliases' is true, any column names that are duplicated
- (without the table names) are given unique aliases. This is needed in
- some cases to avoid ambiguity with nested queries.
- """
- qn = self.quote_name_unless_alias
- qn2 = self.connection.ops.quote_name
- result = ['(%s) AS %s' % (col[0], qn2(alias)) for alias, col in self.query.extra_select.iteritems()]
- aliases = set(self.query.extra_select.keys())
- if with_aliases:
- col_aliases = aliases.copy()
- else:
- col_aliases = set()
- if self.query.select:
- only_load = self.deferred_to_columns()
- for col in self.query.select:
- if isinstance(col, (list, tuple)):
- alias, column = col
- table = self.query.alias_map[alias][TABLE_NAME]
- if table in only_load and col not in only_load[table]:
- continue
- r = '%s.%s' % (qn(alias), qn(column))
- if with_aliases:
- if col[1] in col_aliases:
- c_alias = 'Col%d' % len(col_aliases)
- result.append('%s AS %s' % (r, c_alias))
- aliases.add(c_alias)
- col_aliases.add(c_alias)
- else:
- result.append('%s AS %s' % (r, qn2(col[1])))
- aliases.add(r)
- col_aliases.add(col[1])
- else:
- result.append(r)
- aliases.add(r)
- col_aliases.add(col[1])
- else:
- result.append(col.as_sql(qn, self.connection))
-
- if hasattr(col, 'alias'):
- aliases.add(col.alias)
- col_aliases.add(col.alias)
-
- elif self.query.default_cols:
- cols, new_aliases = self.get_default_columns(with_aliases,
- col_aliases)
- result.extend(cols)
- aliases.update(new_aliases)
-
- max_name_length = self.connection.ops.max_name_length()
- result.extend([
- '%s%s' % (
- aggregate.as_sql(qn, self.connection),
- alias is not None
- and ' AS %s' % qn(truncate_name(alias, max_name_length))
- or ''
- )
- for alias, aggregate in self.query.aggregate_select.items()
- ])
-
- for table, col in self.query.related_select_cols:
- r = '%s.%s' % (qn(table), qn(col))
- if with_aliases and col in col_aliases:
- c_alias = 'Col%d' % len(col_aliases)
- result.append('%s AS %s' % (r, c_alias))
- aliases.add(c_alias)
- col_aliases.add(c_alias)
- else:
- result.append(r)
- aliases.add(r)
- col_aliases.add(col)
-
- self._select_aliases = aliases
- return result
-
- def get_default_columns(self, with_aliases=False, col_aliases=None,
- start_alias=None, opts=None, as_pairs=False, local_only=False):
- """
- Computes the default columns for selecting every field in the base
- model. Will sometimes be called to pull in related models (e.g. via
- select_related), in which case "opts" and "start_alias" will be given
- to provide a starting point for the traversal.
-
- Returns a list of strings, quoted appropriately for use in SQL
- directly, as well as a set of aliases used in the select statement (if
- 'as_pairs' is True, returns a list of (alias, col_name) pairs instead
- of strings as the first component and None as the second component).
- """
- result = []
- if opts is None:
- opts = self.query.model._meta
- qn = self.quote_name_unless_alias
- qn2 = self.connection.ops.quote_name
- aliases = set()
- only_load = self.deferred_to_columns()
- # Skip all proxy to the root proxied model
- proxied_model = get_proxied_model(opts)
-
- if start_alias:
- seen = {None: start_alias}
- for field, model in opts.get_fields_with_model():
- if local_only and model is not None:
- continue
- if start_alias:
- try:
- alias = seen[model]
- except KeyError:
- if model is proxied_model:
- alias = start_alias
- else:
- link_field = opts.get_ancestor_link(model)
- alias = self.query.join((start_alias, model._meta.db_table,
- link_field.column, model._meta.pk.column))
- seen[model] = alias
- else:
- # If we're starting from the base model of the queryset, the
- # aliases will have already been set up in pre_sql_setup(), so
- # we can save time here.
- alias = self.query.included_inherited_models[model]
- table = self.query.alias_map[alias][TABLE_NAME]
- if table in only_load and field.column not in only_load[table]:
- continue
- if as_pairs:
- result.append((alias, field.column))
- aliases.add(alias)
- continue
- if with_aliases and field.column in col_aliases:
- c_alias = 'Col%d' % len(col_aliases)
- result.append('%s.%s AS %s' % (qn(alias),
- qn2(field.column), c_alias))
- col_aliases.add(c_alias)
- aliases.add(c_alias)
- else:
- r = '%s.%s' % (qn(alias), qn2(field.column))
- result.append(r)
- aliases.add(r)
- if with_aliases:
- col_aliases.add(field.column)
- return result, aliases
-
- def get_ordering(self):
- """
- Returns a tuple containing a list representing the SQL elements in the
- "order by" clause, and the list of SQL elements that need to be added
- to the GROUP BY clause as a result of the ordering.
-
- Also sets the ordering_aliases attribute on this instance to a list of
- extra aliases needed in the select.
-
- Determining the ordering SQL can change the tables we need to include,
- so this should be run *before* get_from_clause().
- """
- if self.query.extra_order_by:
- ordering = self.query.extra_order_by
- elif not self.query.default_ordering:
- ordering = self.query.order_by
- else:
- ordering = self.query.order_by or self.query.model._meta.ordering
- qn = self.quote_name_unless_alias
- qn2 = self.connection.ops.quote_name
- distinct = self.query.distinct
- select_aliases = self._select_aliases
- result = []
- group_by = []
- ordering_aliases = []
- if self.query.standard_ordering:
- asc, desc = ORDER_DIR['ASC']
- else:
- asc, desc = ORDER_DIR['DESC']
-
- # It's possible, due to model inheritance, that normal usage might try
- # to include the same field more than once in the ordering. We track
- # the table/column pairs we use and discard any after the first use.
- processed_pairs = set()
-
- for field in ordering:
- if field == '?':
- result.append(self.connection.ops.random_function_sql())
- continue
- if isinstance(field, int):
- if field < 0:
- order = desc
- field = -field
- else:
- order = asc
- result.append('%s %s' % (field, order))
- group_by.append((field, []))
- continue
- col, order = get_order_dir(field, asc)
- if col in self.query.aggregate_select:
- result.append('%s %s' % (col, order))
- continue
- if '.' in field:
- # This came in through an extra(order_by=...) addition. Pass it
- # on verbatim.
- table, col = col.split('.', 1)
- if (table, col) not in processed_pairs:
- elt = '%s.%s' % (qn(table), col)
- processed_pairs.add((table, col))
- if not distinct or elt in select_aliases:
- result.append('%s %s' % (elt, order))
- group_by.append((elt, []))
- elif get_order_dir(field)[0] not in self.query.extra_select:
- # 'col' is of the form 'field' or 'field1__field2' or
- # '-field1__field2__field', etc.
- for table, col, order in self.find_ordering_name(field,
- self.query.model._meta, default_order=asc):
- if (table, col) not in processed_pairs:
- elt = '%s.%s' % (qn(table), qn2(col))
- processed_pairs.add((table, col))
- if distinct and elt not in select_aliases:
- ordering_aliases.append(elt)
- result.append('%s %s' % (elt, order))
- group_by.append((elt, []))
- else:
- elt = qn2(col)
- if distinct and col not in select_aliases:
- ordering_aliases.append(elt)
- result.append('%s %s' % (elt, order))
- group_by.append(self.query.extra_select[col])
- self.query.ordering_aliases = ordering_aliases
- return result, group_by
-
- def find_ordering_name(self, name, opts, alias=None, default_order='ASC',
- already_seen=None):
- """
- Returns the table alias (the name might be ambiguous, the alias will
- not be) and column name for ordering by the given 'name' parameter.
- The 'name' is of the form 'field1__field2__...__fieldN'.
- """
- name, order = get_order_dir(name, default_order)
- pieces = name.split(LOOKUP_SEP)
- if not alias:
- alias = self.query.get_initial_alias()
- field, target, opts, joins, last, extra = self.query.setup_joins(pieces,
- opts, alias, False)
- alias = joins[-1]
- col = target.column
- if not field.rel:
- # To avoid inadvertent trimming of a necessary alias, use the
- # refcount to show that we are referencing a non-relation field on
- # the model.
- self.query.ref_alias(alias)
-
- # Must use left outer joins for nullable fields and their relations.
- self.query.promote_alias_chain(joins,
- self.query.alias_map[joins[0]][JOIN_TYPE] == self.query.LOUTER)
-
- # If we get to this point and the field is a relation to another model,
- # append the default ordering for that model.
- if field.rel and len(joins) > 1 and opts.ordering:
- # Firstly, avoid infinite loops.
- if not already_seen:
- already_seen = set()
- join_tuple = tuple([self.query.alias_map[j][TABLE_NAME] for j in joins])
- if join_tuple in already_seen:
- raise FieldError('Infinite loop caused by ordering.')
- already_seen.add(join_tuple)
-
- results = []
- for item in opts.ordering:
- results.extend(self.find_ordering_name(item, opts, alias,
- order, already_seen))
- return results
-
- if alias:
- # We have to do the same "final join" optimisation as in
- # add_filter, since the final column might not otherwise be part of
- # the select set (so we can't order on it).
- while 1:
- join = self.query.alias_map[alias]
- if col != join[RHS_JOIN_COL]:
- break
- self.query.unref_alias(alias)
- alias = join[LHS_ALIAS]
- col = join[LHS_JOIN_COL]
- return [(alias, col, order)]
-
- def get_from_clause(self):
- """
- Returns a list of strings that are joined together to go after the
- "FROM" part of the query, as well as a list any extra parameters that
- need to be included. Sub-classes, can override this to create a
- from-clause via a "select".
-
- This should only be called after any SQL construction methods that
- might change the tables we need. This means the select columns and
- ordering must be done first.
- """
- result = []
- qn = self.quote_name_unless_alias
- qn2 = self.connection.ops.quote_name
- first = True
- for alias in self.query.tables:
- if not self.query.alias_refcount[alias]:
- continue
- try:
- name, alias, join_type, lhs, lhs_col, col, nullable = self.query.alias_map[alias]
- except KeyError:
- # Extra tables can end up in self.tables, but not in the
- # alias_map if they aren't in a join. That's OK. We skip them.
- continue
- alias_str = (alias != name and ' %s' % alias or '')
- if join_type and not first:
- result.append('%s %s%s ON (%s.%s = %s.%s)'
- % (join_type, qn(name), alias_str, qn(lhs),
- qn2(lhs_col), qn(alias), qn2(col)))
- else:
- connector = not first and ', ' or ''
- result.append('%s%s%s' % (connector, qn(name), alias_str))
- first = False
- for t in self.query.extra_tables:
- alias, unused = self.query.table_alias(t)
- # Only add the alias if it's not already present (the table_alias()
- # calls increments the refcount, so an alias refcount of one means
- # this is the only reference.
- if alias not in self.query.alias_map or self.query.alias_refcount[alias] == 1:
- connector = not first and ', ' or ''
- result.append('%s%s' % (connector, qn(alias)))
- first = False
- return result, []
-
- def get_grouping(self):
- """
- Returns a tuple representing the SQL elements in the "group by" clause.
- """
- qn = self.quote_name_unless_alias
- result, params = [], []
- if self.query.group_by is not None:
- if (len(self.query.model._meta.fields) == len(self.query.select) and
- self.connection.features.allows_group_by_pk):
- self.query.group_by = [
- (self.query.model._meta.db_table, self.query.model._meta.pk.column)
- ]
-
- group_by = self.query.group_by or []
-
- extra_selects = []
- for extra_select, extra_params in self.query.extra_select.itervalues():
- extra_selects.append(extra_select)
- params.extend(extra_params)
- cols = (group_by + self.query.select +
- self.query.related_select_cols + extra_selects)
- for col in cols:
- if isinstance(col, (list, tuple)):
- result.append('%s.%s' % (qn(col[0]), qn(col[1])))
- elif hasattr(col, 'as_sql'):
- result.append(col.as_sql(qn, self.connection))
- else:
- result.append('(%s)' % str(col))
- return result, params
-
- def fill_related_selections(self, opts=None, root_alias=None, cur_depth=1,
- used=None, requested=None, restricted=None, nullable=None,
- dupe_set=None, avoid_set=None):
- """
- Fill in the information needed for a select_related query. The current
- depth is measured as the number of connections away from the root model
- (for example, cur_depth=1 means we are looking at models with direct
- connections to the root model).
- """
- if not restricted and self.query.max_depth and cur_depth > self.query.max_depth:
- # We've recursed far enough; bail out.
- return
-
- if not opts:
- opts = self.query.get_meta()
- root_alias = self.query.get_initial_alias()
- self.query.related_select_cols = []
- self.query.related_select_fields = []
- if not used:
- used = set()
- if dupe_set is None:
- dupe_set = set()
- if avoid_set is None:
- avoid_set = set()
- orig_dupe_set = dupe_set
-
- # Setup for the case when only particular related fields should be
- # included in the related selection.
- if requested is None:
- if isinstance(self.query.select_related, dict):
- requested = self.query.select_related
- restricted = True
- else:
- restricted = False
-
- for f, model in opts.get_fields_with_model():
- if not select_related_descend(f, restricted, requested):
- continue
- # The "avoid" set is aliases we want to avoid just for this
- # particular branch of the recursion. They aren't permanently
- # forbidden from reuse in the related selection tables (which is
- # what "used" specifies).
- avoid = avoid_set.copy()
- dupe_set = orig_dupe_set.copy()
- table = f.rel.to._meta.db_table
- promote = nullable or f.null
- if model:
- int_opts = opts
- alias = root_alias
- alias_chain = []
- for int_model in opts.get_base_chain(model):
- # Proxy model have elements in base chain
- # with no parents, assign the new options
- # object and skip to the next base in that
- # case
- if not int_opts.parents[int_model]:
- int_opts = int_model._meta
- continue
- lhs_col = int_opts.parents[int_model].column
- dedupe = lhs_col in opts.duplicate_targets
- if dedupe:
- avoid.update(self.query.dupe_avoidance.get((id(opts), lhs_col),
- ()))
- dupe_set.add((opts, lhs_col))
- int_opts = int_model._meta
- alias = self.query.join((alias, int_opts.db_table, lhs_col,
- int_opts.pk.column), exclusions=used,
- promote=promote)
- alias_chain.append(alias)
- for (dupe_opts, dupe_col) in dupe_set:
- self.query.update_dupe_avoidance(dupe_opts, dupe_col, alias)
- if self.query.alias_map[root_alias][JOIN_TYPE] == self.query.LOUTER:
- self.query.promote_alias_chain(alias_chain, True)
- else:
- alias = root_alias
-
- dedupe = f.column in opts.duplicate_targets
- if dupe_set or dedupe:
- avoid.update(self.query.dupe_avoidance.get((id(opts), f.column), ()))
- if dedupe:
- dupe_set.add((opts, f.column))
-
- alias = self.query.join((alias, table, f.column,
- f.rel.get_related_field().column),
- exclusions=used.union(avoid), promote=promote)
- used.add(alias)
- columns, aliases = self.get_default_columns(start_alias=alias,
- opts=f.rel.to._meta, as_pairs=True)
- self.query.related_select_cols.extend(columns)
- if self.query.alias_map[alias][JOIN_TYPE] == self.query.LOUTER:
- self.query.promote_alias_chain(aliases, True)
- self.query.related_select_fields.extend(f.rel.to._meta.fields)
- if restricted:
- next = requested.get(f.name, {})
- else:
- next = False
- new_nullable = f.null or promote
- for dupe_opts, dupe_col in dupe_set:
- self.query.update_dupe_avoidance(dupe_opts, dupe_col, alias)
- self.fill_related_selections(f.rel.to._meta, alias, cur_depth + 1,
- used, next, restricted, new_nullable, dupe_set, avoid)
-
- if restricted:
- related_fields = [
- (o.field, o.model)
- for o in opts.get_all_related_objects()
- if o.field.unique
- ]
- for f, model in related_fields:
- if not select_related_descend(f, restricted, requested, reverse=True):
- continue
- # The "avoid" set is aliases we want to avoid just for this
- # particular branch of the recursion. They aren't permanently
- # forbidden from reuse in the related selection tables (which is
- # what "used" specifies).
- avoid = avoid_set.copy()
- dupe_set = orig_dupe_set.copy()
- table = model._meta.db_table
-
- int_opts = opts
- alias = root_alias
- alias_chain = []
- chain = opts.get_base_chain(f.rel.to)
- if chain is not None:
- for int_model in chain:
- # Proxy model have elements in base chain
- # with no parents, assign the new options
- # object and skip to the next base in that
- # case
- if not int_opts.parents[int_model]:
- int_opts = int_model._meta
- continue
- lhs_col = int_opts.parents[int_model].column
- dedupe = lhs_col in opts.duplicate_targets
- if dedupe:
- avoid.update((self.query.dupe_avoidance.get(id(opts), lhs_col),
- ()))
- dupe_set.add((opts, lhs_col))
- int_opts = int_model._meta
- alias = self.query.join(
- (alias, int_opts.db_table, lhs_col, int_opts.pk.column),
- exclusions=used, promote=True, reuse=used
- )
- alias_chain.append(alias)
- for dupe_opts, dupe_col in dupe_set:
- self.query.update_dupe_avoidance(dupe_opts, dupe_col, alias)
- dedupe = f.column in opts.duplicate_targets
- if dupe_set or dedupe:
- avoid.update(self.query.dupe_avoidance.get((id(opts), f.column), ()))
- if dedupe:
- dupe_set.add((opts, f.column))
- alias = self.query.join(
- (alias, table, f.rel.get_related_field().column, f.column),
- exclusions=used.union(avoid),
- promote=True
- )
- used.add(alias)
- columns, aliases = self.get_default_columns(start_alias=alias,
- opts=model._meta, as_pairs=True, local_only=True)
- self.query.related_select_cols.extend(columns)
- self.query.related_select_fields.extend(model._meta.fields)
-
- next = requested.get(f.related_query_name(), {})
- new_nullable = f.null or None
-
- self.fill_related_selections(model._meta, table, cur_depth+1,
- used, next, restricted, new_nullable)
-
- def deferred_to_columns(self):
- """
- Converts the self.deferred_loading data structure to mapping of table
- names to sets of column names which are to be loaded. Returns the
- dictionary.
- """
- columns = {}
- self.query.deferred_to_data(columns, self.query.deferred_to_columns_cb)
- return columns
-
- def results_iter(self):
- """
- Returns an iterator over the results from executing this query.
- """
- resolve_columns = hasattr(self, 'resolve_columns')
- fields = None
- has_aggregate_select = bool(self.query.aggregate_select)
- for rows in self.execute_sql(MULTI):
- for row in rows:
- if resolve_columns:
- if fields is None:
- # We only set this up here because
- # related_select_fields isn't populated until
- # execute_sql() has been called.
- if self.query.select_fields:
- fields = self.query.select_fields + self.query.related_select_fields
- else:
- fields = self.query.model._meta.fields
- # If the field was deferred, exclude it from being passed
- # into `resolve_columns` because it wasn't selected.
- only_load = self.deferred_to_columns()
- if only_load:
- db_table = self.query.model._meta.db_table
- fields = [f for f in fields if db_table in only_load and
- f.column in only_load[db_table]]
- row = self.resolve_columns(row, fields)
-
- if has_aggregate_select:
- aggregate_start = len(self.query.extra_select.keys()) + len(self.query.select)
- aggregate_end = aggregate_start + len(self.query.aggregate_select)
- row = tuple(row[:aggregate_start]) + tuple([
- self.query.resolve_aggregate(value, aggregate, self.connection)
- for (alias, aggregate), value
- in zip(self.query.aggregate_select.items(), row[aggregate_start:aggregate_end])
- ]) + tuple(row[aggregate_end:])
-
- yield row
-
- def execute_sql(self, result_type=MULTI):
- """
- Run the query against the database and returns the result(s). The
- return value is a single data item if result_type is SINGLE, or an
- iterator over the results if the result_type is MULTI.
-
- result_type is either MULTI (use fetchmany() to retrieve all rows),
- SINGLE (only retrieve a single row), or None. In this last case, the
- cursor is returned if any query is executed, since it's used by
- subclasses such as InsertQuery). It's possible, however, that no query
- is needed, as the filters describe an empty set. In that case, None is
- returned, to avoid any unnecessary database interaction.
- """
- try:
- sql, params = self.as_sql()
- if not sql:
- raise EmptyResultSet
- except EmptyResultSet:
- if result_type == MULTI:
- return empty_iter()
- else:
- return
-
- cursor = self.connection.cursor()
- cursor.execute(sql, params)
-
- if not result_type:
- return cursor
- if result_type == SINGLE:
- if self.query.ordering_aliases:
- return cursor.fetchone()[:-len(self.query.ordering_aliases)]
- return cursor.fetchone()
-
- # The MULTI case.
- if self.query.ordering_aliases:
- result = order_modified_iter(cursor, len(self.query.ordering_aliases),
- self.connection.features.empty_fetchmany_value)
- else:
- result = iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
- self.connection.features.empty_fetchmany_value)
- if not self.connection.features.can_use_chunked_reads:
- # If we are using non-chunked reads, we return the same data
- # structure as normally, but ensure it is all read into memory
- # before going any further.
- return list(result)
- return result
-
-
-class SQLInsertCompiler(SQLCompiler):
- def placeholder(self, field, val):
- if field is None:
- # A field value of None means the value is raw.
- return val
- elif hasattr(field, 'get_placeholder'):
- # Some fields (e.g. geo fields) need special munging before
- # they can be inserted.
- return field.get_placeholder(val, self.connection)
- else:
- # Return the common case for the placeholder
- return '%s'
-
- def as_sql(self):
- # We don't need quote_name_unless_alias() here, since these are all
- # going to be column names (so we can avoid the extra overhead).
- qn = self.connection.ops.quote_name
- opts = self.query.model._meta
- result = ['INSERT INTO %s' % qn(opts.db_table)]
- result.append('(%s)' % ', '.join([qn(c) for c in self.query.columns]))
- values = [self.placeholder(*v) for v in self.query.values]
- result.append('VALUES (%s)' % ', '.join(values))
- params = self.query.params
- if self.return_id and self.connection.features.can_return_id_from_insert:
- col = "%s.%s" % (qn(opts.db_table), qn(opts.pk.column))
- r_fmt, r_params = self.connection.ops.return_insert_id()
- result.append(r_fmt % col)
- params = params + r_params
- return ' '.join(result), params
-
- def execute_sql(self, return_id=False):
- self.return_id = return_id
- cursor = super(SQLInsertCompiler, self).execute_sql(None)
- if not (return_id and cursor):
- return
- if self.connection.features.can_return_id_from_insert:
- return self.connection.ops.fetch_returned_insert_id(cursor)
- return self.connection.ops.last_insert_id(cursor,
- self.query.model._meta.db_table, self.query.model._meta.pk.column)
-
-
-class SQLDeleteCompiler(SQLCompiler):
- def as_sql(self):
- """
- Creates the SQL for this query. Returns the SQL string and list of
- parameters.
- """
- assert len(self.query.tables) == 1, \
- "Can only delete from one table at a time."
- qn = self.quote_name_unless_alias
- result = ['DELETE FROM %s' % qn(self.query.tables[0])]
- where, params = self.query.where.as_sql(qn=qn, connection=self.connection)
- result.append('WHERE %s' % where)
- return ' '.join(result), tuple(params)
-
-class SQLUpdateCompiler(SQLCompiler):
- def as_sql(self):
- """
- Creates the SQL for this query. Returns the SQL string and list of
- parameters.
- """
- from django.db.models.base import Model
-
- self.pre_sql_setup()
- if not self.query.values:
- return '', ()
- table = self.query.tables[0]
- qn = self.quote_name_unless_alias
- result = ['UPDATE %s' % qn(table)]
- result.append('SET')
- values, update_params = [], []
- for field, model, val in self.query.values:
- if hasattr(val, 'prepare_database_save'):
- val = val.prepare_database_save(field)
- else:
- val = field.get_db_prep_save(val, connection=self.connection)
-
- # Getting the placeholder for the field.
- if hasattr(field, 'get_placeholder'):
- placeholder = field.get_placeholder(val, self.connection)
- else:
- placeholder = '%s'
-
- if hasattr(val, 'evaluate'):
- val = SQLEvaluator(val, self.query, allow_joins=False)
- name = field.column
- if hasattr(val, 'as_sql'):
- sql, params = val.as_sql(qn, self.connection)
- values.append('%s = %s' % (qn(name), sql))
- update_params.extend(params)
- elif val is not None:
- values.append('%s = %s' % (qn(name), placeholder))
- update_params.append(val)
- else:
- values.append('%s = NULL' % qn(name))
- if not values:
- return '', ()
- result.append(', '.join(values))
- where, params = self.query.where.as_sql(qn=qn, connection=self.connection)
- if where:
- result.append('WHERE %s' % where)
- return ' '.join(result), tuple(update_params + params)
-
- def execute_sql(self, result_type):
- """
- Execute the specified update. Returns the number of rows affected by
- the primary update query. The "primary update query" is the first
- non-empty query that is executed. Row counts for any subsequent,
- related queries are not available.
- """
- cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
- rows = cursor and cursor.rowcount or 0
- is_empty = cursor is None
- del cursor
- for query in self.query.get_related_updates():
- aux_rows = query.get_compiler(self.using).execute_sql(result_type)
- if is_empty:
- rows = aux_rows
- is_empty = False
- return rows
-
- def pre_sql_setup(self):
- """
- If the update depends on results from other tables, we need to do some
- munging of the "where" conditions to match the format required for
- (portable) SQL updates. That is done here.
-
- Further, if we are going to be running multiple updates, we pull out
- the id values to update at this point so that they don't change as a
- result of the progressive updates.
- """
- self.query.select_related = False
- self.query.clear_ordering(True)
- super(SQLUpdateCompiler, self).pre_sql_setup()
- count = self.query.count_active_tables()
- if not self.query.related_updates and count == 1:
- return
-
- # We need to use a sub-select in the where clause to filter on things
- # from other tables.
- query = self.query.clone(klass=Query)
- query.bump_prefix()
- query.extra = {}
- query.select = []
- query.add_fields([query.model._meta.pk.name])
- must_pre_select = count > 1 and not self.connection.features.update_can_self_select
-
- # Now we adjust the current query: reset the where clause and get rid
- # of all the tables we don't need (since they're in the sub-select).
- self.query.where = self.query.where_class()
- if self.query.related_updates or must_pre_select:
- # Either we're using the idents in multiple update queries (so
- # don't want them to change), or the db backend doesn't support
- # selecting from the updating table (e.g. MySQL).
- idents = []
- for rows in query.get_compiler(self.using).execute_sql(MULTI):
- idents.extend([r[0] for r in rows])
- self.query.add_filter(('pk__in', idents))
- self.query.related_ids = idents
- else:
- # The fast path. Filters and updates in one query.
- self.query.add_filter(('pk__in', query))
- for alias in self.query.tables[1:]:
- self.query.alias_refcount[alias] = 0
-
-class SQLAggregateCompiler(SQLCompiler):
- def as_sql(self, qn=None):
- """
- Creates the SQL for this query. Returns the SQL string and list of
- parameters.
- """
- if qn is None:
- qn = self.quote_name_unless_alias
- sql = ('SELECT %s FROM (%s) subquery' % (
- ', '.join([
- aggregate.as_sql(qn, self.connection)
- for aggregate in self.query.aggregate_select.values()
- ]),
- self.query.subquery)
- )
- params = self.query.sub_params
- return (sql, params)
-
-class SQLDateCompiler(SQLCompiler):
- def results_iter(self):
- """
- Returns an iterator over the results from executing this query.
- """
- resolve_columns = hasattr(self, 'resolve_columns')
- if resolve_columns:
- from django.db.models.fields import DateTimeField
- fields = [DateTimeField()]
- else:
- from django.db.backends.util import typecast_timestamp
- needs_string_cast = self.connection.features.needs_datetime_string_cast
-
- offset = len(self.query.extra_select)
- for rows in self.execute_sql(MULTI):
- for row in rows:
- date = row[offset]
- if resolve_columns:
- date = self.resolve_columns(row, fields)[offset]
- elif needs_string_cast:
- date = typecast_timestamp(str(date))
- yield date
-
-
-def empty_iter():
- """
- Returns an iterator containing no results.
- """
- yield iter([]).next()
-
-
-def order_modified_iter(cursor, trim, sentinel):
- """
- Yields blocks of rows from a cursor. We use this iterator in the special
- case when extra output columns have been added to support ordering
- requirements. We must trim those extra columns before anything else can use
- the results, since they're only needed to make the SQL valid.
- """
- for rows in iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
- sentinel):
- yield [r[:-trim] for r in rows]
diff --git a/parts/django/django/db/models/sql/constants.py b/parts/django/django/db/models/sql/constants.py
deleted file mode 100644
index 63c704f..0000000
--- a/parts/django/django/db/models/sql/constants.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import re
-
-# Valid query types (a dictionary is used for speedy lookups).
-QUERY_TERMS = dict([(x, None) for x in (
- 'exact', 'iexact', 'contains', 'icontains', 'gt', 'gte', 'lt', 'lte', 'in',
- 'startswith', 'istartswith', 'endswith', 'iendswith', 'range', 'year',
- 'month', 'day', 'week_day', 'isnull', 'search', 'regex', 'iregex',
- )])
-
-# Size of each "chunk" for get_iterator calls.
-# Larger values are slightly faster at the expense of more storage space.
-GET_ITERATOR_CHUNK_SIZE = 100
-
-# Separator used to split filter strings apart.
-LOOKUP_SEP = '__'
-
-# Constants to make looking up tuple values clearer.
-# Join lists (indexes into the tuples that are values in the alias_map
-# dictionary in the Query class).
-TABLE_NAME = 0
-RHS_ALIAS = 1
-JOIN_TYPE = 2
-LHS_ALIAS = 3
-LHS_JOIN_COL = 4
-RHS_JOIN_COL = 5
-NULLABLE = 6
-
-# How many results to expect from a cursor.execute call
-MULTI = 'multi'
-SINGLE = 'single'
-
-ORDER_PATTERN = re.compile(r'\?|[-+]?[.\w]+$')
-ORDER_DIR = {
- 'ASC': ('ASC', 'DESC'),
- 'DESC': ('DESC', 'ASC')}
-
-
diff --git a/parts/django/django/db/models/sql/datastructures.py b/parts/django/django/db/models/sql/datastructures.py
deleted file mode 100644
index 92d64e1..0000000
--- a/parts/django/django/db/models/sql/datastructures.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""
-Useful auxilliary data structures for query construction. Not useful outside
-the SQL domain.
-"""
-
-class EmptyResultSet(Exception):
- pass
-
-class FullResultSet(Exception):
- pass
-
-class MultiJoin(Exception):
- """
- Used by join construction code to indicate the point at which a
- multi-valued join was attempted (if the caller wants to treat that
- exceptionally).
- """
- def __init__(self, level):
- self.level = level
-
-class Empty(object):
- pass
-
-class RawValue(object):
- def __init__(self, value):
- self.value = value
-
-class Date(object):
- """
- Add a date selection column.
- """
- def __init__(self, col, lookup_type):
- self.col = col
- self.lookup_type = lookup_type
-
- def relabel_aliases(self, change_map):
- c = self.col
- if isinstance(c, (list, tuple)):
- self.col = (change_map.get(c[0], c[0]), c[1])
-
- def as_sql(self, qn, connection):
- if isinstance(self.col, (list, tuple)):
- col = '%s.%s' % tuple([qn(c) for c in self.col])
- else:
- col = self.col
- return connection.ops.date_trunc_sql(self.lookup_type, col)
diff --git a/parts/django/django/db/models/sql/expressions.py b/parts/django/django/db/models/sql/expressions.py
deleted file mode 100644
index fffbba0..0000000
--- a/parts/django/django/db/models/sql/expressions.py
+++ /dev/null
@@ -1,87 +0,0 @@
-from django.core.exceptions import FieldError
-from django.db.models.fields import FieldDoesNotExist
-from django.db.models.sql.constants import LOOKUP_SEP
-
-class SQLEvaluator(object):
- def __init__(self, expression, query, allow_joins=True):
- self.expression = expression
- self.opts = query.get_meta()
- self.cols = {}
-
- self.contains_aggregate = False
- self.expression.prepare(self, query, allow_joins)
-
- def prepare(self):
- return self
-
- def as_sql(self, qn, connection):
- return self.expression.evaluate(self, qn, connection)
-
- def relabel_aliases(self, change_map):
- for node, col in self.cols.items():
- if hasattr(col, "relabel_aliases"):
- col.relabel_aliases(change_map)
- else:
- self.cols[node] = (change_map.get(col[0], col[0]), col[1])
-
- #####################################################
- # Vistor methods for initial expression preparation #
- #####################################################
-
- def prepare_node(self, node, query, allow_joins):
- for child in node.children:
- if hasattr(child, 'prepare'):
- child.prepare(self, query, allow_joins)
-
- def prepare_leaf(self, node, query, allow_joins):
- if not allow_joins and LOOKUP_SEP in node.name:
- raise FieldError("Joined field references are not permitted in this query")
-
- field_list = node.name.split(LOOKUP_SEP)
- if (len(field_list) == 1 and
- node.name in query.aggregate_select.keys()):
- self.contains_aggregate = True
- self.cols[node] = query.aggregate_select[node.name]
- else:
- try:
- field, source, opts, join_list, last, _ = query.setup_joins(
- field_list, query.get_meta(),
- query.get_initial_alias(), False)
- col, _, join_list = query.trim_joins(source, join_list, last, False)
-
- self.cols[node] = (join_list[-1], col)
- except FieldDoesNotExist:
- raise FieldError("Cannot resolve keyword %r into field. "
- "Choices are: %s" % (self.name,
- [f.name for f in self.opts.fields]))
-
- ##################################################
- # Vistor methods for final expression evaluation #
- ##################################################
-
- def evaluate_node(self, node, qn, connection):
- expressions = []
- expression_params = []
- for child in node.children:
- if hasattr(child, 'evaluate'):
- sql, params = child.evaluate(self, qn, connection)
- else:
- sql, params = '%s', (child,)
-
- if len(getattr(child, 'children', [])) > 1:
- format = '(%s)'
- else:
- format = '%s'
-
- if sql:
- expressions.append(format % sql)
- expression_params.extend(params)
-
- return connection.ops.combine_expression(node.connector, expressions), expression_params
-
- def evaluate_leaf(self, node, qn, connection):
- col = self.cols[node]
- if hasattr(col, 'as_sql'):
- return col.as_sql(qn, connection), ()
- else:
- return '%s.%s' % (qn(col[0]), qn(col[1])), ()
diff --git a/parts/django/django/db/models/sql/query.py b/parts/django/django/db/models/sql/query.py
deleted file mode 100644
index eae7a87..0000000
--- a/parts/django/django/db/models/sql/query.py
+++ /dev/null
@@ -1,1860 +0,0 @@
-"""
-Create SQL statements for QuerySets.
-
-The code in here encapsulates all of the SQL construction so that QuerySets
-themselves do not have to (and could be backed by things other than SQL
-databases). The abstraction barrier only works one way: this module has to know
-all about the internals of models in order to get the information it needs.
-"""
-
-from django.utils.copycompat import deepcopy
-from django.utils.tree import Node
-from django.utils.datastructures import SortedDict
-from django.utils.encoding import force_unicode
-from django.db import connections, DEFAULT_DB_ALIAS
-from django.db.models import signals
-from django.db.models.fields import FieldDoesNotExist
-from django.db.models.query_utils import select_related_descend, InvalidQuery
-from django.db.models.sql import aggregates as base_aggregates_module
-from django.db.models.sql.constants import *
-from django.db.models.sql.datastructures import EmptyResultSet, Empty, MultiJoin
-from django.db.models.sql.expressions import SQLEvaluator
-from django.db.models.sql.where import (WhereNode, Constraint, EverythingNode,
- ExtraWhere, AND, OR)
-from django.core.exceptions import FieldError
-
-__all__ = ['Query', 'RawQuery']
-
-class RawQuery(object):
- """
- A single raw SQL query
- """
-
- def __init__(self, sql, using, params=None):
- self.validate_sql(sql)
- self.params = params or ()
- self.sql = sql
- self.using = using
- self.cursor = None
-
- # Mirror some properties of a normal query so that
- # the compiler can be used to process results.
- self.low_mark, self.high_mark = 0, None # Used for offset/limit
- self.extra_select = {}
- self.aggregate_select = {}
-
- def clone(self, using):
- return RawQuery(self.sql, using, params=self.params)
-
- def convert_values(self, value, field, connection):
- """Convert the database-returned value into a type that is consistent
- across database backends.
-
- By default, this defers to the underlying backend operations, but
- it can be overridden by Query classes for specific backends.
- """
- return connection.ops.convert_values(value, field)
-
- def get_columns(self):
- if self.cursor is None:
- self._execute_query()
- converter = connections[self.using].introspection.table_name_converter
- return [converter(column_meta[0])
- for column_meta in self.cursor.description]
-
- def validate_sql(self, sql):
- if not sql.lower().strip().startswith('select'):
- raise InvalidQuery('Raw queries are limited to SELECT queries. Use '
- 'connection.cursor directly for other types of queries.')
-
- def __iter__(self):
- # Always execute a new query for a new iterator.
- # This could be optimized with a cache at the expense of RAM.
- self._execute_query()
- if not connections[self.using].features.can_use_chunked_reads:
- # If the database can't use chunked reads we need to make sure we
- # evaluate the entire query up front.
- result = list(self.cursor)
- else:
- result = self.cursor
- return iter(result)
-
- def __repr__(self):
- return "<RawQuery: %r>" % (self.sql % self.params)
-
- def _execute_query(self):
- self.cursor = connections[self.using].cursor()
- self.cursor.execute(self.sql, self.params)
-
-
-class Query(object):
- """
- A single SQL query.
- """
- # SQL join types. These are part of the class because their string forms
- # vary from database to database and can be customised by a subclass.
- INNER = 'INNER JOIN'
- LOUTER = 'LEFT OUTER JOIN'
-
- alias_prefix = 'T'
- query_terms = QUERY_TERMS
- aggregates_module = base_aggregates_module
-
- compiler = 'SQLCompiler'
-
- def __init__(self, model, where=WhereNode):
- self.model = model
- self.alias_refcount = {}
- self.alias_map = {} # Maps alias to join information
- self.table_map = {} # Maps table names to list of aliases.
- self.join_map = {}
- self.rev_join_map = {} # Reverse of join_map.
- self.quote_cache = {}
- self.default_cols = True
- self.default_ordering = True
- self.standard_ordering = True
- self.ordering_aliases = []
- self.select_fields = []
- self.related_select_fields = []
- self.dupe_avoidance = {}
- self.used_aliases = set()
- self.filter_is_sticky = False
- self.included_inherited_models = {}
-
- # SQL-related attributes
- self.select = []
- self.tables = [] # Aliases in the order they are created.
- self.where = where()
- self.where_class = where
- self.group_by = None
- self.having = where()
- self.order_by = []
- self.low_mark, self.high_mark = 0, None # Used for offset/limit
- self.distinct = False
- self.select_related = False
- self.related_select_cols = []
-
- # SQL aggregate-related attributes
- self.aggregates = SortedDict() # Maps alias -> SQL aggregate function
- self.aggregate_select_mask = None
- self._aggregate_select_cache = None
-
- # Arbitrary maximum limit for select_related. Prevents infinite
- # recursion. Can be changed by the depth parameter to select_related().
- self.max_depth = 5
-
- # These are for extensions. The contents are more or less appended
- # verbatim to the appropriate clause.
- self.extra = SortedDict() # Maps col_alias -> (col_sql, params).
- self.extra_select_mask = None
- self._extra_select_cache = None
-
- self.extra_tables = ()
- self.extra_order_by = ()
-
- # A tuple that is a set of model field names and either True, if these
- # are the fields to defer, or False if these are the only fields to
- # load.
- self.deferred_loading = (set(), True)
-
- def __str__(self):
- """
- Returns the query as a string of SQL with the parameter values
- substituted in.
-
- Parameter values won't necessarily be quoted correctly, since that is
- done by the database interface at execution time.
- """
- sql, params = self.get_compiler(DEFAULT_DB_ALIAS).as_sql()
- return sql % params
-
- def __deepcopy__(self, memo):
- result = self.clone(memo=memo)
- memo[id(self)] = result
- return result
-
- def __getstate__(self):
- """
- Pickling support.
- """
- obj_dict = self.__dict__.copy()
- obj_dict['related_select_fields'] = []
- obj_dict['related_select_cols'] = []
-
- # Fields can't be pickled, so if a field list has been
- # specified, we pickle the list of field names instead.
- # None is also a possible value; that can pass as-is
- obj_dict['select_fields'] = [
- f is not None and f.name or None
- for f in obj_dict['select_fields']
- ]
- return obj_dict
-
- def __setstate__(self, obj_dict):
- """
- Unpickling support.
- """
- # Rebuild list of field instances
- opts = obj_dict['model']._meta
- obj_dict['select_fields'] = [
- name is not None and opts.get_field(name) or None
- for name in obj_dict['select_fields']
- ]
-
- self.__dict__.update(obj_dict)
-
- def prepare(self):
- return self
-
- def get_compiler(self, using=None, connection=None):
- if using is None and connection is None:
- raise ValueError("Need either using or connection")
- if using:
- connection = connections[using]
-
- # Check that the compiler will be able to execute the query
- for alias, aggregate in self.aggregate_select.items():
- connection.ops.check_aggregate_support(aggregate)
-
- return connection.ops.compiler(self.compiler)(self, connection, using)
-
- def get_meta(self):
- """
- Returns the Options instance (the model._meta) from which to start
- processing. Normally, this is self.model._meta, but it can be changed
- by subclasses.
- """
- return self.model._meta
-
- def clone(self, klass=None, memo=None, **kwargs):
- """
- Creates a copy of the current instance. The 'kwargs' parameter can be
- used by clients to update attributes after copying has taken place.
- """
- obj = Empty()
- obj.__class__ = klass or self.__class__
- obj.model = self.model
- obj.alias_refcount = self.alias_refcount.copy()
- obj.alias_map = self.alias_map.copy()
- obj.table_map = self.table_map.copy()
- obj.join_map = self.join_map.copy()
- obj.rev_join_map = self.rev_join_map.copy()
- obj.quote_cache = {}
- obj.default_cols = self.default_cols
- obj.default_ordering = self.default_ordering
- obj.standard_ordering = self.standard_ordering
- obj.included_inherited_models = self.included_inherited_models.copy()
- obj.ordering_aliases = []
- obj.select_fields = self.select_fields[:]
- obj.related_select_fields = self.related_select_fields[:]
- obj.dupe_avoidance = self.dupe_avoidance.copy()
- obj.select = self.select[:]
- obj.tables = self.tables[:]
- obj.where = deepcopy(self.where, memo=memo)
- obj.where_class = self.where_class
- if self.group_by is None:
- obj.group_by = None
- else:
- obj.group_by = self.group_by[:]
- obj.having = deepcopy(self.having, memo=memo)
- obj.order_by = self.order_by[:]
- obj.low_mark, obj.high_mark = self.low_mark, self.high_mark
- obj.distinct = self.distinct
- obj.select_related = self.select_related
- obj.related_select_cols = []
- obj.aggregates = deepcopy(self.aggregates, memo=memo)
- if self.aggregate_select_mask is None:
- obj.aggregate_select_mask = None
- else:
- obj.aggregate_select_mask = self.aggregate_select_mask.copy()
- # _aggregate_select_cache cannot be copied, as doing so breaks the
- # (necessary) state in which both aggregates and
- # _aggregate_select_cache point to the same underlying objects.
- # It will get re-populated in the cloned queryset the next time it's
- # used.
- obj._aggregate_select_cache = None
- obj.max_depth = self.max_depth
- obj.extra = self.extra.copy()
- if self.extra_select_mask is None:
- obj.extra_select_mask = None
- else:
- obj.extra_select_mask = self.extra_select_mask.copy()
- if self._extra_select_cache is None:
- obj._extra_select_cache = None
- else:
- obj._extra_select_cache = self._extra_select_cache.copy()
- obj.extra_tables = self.extra_tables
- obj.extra_order_by = self.extra_order_by
- obj.deferred_loading = deepcopy(self.deferred_loading, memo=memo)
- if self.filter_is_sticky and self.used_aliases:
- obj.used_aliases = self.used_aliases.copy()
- else:
- obj.used_aliases = set()
- obj.filter_is_sticky = False
- obj.__dict__.update(kwargs)
- if hasattr(obj, '_setup_query'):
- obj._setup_query()
- return obj
-
- def convert_values(self, value, field, connection):
- """Convert the database-returned value into a type that is consistent
- across database backends.
-
- By default, this defers to the underlying backend operations, but
- it can be overridden by Query classes for specific backends.
- """
- return connection.ops.convert_values(value, field)
-
- def resolve_aggregate(self, value, aggregate, connection):
- """Resolve the value of aggregates returned by the database to
- consistent (and reasonable) types.
-
- This is required because of the predisposition of certain backends
- to return Decimal and long types when they are not needed.
- """
- if value is None:
- if aggregate.is_ordinal:
- return 0
- # Return None as-is
- return value
- elif aggregate.is_ordinal:
- # Any ordinal aggregate (e.g., count) returns an int
- return int(value)
- elif aggregate.is_computed:
- # Any computed aggregate (e.g., avg) returns a float
- return float(value)
- else:
- # Return value depends on the type of the field being processed.
- return self.convert_values(value, aggregate.field, connection)
-
- def get_aggregation(self, using):
- """
- Returns the dictionary with the values of the existing aggregations.
- """
- if not self.aggregate_select:
- return {}
-
- # If there is a group by clause, aggregating does not add useful
- # information but retrieves only the first row. Aggregate
- # over the subquery instead.
- if self.group_by is not None:
- from django.db.models.sql.subqueries import AggregateQuery
- query = AggregateQuery(self.model)
-
- obj = self.clone()
-
- # Remove any aggregates marked for reduction from the subquery
- # and move them to the outer AggregateQuery.
- for alias, aggregate in self.aggregate_select.items():
- if aggregate.is_summary:
- query.aggregate_select[alias] = aggregate
- del obj.aggregate_select[alias]
-
- try:
- query.add_subquery(obj, using)
- except EmptyResultSet:
- return dict(
- (alias, None)
- for alias in query.aggregate_select
- )
- else:
- query = self
- self.select = []
- self.default_cols = False
- self.extra = {}
- self.remove_inherited_models()
-
- query.clear_ordering(True)
- query.clear_limits()
- query.select_related = False
- query.related_select_cols = []
- query.related_select_fields = []
-
- result = query.get_compiler(using).execute_sql(SINGLE)
- if result is None:
- result = [None for q in query.aggregate_select.items()]
-
- return dict([
- (alias, self.resolve_aggregate(val, aggregate, connection=connections[using]))
- for (alias, aggregate), val
- in zip(query.aggregate_select.items(), result)
- ])
-
- def get_count(self, using):
- """
- Performs a COUNT() query using the current filter constraints.
- """
- obj = self.clone()
- if len(self.select) > 1 or self.aggregate_select:
- # If a select clause exists, then the query has already started to
- # specify the columns that are to be returned.
- # In this case, we need to use a subquery to evaluate the count.
- from django.db.models.sql.subqueries import AggregateQuery
- subquery = obj
- subquery.clear_ordering(True)
- subquery.clear_limits()
-
- obj = AggregateQuery(obj.model)
- try:
- obj.add_subquery(subquery, using=using)
- except EmptyResultSet:
- # add_subquery evaluates the query, if it's an EmptyResultSet
- # then there are can be no results, and therefore there the
- # count is obviously 0
- return 0
-
- obj.add_count_column()
- number = obj.get_aggregation(using=using)[None]
-
- # Apply offset and limit constraints manually, since using LIMIT/OFFSET
- # in SQL (in variants that provide them) doesn't change the COUNT
- # output.
- number = max(0, number - self.low_mark)
- if self.high_mark is not None:
- number = min(number, self.high_mark - self.low_mark)
-
- return number
-
- def has_results(self, using):
- q = self.clone()
- q.add_extra({'a': 1}, None, None, None, None, None)
- q.select = []
- q.select_fields = []
- q.default_cols = False
- q.select_related = False
- q.set_extra_mask(('a',))
- q.set_aggregate_mask(())
- q.clear_ordering(True)
- q.set_limits(high=1)
- compiler = q.get_compiler(using=using)
- return bool(compiler.execute_sql(SINGLE))
-
- def combine(self, rhs, connector):
- """
- Merge the 'rhs' query into the current one (with any 'rhs' effects
- being applied *after* (that is, "to the right of") anything in the
- current query. 'rhs' is not modified during a call to this function.
-
- The 'connector' parameter describes how to connect filters from the
- 'rhs' query.
- """
- assert self.model == rhs.model, \
- "Cannot combine queries on two different base models."
- assert self.can_filter(), \
- "Cannot combine queries once a slice has been taken."
- assert self.distinct == rhs.distinct, \
- "Cannot combine a unique query with a non-unique query."
-
- self.remove_inherited_models()
- # Work out how to relabel the rhs aliases, if necessary.
- change_map = {}
- used = set()
- conjunction = (connector == AND)
- first = True
- for alias in rhs.tables:
- if not rhs.alias_refcount[alias]:
- # An unused alias.
- continue
- promote = (rhs.alias_map[alias][JOIN_TYPE] == self.LOUTER)
- new_alias = self.join(rhs.rev_join_map[alias],
- (conjunction and not first), used, promote, not conjunction)
- used.add(new_alias)
- change_map[alias] = new_alias
- first = False
-
- # So that we don't exclude valid results in an "or" query combination,
- # the first join that is exclusive to the lhs (self) must be converted
- # to an outer join.
- if not conjunction:
- for alias in self.tables[1:]:
- if self.alias_refcount[alias] == 1:
- self.promote_alias(alias, True)
- break
-
- # Now relabel a copy of the rhs where-clause and add it to the current
- # one.
- if rhs.where:
- w = deepcopy(rhs.where)
- w.relabel_aliases(change_map)
- if not self.where:
- # Since 'self' matches everything, add an explicit "include
- # everything" where-constraint so that connections between the
- # where clauses won't exclude valid results.
- self.where.add(EverythingNode(), AND)
- elif self.where:
- # rhs has an empty where clause.
- w = self.where_class()
- w.add(EverythingNode(), AND)
- else:
- w = self.where_class()
- self.where.add(w, connector)
-
- # Selection columns and extra extensions are those provided by 'rhs'.
- self.select = []
- for col in rhs.select:
- if isinstance(col, (list, tuple)):
- self.select.append((change_map.get(col[0], col[0]), col[1]))
- else:
- item = deepcopy(col)
- item.relabel_aliases(change_map)
- self.select.append(item)
- self.select_fields = rhs.select_fields[:]
-
- if connector == OR:
- # It would be nice to be able to handle this, but the queries don't
- # really make sense (or return consistent value sets). Not worth
- # the extra complexity when you can write a real query instead.
- if self.extra and rhs.extra:
- raise ValueError("When merging querysets using 'or', you "
- "cannot have extra(select=...) on both sides.")
- self.extra.update(rhs.extra)
- extra_select_mask = set()
- if self.extra_select_mask is not None:
- extra_select_mask.update(self.extra_select_mask)
- if rhs.extra_select_mask is not None:
- extra_select_mask.update(rhs.extra_select_mask)
- if extra_select_mask:
- self.set_extra_mask(extra_select_mask)
- self.extra_tables += rhs.extra_tables
-
- # Ordering uses the 'rhs' ordering, unless it has none, in which case
- # the current ordering is used.
- self.order_by = rhs.order_by and rhs.order_by[:] or self.order_by
- self.extra_order_by = rhs.extra_order_by or self.extra_order_by
-
- def deferred_to_data(self, target, callback):
- """
- Converts the self.deferred_loading data structure to an alternate data
- structure, describing the field that *will* be loaded. This is used to
- compute the columns to select from the database and also by the
- QuerySet class to work out which fields are being initialised on each
- model. Models that have all their fields included aren't mentioned in
- the result, only those that have field restrictions in place.
-
- The "target" parameter is the instance that is populated (in place).
- The "callback" is a function that is called whenever a (model, field)
- pair need to be added to "target". It accepts three parameters:
- "target", and the model and list of fields being added for that model.
- """
- field_names, defer = self.deferred_loading
- if not field_names:
- return
- columns = set()
- orig_opts = self.model._meta
- seen = {}
- must_include = {self.model: set([orig_opts.pk])}
- for field_name in field_names:
- parts = field_name.split(LOOKUP_SEP)
- cur_model = self.model
- opts = orig_opts
- for name in parts[:-1]:
- old_model = cur_model
- source = opts.get_field_by_name(name)[0]
- cur_model = opts.get_field_by_name(name)[0].rel.to
- opts = cur_model._meta
- # Even if we're "just passing through" this model, we must add
- # both the current model's pk and the related reference field
- # to the things we select.
- must_include[old_model].add(source)
- add_to_dict(must_include, cur_model, opts.pk)
- field, model, _, _ = opts.get_field_by_name(parts[-1])
- if model is None:
- model = cur_model
- add_to_dict(seen, model, field)
-
- if defer:
- # We need to load all fields for each model, except those that
- # appear in "seen" (for all models that appear in "seen"). The only
- # slight complexity here is handling fields that exist on parent
- # models.
- workset = {}
- for model, values in seen.iteritems():
- for field, m in model._meta.get_fields_with_model():
- if field in values:
- continue
- add_to_dict(workset, m or model, field)
- for model, values in must_include.iteritems():
- # If we haven't included a model in workset, we don't add the
- # corresponding must_include fields for that model, since an
- # empty set means "include all fields". That's why there's no
- # "else" branch here.
- if model in workset:
- workset[model].update(values)
- for model, values in workset.iteritems():
- callback(target, model, values)
- else:
- for model, values in must_include.iteritems():
- if model in seen:
- seen[model].update(values)
- else:
- # As we've passed through this model, but not explicitly
- # included any fields, we have to make sure it's mentioned
- # so that only the "must include" fields are pulled in.
- seen[model] = values
- # Now ensure that every model in the inheritance chain is mentioned
- # in the parent list. Again, it must be mentioned to ensure that
- # only "must include" fields are pulled in.
- for model in orig_opts.get_parent_list():
- if model not in seen:
- seen[model] = set()
- for model, values in seen.iteritems():
- callback(target, model, values)
-
-
- def deferred_to_columns_cb(self, target, model, fields):
- """
- Callback used by deferred_to_columns(). The "target" parameter should
- be a set instance.
- """
- table = model._meta.db_table
- if table not in target:
- target[table] = set()
- for field in fields:
- target[table].add(field.column)
-
-
- def table_alias(self, table_name, create=False):
- """
- Returns a table alias for the given table_name and whether this is a
- new alias or not.
-
- If 'create' is true, a new alias is always created. Otherwise, the
- most recently created alias for the table (if one exists) is reused.
- """
- current = self.table_map.get(table_name)
- if not create and current:
- alias = current[0]
- self.alias_refcount[alias] += 1
- return alias, False
-
- # Create a new alias for this table.
- if current:
- alias = '%s%d' % (self.alias_prefix, len(self.alias_map) + 1)
- current.append(alias)
- else:
- # The first occurence of a table uses the table name directly.
- alias = table_name
- self.table_map[alias] = [alias]
- self.alias_refcount[alias] = 1
- self.tables.append(alias)
- return alias, True
-
- def ref_alias(self, alias):
- """ Increases the reference count for this alias. """
- self.alias_refcount[alias] += 1
-
- def unref_alias(self, alias):
- """ Decreases the reference count for this alias. """
- self.alias_refcount[alias] -= 1
-
- def promote_alias(self, alias, unconditional=False):
- """
- Promotes the join type of an alias to an outer join if it's possible
- for the join to contain NULL values on the left. If 'unconditional' is
- False, the join is only promoted if it is nullable, otherwise it is
- always promoted.
-
- Returns True if the join was promoted.
- """
- if ((unconditional or self.alias_map[alias][NULLABLE]) and
- self.alias_map[alias][JOIN_TYPE] != self.LOUTER):
- data = list(self.alias_map[alias])
- data[JOIN_TYPE] = self.LOUTER
- self.alias_map[alias] = tuple(data)
- return True
- return False
-
- def promote_alias_chain(self, chain, must_promote=False):
- """
- Walks along a chain of aliases, promoting the first nullable join and
- any joins following that. If 'must_promote' is True, all the aliases in
- the chain are promoted.
- """
- for alias in chain:
- if self.promote_alias(alias, must_promote):
- must_promote = True
-
- def promote_unused_aliases(self, initial_refcounts, used_aliases):
- """
- Given a "before" copy of the alias_refcounts dictionary (as
- 'initial_refcounts') and a collection of aliases that may have been
- changed or created, works out which aliases have been created since
- then and which ones haven't been used and promotes all of those
- aliases, plus any children of theirs in the alias tree, to outer joins.
- """
- # FIXME: There's some (a lot of!) overlap with the similar OR promotion
- # in add_filter(). It's not quite identical, but is very similar. So
- # pulling out the common bits is something for later.
- considered = {}
- for alias in self.tables:
- if alias not in used_aliases:
- continue
- if (alias not in initial_refcounts or
- self.alias_refcount[alias] == initial_refcounts[alias]):
- parent = self.alias_map[alias][LHS_ALIAS]
- must_promote = considered.get(parent, False)
- promoted = self.promote_alias(alias, must_promote)
- considered[alias] = must_promote or promoted
-
- def change_aliases(self, change_map):
- """
- Changes the aliases in change_map (which maps old-alias -> new-alias),
- relabelling any references to them in select columns and the where
- clause.
- """
- assert set(change_map.keys()).intersection(set(change_map.values())) == set()
-
- # 1. Update references in "select" (normal columns plus aliases),
- # "group by", "where" and "having".
- self.where.relabel_aliases(change_map)
- self.having.relabel_aliases(change_map)
- for columns in [self.select, self.group_by or []]:
- for pos, col in enumerate(columns):
- if isinstance(col, (list, tuple)):
- old_alias = col[0]
- columns[pos] = (change_map.get(old_alias, old_alias), col[1])
- else:
- col.relabel_aliases(change_map)
- for mapping in [self.aggregates]:
- for key, col in mapping.items():
- if isinstance(col, (list, tuple)):
- old_alias = col[0]
- mapping[key] = (change_map.get(old_alias, old_alias), col[1])
- else:
- col.relabel_aliases(change_map)
-
- # 2. Rename the alias in the internal table/alias datastructures.
- for old_alias, new_alias in change_map.iteritems():
- alias_data = list(self.alias_map[old_alias])
- alias_data[RHS_ALIAS] = new_alias
-
- t = self.rev_join_map[old_alias]
- data = list(self.join_map[t])
- data[data.index(old_alias)] = new_alias
- self.join_map[t] = tuple(data)
- self.rev_join_map[new_alias] = t
- del self.rev_join_map[old_alias]
- self.alias_refcount[new_alias] = self.alias_refcount[old_alias]
- del self.alias_refcount[old_alias]
- self.alias_map[new_alias] = tuple(alias_data)
- del self.alias_map[old_alias]
-
- table_aliases = self.table_map[alias_data[TABLE_NAME]]
- for pos, alias in enumerate(table_aliases):
- if alias == old_alias:
- table_aliases[pos] = new_alias
- break
- for pos, alias in enumerate(self.tables):
- if alias == old_alias:
- self.tables[pos] = new_alias
- break
- for key, alias in self.included_inherited_models.items():
- if alias in change_map:
- self.included_inherited_models[key] = change_map[alias]
-
- # 3. Update any joins that refer to the old alias.
- for alias, data in self.alias_map.iteritems():
- lhs = data[LHS_ALIAS]
- if lhs in change_map:
- data = list(data)
- data[LHS_ALIAS] = change_map[lhs]
- self.alias_map[alias] = tuple(data)
-
- def bump_prefix(self, exceptions=()):
- """
- Changes the alias prefix to the next letter in the alphabet and
- relabels all the aliases. Even tables that previously had no alias will
- get an alias after this call (it's mostly used for nested queries and
- the outer query will already be using the non-aliased table name).
-
- Subclasses who create their own prefix should override this method to
- produce a similar result (a new prefix and relabelled aliases).
-
- The 'exceptions' parameter is a container that holds alias names which
- should not be changed.
- """
- current = ord(self.alias_prefix)
- assert current < ord('Z')
- prefix = chr(current + 1)
- self.alias_prefix = prefix
- change_map = {}
- for pos, alias in enumerate(self.tables):
- if alias in exceptions:
- continue
- new_alias = '%s%d' % (prefix, pos)
- change_map[alias] = new_alias
- self.tables[pos] = new_alias
- self.change_aliases(change_map)
-
- def get_initial_alias(self):
- """
- Returns the first alias for this query, after increasing its reference
- count.
- """
- if self.tables:
- alias = self.tables[0]
- self.ref_alias(alias)
- else:
- alias = self.join((None, self.model._meta.db_table, None, None))
- return alias
-
- def count_active_tables(self):
- """
- Returns the number of tables in this query with a non-zero reference
- count.
- """
- return len([1 for count in self.alias_refcount.itervalues() if count])
-
- def join(self, connection, always_create=False, exclusions=(),
- promote=False, outer_if_first=False, nullable=False, reuse=None):
- """
- Returns an alias for the join in 'connection', either reusing an
- existing alias for that join or creating a new one. 'connection' is a
- tuple (lhs, table, lhs_col, col) where 'lhs' is either an existing
- table alias or a table name. The join correspods to the SQL equivalent
- of::
-
- lhs.lhs_col = table.col
-
- If 'always_create' is True and 'reuse' is None, a new alias is always
- created, regardless of whether one already exists or not. If
- 'always_create' is True and 'reuse' is a set, an alias in 'reuse' that
- matches the connection will be returned, if possible. If
- 'always_create' is False, the first existing alias that matches the
- 'connection' is returned, if any. Otherwise a new join is created.
-
- If 'exclusions' is specified, it is something satisfying the container
- protocol ("foo in exclusions" must work) and specifies a list of
- aliases that should not be returned, even if they satisfy the join.
-
- If 'promote' is True, the join type for the alias will be LOUTER (if
- the alias previously existed, the join type will be promoted from INNER
- to LOUTER, if necessary).
-
- If 'outer_if_first' is True and a new join is created, it will have the
- LOUTER join type. This is used when joining certain types of querysets
- and Q-objects together.
-
- If 'nullable' is True, the join can potentially involve NULL values and
- is a candidate for promotion (to "left outer") when combining querysets.
- """
- lhs, table, lhs_col, col = connection
- if lhs in self.alias_map:
- lhs_table = self.alias_map[lhs][TABLE_NAME]
- else:
- lhs_table = lhs
-
- if reuse and always_create and table in self.table_map:
- # Convert the 'reuse' to case to be "exclude everything but the
- # reusable set, minus exclusions, for this table".
- exclusions = set(self.table_map[table]).difference(reuse).union(set(exclusions))
- always_create = False
- t_ident = (lhs_table, table, lhs_col, col)
- if not always_create:
- for alias in self.join_map.get(t_ident, ()):
- if alias not in exclusions:
- if lhs_table and not self.alias_refcount[self.alias_map[alias][LHS_ALIAS]]:
- # The LHS of this join tuple is no longer part of the
- # query, so skip this possibility.
- continue
- if self.alias_map[alias][LHS_ALIAS] != lhs:
- continue
- self.ref_alias(alias)
- if promote:
- self.promote_alias(alias)
- return alias
-
- # No reuse is possible, so we need a new alias.
- alias, _ = self.table_alias(table, True)
- if not lhs:
- # Not all tables need to be joined to anything. No join type
- # means the later columns are ignored.
- join_type = None
- elif promote or outer_if_first:
- join_type = self.LOUTER
- else:
- join_type = self.INNER
- join = (table, alias, join_type, lhs, lhs_col, col, nullable)
- self.alias_map[alias] = join
- if t_ident in self.join_map:
- self.join_map[t_ident] += (alias,)
- else:
- self.join_map[t_ident] = (alias,)
- self.rev_join_map[alias] = t_ident
- return alias
-
- def setup_inherited_models(self):
- """
- If the model that is the basis for this QuerySet inherits other models,
- we need to ensure that those other models have their tables included in
- the query.
-
- We do this as a separate step so that subclasses know which
- tables are going to be active in the query, without needing to compute
- all the select columns (this method is called from pre_sql_setup(),
- whereas column determination is a later part, and side-effect, of
- as_sql()).
- """
- opts = self.model._meta
- root_alias = self.tables[0]
- seen = {None: root_alias}
-
- # Skip all proxy to the root proxied model
- proxied_model = get_proxied_model(opts)
-
- for field, model in opts.get_fields_with_model():
- if model not in seen:
- if model is proxied_model:
- seen[model] = root_alias
- else:
- link_field = opts.get_ancestor_link(model)
- seen[model] = self.join((root_alias, model._meta.db_table,
- link_field.column, model._meta.pk.column))
- self.included_inherited_models = seen
-
- def remove_inherited_models(self):
- """
- Undoes the effects of setup_inherited_models(). Should be called
- whenever select columns (self.select) are set explicitly.
- """
- for key, alias in self.included_inherited_models.items():
- if key:
- self.unref_alias(alias)
- self.included_inherited_models = {}
-
-
- def add_aggregate(self, aggregate, model, alias, is_summary):
- """
- Adds a single aggregate expression to the Query
- """
- opts = model._meta
- field_list = aggregate.lookup.split(LOOKUP_SEP)
- if len(field_list) == 1 and aggregate.lookup in self.aggregates:
- # Aggregate is over an annotation
- field_name = field_list[0]
- col = field_name
- source = self.aggregates[field_name]
- if not is_summary:
- raise FieldError("Cannot compute %s('%s'): '%s' is an aggregate" % (
- aggregate.name, field_name, field_name))
- elif ((len(field_list) > 1) or
- (field_list[0] not in [i.name for i in opts.fields]) or
- self.group_by is None or
- not is_summary):
- # If:
- # - the field descriptor has more than one part (foo__bar), or
- # - the field descriptor is referencing an m2m/m2o field, or
- # - this is a reference to a model field (possibly inherited), or
- # - this is an annotation over a model field
- # then we need to explore the joins that are required.
-
- field, source, opts, join_list, last, _ = self.setup_joins(
- field_list, opts, self.get_initial_alias(), False)
-
- # Process the join chain to see if it can be trimmed
- col, _, join_list = self.trim_joins(source, join_list, last, False)
-
- # If the aggregate references a model or field that requires a join,
- # those joins must be LEFT OUTER - empty join rows must be returned
- # in order for zeros to be returned for those aggregates.
- for column_alias in join_list:
- self.promote_alias(column_alias, unconditional=True)
-
- col = (join_list[-1], col)
- else:
- # The simplest cases. No joins required -
- # just reference the provided column alias.
- field_name = field_list[0]
- source = opts.get_field(field_name)
- col = field_name
-
- # Add the aggregate to the query
- aggregate.add_to_query(self, alias, col=col, source=source, is_summary=is_summary)
-
- def add_filter(self, filter_expr, connector=AND, negate=False, trim=False,
- can_reuse=None, process_extras=True):
- """
- Add a single filter to the query. The 'filter_expr' is a pair:
- (filter_string, value). E.g. ('name__contains', 'fred')
-
- If 'negate' is True, this is an exclude() filter. It's important to
- note that this method does not negate anything in the where-clause
- object when inserting the filter constraints. This is because negated
- filters often require multiple calls to add_filter() and the negation
- should only happen once. So the caller is responsible for this (the
- caller will normally be add_q(), so that as an example).
-
- If 'trim' is True, we automatically trim the final join group (used
- internally when constructing nested queries).
-
- If 'can_reuse' is a set, we are processing a component of a
- multi-component filter (e.g. filter(Q1, Q2)). In this case, 'can_reuse'
- will be a set of table aliases that can be reused in this filter, even
- if we would otherwise force the creation of new aliases for a join
- (needed for nested Q-filters). The set is updated by this method.
-
- If 'process_extras' is set, any extra filters returned from the table
- joining process will be processed. This parameter is set to False
- during the processing of extra filters to avoid infinite recursion.
- """
- arg, value = filter_expr
- parts = arg.split(LOOKUP_SEP)
- if not parts:
- raise FieldError("Cannot parse keyword query %r" % arg)
-
- # Work out the lookup type and remove it from 'parts', if necessary.
- if len(parts) == 1 or parts[-1] not in self.query_terms:
- lookup_type = 'exact'
- else:
- lookup_type = parts.pop()
-
- # By default, this is a WHERE clause. If an aggregate is referenced
- # in the value, the filter will be promoted to a HAVING
- having_clause = False
-
- # Interpret '__exact=None' as the sql 'is NULL'; otherwise, reject all
- # uses of None as a query value.
- if value is None:
- if lookup_type != 'exact':
- raise ValueError("Cannot use None as a query value")
- lookup_type = 'isnull'
- value = True
- elif callable(value):
- value = value()
- elif hasattr(value, 'evaluate'):
- # If value is a query expression, evaluate it
- value = SQLEvaluator(value, self)
- having_clause = value.contains_aggregate
-
- for alias, aggregate in self.aggregates.items():
- if alias == parts[0]:
- entry = self.where_class()
- entry.add((aggregate, lookup_type, value), AND)
- if negate:
- entry.negate()
- self.having.add(entry, AND)
- return
-
- opts = self.get_meta()
- alias = self.get_initial_alias()
- allow_many = trim or not negate
-
- try:
- field, target, opts, join_list, last, extra_filters = self.setup_joins(
- parts, opts, alias, True, allow_many, can_reuse=can_reuse,
- negate=negate, process_extras=process_extras)
- except MultiJoin, e:
- self.split_exclude(filter_expr, LOOKUP_SEP.join(parts[:e.level]),
- can_reuse)
- return
-
- if (lookup_type == 'isnull' and value is True and not negate and
- len(join_list) > 1):
- # If the comparison is against NULL, we may need to use some left
- # outer joins when creating the join chain. This is only done when
- # needed, as it's less efficient at the database level.
- self.promote_alias_chain(join_list)
-
- # Process the join list to see if we can remove any inner joins from
- # the far end (fewer tables in a query is better).
- col, alias, join_list = self.trim_joins(target, join_list, last, trim)
-
- if connector == OR:
- # Some joins may need to be promoted when adding a new filter to a
- # disjunction. We walk the list of new joins and where it diverges
- # from any previous joins (ref count is 1 in the table list), we
- # make the new additions (and any existing ones not used in the new
- # join list) an outer join.
- join_it = iter(join_list)
- table_it = iter(self.tables)
- join_it.next(), table_it.next()
- table_promote = False
- join_promote = False
- for join in join_it:
- table = table_it.next()
- if join == table and self.alias_refcount[join] > 1:
- continue
- join_promote = self.promote_alias(join)
- if table != join:
- table_promote = self.promote_alias(table)
- break
- self.promote_alias_chain(join_it, join_promote)
- self.promote_alias_chain(table_it, table_promote)
-
-
- if having_clause:
- if (alias, col) not in self.group_by:
- self.group_by.append((alias, col))
- self.having.add((Constraint(alias, col, field), lookup_type, value),
- connector)
- else:
- self.where.add((Constraint(alias, col, field), lookup_type, value),
- connector)
-
- if negate:
- self.promote_alias_chain(join_list)
- if lookup_type != 'isnull':
- if len(join_list) > 1:
- for alias in join_list:
- if self.alias_map[alias][JOIN_TYPE] == self.LOUTER:
- j_col = self.alias_map[alias][RHS_JOIN_COL]
- entry = self.where_class()
- entry.add(
- (Constraint(alias, j_col, None), 'isnull', True),
- AND
- )
- entry.negate()
- self.where.add(entry, AND)
- break
- if not (lookup_type == 'in'
- and not hasattr(value, 'as_sql')
- and not hasattr(value, '_as_sql')
- and not value) and field.null:
- # Leaky abstraction artifact: We have to specifically
- # exclude the "foo__in=[]" case from this handling, because
- # it's short-circuited in the Where class.
- # We also need to handle the case where a subquery is provided
- self.where.add((Constraint(alias, col, None), 'isnull', False), AND)
-
- if can_reuse is not None:
- can_reuse.update(join_list)
- if process_extras:
- for filter in extra_filters:
- self.add_filter(filter, negate=negate, can_reuse=can_reuse,
- process_extras=False)
-
- def add_q(self, q_object, used_aliases=None):
- """
- Adds a Q-object to the current filter.
-
- Can also be used to add anything that has an 'add_to_query()' method.
- """
- if used_aliases is None:
- used_aliases = self.used_aliases
- if hasattr(q_object, 'add_to_query'):
- # Complex custom objects are responsible for adding themselves.
- q_object.add_to_query(self, used_aliases)
- else:
- if self.where and q_object.connector != AND and len(q_object) > 1:
- self.where.start_subtree(AND)
- subtree = True
- else:
- subtree = False
- connector = AND
- for child in q_object.children:
- if connector == OR:
- refcounts_before = self.alias_refcount.copy()
- self.where.start_subtree(connector)
- if isinstance(child, Node):
- self.add_q(child, used_aliases)
- else:
- self.add_filter(child, connector, q_object.negated,
- can_reuse=used_aliases)
- self.where.end_subtree()
- if connector == OR:
- # Aliases that were newly added or not used at all need to
- # be promoted to outer joins if they are nullable relations.
- # (they shouldn't turn the whole conditional into the empty
- # set just because they don't match anything).
- self.promote_unused_aliases(refcounts_before, used_aliases)
- connector = q_object.connector
- if q_object.negated:
- self.where.negate()
- if subtree:
- self.where.end_subtree()
- if self.filter_is_sticky:
- self.used_aliases = used_aliases
-
- def setup_joins(self, names, opts, alias, dupe_multis, allow_many=True,
- allow_explicit_fk=False, can_reuse=None, negate=False,
- process_extras=True):
- """
- Compute the necessary table joins for the passage through the fields
- given in 'names'. 'opts' is the Options class for the current model
- (which gives the table we are joining to), 'alias' is the alias for the
- table we are joining to. If dupe_multis is True, any many-to-many or
- many-to-one joins will always create a new alias (necessary for
- disjunctive filters). If can_reuse is not None, it's a list of aliases
- that can be reused in these joins (nothing else can be reused in this
- case). Finally, 'negate' is used in the same sense as for add_filter()
- -- it indicates an exclude() filter, or something similar. It is only
- passed in here so that it can be passed to a field's extra_filter() for
- customised behaviour.
-
- Returns the final field involved in the join, the target database
- column (used for any 'where' constraint), the final 'opts' value and the
- list of tables joined.
- """
- joins = [alias]
- last = [0]
- dupe_set = set()
- exclusions = set()
- extra_filters = []
- for pos, name in enumerate(names):
- try:
- exclusions.add(int_alias)
- except NameError:
- pass
- exclusions.add(alias)
- last.append(len(joins))
- if name == 'pk':
- name = opts.pk.name
- try:
- field, model, direct, m2m = opts.get_field_by_name(name)
- except FieldDoesNotExist:
- for f in opts.fields:
- if allow_explicit_fk and name == f.attname:
- # XXX: A hack to allow foo_id to work in values() for
- # backwards compatibility purposes. If we dropped that
- # feature, this could be removed.
- field, model, direct, m2m = opts.get_field_by_name(f.name)
- break
- else:
- names = opts.get_all_field_names() + self.aggregate_select.keys()
- raise FieldError("Cannot resolve keyword %r into field. "
- "Choices are: %s" % (name, ", ".join(names)))
-
- if not allow_many and (m2m or not direct):
- for alias in joins:
- self.unref_alias(alias)
- raise MultiJoin(pos + 1)
- if model:
- # The field lives on a base class of the current model.
- # Skip the chain of proxy to the concrete proxied model
- proxied_model = get_proxied_model(opts)
-
- for int_model in opts.get_base_chain(model):
- if int_model is proxied_model:
- opts = int_model._meta
- else:
- lhs_col = opts.parents[int_model].column
- dedupe = lhs_col in opts.duplicate_targets
- if dedupe:
- exclusions.update(self.dupe_avoidance.get(
- (id(opts), lhs_col), ()))
- dupe_set.add((opts, lhs_col))
- opts = int_model._meta
- alias = self.join((alias, opts.db_table, lhs_col,
- opts.pk.column), exclusions=exclusions)
- joins.append(alias)
- exclusions.add(alias)
- for (dupe_opts, dupe_col) in dupe_set:
- self.update_dupe_avoidance(dupe_opts, dupe_col,
- alias)
- cached_data = opts._join_cache.get(name)
- orig_opts = opts
- dupe_col = direct and field.column or field.field.column
- dedupe = dupe_col in opts.duplicate_targets
- if dupe_set or dedupe:
- if dedupe:
- dupe_set.add((opts, dupe_col))
- exclusions.update(self.dupe_avoidance.get((id(opts), dupe_col),
- ()))
-
- if process_extras and hasattr(field, 'extra_filters'):
- extra_filters.extend(field.extra_filters(names, pos, negate))
- if direct:
- if m2m:
- # Many-to-many field defined on the current model.
- if cached_data:
- (table1, from_col1, to_col1, table2, from_col2,
- to_col2, opts, target) = cached_data
- else:
- table1 = field.m2m_db_table()
- from_col1 = opts.pk.column
- to_col1 = field.m2m_column_name()
- opts = field.rel.to._meta
- table2 = opts.db_table
- from_col2 = field.m2m_reverse_name()
- to_col2 = opts.pk.column
- target = opts.pk
- orig_opts._join_cache[name] = (table1, from_col1,
- to_col1, table2, from_col2, to_col2, opts,
- target)
-
- int_alias = self.join((alias, table1, from_col1, to_col1),
- dupe_multis, exclusions, nullable=True,
- reuse=can_reuse)
- if int_alias == table2 and from_col2 == to_col2:
- joins.append(int_alias)
- alias = int_alias
- else:
- alias = self.join(
- (int_alias, table2, from_col2, to_col2),
- dupe_multis, exclusions, nullable=True,
- reuse=can_reuse)
- joins.extend([int_alias, alias])
- elif field.rel:
- # One-to-one or many-to-one field
- if cached_data:
- (table, from_col, to_col, opts, target) = cached_data
- else:
- opts = field.rel.to._meta
- target = field.rel.get_related_field()
- table = opts.db_table
- from_col = field.column
- to_col = target.column
- orig_opts._join_cache[name] = (table, from_col, to_col,
- opts, target)
-
- alias = self.join((alias, table, from_col, to_col),
- exclusions=exclusions, nullable=field.null)
- joins.append(alias)
- else:
- # Non-relation fields.
- target = field
- break
- else:
- orig_field = field
- field = field.field
- if m2m:
- # Many-to-many field defined on the target model.
- if cached_data:
- (table1, from_col1, to_col1, table2, from_col2,
- to_col2, opts, target) = cached_data
- else:
- table1 = field.m2m_db_table()
- from_col1 = opts.pk.column
- to_col1 = field.m2m_reverse_name()
- opts = orig_field.opts
- table2 = opts.db_table
- from_col2 = field.m2m_column_name()
- to_col2 = opts.pk.column
- target = opts.pk
- orig_opts._join_cache[name] = (table1, from_col1,
- to_col1, table2, from_col2, to_col2, opts,
- target)
-
- int_alias = self.join((alias, table1, from_col1, to_col1),
- dupe_multis, exclusions, nullable=True,
- reuse=can_reuse)
- alias = self.join((int_alias, table2, from_col2, to_col2),
- dupe_multis, exclusions, nullable=True,
- reuse=can_reuse)
- joins.extend([int_alias, alias])
- else:
- # One-to-many field (ForeignKey defined on the target model)
- if cached_data:
- (table, from_col, to_col, opts, target) = cached_data
- else:
- local_field = opts.get_field_by_name(
- field.rel.field_name)[0]
- opts = orig_field.opts
- table = opts.db_table
- from_col = local_field.column
- to_col = field.column
- target = opts.pk
- orig_opts._join_cache[name] = (table, from_col, to_col,
- opts, target)
-
- alias = self.join((alias, table, from_col, to_col),
- dupe_multis, exclusions, nullable=True,
- reuse=can_reuse)
- joins.append(alias)
-
- for (dupe_opts, dupe_col) in dupe_set:
- try:
- self.update_dupe_avoidance(dupe_opts, dupe_col, int_alias)
- except NameError:
- self.update_dupe_avoidance(dupe_opts, dupe_col, alias)
-
- if pos != len(names) - 1:
- if pos == len(names) - 2:
- raise FieldError("Join on field %r not permitted. Did you misspell %r for the lookup type?" % (name, names[pos + 1]))
- else:
- raise FieldError("Join on field %r not permitted." % name)
-
- return field, target, opts, joins, last, extra_filters
-
- def trim_joins(self, target, join_list, last, trim):
- """
- Sometimes joins at the end of a multi-table sequence can be trimmed. If
- the final join is against the same column as we are comparing against,
- and is an inner join, we can go back one step in a join chain and
- compare against the LHS of the join instead (and then repeat the
- optimization). The result, potentially, involves less table joins.
-
- The 'target' parameter is the final field being joined to, 'join_list'
- is the full list of join aliases.
-
- The 'last' list contains offsets into 'join_list', corresponding to
- each component of the filter. Many-to-many relations, for example, add
- two tables to the join list and we want to deal with both tables the
- same way, so 'last' has an entry for the first of the two tables and
- then the table immediately after the second table, in that case.
-
- The 'trim' parameter forces the final piece of the join list to be
- trimmed before anything. See the documentation of add_filter() for
- details about this.
-
- Returns the final active column and table alias and the new active
- join_list.
- """
- final = len(join_list)
- penultimate = last.pop()
- if penultimate == final:
- penultimate = last.pop()
- if trim and len(join_list) > 1:
- extra = join_list[penultimate:]
- join_list = join_list[:penultimate]
- final = penultimate
- penultimate = last.pop()
- col = self.alias_map[extra[0]][LHS_JOIN_COL]
- for alias in extra:
- self.unref_alias(alias)
- else:
- col = target.column
- alias = join_list[-1]
- while final > 1:
- join = self.alias_map[alias]
- if col != join[RHS_JOIN_COL] or join[JOIN_TYPE] != self.INNER:
- break
- self.unref_alias(alias)
- alias = join[LHS_ALIAS]
- col = join[LHS_JOIN_COL]
- join_list = join_list[:-1]
- final -= 1
- if final == penultimate:
- penultimate = last.pop()
- return col, alias, join_list
-
- def update_dupe_avoidance(self, opts, col, alias):
- """
- For a column that is one of multiple pointing to the same table, update
- the internal data structures to note that this alias shouldn't be used
- for those other columns.
- """
- ident = id(opts)
- for name in opts.duplicate_targets[col]:
- try:
- self.dupe_avoidance[ident, name].add(alias)
- except KeyError:
- self.dupe_avoidance[ident, name] = set([alias])
-
- def split_exclude(self, filter_expr, prefix, can_reuse):
- """
- When doing an exclude against any kind of N-to-many relation, we need
- to use a subquery. This method constructs the nested query, given the
- original exclude filter (filter_expr) and the portion up to the first
- N-to-many relation field.
- """
- query = Query(self.model)
- query.add_filter(filter_expr, can_reuse=can_reuse)
- query.bump_prefix()
- query.clear_ordering(True)
- query.set_start(prefix)
- self.add_filter(('%s__in' % prefix, query), negate=True, trim=True,
- can_reuse=can_reuse)
-
- # If there's more than one join in the inner query (before any initial
- # bits were trimmed -- which means the last active table is more than
- # two places into the alias list), we need to also handle the
- # possibility that the earlier joins don't match anything by adding a
- # comparison to NULL (e.g. in
- # Tag.objects.exclude(parent__parent__name='t1'), a tag with no parent
- # would otherwise be overlooked).
- active_positions = [pos for (pos, count) in
- enumerate(query.alias_refcount.itervalues()) if count]
- if active_positions[-1] > 1:
- self.add_filter(('%s__isnull' % prefix, False), negate=True,
- trim=True, can_reuse=can_reuse)
-
- def set_limits(self, low=None, high=None):
- """
- Adjusts the limits on the rows retrieved. We use low/high to set these,
- as it makes it more Pythonic to read and write. When the SQL query is
- created, they are converted to the appropriate offset and limit values.
-
- Any limits passed in here are applied relative to the existing
- constraints. So low is added to the current low value and both will be
- clamped to any existing high value.
- """
- if high is not None:
- if self.high_mark is not None:
- self.high_mark = min(self.high_mark, self.low_mark + high)
- else:
- self.high_mark = self.low_mark + high
- if low is not None:
- if self.high_mark is not None:
- self.low_mark = min(self.high_mark, self.low_mark + low)
- else:
- self.low_mark = self.low_mark + low
-
- def clear_limits(self):
- """
- Clears any existing limits.
- """
- self.low_mark, self.high_mark = 0, None
-
- def can_filter(self):
- """
- Returns True if adding filters to this instance is still possible.
-
- Typically, this means no limits or offsets have been put on the results.
- """
- return not self.low_mark and self.high_mark is None
-
- def clear_select_fields(self):
- """
- Clears the list of fields to select (but not extra_select columns).
- Some queryset types completely replace any existing list of select
- columns.
- """
- self.select = []
- self.select_fields = []
-
- def add_fields(self, field_names, allow_m2m=True):
- """
- Adds the given (model) fields to the select set. The field names are
- added in the order specified.
- """
- alias = self.get_initial_alias()
- opts = self.get_meta()
-
- try:
- for name in field_names:
- field, target, u2, joins, u3, u4 = self.setup_joins(
- name.split(LOOKUP_SEP), opts, alias, False, allow_m2m,
- True)
- final_alias = joins[-1]
- col = target.column
- if len(joins) > 1:
- join = self.alias_map[final_alias]
- if col == join[RHS_JOIN_COL]:
- self.unref_alias(final_alias)
- final_alias = join[LHS_ALIAS]
- col = join[LHS_JOIN_COL]
- joins = joins[:-1]
- self.promote_alias_chain(joins[1:])
- self.select.append((final_alias, col))
- self.select_fields.append(field)
- except MultiJoin:
- raise FieldError("Invalid field name: '%s'" % name)
- except FieldError:
- names = opts.get_all_field_names() + self.extra.keys() + self.aggregate_select.keys()
- names.sort()
- raise FieldError("Cannot resolve keyword %r into field. "
- "Choices are: %s" % (name, ", ".join(names)))
- self.remove_inherited_models()
-
- def add_ordering(self, *ordering):
- """
- Adds items from the 'ordering' sequence to the query's "order by"
- clause. These items are either field names (not column names) --
- possibly with a direction prefix ('-' or '?') -- or ordinals,
- corresponding to column positions in the 'select' list.
-
- If 'ordering' is empty, all ordering is cleared from the query.
- """
- errors = []
- for item in ordering:
- if not ORDER_PATTERN.match(item):
- errors.append(item)
- if errors:
- raise FieldError('Invalid order_by arguments: %s' % errors)
- if ordering:
- self.order_by.extend(ordering)
- else:
- self.default_ordering = False
-
- def clear_ordering(self, force_empty=False):
- """
- Removes any ordering settings. If 'force_empty' is True, there will be
- no ordering in the resulting query (not even the model's default).
- """
- self.order_by = []
- self.extra_order_by = ()
- if force_empty:
- self.default_ordering = False
-
- def set_group_by(self):
- """
- Expands the GROUP BY clause required by the query.
-
- This will usually be the set of all non-aggregate fields in the
- return data. If the database backend supports grouping by the
- primary key, and the query would be equivalent, the optimization
- will be made automatically.
- """
- self.group_by = []
-
- for sel in self.select:
- self.group_by.append(sel)
-
- def add_count_column(self):
- """
- Converts the query to do count(...) or count(distinct(pk)) in order to
- get its size.
- """
- if not self.distinct:
- if not self.select:
- count = self.aggregates_module.Count('*', is_summary=True)
- else:
- assert len(self.select) == 1, \
- "Cannot add count col with multiple cols in 'select': %r" % self.select
- count = self.aggregates_module.Count(self.select[0])
- else:
- opts = self.model._meta
- if not self.select:
- count = self.aggregates_module.Count((self.join((None, opts.db_table, None, None)), opts.pk.column),
- is_summary=True, distinct=True)
- else:
- # Because of SQL portability issues, multi-column, distinct
- # counts need a sub-query -- see get_count() for details.
- assert len(self.select) == 1, \
- "Cannot add count col with multiple cols in 'select'."
-
- count = self.aggregates_module.Count(self.select[0], distinct=True)
- # Distinct handling is done in Count(), so don't do it at this
- # level.
- self.distinct = False
-
- # Set only aggregate to be the count column.
- # Clear out the select cache to reflect the new unmasked aggregates.
- self.aggregates = {None: count}
- self.set_aggregate_mask(None)
- self.group_by = None
-
- def add_select_related(self, fields):
- """
- Sets up the select_related data structure so that we only select
- certain related models (as opposed to all models, when
- self.select_related=True).
- """
- field_dict = {}
- for field in fields:
- d = field_dict
- for part in field.split(LOOKUP_SEP):
- d = d.setdefault(part, {})
- self.select_related = field_dict
- self.related_select_cols = []
- self.related_select_fields = []
-
- def add_extra(self, select, select_params, where, params, tables, order_by):
- """
- Adds data to the various extra_* attributes for user-created additions
- to the query.
- """
- if select:
- # We need to pair any placeholder markers in the 'select'
- # dictionary with their parameters in 'select_params' so that
- # subsequent updates to the select dictionary also adjust the
- # parameters appropriately.
- select_pairs = SortedDict()
- if select_params:
- param_iter = iter(select_params)
- else:
- param_iter = iter([])
- for name, entry in select.items():
- entry = force_unicode(entry)
- entry_params = []
- pos = entry.find("%s")
- while pos != -1:
- entry_params.append(param_iter.next())
- pos = entry.find("%s", pos + 2)
- select_pairs[name] = (entry, entry_params)
- # This is order preserving, since self.extra_select is a SortedDict.
- self.extra.update(select_pairs)
- if where or params:
- self.where.add(ExtraWhere(where, params), AND)
- if tables:
- self.extra_tables += tuple(tables)
- if order_by:
- self.extra_order_by = order_by
-
- def clear_deferred_loading(self):
- """
- Remove any fields from the deferred loading set.
- """
- self.deferred_loading = (set(), True)
-
- def add_deferred_loading(self, field_names):
- """
- Add the given list of model field names to the set of fields to
- exclude from loading from the database when automatic column selection
- is done. The new field names are added to any existing field names that
- are deferred (or removed from any existing field names that are marked
- as the only ones for immediate loading).
- """
- # Fields on related models are stored in the literal double-underscore
- # format, so that we can use a set datastructure. We do the foo__bar
- # splitting and handling when computing the SQL colum names (as part of
- # get_columns()).
- existing, defer = self.deferred_loading
- if defer:
- # Add to existing deferred names.
- self.deferred_loading = existing.union(field_names), True
- else:
- # Remove names from the set of any existing "immediate load" names.
- self.deferred_loading = existing.difference(field_names), False
-
- def add_immediate_loading(self, field_names):
- """
- Add the given list of model field names to the set of fields to
- retrieve when the SQL is executed ("immediate loading" fields). The
- field names replace any existing immediate loading field names. If
- there are field names already specified for deferred loading, those
- names are removed from the new field_names before storing the new names
- for immediate loading. (That is, immediate loading overrides any
- existing immediate values, but respects existing deferrals.)
- """
- existing, defer = self.deferred_loading
- if defer:
- # Remove any existing deferred names from the current set before
- # setting the new names.
- self.deferred_loading = set(field_names).difference(existing), False
- else:
- # Replace any existing "immediate load" field names.
- self.deferred_loading = set(field_names), False
-
- def get_loaded_field_names(self):
- """
- If any fields are marked to be deferred, returns a dictionary mapping
- models to a set of names in those fields that will be loaded. If a
- model is not in the returned dictionary, none of it's fields are
- deferred.
-
- If no fields are marked for deferral, returns an empty dictionary.
- """
- collection = {}
- self.deferred_to_data(collection, self.get_loaded_field_names_cb)
- return collection
-
- def get_loaded_field_names_cb(self, target, model, fields):
- """
- Callback used by get_deferred_field_names().
- """
- target[model] = set([f.name for f in fields])
-
- def set_aggregate_mask(self, names):
- "Set the mask of aggregates that will actually be returned by the SELECT"
- if names is None:
- self.aggregate_select_mask = None
- else:
- self.aggregate_select_mask = set(names)
- self._aggregate_select_cache = None
-
- def set_extra_mask(self, names):
- """
- Set the mask of extra select items that will be returned by SELECT,
- we don't actually remove them from the Query since they might be used
- later
- """
- if names is None:
- self.extra_select_mask = None
- else:
- self.extra_select_mask = set(names)
- self._extra_select_cache = None
-
- def _aggregate_select(self):
- """The SortedDict of aggregate columns that are not masked, and should
- be used in the SELECT clause.
-
- This result is cached for optimization purposes.
- """
- if self._aggregate_select_cache is not None:
- return self._aggregate_select_cache
- elif self.aggregate_select_mask is not None:
- self._aggregate_select_cache = SortedDict([
- (k,v) for k,v in self.aggregates.items()
- if k in self.aggregate_select_mask
- ])
- return self._aggregate_select_cache
- else:
- return self.aggregates
- aggregate_select = property(_aggregate_select)
-
- def _extra_select(self):
- if self._extra_select_cache is not None:
- return self._extra_select_cache
- elif self.extra_select_mask is not None:
- self._extra_select_cache = SortedDict([
- (k,v) for k,v in self.extra.items()
- if k in self.extra_select_mask
- ])
- return self._extra_select_cache
- else:
- return self.extra
- extra_select = property(_extra_select)
-
- def set_start(self, start):
- """
- Sets the table from which to start joining. The start position is
- specified by the related attribute from the base model. This will
- automatically set to the select column to be the column linked from the
- previous table.
-
- This method is primarily for internal use and the error checking isn't
- as friendly as add_filter(). Mostly useful for querying directly
- against the join table of many-to-many relation in a subquery.
- """
- opts = self.model._meta
- alias = self.get_initial_alias()
- field, col, opts, joins, last, extra = self.setup_joins(
- start.split(LOOKUP_SEP), opts, alias, False)
- select_col = self.alias_map[joins[1]][LHS_JOIN_COL]
- select_alias = alias
-
- # The call to setup_joins added an extra reference to everything in
- # joins. Reverse that.
- for alias in joins:
- self.unref_alias(alias)
-
- # We might be able to trim some joins from the front of this query,
- # providing that we only traverse "always equal" connections (i.e. rhs
- # is *always* the same value as lhs).
- for alias in joins[1:]:
- join_info = self.alias_map[alias]
- if (join_info[LHS_JOIN_COL] != select_col
- or join_info[JOIN_TYPE] != self.INNER):
- break
- self.unref_alias(select_alias)
- select_alias = join_info[RHS_ALIAS]
- select_col = join_info[RHS_JOIN_COL]
- self.select = [(select_alias, select_col)]
- self.remove_inherited_models()
-
-
-def get_order_dir(field, default='ASC'):
- """
- Returns the field name and direction for an order specification. For
- example, '-foo' is returned as ('foo', 'DESC').
-
- The 'default' param is used to indicate which way no prefix (or a '+'
- prefix) should sort. The '-' prefix always sorts the opposite way.
- """
- dirn = ORDER_DIR[default]
- if field[0] == '-':
- return field[1:], dirn[1]
- return field, dirn[0]
-
-
-def setup_join_cache(sender, **kwargs):
- """
- The information needed to join between model fields is something that is
- invariant over the life of the model, so we cache it in the model's Options
- class, rather than recomputing it all the time.
-
- This method initialises the (empty) cache when the model is created.
- """
- sender._meta._join_cache = {}
-
-signals.class_prepared.connect(setup_join_cache)
-
-def add_to_dict(data, key, value):
- """
- A helper function to add "value" to the set of values for "key", whether or
- not "key" already exists.
- """
- if key in data:
- data[key].add(value)
- else:
- data[key] = set([value])
-
-def get_proxied_model(opts):
- int_opts = opts
- proxied_model = None
- while int_opts.proxy:
- proxied_model = int_opts.proxy_for_model
- int_opts = proxied_model._meta
- return proxied_model
diff --git a/parts/django/django/db/models/sql/subqueries.py b/parts/django/django/db/models/sql/subqueries.py
deleted file mode 100644
index a0bdc94..0000000
--- a/parts/django/django/db/models/sql/subqueries.py
+++ /dev/null
@@ -1,212 +0,0 @@
-"""
-Query subclasses which provide extra functionality beyond simple data retrieval.
-"""
-
-from django.core.exceptions import FieldError
-from django.db import connections
-from django.db.models.sql.constants import *
-from django.db.models.sql.datastructures import Date
-from django.db.models.sql.expressions import SQLEvaluator
-from django.db.models.sql.query import Query
-from django.db.models.sql.where import AND, Constraint
-
-
-__all__ = ['DeleteQuery', 'UpdateQuery', 'InsertQuery', 'DateQuery',
- 'AggregateQuery']
-
-class DeleteQuery(Query):
- """
- Delete queries are done through this class, since they are more constrained
- than general queries.
- """
-
- compiler = 'SQLDeleteCompiler'
-
- def do_query(self, table, where, using):
- self.tables = [table]
- self.where = where
- self.get_compiler(using).execute_sql(None)
-
- def delete_batch(self, pk_list, using):
- """
- Set up and execute delete queries for all the objects in pk_list.
-
- More than one physical query may be executed if there are a
- lot of values in pk_list.
- """
- for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
- where = self.where_class()
- field = self.model._meta.pk
- where.add((Constraint(None, field.column, field), 'in',
- pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]), AND)
- self.do_query(self.model._meta.db_table, where, using=using)
-
-class UpdateQuery(Query):
- """
- Represents an "update" SQL query.
- """
-
- compiler = 'SQLUpdateCompiler'
-
- def __init__(self, *args, **kwargs):
- super(UpdateQuery, self).__init__(*args, **kwargs)
- self._setup_query()
-
- def _setup_query(self):
- """
- Runs on initialization and after cloning. Any attributes that would
- normally be set in __init__ should go in here, instead, so that they
- are also set up after a clone() call.
- """
- self.values = []
- self.related_ids = None
- if not hasattr(self, 'related_updates'):
- self.related_updates = {}
-
- def clone(self, klass=None, **kwargs):
- return super(UpdateQuery, self).clone(klass,
- related_updates=self.related_updates.copy(), **kwargs)
-
-
- def clear_related(self, related_field, pk_list, using):
- """
- Set up and execute an update query that clears related entries for the
- keys in pk_list.
-
- This is used by the QuerySet.delete_objects() method.
- """
- for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
- self.where = self.where_class()
- f = self.model._meta.pk
- self.where.add((Constraint(None, f.column, f), 'in',
- pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]),
- AND)
- self.values = [(related_field, None, None)]
- self.get_compiler(using).execute_sql(None)
-
- def add_update_values(self, values):
- """
- Convert a dictionary of field name to value mappings into an update
- query. This is the entry point for the public update() method on
- querysets.
- """
- values_seq = []
- for name, val in values.iteritems():
- field, model, direct, m2m = self.model._meta.get_field_by_name(name)
- if not direct or m2m:
- raise FieldError('Cannot update model field %r (only non-relations and foreign keys permitted).' % field)
- if model:
- self.add_related_update(model, field, val)
- continue
- values_seq.append((field, model, val))
- return self.add_update_fields(values_seq)
-
- def add_update_fields(self, values_seq):
- """
- Turn a sequence of (field, model, value) triples into an update query.
- Used by add_update_values() as well as the "fast" update path when
- saving models.
- """
- self.values.extend(values_seq)
-
- def add_related_update(self, model, field, value):
- """
- Adds (name, value) to an update query for an ancestor model.
-
- Updates are coalesced so that we only run one update query per ancestor.
- """
- try:
- self.related_updates[model].append((field, None, value))
- except KeyError:
- self.related_updates[model] = [(field, None, value)]
-
- def get_related_updates(self):
- """
- Returns a list of query objects: one for each update required to an
- ancestor model. Each query will have the same filtering conditions as
- the current query but will only update a single table.
- """
- if not self.related_updates:
- return []
- result = []
- for model, values in self.related_updates.iteritems():
- query = UpdateQuery(model)
- query.values = values
- if self.related_ids is not None:
- query.add_filter(('pk__in', self.related_ids))
- result.append(query)
- return result
-
-class InsertQuery(Query):
- compiler = 'SQLInsertCompiler'
-
- def __init__(self, *args, **kwargs):
- super(InsertQuery, self).__init__(*args, **kwargs)
- self.columns = []
- self.values = []
- self.params = ()
-
- def clone(self, klass=None, **kwargs):
- extras = {
- 'columns': self.columns[:],
- 'values': self.values[:],
- 'params': self.params
- }
- extras.update(kwargs)
- return super(InsertQuery, self).clone(klass, **extras)
-
- def insert_values(self, insert_values, raw_values=False):
- """
- Set up the insert query from the 'insert_values' dictionary. The
- dictionary gives the model field names and their target values.
-
- If 'raw_values' is True, the values in the 'insert_values' dictionary
- are inserted directly into the query, rather than passed as SQL
- parameters. This provides a way to insert NULL and DEFAULT keywords
- into the query, for example.
- """
- placeholders, values = [], []
- for field, val in insert_values:
- placeholders.append((field, val))
- self.columns.append(field.column)
- values.append(val)
- if raw_values:
- self.values.extend([(None, v) for v in values])
- else:
- self.params += tuple(values)
- self.values.extend(placeholders)
-
-class DateQuery(Query):
- """
- A DateQuery is a normal query, except that it specifically selects a single
- date field. This requires some special handling when converting the results
- back to Python objects, so we put it in a separate class.
- """
-
- compiler = 'SQLDateCompiler'
-
- def add_date_select(self, field, lookup_type, order='ASC'):
- """
- Converts the query into a date extraction query.
- """
- result = self.setup_joins([field.name], self.get_meta(),
- self.get_initial_alias(), False)
- alias = result[3][-1]
- select = Date((alias, field.column), lookup_type)
- self.select = [select]
- self.select_fields = [None]
- self.select_related = False # See #7097.
- self.set_extra_mask([])
- self.distinct = True
- self.order_by = order == 'ASC' and [1] or [-1]
-
-class AggregateQuery(Query):
- """
- An AggregateQuery takes another query as a parameter to the FROM
- clause and only selects the elements in the provided list.
- """
-
- compiler = 'SQLAggregateCompiler'
-
- def add_subquery(self, query, using):
- self.subquery, self.sub_params = query.get_compiler(using).as_sql(with_col_aliases=True)
diff --git a/parts/django/django/db/models/sql/where.py b/parts/django/django/db/models/sql/where.py
deleted file mode 100644
index 2427a52..0000000
--- a/parts/django/django/db/models/sql/where.py
+++ /dev/null
@@ -1,345 +0,0 @@
-"""
-Code to manage the creation and SQL rendering of 'where' constraints.
-"""
-import datetime
-from itertools import repeat
-
-from django.utils import tree
-from django.db.models.fields import Field
-from django.db.models.query_utils import QueryWrapper
-from datastructures import EmptyResultSet, FullResultSet
-
-# Connection types
-AND = 'AND'
-OR = 'OR'
-
-class EmptyShortCircuit(Exception):
- """
- Internal exception used to indicate that a "matches nothing" node should be
- added to the where-clause.
- """
- pass
-
-class WhereNode(tree.Node):
- """
- Used to represent the SQL where-clause.
-
- The class is tied to the Query class that created it (in order to create
- the correct SQL).
-
- The children in this tree are usually either Q-like objects or lists of
- [table_alias, field_name, db_type, lookup_type, value_annotation,
- params]. However, a child could also be any class with as_sql() and
- relabel_aliases() methods.
- """
- default = AND
-
- def add(self, data, connector):
- """
- Add a node to the where-tree. If the data is a list or tuple, it is
- expected to be of the form (obj, lookup_type, value), where obj is
- a Constraint object, and is then slightly munged before being stored
- (to avoid storing any reference to field objects). Otherwise, the 'data'
- is stored unchanged and can be any class with an 'as_sql()' method.
- """
- if not isinstance(data, (list, tuple)):
- super(WhereNode, self).add(data, connector)
- return
-
- obj, lookup_type, value = data
- if hasattr(value, '__iter__') and hasattr(value, 'next'):
- # Consume any generators immediately, so that we can determine
- # emptiness and transform any non-empty values correctly.
- value = list(value)
-
- # The "annotation" parameter is used to pass auxilliary information
- # about the value(s) to the query construction. Specifically, datetime
- # and empty values need special handling. Other types could be used
- # here in the future (using Python types is suggested for consistency).
- if isinstance(value, datetime.datetime):
- annotation = datetime.datetime
- elif hasattr(value, 'value_annotation'):
- annotation = value.value_annotation
- else:
- annotation = bool(value)
-
- if hasattr(obj, "prepare"):
- value = obj.prepare(lookup_type, value)
- super(WhereNode, self).add((obj, lookup_type, annotation, value),
- connector)
- return
-
- super(WhereNode, self).add((obj, lookup_type, annotation, value),
- connector)
-
- def as_sql(self, qn, connection):
- """
- Returns the SQL version of the where clause and the value to be
- substituted in. Returns None, None if this node is empty.
-
- If 'node' is provided, that is the root of the SQL generation
- (generally not needed except by the internal implementation for
- recursion).
- """
- if not self.children:
- return None, []
- result = []
- result_params = []
- empty = True
- for child in self.children:
- try:
- if hasattr(child, 'as_sql'):
- sql, params = child.as_sql(qn=qn, connection=connection)
- else:
- # A leaf node in the tree.
- sql, params = self.make_atom(child, qn, connection)
-
- except EmptyResultSet:
- if self.connector == AND and not self.negated:
- # We can bail out early in this particular case (only).
- raise
- elif self.negated:
- empty = False
- continue
- except FullResultSet:
- if self.connector == OR:
- if self.negated:
- empty = True
- break
- # We match everything. No need for any constraints.
- return '', []
- if self.negated:
- empty = True
- continue
-
- empty = False
- if sql:
- result.append(sql)
- result_params.extend(params)
- if empty:
- raise EmptyResultSet
-
- conn = ' %s ' % self.connector
- sql_string = conn.join(result)
- if sql_string:
- if self.negated:
- sql_string = 'NOT (%s)' % sql_string
- elif len(self.children) != 1:
- sql_string = '(%s)' % sql_string
- return sql_string, result_params
-
- def make_atom(self, child, qn, connection):
- """
- Turn a tuple (table_alias, column_name, db_type, lookup_type,
- value_annot, params) into valid SQL.
-
- Returns the string for the SQL fragment and the parameters to use for
- it.
- """
- lvalue, lookup_type, value_annot, params_or_value = child
- if hasattr(lvalue, 'process'):
- try:
- lvalue, params = lvalue.process(lookup_type, params_or_value, connection)
- except EmptyShortCircuit:
- raise EmptyResultSet
- else:
- params = Field().get_db_prep_lookup(lookup_type, params_or_value,
- connection=connection, prepared=True)
- if isinstance(lvalue, tuple):
- # A direct database column lookup.
- field_sql = self.sql_for_columns(lvalue, qn, connection)
- else:
- # A smart object with an as_sql() method.
- field_sql = lvalue.as_sql(qn, connection)
-
- if value_annot is datetime.datetime:
- cast_sql = connection.ops.datetime_cast_sql()
- else:
- cast_sql = '%s'
-
- if hasattr(params, 'as_sql'):
- extra, params = params.as_sql(qn, connection)
- cast_sql = ''
- else:
- extra = ''
-
- if (len(params) == 1 and params[0] == '' and lookup_type == 'exact'
- and connection.features.interprets_empty_strings_as_nulls):
- lookup_type = 'isnull'
- value_annot = True
-
- if lookup_type in connection.operators:
- format = "%s %%s %%s" % (connection.ops.lookup_cast(lookup_type),)
- return (format % (field_sql,
- connection.operators[lookup_type] % cast_sql,
- extra), params)
-
- if lookup_type == 'in':
- if not value_annot:
- raise EmptyResultSet
- if extra:
- return ('%s IN %s' % (field_sql, extra), params)
- max_in_list_size = connection.ops.max_in_list_size()
- if max_in_list_size and len(params) > max_in_list_size:
- # Break up the params list into an OR of manageable chunks.
- in_clause_elements = ['(']
- for offset in xrange(0, len(params), max_in_list_size):
- if offset > 0:
- in_clause_elements.append(' OR ')
- in_clause_elements.append('%s IN (' % field_sql)
- group_size = min(len(params) - offset, max_in_list_size)
- param_group = ', '.join(repeat('%s', group_size))
- in_clause_elements.append(param_group)
- in_clause_elements.append(')')
- in_clause_elements.append(')')
- return ''.join(in_clause_elements), params
- else:
- return ('%s IN (%s)' % (field_sql,
- ', '.join(repeat('%s', len(params)))),
- params)
- elif lookup_type in ('range', 'year'):
- return ('%s BETWEEN %%s and %%s' % field_sql, params)
- elif lookup_type in ('month', 'day', 'week_day'):
- return ('%s = %%s' % connection.ops.date_extract_sql(lookup_type, field_sql),
- params)
- elif lookup_type == 'isnull':
- return ('%s IS %sNULL' % (field_sql,
- (not value_annot and 'NOT ' or '')), ())
- elif lookup_type == 'search':
- return (connection.ops.fulltext_search_sql(field_sql), params)
- elif lookup_type in ('regex', 'iregex'):
- return connection.ops.regex_lookup(lookup_type) % (field_sql, cast_sql), params
-
- raise TypeError('Invalid lookup_type: %r' % lookup_type)
-
- def sql_for_columns(self, data, qn, connection):
- """
- Returns the SQL fragment used for the left-hand side of a column
- constraint (for example, the "T1.foo" portion in the clause
- "WHERE ... T1.foo = 6").
- """
- table_alias, name, db_type = data
- if table_alias:
- lhs = '%s.%s' % (qn(table_alias), qn(name))
- else:
- lhs = qn(name)
- return connection.ops.field_cast_sql(db_type) % lhs
-
- def relabel_aliases(self, change_map, node=None):
- """
- Relabels the alias values of any children. 'change_map' is a dictionary
- mapping old (current) alias values to the new values.
- """
- if not node:
- node = self
- for pos, child in enumerate(node.children):
- if hasattr(child, 'relabel_aliases'):
- child.relabel_aliases(change_map)
- elif isinstance(child, tree.Node):
- self.relabel_aliases(change_map, child)
- elif isinstance(child, (list, tuple)):
- if isinstance(child[0], (list, tuple)):
- elt = list(child[0])
- if elt[0] in change_map:
- elt[0] = change_map[elt[0]]
- node.children[pos] = (tuple(elt),) + child[1:]
- else:
- child[0].relabel_aliases(change_map)
-
- # Check if the query value also requires relabelling
- if hasattr(child[3], 'relabel_aliases'):
- child[3].relabel_aliases(change_map)
-
-class EverythingNode(object):
- """
- A node that matches everything.
- """
-
- def as_sql(self, qn=None, connection=None):
- raise FullResultSet
-
- def relabel_aliases(self, change_map, node=None):
- return
-
-class NothingNode(object):
- """
- A node that matches nothing.
- """
- def as_sql(self, qn=None, connection=None):
- raise EmptyResultSet
-
- def relabel_aliases(self, change_map, node=None):
- return
-
-class ExtraWhere(object):
- def __init__(self, sqls, params):
- self.sqls = sqls
- self.params = params
-
- def as_sql(self, qn=None, connection=None):
- return " AND ".join(self.sqls), tuple(self.params or ())
-
-class Constraint(object):
- """
- An object that can be passed to WhereNode.add() and knows how to
- pre-process itself prior to including in the WhereNode.
- """
- def __init__(self, alias, col, field):
- self.alias, self.col, self.field = alias, col, field
-
- def __getstate__(self):
- """Save the state of the Constraint for pickling.
-
- Fields aren't necessarily pickleable, because they can have
- callable default values. So, instead of pickling the field
- store a reference so we can restore it manually
- """
- obj_dict = self.__dict__.copy()
- if self.field:
- obj_dict['model'] = self.field.model
- obj_dict['field_name'] = self.field.name
- del obj_dict['field']
- return obj_dict
-
- def __setstate__(self, data):
- """Restore the constraint """
- model = data.pop('model', None)
- field_name = data.pop('field_name', None)
- self.__dict__.update(data)
- if model is not None:
- self.field = model._meta.get_field(field_name)
- else:
- self.field = None
-
- def prepare(self, lookup_type, value):
- if self.field:
- return self.field.get_prep_lookup(lookup_type, value)
- return value
-
- def process(self, lookup_type, value, connection):
- """
- Returns a tuple of data suitable for inclusion in a WhereNode
- instance.
- """
- # Because of circular imports, we need to import this here.
- from django.db.models.base import ObjectDoesNotExist
- try:
- if self.field:
- params = self.field.get_db_prep_lookup(lookup_type, value,
- connection=connection, prepared=True)
- db_type = self.field.db_type(connection=connection)
- else:
- # This branch is used at times when we add a comparison to NULL
- # (we don't really want to waste time looking up the associated
- # field object at the calling location).
- params = Field().get_db_prep_lookup(lookup_type, value,
- connection=connection, prepared=True)
- db_type = None
- except ObjectDoesNotExist:
- raise EmptyShortCircuit
-
- return (self.alias, self.col, db_type), params
-
- def relabel_aliases(self, change_map):
- if self.alias in change_map:
- self.alias = change_map[self.alias]
diff --git a/parts/django/django/db/transaction.py b/parts/django/django/db/transaction.py
deleted file mode 100644
index af42fd5..0000000
--- a/parts/django/django/db/transaction.py
+++ /dev/null
@@ -1,351 +0,0 @@
-"""
-This module implements a transaction manager that can be used to define
-transaction handling in a request or view function. It is used by transaction
-control middleware and decorators.
-
-The transaction manager can be in managed or in auto state. Auto state means the
-system is using a commit-on-save strategy (actually it's more like
-commit-on-change). As soon as the .save() or .delete() (or related) methods are
-called, a commit is made.
-
-Managed transactions don't do those commits, but will need some kind of manual
-or implicit commits or rollbacks.
-"""
-
-try:
- import thread
-except ImportError:
- import dummy_thread as thread
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-from django.db import connections, DEFAULT_DB_ALIAS
-from django.conf import settings
-
-class TransactionManagementError(Exception):
- """
- This exception is thrown when something bad happens with transaction
- management.
- """
- pass
-
-# The states are dictionaries of dictionaries of lists. The key to the outer
-# dict is the current thread, and the key to the inner dictionary is the
-# connection alias and the list is handled as a stack of values.
-state = {}
-savepoint_state = {}
-
-# The dirty flag is set by *_unless_managed functions to denote that the
-# code under transaction management has changed things to require a
-# database commit.
-# This is a dictionary mapping thread to a dictionary mapping connection
-# alias to a boolean.
-dirty = {}
-
-def enter_transaction_management(managed=True, using=None):
- """
- Enters transaction management for a running thread. It must be balanced with
- the appropriate leave_transaction_management call, since the actual state is
- managed as a stack.
-
- The state and dirty flag are carried over from the surrounding block or
- from the settings, if there is no surrounding block (dirty is always false
- when no current block is running).
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- thread_ident = thread.get_ident()
- if thread_ident in state and state[thread_ident].get(using):
- state[thread_ident][using].append(state[thread_ident][using][-1])
- else:
- state.setdefault(thread_ident, {})
- state[thread_ident][using] = [settings.TRANSACTIONS_MANAGED]
- if thread_ident not in dirty or using not in dirty[thread_ident]:
- dirty.setdefault(thread_ident, {})
- dirty[thread_ident][using] = False
- connection._enter_transaction_management(managed)
-
-def leave_transaction_management(using=None):
- """
- Leaves transaction management for a running thread. A dirty flag is carried
- over to the surrounding block, as a commit will commit all changes, even
- those from outside. (Commits are on connection level.)
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- connection._leave_transaction_management(is_managed(using=using))
- thread_ident = thread.get_ident()
- if thread_ident in state and state[thread_ident].get(using):
- del state[thread_ident][using][-1]
- else:
- raise TransactionManagementError("This code isn't under transaction management")
- if dirty.get(thread_ident, {}).get(using, False):
- rollback(using=using)
- raise TransactionManagementError("Transaction managed block ended with pending COMMIT/ROLLBACK")
- dirty[thread_ident][using] = False
-
-def is_dirty(using=None):
- """
- Returns True if the current transaction requires a commit for changes to
- happen.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- return dirty.get(thread.get_ident(), {}).get(using, False)
-
-def set_dirty(using=None):
- """
- Sets a dirty flag for the current thread and code streak. This can be used
- to decide in a managed block of code to decide whether there are open
- changes waiting for commit.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- thread_ident = thread.get_ident()
- if thread_ident in dirty and using in dirty[thread_ident]:
- dirty[thread_ident][using] = True
- else:
- raise TransactionManagementError("This code isn't under transaction management")
-
-def set_clean(using=None):
- """
- Resets a dirty flag for the current thread and code streak. This can be used
- to decide in a managed block of code to decide whether a commit or rollback
- should happen.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- thread_ident = thread.get_ident()
- if thread_ident in dirty and using in dirty[thread_ident]:
- dirty[thread_ident][using] = False
- else:
- raise TransactionManagementError("This code isn't under transaction management")
- clean_savepoints(using=using)
-
-def clean_savepoints(using=None):
- if using is None:
- using = DEFAULT_DB_ALIAS
- thread_ident = thread.get_ident()
- if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
- del savepoint_state[thread_ident][using]
-
-def is_managed(using=None):
- """
- Checks whether the transaction manager is in manual or in auto state.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- thread_ident = thread.get_ident()
- if thread_ident in state and using in state[thread_ident]:
- if state[thread_ident][using]:
- return state[thread_ident][using][-1]
- return settings.TRANSACTIONS_MANAGED
-
-def managed(flag=True, using=None):
- """
- Puts the transaction manager into a manual state: managed transactions have
- to be committed explicitly by the user. If you switch off transaction
- management and there is a pending commit/rollback, the data will be
- commited.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- thread_ident = thread.get_ident()
- top = state.get(thread_ident, {}).get(using, None)
- if top:
- top[-1] = flag
- if not flag and is_dirty(using=using):
- connection._commit()
- set_clean(using=using)
- else:
- raise TransactionManagementError("This code isn't under transaction management")
-
-def commit_unless_managed(using=None):
- """
- Commits changes if the system is not in managed transaction mode.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- if not is_managed(using=using):
- connection._commit()
- clean_savepoints(using=using)
- else:
- set_dirty(using=using)
-
-def rollback_unless_managed(using=None):
- """
- Rolls back changes if the system is not in managed transaction mode.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- if not is_managed(using=using):
- connection._rollback()
- else:
- set_dirty(using=using)
-
-def commit(using=None):
- """
- Does the commit itself and resets the dirty flag.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- connection._commit()
- set_clean(using=using)
-
-def rollback(using=None):
- """
- This function does the rollback itself and resets the dirty flag.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- connection._rollback()
- set_clean(using=using)
-
-def savepoint(using=None):
- """
- Creates a savepoint (if supported and required by the backend) inside the
- current transaction. Returns an identifier for the savepoint that will be
- used for the subsequent rollback or commit.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- thread_ident = thread.get_ident()
- if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
- savepoint_state[thread_ident][using].append(None)
- else:
- savepoint_state.setdefault(thread_ident, {})
- savepoint_state[thread_ident][using] = [None]
- tid = str(thread_ident).replace('-', '')
- sid = "s%s_x%d" % (tid, len(savepoint_state[thread_ident][using]))
- connection._savepoint(sid)
- return sid
-
-def savepoint_rollback(sid, using=None):
- """
- Rolls back the most recent savepoint (if one exists). Does nothing if
- savepoints are not supported.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- thread_ident = thread.get_ident()
- if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
- connection._savepoint_rollback(sid)
-
-def savepoint_commit(sid, using=None):
- """
- Commits the most recent savepoint (if one exists). Does nothing if
- savepoints are not supported.
- """
- if using is None:
- using = DEFAULT_DB_ALIAS
- connection = connections[using]
- thread_ident = thread.get_ident()
- if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
- connection._savepoint_commit(sid)
-
-##############
-# DECORATORS #
-##############
-
-def autocommit(using=None):
- """
- Decorator that activates commit on save. This is Django's default behavior;
- this decorator is useful if you globally activated transaction management in
- your settings file and want the default behavior in some view functions.
- """
- def inner_autocommit(func, db=None):
- def _autocommit(*args, **kw):
- try:
- enter_transaction_management(managed=False, using=db)
- managed(False, using=db)
- return func(*args, **kw)
- finally:
- leave_transaction_management(using=db)
- return wraps(func)(_autocommit)
-
- # Note that although the first argument is *called* `using`, it
- # may actually be a function; @autocommit and @autocommit('foo')
- # are both allowed forms.
- if using is None:
- using = DEFAULT_DB_ALIAS
- if callable(using):
- return inner_autocommit(using, DEFAULT_DB_ALIAS)
- return lambda func: inner_autocommit(func, using)
-
-
-def commit_on_success(using=None):
- """
- This decorator activates commit on response. This way, if the view function
- runs successfully, a commit is made; if the viewfunc produces an exception,
- a rollback is made. This is one of the most common ways to do transaction
- control in Web apps.
- """
- def inner_commit_on_success(func, db=None):
- def _commit_on_success(*args, **kw):
- try:
- enter_transaction_management(using=db)
- managed(True, using=db)
- try:
- res = func(*args, **kw)
- except:
- # All exceptions must be handled here (even string ones).
- if is_dirty(using=db):
- rollback(using=db)
- raise
- else:
- if is_dirty(using=db):
- try:
- commit(using=db)
- except:
- rollback(using=db)
- raise
- return res
- finally:
- leave_transaction_management(using=db)
- return wraps(func)(_commit_on_success)
-
- # Note that although the first argument is *called* `using`, it
- # may actually be a function; @autocommit and @autocommit('foo')
- # are both allowed forms.
- if using is None:
- using = DEFAULT_DB_ALIAS
- if callable(using):
- return inner_commit_on_success(using, DEFAULT_DB_ALIAS)
- return lambda func: inner_commit_on_success(func, using)
-
-def commit_manually(using=None):
- """
- Decorator that activates manual transaction control. It just disables
- automatic transaction control and doesn't do any commit/rollback of its
- own -- it's up to the user to call the commit and rollback functions
- themselves.
- """
- def inner_commit_manually(func, db=None):
- def _commit_manually(*args, **kw):
- try:
- enter_transaction_management(using=db)
- managed(True, using=db)
- return func(*args, **kw)
- finally:
- leave_transaction_management(using=db)
-
- return wraps(func)(_commit_manually)
-
- # Note that although the first argument is *called* `using`, it
- # may actually be a function; @autocommit and @autocommit('foo')
- # are both allowed forms.
- if using is None:
- using = DEFAULT_DB_ALIAS
- if callable(using):
- return inner_commit_manually(using, DEFAULT_DB_ALIAS)
- return lambda func: inner_commit_manually(func, using)
diff --git a/parts/django/django/db/utils.py b/parts/django/django/db/utils.py
deleted file mode 100644
index 8ae8476..0000000
--- a/parts/django/django/db/utils.py
+++ /dev/null
@@ -1,170 +0,0 @@
-import inspect
-import os
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.utils.importlib import import_module
-
-
-DEFAULT_DB_ALIAS = 'default'
-
-# Define some exceptions that mirror the PEP249 interface.
-# We will rethrow any backend-specific errors using these
-# common wrappers
-class DatabaseError(Exception):
- pass
-
-class IntegrityError(DatabaseError):
- pass
-
-
-def load_backend(backend_name):
- try:
- module = import_module('.base', 'django.db.backends.%s' % backend_name)
- import warnings
- warnings.warn(
- "Short names for DATABASE_ENGINE are deprecated; prepend with 'django.db.backends.'",
- PendingDeprecationWarning
- )
- return module
- except ImportError, e:
- # Look for a fully qualified database backend name
- try:
- return import_module('.base', backend_name)
- except ImportError, e_user:
- # The database backend wasn't found. Display a helpful error message
- # listing all possible (built-in) database backends.
- backend_dir = os.path.join(os.path.dirname(__file__), 'backends')
- try:
- available_backends = [f for f in os.listdir(backend_dir)
- if os.path.isdir(os.path.join(backend_dir, f))
- and not f.startswith('.')]
- except EnvironmentError:
- available_backends = []
- available_backends.sort()
- if backend_name not in available_backends:
- error_msg = ("%r isn't an available database backend. \n" +
- "Try using django.db.backends.XXX, where XXX is one of:\n %s\n" +
- "Error was: %s") % \
- (backend_name, ", ".join(map(repr, available_backends)), e_user)
- raise ImproperlyConfigured(error_msg)
- else:
- raise # If there's some other error, this must be an error in Django itself.
-
-
-class ConnectionDoesNotExist(Exception):
- pass
-
-
-class ConnectionHandler(object):
- def __init__(self, databases):
- self.databases = databases
- self._connections = {}
-
- def ensure_defaults(self, alias):
- """
- Puts the defaults into the settings dictionary for a given connection
- where no settings is provided.
- """
- try:
- conn = self.databases[alias]
- except KeyError:
- raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias)
-
- conn.setdefault('ENGINE', 'django.db.backends.dummy')
- if conn['ENGINE'] == 'django.db.backends.' or not conn['ENGINE']:
- conn['ENGINE'] = 'django.db.backends.dummy'
- conn.setdefault('OPTIONS', {})
- conn.setdefault('TEST_CHARSET', None)
- conn.setdefault('TEST_COLLATION', None)
- conn.setdefault('TEST_NAME', None)
- conn.setdefault('TEST_MIRROR', None)
- conn.setdefault('TIME_ZONE', settings.TIME_ZONE)
- for setting in ('NAME', 'USER', 'PASSWORD', 'HOST', 'PORT'):
- conn.setdefault(setting, '')
-
- def __getitem__(self, alias):
- if alias in self._connections:
- return self._connections[alias]
-
- self.ensure_defaults(alias)
- db = self.databases[alias]
- backend = load_backend(db['ENGINE'])
- conn = backend.DatabaseWrapper(db, alias)
- self._connections[alias] = conn
- return conn
-
- def __iter__(self):
- return iter(self.databases)
-
- def all(self):
- return [self[alias] for alias in self]
-
-
-class ConnectionRouter(object):
- def __init__(self, routers):
- self.routers = []
- for r in routers:
- if isinstance(r, basestring):
- try:
- module_name, klass_name = r.rsplit('.', 1)
- module = import_module(module_name)
- except ImportError, e:
- raise ImproperlyConfigured('Error importing database router %s: "%s"' % (klass_name, e))
- try:
- router_class = getattr(module, klass_name)
- except AttributeError:
- raise ImproperlyConfigured('Module "%s" does not define a database router name "%s"' % (module, klass_name))
- else:
- router = router_class()
- else:
- router = r
- self.routers.append(router)
-
- def _router_func(action):
- def _route_db(self, model, **hints):
- chosen_db = None
- for router in self.routers:
- try:
- method = getattr(router, action)
- except AttributeError:
- # If the router doesn't have a method, skip to the next one.
- pass
- else:
- chosen_db = method(model, **hints)
- if chosen_db:
- return chosen_db
- try:
- return hints['instance']._state.db or DEFAULT_DB_ALIAS
- except KeyError:
- return DEFAULT_DB_ALIAS
- return _route_db
-
- db_for_read = _router_func('db_for_read')
- db_for_write = _router_func('db_for_write')
-
- def allow_relation(self, obj1, obj2, **hints):
- for router in self.routers:
- try:
- method = router.allow_relation
- except AttributeError:
- # If the router doesn't have a method, skip to the next one.
- pass
- else:
- allow = method(obj1, obj2, **hints)
- if allow is not None:
- return allow
- return obj1._state.db == obj2._state.db
-
- def allow_syncdb(self, db, model):
- for router in self.routers:
- try:
- method = router.allow_syncdb
- except AttributeError:
- # If the router doesn't have a method, skip to the next one.
- pass
- else:
- allow = method(db, model)
- if allow is not None:
- return allow
- return True
diff --git a/parts/django/django/dispatch/__init__.py b/parts/django/django/dispatch/__init__.py
deleted file mode 100644
index 0798acc..0000000
--- a/parts/django/django/dispatch/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-"""Multi-consumer multi-producer dispatching mechanism
-
-Originally based on pydispatch (BSD) http://pypi.python.org/pypi/PyDispatcher/2.0.1
-See license.txt for original license.
-
-Heavily modified for Django's purposes.
-"""
-
-from django.dispatch.dispatcher import Signal \ No newline at end of file
diff --git a/parts/django/django/dispatch/dispatcher.py b/parts/django/django/dispatch/dispatcher.py
deleted file mode 100644
index c0301cd..0000000
--- a/parts/django/django/dispatch/dispatcher.py
+++ /dev/null
@@ -1,256 +0,0 @@
-import weakref
-import threading
-
-from django.dispatch import saferef
-
-WEAKREF_TYPES = (weakref.ReferenceType, saferef.BoundMethodWeakref)
-
-def _make_id(target):
- if hasattr(target, 'im_func'):
- return (id(target.im_self), id(target.im_func))
- return id(target)
-
-class Signal(object):
- """
- Base class for all signals
-
- Internal attributes:
-
- receivers
- { receriverkey (id) : weakref(receiver) }
- """
-
- def __init__(self, providing_args=None):
- """
- Create a new signal.
-
- providing_args
- A list of the arguments this signal can pass along in a send() call.
- """
- self.receivers = []
- if providing_args is None:
- providing_args = []
- self.providing_args = set(providing_args)
- self.lock = threading.Lock()
-
- def connect(self, receiver, sender=None, weak=True, dispatch_uid=None):
- """
- Connect receiver to sender for signal.
-
- Arguments:
-
- receiver
- A function or an instance method which is to receive signals.
- Receivers must be hashable objects.
-
- If weak is True, then receiver must be weak-referencable (more
- precisely saferef.safeRef() must be able to create a reference
- to the receiver).
-
- Receivers must be able to accept keyword arguments.
-
- If receivers have a dispatch_uid attribute, the receiver will
- not be added if another receiver already exists with that
- dispatch_uid.
-
- sender
- The sender to which the receiver should respond. Must either be
- of type Signal, or None to receive events from any sender.
-
- weak
- Whether to use weak references to the receiver. By default, the
- module will attempt to use weak references to the receiver
- objects. If this parameter is false, then strong references will
- be used.
-
- dispatch_uid
- An identifier used to uniquely identify a particular instance of
- a receiver. This will usually be a string, though it may be
- anything hashable.
- """
- from django.conf import settings
-
- # If DEBUG is on, check that we got a good receiver
- if settings.DEBUG:
- import inspect
- assert callable(receiver), "Signal receivers must be callable."
-
- # Check for **kwargs
- # Not all callables are inspectable with getargspec, so we'll
- # try a couple different ways but in the end fall back on assuming
- # it is -- we don't want to prevent registration of valid but weird
- # callables.
- try:
- argspec = inspect.getargspec(receiver)
- except TypeError:
- try:
- argspec = inspect.getargspec(receiver.__call__)
- except (TypeError, AttributeError):
- argspec = None
- if argspec:
- assert argspec[2] is not None, \
- "Signal receivers must accept keyword arguments (**kwargs)."
-
- if dispatch_uid:
- lookup_key = (dispatch_uid, _make_id(sender))
- else:
- lookup_key = (_make_id(receiver), _make_id(sender))
-
- if weak:
- receiver = saferef.safeRef(receiver, onDelete=self._remove_receiver)
-
- self.lock.acquire()
- try:
- for r_key, _ in self.receivers:
- if r_key == lookup_key:
- break
- else:
- self.receivers.append((lookup_key, receiver))
- finally:
- self.lock.release()
-
- def disconnect(self, receiver=None, sender=None, weak=True, dispatch_uid=None):
- """
- Disconnect receiver from sender for signal.
-
- If weak references are used, disconnect need not be called. The receiver
- will be remove from dispatch automatically.
-
- Arguments:
-
- receiver
- The registered receiver to disconnect. May be none if
- dispatch_uid is specified.
-
- sender
- The registered sender to disconnect
-
- weak
- The weakref state to disconnect
-
- dispatch_uid
- the unique identifier of the receiver to disconnect
- """
- if dispatch_uid:
- lookup_key = (dispatch_uid, _make_id(sender))
- else:
- lookup_key = (_make_id(receiver), _make_id(sender))
-
- self.lock.acquire()
- try:
- for index in xrange(len(self.receivers)):
- (r_key, _) = self.receivers[index]
- if r_key == lookup_key:
- del self.receivers[index]
- break
- finally:
- self.lock.release()
-
- def send(self, sender, **named):
- """
- Send signal from sender to all connected receivers.
-
- If any receiver raises an error, the error propagates back through send,
- terminating the dispatch loop, so it is quite possible to not have all
- receivers called if a raises an error.
-
- Arguments:
-
- sender
- The sender of the signal Either a specific object or None.
-
- named
- Named arguments which will be passed to receivers.
-
- Returns a list of tuple pairs [(receiver, response), ... ].
- """
- responses = []
- if not self.receivers:
- return responses
-
- for receiver in self._live_receivers(_make_id(sender)):
- response = receiver(signal=self, sender=sender, **named)
- responses.append((receiver, response))
- return responses
-
- def send_robust(self, sender, **named):
- """
- Send signal from sender to all connected receivers catching errors.
-
- Arguments:
-
- sender
- The sender of the signal. Can be any python object (normally one
- registered with a connect if you actually want something to
- occur).
-
- named
- Named arguments which will be passed to receivers. These
- arguments must be a subset of the argument names defined in
- providing_args.
-
- Return a list of tuple pairs [(receiver, response), ... ]. May raise
- DispatcherKeyError.
-
- If any receiver raises an error (specifically any subclass of
- Exception), the error instance is returned as the result for that
- receiver.
- """
- responses = []
- if not self.receivers:
- return responses
-
- # Call each receiver with whatever arguments it can accept.
- # Return a list of tuple pairs [(receiver, response), ... ].
- for receiver in self._live_receivers(_make_id(sender)):
- try:
- response = receiver(signal=self, sender=sender, **named)
- except Exception, err:
- responses.append((receiver, err))
- else:
- responses.append((receiver, response))
- return responses
-
- def _live_receivers(self, senderkey):
- """
- Filter sequence of receivers to get resolved, live receivers.
-
- This checks for weak references and resolves them, then returning only
- live receivers.
- """
- none_senderkey = _make_id(None)
- receivers = []
-
- for (receiverkey, r_senderkey), receiver in self.receivers:
- if r_senderkey == none_senderkey or r_senderkey == senderkey:
- if isinstance(receiver, WEAKREF_TYPES):
- # Dereference the weak reference.
- receiver = receiver()
- if receiver is not None:
- receivers.append(receiver)
- else:
- receivers.append(receiver)
- return receivers
-
- def _remove_receiver(self, receiver):
- """
- Remove dead receivers from connections.
- """
-
- self.lock.acquire()
- try:
- to_remove = []
- for key, connected_receiver in self.receivers:
- if connected_receiver == receiver:
- to_remove.append(key)
- for key in to_remove:
- last_idx = len(self.receivers) - 1
- # enumerate in reverse order so that indexes are valid even
- # after we delete some items
- for idx, (r_key, _) in enumerate(reversed(self.receivers)):
- if r_key == key:
- del self.receivers[last_idx-idx]
- finally:
- self.lock.release()
-
-
diff --git a/parts/django/django/dispatch/license.txt b/parts/django/django/dispatch/license.txt
deleted file mode 100644
index 505090d..0000000
--- a/parts/django/django/dispatch/license.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-django.dispatch was originally forked from PyDispatcher.
-
-PyDispatcher License:
-
- Copyright (c) 2001-2003, Patrick K. O'Brien and Contributors
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- The name of Patrick K. O'Brien, or the name of any Contributor,
- may not be used to endorse or promote products derived from this
- software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/parts/django/django/dispatch/saferef.py b/parts/django/django/dispatch/saferef.py
deleted file mode 100644
index 8bcfd8a..0000000
--- a/parts/django/django/dispatch/saferef.py
+++ /dev/null
@@ -1,250 +0,0 @@
-"""
-"Safe weakrefs", originally from pyDispatcher.
-
-Provides a way to safely weakref any function, including bound methods (which
-aren't handled by the core weakref module).
-"""
-
-import weakref, traceback
-
-def safeRef(target, onDelete = None):
- """Return a *safe* weak reference to a callable target
-
- target -- the object to be weakly referenced, if it's a
- bound method reference, will create a BoundMethodWeakref,
- otherwise creates a simple weakref.
- onDelete -- if provided, will have a hard reference stored
- to the callable to be called after the safe reference
- goes out of scope with the reference object, (either a
- weakref or a BoundMethodWeakref) as argument.
- """
- if hasattr(target, 'im_self'):
- if target.im_self is not None:
- # Turn a bound method into a BoundMethodWeakref instance.
- # Keep track of these instances for lookup by disconnect().
- assert hasattr(target, 'im_func'), """safeRef target %r has im_self, but no im_func, don't know how to create reference"""%( target,)
- reference = get_bound_method_weakref(
- target=target,
- onDelete=onDelete
- )
- return reference
- if callable(onDelete):
- return weakref.ref(target, onDelete)
- else:
- return weakref.ref( target )
-
-class BoundMethodWeakref(object):
- """'Safe' and reusable weak references to instance methods
-
- BoundMethodWeakref objects provide a mechanism for
- referencing a bound method without requiring that the
- method object itself (which is normally a transient
- object) is kept alive. Instead, the BoundMethodWeakref
- object keeps weak references to both the object and the
- function which together define the instance method.
-
- Attributes:
- key -- the identity key for the reference, calculated
- by the class's calculateKey method applied to the
- target instance method
- deletionMethods -- sequence of callable objects taking
- single argument, a reference to this object which
- will be called when *either* the target object or
- target function is garbage collected (i.e. when
- this object becomes invalid). These are specified
- as the onDelete parameters of safeRef calls.
- weakSelf -- weak reference to the target object
- weakFunc -- weak reference to the target function
-
- Class Attributes:
- _allInstances -- class attribute pointing to all live
- BoundMethodWeakref objects indexed by the class's
- calculateKey(target) method applied to the target
- objects. This weak value dictionary is used to
- short-circuit creation so that multiple references
- to the same (object, function) pair produce the
- same BoundMethodWeakref instance.
-
- """
-
- _allInstances = weakref.WeakValueDictionary()
-
- def __new__( cls, target, onDelete=None, *arguments,**named ):
- """Create new instance or return current instance
-
- Basically this method of construction allows us to
- short-circuit creation of references to already-
- referenced instance methods. The key corresponding
- to the target is calculated, and if there is already
- an existing reference, that is returned, with its
- deletionMethods attribute updated. Otherwise the
- new instance is created and registered in the table
- of already-referenced methods.
- """
- key = cls.calculateKey(target)
- current =cls._allInstances.get(key)
- if current is not None:
- current.deletionMethods.append( onDelete)
- return current
- else:
- base = super( BoundMethodWeakref, cls).__new__( cls )
- cls._allInstances[key] = base
- base.__init__( target, onDelete, *arguments,**named)
- return base
-
- def __init__(self, target, onDelete=None):
- """Return a weak-reference-like instance for a bound method
-
- target -- the instance-method target for the weak
- reference, must have im_self and im_func attributes
- and be reconstructable via:
- target.im_func.__get__( target.im_self )
- which is true of built-in instance methods.
- onDelete -- optional callback which will be called
- when this weak reference ceases to be valid
- (i.e. either the object or the function is garbage
- collected). Should take a single argument,
- which will be passed a pointer to this object.
- """
- def remove(weak, self=self):
- """Set self.isDead to true when method or instance is destroyed"""
- methods = self.deletionMethods[:]
- del self.deletionMethods[:]
- try:
- del self.__class__._allInstances[ self.key ]
- except KeyError:
- pass
- for function in methods:
- try:
- if callable( function ):
- function( self )
- except Exception, e:
- try:
- traceback.print_exc()
- except AttributeError, err:
- print '''Exception during saferef %s cleanup function %s: %s'''%(
- self, function, e
- )
- self.deletionMethods = [onDelete]
- self.key = self.calculateKey( target )
- self.weakSelf = weakref.ref(target.im_self, remove)
- self.weakFunc = weakref.ref(target.im_func, remove)
- self.selfName = str(target.im_self)
- self.funcName = str(target.im_func.__name__)
-
- def calculateKey( cls, target ):
- """Calculate the reference key for this reference
-
- Currently this is a two-tuple of the id()'s of the
- target object and the target function respectively.
- """
- return (id(target.im_self),id(target.im_func))
- calculateKey = classmethod( calculateKey )
-
- def __str__(self):
- """Give a friendly representation of the object"""
- return """%s( %s.%s )"""%(
- self.__class__.__name__,
- self.selfName,
- self.funcName,
- )
-
- __repr__ = __str__
-
- def __nonzero__( self ):
- """Whether we are still a valid reference"""
- return self() is not None
-
- def __cmp__( self, other ):
- """Compare with another reference"""
- if not isinstance (other,self.__class__):
- return cmp( self.__class__, type(other) )
- return cmp( self.key, other.key)
-
- def __call__(self):
- """Return a strong reference to the bound method
-
- If the target cannot be retrieved, then will
- return None, otherwise returns a bound instance
- method for our object and function.
-
- Note:
- You may call this method any number of times,
- as it does not invalidate the reference.
- """
- target = self.weakSelf()
- if target is not None:
- function = self.weakFunc()
- if function is not None:
- return function.__get__(target)
- return None
-
-class BoundNonDescriptorMethodWeakref(BoundMethodWeakref):
- """A specialized BoundMethodWeakref, for platforms where instance methods
- are not descriptors.
-
- It assumes that the function name and the target attribute name are the
- same, instead of assuming that the function is a descriptor. This approach
- is equally fast, but not 100% reliable because functions can be stored on an
- attribute named differenty than the function's name such as in:
-
- class A: pass
- def foo(self): return "foo"
- A.bar = foo
-
- But this shouldn't be a common use case. So, on platforms where methods
- aren't descriptors (such as Jython) this implementation has the advantage
- of working in the most cases.
- """
- def __init__(self, target, onDelete=None):
- """Return a weak-reference-like instance for a bound method
-
- target -- the instance-method target for the weak
- reference, must have im_self and im_func attributes
- and be reconstructable via:
- target.im_func.__get__( target.im_self )
- which is true of built-in instance methods.
- onDelete -- optional callback which will be called
- when this weak reference ceases to be valid
- (i.e. either the object or the function is garbage
- collected). Should take a single argument,
- which will be passed a pointer to this object.
- """
- assert getattr(target.im_self, target.__name__) == target, \
- ("method %s isn't available as the attribute %s of %s" %
- (target, target.__name__, target.im_self))
- super(BoundNonDescriptorMethodWeakref, self).__init__(target, onDelete)
-
- def __call__(self):
- """Return a strong reference to the bound method
-
- If the target cannot be retrieved, then will
- return None, otherwise returns a bound instance
- method for our object and function.
-
- Note:
- You may call this method any number of times,
- as it does not invalidate the reference.
- """
- target = self.weakSelf()
- if target is not None:
- function = self.weakFunc()
- if function is not None:
- # Using curry() would be another option, but it erases the
- # "signature" of the function. That is, after a function is
- # curried, the inspect module can't be used to determine how
- # many arguments the function expects, nor what keyword
- # arguments it supports, and pydispatcher needs this
- # information.
- return getattr(target, function.__name__)
- return None
-
-def get_bound_method_weakref(target, onDelete):
- """Instantiates the appropiate BoundMethodWeakRef, depending on the details of
- the underlying class method implementation"""
- if hasattr(target, '__get__'):
- # target method is a descriptor, so the default implementation works:
- return BoundMethodWeakref(target=target, onDelete=onDelete)
- else:
- # no luck, use the alternative implementation:
- return BoundNonDescriptorMethodWeakref(target=target, onDelete=onDelete)
diff --git a/parts/django/django/forms/__init__.py b/parts/django/django/forms/__init__.py
deleted file mode 100644
index dc8b521..0000000
--- a/parts/django/django/forms/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-Django validation and HTML form handling.
-
-TODO:
- Default value for field
- Field labels
- Nestable Forms
- FatalValidationError -- short-circuits all other validators on a form
- ValidationWarning
- "This form field requires foo.js" and form.js_includes()
-"""
-
-from django.core.exceptions import ValidationError
-from widgets import *
-from fields import *
-from forms import *
-from models import *
diff --git a/parts/django/django/forms/extras/__init__.py b/parts/django/django/forms/extras/__init__.py
deleted file mode 100644
index a7f6a9b..0000000
--- a/parts/django/django/forms/extras/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from widgets import *
diff --git a/parts/django/django/forms/extras/widgets.py b/parts/django/django/forms/extras/widgets.py
deleted file mode 100644
index 7d05942..0000000
--- a/parts/django/django/forms/extras/widgets.py
+++ /dev/null
@@ -1,121 +0,0 @@
-"""
-Extra HTML Widget classes
-"""
-
-import time
-import datetime
-import re
-
-from django.forms.widgets import Widget, Select
-from django.utils import datetime_safe
-from django.utils.dates import MONTHS
-from django.utils.safestring import mark_safe
-from django.utils.formats import get_format
-from django.conf import settings
-
-__all__ = ('SelectDateWidget',)
-
-RE_DATE = re.compile(r'(\d{4})-(\d\d?)-(\d\d?)$')
-
-class SelectDateWidget(Widget):
- """
- A Widget that splits date input into three <select> boxes.
-
- This also serves as an example of a Widget that has more than one HTML
- element and hence implements value_from_datadict.
- """
- none_value = (0, '---')
- month_field = '%s_month'
- day_field = '%s_day'
- year_field = '%s_year'
-
- def __init__(self, attrs=None, years=None, required=True):
- # years is an optional list/tuple of years to use in the "year" select box.
- self.attrs = attrs or {}
- self.required = required
- if years:
- self.years = years
- else:
- this_year = datetime.date.today().year
- self.years = range(this_year, this_year+10)
-
- def render(self, name, value, attrs=None):
- try:
- year_val, month_val, day_val = value.year, value.month, value.day
- except AttributeError:
- year_val = month_val = day_val = None
- if isinstance(value, basestring):
- if settings.USE_L10N:
- try:
- input_format = get_format('DATE_INPUT_FORMATS')[0]
- # Python 2.4 compatibility:
- # v = datetime.datetime.strptime(value, input_format)
- # would be clearer, but datetime.strptime was added in
- # Python 2.5
- v = datetime.datetime(*(time.strptime(value, input_format)[0:6]))
- year_val, month_val, day_val = v.year, v.month, v.day
- except ValueError:
- pass
- else:
- match = RE_DATE.match(value)
- if match:
- year_val, month_val, day_val = [int(v) for v in match.groups()]
- choices = [(i, i) for i in self.years]
- year_html = self.create_select(name, self.year_field, value, year_val, choices)
- choices = MONTHS.items()
- month_html = self.create_select(name, self.month_field, value, month_val, choices)
- choices = [(i, i) for i in range(1, 32)]
- day_html = self.create_select(name, self.day_field, value, day_val, choices)
-
- format = get_format('DATE_FORMAT')
- escaped = False
- output = []
- for char in format:
- if escaped:
- escaped = False
- elif char == '\\':
- escaped = True
- elif char in 'Yy':
- output.append(year_html)
- elif char in 'bFMmNn':
- output.append(month_html)
- elif char in 'dj':
- output.append(day_html)
- return mark_safe(u'\n'.join(output))
-
- def id_for_label(self, id_):
- return '%s_month' % id_
- id_for_label = classmethod(id_for_label)
-
- def value_from_datadict(self, data, files, name):
- y = data.get(self.year_field % name)
- m = data.get(self.month_field % name)
- d = data.get(self.day_field % name)
- if y == m == d == "0":
- return None
- if y and m and d:
- if settings.USE_L10N:
- input_format = get_format('DATE_INPUT_FORMATS')[0]
- try:
- date_value = datetime.date(int(y), int(m), int(d))
- except ValueError:
- pass
- else:
- date_value = datetime_safe.new_date(date_value)
- return date_value.strftime(input_format)
- else:
- return '%s-%s-%s' % (y, m, d)
- return data.get(name, None)
-
- def create_select(self, name, field, value, val, choices):
- if 'id' in self.attrs:
- id_ = self.attrs['id']
- else:
- id_ = 'id_%s' % name
- if not (self.required and val):
- choices.insert(0, self.none_value)
- local_attrs = self.build_attrs(id=field % id_)
- s = Select(choices=choices)
- select_html = s.render(field % name, val, local_attrs)
- return select_html
-
diff --git a/parts/django/django/forms/fields.py b/parts/django/django/forms/fields.py
deleted file mode 100644
index 46bda94..0000000
--- a/parts/django/django/forms/fields.py
+++ /dev/null
@@ -1,898 +0,0 @@
-"""
-Field classes.
-"""
-
-import datetime
-import os
-import re
-import time
-import urlparse
-import warnings
-from decimal import Decimal, DecimalException
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.core.exceptions import ValidationError
-from django.core import validators
-import django.utils.copycompat as copy
-from django.utils import formats
-from django.utils.translation import ugettext_lazy as _
-from django.utils.encoding import smart_unicode, smart_str
-from django.utils.functional import lazy
-
-# Provide this import for backwards compatibility.
-from django.core.validators import EMPTY_VALUES
-
-from util import ErrorList
-from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, \
- FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, \
- DateInput, DateTimeInput, TimeInput, SplitDateTimeWidget, SplitHiddenDateTimeWidget
-
-__all__ = (
- 'Field', 'CharField', 'IntegerField',
- 'DEFAULT_DATE_INPUT_FORMATS', 'DateField',
- 'DEFAULT_TIME_INPUT_FORMATS', 'TimeField',
- 'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField', 'TimeField',
- 'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField',
- 'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField',
- 'ComboField', 'MultiValueField', 'FloatField', 'DecimalField',
- 'SplitDateTimeField', 'IPAddressField', 'FilePathField', 'SlugField',
- 'TypedChoiceField'
-)
-
-def en_format(name):
- """
- Helper function to stay backward compatible.
- """
- from django.conf.locale.en import formats
- warnings.warn(
- "`django.forms.fields.DEFAULT_%s` is deprecated; use `django.utils.formats.get_format('%s')` instead." % (name, name),
- PendingDeprecationWarning
- )
- return getattr(formats, name)
-
-DEFAULT_DATE_INPUT_FORMATS = lazy(lambda: en_format('DATE_INPUT_FORMATS'), tuple, list)()
-DEFAULT_TIME_INPUT_FORMATS = lazy(lambda: en_format('TIME_INPUT_FORMATS'), tuple, list)()
-DEFAULT_DATETIME_INPUT_FORMATS = lazy(lambda: en_format('DATETIME_INPUT_FORMATS'), tuple, list)()
-
-class Field(object):
- widget = TextInput # Default widget to use when rendering this type of Field.
- hidden_widget = HiddenInput # Default widget to use when rendering this as "hidden".
- default_validators = [] # Default set of validators
- default_error_messages = {
- 'required': _(u'This field is required.'),
- 'invalid': _(u'Enter a valid value.'),
- }
-
- # Tracks each time a Field instance is created. Used to retain order.
- creation_counter = 0
-
- def __init__(self, required=True, widget=None, label=None, initial=None,
- help_text=None, error_messages=None, show_hidden_initial=False,
- validators=[], localize=False):
- # required -- Boolean that specifies whether the field is required.
- # True by default.
- # widget -- A Widget class, or instance of a Widget class, that should
- # be used for this Field when displaying it. Each Field has a
- # default Widget that it'll use if you don't specify this. In
- # most cases, the default widget is TextInput.
- # label -- A verbose name for this field, for use in displaying this
- # field in a form. By default, Django will use a "pretty"
- # version of the form field name, if the Field is part of a
- # Form.
- # initial -- A value to use in this Field's initial display. This value
- # is *not* used as a fallback if data isn't given.
- # help_text -- An optional string to use as "help text" for this Field.
- # error_messages -- An optional dictionary to override the default
- # messages that the field will raise.
- # show_hidden_initial -- Boolean that specifies if it is needed to render a
- # hidden widget with initial value after widget.
- # validators -- List of addtional validators to use
- # localize -- Boolean that specifies if the field should be localized.
- if label is not None:
- label = smart_unicode(label)
- self.required, self.label, self.initial = required, label, initial
- self.show_hidden_initial = show_hidden_initial
- if help_text is None:
- self.help_text = u''
- else:
- self.help_text = smart_unicode(help_text)
- widget = widget or self.widget
- if isinstance(widget, type):
- widget = widget()
-
- # Trigger the localization machinery if needed.
- self.localize = localize
- if self.localize:
- widget.is_localized = True
-
- # Hook into self.widget_attrs() for any Field-specific HTML attributes.
- extra_attrs = self.widget_attrs(widget)
- if extra_attrs:
- widget.attrs.update(extra_attrs)
-
- self.widget = widget
-
- # Increase the creation counter, and save our local copy.
- self.creation_counter = Field.creation_counter
- Field.creation_counter += 1
-
- messages = {}
- for c in reversed(self.__class__.__mro__):
- messages.update(getattr(c, 'default_error_messages', {}))
- messages.update(error_messages or {})
- self.error_messages = messages
-
- self.validators = self.default_validators + validators
-
- def prepare_value(self, value):
- return value
-
- def to_python(self, value):
- return value
-
- def validate(self, value):
- if value in validators.EMPTY_VALUES and self.required:
- raise ValidationError(self.error_messages['required'])
-
- def run_validators(self, value):
- if value in validators.EMPTY_VALUES:
- return
- errors = []
- for v in self.validators:
- try:
- v(value)
- except ValidationError, e:
- if hasattr(e, 'code') and e.code in self.error_messages:
- message = self.error_messages[e.code]
- if e.params:
- message = message % e.params
- errors.append(message)
- else:
- errors.extend(e.messages)
- if errors:
- raise ValidationError(errors)
-
- def clean(self, value):
- """
- Validates the given value and returns its "cleaned" value as an
- appropriate Python object.
-
- Raises ValidationError for any errors.
- """
- value = self.to_python(value)
- self.validate(value)
- self.run_validators(value)
- return value
-
- def widget_attrs(self, widget):
- """
- Given a Widget instance (*not* a Widget class), returns a dictionary of
- any HTML attributes that should be added to the Widget, based on this
- Field.
- """
- return {}
-
- def __deepcopy__(self, memo):
- result = copy.copy(self)
- memo[id(self)] = result
- result.widget = copy.deepcopy(self.widget, memo)
- return result
-
-class CharField(Field):
- def __init__(self, max_length=None, min_length=None, *args, **kwargs):
- self.max_length, self.min_length = max_length, min_length
- super(CharField, self).__init__(*args, **kwargs)
- if min_length is not None:
- self.validators.append(validators.MinLengthValidator(min_length))
- if max_length is not None:
- self.validators.append(validators.MaxLengthValidator(max_length))
-
- def to_python(self, value):
- "Returns a Unicode object."
- if value in validators.EMPTY_VALUES:
- return u''
- return smart_unicode(value)
-
- def widget_attrs(self, widget):
- if self.max_length is not None and isinstance(widget, (TextInput, PasswordInput)):
- # The HTML attribute is maxlength, not max_length.
- return {'maxlength': str(self.max_length)}
-
-class IntegerField(Field):
- default_error_messages = {
- 'invalid': _(u'Enter a whole number.'),
- 'max_value': _(u'Ensure this value is less than or equal to %(limit_value)s.'),
- 'min_value': _(u'Ensure this value is greater than or equal to %(limit_value)s.'),
- }
-
- def __init__(self, max_value=None, min_value=None, *args, **kwargs):
- super(IntegerField, self).__init__(*args, **kwargs)
-
- if max_value is not None:
- self.validators.append(validators.MaxValueValidator(max_value))
- if min_value is not None:
- self.validators.append(validators.MinValueValidator(min_value))
-
- def to_python(self, value):
- """
- Validates that int() can be called on the input. Returns the result
- of int(). Returns None for empty values.
- """
- value = super(IntegerField, self).to_python(value)
- if value in validators.EMPTY_VALUES:
- return None
- if self.localize:
- value = formats.sanitize_separators(value)
- try:
- value = int(str(value))
- except (ValueError, TypeError):
- raise ValidationError(self.error_messages['invalid'])
- return value
-
-class FloatField(IntegerField):
- default_error_messages = {
- 'invalid': _(u'Enter a number.'),
- }
-
- def to_python(self, value):
- """
- Validates that float() can be called on the input. Returns the result
- of float(). Returns None for empty values.
- """
- value = super(IntegerField, self).to_python(value)
- if value in validators.EMPTY_VALUES:
- return None
- if self.localize:
- value = formats.sanitize_separators(value)
- try:
- value = float(value)
- except (ValueError, TypeError):
- raise ValidationError(self.error_messages['invalid'])
- return value
-
-class DecimalField(Field):
- default_error_messages = {
- 'invalid': _(u'Enter a number.'),
- 'max_value': _(u'Ensure this value is less than or equal to %(limit_value)s.'),
- 'min_value': _(u'Ensure this value is greater than or equal to %(limit_value)s.'),
- 'max_digits': _('Ensure that there are no more than %s digits in total.'),
- 'max_decimal_places': _('Ensure that there are no more than %s decimal places.'),
- 'max_whole_digits': _('Ensure that there are no more than %s digits before the decimal point.')
- }
-
- def __init__(self, max_value=None, min_value=None, max_digits=None, decimal_places=None, *args, **kwargs):
- self.max_digits, self.decimal_places = max_digits, decimal_places
- Field.__init__(self, *args, **kwargs)
-
- if max_value is not None:
- self.validators.append(validators.MaxValueValidator(max_value))
- if min_value is not None:
- self.validators.append(validators.MinValueValidator(min_value))
-
- def to_python(self, value):
- """
- Validates that the input is a decimal number. Returns a Decimal
- instance. Returns None for empty values. Ensures that there are no more
- than max_digits in the number, and no more than decimal_places digits
- after the decimal point.
- """
- if value in validators.EMPTY_VALUES:
- return None
- if self.localize:
- value = formats.sanitize_separators(value)
- value = smart_str(value).strip()
- try:
- value = Decimal(value)
- except DecimalException:
- raise ValidationError(self.error_messages['invalid'])
- return value
-
- def validate(self, value):
- super(DecimalField, self).validate(value)
- if value in validators.EMPTY_VALUES:
- return
- # Check for NaN, Inf and -Inf values. We can't compare directly for NaN,
- # since it is never equal to itself. However, NaN is the only value that
- # isn't equal to itself, so we can use this to identify NaN
- if value != value or value == Decimal("Inf") or value == Decimal("-Inf"):
- raise ValidationError(self.error_messages['invalid'])
- sign, digittuple, exponent = value.as_tuple()
- decimals = abs(exponent)
- # digittuple doesn't include any leading zeros.
- digits = len(digittuple)
- if decimals > digits:
- # We have leading zeros up to or past the decimal point. Count
- # everything past the decimal point as a digit. We do not count
- # 0 before the decimal point as a digit since that would mean
- # we would not allow max_digits = decimal_places.
- digits = decimals
- whole_digits = digits - decimals
-
- if self.max_digits is not None and digits > self.max_digits:
- raise ValidationError(self.error_messages['max_digits'] % self.max_digits)
- if self.decimal_places is not None and decimals > self.decimal_places:
- raise ValidationError(self.error_messages['max_decimal_places'] % self.decimal_places)
- if self.max_digits is not None and self.decimal_places is not None and whole_digits > (self.max_digits - self.decimal_places):
- raise ValidationError(self.error_messages['max_whole_digits'] % (self.max_digits - self.decimal_places))
- return value
-
-class DateField(Field):
- widget = DateInput
- default_error_messages = {
- 'invalid': _(u'Enter a valid date.'),
- }
-
- def __init__(self, input_formats=None, *args, **kwargs):
- super(DateField, self).__init__(*args, **kwargs)
- self.input_formats = input_formats
-
- def to_python(self, value):
- """
- Validates that the input can be converted to a date. Returns a Python
- datetime.date object.
- """
- if value in validators.EMPTY_VALUES:
- return None
- if isinstance(value, datetime.datetime):
- return value.date()
- if isinstance(value, datetime.date):
- return value
- for format in self.input_formats or formats.get_format('DATE_INPUT_FORMATS'):
- try:
- return datetime.date(*time.strptime(value, format)[:3])
- except ValueError:
- continue
- raise ValidationError(self.error_messages['invalid'])
-
-class TimeField(Field):
- widget = TimeInput
- default_error_messages = {
- 'invalid': _(u'Enter a valid time.')
- }
-
- def __init__(self, input_formats=None, *args, **kwargs):
- super(TimeField, self).__init__(*args, **kwargs)
- self.input_formats = input_formats
-
- def to_python(self, value):
- """
- Validates that the input can be converted to a time. Returns a Python
- datetime.time object.
- """
- if value in validators.EMPTY_VALUES:
- return None
- if isinstance(value, datetime.time):
- return value
- for format in self.input_formats or formats.get_format('TIME_INPUT_FORMATS'):
- try:
- return datetime.time(*time.strptime(value, format)[3:6])
- except ValueError:
- continue
- raise ValidationError(self.error_messages['invalid'])
-
-class DateTimeField(Field):
- widget = DateTimeInput
- default_error_messages = {
- 'invalid': _(u'Enter a valid date/time.'),
- }
-
- def __init__(self, input_formats=None, *args, **kwargs):
- super(DateTimeField, self).__init__(*args, **kwargs)
- self.input_formats = input_formats
-
- def to_python(self, value):
- """
- Validates that the input can be converted to a datetime. Returns a
- Python datetime.datetime object.
- """
- if value in validators.EMPTY_VALUES:
- return None
- if isinstance(value, datetime.datetime):
- return value
- if isinstance(value, datetime.date):
- return datetime.datetime(value.year, value.month, value.day)
- if isinstance(value, list):
- # Input comes from a SplitDateTimeWidget, for example. So, it's two
- # components: date and time.
- if len(value) != 2:
- raise ValidationError(self.error_messages['invalid'])
- if value[0] in validators.EMPTY_VALUES and value[1] in validators.EMPTY_VALUES:
- return None
- value = '%s %s' % tuple(value)
- for format in self.input_formats or formats.get_format('DATETIME_INPUT_FORMATS'):
- try:
- return datetime.datetime(*time.strptime(value, format)[:6])
- except ValueError:
- continue
- raise ValidationError(self.error_messages['invalid'])
-
-class RegexField(CharField):
- def __init__(self, regex, max_length=None, min_length=None, error_message=None, *args, **kwargs):
- """
- regex can be either a string or a compiled regular expression object.
- error_message is an optional error message to use, if
- 'Enter a valid value' is too generic for you.
- """
- # error_message is just kept for backwards compatibility:
- if error_message:
- error_messages = kwargs.get('error_messages') or {}
- error_messages['invalid'] = error_message
- kwargs['error_messages'] = error_messages
- super(RegexField, self).__init__(max_length, min_length, *args, **kwargs)
- if isinstance(regex, basestring):
- regex = re.compile(regex)
- self.regex = regex
- self.validators.append(validators.RegexValidator(regex=regex))
-
-class EmailField(CharField):
- default_error_messages = {
- 'invalid': _(u'Enter a valid e-mail address.'),
- }
- default_validators = [validators.validate_email]
-
- def clean(self, value):
- value = self.to_python(value).strip()
- return super(EmailField, self).clean(value)
-
-class FileField(Field):
- widget = FileInput
- default_error_messages = {
- 'invalid': _(u"No file was submitted. Check the encoding type on the form."),
- 'missing': _(u"No file was submitted."),
- 'empty': _(u"The submitted file is empty."),
- 'max_length': _(u'Ensure this filename has at most %(max)d characters (it has %(length)d).'),
- }
-
- def __init__(self, *args, **kwargs):
- self.max_length = kwargs.pop('max_length', None)
- super(FileField, self).__init__(*args, **kwargs)
-
- def to_python(self, data):
- if data in validators.EMPTY_VALUES:
- return None
-
- # UploadedFile objects should have name and size attributes.
- try:
- file_name = data.name
- file_size = data.size
- except AttributeError:
- raise ValidationError(self.error_messages['invalid'])
-
- if self.max_length is not None and len(file_name) > self.max_length:
- error_values = {'max': self.max_length, 'length': len(file_name)}
- raise ValidationError(self.error_messages['max_length'] % error_values)
- if not file_name:
- raise ValidationError(self.error_messages['invalid'])
- if not file_size:
- raise ValidationError(self.error_messages['empty'])
-
- return data
-
- def clean(self, data, initial=None):
- if not data and initial:
- return initial
- return super(FileField, self).clean(data)
-
-class ImageField(FileField):
- default_error_messages = {
- 'invalid_image': _(u"Upload a valid image. The file you uploaded was either not an image or a corrupted image."),
- }
-
- def to_python(self, data):
- """
- Checks that the file-upload field data contains a valid image (GIF, JPG,
- PNG, possibly others -- whatever the Python Imaging Library supports).
- """
- f = super(ImageField, self).to_python(data)
- if f is None:
- return None
-
- # Try to import PIL in either of the two ways it can end up installed.
- try:
- from PIL import Image
- except ImportError:
- import Image
-
- # We need to get a file object for PIL. We might have a path or we might
- # have to read the data into memory.
- if hasattr(data, 'temporary_file_path'):
- file = data.temporary_file_path()
- else:
- if hasattr(data, 'read'):
- file = StringIO(data.read())
- else:
- file = StringIO(data['content'])
-
- try:
- # load() is the only method that can spot a truncated JPEG,
- # but it cannot be called sanely after verify()
- trial_image = Image.open(file)
- trial_image.load()
-
- # Since we're about to use the file again we have to reset the
- # file object if possible.
- if hasattr(file, 'reset'):
- file.reset()
-
- # verify() is the only method that can spot a corrupt PNG,
- # but it must be called immediately after the constructor
- trial_image = Image.open(file)
- trial_image.verify()
- except ImportError:
- # Under PyPy, it is possible to import PIL. However, the underlying
- # _imaging C module isn't available, so an ImportError will be
- # raised. Catch and re-raise.
- raise
- except Exception: # Python Imaging Library doesn't recognize it as an image
- raise ValidationError(self.error_messages['invalid_image'])
- if hasattr(f, 'seek') and callable(f.seek):
- f.seek(0)
- return f
-
-class URLField(CharField):
- default_error_messages = {
- 'invalid': _(u'Enter a valid URL.'),
- 'invalid_link': _(u'This URL appears to be a broken link.'),
- }
-
- def __init__(self, max_length=None, min_length=None, verify_exists=False,
- validator_user_agent=validators.URL_VALIDATOR_USER_AGENT, *args, **kwargs):
- super(URLField, self).__init__(max_length, min_length, *args,
- **kwargs)
- self.validators.append(validators.URLValidator(verify_exists=verify_exists, validator_user_agent=validator_user_agent))
-
- def to_python(self, value):
- if value:
- url_fields = list(urlparse.urlsplit(value))
- if not url_fields[0]:
- # If no URL scheme given, assume http://
- url_fields[0] = 'http'
- if not url_fields[1]:
- # Assume that if no domain is provided, that the path segment
- # contains the domain.
- url_fields[1] = url_fields[2]
- url_fields[2] = ''
- # Rebuild the url_fields list, since the domain segment may now
- # contain the path too.
- value = urlparse.urlunsplit(url_fields)
- url_fields = list(urlparse.urlsplit(value))
- if not url_fields[2]:
- # the path portion may need to be added before query params
- url_fields[2] = '/'
- value = urlparse.urlunsplit(url_fields)
- return super(URLField, self).to_python(value)
-
-class BooleanField(Field):
- widget = CheckboxInput
-
- def to_python(self, value):
- """Returns a Python boolean object."""
- # Explicitly check for the string 'False', which is what a hidden field
- # will submit for False. Also check for '0', since this is what
- # RadioSelect will provide. Because bool("True") == bool('1') == True,
- # we don't need to handle that explicitly.
- if value in ('False', '0'):
- value = False
- else:
- value = bool(value)
- value = super(BooleanField, self).to_python(value)
- if not value and self.required:
- raise ValidationError(self.error_messages['required'])
- return value
-
-class NullBooleanField(BooleanField):
- """
- A field whose valid values are None, True and False. Invalid values are
- cleaned to None.
- """
- widget = NullBooleanSelect
-
- def to_python(self, value):
- """
- Explicitly checks for the string 'True' and 'False', which is what a
- hidden field will submit for True and False, and for '1' and '0', which
- is what a RadioField will submit. Unlike the Booleanfield we need to
- explicitly check for True, because we are not using the bool() function
- """
- if value in (True, 'True', '1'):
- return True
- elif value in (False, 'False', '0'):
- return False
- else:
- return None
-
- def validate(self, value):
- pass
-
-class ChoiceField(Field):
- widget = Select
- default_error_messages = {
- 'invalid_choice': _(u'Select a valid choice. %(value)s is not one of the available choices.'),
- }
-
- def __init__(self, choices=(), required=True, widget=None, label=None,
- initial=None, help_text=None, *args, **kwargs):
- super(ChoiceField, self).__init__(required=required, widget=widget, label=label,
- initial=initial, help_text=help_text, *args, **kwargs)
- self.choices = choices
-
- def _get_choices(self):
- return self._choices
-
- def _set_choices(self, value):
- # Setting choices also sets the choices on the widget.
- # choices can be any iterable, but we call list() on it because
- # it will be consumed more than once.
- self._choices = self.widget.choices = list(value)
-
- choices = property(_get_choices, _set_choices)
-
- def to_python(self, value):
- "Returns a Unicode object."
- if value in validators.EMPTY_VALUES:
- return u''
- return smart_unicode(value)
-
- def validate(self, value):
- """
- Validates that the input is in self.choices.
- """
- super(ChoiceField, self).validate(value)
- if value and not self.valid_value(value):
- raise ValidationError(self.error_messages['invalid_choice'] % {'value': value})
-
- def valid_value(self, value):
- "Check to see if the provided value is a valid choice"
- for k, v in self.choices:
- if isinstance(v, (list, tuple)):
- # This is an optgroup, so look inside the group for options
- for k2, v2 in v:
- if value == smart_unicode(k2):
- return True
- else:
- if value == smart_unicode(k):
- return True
- return False
-
-class TypedChoiceField(ChoiceField):
- def __init__(self, *args, **kwargs):
- self.coerce = kwargs.pop('coerce', lambda val: val)
- self.empty_value = kwargs.pop('empty_value', '')
- super(TypedChoiceField, self).__init__(*args, **kwargs)
-
- def to_python(self, value):
- """
- Validate that the value is in self.choices and can be coerced to the
- right type.
- """
- value = super(TypedChoiceField, self).to_python(value)
- super(TypedChoiceField, self).validate(value)
- if value == self.empty_value or value in validators.EMPTY_VALUES:
- return self.empty_value
- try:
- value = self.coerce(value)
- except (ValueError, TypeError, ValidationError):
- raise ValidationError(self.error_messages['invalid_choice'] % {'value': value})
- return value
-
- def validate(self, value):
- pass
-
-class MultipleChoiceField(ChoiceField):
- hidden_widget = MultipleHiddenInput
- widget = SelectMultiple
- default_error_messages = {
- 'invalid_choice': _(u'Select a valid choice. %(value)s is not one of the available choices.'),
- 'invalid_list': _(u'Enter a list of values.'),
- }
-
- def to_python(self, value):
- if not value:
- return []
- elif not isinstance(value, (list, tuple)):
- raise ValidationError(self.error_messages['invalid_list'])
- return [smart_unicode(val) for val in value]
-
- def validate(self, value):
- """
- Validates that the input is a list or tuple.
- """
- if self.required and not value:
- raise ValidationError(self.error_messages['required'])
- # Validate that each value in the value list is in self.choices.
- for val in value:
- if not self.valid_value(val):
- raise ValidationError(self.error_messages['invalid_choice'] % {'value': val})
-
-class ComboField(Field):
- """
- A Field whose clean() method calls multiple Field clean() methods.
- """
- def __init__(self, fields=(), *args, **kwargs):
- super(ComboField, self).__init__(*args, **kwargs)
- # Set 'required' to False on the individual fields, because the
- # required validation will be handled by ComboField, not by those
- # individual fields.
- for f in fields:
- f.required = False
- self.fields = fields
-
- def clean(self, value):
- """
- Validates the given value against all of self.fields, which is a
- list of Field instances.
- """
- super(ComboField, self).clean(value)
- for field in self.fields:
- value = field.clean(value)
- return value
-
-class MultiValueField(Field):
- """
- A Field that aggregates the logic of multiple Fields.
-
- Its clean() method takes a "decompressed" list of values, which are then
- cleaned into a single value according to self.fields. Each value in
- this list is cleaned by the corresponding field -- the first value is
- cleaned by the first field, the second value is cleaned by the second
- field, etc. Once all fields are cleaned, the list of clean values is
- "compressed" into a single value.
-
- Subclasses should not have to implement clean(). Instead, they must
- implement compress(), which takes a list of valid values and returns a
- "compressed" version of those values -- a single value.
-
- You'll probably want to use this with MultiWidget.
- """
- default_error_messages = {
- 'invalid': _(u'Enter a list of values.'),
- }
-
- def __init__(self, fields=(), *args, **kwargs):
- super(MultiValueField, self).__init__(*args, **kwargs)
- # Set 'required' to False on the individual fields, because the
- # required validation will be handled by MultiValueField, not by those
- # individual fields.
- for f in fields:
- f.required = False
- self.fields = fields
-
- def validate(self, value):
- pass
-
- def clean(self, value):
- """
- Validates every value in the given list. A value is validated against
- the corresponding Field in self.fields.
-
- For example, if this MultiValueField was instantiated with
- fields=(DateField(), TimeField()), clean() would call
- DateField.clean(value[0]) and TimeField.clean(value[1]).
- """
- clean_data = []
- errors = ErrorList()
- if not value or isinstance(value, (list, tuple)):
- if not value or not [v for v in value if v not in validators.EMPTY_VALUES]:
- if self.required:
- raise ValidationError(self.error_messages['required'])
- else:
- return self.compress([])
- else:
- raise ValidationError(self.error_messages['invalid'])
- for i, field in enumerate(self.fields):
- try:
- field_value = value[i]
- except IndexError:
- field_value = None
- if self.required and field_value in validators.EMPTY_VALUES:
- raise ValidationError(self.error_messages['required'])
- try:
- clean_data.append(field.clean(field_value))
- except ValidationError, e:
- # Collect all validation errors in a single list, which we'll
- # raise at the end of clean(), rather than raising a single
- # exception for the first error we encounter.
- errors.extend(e.messages)
- if errors:
- raise ValidationError(errors)
-
- out = self.compress(clean_data)
- self.validate(out)
- return out
-
- def compress(self, data_list):
- """
- Returns a single value for the given list of values. The values can be
- assumed to be valid.
-
- For example, if this MultiValueField was instantiated with
- fields=(DateField(), TimeField()), this might return a datetime
- object created by combining the date and time in data_list.
- """
- raise NotImplementedError('Subclasses must implement this method.')
-
-class FilePathField(ChoiceField):
- def __init__(self, path, match=None, recursive=False, required=True,
- widget=None, label=None, initial=None, help_text=None,
- *args, **kwargs):
- self.path, self.match, self.recursive = path, match, recursive
- super(FilePathField, self).__init__(choices=(), required=required,
- widget=widget, label=label, initial=initial, help_text=help_text,
- *args, **kwargs)
-
- if self.required:
- self.choices = []
- else:
- self.choices = [("", "---------")]
-
- if self.match is not None:
- self.match_re = re.compile(self.match)
-
- if recursive:
- for root, dirs, files in sorted(os.walk(self.path)):
- for f in files:
- if self.match is None or self.match_re.search(f):
- f = os.path.join(root, f)
- self.choices.append((f, f.replace(path, "", 1)))
- else:
- try:
- for f in sorted(os.listdir(self.path)):
- full_file = os.path.join(self.path, f)
- if os.path.isfile(full_file) and (self.match is None or self.match_re.search(f)):
- self.choices.append((full_file, f))
- except OSError:
- pass
-
- self.widget.choices = self.choices
-
-class SplitDateTimeField(MultiValueField):
- widget = SplitDateTimeWidget
- hidden_widget = SplitHiddenDateTimeWidget
- default_error_messages = {
- 'invalid_date': _(u'Enter a valid date.'),
- 'invalid_time': _(u'Enter a valid time.'),
- }
-
- def __init__(self, input_date_formats=None, input_time_formats=None, *args, **kwargs):
- errors = self.default_error_messages.copy()
- if 'error_messages' in kwargs:
- errors.update(kwargs['error_messages'])
- localize = kwargs.get('localize', False)
- fields = (
- DateField(input_formats=input_date_formats,
- error_messages={'invalid': errors['invalid_date']},
- localize=localize),
- TimeField(input_formats=input_time_formats,
- error_messages={'invalid': errors['invalid_time']},
- localize=localize),
- )
- super(SplitDateTimeField, self).__init__(fields, *args, **kwargs)
-
- def compress(self, data_list):
- if data_list:
- # Raise a validation error if time or date is empty
- # (possible if SplitDateTimeField has required=False).
- if data_list[0] in validators.EMPTY_VALUES:
- raise ValidationError(self.error_messages['invalid_date'])
- if data_list[1] in validators.EMPTY_VALUES:
- raise ValidationError(self.error_messages['invalid_time'])
- return datetime.datetime.combine(*data_list)
- return None
-
-
-class IPAddressField(CharField):
- default_error_messages = {
- 'invalid': _(u'Enter a valid IPv4 address.'),
- }
- default_validators = [validators.validate_ipv4_address]
-
-
-class SlugField(CharField):
- default_error_messages = {
- 'invalid': _(u"Enter a valid 'slug' consisting of letters, numbers,"
- u" underscores or hyphens."),
- }
- default_validators = [validators.validate_slug]
diff --git a/parts/django/django/forms/forms.py b/parts/django/django/forms/forms.py
deleted file mode 100644
index 46e97ef..0000000
--- a/parts/django/django/forms/forms.py
+++ /dev/null
@@ -1,520 +0,0 @@
-"""
-Form classes
-"""
-
-from django.core.exceptions import ValidationError
-from django.utils.copycompat import deepcopy
-from django.utils.datastructures import SortedDict
-from django.utils.html import conditional_escape
-from django.utils.encoding import StrAndUnicode, smart_unicode, force_unicode
-from django.utils.safestring import mark_safe
-
-from fields import Field, FileField
-from widgets import Media, media_property, TextInput, Textarea
-from util import flatatt, ErrorDict, ErrorList
-
-__all__ = ('BaseForm', 'Form')
-
-NON_FIELD_ERRORS = '__all__'
-
-def pretty_name(name):
- """Converts 'first_name' to 'First name'"""
- if not name:
- return u''
- return name.replace('_', ' ').capitalize()
-
-def get_declared_fields(bases, attrs, with_base_fields=True):
- """
- Create a list of form field instances from the passed in 'attrs', plus any
- similar fields on the base classes (in 'bases'). This is used by both the
- Form and ModelForm metclasses.
-
- If 'with_base_fields' is True, all fields from the bases are used.
- Otherwise, only fields in the 'declared_fields' attribute on the bases are
- used. The distinction is useful in ModelForm subclassing.
- Also integrates any additional media definitions
- """
- fields = [(field_name, attrs.pop(field_name)) for field_name, obj in attrs.items() if isinstance(obj, Field)]
- fields.sort(lambda x, y: cmp(x[1].creation_counter, y[1].creation_counter))
-
- # If this class is subclassing another Form, add that Form's fields.
- # Note that we loop over the bases in *reverse*. This is necessary in
- # order to preserve the correct order of fields.
- if with_base_fields:
- for base in bases[::-1]:
- if hasattr(base, 'base_fields'):
- fields = base.base_fields.items() + fields
- else:
- for base in bases[::-1]:
- if hasattr(base, 'declared_fields'):
- fields = base.declared_fields.items() + fields
-
- return SortedDict(fields)
-
-class DeclarativeFieldsMetaclass(type):
- """
- Metaclass that converts Field attributes to a dictionary called
- 'base_fields', taking into account parent class 'base_fields' as well.
- """
- def __new__(cls, name, bases, attrs):
- attrs['base_fields'] = get_declared_fields(bases, attrs)
- new_class = super(DeclarativeFieldsMetaclass,
- cls).__new__(cls, name, bases, attrs)
- if 'media' not in attrs:
- new_class.media = media_property(new_class)
- return new_class
-
-class BaseForm(StrAndUnicode):
- # This is the main implementation of all the Form logic. Note that this
- # class is different than Form. See the comments by the Form class for more
- # information. Any improvements to the form API should be made to *this*
- # class, not to the Form class.
- def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- initial=None, error_class=ErrorList, label_suffix=':',
- empty_permitted=False):
- self.is_bound = data is not None or files is not None
- self.data = data or {}
- self.files = files or {}
- self.auto_id = auto_id
- self.prefix = prefix
- self.initial = initial or {}
- self.error_class = error_class
- self.label_suffix = label_suffix
- self.empty_permitted = empty_permitted
- self._errors = None # Stores the errors after clean() has been called.
- self._changed_data = None
-
- # The base_fields class attribute is the *class-wide* definition of
- # fields. Because a particular *instance* of the class might want to
- # alter self.fields, we create self.fields here by copying base_fields.
- # Instances should always modify self.fields; they should not modify
- # self.base_fields.
- self.fields = deepcopy(self.base_fields)
-
- def __unicode__(self):
- return self.as_table()
-
- def __iter__(self):
- for name, field in self.fields.items():
- yield BoundField(self, field, name)
-
- def __getitem__(self, name):
- "Returns a BoundField with the given name."
- try:
- field = self.fields[name]
- except KeyError:
- raise KeyError('Key %r not found in Form' % name)
- return BoundField(self, field, name)
-
- def _get_errors(self):
- "Returns an ErrorDict for the data provided for the form"
- if self._errors is None:
- self.full_clean()
- return self._errors
- errors = property(_get_errors)
-
- def is_valid(self):
- """
- Returns True if the form has no errors. Otherwise, False. If errors are
- being ignored, returns False.
- """
- return self.is_bound and not bool(self.errors)
-
- def add_prefix(self, field_name):
- """
- Returns the field name with a prefix appended, if this Form has a
- prefix set.
-
- Subclasses may wish to override.
- """
- return self.prefix and ('%s-%s' % (self.prefix, field_name)) or field_name
-
- def add_initial_prefix(self, field_name):
- """
- Add a 'initial' prefix for checking dynamic initial values
- """
- return u'initial-%s' % self.add_prefix(field_name)
-
- def _html_output(self, normal_row, error_row, row_ender, help_text_html, errors_on_separate_row):
- "Helper function for outputting HTML. Used by as_table(), as_ul(), as_p()."
- top_errors = self.non_field_errors() # Errors that should be displayed above all fields.
- output, hidden_fields = [], []
-
- for name, field in self.fields.items():
- html_class_attr = ''
- bf = BoundField(self, field, name)
- bf_errors = self.error_class([conditional_escape(error) for error in bf.errors]) # Escape and cache in local variable.
- if bf.is_hidden:
- if bf_errors:
- top_errors.extend([u'(Hidden field %s) %s' % (name, force_unicode(e)) for e in bf_errors])
- hidden_fields.append(unicode(bf))
- else:
- # Create a 'class="..."' atribute if the row should have any
- # CSS classes applied.
- css_classes = bf.css_classes()
- if css_classes:
- html_class_attr = ' class="%s"' % css_classes
-
- if errors_on_separate_row and bf_errors:
- output.append(error_row % force_unicode(bf_errors))
-
- if bf.label:
- label = conditional_escape(force_unicode(bf.label))
- # Only add the suffix if the label does not end in
- # punctuation.
- if self.label_suffix:
- if label[-1] not in ':?.!':
- label += self.label_suffix
- label = bf.label_tag(label) or ''
- else:
- label = ''
-
- if field.help_text:
- help_text = help_text_html % force_unicode(field.help_text)
- else:
- help_text = u''
-
- output.append(normal_row % {
- 'errors': force_unicode(bf_errors),
- 'label': force_unicode(label),
- 'field': unicode(bf),
- 'help_text': help_text,
- 'html_class_attr': html_class_attr
- })
-
- if top_errors:
- output.insert(0, error_row % force_unicode(top_errors))
-
- if hidden_fields: # Insert any hidden fields in the last row.
- str_hidden = u''.join(hidden_fields)
- if output:
- last_row = output[-1]
- # Chop off the trailing row_ender (e.g. '</td></tr>') and
- # insert the hidden fields.
- if not last_row.endswith(row_ender):
- # This can happen in the as_p() case (and possibly others
- # that users write): if there are only top errors, we may
- # not be able to conscript the last row for our purposes,
- # so insert a new, empty row.
- last_row = (normal_row % {'errors': '', 'label': '',
- 'field': '', 'help_text':'',
- 'html_class_attr': html_class_attr})
- output.append(last_row)
- output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
- else:
- # If there aren't any rows in the output, just append the
- # hidden fields.
- output.append(str_hidden)
- return mark_safe(u'\n'.join(output))
-
- def as_table(self):
- "Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
- return self._html_output(
- normal_row = u'<tr%(html_class_attr)s><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>',
- error_row = u'<tr><td colspan="2">%s</td></tr>',
- row_ender = u'</td></tr>',
- help_text_html = u'<br />%s',
- errors_on_separate_row = False)
-
- def as_ul(self):
- "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."
- return self._html_output(
- normal_row = u'<li%(html_class_attr)s>%(errors)s%(label)s %(field)s%(help_text)s</li>',
- error_row = u'<li>%s</li>',
- row_ender = '</li>',
- help_text_html = u' %s',
- errors_on_separate_row = False)
-
- def as_p(self):
- "Returns this form rendered as HTML <p>s."
- return self._html_output(
- normal_row = u'<p%(html_class_attr)s>%(label)s %(field)s%(help_text)s</p>',
- error_row = u'%s',
- row_ender = '</p>',
- help_text_html = u' %s',
- errors_on_separate_row = True)
-
- def non_field_errors(self):
- """
- Returns an ErrorList of errors that aren't associated with a particular
- field -- i.e., from Form.clean(). Returns an empty ErrorList if there
- are none.
- """
- return self.errors.get(NON_FIELD_ERRORS, self.error_class())
-
- def _raw_value(self, fieldname):
- """
- Returns the raw_value for a particular field name. This is just a
- convenient wrapper around widget.value_from_datadict.
- """
- field = self.fields[fieldname]
- prefix = self.add_prefix(fieldname)
- return field.widget.value_from_datadict(self.data, self.files, prefix)
-
- def full_clean(self):
- """
- Cleans all of self.data and populates self._errors and
- self.cleaned_data.
- """
- self._errors = ErrorDict()
- if not self.is_bound: # Stop further processing.
- return
- self.cleaned_data = {}
- # If the form is permitted to be empty, and none of the form data has
- # changed from the initial data, short circuit any validation.
- if self.empty_permitted and not self.has_changed():
- return
- self._clean_fields()
- self._clean_form()
- self._post_clean()
- if self._errors:
- delattr(self, 'cleaned_data')
-
- def _clean_fields(self):
- for name, field in self.fields.items():
- # value_from_datadict() gets the data from the data dictionaries.
- # Each widget type knows how to retrieve its own data, because some
- # widgets split data over several HTML fields.
- value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
- try:
- if isinstance(field, FileField):
- initial = self.initial.get(name, field.initial)
- value = field.clean(value, initial)
- else:
- value = field.clean(value)
- self.cleaned_data[name] = value
- if hasattr(self, 'clean_%s' % name):
- value = getattr(self, 'clean_%s' % name)()
- self.cleaned_data[name] = value
- except ValidationError, e:
- self._errors[name] = self.error_class(e.messages)
- if name in self.cleaned_data:
- del self.cleaned_data[name]
-
- def _clean_form(self):
- try:
- self.cleaned_data = self.clean()
- except ValidationError, e:
- self._errors[NON_FIELD_ERRORS] = self.error_class(e.messages)
-
- def _post_clean(self):
- """
- An internal hook for performing additional cleaning after form cleaning
- is complete. Used for model validation in model forms.
- """
- pass
-
- def clean(self):
- """
- Hook for doing any extra form-wide cleaning after Field.clean() been
- called on every field. Any ValidationError raised by this method will
- not be associated with a particular field; it will have a special-case
- association with the field named '__all__'.
- """
- return self.cleaned_data
-
- def has_changed(self):
- """
- Returns True if data differs from initial.
- """
- return bool(self.changed_data)
-
- def _get_changed_data(self):
- if self._changed_data is None:
- self._changed_data = []
- # XXX: For now we're asking the individual widgets whether or not the
- # data has changed. It would probably be more efficient to hash the
- # initial data, store it in a hidden field, and compare a hash of the
- # submitted data, but we'd need a way to easily get the string value
- # for a given field. Right now, that logic is embedded in the render
- # method of each widget.
- for name, field in self.fields.items():
- prefixed_name = self.add_prefix(name)
- data_value = field.widget.value_from_datadict(self.data, self.files, prefixed_name)
- if not field.show_hidden_initial:
- initial_value = self.initial.get(name, field.initial)
- else:
- initial_prefixed_name = self.add_initial_prefix(name)
- hidden_widget = field.hidden_widget()
- initial_value = hidden_widget.value_from_datadict(
- self.data, self.files, initial_prefixed_name)
- if field.widget._has_changed(initial_value, data_value):
- self._changed_data.append(name)
- return self._changed_data
- changed_data = property(_get_changed_data)
-
- def _get_media(self):
- """
- Provide a description of all media required to render the widgets on this form
- """
- media = Media()
- for field in self.fields.values():
- media = media + field.widget.media
- return media
- media = property(_get_media)
-
- def is_multipart(self):
- """
- Returns True if the form needs to be multipart-encrypted, i.e. it has
- FileInput. Otherwise, False.
- """
- for field in self.fields.values():
- if field.widget.needs_multipart_form:
- return True
- return False
-
- def hidden_fields(self):
- """
- Returns a list of all the BoundField objects that are hidden fields.
- Useful for manual form layout in templates.
- """
- return [field for field in self if field.is_hidden]
-
- def visible_fields(self):
- """
- Returns a list of BoundField objects that aren't hidden fields.
- The opposite of the hidden_fields() method.
- """
- return [field for field in self if not field.is_hidden]
-
-class Form(BaseForm):
- "A collection of Fields, plus their associated data."
- # This is a separate class from BaseForm in order to abstract the way
- # self.fields is specified. This class (Form) is the one that does the
- # fancy metaclass stuff purely for the semantic sugar -- it allows one
- # to define a form using declarative syntax.
- # BaseForm itself has no way of designating self.fields.
- __metaclass__ = DeclarativeFieldsMetaclass
-
-class BoundField(StrAndUnicode):
- "A Field plus data"
- def __init__(self, form, field, name):
- self.form = form
- self.field = field
- self.name = name
- self.html_name = form.add_prefix(name)
- self.html_initial_name = form.add_initial_prefix(name)
- self.html_initial_id = form.add_initial_prefix(self.auto_id)
- if self.field.label is None:
- self.label = pretty_name(name)
- else:
- self.label = self.field.label
- self.help_text = field.help_text or ''
-
- def __unicode__(self):
- """Renders this field as an HTML widget."""
- if self.field.show_hidden_initial:
- return self.as_widget() + self.as_hidden(only_initial=True)
- return self.as_widget()
-
- def _errors(self):
- """
- Returns an ErrorList for this field. Returns an empty ErrorList
- if there are none.
- """
- return self.form.errors.get(self.name, self.form.error_class())
- errors = property(_errors)
-
- def as_widget(self, widget=None, attrs=None, only_initial=False):
- """
- Renders the field by rendering the passed widget, adding any HTML
- attributes passed as attrs. If no widget is specified, then the
- field's default widget will be used.
- """
- if not widget:
- widget = self.field.widget
-
- attrs = attrs or {}
- auto_id = self.auto_id
- if auto_id and 'id' not in attrs and 'id' not in widget.attrs:
- if not only_initial:
- attrs['id'] = auto_id
- else:
- attrs['id'] = self.html_initial_id
-
- if not self.form.is_bound:
- data = self.form.initial.get(self.name, self.field.initial)
- if callable(data):
- data = data()
- else:
- if isinstance(self.field, FileField) and self.data is None:
- data = self.form.initial.get(self.name, self.field.initial)
- else:
- data = self.data
- data = self.field.prepare_value(data)
-
- if not only_initial:
- name = self.html_name
- else:
- name = self.html_initial_name
- return widget.render(name, data, attrs=attrs)
-
- def as_text(self, attrs=None, **kwargs):
- """
- Returns a string of HTML for representing this as an <input type="text">.
- """
- return self.as_widget(TextInput(), attrs, **kwargs)
-
- def as_textarea(self, attrs=None, **kwargs):
- "Returns a string of HTML for representing this as a <textarea>."
- return self.as_widget(Textarea(), attrs, **kwargs)
-
- def as_hidden(self, attrs=None, **kwargs):
- """
- Returns a string of HTML for representing this as an <input type="hidden">.
- """
- return self.as_widget(self.field.hidden_widget(), attrs, **kwargs)
-
- def _data(self):
- """
- Returns the data for this BoundField, or None if it wasn't given.
- """
- return self.field.widget.value_from_datadict(self.form.data, self.form.files, self.html_name)
- data = property(_data)
-
- def label_tag(self, contents=None, attrs=None):
- """
- Wraps the given contents in a <label>, if the field has an ID attribute.
- Does not HTML-escape the contents. If contents aren't given, uses the
- field's HTML-escaped label.
-
- If attrs are given, they're used as HTML attributes on the <label> tag.
- """
- contents = contents or conditional_escape(self.label)
- widget = self.field.widget
- id_ = widget.attrs.get('id') or self.auto_id
- if id_:
- attrs = attrs and flatatt(attrs) or ''
- contents = u'<label for="%s"%s>%s</label>' % (widget.id_for_label(id_), attrs, unicode(contents))
- return mark_safe(contents)
-
- def css_classes(self, extra_classes=None):
- """
- Returns a string of space-separated CSS classes for this field.
- """
- if hasattr(extra_classes, 'split'):
- extra_classes = extra_classes.split()
- extra_classes = set(extra_classes or [])
- if self.errors and hasattr(self.form, 'error_css_class'):
- extra_classes.add(self.form.error_css_class)
- if self.field.required and hasattr(self.form, 'required_css_class'):
- extra_classes.add(self.form.required_css_class)
- return ' '.join(extra_classes)
-
- def _is_hidden(self):
- "Returns True if this BoundField's widget is hidden."
- return self.field.widget.is_hidden
- is_hidden = property(_is_hidden)
-
- def _auto_id(self):
- """
- Calculates and returns the ID attribute for this BoundField, if the
- associated Form has specified auto_id. Returns an empty string otherwise.
- """
- auto_id = self.form.auto_id
- if auto_id and '%s' in smart_unicode(auto_id):
- return smart_unicode(auto_id) % self.html_name
- elif auto_id:
- return self.html_name
- return ''
- auto_id = property(_auto_id)
diff --git a/parts/django/django/forms/formsets.py b/parts/django/django/forms/formsets.py
deleted file mode 100644
index 595ec39..0000000
--- a/parts/django/django/forms/formsets.py
+++ /dev/null
@@ -1,346 +0,0 @@
-from forms import Form
-from django.core.exceptions import ValidationError
-from django.utils.encoding import StrAndUnicode
-from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext as _
-from fields import IntegerField, BooleanField
-from widgets import Media, HiddenInput
-from util import ErrorList
-
-__all__ = ('BaseFormSet', 'all_valid')
-
-# special field names
-TOTAL_FORM_COUNT = 'TOTAL_FORMS'
-INITIAL_FORM_COUNT = 'INITIAL_FORMS'
-MAX_NUM_FORM_COUNT = 'MAX_NUM_FORMS'
-ORDERING_FIELD_NAME = 'ORDER'
-DELETION_FIELD_NAME = 'DELETE'
-
-class ManagementForm(Form):
- """
- ``ManagementForm`` is used to keep track of how many form instances
- are displayed on the page. If adding new forms via javascript, you should
- increment the count field of this form as well.
- """
- def __init__(self, *args, **kwargs):
- self.base_fields[TOTAL_FORM_COUNT] = IntegerField(widget=HiddenInput)
- self.base_fields[INITIAL_FORM_COUNT] = IntegerField(widget=HiddenInput)
- self.base_fields[MAX_NUM_FORM_COUNT] = IntegerField(required=False, widget=HiddenInput)
- super(ManagementForm, self).__init__(*args, **kwargs)
-
-class BaseFormSet(StrAndUnicode):
- """
- A collection of instances of the same Form class.
- """
- def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- initial=None, error_class=ErrorList):
- self.is_bound = data is not None or files is not None
- self.prefix = prefix or self.get_default_prefix()
- self.auto_id = auto_id
- self.data = data
- self.files = files
- self.initial = initial
- self.error_class = error_class
- self._errors = None
- self._non_form_errors = None
- # construct the forms in the formset
- self._construct_forms()
-
- def __unicode__(self):
- return self.as_table()
-
- def _management_form(self):
- """Returns the ManagementForm instance for this FormSet."""
- if self.data or self.files:
- form = ManagementForm(self.data, auto_id=self.auto_id, prefix=self.prefix)
- if not form.is_valid():
- raise ValidationError('ManagementForm data is missing or has been tampered with')
- else:
- form = ManagementForm(auto_id=self.auto_id, prefix=self.prefix, initial={
- TOTAL_FORM_COUNT: self.total_form_count(),
- INITIAL_FORM_COUNT: self.initial_form_count(),
- MAX_NUM_FORM_COUNT: self.max_num
- })
- return form
- management_form = property(_management_form)
-
- def total_form_count(self):
- """Returns the total number of forms in this FormSet."""
- if self.data or self.files:
- return self.management_form.cleaned_data[TOTAL_FORM_COUNT]
- else:
- initial_forms = self.initial_form_count()
- total_forms = initial_forms + self.extra
- # Allow all existing related objects/inlines to be displayed,
- # but don't allow extra beyond max_num.
- if initial_forms > self.max_num >= 0:
- total_forms = initial_forms
- elif total_forms > self.max_num >= 0:
- total_forms = self.max_num
- return total_forms
-
- def initial_form_count(self):
- """Returns the number of forms that are required in this FormSet."""
- if self.data or self.files:
- return self.management_form.cleaned_data[INITIAL_FORM_COUNT]
- else:
- # Use the length of the inital data if it's there, 0 otherwise.
- initial_forms = self.initial and len(self.initial) or 0
- if initial_forms > self.max_num >= 0:
- initial_forms = self.max_num
- return initial_forms
-
- def _construct_forms(self):
- # instantiate all the forms and put them in self.forms
- self.forms = []
- for i in xrange(self.total_form_count()):
- self.forms.append(self._construct_form(i))
-
- def _construct_form(self, i, **kwargs):
- """
- Instantiates and returns the i-th form instance in a formset.
- """
- defaults = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)}
- if self.data or self.files:
- defaults['data'] = self.data
- defaults['files'] = self.files
- if self.initial:
- try:
- defaults['initial'] = self.initial[i]
- except IndexError:
- pass
- # Allow extra forms to be empty.
- if i >= self.initial_form_count():
- defaults['empty_permitted'] = True
- defaults.update(kwargs)
- form = self.form(**defaults)
- self.add_fields(form, i)
- return form
-
- def _get_initial_forms(self):
- """Return a list of all the initial forms in this formset."""
- return self.forms[:self.initial_form_count()]
- initial_forms = property(_get_initial_forms)
-
- def _get_extra_forms(self):
- """Return a list of all the extra forms in this formset."""
- return self.forms[self.initial_form_count():]
- extra_forms = property(_get_extra_forms)
-
- def _get_empty_form(self, **kwargs):
- defaults = {
- 'auto_id': self.auto_id,
- 'prefix': self.add_prefix('__prefix__'),
- 'empty_permitted': True,
- }
- if self.data or self.files:
- defaults['data'] = self.data
- defaults['files'] = self.files
- defaults.update(kwargs)
- form = self.form(**defaults)
- self.add_fields(form, None)
- return form
- empty_form = property(_get_empty_form)
-
- # Maybe this should just go away?
- def _get_cleaned_data(self):
- """
- Returns a list of form.cleaned_data dicts for every form in self.forms.
- """
- if not self.is_valid():
- raise AttributeError("'%s' object has no attribute 'cleaned_data'" % self.__class__.__name__)
- return [form.cleaned_data for form in self.forms]
- cleaned_data = property(_get_cleaned_data)
-
- def _get_deleted_forms(self):
- """
- Returns a list of forms that have been marked for deletion. Raises an
- AttributeError if deletion is not allowed.
- """
- if not self.is_valid() or not self.can_delete:
- raise AttributeError("'%s' object has no attribute 'deleted_forms'" % self.__class__.__name__)
- # construct _deleted_form_indexes which is just a list of form indexes
- # that have had their deletion widget set to True
- if not hasattr(self, '_deleted_form_indexes'):
- self._deleted_form_indexes = []
- for i in range(0, self.total_form_count()):
- form = self.forms[i]
- # if this is an extra form and hasn't changed, don't consider it
- if i >= self.initial_form_count() and not form.has_changed():
- continue
- if self._should_delete_form(form):
- self._deleted_form_indexes.append(i)
- return [self.forms[i] for i in self._deleted_form_indexes]
- deleted_forms = property(_get_deleted_forms)
-
- def _get_ordered_forms(self):
- """
- Returns a list of form in the order specified by the incoming data.
- Raises an AttributeError if ordering is not allowed.
- """
- if not self.is_valid() or not self.can_order:
- raise AttributeError("'%s' object has no attribute 'ordered_forms'" % self.__class__.__name__)
- # Construct _ordering, which is a list of (form_index, order_field_value)
- # tuples. After constructing this list, we'll sort it by order_field_value
- # so we have a way to get to the form indexes in the order specified
- # by the form data.
- if not hasattr(self, '_ordering'):
- self._ordering = []
- for i in range(0, self.total_form_count()):
- form = self.forms[i]
- # if this is an extra form and hasn't changed, don't consider it
- if i >= self.initial_form_count() and not form.has_changed():
- continue
- # don't add data marked for deletion to self.ordered_data
- if self.can_delete and self._should_delete_form(form):
- continue
- self._ordering.append((i, form.cleaned_data[ORDERING_FIELD_NAME]))
- # After we're done populating self._ordering, sort it.
- # A sort function to order things numerically ascending, but
- # None should be sorted below anything else. Allowing None as
- # a comparison value makes it so we can leave ordering fields
- # blamk.
- def compare_ordering_values(x, y):
- if x[1] is None:
- return 1
- if y[1] is None:
- return -1
- return x[1] - y[1]
- self._ordering.sort(compare_ordering_values)
- # Return a list of form.cleaned_data dicts in the order spcified by
- # the form data.
- return [self.forms[i[0]] for i in self._ordering]
- ordered_forms = property(_get_ordered_forms)
-
- #@classmethod
- def get_default_prefix(cls):
- return 'form'
- get_default_prefix = classmethod(get_default_prefix)
-
- def non_form_errors(self):
- """
- Returns an ErrorList of errors that aren't associated with a particular
- form -- i.e., from formset.clean(). Returns an empty ErrorList if there
- are none.
- """
- if self._non_form_errors is not None:
- return self._non_form_errors
- return self.error_class()
-
- def _get_errors(self):
- """
- Returns a list of form.errors for every form in self.forms.
- """
- if self._errors is None:
- self.full_clean()
- return self._errors
- errors = property(_get_errors)
-
- def _should_delete_form(self, form):
- # The way we lookup the value of the deletion field here takes
- # more code than we'd like, but the form's cleaned_data will
- # not exist if the form is invalid.
- field = form.fields[DELETION_FIELD_NAME]
- raw_value = form._raw_value(DELETION_FIELD_NAME)
- should_delete = field.clean(raw_value)
- return should_delete
-
- def is_valid(self):
- """
- Returns True if form.errors is empty for every form in self.forms.
- """
- if not self.is_bound:
- return False
- # We loop over every form.errors here rather than short circuiting on the
- # first failure to make sure validation gets triggered for every form.
- forms_valid = True
- err = self.errors
- for i in range(0, self.total_form_count()):
- form = self.forms[i]
- if self.can_delete:
- if self._should_delete_form(form):
- # This form is going to be deleted so any of its errors
- # should not cause the entire formset to be invalid.
- continue
- if bool(self.errors[i]):
- forms_valid = False
- return forms_valid and not bool(self.non_form_errors())
-
- def full_clean(self):
- """
- Cleans all of self.data and populates self._errors.
- """
- self._errors = []
- if not self.is_bound: # Stop further processing.
- return
- for i in range(0, self.total_form_count()):
- form = self.forms[i]
- self._errors.append(form.errors)
- # Give self.clean() a chance to do cross-form validation.
- try:
- self.clean()
- except ValidationError, e:
- self._non_form_errors = self.error_class(e.messages)
-
- def clean(self):
- """
- Hook for doing any extra formset-wide cleaning after Form.clean() has
- been called on every form. Any ValidationError raised by this method
- will not be associated with a particular form; it will be accesible
- via formset.non_form_errors()
- """
- pass
-
- def add_fields(self, form, index):
- """A hook for adding extra fields on to each form instance."""
- if self.can_order:
- # Only pre-fill the ordering field for initial forms.
- if index is not None and index < self.initial_form_count():
- form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), initial=index+1, required=False)
- else:
- form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), required=False)
- if self.can_delete:
- form.fields[DELETION_FIELD_NAME] = BooleanField(label=_(u'Delete'), required=False)
-
- def add_prefix(self, index):
- return '%s-%s' % (self.prefix, index)
-
- def is_multipart(self):
- """
- Returns True if the formset needs to be multipart-encrypted, i.e. it
- has FileInput. Otherwise, False.
- """
- return self.forms and self.forms[0].is_multipart()
-
- def _get_media(self):
- # All the forms on a FormSet are the same, so you only need to
- # interrogate the first form for media.
- if self.forms:
- return self.forms[0].media
- else:
- return Media()
- media = property(_get_media)
-
- def as_table(self):
- "Returns this formset rendered as HTML <tr>s -- excluding the <table></table>."
- # XXX: there is no semantic division between forms here, there
- # probably should be. It might make sense to render each form as a
- # table row with each field as a td.
- forms = u' '.join([form.as_table() for form in self.forms])
- return mark_safe(u'\n'.join([unicode(self.management_form), forms]))
-
-def formset_factory(form, formset=BaseFormSet, extra=1, can_order=False,
- can_delete=False, max_num=None):
- """Return a FormSet for the given form class."""
- attrs = {'form': form, 'extra': extra,
- 'can_order': can_order, 'can_delete': can_delete,
- 'max_num': max_num}
- return type(form.__name__ + 'FormSet', (formset,), attrs)
-
-def all_valid(formsets):
- """Returns true if every formset in formsets is valid."""
- valid = True
- for formset in formsets:
- if not formset.is_valid():
- valid = False
- return valid
diff --git a/parts/django/django/forms/models.py b/parts/django/django/forms/models.py
deleted file mode 100644
index 9180ac1..0000000
--- a/parts/django/django/forms/models.py
+++ /dev/null
@@ -1,1046 +0,0 @@
-"""
-Helper functions for creating Form classes from Django models
-and database field objects.
-"""
-
-from django.db import connections
-from django.utils.encoding import smart_unicode, force_unicode
-from django.utils.datastructures import SortedDict
-from django.utils.text import get_text_list, capfirst
-from django.utils.translation import ugettext_lazy as _, ugettext
-
-from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
-from django.core.validators import EMPTY_VALUES
-from util import ErrorList
-from forms import BaseForm, get_declared_fields
-from fields import Field, ChoiceField
-from widgets import SelectMultiple, HiddenInput, MultipleHiddenInput
-from widgets import media_property
-from formsets import BaseFormSet, formset_factory, DELETION_FIELD_NAME
-
-__all__ = (
- 'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model',
- 'save_instance', 'form_for_fields', 'ModelChoiceField',
- 'ModelMultipleChoiceField',
-)
-
-def construct_instance(form, instance, fields=None, exclude=None):
- """
- Constructs and returns a model instance from the bound ``form``'s
- ``cleaned_data``, but does not save the returned instance to the
- database.
- """
- from django.db import models
- opts = instance._meta
-
- cleaned_data = form.cleaned_data
- file_field_list = []
- for f in opts.fields:
- if not f.editable or isinstance(f, models.AutoField) \
- or not f.name in cleaned_data:
- continue
- if fields and f.name not in fields:
- continue
- if exclude and f.name in exclude:
- continue
- # Defer saving file-type fields until after the other fields, so a
- # callable upload_to can use the values from other fields.
- if isinstance(f, models.FileField):
- file_field_list.append(f)
- else:
- f.save_form_data(instance, cleaned_data[f.name])
-
- for f in file_field_list:
- f.save_form_data(instance, cleaned_data[f.name])
-
- return instance
-
-def save_instance(form, instance, fields=None, fail_message='saved',
- commit=True, exclude=None, construct=True):
- """
- Saves bound Form ``form``'s cleaned_data into model instance ``instance``.
-
- If commit=True, then the changes to ``instance`` will be saved to the
- database. Returns ``instance``.
-
- If construct=False, assume ``instance`` has already been constructed and
- just needs to be saved.
- """
- if construct:
- instance = construct_instance(form, instance, fields, exclude)
- opts = instance._meta
- if form.errors:
- raise ValueError("The %s could not be %s because the data didn't"
- " validate." % (opts.object_name, fail_message))
-
- # Wrap up the saving of m2m data as a function.
- def save_m2m():
- cleaned_data = form.cleaned_data
- for f in opts.many_to_many:
- if fields and f.name not in fields:
- continue
- if f.name in cleaned_data:
- f.save_form_data(instance, cleaned_data[f.name])
- if commit:
- # If we are committing, save the instance and the m2m data immediately.
- instance.save()
- save_m2m()
- else:
- # We're not committing. Add a method to the form to allow deferred
- # saving of m2m data.
- form.save_m2m = save_m2m
- return instance
-
-def make_model_save(model, fields, fail_message):
- """Returns the save() method for a Form."""
- def save(self, commit=True):
- return save_instance(self, model(), fields, fail_message, commit)
- return save
-
-def make_instance_save(instance, fields, fail_message):
- """Returns the save() method for a Form."""
- def save(self, commit=True):
- return save_instance(self, instance, fields, fail_message, commit)
- return save
-
-def form_for_fields(field_list):
- """
- Returns a Form class for the given list of Django database field instances.
- """
- fields = SortedDict([(f.name, f.formfield())
- for f in field_list if f.editable])
- return type('FormForFields', (BaseForm,), {'base_fields': fields})
-
-
-# ModelForms #################################################################
-
-def model_to_dict(instance, fields=None, exclude=None):
- """
- Returns a dict containing the data in ``instance`` suitable for passing as
- a Form's ``initial`` keyword argument.
-
- ``fields`` is an optional list of field names. If provided, only the named
- fields will be included in the returned dict.
-
- ``exclude`` is an optional list of field names. If provided, the named
- fields will be excluded from the returned dict, even if they are listed in
- the ``fields`` argument.
- """
- # avoid a circular import
- from django.db.models.fields.related import ManyToManyField
- opts = instance._meta
- data = {}
- for f in opts.fields + opts.many_to_many:
- if not f.editable:
- continue
- if fields and not f.name in fields:
- continue
- if exclude and f.name in exclude:
- continue
- if isinstance(f, ManyToManyField):
- # If the object doesn't have a primry key yet, just use an empty
- # list for its m2m fields. Calling f.value_from_object will raise
- # an exception.
- if instance.pk is None:
- data[f.name] = []
- else:
- # MultipleChoiceWidget needs a list of pks, not object instances.
- data[f.name] = [obj.pk for obj in f.value_from_object(instance)]
- else:
- data[f.name] = f.value_from_object(instance)
- return data
-
-def fields_for_model(model, fields=None, exclude=None, widgets=None, formfield_callback=None):
- """
- Returns a ``SortedDict`` containing form fields for the given model.
-
- ``fields`` is an optional list of field names. If provided, only the named
- fields will be included in the returned fields.
-
- ``exclude`` is an optional list of field names. If provided, the named
- fields will be excluded from the returned fields, even if they are listed
- in the ``fields`` argument.
- """
- field_list = []
- ignored = []
- opts = model._meta
- for f in opts.fields + opts.many_to_many:
- if not f.editable:
- continue
- if fields and not f.name in fields:
- continue
- if exclude and f.name in exclude:
- continue
- if widgets and f.name in widgets:
- kwargs = {'widget': widgets[f.name]}
- else:
- kwargs = {}
-
- if formfield_callback is None:
- formfield = f.formfield(**kwargs)
- elif not callable(formfield_callback):
- raise TypeError('formfield_callback must be a function or callable')
- else:
- formfield = formfield_callback(f, **kwargs)
-
- if formfield:
- field_list.append((f.name, formfield))
- else:
- ignored.append(f.name)
- field_dict = SortedDict(field_list)
- if fields:
- field_dict = SortedDict(
- [(f, field_dict.get(f)) for f in fields
- if ((not exclude) or (exclude and f not in exclude)) and (f not in ignored)]
- )
- return field_dict
-
-class ModelFormOptions(object):
- def __init__(self, options=None):
- self.model = getattr(options, 'model', None)
- self.fields = getattr(options, 'fields', None)
- self.exclude = getattr(options, 'exclude', None)
- self.widgets = getattr(options, 'widgets', None)
-
-
-class ModelFormMetaclass(type):
- def __new__(cls, name, bases, attrs):
- formfield_callback = attrs.pop('formfield_callback', None)
- try:
- parents = [b for b in bases if issubclass(b, ModelForm)]
- except NameError:
- # We are defining ModelForm itself.
- parents = None
- declared_fields = get_declared_fields(bases, attrs, False)
- new_class = super(ModelFormMetaclass, cls).__new__(cls, name, bases,
- attrs)
- if not parents:
- return new_class
-
- if 'media' not in attrs:
- new_class.media = media_property(new_class)
- opts = new_class._meta = ModelFormOptions(getattr(new_class, 'Meta', None))
- if opts.model:
- # If a model is defined, extract form fields from it.
- fields = fields_for_model(opts.model, opts.fields,
- opts.exclude, opts.widgets, formfield_callback)
- # Override default model fields with any custom declared ones
- # (plus, include all the other declared fields).
- fields.update(declared_fields)
- else:
- fields = declared_fields
- new_class.declared_fields = declared_fields
- new_class.base_fields = fields
- return new_class
-
-class BaseModelForm(BaseForm):
- def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- initial=None, error_class=ErrorList, label_suffix=':',
- empty_permitted=False, instance=None):
- opts = self._meta
- if instance is None:
- if opts.model is None:
- raise ValueError('ModelForm has no model class specified.')
- # if we didn't get an instance, instantiate a new one
- self.instance = opts.model()
- object_data = {}
- else:
- self.instance = instance
- object_data = model_to_dict(instance, opts.fields, opts.exclude)
- # if initial was provided, it should override the values from instance
- if initial is not None:
- object_data.update(initial)
- # self._validate_unique will be set to True by BaseModelForm.clean().
- # It is False by default so overriding self.clean() and failing to call
- # super will stop validate_unique from being called.
- self._validate_unique = False
- super(BaseModelForm, self).__init__(data, files, auto_id, prefix, object_data,
- error_class, label_suffix, empty_permitted)
-
- def _update_errors(self, message_dict):
- for k, v in message_dict.items():
- if k != NON_FIELD_ERRORS:
- self._errors.setdefault(k, self.error_class()).extend(v)
- # Remove the data from the cleaned_data dict since it was invalid
- if k in self.cleaned_data:
- del self.cleaned_data[k]
- if NON_FIELD_ERRORS in message_dict:
- messages = message_dict[NON_FIELD_ERRORS]
- self._errors.setdefault(NON_FIELD_ERRORS, self.error_class()).extend(messages)
-
- def _get_validation_exclusions(self):
- """
- For backwards-compatibility, several types of fields need to be
- excluded from model validation. See the following tickets for
- details: #12507, #12521, #12553
- """
- exclude = []
- # Build up a list of fields that should be excluded from model field
- # validation and unique checks.
- for f in self.instance._meta.fields:
- field = f.name
- # Exclude fields that aren't on the form. The developer may be
- # adding these values to the model after form validation.
- if field not in self.fields:
- exclude.append(f.name)
-
- # Don't perform model validation on fields that were defined
- # manually on the form and excluded via the ModelForm's Meta
- # class. See #12901.
- elif self._meta.fields and field not in self._meta.fields:
- exclude.append(f.name)
- elif self._meta.exclude and field in self._meta.exclude:
- exclude.append(f.name)
-
- # Exclude fields that failed form validation. There's no need for
- # the model fields to validate them as well.
- elif field in self._errors.keys():
- exclude.append(f.name)
-
- # Exclude empty fields that are not required by the form, if the
- # underlying model field is required. This keeps the model field
- # from raising a required error. Note: don't exclude the field from
- # validaton if the model field allows blanks. If it does, the blank
- # value may be included in a unique check, so cannot be excluded
- # from validation.
- else:
- form_field = self.fields[field]
- field_value = self.cleaned_data.get(field, None)
- if not f.blank and not form_field.required and field_value in EMPTY_VALUES:
- exclude.append(f.name)
- return exclude
-
- def clean(self):
- self._validate_unique = True
- return self.cleaned_data
-
- def _post_clean(self):
- opts = self._meta
- # Update the model instance with self.cleaned_data.
- self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude)
-
- exclude = self._get_validation_exclusions()
-
- # Foreign Keys being used to represent inline relationships
- # are excluded from basic field value validation. This is for two
- # reasons: firstly, the value may not be supplied (#12507; the
- # case of providing new values to the admin); secondly the
- # object being referred to may not yet fully exist (#12749).
- # However, these fields *must* be included in uniqueness checks,
- # so this can't be part of _get_validation_exclusions().
- for f_name, field in self.fields.items():
- if isinstance(field, InlineForeignKeyField):
- exclude.append(f_name)
-
- # Clean the model instance's fields.
- try:
- self.instance.clean_fields(exclude=exclude)
- except ValidationError, e:
- self._update_errors(e.message_dict)
-
- # Call the model instance's clean method.
- try:
- self.instance.clean()
- except ValidationError, e:
- self._update_errors({NON_FIELD_ERRORS: e.messages})
-
- # Validate uniqueness if needed.
- if self._validate_unique:
- self.validate_unique()
-
- def validate_unique(self):
- """
- Calls the instance's validate_unique() method and updates the form's
- validation errors if any were raised.
- """
- exclude = self._get_validation_exclusions()
- try:
- self.instance.validate_unique(exclude=exclude)
- except ValidationError, e:
- self._update_errors(e.message_dict)
-
- def save(self, commit=True):
- """
- Saves this ``form``'s cleaned_data into model instance
- ``self.instance``.
-
- If commit=True, then the changes to ``instance`` will be saved to the
- database. Returns ``instance``.
- """
- if self.instance.pk is None:
- fail_message = 'created'
- else:
- fail_message = 'changed'
- return save_instance(self, self.instance, self._meta.fields,
- fail_message, commit, construct=False)
-
- save.alters_data = True
-
-class ModelForm(BaseModelForm):
- __metaclass__ = ModelFormMetaclass
-
-def modelform_factory(model, form=ModelForm, fields=None, exclude=None,
- formfield_callback=None):
- # Create the inner Meta class. FIXME: ideally, we should be able to
- # construct a ModelForm without creating and passing in a temporary
- # inner class.
-
- # Build up a list of attributes that the Meta object will have.
- attrs = {'model': model}
- if fields is not None:
- attrs['fields'] = fields
- if exclude is not None:
- attrs['exclude'] = exclude
-
- # If parent form class already has an inner Meta, the Meta we're
- # creating needs to inherit from the parent's inner meta.
- parent = (object,)
- if hasattr(form, 'Meta'):
- parent = (form.Meta, object)
- Meta = type('Meta', parent, attrs)
-
- # Give this new form class a reasonable name.
- class_name = model.__name__ + 'Form'
-
- # Class attributes for the new form class.
- form_class_attrs = {
- 'Meta': Meta,
- 'formfield_callback': formfield_callback
- }
-
- return ModelFormMetaclass(class_name, (form,), form_class_attrs)
-
-
-# ModelFormSets ##############################################################
-
-class BaseModelFormSet(BaseFormSet):
- """
- A ``FormSet`` for editing a queryset and/or adding new objects to it.
- """
- model = None
-
- def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- queryset=None, **kwargs):
- self.queryset = queryset
- defaults = {'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix}
- defaults.update(kwargs)
- super(BaseModelFormSet, self).__init__(**defaults)
-
- def initial_form_count(self):
- """Returns the number of forms that are required in this FormSet."""
- if not (self.data or self.files):
- return len(self.get_queryset())
- return super(BaseModelFormSet, self).initial_form_count()
-
- def _existing_object(self, pk):
- if not hasattr(self, '_object_dict'):
- self._object_dict = dict([(o.pk, o) for o in self.get_queryset()])
- return self._object_dict.get(pk)
-
- def _construct_form(self, i, **kwargs):
- if self.is_bound and i < self.initial_form_count():
- pk_key = "%s-%s" % (self.add_prefix(i), self.model._meta.pk.name)
- pk = self.data[pk_key]
- pk_field = self.model._meta.pk
- pk = pk_field.get_db_prep_lookup('exact', pk,
- connection=connections[self.get_queryset().db])
- if isinstance(pk, list):
- pk = pk[0]
- kwargs['instance'] = self._existing_object(pk)
- if i < self.initial_form_count() and not kwargs.get('instance'):
- kwargs['instance'] = self.get_queryset()[i]
- return super(BaseModelFormSet, self)._construct_form(i, **kwargs)
-
- def get_queryset(self):
- if not hasattr(self, '_queryset'):
- if self.queryset is not None:
- qs = self.queryset
- else:
- qs = self.model._default_manager.get_query_set()
-
- # If the queryset isn't already ordered we need to add an
- # artificial ordering here to make sure that all formsets
- # constructed from this queryset have the same form order.
- if not qs.ordered:
- qs = qs.order_by(self.model._meta.pk.name)
-
- # Removed queryset limiting here. As per discussion re: #13023
- # on django-dev, max_num should not prevent existing
- # related objects/inlines from being displayed.
- self._queryset = qs
- return self._queryset
-
- def save_new(self, form, commit=True):
- """Saves and returns a new model instance for the given form."""
- return form.save(commit=commit)
-
- def save_existing(self, form, instance, commit=True):
- """Saves and returns an existing model instance for the given form."""
- return form.save(commit=commit)
-
- def save(self, commit=True):
- """Saves model instances for every form, adding and changing instances
- as necessary, and returns the list of instances.
- """
- if not commit:
- self.saved_forms = []
- def save_m2m():
- for form in self.saved_forms:
- form.save_m2m()
- self.save_m2m = save_m2m
- return self.save_existing_objects(commit) + self.save_new_objects(commit)
-
- def clean(self):
- self.validate_unique()
-
- def validate_unique(self):
- # Collect unique_checks and date_checks to run from all the forms.
- all_unique_checks = set()
- all_date_checks = set()
- for form in self.forms:
- if not hasattr(form, 'cleaned_data'):
- continue
- exclude = form._get_validation_exclusions()
- unique_checks, date_checks = form.instance._get_unique_checks(exclude=exclude)
- all_unique_checks = all_unique_checks.union(set(unique_checks))
- all_date_checks = all_date_checks.union(set(date_checks))
-
- errors = []
- # Do each of the unique checks (unique and unique_together)
- for uclass, unique_check in all_unique_checks:
- seen_data = set()
- for form in self.forms:
- # if the form doesn't have cleaned_data then we ignore it,
- # it's already invalid
- if not hasattr(form, "cleaned_data"):
- continue
- # get data for each field of each of unique_check
- row_data = tuple([form.cleaned_data[field] for field in unique_check if field in form.cleaned_data])
- if row_data and not None in row_data:
- # if we've aready seen it then we have a uniqueness failure
- if row_data in seen_data:
- # poke error messages into the right places and mark
- # the form as invalid
- errors.append(self.get_unique_error_message(unique_check))
- form._errors[NON_FIELD_ERRORS] = self.get_form_error()
- del form.cleaned_data
- break
- # mark the data as seen
- seen_data.add(row_data)
- # iterate over each of the date checks now
- for date_check in all_date_checks:
- seen_data = set()
- uclass, lookup, field, unique_for = date_check
- for form in self.forms:
- # if the form doesn't have cleaned_data then we ignore it,
- # it's already invalid
- if not hasattr(self, 'cleaned_data'):
- continue
- # see if we have data for both fields
- if (form.cleaned_data and form.cleaned_data[field] is not None
- and form.cleaned_data[unique_for] is not None):
- # if it's a date lookup we need to get the data for all the fields
- if lookup == 'date':
- date = form.cleaned_data[unique_for]
- date_data = (date.year, date.month, date.day)
- # otherwise it's just the attribute on the date/datetime
- # object
- else:
- date_data = (getattr(form.cleaned_data[unique_for], lookup),)
- data = (form.cleaned_data[field],) + date_data
- # if we've aready seen it then we have a uniqueness failure
- if data in seen_data:
- # poke error messages into the right places and mark
- # the form as invalid
- errors.append(self.get_date_error_message(date_check))
- form._errors[NON_FIELD_ERRORS] = self.get_form_error()
- del form.cleaned_data
- break
- seen_data.add(data)
- if errors:
- raise ValidationError(errors)
-
- def get_unique_error_message(self, unique_check):
- if len(unique_check) == 1:
- return ugettext("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.") % {
- "field": get_text_list(unique_check, unicode(_("and"))),
- }
-
- def get_date_error_message(self, date_check):
- return ugettext("Please correct the duplicate data for %(field_name)s "
- "which must be unique for the %(lookup)s in %(date_field)s.") % {
- 'field_name': date_check[2],
- 'date_field': date_check[3],
- 'lookup': unicode(date_check[1]),
- }
-
- def get_form_error(self):
- return ugettext("Please correct the duplicate values below.")
-
- def save_existing_objects(self, commit=True):
- self.changed_objects = []
- self.deleted_objects = []
- if not self.get_queryset():
- return []
-
- saved_instances = []
- for form in self.initial_forms:
- pk_name = self._pk_field.name
- raw_pk_value = form._raw_value(pk_name)
-
- # clean() for different types of PK fields can sometimes return
- # the model instance, and sometimes the PK. Handle either.
- pk_value = form.fields[pk_name].clean(raw_pk_value)
- pk_value = getattr(pk_value, 'pk', pk_value)
-
- obj = self._existing_object(pk_value)
- if self.can_delete:
- raw_delete_value = form._raw_value(DELETION_FIELD_NAME)
- should_delete = form.fields[DELETION_FIELD_NAME].clean(raw_delete_value)
- if should_delete:
- self.deleted_objects.append(obj)
- obj.delete()
- continue
- if form.has_changed():
- self.changed_objects.append((obj, form.changed_data))
- saved_instances.append(self.save_existing(form, obj, commit=commit))
- if not commit:
- self.saved_forms.append(form)
- return saved_instances
-
- def save_new_objects(self, commit=True):
- self.new_objects = []
- for form in self.extra_forms:
- if not form.has_changed():
- continue
- # If someone has marked an add form for deletion, don't save the
- # object.
- if self.can_delete:
- raw_delete_value = form._raw_value(DELETION_FIELD_NAME)
- should_delete = form.fields[DELETION_FIELD_NAME].clean(raw_delete_value)
- if should_delete:
- continue
- self.new_objects.append(self.save_new(form, commit=commit))
- if not commit:
- self.saved_forms.append(form)
- return self.new_objects
-
- def add_fields(self, form, index):
- """Add a hidden field for the object's primary key."""
- from django.db.models import AutoField, OneToOneField, ForeignKey
- self._pk_field = pk = self.model._meta.pk
- # If a pk isn't editable, then it won't be on the form, so we need to
- # add it here so we can tell which object is which when we get the
- # data back. Generally, pk.editable should be false, but for some
- # reason, auto_created pk fields and AutoField's editable attribute is
- # True, so check for that as well.
- def pk_is_not_editable(pk):
- return ((not pk.editable) or (pk.auto_created or isinstance(pk, AutoField))
- or (pk.rel and pk.rel.parent_link and pk_is_not_editable(pk.rel.to._meta.pk)))
- if pk_is_not_editable(pk) or pk.name not in form.fields:
- if form.is_bound:
- pk_value = form.instance.pk
- else:
- try:
- if index is not None:
- pk_value = self.get_queryset()[index].pk
- else:
- pk_value = None
- except IndexError:
- pk_value = None
- if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):
- qs = pk.rel.to._default_manager.get_query_set()
- else:
- qs = self.model._default_manager.get_query_set()
- qs = qs.using(form.instance._state.db)
- form.fields[self._pk_field.name] = ModelChoiceField(qs, initial=pk_value, required=False, widget=HiddenInput)
- super(BaseModelFormSet, self).add_fields(form, index)
-
-def modelformset_factory(model, form=ModelForm, formfield_callback=None,
- formset=BaseModelFormSet,
- extra=1, can_delete=False, can_order=False,
- max_num=None, fields=None, exclude=None):
- """
- Returns a FormSet class for the given Django model class.
- """
- form = modelform_factory(model, form=form, fields=fields, exclude=exclude,
- formfield_callback=formfield_callback)
- FormSet = formset_factory(form, formset, extra=extra, max_num=max_num,
- can_order=can_order, can_delete=can_delete)
- FormSet.model = model
- return FormSet
-
-
-# InlineFormSets #############################################################
-
-class BaseInlineFormSet(BaseModelFormSet):
- """A formset for child objects related to a parent."""
- def __init__(self, data=None, files=None, instance=None,
- save_as_new=False, prefix=None, queryset=None):
- from django.db.models.fields.related import RelatedObject
- if instance is None:
- self.instance = self.fk.rel.to()
- else:
- self.instance = instance
- self.save_as_new = save_as_new
- # is there a better way to get the object descriptor?
- self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name()
- if self.fk.rel.field_name == self.fk.rel.to._meta.pk.name:
- backlink_value = self.instance
- else:
- backlink_value = getattr(self.instance, self.fk.rel.field_name)
- if queryset is None:
- queryset = self.model._default_manager
- qs = queryset.filter(**{self.fk.name: backlink_value})
- super(BaseInlineFormSet, self).__init__(data, files, prefix=prefix,
- queryset=qs)
-
- def initial_form_count(self):
- if self.save_as_new:
- return 0
- return super(BaseInlineFormSet, self).initial_form_count()
-
- def total_form_count(self):
- if self.save_as_new:
- return super(BaseInlineFormSet, self).initial_form_count()
- return super(BaseInlineFormSet, self).total_form_count()
-
- def _construct_form(self, i, **kwargs):
- form = super(BaseInlineFormSet, self)._construct_form(i, **kwargs)
- if self.save_as_new:
- # Remove the primary key from the form's data, we are only
- # creating new instances
- form.data[form.add_prefix(self._pk_field.name)] = None
-
- # Remove the foreign key from the form's data
- form.data[form.add_prefix(self.fk.name)] = None
-
- # Set the fk value here so that the form can do it's validation.
- setattr(form.instance, self.fk.get_attname(), self.instance.pk)
- return form
-
- #@classmethod
- def get_default_prefix(cls):
- from django.db.models.fields.related import RelatedObject
- return RelatedObject(cls.fk.rel.to, cls.model, cls.fk).get_accessor_name().replace('+','')
- get_default_prefix = classmethod(get_default_prefix)
-
- def save_new(self, form, commit=True):
- # Use commit=False so we can assign the parent key afterwards, then
- # save the object.
- obj = form.save(commit=False)
- pk_value = getattr(self.instance, self.fk.rel.field_name)
- setattr(obj, self.fk.get_attname(), getattr(pk_value, 'pk', pk_value))
- if commit:
- obj.save()
- # form.save_m2m() can be called via the formset later on if commit=False
- if commit and hasattr(form, 'save_m2m'):
- form.save_m2m()
- return obj
-
- def add_fields(self, form, index):
- super(BaseInlineFormSet, self).add_fields(form, index)
- if self._pk_field == self.fk:
- name = self._pk_field.name
- kwargs = {'pk_field': True}
- else:
- # The foreign key field might not be on the form, so we poke at the
- # Model field to get the label, since we need that for error messages.
- name = self.fk.name
- kwargs = {
- 'label': getattr(form.fields.get(name), 'label', capfirst(self.fk.verbose_name))
- }
- if self.fk.rel.field_name != self.fk.rel.to._meta.pk.name:
- kwargs['to_field'] = self.fk.rel.field_name
-
- form.fields[name] = InlineForeignKeyField(self.instance, **kwargs)
-
- # Add the generated field to form._meta.fields if it's defined to make
- # sure validation isn't skipped on that field.
- if form._meta.fields:
- if isinstance(form._meta.fields, tuple):
- form._meta.fields = list(form._meta.fields)
- form._meta.fields.append(self.fk.name)
-
- def get_unique_error_message(self, unique_check):
- unique_check = [field for field in unique_check if field != self.fk.name]
- return super(BaseInlineFormSet, self).get_unique_error_message(unique_check)
-
-
-def _get_foreign_key(parent_model, model, fk_name=None, can_fail=False):
- """
- Finds and returns the ForeignKey from model to parent if there is one
- (returns None if can_fail is True and no such field exists). If fk_name is
- provided, assume it is the name of the ForeignKey field. Unles can_fail is
- True, an exception is raised if there is no ForeignKey from model to
- parent_model.
- """
- # avoid circular import
- from django.db.models import ForeignKey
- opts = model._meta
- if fk_name:
- fks_to_parent = [f for f in opts.fields if f.name == fk_name]
- if len(fks_to_parent) == 1:
- fk = fks_to_parent[0]
- if not isinstance(fk, ForeignKey) or \
- (fk.rel.to != parent_model and
- fk.rel.to not in parent_model._meta.get_parent_list()):
- raise Exception("fk_name '%s' is not a ForeignKey to %s" % (fk_name, parent_model))
- elif len(fks_to_parent) == 0:
- raise Exception("%s has no field named '%s'" % (model, fk_name))
- else:
- # Try to discover what the ForeignKey from model to parent_model is
- fks_to_parent = [
- f for f in opts.fields
- if isinstance(f, ForeignKey)
- and (f.rel.to == parent_model
- or f.rel.to in parent_model._meta.get_parent_list())
- ]
- if len(fks_to_parent) == 1:
- fk = fks_to_parent[0]
- elif len(fks_to_parent) == 0:
- if can_fail:
- return
- raise Exception("%s has no ForeignKey to %s" % (model, parent_model))
- else:
- raise Exception("%s has more than 1 ForeignKey to %s" % (model, parent_model))
- return fk
-
-
-def inlineformset_factory(parent_model, model, form=ModelForm,
- formset=BaseInlineFormSet, fk_name=None,
- fields=None, exclude=None,
- extra=3, can_order=False, can_delete=True, max_num=None,
- formfield_callback=None):
- """
- Returns an ``InlineFormSet`` for the given kwargs.
-
- You must provide ``fk_name`` if ``model`` has more than one ``ForeignKey``
- to ``parent_model``.
- """
- fk = _get_foreign_key(parent_model, model, fk_name=fk_name)
- # enforce a max_num=1 when the foreign key to the parent model is unique.
- if fk.unique:
- max_num = 1
- kwargs = {
- 'form': form,
- 'formfield_callback': formfield_callback,
- 'formset': formset,
- 'extra': extra,
- 'can_delete': can_delete,
- 'can_order': can_order,
- 'fields': fields,
- 'exclude': exclude,
- 'max_num': max_num,
- }
- FormSet = modelformset_factory(model, **kwargs)
- FormSet.fk = fk
- return FormSet
-
-
-# Fields #####################################################################
-
-class InlineForeignKeyHiddenInput(HiddenInput):
- def _has_changed(self, initial, data):
- return False
-
-class InlineForeignKeyField(Field):
- """
- A basic integer field that deals with validating the given value to a
- given parent instance in an inline.
- """
- default_error_messages = {
- 'invalid_choice': _(u'The inline foreign key did not match the parent instance primary key.'),
- }
-
- def __init__(self, parent_instance, *args, **kwargs):
- self.parent_instance = parent_instance
- self.pk_field = kwargs.pop("pk_field", False)
- self.to_field = kwargs.pop("to_field", None)
- if self.parent_instance is not None:
- if self.to_field:
- kwargs["initial"] = getattr(self.parent_instance, self.to_field)
- else:
- kwargs["initial"] = self.parent_instance.pk
- kwargs["required"] = False
- kwargs["widget"] = InlineForeignKeyHiddenInput
- super(InlineForeignKeyField, self).__init__(*args, **kwargs)
-
- def clean(self, value):
- if value in EMPTY_VALUES:
- if self.pk_field:
- return None
- # if there is no value act as we did before.
- return self.parent_instance
- # ensure the we compare the values as equal types.
- if self.to_field:
- orig = getattr(self.parent_instance, self.to_field)
- else:
- orig = self.parent_instance.pk
- if force_unicode(value) != force_unicode(orig):
- raise ValidationError(self.error_messages['invalid_choice'])
- return self.parent_instance
-
-class ModelChoiceIterator(object):
- def __init__(self, field):
- self.field = field
- self.queryset = field.queryset
-
- def __iter__(self):
- if self.field.empty_label is not None:
- yield (u"", self.field.empty_label)
- if self.field.cache_choices:
- if self.field.choice_cache is None:
- self.field.choice_cache = [
- self.choice(obj) for obj in self.queryset.all()
- ]
- for choice in self.field.choice_cache:
- yield choice
- else:
- for obj in self.queryset.all():
- yield self.choice(obj)
-
- def __len__(self):
- return len(self.queryset)
-
- def choice(self, obj):
- return (self.field.prepare_value(obj), self.field.label_from_instance(obj))
-
-class ModelChoiceField(ChoiceField):
- """A ChoiceField whose choices are a model QuerySet."""
- # This class is a subclass of ChoiceField for purity, but it doesn't
- # actually use any of ChoiceField's implementation.
- default_error_messages = {
- 'invalid_choice': _(u'Select a valid choice. That choice is not one of'
- u' the available choices.'),
- }
-
- def __init__(self, queryset, empty_label=u"---------", cache_choices=False,
- required=True, widget=None, label=None, initial=None,
- help_text=None, to_field_name=None, *args, **kwargs):
- if required and (initial is not None):
- self.empty_label = None
- else:
- self.empty_label = empty_label
- self.cache_choices = cache_choices
-
- # Call Field instead of ChoiceField __init__() because we don't need
- # ChoiceField.__init__().
- Field.__init__(self, required, widget, label, initial, help_text,
- *args, **kwargs)
- self.queryset = queryset
- self.choice_cache = None
- self.to_field_name = to_field_name
-
- def __deepcopy__(self, memo):
- result = super(ChoiceField, self).__deepcopy__(memo)
- # Need to force a new ModelChoiceIterator to be created, bug #11183
- result.queryset = result.queryset
- return result
-
- def _get_queryset(self):
- return self._queryset
-
- def _set_queryset(self, queryset):
- self._queryset = queryset
- self.widget.choices = self.choices
-
- queryset = property(_get_queryset, _set_queryset)
-
- # this method will be used to create object labels by the QuerySetIterator.
- # Override it to customize the label.
- def label_from_instance(self, obj):
- """
- This method is used to convert objects into strings; it's used to
- generate the labels for the choices presented by this object. Subclasses
- can override this method to customize the display of the choices.
- """
- return smart_unicode(obj)
-
- def _get_choices(self):
- # If self._choices is set, then somebody must have manually set
- # the property self.choices. In this case, just return self._choices.
- if hasattr(self, '_choices'):
- return self._choices
-
- # Otherwise, execute the QuerySet in self.queryset to determine the
- # choices dynamically. Return a fresh ModelChoiceIterator that has not been
- # consumed. Note that we're instantiating a new ModelChoiceIterator *each*
- # time _get_choices() is called (and, thus, each time self.choices is
- # accessed) so that we can ensure the QuerySet has not been consumed. This
- # construct might look complicated but it allows for lazy evaluation of
- # the queryset.
- return ModelChoiceIterator(self)
-
- choices = property(_get_choices, ChoiceField._set_choices)
-
- def prepare_value(self, value):
- if hasattr(value, '_meta'):
- if self.to_field_name:
- return value.serializable_value(self.to_field_name)
- else:
- return value.pk
- return super(ModelChoiceField, self).prepare_value(value)
-
- def to_python(self, value):
- if value in EMPTY_VALUES:
- return None
- try:
- key = self.to_field_name or 'pk'
- value = self.queryset.get(**{key: value})
- except (ValueError, self.queryset.model.DoesNotExist):
- raise ValidationError(self.error_messages['invalid_choice'])
- return value
-
- def validate(self, value):
- return Field.validate(self, value)
-
-class ModelMultipleChoiceField(ModelChoiceField):
- """A MultipleChoiceField whose choices are a model QuerySet."""
- widget = SelectMultiple
- hidden_widget = MultipleHiddenInput
- default_error_messages = {
- 'list': _(u'Enter a list of values.'),
- 'invalid_choice': _(u'Select a valid choice. %s is not one of the'
- u' available choices.'),
- 'invalid_pk_value': _(u'"%s" is not a valid value for a primary key.')
- }
-
- def __init__(self, queryset, cache_choices=False, required=True,
- widget=None, label=None, initial=None,
- help_text=None, *args, **kwargs):
- super(ModelMultipleChoiceField, self).__init__(queryset, None,
- cache_choices, required, widget, label, initial, help_text,
- *args, **kwargs)
-
- def clean(self, value):
- if self.required and not value:
- raise ValidationError(self.error_messages['required'])
- elif not self.required and not value:
- return []
- if not isinstance(value, (list, tuple)):
- raise ValidationError(self.error_messages['list'])
- for pk in value:
- try:
- self.queryset.filter(pk=pk)
- except ValueError:
- raise ValidationError(self.error_messages['invalid_pk_value'] % pk)
- qs = self.queryset.filter(pk__in=value)
- pks = set([force_unicode(o.pk) for o in qs])
- for val in value:
- if force_unicode(val) not in pks:
- raise ValidationError(self.error_messages['invalid_choice'] % val)
- # Since this overrides the inherited ModelChoiceField.clean
- # we run custom validators here
- self.run_validators(value)
- return qs
-
- def prepare_value(self, value):
- if hasattr(value, '__iter__'):
- return [super(ModelMultipleChoiceField, self).prepare_value(v) for v in value]
- return super(ModelMultipleChoiceField, self).prepare_value(value)
diff --git a/parts/django/django/forms/util.py b/parts/django/django/forms/util.py
deleted file mode 100644
index 1a1d823..0000000
--- a/parts/django/django/forms/util.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from django.utils.html import conditional_escape
-from django.utils.encoding import StrAndUnicode, force_unicode
-from django.utils.safestring import mark_safe
-
-# Import ValidationError so that it can be imported from this
-# module to maintain backwards compatibility.
-from django.core.exceptions import ValidationError
-
-def flatatt(attrs):
- """
- Convert a dictionary of attributes to a single string.
- The returned string will contain a leading space followed by key="value",
- XML-style pairs. It is assumed that the keys do not need to be XML-escaped.
- If the passed dictionary is empty, then return an empty string.
- """
- return u''.join([u' %s="%s"' % (k, conditional_escape(v)) for k, v in attrs.items()])
-
-class ErrorDict(dict, StrAndUnicode):
- """
- A collection of errors that knows how to display itself in various formats.
-
- The dictionary keys are the field names, and the values are the errors.
- """
- def __unicode__(self):
- return self.as_ul()
-
- def as_ul(self):
- if not self: return u''
- return mark_safe(u'<ul class="errorlist">%s</ul>'
- % ''.join([u'<li>%s%s</li>' % (k, force_unicode(v))
- for k, v in self.items()]))
-
- def as_text(self):
- return u'\n'.join([u'* %s\n%s' % (k, u'\n'.join([u' * %s' % force_unicode(i) for i in v])) for k, v in self.items()])
-
-class ErrorList(list, StrAndUnicode):
- """
- A collection of errors that knows how to display itself in various formats.
- """
- def __unicode__(self):
- return self.as_ul()
-
- def as_ul(self):
- if not self: return u''
- return mark_safe(u'<ul class="errorlist">%s</ul>'
- % ''.join([u'<li>%s</li>' % conditional_escape(force_unicode(e)) for e in self]))
-
- def as_text(self):
- if not self: return u''
- return u'\n'.join([u'* %s' % force_unicode(e) for e in self])
-
- def __repr__(self):
- return repr([force_unicode(e) for e in self])
-
diff --git a/parts/django/django/forms/widgets.py b/parts/django/django/forms/widgets.py
deleted file mode 100644
index 0573a6c..0000000
--- a/parts/django/django/forms/widgets.py
+++ /dev/null
@@ -1,785 +0,0 @@
-"""
-HTML Widget classes
-"""
-
-import django.utils.copycompat as copy
-from itertools import chain
-from django.conf import settings
-from django.utils.datastructures import MultiValueDict, MergeDict
-from django.utils.html import escape, conditional_escape
-from django.utils.translation import ugettext
-from django.utils.encoding import StrAndUnicode, force_unicode
-from django.utils.safestring import mark_safe
-from django.utils import datetime_safe, formats
-import time
-import datetime
-from util import flatatt
-from urlparse import urljoin
-
-__all__ = (
- 'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'PasswordInput',
- 'HiddenInput', 'MultipleHiddenInput',
- 'FileInput', 'DateInput', 'DateTimeInput', 'TimeInput', 'Textarea', 'CheckboxInput',
- 'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
- 'CheckboxSelectMultiple', 'MultiWidget',
- 'SplitDateTimeWidget',
-)
-
-MEDIA_TYPES = ('css','js')
-
-class Media(StrAndUnicode):
- def __init__(self, media=None, **kwargs):
- if media:
- media_attrs = media.__dict__
- else:
- media_attrs = kwargs
-
- self._css = {}
- self._js = []
-
- for name in MEDIA_TYPES:
- getattr(self, 'add_' + name)(media_attrs.get(name, None))
-
- # Any leftover attributes must be invalid.
- # if media_attrs != {}:
- # raise TypeError("'class Media' has invalid attribute(s): %s" % ','.join(media_attrs.keys()))
-
- def __unicode__(self):
- return self.render()
-
- def render(self):
- return mark_safe(u'\n'.join(chain(*[getattr(self, 'render_' + name)() for name in MEDIA_TYPES])))
-
- def render_js(self):
- return [u'<script type="text/javascript" src="%s"></script>' % self.absolute_path(path) for path in self._js]
-
- def render_css(self):
- # To keep rendering order consistent, we can't just iterate over items().
- # We need to sort the keys, and iterate over the sorted list.
- media = self._css.keys()
- media.sort()
- return chain(*[
- [u'<link href="%s" type="text/css" media="%s" rel="stylesheet" />' % (self.absolute_path(path), medium)
- for path in self._css[medium]]
- for medium in media])
-
- def absolute_path(self, path):
- if path.startswith(u'http://') or path.startswith(u'https://') or path.startswith(u'/'):
- return path
- return urljoin(settings.MEDIA_URL,path)
-
- def __getitem__(self, name):
- "Returns a Media object that only contains media of the given type"
- if name in MEDIA_TYPES:
- return Media(**{str(name): getattr(self, '_' + name)})
- raise KeyError('Unknown media type "%s"' % name)
-
- def add_js(self, data):
- if data:
- for path in data:
- if path not in self._js:
- self._js.append(path)
-
- def add_css(self, data):
- if data:
- for medium, paths in data.items():
- for path in paths:
- if not self._css.get(medium) or path not in self._css[medium]:
- self._css.setdefault(medium, []).append(path)
-
- def __add__(self, other):
- combined = Media()
- for name in MEDIA_TYPES:
- getattr(combined, 'add_' + name)(getattr(self, '_' + name, None))
- getattr(combined, 'add_' + name)(getattr(other, '_' + name, None))
- return combined
-
-def media_property(cls):
- def _media(self):
- # Get the media property of the superclass, if it exists
- if hasattr(super(cls, self), 'media'):
- base = super(cls, self).media
- else:
- base = Media()
-
- # Get the media definition for this class
- definition = getattr(cls, 'Media', None)
- if definition:
- extend = getattr(definition, 'extend', True)
- if extend:
- if extend == True:
- m = base
- else:
- m = Media()
- for medium in extend:
- m = m + base[medium]
- return m + Media(definition)
- else:
- return Media(definition)
- else:
- return base
- return property(_media)
-
-class MediaDefiningClass(type):
- "Metaclass for classes that can have media definitions"
- def __new__(cls, name, bases, attrs):
- new_class = super(MediaDefiningClass, cls).__new__(cls, name, bases,
- attrs)
- if 'media' not in attrs:
- new_class.media = media_property(new_class)
- return new_class
-
-class Widget(object):
- __metaclass__ = MediaDefiningClass
- is_hidden = False # Determines whether this corresponds to an <input type="hidden">.
- needs_multipart_form = False # Determines does this widget need multipart-encrypted form
- is_localized = False
-
- def __init__(self, attrs=None):
- if attrs is not None:
- self.attrs = attrs.copy()
- else:
- self.attrs = {}
-
- def __deepcopy__(self, memo):
- obj = copy.copy(self)
- obj.attrs = self.attrs.copy()
- memo[id(self)] = obj
- return obj
-
- def render(self, name, value, attrs=None):
- """
- Returns this Widget rendered as HTML, as a Unicode string.
-
- The 'value' given is not guaranteed to be valid input, so subclass
- implementations should program defensively.
- """
- raise NotImplementedError
-
- def build_attrs(self, extra_attrs=None, **kwargs):
- "Helper function for building an attribute dictionary."
- attrs = dict(self.attrs, **kwargs)
- if extra_attrs:
- attrs.update(extra_attrs)
- return attrs
-
- def value_from_datadict(self, data, files, name):
- """
- Given a dictionary of data and this widget's name, returns the value
- of this widget. Returns None if it's not provided.
- """
- return data.get(name, None)
-
- def _has_changed(self, initial, data):
- """
- Return True if data differs from initial.
- """
- # For purposes of seeing whether something has changed, None is
- # the same as an empty string, if the data or inital value we get
- # is None, replace it w/ u''.
- if data is None:
- data_value = u''
- else:
- data_value = data
- if initial is None:
- initial_value = u''
- else:
- initial_value = initial
- if force_unicode(initial_value) != force_unicode(data_value):
- return True
- return False
-
- def id_for_label(self, id_):
- """
- Returns the HTML ID attribute of this Widget for use by a <label>,
- given the ID of the field. Returns None if no ID is available.
-
- This hook is necessary because some widgets have multiple HTML
- elements and, thus, multiple IDs. In that case, this method should
- return an ID value that corresponds to the first ID in the widget's
- tags.
- """
- return id_
- id_for_label = classmethod(id_for_label)
-
-class Input(Widget):
- """
- Base class for all <input> widgets (except type='checkbox' and
- type='radio', which are special).
- """
- input_type = None # Subclasses must define this.
-
- def _format_value(self, value):
- if self.is_localized:
- return formats.localize_input(value)
- return value
-
- def render(self, name, value, attrs=None):
- if value is None:
- value = ''
- final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
- if value != '':
- # Only add the 'value' attribute if a value is non-empty.
- final_attrs['value'] = force_unicode(self._format_value(value))
- return mark_safe(u'<input%s />' % flatatt(final_attrs))
-
-class TextInput(Input):
- input_type = 'text'
-
-class PasswordInput(Input):
- input_type = 'password'
-
- def __init__(self, attrs=None, render_value=True):
- super(PasswordInput, self).__init__(attrs)
- self.render_value = render_value
-
- def render(self, name, value, attrs=None):
- if not self.render_value: value=None
- return super(PasswordInput, self).render(name, value, attrs)
-
-class HiddenInput(Input):
- input_type = 'hidden'
- is_hidden = True
-
-class MultipleHiddenInput(HiddenInput):
- """
- A widget that handles <input type="hidden"> for fields that have a list
- of values.
- """
- def __init__(self, attrs=None, choices=()):
- super(MultipleHiddenInput, self).__init__(attrs)
- # choices can be any iterable
- self.choices = choices
-
- def render(self, name, value, attrs=None, choices=()):
- if value is None: value = []
- final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
- id_ = final_attrs.get('id', None)
- inputs = []
- for i, v in enumerate(value):
- input_attrs = dict(value=force_unicode(v), **final_attrs)
- if id_:
- # An ID attribute was given. Add a numeric index as a suffix
- # so that the inputs don't all have the same ID attribute.
- input_attrs['id'] = '%s_%s' % (id_, i)
- inputs.append(u'<input%s />' % flatatt(input_attrs))
- return mark_safe(u'\n'.join(inputs))
-
- def value_from_datadict(self, data, files, name):
- if isinstance(data, (MultiValueDict, MergeDict)):
- return data.getlist(name)
- return data.get(name, None)
-
-class FileInput(Input):
- input_type = 'file'
- needs_multipart_form = True
-
- def render(self, name, value, attrs=None):
- return super(FileInput, self).render(name, None, attrs=attrs)
-
- def value_from_datadict(self, data, files, name):
- "File widgets take data from FILES, not POST"
- return files.get(name, None)
-
- def _has_changed(self, initial, data):
- if data is None:
- return False
- return True
-
-class Textarea(Widget):
- def __init__(self, attrs=None):
- # The 'rows' and 'cols' attributes are required for HTML correctness.
- default_attrs = {'cols': '40', 'rows': '10'}
- if attrs:
- default_attrs.update(attrs)
- super(Textarea, self).__init__(default_attrs)
-
- def render(self, name, value, attrs=None):
- if value is None: value = ''
- final_attrs = self.build_attrs(attrs, name=name)
- return mark_safe(u'<textarea%s>%s</textarea>' % (flatatt(final_attrs),
- conditional_escape(force_unicode(value))))
-
-class DateInput(Input):
- input_type = 'text'
- format = '%Y-%m-%d' # '2006-10-25'
-
- def __init__(self, attrs=None, format=None):
- super(DateInput, self).__init__(attrs)
- if format:
- self.format = format
- self.manual_format = True
- else:
- self.format = formats.get_format('DATE_INPUT_FORMATS')[0]
- self.manual_format = False
-
- def _format_value(self, value):
- if self.is_localized and not self.manual_format:
- return formats.localize_input(value)
- elif hasattr(value, 'strftime'):
- value = datetime_safe.new_date(value)
- return value.strftime(self.format)
- return value
-
- def _has_changed(self, initial, data):
- # If our field has show_hidden_initial=True, initial will be a string
- # formatted by HiddenInput using formats.localize_input, which is not
- # necessarily the format used for this widget. Attempt to convert it.
- try:
- input_format = formats.get_format('DATE_INPUT_FORMATS')[0]
- initial = datetime.date(*time.strptime(initial, input_format)[:3])
- except (TypeError, ValueError):
- pass
- return super(DateInput, self)._has_changed(self._format_value(initial), data)
-
-class DateTimeInput(Input):
- input_type = 'text'
- format = '%Y-%m-%d %H:%M:%S' # '2006-10-25 14:30:59'
-
- def __init__(self, attrs=None, format=None):
- super(DateTimeInput, self).__init__(attrs)
- if format:
- self.format = format
- self.manual_format = True
- else:
- self.format = formats.get_format('DATETIME_INPUT_FORMATS')[0]
- self.manual_format = False
-
- def _format_value(self, value):
- if self.is_localized and not self.manual_format:
- return formats.localize_input(value)
- elif hasattr(value, 'strftime'):
- value = datetime_safe.new_datetime(value)
- return value.strftime(self.format)
- return value
-
- def _has_changed(self, initial, data):
- # If our field has show_hidden_initial=True, initial will be a string
- # formatted by HiddenInput using formats.localize_input, which is not
- # necessarily the format used for this widget. Attempt to convert it.
- try:
- input_format = formats.get_format('DATETIME_INPUT_FORMATS')[0]
- initial = datetime.datetime(*time.strptime(initial, input_format)[:6])
- except (TypeError, ValueError):
- pass
- return super(DateTimeInput, self)._has_changed(self._format_value(initial), data)
-
-class TimeInput(Input):
- input_type = 'text'
- format = '%H:%M:%S' # '14:30:59'
-
- def __init__(self, attrs=None, format=None):
- super(TimeInput, self).__init__(attrs)
- if format:
- self.format = format
- self.manual_format = True
- else:
- self.format = formats.get_format('TIME_INPUT_FORMATS')[0]
- self.manual_format = False
-
- def _format_value(self, value):
- if self.is_localized and not self.manual_format:
- return formats.localize_input(value)
- elif hasattr(value, 'strftime'):
- return value.strftime(self.format)
- return value
-
- def _has_changed(self, initial, data):
- # If our field has show_hidden_initial=True, initial will be a string
- # formatted by HiddenInput using formats.localize_input, which is not
- # necessarily the format used for this widget. Attempt to convert it.
- try:
- input_format = formats.get_format('TIME_INPUT_FORMATS')[0]
- initial = datetime.time(*time.strptime(initial, input_format)[3:6])
- except (TypeError, ValueError):
- pass
- return super(TimeInput, self)._has_changed(self._format_value(initial), data)
-
-class CheckboxInput(Widget):
- def __init__(self, attrs=None, check_test=bool):
- super(CheckboxInput, self).__init__(attrs)
- # check_test is a callable that takes a value and returns True
- # if the checkbox should be checked for that value.
- self.check_test = check_test
-
- def render(self, name, value, attrs=None):
- final_attrs = self.build_attrs(attrs, type='checkbox', name=name)
- try:
- result = self.check_test(value)
- except: # Silently catch exceptions
- result = False
- if result:
- final_attrs['checked'] = 'checked'
- if value not in ('', True, False, None):
- # Only add the 'value' attribute if a value is non-empty.
- final_attrs['value'] = force_unicode(value)
- return mark_safe(u'<input%s />' % flatatt(final_attrs))
-
- def value_from_datadict(self, data, files, name):
- if name not in data:
- # A missing value means False because HTML form submission does not
- # send results for unselected checkboxes.
- return False
- value = data.get(name)
- # Translate true and false strings to boolean values.
- values = {'true': True, 'false': False}
- if isinstance(value, basestring):
- value = values.get(value.lower(), value)
- return value
-
- def _has_changed(self, initial, data):
- # Sometimes data or initial could be None or u'' which should be the
- # same thing as False.
- return bool(initial) != bool(data)
-
-class Select(Widget):
- def __init__(self, attrs=None, choices=()):
- super(Select, self).__init__(attrs)
- # choices can be any iterable, but we may need to render this widget
- # multiple times. Thus, collapse it into a list so it can be consumed
- # more than once.
- self.choices = list(choices)
-
- def render(self, name, value, attrs=None, choices=()):
- if value is None: value = ''
- final_attrs = self.build_attrs(attrs, name=name)
- output = [u'<select%s>' % flatatt(final_attrs)]
- options = self.render_options(choices, [value])
- if options:
- output.append(options)
- output.append(u'</select>')
- return mark_safe(u'\n'.join(output))
-
- def render_option(self, selected_choices, option_value, option_label):
- option_value = force_unicode(option_value)
- selected_html = (option_value in selected_choices) and u' selected="selected"' or ''
- return u'<option value="%s"%s>%s</option>' % (
- escape(option_value), selected_html,
- conditional_escape(force_unicode(option_label)))
-
- def render_options(self, choices, selected_choices):
- # Normalize to strings.
- selected_choices = set([force_unicode(v) for v in selected_choices])
- output = []
- for option_value, option_label in chain(self.choices, choices):
- if isinstance(option_label, (list, tuple)):
- output.append(u'<optgroup label="%s">' % escape(force_unicode(option_value)))
- for option in option_label:
- output.append(self.render_option(selected_choices, *option))
- output.append(u'</optgroup>')
- else:
- output.append(self.render_option(selected_choices, option_value, option_label))
- return u'\n'.join(output)
-
-class NullBooleanSelect(Select):
- """
- A Select Widget intended to be used with NullBooleanField.
- """
- def __init__(self, attrs=None):
- choices = ((u'1', ugettext('Unknown')), (u'2', ugettext('Yes')), (u'3', ugettext('No')))
- super(NullBooleanSelect, self).__init__(attrs, choices)
-
- def render(self, name, value, attrs=None, choices=()):
- try:
- value = {True: u'2', False: u'3', u'2': u'2', u'3': u'3'}[value]
- except KeyError:
- value = u'1'
- return super(NullBooleanSelect, self).render(name, value, attrs, choices)
-
- def value_from_datadict(self, data, files, name):
- value = data.get(name, None)
- return {u'2': True,
- True: True,
- 'True': True,
- u'3': False,
- 'False': False,
- False: False}.get(value, None)
-
- def _has_changed(self, initial, data):
- # For a NullBooleanSelect, None (unknown) and False (No)
- # are not the same
- if initial is not None:
- initial = bool(initial)
- if data is not None:
- data = bool(data)
- return initial != data
-
-class SelectMultiple(Select):
- def render(self, name, value, attrs=None, choices=()):
- if value is None: value = []
- final_attrs = self.build_attrs(attrs, name=name)
- output = [u'<select multiple="multiple"%s>' % flatatt(final_attrs)]
- options = self.render_options(choices, value)
- if options:
- output.append(options)
- output.append('</select>')
- return mark_safe(u'\n'.join(output))
-
- def value_from_datadict(self, data, files, name):
- if isinstance(data, (MultiValueDict, MergeDict)):
- return data.getlist(name)
- return data.get(name, None)
-
- def _has_changed(self, initial, data):
- if initial is None:
- initial = []
- if data is None:
- data = []
- if len(initial) != len(data):
- return True
- initial_set = set([force_unicode(value) for value in initial])
- data_set = set([force_unicode(value) for value in data])
- return data_set != initial_set
-
-class RadioInput(StrAndUnicode):
- """
- An object used by RadioFieldRenderer that represents a single
- <input type='radio'>.
- """
-
- def __init__(self, name, value, attrs, choice, index):
- self.name, self.value = name, value
- self.attrs = attrs
- self.choice_value = force_unicode(choice[0])
- self.choice_label = force_unicode(choice[1])
- self.index = index
-
- def __unicode__(self):
- if 'id' in self.attrs:
- label_for = ' for="%s_%s"' % (self.attrs['id'], self.index)
- else:
- label_for = ''
- choice_label = conditional_escape(force_unicode(self.choice_label))
- return mark_safe(u'<label%s>%s %s</label>' % (label_for, self.tag(), choice_label))
-
- def is_checked(self):
- return self.value == self.choice_value
-
- def tag(self):
- if 'id' in self.attrs:
- self.attrs['id'] = '%s_%s' % (self.attrs['id'], self.index)
- final_attrs = dict(self.attrs, type='radio', name=self.name, value=self.choice_value)
- if self.is_checked():
- final_attrs['checked'] = 'checked'
- return mark_safe(u'<input%s />' % flatatt(final_attrs))
-
-class RadioFieldRenderer(StrAndUnicode):
- """
- An object used by RadioSelect to enable customization of radio widgets.
- """
-
- def __init__(self, name, value, attrs, choices):
- self.name, self.value, self.attrs = name, value, attrs
- self.choices = choices
-
- def __iter__(self):
- for i, choice in enumerate(self.choices):
- yield RadioInput(self.name, self.value, self.attrs.copy(), choice, i)
-
- def __getitem__(self, idx):
- choice = self.choices[idx] # Let the IndexError propogate
- return RadioInput(self.name, self.value, self.attrs.copy(), choice, idx)
-
- def __unicode__(self):
- return self.render()
-
- def render(self):
- """Outputs a <ul> for this set of radio fields."""
- return mark_safe(u'<ul>\n%s\n</ul>' % u'\n'.join([u'<li>%s</li>'
- % force_unicode(w) for w in self]))
-
-class RadioSelect(Select):
- renderer = RadioFieldRenderer
-
- def __init__(self, *args, **kwargs):
- # Override the default renderer if we were passed one.
- renderer = kwargs.pop('renderer', None)
- if renderer:
- self.renderer = renderer
- super(RadioSelect, self).__init__(*args, **kwargs)
-
- def get_renderer(self, name, value, attrs=None, choices=()):
- """Returns an instance of the renderer."""
- if value is None: value = ''
- str_value = force_unicode(value) # Normalize to string.
- final_attrs = self.build_attrs(attrs)
- choices = list(chain(self.choices, choices))
- return self.renderer(name, str_value, final_attrs, choices)
-
- def render(self, name, value, attrs=None, choices=()):
- return self.get_renderer(name, value, attrs, choices).render()
-
- def id_for_label(self, id_):
- # RadioSelect is represented by multiple <input type="radio"> fields,
- # each of which has a distinct ID. The IDs are made distinct by a "_X"
- # suffix, where X is the zero-based index of the radio field. Thus,
- # the label for a RadioSelect should reference the first one ('_0').
- if id_:
- id_ += '_0'
- return id_
- id_for_label = classmethod(id_for_label)
-
-class CheckboxSelectMultiple(SelectMultiple):
- def render(self, name, value, attrs=None, choices=()):
- if value is None: value = []
- has_id = attrs and 'id' in attrs
- final_attrs = self.build_attrs(attrs, name=name)
- output = [u'<ul>']
- # Normalize to strings
- str_values = set([force_unicode(v) for v in value])
- for i, (option_value, option_label) in enumerate(chain(self.choices, choices)):
- # If an ID attribute was given, add a numeric index as a suffix,
- # so that the checkboxes don't all have the same ID attribute.
- if has_id:
- final_attrs = dict(final_attrs, id='%s_%s' % (attrs['id'], i))
- label_for = u' for="%s"' % final_attrs['id']
- else:
- label_for = ''
-
- cb = CheckboxInput(final_attrs, check_test=lambda value: value in str_values)
- option_value = force_unicode(option_value)
- rendered_cb = cb.render(name, option_value)
- option_label = conditional_escape(force_unicode(option_label))
- output.append(u'<li><label%s>%s %s</label></li>' % (label_for, rendered_cb, option_label))
- output.append(u'</ul>')
- return mark_safe(u'\n'.join(output))
-
- def id_for_label(self, id_):
- # See the comment for RadioSelect.id_for_label()
- if id_:
- id_ += '_0'
- return id_
- id_for_label = classmethod(id_for_label)
-
-class MultiWidget(Widget):
- """
- A widget that is composed of multiple widgets.
-
- Its render() method is different than other widgets', because it has to
- figure out how to split a single value for display in multiple widgets.
- The ``value`` argument can be one of two things:
-
- * A list.
- * A normal value (e.g., a string) that has been "compressed" from
- a list of values.
-
- In the second case -- i.e., if the value is NOT a list -- render() will
- first "decompress" the value into a list before rendering it. It does so by
- calling the decompress() method, which MultiWidget subclasses must
- implement. This method takes a single "compressed" value and returns a
- list.
-
- When render() does its HTML rendering, each value in the list is rendered
- with the corresponding widget -- the first value is rendered in the first
- widget, the second value is rendered in the second widget, etc.
-
- Subclasses may implement format_output(), which takes the list of rendered
- widgets and returns a string of HTML that formats them any way you'd like.
-
- You'll probably want to use this class with MultiValueField.
- """
- def __init__(self, widgets, attrs=None):
- self.widgets = [isinstance(w, type) and w() or w for w in widgets]
- super(MultiWidget, self).__init__(attrs)
-
- def render(self, name, value, attrs=None):
- if self.is_localized:
- for widget in self.widgets:
- widget.is_localized = self.is_localized
- # value is a list of values, each corresponding to a widget
- # in self.widgets.
- if not isinstance(value, list):
- value = self.decompress(value)
- output = []
- final_attrs = self.build_attrs(attrs)
- id_ = final_attrs.get('id', None)
- for i, widget in enumerate(self.widgets):
- try:
- widget_value = value[i]
- except IndexError:
- widget_value = None
- if id_:
- final_attrs = dict(final_attrs, id='%s_%s' % (id_, i))
- output.append(widget.render(name + '_%s' % i, widget_value, final_attrs))
- return mark_safe(self.format_output(output))
-
- def id_for_label(self, id_):
- # See the comment for RadioSelect.id_for_label()
- if id_:
- id_ += '_0'
- return id_
- id_for_label = classmethod(id_for_label)
-
- def value_from_datadict(self, data, files, name):
- return [widget.value_from_datadict(data, files, name + '_%s' % i) for i, widget in enumerate(self.widgets)]
-
- def _has_changed(self, initial, data):
- if initial is None:
- initial = [u'' for x in range(0, len(data))]
- else:
- if not isinstance(initial, list):
- initial = self.decompress(initial)
- for widget, initial, data in zip(self.widgets, initial, data):
- if widget._has_changed(initial, data):
- return True
- return False
-
- def format_output(self, rendered_widgets):
- """
- Given a list of rendered widgets (as strings), returns a Unicode string
- representing the HTML for the whole lot.
-
- This hook allows you to format the HTML design of the widgets, if
- needed.
- """
- return u''.join(rendered_widgets)
-
- def decompress(self, value):
- """
- Returns a list of decompressed values for the given compressed value.
- The given value can be assumed to be valid, but not necessarily
- non-empty.
- """
- raise NotImplementedError('Subclasses must implement this method.')
-
- def _get_media(self):
- "Media for a multiwidget is the combination of all media of the subwidgets"
- media = Media()
- for w in self.widgets:
- media = media + w.media
- return media
- media = property(_get_media)
-
- def __deepcopy__(self, memo):
- obj = super(MultiWidget, self).__deepcopy__(memo)
- obj.widgets = copy.deepcopy(self.widgets)
- return obj
-
-class SplitDateTimeWidget(MultiWidget):
- """
- A Widget that splits datetime input into two <input type="text"> boxes.
- """
- date_format = DateInput.format
- time_format = TimeInput.format
-
- def __init__(self, attrs=None, date_format=None, time_format=None):
- widgets = (DateInput(attrs=attrs, format=date_format),
- TimeInput(attrs=attrs, format=time_format))
- super(SplitDateTimeWidget, self).__init__(widgets, attrs)
-
- def decompress(self, value):
- if value:
- return [value.date(), value.time().replace(microsecond=0)]
- return [None, None]
-
-class SplitHiddenDateTimeWidget(SplitDateTimeWidget):
- """
- A Widget that splits datetime input into two <input type="hidden"> inputs.
- """
- is_hidden = True
-
- def __init__(self, attrs=None, date_format=None, time_format=None):
- super(SplitHiddenDateTimeWidget, self).__init__(attrs, date_format, time_format)
- for widget in self.widgets:
- widget.input_type = 'hidden'
- widget.is_hidden = True
diff --git a/parts/django/django/http/__init__.py b/parts/django/django/http/__init__.py
deleted file mode 100644
index e585a71..0000000
--- a/parts/django/django/http/__init__.py
+++ /dev/null
@@ -1,496 +0,0 @@
-import os
-import re
-from Cookie import BaseCookie, SimpleCookie, CookieError
-from pprint import pformat
-from urllib import urlencode
-from urlparse import urljoin
-try:
- # The mod_python version is more efficient, so try importing it first.
- from mod_python.util import parse_qsl
-except ImportError:
- from cgi import parse_qsl
-
-from django.utils.datastructures import MultiValueDict, ImmutableList
-from django.utils.encoding import smart_str, iri_to_uri, force_unicode
-from django.http.multipartparser import MultiPartParser
-from django.conf import settings
-from django.core.files import uploadhandler
-from utils import *
-
-RESERVED_CHARS="!*'();:@&=+$,/?%#[]"
-
-absolute_http_url_re = re.compile(r"^https?://", re.I)
-
-class Http404(Exception):
- pass
-
-class HttpRequest(object):
- """A basic HTTP request."""
-
- # The encoding used in GET/POST dicts. None means use default setting.
- _encoding = None
- _upload_handlers = []
-
- def __init__(self):
- self.GET, self.POST, self.COOKIES, self.META, self.FILES = {}, {}, {}, {}, {}
- self.path = ''
- self.path_info = ''
- self.method = None
-
- def __repr__(self):
- return '<HttpRequest\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' % \
- (pformat(self.GET), pformat(self.POST), pformat(self.COOKIES),
- pformat(self.META))
-
- def get_host(self):
- """Returns the HTTP host using the environment or request headers."""
- # We try three options, in order of decreasing preference.
- if 'HTTP_X_FORWARDED_HOST' in self.META:
- host = self.META['HTTP_X_FORWARDED_HOST']
- elif 'HTTP_HOST' in self.META:
- host = self.META['HTTP_HOST']
- else:
- # Reconstruct the host using the algorithm from PEP 333.
- host = self.META['SERVER_NAME']
- server_port = str(self.META['SERVER_PORT'])
- if server_port != (self.is_secure() and '443' or '80'):
- host = '%s:%s' % (host, server_port)
- return host
-
- def get_full_path(self):
- return ''
-
- def build_absolute_uri(self, location=None):
- """
- Builds an absolute URI from the location and the variables available in
- this request. If no location is specified, the absolute URI is built on
- ``request.get_full_path()``.
- """
- if not location:
- location = self.get_full_path()
- if not absolute_http_url_re.match(location):
- current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http',
- self.get_host(), self.path)
- location = urljoin(current_uri, location)
- return iri_to_uri(location)
-
- def is_secure(self):
- return os.environ.get("HTTPS") == "on"
-
- def is_ajax(self):
- return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
-
- def _set_encoding(self, val):
- """
- Sets the encoding used for GET/POST accesses. If the GET or POST
- dictionary has already been created, it is removed and recreated on the
- next access (so that it is decoded correctly).
- """
- self._encoding = val
- if hasattr(self, '_get'):
- del self._get
- if hasattr(self, '_post'):
- del self._post
-
- def _get_encoding(self):
- return self._encoding
-
- encoding = property(_get_encoding, _set_encoding)
-
- def _initialize_handlers(self):
- self._upload_handlers = [uploadhandler.load_handler(handler, self)
- for handler in settings.FILE_UPLOAD_HANDLERS]
-
- def _set_upload_handlers(self, upload_handlers):
- if hasattr(self, '_files'):
- raise AttributeError("You cannot set the upload handlers after the upload has been processed.")
- self._upload_handlers = upload_handlers
-
- def _get_upload_handlers(self):
- if not self._upload_handlers:
- # If thre are no upload handlers defined, initialize them from settings.
- self._initialize_handlers()
- return self._upload_handlers
-
- upload_handlers = property(_get_upload_handlers, _set_upload_handlers)
-
- def parse_file_upload(self, META, post_data):
- """Returns a tuple of (POST QueryDict, FILES MultiValueDict)."""
- self.upload_handlers = ImmutableList(
- self.upload_handlers,
- warning = "You cannot alter upload handlers after the upload has been processed."
- )
- parser = MultiPartParser(META, post_data, self.upload_handlers, self.encoding)
- return parser.parse()
-
-class QueryDict(MultiValueDict):
- """
- A specialized MultiValueDict that takes a query string when initialized.
- This is immutable unless you create a copy of it.
-
- Values retrieved from this class are converted from the given encoding
- (DEFAULT_CHARSET by default) to unicode.
- """
- # These are both reset in __init__, but is specified here at the class
- # level so that unpickling will have valid values
- _mutable = True
- _encoding = None
-
- def __init__(self, query_string, mutable=False, encoding=None):
- MultiValueDict.__init__(self)
- if not encoding:
- # *Important*: do not import settings any earlier because of note
- # in core.handlers.modpython.
- from django.conf import settings
- encoding = settings.DEFAULT_CHARSET
- self.encoding = encoding
- for key, value in parse_qsl((query_string or ''), True): # keep_blank_values=True
- self.appendlist(force_unicode(key, encoding, errors='replace'),
- force_unicode(value, encoding, errors='replace'))
- self._mutable = mutable
-
- def _get_encoding(self):
- if self._encoding is None:
- # *Important*: do not import settings at the module level because
- # of the note in core.handlers.modpython.
- from django.conf import settings
- self._encoding = settings.DEFAULT_CHARSET
- return self._encoding
-
- def _set_encoding(self, value):
- self._encoding = value
-
- encoding = property(_get_encoding, _set_encoding)
-
- def _assert_mutable(self):
- if not self._mutable:
- raise AttributeError("This QueryDict instance is immutable")
-
- def __setitem__(self, key, value):
- self._assert_mutable()
- key = str_to_unicode(key, self.encoding)
- value = str_to_unicode(value, self.encoding)
- MultiValueDict.__setitem__(self, key, value)
-
- def __delitem__(self, key):
- self._assert_mutable()
- super(QueryDict, self).__delitem__(key)
-
- def __copy__(self):
- result = self.__class__('', mutable=True, encoding=self.encoding)
- for key, value in dict.items(self):
- dict.__setitem__(result, key, value)
- return result
-
- def __deepcopy__(self, memo):
- import django.utils.copycompat as copy
- result = self.__class__('', mutable=True, encoding=self.encoding)
- memo[id(self)] = result
- for key, value in dict.items(self):
- dict.__setitem__(result, copy.deepcopy(key, memo), copy.deepcopy(value, memo))
- return result
-
- def setlist(self, key, list_):
- self._assert_mutable()
- key = str_to_unicode(key, self.encoding)
- list_ = [str_to_unicode(elt, self.encoding) for elt in list_]
- MultiValueDict.setlist(self, key, list_)
-
- def setlistdefault(self, key, default_list=()):
- self._assert_mutable()
- if key not in self:
- self.setlist(key, default_list)
- return MultiValueDict.getlist(self, key)
-
- def appendlist(self, key, value):
- self._assert_mutable()
- key = str_to_unicode(key, self.encoding)
- value = str_to_unicode(value, self.encoding)
- MultiValueDict.appendlist(self, key, value)
-
- def update(self, other_dict):
- self._assert_mutable()
- f = lambda s: str_to_unicode(s, self.encoding)
- if hasattr(other_dict, 'lists'):
- for key, valuelist in other_dict.lists():
- for value in valuelist:
- MultiValueDict.update(self, {f(key): f(value)})
- else:
- d = dict([(f(k), f(v)) for k, v in other_dict.items()])
- MultiValueDict.update(self, d)
-
- def pop(self, key, *args):
- self._assert_mutable()
- return MultiValueDict.pop(self, key, *args)
-
- def popitem(self):
- self._assert_mutable()
- return MultiValueDict.popitem(self)
-
- def clear(self):
- self._assert_mutable()
- MultiValueDict.clear(self)
-
- def setdefault(self, key, default=None):
- self._assert_mutable()
- key = str_to_unicode(key, self.encoding)
- default = str_to_unicode(default, self.encoding)
- return MultiValueDict.setdefault(self, key, default)
-
- def copy(self):
- """Returns a mutable copy of this object."""
- return self.__deepcopy__({})
-
- def urlencode(self):
- output = []
- for k, list_ in self.lists():
- k = smart_str(k, self.encoding)
- output.extend([urlencode({k: smart_str(v, self.encoding)}) for v in list_])
- return '&'.join(output)
-
-class CompatCookie(SimpleCookie):
- """
- Cookie class that handles some issues with browser compatibility.
- """
- def value_encode(self, val):
- # Some browsers do not support quoted-string from RFC 2109,
- # including some versions of Safari and Internet Explorer.
- # These browsers split on ';', and some versions of Safari
- # are known to split on ', '. Therefore, we encode ';' and ','
-
- # SimpleCookie already does the hard work of encoding and decoding.
- # It uses octal sequences like '\\012' for newline etc.
- # and non-ASCII chars. We just make use of this mechanism, to
- # avoid introducing two encoding schemes which would be confusing
- # and especially awkward for javascript.
-
- # NB, contrary to Python docs, value_encode returns a tuple containing
- # (real val, encoded_val)
- val, encoded = super(CompatCookie, self).value_encode(val)
-
- encoded = encoded.replace(";", "\\073").replace(",","\\054")
- # If encoded now contains any quoted chars, we need double quotes
- # around the whole string.
- if "\\" in encoded and not encoded.startswith('"'):
- encoded = '"' + encoded + '"'
-
- return val, encoded
-
-def parse_cookie(cookie):
- if cookie == '':
- return {}
- if not isinstance(cookie, BaseCookie):
- try:
- c = CompatCookie()
- c.load(cookie)
- except CookieError:
- # Invalid cookie
- return {}
- else:
- c = cookie
- cookiedict = {}
- for key in c.keys():
- cookiedict[key] = c.get(key).value
- return cookiedict
-
-class BadHeaderError(ValueError):
- pass
-
-class HttpResponse(object):
- """A basic HTTP response, with content and dictionary-accessed headers."""
-
- status_code = 200
-
- def __init__(self, content='', mimetype=None, status=None,
- content_type=None):
- # _headers is a mapping of the lower-case name to the original case of
- # the header (required for working with legacy systems) and the header
- # value. Both the name of the header and its value are ASCII strings.
- self._headers = {}
- self._charset = settings.DEFAULT_CHARSET
- if mimetype:
- content_type = mimetype # For backwards compatibility
- if not content_type:
- content_type = "%s; charset=%s" % (settings.DEFAULT_CONTENT_TYPE,
- self._charset)
- if not isinstance(content, basestring) and hasattr(content, '__iter__'):
- self._container = content
- self._is_string = False
- else:
- self._container = [content]
- self._is_string = True
- self.cookies = CompatCookie()
- if status:
- self.status_code = status
-
- self['Content-Type'] = content_type
-
- def __str__(self):
- """Full HTTP message, including headers."""
- return '\n'.join(['%s: %s' % (key, value)
- for key, value in self._headers.values()]) \
- + '\n\n' + self.content
-
- def _convert_to_ascii(self, *values):
- """Converts all values to ascii strings."""
- for value in values:
- if isinstance(value, unicode):
- try:
- value = value.encode('us-ascii')
- except UnicodeError, e:
- e.reason += ', HTTP response headers must be in US-ASCII format'
- raise
- else:
- value = str(value)
- if '\n' in value or '\r' in value:
- raise BadHeaderError("Header values can't contain newlines (got %r)" % (value))
- yield value
-
- def __setitem__(self, header, value):
- header, value = self._convert_to_ascii(header, value)
- self._headers[header.lower()] = (header, value)
-
- def __delitem__(self, header):
- try:
- del self._headers[header.lower()]
- except KeyError:
- pass
-
- def __getitem__(self, header):
- return self._headers[header.lower()][1]
-
- def has_header(self, header):
- """Case-insensitive check for a header."""
- return self._headers.has_key(header.lower())
-
- __contains__ = has_header
-
- def items(self):
- return self._headers.values()
-
- def get(self, header, alternate):
- return self._headers.get(header.lower(), (None, alternate))[1]
-
- def set_cookie(self, key, value='', max_age=None, expires=None, path='/',
- domain=None, secure=False):
- self.cookies[key] = value
- if max_age is not None:
- self.cookies[key]['max-age'] = max_age
- if expires is not None:
- self.cookies[key]['expires'] = expires
- if path is not None:
- self.cookies[key]['path'] = path
- if domain is not None:
- self.cookies[key]['domain'] = domain
- if secure:
- self.cookies[key]['secure'] = True
-
- def delete_cookie(self, key, path='/', domain=None):
- self.set_cookie(key, max_age=0, path=path, domain=domain,
- expires='Thu, 01-Jan-1970 00:00:00 GMT')
-
- def _get_content(self):
- if self.has_header('Content-Encoding'):
- return ''.join(self._container)
- return smart_str(''.join(self._container), self._charset)
-
- def _set_content(self, value):
- self._container = [value]
- self._is_string = True
-
- content = property(_get_content, _set_content)
-
- def __iter__(self):
- self._iterator = iter(self._container)
- return self
-
- def next(self):
- chunk = self._iterator.next()
- if isinstance(chunk, unicode):
- chunk = chunk.encode(self._charset)
- return str(chunk)
-
- def close(self):
- if hasattr(self._container, 'close'):
- self._container.close()
-
- # The remaining methods partially implement the file-like object interface.
- # See http://docs.python.org/lib/bltin-file-objects.html
- def write(self, content):
- if not self._is_string:
- raise Exception("This %s instance is not writable" % self.__class__)
- self._container.append(content)
-
- def flush(self):
- pass
-
- def tell(self):
- if not self._is_string:
- raise Exception("This %s instance cannot tell its position" % self.__class__)
- return sum([len(chunk) for chunk in self._container])
-
-class HttpResponseRedirect(HttpResponse):
- status_code = 302
-
- def __init__(self, redirect_to):
- HttpResponse.__init__(self)
- self['Location'] = iri_to_uri(redirect_to)
-
-class HttpResponsePermanentRedirect(HttpResponse):
- status_code = 301
-
- def __init__(self, redirect_to):
- HttpResponse.__init__(self)
- self['Location'] = iri_to_uri(redirect_to)
-
-class HttpResponseNotModified(HttpResponse):
- status_code = 304
-
-class HttpResponseBadRequest(HttpResponse):
- status_code = 400
-
-class HttpResponseNotFound(HttpResponse):
- status_code = 404
-
-class HttpResponseForbidden(HttpResponse):
- status_code = 403
-
-class HttpResponseNotAllowed(HttpResponse):
- status_code = 405
-
- def __init__(self, permitted_methods):
- HttpResponse.__init__(self)
- self['Allow'] = ', '.join(permitted_methods)
-
-class HttpResponseGone(HttpResponse):
- status_code = 410
-
- def __init__(self, *args, **kwargs):
- HttpResponse.__init__(self, *args, **kwargs)
-
-class HttpResponseServerError(HttpResponse):
- status_code = 500
-
- def __init__(self, *args, **kwargs):
- HttpResponse.__init__(self, *args, **kwargs)
-
-# A backwards compatible alias for HttpRequest.get_host.
-def get_host(request):
- return request.get_host()
-
-# It's neither necessary nor appropriate to use
-# django.utils.encoding.smart_unicode for parsing URLs and form inputs. Thus,
-# this slightly more restricted function.
-def str_to_unicode(s, encoding):
- """
- Converts basestring objects to unicode, using the given encoding. Illegally
- encoded input characters are replaced with Unicode "unknown" codepoint
- (\ufffd).
-
- Returns any non-basestring objects without change.
- """
- if isinstance(s, str):
- return unicode(s, encoding, 'replace')
- else:
- return s
-
diff --git a/parts/django/django/http/multipartparser.py b/parts/django/django/http/multipartparser.py
deleted file mode 100644
index e45d5d1..0000000
--- a/parts/django/django/http/multipartparser.py
+++ /dev/null
@@ -1,638 +0,0 @@
-"""
-Multi-part parsing for file uploads.
-
-Exposes one class, ``MultiPartParser``, which feeds chunks of uploaded data to
-file upload handlers for processing.
-"""
-
-import cgi
-from django.conf import settings
-from django.core.exceptions import SuspiciousOperation
-from django.utils.datastructures import MultiValueDict
-from django.utils.encoding import force_unicode
-from django.utils.text import unescape_entities
-from django.core.files.uploadhandler import StopUpload, SkipFile, StopFutureHandlers
-
-__all__ = ('MultiPartParser', 'MultiPartParserError', 'InputStreamExhausted')
-
-class MultiPartParserError(Exception):
- pass
-
-class InputStreamExhausted(Exception):
- """
- No more reads are allowed from this device.
- """
- pass
-
-RAW = "raw"
-FILE = "file"
-FIELD = "field"
-
-class MultiPartParser(object):
- """
- A rfc2388 multipart/form-data parser.
-
- ``MultiValueDict.parse()`` reads the input stream in ``chunk_size`` chunks
- and returns a tuple of ``(MultiValueDict(POST), MultiValueDict(FILES))``. If
- """
- def __init__(self, META, input_data, upload_handlers, encoding=None):
- """
- Initialize the MultiPartParser object.
-
- :META:
- The standard ``META`` dictionary in Django request objects.
- :input_data:
- The raw post data, as a file-like object.
- :upload_handler:
- An UploadHandler instance that performs operations on the uploaded
- data.
- :encoding:
- The encoding with which to treat the incoming data.
- """
-
- #
- # Content-Type should containt multipart and the boundary information.
- #
-
- content_type = META.get('HTTP_CONTENT_TYPE', META.get('CONTENT_TYPE', ''))
- if not content_type.startswith('multipart/'):
- raise MultiPartParserError('Invalid Content-Type: %s' % content_type)
-
- # Parse the header to get the boundary to split the parts.
- ctypes, opts = parse_header(content_type)
- boundary = opts.get('boundary')
- if not boundary or not cgi.valid_boundary(boundary):
- raise MultiPartParserError('Invalid boundary in multipart: %s' % boundary)
-
-
- #
- # Content-Length should contain the length of the body we are about
- # to receive.
- #
- try:
- content_length = int(META.get('HTTP_CONTENT_LENGTH', META.get('CONTENT_LENGTH',0)))
- except (ValueError, TypeError):
- # For now set it to 0; we'll try again later on down.
- content_length = 0
-
- if content_length <= 0:
- # This means we shouldn't continue...raise an error.
- raise MultiPartParserError("Invalid content length: %r" % content_length)
-
- self._boundary = boundary
- self._input_data = input_data
-
- # For compatibility with low-level network APIs (with 32-bit integers),
- # the chunk size should be < 2^31, but still divisible by 4.
- possible_sizes = [x.chunk_size for x in upload_handlers if x.chunk_size]
- self._chunk_size = min([2**31-4] + possible_sizes)
-
- self._meta = META
- self._encoding = encoding or settings.DEFAULT_CHARSET
- self._content_length = content_length
- self._upload_handlers = upload_handlers
-
- def parse(self):
- """
- Parse the POST data and break it into a FILES MultiValueDict and a POST
- MultiValueDict.
-
- Returns a tuple containing the POST and FILES dictionary, respectively.
- """
- # We have to import QueryDict down here to avoid a circular import.
- from django.http import QueryDict
-
- encoding = self._encoding
- handlers = self._upload_handlers
-
- limited_input_data = LimitBytes(self._input_data, self._content_length)
-
- # See if the handler will want to take care of the parsing.
- # This allows overriding everything if somebody wants it.
- for handler in handlers:
- result = handler.handle_raw_input(limited_input_data,
- self._meta,
- self._content_length,
- self._boundary,
- encoding)
- if result is not None:
- return result[0], result[1]
-
- # Create the data structures to be used later.
- self._post = QueryDict('', mutable=True)
- self._files = MultiValueDict()
-
- # Instantiate the parser and stream:
- stream = LazyStream(ChunkIter(limited_input_data, self._chunk_size))
-
- # Whether or not to signal a file-completion at the beginning of the loop.
- old_field_name = None
- counters = [0] * len(handlers)
-
- try:
- for item_type, meta_data, field_stream in Parser(stream, self._boundary):
- if old_field_name:
- # We run this at the beginning of the next loop
- # since we cannot be sure a file is complete until
- # we hit the next boundary/part of the multipart content.
- self.handle_file_complete(old_field_name, counters)
- old_field_name = None
-
- try:
- disposition = meta_data['content-disposition'][1]
- field_name = disposition['name'].strip()
- except (KeyError, IndexError, AttributeError):
- continue
-
- transfer_encoding = meta_data.get('content-transfer-encoding')
- field_name = force_unicode(field_name, encoding, errors='replace')
-
- if item_type == FIELD:
- # This is a post field, we can just set it in the post
- if transfer_encoding == 'base64':
- raw_data = field_stream.read()
- try:
- data = str(raw_data).decode('base64')
- except:
- data = raw_data
- else:
- data = field_stream.read()
-
- self._post.appendlist(field_name,
- force_unicode(data, encoding, errors='replace'))
- elif item_type == FILE:
- # This is a file, use the handler...
- file_name = disposition.get('filename')
- if not file_name:
- continue
- file_name = force_unicode(file_name, encoding, errors='replace')
- file_name = self.IE_sanitize(unescape_entities(file_name))
-
- content_type = meta_data.get('content-type', ('',))[0].strip()
- try:
- charset = meta_data.get('content-type', (0,{}))[1].get('charset', None)
- except:
- charset = None
-
- try:
- content_length = int(meta_data.get('content-length')[0])
- except (IndexError, TypeError, ValueError):
- content_length = None
-
- counters = [0] * len(handlers)
- try:
- for handler in handlers:
- try:
- handler.new_file(field_name, file_name,
- content_type, content_length,
- charset)
- except StopFutureHandlers:
- break
-
- for chunk in field_stream:
- if transfer_encoding == 'base64':
- # We only special-case base64 transfer encoding
- try:
- chunk = str(chunk).decode('base64')
- except Exception, e:
- # Since this is only a chunk, any error is an unfixable error.
- raise MultiPartParserError("Could not decode base64 data: %r" % e)
-
- for i, handler in enumerate(handlers):
- chunk_length = len(chunk)
- chunk = handler.receive_data_chunk(chunk,
- counters[i])
- counters[i] += chunk_length
- if chunk is None:
- # If the chunk received by the handler is None, then don't continue.
- break
-
- except SkipFile, e:
- # Just use up the rest of this file...
- exhaust(field_stream)
- else:
- # Handle file upload completions on next iteration.
- old_field_name = field_name
- else:
- # If this is neither a FIELD or a FILE, just exhaust the stream.
- exhaust(stream)
- except StopUpload, e:
- if not e.connection_reset:
- exhaust(limited_input_data)
- else:
- # Make sure that the request data is all fed
- exhaust(limited_input_data)
-
- # Signal that the upload has completed.
- for handler in handlers:
- retval = handler.upload_complete()
- if retval:
- break
-
- return self._post, self._files
-
- def handle_file_complete(self, old_field_name, counters):
- """
- Handle all the signalling that takes place when a file is complete.
- """
- for i, handler in enumerate(self._upload_handlers):
- file_obj = handler.file_complete(counters[i])
- if file_obj:
- # If it returns a file object, then set the files dict.
- self._files.appendlist(force_unicode(old_field_name,
- self._encoding,
- errors='replace'),
- file_obj)
- break
-
- def IE_sanitize(self, filename):
- """Cleanup filename from Internet Explorer full paths."""
- return filename and filename[filename.rfind("\\")+1:].strip()
-
-class LazyStream(object):
- """
- The LazyStream wrapper allows one to get and "unget" bytes from a stream.
-
- Given a producer object (an iterator that yields bytestrings), the
- LazyStream object will support iteration, reading, and keeping a "look-back"
- variable in case you need to "unget" some bytes.
- """
- def __init__(self, producer, length=None):
- """
- Every LazyStream must have a producer when instantiated.
-
- A producer is an iterable that returns a string each time it
- is called.
- """
- self._producer = producer
- self._empty = False
- self._leftover = ''
- self.length = length
- self.position = 0
- self._remaining = length
- self._unget_history = []
-
- def tell(self):
- return self.position
-
- def read(self, size=None):
- def parts():
- remaining = (size is not None and [size] or [self._remaining])[0]
- # do the whole thing in one shot if no limit was provided.
- if remaining is None:
- yield ''.join(self)
- return
-
- # otherwise do some bookkeeping to return exactly enough
- # of the stream and stashing any extra content we get from
- # the producer
- while remaining != 0:
- assert remaining > 0, 'remaining bytes to read should never go negative'
-
- chunk = self.next()
-
- emitting = chunk[:remaining]
- self.unget(chunk[remaining:])
- remaining -= len(emitting)
- yield emitting
-
- out = ''.join(parts())
- return out
-
- def next(self):
- """
- Used when the exact number of bytes to read is unimportant.
-
- This procedure just returns whatever is chunk is conveniently returned
- from the iterator instead. Useful to avoid unnecessary bookkeeping if
- performance is an issue.
- """
- if self._leftover:
- output = self._leftover
- self._leftover = ''
- else:
- output = self._producer.next()
- self._unget_history = []
- self.position += len(output)
- return output
-
- def close(self):
- """
- Used to invalidate/disable this lazy stream.
-
- Replaces the producer with an empty list. Any leftover bytes that have
- already been read will still be reported upon read() and/or next().
- """
- self._producer = []
-
- def __iter__(self):
- return self
-
- def unget(self, bytes):
- """
- Places bytes back onto the front of the lazy stream.
-
- Future calls to read() will return those bytes first. The
- stream position and thus tell() will be rewound.
- """
- if not bytes:
- return
- self._update_unget_history(len(bytes))
- self.position -= len(bytes)
- self._leftover = ''.join([bytes, self._leftover])
-
- def _update_unget_history(self, num_bytes):
- """
- Updates the unget history as a sanity check to see if we've pushed
- back the same number of bytes in one chunk. If we keep ungetting the
- same number of bytes many times (here, 50), we're mostly likely in an
- infinite loop of some sort. This is usually caused by a
- maliciously-malformed MIME request.
- """
- self._unget_history = [num_bytes] + self._unget_history[:49]
- number_equal = len([current_number for current_number in self._unget_history
- if current_number == num_bytes])
-
- if number_equal > 40:
- raise SuspiciousOperation(
- "The multipart parser got stuck, which shouldn't happen with"
- " normal uploaded files. Check for malicious upload activity;"
- " if there is none, report this to the Django developers."
- )
-
-class ChunkIter(object):
- """
- An iterable that will yield chunks of data. Given a file-like object as the
- constructor, this object will yield chunks of read operations from that
- object.
- """
- def __init__(self, flo, chunk_size=64 * 1024):
- self.flo = flo
- self.chunk_size = chunk_size
-
- def next(self):
- try:
- data = self.flo.read(self.chunk_size)
- except InputStreamExhausted:
- raise StopIteration()
- if data:
- return data
- else:
- raise StopIteration()
-
- def __iter__(self):
- return self
-
-class LimitBytes(object):
- """ Limit bytes for a file object. """
- def __init__(self, fileobject, length):
- self._file = fileobject
- self.remaining = length
-
- def read(self, num_bytes=None):
- """
- Read data from the underlying file.
- If you ask for too much or there isn't anything left,
- this will raise an InputStreamExhausted error.
- """
- if self.remaining <= 0:
- raise InputStreamExhausted()
- if num_bytes is None:
- num_bytes = self.remaining
- else:
- num_bytes = min(num_bytes, self.remaining)
- self.remaining -= num_bytes
- return self._file.read(num_bytes)
-
-class InterBoundaryIter(object):
- """
- A Producer that will iterate over boundaries.
- """
- def __init__(self, stream, boundary):
- self._stream = stream
- self._boundary = boundary
-
- def __iter__(self):
- return self
-
- def next(self):
- try:
- return LazyStream(BoundaryIter(self._stream, self._boundary))
- except InputStreamExhausted:
- raise StopIteration()
-
-class BoundaryIter(object):
- """
- A Producer that is sensitive to boundaries.
-
- Will happily yield bytes until a boundary is found. Will yield the bytes
- before the boundary, throw away the boundary bytes themselves, and push the
- post-boundary bytes back on the stream.
-
- The future calls to .next() after locating the boundary will raise a
- StopIteration exception.
- """
-
- def __init__(self, stream, boundary):
- self._stream = stream
- self._boundary = boundary
- self._done = False
- # rollback an additional six bytes because the format is like
- # this: CRLF<boundary>[--CRLF]
- self._rollback = len(boundary) + 6
-
- # Try to use mx fast string search if available. Otherwise
- # use Python find. Wrap the latter for consistency.
- unused_char = self._stream.read(1)
- if not unused_char:
- raise InputStreamExhausted()
- self._stream.unget(unused_char)
- try:
- from mx.TextTools import FS
- self._fs = FS(boundary).find
- except ImportError:
- self._fs = lambda data: data.find(boundary)
-
- def __iter__(self):
- return self
-
- def next(self):
- if self._done:
- raise StopIteration()
-
- stream = self._stream
- rollback = self._rollback
-
- bytes_read = 0
- chunks = []
- for bytes in stream:
- bytes_read += len(bytes)
- chunks.append(bytes)
- if bytes_read > rollback:
- break
- if not bytes:
- break
- else:
- self._done = True
-
- if not chunks:
- raise StopIteration()
-
- chunk = ''.join(chunks)
- boundary = self._find_boundary(chunk, len(chunk) < self._rollback)
-
- if boundary:
- end, next = boundary
- stream.unget(chunk[next:])
- self._done = True
- return chunk[:end]
- else:
- # make sure we dont treat a partial boundary (and
- # its separators) as data
- if not chunk[:-rollback]:# and len(chunk) >= (len(self._boundary) + 6):
- # There's nothing left, we should just return and mark as done.
- self._done = True
- return chunk
- else:
- stream.unget(chunk[-rollback:])
- return chunk[:-rollback]
-
- def _find_boundary(self, data, eof = False):
- """
- Finds a multipart boundary in data.
-
- Should no boundry exist in the data None is returned instead. Otherwise
- a tuple containing the indices of the following are returned:
-
- * the end of current encapsulation
- * the start of the next encapsulation
- """
- index = self._fs(data)
- if index < 0:
- return None
- else:
- end = index
- next = index + len(self._boundary)
- # backup over CRLF
- if data[max(0,end-1)] == '\n':
- end -= 1
- if data[max(0,end-1)] == '\r':
- end -= 1
- return end, next
-
-def exhaust(stream_or_iterable):
- """
- Completely exhausts an iterator or stream.
-
- Raise a MultiPartParserError if the argument is not a stream or an iterable.
- """
- iterator = None
- try:
- iterator = iter(stream_or_iterable)
- except TypeError:
- iterator = ChunkIter(stream_or_iterable, 16384)
-
- if iterator is None:
- raise MultiPartParserError('multipartparser.exhaust() was passed a non-iterable or stream parameter')
-
- for __ in iterator:
- pass
-
-def parse_boundary_stream(stream, max_header_size):
- """
- Parses one and exactly one stream that encapsulates a boundary.
- """
- # Stream at beginning of header, look for end of header
- # and parse it if found. The header must fit within one
- # chunk.
- chunk = stream.read(max_header_size)
-
- # 'find' returns the top of these four bytes, so we'll
- # need to munch them later to prevent them from polluting
- # the payload.
- header_end = chunk.find('\r\n\r\n')
-
- def _parse_header(line):
- main_value_pair, params = parse_header(line)
- try:
- name, value = main_value_pair.split(':', 1)
- except:
- raise ValueError("Invalid header: %r" % line)
- return name, (value, params)
-
- if header_end == -1:
- # we find no header, so we just mark this fact and pass on
- # the stream verbatim
- stream.unget(chunk)
- return (RAW, {}, stream)
-
- header = chunk[:header_end]
-
- # here we place any excess chunk back onto the stream, as
- # well as throwing away the CRLFCRLF bytes from above.
- stream.unget(chunk[header_end + 4:])
-
- TYPE = RAW
- outdict = {}
-
- # Eliminate blank lines
- for line in header.split('\r\n'):
- # This terminology ("main value" and "dictionary of
- # parameters") is from the Python docs.
- try:
- name, (value, params) = _parse_header(line)
- except:
- continue
-
- if name == 'content-disposition':
- TYPE = FIELD
- if params.get('filename'):
- TYPE = FILE
-
- outdict[name] = value, params
-
- if TYPE == RAW:
- stream.unget(chunk)
-
- return (TYPE, outdict, stream)
-
-class Parser(object):
- def __init__(self, stream, boundary):
- self._stream = stream
- self._separator = '--' + boundary
-
- def __iter__(self):
- boundarystream = InterBoundaryIter(self._stream, self._separator)
- for sub_stream in boundarystream:
- # Iterate over each part
- yield parse_boundary_stream(sub_stream, 1024)
-
-def parse_header(line):
- """ Parse the header into a key-value. """
- plist = _parse_header_params(';' + line)
- key = plist.pop(0).lower()
- pdict = {}
- for p in plist:
- i = p.find('=')
- if i >= 0:
- name = p[:i].strip().lower()
- value = p[i+1:].strip()
- if len(value) >= 2 and value[0] == value[-1] == '"':
- value = value[1:-1]
- value = value.replace('\\\\', '\\').replace('\\"', '"')
- pdict[name] = value
- return key, pdict
-
-def _parse_header_params(s):
- plist = []
- while s[:1] == ';':
- s = s[1:]
- end = s.find(';')
- while end > 0 and s.count('"', 0, end) % 2:
- end = s.find(';', end + 1)
- if end < 0:
- end = len(s)
- f = s[:end]
- plist.append(f.strip())
- s = s[end:]
- return plist
diff --git a/parts/django/django/http/utils.py b/parts/django/django/http/utils.py
deleted file mode 100644
index 4dc05a2..0000000
--- a/parts/django/django/http/utils.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-Functions that modify an HTTP request or response in some way.
-"""
-
-# This group of functions are run as part of the response handling, after
-# everything else, including all response middleware. Think of them as
-# "compulsory response middleware". Be careful about what goes here, because
-# it's a little fiddly to override this behavior, so they should be truly
-# universally applicable.
-
-def fix_location_header(request, response):
- """
- Ensures that we always use an absolute URI in any location header in the
- response. This is required by RFC 2616, section 14.30.
-
- Code constructing response objects is free to insert relative paths, as
- this function converts them to absolute paths.
- """
- if 'Location' in response and request.get_host():
- response['Location'] = request.build_absolute_uri(response['Location'])
- return response
-
-def conditional_content_removal(request, response):
- """
- Removes the content of responses for HEAD requests, 1xx, 204 and 304
- responses. Ensures compliance with RFC 2616, section 4.3.
- """
- if 100 <= response.status_code < 200 or response.status_code in (204, 304):
- response.content = ''
- response['Content-Length'] = 0
- if request.method == 'HEAD':
- response.content = ''
- return response
-
-def fix_IE_for_attach(request, response):
- """
- This function will prevent Django from serving a Content-Disposition header
- while expecting the browser to cache it (only when the browser is IE). This
- leads to IE not allowing the client to download.
- """
- if 'MSIE' not in request.META.get('HTTP_USER_AGENT', '').upper():
- return response
-
- offending_headers = ('no-cache', 'no-store')
- if response.has_header('Content-Disposition'):
- try:
- del response['Pragma']
- except KeyError:
- pass
- if response.has_header('Cache-Control'):
- cache_control_values = [value.strip() for value in
- response['Cache-Control'].split(',')
- if value.strip().lower() not in offending_headers]
-
- if not len(cache_control_values):
- del response['Cache-Control']
- else:
- response['Cache-Control'] = ', '.join(cache_control_values)
-
- return response
-
-def fix_IE_for_vary(request, response):
- """
- This function will fix the bug reported at
- http://support.microsoft.com/kb/824847/en-us?spid=8722&sid=global
- by clearing the Vary header whenever the mime-type is not safe
- enough for Internet Explorer to handle. Poor thing.
- """
- if 'MSIE' not in request.META.get('HTTP_USER_AGENT', '').upper():
- return response
-
- # These mime-types that are decreed "Vary-safe" for IE:
- safe_mime_types = ('text/html', 'text/plain', 'text/sgml')
-
- # The first part of the Content-Type field will be the MIME type,
- # everything after ';', such as character-set, can be ignored.
- if response['Content-Type'].split(';')[0] not in safe_mime_types:
- try:
- del response['Vary']
- except KeyError:
- pass
-
- return response
-
diff --git a/parts/django/django/middleware/__init__.py b/parts/django/django/middleware/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/middleware/__init__.py
+++ /dev/null
diff --git a/parts/django/django/middleware/cache.py b/parts/django/django/middleware/cache.py
deleted file mode 100644
index 3f602fe..0000000
--- a/parts/django/django/middleware/cache.py
+++ /dev/null
@@ -1,156 +0,0 @@
-"""
-Cache middleware. If enabled, each Django-powered page will be cached based on
-URL. The canonical way to enable cache middleware is to set
-``UpdateCacheMiddleware`` as your first piece of middleware, and
-``FetchFromCacheMiddleware`` as the last::
-
- MIDDLEWARE_CLASSES = [
- 'django.middleware.cache.UpdateCacheMiddleware',
- ...
- 'django.middleware.cache.FetchFromCacheMiddleware'
- ]
-
-This is counter-intuitive, but correct: ``UpdateCacheMiddleware`` needs to run
-last during the response phase, which processes middleware bottom-up;
-``FetchFromCacheMiddleware`` needs to run last during the request phase, which
-processes middleware top-down.
-
-The single-class ``CacheMiddleware`` can be used for some simple sites.
-However, if any other piece of middleware needs to affect the cache key, you'll
-need to use the two-part ``UpdateCacheMiddleware`` and
-``FetchFromCacheMiddleware``. This'll most often happen when you're using
-Django's ``LocaleMiddleware``.
-
-More details about how the caching works:
-
-* Only parameter-less GET or HEAD-requests with status code 200 are cached.
-
-* The number of seconds each page is stored for is set by the "max-age" section
- of the response's "Cache-Control" header, falling back to the
- CACHE_MIDDLEWARE_SECONDS setting if the section was not found.
-
-* If CACHE_MIDDLEWARE_ANONYMOUS_ONLY is set to True, only anonymous requests
- (i.e., those not made by a logged-in user) will be cached. This is a simple
- and effective way of avoiding the caching of the Django admin (and any other
- user-specific content).
-
-* This middleware expects that a HEAD request is answered with a response
- exactly like the corresponding GET request.
-
-* When a hit occurs, a shallow copy of the original response object is returned
- from process_request.
-
-* Pages will be cached based on the contents of the request headers listed in
- the response's "Vary" header.
-
-* This middleware also sets ETag, Last-Modified, Expires and Cache-Control
- headers on the response object.
-
-"""
-
-from django.conf import settings
-from django.core.cache import cache
-from django.utils.cache import get_cache_key, learn_cache_key, patch_response_headers, get_max_age
-
-class UpdateCacheMiddleware(object):
- """
- Response-phase cache middleware that updates the cache if the response is
- cacheable.
-
- Must be used as part of the two-part update/fetch cache middleware.
- UpdateCacheMiddleware must be the first piece of middleware in
- MIDDLEWARE_CLASSES so that it'll get called last during the response phase.
- """
- def __init__(self):
- self.cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
- self.key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- self.cache_anonymous_only = getattr(settings, 'CACHE_MIDDLEWARE_ANONYMOUS_ONLY', False)
-
- def process_response(self, request, response):
- """Sets the cache, if needed."""
- if not hasattr(request, '_cache_update_cache') or not request._cache_update_cache:
- # We don't need to update the cache, just return.
- return response
- if request.method != 'GET':
- # This is a stronger requirement than above. It is needed
- # because of interactions between this middleware and the
- # HTTPMiddleware, which throws the body of a HEAD-request
- # away before this middleware gets a chance to cache it.
- return response
- if not response.status_code == 200:
- return response
- # Try to get the timeout from the "max-age" section of the "Cache-
- # Control" header before reverting to using the default cache_timeout
- # length.
- timeout = get_max_age(response)
- if timeout == None:
- timeout = self.cache_timeout
- elif timeout == 0:
- # max-age was set to 0, don't bother caching.
- return response
- patch_response_headers(response, timeout)
- if timeout:
- cache_key = learn_cache_key(request, response, timeout, self.key_prefix)
- cache.set(cache_key, response, timeout)
- return response
-
-class FetchFromCacheMiddleware(object):
- """
- Request-phase cache middleware that fetches a page from the cache.
-
- Must be used as part of the two-part update/fetch cache middleware.
- FetchFromCacheMiddleware must be the last piece of middleware in
- MIDDLEWARE_CLASSES so that it'll get called last during the request phase.
- """
- def __init__(self):
- self.cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
- self.key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- self.cache_anonymous_only = getattr(settings, 'CACHE_MIDDLEWARE_ANONYMOUS_ONLY', False)
-
- def process_request(self, request):
- """
- Checks whether the page is already cached and returns the cached
- version if available.
- """
- if self.cache_anonymous_only:
- assert hasattr(request, 'user'), "The Django cache middleware with CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True requires authentication middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.auth.middleware.AuthenticationMiddleware' before the CacheMiddleware."
-
- if not request.method in ('GET', 'HEAD') or request.GET:
- request._cache_update_cache = False
- return None # Don't bother checking the cache.
-
- if self.cache_anonymous_only and request.user.is_authenticated():
- request._cache_update_cache = False
- return None # Don't cache requests from authenticated users.
-
- cache_key = get_cache_key(request, self.key_prefix)
- if cache_key is None:
- request._cache_update_cache = True
- return None # No cache information available, need to rebuild.
-
- response = cache.get(cache_key, None)
- if response is None:
- request._cache_update_cache = True
- return None # No cache information available, need to rebuild.
-
- request._cache_update_cache = False
- return response
-
-class CacheMiddleware(UpdateCacheMiddleware, FetchFromCacheMiddleware):
- """
- Cache middleware that provides basic behavior for many simple sites.
-
- Also used as the hook point for the cache decorator, which is generated
- using the decorator-from-middleware utility.
- """
- def __init__(self, cache_timeout=None, key_prefix=None, cache_anonymous_only=None):
- self.cache_timeout = cache_timeout
- if cache_timeout is None:
- self.cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
- self.key_prefix = key_prefix
- if key_prefix is None:
- self.key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- if cache_anonymous_only is None:
- self.cache_anonymous_only = getattr(settings, 'CACHE_MIDDLEWARE_ANONYMOUS_ONLY', False)
- else:
- self.cache_anonymous_only = cache_anonymous_only
diff --git a/parts/django/django/middleware/common.py b/parts/django/django/middleware/common.py
deleted file mode 100644
index 0be89d4..0000000
--- a/parts/django/django/middleware/common.py
+++ /dev/null
@@ -1,147 +0,0 @@
-import re
-
-from django.conf import settings
-from django import http
-from django.core.mail import mail_managers
-from django.utils.http import urlquote
-from django.core import urlresolvers
-from django.utils.hashcompat import md5_constructor
-
-class CommonMiddleware(object):
- """
- "Common" middleware for taking care of some basic operations:
-
- - Forbids access to User-Agents in settings.DISALLOWED_USER_AGENTS
-
- - URL rewriting: Based on the APPEND_SLASH and PREPEND_WWW settings,
- this middleware appends missing slashes and/or prepends missing
- "www."s.
-
- - If APPEND_SLASH is set and the initial URL doesn't end with a
- slash, and it is not found in urlpatterns, a new URL is formed by
- appending a slash at the end. If this new URL is found in
- urlpatterns, then an HTTP-redirect is returned to this new URL;
- otherwise the initial URL is processed as usual.
-
- - ETags: If the USE_ETAGS setting is set, ETags will be calculated from
- the entire page content and Not Modified responses will be returned
- appropriately.
- """
-
- def process_request(self, request):
- """
- Check for denied User-Agents and rewrite the URL based on
- settings.APPEND_SLASH and settings.PREPEND_WWW
- """
-
- # Check for denied User-Agents
- if 'HTTP_USER_AGENT' in request.META:
- for user_agent_regex in settings.DISALLOWED_USER_AGENTS:
- if user_agent_regex.search(request.META['HTTP_USER_AGENT']):
- return http.HttpResponseForbidden('<h1>Forbidden</h1>')
-
- # Check for a redirect based on settings.APPEND_SLASH
- # and settings.PREPEND_WWW
- host = request.get_host()
- old_url = [host, request.path]
- new_url = old_url[:]
-
- if (settings.PREPEND_WWW and old_url[0] and
- not old_url[0].startswith('www.')):
- new_url[0] = 'www.' + old_url[0]
-
- # Append a slash if APPEND_SLASH is set and the URL doesn't have a
- # trailing slash and there is no pattern for the current path
- if settings.APPEND_SLASH and (not old_url[1].endswith('/')):
- urlconf = getattr(request, 'urlconf', None)
- if (not _is_valid_path(request.path_info, urlconf) and
- _is_valid_path("%s/" % request.path_info, urlconf)):
- new_url[1] = new_url[1] + '/'
- if settings.DEBUG and request.method == 'POST':
- raise RuntimeError, (""
- "You called this URL via POST, but the URL doesn't end "
- "in a slash and you have APPEND_SLASH set. Django can't "
- "redirect to the slash URL while maintaining POST data. "
- "Change your form to point to %s%s (note the trailing "
- "slash), or set APPEND_SLASH=False in your Django "
- "settings.") % (new_url[0], new_url[1])
-
- if new_url == old_url:
- # No redirects required.
- return
- if new_url[0]:
- newurl = "%s://%s%s" % (
- request.is_secure() and 'https' or 'http',
- new_url[0], urlquote(new_url[1]))
- else:
- newurl = urlquote(new_url[1])
- if request.GET:
- newurl += '?' + request.META['QUERY_STRING']
- return http.HttpResponsePermanentRedirect(newurl)
-
- def process_response(self, request, response):
- "Send broken link emails and calculate the Etag, if needed."
- if response.status_code == 404:
- if settings.SEND_BROKEN_LINK_EMAILS:
- # If the referrer was from an internal link or a non-search-engine site,
- # send a note to the managers.
- domain = request.get_host()
- referer = request.META.get('HTTP_REFERER', None)
- is_internal = _is_internal_request(domain, referer)
- path = request.get_full_path()
- if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer):
- ua = request.META.get('HTTP_USER_AGENT', '<none>')
- ip = request.META.get('REMOTE_ADDR', '<none>')
- mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain),
- "Referrer: %s\nRequested URL: %s\nUser agent: %s\nIP address: %s\n" \
- % (referer, request.get_full_path(), ua, ip))
- return response
-
- # Use ETags, if requested.
- if settings.USE_ETAGS:
- if response.has_header('ETag'):
- etag = response['ETag']
- else:
- etag = '"%s"' % md5_constructor(response.content).hexdigest()
- if response.status_code >= 200 and response.status_code < 300 and request.META.get('HTTP_IF_NONE_MATCH') == etag:
- cookies = response.cookies
- response = http.HttpResponseNotModified()
- response.cookies = cookies
- else:
- response['ETag'] = etag
-
- return response
-
-def _is_ignorable_404(uri):
- """
- Returns True if a 404 at the given URL *shouldn't* notify the site managers.
- """
- for start in settings.IGNORABLE_404_STARTS:
- if uri.startswith(start):
- return True
- for end in settings.IGNORABLE_404_ENDS:
- if uri.endswith(end):
- return True
- return False
-
-def _is_internal_request(domain, referer):
- """
- Returns true if the referring URL is the same domain as the current request.
- """
- # Different subdomains are treated as different domains.
- return referer is not None and re.match("^https?://%s/" % re.escape(domain), referer)
-
-def _is_valid_path(path, urlconf=None):
- """
- Returns True if the given path resolves against the default URL resolver,
- False otherwise.
-
- This is a convenience method to make working with "is this a match?" cases
- easier, avoiding unnecessarily indented try...except blocks.
- """
- try:
- urlresolvers.resolve(path, urlconf)
- return True
- except urlresolvers.Resolver404:
- return False
-
diff --git a/parts/django/django/middleware/csrf.py b/parts/django/django/middleware/csrf.py
deleted file mode 100644
index 67b02f0..0000000
--- a/parts/django/django/middleware/csrf.py
+++ /dev/null
@@ -1,298 +0,0 @@
-"""
-Cross Site Request Forgery Middleware.
-
-This module provides a middleware that implements protection
-against request forgeries from other sites.
-"""
-
-import itertools
-import re
-import random
-
-from django.conf import settings
-from django.core.urlresolvers import get_callable
-from django.utils.cache import patch_vary_headers
-from django.utils.hashcompat import md5_constructor
-from django.utils.safestring import mark_safe
-
-_POST_FORM_RE = \
- re.compile(r'(<form\W[^>]*\bmethod\s*=\s*(\'|"|)POST(\'|"|)\b[^>]*>)', re.IGNORECASE)
-
-_HTML_TYPES = ('text/html', 'application/xhtml+xml')
-
-# Use the system (hardware-based) random number generator if it exists.
-if hasattr(random, 'SystemRandom'):
- randrange = random.SystemRandom().randrange
-else:
- randrange = random.randrange
-_MAX_CSRF_KEY = 18446744073709551616L # 2 << 63
-
-REASON_NO_REFERER = "Referer checking failed - no Referer."
-REASON_BAD_REFERER = "Referer checking failed - %s does not match %s."
-REASON_NO_COOKIE = "No CSRF or session cookie."
-REASON_NO_CSRF_COOKIE = "CSRF cookie not set."
-REASON_BAD_TOKEN = "CSRF token missing or incorrect."
-
-
-def _get_failure_view():
- """
- Returns the view to be used for CSRF rejections
- """
- return get_callable(settings.CSRF_FAILURE_VIEW)
-
-
-def _get_new_csrf_key():
- return md5_constructor("%s%s"
- % (randrange(0, _MAX_CSRF_KEY), settings.SECRET_KEY)).hexdigest()
-
-
-def _make_legacy_session_token(session_id):
- return md5_constructor(settings.SECRET_KEY + session_id).hexdigest()
-
-
-def get_token(request):
- """
- Returns the the CSRF token required for a POST form. The token is an
- alphanumeric value.
-
- A side effect of calling this function is to make the the csrf_protect
- decorator and the CsrfViewMiddleware add a CSRF cookie and a 'Vary: Cookie'
- header to the outgoing response. For this reason, you may need to use this
- function lazily, as is done by the csrf context processor.
- """
- request.META["CSRF_COOKIE_USED"] = True
- return request.META.get("CSRF_COOKIE", None)
-
-
-def _sanitize_token(token):
- # Allow only alphanum, and ensure we return a 'str' for the sake of the post
- # processing middleware.
- token = re.sub('[^a-zA-Z0-9]', '', str(token.decode('ascii', 'ignore')))
- if token == "":
- # In case the cookie has been truncated to nothing at some point.
- return _get_new_csrf_key()
- else:
- return token
-
-
-class CsrfViewMiddleware(object):
- """
- Middleware that requires a present and correct csrfmiddlewaretoken
- for POST requests that have a CSRF cookie, and sets an outgoing
- CSRF cookie.
-
- This middleware should be used in conjunction with the csrf_token template
- tag.
- """
- # The _accept and _reject methods currently only exist for the sake of the
- # requires_csrf_token decorator.
- def _accept(self, request):
- # Avoid checking the request twice by adding a custom attribute to
- # request. This will be relevant when both decorator and middleware
- # are used.
- request.csrf_processing_done = True
- return None
-
- def _reject(self, request, reason):
- return _get_failure_view()(request, reason=reason)
-
- def process_view(self, request, callback, callback_args, callback_kwargs):
- if getattr(request, 'csrf_processing_done', False):
- return None
-
- # If the user doesn't have a CSRF cookie, generate one and store it in the
- # request, so it's available to the view. We'll store it in a cookie when
- # we reach the response.
- try:
- # In case of cookies from untrusted sources, we strip anything
- # dangerous at this point, so that the cookie + token will have the
- # same, sanitized value.
- request.META["CSRF_COOKIE"] = _sanitize_token(request.COOKIES[settings.CSRF_COOKIE_NAME])
- cookie_is_new = False
- except KeyError:
- # No cookie, so create one. This will be sent with the next
- # response.
- request.META["CSRF_COOKIE"] = _get_new_csrf_key()
- # Set a flag to allow us to fall back and allow the session id in
- # place of a CSRF cookie for this request only.
- cookie_is_new = True
-
- # Wait until request.META["CSRF_COOKIE"] has been manipulated before
- # bailing out, so that get_token still works
- if getattr(callback, 'csrf_exempt', False):
- return None
-
- if request.method == 'POST':
- if getattr(request, '_dont_enforce_csrf_checks', False):
- # Mechanism to turn off CSRF checks for test suite. It comes after
- # the creation of CSRF cookies, so that everything else continues to
- # work exactly the same (e.g. cookies are sent etc), but before the
- # any branches that call reject()
- return self._accept(request)
-
- if request.is_ajax():
- # .is_ajax() is based on the presence of X-Requested-With. In
- # the context of a browser, this can only be sent if using
- # XmlHttpRequest. Browsers implement careful policies for
- # XmlHttpRequest:
- #
- # * Normally, only same-domain requests are allowed.
- #
- # * Some browsers (e.g. Firefox 3.5 and later) relax this
- # carefully:
- #
- # * if it is a 'simple' GET or POST request (which can
- # include no custom headers), it is allowed to be cross
- # domain. These requests will not be recognized as AJAX.
- #
- # * if a 'preflight' check with the server confirms that the
- # server is expecting and allows the request, cross domain
- # requests even with custom headers are allowed. These
- # requests will be recognized as AJAX, but can only get
- # through when the developer has specifically opted in to
- # allowing the cross-domain POST request.
- #
- # So in all cases, it is safe to allow these requests through.
- return self._accept(request)
-
- if request.is_secure():
- # Strict referer checking for HTTPS
- referer = request.META.get('HTTP_REFERER')
- if referer is None:
- return self._reject(request, REASON_NO_REFERER)
-
- # The following check ensures that the referer is HTTPS,
- # the domains match and the ports match. This might be too strict.
- good_referer = 'https://%s/' % request.get_host()
- if not referer.startswith(good_referer):
- return self._reject(request, REASON_BAD_REFERER %
- (referer, good_referer))
-
- # If the user didn't already have a CSRF cookie, then fall back to
- # the Django 1.1 method (hash of session ID), so a request is not
- # rejected if the form was sent to the user before upgrading to the
- # Django 1.2 method (session independent nonce)
- if cookie_is_new:
- try:
- session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
- csrf_token = _make_legacy_session_token(session_id)
- except KeyError:
- # No CSRF cookie and no session cookie. For POST requests,
- # we insist on a CSRF cookie, and in this way we can avoid
- # all CSRF attacks, including login CSRF.
- return self._reject(request, REASON_NO_COOKIE)
- else:
- csrf_token = request.META["CSRF_COOKIE"]
-
- # check incoming token
- request_csrf_token = request.POST.get('csrfmiddlewaretoken', None)
- if request_csrf_token != csrf_token:
- if cookie_is_new:
- # probably a problem setting the CSRF cookie
- return self._reject(request, REASON_NO_CSRF_COOKIE)
- else:
- return self._reject(request, REASON_BAD_TOKEN)
-
- return self._accept(request)
-
- def process_response(self, request, response):
- if getattr(response, 'csrf_processing_done', False):
- return response
-
- # If CSRF_COOKIE is unset, then CsrfViewMiddleware.process_view was
- # never called, probaby because a request middleware returned a response
- # (for example, contrib.auth redirecting to a login page).
- if request.META.get("CSRF_COOKIE") is None:
- return response
-
- if not request.META.get("CSRF_COOKIE_USED", False):
- return response
-
- # Set the CSRF cookie even if it's already set, so we renew the expiry timer.
- response.set_cookie(settings.CSRF_COOKIE_NAME,
- request.META["CSRF_COOKIE"], max_age = 60 * 60 * 24 * 7 * 52,
- domain=settings.CSRF_COOKIE_DOMAIN)
- # Content varies with the CSRF cookie, so set the Vary header.
- patch_vary_headers(response, ('Cookie',))
- response.csrf_processing_done = True
- return response
-
-
-class CsrfResponseMiddleware(object):
- """
- DEPRECATED
- Middleware that post-processes a response to add a csrfmiddlewaretoken.
-
- This exists for backwards compatibility and as an interim measure until
- applications are converted to using use the csrf_token template tag
- instead. It will be removed in Django 1.4.
- """
- def __init__(self):
- import warnings
- warnings.warn(
- "CsrfResponseMiddleware and CsrfMiddleware are deprecated; use CsrfViewMiddleware and the template tag instead (see CSRF documentation).",
- PendingDeprecationWarning
- )
-
- def process_response(self, request, response):
- if getattr(response, 'csrf_exempt', False):
- return response
-
- if response['Content-Type'].split(';')[0] in _HTML_TYPES:
- csrf_token = get_token(request)
- # If csrf_token is None, we have no token for this request, which probably
- # means that this is a response from a request middleware.
- if csrf_token is None:
- return response
-
- # ensure we don't add the 'id' attribute twice (HTML validity)
- idattributes = itertools.chain(("id='csrfmiddlewaretoken'",),
- itertools.repeat(''))
- def add_csrf_field(match):
- """Returns the matched <form> tag plus the added <input> element"""
- return mark_safe(match.group() + "<div style='display:none;'>" + \
- "<input type='hidden' " + idattributes.next() + \
- " name='csrfmiddlewaretoken' value='" + csrf_token + \
- "' /></div>")
-
- # Modify any POST forms
- response.content, n = _POST_FORM_RE.subn(add_csrf_field, response.content)
- if n > 0:
- # Content varies with the CSRF cookie, so set the Vary header.
- patch_vary_headers(response, ('Cookie',))
-
- # Since the content has been modified, any Etag will now be
- # incorrect. We could recalculate, but only if we assume that
- # the Etag was set by CommonMiddleware. The safest thing is just
- # to delete. See bug #9163
- del response['ETag']
- return response
-
-
-class CsrfMiddleware(object):
- """
- Django middleware that adds protection against Cross Site
- Request Forgeries by adding hidden form fields to POST forms and
- checking requests for the correct value.
-
- CsrfMiddleware uses two middleware, CsrfViewMiddleware and
- CsrfResponseMiddleware, which can be used independently. It is recommended
- to use only CsrfViewMiddleware and use the csrf_token template tag in
- templates for inserting the token.
- """
- # We can't just inherit from CsrfViewMiddleware and CsrfResponseMiddleware
- # because both have process_response methods.
- def __init__(self):
- self.response_middleware = CsrfResponseMiddleware()
- self.view_middleware = CsrfViewMiddleware()
-
- def process_response(self, request, resp):
- # We must do the response post-processing first, because that calls
- # get_token(), which triggers a flag saying that the CSRF cookie needs
- # to be sent (done in CsrfViewMiddleware.process_response)
- resp2 = self.response_middleware.process_response(request, resp)
- return self.view_middleware.process_response(request, resp2)
-
- def process_view(self, request, callback, callback_args, callback_kwargs):
- return self.view_middleware.process_view(request, callback, callback_args,
- callback_kwargs)
diff --git a/parts/django/django/middleware/doc.py b/parts/django/django/middleware/doc.py
deleted file mode 100644
index 4f91503..0000000
--- a/parts/django/django/middleware/doc.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from django.conf import settings
-from django import http
-
-class XViewMiddleware(object):
- """
- Adds an X-View header to internal HEAD requests -- used by the documentation system.
- """
- def process_view(self, request, view_func, view_args, view_kwargs):
- """
- If the request method is HEAD and either the IP is internal or the
- user is a logged-in staff member, quickly return with an x-header
- indicating the view function. This is used by the documentation module
- to lookup the view function for an arbitrary page.
- """
- if request.method == 'HEAD' and (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or
- (request.user.is_active and request.user.is_staff)):
- response = http.HttpResponse()
- response['X-View'] = "%s.%s" % (view_func.__module__, view_func.__name__)
- return response
diff --git a/parts/django/django/middleware/gzip.py b/parts/django/django/middleware/gzip.py
deleted file mode 100644
index 47f75aa..0000000
--- a/parts/django/django/middleware/gzip.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import re
-
-from django.utils.text import compress_string
-from django.utils.cache import patch_vary_headers
-
-re_accepts_gzip = re.compile(r'\bgzip\b')
-
-class GZipMiddleware(object):
- """
- This middleware compresses content if the browser allows gzip compression.
- It sets the Vary header accordingly, so that caches will base their storage
- on the Accept-Encoding header.
- """
- def process_response(self, request, response):
- # It's not worth compressing non-OK or really short responses.
- if response.status_code != 200 or len(response.content) < 200:
- return response
-
- patch_vary_headers(response, ('Accept-Encoding',))
-
- # Avoid gzipping if we've already got a content-encoding.
- if response.has_header('Content-Encoding'):
- return response
-
- # MSIE have issues with gzipped respones of various content types.
- if "msie" in request.META.get('HTTP_USER_AGENT', '').lower():
- ctype = response.get('Content-Type', '').lower()
- if not ctype.startswith("text/") or "javascript" in ctype:
- return response
-
- ae = request.META.get('HTTP_ACCEPT_ENCODING', '')
- if not re_accepts_gzip.search(ae):
- return response
-
- response.content = compress_string(response.content)
- response['Content-Encoding'] = 'gzip'
- response['Content-Length'] = str(len(response.content))
- return response
diff --git a/parts/django/django/middleware/http.py b/parts/django/django/middleware/http.py
deleted file mode 100644
index 75af664..0000000
--- a/parts/django/django/middleware/http.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from django.core.exceptions import MiddlewareNotUsed
-from django.utils.http import http_date
-
-class ConditionalGetMiddleware(object):
- """
- Handles conditional GET operations. If the response has a ETag or
- Last-Modified header, and the request has If-None-Match or
- If-Modified-Since, the response is replaced by an HttpNotModified.
-
- Also sets the Date and Content-Length response-headers.
- """
- def process_response(self, request, response):
- response['Date'] = http_date()
- if not response.has_header('Content-Length'):
- response['Content-Length'] = str(len(response.content))
-
- if response.has_header('ETag'):
- if_none_match = request.META.get('HTTP_IF_NONE_MATCH', None)
- if if_none_match == response['ETag']:
- # Setting the status is enough here. The response handling path
- # automatically removes content for this status code (in
- # http.conditional_content_removal()).
- response.status_code = 304
-
- if response.has_header('Last-Modified'):
- if_modified_since = request.META.get('HTTP_IF_MODIFIED_SINCE', None)
- if if_modified_since == response['Last-Modified']:
- # Setting the status code is enough here (same reasons as
- # above).
- response.status_code = 304
-
- return response
-
-class SetRemoteAddrFromForwardedFor(object):
- """
- This middleware has been removed; see the Django 1.1 release notes for
- details.
-
- It previously set REMOTE_ADDR based on HTTP_X_FORWARDED_FOR. However, after
- investiagtion, it turns out this is impossible to do in a general manner:
- different proxies treat the X-Forwarded-For header differently. Thus, a
- built-in middleware can lead to application-level security problems, and so
- this was removed in Django 1.1
-
- """
- def __init__(self):
- import warnings
- warnings.warn("SetRemoteAddrFromForwardedFor has been removed. "
- "See the Django 1.1 release notes for details.",
- category=DeprecationWarning)
- raise MiddlewareNotUsed() \ No newline at end of file
diff --git a/parts/django/django/middleware/locale.py b/parts/django/django/middleware/locale.py
deleted file mode 100644
index b5e4949..0000000
--- a/parts/django/django/middleware/locale.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"this is the locale selecting middleware that will look at accept headers"
-
-from django.utils.cache import patch_vary_headers
-from django.utils import translation
-
-class LocaleMiddleware(object):
- """
- This is a very simple middleware that parses a request
- and decides what translation object to install in the current
- thread context. This allows pages to be dynamically
- translated to the language the user desires (if the language
- is available, of course).
- """
-
- def process_request(self, request):
- language = translation.get_language_from_request(request)
- translation.activate(language)
- request.LANGUAGE_CODE = translation.get_language()
-
- def process_response(self, request, response):
- patch_vary_headers(response, ('Accept-Language',))
- if 'Content-Language' not in response:
- response['Content-Language'] = translation.get_language()
- translation.deactivate()
- return response
diff --git a/parts/django/django/middleware/transaction.py b/parts/django/django/middleware/transaction.py
deleted file mode 100644
index 96b1538..0000000
--- a/parts/django/django/middleware/transaction.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from django.db import transaction
-
-class TransactionMiddleware(object):
- """
- Transaction middleware. If this is enabled, each view function will be run
- with commit_on_response activated - that way a save() doesn't do a direct
- commit, the commit is done when a successful response is created. If an
- exception happens, the database is rolled back.
- """
- def process_request(self, request):
- """Enters transaction management"""
- transaction.enter_transaction_management()
- transaction.managed(True)
-
- def process_exception(self, request, exception):
- """Rolls back the database and leaves transaction management"""
- if transaction.is_dirty():
- transaction.rollback()
- transaction.leave_transaction_management()
-
- def process_response(self, request, response):
- """Commits and leaves transaction management."""
- if transaction.is_managed():
- if transaction.is_dirty():
- transaction.commit()
- transaction.leave_transaction_management()
- return response
diff --git a/parts/django/django/shortcuts/__init__.py b/parts/django/django/shortcuts/__init__.py
deleted file mode 100644
index 119bd09..0000000
--- a/parts/django/django/shortcuts/__init__.py
+++ /dev/null
@@ -1,104 +0,0 @@
-"""
-This module collects helper functions and classes that "span" multiple levels
-of MVC. In other words, these functions/classes introduce controlled coupling
-for convenience's sake.
-"""
-
-from django.template import loader
-from django.http import HttpResponse, Http404
-from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
-from django.db.models.manager import Manager
-from django.db.models.query import QuerySet
-from django.core import urlresolvers
-
-def render_to_response(*args, **kwargs):
- """
- Returns a HttpResponse whose content is filled with the result of calling
- django.template.loader.render_to_string() with the passed arguments.
- """
- httpresponse_kwargs = {'mimetype': kwargs.pop('mimetype', None)}
- return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
-
-def redirect(to, *args, **kwargs):
- """
- Returns an HttpResponseRedirect to the apropriate URL for the arguments
- passed.
-
- The arguments could be:
-
- * A model: the model's `get_absolute_url()` function will be called.
-
- * A view name, possibly with arguments: `urlresolvers.reverse()` will
- be used to reverse-resolve the name.
-
- * A URL, which will be used as-is for the redirect location.
-
- By default issues a temporary redirect; pass permanent=True to issue a
- permanent redirect
- """
- if kwargs.pop('permanent', False):
- redirect_class = HttpResponsePermanentRedirect
- else:
- redirect_class = HttpResponseRedirect
-
- # If it's a model, use get_absolute_url()
- if hasattr(to, 'get_absolute_url'):
- return redirect_class(to.get_absolute_url())
-
- # Next try a reverse URL resolution.
- try:
- return redirect_class(urlresolvers.reverse(to, args=args, kwargs=kwargs))
- except urlresolvers.NoReverseMatch:
- # If this is a callable, re-raise.
- if callable(to):
- raise
- # If this doesn't "feel" like a URL, re-raise.
- if '/' not in to and '.' not in to:
- raise
-
- # Finally, fall back and assume it's a URL
- return redirect_class(to)
-
-def _get_queryset(klass):
- """
- Returns a QuerySet from a Model, Manager, or QuerySet. Created to make
- get_object_or_404 and get_list_or_404 more DRY.
- """
- if isinstance(klass, QuerySet):
- return klass
- elif isinstance(klass, Manager):
- manager = klass
- else:
- manager = klass._default_manager
- return manager.all()
-
-def get_object_or_404(klass, *args, **kwargs):
- """
- Uses get() to return an object, or raises a Http404 exception if the object
- does not exist.
-
- klass may be a Model, Manager, or QuerySet object. All other passed
- arguments and keyword arguments are used in the get() query.
-
- Note: Like with get(), an MultipleObjectsReturned will be raised if more than one
- object is found.
- """
- queryset = _get_queryset(klass)
- try:
- return queryset.get(*args, **kwargs)
- except queryset.model.DoesNotExist:
- raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
-
-def get_list_or_404(klass, *args, **kwargs):
- """
- Uses filter() to return a list of objects, or raise a Http404 exception if
- the list is empty.
-
- klass may be a Model, Manager, or QuerySet object. All other passed
- arguments and keyword arguments are used in the filter() query.
- """
- queryset = _get_queryset(klass)
- obj_list = list(queryset.filter(*args, **kwargs))
- if not obj_list:
- raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
- return obj_list \ No newline at end of file
diff --git a/parts/django/django/template/__init__.py b/parts/django/django/template/__init__.py
deleted file mode 100644
index c316786..0000000
--- a/parts/django/django/template/__init__.py
+++ /dev/null
@@ -1,1052 +0,0 @@
-"""
-This is the Django template system.
-
-How it works:
-
-The Lexer.tokenize() function converts a template string (i.e., a string containing
-markup with custom template tags) to tokens, which can be either plain text
-(TOKEN_TEXT), variables (TOKEN_VAR) or block statements (TOKEN_BLOCK).
-
-The Parser() class takes a list of tokens in its constructor, and its parse()
-method returns a compiled template -- which is, under the hood, a list of
-Node objects.
-
-Each Node is responsible for creating some sort of output -- e.g. simple text
-(TextNode), variable values in a given context (VariableNode), results of basic
-logic (IfNode), results of looping (ForNode), or anything else. The core Node
-types are TextNode, VariableNode, IfNode and ForNode, but plugin modules can
-define their own custom node types.
-
-Each Node has a render() method, which takes a Context and returns a string of
-the rendered node. For example, the render() method of a Variable Node returns
-the variable's value as a string. The render() method of an IfNode returns the
-rendered output of whatever was inside the loop, recursively.
-
-The Template class is a convenient wrapper that takes care of template
-compilation and rendering.
-
-Usage:
-
-The only thing you should ever use directly in this file is the Template class.
-Create a compiled template object with a template_string, then call render()
-with a context. In the compilation stage, the TemplateSyntaxError exception
-will be raised if the template doesn't have proper syntax.
-
-Sample code:
-
->>> from django import template
->>> s = u'<html>{% if test %}<h1>{{ varvalue }}</h1>{% endif %}</html>'
->>> t = template.Template(s)
-
-(t is now a compiled template, and its render() method can be called multiple
-times with multiple contexts)
-
->>> c = template.Context({'test':True, 'varvalue': 'Hello'})
->>> t.render(c)
-u'<html><h1>Hello</h1></html>'
->>> c = template.Context({'test':False, 'varvalue': 'Hello'})
->>> t.render(c)
-u'<html></html>'
-"""
-import imp
-import re
-from inspect import getargspec
-
-from django.conf import settings
-from django.template.context import Context, RequestContext, ContextPopException
-from django.utils.importlib import import_module
-from django.utils.itercompat import is_iterable
-from django.utils.functional import curry, Promise
-from django.utils.text import smart_split, unescape_string_literal, get_text_list
-from django.utils.encoding import smart_unicode, force_unicode, smart_str
-from django.utils.translation import ugettext as _
-from django.utils.safestring import SafeData, EscapeData, mark_safe, mark_for_escaping
-from django.utils.formats import localize
-from django.utils.html import escape
-from django.utils.module_loading import module_has_submodule
-
-__all__ = ('Template', 'Context', 'RequestContext', 'compile_string')
-
-TOKEN_TEXT = 0
-TOKEN_VAR = 1
-TOKEN_BLOCK = 2
-TOKEN_COMMENT = 3
-
-# template syntax constants
-FILTER_SEPARATOR = '|'
-FILTER_ARGUMENT_SEPARATOR = ':'
-VARIABLE_ATTRIBUTE_SEPARATOR = '.'
-BLOCK_TAG_START = '{%'
-BLOCK_TAG_END = '%}'
-VARIABLE_TAG_START = '{{'
-VARIABLE_TAG_END = '}}'
-COMMENT_TAG_START = '{#'
-COMMENT_TAG_END = '#}'
-SINGLE_BRACE_START = '{'
-SINGLE_BRACE_END = '}'
-
-ALLOWED_VARIABLE_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.'
-
-# what to report as the origin for templates that come from non-loader sources
-# (e.g. strings)
-UNKNOWN_SOURCE = '<unknown source>'
-
-# match a variable or block tag and capture the entire tag, including start/end delimiters
-tag_re = re.compile('(%s.*?%s|%s.*?%s|%s.*?%s)' % (re.escape(BLOCK_TAG_START), re.escape(BLOCK_TAG_END),
- re.escape(VARIABLE_TAG_START), re.escape(VARIABLE_TAG_END),
- re.escape(COMMENT_TAG_START), re.escape(COMMENT_TAG_END)))
-
-# global dictionary of libraries that have been loaded using get_library
-libraries = {}
-# global list of libraries to load by default for a new parser
-builtins = []
-
-# True if TEMPLATE_STRING_IF_INVALID contains a format string (%s). None means
-# uninitialised.
-invalid_var_format_string = None
-
-class TemplateSyntaxError(Exception):
- pass
-
-class TemplateDoesNotExist(Exception):
- pass
-
-class TemplateEncodingError(Exception):
- pass
-
-class VariableDoesNotExist(Exception):
-
- def __init__(self, msg, params=()):
- self.msg = msg
- self.params = params
-
- def __str__(self):
- return unicode(self).encode('utf-8')
-
- def __unicode__(self):
- return self.msg % tuple([force_unicode(p, errors='replace') for p in self.params])
-
-class InvalidTemplateLibrary(Exception):
- pass
-
-class Origin(object):
- def __init__(self, name):
- self.name = name
-
- def reload(self):
- raise NotImplementedError
-
- def __str__(self):
- return self.name
-
-class StringOrigin(Origin):
- def __init__(self, source):
- super(StringOrigin, self).__init__(UNKNOWN_SOURCE)
- self.source = source
-
- def reload(self):
- return self.source
-
-class Template(object):
- def __init__(self, template_string, origin=None, name='<Unknown Template>'):
- try:
- template_string = smart_unicode(template_string)
- except UnicodeDecodeError:
- raise TemplateEncodingError("Templates can only be constructed from unicode or UTF-8 strings.")
- if settings.TEMPLATE_DEBUG and origin is None:
- origin = StringOrigin(template_string)
- self.nodelist = compile_string(template_string, origin)
- self.name = name
-
- def __iter__(self):
- for node in self.nodelist:
- for subnode in node:
- yield subnode
-
- def _render(self, context):
- return self.nodelist.render(context)
-
- def render(self, context):
- "Display stage -- can be called many times"
- context.render_context.push()
- try:
- return self._render(context)
- finally:
- context.render_context.pop()
-
-def compile_string(template_string, origin):
- "Compiles template_string into NodeList ready for rendering"
- if settings.TEMPLATE_DEBUG:
- from debug import DebugLexer, DebugParser
- lexer_class, parser_class = DebugLexer, DebugParser
- else:
- lexer_class, parser_class = Lexer, Parser
- lexer = lexer_class(template_string, origin)
- parser = parser_class(lexer.tokenize())
- return parser.parse()
-
-class Token(object):
- def __init__(self, token_type, contents):
- # token_type must be TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK or TOKEN_COMMENT.
- self.token_type, self.contents = token_type, contents
-
- def __str__(self):
- return '<%s token: "%s...">' % \
- ({TOKEN_TEXT: 'Text', TOKEN_VAR: 'Var', TOKEN_BLOCK: 'Block', TOKEN_COMMENT: 'Comment'}[self.token_type],
- self.contents[:20].replace('\n', ''))
-
- def split_contents(self):
- split = []
- bits = iter(smart_split(self.contents))
- for bit in bits:
- # Handle translation-marked template pieces
- if bit.startswith('_("') or bit.startswith("_('"):
- sentinal = bit[2] + ')'
- trans_bit = [bit]
- while not bit.endswith(sentinal):
- bit = bits.next()
- trans_bit.append(bit)
- bit = ' '.join(trans_bit)
- split.append(bit)
- return split
-
-class Lexer(object):
- def __init__(self, template_string, origin):
- self.template_string = template_string
- self.origin = origin
-
- def tokenize(self):
- "Return a list of tokens from a given template_string."
- in_tag = False
- result = []
- for bit in tag_re.split(self.template_string):
- if bit:
- result.append(self.create_token(bit, in_tag))
- in_tag = not in_tag
- return result
-
- def create_token(self, token_string, in_tag):
- """
- Convert the given token string into a new Token object and return it.
- If in_tag is True, we are processing something that matched a tag,
- otherwise it should be treated as a literal string.
- """
- if in_tag:
- if token_string.startswith(VARIABLE_TAG_START):
- token = Token(TOKEN_VAR, token_string[len(VARIABLE_TAG_START):-len(VARIABLE_TAG_END)].strip())
- elif token_string.startswith(BLOCK_TAG_START):
- token = Token(TOKEN_BLOCK, token_string[len(BLOCK_TAG_START):-len(BLOCK_TAG_END)].strip())
- elif token_string.startswith(COMMENT_TAG_START):
- token = Token(TOKEN_COMMENT, '')
- else:
- token = Token(TOKEN_TEXT, token_string)
- return token
-
-class Parser(object):
- def __init__(self, tokens):
- self.tokens = tokens
- self.tags = {}
- self.filters = {}
- for lib in builtins:
- self.add_library(lib)
-
- def parse(self, parse_until=None):
- if parse_until is None: parse_until = []
- nodelist = self.create_nodelist()
- while self.tokens:
- token = self.next_token()
- if token.token_type == TOKEN_TEXT:
- self.extend_nodelist(nodelist, TextNode(token.contents), token)
- elif token.token_type == TOKEN_VAR:
- if not token.contents:
- self.empty_variable(token)
- filter_expression = self.compile_filter(token.contents)
- var_node = self.create_variable_node(filter_expression)
- self.extend_nodelist(nodelist, var_node,token)
- elif token.token_type == TOKEN_BLOCK:
- if token.contents in parse_until:
- # put token back on token list so calling code knows why it terminated
- self.prepend_token(token)
- return nodelist
- try:
- command = token.contents.split()[0]
- except IndexError:
- self.empty_block_tag(token)
- # execute callback function for this tag and append resulting node
- self.enter_command(command, token)
- try:
- compile_func = self.tags[command]
- except KeyError:
- self.invalid_block_tag(token, command, parse_until)
- try:
- compiled_result = compile_func(self, token)
- except TemplateSyntaxError, e:
- if not self.compile_function_error(token, e):
- raise
- self.extend_nodelist(nodelist, compiled_result, token)
- self.exit_command()
- if parse_until:
- self.unclosed_block_tag(parse_until)
- return nodelist
-
- def skip_past(self, endtag):
- while self.tokens:
- token = self.next_token()
- if token.token_type == TOKEN_BLOCK and token.contents == endtag:
- return
- self.unclosed_block_tag([endtag])
-
- def create_variable_node(self, filter_expression):
- return VariableNode(filter_expression)
-
- def create_nodelist(self):
- return NodeList()
-
- def extend_nodelist(self, nodelist, node, token):
- if node.must_be_first and nodelist:
- try:
- if nodelist.contains_nontext:
- raise AttributeError
- except AttributeError:
- raise TemplateSyntaxError("%r must be the first tag in the template." % node)
- if isinstance(nodelist, NodeList) and not isinstance(node, TextNode):
- nodelist.contains_nontext = True
- nodelist.append(node)
-
- def enter_command(self, command, token):
- pass
-
- def exit_command(self):
- pass
-
- def error(self, token, msg):
- return TemplateSyntaxError(msg)
-
- def empty_variable(self, token):
- raise self.error(token, "Empty variable tag")
-
- def empty_block_tag(self, token):
- raise self.error(token, "Empty block tag")
-
- def invalid_block_tag(self, token, command, parse_until=None):
- if parse_until:
- raise self.error(token, "Invalid block tag: '%s', expected %s" % (command, get_text_list(["'%s'" % p for p in parse_until])))
- raise self.error(token, "Invalid block tag: '%s'" % command)
-
- def unclosed_block_tag(self, parse_until):
- raise self.error(None, "Unclosed tags: %s " % ', '.join(parse_until))
-
- def compile_function_error(self, token, e):
- pass
-
- def next_token(self):
- return self.tokens.pop(0)
-
- def prepend_token(self, token):
- self.tokens.insert(0, token)
-
- def delete_first_token(self):
- del self.tokens[0]
-
- def add_library(self, lib):
- self.tags.update(lib.tags)
- self.filters.update(lib.filters)
-
- def compile_filter(self, token):
- "Convenient wrapper for FilterExpression"
- return FilterExpression(token, self)
-
- def find_filter(self, filter_name):
- if filter_name in self.filters:
- return self.filters[filter_name]
- else:
- raise TemplateSyntaxError("Invalid filter: '%s'" % filter_name)
-
-class TokenParser(object):
- """
- Subclass this and implement the top() method to parse a template line. When
- instantiating the parser, pass in the line from the Django template parser.
-
- The parser's "tagname" instance-variable stores the name of the tag that
- the filter was called with.
- """
- def __init__(self, subject):
- self.subject = subject
- self.pointer = 0
- self.backout = []
- self.tagname = self.tag()
-
- def top(self):
- "Overload this method to do the actual parsing and return the result."
- raise NotImplementedError()
-
- def more(self):
- "Returns True if there is more stuff in the tag."
- return self.pointer < len(self.subject)
-
- def back(self):
- "Undoes the last microparser. Use this for lookahead and backtracking."
- if not len(self.backout):
- raise TemplateSyntaxError("back called without some previous parsing")
- self.pointer = self.backout.pop()
-
- def tag(self):
- "A microparser that just returns the next tag from the line."
- subject = self.subject
- i = self.pointer
- if i >= len(subject):
- raise TemplateSyntaxError("expected another tag, found end of string: %s" % subject)
- p = i
- while i < len(subject) and subject[i] not in (' ', '\t'):
- i += 1
- s = subject[p:i]
- while i < len(subject) and subject[i] in (' ', '\t'):
- i += 1
- self.backout.append(self.pointer)
- self.pointer = i
- return s
-
- def value(self):
- "A microparser that parses for a value: some string constant or variable name."
- subject = self.subject
- i = self.pointer
-
- def next_space_index(subject, i):
- "Increment pointer until a real space (i.e. a space not within quotes) is encountered"
- while i < len(subject) and subject[i] not in (' ', '\t'):
- if subject[i] in ('"', "'"):
- c = subject[i]
- i += 1
- while i < len(subject) and subject[i] != c:
- i += 1
- if i >= len(subject):
- raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
- i += 1
- return i
-
- if i >= len(subject):
- raise TemplateSyntaxError("Searching for value. Expected another value but found end of string: %s" % subject)
- if subject[i] in ('"', "'"):
- p = i
- i += 1
- while i < len(subject) and subject[i] != subject[p]:
- i += 1
- if i >= len(subject):
- raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
- i += 1
-
- # Continue parsing until next "real" space, so that filters are also included
- i = next_space_index(subject, i)
-
- res = subject[p:i]
- while i < len(subject) and subject[i] in (' ', '\t'):
- i += 1
- self.backout.append(self.pointer)
- self.pointer = i
- return res
- else:
- p = i
- i = next_space_index(subject, i)
- s = subject[p:i]
- while i < len(subject) and subject[i] in (' ', '\t'):
- i += 1
- self.backout.append(self.pointer)
- self.pointer = i
- return s
-
-# This only matches constant *strings* (things in quotes or marked for
-# translation). Numbers are treated as variables for implementation reasons
-# (so that they retain their type when passed to filters).
-constant_string = r"""
-(?:%(i18n_open)s%(strdq)s%(i18n_close)s|
-%(i18n_open)s%(strsq)s%(i18n_close)s|
-%(strdq)s|
-%(strsq)s)
-""" % {
- 'strdq': r'"[^"\\]*(?:\\.[^"\\]*)*"', # double-quoted string
- 'strsq': r"'[^'\\]*(?:\\.[^'\\]*)*'", # single-quoted string
- 'i18n_open' : re.escape("_("),
- 'i18n_close' : re.escape(")"),
- }
-constant_string = constant_string.replace("\n", "")
-
-filter_raw_string = r"""
-^(?P<constant>%(constant)s)|
-^(?P<var>[%(var_chars)s]+|%(num)s)|
- (?:%(filter_sep)s
- (?P<filter_name>\w+)
- (?:%(arg_sep)s
- (?:
- (?P<constant_arg>%(constant)s)|
- (?P<var_arg>[%(var_chars)s]+|%(num)s)
- )
- )?
- )""" % {
- 'constant': constant_string,
- 'num': r'[-+\.]?\d[\d\.e]*',
- 'var_chars': "\w\." ,
- 'filter_sep': re.escape(FILTER_SEPARATOR),
- 'arg_sep': re.escape(FILTER_ARGUMENT_SEPARATOR),
- }
-
-filter_re = re.compile(filter_raw_string, re.UNICODE|re.VERBOSE)
-
-class FilterExpression(object):
- r"""
- Parses a variable token and its optional filters (all as a single string),
- and return a list of tuples of the filter name and arguments.
- Sample:
- >>> token = 'variable|default:"Default value"|date:"Y-m-d"'
- >>> p = Parser('')
- >>> fe = FilterExpression(token, p)
- >>> len(fe.filters)
- 2
- >>> fe.var
- <Variable: 'variable'>
-
- This class should never be instantiated outside of the
- get_filters_from_token helper function.
- """
- def __init__(self, token, parser):
- self.token = token
- matches = filter_re.finditer(token)
- var_obj = None
- filters = []
- upto = 0
- for match in matches:
- start = match.start()
- if upto != start:
- raise TemplateSyntaxError("Could not parse some characters: %s|%s|%s" % \
- (token[:upto], token[upto:start], token[start:]))
- if var_obj is None:
- var, constant = match.group("var", "constant")
- if constant:
- try:
- var_obj = Variable(constant).resolve({})
- except VariableDoesNotExist:
- var_obj = None
- elif var is None:
- raise TemplateSyntaxError("Could not find variable at start of %s." % token)
- else:
- var_obj = Variable(var)
- else:
- filter_name = match.group("filter_name")
- args = []
- constant_arg, var_arg = match.group("constant_arg", "var_arg")
- if constant_arg:
- args.append((False, Variable(constant_arg).resolve({})))
- elif var_arg:
- args.append((True, Variable(var_arg)))
- filter_func = parser.find_filter(filter_name)
- self.args_check(filter_name, filter_func, args)
- filters.append((filter_func, args))
- upto = match.end()
- if upto != len(token):
- raise TemplateSyntaxError("Could not parse the remainder: '%s' from '%s'" % (token[upto:], token))
-
- self.filters = filters
- self.var = var_obj
-
- def resolve(self, context, ignore_failures=False):
- if isinstance(self.var, Variable):
- try:
- obj = self.var.resolve(context)
- except VariableDoesNotExist:
- if ignore_failures:
- obj = None
- else:
- if settings.TEMPLATE_STRING_IF_INVALID:
- global invalid_var_format_string
- if invalid_var_format_string is None:
- invalid_var_format_string = '%s' in settings.TEMPLATE_STRING_IF_INVALID
- if invalid_var_format_string:
- return settings.TEMPLATE_STRING_IF_INVALID % self.var
- return settings.TEMPLATE_STRING_IF_INVALID
- else:
- obj = settings.TEMPLATE_STRING_IF_INVALID
- else:
- obj = self.var
- for func, args in self.filters:
- arg_vals = []
- for lookup, arg in args:
- if not lookup:
- arg_vals.append(mark_safe(arg))
- else:
- arg_vals.append(arg.resolve(context))
- if getattr(func, 'needs_autoescape', False):
- new_obj = func(obj, autoescape=context.autoescape, *arg_vals)
- else:
- new_obj = func(obj, *arg_vals)
- if getattr(func, 'is_safe', False) and isinstance(obj, SafeData):
- obj = mark_safe(new_obj)
- elif isinstance(obj, EscapeData):
- obj = mark_for_escaping(new_obj)
- else:
- obj = new_obj
- return obj
-
- def args_check(name, func, provided):
- provided = list(provided)
- plen = len(provided)
- # Check to see if a decorator is providing the real function.
- func = getattr(func, '_decorated_function', func)
- args, varargs, varkw, defaults = getargspec(func)
- # First argument is filter input.
- args.pop(0)
- if defaults:
- nondefs = args[:-len(defaults)]
- else:
- nondefs = args
- # Args without defaults must be provided.
- try:
- for arg in nondefs:
- provided.pop(0)
- except IndexError:
- # Not enough
- raise TemplateSyntaxError("%s requires %d arguments, %d provided" % (name, len(nondefs), plen))
-
- # Defaults can be overridden.
- defaults = defaults and list(defaults) or []
- try:
- for parg in provided:
- defaults.pop(0)
- except IndexError:
- # Too many.
- raise TemplateSyntaxError("%s requires %d arguments, %d provided" % (name, len(nondefs), plen))
-
- return True
- args_check = staticmethod(args_check)
-
- def __str__(self):
- return self.token
-
-def resolve_variable(path, context):
- """
- Returns the resolved variable, which may contain attribute syntax, within
- the given context.
-
- Deprecated; use the Variable class instead.
- """
- return Variable(path).resolve(context)
-
-class Variable(object):
- r"""
- A template variable, resolvable against a given context. The variable may be
- a hard-coded string (if it begins and ends with single or double quote
- marks)::
-
- >>> c = {'article': {'section':u'News'}}
- >>> Variable('article.section').resolve(c)
- u'News'
- >>> Variable('article').resolve(c)
- {'section': u'News'}
- >>> class AClass: pass
- >>> c = AClass()
- >>> c.article = AClass()
- >>> c.article.section = u'News'
-
- (The example assumes VARIABLE_ATTRIBUTE_SEPARATOR is '.')
- """
-
- def __init__(self, var):
- self.var = var
- self.literal = None
- self.lookups = None
- self.translate = False
-
- try:
- # First try to treat this variable as a number.
- #
- # Note that this could cause an OverflowError here that we're not
- # catching. Since this should only happen at compile time, that's
- # probably OK.
- self.literal = float(var)
-
- # So it's a float... is it an int? If the original value contained a
- # dot or an "e" then it was a float, not an int.
- if '.' not in var and 'e' not in var.lower():
- self.literal = int(self.literal)
-
- # "2." is invalid
- if var.endswith('.'):
- raise ValueError
-
- except ValueError:
- # A ValueError means that the variable isn't a number.
- if var.startswith('_(') and var.endswith(')'):
- # The result of the lookup should be translated at rendering
- # time.
- self.translate = True
- var = var[2:-1]
- # If it's wrapped with quotes (single or double), then
- # we're also dealing with a literal.
- try:
- self.literal = mark_safe(unescape_string_literal(var))
- except ValueError:
- # Otherwise we'll set self.lookups so that resolve() knows we're
- # dealing with a bonafide variable
- if var.find(VARIABLE_ATTRIBUTE_SEPARATOR + '_') > -1 or var[0] == '_':
- raise TemplateSyntaxError("Variables and attributes may not begin with underscores: '%s'" % var)
- self.lookups = tuple(var.split(VARIABLE_ATTRIBUTE_SEPARATOR))
-
- def resolve(self, context):
- """Resolve this variable against a given context."""
- if self.lookups is not None:
- # We're dealing with a variable that needs to be resolved
- value = self._resolve_lookup(context)
- else:
- # We're dealing with a literal, so it's already been "resolved"
- value = self.literal
- if self.translate:
- return _(value)
- return value
-
- def __repr__(self):
- return "<%s: %r>" % (self.__class__.__name__, self.var)
-
- def __str__(self):
- return self.var
-
- def _resolve_lookup(self, context):
- """
- Performs resolution of a real variable (i.e. not a literal) against the
- given context.
-
- As indicated by the method's name, this method is an implementation
- detail and shouldn't be called by external code. Use Variable.resolve()
- instead.
- """
- current = context
- for bit in self.lookups:
- try: # dictionary lookup
- current = current[bit]
- except (TypeError, AttributeError, KeyError):
- try: # attribute lookup
- current = getattr(current, bit)
- if callable(current):
- if getattr(current, 'alters_data', False):
- current = settings.TEMPLATE_STRING_IF_INVALID
- else:
- try: # method call (assuming no args required)
- current = current()
- except TypeError: # arguments *were* required
- # GOTCHA: This will also catch any TypeError
- # raised in the function itself.
- current = settings.TEMPLATE_STRING_IF_INVALID # invalid method call
- except Exception, e:
- if getattr(e, 'silent_variable_failure', False):
- current = settings.TEMPLATE_STRING_IF_INVALID
- else:
- raise
- except (TypeError, AttributeError):
- try: # list-index lookup
- current = current[int(bit)]
- except (IndexError, # list index out of range
- ValueError, # invalid literal for int()
- KeyError, # current is a dict without `int(bit)` key
- TypeError, # unsubscriptable object
- ):
- raise VariableDoesNotExist("Failed lookup for key [%s] in %r", (bit, current)) # missing attribute
- except Exception, e:
- if getattr(e, 'silent_variable_failure', False):
- current = settings.TEMPLATE_STRING_IF_INVALID
- else:
- raise
- except Exception, e:
- if getattr(e, 'silent_variable_failure', False):
- current = settings.TEMPLATE_STRING_IF_INVALID
- else:
- raise
-
- return current
-
-class Node(object):
- # Set this to True for nodes that must be first in the template (although
- # they can be preceded by text nodes.
- must_be_first = False
- child_nodelists = ('nodelist',)
-
- def render(self, context):
- "Return the node rendered as a string"
- pass
-
- def __iter__(self):
- yield self
-
- def get_nodes_by_type(self, nodetype):
- "Return a list of all nodes (within this node and its nodelist) of the given type"
- nodes = []
- if isinstance(self, nodetype):
- nodes.append(self)
- for attr in self.child_nodelists:
- nodelist = getattr(self, attr, None)
- if nodelist:
- nodes.extend(nodelist.get_nodes_by_type(nodetype))
- return nodes
-
-class NodeList(list):
- # Set to True the first time a non-TextNode is inserted by
- # extend_nodelist().
- contains_nontext = False
-
- def render(self, context):
- bits = []
- for node in self:
- if isinstance(node, Node):
- bits.append(self.render_node(node, context))
- else:
- bits.append(node)
- return mark_safe(''.join([force_unicode(b) for b in bits]))
-
- def get_nodes_by_type(self, nodetype):
- "Return a list of all nodes of the given type"
- nodes = []
- for node in self:
- nodes.extend(node.get_nodes_by_type(nodetype))
- return nodes
-
- def render_node(self, node, context):
- return node.render(context)
-
-class TextNode(Node):
- def __init__(self, s):
- self.s = s
-
- def __repr__(self):
- return "<Text Node: '%s'>" % smart_str(self.s[:25], 'ascii',
- errors='replace')
-
- def render(self, context):
- return self.s
-
-def _render_value_in_context(value, context):
- """
- Converts any value to a string to become part of a rendered template. This
- means escaping, if required, and conversion to a unicode object. If value
- is a string, it is expected to have already been translated.
- """
- value = localize(value)
- value = force_unicode(value)
- if (context.autoescape and not isinstance(value, SafeData)) or isinstance(value, EscapeData):
- return escape(value)
- else:
- return value
-
-class VariableNode(Node):
- def __init__(self, filter_expression):
- self.filter_expression = filter_expression
-
- def __repr__(self):
- return "<Variable Node: %s>" % self.filter_expression
-
- def render(self, context):
- try:
- output = self.filter_expression.resolve(context)
- except UnicodeDecodeError:
- # Unicode conversion can fail sometimes for reasons out of our
- # control (e.g. exception rendering). In that case, we fail quietly.
- return ''
- return _render_value_in_context(output, context)
-
-def generic_tag_compiler(params, defaults, name, node_class, parser, token):
- "Returns a template.Node subclass."
- bits = token.split_contents()[1:]
- bmax = len(params)
- def_len = defaults and len(defaults) or 0
- bmin = bmax - def_len
- if(len(bits) < bmin or len(bits) > bmax):
- if bmin == bmax:
- message = "%s takes %s arguments" % (name, bmin)
- else:
- message = "%s takes between %s and %s arguments" % (name, bmin, bmax)
- raise TemplateSyntaxError(message)
- return node_class(bits)
-
-class Library(object):
- def __init__(self):
- self.filters = {}
- self.tags = {}
-
- def tag(self, name=None, compile_function=None):
- if name == None and compile_function == None:
- # @register.tag()
- return self.tag_function
- elif name != None and compile_function == None:
- if(callable(name)):
- # @register.tag
- return self.tag_function(name)
- else:
- # @register.tag('somename') or @register.tag(name='somename')
- def dec(func):
- return self.tag(name, func)
- return dec
- elif name != None and compile_function != None:
- # register.tag('somename', somefunc)
- self.tags[name] = compile_function
- return compile_function
- else:
- raise InvalidTemplateLibrary("Unsupported arguments to Library.tag: (%r, %r)", (name, compile_function))
-
- def tag_function(self,func):
- self.tags[getattr(func, "_decorated_function", func).__name__] = func
- return func
-
- def filter(self, name=None, filter_func=None):
- if name == None and filter_func == None:
- # @register.filter()
- return self.filter_function
- elif filter_func == None:
- if(callable(name)):
- # @register.filter
- return self.filter_function(name)
- else:
- # @register.filter('somename') or @register.filter(name='somename')
- def dec(func):
- return self.filter(name, func)
- return dec
- elif name != None and filter_func != None:
- # register.filter('somename', somefunc)
- self.filters[name] = filter_func
- return filter_func
- else:
- raise InvalidTemplateLibrary("Unsupported arguments to Library.filter: (%r, %r)", (name, filter_func))
-
- def filter_function(self, func):
- self.filters[getattr(func, "_decorated_function", func).__name__] = func
- return func
-
- def simple_tag(self,func):
- params, xx, xxx, defaults = getargspec(func)
-
- class SimpleNode(Node):
- def __init__(self, vars_to_resolve):
- self.vars_to_resolve = map(Variable, vars_to_resolve)
-
- def render(self, context):
- resolved_vars = [var.resolve(context) for var in self.vars_to_resolve]
- return func(*resolved_vars)
-
- compile_func = curry(generic_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, SimpleNode)
- compile_func.__doc__ = func.__doc__
- self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
- return func
-
- def inclusion_tag(self, file_name, context_class=Context, takes_context=False):
- def dec(func):
- params, xx, xxx, defaults = getargspec(func)
- if takes_context:
- if params[0] == 'context':
- params = params[1:]
- else:
- raise TemplateSyntaxError("Any tag function decorated with takes_context=True must have a first argument of 'context'")
-
- class InclusionNode(Node):
- def __init__(self, vars_to_resolve):
- self.vars_to_resolve = map(Variable, vars_to_resolve)
-
- def render(self, context):
- resolved_vars = [var.resolve(context) for var in self.vars_to_resolve]
- if takes_context:
- args = [context] + resolved_vars
- else:
- args = resolved_vars
-
- dict = func(*args)
-
- if not getattr(self, 'nodelist', False):
- from django.template.loader import get_template, select_template
- if not isinstance(file_name, basestring) and is_iterable(file_name):
- t = select_template(file_name)
- else:
- t = get_template(file_name)
- self.nodelist = t.nodelist
- new_context = context_class(dict, autoescape=context.autoescape)
- # Copy across the CSRF token, if present, because inclusion
- # tags are often used for forms, and we need instructions
- # for using CSRF protection to be as simple as possible.
- csrf_token = context.get('csrf_token', None)
- if csrf_token is not None:
- new_context['csrf_token'] = csrf_token
- return self.nodelist.render(new_context)
-
- compile_func = curry(generic_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, InclusionNode)
- compile_func.__doc__ = func.__doc__
- self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
- return func
- return dec
-
-def import_library(taglib_module):
- """Load a template tag library module.
-
- Verifies that the library contains a 'register' attribute, and
- returns that attribute as the representation of the library
- """
- app_path, taglib = taglib_module.rsplit('.',1)
- app_module = import_module(app_path)
- try:
- mod = import_module(taglib_module)
- except ImportError, e:
- # If the ImportError is because the taglib submodule does not exist, that's not
- # an error that should be raised. If the submodule exists and raised an ImportError
- # on the attempt to load it, that we want to raise.
- if not module_has_submodule(app_module, taglib):
- return None
- else:
- raise InvalidTemplateLibrary("ImportError raised loading %s: %s" % (taglib_module, e))
- try:
- return mod.register
- except AttributeError:
- raise InvalidTemplateLibrary("Template library %s does not have a variable named 'register'" % taglib_module)
-
-templatetags_modules = []
-
-def get_templatetags_modules():
- """Return the list of all available template tag modules.
-
- Caches the result for faster access.
- """
- global templatetags_modules
- if not templatetags_modules:
- _templatetags_modules = []
- # Populate list once per thread.
- for app_module in ['django'] + list(settings.INSTALLED_APPS):
- try:
- templatetag_module = '%s.templatetags' % app_module
- import_module(templatetag_module)
- _templatetags_modules.append(templatetag_module)
- except ImportError:
- continue
- templatetags_modules = _templatetags_modules
- return templatetags_modules
-
-def get_library(library_name):
- """
- Load the template library module with the given name.
-
- If library is not already loaded loop over all templatetags modules to locate it.
-
- {% load somelib %} and {% load someotherlib %} loops twice.
-
- Subsequent loads eg. {% load somelib %} in the same process will grab the cached
- module from libraries.
- """
- lib = libraries.get(library_name, None)
- if not lib:
- templatetags_modules = get_templatetags_modules()
- tried_modules = []
- for module in templatetags_modules:
- taglib_module = '%s.%s' % (module, library_name)
- tried_modules.append(taglib_module)
- lib = import_library(taglib_module)
- if lib:
- libraries[library_name] = lib
- break
- if not lib:
- raise InvalidTemplateLibrary("Template library %s not found, tried %s" % (library_name, ','.join(tried_modules)))
- return lib
-
-def add_to_builtins(module):
- builtins.append(import_library(module))
-
-add_to_builtins('django.template.defaulttags')
-add_to_builtins('django.template.defaultfilters')
diff --git a/parts/django/django/template/context.py b/parts/django/django/template/context.py
deleted file mode 100644
index 323c144..0000000
--- a/parts/django/django/template/context.py
+++ /dev/null
@@ -1,149 +0,0 @@
-from django.core.exceptions import ImproperlyConfigured
-from django.utils.importlib import import_module
-
-# Cache of actual callables.
-_standard_context_processors = None
-# We need the CSRF processor no matter what the user has in their settings,
-# because otherwise it is a security vulnerability, and we can't afford to leave
-# this to human error or failure to read migration instructions.
-_builtin_context_processors = ('django.core.context_processors.csrf',)
-
-class ContextPopException(Exception):
- "pop() has been called more times than push()"
- pass
-
-class BaseContext(object):
- def __init__(self, dict_=None):
- dict_ = dict_ or {}
- self.dicts = [dict_]
-
- def __repr__(self):
- return repr(self.dicts)
-
- def __iter__(self):
- for d in reversed(self.dicts):
- yield d
-
- def push(self):
- d = {}
- self.dicts.append(d)
- return d
-
- def pop(self):
- if len(self.dicts) == 1:
- raise ContextPopException
- return self.dicts.pop()
-
- def __setitem__(self, key, value):
- "Set a variable in the current context"
- self.dicts[-1][key] = value
-
- def __getitem__(self, key):
- "Get a variable's value, starting at the current context and going upward"
- for d in reversed(self.dicts):
- if key in d:
- return d[key]
- raise KeyError(key)
-
- def __delitem__(self, key):
- "Delete a variable from the current context"
- del self.dicts[-1][key]
-
- def has_key(self, key):
- for d in self.dicts:
- if key in d:
- return True
- return False
-
- def __contains__(self, key):
- return self.has_key(key)
-
- def get(self, key, otherwise=None):
- for d in reversed(self.dicts):
- if key in d:
- return d[key]
- return otherwise
-
-class Context(BaseContext):
- "A stack container for variable context"
- def __init__(self, dict_=None, autoescape=True, current_app=None):
- self.autoescape = autoescape
- self.current_app = current_app
- self.render_context = RenderContext()
- super(Context, self).__init__(dict_)
-
- def update(self, other_dict):
- "Like dict.update(). Pushes an entire dictionary's keys and values onto the context."
- if not hasattr(other_dict, '__getitem__'):
- raise TypeError('other_dict must be a mapping (dictionary-like) object.')
- self.dicts.append(other_dict)
- return other_dict
-
-class RenderContext(BaseContext):
- """
- A stack container for storing Template state.
-
- RenderContext simplifies the implementation of template Nodes by providing a
- safe place to store state between invocations of a node's `render` method.
-
- The RenderContext also provides scoping rules that are more sensible for
- 'template local' variables. The render context stack is pushed before each
- template is rendered, creating a fresh scope with nothing in it. Name
- resolution fails if a variable is not found at the top of the RequestContext
- stack. Thus, variables are local to a specific template and don't affect the
- rendering of other templates as they would if they were stored in the normal
- template context.
- """
- def __iter__(self):
- for d in self.dicts[-1]:
- yield d
-
- def has_key(self, key):
- return key in self.dicts[-1]
-
- def get(self, key, otherwise=None):
- d = self.dicts[-1]
- if key in d:
- return d[key]
- return otherwise
-
-# This is a function rather than module-level procedural code because we only
-# want it to execute if somebody uses RequestContext.
-def get_standard_processors():
- from django.conf import settings
- global _standard_context_processors
- if _standard_context_processors is None:
- processors = []
- collect = []
- collect.extend(_builtin_context_processors)
- collect.extend(settings.TEMPLATE_CONTEXT_PROCESSORS)
- for path in collect:
- i = path.rfind('.')
- module, attr = path[:i], path[i+1:]
- try:
- mod = import_module(module)
- except ImportError, e:
- raise ImproperlyConfigured('Error importing request processor module %s: "%s"' % (module, e))
- try:
- func = getattr(mod, attr)
- except AttributeError:
- raise ImproperlyConfigured('Module "%s" does not define a "%s" callable request processor' % (module, attr))
- processors.append(func)
- _standard_context_processors = tuple(processors)
- return _standard_context_processors
-
-class RequestContext(Context):
- """
- This subclass of template.Context automatically populates itself using
- the processors defined in TEMPLATE_CONTEXT_PROCESSORS.
- Additional processors can be specified as a list of callables
- using the "processors" keyword argument.
- """
- def __init__(self, request, dict=None, processors=None, current_app=None):
- Context.__init__(self, dict, current_app=current_app)
- if processors is None:
- processors = ()
- else:
- processors = tuple(processors)
- for processor in get_standard_processors() + processors:
- self.update(processor(request))
diff --git a/parts/django/django/template/debug.py b/parts/django/django/template/debug.py
deleted file mode 100644
index c21fb50..0000000
--- a/parts/django/django/template/debug.py
+++ /dev/null
@@ -1,101 +0,0 @@
-from django.template import Lexer, Parser, tag_re, NodeList, VariableNode, TemplateSyntaxError
-from django.utils.encoding import force_unicode
-from django.utils.html import escape
-from django.utils.safestring import SafeData, EscapeData
-from django.utils.formats import localize
-
-class DebugLexer(Lexer):
- def __init__(self, template_string, origin):
- super(DebugLexer, self).__init__(template_string, origin)
-
- def tokenize(self):
- "Return a list of tokens from a given template_string"
- result, upto = [], 0
- for match in tag_re.finditer(self.template_string):
- start, end = match.span()
- if start > upto:
- result.append(self.create_token(self.template_string[upto:start], (upto, start), False))
- upto = start
- result.append(self.create_token(self.template_string[start:end], (start, end), True))
- upto = end
- last_bit = self.template_string[upto:]
- if last_bit:
- result.append(self.create_token(last_bit, (upto, upto + len(last_bit)), False))
- return result
-
- def create_token(self, token_string, source, in_tag):
- token = super(DebugLexer, self).create_token(token_string, in_tag)
- token.source = self.origin, source
- return token
-
-class DebugParser(Parser):
- def __init__(self, lexer):
- super(DebugParser, self).__init__(lexer)
- self.command_stack = []
-
- def enter_command(self, command, token):
- self.command_stack.append( (command, token.source) )
-
- def exit_command(self):
- self.command_stack.pop()
-
- def error(self, token, msg):
- return self.source_error(token.source, msg)
-
- def source_error(self, source,msg):
- e = TemplateSyntaxError(msg)
- e.source = source
- return e
-
- def create_nodelist(self):
- return DebugNodeList()
-
- def create_variable_node(self, contents):
- return DebugVariableNode(contents)
-
- def extend_nodelist(self, nodelist, node, token):
- node.source = token.source
- super(DebugParser, self).extend_nodelist(nodelist, node, token)
-
- def unclosed_block_tag(self, parse_until):
- command, source = self.command_stack.pop()
- msg = "Unclosed tag '%s'. Looking for one of: %s " % (command, ', '.join(parse_until))
- raise self.source_error(source, msg)
-
- def compile_function_error(self, token, e):
- if not hasattr(e, 'source'):
- e.source = token.source
-
-class DebugNodeList(NodeList):
- def render_node(self, node, context):
- try:
- result = node.render(context)
- except TemplateSyntaxError, e:
- if not hasattr(e, 'source'):
- e.source = node.source
- raise
- except Exception, e:
- from sys import exc_info
- wrapped = TemplateSyntaxError(u'Caught %s while rendering: %s' %
- (e.__class__.__name__, force_unicode(e, errors='replace')))
- wrapped.source = node.source
- wrapped.exc_info = exc_info()
- raise wrapped, None, wrapped.exc_info[2]
- return result
-
-class DebugVariableNode(VariableNode):
- def render(self, context):
- try:
- output = self.filter_expression.resolve(context)
- output = localize(output)
- output = force_unicode(output)
- except TemplateSyntaxError, e:
- if not hasattr(e, 'source'):
- e.source = self.source
- raise
- except UnicodeDecodeError:
- return ''
- if (context.autoescape and not isinstance(output, SafeData)) or isinstance(output, EscapeData):
- return escape(output)
- else:
- return output
diff --git a/parts/django/django/template/defaultfilters.py b/parts/django/django/template/defaultfilters.py
deleted file mode 100644
index 80002c3..0000000
--- a/parts/django/django/template/defaultfilters.py
+++ /dev/null
@@ -1,938 +0,0 @@
-"""Default variable filters."""
-
-import re
-from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
-import random as random_module
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-
-from django.template import Variable, Library
-from django.conf import settings
-from django.utils import formats
-from django.utils.encoding import force_unicode, iri_to_uri
-from django.utils.html import conditional_escape
-from django.utils.safestring import mark_safe, SafeData
-from django.utils.translation import ugettext, ungettext
-
-register = Library()
-
-#######################
-# STRING DECORATOR #
-#######################
-
-def stringfilter(func):
- """
- Decorator for filters which should only receive unicode objects. The object
- passed as the first positional argument will be converted to a unicode
- object.
- """
- def _dec(*args, **kwargs):
- if args:
- args = list(args)
- args[0] = force_unicode(args[0])
- if isinstance(args[0], SafeData) and getattr(func, 'is_safe', False):
- return mark_safe(func(*args, **kwargs))
- return func(*args, **kwargs)
-
- # Include a reference to the real function (used to check original
- # arguments by the template parser).
- _dec._decorated_function = getattr(func, '_decorated_function', func)
- for attr in ('is_safe', 'needs_autoescape'):
- if hasattr(func, attr):
- setattr(_dec, attr, getattr(func, attr))
- return wraps(func)(_dec)
-
-###################
-# STRINGS #
-###################
-
-def addslashes(value):
- """
- Adds slashes before quotes. Useful for escaping strings in CSV, for
- example. Less useful for escaping JavaScript; use the ``escapejs``
- filter instead.
- """
- return value.replace('\\', '\\\\').replace('"', '\\"').replace("'", "\\'")
-addslashes.is_safe = True
-addslashes = stringfilter(addslashes)
-
-def capfirst(value):
- """Capitalizes the first character of the value."""
- return value and value[0].upper() + value[1:]
-capfirst.is_safe=True
-capfirst = stringfilter(capfirst)
-
-_base_js_escapes = (
- ('\\', r'\u005C'),
- ('\'', r'\u0027'),
- ('"', r'\u0022'),
- ('>', r'\u003E'),
- ('<', r'\u003C'),
- ('&', r'\u0026'),
- ('=', r'\u003D'),
- ('-', r'\u002D'),
- (';', r'\u003B'),
- (u'\u2028', r'\u2028'),
- (u'\u2029', r'\u2029')
-)
-
-# Escape every ASCII character with a value less than 32.
-_js_escapes = (_base_js_escapes +
- tuple([('%c' % z, '\\u%04X' % z) for z in range(32)]))
-
-def escapejs(value):
- """Hex encodes characters for use in JavaScript strings."""
- for bad, good in _js_escapes:
- value = value.replace(bad, good)
- return value
-escapejs = stringfilter(escapejs)
-
-def fix_ampersands(value):
- """Replaces ampersands with ``&amp;`` entities."""
- from django.utils.html import fix_ampersands
- return fix_ampersands(value)
-fix_ampersands.is_safe=True
-fix_ampersands = stringfilter(fix_ampersands)
-
-# Values for testing floatformat input against infinity and NaN representations,
-# which differ across platforms and Python versions. Some (i.e. old Windows
-# ones) are not recognized by Decimal but we want to return them unchanged vs.
-# returning an empty string as we do for completley invalid input. Note these
-# need to be built up from values that are not inf/nan, since inf/nan values do
-# not reload properly from .pyc files on Windows prior to some level of Python 2.5
-# (see Python Issue757815 and Issue1080440).
-pos_inf = 1e200 * 1e200
-neg_inf = -1e200 * 1e200
-nan = (1e200 * 1e200) / (1e200 * 1e200)
-special_floats = [str(pos_inf), str(neg_inf), str(nan)]
-
-def floatformat(text, arg=-1):
- """
- Displays a float to a specified number of decimal places.
-
- If called without an argument, it displays the floating point number with
- one decimal place -- but only if there's a decimal place to be displayed:
-
- * num1 = 34.23234
- * num2 = 34.00000
- * num3 = 34.26000
- * {{ num1|floatformat }} displays "34.2"
- * {{ num2|floatformat }} displays "34"
- * {{ num3|floatformat }} displays "34.3"
-
- If arg is positive, it will always display exactly arg number of decimal
- places:
-
- * {{ num1|floatformat:3 }} displays "34.232"
- * {{ num2|floatformat:3 }} displays "34.000"
- * {{ num3|floatformat:3 }} displays "34.260"
-
- If arg is negative, it will display arg number of decimal places -- but
- only if there are places to be displayed:
-
- * {{ num1|floatformat:"-3" }} displays "34.232"
- * {{ num2|floatformat:"-3" }} displays "34"
- * {{ num3|floatformat:"-3" }} displays "34.260"
-
- If the input float is infinity or NaN, the (platform-dependent) string
- representation of that value will be displayed.
- """
-
- try:
- input_val = force_unicode(text)
- d = Decimal(input_val)
- except UnicodeEncodeError:
- return u''
- except InvalidOperation:
- if input_val in special_floats:
- return input_val
- try:
- d = Decimal(force_unicode(float(text)))
- except (ValueError, InvalidOperation, TypeError, UnicodeEncodeError):
- return u''
- try:
- p = int(arg)
- except ValueError:
- return input_val
-
- try:
- m = int(d) - d
- except (ValueError, OverflowError, InvalidOperation):
- return input_val
-
- if not m and p < 0:
- return mark_safe(formats.number_format(u'%d' % (int(d)), 0))
-
- if p == 0:
- exp = Decimal(1)
- else:
- exp = Decimal('1.0') / (Decimal(10) ** abs(p))
- try:
- return mark_safe(formats.number_format(u'%s' % str(d.quantize(exp, ROUND_HALF_UP)), abs(p)))
- except InvalidOperation:
- return input_val
-floatformat.is_safe = True
-
-def iriencode(value):
- """Escapes an IRI value for use in a URL."""
- return force_unicode(iri_to_uri(value))
-iriencode.is_safe = True
-iriencode = stringfilter(iriencode)
-
-def linenumbers(value, autoescape=None):
- """Displays text with line numbers."""
- from django.utils.html import escape
- lines = value.split(u'\n')
- # Find the maximum width of the line count, for use with zero padding
- # string format command
- width = unicode(len(unicode(len(lines))))
- if not autoescape or isinstance(value, SafeData):
- for i, line in enumerate(lines):
- lines[i] = (u"%0" + width + u"d. %s") % (i + 1, line)
- else:
- for i, line in enumerate(lines):
- lines[i] = (u"%0" + width + u"d. %s") % (i + 1, escape(line))
- return mark_safe(u'\n'.join(lines))
-linenumbers.is_safe = True
-linenumbers.needs_autoescape = True
-linenumbers = stringfilter(linenumbers)
-
-def lower(value):
- """Converts a string into all lowercase."""
- return value.lower()
-lower.is_safe = True
-lower = stringfilter(lower)
-
-def make_list(value):
- """
- Returns the value turned into a list.
-
- For an integer, it's a list of digits.
- For a string, it's a list of characters.
- """
- return list(value)
-make_list.is_safe = False
-make_list = stringfilter(make_list)
-
-def slugify(value):
- """
- Normalizes string, converts to lowercase, removes non-alpha characters,
- and converts spaces to hyphens.
- """
- import unicodedata
- value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
- value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
- return mark_safe(re.sub('[-\s]+', '-', value))
-slugify.is_safe = True
-slugify = stringfilter(slugify)
-
-def stringformat(value, arg):
- """
- Formats the variable according to the arg, a string formatting specifier.
-
- This specifier uses Python string formating syntax, with the exception that
- the leading "%" is dropped.
-
- See http://docs.python.org/lib/typesseq-strings.html for documentation
- of Python string formatting
- """
- try:
- return (u"%" + unicode(arg)) % value
- except (ValueError, TypeError):
- return u""
-stringformat.is_safe = True
-
-def title(value):
- """Converts a string into titlecase."""
- t = re.sub("([a-z])'([A-Z])", lambda m: m.group(0).lower(), value.title())
- return re.sub("\d([A-Z])", lambda m: m.group(0).lower(), t)
-title.is_safe = True
-title = stringfilter(title)
-
-def truncatewords(value, arg):
- """
- Truncates a string after a certain number of words.
-
- Argument: Number of words to truncate after.
-
- Newlines within the string are removed.
- """
- from django.utils.text import truncate_words
- try:
- length = int(arg)
- except ValueError: # Invalid literal for int().
- return value # Fail silently.
- return truncate_words(value, length)
-truncatewords.is_safe = True
-truncatewords = stringfilter(truncatewords)
-
-def truncatewords_html(value, arg):
- """
- Truncates HTML after a certain number of words.
-
- Argument: Number of words to truncate after.
-
- Newlines in the HTML are preserved.
- """
- from django.utils.text import truncate_html_words
- try:
- length = int(arg)
- except ValueError: # invalid literal for int()
- return value # Fail silently.
- return truncate_html_words(value, length)
-truncatewords_html.is_safe = True
-truncatewords_html = stringfilter(truncatewords_html)
-
-def upper(value):
- """Converts a string into all uppercase."""
- return value.upper()
-upper.is_safe = False
-upper = stringfilter(upper)
-
-def urlencode(value):
- """Escapes a value for use in a URL."""
- from django.utils.http import urlquote
- return urlquote(value)
-urlencode.is_safe = False
-urlencode = stringfilter(urlencode)
-
-def urlize(value, autoescape=None):
- """Converts URLs in plain text into clickable links."""
- from django.utils.html import urlize
- return mark_safe(urlize(value, nofollow=True, autoescape=autoescape))
-urlize.is_safe=True
-urlize.needs_autoescape = True
-urlize = stringfilter(urlize)
-
-def urlizetrunc(value, limit, autoescape=None):
- """
- Converts URLs into clickable links, truncating URLs to the given character
- limit, and adding 'rel=nofollow' attribute to discourage spamming.
-
- Argument: Length to truncate URLs to.
- """
- from django.utils.html import urlize
- return mark_safe(urlize(value, trim_url_limit=int(limit), nofollow=True,
- autoescape=autoescape))
-urlizetrunc.is_safe = True
-urlizetrunc.needs_autoescape = True
-urlizetrunc = stringfilter(urlizetrunc)
-
-def wordcount(value):
- """Returns the number of words."""
- return len(value.split())
-wordcount.is_safe = False
-wordcount = stringfilter(wordcount)
-
-def wordwrap(value, arg):
- """
- Wraps words at specified line length.
-
- Argument: number of characters to wrap the text at.
- """
- from django.utils.text import wrap
- return wrap(value, int(arg))
-wordwrap.is_safe = True
-wordwrap = stringfilter(wordwrap)
-
-def ljust(value, arg):
- """
- Left-aligns the value in a field of a given width.
-
- Argument: field size.
- """
- return value.ljust(int(arg))
-ljust.is_safe = True
-ljust = stringfilter(ljust)
-
-def rjust(value, arg):
- """
- Right-aligns the value in a field of a given width.
-
- Argument: field size.
- """
- return value.rjust(int(arg))
-rjust.is_safe = True
-rjust = stringfilter(rjust)
-
-def center(value, arg):
- """Centers the value in a field of a given width."""
- return value.center(int(arg))
-center.is_safe = True
-center = stringfilter(center)
-
-def cut(value, arg):
- """
- Removes all values of arg from the given string.
- """
- safe = isinstance(value, SafeData)
- value = value.replace(arg, u'')
- if safe and arg != ';':
- return mark_safe(value)
- return value
-cut = stringfilter(cut)
-
-###################
-# HTML STRINGS #
-###################
-
-def escape(value):
- """
- Marks the value as a string that should not be auto-escaped.
- """
- from django.utils.safestring import mark_for_escaping
- return mark_for_escaping(value)
-escape.is_safe = True
-escape = stringfilter(escape)
-
-def force_escape(value):
- """
- Escapes a string's HTML. This returns a new string containing the escaped
- characters (as opposed to "escape", which marks the content for later
- possible escaping).
- """
- from django.utils.html import escape
- return mark_safe(escape(value))
-force_escape = stringfilter(force_escape)
-force_escape.is_safe = True
-
-def linebreaks(value, autoescape=None):
- """
- Replaces line breaks in plain text with appropriate HTML; a single
- newline becomes an HTML line break (``<br />``) and a new line
- followed by a blank line becomes a paragraph break (``</p>``).
- """
- from django.utils.html import linebreaks
- autoescape = autoescape and not isinstance(value, SafeData)
- return mark_safe(linebreaks(value, autoescape))
-linebreaks.is_safe = True
-linebreaks.needs_autoescape = True
-linebreaks = stringfilter(linebreaks)
-
-def linebreaksbr(value, autoescape=None):
- """
- Converts all newlines in a piece of plain text to HTML line breaks
- (``<br />``).
- """
- if autoescape and not isinstance(value, SafeData):
- from django.utils.html import escape
- value = escape(value)
- return mark_safe(value.replace('\n', '<br />'))
-linebreaksbr.is_safe = True
-linebreaksbr.needs_autoescape = True
-linebreaksbr = stringfilter(linebreaksbr)
-
-def safe(value):
- """
- Marks the value as a string that should not be auto-escaped.
- """
- return mark_safe(value)
-safe.is_safe = True
-safe = stringfilter(safe)
-
-def safeseq(value):
- """
- A "safe" filter for sequences. Marks each element in the sequence,
- individually, as safe, after converting them to unicode. Returns a list
- with the results.
- """
- return [mark_safe(force_unicode(obj)) for obj in value]
-safeseq.is_safe = True
-
-def removetags(value, tags):
- """Removes a space separated list of [X]HTML tags from the output."""
- tags = [re.escape(tag) for tag in tags.split()]
- tags_re = u'(%s)' % u'|'.join(tags)
- starttag_re = re.compile(ur'<%s(/?>|(\s+[^>]*>))' % tags_re, re.U)
- endtag_re = re.compile(u'</%s>' % tags_re)
- value = starttag_re.sub(u'', value)
- value = endtag_re.sub(u'', value)
- return value
-removetags.is_safe = True
-removetags = stringfilter(removetags)
-
-def striptags(value):
- """Strips all [X]HTML tags."""
- from django.utils.html import strip_tags
- return strip_tags(value)
-striptags.is_safe = True
-striptags = stringfilter(striptags)
-
-###################
-# LISTS #
-###################
-
-def dictsort(value, arg):
- """
- Takes a list of dicts, returns that list sorted by the property given in
- the argument.
- """
- var_resolve = Variable(arg).resolve
- decorated = [(var_resolve(item), item) for item in value]
- decorated.sort()
- return [item[1] for item in decorated]
-dictsort.is_safe = False
-
-def dictsortreversed(value, arg):
- """
- Takes a list of dicts, returns that list sorted in reverse order by the
- property given in the argument.
- """
- var_resolve = Variable(arg).resolve
- decorated = [(var_resolve(item), item) for item in value]
- decorated.sort()
- decorated.reverse()
- return [item[1] for item in decorated]
-dictsortreversed.is_safe = False
-
-def first(value):
- """Returns the first item in a list."""
- try:
- return value[0]
- except IndexError:
- return u''
-first.is_safe = False
-
-def join(value, arg, autoescape=None):
- """
- Joins a list with a string, like Python's ``str.join(list)``.
- """
- value = map(force_unicode, value)
- if autoescape:
- value = [conditional_escape(v) for v in value]
- try:
- data = conditional_escape(arg).join(value)
- except AttributeError: # fail silently but nicely
- return value
- return mark_safe(data)
-join.is_safe = True
-join.needs_autoescape = True
-
-def last(value):
- "Returns the last item in a list"
- try:
- return value[-1]
- except IndexError:
- return u''
-last.is_safe = True
-
-def length(value):
- """Returns the length of the value - useful for lists."""
- try:
- return len(value)
- except (ValueError, TypeError):
- return ''
-length.is_safe = True
-
-def length_is(value, arg):
- """Returns a boolean of whether the value's length is the argument."""
- try:
- return len(value) == int(arg)
- except (ValueError, TypeError):
- return ''
-length_is.is_safe = False
-
-def random(value):
- """Returns a random item from the list."""
- return random_module.choice(value)
-random.is_safe = True
-
-def slice_(value, arg):
- """
- Returns a slice of the list.
-
- Uses the same syntax as Python's list slicing; see
- http://diveintopython.org/native_data_types/lists.html#odbchelper.list.slice
- for an introduction.
- """
- try:
- bits = []
- for x in arg.split(u':'):
- if len(x) == 0:
- bits.append(None)
- else:
- bits.append(int(x))
- return value[slice(*bits)]
-
- except (ValueError, TypeError):
- return value # Fail silently.
-slice_.is_safe = True
-
-def unordered_list(value, autoescape=None):
- """
- Recursively takes a self-nested list and returns an HTML unordered list --
- WITHOUT opening and closing <ul> tags.
-
- The list is assumed to be in the proper format. For example, if ``var``
- contains: ``['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]``,
- then ``{{ var|unordered_list }}`` would return::
-
- <li>States
- <ul>
- <li>Kansas
- <ul>
- <li>Lawrence</li>
- <li>Topeka</li>
- </ul>
- </li>
- <li>Illinois</li>
- </ul>
- </li>
- """
- if autoescape:
- from django.utils.html import conditional_escape
- escaper = conditional_escape
- else:
- escaper = lambda x: x
- def convert_old_style_list(list_):
- """
- Converts old style lists to the new easier to understand format.
-
- The old list format looked like:
- ['Item 1', [['Item 1.1', []], ['Item 1.2', []]]
-
- And it is converted to:
- ['Item 1', ['Item 1.1', 'Item 1.2]]
- """
- if not isinstance(list_, (tuple, list)) or len(list_) != 2:
- return list_, False
- first_item, second_item = list_
- if second_item == []:
- return [first_item], True
- try:
- it = iter(second_item) # see if second item is iterable
- except TypeError:
- return list_, False
- old_style_list = True
- new_second_item = []
- for sublist in second_item:
- item, old_style_list = convert_old_style_list(sublist)
- if not old_style_list:
- break
- new_second_item.extend(item)
- if old_style_list:
- second_item = new_second_item
- return [first_item, second_item], old_style_list
- def _helper(list_, tabs=1):
- indent = u'\t' * tabs
- output = []
-
- list_length = len(list_)
- i = 0
- while i < list_length:
- title = list_[i]
- sublist = ''
- sublist_item = None
- if isinstance(title, (list, tuple)):
- sublist_item = title
- title = ''
- elif i < list_length - 1:
- next_item = list_[i+1]
- if next_item and isinstance(next_item, (list, tuple)):
- # The next item is a sub-list.
- sublist_item = next_item
- # We've processed the next item now too.
- i += 1
- if sublist_item:
- sublist = _helper(sublist_item, tabs+1)
- sublist = '\n%s<ul>\n%s\n%s</ul>\n%s' % (indent, sublist,
- indent, indent)
- output.append('%s<li>%s%s</li>' % (indent,
- escaper(force_unicode(title)), sublist))
- i += 1
- return '\n'.join(output)
- value, converted = convert_old_style_list(value)
- return mark_safe(_helper(value))
-unordered_list.is_safe = True
-unordered_list.needs_autoescape = True
-
-###################
-# INTEGERS #
-###################
-
-def add(value, arg):
- """Adds the arg to the value."""
- try:
- return int(value) + int(arg)
- except (ValueError, TypeError):
- try:
- return value + arg
- except:
- return value
-add.is_safe = False
-
-def get_digit(value, arg):
- """
- Given a whole number, returns the requested digit of it, where 1 is the
- right-most digit, 2 is the second-right-most digit, etc. Returns the
- original value for invalid input (if input or argument is not an integer,
- or if argument is less than 1). Otherwise, output is always an integer.
- """
- try:
- arg = int(arg)
- value = int(value)
- except ValueError:
- return value # Fail silently for an invalid argument
- if arg < 1:
- return value
- try:
- return int(str(value)[-arg])
- except IndexError:
- return 0
-get_digit.is_safe = False
-
-###################
-# DATES #
-###################
-
-def date(value, arg=None):
- """Formats a date according to the given format."""
- from django.utils.dateformat import format
- if not value:
- return u''
- if arg is None:
- arg = settings.DATE_FORMAT
- try:
- return formats.date_format(value, arg)
- except AttributeError:
- try:
- return format(value, arg)
- except AttributeError:
- return ''
-date.is_safe = False
-
-def time(value, arg=None):
- """Formats a time according to the given format."""
- from django.utils import dateformat
- if value in (None, u''):
- return u''
- if arg is None:
- arg = settings.TIME_FORMAT
- try:
- return formats.time_format(value, arg)
- except AttributeError:
- try:
- return dateformat.time_format(value, arg)
- except AttributeError:
- return ''
-time.is_safe = False
-
-def timesince(value, arg=None):
- """Formats a date as the time since that date (i.e. "4 days, 6 hours")."""
- from django.utils.timesince import timesince
- if not value:
- return u''
- try:
- if arg:
- return timesince(value, arg)
- return timesince(value)
- except (ValueError, TypeError):
- return u''
-timesince.is_safe = False
-
-def timeuntil(value, arg=None):
- """Formats a date as the time until that date (i.e. "4 days, 6 hours")."""
- from django.utils.timesince import timeuntil
- from datetime import datetime
- if not value:
- return u''
- try:
- return timeuntil(value, arg)
- except (ValueError, TypeError):
- return u''
-timeuntil.is_safe = False
-
-###################
-# LOGIC #
-###################
-
-def default(value, arg):
- """If value is unavailable, use given default."""
- return value or arg
-default.is_safe = False
-
-def default_if_none(value, arg):
- """If value is None, use given default."""
- if value is None:
- return arg
- return value
-default_if_none.is_safe = False
-
-def divisibleby(value, arg):
- """Returns True if the value is devisible by the argument."""
- return int(value) % int(arg) == 0
-divisibleby.is_safe = False
-
-def yesno(value, arg=None):
- """
- Given a string mapping values for true, false and (optionally) None,
- returns one of those strings accoding to the value:
-
- ========== ====================== ==================================
- Value Argument Outputs
- ========== ====================== ==================================
- ``True`` ``"yeah,no,maybe"`` ``yeah``
- ``False`` ``"yeah,no,maybe"`` ``no``
- ``None`` ``"yeah,no,maybe"`` ``maybe``
- ``None`` ``"yeah,no"`` ``"no"`` (converts None to False
- if no mapping for None is given.
- ========== ====================== ==================================
- """
- if arg is None:
- arg = ugettext('yes,no,maybe')
- bits = arg.split(u',')
- if len(bits) < 2:
- return value # Invalid arg.
- try:
- yes, no, maybe = bits
- except ValueError:
- # Unpack list of wrong size (no "maybe" value provided).
- yes, no, maybe = bits[0], bits[1], bits[1]
- if value is None:
- return maybe
- if value:
- return yes
- return no
-yesno.is_safe = False
-
-###################
-# MISC #
-###################
-
-def filesizeformat(bytes):
- """
- Formats the value like a 'human-readable' file size (i.e. 13 KB, 4.1 MB,
- 102 bytes, etc).
- """
- try:
- bytes = float(bytes)
- except (TypeError,ValueError,UnicodeDecodeError):
- return u"0 bytes"
-
- if bytes < 1024:
- return ungettext("%(size)d byte", "%(size)d bytes", bytes) % {'size': bytes}
- if bytes < 1024 * 1024:
- return ugettext("%.1f KB") % (bytes / 1024)
- if bytes < 1024 * 1024 * 1024:
- return ugettext("%.1f MB") % (bytes / (1024 * 1024))
- return ugettext("%.1f GB") % (bytes / (1024 * 1024 * 1024))
-filesizeformat.is_safe = True
-
-def pluralize(value, arg=u's'):
- """
- Returns a plural suffix if the value is not 1. By default, 's' is used as
- the suffix:
-
- * If value is 0, vote{{ value|pluralize }} displays "0 votes".
- * If value is 1, vote{{ value|pluralize }} displays "1 vote".
- * If value is 2, vote{{ value|pluralize }} displays "2 votes".
-
- If an argument is provided, that string is used instead:
-
- * If value is 0, class{{ value|pluralize:"es" }} displays "0 classes".
- * If value is 1, class{{ value|pluralize:"es" }} displays "1 class".
- * If value is 2, class{{ value|pluralize:"es" }} displays "2 classes".
-
- If the provided argument contains a comma, the text before the comma is
- used for the singular case and the text after the comma is used for the
- plural case:
-
- * If value is 0, cand{{ value|pluralize:"y,ies" }} displays "0 candies".
- * If value is 1, cand{{ value|pluralize:"y,ies" }} displays "1 candy".
- * If value is 2, cand{{ value|pluralize:"y,ies" }} displays "2 candies".
- """
- if not u',' in arg:
- arg = u',' + arg
- bits = arg.split(u',')
- if len(bits) > 2:
- return u''
- singular_suffix, plural_suffix = bits[:2]
-
- try:
- if int(value) != 1:
- return plural_suffix
- except ValueError: # Invalid string that's not a number.
- pass
- except TypeError: # Value isn't a string or a number; maybe it's a list?
- try:
- if len(value) != 1:
- return plural_suffix
- except TypeError: # len() of unsized object.
- pass
- return singular_suffix
-pluralize.is_safe = False
-
-def phone2numeric(value):
- """Takes a phone number and converts it in to its numerical equivalent."""
- from django.utils.text import phone2numeric
- return phone2numeric(value)
-phone2numeric.is_safe = True
-
-def pprint(value):
- """A wrapper around pprint.pprint -- for debugging, really."""
- from pprint import pformat
- try:
- return pformat(value)
- except Exception, e:
- return u"Error in formatting: %s" % force_unicode(e, errors="replace")
-pprint.is_safe = True
-
-# Syntax: register.filter(name of filter, callback)
-register.filter(add)
-register.filter(addslashes)
-register.filter(capfirst)
-register.filter(center)
-register.filter(cut)
-register.filter(date)
-register.filter(default)
-register.filter(default_if_none)
-register.filter(dictsort)
-register.filter(dictsortreversed)
-register.filter(divisibleby)
-register.filter(escape)
-register.filter(escapejs)
-register.filter(filesizeformat)
-register.filter(first)
-register.filter(fix_ampersands)
-register.filter(floatformat)
-register.filter(force_escape)
-register.filter(get_digit)
-register.filter(iriencode)
-register.filter(join)
-register.filter(last)
-register.filter(length)
-register.filter(length_is)
-register.filter(linebreaks)
-register.filter(linebreaksbr)
-register.filter(linenumbers)
-register.filter(ljust)
-register.filter(lower)
-register.filter(make_list)
-register.filter(phone2numeric)
-register.filter(pluralize)
-register.filter(pprint)
-register.filter(removetags)
-register.filter(random)
-register.filter(rjust)
-register.filter(safe)
-register.filter(safeseq)
-register.filter('slice', slice_)
-register.filter(slugify)
-register.filter(stringformat)
-register.filter(striptags)
-register.filter(time)
-register.filter(timesince)
-register.filter(timeuntil)
-register.filter(title)
-register.filter(truncatewords)
-register.filter(truncatewords_html)
-register.filter(unordered_list)
-register.filter(upper)
-register.filter(urlencode)
-register.filter(urlize)
-register.filter(urlizetrunc)
-register.filter(wordcount)
-register.filter(wordwrap)
-register.filter(yesno)
diff --git a/parts/django/django/template/defaulttags.py b/parts/django/django/template/defaulttags.py
deleted file mode 100644
index 1b07413..0000000
--- a/parts/django/django/template/defaulttags.py
+++ /dev/null
@@ -1,1218 +0,0 @@
-"""Default tags used by the template system, available to all templates."""
-
-import sys
-import re
-from itertools import groupby, cycle as itertools_cycle
-
-from django.template import Node, NodeList, Template, Context, Variable
-from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END, COMMENT_TAG_START, COMMENT_TAG_END
-from django.template import get_library, Library, InvalidTemplateLibrary
-from django.template.smartif import IfParser, Literal
-from django.conf import settings
-from django.utils.encoding import smart_str, smart_unicode
-from django.utils.safestring import mark_safe
-
-register = Library()
-# Regex for token keyword arguments
-kwarg_re = re.compile(r"(?:(\w+)=)?(.+)")
-
-class AutoEscapeControlNode(Node):
- """Implements the actions of the autoescape tag."""
- def __init__(self, setting, nodelist):
- self.setting, self.nodelist = setting, nodelist
-
- def render(self, context):
- old_setting = context.autoescape
- context.autoescape = self.setting
- output = self.nodelist.render(context)
- context.autoescape = old_setting
- if self.setting:
- return mark_safe(output)
- else:
- return output
-
-class CommentNode(Node):
- def render(self, context):
- return ''
-
-class CsrfTokenNode(Node):
- def render(self, context):
- csrf_token = context.get('csrf_token', None)
- if csrf_token:
- if csrf_token == 'NOTPROVIDED':
- return mark_safe(u"")
- else:
- return mark_safe(u"<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='%s' /></div>" % csrf_token)
- else:
- # It's very probable that the token is missing because of
- # misconfiguration, so we raise a warning
- from django.conf import settings
- if settings.DEBUG:
- import warnings
- warnings.warn("A {% csrf_token %} was used in a template, but the context did not provide the value. This is usually caused by not using RequestContext.")
- return u''
-
-class CycleNode(Node):
- def __init__(self, cyclevars, variable_name=None):
- self.cyclevars = cyclevars
- self.variable_name = variable_name
-
- def render(self, context):
- if self not in context.render_context:
- context.render_context[self] = itertools_cycle(self.cyclevars)
- cycle_iter = context.render_context[self]
- value = cycle_iter.next().resolve(context)
- if self.variable_name:
- context[self.variable_name] = value
- return value
-
-class DebugNode(Node):
- def render(self, context):
- from pprint import pformat
- output = [pformat(val) for val in context]
- output.append('\n\n')
- output.append(pformat(sys.modules))
- return ''.join(output)
-
-class FilterNode(Node):
- def __init__(self, filter_expr, nodelist):
- self.filter_expr, self.nodelist = filter_expr, nodelist
-
- def render(self, context):
- output = self.nodelist.render(context)
- # Apply filters.
- context.update({'var': output})
- filtered = self.filter_expr.resolve(context)
- context.pop()
- return filtered
-
-class FirstOfNode(Node):
- def __init__(self, vars):
- self.vars = vars
-
- def render(self, context):
- for var in self.vars:
- value = var.resolve(context, True)
- if value:
- return smart_unicode(value)
- return u''
-
-class ForNode(Node):
- child_nodelists = ('nodelist_loop', 'nodelist_empty')
-
- def __init__(self, loopvars, sequence, is_reversed, nodelist_loop, nodelist_empty=None):
- self.loopvars, self.sequence = loopvars, sequence
- self.is_reversed = is_reversed
- self.nodelist_loop = nodelist_loop
- if nodelist_empty is None:
- self.nodelist_empty = NodeList()
- else:
- self.nodelist_empty = nodelist_empty
-
- def __repr__(self):
- reversed_text = self.is_reversed and ' reversed' or ''
- return "<For Node: for %s in %s, tail_len: %d%s>" % \
- (', '.join(self.loopvars), self.sequence, len(self.nodelist_loop),
- reversed_text)
-
- def __iter__(self):
- for node in self.nodelist_loop:
- yield node
- for node in self.nodelist_empty:
- yield node
-
- def render(self, context):
- if 'forloop' in context:
- parentloop = context['forloop']
- else:
- parentloop = {}
- context.push()
- try:
- values = self.sequence.resolve(context, True)
- except VariableDoesNotExist:
- values = []
- if values is None:
- values = []
- if not hasattr(values, '__len__'):
- values = list(values)
- len_values = len(values)
- if len_values < 1:
- context.pop()
- return self.nodelist_empty.render(context)
- nodelist = NodeList()
- if self.is_reversed:
- values = reversed(values)
- unpack = len(self.loopvars) > 1
- # Create a forloop value in the context. We'll update counters on each
- # iteration just below.
- loop_dict = context['forloop'] = {'parentloop': parentloop}
- for i, item in enumerate(values):
- # Shortcuts for current loop iteration number.
- loop_dict['counter0'] = i
- loop_dict['counter'] = i+1
- # Reverse counter iteration numbers.
- loop_dict['revcounter'] = len_values - i
- loop_dict['revcounter0'] = len_values - i - 1
- # Boolean values designating first and last times through loop.
- loop_dict['first'] = (i == 0)
- loop_dict['last'] = (i == len_values - 1)
-
- pop_context = False
- if unpack:
- # If there are multiple loop variables, unpack the item into
- # them.
- try:
- unpacked_vars = dict(zip(self.loopvars, item))
- except TypeError:
- pass
- else:
- pop_context = True
- context.update(unpacked_vars)
- else:
- context[self.loopvars[0]] = item
- for node in self.nodelist_loop:
- nodelist.append(node.render(context))
- if pop_context:
- # The loop variables were pushed on to the context so pop them
- # off again. This is necessary because the tag lets the length
- # of loopvars differ to the length of each set of items and we
- # don't want to leave any vars from the previous loop on the
- # context.
- context.pop()
- context.pop()
- return nodelist.render(context)
-
-class IfChangedNode(Node):
- child_nodelists = ('nodelist_true', 'nodelist_false')
-
- def __init__(self, nodelist_true, nodelist_false, *varlist):
- self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
- self._last_seen = None
- self._varlist = varlist
- self._id = str(id(self))
-
- def render(self, context):
- if 'forloop' in context and self._id not in context['forloop']:
- self._last_seen = None
- context['forloop'][self._id] = 1
- try:
- if self._varlist:
- # Consider multiple parameters. This automatically behaves
- # like an OR evaluation of the multiple variables.
- compare_to = [var.resolve(context, True) for var in self._varlist]
- else:
- compare_to = self.nodelist_true.render(context)
- except VariableDoesNotExist:
- compare_to = None
-
- if compare_to != self._last_seen:
- firstloop = (self._last_seen == None)
- self._last_seen = compare_to
- content = self.nodelist_true.render(context)
- return content
- elif self.nodelist_false:
- return self.nodelist_false.render(context)
- return ''
-
-class IfEqualNode(Node):
- child_nodelists = ('nodelist_true', 'nodelist_false')
-
- def __init__(self, var1, var2, nodelist_true, nodelist_false, negate):
- self.var1, self.var2 = var1, var2
- self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
- self.negate = negate
-
- def __repr__(self):
- return "<IfEqualNode>"
-
- def render(self, context):
- val1 = self.var1.resolve(context, True)
- val2 = self.var2.resolve(context, True)
- if (self.negate and val1 != val2) or (not self.negate and val1 == val2):
- return self.nodelist_true.render(context)
- return self.nodelist_false.render(context)
-
-class IfNode(Node):
- child_nodelists = ('nodelist_true', 'nodelist_false')
-
- def __init__(self, var, nodelist_true, nodelist_false=None):
- self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
- self.var = var
-
- def __repr__(self):
- return "<If node>"
-
- def __iter__(self):
- for node in self.nodelist_true:
- yield node
- for node in self.nodelist_false:
- yield node
-
- def render(self, context):
- try:
- var = self.var.eval(context)
- except VariableDoesNotExist:
- var = None
-
- if var:
- return self.nodelist_true.render(context)
- else:
- return self.nodelist_false.render(context)
-
-class RegroupNode(Node):
- def __init__(self, target, expression, var_name):
- self.target, self.expression = target, expression
- self.var_name = var_name
-
- def render(self, context):
- obj_list = self.target.resolve(context, True)
- if obj_list == None:
- # target variable wasn't found in context; fail silently.
- context[self.var_name] = []
- return ''
- # List of dictionaries in the format:
- # {'grouper': 'key', 'list': [list of contents]}.
- context[self.var_name] = [
- {'grouper': key, 'list': list(val)}
- for key, val in
- groupby(obj_list, lambda v, f=self.expression.resolve: f(v, True))
- ]
- return ''
-
-def include_is_allowed(filepath):
- for root in settings.ALLOWED_INCLUDE_ROOTS:
- if filepath.startswith(root):
- return True
- return False
-
-class SsiNode(Node):
- def __init__(self, filepath, parsed):
- self.filepath, self.parsed = filepath, parsed
-
- def render(self, context):
- if not include_is_allowed(self.filepath):
- if settings.DEBUG:
- return "[Didn't have permission to include file]"
- else:
- return '' # Fail silently for invalid includes.
- try:
- fp = open(self.filepath, 'r')
- output = fp.read()
- fp.close()
- except IOError:
- output = ''
- if self.parsed:
- try:
- t = Template(output, name=self.filepath)
- return t.render(context)
- except TemplateSyntaxError, e:
- if settings.DEBUG:
- return "[Included template had syntax error: %s]" % e
- else:
- return '' # Fail silently for invalid included templates.
- return output
-
-class LoadNode(Node):
- def render(self, context):
- return ''
-
-class NowNode(Node):
- def __init__(self, format_string):
- self.format_string = format_string
-
- def render(self, context):
- from datetime import datetime
- from django.utils.dateformat import DateFormat
- df = DateFormat(datetime.now())
- return df.format(self.format_string)
-
-class SpacelessNode(Node):
- def __init__(self, nodelist):
- self.nodelist = nodelist
-
- def render(self, context):
- from django.utils.html import strip_spaces_between_tags
- return strip_spaces_between_tags(self.nodelist.render(context).strip())
-
-class TemplateTagNode(Node):
- mapping = {'openblock': BLOCK_TAG_START,
- 'closeblock': BLOCK_TAG_END,
- 'openvariable': VARIABLE_TAG_START,
- 'closevariable': VARIABLE_TAG_END,
- 'openbrace': SINGLE_BRACE_START,
- 'closebrace': SINGLE_BRACE_END,
- 'opencomment': COMMENT_TAG_START,
- 'closecomment': COMMENT_TAG_END,
- }
-
- def __init__(self, tagtype):
- self.tagtype = tagtype
-
- def render(self, context):
- return self.mapping.get(self.tagtype, '')
-
-class URLNode(Node):
- def __init__(self, view_name, args, kwargs, asvar):
- self.view_name = view_name
- self.args = args
- self.kwargs = kwargs
- self.asvar = asvar
-
- def render(self, context):
- from django.core.urlresolvers import reverse, NoReverseMatch
- args = [arg.resolve(context) for arg in self.args]
- kwargs = dict([(smart_str(k,'ascii'), v.resolve(context))
- for k, v in self.kwargs.items()])
-
- # Try to look up the URL twice: once given the view name, and again
- # relative to what we guess is the "main" app. If they both fail,
- # re-raise the NoReverseMatch unless we're using the
- # {% url ... as var %} construct in which cause return nothing.
- url = ''
- try:
- url = reverse(self.view_name, args=args, kwargs=kwargs, current_app=context.current_app)
- except NoReverseMatch, e:
- if settings.SETTINGS_MODULE:
- project_name = settings.SETTINGS_MODULE.split('.')[0]
- try:
- url = reverse(project_name + '.' + self.view_name,
- args=args, kwargs=kwargs, current_app=context.current_app)
- except NoReverseMatch:
- if self.asvar is None:
- # Re-raise the original exception, not the one with
- # the path relative to the project. This makes a
- # better error message.
- raise e
- else:
- if self.asvar is None:
- raise e
-
- if self.asvar:
- context[self.asvar] = url
- return ''
- else:
- return url
-
-class WidthRatioNode(Node):
- def __init__(self, val_expr, max_expr, max_width):
- self.val_expr = val_expr
- self.max_expr = max_expr
- self.max_width = max_width
-
- def render(self, context):
- try:
- value = self.val_expr.resolve(context)
- maxvalue = self.max_expr.resolve(context)
- max_width = int(self.max_width.resolve(context))
- except VariableDoesNotExist:
- return ''
- except ValueError:
- raise TemplateSyntaxError("widthratio final argument must be an number")
- try:
- value = float(value)
- maxvalue = float(maxvalue)
- ratio = (value / maxvalue) * max_width
- except (ValueError, ZeroDivisionError):
- return ''
- return str(int(round(ratio)))
-
-class WithNode(Node):
- def __init__(self, var, name, nodelist):
- self.var = var
- self.name = name
- self.nodelist = nodelist
-
- def __repr__(self):
- return "<WithNode>"
-
- def render(self, context):
- val = self.var.resolve(context)
- context.push()
- context[self.name] = val
- output = self.nodelist.render(context)
- context.pop()
- return output
-
-#@register.tag
-def autoescape(parser, token):
- """
- Force autoescape behaviour for this block.
- """
- args = token.contents.split()
- if len(args) != 2:
- raise TemplateSyntaxError("'autoescape' tag requires exactly one argument.")
- arg = args[1]
- if arg not in (u'on', u'off'):
- raise TemplateSyntaxError("'autoescape' argument should be 'on' or 'off'")
- nodelist = parser.parse(('endautoescape',))
- parser.delete_first_token()
- return AutoEscapeControlNode((arg == 'on'), nodelist)
-autoescape = register.tag(autoescape)
-
-#@register.tag
-def comment(parser, token):
- """
- Ignores everything between ``{% comment %}`` and ``{% endcomment %}``.
- """
- parser.skip_past('endcomment')
- return CommentNode()
-comment = register.tag(comment)
-
-#@register.tag
-def cycle(parser, token):
- """
- Cycles among the given strings each time this tag is encountered.
-
- Within a loop, cycles among the given strings each time through
- the loop::
-
- {% for o in some_list %}
- <tr class="{% cycle 'row1' 'row2' %}">
- ...
- </tr>
- {% endfor %}
-
- Outside of a loop, give the values a unique name the first time you call
- it, then use that name each sucessive time through::
-
- <tr class="{% cycle 'row1' 'row2' 'row3' as rowcolors %}">...</tr>
- <tr class="{% cycle rowcolors %}">...</tr>
- <tr class="{% cycle rowcolors %}">...</tr>
-
- You can use any number of values, separated by spaces. Commas can also
- be used to separate values; if a comma is used, the cycle values are
- interpreted as literal strings.
- """
-
- # Note: This returns the exact same node on each {% cycle name %} call;
- # that is, the node object returned from {% cycle a b c as name %} and the
- # one returned from {% cycle name %} are the exact same object. This
- # shouldn't cause problems (heh), but if it does, now you know.
- #
- # Ugly hack warning: This stuffs the named template dict into parser so
- # that names are only unique within each template (as opposed to using
- # a global variable, which would make cycle names have to be unique across
- # *all* templates.
-
- args = token.split_contents()
-
- if len(args) < 2:
- raise TemplateSyntaxError("'cycle' tag requires at least two arguments")
-
- if ',' in args[1]:
- # Backwards compatibility: {% cycle a,b %} or {% cycle a,b as foo %}
- # case.
- args[1:2] = ['"%s"' % arg for arg in args[1].split(",")]
-
- if len(args) == 2:
- # {% cycle foo %} case.
- name = args[1]
- if not hasattr(parser, '_namedCycleNodes'):
- raise TemplateSyntaxError("No named cycles in template. '%s' is not defined" % name)
- if not name in parser._namedCycleNodes:
- raise TemplateSyntaxError("Named cycle '%s' does not exist" % name)
- return parser._namedCycleNodes[name]
-
- if len(args) > 4 and args[-2] == 'as':
- name = args[-1]
- values = [parser.compile_filter(arg) for arg in args[1:-2]]
- node = CycleNode(values, name)
- if not hasattr(parser, '_namedCycleNodes'):
- parser._namedCycleNodes = {}
- parser._namedCycleNodes[name] = node
- else:
- values = [parser.compile_filter(arg) for arg in args[1:]]
- node = CycleNode(values)
- return node
-cycle = register.tag(cycle)
-
-def csrf_token(parser, token):
- return CsrfTokenNode()
-register.tag(csrf_token)
-
-def debug(parser, token):
- """
- Outputs a whole load of debugging information, including the current
- context and imported modules.
-
- Sample usage::
-
- <pre>
- {% debug %}
- </pre>
- """
- return DebugNode()
-debug = register.tag(debug)
-
-#@register.tag(name="filter")
-def do_filter(parser, token):
- """
- Filters the contents of the block through variable filters.
-
- Filters can also be piped through each other, and they can have
- arguments -- just like in variable syntax.
-
- Sample usage::
-
- {% filter force_escape|lower %}
- This text will be HTML-escaped, and will appear in lowercase.
- {% endfilter %}
- """
- _, rest = token.contents.split(None, 1)
- filter_expr = parser.compile_filter("var|%s" % (rest))
- for func, unused in filter_expr.filters:
- if getattr(func, '_decorated_function', func).__name__ in ('escape', 'safe'):
- raise TemplateSyntaxError('"filter %s" is not permitted. Use the "autoescape" tag instead.' % func.__name__)
- nodelist = parser.parse(('endfilter',))
- parser.delete_first_token()
- return FilterNode(filter_expr, nodelist)
-do_filter = register.tag("filter", do_filter)
-
-#@register.tag
-def firstof(parser, token):
- """
- Outputs the first variable passed that is not False, without escaping.
-
- Outputs nothing if all the passed variables are False.
-
- Sample usage::
-
- {% firstof var1 var2 var3 %}
-
- This is equivalent to::
-
- {% if var1 %}
- {{ var1|safe }}
- {% else %}{% if var2 %}
- {{ var2|safe }}
- {% else %}{% if var3 %}
- {{ var3|safe }}
- {% endif %}{% endif %}{% endif %}
-
- but obviously much cleaner!
-
- You can also use a literal string as a fallback value in case all
- passed variables are False::
-
- {% firstof var1 var2 var3 "fallback value" %}
-
- If you want to escape the output, use a filter tag::
-
- {% filter force_escape %}
- {% firstof var1 var2 var3 "fallback value" %}
- {% endfilter %}
-
- """
- bits = token.split_contents()[1:]
- if len(bits) < 1:
- raise TemplateSyntaxError("'firstof' statement requires at least one argument")
- return FirstOfNode([parser.compile_filter(bit) for bit in bits])
-firstof = register.tag(firstof)
-
-#@register.tag(name="for")
-def do_for(parser, token):
- """
- Loops over each item in an array.
-
- For example, to display a list of athletes given ``athlete_list``::
-
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% endfor %}
- </ul>
-
- You can loop over a list in reverse by using
- ``{% for obj in list reversed %}``.
-
- You can also unpack multiple values from a two-dimensional array::
-
- {% for key,value in dict.items %}
- {{ key }}: {{ value }}
- {% endfor %}
-
- The ``for`` tag can take an optional ``{% empty %}`` clause that will
- be displayed if the given array is empty or could not be found::
-
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% empty %}
- <li>Sorry, no athletes in this list.</li>
- {% endfor %}
- <ul>
-
- The above is equivalent to -- but shorter, cleaner, and possibly faster
- than -- the following::
-
- <ul>
- {% if althete_list %}
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% endfor %}
- {% else %}
- <li>Sorry, no athletes in this list.</li>
- {% endif %}
- </ul>
-
- The for loop sets a number of variables available within the loop:
-
- ========================== ================================================
- Variable Description
- ========================== ================================================
- ``forloop.counter`` The current iteration of the loop (1-indexed)
- ``forloop.counter0`` The current iteration of the loop (0-indexed)
- ``forloop.revcounter`` The number of iterations from the end of the
- loop (1-indexed)
- ``forloop.revcounter0`` The number of iterations from the end of the
- loop (0-indexed)
- ``forloop.first`` True if this is the first time through the loop
- ``forloop.last`` True if this is the last time through the loop
- ``forloop.parentloop`` For nested loops, this is the loop "above" the
- current one
- ========================== ================================================
-
- """
- bits = token.contents.split()
- if len(bits) < 4:
- raise TemplateSyntaxError("'for' statements should have at least four"
- " words: %s" % token.contents)
-
- is_reversed = bits[-1] == 'reversed'
- in_index = is_reversed and -3 or -2
- if bits[in_index] != 'in':
- raise TemplateSyntaxError("'for' statements should use the format"
- " 'for x in y': %s" % token.contents)
-
- loopvars = re.sub(r' *, *', ',', ' '.join(bits[1:in_index])).split(',')
- for var in loopvars:
- if not var or ' ' in var:
- raise TemplateSyntaxError("'for' tag received an invalid argument:"
- " %s" % token.contents)
-
- sequence = parser.compile_filter(bits[in_index+1])
- nodelist_loop = parser.parse(('empty', 'endfor',))
- token = parser.next_token()
- if token.contents == 'empty':
- nodelist_empty = parser.parse(('endfor',))
- parser.delete_first_token()
- else:
- nodelist_empty = None
- return ForNode(loopvars, sequence, is_reversed, nodelist_loop, nodelist_empty)
-do_for = register.tag("for", do_for)
-
-def do_ifequal(parser, token, negate):
- bits = list(token.split_contents())
- if len(bits) != 3:
- raise TemplateSyntaxError("%r takes two arguments" % bits[0])
- end_tag = 'end' + bits[0]
- nodelist_true = parser.parse(('else', end_tag))
- token = parser.next_token()
- if token.contents == 'else':
- nodelist_false = parser.parse((end_tag,))
- parser.delete_first_token()
- else:
- nodelist_false = NodeList()
- val1 = parser.compile_filter(bits[1])
- val2 = parser.compile_filter(bits[2])
- return IfEqualNode(val1, val2, nodelist_true, nodelist_false, negate)
-
-#@register.tag
-def ifequal(parser, token):
- """
- Outputs the contents of the block if the two arguments equal each other.
-
- Examples::
-
- {% ifequal user.id comment.user_id %}
- ...
- {% endifequal %}
-
- {% ifnotequal user.id comment.user_id %}
- ...
- {% else %}
- ...
- {% endifnotequal %}
- """
- return do_ifequal(parser, token, False)
-ifequal = register.tag(ifequal)
-
-#@register.tag
-def ifnotequal(parser, token):
- """
- Outputs the contents of the block if the two arguments are not equal.
- See ifequal.
- """
- return do_ifequal(parser, token, True)
-ifnotequal = register.tag(ifnotequal)
-
-class TemplateLiteral(Literal):
- def __init__(self, value, text):
- self.value = value
- self.text = text # for better error messages
-
- def display(self):
- return self.text
-
- def eval(self, context):
- return self.value.resolve(context, ignore_failures=True)
-
-class TemplateIfParser(IfParser):
- error_class = TemplateSyntaxError
-
- def __init__(self, parser, *args, **kwargs):
- self.template_parser = parser
- return super(TemplateIfParser, self).__init__(*args, **kwargs)
-
- def create_var(self, value):
- return TemplateLiteral(self.template_parser.compile_filter(value), value)
-
-#@register.tag(name="if")
-def do_if(parser, token):
- """
- The ``{% if %}`` tag evaluates a variable, and if that variable is "true"
- (i.e., exists, is not empty, and is not a false boolean value), the
- contents of the block are output:
-
- ::
-
- {% if athlete_list %}
- Number of athletes: {{ athlete_list|count }}
- {% else %}
- No athletes.
- {% endif %}
-
- In the above, if ``athlete_list`` is not empty, the number of athletes will
- be displayed by the ``{{ athlete_list|count }}`` variable.
-
- As you can see, the ``if`` tag can take an option ``{% else %}`` clause
- that will be displayed if the test fails.
-
- ``if`` tags may use ``or``, ``and`` or ``not`` to test a number of
- variables or to negate a given variable::
-
- {% if not athlete_list %}
- There are no athletes.
- {% endif %}
-
- {% if athlete_list or coach_list %}
- There are some athletes or some coaches.
- {% endif %}
-
- {% if athlete_list and coach_list %}
- Both atheletes and coaches are available.
- {% endif %}
-
- {% if not athlete_list or coach_list %}
- There are no athletes, or there are some coaches.
- {% endif %}
-
- {% if athlete_list and not coach_list %}
- There are some athletes and absolutely no coaches.
- {% endif %}
-
- Comparison operators are also available, and the use of filters is also
- allowed, for example:
-
- {% if articles|length >= 5 %}...{% endif %}
-
- Arguments and operators _must_ have a space between them, so
- ``{% if 1>2 %}`` is not a valid if tag.
-
- All supported operators are: ``or``, ``and``, ``in``, ``not in``
- ``==`` (or ``=``), ``!=``, ``>``, ``>=``, ``<`` and ``<=``.
-
- Operator precedence follows Python.
- """
- bits = token.split_contents()[1:]
- var = TemplateIfParser(parser, bits).parse()
- nodelist_true = parser.parse(('else', 'endif'))
- token = parser.next_token()
- if token.contents == 'else':
- nodelist_false = parser.parse(('endif',))
- parser.delete_first_token()
- else:
- nodelist_false = NodeList()
- return IfNode(var, nodelist_true, nodelist_false)
-do_if = register.tag("if", do_if)
-
-#@register.tag
-def ifchanged(parser, token):
- """
- Checks if a value has changed from the last iteration of a loop.
-
- The 'ifchanged' block tag is used within a loop. It has two possible uses.
-
- 1. Checks its own rendered contents against its previous state and only
- displays the content if it has changed. For example, this displays a
- list of days, only displaying the month if it changes::
-
- <h1>Archive for {{ year }}</h1>
-
- {% for date in days %}
- {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
- <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
- {% endfor %}
-
- 2. If given a variable, check whether that variable has changed.
- For example, the following shows the date every time it changes, but
- only shows the hour if both the hour and the date have changed::
-
- {% for date in days %}
- {% ifchanged date.date %} {{ date.date }} {% endifchanged %}
- {% ifchanged date.hour date.date %}
- {{ date.hour }}
- {% endifchanged %}
- {% endfor %}
- """
- bits = token.contents.split()
- nodelist_true = parser.parse(('else', 'endifchanged'))
- token = parser.next_token()
- if token.contents == 'else':
- nodelist_false = parser.parse(('endifchanged',))
- parser.delete_first_token()
- else:
- nodelist_false = NodeList()
- values = [parser.compile_filter(bit) for bit in bits[1:]]
- return IfChangedNode(nodelist_true, nodelist_false, *values)
-ifchanged = register.tag(ifchanged)
-
-#@register.tag
-def ssi(parser, token):
- """
- Outputs the contents of a given file into the page.
-
- Like a simple "include" tag, the ``ssi`` tag includes the contents
- of another file -- which must be specified using an absolute path --
- in the current page::
-
- {% ssi /home/html/ljworld.com/includes/right_generic.html %}
-
- If the optional "parsed" parameter is given, the contents of the included
- file are evaluated as template code, with the current context::
-
- {% ssi /home/html/ljworld.com/includes/right_generic.html parsed %}
- """
- bits = token.contents.split()
- parsed = False
- if len(bits) not in (2, 3):
- raise TemplateSyntaxError("'ssi' tag takes one argument: the path to"
- " the file to be included")
- if len(bits) == 3:
- if bits[2] == 'parsed':
- parsed = True
- else:
- raise TemplateSyntaxError("Second (optional) argument to %s tag"
- " must be 'parsed'" % bits[0])
- return SsiNode(bits[1], parsed)
-ssi = register.tag(ssi)
-
-#@register.tag
-def load(parser, token):
- """
- Loads a custom template tag set.
-
- For example, to load the template tags in
- ``django/templatetags/news/photos.py``::
-
- {% load news.photos %}
- """
- bits = token.contents.split()
- for taglib in bits[1:]:
- # add the library to the parser
- try:
- lib = get_library(taglib)
- parser.add_library(lib)
- except InvalidTemplateLibrary, e:
- raise TemplateSyntaxError("'%s' is not a valid tag library: %s" %
- (taglib, e))
- return LoadNode()
-load = register.tag(load)
-
-#@register.tag
-def now(parser, token):
- """
- Displays the date, formatted according to the given string.
-
- Uses the same format as PHP's ``date()`` function; see http://php.net/date
- for all the possible values.
-
- Sample usage::
-
- It is {% now "jS F Y H:i" %}
- """
- bits = token.contents.split('"')
- if len(bits) != 3:
- raise TemplateSyntaxError("'now' statement takes one argument")
- format_string = bits[1]
- return NowNode(format_string)
-now = register.tag(now)
-
-#@register.tag
-def regroup(parser, token):
- """
- Regroups a list of alike objects by a common attribute.
-
- This complex tag is best illustrated by use of an example: say that
- ``people`` is a list of ``Person`` objects that have ``first_name``,
- ``last_name``, and ``gender`` attributes, and you'd like to display a list
- that looks like:
-
- * Male:
- * George Bush
- * Bill Clinton
- * Female:
- * Margaret Thatcher
- * Colendeeza Rice
- * Unknown:
- * Pat Smith
-
- The following snippet of template code would accomplish this dubious task::
-
- {% regroup people by gender as grouped %}
- <ul>
- {% for group in grouped %}
- <li>{{ group.grouper }}
- <ul>
- {% for item in group.list %}
- <li>{{ item }}</li>
- {% endfor %}
- </ul>
- {% endfor %}
- </ul>
-
- As you can see, ``{% regroup %}`` populates a variable with a list of
- objects with ``grouper`` and ``list`` attributes. ``grouper`` contains the
- item that was grouped by; ``list`` contains the list of objects that share
- that ``grouper``. In this case, ``grouper`` would be ``Male``, ``Female``
- and ``Unknown``, and ``list`` is the list of people with those genders.
-
- Note that ``{% regroup %}`` does not work when the list to be grouped is not
- sorted by the key you are grouping by! This means that if your list of
- people was not sorted by gender, you'd need to make sure it is sorted
- before using it, i.e.::
-
- {% regroup people|dictsort:"gender" by gender as grouped %}
-
- """
- firstbits = token.contents.split(None, 3)
- if len(firstbits) != 4:
- raise TemplateSyntaxError("'regroup' tag takes five arguments")
- target = parser.compile_filter(firstbits[1])
- if firstbits[2] != 'by':
- raise TemplateSyntaxError("second argument to 'regroup' tag must be 'by'")
- lastbits_reversed = firstbits[3][::-1].split(None, 2)
- if lastbits_reversed[1][::-1] != 'as':
- raise TemplateSyntaxError("next-to-last argument to 'regroup' tag must"
- " be 'as'")
-
- expression = parser.compile_filter(lastbits_reversed[2][::-1])
-
- var_name = lastbits_reversed[0][::-1]
- return RegroupNode(target, expression, var_name)
-regroup = register.tag(regroup)
-
-def spaceless(parser, token):
- """
- Removes whitespace between HTML tags, including tab and newline characters.
-
- Example usage::
-
- {% spaceless %}
- <p>
- <a href="foo/">Foo</a>
- </p>
- {% endspaceless %}
-
- This example would return this HTML::
-
- <p><a href="foo/">Foo</a></p>
-
- Only space between *tags* is normalized -- not space between tags and text.
- In this example, the space around ``Hello`` won't be stripped::
-
- {% spaceless %}
- <strong>
- Hello
- </strong>
- {% endspaceless %}
- """
- nodelist = parser.parse(('endspaceless',))
- parser.delete_first_token()
- return SpacelessNode(nodelist)
-spaceless = register.tag(spaceless)
-
-#@register.tag
-def templatetag(parser, token):
- """
- Outputs one of the bits used to compose template tags.
-
- Since the template system has no concept of "escaping", to display one of
- the bits used in template tags, you must use the ``{% templatetag %}`` tag.
-
- The argument tells which template bit to output:
-
- ================== =======
- Argument Outputs
- ================== =======
- ``openblock`` ``{%``
- ``closeblock`` ``%}``
- ``openvariable`` ``{{``
- ``closevariable`` ``}}``
- ``openbrace`` ``{``
- ``closebrace`` ``}``
- ``opencomment`` ``{#``
- ``closecomment`` ``#}``
- ================== =======
- """
- bits = token.contents.split()
- if len(bits) != 2:
- raise TemplateSyntaxError("'templatetag' statement takes one argument")
- tag = bits[1]
- if tag not in TemplateTagNode.mapping:
- raise TemplateSyntaxError("Invalid templatetag argument: '%s'."
- " Must be one of: %s" %
- (tag, TemplateTagNode.mapping.keys()))
- return TemplateTagNode(tag)
-templatetag = register.tag(templatetag)
-
-def url(parser, token):
- """
- Returns an absolute URL matching given view with its parameters.
-
- This is a way to define links that aren't tied to a particular URL
- configuration::
-
- {% url path.to.some_view arg1 arg2 %}
-
- or
-
- {% url path.to.some_view name1=value1 name2=value2 %}
-
- The first argument is a path to a view. It can be an absolute python path
- or just ``app_name.view_name`` without the project name if the view is
- located inside the project. Other arguments are comma-separated values
- that will be filled in place of positional and keyword arguments in the
- URL. All arguments for the URL should be present.
-
- For example if you have a view ``app_name.client`` taking client's id and
- the corresponding line in a URLconf looks like this::
-
- ('^client/(\d+)/$', 'app_name.client')
-
- and this app's URLconf is included into the project's URLconf under some
- path::
-
- ('^clients/', include('project_name.app_name.urls'))
-
- then in a template you can create a link for a certain client like this::
-
- {% url app_name.client client.id %}
-
- The URL will look like ``/clients/client/123/``.
- """
- bits = token.split_contents()
- if len(bits) < 2:
- raise TemplateSyntaxError("'%s' takes at least one argument"
- " (path to a view)" % bits[0])
- viewname = bits[1]
- args = []
- kwargs = {}
- asvar = None
- bits = bits[2:]
- if len(bits) >= 2 and bits[-2] == 'as':
- asvar = bits[-1]
- bits = bits[:-2]
-
- # Backwards compatibility: check for the old comma separated format
- # {% url urlname arg1,arg2 %}
- # Initial check - that the first space separated bit has a comma in it
- if bits and ',' in bits[0]:
- check_old_format = True
- # In order to *really* be old format, there must be a comma
- # in *every* space separated bit, except the last.
- for bit in bits[1:-1]:
- if ',' not in bit:
- # No comma in this bit. Either the comma we found
- # in bit 1 was a false positive (e.g., comma in a string),
- # or there is a syntax problem with missing commas
- check_old_format = False
- break
- else:
- # No comma found - must be new format.
- check_old_format = False
-
- if check_old_format:
- # Confirm that this is old format by trying to parse the first
- # argument. An exception will be raised if the comma is
- # unexpected (i.e. outside of a static string).
- match = kwarg_re.match(bits[0])
- if match:
- value = match.groups()[1]
- try:
- parser.compile_filter(value)
- except TemplateSyntaxError:
- bits = ''.join(bits).split(',')
-
- # Now all the bits are parsed into new format,
- # process them as template vars
- if len(bits):
- for bit in bits:
- match = kwarg_re.match(bit)
- if not match:
- raise TemplateSyntaxError("Malformed arguments to url tag")
- name, value = match.groups()
- if name:
- kwargs[name] = parser.compile_filter(value)
- else:
- args.append(parser.compile_filter(value))
-
- return URLNode(viewname, args, kwargs, asvar)
-url = register.tag(url)
-
-#@register.tag
-def widthratio(parser, token):
- """
- For creating bar charts and such, this tag calculates the ratio of a given
- value to a maximum value, and then applies that ratio to a constant.
-
- For example::
-
- <img src='bar.gif' height='10' width='{% widthratio this_value max_value 100 %}' />
-
- Above, if ``this_value`` is 175 and ``max_value`` is 200, the image in
- the above example will be 88 pixels wide (because 175/200 = .875;
- .875 * 100 = 87.5 which is rounded up to 88).
- """
- bits = token.contents.split()
- if len(bits) != 4:
- raise TemplateSyntaxError("widthratio takes three arguments")
- tag, this_value_expr, max_value_expr, max_width = bits
-
- return WidthRatioNode(parser.compile_filter(this_value_expr),
- parser.compile_filter(max_value_expr),
- parser.compile_filter(max_width))
-widthratio = register.tag(widthratio)
-
-#@register.tag
-def do_with(parser, token):
- """
- Adds a value to the context (inside of this block) for caching and easy
- access.
-
- For example::
-
- {% with person.some_sql_method as total %}
- {{ total }} object{{ total|pluralize }}
- {% endwith %}
- """
- bits = list(token.split_contents())
- if len(bits) != 4 or bits[2] != "as":
- raise TemplateSyntaxError("%r expected format is 'value as name'" %
- bits[0])
- var = parser.compile_filter(bits[1])
- name = bits[3]
- nodelist = parser.parse(('endwith',))
- parser.delete_first_token()
- return WithNode(var, name, nodelist)
-do_with = register.tag('with', do_with)
diff --git a/parts/django/django/template/loader.py b/parts/django/django/template/loader.py
deleted file mode 100644
index b807752..0000000
--- a/parts/django/django/template/loader.py
+++ /dev/null
@@ -1,198 +0,0 @@
-# Wrapper for loading templates from storage of some sort (e.g. filesystem, database).
-#
-# This uses the TEMPLATE_LOADERS setting, which is a list of loaders to use.
-# Each loader is expected to have this interface:
-#
-# callable(name, dirs=[])
-#
-# name is the template name.
-# dirs is an optional list of directories to search instead of TEMPLATE_DIRS.
-#
-# The loader should return a tuple of (template_source, path). The path returned
-# might be shown to the user for debugging purposes, so it should identify where
-# the template was loaded from.
-#
-# A loader may return an already-compiled template instead of the actual
-# template source. In that case the path returned should be None, since the
-# path information is associated with the template during the compilation,
-# which has already been done.
-#
-# Each loader should have an "is_usable" attribute set. This is a boolean that
-# specifies whether the loader can be used in this Python installation. Each
-# loader is responsible for setting this when it's initialized.
-#
-# For example, the eggs loader (which is capable of loading templates from
-# Python eggs) sets is_usable to False if the "pkg_resources" module isn't
-# installed, because pkg_resources is necessary to read eggs.
-
-from django.core.exceptions import ImproperlyConfigured
-from django.template import Origin, Template, Context, TemplateDoesNotExist, add_to_builtins
-from django.utils.importlib import import_module
-from django.conf import settings
-
-template_source_loaders = None
-
-class BaseLoader(object):
- is_usable = False
-
- def __init__(self, *args, **kwargs):
- pass
-
- def __call__(self, template_name, template_dirs=None):
- return self.load_template(template_name, template_dirs)
-
- def load_template(self, template_name, template_dirs=None):
- source, display_name = self.load_template_source(template_name, template_dirs)
- origin = make_origin(display_name, self.load_template_source, template_name, template_dirs)
- try:
- template = get_template_from_string(source, origin, template_name)
- return template, None
- except TemplateDoesNotExist:
- # If compiling the template we found raises TemplateDoesNotExist, back off to
- # returning the source and display name for the template we were asked to load.
- # This allows for correct identification (later) of the actual template that does
- # not exist.
- return source, display_name
-
- def load_template_source(self, template_name, template_dirs=None):
- """
- Returns a tuple containing the source and origin for the given template
- name.
-
- """
- raise NotImplementedError
-
- def reset(self):
- """
- Resets any state maintained by the loader instance (e.g., cached
- templates or cached loader modules).
-
- """
- pass
-
-class LoaderOrigin(Origin):
- def __init__(self, display_name, loader, name, dirs):
- super(LoaderOrigin, self).__init__(display_name)
- self.loader, self.loadname, self.dirs = loader, name, dirs
-
- def reload(self):
- return self.loader(self.loadname, self.dirs)[0]
-
-def make_origin(display_name, loader, name, dirs):
- if settings.TEMPLATE_DEBUG and display_name:
- return LoaderOrigin(display_name, loader, name, dirs)
- else:
- return None
-
-def find_template_loader(loader):
- if isinstance(loader, (tuple, list)):
- loader, args = loader[0], loader[1:]
- else:
- args = []
- if isinstance(loader, basestring):
- module, attr = loader.rsplit('.', 1)
- try:
- mod = import_module(module)
- except ImportError, e:
- raise ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e))
- try:
- TemplateLoader = getattr(mod, attr)
- except AttributeError, e:
- raise ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e))
-
- if hasattr(TemplateLoader, 'load_template_source'):
- func = TemplateLoader(*args)
- else:
- # Try loading module the old way - string is full path to callable
- if args:
- raise ImproperlyConfigured("Error importing template source loader %s - can't pass arguments to function-based loader." % loader)
- func = TemplateLoader
-
- if not func.is_usable:
- import warnings
- warnings.warn("Your TEMPLATE_LOADERS setting includes %r, but your Python installation doesn't support that type of template loading. Consider removing that line from TEMPLATE_LOADERS." % loader)
- return None
- else:
- return func
- else:
- raise ImproperlyConfigured('Loader does not define a "load_template" callable template source loader')
-
-def find_template(name, dirs=None):
- # Calculate template_source_loaders the first time the function is executed
- # because putting this logic in the module-level namespace may cause
- # circular import errors. See Django ticket #1292.
- global template_source_loaders
- if template_source_loaders is None:
- loaders = []
- for loader_name in settings.TEMPLATE_LOADERS:
- loader = find_template_loader(loader_name)
- if loader is not None:
- loaders.append(loader)
- template_source_loaders = tuple(loaders)
- for loader in template_source_loaders:
- try:
- source, display_name = loader(name, dirs)
- return (source, make_origin(display_name, loader, name, dirs))
- except TemplateDoesNotExist:
- pass
- raise TemplateDoesNotExist(name)
-
-def find_template_source(name, dirs=None):
- # For backward compatibility
- import warnings
- warnings.warn(
- "`django.template.loaders.find_template_source` is deprecated; use `django.template.loaders.find_template` instead.",
- PendingDeprecationWarning
- )
- template, origin = find_template(name, dirs)
- if hasattr(template, 'render'):
- raise Exception("Found a compiled template that is incompatible with the deprecated `django.template.loaders.find_template_source` function.")
- return template, origin
-
-def get_template(template_name):
- """
- Returns a compiled Template object for the given template name,
- handling template inheritance recursively.
- """
- template, origin = find_template(template_name)
- if not hasattr(template, 'render'):
- # template needs to be compiled
- template = get_template_from_string(template, origin, template_name)
- return template
-
-def get_template_from_string(source, origin=None, name=None):
- """
- Returns a compiled Template object for the given template code,
- handling template inheritance recursively.
- """
- return Template(source, origin, name)
-
-def render_to_string(template_name, dictionary=None, context_instance=None):
- """
- Loads the given template_name and renders it with the given dictionary as
- context. The template_name may be a string to load a single template using
- get_template, or it may be a tuple to use select_template to find one of
- the templates in the list. Returns a string.
- """
- dictionary = dictionary or {}
- if isinstance(template_name, (list, tuple)):
- t = select_template(template_name)
- else:
- t = get_template(template_name)
- if context_instance:
- context_instance.update(dictionary)
- else:
- context_instance = Context(dictionary)
- return t.render(context_instance)
-
-def select_template(template_name_list):
- "Given a list of template names, returns the first that can be loaded."
- for template_name in template_name_list:
- try:
- return get_template(template_name)
- except TemplateDoesNotExist:
- continue
- # If we get here, none of the templates could be loaded
- raise TemplateDoesNotExist(', '.join(template_name_list))
-
-add_to_builtins('django.template.loader_tags')
diff --git a/parts/django/django/template/loader_tags.py b/parts/django/django/template/loader_tags.py
deleted file mode 100644
index b8bc741..0000000
--- a/parts/django/django/template/loader_tags.py
+++ /dev/null
@@ -1,220 +0,0 @@
-from django.template import TemplateSyntaxError, TemplateDoesNotExist, Variable
-from django.template import Library, Node, TextNode
-from django.template.loader import get_template
-from django.conf import settings
-from django.utils.safestring import mark_safe
-
-register = Library()
-
-BLOCK_CONTEXT_KEY = 'block_context'
-
-class ExtendsError(Exception):
- pass
-
-class BlockContext(object):
- def __init__(self):
- # Dictionary of FIFO queues.
- self.blocks = {}
-
- def add_blocks(self, blocks):
- for name, block in blocks.iteritems():
- if name in self.blocks:
- self.blocks[name].insert(0, block)
- else:
- self.blocks[name] = [block]
-
- def pop(self, name):
- try:
- return self.blocks[name].pop()
- except (IndexError, KeyError):
- return None
-
- def push(self, name, block):
- self.blocks[name].append(block)
-
- def get_block(self, name):
- try:
- return self.blocks[name][-1]
- except (IndexError, KeyError):
- return None
-
-class BlockNode(Node):
- def __init__(self, name, nodelist, parent=None):
- self.name, self.nodelist, self.parent = name, nodelist, parent
-
- def __repr__(self):
- return "<Block Node: %s. Contents: %r>" % (self.name, self.nodelist)
-
- def render(self, context):
- block_context = context.render_context.get(BLOCK_CONTEXT_KEY)
- context.push()
- if block_context is None:
- context['block'] = self
- result = self.nodelist.render(context)
- else:
- push = block = block_context.pop(self.name)
- if block is None:
- block = self
- # Create new block so we can store context without thread-safety issues.
- block = BlockNode(block.name, block.nodelist)
- block.context = context
- context['block'] = block
- result = block.nodelist.render(context)
- if push is not None:
- block_context.push(self.name, push)
- context.pop()
- return result
-
- def super(self):
- render_context = self.context.render_context
- if (BLOCK_CONTEXT_KEY in render_context and
- render_context[BLOCK_CONTEXT_KEY].get_block(self.name) is not None):
- return mark_safe(self.render(self.context))
- return ''
-
-class ExtendsNode(Node):
- must_be_first = True
-
- def __init__(self, nodelist, parent_name, parent_name_expr, template_dirs=None):
- self.nodelist = nodelist
- self.parent_name, self.parent_name_expr = parent_name, parent_name_expr
- self.template_dirs = template_dirs
- self.blocks = dict([(n.name, n) for n in nodelist.get_nodes_by_type(BlockNode)])
-
- def __repr__(self):
- if self.parent_name_expr:
- return "<ExtendsNode: extends %s>" % self.parent_name_expr.token
- return '<ExtendsNode: extends "%s">' % self.parent_name
-
- def get_parent(self, context):
- if self.parent_name_expr:
- self.parent_name = self.parent_name_expr.resolve(context)
- parent = self.parent_name
- if not parent:
- error_msg = "Invalid template name in 'extends' tag: %r." % parent
- if self.parent_name_expr:
- error_msg += " Got this from the '%s' variable." % self.parent_name_expr.token
- raise TemplateSyntaxError(error_msg)
- if hasattr(parent, 'render'):
- return parent # parent is a Template object
- return get_template(parent)
-
- def render(self, context):
- compiled_parent = self.get_parent(context)
-
- if BLOCK_CONTEXT_KEY not in context.render_context:
- context.render_context[BLOCK_CONTEXT_KEY] = BlockContext()
- block_context = context.render_context[BLOCK_CONTEXT_KEY]
-
- # Add the block nodes from this node to the block context
- block_context.add_blocks(self.blocks)
-
- # If this block's parent doesn't have an extends node it is the root,
- # and its block nodes also need to be added to the block context.
- for node in compiled_parent.nodelist:
- # The ExtendsNode has to be the first non-text node.
- if not isinstance(node, TextNode):
- if not isinstance(node, ExtendsNode):
- blocks = dict([(n.name, n) for n in
- compiled_parent.nodelist.get_nodes_by_type(BlockNode)])
- block_context.add_blocks(blocks)
- break
-
- # Call Template._render explicitly so the parser context stays
- # the same.
- return compiled_parent._render(context)
-
-class ConstantIncludeNode(Node):
- def __init__(self, template_path):
- try:
- t = get_template(template_path)
- self.template = t
- except:
- if settings.TEMPLATE_DEBUG:
- raise
- self.template = None
-
- def render(self, context):
- if self.template:
- return self.template.render(context)
- else:
- return ''
-
-class IncludeNode(Node):
- def __init__(self, template_name):
- self.template_name = Variable(template_name)
-
- def render(self, context):
- try:
- template_name = self.template_name.resolve(context)
- t = get_template(template_name)
- return t.render(context)
- except TemplateSyntaxError, e:
- if settings.TEMPLATE_DEBUG:
- raise
- return ''
- except:
- return '' # Fail silently for invalid included templates.
-
-def do_block(parser, token):
- """
- Define a block that can be overridden by child templates.
- """
- bits = token.contents.split()
- if len(bits) != 2:
- raise TemplateSyntaxError("'%s' tag takes only one argument" % bits[0])
- block_name = bits[1]
- # Keep track of the names of BlockNodes found in this template, so we can
- # check for duplication.
- try:
- if block_name in parser.__loaded_blocks:
- raise TemplateSyntaxError("'%s' tag with name '%s' appears more than once" % (bits[0], block_name))
- parser.__loaded_blocks.append(block_name)
- except AttributeError: # parser.__loaded_blocks isn't a list yet
- parser.__loaded_blocks = [block_name]
- nodelist = parser.parse(('endblock', 'endblock %s' % block_name))
- parser.delete_first_token()
- return BlockNode(block_name, nodelist)
-
-def do_extends(parser, token):
- """
- Signal that this template extends a parent template.
-
- This tag may be used in two ways: ``{% extends "base" %}`` (with quotes)
- uses the literal value "base" as the name of the parent template to extend,
- or ``{% extends variable %}`` uses the value of ``variable`` as either the
- name of the parent template to extend (if it evaluates to a string) or as
- the parent tempate itelf (if it evaluates to a Template object).
- """
- bits = token.split_contents()
- if len(bits) != 2:
- raise TemplateSyntaxError("'%s' takes one argument" % bits[0])
- parent_name, parent_name_expr = None, None
- if bits[1][0] in ('"', "'") and bits[1][-1] == bits[1][0]:
- parent_name = bits[1][1:-1]
- else:
- parent_name_expr = parser.compile_filter(bits[1])
- nodelist = parser.parse()
- if nodelist.get_nodes_by_type(ExtendsNode):
- raise TemplateSyntaxError("'%s' cannot appear more than once in the same template" % bits[0])
- return ExtendsNode(nodelist, parent_name, parent_name_expr)
-
-def do_include(parser, token):
- """
- Loads a template and renders it with the current context.
-
- Example::
-
- {% include "foo/some_include" %}
- """
- bits = token.split_contents()
- if len(bits) != 2:
- raise TemplateSyntaxError("%r tag takes one argument: the name of the template to be included" % bits[0])
- path = bits[1]
- if path[0] in ('"', "'") and path[-1] == path[0]:
- return ConstantIncludeNode(path[1:-1])
- return IncludeNode(bits[1])
-
-register.tag('block', do_block)
-register.tag('extends', do_extends)
-register.tag('include', do_include)
diff --git a/parts/django/django/template/loaders/__init__.py b/parts/django/django/template/loaders/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/template/loaders/__init__.py
+++ /dev/null
diff --git a/parts/django/django/template/loaders/app_directories.py b/parts/django/django/template/loaders/app_directories.py
deleted file mode 100644
index 3e05bf8..0000000
--- a/parts/django/django/template/loaders/app_directories.py
+++ /dev/null
@@ -1,74 +0,0 @@
-"""
-Wrapper for loading templates from "templates" directories in INSTALLED_APPS
-packages.
-"""
-
-import os
-import sys
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.template import TemplateDoesNotExist
-from django.template.loader import BaseLoader
-from django.utils._os import safe_join
-from django.utils.importlib import import_module
-
-# At compile time, cache the directories to search.
-fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
-app_template_dirs = []
-for app in settings.INSTALLED_APPS:
- try:
- mod = import_module(app)
- except ImportError, e:
- raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
- template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates')
- if os.path.isdir(template_dir):
- app_template_dirs.append(template_dir.decode(fs_encoding))
-
-# It won't change, so convert it to a tuple to save memory.
-app_template_dirs = tuple(app_template_dirs)
-
-class Loader(BaseLoader):
- is_usable = True
-
- def get_template_sources(self, template_name, template_dirs=None):
- """
- Returns the absolute paths to "template_name", when appended to each
- directory in "template_dirs". Any paths that don't lie inside one of the
- template dirs are excluded from the result set, for security reasons.
- """
- if not template_dirs:
- template_dirs = app_template_dirs
- for template_dir in template_dirs:
- try:
- yield safe_join(template_dir, template_name)
- except UnicodeDecodeError:
- # The template dir name was a bytestring that wasn't valid UTF-8.
- raise
- except ValueError:
- # The joined path was located outside of template_dir.
- pass
-
- def load_template_source(self, template_name, template_dirs=None):
- for filepath in self.get_template_sources(template_name, template_dirs):
- try:
- file = open(filepath)
- try:
- return (file.read().decode(settings.FILE_CHARSET), filepath)
- finally:
- file.close()
- except IOError:
- pass
- raise TemplateDoesNotExist(template_name)
-
-_loader = Loader()
-
-def load_template_source(template_name, template_dirs=None):
- # For backwards compatibility
- import warnings
- warnings.warn(
- "'django.template.loaders.app_directories.load_template_source' is deprecated; use 'django.template.loaders.app_directories.Loader' instead.",
- PendingDeprecationWarning
- )
- return _loader.load_template_source(template_name, template_dirs)
-load_template_source.is_usable = True
diff --git a/parts/django/django/template/loaders/cached.py b/parts/django/django/template/loaders/cached.py
deleted file mode 100644
index 9a56b5e..0000000
--- a/parts/django/django/template/loaders/cached.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-Wrapper class that takes a list of template loaders as an argument and attempts
-to load templates from them in order, caching the result.
-"""
-
-from django.core.exceptions import ImproperlyConfigured
-from django.template import TemplateDoesNotExist
-from django.template.loader import BaseLoader, get_template_from_string, find_template_loader, make_origin
-from django.utils.hashcompat import sha_constructor
-from django.utils.importlib import import_module
-
-class Loader(BaseLoader):
- is_usable = True
-
- def __init__(self, loaders):
- self.template_cache = {}
- self._loaders = loaders
- self._cached_loaders = []
-
- @property
- def loaders(self):
- # Resolve loaders on demand to avoid circular imports
- if not self._cached_loaders:
- for loader in self._loaders:
- self._cached_loaders.append(find_template_loader(loader))
- return self._cached_loaders
-
- def find_template(self, name, dirs=None):
- for loader in self.loaders:
- try:
- template, display_name = loader(name, dirs)
- return (template, make_origin(display_name, loader, name, dirs))
- except TemplateDoesNotExist:
- pass
- raise TemplateDoesNotExist(name)
-
- def load_template(self, template_name, template_dirs=None):
- key = template_name
- if template_dirs:
- # If template directories were specified, use a hash to differentiate
- key = '-'.join([template_name, sha_constructor('|'.join(template_dirs)).hexdigest()])
-
- if key not in self.template_cache:
- template, origin = self.find_template(template_name, template_dirs)
- if not hasattr(template, 'render'):
- try:
- template = get_template_from_string(template, origin, template_name)
- except TemplateDoesNotExist:
- # If compiling the template we found raises TemplateDoesNotExist,
- # back off to returning the source and display name for the template
- # we were asked to load. This allows for correct identification (later)
- # of the actual template that does not exist.
- return template, origin
- self.template_cache[key] = template
- return self.template_cache[key], None
-
- def reset(self):
- "Empty the template cache."
- self.template_cache.clear()
diff --git a/parts/django/django/template/loaders/eggs.py b/parts/django/django/template/loaders/eggs.py
deleted file mode 100644
index 998693e..0000000
--- a/parts/django/django/template/loaders/eggs.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Wrapper for loading templates from eggs via pkg_resources.resource_string.
-
-try:
- from pkg_resources import resource_string
-except ImportError:
- resource_string = None
-
-from django.template import TemplateDoesNotExist
-from django.template.loader import BaseLoader
-from django.conf import settings
-
-class Loader(BaseLoader):
- is_usable = resource_string is not None
-
- def load_template_source(self, template_name, template_dirs=None):
- """
- Loads templates from Python eggs via pkg_resource.resource_string.
-
- For every installed app, it tries to get the resource (app, template_name).
- """
- if resource_string is not None:
- pkg_name = 'templates/' + template_name
- for app in settings.INSTALLED_APPS:
- try:
- return (resource_string(app, pkg_name).decode(settings.FILE_CHARSET), 'egg:%s:%s' % (app, pkg_name))
- except:
- pass
- raise TemplateDoesNotExist(template_name)
-
-_loader = Loader()
-
-def load_template_source(template_name, template_dirs=None):
- import warnings
- warnings.warn(
- "'django.template.loaders.eggs.load_template_source' is deprecated; use 'django.template.loaders.eggs.Loader' instead.",
- PendingDeprecationWarning
- )
- return _loader.load_template_source(template_name, template_dirs)
-load_template_source.is_usable = resource_string is not None
diff --git a/parts/django/django/template/loaders/filesystem.py b/parts/django/django/template/loaders/filesystem.py
deleted file mode 100644
index 7efadec..0000000
--- a/parts/django/django/template/loaders/filesystem.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-Wrapper for loading templates from the filesystem.
-"""
-
-from django.conf import settings
-from django.template import TemplateDoesNotExist
-from django.template.loader import BaseLoader
-from django.utils._os import safe_join
-
-class Loader(BaseLoader):
- is_usable = True
-
- def get_template_sources(self, template_name, template_dirs=None):
- """
- Returns the absolute paths to "template_name", when appended to each
- directory in "template_dirs". Any paths that don't lie inside one of the
- template dirs are excluded from the result set, for security reasons.
- """
- if not template_dirs:
- template_dirs = settings.TEMPLATE_DIRS
- for template_dir in template_dirs:
- try:
- yield safe_join(template_dir, template_name)
- except UnicodeDecodeError:
- # The template dir name was a bytestring that wasn't valid UTF-8.
- raise
- except ValueError:
- # The joined path was located outside of this particular
- # template_dir (it might be inside another one, so this isn't
- # fatal).
- pass
-
- def load_template_source(self, template_name, template_dirs=None):
- tried = []
- for filepath in self.get_template_sources(template_name, template_dirs):
- try:
- file = open(filepath)
- try:
- return (file.read().decode(settings.FILE_CHARSET), filepath)
- finally:
- file.close()
- except IOError:
- tried.append(filepath)
- if tried:
- error_msg = "Tried %s" % tried
- else:
- error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory."
- raise TemplateDoesNotExist(error_msg)
- load_template_source.is_usable = True
-
-_loader = Loader()
-
-def load_template_source(template_name, template_dirs=None):
- # For backwards compatibility
- import warnings
- warnings.warn(
- "'django.template.loaders.filesystem.load_template_source' is deprecated; use 'django.template.loaders.filesystem.Loader' instead.",
- PendingDeprecationWarning
- )
- return _loader.load_template_source(template_name, template_dirs)
-load_template_source.is_usable = True
diff --git a/parts/django/django/template/smartif.py b/parts/django/django/template/smartif.py
deleted file mode 100644
index e835e0f..0000000
--- a/parts/django/django/template/smartif.py
+++ /dev/null
@@ -1,206 +0,0 @@
-"""
-Parser and utilities for the smart 'if' tag
-"""
-import operator
-
-# Using a simple top down parser, as described here:
-# http://effbot.org/zone/simple-top-down-parsing.htm.
-# 'led' = left denotation
-# 'nud' = null denotation
-# 'bp' = binding power (left = lbp, right = rbp)
-
-class TokenBase(object):
- """
- Base class for operators and literals, mainly for debugging and for throwing
- syntax errors.
- """
- id = None # node/token type name
- value = None # used by literals
- first = second = None # used by tree nodes
-
- def nud(self, parser):
- # Null denotation - called in prefix context
- raise parser.error_class(
- "Not expecting '%s' in this position in if tag." % self.id
- )
-
- def led(self, left, parser):
- # Left denotation - called in infix context
- raise parser.error_class(
- "Not expecting '%s' as infix operator in if tag." % self.id
- )
-
- def display(self):
- """
- Returns what to display in error messages for this node
- """
- return self.id
-
- def __repr__(self):
- out = [str(x) for x in [self.id, self.first, self.second] if x is not None]
- return "(" + " ".join(out) + ")"
-
-
-def infix(bp, func):
- """
- Creates an infix operator, given a binding power and a function that
- evaluates the node
- """
- class Operator(TokenBase):
- lbp = bp
-
- def led(self, left, parser):
- self.first = left
- self.second = parser.expression(bp)
- return self
-
- def eval(self, context):
- try:
- return func(context, self.first, self.second)
- except Exception:
- # Templates shouldn't throw exceptions when rendering. We are
- # most likely to get exceptions for things like {% if foo in bar
- # %} where 'bar' does not support 'in', so default to False
- return False
-
- return Operator
-
-
-def prefix(bp, func):
- """
- Creates a prefix operator, given a binding power and a function that
- evaluates the node.
- """
- class Operator(TokenBase):
- lbp = bp
-
- def nud(self, parser):
- self.first = parser.expression(bp)
- self.second = None
- return self
-
- def eval(self, context):
- try:
- return func(context, self.first)
- except Exception:
- return False
-
- return Operator
-
-
-# Operator precedence follows Python.
-# NB - we can get slightly more accurate syntax error messages by not using the
-# same object for '==' and '='.
-# We defer variable evaluation to the lambda to ensure that terms are
-# lazily evaluated using Python's boolean parsing logic.
-OPERATORS = {
- 'or': infix(6, lambda context, x, y: x.eval(context) or y.eval(context)),
- 'and': infix(7, lambda context, x, y: x.eval(context) and y.eval(context)),
- 'not': prefix(8, lambda context, x: not x.eval(context)),
- 'in': infix(9, lambda context, x, y: x.eval(context) in y.eval(context)),
- 'not in': infix(9, lambda context, x, y: x.eval(context) not in y.eval(context)),
- '=': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),
- '==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),
- '!=': infix(10, lambda context, x, y: x.eval(context) != y.eval(context)),
- '>': infix(10, lambda context, x, y: x.eval(context) > y.eval(context)),
- '>=': infix(10, lambda context, x, y: x.eval(context) >= y.eval(context)),
- '<': infix(10, lambda context, x, y: x.eval(context) < y.eval(context)),
- '<=': infix(10, lambda context, x, y: x.eval(context) <= y.eval(context)),
-}
-
-# Assign 'id' to each:
-for key, op in OPERATORS.items():
- op.id = key
-
-
-class Literal(TokenBase):
- """
- A basic self-resolvable object similar to a Django template variable.
- """
- # IfParser uses Literal in create_var, but TemplateIfParser overrides
- # create_var so that a proper implementation that actually resolves
- # variables, filters etc is used.
- id = "literal"
- lbp = 0
-
- def __init__(self, value):
- self.value = value
-
- def display(self):
- return repr(self.value)
-
- def nud(self, parser):
- return self
-
- def eval(self, context):
- return self.value
-
- def __repr__(self):
- return "(%s %r)" % (self.id, self.value)
-
-
-class EndToken(TokenBase):
- lbp = 0
-
- def nud(self, parser):
- raise parser.error_class("Unexpected end of expression in if tag.")
-
-EndToken = EndToken()
-
-
-class IfParser(object):
- error_class = ValueError
-
- def __init__(self, tokens):
- # pre-pass necessary to turn 'not','in' into single token
- l = len(tokens)
- mapped_tokens = []
- i = 0
- while i < l:
- token = tokens[i]
- if token == "not" and i + 1 < l and tokens[i+1] == "in":
- token = "not in"
- i += 1 # skip 'in'
- mapped_tokens.append(self.translate_token(token))
- i += 1
-
- self.tokens = mapped_tokens
- self.pos = 0
- self.current_token = self.next()
-
- def translate_token(self, token):
- try:
- op = OPERATORS[token]
- except (KeyError, TypeError):
- return self.create_var(token)
- else:
- return op()
-
- def next(self):
- if self.pos >= len(self.tokens):
- return EndToken
- else:
- retval = self.tokens[self.pos]
- self.pos += 1
- return retval
-
- def parse(self):
- retval = self.expression()
- # Check that we have exhausted all the tokens
- if self.current_token is not EndToken:
- raise self.error_class("Unused '%s' at end of if expression." %
- self.current_token.display())
- return retval
-
- def expression(self, rbp=0):
- t = self.current_token
- self.current_token = self.next()
- left = t.nud(self)
- while rbp < self.current_token.lbp:
- t = self.current_token
- self.current_token = self.next()
- left = t.led(left, self)
- return left
-
- def create_var(self, value):
- return Literal(value)
diff --git a/parts/django/django/templatetags/__init__.py b/parts/django/django/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/django/templatetags/cache.py b/parts/django/django/templatetags/cache.py
deleted file mode 100644
index 4fe3c3b..0000000
--- a/parts/django/django/templatetags/cache.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from django.template import Library, Node, TemplateSyntaxError, Variable, VariableDoesNotExist
-from django.template import resolve_variable
-from django.core.cache import cache
-from django.utils.encoding import force_unicode
-from django.utils.http import urlquote
-from django.utils.hashcompat import md5_constructor
-
-register = Library()
-
-class CacheNode(Node):
- def __init__(self, nodelist, expire_time_var, fragment_name, vary_on):
- self.nodelist = nodelist
- self.expire_time_var = Variable(expire_time_var)
- self.fragment_name = fragment_name
- self.vary_on = vary_on
-
- def render(self, context):
- try:
- expire_time = self.expire_time_var.resolve(context)
- except VariableDoesNotExist:
- raise TemplateSyntaxError('"cache" tag got an unknown variable: %r' % self.expire_time_var.var)
- try:
- expire_time = int(expire_time)
- except (ValueError, TypeError):
- raise TemplateSyntaxError('"cache" tag got a non-integer timeout value: %r' % expire_time)
- # Build a unicode key for this fragment and all vary-on's.
- args = md5_constructor(u':'.join([urlquote(resolve_variable(var, context)) for var in self.vary_on]))
- cache_key = 'template.cache.%s.%s' % (self.fragment_name, args.hexdigest())
- value = cache.get(cache_key)
- if value is None:
- value = self.nodelist.render(context)
- cache.set(cache_key, value, expire_time)
- return value
-
-def do_cache(parser, token):
- """
- This will cache the contents of a template fragment for a given amount
- of time.
-
- Usage::
-
- {% load cache %}
- {% cache [expire_time] [fragment_name] %}
- .. some expensive processing ..
- {% endcache %}
-
- This tag also supports varying by a list of arguments::
-
- {% load cache %}
- {% cache [expire_time] [fragment_name] [var1] [var2] .. %}
- .. some expensive processing ..
- {% endcache %}
-
- Each unique set of arguments will result in a unique cache entry.
- """
- nodelist = parser.parse(('endcache',))
- parser.delete_first_token()
- tokens = token.contents.split()
- if len(tokens) < 3:
- raise TemplateSyntaxError(u"'%r' tag requires at least 2 arguments." % tokens[0])
- return CacheNode(nodelist, tokens[1], tokens[2], tokens[3:])
-
-register.tag('cache', do_cache)
diff --git a/parts/django/django/templatetags/i18n.py b/parts/django/django/templatetags/i18n.py
deleted file mode 100644
index c0e360b..0000000
--- a/parts/django/django/templatetags/i18n.py
+++ /dev/null
@@ -1,274 +0,0 @@
-import re
-
-from django.template import Node, Variable, VariableNode, _render_value_in_context
-from django.template import TemplateSyntaxError, TokenParser, Library
-from django.template import TOKEN_TEXT, TOKEN_VAR
-from django.utils import translation
-from django.utils.encoding import force_unicode
-
-register = Library()
-
-class GetAvailableLanguagesNode(Node):
- def __init__(self, variable):
- self.variable = variable
-
- def render(self, context):
- from django.conf import settings
- context[self.variable] = [(k, translation.ugettext(v)) for k, v in settings.LANGUAGES]
- return ''
-
-class GetCurrentLanguageNode(Node):
- def __init__(self, variable):
- self.variable = variable
-
- def render(self, context):
- context[self.variable] = translation.get_language()
- return ''
-
-class GetCurrentLanguageBidiNode(Node):
- def __init__(self, variable):
- self.variable = variable
-
- def render(self, context):
- context[self.variable] = translation.get_language_bidi()
- return ''
-
-class TranslateNode(Node):
- def __init__(self, filter_expression, noop):
- self.noop = noop
- self.filter_expression = filter_expression
- if isinstance(self.filter_expression.var, basestring):
- self.filter_expression.var = Variable(u"'%s'" % self.filter_expression.var)
-
- def render(self, context):
- self.filter_expression.var.translate = not self.noop
- output = self.filter_expression.resolve(context)
- return _render_value_in_context(output, context)
-
-class BlockTranslateNode(Node):
- def __init__(self, extra_context, singular, plural=None, countervar=None,
- counter=None):
- self.extra_context = extra_context
- self.singular = singular
- self.plural = plural
- self.countervar = countervar
- self.counter = counter
-
- def render_token_list(self, tokens):
- result = []
- vars = []
- for token in tokens:
- if token.token_type == TOKEN_TEXT:
- result.append(token.contents)
- elif token.token_type == TOKEN_VAR:
- result.append(u'%%(%s)s' % token.contents)
- vars.append(token.contents)
- return ''.join(result), vars
-
- def render(self, context):
- tmp_context = {}
- for var, val in self.extra_context.items():
- tmp_context[var] = val.render(context)
- # Update() works like a push(), so corresponding context.pop() is at
- # the end of function
- context.update(tmp_context)
- singular, vars = self.render_token_list(self.singular)
- if self.plural and self.countervar and self.counter:
- count = self.counter.resolve(context)
- context[self.countervar] = count
- plural, plural_vars = self.render_token_list(self.plural)
- result = translation.ungettext(singular, plural, count)
- vars.extend(plural_vars)
- else:
- result = translation.ugettext(singular)
- # Escape all isolated '%' before substituting in the context.
- result = re.sub(u'%(?!\()', u'%%', result)
- data = dict([(v, _render_value_in_context(context[v], context)) for v in vars])
- context.pop()
- return result % data
-
-def do_get_available_languages(parser, token):
- """
- This will store a list of available languages
- in the context.
-
- Usage::
-
- {% get_available_languages as languages %}
- {% for language in languages %}
- ...
- {% endfor %}
-
- This will just pull the LANGUAGES setting from
- your setting file (or the default settings) and
- put it into the named variable.
- """
- args = token.contents.split()
- if len(args) != 3 or args[1] != 'as':
- raise TemplateSyntaxError("'get_available_languages' requires 'as variable' (got %r)" % args)
- return GetAvailableLanguagesNode(args[2])
-
-def do_get_current_language(parser, token):
- """
- This will store the current language in the context.
-
- Usage::
-
- {% get_current_language as language %}
-
- This will fetch the currently active language and
- put it's value into the ``language`` context
- variable.
- """
- args = token.contents.split()
- if len(args) != 3 or args[1] != 'as':
- raise TemplateSyntaxError("'get_current_language' requires 'as variable' (got %r)" % args)
- return GetCurrentLanguageNode(args[2])
-
-def do_get_current_language_bidi(parser, token):
- """
- This will store the current language layout in the context.
-
- Usage::
-
- {% get_current_language_bidi as bidi %}
-
- This will fetch the currently active language's layout and
- put it's value into the ``bidi`` context variable.
- True indicates right-to-left layout, otherwise left-to-right
- """
- args = token.contents.split()
- if len(args) != 3 or args[1] != 'as':
- raise TemplateSyntaxError("'get_current_language_bidi' requires 'as variable' (got %r)" % args)
- return GetCurrentLanguageBidiNode(args[2])
-
-def do_translate(parser, token):
- """
- This will mark a string for translation and will
- translate the string for the current language.
-
- Usage::
-
- {% trans "this is a test" %}
-
- This will mark the string for translation so it will
- be pulled out by mark-messages.py into the .po files
- and will run the string through the translation engine.
-
- There is a second form::
-
- {% trans "this is a test" noop %}
-
- This will only mark for translation, but will return
- the string unchanged. Use it when you need to store
- values into forms that should be translated later on.
-
- You can use variables instead of constant strings
- to translate stuff you marked somewhere else::
-
- {% trans variable %}
-
- This will just try to translate the contents of
- the variable ``variable``. Make sure that the string
- in there is something that is in the .po file.
- """
- class TranslateParser(TokenParser):
- def top(self):
- value = self.value()
-
- # Backwards Compatiblity fix:
- # FilterExpression does not support single-quoted strings,
- # so we make a cheap localized fix in order to maintain
- # backwards compatibility with existing uses of ``trans``
- # where single quote use is supported.
- if value[0] == "'":
- pos = None
- m = re.match("^'([^']+)'(\|.*$)",value)
- if m:
- value = '"%s"%s' % (m.group(1).replace('"','\\"'),m.group(2))
- elif value[-1] == "'":
- value = '"%s"' % value[1:-1].replace('"','\\"')
-
- if self.more():
- if self.tag() == 'noop':
- noop = True
- else:
- raise TemplateSyntaxError("only option for 'trans' is 'noop'")
- else:
- noop = False
- return (value, noop)
- value, noop = TranslateParser(token.contents).top()
- return TranslateNode(parser.compile_filter(value), noop)
-
-def do_block_translate(parser, token):
- """
- This will translate a block of text with parameters.
-
- Usage::
-
- {% blocktrans with foo|filter as bar and baz|filter as boo %}
- This is {{ bar }} and {{ boo }}.
- {% endblocktrans %}
-
- Additionally, this supports pluralization::
-
- {% blocktrans count var|length as count %}
- There is {{ count }} object.
- {% plural %}
- There are {{ count }} objects.
- {% endblocktrans %}
-
- This is much like ngettext, only in template syntax.
- """
- class BlockTranslateParser(TokenParser):
- def top(self):
- countervar = None
- counter = None
- extra_context = {}
- while self.more():
- tag = self.tag()
- if tag == 'with' or tag == 'and':
- value = self.value()
- if self.tag() != 'as':
- raise TemplateSyntaxError("variable bindings in 'blocktrans' must be 'with value as variable'")
- extra_context[self.tag()] = VariableNode(
- parser.compile_filter(value))
- elif tag == 'count':
- counter = parser.compile_filter(self.value())
- if self.tag() != 'as':
- raise TemplateSyntaxError("counter specification in 'blocktrans' must be 'count value as variable'")
- countervar = self.tag()
- else:
- raise TemplateSyntaxError("unknown subtag %s for 'blocktrans' found" % tag)
- return (countervar, counter, extra_context)
-
- countervar, counter, extra_context = BlockTranslateParser(token.contents).top()
-
- singular = []
- plural = []
- while parser.tokens:
- token = parser.next_token()
- if token.token_type in (TOKEN_VAR, TOKEN_TEXT):
- singular.append(token)
- else:
- break
- if countervar and counter:
- if token.contents.strip() != 'plural':
- raise TemplateSyntaxError("'blocktrans' doesn't allow other block tags inside it")
- while parser.tokens:
- token = parser.next_token()
- if token.token_type in (TOKEN_VAR, TOKEN_TEXT):
- plural.append(token)
- else:
- break
- if token.contents.strip() != 'endblocktrans':
- raise TemplateSyntaxError("'blocktrans' doesn't allow other block tags (seen %r) inside it" % token.contents)
-
- return BlockTranslateNode(extra_context, singular, plural, countervar,
- counter)
-
-register.tag('get_available_languages', do_get_available_languages)
-register.tag('get_current_language', do_get_current_language)
-register.tag('get_current_language_bidi', do_get_current_language_bidi)
-register.tag('trans', do_translate)
-register.tag('blocktrans', do_block_translate)
diff --git a/parts/django/django/test/__init__.py b/parts/django/django/test/__init__.py
deleted file mode 100644
index c996ed4..0000000
--- a/parts/django/django/test/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-"""
-Django Unit Test and Doctest framework.
-"""
-
-from django.test.client import Client
-from django.test.testcases import TestCase, TransactionTestCase
-from django.test.utils import Approximate
diff --git a/parts/django/django/test/_doctest.py b/parts/django/django/test/_doctest.py
deleted file mode 100644
index 17fc88a..0000000
--- a/parts/django/django/test/_doctest.py
+++ /dev/null
@@ -1,2693 +0,0 @@
-# This is a slightly modified version of the doctest.py that shipped with Python 2.4
-# It incorporates changes that have been submitted to the Python ticket tracker
-# as ticket #1521051. These changes allow for a DoctestRunner and Doctest base
-# class to be specified when constructing a DoctestSuite.
-
-# Module doctest.
-# Released to the public domain 16-Jan-2001, by Tim Peters (tim@python.org).
-# Major enhancements and refactoring by:
-# Jim Fulton
-# Edward Loper
-
-# Provided as-is; use at your own risk; no warranty; no promises; enjoy!
-
-r"""Module doctest -- a framework for running examples in docstrings.
-
-In simplest use, end each module M to be tested with:
-
-def _test():
- import doctest
- doctest.testmod()
-
-if __name__ == "__main__":
- _test()
-
-Then running the module as a script will cause the examples in the
-docstrings to get executed and verified:
-
-python M.py
-
-This won't display anything unless an example fails, in which case the
-failing example(s) and the cause(s) of the failure(s) are printed to stdout
-(why not stderr? because stderr is a lame hack <0.2 wink>), and the final
-line of output is "Test failed.".
-
-Run it with the -v switch instead:
-
-python M.py -v
-
-and a detailed report of all examples tried is printed to stdout, along
-with assorted summaries at the end.
-
-You can force verbose mode by passing "verbose=True" to testmod, or prohibit
-it by passing "verbose=False". In either of those cases, sys.argv is not
-examined by testmod.
-
-There are a variety of other ways to run doctests, including integration
-with the unittest framework, and support for running non-Python text
-files containing doctests. There are also many ways to override parts
-of doctest's default behaviors. See the Library Reference Manual for
-details.
-"""
-
-__docformat__ = 'reStructuredText en'
-
-__all__ = [
- # 0, Option Flags
- 'register_optionflag',
- 'DONT_ACCEPT_TRUE_FOR_1',
- 'DONT_ACCEPT_BLANKLINE',
- 'NORMALIZE_WHITESPACE',
- 'ELLIPSIS',
- 'IGNORE_EXCEPTION_DETAIL',
- 'COMPARISON_FLAGS',
- 'REPORT_UDIFF',
- 'REPORT_CDIFF',
- 'REPORT_NDIFF',
- 'REPORT_ONLY_FIRST_FAILURE',
- 'REPORTING_FLAGS',
- # 1. Utility Functions
- 'is_private',
- # 2. Example & DocTest
- 'Example',
- 'DocTest',
- # 3. Doctest Parser
- 'DocTestParser',
- # 4. Doctest Finder
- 'DocTestFinder',
- # 5. Doctest Runner
- 'DocTestRunner',
- 'OutputChecker',
- 'DocTestFailure',
- 'UnexpectedException',
- 'DebugRunner',
- # 6. Test Functions
- 'testmod',
- 'testfile',
- 'run_docstring_examples',
- # 7. Tester
- 'Tester',
- # 8. Unittest Support
- 'DocTestSuite',
- 'DocFileSuite',
- 'set_unittest_reportflags',
- # 9. Debugging Support
- 'script_from_examples',
- 'testsource',
- 'debug_src',
- 'debug',
-]
-
-import __future__
-
-import sys, traceback, inspect, linecache, os, re
-import unittest, difflib, pdb, tempfile
-import warnings
-from StringIO import StringIO
-
-if sys.platform.startswith('java'):
- # On Jython, isclass() reports some modules as classes. Patch it.
- def patch_isclass(isclass):
- def patched_isclass(obj):
- return isclass(obj) and hasattr(obj, '__module__')
- return patched_isclass
- inspect.isclass = patch_isclass(inspect.isclass)
-
-# Don't whine about the deprecated is_private function in this
-# module's tests.
-warnings.filterwarnings("ignore", "is_private", DeprecationWarning,
- __name__, 0)
-
-# There are 4 basic classes:
-# - Example: a <source, want> pair, plus an intra-docstring line number.
-# - DocTest: a collection of examples, parsed from a docstring, plus
-# info about where the docstring came from (name, filename, lineno).
-# - DocTestFinder: extracts DocTests from a given object's docstring and
-# its contained objects' docstrings.
-# - DocTestRunner: runs DocTest cases, and accumulates statistics.
-#
-# So the basic picture is:
-#
-# list of:
-# +------+ +---------+ +-------+
-# |object| --DocTestFinder-> | DocTest | --DocTestRunner-> |results|
-# +------+ +---------+ +-------+
-# | Example |
-# | ... |
-# | Example |
-# +---------+
-
-# Option constants.
-
-OPTIONFLAGS_BY_NAME = {}
-def register_optionflag(name):
- flag = 1 << len(OPTIONFLAGS_BY_NAME)
- OPTIONFLAGS_BY_NAME[name] = flag
- return flag
-
-DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1')
-DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE')
-NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE')
-ELLIPSIS = register_optionflag('ELLIPSIS')
-IGNORE_EXCEPTION_DETAIL = register_optionflag('IGNORE_EXCEPTION_DETAIL')
-
-COMPARISON_FLAGS = (DONT_ACCEPT_TRUE_FOR_1 |
- DONT_ACCEPT_BLANKLINE |
- NORMALIZE_WHITESPACE |
- ELLIPSIS |
- IGNORE_EXCEPTION_DETAIL)
-
-REPORT_UDIFF = register_optionflag('REPORT_UDIFF')
-REPORT_CDIFF = register_optionflag('REPORT_CDIFF')
-REPORT_NDIFF = register_optionflag('REPORT_NDIFF')
-REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE')
-
-REPORTING_FLAGS = (REPORT_UDIFF |
- REPORT_CDIFF |
- REPORT_NDIFF |
- REPORT_ONLY_FIRST_FAILURE)
-
-# Special string markers for use in `want` strings:
-BLANKLINE_MARKER = '<BLANKLINE>'
-ELLIPSIS_MARKER = '...'
-
-######################################################################
-## Table of Contents
-######################################################################
-# 1. Utility Functions
-# 2. Example & DocTest -- store test cases
-# 3. DocTest Parser -- extracts examples from strings
-# 4. DocTest Finder -- extracts test cases from objects
-# 5. DocTest Runner -- runs test cases
-# 6. Test Functions -- convenient wrappers for testing
-# 7. Tester Class -- for backwards compatibility
-# 8. Unittest Support
-# 9. Debugging Support
-# 10. Example Usage
-
-######################################################################
-## 1. Utility Functions
-######################################################################
-
-def is_private(prefix, base):
- """prefix, base -> true iff name prefix + "." + base is "private".
-
- Prefix may be an empty string, and base does not contain a period.
- Prefix is ignored (although functions you write conforming to this
- protocol may make use of it).
- Return true iff base begins with an (at least one) underscore, but
- does not both begin and end with (at least) two underscores.
-
- >>> is_private("a.b", "my_func")
- False
- >>> is_private("____", "_my_func")
- True
- >>> is_private("someclass", "__init__")
- False
- >>> is_private("sometypo", "__init_")
- True
- >>> is_private("x.y.z", "_")
- True
- >>> is_private("_x.y.z", "__")
- False
- >>> is_private("", "") # senseless but consistent
- False
- """
- warnings.warn("is_private is deprecated; it wasn't useful; "
- "examine DocTestFinder.find() lists instead",
- DeprecationWarning, stacklevel=2)
- return base[:1] == "_" and not base[:2] == "__" == base[-2:]
-
-def _extract_future_flags(globs):
- """
- Return the compiler-flags associated with the future features that
- have been imported into the given namespace (globs).
- """
- flags = 0
- for fname in __future__.all_feature_names:
- feature = globs.get(fname, None)
- if feature is getattr(__future__, fname):
- flags |= feature.compiler_flag
- return flags
-
-def _normalize_module(module, depth=2):
- """
- Return the module specified by `module`. In particular:
- - If `module` is a module, then return module.
- - If `module` is a string, then import and return the
- module with that name.
- - If `module` is None, then return the calling module.
- The calling module is assumed to be the module of
- the stack frame at the given depth in the call stack.
- """
- if inspect.ismodule(module):
- return module
- elif isinstance(module, (str, unicode)):
- return __import__(module, globals(), locals(), ["*"])
- elif module is None:
- return sys.modules[sys._getframe(depth).f_globals['__name__']]
- else:
- raise TypeError("Expected a module, string, or None")
-
-def _indent(s, indent=4):
- """
- Add the given number of space characters to the beginning every
- non-blank line in `s`, and return the result.
- """
- # This regexp matches the start of non-blank lines:
- return re.sub('(?m)^(?!$)', indent*' ', s)
-
-def _exception_traceback(exc_info):
- """
- Return a string containing a traceback message for the given
- exc_info tuple (as returned by sys.exc_info()).
- """
- # Get a traceback message.
- excout = StringIO()
- exc_type, exc_val, exc_tb = exc_info
- traceback.print_exception(exc_type, exc_val, exc_tb, file=excout)
- return excout.getvalue()
-
-# Override some StringIO methods.
-class _SpoofOut(StringIO):
- def getvalue(self):
- result = StringIO.getvalue(self)
- # If anything at all was written, make sure there's a trailing
- # newline. There's no way for the expected output to indicate
- # that a trailing newline is missing.
- if result and not result.endswith("\n"):
- result += "\n"
- # Prevent softspace from screwing up the next test case, in
- # case they used print with a trailing comma in an example.
- if hasattr(self, "softspace"):
- del self.softspace
- return result
-
- def truncate(self, size=None):
- StringIO.truncate(self, size)
- if hasattr(self, "softspace"):
- del self.softspace
-
-# Worst-case linear-time ellipsis matching.
-def _ellipsis_match(want, got):
- """
- Essentially the only subtle case:
- >>> _ellipsis_match('aa...aa', 'aaa')
- False
- """
- if ELLIPSIS_MARKER not in want:
- return want == got
-
- # Find "the real" strings.
- ws = want.split(ELLIPSIS_MARKER)
- assert len(ws) >= 2
-
- # Deal with exact matches possibly needed at one or both ends.
- startpos, endpos = 0, len(got)
- w = ws[0]
- if w: # starts with exact match
- if got.startswith(w):
- startpos = len(w)
- del ws[0]
- else:
- return False
- w = ws[-1]
- if w: # ends with exact match
- if got.endswith(w):
- endpos -= len(w)
- del ws[-1]
- else:
- return False
-
- if startpos > endpos:
- # Exact end matches required more characters than we have, as in
- # _ellipsis_match('aa...aa', 'aaa')
- return False
-
- # For the rest, we only need to find the leftmost non-overlapping
- # match for each piece. If there's no overall match that way alone,
- # there's no overall match period.
- for w in ws:
- # w may be '' at times, if there are consecutive ellipses, or
- # due to an ellipsis at the start or end of `want`. That's OK.
- # Search for an empty string succeeds, and doesn't change startpos.
- startpos = got.find(w, startpos, endpos)
- if startpos < 0:
- return False
- startpos += len(w)
-
- return True
-
-def _comment_line(line):
- "Return a commented form of the given line"
- line = line.rstrip()
- if line:
- return '# '+line
- else:
- return '#'
-
-class _OutputRedirectingPdb(pdb.Pdb):
- """
- A specialized version of the python debugger that redirects stdout
- to a given stream when interacting with the user. Stdout is *not*
- redirected when traced code is executed.
- """
- def __init__(self, out):
- self.__out = out
- self.__debugger_used = False
- pdb.Pdb.__init__(self)
-
- def set_trace(self):
- self.__debugger_used = True
- pdb.Pdb.set_trace(self)
-
- def set_continue(self):
- # Calling set_continue unconditionally would break unit test coverage
- # reporting, as Bdb.set_continue calls sys.settrace(None).
- if self.__debugger_used:
- pdb.Pdb.set_continue(self)
-
- def trace_dispatch(self, *args):
- # Redirect stdout to the given stream.
- save_stdout = sys.stdout
- sys.stdout = self.__out
- # Call Pdb's trace dispatch method.
- try:
- return pdb.Pdb.trace_dispatch(self, *args)
- finally:
- sys.stdout = save_stdout
-
-# [XX] Normalize with respect to os.path.pardir?
-def _module_relative_path(module, path):
- if not inspect.ismodule(module):
- raise TypeError, 'Expected a module: %r' % module
- if path.startswith('/'):
- raise ValueError, 'Module-relative files may not have absolute paths'
-
- # Find the base directory for the path.
- if hasattr(module, '__file__'):
- # A normal module/package
- basedir = os.path.split(module.__file__)[0]
- elif module.__name__ == '__main__':
- # An interactive session.
- if len(sys.argv)>0 and sys.argv[0] != '':
- basedir = os.path.split(sys.argv[0])[0]
- else:
- basedir = os.curdir
- else:
- # A module w/o __file__ (this includes builtins)
- raise ValueError("Can't resolve paths relative to the module " +
- module + " (it has no __file__)")
-
- # Combine the base directory and the path.
- return os.path.join(basedir, *(path.split('/')))
-
-######################################################################
-## 2. Example & DocTest
-######################################################################
-## - An "example" is a <source, want> pair, where "source" is a
-## fragment of source code, and "want" is the expected output for
-## "source." The Example class also includes information about
-## where the example was extracted from.
-##
-## - A "doctest" is a collection of examples, typically extracted from
-## a string (such as an object's docstring). The DocTest class also
-## includes information about where the string was extracted from.
-
-class Example:
- """
- A single doctest example, consisting of source code and expected
- output. `Example` defines the following attributes:
-
- - source: A single Python statement, always ending with a newline.
- The constructor adds a newline if needed.
-
- - want: The expected output from running the source code (either
- from stdout, or a traceback in case of exception). `want` ends
- with a newline unless it's empty, in which case it's an empty
- string. The constructor adds a newline if needed.
-
- - exc_msg: The exception message generated by the example, if
- the example is expected to generate an exception; or `None` if
- it is not expected to generate an exception. This exception
- message is compared against the return value of
- `traceback.format_exception_only()`. `exc_msg` ends with a
- newline unless it's `None`. The constructor adds a newline
- if needed.
-
- - lineno: The line number within the DocTest string containing
- this Example where the Example begins. This line number is
- zero-based, with respect to the beginning of the DocTest.
-
- - indent: The example's indentation in the DocTest string.
- I.e., the number of space characters that preceed the
- example's first prompt.
-
- - options: A dictionary mapping from option flags to True or
- False, which is used to override default options for this
- example. Any option flags not contained in this dictionary
- are left at their default value (as specified by the
- DocTestRunner's optionflags). By default, no options are set.
- """
- def __init__(self, source, want, exc_msg=None, lineno=0, indent=0,
- options=None):
- # Normalize inputs.
- if not source.endswith('\n'):
- source += '\n'
- if want and not want.endswith('\n'):
- want += '\n'
- if exc_msg is not None and not exc_msg.endswith('\n'):
- exc_msg += '\n'
- # Store properties.
- self.source = source
- self.want = want
- self.lineno = lineno
- self.indent = indent
- if options is None: options = {}
- self.options = options
- self.exc_msg = exc_msg
-
-class DocTest:
- """
- A collection of doctest examples that should be run in a single
- namespace. Each `DocTest` defines the following attributes:
-
- - examples: the list of examples.
-
- - globs: The namespace (aka globals) that the examples should
- be run in.
-
- - name: A name identifying the DocTest (typically, the name of
- the object whose docstring this DocTest was extracted from).
-
- - filename: The name of the file that this DocTest was extracted
- from, or `None` if the filename is unknown.
-
- - lineno: The line number within filename where this DocTest
- begins, or `None` if the line number is unavailable. This
- line number is zero-based, with respect to the beginning of
- the file.
-
- - docstring: The string that the examples were extracted from,
- or `None` if the string is unavailable.
- """
- def __init__(self, examples, globs, name, filename, lineno, docstring):
- """
- Create a new DocTest containing the given examples. The
- DocTest's globals are initialized with a copy of `globs`.
- """
- assert not isinstance(examples, basestring), \
- "DocTest no longer accepts str; use DocTestParser instead"
- self.examples = examples
- self.docstring = docstring
- self.globs = globs.copy()
- self.name = name
- self.filename = filename
- self.lineno = lineno
-
- def __repr__(self):
- if len(self.examples) == 0:
- examples = 'no examples'
- elif len(self.examples) == 1:
- examples = '1 example'
- else:
- examples = '%d examples' % len(self.examples)
- return ('<DocTest %s from %s:%s (%s)>' %
- (self.name, self.filename, self.lineno, examples))
-
-
- # This lets us sort tests by name:
- def __cmp__(self, other):
- if not isinstance(other, DocTest):
- return -1
- return cmp((self.name, self.filename, self.lineno, id(self)),
- (other.name, other.filename, other.lineno, id(other)))
-
-######################################################################
-## 3. DocTestParser
-######################################################################
-
-class DocTestParser:
- """
- A class used to parse strings containing doctest examples.
- """
- # This regular expression is used to find doctest examples in a
- # string. It defines three groups: `source` is the source code
- # (including leading indentation and prompts); `indent` is the
- # indentation of the first (PS1) line of the source code; and
- # `want` is the expected output (including leading indentation).
- _EXAMPLE_RE = re.compile(r'''
- # Source consists of a PS1 line followed by zero or more PS2 lines.
- (?P<source>
- (?:^(?P<indent> [ ]*) >>> .*) # PS1 line
- (?:\n [ ]* \.\.\. .*)*) # PS2 lines
- \n?
- # Want consists of any non-blank lines that do not start with PS1.
- (?P<want> (?:(?![ ]*$) # Not a blank line
- (?![ ]*>>>) # Not a line starting with PS1
- .*$\n? # But any other line
- )*)
- ''', re.MULTILINE | re.VERBOSE)
-
- # A regular expression for handling `want` strings that contain
- # expected exceptions. It divides `want` into three pieces:
- # - the traceback header line (`hdr`)
- # - the traceback stack (`stack`)
- # - the exception message (`msg`), as generated by
- # traceback.format_exception_only()
- # `msg` may have multiple lines. We assume/require that the
- # exception message is the first non-indented line starting with a word
- # character following the traceback header line.
- _EXCEPTION_RE = re.compile(r"""
- # Grab the traceback header. Different versions of Python have
- # said different things on the first traceback line.
- ^(?P<hdr> Traceback\ \(
- (?: most\ recent\ call\ last
- | innermost\ last
- ) \) :
- )
- \s* $ # toss trailing whitespace on the header.
- (?P<stack> .*?) # don't blink: absorb stuff until...
- ^ (?P<msg> \w+ .*) # a line *starts* with alphanum.
- """, re.VERBOSE | re.MULTILINE | re.DOTALL)
-
- # A callable returning a true value iff its argument is a blank line
- # or contains a single comment.
- _IS_BLANK_OR_COMMENT = re.compile(r'^[ ]*(#.*)?$').match
-
- def parse(self, string, name='<string>'):
- """
- Divide the given string into examples and intervening text,
- and return them as a list of alternating Examples and strings.
- Line numbers for the Examples are 0-based. The optional
- argument `name` is a name identifying this string, and is only
- used for error messages.
- """
- string = string.expandtabs()
- # If all lines begin with the same indentation, then strip it.
- min_indent = self._min_indent(string)
- if min_indent > 0:
- string = '\n'.join([l[min_indent:] for l in string.split('\n')])
-
- output = []
- charno, lineno = 0, 0
- # Find all doctest examples in the string:
- for m in self._EXAMPLE_RE.finditer(string):
- # Add the pre-example text to `output`.
- output.append(string[charno:m.start()])
- # Update lineno (lines before this example)
- lineno += string.count('\n', charno, m.start())
- # Extract info from the regexp match.
- (source, options, want, exc_msg) = \
- self._parse_example(m, name, lineno)
- # Create an Example, and add it to the list.
- if not self._IS_BLANK_OR_COMMENT(source):
- output.append( Example(source, want, exc_msg,
- lineno=lineno,
- indent=min_indent+len(m.group('indent')),
- options=options) )
- # Update lineno (lines inside this example)
- lineno += string.count('\n', m.start(), m.end())
- # Update charno.
- charno = m.end()
- # Add any remaining post-example text to `output`.
- output.append(string[charno:])
- return output
-
- def get_doctest(self, string, globs, name, filename, lineno):
- """
- Extract all doctest examples from the given string, and
- collect them into a `DocTest` object.
-
- `globs`, `name`, `filename`, and `lineno` are attributes for
- the new `DocTest` object. See the documentation for `DocTest`
- for more information.
- """
- return DocTest(self.get_examples(string, name), globs,
- name, filename, lineno, string)
-
- def get_examples(self, string, name='<string>'):
- """
- Extract all doctest examples from the given string, and return
- them as a list of `Example` objects. Line numbers are
- 0-based, because it's most common in doctests that nothing
- interesting appears on the same line as opening triple-quote,
- and so the first interesting line is called \"line 1\" then.
-
- The optional argument `name` is a name identifying this
- string, and is only used for error messages.
- """
- return [x for x in self.parse(string, name)
- if isinstance(x, Example)]
-
- def _parse_example(self, m, name, lineno):
- """
- Given a regular expression match from `_EXAMPLE_RE` (`m`),
- return a pair `(source, want)`, where `source` is the matched
- example's source code (with prompts and indentation stripped);
- and `want` is the example's expected output (with indentation
- stripped).
-
- `name` is the string's name, and `lineno` is the line number
- where the example starts; both are used for error messages.
- """
- # Get the example's indentation level.
- indent = len(m.group('indent'))
-
- # Divide source into lines; check that they're properly
- # indented; and then strip their indentation & prompts.
- source_lines = m.group('source').split('\n')
- self._check_prompt_blank(source_lines, indent, name, lineno)
- self._check_prefix(source_lines[1:], ' '*indent + '.', name, lineno)
- source = '\n'.join([sl[indent+4:] for sl in source_lines])
-
- # Divide want into lines; check that it's properly indented; and
- # then strip the indentation. Spaces before the last newline should
- # be preserved, so plain rstrip() isn't good enough.
- want = m.group('want')
- want_lines = want.split('\n')
- if len(want_lines) > 1 and re.match(r' *$', want_lines[-1]):
- del want_lines[-1] # forget final newline & spaces after it
- self._check_prefix(want_lines, ' '*indent, name,
- lineno + len(source_lines))
- want = '\n'.join([wl[indent:] for wl in want_lines])
-
- # If `want` contains a traceback message, then extract it.
- m = self._EXCEPTION_RE.match(want)
- if m:
- exc_msg = m.group('msg')
- else:
- exc_msg = None
-
- # Extract options from the source.
- options = self._find_options(source, name, lineno)
-
- return source, options, want, exc_msg
-
- # This regular expression looks for option directives in the
- # source code of an example. Option directives are comments
- # starting with "doctest:". Warning: this may give false
- # positives for string-literals that contain the string
- # "#doctest:". Eliminating these false positives would require
- # actually parsing the string; but we limit them by ignoring any
- # line containing "#doctest:" that is *followed* by a quote mark.
- _OPTION_DIRECTIVE_RE = re.compile(r'#\s*doctest:\s*([^\n\'"]*)$',
- re.MULTILINE)
-
- def _find_options(self, source, name, lineno):
- """
- Return a dictionary containing option overrides extracted from
- option directives in the given source string.
-
- `name` is the string's name, and `lineno` is the line number
- where the example starts; both are used for error messages.
- """
- options = {}
- # (note: with the current regexp, this will match at most once:)
- for m in self._OPTION_DIRECTIVE_RE.finditer(source):
- option_strings = m.group(1).replace(',', ' ').split()
- for option in option_strings:
- if (option[0] not in '+-' or
- option[1:] not in OPTIONFLAGS_BY_NAME):
- raise ValueError('line %r of the doctest for %s '
- 'has an invalid option: %r' %
- (lineno+1, name, option))
- flag = OPTIONFLAGS_BY_NAME[option[1:]]
- options[flag] = (option[0] == '+')
- if options and self._IS_BLANK_OR_COMMENT(source):
- raise ValueError('line %r of the doctest for %s has an option '
- 'directive on a line with no example: %r' %
- (lineno, name, source))
- return options
-
- # This regular expression finds the indentation of every non-blank
- # line in a string.
- _INDENT_RE = re.compile('^([ ]*)(?=\S)', re.MULTILINE)
-
- def _min_indent(self, s):
- "Return the minimum indentation of any non-blank line in `s`"
- indents = [len(indent) for indent in self._INDENT_RE.findall(s)]
- if len(indents) > 0:
- return min(indents)
- else:
- return 0
-
- def _check_prompt_blank(self, lines, indent, name, lineno):
- """
- Given the lines of a source string (including prompts and
- leading indentation), check to make sure that every prompt is
- followed by a space character. If any line is not followed by
- a space character, then raise ValueError.
- """
- for i, line in enumerate(lines):
- if len(line) >= indent+4 and line[indent+3] != ' ':
- raise ValueError('line %r of the docstring for %s '
- 'lacks blank after %s: %r' %
- (lineno+i+1, name,
- line[indent:indent+3], line))
-
- def _check_prefix(self, lines, prefix, name, lineno):
- """
- Check that every line in the given list starts with the given
- prefix; if any line does not, then raise a ValueError.
- """
- for i, line in enumerate(lines):
- if line and not line.startswith(prefix):
- raise ValueError('line %r of the docstring for %s has '
- 'inconsistent leading whitespace: %r' %
- (lineno+i+1, name, line))
-
-
-######################################################################
-## 4. DocTest Finder
-######################################################################
-
-class DocTestFinder:
- """
- A class used to extract the DocTests that are relevant to a given
- object, from its docstring and the docstrings of its contained
- objects. Doctests can currently be extracted from the following
- object types: modules, functions, classes, methods, staticmethods,
- classmethods, and properties.
- """
-
- def __init__(self, verbose=False, parser=DocTestParser(),
- recurse=True, _namefilter=None, exclude_empty=True):
- """
- Create a new doctest finder.
-
- The optional argument `parser` specifies a class or
- function that should be used to create new DocTest objects (or
- objects that implement the same interface as DocTest). The
- signature for this factory function should match the signature
- of the DocTest constructor.
-
- If the optional argument `recurse` is false, then `find` will
- only examine the given object, and not any contained objects.
-
- If the optional argument `exclude_empty` is false, then `find`
- will include tests for objects with empty docstrings.
- """
- self._parser = parser
- self._verbose = verbose
- self._recurse = recurse
- self._exclude_empty = exclude_empty
- # _namefilter is undocumented, and exists only for temporary backward-
- # compatibility support of testmod's deprecated isprivate mess.
- self._namefilter = _namefilter
-
- def find(self, obj, name=None, module=None, globs=None,
- extraglobs=None):
- """
- Return a list of the DocTests that are defined by the given
- object's docstring, or by any of its contained objects'
- docstrings.
-
- The optional parameter `module` is the module that contains
- the given object. If the module is not specified or is None, then
- the test finder will attempt to automatically determine the
- correct module. The object's module is used:
-
- - As a default namespace, if `globs` is not specified.
- - To prevent the DocTestFinder from extracting DocTests
- from objects that are imported from other modules.
- - To find the name of the file containing the object.
- - To help find the line number of the object within its
- file.
-
- Contained objects whose module does not match `module` are ignored.
-
- If `module` is False, no attempt to find the module will be made.
- This is obscure, of use mostly in tests: if `module` is False, or
- is None but cannot be found automatically, then all objects are
- considered to belong to the (non-existent) module, so all contained
- objects will (recursively) be searched for doctests.
-
- The globals for each DocTest is formed by combining `globs`
- and `extraglobs` (bindings in `extraglobs` override bindings
- in `globs`). A new copy of the globals dictionary is created
- for each DocTest. If `globs` is not specified, then it
- defaults to the module's `__dict__`, if specified, or {}
- otherwise. If `extraglobs` is not specified, then it defaults
- to {}.
-
- """
- # If name was not specified, then extract it from the object.
- if name is None:
- name = getattr(obj, '__name__', None)
- if name is None:
- raise ValueError("DocTestFinder.find: name must be given "
- "when obj.__name__ doesn't exist: %r" %
- (type(obj),))
-
- # Find the module that contains the given object (if obj is
- # a module, then module=obj.). Note: this may fail, in which
- # case module will be None.
- if module is False:
- module = None
- elif module is None:
- module = inspect.getmodule(obj)
-
- # Read the module's source code. This is used by
- # DocTestFinder._find_lineno to find the line number for a
- # given object's docstring.
- try:
- file = inspect.getsourcefile(obj) or inspect.getfile(obj)
- source_lines = linecache.getlines(file)
- if not source_lines:
- source_lines = None
- except TypeError:
- source_lines = None
-
- # Initialize globals, and merge in extraglobs.
- if globs is None:
- if module is None:
- globs = {}
- else:
- globs = module.__dict__.copy()
- else:
- globs = globs.copy()
- if extraglobs is not None:
- globs.update(extraglobs)
-
- # Recursively explore `obj`, extracting DocTests.
- tests = []
- self._find(tests, obj, name, module, source_lines, globs, {})
- return tests
-
- def _filter(self, obj, prefix, base):
- """
- Return true if the given object should not be examined.
- """
- return (self._namefilter is not None and
- self._namefilter(prefix, base))
-
- def _from_module(self, module, object):
- """
- Return true if the given object is defined in the given
- module.
- """
- if module is None:
- return True
- elif inspect.isfunction(object):
- return module.__dict__ is object.func_globals
- elif inspect.isclass(object):
- return module.__name__ == object.__module__
- elif inspect.getmodule(object) is not None:
- return module is inspect.getmodule(object)
- elif hasattr(object, '__module__'):
- return module.__name__ == object.__module__
- elif isinstance(object, property):
- return True # [XX] no way not be sure.
- else:
- raise ValueError("object must be a class or function")
-
- def _find(self, tests, obj, name, module, source_lines, globs, seen):
- """
- Find tests for the given object and any contained objects, and
- add them to `tests`.
- """
- if self._verbose:
- print 'Finding tests in %s' % name
-
- # If we've already processed this object, then ignore it.
- if id(obj) in seen:
- return
- seen[id(obj)] = 1
-
- # Find a test for this object, and add it to the list of tests.
- test = self._get_test(obj, name, module, globs, source_lines)
- if test is not None:
- tests.append(test)
-
- # Look for tests in a module's contained objects.
- if inspect.ismodule(obj) and self._recurse:
- for valname, val in obj.__dict__.items():
- # Check if this contained object should be ignored.
- if self._filter(val, name, valname):
- continue
- valname = '%s.%s' % (name, valname)
- # Recurse to functions & classes.
- if ((inspect.isfunction(val) or inspect.isclass(val)) and
- self._from_module(module, val)):
- self._find(tests, val, valname, module, source_lines,
- globs, seen)
-
- # Look for tests in a module's __test__ dictionary.
- if inspect.ismodule(obj) and self._recurse:
- for valname, val in getattr(obj, '__test__', {}).items():
- if not isinstance(valname, basestring):
- raise ValueError("DocTestFinder.find: __test__ keys "
- "must be strings: %r" %
- (type(valname),))
- if not (inspect.isfunction(val) or inspect.isclass(val) or
- inspect.ismethod(val) or inspect.ismodule(val) or
- isinstance(val, basestring)):
- raise ValueError("DocTestFinder.find: __test__ values "
- "must be strings, functions, methods, "
- "classes, or modules: %r" %
- (type(val),))
- valname = '%s.__test__.%s' % (name, valname)
- self._find(tests, val, valname, module, source_lines,
- globs, seen)
-
- # Look for tests in a class's contained objects.
- if inspect.isclass(obj) and self._recurse:
- for valname, val in obj.__dict__.items():
- # Check if this contained object should be ignored.
- if self._filter(val, name, valname):
- continue
- # Special handling for staticmethod/classmethod.
- if isinstance(val, staticmethod):
- val = getattr(obj, valname)
- if isinstance(val, classmethod):
- val = getattr(obj, valname).im_func
-
- # Recurse to methods, properties, and nested classes.
- if ((inspect.isfunction(val) or inspect.isclass(val) or
- isinstance(val, property)) and
- self._from_module(module, val)):
- valname = '%s.%s' % (name, valname)
- self._find(tests, val, valname, module, source_lines,
- globs, seen)
-
- def _get_test(self, obj, name, module, globs, source_lines):
- """
- Return a DocTest for the given object, if it defines a docstring;
- otherwise, return None.
- """
- # Extract the object's docstring. If it doesn't have one,
- # then return None (no test for this object).
- if isinstance(obj, basestring):
- docstring = obj
- else:
- try:
- if obj.__doc__ is None:
- docstring = ''
- else:
- docstring = obj.__doc__
- if not isinstance(docstring, basestring):
- docstring = str(docstring)
- except (TypeError, AttributeError):
- docstring = ''
-
- # Find the docstring's location in the file.
- lineno = self._find_lineno(obj, source_lines)
-
- # Don't bother if the docstring is empty.
- if self._exclude_empty and not docstring:
- return None
-
- # Return a DocTest for this object.
- if module is None:
- filename = None
- else:
- filename = getattr(module, '__file__', module.__name__)
- if filename[-4:] in (".pyc", ".pyo"):
- filename = filename[:-1]
- return self._parser.get_doctest(docstring, globs, name,
- filename, lineno)
-
- def _find_lineno(self, obj, source_lines):
- """
- Return a line number of the given object's docstring. Note:
- this method assumes that the object has a docstring.
- """
- lineno = None
-
- # Find the line number for modules.
- if inspect.ismodule(obj):
- lineno = 0
-
- # Find the line number for classes.
- # Note: this could be fooled if a class is defined multiple
- # times in a single file.
- if inspect.isclass(obj):
- if source_lines is None:
- return None
- pat = re.compile(r'^\s*class\s*%s\b' %
- getattr(obj, '__name__', '-'))
- for i, line in enumerate(source_lines):
- if pat.match(line):
- lineno = i
- break
-
- # Find the line number for functions & methods.
- if inspect.ismethod(obj): obj = obj.im_func
- if inspect.isfunction(obj): obj = obj.func_code
- if inspect.istraceback(obj): obj = obj.tb_frame
- if inspect.isframe(obj): obj = obj.f_code
- if inspect.iscode(obj):
- lineno = getattr(obj, 'co_firstlineno', None)-1
-
- # Find the line number where the docstring starts. Assume
- # that it's the first line that begins with a quote mark.
- # Note: this could be fooled by a multiline function
- # signature, where a continuation line begins with a quote
- # mark.
- if lineno is not None:
- if source_lines is None:
- return lineno+1
- pat = re.compile('(^|.*:)\s*\w*("|\')')
- for lineno in range(lineno, len(source_lines)):
- if pat.match(source_lines[lineno]):
- return lineno
-
- # We couldn't find the line number.
- return None
-
-######################################################################
-## 5. DocTest Runner
-######################################################################
-
-class DocTestRunner:
- """
- A class used to run DocTest test cases, and accumulate statistics.
- The `run` method is used to process a single DocTest case. It
- returns a tuple `(f, t)`, where `t` is the number of test cases
- tried, and `f` is the number of test cases that failed.
-
- >>> tests = DocTestFinder().find(_TestClass)
- >>> runner = DocTestRunner(verbose=False)
- >>> for test in tests:
- ... print runner.run(test)
- (0, 2)
- (0, 1)
- (0, 2)
- (0, 2)
-
- The `summarize` method prints a summary of all the test cases that
- have been run by the runner, and returns an aggregated `(f, t)`
- tuple:
-
- >>> runner.summarize(verbose=1)
- 4 items passed all tests:
- 2 tests in _TestClass
- 2 tests in _TestClass.__init__
- 2 tests in _TestClass.get
- 1 tests in _TestClass.square
- 7 tests in 4 items.
- 7 passed and 0 failed.
- Test passed.
- (0, 7)
-
- The aggregated number of tried examples and failed examples is
- also available via the `tries` and `failures` attributes:
-
- >>> runner.tries
- 7
- >>> runner.failures
- 0
-
- The comparison between expected outputs and actual outputs is done
- by an `OutputChecker`. This comparison may be customized with a
- number of option flags; see the documentation for `testmod` for
- more information. If the option flags are insufficient, then the
- comparison may also be customized by passing a subclass of
- `OutputChecker` to the constructor.
-
- The test runner's display output can be controlled in two ways.
- First, an output function (`out) can be passed to
- `TestRunner.run`; this function will be called with strings that
- should be displayed. It defaults to `sys.stdout.write`. If
- capturing the output is not sufficient, then the display output
- can be also customized by subclassing DocTestRunner, and
- overriding the methods `report_start`, `report_success`,
- `report_unexpected_exception`, and `report_failure`.
- """
- # This divider string is used to separate failure messages, and to
- # separate sections of the summary.
- DIVIDER = "*" * 70
-
- def __init__(self, checker=None, verbose=None, optionflags=0):
- """
- Create a new test runner.
-
- Optional keyword arg `checker` is the `OutputChecker` that
- should be used to compare the expected outputs and actual
- outputs of doctest examples.
-
- Optional keyword arg 'verbose' prints lots of stuff if true,
- only failures if false; by default, it's true iff '-v' is in
- sys.argv.
-
- Optional argument `optionflags` can be used to control how the
- test runner compares expected output to actual output, and how
- it displays failures. See the documentation for `testmod` for
- more information.
- """
- self._checker = checker or OutputChecker()
- if verbose is None:
- verbose = '-v' in sys.argv
- self._verbose = verbose
- self.optionflags = optionflags
- self.original_optionflags = optionflags
-
- # Keep track of the examples we've run.
- self.tries = 0
- self.failures = 0
- self._name2ft = {}
-
- # Create a fake output target for capturing doctest output.
- self._fakeout = _SpoofOut()
-
- #/////////////////////////////////////////////////////////////////
- # Reporting methods
- #/////////////////////////////////////////////////////////////////
-
- def report_start(self, out, test, example):
- """
- Report that the test runner is about to process the given
- example. (Only displays a message if verbose=True)
- """
- if self._verbose:
- if example.want:
- out('Trying:\n' + _indent(example.source) +
- 'Expecting:\n' + _indent(example.want))
- else:
- out('Trying:\n' + _indent(example.source) +
- 'Expecting nothing\n')
-
- def report_success(self, out, test, example, got):
- """
- Report that the given example ran successfully. (Only
- displays a message if verbose=True)
- """
- if self._verbose:
- out("ok\n")
-
- def report_failure(self, out, test, example, got):
- """
- Report that the given example failed.
- """
- out(self._failure_header(test, example) +
- self._checker.output_difference(example, got, self.optionflags))
-
- def report_unexpected_exception(self, out, test, example, exc_info):
- """
- Report that the given example raised an unexpected exception.
- """
- out(self._failure_header(test, example) +
- 'Exception raised:\n' + _indent(_exception_traceback(exc_info)))
-
- def _failure_header(self, test, example):
- out = [self.DIVIDER]
- if test.filename:
- if test.lineno is not None and example.lineno is not None:
- lineno = test.lineno + example.lineno + 1
- else:
- lineno = '?'
- out.append('File "%s", line %s, in %s' %
- (test.filename, lineno, test.name))
- else:
- out.append('Line %s, in %s' % (example.lineno+1, test.name))
- out.append('Failed example:')
- source = example.source
- out.append(_indent(source))
- return '\n'.join(out)
-
- #/////////////////////////////////////////////////////////////////
- # DocTest Running
- #/////////////////////////////////////////////////////////////////
-
- def __run(self, test, compileflags, out):
- """
- Run the examples in `test`. Write the outcome of each example
- with one of the `DocTestRunner.report_*` methods, using the
- writer function `out`. `compileflags` is the set of compiler
- flags that should be used to execute examples. Return a tuple
- `(f, t)`, where `t` is the number of examples tried, and `f`
- is the number of examples that failed. The examples are run
- in the namespace `test.globs`.
- """
- # Keep track of the number of failures and tries.
- failures = tries = 0
-
- # Save the option flags (since option directives can be used
- # to modify them).
- original_optionflags = self.optionflags
-
- SUCCESS, FAILURE, BOOM = range(3) # `outcome` state
-
- check = self._checker.check_output
-
- # Process each example.
- for examplenum, example in enumerate(test.examples):
-
- # If REPORT_ONLY_FIRST_FAILURE is set, then suppress
- # reporting after the first failure.
- quiet = (self.optionflags & REPORT_ONLY_FIRST_FAILURE and
- failures > 0)
-
- # Merge in the example's options.
- self.optionflags = original_optionflags
- if example.options:
- for (optionflag, val) in example.options.items():
- if val:
- self.optionflags |= optionflag
- else:
- self.optionflags &= ~optionflag
-
- # Record that we started this example.
- tries += 1
- if not quiet:
- self.report_start(out, test, example)
-
- # Use a special filename for compile(), so we can retrieve
- # the source code during interactive debugging (see
- # __patched_linecache_getlines).
- filename = '<doctest %s[%d]>' % (test.name, examplenum)
-
- # Run the example in the given context (globs), and record
- # any exception that gets raised. (But don't intercept
- # keyboard interrupts.)
- try:
- # Don't blink! This is where the user's code gets run.
- exec compile(example.source, filename, "single",
- compileflags, 1) in test.globs
- self.debugger.set_continue() # ==== Example Finished ====
- exception = None
- except KeyboardInterrupt:
- raise
- except:
- exception = sys.exc_info()
- self.debugger.set_continue() # ==== Example Finished ====
-
- got = self._fakeout.getvalue() # the actual output
- self._fakeout.truncate(0)
- outcome = FAILURE # guilty until proved innocent or insane
-
- # If the example executed without raising any exceptions,
- # verify its output.
- if exception is None:
- if check(example.want, got, self.optionflags):
- outcome = SUCCESS
-
- # The example raised an exception: check if it was expected.
- else:
- exc_info = sys.exc_info()
- exc_msg = traceback.format_exception_only(*exc_info[:2])[-1]
- if not quiet:
- got += _exception_traceback(exc_info)
-
- # If `example.exc_msg` is None, then we weren't expecting
- # an exception.
- if example.exc_msg is None:
- outcome = BOOM
-
- # We expected an exception: see whether it matches.
- elif check(example.exc_msg, exc_msg, self.optionflags):
- outcome = SUCCESS
-
- # Another chance if they didn't care about the detail.
- elif self.optionflags & IGNORE_EXCEPTION_DETAIL:
- m1 = re.match(r'[^:]*:', example.exc_msg)
- m2 = re.match(r'[^:]*:', exc_msg)
- if m1 and m2 and check(m1.group(0), m2.group(0),
- self.optionflags):
- outcome = SUCCESS
-
- # Report the outcome.
- if outcome is SUCCESS:
- if not quiet:
- self.report_success(out, test, example, got)
- elif outcome is FAILURE:
- if not quiet:
- self.report_failure(out, test, example, got)
- failures += 1
- elif outcome is BOOM:
- if not quiet:
- self.report_unexpected_exception(out, test, example,
- exc_info)
- failures += 1
- else:
- assert False, ("unknown outcome", outcome)
-
- # Restore the option flags (in case they were modified)
- self.optionflags = original_optionflags
-
- # Record and return the number of failures and tries.
- self.__record_outcome(test, failures, tries)
- return failures, tries
-
- def __record_outcome(self, test, f, t):
- """
- Record the fact that the given DocTest (`test`) generated `f`
- failures out of `t` tried examples.
- """
- f2, t2 = self._name2ft.get(test.name, (0,0))
- self._name2ft[test.name] = (f+f2, t+t2)
- self.failures += f
- self.tries += t
-
- __LINECACHE_FILENAME_RE = re.compile(r'<doctest '
- r'(?P<name>[\w\.]+)'
- r'\[(?P<examplenum>\d+)\]>$')
- def __patched_linecache_getlines(self, filename, module_globals=None):
- m = self.__LINECACHE_FILENAME_RE.match(filename)
- if m and m.group('name') == self.test.name:
- example = self.test.examples[int(m.group('examplenum'))]
- return example.source.splitlines(True)
- else:
- if sys.version_info < (2, 5, 0):
- return self.save_linecache_getlines(filename)
- else:
- return self.save_linecache_getlines(filename, module_globals)
-
- def run(self, test, compileflags=None, out=None, clear_globs=True):
- """
- Run the examples in `test`, and display the results using the
- writer function `out`.
-
- The examples are run in the namespace `test.globs`. If
- `clear_globs` is true (the default), then this namespace will
- be cleared after the test runs, to help with garbage
- collection. If you would like to examine the namespace after
- the test completes, then use `clear_globs=False`.
-
- `compileflags` gives the set of flags that should be used by
- the Python compiler when running the examples. If not
- specified, then it will default to the set of future-import
- flags that apply to `globs`.
-
- The output of each example is checked using
- `DocTestRunner.check_output`, and the results are formatted by
- the `DocTestRunner.report_*` methods.
- """
- self.test = test
-
- if compileflags is None:
- compileflags = _extract_future_flags(test.globs)
-
- save_stdout = sys.stdout
- if out is None:
- out = save_stdout.write
- sys.stdout = self._fakeout
-
- # Patch pdb.set_trace to restore sys.stdout during interactive
- # debugging (so it's not still redirected to self._fakeout).
- # Note that the interactive output will go to *our*
- # save_stdout, even if that's not the real sys.stdout; this
- # allows us to write test cases for the set_trace behavior.
- save_set_trace = pdb.set_trace
- self.debugger = _OutputRedirectingPdb(save_stdout)
- self.debugger.reset()
- pdb.set_trace = self.debugger.set_trace
-
- # Patch linecache.getlines, so we can see the example's source
- # when we're inside the debugger.
- self.save_linecache_getlines = linecache.getlines
- linecache.getlines = self.__patched_linecache_getlines
-
- try:
- return self.__run(test, compileflags, out)
- finally:
- sys.stdout = save_stdout
- pdb.set_trace = save_set_trace
- linecache.getlines = self.save_linecache_getlines
- if clear_globs:
- test.globs.clear()
-
- #/////////////////////////////////////////////////////////////////
- # Summarization
- #/////////////////////////////////////////////////////////////////
- def summarize(self, verbose=None):
- """
- Print a summary of all the test cases that have been run by
- this DocTestRunner, and return a tuple `(f, t)`, where `f` is
- the total number of failed examples, and `t` is the total
- number of tried examples.
-
- The optional `verbose` argument controls how detailed the
- summary is. If the verbosity is not specified, then the
- DocTestRunner's verbosity is used.
- """
- if verbose is None:
- verbose = self._verbose
- notests = []
- passed = []
- failed = []
- totalt = totalf = 0
- for x in self._name2ft.items():
- name, (f, t) = x
- assert f <= t
- totalt += t
- totalf += f
- if t == 0:
- notests.append(name)
- elif f == 0:
- passed.append( (name, t) )
- else:
- failed.append(x)
- if verbose:
- if notests:
- print len(notests), "items had no tests:"
- notests.sort()
- for thing in notests:
- print " ", thing
- if passed:
- print len(passed), "items passed all tests:"
- passed.sort()
- for thing, count in passed:
- print " %3d tests in %s" % (count, thing)
- if failed:
- print self.DIVIDER
- print len(failed), "items had failures:"
- failed.sort()
- for thing, (f, t) in failed:
- print " %3d of %3d in %s" % (f, t, thing)
- if verbose:
- print totalt, "tests in", len(self._name2ft), "items."
- print totalt - totalf, "passed and", totalf, "failed."
- if totalf:
- print "***Test Failed***", totalf, "failures."
- elif verbose:
- print "Test passed."
- return totalf, totalt
-
- #/////////////////////////////////////////////////////////////////
- # Backward compatibility cruft to maintain doctest.master.
- #/////////////////////////////////////////////////////////////////
- def merge(self, other):
- d = self._name2ft
- for name, (f, t) in other._name2ft.items():
- if name in d:
- print "*** DocTestRunner.merge: '" + name + "' in both" \
- " testers; summing outcomes."
- f2, t2 = d[name]
- f = f + f2
- t = t + t2
- d[name] = f, t
-
-class OutputChecker:
- """
- A class used to check the whether the actual output from a doctest
- example matches the expected output. `OutputChecker` defines two
- methods: `check_output`, which compares a given pair of outputs,
- and returns true if they match; and `output_difference`, which
- returns a string describing the differences between two outputs.
- """
- def check_output(self, want, got, optionflags):
- """
- Return True iff the actual output from an example (`got`)
- matches the expected output (`want`). These strings are
- always considered to match if they are identical; but
- depending on what option flags the test runner is using,
- several non-exact match types are also possible. See the
- documentation for `TestRunner` for more information about
- option flags.
- """
- # Handle the common case first, for efficiency:
- # if they're string-identical, always return true.
- if got == want:
- return True
-
- # The values True and False replaced 1 and 0 as the return
- # value for boolean comparisons in Python 2.3.
- if not (optionflags & DONT_ACCEPT_TRUE_FOR_1):
- if (got,want) == ("True\n", "1\n"):
- return True
- if (got,want) == ("False\n", "0\n"):
- return True
-
- # <BLANKLINE> can be used as a special sequence to signify a
- # blank line, unless the DONT_ACCEPT_BLANKLINE flag is used.
- if not (optionflags & DONT_ACCEPT_BLANKLINE):
- # Replace <BLANKLINE> in want with a blank line.
- want = re.sub('(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER),
- '', want)
- # If a line in got contains only spaces, then remove the
- # spaces.
- got = re.sub('(?m)^\s*?$', '', got)
- if got == want:
- return True
-
- # This flag causes doctest to ignore any differences in the
- # contents of whitespace strings. Note that this can be used
- # in conjunction with the ELLIPSIS flag.
- if optionflags & NORMALIZE_WHITESPACE:
- got = ' '.join(got.split())
- want = ' '.join(want.split())
- if got == want:
- return True
-
- # The ELLIPSIS flag says to let the sequence "..." in `want`
- # match any substring in `got`.
- if optionflags & ELLIPSIS:
- if _ellipsis_match(want, got):
- return True
-
- # We didn't find any match; return false.
- return False
-
- # Should we do a fancy diff?
- def _do_a_fancy_diff(self, want, got, optionflags):
- # Not unless they asked for a fancy diff.
- if not optionflags & (REPORT_UDIFF |
- REPORT_CDIFF |
- REPORT_NDIFF):
- return False
-
- # If expected output uses ellipsis, a meaningful fancy diff is
- # too hard ... or maybe not. In two real-life failures Tim saw,
- # a diff was a major help anyway, so this is commented out.
- # [todo] _ellipsis_match() knows which pieces do and don't match,
- # and could be the basis for a kick-ass diff in this case.
- ##if optionflags & ELLIPSIS and ELLIPSIS_MARKER in want:
- ## return False
-
- # ndiff does intraline difference marking, so can be useful even
- # for 1-line differences.
- if optionflags & REPORT_NDIFF:
- return True
-
- # The other diff types need at least a few lines to be helpful.
- return want.count('\n') > 2 and got.count('\n') > 2
-
- def output_difference(self, example, got, optionflags):
- """
- Return a string describing the differences between the
- expected output for a given example (`example`) and the actual
- output (`got`). `optionflags` is the set of option flags used
- to compare `want` and `got`.
- """
- want = example.want
- # If <BLANKLINE>s are being used, then replace blank lines
- # with <BLANKLINE> in the actual output string.
- if not (optionflags & DONT_ACCEPT_BLANKLINE):
- got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got)
-
- # Check if we should use diff.
- if self._do_a_fancy_diff(want, got, optionflags):
- # Split want & got into lines.
- want_lines = want.splitlines(True) # True == keep line ends
- got_lines = got.splitlines(True)
- # Use difflib to find their differences.
- if optionflags & REPORT_UDIFF:
- diff = difflib.unified_diff(want_lines, got_lines, n=2)
- diff = list(diff)[2:] # strip the diff header
- kind = 'unified diff with -expected +actual'
- elif optionflags & REPORT_CDIFF:
- diff = difflib.context_diff(want_lines, got_lines, n=2)
- diff = list(diff)[2:] # strip the diff header
- kind = 'context diff with expected followed by actual'
- elif optionflags & REPORT_NDIFF:
- engine = difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)
- diff = list(engine.compare(want_lines, got_lines))
- kind = 'ndiff with -expected +actual'
- else:
- assert 0, 'Bad diff option'
- # Remove trailing whitespace on diff output.
- diff = [line.rstrip() + '\n' for line in diff]
- return 'Differences (%s):\n' % kind + _indent(''.join(diff))
-
- # If we're not using diff, then simply list the expected
- # output followed by the actual output.
- if want and got:
- return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got))
- elif want:
- return 'Expected:\n%sGot nothing\n' % _indent(want)
- elif got:
- return 'Expected nothing\nGot:\n%s' % _indent(got)
- else:
- return 'Expected nothing\nGot nothing\n'
-
-class DocTestFailure(Exception):
- """A DocTest example has failed in debugging mode.
-
- The exception instance has variables:
-
- - test: the DocTest object being run
-
- - excample: the Example object that failed
-
- - got: the actual output
- """
- def __init__(self, test, example, got):
- self.test = test
- self.example = example
- self.got = got
-
- def __str__(self):
- return str(self.test)
-
-class UnexpectedException(Exception):
- """A DocTest example has encountered an unexpected exception
-
- The exception instance has variables:
-
- - test: the DocTest object being run
-
- - excample: the Example object that failed
-
- - exc_info: the exception info
- """
- def __init__(self, test, example, exc_info):
- self.test = test
- self.example = example
- self.exc_info = exc_info
-
- def __str__(self):
- return str(self.test)
-
-class DebugRunner(DocTestRunner):
- r"""Run doc tests but raise an exception as soon as there is a failure.
-
- If an unexpected exception occurs, an UnexpectedException is raised.
- It contains the test, the example, and the original exception:
-
- >>> runner = DebugRunner(verbose=False)
- >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
- ... {}, 'foo', 'foo.py', 0)
- >>> try:
- ... runner.run(test)
- ... except UnexpectedException, failure:
- ... pass
-
- >>> failure.test is test
- True
-
- >>> failure.example.want
- '42\n'
-
- >>> exc_info = failure.exc_info
- >>> raise exc_info[0], exc_info[1], exc_info[2]
- Traceback (most recent call last):
- ...
- KeyError
-
- We wrap the original exception to give the calling application
- access to the test and example information.
-
- If the output doesn't match, then a DocTestFailure is raised:
-
- >>> test = DocTestParser().get_doctest('''
- ... >>> x = 1
- ... >>> x
- ... 2
- ... ''', {}, 'foo', 'foo.py', 0)
-
- >>> try:
- ... runner.run(test)
- ... except DocTestFailure, failure:
- ... pass
-
- DocTestFailure objects provide access to the test:
-
- >>> failure.test is test
- True
-
- As well as to the example:
-
- >>> failure.example.want
- '2\n'
-
- and the actual output:
-
- >>> failure.got
- '1\n'
-
- If a failure or error occurs, the globals are left intact:
-
- >>> del test.globs['__builtins__']
- >>> test.globs
- {'x': 1}
-
- >>> test = DocTestParser().get_doctest('''
- ... >>> x = 2
- ... >>> raise KeyError
- ... ''', {}, 'foo', 'foo.py', 0)
-
- >>> runner.run(test)
- Traceback (most recent call last):
- ...
- UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>
-
- >>> del test.globs['__builtins__']
- >>> test.globs
- {'x': 2}
-
- But the globals are cleared if there is no error:
-
- >>> test = DocTestParser().get_doctest('''
- ... >>> x = 2
- ... ''', {}, 'foo', 'foo.py', 0)
-
- >>> runner.run(test)
- (0, 1)
-
- >>> test.globs
- {}
-
- """
-
- def run(self, test, compileflags=None, out=None, clear_globs=True):
- r = DocTestRunner.run(self, test, compileflags, out, False)
- if clear_globs:
- test.globs.clear()
- return r
-
- def report_unexpected_exception(self, out, test, example, exc_info):
- raise UnexpectedException(test, example, exc_info)
-
- def report_failure(self, out, test, example, got):
- raise DocTestFailure(test, example, got)
-
-######################################################################
-## 6. Test Functions
-######################################################################
-# These should be backwards compatible.
-
-# For backward compatibility, a global instance of a DocTestRunner
-# class, updated by testmod.
-master = None
-
-def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
- report=True, optionflags=0, extraglobs=None,
- raise_on_error=False, exclude_empty=False):
- """m=None, name=None, globs=None, verbose=None, isprivate=None,
- report=True, optionflags=0, extraglobs=None, raise_on_error=False,
- exclude_empty=False
-
- Test examples in docstrings in functions and classes reachable
- from module m (or the current module if m is not supplied), starting
- with m.__doc__. Unless isprivate is specified, private names
- are not skipped.
-
- Also test examples reachable from dict m.__test__ if it exists and is
- not None. m.__test__ maps names to functions, classes and strings;
- function and class docstrings are tested even if the name is private;
- strings are tested directly, as if they were docstrings.
-
- Return (#failures, #tests).
-
- See doctest.__doc__ for an overview.
-
- Optional keyword arg "name" gives the name of the module; by default
- use m.__name__.
-
- Optional keyword arg "globs" gives a dict to be used as the globals
- when executing examples; by default, use m.__dict__. A copy of this
- dict is actually used for each docstring, so that each docstring's
- examples start with a clean slate.
-
- Optional keyword arg "extraglobs" gives a dictionary that should be
- merged into the globals that are used to execute examples. By
- default, no extra globals are used. This is new in 2.4.
-
- Optional keyword arg "verbose" prints lots of stuff if true, prints
- only failures if false; by default, it's true iff "-v" is in sys.argv.
-
- Optional keyword arg "report" prints a summary at the end when true,
- else prints nothing at the end. In verbose mode, the summary is
- detailed, else very brief (in fact, empty if all tests passed).
-
- Optional keyword arg "optionflags" or's together module constants,
- and defaults to 0. This is new in 2.3. Possible values (see the
- docs for details):
-
- DONT_ACCEPT_TRUE_FOR_1
- DONT_ACCEPT_BLANKLINE
- NORMALIZE_WHITESPACE
- ELLIPSIS
- IGNORE_EXCEPTION_DETAIL
- REPORT_UDIFF
- REPORT_CDIFF
- REPORT_NDIFF
- REPORT_ONLY_FIRST_FAILURE
-
- Optional keyword arg "raise_on_error" raises an exception on the
- first unexpected exception or failure. This allows failures to be
- post-mortem debugged.
-
- Deprecated in Python 2.4:
- Optional keyword arg "isprivate" specifies a function used to
- determine whether a name is private. The default function is
- treat all functions as public. Optionally, "isprivate" can be
- set to doctest.is_private to skip over functions marked as private
- using the underscore naming convention; see its docs for details.
-
- Advanced tomfoolery: testmod runs methods of a local instance of
- class doctest.Tester, then merges the results into (or creates)
- global Tester instance doctest.master. Methods of doctest.master
- can be called directly too, if you want to do something unusual.
- Passing report=0 to testmod is especially useful then, to delay
- displaying a summary. Invoke doctest.master.summarize(verbose)
- when you're done fiddling.
- """
- global master
-
- if isprivate is not None:
- warnings.warn("the isprivate argument is deprecated; "
- "examine DocTestFinder.find() lists instead",
- DeprecationWarning)
-
- # If no module was given, then use __main__.
- if m is None:
- # DWA - m will still be None if this wasn't invoked from the command
- # line, in which case the following TypeError is about as good an error
- # as we should expect
- m = sys.modules.get('__main__')
-
- # Check that we were actually given a module.
- if not inspect.ismodule(m):
- raise TypeError("testmod: module required; %r" % (m,))
-
- # If no name was given, then use the module's name.
- if name is None:
- name = m.__name__
-
- # Find, parse, and run all tests in the given module.
- finder = DocTestFinder(_namefilter=isprivate, exclude_empty=exclude_empty)
-
- if raise_on_error:
- runner = DebugRunner(verbose=verbose, optionflags=optionflags)
- else:
- runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
-
- for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
- runner.run(test)
-
- if report:
- runner.summarize()
-
- if master is None:
- master = runner
- else:
- master.merge(runner)
-
- return runner.failures, runner.tries
-
-def testfile(filename, module_relative=True, name=None, package=None,
- globs=None, verbose=None, report=True, optionflags=0,
- extraglobs=None, raise_on_error=False, parser=DocTestParser()):
- """
- Test examples in the given file. Return (#failures, #tests).
-
- Optional keyword arg "module_relative" specifies how filenames
- should be interpreted:
-
- - If "module_relative" is True (the default), then "filename"
- specifies a module-relative path. By default, this path is
- relative to the calling module's directory; but if the
- "package" argument is specified, then it is relative to that
- package. To ensure os-independence, "filename" should use
- "/" characters to separate path segments, and should not
- be an absolute path (i.e., it may not begin with "/").
-
- - If "module_relative" is False, then "filename" specifies an
- os-specific path. The path may be absolute or relative (to
- the current working directory).
-
- Optional keyword arg "name" gives the name of the test; by default
- use the file's basename.
-
- Optional keyword argument "package" is a Python package or the
- name of a Python package whose directory should be used as the
- base directory for a module relative filename. If no package is
- specified, then the calling module's directory is used as the base
- directory for module relative filenames. It is an error to
- specify "package" if "module_relative" is False.
-
- Optional keyword arg "globs" gives a dict to be used as the globals
- when executing examples; by default, use {}. A copy of this dict
- is actually used for each docstring, so that each docstring's
- examples start with a clean slate.
-
- Optional keyword arg "extraglobs" gives a dictionary that should be
- merged into the globals that are used to execute examples. By
- default, no extra globals are used.
-
- Optional keyword arg "verbose" prints lots of stuff if true, prints
- only failures if false; by default, it's true iff "-v" is in sys.argv.
-
- Optional keyword arg "report" prints a summary at the end when true,
- else prints nothing at the end. In verbose mode, the summary is
- detailed, else very brief (in fact, empty if all tests passed).
-
- Optional keyword arg "optionflags" or's together module constants,
- and defaults to 0. Possible values (see the docs for details):
-
- DONT_ACCEPT_TRUE_FOR_1
- DONT_ACCEPT_BLANKLINE
- NORMALIZE_WHITESPACE
- ELLIPSIS
- IGNORE_EXCEPTION_DETAIL
- REPORT_UDIFF
- REPORT_CDIFF
- REPORT_NDIFF
- REPORT_ONLY_FIRST_FAILURE
-
- Optional keyword arg "raise_on_error" raises an exception on the
- first unexpected exception or failure. This allows failures to be
- post-mortem debugged.
-
- Optional keyword arg "parser" specifies a DocTestParser (or
- subclass) that should be used to extract tests from the files.
-
- Advanced tomfoolery: testmod runs methods of a local instance of
- class doctest.Tester, then merges the results into (or creates)
- global Tester instance doctest.master. Methods of doctest.master
- can be called directly too, if you want to do something unusual.
- Passing report=0 to testmod is especially useful then, to delay
- displaying a summary. Invoke doctest.master.summarize(verbose)
- when you're done fiddling.
- """
- global master
-
- if package and not module_relative:
- raise ValueError("Package may only be specified for module-"
- "relative paths.")
-
- # Relativize the path
- if module_relative:
- package = _normalize_module(package)
- filename = _module_relative_path(package, filename)
-
- # If no name was given, then use the file's name.
- if name is None:
- name = os.path.basename(filename)
-
- # Assemble the globals.
- if globs is None:
- globs = {}
- else:
- globs = globs.copy()
- if extraglobs is not None:
- globs.update(extraglobs)
-
- if raise_on_error:
- runner = DebugRunner(verbose=verbose, optionflags=optionflags)
- else:
- runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
-
- # Read the file, convert it to a test, and run it.
- s = open(filename).read()
- test = parser.get_doctest(s, globs, name, filename, 0)
- runner.run(test)
-
- if report:
- runner.summarize()
-
- if master is None:
- master = runner
- else:
- master.merge(runner)
-
- return runner.failures, runner.tries
-
-def run_docstring_examples(f, globs, verbose=False, name="NoName",
- compileflags=None, optionflags=0):
- """
- Test examples in the given object's docstring (`f`), using `globs`
- as globals. Optional argument `name` is used in failure messages.
- If the optional argument `verbose` is true, then generate output
- even if there are no failures.
-
- `compileflags` gives the set of flags that should be used by the
- Python compiler when running the examples. If not specified, then
- it will default to the set of future-import flags that apply to
- `globs`.
-
- Optional keyword arg `optionflags` specifies options for the
- testing and output. See the documentation for `testmod` for more
- information.
- """
- # Find, parse, and run all tests in the given module.
- finder = DocTestFinder(verbose=verbose, recurse=False)
- runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
- for test in finder.find(f, name, globs=globs):
- runner.run(test, compileflags=compileflags)
-
-######################################################################
-## 7. Tester
-######################################################################
-# This is provided only for backwards compatibility. It's not
-# actually used in any way.
-
-class Tester:
- def __init__(self, mod=None, globs=None, verbose=None,
- isprivate=None, optionflags=0):
-
- warnings.warn("class Tester is deprecated; "
- "use class doctest.DocTestRunner instead",
- DeprecationWarning, stacklevel=2)
- if mod is None and globs is None:
- raise TypeError("Tester.__init__: must specify mod or globs")
- if mod is not None and not inspect.ismodule(mod):
- raise TypeError("Tester.__init__: mod must be a module; %r" %
- (mod,))
- if globs is None:
- globs = mod.__dict__
- self.globs = globs
-
- self.verbose = verbose
- self.isprivate = isprivate
- self.optionflags = optionflags
- self.testfinder = DocTestFinder(_namefilter=isprivate)
- self.testrunner = DocTestRunner(verbose=verbose,
- optionflags=optionflags)
-
- def runstring(self, s, name):
- test = DocTestParser().get_doctest(s, self.globs, name, None, None)
- if self.verbose:
- print "Running string", name
- (f,t) = self.testrunner.run(test)
- if self.verbose:
- print f, "of", t, "examples failed in string", name
- return (f,t)
-
- def rundoc(self, object, name=None, module=None):
- f = t = 0
- tests = self.testfinder.find(object, name, module=module,
- globs=self.globs)
- for test in tests:
- (f2, t2) = self.testrunner.run(test)
- (f,t) = (f+f2, t+t2)
- return (f,t)
-
- def rundict(self, d, name, module=None):
- import new
- m = new.module(name)
- m.__dict__.update(d)
- if module is None:
- module = False
- return self.rundoc(m, name, module)
-
- def run__test__(self, d, name):
- import new
- m = new.module(name)
- m.__test__ = d
- return self.rundoc(m, name)
-
- def summarize(self, verbose=None):
- return self.testrunner.summarize(verbose)
-
- def merge(self, other):
- self.testrunner.merge(other.testrunner)
-
-######################################################################
-## 8. Unittest Support
-######################################################################
-
-_unittest_reportflags = 0
-
-def set_unittest_reportflags(flags):
- """Sets the unittest option flags.
-
- The old flag is returned so that a runner could restore the old
- value if it wished to:
-
- >>> old = _unittest_reportflags
- >>> set_unittest_reportflags(REPORT_NDIFF |
- ... REPORT_ONLY_FIRST_FAILURE) == old
- True
-
- >>> import doctest
- >>> doctest._unittest_reportflags == (REPORT_NDIFF |
- ... REPORT_ONLY_FIRST_FAILURE)
- True
-
- Only reporting flags can be set:
-
- >>> set_unittest_reportflags(ELLIPSIS)
- Traceback (most recent call last):
- ...
- ValueError: ('Only reporting flags allowed', 8)
-
- >>> set_unittest_reportflags(old) == (REPORT_NDIFF |
- ... REPORT_ONLY_FIRST_FAILURE)
- True
- """
- global _unittest_reportflags
-
- if (flags & REPORTING_FLAGS) != flags:
- raise ValueError("Only reporting flags allowed", flags)
- old = _unittest_reportflags
- _unittest_reportflags = flags
- return old
-
-
-class DocTestCase(unittest.TestCase):
-
- def __init__(self, test, optionflags=0, setUp=None, tearDown=None,
- checker=None, runner=DocTestRunner):
-
- unittest.TestCase.__init__(self)
- self._dt_optionflags = optionflags
- self._dt_checker = checker
- self._dt_test = test
- self._dt_setUp = setUp
- self._dt_tearDown = tearDown
- self._dt_runner = runner
-
- def setUp(self):
- test = self._dt_test
-
- if self._dt_setUp is not None:
- self._dt_setUp(test)
-
- def tearDown(self):
- test = self._dt_test
-
- if self._dt_tearDown is not None:
- self._dt_tearDown(test)
-
- test.globs.clear()
-
- def runTest(self):
- test = self._dt_test
- old = sys.stdout
- new = StringIO()
- optionflags = self._dt_optionflags
-
- if not (optionflags & REPORTING_FLAGS):
- # The option flags don't include any reporting flags,
- # so add the default reporting flags
- optionflags |= _unittest_reportflags
-
- runner = self._dt_runner(optionflags=optionflags,
- checker=self._dt_checker, verbose=False)
-
- try:
- runner.DIVIDER = "-"*70
- failures, tries = runner.run(
- test, out=new.write, clear_globs=False)
- finally:
- sys.stdout = old
-
- if failures:
- raise self.failureException(self.format_failure(new.getvalue()))
-
- def format_failure(self, err):
- test = self._dt_test
- if test.lineno is None:
- lineno = 'unknown line number'
- else:
- lineno = '%s' % test.lineno
- lname = '.'.join(test.name.split('.')[-1:])
- return ('Failed doctest test for %s\n'
- ' File "%s", line %s, in %s\n\n%s'
- % (test.name, test.filename, lineno, lname, err)
- )
-
- def debug(self):
- r"""Run the test case without results and without catching exceptions
-
- The unit test framework includes a debug method on test cases
- and test suites to support post-mortem debugging. The test code
- is run in such a way that errors are not caught. This way a
- caller can catch the errors and initiate post-mortem debugging.
-
- The DocTestCase provides a debug method that raises
- UnexpectedException errors if there is an unexepcted
- exception:
-
- >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
- ... {}, 'foo', 'foo.py', 0)
- >>> case = DocTestCase(test)
- >>> try:
- ... case.debug()
- ... except UnexpectedException, failure:
- ... pass
-
- The UnexpectedException contains the test, the example, and
- the original exception:
-
- >>> failure.test is test
- True
-
- >>> failure.example.want
- '42\n'
-
- >>> exc_info = failure.exc_info
- >>> raise exc_info[0], exc_info[1], exc_info[2]
- Traceback (most recent call last):
- ...
- KeyError
-
- If the output doesn't match, then a DocTestFailure is raised:
-
- >>> test = DocTestParser().get_doctest('''
- ... >>> x = 1
- ... >>> x
- ... 2
- ... ''', {}, 'foo', 'foo.py', 0)
- >>> case = DocTestCase(test)
-
- >>> try:
- ... case.debug()
- ... except DocTestFailure, failure:
- ... pass
-
- DocTestFailure objects provide access to the test:
-
- >>> failure.test is test
- True
-
- As well as to the example:
-
- >>> failure.example.want
- '2\n'
-
- and the actual output:
-
- >>> failure.got
- '1\n'
-
- """
-
- self.setUp()
- runner = DebugRunner(optionflags=self._dt_optionflags,
- checker=self._dt_checker, verbose=False)
- runner.run(self._dt_test)
- self.tearDown()
-
- def id(self):
- return self._dt_test.name
-
- def __repr__(self):
- name = self._dt_test.name.split('.')
- return "%s (%s)" % (name[-1], '.'.join(name[:-1]))
-
- __str__ = __repr__
-
- def shortDescription(self):
- return "Doctest: " + self._dt_test.name
-
-def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None,
- test_class=DocTestCase, **options):
- """
- Convert doctest tests for a module to a unittest test suite.
-
- This converts each documentation string in a module that
- contains doctest tests to a unittest test case. If any of the
- tests in a doc string fail, then the test case fails. An exception
- is raised showing the name of the file containing the test and a
- (sometimes approximate) line number.
-
- The `module` argument provides the module to be tested. The argument
- can be either a module or a module name.
-
- If no argument is given, the calling module is used.
-
- A number of options may be provided as keyword arguments:
-
- setUp
- A set-up function. This is called before running the
- tests in each file. The setUp function will be passed a DocTest
- object. The setUp function can access the test globals as the
- globs attribute of the test passed.
-
- tearDown
- A tear-down function. This is called after running the
- tests in each file. The tearDown function will be passed a DocTest
- object. The tearDown function can access the test globals as the
- globs attribute of the test passed.
-
- globs
- A dictionary containing initial global variables for the tests.
-
- optionflags
- A set of doctest option flags expressed as an integer.
- """
-
- if test_finder is None:
- test_finder = DocTestFinder()
-
- module = _normalize_module(module)
- tests = test_finder.find(module, globs=globs, extraglobs=extraglobs)
- if globs is None:
- globs = module.__dict__
- if not tests:
- # Why do we want to do this? Because it reveals a bug that might
- # otherwise be hidden.
- raise ValueError(module, "has no tests")
-
- tests.sort()
- suite = unittest.TestSuite()
- for test in tests:
- if len(test.examples) == 0:
- continue
- if not test.filename:
- filename = module.__file__
- if filename[-4:] in (".pyc", ".pyo"):
- filename = filename[:-1]
- test.filename = filename
- suite.addTest(test_class(test, **options))
-
- return suite
-
-class DocFileCase(DocTestCase):
-
- def id(self):
- return '_'.join(self._dt_test.name.split('.'))
-
- def __repr__(self):
- return self._dt_test.filename
- __str__ = __repr__
-
- def format_failure(self, err):
- return ('Failed doctest test for %s\n File "%s", line 0\n\n%s'
- % (self._dt_test.name, self._dt_test.filename, err)
- )
-
-def DocFileTest(path, module_relative=True, package=None,
- globs=None, parser=DocTestParser(), **options):
- if globs is None:
- globs = {}
-
- if package and not module_relative:
- raise ValueError("Package may only be specified for module-"
- "relative paths.")
-
- # Relativize the path.
- if module_relative:
- package = _normalize_module(package)
- path = _module_relative_path(package, path)
-
- # Find the file and read it.
- name = os.path.basename(path)
- doc = open(path).read()
-
- # Convert it to a test, and wrap it in a DocFileCase.
- test = parser.get_doctest(doc, globs, name, path, 0)
- return DocFileCase(test, **options)
-
-def DocFileSuite(*paths, **kw):
- """A unittest suite for one or more doctest files.
-
- The path to each doctest file is given as a string; the
- interpretation of that string depends on the keyword argument
- "module_relative".
-
- A number of options may be provided as keyword arguments:
-
- module_relative
- If "module_relative" is True, then the given file paths are
- interpreted as os-independent module-relative paths. By
- default, these paths are relative to the calling module's
- directory; but if the "package" argument is specified, then
- they are relative to that package. To ensure os-independence,
- "filename" should use "/" characters to separate path
- segments, and may not be an absolute path (i.e., it may not
- begin with "/").
-
- If "module_relative" is False, then the given file paths are
- interpreted as os-specific paths. These paths may be absolute
- or relative (to the current working directory).
-
- package
- A Python package or the name of a Python package whose directory
- should be used as the base directory for module relative paths.
- If "package" is not specified, then the calling module's
- directory is used as the base directory for module relative
- filenames. It is an error to specify "package" if
- "module_relative" is False.
-
- setUp
- A set-up function. This is called before running the
- tests in each file. The setUp function will be passed a DocTest
- object. The setUp function can access the test globals as the
- globs attribute of the test passed.
-
- tearDown
- A tear-down function. This is called after running the
- tests in each file. The tearDown function will be passed a DocTest
- object. The tearDown function can access the test globals as the
- globs attribute of the test passed.
-
- globs
- A dictionary containing initial global variables for the tests.
-
- optionflags
- A set of doctest option flags expressed as an integer.
-
- parser
- A DocTestParser (or subclass) that should be used to extract
- tests from the files.
- """
- suite = unittest.TestSuite()
-
- # We do this here so that _normalize_module is called at the right
- # level. If it were called in DocFileTest, then this function
- # would be the caller and we might guess the package incorrectly.
- if kw.get('module_relative', True):
- kw['package'] = _normalize_module(kw.get('package'))
-
- for path in paths:
- suite.addTest(DocFileTest(path, **kw))
-
- return suite
-
-######################################################################
-## 9. Debugging Support
-######################################################################
-
-def script_from_examples(s):
- r"""Extract script from text with examples.
-
- Converts text with examples to a Python script. Example input is
- converted to regular code. Example output and all other words
- are converted to comments:
-
- >>> text = '''
- ... Here are examples of simple math.
- ...
- ... Python has super accurate integer addition
- ...
- ... >>> 2 + 2
- ... 5
- ...
- ... And very friendly error messages:
- ...
- ... >>> 1/0
- ... To Infinity
- ... And
- ... Beyond
- ...
- ... You can use logic if you want:
- ...
- ... >>> if 0:
- ... ... blah
- ... ... blah
- ... ...
- ...
- ... Ho hum
- ... '''
-
- >>> print script_from_examples(text)
- # Here are examples of simple math.
- #
- # Python has super accurate integer addition
- #
- 2 + 2
- # Expected:
- ## 5
- #
- # And very friendly error messages:
- #
- 1/0
- # Expected:
- ## To Infinity
- ## And
- ## Beyond
- #
- # You can use logic if you want:
- #
- if 0:
- blah
- blah
- #
- # Ho hum
- """
- output = []
- for piece in DocTestParser().parse(s):
- if isinstance(piece, Example):
- # Add the example's source code (strip trailing NL)
- output.append(piece.source[:-1])
- # Add the expected output:
- want = piece.want
- if want:
- output.append('# Expected:')
- output += ['## '+l for l in want.split('\n')[:-1]]
- else:
- # Add non-example text.
- output += [_comment_line(l)
- for l in piece.split('\n')[:-1]]
-
- # Trim junk on both ends.
- while output and output[-1] == '#':
- output.pop()
- while output and output[0] == '#':
- output.pop(0)
- # Combine the output, and return it.
- return '\n'.join(output)
-
-def testsource(module, name):
- """Extract the test sources from a doctest docstring as a script.
-
- Provide the module (or dotted name of the module) containing the
- test to be debugged and the name (within the module) of the object
- with the doc string with tests to be debugged.
- """
- module = _normalize_module(module)
- tests = DocTestFinder().find(module)
- test = [t for t in tests if t.name == name]
- if not test:
- raise ValueError(name, "not found in tests")
- test = test[0]
- testsrc = script_from_examples(test.docstring)
- return testsrc
-
-def debug_src(src, pm=False, globs=None):
- """Debug a single doctest docstring, in argument `src`'"""
- testsrc = script_from_examples(src)
- debug_script(testsrc, pm, globs)
-
-def debug_script(src, pm=False, globs=None):
- "Debug a test script. `src` is the script, as a string."
- import pdb
-
- # Note that tempfile.NameTemporaryFile() cannot be used. As the
- # docs say, a file so created cannot be opened by name a second time
- # on modern Windows boxes, and execfile() needs to open it.
- srcfilename = tempfile.mktemp(".py", "doctestdebug")
- f = open(srcfilename, 'w')
- f.write(src)
- f.close()
-
- try:
- if globs:
- globs = globs.copy()
- else:
- globs = {}
-
- if pm:
- try:
- execfile(srcfilename, globs, globs)
- except:
- print sys.exc_info()[1]
- pdb.post_mortem(sys.exc_info()[2])
- else:
- # Note that %r is vital here. '%s' instead can, e.g., cause
- # backslashes to get treated as metacharacters on Windows.
- pdb.run("execfile(%r)" % srcfilename, globs, globs)
-
- finally:
- os.remove(srcfilename)
-
-def debug(module, name, pm=False):
- """Debug a single doctest docstring.
-
- Provide the module (or dotted name of the module) containing the
- test to be debugged and the name (within the module) of the object
- with the docstring with tests to be debugged.
- """
- module = _normalize_module(module)
- testsrc = testsource(module, name)
- debug_script(testsrc, pm, module.__dict__)
-
-######################################################################
-## 10. Example Usage
-######################################################################
-class _TestClass:
- """
- A pointless class, for sanity-checking of docstring testing.
-
- Methods:
- square()
- get()
-
- >>> _TestClass(13).get() + _TestClass(-12).get()
- 1
- >>> hex(_TestClass(13).square().get())
- '0xa9'
- """
-
- def __init__(self, val):
- """val -> _TestClass object with associated value val.
-
- >>> t = _TestClass(123)
- >>> print t.get()
- 123
- """
-
- self.val = val
-
- def square(self):
- """square() -> square TestClass's associated value
-
- >>> _TestClass(13).square().get()
- 169
- """
-
- self.val = self.val ** 2
- return self
-
- def get(self):
- """get() -> return TestClass's associated value.
-
- >>> x = _TestClass(-42)
- >>> print x.get()
- -42
- """
-
- return self.val
-
-__test__ = {"_TestClass": _TestClass,
- "string": r"""
- Example of a string object, searched as-is.
- >>> x = 1; y = 2
- >>> x + y, x * y
- (3, 2)
- """,
-
- "bool-int equivalence": r"""
- In 2.2, boolean expressions displayed
- 0 or 1. By default, we still accept
- them. This can be disabled by passing
- DONT_ACCEPT_TRUE_FOR_1 to the new
- optionflags argument.
- >>> 4 == 4
- 1
- >>> 4 == 4
- True
- >>> 4 > 4
- 0
- >>> 4 > 4
- False
- """,
-
- "blank lines": r"""
- Blank lines can be marked with <BLANKLINE>:
- >>> print 'foo\n\nbar\n'
- foo
- <BLANKLINE>
- bar
- <BLANKLINE>
- """,
-
- "ellipsis": r"""
- If the ellipsis flag is used, then '...' can be used to
- elide substrings in the desired output:
- >>> print range(1000) #doctest: +ELLIPSIS
- [0, 1, 2, ..., 999]
- """,
-
- "whitespace normalization": r"""
- If the whitespace normalization flag is used, then
- differences in whitespace are ignored.
- >>> print range(30) #doctest: +NORMALIZE_WHITESPACE
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29]
- """,
- }
-
-def _test():
- r = unittest.TextTestRunner()
- r.run(DocTestSuite())
-
-if __name__ == "__main__":
- _test()
diff --git a/parts/django/django/test/client.py b/parts/django/django/test/client.py
deleted file mode 100644
index 08e3ff6..0000000
--- a/parts/django/django/test/client.py
+++ /dev/null
@@ -1,499 +0,0 @@
-import urllib
-from urlparse import urlparse, urlunparse, urlsplit
-import sys
-import os
-import re
-import mimetypes
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.conf import settings
-from django.contrib.auth import authenticate, login
-from django.core.handlers.base import BaseHandler
-from django.core.handlers.wsgi import WSGIRequest
-from django.core.signals import got_request_exception
-from django.http import SimpleCookie, HttpRequest, QueryDict
-from django.template import TemplateDoesNotExist
-from django.test import signals
-from django.utils.functional import curry
-from django.utils.encoding import smart_str
-from django.utils.http import urlencode
-from django.utils.importlib import import_module
-from django.utils.itercompat import is_iterable
-from django.db import transaction, close_connection
-from django.test.utils import ContextList
-
-BOUNDARY = 'BoUnDaRyStRiNg'
-MULTIPART_CONTENT = 'multipart/form-data; boundary=%s' % BOUNDARY
-CONTENT_TYPE_RE = re.compile('.*; charset=([\w\d-]+);?')
-
-class FakePayload(object):
- """
- A wrapper around StringIO that restricts what can be read since data from
- the network can't be seeked and cannot be read outside of its content
- length. This makes sure that views can't do anything under the test client
- that wouldn't work in Real Life.
- """
- def __init__(self, content):
- self.__content = StringIO(content)
- self.__len = len(content)
-
- def read(self, num_bytes=None):
- if num_bytes is None:
- num_bytes = self.__len or 1
- assert self.__len >= num_bytes, "Cannot read more than the available bytes from the HTTP incoming data."
- content = self.__content.read(num_bytes)
- self.__len -= num_bytes
- return content
-
-
-class ClientHandler(BaseHandler):
- """
- A HTTP Handler that can be used for testing purposes.
- Uses the WSGI interface to compose requests, but returns
- the raw HttpResponse object
- """
- def __init__(self, enforce_csrf_checks=True, *args, **kwargs):
- self.enforce_csrf_checks = enforce_csrf_checks
- super(ClientHandler, self).__init__(*args, **kwargs)
-
- def __call__(self, environ):
- from django.conf import settings
- from django.core import signals
-
- # Set up middleware if needed. We couldn't do this earlier, because
- # settings weren't available.
- if self._request_middleware is None:
- self.load_middleware()
-
- signals.request_started.send(sender=self.__class__)
- try:
- request = WSGIRequest(environ)
- # sneaky little hack so that we can easily get round
- # CsrfViewMiddleware. This makes life easier, and is probably
- # required for backwards compatibility with external tests against
- # admin views.
- request._dont_enforce_csrf_checks = not self.enforce_csrf_checks
- response = self.get_response(request)
-
- # Apply response middleware.
- for middleware_method in self._response_middleware:
- response = middleware_method(request, response)
- response = self.apply_response_fixes(request, response)
- finally:
- signals.request_finished.disconnect(close_connection)
- signals.request_finished.send(sender=self.__class__)
- signals.request_finished.connect(close_connection)
-
- return response
-
-def store_rendered_templates(store, signal, sender, template, context, **kwargs):
- """
- Stores templates and contexts that are rendered.
- """
- store.setdefault('template', []).append(template)
- store.setdefault('context', ContextList()).append(context)
-
-def encode_multipart(boundary, data):
- """
- Encodes multipart POST data from a dictionary of form values.
-
- The key will be used as the form data name; the value will be transmitted
- as content. If the value is a file, the contents of the file will be sent
- as an application/octet-stream; otherwise, str(value) will be sent.
- """
- lines = []
- to_str = lambda s: smart_str(s, settings.DEFAULT_CHARSET)
-
- # Not by any means perfect, but good enough for our purposes.
- is_file = lambda thing: hasattr(thing, "read") and callable(thing.read)
-
- # Each bit of the multipart form data could be either a form value or a
- # file, or a *list* of form values and/or files. Remember that HTTP field
- # names can be duplicated!
- for (key, value) in data.items():
- if is_file(value):
- lines.extend(encode_file(boundary, key, value))
- elif not isinstance(value, basestring) and is_iterable(value):
- for item in value:
- if is_file(item):
- lines.extend(encode_file(boundary, key, item))
- else:
- lines.extend([
- '--' + boundary,
- 'Content-Disposition: form-data; name="%s"' % to_str(key),
- '',
- to_str(item)
- ])
- else:
- lines.extend([
- '--' + boundary,
- 'Content-Disposition: form-data; name="%s"' % to_str(key),
- '',
- to_str(value)
- ])
-
- lines.extend([
- '--' + boundary + '--',
- '',
- ])
- return '\r\n'.join(lines)
-
-def encode_file(boundary, key, file):
- to_str = lambda s: smart_str(s, settings.DEFAULT_CHARSET)
- content_type = mimetypes.guess_type(file.name)[0]
- if content_type is None:
- content_type = 'application/octet-stream'
- return [
- '--' + boundary,
- 'Content-Disposition: form-data; name="%s"; filename="%s"' \
- % (to_str(key), to_str(os.path.basename(file.name))),
- 'Content-Type: %s' % content_type,
- '',
- file.read()
- ]
-
-class Client(object):
- """
- A class that can act as a client for testing purposes.
-
- It allows the user to compose GET and POST requests, and
- obtain the response that the server gave to those requests.
- The server Response objects are annotated with the details
- of the contexts and templates that were rendered during the
- process of serving the request.
-
- Client objects are stateful - they will retain cookie (and
- thus session) details for the lifetime of the Client instance.
-
- This is not intended as a replacement for Twill/Selenium or
- the like - it is here to allow testing against the
- contexts and templates produced by a view, rather than the
- HTML rendered to the end-user.
- """
- def __init__(self, enforce_csrf_checks=False, **defaults):
- self.handler = ClientHandler(enforce_csrf_checks)
- self.defaults = defaults
- self.cookies = SimpleCookie()
- self.exc_info = None
- self.errors = StringIO()
-
- def store_exc_info(self, **kwargs):
- """
- Stores exceptions when they are generated by a view.
- """
- self.exc_info = sys.exc_info()
-
- def _session(self):
- """
- Obtains the current session variables.
- """
- if 'django.contrib.sessions' in settings.INSTALLED_APPS:
- engine = import_module(settings.SESSION_ENGINE)
- cookie = self.cookies.get(settings.SESSION_COOKIE_NAME, None)
- if cookie:
- return engine.SessionStore(cookie.value)
- return {}
- session = property(_session)
-
- def request(self, **request):
- """
- The master request method. Composes the environment dictionary
- and passes to the handler, returning the result of the handler.
- Assumes defaults for the query environment, which can be overridden
- using the arguments to the request.
- """
- environ = {
- 'HTTP_COOKIE': self.cookies.output(header='', sep='; '),
- 'PATH_INFO': '/',
- 'QUERY_STRING': '',
- 'REMOTE_ADDR': '127.0.0.1',
- 'REQUEST_METHOD': 'GET',
- 'SCRIPT_NAME': '',
- 'SERVER_NAME': 'testserver',
- 'SERVER_PORT': '80',
- 'SERVER_PROTOCOL': 'HTTP/1.1',
- 'wsgi.version': (1,0),
- 'wsgi.url_scheme': 'http',
- 'wsgi.errors': self.errors,
- 'wsgi.multiprocess': True,
- 'wsgi.multithread': False,
- 'wsgi.run_once': False,
- }
- environ.update(self.defaults)
- environ.update(request)
-
- # Curry a data dictionary into an instance of the template renderer
- # callback function.
- data = {}
- on_template_render = curry(store_rendered_templates, data)
- signals.template_rendered.connect(on_template_render, dispatch_uid="template-render")
- # Capture exceptions created by the handler.
- got_request_exception.connect(self.store_exc_info, dispatch_uid="request-exception")
- try:
-
- try:
- response = self.handler(environ)
- except TemplateDoesNotExist, e:
- # If the view raises an exception, Django will attempt to show
- # the 500.html template. If that template is not available,
- # we should ignore the error in favor of re-raising the
- # underlying exception that caused the 500 error. Any other
- # template found to be missing during view error handling
- # should be reported as-is.
- if e.args != ('500.html',):
- raise
-
- # Look for a signalled exception, clear the current context
- # exception data, then re-raise the signalled exception.
- # Also make sure that the signalled exception is cleared from
- # the local cache!
- if self.exc_info:
- exc_info = self.exc_info
- self.exc_info = None
- raise exc_info[1], None, exc_info[2]
-
- # Save the client and request that stimulated the response.
- response.client = self
- response.request = request
-
- # Add any rendered template detail to the response.
- # If there was only one template rendered (the most likely case),
- # flatten the list to a single element.
- for detail in ('template', 'context'):
- if data.get(detail):
- if len(data[detail]) == 1:
- setattr(response, detail, data[detail][0]);
- else:
- setattr(response, detail, data[detail])
- else:
- setattr(response, detail, None)
-
- # Update persistent cookie data.
- if response.cookies:
- self.cookies.update(response.cookies)
-
- return response
- finally:
- signals.template_rendered.disconnect(dispatch_uid="template-render")
- got_request_exception.disconnect(dispatch_uid="request-exception")
-
-
- def get(self, path, data={}, follow=False, **extra):
- """
- Requests a response from the server using GET.
- """
- parsed = urlparse(path)
- r = {
- 'CONTENT_TYPE': 'text/html; charset=utf-8',
- 'PATH_INFO': urllib.unquote(parsed[2]),
- 'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
- 'REQUEST_METHOD': 'GET',
- 'wsgi.input': FakePayload('')
- }
- r.update(extra)
-
- response = self.request(**r)
- if follow:
- response = self._handle_redirects(response, **extra)
- return response
-
- def post(self, path, data={}, content_type=MULTIPART_CONTENT,
- follow=False, **extra):
- """
- Requests a response from the server using POST.
- """
- if content_type is MULTIPART_CONTENT:
- post_data = encode_multipart(BOUNDARY, data)
- else:
- # Encode the content so that the byte representation is correct.
- match = CONTENT_TYPE_RE.match(content_type)
- if match:
- charset = match.group(1)
- else:
- charset = settings.DEFAULT_CHARSET
- post_data = smart_str(data, encoding=charset)
-
- parsed = urlparse(path)
- r = {
- 'CONTENT_LENGTH': len(post_data),
- 'CONTENT_TYPE': content_type,
- 'PATH_INFO': urllib.unquote(parsed[2]),
- 'QUERY_STRING': parsed[4],
- 'REQUEST_METHOD': 'POST',
- 'wsgi.input': FakePayload(post_data),
- }
- r.update(extra)
-
- response = self.request(**r)
- if follow:
- response = self._handle_redirects(response, **extra)
- return response
-
- def head(self, path, data={}, follow=False, **extra):
- """
- Request a response from the server using HEAD.
- """
- parsed = urlparse(path)
- r = {
- 'CONTENT_TYPE': 'text/html; charset=utf-8',
- 'PATH_INFO': urllib.unquote(parsed[2]),
- 'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
- 'REQUEST_METHOD': 'HEAD',
- 'wsgi.input': FakePayload('')
- }
- r.update(extra)
-
- response = self.request(**r)
- if follow:
- response = self._handle_redirects(response, **extra)
- return response
-
- def options(self, path, data={}, follow=False, **extra):
- """
- Request a response from the server using OPTIONS.
- """
- parsed = urlparse(path)
- r = {
- 'PATH_INFO': urllib.unquote(parsed[2]),
- 'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
- 'REQUEST_METHOD': 'OPTIONS',
- 'wsgi.input': FakePayload('')
- }
- r.update(extra)
-
- response = self.request(**r)
- if follow:
- response = self._handle_redirects(response, **extra)
- return response
-
- def put(self, path, data={}, content_type=MULTIPART_CONTENT,
- follow=False, **extra):
- """
- Send a resource to the server using PUT.
- """
- if content_type is MULTIPART_CONTENT:
- post_data = encode_multipart(BOUNDARY, data)
- else:
- post_data = data
-
- # Make `data` into a querystring only if it's not already a string. If
- # it is a string, we'll assume that the caller has already encoded it.
- query_string = None
- if not isinstance(data, basestring):
- query_string = urlencode(data, doseq=True)
-
- parsed = urlparse(path)
- r = {
- 'CONTENT_LENGTH': len(post_data),
- 'CONTENT_TYPE': content_type,
- 'PATH_INFO': urllib.unquote(parsed[2]),
- 'QUERY_STRING': query_string or parsed[4],
- 'REQUEST_METHOD': 'PUT',
- 'wsgi.input': FakePayload(post_data),
- }
- r.update(extra)
-
- response = self.request(**r)
- if follow:
- response = self._handle_redirects(response, **extra)
- return response
-
- def delete(self, path, data={}, follow=False, **extra):
- """
- Send a DELETE request to the server.
- """
- parsed = urlparse(path)
- r = {
- 'PATH_INFO': urllib.unquote(parsed[2]),
- 'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
- 'REQUEST_METHOD': 'DELETE',
- 'wsgi.input': FakePayload('')
- }
- r.update(extra)
-
- response = self.request(**r)
- if follow:
- response = self._handle_redirects(response, **extra)
- return response
-
- def login(self, **credentials):
- """
- Sets the Client to appear as if it has successfully logged into a site.
-
- Returns True if login is possible; False if the provided credentials
- are incorrect, or the user is inactive, or if the sessions framework is
- not available.
- """
- user = authenticate(**credentials)
- if user and user.is_active \
- and 'django.contrib.sessions' in settings.INSTALLED_APPS:
- engine = import_module(settings.SESSION_ENGINE)
-
- # Create a fake request to store login details.
- request = HttpRequest()
- if self.session:
- request.session = self.session
- else:
- request.session = engine.SessionStore()
- login(request, user)
-
- # Save the session values.
- request.session.save()
-
- # Set the cookie to represent the session.
- session_cookie = settings.SESSION_COOKIE_NAME
- self.cookies[session_cookie] = request.session.session_key
- cookie_data = {
- 'max-age': None,
- 'path': '/',
- 'domain': settings.SESSION_COOKIE_DOMAIN,
- 'secure': settings.SESSION_COOKIE_SECURE or None,
- 'expires': None,
- }
- self.cookies[session_cookie].update(cookie_data)
-
- return True
- else:
- return False
-
- def logout(self):
- """
- Removes the authenticated user's cookies and session object.
-
- Causes the authenticated user to be logged out.
- """
- session = import_module(settings.SESSION_ENGINE).SessionStore()
- session_cookie = self.cookies.get(settings.SESSION_COOKIE_NAME)
- if session_cookie:
- session.delete(session_key=session_cookie.value)
- self.cookies = SimpleCookie()
-
- def _handle_redirects(self, response, **extra):
- "Follows any redirects by requesting responses from the server using GET."
-
- response.redirect_chain = []
- while response.status_code in (301, 302, 303, 307):
- url = response['Location']
- scheme, netloc, path, query, fragment = urlsplit(url)
-
- redirect_chain = response.redirect_chain
- redirect_chain.append((url, response.status_code))
-
- if scheme:
- extra['wsgi.url_scheme'] = scheme
-
- # The test client doesn't handle external links,
- # but since the situation is simulated in test_client,
- # we fake things here by ignoring the netloc portion of the
- # redirected URL.
- response = self.get(path, QueryDict(query), follow=False, **extra)
- response.redirect_chain = redirect_chain
-
- # Prevent loops
- if response.redirect_chain[-1] in response.redirect_chain[0:-1]:
- break
- return response
-
diff --git a/parts/django/django/test/signals.py b/parts/django/django/test/signals.py
deleted file mode 100644
index a328a77..0000000
--- a/parts/django/django/test/signals.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.dispatch import Signal
-
-template_rendered = Signal(providing_args=["template", "context"])
diff --git a/parts/django/django/test/simple.py b/parts/django/django/test/simple.py
deleted file mode 100644
index 8f08fd0..0000000
--- a/parts/django/django/test/simple.py
+++ /dev/null
@@ -1,410 +0,0 @@
-import sys
-import signal
-import unittest
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.db.models import get_app, get_apps
-from django.test import _doctest as doctest
-from django.test.utils import setup_test_environment, teardown_test_environment
-from django.test.testcases import OutputChecker, DocTestRunner, TestCase
-
-
-try:
- all
-except NameError:
- from django.utils.itercompat import all
-
-# The module name for tests outside models.py
-TEST_MODULE = 'tests'
-
-doctestOutputChecker = OutputChecker()
-
-class DjangoTestRunner(unittest.TextTestRunner):
-
- def __init__(self, verbosity=0, failfast=False, **kwargs):
- super(DjangoTestRunner, self).__init__(verbosity=verbosity, **kwargs)
- self.failfast = failfast
- self._keyboard_interrupt_intercepted = False
-
- def run(self, *args, **kwargs):
- """
- Runs the test suite after registering a custom signal handler
- that triggers a graceful exit when Ctrl-C is pressed.
- """
- self._default_keyboard_interrupt_handler = signal.signal(signal.SIGINT,
- self._keyboard_interrupt_handler)
- try:
- result = super(DjangoTestRunner, self).run(*args, **kwargs)
- finally:
- signal.signal(signal.SIGINT, self._default_keyboard_interrupt_handler)
- return result
-
- def _keyboard_interrupt_handler(self, signal_number, stack_frame):
- """
- Handles Ctrl-C by setting a flag that will stop the test run when
- the currently running test completes.
- """
- self._keyboard_interrupt_intercepted = True
- sys.stderr.write(" <Test run halted by Ctrl-C> ")
- # Set the interrupt handler back to the default handler, so that
- # another Ctrl-C press will trigger immediate exit.
- signal.signal(signal.SIGINT, self._default_keyboard_interrupt_handler)
-
- def _makeResult(self):
- result = super(DjangoTestRunner, self)._makeResult()
- failfast = self.failfast
-
- def stoptest_override(func):
- def stoptest(test):
- # If we were set to failfast and the unit test failed,
- # or if the user has typed Ctrl-C, report and quit
- if (failfast and not result.wasSuccessful()) or \
- self._keyboard_interrupt_intercepted:
- result.stop()
- func(test)
- return stoptest
-
- setattr(result, 'stopTest', stoptest_override(result.stopTest))
- return result
-
-def get_tests(app_module):
- try:
- app_path = app_module.__name__.split('.')[:-1]
- test_module = __import__('.'.join(app_path + [TEST_MODULE]), {}, {}, TEST_MODULE)
- except ImportError, e:
- # Couldn't import tests.py. Was it due to a missing file, or
- # due to an import error in a tests.py that actually exists?
- import os.path
- from imp import find_module
- try:
- mod = find_module(TEST_MODULE, [os.path.dirname(app_module.__file__)])
- except ImportError:
- # 'tests' module doesn't exist. Move on.
- test_module = None
- else:
- # The module exists, so there must be an import error in the
- # test module itself. We don't need the module; so if the
- # module was a single file module (i.e., tests.py), close the file
- # handle returned by find_module. Otherwise, the test module
- # is a directory, and there is nothing to close.
- if mod[0]:
- mod[0].close()
- raise
- return test_module
-
-def build_suite(app_module):
- "Create a complete Django test suite for the provided application module"
- suite = unittest.TestSuite()
-
- # Load unit and doctests in the models.py module. If module has
- # a suite() method, use it. Otherwise build the test suite ourselves.
- if hasattr(app_module, 'suite'):
- suite.addTest(app_module.suite())
- else:
- suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(app_module))
- try:
- suite.addTest(doctest.DocTestSuite(app_module,
- checker=doctestOutputChecker,
- runner=DocTestRunner))
- except ValueError:
- # No doc tests in models.py
- pass
-
- # Check to see if a separate 'tests' module exists parallel to the
- # models module
- test_module = get_tests(app_module)
- if test_module:
- # Load unit and doctests in the tests.py module. If module has
- # a suite() method, use it. Otherwise build the test suite ourselves.
- if hasattr(test_module, 'suite'):
- suite.addTest(test_module.suite())
- else:
- suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_module))
- try:
- suite.addTest(doctest.DocTestSuite(test_module,
- checker=doctestOutputChecker,
- runner=DocTestRunner))
- except ValueError:
- # No doc tests in tests.py
- pass
- return suite
-
-def build_test(label):
- """Construct a test case with the specified label. Label should be of the
- form model.TestClass or model.TestClass.test_method. Returns an
- instantiated test or test suite corresponding to the label provided.
-
- """
- parts = label.split('.')
- if len(parts) < 2 or len(parts) > 3:
- raise ValueError("Test label '%s' should be of the form app.TestCase or app.TestCase.test_method" % label)
-
- #
- # First, look for TestCase instances with a name that matches
- #
- app_module = get_app(parts[0])
- test_module = get_tests(app_module)
- TestClass = getattr(app_module, parts[1], None)
-
- # Couldn't find the test class in models.py; look in tests.py
- if TestClass is None:
- if test_module:
- TestClass = getattr(test_module, parts[1], None)
-
- try:
- if issubclass(TestClass, unittest.TestCase):
- if len(parts) == 2: # label is app.TestClass
- try:
- return unittest.TestLoader().loadTestsFromTestCase(TestClass)
- except TypeError:
- raise ValueError("Test label '%s' does not refer to a test class" % label)
- else: # label is app.TestClass.test_method
- return TestClass(parts[2])
- except TypeError:
- # TestClass isn't a TestClass - it must be a method or normal class
- pass
-
- #
- # If there isn't a TestCase, look for a doctest that matches
- #
- tests = []
- for module in app_module, test_module:
- try:
- doctests = doctest.DocTestSuite(module,
- checker=doctestOutputChecker,
- runner=DocTestRunner)
- # Now iterate over the suite, looking for doctests whose name
- # matches the pattern that was given
- for test in doctests:
- if test._dt_test.name in (
- '%s.%s' % (module.__name__, '.'.join(parts[1:])),
- '%s.__test__.%s' % (module.__name__, '.'.join(parts[1:]))):
- tests.append(test)
- except ValueError:
- # No doctests found.
- pass
-
- # If no tests were found, then we were given a bad test label.
- if not tests:
- raise ValueError("Test label '%s' does not refer to a test" % label)
-
- # Construct a suite out of the tests that matched.
- return unittest.TestSuite(tests)
-
-def partition_suite(suite, classes, bins):
- """
- Partitions a test suite by test type.
-
- classes is a sequence of types
- bins is a sequence of TestSuites, one more than classes
-
- Tests of type classes[i] are added to bins[i],
- tests with no match found in classes are place in bins[-1]
- """
- for test in suite:
- if isinstance(test, unittest.TestSuite):
- partition_suite(test, classes, bins)
- else:
- for i in range(len(classes)):
- if isinstance(test, classes[i]):
- bins[i].addTest(test)
- break
- else:
- bins[-1].addTest(test)
-
-def reorder_suite(suite, classes):
- """
- Reorders a test suite by test type.
-
- classes is a sequence of types
-
- All tests of type clases[0] are placed first, then tests of type classes[1], etc.
- Tests with no match in classes are placed last.
- """
- class_count = len(classes)
- bins = [unittest.TestSuite() for i in range(class_count+1)]
- partition_suite(suite, classes, bins)
- for i in range(class_count):
- bins[0].addTests(bins[i+1])
- return bins[0]
-
-def dependency_ordered(test_databases, dependencies):
- """Reorder test_databases into an order that honors the dependencies
- described in TEST_DEPENDENCIES.
- """
- ordered_test_databases = []
- resolved_databases = set()
- while test_databases:
- changed = False
- deferred = []
-
- while test_databases:
- signature, aliases = test_databases.pop()
- dependencies_satisfied = True
- for alias in aliases:
- if alias in dependencies:
- if all(a in resolved_databases for a in dependencies[alias]):
- # all dependencies for this alias are satisfied
- dependencies.pop(alias)
- resolved_databases.add(alias)
- else:
- dependencies_satisfied = False
- else:
- resolved_databases.add(alias)
-
- if dependencies_satisfied:
- ordered_test_databases.append((signature, aliases))
- changed = True
- else:
- deferred.append((signature, aliases))
-
- if not changed:
- raise ImproperlyConfigured("Circular dependency in TEST_DEPENDENCIES")
- test_databases = deferred
- return ordered_test_databases
-
-class DjangoTestSuiteRunner(object):
- def __init__(self, verbosity=1, interactive=True, failfast=True, **kwargs):
- self.verbosity = verbosity
- self.interactive = interactive
- self.failfast = failfast
-
- def setup_test_environment(self, **kwargs):
- setup_test_environment()
- settings.DEBUG = False
-
- def build_suite(self, test_labels, extra_tests=None, **kwargs):
- suite = unittest.TestSuite()
-
- if test_labels:
- for label in test_labels:
- if '.' in label:
- suite.addTest(build_test(label))
- else:
- app = get_app(label)
- suite.addTest(build_suite(app))
- else:
- for app in get_apps():
- suite.addTest(build_suite(app))
-
- if extra_tests:
- for test in extra_tests:
- suite.addTest(test)
-
- return reorder_suite(suite, (TestCase,))
-
- def setup_databases(self, **kwargs):
- from django.db import connections, DEFAULT_DB_ALIAS
-
- # First pass -- work out which databases actually need to be created,
- # and which ones are test mirrors or duplicate entries in DATABASES
- mirrored_aliases = {}
- test_databases = {}
- dependencies = {}
- for alias in connections:
- connection = connections[alias]
- if connection.settings_dict['TEST_MIRROR']:
- # If the database is marked as a test mirror, save
- # the alias.
- mirrored_aliases[alias] = connection.settings_dict['TEST_MIRROR']
- else:
- # Store the (engine, name) pair. If we have two aliases
- # with the same pair, we only need to create the test database
- # once.
- test_databases.setdefault((
- connection.settings_dict['HOST'],
- connection.settings_dict['PORT'],
- connection.settings_dict['ENGINE'],
- connection.settings_dict['NAME'],
- ), []).append(alias)
-
- if 'TEST_DEPENDENCIES' in connection.settings_dict:
- dependencies[alias] = connection.settings_dict['TEST_DEPENDENCIES']
- else:
- if alias != 'default':
- dependencies[alias] = connection.settings_dict.get('TEST_DEPENDENCIES', ['default'])
-
- # Second pass -- actually create the databases.
- old_names = []
- mirrors = []
- for (host, port, engine, db_name), aliases in dependency_ordered(test_databases.items(), dependencies):
- # Actually create the database for the first connection
- connection = connections[aliases[0]]
- old_names.append((connection, db_name, True))
- test_db_name = connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive)
- for alias in aliases[1:]:
- connection = connections[alias]
- if db_name:
- old_names.append((connection, db_name, False))
- connection.settings_dict['NAME'] = test_db_name
- else:
- # If settings_dict['NAME'] isn't defined, we have a backend where
- # the name isn't important -- e.g., SQLite, which uses :memory:.
- # Force create the database instead of assuming it's a duplicate.
- old_names.append((connection, db_name, True))
- connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive)
-
- for alias, mirror_alias in mirrored_aliases.items():
- mirrors.append((alias, connections[alias].settings_dict['NAME']))
- connections[alias].settings_dict['NAME'] = connections[mirror_alias].settings_dict['NAME']
-
- return old_names, mirrors
-
- def run_suite(self, suite, **kwargs):
- return DjangoTestRunner(verbosity=self.verbosity, failfast=self.failfast).run(suite)
-
- def teardown_databases(self, old_config, **kwargs):
- from django.db import connections
- old_names, mirrors = old_config
- # Point all the mirrors back to the originals
- for alias, old_name in mirrors:
- connections[alias].settings_dict['NAME'] = old_name
- # Destroy all the non-mirror databases
- for connection, old_name, destroy in old_names:
- if destroy:
- connection.creation.destroy_test_db(old_name, self.verbosity)
- else:
- connection.settings_dict['NAME'] = old_name
-
- def teardown_test_environment(self, **kwargs):
- teardown_test_environment()
-
- def suite_result(self, suite, result, **kwargs):
- return len(result.failures) + len(result.errors)
-
- def run_tests(self, test_labels, extra_tests=None, **kwargs):
- """
- Run the unit tests for all the test labels in the provided list.
- Labels must be of the form:
- - app.TestClass.test_method
- Run a single specific test method
- - app.TestClass
- Run all the test methods in a given class
- - app
- Search for doctests and unittests in the named application.
-
- When looking for tests, the test runner will look in the models and
- tests modules for the application.
-
- A list of 'extra' tests may also be provided; these tests
- will be added to the test suite.
-
- Returns the number of tests that failed.
- """
- self.setup_test_environment()
- suite = self.build_suite(test_labels, extra_tests)
- old_config = self.setup_databases()
- result = self.run_suite(suite)
- self.teardown_databases(old_config)
- self.teardown_test_environment()
- return self.suite_result(suite, result)
-
-def run_tests(test_labels, verbosity=1, interactive=True, failfast=False, extra_tests=None):
- import warnings
- warnings.warn(
- 'The run_tests() test runner has been deprecated in favor of DjangoTestSuiteRunner.',
- PendingDeprecationWarning
- )
- test_runner = DjangoTestSuiteRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
- return test_runner.run_tests(test_labels, extra_tests=extra_tests)
diff --git a/parts/django/django/test/testcases.py b/parts/django/django/test/testcases.py
deleted file mode 100644
index 1671b3a..0000000
--- a/parts/django/django/test/testcases.py
+++ /dev/null
@@ -1,546 +0,0 @@
-import re
-import unittest
-from urlparse import urlsplit, urlunsplit
-from xml.dom.minidom import parseString, Node
-
-from django.conf import settings
-from django.core import mail
-from django.core.management import call_command
-from django.core.urlresolvers import clear_url_caches
-from django.db import transaction, connections, DEFAULT_DB_ALIAS
-from django.http import QueryDict
-from django.test import _doctest as doctest
-from django.test.client import Client
-from django.test.utils import get_warnings_state, restore_warnings_state
-from django.utils import simplejson
-from django.utils.encoding import smart_str
-
-try:
- all
-except NameError:
- from django.utils.itercompat import all
-
-normalize_long_ints = lambda s: re.sub(r'(?<![\w])(\d+)L(?![\w])', '\\1', s)
-normalize_decimals = lambda s: re.sub(r"Decimal\('(\d+(\.\d*)?)'\)", lambda m: "Decimal(\"%s\")" % m.groups()[0], s)
-
-def to_list(value):
- """
- Puts value into a list if it's not already one.
- Returns an empty list if value is None.
- """
- if value is None:
- value = []
- elif not isinstance(value, list):
- value = [value]
- return value
-
-real_commit = transaction.commit
-real_rollback = transaction.rollback
-real_enter_transaction_management = transaction.enter_transaction_management
-real_leave_transaction_management = transaction.leave_transaction_management
-real_savepoint_commit = transaction.savepoint_commit
-real_savepoint_rollback = transaction.savepoint_rollback
-real_managed = transaction.managed
-
-def nop(*args, **kwargs):
- return
-
-def disable_transaction_methods():
- transaction.commit = nop
- transaction.rollback = nop
- transaction.savepoint_commit = nop
- transaction.savepoint_rollback = nop
- transaction.enter_transaction_management = nop
- transaction.leave_transaction_management = nop
- transaction.managed = nop
-
-def restore_transaction_methods():
- transaction.commit = real_commit
- transaction.rollback = real_rollback
- transaction.savepoint_commit = real_savepoint_commit
- transaction.savepoint_rollback = real_savepoint_rollback
- transaction.enter_transaction_management = real_enter_transaction_management
- transaction.leave_transaction_management = real_leave_transaction_management
- transaction.managed = real_managed
-
-class OutputChecker(doctest.OutputChecker):
- def check_output(self, want, got, optionflags):
- "The entry method for doctest output checking. Defers to a sequence of child checkers"
- checks = (self.check_output_default,
- self.check_output_numeric,
- self.check_output_xml,
- self.check_output_json)
- for check in checks:
- if check(want, got, optionflags):
- return True
- return False
-
- def check_output_default(self, want, got, optionflags):
- "The default comparator provided by doctest - not perfect, but good for most purposes"
- return doctest.OutputChecker.check_output(self, want, got, optionflags)
-
- def check_output_numeric(self, want, got, optionflags):
- """Doctest does an exact string comparison of output, which means that
- some numerically equivalent values aren't equal. This check normalizes
- * long integers (22L) so that they equal normal integers. (22)
- * Decimals so that they are comparable, regardless of the change
- made to __repr__ in Python 2.6.
- """
- return doctest.OutputChecker.check_output(self,
- normalize_decimals(normalize_long_ints(want)),
- normalize_decimals(normalize_long_ints(got)),
- optionflags)
-
- def check_output_xml(self, want, got, optionsflags):
- """Tries to do a 'xml-comparision' of want and got. Plain string
- comparision doesn't always work because, for example, attribute
- ordering should not be important.
-
- Based on http://codespeak.net/svn/lxml/trunk/src/lxml/doctestcompare.py
- """
- _norm_whitespace_re = re.compile(r'[ \t\n][ \t\n]+')
- def norm_whitespace(v):
- return _norm_whitespace_re.sub(' ', v)
-
- def child_text(element):
- return ''.join([c.data for c in element.childNodes
- if c.nodeType == Node.TEXT_NODE])
-
- def children(element):
- return [c for c in element.childNodes
- if c.nodeType == Node.ELEMENT_NODE]
-
- def norm_child_text(element):
- return norm_whitespace(child_text(element))
-
- def attrs_dict(element):
- return dict(element.attributes.items())
-
- def check_element(want_element, got_element):
- if want_element.tagName != got_element.tagName:
- return False
- if norm_child_text(want_element) != norm_child_text(got_element):
- return False
- if attrs_dict(want_element) != attrs_dict(got_element):
- return False
- want_children = children(want_element)
- got_children = children(got_element)
- if len(want_children) != len(got_children):
- return False
- for want, got in zip(want_children, got_children):
- if not check_element(want, got):
- return False
- return True
-
- want, got = self._strip_quotes(want, got)
- want = want.replace('\\n','\n')
- got = got.replace('\\n','\n')
-
- # If the string is not a complete xml document, we may need to add a
- # root element. This allow us to compare fragments, like "<foo/><bar/>"
- if not want.startswith('<?xml'):
- wrapper = '<root>%s</root>'
- want = wrapper % want
- got = wrapper % got
-
- # Parse the want and got strings, and compare the parsings.
- try:
- want_root = parseString(want).firstChild
- got_root = parseString(got).firstChild
- except:
- return False
- return check_element(want_root, got_root)
-
- def check_output_json(self, want, got, optionsflags):
- "Tries to compare want and got as if they were JSON-encoded data"
- want, got = self._strip_quotes(want, got)
- try:
- want_json = simplejson.loads(want)
- got_json = simplejson.loads(got)
- except:
- return False
- return want_json == got_json
-
- def _strip_quotes(self, want, got):
- """
- Strip quotes of doctests output values:
-
- >>> o = OutputChecker()
- >>> o._strip_quotes("'foo'")
- "foo"
- >>> o._strip_quotes('"foo"')
- "foo"
- >>> o._strip_quotes("u'foo'")
- "foo"
- >>> o._strip_quotes('u"foo"')
- "foo"
- """
- def is_quoted_string(s):
- s = s.strip()
- return (len(s) >= 2
- and s[0] == s[-1]
- and s[0] in ('"', "'"))
-
- def is_quoted_unicode(s):
- s = s.strip()
- return (len(s) >= 3
- and s[0] == 'u'
- and s[1] == s[-1]
- and s[1] in ('"', "'"))
-
- if is_quoted_string(want) and is_quoted_string(got):
- want = want.strip()[1:-1]
- got = got.strip()[1:-1]
- elif is_quoted_unicode(want) and is_quoted_unicode(got):
- want = want.strip()[2:-1]
- got = got.strip()[2:-1]
- return want, got
-
-
-class DocTestRunner(doctest.DocTestRunner):
- def __init__(self, *args, **kwargs):
- doctest.DocTestRunner.__init__(self, *args, **kwargs)
- self.optionflags = doctest.ELLIPSIS
-
- def report_unexpected_exception(self, out, test, example, exc_info):
- doctest.DocTestRunner.report_unexpected_exception(self, out, test,
- example, exc_info)
- # Rollback, in case of database errors. Otherwise they'd have
- # side effects on other tests.
- for conn in connections:
- transaction.rollback_unless_managed(using=conn)
-
-class TransactionTestCase(unittest.TestCase):
- def _pre_setup(self):
- """Performs any pre-test setup. This includes:
-
- * Flushing the database.
- * If the Test Case class has a 'fixtures' member, installing the
- named fixtures.
- * If the Test Case class has a 'urls' member, replace the
- ROOT_URLCONF with it.
- * Clearing the mail test outbox.
- """
- self._fixture_setup()
- self._urlconf_setup()
- mail.outbox = []
-
- def _fixture_setup(self):
- # If the test case has a multi_db=True flag, flush all databases.
- # Otherwise, just flush default.
- if getattr(self, 'multi_db', False):
- databases = connections
- else:
- databases = [DEFAULT_DB_ALIAS]
- for db in databases:
- call_command('flush', verbosity=0, interactive=False, database=db)
-
- if hasattr(self, 'fixtures'):
- # We have to use this slightly awkward syntax due to the fact
- # that we're using *args and **kwargs together.
- call_command('loaddata', *self.fixtures, **{'verbosity': 0, 'database': db})
-
- def _urlconf_setup(self):
- if hasattr(self, 'urls'):
- self._old_root_urlconf = settings.ROOT_URLCONF
- settings.ROOT_URLCONF = self.urls
- clear_url_caches()
-
- def __call__(self, result=None):
- """
- Wrapper around default __call__ method to perform common Django test
- set up. This means that user-defined Test Cases aren't required to
- include a call to super().setUp().
- """
- self.client = Client()
- try:
- self._pre_setup()
- except (KeyboardInterrupt, SystemExit):
- raise
- except Exception:
- import sys
- result.addError(self, sys.exc_info())
- return
- super(TransactionTestCase, self).__call__(result)
- try:
- self._post_teardown()
- except (KeyboardInterrupt, SystemExit):
- raise
- except Exception:
- import sys
- result.addError(self, sys.exc_info())
- return
-
- def _post_teardown(self):
- """ Performs any post-test things. This includes:
-
- * Putting back the original ROOT_URLCONF if it was changed.
- """
- self._fixture_teardown()
- self._urlconf_teardown()
-
- def _fixture_teardown(self):
- pass
-
- def _urlconf_teardown(self):
- if hasattr(self, '_old_root_urlconf'):
- settings.ROOT_URLCONF = self._old_root_urlconf
- clear_url_caches()
-
- def save_warnings_state(self):
- """
- Saves the state of the warnings module
- """
- self._warnings_state = get_warnings_state()
-
- def restore_warnings_state(self):
- """
- Restores the sate of the warnings module to the state
- saved by save_warnings_state()
- """
- restore_warnings_state(self._warnings_state)
-
- def assertRedirects(self, response, expected_url, status_code=302,
- target_status_code=200, host=None, msg_prefix=''):
- """Asserts that a response redirected to a specific URL, and that the
- redirect URL can be loaded.
-
- Note that assertRedirects won't work for external links since it uses
- TestClient to do a request.
- """
- if msg_prefix:
- msg_prefix += ": "
-
- if hasattr(response, 'redirect_chain'):
- # The request was a followed redirect
- self.assertTrue(len(response.redirect_chain) > 0,
- msg_prefix + "Response didn't redirect as expected: Response"
- " code was %d (expected %d)" %
- (response.status_code, status_code))
-
- self.assertEqual(response.redirect_chain[0][1], status_code,
- msg_prefix + "Initial response didn't redirect as expected:"
- " Response code was %d (expected %d)" %
- (response.redirect_chain[0][1], status_code))
-
- url, status_code = response.redirect_chain[-1]
-
- self.assertEqual(response.status_code, target_status_code,
- msg_prefix + "Response didn't redirect as expected: Final"
- " Response code was %d (expected %d)" %
- (response.status_code, target_status_code))
-
- else:
- # Not a followed redirect
- self.assertEqual(response.status_code, status_code,
- msg_prefix + "Response didn't redirect as expected: Response"
- " code was %d (expected %d)" %
- (response.status_code, status_code))
-
- url = response['Location']
- scheme, netloc, path, query, fragment = urlsplit(url)
-
- redirect_response = response.client.get(path, QueryDict(query))
-
- # Get the redirection page, using the same client that was used
- # to obtain the original response.
- self.assertEqual(redirect_response.status_code, target_status_code,
- msg_prefix + "Couldn't retrieve redirection page '%s':"
- " response code was %d (expected %d)" %
- (path, redirect_response.status_code, target_status_code))
-
- e_scheme, e_netloc, e_path, e_query, e_fragment = urlsplit(expected_url)
- if not (e_scheme or e_netloc):
- expected_url = urlunsplit(('http', host or 'testserver', e_path,
- e_query, e_fragment))
-
- self.assertEqual(url, expected_url,
- msg_prefix + "Response redirected to '%s', expected '%s'" %
- (url, expected_url))
-
- def assertContains(self, response, text, count=None, status_code=200,
- msg_prefix=''):
- """
- Asserts that a response indicates that a page was retrieved
- successfully, (i.e., the HTTP status code was as expected), and that
- ``text`` occurs ``count`` times in the content of the response.
- If ``count`` is None, the count doesn't matter - the assertion is true
- if the text occurs at least once in the response.
- """
- if msg_prefix:
- msg_prefix += ": "
-
- self.assertEqual(response.status_code, status_code,
- msg_prefix + "Couldn't retrieve page: Response code was %d"
- " (expected %d)" % (response.status_code, status_code))
- text = smart_str(text, response._charset)
- real_count = response.content.count(text)
- if count is not None:
- self.assertEqual(real_count, count,
- msg_prefix + "Found %d instances of '%s' in response"
- " (expected %d)" % (real_count, text, count))
- else:
- self.failUnless(real_count != 0,
- msg_prefix + "Couldn't find '%s' in response" % text)
-
- def assertNotContains(self, response, text, status_code=200,
- msg_prefix=''):
- """
- Asserts that a response indicates that a page was retrieved
- successfully, (i.e., the HTTP status code was as expected), and that
- ``text`` doesn't occurs in the content of the response.
- """
- if msg_prefix:
- msg_prefix += ": "
-
- self.assertEqual(response.status_code, status_code,
- msg_prefix + "Couldn't retrieve page: Response code was %d"
- " (expected %d)" % (response.status_code, status_code))
- text = smart_str(text, response._charset)
- self.assertEqual(response.content.count(text), 0,
- msg_prefix + "Response should not contain '%s'" % text)
-
- def assertFormError(self, response, form, field, errors, msg_prefix=''):
- """
- Asserts that a form used to render the response has a specific field
- error.
- """
- if msg_prefix:
- msg_prefix += ": "
-
- # Put context(s) into a list to simplify processing.
- contexts = to_list(response.context)
- if not contexts:
- self.fail(msg_prefix + "Response did not use any contexts to "
- "render the response")
-
- # Put error(s) into a list to simplify processing.
- errors = to_list(errors)
-
- # Search all contexts for the error.
- found_form = False
- for i,context in enumerate(contexts):
- if form not in context:
- continue
- found_form = True
- for err in errors:
- if field:
- if field in context[form].errors:
- field_errors = context[form].errors[field]
- self.assertTrue(err in field_errors,
- msg_prefix + "The field '%s' on form '%s' in"
- " context %d does not contain the error '%s'"
- " (actual errors: %s)" %
- (field, form, i, err, repr(field_errors)))
- elif field in context[form].fields:
- self.fail(msg_prefix + "The field '%s' on form '%s'"
- " in context %d contains no errors" %
- (field, form, i))
- else:
- self.fail(msg_prefix + "The form '%s' in context %d"
- " does not contain the field '%s'" %
- (form, i, field))
- else:
- non_field_errors = context[form].non_field_errors()
- self.assertTrue(err in non_field_errors,
- msg_prefix + "The form '%s' in context %d does not"
- " contain the non-field error '%s'"
- " (actual errors: %s)" %
- (form, i, err, non_field_errors))
- if not found_form:
- self.fail(msg_prefix + "The form '%s' was not used to render the"
- " response" % form)
-
- def assertTemplateUsed(self, response, template_name, msg_prefix=''):
- """
- Asserts that the template with the provided name was used in rendering
- the response.
- """
- if msg_prefix:
- msg_prefix += ": "
-
- template_names = [t.name for t in to_list(response.template)]
- if not template_names:
- self.fail(msg_prefix + "No templates used to render the response")
- self.assertTrue(template_name in template_names,
- msg_prefix + "Template '%s' was not a template used to render"
- " the response. Actual template(s) used: %s" %
- (template_name, u', '.join(template_names)))
-
- def assertTemplateNotUsed(self, response, template_name, msg_prefix=''):
- """
- Asserts that the template with the provided name was NOT used in
- rendering the response.
- """
- if msg_prefix:
- msg_prefix += ": "
-
- template_names = [t.name for t in to_list(response.template)]
- self.assertFalse(template_name in template_names,
- msg_prefix + "Template '%s' was used unexpectedly in rendering"
- " the response" % template_name)
-
- def assertQuerysetEqual(self, qs, values, transform=repr):
- return self.assertEqual(map(transform, qs), values)
-
-def connections_support_transactions():
- """
- Returns True if all connections support transactions. This is messy
- because 2.4 doesn't support any or all.
- """
- return all(conn.settings_dict['SUPPORTS_TRANSACTIONS']
- for conn in connections.all())
-
-class TestCase(TransactionTestCase):
- """
- Does basically the same as TransactionTestCase, but surrounds every test
- with a transaction, monkey-patches the real transaction management routines to
- do nothing, and rollsback the test transaction at the end of the test. You have
- to use TransactionTestCase, if you need transaction management inside a test.
- """
-
- def _fixture_setup(self):
- if not connections_support_transactions():
- return super(TestCase, self)._fixture_setup()
-
- # If the test case has a multi_db=True flag, setup all databases.
- # Otherwise, just use default.
- if getattr(self, 'multi_db', False):
- databases = connections
- else:
- databases = [DEFAULT_DB_ALIAS]
-
- for db in databases:
- transaction.enter_transaction_management(using=db)
- transaction.managed(True, using=db)
- disable_transaction_methods()
-
- from django.contrib.sites.models import Site
- Site.objects.clear_cache()
-
- for db in databases:
- if hasattr(self, 'fixtures'):
- call_command('loaddata', *self.fixtures, **{
- 'verbosity': 0,
- 'commit': False,
- 'database': db
- })
-
- def _fixture_teardown(self):
- if not connections_support_transactions():
- return super(TestCase, self)._fixture_teardown()
-
- # If the test case has a multi_db=True flag, teardown all databases.
- # Otherwise, just teardown default.
- if getattr(self, 'multi_db', False):
- databases = connections
- else:
- databases = [DEFAULT_DB_ALIAS]
-
- restore_transaction_methods()
- for db in databases:
- transaction.rollback(using=db)
- transaction.leave_transaction_management(using=db)
-
- for connection in connections.all():
- connection.close()
diff --git a/parts/django/django/test/utils.py b/parts/django/django/test/utils.py
deleted file mode 100644
index 517d06f..0000000
--- a/parts/django/django/test/utils.py
+++ /dev/null
@@ -1,124 +0,0 @@
-import sys
-import time
-import os
-import warnings
-from django.conf import settings
-from django.core import mail
-from django.core.mail.backends import locmem
-from django.test import signals
-from django.template import Template
-from django.utils.translation import deactivate
-
-
-class Approximate(object):
- def __init__(self, val, places=7):
- self.val = val
- self.places = places
-
- def __repr__(self):
- return repr(self.val)
-
- def __eq__(self, other):
- if self.val == other:
- return True
- return round(abs(self.val-other), self.places) == 0
-
-
-class ContextList(list):
- """A wrapper that provides direct key access to context items contained
- in a list of context objects.
- """
- def __getitem__(self, key):
- if isinstance(key, basestring):
- for subcontext in self:
- if key in subcontext:
- return subcontext[key]
- raise KeyError(key)
- else:
- return super(ContextList, self).__getitem__(key)
-
- def __contains__(self, key):
- try:
- value = self[key]
- except KeyError:
- return False
- return True
-
-
-def instrumented_test_render(self, context):
- """
- An instrumented Template render method, providing a signal
- that can be intercepted by the test system Client
- """
- signals.template_rendered.send(sender=self, template=self, context=context)
- return self.nodelist.render(context)
-
-
-def setup_test_environment():
- """Perform any global pre-test setup. This involves:
-
- - Installing the instrumented test renderer
- - Set the email backend to the locmem email backend.
- - Setting the active locale to match the LANGUAGE_CODE setting.
- """
- Template.original_render = Template._render
- Template._render = instrumented_test_render
-
- mail.original_SMTPConnection = mail.SMTPConnection
- mail.SMTPConnection = locmem.EmailBackend
-
- mail.original_email_backend = settings.EMAIL_BACKEND
- settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
-
- mail.outbox = []
-
- deactivate()
-
-
-def teardown_test_environment():
- """Perform any global post-test teardown. This involves:
-
- - Restoring the original test renderer
- - Restoring the email sending functions
-
- """
- Template._render = Template.original_render
- del Template.original_render
-
- mail.SMTPConnection = mail.original_SMTPConnection
- del mail.original_SMTPConnection
-
- settings.EMAIL_BACKEND = mail.original_email_backend
- del mail.original_email_backend
-
- del mail.outbox
-
-
-def get_warnings_state():
- """
- Returns an object containing the state of the warnings module
- """
- # There is no public interface for doing this, but this implementation of
- # get_warnings_state and restore_warnings_state appears to work on Python
- # 2.4 to 2.7.
- return warnings.filters[:]
-
-
-def restore_warnings_state(state):
- """
- Restores the state of the warnings module when passed an object that was
- returned by get_warnings_state()
- """
- warnings.filters = state[:]
-
-
-def get_runner(settings):
- test_path = settings.TEST_RUNNER.split('.')
- # Allow for Python 2.5 relative paths
- if len(test_path) > 1:
- test_module_name = '.'.join(test_path[:-1])
- else:
- test_module_name = '.'
- test_module = __import__(test_module_name, {}, {}, test_path[-1])
- test_runner = getattr(test_module, test_path[-1])
- return test_runner
diff --git a/parts/django/django/utils/__init__.py b/parts/django/django/utils/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/utils/__init__.py
+++ /dev/null
diff --git a/parts/django/django/utils/_os.py b/parts/django/django/utils/_os.py
deleted file mode 100644
index d75714b..0000000
--- a/parts/django/django/utils/_os.py
+++ /dev/null
@@ -1,46 +0,0 @@
-import os
-from os.path import join, normcase, normpath, abspath, isabs, sep
-from django.utils.encoding import force_unicode
-
-# Define our own abspath function that can handle joining
-# unicode paths to a current working directory that has non-ASCII
-# characters in it. This isn't necessary on Windows since the
-# Windows version of abspath handles this correctly. The Windows
-# abspath also handles drive letters differently than the pure
-# Python implementation, so it's best not to replace it.
-if os.name == 'nt':
- abspathu = abspath
-else:
- def abspathu(path):
- """
- Version of os.path.abspath that uses the unicode representation
- of the current working directory, thus avoiding a UnicodeDecodeError
- in join when the cwd has non-ASCII characters.
- """
- if not isabs(path):
- path = join(os.getcwdu(), path)
- return normpath(path)
-
-def safe_join(base, *paths):
- """
- Joins one or more path components to the base path component intelligently.
- Returns a normalized, absolute version of the final path.
-
- The final path must be located inside of the base path component (otherwise
- a ValueError is raised).
- """
- # We need to use normcase to ensure we don't false-negative on case
- # insensitive operating systems (like Windows).
- base = force_unicode(base)
- paths = [force_unicode(p) for p in paths]
- final_path = normcase(abspathu(join(base, *paths)))
- base_path = normcase(abspathu(base))
- base_path_len = len(base_path)
- # Ensure final_path starts with base_path and that the next character after
- # the final path is os.sep (or nothing, in which case final_path must be
- # equal to base_path).
- if not final_path.startswith(base_path) \
- or final_path[base_path_len:base_path_len+1] not in ('', sep):
- raise ValueError('the joined path is located outside of the base path'
- ' component')
- return final_path
diff --git a/parts/django/django/utils/_threading_local.py b/parts/django/django/utils/_threading_local.py
deleted file mode 100644
index 9225d01..0000000
--- a/parts/django/django/utils/_threading_local.py
+++ /dev/null
@@ -1,240 +0,0 @@
-"""Thread-local objects
-
-(Note that this module provides a Python version of thread
- threading.local class. Depending on the version of Python you're
- using, there may be a faster one available. You should always import
- the local class from threading.)
-
-Thread-local objects support the management of thread-local data.
-If you have data that you want to be local to a thread, simply create
-a thread-local object and use its attributes:
-
- >>> mydata = local()
- >>> mydata.number = 42
- >>> mydata.number
- 42
-
-You can also access the local-object's dictionary:
-
- >>> mydata.__dict__
- {'number': 42}
- >>> mydata.__dict__.setdefault('widgets', [])
- []
- >>> mydata.widgets
- []
-
-What's important about thread-local objects is that their data are
-local to a thread. If we access the data in a different thread:
-
- >>> log = []
- >>> def f():
- ... items = mydata.__dict__.items()
- ... items.sort()
- ... log.append(items)
- ... mydata.number = 11
- ... log.append(mydata.number)
-
- >>> import threading
- >>> thread = threading.Thread(target=f)
- >>> thread.start()
- >>> thread.join()
- >>> log
- [[], 11]
-
-we get different data. Furthermore, changes made in the other thread
-don't affect data seen in this thread:
-
- >>> mydata.number
- 42
-
-Of course, values you get from a local object, including a __dict__
-attribute, are for whatever thread was current at the time the
-attribute was read. For that reason, you generally don't want to save
-these values across threads, as they apply only to the thread they
-came from.
-
-You can create custom local objects by subclassing the local class:
-
- >>> class MyLocal(local):
- ... number = 2
- ... initialized = False
- ... def __init__(self, **kw):
- ... if self.initialized:
- ... raise SystemError('__init__ called too many times')
- ... self.initialized = True
- ... self.__dict__.update(kw)
- ... def squared(self):
- ... return self.number ** 2
-
-This can be useful to support default values, methods and
-initialization. Note that if you define an __init__ method, it will be
-called each time the local object is used in a separate thread. This
-is necessary to initialize each thread's dictionary.
-
-Now if we create a local object:
-
- >>> mydata = MyLocal(color='red')
-
-Now we have a default number:
-
- >>> mydata.number
- 2
-
-an initial color:
-
- >>> mydata.color
- 'red'
- >>> del mydata.color
-
-And a method that operates on the data:
-
- >>> mydata.squared()
- 4
-
-As before, we can access the data in a separate thread:
-
- >>> log = []
- >>> thread = threading.Thread(target=f)
- >>> thread.start()
- >>> thread.join()
- >>> log
- [[('color', 'red'), ('initialized', True)], 11]
-
-without affecting this thread's data:
-
- >>> mydata.number
- 2
- >>> mydata.color
- Traceback (most recent call last):
- ...
- AttributeError: 'MyLocal' object has no attribute 'color'
-
-Note that subclasses can define slots, but they are not thread
-local. They are shared across threads:
-
- >>> class MyLocal(local):
- ... __slots__ = 'number'
-
- >>> mydata = MyLocal()
- >>> mydata.number = 42
- >>> mydata.color = 'red'
-
-So, the separate thread:
-
- >>> thread = threading.Thread(target=f)
- >>> thread.start()
- >>> thread.join()
-
-affects what we see:
-
- >>> mydata.number
- 11
-
->>> del mydata
-"""
-
-# Threading import is at end
-
-class _localbase(object):
- __slots__ = '_local__key', '_local__args', '_local__lock'
-
- def __new__(cls, *args, **kw):
- self = object.__new__(cls)
- key = '_local__key', 'thread.local.' + str(id(self))
- object.__setattr__(self, '_local__key', key)
- object.__setattr__(self, '_local__args', (args, kw))
- object.__setattr__(self, '_local__lock', RLock())
-
- if (args or kw) and (cls.__init__ is object.__init__):
- raise TypeError("Initialization arguments are not supported")
-
- # We need to create the thread dict in anticipation of
- # __init__ being called, to make sure we don't call it
- # again ourselves.
- dict = object.__getattribute__(self, '__dict__')
- currentThread().__dict__[key] = dict
-
- return self
-
-def _patch(self):
- key = object.__getattribute__(self, '_local__key')
- d = currentThread().__dict__.get(key)
- if d is None:
- d = {}
- currentThread().__dict__[key] = d
- object.__setattr__(self, '__dict__', d)
-
- # we have a new instance dict, so call out __init__ if we have
- # one
- cls = type(self)
- if cls.__init__ is not object.__init__:
- args, kw = object.__getattribute__(self, '_local__args')
- cls.__init__(self, *args, **kw)
- else:
- object.__setattr__(self, '__dict__', d)
-
-class local(_localbase):
-
- def __getattribute__(self, name):
- lock = object.__getattribute__(self, '_local__lock')
- lock.acquire()
- try:
- _patch(self)
- return object.__getattribute__(self, name)
- finally:
- lock.release()
-
- def __setattr__(self, name, value):
- lock = object.__getattribute__(self, '_local__lock')
- lock.acquire()
- try:
- _patch(self)
- return object.__setattr__(self, name, value)
- finally:
- lock.release()
-
- def __delattr__(self, name):
- lock = object.__getattribute__(self, '_local__lock')
- lock.acquire()
- try:
- _patch(self)
- return object.__delattr__(self, name)
- finally:
- lock.release()
-
-
- def __del__():
- threading_enumerate = enumerate
- __getattribute__ = object.__getattribute__
-
- def __del__(self):
- key = __getattribute__(self, '_local__key')
-
- try:
- threads = list(threading_enumerate())
- except:
- # if enumerate fails, as it seems to do during
- # shutdown, we'll skip cleanup under the assumption
- # that there is nothing to clean up
- return
-
- for thread in threads:
- try:
- __dict__ = thread.__dict__
- except AttributeError:
- # Thread is dying, rest in peace
- continue
-
- if key in __dict__:
- try:
- del __dict__[key]
- except KeyError:
- pass # didn't have anything in this thread
-
- return __del__
- __del__ = __del__()
-
-try:
- from threading import currentThread, enumerate, RLock
-except ImportError:
- from dummy_threading import currentThread, enumerate, RLock
diff --git a/parts/django/django/utils/autoreload.py b/parts/django/django/utils/autoreload.py
deleted file mode 100644
index 8d9d6f2..0000000
--- a/parts/django/django/utils/autoreload.py
+++ /dev/null
@@ -1,119 +0,0 @@
-# Autoreloading launcher.
-# Borrowed from Peter Hunt and the CherryPy project (http://www.cherrypy.org).
-# Some taken from Ian Bicking's Paste (http://pythonpaste.org/).
-#
-# Portions copyright (c) 2004, CherryPy Team (team@cherrypy.org)
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-# * Neither the name of the CherryPy Team nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import os, sys, time
-
-try:
- import thread
-except ImportError:
- import dummy_thread as thread
-
-# This import does nothing, but it's necessary to avoid some race conditions
-# in the threading module. See http://code.djangoproject.com/ticket/2330 .
-try:
- import threading
-except ImportError:
- pass
-
-
-RUN_RELOADER = True
-
-_mtimes = {}
-_win = (sys.platform == "win32")
-
-def code_changed():
- global _mtimes, _win
- for filename in filter(lambda v: v, map(lambda m: getattr(m, "__file__", None), sys.modules.values())):
- if filename.endswith(".pyc") or filename.endswith(".pyo"):
- filename = filename[:-1]
- if not os.path.exists(filename):
- continue # File might be in an egg, so it can't be reloaded.
- stat = os.stat(filename)
- mtime = stat.st_mtime
- if _win:
- mtime -= stat.st_ctime
- if filename not in _mtimes:
- _mtimes[filename] = mtime
- continue
- if mtime != _mtimes[filename]:
- _mtimes = {}
- return True
- return False
-
-def reloader_thread():
- while RUN_RELOADER:
- if code_changed():
- sys.exit(3) # force reload
- time.sleep(1)
-
-def restart_with_reloader():
- while True:
- args = [sys.executable] + sys.argv
- if sys.platform == "win32":
- args = ['"%s"' % arg for arg in args]
- new_environ = os.environ.copy()
- new_environ["RUN_MAIN"] = 'true'
- exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
- if exit_code != 3:
- return exit_code
-
-def python_reloader(main_func, args, kwargs):
- if os.environ.get("RUN_MAIN") == "true":
- thread.start_new_thread(main_func, args, kwargs)
- try:
- reloader_thread()
- except KeyboardInterrupt:
- pass
- else:
- try:
- sys.exit(restart_with_reloader())
- except KeyboardInterrupt:
- pass
-
-def jython_reloader(main_func, args, kwargs):
- from _systemrestart import SystemRestart
- thread.start_new_thread(main_func, args)
- while True:
- if code_changed():
- raise SystemRestart
- time.sleep(1)
-
-
-def main(main_func, args=None, kwargs=None):
- if args is None:
- args = ()
- if kwargs is None:
- kwargs = {}
- if sys.platform.startswith('java'):
- reloader = jython_reloader
- else:
- reloader = python_reloader
- reloader(main_func, args, kwargs)
-
diff --git a/parts/django/django/utils/cache.py b/parts/django/django/utils/cache.py
deleted file mode 100644
index 6cfd893..0000000
--- a/parts/django/django/utils/cache.py
+++ /dev/null
@@ -1,218 +0,0 @@
-"""
-This module contains helper functions for controlling caching. It does so by
-managing the "Vary" header of responses. It includes functions to patch the
-header of response objects directly and decorators that change functions to do
-that header-patching themselves.
-
-For information on the Vary header, see:
-
- http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44
-
-Essentially, the "Vary" HTTP header defines which headers a cache should take
-into account when building its cache key. Requests with the same path but
-different header content for headers named in "Vary" need to get different
-cache keys to prevent delivery of wrong content.
-
-An example: i18n middleware would need to distinguish caches by the
-"Accept-language" header.
-"""
-
-import re
-import time
-
-from django.conf import settings
-from django.core.cache import cache
-from django.utils.encoding import smart_str, iri_to_uri
-from django.utils.http import http_date
-from django.utils.hashcompat import md5_constructor
-from django.utils.translation import get_language
-from django.http import HttpRequest
-
-cc_delim_re = re.compile(r'\s*,\s*')
-
-def patch_cache_control(response, **kwargs):
- """
- This function patches the Cache-Control header by adding all
- keyword arguments to it. The transformation is as follows:
-
- * All keyword parameter names are turned to lowercase, and underscores
- are converted to hyphens.
- * If the value of a parameter is True (exactly True, not just a
- true value), only the parameter name is added to the header.
- * All other parameters are added with their value, after applying
- str() to it.
- """
- def dictitem(s):
- t = s.split('=', 1)
- if len(t) > 1:
- return (t[0].lower(), t[1])
- else:
- return (t[0].lower(), True)
-
- def dictvalue(t):
- if t[1] is True:
- return t[0]
- else:
- return t[0] + '=' + smart_str(t[1])
-
- if response.has_header('Cache-Control'):
- cc = cc_delim_re.split(response['Cache-Control'])
- cc = dict([dictitem(el) for el in cc])
- else:
- cc = {}
-
- # If there's already a max-age header but we're being asked to set a new
- # max-age, use the minimum of the two ages. In practice this happens when
- # a decorator and a piece of middleware both operate on a given view.
- if 'max-age' in cc and 'max_age' in kwargs:
- kwargs['max_age'] = min(cc['max-age'], kwargs['max_age'])
-
- for (k, v) in kwargs.items():
- cc[k.replace('_', '-')] = v
- cc = ', '.join([dictvalue(el) for el in cc.items()])
- response['Cache-Control'] = cc
-
-def get_max_age(response):
- """
- Returns the max-age from the response Cache-Control header as an integer
- (or ``None`` if it wasn't found or wasn't an integer.
- """
- if not response.has_header('Cache-Control'):
- return
- cc = dict([_to_tuple(el) for el in
- cc_delim_re.split(response['Cache-Control'])])
- if 'max-age' in cc:
- try:
- return int(cc['max-age'])
- except (ValueError, TypeError):
- pass
-
-def patch_response_headers(response, cache_timeout=None):
- """
- Adds some useful headers to the given HttpResponse object:
- ETag, Last-Modified, Expires and Cache-Control
-
- Each header is only added if it isn't already set.
-
- cache_timeout is in seconds. The CACHE_MIDDLEWARE_SECONDS setting is used
- by default.
- """
- if cache_timeout is None:
- cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
- if cache_timeout < 0:
- cache_timeout = 0 # Can't have max-age negative
- if not response.has_header('ETag'):
- response['ETag'] = '"%s"' % md5_constructor(response.content).hexdigest()
- if not response.has_header('Last-Modified'):
- response['Last-Modified'] = http_date()
- if not response.has_header('Expires'):
- response['Expires'] = http_date(time.time() + cache_timeout)
- patch_cache_control(response, max_age=cache_timeout)
-
-def add_never_cache_headers(response):
- """
- Adds headers to a response to indicate that a page should never be cached.
- """
- patch_response_headers(response, cache_timeout=-1)
-
-def patch_vary_headers(response, newheaders):
- """
- Adds (or updates) the "Vary" header in the given HttpResponse object.
- newheaders is a list of header names that should be in "Vary". Existing
- headers in "Vary" aren't removed.
- """
- # Note that we need to keep the original order intact, because cache
- # implementations may rely on the order of the Vary contents in, say,
- # computing an MD5 hash.
- if response.has_header('Vary'):
- vary_headers = cc_delim_re.split(response['Vary'])
- else:
- vary_headers = []
- # Use .lower() here so we treat headers as case-insensitive.
- existing_headers = set([header.lower() for header in vary_headers])
- additional_headers = [newheader for newheader in newheaders
- if newheader.lower() not in existing_headers]
- response['Vary'] = ', '.join(vary_headers + additional_headers)
-
-def _i18n_cache_key_suffix(request, cache_key):
- """If enabled, returns the cache key ending with a locale."""
- if settings.USE_I18N:
- # first check if LocaleMiddleware or another middleware added
- # LANGUAGE_CODE to request, then fall back to the active language
- # which in turn can also fall back to settings.LANGUAGE_CODE
- cache_key += '.%s' % getattr(request, 'LANGUAGE_CODE', get_language())
- return cache_key
-
-def _generate_cache_key(request, headerlist, key_prefix):
- """Returns a cache key from the headers given in the header list."""
- ctx = md5_constructor()
- for header in headerlist:
- value = request.META.get(header, None)
- if value is not None:
- ctx.update(value)
- path = md5_constructor(iri_to_uri(request.path))
- cache_key = 'views.decorators.cache.cache_page.%s.%s.%s' % (
- key_prefix, path.hexdigest(), ctx.hexdigest())
- return _i18n_cache_key_suffix(request, cache_key)
-
-def _generate_cache_header_key(key_prefix, request):
- """Returns a cache key for the header cache."""
- path = md5_constructor(iri_to_uri(request.path))
- cache_key = 'views.decorators.cache.cache_header.%s.%s' % (
- key_prefix, path.hexdigest())
- return _i18n_cache_key_suffix(request, cache_key)
-
-def get_cache_key(request, key_prefix=None):
- """
- Returns a cache key based on the request path. It can be used in the
- request phase because it pulls the list of headers to take into account
- from the global path registry and uses those to build a cache key to check
- against.
-
- If there is no headerlist stored, the page needs to be rebuilt, so this
- function returns None.
- """
- if key_prefix is None:
- key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- cache_key = _generate_cache_header_key(key_prefix, request)
- headerlist = cache.get(cache_key, None)
- if headerlist is not None:
- return _generate_cache_key(request, headerlist, key_prefix)
- else:
- return None
-
-def learn_cache_key(request, response, cache_timeout=None, key_prefix=None):
- """
- Learns what headers to take into account for some request path from the
- response object. It stores those headers in a global path registry so that
- later access to that path will know what headers to take into account
- without building the response object itself. The headers are named in the
- Vary header of the response, but we want to prevent response generation.
-
- The list of headers to use for cache key generation is stored in the same
- cache as the pages themselves. If the cache ages some data out of the
- cache, this just means that we have to build the response once to get at
- the Vary header and so at the list of headers to use for the cache key.
- """
- if key_prefix is None:
- key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- if cache_timeout is None:
- cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
- cache_key = _generate_cache_header_key(key_prefix, request)
- if response.has_header('Vary'):
- headerlist = ['HTTP_'+header.upper().replace('-', '_')
- for header in cc_delim_re.split(response['Vary'])]
- cache.set(cache_key, headerlist, cache_timeout)
- return _generate_cache_key(request, headerlist, key_prefix)
- else:
- # if there is no Vary header, we still need a cache key
- # for the request.path
- cache.set(cache_key, [], cache_timeout)
- return _generate_cache_key(request, [], key_prefix)
-
-
-def _to_tuple(s):
- t = s.split('=',1)
- if len(t) == 2:
- return t[0].lower(), t[1]
- return t[0].lower(), True
diff --git a/parts/django/django/utils/checksums.py b/parts/django/django/utils/checksums.py
deleted file mode 100644
index 970f563..0000000
--- a/parts/django/django/utils/checksums.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""
-Common checksum routines (used in multiple localflavor/ cases, for example).
-"""
-
-__all__ = ['luhn',]
-
-LUHN_ODD_LOOKUP = (0, 2, 4, 6, 8, 1, 3, 5, 7, 9) # sum_of_digits(index * 2)
-
-def luhn(candidate):
- """
- Checks a candidate number for validity according to the Luhn
- algorithm (used in validation of, for example, credit cards).
- Both numeric and string candidates are accepted.
- """
- if not isinstance(candidate, basestring):
- candidate = str(candidate)
- try:
- evens = sum([int(c) for c in candidate[-1::-2]])
- odds = sum([LUHN_ODD_LOOKUP[int(c)] for c in candidate[-2::-2]])
- return ((evens + odds) % 10 == 0)
- except ValueError: # Raised if an int conversion fails
- return False
diff --git a/parts/django/django/utils/copycompat.py b/parts/django/django/utils/copycompat.py
deleted file mode 100644
index 22b3cfb..0000000
--- a/parts/django/django/utils/copycompat.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""
-Fixes Python 2.4's failure to deepcopy unbound functions.
-"""
-
-import copy
-import types
-
-# Monkeypatch copy's deepcopy registry to handle functions correctly.
-if (hasattr(copy, '_deepcopy_dispatch') and types.FunctionType not in copy._deepcopy_dispatch):
- copy._deepcopy_dispatch[types.FunctionType] = copy._deepcopy_atomic
-
-# Pose as the copy module now.
-del copy, types
-from copy import *
diff --git a/parts/django/django/utils/daemonize.py b/parts/django/django/utils/daemonize.py
deleted file mode 100644
index 68e5392..0000000
--- a/parts/django/django/utils/daemonize.py
+++ /dev/null
@@ -1,58 +0,0 @@
-import os
-import sys
-
-if os.name == 'posix':
- def become_daemon(our_home_dir='.', out_log='/dev/null',
- err_log='/dev/null', umask=022):
- "Robustly turn into a UNIX daemon, running in our_home_dir."
- # First fork
- try:
- if os.fork() > 0:
- sys.exit(0) # kill off parent
- except OSError, e:
- sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))
- sys.exit(1)
- os.setsid()
- os.chdir(our_home_dir)
- os.umask(umask)
-
- # Second fork
- try:
- if os.fork() > 0:
- os._exit(0)
- except OSError, e:
- sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))
- os._exit(1)
-
- si = open('/dev/null', 'r')
- so = open(out_log, 'a+', 0)
- se = open(err_log, 'a+', 0)
- os.dup2(si.fileno(), sys.stdin.fileno())
- os.dup2(so.fileno(), sys.stdout.fileno())
- os.dup2(se.fileno(), sys.stderr.fileno())
- # Set custom file descriptors so that they get proper buffering.
- sys.stdout, sys.stderr = so, se
-else:
- def become_daemon(our_home_dir='.', out_log=None, err_log=None, umask=022):
- """
- If we're not running under a POSIX system, just simulate the daemon
- mode by doing redirections and directory changing.
- """
- os.chdir(our_home_dir)
- os.umask(umask)
- sys.stdin.close()
- sys.stdout.close()
- sys.stderr.close()
- if err_log:
- sys.stderr = open(err_log, 'a', 0)
- else:
- sys.stderr = NullDevice()
- if out_log:
- sys.stdout = open(out_log, 'a', 0)
- else:
- sys.stdout = NullDevice()
-
- class NullDevice:
- "A writeable object that writes to nowhere -- like /dev/null."
- def write(self, s):
- pass
diff --git a/parts/django/django/utils/datastructures.py b/parts/django/django/utils/datastructures.py
deleted file mode 100644
index d73963f..0000000
--- a/parts/django/django/utils/datastructures.py
+++ /dev/null
@@ -1,473 +0,0 @@
-from types import GeneratorType
-
-from django.utils.copycompat import deepcopy
-
-
-class MergeDict(object):
- """
- A simple class for creating new "virtual" dictionaries that actually look
- up values in more than one dictionary, passed in the constructor.
-
- If a key appears in more than one of the given dictionaries, only the
- first occurrence will be used.
- """
- def __init__(self, *dicts):
- self.dicts = dicts
-
- def __getitem__(self, key):
- for dict_ in self.dicts:
- try:
- return dict_[key]
- except KeyError:
- pass
- raise KeyError
-
- def __copy__(self):
- return self.__class__(*self.dicts)
-
- def get(self, key, default=None):
- try:
- return self[key]
- except KeyError:
- return default
-
- def getlist(self, key):
- for dict_ in self.dicts:
- if key in dict_.keys():
- return dict_.getlist(key)
- return []
-
- def iteritems(self):
- seen = set()
- for dict_ in self.dicts:
- for item in dict_.iteritems():
- k, v = item
- if k in seen:
- continue
- seen.add(k)
- yield item
-
- def iterkeys(self):
- for k, v in self.iteritems():
- yield k
-
- def itervalues(self):
- for k, v in self.iteritems():
- yield v
-
- def items(self):
- return list(self.iteritems())
-
- def keys(self):
- return list(self.iterkeys())
-
- def values(self):
- return list(self.itervalues())
-
- def has_key(self, key):
- for dict_ in self.dicts:
- if key in dict_:
- return True
- return False
-
- __contains__ = has_key
- __iter__ = iterkeys
-
- def copy(self):
- """Returns a copy of this object."""
- return self.__copy__()
-
-class SortedDict(dict):
- """
- A dictionary that keeps its keys in the order in which they're inserted.
- """
- def __new__(cls, *args, **kwargs):
- instance = super(SortedDict, cls).__new__(cls, *args, **kwargs)
- instance.keyOrder = []
- return instance
-
- def __init__(self, data=None):
- if data is None:
- data = {}
- elif isinstance(data, GeneratorType):
- # Unfortunately we need to be able to read a generator twice. Once
- # to get the data into self with our super().__init__ call and a
- # second time to setup keyOrder correctly
- data = list(data)
- super(SortedDict, self).__init__(data)
- if isinstance(data, dict):
- self.keyOrder = data.keys()
- else:
- self.keyOrder = []
- seen = set()
- for key, value in data:
- if key not in seen:
- self.keyOrder.append(key)
- seen.add(key)
-
- def __deepcopy__(self, memo):
- return self.__class__([(key, deepcopy(value, memo))
- for key, value in self.iteritems()])
-
- def __setitem__(self, key, value):
- if key not in self:
- self.keyOrder.append(key)
- super(SortedDict, self).__setitem__(key, value)
-
- def __delitem__(self, key):
- super(SortedDict, self).__delitem__(key)
- self.keyOrder.remove(key)
-
- def __iter__(self):
- return iter(self.keyOrder)
-
- def pop(self, k, *args):
- result = super(SortedDict, self).pop(k, *args)
- try:
- self.keyOrder.remove(k)
- except ValueError:
- # Key wasn't in the dictionary in the first place. No problem.
- pass
- return result
-
- def popitem(self):
- result = super(SortedDict, self).popitem()
- self.keyOrder.remove(result[0])
- return result
-
- def items(self):
- return zip(self.keyOrder, self.values())
-
- def iteritems(self):
- for key in self.keyOrder:
- yield key, self[key]
-
- def keys(self):
- return self.keyOrder[:]
-
- def iterkeys(self):
- return iter(self.keyOrder)
-
- def values(self):
- return map(self.__getitem__, self.keyOrder)
-
- def itervalues(self):
- for key in self.keyOrder:
- yield self[key]
-
- def update(self, dict_):
- for k, v in dict_.iteritems():
- self[k] = v
-
- def setdefault(self, key, default):
- if key not in self:
- self.keyOrder.append(key)
- return super(SortedDict, self).setdefault(key, default)
-
- def value_for_index(self, index):
- """Returns the value of the item at the given zero-based index."""
- return self[self.keyOrder[index]]
-
- def insert(self, index, key, value):
- """Inserts the key, value pair before the item with the given index."""
- if key in self.keyOrder:
- n = self.keyOrder.index(key)
- del self.keyOrder[n]
- if n < index:
- index -= 1
- self.keyOrder.insert(index, key)
- super(SortedDict, self).__setitem__(key, value)
-
- def copy(self):
- """Returns a copy of this object."""
- # This way of initializing the copy means it works for subclasses, too.
- obj = self.__class__(self)
- obj.keyOrder = self.keyOrder[:]
- return obj
-
- def __repr__(self):
- """
- Replaces the normal dict.__repr__ with a version that returns the keys
- in their sorted order.
- """
- return '{%s}' % ', '.join(['%r: %r' % (k, v) for k, v in self.items()])
-
- def clear(self):
- super(SortedDict, self).clear()
- self.keyOrder = []
-
-class MultiValueDictKeyError(KeyError):
- pass
-
-class MultiValueDict(dict):
- """
- A subclass of dictionary customized to handle multiple values for the
- same key.
-
- >>> d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']})
- >>> d['name']
- 'Simon'
- >>> d.getlist('name')
- ['Adrian', 'Simon']
- >>> d.get('lastname', 'nonexistent')
- 'nonexistent'
- >>> d.setlist('lastname', ['Holovaty', 'Willison'])
-
- This class exists to solve the irritating problem raised by cgi.parse_qs,
- which returns a list for every key, even though most Web forms submit
- single name-value pairs.
- """
- def __init__(self, key_to_list_mapping=()):
- super(MultiValueDict, self).__init__(key_to_list_mapping)
-
- def __repr__(self):
- return "<%s: %s>" % (self.__class__.__name__,
- super(MultiValueDict, self).__repr__())
-
- def __getitem__(self, key):
- """
- Returns the last data value for this key, or [] if it's an empty list;
- raises KeyError if not found.
- """
- try:
- list_ = super(MultiValueDict, self).__getitem__(key)
- except KeyError:
- raise MultiValueDictKeyError("Key %r not found in %r" % (key, self))
- try:
- return list_[-1]
- except IndexError:
- return []
-
- def __setitem__(self, key, value):
- super(MultiValueDict, self).__setitem__(key, [value])
-
- def __copy__(self):
- return self.__class__(super(MultiValueDict, self).items())
-
- def __deepcopy__(self, memo=None):
- import django.utils.copycompat as copy
- if memo is None:
- memo = {}
- result = self.__class__()
- memo[id(self)] = result
- for key, value in dict.items(self):
- dict.__setitem__(result, copy.deepcopy(key, memo),
- copy.deepcopy(value, memo))
- return result
-
- def __getstate__(self):
- obj_dict = self.__dict__.copy()
- obj_dict['_data'] = dict([(k, self.getlist(k)) for k in self])
- return obj_dict
-
- def __setstate__(self, obj_dict):
- data = obj_dict.pop('_data', {})
- for k, v in data.items():
- self.setlist(k, v)
- self.__dict__.update(obj_dict)
-
- def get(self, key, default=None):
- """
- Returns the last data value for the passed key. If key doesn't exist
- or value is an empty list, then default is returned.
- """
- try:
- val = self[key]
- except KeyError:
- return default
- if val == []:
- return default
- return val
-
- def getlist(self, key):
- """
- Returns the list of values for the passed key. If key doesn't exist,
- then an empty list is returned.
- """
- try:
- return super(MultiValueDict, self).__getitem__(key)
- except KeyError:
- return []
-
- def setlist(self, key, list_):
- super(MultiValueDict, self).__setitem__(key, list_)
-
- def setdefault(self, key, default=None):
- if key not in self:
- self[key] = default
- return self[key]
-
- def setlistdefault(self, key, default_list=()):
- if key not in self:
- self.setlist(key, default_list)
- return self.getlist(key)
-
- def appendlist(self, key, value):
- """Appends an item to the internal list associated with key."""
- self.setlistdefault(key, [])
- super(MultiValueDict, self).__setitem__(key, self.getlist(key) + [value])
-
- def items(self):
- """
- Returns a list of (key, value) pairs, where value is the last item in
- the list associated with the key.
- """
- return [(key, self[key]) for key in self.keys()]
-
- def iteritems(self):
- """
- Yields (key, value) pairs, where value is the last item in the list
- associated with the key.
- """
- for key in self.keys():
- yield (key, self[key])
-
- def lists(self):
- """Returns a list of (key, list) pairs."""
- return super(MultiValueDict, self).items()
-
- def iterlists(self):
- """Yields (key, list) pairs."""
- return super(MultiValueDict, self).iteritems()
-
- def values(self):
- """Returns a list of the last value on every key list."""
- return [self[key] for key in self.keys()]
-
- def itervalues(self):
- """Yield the last value on every key list."""
- for key in self.iterkeys():
- yield self[key]
-
- def copy(self):
- """Returns a copy of this object."""
- return self.__deepcopy__()
-
- def update(self, *args, **kwargs):
- """
- update() extends rather than replaces existing key lists.
- Also accepts keyword args.
- """
- if len(args) > 1:
- raise TypeError("update expected at most 1 arguments, got %d" % len(args))
- if args:
- other_dict = args[0]
- if isinstance(other_dict, MultiValueDict):
- for key, value_list in other_dict.lists():
- self.setlistdefault(key, []).extend(value_list)
- else:
- try:
- for key, value in other_dict.items():
- self.setlistdefault(key, []).append(value)
- except TypeError:
- raise ValueError("MultiValueDict.update() takes either a MultiValueDict or dictionary")
- for key, value in kwargs.iteritems():
- self.setlistdefault(key, []).append(value)
-
-class DotExpandedDict(dict):
- """
- A special dictionary constructor that takes a dictionary in which the keys
- may contain dots to specify inner dictionaries. It's confusing, but this
- example should make sense.
-
- >>> d = DotExpandedDict({'person.1.firstname': ['Simon'], \
- 'person.1.lastname': ['Willison'], \
- 'person.2.firstname': ['Adrian'], \
- 'person.2.lastname': ['Holovaty']})
- >>> d
- {'person': {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}}
- >>> d['person']
- {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}
- >>> d['person']['1']
- {'lastname': ['Willison'], 'firstname': ['Simon']}
-
- # Gotcha: Results are unpredictable if the dots are "uneven":
- >>> DotExpandedDict({'c.1': 2, 'c.2': 3, 'c': 1})
- {'c': 1}
- """
- def __init__(self, key_to_list_mapping):
- for k, v in key_to_list_mapping.items():
- current = self
- bits = k.split('.')
- for bit in bits[:-1]:
- current = current.setdefault(bit, {})
- # Now assign value to current position
- try:
- current[bits[-1]] = v
- except TypeError: # Special-case if current isn't a dict.
- current = {bits[-1]: v}
-
-class ImmutableList(tuple):
- """
- A tuple-like object that raises useful errors when it is asked to mutate.
-
- Example::
-
- >>> a = ImmutableList(range(5), warning="You cannot mutate this.")
- >>> a[3] = '4'
- Traceback (most recent call last):
- ...
- AttributeError: You cannot mutate this.
- """
-
- def __new__(cls, *args, **kwargs):
- if 'warning' in kwargs:
- warning = kwargs['warning']
- del kwargs['warning']
- else:
- warning = 'ImmutableList object is immutable.'
- self = tuple.__new__(cls, *args, **kwargs)
- self.warning = warning
- return self
-
- def complain(self, *wargs, **kwargs):
- if isinstance(self.warning, Exception):
- raise self.warning
- else:
- raise AttributeError(self.warning)
-
- # All list mutation functions complain.
- __delitem__ = complain
- __delslice__ = complain
- __iadd__ = complain
- __imul__ = complain
- __setitem__ = complain
- __setslice__ = complain
- append = complain
- extend = complain
- insert = complain
- pop = complain
- remove = complain
- sort = complain
- reverse = complain
-
-class DictWrapper(dict):
- """
- Wraps accesses to a dictionary so that certain values (those starting with
- the specified prefix) are passed through a function before being returned.
- The prefix is removed before looking up the real value.
-
- Used by the SQL construction code to ensure that values are correctly
- quoted before being used.
- """
- def __init__(self, data, func, prefix):
- super(DictWrapper, self).__init__(data)
- self.func = func
- self.prefix = prefix
-
- def __getitem__(self, key):
- """
- Retrieves the real value after stripping the prefix string (if
- present). If the prefix is present, pass the value through self.func
- before returning, otherwise return the raw value.
- """
- if key.startswith(self.prefix):
- use_func = True
- key = key[len(self.prefix):]
- else:
- use_func = False
- value = super(DictWrapper, self).__getitem__(key)
- if use_func:
- return self.func(value)
- return value
-
diff --git a/parts/django/django/utils/dateformat.py b/parts/django/django/utils/dateformat.py
deleted file mode 100644
index efec5c3..0000000
--- a/parts/django/django/utils/dateformat.py
+++ /dev/null
@@ -1,286 +0,0 @@
-"""
-PHP date() style date formatting
-See http://www.php.net/date for format strings
-
-Usage:
->>> import datetime
->>> d = datetime.datetime.now()
->>> df = DateFormat(d)
->>> print df.format('jS F Y H:i')
-7th October 2003 11:39
->>>
-"""
-
-import re
-import time
-import calendar
-from django.utils.dates import MONTHS, MONTHS_3, MONTHS_AP, WEEKDAYS, WEEKDAYS_ABBR
-from django.utils.tzinfo import LocalTimezone
-from django.utils.translation import ugettext as _
-from django.utils.encoding import force_unicode
-
-re_formatchars = re.compile(r'(?<!\\)([aAbBcdDfFgGhHiIjlLmMnNOPrsStTUuwWyYzZ])')
-re_escaped = re.compile(r'\\(.)')
-
-class Formatter(object):
- def format(self, formatstr):
- pieces = []
- for i, piece in enumerate(re_formatchars.split(force_unicode(formatstr))):
- if i % 2:
- pieces.append(force_unicode(getattr(self, piece)()))
- elif piece:
- pieces.append(re_escaped.sub(r'\1', piece))
- return u''.join(pieces)
-
-class TimeFormat(Formatter):
- def __init__(self, t):
- self.data = t
-
- def a(self):
- "'a.m.' or 'p.m.'"
- if self.data.hour > 11:
- return _('p.m.')
- return _('a.m.')
-
- def A(self):
- "'AM' or 'PM'"
- if self.data.hour > 11:
- return _('PM')
- return _('AM')
-
- def B(self):
- "Swatch Internet time"
- raise NotImplementedError
-
- def f(self):
- """
- Time, in 12-hour hours and minutes, with minutes left off if they're
- zero.
- Examples: '1', '1:30', '2:05', '2'
- Proprietary extension.
- """
- if self.data.minute == 0:
- return self.g()
- return u'%s:%s' % (self.g(), self.i())
-
- def g(self):
- "Hour, 12-hour format without leading zeros; i.e. '1' to '12'"
- if self.data.hour == 0:
- return 12
- if self.data.hour > 12:
- return self.data.hour - 12
- return self.data.hour
-
- def G(self):
- "Hour, 24-hour format without leading zeros; i.e. '0' to '23'"
- return self.data.hour
-
- def h(self):
- "Hour, 12-hour format; i.e. '01' to '12'"
- return u'%02d' % self.g()
-
- def H(self):
- "Hour, 24-hour format; i.e. '00' to '23'"
- return u'%02d' % self.G()
-
- def i(self):
- "Minutes; i.e. '00' to '59'"
- return u'%02d' % self.data.minute
-
- def P(self):
- """
- Time, in 12-hour hours, minutes and 'a.m.'/'p.m.', with minutes left off
- if they're zero and the strings 'midnight' and 'noon' if appropriate.
- Examples: '1 a.m.', '1:30 p.m.', 'midnight', 'noon', '12:30 p.m.'
- Proprietary extension.
- """
- if self.data.minute == 0 and self.data.hour == 0:
- return _('midnight')
- if self.data.minute == 0 and self.data.hour == 12:
- return _('noon')
- return u'%s %s' % (self.f(), self.a())
-
- def s(self):
- "Seconds; i.e. '00' to '59'"
- return u'%02d' % self.data.second
-
- def u(self):
- "Microseconds"
- return self.data.microsecond
-
-
-class DateFormat(TimeFormat):
- year_days = [None, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
-
- def __init__(self, dt):
- # Accepts either a datetime or date object.
- self.data = dt
- self.timezone = getattr(dt, 'tzinfo', None)
- if hasattr(self.data, 'hour') and not self.timezone:
- self.timezone = LocalTimezone(dt)
-
- def b(self):
- "Month, textual, 3 letters, lowercase; e.g. 'jan'"
- return MONTHS_3[self.data.month]
-
- def c(self):
- """
- ISO 8601 Format
- Example : '2008-01-02T10:30:00.000123'
- """
- return self.data.isoformat()
-
- def d(self):
- "Day of the month, 2 digits with leading zeros; i.e. '01' to '31'"
- return u'%02d' % self.data.day
-
- def D(self):
- "Day of the week, textual, 3 letters; e.g. 'Fri'"
- return WEEKDAYS_ABBR[self.data.weekday()]
-
- def F(self):
- "Month, textual, long; e.g. 'January'"
- return MONTHS[self.data.month]
-
- def I(self):
- "'1' if Daylight Savings Time, '0' otherwise."
- if self.timezone and self.timezone.dst(self.data):
- return u'1'
- else:
- return u'0'
-
- def j(self):
- "Day of the month without leading zeros; i.e. '1' to '31'"
- return self.data.day
-
- def l(self):
- "Day of the week, textual, long; e.g. 'Friday'"
- return WEEKDAYS[self.data.weekday()]
-
- def L(self):
- "Boolean for whether it is a leap year; i.e. True or False"
- return calendar.isleap(self.data.year)
-
- def m(self):
- "Month; i.e. '01' to '12'"
- return u'%02d' % self.data.month
-
- def M(self):
- "Month, textual, 3 letters; e.g. 'Jan'"
- return MONTHS_3[self.data.month].title()
-
- def n(self):
- "Month without leading zeros; i.e. '1' to '12'"
- return self.data.month
-
- def N(self):
- "Month abbreviation in Associated Press style. Proprietary extension."
- return MONTHS_AP[self.data.month]
-
- def O(self):
- "Difference to Greenwich time in hours; e.g. '+0200'"
- seconds = self.Z()
- return u"%+03d%02d" % (seconds // 3600, (seconds // 60) % 60)
-
- def r(self):
- "RFC 2822 formatted date; e.g. 'Thu, 21 Dec 2000 16:01:07 +0200'"
- return self.format('D, j M Y H:i:s O')
-
- def S(self):
- "English ordinal suffix for the day of the month, 2 characters; i.e. 'st', 'nd', 'rd' or 'th'"
- if self.data.day in (11, 12, 13): # Special case
- return u'th'
- last = self.data.day % 10
- if last == 1:
- return u'st'
- if last == 2:
- return u'nd'
- if last == 3:
- return u'rd'
- return u'th'
-
- def t(self):
- "Number of days in the given month; i.e. '28' to '31'"
- return u'%02d' % calendar.monthrange(self.data.year, self.data.month)[1]
-
- def T(self):
- "Time zone of this machine; e.g. 'EST' or 'MDT'"
- name = self.timezone and self.timezone.tzname(self.data) or None
- if name is None:
- name = self.format('O')
- return unicode(name)
-
- def U(self):
- "Seconds since the Unix epoch (January 1 1970 00:00:00 GMT)"
- if getattr(self.data, 'tzinfo', None):
- return int(calendar.timegm(self.data.utctimetuple()))
- else:
- return int(time.mktime(self.data.timetuple()))
-
- def w(self):
- "Day of the week, numeric, i.e. '0' (Sunday) to '6' (Saturday)"
- return (self.data.weekday() + 1) % 7
-
- def W(self):
- "ISO-8601 week number of year, weeks starting on Monday"
- # Algorithm from http://www.personal.ecu.edu/mccartyr/ISOwdALG.txt
- week_number = None
- jan1_weekday = self.data.replace(month=1, day=1).weekday() + 1
- weekday = self.data.weekday() + 1
- day_of_year = self.z()
- if day_of_year <= (8 - jan1_weekday) and jan1_weekday > 4:
- if jan1_weekday == 5 or (jan1_weekday == 6 and calendar.isleap(self.data.year-1)):
- week_number = 53
- else:
- week_number = 52
- else:
- if calendar.isleap(self.data.year):
- i = 366
- else:
- i = 365
- if (i - day_of_year) < (4 - weekday):
- week_number = 1
- else:
- j = day_of_year + (7 - weekday) + (jan1_weekday - 1)
- week_number = j // 7
- if jan1_weekday > 4:
- week_number -= 1
- return week_number
-
- def y(self):
- "Year, 2 digits; e.g. '99'"
- return unicode(self.data.year)[2:]
-
- def Y(self):
- "Year, 4 digits; e.g. '1999'"
- return self.data.year
-
- def z(self):
- "Day of the year; i.e. '0' to '365'"
- doy = self.year_days[self.data.month] + self.data.day
- if self.L() and self.data.month > 2:
- doy += 1
- return doy
-
- def Z(self):
- """
- Time zone offset in seconds (i.e. '-43200' to '43200'). The offset for
- timezones west of UTC is always negative, and for those east of UTC is
- always positive.
- """
- if not self.timezone:
- return 0
- offset = self.timezone.utcoffset(self.data)
- # Only days can be negative, so negative offsets have days=-1 and
- # seconds positive. Positive offsets have days=0
- return offset.days * 86400 + offset.seconds
-
-def format(value, format_string):
- "Convenience function"
- df = DateFormat(value)
- return df.format(format_string)
-
-def time_format(value, format_string):
- "Convenience function"
- tf = TimeFormat(value)
- return tf.format(format_string)
diff --git a/parts/django/django/utils/dates.py b/parts/django/django/utils/dates.py
deleted file mode 100644
index 4427af8..0000000
--- a/parts/django/django/utils/dates.py
+++ /dev/null
@@ -1,33 +0,0 @@
-"Commonly-used date structures"
-
-from django.utils.translation import ugettext_lazy as _
-
-WEEKDAYS = {
- 0:_('Monday'), 1:_('Tuesday'), 2:_('Wednesday'), 3:_('Thursday'), 4:_('Friday'),
- 5:_('Saturday'), 6:_('Sunday')
-}
-WEEKDAYS_ABBR = {
- 0:_('Mon'), 1:_('Tue'), 2:_('Wed'), 3:_('Thu'), 4:_('Fri'),
- 5:_('Sat'), 6:_('Sun')
-}
-WEEKDAYS_REV = {
- 'monday':0, 'tuesday':1, 'wednesday':2, 'thursday':3, 'friday':4,
- 'saturday':5, 'sunday':6
-}
-MONTHS = {
- 1:_('January'), 2:_('February'), 3:_('March'), 4:_('April'), 5:_('May'), 6:_('June'),
- 7:_('July'), 8:_('August'), 9:_('September'), 10:_('October'), 11:_('November'),
- 12:_('December')
-}
-MONTHS_3 = {
- 1:_('jan'), 2:_('feb'), 3:_('mar'), 4:_('apr'), 5:_('may'), 6:_('jun'),
- 7:_('jul'), 8:_('aug'), 9:_('sep'), 10:_('oct'), 11:_('nov'), 12:_('dec')
-}
-MONTHS_3_REV = {
- 'jan':1, 'feb':2, 'mar':3, 'apr':4, 'may':5, 'jun':6, 'jul':7, 'aug':8,
- 'sep':9, 'oct':10, 'nov':11, 'dec':12
-}
-MONTHS_AP = { # month names in Associated Press style
- 1:_('Jan.'), 2:_('Feb.'), 3:_('March'), 4:_('April'), 5:_('May'), 6:_('June'), 7:_('July'),
- 8:_('Aug.'), 9:_('Sept.'), 10:_('Oct.'), 11:_('Nov.'), 12:_('Dec.')
-}
diff --git a/parts/django/django/utils/datetime_safe.py b/parts/django/django/utils/datetime_safe.py
deleted file mode 100644
index b634888..0000000
--- a/parts/django/django/utils/datetime_safe.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# Python's datetime strftime doesn't handle dates before 1900.
-# These classes override date and datetime to support the formatting of a date
-# through its full "proleptic Gregorian" date range.
-#
-# Based on code submitted to comp.lang.python by Andrew Dalke
-#
-# >>> datetime_safe.date(1850, 8, 2).strftime("%Y/%m/%d was a %A")
-# '1850/08/02 was a Friday'
-
-from datetime import date as real_date, datetime as real_datetime
-import re
-import time
-
-class date(real_date):
- def strftime(self, fmt):
- return strftime(self, fmt)
-
-class datetime(real_datetime):
- def strftime(self, fmt):
- return strftime(self, fmt)
-
- def combine(self, date, time):
- return datetime(date.year, date.month, date.day, time.hour, time.minute, time.microsecond, time.tzinfo)
-
- def date(self):
- return date(self.year, self.month, self.day)
-
-def new_date(d):
- "Generate a safe date from a datetime.date object."
- return date(d.year, d.month, d.day)
-
-def new_datetime(d):
- """
- Generate a safe datetime from a datetime.date or datetime.datetime object.
- """
- kw = [d.year, d.month, d.day]
- if isinstance(d, real_datetime):
- kw.extend([d.hour, d.minute, d.second, d.microsecond, d.tzinfo])
- return datetime(*kw)
-
-# This library does not support strftime's "%s" or "%y" format strings.
-# Allowed if there's an even number of "%"s because they are escaped.
-_illegal_formatting = re.compile(r"((^|[^%])(%%)*%[sy])")
-
-def _findall(text, substr):
- # Also finds overlaps
- sites = []
- i = 0
- while 1:
- j = text.find(substr, i)
- if j == -1:
- break
- sites.append(j)
- i=j+1
- return sites
-
-def strftime(dt, fmt):
- if dt.year >= 1900:
- return super(type(dt), dt).strftime(fmt)
- illegal_formatting = _illegal_formatting.search(fmt)
- if illegal_formatting:
- raise TypeError("strftime of dates before 1900 does not handle" + illegal_formatting.group(0))
-
- year = dt.year
- # For every non-leap year century, advance by
- # 6 years to get into the 28-year repeat cycle
- delta = 2000 - year
- off = 6 * (delta // 100 + delta // 400)
- year = year + off
-
- # Move to around the year 2000
- year = year + ((2000 - year) // 28) * 28
- timetuple = dt.timetuple()
- s1 = time.strftime(fmt, (year,) + timetuple[1:])
- sites1 = _findall(s1, str(year))
-
- s2 = time.strftime(fmt, (year+28,) + timetuple[1:])
- sites2 = _findall(s2, str(year+28))
-
- sites = []
- for site in sites1:
- if site in sites2:
- sites.append(site)
-
- s = s1
- syear = "%04d" % (dt.year,)
- for site in sites:
- s = s[:site] + syear + s[site+4:]
- return s
diff --git a/parts/django/django/utils/decorators.py b/parts/django/django/utils/decorators.py
deleted file mode 100644
index ba27693..0000000
--- a/parts/django/django/utils/decorators.py
+++ /dev/null
@@ -1,90 +0,0 @@
-"Functions that help with dynamically creating decorators for views."
-
-import types
-try:
- from functools import wraps, update_wrapper, WRAPPER_ASSIGNMENTS
-except ImportError:
- from django.utils.functional import wraps, update_wrapper, WRAPPER_ASSIGNMENTS # Python 2.4 fallback.
-
-
-def method_decorator(decorator):
- """
- Converts a function decorator into a method decorator
- """
- def _dec(func):
- def _wrapper(self, *args, **kwargs):
- def bound_func(*args2, **kwargs2):
- return func(self, *args2, **kwargs2)
- # bound_func has the signature that 'decorator' expects i.e. no
- # 'self' argument, but it is a closure over self so it can call
- # 'func' correctly.
- return decorator(bound_func)(*args, **kwargs)
- return wraps(func)(_wrapper)
- update_wrapper(_dec, decorator)
- # Change the name to aid debugging.
- _dec.__name__ = 'method_decorator(%s)' % decorator.__name__
- return _dec
-
-
-def decorator_from_middleware_with_args(middleware_class):
- """
- Like decorator_from_middleware, but returns a function
- that accepts the arguments to be passed to the middleware_class.
- Use like::
-
- cache_page = decorator_from_middleware_with_args(CacheMiddleware)
- # ...
-
- @cache_page(3600)
- def my_view(request):
- # ...
- """
- return make_middleware_decorator(middleware_class)
-
-
-def decorator_from_middleware(middleware_class):
- """
- Given a middleware class (not an instance), returns a view decorator. This
- lets you use middleware functionality on a per-view basis. The middleware
- is created with no params passed.
- """
- return make_middleware_decorator(middleware_class)()
-
-
-def available_attrs(fn):
- """
- Return the list of functools-wrappable attributes on a callable.
- This is required as a workaround for http://bugs.python.org/issue3445.
- """
- return tuple(a for a in WRAPPER_ASSIGNMENTS if hasattr(fn, a))
-
-
-def make_middleware_decorator(middleware_class):
- def _make_decorator(*m_args, **m_kwargs):
- middleware = middleware_class(*m_args, **m_kwargs)
- def _decorator(view_func):
- def _wrapped_view(request, *args, **kwargs):
- if hasattr(middleware, 'process_request'):
- result = middleware.process_request(request)
- if result is not None:
- return result
- if hasattr(middleware, 'process_view'):
- result = middleware.process_view(request, view_func, args, kwargs)
- if result is not None:
- return result
- try:
- response = view_func(request, *args, **kwargs)
- except Exception, e:
- if hasattr(middleware, 'process_exception'):
- result = middleware.process_exception(request, e)
- if result is not None:
- return result
- raise
- if hasattr(middleware, 'process_response'):
- result = middleware.process_response(request, response)
- if result is not None:
- return result
- return response
- return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view)
- return _decorator
- return _make_decorator
diff --git a/parts/django/django/utils/encoding.py b/parts/django/django/utils/encoding.py
deleted file mode 100644
index e2d7249..0000000
--- a/parts/django/django/utils/encoding.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import types
-import urllib
-import locale
-import datetime
-import codecs
-from decimal import Decimal
-
-from django.utils.functional import Promise
-
-class DjangoUnicodeDecodeError(UnicodeDecodeError):
- def __init__(self, obj, *args):
- self.obj = obj
- UnicodeDecodeError.__init__(self, *args)
-
- def __str__(self):
- original = UnicodeDecodeError.__str__(self)
- return '%s. You passed in %r (%s)' % (original, self.obj,
- type(self.obj))
-
-class StrAndUnicode(object):
- """
- A class whose __str__ returns its __unicode__ as a UTF-8 bytestring.
-
- Useful as a mix-in.
- """
- def __str__(self):
- return self.__unicode__().encode('utf-8')
-
-def smart_unicode(s, encoding='utf-8', strings_only=False, errors='strict'):
- """
- Returns a unicode object representing 's'. Treats bytestrings using the
- 'encoding' codec.
-
- If strings_only is True, don't convert (some) non-string-like objects.
- """
- if isinstance(s, Promise):
- # The input is the result of a gettext_lazy() call.
- return s
- return force_unicode(s, encoding, strings_only, errors)
-
-def is_protected_type(obj):
- """Determine if the object instance is of a protected type.
-
- Objects of protected types are preserved as-is when passed to
- force_unicode(strings_only=True).
- """
- return isinstance(obj, (
- types.NoneType,
- int, long,
- datetime.datetime, datetime.date, datetime.time,
- float, Decimal)
- )
-
-def force_unicode(s, encoding='utf-8', strings_only=False, errors='strict'):
- """
- Similar to smart_unicode, except that lazy instances are resolved to
- strings, rather than kept as lazy objects.
-
- If strings_only is True, don't convert (some) non-string-like objects.
- """
- if strings_only and is_protected_type(s):
- return s
- try:
- if not isinstance(s, basestring,):
- if hasattr(s, '__unicode__'):
- s = unicode(s)
- else:
- try:
- s = unicode(str(s), encoding, errors)
- except UnicodeEncodeError:
- if not isinstance(s, Exception):
- raise
- # If we get to here, the caller has passed in an Exception
- # subclass populated with non-ASCII data without special
- # handling to display as a string. We need to handle this
- # without raising a further exception. We do an
- # approximation to what the Exception's standard str()
- # output should be.
- s = ' '.join([force_unicode(arg, encoding, strings_only,
- errors) for arg in s])
- elif not isinstance(s, unicode):
- # Note: We use .decode() here, instead of unicode(s, encoding,
- # errors), so that if s is a SafeString, it ends up being a
- # SafeUnicode at the end.
- s = s.decode(encoding, errors)
- except UnicodeDecodeError, e:
- if not isinstance(s, Exception):
- raise DjangoUnicodeDecodeError(s, *e.args)
- else:
- # If we get to here, the caller has passed in an Exception
- # subclass populated with non-ASCII bytestring data without a
- # working unicode method. Try to handle this without raising a
- # further exception by individually forcing the exception args
- # to unicode.
- s = ' '.join([force_unicode(arg, encoding, strings_only,
- errors) for arg in s])
- return s
-
-def smart_str(s, encoding='utf-8', strings_only=False, errors='strict'):
- """
- Returns a bytestring version of 's', encoded as specified in 'encoding'.
-
- If strings_only is True, don't convert (some) non-string-like objects.
- """
- if strings_only and isinstance(s, (types.NoneType, int)):
- return s
- if isinstance(s, Promise):
- return unicode(s).encode(encoding, errors)
- elif not isinstance(s, basestring):
- try:
- return str(s)
- except UnicodeEncodeError:
- if isinstance(s, Exception):
- # An Exception subclass containing non-ASCII data that doesn't
- # know how to print itself properly. We shouldn't raise a
- # further exception.
- return ' '.join([smart_str(arg, encoding, strings_only,
- errors) for arg in s])
- return unicode(s).encode(encoding, errors)
- elif isinstance(s, unicode):
- return s.encode(encoding, errors)
- elif s and encoding != 'utf-8':
- return s.decode('utf-8', errors).encode(encoding, errors)
- else:
- return s
-
-def iri_to_uri(iri):
- """
- Convert an Internationalized Resource Identifier (IRI) portion to a URI
- portion that is suitable for inclusion in a URL.
-
- This is the algorithm from section 3.1 of RFC 3987. However, since we are
- assuming input is either UTF-8 or unicode already, we can simplify things a
- little from the full method.
-
- Returns an ASCII string containing the encoded result.
- """
- # The list of safe characters here is constructed from the "reserved" and
- # "unreserved" characters specified in sections 2.2 and 2.3 of RFC 3986:
- # reserved = gen-delims / sub-delims
- # gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- # sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- # / "*" / "+" / "," / ";" / "="
- # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- # Of the unreserved characters, urllib.quote already considers all but
- # the ~ safe.
- # The % character is also added to the list of safe characters here, as the
- # end of section 3.1 of RFC 3987 specifically mentions that % must not be
- # converted.
- if iri is None:
- return iri
- return urllib.quote(smart_str(iri), safe="/#%[]=:;$&()+,!?*@'~")
-
-
-# The encoding of the default system locale but falls back to the
-# given fallback encoding if the encoding is unsupported by python or could
-# not be determined. See tickets #10335 and #5846
-try:
- DEFAULT_LOCALE_ENCODING = locale.getdefaultlocale()[1] or 'ascii'
- codecs.lookup(DEFAULT_LOCALE_ENCODING)
-except:
- DEFAULT_LOCALE_ENCODING = 'ascii'
diff --git a/parts/django/django/utils/feedgenerator.py b/parts/django/django/utils/feedgenerator.py
deleted file mode 100644
index af16769..0000000
--- a/parts/django/django/utils/feedgenerator.py
+++ /dev/null
@@ -1,373 +0,0 @@
-"""
-Syndication feed generation library -- used for generating RSS, etc.
-
-Sample usage:
-
->>> from django.utils import feedgenerator
->>> feed = feedgenerator.Rss201rev2Feed(
-... title=u"Poynter E-Media Tidbits",
-... link=u"http://www.poynter.org/column.asp?id=31",
-... description=u"A group Weblog by the sharpest minds in online media/journalism/publishing.",
-... language=u"en",
-... )
->>> feed.add_item(
-... title="Hello",
-... link=u"http://www.holovaty.com/test/",
-... description="Testing."
-... )
->>> fp = open('test.rss', 'w')
->>> feed.write(fp, 'utf-8')
->>> fp.close()
-
-For definitions of the different versions of RSS, see:
-http://diveintomark.org/archives/2004/02/04/incompatible-rss
-"""
-
-import datetime
-import urlparse
-from django.utils.xmlutils import SimplerXMLGenerator
-from django.utils.encoding import force_unicode, iri_to_uri
-
-def rfc2822_date(date):
- # We do this ourselves to be timezone aware, email.Utils is not tz aware.
- if date.tzinfo:
- time_str = date.strftime('%a, %d %b %Y %H:%M:%S ')
- offset = date.tzinfo.utcoffset(date)
- timezone = (offset.days * 24 * 60) + (offset.seconds / 60)
- hour, minute = divmod(timezone, 60)
- return time_str + "%+03d%02d" % (hour, minute)
- else:
- return date.strftime('%a, %d %b %Y %H:%M:%S -0000')
-
-def rfc3339_date(date):
- if date.tzinfo:
- time_str = date.strftime('%Y-%m-%dT%H:%M:%S')
- offset = date.tzinfo.utcoffset(date)
- timezone = (offset.days * 24 * 60) + (offset.seconds / 60)
- hour, minute = divmod(timezone, 60)
- return time_str + "%+03d:%02d" % (hour, minute)
- else:
- return date.strftime('%Y-%m-%dT%H:%M:%SZ')
-
-def get_tag_uri(url, date):
- """
- Creates a TagURI.
-
- See http://diveintomark.org/archives/2004/05/28/howto-atom-id
- """
- url_split = urlparse.urlparse(url)
-
- # Python 2.4 didn't have named attributes on split results or the hostname.
- hostname = getattr(url_split, 'hostname', url_split[1].split(':')[0])
- path = url_split[2]
- fragment = url_split[5]
-
- d = ''
- if date is not None:
- d = ',%s' % date.strftime('%Y-%m-%d')
- return u'tag:%s%s:%s/%s' % (hostname, d, path, fragment)
-
-class SyndicationFeed(object):
- "Base class for all syndication feeds. Subclasses should provide write()"
- def __init__(self, title, link, description, language=None, author_email=None,
- author_name=None, author_link=None, subtitle=None, categories=None,
- feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs):
- to_unicode = lambda s: force_unicode(s, strings_only=True)
- if categories:
- categories = [force_unicode(c) for c in categories]
- if ttl is not None:
- # Force ints to unicode
- ttl = force_unicode(ttl)
- self.feed = {
- 'title': to_unicode(title),
- 'link': iri_to_uri(link),
- 'description': to_unicode(description),
- 'language': to_unicode(language),
- 'author_email': to_unicode(author_email),
- 'author_name': to_unicode(author_name),
- 'author_link': iri_to_uri(author_link),
- 'subtitle': to_unicode(subtitle),
- 'categories': categories or (),
- 'feed_url': iri_to_uri(feed_url),
- 'feed_copyright': to_unicode(feed_copyright),
- 'id': feed_guid or link,
- 'ttl': ttl,
- }
- self.feed.update(kwargs)
- self.items = []
-
- def add_item(self, title, link, description, author_email=None,
- author_name=None, author_link=None, pubdate=None, comments=None,
- unique_id=None, enclosure=None, categories=(), item_copyright=None,
- ttl=None, **kwargs):
- """
- Adds an item to the feed. All args are expected to be Python Unicode
- objects except pubdate, which is a datetime.datetime object, and
- enclosure, which is an instance of the Enclosure class.
- """
- to_unicode = lambda s: force_unicode(s, strings_only=True)
- if categories:
- categories = [to_unicode(c) for c in categories]
- if ttl is not None:
- # Force ints to unicode
- ttl = force_unicode(ttl)
- item = {
- 'title': to_unicode(title),
- 'link': iri_to_uri(link),
- 'description': to_unicode(description),
- 'author_email': to_unicode(author_email),
- 'author_name': to_unicode(author_name),
- 'author_link': iri_to_uri(author_link),
- 'pubdate': pubdate,
- 'comments': to_unicode(comments),
- 'unique_id': to_unicode(unique_id),
- 'enclosure': enclosure,
- 'categories': categories or (),
- 'item_copyright': to_unicode(item_copyright),
- 'ttl': ttl,
- }
- item.update(kwargs)
- self.items.append(item)
-
- def num_items(self):
- return len(self.items)
-
- def root_attributes(self):
- """
- Return extra attributes to place on the root (i.e. feed/channel) element.
- Called from write().
- """
- return {}
-
- def add_root_elements(self, handler):
- """
- Add elements in the root (i.e. feed/channel) element. Called
- from write().
- """
- pass
-
- def item_attributes(self, item):
- """
- Return extra attributes to place on each item (i.e. item/entry) element.
- """
- return {}
-
- def add_item_elements(self, handler, item):
- """
- Add elements on each item (i.e. item/entry) element.
- """
- pass
-
- def write(self, outfile, encoding):
- """
- Outputs the feed in the given encoding to outfile, which is a file-like
- object. Subclasses should override this.
- """
- raise NotImplementedError
-
- def writeString(self, encoding):
- """
- Returns the feed in the given encoding as a string.
- """
- from StringIO import StringIO
- s = StringIO()
- self.write(s, encoding)
- return s.getvalue()
-
- def latest_post_date(self):
- """
- Returns the latest item's pubdate. If none of them have a pubdate,
- this returns the current date/time.
- """
- updates = [i['pubdate'] for i in self.items if i['pubdate'] is not None]
- if len(updates) > 0:
- updates.sort()
- return updates[-1]
- else:
- return datetime.datetime.now()
-
-class Enclosure(object):
- "Represents an RSS enclosure"
- def __init__(self, url, length, mime_type):
- "All args are expected to be Python Unicode objects"
- self.length, self.mime_type = length, mime_type
- self.url = iri_to_uri(url)
-
-class RssFeed(SyndicationFeed):
- mime_type = 'application/rss+xml'
- def write(self, outfile, encoding):
- handler = SimplerXMLGenerator(outfile, encoding)
- handler.startDocument()
- handler.startElement(u"rss", self.rss_attributes())
- handler.startElement(u"channel", self.root_attributes())
- self.add_root_elements(handler)
- self.write_items(handler)
- self.endChannelElement(handler)
- handler.endElement(u"rss")
-
- def rss_attributes(self):
- return {u"version": self._version,
- u"xmlns:atom": u"http://www.w3.org/2005/Atom"}
-
- def write_items(self, handler):
- for item in self.items:
- handler.startElement(u'item', self.item_attributes(item))
- self.add_item_elements(handler, item)
- handler.endElement(u"item")
-
- def add_root_elements(self, handler):
- handler.addQuickElement(u"title", self.feed['title'])
- handler.addQuickElement(u"link", self.feed['link'])
- handler.addQuickElement(u"description", self.feed['description'])
- handler.addQuickElement(u"atom:link", None, {u"rel": u"self", u"href": self.feed['feed_url']})
- if self.feed['language'] is not None:
- handler.addQuickElement(u"language", self.feed['language'])
- for cat in self.feed['categories']:
- handler.addQuickElement(u"category", cat)
- if self.feed['feed_copyright'] is not None:
- handler.addQuickElement(u"copyright", self.feed['feed_copyright'])
- handler.addQuickElement(u"lastBuildDate", rfc2822_date(self.latest_post_date()).decode('utf-8'))
- if self.feed['ttl'] is not None:
- handler.addQuickElement(u"ttl", self.feed['ttl'])
-
- def endChannelElement(self, handler):
- handler.endElement(u"channel")
-
-class RssUserland091Feed(RssFeed):
- _version = u"0.91"
- def add_item_elements(self, handler, item):
- handler.addQuickElement(u"title", item['title'])
- handler.addQuickElement(u"link", item['link'])
- if item['description'] is not None:
- handler.addQuickElement(u"description", item['description'])
-
-class Rss201rev2Feed(RssFeed):
- # Spec: http://blogs.law.harvard.edu/tech/rss
- _version = u"2.0"
- def add_item_elements(self, handler, item):
- handler.addQuickElement(u"title", item['title'])
- handler.addQuickElement(u"link", item['link'])
- if item['description'] is not None:
- handler.addQuickElement(u"description", item['description'])
-
- # Author information.
- if item["author_name"] and item["author_email"]:
- handler.addQuickElement(u"author", "%s (%s)" % \
- (item['author_email'], item['author_name']))
- elif item["author_email"]:
- handler.addQuickElement(u"author", item["author_email"])
- elif item["author_name"]:
- handler.addQuickElement(u"dc:creator", item["author_name"], {u"xmlns:dc": u"http://purl.org/dc/elements/1.1/"})
-
- if item['pubdate'] is not None:
- handler.addQuickElement(u"pubDate", rfc2822_date(item['pubdate']).decode('utf-8'))
- if item['comments'] is not None:
- handler.addQuickElement(u"comments", item['comments'])
- if item['unique_id'] is not None:
- handler.addQuickElement(u"guid", item['unique_id'])
- if item['ttl'] is not None:
- handler.addQuickElement(u"ttl", item['ttl'])
-
- # Enclosure.
- if item['enclosure'] is not None:
- handler.addQuickElement(u"enclosure", '',
- {u"url": item['enclosure'].url, u"length": item['enclosure'].length,
- u"type": item['enclosure'].mime_type})
-
- # Categories.
- for cat in item['categories']:
- handler.addQuickElement(u"category", cat)
-
-class Atom1Feed(SyndicationFeed):
- # Spec: http://atompub.org/2005/07/11/draft-ietf-atompub-format-10.html
- mime_type = 'application/atom+xml'
- ns = u"http://www.w3.org/2005/Atom"
-
- def write(self, outfile, encoding):
- handler = SimplerXMLGenerator(outfile, encoding)
- handler.startDocument()
- handler.startElement(u'feed', self.root_attributes())
- self.add_root_elements(handler)
- self.write_items(handler)
- handler.endElement(u"feed")
-
- def root_attributes(self):
- if self.feed['language'] is not None:
- return {u"xmlns": self.ns, u"xml:lang": self.feed['language']}
- else:
- return {u"xmlns": self.ns}
-
- def add_root_elements(self, handler):
- handler.addQuickElement(u"title", self.feed['title'])
- handler.addQuickElement(u"link", "", {u"rel": u"alternate", u"href": self.feed['link']})
- if self.feed['feed_url'] is not None:
- handler.addQuickElement(u"link", "", {u"rel": u"self", u"href": self.feed['feed_url']})
- handler.addQuickElement(u"id", self.feed['id'])
- handler.addQuickElement(u"updated", rfc3339_date(self.latest_post_date()).decode('utf-8'))
- if self.feed['author_name'] is not None:
- handler.startElement(u"author", {})
- handler.addQuickElement(u"name", self.feed['author_name'])
- if self.feed['author_email'] is not None:
- handler.addQuickElement(u"email", self.feed['author_email'])
- if self.feed['author_link'] is not None:
- handler.addQuickElement(u"uri", self.feed['author_link'])
- handler.endElement(u"author")
- if self.feed['subtitle'] is not None:
- handler.addQuickElement(u"subtitle", self.feed['subtitle'])
- for cat in self.feed['categories']:
- handler.addQuickElement(u"category", "", {u"term": cat})
- if self.feed['feed_copyright'] is not None:
- handler.addQuickElement(u"rights", self.feed['feed_copyright'])
-
- def write_items(self, handler):
- for item in self.items:
- handler.startElement(u"entry", self.item_attributes(item))
- self.add_item_elements(handler, item)
- handler.endElement(u"entry")
-
- def add_item_elements(self, handler, item):
- handler.addQuickElement(u"title", item['title'])
- handler.addQuickElement(u"link", u"", {u"href": item['link'], u"rel": u"alternate"})
- if item['pubdate'] is not None:
- handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8'))
-
- # Author information.
- if item['author_name'] is not None:
- handler.startElement(u"author", {})
- handler.addQuickElement(u"name", item['author_name'])
- if item['author_email'] is not None:
- handler.addQuickElement(u"email", item['author_email'])
- if item['author_link'] is not None:
- handler.addQuickElement(u"uri", item['author_link'])
- handler.endElement(u"author")
-
- # Unique ID.
- if item['unique_id'] is not None:
- unique_id = item['unique_id']
- else:
- unique_id = get_tag_uri(item['link'], item['pubdate'])
- handler.addQuickElement(u"id", unique_id)
-
- # Summary.
- if item['description'] is not None:
- handler.addQuickElement(u"summary", item['description'], {u"type": u"html"})
-
- # Enclosure.
- if item['enclosure'] is not None:
- handler.addQuickElement(u"link", '',
- {u"rel": u"enclosure",
- u"href": item['enclosure'].url,
- u"length": item['enclosure'].length,
- u"type": item['enclosure'].mime_type})
-
- # Categories.
- for cat in item['categories']:
- handler.addQuickElement(u"category", u"", {u"term": cat})
-
- # Rights.
- if item['item_copyright'] is not None:
- handler.addQuickElement(u"rights", item['item_copyright'])
-
-# This isolates the decision of what the system default is, so calling code can
-# do "feedgenerator.DefaultFeed" instead of "feedgenerator.Rss201rev2Feed".
-DefaultFeed = Rss201rev2Feed
diff --git a/parts/django/django/utils/formats.py b/parts/django/django/utils/formats.py
deleted file mode 100644
index 7b1d23d..0000000
--- a/parts/django/django/utils/formats.py
+++ /dev/null
@@ -1,147 +0,0 @@
-import decimal
-import datetime
-
-from django.conf import settings
-from django.utils.translation import get_language, to_locale, check_for_language
-from django.utils.importlib import import_module
-from django.utils.encoding import smart_str
-from django.utils import dateformat, numberformat, datetime_safe
-from django.utils.safestring import mark_safe
-
-# format_cache is a mapping from (format_type, lang) to the format string.
-# By using the cache, it is possible to avoid running get_format_modules
-# repeatedly.
-_format_cache = {}
-_format_modules_cache = {}
-
-def iter_format_modules(lang):
- """
- Does the heavy lifting of finding format modules.
- """
- if check_for_language(lang) or settings.USE_L10N:
- format_locations = ['django.conf.locale.%s']
- if settings.FORMAT_MODULE_PATH:
- format_locations.append(settings.FORMAT_MODULE_PATH + '.%s')
- format_locations.reverse()
- locale = to_locale(lang)
- locales = set((locale, locale.split('_')[0]))
- for location in format_locations:
- for loc in locales:
- try:
- yield import_module('.formats', location % loc)
- except ImportError:
- pass
-
-def get_format_modules(reverse=False):
- """
- Returns an iterator over the format modules found
- """
- lang = get_language()
- modules = _format_modules_cache.setdefault(lang, list(iter_format_modules(lang)))
- if reverse:
- modules.reverse()
- return modules
-
-def get_format(format_type):
- """
- For a specific format type, returns the format for the current
- language (locale), defaults to the format in the settings.
- format_type is the name of the format, e.g. 'DATE_FORMAT'
- """
- format_type = smart_str(format_type)
- if settings.USE_L10N:
- cache_key = (format_type, get_language())
- try:
- return _format_cache[cache_key] or getattr(settings, format_type)
- except KeyError:
- for module in get_format_modules():
- try:
- val = getattr(module, format_type)
- _format_cache[cache_key] = val
- return val
- except AttributeError:
- pass
- _format_cache[cache_key] = None
- return getattr(settings, format_type)
-
-def date_format(value, format=None):
- """
- Formats a datetime.date or datetime.datetime object using a
- localizable format
- """
- return dateformat.format(value, get_format(format or 'DATE_FORMAT'))
-
-def time_format(value, format=None):
- """
- Formats a datetime.time object using a localizable format
- """
- return dateformat.time_format(value, get_format(format or 'TIME_FORMAT'))
-
-def number_format(value, decimal_pos=None):
- """
- Formats a numeric value using localization settings
- """
- return numberformat.format(
- value,
- get_format('DECIMAL_SEPARATOR'),
- decimal_pos,
- get_format('NUMBER_GROUPING'),
- get_format('THOUSAND_SEPARATOR'),
- )
-
-def localize(value):
- """
- Checks if value is a localizable type (date, number...) and returns it
- formatted as a string using current locale format
- """
- if isinstance(value, bool):
- return mark_safe(unicode(value))
- elif isinstance(value, (decimal.Decimal, float, int, long)):
- return number_format(value)
- elif isinstance(value, datetime.datetime):
- return date_format(value, 'DATETIME_FORMAT')
- elif isinstance(value, datetime.date):
- return date_format(value)
- elif isinstance(value, datetime.time):
- return time_format(value, 'TIME_FORMAT')
- else:
- return value
-
-def localize_input(value, default=None):
- """
- Checks if an input value is a localizable type and returns it
- formatted with the appropriate formatting string of the current locale.
- """
- if isinstance(value, (decimal.Decimal, float, int, long)):
- return number_format(value)
- if isinstance(value, datetime.datetime):
- value = datetime_safe.new_datetime(value)
- format = smart_str(default or get_format('DATETIME_INPUT_FORMATS')[0])
- return value.strftime(format)
- elif isinstance(value, datetime.date):
- value = datetime_safe.new_date(value)
- format = smart_str(default or get_format('DATE_INPUT_FORMATS')[0])
- return value.strftime(format)
- elif isinstance(value, datetime.time):
- format = smart_str(default or get_format('TIME_INPUT_FORMATS')[0])
- return value.strftime(format)
- return value
-
-def sanitize_separators(value):
- """
- Sanitizes a value according to the current decimal and
- thousand separator setting. Used with form field input.
- """
- if settings.USE_L10N:
- decimal_separator = get_format('DECIMAL_SEPARATOR')
- if isinstance(value, basestring):
- parts = []
- if decimal_separator in value:
- value, decimals = value.split(decimal_separator, 1)
- parts.append(decimals)
- if settings.USE_THOUSAND_SEPARATOR:
- parts.append(value.replace(get_format('THOUSAND_SEPARATOR'), ''))
- else:
- parts.append(value)
- value = '.'.join(reversed(parts))
- return value
diff --git a/parts/django/django/utils/functional.py b/parts/django/django/utils/functional.py
deleted file mode 100644
index ccfbcb0..0000000
--- a/parts/django/django/utils/functional.py
+++ /dev/null
@@ -1,367 +0,0 @@
-# License for code in this file that was taken from Python 2.5.
-
-# PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
-# --------------------------------------------
-#
-# 1. This LICENSE AGREEMENT is between the Python Software Foundation
-# ("PSF"), and the Individual or Organization ("Licensee") accessing and
-# otherwise using this software ("Python") in source or binary form and
-# its associated documentation.
-#
-# 2. Subject to the terms and conditions of this License Agreement, PSF
-# hereby grants Licensee a nonexclusive, royalty-free, world-wide
-# license to reproduce, analyze, test, perform and/or display publicly,
-# prepare derivative works, distribute, and otherwise use Python
-# alone or in any derivative version, provided, however, that PSF's
-# License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
-# 2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation;
-# All Rights Reserved" are retained in Python alone or in any derivative
-# version prepared by Licensee.
-#
-# 3. In the event Licensee prepares a derivative work that is based on
-# or incorporates Python or any part thereof, and wants to make
-# the derivative work available to others as provided herein, then
-# Licensee hereby agrees to include in any such work a brief summary of
-# the changes made to Python.
-#
-# 4. PSF is making Python available to Licensee on an "AS IS"
-# basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-# IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
-# DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-# FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
-# INFRINGE ANY THIRD PARTY RIGHTS.
-#
-# 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-# FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-# A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
-# OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-#
-# 6. This License Agreement will automatically terminate upon a material
-# breach of its terms and conditions.
-#
-# 7. Nothing in this License Agreement shall be deemed to create any
-# relationship of agency, partnership, or joint venture between PSF and
-# Licensee. This License Agreement does not grant permission to use PSF
-# trademarks or trade name in a trademark sense to endorse or promote
-# products or services of Licensee, or any third party.
-#
-# 8. By copying, installing or otherwise using Python, Licensee
-# agrees to be bound by the terms and conditions of this License
-# Agreement.
-
-
-def curry(_curried_func, *args, **kwargs):
- def _curried(*moreargs, **morekwargs):
- return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
- return _curried
-
-### Begin from Python 2.5 functools.py ########################################
-
-# Summary of changes made to the Python 2.5 code below:
-# * swapped ``partial`` for ``curry`` to maintain backwards-compatibility
-# in Django.
-
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation.
-# All Rights Reserved.
-
-###############################################################################
-
-# update_wrapper() and wraps() are tools to help write
-# wrapper functions that can handle naive introspection
-
-WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__doc__')
-WRAPPER_UPDATES = ('__dict__',)
-def update_wrapper(wrapper,
- wrapped,
- assigned = WRAPPER_ASSIGNMENTS,
- updated = WRAPPER_UPDATES):
- """Update a wrapper function to look like the wrapped function
-
- wrapper is the function to be updated
- wrapped is the original function
- assigned is a tuple naming the attributes assigned directly
- from the wrapped function to the wrapper function (defaults to
- functools.WRAPPER_ASSIGNMENTS)
- updated is a tuple naming the attributes off the wrapper that
- are updated with the corresponding attribute from the wrapped
- function (defaults to functools.WRAPPER_UPDATES)
- """
- for attr in assigned:
- setattr(wrapper, attr, getattr(wrapped, attr))
- for attr in updated:
- getattr(wrapper, attr).update(getattr(wrapped, attr))
- # Return the wrapper so this can be used as a decorator via curry()
- return wrapper
-
-def wraps(wrapped,
- assigned = WRAPPER_ASSIGNMENTS,
- updated = WRAPPER_UPDATES):
- """Decorator factory to apply update_wrapper() to a wrapper function
-
- Returns a decorator that invokes update_wrapper() with the decorated
- function as the wrapper argument and the arguments to wraps() as the
- remaining arguments. Default arguments are as for update_wrapper().
- This is a convenience function to simplify applying curry() to
- update_wrapper().
- """
- return curry(update_wrapper, wrapped=wrapped,
- assigned=assigned, updated=updated)
-
-### End from Python 2.5 functools.py ##########################################
-
-def memoize(func, cache, num_args):
- """
- Wrap a function so that results for any argument tuple are stored in
- 'cache'. Note that the args to the function must be usable as dictionary
- keys.
-
- Only the first num_args are considered when creating the key.
- """
- def wrapper(*args):
- mem_args = args[:num_args]
- if mem_args in cache:
- return cache[mem_args]
- result = func(*args)
- cache[mem_args] = result
- return result
- return wraps(func)(wrapper)
-
-class Promise(object):
- """
- This is just a base class for the proxy class created in
- the closure of the lazy function. It can be used to recognize
- promises in code.
- """
- pass
-
-def lazy(func, *resultclasses):
- """
- Turns any callable into a lazy evaluated callable. You need to give result
- classes or types -- at least one is needed so that the automatic forcing of
- the lazy evaluation code is triggered. Results are not memoized; the
- function is evaluated on every access.
- """
-
- class __proxy__(Promise):
- """
- Encapsulate a function call and act as a proxy for methods that are
- called on the result of that function. The function is not evaluated
- until one of the methods on the result is called.
- """
- __dispatch = None
-
- def __init__(self, args, kw):
- self.__func = func
- self.__args = args
- self.__kw = kw
- if self.__dispatch is None:
- self.__prepare_class__()
-
- def __reduce__(self):
- return (
- _lazy_proxy_unpickle,
- (self.__func, self.__args, self.__kw) + resultclasses
- )
-
- def __prepare_class__(cls):
- cls.__dispatch = {}
- for resultclass in resultclasses:
- cls.__dispatch[resultclass] = {}
- for (k, v) in resultclass.__dict__.items():
- # All __promise__ return the same wrapper method, but they
- # also do setup, inserting the method into the dispatch
- # dict.
- meth = cls.__promise__(resultclass, k, v)
- if hasattr(cls, k):
- continue
- setattr(cls, k, meth)
- cls._delegate_str = str in resultclasses
- cls._delegate_unicode = unicode in resultclasses
- assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
- if cls._delegate_unicode:
- cls.__unicode__ = cls.__unicode_cast
- elif cls._delegate_str:
- cls.__str__ = cls.__str_cast
- __prepare_class__ = classmethod(__prepare_class__)
-
- def __promise__(cls, klass, funcname, func):
- # Builds a wrapper around some magic method and registers that magic
- # method for the given type and method name.
- def __wrapper__(self, *args, **kw):
- # Automatically triggers the evaluation of a lazy value and
- # applies the given magic method of the result type.
- res = self.__func(*self.__args, **self.__kw)
- for t in type(res).mro():
- if t in self.__dispatch:
- return self.__dispatch[t][funcname](res, *args, **kw)
- raise TypeError("Lazy object returned unexpected type.")
-
- if klass not in cls.__dispatch:
- cls.__dispatch[klass] = {}
- cls.__dispatch[klass][funcname] = func
- return __wrapper__
- __promise__ = classmethod(__promise__)
-
- def __unicode_cast(self):
- return self.__func(*self.__args, **self.__kw)
-
- def __str_cast(self):
- return str(self.__func(*self.__args, **self.__kw))
-
- def __cmp__(self, rhs):
- if self._delegate_str:
- s = str(self.__func(*self.__args, **self.__kw))
- elif self._delegate_unicode:
- s = unicode(self.__func(*self.__args, **self.__kw))
- else:
- s = self.__func(*self.__args, **self.__kw)
- if isinstance(rhs, Promise):
- return -cmp(rhs, s)
- else:
- return cmp(s, rhs)
-
- def __mod__(self, rhs):
- if self._delegate_str:
- return str(self) % rhs
- elif self._delegate_unicode:
- return unicode(self) % rhs
- else:
- raise AssertionError('__mod__ not supported for non-string types')
-
- def __deepcopy__(self, memo):
- # Instances of this class are effectively immutable. It's just a
- # collection of functions. So we don't need to do anything
- # complicated for copying.
- memo[id(self)] = self
- return self
-
- def __wrapper__(*args, **kw):
- # Creates the proxy object, instead of the actual value.
- return __proxy__(args, kw)
-
- return wraps(func)(__wrapper__)
-
-def _lazy_proxy_unpickle(func, args, kwargs, *resultclasses):
- return lazy(func, *resultclasses)(*args, **kwargs)
-
-def allow_lazy(func, *resultclasses):
- """
- A decorator that allows a function to be called with one or more lazy
- arguments. If none of the args are lazy, the function is evaluated
- immediately, otherwise a __proxy__ is returned that will evaluate the
- function when needed.
- """
- def wrapper(*args, **kwargs):
- for arg in list(args) + kwargs.values():
- if isinstance(arg, Promise):
- break
- else:
- return func(*args, **kwargs)
- return lazy(func, *resultclasses)(*args, **kwargs)
- return wraps(func)(wrapper)
-
-class LazyObject(object):
- """
- A wrapper for another class that can be used to delay instantiation of the
- wrapped class.
-
- By subclassing, you have the opportunity to intercept and alter the
- instantiation. If you don't need to do that, use SimpleLazyObject.
- """
- def __init__(self):
- self._wrapped = None
-
- def __getattr__(self, name):
- if self._wrapped is None:
- self._setup()
- return getattr(self._wrapped, name)
-
- def __setattr__(self, name, value):
- if name == "_wrapped":
- # Assign to __dict__ to avoid infinite __setattr__ loops.
- self.__dict__["_wrapped"] = value
- else:
- if self._wrapped is None:
- self._setup()
- setattr(self._wrapped, name, value)
-
- def __delattr__(self, name):
- if name == "_wrapped":
- raise TypeError("can't delete _wrapped.")
- if self._wrapped is None:
- self._setup()
- delattr(self._wrapped, name)
-
- def _setup(self):
- """
- Must be implemented by subclasses to initialise the wrapped object.
- """
- raise NotImplementedError
-
- # introspection support:
- __members__ = property(lambda self: self.__dir__())
-
- def __dir__(self):
- if self._wrapped is None:
- self._setup()
- return dir(self._wrapped)
-
-class SimpleLazyObject(LazyObject):
- """
- A lazy object initialised from any function.
-
- Designed for compound objects of unknown type. For builtins or objects of
- known type, use django.utils.functional.lazy.
- """
- def __init__(self, func):
- """
- Pass in a callable that returns the object to be wrapped.
-
- If copies are made of the resulting SimpleLazyObject, which can happen
- in various circumstances within Django, then you must ensure that the
- callable can be safely run more than once and will return the same
- value.
- """
- self.__dict__['_setupfunc'] = func
- # For some reason, we have to inline LazyObject.__init__ here to avoid
- # recursion
- self._wrapped = None
-
- def __str__(self):
- if self._wrapped is None: self._setup()
- return str(self._wrapped)
-
- def __unicode__(self):
- if self._wrapped is None: self._setup()
- return unicode(self._wrapped)
-
- def __deepcopy__(self, memo):
- if self._wrapped is None:
- # We have to use SimpleLazyObject, not self.__class__, because the
- # latter is proxied.
- result = SimpleLazyObject(self._setupfunc)
- memo[id(self)] = result
- return result
- else:
- # Changed to use deepcopy from copycompat, instead of copy
- # For Python 2.4.
- from django.utils.copycompat import deepcopy
- return deepcopy(self._wrapped, memo)
-
- # Need to pretend to be the wrapped class, for the sake of objects that care
- # about this (especially in equality tests)
- def __get_class(self):
- if self._wrapped is None: self._setup()
- return self._wrapped.__class__
- __class__ = property(__get_class)
-
- def __eq__(self, other):
- if self._wrapped is None: self._setup()
- return self._wrapped == other
-
- def __hash__(self):
- if self._wrapped is None: self._setup()
- return hash(self._wrapped)
-
- def _setup(self):
- self._wrapped = self._setupfunc()
diff --git a/parts/django/django/utils/hashcompat.py b/parts/django/django/utils/hashcompat.py
deleted file mode 100644
index 4d9b76f..0000000
--- a/parts/django/django/utils/hashcompat.py
+++ /dev/null
@@ -1,20 +0,0 @@
-"""
-The md5 and sha modules are deprecated since Python 2.5, replaced by the
-hashlib module containing both hash algorithms. Here, we provide a common
-interface to the md5 and sha constructors, depending on system version.
-"""
-
-import sys
-if sys.version_info >= (2, 5):
- import hashlib
- md5_constructor = hashlib.md5
- md5_hmac = md5_constructor
- sha_constructor = hashlib.sha1
- sha_hmac = sha_constructor
-else:
- import md5
- md5_constructor = md5.new
- md5_hmac = md5
- import sha
- sha_constructor = sha.new
- sha_hmac = sha
diff --git a/parts/django/django/utils/html.py b/parts/django/django/utils/html.py
deleted file mode 100644
index 951b3f2..0000000
--- a/parts/django/django/utils/html.py
+++ /dev/null
@@ -1,167 +0,0 @@
-"""HTML utilities suitable for global use."""
-
-import re
-import string
-
-from django.utils.safestring import SafeData, mark_safe
-from django.utils.encoding import force_unicode
-from django.utils.functional import allow_lazy
-from django.utils.http import urlquote
-
-# Configuration for urlize() function.
-LEADING_PUNCTUATION = ['(', '<', '&lt;']
-TRAILING_PUNCTUATION = ['.', ',', ')', '>', '\n', '&gt;']
-
-# List of possible strings used for bullets in bulleted lists.
-DOTS = ['&middot;', '*', '\xe2\x80\xa2', '&#149;', '&bull;', '&#8226;']
-
-unencoded_ampersands_re = re.compile(r'&(?!(\w+|#\d+);)')
-word_split_re = re.compile(r'(\s+)')
-punctuation_re = re.compile('^(?P<lead>(?:%s)*)(?P<middle>.*?)(?P<trail>(?:%s)*)$' % \
- ('|'.join([re.escape(x) for x in LEADING_PUNCTUATION]),
- '|'.join([re.escape(x) for x in TRAILING_PUNCTUATION])))
-simple_email_re = re.compile(r'^\S+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+$')
-link_target_attribute_re = re.compile(r'(<a [^>]*?)target=[^\s>]+')
-html_gunk_re = re.compile(r'(?:<br clear="all">|<i><\/i>|<b><\/b>|<em><\/em>|<strong><\/strong>|<\/?smallcaps>|<\/?uppercase>)', re.IGNORECASE)
-hard_coded_bullets_re = re.compile(r'((?:<p>(?:%s).*?[a-zA-Z].*?</p>\s*)+)' % '|'.join([re.escape(x) for x in DOTS]), re.DOTALL)
-trailing_empty_content_re = re.compile(r'(?:<p>(?:&nbsp;|\s|<br \/>)*?</p>\s*)+\Z')
-del x # Temporary variable
-
-def escape(html):
- """
- Returns the given HTML with ampersands, quotes and angle brackets encoded.
- """
- return mark_safe(force_unicode(html).replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'", '&#39;'))
-escape = allow_lazy(escape, unicode)
-
-def conditional_escape(html):
- """
- Similar to escape(), except that it doesn't operate on pre-escaped strings.
- """
- if isinstance(html, SafeData):
- return html
- else:
- return escape(html)
-
-def linebreaks(value, autoescape=False):
- """Converts newlines into <p> and <br />s."""
- value = re.sub(r'\r\n|\r|\n', '\n', force_unicode(value)) # normalize newlines
- paras = re.split('\n{2,}', value)
- if autoescape:
- paras = [u'<p>%s</p>' % escape(p).replace('\n', '<br />') for p in paras]
- else:
- paras = [u'<p>%s</p>' % p.replace('\n', '<br />') for p in paras]
- return u'\n\n'.join(paras)
-linebreaks = allow_lazy(linebreaks, unicode)
-
-def strip_tags(value):
- """Returns the given HTML with all tags stripped."""
- return re.sub(r'<[^>]*?>', '', force_unicode(value))
-strip_tags = allow_lazy(strip_tags)
-
-def strip_spaces_between_tags(value):
- """Returns the given HTML with spaces between tags removed."""
- return re.sub(r'>\s+<', '><', force_unicode(value))
-strip_spaces_between_tags = allow_lazy(strip_spaces_between_tags, unicode)
-
-def strip_entities(value):
- """Returns the given HTML with all entities (&something;) stripped."""
- return re.sub(r'&(?:\w+|#\d+);', '', force_unicode(value))
-strip_entities = allow_lazy(strip_entities, unicode)
-
-def fix_ampersands(value):
- """Returns the given HTML with all unencoded ampersands encoded correctly."""
- return unencoded_ampersands_re.sub('&amp;', force_unicode(value))
-fix_ampersands = allow_lazy(fix_ampersands, unicode)
-
-def urlize(text, trim_url_limit=None, nofollow=False, autoescape=False):
- """
- Converts any URLs in text into clickable links.
-
- Works on http://, https://, www. links and links ending in .org, .net or
- .com. Links can have trailing punctuation (periods, commas, close-parens)
- and leading punctuation (opening parens) and it'll still do the right
- thing.
-
- If trim_url_limit is not None, the URLs in link text longer than this limit
- will truncated to trim_url_limit-3 characters and appended with an elipsis.
-
- If nofollow is True, the URLs in link text will get a rel="nofollow"
- attribute.
-
- If autoescape is True, the link text and URLs will get autoescaped.
- """
- trim_url = lambda x, limit=trim_url_limit: limit is not None and (len(x) > limit and ('%s...' % x[:max(0, limit - 3)])) or x
- safe_input = isinstance(text, SafeData)
- words = word_split_re.split(force_unicode(text))
- nofollow_attr = nofollow and ' rel="nofollow"' or ''
- for i, word in enumerate(words):
- match = None
- if '.' in word or '@' in word or ':' in word:
- match = punctuation_re.match(word)
- if match:
- lead, middle, trail = match.groups()
- # Make URL we want to point to.
- url = None
- if middle.startswith('http://') or middle.startswith('https://'):
- url = urlquote(middle, safe='/&=:;#?+*')
- elif middle.startswith('www.') or ('@' not in middle and \
- middle and middle[0] in string.ascii_letters + string.digits and \
- (middle.endswith('.org') or middle.endswith('.net') or middle.endswith('.com'))):
- url = urlquote('http://%s' % middle, safe='/&=:;#?+*')
- elif '@' in middle and not ':' in middle and simple_email_re.match(middle):
- url = 'mailto:%s' % middle
- nofollow_attr = ''
- # Make link.
- if url:
- trimmed = trim_url(middle)
- if autoescape and not safe_input:
- lead, trail = escape(lead), escape(trail)
- url, trimmed = escape(url), escape(trimmed)
- middle = '<a href="%s"%s>%s</a>' % (url, nofollow_attr, trimmed)
- words[i] = mark_safe('%s%s%s' % (lead, middle, trail))
- else:
- if safe_input:
- words[i] = mark_safe(word)
- elif autoescape:
- words[i] = escape(word)
- elif safe_input:
- words[i] = mark_safe(word)
- elif autoescape:
- words[i] = escape(word)
- return u''.join(words)
-urlize = allow_lazy(urlize, unicode)
-
-def clean_html(text):
- """
- Clean the given HTML. Specifically, do the following:
- * Convert <b> and <i> to <strong> and <em>.
- * Encode all ampersands correctly.
- * Remove all "target" attributes from <a> tags.
- * Remove extraneous HTML, such as presentational tags that open and
- immediately close and <br clear="all">.
- * Convert hard-coded bullets into HTML unordered lists.
- * Remove stuff like "<p>&nbsp;&nbsp;</p>", but only if it's at the
- bottom of the text.
- """
- from django.utils.text import normalize_newlines
- text = normalize_newlines(force_unicode(text))
- text = re.sub(r'<(/?)\s*b\s*>', '<\\1strong>', text)
- text = re.sub(r'<(/?)\s*i\s*>', '<\\1em>', text)
- text = fix_ampersands(text)
- # Remove all target="" attributes from <a> tags.
- text = link_target_attribute_re.sub('\\1', text)
- # Trim stupid HTML such as <br clear="all">.
- text = html_gunk_re.sub('', text)
- # Convert hard-coded bullets into HTML unordered lists.
- def replace_p_tags(match):
- s = match.group().replace('</p>', '</li>')
- for d in DOTS:
- s = s.replace('<p>%s' % d, '<li>')
- return u'<ul>\n%s\n</ul>' % s
- text = hard_coded_bullets_re.sub(replace_p_tags, text)
- # Remove stuff like "<p>&nbsp;&nbsp;</p>", but only if it's at the bottom
- # of the text.
- text = trailing_empty_content_re.sub('', text)
- return text
-clean_html = allow_lazy(clean_html, unicode)
diff --git a/parts/django/django/utils/http.py b/parts/django/django/utils/http.py
deleted file mode 100644
index 2fb6007..0000000
--- a/parts/django/django/utils/http.py
+++ /dev/null
@@ -1,124 +0,0 @@
-import re
-import urllib
-from email.Utils import formatdate
-
-from django.utils.encoding import smart_str, force_unicode
-from django.utils.functional import allow_lazy
-
-ETAG_MATCH = re.compile(r'(?:W/)?"((?:\\.|[^"])*)"')
-
-def urlquote(url, safe='/'):
- """
- A version of Python's urllib.quote() function that can operate on unicode
- strings. The url is first UTF-8 encoded before quoting. The returned string
- can safely be used as part of an argument to a subsequent iri_to_uri() call
- without double-quoting occurring.
- """
- return force_unicode(urllib.quote(smart_str(url), safe))
-
-urlquote = allow_lazy(urlquote, unicode)
-
-def urlquote_plus(url, safe=''):
- """
- A version of Python's urllib.quote_plus() function that can operate on
- unicode strings. The url is first UTF-8 encoded before quoting. The
- returned string can safely be used as part of an argument to a subsequent
- iri_to_uri() call without double-quoting occurring.
- """
- return force_unicode(urllib.quote_plus(smart_str(url), safe))
-urlquote_plus = allow_lazy(urlquote_plus, unicode)
-
-def urlencode(query, doseq=0):
- """
- A version of Python's urllib.urlencode() function that can operate on
- unicode strings. The parameters are first case to UTF-8 encoded strings and
- then encoded as per normal.
- """
- if hasattr(query, 'items'):
- query = query.items()
- return urllib.urlencode(
- [(smart_str(k),
- isinstance(v, (list,tuple)) and [smart_str(i) for i in v] or smart_str(v))
- for k, v in query],
- doseq)
-
-def cookie_date(epoch_seconds=None):
- """
- Formats the time to ensure compatibility with Netscape's cookie standard.
-
- Accepts a floating point number expressed in seconds since the epoch, in
- UTC - such as that outputted by time.time(). If set to None, defaults to
- the current time.
-
- Outputs a string in the format 'Wdy, DD-Mon-YYYY HH:MM:SS GMT'.
- """
- rfcdate = formatdate(epoch_seconds)
- return '%s-%s-%s GMT' % (rfcdate[:7], rfcdate[8:11], rfcdate[12:25])
-
-def http_date(epoch_seconds=None):
- """
- Formats the time to match the RFC1123 date format as specified by HTTP
- RFC2616 section 3.3.1.
-
- Accepts a floating point number expressed in seconds since the epoch, in
- UTC - such as that outputted by time.time(). If set to None, defaults to
- the current time.
-
- Outputs a string in the format 'Wdy, DD Mon YYYY HH:MM:SS GMT'.
- """
- rfcdate = formatdate(epoch_seconds)
- return '%s GMT' % rfcdate[:25]
-
-# Base 36 functions: useful for generating compact URLs
-
-def base36_to_int(s):
- """
- Converts a base 36 string to an ``int``. To prevent
- overconsumption of server resources, raises ``ValueError` if the
- input is longer than 13 base36 digits (13 digits is sufficient to
- base36-encode any 64-bit integer).
- """
- if len(s) > 13:
- raise ValueError("Base36 input too large")
- return int(s, 36)
-
-def int_to_base36(i):
- """
- Converts an integer to a base36 string
- """
- digits = "0123456789abcdefghijklmnopqrstuvwxyz"
- factor = 0
- # Find starting factor
- while True:
- factor += 1
- if i < 36 ** factor:
- factor -= 1
- break
- base36 = []
- # Construct base36 representation
- while factor >= 0:
- j = 36 ** factor
- base36.append(digits[i / j])
- i = i % j
- factor -= 1
- return ''.join(base36)
-
-def parse_etags(etag_str):
- """
- Parses a string with one or several etags passed in If-None-Match and
- If-Match headers by the rules in RFC 2616. Returns a list of etags
- without surrounding double quotes (") and unescaped from \<CHAR>.
- """
- etags = ETAG_MATCH.findall(etag_str)
- if not etags:
- # etag_str has wrong format, treat it as an opaque string then
- return [etag_str]
- etags = [e.decode('string_escape') for e in etags]
- return etags
-
-def quote_etag(etag):
- """
- Wraps a string in double quotes escaping contents as necesary.
- """
- return '"%s"' % etag.replace('\\', '\\\\').replace('"', '\\"')
-
diff --git a/parts/django/django/utils/importlib.py b/parts/django/django/utils/importlib.py
deleted file mode 100644
index ef4d0e4..0000000
--- a/parts/django/django/utils/importlib.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Taken from Python 2.7 with permission from/by the original author.
-import sys
-
-def _resolve_name(name, package, level):
- """Return the absolute name of the module to be imported."""
- if not hasattr(package, 'rindex'):
- raise ValueError("'package' not set to a string")
- dot = len(package)
- for x in xrange(level, 1, -1):
- try:
- dot = package.rindex('.', 0, dot)
- except ValueError:
- raise ValueError("attempted relative import beyond top-level "
- "package")
- return "%s.%s" % (package[:dot], name)
-
-
-def import_module(name, package=None):
- """Import a module.
-
- The 'package' argument is required when performing a relative import. It
- specifies the package to use as the anchor point from which to resolve the
- relative import to an absolute import.
-
- """
- if name.startswith('.'):
- if not package:
- raise TypeError("relative imports require the 'package' argument")
- level = 0
- for character in name:
- if character != '.':
- break
- level += 1
- name = _resolve_name(name[level:], package, level)
- __import__(name)
- return sys.modules[name]
diff --git a/parts/django/django/utils/itercompat.py b/parts/django/django/utils/itercompat.py
deleted file mode 100644
index d4ff250..0000000
--- a/parts/django/django/utils/itercompat.py
+++ /dev/null
@@ -1,45 +0,0 @@
-"""
-Providing iterator functions that are not in all version of Python we support.
-Where possible, we try to use the system-native version and only fall back to
-these implementations if necessary.
-"""
-
-import itertools
-
-# Fallback for Python 2.4, Python 2.5
-def product(*args, **kwds):
- """
- Taken from http://docs.python.org/library/itertools.html#itertools.product
- """
- # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
- # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
- pools = map(tuple, args) * kwds.get('repeat', 1)
- result = [[]]
- for pool in pools:
- result = [x+[y] for x in result for y in pool]
- for prod in result:
- yield tuple(prod)
-
-if hasattr(itertools, 'product'):
- product = itertools.product
-
-def is_iterable(x):
- "A implementation independent way of checking for iterables"
- try:
- iter(x)
- except TypeError:
- return False
- else:
- return True
-
-def all(iterable):
- for item in iterable:
- if not item:
- return False
- return True
-
-def any(iterable):
- for item in iterable:
- if item:
- return True
- return False
diff --git a/parts/django/django/utils/module_loading.py b/parts/django/django/utils/module_loading.py
deleted file mode 100644
index f251035..0000000
--- a/parts/django/django/utils/module_loading.py
+++ /dev/null
@@ -1,60 +0,0 @@
-import imp
-import os
-import sys
-
-
-def module_has_submodule(package, module_name):
- """See if 'module' is in 'package'."""
- name = ".".join([package.__name__, module_name])
- if name in sys.modules:
- return True
- for finder in sys.meta_path:
- if finder.find_module(name):
- return True
- for entry in package.__path__: # No __path__, then not a package.
- try:
- # Try the cached finder.
- finder = sys.path_importer_cache[entry]
- if finder is None:
- # Implicit import machinery should be used.
- try:
- file_, _, _ = imp.find_module(module_name, [entry])
- if file_:
- file_.close()
- return True
- except ImportError:
- continue
- # Else see if the finder knows of a loader.
- elif finder.find_module(name):
- return True
- else:
- continue
- except KeyError:
- # No cached finder, so try and make one.
- for hook in sys.path_hooks:
- try:
- finder = hook(entry)
- # XXX Could cache in sys.path_importer_cache
- if finder.find_module(name):
- return True
- else:
- # Once a finder is found, stop the search.
- break
- except ImportError:
- # Continue the search for a finder.
- continue
- else:
- # No finder found.
- # Try the implicit import machinery if searching a directory.
- if os.path.isdir(entry):
- try:
- file_, _, _ = imp.find_module(module_name, [entry])
- if file_:
- file_.close()
- return True
- except ImportError:
- pass
- # XXX Could insert None or NullImporter
- else:
- # Exhausted the search, so the module cannot be found.
- return False
diff --git a/parts/django/django/utils/numberformat.py b/parts/django/django/utils/numberformat.py
deleted file mode 100644
index 069f498..0000000
--- a/parts/django/django/utils/numberformat.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from django.conf import settings
-from django.utils.safestring import mark_safe
-
-
-def format(number, decimal_sep, decimal_pos, grouping=0, thousand_sep=''):
- """
- Gets a number (as a number or string), and returns it as a string,
- using formats definied as arguments:
-
- * decimal_sep: Decimal separator symbol (for example ".")
- * decimal_pos: Number of decimal positions
- * grouping: Number of digits in every group limited by thousand separator
- * thousand_sep: Thousand separator symbol (for example ",")
-
- """
- use_grouping = settings.USE_L10N and \
- settings.USE_THOUSAND_SEPARATOR and grouping
- # Make the common case fast:
- if isinstance(number, int) and not use_grouping and not decimal_pos:
- return mark_safe(unicode(number))
- # sign
- if float(number) < 0:
- sign = '-'
- else:
- sign = ''
- str_number = unicode(number)
- if str_number[0] == '-':
- str_number = str_number[1:]
- # decimal part
- if '.' in str_number:
- int_part, dec_part = str_number.split('.')
- if decimal_pos:
- dec_part = dec_part[:decimal_pos]
- else:
- int_part, dec_part = str_number, ''
- if decimal_pos:
- dec_part = dec_part + ('0' * (decimal_pos - len(dec_part)))
- if dec_part: dec_part = decimal_sep + dec_part
- # grouping
- if use_grouping:
- int_part_gd = ''
- for cnt, digit in enumerate(int_part[::-1]):
- if cnt and not cnt % grouping:
- int_part_gd += thousand_sep
- int_part_gd += digit
- int_part = int_part_gd[::-1]
- return sign + int_part + dec_part
-
diff --git a/parts/django/django/utils/regex_helper.py b/parts/django/django/utils/regex_helper.py
deleted file mode 100644
index b11fe96..0000000
--- a/parts/django/django/utils/regex_helper.py
+++ /dev/null
@@ -1,328 +0,0 @@
-"""
-Functions for reversing a regular expression (used in reverse URL resolving).
-Used internally by Django and not intended for external use.
-
-This is not, and is not intended to be, a complete reg-exp decompiler. It
-should be good enough for a large class of URLS, however.
-"""
-
-# Mapping of an escape character to a representative of that class. So, e.g.,
-# "\w" is replaced by "x" in a reverse URL. A value of None means to ignore
-# this sequence. Any missing key is mapped to itself.
-ESCAPE_MAPPINGS = {
- "A": None,
- "b": None,
- "B": None,
- "d": u"0",
- "D": u"x",
- "s": u" ",
- "S": u"x",
- "w": u"x",
- "W": u"!",
- "Z": None,
-}
-
-class Choice(list):
- """
- Used to represent multiple possibilities at this point in a pattern string.
- We use a distinguished type, rather than a list, so that the usage in the
- code is clear.
- """
-
-class Group(list):
- """
- Used to represent a capturing group in the pattern string.
- """
-
-class NonCapture(list):
- """
- Used to represent a non-capturing group in the pattern string.
- """
-
-def normalize(pattern):
- """
- Given a reg-exp pattern, normalizes it to a list of forms that suffice for
- reverse matching. This does the following:
-
- (1) For any repeating sections, keeps the minimum number of occurrences
- permitted (this means zero for optional groups).
- (2) If an optional group includes parameters, include one occurrence of
- that group (along with the zero occurrence case from step (1)).
- (3) Select the first (essentially an arbitrary) element from any character
- class. Select an arbitrary character for any unordered class (e.g. '.'
- or '\w') in the pattern.
- (5) Ignore comments and any of the reg-exp flags that won't change
- what we construct ("iLmsu"). "(?x)" is an error, however.
- (6) Raise an error on all other non-capturing (?...) forms (e.g.
- look-ahead and look-behind matches) and any disjunctive ('|')
- constructs.
-
- Django's URLs for forward resolving are either all positional arguments or
- all keyword arguments. That is assumed here, as well. Although reverse
- resolving can be done using positional args when keyword args are
- specified, the two cannot be mixed in the same reverse() call.
- """
- # Do a linear scan to work out the special features of this pattern. The
- # idea is that we scan once here and collect all the information we need to
- # make future decisions.
- result = []
- non_capturing_groups = []
- consume_next = True
- pattern_iter = next_char(iter(pattern))
- num_args = 0
-
- # A "while" loop is used here because later on we need to be able to peek
- # at the next character and possibly go around without consuming another
- # one at the top of the loop.
- try:
- ch, escaped = pattern_iter.next()
- except StopIteration:
- return zip([u''], [[]])
-
- try:
- while True:
- if escaped:
- result.append(ch)
- elif ch == '.':
- # Replace "any character" with an arbitrary representative.
- result.append(u".")
- elif ch == '|':
- # FIXME: One day we'll should do this, but not in 1.0.
- raise NotImplementedError
- elif ch == "^":
- pass
- elif ch == '$':
- break
- elif ch == ')':
- # This can only be the end of a non-capturing group, since all
- # other unescaped parentheses are handled by the grouping
- # section later (and the full group is handled there).
- #
- # We regroup everything inside the capturing group so that it
- # can be quantified, if necessary.
- start = non_capturing_groups.pop()
- inner = NonCapture(result[start:])
- result = result[:start] + [inner]
- elif ch == '[':
- # Replace ranges with the first character in the range.
- ch, escaped = pattern_iter.next()
- result.append(ch)
- ch, escaped = pattern_iter.next()
- while escaped or ch != ']':
- ch, escaped = pattern_iter.next()
- elif ch == '(':
- # Some kind of group.
- ch, escaped = pattern_iter.next()
- if ch != '?' or escaped:
- # A positional group
- name = "_%d" % num_args
- num_args += 1
- result.append(Group(((u"%%(%s)s" % name), name)))
- walk_to_end(ch, pattern_iter)
- else:
- ch, escaped = pattern_iter.next()
- if ch in "iLmsu#":
- # All of these are ignorable. Walk to the end of the
- # group.
- walk_to_end(ch, pattern_iter)
- elif ch == ':':
- # Non-capturing group
- non_capturing_groups.append(len(result))
- elif ch != 'P':
- # Anything else, other than a named group, is something
- # we cannot reverse.
- raise ValueError("Non-reversible reg-exp portion: '(?%s'" % ch)
- else:
- ch, escaped = pattern_iter.next()
- if ch != '<':
- raise ValueError("Non-reversible reg-exp portion: '(?P%s'" % ch)
- # We are in a named capturing group. Extra the name and
- # then skip to the end.
- name = []
- ch, escaped = pattern_iter.next()
- while ch != '>':
- name.append(ch)
- ch, escaped = pattern_iter.next()
- param = ''.join(name)
- result.append(Group(((u"%%(%s)s" % param), param)))
- walk_to_end(ch, pattern_iter)
- elif ch in "*?+{":
- # Quanitifers affect the previous item in the result list.
- count, ch = get_quantifier(ch, pattern_iter)
- if ch:
- # We had to look ahead, but it wasn't need to compute the
- # quanitifer, so use this character next time around the
- # main loop.
- consume_next = False
-
- if count == 0:
- if contains(result[-1], Group):
- # If we are quantifying a capturing group (or
- # something containing such a group) and the minimum is
- # zero, we must also handle the case of one occurrence
- # being present. All the quantifiers (except {0,0},
- # which we conveniently ignore) that have a 0 minimum
- # also allow a single occurrence.
- result[-1] = Choice([None, result[-1]])
- else:
- result.pop()
- elif count > 1:
- result.extend([result[-1]] * (count - 1))
- else:
- # Anything else is a literal.
- result.append(ch)
-
- if consume_next:
- ch, escaped = pattern_iter.next()
- else:
- consume_next = True
- except StopIteration:
- pass
- except NotImplementedError:
- # A case of using the disjunctive form. No results for you!
- return zip([u''], [[]])
-
- return zip(*flatten_result(result))
-
-def next_char(input_iter):
- """
- An iterator that yields the next character from "pattern_iter", respecting
- escape sequences. An escaped character is replaced by a representative of
- its class (e.g. \w -> "x"). If the escaped character is one that is
- skipped, it is not returned (the next character is returned instead).
-
- Yields the next character, along with a boolean indicating whether it is a
- raw (unescaped) character or not.
- """
- for ch in input_iter:
- if ch != '\\':
- yield ch, False
- continue
- ch = input_iter.next()
- representative = ESCAPE_MAPPINGS.get(ch, ch)
- if representative is None:
- continue
- yield representative, True
-
-def walk_to_end(ch, input_iter):
- """
- The iterator is currently inside a capturing group. We want to walk to the
- close of this group, skipping over any nested groups and handling escaped
- parentheses correctly.
- """
- if ch == '(':
- nesting = 1
- else:
- nesting = 0
- for ch, escaped in input_iter:
- if escaped:
- continue
- elif ch == '(':
- nesting += 1
- elif ch == ')':
- if not nesting:
- return
- nesting -= 1
-
-def get_quantifier(ch, input_iter):
- """
- Parse a quantifier from the input, where "ch" is the first character in the
- quantifier.
-
- Returns the minimum number of occurences permitted by the quantifier and
- either None or the next character from the input_iter if the next character
- is not part of the quantifier.
- """
- if ch in '*?+':
- try:
- ch2, escaped = input_iter.next()
- except StopIteration:
- ch2 = None
- if ch2 == '?':
- ch2 = None
- if ch == '+':
- return 1, ch2
- return 0, ch2
-
- quant = []
- while ch != '}':
- ch, escaped = input_iter.next()
- quant.append(ch)
- quant = quant[:-1]
- values = ''.join(quant).split(',')
-
- # Consume the trailing '?', if necessary.
- try:
- ch, escaped = input_iter.next()
- except StopIteration:
- ch = None
- if ch == '?':
- ch = None
- return int(values[0]), ch
-
-def contains(source, inst):
- """
- Returns True if the "source" contains an instance of "inst". False,
- otherwise.
- """
- if isinstance(source, inst):
- return True
- if isinstance(source, NonCapture):
- for elt in source:
- if contains(elt, inst):
- return True
- return False
-
-def flatten_result(source):
- """
- Turns the given source sequence into a list of reg-exp possibilities and
- their arguments. Returns a list of strings and a list of argument lists.
- Each of the two lists will be of the same length.
- """
- if source is None:
- return [u''], [[]]
- if isinstance(source, Group):
- if source[1] is None:
- params = []
- else:
- params = [source[1]]
- return [source[0]], [params]
- result = [u'']
- result_args = [[]]
- pos = last = 0
- for pos, elt in enumerate(source):
- if isinstance(elt, basestring):
- continue
- piece = u''.join(source[last:pos])
- if isinstance(elt, Group):
- piece += elt[0]
- param = elt[1]
- else:
- param = None
- last = pos + 1
- for i in range(len(result)):
- result[i] += piece
- if param:
- result_args[i].append(param)
- if isinstance(elt, (Choice, NonCapture)):
- if isinstance(elt, NonCapture):
- elt = [elt]
- inner_result, inner_args = [], []
- for item in elt:
- res, args = flatten_result(item)
- inner_result.extend(res)
- inner_args.extend(args)
- new_result = []
- new_args = []
- for item, args in zip(result, result_args):
- for i_item, i_args in zip(inner_result, inner_args):
- new_result.append(item + i_item)
- new_args.append(args[:] + i_args)
- result = new_result
- result_args = new_args
- if pos >= last:
- piece = u''.join(source[last:])
- for i in range(len(result)):
- result[i] += piece
- return result, result_args
-
diff --git a/parts/django/django/utils/safestring.py b/parts/django/django/utils/safestring.py
deleted file mode 100644
index 2e31c23..0000000
--- a/parts/django/django/utils/safestring.py
+++ /dev/null
@@ -1,119 +0,0 @@
-"""
-Functions for working with "safe strings": strings that can be displayed safely
-without further escaping in HTML. Marking something as a "safe string" means
-that the producer of the string has already turned characters that should not
-be interpreted by the HTML engine (e.g. '<') into the appropriate entities.
-"""
-from django.utils.functional import curry, Promise
-
-class EscapeData(object):
- pass
-
-class EscapeString(str, EscapeData):
- """
- A string that should be HTML-escaped when output.
- """
- pass
-
-class EscapeUnicode(unicode, EscapeData):
- """
- A unicode object that should be HTML-escaped when output.
- """
- pass
-
-class SafeData(object):
- pass
-
-class SafeString(str, SafeData):
- """
- A string subclass that has been specifically marked as "safe" (requires no
- further escaping) for HTML output purposes.
- """
- def __add__(self, rhs):
- """
- Concatenating a safe string with another safe string or safe unicode
- object is safe. Otherwise, the result is no longer safe.
- """
- t = super(SafeString, self).__add__(rhs)
- if isinstance(rhs, SafeUnicode):
- return SafeUnicode(t)
- elif isinstance(rhs, SafeString):
- return SafeString(t)
- return t
-
- def _proxy_method(self, *args, **kwargs):
- """
- Wrap a call to a normal unicode method up so that we return safe
- results. The method that is being wrapped is passed in the 'method'
- argument.
- """
- method = kwargs.pop('method')
- data = method(self, *args, **kwargs)
- if isinstance(data, str):
- return SafeString(data)
- else:
- return SafeUnicode(data)
-
- decode = curry(_proxy_method, method = str.decode)
-
-class SafeUnicode(unicode, SafeData):
- """
- A unicode subclass that has been specifically marked as "safe" for HTML
- output purposes.
- """
- def __add__(self, rhs):
- """
- Concatenating a safe unicode object with another safe string or safe
- unicode object is safe. Otherwise, the result is no longer safe.
- """
- t = super(SafeUnicode, self).__add__(rhs)
- if isinstance(rhs, SafeData):
- return SafeUnicode(t)
- return t
-
- def _proxy_method(self, *args, **kwargs):
- """
- Wrap a call to a normal unicode method up so that we return safe
- results. The method that is being wrapped is passed in the 'method'
- argument.
- """
- method = kwargs.pop('method')
- data = method(self, *args, **kwargs)
- if isinstance(data, str):
- return SafeString(data)
- else:
- return SafeUnicode(data)
-
- encode = curry(_proxy_method, method = unicode.encode)
-
-def mark_safe(s):
- """
- Explicitly mark a string as safe for (HTML) output purposes. The returned
- object can be used everywhere a string or unicode object is appropriate.
-
- Can be called multiple times on a single string.
- """
- if isinstance(s, SafeData):
- return s
- if isinstance(s, str) or (isinstance(s, Promise) and s._delegate_str):
- return SafeString(s)
- if isinstance(s, (unicode, Promise)):
- return SafeUnicode(s)
- return SafeString(str(s))
-
-def mark_for_escaping(s):
- """
- Explicitly mark a string as requiring HTML escaping upon output. Has no
- effect on SafeData subclasses.
-
- Can be called multiple times on a single string (the resulting escaping is
- only applied once).
- """
- if isinstance(s, (SafeData, EscapeData)):
- return s
- if isinstance(s, str) or (isinstance(s, Promise) and s._delegate_str):
- return EscapeString(s)
- if isinstance(s, (unicode, Promise)):
- return EscapeUnicode(s)
- return EscapeString(str(s))
-
diff --git a/parts/django/django/utils/simplejson/LICENSE.txt b/parts/django/django/utils/simplejson/LICENSE.txt
deleted file mode 100644
index ad95f29..0000000
--- a/parts/django/django/utils/simplejson/LICENSE.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2006 Bob Ippolito
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/parts/django/django/utils/simplejson/__init__.py b/parts/django/django/utils/simplejson/__init__.py
deleted file mode 100644
index 9a8c5a3..0000000
--- a/parts/django/django/utils/simplejson/__init__.py
+++ /dev/null
@@ -1,349 +0,0 @@
-r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
-JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
-interchange format.
-
-:mod:`simplejson` exposes an API familiar to users of the standard library
-:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
-version of the :mod:`json` library contained in Python 2.6, but maintains
-compatibility with Python 2.4 and Python 2.5 and (currently) has
-significant performance advantages, even without using the optional C
-extension for speedups.
-
-Encoding basic Python object hierarchies::
-
- >>> import simplejson as json
- >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
- '["foo", {"bar": ["baz", null, 1.0, 2]}]'
- >>> print json.dumps("\"foo\bar")
- "\"foo\bar"
- >>> print json.dumps(u'\u1234')
- "\u1234"
- >>> print json.dumps('\\')
- "\\"
- >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
- {"a": 0, "b": 0, "c": 0}
- >>> from StringIO import StringIO
- >>> io = StringIO()
- >>> json.dump(['streaming API'], io)
- >>> io.getvalue()
- '["streaming API"]'
-
-Compact encoding::
-
- >>> import simplejson as json
- >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
- '[1,2,3,{"4":5,"6":7}]'
-
-Pretty printing::
-
- >>> import simplejson as json
- >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
- >>> print '\n'.join([l.rstrip() for l in s.splitlines()])
- {
- "4": 5,
- "6": 7
- }
-
-Decoding JSON::
-
- >>> import simplejson as json
- >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
- >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
- True
- >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
- True
- >>> from StringIO import StringIO
- >>> io = StringIO('["streaming API"]')
- >>> json.load(io)[0] == 'streaming API'
- True
-
-Specializing JSON object decoding::
-
- >>> import simplejson as json
- >>> def as_complex(dct):
- ... if '__complex__' in dct:
- ... return complex(dct['real'], dct['imag'])
- ... return dct
- ...
- >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
- ... object_hook=as_complex)
- (1+2j)
- >>> import decimal
- >>> json.loads('1.1', parse_float=decimal.Decimal) == decimal.Decimal('1.1')
- True
-
-Specializing JSON object encoding::
-
- >>> import simplejson as json
- >>> def encode_complex(obj):
- ... if isinstance(obj, complex):
- ... return [obj.real, obj.imag]
- ... raise TypeError("%r is not JSON serializable" % (o,))
- ...
- >>> json.dumps(2 + 1j, default=encode_complex)
- '[2.0, 1.0]'
- >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
- '[2.0, 1.0]'
- >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
- '[2.0, 1.0]'
-
-
-Using simplejson.tool from the shell to validate and pretty-print::
-
- $ echo '{"json":"obj"}' | python -msimplejson.tool
- {
- "json": "obj"
- }
- $ echo '{ 1.2:3.4}' | python -msimplejson.tool
- Expecting property name: line 1 column 2 (char 2)
-"""
-
-# Django modification: try to use the system version first, providing it's
-# either of a later version of has the C speedups in place. Otherwise, fall
-# back to our local copy.
-
-__version__ = '2.0.7'
-
-use_system_version = False
-try:
- # The system-installed version has priority providing it is either not an
- # earlier version or it contains the C speedups.
- import simplejson
- if (simplejson.__version__.split('.') >= __version__.split('.') or
- hasattr(simplejson, '_speedups')):
- from simplejson import *
- use_system_version = True
-except ImportError:
- pass
-
-if not use_system_version:
- try:
- from json import * # Python 2.6 preferred over local copy.
-
- # There is a "json" package around that is not Python's "json", so we
- # check for something that is only in the namespace of the version we
- # want.
- JSONDecoder
-
- use_system_version = True
- except (ImportError, NameError):
- pass
-
-# If all else fails, we have a bundled version that can be used.
-if not use_system_version:
- __all__ = [
- 'dump', 'dumps', 'load', 'loads',
- 'JSONDecoder', 'JSONEncoder',
- ]
-
- from django.utils.simplejson.decoder import JSONDecoder
- from django.utils.simplejson.encoder import JSONEncoder
-
- _default_encoder = JSONEncoder(
- skipkeys=False,
- ensure_ascii=True,
- check_circular=True,
- allow_nan=True,
- indent=None,
- separators=None,
- encoding='utf-8',
- default=None,
- )
-
- def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
- allow_nan=True, cls=None, indent=None, separators=None,
- encoding='utf-8', default=None, **kw):
- """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
- ``.write()``-supporting file-like object).
-
- If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types
- (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
- will be skipped instead of raising a ``TypeError``.
-
- If ``ensure_ascii`` is ``False``, then the some chunks written to ``fp``
- may be ``unicode`` instances, subject to normal Python ``str`` to
- ``unicode`` coercion rules. Unless ``fp.write()`` explicitly
- understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
- to cause an error.
-
- If ``check_circular`` is ``False``, then the circular reference check
- for container types will be skipped and a circular reference will
- result in an ``OverflowError`` (or worse).
-
- If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to
- serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
- in strict compliance of the JSON specification, instead of using the
- JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
-
- If ``indent`` is a non-negative integer, then JSON array elements and object
- members will be pretty-printed with that indent level. An indent level
- of 0 will only insert newlines. ``None`` is the most compact representation.
-
- If ``separators`` is an ``(item_separator, dict_separator)`` tuple
- then it will be used instead of the default ``(', ', ': ')`` separators.
- ``(',', ':')`` is the most compact JSON representation.
-
- ``encoding`` is the character encoding for str instances, default is UTF-8.
-
- ``default(obj)`` is a function that should return a serializable version
- of obj or raise TypeError. The default simply raises TypeError.
-
- To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
- ``.default()`` method to serialize additional types), specify it with
- the ``cls`` kwarg.
-
- """
- # cached encoder
- if (skipkeys is False and ensure_ascii is True and
- check_circular is True and allow_nan is True and
- cls is None and indent is None and separators is None and
- encoding == 'utf-8' and default is None and not kw):
- iterable = _default_encoder.iterencode(obj)
- else:
- if cls is None:
- cls = JSONEncoder
- iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
- check_circular=check_circular, allow_nan=allow_nan, indent=indent,
- separators=separators, encoding=encoding,
- default=default, **kw).iterencode(obj)
- # could accelerate with writelines in some versions of Python, at
- # a debuggability cost
- for chunk in iterable:
- fp.write(chunk)
-
-
- def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
- allow_nan=True, cls=None, indent=None, separators=None,
- encoding='utf-8', default=None, **kw):
- """Serialize ``obj`` to a JSON formatted ``str``.
-
- If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types
- (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
- will be skipped instead of raising a ``TypeError``.
-
- If ``ensure_ascii`` is ``False``, then the return value will be a
- ``unicode`` instance subject to normal Python ``str`` to ``unicode``
- coercion rules instead of being escaped to an ASCII ``str``.
-
- If ``check_circular`` is ``False``, then the circular reference check
- for container types will be skipped and a circular reference will
- result in an ``OverflowError`` (or worse).
-
- If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to
- serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
- strict compliance of the JSON specification, instead of using the
- JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
-
- If ``indent`` is a non-negative integer, then JSON array elements and
- object members will be pretty-printed with that indent level. An indent
- level of 0 will only insert newlines. ``None`` is the most compact
- representation.
-
- If ``separators`` is an ``(item_separator, dict_separator)`` tuple
- then it will be used instead of the default ``(', ', ': ')`` separators.
- ``(',', ':')`` is the most compact JSON representation.
-
- ``encoding`` is the character encoding for str instances, default is UTF-8.
-
- ``default(obj)`` is a function that should return a serializable version
- of obj or raise TypeError. The default simply raises TypeError.
-
- To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
- ``.default()`` method to serialize additional types), specify it with
- the ``cls`` kwarg.
-
- """
- # cached encoder
- if (skipkeys is False and ensure_ascii is True and
- check_circular is True and allow_nan is True and
- cls is None and indent is None and separators is None and
- encoding == 'utf-8' and default is None and not kw):
- return _default_encoder.encode(obj)
- if cls is None:
- cls = JSONEncoder
- return cls(
- skipkeys=skipkeys, ensure_ascii=ensure_ascii,
- check_circular=check_circular, allow_nan=allow_nan, indent=indent,
- separators=separators, encoding=encoding, default=default,
- **kw).encode(obj)
-
-
- _default_decoder = JSONDecoder(encoding=None, object_hook=None)
-
-
- def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None,
- parse_int=None, parse_constant=None, **kw):
- """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
- a JSON document) to a Python object.
-
- If the contents of ``fp`` is encoded with an ASCII based encoding other
- than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must
- be specified. Encodings that are not ASCII based (such as UCS-2) are
- not allowed, and should be wrapped with
- ``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode``
- object and passed to ``loads()``
-
- ``object_hook`` is an optional function that will be called with the
- result of any object literal decode (a ``dict``). The return value of
- ``object_hook`` will be used instead of the ``dict``. This feature
- can be used to implement custom decoders (e.g. JSON-RPC class hinting).
-
- To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
- kwarg.
-
- """
- return loads(fp.read(),
- encoding=encoding, cls=cls, object_hook=object_hook,
- parse_float=parse_float, parse_int=parse_int,
- parse_constant=parse_constant, **kw)
-
-
- def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
- parse_int=None, parse_constant=None, **kw):
- """Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
- document) to a Python object.
-
- If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding
- other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name
- must be specified. Encodings that are not ASCII based (such as UCS-2)
- are not allowed and should be decoded to ``unicode`` first.
-
- ``object_hook`` is an optional function that will be called with the
- result of any object literal decode (a ``dict``). The return value of
- ``object_hook`` will be used instead of the ``dict``. This feature
- can be used to implement custom decoders (e.g. JSON-RPC class hinting).
-
- ``parse_float``, if specified, will be called with the string
- of every JSON float to be decoded. By default this is equivalent to
- float(num_str). This can be used to use another datatype or parser
- for JSON floats (e.g. decimal.Decimal).
-
- ``parse_int``, if specified, will be called with the string
- of every JSON int to be decoded. By default this is equivalent to
- int(num_str). This can be used to use another datatype or parser
- for JSON integers (e.g. float).
-
- ``parse_constant``, if specified, will be called with one of the
- following strings: -Infinity, Infinity, NaN, null, true, false.
- This can be used to raise an exception if invalid JSON numbers
- are encountered.
-
- To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
- kwarg.
-
- """
- if (cls is None and encoding is None and object_hook is None and
- parse_int is None and parse_float is None and
- parse_constant is None and not kw):
- return _default_decoder.decode(s)
- if cls is None:
- cls = JSONDecoder
- if object_hook is not None:
- kw['object_hook'] = object_hook
- if parse_float is not None:
- kw['parse_float'] = parse_float
- if parse_int is not None:
- kw['parse_int'] = parse_int
- if parse_constant is not None:
- kw['parse_constant'] = parse_constant
- return cls(encoding=encoding, **kw).decode(s)
diff --git a/parts/django/django/utils/simplejson/decoder.py b/parts/django/django/utils/simplejson/decoder.py
deleted file mode 100644
index 5a845cc..0000000
--- a/parts/django/django/utils/simplejson/decoder.py
+++ /dev/null
@@ -1,345 +0,0 @@
-"""Implementation of JSONDecoder
-"""
-import re
-import sys
-import struct
-
-from django.utils.simplejson.scanner import make_scanner
-c_scanstring = None
-
-__all__ = ['JSONDecoder']
-
-FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
-
-def _floatconstants():
- _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
- if sys.byteorder != 'big':
- _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1]
- nan, inf = struct.unpack('dd', _BYTES)
- return nan, inf, -inf
-
-NaN, PosInf, NegInf = _floatconstants()
-
-
-def linecol(doc, pos):
- lineno = doc.count('\n', 0, pos) + 1
- if lineno == 1:
- colno = pos
- else:
- colno = pos - doc.rindex('\n', 0, pos)
- return lineno, colno
-
-
-def errmsg(msg, doc, pos, end=None):
- # Note that this function is called from _speedups
- lineno, colno = linecol(doc, pos)
- if end is None:
- return '%s: line %d column %d (char %d)' % (msg, lineno, colno, pos)
- endlineno, endcolno = linecol(doc, end)
- return '%s: line %d column %d - line %d column %d (char %d - %d)' % (
- msg, lineno, colno, endlineno, endcolno, pos, end)
-
-
-_CONSTANTS = {
- '-Infinity': NegInf,
- 'Infinity': PosInf,
- 'NaN': NaN,
-}
-
-STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS)
-BACKSLASH = {
- '"': u'"', '\\': u'\\', '/': u'/',
- 'b': u'\b', 'f': u'\f', 'n': u'\n', 'r': u'\r', 't': u'\t',
-}
-
-DEFAULT_ENCODING = "utf-8"
-
-def py_scanstring(s, end, encoding=None, strict=True, _b=BACKSLASH, _m=STRINGCHUNK.match):
- """Scan the string s for a JSON string. End is the index of the
- character in s after the quote that started the JSON string.
- Unescapes all valid JSON string escape sequences and raises ValueError
- on attempt to decode an invalid string. If strict is False then literal
- control characters are allowed in the string.
-
- Returns a tuple of the decoded string and the index of the character in s
- after the end quote."""
- if encoding is None:
- encoding = DEFAULT_ENCODING
- chunks = []
- _append = chunks.append
- begin = end - 1
- while 1:
- chunk = _m(s, end)
- if chunk is None:
- raise ValueError(
- errmsg("Unterminated string starting at", s, begin))
- end = chunk.end()
- content, terminator = chunk.groups()
- # Content is contains zero or more unescaped string characters
- if content:
- if not isinstance(content, unicode):
- content = unicode(content, encoding)
- _append(content)
- # Terminator is the end of string, a literal control character,
- # or a backslash denoting that an escape sequence follows
- if terminator == '"':
- break
- elif terminator != '\\':
- if strict:
- msg = "Invalid control character %r at" % (terminator,)
- raise ValueError(msg, s, end)
- else:
- _append(terminator)
- continue
- try:
- esc = s[end]
- except IndexError:
- raise ValueError(
- errmsg("Unterminated string starting at", s, begin))
- # If not a unicode escape sequence, must be in the lookup table
- if esc != 'u':
- try:
- char = _b[esc]
- except KeyError:
- raise ValueError(
- errmsg("Invalid \\escape: %r" % (esc,), s, end))
- end += 1
- else:
- # Unicode escape sequence
- esc = s[end + 1:end + 5]
- next_end = end + 5
- if len(esc) != 4:
- msg = "Invalid \\uXXXX escape"
- raise ValueError(errmsg(msg, s, end))
- uni = int(esc, 16)
- # Check for surrogate pair on UCS-4 systems
- if 0xd800 <= uni <= 0xdbff and sys.maxunicode > 65535:
- msg = "Invalid \\uXXXX\\uXXXX surrogate pair"
- if not s[end + 5:end + 7] == '\\u':
- raise ValueError(errmsg(msg, s, end))
- esc2 = s[end + 7:end + 11]
- if len(esc2) != 4:
- raise ValueError(errmsg(msg, s, end))
- uni2 = int(esc2, 16)
- uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00))
- next_end += 6
- char = unichr(uni)
- end = next_end
- # Append the unescaped character
- _append(char)
- return u''.join(chunks), end
-
-
-# Use speedup if available
-scanstring = c_scanstring or py_scanstring
-
-WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS)
-WHITESPACE_STR = ' \t\n\r'
-
-def JSONObject((s, end), encoding, strict, scan_once, object_hook, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
- pairs = {}
- # Use a slice to prevent IndexError from being raised, the following
- # check will raise a more specific ValueError if the string is empty
- nextchar = s[end:end + 1]
- # Normally we expect nextchar == '"'
- if nextchar != '"':
- if nextchar in _ws:
- end = _w(s, end).end()
- nextchar = s[end:end + 1]
- # Trivial empty object
- if nextchar == '}':
- return pairs, end + 1
- elif nextchar != '"':
- raise ValueError(errmsg("Expecting property name", s, end))
- end += 1
- while True:
- key, end = scanstring(s, end, encoding, strict)
-
- # To skip some function call overhead we optimize the fast paths where
- # the JSON key separator is ": " or just ":".
- if s[end:end + 1] != ':':
- end = _w(s, end).end()
- if s[end:end + 1] != ':':
- raise ValueError(errmsg("Expecting : delimiter", s, end))
-
- end += 1
-
- try:
- if s[end] in _ws:
- end += 1
- if s[end] in _ws:
- end = _w(s, end + 1).end()
- except IndexError:
- pass
-
- try:
- value, end = scan_once(s, end)
- except StopIteration:
- raise ValueError(errmsg("Expecting object", s, end))
- pairs[key] = value
-
- try:
- nextchar = s[end]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end]
- except IndexError:
- nextchar = ''
- end += 1
-
- if nextchar == '}':
- break
- elif nextchar != ',':
- raise ValueError(errmsg("Expecting , delimiter", s, end - 1))
-
- try:
- nextchar = s[end]
- if nextchar in _ws:
- end += 1
- nextchar = s[end]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end]
- except IndexError:
- nextchar = ''
-
- end += 1
- if nextchar != '"':
- raise ValueError(errmsg("Expecting property name", s, end - 1))
-
- if object_hook is not None:
- pairs = object_hook(pairs)
- return pairs, end
-
-def JSONArray((s, end), scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
- values = []
- nextchar = s[end:end + 1]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end:end + 1]
- # Look-ahead for trivial empty array
- if nextchar == ']':
- return values, end + 1
- _append = values.append
- while True:
- try:
- value, end = scan_once(s, end)
- except StopIteration:
- raise ValueError(errmsg("Expecting object", s, end))
- _append(value)
- nextchar = s[end:end + 1]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end:end + 1]
- end += 1
- if nextchar == ']':
- break
- elif nextchar != ',':
- raise ValueError(errmsg("Expecting , delimiter", s, end))
-
- try:
- if s[end] in _ws:
- end += 1
- if s[end] in _ws:
- end = _w(s, end + 1).end()
- except IndexError:
- pass
-
- return values, end
-
-class JSONDecoder(object):
- """Simple JSON <http://json.org> decoder
-
- Performs the following translations in decoding by default:
-
- +---------------+-------------------+
- | JSON | Python |
- +===============+===================+
- | object | dict |
- +---------------+-------------------+
- | array | list |
- +---------------+-------------------+
- | string | unicode |
- +---------------+-------------------+
- | number (int) | int, long |
- +---------------+-------------------+
- | number (real) | float |
- +---------------+-------------------+
- | true | True |
- +---------------+-------------------+
- | false | False |
- +---------------+-------------------+
- | null | None |
- +---------------+-------------------+
-
- It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as
- their corresponding ``float`` values, which is outside the JSON spec.
-
- """
-
- def __init__(self, encoding=None, object_hook=None, parse_float=None,
- parse_int=None, parse_constant=None, strict=True):
- """``encoding`` determines the encoding used to interpret any ``str``
- objects decoded by this instance (utf-8 by default). It has no
- effect when decoding ``unicode`` objects.
-
- Note that currently only encodings that are a superset of ASCII work,
- strings of other encodings should be passed in as ``unicode``.
-
- ``object_hook``, if specified, will be called with the result
- of every JSON object decoded and its return value will be used in
- place of the given ``dict``. This can be used to provide custom
- deserializations (e.g. to support JSON-RPC class hinting).
-
- ``parse_float``, if specified, will be called with the string
- of every JSON float to be decoded. By default this is equivalent to
- float(num_str). This can be used to use another datatype or parser
- for JSON floats (e.g. decimal.Decimal).
-
- ``parse_int``, if specified, will be called with the string
- of every JSON int to be decoded. By default this is equivalent to
- int(num_str). This can be used to use another datatype or parser
- for JSON integers (e.g. float).
-
- ``parse_constant``, if specified, will be called with one of the
- following strings: -Infinity, Infinity, NaN.
- This can be used to raise an exception if invalid JSON numbers
- are encountered.
-
- """
- self.encoding = encoding
- self.object_hook = object_hook
- self.parse_float = parse_float or float
- self.parse_int = parse_int or int
- self.parse_constant = parse_constant or _CONSTANTS.__getitem__
- self.strict = strict
- self.parse_object = JSONObject
- self.parse_array = JSONArray
- self.parse_string = scanstring
- self.scan_once = make_scanner(self)
-
- def decode(self, s, _w=WHITESPACE.match):
- """Return the Python representation of ``s`` (a ``str`` or ``unicode``
- instance containing a JSON document)
-
- """
- obj, end = self.raw_decode(s, idx=_w(s, 0).end())
- end = _w(s, end).end()
- if end != len(s):
- raise ValueError(errmsg("Extra data", s, end, len(s)))
- return obj
-
- def raw_decode(self, s, idx=0):
- """Decode a JSON document from ``s`` (a ``str`` or ``unicode`` beginning
- with a JSON document) and return a 2-tuple of the Python
- representation and the index in ``s`` where the document ended.
-
- This can be used to decode a JSON document from a string that may
- have extraneous data at the end.
-
- """
- try:
- obj, end = self.scan_once(s, idx)
- except StopIteration:
- raise ValueError("No JSON object could be decoded")
- return obj, end
diff --git a/parts/django/django/utils/simplejson/encoder.py b/parts/django/django/utils/simplejson/encoder.py
deleted file mode 100644
index 06ebe62..0000000
--- a/parts/django/django/utils/simplejson/encoder.py
+++ /dev/null
@@ -1,430 +0,0 @@
-"""Implementation of JSONEncoder
-"""
-import re
-
-c_encode_basestring_ascii = None
-c_make_encoder = None
-
-ESCAPE = re.compile(r'[\x00-\x1f\\"\b\f\n\r\t]')
-ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])')
-HAS_UTF8 = re.compile(r'[\x80-\xff]')
-ESCAPE_DCT = {
- '\\': '\\\\',
- '"': '\\"',
- '\b': '\\b',
- '\f': '\\f',
- '\n': '\\n',
- '\r': '\\r',
- '\t': '\\t',
-}
-for i in range(0x20):
- ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
-
-# Assume this produces an infinity on all machines (probably not guaranteed)
-INFINITY = float('1e66666')
-FLOAT_REPR = repr
-
-def encode_basestring(s):
- """Return a JSON representation of a Python string
-
- """
- def replace(match):
- return ESCAPE_DCT[match.group(0)]
- return '"' + ESCAPE.sub(replace, s) + '"'
-
-
-def py_encode_basestring_ascii(s):
- """Return an ASCII-only JSON representation of a Python string
-
- """
- if isinstance(s, str) and HAS_UTF8.search(s) is not None:
- s = s.decode('utf-8')
- def replace(match):
- s = match.group(0)
- try:
- return ESCAPE_DCT[s]
- except KeyError:
- n = ord(s)
- if n < 0x10000:
- return '\\u%04x' % (n,)
- else:
- # surrogate pair
- n -= 0x10000
- s1 = 0xd800 | ((n >> 10) & 0x3ff)
- s2 = 0xdc00 | (n & 0x3ff)
- return '\\u%04x\\u%04x' % (s1, s2)
- return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
-
-
-encode_basestring_ascii = c_encode_basestring_ascii or py_encode_basestring_ascii
-
-class JSONEncoder(object):
- """Extensible JSON <http://json.org> encoder for Python data structures.
-
- Supports the following objects and types by default:
-
- +-------------------+---------------+
- | Python | JSON |
- +===================+===============+
- | dict | object |
- +-------------------+---------------+
- | list, tuple | array |
- +-------------------+---------------+
- | str, unicode | string |
- +-------------------+---------------+
- | int, long, float | number |
- +-------------------+---------------+
- | True | true |
- +-------------------+---------------+
- | False | false |
- +-------------------+---------------+
- | None | null |
- +-------------------+---------------+
-
- To extend this to recognize other objects, subclass and implement a
- ``.default()`` method with another method that returns a serializable
- object for ``o`` if possible, otherwise it should call the superclass
- implementation (to raise ``TypeError``).
-
- """
- item_separator = ', '
- key_separator = ': '
- def __init__(self, skipkeys=False, ensure_ascii=True,
- check_circular=True, allow_nan=True, sort_keys=False,
- indent=None, separators=None, encoding='utf-8', default=None):
- """Constructor for JSONEncoder, with sensible defaults.
-
- If skipkeys is False, then it is a TypeError to attempt
- encoding of keys that are not str, int, long, float or None. If
- skipkeys is True, such items are simply skipped.
-
- If ensure_ascii is True, the output is guaranteed to be str
- objects with all incoming unicode characters escaped. If
- ensure_ascii is false, the output will be unicode object.
-
- If check_circular is True, then lists, dicts, and custom encoded
- objects will be checked for circular references during encoding to
- prevent an infinite recursion (which would cause an OverflowError).
- Otherwise, no such check takes place.
-
- If allow_nan is True, then NaN, Infinity, and -Infinity will be
- encoded as such. This behavior is not JSON specification compliant,
- but is consistent with most JavaScript based encoders and decoders.
- Otherwise, it will be a ValueError to encode such floats.
-
- If sort_keys is True, then the output of dictionaries will be
- sorted by key; this is useful for regression tests to ensure
- that JSON serializations can be compared on a day-to-day basis.
-
- If indent is a non-negative integer, then JSON array
- elements and object members will be pretty-printed with that
- indent level. An indent level of 0 will only insert newlines.
- None is the most compact representation.
-
- If specified, separators should be a (item_separator, key_separator)
- tuple. The default is (', ', ': '). To get the most compact JSON
- representation you should specify (',', ':') to eliminate whitespace.
-
- If specified, default is a function that gets called for objects
- that can't otherwise be serialized. It should return a JSON encodable
- version of the object or raise a ``TypeError``.
-
- If encoding is not None, then all input strings will be
- transformed into unicode using that encoding prior to JSON-encoding.
- The default is UTF-8.
-
- """
-
- self.skipkeys = skipkeys
- self.ensure_ascii = ensure_ascii
- self.check_circular = check_circular
- self.allow_nan = allow_nan
- self.sort_keys = sort_keys
- self.indent = indent
- if separators is not None:
- self.item_separator, self.key_separator = separators
- if default is not None:
- self.default = default
- self.encoding = encoding
-
- def default(self, o):
- """Implement this method in a subclass such that it returns
- a serializable object for ``o``, or calls the base implementation
- (to raise a ``TypeError``).
-
- For example, to support arbitrary iterators, you could
- implement default like this::
-
- def default(self, o):
- try:
- iterable = iter(o)
- except TypeError:
- pass
- else:
- return list(iterable)
- return JSONEncoder.default(self, o)
-
- """
- raise TypeError("%r is not JSON serializable" % (o,))
-
- def encode(self, o):
- """Return a JSON string representation of a Python data structure.
-
- >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
- '{"foo": ["bar", "baz"]}'
-
- """
- # This is for extremely simple cases and benchmarks.
- if isinstance(o, basestring):
- if isinstance(o, str):
- _encoding = self.encoding
- if (_encoding is not None
- and not (_encoding == 'utf-8')):
- o = o.decode(_encoding)
- if self.ensure_ascii:
- return encode_basestring_ascii(o)
- else:
- return encode_basestring(o)
- # This doesn't pass the iterator directly to ''.join() because the
- # exceptions aren't as detailed. The list call should be roughly
- # equivalent to the PySequence_Fast that ''.join() would do.
- chunks = self.iterencode(o, _one_shot=True)
- if not isinstance(chunks, (list, tuple)):
- chunks = list(chunks)
- return ''.join(chunks)
-
- def iterencode(self, o, _one_shot=False):
- """Encode the given object and yield each string
- representation as available.
-
- For example::
-
- for chunk in JSONEncoder().iterencode(bigobject):
- mysocket.write(chunk)
-
- """
- if self.check_circular:
- markers = {}
- else:
- markers = None
- if self.ensure_ascii:
- _encoder = encode_basestring_ascii
- else:
- _encoder = encode_basestring
- if self.encoding != 'utf-8':
- def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding):
- if isinstance(o, str):
- o = o.decode(_encoding)
- return _orig_encoder(o)
-
- def floatstr(o, allow_nan=self.allow_nan, _repr=FLOAT_REPR, _inf=INFINITY, _neginf=-INFINITY):
- # Check for specials. Note that this type of test is processor- and/or
- # platform-specific, so do tests which don't depend on the internals.
-
- if o != o:
- text = 'NaN'
- elif o == _inf:
- text = 'Infinity'
- elif o == _neginf:
- text = '-Infinity'
- else:
- return _repr(o)
-
- if not allow_nan:
- raise ValueError("Out of range float values are not JSON compliant: %r"
- % (o,))
-
- return text
-
-
- if _one_shot and c_make_encoder is not None and not self.indent and not self.sort_keys:
- _iterencode = c_make_encoder(
- markers, self.default, _encoder, self.indent,
- self.key_separator, self.item_separator, self.sort_keys,
- self.skipkeys, self.allow_nan)
- else:
- _iterencode = _make_iterencode(
- markers, self.default, _encoder, self.indent, floatstr,
- self.key_separator, self.item_separator, self.sort_keys,
- self.skipkeys, _one_shot)
- return _iterencode(o, 0)
-
-def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, _key_separator, _item_separator, _sort_keys, _skipkeys, _one_shot,
- ## HACK: hand-optimized bytecode; turn globals into locals
- False=False,
- True=True,
- ValueError=ValueError,
- basestring=basestring,
- dict=dict,
- float=float,
- id=id,
- int=int,
- isinstance=isinstance,
- list=list,
- long=long,
- str=str,
- tuple=tuple,
- ):
-
- def _iterencode_list(lst, _current_indent_level):
- if not lst:
- yield '[]'
- return
- if markers is not None:
- markerid = id(lst)
- if markerid in markers:
- raise ValueError("Circular reference detected")
- markers[markerid] = lst
- buf = '['
- if _indent is not None:
- _current_indent_level += 1
- newline_indent = '\n' + (' ' * (_indent * _current_indent_level))
- separator = _item_separator + newline_indent
- buf += newline_indent
- else:
- newline_indent = None
- separator = _item_separator
- first = True
- for value in lst:
- if first:
- first = False
- else:
- buf = separator
- if isinstance(value, basestring):
- yield buf + _encoder(value)
- elif value is None:
- yield buf + 'null'
- elif value is True:
- yield buf + 'true'
- elif value is False:
- yield buf + 'false'
- elif isinstance(value, (int, long)):
- yield buf + str(value)
- elif isinstance(value, float):
- yield buf + _floatstr(value)
- else:
- yield buf
- if isinstance(value, (list, tuple)):
- chunks = _iterencode_list(value, _current_indent_level)
- elif isinstance(value, dict):
- chunks = _iterencode_dict(value, _current_indent_level)
- else:
- chunks = _iterencode(value, _current_indent_level)
- for chunk in chunks:
- yield chunk
- if newline_indent is not None:
- _current_indent_level -= 1
- yield '\n' + (' ' * (_indent * _current_indent_level))
- yield ']'
- if markers is not None:
- del markers[markerid]
-
- def _iterencode_dict(dct, _current_indent_level):
- if not dct:
- yield '{}'
- return
- if markers is not None:
- markerid = id(dct)
- if markerid in markers:
- raise ValueError("Circular reference detected")
- markers[markerid] = dct
- yield '{'
- if _indent is not None:
- _current_indent_level += 1
- newline_indent = '\n' + (' ' * (_indent * _current_indent_level))
- item_separator = _item_separator + newline_indent
- yield newline_indent
- else:
- newline_indent = None
- item_separator = _item_separator
- first = True
- if _sort_keys:
- items = dct.items()
- items.sort(key=lambda kv: kv[0])
- else:
- items = dct.iteritems()
- for key, value in items:
- if isinstance(key, basestring):
- pass
- # JavaScript is weakly typed for these, so it makes sense to
- # also allow them. Many encoders seem to do something like this.
- elif isinstance(key, float):
- key = _floatstr(key)
- elif isinstance(key, (int, long)):
- key = str(key)
- elif key is True:
- key = 'true'
- elif key is False:
- key = 'false'
- elif key is None:
- key = 'null'
- elif _skipkeys:
- continue
- else:
- raise TypeError("key %r is not a string" % (key,))
- if first:
- first = False
- else:
- yield item_separator
- yield _encoder(key)
- yield _key_separator
- if isinstance(value, basestring):
- yield _encoder(value)
- elif value is None:
- yield 'null'
- elif value is True:
- yield 'true'
- elif value is False:
- yield 'false'
- elif isinstance(value, (int, long)):
- yield str(value)
- elif isinstance(value, float):
- yield _floatstr(value)
- else:
- if isinstance(value, (list, tuple)):
- chunks = _iterencode_list(value, _current_indent_level)
- elif isinstance(value, dict):
- chunks = _iterencode_dict(value, _current_indent_level)
- else:
- chunks = _iterencode(value, _current_indent_level)
- for chunk in chunks:
- yield chunk
- if newline_indent is not None:
- _current_indent_level -= 1
- yield '\n' + (' ' * (_indent * _current_indent_level))
- yield '}'
- if markers is not None:
- del markers[markerid]
-
- def _iterencode(o, _current_indent_level):
- if isinstance(o, basestring):
- yield _encoder(o)
- elif o is None:
- yield 'null'
- elif o is True:
- yield 'true'
- elif o is False:
- yield 'false'
- elif isinstance(o, (int, long)):
- yield str(o)
- elif isinstance(o, float):
- yield _floatstr(o)
- elif isinstance(o, (list, tuple)):
- for chunk in _iterencode_list(o, _current_indent_level):
- yield chunk
- elif isinstance(o, dict):
- for chunk in _iterencode_dict(o, _current_indent_level):
- yield chunk
- else:
- if markers is not None:
- markerid = id(o)
- if markerid in markers:
- raise ValueError("Circular reference detected")
- markers[markerid] = o
- o = _default(o)
- for chunk in _iterencode(o, _current_indent_level):
- yield chunk
- if markers is not None:
- del markers[markerid]
-
- return _iterencode
diff --git a/parts/django/django/utils/simplejson/scanner.py b/parts/django/django/utils/simplejson/scanner.py
deleted file mode 100644
index adbc6ec..0000000
--- a/parts/django/django/utils/simplejson/scanner.py
+++ /dev/null
@@ -1,65 +0,0 @@
-"""JSON token scanner
-"""
-import re
-try:
- from simplejson._speedups import make_scanner as c_make_scanner
-except ImportError:
- c_make_scanner = None
-
-__all__ = ['make_scanner']
-
-NUMBER_RE = re.compile(
- r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?',
- (re.VERBOSE | re.MULTILINE | re.DOTALL))
-
-def py_make_scanner(context):
- parse_object = context.parse_object
- parse_array = context.parse_array
- parse_string = context.parse_string
- match_number = NUMBER_RE.match
- encoding = context.encoding
- strict = context.strict
- parse_float = context.parse_float
- parse_int = context.parse_int
- parse_constant = context.parse_constant
- object_hook = context.object_hook
-
- def _scan_once(string, idx):
- try:
- nextchar = string[idx]
- except IndexError:
- raise StopIteration
-
- if nextchar == '"':
- return parse_string(string, idx + 1, encoding, strict)
- elif nextchar == '{':
- return parse_object((string, idx + 1), encoding, strict, _scan_once, object_hook)
- elif nextchar == '[':
- return parse_array((string, idx + 1), _scan_once)
- elif nextchar == 'n' and string[idx:idx + 4] == 'null':
- return None, idx + 4
- elif nextchar == 't' and string[idx:idx + 4] == 'true':
- return True, idx + 4
- elif nextchar == 'f' and string[idx:idx + 5] == 'false':
- return False, idx + 5
-
- m = match_number(string, idx)
- if m is not None:
- integer, frac, exp = m.groups()
- if frac or exp:
- res = parse_float(integer + (frac or '') + (exp or ''))
- else:
- res = parse_int(integer)
- return res, m.end()
- elif nextchar == 'N' and string[idx:idx + 3] == 'NaN':
- return parse_constant('NaN'), idx + 3
- elif nextchar == 'I' and string[idx:idx + 8] == 'Infinity':
- return parse_constant('Infinity'), idx + 8
- elif nextchar == '-' and string[idx:idx + 9] == '-Infinity':
- return parse_constant('-Infinity'), idx + 9
- else:
- raise StopIteration
-
- return _scan_once
-
-make_scanner = c_make_scanner or py_make_scanner
diff --git a/parts/django/django/utils/simplejson/tool.py b/parts/django/django/utils/simplejson/tool.py
deleted file mode 100644
index 74401c2..0000000
--- a/parts/django/django/utils/simplejson/tool.py
+++ /dev/null
@@ -1,35 +0,0 @@
-r"""Using simplejson from the shell to validate and
-pretty-print::
-
- $ echo '{"json":"obj"}' | python -msimplejson.tool
- {
- "json": "obj"
- }
- $ echo '{ 1.2:3.4}' | python -msimplejson.tool
- Expecting property name: line 1 column 2 (char 2)
-"""
-from django.utils import simplejson
-
-def main():
- import sys
- if len(sys.argv) == 1:
- infile = sys.stdin
- outfile = sys.stdout
- elif len(sys.argv) == 2:
- infile = open(sys.argv[1], 'rb')
- outfile = sys.stdout
- elif len(sys.argv) == 3:
- infile = open(sys.argv[1], 'rb')
- outfile = open(sys.argv[2], 'wb')
- else:
- raise SystemExit("%s [infile [outfile]]" % (sys.argv[0],))
- try:
- obj = simplejson.load(infile)
- except ValueError, e:
- raise SystemExit(e)
- simplejson.dump(obj, outfile, sort_keys=True, indent=4)
- outfile.write('\n')
-
-
-if __name__ == '__main__':
- main()
diff --git a/parts/django/django/utils/stopwords.py b/parts/django/django/utils/stopwords.py
deleted file mode 100644
index 18aeb7f..0000000
--- a/parts/django/django/utils/stopwords.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Performance note: I benchmarked this code using a set instead of
-# a list for the stopwords and was surprised to find that the list
-# performed /better/ than the set - maybe because it's only a small
-# list.
-
-stopwords = '''
-i
-a
-an
-are
-as
-at
-be
-by
-for
-from
-how
-in
-is
-it
-of
-on
-or
-that
-the
-this
-to
-was
-what
-when
-where
-'''.split()
-
-def strip_stopwords(sentence):
- "Removes stopwords - also normalizes whitespace"
- words = sentence.split()
- sentence = []
- for word in words:
- if word.lower() not in stopwords:
- sentence.append(word)
- return u' '.join(sentence)
-
diff --git a/parts/django/django/utils/synch.py b/parts/django/django/utils/synch.py
deleted file mode 100644
index 2e808c1..0000000
--- a/parts/django/django/utils/synch.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-Synchronization primitives:
-
- - reader-writer lock (preference to writers)
-
-(Contributed to Django by eugene@lazutkin.com)
-"""
-
-try:
- import threading
-except ImportError:
- import dummy_threading as threading
-
-class RWLock:
- """
- Classic implementation of reader-writer lock with preference to writers.
-
- Readers can access a resource simultaneously.
- Writers get an exclusive access.
-
- API is self-descriptive:
- reader_enters()
- reader_leaves()
- writer_enters()
- writer_leaves()
- """
- def __init__(self):
- self.mutex = threading.RLock()
- self.can_read = threading.Semaphore(0)
- self.can_write = threading.Semaphore(0)
- self.active_readers = 0
- self.active_writers = 0
- self.waiting_readers = 0
- self.waiting_writers = 0
-
- def reader_enters(self):
- self.mutex.acquire()
- try:
- if self.active_writers == 0 and self.waiting_writers == 0:
- self.active_readers += 1
- self.can_read.release()
- else:
- self.waiting_readers += 1
- finally:
- self.mutex.release()
- self.can_read.acquire()
-
- def reader_leaves(self):
- self.mutex.acquire()
- try:
- self.active_readers -= 1
- if self.active_readers == 0 and self.waiting_writers != 0:
- self.active_writers += 1
- self.waiting_writers -= 1
- self.can_write.release()
- finally:
- self.mutex.release()
-
- def writer_enters(self):
- self.mutex.acquire()
- try:
- if self.active_writers == 0 and self.waiting_writers == 0 and self.active_readers == 0:
- self.active_writers += 1
- self.can_write.release()
- else:
- self.waiting_writers += 1
- finally:
- self.mutex.release()
- self.can_write.acquire()
-
- def writer_leaves(self):
- self.mutex.acquire()
- try:
- self.active_writers -= 1
- if self.waiting_writers != 0:
- self.active_writers += 1
- self.waiting_writers -= 1
- self.can_write.release()
- elif self.waiting_readers != 0:
- t = self.waiting_readers
- self.waiting_readers = 0
- self.active_readers += t
- while t > 0:
- self.can_read.release()
- t -= 1
- finally:
- self.mutex.release()
diff --git a/parts/django/django/utils/termcolors.py b/parts/django/django/utils/termcolors.py
deleted file mode 100644
index 4fb64ac..0000000
--- a/parts/django/django/utils/termcolors.py
+++ /dev/null
@@ -1,198 +0,0 @@
-"""
-termcolors.py
-"""
-
-color_names = ('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white')
-foreground = dict([(color_names[x], '3%s' % x) for x in range(8)])
-background = dict([(color_names[x], '4%s' % x) for x in range(8)])
-
-RESET = '0'
-opt_dict = {'bold': '1', 'underscore': '4', 'blink': '5', 'reverse': '7', 'conceal': '8'}
-
-def colorize(text='', opts=(), **kwargs):
- """
- Returns your text, enclosed in ANSI graphics codes.
-
- Depends on the keyword arguments 'fg' and 'bg', and the contents of
- the opts tuple/list.
-
- Returns the RESET code if no parameters are given.
-
- Valid colors:
- 'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'
-
- Valid options:
- 'bold'
- 'underscore'
- 'blink'
- 'reverse'
- 'conceal'
- 'noreset' - string will not be auto-terminated with the RESET code
-
- Examples:
- colorize('hello', fg='red', bg='blue', opts=('blink',))
- colorize()
- colorize('goodbye', opts=('underscore',))
- print colorize('first line', fg='red', opts=('noreset',))
- print 'this should be red too'
- print colorize('and so should this')
- print 'this should not be red'
- """
- code_list = []
- if text == '' and len(opts) == 1 and opts[0] == 'reset':
- return '\x1b[%sm' % RESET
- for k, v in kwargs.iteritems():
- if k == 'fg':
- code_list.append(foreground[v])
- elif k == 'bg':
- code_list.append(background[v])
- for o in opts:
- if o in opt_dict:
- code_list.append(opt_dict[o])
- if 'noreset' not in opts:
- text = text + '\x1b[%sm' % RESET
- return ('\x1b[%sm' % ';'.join(code_list)) + text
-
-def make_style(opts=(), **kwargs):
- """
- Returns a function with default parameters for colorize()
-
- Example:
- bold_red = make_style(opts=('bold',), fg='red')
- print bold_red('hello')
- KEYWORD = make_style(fg='yellow')
- COMMENT = make_style(fg='blue', opts=('bold',))
- """
- return lambda text: colorize(text, opts, **kwargs)
-
-NOCOLOR_PALETTE = 'nocolor'
-DARK_PALETTE = 'dark'
-LIGHT_PALETTE = 'light'
-
-PALETTES = {
- NOCOLOR_PALETTE: {
- 'ERROR': {},
- 'NOTICE': {},
- 'SQL_FIELD': {},
- 'SQL_COLTYPE': {},
- 'SQL_KEYWORD': {},
- 'SQL_TABLE': {},
- 'HTTP_INFO': {},
- 'HTTP_SUCCESS': {},
- 'HTTP_REDIRECT': {},
- 'HTTP_NOT_MODIFIED': {},
- 'HTTP_BAD_REQUEST': {},
- 'HTTP_NOT_FOUND': {},
- 'HTTP_SERVER_ERROR': {},
- },
- DARK_PALETTE: {
- 'ERROR': { 'fg': 'red', 'opts': ('bold',) },
- 'NOTICE': { 'fg': 'red' },
- 'SQL_FIELD': { 'fg': 'green', 'opts': ('bold',) },
- 'SQL_COLTYPE': { 'fg': 'green' },
- 'SQL_KEYWORD': { 'fg': 'yellow' },
- 'SQL_TABLE': { 'opts': ('bold',) },
- 'HTTP_INFO': { 'opts': ('bold',) },
- 'HTTP_SUCCESS': { },
- 'HTTP_REDIRECT': { 'fg': 'green' },
- 'HTTP_NOT_MODIFIED': { 'fg': 'cyan' },
- 'HTTP_BAD_REQUEST': { 'fg': 'red', 'opts': ('bold',) },
- 'HTTP_NOT_FOUND': { 'fg': 'yellow' },
- 'HTTP_SERVER_ERROR': { 'fg': 'magenta', 'opts': ('bold',) },
- },
- LIGHT_PALETTE: {
- 'ERROR': { 'fg': 'red', 'opts': ('bold',) },
- 'NOTICE': { 'fg': 'red' },
- 'SQL_FIELD': { 'fg': 'green', 'opts': ('bold',) },
- 'SQL_COLTYPE': { 'fg': 'green' },
- 'SQL_KEYWORD': { 'fg': 'blue' },
- 'SQL_TABLE': { 'opts': ('bold',) },
- 'HTTP_INFO': { 'opts': ('bold',) },
- 'HTTP_SUCCESS': { },
- 'HTTP_REDIRECT': { 'fg': 'green', 'opts': ('bold',) },
- 'HTTP_NOT_MODIFIED': { 'fg': 'green' },
- 'HTTP_BAD_REQUEST': { 'fg': 'red', 'opts': ('bold',) },
- 'HTTP_NOT_FOUND': { 'fg': 'red' },
- 'HTTP_SERVER_ERROR': { 'fg': 'magenta', 'opts': ('bold',) },
- }
-}
-DEFAULT_PALETTE = DARK_PALETTE
-
-def parse_color_setting(config_string):
- """Parse a DJANGO_COLORS environment variable to produce the system palette
-
- The general form of a pallete definition is:
-
- "palette;role=fg;role=fg/bg;role=fg,option,option;role=fg/bg,option,option"
-
- where:
- palette is a named palette; one of 'light', 'dark', or 'nocolor'.
- role is a named style used by Django
- fg is a background color.
- bg is a background color.
- option is a display options.
-
- Specifying a named palette is the same as manually specifying the individual
- definitions for each role. Any individual definitions following the pallete
- definition will augment the base palette definition.
-
- Valid roles:
- 'error', 'notice', 'sql_field', 'sql_coltype', 'sql_keyword', 'sql_table',
- 'http_info', 'http_success', 'http_redirect', 'http_bad_request',
- 'http_not_found', 'http_server_error'
-
- Valid colors:
- 'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'
-
- Valid options:
- 'bold', 'underscore', 'blink', 'reverse', 'conceal'
-
- """
- if not config_string:
- return PALETTES[DEFAULT_PALETTE]
-
- # Split the color configuration into parts
- parts = config_string.lower().split(';')
- palette = PALETTES[NOCOLOR_PALETTE].copy()
- for part in parts:
- if part in PALETTES:
- # A default palette has been specified
- palette.update(PALETTES[part])
- elif '=' in part:
- # Process a palette defining string
- definition = {}
-
- # Break the definition into the role,
- # plus the list of specific instructions.
- # The role must be in upper case
- role, instructions = part.split('=')
- role = role.upper()
-
- styles = instructions.split(',')
- styles.reverse()
-
- # The first instruction can contain a slash
- # to break apart fg/bg.
- colors = styles.pop().split('/')
- colors.reverse()
- fg = colors.pop()
- if fg in color_names:
- definition['fg'] = fg
- if colors and colors[-1] in color_names:
- definition['bg'] = colors[-1]
-
- # All remaining instructions are options
- opts = tuple(s for s in styles if s in opt_dict.keys())
- if opts:
- definition['opts'] = opts
-
- # The nocolor palette has all available roles.
- # Use that palette as the basis for determining
- # if the role is valid.
- if role in PALETTES[NOCOLOR_PALETTE] and definition:
- palette[role] = definition
-
- # If there are no colors specified, return the empty palette.
- if palette == PALETTES[NOCOLOR_PALETTE]:
- return None
- return palette
diff --git a/parts/django/django/utils/text.py b/parts/django/django/utils/text.py
deleted file mode 100644
index b054604..0000000
--- a/parts/django/django/utils/text.py
+++ /dev/null
@@ -1,282 +0,0 @@
-import re
-from django.utils.encoding import force_unicode
-from django.utils.functional import allow_lazy
-from django.utils.translation import ugettext_lazy
-from htmlentitydefs import name2codepoint
-
-# Capitalizes the first letter of a string.
-capfirst = lambda x: x and force_unicode(x)[0].upper() + force_unicode(x)[1:]
-capfirst = allow_lazy(capfirst, unicode)
-
-def wrap(text, width):
- """
- A word-wrap function that preserves existing line breaks and most spaces in
- the text. Expects that existing line breaks are posix newlines.
- """
- text = force_unicode(text)
- def _generator():
- it = iter(text.split(' '))
- word = it.next()
- yield word
- pos = len(word) - word.rfind('\n') - 1
- for word in it:
- if "\n" in word:
- lines = word.split('\n')
- else:
- lines = (word,)
- pos += len(lines[0]) + 1
- if pos > width:
- yield '\n'
- pos = len(lines[-1])
- else:
- yield ' '
- if len(lines) > 1:
- pos = len(lines[-1])
- yield word
- return u''.join(_generator())
-wrap = allow_lazy(wrap, unicode)
-
-def truncate_words(s, num, end_text='...'):
- """Truncates a string after a certain number of words. Takes an optional
- argument of what should be used to notify that the string has been
- truncated, defaulting to ellipsis (...)
-
- Newlines in the string will be stripped.
- """
- s = force_unicode(s)
- length = int(num)
- words = s.split()
- if len(words) > length:
- words = words[:length]
- if not words[-1].endswith(end_text):
- words.append(end_text)
- return u' '.join(words)
-truncate_words = allow_lazy(truncate_words, unicode)
-
-def truncate_html_words(s, num, end_text='...'):
- """Truncates HTML to a certain number of words (not counting tags and
- comments). Closes opened tags if they were correctly closed in the given
- html. Takes an optional argument of what should be used to notify that the
- string has been truncated, defaulting to ellipsis (...).
-
- Newlines in the HTML are preserved.
- """
- s = force_unicode(s)
- length = int(num)
- if length <= 0:
- return u''
- html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input')
- # Set up regular expressions
- re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U)
- re_tag = re.compile(r'<(/)?([^ ]+?)(?: (/)| .*?)?>')
- # Count non-HTML words and keep note of open tags
- pos = 0
- end_text_pos = 0
- words = 0
- open_tags = []
- while words <= length:
- m = re_words.search(s, pos)
- if not m:
- # Checked through whole string
- break
- pos = m.end(0)
- if m.group(1):
- # It's an actual non-HTML word
- words += 1
- if words == length:
- end_text_pos = pos
- continue
- # Check for tag
- tag = re_tag.match(m.group(0))
- if not tag or end_text_pos:
- # Don't worry about non tags or tags after our truncate point
- continue
- closing_tag, tagname, self_closing = tag.groups()
- tagname = tagname.lower() # Element names are always case-insensitive
- if self_closing or tagname in html4_singlets:
- pass
- elif closing_tag:
- # Check for match in open tags list
- try:
- i = open_tags.index(tagname)
- except ValueError:
- pass
- else:
- # SGML: An end tag closes, back to the matching start tag, all unclosed intervening start tags with omitted end tags
- open_tags = open_tags[i+1:]
- else:
- # Add it to the start of the open tags list
- open_tags.insert(0, tagname)
- if words <= length:
- # Don't try to close tags if we don't need to truncate
- return s
- out = s[:end_text_pos]
- if end_text:
- out += ' ' + end_text
- # Close any tags still open
- for tag in open_tags:
- out += '</%s>' % tag
- # Return string
- return out
-truncate_html_words = allow_lazy(truncate_html_words, unicode)
-
-def get_valid_filename(s):
- """
- Returns the given string converted to a string that can be used for a clean
- filename. Specifically, leading and trailing spaces are removed; other
- spaces are converted to underscores; and anything that is not a unicode
- alphanumeric, dash, underscore, or dot, is removed.
- >>> get_valid_filename("john's portrait in 2004.jpg")
- u'johns_portrait_in_2004.jpg'
- """
- s = force_unicode(s).strip().replace(' ', '_')
- return re.sub(r'(?u)[^-\w.]', '', s)
-get_valid_filename = allow_lazy(get_valid_filename, unicode)
-
-def get_text_list(list_, last_word=ugettext_lazy(u'or')):
- """
- >>> get_text_list(['a', 'b', 'c', 'd'])
- u'a, b, c or d'
- >>> get_text_list(['a', 'b', 'c'], 'and')
- u'a, b and c'
- >>> get_text_list(['a', 'b'], 'and')
- u'a and b'
- >>> get_text_list(['a'])
- u'a'
- >>> get_text_list([])
- u''
- """
- if len(list_) == 0: return u''
- if len(list_) == 1: return force_unicode(list_[0])
- return u'%s %s %s' % (', '.join([force_unicode(i) for i in list_][:-1]), force_unicode(last_word), force_unicode(list_[-1]))
-get_text_list = allow_lazy(get_text_list, unicode)
-
-def normalize_newlines(text):
- return force_unicode(re.sub(r'\r\n|\r|\n', '\n', text))
-normalize_newlines = allow_lazy(normalize_newlines, unicode)
-
-def recapitalize(text):
- "Recapitalizes text, placing caps after end-of-sentence punctuation."
- text = force_unicode(text).lower()
- capsRE = re.compile(r'(?:^|(?<=[\.\?\!] ))([a-z])')
- text = capsRE.sub(lambda x: x.group(1).upper(), text)
- return text
-recapitalize = allow_lazy(recapitalize)
-
-def phone2numeric(phone):
- "Converts a phone number with letters into its numeric equivalent."
- letters = re.compile(r'[A-Z]', re.I)
- char2number = lambda m: {'a': '2', 'b': '2', 'c': '2', 'd': '3', 'e': '3',
- 'f': '3', 'g': '4', 'h': '4', 'i': '4', 'j': '5', 'k': '5', 'l': '5',
- 'm': '6', 'n': '6', 'o': '6', 'p': '7', 'q': '7', 'r': '7', 's': '7',
- 't': '8', 'u': '8', 'v': '8', 'w': '9', 'x': '9', 'y': '9', 'z': '9',
- }.get(m.group(0).lower())
- return letters.sub(char2number, phone)
-phone2numeric = allow_lazy(phone2numeric)
-
-# From http://www.xhaus.com/alan/python/httpcomp.html#gzip
-# Used with permission.
-def compress_string(s):
- import cStringIO, gzip
- zbuf = cStringIO.StringIO()
- zfile = gzip.GzipFile(mode='wb', compresslevel=6, fileobj=zbuf)
- zfile.write(s)
- zfile.close()
- return zbuf.getvalue()
-
-ustring_re = re.compile(u"([\u0080-\uffff])")
-
-def javascript_quote(s, quote_double_quotes=False):
-
- def fix(match):
- return r"\u%04x" % ord(match.group(1))
-
- if type(s) == str:
- s = s.decode('utf-8')
- elif type(s) != unicode:
- raise TypeError(s)
- s = s.replace('\\', '\\\\')
- s = s.replace('\r', '\\r')
- s = s.replace('\n', '\\n')
- s = s.replace('\t', '\\t')
- s = s.replace("'", "\\'")
- if quote_double_quotes:
- s = s.replace('"', '&quot;')
- return str(ustring_re.sub(fix, s))
-javascript_quote = allow_lazy(javascript_quote, unicode)
-
-# Expression to match some_token and some_token="with spaces" (and similarly
-# for single-quoted strings).
-smart_split_re = re.compile(r"""
- ((?:
- [^\s'"]*
- (?:
- (?:"(?:[^"\\]|\\.)*" | '(?:[^'\\]|\\.)*')
- [^\s'"]*
- )+
- ) | \S+)
-""", re.VERBOSE)
-
-def smart_split(text):
- r"""
- Generator that splits a string by spaces, leaving quoted phrases together.
- Supports both single and double quotes, and supports escaping quotes with
- backslashes. In the output, strings will keep their initial and trailing
- quote marks and escaped quotes will remain escaped (the results can then
- be further processed with unescape_string_literal()).
-
- >>> list(smart_split(r'This is "a person\'s" test.'))
- [u'This', u'is', u'"a person\\\'s"', u'test.']
- >>> list(smart_split(r"Another 'person\'s' test."))
- [u'Another', u"'person\\'s'", u'test.']
- >>> list(smart_split(r'A "\"funky\" style" test.'))
- [u'A', u'"\\"funky\\" style"', u'test.']
- """
- text = force_unicode(text)
- for bit in smart_split_re.finditer(text):
- yield bit.group(0)
-smart_split = allow_lazy(smart_split, unicode)
-
-def _replace_entity(match):
- text = match.group(1)
- if text[0] == u'#':
- text = text[1:]
- try:
- if text[0] in u'xX':
- c = int(text[1:], 16)
- else:
- c = int(text)
- return unichr(c)
- except ValueError:
- return match.group(0)
- else:
- try:
- return unichr(name2codepoint[text])
- except (ValueError, KeyError):
- return match.group(0)
-
-_entity_re = re.compile(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));")
-
-def unescape_entities(text):
- return _entity_re.sub(_replace_entity, text)
-unescape_entities = allow_lazy(unescape_entities, unicode)
-
-def unescape_string_literal(s):
- r"""
- Convert quoted string literals to unquoted strings with escaped quotes and
- backslashes unquoted::
-
- >>> unescape_string_literal('"abc"')
- 'abc'
- >>> unescape_string_literal("'abc'")
- 'abc'
- >>> unescape_string_literal('"a \"bc\""')
- 'a "bc"'
- >>> unescape_string_literal("'\'ab\' c'")
- "'ab' c"
- """
- if s[0] not in "\"'" or s[-1] != s[0]:
- raise ValueError("Not a string literal: %r" % s)
- quote = s[0]
- return s[1:-1].replace(r'\%s' % quote, quote).replace(r'\\', '\\')
-unescape_string_literal = allow_lazy(unescape_string_literal)
diff --git a/parts/django/django/utils/thread_support.py b/parts/django/django/utils/thread_support.py
deleted file mode 100644
index 2b97d16..0000000
--- a/parts/django/django/utils/thread_support.py
+++ /dev/null
@@ -1,12 +0,0 @@
-"""
-Code used in a couple of places to work with the current thread's environment.
-Current users include i18n and request prefix handling.
-"""
-
-try:
- import threading
- currentThread = threading.currentThread
-except ImportError:
- def currentThread():
- return "no threading"
-
diff --git a/parts/django/django/utils/timesince.py b/parts/django/django/utils/timesince.py
deleted file mode 100644
index c584ce6..0000000
--- a/parts/django/django/utils/timesince.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import datetime
-import time
-
-from django.utils.tzinfo import LocalTimezone
-from django.utils.translation import ungettext, ugettext
-
-def timesince(d, now=None):
- """
- Takes two datetime objects and returns the time between d and now
- as a nicely formatted string, e.g. "10 minutes". If d occurs after now,
- then "0 minutes" is returned.
-
- Units used are years, months, weeks, days, hours, and minutes.
- Seconds and microseconds are ignored. Up to two adjacent units will be
- displayed. For example, "2 weeks, 3 days" and "1 year, 3 months" are
- possible outputs, but "2 weeks, 3 hours" and "1 year, 5 days" are not.
-
- Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since
- """
- chunks = (
- (60 * 60 * 24 * 365, lambda n: ungettext('year', 'years', n)),
- (60 * 60 * 24 * 30, lambda n: ungettext('month', 'months', n)),
- (60 * 60 * 24 * 7, lambda n : ungettext('week', 'weeks', n)),
- (60 * 60 * 24, lambda n : ungettext('day', 'days', n)),
- (60 * 60, lambda n: ungettext('hour', 'hours', n)),
- (60, lambda n: ungettext('minute', 'minutes', n))
- )
- # Convert datetime.date to datetime.datetime for comparison.
- if not isinstance(d, datetime.datetime):
- d = datetime.datetime(d.year, d.month, d.day)
- if now and not isinstance(now, datetime.datetime):
- now = datetime.datetime(now.year, now.month, now.day)
-
- if not now:
- if d.tzinfo:
- now = datetime.datetime.now(LocalTimezone(d))
- else:
- now = datetime.datetime.now()
-
- # ignore microsecond part of 'd' since we removed it from 'now'
- delta = now - (d - datetime.timedelta(0, 0, d.microsecond))
- since = delta.days * 24 * 60 * 60 + delta.seconds
- if since <= 0:
- # d is in the future compared to now, stop processing.
- return u'0 ' + ugettext('minutes')
- for i, (seconds, name) in enumerate(chunks):
- count = since // seconds
- if count != 0:
- break
- s = ugettext('%(number)d %(type)s') % {'number': count, 'type': name(count)}
- if i + 1 < len(chunks):
- # Now get the second item
- seconds2, name2 = chunks[i + 1]
- count2 = (since - (seconds * count)) // seconds2
- if count2 != 0:
- s += ugettext(', %(number)d %(type)s') % {'number': count2, 'type': name2(count2)}
- return s
-
-def timeuntil(d, now=None):
- """
- Like timesince, but returns a string measuring the time until
- the given time.
- """
- if not now:
- if getattr(d, 'tzinfo', None):
- now = datetime.datetime.now(LocalTimezone(d))
- else:
- now = datetime.datetime.now()
- return timesince(now, d)
diff --git a/parts/django/django/utils/translation/__init__.py b/parts/django/django/utils/translation/__init__.py
deleted file mode 100644
index 6d81726..0000000
--- a/parts/django/django/utils/translation/__init__.py
+++ /dev/null
@@ -1,104 +0,0 @@
-"""
-Internationalization support.
-"""
-from django.utils.encoding import force_unicode
-from django.utils.functional import lazy, curry
-
-
-__all__ = ['gettext', 'gettext_noop', 'gettext_lazy', 'ngettext',
- 'ngettext_lazy', 'string_concat', 'activate', 'deactivate',
- 'get_language', 'get_language_bidi', 'get_date_formats',
- 'get_partial_date_formats', 'check_for_language', 'to_locale',
- 'get_language_from_request', 'templatize', 'ugettext', 'ugettext_lazy',
- 'ungettext', 'deactivate_all']
-
-# Here be dragons, so a short explanation of the logic won't hurt:
-# We are trying to solve two problems: (1) access settings, in particular
-# settings.USE_I18N, as late as possible, so that modules can be imported
-# without having to first configure Django, and (2) if some other code creates
-# a reference to one of these functions, don't break that reference when we
-# replace the functions with their real counterparts (once we do access the
-# settings).
-
-def delayed_loader(real_name, *args, **kwargs):
- """
- Call the real, underlying function. We have a level of indirection here so
- that modules can use the translation bits without actually requiring
- Django's settings bits to be configured before import.
- """
- from django.conf import settings
- if settings.USE_I18N:
- from django.utils.translation import trans_real as trans
- else:
- from django.utils.translation import trans_null as trans
-
- # Make the originally requested function call on the way out the door.
- return getattr(trans, real_name)(*args, **kwargs)
-
-g = globals()
-for name in __all__:
- g['real_%s' % name] = curry(delayed_loader, name)
-del g, delayed_loader
-
-def gettext_noop(message):
- return real_gettext_noop(message)
-
-ugettext_noop = gettext_noop
-
-def gettext(message):
- return real_gettext(message)
-
-def ngettext(singular, plural, number):
- return real_ngettext(singular, plural, number)
-
-def ugettext(message):
- return real_ugettext(message)
-
-def ungettext(singular, plural, number):
- return real_ungettext(singular, plural, number)
-
-ngettext_lazy = lazy(ngettext, str)
-gettext_lazy = lazy(gettext, str)
-ungettext_lazy = lazy(ungettext, unicode)
-ugettext_lazy = lazy(ugettext, unicode)
-
-def activate(language):
- return real_activate(language)
-
-def deactivate():
- return real_deactivate()
-
-def get_language():
- return real_get_language()
-
-def get_language_bidi():
- return real_get_language_bidi()
-
-def get_date_formats():
- return real_get_date_formats()
-
-def get_partial_date_formats():
- return real_get_partial_date_formats()
-
-def check_for_language(lang_code):
- return real_check_for_language(lang_code)
-
-def to_locale(language):
- return real_to_locale(language)
-
-def get_language_from_request(request):
- return real_get_language_from_request(request)
-
-def templatize(src):
- return real_templatize(src)
-
-def deactivate_all():
- return real_deactivate_all()
-
-def _string_concat(*strings):
- """
- Lazy variant of string concatenation, needed for translations that are
- constructed from multiple parts.
- """
- return u''.join([force_unicode(s) for s in strings])
-string_concat = lazy(_string_concat, unicode)
diff --git a/parts/django/django/utils/translation/trans_null.py b/parts/django/django/utils/translation/trans_null.py
deleted file mode 100644
index 50f41a2..0000000
--- a/parts/django/django/utils/translation/trans_null.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# These are versions of the functions in django.utils.translation.trans_real
-# that don't actually do anything. This is purely for performance, so that
-# settings.USE_I18N = False can use this module rather than trans_real.py.
-
-import warnings
-from django.conf import settings
-from django.utils.encoding import force_unicode
-from django.utils.safestring import mark_safe, SafeData
-
-def ngettext(singular, plural, number):
- if number == 1: return singular
- return plural
-ngettext_lazy = ngettext
-
-def ungettext(singular, plural, number):
- return force_unicode(ngettext(singular, plural, number))
-
-activate = lambda x: None
-deactivate = deactivate_all = lambda: None
-get_language = lambda: settings.LANGUAGE_CODE
-get_language_bidi = lambda: settings.LANGUAGE_CODE in settings.LANGUAGES_BIDI
-check_for_language = lambda x: True
-
-# date formats shouldn't be used using gettext anymore. This
-# is kept for backward compatibility
-TECHNICAL_ID_MAP = {
- "DATE_WITH_TIME_FULL": settings.DATETIME_FORMAT,
- "DATE_FORMAT": settings.DATE_FORMAT,
- "DATETIME_FORMAT": settings.DATETIME_FORMAT,
- "TIME_FORMAT": settings.TIME_FORMAT,
- "YEAR_MONTH_FORMAT": settings.YEAR_MONTH_FORMAT,
- "MONTH_DAY_FORMAT": settings.MONTH_DAY_FORMAT,
-}
-
-def gettext(message):
- result = TECHNICAL_ID_MAP.get(message, message)
- if isinstance(message, SafeData):
- return mark_safe(result)
- return result
-
-def ugettext(message):
- return force_unicode(gettext(message))
-
-gettext_noop = gettext_lazy = _ = gettext
-
-def to_locale(language):
- p = language.find('-')
- if p >= 0:
- return language[:p].lower()+'_'+language[p+1:].upper()
- else:
- return language.lower()
-
-def get_language_from_request(request):
- return settings.LANGUAGE_CODE
-
-# get_date_formats and get_partial_date_formats aren't used anymore by Django
-# but are kept for backward compatibility.
-def get_date_formats():
- warnings.warn(
- '`django.utils.translation.get_date_formats` is deprecated. '
- 'Please update your code to use the new i18n aware formatting.',
- PendingDeprecationWarning
- )
- return settings.DATE_FORMAT, settings.DATETIME_FORMAT, settings.TIME_FORMAT
-
-def get_partial_date_formats():
- warnings.warn(
- '`django.utils.translation.get_partial_date_formats` is deprecated. '
- 'Please update your code to use the new i18n aware formatting.',
- PendingDeprecationWarning
- )
- return settings.YEAR_MONTH_FORMAT, settings.MONTH_DAY_FORMAT
diff --git a/parts/django/django/utils/translation/trans_real.py b/parts/django/django/utils/translation/trans_real.py
deleted file mode 100644
index feb2f41..0000000
--- a/parts/django/django/utils/translation/trans_real.py
+++ /dev/null
@@ -1,550 +0,0 @@
-"""Translation helper functions."""
-
-import locale
-import os
-import re
-import sys
-import warnings
-import gettext as gettext_module
-from cStringIO import StringIO
-
-from django.utils.importlib import import_module
-from django.utils.safestring import mark_safe, SafeData
-from django.utils.thread_support import currentThread
-
-# Translations are cached in a dictionary for every language+app tuple.
-# The active translations are stored by threadid to make them thread local.
-_translations = {}
-_active = {}
-
-# The default translation is based on the settings file.
-_default = None
-
-# This is a cache for normalized accept-header languages to prevent multiple
-# file lookups when checking the same locale on repeated requests.
-_accepted = {}
-
-# Format of Accept-Language header values. From RFC 2616, section 14.4 and 3.9.
-accept_language_re = re.compile(r'''
- ([A-Za-z]{1,8}(?:-[A-Za-z]{1,8})*|\*) # "en", "en-au", "x-y-z", "*"
- (?:;q=(0(?:\.\d{,3})?|1(?:.0{,3})?))? # Optional "q=1.00", "q=0.8"
- (?:\s*,\s*|$) # Multiple accepts per header.
- ''', re.VERBOSE)
-
-def to_locale(language, to_lower=False):
- """
- Turns a language name (en-us) into a locale name (en_US). If 'to_lower' is
- True, the last component is lower-cased (en_us).
- """
- p = language.find('-')
- if p >= 0:
- if to_lower:
- return language[:p].lower()+'_'+language[p+1:].lower()
- else:
- # Get correct locale for sr-latn
- if len(language[p+1:]) > 2:
- return language[:p].lower()+'_'+language[p+1].upper()+language[p+2:].lower()
- return language[:p].lower()+'_'+language[p+1:].upper()
- else:
- return language.lower()
-
-def to_language(locale):
- """Turns a locale name (en_US) into a language name (en-us)."""
- p = locale.find('_')
- if p >= 0:
- return locale[:p].lower()+'-'+locale[p+1:].lower()
- else:
- return locale.lower()
-
-class DjangoTranslation(gettext_module.GNUTranslations):
- """
- This class sets up the GNUTranslations context with regard to output
- charset. Django uses a defined DEFAULT_CHARSET as the output charset on
- Python 2.4.
- """
- def __init__(self, *args, **kw):
- from django.conf import settings
- gettext_module.GNUTranslations.__init__(self, *args, **kw)
- # Starting with Python 2.4, there's a function to define
- # the output charset. Before 2.4, the output charset is
- # identical with the translation file charset.
- try:
- self.set_output_charset('utf-8')
- except AttributeError:
- pass
- self.django_output_charset = 'utf-8'
- self.__language = '??'
-
- def merge(self, other):
- self._catalog.update(other._catalog)
-
- def set_language(self, language):
- self.__language = language
-
- def language(self):
- return self.__language
-
- def __repr__(self):
- return "<DjangoTranslation lang:%s>" % self.__language
-
-def translation(language):
- """
- Returns a translation object.
-
- This translation object will be constructed out of multiple GNUTranslations
- objects by merging their catalogs. It will construct a object for the
- requested language and add a fallback to the default language, if it's
- different from the requested language.
- """
- global _translations
-
- t = _translations.get(language, None)
- if t is not None:
- return t
-
- from django.conf import settings
-
- globalpath = os.path.join(os.path.dirname(sys.modules[settings.__module__].__file__), 'locale')
-
- if settings.SETTINGS_MODULE is not None:
- parts = settings.SETTINGS_MODULE.split('.')
- project = import_module(parts[0])
- projectpath = os.path.join(os.path.dirname(project.__file__), 'locale')
- else:
- projectpath = None
-
- def _fetch(lang, fallback=None):
-
- global _translations
-
- loc = to_locale(lang)
-
- res = _translations.get(lang, None)
- if res is not None:
- return res
-
- def _translation(path):
- try:
- t = gettext_module.translation('django', path, [loc], DjangoTranslation)
- t.set_language(lang)
- return t
- except IOError, e:
- return None
-
- res = _translation(globalpath)
-
- # We want to ensure that, for example, "en-gb" and "en-us" don't share
- # the same translation object (thus, merging en-us with a local update
- # doesn't affect en-gb), even though they will both use the core "en"
- # translation. So we have to subvert Python's internal gettext caching.
- base_lang = lambda x: x.split('-', 1)[0]
- if base_lang(lang) in [base_lang(trans) for trans in _translations]:
- res._info = res._info.copy()
- res._catalog = res._catalog.copy()
-
- def _merge(path):
- t = _translation(path)
- if t is not None:
- if res is None:
- return t
- else:
- res.merge(t)
- return res
-
- for localepath in settings.LOCALE_PATHS:
- if os.path.isdir(localepath):
- res = _merge(localepath)
-
- for appname in settings.INSTALLED_APPS:
- app = import_module(appname)
- apppath = os.path.join(os.path.dirname(app.__file__), 'locale')
-
- if os.path.isdir(apppath):
- res = _merge(apppath)
-
- if projectpath and os.path.isdir(projectpath):
- res = _merge(projectpath)
-
- if res is None:
- if fallback is not None:
- res = fallback
- else:
- return gettext_module.NullTranslations()
- _translations[lang] = res
- return res
-
- default_translation = _fetch(settings.LANGUAGE_CODE)
- current_translation = _fetch(language, fallback=default_translation)
-
- return current_translation
-
-def activate(language):
- """
- Fetches the translation object for a given tuple of application name and
- language and installs it as the current translation object for the current
- thread.
- """
- if isinstance(language, basestring) and language == 'no':
- warnings.warn(
- "The use of the language code 'no' is deprecated. "
- "Please use the 'nb' translation instead.",
- PendingDeprecationWarning
- )
- _active[currentThread()] = translation(language)
-
-def deactivate():
- """
- Deinstalls the currently active translation object so that further _ calls
- will resolve against the default translation object, again.
- """
- global _active
- if currentThread() in _active:
- del _active[currentThread()]
-
-def deactivate_all():
- """
- Makes the active translation object a NullTranslations() instance. This is
- useful when we want delayed translations to appear as the original string
- for some reason.
- """
- _active[currentThread()] = gettext_module.NullTranslations()
-
-def get_language():
- """Returns the currently selected language."""
- t = _active.get(currentThread(), None)
- if t is not None:
- try:
- return to_language(t.language())
- except AttributeError:
- pass
- # If we don't have a real translation object, assume it's the default language.
- from django.conf import settings
- return settings.LANGUAGE_CODE
-
-def get_language_bidi():
- """
- Returns selected language's BiDi layout.
-
- * False = left-to-right layout
- * True = right-to-left layout
- """
- from django.conf import settings
-
- base_lang = get_language().split('-')[0]
- return base_lang in settings.LANGUAGES_BIDI
-
-def catalog():
- """
- Returns the current active catalog for further processing.
- This can be used if you need to modify the catalog or want to access the
- whole message catalog instead of just translating one string.
- """
- global _default, _active
- t = _active.get(currentThread(), None)
- if t is not None:
- return t
- if _default is None:
- from django.conf import settings
- _default = translation(settings.LANGUAGE_CODE)
- return _default
-
-def do_translate(message, translation_function):
- """
- Translates 'message' using the given 'translation_function' name -- which
- 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
- message will be run through the default translation object.
- """
- eol_message = message.replace('\r\n', '\n').replace('\r', '\n')
- global _default, _active
- t = _active.get(currentThread(), None)
- if t is not None:
- result = getattr(t, translation_function)(eol_message)
- else:
- if _default is None:
- from django.conf import settings
- _default = translation(settings.LANGUAGE_CODE)
- result = getattr(_default, translation_function)(eol_message)
- if isinstance(message, SafeData):
- return mark_safe(result)
- return result
-
-def gettext(message):
- return do_translate(message, 'gettext')
-
-def ugettext(message):
- return do_translate(message, 'ugettext')
-
-def gettext_noop(message):
- """
- Marks strings for translation but doesn't translate them now. This can be
- used to store strings in global variables that should stay in the base
- language (because they might be used externally) and will be translated
- later.
- """
- return message
-
-def do_ntranslate(singular, plural, number, translation_function):
- global _default, _active
-
- t = _active.get(currentThread(), None)
- if t is not None:
- return getattr(t, translation_function)(singular, plural, number)
- if _default is None:
- from django.conf import settings
- _default = translation(settings.LANGUAGE_CODE)
- return getattr(_default, translation_function)(singular, plural, number)
-
-def ngettext(singular, plural, number):
- """
- Returns a UTF-8 bytestring of the translation of either the singular or
- plural, based on the number.
- """
- return do_ntranslate(singular, plural, number, 'ngettext')
-
-def ungettext(singular, plural, number):
- """
- Returns a unicode strings of the translation of either the singular or
- plural, based on the number.
- """
- return do_ntranslate(singular, plural, number, 'ungettext')
-
-def check_for_language(lang_code):
- """
- Checks whether there is a global language file for the given language
- code. This is used to decide whether a user-provided language is
- available. This is only used for language codes from either the cookies or
- session.
- """
- from django.conf import settings
- globalpath = os.path.join(os.path.dirname(sys.modules[settings.__module__].__file__), 'locale')
- if gettext_module.find('django', globalpath, [to_locale(lang_code)]) is not None:
- return True
- else:
- return False
-
-def get_language_from_request(request):
- """
- Analyzes the request to find what language the user wants the system to
- show. Only languages listed in settings.LANGUAGES are taken into account.
- If the user requests a sublanguage where we have a main language, we send
- out the main language.
- """
- global _accepted
- from django.conf import settings
- globalpath = os.path.join(os.path.dirname(sys.modules[settings.__module__].__file__), 'locale')
- supported = dict(settings.LANGUAGES)
-
- if hasattr(request, 'session'):
- lang_code = request.session.get('django_language', None)
- if lang_code in supported and lang_code is not None and check_for_language(lang_code):
- return lang_code
-
- lang_code = request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME)
-
- if lang_code and lang_code not in supported:
- lang_code = lang_code.split('-')[0] # e.g. if fr-ca is not supported fallback to fr
-
- if lang_code and lang_code in supported and check_for_language(lang_code):
- return lang_code
-
- accept = request.META.get('HTTP_ACCEPT_LANGUAGE', '')
- for accept_lang, unused in parse_accept_lang_header(accept):
- if accept_lang == '*':
- break
-
- # We have a very restricted form for our language files (no encoding
- # specifier, since they all must be UTF-8 and only one possible
- # language each time. So we avoid the overhead of gettext.find() and
- # work out the MO file manually.
-
- # 'normalized' is the root name of the locale in POSIX format (which is
- # the format used for the directories holding the MO files).
- normalized = locale.locale_alias.get(to_locale(accept_lang, True))
- if not normalized:
- continue
- # Remove the default encoding from locale_alias.
- normalized = normalized.split('.')[0]
-
- if normalized in _accepted:
- # We've seen this locale before and have an MO file for it, so no
- # need to check again.
- return _accepted[normalized]
-
- for lang, dirname in ((accept_lang, normalized),
- (accept_lang.split('-')[0], normalized.split('_')[0])):
- if lang.lower() not in supported:
- continue
- langfile = os.path.join(globalpath, dirname, 'LC_MESSAGES',
- 'django.mo')
- if os.path.exists(langfile):
- _accepted[normalized] = lang
- return lang
-
- return settings.LANGUAGE_CODE
-
-dot_re = re.compile(r'\S')
-def blankout(src, char):
- """
- Changes every non-whitespace character to the given char.
- Used in the templatize function.
- """
- return dot_re.sub(char, src)
-
-inline_re = re.compile(r"""^\s*trans\s+((?:".*?")|(?:'.*?'))\s*""")
-block_re = re.compile(r"""^\s*blocktrans(?:\s+|$)""")
-endblock_re = re.compile(r"""^\s*endblocktrans$""")
-plural_re = re.compile(r"""^\s*plural$""")
-constant_re = re.compile(r"""_\(((?:".*?")|(?:'.*?'))\)""")
-
-def templatize(src):
- """
- Turns a Django template into something that is understood by xgettext. It
- does so by translating the Django translation tags into standard gettext
- function invocations.
- """
- from django.template import Lexer, TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK
- out = StringIO()
- intrans = False
- inplural = False
- singular = []
- plural = []
- for t in Lexer(src, None).tokenize():
- if intrans:
- if t.token_type == TOKEN_BLOCK:
- endbmatch = endblock_re.match(t.contents)
- pluralmatch = plural_re.match(t.contents)
- if endbmatch:
- if inplural:
- out.write(' ngettext(%r,%r,count) ' % (''.join(singular), ''.join(plural)))
- for part in singular:
- out.write(blankout(part, 'S'))
- for part in plural:
- out.write(blankout(part, 'P'))
- else:
- out.write(' gettext(%r) ' % ''.join(singular))
- for part in singular:
- out.write(blankout(part, 'S'))
- intrans = False
- inplural = False
- singular = []
- plural = []
- elif pluralmatch:
- inplural = True
- else:
- raise SyntaxError("Translation blocks must not include other block tags: %s" % t.contents)
- elif t.token_type == TOKEN_VAR:
- if inplural:
- plural.append('%%(%s)s' % t.contents)
- else:
- singular.append('%%(%s)s' % t.contents)
- elif t.token_type == TOKEN_TEXT:
- contents = t.contents.replace('%', '%%')
- if inplural:
- plural.append(contents)
- else:
- singular.append(contents)
- else:
- if t.token_type == TOKEN_BLOCK:
- imatch = inline_re.match(t.contents)
- bmatch = block_re.match(t.contents)
- cmatches = constant_re.findall(t.contents)
- if imatch:
- g = imatch.group(1)
- if g[0] == '"': g = g.strip('"')
- elif g[0] == "'": g = g.strip("'")
- out.write(' gettext(%r) ' % g)
- elif bmatch:
- for fmatch in constant_re.findall(t.contents):
- out.write(' _(%s) ' % fmatch)
- intrans = True
- inplural = False
- singular = []
- plural = []
- elif cmatches:
- for cmatch in cmatches:
- out.write(' _(%s) ' % cmatch)
- else:
- out.write(blankout(t.contents, 'B'))
- elif t.token_type == TOKEN_VAR:
- parts = t.contents.split('|')
- cmatch = constant_re.match(parts[0])
- if cmatch:
- out.write(' _(%s) ' % cmatch.group(1))
- for p in parts[1:]:
- if p.find(':_(') >= 0:
- out.write(' %s ' % p.split(':',1)[1])
- else:
- out.write(blankout(p, 'F'))
- else:
- out.write(blankout(t.contents, 'X'))
- return out.getvalue()
-
-def parse_accept_lang_header(lang_string):
- """
- Parses the lang_string, which is the body of an HTTP Accept-Language
- header, and returns a list of (lang, q-value), ordered by 'q' values.
-
- Any format errors in lang_string results in an empty list being returned.
- """
- result = []
- pieces = accept_language_re.split(lang_string)
- if pieces[-1]:
- return []
- for i in range(0, len(pieces) - 1, 3):
- first, lang, priority = pieces[i : i + 3]
- if first:
- return []
- priority = priority and float(priority) or 1.0
- result.append((lang, priority))
- result.sort(lambda x, y: -cmp(x[1], y[1]))
- return result
-
-# get_date_formats and get_partial_date_formats aren't used anymore by Django
-# and are kept for backward compatibility.
-# Note, it's also important to keep format names marked for translation.
-# For compatibility we still want to have formats on translation catalogs.
-# That makes template code like {{ my_date|date:_('DATE_FORMAT') }} still work
-def get_date_formats():
- """
- Checks whether translation files provide a translation for some technical
- message ID to store date and time formats. If it doesn't contain one, the
- formats provided in the settings will be used.
- """
- warnings.warn(
- "'django.utils.translation.get_date_formats' is deprecated. "
- "Please update your code to use the new i18n aware formatting.",
- PendingDeprecationWarning
- )
- from django.conf import settings
- date_format = ugettext('DATE_FORMAT')
- datetime_format = ugettext('DATETIME_FORMAT')
- time_format = ugettext('TIME_FORMAT')
- if date_format == 'DATE_FORMAT':
- date_format = settings.DATE_FORMAT
- if datetime_format == 'DATETIME_FORMAT':
- datetime_format = settings.DATETIME_FORMAT
- if time_format == 'TIME_FORMAT':
- time_format = settings.TIME_FORMAT
- return date_format, datetime_format, time_format
-
-def get_partial_date_formats():
- """
- Checks whether translation files provide a translation for some technical
- message ID to store partial date formats. If it doesn't contain one, the
- formats provided in the settings will be used.
- """
- warnings.warn(
- "'django.utils.translation.get_partial_date_formats' is deprecated. "
- "Please update your code to use the new i18n aware formatting.",
- PendingDeprecationWarning
- )
- from django.conf import settings
- year_month_format = ugettext('YEAR_MONTH_FORMAT')
- month_day_format = ugettext('MONTH_DAY_FORMAT')
- if year_month_format == 'YEAR_MONTH_FORMAT':
- year_month_format = settings.YEAR_MONTH_FORMAT
- if month_day_format == 'MONTH_DAY_FORMAT':
- month_day_format = settings.MONTH_DAY_FORMAT
- return year_month_format, month_day_format
-
diff --git a/parts/django/django/utils/tree.py b/parts/django/django/utils/tree.py
deleted file mode 100644
index a6cfec2..0000000
--- a/parts/django/django/utils/tree.py
+++ /dev/null
@@ -1,153 +0,0 @@
-"""
-A class for storing a tree graph. Primarily used for filter constructs in the
-ORM.
-"""
-
-from django.utils.copycompat import deepcopy
-
-class Node(object):
- """
- A single internal node in the tree graph. A Node should be viewed as a
- connection (the root) with the children being either leaf nodes or other
- Node instances.
- """
- # Standard connector type. Clients usually won't use this at all and
- # subclasses will usually override the value.
- default = 'DEFAULT'
-
- def __init__(self, children=None, connector=None, negated=False):
- """
- Constructs a new Node. If no connector is given, the default will be
- used.
-
- Warning: You probably don't want to pass in the 'negated' parameter. It
- is NOT the same as constructing a node and calling negate() on the
- result.
- """
- self.children = children and children[:] or []
- self.connector = connector or self.default
- self.subtree_parents = []
- self.negated = negated
-
- # We need this because of django.db.models.query_utils.Q. Q. __init__() is
- # problematic, but it is a natural Node subclass in all other respects.
- def _new_instance(cls, children=None, connector=None, negated=False):
- """
- This is called to create a new instance of this class when we need new
- Nodes (or subclasses) in the internal code in this class. Normally, it
- just shadows __init__(). However, subclasses with an __init__ signature
- that is not an extension of Node.__init__ might need to implement this
- method to allow a Node to create a new instance of them (if they have
- any extra setting up to do).
- """
- obj = Node(children, connector, negated)
- obj.__class__ = cls
- return obj
- _new_instance = classmethod(_new_instance)
-
- def __str__(self):
- if self.negated:
- return '(NOT (%s: %s))' % (self.connector, ', '.join([str(c) for c
- in self.children]))
- return '(%s: %s)' % (self.connector, ', '.join([str(c) for c in
- self.children]))
-
- def __deepcopy__(self, memodict):
- """
- Utility method used by copy.deepcopy().
- """
- obj = Node(connector=self.connector, negated=self.negated)
- obj.__class__ = self.__class__
- obj.children = deepcopy(self.children, memodict)
- obj.subtree_parents = deepcopy(self.subtree_parents, memodict)
- return obj
-
- def __len__(self):
- """
- The size of a node if the number of children it has.
- """
- return len(self.children)
-
- def __nonzero__(self):
- """
- For truth value testing.
- """
- return bool(self.children)
-
- def __contains__(self, other):
- """
- Returns True is 'other' is a direct child of this instance.
- """
- return other in self.children
-
- def add(self, node, conn_type):
- """
- Adds a new node to the tree. If the conn_type is the same as the root's
- current connector type, the node is added to the first level.
- Otherwise, the whole tree is pushed down one level and a new root
- connector is created, connecting the existing tree and the new node.
- """
- if node in self.children and conn_type == self.connector:
- return
- if len(self.children) < 2:
- self.connector = conn_type
- if self.connector == conn_type:
- if isinstance(node, Node) and (node.connector == conn_type or
- len(node) == 1):
- self.children.extend(node.children)
- else:
- self.children.append(node)
- else:
- obj = self._new_instance(self.children, self.connector,
- self.negated)
- self.connector = conn_type
- self.children = [obj, node]
-
- def negate(self):
- """
- Negate the sense of the root connector. This reorganises the children
- so that the current node has a single child: a negated node containing
- all the previous children. This slightly odd construction makes adding
- new children behave more intuitively.
-
- Interpreting the meaning of this negate is up to client code. This
- method is useful for implementing "not" arrangements.
- """
- self.children = [self._new_instance(self.children, self.connector,
- not self.negated)]
- self.connector = self.default
-
- def start_subtree(self, conn_type):
- """
- Sets up internal state so that new nodes are added to a subtree of the
- current node. The conn_type specifies how the sub-tree is joined to the
- existing children.
- """
- if len(self.children) == 1:
- self.connector = conn_type
- elif self.connector != conn_type:
- self.children = [self._new_instance(self.children, self.connector,
- self.negated)]
- self.connector = conn_type
- self.negated = False
-
- self.subtree_parents.append(self.__class__(self.children,
- self.connector, self.negated))
- self.connector = self.default
- self.negated = False
- self.children = []
-
- def end_subtree(self):
- """
- Closes off the most recently unmatched start_subtree() call.
-
- This puts the current state into a node of the parent tree and returns
- the current instances state to be the parent.
- """
- obj = self.subtree_parents.pop()
- node = self.__class__(self.children, self.connector)
- self.connector = obj.connector
- self.negated = obj.negated
- self.children = obj.children
- self.children.append(node)
-
diff --git a/parts/django/django/utils/tzinfo.py b/parts/django/django/utils/tzinfo.py
deleted file mode 100644
index fc7fa82..0000000
--- a/parts/django/django/utils/tzinfo.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"Implementation of tzinfo classes for use with datetime.datetime."
-
-import time
-from datetime import timedelta, tzinfo
-from django.utils.encoding import smart_unicode, smart_str, DEFAULT_LOCALE_ENCODING
-
-class FixedOffset(tzinfo):
- "Fixed offset in minutes east from UTC."
- def __init__(self, offset):
- if isinstance(offset, timedelta):
- self.__offset = offset
- offset = self.__offset.seconds // 60
- else:
- self.__offset = timedelta(minutes=offset)
-
- sign = offset < 0 and '-' or '+'
- self.__name = u"%s%02d%02d" % (sign, abs(offset) / 60., abs(offset) % 60)
-
- def __repr__(self):
- return self.__name
-
- def utcoffset(self, dt):
- return self.__offset
-
- def tzname(self, dt):
- return self.__name
-
- def dst(self, dt):
- return timedelta(0)
-
-class LocalTimezone(tzinfo):
- "Proxy timezone information from time module."
- def __init__(self, dt):
- tzinfo.__init__(self)
- self._tzname = self.tzname(dt)
-
- def __repr__(self):
- return smart_str(self._tzname)
-
- def utcoffset(self, dt):
- if self._isdst(dt):
- return timedelta(seconds=-time.altzone)
- else:
- return timedelta(seconds=-time.timezone)
-
- def dst(self, dt):
- if self._isdst(dt):
- return timedelta(seconds=-time.altzone) - timedelta(seconds=-time.timezone)
- else:
- return timedelta(0)
-
- def tzname(self, dt):
- try:
- return smart_unicode(time.tzname[self._isdst(dt)],
- DEFAULT_LOCALE_ENCODING)
- except UnicodeDecodeError:
- return None
-
- def _isdst(self, dt):
- tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1)
- try:
- stamp = time.mktime(tt)
- except (OverflowError, ValueError):
- # 32 bit systems can't handle dates after Jan 2038, and certain
- # systems can't handle dates before ~1901-12-01:
- #
- # >>> time.mktime((1900, 1, 13, 0, 0, 0, 0, 0, 0))
- # OverflowError: mktime argument out of range
- # >>> time.mktime((1850, 1, 13, 0, 0, 0, 0, 0, 0))
- # ValueError: year out of range
- #
- # In this case, we fake the date, because we only care about the
- # DST flag.
- tt = (2037,) + tt[1:]
- stamp = time.mktime(tt)
- tt = time.localtime(stamp)
- return tt.tm_isdst > 0
diff --git a/parts/django/django/utils/version.py b/parts/django/django/utils/version.py
deleted file mode 100644
index 557135f..0000000
--- a/parts/django/django/utils/version.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import django
-import os.path
-import re
-
-def get_svn_revision(path=None):
- """
- Returns the SVN revision in the form SVN-XXXX,
- where XXXX is the revision number.
-
- Returns SVN-unknown if anything goes wrong, such as an unexpected
- format of internal SVN files.
-
- If path is provided, it should be a directory whose SVN info you want to
- inspect. If it's not provided, this will use the root django/ package
- directory.
- """
- rev = None
- if path is None:
- path = django.__path__[0]
- entries_path = '%s/.svn/entries' % path
-
- try:
- entries = open(entries_path, 'r').read()
- except IOError:
- pass
- else:
- # Versions >= 7 of the entries file are flat text. The first line is
- # the version number. The next set of digits after 'dir' is the revision.
- if re.match('(\d+)', entries):
- rev_match = re.search('\d+\s+dir\s+(\d+)', entries)
- if rev_match:
- rev = rev_match.groups()[0]
- # Older XML versions of the file specify revision as an attribute of
- # the first entries node.
- else:
- from xml.dom import minidom
- dom = minidom.parse(entries_path)
- rev = dom.getElementsByTagName('entry')[0].getAttribute('revision')
-
- if rev:
- return u'SVN-%s' % rev
- return u'SVN-unknown'
diff --git a/parts/django/django/utils/xmlutils.py b/parts/django/django/utils/xmlutils.py
deleted file mode 100644
index a1eb5fb..0000000
--- a/parts/django/django/utils/xmlutils.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""
-Utilities for XML generation/parsing.
-"""
-
-from xml.sax.saxutils import XMLGenerator
-
-class SimplerXMLGenerator(XMLGenerator):
- def addQuickElement(self, name, contents=None, attrs=None):
- "Convenience method for adding an element with no children"
- if attrs is None: attrs = {}
- self.startElement(name, attrs)
- if contents is not None:
- self.characters(contents)
- self.endElement(name)
diff --git a/parts/django/django/views/__init__.py b/parts/django/django/views/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/views/__init__.py
+++ /dev/null
diff --git a/parts/django/django/views/csrf.py b/parts/django/django/views/csrf.py
deleted file mode 100644
index b590dd1..0000000
--- a/parts/django/django/views/csrf.py
+++ /dev/null
@@ -1,102 +0,0 @@
-from django.http import HttpResponseForbidden
-from django.template import Context, Template
-from django.conf import settings
-
-# We include the template inline since we need to be able to reliably display
-# this error message, especially for the sake of developers, and there isn't any
-# other way of making it available independent of what is in the settings file.
-
-CSRF_FAILRE_TEMPLATE = """
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <meta name="robots" content="NONE,NOARCHIVE">
- <title>403 Forbidden</title>
- <style type="text/css">
- html * { padding:0; margin:0; }
- body * { padding:10px 20px; }
- body * * { padding:0; }
- body { font:small sans-serif; background:#eee; }
- body>div { border-bottom:1px solid #ddd; }
- h1 { font-weight:normal; margin-bottom:.4em; }
- h1 span { font-size:60%; color:#666; font-weight:normal; }
- #info { background:#f6f6f6; }
- #info ul { margin: 0.5em 4em; }
- #info p, #summary p { padding-top:10px; }
- #summary { background: #ffc; }
- #explanation { background:#eee; border-bottom: 0px none; }
- </style>
-</head>
-<body>
-<div id="summary">
- <h1>Forbidden <span>(403)</span></h1>
- <p>CSRF verification failed. Request aborted.</p>
-{% if no_referer %}
- <p>You are seeing this message because this HTTPS site requires a 'Referer
- header' to be sent by your Web browser, but none was sent. This header is
- required for security reasons, to ensure that your browser is not being
- hijacked by third parties.</p>
-
- <p>If you have configured your browser to disable 'Referer' headers, please
- re-enable them, at least for this site, or for HTTPS connections, or for
- 'same-origin' requests.</p>
-{% endif %}
-</div>
-{% if DEBUG %}
-<div id="info">
- <h2>Help</h2>
- {% if reason %}
- <p>Reason given for failure:</p>
- <pre>
- {{ reason }}
- </pre>
- {% endif %}
-
- <p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
- <a
- href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's
- CSRF mechanism</a> has not been used correctly. For POST forms, you need to
- ensure:</p>
-
- <ul>
- <li>The view function uses <a
- href='http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext'><code>RequestContext</code></a>
- for the template, instead of <code>Context</code>.</li>
-
- <li>In the template, there is a <code>{% templatetag openblock %} csrf_token
- {% templatetag closeblock %}</code> template tag inside each POST form that
- targets an internal URL.</li>
-
- <li>If you are not using <code>CsrfViewMiddleware</code>, then you must use
- <code>csrf_protect</code> on any views that use the <code>csrf_token</code>
- template tag, as well as those that accept the POST data.</li>
-
- </ul>
-
- <p>You're seeing the help section of this page because you have <code>DEBUG =
- True</code> in your Django settings file. Change that to <code>False</code>,
- and only the initial error message will be displayed. </p>
-
- <p>You can customize this page using the CSRF_FAILURE_VIEW setting.</p>
-</div>
-{% else %}
-<div id="explanation">
- <p><small>More information is available with DEBUG=True.</small></p>
-</div>
-{% endif %}
-</body>
-</html>
-"""
-
-def csrf_failure(request, reason=""):
- """
- Default view used when request fails CSRF protection
- """
- from django.middleware.csrf import REASON_NO_REFERER
- t = Template(CSRF_FAILRE_TEMPLATE)
- c = Context({'DEBUG': settings.DEBUG,
- 'reason': reason,
- 'no_referer': reason == REASON_NO_REFERER
- })
- return HttpResponseForbidden(t.render(c), mimetype='text/html')
diff --git a/parts/django/django/views/debug.py b/parts/django/django/views/debug.py
deleted file mode 100644
index fa18dfa..0000000
--- a/parts/django/django/views/debug.py
+++ /dev/null
@@ -1,857 +0,0 @@
-import datetime
-import os
-import re
-import sys
-import types
-
-from django.conf import settings
-from django.http import HttpResponse, HttpResponseServerError, HttpResponseNotFound
-from django.template import (Template, Context, TemplateDoesNotExist,
- TemplateSyntaxError)
-from django.utils.html import escape
-from django.utils.importlib import import_module
-from django.utils.encoding import smart_unicode, smart_str
-
-
-HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD|PROFANITIES_LIST|SIGNATURE')
-
-def linebreak_iter(template_source):
- yield 0
- p = template_source.find('\n')
- while p >= 0:
- yield p+1
- p = template_source.find('\n', p+1)
- yield len(template_source) + 1
-
-def cleanse_setting(key, value):
- """Cleanse an individual setting key/value of sensitive content.
-
- If the value is a dictionary, recursively cleanse the keys in
- that dictionary.
- """
- try:
- if HIDDEN_SETTINGS.search(key):
- cleansed = '********************'
- else:
- if isinstance(value, dict):
- cleansed = dict((k, cleanse_setting(k, v)) for k,v in value.items())
- else:
- cleansed = value
- except TypeError:
- # If the key isn't regex-able, just return as-is.
- cleansed = value
- return cleansed
-
-def get_safe_settings():
- "Returns a dictionary of the settings module, with sensitive settings blurred out."
- settings_dict = {}
- for k in dir(settings):
- if k.isupper():
- settings_dict[k] = cleanse_setting(k, getattr(settings, k))
- return settings_dict
-
-def technical_500_response(request, exc_type, exc_value, tb):
- """
- Create a technical server error response. The last three arguments are
- the values returned from sys.exc_info() and friends.
- """
- reporter = ExceptionReporter(request, exc_type, exc_value, tb)
- html = reporter.get_traceback_html()
- return HttpResponseServerError(html, mimetype='text/html')
-
-class ExceptionReporter:
- """
- A class to organize and coordinate reporting on exceptions.
- """
- def __init__(self, request, exc_type, exc_value, tb):
- self.request = request
- self.exc_type = exc_type
- self.exc_value = exc_value
- self.tb = tb
-
- self.template_info = None
- self.template_does_not_exist = False
- self.loader_debug_info = None
-
- # Handle deprecated string exceptions
- if isinstance(self.exc_type, basestring):
- self.exc_value = Exception('Deprecated String Exception: %r' % self.exc_type)
- self.exc_type = type(self.exc_value)
-
- def get_traceback_html(self):
- "Return HTML code for traceback."
-
- if issubclass(self.exc_type, TemplateDoesNotExist):
- from django.template.loader import template_source_loaders
- self.template_does_not_exist = True
- self.loader_debug_info = []
- for loader in template_source_loaders:
- try:
- module = import_module(loader.__module__)
- source_list_func = module.get_template_sources
- # NOTE: This assumes exc_value is the name of the template that
- # the loader attempted to load.
- template_list = [{'name': t, 'exists': os.path.exists(t)} \
- for t in source_list_func(str(self.exc_value))]
- except (ImportError, AttributeError):
- template_list = []
- if hasattr(loader, '__class__'):
- loader_name = loader.__module__ + '.' + loader.__class__.__name__
- else:
- loader_name = loader.__module__ + '.' + loader.__name__
- self.loader_debug_info.append({
- 'loader': loader_name,
- 'templates': template_list,
- })
- if (settings.TEMPLATE_DEBUG and hasattr(self.exc_value, 'source') and
- isinstance(self.exc_value, TemplateSyntaxError)):
- self.get_template_exception_info()
-
- frames = self.get_traceback_frames()
-
- unicode_hint = ''
- if issubclass(self.exc_type, UnicodeError):
- start = getattr(self.exc_value, 'start', None)
- end = getattr(self.exc_value, 'end', None)
- if start is not None and end is not None:
- unicode_str = self.exc_value.args[1]
- unicode_hint = smart_unicode(unicode_str[max(start-5, 0):min(end+5, len(unicode_str))], 'ascii', errors='replace')
- from django import get_version
- t = Template(TECHNICAL_500_TEMPLATE, name='Technical 500 template')
- c = Context({
- 'exception_type': self.exc_type.__name__,
- 'exception_value': smart_unicode(self.exc_value, errors='replace'),
- 'unicode_hint': unicode_hint,
- 'frames': frames,
- 'lastframe': frames[-1],
- 'request': self.request,
- 'settings': get_safe_settings(),
- 'sys_executable': sys.executable,
- 'sys_version_info': '%d.%d.%d' % sys.version_info[0:3],
- 'server_time': datetime.datetime.now(),
- 'django_version_info': get_version(),
- 'sys_path' : sys.path,
- 'template_info': self.template_info,
- 'template_does_not_exist': self.template_does_not_exist,
- 'loader_debug_info': self.loader_debug_info,
- })
- return t.render(c)
-
- def get_template_exception_info(self):
- origin, (start, end) = self.exc_value.source
- template_source = origin.reload()
- context_lines = 10
- line = 0
- upto = 0
- source_lines = []
- before = during = after = ""
- for num, next in enumerate(linebreak_iter(template_source)):
- if start >= upto and end <= next:
- line = num
- before = escape(template_source[upto:start])
- during = escape(template_source[start:end])
- after = escape(template_source[end:next])
- source_lines.append( (num, escape(template_source[upto:next])) )
- upto = next
- total = len(source_lines)
-
- top = max(1, line - context_lines)
- bottom = min(total, line + 1 + context_lines)
-
- self.template_info = {
- 'message': self.exc_value.args[0],
- 'source_lines': source_lines[top:bottom],
- 'before': before,
- 'during': during,
- 'after': after,
- 'top': top,
- 'bottom': bottom,
- 'total': total,
- 'line': line,
- 'name': origin.name,
- }
-
- def _get_lines_from_file(self, filename, lineno, context_lines, loader=None, module_name=None):
- """
- Returns context_lines before and after lineno from file.
- Returns (pre_context_lineno, pre_context, context_line, post_context).
- """
- source = None
- if loader is not None and hasattr(loader, "get_source"):
- source = loader.get_source(module_name)
- if source is not None:
- source = source.splitlines()
- if source is None:
- try:
- f = open(filename)
- try:
- source = f.readlines()
- finally:
- f.close()
- except (OSError, IOError):
- pass
- if source is None:
- return None, [], None, []
-
- encoding = 'ascii'
- for line in source[:2]:
- # File coding may be specified. Match pattern from PEP-263
- # (http://www.python.org/dev/peps/pep-0263/)
- match = re.search(r'coding[:=]\s*([-\w.]+)', line)
- if match:
- encoding = match.group(1)
- break
- source = [unicode(sline, encoding, 'replace') for sline in source]
-
- lower_bound = max(0, lineno - context_lines)
- upper_bound = lineno + context_lines
-
- pre_context = [line.strip('\n') for line in source[lower_bound:lineno]]
- context_line = source[lineno].strip('\n')
- post_context = [line.strip('\n') for line in source[lineno+1:upper_bound]]
-
- return lower_bound, pre_context, context_line, post_context
-
- def get_traceback_frames(self):
- frames = []
- tb = self.tb
- while tb is not None:
- # support for __traceback_hide__ which is used by a few libraries
- # to hide internal frames.
- if tb.tb_frame.f_locals.get('__traceback_hide__'):
- tb = tb.tb_next
- continue
- filename = tb.tb_frame.f_code.co_filename
- function = tb.tb_frame.f_code.co_name
- lineno = tb.tb_lineno - 1
- loader = tb.tb_frame.f_globals.get('__loader__')
- module_name = tb.tb_frame.f_globals.get('__name__')
- pre_context_lineno, pre_context, context_line, post_context = self._get_lines_from_file(filename, lineno, 7, loader, module_name)
- if pre_context_lineno is not None:
- frames.append({
- 'tb': tb,
- 'filename': filename,
- 'function': function,
- 'lineno': lineno + 1,
- 'vars': tb.tb_frame.f_locals.items(),
- 'id': id(tb),
- 'pre_context': pre_context,
- 'context_line': context_line,
- 'post_context': post_context,
- 'pre_context_lineno': pre_context_lineno + 1,
- })
- tb = tb.tb_next
-
- if not frames:
- frames = [{
- 'filename': '&lt;unknown&gt;',
- 'function': '?',
- 'lineno': '?',
- 'context_line': '???',
- }]
-
- return frames
-
- def format_exception(self):
- """
- Return the same data as from traceback.format_exception.
- """
- import traceback
- frames = self.get_traceback_frames()
- tb = [ (f['filename'], f['lineno'], f['function'], f['context_line']) for f in frames ]
- list = ['Traceback (most recent call last):\n']
- list += traceback.format_list(tb)
- list += traceback.format_exception_only(self.exc_type, self.exc_value)
- return list
-
-
-def technical_404_response(request, exception):
- "Create a technical 404 error response. The exception should be the Http404."
- try:
- tried = exception.args[0]['tried']
- except (IndexError, TypeError, KeyError):
- tried = []
- else:
- if not tried:
- # tried exists but is an empty list. The URLconf must've been empty.
- return empty_urlconf(request)
-
- urlconf = getattr(request, 'urlconf', settings.ROOT_URLCONF)
- if isinstance(urlconf, types.ModuleType):
- urlconf = urlconf.__name__
-
- t = Template(TECHNICAL_404_TEMPLATE, name='Technical 404 template')
- c = Context({
- 'urlconf': urlconf,
- 'root_urlconf': settings.ROOT_URLCONF,
- 'request_path': request.path_info[1:], # Trim leading slash
- 'urlpatterns': tried,
- 'reason': smart_str(exception, errors='replace'),
- 'request': request,
- 'settings': get_safe_settings(),
- })
- return HttpResponseNotFound(t.render(c), mimetype='text/html')
-
-def empty_urlconf(request):
- "Create an empty URLconf 404 error response."
- t = Template(EMPTY_URLCONF_TEMPLATE, name='Empty URLConf template')
- c = Context({
- 'project_name': settings.SETTINGS_MODULE.split('.')[0]
- })
- return HttpResponse(t.render(c), mimetype='text/html')
-
-#
-# Templates are embedded in the file so that we know the error handler will
-# always work even if the template loader is broken.
-#
-
-TECHNICAL_500_TEMPLATE = """
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <meta name="robots" content="NONE,NOARCHIVE">
- <title>{{ exception_type }} at {{ request.path_info|escape }}</title>
- <style type="text/css">
- html * { padding:0; margin:0; }
- body * { padding:10px 20px; }
- body * * { padding:0; }
- body { font:small sans-serif; }
- body>div { border-bottom:1px solid #ddd; }
- h1 { font-weight:normal; }
- h2 { margin-bottom:.8em; }
- h2 span { font-size:80%; color:#666; font-weight:normal; }
- h3 { margin:1em 0 .5em 0; }
- h4 { margin:0 0 .5em 0; font-weight: normal; }
- table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }
- tbody td, tbody th { vertical-align:top; padding:2px 3px; }
- thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; }
- tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }
- table.vars { margin:5px 0 2px 40px; }
- table.vars td, table.req td { font-family:monospace; }
- table td.code { width:100%; }
- table td.code div { overflow:hidden; }
- table.source th { color:#666; }
- table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
- ul.traceback { list-style-type:none; }
- ul.traceback li.frame { margin-bottom:1em; }
- div.context { margin: 10px 0; }
- div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }
- div.context ol li { font-family:monospace; white-space:pre; color:#666; cursor:pointer; }
- div.context ol.context-line li { color:black; background-color:#ccc; }
- div.context ol.context-line li span { float: right; }
- div.commands { margin-left: 40px; }
- div.commands a { color:black; text-decoration:none; }
- #summary { background: #ffc; }
- #summary h2 { font-weight: normal; color: #666; }
- #explanation { background:#eee; }
- #template, #template-not-exist { background:#f6f6f6; }
- #template-not-exist ul { margin: 0 0 0 20px; }
- #unicode-hint { background:#eee; }
- #traceback { background:#eee; }
- #requestinfo { background:#f6f6f6; padding-left:120px; }
- #summary table { border:none; background:transparent; }
- #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
- #requestinfo h3 { margin-bottom:-1em; }
- .error { background: #ffc; }
- .specific { color:#cc3300; font-weight:bold; }
- h2 span.commands { font-size:.7em;}
- span.commands a:link {color:#5E5694;}
- pre.exception_value { font-family: sans-serif; color: #666; font-size: 1.5em; margin: 10px 0 10px 0; }
- </style>
- <script type="text/javascript">
- //<!--
- function getElementsByClassName(oElm, strTagName, strClassName){
- // Written by Jonathan Snook, http://www.snook.ca/jon; Add-ons by Robert Nyman, http://www.robertnyman.com
- var arrElements = (strTagName == "*" && document.all)? document.all :
- oElm.getElementsByTagName(strTagName);
- var arrReturnElements = new Array();
- strClassName = strClassName.replace(/\-/g, "\\-");
- var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
- var oElement;
- for(var i=0; i<arrElements.length; i++){
- oElement = arrElements[i];
- if(oRegExp.test(oElement.className)){
- arrReturnElements.push(oElement);
- }
- }
- return (arrReturnElements)
- }
- function hideAll(elems) {
- for (var e = 0; e < elems.length; e++) {
- elems[e].style.display = 'none';
- }
- }
- window.onload = function() {
- hideAll(getElementsByClassName(document, 'table', 'vars'));
- hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
- hideAll(getElementsByClassName(document, 'ol', 'post-context'));
- hideAll(getElementsByClassName(document, 'div', 'pastebin'));
- }
- function toggle() {
- for (var i = 0; i < arguments.length; i++) {
- var e = document.getElementById(arguments[i]);
- if (e) {
- e.style.display = e.style.display == 'none' ? 'block' : 'none';
- }
- }
- return false;
- }
- function varToggle(link, id) {
- toggle('v' + id);
- var s = link.getElementsByTagName('span')[0];
- var uarr = String.fromCharCode(0x25b6);
- var darr = String.fromCharCode(0x25bc);
- s.innerHTML = s.innerHTML == uarr ? darr : uarr;
- return false;
- }
- function switchPastebinFriendly(link) {
- s1 = "Switch to copy-and-paste view";
- s2 = "Switch back to interactive view";
- link.innerHTML = link.innerHTML == s1 ? s2 : s1;
- toggle('browserTraceback', 'pastebinTraceback');
- return false;
- }
- //-->
- </script>
-</head>
-<body>
-<div id="summary">
- <h1>{{ exception_type }} at {{ request.path_info|escape }}</h1>
- <pre class="exception_value">{{ exception_value|escape }}</pre>
- <table class="meta">
- <tr>
- <th>Request Method:</th>
- <td>{{ request.META.REQUEST_METHOD }}</td>
- </tr>
- <tr>
- <th>Request URL:</th>
- <td>{{ request.build_absolute_uri|escape }}</td>
- </tr>
- <tr>
- <th>Django Version:</th>
- <td>{{ django_version_info }}</td>
- </tr>
- <tr>
- <th>Exception Type:</th>
- <td>{{ exception_type }}</td>
- </tr>
- <tr>
- <th>Exception Value:</th>
- <td><pre>{{ exception_value|escape }}</pre></td>
- </tr>
- <tr>
- <th>Exception Location:</th>
- <td>{{ lastframe.filename|escape }} in {{ lastframe.function|escape }}, line {{ lastframe.lineno }}</td>
- </tr>
- <tr>
- <th>Python Executable:</th>
- <td>{{ sys_executable|escape }}</td>
- </tr>
- <tr>
- <th>Python Version:</th>
- <td>{{ sys_version_info }}</td>
- </tr>
- <tr>
- <th>Python Path:</th>
- <td>{{ sys_path }}</td>
- </tr>
- <tr>
- <th>Server time:</th>
- <td>{{server_time|date:"r"}}</td>
- </tr>
- </table>
-</div>
-{% if unicode_hint %}
-<div id="unicode-hint">
- <h2>Unicode error hint</h2>
- <p>The string that could not be encoded/decoded was: <strong>{{ unicode_hint|escape }}</strong></p>
-</div>
-{% endif %}
-{% if template_does_not_exist %}
-<div id="template-not-exist">
- <h2>Template-loader postmortem</h2>
- {% if loader_debug_info %}
- <p>Django tried loading these templates, in this order:</p>
- <ul>
- {% for loader in loader_debug_info %}
- <li>Using loader <code>{{ loader.loader }}</code>:
- <ul>{% for t in loader.templates %}<li><code>{{ t.name }}</code> (File {% if t.exists %}exists{% else %}does not exist{% endif %})</li>{% endfor %}</ul>
- </li>
- {% endfor %}
- </ul>
- {% else %}
- <p>Django couldn't find any templates because your <code>TEMPLATE_LOADERS</code> setting is empty!</p>
- {% endif %}
-</div>
-{% endif %}
-{% if template_info %}
-<div id="template">
- <h2>Template error</h2>
- <p>In template <code>{{ template_info.name }}</code>, error at line <strong>{{ template_info.line }}</strong></p>
- <h3>{{ template_info.message }}</h3>
- <table class="source{% if template_info.top %} cut-top{% endif %}{% ifnotequal template_info.bottom template_info.total %} cut-bottom{% endifnotequal %}">
- {% for source_line in template_info.source_lines %}
- {% ifequal source_line.0 template_info.line %}
- <tr class="error"><th>{{ source_line.0 }}</th>
- <td>{{ template_info.before }}<span class="specific">{{ template_info.during }}</span>{{ template_info.after }}</td></tr>
- {% else %}
- <tr><th>{{ source_line.0 }}</th>
- <td>{{ source_line.1 }}</td></tr>
- {% endifequal %}
- {% endfor %}
- </table>
-</div>
-{% endif %}
-<div id="traceback">
- <h2>Traceback <span class="commands"><a href="#" onclick="return switchPastebinFriendly(this);">Switch to copy-and-paste view</a></span></h2>
- {% autoescape off %}
- <div id="browserTraceback">
- <ul class="traceback">
- {% for frame in frames %}
- <li class="frame">
- <code>{{ frame.filename|escape }}</code> in <code>{{ frame.function|escape }}</code>
-
- {% if frame.context_line %}
- <div class="context" id="c{{ frame.id }}">
- {% if frame.pre_context %}
- <ol start="{{ frame.pre_context_lineno }}" class="pre-context" id="pre{{ frame.id }}">{% for line in frame.pre_context %}<li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')">{{ line|escape }}</li>{% endfor %}</ol>
- {% endif %}
- <ol start="{{ frame.lineno }}" class="context-line"><li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')">{{ frame.context_line|escape }} <span>...</span></li></ol>
- {% if frame.post_context %}
- <ol start='{{ frame.lineno|add:"1" }}' class="post-context" id="post{{ frame.id }}">{% for line in frame.post_context %}<li onclick="toggle('pre{{ frame.id }}', 'post{{ frame.id }}')">{{ line|escape }}</li>{% endfor %}</ol>
- {% endif %}
- </div>
- {% endif %}
-
- {% if frame.vars %}
- <div class="commands">
- <a href="#" onclick="return varToggle(this, '{{ frame.id }}')"><span>&#x25b6;</span> Local vars</a>
- </div>
- <table class="vars" id="v{{ frame.id }}">
- <thead>
- <tr>
- <th>Variable</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- {% for var in frame.vars|dictsort:"0" %}
- <tr>
- <td>{{ var.0|escape }}</td>
- <td class="code"><div>{{ var.1|pprint|escape }}</div></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% endif %}
- </li>
- {% endfor %}
- </ul>
- </div>
- {% endautoescape %}
- <form action="http://dpaste.com/" name="pasteform" id="pasteform" method="post">
- <div id="pastebinTraceback" class="pastebin">
- <input type="hidden" name="language" value="PythonConsole">
- <input type="hidden" name="title" value="{{ exception_type|escape }} at {{ request.path_info|escape }}">
- <input type="hidden" name="source" value="Django Dpaste Agent">
- <input type="hidden" name="poster" value="Django">
- <textarea name="content" id="traceback_area" cols="140" rows="25">
-Environment:
-
-Request Method: {{ request.META.REQUEST_METHOD }}
-Request URL: {{ request.build_absolute_uri|escape }}
-Django Version: {{ django_version_info }}
-Python Version: {{ sys_version_info }}
-Installed Applications:
-{{ settings.INSTALLED_APPS|pprint }}
-Installed Middleware:
-{{ settings.MIDDLEWARE_CLASSES|pprint }}
-
-{% if template_does_not_exist %}Template Loader Error:
-{% if loader_debug_info %}Django tried loading these templates, in this order:
-{% for loader in loader_debug_info %}Using loader {{ loader.loader }}:
-{% for t in loader.templates %}{{ t.name }} (File {% if t.exists %}exists{% else %}does not exist{% endif %})
-{% endfor %}{% endfor %}
-{% else %}Django couldn't find any templates because your TEMPLATE_LOADERS setting is empty!
-{% endif %}
-{% endif %}{% if template_info %}
-Template error:
-In template {{ template_info.name }}, error at line {{ template_info.line }}
- {{ template_info.message }}{% for source_line in template_info.source_lines %}{% ifequal source_line.0 template_info.line %}
- {{ source_line.0 }} : {{ template_info.before }} {{ template_info.during }} {{ template_info.after }}
-{% else %}
- {{ source_line.0 }} : {{ source_line.1 }}
-{% endifequal %}{% endfor %}{% endif %}
-Traceback:
-{% for frame in frames %}File "{{ frame.filename|escape }}" in {{ frame.function|escape }}
-{% if frame.context_line %} {{ frame.lineno }}. {{ frame.context_line|escape }}{% endif %}
-{% endfor %}
-Exception Type: {{ exception_type|escape }} at {{ request.path_info|escape }}
-Exception Value: {{ exception_value|escape }}
-</textarea>
- <br><br>
- <input type="submit" value="Share this traceback on a public Web site">
- </div>
-</form>
-</div>
-
-<div id="requestinfo">
- <h2>Request information</h2>
-
- <h3 id="get-info">GET</h3>
- {% if request.GET %}
- <table class="req">
- <thead>
- <tr>
- <th>Variable</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- {% for var in request.GET.items %}
- <tr>
- <td>{{ var.0 }}</td>
- <td class="code"><div>{{ var.1|pprint }}</div></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% else %}
- <p>No GET data</p>
- {% endif %}
-
- <h3 id="post-info">POST</h3>
- {% if request.POST %}
- <table class="req">
- <thead>
- <tr>
- <th>Variable</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- {% for var in request.POST.items %}
- <tr>
- <td>{{ var.0 }}</td>
- <td class="code"><div>{{ var.1|pprint }}</div></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% else %}
- <p>No POST data</p>
- {% endif %}
- <h3 id="files-info">FILES</h3>
- {% if request.FILES %}
- <table class="req">
- <thead>
- <tr>
- <th>Variable</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- {% for var in request.FILES.items %}
- <tr>
- <td>{{ var.0 }}</td>
- <td class="code"><div>{{ var.1|pprint }}</div></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% else %}
- <p>No FILES data</p>
- {% endif %}
-
-
- <h3 id="cookie-info">COOKIES</h3>
- {% if request.COOKIES %}
- <table class="req">
- <thead>
- <tr>
- <th>Variable</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- {% for var in request.COOKIES.items %}
- <tr>
- <td>{{ var.0 }}</td>
- <td class="code"><div>{{ var.1|pprint }}</div></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% else %}
- <p>No cookie data</p>
- {% endif %}
-
- <h3 id="meta-info">META</h3>
- <table class="req">
- <thead>
- <tr>
- <th>Variable</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- {% for var in request.META.items|dictsort:"0" %}
- <tr>
- <td>{{ var.0 }}</td>
- <td class="code"><div>{{ var.1|pprint }}</div></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
-
- <h3 id="settings-info">Settings</h3>
- <h4>Using settings module <code>{{ settings.SETTINGS_MODULE }}</code></h4>
- <table class="req">
- <thead>
- <tr>
- <th>Setting</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- {% for var in settings.items|dictsort:"0" %}
- <tr>
- <td>{{ var.0 }}</td>
- <td class="code"><div>{{ var.1|pprint }}</div></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
-
-</div>
-
-<div id="explanation">
- <p>
- You're seeing this error because you have <code>DEBUG = True</code> in your
- Django settings file. Change that to <code>False</code>, and Django will
- display a standard 500 page.
- </p>
-</div>
-</body>
-</html>
-"""
-
-TECHNICAL_404_TEMPLATE = """
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>Page not found at {{ request.path_info|escape }}</title>
- <meta name="robots" content="NONE,NOARCHIVE">
- <style type="text/css">
- html * { padding:0; margin:0; }
- body * { padding:10px 20px; }
- body * * { padding:0; }
- body { font:small sans-serif; background:#eee; }
- body>div { border-bottom:1px solid #ddd; }
- h1 { font-weight:normal; margin-bottom:.4em; }
- h1 span { font-size:60%; color:#666; font-weight:normal; }
- table { border:none; border-collapse: collapse; width:100%; }
- td, th { vertical-align:top; padding:2px 3px; }
- th { width:12em; text-align:right; color:#666; padding-right:.5em; }
- #info { background:#f6f6f6; }
- #info ol { margin: 0.5em 4em; }
- #info ol li { font-family: monospace; }
- #summary { background: #ffc; }
- #explanation { background:#eee; border-bottom: 0px none; }
- </style>
-</head>
-<body>
- <div id="summary">
- <h1>Page not found <span>(404)</span></h1>
- <table class="meta">
- <tr>
- <th>Request Method:</th>
- <td>{{ request.META.REQUEST_METHOD }}</td>
- </tr>
- <tr>
- <th>Request URL:</th>
- <td>{{ request.build_absolute_uri|escape }}</td>
- </tr>
- </table>
- </div>
- <div id="info">
- {% if urlpatterns %}
- <p>
- Using the URLconf defined in <code>{{ urlconf }}</code>,
- Django tried these URL patterns, in this order:
- </p>
- <ol>
- {% for pattern in urlpatterns %}
- <li>{{ pattern }}</li>
- {% endfor %}
- </ol>
- <p>The current URL, <code>{{ request_path|escape }}</code>, didn't match any of these.</p>
- {% else %}
- <p>{{ reason }}</p>
- {% endif %}
- </div>
-
- <div id="explanation">
- <p>
- You're seeing this error because you have <code>DEBUG = True</code> in
- your Django settings file. Change that to <code>False</code>, and Django
- will display a standard 404 page.
- </p>
- </div>
-</body>
-</html>
-"""
-
-EMPTY_URLCONF_TEMPLATE = """
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en"><head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title>
- <style type="text/css">
- html * { padding:0; margin:0; }
- body * { padding:10px 20px; }
- body * * { padding:0; }
- body { font:small sans-serif; }
- body>div { border-bottom:1px solid #ddd; }
- h1 { font-weight:normal; }
- h2 { margin-bottom:.8em; }
- h2 span { font-size:80%; color:#666; font-weight:normal; }
- h3 { margin:1em 0 .5em 0; }
- h4 { margin:0 0 .5em 0; font-weight: normal; }
- table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }
- tbody td, tbody th { vertical-align:top; padding:2px 3px; }
- thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; }
- tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }
- ul { margin-left: 2em; margin-top: 1em; }
- #summary { background: #e0ebff; }
- #summary h2 { font-weight: normal; color: #666; }
- #explanation { background:#eee; }
- #instructions { background:#f6f6f6; }
- #summary table { border:none; background:transparent; }
- </style>
-</head>
-
-<body>
-<div id="summary">
- <h1>It worked!</h1>
- <h2>Congratulations on your first Django-powered page.</h2>
-</div>
-
-<div id="instructions">
- <p>Of course, you haven't actually done any work yet. Here's what to do next:</p>
- <ul>
- <li>If you plan to use a database, edit the <code>DATABASES</code> setting in <code>{{ project_name }}/settings.py</code>.</li>
- <li>Start your first app by running <code>python {{ project_name }}/manage.py startapp [appname]</code>.</li>
- </ul>
-</div>
-
-<div id="explanation">
- <p>
- You're seeing this message because you have <code>DEBUG = True</code> in your
- Django settings file and you haven't configured any URLs. Get to work!
- </p>
-</div>
-</body></html>
-"""
diff --git a/parts/django/django/views/decorators/__init__.py b/parts/django/django/views/decorators/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/django/views/decorators/__init__.py
+++ /dev/null
diff --git a/parts/django/django/views/decorators/cache.py b/parts/django/django/views/decorators/cache.py
deleted file mode 100644
index 577c1dd..0000000
--- a/parts/django/django/views/decorators/cache.py
+++ /dev/null
@@ -1,81 +0,0 @@
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-
-from django.utils.decorators import decorator_from_middleware_with_args, available_attrs
-from django.utils.cache import patch_cache_control, add_never_cache_headers
-from django.middleware.cache import CacheMiddleware
-
-
-def cache_page(*args, **kwargs):
- """
- Decorator for views that tries getting the page from the cache and
- populates the cache if the page isn't in the cache yet.
-
- The cache is keyed by the URL and some data from the headers.
- Additionally there is the key prefix that is used to distinguish different
- cache areas in a multi-site setup. You could use the
- sites.get_current().domain, for example, as that is unique across a Django
- project.
-
- Additionally, all headers from the response's Vary header will be taken
- into account on caching -- just like the middleware does.
- """
- # We need backwards compatibility with code which spells it this way:
- # def my_view(): pass
- # my_view = cache_page(my_view, 123)
- # and this way:
- # my_view = cache_page(123)(my_view)
- # and this:
- # my_view = cache_page(my_view, 123, key_prefix="foo")
- # and this:
- # my_view = cache_page(123, key_prefix="foo")(my_view)
- # and possibly this way (?):
- # my_view = cache_page(123, my_view)
- # and also this way:
- # my_view = cache_page(my_view)
- # and also this way:
- # my_view = cache_page()(my_view)
-
- # We also add some asserts to give better error messages in case people are
- # using other ways to call cache_page that no longer work.
- key_prefix = kwargs.pop('key_prefix', None)
- assert not kwargs, "The only keyword argument accepted is key_prefix"
- if len(args) > 1:
- assert len(args) == 2, "cache_page accepts at most 2 arguments"
- if callable(args[0]):
- return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[1], key_prefix=key_prefix)(args[0])
- elif callable(args[1]):
- return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[0], key_prefix=key_prefix)(args[1])
- else:
- assert False, "cache_page must be passed a view function if called with two arguments"
- elif len(args) == 1:
- if callable(args[0]):
- return decorator_from_middleware_with_args(CacheMiddleware)(key_prefix=key_prefix)(args[0])
- else:
- return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[0], key_prefix=key_prefix)
- else:
- return decorator_from_middleware_with_args(CacheMiddleware)(key_prefix=key_prefix)
-
-
-def cache_control(**kwargs):
- def _cache_controller(viewfunc):
- def _cache_controlled(request, *args, **kw):
- response = viewfunc(request, *args, **kw)
- patch_cache_control(response, **kwargs)
- return response
- return wraps(viewfunc, assigned=available_attrs(viewfunc))(_cache_controlled)
- return _cache_controller
-
-
-def never_cache(view_func):
- """
- Decorator that adds headers to a response so that it will
- never be cached.
- """
- def _wrapped_view_func(request, *args, **kwargs):
- response = view_func(request, *args, **kwargs)
- add_never_cache_headers(response)
- return response
- return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view_func)
diff --git a/parts/django/django/views/decorators/csrf.py b/parts/django/django/views/decorators/csrf.py
deleted file mode 100644
index 89f676f..0000000
--- a/parts/django/django/views/decorators/csrf.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from django.middleware.csrf import CsrfViewMiddleware
-from django.utils.decorators import decorator_from_middleware, available_attrs
-
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-
-csrf_protect = decorator_from_middleware(CsrfViewMiddleware)
-csrf_protect.__name__ = "csrf_protect"
-csrf_protect.__doc__ = """
-This decorator adds CSRF protection in exactly the same way as
-CsrfViewMiddleware, but it can be used on a per view basis. Using both, or
-using the decorator multiple times, is harmless and efficient.
-"""
-
-
-class _EnsureCsrfToken(CsrfViewMiddleware):
- # We need this to behave just like the CsrfViewMiddleware, but not reject
- # requests.
- def _reject(self, request, reason):
- return None
-
-
-requires_csrf_token = decorator_from_middleware(_EnsureCsrfToken)
-requires_csrf_token.__name__ = 'requires_csrf_token'
-csrf_protect.__doc__ = """
-Use this decorator on views that need a correct csrf_token available to
-RequestContext, but without the CSRF protection that csrf_protect
-enforces.
-"""
-
-def csrf_response_exempt(view_func):
- """
- Modifies a view function so that its response is exempt
- from the post-processing of the CSRF middleware.
- """
- def wrapped_view(*args, **kwargs):
- resp = view_func(*args, **kwargs)
- resp.csrf_exempt = True
- return resp
- return wraps(view_func, assigned=available_attrs(view_func))(wrapped_view)
-
-def csrf_view_exempt(view_func):
- """
- Marks a view function as being exempt from CSRF view protection.
- """
- # We could just do view_func.csrf_exempt = True, but decorators
- # are nicer if they don't have side-effects, so we return a new
- # function.
- def wrapped_view(*args, **kwargs):
- return view_func(*args, **kwargs)
- wrapped_view.csrf_exempt = True
- return wraps(view_func, assigned=available_attrs(view_func))(wrapped_view)
-
-def csrf_exempt(view_func):
- """
- Marks a view function as being exempt from the CSRF checks
- and post processing.
-
- This is the same as using both the csrf_view_exempt and
- csrf_response_exempt decorators.
- """
- return csrf_response_exempt(csrf_view_exempt(view_func))
diff --git a/parts/django/django/views/decorators/gzip.py b/parts/django/django/views/decorators/gzip.py
deleted file mode 100644
index dc6edad..0000000
--- a/parts/django/django/views/decorators/gzip.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"Decorator for views that gzips pages if the client supports it."
-
-from django.utils.decorators import decorator_from_middleware
-from django.middleware.gzip import GZipMiddleware
-
-gzip_page = decorator_from_middleware(GZipMiddleware)
diff --git a/parts/django/django/views/decorators/http.py b/parts/django/django/views/decorators/http.py
deleted file mode 100644
index 220a60c..0000000
--- a/parts/django/django/views/decorators/http.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"""
-Decorators for views based on HTTP headers.
-"""
-
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-
-from calendar import timegm
-from datetime import timedelta
-from email.Utils import formatdate
-
-from django.utils.decorators import decorator_from_middleware, available_attrs
-from django.utils.http import parse_etags, quote_etag
-from django.middleware.http import ConditionalGetMiddleware
-from django.http import HttpResponseNotAllowed, HttpResponseNotModified, HttpResponse
-
-
-conditional_page = decorator_from_middleware(ConditionalGetMiddleware)
-
-def require_http_methods(request_method_list):
- """
- Decorator to make a view only accept particular request methods. Usage::
-
- @require_http_methods(["GET", "POST"])
- def my_view(request):
- # I can assume now that only GET or POST requests make it this far
- # ...
-
- Note that request methods should be in uppercase.
- """
- def decorator(func):
- def inner(request, *args, **kwargs):
- if request.method not in request_method_list:
- return HttpResponseNotAllowed(request_method_list)
- return func(request, *args, **kwargs)
- return wraps(func, assigned=available_attrs(func))(inner)
- return decorator
-
-require_GET = require_http_methods(["GET"])
-require_GET.__doc__ = "Decorator to require that a view only accept the GET method."
-
-require_POST = require_http_methods(["POST"])
-require_POST.__doc__ = "Decorator to require that a view only accept the POST method."
-
-def condition(etag_func=None, last_modified_func=None):
- """
- Decorator to support conditional retrieval (or change) for a view
- function.
-
- The parameters are callables to compute the ETag and last modified time for
- the requested resource, respectively. The callables are passed the same
- parameters as the view itself. The Etag function should return a string (or
- None if the resource doesn't exist), whilst the last_modified function
- should return a datetime object (or None if the resource doesn't exist).
-
- If both parameters are provided, all the preconditions must be met before
- the view is processed.
-
- This decorator will either pass control to the wrapped view function or
- return an HTTP 304 response (unmodified) or 412 response (preconditions
- failed), depending upon the request method.
-
- Any behavior marked as "undefined" in the HTTP spec (e.g. If-none-match
- plus If-modified-since headers) will result in the view function being
- called.
- """
- def decorator(func):
- def inner(request, *args, **kwargs):
- # Get HTTP request headers
- if_modified_since = request.META.get("HTTP_IF_MODIFIED_SINCE")
- if_none_match = request.META.get("HTTP_IF_NONE_MATCH")
- if_match = request.META.get("HTTP_IF_MATCH")
- if if_none_match or if_match:
- # There can be more than one ETag in the request, so we
- # consider the list of values.
- try:
- etags = parse_etags(if_none_match or if_match)
- except ValueError:
- # In case of invalid etag ignore all ETag headers.
- # Apparently Opera sends invalidly quoted headers at times
- # (we should be returning a 400 response, but that's a
- # little extreme) -- this is Django bug #10681.
- if_none_match = None
- if_match = None
-
- # Compute values (if any) for the requested resource.
- if etag_func:
- res_etag = etag_func(request, *args, **kwargs)
- else:
- res_etag = None
- if last_modified_func:
- dt = last_modified_func(request, *args, **kwargs)
- if dt:
- res_last_modified = formatdate(timegm(dt.utctimetuple()))[:26] + 'GMT'
- else:
- res_last_modified = None
- else:
- res_last_modified = None
-
- response = None
- if not ((if_match and (if_modified_since or if_none_match)) or
- (if_match and if_none_match)):
- # We only get here if no undefined combinations of headers are
- # specified.
- if ((if_none_match and (res_etag in etags or
- "*" in etags and res_etag)) and
- (not if_modified_since or
- res_last_modified == if_modified_since)):
- if request.method in ("GET", "HEAD"):
- response = HttpResponseNotModified()
- else:
- response = HttpResponse(status=412)
- elif if_match and ((not res_etag and "*" in etags) or
- (res_etag and res_etag not in etags)):
- response = HttpResponse(status=412)
- elif (not if_none_match and if_modified_since and
- request.method == "GET" and
- res_last_modified == if_modified_since):
- response = HttpResponseNotModified()
-
- if response is None:
- response = func(request, *args, **kwargs)
-
- # Set relevant headers on the response if they don't already exist.
- if res_last_modified and not response.has_header('Last-Modified'):
- response['Last-Modified'] = res_last_modified
- if res_etag and not response.has_header('ETag'):
- response['ETag'] = quote_etag(res_etag)
-
- return response
-
- return inner
- return decorator
-
-# Shortcut decorators for common cases based on ETag or Last-Modified only
-def etag(etag_func):
- return condition(etag_func=etag_func)
-
-def last_modified(last_modified_func):
- return condition(last_modified_func=last_modified_func)
-
diff --git a/parts/django/django/views/decorators/vary.py b/parts/django/django/views/decorators/vary.py
deleted file mode 100644
index a10896c..0000000
--- a/parts/django/django/views/decorators/vary.py
+++ /dev/null
@@ -1,41 +0,0 @@
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-
-from django.utils.cache import patch_vary_headers
-from django.utils.decorators import available_attrs
-
-def vary_on_headers(*headers):
- """
- A view decorator that adds the specified headers to the Vary header of the
- response. Usage:
-
- @vary_on_headers('Cookie', 'Accept-language')
- def index(request):
- ...
-
- Note that the header names are not case-sensitive.
- """
- def decorator(func):
- def inner_func(*args, **kwargs):
- response = func(*args, **kwargs)
- patch_vary_headers(response, headers)
- return response
- return wraps(func, assigned=available_attrs(func))(inner_func)
- return decorator
-
-def vary_on_cookie(func):
- """
- A view decorator that adds "Cookie" to the Vary header of a response. This
- indicates that a page's contents depends on cookies. Usage:
-
- @vary_on_cookie
- def index(request):
- ...
- """
- def inner_func(*args, **kwargs):
- response = func(*args, **kwargs)
- patch_vary_headers(response, ('Cookie',))
- return response
- return wraps(func, assigned=available_attrs(func))(inner_func)
diff --git a/parts/django/django/views/defaults.py b/parts/django/django/views/defaults.py
deleted file mode 100644
index 29cdf82..0000000
--- a/parts/django/django/views/defaults.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from django import http
-from django.views.decorators.csrf import requires_csrf_token
-from django.template import Context, RequestContext, loader
-
-
-# This can be called when CsrfViewMiddleware.process_view has not run, therefore
-# need @requires_csrf_token in case the template needs {% csrf_token %}.
-@requires_csrf_token
-def page_not_found(request, template_name='404.html'):
- """
- Default 404 handler.
-
- Templates: `404.html`
- Context:
- request_path
- The path of the requested URL (e.g., '/app/pages/bad_page/')
- """
- t = loader.get_template(template_name) # You need to create a 404.html template.
- return http.HttpResponseNotFound(t.render(RequestContext(request, {'request_path': request.path})))
-
-
-@requires_csrf_token
-def server_error(request, template_name='500.html'):
- """
- 500 error handler.
-
- Templates: `500.html`
- Context: None
- """
- t = loader.get_template(template_name) # You need to create a 500.html template.
- return http.HttpResponseServerError(t.render(Context({})))
-
-
-def shortcut(request, content_type_id, object_id):
- # TODO: Remove this in Django 2.0.
- # This is a legacy view that depends on the contenttypes framework.
- # The core logic was moved to django.contrib.contenttypes.views after
- # Django 1.0, but this remains here for backwards compatibility.
- # Note that the import is *within* this function, rather than being at
- # module level, because we don't want to assume people have contenttypes
- # installed.
- from django.contrib.contenttypes.views import shortcut as real_shortcut
- return real_shortcut(request, content_type_id, object_id)
diff --git a/parts/django/django/views/generic/__init__.py b/parts/django/django/views/generic/__init__.py
deleted file mode 100644
index 95c5fa9..0000000
--- a/parts/django/django/views/generic/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-class GenericViewError(Exception):
- """A problem in a generic view."""
- pass
diff --git a/parts/django/django/views/generic/create_update.py b/parts/django/django/views/generic/create_update.py
deleted file mode 100644
index 76575f9..0000000
--- a/parts/django/django/views/generic/create_update.py
+++ /dev/null
@@ -1,215 +0,0 @@
-from django.forms.models import ModelFormMetaclass, ModelForm
-from django.template import RequestContext, loader
-from django.http import Http404, HttpResponse, HttpResponseRedirect
-from django.core.xheaders import populate_xheaders
-from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
-from django.utils.translation import ugettext
-from django.contrib.auth.views import redirect_to_login
-from django.views.generic import GenericViewError
-from django.contrib import messages
-
-
-def apply_extra_context(extra_context, context):
- """
- Adds items from extra_context dict to context. If a value in extra_context
- is callable, then it is called and the result is added to context.
- """
- for key, value in extra_context.iteritems():
- if callable(value):
- context[key] = value()
- else:
- context[key] = value
-
-def get_model_and_form_class(model, form_class):
- """
- Returns a model and form class based on the model and form_class
- parameters that were passed to the generic view.
-
- If ``form_class`` is given then its associated model will be returned along
- with ``form_class`` itself. Otherwise, if ``model`` is given, ``model``
- itself will be returned along with a ``ModelForm`` class created from
- ``model``.
- """
- if form_class:
- return form_class._meta.model, form_class
- if model:
- # The inner Meta class fails if model = model is used for some reason.
- tmp_model = model
- # TODO: we should be able to construct a ModelForm without creating
- # and passing in a temporary inner class.
- class Meta:
- model = tmp_model
- class_name = model.__name__ + 'Form'
- form_class = ModelFormMetaclass(class_name, (ModelForm,), {'Meta': Meta})
- return model, form_class
- raise GenericViewError("Generic view must be called with either a model or"
- " form_class argument.")
-
-def redirect(post_save_redirect, obj):
- """
- Returns a HttpResponseRedirect to ``post_save_redirect``.
-
- ``post_save_redirect`` should be a string, and can contain named string-
- substitution place holders of ``obj`` field names.
-
- If ``post_save_redirect`` is None, then redirect to ``obj``'s URL returned
- by ``get_absolute_url()``. If ``obj`` has no ``get_absolute_url`` method,
- then raise ImproperlyConfigured.
-
- This function is meant to handle the post_save_redirect parameter to the
- ``create_object`` and ``update_object`` views.
- """
- if post_save_redirect:
- return HttpResponseRedirect(post_save_redirect % obj.__dict__)
- elif hasattr(obj, 'get_absolute_url'):
- return HttpResponseRedirect(obj.get_absolute_url())
- else:
- raise ImproperlyConfigured(
- "No URL to redirect to. Either pass a post_save_redirect"
- " parameter to the generic view or define a get_absolute_url"
- " method on the Model.")
-
-def lookup_object(model, object_id, slug, slug_field):
- """
- Return the ``model`` object with the passed ``object_id``. If
- ``object_id`` is None, then return the object whose ``slug_field``
- equals the passed ``slug``. If ``slug`` and ``slug_field`` are not passed,
- then raise Http404 exception.
- """
- lookup_kwargs = {}
- if object_id:
- lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id
- elif slug and slug_field:
- lookup_kwargs['%s__exact' % slug_field] = slug
- else:
- raise GenericViewError(
- "Generic view must be called with either an object_id or a"
- " slug/slug_field.")
- try:
- return model.objects.get(**lookup_kwargs)
- except ObjectDoesNotExist:
- raise Http404("No %s found for %s"
- % (model._meta.verbose_name, lookup_kwargs))
-
-def create_object(request, model=None, template_name=None,
- template_loader=loader, extra_context=None, post_save_redirect=None,
- login_required=False, context_processors=None, form_class=None):
- """
- Generic object-creation function.
-
- Templates: ``<app_label>/<model_name>_form.html``
- Context:
- form
- the form for the object
- """
- if extra_context is None: extra_context = {}
- if login_required and not request.user.is_authenticated():
- return redirect_to_login(request.path)
-
- model, form_class = get_model_and_form_class(model, form_class)
- if request.method == 'POST':
- form = form_class(request.POST, request.FILES)
- if form.is_valid():
- new_object = form.save()
-
- msg = ugettext("The %(verbose_name)s was created successfully.") %\
- {"verbose_name": model._meta.verbose_name}
- messages.success(request, msg, fail_silently=True)
- return redirect(post_save_redirect, new_object)
- else:
- form = form_class()
-
- # Create the template, context, response
- if not template_name:
- template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- 'form': form,
- }, context_processors)
- apply_extra_context(extra_context, c)
- return HttpResponse(t.render(c))
-
-def update_object(request, model=None, object_id=None, slug=None,
- slug_field='slug', template_name=None, template_loader=loader,
- extra_context=None, post_save_redirect=None, login_required=False,
- context_processors=None, template_object_name='object',
- form_class=None):
- """
- Generic object-update function.
-
- Templates: ``<app_label>/<model_name>_form.html``
- Context:
- form
- the form for the object
- object
- the original object being edited
- """
- if extra_context is None: extra_context = {}
- if login_required and not request.user.is_authenticated():
- return redirect_to_login(request.path)
-
- model, form_class = get_model_and_form_class(model, form_class)
- obj = lookup_object(model, object_id, slug, slug_field)
-
- if request.method == 'POST':
- form = form_class(request.POST, request.FILES, instance=obj)
- if form.is_valid():
- obj = form.save()
- msg = ugettext("The %(verbose_name)s was updated successfully.") %\
- {"verbose_name": model._meta.verbose_name}
- messages.success(request, msg, fail_silently=True)
- return redirect(post_save_redirect, obj)
- else:
- form = form_class(instance=obj)
-
- if not template_name:
- template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- 'form': form,
- template_object_name: obj,
- }, context_processors)
- apply_extra_context(extra_context, c)
- response = HttpResponse(t.render(c))
- populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.attname))
- return response
-
-def delete_object(request, model, post_delete_redirect, object_id=None,
- slug=None, slug_field='slug', template_name=None,
- template_loader=loader, extra_context=None, login_required=False,
- context_processors=None, template_object_name='object'):
- """
- Generic object-delete function.
-
- The given template will be used to confirm deletetion if this view is
- fetched using GET; for safty, deletion will only be performed if this
- view is POSTed.
-
- Templates: ``<app_label>/<model_name>_confirm_delete.html``
- Context:
- object
- the original object being deleted
- """
- if extra_context is None: extra_context = {}
- if login_required and not request.user.is_authenticated():
- return redirect_to_login(request.path)
-
- obj = lookup_object(model, object_id, slug, slug_field)
-
- if request.method == 'POST':
- obj.delete()
- msg = ugettext("The %(verbose_name)s was deleted.") %\
- {"verbose_name": model._meta.verbose_name}
- messages.success(request, msg, fail_silently=True)
- return HttpResponseRedirect(post_delete_redirect)
- else:
- if not template_name:
- template_name = "%s/%s_confirm_delete.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- template_object_name: obj,
- }, context_processors)
- apply_extra_context(extra_context, c)
- response = HttpResponse(t.render(c))
- populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.attname))
- return response
diff --git a/parts/django/django/views/generic/date_based.py b/parts/django/django/views/generic/date_based.py
deleted file mode 100644
index 726df59..0000000
--- a/parts/django/django/views/generic/date_based.py
+++ /dev/null
@@ -1,368 +0,0 @@
-import datetime
-import time
-
-from django.template import loader, RequestContext
-from django.core.exceptions import ObjectDoesNotExist
-from django.core.xheaders import populate_xheaders
-from django.db.models.fields import DateTimeField
-from django.http import Http404, HttpResponse
-
-def archive_index(request, queryset, date_field, num_latest=15,
- template_name=None, template_loader=loader,
- extra_context=None, allow_empty=True, context_processors=None,
- mimetype=None, allow_future=False, template_object_name='latest'):
- """
- Generic top-level archive of date-based objects.
-
- Templates: ``<app_label>/<model_name>_archive.html``
- Context:
- date_list
- List of years
- latest
- Latest N (defaults to 15) objects by date
- """
- if extra_context is None: extra_context = {}
- model = queryset.model
- if not allow_future:
- queryset = queryset.filter(**{'%s__lte' % date_field: datetime.datetime.now()})
- date_list = queryset.dates(date_field, 'year')[::-1]
- if not date_list and not allow_empty:
- raise Http404("No %s available" % model._meta.verbose_name)
-
- if date_list and num_latest:
- latest = queryset.order_by('-'+date_field)[:num_latest]
- else:
- latest = None
-
- if not template_name:
- template_name = "%s/%s_archive.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- 'date_list' : date_list,
- template_object_name : latest,
- }, context_processors)
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- return HttpResponse(t.render(c), mimetype=mimetype)
-
-def archive_year(request, year, queryset, date_field, template_name=None,
- template_loader=loader, extra_context=None, allow_empty=False,
- context_processors=None, template_object_name='object', mimetype=None,
- make_object_list=False, allow_future=False):
- """
- Generic yearly archive view.
-
- Templates: ``<app_label>/<model_name>_archive_year.html``
- Context:
- date_list
- List of months in this year with objects
- year
- This year
- object_list
- List of objects published in the given month
- (Only available if make_object_list argument is True)
- """
- if extra_context is None: extra_context = {}
- model = queryset.model
- now = datetime.datetime.now()
-
- lookup_kwargs = {'%s__year' % date_field: year}
-
- # Only bother to check current date if the year isn't in the past and future objects aren't requested.
- if int(year) >= now.year and not allow_future:
- lookup_kwargs['%s__lte' % date_field] = now
- date_list = queryset.filter(**lookup_kwargs).dates(date_field, 'month')
- if not date_list and not allow_empty:
- raise Http404
- if make_object_list:
- object_list = queryset.filter(**lookup_kwargs)
- else:
- object_list = []
- if not template_name:
- template_name = "%s/%s_archive_year.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- 'date_list': date_list,
- 'year': year,
- '%s_list' % template_object_name: object_list,
- }, context_processors)
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- return HttpResponse(t.render(c), mimetype=mimetype)
-
-def archive_month(request, year, month, queryset, date_field,
- month_format='%b', template_name=None, template_loader=loader,
- extra_context=None, allow_empty=False, context_processors=None,
- template_object_name='object', mimetype=None, allow_future=False):
- """
- Generic monthly archive view.
-
- Templates: ``<app_label>/<model_name>_archive_month.html``
- Context:
- date_list:
- List of days in this month with objects
- month:
- (date) this month
- next_month:
- (date) the first day of the next month, or None if the next month is in the future
- previous_month:
- (date) the first day of the previous month
- object_list:
- list of objects published in the given month
- """
- if extra_context is None: extra_context = {}
- try:
- tt = time.strptime("%s-%s" % (year, month), '%s-%s' % ('%Y', month_format))
- date = datetime.date(*tt[:3])
- except ValueError:
- raise Http404
-
- model = queryset.model
- now = datetime.datetime.now()
-
- # Calculate first and last day of month, for use in a date-range lookup.
- first_day = date.replace(day=1)
- if first_day.month == 12:
- last_day = first_day.replace(year=first_day.year + 1, month=1)
- else:
- last_day = first_day.replace(month=first_day.month + 1)
- lookup_kwargs = {
- '%s__gte' % date_field: first_day,
- '%s__lt' % date_field: last_day,
- }
-
- # Only bother to check current date if the month isn't in the past and future objects are requested.
- if last_day >= now.date() and not allow_future:
- lookup_kwargs['%s__lte' % date_field] = now
- object_list = queryset.filter(**lookup_kwargs)
- date_list = object_list.dates(date_field, 'day')
- if not object_list and not allow_empty:
- raise Http404
-
- # Calculate the next month, if applicable.
- if allow_future:
- next_month = last_day
- elif last_day <= datetime.date.today():
- next_month = last_day
- else:
- next_month = None
-
- # Calculate the previous month
- if first_day.month == 1:
- previous_month = first_day.replace(year=first_day.year-1,month=12)
- else:
- previous_month = first_day.replace(month=first_day.month-1)
-
- if not template_name:
- template_name = "%s/%s_archive_month.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- 'date_list': date_list,
- '%s_list' % template_object_name: object_list,
- 'month': date,
- 'next_month': next_month,
- 'previous_month': previous_month,
- }, context_processors)
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- return HttpResponse(t.render(c), mimetype=mimetype)
-
-def archive_week(request, year, week, queryset, date_field,
- template_name=None, template_loader=loader,
- extra_context=None, allow_empty=True, context_processors=None,
- template_object_name='object', mimetype=None, allow_future=False):
- """
- Generic weekly archive view.
-
- Templates: ``<app_label>/<model_name>_archive_week.html``
- Context:
- week:
- (date) this week
- object_list:
- list of objects published in the given week
- """
- if extra_context is None: extra_context = {}
- try:
- tt = time.strptime(year+'-0-'+week, '%Y-%w-%U')
- date = datetime.date(*tt[:3])
- except ValueError:
- raise Http404
-
- model = queryset.model
- now = datetime.datetime.now()
-
- # Calculate first and last day of week, for use in a date-range lookup.
- first_day = date
- last_day = date + datetime.timedelta(days=7)
- lookup_kwargs = {
- '%s__gte' % date_field: first_day,
- '%s__lt' % date_field: last_day,
- }
-
- # Only bother to check current date if the week isn't in the past and future objects aren't requested.
- if last_day >= now.date() and not allow_future:
- lookup_kwargs['%s__lte' % date_field] = now
- object_list = queryset.filter(**lookup_kwargs)
- if not object_list and not allow_empty:
- raise Http404
- if not template_name:
- template_name = "%s/%s_archive_week.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- '%s_list' % template_object_name: object_list,
- 'week': date,
- })
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- return HttpResponse(t.render(c), mimetype=mimetype)
-
-def archive_day(request, year, month, day, queryset, date_field,
- month_format='%b', day_format='%d', template_name=None,
- template_loader=loader, extra_context=None, allow_empty=False,
- context_processors=None, template_object_name='object',
- mimetype=None, allow_future=False):
- """
- Generic daily archive view.
-
- Templates: ``<app_label>/<model_name>_archive_day.html``
- Context:
- object_list:
- list of objects published that day
- day:
- (datetime) the day
- previous_day
- (datetime) the previous day
- next_day
- (datetime) the next day, or None if the current day is today
- """
- if extra_context is None: extra_context = {}
- try:
- tt = time.strptime('%s-%s-%s' % (year, month, day),
- '%s-%s-%s' % ('%Y', month_format, day_format))
- date = datetime.date(*tt[:3])
- except ValueError:
- raise Http404
-
- model = queryset.model
- now = datetime.datetime.now()
-
- if isinstance(model._meta.get_field(date_field), DateTimeField):
- lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
- else:
- lookup_kwargs = {date_field: date}
-
- # Only bother to check current date if the date isn't in the past and future objects aren't requested.
- if date >= now.date() and not allow_future:
- lookup_kwargs['%s__lte' % date_field] = now
- object_list = queryset.filter(**lookup_kwargs)
- if not allow_empty and not object_list:
- raise Http404
-
- # Calculate the next day, if applicable.
- if allow_future:
- next_day = date + datetime.timedelta(days=1)
- elif date < datetime.date.today():
- next_day = date + datetime.timedelta(days=1)
- else:
- next_day = None
-
- if not template_name:
- template_name = "%s/%s_archive_day.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- '%s_list' % template_object_name: object_list,
- 'day': date,
- 'previous_day': date - datetime.timedelta(days=1),
- 'next_day': next_day,
- }, context_processors)
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- return HttpResponse(t.render(c), mimetype=mimetype)
-
-def archive_today(request, **kwargs):
- """
- Generic daily archive view for today. Same as archive_day view.
- """
- today = datetime.date.today()
- kwargs.update({
- 'year': str(today.year),
- 'month': today.strftime('%b').lower(),
- 'day': str(today.day),
- })
- return archive_day(request, **kwargs)
-
-def object_detail(request, year, month, day, queryset, date_field,
- month_format='%b', day_format='%d', object_id=None, slug=None,
- slug_field='slug', template_name=None, template_name_field=None,
- template_loader=loader, extra_context=None, context_processors=None,
- template_object_name='object', mimetype=None, allow_future=False):
- """
- Generic detail view from year/month/day/slug or year/month/day/id structure.
-
- Templates: ``<app_label>/<model_name>_detail.html``
- Context:
- object:
- the object to be detailed
- """
- if extra_context is None: extra_context = {}
- try:
- tt = time.strptime('%s-%s-%s' % (year, month, day),
- '%s-%s-%s' % ('%Y', month_format, day_format))
- date = datetime.date(*tt[:3])
- except ValueError:
- raise Http404
-
- model = queryset.model
- now = datetime.datetime.now()
-
- if isinstance(model._meta.get_field(date_field), DateTimeField):
- lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
- else:
- lookup_kwargs = {date_field: date}
-
- # Only bother to check current date if the date isn't in the past and future objects aren't requested.
- if date >= now.date() and not allow_future:
- lookup_kwargs['%s__lte' % date_field] = now
- if object_id:
- lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id
- elif slug and slug_field:
- lookup_kwargs['%s__exact' % slug_field] = slug
- else:
- raise AttributeError("Generic detail view must be called with either an object_id or a slug/slugfield")
- try:
- obj = queryset.get(**lookup_kwargs)
- except ObjectDoesNotExist:
- raise Http404("No %s found for" % model._meta.verbose_name)
- if not template_name:
- template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower())
- if template_name_field:
- template_name_list = [getattr(obj, template_name_field), template_name]
- t = template_loader.select_template(template_name_list)
- else:
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- template_object_name: obj,
- }, context_processors)
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- response = HttpResponse(t.render(c), mimetype=mimetype)
- populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.name))
- return response
diff --git a/parts/django/django/views/generic/list_detail.py b/parts/django/django/views/generic/list_detail.py
deleted file mode 100644
index 1e39c4d..0000000
--- a/parts/django/django/views/generic/list_detail.py
+++ /dev/null
@@ -1,145 +0,0 @@
-from django.template import loader, RequestContext
-from django.http import Http404, HttpResponse
-from django.core.xheaders import populate_xheaders
-from django.core.paginator import Paginator, InvalidPage
-from django.core.exceptions import ObjectDoesNotExist
-
-def object_list(request, queryset, paginate_by=None, page=None,
- allow_empty=True, template_name=None, template_loader=loader,
- extra_context=None, context_processors=None, template_object_name='object',
- mimetype=None):
- """
- Generic list of objects.
-
- Templates: ``<app_label>/<model_name>_list.html``
- Context:
- object_list
- list of objects
- is_paginated
- are the results paginated?
- results_per_page
- number of objects per page (if paginated)
- has_next
- is there a next page?
- has_previous
- is there a prev page?
- page
- the current page
- next
- the next page
- previous
- the previous page
- pages
- number of pages, total
- hits
- number of objects, total
- last_on_page
- the result number of the last of object in the
- object_list (1-indexed)
- first_on_page
- the result number of the first object in the
- object_list (1-indexed)
- page_range:
- A list of the page numbers (1-indexed).
- """
- if extra_context is None: extra_context = {}
- queryset = queryset._clone()
- if paginate_by:
- paginator = Paginator(queryset, paginate_by, allow_empty_first_page=allow_empty)
- if not page:
- page = request.GET.get('page', 1)
- try:
- page_number = int(page)
- except ValueError:
- if page == 'last':
- page_number = paginator.num_pages
- else:
- # Page is not 'last', nor can it be converted to an int.
- raise Http404
- try:
- page_obj = paginator.page(page_number)
- except InvalidPage:
- raise Http404
- c = RequestContext(request, {
- '%s_list' % template_object_name: page_obj.object_list,
- 'paginator': paginator,
- 'page_obj': page_obj,
-
- # Legacy template context stuff. New templates should use page_obj
- # to access this instead.
- 'is_paginated': page_obj.has_other_pages(),
- 'results_per_page': paginator.per_page,
- 'has_next': page_obj.has_next(),
- 'has_previous': page_obj.has_previous(),
- 'page': page_obj.number,
- 'next': page_obj.next_page_number(),
- 'previous': page_obj.previous_page_number(),
- 'first_on_page': page_obj.start_index(),
- 'last_on_page': page_obj.end_index(),
- 'pages': paginator.num_pages,
- 'hits': paginator.count,
- 'page_range': paginator.page_range,
- }, context_processors)
- else:
- c = RequestContext(request, {
- '%s_list' % template_object_name: queryset,
- 'paginator': None,
- 'page_obj': None,
- 'is_paginated': False,
- }, context_processors)
- if not allow_empty and len(queryset) == 0:
- raise Http404
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- if not template_name:
- model = queryset.model
- template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower())
- t = template_loader.get_template(template_name)
- return HttpResponse(t.render(c), mimetype=mimetype)
-
-def object_detail(request, queryset, object_id=None, slug=None,
- slug_field='slug', template_name=None, template_name_field=None,
- template_loader=loader, extra_context=None,
- context_processors=None, template_object_name='object',
- mimetype=None):
- """
- Generic detail of an object.
-
- Templates: ``<app_label>/<model_name>_detail.html``
- Context:
- object
- the object
- """
- if extra_context is None: extra_context = {}
- model = queryset.model
- if object_id:
- queryset = queryset.filter(pk=object_id)
- elif slug and slug_field:
- queryset = queryset.filter(**{slug_field: slug})
- else:
- raise AttributeError("Generic detail view must be called with either an object_id or a slug/slug_field.")
- try:
- obj = queryset.get()
- except ObjectDoesNotExist:
- raise Http404("No %s found matching the query" % (model._meta.verbose_name))
- if not template_name:
- template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower())
- if template_name_field:
- template_name_list = [getattr(obj, template_name_field), template_name]
- t = template_loader.select_template(template_name_list)
- else:
- t = template_loader.get_template(template_name)
- c = RequestContext(request, {
- template_object_name: obj,
- }, context_processors)
- for key, value in extra_context.items():
- if callable(value):
- c[key] = value()
- else:
- c[key] = value
- response = HttpResponse(t.render(c), mimetype=mimetype)
- populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.name))
- return response
diff --git a/parts/django/django/views/generic/simple.py b/parts/django/django/views/generic/simple.py
deleted file mode 100644
index 3b5309d..0000000
--- a/parts/django/django/views/generic/simple.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from django.template import loader, RequestContext
-from django.http import HttpResponse, HttpResponseRedirect, HttpResponsePermanentRedirect, HttpResponseGone
-
-def direct_to_template(request, template, extra_context=None, mimetype=None, **kwargs):
- """
- Render a given template with any extra URL parameters in the context as
- ``{{ params }}``.
- """
- if extra_context is None: extra_context = {}
- dictionary = {'params': kwargs}
- for key, value in extra_context.items():
- if callable(value):
- dictionary[key] = value()
- else:
- dictionary[key] = value
- c = RequestContext(request, dictionary)
- t = loader.get_template(template)
- return HttpResponse(t.render(c), mimetype=mimetype)
-
-def redirect_to(request, url, permanent=True, **kwargs):
- """
- Redirect to a given URL.
-
- The given url may contain dict-style string formatting, which will be
- interpolated against the params in the URL. For example, to redirect from
- ``/foo/<id>/`` to ``/bar/<id>/``, you could use the following URLconf::
-
- urlpatterns = patterns('',
- ('^foo/(?P<id>\d+)/$', 'django.views.generic.simple.redirect_to', {'url' : '/bar/%(id)s/'}),
- )
-
- If the given url is ``None``, a HttpResponseGone (410) will be issued.
-
- If the ``permanent`` argument is False, then the response will have a 302
- HTTP status code. Otherwise, the status code will be 301.
- """
- if url is not None:
- klass = permanent and HttpResponsePermanentRedirect or HttpResponseRedirect
- return klass(url % kwargs)
- else:
- return HttpResponseGone()
diff --git a/parts/django/django/views/i18n.py b/parts/django/django/views/i18n.py
deleted file mode 100644
index 5d12fef..0000000
--- a/parts/django/django/views/i18n.py
+++ /dev/null
@@ -1,264 +0,0 @@
-import os
-import gettext as gettext_module
-
-from django import http
-from django.conf import settings
-from django.utils import importlib
-from django.utils.translation import check_for_language, activate, to_locale, get_language
-from django.utils.text import javascript_quote
-from django.utils.encoding import smart_unicode
-from django.utils.formats import get_format_modules
-
-def set_language(request):
- """
- Redirect to a given url while setting the chosen language in the
- session or cookie. The url and the language code need to be
- specified in the request parameters.
-
- Since this view changes how the user will see the rest of the site, it must
- only be accessed as a POST request. If called as a GET request, it will
- redirect to the page in the request (the 'next' parameter) without changing
- any state.
- """
- next = request.REQUEST.get('next', None)
- if not next:
- next = request.META.get('HTTP_REFERER', None)
- if not next:
- next = '/'
- response = http.HttpResponseRedirect(next)
- if request.method == 'POST':
- lang_code = request.POST.get('language', None)
- if lang_code and check_for_language(lang_code):
- if hasattr(request, 'session'):
- request.session['django_language'] = lang_code
- else:
- response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
- return response
-
-def get_formats():
- """
- Returns all formats strings required for i18n to work
- """
- FORMAT_SETTINGS = (
- 'DATE_FORMAT', 'DATETIME_FORMAT', 'TIME_FORMAT',
- 'YEAR_MONTH_FORMAT', 'MONTH_DAY_FORMAT', 'SHORT_DATE_FORMAT',
- 'SHORT_DATETIME_FORMAT', 'FIRST_DAY_OF_WEEK', 'DECIMAL_SEPARATOR',
- 'THOUSAND_SEPARATOR', 'NUMBER_GROUPING',
- 'DATE_INPUT_FORMATS', 'TIME_INPUT_FORMATS', 'DATETIME_INPUT_FORMATS'
- )
- result = {}
- for module in [settings] + get_format_modules(reverse=True):
- for attr in FORMAT_SETTINGS:
- try:
- result[attr] = getattr(module, attr)
- except AttributeError:
- pass
- src = []
- for k, v in result.items():
- if isinstance(v, (basestring, int)):
- src.append("formats['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(smart_unicode(v))))
- elif isinstance(v, (tuple, list)):
- v = [javascript_quote(smart_unicode(value)) for value in v]
- src.append("formats['%s'] = ['%s'];\n" % (javascript_quote(k), "', '".join(v)))
- return ''.join(src)
-
-NullSource = """
-/* gettext identity library */
-
-function gettext(msgid) { return msgid; }
-function ngettext(singular, plural, count) { return (count == 1) ? singular : plural; }
-function gettext_noop(msgid) { return msgid; }
-"""
-
-LibHead = """
-/* gettext library */
-
-var catalog = new Array();
-"""
-
-LibFoot = """
-
-function gettext(msgid) {
- var value = catalog[msgid];
- if (typeof(value) == 'undefined') {
- return msgid;
- } else {
- return (typeof(value) == 'string') ? value : value[0];
- }
-}
-
-function ngettext(singular, plural, count) {
- value = catalog[singular];
- if (typeof(value) == 'undefined') {
- return (count == 1) ? singular : plural;
- } else {
- return value[pluralidx(count)];
- }
-}
-
-function gettext_noop(msgid) { return msgid; }
-
-"""
-
-LibFormatHead = """
-/* formatting library */
-
-var formats = new Array();
-
-"""
-
-LibFormatFoot = """
-function get_format(format_type) {
- var value = formats[format_type];
- if (typeof(value) == 'undefined') {
- return msgid;
- } else {
- return value;
- }
-}
-"""
-
-SimplePlural = """
-function pluralidx(count) { return (count == 1) ? 0 : 1; }
-"""
-
-InterPolate = r"""
-function interpolate(fmt, obj, named) {
- if (named) {
- return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])});
- } else {
- return fmt.replace(/%s/g, function(match){return String(obj.shift())});
- }
-}
-"""
-
-PluralIdx = r"""
-function pluralidx(n) {
- var v=%s;
- if (typeof(v) == 'boolean') {
- return v ? 1 : 0;
- } else {
- return v;
- }
-}
-"""
-
-def null_javascript_catalog(request, domain=None, packages=None):
- """
- Returns "identity" versions of the JavaScript i18n functions -- i.e.,
- versions that don't actually do anything.
- """
- src = [NullSource, InterPolate, LibFormatHead, get_formats(), LibFormatFoot]
- return http.HttpResponse(''.join(src), 'text/javascript')
-
-def javascript_catalog(request, domain='djangojs', packages=None):
- """
- Returns the selected language catalog as a javascript library.
-
- Receives the list of packages to check for translations in the
- packages parameter either from an infodict or as a +-delimited
- string from the request. Default is 'django.conf'.
-
- Additionally you can override the gettext domain for this view,
- but usually you don't want to do that, as JavaScript messages
- go to the djangojs domain. But this might be needed if you
- deliver your JavaScript source from Django templates.
- """
- if request.GET:
- if 'language' in request.GET:
- if check_for_language(request.GET['language']):
- activate(request.GET['language'])
- if packages is None:
- packages = ['django.conf']
- if isinstance(packages, basestring):
- packages = packages.split('+')
- packages = [p for p in packages if p == 'django.conf' or p in settings.INSTALLED_APPS]
- default_locale = to_locale(settings.LANGUAGE_CODE)
- locale = to_locale(get_language())
- t = {}
- paths = []
- en_selected = locale.startswith('en')
- en_catalog_missing = True
- # first load all english languages files for defaults
- for package in packages:
- p = importlib.import_module(package)
- path = os.path.join(os.path.dirname(p.__file__), 'locale')
- paths.append(path)
- try:
- catalog = gettext_module.translation(domain, path, ['en'])
- t.update(catalog._catalog)
- except IOError:
- pass
- else:
- # 'en' is the selected language and at least one of the packages
- # listed in `packages` has an 'en' catalog
- if en_selected:
- en_catalog_missing = False
- # next load the settings.LANGUAGE_CODE translations if it isn't english
- if default_locale != 'en':
- for path in paths:
- try:
- catalog = gettext_module.translation(domain, path, [default_locale])
- except IOError:
- catalog = None
- if catalog is not None:
- t.update(catalog._catalog)
- # last load the currently selected language, if it isn't identical to the default.
- if locale != default_locale:
- # If the currently selected language is English but it doesn't have a
- # translation catalog (presumably due to being the language translated
- # from) then a wrong language catalog might have been loaded in the
- # previous step. It needs to be discarded.
- if en_selected and en_catalog_missing:
- t = {}
- else:
- locale_t = {}
- for path in paths:
- try:
- catalog = gettext_module.translation(domain, path, [locale])
- except IOError:
- catalog = None
- if catalog is not None:
- locale_t.update(catalog._catalog)
- if locale_t:
- t = locale_t
- src = [LibHead]
- plural = None
- if '' in t:
- for l in t[''].split('\n'):
- if l.startswith('Plural-Forms:'):
- plural = l.split(':',1)[1].strip()
- if plural is not None:
- # this should actually be a compiled function of a typical plural-form:
- # Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
- plural = [el.strip() for el in plural.split(';') if el.strip().startswith('plural=')][0].split('=',1)[1]
- src.append(PluralIdx % plural)
- else:
- src.append(SimplePlural)
- csrc = []
- pdict = {}
- for k, v in t.items():
- if k == '':
- continue
- if isinstance(k, basestring):
- csrc.append("catalog['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(v)))
- elif isinstance(k, tuple):
- if k[0] not in pdict:
- pdict[k[0]] = k[1]
- else:
- pdict[k[0]] = max(k[1], pdict[k[0]])
- csrc.append("catalog['%s'][%d] = '%s';\n" % (javascript_quote(k[0]), k[1], javascript_quote(v)))
- else:
- raise TypeError(k)
- csrc.sort()
- for k, v in pdict.items():
- src.append("catalog['%s'] = [%s];\n" % (javascript_quote(k), ','.join(["''"]*(v+1))))
- src.extend(csrc)
- src.append(LibFoot)
- src.append(InterPolate)
- src.append(LibFormatHead)
- src.append(get_formats())
- src.append(LibFormatFoot)
- src = ''.join(src)
- return http.HttpResponse(src, 'text/javascript')
-
diff --git a/parts/django/django/views/static.py b/parts/django/django/views/static.py
deleted file mode 100644
index fda3764..0000000
--- a/parts/django/django/views/static.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"""
-Views and functions for serving static files. These are only to be used
-during development, and SHOULD NOT be used in a production setting.
-"""
-
-import mimetypes
-import os
-import posixpath
-import re
-import stat
-import urllib
-from email.Utils import parsedate_tz, mktime_tz
-
-from django.template import loader
-from django.http import Http404, HttpResponse, HttpResponseRedirect, HttpResponseNotModified
-from django.template import Template, Context, TemplateDoesNotExist
-from django.utils.http import http_date
-
-def serve(request, path, document_root=None, show_indexes=False):
- """
- Serve static files below a given point in the directory structure.
-
- To use, put a URL pattern such as::
-
- (r'^(?P<path>.*)$', 'django.views.static.serve', {'document_root' : '/path/to/my/files/'})
-
- in your URLconf. You must provide the ``document_root`` param. You may
- also set ``show_indexes`` to ``True`` if you'd like to serve a basic index
- of the directory. This index view will use the template hardcoded below,
- but if you'd like to override it, you can create a template called
- ``static/directory_index.html``.
- """
-
- # Clean up given path to only allow serving files below document_root.
- path = posixpath.normpath(urllib.unquote(path))
- path = path.lstrip('/')
- newpath = ''
- for part in path.split('/'):
- if not part:
- # Strip empty path components.
- continue
- drive, part = os.path.splitdrive(part)
- head, part = os.path.split(part)
- if part in (os.curdir, os.pardir):
- # Strip '.' and '..' in path.
- continue
- newpath = os.path.join(newpath, part).replace('\\', '/')
- if newpath and path != newpath:
- return HttpResponseRedirect(newpath)
- fullpath = os.path.join(document_root, newpath)
- if os.path.isdir(fullpath):
- if show_indexes:
- return directory_index(newpath, fullpath)
- raise Http404("Directory indexes are not allowed here.")
- if not os.path.exists(fullpath):
- raise Http404('"%s" does not exist' % fullpath)
- # Respect the If-Modified-Since header.
- statobj = os.stat(fullpath)
- mimetype, encoding = mimetypes.guess_type(fullpath)
- mimetype = mimetype or 'application/octet-stream'
- if not was_modified_since(request.META.get('HTTP_IF_MODIFIED_SINCE'),
- statobj[stat.ST_MTIME], statobj[stat.ST_SIZE]):
- return HttpResponseNotModified(mimetype=mimetype)
- contents = open(fullpath, 'rb').read()
- response = HttpResponse(contents, mimetype=mimetype)
- response["Last-Modified"] = http_date(statobj[stat.ST_MTIME])
- response["Content-Length"] = len(contents)
- if encoding:
- response["Content-Encoding"] = encoding
- return response
-
-DEFAULT_DIRECTORY_INDEX_TEMPLATE = """
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <meta http-equiv="Content-Language" content="en-us" />
- <meta name="robots" content="NONE,NOARCHIVE" />
- <title>Index of {{ directory }}</title>
- </head>
- <body>
- <h1>Index of {{ directory }}</h1>
- <ul>
- {% ifnotequal directory "/" %}
- <li><a href="../">../</a></li>
- {% endifnotequal %}
- {% for f in file_list %}
- <li><a href="{{ f|urlencode }}">{{ f }}</a></li>
- {% endfor %}
- </ul>
- </body>
-</html>
-"""
-
-def directory_index(path, fullpath):
- try:
- t = loader.select_template(['static/directory_index.html',
- 'static/directory_index'])
- except TemplateDoesNotExist:
- t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE, name='Default directory index template')
- files = []
- for f in os.listdir(fullpath):
- if not f.startswith('.'):
- if os.path.isdir(os.path.join(fullpath, f)):
- f += '/'
- files.append(f)
- c = Context({
- 'directory' : path + '/',
- 'file_list' : files,
- })
- return HttpResponse(t.render(c))
-
-def was_modified_since(header=None, mtime=0, size=0):
- """
- Was something modified since the user last downloaded it?
-
- header
- This is the value of the If-Modified-Since header. If this is None,
- I'll just return True.
-
- mtime
- This is the modification time of the item we're talking about.
-
- size
- This is the size of the item we're talking about.
- """
- try:
- if header is None:
- raise ValueError
- matches = re.match(r"^([^;]+)(; length=([0-9]+))?$", header,
- re.IGNORECASE)
- header_date = parsedate_tz(matches.group(1))
- if header_date is None:
- raise ValueError
- header_mtime = mktime_tz(header_date)
- header_len = matches.group(3)
- if header_len and int(header_len) != size:
- raise ValueError
- if mtime > header_mtime:
- raise ValueError
- except (AttributeError, ValueError, OverflowError):
- return True
- return False
diff --git a/parts/django/docs/Makefile b/parts/django/docs/Makefile
deleted file mode 100644
index 9301315..0000000
--- a/parts/django/docs/Makefile
+++ /dev/null
@@ -1,130 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-PAPER =
-BUILDDIR = _build
-
-# Internal variables.
-PAPEROPT_a4 = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
-
-help:
- @echo "Please use \`make <target>' where <target> is one of"
- @echo " html to make standalone HTML files"
- @echo " dirhtml to make HTML files named index.html in directories"
- @echo " singlehtml to make a single large HTML file"
- @echo " pickle to make pickle files"
- @echo " json to make JSON files"
- @echo " htmlhelp to make HTML files and a HTML help project"
- @echo " qthelp to make HTML files and a qthelp project"
- @echo " devhelp to make HTML files and a Devhelp project"
- @echo " epub to make an epub"
- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
- @echo " text to make text files"
- @echo " man to make manual pages"
- @echo " changes to make an overview of all changed/added/deprecated items"
- @echo " linkcheck to check all external links for integrity"
- @echo " doctest to run all doctests embedded in the documentation (if enabled)"
-
-clean:
- -rm -rf $(BUILDDIR)/*
-
-html:
- $(SPHINXBUILD) -b djangohtml $(ALLSPHINXOPTS) $(BUILDDIR)/html
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
- @echo
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
- @echo
- @echo "Build finished; now you can process the pickle files."
-
-json:
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
- @echo
- @echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
- @echo
- @echo "Build finished; now you can run "qcollectiongenerator" with the" \
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/django.qhcp"
- @echo "To view the help file:"
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/django.qhc"
-
-devhelp:
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
- @echo
- @echo "Build finished."
- @echo "To view the help file:"
- @echo "# mkdir -p $$HOME/.local/share/devhelp/django"
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/django"
- @echo "# devhelp"
-
-epub:
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
- @echo
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
- "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through pdflatex..."
- make -C $(BUILDDIR)/latex all-pdf
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
- @echo
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
- @echo
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-changes:
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
- @echo
- @echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
- @echo
- @echo "Link check complete; look for any errors in the above output " \
- "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
- @echo "Testing of doctests in the sources finished, look at the " \
- "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/parts/django/docs/_ext/applyxrefs.py b/parts/django/docs/_ext/applyxrefs.py
deleted file mode 100644
index 3809088..0000000
--- a/parts/django/docs/_ext/applyxrefs.py
+++ /dev/null
@@ -1,88 +0,0 @@
-"""Adds xref targets to the top of files."""
-
-import sys
-import os
-
-testing = False
-
-DONT_TOUCH = (
- './index.txt',
- )
-
-def target_name(fn):
- if fn.endswith('.txt'):
- fn = fn[:-4]
- return '_' + fn.lstrip('./').replace('/', '-')
-
-def process_file(fn, lines):
- lines.insert(0, '\n')
- lines.insert(0, '.. %s:\n' % target_name(fn))
- try:
- f = open(fn, 'w')
- except IOError:
- print("Can't open %s for writing. Not touching it." % fn)
- return
- try:
- f.writelines(lines)
- except IOError:
- print("Can't write to %s. Not touching it." % fn)
- finally:
- f.close()
-
-def has_target(fn):
- try:
- f = open(fn, 'r')
- except IOError:
- print("Can't open %s. Not touching it." % fn)
- return (True, None)
- readok = True
- try:
- lines = f.readlines()
- except IOError:
- print("Can't read %s. Not touching it." % fn)
- readok = False
- finally:
- f.close()
- if not readok:
- return (True, None)
-
- #print fn, len(lines)
- if len(lines) < 1:
- print("Not touching empty file %s." % fn)
- return (True, None)
- if lines[0].startswith('.. _'):
- return (True, None)
- return (False, lines)
-
-def main(argv=None):
- if argv is None:
- argv = sys.argv
-
- if len(argv) == 1:
- argv.extend('.')
-
- files = []
- for root in argv[1:]:
- for (dirpath, dirnames, filenames) in os.walk(root):
- files.extend([(dirpath, f) for f in filenames])
- files.sort()
- files = [os.path.join(p, fn) for p, fn in files if fn.endswith('.txt')]
- #print files
-
- for fn in files:
- if fn in DONT_TOUCH:
- print("Skipping blacklisted file %s." % fn)
- continue
-
- target_found, lines = has_target(fn)
- if not target_found:
- if testing:
- print '%s: %s' % (fn, lines[0]),
- else:
- print "Adding xref to %s" % fn
- process_file(fn, lines)
- else:
- print "Skipping %s: already has a xref" % fn
-
-if __name__ == '__main__':
- sys.exit(main()) \ No newline at end of file
diff --git a/parts/django/docs/_ext/djangodocs.py b/parts/django/docs/_ext/djangodocs.py
deleted file mode 100644
index 8c4b511..0000000
--- a/parts/django/docs/_ext/djangodocs.py
+++ /dev/null
@@ -1,265 +0,0 @@
-"""
-Sphinx plugins for Django documentation.
-"""
-import os
-import re
-
-from docutils import nodes, transforms
-try:
- import json
-except ImportError:
- try:
- import simplejson as json
- except ImportError:
- try:
- from django.utils import simplejson as json
- except ImportError:
- json = None
-
-from sphinx import addnodes, roles
-from sphinx.builders.html import StandaloneHTMLBuilder
-from sphinx.writers.html import SmartyPantsHTMLTranslator
-from sphinx.util.console import bold
-from sphinx.util.compat import Directive
-
-# RE for option descriptions without a '--' prefix
-simple_option_desc_re = re.compile(
- r'([-_a-zA-Z0-9]+)(\s*.*?)(?=,\s+(?:/|-|--)|$)')
-
-def setup(app):
- app.add_crossref_type(
- directivename = "setting",
- rolename = "setting",
- indextemplate = "pair: %s; setting",
- )
- app.add_crossref_type(
- directivename = "templatetag",
- rolename = "ttag",
- indextemplate = "pair: %s; template tag"
- )
- app.add_crossref_type(
- directivename = "templatefilter",
- rolename = "tfilter",
- indextemplate = "pair: %s; template filter"
- )
- app.add_crossref_type(
- directivename = "fieldlookup",
- rolename = "lookup",
- indextemplate = "pair: %s; field lookup type",
- )
- app.add_description_unit(
- directivename = "django-admin",
- rolename = "djadmin",
- indextemplate = "pair: %s; django-admin command",
- parse_node = parse_django_admin_node,
- )
- app.add_description_unit(
- directivename = "django-admin-option",
- rolename = "djadminopt",
- indextemplate = "pair: %s; django-admin command-line option",
- parse_node = parse_django_adminopt_node,
- )
- app.add_config_value('django_next_version', '0.0', True)
- app.add_directive('versionadded', VersionDirective)
- app.add_directive('versionchanged', VersionDirective)
- app.add_transform(SuppressBlockquotes)
- app.add_builder(DjangoStandaloneHTMLBuilder)
-
-
-class VersionDirective(Directive):
- has_content = True
- required_arguments = 1
- optional_arguments = 1
- final_argument_whitespace = True
- option_spec = {}
-
- def run(self):
- env = self.state.document.settings.env
- arg0 = self.arguments[0]
- is_nextversion = env.config.django_next_version == arg0
- ret = []
- node = addnodes.versionmodified()
- ret.append(node)
- if not is_nextversion:
- if len(self.arguments) == 1:
- linktext = 'Please, see the release notes </releases/%s>' % (arg0)
- try:
- xrefs = roles.XRefRole()('doc', linktext, linktext, self.lineno, self.state) # Sphinx >= 1.0
- except AttributeError:
- xrefs = roles.xfileref_role('doc', linktext, linktext, self.lineno, self.state) # Sphinx < 1.0
- node.extend(xrefs[0])
- node['version'] = arg0
- else:
- node['version'] = "Development version"
- node['type'] = self.name
- if len(self.arguments) == 2:
- inodes, messages = self.state.inline_text(self.arguments[1], self.lineno+1)
- node.extend(inodes)
- if self.content:
- self.state.nested_parse(self.content, self.content_offset, node)
- ret = ret + messages
- env.note_versionchange(node['type'], node['version'], node, self.lineno)
- return ret
-
-
-class SuppressBlockquotes(transforms.Transform):
- """
- Remove the default blockquotes that encase indented list, tables, etc.
- """
- default_priority = 300
-
- suppress_blockquote_child_nodes = (
- nodes.bullet_list,
- nodes.enumerated_list,
- nodes.definition_list,
- nodes.literal_block,
- nodes.doctest_block,
- nodes.line_block,
- nodes.table
- )
-
- def apply(self):
- for node in self.document.traverse(nodes.block_quote):
- if len(node.children) == 1 and isinstance(node.children[0], self.suppress_blockquote_child_nodes):
- node.replace_self(node.children[0])
-
-class DjangoHTMLTranslator(SmartyPantsHTMLTranslator):
- """
- Django-specific reST to HTML tweaks.
- """
-
- # Don't use border=1, which docutils does by default.
- def visit_table(self, node):
- self.body.append(self.starttag(node, 'table', CLASS='docutils'))
-
- # <big>? Really?
- def visit_desc_parameterlist(self, node):
- self.body.append('(')
- self.first_param = 1
-
- def depart_desc_parameterlist(self, node):
- self.body.append(')')
-
- #
- # Don't apply smartypants to literal blocks
- #
- def visit_literal_block(self, node):
- self.no_smarty += 1
- SmartyPantsHTMLTranslator.visit_literal_block(self, node)
-
- def depart_literal_block(self, node):
- SmartyPantsHTMLTranslator.depart_literal_block(self, node)
- self.no_smarty -= 1
-
- #
- # Turn the "new in version" stuff (versionadded/versionchanged) into a
- # better callout -- the Sphinx default is just a little span,
- # which is a bit less obvious that I'd like.
- #
- # FIXME: these messages are all hardcoded in English. We need to change
- # that to accomodate other language docs, but I can't work out how to make
- # that work.
- #
- version_text = {
- 'deprecated': 'Deprecated in Django %s',
- 'versionchanged': 'Changed in Django %s',
- 'versionadded': 'New in Django %s',
- }
-
- def visit_versionmodified(self, node):
- self.body.append(
- self.starttag(node, 'div', CLASS=node['type'])
- )
- title = "%s%s" % (
- self.version_text[node['type']] % node['version'],
- len(node) and ":" or "."
- )
- self.body.append('<span class="title">%s</span> ' % title)
-
- def depart_versionmodified(self, node):
- self.body.append("</div>\n")
-
- # Give each section a unique ID -- nice for custom CSS hooks
- def visit_section(self, node):
- old_ids = node.get('ids', [])
- node['ids'] = ['s-' + i for i in old_ids]
- node['ids'].extend(old_ids)
- SmartyPantsHTMLTranslator.visit_section(self, node)
- node['ids'] = old_ids
-
-def parse_django_admin_node(env, sig, signode):
- command = sig.split(' ')[0]
- env._django_curr_admin_command = command
- title = "django-admin.py %s" % sig
- signode += addnodes.desc_name(title, title)
- return sig
-
-def parse_django_adminopt_node(env, sig, signode):
- """A copy of sphinx.directives.CmdoptionDesc.parse_signature()"""
- try:
- from sphinx.domains.std import option_desc_re # Sphinx >= 1.0
- except ImportError:
- from sphinx.directives.desc import option_desc_re # Sphinx < 1.0
- count = 0
- firstname = ''
- for m in option_desc_re.finditer(sig):
- optname, args = m.groups()
- if count:
- signode += addnodes.desc_addname(', ', ', ')
- signode += addnodes.desc_name(optname, optname)
- signode += addnodes.desc_addname(args, args)
- if not count:
- firstname = optname
- count += 1
- if not count:
- for m in simple_option_desc_re.finditer(sig):
- optname, args = m.groups()
- if count:
- signode += addnodes.desc_addname(', ', ', ')
- signode += addnodes.desc_name(optname, optname)
- signode += addnodes.desc_addname(args, args)
- if not count:
- firstname = optname
- count += 1
- if not firstname:
- raise ValueError
- return firstname
-
-
-class DjangoStandaloneHTMLBuilder(StandaloneHTMLBuilder):
- """
- Subclass to add some extra things we need.
- """
-
- name = 'djangohtml'
-
- def finish(self):
- super(DjangoStandaloneHTMLBuilder, self).finish()
- if json is None:
- self.warn("cannot create templatebuiltins.js due to missing simplejson dependency")
- return
- self.info(bold("writing templatebuiltins.js..."))
- try:
- # Sphinx < 1.0
- xrefs = self.env.reftargets.items()
- templatebuiltins = dict([('ttags', [n for ((t,n),(l,a)) in xrefs
- if t == 'ttag' and
- l == 'ref/templates/builtins']),
- ('tfilters', [n for ((t,n),(l,a)) in xrefs
- if t == 'tfilter' and
- l == 'ref/templates/builtins'])])
- except AttributeError:
- # Sphinx >= 1.0
- xrefs = self.env.domaindata["std"]["objects"]
- templatebuiltins = dict([('ttags', [n for ((t,n), (l,a)) in xrefs.items()
- if t == 'templatetag' and
- l == 'ref/templates/builtins' ]),
- ('tfilters', [n for ((t,n), (l,a)) in xrefs.items()
- if t == 'templatefilter' and
- t == 'ref/templates/builtins'])])
- outfilename = os.path.join(self.outdir, "templatebuiltins.js")
- f = open(outfilename, 'wb')
- f.write('var django_template_builtins = ')
- json.dump(templatebuiltins, f)
- f.write(';\n')
- f.close();
diff --git a/parts/django/docs/_ext/literals_to_xrefs.py b/parts/django/docs/_ext/literals_to_xrefs.py
deleted file mode 100644
index 569193c..0000000
--- a/parts/django/docs/_ext/literals_to_xrefs.py
+++ /dev/null
@@ -1,171 +0,0 @@
-"""
-Runs through a reST file looking for old-style literals, and helps replace them
-with new-style references.
-"""
-
-import re
-import sys
-import shelve
-
-refre = re.compile(r'``([^`\s]+?)``')
-
-ROLES = (
- 'attr',
- 'class',
- "djadmin",
- 'data',
- 'exc',
- 'file',
- 'func',
- 'lookup',
- 'meth',
- 'mod' ,
- "djadminopt",
- "ref",
- "setting",
- "term",
- "tfilter",
- "ttag",
-
- # special
- "skip"
-)
-
-ALWAYS_SKIP = [
- "NULL",
- "True",
- "False",
-]
-
-def fixliterals(fname):
- data = open(fname).read()
-
- last = 0
- new = []
- storage = shelve.open("/tmp/literals_to_xref.shelve")
- lastvalues = storage.get("lastvalues", {})
-
- for m in refre.finditer(data):
-
- new.append(data[last:m.start()])
- last = m.end()
-
- line_start = data.rfind("\n", 0, m.start())
- line_end = data.find("\n", m.end())
- prev_start = data.rfind("\n", 0, line_start)
- next_end = data.find("\n", line_end + 1)
-
- # Skip always-skip stuff
- if m.group(1) in ALWAYS_SKIP:
- new.append(m.group(0))
- continue
-
- # skip when the next line is a title
- next_line = data[m.end():next_end].strip()
- if next_line[0] in "!-/:-@[-`{-~" and all(c == next_line[0] for c in next_line):
- new.append(m.group(0))
- continue
-
- sys.stdout.write("\n"+"-"*80+"\n")
- sys.stdout.write(data[prev_start+1:m.start()])
- sys.stdout.write(colorize(m.group(0), fg="red"))
- sys.stdout.write(data[m.end():next_end])
- sys.stdout.write("\n\n")
-
- replace_type = None
- while replace_type is None:
- replace_type = raw_input(
- colorize("Replace role: ", fg="yellow")
- ).strip().lower()
- if replace_type and replace_type not in ROLES:
- replace_type = None
-
- if replace_type == "":
- new.append(m.group(0))
- continue
-
- if replace_type == "skip":
- new.append(m.group(0))
- ALWAYS_SKIP.append(m.group(1))
- continue
-
- default = lastvalues.get(m.group(1), m.group(1))
- if default.endswith("()") and replace_type in ("class", "func", "meth"):
- default = default[:-2]
- replace_value = raw_input(
- colorize("Text <target> [", fg="yellow") + default + colorize("]: ", fg="yellow")
- ).strip()
- if not replace_value:
- replace_value = default
- new.append(":%s:`%s`" % (replace_type, replace_value))
- lastvalues[m.group(1)] = replace_value
-
- new.append(data[last:])
- open(fname, "w").write("".join(new))
-
- storage["lastvalues"] = lastvalues
- storage.close()
-
-#
-# The following is taken from django.utils.termcolors and is copied here to
-# avoid the dependancy.
-#
-
-
-def colorize(text='', opts=(), **kwargs):
- """
- Returns your text, enclosed in ANSI graphics codes.
-
- Depends on the keyword arguments 'fg' and 'bg', and the contents of
- the opts tuple/list.
-
- Returns the RESET code if no parameters are given.
-
- Valid colors:
- 'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'
-
- Valid options:
- 'bold'
- 'underscore'
- 'blink'
- 'reverse'
- 'conceal'
- 'noreset' - string will not be auto-terminated with the RESET code
-
- Examples:
- colorize('hello', fg='red', bg='blue', opts=('blink',))
- colorize()
- colorize('goodbye', opts=('underscore',))
- print colorize('first line', fg='red', opts=('noreset',))
- print 'this should be red too'
- print colorize('and so should this')
- print 'this should not be red'
- """
- color_names = ('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white')
- foreground = dict([(color_names[x], '3%s' % x) for x in range(8)])
- background = dict([(color_names[x], '4%s' % x) for x in range(8)])
-
- RESET = '0'
- opt_dict = {'bold': '1', 'underscore': '4', 'blink': '5', 'reverse': '7', 'conceal': '8'}
-
- text = str(text)
- code_list = []
- if text == '' and len(opts) == 1 and opts[0] == 'reset':
- return '\x1b[%sm' % RESET
- for k, v in kwargs.iteritems():
- if k == 'fg':
- code_list.append(foreground[v])
- elif k == 'bg':
- code_list.append(background[v])
- for o in opts:
- if o in opt_dict:
- code_list.append(opt_dict[o])
- if 'noreset' not in opts:
- text = text + '\x1b[%sm' % RESET
- return ('\x1b[%sm' % ';'.join(code_list)) + text
-
-if __name__ == '__main__':
- try:
- fixliterals(sys.argv[1])
- except (KeyboardInterrupt, SystemExit):
- print \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/genindex.html b/parts/django/docs/_theme/djangodocs/genindex.html
deleted file mode 100644
index 486994a..0000000
--- a/parts/django/docs/_theme/djangodocs/genindex.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{% extends "basic/genindex.html" %}
-
-{% block bodyclass %}{% endblock %}
-{% block sidebarwrapper %}{% endblock %} \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/layout.html b/parts/django/docs/_theme/djangodocs/layout.html
deleted file mode 100644
index ef91dd7..0000000
--- a/parts/django/docs/_theme/djangodocs/layout.html
+++ /dev/null
@@ -1,124 +0,0 @@
-{% extends "basic/layout.html" %}
-
-{%- macro secondnav() %}
- {%- if prev %}
- &laquo; <a href="{{ prev.link|e }}" title="{{ prev.title|e }}">previous</a>
- {{ reldelim2 }}
- {%- endif %}
- {%- if parents %}
- <a href="{{ parents.0.link|e }}" title="{{ parents.0.title|e }}" accesskey="U">up</a>
- {%- else %}
- <a title="{{ docstitle }}" href="{{ pathto('index') }}" accesskey="U">up</a>
- {%- endif %}
- {%- if next %}
- {{ reldelim2 }}
- <a href="{{ next.link|e }}" title="{{ next.title|e }}">next</a> &raquo;
- {%- endif %}
-{%- endmacro %}
-
-{% block extrahead %}
-{{ super() }}
-<script type="text/javascript" src="{{ pathto('templatebuiltins.js', 1) }}"></script>
-<script type="text/javascript">
-(function($) {
- if (!django_template_builtins) {
- // templatebuiltins.js missing, do nothing.
- return;
- }
- $(document).ready(function() {
- // Hyperlink Django template tags and filters
- var base = "{{ pathto('ref/templates/builtins') }}";
- if (base == "#") {
- // Special case for builtins.html itself
- base = "";
- }
- // Tags are keywords, class '.k'
- $("div.highlight\\-html\\+django span.k").each(function(i, elem) {
- var tagname = $(elem).text();
- if ($.inArray(tagname, django_template_builtins.ttags) != -1) {
- var fragment = tagname.replace(/_/, '-');
- $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>");
- }
- });
- // Filters are functions, class '.nf'
- $("div.highlight\\-html\\+django span.nf").each(function(i, elem) {
- var filtername = $(elem).text();
- if ($.inArray(filtername, django_template_builtins.tfilters) != -1) {
- var fragment = filtername.replace(/_/, '-');
- $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>");
- }
- });
- });
-})(jQuery);
-</script>
-{% endblock %}
-
-{% block document %}
- <div id="custom-doc" class="{% block bodyclass %}{{ 'yui-t6' if pagename != 'index' else '' }}{% endblock %}">
- <div id="hd">
- <h1><a href="{{ pathto('index') }}">{{ docstitle }}</a></h1>
- <div id="global-nav">
- <a title="Home page" href="{{ pathto('index') }}">Home</a> {{ reldelim2 }}
- <a title="Table of contents" href="{{ pathto('contents') }}">Table of contents</a> {{ reldelim2 }}
- <a title="Global index" href="{{ pathto('genindex') }}">Index</a> {{ reldelim2 }}
- <a title="Module index" href="{{ pathto('py-modindex') }}">Modules</a>
- </div>
- <div class="nav">{{ secondnav() }}</div>
- </div>
-
- <div id="bd">
- <div id="yui-main">
- <div class="yui-b">
- <div class="yui-g" id="{{ pagename|replace('/', '-') }}">
- {% block body %}{% endblock %}
- </div>
- </div>
- </div>
- {% block sidebarwrapper %}
- {% if pagename != 'index' %}
- <div class="yui-b" id="sidebar">
- {{ sidebar() }}
- {%- if last_updated %}
- <h3>Last update:</h3>
- <p class="topless">{{ last_updated }}</p>
- {%- endif %}
- </div>
- {% endif %}
- {% endblock %}
- </div>
-
- <div id="ft">
- <div class="nav">{{ secondnav() }}</div>
- </div>
- </div>
-{% endblock %}
-
-{% block sidebarrel %}
- <h3>Browse</h3>
- <ul>
- {% if prev %}
- <li>Prev: <a href="{{ prev.link }}">{{ prev.title }}</a></li>
- {% endif %}
- {% if next %}
- <li>Next: <a href="{{ next.link }}">{{ next.title }}</a></li>
- {% endif %}
- </ul>
- <h3>You are here:</h3>
- <ul>
- <li>
- <a href="{{ pathto('index') }}">{{ docstitle }}</a>
- {% for p in parents %}
- <ul><li><a href="{{ p.link }}">{{ p.title }}</a>
- {% endfor %}
- <ul><li>{{ title }}</li></ul>
- {% for p in parents %}</li></ul>{% endfor %}
- </li>
- </ul>
-{% endblock %}
-
-{# Empty some default blocks out #}
-{% block relbar1 %}{% endblock %}
-{% block relbar2 %}{% endblock %}
-{% block sidebar1 %}{% endblock %}
-{% block sidebar2 %}{% endblock %}
-{% block footer %}{% endblock %} \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/modindex.html b/parts/django/docs/_theme/djangodocs/modindex.html
deleted file mode 100644
index 59a5cb3..0000000
--- a/parts/django/docs/_theme/djangodocs/modindex.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{% extends "basic/modindex.html" %}
-{% block bodyclass %}{% endblock %}
-{% block sidebarwrapper %}{% endblock %} \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/search.html b/parts/django/docs/_theme/djangodocs/search.html
deleted file mode 100644
index 943478c..0000000
--- a/parts/django/docs/_theme/djangodocs/search.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{% extends "basic/search.html" %}
-{% block bodyclass %}{% endblock %}
-{% block sidebarwrapper %}{% endblock %} \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/static/default.css b/parts/django/docs/_theme/djangodocs/static/default.css
deleted file mode 100644
index 9dc69ee..0000000
--- a/parts/django/docs/_theme/djangodocs/static/default.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@import url(reset-fonts-grids.css);
-@import url(djangodocs.css);
-@import url(homepage.css); \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/static/djangodocs.css b/parts/django/docs/_theme/djangodocs/static/djangodocs.css
deleted file mode 100644
index 4adb838..0000000
--- a/parts/django/docs/_theme/djangodocs/static/djangodocs.css
+++ /dev/null
@@ -1,135 +0,0 @@
-/*** setup ***/
-html { background:#092e20;}
-body { font:12px/1.5 Verdana,sans-serif; background:#092e20; color: white;}
-#custom-doc { width:76.54em;*width:74.69em;min-width:995px; max-width:100em; margin:auto; text-align:left; padding-top:16px; margin-top:0;}
-#hd { padding: 4px 0 12px 0; }
-#bd { background:#234F32; }
-#ft { color:#487858; font-size:90%; padding-bottom: 2em; }
-
-/*** links ***/
-a {text-decoration: none;}
-a img {border: none;}
-a:link, a:visited { color:#ffc757; }
-#bd a:link, #bd a:visited { color:#ab5603; text-decoration:underline; }
-#bd #sidebar a:link, #bd #sidebar a:visited { color:#ffc757; text-decoration:none; }
-a:hover { color:#ffe761; }
-#bd a:hover { background-color:#E0FFB8; color:#234f32; text-decoration:none; }
-#bd #sidebar a:hover { color:#ffe761; background:none; }
-h2 a, h3 a, h4 a { text-decoration:none !important; }
-a.reference em { font-style: normal; }
-
-/*** sidebar ***/
-#sidebar div.sphinxsidebarwrapper { font-size:92%; margin-right: 14px; }
-#sidebar h3, #sidebar h4 { color: white; font-size: 125%; }
-#sidebar a { color: white; }
-#sidebar ul ul { margin-top:0; margin-bottom:0; }
-#sidebar li { margin-top: 0.2em; margin-bottom: 0.2em; }
-
-/*** nav ***/
-div.nav { margin: 0; font-size: 11px; text-align: right; color: #487858;}
-#hd div.nav { margin-top: -27px; }
-#ft div.nav { margin-bottom: -18px; }
-#hd h1 a { color: white; }
-#global-nav { position:absolute; top:5px; margin-left: -5px; padding:7px 0; color:#263E2B; }
-#global-nav a:link, #global-nav a:visited {color:#487858;}
-#global-nav a {padding:0 4px;}
-#global-nav a.about {padding-left:0;}
-#global-nav:hover {color:#fff;}
-#global-nav:hover a:link, #global-nav:hover a:visited { color:#ffc757; }
-
-/*** content ***/
-#yui-main div.yui-b { position: relative; }
-#yui-main div.yui-b { margin: 0 0 0 20px; background: white; color: black; padding: 0.3em 2em 1em 2em; }
-
-/*** basic styles ***/
-dd { margin-left:15px; }
-h1,h2,h3,h4 { margin-top:1em; font-family:"Trebuchet MS",sans-serif; font-weight:normal; }
-h1 { font-size:218%; margin-top:0.6em; margin-bottom:.4em; line-height:1.1em; }
-h2 { font-size:175%; margin-bottom:.6em; line-height:1.2em; color:#092e20; }
-h3 { font-size:150%; font-weight:bold; margin-bottom:.2em; color:#487858; }
-h4 { font-size:125%; font-weight:bold; margin-top:1.5em; margin-bottom:3px; }
-div.figure { text-align: center; }
-div.figure p.caption { font-size:1em; margin-top:0; margin-bottom:1.5em; color: #555;}
-hr { color:#ccc; background-color:#ccc; height:1px; border:0; }
-p, ul, dl { margin-top:.6em; margin-bottom:1em; padding-bottom: 0.1em;}
-#yui-main div.yui-b img { max-width: 50em; margin-left: auto; margin-right: auto; display: block; }
-caption { font-size:1em; font-weight:bold; margin-top:0.5em; margin-bottom:0.5em; margin-left: 2px; text-align: center; }
-blockquote { padding: 0 1em; margin: 1em 0; font:125%/1.2em "Trebuchet MS", sans-serif; color:#234f32; border-left:2px solid #94da3a; }
-strong { font-weight: bold; }
-em { font-style: italic; }
-ins { font-weight: bold; text-decoration: none; }
-
-/*** lists ***/
-ul { padding-left:30px; }
-ol { padding-left:30px; }
-ol.arabic li { list-style-type: decimal; }
-ul li { list-style-type:square; margin-bottom:.4em; }
-ol li { margin-bottom: .4em; }
-ul ul { padding-left:1.2em; }
-ul ul ul { padding-left:1em; }
-ul.linklist, ul.toc { padding-left:0; }
-ul.toc ul { margin-left:.6em; }
-ul.toc ul li { list-style-type:square; }
-ul.toc ul ul li { list-style-type:disc; }
-ul.linklist li, ul.toc li { list-style-type:none; }
-dt { font-weight:bold; margin-top:.5em; font-size:1.1em; }
-dd { margin-bottom:.8em; }
-ol.toc { margin-bottom: 2em; }
-ol.toc li { font-size:125%; padding: .5em; line-height:1.2em; clear: right; }
-ol.toc li.b { background-color: #E0FFB8; }
-ol.toc li a:hover { background-color: transparent !important; text-decoration: underline !important; }
-ol.toc span.release-date { color:#487858; float: right; font-size: 85%; padding-right: .5em; }
-ol.toc span.comment-count { font-size: 75%; color: #999; }
-
-/*** tables ***/
-table { color:#000; margin-bottom: 1em; width: 100%; }
-table.docutils td p { margin-top:0; margin-bottom:.5em; }
-table.docutils td, table.docutils th { border-bottom:1px solid #dfdfdf; padding:4px 2px;}
-table.docutils thead th { border-bottom:2px solid #dfdfdf; text-align:left; font-weight: bold; white-space: nowrap; }
-table.docutils thead th p { margin: 0; padding: 0; }
-table.docutils { border-collapse:collapse; }
-
-/*** code blocks ***/
-.literal { white-space:nowrap; }
-.literal { color:#234f32; }
-#sidebar .literal { color:white; background:transparent; font-size:11px; }
-h4 .literal { color: #234f32; font-size: 13px; }
-pre { font-size:small; background:#E0FFB8; border:1px solid #94da3a; border-width:1px 0; margin: 1em 0; padding: .3em .4em; overflow: hidden; line-height: 1.3em;}
-dt .literal, table .literal { background:none; }
-#bd a.reference { text-decoration: none; }
-#bd a.reference tt.literal { border-bottom: 1px #234f32 dotted; }
-
-/* Restore colors of pygments hyperlinked code */
-#bd .highlight .k a:link, #bd .highlight .k a:visited { color: #000000; text-decoration: none; border-bottom: 1px dotted #000000; }
-#bd .highlight .nf a:link, #bd .highlight .nf a:visited { color: #990000; text-decoration: none; border-bottom: 1px dotted #990000; }
-
-
-/*** notes & admonitions ***/
-.note, .admonition { padding:.8em 1em .8em; margin: 1em 0; border:1px solid #94da3a; }
-.admonition-title { font-weight:bold; margin-top:0 !important; margin-bottom:0 !important;}
-.admonition .last { margin-bottom:0 !important; }
-.note, .admonition { padding-left:65px; background:url(docicons-note.png) .8em .8em no-repeat;}
-div.admonition-philosophy { padding-left:65px; background:url(docicons-philosophy.png) .8em .8em no-repeat;}
-div.admonition-behind-the-scenes { padding-left:65px; background:url(docicons-behindscenes.png) .8em .8em no-repeat;}
-
-/*** versoinadded/changes ***/
-div.versionadded, div.versionchanged { }
-div.versionadded span.title, div.versionchanged span.title { font-weight: bold; }
-
-/*** p-links ***/
-a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; visibility: hidden; }
-h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; }
-
-/*** index ***/
-table.indextable td { text-align: left; vertical-align: top;}
-table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; }
-table.indextable tr.pcap { height: 10px; }
-table.indextable tr.cap { margin-top: 10px; background-color: #f2f2f2;}
-
-/*** page-specific overrides ***/
-div#contents ul { margin-bottom: 0;}
-div#contents ul li { margin-bottom: 0;}
-div#contents ul ul li { margin-top: 0.3em;}
-
-/*** IE hacks ***/
-* pre { width: 100%; }
diff --git a/parts/django/docs/_theme/djangodocs/static/docicons-behindscenes.png b/parts/django/docs/_theme/djangodocs/static/docicons-behindscenes.png
deleted file mode 100644
index dc901bc..0000000
--- a/parts/django/docs/_theme/djangodocs/static/docicons-behindscenes.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/_theme/djangodocs/static/docicons-note.png b/parts/django/docs/_theme/djangodocs/static/docicons-note.png
deleted file mode 100644
index 357545f..0000000
--- a/parts/django/docs/_theme/djangodocs/static/docicons-note.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/_theme/djangodocs/static/docicons-philosophy.png b/parts/django/docs/_theme/djangodocs/static/docicons-philosophy.png
deleted file mode 100644
index 09f16c7..0000000
--- a/parts/django/docs/_theme/djangodocs/static/docicons-philosophy.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/_theme/djangodocs/static/homepage.css b/parts/django/docs/_theme/djangodocs/static/homepage.css
deleted file mode 100644
index 276c547..0000000
--- a/parts/django/docs/_theme/djangodocs/static/homepage.css
+++ /dev/null
@@ -1,22 +0,0 @@
-#index p.rubric { font-size:150%; font-weight:normal; margin-bottom:.2em; color:#487858; }
-
-#index div.section dt { font-weight: normal; }
-
-#index #s-getting-help { float: right; width: 35em; background: #E1ECE2; padding: 1em; margin: 2em 0 2em 2em; }
-#index #s-getting-help h2 { margin: 0; }
-
-#index #s-django-documentation div.section div.section h3 { margin: 0; }
-#index #s-django-documentation div.section div.section { background: #E1ECE2; padding: 1em; margin: 2em 0 2em 40.3em; }
-#index #s-django-documentation div.section div.section a.reference { white-space: nowrap; }
-
-#index #s-using-django dl,
-#index #s-add-on-contrib-applications dl,
-#index #s-solving-specific-problems dl,
-#index #s-reference dl
- { float: left; width: 41em; }
-
-#index #s-add-on-contrib-applications,
-#index #s-solving-specific-problems,
-#index #s-reference,
-#index #s-and-all-the-rest
- { clear: left; } \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/static/reset-fonts-grids.css b/parts/django/docs/_theme/djangodocs/static/reset-fonts-grids.css
deleted file mode 100644
index f5238d7..0000000
--- a/parts/django/docs/_theme/djangodocs/static/reset-fonts-grids.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.5.1
-*/
-html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;font-variant:normal;}sup {vertical-align:text-top;}sub {vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}body {font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
-body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}s .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;} \ No newline at end of file
diff --git a/parts/django/docs/_theme/djangodocs/theme.conf b/parts/django/docs/_theme/djangodocs/theme.conf
deleted file mode 100644
index be43c72..0000000
--- a/parts/django/docs/_theme/djangodocs/theme.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-[theme]
-inherit = basic
-stylesheet = default.css
-pygments_style = trac
diff --git a/parts/django/docs/conf.py b/parts/django/docs/conf.py
deleted file mode 100644
index ac6aed1..0000000
--- a/parts/django/docs/conf.py
+++ /dev/null
@@ -1,269 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Django documentation build configuration file, created by
-# sphinx-quickstart on Thu Mar 27 09:06:53 2008.
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# The contents of this file are pickled, so don't put values in the namespace
-# that aren't pickleable (module imports are okay, they're removed automatically).
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys
-import os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext")))
-
-# -- General configuration -----------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ["djangodocs"]
-
-# Add any paths that contain templates here, relative to this directory.
-# templates_path = []
-
-# The suffix of source filenames.
-source_suffix = '.txt'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'contents'
-
-# General substitutions.
-project = 'Django'
-copyright = 'Django Software Foundation and contributors'
-
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '1.2'
-# The full version, including alpha/beta/rc tags.
-release = version
-# The next version to be released
-django_next_version = '1.3'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ['_build']
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-add_module_names = False
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'trac'
-
-# Sphinx will recurse into subversion configuration folders and try to read
-# any document file within. These should be ignored.
-# Note: exclude_dirnames is new in Sphinx 0.5
-exclude_dirnames = ['.svn']
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = "djangodocs"
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = ["_theme"]
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ["_static"]
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-html_use_smartypants = True
-
-# HTML translator class for the builder
-html_translator_class = "djangodocs.DjangoHTMLTranslator"
-
-# Content template for the index page.
-#html_index = ''
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'Djangodoc'
-
-modindex_common_prefix = ["django."]
-
-
-# -- Options for LaTeX output --------------------------------------------------
-
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
-
-# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, document class [howto/manual]).
-#latex_documents = []
-latex_documents = [
- ('contents', 'django.tex', u'Django Documentation',
- u'Django Software Foundation', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output --------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- ('contents', 'django', 'Django Documentation', ['Django Software Foundation'], 1)
-]
-
-
-# -- Options for Epub output ---------------------------------------------------
-
-# Bibliographic Dublin Core info.
-epub_title = u'Django'
-epub_author = u'Django Software Foundation'
-epub_publisher = u'Django Software Foundation'
-epub_copyright = u'2010, Django Software Foundation'
-
-# The language of the text. It defaults to the language option
-# or en if the language is not set.
-#epub_language = ''
-
-# The scheme of the identifier. Typical schemes are ISBN or URL.
-#epub_scheme = ''
-
-# The unique identifier of the text. This can be a ISBN number
-# or the project homepage.
-#epub_identifier = ''
-
-# A unique identification for the text.
-#epub_uid = ''
-
-# HTML files that should be inserted before the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_pre_files = []
-
-# HTML files shat should be inserted after the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_post_files = []
-
-# A list of files that should not be packed into the epub file.
-#epub_exclude_files = []
-
-# The depth of the table of contents in toc.ncx.
-#epub_tocdepth = 3
-
-# Allow duplicate toc entries.
-#epub_tocdup = True
diff --git a/parts/django/docs/contents.txt b/parts/django/docs/contents.txt
deleted file mode 100644
index 14fe007..0000000
--- a/parts/django/docs/contents.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-.. _contents:
-
-=============================
-Django documentation contents
-=============================
-
-.. toctree::
- :hidden:
-
- index
-
-.. toctree::
- :maxdepth: 2
-
- intro/index
- topics/index
- howto/index
- faq/index
- ref/index
- misc/index
- glossary
- releases/index
- internals/index
-
-Indices, glossary and tables
-============================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`glossary`
-
-Deprecated/obsolete documentation
-=================================
-
-The following documentation covers features that have been deprecated or that
-have been replaced in newer versions of Django.
-
-.. toctree::
- :maxdepth: 2
-
- obsolete/index
diff --git a/parts/django/docs/faq/admin.txt b/parts/django/docs/faq/admin.txt
deleted file mode 100644
index 1512675..0000000
--- a/parts/django/docs/faq/admin.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-FAQ: The admin
-==============
-
-I can't log in. When I enter a valid username and password, it just brings up the login page again, with no error messages.
----------------------------------------------------------------------------------------------------------------------------
-
-The login cookie isn't being set correctly, because the domain of the cookie
-sent out by Django doesn't match the domain in your browser. Try these two
-things:
-
- * Set the ``SESSION_COOKIE_DOMAIN`` setting in your admin config file
- to match your domain. For example, if you're going to
- "http://www.example.com/admin/" in your browser, in
- "myproject.settings" you should set ``SESSION_COOKIE_DOMAIN = 'www.example.com'``.
-
- * Some browsers (Firefox?) don't like to accept cookies from domains that
- don't have dots in them. If you're running the admin site on "localhost"
- or another domain that doesn't have a dot in it, try going to
- "localhost.localdomain" or "127.0.0.1". And set
- ``SESSION_COOKIE_DOMAIN`` accordingly.
-
-I can't log in. When I enter a valid username and password, it brings up the login page again, with a "Please enter a correct username and password" error.
------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-If you're sure your username and password are correct, make sure your user
-account has ``is_active`` and ``is_staff`` set to True. The admin site only
-allows access to users with those two fields both set to True.
-
-How can I prevent the cache middleware from caching the admin site?
--------------------------------------------------------------------
-
-Set the :setting:`CACHE_MIDDLEWARE_ANONYMOUS_ONLY` setting to ``True``. See the
-:doc:`cache documentation </topics/cache>` for more information.
-
-How do I automatically set a field's value to the user who last edited the object in the admin?
------------------------------------------------------------------------------------------------
-
-The :class:`~django.contrib.admin.ModelAdmin` class provides customization hooks
-that allow you to transform an object as it saved, using details from the
-request. By extracting the current user from the request, and customizing the
-:meth:`~django.contrib.admin.ModelAdmin.save_model` hook, you can update an
-object to reflect the user that edited it. See :ref:`the documentation on
-ModelAdmin methods <model-admin-methods>` for an example.
-
-How do I limit admin access so that objects can only be edited by the users who created them?
----------------------------------------------------------------------------------------------
-
-The :class:`~django.contrib.admin.ModelAdmin` class also provides customization
-hooks that allow you to control the visibility and editability of objects in the
-admin. Using the same trick of extracting the user from the request, the
-:meth:`~django.contrib.admin.ModelAdmin.queryset` and
-:meth:`~django.contrib.admin.ModelAdmin.has_change_permission` can be used to
-control the visibility and editability of objects in the admin.
-
-My admin-site CSS and images showed up fine using the development server, but they're not displaying when using mod_python.
----------------------------------------------------------------------------------------------------------------------------
-
-See :ref:`serving the admin files <serving-the-admin-files>`
-in the "How to use Django with mod_python" documentation.
-
-My "list_filter" contains a ManyToManyField, but the filter doesn't display.
-----------------------------------------------------------------------------
-
-Django won't bother displaying the filter for a ``ManyToManyField`` if there
-are fewer than two related objects.
-
-For example, if your ``list_filter`` includes ``sites``, and there's only one
-site in your database, it won't display a "Site" filter. In that case,
-filtering by site would be meaningless.
-
-How can I customize the functionality of the admin interface?
--------------------------------------------------------------
-
-You've got several options. If you want to piggyback on top of an add/change
-form that Django automatically generates, you can attach arbitrary JavaScript
-modules to the page via the model's ``class Admin`` ``js`` parameter. That
-parameter is a list of URLs, as strings, pointing to JavaScript modules that
-will be included within the admin form via a ``<script>`` tag.
-
-If you want more flexibility than simply tweaking the auto-generated forms,
-feel free to write custom views for the admin. The admin is powered by Django
-itself, and you can write custom views that hook into the authentication
-system, check permissions and do whatever else they need to do.
-
-If you want to customize the look-and-feel of the admin interface, read the
-next question.
-
-The dynamically-generated admin site is ugly! How can I change it?
-------------------------------------------------------------------
-
-We like it, but if you don't agree, you can modify the admin site's
-presentation by editing the CSS stylesheet and/or associated image files. The
-site is built using semantic HTML and plenty of CSS hooks, so any changes you'd
-like to make should be possible by editing the stylesheet. We've got a
-:doc:`guide to the CSS used in the admin </obsolete/admin-css>` to get you started.
-
diff --git a/parts/django/docs/faq/contributing.txt b/parts/django/docs/faq/contributing.txt
deleted file mode 100644
index 81c06f3..0000000
--- a/parts/django/docs/faq/contributing.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-FAQ: Contributing code
-======================
-
-How can I get started contributing code to Django?
---------------------------------------------------
-
-Thanks for asking! We've written an entire document devoted to this question.
-It's titled :doc:`Contributing to Django </internals/contributing>`.
-
-I submitted a bug fix in the ticket system several weeks ago. Why are you ignoring my patch?
---------------------------------------------------------------------------------------------
-
-Don't worry: We're not ignoring you!
-
-It's important to understand there is a difference between "a ticket is being
-ignored" and "a ticket has not been attended to yet." Django's ticket system
-contains hundreds of open tickets, of various degrees of impact on end-user
-functionality, and Django's developers have to review and prioritize.
-
-On top of that: the people who work on Django are all volunteers. As a result,
-the amount of time that we have to work on the framework is limited and will
-vary from week to week depending on our spare time. If we're busy, we may not
-be able to spend as much time on Django as we might want.
-
-The best way to make sure tickets do not get hung up on the way to checkin is
-to make it dead easy, even for someone who may not be intimately familiar with
-that area of the code, to understand the problem and verify the fix:
-
- * Are there clear instructions on how to reproduce the bug? If this
- touches a dependency (such as PIL), a contrib module, or a specific
- database, are those instructions clear enough even for someone not
- familiar with it?
-
- * If there are several patches attached to the ticket, is it clear what
- each one does, which ones can be ignored and which matter?
-
- * Does the patch include a unit test? If not, is there a very clear
- explanation why not? A test expresses succinctly what the problem is,
- and shows that the patch actually fixes it.
-
-If your patch stands no chance of inclusion in Django, we won't ignore it --
-we'll just close the ticket. So if your ticket is still open, it doesn't mean
-we're ignoring you; it just means we haven't had time to look at it yet.
-
-When and how might I remind the core team of a patch I care about?
-------------------------------------------------------------------
-
-A polite, well-timed message to the mailing list is one way to get attention.
-To determine the right time, you need to keep an eye on the schedule. If you
-post your message when the core developers are trying to hit a feature
-deadline or manage a planning phase, you're not going to get the sort of
-attention you require. However, if you draw attention to a ticket when the
-core developers are paying particular attention to bugs -- just before a bug
-fixing sprint, or in the lead up to a beta release for example -- you're much
-more likely to get a productive response.
-
-Gentle IRC reminders can also work -- again, strategically timed if possible.
-During a bug sprint would be a very good time, for example.
-
-Another way to get traction is to pull several related tickets together. When
-the core developers sit down to fix a bug in an area they haven't touched for
-a while, it can take a few minutes to remember all the fine details of how
-that area of code works. If you collect several minor bug fixes together into
-a similarly themed group, you make an attractive target, as the cost of coming
-up to speed on an area of code can be spread over multiple tickets.
-
-Please refrain from emailing core developers personally, or repeatedly raising
-the same issue over and over. This sort of behavior will not gain you any
-additional attention -- certainly not the attention that you need in order to
-get your pet bug addressed.
-
-But I've reminded you several times and you keep ignoring my patch!
--------------------------------------------------------------------
-
-Seriously - we're not ignoring you. If your patch stands no chance of
-inclusion in Django, we'll close the ticket. For all the other tickets, we
-need to prioritize our efforts, which means that some tickets will be
-addressed before others.
-
-One of the criteria that is used to prioritize bug fixes is the number of
-people that will likely be affected by a given bug. Bugs that have the
-potential to affect many people will generally get priority over those that
-are edge cases.
-
-Another reason that bugs might be ignored for while is if the bug is a symptom
-of a larger problem. While we can spend time writing, testing and applying
-lots of little patches, sometimes the right solution is to rebuild. If a
-rebuild or refactor of a particular component has been proposed or is
-underway, you may find that bugs affecting that component will not get as much
-attention. Again, this is just a matter of prioritizing scarce resources. By
-concentrating on the rebuild, we can close all the little bugs at once, and
-hopefully prevent other little bugs from appearing in the future.
-
-Whatever the reason, please keep in mind that while you may hit a particular
-bug regularly, it doesn't necessarily follow that every single Django user
-will hit the same bug. Different users use Django in different ways, stressing
-different parts of the code under different conditions. When we evaluate the
-relative priorities, we are generally trying to consider the needs of the
-entire community, not just the severity for one particular user. This doesn't
-mean that we think your problem is unimportant -- just that in the limited
-time we have available, we will always err on the side of making 10 people
-happy rather than making 1 person happy.
diff --git a/parts/django/docs/faq/general.txt b/parts/django/docs/faq/general.txt
deleted file mode 100644
index 96abad2..0000000
--- a/parts/django/docs/faq/general.txt
+++ /dev/null
@@ -1,192 +0,0 @@
-FAQ: General
-============
-
-Why does this project exist?
-----------------------------
-
-Django grew from a very practical need: World Online, a newspaper Web
-operation, is responsible for building intensive Web applications on journalism
-deadlines. In the fast-paced newsroom, World Online often has only a matter of
-hours to take a complicated Web application from concept to public launch.
-
-At the same time, the World Online Web developers have consistently been
-perfectionists when it comes to following best practices of Web development.
-
-In fall 2003, the World Online developers (Adrian Holovaty and Simon Willison)
-ditched PHP and began using Python to develop its Web sites. As they built
-intensive, richly interactive sites such as Lawrence.com, they began to extract
-a generic Web development framework that let them build Web applications more
-and more quickly. They tweaked this framework constantly, adding improvements
-over two years.
-
-In summer 2005, World Online decided to open-source the resulting software,
-Django. Django would not be possible without a whole host of open-source
-projects -- `Apache`_, `Python`_, and `PostgreSQL`_ to name a few -- and we're
-thrilled to be able to give something back to the open-source community.
-
-.. _Apache: http://httpd.apache.org/
-.. _Python: http://www.python.org/
-.. _PostgreSQL: http://www.postgresql.org/
-
-What does "Django" mean, and how do you pronounce it?
------------------------------------------------------
-
-Django is named after `Django Reinhardt`_, a gypsy jazz guitarist from the 1930s
-to early 1950s. To this day, he's considered one of the best guitarists of all time.
-
-Listen to his music. You'll like it.
-
-Django is pronounced **JANG**-oh. Rhymes with FANG-oh. The "D" is silent.
-
-We've also recorded an `audio clip of the pronunciation`_.
-
-.. _Django Reinhardt: http://en.wikipedia.org/wiki/Django_Reinhardt
-.. _audio clip of the pronunciation: http://red-bean.com/~adrian/django_pronunciation.mp3
-
-Is Django stable?
------------------
-
-Yes. World Online has been using Django for more than three years. Sites built
-on Django have weathered traffic spikes of over one million hits an hour and a
-number of Slashdottings. Yes, it's quite stable.
-
-Does Django scale?
-------------------
-
-Yes. Compared to development time, hardware is cheap, and so Django is
-designed to take advantage of as much hardware as you can throw at it.
-
-Django uses a "shared-nothing" architecture, which means you can add hardware
-at any level -- database servers, caching servers or Web/application servers.
-
-The framework cleanly separates components such as its database layer and
-application layer. And it ships with a simple-yet-powerful
-:doc:`cache framework </topics/cache>`.
-
-Who's behind this?
-------------------
-
-Django was originally developed at World Online, the Web department of a
-newspaper in Lawrence, Kansas, USA. Django's now run by an international team of
-volunteers; you can read all about them over at the :doc:`list of committers
-</internals/committers>`
-
-Which sites use Django?
------------------------
-
-The Django wiki features a consistently growing `list of Django-powered sites`_.
-Feel free to add your Django-powered site to the list.
-
-.. _list of Django-powered sites: http://code.djangoproject.com/wiki/DjangoPoweredSites
-
-.. _mtv:
-
-Django appears to be a MVC framework, but you call the Controller the "view", and the View the "template". How come you don't use the standard names?
------------------------------------------------------------------------------------------------------------------------------------------------------
-
-Well, the standard names are debatable.
-
-In our interpretation of MVC, the "view" describes the data that gets presented
-to the user. It's not necessarily *how* the data *looks*, but *which* data is
-presented. The view describes *which data you see*, not *how you see it.* It's
-a subtle distinction.
-
-So, in our case, a "view" is the Python callback function for a particular URL,
-because that callback function describes which data is presented.
-
-Furthermore, it's sensible to separate content from presentation -- which is
-where templates come in. In Django, a "view" describes which data is presented,
-but a view normally delegates to a template, which describes *how* the data is
-presented.
-
-Where does the "controller" fit in, then? In Django's case, it's probably the
-framework itself: the machinery that sends a request to the appropriate view,
-according to the Django URL configuration.
-
-If you're hungry for acronyms, you might say that Django is a "MTV" framework
--- that is, "model", "template", and "view." That breakdown makes much more
-sense.
-
-At the end of the day, of course, it comes down to getting stuff done. And,
-regardless of how things are named, Django gets stuff done in a way that's most
-logical to us.
-
-<Framework X> does <feature Y> -- why doesn't Django?
------------------------------------------------------
-
-We're well aware that there are other awesome Web frameworks out there, and
-we're not averse to borrowing ideas where appropriate. However, Django was
-developed precisely because we were unhappy with the status quo, so please be
-aware that "because <Framework X> does it" is not going to be sufficient reason
-to add a given feature to Django.
-
-Why did you write all of Django from scratch, instead of using other Python libraries?
---------------------------------------------------------------------------------------
-
-When Django was originally written a couple of years ago, Adrian and Simon
-spent quite a bit of time exploring the various Python Web frameworks
-available.
-
-In our opinion, none of them were completely up to snuff.
-
-We're picky. You might even call us perfectionists. (With deadlines.)
-
-Over time, we stumbled across open-source libraries that did things we'd
-already implemented. It was reassuring to see other people solving similar
-problems in similar ways, but it was too late to integrate outside code: We'd
-already written, tested and implemented our own framework bits in several
-production settings -- and our own code met our needs delightfully.
-
-In most cases, however, we found that existing frameworks/tools inevitably had
-some sort of fundamental, fatal flaw that made us squeamish. No tool fit our
-philosophies 100%.
-
-Like we said: We're picky.
-
-We've documented our philosophies on the
-:doc:`design philosophies page </misc/design-philosophies>`.
-
-Is Django a content-management-system (CMS)?
---------------------------------------------
-
-No, Django is not a CMS, or any sort of "turnkey product" in and of itself.
-It's a Web framework; it's a programming tool that lets you build Web sites.
-
-For example, it doesn't make much sense to compare Django to something like
-Drupal_, because Django is something you use to *create* things like Drupal.
-
-Of course, Django's automatic admin site is fantastic and timesaving -- but
-the admin site is one module of Django the framework. Furthermore, although
-Django has special conveniences for building "CMS-y" apps, that doesn't mean
-it's not just as appropriate for building "non-CMS-y" apps (whatever that
-means!).
-
-.. _Drupal: http://drupal.org/
-
-How can I download the Django documentation to read it offline?
----------------------------------------------------------------
-
-The Django docs are available in the ``docs`` directory of each Django tarball
-release. These docs are in reST (reStructuredText) format, and each text file
-corresponds to a Web page on the official Django site.
-
-Because the documentation is `stored in revision control`_, you can browse
-documentation changes just like you can browse code changes.
-
-Technically, the docs on Django's site are generated from the latest development
-versions of those reST documents, so the docs on the Django site may offer more
-information than the docs that come with the latest Django release.
-
-.. _stored in revision control: http://code.djangoproject.com/browser/django/trunk/docs
-
-Where can I find Django developers for hire?
---------------------------------------------
-
-Consult our `developers for hire page`_ for a list of Django developers who
-would be happy to help you.
-
-You might also be interested in posting a job to http://djangogigs.com/ .
-If you want to find Django-capable people in your local area, try
-http://djangopeople.net/ .
-
-.. _developers for hire page: http://code.djangoproject.com/wiki/DevelopersForHire
diff --git a/parts/django/docs/faq/help.txt b/parts/django/docs/faq/help.txt
deleted file mode 100644
index d84b3f5..0000000
--- a/parts/django/docs/faq/help.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-FAQ: Getting Help
-=================
-
-How do I do X? Why doesn't Y work? Where can I go to get help?
---------------------------------------------------------------
-
-If this FAQ doesn't contain an answer to your question, you might want to
-try the `django-users mailing list`_. Feel free to ask any question related
-to installing, using, or debugging Django.
-
-If you prefer IRC, the `#django IRC channel`_ on the Freenode IRC network is an
-active community of helpful individuals who may be able to solve your problem.
-
-.. _`django-users mailing list`: http://groups.google.com/group/django-users
-.. _`#django IRC channel`: irc://irc.freenode.net/django
-
-Why hasn't my message appeared on django-users?
------------------------------------------------
-
-django-users_ has a lot of subscribers. This is good for the community, as
-it means many people are available to contribute answers to questions.
-Unfortunately, it also means that django-users_ is an attractive target for
-spammers.
-
-In order to combat the spam problem, when you join the django-users_ mailing
-list, we manually moderate the first message you send to the list. This means
-that spammers get caught, but it also means that your first question to the
-list might take a little longer to get answered. We apologize for any
-inconvenience that this policy may cause.
-
-.. _django-users: http://groups.google.com/group/django-users
-
-Nobody on django-users answered my question! What should I do?
---------------------------------------------------------------
-
-Try making your question more specific, or provide a better example of your
-problem.
-
-As with most open-source mailing lists, the folks on django-users_ are
-volunteers. If nobody has answered your question, it may be because nobody
-knows the answer, it may be because nobody can understand the question, or it
-may be that everybody that can help is busy. One thing you might try is to ask
-the question on IRC -- visit the `#django IRC channel`_ on the Freenode IRC
-network.
-
-You might notice we have a second mailing list, called django-developers_ --
-but please don't e-mail support questions to this mailing list. This list is
-for discussion of the development of Django itself. Asking a tech support
-question there is considered quite impolite.
-
-.. _django-developers: http://groups.google.com/group/django-developers
-
-I think I've found a bug! What should I do?
--------------------------------------------
-
-Detailed instructions on how to handle a potential bug can be found in our
-:ref:`Guide to contributing to Django <reporting-bugs>`.
-
-I think I've found a security problem! What should I do?
---------------------------------------------------------
-
-If you think you've found a security problem with Django, please send a message
-to security@djangoproject.com. This is a private list only open to long-time,
-highly trusted Django developers, and its archives are not publicly readable.
-
-Due to the sensitive nature of security issues, we ask that if you think you
-have found a security problem, *please* don't send a message to one of the
-public mailing lists. Django has a
-:ref:`policy for handling security issues <reporting-security-issues>`;
-while a defect is outstanding, we would like to minimize any damage that
-could be inflicted through public knowledge of that defect.
-
-.. _`policy for handling security issues`: ../contributing/#reporting-security-issues
diff --git a/parts/django/docs/faq/index.txt b/parts/django/docs/faq/index.txt
deleted file mode 100644
index 347caba..0000000
--- a/parts/django/docs/faq/index.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-==========
-Django FAQ
-==========
-
-.. toctree::
- :maxdepth: 2
-
- general
- install
- usage
- help
- models
- admin
- contributing \ No newline at end of file
diff --git a/parts/django/docs/faq/install.txt b/parts/django/docs/faq/install.txt
deleted file mode 100644
index 3fbcb38..0000000
--- a/parts/django/docs/faq/install.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-FAQ: Installation
-=================
-
-How do I get started?
----------------------
-
- #. `Download the code`_.
- #. Install Django (read the :doc:`installation guide </intro/install>`).
- #. Walk through the :doc:`tutorial </intro/tutorial01>`.
- #. Check out the rest of the :doc:`documentation </index>`, and `ask questions`_ if you
- run into trouble.
-
-.. _`Download the code`: http://www.djangoproject.com/download/
-.. _ask questions: http://www.djangoproject.com/community/
-
-What are Django's prerequisites?
---------------------------------
-
-Django requires Python_, specifically any version of Python from 2.4
-through 2.7. No other Python libraries are required for basic Django
-usage.
-
-For a development environment -- if you just want to experiment with Django --
-you don't need to have a separate Web server installed; Django comes with its
-own lightweight development server. For a production environment, Django
-follows the WSGI_ spec, which means it can run on a variety of server
-platforms. See :doc:`Deploying Django </howto/deployment/index>` for some
-popular alternatives. Also, the `server arrangements wiki page`_ contains
-details for several deployment strategies.
-
-If you want to use Django with a database, which is probably the case, you'll
-also need a database engine. PostgreSQL_ is recommended, because we're
-PostgreSQL fans, and MySQL_, `SQLite 3`_, and Oracle_ are also supported.
-
-.. _Python: http://www.python.org/
-.. _WSGI: http://www.python.org/dev/peps/pep-0333/
-.. _server arrangements wiki page: http://code.djangoproject.com/wiki/ServerArrangements
-.. _PostgreSQL: http://www.postgresql.org/
-.. _MySQL: http://www.mysql.com/
-.. _`SQLite 3`: http://www.sqlite.org/
-.. _Oracle: http://www.oracle.com/
-
-Do I lose anything by using Python 2.4 versus newer Python versions, such as Python 2.5 or 2.6?
------------------------------------------------------------------------------------------------
-
-Not in the core framework. Currently, Django itself officially supports any
-version of Python from 2.4 through 2.7, inclusive. However, newer versions of
-Python are often faster, have more features, and are better supported.
-Third-party applications for use with Django are, of course, free to set their
-own version requirements.
-
-Over the next year or two Django will begin dropping support for older Python
-versions as part of a migration which will end with Django running on Python 3
-(see below for details).
-
-All else being equal, we recommend that you use the latest 2.x release
-(currently Python 2.7). This will let you take advantage of the numerous
-improvements and optimizations to the Python language since version 2.4, and
-will help ease the process of dropping support for older Python versions on
-the road to Python 3.
-
-Can I use Django with Python 2.3?
----------------------------------
-
-Django 1.1 (and earlier) supported Python 2.3. Django 1.2 and newer does not.
-We highly recommend you upgrade Python if at all possible, but Django 1.1 will
-continue to work on Python 2.3.
-
-Can I use Django with Python 3?
--------------------------------
-
-Not at the moment. Python 3.0 introduced a number of
-backwards-incompatible changes to the Python language, and although
-these changes are generally a good thing for Python's future, it will
-be a while before most Python software catches up and is able to run
-on Python 3.0. For larger Python-based software like Django, the
-transition is expected to take at least a year or two (since it
-involves dropping support for older Python releases and so must be
-done gradually).
-
-In the meantime, Python 2.x releases will be supported and provided
-with bug fixes and security updates by the Python development team, so
-continuing to use a Python 2.x release during the transition should
-not present any risk.
-
-Will Django run under shared hosting (like TextDrive or Dreamhost)?
--------------------------------------------------------------------
-
-See our `Django-friendly Web hosts`_ page.
-
-.. _`Django-friendly Web hosts`: http://code.djangoproject.com/wiki/DjangoFriendlyWebHosts
-
-Should I use the stable version or development version?
--------------------------------------------------------
-
-Generally, if you're using code in production, you should be using a
-stable release. The Django project publishes a full stable release
-every nine months or so, with bugfix updates in between. These stable
-releases contain the API that is covered by our backwards
-compatibility guarantees; if you write code against stable releases,
-you shouldn't have any problems upgrading when the next official
-version is released.
diff --git a/parts/django/docs/faq/models.txt b/parts/django/docs/faq/models.txt
deleted file mode 100644
index f00d453..0000000
--- a/parts/django/docs/faq/models.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-FAQ: Databases and models
-=========================
-
-.. _faq-see-raw-sql-queries:
-
-How can I see the raw SQL queries Django is running?
-----------------------------------------------------
-
-Make sure your Django ``DEBUG`` setting is set to ``True``. Then, just do
-this::
-
- >>> from django.db import connection
- >>> connection.queries
- [{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_polls.pub_date FROM polls_polls',
- 'time': '0.002'}]
-
-``connection.queries`` is only available if ``DEBUG`` is ``True``. It's a list
-of dictionaries in order of query execution. Each dictionary has the following::
-
- ``sql`` -- The raw SQL statement
- ``time`` -- How long the statement took to execute, in seconds.
-
-``connection.queries`` includes all SQL statements -- INSERTs, UPDATES,
-SELECTs, etc. Each time your app hits the database, the query will be recorded.
-Note that the raw SQL logged in ``connection.queries`` may not include
-parameter quoting. Parameter quoting is performed by the database-specific
-backend, and not all backends provide a way to retrieve the SQL after quoting.
-
-.. versionadded:: 1.2
-
-If you are using :doc:`multiple databases</topics/db/multi-db>`, you can use the
-same interface on each member of the ``connections`` dictionary::
-
- >>> from django.db import connections
- >>> connections['my_db_alias'].queries
-
-Can I use Django with a pre-existing database?
-----------------------------------------------
-
-Yes. See :doc:`Integrating with a legacy database </howto/legacy-databases>`.
-
-If I make changes to a model, how do I update the database?
------------------------------------------------------------
-
-If you don't mind clearing data, your project's ``manage.py`` utility has an
-option to reset the SQL for a particular application::
-
- manage.py reset appname
-
-This drops any tables associated with ``appname`` and recreates them.
-
-If you do care about deleting data, you'll have to execute the ``ALTER TABLE``
-statements manually in your database. That's the way we've always done it,
-because dealing with data is a very sensitive operation that we've wanted to
-avoid automating. That said, there's some work being done to add partially
-automated database-upgrade functionality.
-
-Do Django models support multiple-column primary keys?
-------------------------------------------------------
-
-No. Only single-column primary keys are supported.
-
-But this isn't an issue in practice, because there's nothing stopping you from
-adding other constraints (using the ``unique_together`` model option or
-creating the constraint directly in your database), and enforcing the
-uniqueness at that level. Single-column primary keys are needed for things such
-as the admin interface to work; e.g., you need a simple way of being able to
-specify an object to edit or delete.
-
-How do I add database-specific options to my CREATE TABLE statements, such as specifying MyISAM as the table type?
-------------------------------------------------------------------------------------------------------------------
-
-We try to avoid adding special cases in the Django code to accommodate all the
-database-specific options such as table type, etc. If you'd like to use any of
-these options, create an :ref:`SQL initial data file <initial-sql>` that
-contains ``ALTER TABLE`` statements that do what you want to do. The initial
-data files are executed in your database after the ``CREATE TABLE`` statements.
-
-For example, if you're using MySQL and want your tables to use the MyISAM table
-type, create an initial data file and put something like this in it::
-
- ALTER TABLE myapp_mytable ENGINE=MyISAM;
-
-As explained in the :ref:`SQL initial data file <initial-sql>` documentation,
-this SQL file can contain arbitrary SQL, so you can make any sorts of changes
-you need to make.
-
-Why is Django leaking memory?
------------------------------
-
-Django isn't known to leak memory. If you find your Django processes are
-allocating more and more memory, with no sign of releasing it, check to make
-sure your ``DEBUG`` setting is set to ``False``. If ``DEBUG`` is ``True``, then
-Django saves a copy of every SQL statement it has executed.
-
-(The queries are saved in ``django.db.connection.queries``. See
-`How can I see the raw SQL queries Django is running?`_.)
-
-To fix the problem, set ``DEBUG`` to ``False``.
-
-If you need to clear the query list manually at any point in your functions,
-just call ``reset_queries()``, like this::
-
- from django import db
- db.reset_queries()
diff --git a/parts/django/docs/faq/usage.txt b/parts/django/docs/faq/usage.txt
deleted file mode 100644
index c11514c..0000000
--- a/parts/django/docs/faq/usage.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-FAQ: Using Django
-=================
-
-Why do I get an error about importing DJANGO_SETTINGS_MODULE?
--------------------------------------------------------------
-
-Make sure that:
-
- * The environment variable DJANGO_SETTINGS_MODULE is set to a
- fully-qualified Python module (i.e. "mysite.settings").
-
- * Said module is on ``sys.path`` (``import mysite.settings`` should work).
-
- * The module doesn't contain syntax errors (of course).
-
- * If you're using mod_python but *not* using Django's request handler,
- you'll need to work around a mod_python bug related to the use of
- ``SetEnv``; before you import anything from Django you'll need to do
- the following::
-
- os.environ.update(req.subprocess_env)
-
- (where ``req`` is the mod_python request object).
-
-I can't stand your template language. Do I have to use it?
-----------------------------------------------------------
-
-We happen to think our template engine is the best thing since chunky bacon,
-but we recognize that choosing a template language runs close to religion.
-There's nothing about Django that requires using the template language, so
-if you're attached to ZPT, Cheetah, or whatever, feel free to use those.
-
-Do I have to use your model/database layer?
--------------------------------------------
-
-Nope. Just like the template system, the model/database layer is decoupled from
-the rest of the framework.
-
-The one exception is: If you use a different database library, you won't get to
-use Django's automatically-generated admin site. That app is coupled to the
-Django database layer.
-
-How do I use image and file fields?
------------------------------------
-
-Using a :class:`~django.db.models.FileField` or an
-:class:`~django.db.models.ImageField` in a model takes a few steps:
-
- #. In your settings file, you'll need to define :setting:`MEDIA_ROOT` as
- the full path to a directory where you'd like Django to store uploaded
- files. (For performance, these files are not stored in the database.)
- Define :setting:`MEDIA_URL` as the base public URL of that directory.
- Make sure that this directory is writable by the Web server's user
- account.
-
- #. Add the :class:`~django.db.models.FileField` or
- :class:`~django.db.models.ImageField` to your model, making sure to
- define the :attr:`~django.db.models.FileField.upload_to` option to tell
- Django to which subdirectory of :setting:`MEDIA_ROOT` it should upload
- files.
-
- #. All that will be stored in your database is a path to the file
- (relative to :setting:`MEDIA_ROOT`). You'll most likely want to use the
- convenience :attr:`~django.core.files.File.url` attribute provided by
- Django. For example, if your :class:`~django.db.models.ImageField` is
- called ``mug_shot``, you can get the absolute path to your image in a
- template with ``{{ object.mug_shot.url }}``.
-
-How do I make a variable available to all my templates?
--------------------------------------------------------
-
-Sometimes your templates just all need the same thing. A common example would
-be dynamically-generated menus. At first glance, it seems logical to simply
-add a common dictionary to the template context.
-
-The correct solution is to use a ``RequestContext``. Details on how to do this
-are here: :ref:`subclassing-context-requestcontext`.
diff --git a/parts/django/docs/glossary.txt b/parts/django/docs/glossary.txt
deleted file mode 100644
index b8f7a6b..0000000
--- a/parts/django/docs/glossary.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-.. _glossary:
-
-========
-Glossary
-========
-
-.. glossary::
-
- field
- An attribute on a :term:`model`; a given field usually maps directly to
- a single database column.
-
- See :doc:`/topics/db/models`.
-
- generic view
- A higher-order :term:`view` function that provides an abstract/generic
- implementation of a common idiom or pattern found in view development.
-
- See :doc:`/ref/generic-views`.
-
- model
- Models store your application's data.
-
- See :doc:`/topics/db/models`.
-
- MTV
- See :ref:`mtv`.
-
- MVC
- `Model-view-controller`__; a software pattern. Django :ref:`follows MVC
- to some extent <mtv>`.
-
- __ http://en.wikipedia.org/wiki/Model-view-controller
-
- project
- A Python package -- i.e. a directory of code -- that contains all the
- settings for an instance of Django. This would include database
- configuration, Django-specific options and application-specific
- settings.
-
- property
- Also known as "managed attributes", and a feature of Python since
- version 2.2. From `the property documentation`__:
-
- Properties are a neat way to implement attributes whose usage
- resembles attribute access, but whose implementation uses method
- calls. [...] You
- could only do this by overriding ``__getattr__`` and
- ``__setattr__``; but overriding ``__setattr__`` slows down all
- attribute assignments considerably, and overriding ``__getattr__``
- is always a bit tricky to get right. Properties let you do this
- painlessly, without having to override ``__getattr__`` or
- ``__setattr__``.
-
- __ http://www.python.org/download/releases/2.2/descrintro/#property
-
- queryset
- An object representing some set of rows to be fetched from the database.
-
- See :doc:`/topics/db/queries`.
-
- slug
- A short label for something, containing only letters, numbers,
- underscores or hyphens. They're generally used in URLs. For
- example, in a typical blog entry URL:
-
- .. parsed-literal::
-
- http://www.djangoproject.com/weblog/2008/apr/12/**spring**/
-
- the last bit (``spring``) is the slug.
-
- template
- A chunk of text that acts as formatting for representing data. A
- template helps to abstract the presentation of data from the data
- itself.
-
- See :doc:`/topics/templates`.
-
- view
- A function responsible for rending a page.
diff --git a/parts/django/docs/howto/apache-auth.txt b/parts/django/docs/howto/apache-auth.txt
deleted file mode 100644
index 2ebae0b..0000000
--- a/parts/django/docs/howto/apache-auth.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-=========================================================
-Authenticating against Django's user database from Apache
-=========================================================
-
-Since keeping multiple authentication databases in sync is a common problem when
-dealing with Apache, you can configuring Apache to authenticate against Django's
-:doc:`authentication system </topics/auth>` directly. For example, you
-could:
-
- * Serve static/media files directly from Apache only to authenticated users.
-
- * Authenticate access to a Subversion_ repository against Django users with
- a certain permission.
-
- * Allow certain users to connect to a WebDAV share created with mod_dav_.
-
-.. _Subversion: http://subversion.tigris.org/
-.. _mod_dav: http://httpd.apache.org/docs/2.0/mod/mod_dav.html
-
-Configuring Apache
-==================
-
-To check against Django's authorization database from a Apache configuration
-file, you'll need to use mod_python's ``PythonAuthenHandler`` directive along
-with the standard ``Auth*`` and ``Require`` directives:
-
-.. code-block:: apache
-
- <Location /example/>
- AuthType Basic
- AuthName "example.com"
- Require valid-user
-
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- PythonAuthenHandler django.contrib.auth.handlers.modpython
- </Location>
-
-.. admonition:: Using the authentication handler with Apache 2.2
-
- If you're using Apache 2.2, you'll need to take a couple extra steps.
-
- You'll need to ensure that ``mod_auth_basic`` and ``mod_authz_user``
- are loaded. These might be compiled statically into Apache, or you might
- need to use ``LoadModule`` to load them dynamically (as shown in the
- example at the bottom of this note).
-
- You'll also need to insert configuration directives that prevent Apache
- from trying to use other authentication modules, as well as specifying
- the ``AuthUserFile`` directive and pointing it to ``/dev/null``. Depending
- on which other authentication modules you have loaded, you might need one
- or more of the following directives:
-
- .. code-block:: apache
-
- AuthBasicAuthoritative Off
- AuthDefaultAuthoritative Off
- AuthzLDAPAuthoritative Off
- AuthzDBMAuthoritative Off
- AuthzDefaultAuthoritative Off
- AuthzGroupFileAuthoritative Off
- AuthzOwnerAuthoritative Off
- AuthzUserAuthoritative Off
-
- A complete configuration, with differences between Apache 2.0 and
- Apache 2.2 marked in bold, would look something like:
-
- .. parsed-literal::
-
- **LoadModule auth_basic_module modules/mod_auth_basic.so**
- **LoadModule authz_user_module modules/mod_authz_user.so**
-
- ...
-
- <Location /example/>
- AuthType Basic
- AuthName "example.com"
- **AuthUserFile /dev/null**
- **AuthBasicAuthoritative Off**
- Require valid-user
-
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- PythonAuthenHandler django.contrib.auth.handlers.modpython
- </Location>
-
-By default, the authentication handler will limit access to the ``/example/``
-location to users marked as staff members. You can use a set of
-``PythonOption`` directives to modify this behavior:
-
- ================================ =========================================
- ``PythonOption`` Explanation
- ================================ =========================================
- ``DjangoRequireStaffStatus`` If set to ``on`` only "staff" users (i.e.
- those with the ``is_staff`` flag set)
- will be allowed.
-
- Defaults to ``on``.
-
- ``DjangoRequireSuperuserStatus`` If set to ``on`` only superusers (i.e.
- those with the ``is_superuser`` flag set)
- will be allowed.
-
- Defaults to ``off``.
-
- ``DjangoPermissionName`` The name of a permission to require for
- access. See :ref:`custom permissions
- <custom-permissions>` for more
- information.
-
- By default no specific permission will be
- required.
- ================================ =========================================
-
-Note that sometimes ``SetEnv`` doesn't play well in this mod_python
-configuration, for reasons unknown. If you're having problems getting
-mod_python to recognize your ``DJANGO_SETTINGS_MODULE``, you can set it using
-``PythonOption`` instead of ``SetEnv``. Therefore, these two Apache directives
-are equivalent::
-
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- PythonOption DJANGO_SETTINGS_MODULE mysite.settings
diff --git a/parts/django/docs/howto/auth-remote-user.txt b/parts/django/docs/howto/auth-remote-user.txt
deleted file mode 100644
index deab794..0000000
--- a/parts/django/docs/howto/auth-remote-user.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-====================================
-Authentication using ``REMOTE_USER``
-====================================
-
-.. currentmodule:: django.contrib.auth.backends
-
-This document describes how to make use of external authentication sources
-(where the Web server sets the ``REMOTE_USER`` environment variable) in your
-Django applications. This type of authentication solution is typically seen on
-intranet sites, with single sign-on solutions such as IIS and Integrated
-Windows Authentication or Apache and `mod_authnz_ldap`_, `CAS`_, `Cosign`_,
-`WebAuth`_, `mod_auth_sspi`_, etc.
-
-.. _mod_authnz_ldap: http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html
-.. _CAS: http://www.jasig.org/cas
-.. _Cosign: http://weblogin.org
-.. _WebAuth: http://www.stanford.edu/services/webauth/
-.. _mod_auth_sspi: http://sourceforge.net/projects/mod-auth-sspi
-
-When the Web server takes care of authentication it typically sets the
-``REMOTE_USER`` environment variable for use in the underlying application. In
-Django, ``REMOTE_USER`` is made available in the :attr:`request.META
-<django.http.HttpRequest.META>` attribute. Django can be configured to make
-use of the ``REMOTE_USER`` value using the ``RemoteUserMiddleware`` and
-``RemoteUserBackend`` classes found in :mod:`django.contrib.auth`.
-
-Configuration
-=============
-
-First, you must add the
-:class:`django.contrib.auth.middleware.RemoteUserMiddleware` to the
-:setting:`MIDDLEWARE_CLASSES` setting **after** the
-:class:`django.contrib.auth.middleware.AuthenticationMiddleware`::
-
- MIDDLEWARE_CLASSES = (
- ...
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.auth.middleware.RemoteUserMiddleware',
- ...
- )
-
-Next, you must replace the :class:`~django.contrib.auth.backends.ModelBackend`
-with ``RemoteUserBackend`` in the :setting:`AUTHENTICATION_BACKENDS` setting::
-
- AUTHENTICATION_BACKENDS = (
- 'django.contrib.auth.backends.RemoteUserBackend',
- )
-
-With this setup, ``RemoteUserMiddleware`` will detect the username in
-``request.META['REMOTE_USER']`` and will authenticate and auto-login that user
-using the ``RemoteUserBackend``.
-
-.. note::
- Since the ``RemoteUserBackend`` inherits from ``ModelBackend``, you will
- still have all of the same permissions checking that is implemented in
- ``ModelBackend``.
-
-If your authentication mechanism uses a custom HTTP header and not
-``REMOTE_USER``, you can subclass ``RemoteUserMiddleware`` and set the
-``header`` attribute to the desired ``request.META`` key. For example::
-
- from django.contrib.auth.middleware import RemoteUserMiddleware
-
- class CustomHeaderMiddleware(RemoteUserMiddleware):
- header = 'HTTP_AUTHUSER'
-
-
-``RemoteUserBackend``
-=====================
-
-.. class:: django.contrib.auth.backends.RemoteUserBackend
-
-If you need more control, you can create your own authentication backend
-that inherits from ``RemoteUserBackend`` and overrides certain parts:
-
-Attributes
-~~~~~~~~~~
-
-.. attribute:: RemoteUserBackend.create_unknown_user
-
- ``True`` or ``False``. Determines whether or not a
- :class:`~django.contrib.auth.models.User` object is created if not already
- in the database. Defaults to ``True``.
-
-Methods
-~~~~~~~
-
-.. method:: RemoteUserBackend.clean_username(username)
-
- Performs any cleaning on the ``username`` (e.g. stripping LDAP DN
- information) prior to using it to get or create a
- :class:`~django.contrib.auth.models.User` object. Returns the cleaned
- username.
-
-.. method:: RemoteUserBackend.configure_user(user)
-
- Configures a newly created user. This method is called immediately after a
- new user is created, and can be used to perform custom setup actions, such
- as setting the user's groups based on attributes in an LDAP directory.
- Returns the user object.
diff --git a/parts/django/docs/howto/custom-file-storage.txt b/parts/django/docs/howto/custom-file-storage.txt
deleted file mode 100644
index 1b0f32f..0000000
--- a/parts/django/docs/howto/custom-file-storage.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-Writing a custom storage system
-===============================
-
-.. currentmodule:: django.core.files.storage
-
-If you need to provide custom file storage -- a common example is storing files
-on some remote system -- you can do so by defining a custom storage class.
-You'll need to follow these steps:
-
-#. Your custom storage system must be a subclass of
- ``django.core.files.storage.Storage``::
-
- from django.core.files.storage import Storage
-
- class MyStorage(Storage):
- ...
-
-#. Django must be able to instantiate your storage system without any arguments.
- This means that any settings should be taken from ``django.conf.settings``::
-
- from django.conf import settings
- from django.core.files.storage import Storage
-
- class MyStorage(Storage):
- def __init__(self, option=None):
- if not option:
- option = settings.CUSTOM_STORAGE_OPTIONS
- ...
-
-#. Your storage class must implement the ``_open()`` and ``_save()`` methods,
- along with any other methods appropriate to your storage class. See below for
- more on these methods.
-
- In addition, if your class provides local file storage, it must override
- the ``path()`` method.
-
-Your custom storage system may override any of the storage methods explained in
-:doc:`/ref/files/storage`, but you **must** implement the following methods:
-
- * :meth:`Storage.delete`
- * :meth:`Storage.exists`
- * :meth:`Storage.listdir`
- * :meth:`Storage.size`
- * :meth:`Storage.url`
-
-You'll also usually want to use hooks specifically designed for custom storage
-objects. These are:
-
-``_open(name, mode='rb')``
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-**Required**.
-
-Called by ``Storage.open()``, this is the actual mechanism the storage class
-uses to open the file. This must return a ``File`` object, though in most cases,
-you'll want to return some subclass here that implements logic specific to the
-backend storage system.
-
-``_save(name, content)``
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Called by ``Storage.save()``. The ``name`` will already have gone through
-``get_valid_name()`` and ``get_available_name()``, and the ``content`` will be a
-``File`` object itself.
-
-Should return the actual name of name of the file saved (usually the ``name``
-passed in, but if the storage needs to change the file name return the new name
-instead).
-
-``get_valid_name(name)``
-------------------------
-
-Returns a filename suitable for use with the underlying storage system. The
-``name`` argument passed to this method is the original filename sent to the
-server, after having any path information removed. Override this to customize
-how non-standard characters are converted to safe filenames.
-
-The code provided on ``Storage`` retains only alpha-numeric characters, periods
-and underscores from the original filename, removing everything else.
-
-``get_available_name(name)``
-----------------------------
-
-Returns a filename that is available in the storage mechanism, possibly taking
-the provided filename into account. The ``name`` argument passed to this method
-will have already cleaned to a filename valid for the storage system, according
-to the ``get_valid_name()`` method described above.
-
-The code provided on ``Storage`` simply appends ``"_1"``, ``"_2"``, etc. to the
-filename until it finds one that's available in the destination directory.
diff --git a/parts/django/docs/howto/custom-management-commands.txt b/parts/django/docs/howto/custom-management-commands.txt
deleted file mode 100644
index 4a1747f..0000000
--- a/parts/django/docs/howto/custom-management-commands.txt
+++ /dev/null
@@ -1,253 +0,0 @@
-====================================
-Writing custom django-admin commands
-====================================
-
-.. versionadded:: 1.0
-
-Applications can register their own actions with ``manage.py``. For example,
-you might want to add a ``manage.py`` action for a Django app that you're
-distributing. In this document, we will be building a custom ``closepoll``
-command for the ``polls`` application from the
-:doc:`tutorial</intro/tutorial01>`.
-
-To do this, just add a ``management/commands`` directory to the application.
-Each Python module in that directory will be auto-discovered and registered as
-a command that can be executed as an action when you run ``manage.py``::
-
- polls/
- __init__.py
- models.py
- management/
- __init__.py
- commands/
- __init__.py
- closepoll.py
- tests.py
- views.py
-
-In this example, the ``closepoll`` command will be made available to any project
-that includes the ``polls`` application in :setting:`INSTALLED_APPS`.
-
-The ``closepoll.py`` module has only one requirement -- it must define a class
-``Command`` that extends :class:`BaseCommand` or one of its
-:ref:`subclasses<ref-basecommand-subclasses>`.
-
-.. admonition:: Standalone scripts
-
- Custom management commands are especially useful for running standalone
- scripts or for scripts that are periodically executed from the UNIX crontab
- or from Windows scheduled tasks control panel.
-
-To implement the command, edit ``polls/management/commands/closepoll.py`` to
-look like this:
-
-.. code-block:: python
-
- from django.core.management.base import BaseCommand, CommandError
- from example.polls.models import Poll
-
- class Command(BaseCommand):
- args = '<poll_id poll_id ...>'
- help = 'Closes the specified poll for voting'
-
- def handle(self, *args, **options):
- for poll_id in args:
- try:
- poll = Poll.objects.get(pk=int(poll_id))
- except Poll.DoesNotExist:
- raise CommandError('Poll "%s" does not exist' % poll_id)
-
- poll.opened = False
- poll.save()
-
- print 'Successfully closed poll "%s"' % poll_id
-
-The new custom command can be called using ``python manage.py closepoll
-<poll_id>``.
-
-The ``handle()`` method takes zero or more ``poll_ids`` and sets ``poll.opened``
-to ``False`` for each one. If the user referenced any nonexistant polls, a
-:class:`CommandError` is raised. The ``poll.opened`` attribute does not exist
-in the :doc:`tutorial</intro/tutorial01>` and was added to
-``polls.models.Poll`` for this example.
-
-The same ``closepoll`` could be easily modified to delete a given poll instead
-of closing it by accepting additional command line options. These custom options
-must be added to :attr:`~BaseCommand.option_list` like this:
-
-.. code-block:: python
-
- from optparse import make_option
-
- class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--delete',
- action='store_true',
- dest='delete',
- default=False,
- help='Delete poll instead of closing it'),
- )
- # ...
-
-In addition to being able to add custom command line options, all
-:doc:`management commands</ref/django-admin>` can accept some
-default options such as :djadminopt:`--verbosity` and :djadminopt:`--traceback`.
-
-Command objects
-===============
-
-.. class:: BaseCommand
-
-The base class from which all management commands ultimately derive.
-
-Use this class if you want access to all of the mechanisms which
-parse the command-line arguments and work out what code to call in
-response; if you don't need to change any of that behavior,
-consider using one of its :ref:`subclasses<ref-basecommand-subclasses>`.
-
-Subclassing the :class:`BaseCommand` class requires that you implement the
-:meth:`~BaseCommand.handle` method.
-
-Attributes
-----------
-
-All attributes can be set in your derived class and can be used in
-:class:`BaseCommand`'s :ref:`subclasses<ref-basecommand-subclasses>`.
-
-.. attribute:: BaseCommand.args
-
- A string listing the arguments accepted by the command,
- suitable for use in help messages; e.g., a command which takes
- a list of application names might set this to '<appname
- appname ...>'.
-
-.. attribute:: BaseCommand.can_import_settings
-
- A boolean indicating whether the command needs to be able to
- import Django settings; if ``True``, ``execute()`` will verify
- that this is possible before proceeding. Default value is
- ``True``.
-
-.. attribute:: BaseCommand.help
-
- A short description of the command, which will be printed in the
- help message when the user runs the command
- ``python manage.py help <command>``.
-
-.. attribute:: BaseCommand.option_list
-
- This is the list of ``optparse`` options which will be fed
- into the command's ``OptionParser`` for parsing arguments.
-
-.. attribute:: BaseCommand.output_transaction
-
- A boolean indicating whether the command outputs SQL
- statements; if ``True``, the output will automatically be
- wrapped with ``BEGIN;`` and ``COMMIT;``. Default value is
- ``False``.
-
-.. attribute:: BaseCommand.requires_model_validation
-
- A boolean; if ``True``, validation of installed models will be
- performed prior to executing the command. Default value is
- ``True``. To validate an individual application's models
- rather than all applications' models, call
- :meth:`~BaseCommand.validate` from :meth:`~BaseCommand.handle`.
-
-Methods
--------
-
-:class:`BaseCommand` has a few methods that can be overridden but only
-the :meth:`~BaseCommand.handle` method must be implemented.
-
-.. admonition:: Implementing a constructor in a subclass
-
- If you implement ``__init__`` in your subclass of :class:`BaseCommand`,
- you must call :class:`BaseCommand`'s ``__init__``.
-
- .. code-block:: python
-
- class Command(BaseCommand):
- def __init__(self, *args, **kwargs):
- super(Command, self).__init__(*args, **kwargs)
- # ...
-
-.. method:: BaseCommand.get_version()
-
- Return the Django version, which should be correct for all
- built-in Django commands. User-supplied commands can
- override this method to return their own version.
-
-.. method:: BaseCommand.execute(*args, **options)
-
- Try to execute this command, performing model validation if
- needed (as controlled by the attribute
- :attr:`requires_model_validation`). If the command raises a
- :class:`CommandError`, intercept it and print it sensibly to
- stderr.
-
-.. method:: BaseCommand.handle(*args, **options)
-
- The actual logic of the command. Subclasses must implement this method.
-
-.. _ref-basecommand-subclasses:
-
-BaseCommand subclasses
-----------------------
-
-.. class:: AppCommand
-
-A management command which takes one or more installed application
-names as arguments, and does something with each of them.
-
-Rather than implementing :meth:`~BaseCommand.handle`, subclasses must implement
-:meth:`~AppCommand.handle_app`, which will be called once for each application.
-
-.. method:: AppCommand.handle_app(app, **options)
-
- Perform the command's actions for ``app``, which will be the
- Python module corresponding to an application name given on
- the command line.
-
-.. class:: LabelCommand
-
-A management command which takes one or more arbitrary arguments
-(labels) on the command line, and does something with each of
-them.
-
-Rather than implementing :meth:`~BaseCommand.handle`, subclasses must implement
-:meth:`~LabelCommand.handle_label`, which will be called once for each label.
-
-.. method:: LabelCommand.handle_label(label, **options)
-
- Perform the command's actions for ``label``, which will be the
- string as given on the command line.
-
-.. class:: NoArgsCommand
-
-A command which takes no arguments on the command line.
-
-Rather than implementing :meth:`~BaseCommand.handle`, subclasses must implement
-:meth:`~NoArgsCommand.handle_noargs`; :meth:`~BaseCommand.handle` itself is
-overridden to ensure no arguments are passed to the command.
-
-.. method:: NoArgsCommand.handle_noargs(**options)
-
- Perform this command's actions
-
-.. _ref-command-exceptions:
-
-Command exceptions
-------------------
-
-.. class:: CommandError
-
-Exception class indicating a problem while executing a management
-command.
-
-If this exception is raised during the execution of a management
-command, it will be caught and turned into a nicely-printed error
-message to the appropriate output stream (i.e., stderr); as a
-result, raising this exception (with a sensible description of the
-error) is the preferred way to indicate that something has gone
-wrong in the execution of a command.
diff --git a/parts/django/docs/howto/custom-model-fields.txt b/parts/django/docs/howto/custom-model-fields.txt
deleted file mode 100644
index 1840c5b..0000000
--- a/parts/django/docs/howto/custom-model-fields.txt
+++ /dev/null
@@ -1,745 +0,0 @@
-===========================
-Writing custom model fields
-===========================
-
-.. versionadded:: 1.0
-.. currentmodule:: django.db.models
-
-Introduction
-============
-
-The :doc:`model reference </topics/db/models>` documentation explains how to use
-Django's standard field classes -- :class:`~django.db.models.CharField`,
-:class:`~django.db.models.DateField`, etc. For many purposes, those classes are
-all you'll need. Sometimes, though, the Django version won't meet your precise
-requirements, or you'll want to use a field that is entirely different from
-those shipped with Django.
-
-Django's built-in field types don't cover every possible database column type --
-only the common types, such as ``VARCHAR`` and ``INTEGER``. For more obscure
-column types, such as geographic polygons or even user-created types such as
-`PostgreSQL custom types`_, you can define your own Django ``Field`` subclasses.
-
-.. _PostgreSQL custom types: http://www.postgresql.org/docs/8.2/interactive/sql-createtype.html
-
-Alternatively, you may have a complex Python object that can somehow be
-serialized to fit into a standard database column type. This is another case
-where a ``Field`` subclass will help you use your object with your models.
-
-Our example object
-------------------
-
-Creating custom fields requires a bit of attention to detail. To make things
-easier to follow, we'll use a consistent example throughout this document:
-wrapping a Python object representing the deal of cards in a hand of Bridge_.
-Don't worry, you don't have know how to play Bridge to follow this example.
-You only need to know that 52 cards are dealt out equally to four players, who
-are traditionally called *north*, *east*, *south* and *west*. Our class looks
-something like this::
-
- class Hand(object):
- """A hand of cards (bridge style)"""
-
- def __init__(self, north, east, south, west):
- # Input parameters are lists of cards ('Ah', '9s', etc)
- self.north = north
- self.east = east
- self.south = south
- self.west = west
-
- # ... (other possibly useful methods omitted) ...
-
-.. _Bridge: http://en.wikipedia.org/wiki/Contract_bridge
-
-This is just an ordinary Python class, with nothing Django-specific about it.
-We'd like to be able to do things like this in our models (we assume the
-``hand`` attribute on the model is an instance of ``Hand``)::
-
- example = MyModel.objects.get(pk=1)
- print example.hand.north
-
- new_hand = Hand(north, east, south, west)
- example.hand = new_hand
- example.save()
-
-We assign to and retrieve from the ``hand`` attribute in our model just like
-any other Python class. The trick is to tell Django how to handle saving and
-loading such an object.
-
-In order to use the ``Hand`` class in our models, we **do not** have to change
-this class at all. This is ideal, because it means you can easily write
-model support for existing classes where you cannot change the source code.
-
-.. note::
- You might only be wanting to take advantage of custom database column
- types and deal with the data as standard Python types in your models;
- strings, or floats, for example. This case is similar to our ``Hand``
- example and we'll note any differences as we go along.
-
-Background theory
-=================
-
-Database storage
-----------------
-
-The simplest way to think of a model field is that it provides a way to take a
-normal Python object -- string, boolean, ``datetime``, or something more
-complex like ``Hand`` -- and convert it to and from a format that is useful
-when dealing with the database (and serialization, but, as we'll see later,
-that falls out fairly naturally once you have the database side under control).
-
-Fields in a model must somehow be converted to fit into an existing database
-column type. Different databases provide different sets of valid column types,
-but the rule is still the same: those are the only types you have to work
-with. Anything you want to store in the database must fit into one of
-those types.
-
-Normally, you're either writing a Django field to match a particular database
-column type, or there's a fairly straightforward way to convert your data to,
-say, a string.
-
-For our ``Hand`` example, we could convert the card data to a string of 104
-characters by concatenating all the cards together in a pre-determined order --
-say, all the *north* cards first, then the *east*, *south* and *west* cards. So
-``Hand`` objects can be saved to text or character columns in the database.
-
-What does a field class do?
----------------------------
-
-All of Django's fields (and when we say *fields* in this document, we always
-mean model fields and not :doc:`form fields </ref/forms/fields>`) are subclasses
-of :class:`django.db.models.Field`. Most of the information that Django records
-about a field is common to all fields -- name, help text, uniqueness and so
-forth. Storing all that information is handled by ``Field``. We'll get into the
-precise details of what ``Field`` can do later on; for now, suffice it to say
-that everything descends from ``Field`` and then customizes key pieces of the
-class behavior.
-
-It's important to realize that a Django field class is not what is stored in
-your model attributes. The model attributes contain normal Python objects. The
-field classes you define in a model are actually stored in the ``Meta`` class
-when the model class is created (the precise details of how this is done are
-unimportant here). This is because the field classes aren't necessary when
-you're just creating and modifying attributes. Instead, they provide the
-machinery for converting between the attribute value and what is stored in the
-database or sent to the :doc:`serializer </topics/serialization>`.
-
-Keep this in mind when creating your own custom fields. The Django ``Field``
-subclass you write provides the machinery for converting between your Python
-instances and the database/serializer values in various ways (there are
-differences between storing a value and using a value for lookups, for
-example). If this sounds a bit tricky, don't worry -- it will become clearer in
-the examples below. Just remember that you will often end up creating two
-classes when you want a custom field:
-
- * The first class is the Python object that your users will manipulate.
- They will assign it to the model attribute, they will read from it for
- displaying purposes, things like that. This is the ``Hand`` class in our
- example.
-
- * The second class is the ``Field`` subclass. This is the class that knows
- how to convert your first class back and forth between its permanent
- storage form and the Python form.
-
-Writing a field subclass
-========================
-
-When planning your :class:`~django.db.models.Field` subclass, first give some
-thought to which existing :class:`~django.db.models.Field` class your new field
-is most similar to. Can you subclass an existing Django field and save yourself
-some work? If not, you should subclass the :class:`~django.db.models.Field`
-class, from which everything is descended.
-
-Initializing your new field is a matter of separating out any arguments that are
-specific to your case from the common arguments and passing the latter to the
-:meth:`~django.db.models.Field.__init__` method of
-:class:`~django.db.models.Field` (or your parent class).
-
-In our example, we'll call our field ``HandField``. (It's a good idea to call
-your :class:`~django.db.models.Field` subclass ``<Something>Field``, so it's
-easily identifiable as a :class:`~django.db.models.Field` subclass.) It doesn't
-behave like any existing field, so we'll subclass directly from
-:class:`~django.db.models.Field`::
-
- from django.db import models
-
- class HandField(models.Field):
-
- description = "A hand of cards (bridge style)"
-
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = 104
- super(HandField, self).__init__(*args, **kwargs)
-
-Our ``HandField`` accepts most of the standard field options (see the list
-below), but we ensure it has a fixed length, since it only needs to hold 52
-card values plus their suits; 104 characters in total.
-
-.. note::
- Many of Django's model fields accept options that they don't do anything
- with. For example, you can pass both
- :attr:`~django.db.models.Field.editable` and
- :attr:`~django.db.models.Field.auto_now` to a
- :class:`django.db.models.DateField` and it will simply ignore the
- :attr:`~django.db.models.Field.editable` parameter
- (:attr:`~django.db.models.Field.auto_now` being set implies
- ``editable=False``). No error is raised in this case.
-
- This behavior simplifies the field classes, because they don't need to
- check for options that aren't necessary. They just pass all the options to
- the parent class and then don't use them later on. It's up to you whether
- you want your fields to be more strict about the options they select, or
- to use the simpler, more permissive behavior of the current fields.
-
-The :meth:`~django.db.models.Field.__init__` method takes the following
-parameters:
-
- * :attr:`~django.db.models.Field.verbose_name`
- * :attr:`~django.db.models.Field.name`
- * :attr:`~django.db.models.Field.primary_key`
- * :attr:`~django.db.models.Field.max_length`
- * :attr:`~django.db.models.Field.unique`
- * :attr:`~django.db.models.Field.blank`
- * :attr:`~django.db.models.Field.null`
- * :attr:`~django.db.models.Field.db_index`
- * :attr:`~django.db.models.Field.rel`: Used for related fields (like
- :class:`ForeignKey`). For advanced use only.
- * :attr:`~django.db.models.Field.default`
- * :attr:`~django.db.models.Field.editable`
- * :attr:`~django.db.models.Field.serialize`: If ``False``, the field will
- not be serialized when the model is passed to Django's :doc:`serializers
- </topics/serialization>`. Defaults to ``True``.
- * :attr:`~django.db.models.Field.unique_for_date`
- * :attr:`~django.db.models.Field.unique_for_month`
- * :attr:`~django.db.models.Field.unique_for_year`
- * :attr:`~django.db.models.Field.choices`
- * :attr:`~django.db.models.Field.help_text`
- * :attr:`~django.db.models.Field.db_column`
- * :attr:`~django.db.models.Field.db_tablespace`: Currently only used with
- the Oracle backend and only for index creation. You can usually ignore
- this option.
- * :attr:`~django.db.models.Field.auto_created`: True if the field was
- automatically created, as for the `OneToOneField` used by model
- inheritance. For advanced use only.
-
-All of the options without an explanation in the above list have the same
-meaning they do for normal Django fields. See the :doc:`field documentation
-</ref/models/fields>` for examples and details.
-
-The ``SubfieldBase`` metaclass
-------------------------------
-
-As we indicated in the introduction_, field subclasses are often needed for
-two reasons: either to take advantage of a custom database column type, or to
-handle complex Python types. Obviously, a combination of the two is also
-possible. If you're only working with custom database column types and your
-model fields appear in Python as standard Python types direct from the
-database backend, you don't need to worry about this section.
-
-If you're handling custom Python types, such as our ``Hand`` class, we need to
-make sure that when Django initializes an instance of our model and assigns a
-database value to our custom field attribute, we convert that value into the
-appropriate Python object. The details of how this happens internally are a
-little complex, but the code you need to write in your ``Field`` class is
-simple: make sure your field subclass uses a special metaclass:
-
-.. class:: django.db.models.SubfieldBase
-
-For example::
-
- class HandField(models.Field):
-
- description = "A hand of cards (bridge style)"
-
- __metaclass__ = models.SubfieldBase
-
- def __init__(self, *args, **kwargs):
- # ...
-
-This ensures that the :meth:`to_python` method, documented below, will always be
-called when the attribute is initialized.
-
-ModelForms and custom fields
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you use :class:`~django.db.models.SubfieldBase`, :meth:`to_python`
-will be called every time an instance of the field is assigned a
-value. This means that whenever a value may be assigned to the field,
-you need to ensure that it will be of the correct datatype, or that
-you handle any exceptions.
-
-This is especially important if you use :doc:`ModelForms
-</topics/forms/modelforms>`. When saving a ModelForm, Django will use
-form values to instantiate model instances. However, if the cleaned
-form data can't be used as valid input to the field, the normal form
-validation process will break.
-
-Therefore, you must ensure that the form field used to represent your
-custom field performs whatever input validation and data cleaning is
-necessary to convert user-provided form input into a
-`to_python()`-compatible model field value. This may require writing a
-custom form field, and/or implementing the :meth:`formfield` method on
-your field to return a form field class whose `to_python()` returns the
-correct datatype.
-
-Documenting your Custom Field
------------------------------
-
-.. class:: django.db.models.Field
-
-.. attribute:: description
-
-As always, you should document your field type, so users will know what it is.
-In addition to providing a docstring for it, which is useful for developers,
-you can also allow users of the admin app to see a short description of the
-field type via the :doc:`django.contrib.admindocs
-</ref/contrib/admin/admindocs>` application. To do this simply provide
-descriptive text in a ``description`` class attribute of your custom field. In
-the above example, the type description displayed by the ``admindocs``
-application for a ``HandField`` will be 'A hand of cards (bridge style)'.
-
-Useful methods
---------------
-
-Once you've created your :class:`~django.db.models.Field` subclass and set up
-the ``__metaclass__``, you might consider overriding a few standard methods,
-depending on your field's behavior. The list of methods below is in
-approximately decreasing order of importance, so start from the top.
-
-Custom database types
-~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: db_type(self, connection)
-
-.. versionadded:: 1.2
- The ``connection`` argument was added to support multiple databases.
-
-Returns the database column data type for the :class:`~django.db.models.Field`,
-taking into account the connection object, and the settings associated with it.
-
-Say you've created a PostgreSQL custom type called ``mytype``. You can use this
-field with Django by subclassing ``Field`` and implementing the :meth:`db_type`
-method, like so::
-
- from django.db import models
-
- class MytypeField(models.Field):
- def db_type(self, connection):
- return 'mytype'
-
-Once you have ``MytypeField``, you can use it in any model, just like any other
-``Field`` type::
-
- class Person(models.Model):
- name = models.CharField(max_length=80)
- gender = models.CharField(max_length=1)
- something_else = MytypeField()
-
-If you aim to build a database-agnostic application, you should account for
-differences in database column types. For example, the date/time column type
-in PostgreSQL is called ``timestamp``, while the same column in MySQL is called
-``datetime``. The simplest way to handle this in a ``db_type()`` method is to
-check the ``connection.settings_dict['ENGINE']`` attribute.
-
-For example::
-
- class MyDateField(models.Field):
- def db_type(self, connection):
- if connection.settings_dict['ENGINE'] == 'django.db.backends.mysql':
- return 'datetime'
- else:
- return 'timestamp'
-
-The :meth:`db_type` method is only called by Django when the framework
-constructs the ``CREATE TABLE`` statements for your application -- that is, when
-you first create your tables. It's not called at any other time, so it can
-afford to execute slightly complex code, such as the ``connection.settings_dict``
-check in the above example.
-
-Some database column types accept parameters, such as ``CHAR(25)``, where the
-parameter ``25`` represents the maximum column length. In cases like these,
-it's more flexible if the parameter is specified in the model rather than being
-hard-coded in the ``db_type()`` method. For example, it wouldn't make much
-sense to have a ``CharMaxlength25Field``, shown here::
-
- # This is a silly example of hard-coded parameters.
- class CharMaxlength25Field(models.Field):
- def db_type(self, connection):
- return 'char(25)'
-
- # In the model:
- class MyModel(models.Model):
- # ...
- my_field = CharMaxlength25Field()
-
-The better way of doing this would be to make the parameter specifiable at run
-time -- i.e., when the class is instantiated. To do that, just implement
-:meth:`django.db.models.Field.__init__`, like so::
-
- # This is a much more flexible example.
- class BetterCharField(models.Field):
- def __init__(self, max_length, *args, **kwargs):
- self.max_length = max_length
- super(BetterCharField, self).__init__(*args, **kwargs)
-
- def db_type(self, connection):
- return 'char(%s)' % self.max_length
-
- # In the model:
- class MyModel(models.Model):
- # ...
- my_field = BetterCharField(25)
-
-Finally, if your column requires truly complex SQL setup, return ``None`` from
-:meth:`db_type`. This will cause Django's SQL creation code to skip over this
-field. You are then responsible for creating the column in the right table in
-some other way, of course, but this gives you a way to tell Django to get out of
-the way.
-
-Converting database values to Python objects
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: to_python(self, value)
-
-Converts a value as returned by your database (or a serializer) to a Python
-object.
-
-The default implementation simply returns ``value``, for the common case in
-which the database backend already returns data in the correct format (as a
-Python string, for example).
-
-If your custom :class:`~django.db.models.Field` class deals with data structures
-that are more complex than strings, dates, integers or floats, then you'll need
-to override this method. As a general rule, the method should deal gracefully
-with any of the following arguments:
-
- * An instance of the correct type (e.g., ``Hand`` in our ongoing example).
-
- * A string (e.g., from a deserializer).
-
- * Whatever the database returns for the column type you're using.
-
-In our ``HandField`` class, we're storing the data as a VARCHAR field in the
-database, so we need to be able to process strings and ``Hand`` instances in
-:meth:`to_python`::
-
- import re
-
- class HandField(models.Field):
- # ...
-
- def to_python(self, value):
- if isinstance(value, Hand):
- return value
-
- # The string case.
- p1 = re.compile('.{26}')
- p2 = re.compile('..')
- args = [p2.findall(x) for x in p1.findall(value)]
- return Hand(*args)
-
-Notice that we always return a ``Hand`` instance from this method. That's the
-Python object type we want to store in the model's attribute.
-
-**Remember:** If your custom field needs the :meth:`to_python` method to be
-called when it is created, you should be using `The SubfieldBase metaclass`_
-mentioned earlier. Otherwise :meth:`to_python` won't be called automatically.
-
-Converting Python objects to query values
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: get_prep_value(self, value)
-
-.. versionadded:: 1.2
- This method was factored out of ``get_db_prep_value()``
-
-This is the reverse of :meth:`to_python` when working with the
-database backends (as opposed to serialization). The ``value``
-parameter is the current value of the model's attribute (a field has
-no reference to its containing model, so it cannot retrieve the value
-itself), and the method should return data in a format that has been
-prepared for use as a parameter in a query.
-
-This conversion should *not* include any database-specific
-conversions. If database-specific conversions are required, they
-should be made in the call to :meth:`get_db_prep_value`.
-
-For example::
-
- class HandField(models.Field):
- # ...
-
- def get_prep_value(self, value):
- return ''.join([''.join(l) for l in (value.north,
- value.east, value.south, value.west)])
-
-Converting query values to database values
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: get_db_prep_value(self, value, connection, prepared=False)
-
-.. versionadded:: 1.2
- The ``connection`` and ``prepared`` arguments were added to support multiple databases.
-
-Some data types (for example, dates) need to be in a specific format
-before they can be used by a database backend.
-:meth:`get_db_prep_value` is the method where those conversions should
-be made. The specific connection that will be used for the query is
-passed as the ``connection`` parameter. This allows you to use
-backend-specific conversion logic if it is required.
-
-The ``prepared`` argument describes whether or not the value has
-already been passed through :meth:`get_prep_value` conversions. When
-``prepared`` is False, the default implementation of
-:meth:`get_db_prep_value` will call :meth:`get_prep_value` to do
-initial data conversions before performing any database-specific
-processing.
-
-.. method:: get_db_prep_save(self, value, connection)
-
-.. versionadded:: 1.2
- The ``connection`` argument was added to support multiple databases.
-
-Same as the above, but called when the Field value must be *saved* to
-the database. As the default implementation just calls
-``get_db_prep_value``, you shouldn't need to implement this method
-unless your custom field needs a special conversion when being saved
-that is not the same as the conversion used for normal query
-parameters (which is implemented by ``get_db_prep_value``).
-
-Preprocessing values before saving
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: pre_save(self, model_instance, add)
-
-This method is called just prior to :meth:`get_db_prep_save` and should return
-the value of the appropriate attribute from ``model_instance`` for this field.
-The attribute name is in ``self.attname`` (this is set up by
-:class:`~django.db.models.Field`). If the model is being saved to the database
-for the first time, the ``add`` parameter will be ``True``, otherwise it will be
-``False``.
-
-You only need to override this method if you want to preprocess the value
-somehow, just before saving. For example, Django's
-:class:`~django.db.models.DateTimeField` uses this method to set the attribute
-correctly in the case of :attr:`~django.db.models.Field.auto_now` or
-:attr:`~django.db.models.Field.auto_now_add`.
-
-If you do override this method, you must return the value of the attribute at
-the end. You should also update the model's attribute if you make any changes
-to the value so that code holding references to the model will always see the
-correct value.
-
-Preparing values for use in database lookups
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-As with value conversions, preparing a value for database lookups is a
-two phase process.
-
-.. method:: get_prep_lookup(self, lookup_type, value)
-
-.. versionadded:: 1.2
- This method was factored out of ``get_db_prep_lookup()``
-
-:meth:`get_prep_lookup` performs the first phase of lookup preparation,
-performing generic data validity checks
-
-Prepares the ``value`` for passing to the database when used in a lookup (a
-``WHERE`` constraint in SQL). The ``lookup_type`` will be one of the valid
-Django filter lookups: ``exact``, ``iexact``, ``contains``, ``icontains``,
-``gt``, ``gte``, ``lt``, ``lte``, ``in``, ``startswith``, ``istartswith``,
-``endswith``, ``iendswith``, ``range``, ``year``, ``month``, ``day``,
-``isnull``, ``search``, ``regex``, and ``iregex``.
-
-Your method must be prepared to handle all of these ``lookup_type`` values and
-should raise either a ``ValueError`` if the ``value`` is of the wrong sort (a
-list when you were expecting an object, for example) or a ``TypeError`` if
-your field does not support that type of lookup. For many fields, you can get
-by with handling the lookup types that need special handling for your field
-and pass the rest to the :meth:`get_db_prep_lookup` method of the parent class.
-
-If you needed to implement ``get_db_prep_save()``, you will usually need to
-implement ``get_prep_lookup()``. If you don't, ``get_prep_value`` will be
-called by the default implementation, to manage ``exact``, ``gt``, ``gte``,
-``lt``, ``lte``, ``in`` and ``range`` lookups.
-
-You may also want to implement this method to limit the lookup types that could
-be used with your custom field type.
-
-Note that, for ``range`` and ``in`` lookups, ``get_prep_lookup`` will receive
-a list of objects (presumably of the right type) and will need to convert them
-to a list of things of the right type for passing to the database. Most of the
-time, you can reuse ``get_prep_value()``, or at least factor out some common
-pieces.
-
-For example, the following code implements ``get_prep_lookup`` to limit the
-accepted lookup types to ``exact`` and ``in``::
-
- class HandField(models.Field):
- # ...
-
- def get_prep_lookup(self, lookup_type, value):
- # We only handle 'exact' and 'in'. All others are errors.
- if lookup_type == 'exact':
- return self.get_prep_value(value)
- elif lookup_type == 'in':
- return [self.get_prep_value(v) for v in value]
- else:
- raise TypeError('Lookup type %r not supported.' % lookup_type)
-
-.. method:: get_db_prep_lookup(self, lookup_type, value, connection, prepared=False)
-
-.. versionadded:: 1.2
- The ``connection`` and ``prepared`` arguments were added to support multiple databases.
-
-Performs any database-specific data conversions required by a lookup.
-As with :meth:`get_db_prep_value`, the specific connection that will
-be used for the query is passed as the ``connection`` parameter.
-The ``prepared`` argument describes whether the value has already been
-prepared with :meth:`get_prep_lookup`.
-
-Specifying the form field for a model field
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: formfield(self, form_class=forms.CharField, **kwargs)
-
-Returns the default form field to use when this field is displayed in a model.
-This method is called by the :class:`~django.forms.ModelForm` helper.
-
-All of the ``kwargs`` dictionary is passed directly to the form field's
-:meth:`~django.forms.Field__init__` method. Normally, all you need to do is
-set up a good default for the ``form_class`` argument and then delegate further
-handling to the parent class. This might require you to write a custom form
-field (and even a form widget). See the :doc:`forms documentation
-</topics/forms/index>` for information about this, and take a look at the code in
-:mod:`django.contrib.localflavor` for some examples of custom widgets.
-
-Continuing our ongoing example, we can write the :meth:`formfield` method as::
-
- class HandField(models.Field):
- # ...
-
- def formfield(self, **kwargs):
- # This is a fairly standard way to set up some defaults
- # while letting the caller override them.
- defaults = {'form_class': MyFormField}
- defaults.update(kwargs)
- return super(HandField, self).formfield(**defaults)
-
-This assumes we've imported a ``MyFormField`` field class (which has its own
-default widget). This document doesn't cover the details of writing custom form
-fields.
-
-.. _helper functions: ../forms/#generating-forms-for-models
-.. _forms documentation: ../forms/
-
-Emulating built-in field types
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: get_internal_type(self)
-
-Returns a string giving the name of the :class:`~django.db.models.Field`
-subclass we are emulating at the database level. This is used to determine the
-type of database column for simple cases.
-
-If you have created a :meth:`db_type` method, you don't need to worry about
-:meth:`get_internal_type` -- it won't be used much. Sometimes, though, your
-database storage is similar in type to some other field, so you can use that
-other field's logic to create the right column.
-
-For example::
-
- class HandField(models.Field):
- # ...
-
- def get_internal_type(self):
- return 'CharField'
-
-No matter which database backend we are using, this will mean that ``syncdb``
-and other SQL commands create the right column type for storing a string.
-
-If :meth:`get_internal_type` returns a string that is not known to Django for
-the database backend you are using -- that is, it doesn't appear in
-``django.db.backends.<db_name>.creation.DATA_TYPES`` -- the string will still be
-used by the serializer, but the default :meth:`db_type` method will return
-``None``. See the documentation of :meth:`db_type` for reasons why this might be
-useful. Putting a descriptive string in as the type of the field for the
-serializer is a useful idea if you're ever going to be using the serializer
-output in some other place, outside of Django.
-
-Converting field data for serialization
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: value_to_string(self, obj)
-
-This method is used by the serializers to convert the field into a string for
-output. Calling :meth:`Field._get_val_from_obj(obj)` is the best way to get the
-value to serialize. For example, since our ``HandField`` uses strings for its
-data storage anyway, we can reuse some existing conversion code::
-
- class HandField(models.Field):
- # ...
-
- def value_to_string(self, obj):
- value = self._get_val_from_obj(obj)
- return self.get_db_prep_value(value)
-
-Some general advice
---------------------
-
-Writing a custom field can be a tricky process, particularly if you're doing
-complex conversions between your Python types and your database and
-serialization formats. Here are a couple of tips to make things go more
-smoothly:
-
- 1. Look at the existing Django fields (in
- :file:`django/db/models/fields/__init__.py`) for inspiration. Try to find
- a field that's similar to what you want and extend it a little bit,
- instead of creating an entirely new field from scratch.
-
- 2. Put a :meth:`__str__` or :meth:`__unicode__` method on the class you're
- wrapping up as a field. There are a lot of places where the default
- behavior of the field code is to call
- :func:`~django.utils.encoding.force_unicode` on the value. (In our
- examples in this document, ``value`` would be a ``Hand`` instance, not a
- ``HandField``). So if your :meth:`__unicode__` method automatically
- converts to the string form of your Python object, you can save yourself
- a lot of work.
-
-
-Writing a ``FileField`` subclass
-=================================
-
-In addition to the above methods, fields that deal with files have a few other
-special requirements which must be taken into account. The majority of the
-mechanics provided by ``FileField``, such as controlling database storage and
-retrieval, can remain unchanged, leaving subclasses to deal with the challenge
-of supporting a particular type of file.
-
-Django provides a ``File`` class, which is used as a proxy to the file's
-contents and operations. This can be subclassed to customize how the file is
-accessed, and what methods are available. It lives at
-``django.db.models.fields.files``, and its default behavior is explained in the
-:doc:`file documentation </ref/files/file>`.
-
-Once a subclass of ``File`` is created, the new ``FileField`` subclass must be
-told to use it. To do so, simply assign the new ``File`` subclass to the special
-``attr_class`` attribute of the ``FileField`` subclass.
-
-A few suggestions
-------------------
-
-In addition to the above details, there are a few guidelines which can greatly
-improve the efficiency and readability of the field's code.
-
- 1. The source for Django's own ``ImageField`` (in
- ``django/db/models/fields/files.py``) is a great example of how to
- subclass ``FileField`` to support a particular type of file, as it
- incorporates all of the techniques described above.
-
- 2. Cache file attributes wherever possible. Since files may be stored in
- remote storage systems, retrieving them may cost extra time, or even
- money, that isn't always necessary. Once a file is retrieved to obtain
- some data about its content, cache as much of that data as possible to
- reduce the number of times the file must be retrieved on subsequent
- calls for that information.
diff --git a/parts/django/docs/howto/custom-template-tags.txt b/parts/django/docs/howto/custom-template-tags.txt
deleted file mode 100644
index 95ce274..0000000
--- a/parts/django/docs/howto/custom-template-tags.txt
+++ /dev/null
@@ -1,939 +0,0 @@
-================================
-Custom template tags and filters
-================================
-
-Introduction
-============
-
-Django's template system comes with a wide variety of :doc:`built-in
-tags and filters </ref/templates/builtins>` designed to address the
-presentation logic needs of your application. Nevertheless, you may
-find yourself needing functionality that is not covered by the core
-set of template primitives. You can extend the template engine by
-defining custom tags and filters using Python, and then make them
-available to your templates using the ``{% load %}`` tag.
-
-Code layout
------------
-
-Custom template tags and filters must live inside a Django app. If they relate
-to an existing app it makes sense to bundle them there; otherwise, you should
-create a new app to hold them.
-
-The app should contain a ``templatetags`` directory, at the same level as
-``models.py``, ``views.py``, etc. If this doesn't already exist, create it -
-don't forget the ``__init__.py`` file to ensure the directory is treated as a
-Python package.
-
-Your custom tags and filters will live in a module inside the ``templatetags``
-directory. The name of the module file is the name you'll use to load the tags
-later, so be careful to pick a name that won't clash with custom tags and
-filters in another app.
-
-For example, if your custom tags/filters are in a file called
-``poll_extras.py``, your app layout might look like this::
-
- polls/
- models.py
- templatetags/
- __init__.py
- poll_extras.py
- views.py
-
-And in your template you would use the following:
-
-.. code-block:: html+django
-
- {% load poll_extras %}
-
-The app that contains the custom tags must be in :setting:`INSTALLED_APPS` in
-order for the ``{% load %}`` tag to work. This is a security feature: It allows
-you to host Python code for many template libraries on a single host machine
-without enabling access to all of them for every Django installation.
-
-There's no limit on how many modules you put in the ``templatetags`` package.
-Just keep in mind that a ``{% load %}`` statement will load tags/filters for
-the given Python module name, not the name of the app.
-
-To be a valid tag library, the module must contain a module-level variable
-named ``register`` that is a ``template.Library`` instance, in which all the
-tags and filters are registered. So, near the top of your module, put the
-following::
-
- from django import template
-
- register = template.Library()
-
-.. admonition:: Behind the scenes
-
- For a ton of examples, read the source code for Django's default filters
- and tags. They're in ``django/template/defaultfilters.py`` and
- ``django/template/defaulttags.py``, respectively.
-
-Writing custom template filters
--------------------------------
-
-Custom filters are just Python functions that take one or two arguments:
-
- * The value of the variable (input) -- not necessarily a string.
- * The value of the argument -- this can have a default value, or be left
- out altogether.
-
-For example, in the filter ``{{ var|foo:"bar" }}``, the filter ``foo`` would be
-passed the variable ``var`` and the argument ``"bar"``.
-
-Filter functions should always return something. They shouldn't raise
-exceptions. They should fail silently. In case of error, they should return
-either the original input or an empty string -- whichever makes more sense.
-
-Here's an example filter definition::
-
- def cut(value, arg):
- "Removes all values of arg from the given string"
- return value.replace(arg, '')
-
-And here's an example of how that filter would be used:
-
-.. code-block:: html+django
-
- {{ somevariable|cut:"0" }}
-
-Most filters don't take arguments. In this case, just leave the argument out of
-your function. Example::
-
- def lower(value): # Only one argument.
- "Converts a string into all lowercase"
- return value.lower()
-
-Template filters that expect strings
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you're writing a template filter that only expects a string as the first
-argument, you should use the decorator ``stringfilter``. This will
-convert an object to its string value before being passed to your function::
-
- from django.template.defaultfilters import stringfilter
-
- @stringfilter
- def lower(value):
- return value.lower()
-
-This way, you'll be able to pass, say, an integer to this filter, and it
-won't cause an ``AttributeError`` (because integers don't have ``lower()``
-methods).
-
-Registering custom filters
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Once you've written your filter definition, you need to register it with
-your ``Library`` instance, to make it available to Django's template language::
-
- register.filter('cut', cut)
- register.filter('lower', lower)
-
-The ``Library.filter()`` method takes two arguments:
-
- 1. The name of the filter -- a string.
- 2. The compilation function -- a Python function (not the name of the
- function as a string).
-
-You can use ``register.filter()`` as a decorator instead::
-
- @register.filter(name='cut')
- @stringfilter
- def cut(value, arg):
- return value.replace(arg, '')
-
- @register.filter
- @stringfilter
- def lower(value):
- return value.lower()
-
-If you leave off the ``name`` argument, as in the second example above, Django
-will use the function's name as the filter name.
-
-Filters and auto-escaping
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-When writing a custom filter, give some thought to how the filter will interact
-with Django's auto-escaping behavior. Note that three types of strings can be
-passed around inside the template code:
-
- * **Raw strings** are the native Python ``str`` or ``unicode`` types. On
- output, they're escaped if auto-escaping is in effect and presented
- unchanged, otherwise.
-
- * **Safe strings** are strings that have been marked safe from further
- escaping at output time. Any necessary escaping has already been done.
- They're commonly used for output that contains raw HTML that is intended
- to be interpreted as-is on the client side.
-
- Internally, these strings are of type ``SafeString`` or ``SafeUnicode``.
- They share a common base class of ``SafeData``, so you can test
- for them using code like::
-
- if isinstance(value, SafeData):
- # Do something with the "safe" string.
-
- * **Strings marked as "needing escaping"** are *always* escaped on
- output, regardless of whether they are in an ``autoescape`` block or not.
- These strings are only escaped once, however, even if auto-escaping
- applies.
-
- Internally, these strings are of type ``EscapeString`` or
- ``EscapeUnicode``. Generally you don't have to worry about these; they
- exist for the implementation of the ``escape`` filter.
-
-Template filter code falls into one of two situations:
-
- 1. Your filter does not introduce any HTML-unsafe characters (``<``, ``>``,
- ``'``, ``"`` or ``&``) into the result that were not already present. In
- this case, you can let Django take care of all the auto-escaping
- handling for you. All you need to do is put the ``is_safe`` attribute on
- your filter function and set it to ``True``, like so::
-
- @register.filter
- def myfilter(value):
- return value
- myfilter.is_safe = True
-
- This attribute tells Django that if a "safe" string is passed into your
- filter, the result will still be "safe" and if a non-safe string is
- passed in, Django will automatically escape it, if necessary.
-
- You can think of this as meaning "this filter is safe -- it doesn't
- introduce any possibility of unsafe HTML."
-
- The reason ``is_safe`` is necessary is because there are plenty of
- normal string operations that will turn a ``SafeData`` object back into
- a normal ``str`` or ``unicode`` object and, rather than try to catch
- them all, which would be very difficult, Django repairs the damage after
- the filter has completed.
-
- For example, suppose you have a filter that adds the string ``xx`` to the
- end of any input. Since this introduces no dangerous HTML characters to
- the result (aside from any that were already present), you should mark
- your filter with ``is_safe``::
-
- @register.filter
- def add_xx(value):
- return '%sxx' % value
- add_xx.is_safe = True
-
- When this filter is used in a template where auto-escaping is enabled,
- Django will escape the output whenever the input is not already marked as
- "safe".
-
- By default, ``is_safe`` defaults to ``False``, and you can omit it from
- any filters where it isn't required.
-
- Be careful when deciding if your filter really does leave safe strings
- as safe. If you're *removing* characters, you might inadvertently leave
- unbalanced HTML tags or entities in the result. For example, removing a
- ``>`` from the input might turn ``<a>`` into ``<a``, which would need to
- be escaped on output to avoid causing problems. Similarly, removing a
- semicolon (``;``) can turn ``&amp;`` into ``&amp``, which is no longer a
- valid entity and thus needs further escaping. Most cases won't be nearly
- this tricky, but keep an eye out for any problems like that when
- reviewing your code.
-
- Marking a filter ``is_safe`` will coerce the filter's return value to
- a string. If your filter should return a boolean or other non-string
- value, marking it ``is_safe`` will probably have unintended
- consequences (such as converting a boolean False to the string
- 'False').
-
- 2. Alternatively, your filter code can manually take care of any necessary
- escaping. This is necessary when you're introducing new HTML markup into
- the result. You want to mark the output as safe from further
- escaping so that your HTML markup isn't escaped further, so you'll need
- to handle the input yourself.
-
- To mark the output as a safe string, use
- :func:`django.utils.safestring.mark_safe`.
-
- Be careful, though. You need to do more than just mark the output as
- safe. You need to ensure it really *is* safe, and what you do depends on
- whether auto-escaping is in effect. The idea is to write filters than
- can operate in templates where auto-escaping is either on or off in
- order to make things easier for your template authors.
-
- In order for your filter to know the current auto-escaping state, set
- the ``needs_autoescape`` attribute to ``True`` on your function. (If you
- don't specify this attribute, it defaults to ``False``). This attribute
- tells Django that your filter function wants to be passed an extra
- keyword argument, called ``autoescape``, that is ``True`` if
- auto-escaping is in effect and ``False`` otherwise.
-
- For example, let's write a filter that emphasizes the first character of
- a string::
-
- from django.utils.html import conditional_escape
- from django.utils.safestring import mark_safe
-
- def initial_letter_filter(text, autoescape=None):
- first, other = text[0], text[1:]
- if autoescape:
- esc = conditional_escape
- else:
- esc = lambda x: x
- result = '<strong>%s</strong>%s' % (esc(first), esc(other))
- return mark_safe(result)
- initial_letter_filter.needs_autoescape = True
-
- The ``needs_autoescape`` attribute on the filter function and the
- ``autoescape`` keyword argument mean that our function will know whether
- automatic escaping is in effect when the filter is called. We use
- ``autoescape`` to decide whether the input data needs to be passed
- through ``django.utils.html.conditional_escape`` or not. (In the latter
- case, we just use the identity function as the "escape" function.) The
- ``conditional_escape()`` function is like ``escape()`` except it only
- escapes input that is **not** a ``SafeData`` instance. If a ``SafeData``
- instance is passed to ``conditional_escape()``, the data is returned
- unchanged.
-
- Finally, in the above example, we remember to mark the result as safe
- so that our HTML is inserted directly into the template without further
- escaping.
-
- There's no need to worry about the ``is_safe`` attribute in this case
- (although including it wouldn't hurt anything). Whenever you manually
- handle the auto-escaping issues and return a safe string, the
- ``is_safe`` attribute won't change anything either way.
-
-Writing custom template tags
-----------------------------
-
-Tags are more complex than filters, because tags can do anything.
-
-A quick overview
-~~~~~~~~~~~~~~~~
-
-Above, this document explained that the template system works in a two-step
-process: compiling and rendering. To define a custom template tag, you specify
-how the compilation works and how the rendering works.
-
-When Django compiles a template, it splits the raw template text into
-''nodes''. Each node is an instance of ``django.template.Node`` and has
-a ``render()`` method. A compiled template is, simply, a list of ``Node``
-objects. When you call ``render()`` on a compiled template object, the template
-calls ``render()`` on each ``Node`` in its node list, with the given context.
-The results are all concatenated together to form the output of the template.
-
-Thus, to define a custom template tag, you specify how the raw template tag is
-converted into a ``Node`` (the compilation function), and what the node's
-``render()`` method does.
-
-Writing the compilation function
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-For each template tag the template parser encounters, it calls a Python
-function with the tag contents and the parser object itself. This function is
-responsible for returning a ``Node`` instance based on the contents of the tag.
-
-For example, let's write a template tag, ``{% current_time %}``, that displays
-the current date/time, formatted according to a parameter given in the tag, in
-`strftime syntax`_. It's a good idea to decide the tag syntax before anything
-else. In our case, let's say the tag should be used like this:
-
-.. code-block:: html+django
-
- <p>The time is {% current_time "%Y-%m-%d %I:%M %p" %}.</p>
-
-.. _`strftime syntax`: http://docs.python.org/library/time.html#time.strftime
-
-The parser for this function should grab the parameter and create a ``Node``
-object::
-
- from django import template
- def do_current_time(parser, token):
- try:
- # split_contents() knows not to split quoted strings.
- tag_name, format_string = token.split_contents()
- except ValueError:
- raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents.split()[0]
- if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")):
- raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
- return CurrentTimeNode(format_string[1:-1])
-
-Notes:
-
- * ``parser`` is the template parser object. We don't need it in this
- example.
-
- * ``token.contents`` is a string of the raw contents of the tag. In our
- example, it's ``'current_time "%Y-%m-%d %I:%M %p"'``.
-
- * The ``token.split_contents()`` method separates the arguments on spaces
- while keeping quoted strings together. The more straightforward
- ``token.contents.split()`` wouldn't be as robust, as it would naively
- split on *all* spaces, including those within quoted strings. It's a good
- idea to always use ``token.split_contents()``.
-
- * This function is responsible for raising
- ``django.template.TemplateSyntaxError``, with helpful messages, for
- any syntax error.
-
- * The ``TemplateSyntaxError`` exceptions use the ``tag_name`` variable.
- Don't hard-code the tag's name in your error messages, because that
- couples the tag's name to your function. ``token.contents.split()[0]``
- will ''always'' be the name of your tag -- even when the tag has no
- arguments.
-
- * The function returns a ``CurrentTimeNode`` with everything the node needs
- to know about this tag. In this case, it just passes the argument --
- ``"%Y-%m-%d %I:%M %p"``. The leading and trailing quotes from the
- template tag are removed in ``format_string[1:-1]``.
-
- * The parsing is very low-level. The Django developers have experimented
- with writing small frameworks on top of this parsing system, using
- techniques such as EBNF grammars, but those experiments made the template
- engine too slow. It's low-level because that's fastest.
-
-Writing the renderer
-~~~~~~~~~~~~~~~~~~~~
-
-The second step in writing custom tags is to define a ``Node`` subclass that
-has a ``render()`` method.
-
-Continuing the above example, we need to define ``CurrentTimeNode``::
-
- from django import template
- import datetime
- class CurrentTimeNode(template.Node):
- def __init__(self, format_string):
- self.format_string = format_string
- def render(self, context):
- return datetime.datetime.now().strftime(self.format_string)
-
-Notes:
-
- * ``__init__()`` gets the ``format_string`` from ``do_current_time()``.
- Always pass any options/parameters/arguments to a ``Node`` via its
- ``__init__()``.
-
- * The ``render()`` method is where the work actually happens.
-
- * ``render()`` should never raise ``TemplateSyntaxError`` or any other
- exception. It should fail silently, just as template filters should.
-
-Ultimately, this decoupling of compilation and rendering results in an
-efficient template system, because a template can render multiple contexts
-without having to be parsed multiple times.
-
-Auto-escaping considerations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-The output from template tags is **not** automatically run through the
-auto-escaping filters. However, there are still a couple of things you should
-keep in mind when writing a template tag.
-
-If the ``render()`` function of your template stores the result in a context
-variable (rather than returning the result in a string), it should take care
-to call ``mark_safe()`` if appropriate. When the variable is ultimately
-rendered, it will be affected by the auto-escape setting in effect at the
-time, so content that should be safe from further escaping needs to be marked
-as such.
-
-Also, if your template tag creates a new context for performing some
-sub-rendering, set the auto-escape attribute to the current context's value.
-The ``__init__`` method for the ``Context`` class takes a parameter called
-``autoescape`` that you can use for this purpose. For example::
-
- def render(self, context):
- # ...
- new_context = Context({'var': obj}, autoescape=context.autoescape)
- # ... Do something with new_context ...
-
-This is not a very common situation, but it's useful if you're rendering a
-template yourself. For example::
-
- def render(self, context):
- t = template.loader.get_template('small_fragment.html')
- return t.render(Context({'var': obj}, autoescape=context.autoescape))
-
-If we had neglected to pass in the current ``context.autoescape`` value to our
-new ``Context`` in this example, the results would have *always* been
-automatically escaped, which may not be the desired behavior if the template
-tag is used inside a ``{% autoescape off %}`` block.
-
-.. _template_tag_thread_safety:
-
-Thread-safety considerations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2
-
-Once a node is parsed, its ``render`` method may be called any number of times.
-Since Django is sometimes run in multi-threaded environments, a single node may
-be simultaneously rendering with different contexts in response to two separate
-requests. Therefore, it's important to make sure your template tags are thread
-safe.
-
-To make sure your template tags are thread safe, you should never store state
-information on the node itself. For example, Django provides a builtin ``cycle``
-template tag that cycles among a list of given strings each time it's rendered::
-
- {% for o in some_list %}
- <tr class="{% cycle 'row1' 'row2' %}>
- ...
- </tr>
- {% endfor %}
-
-A naive implementation of ``CycleNode`` might look something like this::
-
- class CycleNode(Node):
- def __init__(self, cyclevars):
- self.cycle_iter = itertools.cycle(cyclevars)
- def render(self, context):
- return self.cycle_iter.next()
-
-But, suppose we have two templates rendering the template snippet from above at
-the same time:
-
- 1. Thread 1 performs its first loop iteration, ``CycleNode.render()``
- returns 'row1'
- 2. Thread 2 performs its first loop iteration, ``CycleNode.render()``
- returns 'row2'
- 3. Thread 1 performs its second loop iteration, ``CycleNode.render()``
- returns 'row1'
- 4. Thread 2 performs its second loop iteration, ``CycleNode.render()``
- returns 'row2'
-
-The CycleNode is iterating, but it's iterating globally. As far as Thread 1
-and Thread 2 are concerned, it's always returning the same value. This is
-obviously not what we want!
-
-To address this problem, Django provides a ``render_context`` that's associated
-with the ``context`` of the template that is currently being rendered. The
-``render_context`` behaves like a Python dictionary, and should be used to store
-``Node`` state between invocations of the ``render`` method.
-
-Let's refactor our ``CycleNode`` implementation to use the ``render_context``::
-
- class CycleNode(Node):
- def __init__(self, cyclevars):
- self.cyclevars = cyclevars
- def render(self, context):
- if self not in context.render_context:
- context.render_context[self] = itertools.cycle(self.cyclevars)
- cycle_iter = context.render_context[self]
- return cycle_iter.next()
-
-Note that it's perfectly safe to store global information that will not change
-throughout the life of the ``Node`` as an attribute. In the case of
-``CycleNode``, the ``cyclevars`` argument doesn't change after the ``Node`` is
-instantiated, so we don't need to put it in the ``render_context``. But state
-information that is specific to the template that is currently being rendered,
-like the current iteration of the ``CycleNode``, should be stored in the
-``render_context``.
-
-.. note::
- Notice how we used ``self`` to scope the ``CycleNode`` specific information
- within the ``render_context``. There may be multiple ``CycleNodes`` in a
- given template, so we need to be careful not to clobber another node's state
- information. The easiest way to do this is to always use ``self`` as the key
- into ``render_context``. If you're keeping track of several state variables,
- make ``render_context[self]`` a dictionary.
-
-Registering the tag
-~~~~~~~~~~~~~~~~~~~
-
-Finally, register the tag with your module's ``Library`` instance, as explained
-in "Writing custom template filters" above. Example::
-
- register.tag('current_time', do_current_time)
-
-The ``tag()`` method takes two arguments:
-
- 1. The name of the template tag -- a string. If this is left out, the
- name of the compilation function will be used.
- 2. The compilation function -- a Python function (not the name of the
- function as a string).
-
-As with filter registration, it is also possible to use this as a decorator::
-
- @register.tag(name="current_time")
- def do_current_time(parser, token):
- # ...
-
- @register.tag
- def shout(parser, token):
- # ...
-
-If you leave off the ``name`` argument, as in the second example above, Django
-will use the function's name as the tag name.
-
-Passing template variables to the tag
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Although you can pass any number of arguments to a template tag using
-``token.split_contents()``, the arguments are all unpacked as
-string literals. A little more work is required in order to pass dynamic
-content (a template variable) to a template tag as an argument.
-
-While the previous examples have formatted the current time into a string and
-returned the string, suppose you wanted to pass in a ``DateTimeField`` from an
-object and have the template tag format that date-time:
-
-.. code-block:: html+django
-
- <p>This post was last updated at {% format_time blog_entry.date_updated "%Y-%m-%d %I:%M %p" %}.</p>
-
-Initially, ``token.split_contents()`` will return three values:
-
- 1. The tag name ``format_time``.
- 2. The string "blog_entry.date_updated" (without the surrounding quotes).
- 3. The formatting string "%Y-%m-%d %I:%M %p". The return value from
- ``split_contents()`` will include the leading and trailing quotes for
- string literals like this.
-
-Now your tag should begin to look like this::
-
- from django import template
- def do_format_time(parser, token):
- try:
- # split_contents() knows not to split quoted strings.
- tag_name, date_to_be_formatted, format_string = token.split_contents()
- except ValueError:
- raise template.TemplateSyntaxError, "%r tag requires exactly two arguments" % token.contents.split()[0]
- if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")):
- raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
- return FormatTimeNode(date_to_be_formatted, format_string[1:-1])
-
-.. versionchanged:: 1.0
- Variable resolution has changed in the 1.0 release of Django. ``template.resolve_variable()``
- has been deprecated in favor of a new ``template.Variable`` class.
-
-You also have to change the renderer to retrieve the actual contents of the
-``date_updated`` property of the ``blog_entry`` object. This can be
-accomplished by using the ``Variable()`` class in ``django.template``.
-
-To use the ``Variable`` class, simply instantiate it with the name of the
-variable to be resolved, and then call ``variable.resolve(context)``. So,
-for example::
-
- class FormatTimeNode(template.Node):
- def __init__(self, date_to_be_formatted, format_string):
- self.date_to_be_formatted = template.Variable(date_to_be_formatted)
- self.format_string = format_string
-
- def render(self, context):
- try:
- actual_date = self.date_to_be_formatted.resolve(context)
- return actual_date.strftime(self.format_string)
- except template.VariableDoesNotExist:
- return ''
-
-Variable resolution will throw a ``VariableDoesNotExist`` exception if it cannot
-resolve the string passed to it in the current context of the page.
-
-Shortcut for simple tags
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Many template tags take a number of arguments -- strings or a template variables
--- and return a string after doing some processing based solely on
-the input argument and some external information. For example, the
-``current_time`` tag we wrote above is of this variety: we give it a format
-string, it returns the time as a string.
-
-To ease the creation of the types of tags, Django provides a helper function,
-``simple_tag``. This function, which is a method of
-``django.template.Library``, takes a function that accepts any number of
-arguments, wraps it in a ``render`` function and the other necessary bits
-mentioned above and registers it with the template system.
-
-Our earlier ``current_time`` function could thus be written like this::
-
- def current_time(format_string):
- return datetime.datetime.now().strftime(format_string)
-
- register.simple_tag(current_time)
-
-The decorator syntax also works::
-
- @register.simple_tag
- def current_time(format_string):
- ...
-
-A couple of things to note about the ``simple_tag`` helper function:
-
- * Checking for the required number of arguments, etc., has already been
- done by the time our function is called, so we don't need to do that.
- * The quotes around the argument (if any) have already been stripped away,
- so we just receive a plain string.
- * If the argument was a template variable, our function is passed the
- current value of the variable, not the variable itself.
-
-When your template tag does not need access to the current context, writing a
-function to work with the input values and using the ``simple_tag`` helper is
-the easiest way to create a new tag.
-
-.. _howto-custom-template-tags-inclusion-tags:
-
-Inclusion tags
-~~~~~~~~~~~~~~
-
-Another common type of template tag is the type that displays some data by
-rendering *another* template. For example, Django's admin interface uses custom
-template tags to display the buttons along the bottom of the "add/change" form
-pages. Those buttons always look the same, but the link targets change depending
-on the object being edited -- so they're a perfect case for using a small
-template that is filled with details from the current object. (In the admin's
-case, this is the ``submit_row`` tag.)
-
-These sorts of tags are called "inclusion tags".
-
-Writing inclusion tags is probably best demonstrated by example. Let's write a
-tag that outputs a list of choices for a given ``Poll`` object, such as was
-created in the :ref:`tutorials <creating-models>`. We'll use the tag like this:
-
-.. code-block:: html+django
-
- {% show_results poll %}
-
-...and the output will be something like this:
-
-.. code-block:: html
-
- <ul>
- <li>First choice</li>
- <li>Second choice</li>
- <li>Third choice</li>
- </ul>
-
-First, define the function that takes the argument and produces a dictionary of
-data for the result. The important point here is we only need to return a
-dictionary, not anything more complex. This will be used as a template context
-for the template fragment. Example::
-
- def show_results(poll):
- choices = poll.choice_set.all()
- return {'choices': choices}
-
-Next, create the template used to render the tag's output. This template is a
-fixed feature of the tag: the tag writer specifies it, not the template
-designer. Following our example, the template is very simple:
-
-.. code-block:: html+django
-
- <ul>
- {% for choice in choices %}
- <li> {{ choice }} </li>
- {% endfor %}
- </ul>
-
-Now, create and register the inclusion tag by calling the ``inclusion_tag()``
-method on a ``Library`` object. Following our example, if the above template is
-in a file called ``results.html`` in a directory that's searched by the template
-loader, we'd register the tag like this::
-
- # Here, register is a django.template.Library instance, as before
- register.inclusion_tag('results.html')(show_results)
-
-As always, decorator syntax works as well, so we could have written::
-
- @register.inclusion_tag('results.html')
- def show_results(poll):
- ...
-
-...when first creating the function.
-
-Sometimes, your inclusion tags might require a large number of arguments,
-making it a pain for template authors to pass in all the arguments and remember
-their order. To solve this, Django provides a ``takes_context`` option for
-inclusion tags. If you specify ``takes_context`` in creating a template tag,
-the tag will have no required arguments, and the underlying Python function
-will have one argument -- the template context as of when the tag was called.
-
-For example, say you're writing an inclusion tag that will always be used in a
-context that contains ``home_link`` and ``home_title`` variables that point
-back to the main page. Here's what the Python function would look like::
-
- # The first argument *must* be called "context" here.
- def jump_link(context):
- return {
- 'link': context['home_link'],
- 'title': context['home_title'],
- }
- # Register the custom tag as an inclusion tag with takes_context=True.
- register.inclusion_tag('link.html', takes_context=True)(jump_link)
-
-(Note that the first parameter to the function *must* be called ``context``.)
-
-In that ``register.inclusion_tag()`` line, we specified ``takes_context=True``
-and the name of the template. Here's what the template ``link.html`` might look
-like:
-
-.. code-block:: html+django
-
- Jump directly to <a href="{{ link }}">{{ title }}</a>.
-
-Then, any time you want to use that custom tag, load its library and call it
-without any arguments, like so:
-
-.. code-block:: html+django
-
- {% jump_link %}
-
-Note that when you're using ``takes_context=True``, there's no need to pass
-arguments to the template tag. It automatically gets access to the context.
-
-The ``takes_context`` parameter defaults to ``False``. When it's set to *True*,
-the tag is passed the context object, as in this example. That's the only
-difference between this case and the previous ``inclusion_tag`` example.
-
-Setting a variable in the context
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The above examples simply output a value. Generally, it's more flexible if your
-template tags set template variables instead of outputting values. That way,
-template authors can reuse the values that your template tags create.
-
-To set a variable in the context, just use dictionary assignment on the context
-object in the ``render()`` method. Here's an updated version of
-``CurrentTimeNode`` that sets a template variable ``current_time`` instead of
-outputting it::
-
- class CurrentTimeNode2(template.Node):
- def __init__(self, format_string):
- self.format_string = format_string
- def render(self, context):
- context['current_time'] = datetime.datetime.now().strftime(self.format_string)
- return ''
-
-Note that ``render()`` returns the empty string. ``render()`` should always
-return string output. If all the template tag does is set a variable,
-``render()`` should return the empty string.
-
-Here's how you'd use this new version of the tag:
-
-.. code-block:: html+django
-
- {% current_time "%Y-%M-%d %I:%M %p" %}<p>The time is {{ current_time }}.</p>
-
-.. admonition:: Variable scope in context
-
- Any variable set in the context will only be available in the same ``block``
- of the template in which it was assigned. This behaviour is intentional;
- it provides a scope for variables so that they don't conflict with
- context in other blocks.
-
-But, there's a problem with ``CurrentTimeNode2``: The variable name
-``current_time`` is hard-coded. This means you'll need to make sure your
-template doesn't use ``{{ current_time }}`` anywhere else, because the
-``{% current_time %}`` will blindly overwrite that variable's value. A cleaner
-solution is to make the template tag specify the name of the output variable,
-like so:
-
-.. code-block:: html+django
-
- {% current_time "%Y-%M-%d %I:%M %p" as my_current_time %}
- <p>The current time is {{ my_current_time }}.</p>
-
-To do that, you'll need to refactor both the compilation function and ``Node``
-class, like so::
-
- class CurrentTimeNode3(template.Node):
- def __init__(self, format_string, var_name):
- self.format_string = format_string
- self.var_name = var_name
- def render(self, context):
- context[self.var_name] = datetime.datetime.now().strftime(self.format_string)
- return ''
-
- import re
- def do_current_time(parser, token):
- # This version uses a regular expression to parse tag contents.
- try:
- # Splitting by None == splitting by spaces.
- tag_name, arg = token.contents.split(None, 1)
- except ValueError:
- raise template.TemplateSyntaxError, "%r tag requires arguments" % token.contents.split()[0]
- m = re.search(r'(.*?) as (\w+)', arg)
- if not m:
- raise template.TemplateSyntaxError, "%r tag had invalid arguments" % tag_name
- format_string, var_name = m.groups()
- if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")):
- raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
- return CurrentTimeNode3(format_string[1:-1], var_name)
-
-The difference here is that ``do_current_time()`` grabs the format string and
-the variable name, passing both to ``CurrentTimeNode3``.
-
-Parsing until another block tag
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Template tags can work in tandem. For instance, the standard ``{% comment %}``
-tag hides everything until ``{% endcomment %}``. To create a template tag such
-as this, use ``parser.parse()`` in your compilation function.
-
-Here's how the standard ``{% comment %}`` tag is implemented::
-
- def do_comment(parser, token):
- nodelist = parser.parse(('endcomment',))
- parser.delete_first_token()
- return CommentNode()
-
- class CommentNode(template.Node):
- def render(self, context):
- return ''
-
-``parser.parse()`` takes a tuple of names of block tags ''to parse until''. It
-returns an instance of ``django.template.NodeList``, which is a list of
-all ``Node`` objects that the parser encountered ''before'' it encountered
-any of the tags named in the tuple.
-
-In ``"nodelist = parser.parse(('endcomment',))"`` in the above example,
-``nodelist`` is a list of all nodes between the ``{% comment %}`` and
-``{% endcomment %}``, not counting ``{% comment %}`` and ``{% endcomment %}``
-themselves.
-
-After ``parser.parse()`` is called, the parser hasn't yet "consumed" the
-``{% endcomment %}`` tag, so the code needs to explicitly call
-``parser.delete_first_token()``.
-
-``CommentNode.render()`` simply returns an empty string. Anything between
-``{% comment %}`` and ``{% endcomment %}`` is ignored.
-
-Parsing until another block tag, and saving contents
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In the previous example, ``do_comment()`` discarded everything between
-``{% comment %}`` and ``{% endcomment %}``. Instead of doing that, it's
-possible to do something with the code between block tags.
-
-For example, here's a custom template tag, ``{% upper %}``, that capitalizes
-everything between itself and ``{% endupper %}``.
-
-Usage:
-
-.. code-block:: html+django
-
- {% upper %}This will appear in uppercase, {{ your_name }}.{% endupper %}
-
-As in the previous example, we'll use ``parser.parse()``. But this time, we
-pass the resulting ``nodelist`` to the ``Node``::
-
- def do_upper(parser, token):
- nodelist = parser.parse(('endupper',))
- parser.delete_first_token()
- return UpperNode(nodelist)
-
- class UpperNode(template.Node):
- def __init__(self, nodelist):
- self.nodelist = nodelist
- def render(self, context):
- output = self.nodelist.render(context)
- return output.upper()
-
-The only new concept here is the ``self.nodelist.render(context)`` in
-``UpperNode.render()``.
-
-For more examples of complex rendering, see the source code for ``{% if %}``,
-``{% for %}``, ``{% ifequal %}`` and ``{% ifchanged %}``. They live in
-``django/template/defaulttags.py``.
diff --git a/parts/django/docs/howto/deployment/fastcgi.txt b/parts/django/docs/howto/deployment/fastcgi.txt
deleted file mode 100644
index ea14b97..0000000
--- a/parts/django/docs/howto/deployment/fastcgi.txt
+++ /dev/null
@@ -1,400 +0,0 @@
-============================================
-How to use Django with FastCGI, SCGI, or AJP
-============================================
-
-.. highlight:: bash
-
-Although the current preferred setup for running Django is :doc:`Apache with
-mod_wsgi </howto/deployment/modwsgi>`, many people use shared hosting, on
-which protocols such as FastCGI, SCGI or AJP are the only viable options. In
-some setups, these protocols may provide better performance than mod_wsgi_.
-
-.. admonition:: Note
-
- This document primarily focuses on FastCGI. Other protocols, such as SCGI
- and AJP, are also supported, through the ``flup`` Python package. See the
- Protocols_ section below for specifics about SCGI and AJP.
-
-Essentially, FastCGI is an efficient way of letting an external application
-serve pages to a Web server. The Web server delegates the incoming Web requests
-(via a socket) to FastCGI, which executes the code and passes the response back
-to the Web server, which, in turn, passes it back to the client's Web browser.
-
-Like mod_python, FastCGI allows code to stay in memory, allowing requests to be
-served with no startup time. Unlike mod_python_ (or `mod_perl`_), a FastCGI
-process doesn't run inside the Web server process, but in a separate,
-persistent process.
-
-.. _mod_wsgi: http://code.google.com/p/modwsgi/
-.. _mod_perl: http://perl.apache.org/
-.. _mod_python: http://www.modpython.org/
-
-.. admonition:: Why run code in a separate process?
-
- The traditional ``mod_*`` arrangements in Apache embed various scripting
- languages (most notably PHP, Python and Perl) inside the process space of
- your Web server. Although this lowers startup time -- because code doesn't
- have to be read off disk for every request -- it comes at the cost of
- memory use. For mod_python, for example, every Apache process gets its own
- Python interpreter, which uses up a considerable amount of RAM.
-
- Due to the nature of FastCGI, it's even possible to have processes that run
- under a different user account than the Web server process. That's a nice
- security benefit on shared systems, because it means you can secure your
- code from other users.
-
-Prerequisite: flup
-==================
-
-Before you can start using FastCGI with Django, you'll need to install flup_, a
-Python library for dealing with FastCGI. Version 0.5 or newer should work fine.
-
-.. _flup: http://www.saddi.com/software/flup/
-
-Starting your FastCGI server
-============================
-
-FastCGI operates on a client-server model, and in most cases you'll be starting
-the FastCGI process on your own. Your Web server (be it Apache, lighttpd, or
-otherwise) only contacts your Django-FastCGI process when the server needs a
-dynamic page to be loaded. Because the daemon is already running with the code
-in memory, it's able to serve the response very quickly.
-
-.. admonition:: Note
-
- If you're on a shared hosting system, you'll probably be forced to use
- Web server-managed FastCGI processes. See the section below on running
- Django with Web server-managed processes for more information.
-
-A Web server can connect to a FastCGI server in one of two ways: It can use
-either a Unix domain socket (a "named pipe" on Win32 systems), or it can use a
-TCP socket. What you choose is a manner of preference; a TCP socket is usually
-easier due to permissions issues.
-
-To start your server, first change into the directory of your project (wherever
-your :doc:`manage.py </ref/django-admin>` is), and then run the
-:djadmin:`runfcgi` command::
-
- ./manage.py runfcgi [options]
-
-If you specify ``help`` as the only option after :djadmin:`runfcgi`, it'll
-display a list of all the available options.
-
-You'll need to specify either a :djadminopt:`socket`, a :djadminopt:`protocol`
-or both :djadminopt:`host` and :djadminopt:`port`. Then, when you set up your
-Web server, you'll just need to point it at the host/port or socket you
-specified when starting the FastCGI server. See the examples_, below.
-
-Protocols
----------
-
-Django supports all the protocols that flup_ does, namely fastcgi_, `SCGI`_ and
-`AJP1.3`_ (the Apache JServ Protocol, version 1.3). Select your preferred
-protocol by using the :djadminopt:`protocol=\<protocol_name\> <protocol>` option
-with ``./manage.py runfcgi`` -- where ``<protocol_name>`` may be one of:
-``fcgi`` (the default), ``scgi`` or ``ajp``. For example::
-
- ./manage.py runfcgi protocol=scgi
-
-.. _flup: http://www.saddi.com/software/flup/
-.. _fastcgi: http://www.fastcgi.com/
-.. _SCGI: http://python.ca/scgi/protocol.txt
-.. _AJP1.3: http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
-
-Examples
---------
-
-Running a threaded server on a TCP port::
-
- ./manage.py runfcgi method=threaded host=127.0.0.1 port=3033
-
-Running a preforked server on a Unix domain socket::
-
- ./manage.py runfcgi method=prefork socket=/home/user/mysite.sock pidfile=django.pid
-
-.. admonition:: Socket security
-
- Django's default umask requires that the webserver and the Django fastcgi
- process be run with the same group **and** user. For increased security,
- you can run them under the same group but as different users. If you do
- this, you will need to set the umask to 0002 using the ``umask`` argument
- to ``runfcgi``.
-
-Run without daemonizing (backgrounding) the process (good for debugging)::
-
- ./manage.py runfcgi daemonize=false socket=/tmp/mysite.sock maxrequests=1
-
-Stopping the FastCGI daemon
----------------------------
-
-If you have the process running in the foreground, it's easy enough to stop it:
-Simply hitting ``Ctrl-C`` will stop and quit the FastCGI server. However, when
-you're dealing with background processes, you'll need to resort to the Unix
-``kill`` command.
-
-If you specify the :djadminopt:`pidfile` option to :djadmin:`runfcgi`, you can
-kill the running FastCGI daemon like this::
-
- kill `cat $PIDFILE`
-
-...where ``$PIDFILE`` is the ``pidfile`` you specified.
-
-To easily restart your FastCGI daemon on Unix, try this small shell script::
-
- #!/bin/bash
-
- # Replace these three settings.
- PROJDIR="/home/user/myproject"
- PIDFILE="$PROJDIR/mysite.pid"
- SOCKET="$PROJDIR/mysite.sock"
-
- cd $PROJDIR
- if [ -f $PIDFILE ]; then
- kill `cat -- $PIDFILE`
- rm -f -- $PIDFILE
- fi
-
- exec /usr/bin/env - \
- PYTHONPATH="../python:.." \
- ./manage.py runfcgi socket=$SOCKET pidfile=$PIDFILE
-
-Apache setup
-============
-
-To use Django with Apache and FastCGI, you'll need Apache installed and
-configured, with `mod_fastcgi`_ installed and enabled. Consult the Apache
-documentation for instructions.
-
-Once you've got that set up, point Apache at your Django FastCGI instance by
-editing the ``httpd.conf`` (Apache configuration) file. You'll need to do two
-things:
-
- * Use the ``FastCGIExternalServer`` directive to specify the location of
- your FastCGI server.
- * Use ``mod_rewrite`` to point URLs at FastCGI as appropriate.
-
-.. _mod_fastcgi: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
-
-Specifying the location of the FastCGI server
----------------------------------------------
-
-The ``FastCGIExternalServer`` directive tells Apache how to find your FastCGI
-server. As the `FastCGIExternalServer docs`_ explain, you can specify either a
-``socket`` or a ``host``. Here are examples of both:
-
-.. code-block:: apache
-
- # Connect to FastCGI via a socket / named pipe.
- FastCGIExternalServer /home/user/public_html/mysite.fcgi -socket /home/user/mysite.sock
-
- # Connect to FastCGI via a TCP host/port.
- FastCGIExternalServer /home/user/public_html/mysite.fcgi -host 127.0.0.1:3033
-
-In either case, the file ``/home/user/public_html/mysite.fcgi`` doesn't
-actually have to exist. It's just a URL used by the Web server internally -- a
-hook for signifying which requests at a URL should be handled by FastCGI. (More
-on this in the next section.)
-
-.. _FastCGIExternalServer docs: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer
-
-Using mod_rewrite to point URLs at FastCGI
-------------------------------------------
-
-The second step is telling Apache to use FastCGI for URLs that match a certain
-pattern. To do this, use the `mod_rewrite`_ module and rewrite URLs to
-``mysite.fcgi`` (or whatever you specified in the ``FastCGIExternalServer``
-directive, as explained in the previous section).
-
-In this example, we tell Apache to use FastCGI to handle any request that
-doesn't represent a file on the filesystem and doesn't start with ``/media/``.
-This is probably the most common case, if you're using Django's admin site:
-
-.. code-block:: apache
-
- <VirtualHost 12.34.56.78>
- ServerName example.com
- DocumentRoot /home/user/public_html
- Alias /media /home/user/python/django/contrib/admin/media
- RewriteEngine On
- RewriteRule ^/(media.*)$ /$1 [QSA,L,PT]
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
- </VirtualHost>
-
-.. _mod_rewrite: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
-
-Django will automatically use the pre-rewrite version of the URL when
-constructing URLs with the ``{% url %}`` template tag (and similar methods).
-
-lighttpd setup
-==============
-
-lighttpd_ is a lightweight Web server commonly used for serving static files. It
-supports FastCGI natively and, thus, is a good choice for serving both static
-and dynamic pages, if your site doesn't have any Apache-specific needs.
-
-.. _lighttpd: http://www.lighttpd.net/
-
-Make sure ``mod_fastcgi`` is in your modules list, somewhere after
-``mod_rewrite`` and ``mod_access``, but not after ``mod_accesslog``. You'll
-probably want ``mod_alias`` as well, for serving admin media.
-
-Add the following to your lighttpd config file:
-
-.. code-block:: lua
-
- server.document-root = "/home/user/public_html"
- fastcgi.server = (
- "/mysite.fcgi" => (
- "main" => (
- # Use host / port instead of socket for TCP fastcgi
- # "host" => "127.0.0.1",
- # "port" => 3033,
- "socket" => "/home/user/mysite.sock",
- "check-local" => "disable",
- )
- ),
- )
- alias.url = (
- "/media" => "/home/user/django/contrib/admin/media/",
- )
-
- url.rewrite-once = (
- "^(/media.*)$" => "$1",
- "^/favicon\.ico$" => "/media/favicon.ico",
- "^(/.*)$" => "/mysite.fcgi$1",
- )
-
-Running multiple Django sites on one lighttpd
----------------------------------------------
-
-lighttpd lets you use "conditional configuration" to allow configuration to be
-customized per host. To specify multiple FastCGI sites, just add a conditional
-block around your FastCGI config for each site::
-
- # If the hostname is 'www.example1.com'...
- $HTTP["host"] == "www.example1.com" {
- server.document-root = "/foo/site1"
- fastcgi.server = (
- ...
- )
- ...
- }
-
- # If the hostname is 'www.example2.com'...
- $HTTP["host"] == "www.example2.com" {
- server.document-root = "/foo/site2"
- fastcgi.server = (
- ...
- )
- ...
- }
-
-You can also run multiple Django installations on the same site simply by
-specifying multiple entries in the ``fastcgi.server`` directive. Add one
-FastCGI host for each.
-
-Cherokee setup
-==============
-
-Cherokee is a very fast, flexible and easy to configure Web Server. It
-supports the widespread technologies nowadays: FastCGI, SCGI, PHP, CGI, SSI,
-TLS and SSL encrypted connections, Virtual hosts, Authentication, on the fly
-encoding, Load Balancing, Apache compatible log files, Data Base Balancer,
-Reverse HTTP Proxy and much more.
-
-The Cherokee project provides a documentation to `setting up Django`_ with Cherokee.
-
-.. _setting up Django: http://www.cherokee-project.com/doc/cookbook_django.html
-
-Running Django on a shared-hosting provider with Apache
-=======================================================
-
-Many shared-hosting providers don't allow you to run your own server daemons or
-edit the ``httpd.conf`` file. In these cases, it's still possible to run Django
-using Web server-spawned processes.
-
-.. admonition:: Note
-
- If you're using Web server-spawned processes, as explained in this section,
- there's no need for you to start the FastCGI server on your own. Apache
- will spawn a number of processes, scaling as it needs to.
-
-In your Web root directory, add this to a file named ``.htaccess``:
-
-.. code-block:: apache
-
- AddHandler fastcgi-script .fcgi
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]
-
-Then, create a small script that tells Apache how to spawn your FastCGI
-program. Create a file ``mysite.fcgi`` and place it in your Web directory, and
-be sure to make it executable:
-
-.. code-block:: python
-
- #!/usr/bin/python
- import sys, os
-
- # Add a custom Python path.
- sys.path.insert(0, "/home/user/python")
-
- # Switch to the directory of your project. (Optional.)
- # os.chdir("/home/user/myproject")
-
- # Set the DJANGO_SETTINGS_MODULE environment variable.
- os.environ['DJANGO_SETTINGS_MODULE'] = "myproject.settings"
-
- from django.core.servers.fastcgi import runfastcgi
- runfastcgi(method="threaded", daemonize="false")
-
-Restarting the spawned server
------------------------------
-
-If you change any Python code on your site, you'll need to tell FastCGI the
-code has changed. But there's no need to restart Apache in this case. Rather,
-just reupload ``mysite.fcgi``, or edit the file, so that the timestamp on the
-file will change. When Apache sees the file has been updated, it will restart
-your Django application for you.
-
-If you have access to a command shell on a Unix system, you can accomplish this
-easily by using the ``touch`` command::
-
- touch mysite.fcgi
-
-Serving admin media files
-=========================
-
-Regardless of the server and configuration you eventually decide to use, you
-will also need to give some thought to how to serve the admin media files. The
-advice given in the :ref:`modpython <serving-the-admin-files>` documentation
-is also applicable in the setups detailed above.
-
-Forcing the URL prefix to a particular value
-============================================
-
-Because many of these fastcgi-based solutions require rewriting the URL at
-some point inside the Web server, the path information that Django sees may not
-resemble the original URL that was passed in. This is a problem if the Django
-application is being served from under a particular prefix and you want your
-URLs from the ``{% url %}`` tag to look like the prefix, rather than the
-rewritten version, which might contain, for example, ``mysite.fcgi``.
-
-Django makes a good attempt to work out what the real script name prefix
-should be. In particular, if the Web server sets the ``SCRIPT_URL`` (specific
-to Apache's mod_rewrite), or ``REDIRECT_URL`` (set by a few servers, including
-Apache + mod_rewrite in some situations), Django will work out the original
-prefix automatically.
-
-In the cases where Django cannot work out the prefix correctly and where you
-want the original value to be used in URLs, you can set the
-:setting:`FORCE_SCRIPT_NAME` setting in your main ``settings`` file. This sets the
-script name uniformly for every URL served via that settings file. Thus you'll
-need to use different settings files if you want different sets of URLs to
-have different script names in this case, but that is a rare situation.
-
-As an example of how to use it, if your Django configuration is serving all of
-the URLs under ``'/'`` and you wanted to use this setting, you would set
-``FORCE_SCRIPT_NAME = ''`` in your settings file.
diff --git a/parts/django/docs/howto/deployment/index.txt b/parts/django/docs/howto/deployment/index.txt
deleted file mode 100644
index 740f9bc..0000000
--- a/parts/django/docs/howto/deployment/index.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Deploying Django
-================
-
-Django's chock-full of shortcuts to make Web developer's lives easier, but all
-those tools are of no use if you can't easily deploy your sites. Since Django's
-inception, ease of deployment has been a major goal. There's a number of good
-ways to easily deploy Django:
-
-.. toctree::
- :maxdepth: 1
-
- modwsgi
- modpython
- fastcgi
-
-If you're new to deploying Django and/or Python, we'd recommend you try
-:doc:`mod_wsgi </howto/deployment/modwsgi>` first. In most cases it'll be the easiest,
-fastest, and most stable deployment choice.
-
-.. seealso::
-
- * `Chapter 12 of The Django Book`_ discusses deployment and especially
- scaling in more detail.
-
-.. _chapter 12 of the django book: http://djangobook.com/en/2.0/chapter12/
diff --git a/parts/django/docs/howto/deployment/modpython.txt b/parts/django/docs/howto/deployment/modpython.txt
deleted file mode 100644
index ba55335..0000000
--- a/parts/django/docs/howto/deployment/modpython.txt
+++ /dev/null
@@ -1,418 +0,0 @@
-.. _howto-deployment-modpython:
-
-============================================
-How to use Django with Apache and mod_python
-============================================
-
-.. warning::
-
- Support for mod_python will be deprecated in a future release of Django. If
- you are configuring a new deployment, you are strongly encouraged to
- consider using :doc:`mod_wsgi </howto/deployment/modwsgi>` or any of the
- other :doc:`supported backends </howto/deployment/index>`.
-
-.. highlight:: apache
-
-The `mod_python`_ module for Apache_ can be used to deploy Django to a
-production server, although it has been mostly superseded by the simpler
-:doc:`mod_wsgi deployment option </howto/deployment/modwsgi>`.
-
-mod_python is similar to (and inspired by) `mod_perl`_ : It embeds Python within
-Apache and loads Python code into memory when the server starts. Code stays in
-memory throughout the life of an Apache process, which leads to significant
-performance gains over other server arrangements.
-
-Django requires Apache 2.x and mod_python 3.x, and you should use Apache's
-`prefork MPM`_, as opposed to the `worker MPM`_.
-
-.. seealso::
-
- * Apache is a big, complex animal, and this document only scratches the
- surface of what Apache can do. If you need more advanced information about
- Apache, there's no better source than `Apache's own official
- documentation`_
-
- * You may also be interested in :doc:`How to use Django with FastCGI, SCGI,
- or AJP </howto/deployment/fastcgi>`.
-
-.. _Apache: http://httpd.apache.org/
-.. _mod_python: http://www.modpython.org/
-.. _mod_perl: http://perl.apache.org/
-.. _prefork MPM: http://httpd.apache.org/docs/2.2/mod/prefork.html
-.. _worker MPM: http://httpd.apache.org/docs/2.2/mod/worker.html
-.. _apache's own official documentation: http://httpd.apache.org/docs/
-
-Basic configuration
-===================
-
-To configure Django with mod_python, first make sure you have Apache installed,
-with the mod_python module activated.
-
-Then edit your ``httpd.conf`` file and add the following::
-
- <Location "/mysite/">
- SetHandler python-program
- PythonHandler django.core.handlers.modpython
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- PythonOption django.root /mysite
- PythonDebug On
- </Location>
-
-...and replace ``mysite.settings`` with the Python import path to your Django
-project's settings file.
-
-This tells Apache: "Use mod_python for any URL at or under '/mysite/', using the
-Django mod_python handler." It passes the value of :ref:`DJANGO_SETTINGS_MODULE
-<django-settings-module>` so mod_python knows which settings to use.
-
-.. versionadded:: 1.0
- The ``PythonOption django.root ...`` is new in this version.
-
-Because mod_python does not know we are serving this site from underneath the
-``/mysite/`` prefix, this value needs to be passed through to the mod_python
-handler in Django, via the ``PythonOption django.root ...`` line. The value set
-on that line (the last item) should match the string given in the ``<Location
-...>`` directive. The effect of this is that Django will automatically strip the
-``/mysite`` string from the front of any URLs before matching them against your
-URLconf patterns. If you later move your site to live under ``/mysite2``, you
-will not have to change anything except the ``django.root`` option in the config
-file.
-
-When using ``django.root`` you should make sure that what's left, after the
-prefix has been removed, begins with a slash. Your URLconf patterns that are
-expecting an initial slash will then work correctly. In the above example,
-since we want to send things like ``/mysite/admin/`` to ``/admin/``, we need
-to remove the string ``/mysite`` from the beginning, so that is the
-``django.root`` value. It would be an error to use ``/mysite/`` (with a
-trailing slash) in this case.
-
-Note that we're using the ``<Location>`` directive, not the ``<Directory>``
-directive. The latter is used for pointing at places on your filesystem,
-whereas ``<Location>`` points at places in the URL structure of a Web site.
-``<Directory>`` would be meaningless here.
-
-Also, if your Django project is not on the default ``PYTHONPATH`` for your
-computer, you'll have to tell mod_python where your project can be found:
-
-.. parsed-literal::
-
- <Location "/mysite/">
- SetHandler python-program
- PythonHandler django.core.handlers.modpython
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- PythonOption django.root /mysite
- PythonDebug On
- **PythonPath "['/path/to/project'] + sys.path"**
- </Location>
-
-The value you use for ``PythonPath`` should include the parent directories of
-all the modules you are going to import in your application. It should also
-include the parent directory of the :ref:`DJANGO_SETTINGS_MODULE
-<django-settings-module>` location. This is exactly the same situation as
-setting the Python path for interactive usage. Whenever you try to import
-something, Python will run through all the directories in ``sys.path`` in turn,
-from first to last, and try to import from each directory until one succeeds.
-
-Make sure that your Python source files' permissions are set such that the
-Apache user (usually named ``apache`` or ``httpd`` on most systems) will have
-read access to the files.
-
-An example might make this clearer. Suppose you have some applications under
-``/usr/local/django-apps/`` (for example, ``/usr/local/django-apps/weblog/`` and
-so forth), your settings file is at ``/var/www/mysite/settings.py`` and you have
-specified :ref:`DJANGO_SETTINGS_MODULE <django-settings-module>` as in the above
-example. In this case, you would need to write your ``PythonPath`` directive
-as::
-
- PythonPath "['/usr/local/django-apps/', '/var/www'] + sys.path"
-
-With this path, ``import weblog`` and ``import mysite.settings`` will both
-work. If you had ``import blogroll`` in your code somewhere and ``blogroll``
-lived under the ``weblog/`` directory, you would *also* need to add
-``/usr/local/django-apps/weblog/`` to your ``PythonPath``. Remember: the
-**parent directories** of anything you import directly must be on the Python
-path.
-
-.. note::
-
- If you're using Windows, we still recommended that you use forward
- slashes in the pathnames, even though Windows normally uses the backslash
- character as its native separator. Apache knows how to convert from the
- forward slash format to the native format, so this approach is portable and
- easier to read. (It avoids tricky problems with having to double-escape
- backslashes.)
-
- This is valid even on a Windows system::
-
- PythonPath "['c:/path/to/project'] + sys.path"
-
-You can also add directives such as ``PythonAutoReload Off`` for performance.
-See the `mod_python documentation`_ for a full list of options.
-
-Note that you should set ``PythonDebug Off`` on a production server. If you
-leave ``PythonDebug On``, your users would see ugly (and revealing) Python
-tracebacks if something goes wrong within mod_python.
-
-Restart Apache, and any request to ``/mysite/`` or below will be served by
-Django. Note that Django's URLconfs won't trim the "/mysite/" -- they get passed
-the full URL.
-
-When deploying Django sites on mod_python, you'll need to restart Apache each
-time you make changes to your Python code.
-
-.. _mod_python documentation: http://modpython.org/live/current/doc-html/directives.html
-
-Multiple Django installations on the same Apache
-================================================
-
-It's entirely possible to run multiple Django installations on the same Apache
-instance. Just use ``VirtualHost`` for that, like so::
-
- NameVirtualHost *
-
- <VirtualHost *>
- ServerName www.example.com
- # ...
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- </VirtualHost>
-
- <VirtualHost *>
- ServerName www2.example.com
- # ...
- SetEnv DJANGO_SETTINGS_MODULE mysite.other_settings
- </VirtualHost>
-
-If you need to put two Django installations within the same ``VirtualHost``
-(or in different ``VirtualHost`` blocks that share the same server name),
-you'll need to take a special precaution to ensure mod_python's cache doesn't
-mess things up. Use the ``PythonInterpreter`` directive to give different
-``<Location>`` directives separate interpreters::
-
- <VirtualHost *>
- ServerName www.example.com
- # ...
- <Location "/something">
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- PythonInterpreter mysite
- </Location>
-
- <Location "/otherthing">
- SetEnv DJANGO_SETTINGS_MODULE mysite.other_settings
- PythonInterpreter othersite
- </Location>
- </VirtualHost>
-
-The values of ``PythonInterpreter`` don't really matter, as long as they're
-different between the two ``Location`` blocks.
-
-Running a development server with mod_python
-============================================
-
-If you use mod_python for your development server, you can avoid the hassle of
-having to restart the server each time you make code changes. Just set
-``MaxRequestsPerChild 1`` in your ``httpd.conf`` file to force Apache to reload
-everything for each request. But don't do that on a production server, or we'll
-revoke your Django privileges.
-
-If you're the type of programmer who debugs using scattered ``print``
-statements, note that output to ``stdout`` will not appear in the Apache
-log and can even `cause response errors`_.
-
-.. _cause response errors: http://blog.dscpl.com.au/2009/04/wsgi-and-printing-to-standard-output.html
-
-If you have the need to print debugging information in a mod_python setup, you
-have a few options. You can print to ``stderr`` explicitly, like so::
-
- print >> sys.stderr, 'debug text'
- sys.stderr.flush()
-
-(note that ``stderr`` is buffered, so calling ``flush`` is necessary if you wish
-debugging information to be displayed promptly.)
-
-A more compact approach is to use an assertion::
-
- assert False, 'debug text'
-
-Another alternative is to add debugging information to the template of your page.
-
-.. _serving-media-files:
-
-Serving media files
-===================
-
-Django doesn't serve media files itself; it leaves that job to whichever Web
-server you choose.
-
-We recommend using a separate Web server -- i.e., one that's not also running
-Django -- for serving media. Here are some good choices:
-
- * lighttpd_
- * Nginx_
- * TUX_
- * A stripped-down version of Apache_
- * Cherokee_
-
-If, however, you have no option but to serve media files on the same Apache
-``VirtualHost`` as Django, here's how you can turn off mod_python for a
-particular part of the site::
-
- <Location "/media">
- SetHandler None
- </Location>
-
-Just change ``Location`` to the root URL of your media files. You can also use
-``<LocationMatch>`` to match a regular expression.
-
-This example sets up Django at the site root but explicitly disables Django for
-the ``media`` subdirectory and any URL that ends with ``.jpg``, ``.gif`` or
-``.png``::
-
- <Location "/">
- SetHandler python-program
- PythonHandler django.core.handlers.modpython
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- </Location>
-
- <Location "/media">
- SetHandler None
- </Location>
-
- <LocationMatch "\.(jpg|gif|png)$">
- SetHandler None
- </LocationMatch>
-
-
-.. _lighttpd: http://www.lighttpd.net/
-.. _Nginx: http://wiki.nginx.org/Main
-.. _TUX: http://en.wikipedia.org/wiki/TUX_web_server
-.. _Apache: http://httpd.apache.org/
-.. _Cherokee: http://www.cherokee-project.com/
-
-.. _serving-the-admin-files:
-
-Serving the admin files
-=======================
-
-Note that the Django development server automagically serves admin media files,
-but this is not the case when you use any other server arrangement. You're
-responsible for setting up Apache, or whichever media server you're using, to
-serve the admin files.
-
-The admin files live in (:file:`django/contrib/admin/media`) of the Django
-distribution.
-
-Here are two recommended approaches:
-
- 1. Create a symbolic link to the admin media files from within your
- document root. This way, all of your Django-related files -- code **and**
- templates -- stay in one place, and you'll still be able to ``svn
- update`` your code to get the latest admin templates, if they change.
-
- 2. Or, copy the admin media files so that they live within your Apache
- document root.
-
-Using "eggs" with mod_python
-============================
-
-If you installed Django from a Python egg_ or are using eggs in your Django
-project, some extra configuration is required. Create an extra file in your
-project (or somewhere else) that contains something like the following:
-
-.. code-block:: python
-
- import os
- os.environ['PYTHON_EGG_CACHE'] = '/some/directory'
-
-Here, ``/some/directory`` is a directory that the Apache Web server process can
-write to. It will be used as the location for any unpacking of code the eggs
-need to do.
-
-Then you have to tell mod_python to import this file before doing anything
-else. This is done using the PythonImport_ directive to mod_python. You need
-to ensure that you have specified the ``PythonInterpreter`` directive to
-mod_python as described above__ (you need to do this even if you aren't
-serving multiple installations in this case). Then add the ``PythonImport``
-line in the main server configuration (i.e., outside the ``Location`` or
-``VirtualHost`` sections). For example::
-
- PythonInterpreter my_django
- PythonImport /path/to/my/project/file.py my_django
-
-Note that you can use an absolute path here (or a normal dotted import path),
-as described in the `mod_python manual`_. We use an absolute path in the
-above example because if any Python path modifications are required to access
-your project, they will not have been done at the time the ``PythonImport``
-line is processed.
-
-.. _Egg: http://peak.telecommunity.com/DevCenter/PythonEggs
-.. _PythonImport: http://www.modpython.org/live/current/doc-html/dir-other-pimp.html
-.. _mod_python manual: PythonImport_
-__ `Multiple Django installations on the same Apache`_
-
-Error handling
-==============
-
-When you use Apache/mod_python, errors will be caught by Django -- in other
-words, they won't propagate to the Apache level and won't appear in the Apache
-``error_log``.
-
-The exception for this is if something is really wonky in your Django setup. In
-that case, you'll see an "Internal Server Error" page in your browser and the
-full Python traceback in your Apache ``error_log`` file. The ``error_log``
-traceback is spread over multiple lines. (Yes, this is ugly and rather hard to
-read, but it's how mod_python does things.)
-
-If you get a segmentation fault
-===============================
-
-If Apache causes a segmentation fault, there are two probable causes, neither
-of which has to do with Django itself.
-
- 1. It may be because your Python code is importing the "pyexpat" module,
- which may conflict with the version embedded in Apache. For full
- information, see `Expat Causing Apache Crash`_.
-
- 2. It may be because you're running mod_python and mod_php in the same
- Apache instance, with MySQL as your database backend. In some cases,
- this causes a known mod_python issue due to version conflicts in PHP and
- the Python MySQL backend. There's full information in the
- `mod_python FAQ entry`_.
-
-If you continue to have problems setting up mod_python, a good thing to do is
-get a barebones mod_python site working, without the Django framework. This is
-an easy way to isolate mod_python-specific problems. `Getting mod_python Working`_
-details this procedure.
-
-The next step should be to edit your test code and add an import of any
-Django-specific code you're using -- your views, your models, your URLconf,
-your RSS configuration, etc. Put these imports in your test handler function
-and access your test URL in a browser. If this causes a crash, you've confirmed
-it's the importing of Django code that causes the problem. Gradually reduce the
-set of imports until it stops crashing, so as to find the specific module that
-causes the problem. Drop down further into modules and look into their imports,
-as necessary.
-
-.. _Expat Causing Apache Crash: http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash
-.. _mod_python FAQ entry: http://modpython.org/FAQ/faqw.py?req=show&file=faq02.013.htp
-.. _Getting mod_python Working: http://www.dscpl.com.au/wiki/ModPython/Articles/GettingModPythonWorking
-
-If you get a UnicodeEncodeError
-===============================
-
-If you're taking advantage of the internationalization features of Django (see
-:doc:`/topics/i18n/index`) and you intend to allow users to upload files, you must
-ensure that the environment used to start Apache is configured to accept
-non-ASCII file names. If your environment is not correctly configured, you
-will trigger ``UnicodeEncodeError`` exceptions when calling functions like
-``os.path()`` on filenames that contain non-ASCII characters.
-
-To avoid these problems, the environment used to start Apache should contain
-settings analogous to the following::
-
- export LANG='en_US.UTF-8'
- export LC_ALL='en_US.UTF-8'
-
-Consult the documentation for your operating system for the appropriate syntax
-and location to put these configuration items; ``/etc/apache2/envvars`` is a
-common location on Unix platforms. Once you have added these statements
-to your environment, restart Apache.
diff --git a/parts/django/docs/howto/deployment/modwsgi.txt b/parts/django/docs/howto/deployment/modwsgi.txt
deleted file mode 100644
index 17ba0e3..0000000
--- a/parts/django/docs/howto/deployment/modwsgi.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-==========================================
-How to use Django with Apache and mod_wsgi
-==========================================
-
-Deploying Django with Apache_ and `mod_wsgi`_ is the recommended way to get
-Django into production.
-
-.. _Apache: http://httpd.apache.org/
-.. _mod_wsgi: http://code.google.com/p/modwsgi/
-
-mod_wsgi is an Apache module which can be used to host any Python application
-which supports the `Python WSGI interface`_, including Django. Django will work
-with any version of Apache which supports mod_wsgi.
-
-.. _python wsgi interface: http://www.python.org/dev/peps/pep-0333/
-
-The `official mod_wsgi documentation`_ is fantastic; it's your source for all
-the details about how to use mod_wsgi. You'll probably want to start with the
-`installation and configuration documentation`_.
-
-.. _official mod_wsgi documentation: http://code.google.com/p/modwsgi/
-.. _installation and configuration documentation: http://code.google.com/p/modwsgi/wiki/InstallationInstructions
-
-Basic Configuration
-===================
-
-Once you've got mod_wsgi installed and activated, edit your ``httpd.conf`` file
-and add::
-
- WSGIScriptAlias / /path/to/mysite/apache/django.wsgi
-
-The first bit above is the url you want to be serving your application at (``/``
-indicates the root url), and the second is the location of a "WSGI file" -- see
-below -- on your system, usually inside of your project. This tells Apache
-to serve any request below the given URL using the WSGI application defined by that file.
-
-Next we'll need to actually create this WSGI application, so create the file
-mentioned in the second part of ``WSGIScriptAlias`` and add::
-
- import os
- import sys
-
- os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
-
- import django.core.handlers.wsgi
- application = django.core.handlers.wsgi.WSGIHandler()
-
-If your project is not on your ``PYTHONPATH`` by default you can add::
-
- path = '/usr/local/django'
- if path not in sys.path:
- sys.path.append(path)
-
-just above the final ``import`` line to place your project on the path. Remember to
-replace 'mysite.settings' with your correct settings file, and '/usr/local/django'
-with your own project's location.
-
-Serving media files
-===================
-
-Django doesn't serve media files itself; it leaves that job to whichever Web
-server you choose.
-
-We recommend using a separate Web server -- i.e., one that's not also running
-Django -- for serving media. Here are some good choices:
-
- * lighttpd_
- * Nginx_
- * TUX_
- * A stripped-down version of Apache_
- * Cherokee_
-
-If, however, you have no option but to serve media files on the same Apache
-``VirtualHost`` as Django, you can set up Apache to serve some URLs as
-static media, and others using the mod_wsgi interface to Django.
-
-This example sets up Django at the site root, but explicitly serves ``robots.txt``,
-``favicon.ico``, any CSS file, and anything in the ``/media/`` URL space as a static
-file. All other URLs will be served using mod_wsgi::
-
- Alias /robots.txt /usr/local/wsgi/static/robots.txt
- Alias /favicon.ico /usr/local/wsgi/static/favicon.ico
-
- AliasMatch /([^/]*\.css) /usr/local/wsgi/static/styles/$1
-
- Alias /media/ /usr/local/wsgi/static/media/
-
- <Directory /usr/local/wsgi/static>
- Order deny,allow
- Allow from all
- </Directory>
-
- WSGIScriptAlias / /usr/local/wsgi/scripts/django.wsgi
-
- <Directory /usr/local/wsgi/scripts>
- Order allow,deny
- Allow from all
- </Directory>
-
-.. _lighttpd: http://www.lighttpd.net/
-.. _Nginx: http://wiki.nginx.org/Main
-.. _TUX: http://en.wikipedia.org/wiki/TUX_web_server
-.. _Apache: http://httpd.apache.org/
-.. _Cherokee: http://www.cherokee-project.com/
-
-More details on configuring a mod_wsgi site to serve static files can be found
-in the mod_wsgi documentation on `hosting static files`_.
-
-.. _hosting static files: http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files
-
-Details
-=======
-
-For more details, see the `mod_wsgi documentation on Django integration`_,
-which explains the above in more detail, and walks through all the various
-options you've got when deploying under mod_wsgi.
-
-.. _mod_wsgi documentation on Django integration: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango
diff --git a/parts/django/docs/howto/error-reporting.txt b/parts/django/docs/howto/error-reporting.txt
deleted file mode 100644
index 9c61c97..0000000
--- a/parts/django/docs/howto/error-reporting.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-Error reporting via e-mail
-==========================
-
-When you're running a public site you should always turn off the
-:setting:`DEBUG` setting. That will make your server run much faster, and will
-also prevent malicious users from seeing details of your application that can be
-revealed by the error pages.
-
-However, running with :setting:`DEBUG` set to ``False`` means you'll never see
-errors generated by your site -- everyone will just see your public error pages.
-You need to keep track of errors that occur in deployed sites, so Django can be
-configured to e-mail you details of those errors.
-
-Server errors
--------------
-
-When :setting:`DEBUG` is ``False``, Django will e-mail the users listed in the
-:setting:`ADMINS` setting whenever your code raises an unhandled exception and
-results in an internal server error (HTTP status code 500). This gives the
-administrators immediate notification of any errors. The :setting:`ADMINS` will
-get a description of the error, a complete Python traceback, and details about
-the HTTP request that caused the error.
-
-.. note::
-
- In order to send e-mail, Django requires a few settings telling it
- how to connect to your mail server. At the very least, you'll need
- to specify :setting:`EMAIL_HOST` and possibly
- :setting:`EMAIL_HOST_USER` and :setting:`EMAIL_HOST_PASSWORD`,
- though other settings may be also required depending on your mail
- server's configuration. Consult :doc:`the Django settings
- documentation </ref/settings>` for a full list of email-related
- settings.
-
-By default, Django will send e-mail from root@localhost. However, some mail
-providers reject all e-mail from this address. To use a different sender
-address, modify the :setting:`SERVER_EMAIL` setting.
-
-To disable this behavior, just remove all entries from the :setting:`ADMINS`
-setting.
-
-404 errors
-----------
-
-Django can also be configured to e-mail errors about broken links (404 "page
-not found" errors). Django sends e-mails about 404 errors when:
-
- * :setting:`DEBUG` is ``False``
-
- * :setting:`SEND_BROKEN_LINK_EMAILS` is ``True``
-
- * Your :setting:`MIDDLEWARE_CLASSES` setting includes ``CommonMiddleware``
- (which it does by default).
-
-If those conditions are met, Django will e-mail the users listed in the
-:setting:`MANAGERS` setting whenever your code raises a 404 and the request has
-a referer. (It doesn't bother to e-mail for 404s that don't have a referer --
-those are usually just people typing in broken URLs or broken Web 'bots).
-
-You can tell Django to stop reporting particular 404s by tweaking the
-:setting:`IGNORABLE_404_ENDS` and :setting:`IGNORABLE_404_STARTS` settings. Both
-should be a tuple of strings. For example::
-
- IGNORABLE_404_ENDS = ('.php', '.cgi')
- IGNORABLE_404_STARTS = ('/phpmyadmin/',)
-
-In this example, a 404 to any URL ending with ``.php`` or ``.cgi`` will *not* be
-reported. Neither will any URL starting with ``/phpmyadmin/``.
-
-The best way to disable this behavior is to set
-:setting:`SEND_BROKEN_LINK_EMAILS` to ``False``.
-
-.. seealso::
-
- You can also set up custom error reporting by writing a custom piece of
- :ref:`exception middleware <exception-middleware>`. If you do write custom
- error handling, it's a good idea to emulate Django's built-in error handling
- and only report/log errors if :setting:`DEBUG` is ``False``.
diff --git a/parts/django/docs/howto/i18n.txt b/parts/django/docs/howto/i18n.txt
deleted file mode 100644
index 64b33d7..0000000
--- a/parts/django/docs/howto/i18n.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-.. _using-translations-in-your-own-projects:
-
-===============================================
-Using internationalization in your own projects
-===============================================
-
-At runtime, Django looks for translations by following this algorithm:
-
- * First, it looks for a ``locale`` directory in the directory containing
- your settings file.
- * Second, it looks for a ``locale`` directory in the project directory.
- * Third, it looks for a ``locale`` directory in each of the installed apps.
- It does this in the reverse order of INSTALLED_APPS
- * Finally, it checks the Django-provided base translation in
- ``django/conf/locale``.
-
-In all cases the name of the directory containing the translation is expected to
-be named using :term:`locale name` notation. E.g. ``de``, ``pt_BR``, ``es_AR``,
-etc.
-
-This way, you can write applications that include their own translations, and
-you can override base translations in your project path. Or, you can just build
-a big project out of several apps and put all translations into one big project
-message file. The choice is yours.
-
-.. note::
-
- If you're using manually configured settings, as described in
- :ref:`settings-without-django-settings-module`, the ``locale`` directory in
- the project directory will not be examined, since Django loses the ability
- to work out the location of the project directory. (Django normally uses the
- location of the settings file to determine this, and a settings file doesn't
- exist if you're manually configuring your settings.)
-
-All message file repositories are structured the same way. They are:
-
- * ``$APPPATH/locale/<language>/LC_MESSAGES/django.(po|mo)``
- * ``$PROJECTPATH/locale/<language>/LC_MESSAGES/django.(po|mo)``
- * All paths listed in ``LOCALE_PATHS`` in your settings file are
- searched in that order for ``<language>/LC_MESSAGES/django.(po|mo)``
- * ``$PYTHONPATH/django/conf/locale/<language>/LC_MESSAGES/django.(po|mo)``
-
-To create message files, you use the :djadmin:`django-admin.py makemessages <makemessages>`
-tool. You only need to be in the same directory where the ``locale/`` directory
-is located. And you use :djadmin:`django-admin.py compilemessages <compilemessages>`
-to produce the binary ``.mo`` files that are used by ``gettext``. Read the
-:doc:`/topics/i18n/localization` document for more details.
-
-You can also run ``django-admin.py compilemessages --settings=path.to.settings``
-to make the compiler process all the directories in your :setting:`LOCALE_PATHS`
-setting.
-
-Application message files are a bit complicated to discover -- they need the
-:class:`~django.middleware.locale.LocaleMiddleware`. If you don't use the
-middleware, only the Django message files and project message files will be
-installed and available at runtime.
-
-Finally, you should give some thought to the structure of your translation
-files. If your applications need to be delivered to other users and will
-be used in other projects, you might want to use app-specific translations.
-But using app-specific translations and project translations could produce
-weird problems with ``makemessages``: It will traverse all directories below
-the current path and so might put message IDs into the project message file
-that are already in application message files.
-
-The easiest way out is to store applications that are not part of the project
-(and so carry their own translations) outside the project tree. That way,
-``django-admin.py makemessages`` on the project level will only translate
-strings that are connected to your explicit project and not strings that are
-distributed independently.
-
-Using translations outside views and templates
-==============================================
-
-While Django provides a rich set of i18n tools for use in views and templates,
-it does not restrict the usage to Django-specific code. The Django translation
-mechanisms can be used to translate arbitrary texts to any language that is
-supported by Django (as long as an appropriate translation catalog exists, of
-course). You can load a translation catalog, activate it and translate text to
-language of your choice, but remember to switch back to original language, as
-activating a translation catalog is done on per-thread basis and such change
-will affect code running in the same thread.
-
-For example::
-
- from django.utils import translation
- def welcome_translated(language):
- cur_language = translation.get_language()
- try:
- translation.activate(language)
- text = translation.ugettext('welcome')
- finally:
- translation.activate(cur_language)
- return text
-
-Calling this function with the value 'de' will give you ``"Willkommen"``,
-regardless of :setting:`LANGUAGE_CODE` and language set by middleware.
-
-Functions of particular interest are ``django.utils.translation.get_language()``
-which returns the language used in the current thread,
-``django.utils.translation.activate()`` which activates a translation catalog
-for the current thread, and ``django.utils.translation.check_for_language()``
-which checks if the given language is supported by Django.
diff --git a/parts/django/docs/howto/index.txt b/parts/django/docs/howto/index.txt
deleted file mode 100644
index 49d0644..0000000
--- a/parts/django/docs/howto/index.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-"How-to" guides
-===============
-
-Here you'll find short answers to "How do I....?" types of questions. These
-how-to guides don't cover topics in depth -- you'll find that material in the
-:doc:`/topics/index` and the :doc:`/ref/index`. However, these guides will help
-you quickly accomplish common tasks.
-
-.. toctree::
- :maxdepth: 1
-
- apache-auth
- auth-remote-user
- custom-management-commands
- custom-model-fields
- custom-template-tags
- custom-file-storage
- deployment/index
- error-reporting
- initial-data
- i18n
- jython
- legacy-databases
- outputting-csv
- outputting-pdf
- static-files
-
-.. seealso::
-
- The `Django community aggregator`_, where we aggregate content from the
- global Django community. Many writers in the aggregator write this sort of
- how-to material.
-
- .. _django community aggregator: http://www.djangoproject.com/community/
diff --git a/parts/django/docs/howto/initial-data.txt b/parts/django/docs/howto/initial-data.txt
deleted file mode 100644
index cf3f65d..0000000
--- a/parts/django/docs/howto/initial-data.txt
+++ /dev/null
@@ -1,142 +0,0 @@
-=================================
-Providing initial data for models
-=================================
-
-It's sometimes useful to pre-populate your database with hard-coded data when
-you're first setting up an app. There's a couple of ways you can have Django
-automatically create this data: you can provide `initial data via fixtures`_, or
-you can provide `initial data as SQL`_.
-
-In general, using a fixture is a cleaner method since it's database-agnostic,
-but initial SQL is also quite a bit more flexible.
-
-.. _initial data as sql: `providing initial sql data`_
-.. _initial data via fixtures: `providing initial data with fixtures`_
-
-Providing initial data with fixtures
-====================================
-
-A fixture is a collection of data that Django knows how to import into a
-database. The most straightforward way of creating a fixture if you've already
-got some data is to use the :djadmin:`manage.py dumpdata <dumpdata>` command.
-Or, you can write fixtures by hand; fixtures can be written as XML, YAML, or
-JSON documents. The :doc:`serialization documentation </topics/serialization>`
-has more details about each of these supported :ref:`serialization formats
-<serialization-formats>`.
-
-As an example, though, here's what a fixture for a simple ``Person`` model might
-look like in JSON:
-
-.. code-block:: js
-
- [
- {
- "model": "myapp.person",
- "pk": 1,
- "fields": {
- "first_name": "John",
- "last_name": "Lennon"
- }
- },
- {
- "model": "myapp.person",
- "pk": 2,
- "fields": {
- "first_name": "Paul",
- "last_name": "McCartney"
- }
- }
- ]
-
-And here's that same fixture as YAML:
-
-.. code-block:: none
-
- - model: myapp.person
- pk: 1
- fields:
- first_name: John
- last_name: Lennon
- - model: myapp.person
- pk: 2
- fields:
- first_name: Paul
- last_name: McCartney
-
-You'll store this data in a ``fixtures`` directory inside your app.
-
-Loading data is easy: just call :djadmin:`manage.py loaddata fixturename
-<loaddata>`, where *fixturename* is the name of the fixture file you've created.
-Every time you run :djadmin:`loaddata` the data will be read from the fixture
-and re-loaded into the database. Note that this means that if you change one of
-the rows created by a fixture and then run :djadmin:`loaddata` again you'll
-wipe out any changes you've made.
-
-Automatically loading initial data fixtures
--------------------------------------------
-
-If you create a fixture named ``initial_data.[xml/yaml/json]``, that fixture will
-be loaded every time you run :djadmin:`syncdb`. This is extremely convenient,
-but be careful: remember that the data will be refreshed *every time* you run
-:djadmin:`syncdb`. So don't use ``initial_data`` for data you'll want to edit.
-
-.. seealso::
-
- Fixtures are also used by the :ref:`testing framework
- <topics-testing-fixtures>` to help set up a consistent test environment.
-
-.. _initial-sql:
-
-Providing initial SQL data
-==========================
-
-Django provides a hook for passing the database arbitrary SQL that's executed
-just after the CREATE TABLE statements when you run :djadmin:`syncdb`. You can
-use this hook to populate default records, or you could also create SQL
-functions, views, triggers, etc.
-
-The hook is simple: Django just looks for a file called ``sql/<modelname>.sql``,
-in your app directory, where ``<modelname>`` is the model's name in lowercase.
-
-So, if you had a ``Person`` model in an app called ``myapp``, you could add
-arbitrary SQL to the file ``sql/person.sql`` inside your ``myapp`` directory.
-Here's an example of what the file might contain:
-
-.. code-block:: sql
-
- INSERT INTO myapp_person (first_name, last_name) VALUES ('John', 'Lennon');
- INSERT INTO myapp_person (first_name, last_name) VALUES ('Paul', 'McCartney');
-
-Each SQL file, if given, is expected to contain valid SQL statements
-which will insert the desired data (e.g., properly-formatted
-``INSERT`` statements separated by semicolons).
-
-The SQL files are read by the :djadmin:`sqlcustom`, :djadmin:`sqlreset`,
-:djadmin:`sqlall` and :djadmin:`reset` commands in :doc:`manage.py
-</ref/django-admin>`. Refer to the :doc:`manage.py documentation
-</ref/django-admin>` for more information.
-
-Note that if you have multiple SQL data files, there's no guarantee of
-the order in which they're executed. The only thing you can assume is
-that, by the time your custom data files are executed, all the
-database tables already will have been created.
-
-Database-backend-specific SQL data
-----------------------------------
-
-There's also a hook for backend-specific SQL data. For example, you
-can have separate initial-data files for PostgreSQL and MySQL. For
-each app, Django looks for a file called
-``<appname>/sql/<modelname>.<backend>.sql``, where ``<appname>`` is
-your app directory, ``<modelname>`` is the model's name in lowercase
-and ``<backend>`` is the last part of the module name provided for the
-:setting:`ENGINE` in your settings file (e.g., if you have defined a
-database with an :setting:`ENGINE` value of
-``django.db.backends.postgresql``, Django will look for
-``<appname>/sql/<modelname>.postgresql.sql``).
-
-Backend-specific SQL data is executed before non-backend-specific SQL
-data. For example, if your app contains the files ``sql/person.sql``
-and ``sql/person.postgresql.sql`` and you're installing the app on
-PostgreSQL, Django will execute the contents of
-``sql/person.postgresql.sql`` first, then ``sql/person.sql``.
diff --git a/parts/django/docs/howto/jython.txt b/parts/django/docs/howto/jython.txt
deleted file mode 100644
index 1bf8d6c..0000000
--- a/parts/django/docs/howto/jython.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-========================
-Running Django on Jython
-========================
-
-.. index:: Jython, Java, JVM
-
-Jython_ is an implementation of Python that runs on the Java platform (JVM).
-Django runs cleanly on Jython version 2.5 or later, which means you can deploy
-Django on any Java platform.
-
-This document will get you up and running with Django on top of Jython.
-
-.. _jython: http://www.jython.org/
-
-Installing Jython
-=================
-
-Django works with Jython versions 2.5b3 and higher. Download Jython at
-http://www.jython.org/.
-
-Creating a servlet container
-============================
-
-If you just want to experiment with Django, skip ahead to the next section;
-Django includes a lightweight Web server you can use for testing, so you won't
-need to set up anything else until you're ready to deploy Django in production.
-
-If you want to use Django on a production site, use a Java servlet container,
-such as `Apache Tomcat`_. Full JavaEE applications servers such as `GlassFish`_
-or `JBoss`_ are also OK, if you need the extra features they include.
-
-.. _`Apache Tomcat`: http://tomcat.apache.org/
-.. _GlassFish: https://glassfish.dev.java.net/
-.. _JBoss: http://www.jboss.org/
-
-Installing Django
-=================
-
-The next step is to install Django itself. This is exactly the same as
-installing Django on standard Python, so see
-:ref:`removing-old-versions-of-django` and :ref:`install-django-code` for
-instructions.
-
-Installing Jython platform support libraries
-============================================
-
-The `django-jython`_ project contains database backends and management commands
-for Django/Jython development. Note that the builtin Django backends won't work
-on top of Jython.
-
-.. _`django-jython`: http://code.google.com/p/django-jython/
-
-To install it, follow the `installation instructions`_ detailed on the project
-Web site. Also, read the `database backends`_ documentation there.
-
-.. _`installation instructions`: http://code.google.com/p/django-jython/wiki/Install
-.. _`database backends`: http://code.google.com/p/django-jython/wiki/DatabaseBackends
-
-Differences with Django on Jython
-=================================
-
-.. index:: JYTHONPATH
-
-At this point, Django on Jython should behave nearly identically to Django
-running on standard Python. However, are a few differences to keep in mind:
-
- * Remember to use the ``jython`` command instead of ``python``. The
- documentation uses ``python`` for consistancy, but if you're using Jython
- you'll want to mentally replace ``python`` with ``jython`` every time it
- occurs.
-
- * Similarly, you'll need to use the ``JYTHONPATH`` environment variable
- instead of ``PYTHONPATH``.
diff --git a/parts/django/docs/howto/legacy-databases.txt b/parts/django/docs/howto/legacy-databases.txt
deleted file mode 100644
index 2121871..0000000
--- a/parts/django/docs/howto/legacy-databases.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-=========================================
-Integrating Django with a legacy database
-=========================================
-
-While Django is best suited for developing new applications, it's quite
-possible to integrate it into legacy databases. Django includes a couple of
-utilities to automate as much of this process as possible.
-
-This document assumes you know the Django basics, as covered in the
-:doc:`tutorial </intro/tutorial01>`.
-
-Once you've got Django set up, you'll follow this general process to integrate
-with an existing database.
-
-Give Django your database parameters
-====================================
-
-You'll need to tell Django what your database connection parameters are, and
-what the name of the database is. Do that by editing the :setting:`DATABASES`
-setting and assigning values to the following keys for the ``'default'``
-connection:
-
- * :setting:`NAME`
- * :setting:`ENGINE`
- * :setting:`USER`
- * :setting:`PASSWORD`
- * :setting:`HOST`
- * :setting:`PORT`
-
-Auto-generate the models
-========================
-
-.. highlight:: bash
-
-Django comes with a utility called :djadmin:`inspectdb` that can create models
-by introspecting an existing database. You can view the output by running this
-command::
-
- python manage.py inspectdb
-
-Save this as a file by using standard Unix output redirection::
-
- python manage.py inspectdb > models.py
-
-This feature is meant as a shortcut, not as definitive model generation. See the
-:djadmin:`documentation of inspectdb <inspectdb>` for more information.
-
-Once you've cleaned up your models, name the file ``models.py`` and put it in
-the Python package that holds your app. Then add the app to your
-:setting:`INSTALLED_APPS` setting.
-
-Install the core Django tables
-==============================
-
-Next, run the :djadmin:`syncdb` command to install any extra needed database
-records such as admin permissions and content types::
-
- python manage.py syncdb
-
-Test and tweak
-==============
-
-Those are the basic steps -- from here you'll want to tweak the models Django
-generated until they work the way you'd like. Try accessing your data via the
-Django database API, and try editing objects via Django's admin site, and edit
-the models file accordingly.
diff --git a/parts/django/docs/howto/outputting-csv.txt b/parts/django/docs/howto/outputting-csv.txt
deleted file mode 100644
index 46e111d..0000000
--- a/parts/django/docs/howto/outputting-csv.txt
+++ /dev/null
@@ -1,137 +0,0 @@
-==========================
-Outputting CSV with Django
-==========================
-
-This document explains how to output CSV (Comma Separated Values) dynamically
-using Django views. To do this, you can either use the `Python CSV library`_ or
-the Django template system.
-
-.. _Python CSV library: http://docs.python.org/library/csv.html
-
-Using the Python CSV library
-============================
-
-Python comes with a CSV library, ``csv``. The key to using it with Django is
-that the ``csv`` module's CSV-creation capability acts on file-like objects, and
-Django's :class:`~django.http.HttpResponse` objects are file-like objects.
-
-Here's an example::
-
- import csv
- from django.http import HttpResponse
-
- def some_view(request):
- # Create the HttpResponse object with the appropriate CSV header.
- response = HttpResponse(mimetype='text/csv')
- response['Content-Disposition'] = 'attachment; filename=somefilename.csv'
-
- writer = csv.writer(response)
- writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
- writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
-
- return response
-
-The code and comments should be self-explanatory, but a few things deserve a
-mention:
-
- * The response gets a special MIME type, ``text/csv``. This tells
- browsers that the document is a CSV file, rather than an HTML file. If
- you leave this off, browsers will probably interpret the output as HTML,
- which will result in ugly, scary gobbledygook in the browser window.
-
- * The response gets an additional ``Content-Disposition`` header, which
- contains the name of the CSV file. This filename is arbitrary; call it
- whatever you want. It'll be used by browsers in the "Save as..."
- dialogue, etc.
-
- * Hooking into the CSV-generation API is easy: Just pass ``response`` as the
- first argument to ``csv.writer``. The ``csv.writer`` function expects a
- file-like object, and :class:`~django.http.HttpResponse` objects fit the
- bill.
-
- * For each row in your CSV file, call ``writer.writerow``, passing it an
- iterable object such as a list or tuple.
-
- * The CSV module takes care of quoting for you, so you don't have to worry
- about escaping strings with quotes or commas in them. Just pass
- ``writerow()`` your raw strings, and it'll do the right thing.
-
-Handling Unicode
-~~~~~~~~~~~~~~~~
-
-Python's ``csv`` module does not support Unicode input. Since Django uses
-Unicode internally this means strings read from sources such as
-:class:`~django.http.HttpRequest` are potentially problematic. There are a few
-options for handling this:
-
- * Manually encode all Unicode objects to a compatible encoding.
-
- * Use the ``UnicodeWriter`` class provided in the `csv module's examples
- section`_.
-
- * Use the `python-unicodecsv module`_, which aims to be a drop-in
- replacement for ``csv`` that gracefully handles Unicode.
-
-For more information, see the Python `CSV File Reading and Writing`_
-documentation.
-
-.. _`csv module's examples section`: http://docs.python.org/library/csv.html#examples
-.. _`python-unicodecsv module`: https://github.com/jdunck/python-unicodecsv
-.. _`CSV File Reading and Writing`: http://docs.python.org/library/csv.html
-
-Using the template system
-=========================
-
-Alternatively, you can use the :doc:`Django template system </topics/templates>`
-to generate CSV. This is lower-level than using the convenient Python ``csv``
-module, but the solution is presented here for completeness.
-
-The idea here is to pass a list of items to your template, and have the
-template output the commas in a :ttag:`for` loop.
-
-Here's an example, which generates the same CSV file as above::
-
- from django.http import HttpResponse
- from django.template import loader, Context
-
- def some_view(request):
- # Create the HttpResponse object with the appropriate CSV header.
- response = HttpResponse(mimetype='text/csv')
- response['Content-Disposition'] = 'attachment; filename=somefilename.csv'
-
- # The data is hard-coded here, but you could load it from a database or
- # some other source.
- csv_data = (
- ('First row', 'Foo', 'Bar', 'Baz'),
- ('Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"),
- )
-
- t = loader.get_template('my_template_name.txt')
- c = Context({
- 'data': csv_data,
- })
- response.write(t.render(c))
- return response
-
-The only difference between this example and the previous example is that this
-one uses template loading instead of the CSV module. The rest of the code --
-such as the ``mimetype='text/csv'`` -- is the same.
-
-Then, create the template ``my_template_name.txt``, with this template code:
-
-.. code-block:: html+django
-
- {% for row in data %}"{{ row.0|addslashes }}", "{{ row.1|addslashes }}", "{{ row.2|addslashes }}", "{{ row.3|addslashes }}", "{{ row.4|addslashes }}"
- {% endfor %}
-
-This template is quite basic. It just iterates over the given data and displays
-a line of CSV for each row. It uses the :tfilter:`addslashes` template filter to
-ensure there aren't any problems with quotes.
-
-Other text-based formats
-========================
-
-Notice that there isn't very much specific to CSV here -- just the specific
-output format. You can use either of these techniques to output any text-based
-format you can dream of. You can also use a similar technique to generate
-arbitrary binary data; see :doc:`/howto/outputting-pdf` for an example.
diff --git a/parts/django/docs/howto/outputting-pdf.txt b/parts/django/docs/howto/outputting-pdf.txt
deleted file mode 100644
index 67950d0..0000000
--- a/parts/django/docs/howto/outputting-pdf.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-===========================
-Outputting PDFs with Django
-===========================
-
-This document explains how to output PDF files dynamically using Django views.
-This is made possible by the excellent, open-source ReportLab_ Python PDF
-library.
-
-The advantage of generating PDF files dynamically is that you can create
-customized PDFs for different purposes -- say, for different users or different
-pieces of content.
-
-For example, Django was used at kusports.com_ to generate customized,
-printer-friendly NCAA tournament brackets, as PDF files, for people
-participating in a March Madness contest.
-
-.. _ReportLab: http://www.reportlab.org/oss/rl-toolkit/
-.. _kusports.com: http://www.kusports.com/
-
-Install ReportLab
-=================
-
-Download and install the ReportLab library from http://www.reportlab.org/oss/rl-toolkit/download/.
-The `user guide`_ (not coincidentally, a PDF file) explains how to install it.
-
-Test your installation by importing it in the Python interactive interpreter::
-
- >>> import reportlab
-
-If that command doesn't raise any errors, the installation worked.
-
-.. _user guide: http://www.reportlab.com/docs/reportlab-userguide.pdf
-
-Write your view
-===============
-
-The key to generating PDFs dynamically with Django is that the ReportLab API
-acts on file-like objects, and Django's :class:`~django.http.HttpResponse`
-objects are file-like objects.
-
-Here's a "Hello World" example::
-
- from reportlab.pdfgen import canvas
- from django.http import HttpResponse
-
- def some_view(request):
- # Create the HttpResponse object with the appropriate PDF headers.
- response = HttpResponse(mimetype='application/pdf')
- response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
-
- # Create the PDF object, using the response object as its "file."
- p = canvas.Canvas(response)
-
- # Draw things on the PDF. Here's where the PDF generation happens.
- # See the ReportLab documentation for the full list of functionality.
- p.drawString(100, 100, "Hello world.")
-
- # Close the PDF object cleanly, and we're done.
- p.showPage()
- p.save()
- return response
-
-The code and comments should be self-explanatory, but a few things deserve a
-mention:
-
- * The response gets a special MIME type, ``application/pdf``. This tells
- browsers that the document is a PDF file, rather than an HTML file. If
- you leave this off, browsers will probably interpret the output as HTML,
- which would result in ugly, scary gobbledygook in the browser window.
-
- * The response gets an additional ``Content-Disposition`` header, which
- contains the name of the PDF file. This filename is arbitrary: Call it
- whatever you want. It'll be used by browsers in the "Save as..."
- dialogue, etc.
-
- * The ``Content-Disposition`` header starts with ``'attachment; '`` in this
- example. This forces Web browsers to pop-up a dialog box
- prompting/confirming how to handle the document even if a default is set
- on the machine. If you leave off ``'attachment;'``, browsers will handle
- the PDF using whatever program/plugin they've been configured to use for
- PDFs. Here's what that code would look like::
-
- response['Content-Disposition'] = 'filename=somefilename.pdf'
-
- * Hooking into the ReportLab API is easy: Just pass ``response`` as the
- first argument to ``canvas.Canvas``. The ``Canvas`` class expects a
- file-like object, and :class:`~django.http.HttpResponse` objects fit the
- bill.
-
- * Note that all subsequent PDF-generation methods are called on the PDF
- object (in this case, ``p``) -- not on ``response``.
-
- * Finally, it's important to call ``showPage()`` and ``save()`` on the PDF
- file.
-
-Complex PDFs
-============
-
-If you're creating a complex PDF document with ReportLab, consider using the
-cStringIO_ library as a temporary holding place for your PDF file. The cStringIO
-library provides a file-like object interface that is particularly efficient.
-Here's the above "Hello World" example rewritten to use ``cStringIO``::
-
- # Fall back to StringIO in environments where cStringIO is not available
- try:
- from cStringIO import StringIO
- except ImportError:
- from StringIO import StringIO
- from reportlab.pdfgen import canvas
- from django.http import HttpResponse
-
- def some_view(request):
- # Create the HttpResponse object with the appropriate PDF headers.
- response = HttpResponse(mimetype='application/pdf')
- response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
-
- buffer = StringIO()
-
- # Create the PDF object, using the StringIO object as its "file."
- p = canvas.Canvas(buffer)
-
- # Draw things on the PDF. Here's where the PDF generation happens.
- # See the ReportLab documentation for the full list of functionality.
- p.drawString(100, 100, "Hello world.")
-
- # Close the PDF object cleanly.
- p.showPage()
- p.save()
-
- # Get the value of the StringIO buffer and write it to the response.
- pdf = buffer.getvalue()
- buffer.close()
- response.write(pdf)
- return response
-
-.. _cStringIO: http://docs.python.org/library/stringio.html#module-cStringIO
-
-Further resources
-=================
-
- * PDFlib_ is another PDF-generation library that has Python bindings. To
- use it with Django, just use the same concepts explained in this article.
- * `Pisa XHTML2PDF`_ is yet another PDF-generation library. Pisa ships with
- an example of how to integrate Pisa with Django.
- * HTMLdoc_ is a command-line script that can convert HTML to PDF. It
- doesn't have a Python interface, but you can escape out to the shell
- using ``system`` or ``popen`` and retrieve the output in Python.
-
-.. _PDFlib: http://www.pdflib.org/
-.. _`Pisa XHTML2PDF`: http://www.xhtml2pdf.com/
-.. _HTMLdoc: http://www.htmldoc.org/
-
-Other formats
-=============
-
-Notice that there isn't a lot in these examples that's PDF-specific -- just the
-bits using ``reportlab``. You can use a similar technique to generate any
-arbitrary format that you can find a Python library for. Also see
-:doc:`/howto/outputting-csv` for another example and some techniques you can use
-when generated text-based formats.
diff --git a/parts/django/docs/howto/static-files.txt b/parts/django/docs/howto/static-files.txt
deleted file mode 100644
index c3692d5..0000000
--- a/parts/django/docs/howto/static-files.txt
+++ /dev/null
@@ -1,162 +0,0 @@
-=========================
-How to serve static files
-=========================
-
-.. module:: django.views.static
- :synopsis: Serving of static files during development.
-
-Django itself doesn't serve static (media) files, such as images, style sheets,
-or video. It leaves that job to whichever Web server you choose.
-
-The reasoning here is that standard Web servers, such as Apache_, lighttpd_ and
-Cherokee_, are much more fine-tuned at serving static files than a Web
-application framework.
-
-With that said, Django does support static files **during development**. You can
-use the :func:`django.views.static.serve` view to serve media files.
-
-.. _Apache: http://httpd.apache.org/
-.. _lighttpd: http://www.lighttpd.net/
-.. _Cherokee: http://www.cherokee-project.com/
-
-.. seealso::
-
- If you just need to serve the admin media from a nonstandard location, see
- the :djadminopt:`--adminmedia` parameter to :djadmin:`runserver`.
-
-The big, fat disclaimer
-=======================
-
-Using this method is **inefficient** and **insecure**. Do not use this in a
-production setting. Use this only for development.
-
-For information on serving static files in an Apache production environment,
-see the :ref:`Django mod_python documentation <serving-media-files>`.
-
-How to do it
-============
-
-Here's the formal definition of the :func:`~django.views.static.serve` view:
-
-.. function:: def serve(request, path, document_root, show_indexes=False)
-
-To use it, just put this in your :doc:`URLconf </topics/http/urls>`::
-
- (r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
- {'document_root': '/path/to/media'}),
-
-...where ``site_media`` is the URL where your media will be rooted, and
-``/path/to/media`` is the filesystem root for your media. This will call the
-:func:`~django.views.static.serve` view, passing in the path from the URLconf
-and the (required) ``document_root`` parameter.
-
-Given the above URLconf:
-
- * The file ``/path/to/media/foo.jpg`` will be made available at the URL
- ``/site_media/foo.jpg``.
-
- * The file ``/path/to/media/css/mystyles.css`` will be made available
- at the URL ``/site_media/css/mystyles.css``.
-
- * The file ``/path/bar.jpg`` will not be accessible, because it doesn't
- fall under the document root.
-
-Of course, it's not compulsory to use a fixed string for the
-``'document_root'`` value. You might wish to make that an entry in your
-settings file and use the setting value there. That will allow you and
-other developers working on the code to easily change the value as
-required. For example, if we have a line in ``settings.py`` that says::
-
- STATIC_DOC_ROOT = '/path/to/media'
-
-...we could write the above :doc:`URLconf </topics/http/urls>` entry as::
-
- from django.conf import settings
- ...
- (r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
- {'document_root': settings.STATIC_DOC_ROOT}),
-
-Be careful not to use the same path as your :setting:`ADMIN_MEDIA_PREFIX` (which defaults
-to ``/media/``) as this will overwrite your URLconf entry.
-
-Directory listings
-==================
-
-Optionally, you can pass the ``show_indexes`` parameter to the
-:func:`~django.views.static.serve` view. This is ``False`` by default. If it's
-``True``, Django will display file listings for directories.
-
-For example::
-
- (r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
- {'document_root': '/path/to/media', 'show_indexes': True}),
-
-You can customize the index view by creating a template called
-``static/directory_index.html``. That template gets two objects in its context:
-
- * ``directory`` -- the directory name (a string)
- * ``file_list`` -- a list of file names (as strings) in the directory
-
-Here's the default ``static/directory_index.html`` template:
-
-.. code-block:: html+django
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <meta http-equiv="Content-Language" content="en-us" />
- <meta name="robots" content="NONE,NOARCHIVE" />
- <title>Index of {{ directory }}</title>
- </head>
- <body>
- <h1>Index of {{ directory }}</h1>
- <ul>
- {% for f in file_list %}
- <li><a href="{{ f }}">{{ f }}</a></li>
- {% endfor %}
- </ul>
- </body>
- </html>
-
-.. versionchanged:: 1.0.3
- Prior to Django 1.0.3, there was a bug in the view that provided directory
- listings. The template that was loaded had to be called
- ``static/directory_listing`` (with no ``.html`` extension). For backwards
- compatibility with earlier versions, Django will still load templates with
- the older (no extension) name, but it will prefer the
- ``directory_index.html`` version.
-
-Limiting use to DEBUG=True
-==========================
-
-Because URLconfs are just plain Python modules, you can use Python logic to
-make the static-media view available only in development mode. This is a handy
-trick to make sure the static-serving view doesn't slip into a production
-setting by mistake.
-
-Do this by wrapping an ``if DEBUG`` statement around the
-:func:`django.views.static.serve` inclusion. Here's a full example URLconf::
-
- from django.conf.urls.defaults import *
- from django.conf import settings
-
- urlpatterns = patterns('',
- (r'^articles/2003/$', 'news.views.special_case_2003'),
- (r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'),
- (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'),
- (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d+)/$', 'news.views.article_detail'),
- )
-
- if settings.DEBUG:
- urlpatterns += patterns('',
- (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media'}),
- )
-
-This code is straightforward. It imports the settings and checks the value of
-the :setting:`DEBUG` setting. If it evaluates to ``True``, then ``site_media``
-will be associated with the ``django.views.static.serve`` view. If not, then the
-view won't be made available.
-
-Of course, the catch here is that you'll have to remember to set ``DEBUG=False``
-in your production settings file. But you should be doing that anyway.
diff --git a/parts/django/docs/index.txt b/parts/django/docs/index.txt
deleted file mode 100644
index f163fd9..0000000
--- a/parts/django/docs/index.txt
+++ /dev/null
@@ -1,213 +0,0 @@
-
-.. _index:
-
-====================
-Django documentation
-====================
-
-.. rubric:: Everything you need to know about Django (and then some).
-
-Getting help
-============
-
-Having trouble? We'd like to help!
-
-* Try the :doc:`FAQ <faq/index>` -- it's got answers to many common questions.
-
-* Looking for specific information? Try the :ref:`genindex`, :ref:`modindex` or
- the :doc:`detailed table of contents <contents>`.
-
-* Search for information in the `archives of the django-users mailing list`_, or
- `post a question`_.
-
-* Ask a question in the `#django IRC channel`_, or search the `IRC logs`_ to see
- if it's been asked before.
-
-* Report bugs with Django in our `ticket tracker`_.
-
-.. _archives of the django-users mailing list: http://groups.google.com/group/django-users/
-.. _post a question: http://groups.google.com/group/django-users/
-.. _#django IRC channel: irc://irc.freenode.net/django
-.. _IRC logs: http://botland.oebfare.com/logger/django/
-.. _ticket tracker: http://code.djangoproject.com/
-
-First steps
-===========
-
- * **From scratch:**
- :doc:`Overview <intro/overview>` |
- :doc:`Installation <intro/install>`
-
- * **Tutorial:**
- :doc:`Part 1 <intro/tutorial01>` |
- :doc:`Part 2 <intro/tutorial02>` |
- :doc:`Part 3 <intro/tutorial03>` |
- :doc:`Part 4 <intro/tutorial04>`
-
-The model layer
-===============
-
- * **Models:**
- :doc:`Model syntax <topics/db/models>` |
- :doc:`Field types <ref/models/fields>` |
- :doc:`Meta options <ref/models/options>`
-
- * **QuerySets:**
- :doc:`Executing queries <topics/db/queries>` |
- :doc:`QuerySet method reference <ref/models/querysets>`
-
- * **Model instances:**
- :doc:`Instance methods <ref/models/instances>` |
- :doc:`Accessing related objects <ref/models/relations>`
-
- * **Advanced:**
- :doc:`Managers <topics/db/managers>` |
- :doc:`Raw SQL <topics/db/sql>` |
- :doc:`Transactions <topics/db/transactions>` |
- :doc:`Aggregation <topics/db/aggregation>` |
- :doc:`Custom fields <howto/custom-model-fields>` |
- :doc:`Multiple databases <topics/db/multi-db>`
-
- * **Other:**
- :doc:`Supported databases <ref/databases>` |
- :doc:`Legacy databases <howto/legacy-databases>` |
- :doc:`Providing initial data <howto/initial-data>` |
- :doc:`Optimize database access <topics/db/optimization>`
-
-The template layer
-==================
-
- * **For designers:**
- :doc:`Syntax overview <topics/templates>` |
- :doc:`Built-in tags and filters <ref/templates/builtins>`
-
- * **For programmers:**
- :doc:`Template API <ref/templates/api>` |
- :doc:`Custom tags and filters <howto/custom-template-tags>`
-
-The view layer
-==============
-
- * **The basics:**
- :doc:`URLconfs <topics/http/urls>` |
- :doc:`View functions <topics/http/views>` |
- :doc:`Shortcuts <topics/http/shortcuts>`
-
- * **Reference:** :doc:`Request/response objects <ref/request-response>`
-
- * **File uploads:**
- :doc:`Overview <topics/http/file-uploads>` |
- :doc:`File objects <ref/files/file>` |
- :doc:`Storage API <ref/files/storage>` |
- :doc:`Managing files <topics/files>` |
- :doc:`Custom storage <howto/custom-file-storage>`
-
- * **Generic views:**
- :doc:`Overview<topics/generic-views>` |
- :doc:`Built-in generic views<ref/generic-views>`
-
- * **Advanced:**
- :doc:`Generating CSV <howto/outputting-csv>` |
- :doc:`Generating PDF <howto/outputting-pdf>`
-
- * **Middleware:**
- :doc:`Overview <topics/http/middleware>` |
- :doc:`Built-in middleware classes <ref/middleware>`
-
-Forms
-=====
-
- * **The basics:**
- :doc:`Overview <topics/forms/index>` |
- :doc:`Form API <ref/forms/api>` |
- :doc:`Built-in fields <ref/forms/fields>` |
- :doc:`Built-in widgets <ref/forms/widgets>`
-
- * **Advanced:**
- :doc:`Forms for models <topics/forms/modelforms>` |
- :doc:`Integrating media <topics/forms/media>` |
- :doc:`Formsets <topics/forms/formsets>` |
- :doc:`Customizing validation <ref/forms/validation>`
-
- * **Extras:**
- :doc:`Form preview <ref/contrib/formtools/form-preview>` |
- :doc:`Form wizard <ref/contrib/formtools/form-wizard>`
-
-The development process
-=======================
-
- * **Settings:**
- :doc:`Overview <topics/settings>` |
- :doc:`Full list of settings <ref/settings>`
-
- * **Exceptions:**
- :doc:`Overview <ref/exceptions>`
-
- * **django-admin.py and manage.py:**
- :doc:`Overview <ref/django-admin>` |
- :doc:`Adding custom commands <howto/custom-management-commands>`
-
- * **Testing:** :doc:`Overview <topics/testing>`
-
- * **Deployment:**
- :doc:`Overview <howto/deployment/index>` |
- :doc:`Apache/mod_wsgi <howto/deployment/modwsgi>` |
- :doc:`Apache/mod_python <howto/deployment/modpython>` |
- :doc:`FastCGI/SCGI/AJP <howto/deployment/fastcgi>` |
- :doc:`Apache authentication <howto/apache-auth>` |
- :doc:`Serving static files <howto/static-files>` |
- :doc:`Tracking code errors by e-mail <howto/error-reporting>`
-
-Other batteries included
-========================
-
- * :doc:`Admin site <ref/contrib/admin/index>` | :doc:`Admin actions <ref/contrib/admin/actions>` | :doc:`Admin documentation generator<ref/contrib/admin/admindocs>`
- * :doc:`Authentication <topics/auth>`
- * :doc:`Cache system <topics/cache>`
- * :doc:`Conditional content processing <topics/conditional-view-processing>`
- * :doc:`Comments <ref/contrib/comments/index>` | :doc:`Moderation <ref/contrib/comments/moderation>` | :doc:`Custom comments <ref/contrib/comments/custom>`
- * :doc:`Content types <ref/contrib/contenttypes>`
- * :doc:`Cross Site Request Forgery protection <ref/contrib/csrf>`
- * :doc:`Databrowse <ref/contrib/databrowse>`
- * :doc:`E-mail (sending) <topics/email>`
- * :doc:`Flatpages <ref/contrib/flatpages>`
- * :doc:`GeoDjango <ref/contrib/gis/index>`
- * :doc:`Humanize <ref/contrib/humanize>`
- * :doc:`Internationalization <topics/i18n/index>`
- * :doc:`Jython support <howto/jython>`
- * :doc:`"Local flavor" <ref/contrib/localflavor>`
- * :doc:`Messages <ref/contrib/messages>`
- * :doc:`Pagination <topics/pagination>`
- * :doc:`Redirects <ref/contrib/redirects>`
- * :doc:`Serialization <topics/serialization>`
- * :doc:`Sessions <topics/http/sessions>`
- * :doc:`Signals <topics/signals>`
- * :doc:`Sitemaps <ref/contrib/sitemaps>`
- * :doc:`Sites <ref/contrib/sites>`
- * :doc:`Syndication feeds (RSS/Atom) <ref/contrib/syndication>`
- * :doc:`Unicode in Django <ref/unicode>`
- * :doc:`Web design helpers <ref/contrib/webdesign>`
- * :doc:`Validators <ref/validators>`
-
-The Django open-source project
-==============================
-
- * **Community:**
- :doc:`How to get involved <internals/contributing>` |
- :doc:`The release process <internals/release-process>` |
- :doc:`Team of committers <internals/committers>` |
- :doc:`The Django source code repository <internals/svn>`
-
- * **Design philosophies:**
- :doc:`Overview <misc/design-philosophies>`
-
- * **Documentation:**
- :doc:`About this documentation <internals/documentation>`
-
- * **Third-party distributions:**
- :doc:`Overview <misc/distributions>`
-
- * **Django over time:**
- :doc:`API stability <misc/api-stability>` |
- :doc:`Release notes and upgrading instructions <releases/index>` |
- :doc:`Deprecation Timeline <internals/deprecation>`
diff --git a/parts/django/docs/internals/_images/djangotickets.png b/parts/django/docs/internals/_images/djangotickets.png
deleted file mode 100644
index 34a2a41..0000000
--- a/parts/django/docs/internals/_images/djangotickets.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/internals/committers.txt b/parts/django/docs/internals/committers.txt
deleted file mode 100644
index ecda1d5..0000000
--- a/parts/django/docs/internals/committers.txt
+++ /dev/null
@@ -1,344 +0,0 @@
-=================
-Django committers
-=================
-
-The original team
-=================
-
-Django originally started at World Online, the Web department of the `Lawrence
-Journal-World`_ of Lawrence, Kansas, USA.
-
-`Adrian Holovaty`_
- Adrian is a Web developer with a background in journalism. He's known in
- journalism circles as one of the pioneers of "journalism via computer
- programming", and in technical circles as "the guy who invented Django."
-
- He was lead developer at World Online for 2.5 years, during which time
- Django was developed and implemented on World Online's sites. He's now the
- leader and founder of EveryBlock_, a "news feed for your block".
-
- Adrian lives in Chicago, USA.
-
-`Simon Willison`_
- Simon is a well-respected Web developer from England. He had a one-year
- internship at World Online, during which time he and Adrian developed Django
- from scratch. The most enthusiastic Brit you'll ever meet, he's passionate
- about best practices in Web development and maintains a well-read
- `web-development blog`_.
-
- Simon lives in Brighton, England.
-
-`Jacob Kaplan-Moss`_
- Jacob is a partner at `Revolution Systems`_ which provides support services
- around Django and related open source technologies. A good deal of Jacob's
- work time is devoted to working on Django. Jacob previously worked at World
- Online, where Django was invented, where he was the lead developer of
- Ellington, a commercial Web publishing platform for media companies.
-
- Jacob lives in Lawrence, Kansas, USA.
-
-`Wilson Miner`_
- Wilson's design-fu is what makes Django look so nice. He designed the
- Web site you're looking at right now, as well as Django's acclaimed admin
- interface. Wilson is the designer for EveryBlock_.
-
- Wilson lives in San Francisco, USA.
-
-.. _lawrence journal-world: http://ljworld.com/
-.. _adrian holovaty: http://holovaty.com/
-.. _everyblock: http://everyblock.com/
-.. _simon willison: http://simonwillison.net/
-.. _web-development blog: `simon willison`_
-.. _jacob kaplan-moss: http://jacobian.org/
-.. _revolution systems: http://revsys.com/
-.. _wilson miner: http://wilsonminer.com/
-
-Current developers
-==================
-
-Currently, Django is led by a team of volunteers from around the globe.
-
-BDFLs
------
-
-Adrian and Jacob are the Co-`Benevolent Dictators for Life`_ of Django. When
-"rough consensus and working code" fails, they're the ones who make the tough
-decisions.
-
-.. _Benevolent Dictators for Life: http://en.wikipedia.org/wiki/Benevolent_Dictator_For_Life
-
-Core developers
----------------
-
-These are the folks who have a long history of contributions, a solid track
-record of being helpful on the mailing lists, and a proven desire to dedicate
-serious time to Django. In return, they've been granted the coveted commit bit,
-and have free rein to hack on all parts of Django.
-
-`Malcolm Tredinnick`_
- Malcolm originally wanted to be a mathematician, somehow ended up a software
- developer. He's contributed to many Open Source projects, has served on the
- board of the GNOME foundation, and will kick your ass at chess.
-
- When he's not busy being an International Man of Mystery, Malcolm lives in
- Sydney, Australia.
-
-.. _malcolm tredinnick: http://www.pointy-stick.com/
-
-`Russell Keith-Magee`_
- Russell studied physics as an undergraduate, and studied neural networks for
- his PhD. His first job was with a startup in the defense industry developing
- simulation frameworks. Over time, mostly through work with Django, he's
- become more involved in Web development.
-
- Russell has helped with several major aspects of Django, including a
- couple major internal refactorings, creation of the test system, and more.
-
- Russell lives in the most isolated capital city in the world — Perth,
- Australia.
-
-.. _russell keith-magee: http://cecinestpasun.com/
-
-Joseph Kocherhans
- Joseph is currently a developer at EveryBlock_, and previously worked for
- the Lawrence Journal-World where he built most of the backend for their
- Marketplace site. He often disappears for several days into the woods,
- attempts to teach himself computational linguistics, and annoys his
- neighbors with his Charango_ playing.
-
- Joseph's first contribution to Django was a series of improvements to the
- authorization system leading up to support for pluggable authorization.
- Since then, he's worked on the new forms system, its use in the admin, and
- many other smaller improvements.
-
- Joseph lives in Chicago, USA.
-
-.. _charango: http://en.wikipedia.org/wiki/Charango
-
-`Luke Plant`_
- At University Luke studied physics and Materials Science and also
- met `Michael Meeks`_ who introduced him to Linux and Open Source,
- re-igniting an interest in programming. Since then he has
- contributed to a number of Open Source projects and worked
- professionally as a developer.
-
- Luke has contributed many excellent improvements to Django,
- including database-level improvements, the CSRF middleware and
- many unit tests.
-
- Luke currently works for a church in Bradford, UK, and part-time
- as a freelance developer.
-
-.. _luke plant: http://lukeplant.me.uk/
-.. _michael meeks: http://en.wikipedia.org/wiki/Michael_Meeks_(software)
-
-`Brian Rosner`_
- Brian is currently the tech lead at Eldarion_ managing and developing
- Django / Pinax_ based Web sites. He enjoys learning more about programming
- languages and system architectures and contributing to open source
- projects. Brian is the host of the `Django Dose`_ podcasts.
-
- Brian helped immensely in getting Django's "newforms-admin" branch finished
- in time for Django 1.0; he's now a full committer, continuing to improve on
- the admin and forms system.
-
- Brian lives in Denver, Colorado, USA.
-
-.. _brian rosner: http://oebfare.com/
-.. _eldarion: http://eldarion.com/
-.. _django dose: http://djangodose.com/
-
-`Gary Wilson`_
- Gary starting contributing patches to Django in 2006 while developing Web
- applications for `The University of Texas`_ (UT). Since, he has made
- contributions to the e-mail and forms systems, as well as many other
- improvements and code cleanups throughout the code base.
-
- Gary is currently a developer and software engineering graduate student at
- UT, where his dedication to spreading the ways of Python and Django never
- ceases.
-
- Gary lives in Austin, Texas, USA.
-
-.. _Gary Wilson: http://gdub.wordpress.com/
-.. _The University of Texas: http://www.utexas.edu/
-
-Justin Bronn
- Justin Bronn is a computer scientist and attorney specializing
- in legal topics related to intellectual property and spatial law.
-
- In 2007, Justin began developing ``django.contrib.gis`` in a branch,
- a.k.a. GeoDjango_, which was merged in time for Django 1.0. While
- implementing GeoDjango, Justin obtained a deep knowledge of Django's
- internals including the ORM, the admin, and Oracle support.
-
- Justin lives in Houston, Texas.
-
-.. _GeoDjango: http://geodjango.org/
-
-Karen Tracey
- Karen has a background in distributed operating systems (graduate school),
- communications software (industry) and crossword puzzle construction
- (freelance). The last of these brought her to Django, in late 2006, when
- she set out to put a Web front-end on her crossword puzzle database.
- That done, she stuck around in the community answering questions, debugging
- problems, etc. -- because coding puzzles are as much fun as word puzzles.
-
- Karen lives in Apex, NC, USA.
-
-`Jannis Leidel`_
- Jannis graduated in media design from `Bauhaus-University Weimar`_,
- is the author of a number of pluggable Django apps and likes to
- contribute to Open Source projects like Pinax_. He currently works as
- a freelance Web developer and designer.
-
- Jannis lives in Berlin, Germany.
-
-.. _Jannis Leidel: http://jezdez.com/
-.. _Bauhaus-University Weimar: http://www.uni-weimar.de/
-.. _pinax: http://pinaxproject.com/
-
-`James Tauber`_
- James is the lead developer of Pinax_ and the CEO and founder of
- Eldarion_. He has been doing open source software since 1993, Python
- since 1998 and Django since 2006. He serves on the board of the Python
- Software Foundation and is currently on a leave of absence from a PhD in
- linguistics.
-
- James currently lives in Boston, MA, USA but originally hails from
- Perth, Western Australia where he attended the same high school as
- Russell Keith-Magee.
-
-.. _James Tauber: http://jtauber.com/
-
-`Alex Gaynor`_
- Alex is a student at Rensselaer Polytechnic Institute, and is also an
- independent contractor. He found Django in 2007 and has been addicted ever
- since he found out you don't need to write out your forms by hand. He has
- a small obsession with compilers. He's contributed to the ORM, forms,
- admin, and other components of Django.
-
- Alex lives in Chicago, IL, but spends most of his time in Troy, NY.
-
-.. _Alex Gaynor: http://alexgaynor.net
-
-`Andrew Godwin`_
- Andrew is a freelance Python developer and tinkerer, and has been
- developing against Django since 2007. He graduated from Oxford University
- with a degree in Computer Science, and has become most well known
- in the Django community for his work on South, the schema migrations
- library.
-
- Andrew lives in London, UK.
-
-.. _Andrew Godwin: http://www.aeracode.org/
-
-`Carl Meyer`_
- Carl has been working with Django since 2007 (long enough to remember
- queryset-refactor, but not magic-removal), and works as a freelance
- developer with OddBird_ and Eldarion_. He became a Django contributor by
- accident, because fixing bugs is more interesting than working around
- them.
-
- Carl lives in Elkhart, IN, USA.
-
-.. _Carl Meyer: http://www.oddbird.net/about/#hcard-carl
-.. _OddBird: http://www.oddbird.net/
-
-Ramiro Morales
- Ramiro has been reading Django source code and submitting patches since
- mid-2006 after researching for a Python Web tool with matching awesomeness
- and being pointed to it by an old ninja.
-
- A software developer in the electronic transactions industry, he is a
- living proof of the fact that anyone with enough enthusiasm can contribute
- to Django, learning a lot and having fun in the process.
-
- Ramiro lives in Córdoba, Argentina.
-
-`Chris Beaven`_
- Chris has been submitting patches and suggesting crazy ideas for Django
- since early 2006. An advocate for community involvement and a long-term
- triager, he is still often found answering questions in the #django IRC
- channel.
-
- Chris lives in Napier, New Zealand (adding to the pool of Oceanic core
- developers). He works remotely as a developer for `Lincoln Loop`_.
-
-.. _Chris Beaven: http://smileychris.com/
-.. _Lincoln Loop: http://lincolnloop.com/
-
-Specialists
------------
-
-`James Bennett`_
- James is Django's release manager; he also contributes to the documentation.
-
- James came to Web development from philosophy when he discovered
- that programmers get to argue just as much while collecting much
- better pay. He lives in Lawrence, Kansas, where he works for the
- Journal-World developing Ellington. He `keeps a blog`_, has
- written a `book on Django`_, and enjoys fine port and talking to
- his car.
-
-.. _james bennett: http://b-list.org/
-.. _keeps a blog: `james bennett`_
-.. _book on Django: http://www.amazon.com/dp/1590599969/?tag=djangoproject-20
-
-Ian Kelly
- Ian is responsible for Django's support for Oracle.
-
-Matt Boersma
- Matt is also responsible for Django's Oracle support.
-
-Jeremy Dunck
- Jeremy is the lead developer of Pegasus News, a personalized local site based
- in Dallas, Texas. An early contributor to Greasemonkey and Django, he sees
- technology as a tool for communication and access to knowledge.
-
- Jeremy helped kick off GeoDjango development, and is mostly responsible for
- the serious speed improvements that signals received in Django 1.0.
-
- Jeremy lives in Dallas, Texas, USA.
-
-`Simon Meers`_
- Simon discovered Django 0.96 during his Computer Science PhD research and
- has been developing with it full-time ever since. His core code
- contributions are mostly in Django's admin application. He is also helping
- to improve Django's documentation.
-
- Simon works as a freelance developer based in Wollongong, Australia.
-
-.. _simon meers: http://simonmeers.com/
-
-`Gabriel Hurley`_
- Gabriel has been working with Django since 2008, shortly after the 1.0
- release. Convinced by his business partner that Python and Django were the
- right direction for the company, he couldn't have been more happy with the
- decision. His contributions range across many areas in Django, but years of
- copy-editing and an eye for detail lead him to be particularly at home
- while working on Django's documentation.
-
- Gabriel works as a web developer in Berkeley, CA, USA.
-
-.. _gabriel hurley: http://strikeawe.com/
-
-Tim Graham
- When exploring Web frameworks for an independent study project in the fall
- of 2008, Tim discovered Django and was lured to it by the documentation.
- He enjoys contributing to the docs because they're awesome.
-
- Tim works as a software engineer and lives in Philadelphia, PA, USA.
-
-Developers Emeritus
-===================
-
-Georg "Hugo" Bauer
- Georg created Django's internationalization system, managed i18n
- contributions and made a ton of excellent tweaks, feature additions and bug
- fixes.
-
-Robert Wittams
- Robert was responsible for the *first* refactoring of Django's admin
- application to allow for easier reuse and has made a ton of
- excellent tweaks, feature additions and bug fixes.
diff --git a/parts/django/docs/internals/contributing.txt b/parts/django/docs/internals/contributing.txt
deleted file mode 100644
index fd0e48b..0000000
--- a/parts/django/docs/internals/contributing.txt
+++ /dev/null
@@ -1,1294 +0,0 @@
-======================
-Contributing to Django
-======================
-
-If you think working *with* Django is fun, wait until you start working *on* it.
-We're passionate about helping Django users make the jump to contributing members
-of the community, so there are many ways you can help Django's development:
-
- * Blog about Django. We syndicate all the Django blogs we know about on
- the `community page`_; contact jacob@jacobian.org if you've got a blog
- you'd like to see on that page.
-
- * Report bugs and request features in our `ticket tracker`_. Please read
- `Reporting bugs`_, below, for the details on how we like our bug reports
- served up.
-
- * Submit patches for new and/or fixed behavior. Please read `Submitting
- patches`_, below, for details on how to submit a patch. If you're looking
- for an easy way to start contributing to Django have a look at the
- `easy-pickings`_ tickets.
-
- * Join the `django-developers`_ mailing list and share your ideas for how
- to improve Django. We're always open to suggestions, although we're
- likely to be skeptical of large-scale suggestions without some code to
- back it up.
-
- * Triage patches that have been submitted by other users. Please read
- `Ticket triage`_ below, for details on the triage process.
-
-That's all you need to know if you'd like to join the Django development
-community. The rest of this document describes the details of how our community
-works and how it handles bugs, mailing lists, and all the other minutiae of
-Django development.
-
-.. _reporting-bugs:
-
-Reporting bugs
-==============
-
-Well-written bug reports are *incredibly* helpful. However, there's a certain
-amount of overhead involved in working with any bug tracking system, so your
-help in keeping our ticket tracker as useful as possible is appreciated. In
-particular:
-
- * **Do** read the :doc:`FAQ </faq/index>` to see if your issue might be a well-known question.
-
- * **Do** `search the tracker`_ to see if your issue has already been filed.
-
- * **Do** ask on `django-users`_ *first* if you're not sure if what you're
- seeing is a bug.
-
- * **Do** write complete, reproducible, specific bug reports. Include as
- much information as you possibly can, complete with code snippets, test
- cases, etc. This means including a clear, concise description of the
- problem, and a clear set of instructions for replicating the problem.
- A minimal example that illustrates the bug in a nice small test case
- is the best possible bug report.
-
- * **Don't** use the ticket system to ask support questions. Use the
- `django-users`_ list, or the `#django`_ IRC channel for that.
-
- * **Don't** use the ticket system to make large-scale feature requests.
- We like to discuss any big changes to Django's core on the `django-developers`_
- list before actually working on them.
-
- * **Don't** reopen issues that have been marked "wontfix". This mark means
- that the decision has been made that we can't or won't fix this particular
- issue. If you're not sure why, please ask on `django-developers`_.
-
- * **Don't** use the ticket tracker for lengthy discussions, because they're
- likely to get lost. If a particular ticket is controversial, please move
- discussion to `django-developers`_.
-
- * **Don't** post to django-developers just to announce that you have filed
- a bug report. All the tickets are mailed to another list
- (`django-updates`_), which is tracked by developers and triagers, so we
- see them as they are filed.
-
-.. _django-updates: http://groups.google.com/group/django-updates
-
-.. _reporting-security-issues:
-
-Reporting security issues
-=========================
-
-Report security issues to security@djangoproject.com. This is a private list
-only open to long-time, highly trusted Django developers, and its archives are
-not publicly readable.
-
-In the event of a confirmed vulnerability in Django itself, we will take the
-following actions:
-
- * Acknowledge to the reporter that we've received the report and that a fix
- is forthcoming. We'll give a rough timeline and ask the reporter to keep
- the issue confidential until we announce it.
-
- * Halt all other development as long as is needed to develop a fix, including
- patches against the current and two previous releases.
-
- * Determine a go-public date for announcing the vulnerability and the fix.
- To try to mitigate a possible "arms race" between those applying the patch
- and those trying to exploit the hole, we will not announce security
- problems immediately.
-
- * Pre-notify everyone we know to be running the affected version(s) of
- Django. We will send these notifications through private e-mail which will
- include documentation of the vulnerability, links to the relevant patch(es),
- and a request to keep the vulnerability confidential until the official
- go-public date.
-
- * Publicly announce the vulnerability and the fix on the pre-determined
- go-public date. This will probably mean a new release of Django, but
- in some cases it may simply be patches against current releases.
-
-Submitting patches
-==================
-
-We're always grateful for patches to Django's code. Indeed, bug reports with
-associated patches will get fixed *far* more quickly than those without patches.
-
-"Claiming" tickets
-------------------
-
-In an open-source project with hundreds of contributors around the world, it's
-important to manage communication efficiently so that work doesn't get
-duplicated and contributors can be as effective as possible. Hence, our policy
-is for contributors to "claim" tickets in order to let other developers know
-that a particular bug or feature is being worked on.
-
-If you have identified a contribution you want to make and you're capable of
-fixing it (as measured by your coding ability, knowledge of Django internals
-and time availability), claim it by following these steps:
-
- * `Create an account`_ to use in our ticket system.
- * If a ticket for this issue doesn't exist yet, create one in our
- `ticket tracker`_.
- * If a ticket for this issue already exists, make sure nobody else has
- claimed it. To do this, look at the "Assigned to" section of the ticket.
- If it's assigned to "nobody," then it's available to be claimed.
- Otherwise, somebody else is working on this ticket, and you either find
- another bug/feature to work on, or contact the developer working on the
- ticket to offer your help.
- * Log into your account, if you haven't already, by clicking "Login" in the
- upper right of the ticket page.
- * Claim the ticket by clicking the radio button next to "Accept ticket"
- near the bottom of the page, then clicking "Submit changes."
-
-If you have an account but have forgotten your password, you can reset it
-using the `password reset page`_.
-
-.. _Create an account: http://www.djangoproject.com/accounts/register/
-.. _password reset page: http://www.djangoproject.com/accounts/password/reset/
-
-Ticket claimers' responsibility
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Once you've claimed a ticket, you have a responsibility to work on that ticket
-in a reasonably timely fashion. If you don't have time to work on it, either
-unclaim it or don't claim it in the first place!
-
-Ticket triagers go through the list of claimed tickets from time to
-time, checking whether any progress has been made. If there's no sign of
-progress on a particular claimed ticket for a week or two, a triager may ask
-you to relinquish the ticket claim so that it's no longer monopolized and
-somebody else can claim it.
-
-If you've claimed a ticket and it's taking a long time (days or weeks) to code,
-keep everybody updated by posting comments on the ticket. If you don't provide
-regular updates, and you don't respond to a request for a progress report,
-your claim on the ticket may be revoked. As always, more communication is
-better than less communication!
-
-Which tickets should be claimed?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Of course, going through the steps of claiming tickets is overkill in some
-cases. In the case of small changes, such as typos in the documentation or
-small bugs that will only take a few minutes to fix, you don't need to jump
-through the hoops of claiming tickets. Just submit your patch and be done with
-it.
-
-Patch style
------------
-
- * Make sure your code matches our `coding style`_.
-
- * Submit patches in the format returned by the ``svn diff`` command.
- An exception is for code changes that are described more clearly in plain
- English than in code. Indentation is the most common example; it's hard to
- read patches when the only difference in code is that it's indented.
-
- Patches in ``git diff`` format are also acceptable.
-
- * When creating patches, always run ``svn diff`` from the top-level
- ``trunk`` directory -- i.e., the one that contains ``django``, ``docs``,
- ``tests``, ``AUTHORS``, etc. This makes it easy for other people to apply
- your patches.
-
- * Attach patches to a ticket in the `ticket tracker`_, using the "attach file"
- button. Please *don't* put the patch in the ticket description or comment
- unless it's a single line patch.
-
- * Name the patch file with a ``.diff`` extension; this will let the ticket
- tracker apply correct syntax highlighting, which is quite helpful.
-
- * Check the "Has patch" box on the ticket details. This will make it
- obvious that the ticket includes a patch, and it will add the ticket to
- the `list of tickets with patches`_.
-
- * The code required to fix a problem or add a feature is an essential part
- of a patch, but it is not the only part. A good patch should also include
- a regression test to validate the behavior that has been fixed (and prevent
- the problem from arising again).
-
- * If the code associated with a patch adds a new feature, or modifies behavior
- of an existing feature, the patch should also contain documentation.
-
-Non-trivial patches
--------------------
-
-A "non-trivial" patch is one that is more than a simple bug fix. It's a patch
-that introduces Django functionality and makes some sort of design decision.
-
-If you provide a non-trivial patch, include evidence that alternatives have
-been discussed on `django-developers`_. If you're not sure whether your patch
-should be considered non-trivial, just ask.
-
-Ticket triage
-=============
-
-Unfortunately, not all bug reports in the `ticket tracker`_ provide all
-the `required details`_. A number of tickets have patches, but those patches
-don't meet all the requirements of a `good patch`_.
-
-One way to help out is to *triage* bugs that have been reported by other
-users. A couple of dedicated volunteers work on this regularly, but more help
-is always appreciated.
-
-Most of the workflow is based around the concept of a ticket's "triage stage".
-This stage describes where in its lifetime a given ticket is at any time.
-Along with a handful of flags, this field easily tells us what and who each
-ticket is waiting on.
-
-Since a picture is worth a thousand words, let's start there:
-
-.. image:: _images/djangotickets.png
- :height: 451
- :width: 590
- :alt: Django's ticket workflow
-
-We've got two official roles here:
-
- * Core developers: people with commit access who make the big decisions
- and write the bulk of the code.
-
- * Ticket triagers: trusted community members with a proven history of
- working with the Django community. As a result of this history, they
- have been entrusted by the core developers to make some of the smaller
- decisions about tickets.
-
-Second, note the five triage stages:
-
- 1. A ticket starts as "Unreviewed", meaning that nobody has examined
- the ticket.
-
- 2. "Design decision needed" means "this concept requires a design
- decision," which should be discussed either in the ticket comments or on
- `django-developers`_. The "Design decision needed" step will generally
- only be used for feature requests. It can also be used for issues
- that *might* be bugs, depending on opinion or interpretation. Obvious
- bugs (such as crashes, incorrect query results, or non-compliance with a
- standard) skip this step and move straight to "Accepted".
-
- 3. Once a ticket is ruled to be approved for fixing, it's moved into the
- "Accepted" stage. This stage is where all the real work gets done.
-
- 4. In some cases, a ticket might get moved to the "Someday/Maybe" state.
- This means the ticket is an enhancement request that we might consider
- adding to the framework if an excellent patch is submitted. These
- tickets are not a high priority.
-
- 5. If a ticket has an associated patch (see below), a triager will review
- the patch. If the patch is complete, it'll be marked as "ready for
- checkin" so that a core developer knows to review and check in the
- patches.
-
-The second part of this workflow involves a set of flags the describe what the
-ticket has or needs in order to be "ready for checkin":
-
- "Has patch"
- This means the ticket has an associated patch_. These will be
- reviewed by the triage team to see if the patch is "good".
-
- "Needs documentation"
- This flag is used for tickets with patches that need associated
- documentation. Complete documentation of features is a prerequisite
- before we can check a fix into the codebase.
-
- "Needs tests"
- This flags the patch as needing associated unit tests. Again, this is a
- required part of a valid patch.
-
- "Patch needs improvement"
- This flag means that although the ticket *has* a patch, it's not quite
- ready for checkin. This could mean the patch no longer applies
- cleanly, or that the code doesn't live up to our standards.
-
-A ticket can be resolved in a number of ways:
-
- "fixed"
- Used by one of the core developers once a patch has been rolled into
- Django and the issue is fixed.
-
- "invalid"
- Used if the ticket is found to be incorrect. This means that the
- issue in the ticket is actually the result of a user error, or
- describes a problem with something other than Django, or isn't
- a bug report or feature request at all (for example, some new users
- submit support queries as tickets).
-
- "wontfix"
- Used when a core developer decides that this request is not
- appropriate for consideration in Django. This is usually chosen after
- discussion in the ``django-developers`` mailing list, and you should
- feel free to join in when it's something you care about.
-
- "duplicate"
- Used when another ticket covers the same issue. By closing duplicate
- tickets, we keep all the discussion in one place, which helps everyone.
-
- "worksforme"
- Used when the ticket doesn't contain enough detail to replicate
- the original bug.
-
-If you believe that the ticket was closed in error -- because you're
-still having the issue, or it's popped up somewhere else, or the triagers have
--- made a mistake, please reopen the ticket and tell us why. Please do not
-reopen tickets that have been marked as "wontfix" by core developers.
-
-.. _required details: `Reporting bugs`_
-.. _good patch: `Patch style`_
-.. _patch: `Submitting patches`_
-
-Triage by the general community
--------------------------------
-
-Although the core developers and ticket triagers make the big decisions in
-the ticket triage process, there's also a lot that general community
-members can do to help the triage process. In particular, you can help out by:
-
- * Closing "Unreviewed" tickets as "invalid", "worksforme" or "duplicate."
-
- * Promoting "Unreviewed" tickets to "Design decision needed" if a design
- decision needs to be made, or "Accepted" in case of obvious bugs.
-
- * Correcting the "Needs tests", "Needs documentation", or "Has patch" flags
- for tickets where they are incorrectly set.
-
- * Adding the `easy-pickings`_ keyword to tickets that are small and
- relatively straightforward.
-
- * Checking that old tickets are still valid. If a ticket hasn't seen
- any activity in a long time, it's possible that the problem has been
- fixed but the ticket hasn't yet been closed.
-
- * Contacting the owners of tickets that have been claimed but have not seen
- any recent activity. If the owner doesn't respond after a week or so,
- remove the owner's claim on the ticket.
-
- * Identifying trends and themes in the tickets. If there a lot of bug reports
- about a particular part of Django, it may indicate we should consider
- refactoring that part of the code. If a trend is emerging, you should
- raise it for discussion (referencing the relevant tickets) on
- `django-developers`_.
-
-However, we do ask the following of all general community members working in
-the ticket database:
-
- * Please **don't** close tickets as "wontfix." The core developers will
- make the final determination of the fate of a ticket, usually after
- consultation with the community.
-
- * Please **don't** promote tickets to "Ready for checkin" unless they are
- *trivial* changes -- for example, spelling mistakes or broken links in
- documentation.
-
- * Please **don't** reverse a decision that has been made by a core
- developer. If you disagree with a discussion that has been made,
- please post a message to `django-developers`_.
-
- * Please be conservative in your actions. If you're unsure if you should
- be making a change, don't make the change -- leave a comment with your
- concerns on the ticket, or post a message to `django-developers`_.
-
-.. _contributing-translations:
-
-Submitting and maintaining translations
-=======================================
-
-Various parts of Django, such as the admin site and validation error messages,
-are internationalized. This means they display different text depending on a
-user's language setting. For this, Django uses the same internationalization
-infrastructure available to Django applications described in the
-:doc:`i18n documentation</topics/i18n/index>`.
-
-These translations are contributed by Django users worldwide. If you find an
-incorrect translation, or if you'd like to add a language that isn't yet
-translated, here's what to do:
-
- * Join the `Django i18n mailing list`_ and introduce yourself.
-
- * Make sure you read the notes about :ref:`specialties-of-django-i18n`.
-
- * Create translations using the methods described in the
- :doc:`localization documentation </topics/i18n/localization>`. For this
- you will use the ``django-admin.py makemessages`` tool. In this
- particular case it should be run from the top-level ``django`` directory
- of the Django source tree.
-
- The script runs over the entire Django source tree and pulls out all
- strings marked for translation. It creates (or updates) a message file in
- the directory ``conf/locale`` (for example for ``pt_BR``, the file will be
- ``conf/locale/pt_BR/LC_MESSAGES/django.po``).
-
- * Make sure that ``django-admin.py compilemessages -l <lang>`` runs without
- producing any warnings.
-
- * Repeat the last two steps for the ``djangojs`` domain (by appending the
- ``-d djangojs`` command line option to the ``django-admin.py``
- invocations).
-
- * Optionally, review and update the ``conf/locale/<locale>/formats.py``
- file to describe the date, time and numbers formatting particularities of
- your locale. See :ref:`format-localization` for details.
-
- * Create a diff against the current Subversion trunk.
-
- * Open a ticket in Django's ticket system, set its ``Component`` field to
- ``Translations``, and attach the patch to it.
-
-.. _Django i18n mailing list: http://groups.google.com/group/django-i18n/
-
-Submitting javascript patches
-=============================
-
-.. versionadded:: 1.2
-
-Django's admin system leverages the jQuery framework to increase the
-capabilities of the admin interface. In conjunction, there is an emphasis on
-admin javascript performance and minimizing overall admin media file size.
-Serving compressed or "minified" versions of javascript files is considered
-best practice in this regard.
-
-To that end, patches for javascript files should include both the original
-code for future development (e.g. "foo.js"), and a compressed version for
-production use (e.g. "foo.min.js"). Any links to the file in the codebase
-should point to the compressed version.
-
-To simplify the process of providing optimized javascript code, Django
-includes a handy script which should be used to create a "minified" version.
-This script is located at ``/contrib/admin/media/js/compress.py``.
-
-Behind the scenes, ``compress.py`` is a front-end for Google's
-`Closure Compiler`_ which is written in Java. However, the Closure Compiler
-library is not bundled with Django directly, so those wishing to contribute
-complete javascript patches will need to download and install the library
-independently.
-
-The Closure Compiler library requires Java version 6 or higher (Java 1.6 or
-higher on Mac OS X). Note that Mac OS X 10.5 and earlier did not ship with Java
-1.6 by default, so it may be necessary to upgrade your Java installation before
-the tool will be functional. Also note that even after upgrading Java, the
-default `/usr/bin/java` command may remain linked to the previous Java
-binary, so relinking that command may be necessary as well.
-
-Please don't forget to run ``compress.py`` and include the ``diff`` of the
-minified scripts when submitting patches for Django's javascript.
-
-.. _Closure Compiler: http://code.google.com/closure/compiler/
-
-Django conventions
-==================
-
-Various Django-specific code issues are detailed in this section.
-
-Use of ``django.conf.settings``
--------------------------------
-
-Modules should not in general use settings stored in ``django.conf.settings`` at
-the top level (i.e. evaluated when the module is imported). The explanation for
-this is as follows:
-
-Manual configuration of settings (i.e. not relying on the
-``DJANGO_SETTINGS_MODULE`` environment variable) is allowed and possible as
-follows::
-
- from django.conf import settings
-
- settings.configure({}, SOME_SETTING='foo')
-
-However, if any setting is accessed before the ``settings.configure`` line, this
-will not work. (Internally, ``settings`` is a ``LazyObject`` which configures
-itself automatically when the settings are accessed if it has not already been
-configured).
-
-So, if there is a module containing some code as follows::
-
- from django.conf import settings
- from django.core.urlresolvers import get_callable
-
- default_foo_view = get_callable(settings.FOO_VIEW)
-
-...then importing this module will cause the settings object to be configured.
-That means that the ability for third parties to import the module at the top
-level is incompatible with the ability to configure the settings object
-manually, or makes it very difficult in some circumstances.
-
-Instead of the above code, a level of laziness or indirection must be used, such
-as :class:`django.utils.functional.LazyObject`, :func:`django.utils.functional.lazy` or
-``lambda``.
-
-Coding style
-============
-
-Please follow these coding standards when writing code for inclusion in Django:
-
- * Unless otherwise specified, follow :pep:`8`.
-
- You could use a tool like `pep8.py`_ to check for some problems in this
- area, but remember that PEP 8 is only a guide, so respect the style of
- the surrounding code as a primary goal.
-
- * Use four spaces for indentation.
-
- * Use underscores, not camelCase, for variable, function and method names
- (i.e. ``poll.get_unique_voters()``, not ``poll.getUniqueVoters``).
-
- * Use ``InitialCaps`` for class names (or for factory functions that
- return classes).
-
- * Mark all strings for internationalization; see the :doc:`i18n
- documentation </topics/i18n/index>` for details.
-
- * In docstrings, use "action words" such as::
-
- def foo():
- """
- Calculates something and returns the result.
- """
- pass
-
- Here's an example of what not to do::
-
- def foo():
- """
- Calculate something and return the result.
- """
- pass
-
- * Please don't put your name in the code you contribute. Our policy is to
- keep contributors' names in the ``AUTHORS`` file distributed with Django
- -- not scattered throughout the codebase itself. Feel free to include a
- change to the ``AUTHORS`` file in your patch if you make more than a
- single trivial change.
-
-Template style
---------------
-
- * In Django template code, put one (and only one) space between the curly
- brackets and the tag contents.
-
- Do this:
-
- .. code-block:: html+django
-
- {{ foo }}
-
- Don't do this:
-
- .. code-block:: html+django
-
- {{foo}}
-
-View style
-----------
-
- * In Django views, the first parameter in a view function should be called
- ``request``.
-
- Do this::
-
- def my_view(request, foo):
- # ...
-
- Don't do this::
-
- def my_view(req, foo):
- # ...
-
-Model style
------------
-
- * Field names should be all lowercase, using underscores instead of
- camelCase.
-
- Do this::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=40)
-
- Don't do this::
-
- class Person(models.Model):
- FirstName = models.CharField(max_length=20)
- Last_Name = models.CharField(max_length=40)
-
- * The ``class Meta`` should appear *after* the fields are defined, with
- a single blank line separating the fields and the class definition.
-
- Do this::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=40)
-
- class Meta:
- verbose_name_plural = 'people'
-
- Don't do this::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=40)
- class Meta:
- verbose_name_plural = 'people'
-
- Don't do this, either::
-
- class Person(models.Model):
- class Meta:
- verbose_name_plural = 'people'
-
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=40)
-
- * The order of model inner classes and standard methods should be as
- follows (noting that these are not all required):
-
- * All database fields
- * Custom manager attributes
- * ``class Meta``
- * ``def __unicode__()``
- * ``def __str__()``
- * ``def save()``
- * ``def get_absolute_url()``
- * Any custom methods
-
- * If ``choices`` is defined for a given model field, define the choices as
- a tuple of tuples, with an all-uppercase name, either near the top of the
- model module or just above the model class. Example::
-
- GENDER_CHOICES = (
- ('M', 'Male'),
- ('F', 'Female'),
- )
-
-Documentation style
-===================
-
-We place a high importance on consistency and readability of documentation.
-(After all, Django was created in a journalism environment!)
-
-How to document new features
-----------------------------
-
-We treat our documentation like we treat our code: we aim to improve it as
-often as possible. This section explains how writers can craft their
-documentation changes in the most useful and least error-prone ways.
-
-Documentation changes come in two forms:
-
- * General improvements -- Typo corrections, error fixes and better
- explanations through clearer writing and more examples.
-
- * New features -- Documentation of features that have been added to the
- framework since the last release.
-
-Our policy is:
-
- **All documentation of new features should be written in a way that clearly
- designates the features are only available in the Django development
- version. Assume documentation readers are using the latest release, not the
- development version.**
-
-Our preferred way for marking new features is by prefacing the features'
-documentation with: ".. versionadded:: X.Y", followed by an optional one line
-comment and a mandatory blank line.
-
-General improvements, or other changes to the APIs that should be emphasized
-should use the ".. versionchanged:: X.Y" directive (with the same format as the
-``versionadded`` mentioned above.
-
-There's a full page of information about the :doc:`Django documentation
-system </internals/documentation>` that you should read prior to working on the
-documentation.
-
-Guidelines for reST files
--------------------------
-
-These guidelines regulate the format of our reST documentation:
-
- * In section titles, capitalize only initial words and proper nouns.
-
- * Wrap the documentation at 80 characters wide, unless a code example
- is significantly less readable when split over two lines, or for another
- good reason.
-
-Commonly used terms
--------------------
-
-Here are some style guidelines on commonly used terms throughout the
-documentation:
-
- * **Django** -- when referring to the framework, capitalize Django. It is
- lowercase only in Python code and in the djangoproject.com logo.
-
- * **e-mail** -- it has a hyphen.
-
- * **MySQL**
-
- * **PostgreSQL**
-
- * **Python** -- when referring to the language, capitalize Python.
-
- * **realize**, **customize**, **initialize**, etc. -- use the American
- "ize" suffix, not "ise."
-
- * **SQLite**
-
- * **subclass** -- it's a single word without a hyphen, both as a verb
- ("subclass that model") and as a noun ("create a subclass").
-
- * **Web**, **World Wide Web**, **the Web** -- note Web is always
- capitalized when referring to the World Wide Web.
-
- * **Web site** -- use two words, with Web capitalized.
-
-Django-specific terminology
----------------------------
-
- * **model** -- it's not capitalized.
-
- * **template** -- it's not capitalized.
-
- * **URLconf** -- use three capitalized letters, with no space before
- "conf."
-
- * **view** -- it's not capitalized.
-
-Committing code
-===============
-
-Please follow these guidelines when committing code to Django's Subversion
-repository:
-
- * For any medium-to-big changes, where "medium-to-big" is according to your
- judgment, please bring things up on the `django-developers`_ mailing list
- before making the change.
-
- If you bring something up on `django-developers`_ and nobody responds,
- please don't take that to mean your idea is great and should be
- implemented immediately because nobody contested it. Django's lead
- developers don't have a lot of time to read mailing-list discussions
- immediately, so you may have to wait a couple of days before getting a
- response.
-
- * Write detailed commit messages in the past tense, not present tense.
-
- * Good: "Fixed Unicode bug in RSS API."
- * Bad: "Fixes Unicode bug in RSS API."
- * Bad: "Fixing Unicode bug in RSS API."
-
- * For commits to a branch, prefix the commit message with the branch name.
- For example: "magic-removal: Added support for mind reading."
-
- * Limit commits to the most granular change that makes sense. This means,
- use frequent small commits rather than infrequent large commits. For
- example, if implementing feature X requires a small change to library Y,
- first commit the change to library Y, then commit feature X in a separate
- commit. This goes a *long way* in helping all core Django developers
- follow your changes.
-
- * Separate bug fixes from feature changes.
-
- Bug fixes need to be added to the current bugfix branch (e.g. the
- ``1.0.X`` branch) as well as the current trunk.
-
- * If your commit closes a ticket in the Django `ticket tracker`_, begin
- your commit message with the text "Fixed #abc", where "abc" is the number
- of the ticket your commit fixes. Example: "Fixed #123 -- Added support
- for foo". We've rigged Subversion and Trac so that any commit message
- in that format will automatically close the referenced ticket and post a
- comment to it with the full commit message.
-
- If your commit closes a ticket and is in a branch, use the branch name
- first, then the "Fixed #abc." For example:
- "magic-removal: Fixed #123 -- Added whizbang feature."
-
- For the curious: We're using a `Trac post-commit hook`_ for this.
-
- .. _Trac post-commit hook: http://trac.edgewall.org/browser/trunk/contrib/trac-post-commit-hook
-
- * If your commit references a ticket in the Django `ticket tracker`_ but
- does *not* close the ticket, include the phrase "Refs #abc", where "abc"
- is the number of the ticket your commit references. We've rigged
- Subversion and Trac so that any commit message in that format will
- automatically post a comment to the appropriate ticket.
-
-Reverting commits
------------------
-
-Nobody's perfect; mistakes will be committed. When a mistaken commit is
-discovered, please follow these guidelines:
-
- * Try very hard to ensure that mistakes don't happen. Just because we
- have a reversion policy doesn't relax your responsibility to aim for
- the highest quality possible. Really: double-check your work before
- you commit it in the first place!
-
- * If possible, have the original author revert his/her own commit.
-
- * Don't revert another author's changes without permission from the
- original author.
-
- * If the original author can't be reached (within a reasonable amount
- of time -- a day or so) and the problem is severe -- crashing bug,
- major test failures, etc -- then ask for objections on django-dev
- then revert if there are none.
-
- * If the problem is small (a feature commit after feature freeze,
- say), wait it out.
-
- * If there's a disagreement between the committer and the
- reverter-to-be then try to work it out on the `django-developers`_
- mailing list. If an agreement can't be reached then it should
- be put to a vote.
-
- * If the commit introduced a confirmed, disclosed security
- vulnerability then the commit may be reverted immediately without
- permission from anyone.
-
- * The release branch maintainer may back out commits to the release
- branch without permission if the commit breaks the release branch.
-
-.. _unit-tests:
-
-Unit tests
-==========
-
-Django comes with a test suite of its own, in the ``tests`` directory of the
-Django tarball. It's our policy to make sure all tests pass at all times.
-
-The tests cover:
-
- * Models and the database API (``tests/modeltests/``).
- * Everything else in core Django code (``tests/regressiontests``)
- * Contrib apps (``django/contrib/<contribapp>/tests``, see below)
-
-We appreciate any and all contributions to the test suite!
-
-The Django tests all use the testing infrastructure that ships with Django for
-testing applications. See :doc:`Testing Django applications </topics/testing>`
-for an explanation of how to write new tests.
-
-.. _running-unit-tests:
-
-Running the unit tests
-----------------------
-
-To run the tests, ``cd`` to the ``tests/`` directory and type:
-
-.. code-block:: bash
-
- ./runtests.py --settings=path.to.django.settings
-
-Yes, the unit tests need a settings module, but only for database connection
-info. Your :setting:`DATABASES` setting needs to define two databases:
-
- * A ``default`` database. This database should use the backend that
- you want to use for primary testing
-
- * A database with the alias ``other``. The ``other`` database is
- used to establish that queries can be directed to different
- databases. As a result, this database can use any backend you
- want. It doesn't need to use the same backend as the ``default``
- database (although it can use the same backend if you want to).
-
-If you're using the SQLite database backend, you need to define
-:setting:`ENGINE` for both databases, plus a
-:setting:`TEST_NAME` for the ``other`` database. The
-following is a minimal settings file that can be used to test SQLite::
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3'
- },
- 'other': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'TEST_NAME': 'other_db'
- }
- }
-
-As a convenience, this settings file is included in your Django
-distribution. It is called ``test_sqlite``, and is included in
-the ``tests`` directory. This allows you to get started running
-the tests against the sqlite database without doing anything on
-your filesystem. However it should be noted that running against
-other database backends is recommended for certain types of test
-cases.
-
-To run the tests with this included settings file, ``cd``
-to the ``tests/`` directory and type:
-
-.. code-block:: bash
-
- ./runtests.py --settings=test_sqlite
-
-If you're using another backend, you will need to provide other details for
-each database:
-
- * The :setting:`USER` option for each of your databases needs to
- specify an existing user account for the database.
-
- * The :setting:`PASSWORD` option needs to provide the password for
- the :setting:`USER` that has been specified.
-
- * The :setting:`NAME` option must be the name of an existing database to
- which the given user has permission to connect. The unit tests will not
- touch this database; the test runner creates a new database whose name is
- :setting:`NAME` prefixed with ``test_``, and this test database is
- deleted when the tests are finished. This means your user account needs
- permission to execute ``CREATE DATABASE``.
-
-You will also need to ensure that your database uses UTF-8 as the default
-character set. If your database server doesn't use UTF-8 as a default charset,
-you will need to include a value for ``TEST_CHARSET`` in the settings
-dictionary for the applicable database.
-
-If you want to run the full suite of tests, you'll need to install a number of
-dependencies:
-
- * PyYAML_
- * Markdown_
- * Textile_
- * Docutils_
- * setuptools_
- * memcached_, plus the either the python-memcached_ or cmemcached_
- Python binding
- * gettext_ (:ref:`gettext_on_windows`)
-
-If you want to test the memcached cache backend, you will also need to define
-a :setting:`CACHE_BACKEND` setting that points at your memcached instance.
-
-Each of these dependencies is optional. If you're missing any of them, the
-associated tests will be skipped.
-
-.. _PyYAML: http://pyyaml.org/wiki/PyYAML
-.. _Markdown: http://pypi.python.org/pypi/Markdown/1.7
-.. _Textile: http://pypi.python.org/pypi/textile
-.. _docutils: http://pypi.python.org/pypi/docutils/0.4
-.. _setuptools: http://pypi.python.org/pypi/setuptools/
-.. _memcached: http://www.danga.com/memcached/
-.. _python-memcached: http://pypi.python.org/pypi/python-memcached/
-.. _cmemcached: http://gijsbert.org/cmemcache/index.html
-.. _gettext: http://www.gnu.org/software/gettext/manual/gettext.html
-
-To run a subset of the unit tests, append the names of the test modules to the
-``runtests.py`` command line. See the list of directories in
-``tests/modeltests`` and ``tests/regressiontests`` for module names.
-
-As an example, if Django is not in your ``PYTHONPATH``, you placed
-``settings.py`` in the ``tests/`` directory, and you'd like to only run tests
-for generic relations and internationalization, type:
-
-.. code-block:: bash
-
- PYTHONPATH=`pwd`/..
- ./runtests.py --settings=settings generic_relations i18n
-
-Contrib apps
-------------
-
-Tests for apps in ``django/contrib/`` go in their respective directories under
-``django/contrib/``, in a ``tests.py`` file. (You can split the tests over
-multiple modules by using a ``tests`` directory in the normal Python way.)
-
-For the tests to be found, a ``models.py`` file must exist (it doesn't
-have to have anything in it). If you have URLs that need to be
-mapped, put them in ``tests/urls.py``.
-
-To run tests for just one contrib app (e.g. ``markup``), use the same
-method as above::
-
- ./runtests.py --settings=settings markup
-
-Requesting features
-===================
-
-We're always trying to make Django better, and your feature requests are a key
-part of that. Here are some tips on how to most effectively make a request:
-
- * Request the feature on `django-developers`_, not in the ticket tracker;
- it'll get read more closely if it's on the mailing list.
-
- * Describe clearly and concisely what the missing feature is and how you'd
- like to see it implemented. Include example code (non-functional is OK)
- if possible.
-
- * Explain *why* you'd like the feature. In some cases this is obvious, but
- since Django is designed to help real developers get real work done,
- you'll need to explain it, if it isn't obvious why the feature would be
- useful.
-
-As with most open-source projects, code talks. If you are willing to write the
-code for the feature yourself or if (even better) you've already written it,
-it's much more likely to be accepted. If it's a large feature that might need
-multiple developers we're always happy to give you an experimental branch in
-our repository; see below.
-
-Branch policy
-=============
-
-In general, the trunk must be kept stable. People should be able to run
-production sites against the trunk at any time. Additionally, commits to trunk
-ought to be as atomic as possible -- smaller changes are better. Thus, large
-feature changes -- that is, changes too large to be encapsulated in a single
-patch, or changes that need multiple eyes on them -- must happen on dedicated
-branches.
-
-This means that if you want to work on a large feature -- anything that would
-take more than a single patch, or requires large-scale refactoring -- you need
-to do it on a feature branch. Our development process recognizes two options
-for feature branches:
-
- 1. Feature branches using a distributed revision control system like
- Git_, Mercurial_, Bazaar_, etc.
-
- If you're familiar with one of these tools, this is probably your best
- option since it doesn't require any support or buy-in from the Django
- core developers.
-
- However, do keep in mind that Django will continue to use Subversion for
- the foreseeable future, and this will naturally limit the recognition of
- your branch. Further, if your branch becomes eligible for merging to
- trunk you'll need to find a core developer familiar with your DVCS of
- choice who'll actually perform the merge.
-
- If you do decided to start a distributed branch of Django and choose to make it
- public, please add the branch to the `Django branches`_ wiki page.
-
- 2. Feature branches using SVN have a higher bar. If you want a branch in SVN
- itself, you'll need a "mentor" among the :doc:`core committers
- </internals/committers>`. This person is responsible for actually creating
- the branch, monitoring your process (see below), and ultimately merging
- the branch into trunk.
-
- If you want a feature branch in SVN, you'll need to ask in
- `django-developers`_ for a mentor.
-
-.. _git: http://git-scm.com/
-.. _mercurial: http://mercurial.selenic.com/
-.. _bazaar: http://bazaar.canonical.com/
-.. _django branches: http://code.djangoproject.com/wiki/DjangoBranches
-
-Branch rules
-------------
-
-We've got a few rules for branches born out of experience with what makes a
-successful Django branch.
-
-DVCS branches are obviously not under central control, so we have no way of
-enforcing these rules. However, if you're using a DVCS, following these rules
-will give you the best chance of having a successful branch (read: merged back to
-trunk).
-
-Developers with branches in SVN, however, **must** follow these rules. The
-branch mentor will keep on eye on the branch and **will delete it** if these
-rules are broken.
-
- * Only branch entire copies of the Django tree, even if work is only
- happening on part of that tree. This makes it painless to switch to a
- branch.
-
- * Merge changes from trunk no less than once a week, and preferably every
- couple-three days.
-
- In our experience, doing regular trunk merges is often the difference
- between a successful branch and one that fizzles and dies.
-
- If you're working on an SVN branch, you should be using `svnmerge.py`_
- to track merges from trunk.
-
- * Keep tests passing and documentation up-to-date. As with patches,
- we'll only merge a branch that comes with tests and documentation.
-
-.. _svnmerge.py: http://www.orcaware.com/svn/wiki/Svnmerge.py
-
-Once the branch is stable and ready to be merged into the trunk, alert
-`django-developers`_.
-
-After a branch has been merged, it should be considered "dead"; write access to
-it will be disabled, and old branches will be periodically "trimmed." To keep
-our SVN wrangling to a minimum, we won't be merging from a given branch into the
-trunk more than once.
-
-Using branches
---------------
-
-To use a branch, you'll need to do two things:
-
- * Get the branch's code through Subversion.
-
- * Point your Python ``site-packages`` directory at the branch's version of
- the ``django`` package rather than the version you already have
- installed.
-
-Getting the code from Subversion
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To get the latest version of a branch's code, check it out using Subversion:
-
-.. code-block:: bash
-
- svn co http://code.djangoproject.com/svn/django/branches/<branch>/
-
-...where ``<branch>`` is the branch's name. See the `list of branch names`_.
-
-Alternatively, you can automatically convert an existing directory of the
-Django source code as long as you've checked it out via Subversion. To do the
-conversion, execute this command from within your ``django`` directory:
-
-.. code-block:: bash
-
- svn switch http://code.djangoproject.com/svn/django/branches/<branch>/
-
-The advantage of using ``svn switch`` instead of ``svn co`` is that the
-``switch`` command retains any changes you might have made to your local copy
-of the code. It attempts to merge those changes into the "switched" code. The
-disadvantage is that it may cause conflicts with your local changes if the
-"switched" code has altered the same lines of code.
-
-(Note that if you use ``svn switch``, you don't need to point Python at the new
-version, as explained in the next section.)
-
-.. _list of branch names: http://code.djangoproject.com/browser/django/branches
-
-Pointing Python at the new Django version
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Once you've retrieved the branch's code, you'll need to change your Python
-``site-packages`` directory so that it points to the branch version of the
-``django`` directory. (The ``site-packages`` directory is somewhere such as
-``/usr/lib/python2.4/site-packages`` or
-``/usr/local/lib/python2.4/site-packages`` or ``C:\Python\site-packages``.)
-
-The simplest way to do this is by renaming the old ``django`` directory to
-``django.OLD`` and moving the trunk version of the code into the directory
-and calling it ``django``.
-
-Alternatively, you can use a symlink called ``django`` that points to the
-location of the branch's ``django`` package. If you want to switch back, just
-change the symlink to point to the old code.
-
-A third option is to use a `path file`_ (``<something>.pth``) which should
-work on all systems (including Windows, which doesn't have symlinks
-available). First, make sure there are no files, directories or symlinks named
-``django`` in your ``site-packages`` directory. Then create a text file named
-``django.pth`` and save it to your ``site-packages`` directory. That file
-should contain a path to your copy of Django on a single line and optional
-comments. Here is an example that points to multiple branches. Just uncomment
-the line for the branch you want to use ('Trunk' in this example) and make
-sure all other lines are commented::
-
- # Trunk is a svn checkout of:
- # http://code.djangoproject.com/svn/django/trunk/
- #
- /path/to/trunk
-
- # <branch> is a svn checkout of:
- # http://code.djangoproject.com/svn/django/branches/<branch>/
- #
- #/path/to/<branch>
-
- # On windows a path may look like this:
- # C:/path/to/<branch>
-
-If you're using Django 0.95 or earlier and installed it using
-``python setup.py install``, you'll have a directory called something like
-``Django-0.95-py2.4.egg`` instead of ``django``. In this case, edit the file
-``setuptools.pth`` and remove the line that references the Django ``.egg``
-file. Then copy the branch's version of the ``django`` directory into
-``site-packages``.
-
-.. _path file: http://docs.python.org/library/site.html
-
-How we make decisions
-=====================
-
-Whenever possible, we strive for a rough consensus. To that end, we'll often
-have informal votes on `django-developers`_ about a feature. In these votes we
-follow the voting style invented by Apache and used on Python itself, where
-votes are given as +1, +0, -0, or -1. Roughly translated, these votes mean:
-
- * +1: "I love the idea and I'm strongly committed to it."
-
- * +0: "Sounds OK to me."
-
- * -0: "I'm not thrilled, but I won't stand in the way."
-
- * -1: "I strongly disagree and would be very unhappy to see the idea turn
- into reality."
-
-Although these votes on django-developers are informal, they'll be taken very
-seriously. After a suitable voting period, if an obvious consensus arises
-we'll follow the votes.
-
-However, consensus is not always possible. If consensus cannot be reached, or
-if the discussion towards a consensus fizzles out without a concrete decision,
-we use a more formal process.
-
-Any core committer (see below) may call for a formal vote using the same
-voting mechanism above. A proposition will be considered carried by the core team
-if:
-
- * There are three "+1" votes from members of the core team.
-
- * There is no "-1" vote from any member of the core team.
-
- * The BDFLs haven't stepped in and executed their positive or negative
- veto.
-
-When calling for a vote, the caller should specify a deadline by which
-votes must be received. One week is generally suggested as the minimum
-amount of time.
-
-Since this process allows any core committer to veto a proposal, any "-1"
-votes (or BDFL vetos) should be accompanied by an explanation that explains
-what it would take to convert that "-1" into at least a "+0".
-
-Whenever possible, these formal votes should be announced and held in
-public on the `django-developers`_ mailing list. However, overly sensitive
-or contentious issues -- including, most notably, votes on new core
-committers -- may be held in private.
-
-Commit access
-=============
-
-Django has two types of committers:
-
-Core committers
- These are people who have a long history of contributions to Django's
- codebase, a solid track record of being polite and helpful on the
- mailing lists, and a proven desire to dedicate serious time to Django's
- development. The bar is high for full commit access.
-
-Partial committers
- These are people who are "domain experts." They have direct check-in access
- to the subsystems that fall under their jurisdiction, and they're given a
- formal vote in questions that involve their subsystems. This type of access
- is likely to be given to someone who contributes a large subframework to
- Django and wants to continue to maintain it.
-
- Partial commit access is granted by the same process as full
- committers. However, the bar is set lower; proven expertise in the area
- in question is likely to be sufficient.
-
-Decisions on new committers will follow the process explained above in `how
-we make decisions`_.
-
-To request commit access, please contact an existing committer privately. Public
-requests for commit access are potential flame-war starters, and will be ignored.
-
-.. _community page: http://www.djangoproject.com/community/
-.. _ticket tracker: http://code.djangoproject.com/newticket
-.. _django-developers: http://groups.google.com/group/django-developers
-.. _search the tracker: http://code.djangoproject.com/search
-.. _django-users: http://groups.google.com/group/django-users
-.. _`#django`: irc://irc.freenode.net/django
-.. _list of tickets with patches: http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&has_patch=1&order=priority
-.. _pep8.py: http://pypi.python.org/pypi/pep8/
-.. _i18n branch: http://code.djangoproject.com/browser/django/branches/i18n
-.. _`tags/releases`: http://code.djangoproject.com/browser/django/tags/releases
-.. _`easy-pickings`: http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&keywords=~easy-pickings&order=priority
diff --git a/parts/django/docs/internals/deprecation.txt b/parts/django/docs/internals/deprecation.txt
deleted file mode 100644
index e045795..0000000
--- a/parts/django/docs/internals/deprecation.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-===========================
-Django Deprecation Timeline
-===========================
-
-This document outlines when various pieces of Django will be removed, following
-their deprecation, as per the :ref:`Django deprecation policy
-<internal-release-deprecation-policy>`
-
- * 1.3
- * ``AdminSite.root()``. This release will remove the old method for
- hooking up admin URLs. This has been deprecated since the 1.1
- release.
-
- * Authentication backends need to define the boolean attributes
- ``supports_object_permissions`` and ``supports_anonymous_user``.
- The old backend style is deprecated since the 1.2 release.
-
- * The :mod:`django.contrib.gis.db.backend` module, including the
- ``SpatialBackend`` interface, is deprecated since the 1.2 release.
-
- * 1.4
- * ``CsrfResponseMiddleware``. This has been deprecated since the 1.2
- release, in favour of the template tag method for inserting the CSRF
- token. ``CsrfMiddleware``, which combines ``CsrfResponseMiddleware``
- and ``CsrfViewMiddleware``, is also deprecated.
-
- * The old imports for CSRF functionality (``django.contrib.csrf.*``),
- which moved to core in 1.2, will be removed.
-
- * ``SMTPConnection``. The 1.2 release deprecated the ``SMTPConnection``
- class in favor of a generic E-mail backend API.
-
- * The many to many SQL generation functions on the database backends
- will be removed.
-
- * The ability to use the ``DATABASE_*`` family of top-level settings to
- define database connections will be removed.
-
- * The ability to use shorthand notation to specify a database backend
- (i.e., ``sqlite3`` instead of ``django.db.backends.sqlite3``) will be
- removed.
-
- * The ``get_db_prep_save``, ``get_db_prep_value`` and
- ``get_db_prep_lookup`` methods on Field were modified in 1.2 to support
- multiple databases. In 1.4, the support functions that allow methods
- with the old prototype to continue working will be removed.
-
- * The ``Message`` model (in ``django.contrib.auth``), its related
- manager in the ``User`` model (``user.message_set``), and the
- associated methods (``user.message_set.create()`` and
- ``user.get_and_delete_messages()``), which have
- been deprecated since the 1.2 release, will be removed. The
- :doc:`messages framework </ref/contrib/messages>` should be used
- instead.
-
- * Authentication backends need to support the ``obj`` parameter for
- permission checking. The ``supports_object_permissions`` variable
- is not checked any longer and can be removed.
-
- * Authentication backends need to support the ``AnonymousUser``
- being passed to all methods dealing with permissions.
- The ``supports_anonymous_user`` variable is not checked any
- longer and can be removed.
-
- * The ability to specify a callable template loader rather than a
- ``Loader`` class will be removed, as will the ``load_template_source``
- functions that are included with the built in template loaders for
- backwards compatibility. These have been deprecated since the 1.2
- release.
-
- * ``django.utils.translation.get_date_formats()`` and
- ``django.utils.translation.get_partial_date_formats()``. These
- functions are replaced by the new locale aware formatting; use
- ``django.utils.formats.get_format()`` to get the appropriate
- formats.
-
- * In ``django.forms.fields``: ``DEFAULT_DATE_INPUT_FORMATS``,
- ``DEFAULT_TIME_INPUT_FORMATS`` and
- ``DEFAULT_DATETIME_INPUT_FORMATS``. Use
- ``django.utils.formats.get_format()`` to get the appropriate
- formats.
-
- * The ability to use a function-based test runners will be removed,
- along with the ``django.test.simple.run_tests()`` test runner.
-
- * The ``views.feed()`` view and ``feeds.Feed`` class in
- ``django.contrib.syndication`` have been deprecated since the 1.2
- release. The class-based view ``views.Feed`` should be used instead.
-
- * ``django.core.context_processors.auth``. This release will
- remove the old method in favor of the new method in
- ``django.contrib.auth.context_processors.auth``. This has been
- deprecated since the 1.2 release.
-
- * The ``postgresql`` database backend has been deprecated in favor of
- the ``postgresql_psycopg2`` backend.
-
- * The ``no`` language code has been deprecated in favor of the ``nb``
- language code.
-
- * 2.0
- * ``django.views.defaults.shortcut()``. This function has been moved
- to ``django.contrib.contenttypes.views.shortcut()`` as part of the
- goal of removing all ``django.contrib`` references from the core
- Django codebase. The old shortcut will be removed in the 2.0
- release.
diff --git a/parts/django/docs/internals/documentation.txt b/parts/django/docs/internals/documentation.txt
deleted file mode 100644
index 36270ea..0000000
--- a/parts/django/docs/internals/documentation.txt
+++ /dev/null
@@ -1,221 +0,0 @@
-How the Django documentation works
-==================================
-
-\... and how to contribute.
-
-Django's documentation uses the Sphinx__ documentation system, which in turn is
-based on docutils__. The basic idea is that lightly-formatted plain-text
-documentation is transformed into HTML, PDF, and any other output format.
-
-__ http://sphinx.pocoo.org/
-__ http://docutils.sourceforge.net/
-
-To actually build the documentation locally, you'll currently need to install
-Sphinx -- ``easy_install Sphinx`` should do the trick.
-
-.. note::
-
- The Django documentation can be generated with Sphinx version 0.6 or
- newer, but we recommend using Sphinx 1.0.2 or newer.
-
-Then, building the HTML is easy; just ``make html`` from the ``docs`` directory.
-
-To get started contributing, you'll want to read the `reStructuredText
-Primer`__. After that, you'll want to read about the `Sphinx-specific markup`__
-that's used to manage metadata, indexing, and cross-references.
-
-__ http://sphinx.pocoo.org/rest.html
-__ http://sphinx.pocoo.org/markup/
-
-The main thing to keep in mind as you write and edit docs is that the more
-semantic markup you can add the better. So::
-
- Add ``django.contrib.auth`` to your ``INSTALLED_APPS``...
-
-Isn't nearly as helpful as::
-
- Add :mod:`django.contrib.auth` to your :setting:`INSTALLED_APPS`...
-
-This is because Sphinx will generate proper links for the latter, which greatly
-helps readers. There's basically no limit to the amount of useful markup you can
-add.
-
-Django-specific markup
-----------------------
-
-Besides the `Sphinx built-in markup`__, Django's docs defines some extra description units:
-
-__ http://sphinx.pocoo.org/markup/desc.html
-
- * Settings::
-
- .. setting:: INSTALLED_APPS
-
- To link to a setting, use ``:setting:`INSTALLED_APPS```.
-
- * Template tags::
-
- .. templatetag:: regroup
-
- To link, use ``:ttag:`regroup```.
-
- * Template filters::
-
- .. templatefilter:: linebreaksbr
-
- To link, use ``:tfilter:`linebreaksbr```.
-
- * Field lookups (i.e. ``Foo.objects.filter(bar__exact=whatever)``)::
-
- .. fieldlookup:: exact
-
- To link, use ``:lookup:`exact```.
-
- * ``django-admin`` commands::
-
- .. django-admin:: syncdb
-
- To link, use ``:djadmin:`syncdb```.
-
- * ``django-admin`` command-line options::
-
- .. django-admin-option:: --traceback
-
- To link, use ``:djadminopt:`--traceback```.
-
-An example
-----------
-
-For a quick example of how it all fits together, consider this hypothetical
-example:
-
- * First, the ``ref/settings.txt`` document could have an overall layout
- like this:
-
- .. code-block:: rst
-
- ========
- Settings
- ========
-
- ...
-
- .. _available-settings:
-
- Available settings
- ==================
-
- ...
-
- .. _deprecated-settings:
-
- Deprecated settings
- ===================
-
- ...
-
- * Next, the ``topics/settings.txt`` document could contain something like
- this:
-
- .. code-block:: rst
-
- You can access a :ref:`listing of all available settings
- <available-settings>`. For a list of deprecated settings see
- :ref:`deprecated-settings`.
-
- You can find both in the :doc:`settings reference document </ref/settings>`.
-
- We use the Sphinx doc_ cross reference element when we want to link to
- another document as a whole and the ref_ element when we want to link to
- an arbitrary location in a document.
-
-.. _doc: http://sphinx.pocoo.org/markup/inline.html#role-doc
-.. _ref: http://sphinx.pocoo.org/markup/inline.html#role-ref
-
- * Next, notice how the settings are annotated:
-
- .. code-block:: rst
-
- .. setting:: ADMIN_FOR
-
- ADMIN_FOR
- ---------
-
- Default: ``()`` (Empty tuple)
-
- Used for admin-site settings modules, this should be a tuple of settings
- modules (in the format ``'foo.bar.baz'``) for which this site is an
- admin.
-
- The admin site uses this in its automatically-introspected
- documentation of models, views and template tags.
-
- This marks up the following header as the "canonical" target for the
- setting ``ADMIN_FOR`` This means any time I talk about ``ADMIN_FOR``, I
- can reference it using ``:setting:`ADMIN_FOR```.
-
-That's basically how everything fits together.
-
-TODO
-----
-
-The work is mostly done, but here's what's left, in rough order of priority.
-
- * Most of the various ``index.txt`` documents have *very* short or even
- non-existent intro text. Each of those documents needs a good short intro
- the content below that point.
-
- * The glossary is very perfunctory. It needs to be filled out.
-
- * Add more metadata targets: there's lots of places that look like::
-
- ``File.close()``
- ~~~~~~~~~~~~~~~~
-
- \... these should be::
-
- .. method:: File.close()
-
- That is, use metadata instead of titles.
-
- * Add more links -- nearly everything that's an inline code literal
- right now can probably be turned into a xref.
-
- See the ``literals_to_xrefs.py`` file in ``_ext`` -- it's a shell script
- to help do this work.
-
- This will probably be a continuing, never-ending project.
-
- * Add `info field lists`__ where appropriate.
-
- __ http://sphinx.pocoo.org/markup/desc.html#info-field-lists
-
- * Add ``.. code-block:: <lang>`` to literal blocks so that they get
- highlighted.
-
-Hints
------
-
-Some hints for making things look/read better:
-
- * Whenever possible, use links. So, use ``:setting:`ADMIN_FOR``` instead of
- ````ADMIN_FOR````.
-
- * Some directives (``.. setting::``, for one) are prefix-style directives;
- they go *before* the unit they're describing. These are known as
- "crossref" directives. Others (``.. class::``, e.g.) generate their own
- markup; these should go inside the section they're describing. These are
- called "description units".
-
- You can tell which are which by looking at in :file:`_ext/djangodocs.py`;
- it registers roles as one of the other.
-
- * When referring to classes/functions/modules, etc., you'll want to use the
- fully-qualified name of the target
- (``:class:`django.contrib.contenttypes.models.ContentType```).
-
- Since this doesn't look all that awesome in the output -- it shows the
- entire path to the object -- you can prefix the target with a ``~``
- (that's a tilde) to get just the "last bit" of that path. So
- ``:class:`~django.contrib.contenttypes.models.ContentType``` will just
- display a link with the title "ContentType".
diff --git a/parts/django/docs/internals/index.txt b/parts/django/docs/internals/index.txt
deleted file mode 100644
index 26c941a..0000000
--- a/parts/django/docs/internals/index.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-Django internals
-================
-
-Documentation for people hacking on Django itself. This is the place to go if
-you'd like to help improve Django, learn or learn about how Django works "under
-the hood".
-
-.. warning::
-
- Elsewhere in the Django documentation, coverage of a feature is a sort of a
- contract: once an API is in the official documentation, we consider it
- "stable" and don't change it without a good reason. APIs covered here,
- however, are considered "internal-only": we reserve the right to change
- these internals if we must.
-
-.. toctree::
- :maxdepth: 1
-
- contributing
- documentation
- committers
- release-process
- deprecation
- svn
diff --git a/parts/django/docs/internals/release-process.txt b/parts/django/docs/internals/release-process.txt
deleted file mode 100644
index 2a56f0b..0000000
--- a/parts/django/docs/internals/release-process.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-========================
-Django's release process
-========================
-
-.. _official-releases:
-
-Official releases
-=================
-
-Django's release numbering works as follows:
-
- * Versions are numbered in the form ``A.B`` or ``A.B.C``.
-
- * ``A`` is the *major version* number, which is only incremented for major
- changes to Django, and these changes are not necessarily
- backwards-compatible. That is, code you wrote for Django 6.0 may break
- when we release Django 7.0.
-
- * ``B`` is the *minor version* number, which is incremented for large yet
- backwards compatible changes. Code written for Django 6.4 will continue
- to work under Django 6.5.
-
- * ``C`` is the *micro version* number which, is incremented for bug and
- security fixes. A new micro-release will always be 100%
- backwards-compatible with the previous micro-release.
-
- * In some cases, we'll make alpha, beta, or release candidate releases.
- These are of the form ``A.B alpha/beta/rc N``, which means the ``Nth``
- alpha/beta/release candidate of version ``A.B``.
-
-An exception to this version numbering scheme is the pre-1.0 Django code.
-There's no guarantee of backwards-compatibility until the 1.0 release.
-
-In Subversion, each Django release will be tagged under ``tags/releases``. If
-it's necessary to release a bug fix release or a security release that doesn't
-come from the trunk, we'll copy that tag to ``branches/releases`` to make the
-bug fix release.
-
-Major releases
---------------
-
-Major releases (1.0, 2.0, etc.) will happen very infrequently (think "years",
-not "months"), and will probably represent major, sweeping changes to Django.
-
-Minor releases
---------------
-
-Minor release (1.1, 1.2, etc.) will happen roughly every nine months -- see
-`release process`_, below for details.
-
-.. _internal-release-deprecation-policy:
-
-These releases will contain new features, improvements to existing features, and
-such. A minor release may deprecate certain features from previous releases. If a
-feature in version ``A.B`` is deprecated, it will continue to work in version
-``A.B+1``. In version ``A.B+2``, use of the feature will raise a
-``DeprecationWarning`` but will continue to work. Version ``A.B+3`` will
-remove the feature entirely.
-
-So, for example, if we decided to remove a function that existed in Django 1.0:
-
- * Django 1.1 will contain a backwards-compatible replica of the function
- which will raise a ``PendingDeprecationWarning``. This warning is silent
- by default; you need to explicitly turn on display of these warnings.
-
- * Django 1.2 will contain the backwards-compatible replica, but the warning
- will be promoted to a full-fledged ``DeprecationWarning``. This warning is
- *loud* by default, and will likely be quite annoying.
-
- * Django 1.3 will remove the feature outright.
-
-Micro releases
---------------
-
-Micro releases (1.0.1, 1.0.2, 1.1.1, etc.) will be issued at least once half-way
-between minor releases, and probably more often as needed.
-
-These releases will always be 100% compatible with the associated minor release
--- the answer to "should I upgrade to the latest micro release?" will always be
-"yes."
-
-Each minor release of Django will have a "release maintainer" appointed. This
-person will be responsible for making sure that bug fixes are applied to both
-trunk and the maintained micro-release branch. This person will also work with
-the release manager to decide when to release the micro releases.
-
-Supported versions
-==================
-
-At any moment in time, Django's developer team will support a set of releases to
-varying levels:
-
- * The current development trunk will get new features and bug fixes
- requiring major refactoring.
-
- * All bug fixes applied to the trunk will also be applied to the last
- minor release, to be released as the next micro release.
-
- * Security fixes will be applied to the current trunk and the previous two
- minor releases.
-
-As a concrete example, consider a moment in time halfway between the release of
-Django 1.3 and 1.4. At this point in time:
-
- * Features will be added to development trunk, to be released as Django 1.4.
-
- * Bug fixes will be applied to a ``1.3.X`` branch, and released as 1.3.1,
- 1.3.2, etc.
-
- * Security releases will be applied to trunk, a ``1.3.X`` branch and a
- ``1.2.X`` branch. Security fixes will trigger the release of ``1.3.1``,
- ``1.2.1``, etc.
-
-.. _release-process:
-
-Release process
-===============
-
-Django uses a time-based release schedule, with minor (i.e. 1.1, 1.2, etc.)
-releases every nine months, or more, depending on features.
-
-After each previous release (and after a suitable cooling-off period of a week
-or two), the core development team will examine the landscape and announce a
-timeline for the next release. Most releases will be scheduled in the 6-9 month
-range, but if we have bigger features to development we might schedule a longer
-period to allow for more ambitious work.
-
-Release cycle
--------------
-
-Each release cycle will be split into three periods, each lasting roughly
-one-third of the cycle:
-
-Phase one: feature proposal
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The first phase of the release process will be devoted to figuring out what
-features to include in the next version. This should include a good deal of
-preliminary work on those features -- working code trumps grand design.
-
-At the end of part one, the core developers will propose a feature list for the
-upcoming release. This will be broken into:
-
-* "Must-have": critical features that will delay the release if not finished
-* "Maybe" features: that will be pushed to the next release if not finished
-* "Not going to happen": features explicitly deferred to a later release.
-
-Anything that hasn't got at least some work done by the end of the first third
-isn't eligible for the next release; a design alone isn't sufficient.
-
-Phase two: development
-~~~~~~~~~~~~~~~~~~~~~~
-
-The second third of the release schedule is the "heads-down" working period.
-Using the roadmap produced at the end of phase one, we'll all work very hard to
-get everything on it done.
-
-Longer release schedules will likely spend more than a third of the time in this
-phase.
-
-At the end of phase two, any unfinished "maybe" features will be postponed until
-the next release. Though it shouldn't happen, any "must-have" features will
-extend phase two, and thus postpone the final release.
-
-Phase two will culminate with an alpha release.
-
-Phase three: bugfixes
-~~~~~~~~~~~~~~~~~~~~~
-
-The last third of a release is spent fixing bugs -- no new features will be
-accepted during this time. We'll release a beta release about halfway through,
-and an rc complete with string freeze two weeks before the end of the schedule.
-
-Bug-fix releases
-----------------
-
-After a minor release (i.e 1.1), the previous release will go into bug-fix mode.
-
-A branch will be created of the form ``branches/releases/1.0.X`` to track
-bug-fixes to the previous release. When possible, bugs fixed on trunk must
-*also* be fixed on the bug-fix branch; this means that commits need to cleanly
-separate bug fixes from feature additions. The developer who commits a fix to
-trunk will be responsible for also applying the fix to the current bug-fix
-branch. Each bug-fix branch will have a maintainer who will work with the
-committers to keep them honest on backporting bug fixes.
-
-How this all fits together
---------------------------
-
-Let's look at a hypothetical example for how this all first together. Imagine,
-if you will, a point about halfway between 1.1 and 1.2. At this point,
-development will be happening in a bunch of places:
-
- * On trunk, development towards 1.2 proceeds with small additions, bugs
- fixes, etc. being checked in daily.
-
- * On the branch "branches/releases/1.1.X", bug fixes found in the 1.1
- release are checked in as needed. At some point, this branch will be
- released as "1.1.1", "1.1.2", etc.
-
- * On the branch "branches/releases/1.0.X", security fixes are made if
- needed and released as "1.0.2", "1.0.3", etc.
-
- * On feature branches, development of major features is done. These
- branches will be merged into trunk before the end of phase two.
diff --git a/parts/django/docs/internals/svn.txt b/parts/django/docs/internals/svn.txt
deleted file mode 100644
index 9efbe28..0000000
--- a/parts/django/docs/internals/svn.txt
+++ /dev/null
@@ -1,254 +0,0 @@
-=================================
-The Django source code repository
-=================================
-
-
-When deploying a Django application into a real production
-environment, you will almost always want to use `an official packaged
-release of Django`_. However, if you'd like to try out in-development
-code from an upcoming release or contribute to the development of
-Django, you'll need to obtain a checkout from Django's source code
-repository. This document covers the way the code repository is laid
-out and how to work with and find things in it.
-
-
-.. _an official packaged release of Django: http://www.djangoproject.com/download/
-
-
-High-level overview
-===================
-
-The Django source code repository uses `Subversion`_ to track changes
-to the code over time, so you'll need a copy of the Subversion client
-(a program called ``svn``) on your computer, and you'll want to
-familiarize yourself with the basics of how Subversion
-works. Subversion's Web site offers downloads for various operating
-systems, and `a free online book`_ is available to help you get up to
-speed with using Subversion.
-
-The Django Subversion repository is located online at
-`code.djangoproject.com/svn <http://code.djangoproject.com/svn/>`_. `A
-friendly Web-based interface for browsing the code`_ is also
-available, though when using Subversion you'll always want to use the
-repository address instead. At the top level of the repository are two
-directories: ``django`` contains the full source code for all Django
-releases, while ``djangoproject.com`` contains the source code and
-templates for the `djangoproject.com <http://www.djangoproject.com/>`_
-Web site. For trying out in-development Django code, or contributing
-to Django, you'll always want to check out code from some location in
-the ``django`` directory.
-
-Inside the ``django`` directory, Django's source code is organized
-into three areas:
-
-* ``branches`` contains branched copies of Django's code, which are
- (or were) maintained for various purposes. Some branches exist to
- provide a place to develop major or experimental new features
- without affecting the rest of Django's code, while others serve to
- provide bug fixes or support for older Django releases.
-
-* ``tags`` contains snapshots of Django's code at various important
- points in its history; mostly these are the exact revisions from
- which packaged Django releases were produced.
-
-* ``trunk`` contains the main in-development code which will become
- the next packaged release of Django, and is where most development
- activity is focused.
-
-
-.. _Subversion: http://subversion.tigris.org/
-.. _a free online book: http://svnbook.red-bean.com/
-.. _A friendly Web-based interface for browsing the code: http://code.djangoproject.com/browser/
-
-
-Working with Django's trunk
-===========================
-
-If you'd like to try out the in-development code for the next release
-of Django, or if you'd like to contribute to Django by fixing bugs or
-developing new features, you'll want to get the code from trunk. You
-can get a complete copy of this code (a "Subversion checkout") by
-typing::
-
- svn co http://code.djangoproject.com/svn/django/trunk/
-
-Note that this will get *all* of Django: in addition to the top-level
-``django`` module containing Python code, you'll also get a copy of
-Django's documentation, unit-test suite, packaging scripts and other
-miscellaneous bits. Django's code will be present in your checkout as
-a directory named ``django``.
-
-To try out the in-development trunk code with your own applications,
-simply place the directory containing your checkout on your Python
-import path. Then ``import`` statements which look for Django will find
-the ``django`` module within your checkout.
-
-If you're going to be working on Django's code (say, to fix a bug or
-develop a new feature), you can probably stop reading here and move
-over to :doc:`the documentation for contributing to Django
-</internals/contributing>`, which covers things like the preferred
-coding style and how to generate and submit a patch.
-
-
-Branches
-========
-
-Django uses branches for two main purposes:
-
-1. Development of major or experimental features, to keep them from
- affecting progress on other work in trunk.
-
-2. Security and bug-fix support for older releases of Django, during
- their support lifetimes.
-
-
-Feature-development branches
-----------------------------
-
-Feature-development branches tend by their nature to be
-temporary. Some produce successful features which are merged back into
-Django's trunk to become part of an official release, but others do
-not; in either case there comes a time when the branch is no longer
-being actively worked on by any developer. At this point the branch is
-considered closed.
-
-Unfortunately, Subversion has no standard way of indicating this. As a
-workaround, branches of Django which are closed and no longer
-maintained are moved into the directory ``django/branches/attic``.
-
-For reference, the following are branches whose code eventually became
-part of Django itself, and so are no longer separately maintained:
-
-* ``boulder-oracle-sprint``: Added support for Oracle databases to
- Django's object-relational mapper. This has been part of Django
- since the 1.0 release.
-
-* ``gis``: Added support for geographic/spatial queries to Django's
- object-relational mapper. This has been part of Django since the 1.0
- release, as the bundled application ``django.contrib.gis``.
-
-* ``i18n``: Added :doc:`internationalization support </topics/i18n/index>` to
- Django. This has been part of Django since the 0.90 release.
-
-* ``magic-removal``: A major refactoring of both the internals and
- public APIs of Django's object-relational mapper. This has been part
- of Django since the 0.95 release.
-
-* ``multi-auth``: A refactoring of :doc:`Django's bundled
- authentication framework </topics/auth>` which added support for
- :ref:`authentication backends <authentication-backends>`. This has
- been part of Django since the 0.95 release.
-
-* ``new-admin``: A refactoring of :doc:`Django's bundled
- administrative application </ref/contrib/admin/index>`. This became part of
- Django as of the 0.91 release, but was superseded by another
- refactoring (see next listing) prior to the Django 1.0 release.
-
-* ``newforms-admin``: The second refactoring of Django's bundled
- administrative application. This became part of Django as of the 1.0
- release, and is the basis of the current incarnation of
- ``django.contrib.admin``.
-
-* ``queryset-refactor``: A refactoring of the internals of Django's
- object-relational mapper. This became part of Django as of the 1.0
- release.
-
-* ``unicode``: A refactoring of Django's internals to consistently use
- Unicode-based strings in most places within Django and Django
- applications. This became part of Django as of the 1.0 release.
-
-Additionally, the following branches are closed, but their code was
-never merged into Django and the features they aimed to implement
-were never finished:
-
-* ``full-history``
-
-* ``generic-auth``
-
-* ``multiple-db-support``
-
-* ``per-object-permissions``
-
-* ``schema-evolution``
-
-* ``schema-evolution-ng``
-
-* ``search-api``
-
-* ``sqlalchemy``
-
-All of the above-mentioned branches now reside in
-``django/branches/attic``.
-
-
-Support and bugfix branches
----------------------------
-
-In addition to fixing bugs in current trunk, the Django project
-provides official bug-fix support for the most recent released version
-of Django, and security support for the two most recently-released
-versions of Django. This support is provided via branches in which the
-necessary bug or security fixes are applied; the branches are then
-used as the basis for issuing bugfix or security releases.
-
-As of the Django 1.0 release, these branches can be found in the
-repository in the directory ``django/branches/releases``, and new branches
-will be created there approximately one month after each new Django
-release. For example, shortly after the release of Django 1.0, the
-branch ``django/branches/releases/1.0.X`` was created to receive bug
-fixes, and shortly after the release of Django 1.1 the branch
-``django/branches/releases/1.1.X`` was created.
-
-Prior to the Django 1.0 release, these branches were maintaind within
-the top-level ``django/branches`` directory, and so the following
-branches exist there and provided support for older Django releases:
-
-* ``0.90-bugfixes``
-
-* ``0.91-bugfixes``
-
-* ``0.95-bugfixes``
-
-* ``0.96-bugfixes``
-
-Official support for those releases has expired, and so they no longer
-receive direct maintenance from the Django project. However, the
-branches continue to exist and interested community members have
-occasionally used them to provide unofficial support for old Django
-releases.
-
-
-Tags
-====
-
-The directory ``django/tags`` within the repository contains complete
-copies of the Django source code as it existed at various points in
-its history. These "tagged" copies of Django are *never* changed or
-updated; new tags may be added as needed, but once added they are
-considered read-only and serve as useful guides to Django's
-development history.
-
-Within ``django/tags/releases`` are copies of the code which formed each
-packaged release of Django, and each tag is named with the version
-number of the release to which it corresponds. So, for example,
-``django/tags/releases/1.1`` is a complete copy of the code which was
-packaged as the Django 1.1 release.
-
-Within ``django/tags/notable_moments`` are copies of the Django code from
-points which do not directly correspond to releases, but which are
-nonetheless important historical milestones for Django
-development. The current "notable moments" marked there are:
-
-* ``ipo``: Django's code as it existed at the moment Django was first
- publicly announced in 2005.
-
-* ``pre-magic-removal``: The state of Django's code just before the
- merging of the ``magic-removal`` branch (described above), which
- significantly updated Django's object-relational mapper.
-
-* ``pre-newforms-admin``: The state of Django's code just before the
- merging of the ``newforms-admin`` branch (see above), which
- significantly updated Django's bundled administrative application.
-
-* Tags corresponding to each of the alpha, beta and release-candidate
- packages in the run up to the Django 1.0 release.
diff --git a/parts/django/docs/intro/_images/admin01.png b/parts/django/docs/intro/_images/admin01.png
deleted file mode 100644
index 28f14d6..0000000
--- a/parts/django/docs/intro/_images/admin01.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin02.png b/parts/django/docs/intro/_images/admin02.png
deleted file mode 100644
index 4b49ebb..0000000
--- a/parts/django/docs/intro/_images/admin02.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin02t.png b/parts/django/docs/intro/_images/admin02t.png
deleted file mode 100644
index d7519d1..0000000
--- a/parts/django/docs/intro/_images/admin02t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin03.png b/parts/django/docs/intro/_images/admin03.png
deleted file mode 100644
index 635226c..0000000
--- a/parts/django/docs/intro/_images/admin03.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin03t.png b/parts/django/docs/intro/_images/admin03t.png
deleted file mode 100644
index 94273cb..0000000
--- a/parts/django/docs/intro/_images/admin03t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin04.png b/parts/django/docs/intro/_images/admin04.png
deleted file mode 100644
index 982420a..0000000
--- a/parts/django/docs/intro/_images/admin04.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin04t.png b/parts/django/docs/intro/_images/admin04t.png
deleted file mode 100644
index a2ec8bb..0000000
--- a/parts/django/docs/intro/_images/admin04t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin05.png b/parts/django/docs/intro/_images/admin05.png
deleted file mode 100644
index b424393..0000000
--- a/parts/django/docs/intro/_images/admin05.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin05t.png b/parts/django/docs/intro/_images/admin05t.png
deleted file mode 100644
index a5da950..0000000
--- a/parts/django/docs/intro/_images/admin05t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin06.png b/parts/django/docs/intro/_images/admin06.png
deleted file mode 100644
index 5f24d4e..0000000
--- a/parts/django/docs/intro/_images/admin06.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin06t.png b/parts/django/docs/intro/_images/admin06t.png
deleted file mode 100644
index fb65e0a..0000000
--- a/parts/django/docs/intro/_images/admin06t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin07.png b/parts/django/docs/intro/_images/admin07.png
deleted file mode 100644
index b21022f..0000000
--- a/parts/django/docs/intro/_images/admin07.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin08.png b/parts/django/docs/intro/_images/admin08.png
deleted file mode 100644
index ddac57e..0000000
--- a/parts/django/docs/intro/_images/admin08.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin08t.png b/parts/django/docs/intro/_images/admin08t.png
deleted file mode 100644
index 83773bb..0000000
--- a/parts/django/docs/intro/_images/admin08t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin09.png b/parts/django/docs/intro/_images/admin09.png
deleted file mode 100644
index ba7de1b..0000000
--- a/parts/django/docs/intro/_images/admin09.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin10.png b/parts/django/docs/intro/_images/admin10.png
deleted file mode 100644
index 07a9bf3..0000000
--- a/parts/django/docs/intro/_images/admin10.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin11.png b/parts/django/docs/intro/_images/admin11.png
deleted file mode 100644
index 6c583fd..0000000
--- a/parts/django/docs/intro/_images/admin11.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin11t.png b/parts/django/docs/intro/_images/admin11t.png
deleted file mode 100644
index af792b8..0000000
--- a/parts/django/docs/intro/_images/admin11t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin12.png b/parts/django/docs/intro/_images/admin12.png
deleted file mode 100644
index aac5c0d..0000000
--- a/parts/django/docs/intro/_images/admin12.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin13.png b/parts/django/docs/intro/_images/admin13.png
deleted file mode 100644
index 49a5950..0000000
--- a/parts/django/docs/intro/_images/admin13.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin13t.png b/parts/django/docs/intro/_images/admin13t.png
deleted file mode 100644
index 7dc01e1..0000000
--- a/parts/django/docs/intro/_images/admin13t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin14.png b/parts/django/docs/intro/_images/admin14.png
deleted file mode 100644
index b1f4a54..0000000
--- a/parts/django/docs/intro/_images/admin14.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/_images/admin14t.png b/parts/django/docs/intro/_images/admin14t.png
deleted file mode 100644
index 86c3acc..0000000
--- a/parts/django/docs/intro/_images/admin14t.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/intro/index.txt b/parts/django/docs/intro/index.txt
deleted file mode 100644
index bc61be7..0000000
--- a/parts/django/docs/intro/index.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-Getting started
-===============
-
-New to Django? Or to Web development in general? Well, you came to the right
-place: read this material to quickly get up and running.
-
-.. toctree::
- :maxdepth: 1
-
- overview
- install
- tutorial01
- tutorial02
- tutorial03
- tutorial04
- whatsnext
-
-.. seealso::
-
- If you're new to Python_, you might want to start by getting an idea of what
- the language is like. Django is 100% Python, so if you've got minimal
- comfort with Python you'll probably get a lot more out of Django.
-
- If you're new to programming entirely, you might want to start with this
- `list of Python resources for non-programmers`_
-
- If you already know a few other languages and want to get up to speed with
- Python quickly, we recommend `Dive Into Python`_ (also available in a
- `dead-tree version`_). If that's not quite your style, there are quite
- a few other `books about Python`_.
-
- .. _python: http://python.org/
- .. _list of Python resources for non-programmers: http://wiki.python.org/moin/BeginnersGuide/NonProgrammers
- .. _dive into python: http://diveintopython.org/
- .. _dead-tree version: http://www.amazon.com/exec/obidos/ASIN/1590593561/ref=nosim/jacobian20
- .. _books about Python: http://wiki.python.org/moin/PythonBooks \ No newline at end of file
diff --git a/parts/django/docs/intro/install.txt b/parts/django/docs/intro/install.txt
deleted file mode 100644
index 327686f..0000000
--- a/parts/django/docs/intro/install.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-Quick install guide
-===================
-
-Before you can use Django, you'll need to get it installed. We have a
-:doc:`complete installation guide </topics/install>` that covers all the
-possibilities; this guide will guide you to a simple, minimal installation
-that'll work while you walk through the introduction.
-
-Install Python
---------------
-
-Being a Python Web framework, Django requires Python. It works with any Python
-version from 2.4 to 2.7 (due to backwards
-incompatibilities in Python 3.0, Django does not currently work with
-Python 3.0; see :doc:`the Django FAQ </faq/install>` for more
-information on supported Python versions and the 3.0 transition), but we recommend installing Python 2.5 or later. If you do so, you won't need to set up a database just yet: Python 2.5 or later includes a lightweight database called SQLite_.
-
-.. _sqlite: http://sqlite.org/
-
-Get Python at http://www.python.org. If you're running Linux or Mac OS X, you
-probably already have it installed.
-
-.. admonition:: Django on Jython
-
- If you use Jython_ (a Python implementation for the Java platform), you'll
- need to follow a few additional steps. See :doc:`/howto/jython` for details.
-
-.. _jython: http://www.jython.org/
-
-You can verify that Python's installed by typing ``python`` from your shell; you should see something like::
-
- Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17)
- [GCC 4.0.1 (Apple Inc. build 5465)] on darwin
- Type "help", "copyright", "credits" or "license" for more information.
- >>>
-
-Set up a database
------------------
-
-If you installed Python 2.5 or later, you can skip this step for now.
-
-If not, or if you'd like to work with a "large" database engine like PostgreSQL,
-MySQL, or Oracle, consult the :ref:`database installation information
-<database-installation>`.
-
-Remove any old versions of Django
----------------------------------
-
-If you are upgrading your installation of Django from a previous version, you
-will need to :ref:`uninstall the old Django version before installing the new
-version <removing-old-versions-of-django>`.
-
-Install Django
---------------
-
-You've got three easy options to install Django:
-
- * Install a version of Django :doc:`provided by your operating system
- distribution </misc/distributions>`. This is the quickest option for those
- who have operating systems that distribute Django.
-
- * :ref:`Install an official release <installing-official-release>`. This
- is the best approach for users who want a stable version number and aren't
- concerned about running a slightly older version of Django.
-
- * :ref:`Install the latest development version
- <installing-development-version>`. This is best for users who want the
- latest-and-greatest features and aren't afraid of running brand-new code.
-
-.. admonition:: Always refer to the documentation that corresponds to the
- version of Django you're using!
-
- If you do either of the first two steps, keep an eye out for parts of the
- documentation marked **new in development version**. That phrase flags
- features that are only available in development versions of Django, and
- they likely won't work with an official release.
-
-That's it!
-----------
-
-That's it -- you can now :doc:`move onto the tutorial </intro/tutorial01>`.
-
-
-
diff --git a/parts/django/docs/intro/overview.txt b/parts/django/docs/intro/overview.txt
deleted file mode 100644
index 34572a6..0000000
--- a/parts/django/docs/intro/overview.txt
+++ /dev/null
@@ -1,324 +0,0 @@
-==================
-Django at a glance
-==================
-
-Because Django was developed in a fast-paced newsroom environment, it was
-designed to make common Web-development tasks fast and easy. Here's an informal
-overview of how to write a database-driven Web app with Django.
-
-The goal of this document is to give you enough technical specifics to
-understand how Django works, but this isn't intended to be a tutorial or
-reference -- but we've got both! When you're ready to start a project, you can
-:doc:`start with the tutorial </intro/tutorial01>` or :doc:`dive right into more
-detailed documentation </topics/index>`.
-
-Design your model
-=================
-
-Although you can use Django without a database, it comes with an
-object-relational mapper in which you describe your database layout in Python
-code.
-
-The :doc:`data-model syntax </topics/db/models>` offers many rich ways of
-representing your models -- so far, it's been solving two years' worth of
-database-schema problems. Here's a quick example, which might be saved in
-the file ``mysite/news/models.py``::
-
- class Reporter(models.Model):
- full_name = models.CharField(max_length=70)
-
- def __unicode__(self):
- return self.full_name
-
- class Article(models.Model):
- pub_date = models.DateTimeField()
- headline = models.CharField(max_length=200)
- content = models.TextField()
- reporter = models.ForeignKey(Reporter)
-
- def __unicode__(self):
- return self.headline
-
-Install it
-==========
-
-Next, run the Django command-line utility to create the database tables
-automatically:
-
-.. code-block:: bash
-
- manage.py syncdb
-
-The :djadmin:`syncdb` command looks at all your available models and creates
-tables in your database for whichever tables don't already exist.
-
-Enjoy the free API
-==================
-
-With that, you've got a free, and rich, :doc:`Python API </topics/db/queries>` to
-access your data. The API is created on the fly, no code generation necessary::
-
- # Import the models we created from our "news" app
- >>> from news.models import Reporter, Article
-
- # No reporters are in the system yet.
- >>> Reporter.objects.all()
- []
-
- # Create a new Reporter.
- >>> r = Reporter(full_name='John Smith')
-
- # Save the object into the database. You have to call save() explicitly.
- >>> r.save()
-
- # Now it has an ID.
- >>> r.id
- 1
-
- # Now the new reporter is in the database.
- >>> Reporter.objects.all()
- [<Reporter: John Smith>]
-
- # Fields are represented as attributes on the Python object.
- >>> r.full_name
- 'John Smith'
-
- # Django provides a rich database lookup API.
- >>> Reporter.objects.get(id=1)
- <Reporter: John Smith>
- >>> Reporter.objects.get(full_name__startswith='John')
- <Reporter: John Smith>
- >>> Reporter.objects.get(full_name__contains='mith')
- <Reporter: John Smith>
- >>> Reporter.objects.get(id=2)
- Traceback (most recent call last):
- ...
- DoesNotExist: Reporter matching query does not exist.
-
- # Create an article.
- >>> from datetime import datetime
- >>> a = Article(pub_date=datetime.now(), headline='Django is cool',
- ... content='Yeah.', reporter=r)
- >>> a.save()
-
- # Now the article is in the database.
- >>> Article.objects.all()
- [<Article: Django is cool>]
-
- # Article objects get API access to related Reporter objects.
- >>> r = a.reporter
- >>> r.full_name
- 'John Smith'
-
- # And vice versa: Reporter objects get API access to Article objects.
- >>> r.article_set.all()
- [<Article: Django is cool>]
-
- # The API follows relationships as far as you need, performing efficient
- # JOINs for you behind the scenes.
- # This finds all articles by a reporter whose name starts with "John".
- >>> Article.objects.filter(reporter__full_name__startswith="John")
- [<Article: Django is cool>]
-
- # Change an object by altering its attributes and calling save().
- >>> r.full_name = 'Billy Goat'
- >>> r.save()
-
- # Delete an object with delete().
- >>> r.delete()
-
-A dynamic admin interface: it's not just scaffolding -- it's the whole house
-============================================================================
-
-Once your models are defined, Django can automatically create a professional,
-production ready :doc:`administrative interface </ref/contrib/admin/index>` -- a Web
-site that lets authenticated users add, change and delete objects. It's as easy
-as registering your model in the admin site::
-
- # In models.py...
-
- from django.db import models
-
- class Article(models.Model):
- pub_date = models.DateTimeField()
- headline = models.CharField(max_length=200)
- content = models.TextField()
- reporter = models.ForeignKey(Reporter)
-
-
- # In admin.py in the same directory...
-
- import models
- from django.contrib import admin
-
- admin.site.register(models.Article)
-
-The philosophy here is that your site is edited by a staff, or a client, or
-maybe just you -- and you don't want to have to deal with creating backend
-interfaces just to manage content.
-
-One typical workflow in creating Django apps is to create models and get the
-admin sites up and running as fast as possible, so your staff (or clients) can
-start populating data. Then, develop the way data is presented to the public.
-
-Design your URLs
-================
-
-A clean, elegant URL scheme is an important detail in a high-quality Web
-application. Django encourages beautiful URL design and doesn't put any cruft
-in URLs, like ``.php`` or ``.asp``.
-
-To design URLs for an app, you create a Python module called a :doc:`URLconf
-</topics/http/urls>`. A table of contents for your app, it contains a simple mapping
-between URL patterns and Python callback functions. URLconfs also serve to
-decouple URLs from Python code.
-
-Here's what a URLconf might look like for the ``Reporter``/``Article``
-example above::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- (r'^articles/(\d{4})/$', 'news.views.year_archive'),
- (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
- (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
- )
-
-The code above maps URLs, as simple regular expressions, to the location of
-Python callback functions ("views"). The regular expressions use parenthesis to
-"capture" values from the URLs. When a user requests a page, Django runs
-through each pattern, in order, and stops at the first one that matches the
-requested URL. (If none of them matches, Django calls a special-case 404 view.)
-This is blazingly fast, because the regular expressions are compiled at load
-time.
-
-Once one of the regexes matches, Django imports and calls the given view, which
-is a simple Python function. Each view gets passed a request object --
-which contains request metadata -- and the values captured in the regex.
-
-For example, if a user requested the URL "/articles/2005/05/39323/", Django
-would call the function ``news.views.article_detail(request,
-'2005', '05', '39323')``.
-
-Write your views
-================
-
-Each view is responsible for doing one of two things: Returning an
-:class:`~django.http.HttpResponse` object containing the content for the
-requested page, or raising an exception such as :class:`~django.http.Http404`.
-The rest is up to you.
-
-Generally, a view retrieves data according to the parameters, loads a template
-and renders the template with the retrieved data. Here's an example view for
-``year_archive`` from above::
-
- def year_archive(request, year):
- a_list = Article.objects.filter(pub_date__year=year)
- return render_to_response('news/year_archive.html', {'year': year, 'article_list': a_list})
-
-This example uses Django's :doc:`template system </topics/templates>`, which has
-several powerful features but strives to stay simple enough for non-programmers
-to use.
-
-Design your templates
-=====================
-
-The code above loads the ``news/year_archive.html`` template.
-
-Django has a template search path, which allows you to minimize redundancy among
-templates. In your Django settings, you specify a list of directories to check
-for templates. If a template doesn't exist in the first directory, it checks the
-second, and so on.
-
-Let's say the ``news/article_detail.html`` template was found. Here's what that
-might look like:
-
-.. code-block:: html+django
-
- {% extends "base.html" %}
-
- {% block title %}Articles for {{ year }}{% endblock %}
-
- {% block content %}
- <h1>Articles for {{ year }}</h1>
-
- {% for article in article_list %}
- <p>{{ article.headline }}</p>
- <p>By {{ article.reporter.full_name }}</p>
- <p>Published {{ article.pub_date|date:"F j, Y" }}</p>
- {% endfor %}
- {% endblock %}
-
-Variables are surrounded by double-curly braces. ``{{ article.headline }}``
-means "Output the value of the article's headline attribute." But dots aren't
-used only for attribute lookup: They also can do dictionary-key lookup, index
-lookup and function calls.
-
-Note ``{{ article.pub_date|date:"F j, Y" }}`` uses a Unix-style "pipe" (the "|"
-character). This is called a template filter, and it's a way to filter the value
-of a variable. In this case, the date filter formats a Python datetime object in
-the given format (as found in PHP's date function; yes, there is one good idea
-in PHP).
-
-You can chain together as many filters as you'd like. You can write custom
-filters. You can write custom template tags, which run custom Python code behind
-the scenes.
-
-Finally, Django uses the concept of "template inheritance": That's what the
-``{% extends "base.html" %}`` does. It means "First load the template called
-'base', which has defined a bunch of blocks, and fill the blocks with the
-following blocks." In short, that lets you dramatically cut down on redundancy
-in templates: each template has to define only what's unique to that template.
-
-Here's what the "base.html" template might look like:
-
-.. code-block:: html+django
-
- <html>
- <head>
- <title>{% block title %}{% endblock %}</title>
- </head>
- <body>
- <img src="sitelogo.gif" alt="Logo" />
- {% block content %}{% endblock %}
- </body>
- </html>
-
-Simplistically, it defines the look-and-feel of the site (with the site's logo),
-and provides "holes" for child templates to fill. This makes a site redesign as
-easy as changing a single file -- the base template.
-
-It also lets you create multiple versions of a site, with different base
-templates, while reusing child templates. Django's creators have used this
-technique to create strikingly different cell-phone editions of sites -- simply
-by creating a new base template.
-
-Note that you don't have to use Django's template system if you prefer another
-system. While Django's template system is particularly well-integrated with
-Django's model layer, nothing forces you to use it. For that matter, you don't
-have to use Django's database API, either. You can use another database
-abstraction layer, you can read XML files, you can read files off disk, or
-anything you want. Each piece of Django -- models, views, templates -- is
-decoupled from the next.
-
-This is just the surface
-========================
-
-This has been only a quick overview of Django's functionality. Some more useful
-features:
-
- * A :doc:`caching framework </topics/cache>` that integrates with memcached
- or other backends.
-
- * A :doc:`syndication framework </ref/contrib/syndication>` that makes
- creating RSS and Atom feeds as easy as writing a small Python class.
-
- * More sexy automatically-generated admin features -- this overview barely
- scratched the surface.
-
-The next obvious steps are for you to `download Django`_, read :doc:`the
-tutorial </intro/tutorial01>` and join `the community`_. Thanks for your
-interest!
-
-.. _download Django: http://www.djangoproject.com/download/
-.. _the community: http://www.djangoproject.com/community/
diff --git a/parts/django/docs/intro/tutorial01.txt b/parts/django/docs/intro/tutorial01.txt
deleted file mode 100644
index 560070b..0000000
--- a/parts/django/docs/intro/tutorial01.txt
+++ /dev/null
@@ -1,690 +0,0 @@
-=====================================
-Writing your first Django app, part 1
-=====================================
-
-Let's learn by example.
-
-Throughout this tutorial, we'll walk you through the creation of a basic
-poll application.
-
-It'll consist of two parts:
-
- * A public site that lets people view polls and vote in them.
- * An admin site that lets you add, change and delete polls.
-
-We'll assume you have :doc:`Django installed </intro/install>` already. You can
-tell Django is installed by running the Python interactive interpreter and
-typing ``import django``. If that command runs successfully, with no errors,
-Django is installed.
-
-.. admonition:: Where to get help:
-
- If you're having trouble going through this tutorial, please post a message
- to `django-users`__ or drop by `#django on irc.freenode.net`__ to chat
- with other Django users who might be able to help.
-
-__ http://groups.google.com/group/django-users
-__ irc://irc.freenode.net/django
-
-Creating a project
-==================
-
-If this is your first time using Django, you'll have to take care of some
-initial setup. Namely, you'll need to auto-generate some code that establishes a
-Django :term:`project` -- a collection of settings for an instance of Django,
-including database configuration, Django-specific options and
-application-specific settings.
-
-From the command line, ``cd`` into a directory where you'd like to store your
-code, then run the command ``django-admin.py startproject mysite``. This will
-create a ``mysite`` directory in your current directory.
-
-.. admonition:: Script name may differ in distribution packages
-
- If you installed Django using a Linux distribution's package manager
- (e.g. apt-get or yum) ``django-admin.py`` may have been renamed to
- ``django-admin``. You may continue through this documentation by omitting
- ``.py`` from each command.
-
-.. admonition:: Mac OS X permissions
-
- If you're using Mac OS X, you may see the message "permission denied" when
- you try to run ``django-admin.py startproject``. This is because, on
- Unix-based systems like OS X, a file must be marked as "executable" before it
- can be run as a program. To do this, open Terminal.app and navigate (using
- the ``cd`` command) to the directory where :doc:`django-admin.py
- </ref/django-admin>` is installed, then run the command
- ``chmod +x django-admin.py``.
-
-.. note::
-
- You'll need to avoid naming projects after built-in Python or Django
- components. In particular, this means you should avoid using names like
- ``django`` (which will conflict with Django itself) or ``test`` (which
- conflicts with a built-in Python package).
-
-:doc:`django-admin.py </ref/django-admin>` should be on your system path if you
-installed Django via ``python setup.py``. If it's not on your path, you can find
-it in ``site-packages/django/bin``, where ```site-packages``` is a directory
-within your Python installation. Consider symlinking to :doc:`django-admin.py
-</ref/django-admin>` from some place on your path, such as
-:file:`/usr/local/bin`.
-
-.. admonition:: Where should this code live?
-
- If your background is in PHP, you're probably used to putting code under the
- Web server's document root (in a place such as ``/var/www``). With Django,
- you don't do that. It's not a good idea to put any of this Python code
- within your Web server's document root, because it risks the possibility
- that people may be able to view your code over the Web. That's not good for
- security.
-
- Put your code in some directory **outside** of the document root, such as
- :file:`/home/mycode`.
-
-Let's look at what :djadmin:`startproject` created::
-
- mysite/
- __init__.py
- manage.py
- settings.py
- urls.py
-
-These files are:
-
- * :file:`__init__.py`: An empty file that tells Python that this directory
- should be considered a Python package. (Read `more about packages`_ in the
- official Python docs if you're a Python beginner.)
-
- * :file:`manage.py`: A command-line utility that lets you interact with this
- Django project in various ways. You can read all the details about
- :file:`manage.py` in :doc:`/ref/django-admin`.
-
- * :file:`settings.py`: Settings/configuration for this Django project.
- :doc:`/topics/settings` will tell you all about how settings work.
-
- * :file:`urls.py`: The URL declarations for this Django project; a "table of
- contents" of your Django-powered site. You can read more about URLs in
- :doc:`/topics/http/urls`.
-
-.. _more about packages: http://docs.python.org/tutorial/modules.html#packages
-
-The development server
-----------------------
-
-Let's verify this worked. Change into the :file:`mysite` directory, if you
-haven't already, and run the command ``python manage.py runserver``. You'll see
-the following output on the command line::
-
- Validating models...
- 0 errors found.
-
- Django version 1.0, using settings 'mysite.settings'
- Development server is running at http://127.0.0.1:8000/
- Quit the server with CONTROL-C.
-
-You've started the Django development server, a lightweight Web server written
-purely in Python. We've included this with Django so you can develop things
-rapidly, without having to deal with configuring a production server -- such as
-Apache -- until you're ready for production.
-
-Now's a good time to note: DON'T use this server in anything resembling a
-production environment. It's intended only for use while developing. (We're in
-the business of making Web frameworks, not Web servers.)
-
-Now that the server's running, visit http://127.0.0.1:8000/ with your Web
-browser. You'll see a "Welcome to Django" page, in pleasant, light-blue pastel.
-It worked!
-
-.. admonition:: Changing the port
-
- By default, the :djadmin:`runserver` command starts the development server
- on the internal IP at port 8000.
-
- If you want to change the server's port, pass
- it as a command-line argument. For instance, this command starts the server
- on port 8080:
-
- .. code-block:: bash
-
- python manage.py runserver 8080
-
- If you want to change the server's IP, pass it along with the port. So to
- listen on all public IPs (useful if you want to show off your work on other
- computers), use:
-
- .. code-block:: bash
-
- python manage.py runserver 0.0.0.0:8000
-
- Full docs for the development server can be found in the
- :djadmin:`runserver` reference.
-
-Database setup
---------------
-
-Now, edit :file:`settings.py`. It's a normal Python module with
-module-level variables representing Django settings. Change the
-following keys in the :setting:`DATABASES` ``'default'`` item to match
-your databases connection settings.
-
- * :setting:`ENGINE` -- Either
- ``'django.db.backends.postgresql_psycopg2'``,
- ``'django.db.backends.mysql'`` or
- ``'django.db.backends.sqlite3'``. Other backends are
- :setting:`also available <ENGINE>`.
-
- * :setting:`NAME` -- The name of your database. If you're using
- SQLite, the database will be a file on your computer; in that
- case, :setting:`NAME` should be the full absolute path,
- including filename, of that file. If the file doesn't exist, it
- will automatically be created when you synchronize the database
- for the first time (see below).
-
- When specifying the path, always use forward slashes, even on
- Windows (e.g. ``C:/homes/user/mysite/sqlite3.db``).
-
- * :setting:`USER` -- Your database username (not used for SQLite).
-
- * :setting:`PASSWORD` -- Your database password (not used for
- SQLite).
-
- * :setting:`HOST` -- The host your database is on. Leave this as
- an empty string if your database server is on the same physical
- machine (not used for SQLite).
-
-If you're new to databases, we recommend simply using SQLite (by
-setting :setting:`ENGINE` to ``'django.db.backends.sqlite3'``). SQLite
-is included as part of Python 2.5 and later, so you won't need to
-install anything else.
-
-.. note::
-
- If you're using PostgreSQL or MySQL, make sure you've created a database by
- this point. Do that with "``CREATE DATABASE database_name;``" within your
- database's interactive prompt.
-
- If you're using SQLite, you don't need to create anything beforehand - the
- database file will be created automatically when it is needed.
-
-While you're editing :file:`settings.py`, take note of the
-:setting:`INSTALLED_APPS` setting towards the bottom of the file. That variable
-holds the names of all Django applications that are activated in this Django
-instance. Apps can be used in multiple projects, and you can package and
-distribute them for use by others in their projects.
-
-By default, :setting:`INSTALLED_APPS` contains the following apps, all of which
-come with Django:
-
- * :mod:`django.contrib.auth` -- An authentication system.
-
- * :mod:`django.contrib.contenttypes` -- A framework for content types.
-
- * :mod:`django.contrib.sessions` -- A session framework.
-
- * :mod:`django.contrib.sites` -- A framework for managing multiple sites
- with one Django installation.
-
- * :mod:`django.contrib.messages` -- A messaging framework.
-
-These applications are included by default as a convenience for the common case.
-
-Each of these applications makes use of at least one database table, though,
-so we need to create the tables in the database before we can use them. To do
-that, run the following command:
-
-.. code-block:: bash
-
- python manage.py syncdb
-
-The :djadmin:`syncdb` command looks at the :setting:`INSTALLED_APPS` setting and
-creates any necessary database tables according to the database settings in your
-:file:`settings.py` file. You'll see a message for each database table it
-creates, and you'll get a prompt asking you if you'd like to create a superuser
-account for the authentication system. Go ahead and do that.
-
-If you're interested, run the command-line client for your database and type
-``\dt`` (PostgreSQL), ``SHOW TABLES;`` (MySQL), or ``.schema`` (SQLite) to
-display the tables Django created.
-
-.. admonition:: For the minimalists
-
- Like we said above, the default applications are included for the common
- case, but not everybody needs them. If you don't need any or all of them,
- feel free to comment-out or delete the appropriate line(s) from
- :setting:`INSTALLED_APPS` before running :djadmin:`syncdb`. The
- :djadmin:`syncdb` command will only create tables for apps in
- :setting:`INSTALLED_APPS`.
-
-.. _creating-models:
-
-Creating models
-===============
-
-Now that your environment -- a "project" -- is set up, you're set to start
-doing work.
-
-Each application you write in Django consists of a Python package, somewhere
-on your `Python path`_, that follows a certain convention. Django comes with a
-utility that automatically generates the basic directory structure of an app,
-so you can focus on writing code rather than creating directories.
-
-.. admonition:: Projects vs. apps
-
- What's the difference between a project and an app? An app is a Web
- application that does something -- e.g., a Weblog system, a database of
- public records or a simple poll app. A project is a collection of
- configuration and apps for a particular Web site. A project can contain
- multiple apps. An app can be in multiple projects.
-
-Your apps can live anywhere on your `Python path`_. In this tutorial, we'll
-create our poll app in the :file:`mysite` directory for simplicity.
-
-To create your app, make sure you're in the :file:`mysite` directory and type
-this command:
-
-.. code-block:: bash
-
- python manage.py startapp polls
-
-That'll create a directory :file:`polls`, which is laid out like this::
-
- polls/
- __init__.py
- models.py
- tests.py
- views.py
-
-This directory structure will house the poll application.
-
-The first step in writing a database Web app in Django is to define your models
--- essentially, your database layout, with additional metadata.
-
-.. admonition:: Philosophy
-
- A model is the single, definitive source of data about your data. It contains
- the essential fields and behaviors of the data you're storing. Django follows
- the :ref:`DRY Principle <dry>`. The goal is to define your data model in one
- place and automatically derive things from it.
-
-In our simple poll app, we'll create two models: polls and choices. A poll has
-a question and a publication date. A choice has two fields: the text of the
-choice and a vote tally. Each choice is associated with a poll.
-
-These concepts are represented by simple Python classes. Edit the
-:file:`polls/models.py` file so it looks like this::
-
- from django.db import models
-
- class Poll(models.Model):
- question = models.CharField(max_length=200)
- pub_date = models.DateTimeField('date published')
-
- class Choice(models.Model):
- poll = models.ForeignKey(Poll)
- choice = models.CharField(max_length=200)
- votes = models.IntegerField()
-
-The code is straightforward. Each model is represented by a class that
-subclasses :class:`django.db.models.Model`. Each model has a number of class
-variables, each of which represents a database field in the model.
-
-Each field is represented by an instance of a :class:`~django.db.models.Field`
-class -- e.g., :class:`~django.db.models.CharField` for character fields and
-:class:`~django.db.models.DateTimeField` for datetimes. This tells Django what
-type of data each field holds.
-
-The name of each :class:`~django.db.models.Field` instance (e.g. ``question`` or
-``pub_date`` ) is the field's name, in machine-friendly format. You'll use this
-value in your Python code, and your database will use it as the column name.
-
-You can use an optional first positional argument to a
-:class:`~django.db.models.Field` to designate a human-readable name. That's used
-in a couple of introspective parts of Django, and it doubles as documentation.
-If this field isn't provided, Django will use the machine-readable name. In this
-example, we've only defined a human-readable name for ``Poll.pub_date``. For all
-other fields in this model, the field's machine-readable name will suffice as
-its human-readable name.
-
-Some :class:`~django.db.models.Field` classes have required elements.
-:class:`~django.db.models.CharField`, for example, requires that you give it a
-:attr:`~django.db.models.Field.max_length`. That's used not only in the database
-schema, but in validation, as we'll soon see.
-
-Finally, note a relationship is defined, using
-:class:`~django.db.models.ForeignKey`. That tells Django each Choice is related
-to a single Poll. Django supports all the common database relationships:
-many-to-ones, many-to-manys and one-to-ones.
-
-.. _`Python path`: http://docs.python.org/tutorial/modules.html#the-module-search-path
-
-Activating models
-=================
-
-That small bit of model code gives Django a lot of information. With it, Django
-is able to:
-
- * Create a database schema (``CREATE TABLE`` statements) for this app.
- * Create a Python database-access API for accessing Poll and Choice objects.
-
-But first we need to tell our project that the ``polls`` app is installed.
-
-.. admonition:: Philosophy
-
- Django apps are "pluggable": You can use an app in multiple projects, and
- you can distribute apps, because they don't have to be tied to a given
- Django installation.
-
-Edit the :file:`settings.py` file again, and change the
-:setting:`INSTALLED_APPS` setting to include the string ``'polls'``. So
-it'll look like this::
-
- INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'polls'
- )
-
-Now Django knows to include the ``polls`` app. Let's run another
-command:
-
-.. code-block:: bash
-
- python manage.py sql polls
-
-You should see something similar to the following (the ``CREATE TABLE`` SQL
-statements for the polls app):
-
-.. code-block:: sql
-
- BEGIN;
- CREATE TABLE "polls_poll" (
- "id" serial NOT NULL PRIMARY KEY,
- "question" varchar(200) NOT NULL,
- "pub_date" timestamp with time zone NOT NULL
- );
- CREATE TABLE "polls_choice" (
- "id" serial NOT NULL PRIMARY KEY,
- "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),
- "choice" varchar(200) NOT NULL,
- "votes" integer NOT NULL
- );
- COMMIT;
-
-Note the following:
-
- * The exact output will vary depending on the database you are using.
-
- * Table names are automatically generated by combining the name of the app
- (``polls``) and the lowercase name of the model -- ``poll`` and
- ``choice``. (You can override this behavior.)
-
- * Primary keys (IDs) are added automatically. (You can override this, too.)
-
- * By convention, Django appends ``"_id"`` to the foreign key field name.
- Yes, you can override this, as well.
-
- * The foreign key relationship is made explicit by a ``REFERENCES``
- statement.
-
- * It's tailored to the database you're using, so database-specific field
- types such as ``auto_increment`` (MySQL), ``serial`` (PostgreSQL), or
- ``integer primary key`` (SQLite) are handled for you automatically. Same
- goes for quoting of field names -- e.g., using double quotes or single
- quotes. The author of this tutorial runs PostgreSQL, so the example
- output is in PostgreSQL syntax.
-
- * The :djadmin:`sql` command doesn't actually run the SQL in your database -
- it just prints it to the screen so that you can see what SQL Django thinks
- is required. If you wanted to, you could copy and paste this SQL into your
- database prompt. However, as we will see shortly, Django provides an
- easier way of committing the SQL to the database.
-
-If you're interested, also run the following commands:
-
- * :djadmin:`python manage.py validate <validate>` -- Checks for any errors
- in the construction of your models.
-
- * :djadmin:`python manage.py sqlcustom polls <sqlcustom>` -- Outputs any
- :ref:`custom SQL statements <initial-sql>` (such as table modifications or
- constraints) that are defined for the application.
-
- * :djadmin:`python manage.py sqlclear polls <sqlclear>` -- Outputs the
- necessary ``DROP TABLE`` statements for this app, according to which
- tables already exist in your database (if any).
-
- * :djadmin:`python manage.py sqlindexes polls <sqlindexes>` -- Outputs the
- ``CREATE INDEX`` statements for this app.
-
- * :djadmin:`python manage.py sqlall polls <sqlall>` -- A combination of all
- the SQL from the :djadmin:`sql`, :djadmin:`sqlcustom`, and
- :djadmin:`sqlindexes` commands.
-
-Looking at the output of those commands can help you understand what's actually
-happening under the hood.
-
-Now, run :djadmin:`syncdb` again to create those model tables in your database:
-
-.. code-block:: bash
-
- python manage.py syncdb
-
-The :djadmin:`syncdb` command runs the sql from 'sqlall' on your database for
-all apps in :setting:`INSTALLED_APPS` that don't already exist in your database.
-This creates all the tables, initial data and indexes for any apps you have
-added to your project since the last time you ran syncdb. :djadmin:`syncdb` can
-be called as often as you like, and it will only ever create the tables that
-don't exist.
-
-Read the :doc:`django-admin.py documentation </ref/django-admin>` for full
-information on what the ``manage.py`` utility can do.
-
-Playing with the API
-====================
-
-Now, let's hop into the interactive Python shell and play around with the free
-API Django gives you. To invoke the Python shell, use this command:
-
-.. code-block:: bash
-
- python manage.py shell
-
-We're using this instead of simply typing "python", because ``manage.py`` sets
-up the project's environment for you. "Setting up the environment" involves two
-things:
-
- * Putting ``polls`` on ``sys.path``. For flexibility, several pieces of
- Django refer to projects in Python dotted-path notation (e.g.
- ``'polls.models'``). In order for this to work, the ``polls``
- package has to be on ``sys.path``.
-
- We've already seen one example of this: the :setting:`INSTALLED_APPS`
- setting is a list of packages in dotted-path notation.
-
- * Setting the ``DJANGO_SETTINGS_MODULE`` environment variable, which gives
- Django the path to your ``settings.py`` file.
-
-.. admonition:: Bypassing manage.py
-
- If you'd rather not use ``manage.py``, no problem. Just make sure ``mysite``
- and ``polls`` are at the root level on the Python path (i.e., ``import mysite``
- and ``import polls`` work) and set the ``DJANGO_SETTINGS_MODULE`` environment
- variable to ``mysite.settings``.
-
- For more information on all of this, see the :doc:`django-admin.py
- documentation </ref/django-admin>`.
-
-Once you're in the shell, explore the :doc:`database API </topics/db/queries>`::
-
- >>> from polls.models import Poll, Choice # Import the model classes we just wrote.
-
- # No polls are in the system yet.
- >>> Poll.objects.all()
- []
-
- # Create a new Poll.
- >>> import datetime
- >>> p = Poll(question="What's up?", pub_date=datetime.datetime.now())
-
- # Save the object into the database. You have to call save() explicitly.
- >>> p.save()
-
- # Now it has an ID. Note that this might say "1L" instead of "1", depending
- # on which database you're using. That's no biggie; it just means your
- # database backend prefers to return integers as Python long integer
- # objects.
- >>> p.id
- 1
-
- # Access database columns via Python attributes.
- >>> p.question
- "What's up?"
- >>> p.pub_date
- datetime.datetime(2007, 7, 15, 12, 00, 53)
-
- # Change values by changing the attributes, then calling save().
- >>> p.pub_date = datetime.datetime(2007, 4, 1, 0, 0)
- >>> p.save()
-
- # objects.all() displays all the polls in the database.
- >>> Poll.objects.all()
- [<Poll: Poll object>]
-
-
-Wait a minute. ``<Poll: Poll object>`` is, utterly, an unhelpful representation
-of this object. Let's fix that by editing the polls model (in the
-``polls/models.py`` file) and adding a
-:meth:`~django.db.models.Model.__unicode__` method to both ``Poll`` and
-``Choice``::
-
- class Poll(models.Model):
- # ...
- def __unicode__(self):
- return self.question
-
- class Choice(models.Model):
- # ...
- def __unicode__(self):
- return self.choice
-
-It's important to add :meth:`~django.db.models.Model.__unicode__` methods to
-your models, not only for your own sanity when dealing with the interactive
-prompt, but also because objects' representations are used throughout Django's
-automatically-generated admin.
-
-.. admonition:: Why :meth:`~django.db.models.Model.__unicode__` and not
- :meth:`~django.db.models.Model.__str__`?
-
- If you're familiar with Python, you might be in the habit of adding
- :meth:`~django.db.models.Model.__str__` methods to your classes, not
- :meth:`~django.db.models.Model.__unicode__` methods. We use
- :meth:`~django.db.models.Model.__unicode__` here because Django models deal
- with Unicode by default. All data stored in your database is converted to
- Unicode when it's returned.
-
- Django models have a default :meth:`~django.db.models.Model.__str__` method
- that calls :meth:`~django.db.models.Model.__unicode__` and converts the
- result to a UTF-8 bytestring. This means that ``unicode(p)`` will return a
- Unicode string, and ``str(p)`` will return a normal string, with characters
- encoded as UTF-8.
-
- If all of this is jibberish to you, just remember to add
- :meth:`~django.db.models.Model.__unicode__` methods to your models. With any
- luck, things should Just Work for you.
-
-Note these are normal Python methods. Let's add a custom method, just for
-demonstration::
-
- import datetime
- # ...
- class Poll(models.Model):
- # ...
- def was_published_today(self):
- return self.pub_date.date() == datetime.date.today()
-
-Note the addition of ``import datetime`` to reference Python's standard
-``datetime`` module.
-
-Save these changes and start a new Python interactive shell by running
-``python manage.py shell`` again::
-
- >>> from polls.models import Poll, Choice
-
- # Make sure our __unicode__() addition worked.
- >>> Poll.objects.all()
- [<Poll: What's up?>]
-
- # Django provides a rich database lookup API that's entirely driven by
- # keyword arguments.
- >>> Poll.objects.filter(id=1)
- [<Poll: What's up?>]
- >>> Poll.objects.filter(question__startswith='What')
- [<Poll: What's up?>]
-
- # Get the poll whose year is 2007.
- >>> Poll.objects.get(pub_date__year=2007)
- <Poll: What's up?>
-
- >>> Poll.objects.get(id=2)
- Traceback (most recent call last):
- ...
- DoesNotExist: Poll matching query does not exist.
-
- # Lookup by a primary key is the most common case, so Django provides a
- # shortcut for primary-key exact lookups.
- # The following is identical to Poll.objects.get(id=1).
- >>> Poll.objects.get(pk=1)
- <Poll: What's up?>
-
- # Make sure our custom method worked.
- >>> p = Poll.objects.get(pk=1)
- >>> p.was_published_today()
- False
-
- # Give the Poll a couple of Choices. The create call constructs a new
- # choice object, does the INSERT statement, adds the choice to the set
- # of available choices and returns the new Choice object. Django creates
- # a set to hold the "other side" of a ForeignKey relation
- # (e.g. a poll's choices) which can be accessed via the API.
- >>> p = Poll.objects.get(pk=1)
-
- # Display any choices from the related object set -- none so far.
- >>> p.choice_set.all()
- []
-
- # Create three choices.
- >>> p.choice_set.create(choice='Not much', votes=0)
- <Choice: Not much>
- >>> p.choice_set.create(choice='The sky', votes=0)
- <Choice: The sky>
- >>> c = p.choice_set.create(choice='Just hacking again', votes=0)
-
- # Choice objects have API access to their related Poll objects.
- >>> c.poll
- <Poll: What's up?>
-
- # And vice versa: Poll objects get access to Choice objects.
- >>> p.choice_set.all()
- [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
- >>> p.choice_set.count()
- 3
-
- # The API automatically follows relationships as far as you need.
- # Use double underscores to separate relationships.
- # This works as many levels deep as you want; there's no limit.
- # Find all Choices for any poll whose pub_date is in 2007.
- >>> Choice.objects.filter(poll__pub_date__year=2007)
- [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
-
- # Let's delete one of the choices. Use delete() for that.
- >>> c = p.choice_set.filter(choice__startswith='Just hacking')
- >>> c.delete()
-
-For more information on model relations, see :doc:`Accessing related objects
-</ref/models/relations>`. For full details on the database API, see our
-:doc:`Database API reference </topics/db/queries>`.
-
-When you're comfortable with the API, read :doc:`part 2 of this tutorial
-</intro/tutorial02>` to get Django's automatic admin working.
diff --git a/parts/django/docs/intro/tutorial02.txt b/parts/django/docs/intro/tutorial02.txt
deleted file mode 100644
index c80d87d..0000000
--- a/parts/django/docs/intro/tutorial02.txt
+++ /dev/null
@@ -1,465 +0,0 @@
-=====================================
-Writing your first Django app, part 2
-=====================================
-
-This tutorial begins where :doc:`Tutorial 1 </intro/tutorial01>` left off. We're
-continuing the Web-poll application and will focus on Django's
-automatically-generated admin site.
-
-.. admonition:: Philosophy
-
- Generating admin sites for your staff or clients to add, change and delete
- content is tedious work that doesn't require much creativity. For that
- reason, Django entirely automates creation of admin interfaces for models.
-
- Django was written in a newsroom environment, with a very clear separation
- between "content publishers" and the "public" site. Site managers use the
- system to add news stories, events, sports scores, etc., and that content is
- displayed on the public site. Django solves the problem of creating a
- unified interface for site administrators to edit content.
-
- The admin isn't necessarily intended to be used by site visitors; it's for
- site managers.
-
-Activate the admin site
-=======================
-
-The Django admin site is not activated by default -- it's an opt-in thing. To
-activate the admin site for your installation, do these three things:
-
- * Add ``"django.contrib.admin"`` to your :setting:`INSTALLED_APPS` setting.
-
- * Run ``python manage.py syncdb``. Since you have added a new application
- to :setting:`INSTALLED_APPS`, the database tables need to be updated.
-
- * Edit your ``mysite/urls.py`` file and uncomment the lines that reference
- the admin -- there are three lines in total to uncomment. This file is a
- URLconf; we'll dig into URLconfs in the next tutorial. For now, all you
- need to know is that it maps URL roots to applications. In the end, you
- should have a ``urls.py`` file that looks like this:
-
- .. versionchanged:: 1.1
- The method for adding admin urls has changed in Django 1.1.
-
- .. parsed-literal::
-
- from django.conf.urls.defaults import *
-
- # Uncomment the next two lines to enable the admin:
- **from django.contrib import admin**
- **admin.autodiscover()**
-
- urlpatterns = patterns('',
- # Example:
- # (r'^mysite/', include('mysite.foo.urls')),
-
- # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
- # to INSTALLED_APPS to enable admin documentation:
- # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
- # Uncomment the next line to enable the admin:
- **(r'^admin/', include(admin.site.urls)),**
- )
-
- (The bold lines are the ones that needed to be uncommented.)
-
-Start the development server
-============================
-
-Let's start the development server and explore the admin site.
-
-Recall from Tutorial 1 that you start the development server like so:
-
-.. code-block:: bash
-
- python manage.py runserver
-
-Now, open a Web browser and go to "/admin/" on your local domain -- e.g.,
-http://127.0.0.1:8000/admin/. You should see the admin's login screen:
-
-.. image:: _images/admin01.png
- :alt: Django admin login screen
-
-Enter the admin site
-====================
-
-Now, try logging in. (You created a superuser account in the first part of this
-tutorial, remember? If you didn't create one or forgot the password you can
-:ref:`create another one <topics-auth-creating-superusers>`.) You should see
-the Django admin index page:
-
-.. image:: _images/admin02t.png
- :alt: Django admin index page
-
-You should see a few other types of editable content, including groups, users
-and sites. These are core features Django ships with by default.
-
-Make the poll app modifiable in the admin
-=========================================
-
-But where's our poll app? It's not displayed on the admin index page.
-
-Just one thing to do: We need to tell the admin that ``Poll``
-objects have an admin interface. To do this, create a file called
-``admin.py`` in your ``polls`` directory, and edit it to look like this::
-
- from polls.models import Poll
- from django.contrib import admin
-
- admin.site.register(Poll)
-
-You'll need to restart the development server to see your changes. Normally,
-the server auto-reloads code every time you modify a file, but the action of
-creating a new file doesn't trigger the auto-reloading logic.
-
-Explore the free admin functionality
-====================================
-
-Now that we've registered ``Poll``, Django knows that it should be displayed on
-the admin index page:
-
-.. image:: _images/admin03t.png
- :alt: Django admin index page, now with polls displayed
-
-Click "Polls." Now you're at the "change list" page for polls. This page
-displays all the polls in the database and lets you choose one to change it.
-There's the "What's up?" poll we created in the first tutorial:
-
-.. image:: _images/admin04t.png
- :alt: Polls change list page
-
-Click the "What's up?" poll to edit it:
-
-.. image:: _images/admin05t.png
- :alt: Editing form for poll object
-
-Things to note here:
-
- * The form is automatically generated from the Poll model.
-
- * The different model field types (:class:`~django.db.models.DateTimeField`,
- :class:`~django.db.models.CharField`) correspond to the appropriate HTML
- input widget. Each type of field knows how to display itself in the Django
- admin.
-
- * Each :class:`~django.db.models.DateTimeField` gets free JavaScript
- shortcuts. Dates get a "Today" shortcut and calendar popup, and times get
- a "Now" shortcut and a convenient popup that lists commonly entered times.
-
-The bottom part of the page gives you a couple of options:
-
- * Save -- Saves changes and returns to the change-list page for this type of
- object.
-
- * Save and continue editing -- Saves changes and reloads the admin page for
- this object.
-
- * Save and add another -- Saves changes and loads a new, blank form for this
- type of object.
-
- * Delete -- Displays a delete confirmation page.
-
-Change the "Date published" by clicking the "Today" and "Now" shortcuts. Then
-click "Save and continue editing." Then click "History" in the upper right.
-You'll see a page listing all changes made to this object via the Django admin,
-with the timestamp and username of the person who made the change:
-
-.. image:: _images/admin06t.png
- :alt: History page for poll object
-
-Customize the admin form
-========================
-
-Take a few minutes to marvel at all the code you didn't have to write. By
-registering the Poll model with ``admin.site.register(Poll)``, Django was able
-to construct a default form representation. Often, you'll want to customize how
-the admin form looks and works. You'll do this by telling Django the options
-you want when you register the object.
-
-Let's see how this works by re-ordering the fields on the edit form. Replace
-the ``admin.site.register(Poll)`` line with::
-
- class PollAdmin(admin.ModelAdmin):
- fields = ['pub_date', 'question']
-
- admin.site.register(Poll, PollAdmin)
-
-You'll follow this pattern -- create a model admin object, then pass it as the
-second argument to ``admin.site.register()`` -- any time you need to change the
-admin options for an object.
-
-This particular change above makes the "Publication date" come before the
-"Question" field:
-
-.. image:: _images/admin07.png
- :alt: Fields have been reordered
-
-This isn't impressive with only two fields, but for admin forms with dozens
-of fields, choosing an intuitive order is an important usability detail.
-
-And speaking of forms with dozens of fields, you might want to split the form
-up into fieldsets::
-
- class PollAdmin(admin.ModelAdmin):
- fieldsets = [
- (None, {'fields': ['question']}),
- ('Date information', {'fields': ['pub_date']}),
- ]
-
- admin.site.register(Poll, PollAdmin)
-
-The first element of each tuple in ``fieldsets`` is the title of the fieldset.
-Here's what our form looks like now:
-
-.. image:: _images/admin08t.png
- :alt: Form has fieldsets now
-
-You can assign arbitrary HTML classes to each fieldset. Django provides a
-``"collapse"`` class that displays a particular fieldset initially collapsed.
-This is useful when you have a long form that contains a number of fields that
-aren't commonly used::
-
- class PollAdmin(admin.ModelAdmin):
- fieldsets = [
- (None, {'fields': ['question']}),
- ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
- ]
-
-.. image:: _images/admin09.png
- :alt: Fieldset is initially collapsed
-
-Adding related objects
-======================
-
-OK, we have our Poll admin page. But a ``Poll`` has multiple ``Choices``, and
-the admin page doesn't display choices.
-
-Yet.
-
-There are two ways to solve this problem. The first is to register ``Choice``
-with the admin just as we did with ``Poll``. That's easy::
-
- from polls.models import Choice
-
- admin.site.register(Choice)
-
-Now "Choices" is an available option in the Django admin. The "Add choice" form
-looks like this:
-
-.. image:: _images/admin10.png
- :alt: Choice admin page
-
-In that form, the "Poll" field is a select box containing every poll in the
-database. Django knows that a :class:`~django.db.models.ForeignKey` should be
-represented in the admin as a ``<select>`` box. In our case, only one poll
-exists at this point.
-
-Also note the "Add Another" link next to "Poll." Every object with a
-``ForeignKey`` relationship to another gets this for free. When you click "Add
-Another," you'll get a popup window with the "Add poll" form. If you add a poll
-in that window and click "Save," Django will save the poll to the database and
-dynamically add it as the selected choice on the "Add choice" form you're
-looking at.
-
-But, really, this is an inefficient way of adding Choice objects to the system.
-It'd be better if you could add a bunch of Choices directly when you create the
-Poll object. Let's make that happen.
-
-Remove the ``register()`` call for the Choice model. Then, edit the ``Poll``
-registration code to read::
-
- class ChoiceInline(admin.StackedInline):
- model = Choice
- extra = 3
-
- class PollAdmin(admin.ModelAdmin):
- fieldsets = [
- (None, {'fields': ['question']}),
- ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
- ]
- inlines = [ChoiceInline]
-
- admin.site.register(Poll, PollAdmin)
-
-This tells Django: "Choice objects are edited on the Poll admin page. By
-default, provide enough fields for 3 choices."
-
-Load the "Add poll" page to see how that looks, you may need to restart your development server:
-
-.. image:: _images/admin11t.png
- :alt: Add poll page now has choices on it
-
-It works like this: There are three slots for related Choices -- as specified
-by ``extra`` -- and each time you come back to the "Change" page for an
-already-created object, you get another three extra slots.
-
-One small problem, though. It takes a lot of screen space to display all the
-fields for entering related Choice objects. For that reason, Django offers a
-tabular way of displaying inline related objects; you just need to change
-the ``ChoiceInline`` declaration to read::
-
- class ChoiceInline(admin.TabularInline):
- #...
-
-With that ``TabularInline`` (instead of ``StackedInline``), the
-related objects are displayed in a more compact, table-based format:
-
-.. image:: _images/admin12.png
- :alt: Add poll page now has more compact choices
-
-Customize the admin change list
-===============================
-
-Now that the Poll admin page is looking good, let's make some tweaks to the
-"change list" page -- the one that displays all the polls in the system.
-
-Here's what it looks like at this point:
-
-.. image:: _images/admin04t.png
- :alt: Polls change list page
-
-By default, Django displays the ``str()`` of each object. But sometimes it'd be
-more helpful if we could display individual fields. To do that, use the
-``list_display`` admin option, which is a tuple of field names to display, as
-columns, on the change list page for the object::
-
- class PollAdmin(admin.ModelAdmin):
- # ...
- list_display = ('question', 'pub_date')
-
-Just for good measure, let's also include the ``was_published_today`` custom
-method from Tutorial 1::
-
- class PollAdmin(admin.ModelAdmin):
- # ...
- list_display = ('question', 'pub_date', 'was_published_today')
-
-Now the poll change list page looks like this:
-
-.. image:: _images/admin13t.png
- :alt: Polls change list page, updated
-
-You can click on the column headers to sort by those values -- except in the
-case of the ``was_published_today`` header, because sorting by the output of
-an arbitrary method is not supported. Also note that the column header for
-``was_published_today`` is, by default, the name of the method (with
-underscores replaced with spaces). But you can change that by giving that
-method (in ``models.py``) a ``short_description`` attribute::
-
- def was_published_today(self):
- return self.pub_date.date() == datetime.date.today()
- was_published_today.short_description = 'Published today?'
-
-Edit your admin.py file again and add an improvement to the Poll change list page: Filters. Add the
-following line to ``PollAdmin``::
-
- list_filter = ['pub_date']
-
-That adds a "Filter" sidebar that lets people filter the change list by the
-``pub_date`` field:
-
-.. image:: _images/admin14t.png
- :alt: Polls change list page, updated
-
-The type of filter displayed depends on the type of field you're filtering on.
-Because ``pub_date`` is a DateTimeField, Django knows to give the default
-filter options for DateTimeFields: "Any date," "Today," "Past 7 days,"
-"This month," "This year."
-
-This is shaping up well. Let's add some search capability::
-
- search_fields = ['question']
-
-That adds a search box at the top of the change list. When somebody enters
-search terms, Django will search the ``question`` field. You can use as many
-fields as you'd like -- although because it uses a ``LIKE`` query behind the
-scenes, keep it reasonable, to keep your database happy.
-
-Finally, because Poll objects have dates, it'd be convenient to be able to
-drill down by date. Add this line::
-
- date_hierarchy = 'pub_date'
-
-That adds hierarchical navigation, by date, to the top of the change list page.
-At top level, it displays all available years. Then it drills down to months
-and, ultimately, days.
-
-Now's also a good time to note that change lists give you free pagination. The
-default is to display 50 items per page. Change-list pagination, search boxes,
-filters, date-hierarchies and column-header-ordering all work together like you
-think they should.
-
-Customize the admin look and feel
-=================================
-
-Clearly, having "Django administration" at the top of each admin page is
-ridiculous. It's just placeholder text.
-
-That's easy to change, though, using Django's template system. The Django admin
-is powered by Django itself, and its interfaces use Django's own template
-system.
-
-Open your settings file (``mysite/settings.py``, remember) and look at the
-:setting:`TEMPLATE_DIRS` setting. :setting:`TEMPLATE_DIRS` is a tuple of
-filesystem directories to check when loading Django templates. It's a search
-path.
-
-By default, :setting:`TEMPLATE_DIRS` is empty. So, let's add a line to it, to
-tell Django where our templates live::
-
- TEMPLATE_DIRS = (
- "/home/my_username/mytemplates", # Change this to your own directory.
- )
-
-Now copy the template ``admin/base_site.html`` from within the default Django
-admin template directory in the source code of Django itself
-(``django/contrib/admin/templates``) into an ``admin`` subdirectory of
-whichever directory you're using in :setting:`TEMPLATE_DIRS`. For example, if
-your :setting:`TEMPLATE_DIRS` includes ``"/home/my_username/mytemplates"``, as
-above, then copy ``django/contrib/admin/templates/admin/base_site.html`` to
-``/home/my_username/mytemplates/admin/base_site.html``. Don't forget that
-``admin`` subdirectory.
-
-Then, just edit the file and replace the generic Django text with your own
-site's name as you see fit.
-
-This template file contains lots of text like ``{% block branding %}``
-and ``{{ title }}``. The ``{%`` and ``{{`` tags are part of Django's
-template language. When Django renders ``admin/base_site.html``, this
-template language will be evaluated to produce the final HTML page.
-Don't worry if you can't make any sense of the template right now --
-we'll delve into Django's templating language in Tutorial 3.
-
-Note that any of Django's default admin templates can be overridden. To
-override a template, just do the same thing you did with ``base_site.html`` --
-copy it from the default directory into your custom directory, and make
-changes.
-
-Astute readers will ask: But if :setting:`TEMPLATE_DIRS` was empty by default,
-how was Django finding the default admin templates? The answer is that, by
-default, Django automatically looks for a ``templates/`` subdirectory within
-each app package, for use as a fallback. See the :ref:`template loader
-documentation <template-loaders>` for full information.
-
-Customize the admin index page
-==============================
-
-On a similar note, you might want to customize the look and feel of the Django
-admin index page.
-
-By default, it displays all the apps in :setting:`INSTALLED_APPS` that have been
-registered with the admin application, in alphabetical order. You may want to
-make significant changes to the layout. After all, the index is probably the
-most important page of the admin, and it should be easy to use.
-
-The template to customize is ``admin/index.html``. (Do the same as with
-``admin/base_site.html`` in the previous section -- copy it from the default
-directory to your custom template directory.) Edit the file, and you'll see it
-uses a template variable called ``app_list``. That variable contains every
-installed Django app. Instead of using that, you can hard-code links to
-object-specific admin pages in whatever way you think is best. Again,
-don't worry if you can't understand the template language -- we'll cover that
-in more detail in Tutorial 3.
-
-When you're comfortable with the admin site, read :doc:`part 3 of this tutorial
-</intro/tutorial03>` to start working on public poll views.
diff --git a/parts/django/docs/intro/tutorial03.txt b/parts/django/docs/intro/tutorial03.txt
deleted file mode 100644
index 0843d9e..0000000
--- a/parts/django/docs/intro/tutorial03.txt
+++ /dev/null
@@ -1,546 +0,0 @@
-=====================================
-Writing your first Django app, part 3
-=====================================
-
-This tutorial begins where :doc:`Tutorial 2 </intro/tutorial02>` left off. We're
-continuing the Web-poll application and will focus on creating the public
-interface -- "views."
-
-Philosophy
-==========
-
-A view is a "type" of Web page in your Django application that generally serves
-a specific function and has a specific template. For example, in a Weblog
-application, you might have the following views:
-
- * Blog homepage -- displays the latest few entries.
-
- * Entry "detail" page -- permalink page for a single entry.
-
- * Year-based archive page -- displays all months with entries in the
- given year.
-
- * Month-based archive page -- displays all days with entries in the
- given month.
-
- * Day-based archive page -- displays all entries in the given day.
-
- * Comment action -- handles posting comments to a given entry.
-
-In our poll application, we'll have the following four views:
-
- * Poll "archive" page -- displays the latest few polls.
-
- * Poll "detail" page -- displays a poll question, with no results but
- with a form to vote.
-
- * Poll "results" page -- displays results for a particular poll.
-
- * Vote action -- handles voting for a particular choice in a particular
- poll.
-
-In Django, each view is represented by a simple Python function.
-
-Design your URLs
-================
-
-The first step of writing views is to design your URL structure. You do this by
-creating a Python module, called a URLconf. URLconfs are how Django associates
-a given URL with given Python code.
-
-When a user requests a Django-powered page, the system looks at the
-:setting:`ROOT_URLCONF` setting, which contains a string in Python dotted
-syntax. Django loads that module and looks for a module-level variable called
-``urlpatterns``, which is a sequence of tuples in the following format::
-
- (regular expression, Python callback function [, optional dictionary])
-
-Django starts at the first regular expression and makes its way down the list,
-comparing the requested URL against each regular expression until it finds one
-that matches.
-
-When it finds a match, Django calls the Python callback function, with an
-:class:`~django.http.HttpRequest` object as the first argument, any "captured"
-values from the regular expression as keyword arguments, and, optionally,
-arbitrary keyword arguments from the dictionary (an optional third item in the
-tuple).
-
-For more on :class:`~django.http.HttpRequest` objects, see the
-:doc:`/ref/request-response`. For more details on URLconfs, see the
-:doc:`/topics/http/urls`.
-
-When you ran ``django-admin.py startproject mysite`` at the beginning of
-Tutorial 1, it created a default URLconf in ``mysite/urls.py``. It also
-automatically set your :setting:`ROOT_URLCONF` setting (in ``settings.py``) to
-point at that file::
-
- ROOT_URLCONF = 'mysite.urls'
-
-Time for an example. Edit ``mysite/urls.py`` so it looks like this::
-
- from django.conf.urls.defaults import *
-
- from django.contrib import admin
- admin.autodiscover()
-
- urlpatterns = patterns('',
- (r'^polls/$', 'polls.views.index'),
- (r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'),
- (r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'),
- (r'^polls/(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
- (r'^admin/', include(admin.site.urls)),
- )
-
-This is worth a review. When somebody requests a page from your Web site -- say,
-"/polls/23/", Django will load this Python module, because it's pointed to by
-the :setting:`ROOT_URLCONF` setting. It finds the variable named ``urlpatterns``
-and traverses the regular expressions in order. When it finds a regular
-expression that matches -- ``r'^polls/(?P<poll_id>\d+)/$'`` -- it loads the
-function ``detail()`` from ``polls/views.py``. Finally, it calls that
-``detail()`` function like so::
-
- detail(request=<HttpRequest object>, poll_id='23')
-
-The ``poll_id='23'`` part comes from ``(?P<poll_id>\d+)``. Using parentheses
-around a pattern "captures" the text matched by that pattern and sends it as an
-argument to the view function; the ``?P<poll_id>`` defines the name that will be
-used to identify the matched pattern; and ``\d+`` is a regular expression to
-match a sequence of digits (i.e., a number).
-
-Because the URL patterns are regular expressions, there really is no limit on
-what you can do with them. And there's no need to add URL cruft such as ``.php``
--- unless you have a sick sense of humor, in which case you can do something
-like this::
-
- (r'^polls/latest\.php$', 'polls.views.index'),
-
-But, don't do that. It's silly.
-
-Note that these regular expressions do not search GET and POST parameters, or
-the domain name. For example, in a request to ``http://www.example.com/myapp/``,
-the URLconf will look for ``myapp/``. In a request to
-``http://www.example.com/myapp/?page=3``, the URLconf will look for ``myapp/``.
-
-If you need help with regular expressions, see `Wikipedia's entry`_ and the
-`Python documentation`_. Also, the O'Reilly book "Mastering Regular Expressions"
-by Jeffrey Friedl is fantastic.
-
-Finally, a performance note: these regular expressions are compiled the first
-time the URLconf module is loaded. They're super fast.
-
-.. _Wikipedia's entry: http://en.wikipedia.org/wiki/Regular_expression
-.. _Python documentation: http://docs.python.org/library/re.html
-
-Write your first view
-=====================
-
-Well, we haven't created any views yet -- we just have the URLconf. But let's
-make sure Django is following the URLconf properly.
-
-Fire up the Django development Web server:
-
-.. code-block:: bash
-
- python manage.py runserver
-
-Now go to "http://localhost:8000/polls/" on your domain in your Web browser.
-You should get a pleasantly-colored error page with the following message::
-
- ViewDoesNotExist at /polls/
-
- Tried index in module polls.views. Error was: 'module'
- object has no attribute 'index'
-
-This error happened because you haven't written a function ``index()`` in the
-module ``polls/views.py``.
-
-Try "/polls/23/", "/polls/23/results/" and "/polls/23/vote/". The error
-messages tell you which view Django tried (and failed to find, because you
-haven't written any views yet).
-
-Time to write the first view. Open the file ``polls/views.py``
-and put the following Python code in it::
-
- from django.http import HttpResponse
-
- def index(request):
- return HttpResponse("Hello, world. You're at the poll index.")
-
-This is the simplest view possible. Go to "/polls/" in your browser, and you
-should see your text.
-
-Now lets add a few more views. These views are slightly different, because
-they take an argument (which, remember, is passed in from whatever was
-captured by the regular expression in the URLconf)::
-
- def detail(request, poll_id):
- return HttpResponse("You're looking at poll %s." % poll_id)
-
- def results(request, poll_id):
- return HttpResponse("You're looking at the results of poll %s." % poll_id)
-
- def vote(request, poll_id):
- return HttpResponse("You're voting on poll %s." % poll_id)
-
-Take a look in your browser, at "/polls/34/". It'll run the `detail()` method
-and display whatever ID you provide in the URL. Try "/polls/34/results/" and
-"/polls/34/vote/" too -- these will display the placeholder results and voting
-pages.
-
-Write views that actually do something
-======================================
-
-Each view is responsible for doing one of two things: Returning an
-:class:`~django.http.HttpResponse` object containing the content for the
-requested page, or raising an exception such as :exc:`~django.http.Http404`. The
-rest is up to you.
-
-Your view can read records from a database, or not. It can use a template
-system such as Django's -- or a third-party Python template system -- or not.
-It can generate a PDF file, output XML, create a ZIP file on the fly, anything
-you want, using whatever Python libraries you want.
-
-All Django wants is that :class:`~django.http.HttpResponse`. Or an exception.
-
-Because it's convenient, let's use Django's own database API, which we covered
-in :doc:`Tutorial 1 </intro/tutorial01>`. Here's one stab at the ``index()``
-view, which displays the latest 5 poll questions in the system, separated by
-commas, according to publication date::
-
- from polls.models import Poll
- from django.http import HttpResponse
-
- def index(request):
- latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
- output = ', '.join([p.question for p in latest_poll_list])
- return HttpResponse(output)
-
-There's a problem here, though: The page's design is hard-coded in the view. If
-you want to change the way the page looks, you'll have to edit this Python code.
-So let's use Django's template system to separate the design from Python::
-
- from django.template import Context, loader
- from polls.models import Poll
- from django.http import HttpResponse
-
- def index(request):
- latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
- t = loader.get_template('polls/index.html')
- c = Context({
- 'latest_poll_list': latest_poll_list,
- })
- return HttpResponse(t.render(c))
-
-That code loads the template called "polls/index.html" and passes it a context.
-The context is a dictionary mapping template variable names to Python objects.
-
-Reload the page. Now you'll see an error::
-
- TemplateDoesNotExist at /polls/
- polls/index.html
-
-Ah. There's no template yet. First, create a directory, somewhere on your
-filesystem, whose contents Django can access. (Django runs as whatever user your
-server runs.) Don't put them under your document root, though. You probably
-shouldn't make them public, just for security's sake.
-Then edit :setting:`TEMPLATE_DIRS` in your ``settings.py`` to tell Django where
-it can find templates -- just as you did in the "Customize the admin look and
-feel" section of Tutorial 2.
-
-When you've done that, create a directory ``polls`` in your template directory.
-Within that, create a file called ``index.html``. Note that our
-``loader.get_template('polls/index.html')`` code from above maps to
-"[template_directory]/polls/index.html" on the filesystem.
-
-Put the following code in that template:
-
-.. code-block:: html+django
-
- {% if latest_poll_list %}
- <ul>
- {% for poll in latest_poll_list %}
- <li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
- {% endfor %}
- </ul>
- {% else %}
- <p>No polls are available.</p>
- {% endif %}
-
-Load the page in your Web browser, and you should see a bulleted-list
-containing the "What's up" poll from Tutorial 1. The link points to the poll's
-detail page.
-
-A shortcut: render_to_response()
---------------------------------
-
-It's a very common idiom to load a template, fill a context and return an
-:class:`~django.http.HttpResponse` object with the result of the rendered
-template. Django provides a shortcut. Here's the full ``index()`` view,
-rewritten::
-
- from django.shortcuts import render_to_response
- from polls.models import Poll
-
- def index(request):
- latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
- return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list})
-
-Note that once we've done this in all these views, we no longer need to import
-:mod:`~django.template.loader`, :class:`~django.template.Context` and
-:class:`~django.http.HttpResponse`.
-
-The :func:`~django.shortcuts.render_to_response` function takes a template name
-as its first argument and a dictionary as its optional second argument. It
-returns an :class:`~django.http.HttpResponse` object of the given template
-rendered with the given context.
-
-Raising 404
-===========
-
-Now, let's tackle the poll detail view -- the page that displays the question
-for a given poll. Here's the view::
-
- from django.http import Http404
- # ...
- def detail(request, poll_id):
- try:
- p = Poll.objects.get(pk=poll_id)
- except Poll.DoesNotExist:
- raise Http404
- return render_to_response('polls/detail.html', {'poll': p})
-
-The new concept here: The view raises the :exc:`~django.http.Http404` exception
-if a poll with the requested ID doesn't exist.
-
-We'll discuss what you could put in that ``polls/detail.html`` template a bit
-later, but if you'd like to quickly get the above example working, just::
-
- {{ poll }}
-
-will get you started for now.
-
-A shortcut: get_object_or_404()
--------------------------------
-
-It's a very common idiom to use :meth:`~django.db.models.QuerySet.get` and raise
-:exc:`~django.http.Http404` if the object doesn't exist. Django provides a
-shortcut. Here's the ``detail()`` view, rewritten::
-
- from django.shortcuts import render_to_response, get_object_or_404
- # ...
- def detail(request, poll_id):
- p = get_object_or_404(Poll, pk=poll_id)
- return render_to_response('polls/detail.html', {'poll': p})
-
-The :func:`~django.shortcuts.get_object_or_404` function takes a Django model
-as its first argument and an arbitrary number of keyword arguments, which it
-passes to the module's :meth:`~django.db.models.QuerySet.get` function. It
-raises :exc:`~django.http.Http404` if the object doesn't exist.
-
-.. admonition:: Philosophy
-
- Why do we use a helper function :func:`~django.shortcuts.get_object_or_404`
- instead of automatically catching the
- :exc:`~django.core.exceptions.ObjectDoesNotExist` exceptions at a higher
- level, or having the model API raise :exc:`~django.http.Http404` instead of
- :exc:`~django.core.exceptions.ObjectDoesNotExist`?
-
- Because that would couple the model layer to the view layer. One of the
- foremost design goals of Django is to maintain loose coupling.
-
-There's also a :func:`~django.shortcuts.get_list_or_404` function, which works
-just as :func:`~django.shortcuts.get_object_or_404` -- except using
-:meth:`~django.db.models.QuerySet.filter` instead of
-:meth:`~django.db.models.QuerySet.get`. It raises :exc:`~django.http.Http404` if
-the list is empty.
-
-Write a 404 (page not found) view
-=================================
-
-When you raise :exc:`~django.http.Http404` from within a view, Django will load
-a special view devoted to handling 404 errors. It finds it by looking for the
-variable ``handler404``, which is a string in Python dotted syntax -- the same
-format the normal URLconf callbacks use. A 404 view itself has nothing special:
-It's just a normal view.
-
-You normally won't have to bother with writing 404 views. By default, URLconfs
-have the following line up top::
-
- from django.conf.urls.defaults import *
-
-That takes care of setting ``handler404`` in the current module. As you can see
-in ``django/conf/urls/defaults.py``, ``handler404`` is set to
-:func:`django.views.defaults.page_not_found` by default.
-
-Four more things to note about 404 views:
-
- * If :setting:`DEBUG` is set to ``True`` (in your settings module) then your
- 404 view will never be used (and thus the ``404.html`` template will never
- be rendered) because the traceback will be displayed instead.
-
- * The 404 view is also called if Django doesn't find a match after checking
- every regular expression in the URLconf.
-
- * If you don't define your own 404 view -- and simply use the default, which
- is recommended -- you still have one obligation: To create a ``404.html``
- template in the root of your template directory. The default 404 view will
- use that template for all 404 errors.
-
- * If :setting:`DEBUG` is set to ``False`` (in your settings module) and if
- you didn't create a ``404.html`` file, an ``Http500`` is raised instead.
- So remember to create a ``404.html``.
-
-Write a 500 (server error) view
-===============================
-
-Similarly, URLconfs may define a ``handler500``, which points to a view to call
-in case of server errors. Server errors happen when you have runtime errors in
-view code.
-
-Use the template system
-=======================
-
-Back to the ``detail()`` view for our poll application. Given the context
-variable ``poll``, here's what the "polls/detail.html" template might look
-like:
-
-.. code-block:: html+django
-
- <h1>{{ poll.question }}</h1>
- <ul>
- {% for choice in poll.choice_set.all %}
- <li>{{ choice.choice }}</li>
- {% endfor %}
- </ul>
-
-The template system uses dot-lookup syntax to access variable attributes. In
-the example of ``{{ poll.question }}``, first Django does a dictionary lookup
-on the object ``poll``. Failing that, it tries attribute lookup -- which works,
-in this case. If attribute lookup had failed, it would've tried calling the
-method ``question()`` on the poll object.
-
-Method-calling happens in the ``{% for %}`` loop: ``poll.choice_set.all`` is
-interpreted as the Python code ``poll.choice_set.all()``, which returns an
-iterable of Choice objects and is suitable for use in the ``{% for %}`` tag.
-
-See the :doc:`template guide </topics/templates>` for more about templates.
-
-Simplifying the URLconfs
-========================
-
-Take some time to play around with the views and template system. As you edit
-the URLconf, you may notice there's a fair bit of redundancy in it::
-
- urlpatterns = patterns('',
- (r'^polls/$', 'polls.views.index'),
- (r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'),
- (r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'),
- (r'^polls/(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
- )
-
-Namely, ``polls.views`` is in every callback.
-
-Because this is a common case, the URLconf framework provides a shortcut for
-common prefixes. You can factor out the common prefixes and add them as the
-first argument to :func:`~django.conf.urls.defaults.patterns`, like so::
-
- urlpatterns = patterns('polls.views',
- (r'^polls/$', 'index'),
- (r'^polls/(?P<poll_id>\d+)/$', 'detail'),
- (r'^polls/(?P<poll_id>\d+)/results/$', 'results'),
- (r'^polls/(?P<poll_id>\d+)/vote/$', 'vote'),
- )
-
-This is functionally identical to the previous formatting. It's just a bit
-tidier.
-
-Since you generally don't want the prefix for one app to be applied to every
-callback in your URLconf, you can concatenate multiple
-:func:`~django.conf.urls.defaults.patterns`. Your full ``mysite/urls.py`` might
-now look like this::
-
- from django.conf.urls.defaults import *
-
- from django.contrib import admin
- admin.autodiscover()
-
- urlpatterns = patterns('polls.views',
- (r'^polls/$', 'index'),
- (r'^polls/(?P<poll_id>\d+)/$', 'detail'),
- (r'^polls/(?P<poll_id>\d+)/results/$', 'results'),
- (r'^polls/(?P<poll_id>\d+)/vote/$', 'vote'),
- )
-
- urlpatterns += patterns('',
- (r'^admin/', include(admin.site.urls)),
- )
-
-Decoupling the URLconfs
-=======================
-
-While we're at it, we should take the time to decouple our poll-app URLs from
-our Django project configuration. Django apps are meant to be pluggable -- that
-is, each particular app should be transferable to another Django installation
-with minimal fuss.
-
-Our poll app is pretty decoupled at this point, thanks to the strict directory
-structure that ``python manage.py startapp`` created, but one part of it is
-coupled to the Django settings: The URLconf.
-
-We've been editing the URLs in ``mysite/urls.py``, but the URL design of an
-app is specific to the app, not to the Django installation -- so let's move the
-URLs within the app directory.
-
-Copy the file ``mysite/urls.py`` to ``polls/urls.py``. Then, change
-``mysite/urls.py`` to remove the poll-specific URLs and insert an
-:func:`~django.conf.urls.defaults.include`, leaving you with::
-
- # This also imports the include function
- from django.conf.urls.defaults import *
-
- from django.contrib import admin
- admin.autodiscover()
-
- urlpatterns = patterns('',
- (r'^polls/', include('polls.urls')),
- (r'^admin/', include(admin.site.urls)),
- )
-
-:func:`~django.conf.urls.defaults.include` simply references another URLconf.
-Note that the regular expression doesn't have a ``$`` (end-of-string match
-character) but has the trailing slash. Whenever Django encounters
-:func:`~django.conf.urls.defaults.include`, it chops off whatever part of the
-URL matched up to that point and sends the remaining string to the included
-URLconf for further processing.
-
-Here's what happens if a user goes to "/polls/34/" in this system:
-
- * Django will find the match at ``'^polls/'``
-
- * Then, Django will strip off the matching text (``"polls/"``) and send the
- remaining text -- ``"34/"`` -- to the 'polls.urls' URLconf for
- further processing.
-
-Now that we've decoupled that, we need to decouple the ``polls.urls``
-URLconf by removing the leading "polls/" from each line, and removing the
-lines registering the admin site. Your ``polls.urls`` file should now look like
-this::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('polls.views',
- (r'^$', 'index'),
- (r'^(?P<poll_id>\d+)/$', 'detail'),
- (r'^(?P<poll_id>\d+)/results/$', 'results'),
- (r'^(?P<poll_id>\d+)/vote/$', 'vote'),
- )
-
-The idea behind :func:`~django.conf.urls.defaults.include` and URLconf
-decoupling is to make it easy to plug-and-play URLs. Now that polls are in their
-own URLconf, they can be placed under "/polls/", or under "/fun_polls/", or
-under "/content/polls/", or any other path root, and the app will still work.
-
-All the poll app cares about is its relative path, not its absolute path.
-
-When you're comfortable with writing views, read :doc:`part 4 of this tutorial
-</intro/tutorial04>` to learn about simple form processing and generic views.
diff --git a/parts/django/docs/intro/tutorial04.txt b/parts/django/docs/intro/tutorial04.txt
deleted file mode 100644
index dfbd82d..0000000
--- a/parts/django/docs/intro/tutorial04.txt
+++ /dev/null
@@ -1,346 +0,0 @@
-=====================================
-Writing your first Django app, part 4
-=====================================
-
-This tutorial begins where :doc:`Tutorial 3 </intro/tutorial03>` left off. We're
-continuing the Web-poll application and will focus on simple form processing and
-cutting down our code.
-
-Write a simple form
-===================
-
-Let's update our poll detail template ("polls/detail.html") from the last
-tutorial, so that the template contains an HTML ``<form>`` element:
-
-.. code-block:: html+django
-
- <h1>{{ poll.question }}</h1>
-
- {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
-
- <form action="/polls/{{ poll.id }}/vote/" method="post">
- {% csrf_token %}
- {% for choice in poll.choice_set.all %}
- <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
- <label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />
- {% endfor %}
- <input type="submit" value="Vote" />
- </form>
-
-A quick rundown:
-
- * The above template displays a radio button for each poll choice. The
- ``value`` of each radio button is the associated poll choice's ID. The
- ``name`` of each radio button is ``"choice"``. That means, when somebody
- selects one of the radio buttons and submits the form, it'll send the
- POST data ``choice=3``. This is HTML Forms 101.
-
- * We set the form's ``action`` to ``/polls/{{ poll.id }}/vote/``, and we
- set ``method="post"``. Using ``method="post"`` (as opposed to
- ``method="get"``) is very important, because the act of submitting this
- form will alter data server-side. Whenever you create a form that alters
- data server-side, use ``method="post"``. This tip isn't specific to
- Django; it's just good Web development practice.
-
- * ``forloop.counter`` indicates how many times the :ttag:`for` tag has gone
- through its loop
-
- * Since we're creating a POST form (which can have the effect of modifying
- data), we need to worry about Cross Site Request Forgeries.
- Thankfully, you don't have to worry too hard, because Django comes with
- a very easy-to-use system for protecting against it. In short, all POST
- forms that are targeted at internal URLs should use the ``{% csrf_token %}``
- template tag.
-
-The ``{% csrf_token %}`` tag requires information from the request object, which
-is not normally accessible from within the template context. To fix this, a
-small adjustment needs to be made to the ``detail`` view, so that it looks like
-the following::
-
- from django.template import RequestContext
- # ...
- def detail(request, poll_id):
- p = get_object_or_404(Poll, pk=poll_id)
- return render_to_response('polls/detail.html', {'poll': p},
- context_instance=RequestContext(request))
-
-The details of how this works are explained in the documentation for
-:ref:`RequestContext <subclassing-context-requestcontext>`.
-
-Now, let's create a Django view that handles the submitted data and does
-something with it. Remember, in :doc:`Tutorial 3 </intro/tutorial03>`, we
-created a URLconf for the polls application that includes this line::
-
- (r'^(?P<poll_id>\d+)/vote/$', 'vote'),
-
-We also created a dummy implementation of the ``vote()`` function. Let's
-create a real version. Add the following to ``polls/views.py``::
-
- from django.shortcuts import get_object_or_404, render_to_response
- from django.http import HttpResponseRedirect, HttpResponse
- from django.core.urlresolvers import reverse
- from django.template import RequestContext
- from polls.models import Choice, Poll
- # ...
- def vote(request, poll_id):
- p = get_object_or_404(Poll, pk=poll_id)
- try:
- selected_choice = p.choice_set.get(pk=request.POST['choice'])
- except (KeyError, Choice.DoesNotExist):
- # Redisplay the poll voting form.
- return render_to_response('polls/detail.html', {
- 'poll': p,
- 'error_message': "You didn't select a choice.",
- }, context_instance=RequestContext(request))
- else:
- selected_choice.votes += 1
- selected_choice.save()
- # Always return an HttpResponseRedirect after successfully dealing
- # with POST data. This prevents data from being posted twice if a
- # user hits the Back button.
- return HttpResponseRedirect(reverse('polls.views.results', args=(p.id,)))
-
-This code includes a few things we haven't covered yet in this tutorial:
-
- * :attr:`request.POST <django.http.HttpRequest.POST>` is a dictionary-like
- object that lets you access submitted data by key name. In this case,
- ``request.POST['choice']`` returns the ID of the selected choice, as a
- string. :attr:`request.POST <django.http.HttpRequest.POST>` values are
- always strings.
-
- Note that Django also provides :attr:`request.GET
- <django.http.HttpRequest.GET>` for accessing GET data in the same way --
- but we're explicitly using :attr:`request.POST
- <django.http.HttpRequest.POST>` in our code, to ensure that data is only
- altered via a POST call.
-
- * ``request.POST['choice']`` will raise :exc:`KeyError` if ``choice`` wasn't
- provided in POST data. The above code checks for :exc:`KeyError` and
- redisplays the poll form with an error message if ``choice`` isn't given.
-
- * After incrementing the choice count, the code returns an
- :class:`~django.http.HttpResponseRedirect` rather than a normal
- :class:`~django.http.HttpResponse`.
- :class:`~django.http.HttpResponseRedirect` takes a single argument: the
- URL to which the user will be redirected (see the following point for how
- we construct the URL in this case).
-
- As the Python comment above points out, you should always return an
- :class:`~django.http.HttpResponseRedirect` after successfully dealing with
- POST data. This tip isn't specific to Django; it's just good Web
- development practice.
-
- * We are using the :func:`~django.core.urlresolvers.reverse` function in the
- :class:`~django.http.HttpResponseRedirect` constructor in this example.
- This function helps avoid having to hardcode a URL in the view function.
- It is given the name of the view that we want to pass control to and the
- variable portion of the URL pattern that points to that view. In this
- case, using the URLconf we set up in Tutorial 3, this
- :func:`~django.core.urlresolvers.reverse` call will return a string like
- ::
-
- '/polls/3/results/'
-
- ... where the ``3`` is the value of ``p.id``. This redirected URL will
- then call the ``'results'`` view to display the final page. Note that you
- need to use the full name of the view here (including the prefix).
-
-As mentioned in Tutorial 3, ``request`` is a :class:`~django.http.HttpRequest`
-object. For more on :class:`~django.http.HttpRequest` objects, see the
-:doc:`request and response documentation </ref/request-response>`.
-
-After somebody votes in a poll, the ``vote()`` view redirects to the results
-page for the poll. Let's write that view::
-
- def results(request, poll_id):
- p = get_object_or_404(Poll, pk=poll_id)
- return render_to_response('polls/results.html', {'poll': p})
-
-This is almost exactly the same as the ``detail()`` view from :doc:`Tutorial 3
-</intro/tutorial03>`. The only difference is the template name. We'll fix this
-redundancy later.
-
-Now, create a ``results.html`` template:
-
-.. code-block:: html+django
-
- <h1>{{ poll.question }}</h1>
-
- <ul>
- {% for choice in poll.choice_set.all %}
- <li>{{ choice.choice }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
- {% endfor %}
- </ul>
-
- <a href="/polls/{{ poll.id }}/">Vote again?</a>
-
-Now, go to ``/polls/1/`` in your browser and vote in the poll. You should see a
-results page that gets updated each time you vote. If you submit the form
-without having chosen a choice, you should see the error message.
-
-Use generic views: Less code is better
-======================================
-
-The ``detail()`` (from :doc:`Tutorial 3 </intro/tutorial03>`) and ``results()``
-views are stupidly simple -- and, as mentioned above, redundant. The ``index()``
-view (also from Tutorial 3), which displays a list of polls, is similar.
-
-These views represent a common case of basic Web development: getting data from
-the database according to a parameter passed in the URL, loading a template and
-returning the rendered template. Because this is so common, Django provides a
-shortcut, called the "generic views" system.
-
-Generic views abstract common patterns to the point where you don't even need
-to write Python code to write an app.
-
-Let's convert our poll app to use the generic views system, so we can delete a
-bunch of our own code. We'll just have to take a few steps to make the
-conversion. We will:
-
- 1. Convert the URLconf.
-
- 2. Rename a few templates.
-
- 3. Delete some of the old, unneeded views.
-
- 4. Fix up URL handling for the new views.
-
-Read on for details.
-
-.. admonition:: Why the code-shuffle?
-
- Generally, when writing a Django app, you'll evaluate whether generic views
- are a good fit for your problem, and you'll use them from the beginning,
- rather than refactoring your code halfway through. But this tutorial
- intentionally has focused on writing the views "the hard way" until now, to
- focus on core concepts.
-
- You should know basic math before you start using a calculator.
-
-First, open the ``polls/urls.py`` URLconf. It looks like this, according to the
-tutorial so far::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('polls.views',
- (r'^$', 'index'),
- (r'^(?P<poll_id>\d+)/$', 'detail'),
- (r'^(?P<poll_id>\d+)/results/$', 'results'),
- (r'^(?P<poll_id>\d+)/vote/$', 'vote'),
- )
-
-Change it like so::
-
- from django.conf.urls.defaults import *
- from polls.models import Poll
-
- info_dict = {
- 'queryset': Poll.objects.all(),
- }
-
- urlpatterns = patterns('',
- (r'^$', 'django.views.generic.list_detail.object_list', info_dict),
- (r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
- url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, template_name='polls/results.html'), 'poll_results'),
- (r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
- )
-
-We're using two generic views here:
-:func:`~django.views.generic.list_detail.object_list` and
-:func:`~django.views.generic.list_detail.object_detail`. Respectively, those two
-views abstract the concepts of "display a list of objects" and "display a detail
-page for a particular type of object."
-
- * Each generic view needs to know what data it will be acting upon. This
- data is provided in a dictionary. The ``queryset`` key in this dictionary
- points to the list of objects to be manipulated by the generic view.
-
- * The :func:`~django.views.generic.list_detail.object_detail` generic view
- expects the ID value captured from the URL to be called ``"object_id"``,
- so we've changed ``poll_id`` to ``object_id`` for the generic views.
-
- * We've added a name, ``poll_results``, to the results view so that we have
- a way to refer to its URL later on (see the documentation about
- :ref:`naming URL patterns <naming-url-patterns>` for information). We're
- also using the :func:`~django.conf.urls.default.url` function from
- :mod:`django.conf.urls.defaults` here. It's a good habit to use
- :func:`~django.conf.urls.defaults.url` when you are providing a pattern
- name like this.
-
-By default, the :func:`~django.views.generic.list_detail.object_detail` generic
-view uses a template called ``<app name>/<model name>_detail.html``. In our
-case, it'll use the template ``"polls/poll_detail.html"``. Thus, rename your
-``polls/detail.html`` template to ``polls/poll_detail.html``, and change the
-:func:`~django.shortcuts.render_to_response` line in ``vote()``.
-
-Similarly, the :func:`~django.views.generic.list_detail.object_list` generic
-view uses a template called ``<app name>/<model name>_list.html``. Thus, rename
-``polls/index.html`` to ``polls/poll_list.html``.
-
-Because we have more than one entry in the URLconf that uses
-:func:`~django.views.generic.list_detail.object_detail` for the polls app, we
-manually specify a template name for the results view:
-``template_name='polls/results.html'``. Otherwise, both views would use the same
-template. Note that we use ``dict()`` to return an altered dictionary in place.
-
-.. note:: :meth:`django.db.models.QuerySet.all` is lazy
-
- It might look a little frightening to see ``Poll.objects.all()`` being used
- in a detail view which only needs one ``Poll`` object, but don't worry;
- ``Poll.objects.all()`` is actually a special object called a
- :class:`~django.db.models.QuerySet`, which is "lazy" and doesn't hit your
- database until it absolutely has to. By the time the database query happens,
- the :func:`~django.views.generic.list_detail.object_detail` generic view
- will have narrowed its scope down to a single object, so the eventual query
- will only select one row from the database.
-
- If you'd like to know more about how that works, The Django database API
- documentation :ref:`explains the lazy nature of QuerySet objects
- <querysets-are-lazy>`.
-
-In previous parts of the tutorial, the templates have been provided with a
-context that contains the ``poll`` and ``latest_poll_list`` context variables.
-However, the generic views provide the variables ``object`` and ``object_list``
-as context. Therefore, you need to change your templates to match the new
-context variables. Go through your templates, and modify any reference to
-``latest_poll_list`` to ``object_list``, and change any reference to ``poll``
-to ``object``.
-
-You can now delete the ``index()``, ``detail()`` and ``results()`` views
-from ``polls/views.py``. We don't need them anymore -- they have been replaced
-by generic views.
-
-The ``vote()`` view is still required. However, it must be modified to match the
-new context variables. In the :func:`~django.shortcuts.render_to_response` call,
-rename the ``poll`` context variable to ``object``.
-
-The last thing to do is fix the URL handling to account for the use of generic
-views. In the vote view above, we used the
-:func:`~django.core.urlresolvers.reverse` function to avoid hard-coding our
-URLs. Now that we've switched to a generic view, we'll need to change the
-:func:`~django.core.urlresolvers.reverse` call to point back to our new generic
-view. We can't simply use the view function anymore -- generic views can be (and
-are) used multiple times -- but we can use the name we've given::
-
- return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))
-
-Run the server, and use your new polling app based on generic views.
-
-For full details on generic views, see the :doc:`generic views documentation
-</topics/http/generic-views>`.
-
-Coming soon
-===========
-
-The tutorial ends here for the time being. Future installments of the tutorial
-will cover:
-
- * Advanced form processing
- * Using the RSS framework
- * Using the cache framework
- * Using the comments framework
- * Advanced admin features: Permissions
- * Advanced admin features: Custom JavaScript
-
-In the meantime, you might want to check out some pointers on :doc:`where to go
-from here </intro/whatsnext>`
diff --git a/parts/django/docs/intro/whatsnext.txt b/parts/django/docs/intro/whatsnext.txt
deleted file mode 100644
index 00c1654..0000000
--- a/parts/django/docs/intro/whatsnext.txt
+++ /dev/null
@@ -1,231 +0,0 @@
-=================
-What to read next
-=================
-
-So you've read all the :doc:`introductory material </intro/index>` and have
-decided you'd like to keep using Django. We've only just scratched the surface
-with this intro (in fact, if you've read every single word you've still read
-less than 10% of the overall documentation).
-
-So what's next?
-
-Well, we've always been big fans of learning by doing. At this point you should
-know enough to start a project of your own and start fooling around. As you need
-to learn new tricks, come back to the documentation.
-
-We've put a lot of effort into making Django's documentation useful, easy to
-read and as complete as possible. The rest of this document explains more about
-how the documentation works so that you can get the most out of it.
-
-(Yes, this is documentation about documentation. Rest assured we have no plans
-to write a document about how to read the document about documentation.)
-
-Finding documentation
-=====================
-
-Django's got a *lot* of documentation -- almost 200,000 words -- so finding what
-you need can sometimes be tricky. A few good places to start are the :ref:`search`
-and the :ref:`genindex`.
-
-Or you can just browse around!
-
-How the documentation is organized
-==================================
-
-Django's main documentation is broken up into "chunks" designed to fill
-different needs:
-
- * The :doc:`introductory material </intro/index>` is designed for people new
- to Django -- or to Web development in general. It doesn't cover anything
- in depth, but instead gives a high-level overview of how developing in
- Django "feels".
-
- * The :doc:`topic guides </topics/index>`, on the other hand, dive deep into
- individual parts of Django. There are complete guides to Django's
- :doc:`model system </topics/db/index>`, :doc:`template engine
- </topics/templates>`, :doc:`forms framework </topics/forms/index>`, and much
- more.
-
- This is probably where you'll want to spend most of your time; if you work
- your way through these guides you should come out knowing pretty much
- everything there is to know about Django.
-
- * Web development is often broad, not deep -- problems span many domains.
- We've written a set of :doc:`how-to guides </howto/index>` that answer
- common "How do I ...?" questions. Here you'll find information about
- :doc:`generating PDFs with Django </howto/outputting-pdf>`, :doc:`writing
- custom template tags </howto/custom-template-tags>`, and more.
-
- Answers to really common questions can also be found in the :doc:`FAQ
- </faq/index>`.
-
- * The guides and how-to's don't cover every single class, function, and
- method available in Django -- that would be overwhelming when you're
- trying to learn. Instead, details about individual classes, functions,
- methods, and modules are kept in the :doc:`reference </ref/index>`. This is
- where you'll turn to find the details of a particular function or
- whathaveyou.
-
- * Finally, there's some "specialized" documentation not usually relevant to
- most developers. This includes the :doc:`release notes </releases/index>`,
- :doc:`documentation of obsolete features </obsolete/index>`,
- :doc:`internals documentation </internals/index>` for those who want to add
- code to Django itself, and a :doc:`few other things that simply don't fit
- elsewhere </misc/index>`.
-
-
-How documentation is updated
-============================
-
-Just as the Django code base is developed and improved on a daily basis, our
-documentation is consistently improving. We improve documentation for several
-reasons:
-
- * To make content fixes, such as grammar/typo corrections.
-
- * To add information and/or examples to existing sections that need to be
- expanded.
-
- * To document Django features that aren't yet documented. (The list of
- such features is shrinking but exists nonetheless.)
-
- * To add documentation for new features as new features get added, or as
- Django APIs or behaviors change.
-
-Django's documentation is kept in the same source control system as its code. It
-lives in the `django/trunk/docs`_ directory of our Subversion repository. Each
-document online is a separate text file in the repository.
-
-.. _django/trunk/docs: http://code.djangoproject.com/browser/django/trunk/docs
-
-Where to get it
-===============
-
-You can read Django documentation in several ways. They are, in order of
-preference:
-
-On the Web
-----------
-
-The most recent version of the Django documentation lives at
-http://docs.djangoproject.com/en/dev/. These HTML pages are generated
-automatically from the text files in source control. That means they reflect the
-"latest and greatest" in Django -- they include the very latest corrections and
-additions, and they discuss the latest Django features, which may only be
-available to users of the Django development version. (See "Differences between
-versions" below.)
-
-We encourage you to help improve the docs by submitting changes, corrections and
-suggestions in the `ticket system`_. The Django developers actively monitor the
-ticket system and use your feedback to improve the documentation for everybody.
-
-Note, however, that tickets should explicitly relate to the documentation,
-rather than asking broad tech-support questions. If you need help with your
-particular Django setup, try the `django-users mailing list`_ or the `#django
-IRC channel`_ instead.
-
-.. _ticket system: http://code.djangoproject.com/simpleticket?component=Documentation
-.. _django-users mailing list: http://groups.google.com/group/django-users
-.. _#django IRC channel: irc://irc.freenode.net/django
-
-In plain text
--------------
-
-For offline reading, or just for convenience, you can read the Django
-documentation in plain text.
-
-If you're using an official release of Django, note that the zipped package
-(tarball) of the code includes a ``docs/`` directory, which contains all the
-documentation for that release.
-
-If you're using the development version of Django (aka the Subversion "trunk"),
-note that the ``docs/`` directory contains all of the documentation. You can
-``svn update`` it, just as you ``svn update`` the Python code, in order to get
-the latest changes.
-
-You can check out the latest Django documentation from Subversion using this
-shell command:
-
-.. code-block:: bash
-
- $ svn co http://code.djangoproject.com/svn/django/trunk/docs/ django_docs
-
-One low-tech way of taking advantage of the text documentation is by using the
-Unix ``grep`` utility to search for a phrase in all of the documentation. For
-example, this will show you each mention of the phrase "max_length" in any
-Django document:
-
-.. code-block:: bash
-
- $ grep -r max_length /path/to/django/docs/
-
-As HTML, locally
-----------------
-
-You can get a local copy of the HTML documentation following a few easy steps:
-
- * Django's documentation uses a system called Sphinx__ to convert from
- plain text to HTML. You'll need to install Sphinx by either downloading
- and installing the package from the Sphinx Web site, or by Python's
- ``easy_install``:
-
- .. code-block:: bash
-
- $ easy_install Sphinx
-
- * Then, just use the included ``Makefile`` to turn the documentation into
- HTML:
-
- .. code-block:: bash
-
- $ cd path/to/django/docs
- $ make html
-
- You'll need `GNU Make`__ installed for this.
-
- * The HTML documentation will be placed in ``docs/_build/html``.
-
-.. note::
-
- Generation of the Django documentation will work with Sphinx version 0.6
- or newer, but we recommend going straight to Sphinx 1.0.2 or newer.
-
-__ http://sphinx.pocoo.org/
-__ http://www.gnu.org/software/make/
-
-Differences between versions
-============================
-
-As previously mentioned, the text documentation in our Subversion repository
-contains the "latest and greatest" changes and additions. These changes often
-include documentation of new features added in the Django development version
--- the Subversion ("trunk") version of Django. For that reason, it's worth
-pointing out our policy on keeping straight the documentation for various
-versions of the framework.
-
-We follow this policy:
-
- * The primary documentation on djangoproject.com is an HTML version of the
- latest docs in Subversion. These docs always correspond to the latest
- official Django release, plus whatever features we've added/changed in
- the framework *since* the latest release.
-
- * As we add features to Django's development version, we try to update the
- documentation in the same Subversion commit transaction.
-
- * To distinguish feature changes/additions in the docs, we use the phrase:
- "New in version X.Y", being X.Y the next release version (hence, the one
- being developed).
-
- * Documentation for a particular Django release is frozen once the version
- has been released officially. It remains a snapshot of the docs as of the
- moment of the release. We will make exceptions to this rule in
- the case of retroactive security updates or other such retroactive
- changes. Once documentation is frozen, we add a note to the top of each
- frozen document that says "These docs are frozen for Django version XXX"
- and links to the current version of that document.
-
- * The `main documentation Web page`_ includes links to documentation for
- all previous versions.
-
-.. _main documentation Web page: http://docs.djangoproject.com/en/dev/
diff --git a/parts/django/docs/man/daily_cleanup.1 b/parts/django/docs/man/daily_cleanup.1
deleted file mode 100644
index dfcde1d..0000000
--- a/parts/django/docs/man/daily_cleanup.1
+++ /dev/null
@@ -1,34 +0,0 @@
-.TH "daily_cleanup.py" "1" "August 2007" "Django Project" ""
-.SH "NAME"
-daily_cleanup.py \- Database clean-up for the Django Web framework
-.SH "SYNOPSIS"
-.B daily_cleanup.py
-
-.SH "DESCRIPTION"
-Removes stale session data from a Django database. This means, any session data
-which has an expiry date prior to the date the script is run.
-.sp
-The script can be run manually or can be scheduled to run at regular
-intervals as a
-.BI cron
-job.
-
-.SH "ENVIRONMENT"
-.TP
-.I DJANGO_SETTINGS_MODULE
-This environment variable defines the settings module to be read.
-It should be in Python-import form, e.g. "myproject.settings".
-
-.SH "SEE ALSO"
-The sessions documentation:
-.sp
-.I http://docs.djangoproject.com/en/dev/topics/http/sessions/
-
-.SH "AUTHORS/CREDITS"
-Originally developed at World Online in Lawrence, Kansas, USA. Refer to the
-AUTHORS file in the Django distribution for contributors.
-
-.SH "LICENSE"
-New BSD license. For the full license text refer to the LICENSE file in the
-Django distribution.
-
diff --git a/parts/django/docs/man/django-admin.1 b/parts/django/docs/man/django-admin.1
deleted file mode 100644
index 016c80f..0000000
--- a/parts/django/docs/man/django-admin.1
+++ /dev/null
@@ -1,226 +0,0 @@
-.TH "django-admin.py" "1" "March 2008" "Django Project" ""
-.SH "NAME"
-django\-admin.py \- Utility script for the Django Web framework
-.SH "SYNOPSIS"
-.B django\-admin.py
-.I <action>
-.B [options]
-.sp
-.SH "DESCRIPTION"
-This utility script provides commands for creation and maintenance of Django
-projects and apps.
-.sp
-With the exception of
-.BI startproject,
-all commands listed below can also be performed with the
-.BI manage.py
-script found at the top level of each Django project directory.
-.sp
-.SH "ACTIONS"
-.TP
-.BI cleanup
-Cleans out old data from the database (only expired sessions at the moment).
-.TP
-.BI "compilemessages [" "\-\-locale=LOCALE" "]"
-Compiles .po files to .mo files for use with builtin gettext support.
-.TP
-.BI "createcachetable [" "tablename" "]"
-Creates the table needed to use the SQL cache backend
-.TP
-.BI "createsuperuser [" "\-\-username=USERNAME" "] [" "\-\-email=EMAIL" "]"
-Creates a superuser account (a user who has all permissions).
-.TP
-.B dbshell
-Runs the command\-line client for the specified
-.BI database ENGINE.
-.TP
-.B diffsettings
-Displays differences between the current
-.B settings.py
-and Django's default settings. Settings that don't appear in the defaults are
-followed by "###".
-.TP
-.BI "dumpdata [" "\-\-all" "] [" "\-\-format=FMT" "] [" "\-\-indent=NUM" "] [" "\-\-natural=NATURAL" "] [" "appname appname appname.Model ..." "]"
-Outputs to standard output all data in the database associated with the named
-application(s).
-.TP
-.BI flush
-Returns the database to the state it was in immediately after syncdb was
-executed.
-.TP
-.B inspectdb
-Introspects the database tables in the database specified in settings.py and outputs a Django
-model module.
-.TP
-.BI "loaddata [" "fixture fixture ..." "]"
-Searches for and loads the contents of the named fixture into the database.
-.TP
-.BI "install [" "appname ..." "]"
-Executes
-.B sqlall
-for the given app(s) in the current database.
-.TP
-.BI "makemessages [" "\-\-locale=LOCALE" "] [" "\-\-domain=DOMAIN" "] [" "\-\-extension=EXTENSION" "] [" "\-\-all" "] [" "\-\-symlinks" "] [" "\-\-ignore=PATTERN" "] [" "\-\-no\-default\-ignore" "]"
-Runs over the entire source tree of the current directory and pulls out all
-strings marked for translation. It creates (or updates) a message file in the
-conf/locale (in the django tree) or locale (for project and application) directory.
-.TP
-.BI "reset [" "appname ..." "]"
-Executes
-.B sqlreset
-for the given app(s) in the current database.
-.TP
-.BI "runfcgi [" "KEY=val" "] [" "KEY=val" "] " "..."
-Runs this project as a FastCGI application. Requires flup. Use
-.B runfcgi help
-for help on the KEY=val pairs.
-.TP
-.BI "runserver [" "\-\-noreload" "] [" "\-\-adminmedia=ADMIN_MEDIA_PATH" "] [" "port|ipaddr:port" "]"
-Starts a lightweight Web server for development.
-.TP
-.BI "shell [" "\-\-plain" "]"
-Runs a Python interactive interpreter. Tries to use IPython, if it's available.
-The
-.BI \-\-plain
-option forces the use of the standard Python interpreter even when IPython is
-installed.
-.TP
-.BI "sql [" "appname ..." "]"
-Prints the CREATE TABLE SQL statements for the given app name(s).
-.TP
-.BI "sqlall [" "appname ..." "]"
-Prints the CREATE TABLE, initial\-data and CREATE INDEX SQL statements for the
-given model module name(s).
-.TP
-.BI "sqlclear [" "appname ..." "]"
-Prints the DROP TABLE SQL statements for the given app name(s).
-.TP
-.BI "sqlcustom [" "appname ..." "]"
-Prints the custom SQL statements for the given app name(s).
-.TP
-.BI "sqlflush [" "appname ..." "]"
-Prints the SQL statements that would be executed for the "flush"
-command.
-.TP
-.BI "sqlindexes [" "appname ..." "]"
-Prints the CREATE INDEX SQL statements for the given model module name(s).
-.TP
-.BI "sqlinitialdata [" "appname ..." "]"
-Prints the initial INSERT SQL statements for the given app name(s).
-.TP
-.BI "sqlreset [" "appname ..." "]"
-Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app
-name(s).
-.TP
-.BI "sqlsequencereset [" "appname ..." "]"
-Prints the SQL statements for resetting PostgreSQL sequences for the
-given app name(s).
-.TP
-.BI "startapp [" "appname" "]"
-Creates a Django app directory structure for the given app name in
-the current directory.
-.TP
-.BI "startproject [" "projectname" "]"
-Creates a Django project directory structure for the given project name
-in the current directory.
-.TP
-.BI syncdb
-Creates the database tables for all apps in INSTALLED_APPS whose tables
-haven't already been created.
-.TP
-.BI "test [" "\-\-verbosity" "] [" "\-\-failfast" "] [" "appname ..." "]"
-Runs the test suite for the specified applications, or the entire project if
-no apps are specified
-.TP
-.BI "testserver [" "\-\-addrport=ipaddr|port" "] [" "fixture fixture ..." "]"
-Runs the test suite for the specified applications, or the entire project if
-no apps are specified
-.TP
-.BI validate
-Validates all installed models.
-.SH "OPTIONS"
-.TP
-.I \-\-version
-Show program's version number and exit.
-.TP
-.I \-h, \-\-help
-Show this help message and exit.
-.TP
-.I \-\-settings=SETTINGS
-Python path to settings module, e.g. "myproject.settings.main". If
-this isn't provided, the DJANGO_SETTINGS_MODULE environment variable
-will be used.
-.TP
-.I \-\-pythonpath=PYTHONPATH
-Lets you manually add a directory the Python path,
-e.g. "/home/djangoprojects/myproject".
-.TP
-.I \-\-plain
-Use plain Python, not IPython, for the "shell" command.
-.TP
-.I \-\-noinput
-Do not prompt the user for input.
-.TP
-.I \-\-noreload
-Disable the development server's auto\-reloader.
-.TP
-.I \-\-verbosity=VERBOSITY
-Verbosity level: 0=minimal output, 1=normal output, 2=all output.
-.TP
-.I \-\-adminmedia=ADMIN_MEDIA_PATH
-Specifies the directory from which to serve admin media when using the development server.
-.TP
-.I \-\-traceback
-By default, django-admin.py will show a simple error message whenever an
-error occurs. If you specify this option, django-admin.py will
-output a full stack trace whenever an exception is raised.
-.TP
-.I \-l, \-\-locale=LOCALE
-The locale to process when using makemessages or compilemessages.
-.TP
-.I \-d, \-\-domain=DOMAIN
-The domain of the message files (default: "django") when using makemessages.
-.TP
-.I \-e, \-\-extension=EXTENSION
-The file extension(s) to examine (default: ".html", separate multiple
-extensions with commas, or use -e multiple times).
-.TP
-.I \-s, \-\-symlinks
-Follows symlinks to directories when examining source code and templates for
-translation strings.
-.TP
-.I \-i, \-\-ignore=PATTERN
-Ignore files or directories matching this glob-style pattern. Use multiple
-times to ignore more.
-.TP
-.I \-\-no\-default\-ignore
-Don't ignore the common private glob-style patterns 'CVS', '.*' and '*~'.
-.TP
-.I \-a, \-\-all
-Process all available locales when using makemessages..SH "ENVIRONMENT"
-.TP
-.I DJANGO_SETTINGS_MODULE
-In the absence of the
-.BI \-\-settings
-option, this environment variable defines the settings module to be read.
-It should be in Python-import form, e.g. "myproject.settings".
-.I \-\-database=DB
-Used to specify the database on which a command will operate. If not
-specified, this option will default to an alias of "default".
-.TP
-
-.SH "SEE ALSO"
-Full descriptions of all these options, with examples, as well as documentation
-for the rest of the Django framework, can be found on the Django site:
-.sp
-.I http://docs.djangoproject.com/en/dev/
-.sp
-or in the distributed documentation.
-.SH "AUTHORS/CREDITS"
-Originally developed at World Online in Lawrence, Kansas, USA. Refer to the
-AUTHORS file in the Django distribution for contributors.
-.sp
-.SH "LICENSE"
-New BSD license. For the full license text refer to the LICENSE file in the
-Django distribution.
-
diff --git a/parts/django/docs/man/gather_profile_stats.1 b/parts/django/docs/man/gather_profile_stats.1
deleted file mode 100644
index fc56ee2..0000000
--- a/parts/django/docs/man/gather_profile_stats.1
+++ /dev/null
@@ -1,26 +0,0 @@
-.TH "gather_profile_stats.py" "1" "August 2007" "Django Project" ""
-.SH "NAME"
-gather_profile_stats.py \- Performance analysis tool for the Django Web
-framework
-.SH "SYNOPSIS"
-.B python gather_profile_stats.py
-.I <path>
-
-.SH "DESCRIPTION"
-This utility script aggregates profiling logs generated using Python's
-hotshot profiler. The sole command-line argument is the full path to the
-directory containing the profiling logfiles.
-
-.SH "SEE ALSO"
-Discussion of profiling Django applications on the Django project's wiki:
-.sp
-.I http://www.djangoproject.com/wiki/ProfilingDjango
-
-.SH "AUTHORS/CREDITS"
-Originally developed at World Online in Lawrence, Kansas, USA. Refer to the
-AUTHORS file in the Django distribution for contributors.
-
-.SH "LICENSE"
-New BSD license. For the full license text refer to the LICENSE file in the
-Django distribution.
-
diff --git a/parts/django/docs/misc/api-stability.txt b/parts/django/docs/misc/api-stability.txt
deleted file mode 100644
index 456d84b..0000000
--- a/parts/django/docs/misc/api-stability.txt
+++ /dev/null
@@ -1,152 +0,0 @@
-=============
-API stability
-=============
-
-:doc:`The release of Django 1.0 </releases/1.0>` comes with a promise of API
-stability and forwards-compatibility. In a nutshell, this means that code you
-develop against Django 1.0 will continue to work against 1.1 unchanged, and you
-should need to make only minor changes for any 1.X release.
-
-What "stable" means
-===================
-
-In this context, stable means:
-
- - All the public APIs -- everything documented in the linked documents below,
- and all methods that don't begin with an underscore -- will not be moved or
- renamed without providing backwards-compatible aliases.
-
- - If new features are added to these APIs -- which is quite possible --
- they will not break or change the meaning of existing methods. In other
- words, "stable" does not (necessarily) mean "complete."
-
- - If, for some reason, an API declared stable must be removed or replaced, it
- will be declared deprecated but will remain in the API for at least two
- minor version releases. Warnings will be issued when the deprecated method
- is called.
-
- See :ref:`official-releases` for more details on how Django's version
- numbering scheme works, and how features will be deprecated.
-
- - We'll only break backwards compatibility of these APIs if a bug or
- security hole makes it completely unavoidable.
-
-Stable APIs
-===========
-
-In general, everything covered in the documentation -- with the exception of
-anything in the :doc:`internals area </internals/index>` is considered stable as
-of 1.0. This includes these APIs:
-
- - :doc:`Authorization </topics/auth>`
-
- - :doc:`Caching </topics/cache>`.
-
- - :doc:`Model definition, managers, querying and transactions
- </topics/db/index>`
-
- - :doc:`Sending e-mail </topics/email>`.
-
- - :doc:`File handling and storage </topics/files>`
-
- - :doc:`Forms </topics/forms/index>`
-
- - :doc:`HTTP request/response handling </topics/http/index>`, including file
- uploads, middleware, sessions, URL resolution, view, and shortcut APIs.
-
- - :doc:`Generic views </topics/http/generic-views>`.
-
- - :doc:`Internationalization </topics/i18n/index>`.
-
- - :doc:`Pagination </topics/pagination>`
-
- - :doc:`Serialization </topics/serialization>`
-
- - :doc:`Signals </topics/signals>`
-
- - :doc:`Templates </topics/templates>`, including the language, Python-level
- :doc:`template APIs </ref/templates/index>`, and :doc:`custom template tags
- and libraries </howto/custom-template-tags>`. We may add new template
- tags in the future and the names may inadvertently clash with
- external template tags. Before adding any such tags, we'll ensure that
- Django raises an error if it tries to load tags with duplicate names.
-
- - :doc:`Testing </topics/testing>`
-
- - :doc:`django-admin utility </ref/django-admin>`.
-
- - :doc:`Built-in middleware </ref/middleware>`
-
- - :doc:`Request/response objects </ref/request-response>`.
-
- - :doc:`Settings </ref/settings>`. Note, though that while the :doc:`list of
- built-in settings </ref/settings>` can be considered complete we may -- and
- probably will -- add new settings in future versions. This is one of those
- places where "'stable' does not mean 'complete.'"
-
- - :doc:`Built-in signals </ref/signals>`. Like settings, we'll probably add
- new signals in the future, but the existing ones won't break.
-
- - :doc:`Unicode handling </ref/unicode>`.
-
- - Everything covered by the :doc:`HOWTO guides </howto/index>`.
-
-``django.utils``
-----------------
-
-Most of the modules in ``django.utils`` are designed for internal use. Only
-the following parts of :doc:`django.utils </ref/utils>` can be considered stable:
-
- - ``django.utils.cache``
- - ``django.utils.datastructures.SortedDict`` -- only this single class; the
- rest of the module is for internal use.
- - ``django.utils.encoding``
- - ``django.utils.feedgenerator``
- - ``django.utils.http``
- - ``django.utils.safestring``
- - ``django.utils.translation``
- - ``django.utils.tzinfo``
-
-Exceptions
-==========
-
-There are a few exceptions to this stability and backwards-compatibility
-promise.
-
-Security fixes
---------------
-
-If we become aware of a security problem -- hopefully by someone following our
-:ref:`security reporting policy <reporting-security-issues>` -- we'll do
-everything necessary to fix it. This might mean breaking backwards compatibility; security trumps the compatibility guarantee.
-
-Contributed applications (``django.contrib``)
----------------------------------------------
-
-While we'll make every effort to keep these APIs stable -- and have no plans to
-break any contrib apps -- this is an area that will have more flux between
-releases. As the Web evolves, Django must evolve with it.
-
-However, any changes to contrib apps will come with an important guarantee:
-we'll make sure it's always possible to use an older version of a contrib app if
-we need to make changes. Thus, if Django 1.5 ships with a backwards-incompatible
-``django.contrib.flatpages``, we'll make sure you can still use the Django 1.4
-version alongside Django 1.5. This will continue to allow for easy upgrades.
-
-Historically, apps in ``django.contrib`` have been more stable than the core, so
-in practice we probably won't have to ever make this exception. However, it's
-worth noting if you're building apps that depend on ``django.contrib``.
-
-APIs marked as internal
------------------------
-
-Certain APIs are explicitly marked as "internal" in a couple of ways:
-
- - Some documentation refers to internals and mentions them as such. If the
- documentation says that something is internal, we reserve the right to
- change it.
-
- - Functions, methods, and other objects prefixed by a leading underscore
- (``_``). This is the standard Python way of indicating that something is
- private; if any method starts with a single ``_``, it's an internal API.
-
diff --git a/parts/django/docs/misc/design-philosophies.txt b/parts/django/docs/misc/design-philosophies.txt
deleted file mode 100644
index 631097a..0000000
--- a/parts/django/docs/misc/design-philosophies.txt
+++ /dev/null
@@ -1,314 +0,0 @@
-===================
-Design philosophies
-===================
-
-This document explains some of the fundamental philosophies Django's developers
-have used in creating the framework. Its goal is to explain the past and guide
-the future.
-
-Overall
-=======
-
-.. _loose-coupling:
-
-Loose coupling
---------------
-
-.. index:: coupling; loose
-
-A fundamental goal of Django's stack is `loose coupling and tight cohesion`_.
-The various layers of the framework shouldn't "know" about each other unless
-absolutely necessary.
-
-For example, the template system knows nothing about Web requests, the database
-layer knows nothing about data display and the view system doesn't care which
-template system a programmer uses.
-
-Although Django comes with a full stack for convenience, the pieces of the
-stack are independent of another wherever possible.
-
-.. _`loose coupling and tight cohesion`: http://c2.com/cgi/wiki?CouplingAndCohesion
-
-.. _less-code:
-
-Less code
----------
-
-Django apps should use as little code as possible; they should lack boilerplate.
-Django should take full advantage of Python's dynamic capabilities, such as
-introspection.
-
-.. _quick-development:
-
-Quick development
------------------
-
-The point of a Web framework in the 21st century is to make the tedious aspects
-of Web development fast. Django should allow for incredibly quick Web
-development.
-
-.. _dry:
-
-Don't repeat yourself (DRY)
----------------------------
-
-.. index::
- single: DRY
- single: Don't repeat yourself
-
-Every distinct concept and/or piece of data should live in one, and only one,
-place. Redundancy is bad. Normalization is good.
-
-The framework, within reason, should deduce as much as possible from as little
-as possible.
-
-.. seealso::
-
- The `discussion of DRY on the Portland Pattern Repository`__
-
- __ http://c2.com/cgi/wiki?DontRepeatYourself
-
-.. _explicit-is-better-than-implicit:
-
-Explicit is better than implicit
---------------------------------
-
-This, a `core Python principle`_, means Django shouldn't do too much "magic."
-Magic shouldn't happen unless there's a really good reason for it. Magic is
-worth using only if it creates a huge convenience unattainable in other ways,
-and it isn't implemented in a way that confuses developers who are trying to
-learn how to use the feature.
-
-.. _`core Python principle`: http://www.python.org/dev/peps/pep-0020/
-
-.. _consistency:
-
-Consistency
------------
-
-The framework should be consistent at all levels. Consistency applies to
-everything from low-level (the Python coding style used) to high-level (the
-"experience" of using Django).
-
-Models
-======
-
-Explicit is better than implicit
---------------------------------
-
-Fields shouldn't assume certain behaviors based solely on the name of the
-field. This requires too much knowledge of the system and is prone to errors.
-Instead, behaviors should be based on keyword arguments and, in some cases, on
-the type of the field.
-
-Include all relevant domain logic
----------------------------------
-
-Models should encapsulate every aspect of an "object," following Martin
-Fowler's `Active Record`_ design pattern.
-
-This is why both the data represented by a model and information about
-it (its human-readable name, options like default ordering, etc.) are
-defined in the model class; all the information needed to understand a
-given model should be stored *in* the model.
-
-.. _`Active Record`: http://www.martinfowler.com/eaaCatalog/activeRecord.html
-
-Database API
-============
-
-The core goals of the database API are:
-
-SQL efficiency
---------------
-
-It should execute SQL statements as few times as possible, and it should
-optimize statements internally.
-
-This is why developers need to call ``save()`` explicitly, rather than the
-framework saving things behind the scenes silently.
-
-This is also why the ``select_related()`` ``QuerySet`` method exists. It's an
-optional performance booster for the common case of selecting "every related
-object."
-
-Terse, powerful syntax
-----------------------
-
-The database API should allow rich, expressive statements in as little syntax
-as possible. It should not rely on importing other modules or helper objects.
-
-Joins should be performed automatically, behind the scenes, when necessary.
-
-Every object should be able to access every related object, systemwide. This
-access should work both ways.
-
-Option to drop into raw SQL easily, when needed
------------------------------------------------
-
-The database API should realize it's a shortcut but not necessarily an
-end-all-be-all. The framework should make it easy to write custom SQL -- entire
-statements, or just custom ``WHERE`` clauses as custom parameters to API calls.
-
-URL design
-==========
-
-Loose coupling
---------------
-
-URLs in a Django app should not be coupled to the underlying Python code. Tying
-URLs to Python function names is a Bad And Ugly Thing.
-
-Along these lines, the Django URL system should allow URLs for the same app to
-be different in different contexts. For example, one site may put stories at
-``/stories/``, while another may use ``/news/``.
-
-Infinite flexibility
---------------------
-
-URLs should be as flexible as possible. Any conceivable URL design should be
-allowed.
-
-Encourage best practices
-------------------------
-
-The framework should make it just as easy (or even easier) for a developer to
-design pretty URLs than ugly ones.
-
-File extensions in Web-page URLs should be avoided.
-
-Vignette-style commas in URLs deserve severe punishment.
-
-.. _definitive-urls:
-
-Definitive URLs
----------------
-
-.. index:: urls; definitive
-
-Technically, ``foo.com/bar`` and ``foo.com/bar/`` are two different URLs, and
-search-engine robots (and some Web traffic-analyzing tools) would treat them as
-separate pages. Django should make an effort to "normalize" URLs so that
-search-engine robots don't get confused.
-
-This is the reasoning behind the :setting:`APPEND_SLASH` setting.
-
-Template system
-===============
-
-.. _separation-of-logic-and-presentation:
-
-Separate logic from presentation
---------------------------------
-
-We see a template system as a tool that controls presentation and
-presentation-related logic -- and that's it. The template system shouldn't
-support functionality that goes beyond this basic goal.
-
-If we wanted to put everything in templates, we'd be using PHP. Been there,
-done that, wised up.
-
-Discourage redundancy
----------------------
-
-The majority of dynamic Web sites use some sort of common sitewide design --
-a common header, footer, navigation bar, etc. The Django template system should
-make it easy to store those elements in a single place, eliminating duplicate
-code.
-
-This is the philosophy behind :ref:`template inheritance
-<template-inheritance>`.
-
-Be decoupled from HTML
-----------------------
-
-The template system shouldn't be designed so that it only outputs HTML. It
-should be equally good at generating other text-based formats, or just plain
-text.
-
-XML should not be used for template languages
----------------------------------------------
-
-.. index:: xml; suckiness of
-
-Using an XML engine to parse templates introduces a whole new world of human
-error in editing templates -- and incurs an unacceptable level of overhead in
-template processing.
-
-Assume designer competence
---------------------------
-
-The template system shouldn't be designed so that templates necessarily are
-displayed nicely in WYSIWYG editors such as Dreamweaver. That is too severe of
-a limitation and wouldn't allow the syntax to be as nice as it is. Django
-expects template authors are comfortable editing HTML directly.
-
-Treat whitespace obviously
---------------------------
-
-The template system shouldn't do magic things with whitespace. If a template
-includes whitespace, the system should treat the whitespace as it treats text
--- just display it. Any whitespace that's not in a template tag should be
-displayed.
-
-Don't invent a programming language
------------------------------------
-
-The template system intentionally doesn't allow the following:
-
- * Assignment to variables
- * Advanced logic
-
-The goal is not to invent a programming language. The goal is to offer just
-enough programming-esque functionality, such as branching and looping, that is
-essential for making presentation-related decisions.
-
-The Django template system recognizes that templates are most often written by
-*designers*, not *programmers*, and therefore should not assume Python
-knowledge.
-
-Safety and security
--------------------
-
-The template system, out of the box, should forbid the inclusion of malicious
-code -- such as commands that delete database records.
-
-This is another reason the template system doesn't allow arbitrary Python code.
-
-Extensibility
--------------
-
-The template system should recognize that advanced template authors may want
-to extend its technology.
-
-This is the philosophy behind custom template tags and filters.
-
-Views
-=====
-
-Simplicity
-----------
-
-Writing a view should be as simple as writing a Python function. Developers
-shouldn't have to instantiate a class when a function will do.
-
-Use request objects
--------------------
-
-Views should have access to a request object -- an object that stores metadata
-about the current request. The object should be passed directly to a view
-function, rather than the view function having to access the request data from
-a global variable. This makes it light, clean and easy to test views by passing
-in "fake" request objects.
-
-Loose coupling
---------------
-
-A view shouldn't care about which template system the developer uses -- or even
-whether a template system is used at all.
-
-Differentiate between GET and POST
-----------------------------------
-
-GET and POST are distinct; developers should explicitly use one or the other.
-The framework should make it easy to distinguish between GET and POST data.
diff --git a/parts/django/docs/misc/distributions.txt b/parts/django/docs/misc/distributions.txt
deleted file mode 100644
index d9281ad..0000000
--- a/parts/django/docs/misc/distributions.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-===================================
-Third-party distributions of Django
-===================================
-
-Many third-party distributors are now providing versions of Django integrated
-with their package-management systems. These can make installation and upgrading
-much easier for users of Django since the integration includes the ability to
-automatically install dependencies (like database adapters) that Django
-requires.
-
-Typically, these packages are based on the latest stable release of Django, so
-if you want to use the development version of Django you'll need to follow the
-instructions for :ref:`installing the development version
-<installing-development-version>` from our Subversion repository.
-
-If you're using Linux or a Unix installation, such as OpenSolaris,
-check with your distributor to see if they already package Django. If
-you're using a Linux distro and don't know how to find out if a package
-is available, then now is a good time to learn. The Django Wiki contains
-a list of `Third Party Distributions`_ to help you out.
-
-.. _`Third Party Distributions`: http://code.djangoproject.com/wiki/Distributions
-
-
-For distributors
-================
-
-If you'd like to package Django for distribution, we'd be happy to help out!
-Please join the `django-developers mailing list`_ and introduce yourself.
-
-We also encourage all distributors to subscribe to the `django-announce mailing
-list`_, which is a (very) low-traffic list for announcing new releases of Django
-and important bugfixes.
-
-.. _django-developers mailing list: http://groups.google.com/group/django-developers/
-.. _django-announce mailing list: http://groups.google.com/group/django-announce/
diff --git a/parts/django/docs/misc/index.txt b/parts/django/docs/misc/index.txt
deleted file mode 100644
index b42baeb..0000000
--- a/parts/django/docs/misc/index.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Meta-documentation and miscellany
-=================================
-
-Documentation that we can't find a more organized place for. Like that drawer in
-your kitchen with the scissors, batteries, duct tape, and other junk.
-
-.. toctree::
- :maxdepth: 2
-
- api-stability
- design-philosophies
- distributions
diff --git a/parts/django/docs/obsolete/_images/formrow.png b/parts/django/docs/obsolete/_images/formrow.png
deleted file mode 100644
index 164dd26..0000000
--- a/parts/django/docs/obsolete/_images/formrow.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/obsolete/_images/module.png b/parts/django/docs/obsolete/_images/module.png
deleted file mode 100644
index 6acda97..0000000
--- a/parts/django/docs/obsolete/_images/module.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/obsolete/_images/objecttools_01.png b/parts/django/docs/obsolete/_images/objecttools_01.png
deleted file mode 100644
index 0aba816..0000000
--- a/parts/django/docs/obsolete/_images/objecttools_01.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/obsolete/_images/objecttools_02.png b/parts/django/docs/obsolete/_images/objecttools_02.png
deleted file mode 100644
index 06a8540..0000000
--- a/parts/django/docs/obsolete/_images/objecttools_02.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/obsolete/admin-css.txt b/parts/django/docs/obsolete/admin-css.txt
deleted file mode 100644
index f4cca54..0000000
--- a/parts/django/docs/obsolete/admin-css.txt
+++ /dev/null
@@ -1,186 +0,0 @@
-======================================
-Customizing the Django admin interface
-======================================
-
-.. warning::
-
- The design of the admin has changed somewhat since this document was
- written, and parts may not apply any more. This document is no longer
- maintained since an official API for customizing the Django admin interface
- is in development.
-
-Django's dynamic admin interface gives you a fully-functional admin for free
-with no hand-coding required. The dynamic admin is designed to be
-production-ready, not just a starting point, so you can use it as-is on a real
-site. While the underlying format of the admin pages is built in to Django, you
-can customize the look and feel by editing the admin stylesheet and images.
-
-Here's a quick and dirty overview some of the main styles and classes used in
-the Django admin CSS.
-
-Modules
-=======
-
-The ``.module`` class is a basic building block for grouping content in the
-admin. It's generally applied to a ``div`` or a ``fieldset``. It wraps the content
-group in a box and applies certain styles to the elements within. An ``h2``
-within a ``div.module`` will align to the top of the ``div`` as a header for the
-whole group.
-
-.. image:: _images/module.png
- :alt: Example use of module class on admin homepage
-
-Column Types
-============
-
-.. note::
-
- All admin pages (except the dashboard) are fluid-width. All fixed-width
- classes from previous Django versions have been removed.
-
-The base template for each admin page has a block that defines the column
-structure for the page. This sets a class on the page content area
-(``div#content``) so everything on the page knows how wide it should be. There
-are three column types available.
-
-colM
- This is the default column setting for all pages. The "M" stands for "main".
- Assumes that all content on the page is in one main column
- (``div#content-main``).
-colMS
- This is for pages with one main column and a sidebar on the right. The "S"
- stands for "sidebar". Assumes that main content is in ``div#content-main``
- and sidebar content is in ``div#content-related``. This is used on the main
- admin page.
-colSM
- Same as above, with the sidebar on the left. The source order of the columns
- doesn't matter.
-
-For instance, you could stick this in a template to make a two-column page with
-the sidebar on the right:
-
-.. code-block:: html+django
-
- {% block coltype %}colMS{% endblock %}
-
-Text Styles
-===========
-
-Font Sizes
-----------
-
-Most HTML elements (headers, lists, etc.) have base font sizes in the stylesheet
-based on context. There are three classes are available for forcing text to a
-certain size in any context.
-
-small
- 11px
-tiny
- 10px
-mini
- 9px (use sparingly)
-
-Font Styles and Alignment
--------------------------
-
-There are also a few styles for styling text.
-
-.quiet
- Sets font color to light gray. Good for side notes in instructions. Combine
- with ``.small`` or ``.tiny`` for sheer excitement.
-.help
- This is a custom class for blocks of inline help text explaining the
- function of form elements. It makes text smaller and gray, and when applied
- to ``p`` elements within ``.form-row`` elements (see Form Styles below),
- it will offset the text to align with the form field. Use this for help
- text, instead of ``small quiet``. It works on other elements, but try to
- put the class on a ``p`` whenever you can.
-.align-left
- It aligns the text left. Only works on block elements containing inline
- elements.
-.align-right
- Are you paying attention?
-.nowrap
- Keeps text and inline objects from wrapping. Comes in handy for table
- headers you want to stay on one line.
-
-Floats and Clears
------------------
-
-float-left
- floats left
-float-right
- floats right
-clear
- clears all
-
-Object Tools
-============
-
-Certain actions which apply directly to an object are used in form and
-changelist pages. These appear in a "toolbar" row above the form or changelist,
-to the right of the page. The tools are wrapped in a ``ul`` with the class
-``object-tools``. There are two custom tool types which can be defined with an
-additional class on the ``a`` for that tool. These are ``.addlink`` and
-``.viewsitelink``.
-
-Example from a changelist page:
-
-.. code-block:: html+django
-
- <ul class="object-tools">
- <li><a href="/stories/add/" class="addlink">Add redirect</a></li>
- </ul>
-
-.. image:: _images/objecttools_01.png
- :alt: Object tools on a changelist page
-
-and from a form page:
-
-.. code-block:: html+django
-
- <ul class="object-tools">
- <li><a href="/history/303/152383/">History</a></li>
- <li><a href="/r/303/152383/" class="viewsitelink">View on site</a></li>
- </ul>
-
-.. image:: _images/objecttools_02.png
- :alt: Object tools on a form page
-
-Form Styles
-===========
-
-Fieldsets
----------
-
-Admin forms are broken up into groups by ``fieldset`` elements. Each form fieldset
-should have a class ``.module``. Each fieldset should have a header ``h2`` within the
-fieldset at the top (except the first group in the form, and in some cases where the
-group of fields doesn't have a logical label).
-
-Each fieldset can also take extra classes in addition to ``.module`` to apply
-appropriate formatting to the group of fields.
-
-.aligned
- This will align the labels and inputs side by side on the same line.
-.wide
- Used in combination with ``.aligned`` to widen the space available for the
- labels.
-
-Form Rows
----------
-
-Each row of the form (within the ``fieldset``) should be enclosed in a ``div``
-with class ``form-row``. If the field in the row is required, a class of
-``required`` should also be added to the ``div.form-row``.
-
-.. image:: _images/formrow.png
- :alt: Example use of form-row class
-
-Labels
-------
-
-Form labels should always precede the field, except in the case
-of checkboxes and radio buttons, where the ``input`` should come first. Any
-explanation or help text should follow the ``label`` in a ``p`` with class
-``.help``.
diff --git a/parts/django/docs/obsolete/index.txt b/parts/django/docs/obsolete/index.txt
deleted file mode 100644
index ddc8623..0000000
--- a/parts/django/docs/obsolete/index.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Deprecated/obsolete documentation
-=================================
-
-These documents cover features that have been deprecated or that have been
-replaced in newer versions of Django. They're preserved here for folks using old
-versions of Django or those still using deprecated APIs. No new code based on
-these APIs should be written.
-
-.. toctree::
- :maxdepth: 1
-
- admin-css \ No newline at end of file
diff --git a/parts/django/docs/ref/authbackends.txt b/parts/django/docs/ref/authbackends.txt
deleted file mode 100644
index a50b414..0000000
--- a/parts/django/docs/ref/authbackends.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-=======================
-Authentication backends
-=======================
-
-.. module:: django.contrib.auth.backends
- :synopsis: Django's built-in authentication backend classes.
-
-This document details the authentication backends that come with Django. For
-information on how to use them and how to write your own authentication
-backends, see the :ref:`Other authentication sources section
-<authentication-backends>` of the :doc:`User authentication guide
-</topics/auth>`.
-
-
-Available authentication backends
-=================================
-
-The following backends are available in :mod:`django.contrib.auth.backends`:
-
-.. class:: ModelBackend
-
- This is the default authentication backend used by Django. It
- authenticates using usernames and passwords stored in the
- :class:`~django.contrib.auth.models.User` model.
-
-
-.. class:: RemoteUserBackend
-
- .. versionadded:: 1.1
-
- Use this backend to take advantage of external-to-Django-handled
- authentication. It authenticates using usernames passed in
- :attr:`request.META['REMOTE_USER'] <django.http.HttpRequest.META>`. See
- the :doc:`Authenticating against REMOTE_USER </howto/auth-remote-user>`
- documentation.
diff --git a/parts/django/docs/ref/contrib/admin/_images/article_actions.png b/parts/django/docs/ref/contrib/admin/_images/article_actions.png
deleted file mode 100644
index 78a78ae..0000000
--- a/parts/django/docs/ref/contrib/admin/_images/article_actions.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/ref/contrib/admin/_images/article_actions_message.png b/parts/django/docs/ref/contrib/admin/_images/article_actions_message.png
deleted file mode 100644
index 6ea9439..0000000
--- a/parts/django/docs/ref/contrib/admin/_images/article_actions_message.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/ref/contrib/admin/_images/flatfiles_admin.png b/parts/django/docs/ref/contrib/admin/_images/flatfiles_admin.png
deleted file mode 100644
index 391a629..0000000
--- a/parts/django/docs/ref/contrib/admin/_images/flatfiles_admin.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/ref/contrib/admin/_images/user_actions.png b/parts/django/docs/ref/contrib/admin/_images/user_actions.png
deleted file mode 100644
index fdbe2ad..0000000
--- a/parts/django/docs/ref/contrib/admin/_images/user_actions.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/ref/contrib/admin/_images/users_changelist.png b/parts/django/docs/ref/contrib/admin/_images/users_changelist.png
deleted file mode 100644
index d5f9c01..0000000
--- a/parts/django/docs/ref/contrib/admin/_images/users_changelist.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/ref/contrib/admin/actions.txt b/parts/django/docs/ref/contrib/admin/actions.txt
deleted file mode 100644
index 0fab59e..0000000
--- a/parts/django/docs/ref/contrib/admin/actions.txt
+++ /dev/null
@@ -1,351 +0,0 @@
-=============
-Admin actions
-=============
-
-.. versionadded:: 1.1
-
-.. currentmodule:: django.contrib.admin
-
-The basic workflow of Django's admin is, in a nutshell, "select an object,
-then change it." This works well for a majority of use cases. However, if you
-need to make the same change to many objects at once, this workflow can be
-quite tedious.
-
-In these cases, Django's admin lets you write and register "actions" -- simple
-functions that get called with a list of objects selected on the change list
-page.
-
-If you look at any change list in the admin, you'll see this feature in
-action; Django ships with a "delete selected objects" action available to all
-models. For example, here's the user module from Django's built-in
-:mod:`django.contrib.auth` app:
-
-.. image:: _images/user_actions.png
-
-.. warning::
-
- The "delete selected objects" action uses :meth:`QuerySet.delete()
- <django.db.models.QuerySet.delete>` for efficiency reasons, which has an
- important caveat: your model's ``delete()`` method will not be called.
-
- If you wish to override this behavior, simply write a custom action which
- accomplishes deletion in your preferred manner -- for example, by calling
- ``Model.delete()`` for each of the selected items.
-
- For more background on bulk deletion, see the documentation on :ref:`object
- deletion <topics-db-queries-delete>`.
-
-Read on to find out how to add your own actions to this list.
-
-Writing actions
-===============
-
-The easiest way to explain actions is by example, so let's dive in.
-
-A common use case for admin actions is the bulk updating of a model. Imagine a
-simple news application with an ``Article`` model::
-
- from django.db import models
-
- STATUS_CHOICES = (
- ('d', 'Draft'),
- ('p', 'Published'),
- ('w', 'Withdrawn'),
- )
-
- class Article(models.Model):
- title = models.CharField(max_length=100)
- body = models.TextField()
- status = models.CharField(max_length=1, choices=STATUS_CHOICES)
-
- def __unicode__(self):
- return self.title
-
-A common task we might perform with a model like this is to update an
-article's status from "draft" to "published". We could easily do this in the
-admin one article at a time, but if we wanted to bulk-publish a group of
-articles, it'd be tedious. So, let's write an action that lets us change an
-article's status to "published."
-
-Writing action functions
-------------------------
-
-First, we'll need to write a function that gets called when the action is
-trigged from the admin. Action functions are just regular functions that take
-three arguments:
-
- * The current :class:`ModelAdmin`
- * An :class:`~django.http.HttpRequest` representing the current request,
- * A :class:`~django.db.models.QuerySet` containing the set of objects
- selected by the user.
-
-Our publish-these-articles function won't need the :class:`ModelAdmin` or the
-request object, but we will use the queryset::
-
- def make_published(modeladmin, request, queryset):
- queryset.update(status='p')
-
-.. note::
-
- For the best performance, we're using the queryset's :ref:`update method
- <topics-db-queries-update>`. Other types of actions might need to deal
- with each object individually; in these cases we'd just iterate over the
- queryset::
-
- for obj in queryset:
- do_something_with(obj)
-
-That's actually all there is to writing an action! However, we'll take one
-more optional-but-useful step and give the action a "nice" title in the admin.
-By default, this action would appear in the action list as "Make published" --
-the function name, with underscores replaced by spaces. That's fine, but we
-can provide a better, more human-friendly name by giving the
-``make_published`` function a ``short_description`` attribute::
-
- def make_published(modeladmin, request, queryset):
- queryset.update(status='p')
- make_published.short_description = "Mark selected stories as published"
-
-.. note::
-
- This might look familiar; the admin's ``list_display`` option uses the
- same technique to provide human-readable descriptions for callback
- functions registered there, too.
-
-Adding actions to the :class:`ModelAdmin`
------------------------------------------
-
-Next, we'll need to inform our :class:`ModelAdmin` of the action. This works
-just like any other configuration option. So, the complete ``admin.py`` with
-the action and its registration would look like::
-
- from django.contrib import admin
- from myapp.models import Article
-
- def make_published(modeladmin, request, queryset):
- queryset.update(status='p')
- make_published.short_description = "Mark selected stories as published"
-
- class ArticleAdmin(admin.ModelAdmin):
- list_display = ['title', 'status']
- ordering = ['title']
- actions = [make_published]
-
- admin.site.register(Article, ArticleAdmin)
-
-That code will give us an admin change list that looks something like this:
-
-.. image:: _images/article_actions.png
-
-That's really all there is to it! If you're itching to write your own actions,
-you now know enough to get started. The rest of this document just covers more
-advanced techniques.
-
-Advanced action techniques
-==========================
-
-There's a couple of extra options and possibilities you can exploit for more
-advanced options.
-
-Actions as :class:`ModelAdmin` methods
---------------------------------------
-
-The example above shows the ``make_published`` action defined as a simple
-function. That's perfectly fine, but it's not perfect from a code design point
-of view: since the action is tightly coupled to the ``Article`` object, it
-makes sense to hook the action to the ``ArticleAdmin`` object itself.
-
-That's easy enough to do::
-
- class ArticleAdmin(admin.ModelAdmin):
- ...
-
- actions = ['make_published']
-
- def make_published(self, request, queryset):
- queryset.update(status='p')
- make_published.short_description = "Mark selected stories as published"
-
-Notice first that we've moved ``make_published`` into a method and renamed the
-`modeladmin` parameter to `self`, and second that we've now put the string
-``'make_published'`` in ``actions`` instead of a direct function reference. This
-tells the :class:`ModelAdmin` to look up the action as a method.
-
-Defining actions as methods gives the action more straightforward, idiomatic
-access to the :class:`ModelAdmin` itself, allowing the action to call any of the
-methods provided by the admin.
-
-.. _custom-admin-action:
-
-For example, we can use ``self`` to flash a message to the user informing her
-that the action was successful::
-
- class ArticleAdmin(admin.ModelAdmin):
- ...
-
- def make_published(self, request, queryset):
- rows_updated = queryset.update(status='p')
- if rows_updated == 1:
- message_bit = "1 story was"
- else:
- message_bit = "%s stories were" % rows_updated
- self.message_user(request, "%s successfully marked as published." % message_bit)
-
-This make the action match what the admin itself does after successfully
-performing an action:
-
-.. image:: _images/article_actions_message.png
-
-Actions that provide intermediate pages
----------------------------------------
-
-By default, after an action is performed the user is simply redirected back
-to the original change list page. However, some actions, especially more
-complex ones, will need to return intermediate pages. For example, the
-built-in delete action asks for confirmation before deleting the selected
-objects.
-
-To provide an intermediary page, simply return an
-:class:`~django.http.HttpResponse` (or subclass) from your action. For
-example, you might write a simple export function that uses Django's
-:doc:`serialization functions </topics/serialization>` to dump some selected
-objects as JSON::
-
- from django.http import HttpResponse
- from django.core import serializers
-
- def export_as_json(modeladmin, request, queryset):
- response = HttpResponse(mimetype="text/javascript")
- serializers.serialize("json", queryset, stream=response)
- return response
-
-Generally, something like the above isn't considered a great idea. Most of the
-time, the best practice will be to return an
-:class:`~django.http.HttpResponseRedirect` and redirect the user to a view
-you've written, passing the list of selected objects in the GET query string.
-This allows you to provide complex interaction logic on the intermediary
-pages. For example, if you wanted to provide a more complete export function,
-you'd want to let the user choose a format, and possibly a list of fields to
-include in the export. The best thing to do would be to write a small action
-that simply redirects to your custom export view::
-
- from django.contrib import admin
- from django.contrib.contenttypes.models import ContentType
- from django.http import HttpResponseRedirect
-
- def export_selected_objects(modeladmin, request, queryset):
- selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
- ct = ContentType.objects.get_for_model(queryset.model)
- return HttpResponseRedirect("/export/?ct=%s&ids=%s" % (ct.pk, ",".join(selected)))
-
-As you can see, the action is the simple part; all the complex logic would
-belong in your export view. This would need to deal with objects of any type,
-hence the business with the ``ContentType``.
-
-Writing this view is left as an exercise to the reader.
-
-.. _adminsite-actions:
-
-Making actions available site-wide
-----------------------------------
-
-.. method:: AdminSite.add_action(action[, name])
-
- Some actions are best if they're made available to *any* object in the admin
- site -- the export action defined above would be a good candidate. You can
- make an action globally available using :meth:`AdminSite.add_action()`. For
- example::
-
- from django.contrib import admin
-
- admin.site.add_action(export_selected_objects)
-
- This makes the `export_selected_objects` action globally available as an
- action named `"export_selected_objects"`. You can explicitly give the action
- a name -- good if you later want to programatically :ref:`remove the action
- <disabling-admin-actions>` -- by passing a second argument to
- :meth:`AdminSite.add_action()`::
-
- admin.site.add_action(export_selected_objects, 'export_selected')
-
-.. _disabling-admin-actions:
-
-Disabling actions
------------------
-
-Sometimes you need to disable certain actions -- especially those
-:ref:`registered site-wide <adminsite-actions>` -- for particular objects.
-There's a few ways you can disable actions:
-
-Disabling a site-wide action
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: AdminSite.disable_action(name)
-
- If you need to disable a :ref:`site-wide action <adminsite-actions>` you can
- call :meth:`AdminSite.disable_action()`.
-
- For example, you can use this method to remove the built-in "delete selected
- objects" action::
-
- admin.site.disable_action('delete_selected')
-
- Once you've done the above, that action will no longer be available
- site-wide.
-
- If, however, you need to re-enable a globally-disabled action for one
- particular model, simply list it explicitly in your ``ModelAdmin.actions``
- list::
-
- # Globally disable delete selected
- admin.site.disable_action('delete_selected')
-
- # This ModelAdmin will not have delete_selected available
- class SomeModelAdmin(admin.ModelAdmin):
- actions = ['some_other_action']
- ...
-
- # This one will
- class AnotherModelAdmin(admin.ModelAdmin):
- actions = ['delete_selected', 'a_third_action']
- ...
-
-
-Disabling all actions for a particular :class:`ModelAdmin`
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you want *no* bulk actions available for a given :class:`ModelAdmin`, simply
-set :attr:`ModelAdmin.actions` to ``None``::
-
- class MyModelAdmin(admin.ModelAdmin):
- actions = None
-
-This tells the :class:`ModelAdmin` to not display or allow any actions,
-including any :ref:`site-wide actions <adminsite-actions>`.
-
-Conditionally enabling or disabling actions
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. method:: ModelAdmin.get_actions(request)
-
- Finally, you can conditionally enable or disable actions on a per-request
- (and hence per-user basis) by overriding :meth:`ModelAdmin.get_actions`.
-
- This returns a dictionary of actions allowed. The keys are action names, and
- the values are ``(function, name, short_description)`` tuples.
-
- Most of the time you'll use this method to conditionally remove actions from
- the list gathered by the superclass. For example, if I only wanted users
- whose names begin with 'J' to be able to delete objects in bulk, I could do
- the following::
-
- class MyModelAdmin(admin.ModelAdmin):
- ...
-
- def get_actions(self, request):
- actions = super(MyModelAdmin, self).get_actions(request)
- if request.user.username[0].upper() != 'J':
- del actions['delete_selected']
- return actions
-
-
diff --git a/parts/django/docs/ref/contrib/admin/admindocs.txt b/parts/django/docs/ref/contrib/admin/admindocs.txt
deleted file mode 100644
index 6743921..0000000
--- a/parts/django/docs/ref/contrib/admin/admindocs.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-========================================
-The Django admin documentation generator
-========================================
-
-.. module:: django.contrib.admindocs
- :synopsis: Django's admin documentation generator.
-
-.. currentmodule:: django.contrib.admindocs
-
-Django's :mod:`~django.contrib.admindocs` app pulls documentation from the
-docstrings of models, views, template tags, and template filters for any app in
-:setting:`INSTALLED_APPS` and makes that documentation available from the
-:mod:`Django admin <django.contrib.admin>`.
-
-In addition to providing offline documentation for all template tags and
-template filters that ship with Django, you may utilize admindocs to quickly
-document your own code.
-
-Overview
-========
-
-To activate the :mod:`~django.contrib.admindocs`, you will need to do
-the following:
-
- * Add :mod:`django.contrib.admindocs` to your :setting:`INSTALLED_APPS`.
- * Add ``(r'^admin/doc/', include('django.contrib.admindocs.urls'))`` to
- your :data:`urlpatterns`. Make sure it's included *before* the
- ``r'^admin/'`` entry, so that requests to ``/admin/doc/`` don't get
- handled by the latter entry.
- * Install the docutils Python module (http://docutils.sf.net/).
- * **Optional:** Linking to templates requires the :setting:`ADMIN_FOR`
- setting to be configured.
- * **Optional:** Using the admindocs bookmarklets requires the
- :mod:`XViewMiddleware<django.middleware.doc>` to be installed.
-
-Once those steps are complete, you can start browsing the documentation by
-going to your admin interface and clicking the "Documentation" link in the
-upper right of the page.
-
-Documentation helpers
-=====================
-
-The following special markup can be used in your docstrings to easily create
-hyperlinks to other components:
-
-================= =======================
-Django Component reStructuredText roles
-================= =======================
-Models ``:model:`appname.ModelName```
-Views ``:view:`appname.view_name```
-Template tags ``:tag:`tagname```
-Template filters ``:filter:`filtername```
-Templates ``:template:`path/to/template.html```
-================= =======================
-
-Model reference
-===============
-
-The **models** section of the ``admindocs`` page describes each model in the
-system along with all the fields and methods available on it. Relationships to
-other models appear as hyperlinks. Descriptions are pulled from ``help_text``
-attributes on fields or from docstrings on model methods.
-
-A model with useful documentation might look like this::
-
- class BlogEntry(models.Model):
- """
- Stores a single blog entry, related to :model:`blog.Blog` and
- :model:`auth.User`.
-
- """
- slug = models.SlugField(help_text="A short label, generally used in URLs.")
- author = models.ForeignKey(User)
- blog = models.ForeignKey(Blog)
- ...
-
- def publish(self):
- """Makes the blog entry live on the site."""
- ...
-
-View reference
-==============
-
-Each URL in your site has a separate entry in the ``admindocs`` page, and
-clicking on a given URL will show you the corresponding view. Helpful things
-you can document in your view function docstrings include:
-
- * A short description of what the view does.
- * The **context**, or a list of variables available in the view's template.
- * The name of the template or templates that are used for that view.
-
-For example::
-
- from myapp.models import MyModel
-
- def my_view(request, slug):
- """
- Display an individual :model:`myapp.MyModel`.
-
- **Context**
-
- ``RequestContext``
-
- ``mymodel``
- An instance of :model:`myapp.MyModel`.
-
- **Template:**
-
- :template:`myapp/my_template.html`
-
- """
- return render_to_response('myapp/my_template.html', {
- 'mymodel': MyModel.objects.get(slug=slug)
- }, context_instance=RequestContext(request))
-
-
-Template tags and filters reference
-===================================
-
-The **tags** and **filters** ``admindocs`` sections describe all the tags and
-filters that come with Django (in fact, the :ref:`built-in tag reference
-<ref-templates-builtins-tags>` and :ref:`built-in filter reference
-<ref-templates-builtins-filters>` documentation come directly from those
-pages). Any tags or filters that you create or are added by a third-party app
-will show up in these sections as well.
-
-
-Template reference
-==================
-
-While ``admindocs`` does not include a place to document templates by
-themselves, if you use the ``:template:`path/to/template.html``` syntax in a
-docstring the resulting page will verify the path of that template with
-Django's :ref:`template loaders <template-loaders>`. This can be a handy way to
-check if the specified template exists and to show where on the filesystem that
-template is stored.
-
-
-Included Bookmarklets
-=====================
-
-Several useful bookmarklets are available from the ``admindocs`` page:
-
- Documentation for this page
- Jumps you from any page to the documentation for the view that generates
- that page.
-
- Show object ID
- Shows the content-type and unique ID for pages that represent a single
- object.
-
- Edit this object
- Jumps to the admin page for pages that represent a single object.
-
-Using these bookmarklets requires that you are either logged into the
-:mod:`Django admin <django.contrib.admin>` as a
-:class:`~django.contrib.auth.models.User` with
-:attr:`~django.contrib.auth.models.User.is_staff` set to `True`, or
-that the :mod:`django.middleware.doc` middleware and
-:mod:`XViewMiddleware <django.middleware.doc>` are installed and you
-are accessing the site from an IP address listed in :setting:`INTERNAL_IPS`.
diff --git a/parts/django/docs/ref/contrib/admin/index.txt b/parts/django/docs/ref/contrib/admin/index.txt
deleted file mode 100644
index b99cfdc..0000000
--- a/parts/django/docs/ref/contrib/admin/index.txt
+++ /dev/null
@@ -1,1613 +0,0 @@
-=====================
-The Django admin site
-=====================
-
-.. module:: django.contrib.admin
- :synopsis: Django's admin site.
-
-One of the most powerful parts of Django is the automatic admin interface. It
-reads metadata in your model to provide a powerful and production-ready
-interface that content producers can immediately use to start adding content to
-the site. In this document, we discuss how to activate, use and customize
-Django's admin interface.
-
-.. admonition:: Note
-
- The admin site has been refactored significantly since Django 0.96. This
- document describes the newest version of the admin site, which allows for
- much richer customization. If you follow the development of Django itself,
- you may have heard this described as "newforms-admin."
-
-Overview
-========
-
-There are six steps in activating the Django admin site:
-
- 1. Add ``'django.contrib.admin'`` to your :setting:`INSTALLED_APPS`
- setting.
-
- 2. Admin has two dependencies - ``django.contrib.auth`` and
- ``django.contrib.contenttypes``. If these applications are not
- in your :setting:`INSTALLED_APPS` list, add them.
-
- 3. Determine which of your application's models should be editable in the
- admin interface.
-
- 4. For each of those models, optionally create a ``ModelAdmin`` class that
- encapsulates the customized admin functionality and options for that
- particular model.
-
- 5. Instantiate an ``AdminSite`` and tell it about each of your models and
- ``ModelAdmin`` classes.
-
- 6. Hook the ``AdminSite`` instance into your URLconf.
-
-Other topics
-------------
-
-.. toctree::
- :maxdepth: 1
-
- actions
- admindocs
-
-.. seealso::
-
- For information about serving the media files (images, JavaScript, and CSS)
- associated with the admin in production, see :ref:`serving-media-files`.
-
-``ModelAdmin`` objects
-======================
-
-.. class:: ModelAdmin
-
-The ``ModelAdmin`` class is the representation of a model in the admin
-interface. These are stored in a file named ``admin.py`` in your application.
-Let's take a look at a very simple example of the ``ModelAdmin``::
-
- from django.contrib import admin
- from myproject.myapp.models import Author
-
- class AuthorAdmin(admin.ModelAdmin):
- pass
- admin.site.register(Author, AuthorAdmin)
-
-.. admonition:: Do you need a ``ModelAdmin`` object at all?
-
- In the preceding example, the ``ModelAdmin`` class doesn't define any
- custom values (yet). As a result, the default admin interface will be
- provided. If you are happy with the default admin interface, you don't
- need to define a ``ModelAdmin`` object at all -- you can register the
- model class without providing a ``ModelAdmin`` description. The
- preceding example could be simplified to::
-
- from django.contrib import admin
- from myproject.myapp.models import Author
-
- admin.site.register(Author)
-
-``ModelAdmin`` Options
-----------------------
-
-The ``ModelAdmin`` is very flexible. It has several options for dealing with
-customizing the interface. All options are defined on the ``ModelAdmin``
-subclass::
-
- class AuthorAdmin(admin.ModelAdmin):
- date_hierarchy = 'pub_date'
-
-.. attribute:: ModelAdmin.date_hierarchy
-
-Set ``date_hierarchy`` to the name of a ``DateField`` or ``DateTimeField`` in
-your model, and the change list page will include a date-based drilldown
-navigation by that field.
-
-Example::
-
- date_hierarchy = 'pub_date'
-
-.. attribute:: ModelAdmin.form
-
-By default a ``ModelForm`` is dynamically created for your model. It is used
-to create the form presented on both the add/change pages. You can easily
-provide your own ``ModelForm`` to override any default form behavior on the
-add/change pages.
-
-For an example see the section `Adding custom validation to the admin`_.
-
-.. attribute:: ModelAdmin.fieldsets
-
-Set ``fieldsets`` to control the layout of admin "add" and "change" pages.
-
-``fieldsets`` is a list of two-tuples, in which each two-tuple represents a
-``<fieldset>`` on the admin form page. (A ``<fieldset>`` is a "section" of the
-form.)
-
-The two-tuples are in the format ``(name, field_options)``, where ``name`` is a
-string representing the title of the fieldset and ``field_options`` is a
-dictionary of information about the fieldset, including a list of fields to be
-displayed in it.
-
-A full example, taken from the ``django.contrib.flatpages.FlatPage`` model::
-
- class FlatPageAdmin(admin.ModelAdmin):
- fieldsets = (
- (None, {
- 'fields': ('url', 'title', 'content', 'sites')
- }),
- ('Advanced options', {
- 'classes': ('collapse',),
- 'fields': ('enable_comments', 'registration_required', 'template_name')
- }),
- )
-
-This results in an admin page that looks like:
-
- .. image:: _images/flatfiles_admin.png
-
-If ``fieldsets`` isn't given, Django will default to displaying each field
-that isn't an ``AutoField`` and has ``editable=True``, in a single fieldset,
-in the same order as the fields are defined in the model.
-
-The ``field_options`` dictionary can have the following keys:
-
- * ``fields``
- A tuple of field names to display in this fieldset. This key is
- required.
-
- Example::
-
- {
- 'fields': ('first_name', 'last_name', 'address', 'city', 'state'),
- }
-
- To display multiple fields on the same line, wrap those fields in
- their own tuple. In this example, the ``first_name`` and ``last_name``
- fields will display on the same line::
-
- {
- 'fields': (('first_name', 'last_name'), 'address', 'city', 'state'),
- }
-
- .. versionadded:: 1.2
-
- ``fields`` can contain values defined in
- :attr:`ModelAdmin.readonly_fields` to be displayed as read-only.
-
- * ``classes``
- A list containing extra CSS classes to apply to the fieldset.
-
- Example::
-
- {
- 'classes': ['wide', 'extrapretty'],
- }
-
- Two useful classes defined by the default admin site stylesheet are
- ``collapse`` and ``wide``. Fieldsets with the ``collapse`` style will
- be initially collapsed in the admin and replaced with a small
- "click to expand" link. Fieldsets with the ``wide`` style will be
- given extra horizontal space.
-
- * ``description``
- A string of optional extra text to be displayed at the top of each
- fieldset, under the heading of the fieldset.
-
- Note that this value is *not* HTML-escaped when it's displayed in
- the admin interface. This lets you include HTML if you so desire.
- Alternatively you can use plain text and
- ``django.utils.html.escape()`` to escape any HTML special
- characters.
-
-.. attribute:: ModelAdmin.fields
-
-Use this option as an alternative to ``fieldsets`` if the layout does not
-matter and if you want to only show a subset of the available fields in the
-form. For example, you could define a simpler version of the admin form for
-the ``django.contrib.flatpages.FlatPage`` model as follows::
-
- class FlatPageAdmin(admin.ModelAdmin):
- fields = ('url', 'title', 'content')
-
-In the above example, only the fields 'url', 'title' and 'content' will be
-displayed, sequentially, in the form.
-
-.. versionadded:: 1.2
-
-``fields`` can contain values defined in :attr:`ModelAdmin.readonly_fields`
-to be displayed as read-only.
-
-.. admonition:: Note
-
- This ``fields`` option should not be confused with the ``fields``
- dictionary key that is within the ``fieldsets`` option, as described in
- the previous section.
-
-.. attribute:: ModelAdmin.exclude
-
-This attribute, if given, should be a list of field names to exclude from the
-form.
-
-For example, let's consider the following model::
-
- class Author(models.Model):
- name = models.CharField(max_length=100)
- title = models.CharField(max_length=3)
- birth_date = models.DateField(blank=True, null=True)
-
-If you want a form for the ``Author`` model that includes only the ``name``
-and ``title`` fields, you would specify ``fields`` or ``exclude`` like this::
-
- class AuthorAdmin(admin.ModelAdmin):
- fields = ('name', 'title')
-
- class AuthorAdmin(admin.ModelAdmin):
- exclude = ('birth_date',)
-
-Since the Author model only has three fields, ``name``, ``title``, and
-``birth_date``, the forms resulting from the above declarations will contain
-exactly the same fields.
-
-.. attribute:: ModelAdmin.filter_horizontal
-
-Use a nifty unobtrusive JavaScript "filter" interface instead of the
-usability-challenged ``<select multiple>`` in the admin form. The value is a
-list of fields that should be displayed as a horizontal filter interface. See
-``filter_vertical`` to use a vertical interface.
-
-.. attribute:: ModelAdmin.filter_vertical
-
-Same as ``filter_horizontal``, but is a vertical display of the filter
-interface.
-
-.. attribute:: ModelAdmin.list_display
-
-Set ``list_display`` to control which fields are displayed on the change list
-page of the admin.
-
-Example::
-
- list_display = ('first_name', 'last_name')
-
-If you don't set ``list_display``, the admin site will display a single column
-that displays the ``__unicode__()`` representation of each object.
-
-You have four possible values that can be used in ``list_display``:
-
- * A field of the model. For example::
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = ('first_name', 'last_name')
-
- * A callable that accepts one parameter for the model instance. For
- example::
-
- def upper_case_name(obj):
- return ("%s %s" % (obj.first_name, obj.last_name)).upper()
- upper_case_name.short_description = 'Name'
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = (upper_case_name,)
-
- * A string representing an attribute on the ``ModelAdmin``. This behaves
- same as the callable. For example::
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = ('upper_case_name',)
-
- def upper_case_name(self, obj):
- return ("%s %s" % (obj.first_name, obj.last_name)).upper()
- upper_case_name.short_description = 'Name'
-
- * A string representing an attribute on the model. This behaves almost
- the same as the callable, but ``self`` in this context is the model
- instance. Here's a full model example::
-
- class Person(models.Model):
- name = models.CharField(max_length=50)
- birthday = models.DateField()
-
- def decade_born_in(self):
- return self.birthday.strftime('%Y')[:3] + "0's"
- decade_born_in.short_description = 'Birth decade'
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = ('name', 'decade_born_in')
-
-A few special cases to note about ``list_display``:
-
- * If the field is a ``ForeignKey``, Django will display the
- ``__unicode__()`` of the related object.
-
- * ``ManyToManyField`` fields aren't supported, because that would entail
- executing a separate SQL statement for each row in the table. If you
- want to do this nonetheless, give your model a custom method, and add
- that method's name to ``list_display``. (See below for more on custom
- methods in ``list_display``.)
-
- * If the field is a ``BooleanField`` or ``NullBooleanField``, Django will
- display a pretty "on" or "off" icon instead of ``True`` or ``False``.
-
- * If the string given is a method of the model, ``ModelAdmin`` or a
- callable, Django will HTML-escape the output by default. If you'd rather
- not escape the output of the method, give the method an ``allow_tags``
- attribute whose value is ``True``.
-
- Here's a full example model::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
- color_code = models.CharField(max_length=6)
-
- def colored_name(self):
- return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
- colored_name.allow_tags = True
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = ('first_name', 'last_name', 'colored_name')
-
- * If the string given is a method of the model, ``ModelAdmin`` or a
- callable that returns True or False Django will display a pretty "on" or
- "off" icon if you give the method a ``boolean`` attribute whose value is
- ``True``.
-
- Here's a full example model::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=50)
- birthday = models.DateField()
-
- def born_in_fifties(self):
- return self.birthday.strftime('%Y')[:3] == '195'
- born_in_fifties.boolean = True
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = ('name', 'born_in_fifties')
-
-
- * The ``__str__()`` and ``__unicode__()`` methods are just as valid in
- ``list_display`` as any other model method, so it's perfectly OK to do
- this::
-
- list_display = ('__unicode__', 'some_other_field')
-
- * Usually, elements of ``list_display`` that aren't actual database fields
- can't be used in sorting (because Django does all the sorting at the
- database level).
-
- However, if an element of ``list_display`` represents a certain database
- field, you can indicate this fact by setting the ``admin_order_field``
- attribute of the item.
-
- For example::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=50)
- color_code = models.CharField(max_length=6)
-
- def colored_first_name(self):
- return '<span style="color: #%s;">%s</span>' % (self.color_code, self.first_name)
- colored_first_name.allow_tags = True
- colored_first_name.admin_order_field = 'first_name'
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = ('first_name', 'colored_first_name')
-
- The above will tell Django to order by the ``first_name`` field when
- trying to sort by ``colored_first_name`` in the admin.
-
-.. attribute:: ModelAdmin.list_display_links
-
-Set ``list_display_links`` to control which fields in ``list_display`` should
-be linked to the "change" page for an object.
-
-By default, the change list page will link the first column -- the first field
-specified in ``list_display`` -- to the change page for each item. But
-``list_display_links`` lets you change which columns are linked. Set
-``list_display_links`` to a list or tuple of field names (in the same format as
-``list_display``) to link.
-
-``list_display_links`` can specify one or many field names. As long as the
-field names appear in ``list_display``, Django doesn't care how many (or how
-few) fields are linked. The only requirement is: If you want to use
-``list_display_links``, you must define ``list_display``.
-
-In this example, the ``first_name`` and ``last_name`` fields will be linked on
-the change list page::
-
- class PersonAdmin(admin.ModelAdmin):
- list_display = ('first_name', 'last_name', 'birthday')
- list_display_links = ('first_name', 'last_name')
-
-.. _admin-list-editable:
-
-.. attribute:: ModelAdmin.list_editable
-
-.. versionadded:: 1.1
-
-Set ``list_editable`` to a list of field names on the model which will allow
-editing on the change list page. That is, fields listed in ``list_editable``
-will be displayed as form widgets on the change list page, allowing users to
-edit and save multiple rows at once.
-
-.. note::
-
- ``list_editable`` interacts with a couple of other options in particular
- ways; you should note the following rules:
-
- * Any field in ``list_editable`` must also be in ``list_display``. You
- can't edit a field that's not displayed!
-
- * The same field can't be listed in both ``list_editable`` and
- ``list_display_links`` -- a field can't be both a form and a link.
-
- You'll get a validation error if either of these rules are broken.
-
-.. attribute:: ModelAdmin.list_filter
-
-Set ``list_filter`` to activate filters in the right sidebar of the change list
-page of the admin. This should be a list of field names, and each specified
-field should be either a ``BooleanField``, ``CharField``, ``DateField``,
-``DateTimeField``, ``IntegerField`` or ``ForeignKey``.
-
-This example, taken from the ``django.contrib.auth.models.User`` model, shows
-how both ``list_display`` and ``list_filter`` work::
-
- class UserAdmin(admin.ModelAdmin):
- list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
- list_filter = ('is_staff', 'is_superuser')
-
-The above code results in an admin change list page that looks like this:
-
- .. image:: _images/users_changelist.png
-
-(This example also has ``search_fields`` defined. See below.)
-
-.. attribute:: ModelAdmin.list_per_page
-
-Set ``list_per_page`` to control how many items appear on each paginated admin
-change list page. By default, this is set to ``100``.
-
-.. attribute:: ModelAdmin.list_select_related
-
-Set ``list_select_related`` to tell Django to use
-:meth:`~django.db.models.QuerySet.select_related` in retrieving the list of
-objects on the admin change list page. This can save you a bunch of database
-queries.
-
-The value should be either ``True`` or ``False``. Default is ``False``.
-
-Note that Django will use :meth:`~django.db.models.QuerySet.select_related`,
-regardless of this setting, if one of the ``list_display`` fields is a
-``ForeignKey``.
-
-.. attribute:: ModelAdmin.inlines
-
-See ``InlineModelAdmin`` objects below.
-
-.. attribute:: ModelAdmin.ordering
-
-Set ``ordering`` to specify how objects on the admin change list page should be
-ordered. This should be a list or tuple in the same format as a model's
-``ordering`` parameter.
-
-If this isn't provided, the Django admin will use the model's default ordering.
-
-.. admonition:: Note
-
- Django will only honor the first element in the list/tuple; any others
- will be ignored.
-
-.. attribute:: ModelAdmin.prepopulated_fields
-
-Set ``prepopulated_fields`` to a dictionary mapping field names to the fields
-it should prepopulate from::
-
- class ArticleAdmin(admin.ModelAdmin):
- prepopulated_fields = {"slug": ("title",)}
-
-When set, the given fields will use a bit of JavaScript to populate from the
-fields assigned. The main use for this functionality is to automatically
-generate the value for ``SlugField`` fields from one or more other fields. The
-generated value is produced by concatenating the values of the source fields,
-and then by transforming that result into a valid slug (e.g. substituting
-dashes for spaces).
-
-``prepopulated_fields`` doesn't accept ``DateTimeField``, ``ForeignKey``, nor
-``ManyToManyField`` fields.
-
-.. attribute:: ModelAdmin.radio_fields
-
-By default, Django's admin uses a select-box interface (<select>) for
-fields that are ``ForeignKey`` or have ``choices`` set. If a field is present
-in ``radio_fields``, Django will use a radio-button interface instead.
-Assuming ``group`` is a ``ForeignKey`` on the ``Person`` model::
-
- class PersonAdmin(admin.ModelAdmin):
- radio_fields = {"group": admin.VERTICAL}
-
-You have the choice of using ``HORIZONTAL`` or ``VERTICAL`` from the
-``django.contrib.admin`` module.
-
-Don't include a field in ``radio_fields`` unless it's a ``ForeignKey`` or has
-``choices`` set.
-
-.. attribute:: ModelAdmin.raw_id_fields
-
-By default, Django's admin uses a select-box interface (<select>) for
-fields that are ``ForeignKey``. Sometimes you don't want to incur the
-overhead of having to select all the related instances to display in the
-drop-down.
-
-``raw_id_fields`` is a list of fields you would like to change
-into a ``Input`` widget for either a ``ForeignKey`` or ``ManyToManyField``::
-
- class ArticleAdmin(admin.ModelAdmin):
- raw_id_fields = ("newspaper",)
-
-.. attribute:: ModelAdmin.readonly_fields
-
-.. versionadded:: 1.2
-
-By default the admin shows all fields as editable. Any fields in this option
-(which should be a ``list`` or ``tuple``) will display its data as-is and
-non-editable. This option behaves nearly identical to :attr:`ModelAdmin.list_display`.
-Usage is the same, however, when you specify :attr:`ModelAdmin.fields` or
-:attr:`ModelAdmin.fieldsets` the read-only fields must be present to be shown
-(they are ignored otherwise).
-
-If ``readonly_fields`` is used without defining explicit ordering through
-:attr:`ModelAdmin.fields` or :attr:`ModelAdmin.fieldsets` they will be added
-last after all editable fields.
-
-.. attribute:: ModelAdmin.save_as
-
-Set ``save_as`` to enable a "save as" feature on admin change forms.
-
-Normally, objects have three save options: "Save", "Save and continue editing"
-and "Save and add another". If ``save_as`` is ``True``, "Save and add another"
-will be replaced by a "Save as" button.
-
-"Save as" means the object will be saved as a new object (with a new ID),
-rather than the old object.
-
-By default, ``save_as`` is set to ``False``.
-
-.. attribute:: ModelAdmin.save_on_top
-
-Set ``save_on_top`` to add save buttons across the top of your admin change
-forms.
-
-Normally, the save buttons appear only at the bottom of the forms. If you set
-``save_on_top``, the buttons will appear both on the top and the bottom.
-
-By default, ``save_on_top`` is set to ``False``.
-
-.. attribute:: ModelAdmin.search_fields
-
-Set ``search_fields`` to enable a search box on the admin change list page.
-This should be set to a list of field names that will be searched whenever
-somebody submits a search query in that text box.
-
-These fields should be some kind of text field, such as ``CharField`` or
-``TextField``. You can also perform a related lookup on a ``ForeignKey`` or
-``ManyToManyField`` with the lookup API "follow" notation::
-
- search_fields = ['foreign_key__related_fieldname']
-
-For example, if you have a blog entry with an author, the following definition
-would enable search blog entries by the email address of the author::
-
- search_fields = ['user__email']
-
-When somebody does a search in the admin search box, Django splits the search
-query into words and returns all objects that contain each of the words, case
-insensitive, where each word must be in at least one of ``search_fields``. For
-example, if ``search_fields`` is set to ``['first_name', 'last_name']`` and a
-user searches for ``john lennon``, Django will do the equivalent of this SQL
-``WHERE`` clause::
-
- WHERE (first_name ILIKE '%john%' OR last_name ILIKE '%john%')
- AND (first_name ILIKE '%lennon%' OR last_name ILIKE '%lennon%')
-
-For faster and/or more restrictive searches, prefix the field name
-with an operator:
-
-``^``
- Matches the beginning of the field. For example, if ``search_fields`` is
- set to ``['^first_name', '^last_name']`` and a user searches for
- ``john lennon``, Django will do the equivalent of this SQL ``WHERE``
- clause::
-
- WHERE (first_name ILIKE 'john%' OR last_name ILIKE 'john%')
- AND (first_name ILIKE 'lennon%' OR last_name ILIKE 'lennon%')
-
- This query is more efficient than the normal ``'%john%'`` query, because
- the database only needs to check the beginning of a column's data, rather
- than seeking through the entire column's data. Plus, if the column has an
- index on it, some databases may be able to use the index for this query,
- even though it's a ``LIKE`` query.
-
-``=``
- Matches exactly, case-insensitive. For example, if
- ``search_fields`` is set to ``['=first_name', '=last_name']`` and
- a user searches for ``john lennon``, Django will do the equivalent
- of this SQL ``WHERE`` clause::
-
- WHERE (first_name ILIKE 'john' OR last_name ILIKE 'john')
- AND (first_name ILIKE 'lennon' OR last_name ILIKE 'lennon')
-
- Note that the query input is split by spaces, so, following this example,
- it's currently not possible to search for all records in which
- ``first_name`` is exactly ``'john winston'`` (containing a space).
-
-``@``
- Performs a full-text match. This is like the default search method but uses
- an index. Currently this is only available for MySQL.
-
-.. attribute:: ModelAdmin.formfield_overrides
-
-.. versionadded:: 1.1
-
-This provides a quick-and-dirty way to override some of the
-:class:`~django.forms.Field` options for use in the admin.
-``formfield_overrides`` is a dictionary mapping a field class to a dict of
-arguments to pass to the field at construction time.
-
-Since that's a bit abstract, let's look at a concrete example. The most common
-use of ``formfield_overrides`` is to add a custom widget for a certain type of
-field. So, imagine we've written a ``RichTextEditorWidget`` that we'd like to
-use for large text fields instead of the default ``<textarea>``. Here's how we'd
-do that::
-
- from django.db import models
- from django.contrib import admin
-
- # Import our custom widget and our model from where they're defined
- from myapp.widgets import RichTextEditorWidget
- from myapp.models import MyModel
-
- class MyModelAdmin(admin.ModelAdmin):
- formfield_overrides = {
- models.TextField: {'widget': RichTextEditorWidget},
- }
-
-Note that the key in the dictionary is the actual field class, *not* a string.
-The value is another dictionary; these arguments will be passed to
-:meth:`~django.forms.Field.__init__`. See :doc:`/ref/forms/api` for details.
-
-.. warning::
-
- If you want to use a custom widget with a relation field (i.e.
- :class:`~django.db.models.ForeignKey` or
- :class:`~django.db.models.ManyToManyField`), make sure you haven't included
- that field's name in ``raw_id_fields`` or ``radio_fields``.
-
- ``formfield_overrides`` won't let you change the widget on relation fields
- that have ``raw_id_fields`` or ``radio_fields`` set. That's because
- ``raw_id_fields`` and ``radio_fields`` imply custom widgets of their own.
-
-.. attribute:: ModelAdmin.actions
-
-.. versionadded:: 1.1
-
-A list of actions to make available on the change list page. See
-:doc:`/ref/contrib/admin/actions` for details.
-
-.. attribute:: ModelAdmin.actions_on_top
-.. attribute:: ModelAdmin.actions_on_bottom
-
-.. versionadded:: 1.1
-
-Controls where on the page the actions bar appears. By default, the admin
-changelist displays actions at the top of the page (``actions_on_top = True;
-actions_on_bottom = False``).
-
-.. attribute:: ModelAdmin.actions_selection_counter
-
-.. versionadded:: 1.2
-
-Controls whether a selection counter is display next to the action dropdown.
-By default, the admin changelist will display it
-(``actions_selection_counter = True``).
-
-Custom template options
-~~~~~~~~~~~~~~~~~~~~~~~
-
-The `Overriding Admin Templates`_ section describes how to override or extend
-the default admin templates. Use the following options to override the default
-templates used by the :class:`ModelAdmin` views:
-
-.. attribute:: ModelAdmin.add_form_template
-
- .. versionadded:: 1.2
-
- Path to a custom template, used by :meth:`add_view`.
-
-.. attribute:: ModelAdmin.change_form_template
-
- Path to a custom template, used by :meth:`change_view`.
-
-.. attribute:: ModelAdmin.change_list_template
-
- Path to a custom template, used by :meth:`changelist_view`.
-
-.. attribute:: ModelAdmin.delete_confirmation_template
-
- Path to a custom template, used by :meth:`delete_view` for displaying a
- confirmation page when deleting one or more objects.
-
-.. attribute:: ModelAdmin.delete_selected_confirmation_template
-
- .. versionadded:: 1.2
-
- Path to a custom template, used by the :meth:`delete_selected`
- action method for displaying a confirmation page when deleting one
- or more objects. See the :doc:`actions
- documentation</ref/contrib/admin/actions>`.
-
-.. attribute:: ModelAdmin.object_history_template
-
- Path to a custom template, used by :meth:`history_view`.
-
-
-.. _model-admin-methods:
-
-``ModelAdmin`` methods
-----------------------
-
-.. method:: ModelAdmin.save_model(self, request, obj, form, change)
-
-The ``save_model`` method is given the ``HttpRequest``, a model instance,
-a ``ModelForm`` instance and a boolean value based on whether it is adding or
-changing the object. Here you can do any pre- or post-save operations.
-
-For example to attach ``request.user`` to the object prior to saving::
-
- class ArticleAdmin(admin.ModelAdmin):
- def save_model(self, request, obj, form, change):
- obj.user = request.user
- obj.save()
-
-.. method:: ModelAdmin.save_formset(self, request, form, formset, change)
-
-The ``save_formset`` method is given the ``HttpRequest``, the parent
-``ModelForm`` instance and a boolean value based on whether it is adding or
-changing the parent object.
-
-For example to attach ``request.user`` to each changed formset
-model instance::
-
- class ArticleAdmin(admin.ModelAdmin):
- def save_formset(self, request, form, formset, change):
- instances = formset.save(commit=False)
- for instance in instances:
- instance.user = request.user
- instance.save()
- formset.save_m2m()
-
-.. method:: ModelAdmin.get_readonly_fields(self, request, obj=None)
-
-.. versionadded:: 1.2
-
-The ``get_readonly_fields`` method is given the ``HttpRequest`` and the
-``obj`` being edited (or ``None`` on an add form) and is expected to return a
-``list`` or ``tuple`` of field names that will be displayed as read-only, as
-described above in the :attr:`ModelAdmin.readonly_fields` section.
-
-.. method:: ModelAdmin.get_urls(self)
-
-.. versionadded:: 1.1
-
-The ``get_urls`` method on a ``ModelAdmin`` returns the URLs to be used for
-that ModelAdmin in the same way as a URLconf. Therefore you can extend them as
-documented in :doc:`/topics/http/urls`::
-
- class MyModelAdmin(admin.ModelAdmin):
- def get_urls(self):
- urls = super(MyModelAdmin, self).get_urls()
- my_urls = patterns('',
- (r'^my_view/$', self.my_view)
- )
- return my_urls + urls
-
-.. note::
-
- Notice that the custom patterns are included *before* the regular admin
- URLs: the admin URL patterns are very permissive and will match nearly
- anything, so you'll usually want to prepend your custom URLs to the built-in
- ones.
-
-However, the ``self.my_view`` function registered above suffers from two
-problems:
-
- * It will *not* perform any permission checks, so it will be accessible to
- the general public.
- * It will *not* provide any header details to prevent caching. This means if
- the page retrieves data from the database, and caching middleware is
- active, the page could show outdated information.
-
-Since this is usually not what you want, Django provides a convenience wrapper
-to check permissions and mark the view as non-cacheable. This wrapper is
-:meth:`AdminSite.admin_view` (i.e. ``self.admin_site.admin_view`` inside a
-``ModelAdmin`` instance); use it like so::
-
- class MyModelAdmin(admin.ModelAdmin):
- def get_urls(self):
- urls = super(MyModelAdmin, self).get_urls()
- my_urls = patterns('',
- (r'^my_view/$', self.admin_site.admin_view(self.my_view))
- )
- return my_urls + urls
-
-Notice the wrapped view in the fifth line above::
-
- (r'^my_view/$', self.admin_site.admin_view(self.my_view))
-
-This wrapping will protect ``self.my_view`` from unauthorized access and will
-apply the ``django.views.decorators.cache.never_cache`` decorator to make sure
-it is not cached if the cache middleware is active.
-
-If the page is cacheable, but you still want the permission check to be performed,
-you can pass a ``cacheable=True`` argument to :meth:`AdminSite.admin_view`::
-
- (r'^my_view/$', self.admin_site.admin_view(self.my_view, cacheable=True))
-
-.. method:: ModelAdmin.formfield_for_foreignkey(self, db_field, request, **kwargs)
-
-.. versionadded:: 1.1
-
-The ``formfield_for_foreignkey`` method on a ``ModelAdmin`` allows you to
-override the default formfield for a foreign key field. For example, to
-return a subset of objects for this foreign key field based on the user::
-
- class MyModelAdmin(admin.ModelAdmin):
- def formfield_for_foreignkey(self, db_field, request, **kwargs):
- if db_field.name == "car":
- kwargs["queryset"] = Car.objects.filter(owner=request.user)
- return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
-
-This uses the ``HttpRequest`` instance to filter the ``Car`` foreign key field
-to only display the cars owned by the ``User`` instance.
-
-.. method:: ModelAdmin.formfield_for_manytomany(self, db_field, request, **kwargs)
-
-.. versionadded:: 1.1
-
-Like the ``formfield_for_foreignkey`` method, the ``formfield_for_manytomany``
-method can be overridden to change the default formfield for a many to many
-field. For example, if an owner can own multiple cars and cars can belong
-to multiple owners -- a many to many relationship -- you could filter the
-``Car`` foreign key field to only display the cars owned by the ``User``::
-
- class MyModelAdmin(admin.ModelAdmin):
- def formfield_for_manytomany(self, db_field, request, **kwargs):
- if db_field.name == "cars":
- kwargs["queryset"] = Car.objects.filter(owner=request.user)
- return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
-
-.. method:: ModelAdmin.queryset(self, request)
-
-The ``queryset`` method on a ``ModelAdmin`` returns a
-:class:`~django.db.models.QuerySet` of all model instances that can be
-edited by the admin site. One use case for overriding this method is
-to show objects owned by the logged-in user::
-
- class MyModelAdmin(admin.ModelAdmin):
- def queryset(self, request):
- qs = super(MyModelAdmin, self).queryset(request)
- if request.user.is_superuser:
- return qs
- return qs.filter(author=request.user)
-
-.. method:: ModelAdmin.message_user(request, message)
-
- Sends a message to the user. The default implementation creates a message
- using the :mod:`django.contrib.messages` backend. See the
- :ref:`custom ModelAdmin example <custom-admin-action>`.
-
-Other methods
-~~~~~~~~~~~~~
-
-.. method:: ModelAdmin.add_view(self, request, form_url='', extra_context=None)
-
-Django view for the model instance addition page. See note below.
-
-.. method:: ModelAdmin.change_view(self, request, object_id, extra_context=None)
-
-Django view for the model instance edition page. See note below.
-
-.. method:: ModelAdmin.changelist_view(self, request, extra_context=None)
-
-Django view for the model instances change list/actions page. See note below.
-
-.. method:: ModelAdmin.delete_view(self, request, object_id, extra_context=None)
-
-Django view for the model instance(s) deletion confirmation page. See note below.
-
-.. method:: ModelAdmin.history_view(self, request, object_id, extra_context=None)
-
-Django view for the page that shows the modification history for a given model
-instance.
-
-Unlike the hook-type ``ModelAdmin`` methods detailed in the previous section,
-these five methods are in reality designed to be invoked as Django views from
-the admin application URL dispatching handler to render the pages that deal
-with model instances CRUD operations. As a result, completely overriding these
-methods will significantly change the behavior of the admin application.
-
-One common reason for overriding these methods is to augment the context data
-that is provided to the template that renders the view. In the following
-example, the change view is overridden so that the rendered template is
-provided some extra mapping data that would not otherwise be available::
-
- class MyModelAdmin(admin.ModelAdmin):
-
- # A template for a very customized change view:
- change_form_template = 'admin/myapp/extras/openstreetmap_change_form.html'
-
- def get_osm_info(self):
- # ...
-
- def change_view(self, request, object_id, extra_context=None):
- my_context = {
- 'osm_data': self.get_osm_info(),
- }
- return super(MyModelAdmin, self).change_view(request, object_id,
- extra_context=my_context)
-
-``ModelAdmin`` media definitions
---------------------------------
-
-There are times where you would like add a bit of CSS and/or JavaScript to
-the add/change views. This can be accomplished by using a Media inner class
-on your ``ModelAdmin``::
-
- class ArticleAdmin(admin.ModelAdmin):
- class Media:
- css = {
- "all": ("my_styles.css",)
- }
- js = ("my_code.js",)
-
-Keep in mind that this will be prepended with ``MEDIA_URL``. The same rules
-apply as :doc:`regular media definitions on forms </topics/forms/media>`.
-
-Django admin Javascript makes use of the `jQuery`_ library. To avoid
-conflict with user scripts, Django's jQuery is namespaced as
-``django.jQuery``. If you want to use jQuery in your own admin
-JavaScript without including a second copy, you can use the
-``django.jQuery`` object on changelist and add/edit views.
-
-.. _jQuery: http://jquery.com
-
-Adding custom validation to the admin
--------------------------------------
-
-Adding custom validation of data in the admin is quite easy. The automatic admin
-interface reuses :mod:`django.forms`, and the ``ModelAdmin`` class gives you
-the ability define your own form::
-
- class ArticleAdmin(admin.ModelAdmin):
- form = MyArticleAdminForm
-
-``MyArticleAdminForm`` can be defined anywhere as long as you import where
-needed. Now within your form you can add your own custom validation for
-any field::
-
- class MyArticleAdminForm(forms.ModelForm):
- class Meta:
- model = Article
-
- def clean_name(self):
- # do something that validates your data
- return self.cleaned_data["name"]
-
-It is important you use a ``ModelForm`` here otherwise things can break. See the
-:doc:`forms </ref/forms/index>` documentation on :doc:`custom validation
-</ref/forms/validation>` and, more specifically, the
-:ref:`model form validation notes <overriding-modelform-clean-method>` for more
-information.
-
-.. _admin-inlines:
-
-``InlineModelAdmin`` objects
-============================
-
-.. class:: InlineModelAdmin
-
-The admin interface has the ability to edit models on the same page as a
-parent model. These are called inlines. Suppose you have these two models::
-
- class Author(models.Model):
- name = models.CharField(max_length=100)
-
- class Book(models.Model):
- author = models.ForeignKey(Author)
- title = models.CharField(max_length=100)
-
-You can edit the books authored by an author on the author page. You add
-inlines to a model by specifying them in a ``ModelAdmin.inlines``::
-
- class BookInline(admin.TabularInline):
- model = Book
-
- class AuthorAdmin(admin.ModelAdmin):
- inlines = [
- BookInline,
- ]
-
-Django provides two subclasses of ``InlineModelAdmin`` and they are:
-
- * ``TabularInline``
- * ``StackedInline``
-
-The difference between these two is merely the template used to render them.
-
-``InlineModelAdmin`` options
------------------------------
-
-The ``InlineModelAdmin`` class is a subclass of ``ModelAdmin`` so it inherits
-all the same functionality as well as some of its own:
-
-.. attribute:: InlineModelAdmin.model
-
- The model in which the inline is using. This is required.
-
-.. attribute:: InlineModelAdmin.fk_name
-
- The name of the foreign key on the model. In most cases this will be dealt
- with automatically, but ``fk_name`` must be specified explicitly if there
- are more than one foreign key to the same parent model.
-
-.. attribute:: InlineModelAdmin.formset
-
- This defaults to ``BaseInlineFormSet``. Using your own formset can give you
- many possibilities of customization. Inlines are built around
- :ref:`model formsets <model-formsets>`.
-
-.. attribute:: InlineModelAdmin.form
-
- The value for ``form`` defaults to ``ModelForm``. This is what is passed
- through to ``inlineformset_factory`` when creating the formset for this
- inline.
-
-.. _ref-contrib-admin-inline-extra:
-
-.. attribute:: InlineModelAdmin.extra
-
-
- This controls the number of extra forms the formset will display in addition
- to the initial forms. See the
- :doc:`formsets documentation </topics/forms/formsets>` for more information.
-
- .. versionadded:: 1.2
-
- For users with JavaScript-enabled browsers, an "Add another" link is
- provided to enable any number of additional inlines to be added in addition
- to those provided as a result of the ``extra`` argument.
-
- The dynamic link will not appear if the number of currently displayed forms
- exceeds ``max_num``, or if the user does not have JavaScript enabled.
-
-.. _ref-contrib-admin-inline-max-num:
-
-.. attribute:: InlineModelAdmin.max_num
-
- This controls the maximum number of forms to show in the inline. This
- doesn't directly correlate to the number of objects, but can if the value
- is small enough. See :ref:`model-formsets-max-num` for more information.
-
-.. attribute:: InlineModelAdmin.raw_id_fields
-
- By default, Django's admin uses a select-box interface (<select>) for
- fields that are ``ForeignKey``. Sometimes you don't want to incur the
- overhead of having to select all the related instances to display in the
- drop-down.
-
- ``raw_id_fields`` is a list of fields you would like to change into a
- ``Input`` widget for either a ``ForeignKey`` or ``ManyToManyField``::
-
- class BookInline(admin.TabularInline):
- model = Book
- raw_id_fields = ("pages",)
-
-
-.. attribute:: InlineModelAdmin.template
-
- The template used to render the inline on the page.
-
-.. attribute:: InlineModelAdmin.verbose_name
-
- An override to the ``verbose_name`` found in the model's inner ``Meta``
- class.
-
-.. attribute:: InlineModelAdmin.verbose_name_plural
-
- An override to the ``verbose_name_plural`` found in the model's inner
- ``Meta`` class.
-
-.. attribute:: InlineModelAdmin.can_delete
-
- Specifies whether or not inline objects can be deleted in the inline.
- Defaults to ``True``.
-
-
-Working with a model with two or more foreign keys to the same parent model
----------------------------------------------------------------------------
-
-It is sometimes possible to have more than one foreign key to the same model.
-Take this model for instance::
-
- class Friendship(models.Model):
- to_person = models.ForeignKey(Person, related_name="friends")
- from_person = models.ForeignKey(Person, related_name="from_friends")
-
-If you wanted to display an inline on the ``Person`` admin add/change pages
-you need to explicitly define the foreign key since it is unable to do so
-automatically::
-
- class FriendshipInline(admin.TabularInline):
- model = Friendship
- fk_name = "to_person"
-
- class PersonAdmin(admin.ModelAdmin):
- inlines = [
- FriendshipInline,
- ]
-
-Working with Many-to-Many Models
---------------------------------
-
-.. versionadded:: 1.2
-
-By default, admin widgets for many-to-many relations will be displayed
-on whichever model contains the actual reference to the ``ManyToManyField``.
-Depending on your ``ModelAdmin`` definition, each many-to-many field in your
-model will be represented by a standard HTML ``<select multiple>``, a
-horizontal or vertical filter, or a ``raw_id_admin`` widget. However, it is
-also possible to to replace these widgets with inlines.
-
-Suppose we have the following models::
-
- class Person(models.Model):
- name = models.CharField(max_length=128)
-
- class Group(models.Model):
- name = models.CharField(max_length=128)
- members = models.ManyToManyField(Person, related_name='groups')
-
-If you want to display many-to-many relations using an inline, you can do
-so by defining an ``InlineModelAdmin`` object for the relationship::
-
- class MembershipInline(admin.TabularInline):
- model = Group.members.through
-
- class PersonAdmin(admin.ModelAdmin):
- inlines = [
- MembershipInline,
- ]
-
- class GroupAdmin(admin.ModelAdmin):
- inlines = [
- MembershipInline,
- ]
- exclude = ('members',)
-
-There are two features worth noting in this example.
-
-Firstly - the ``MembershipInline`` class references ``Group.members.through``.
-The ``through`` attribute is a reference to the model that manages the
-many-to-many relation. This model is automatically created by Django when you
-define a many-to-many field.
-
-Secondly, the ``GroupAdmin`` must manually exclude the ``members`` field.
-Django displays an admin widget for a many-to-many field on the model that
-defines the relation (in this case, ``Group``). If you want to use an inline
-model to represent the many-to-many relationship, you must tell Django's admin
-to *not* display this widget - otherwise you will end up with two widgets on
-your admin page for managing the relation.
-
-In all other respects, the ``InlineModelAdmin`` is exactly the same as any
-other. You can customize the appearance using any of the normal
-``ModelAdmin`` properties.
-
-Working with Many-to-Many Intermediary Models
-----------------------------------------------
-
-When you specify an intermediary model using the ``through`` argument to a
-``ManyToManyField``, the admin will not display a widget by default. This is
-because each instance of that intermediary model requires more information
-than could be displayed in a single widget, and the layout required for
-multiple widgets will vary depending on the intermediate model.
-
-However, we still want to be able to edit that information inline. Fortunately,
-this is easy to do with inline admin models. Suppose we have the following
-models::
-
- class Person(models.Model):
- name = models.CharField(max_length=128)
-
- class Group(models.Model):
- name = models.CharField(max_length=128)
- members = models.ManyToManyField(Person, through='Membership')
-
- class Membership(models.Model):
- person = models.ForeignKey(Person)
- group = models.ForeignKey(Group)
- date_joined = models.DateField()
- invite_reason = models.CharField(max_length=64)
-
-The first step in displaying this intermediate model in the admin is to
-define an inline class for the ``Membership`` model::
-
- class MembershipInline(admin.TabularInline):
- model = Membership
- extra = 1
-
-This simple example uses the default ``InlineModelAdmin`` values for the
-``Membership`` model, and limits the extra add forms to one. This could be
-customized using any of the options available to ``InlineModelAdmin`` classes.
-
-Now create admin views for the ``Person`` and ``Group`` models::
-
- class PersonAdmin(admin.ModelAdmin):
- inlines = (MembershipInline,)
-
- class GroupAdmin(admin.ModelAdmin):
- inlines = (MembershipInline,)
-
-Finally, register your ``Person`` and ``Group`` models with the admin site::
-
- admin.site.register(Person, PersonAdmin)
- admin.site.register(Group, GroupAdmin)
-
-Now your admin site is set up to edit ``Membership`` objects inline from
-either the ``Person`` or the ``Group`` detail pages.
-
-Using generic relations as an inline
-------------------------------------
-
-It is possible to use an inline with generically related objects. Let's say
-you have the following models::
-
- class Image(models.Model):
- image = models.ImageField(upload_to="images")
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey("content_type", "object_id")
-
- class Product(models.Model):
- name = models.CharField(max_length=100)
-
-If you want to allow editing and creating ``Image`` instance on the ``Product``
-add/change views you can simply use ``GenericInlineModelAdmin`` provided by
-``django.contrib.contenttypes.generic``. In your ``admin.py`` for this
-example app::
-
- from django.contrib import admin
- from django.contrib.contenttypes import generic
-
- from myproject.myapp.models import Image, Product
-
- class ImageInline(generic.GenericTabularInline):
- model = Image
-
- class ProductAdmin(admin.ModelAdmin):
- inlines = [
- ImageInline,
- ]
-
- admin.site.register(Product, ProductAdmin)
-
-``django.contrib.contenttypes.generic`` provides both a ``GenericTabularInline``
-and ``GenericStackedInline`` and behave just like any other inline. See the
-:doc:`contenttypes documentation </ref/contrib/contenttypes>` for more specific
-information.
-
-Overriding Admin Templates
-==========================
-
-It is relatively easy to override many of the templates which the admin module
-uses to generate the various pages of an admin site. You can even override a few
-of these templates for a specific app, or a specific model.
-
-Set up your projects admin template directories
------------------------------------------------
-
-The admin template files are located in the ``contrib/admin/templates/admin``
-directory.
-
-In order to override one or more of them, first create an ``admin`` directory in
-your project's ``templates`` directory. This can be any of the directories you
-specified in ``TEMPLATE_DIRS``.
-
-Within this ``admin`` directory, create sub-directories named after your app.
-Within these app subdirectories create sub-directories named after your models.
-Note, that the admin app will lowercase the model name when looking for the
-directory, so make sure you name the directory in all lowercase if you are going
-to run your app on a case-sensitive filesystem.
-
-To override an admin template for a specific app, copy and edit the template
-from the ``django/contrib/admin/templates/admin`` directory, and save it to one
-of the directories you just created.
-
-For example, if we wanted to add a tool to the change list view for all the
-models in an app named ``my_app``, we would copy
-``contrib/admin/templates/admin/change_list.html`` to the
-``templates/admin/my_app/`` directory of our project, and make any necessary
-changes.
-
-If we wanted to add a tool to the change list view for only a specific model
-named 'Page', we would copy that same file to the
-``templates/admin/my_app/page`` directory of our project.
-
-Overriding vs. replacing an admin template
-------------------------------------------
-
-Because of the modular design of the admin templates, it is usually neither
-necessary nor advisable to replace an entire template. It is almost always
-better to override only the section of the template which you need to change.
-
-To continue the example above, we want to add a new link next to the ``History``
-tool for the ``Page`` model. After looking at ``change_form.html`` we determine
-that we only need to override the ``object-tools`` block. Therefore here is our
-new ``change_form.html`` :
-
-.. code-block:: html+django
-
- {% extends "admin/change_form.html" %}
- {% load i18n %}
- {% block object-tools %}
- {% if change %}{% if not is_popup %}
- <ul class="object-tools">
- <li><a href="history/" class="historylink">{% trans "History" %}</a></li>
- <li><a href="mylink/" class="historylink">My Link</a></li>
- {% if has_absolute_url %}
- <li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">
- {% trans "View on site" %}</a>
- </li>
- {% endif%}
- </ul>
- {% endif %}{% endif %}
- {% endblock %}
-
-And that's it! If we placed this file in the ``templates/admin/my_app``
-directory, our link would appear on every model's change form.
-
-Templates which may be overridden per app or model
---------------------------------------------------
-
-Not every template in ``contrib/admin/templates/admin`` may be overridden per
-app or per model. The following can:
-
- * ``app_index.html``
- * ``change_form.html``
- * ``change_list.html``
- * ``delete_confirmation.html``
- * ``object_history.html``
-
-For those templates that cannot be overridden in this way, you may still
-override them for your entire project. Just place the new version in your
-``templates/admin`` directory. This is particularly useful to create custom 404
-and 500 pages.
-
-.. note::
-
- Some of the admin templates, such as ``change_list_request.html`` are used
- to render custom inclusion tags. These may be overridden, but in such cases
- you are probably better off creating your own version of the tag in question
- and giving it a different name. That way you can use it selectively.
-
-Root and login templates
-------------------------
-
-If you wish to change the index, login or logout templates, you are better off
-creating your own ``AdminSite`` instance (see below), and changing the
-:attr:`AdminSite.index_template` , :attr:`AdminSite.login_template` or
-:attr:`AdminSite.logout_template` properties.
-
-``AdminSite`` objects
-=====================
-
-.. class:: AdminSite(name=None)
-
-A Django administrative site is represented by an instance of
-``django.contrib.admin.sites.AdminSite``; by default, an instance of
-this class is created as ``django.contrib.admin.site`` and you can
-register your models and ``ModelAdmin`` instances with it.
-
-If you'd like to set up your own administrative site with custom
-behavior, however, you're free to subclass ``AdminSite`` and override
-or add anything you like. Then, simply create an instance of your
-``AdminSite`` subclass (the same way you'd instantiate any other
-Python class), and register your models and ``ModelAdmin`` subclasses
-with it instead of using the default.
-
-.. versionadded:: 1.1
-
-When constructing an instance of an ``AdminSite``, you are able to provide
-a unique instance name using the ``name`` argument to the constructor. This
-instance name is used to identify the instance, especially when
-:ref:`reversing admin URLs <admin-reverse-urls>`. If no instance name is
-provided, a default instance name of ``admin`` will be used.
-
-``AdminSite`` attributes
-------------------------
-
-Templates can override or extend base admin templates as described in
-`Overriding Admin Templates`_.
-
-.. attribute:: AdminSite.index_template
-
-Path to a custom template that will be used by the admin site main index view.
-
-.. attribute:: AdminSite.login_template
-
-Path to a custom template that will be used by the admin site login view.
-
-.. attribute:: AdminSite.logout_template
-
-.. versionadded:: 1.2
-
-Path to a custom template that will be used by the admin site logout view.
-
-.. attribute:: AdminSite.password_change_template
-
-.. versionadded:: 1.2
-
-Path to a custom template that will be used by the admin site password change
-view.
-
-.. attribute:: AdminSite.password_change_done_template
-
-.. versionadded:: 1.2
-
-Path to a custom template that will be used by the admin site password change
-done view.
-
-Hooking ``AdminSite`` instances into your URLconf
--------------------------------------------------
-
-The last step in setting up the Django admin is to hook your ``AdminSite``
-instance into your URLconf. Do this by pointing a given URL at the
-``AdminSite.urls`` method.
-
-In this example, we register the default ``AdminSite`` instance
-``django.contrib.admin.site`` at the URL ``/admin/`` ::
-
- # urls.py
- from django.conf.urls.defaults import *
- from django.contrib import admin
-
- admin.autodiscover()
-
- urlpatterns = patterns('',
- (r'^admin/', include(admin.site.urls)),
- )
-
-Above we used ``admin.autodiscover()`` to automatically load the
-``INSTALLED_APPS`` admin.py modules.
-
-In this example, we register the ``AdminSite`` instance
-``myproject.admin.admin_site`` at the URL ``/myadmin/`` ::
-
- # urls.py
- from django.conf.urls.defaults import *
- from myproject.admin import admin_site
-
- urlpatterns = patterns('',
- (r'^myadmin/', include(admin_site.urls)),
- )
-
-There is really no need to use autodiscover when using your own ``AdminSite``
-instance since you will likely be importing all the per-app admin.py modules
-in your ``myproject.admin`` module.
-
-Multiple admin sites in the same URLconf
-----------------------------------------
-
-It's easy to create multiple instances of the admin site on the same
-Django-powered Web site. Just create multiple instances of ``AdminSite`` and
-root each one at a different URL.
-
-.. versionchanged:: 1.1
- The method for hooking ``AdminSite`` instances into urls has changed in
- Django 1.1.
-
-In this example, the URLs ``/basic-admin/`` and ``/advanced-admin/`` feature
-separate versions of the admin site -- using the ``AdminSite`` instances
-``myproject.admin.basic_site`` and ``myproject.admin.advanced_site``,
-respectively::
-
- # urls.py
- from django.conf.urls.defaults import *
- from myproject.admin import basic_site, advanced_site
-
- urlpatterns = patterns('',
- (r'^basic-admin/', include(basic_site.urls)),
- (r'^advanced-admin/', include(advanced_site.urls)),
- )
-
-``AdminSite`` instances take a single argument to their constructor, their
-name, which can be anything you like. This argument becomes the prefix to the
-URL names for the purposes of :ref:`reversing them<admin-reverse-urls>`. This
-is only necessary if you are using more than one ``AdminSite``.
-
-Adding views to admin sites
----------------------------
-
-.. versionadded:: 1.1
-
-Just like :class:`ModelAdmin`, :class:`AdminSite` provides a
-:meth:`~django.contrib.admin.ModelAdmin.get_urls()` method
-that can be overridden to define additional views for the site. To add
-a new view to your admin site, extend the base
-:meth:`~django.contrib.admin.ModelAdmin.get_urls()` method to include
-a pattern for your new view.
-
-.. note::
- Any view you render that uses the admin templates, or extends the base
- admin template, should provide the ``current_app`` argument to
- ``RequestContext`` or ``Context`` when rendering the template. It should
- be set to either ``self.name`` if your view is on an ``AdminSite`` or
- ``self.admin_site.name`` if your view is on a ``ModelAdmin``.
-
-.. _admin-reverse-urls:
-
-Reversing Admin URLs
-====================
-
-.. versionadded:: 1.1
-
-When an :class:`AdminSite` is deployed, the views provided by that site are
-accessible using Django's :ref:`URL reversing system <naming-url-patterns>`.
-
-The :class:`AdminSite` provides the following named URL patterns:
-
- ====================== ======================== =============
- Page URL name Parameters
- ====================== ======================== =============
- Index ``index``
- Logout ``logout``
- Password change ``password_change``
- Password change done ``password_change_done``
- i18n javascript ``jsi18n``
- Application index page ``app_list`` ``app_label``
- ====================== ======================== =============
-
-Each :class:`ModelAdmin` instance provides an additional set of named URLs:
-
- ====================== =============================================== =============
- Page URL name Parameters
- ====================== =============================================== =============
- Changelist ``{{ app_label }}_{{ model_name }}_changelist``
- Add ``{{ app_label }}_{{ model_name }}_add``
- History ``{{ app_label }}_{{ model_name }}_history`` ``object_id``
- Delete ``{{ app_label }}_{{ model_name }}_delete`` ``object_id``
- Change ``{{ app_label }}_{{ model_name }}_change`` ``object_id``
- ====================== =============================================== =============
-
-These named URLs are registered with the application namespace ``admin``, and
-with an instance namespace corresponding to the name of the Site instance.
-
-So - if you wanted to get a reference to the Change view for a particular
-``Choice`` object (from the polls application) in the default admin, you would
-call::
-
- >>> from django.core import urlresolvers
- >>> c = Choice.objects.get(...)
- >>> change_url = urlresolvers.reverse('admin:polls_choice_change', args=(c.id,))
-
-This will find the first registered instance of the admin application (whatever the instance
-name), and resolve to the view for changing ``poll.Choice`` instances in that instance.
-
-If you want to find a URL in a specific admin instance, provide the name of that instance
-as a ``current_app`` hint to the reverse call. For example, if you specifically wanted
-the admin view from the admin instance named ``custom``, you would need to call::
-
- >>> change_url = urlresolvers.reverse('custom:polls_choice_change', args=(c.id,))
-
-For more details, see the documentation on :ref:`reversing namespaced URLs
-<topics-http-reversing-url-namespaces>`.
diff --git a/parts/django/docs/ref/contrib/auth.txt b/parts/django/docs/ref/contrib/auth.txt
deleted file mode 100644
index 619b38e..0000000
--- a/parts/django/docs/ref/contrib/auth.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-``django.contrib.auth``
-=======================
-
-See :doc:`/topics/auth`.
diff --git a/parts/django/docs/ref/contrib/comments/custom.txt b/parts/django/docs/ref/contrib/comments/custom.txt
deleted file mode 100644
index 5411d9c..0000000
--- a/parts/django/docs/ref/contrib/comments/custom.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-==================================
-Customizing the comments framework
-==================================
-
-.. currentmodule:: django.contrib.comments
-
-If the built-in comment framework doesn't quite fit your needs, you can extend
-the comment app's behavior to add custom data and logic. The comments framework
-lets you extend the built-in comment model, the built-in comment form, and the
-various comment views.
-
-The :setting:`COMMENTS_APP` setting is where this customization begins. Set
-:setting:`COMMENTS_APP` to the name of the app you'd like to use to provide
-custom behavior. You'll use the same syntax as you'd use for
-:setting:`INSTALLED_APPS`, and the app given must also be in the
-:setting:`INSTALLED_APPS` list.
-
-For example, if you wanted to use an app named ``my_comment_app``, your
-settings file would contain::
-
- INSTALLED_APPS = [
- ...
- 'my_comment_app',
- ...
- ]
-
- COMMENTS_APP = 'my_comment_app'
-
-The app named in :setting:`COMMENTS_APP` provides its custom behavior by
-defining some module-level functions in the app's ``__init__.py``. The
-:ref:`complete list of these functions <custom-comment-app-api>` can be found
-below, but first let's look at a quick example.
-
-An example custom comments app
-==============================
-
-One of the most common types of customization is modifying the set of fields
-provided on the built-in comment model. For example, some sites that allow
-comments want the commentator to provide a title for their comment; the built-in
-comment model has no field for that title.
-
-To make this kind of customization, we'll need to do three things:
-
- #. Create a custom comment :class:`~django.db.models.Model` that adds on the
- "title" field.
-
- #. Create a custom comment :class:`~django.forms.Form` that also adds this
- "title" field.
-
- #. Inform Django of these objects by defining a few functions in a
- custom :setting:`COMMENTS_APP`.
-
-So, carrying on the example above, we're dealing with a typical app structure in
-the ``my_custom_app`` directory::
-
- my_custom_app/
- __init__.py
- models.py
- forms.py
-
-In the ``models.py`` we'll define a ``CommentWithTitle`` model::
-
- from django.db import models
- from django.contrib.comments.models import Comment
-
- class CommentWithTitle(Comment):
- title = models.CharField(max_length=300)
-
-Most custom comment models will subclass the :class:`Comment` model. However,
-if you want to substantially remove or change the fields available in the
-:class:`Comment` model, but don't want to rewrite the templates, you could
-try subclassing from :class:`BaseCommentAbstractModel`.
-
-Next, we'll define a custom comment form in ``forms.py``. This is a little more
-tricky: we have to both create a form and override
-:meth:`CommentForm.get_comment_model` and
-:meth:`CommentForm.get_comment_create_data` to return deal with our custom title
-field::
-
- from django import forms
- from django.contrib.comments.forms import CommentForm
- from my_comment_app.models import CommentWithTitle
-
- class CommentFormWithTitle(CommentForm):
- title = forms.CharField(max_length=300)
-
- def get_comment_model(self):
- # Use our custom comment model instead of the built-in one.
- return CommentWithTitle
-
- def get_comment_create_data(self):
- # Use the data of the superclass, and add in the title field
- data = super(CommentFormWithTitle, self).get_comment_create_data()
- data['title'] = self.cleaned_data['title']
- return data
-
-Django provides a couple of "helper" classes to make writing certain types of
-custom comment forms easier; see :mod:`django.contrib.comments.forms` for
-more.
-
-Finally, we'll define a couple of methods in ``my_custom_app/__init__.py`` to
-point Django at these classes we've created::
-
- from my_comments_app.models import CommentWithTitle
- from my_comments_app.forms import CommentFormWithTitle
-
- def get_model():
- return CommentWithTitle
-
- def get_form():
- return CommentFormWithTitle
-
-
-.. warning::
-
- Be careful not to create cyclic imports in your custom comments app.
- If you feel your comment configuration isn't being used as defined --
- for example, if your comment moderation policy isn't being applied --
- you may have a cyclic import problem.
-
- If you are having unexplained problems with comments behavior, check
- if your custom comments application imports (even indirectly)
- any module that itself imports Django's comments module.
-
-The above process should take care of most common situations. For more
-advanced usage, there are additional methods you can define. Those are
-explained in the next section.
-
-.. _custom-comment-app-api:
-
-Custom comment app API
-======================
-
-The :mod:`django.contrib.comments` app defines the following methods; any
-custom comment app must define at least one of them. All are optional,
-however.
-
-.. function:: get_model()
-
- Return the :class:`~django.db.models.Model` class to use for comments. This
- model should inherit from
- :class:`django.contrib.comments.models.BaseCommentAbstractModel`, which
- defines necessary core fields.
-
- The default implementation returns
- :class:`django.contrib.comments.models.Comment`.
-
-.. function:: get_form()
-
- Return the :class:`~django.forms.Form` class you want to use for
- creating, validating, and saving your comment model. Your custom
- comment form should accept an additional first argument,
- ``target_object``, which is the object the comment will be
- attached to.
-
- The default implementation returns
- :class:`django.contrib.comments.forms.CommentForm`.
-
- .. note::
-
- The default comment form also includes a number of unobtrusive
- spam-prevention features (see
- :ref:`notes-on-the-comment-form`). If replacing it with your
- own form, you may want to look at the source code for the
- built-in form and consider incorporating similar features.
-
-.. function:: get_form_target()
-
- Return the URL for POSTing comments. This will be the ``<form action>``
- attribute when rendering your comment form.
-
- The default implementation returns a reverse-resolved URL pointing
- to the :func:`post_comment` view.
-
- .. note::
-
- If you provide a custom comment model and/or form, but you
- want to use the default :func:`post_comment` view, you will
- need to be aware that it requires the model and form to have
- certain additional attributes and methods: see the
- :func:`post_comment` view documentation for details.
-
-.. function:: get_flag_url()
-
- Return the URL for the "flag this comment" view.
-
- The default implementation returns a reverse-resolved URL pointing
- to the :func:`django.contrib.comments.views.moderation.flag` view.
-
-.. function:: get_delete_url()
-
- Return the URL for the "delete this comment" view.
-
- The default implementation returns a reverse-resolved URL pointing
- to the :func:`django.contrib.comments.views.moderation.delete` view.
-
-.. function:: get_approve_url()
-
- Return the URL for the "approve this comment from moderation" view.
-
- The default implementation returns a reverse-resolved URL pointing
- to the :func:`django.contrib.comments.views.moderation.approve` view.
diff --git a/parts/django/docs/ref/contrib/comments/example.txt b/parts/django/docs/ref/contrib/comments/example.txt
deleted file mode 100644
index 424bdb1..0000000
--- a/parts/django/docs/ref/contrib/comments/example.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-.. highlightlang:: html+django
-
-===========================================
-Example of using the in-built comments app
-===========================================
-
-Follow the first three steps of the quick start guide in the
-:doc:`documentation </ref/contrib/comments/index>`.
-
-Now suppose, you have an app (``blog``) with a model (``Post``)
-to which you want to attach comments. Let us also suppose that
-you have a template called ``blog_detail.html`` where you want
-to display the comments list and comment form.
-
-Template
-========
-
-First, we should load the ``comment`` template tags in the
-``blog_detail.html`` so that we can use it's functionality. So
-just like all other custom template tag libraries::
-
- {% load comments %}
-
-Next, let us add the number of comments attached to the particular
-model instance of ``Post``. For this we assume that a context
-variable ``object_pk`` is present which gives the ``id`` of the
-instance of ``Post``.
-
-The usage of the :ttag:`get_comment_count` tag is like below::
-
- {% get_comment_count for blog.post object_pk as comment_count %}
- <p>{{ comment_count }} comments have been posted.</p>
-
-If you have the instance (say ``entry``) of the model (``Post``)
-available in the context, then you can refer to it directly::
-
- {% get_comment_count for entry as comment_count %}
- <p>{{ comment_count }} comments have been posted.</p>
-
-.. versionadded:: 1.2
-
-Next, we can use the :ttag:`render_comment_list` tag, to render all comments
-to the given instance (``entry``) by using the ``comments/list.html`` template.
-
- {% render_comment_list for entry %}
-
-Django will will look for the ``list.html`` under the following directories
-(for our example)::
-
- comments/blog/post/list.html
- comments/blog/list.html
- comments/list.html
-
-To get a list of comments, we make use of the :ttag:`get_comment_list` tag.
-This tag's usage is very similar to the :ttag:`get_comment_count` tag. We
-need to remember that the :ttag:`get_comment_list` returns a list of comments
-and hence we will have to iterate through them to display them::
-
- {% get_comment_list for blog.post object_pk as comment_list %}
- {% for comment in comment_list %}
- <p>Posted by: {{ comment.user_name }} on {{ comment.submit_date }}</p>
- ...
- <p>Comment: {{ comment.comment }}</p>
- ...
- {% endfor %}
-
-Finally, we display the comment form, enabling users to enter their
-comments. There are two ways of doing so. The first is when you want to
-display the comments template available under your ``comments/form.html``.
-The other method gives you a chance to customize the form.
-
-The first method makes use of the :ttag:`render_comment_form` tag. It's usage
-too is similar to the other three tags we have discussed above::
-
- {% render_comment_form for entry %}
-
-It looks for the ``form.html`` under the following directories
-(for our example)::
-
- comments/blog/post/form.html
- comments/blog/form.html
- comments/form.html
-
-Since we customize the form in the second method, we make use of another
-tag called :ttag:`comment_form_target`. This tag on rendering gives the URL
-where the comment form is posted. Without any :doc:`customization
-</ref/contrib/comments/custom>`, :ttag:`comment_form_target` evaluates to
-``/comments/post/``. We use this tag in the form's ``action`` attribute.
-
-The :ttag:`get_comment_form` tag renders a ``form`` for a model instance by
-creating a context variable. One can iterate over the ``form`` object to
-get individual fields. This gives you fine-grain control over the form::
-
- {% for field in form %}
- {% ifequal field.name "comment" %}
- <!-- Customize the "comment" field, say, make CSS changes -->
- ...
- {% endfor %}
-
-But let's look at a simple example::
-
- {% get_comment_form for entry as form %}
- <!-- A context variable called form is created with the necessary hidden
- fields, timestamps and security hashes -->
- <table>
- <form action="{% comment_form_target %}" method="post">
- {{ form }}
- <tr>
- <td></td>
- <td><input type="submit" name="preview" class="submit-post" value="Preview"></td>
- </tr>
- </form>
- </table>
-
-Flagging
-========
-
-If you want your users to be able to flag comments (say for profanity), you
-can just direct them (by placing a link in your comment list) to ``/flag/{{
-comment.id }}/``. Similarly, a user with requisite permissions (``"Can
-moderate comments"``) can approve and delete comments. This can also be
-done through the ``admin`` as you'll see later. You might also want to
-customize the following templates:
-
- * ``flag.html``
- * ``flagged.html``
- * ``approve.html``
- * ``approved.html``
- * ``delete.html``
- * ``deleted.html``
-
-found under the directory structure we saw for ``form.html``.
-
-Feeds
-=====
-
-Suppose you want to export a :doc:`feed </ref/contrib/syndication>` of the
-latest comments, you can use the in-built :class:`LatestCommentFeed`. Just
-enable it in your project's ``urls.py``:
-
-.. code-block:: python
-
- from django.conf.urls.defaults import *
- from django.contrib.comments.feeds import LatestCommentFeed
-
- feeds = {
- 'latest': LatestCommentFeed,
- }
-
- urlpatterns = patterns('',
- # ...
- (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed',
- {'feed_dict': feeds}),
- # ...
- )
-
-Now you should have the latest comment feeds being served off ``/feeds/latest/``.
-
-Moderation
-==========
-
-Now that we have the comments framework working, we might want to have some
-moderation setup to administer the comments. The comments framework comes
-in-built with :doc:`generic comment moderation
-</ref/contrib/comments/moderation>`. The comment moderation has the following
-features (all of which or only certain can be enabled):
-
- * Enable comments for a particular model instance.
- * Close comments after a particular (user-defined) number of days.
- * Email new comments to the site-staff.
-
-To enable comment moderation, we subclass the :class:`CommentModerator` and
-register it with the moderation features we want. Let us suppose we want to
-close comments after 7 days of posting and also send out an email to the
-site staff. In ``blog/models.py``, we register a comment moderator in the
-following way:
-
-.. code-block:: python
-
- from django.contrib.comments.moderation import CommentModerator, moderator
- from django.db import models
-
- class Post(models.Model):
- title = models.CharField(max_length = 255)
- content = models.TextField()
- posted_date = models.DateTimeField()
-
- class PostModerator(CommentModerator):
- email_notification = True
- auto_close_field = 'posted_date'
- # Close the comments after 7 days.
- close_after = 7
-
- moderator.register(Post, PostModerator)
-
-The generic comment moderation also has the facility to remove comments.
-These comments can then be moderated by any user who has access to the
-``admin`` site and the ``Can moderate comments`` permission (can be set
-under the ``Users`` page in the ``admin``).
-
-The moderator can ``Flag``, ``Approve`` or ``Remove`` comments using the
-``Action`` drop-down in the ``admin`` under the ``Comments`` page.
-
-.. note::
-
- Only a super-user will be able to delete comments from the database.
- ``Remove Comments`` only sets the ``is_public`` attribute to
- ``False``.
diff --git a/parts/django/docs/ref/contrib/comments/forms.txt b/parts/django/docs/ref/contrib/comments/forms.txt
deleted file mode 100644
index c21a27b..0000000
--- a/parts/django/docs/ref/contrib/comments/forms.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-====================
-Comment form classes
-====================
-
-.. module:: django.contrib.comments.forms
- :synopsis: Forms for dealing with the built-in comment model.
-
-The ``django.contrib.comments.forms`` module contains a handful of forms
-you'll use when writing custom views dealing with comments, or when writing
-:doc:`custom comment apps </ref/contrib/comments/custom>`.
-
-.. class:: CommentForm
-
- The main comment form representing the standard, built-in way of handling
- submitted comments. This is the class used by all the views
- :mod:`django.contrib.comments` to handle submitted comments.
-
- If you want to build custom views that are similar to Django's built-in
- comment handling views, you'll probably want to use this form.
-
-Abstract comment forms for custom comment apps
-----------------------------------------------
-
-If you're building a :doc:`custom comment app </ref/contrib/comments/custom>`,
-you might want to replace *some* of the form logic but still rely on parts of
-the existing form.
-
-:class:`CommentForm` is actually composed of a couple of abstract base class
-forms that you can subclass to reuse pieces of the form handling logic:
-
-.. class:: CommentSecurityForm
-
- Handles the anti-spoofing protection aspects of the comment form handling.
-
- This class contains the ``content_type`` and ``object_pk`` fields pointing
- to the object the comment is attached to, along with a ``timestamp`` and a
- ``security_hash`` of all the form data. Together, the timestamp and the
- security hash ensure that spammers can't "replay" form submissions and
- flood you with comments.
-
-.. class:: CommentDetailsForm
-
- Handles the details of the comment itself.
-
- This class contains the ``name``, ``email``, ``url``, and the ``comment``
- field itself, along with the associated validation logic. \ No newline at end of file
diff --git a/parts/django/docs/ref/contrib/comments/index.txt b/parts/django/docs/ref/contrib/comments/index.txt
deleted file mode 100644
index 817871e..0000000
--- a/parts/django/docs/ref/contrib/comments/index.txt
+++ /dev/null
@@ -1,302 +0,0 @@
-===========================
-Django's comments framework
-===========================
-
-.. module:: django.contrib.comments
- :synopsis: Django's comment framework
-
-.. highlightlang:: html+django
-
-Django includes a simple, yet customizable comments framework. The built-in
-comments framework can be used to attach comments to any model, so you can use
-it for comments on blog entries, photos, book chapters, or anything else.
-
-.. note::
-
- If you used to use Django's older (undocumented) comments framework, you'll
- need to upgrade. See the :doc:`upgrade guide </ref/contrib/comments/upgrade>`
- for instructions.
-
-Quick start guide
-=================
-
-To get started using the ``comments`` app, follow these steps:
-
- #. Install the comments framework by adding ``'django.contrib.comments'`` to
- :setting:`INSTALLED_APPS`.
-
- #. Run ``manage.py syncdb`` so that Django will create the comment tables.
-
- #. Add the comment app's URLs to your project's ``urls.py``:
-
- .. code-block:: python
-
- urlpatterns = patterns('',
- ...
- (r'^comments/', include('django.contrib.comments.urls')),
- ...
- )
-
- #. Use the `comment template tags`_ below to embed comments in your
- templates.
-
-You might also want to examine :doc:`/ref/contrib/comments/settings`.
-
-Comment template tags
-=====================
-
-You'll primarily interact with the comment system through a series of template
-tags that let you embed comments and generate forms for your users to post them.
-
-Like all custom template tag libraries, you'll need to :ref:`load the custom
-tags <loading-custom-template-libraries>` before you can use them::
-
- {% load comments %}
-
-Once loaded you can use the template tags below.
-
-Specifying which object comments are attached to
-------------------------------------------------
-
-Django's comments are all "attached" to some parent object. This can be any
-instance of a Django model. Each of the tags below gives you a couple of
-different ways you can specify which object to attach to:
-
- #. Refer to the object directly -- the more common method. Most of the
- time, you'll have some object in the template's context you want
- to attach the comment to; you can simply use that object.
-
- For example, in a blog entry page that has a variable named ``entry``,
- you could use the following to load the number of comments::
-
- {% get_comment_count for entry as comment_count %}.
-
- #. Refer to the object by content-type and object id. You'd use this method
- if you, for some reason, don't actually have direct access to the object.
-
- Following the above example, if you knew the object ID was ``14`` but
- didn't have access to the actual object, you could do something like::
-
- {% get_comment_count for blog.entry 14 as comment_count %}
-
- In the above, ``blog.entry`` is the app label and (lower-cased) model
- name of the model class.
-
-Displaying comments
--------------------
-
-To display a list of comments, you can use the template tags
-:ttag:`render_comment_list` or :ttag:`get_comment_list`.
-
-.. templatetag:: render_comment_list
-
-Quickly rendering a comment list
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The easiest way to display a list of comments for some object is by using
-:ttag:`render_comment_list`::
-
- {% render_comment_list for [object] %}
-
-For example::
-
- {% render_comment_list for event %}
-
-This will render comments using a template named ``comments/list.html``, a
-default version of which is included with Django.
-
-.. templatetag:: get_comment_list
-
-Rendering a custom comment list
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To get the list of comments for some object, use :ttag:`get_comment_list`::
-
- {% get_comment_list for [object] as [varname] %}
-
-For example::
-
- {% get_comment_list for event as comment_list %}
- {% for comment in comment_list %}
- ...
- {% endfor %}
-
-This returns a list of :class:`~django.contrib.comments.models.Comment` objects;
-see :doc:`the comment model documentation </ref/contrib/comments/models>` for
-details.
-
-.. templatetag:: get_comment_permalink
-
-Linking to comments
--------------------
-
-.. versionadded:: 1.2
-
-To provide a permalink to a specific comment, use :ttag:`get_comment_permalink`::
-
- {% get_comment_permalink comment_obj [format_string] %}
-
-By default, the named anchor that will be appended to the URL will be the letter
-'c' followed by the comment id, for example 'c82'. You may specify a custom
-format string if you wish to override this behavior::
-
- {% get_comment_permalink comment "#c%(id)s-by-%(user_name)s"%}
-
-The format string is a standard python format string. Valid mapping keys
-include any attributes of the comment object.
-
-Regardless of whether you specify a custom anchor pattern, you must supply a
-matching named anchor at a suitable place in your template.
-
-For example::
-
- {% for comment in comment_list %}
- <a name="c{{ comment.id }}"></a>
- <a href="{% get_comment_permalink comment %}">
- permalink for comment #{{ forloop.counter }}
- </a>
- ...
- {% endfor %}
-
-.. warning::
-
- There's a known bug in Safari/Webkit which causes the named anchor to be
- forgotten following a redirect. The practical impact for comments is that
- the Safari/webkit browsers will arrive at the correct page but will not
- scroll to the named anchor.
-
-.. templatetag:: get_comment_count
-
-Counting comments
------------------
-
-To count comments attached to an object, use :ttag:`get_comment_count`::
-
- {% get_comment_count for [object] as [varname] %}
-
-For example::
-
- {% get_comment_count for event as comment_count %}
-
- <p>This event has {{ comment_count }} comments.</p>
-
-
-Displaying the comment post form
---------------------------------
-
-To show the form that users will use to post a comment, you can use
-:ttag:`render_comment_form` or :ttag:`get_comment_form`
-
-.. templatetag:: render_comment_form
-
-Quickly rendering the comment form
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The easiest way to display a comment form is by using
-:ttag:`render_comment_form`::
-
- {% render_comment_form for [object] %}
-
-For example::
-
- {% render_comment_form for event %}
-
-This will render comments using a template named ``comments/form.html``, a
-default version of which is included with Django.
-
-.. templatetag:: get_comment_form
-
-Rendering a custom comment form
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you want more control over the look and feel of the comment form, you use use
-:ttag:`get_comment_form` to get a :doc:`form object </topics/forms/index>` that
-you can use in the template::
-
- {% get_comment_form for [object] as [varname] %}
-
-A complete form might look like::
-
- {% get_comment_form for event as form %}
- <form action="{% comment_form_target %}" method="post">
- {{ form }}
- <tr>
- <td></td>
- <td><input type="submit" name="preview" class="submit-post" value="Preview"></td>
- </tr>
- </form>
-
-Be sure to read the `notes on the comment form`_, below, for some special
-considerations you'll need to make if you're using this approach.
-
-.. templatetag:: comment_form_target
-
-Getting the comment form target
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You may have noticed that the above example uses another template tag --
-:ttag:`comment_form_target` -- to actually get the ``action`` attribute of the
-form. This will always return the correct URL that comments should be posted to;
-you'll always want to use it like above::
-
- <form action="{% comment_form_target %}" method="post">
-
-Redirecting after the comment post
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To specify the URL you want to redirect to after the comment has been posted,
-you can include a hidden form input called ``next`` in your comment form. For example::
-
- <input type="hidden" name="next" value="{% url my_comment_was_posted %}" />
-
-.. _notes-on-the-comment-form:
-
-Notes on the comment form
--------------------------
-
-The form used by the comment system has a few important anti-spam attributes you
-should know about:
-
- * It contains a number of hidden fields that contain timestamps, information
- about the object the comment should be attached to, and a "security hash"
- used to validate this information. If someone tampers with this data --
- something comment spammers will try -- the comment submission will fail.
-
- If you're rendering a custom comment form, you'll need to make sure to
- pass these values through unchanged.
-
- * The timestamp is used to ensure that "reply attacks" can't continue very
- long. Users who wait too long between requesting the form and posting a
- comment will have their submissions refused.
-
- * The comment form includes a "honeypot_" field. It's a trap: if any data is
- entered in that field, the comment will be considered spam (spammers often
- automatically fill in all fields in an attempt to make valid submissions).
-
- The default form hides this field with a piece of CSS and further labels
- it with a warning field; if you use the comment form with a custom
- template you should be sure to do the same.
-
-The comments app also depends on the more general :doc:`Cross Site Request
-Forgery protection </ref/contrib/csrf>` that comes with Django. As described in
-the documentation, it is best to use ``CsrfViewMiddleware``. However, if you
-are not using that, you will need to use the ``csrf_protect`` decorator on any
-views that include the comment form, in order for those views to be able to
-output the CSRF token and cookie.
-
-.. _honeypot: http://en.wikipedia.org/wiki/Honeypot_(computing)
-
-More information
-================
-
-.. toctree::
- :maxdepth: 1
-
- models
- settings
- signals
- upgrade
- custom
- forms
- moderation
- example
diff --git a/parts/django/docs/ref/contrib/comments/models.txt b/parts/django/docs/ref/contrib/comments/models.txt
deleted file mode 100644
index e773790..0000000
--- a/parts/django/docs/ref/contrib/comments/models.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-===========================
-The built-in comment models
-===========================
-
-.. module:: django.contrib.comments.models
- :synopsis: The built-in comment models
-
-.. class:: Comment
-
- Django's built-in comment model. Has the following fields:
-
- .. attribute:: content_object
-
- A :class:`~django.contrib.contettypes.generic.GenericForeignKey`
- attribute pointing to the object the comment is attached to. You can use
- this to get at the related object (i.e. ``my_comment.content_object``).
-
- Since this field is a
- :class:`~django.contrib.contettypes.generic.GenericForeignKey`, it's
- actually syntactic sugar on top of two underlying attributes, described
- below.
-
- .. attribute:: content_type
-
- A :class:`~django.db.models.ForeignKey` to
- :class:`~django.contrib.contenttypes.models.ContentType`; this is the
- type of the object the comment is attached to.
-
- .. attribute:: object_pk
-
- A :class:`~django.db.models.TextField` containing the primary
- key of the object the comment is attached to.
-
- .. attribute:: site
-
- A :class:`~django.db.models.ForeignKey` to the
- :class:`~django.contrib.sites.models.Site` on which the comment was
- posted.
-
- .. attribute:: user
-
- A :class:`~django.db.models.ForeignKey` to the
- :class:`~django.contrib.auth.models.User` who posted the comment.
- May be blank if the comment was posted by an unauthenticated user.
-
- .. attribute:: user_name
-
- The name of the user who posted the comment.
-
- .. attribute:: user_email
-
- The email of the user who posted the comment.
-
- .. attribute:: user_url
-
- The URL entered by the person who posted the comment.
-
- .. attribute:: comment
-
- The actual content of the comment itself.
-
- .. attribute:: submit_date
-
- The date the comment was submitted.
-
- .. attribute:: ip_address
-
- The IP address of the user posting the comment.
-
- .. attribute:: is_public
-
- ``False`` if the comment is in moderation (see
- :doc:`/ref/contrib/comments/moderation`); If ``True``, the comment will
- be displayed on the site.
-
- .. attribute:: is_removed
-
- ``True`` if the comment was removed. Used to keep track of removed
- comments instead of just deleting them.
-
diff --git a/parts/django/docs/ref/contrib/comments/moderation.txt b/parts/django/docs/ref/contrib/comments/moderation.txt
deleted file mode 100644
index 519bc5e..0000000
--- a/parts/django/docs/ref/contrib/comments/moderation.txt
+++ /dev/null
@@ -1,230 +0,0 @@
-==========================
-Generic comment moderation
-==========================
-
-.. module:: django.contrib.comments.moderation
- :synopsis: Support for automatic comment moderation.
-
-Django's bundled comments application is extremely useful on its own,
-but the amount of comment spam circulating on the Web today
-essentially makes it necessary to have some sort of automatic
-moderation system in place for any application which makes use of
-comments. To make this easier to handle in a consistent fashion,
-``django.contrib.comments.moderation`` provides a generic, extensible
-comment-moderation system which can be applied to any model or set of
-models which want to make use of Django's comment system.
-
-
-Overview
-========
-
-The entire system is contained within ``django.contrib.comments.moderation``,
-and uses a two-step process to enable moderation for any given model:
-
-1. A subclass of :class:`CommentModerator`
- is defined which specifies the moderation options the model wants to
- enable.
-
-2. The model is registered with the moderation system, passing in the
- model class and the class which specifies its moderation options.
-
-A simple example is the best illustration of this. Suppose we have the
-following model, which would represent entries in a Weblog::
-
- from django.db import models
-
- class Entry(models.Model):
- title = models.CharField(maxlength=250)
- body = models.TextField()
- pub_date = models.DateTimeField()
- enable_comments = models.BooleanField()
-
-Now, suppose that we want the following steps to be applied whenever a
-new comment is posted on an ``Entry``:
-
-1. If the ``Entry``'s ``enable_comments`` field is ``False``, the
- comment will simply be disallowed (i.e., immediately deleted).
-
-2. If the ``enable_comments`` field is ``True``, the comment will be
- allowed to save.
-
-3. Once the comment is saved, an email should be sent to site staff
- notifying them of the new comment.
-
-Accomplishing this is fairly straightforward and requires very little
-code::
-
- from django.contrib.comments.moderation import CommentModerator, moderator
-
- class EntryModerator(CommentModerator):
- email_notification = True
- enable_field = 'enable_comments'
-
- moderator.register(Entry, EntryModerator)
-
-The :class:`CommentModerator` class pre-defines a number of useful moderation
-options which subclasses can enable or disable as desired, and ``moderator``
-knows how to work with them to determine whether to allow a comment, whether
-to moderate a comment which will be allowed to post, and whether to email
-notifications of new comments.
-
-Built-in moderation options
----------------------------
-
-.. class:: CommentModerator
-
- Most common comment-moderation needs can be handled by subclassing
- :class:`CommentModerator` and
- changing the values of pre-defined attributes; the full range of built-in
- options is as follows.
-
- .. attribute:: auto_close_field
-
- If this is set to the name of a
- :class:`~django.db.models.fields.DateField` or
- :class:`~django.db.models.fields.DateTimeField` on the model for which
- comments are being moderated, new comments for objects of that model
- will be disallowed (immediately deleted) when a certain number of days
- have passed after the date specified in that field. Must be
- used in conjunction with :attr:`close_after`, which specifies the
- number of days past which comments should be
- disallowed. Default value is ``None``.
-
- .. attribute:: auto_moderate_field
-
- Like :attr:`auto_close_field`, but instead of outright deleting
- new comments when the requisite number of days have elapsed,
- it will simply set the ``is_public`` field of new comments to
- ``False`` before saving them. Must be used in conjunction with
- :attr:`moderate_after`, which specifies the number of days past
- which comments should be moderated. Default value is ``None``.
-
- .. attribute:: close_after
-
- If :attr:`auto_close_field` is used, this must specify the number
- of days past the value of the field specified by
- :attr:`auto_close_field` after which new comments for an object
- should be disallowed. Default value is ``None``.
-
- .. attribute:: email_notification
-
- If ``True``, any new comment on an object of this model which
- survives moderation (i.e., is not deleted) will generate an
- email to site staff. Default value is ``False``.
-
- .. attribute:: enable_field
-
- If this is set to the name of a
- :class:`~django.db.models.fields.BooleanField` on the model
- for which comments are being moderated, new comments on
- objects of that model will be disallowed (immediately deleted)
- whenever the value of that field is ``False`` on the object
- the comment would be attached to. Default value is ``None``.
-
- .. attribute:: moderate_after
-
- If :attr:`auto_moderate_field` is used, this must specify the number
- of days past the value of the field specified by
- :attr:`auto_moderate_field` after which new comments for an object
- should be marked non-public. Default value is ``None``.
-
-Simply subclassing :class:`CommentModerator` and changing the values of these
-options will automatically enable the various moderation methods for any
-models registered using the subclass.
-
-Adding custom moderation methods
---------------------------------
-
-For situations where the built-in options listed above are not
-sufficient, subclasses of :class:`CommentModerator` can also override
-the methods which actually perform the moderation, and apply any logic
-they desire. :class:`CommentModerator` defines three methods which
-determine how moderation will take place; each method will be called
-by the moderation system and passed two arguments: ``comment``, which
-is the new comment being posted, ``content_object``, which is the
-object the comment will be attached to, and ``request``, which is the
-:class:`~django.http.HttpRequest` in which the comment is being submitted:
-
-.. method:: CommentModerator.allow(comment, content_object, request)
-
- Should return ``True`` if the comment should be allowed to
- post on the content object, and ``False`` otherwise (in which
- case the comment will be immediately deleted).
-
-.. method:: CommentModerator.email(comment, content_object, request)
-
- If email notification of the new comment should be sent to
- site staff or moderators, this method is responsible for
- sending the email.
-
-.. method:: CommentModerator.moderate(comment, content_object, request)
-
- Should return ``True`` if the comment should be moderated (in
- which case its ``is_public`` field will be set to ``False``
- before saving), and ``False`` otherwise (in which case the
- ``is_public`` field will not be changed).
-
-
-Registering models for moderation
----------------------------------
-
-The moderation system, represented by
-``django.contrib.comments.moderation.moderator`` is an instance of the class
-:class:`Moderator`, which allows registration and "unregistration" of models
-via two methods:
-
-.. function:: moderator.register(model_or_iterable, moderation_class)
-
- Takes two arguments: the first should be either a model class
- or list of model classes, and the second should be a subclass
- of ``CommentModerator``, and register the model or models to
- be moderated using the options defined in the
- ``CommentModerator`` subclass. If any of the models are
- already registered for moderation, the exception
- :exc:`AlreadyModerated` will be raised.
-
-.. function:: moderator.unregister(model_or_iterable)
-
- Takes one argument: a model class or list of model classes,
- and removes the model or models from the set of models which
- are being moderated. If any of the models are not currently
- being moderated, the exception
- :exc:`NotModerated` will be raised.
-
-
-Customizing the moderation system
----------------------------------
-
-Most use cases will work easily with simple subclassing of
-:class:`CommentModerator` and registration with the provided
-:class:`Moderator` instance, but customization of global moderation behavior
-can be achieved by subclassing :class:`Moderator` and instead registering
-models with an instance of the subclass.
-
-.. class:: Moderator
-
- In addition to the :meth:`Moderator.register` and
- :meth:`Moderator.unregister` methods detailed above, the following methods
- on :class:`Moderator` can be overridden to achieve customized behavior:
-
- .. method:: connect
-
- Determines how moderation is set up globally. The base
- implementation in
- :class:`Moderator` does this by
- attaching listeners to the :data:`~django.contrib.comments.signals.comment_will_be_posted`
- and :data:`~django.contrib.comments.signals.comment_was_posted` signals from the
- comment models.
-
- .. method:: pre_save_moderation(sender, comment, request, **kwargs)
-
- In the base implementation, applies all pre-save moderation
- steps (such as determining whether the comment needs to be
- deleted, or whether it needs to be marked as non-public or
- generate an email).
-
- .. method:: post_save_moderation(sender, comment, request, **kwargs)
-
- In the base implementation, applies all post-save moderation
- steps (currently this consists entirely of deleting comments
- which were disallowed).
diff --git a/parts/django/docs/ref/contrib/comments/settings.txt b/parts/django/docs/ref/contrib/comments/settings.txt
deleted file mode 100644
index 1f1aeca..0000000
--- a/parts/django/docs/ref/contrib/comments/settings.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-================
-Comment settings
-================
-
-These settings configure the behavior of the comments framework:
-
-.. setting:: COMMENTS_HIDE_REMOVED
-
-COMMENTS_HIDE_REMOVED
----------------------
-
-If ``True`` (default), removed comments will be excluded from comment
-lists/counts (as taken from template tags). Otherwise, the template author is
-responsible for some sort of a "this comment has been removed by the site staff"
-message.
-
-.. setting:: COMMENT_MAX_LENGTH
-
-COMMENT_MAX_LENGTH
-------------------
-
-The maximum length of the comment field, in characters. Comments longer than
-this will be rejected. Defaults to 3000.
-
-.. setting:: COMMENTS_APP
-
-COMMENTS_APP
-------------
-
-An app which provides :doc:`customization of the comments framework
-</ref/contrib/comments/custom>`. Use the same dotted-string notation
-as in :setting:`INSTALLED_APPS`. Your custom :setting:`COMMENTS_APP`
-must also be listed in :setting:`INSTALLED_APPS`.
diff --git a/parts/django/docs/ref/contrib/comments/signals.txt b/parts/django/docs/ref/contrib/comments/signals.txt
deleted file mode 100644
index 7ae34a1..0000000
--- a/parts/django/docs/ref/contrib/comments/signals.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-================================
-Signals sent by the comments app
-================================
-
-.. module:: django.contrib.comments.signals
- :synopsis: Signals sent by the comment module.
-
-The comment app sends a series of :doc:`signals </topics/signals>` to allow for
-comment moderation and similar activities. See :doc:`the introduction to signals
-</topics/signals>` for information about how to register for and receive these
-signals.
-
-comment_will_be_posted
-======================
-
-.. data:: django.contrib.comments.signals.comment_will_be_posted
- :module:
-
-Sent just before a comment will be saved, after it's been sanity checked and
-submitted. This can be used to modify the comment (in place) with posting
-details or other such actions.
-
-If any receiver returns ``False`` the comment will be discarded and a 403 (not
-allowed) response will be returned.
-
-This signal is sent at more or less the same time (just before, actually) as the
-``Comment`` object's :data:`~django.db.models.signals.pre_save` signal.
-
-Arguments sent with this signal:
-
- ``sender``
- The comment model.
-
- ``comment``
- The comment instance about to be posted. Note that it won't have been
- saved into the database yet, so it won't have a primary key, and any
- relations might not work correctly yet.
-
- ``request``
- The :class:`~django.http.HttpRequest` that posted the comment.
-
-comment_was_posted
-==================
-
-.. data:: django.contrib.comments.signals.comment_was_posted
- :module:
-
-Sent just after the comment is saved.
-
-Arguments sent with this signal:
-
- ``sender``
- The comment model.
-
- ``comment``
- The comment instance that was posted. Note that it will have already
- been saved, so if you modify it you'll need to call
- :meth:`~django.db.models.Model.save` again.
-
- ``request``
- The :class:`~django.http.HttpRequest` that posted the comment.
-
-comment_was_flagged
-===================
-
-.. data:: django.contrib.comments.signals.comment_was_flagged
- :module:
-
-Sent after a comment was "flagged" in some way. Check the flag to see if this
-was a user requesting removal of a comment, a moderator approving/removing a
-comment, or some other custom user flag.
-
-Arguments sent with this signal:
-
- ``sender``
- The comment model.
-
- ``comment``
- The comment instance that was posted. Note that it will have already
- been saved, so if you modify it you'll need to call
- :meth:`~django.db.models.Model.save` again.
-
- ``flag``
- The :class:`~django.contrib.comments.models.CommentFlag` that's been
- attached to the comment.
-
- ``created``
- ``True`` if this is a new flag; ``False`` if it's a duplicate flag.
-
- ``request``
- The :class:`~django.http.HttpRequest` that posted the comment.
diff --git a/parts/django/docs/ref/contrib/comments/upgrade.txt b/parts/django/docs/ref/contrib/comments/upgrade.txt
deleted file mode 100644
index 3d6b5af..0000000
--- a/parts/django/docs/ref/contrib/comments/upgrade.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-===============================================
-Upgrading from Django's previous comment system
-===============================================
-
-Prior versions of Django included an outdated, undocumented comment system. Users who reverse-engineered this framework will need to upgrade to use the
-new comment system; this guide explains how.
-
-The main changes from the old system are:
-
- * This new system is documented.
-
- * It uses modern Django features like :doc:`forms </topics/forms/index>` and
- :doc:`modelforms </topics/forms/modelforms>`.
-
- * It has a single ``Comment`` model instead of separate ``FreeComment`` and
- ``Comment`` models.
-
- * Comments have "email" and "URL" fields.
-
- * No ratings, photos and karma. This should only effect World Online.
-
- * The ``{% comment_form %}`` tag no longer exists. Instead, there's now two
- functions: ``{% get_comment_form %}``, which returns a form for posting a
- new comment, and ``{% render_comment_form %}``, which renders said form
- using the ``comments/form.html`` template.
-
- * The way comments are include in your URLconf have changed; you'll need to
- replace::
-
- (r'^comments/', include('django.contrib.comments.urls.comments')),
-
- with::
-
- (r'^comments/', include('django.contrib.comments.urls')),
-
-Upgrading data
---------------
-
-The data models for Django's comment system have changed, as have the
-table names. Before you transfer your existing data into the new comments
-system, make sure that you have installed the new comments system as
-explained in the
-:doc:`quick start guide </ref/contrib/comments/index>`.
-This will ensure that the new tables have been properly created.
-
-To transfer your data into the new comments system, you'll need to directly
-run the following SQL:
-
-.. code-block:: sql
-
- BEGIN;
-
- INSERT INTO django_comments
- (content_type_id, object_pk, site_id, user_name, user_email, user_url,
- comment, submit_date, ip_address, is_public, is_removed)
- SELECT
- content_type_id, object_id, site_id, person_name, '', '', comment,
- submit_date, ip_address, is_public, not approved
- FROM comments_freecomment;
-
- INSERT INTO django_comments
- (content_type_id, object_pk, site_id, user_id, user_name, user_email,
- user_url, comment, submit_date, ip_address, is_public, is_removed)
- SELECT
- content_type_id, object_id, site_id, user_id, '', '', '', comment,
- submit_date, ip_address, is_public, is_removed
- FROM comments_comment;
-
- UPDATE django_comments SET user_name = (
- SELECT username FROM auth_user
- WHERE django_comments.user_id = auth_user.id
- ) WHERE django_comments.user_id is not NULL;
- UPDATE django_comments SET user_email = (
- SELECT email FROM auth_user
- WHERE django_comments.user_id = auth_user.id
- ) WHERE django_comments.user_id is not NULL;
-
- COMMIT;
diff --git a/parts/django/docs/ref/contrib/contenttypes.txt b/parts/django/docs/ref/contrib/contenttypes.txt
deleted file mode 100644
index b695651..0000000
--- a/parts/django/docs/ref/contrib/contenttypes.txt
+++ /dev/null
@@ -1,385 +0,0 @@
-==========================
-The contenttypes framework
-==========================
-
-.. module:: django.contrib.contenttypes
- :synopsis: Provides generic interface to installed models.
-
-Django includes a :mod:`contenttypes` application that can track all of
-the models installed in your Django-powered project, providing a
-high-level, generic interface for working with your models.
-
-Overview
-========
-
-At the heart of the contenttypes application is the
-:class:`~django.contrib.contenttypes.models.ContentType` model, which lives at
-``django.contrib.contenttypes.models.ContentType``. Instances of
-:class:`~django.contrib.contenttypes.models.ContentType` represent and store
-information about the models installed in your project, and new instances of
-:class:`~django.contrib.contenttypes.models.ContentType` are automatically
-created whenever new models are installed.
-
-Instances of :class:`~django.contrib.contenttypes.models.ContentType` have
-methods for returning the model classes they represent and for querying objects
-from those models. :class:`~django.contrib.contenttypes.models.ContentType`
-also has a :ref:`custom manager <custom-managers>` that adds methods for
-working with :class:`~django.contrib.contenttypes.models.ContentType` and for
-obtaining instances of :class:`~django.contrib.contenttypes.models.ContentType`
-for a particular model.
-
-Relations between your models and
-:class:`~django.contrib.contenttypes.models.ContentType` can also be used to
-enable "generic" relationships between an instance of one of your
-models and instances of any model you have installed.
-
-Installing the contenttypes framework
-=====================================
-
-The contenttypes framework is included in the default
-:setting:`INSTALLED_APPS` list created by ``django-admin.py startproject``,
-but if you've removed it or if you manually set up your
-:setting:`INSTALLED_APPS` list, you can enable it by adding
-``'django.contrib.contenttypes'`` to your :setting:`INSTALLED_APPS` setting.
-
-It's generally a good idea to have the contenttypes framework
-installed; several of Django's other bundled applications require it:
-
- * The admin application uses it to log the history of each object
- added or changed through the admin interface.
-
- * Django's :mod:`authentication framework <django.contrib.auth>` uses it
- to tie user permissions to specific models.
-
- * Django's comments system (:mod:`django.contrib.comments`) uses it to
- "attach" comments to any installed model.
-
-The ``ContentType`` model
-=========================
-
-.. class:: models.ContentType
-
- Each instance of :class:`~django.contrib.contenttypes.models.ContentType`
- has three fields which, taken together, uniquely describe an installed model:
-
- .. attribute:: models.ContentType.app_label
-
- The name of the application the model is part of. This is taken from
- the :attr:`app_label` attribute of the model, and includes only the *last*
- part of the application's Python import path;
- "django.contrib.contenttypes", for example, becomes an :attr:`app_label`
- of "contenttypes".
-
- .. attribute:: models.ContentType.model
-
- The name of the model class.
-
- .. attribute:: models.ContentType.name
-
- The human-readable name of the model. This is taken from the
- :attr:`verbose_name <django.db.models.fields.Field.verbose_name>`
- attribute of the model.
-
-Let's look at an example to see how this works. If you already have
-the contenttypes application installed, and then add
-:mod:`the sites application <django.contrib.sites>` to your
-:setting:`INSTALLED_APPS` setting and run ``manage.py syncdb`` to install it,
-the model :class:`django.contrib.sites.models.Site` will be installed into
-your database. Along with it a new instance of
-:class:`~django.contrib.contenttypes.models.ContentType` will be
-created with the following values:
-
- * :attr:`app_label` will be set to ``'sites'`` (the last part of the Python
- path "django.contrib.sites").
-
- * :attr:`model` will be set to ``'site'``.
-
- * :attr:`name` will be set to ``'site'``.
-
-.. _the verbose_name attribute: ../model-api/#verbose_name
-
-Methods on ``ContentType`` instances
-====================================
-
-.. class:: models.ContentType
-
- Each :class:`~django.contrib.contenttypes.models.ContentType` instance has
- methods that allow you to get from a
- :class:`~django.contrib.contenttypes.models.ContentType` instance to the model
- it represents, or to retrieve objects from that model:
-
-.. method:: models.ContentType.get_object_for_this_type(**kwargs)
-
- Takes a set of valid :ref:`lookup arguments <field-lookups-intro>` for the
- model the :class:`~django.contrib.contenttypes.models.ContentType`
- represents, and does :lookup:`a get() lookup <get>` on that model,
- returning the corresponding object.
-
-.. method:: models.ContentType.model_class()
-
- Returns the model class represented by this
- :class:`~django.contrib.contenttypes.models.ContentType` instance.
-
-For example, we could look up the
-:class:`~django.contrib.contenttypes.models.ContentType` for the
-:class:`~django.contrib.auth.models.User` model::
-
- >>> from django.contrib.contenttypes.models import ContentType
- >>> user_type = ContentType.objects.get(app_label="auth", model="user")
- >>> user_type
- <ContentType: user>
-
-And then use it to query for a particular ``User``, or to get access
-to the ``User`` model class::
-
- >>> user_type.model_class()
- <class 'django.contrib.auth.models.User'>
- >>> user_type.get_object_for_this_type(username='Guido')
- <User: Guido>
-
-Together,
-:meth:`~django.contrib.contenttypes.models.ContentType.get_object_for_this_type`
-and :meth:`~django.contrib.contenttypes.models.ContentType.model_class`
-enable two extremely important use cases:
-
- 1. Using these methods, you can write high-level generic code that
- performs queries on any installed model -- instead of importing and using
- a single specific model class, you can pass an ``app_label`` and
- ``model`` into a :class:`~django.contrib.contenttypes.models.ContentType`
- lookup at runtime, and then work with the model class or retrieve objects
- from it.
-
- 2. You can relate another model to
- :class:`~django.contrib.contenttypes.models.ContentType` as a way of
- tying instances of it to particular model classes, and use these methods
- to get access to those model classes.
-
-Several of Django's bundled applications make use of the latter technique.
-For example,
-:class:`the permissions system <django.contrib.auth.models.Permission` in
-Django's authentication framework uses a
-:class:`~django.contrib.auth.models.Permission` model with a foreign
-key to :class:`~django.contrib.contenttypes.models.ContentType`; this lets
-:class:`~django.contrib.auth.models.Permission` represent concepts like
-"can add blog entry" or "can delete news story".
-
-The ``ContentTypeManager``
---------------------------
-
-.. class:: models.ContentTypeManager
-
- :class:`~django.contrib.contenttypes.models.ContentType` also has a custom
- manager, :class:`~django.contrib.contenttypes.models.ContentTypeManager`,
- which adds the following methods:
-
- .. method:: models.ContentTypeManager.clear_cache()
-
- Clears an internal cache used by
- :class:`~django.contrib.contenttypes.models.ContentType` to keep track
- of which models for which it has created
- :class:`django.contrib.contenttypes.models.ContentType` instances. You
- probably won't ever need to call this method yourself; Django will call
- it automatically when it's needed.
-
- .. method:: models.ContentTypeManager.get_for_model(model)
-
- Takes either a model class or an instance of a model, and returns the
- :class:`~django.contrib.contenttypes.models.ContentType` instance
- representing that model.
-
-The :meth:`~models.ContentTypeManager.get_for_model()` method is especially useful when you know you
-need to work with a :class:`ContentType <django.contrib.contenttypes.models.ContentType>` but don't want to go to the
-trouble of obtaining the model's metadata to perform a manual lookup::
-
- >>> from django.contrib.auth.models import User
- >>> user_type = ContentType.objects.get_for_model(User)
- >>> user_type
- <ContentType: user>
-
-.. _generic-relations:
-
-Generic relations
-=================
-
-Adding a foreign key from one of your own models to
-:class:`~django.contrib.contenttypes.models.ContentType` allows your model to
-effectively tie itself to another model class, as in the example of the
-:class:`~django.contrib.auth.models.Permission` model above. But it's possible
-to go one step further and use
-:class:`~django.contrib.contenttypes.models.ContentType` to enable truly
-generic (sometimes called "polymorphic") relationships between models.
-
-A simple example is a tagging system, which might look like this::
-
- from django.db import models
- from django.contrib.contenttypes.models import ContentType
- from django.contrib.contenttypes import generic
-
- class TaggedItem(models.Model):
- tag = models.SlugField()
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey('content_type', 'object_id')
-
- def __unicode__(self):
- return self.tag
-
-A normal :class:`~django.db.models.fields.related.ForeignKey` can only "point
-to" one other model, which means that if the ``TaggedItem`` model used a
-:class:`~django.db.models.fields.related.ForeignKey` it would have to
-choose one and only one model to store tags for. The contenttypes
-application provides a special field type --
-:class:`django.contrib.contenttypes.generic.GenericForeignKey` -- which
-works around this and allows the relationship to be with any
-model. There are three parts to setting up a
-:class:`~django.contrib.contenttypes.generic.GenericForeignKey`:
-
- 1. Give your model a :class:`~django.db.models.fields.related.ForeignKey`
- to :class:`~django.contrib.contenttypes.models.ContentType`.
-
- 2. Give your model a field that can store a primary-key value from the
- models you'll be relating to. (For most models, this means an
- :class:`~django.db.models.fields.IntegerField` or
- :class:`~django.db.models.fields.PositiveIntegerField`.)
-
- This field must be of the same type as the primary key of the models
- that will be involved in the generic relation. For example, if you use
- :class:`~django.db.models.fields.IntegerField`, you won't be able to
- form a generic relation with a model that uses a
- :class:`~django.db.models.fields.CharField` as a primary key.
-
- 3. Give your model a
- :class:`~django.contrib.contenttypes.generic.GenericForeignKey`, and
- pass it the names of the two fields described above. If these fields
- are named "content_type" and "object_id", you can omit this -- those
- are the default field names
- :class:`~django.contrib.contenttypes.generic.GenericForeignKey` will
- look for.
-
-This will enable an API similar to the one used for a normal
-:class:`~django.db.models.fields.related.ForeignKey`;
-each ``TaggedItem`` will have a ``content_object`` field that returns the
-object it's related to, and you can also assign to that field or use it when
-creating a ``TaggedItem``::
-
- >>> from django.contrib.auth.models import User
- >>> guido = User.objects.get(username='Guido')
- >>> t = TaggedItem(content_object=guido, tag='bdfl')
- >>> t.save()
- >>> t.content_object
- <User: Guido>
-
-Due to the way :class:`~django.contrib.contenttypes.generic.GenericForeignKey`
-is implemented, you cannot use such fields directly with filters (``filter()``
-and ``exclude()``, for example) via the database API. They aren't normal field
-objects. These examples will *not* work::
-
- # This will fail
- >>> TaggedItem.objects.filter(content_object=guido)
- # This will also fail
- >>> TaggedItem.objects.get(content_object=guido)
-
-Reverse generic relations
--------------------------
-
-If you know which models you'll be using most often, you can also add
-a "reverse" generic relationship to enable an additional API. For example::
-
- class Bookmark(models.Model):
- url = models.URLField()
- tags = generic.GenericRelation(TaggedItem)
-
-``Bookmark`` instances will each have a ``tags`` attribute, which can
-be used to retrieve their associated ``TaggedItems``::
-
- >>> b = Bookmark(url='http://www.djangoproject.com/')
- >>> b.save()
- >>> t1 = TaggedItem(content_object=b, tag='django')
- >>> t1.save()
- >>> t2 = TaggedItem(content_object=b, tag='python')
- >>> t2.save()
- >>> b.tags.all()
- [<TaggedItem: django>, <TaggedItem: python>]
-
-Just as :class:`django.contrib.contenttypes.generic.GenericForeignKey`
-accepts the names of the content-type and object-ID fields as
-arguments, so too does ``GenericRelation``; if the model which has the
-generic foreign key is using non-default names for those fields, you
-must pass the names of the fields when setting up a
-``GenericRelation`` to it. For example, if the ``TaggedItem`` model
-referred to above used fields named ``content_type_fk`` and
-``object_primary_key`` to create its generic foreign key, then a
-``GenericRelation`` back to it would need to be defined like so::
-
- tags = generic.GenericRelation(TaggedItem, content_type_field='content_type_fk', object_id_field='object_primary_key')
-
-Of course, if you don't add the reverse relationship, you can do the
-same types of lookups manually::
-
- >>> b = Bookmark.objects.get(url='http://www.djangoproject.com/')
- >>> bookmark_type = ContentType.objects.get_for_model(b)
- >>> TaggedItem.objects.filter(content_type__pk=bookmark_type.id,
- ... object_id=b.id)
- [<TaggedItem: django>, <TaggedItem: python>]
-
-Note that if the model in a
-:class:`~django.contrib.contenttypes.generic.GenericRelation` uses a
-non-default value for ``ct_field`` or ``fk_field`` in its
-:class:`~django.contrib.contenttypes.generic.GenericForeignKey` (e.g. the
-:mod:`django.contrib.comments` app uses ``ct_field="object_pk"``),
-you'll need to set ``content_type_field`` and/or ``object_id_field`` in
-the :class:`~django.contrib.contenttypes.generic.GenericRelation` to
-match the ``ct_field`` and ``fk_field``, respectively, in the
-:class:`~django.contrib.contenttypes.generic.GenericForeignKey`::
-
- comments = generic.GenericRelation(Comment, object_id_field="object_pk")
-
-Note also, that if you delete an object that has a
-:class:`~django.contrib.contenttypes.generic.GenericRelation`, any objects
-which have a :class:`~django.contrib.contenttypes.generic.GenericForeignKey`
-pointing at it will be deleted as well. In the example above, this means that
-if a ``Bookmark`` object were deleted, any ``TaggedItem`` objects pointing at
-it would be deleted at the same time.
-
-Generic relations and aggregation
----------------------------------
-
-:doc:`Django's database aggregation API </topics/db/aggregation>`
-doesn't work with a
-:class:`~django.contrib.contenttypes.generic.GenericRelation`. For example, you
-might be tempted to try something like::
-
- Bookmark.objects.aggregate(Count('tags'))
-
-This will not work correctly, however. The generic relation adds extra filters
-to the queryset to ensure the correct content type, but the ``aggregate`` method
-doesn't take them into account. For now, if you need aggregates on generic
-relations, you'll need to calculate them without using the aggregation API.
-
-Generic relations in forms and admin
-------------------------------------
-
-:mod:`django.contrib.contenttypes.generic` provides both a
-:class:`~django.contrib.contenttypes.generic.GenericInlineFormSet`
-and :class:`~django.contrib.contenttypes.generic.GenericInlineModelAdmin`.
-This enables the use of generic relations in forms and the admin. See the
-:doc:`model formset </topics/forms/modelforms>` and
-:doc:`admin </ref/contrib/admin/index>` documentation for more information.
-
-.. class:: generic.GenericInlineModelAdmin
-
- The :class:`~django.contrib.contenttypes.generic.GenericInlineModelAdmin`
- class inherits all properties from an
- :class:`~django.contrib.admin.InlineModelAdmin` class. However,
- it adds a couple of its own for working with the generic relation:
-
- .. attribute:: generic.GenericInlineModelAdmin.ct_field
-
- The name of the
- :class:`~django.contrib.contenttypes.models.ContentType` foreign key
- field on the model. Defaults to ``content_type``.
-
- .. attribute:: generic.GenericInlineModelAdmin.ct_fk_field
-
- The name of the integer field that represents the ID of the related
- object. Defaults to ``object_id``.
diff --git a/parts/django/docs/ref/contrib/csrf.txt b/parts/django/docs/ref/contrib/csrf.txt
deleted file mode 100644
index c32dd73..0000000
--- a/parts/django/docs/ref/contrib/csrf.txt
+++ /dev/null
@@ -1,433 +0,0 @@
-=====================================
-Cross Site Request Forgery protection
-=====================================
-
-.. module:: django.middleware.csrf
- :synopsis: Protects against Cross Site Request Forgeries
-
-The CSRF middleware and template tag provides easy-to-use protection against
-`Cross Site Request Forgeries`_. This type of attack occurs when a malicious
-Web site contains a link, a form button or some javascript that is intended to
-perform some action on your Web site, using the credentials of a logged-in user
-who visits the malicious site in their browser. A related type of attack,
-'login CSRF', where an attacking site tricks a user's browser into logging into
-a site with someone else's credentials, is also covered.
-
-The first defense against CSRF attacks is to ensure that GET requests are
-side-effect free. POST requests can then be protected by following the steps
-below.
-
-.. versionadded:: 1.2
- The 'contrib' apps, including the admin, use the functionality described
- here. Because it is security related, a few things have been added to core
- functionality to allow this to happen without any required upgrade steps.
-
-.. _Cross Site Request Forgeries: http://www.squarefree.com/securitytips/web-developers.html#CSRF
-
-How to use it
-=============
-
-.. versionchanged:: 1.2
- The template tag functionality (the recommended way to use this) was added
- in version 1.2. The previous method (still available) is described under
- `Legacy method`_.
-
-To enable CSRF protection for your views, follow these steps:
-
- 1. Add the middleware
- ``'django.middleware.csrf.CsrfViewMiddleware'`` to your list of
- middleware classes, :setting:`MIDDLEWARE_CLASSES`. (It should come
- before ``CsrfResponseMiddleware`` if that is being used, and before any
- view middleware that assume that CSRF attacks have been dealt with.)
-
- Alternatively, you can use the decorator
- ``django.views.decorators.csrf.csrf_protect`` on particular views you
- want to protect (see below).
-
- 2. In any template that uses a POST form, use the :ttag:`csrf_token` tag inside
- the ``<form>`` element if the form is for an internal URL, e.g.::
-
- <form action="" method="post">{% csrf_token %}
-
- This should not be done for POST forms that target external URLs, since
- that would cause the CSRF token to be leaked, leading to a vulnerability.
-
- 3. In the corresponding view functions, ensure that the
- ``'django.core.context_processors.csrf'`` context processor is
- being used. Usually, this can be done in one of two ways:
-
- 1. Use RequestContext, which always uses
- ``'django.core.context_processors.csrf'`` (no matter what your
- TEMPLATE_CONTEXT_PROCESSORS setting). If you are using
- generic views or contrib apps, you are covered already, since these
- apps use RequestContext throughout.
-
- 2. Manually import and use the processor to generate the CSRF token and
- add it to the template context. e.g.::
-
- from django.core.context_processors import csrf
- from django.shortcuts import render_to_response
-
- def my_view(request):
- c = {}
- c.update(csrf(request))
- # ... view code here
- return render_to_response("a_template.html", c)
-
- You may want to write your own ``render_to_response`` wrapper that
- takes care of this step for you.
-
-The utility script ``extras/csrf_migration_helper.py`` can help to automate the
-finding of code and templates that may need to be upgraded. It contains full
-help on how to use it.
-
-The decorator method
---------------------
-
-Rather than adding ``CsrfViewMiddleware`` as a blanket protection, you can use
-the ``csrf_protect`` decorator, which has exactly the same functionality, on
-particular views that need the protection. It must be used **both** on views
-that insert the CSRF token in the output, and on those that accept the POST form
-data. (These are often the same view function, but not always). It is used like
-this::
-
- from django.views.decorators.csrf import csrf_protect
- from django.template import RequestContext
-
- @csrf_protect
- def my_view(request):
- c = {}
- # ...
- return render_to_response("a_template.html", c,
- context_instance=RequestContext(request))
-
-Use of the decorator is **not recommended** by itself, since if you forget to
-use it, you will have a security hole. The 'belt and braces' strategy of using
-both is fine, and will incur minimal overhead.
-
-Legacy method
--------------
-
-In Django 1.1, the template tag did not exist. Instead, a post-processing
-middleware that re-wrote POST forms to include the CSRF token was used. If you
-are upgrading a site from version 1.1 or earlier, please read this section and
-the `Upgrading notes`_ below. The post-processing middleware is still available
-as ``CsrfResponseMiddleware``, and it can be used by following these steps:
-
- 1. Follow step 1 above to install ``CsrfViewMiddleware``.
-
- 2. Add ``'django.middleware.csrf.CsrfResponseMiddleware'`` to your
- :setting:`MIDDLEWARE_CLASSES` setting.
-
- ``CsrfResponseMiddleware`` needs to process the response before things
- like compression or setting ofETags happen to the response, so it must
- come after ``GZipMiddleware``, ``CommonMiddleware`` and
- ``ConditionalGetMiddleware`` in the list. It also must come after
- ``CsrfViewMiddleware``.
-
-Use of the ``CsrfResponseMiddleware`` is not recommended because of the
-performance hit it imposes, and because of a potential security problem (see
-below). It can be used as an interim measure until applications have been
-updated to use the :ttag:`csrf_token` tag. It is deprecated and will be
-removed in Django 1.4.
-
-Django 1.1 and earlier provided a single ``CsrfMiddleware`` class. This is also
-still available for backwards compatibility. It combines the functions of the
-two middleware.
-
-Note also that previous versions of these classes depended on the sessions
-framework, but this dependency has now been removed, with backward compatibility
-support so that upgrading will not produce any issues.
-
-Security of legacy method
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The post-processing ``CsrfResponseMiddleware`` adds the CSRF token to all POST
-forms (unless the view has been decorated with ``csrf_response_exempt``). If
-the POST form has an external untrusted site as its target, rather than an
-internal page, that site will be sent the CSRF token when the form is submitted.
-Armed with this leaked information, that site will then be able to successfully
-launch a CSRF attack on your site against that user. The
-``@csrf_response_exempt`` decorator can be used to fix this, but only if the
-page doesn't also contain internal forms that require the token.
-
-.. _ref-csrf-upgrading-notes:
-
-Upgrading notes
----------------
-
-When upgrading to version 1.2 or later, you may have applications that rely on
-the old post-processing functionality for CSRF protection, or you may not have
-enabled any CSRF protection. This section outlines the steps necessary for a
-smooth upgrade, without having to fix all the applications to use the new
-template tag method immediately.
-
-First of all, the location of the middleware and related functions have
-changed. There are backwards compatible stub files so that old imports will
-continue to work for now, but they are deprecated and will be removed in Django
-1.4. The following changes have been made:
-
- * Middleware have been moved to ``django.middleware.csrf``
- * Decorators have been moved to ``django.views.decorators.csrf``
-
-====================================================== ==============================================
- Old New
-====================================================== ==============================================
-django.contrib.csrf.middleware.CsrfMiddleware django.middleware.csrf.CsrfMiddleware
-django.contrib.csrf.middleware.CsrfViewMiddleware django.middleware.csrf.CsrfViewMiddleware
-django.contrib.csrf.middleware.CsrfResponseMiddleware django.middleware.csrf.CsrfResponseMiddleware
-django.contrib.csrf.middleware.csrf_exempt django.views.decorators.csrf.csrf_exempt
-django.contrib.csrf.middleware.csrf_view_exempt django.views.decorators.csrf.csrf_view_exempt
-django.contrib.csrf.middleware.csrf_response_exempt django.views.decorators.csrf.csrf_response_exempt
-====================================================== ==============================================
-
-You should update any imports, and also the paths in your
-:setting:`MIDDLEWARE_CLASSES`.
-
-If you have ``CsrfMiddleware`` in your :setting:`MIDDLEWARE_CLASSES`, you will now
-have a working installation with CSRF protection. It is recommended at this
-point that you replace ``CsrfMiddleware`` with its two components,
-``CsrfViewMiddleware`` and ``CsrfResponseMiddleware`` (in that order).
-
-If you do not have any of the middleware in your :setting:`MIDDLEWARE_CLASSES`,
-you will have a working installation but without any CSRF protection for your
-views (just as you had before). It is strongly recommended to install
-``CsrfViewMiddleware`` and ``CsrfResponseMiddleware``, as described above.
-
-Note that contrib apps, such as the admin, have been updated to use the
-``csrf_protect`` decorator, so that they are secured even if you do not add the
-``CsrfViewMiddleware`` to your settings. However, if you have supplied
-customised templates to any of the view functions of contrib apps (whether
-explicitly via a keyword argument, or by overriding built-in templates), **you
-MUST update them** to include the :ttag:`csrf_token` template tag as described
-above, or they will stop working. (If you cannot update these templates for
-some reason, you will be forced to use ``CsrfResponseMiddleware`` for these
-views to continue working).
-
-Note also, if you are using the comments app, and you are not going to add
-``CsrfViewMiddleware`` to your settings (not recommended), you will need to add
-the ``csrf_protect`` decorator to any views that include the comment forms and
-target the comment views (usually using the :ttag:`comment_form_target` template
-tag).
-
-Assuming you have followed the above, all views in your Django site will now be
-protected by the ``CsrfViewMiddleware``. Contrib apps meet the requirements
-imposed by the ``CsrfViewMiddleware`` using the template tag, and other
-applications in your project will meet its requirements by virtue of the
-``CsrfResponseMiddleware``.
-
-The next step is to update all your applications to use the template tag, as
-described in `How to use it`_, steps 2-3. This can be done as soon as is
-practical. Any applications that are updated will now require Django 1.1.2 or
-later, since they will use the CSRF template tag which was not available in
-earlier versions. (The template tag in 1.1.2 is actually a no-op that exists
-solely to ease the transition to 1.2 — it allows apps to be created that have
-CSRF protection under 1.2 without requiring users of the apps to upgrade to the
-Django 1.2.X series).
-
-The utility script ``extras/csrf_migration_helper.py`` can help to automate the
-finding of code and templates that may need to be upgraded. It contains full
-help on how to use it.
-
-Finally, once all applications are upgraded, ``CsrfResponseMiddleware`` can be
-removed from your settings.
-
-While ``CsrfResponseMiddleware`` is still in use, the ``csrf_response_exempt``
-decorator, described in `Exceptions`_, may be useful. The post-processing
-middleware imposes a performance hit and a potential vulnerability, and any
-views that have been upgraded to use the new template tag method no longer need
-it.
-
-Exceptions
-----------
-
-.. versionadded:: 1.1
-.. versionchanged:: 1.2
- Import paths for the decorators below were changed.
-
-To manually exclude a view function from being handled by either of the two CSRF
-middleware, you can use the ``csrf_exempt`` decorator, found in the
-``django.views.decorators.csrf`` module. For example::
-
- from django.views.decorators.csrf import csrf_exempt
-
- @csrf_exempt
- def my_view(request):
- return HttpResponse('Hello world')
-
-Like the middleware, the ``csrf_exempt`` decorator is composed of two parts: a
-``csrf_view_exempt`` decorator and a ``csrf_response_exempt`` decorator, found
-in the same module. These disable the view protection mechanism
-(``CsrfViewMiddleware``) and the response post-processing
-(``CsrfResponseMiddleware``) respectively. They can be used individually if
-required.
-
-You don't have to worry about doing this for most AJAX views. Any request sent
-with "X-Requested-With: XMLHttpRequest" is automatically exempt. (See the `How
-it works`_ section.)
-
-Subdomains
-----------
-
-By default, CSRF cookies are specific to the subdomain they are set for. This
-means that a form served from one subdomain (e.g. server1.example.com) will not
-be able to have a target on another subdomain (e.g. server2.example.com). This
-restriction can be removed by setting :setting:`CSRF_COOKIE_DOMAIN` to be
-something like ``".example.com"``.
-
-Please note that, with or without use of this setting, this CSRF protection
-mechanism is not safe against cross-subdomain attacks -- see `Limitations`_.
-
-Rejected requests
-=================
-
-By default, a '403 Forbidden' response is sent to the user if an incoming
-request fails the checks performed by ``CsrfViewMiddleware``. This should
-usually only be seen when there is a genuine Cross Site Request Forgery, or
-when, due to a programming error, the CSRF token has not been included with a
-POST form.
-
-No logging is done, and the error message is not very friendly, so you may want
-to provide your own page for handling this condition. To do this, simply set
-the :setting:`CSRF_FAILURE_VIEW` setting to a dotted path to your own view
-function, which should have the following signature::
-
- def csrf_failure(request, reason="")
-
-where ``reason`` is a short message (intended for developers or logging, not for
-end users) indicating the reason the request was rejected.
-
-How it works
-============
-
-The CSRF protection is based on the following things:
-
-1. A CSRF cookie that is set to a random value (a session independent nonce, as
- it is called), which other sites will not have access to.
-
- This cookie is set by ``CsrfViewMiddleware``. It is meant to be permanent,
- but since there is no way to set a cookie that never expires, it is sent with
- every response that has called ``django.middleware.csrf.get_token()``
- (the function used internally to retrieve the CSRF token).
-
-2. A hidden form field with the name 'csrfmiddlewaretoken' present in all
- outgoing POST forms. The value of this field is the value of the CSRF
- cookie.
-
- This part is done by the template tag (and with the legacy method, it is done
- by ``CsrfResponseMiddleware``).
-
-3. For all incoming POST requests, a CSRF cookie must be present, and the
- 'csrfmiddlewaretoken' field must be present and correct. If it isn't, the
- user will get a 403 error.
-
- This check is done by ``CsrfViewMiddleware``.
-
-4. In addition, for HTTPS requests, strict referer checking is done by
- ``CsrfViewMiddleware``. This is necessary to address a Man-In-The-Middle
- attack that is possible under HTTPS when using a session independent nonce,
- due to the fact that HTTP 'Set-Cookie' headers are (unfortunately) accepted
- by clients that are talking to a site under HTTPS. (Referer checking is not
- done for HTTP requests because the presence of the Referer header is not
- reliable enough under HTTP.)
-
-This ensures that only forms that have originated from your Web site can be used
-to POST data back.
-
-It deliberately only targets HTTP POST requests (and the corresponding POST
-forms). GET requests ought never to have any potentially dangerous side effects
-(see `9.1.1 Safe Methods, HTTP 1.1, RFC 2616`_), and so a CSRF attack with a GET
-request ought to be harmless.
-
-``CsrfResponseMiddleware`` checks the Content-Type before modifying the
-response, and only pages that are served as 'text/html' or
-'application/xml+xhtml' are modified.
-
-AJAX
-----
-
-The middleware tries to be smart about requests that come in via AJAX. Most
-modern JavaScript toolkits send an "X-Requested-With: XMLHttpRequest" HTTP
-header; these requests are detected and automatically *not* handled by this
-middleware. We can do this safely because, in the context of a browser, the
-header can only be added by using ``XMLHttpRequest``, and browsers already
-implement a same-domain policy for ``XMLHttpRequest``.
-
-For the more recent browsers that relax this same-domain policy, custom headers
-like "X-Requested-With" are only allowed after the browser has done a
-'preflight' check to the server to see if the cross-domain request is allowed,
-using a strictly 'opt in' mechanism, so the exception for AJAX is still safe—if
-the developer has specifically opted in to allowing cross-site AJAX POST
-requests on a specific URL, they obviously don't want the middleware to disallow
-exactly that.
-
-.. _9.1.1 Safe Methods, HTTP 1.1, RFC 2616: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
-
-Caching
-=======
-
-If the :ttag:`csrf_token` template tag is used by a template (or the ``get_token``
-function is called some other way), ``CsrfViewMiddleware`` will add a cookie and
-a ``Vary: Cookie`` header to the response. Similarly,
-``CsrfResponseMiddleware`` will send the ``Vary: Cookie`` header if it inserted
-a token. This means that these middleware will play well with the cache
-middleware if it is used as instructed (``UpdateCacheMiddleware`` goes before
-all other middleware).
-
-However, if you use cache decorators on individual views, the CSRF middleware
-will not yet have been able to set the Vary header. In this case, on any views
-that will require a CSRF token to be inserted you should use the
-:func:`django.views.decorators.vary.vary_on_cookie` decorator first::
-
- from django.views.decorators.cache import cache_page
- from django.views.decorators.vary import vary_on_cookie
-
- @cache_page(60 * 15)
- @vary_on_cookie
- def my_view(request):
- # ...
-
-
-Testing
-=======
-
-The ``CsrfViewMiddleware`` will usually be a big hindrance to testing view
-functions, due to the need for the CSRF token which must be sent with every POST
-request. For this reason, Django's HTTP client for tests has been modified to
-set a flag on requests which relaxes the middleware and the ``csrf_protect``
-decorator so that they no longer rejects requests. In every other respect
-(e.g. sending cookies etc.), they behave the same.
-
-If, for some reason, you *want* the test client to perform CSRF
-checks, you can create an instance of the test client that enforces
-CSRF checks::
-
- >>> from django.test import Client
- >>> csrf_client = Client(enforce_csrf_checks=True)
-
-Limitations
-===========
-
-Subdomains within a site will be able to set cookies on the client for the whole
-domain. By setting the cookie and using a corresponding token, subdomains will
-be able to circumvent the CSRF protection. The only way to avoid this is to
-ensure that subdomains are controlled by trusted users (or, are at least unable
-to set cookies). Note that even without CSRF, there are other vulnerabilities,
-such as session fixation, that make giving subdomains to untrusted parties a bad
-idea, and these vulnerabilities cannot easily be fixed with current browsers.
-
-If you are using ``CsrfResponseMiddleware`` and your app creates HTML pages and
-forms in some unusual way, (e.g. it sends fragments of HTML in JavaScript
-document.write statements) you might bypass the filter that adds the hidden
-field to the form, in which case form submission will always fail. You should
-use the template tag or :meth:`django.middleware.csrf.get_token` to get
-the CSRF token and ensure it is included when your form is submitted.
-
-Contrib and reusable apps
-=========================
-
-Because it is possible for the developer to turn off the ``CsrfViewMiddleware``,
-all relevant views in contrib apps use the ``csrf_protect`` decorator to ensure
-the security of these applications against CSRF. It is recommended that the
-developers of other reusable apps that want the same guarantees also use the
-``csrf_protect`` decorator on their views.
diff --git a/parts/django/docs/ref/contrib/databrowse.txt b/parts/django/docs/ref/contrib/databrowse.txt
deleted file mode 100644
index 33c8228..0000000
--- a/parts/django/docs/ref/contrib/databrowse.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-==========
-Databrowse
-==========
-
-.. module:: django.contrib.databrowse
- :synopsis: Databrowse is a Django application that lets you browse your data.
-
-Databrowse is a Django application that lets you browse your data.
-
-As the Django admin dynamically creates an admin interface by introspecting
-your models, Databrowse dynamically creates a rich, browsable Web site by
-introspecting your models.
-
-.. admonition:: Note
-
- Databrowse is **very** new and is currently under active development. It
- may change substantially before the next Django release.
-
- With that said, it's easy to use, and it doesn't require writing any
- code. So you can play around with it today, with very little investment in
- time or coding.
-
-How to use Databrowse
-=====================
-
- 1. Point Django at the default Databrowse templates. There are two ways to
- do this:
-
- * Add ``'django.contrib.databrowse'`` to your :setting:`INSTALLED_APPS`
- setting. This will work if your :setting:`TEMPLATE_LOADERS` setting
- includes the ``app_directories`` template loader (which is the case by
- default). See the :ref:`template loader docs <template-loaders>` for
- more.
-
- * Otherwise, determine the full filesystem path to the
- :file:`django/contrib/databrowse/templates` directory, and add that
- directory to your :setting:`TEMPLATE_DIRS` setting.
-
- 2. Register a number of models with the Databrowse site::
-
- from django.contrib import databrowse
- from myapp.models import SomeModel, SomeOtherModel
-
- databrowse.site.register(SomeModel)
- databrowse.site.register(SomeOtherModel)
-
- Note that you should register the model *classes*, not instances.
-
- It doesn't matter where you put this, as long as it gets executed at some
- point. A good place for it is in your :doc:`URLconf file
- </topics/http/urls>` (``urls.py``).
-
- 3. Change your URLconf to import the :mod:`~django.contrib.databrowse` module::
-
- from django.contrib import databrowse
-
- ...and add the following line to your URLconf::
-
- (r'^databrowse/(.*)', databrowse.site.root),
-
- The prefix doesn't matter -- you can use ``databrowse/`` or ``db/`` or
- whatever you'd like.
-
- 4. Run the Django server and visit ``/databrowse/`` in your browser.
-
-Requiring user login
-====================
-
-You can restrict access to logged-in users with only a few extra lines of
-code. Simply add the following import to your URLconf::
-
- from django.contrib.auth.decorators import login_required
-
-Then modify the :doc:`URLconf </topics/http/urls>` so that the
-:func:`databrowse.site.root` view is decorated with
-:func:`django.contrib.auth.decorators.login_required`::
-
- (r'^databrowse/(.*)', login_required(databrowse.site.root)),
-
-If you haven't already added support for user logins to your :doc:`URLconf
-</topics/http/urls>`, as described in the :doc:`user authentication docs
-</ref/contrib/auth>`, then you will need to do so now with the following
-mapping::
-
- (r'^accounts/login/$', 'django.contrib.auth.views.login'),
-
-The final step is to create the login form required by
-:func:`django.contrib.auth.views.login`. The
-:doc:`user authentication docs </ref/contrib/auth>` provide full details and a
-sample template that can be used for this purpose.
diff --git a/parts/django/docs/ref/contrib/flatpages.txt b/parts/django/docs/ref/contrib/flatpages.txt
deleted file mode 100644
index 46b28dc..0000000
--- a/parts/django/docs/ref/contrib/flatpages.txt
+++ /dev/null
@@ -1,167 +0,0 @@
-=================
-The flatpages app
-=================
-
-.. module:: django.contrib.flatpages
- :synopsis: A framework for managing simple ?flat? HTML content in a database.
-
-Django comes with an optional "flatpages" application. It lets you store simple
-"flat" HTML content in a database and handles the management for you via
-Django's admin interface and a Python API.
-
-A flatpage is a simple object with a URL, title and content. Use it for
-one-off, special-case pages, such as "About" or "Privacy Policy" pages, that
-you want to store in a database but for which you don't want to develop a
-custom Django application.
-
-A flatpage can use a custom template or a default, systemwide flatpage
-template. It can be associated with one, or multiple, sites.
-
-.. versionadded:: 1.0
-
-The content field may optionally be left blank if you prefer to put your
-content in a custom template.
-
-Here are some examples of flatpages on Django-powered sites:
-
- * http://www.lawrence.com/about/contact/
- * http://www2.ljworld.com/site/rules/
-
-Installation
-============
-
-To install the flatpages app, follow these steps:
-
- 1. Install the :mod:`sites framework <django.contrib.sites>` by adding
- ``'django.contrib.sites'`` to your :setting:`INSTALLED_APPS` setting,
- if it's not already in there.
-
- Also make sure you've correctly set :setting:`SITE_ID` to the ID of the
- site the settings file represents. This will usually be ``1`` (i.e.
- ``SITE_ID = 1``, but if you're using the sites framework to manage
- multiple sites, it could be the ID of a different site.
-
- 2. Add ``'django.contrib.flatpages'`` to your :setting:`INSTALLED_APPS`
- setting.
-
- 3. Add ``'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'``
- to your :setting:`MIDDLEWARE_CLASSES` setting.
-
- 4. Run the command :djadmin:`manage.py syncdb <syncdb>`.
-
-How it works
-============
-
-``manage.py syncdb`` creates two tables in your database: ``django_flatpage``
-and ``django_flatpage_sites``. ``django_flatpage`` is a simple lookup table
-that simply maps a URL to a title and bunch of text content.
-``django_flatpage_sites`` associates a flatpage with a site.
-
-The :class:`~django.contrib.flatpages.middleware.FlatpageFallbackMiddleware`
-does all of the work. Each time any Django application raises a 404 error, this
-middleware checks the flatpages database for the requested URL as a last resort.
-Specifically, it checks for a flatpage with the given URL with a site ID that
-corresponds to the :setting:`SITE_ID` setting.
-
-If it finds a match, it follows this algorithm:
-
- * If the flatpage has a custom template, it loads that template. Otherwise,
- it loads the template :file:`flatpages/default.html`.
-
- * It passes that template a single context variable, :data:`flatpage`, which
- is the flatpage object. It uses
- :class:`~django.template.context.RequestContext` in rendering the
- template.
-
-If it doesn't find a match, the request continues to be processed as usual.
-
-The middleware only gets activated for 404s -- not for 500s or responses of any
-other status code.
-
-.. admonition:: Flatpages will not apply view middleware
-
- Because the ``FlatpageFallbackMiddleware`` is applied only after
- URL resolution has failed and produced a 404, the response it
- returns will not apply any :ref:`view middleware <view-middleware>`
- methods. Only requests which are successfully routed to a view via
- normal URL resolution apply view middleware.
-
-Note that the order of :setting:`MIDDLEWARE_CLASSES` matters. Generally, you can
-put :class:`~django.contrib.flatpages.middleware.FlatpageFallbackMiddleware` at
-the end of the list, because it's a last resort.
-
-For more on middleware, read the :doc:`middleware docs
-</topics/http/middleware>`.
-
-.. admonition:: Ensure that your 404 template works
-
- Note that the
- :class:`~django.contrib.flatpages.middleware.FlatpageFallbackMiddleware`
- only steps in once another view has successfully produced a 404 response.
- If another view or middleware class attempts to produce a 404 but ends up
- raising an exception instead (such as a ``TemplateDoesNotExist``
- exception if your site does not have an appropriate template to
- use for HTTP 404 responses), the response will become an HTTP 500
- ("Internal Server Error") and the
- :class:`~django.contrib.flatpages.middleware.FlatpageFallbackMiddleware`
- will not attempt to serve a flat page.
-
-How to add, change and delete flatpages
-=======================================
-
-Via the admin interface
------------------------
-
-If you've activated the automatic Django admin interface, you should see a
-"Flatpages" section on the admin index page. Edit flatpages as you edit any
-other object in the system.
-
-Via the Python API
-------------------
-
-.. class:: models.FlatPage
-
- Flatpages are represented by a standard
- :doc:`Django model </topics/db/models>`,
- which lives in `django/contrib/flatpages/models.py`_. You can access
- flatpage objects via the :doc:`Django database API </topics/db/queries>`.
-
-.. _django/contrib/flatpages/models.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/models.py
-
-Flatpage templates
-==================
-
-By default, flatpages are rendered via the template
-:file:`flatpages/default.html`, but you can override that for a
-particular flatpage: in the admin, a collapsed fieldset titled
-"Advanced options" (clicking will expand it) contains a field for
-specifying a template name. If you're creating a flat page via the
-Python API you can simply set the template name as the field
-``template_name`` on the ``FlatPage`` object.
-
-Creating the :file:`flatpages/default.html` template is your responsibility;
-in your template directory, just create a :file:`flatpages` directory
-containing a file :file:`default.html`.
-
-Flatpage templates are passed a single context variable, :data:`flatpage`,
-which is the flatpage object.
-
-Here's a sample :file:`flatpages/default.html` template:
-
-.. code-block:: html+django
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
- "http://www.w3.org/TR/REC-html40/loose.dtd">
- <html>
- <head>
- <title>{{ flatpage.title }}</title>
- </head>
- <body>
- {{ flatpage.content }}
- </body>
- </html>
-
-Since you're already entering raw HTML into the admin page for a flatpage,
-both ``flatpage.title`` and ``flatpage.content`` are marked as **not**
-requiring :ref:`automatic HTML escaping <automatic-html-escaping>` in the
-template.
diff --git a/parts/django/docs/ref/contrib/formtools/form-preview.txt b/parts/django/docs/ref/contrib/formtools/form-preview.txt
deleted file mode 100644
index a2cbea7..0000000
--- a/parts/django/docs/ref/contrib/formtools/form-preview.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-============
-Form preview
-============
-
-.. module:: django.contrib.formtools
- :synopsis: Displays an HTML form, forces a preview, then does something
- with the submission.
-
-Django comes with an optional "form preview" application that helps automate
-the following workflow:
-
-"Display an HTML form, force a preview, then do something with the submission."
-
-To force a preview of a form submission, all you have to do is write a short
-Python class.
-
-Overview
-=========
-
-Given a :class:`django.forms.Form` subclass that you define, this
-application takes care of the following workflow:
-
- 1. Displays the form as HTML on a Web page.
- 2. Validates the form data when it's submitted via POST.
- a. If it's valid, displays a preview page.
- b. If it's not valid, redisplays the form with error messages.
- 3. When the "confirmation" form is submitted from the preview page, calls
- a hook that you define -- a
- :meth:`~django.contrib.formtools.FormPreview.done()` method that gets
- passed the valid data.
-
-The framework enforces the required preview by passing a shared-secret hash to
-the preview page via hidden form fields. If somebody tweaks the form parameters
-on the preview page, the form submission will fail the hash-comparison test.
-
-How to use ``FormPreview``
-==========================
-
- 1. Point Django at the default FormPreview templates. There are two ways to
- do this:
-
- * Add ``'django.contrib.formtools'`` to your
- :setting:`INSTALLED_APPS` setting. This will work if your
- :setting:`TEMPLATE_LOADERS` setting includes the
- ``app_directories`` template loader (which is the case by
- default). See the :ref:`template loader docs <template-loaders>`
- for more.
-
- * Otherwise, determine the full filesystem path to the
- :file:`django/contrib/formtools/templates` directory, and add that
- directory to your :setting:`TEMPLATE_DIRS` setting.
-
- 2. Create a :class:`~django.contrib.formtools.FormPreview` subclass that
- overrides the :meth:`~django.contrib.formtools.FormPreview.done()`
- method::
-
- from django.contrib.formtools.preview import FormPreview
- from myapp.models import SomeModel
-
- class SomeModelFormPreview(FormPreview):
-
- def done(self, request, cleaned_data):
- # Do something with the cleaned_data, then redirect
- # to a "success" page.
- return HttpResponseRedirect('/form/success')
-
- This method takes an :class:`~django.http.HttpRequest` object and a
- dictionary of the form data after it has been validated and cleaned.
- It should return an :class:`~django.http.HttpResponseRedirect` that
- is the end result of the form being submitted.
-
- 3. Change your URLconf to point to an instance of your
- :class:`~django.contrib.formtools.FormPreview` subclass::
-
- from myapp.preview import SomeModelFormPreview
- from myapp.forms import SomeModelForm
- from django import forms
-
- ...and add the following line to the appropriate model in your URLconf::
-
- (r'^post/$', SomeModelFormPreview(SomeModelForm)),
-
- where ``SomeModelForm`` is a Form or ModelForm class for the model.
-
- 4. Run the Django server and visit :file:`/post/` in your browser.
-
-``FormPreview`` classes
-=======================
-
-.. class:: FormPreview
-
-A :class:`~django.contrib.formtools.FormPreview` class is a simple Python class
-that represents the preview workflow.
-:class:`~django.contrib.formtools.FormPreview` classes must subclass
-``django.contrib.formtools.preview.FormPreview`` and override the
-:meth:`~django.contrib.formtools.FormPreview.done()` method. They can live
-anywhere in your codebase.
-
-``FormPreview`` templates
-=========================
-
-By default, the form is rendered via the template :file:`formtools/form.html`,
-and the preview page is rendered via the template :file:`formtools/preview.html`.
-These values can be overridden for a particular form preview by setting
-:attr:`~django.contrib.formtools.FormPreview.preview_template` and
-:attr:`~django.contrib.formtools.FormPreview.form_template` attributes on the
-FormPreview subclass. See :file:`django/contrib/formtools/templates` for the
-default templates.
-
-Advanced ``FormPreview`` methods
-================================
-
-.. versionadded:: 1.2
-
-.. method:: FormPreview.process_preview
-
- Given a validated form, performs any extra processing before displaying the
- preview page, and saves any extra data in context.
-
- By default, this method is empty. It is called after the form is validated,
- but before the context is modified with hash information and rendered.
diff --git a/parts/django/docs/ref/contrib/formtools/form-wizard.txt b/parts/django/docs/ref/contrib/formtools/form-wizard.txt
deleted file mode 100644
index 390d575..0000000
--- a/parts/django/docs/ref/contrib/formtools/form-wizard.txt
+++ /dev/null
@@ -1,312 +0,0 @@
-===========
-Form wizard
-===========
-
-.. module:: django.contrib.formtools.wizard
- :synopsis: Splits forms across multiple Web pages.
-
-.. versionadded:: 1.0
-
-Django comes with an optional "form wizard" application that splits
-:doc:`forms </topics/forms/index>` across multiple Web pages. It maintains
-state in hashed HTML :samp:`<input type="hidden">` fields, and the data isn't
-processed server-side until the final form is submitted.
-
-You might want to use this if you have a lengthy form that would be too
-unwieldy for display on a single page. The first page might ask the user for
-core information, the second page might ask for less important information,
-etc.
-
-The term "wizard," in this context, is `explained on Wikipedia`_.
-
-.. _explained on Wikipedia: http://en.wikipedia.org/wiki/Wizard_%28software%29
-.. _forms: ../forms/
-
-How it works
-============
-
-Here's the basic workflow for how a user would use a wizard:
-
- 1. The user visits the first page of the wizard, fills in the form and
- submits it.
- 2. The server validates the data. If it's invalid, the form is displayed
- again, with error messages. If it's valid, the server calculates a
- secure hash of the data and presents the user with the next form,
- saving the validated data and hash in :samp:`<input type="hidden">`
- fields.
- 3. Step 1 and 2 repeat, for every subsequent form in the wizard.
- 4. Once the user has submitted all the forms and all the data has been
- validated, the wizard processes the data -- saving it to the database,
- sending an e-mail, or whatever the application needs to do.
-
-Usage
-=====
-
-This application handles as much machinery for you as possible. Generally, you
-just have to do these things:
-
- 1. Define a number of :class:`~django.forms.Form` classes -- one per wizard
- page.
-
- 2. Create a :class:`FormWizard` class that specifies what to do once all of
- your forms have been submitted and validated. This also lets you
- override some of the wizard's behavior.
-
- 3. Create some templates that render the forms. You can define a single,
- generic template to handle every one of the forms, or you can define a
- specific template for each form.
-
- 4. Point your URLconf at your :class:`FormWizard` class.
-
-Defining ``Form`` classes
-=========================
-
-The first step in creating a form wizard is to create the
-:class:`~django.forms.Form` classes. These should be standard
-:class:`django.forms.Form` classes, covered in the :doc:`forms documentation
-</topics/forms/index>`. These classes can live anywhere in your codebase, but
-convention is to put them in a file called :file:`forms.py` in your
-application.
-
-For example, let's write a "contact form" wizard, where the first page's form
-collects the sender's e-mail address and subject, and the second page collects
-the message itself. Here's what the :file:`forms.py` might look like::
-
- from django import forms
-
- class ContactForm1(forms.Form):
- subject = forms.CharField(max_length=100)
- sender = forms.EmailField()
-
- class ContactForm2(forms.Form):
- message = forms.CharField(widget=forms.Textarea)
-
-**Important limitation:** Because the wizard uses HTML hidden fields to store
-data between pages, you may not include a :class:`~django.forms.FileField`
-in any form except the last one.
-
-Creating a ``FormWizard`` class
-===============================
-
-The next step is to create a
-:class:`django.contrib.formtools.wizard.FormWizard` subclass. As with your
-:class:`~django.forms.Form` classes, this :class:`FormWizard` class can live
-anywhere in your codebase, but convention is to put it in :file:`forms.py`.
-
-The only requirement on this subclass is that it implement a
-:meth:`~FormWizard.done()` method.
-
-.. method:: FormWizard.done
-
- This method specifies what should happen when the data for *every* form is
- submitted and validated. This method is passed two arguments:
-
- * ``request`` -- an :class:`~django.http.HttpRequest` object
- * ``form_list`` -- a list of :class:`~django.forms.Form` classes
-
-In this simplistic example, rather than perform any database operation, the
-method simply renders a template of the validated data::
-
- from django.shortcuts import render_to_response
- from django.contrib.formtools.wizard import FormWizard
-
- class ContactWizard(FormWizard):
- def done(self, request, form_list):
- return render_to_response('done.html', {
- 'form_data': [form.cleaned_data for form in form_list],
- })
-
-Note that this method will be called via ``POST``, so it really ought to be a
-good Web citizen and redirect after processing the data. Here's another
-example::
-
- from django.http import HttpResponseRedirect
- from django.contrib.formtools.wizard import FormWizard
-
- class ContactWizard(FormWizard):
- def done(self, request, form_list):
- do_something_with_the_form_data(form_list)
- return HttpResponseRedirect('/page-to-redirect-to-when-done/')
-
-See the section `Advanced FormWizard methods`_ below to learn about more
-:class:`FormWizard` hooks.
-
-Creating templates for the forms
-================================
-
-Next, you'll need to create a template that renders the wizard's forms. By
-default, every form uses a template called :file:`forms/wizard.html`. (You can
-change this template name by overriding :meth:`~FormWizard.get_template()`,
-which is documented below. This hook also allows you to use a different
-template for each form.)
-
-This template expects the following context:
-
- * ``step_field`` -- The name of the hidden field containing the step.
- * ``step0`` -- The current step (zero-based).
- * ``step`` -- The current step (one-based).
- * ``step_count`` -- The total number of steps.
- * ``form`` -- The :class:`~django.forms.Form` instance for the current step
- (either empty or with errors).
- * ``previous_fields`` -- A string representing every previous data field,
- plus hashes for completed forms, all in the form of hidden fields. Note
- that you'll need to run this through the :tfilter:`safe` template filter,
- to prevent auto-escaping, because it's raw HTML.
-
-You can supply extra context to this template in two ways:
-
- * Set the :attr:`~FormWizard.extra_context` attribute on your
- :class:`FormWizard` subclass to a dictionary.
-
- * Pass a dictionary as a parameter named ``extra_context`` to your wizard's
- URL pattern in your URLconf. See :ref:`hooking-wizard-into-urlconf`.
-
-Here's a full example template:
-
-.. code-block:: html+django
-
- {% extends "base.html" %}
-
- {% block content %}
- <p>Step {{ step }} of {{ step_count }}</p>
- <form action="." method="post">{% csrf_token %}
- <table>
- {{ form }}
- </table>
- <input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
- {{ previous_fields|safe }}
- <input type="submit">
- </form>
- {% endblock %}
-
-Note that ``previous_fields``, ``step_field`` and ``step0`` are all required
-for the wizard to work properly.
-
-.. _hooking-wizard-into-urlconf:
-
-Hooking the wizard into a URLconf
-=================================
-
-Finally, we need to specify which forms to use in the wizard, and then
-deploy the new :class:`FormWizard` object a URL in ``urls.py``. The
-wizard takes a list of your :class:`~django.forms.Form` objects as
-arguments when you instantiate the Wizard::
-
- from django.conf.urls.defaults import *
- from testapp.forms import ContactForm1, ContactForm2, ContactWizard
-
- urlpatterns = patterns('',
- (r'^contact/$', ContactWizard([ContactForm1, ContactForm2])),
- )
-
-Advanced ``FormWizard`` methods
-===============================
-
-.. class:: FormWizard
-
- Aside from the :meth:`~done()` method, :class:`FormWizard` offers a few
- advanced method hooks that let you customize how your wizard works.
-
- Some of these methods take an argument ``step``, which is a zero-based
- counter representing the current step of the wizard. (E.g., the first form
- is ``0`` and the second form is ``1``.)
-
-.. method:: FormWizard.prefix_for_step
-
- Given the step, returns a form prefix to use. By default, this simply uses
- the step itself. For more, see the :ref:`form prefix documentation
- <form-prefix>`.
-
- Default implementation::
-
- def prefix_for_step(self, step):
- return str(step)
-
-.. method:: FormWizard.render_hash_failure
-
- Renders a template if the hash check fails. It's rare that you'd need to
- override this.
-
- Default implementation::
-
- def render_hash_failure(self, request, step):
- return self.render(self.get_form(step), request, step,
- context={'wizard_error':
- 'We apologize, but your form has expired. Please'
- ' continue filling out the form from this page.'})
-
-.. method:: FormWizard.security_hash
-
- Calculates the security hash for the given request object and
- :class:`~django.forms.Form` instance.
-
- By default, this uses an MD5 hash of the form data and your
- :setting:`SECRET_KEY` setting. It's rare that somebody would need to
- override this.
-
- Example::
-
- def security_hash(self, request, form):
- return my_hash_function(request, form)
-
-.. method:: FormWizard.parse_params
-
- A hook for saving state from the request object and ``args`` / ``kwargs``
- that were captured from the URL by your URLconf.
-
- By default, this does nothing.
-
- Example::
-
- def parse_params(self, request, *args, **kwargs):
- self.my_state = args[0]
-
-.. method:: FormWizard.get_template
-
- Returns the name of the template that should be used for the given step.
-
- By default, this returns :file:`'forms/wizard.html'`, regardless of step.
-
- Example::
-
- def get_template(self, step):
- return 'myapp/wizard_%s.html' % step
-
- If :meth:`~FormWizard.get_template` returns a list of strings, then the
- wizard will use the template system's
- :func:`~django.template.loader.select_template` function.
- This means the system will use the first template that exists on the
- filesystem. For example::
-
- def get_template(self, step):
- return ['myapp/wizard_%s.html' % step, 'myapp/wizard.html']
-
-.. method:: FormWizard.render_template
-
- Renders the template for the given step, returning an
- :class:`~django.http.HttpResponse` object.
-
- Override this method if you want to add a custom context, return a
- different MIME type, etc. If you only need to override the template name,
- use :meth:`~FormWizard.get_template` instead.
-
- The template will be rendered with the context documented in the
- "Creating templates for the forms" section above.
-
-.. method:: FormWizard.process_step
-
- Hook for modifying the wizard's internal state, given a fully validated
- :class:`~django.forms.Form` object. The Form is guaranteed to have clean,
- valid data.
-
- This method should *not* modify any of that data. Rather, it might want to
- set ``self.extra_context`` or dynamically alter ``self.form_list``, based
- on previously submitted forms.
-
- Note that this method is called every time a page is rendered for *all*
- submitted steps.
-
- The function signature::
-
- def process_step(self, request, form, step):
- # ...
diff --git a/parts/django/docs/ref/contrib/formtools/index.txt b/parts/django/docs/ref/contrib/formtools/index.txt
deleted file mode 100644
index f364706..0000000
--- a/parts/django/docs/ref/contrib/formtools/index.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-django.contrib.formtools
-========================
-
-A set of high-level abstractions for Django forms (:mod:`django.forms`).
-
-.. toctree::
- :maxdepth: 1
-
- form-preview
- form-wizard
diff --git a/parts/django/docs/ref/contrib/gis/admin.txt b/parts/django/docs/ref/contrib/gis/admin.txt
deleted file mode 100644
index 011bb6b..0000000
--- a/parts/django/docs/ref/contrib/gis/admin.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-.. _ref-gis-admin:
-
-======================
-GeoDjango's admin site
-======================
-
-.. module:: django.contrib.gis.admin
- :synopsis: GeoDjango's extensions to the admin site.
-
-
-``GeoModelAdmin``
-=================
-
-.. class:: GeoModelAdmin
-
- .. attribute:: default_lon
-
- The default center longitude.
-
- .. attribute:: default_lat
-
- The default center latitude.
-
- .. attribute:: default_zoom
-
- The default zoom level to use. Defaults to 18.
-
- .. attribute:: extra_js
-
- Sequence of URLs to any extra JavaScript to include.
-
- .. attribute:: map_template
-
- Override the template used to generate the JavaScript slippy map.
- Default is ``'gis/admin/openlayers.html'``.
-
- .. attribute:: map_width
-
- Width of the map, in pixels. Defaults to 600.
-
- .. attribute:: map_height
-
- Height of the map, in pixels. Defaults to 400.
-
- .. attribute:: openlayers_url
-
- Link to the URL of the OpenLayers JavaScript. Defaults to
- ``'http://openlayers.org/api/2.8/OpenLayers.js'``.
-
-
- .. attribute:: modifiable
-
- Defaults to ``False``. When set to to ``True``, disables editing of
- existing geometry fields in the admin.
-
- .. note::
-
- This is different from adding the geometry field to
- :attr:`~django.contrib.admin.ModelAdmin.readonly_fields`,
- which will only display the WKT of the geometry. Setting
- ``modifiable=False``, actually displays the geometry in a map,
- but disables the ability to edit its vertices.
-
-``OSMGeoAdmin``
-===============
-
-.. class:: OSMGeoAdmin
-
- A subclass of :class:`GeoModelAdmin` that uses a spherical mercator projection
- with `OpenStreetMap <http://openstreetmap.org/>`_ street data tiles.
- See the :ref:`OSMGeoAdmin introduction <osmgeoadmin-intro>`
- in the tutorial for a usage example.
diff --git a/parts/django/docs/ref/contrib/gis/commands.txt b/parts/django/docs/ref/contrib/gis/commands.txt
deleted file mode 100644
index 3dd161c..0000000
--- a/parts/django/docs/ref/contrib/gis/commands.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-.. ref-geodjango-admin:
-
-=============================
-GeoDjango Management Commands
-=============================
-
-inspectdb
-=========
-
-.. describe:: django-admin.py inspectdb
-
-When :mod:`django.contrib.gis` is in your :setting:`INSTALLED_APPS`, the
-:djadmin:`inspectdb` management command is overridden with one from GeoDjango.
-The overridden command is spatially-aware, and places geometry fields in the
-auto-generated model definition, where appropriate.
-
-ogrinspect <data_source> <model_name>
-=====================================
-
-.. django-admin:: ogrinspect
-
-The ``ogrinpsect`` management command will inspect the given OGR-compatible
-:class:`~django.contrib.gis.gdal.DataSource` (e.g., a shapefile) and will
-output a GeoDjango model with the given model name. There's a detailed example
-of using ``ogrinspect`` :ref:`in the tutorial <ogrinspect-intro>`.
-
-.. django-admin-option:: --blank <blank_field(s)>
-
- Use a comma separated list of OGR field names to add the ``blank=True``
- keyword option to the field definition. Set with ``true`` to apply
- to all applicable fields.
-
-.. django-admin-option:: --decimal <decimal_field(s)>
-
- Use a comma separated list of OGR float fields to generate
- :class:`~django.db.models.DecimalField` instead of the default
- :class:`~django.db.models.FloatField`. Set to ``true`` to apply to all
- OGR float fields.
-
-.. django-admin-option:: --geom-name <name>
-
- Specifies the model attribute name to use for the geometry field.
- Defaults to ``'geom'``.
-
-.. django-admin-option:: --layer <layer>
-
- The key for specifying which layer in the OGR
- :class:`~django.contrib.gis.gdal.DataSource` source to use.
- Defaults to 0 (the first layer). May be an integer or a string identifier
- for the :class:`~django.contrib.gis.gdal.Layer`.
-
-.. django-admin-option:: --mapping
-
- Automatically generate a mapping dictionary for use with
- :class:`~django.contrib.gis.utils.LayerMapping`.
-
-.. django-admin-option:: --multi-geom
-
- When generating the geometry field, treat it as a geometry collection.
- For example, if this setting is enabled then a
- :class:`~django.contrib.gis.db.models.MultiPolygonField` will be placed
- in the generated model rather than
- :class:`~django.contrib.gis.db.models.PolygonField`.
-
-.. django-admin-option:: --name-field <name_field>
-
- Generates a ``__unicode__`` routine on the model that will return the
- the given field name.
-
-.. django-admin-option:: --no-imports
-
- Suppresses the ``from django.contrib.gis.db import models`` import statement.
-
-.. django-admin-option:: --null <null_field(s)>
-
- Use a comma separated list of OGR field names to add the ``null=True``
- keyword option to the field definition. Set with ``true`` to apply to
- all applicable fields.
-
-.. django-admin-option:: --srid
-
- The SRID to use for the geometry field. If not set, ``ogrinspect`` attempts
- to automatically determine of the SRID of the data source.
diff --git a/parts/django/docs/ref/contrib/gis/create_template_postgis-1.3.sh b/parts/django/docs/ref/contrib/gis/create_template_postgis-1.3.sh
deleted file mode 100755
index c9ab4fc..0000000
--- a/parts/django/docs/ref/contrib/gis/create_template_postgis-1.3.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-POSTGIS_SQL_PATH=`pg_config --sharedir`
-createdb -E UTF8 template_postgis # Create the template spatial database.
-createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
-psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
-psql -d template_postgis -f $POSTGIS_SQL_PATH/lwpostgis.sql # Loading the PostGIS SQL routines
-psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
-psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;" # Enabling users to alter spatial tables.
-psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
diff --git a/parts/django/docs/ref/contrib/gis/create_template_postgis-1.4.sh b/parts/django/docs/ref/contrib/gis/create_template_postgis-1.4.sh
deleted file mode 100755
index 57a1373..0000000
--- a/parts/django/docs/ref/contrib/gis/create_template_postgis-1.4.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib
-createdb -E UTF8 template_postgis # Create the template spatial database.
-createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
-psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
-psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql # Loading the PostGIS SQL routines
-psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
-psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;" # Enabling users to alter spatial tables.
-psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
diff --git a/parts/django/docs/ref/contrib/gis/create_template_postgis-1.5.sh b/parts/django/docs/ref/contrib/gis/create_template_postgis-1.5.sh
deleted file mode 100755
index 081b5f2..0000000
--- a/parts/django/docs/ref/contrib/gis/create_template_postgis-1.5.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env bash
-POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-1.5
-createdb -E UTF8 template_postgis # Create the template spatial database.
-createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
-psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
-psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql # Loading the PostGIS SQL routines
-psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
-psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;" # Enabling users to alter spatial tables.
-psql -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
-psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
diff --git a/parts/django/docs/ref/contrib/gis/create_template_postgis-debian.sh b/parts/django/docs/ref/contrib/gis/create_template_postgis-debian.sh
deleted file mode 100755
index 46bd074..0000000
--- a/parts/django/docs/ref/contrib/gis/create_template_postgis-debian.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-POSTGIS_SQL_PATH=/usr/share/postgresql-8.3-postgis
-createdb -E UTF8 template_postgis # Create the template spatial database.
-createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
-psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
-psql -d template_postgis -f $POSTGIS_SQL_PATH/lwpostgis.sql # Loading the PostGIS SQL routines
-psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
-psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;" # Enabling users to alter spatial tables.
-psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
diff --git a/parts/django/docs/ref/contrib/gis/db-api.txt b/parts/django/docs/ref/contrib/gis/db-api.txt
deleted file mode 100644
index fbced8e..0000000
--- a/parts/django/docs/ref/contrib/gis/db-api.txt
+++ /dev/null
@@ -1,349 +0,0 @@
-.. _ref-gis-db-api:
-
-======================
-GeoDjango Database API
-======================
-
-.. module:: django.contrib.gis.db.models
- :synopsis: GeoDjango's database API.
-
-.. _spatial-backends:
-
-Spatial Backends
-================
-
-.. versionadded:: 1.2
-
-In Django 1.2, support for :doc:`multiple databases </topics/db/multi-db>` was
-introduced. In order to support multiple databases, GeoDjango has segregated
-its functionality into full-fledged spatial database backends:
-
-* :mod:`django.contrib.gis.db.backends.postgis`
-* :mod:`django.contrib.gis.db.backends.mysql`
-* :mod:`django.contrib.gis.db.backends.oracle`
-* :mod:`django.contrib.gis.db.backends.spatialite`
-
-Database Settings Backwards-Compatibility
------------------------------------------
-
-In :doc:`Django 1.2 </releases/1.2>`, the way
-to :ref:`specify databases <specifying-databases>` in your settings was changed.
-The old database settings format (e.g., the ``DATABASE_*`` settings)
-is backwards compatible with GeoDjango, and will automatically use the
-appropriate spatial backend as long as :mod:`django.contrib.gis` is in
-your :setting:`INSTALLED_APPS`. For example, if you have the following in
-your settings::
-
- DATABASE_ENGINE='postgresql_psycopg2'
-
- ...
-
- INSTALLED_APPS = (
- ...
- 'django.contrib.gis',
- ...
- )
-
-Then, :mod:`django.contrib.gis.db.backends.postgis` is automatically used as your
-spatial backend.
-
-.. _mysql-spatial-limitations:
-
-MySQL Spatial Limitations
--------------------------
-
-MySQL's spatial extensions only support bounding box operations
-(what MySQL calls minimum bounding rectangles, or MBR). Specifically,
-`MySQL does not conform to the OGC standard <http://dev.mysql.com/doc/refman/5.1/en/functions-that-test-spatial-relationships-between-geometries.html>`_:
-
- Currently, MySQL does not implement these functions
- [``Contains``, ``Crosses``, ``Disjoint``, ``Intersects``, ``Overlaps``,
- ``Touches``, ``Within``]
- according to the specification. Those that are implemented return
- the same result as the corresponding MBR-based functions.
-
-In other words, while spatial lookups such as :lookup:`contains <gis-contains>`
-are available in GeoDjango when using MySQL, the results returned are really
-equivalent to what would be returned when using :lookup:`bbcontains`
-on a different spatial backend.
-
-.. warning::
-
- True spatial indexes (R-trees) are only supported with
- MyISAM tables on MySQL. [#fnmysqlidx]_ In other words, when using
- MySQL spatial extensions you have to choose between fast spatial
- lookups and the integrity of your data -- MyISAM tables do
- not support transactions or foreign key constraints.
-
-Creating and Saving Geographic Models
-=====================================
-Here is an example of how to create a geometry object (assuming the ``Zipcode``
-model)::
-
- >>> from zipcode.models import Zipcode
- >>> z = Zipcode(code=77096, poly='POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))')
- >>> z.save()
-
-:class:`~django.contrib.gis.geos.GEOSGeometry` objects may also be used to save geometric models::
-
- >>> from django.contrib.gis.geos import GEOSGeometry
- >>> poly = GEOSGeometry('POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))')
- >>> z = Zipcode(code=77096, poly=poly)
- >>> z.save()
-
-Moreover, if the ``GEOSGeometry`` is in a different coordinate system (has a
-different SRID value) than that of the field, then it will be implicitly
-transformed into the SRID of the model's field, using the spatial database's
-transform procedure::
-
- >>> poly_3084 = GEOSGeometry('POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))', srid=3084) # SRID 3084 is 'NAD83(HARN) / Texas Centric Lambert Conformal'
- >>> z = Zipcode(code=78212, poly=poly_3084)
- >>> z.save()
- >>> from django.db import connection
- >>> print connection.queries[-1]['sql'] # printing the last SQL statement executed (requires DEBUG=True)
- INSERT INTO "geoapp_zipcode" ("code", "poly") VALUES (78212, ST_Transform(ST_GeomFromWKB('\\001 ... ', 3084), 4326))
-
-Thus, geometry parameters may be passed in using the ``GEOSGeometry`` object, WKT
-(Well Known Text [#fnwkt]_), HEXEWKB (PostGIS specific -- a WKB geometry in
-hexadecimal [#fnewkb]_), and GeoJSON [#fngeojson]_ (requires GDAL). Essentially,
-if the input is not a ``GEOSGeometry`` object, the geometry field will attempt to
-create a ``GEOSGeometry`` instance from the input.
-
-For more information creating :class:`~django.contrib.gis.geos.GEOSGeometry`
-objects, refer to the :ref:`GEOS tutorial <geos-tutorial>`.
-
-.. _spatial-lookups-intro:
-
-Spatial Lookups
-===============
-
-GeoDjango's lookup types may be used with any manager method like
-``filter()``, ``exclude()``, etc. However, the lookup types unique to
-GeoDjango are only available on geometry fields.
-Filters on 'normal' fields (e.g. :class:`~django.db.models.CharField`)
-may be chained with those on geographic fields. Thus, geographic queries
-take the following general form (assuming the ``Zipcode`` model used in the
-:ref:`ref-gis-model-api`)::
-
- >>> qs = Zipcode.objects.filter(<field>__<lookup_type>=<parameter>)
- >>> qs = Zipcode.objects.exclude(...)
-
-For example::
-
- >>> qs = Zipcode.objects.filter(poly__contains=pnt)
-
-In this case, ``poly`` is the geographic field, :lookup:`contains <gis-contains>`
-is the spatial lookup type, and ``pnt`` is the parameter (which may be a
-:class:`~django.contrib.gis.geos.GEOSGeometry` object or a string of
-GeoJSON , WKT, or HEXEWKB).
-
-A complete reference can be found in the :ref:`spatial lookup reference
-<spatial-lookups>`.
-
-.. note::
-
- GeoDjango constructs spatial SQL with the :class:`GeoQuerySet`, a
- subclass of :class:`~django.db.models.QuerySet`. The
- :class:`GeoManager` instance attached to your model is what
- enables use of :class:`GeoQuerySet`.
-
-.. _distance-queries:
-
-Distance Queries
-================
-
-Introduction
-------------
-Distance calculations with spatial data is tricky because, unfortunately,
-the Earth is not flat. Some distance queries with fields in a geographic
-coordinate system may have to be expressed differently because of
-limitations in PostGIS. Please see the :ref:`selecting-an-srid` section
-in the :ref:`ref-gis-model-api` documentation for more details.
-
-.. _distance-lookups-intro:
-
-Distance Lookups
-----------------
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-The following distance lookups are available:
-
-* :lookup:`distance_lt`
-* :lookup:`distance_lte`
-* :lookup:`distance_gt`
-* :lookup:`distance_gte`
-* :lookup:`dwithin`
-
-.. note::
-
- For *measuring*, rather than querying on distances, use the
- :meth:`GeoQuerySet.distance` method.
-
-Distance lookups take a tuple parameter comprising:
-
-#. A geometry to base calculations from; and
-#. A number or :class:`~django.contrib.gis.measure.Distance` object containing the distance.
-
-If a :class:`~django.contrib.gis.measure.Distance` object is used,
-it may be expressed in any units (the SQL generated will use units
-converted to those of the field); otherwise, numeric parameters are assumed
-to be in the units of the field.
-
-.. note::
-
- For users of PostGIS 1.4 and below, the routine ``ST_Distance_Sphere``
- is used by default for calculating distances on geographic coordinate systems
- (e.g., WGS84) -- which may only be called with point geometries [#fndistsphere14]_.
- Thus, geographic distance lookups on traditional PostGIS geometry columns are
- only allowed on :class:`PointField` model fields using a point for the
- geometry parameter.
-
-.. note::
-
- In PostGIS 1.5, ``ST_Distance_Sphere`` does *not* limit the geometry types
- geographic distance queries are performed with. [#fndistsphere15]_ However,
- these queries may take a long time, as great-circle distances must be
- calculated on the fly for *every* row in the query. This is because the
- spatial index on traditional geometry fields cannot be used.
-
- For much better performance on WGS84 distance queries, consider using
- :ref:`geography columns <geography-type>` in your database instead because
- they are able to use their spatial index in distance queries.
- You can tell GeoDjango to use a geography column by setting ``geography=True``
- in your field definition.
-
-For example, let's say we have a ``SouthTexasCity`` model (from the
-`GeoDjango distance tests`__ ) on a *projected* coordinate system valid for cities
-in southern Texas::
-
- from django.contrib.gis.db import models
-
- class SouthTexasCity(models.Model):
- name = models.CharField(max_length=30)
- # A projected coordinate system (only valid for South Texas!)
- # is used, units are in meters.
- point = models.PointField(srid=32140)
- objects = models.GeoManager()
-
-Then distance queries may be performed as follows::
-
- >>> from django.contrib.gis.geos import *
- >>> from django.contrib.gis.measure import D # ``D`` is a shortcut for ``Distance``
- >>> from geoapp import SouthTexasCity
- # Distances will be calculated from this point, which does not have to be projected.
- >>> pnt = fromstr('POINT(-96.876369 29.905320)', srid=4326)
- # If numeric parameter, units of field (meters in this case) are assumed.
- >>> qs = SouthTexasCity.objects.filter(point__distance_lte=(pnt, 7000))
- # Find all Cities within 7 km, > 20 miles away, and > 100 chains away (an obscure unit)
- >>> qs = SouthTexasCity.objects.filter(point__distance_lte=(pnt, D(km=7)))
- >>> qs = SouthTexasCity.objects.filter(point__distance_gte=(pnt, D(mi=20)))
- >>> qs = SouthTexasCity.objects.filter(point__distance_gte=(pnt, D(chain=100)))
-
-__ http://code.djangoproject.com/browser/django/trunk/django/contrib/gis/tests/distapp/models.py
-
-.. _compatibility-table:
-
-Compatibility Tables
-====================
-
-.. _spatial-lookup-compatibility:
-
-Spatial Lookups
----------------
-
-The following table provides a summary of what spatial lookups are available
-for each spatial database backend.
-
-================================= ========= ======== ============ ==========
-Lookup Type PostGIS Oracle MySQL [#]_ SpatiaLite
-================================= ========= ======== ============ ==========
-:lookup:`bbcontains` X X X
-:lookup:`bboverlaps` X X X
-:lookup:`contained` X X X
-:lookup:`contains <gis-contains>` X X X X
-:lookup:`contains_properly` X
-:lookup:`coveredby` X X
-:lookup:`covers` X X
-:lookup:`crosses` X X
-:lookup:`disjoint` X X X X
-:lookup:`distance_gt` X X X
-:lookup:`distance_gte` X X X
-:lookup:`distance_lt` X X X
-:lookup:`distance_lte` X X X
-:lookup:`dwithin` X X
-:lookup:`equals` X X X X
-:lookup:`exact` X X X X
-:lookup:`intersects` X X X X
-:lookup:`overlaps` X X X X
-:lookup:`relate` X X X
-:lookup:`same_as` X X X X
-:lookup:`touches` X X X X
-:lookup:`within` X X X X
-:lookup:`left` X
-:lookup:`right` X
-:lookup:`overlaps_left` X
-:lookup:`overlaps_right` X
-:lookup:`overlaps_above` X
-:lookup:`overlaps_below` X
-:lookup:`strictly_above` X
-:lookup:`strictly_below` X
-================================= ========= ======== ============ ==========
-
-.. _geoqueryset-method-compatibility:
-
-``GeoQuerySet`` Methods
------------------------
-The following table provides a summary of what :class:`GeoQuerySet` methods
-are available on each spatial backend. Please note that MySQL does not
-support any of these methods, and is thus excluded from the table.
-
-==================================== ======= ====== ==========
-Method PostGIS Oracle SpatiaLite
-==================================== ======= ====== ==========
-:meth:`GeoQuerySet.area` X X X
-:meth:`GeoQuerySet.centroid` X X X
-:meth:`GeoQuerySet.collect` X
-:meth:`GeoQuerySet.difference` X X X
-:meth:`GeoQuerySet.distance` X X X
-:meth:`GeoQuerySet.envelope` X X
-:meth:`GeoQuerySet.extent` X X
-:meth:`GeoQuerySet.extent3d` X
-:meth:`GeoQuerySet.force_rhr` X
-:meth:`GeoQuerySet.geohash` X
-:meth:`GeoQuerySet.geojson` X
-:meth:`GeoQuerySet.gml` X X
-:meth:`GeoQuerySet.intersection` X X X
-:meth:`GeoQuerySet.kml` X
-:meth:`GeoQuerySet.length` X X X
-:meth:`GeoQuerySet.make_line` X
-:meth:`GeoQuerySet.mem_size` X
-:meth:`GeoQuerySet.num_geom` X X X
-:meth:`GeoQuerySet.num_points` X X X
-:meth:`GeoQuerySet.perimeter` X X
-:meth:`GeoQuerySet.point_on_surface` X X X
-:meth:`GeoQuerySet.reverse_geom` X X
-:meth:`GeoQuerySet.scale` X X
-:meth:`GeoQuerySet.snap_to_grid` X
-:meth:`GeoQuerySet.svg` X X
-:meth:`GeoQuerySet.sym_difference` X X X
-:meth:`GeoQuerySet.transform` X X X
-:meth:`GeoQuerySet.translate` X X
-:meth:`GeoQuerySet.union` X X X
-:meth:`GeoQuerySet.unionagg` X X X
-==================================== ======= ====== ==========
-
-.. rubric:: Footnotes
-.. [#fnwkt] *See* Open Geospatial Consortium, Inc., `OpenGIS Simple Feature Specification For SQL <http://www.opengis.org/docs/99-049.pdf>`_, Document 99-049 (May 5, 1999), at Ch. 3.2.5, p. 3-11 (SQL Textual Representation of Geometry).
-.. [#fnewkb] *See* `PostGIS EWKB, EWKT and Canonical Forms <http://postgis.refractions.net/documentation/manual-1.5/ch04.html#EWKB_EWKT>`_, PostGIS documentation at Ch. 4.1.2.
-.. [#fngeojson] *See* Howard Butler, Martin Daly, Allan Doyle, Tim Schaub, & Christopher Schmidt, `The GeoJSON Format Specification <http://geojson.org/geojson-spec.html>`_, Revision 1.0 (June 16, 2008).
-.. [#fndistsphere14] *See* `PostGIS 1.4 documentation <http://postgis.refractions.net/documentation/manual-1.4/ST_Distance_Sphere.html>`_ on ``ST_distance_sphere``.
-.. [#fndistsphere15] *See* `PostGIS 1.5 documentation <http://postgis.refractions.net/documentation/manual-1.5/ST_Distance_Sphere.html>`_ on ``ST_distance_sphere``.
-.. [#fnmysqlidx] *See* `Creating Spatial Indexes <http://dev.mysql.com/doc/refman/5.1/en/creating-spatial-indexes.html>`_
- in the MySQL 5.1 Reference Manual:
-
- For MyISAM tables, ``SPATIAL INDEX`` creates an R-tree index. For storage
- engines that support nonspatial indexing of spatial columns, the engine
- creates a B-tree index. A B-tree index on spatial values will be useful
- for exact-value lookups, but not for range scans.
-
-.. [#] Refer :ref:`mysql-spatial-limitations` section for more details.
diff --git a/parts/django/docs/ref/contrib/gis/deployment.txt b/parts/django/docs/ref/contrib/gis/deployment.txt
deleted file mode 100644
index 035b23f..0000000
--- a/parts/django/docs/ref/contrib/gis/deployment.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-===================
-Deploying GeoDjango
-===================
-
-.. warning::
-
- GeoDjango uses the GDAL geospatial library which is
- not thread safe at this time. Thus, it is *highly* recommended
- to not use threading when deploying -- in other words, use a
- an appropriate configuration of Apache or the prefork method
- when using FastCGI through another Web server.
-
-Apache
-======
-In this section there are some example ``VirtualHost`` directives for
-when deploying using either ``mod_python`` or ``mod_wsgi``. At this
-time, we recommend ``mod_wsgi``, as it is now officially recommended
-way to deploy Django applications with Apache. Moreover, if
-``mod_python`` is used, then a prefork version of Apache must also be
-used. As long as ``mod_wsgi`` is configured correctly, it does not
-matter whether the version of Apache is prefork or worker.
-
-.. note::
-
- The ``Alias`` and ``Directory`` configurations in the the examples
- below use an example path to a system-wide installation folder of Django.
- Substitute in an appropriate location, if necessary, as it may be
- different than the path on your system.
-
-``mod_wsgi``
-------------
-
-Example::
-
- <VirtualHost *:80>
- WSGIDaemonProcess geodjango user=geo group=geo processes=5 threads=1
- WSGIProcessGroup geodjango
- WSGIScriptAlias / /home/geo/geodjango/world.wsgi
-
- Alias /media/ "/usr/lib/python2.5/site-packages/django/contrib/admin/media/"
- <Directory "/usr/lib/python2.5/site-packages/django/contrib/admin/media/">
- Order allow,deny
- Options Indexes
- Allow from all
- IndexOptions FancyIndexing
- </Directory>
-
- </VirtualHost>
-
-.. warning::
-
- If the ``WSGIDaemonProcess`` attribute ``threads`` is not set to ``1``, then
- Apache may crash when running your GeoDjango application. Increase the
- number of ``processes`` instead.
-
-For more information, please consult Django's
-:doc:`mod_wsgi documentation </howto/deployment/modwsgi>`.
-
-``mod_python``
---------------
-
-Example::
-
- <VirtualHost *:80>
-
- <Location "/">
- SetHandler mod_python
- PythonHandler django.core.handlers.modpython
- SetEnv DJANGO_SETTINGS_MODULE world.settings
- PythonDebug On
- PythonPath "['/var/www/apps'] + sys.path"
- </Location>
-
- Alias /media/ "/usr/lib/python2.5/site-packages/django/contrib/admin/media/"
- <Location "/media">
- SetHandler None
- </Location>
-
- </VirtualHost>
-
-.. warning::
-
- When using ``mod_python`` you *must* be using a prefork version of Apache, or
- else your GeoDjango application may crash Apache.
-
-For more information, please consult Django's
-:doc:`mod_python documentation </howto/deployment/modpython>`.
-
-Lighttpd
-========
-
-FastCGI
--------
-
-Nginx
-=====
-
-FastCGI
--------
diff --git a/parts/django/docs/ref/contrib/gis/feeds.txt b/parts/django/docs/ref/contrib/gis/feeds.txt
deleted file mode 100644
index 7c3a2d0..0000000
--- a/parts/django/docs/ref/contrib/gis/feeds.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-================
-Geographic Feeds
-================
-
-.. module:: django.contrib.gis.feeds
- :synopsis: GeoDjango's framework for generating spatial feeds.
-
-GeoDjango has its own :class:`Feed` subclass that may embed location information
-in RSS/Atom feeds formatted according to either the `Simple GeoRSS`__ or
-`W3C Geo`_ standards. Because GeoDjango's syndication API is a superset of
-Django's, please consult :doc:`Django's syndication documentation
-</ref/contrib/syndication>` for details on general usage.
-
-.. _W3C Geo: http://www.w3.org/2003/01/geo/
-
-__ http://georss.org/1.0#simple
-
-Example
-=======
-
-API Reference
-=============
-
-``Feed`` Subclass
------------------
-
-.. class:: Feed
-
- In addition to methods provided by
- the :class:`django.contrib.syndication.feeds.Feed`
- base class, GeoDjango's ``Feed`` class provides
- the following overrides. Note that these overrides may be done in multiple ways::
-
- from django.contrib.gis.feeds import Feed
-
- class MyFeed(Feed):
-
- # First, as a class attribute.
- geometry = ...
- item_geometry = ...
-
- # Also a function with no arguments
- def geometry(self):
- ...
-
- def item_geometry(self):
- ...
-
- # And as a function with a single argument
- def geometry(self, obj):
- ...
-
- def item_geometry(self, item):
- ...
-
- .. method:: geometry(obj)
-
- Takes the object returned by ``get_object()`` and returns the *feed's*
- geometry. Typically this is a ``GEOSGeometry`` instance, or can be a
- tuple to represent a point or a box. For example::
-
- class ZipcodeFeed(Feed):
-
- def geometry(self, obj):
- # Can also return: `obj.poly`, and `obj.poly.centroid`.
- return obj.poly.extent # tuple like: (X0, Y0, X1, Y1).
-
- .. method:: item_geometry(item)
-
- Set this to return the geometry for each *item* in the feed. This
- can be a ``GEOSGeometry`` instance, or a tuple that represents a
- point coordinate or bounding box. For example::
-
- class ZipcodeFeed(Feed):
-
- def item_geometry(self, obj):
- # Returns the polygon.
- return obj.poly
-
-``SyndicationFeed`` Subclasses
-------------------------------
-
-The following :class:`django.utils.feedgenerator.SyndicationFeed` subclasses
-are available:
-
-.. class:: GeoRSSFeed
-
-.. class:: GeoAtom1Feed
-
-.. class:: W3CGeoFeed
-
-.. note::
-
- `W3C Geo`_ formatted feeds only support
- :class:`~django.contrib.gis.db.models.PointField` geometries.
diff --git a/parts/django/docs/ref/contrib/gis/gdal.txt b/parts/django/docs/ref/contrib/gis/gdal.txt
deleted file mode 100644
index 1ce21d9..0000000
--- a/parts/django/docs/ref/contrib/gis/gdal.txt
+++ /dev/null
@@ -1,1114 +0,0 @@
-.. _ref-gdal:
-
-========
-GDAL API
-========
-
-.. module:: django.contrib.gis.gdal
- :synopsis: GeoDjango's high-level interface to the GDAL library.
-
-`GDAL`__ stands for **G**\ eospatial **D**\ ata **A**\ bstraction **L**\ ibrary,
-and is a veritable "swiss army knife" of GIS data functionality. A subset
-of GDAL is the `OGR`__ Simple Features Library, which specializes
-in reading and writing vector geographic data in a variety of standard
-formats.
-
-GeoDjango provides a high-level Python interface for some of the
-capabilities of OGR, including the reading and coordinate transformation
-of vector spatial data.
-
-.. note::
-
- Although the module is named ``gdal``, GeoDjango only supports
- some of the capabilities of OGR. Thus, none of GDAL's features
- with respect to raster (image) data are supported at this time.
-
-__ http://www.gdal.org/
-__ http://www.gdal.org/ogr/
-
-Overview
-========
-
-Sample Data
------------
-
-The GDAL/OGR tools described here are designed to help you read in
-your geospatial data, in order for most of them to be useful you have
-to have some data to work with. If you're starting out and don't yet
-have any data of your own to use, GeoDjango comes with a number of
-simple data sets that you can use for testing. This snippet will
-determine where these sample files are installed on your computer::
-
- >>> import os
- >>> import django.contrib.gis
- >>> GIS_PATH = os.path.dirname(django.contrib.gis.__file__)
- >>> CITIES_PATH = os.path.join(GIS_PATH, 'tests/data/cities/cities.shp')
-
-Vector Data Source Objects
-==========================
-
-``DataSource``
---------------
-
-:class:`DataSource` is a wrapper for the OGR data source object that
-supports reading data from a variety of OGR-supported geospatial file
-formats and data sources using a simple, consistent interface. Each
-data source is represented by a :class:`DataSource` object which contains
-one or more layers of data. Each layer, represented by a :class:`Layer`
-object, contains some number of geographic features (:class:`Feature`),
-information about the type of features contained in that layer (e.g.
-points, polygons, etc.), as well as the names and types of any
-additional fields (:class:`Field`) of data that may be associated with
-each feature in that layer.
-
-.. class:: DataSource(ds_input)
-
- The constructor for ``DataSource`` just a single parameter: the path of
- the file you want to read. However, OGR
- also supports a variety of more complex data sources, including
- databases, that may be accessed by passing a special name string instead
- of a path. For more information, see the `OGR Vector Formats`__
- documentation. The :attr:`name` property of a ``DataSource``
- instance gives the OGR name of the underlying data source that it is
- using.
-
- Once you've created your ``DataSource``, you can find out how many
- layers of data it contains by accessing the :attr:`layer_count` property,
- or (equivalently) by using the ``len()`` function. For information on
- accessing the layers of data themselves, see the next section::
-
- >>> from django.contrib.gis.gdal import DataSource
- >>> ds = DataSource(CITIES_PATH)
- >>> ds.name # The exact filename may be different on your computer
- '/usr/local/lib/python2.6/site-packages/django/contrib/gis/tests/data/cities/cities.shp'
- >>> ds.layer_count # This file only contains one layer
- 1
-
- .. attribute:: layer_count
-
- Returns the number of layers in the data source.
-
- .. attribute:: name
-
- Returns the name of the data source.
-
-__ http://www.gdal.org/ogr/ogr_formats.html
-
-``Layer``
----------
-
-.. class:: Layer
-
- ``Layer`` is a wrapper for a layer of data in a ``DataSource`` object.
- You never create a ``Layer`` object directly. Instead, you retrieve
- them from a :class:`DataSource` object, which is essentially a standard
- Python container of ``Layer`` objects. For example, you can access a
- specific layer by its index (e.g. ``ds[0]`` to access the first
- layer), or you can iterate over all the layers in the container in a
- ``for`` loop. The ``Layer`` itself acts as a container for geometric
- features.
-
- Typically, all the features in a given layer have the same geometry type.
- The :attr:`geom_type` property of a layer is an :class:`OGRGeomType`
- that identifies the feature type. We can use it to print out some basic
- information about each layer in a :class:`DataSource`::
-
- >>> for layer in ds:
- ... print 'Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name)
- ...
- Layer "cities": 3 Points
-
- The example output is from the cities data source, loaded above, which
- evidently contains one layer, called ``"cities"``, which contains three
- point features. For simplicity, the examples below assume that you've
- stored that layer in the variable ``layer``::
-
- >>> layer = ds[0]
-
- .. attribute:: name
-
- Returns the name of this layer in the data source.
-
- >>> layer.name
- 'cities'
-
- .. attribute:: num_feat
-
- Returns the number of features in the layer. Same as ``len(layer)``::
-
- >>> layer.num_feat
- 3
-
- .. attribute:: geom_type
-
- Returns the geometry type of the layer, as an :class:`OGRGeomType`
- object::
-
- >>> layer.geom_type.name
- 'Point'
-
- .. attribute:: num_fields
-
- Returns the number of fields in the layer, i.e the number of fields of
- data associated with each feature in the layer::
-
- >>> layer.num_fields
- 4
-
- .. attribute:: fields
-
- Returns a list of the names of each of the fields in this layer::
-
- >>> layer.fields
- ['Name', 'Population', 'Density', 'Created']
-
- .. attribute field_types
-
- Returns a list of the data types of each of the fields in this layer.
- These are subclasses of ``Field``, discussed below::
-
- >>> [ft.__name__ for ft in layer.field_types]
- ['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
-
- .. attribute:: field_widths
-
- Returns a list of the maximum field widths for each of the fields in
- this layer::
-
- >>> layer.field_widths
- [80, 11, 24, 10]
-
- .. attribute:: field_precisions
-
- Returns a list of the numeric precisions for each of the fields in
- this layer. This is meaningless (and set to zero) for non-numeric
- fields::
-
- >>> layer.field_precisions
- [0, 0, 15, 0]
-
- .. attribute:: extent
-
- Returns the spatial extent of this layer, as an :class:`Envelope`
- object::
-
- >>> layer.extent.tuple
- (-104.609252, 29.763374, -95.23506, 38.971823)
-
- .. attribute:: srs
-
- Property that returns the :class:`SpatialReference` associated
- with this layer::
-
- >>> print layer.srs
- GEOGCS["GCS_WGS_1984",
- DATUM["WGS_1984",
- SPHEROID["WGS_1984",6378137,298.257223563]],
- PRIMEM["Greenwich",0],
- UNIT["Degree",0.017453292519943295]]
-
- If the :class:`Layer` has no spatial reference information associated
- with it, ``None`` is returned.
-
- .. attribute:: spatial_filter
-
- .. versionadded:: 1.2
-
- Property that may be used to retrieve or set a spatial filter for this
- layer. A spatial filter can only be set with an :class:`OGRGeometry`
- instance, a 4-tuple extent, or ``None``. When set with something
- other than ``None``, only features that intersect the filter will be
- returned when iterating over the layer::
-
- >>> print layer.spatial_filter
- None
- >>> print len(layer)
- 3
- >>> [feat.get('Name') for feat in layer]
- ['Pueblo', 'Lawrence', 'Houston']
- >>> ks_extent = (-102.051, 36.99, -94.59, 40.00) # Extent for state of Kansas
- >>> layer.spatial_filter = ks_extent
- >>> len(layer)
- 1
- >>> [feat.get('Name') for feat in layer]
- ['Lawrence']
- >>> layer.spatial_filter = None
- >>> len(layer)
- 3
-
- .. method:: get_fields()
-
- A method that returns a list of the values of a given field for each
- feature in the layer::
-
- >>> layer.get_fields('Name')
- ['Pueblo', 'Lawrence', 'Houston']
-
- .. method:: get_geoms([geos=False])
-
- A method that returns a list containing the geometry of each feature
- in the layer. If the optional argument ``geos`` is set to ``True``
- then the geometries are converted to :class:`~django.contrib.gis.geos.GEOSGeometry`
- objects. Otherwise, they are returned as :class:`OGRGeometry` objects::
-
- >>> [pt.tuple for pt in layer.get_geoms()]
- [(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]
-
- .. method:: test_capability(capability)
-
- Returns a boolean indicating whether this layer supports the
- given capability (a string). Examples of valid capability strings
- include: ``'RandomRead'``, ``'SequentialWrite'``, ``'RandomWrite'``,
- ``'FastSpatialFilter'``, ``'FastFeatureCount'``, ``'FastGetExtent'``,
- ``'CreateField'``, ``'Transactions'``, ``'DeleteFeature'``, and
- ``'FastSetNextByIndex'``.
-
-``Feature``
------------
-
-.. class:: Feature
-
-
- ``Feature`` wraps an OGR feature. You never create a ``Feature``
- object directly. Instead, you retrieve them from a :class:`Layer` object.
- Each feature consists of a geometry and a set of fields containing
- additional properties. The geometry of a field is accessible via its
- ``geom`` property, which returns an :class:`OGRGeometry` object. A ``Feature``
- behaves like a standard Python container for its fields, which it returns as
- :class:`Field` objects: you can access a field directly by its index or name,
- or you can iterate over a feature's fields, e.g. in a ``for`` loop.
-
- .. attribute:: geom
-
- Returns the geometry for this feature, as an ``OGRGeometry`` object::
-
- >>> city.geom.tuple
- (-104.609252, 38.255001)
-
- .. attribute:: get
-
- A method that returns the value of the given field (specified by name)
- for this feature, **not** a ``Field`` wrapper object::
-
- >>> city.get('Population')
- 102121
-
- .. attribute:: geom_type
-
- Returns the type of geometry for this feature, as an :class:`OGRGeomType`
- object. This will be the same for all features in a given layer, and
- is equivalent to the :attr:`Layer.geom_type` property of the
- :class:`Layer`` object the feature came from.
-
- .. attribute:: num_fields
-
- Returns the number of fields of data associated with the feature.
- This will be the same for all features in a given layer, and is
- equivalent to the :attr:`Layer.num_fields` property of the
- :class:`Layer` object the feature came from.
-
- .. attribute:: fields
-
- Returns a list of the names of the fields of data associated with the
- feature. This will be the same for all features in a given layer, and
- is equivalent to the :attr:`Layer.fields` property of the :class:`Layer`
- object the feature came from.
-
- .. attribute:: fid
-
- Returns the feature identifier within the layer::
-
- >>> city.fid
- 0
-
- .. attribute:: layer_name
-
- Returns the name of the :class:`Layer` that the feature came from.
- This will be the same for all features in a given layer::
-
- >>> city.layer_name
- 'cities'
-
- .. attribute:: index
-
- A method that returns the index of the given field name. This will be
- the same for all features in a given layer::
-
- >>> city.index('Population')
- 1
-
-``Field``
----------
-
-.. class:: Field
-
- .. attribute:: name
-
- Returns the name of this field::
-
- >>> city['Name'].name
- 'Name'
-
- .. attribute:: type
-
- Returns the OGR type of this field, as an integer. The
- ``FIELD_CLASSES`` dictionary maps these values onto
- subclasses of ``Field``::
-
- >>> city['Density'].type
- 2
-
- .. attribute:: type_name
-
- Returns a string with the name of the data type of this field::
-
- >>> city['Name'].type_name
- 'String'
-
- .. attribute:: value
-
- Returns the value of this field. The ``Field`` class itself
- returns the value as a string, but each subclass returns the
- value in the most appropriate form::
-
- >>> city['Population'].value
- 102121
-
- .. attribute:: width
-
- Returns the width of this field::
-
- >>> city['Name'].width
- 80
-
- .. attribute:: precision
-
- Returns the numeric precision of this field. This is meaningless (and
- set to zero) for non-numeric fields::
-
- >>> city['Density'].precision
- 15
-
- .. method:: as_double()
-
- Returns the value of the field as a double (float)::
-
- >>> city['Density'].as_double()
- 874.7
-
- .. method:: as_int()
-
- Returns the value of the field as an integer::
-
- >>> city['Population'].as_int()
- 102121
-
- .. method:: as_string()
-
- Returns the value of the field as a string::
-
- >>> city['Name'].as_string()
- 'Pueblo'
-
- .. method:: as_datetime()
-
- Returns the value of the field as a tuple of date and time components::
-
- >>> city['Created'].as_datetime()
- (c_long(1999), c_long(5), c_long(23), c_long(0), c_long(0), c_long(0), c_long(0))
-
-``Driver``
-----------
-
-.. class:: Driver(dr_input)
-
- The ``Driver`` class is used internally to wrap an OGR :class:`DataSource` driver.
-
- .. attribute:: driver_count
-
- Returns the number of OGR vector drivers currently registered.
-
-
-OGR Geometries
-==============
-
-``OGRGeometry``
----------------
-
-:class:`OGRGeometry` objects share similar functionality with
-:class:`~django.contrib.gis.geos.GEOSGeometry` objects, and are thin
-wrappers around OGR's internal geometry representation. Thus,
-they allow for more efficient access to data when using :class:`DataSource`.
-Unlike its GEOS counterpart, :class:`OGRGeometry` supports spatial reference
-systems and coordinate transformation::
-
- >>> from django.contrib.gis.gdal import OGRGeometry
- >>> polygon = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5))')
-
-.. class:: OGRGeometry(geom_input[, srs=None])
-
- This object is a wrapper for the `OGR Geometry`__ class.
- These objects are instantiated directly from the given ``geom_input``
- parameter, which may be a string containing WKT or HEX, a ``buffer``
- containing WKB data, or an :class:`OGRGeomType` object. These objects
- are also returned from the :class:`Feature.geom` attribute, when
- reading vector data from :class:`Layer` (which is in turn a part of
- a :class:`DataSource`).
-
- __ http://www.gdal.org/ogr/classOGRGeometry.html
-
- .. classmethod:: from_bbox(bbox)
-
- .. versionadded:: 1.1
-
- Constructs a :class:`Polygon` from the given bounding-box (a 4-tuple).
-
- .. method:: __len__
-
- Returns the number of points in a :class:`LineString`, the
- number of rings in a :class:`Polygon`, or the number of geometries in a
- :class:`GeometryCollection`. Not applicable to other geometry types.
-
- .. method:: __iter__
-
- Iterates over the points in a :class:`LineString`, the rings in a
- :class:`Polygon`, or the geometries in a :class:`GeometryCollection`.
- Not applicable to other geometry types.
-
- .. method:: __getitem__
-
- Returns the point at the specified index for a :class:`LineString`, the
- interior ring at the specified index for a :class:`Polygon`, or the geometry
- at the specified index in a :class:`GeometryCollection`. Not applicable to
- other geometry types.
-
- .. attribute:: dimension
-
- Returns the number of coordinated dimensions of the geometry, i.e. 0
- for points, 1 for lines, and so forth::
-
- >> polygon.dimension
- 2
-
- .. attribute:: coord_dim
-
- .. versionchanged:: 1.2
-
- Returns or sets the coordinate dimension of this geometry. For
- example, the value would be 2 for two-dimensional geometries.
-
- .. note::
-
- Setting this property is only available in versions 1.2 and above.
-
- .. attribute:: geom_count
-
- Returns the number of elements in this geometry::
-
- >>> polygon.geom_count
- 1
-
- .. attribute:: point_count
-
- Returns the number of points used to describe this geometry::
-
- >>> polygon.point_count
- 4
-
- .. attribute:: num_points
-
- Alias for :attr:`point_count`.
-
- .. attribute:: num_coords
-
- Alias for :attr:`point_count`.
-
- .. attribute:: geom_type
-
- Returns the type of this geometry, as an :class:`OGRGeomType` object.
-
- .. attribute:: geom_name
-
- Returns the name of the type of this geometry::
-
- >>> polygon.geom_name
- 'POLYGON'
-
- .. attribute:: area
-
- Returns the area of this geometry, or 0 for geometries that do not
- contain an area::
-
- >>> polygon.area
- 25.0
-
- .. attribute:: envelope
-
- Returns the envelope of this geometry, as an :class:`Envelope` object.
-
- .. attribute:: extent
-
- Returns the envelope of this geometry as a 4-tuple, instead of as an
- :class:`Envelope` object::
-
- >>> point.extent
- (0.0, 0.0, 5.0, 5.0)
-
- .. attribute:: srs
-
- This property controls the spatial reference for this geometry, or
- ``None`` if no spatial reference system has been assigned to it.
- If assigned, accessing this property returns a :class:`SpatialReference`
- object. It may be set with another :class:`SpatialReference` object,
- or any input that :class:`SpatialReference` accepts. Example::
-
- >>> city.geom.srs.name
- 'GCS_WGS_1984'
-
- .. attribute:: srid
-
- Returns or sets the spatial reference identifier corresponding to
- :class:`SpatialReference` of this geometry. Returns ``None`` if
- there is no spatial reference information associated with this
- geometry, or if an SRID cannot be determined.
-
- .. attribute:: geos
-
- Returns a :class:`~django.contrib.gis.geos.GEOSGeometry` object
- corresponding to this geometry.
-
- .. attribute:: gml
-
- Returns a string representation of this geometry in GML format::
-
- >>> OGRGeometry('POINT(1 2)').gml
- '<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'
-
- .. attribute:: hex
-
- Returns a string representation of this geometry in HEX WKB format::
-
- >>> OGRGeometry('POINT(1 2)').hex
- '0101000000000000000000F03F0000000000000040'
-
- .. attribute:: json
-
- Returns a string representation of this geometry in JSON format::
-
- >>> OGRGeometry('POINT(1 2)').json
- '{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'
-
-
- .. attribute:: kml
-
- .. versionadded:: 1.1
-
- Returns a string representation of this geometry in KML format.
-
- .. attribute:: wkb_size
-
- Returns the size of the WKB buffer needed to hold a WKB representation
- of this geometry::
-
- >>> OGRGeometry('POINT(1 2)').wkb_size
- 21
-
- .. attribute:: wkb
-
- Returns a ``buffer`` containing a WKB representation of this geometry.
-
- .. attribute:: wkt
-
- Returns a string representation of this geometry in WKT format.
-
- .. attribute:: ewkt
-
- .. versionadded:: 1.2
-
- Returns the EWKT representation of this geometry.
-
- .. method:: clone()
-
- Returns a new :class:`OGRGeometry` clone of this geometry object.
-
- .. method:: close_rings()
-
- If there are any rings within this geometry that have not been closed,
- this routine will do so by adding the starting point to the end::
-
- >>> triangle = OGRGeometry('LINEARRING (0 0,0 1,1 0)')
- >>> triangle.close_rings()
- >>> triangle.wkt
- 'LINEARRING (0 0,0 1,1 0,0 0)'
-
- .. method:: transform(coord_trans, clone=False)
-
- Transforms this geometry to a different spatial reference system. May
- take a :class:`CoordTransform` object, a :class:`SpatialReference` object,
- or any other input accepted by :class:`SpatialReference` (including
- spatial reference WKT and PROJ.4 strings, or an integer SRID).
- By default nothing is returned and the geometry is transformed in-place.
- However, if the `clone` keyword is set to ``True`` then a transformed clone
- of this geometry is returned instead.
-
- .. method:: intersects(other)
-
- Returns ``True`` if this geometry intersects the other, otherwise returns
- ``False``.
-
- .. method:: equals(other)
-
- Returns ``True`` if this geometry is equivalent to the other, otherwise returns
- ``False``.
-
- .. method:: disjoint(other)
-
- Returns ``True`` if this geometry is spatially disjoint to (i.e. does
- not intersect) the other, otherwise returns ``False``.
-
- .. method:: touches(other)
-
- Returns ``True`` if this geometry touches the other, otherwise returns
- ``False``.
-
- .. method:: crosses(other)
-
- Returns ``True`` if this geometry crosses the other, otherwise returns
- ``False``.
-
- .. method:: within(other)
-
- Returns ``True`` if this geometry is contained within the other, otherwise returns
- ``False``.
-
- .. method:: contains(other)
-
- Returns ``True`` if this geometry contains the other, otherwise returns
- ``False``.
-
- .. method:: overlaps(other)
-
- Returns ``True`` if this geometry overlaps the other, otherwise returns
- ``False``.
-
- .. method:: boundary
-
- The boundary of this geometry, as a new :class:`OGRGeometry` object.
-
- .. attribute:: convex_hull
-
- The smallest convex polygon that contains this geometry, as a new
- :class:`OGRGeometry` object.
-
- .. method:: difference
-
- Returns the region consisting of the difference of this geometry and
- the other, as a new :class:`OGRGeometry` object.
-
- .. method:: intersection
-
- Returns the region consisting of the intersection of this geometry and
- the other, as a new :class:`OGRGeometry` object.
-
- .. method:: sym_difference
-
- Returns the region consisting of the symmetric difference of this
- geometry and the other, as a new :class:`OGRGeometry` object.
-
- .. method:: union
-
- Returns the region consisting of the union of this geometry and
- the other, as a new :class:`OGRGeometry` object.
-
- .. attribute:: tuple
-
- Returns the coordinates of a point geometry as a tuple, the
- coordinates of a line geometry as a tuple of tuples, and so forth::
-
- >>> OGRGeometry('POINT (1 2)').tuple
- (1.0, 2.0)
- >>> OGRGeometry('LINESTRING (1 2,3 4)').tuple
- ((1.0, 2.0), (3.0, 4.0))
-
- .. attribute:: coords
-
- An alias for :attr:`tuple`.
-
-.. class:: Point
-
- .. attribute:: x
-
- Returns the X coordinate of this point::
-
- >>> OGRGeometry('POINT (1 2)').x
- 1.0
-
- .. attribute:: y
-
- Returns the Y coordinate of this point::
-
- >>> OGRGeometry('POINT (1 2)').y
- 2.0
-
- .. attribute:: z
-
- Returns the Z coordinate of this point, or ``None`` if the
- the point does not have a Z coordinate::
-
- >>> OGRGeometry('POINT (1 2 3)').z
- 3.0
-
-.. class:: LineString
-
- .. attribute:: x
-
- Returns a list of X coordinates in this line::
-
- >>> OGRGeometry('LINESTRING (1 2,3 4)').x
- [1.0, 3.0]
-
- .. attribute:: y
-
- Returns a list of Y coordinates in this line::
-
- >>> OGRGeometry('LINESTRING (1 2,3 4)').y
- [2.0, 4.0]
-
- .. attribute:: z
-
- Returns a list of Z coordinates in this line, or ``None`` if the
- line does not have Z coordinates::
-
- >>> OGRGeometry('LINESTRING (1 2 3,4 5 6)').z
- [3.0, 6.0]
-
-
-.. class:: Polygon
-
- .. attribute:: shell
-
- Returns the shell or exterior ring of this polygon, as a ``LinearRing``
- geometry.
-
- .. attribute:: exterior_ring
-
- An alias for :attr:`shell`.
-
- .. attribute:: centroid
-
- Returns a :class:`Point` representing the centroid of this polygon.
-
-.. class:: GeometryCollection
-
- .. method:: add(geom)
-
- Adds a geometry to this geometry collection. Not applicable to other
- geometry types.
-
-
-``OGRGeomType``
----------------
-
-.. class:: OGRGeomType(type_input)
-
- This class allows for the representation of an OGR geometry type
- in any of several ways::
-
- >>> from django.contrib.gis.gdal import OGRGeomType
- >>> gt1 = OGRGeomType(3) # Using an integer for the type
- >>> gt2 = OGRGeomType('Polygon') # Using a string
- >>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive
- >>> print gt1 == 3, gt1 == 'Polygon' # Equivalence works w/non-OGRGeomType objects
- True True
-
- .. attribute:: name
-
- Returns a short-hand string form of the OGR Geometry type::
-
- >>> gt1.name
- 'Polygon'
-
- .. attribute:: num
-
- Returns the number corresponding to the OGR geometry type::
-
- >>> gt1.num
- 3
-
- .. attribute:: django
-
- Returns the Django field type (a subclass of GeometryField) to use for
- storing this OGR type, or ``None`` if there is no appropriate Django
- type::
-
- >>> gt1.django
- 'PolygonField'
-
-``Envelope``
-------------
-
-.. class:: Envelope(*args)
-
- Represents an OGR Envelope structure that contains the
- minimum and maximum X, Y coordinates for a rectangle bounding box.
- The naming of the variables is compatible with the OGR Envelope
- C structure.
-
- .. attribute:: min_x
-
- The value of the minimum X coordinate.
-
- .. attribute:: min_y
-
- The value of the maximum X coordinate.
-
- .. attribute:: max_x
-
- The value of the minimum Y coordinate.
-
- .. attribute:: max_y
-
- The value of the maximum Y coordinate.
-
- .. attribute:: ur
-
- The upper-right coordinate, as a tuple.
-
- .. attribute:: ll
-
- The lower-left coordinate, as a tuple.
-
- .. attribute:: tuple
-
- A tuple representing the envelope.
-
- .. attribute:: wkt
-
- A string representing this envelope as a polygon in WKT format.
-
-
- .. method:: expand_to_include(self, *args)
-
- .. versionadded:: 1.1
-
-Coordinate System Objects
-=========================
-
-``SpatialReference``
---------------------
-
-.. class:: SpatialReference(srs_input)
-
- Spatial reference objects are initialized on the given ``srs_input``,
- which may be one of the following:
-
- * OGC Well Known Text (WKT) (a string)
- * EPSG code (integer or string)
- * PROJ.4 string
- * A shorthand string for well-known standards (``'WGS84'``, ``'WGS72'``, ``'NAD27'``, ``'NAD83'``)
-
- Example::
-
- >>> wgs84 = SpatialReference('WGS84') # shorthand string
- >>> wgs84 = SpatialReference(4326) # EPSG code
- >>> wgs84 = SpatialReference('EPSG:4326') # EPSG string
- >>> proj4 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '
- >>> wgs84 = SpatialReference(proj4) # PROJ.4 string
- >>> wgs84 = SpatialReference("""GEOGCS["WGS 84",
- DATUM["WGS_1984",
- SPHEROID["WGS 84",6378137,298.257223563,
- AUTHORITY["EPSG","7030"]],
- AUTHORITY["EPSG","6326"]],
- PRIMEM["Greenwich",0,
- AUTHORITY["EPSG","8901"]],
- UNIT["degree",0.01745329251994328,
- AUTHORITY["EPSG","9122"]],
- AUTHORITY["EPSG","4326"]]""") # OGC WKT
-
- .. method:: __getitem__(target)
-
- Returns the value of the given string attribute node, ``None`` if the node
- doesn't exist. Can also take a tuple as a parameter, (target, child),
- where child is the index of the attribute in the WKT. For example::
-
- >>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]')
- >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326
- >>> print srs['GEOGCS']
- WGS 84
- >>> print srs['DATUM']
- WGS_1984
- >>> print srs['AUTHORITY']
- EPSG
- >>> print srs['AUTHORITY', 1] # The authority value
- 4326
- >>> print srs['TOWGS84', 4] # the fourth value in this wkt
- 0
- >>> print srs['UNIT|AUTHORITY'] # For the units authority, have to use the pipe symbole.
- EPSG
- >>> print srs['UNIT|AUTHORITY', 1] # The authority value for the untis
- 9122
-
- .. method:: attr_value(target, index=0)
-
- The attribute value for the given target node (e.g. ``'PROJCS'``).
- The index keyword specifies an index of the child node to return.
-
- .. method:: auth_name(target)
-
- Returns the authority name for the given string target node.
-
- .. method:: auth_code(target)
-
- Returns the authority code for the given string target node.
-
- .. method:: clone()
-
- Returns a clone of this spatial reference object.
-
- .. method:: identify_epsg()
-
- This method inspects the WKT of this SpatialReference, and will
- add EPSG authority nodes where an EPSG identifier is applicable.
-
- .. method:: from_esri()
-
- Morphs this SpatialReference from ESRI's format to EPSG
-
- .. method:: to_esri()
-
- Morphs this SpatialReference to ESRI's format.
-
- .. method:: validate()
-
- Checks to see if the given spatial reference is valid, if not
- an exception will be raised.
-
- .. method:: import_epsg(epsg)
-
- Import spatial reference from EPSG code.
-
- .. method:: import_proj(proj)
-
- Import spatial reference from PROJ.4 string.
-
- .. method:: import_user_input(user_input)
-
- .. versionadded:: 1.1
-
- .. method:: import_wkt(wkt)
-
- Import spatial reference from WKT.
-
- .. method:: import_xml(xml)
-
- Import spatial reference from XML.
-
- .. attribute:: name
-
- Returns the name of this Spatial Reference.
-
- .. attribute:: srid
-
- Returns the SRID of top-level authority, or ``None`` if undefined.
-
- .. attribute:: linear_name
-
- Returns the name of the linear units.
-
- .. attribute:: linear_units
-
- Returns the value of the linear units.
-
- .. attribute:: angular_name
-
- Returns the name of the angular units."
-
- .. attribute:: angular_units
-
- Returns the value of the angular units.
-
- .. attribute:: units
-
- Returns a 2-tuple of the units value and the units name,
- and will automatically determines whether to return the linear
- or angular units.
-
- .. attribute:: ellisoid
-
- Returns a tuple of the ellipsoid parameters for this spatial
- reference: (semimajor axis, semiminor axis, and inverse flattening)
-
- .. attribute:: semi_major
-
- Returns the semi major axis of the ellipsoid for this spatial reference.
-
- .. attribute:: semi_minor
-
- Returns the semi minor axis of the ellipsoid for this spatial reference.
-
- .. attribute:: inverse_flattening
-
- Returns the inverse flattening of the ellipsoid for this spatial reference.
-
- .. attribute:: geographic
-
- Returns ``True`` if this spatial reference is geographic
- (root node is ``GEOGCS``).
-
- .. attribute:: local
-
- Returns ``True`` if this spatial reference is local
- (root node is ``LOCAL_CS``).
-
- .. attribute:: projected
-
- Returns ``True`` if this spatial reference is a projected coordinate
- system (root node is ``PROJCS``).
-
- .. attribute:: wkt
-
- Returns the WKT representation of this spatial reference.
-
- .. attribute:: pretty_wkt
-
- Returns the 'pretty' representation of the WKT.
-
- .. attribute:: proj
-
- Returns the PROJ.4 representation for this spatial reference.
-
- .. attribute:: proj4
-
- Alias for :attr:`SpatialReference.proj`.
-
- .. attribute:: xml
-
- Returns the XML representation of this spatial reference.
-
-
-``CoordTransform``
-------------------
-
-.. class:: CoordTransform(source, target)
-
-Represents a coordinate system transform. It is initialized with two
-:class:`SpatialReference`, representing the source and target coordinate
-systems, respectively. These objects should be used when performing
-the same coordinate transformation repeatedly on different geometries::
-
- >>> ct = CoordTransform(SpatialReference('WGS84'), SpatialReference('NAD83'))
- >>> for feat in layer:
- ... geom = feat.geom # getting clone of feature geometry
- ... geom.transform(ct) # transforming
-
-Settings
-========
-
-.. setting:: GDAL_LIBRARY_PATH
-
-GDAL_LIBRARY_PATH
------------------
-
-A string specifying the location of the GDAL library. Typically,
-this setting is only used if the GDAL library is in a non-standard
-location (e.g., ``/home/john/lib/libgdal.so``).
diff --git a/parts/django/docs/ref/contrib/gis/geoip.txt b/parts/django/docs/ref/contrib/gis/geoip.txt
deleted file mode 100644
index 784d69e..0000000
--- a/parts/django/docs/ref/contrib/gis/geoip.txt
+++ /dev/null
@@ -1,223 +0,0 @@
-.. _ref-geoip:
-
-======================
-Geolocation with GeoIP
-======================
-
-.. module:: django.contrib.gis.utils.geoip
- :synopsis: High-level Python interface for MaxMind's GeoIP C library.
-
-.. currentmodule:: django.contrib.gis.utils
-
-The :class:`GeoIP` object is a ctypes wrapper for the
-`MaxMind GeoIP C API`__. [#]_ This interface is a BSD-licensed alternative
-to the GPL-licensed `Python GeoIP`__ interface provided by MaxMind.
-
-In order to perform IP-based geolocation, the :class:`GeoIP` object requires
-the GeoIP C libary and either the GeoIP `Country`__ or `City`__
-datasets in binary format (the CSV files will not work!). These datasets may be
-`downloaded from MaxMind`__. Grab the ``GeoIP.dat.gz`` and ``GeoLiteCity.dat.gz``
-and unzip them in a directory corresponding to what you set
-``GEOIP_PATH`` with in your settings. See the example and reference below
-for more details.
-
-__ http://www.maxmind.com/app/c
-__ http://www.maxmind.com/app/python
-__ http://www.maxmind.com/app/country
-__ http://www.maxmind.com/app/city
-__ http://www.maxmind.com/download/geoip/database/
-
-Example
-=======
-
-Assuming you have the GeoIP C library installed, here is an example of its
-usage::
-
- >>> from django.contrib.gis.utils import GeoIP
- >>> g = GeoIP()
- >>> g.country('google.com')
- {'country_code': 'US', 'country_name': 'United States'}
- >>> g.city('72.14.207.99')
- {'area_code': 650,
- 'city': 'Mountain View',
- 'country_code': 'US',
- 'country_code3': 'USA',
- 'country_name': 'United States',
- 'dma_code': 807,
- 'latitude': 37.419200897216797,
- 'longitude': -122.05740356445312,
- 'postal_code': '94043',
- 'region': 'CA'}
- >>> g.lat_lon('salon.com')
- (37.789798736572266, -122.39420318603516)
- >>> g.lon_lat('uh.edu')
- (-95.415199279785156, 29.77549934387207)
- >>> g.geos('24.124.1.80').wkt
- 'POINT (-95.2087020874023438 39.0392990112304688)'
-
-``GeoIP`` Settings
-==================
-
-.. setting:: GEOIP_PATH
-
-GEOIP_PATH
-----------
-
-A string specifying the directory where the GeoIP data files are
-located. This setting is *required* unless manually specified
-with ``path`` keyword when initializing the :class:`GeoIP` object.
-
-.. setting:: GEOIP_LIBRARY_PATH
-
-GEOIP_LIBRARY_PATH
-------------------
-
-A string specifying the location of the GeoIP C library. Typically,
-this setting is only used if the GeoIP C library is in a non-standard
-location (e.g., ``/home/sue/lib/libGeoIP.so``).
-
-.. setting:: GEOIP_COUNTRY
-
-GEOIP_COUNTRY
--------------
-
-The basename to use for the GeoIP country data file.
-Defaults to ``'GeoIP.dat'``.
-
-.. setting:: GEOIP_CITY
-
-GEOIP_CITY
-----------
-
-The basename to use for the GeoIP city data file.
-Defaults to ``'GeoLiteCity.dat'``.
-
-``GeoIP`` API
-=============
-
-.. class:: GeoIP([path=None, cache=0, country=None, city=None])
-
-The ``GeoIP`` object does not require any parameters to use the default
-settings. However, at the very least the :setting:`GEOIP_PATH` setting
-should be set with the path of the location of your GeoIP data sets. The
-following intialization keywords may be used to customize any of the
-defaults.
-
-=================== =======================================================
-Keyword Arguments Description
-=================== =======================================================
-``path`` Base directory to where GeoIP data is located or the
- full path to where the city or country data files
- (.dat) are located. Assumes that both the city and
- country data sets are located in this directory;
- overrides the :setting:`GEOIP_PATH` settings attribute.
-
-``cache`` The cache settings when opening up the GeoIP datasets,
- and may be an integer in (0, 1, 2, 4) corresponding to
- the ``GEOIP_STANDARD``, ``GEOIP_MEMORY_CACHE``,
- ``GEOIP_CHECK_CACHE``, and ``GEOIP_INDEX_CACHE``
- ``GeoIPOptions`` C API settings, respectively.
- Defaults to 0 (``GEOIP_STANDARD``).
-
-``country`` The name of the GeoIP country data file. Defaults
- to ``GeoIP.dat``. Setting this keyword overrides the
- :setting:`GEOIP_COUNTRY` settings attribute.
-
-``city`` The name of the GeoIP city data file. Defaults to
- ``GeoLiteCity.dat``. Setting this keyword overrides
- the :setting:`GEOIP_CITY` settings attribute.
-=================== =======================================================
-
-``GeoIP`` Methods
-=================
-
-Querying
---------
-
-All the following querying routines may take either a string IP address
-or a fully qualified domain name (FQDN). For example, both
-``'24.124.1.80'`` and ``'djangoproject.com'`` would be valid query
-parameters.
-
-.. method:: GeoIP.city(query)
-
-Returns a dictionary of city information for the given query. Some
-of the values in the dictionary may be undefined (``None``).
-
-.. method:: GeoIPcountry(query)
-
-Returns a dictionary with the country code and country for the given
-query.
-
-.. method:: GeoIP.country_code(query)
-
-Returns only the country code corresponding to the query.
-
-.. method:: GeoIP.country_name(query)
-
-Returns only the country name corresponding to the query.
-
-Coordinate Retrieval
---------------------
-
-.. method:: GeoIP.coords(query)
-
-Returns a coordinate tuple of (longitude, latitude).
-
-.. method:: GeoIP.lon_lat(query)
-
-Returns a coordinate tuple of (longitude, latitude).
-
-.. method:: GeoIP.lat_lon(query)
-
-Returns a coordinate tuple of (latitude, longitude),
-
-.. method:: GeoIP.geos(query)
-
-Returns a :class:`django.contrib.gis.geos.Point` object corresponding to the query.
-
-Database Information
---------------------
-
-.. attribute:: GeoIP.country_info
-
-This property returns information about the GeoIP country database.
-
-.. attribute:: GeoIP.city_info
-
-This property returns information about the GeoIP city database.
-
-.. attribute:: GeoIP.info
-
-This property returns information about all GeoIP databases (both city
-and country).
-
-GeoIP-Python API compatibility methods
-----------------------------------------
-
-These methods exist to ease compatibility with any code using MaxMind's
-existing Python API.
-
-.. classmethod:: GeoIP.open(path, cache)
-
-This classmethod instantiates the GeoIP object from the given database path
-and given cache setting.
-
-.. method:: GeoIP.region_by_addr(query)
-
-.. method:: GeoIP.region_by_name(query)
-
-.. method:: GeoIP.record_by_addr(query)
-
-.. method:: GeoIP.record_by_name(query)
-
-.. method:: GeoIP.country_code_by_addr(query)
-
-.. method:: GeoIP.country_code_by_name(query)
-
-.. method:: GeoIP.country_name_by_addr(query)
-
-.. method:: GeoIP.country_name_by_name(query)
-
-.. rubric:: Footnotes
-.. [#] GeoIP(R) is a registered trademark of MaxMind, LLC of Boston, Massachusetts.
diff --git a/parts/django/docs/ref/contrib/gis/geoquerysets.txt b/parts/django/docs/ref/contrib/gis/geoquerysets.txt
deleted file mode 100644
index 69f0c02..0000000
--- a/parts/django/docs/ref/contrib/gis/geoquerysets.txt
+++ /dev/null
@@ -1,1256 +0,0 @@
-.. _ref-geoquerysets:
-
-=========================
-GeoQuerySet API Reference
-=========================
-
-.. currentmodule:: django.contrib.gis.db.models
-
-.. class:: GeoQuerySet([model=None])
-
-
-.. _spatial-lookups:
-
-Spatial Lookups
-===============
-
-Just like when using the the :ref:`queryset-api`, interaction
-with ``GeoQuerySet`` by :ref:`chaining filters <chaining-filters>`.
-Instead of the regular Django :ref:`field-lookups`, the
-spatial lookups in this section are available for :class:`GeometryField`.
-
-For an introduction, see the :ref:`spatial lookups introduction
-<spatial-lookups-intro>`. For an overview of what lookups are
-compatible with a particular spatial backend, refer to the
-:ref:`spatial lookup compatibility table <spatial-lookup-compatibility>`.
-
-.. fieldlookup:: bbcontains
-
-bbcontains
-----------
-
-*Availability*: PostGIS, MySQL, SpatiaLite
-
-Tests if the geometry field's bounding box completely contains the lookup
-geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__bbcontains=geom)
-
-========== ==========================
-Backend SQL Equivalent
-========== ==========================
-PostGIS ``poly ~ geom``
-MySQL ``MBRContains(poly, geom)``
-SpatiaLite ``MbrContains(poly, geom)``
-========== ==========================
-
-.. fieldlookup:: bboverlaps
-
-bboverlaps
-----------
-
-*Availability*: PostGIS, MySQL, SpatiaLite
-
-Tests if the geometry field's bounding box overlaps the lookup geometry's
-bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__bboverlaps=geom)
-
-========== ==========================
-Backend SQL Equivalent
-========== ==========================
-PostGIS ``poly && geom``
-MySQL ``MBROverlaps(poly, geom)``
-SpatiaLite ``MbrOverlaps(poly, geom)``
-========== ==========================
-
-.. fieldlookup:: contained
-
-contained
----------
-
-*Availability*: PostGIS, MySQL, SpatiaLite
-
-Tests if the geometry field's bounding box is completely contained by the
-lookup geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__contained=geom)
-
-========== ==========================
-Backend SQL Equivalent
-========== ==========================
-PostGIS ``poly @ geom``
-MySQL ``MBRWithin(poly, geom)``
-SpatiaLite ``MbrWithin(poly, geom)``
-========== ==========================
-
-.. fieldlookup:: gis-contains
-
-contains
---------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-Tests if the geometry field spatially contains the lookup geometry.
-
-Example::
-
- Zipcode.objects.filter(poly__contains=geom)
-
-========== ============================
-Backend SQL Equivalent
-========== ============================
-PostGIS ``ST_Contains(poly, geom)``
-Oracle ``SDO_CONTAINS(poly, geom)``
-MySQL ``MBRContains(poly, geom)``
-SpatiaLite ``Contains(poly, geom)``
-========== ============================
-
-.. fieldlookup:: contains_properly
-
-contains_properly
------------------
-
-.. versionadded:: 1.2
-
-*Availability*: PostGIS
-
-Returns true if the lookup geometry intersects the interior of the
-geometry field, but not the boundary (or exterior). [#fncontainsproperly]_
-
-.. note::
-
- Requires PostGIS 1.4 and above.
-
-Example::
-
- Zipcode.objects.filter(poly__contains_properly=geom)
-
-========== ===================================
-Backend SQL Equivalent
-========== ===================================
-PostGIS ``ST_ContainsProperly(poly, geom)``
-========== ===================================
-
-.. fieldlookup:: coveredby
-
-coveredby
----------
-
-*Availability*: PostGIS, Oracle
-
-Tests if no point in the geometry field is outside the lookup geometry.
-[#fncovers]_
-
-Example::
-
- Zipcode.objects.filter(poly__coveredby=geom)
-
-========== =============================
-Backend SQL Equivalent
-========== =============================
-PostGIS ``ST_CoveredBy(poly, geom)``
-Oracle ``SDO_COVEREDBY(poly, geom)``
-========== =============================
-
-.. fieldlookup:: covers
-
-covers
-------
-
-*Availability*: PostGIS, Oracle
-
-Tests if no point in the lookup geometry is outside the geometry field.
-[#fncovers]_
-
-Example::
-
- Zipcode.objects.filter(poly__covers=geom)
-
-========== ==========================
-Backend SQL Equivalent
-========== ==========================
-PostGIS ``ST_Covers(poly, geom)``
-Oracle ``SDO_COVERS(poly, geom)``
-========== ==========================
-
-.. fieldlookup:: crosses
-
-crosses
--------
-
-*Availability*: PostGIS, SpatiaLite
-
-Tests if the geometry field spatially crosses the lookup geometry.
-
-Example::
-
- Zipcode.objects.filter(poly__crosses=geom)
-
-========== ==========================
-Backend SQL Equivalent
-========== ==========================
-PostGIS ``ST_Crosses(poly, geom)``
-SpatiaLite ``Crosses(poly, geom)``
-========== ==========================
-
-.. fieldlookup:: disjoint
-
-disjoint
---------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-Tests if the geometry field is spatially disjoint from the lookup geometry.
-
-Example::
-
- Zipcode.objects.filter(poly__disjoint=geom)
-
-========== =================================================
-Backend SQL Equivalent
-========== =================================================
-PostGIS ``ST_Disjoint(poly, geom)``
-Oracle ``SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)``
-MySQL ``MBRDisjoint(poly, geom)``
-SpatiaLite ``Disjoint(poly, geom)``
-========== =================================================
-
-equals
-------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-.. fieldlookup:: exact
-.. fieldlookup:: same_as
-
-exact, same_as
---------------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-.. fieldlookup:: intersects
-
-intersects
-----------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-Tests if the geometry field spatially intersects the lookup geometry.
-
-Example::
-
- Zipcode.objects.filter(poly__intersects=geom)
-
-========== =================================================
-Backend SQL Equivalent
-========== =================================================
-PostGIS ``ST_Intersects(poly, geom)``
-Oracle ``SDO_OVERLAPBDYINTERSECT(poly, geom)``
-MySQL ``MBRIntersects(poly, geom)``
-SpatiaLite ``Intersects(poly, geom)``
-========== =================================================
-
-.. fieldlookup:: overlaps
-
-overlaps
---------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-.. fieldlookup:: relate
-
-relate
-------
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-Tests if the geometry field is spatially related to the the lookup geometry by
-the values given in the given pattern. This lookup requires a tuple parameter,
-``(geom, pattern)``; the form of ``pattern`` will depend on the spatial backend:
-
-PostGIS & SpatiaLite
-~~~~~~~~~~~~~~~~~~~~
-On these spatial backends the intersection pattern is a string comprising
-nine characters, which define intersections between the interior, boundary,
-and exterior of the geometry field and the lookup geometry.
-The intersection pattern matrix may only use the following characters:
-``1``, ``2``, ``T``, ``F``, or ``*``. This lookup type allows users to "fine tune"
-a specific geometric relationship consistent with the DE-9IM model. [#fnde9im]_
-
-Example::
-
- # A tuple lookup parameter is used to specify the geometry and
- # the intersection pattern (the pattern here is for 'contains').
- Zipcode.objects.filter(poly__relate(geom, 'T*T***FF*'))
-
-PostGIS SQL equivalent::
-
- SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')
-
-SpatiaLite SQL equivalent::
-
- SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')
-
-Oracle
-~~~~~~
-
-Here the relation pattern is compreised at least one of the nine relation
-strings: ``TOUCH``, ``OVERLAPBDYDISJOINT``, ``OVERLAPBDYINTERSECT``,
-``EQUAL``, ``INSIDE``, ``COVEREDBY``, ``CONTAINS``, ``COVERS``, ``ON``, and
-``ANYINTERACT``. Multiple strings may be combined with the logical Boolean
-operator OR, for example, ``'inside+touch'``. [#fnsdorelate]_ The relation
-strings are case-insensitive.
-
-Example::
-
- Zipcode.objects.filter(poly__relate(geom, 'anyinteract'))
-
-Oracle SQL equivalent::
-
- SELECT ... WHERE SDO_RELATE(poly, geom, 'anyinteract')
-
-.. fieldlookup:: touches
-
-touches
--------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-Tests if the geometry field spatially touches the lookup geometry.
-
-Example::
-
- Zipcode.objects.filter(poly__touches=geom)
-
-========== ==========================
-Backend SQL Equivalent
-========== ==========================
-PostGIS ``ST_Touches(poly, geom)``
-MySQL ``MBRTouches(poly, geom)``
-Oracle ``SDO_TOUCH(poly, geom)``
-SpatiaLite ``Touches(poly, geom)``
-========== ==========================
-
-.. fieldlookup:: within
-
-within
-------
-
-*Availability*: PostGIS, Oracle, MySQL, SpatiaLite
-
-Tests if the geometry field is spatially within the lookup geometry.
-
-Example::
-
- Zipcode.objects.filter(poly__within=geom)
-
-========== ==========================
-Backend SQL Equivalent
-========== ==========================
-PostGIS ``ST_Within(poly, geom)``
-MySQL ``MBRWithin(poly, geom)``
-Oracle ``SDO_INSIDE(poly, geom)``
-SpatiaLite ``Within(poly, geom)``
-========== ==========================
-
-.. fieldlookup:: left
-
-left
-----
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box is strictly to the left of the
-lookup geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__left=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly << geom
-
-.. fieldlookup:: right
-
-right
------
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box is strictly to the right of the
-lookup geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__right=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly >> geom
-
-.. fieldlookup:: overlaps_left
-
-overlaps_left
--------------
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box overlaps or is to the left of the lookup
-geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__overlaps_left=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly &< geom
-
-
-.. fieldlookup:: overlaps_right
-
-overlaps_right
---------------
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box overlaps or is to the right of the lookup
-geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__overlaps_right=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly &> geom
-
-.. fieldlookup:: overlaps_above
-
-overlaps_above
---------------
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box overlaps or is above the lookup
-geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__overlaps_above=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly |&> geom
-
-.. fieldlookup:: overlaps_below
-
-overlaps_below
---------------
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box overlaps or is below the lookup
-geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__overlaps_below=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly &<| geom
-
-.. fieldlookup:: strictly_above
-
-strictly_above
---------------
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box is strictly above the lookup
-geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__strictly_above=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly |>> geom
-
-.. fieldlookup:: strictly_below
-
-strictly_below
---------------
-
-*Availability*: PostGIS
-
-Tests if the geometry field's bounding box is strictly above the lookup
-geometry's bounding box.
-
-Example::
-
- Zipcode.objects.filter(poly__strictly_above=geom)
-
-PostGIS equivalent::
-
- SELECT ... WHERE poly |>> geom
-
-
-.. _distance-lookups:
-
-Distance Lookups
-================
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-For an overview on performing distance queries, please refer to
-the :ref:`distance queries introduction <distance-queries>`.
-
-Distance lookups take the following form::
-
- <field>__<distance lookup>=(<geometry>, <distance value>[, 'spheroid'])
-
-The value passed into a distance lookup is a tuple; the first two
-values are mandatory, and are the geometry to calculate distances to,
-and a distance value (either a number in units of the field or a
-:class:`~django.contrib.gis.measure.Distance` object). On every
-distance lookup but :lookup:`dwithin`, an optional
-third element, ``'spheroid'``, may be included to tell GeoDjango
-to use the more accurate spheroid distance calculation functions on
-fields with a geodetic coordinate system (e.g., ``ST_Distance_Spheroid``
-would be used instead of ``ST_Distance_Sphere``).
-
-.. fieldlookup:: distance_gt
-
-distance_gt
------------
-
-Returns models where the distance to the geometry field from the lookup
-geometry is greater than the given distance value.
-
-Example::
-
- Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))
-
-========== ===============================================
-Backend SQL Equivalent
-========== ===============================================
-PostGIS ``ST_Distance(poly, geom) > 5``
-Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5``
-SpatiaLite ``Distance(poly, geom) > 5``
-========== ===============================================
-
-.. fieldlookup:: distance_gte
-
-distance_gte
-------------
-
-Returns models where the distance to the geometry field from the lookup
-geometry is greater than or equal to the given distance value.
-
-Example::
-
- Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))
-
-========== ================================================
-Backend SQL Equivalent
-========== ================================================
-PostGIS ``ST_Distance(poly, geom) >= 5``
-Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5``
-SpatiaLite ``Distance(poly, geom) >= 5``
-========== ================================================
-
-.. fieldlookup:: distance_lt
-
-distance_lt
------------
-
-Returns models where the distance to the geometry field from the lookup
-geometry is less than the given distance value.
-
-Example::
-
- Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))
-
-========== ===============================================
-Backend SQL Equivalent
-========== ===============================================
-PostGIS ``ST_Distance(poly, geom) < 5``
-Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5``
-SpatiaLite ``Distance(poly, geom) < 5``
-========== ===============================================
-
-.. fieldlookup:: distance_lte
-
-distance_lte
-------------
-
-Returns models where the distance to the geometry field from the lookup
-geometry is less than or equal to the given distance value.
-
-Example::
-
- Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))
-
-========== ================================================
-Backend SQL Equivalent
-========== ================================================
-PostGIS ``ST_Distance(poly, geom) <= 5``
-Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5``
-SpatiaLite ``Distance(poly, geom) <= 5``
-========== ================================================
-
-.. fieldlookup:: dwithin
-
-dwithin
--------
-
-Returns models where the distance to the geometry field from the
-lookup geometry are within the given distance from one another.
-
-Example::
-
- Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
-
-========== ======================================
-Backend SQL Equivalent
-========== ======================================
-PostGIS ``ST_DWithin(poly, geom, 5)``
-Oracle ``SDO_WITHIN_DISTANCE(poly, geom, 5)``
-========== ======================================
-
-.. note::
-
- This lookup is not available on SpatiaLite.
-
-.. fieldlookup:: equals
-
-
-``GeoQuerySet`` Methods
-=======================
-
-``GeoQuerySet`` methods specify that a spatial operation be performed
-on each patial operation on each geographic
-field in the queryset and store its output in a new attribute on the model
-(which is generally the name of the ``GeoQuerySet`` method).
-
-There are also aggregate ``GeoQuerySet`` methods which return a single value
-instead of a queryset. This section will describe the API and availability
-of every ``GeoQuerySet`` method available in GeoDjango.
-
-.. note::
-
- What methods are available depend on your spatial backend. See
- the :ref:`compatibility table <geoqueryset-method-compatibility>`
- for more details.
-
-With a few exceptions, the following keyword arguments may be used with all
-``GeoQuerySet`` methods:
-
-===================== =====================================================
-Keyword Argument Description
-===================== =====================================================
-``field_name`` By default, ``GeoQuerySet`` methods use the first
- geographic field encountered in the model. This
- keyword should be used to specify another
- geographic field (e.g., ``field_name='point2'``)
- when there are multiple geographic fields in a model.
-
- On PostGIS, the ``field_name`` keyword may also be
- used on geometry fields in models that are related
- via a ``ForeignKey`` relation (e.g.,
- ``field_name='related__point'``).
-
-``model_att`` By default, ``GeoQuerySet`` methods typically attach
- their output in an attribute with the same name as
- the ``GeoQuerySet`` method. Setting this keyword
- with the desired attribute name will override this
- default behavior. For example,
- ``qs = Zipcode.objects.centroid(model_att='c')`` will
- attach the centroid of the ``Zipcode`` geometry field
- in a ``c`` attribute on every model rather than in a
- ``centroid`` attribute.
-
- This keyword is required if
- a method name clashes with an existing
- ``GeoQuerySet`` method -- if you wanted to use the
- ``area()`` method on model with a ``PolygonField``
- named ``area``, for example.
-===================== =====================================================
-
-Measurement
------------
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-``area``
-~~~~~~~~
-
-.. method:: GeoQuerySet.area(**kwargs)
-
-Returns the area of the geographic field in an ``area`` attribute on
-each element of this GeoQuerySet.
-
-``distance``
-~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.distance(geom, **kwargs)
-
-This method takes a geometry as a parameter, and attaches a ``distance``
-attribute to every model in the returned queryset that contains the
-distance (as a :class:`~django.contrib.gis.measure.Distance` object) to the given geometry.
-
-In the following example (taken from the `GeoDjango distance tests`__),
-the distance from the `Tasmanian`__ city of Hobart to every other
-:class:`PointField` in the ``AustraliaCity`` queryset is calculated::
-
- >>> pnt = AustraliaCity.objects.get(name='Hobart').point
- >>> for city in AustraliaCity.objects.distance(pnt): print city.name, city.distance
- Wollongong 990071.220408 m
- Shellharbour 972804.613941 m
- Thirroul 1002334.36351 m
- Mittagong 975691.632637 m
- Batemans Bay 834342.185561 m
- Canberra 598140.268959 m
- Melbourne 575337.765042 m
- Sydney 1056978.87363 m
- Hobart 0.0 m
- Adelaide 1162031.83522 m
- Hillsdale 1049200.46122 m
-
-.. note::
-
- Because the ``distance`` attribute is a
- :class:`~django.contrib.gis.measure.Distance` object, you can easily express
- the value in the units of your choice. For example, ``city.distance.mi`` is
- the distance value in miles and ``city.distance.km`` is the distance value
- in kilometers. See the :ref:`ref-measure` for usage details and the list of
- :ref:`supported_units`.
-
-__ http://code.djangoproject.com/browser/django/trunk/django/contrib/gis/tests/distapp/models.py
-__ http://en.wikipedia.org/wiki/Tasmania
-
-``length``
-~~~~~~~~~~
-
-.. method:: GeoQuerySet.length(**kwargs)
-
-Returns the length of the geometry field in a ``length`` attribute
-(a :class:`~django.contrib.gis.measure.Distance` object) on each model in
-the queryset.
-
-``perimeter``
-~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.perimeter(**kwargs)
-
-Returns the perimeter of the geometry field in a ``perimeter`` attribute
-(a :class:`~django.contrib.gis.measure.Distance` object) on each model in
-the queryset.
-
-Geometry Relationships
-----------------------
-
-The following methods take no arguments, and attach geometry objects
-each element of the :class:`GeoQuerySet` that is the result of relationship
-function evaluated on the the geometry field.
-
-``centroid``
-~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.centroid(**kwargs)
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-Returns the ``centroid`` value for the geographic field in a ``centroid``
-attribute on each element of the ``GeoQuerySet``.
-
-``envelope``
-~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.envelope(**kwargs)
-
-*Availability*: PostGIS, SpatiaLite
-
-Returns a geometry representing the bounding box of the geometry field in
-an ``envelope`` attribute on each element of the ``GeoQuerySet``.
-
-``point_on_surface``
-~~~~~~~~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.point_on_surface(**kwargs)
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-Returns a Point geometry guaranteed to lie on the surface of the
-geometry field in a ``point_on_surface`` attribute on each element
-of the queryset; otherwise sets with None.
-
-Geometry Editors
-----------------
-
-``force_rhr``
-~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.force_rhr(**kwargs)
-
-.. versionadded:: 1.2
-
-*Availability*: PostGIS
-
-Returns a modified version of the polygon/multipolygon in which all
-of the vertices follow the Right-Hand-Rule, and attaches as a
-``force_rhr`` attribute on each element of the queryset.
-
-``reverse_geom``
-~~~~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.reverse_geom(**kwargs)
-
-.. versionadded:: 1.2
-
-*Availability*: PostGIS, Oracle
-
-Reverse the coordinate order of the geometry field, and attaches as a
-``reverse`` attribute on each element of the queryset.
-
-``scale``
-~~~~~~~~~
-
-.. method:: GeoQuerySet.scale(x, y, z=0.0, **kwargs)
-
-*Availability*: PostGIS, SpatiaLite
-
-``snap_to_grid``
-~~~~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.snap_to_grid(*args, **kwargs)
-
-.. versionadded:: 1.1
-
-Snap all points of the input geometry to the grid. How the
-geometry is snapped to the grid depends on how many numeric
-(either float, integer, or long) arguments are given.
-
-=================== =====================================================
-Number of Arguments Description
-=================== =====================================================
-1 A single size to snap bot the X and Y grids to.
-2 X and Y sizes to snap the grid to.
-4 X, Y sizes and the corresponding X, Y origins.
-=================== =====================================================
-
-``transform``
-~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.transform(srid=4326, **kwargs)
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-The ``transform`` method transforms the geometry field of a model to the spatial
-reference system specified by the ``srid`` parameter. If no ``srid`` is given,
-then 4326 (WGS84) is used by default.
-
-.. note::
-
- Unlike other ``GeoQuerySet`` methods, ``transform`` stores its output
- "in-place". In other words, no new attribute for the transformed
- geometry is placed on the models.
-
-.. note::
-
- What spatial reference system an integer SRID corresponds to may depend on
- the spatial database used. In other words, the SRID numbers used for Oracle
- are not necessarily the same as those used by PostGIS.
-
-Example::
-
- >>> qs = Zipcode.objects.all().transform() # Transforms to WGS84
- >>> qs = Zipcode.objects.all().transform(32140) # Transforming to "NAD83 / Texas South Central"
- >>> print qs[0].poly.srid
- 32140
- >>> print qs[0].poly
- POLYGON ((234055.1698884720099159 4937796.9232223574072123 ...
-
-``translate``
-~~~~~~~~~~~~~
-.. method:: GeoQuerySet.translate(x, y, z=0.0, **kwargs)
-
-*Availability*: PostGIS, SpatiaLite
-
-Translates the geometry field to a new location using the given numeric
-parameters as offsets.
-
-Geometry Operations
--------------------
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-The following methods all take a geometry as a parameter and attach a geometry
-to each element of the ``GeoQuerySet`` that is the result of the operation.
-
-``difference``
-~~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.difference(geom)
-
-Returns the spatial difference of the geographic field with the given
-geometry in a ``difference`` attribute on each element of the
-``GeoQuerySet``.
-
-
-``intersection``
-~~~~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.intersection(geom)
-
-Returns the spatial intersection of the geographic field with the
-given geometry in an ``intersection`` attribute on each element of the
-``GeoQuerySet``.
-
-``sym_difference``
-~~~~~~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.sym_difference(geom)
-
-Returns the symmetric difference of the geographic field with the
-given geometry in a ``sym_difference`` attribute on each element of the
-``GeoQuerySet``.
-
-``union``
-~~~~~~~~~
-
-.. method:: GeoQuerySet.union(geom)
-
-Returns the union of the geographic field with the given
-geometry in an ``union`` attribute on each element of the
-``GeoQuerySet``.
-
-Geometry Output
----------------
-
-The following ``GeoQuerySet`` methods will return an attribute that has the value
-of the geometry field in each model converted to the requested output format.
-
-``geohash``
-~~~~~~~~~~~
-
-.. method:: GeoQuerySet.geohash(preceision=20, **kwargs)
-
-.. versionadded:: 1.2
-
-Attaches a ``geohash`` attribute to every model the the queryset
-containing the `GeoHash`__ representation of the geometry.
-
-__ http://geohash.org/
-
-``geojson``
-~~~~~~~~~~~
-
-.. method:: GeoQuerySet.geojson(**kwargs)
-
-.. versionadded:: 1.1
-
-*Availability*: PostGIS
-
-Attaches a ``geojson`` attribute to every model in the queryset that contains the
-`GeoJSON`__ representation of the geometry.
-
-===================== =====================================================
-Keyword Argument Description
-===================== =====================================================
-``precision`` It may be used to specify the number of significant
- digits for the coordinates in the GeoJSON
- representation -- the default value is 8.
-
-``crs`` Set this to ``True`` if you want the coordinate
- reference system to be included in the returned
- GeoJSON.
-
-``bbox`` Set this to ``True`` if you want the bounding box
- to be included in the returned GeoJSON.
-===================== =====================================================
-
-__ http://geojson.org/
-
-``gml``
-~~~~~~~
-
-.. method:: GeoQuerySet.gml(**kwargs)
-
-*Availability*: PostGIS, Oracle
-
-Attaches a ``gml`` attribute to every model in the queryset that contains the
-`Geographic Markup Language (GML)`__ representation of the geometry.
-
-Example::
-
- >>> qs = Zipcode.objects.all().gml()
- >>> print qs[0].gml
- <gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ... -147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon>
-
-===================== =====================================================
-Keyword Argument Description
-===================== =====================================================
-``precision`` This keyword is for PostGIS only. It may be used
- to specify the number of significant digits for the
- coordinates in the GML representation -- the default
- value is 8.
-
-``version`` This keyword is for PostGIS only. It may be used to
- specify the GML version used, and may only be values
- of 2 or 3. The default value is 2.
-===================== =====================================================
-
-__ http://en.wikipedia.org/wiki/Geography_Markup_Language
-
-``kml``
-~~~~~~~
-
-.. method:: GeoQuerySet.kml(**kwargs)
-
-*Availability*: PostGIS
-
-Attaches a ``kml`` attribute to every model in the queryset that contains the
-`Keyhole Markup Language (KML)`__ representation of the geometry fields. It
-should be noted that the contents of the KML are transformed to WGS84 if
-necessary.
-
-Example::
-
- >>> qs = Zipcode.objects.all().kml()
- >>> print qs[0].kml
- <Polygon><outerBoundaryIs><LinearRing><coordinates>-103.04135,36.217596,0 ... -103.04135,36.217596,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
-
-===================== =====================================================
-Keyword Argument Description
-===================== =====================================================
-``precision`` This keyword may be used to specify the number of
- significant digits for the coordinates in the KML
- representation -- the default value is 8.
-===================== =====================================================
-
-__ http://code.google.com/apis/kml/documentation/
-
-``svg``
-~~~~~~~
-
-.. method:: GeoQuerySet.svg(**kwargs)
-
-*Availability*: PostGIS, SpatiaLite
-
-Attaches a ``svg`` attribute to every model in the queryset that contains
-the `Scalable Vector Graphics (SVG)`__ path data of the geometry fields.
-
-===================== =====================================================
-Keyword Argument Description
-===================== =====================================================
-``relative`` If set to ``True``, the path data will be implemented
- in terms of relative moves. Defaults to ``False``,
- meaning that absolute moves are used instead.
-
-``precision`` This keyword may be used to specify the number of
- significant digits for the coordinates in the SVG
- representation -- the default value is 8.
-===================== =====================================================
-
-__ http://www.w3.org/Graphics/SVG/
-
-Miscellaneous
--------------
-
-``mem_size``
-~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.mem_size(**kwargs)
-
-*Availability*: PostGIS
-
-Returns the memory size (number of bytes) that the geometry field takes
-in a ``mem_size`` attribute on each element of the ``GeoQuerySet``.
-
-``num_geom``
-~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.num_geom(**kwargs)
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-Returns the number of geometries in a ``num_geom`` attribute on
-each element of the ``GeoQuerySet`` if the geometry field is a
-collection (e.g., a ``GEOMETRYCOLLECTION`` or ``MULTI*`` field);
-otherwise sets with ``None``.
-
-``num_points``
-~~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.num_points(**kwargs)
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-Returns the number of points in the first linestring in the
-geometry field in a ``num_points`` attribute on each element of
-the ``GeoQuerySet``; otherwise sets with ``None``.
-
-Spatial Aggregates
-==================
-.. versionadded:: 1.1
-
-Aggregate Methods
------------------
-
-``collect``
-~~~~~~~~~~~
-
-.. method:: GeoQuerySet.collect(**kwargs)
-
-.. versionadded:: 1.1
-
-*Availability*: PostGIS
-
-Returns a ``GEOMETRYCOLLECTION`` or a ``MULTI`` geometry object from the geometry
-column. This is analagous to a simplified version of the :meth:`GeoQuerySet.unionagg` method,
-except it can be several orders of magnitude faster than peforming a union because
-it simply rolls up geometries into a collection or multi object, not caring about
-dissolving boundaries.
-
-``extent``
-~~~~~~~~~~
-
-.. method:: GeoQuerySet.extent(**kwargs)
-
-*Availability*: PostGIS, Oracle
-
-Returns the extent of the ``GeoQuerySet`` as a four-tuple, comprising the
-lower left coordinate and the upper right coordinate.
-
-Example::
-
- >>> qs = City.objects.filter(name__in=('Houston', 'Dallas'))
- >>> print qs.extent()
- (-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
-
-``extent3d``
-~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.extent3d(**kwargs)
-
-.. versionadded:: 1.2
-
-*Availability*: PostGIS
-
-Returns the 3D extent of the ``GeoQuerySet`` as a six-tuple, comprising
-the lower left coordinate and upper right coordinate.
-
-Example::
-
- >>> qs = City.objects.filter(name__in=('Houston', 'Dallas'))
- >>> print qs.extent3d()
- (-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)
-
-``make_line``
-~~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.make_line(**kwargs)
-
-*Availability*: PostGIS
-
-Returns a ``LineString`` constructed from the point field geometries in the
-``GeoQuerySet``. Currently, ordering the queryset has no effect.
-
-Example::
-
- >>> print City.objects.filter(name__in=('Houston', 'Dallas')).make_line()
- LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)
-
-``unionagg``
-~~~~~~~~~~~~
-
-.. method:: GeoQuerySet.unionagg(**kwargs)
-
-*Availability*: PostGIS, Oracle, SpatiaLite
-
-This method returns a :class:`~django.contrib.gis.geos.GEOSGeometry` object
-comprising the union of every geometry in the queryset. Please note that
-use of ``unionagg`` is processor intensive and may take a significant amount
-of time on large querysets.
-
-.. note::
-
- If the computation time for using this method is too expensive,
- consider using :meth:`GeoQuerySet.collect` instead.
-
-Example::
-
- >>> u = Zipcode.objects.unionagg() # This may take a long time.
- >>> u = Zipcode.objects.filter(poly__within=bbox).unionagg() # A more sensible approach.
-
-===================== =====================================================
-Keyword Argument Description
-===================== =====================================================
-``tolerance`` This keyword is for Oracle only. It is for the
- tolerance value used by the ``SDOAGGRTYPE``
- procedure; the `Oracle documentation`__ has more
- details.
-===================== =====================================================
-
-__ http://download.oracle.com/docs/html/B14255_01/sdo_intro.htm#sthref150
-
-Aggregate Functions
--------------------
-
-Example::
-
- >>> from django.contrib.gis.db.models import Extent, Union
- >>> WorldBorders.objects.aggregate(Extent('mpoly'), Union('mpoly'))
-
-``Collect``
-~~~~~~~~~~~
-
-.. class:: Collect(geo_field)
-
-Returns the same as the :meth:`GeoQuerySet.collect` aggregate method.
-
-``Extent``
-~~~~~~~~~~
-.. class:: Extent(geo_field)
-
-
-Returns the same as the :meth:`GeoQuerySet.extent` aggregate method.
-
-``Extent3D``
-~~~~~~~~~~~~
-
-.. class:: Extent3D(geo_field)
-
-.. versionadded:: 1.2
-
-Returns the same as the :meth:`GeoQuerySet.extent3d` aggregate method.
-
-``MakeLine``
-~~~~~~~~~~~~
-
-.. class:: MakeLine(geo_field)
-
-Returns the same as the :meth:`GeoQuerySet.make_line` aggregate method.
-
-``Union``
-~~~~~~~~~
-
-.. class:: Union(geo_field)
-
-Returns the same as the :meth:`GeoQuerySet.union` aggregate method.
-
-.. rubric:: Footnotes
-.. [#fnde9im] *See* `OpenGIS Simple Feature Specification For SQL <http://www.opengis.org/docs/99-049.pdf>`_, at Ch. 2.1.13.2, p. 2-13 (The Dimensionally Extended Nine-Intersection Model).
-.. [#fnsdorelate] *See* `SDO_RELATE documentation <http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14255/sdo_operat.htm#sthref845>`_, from Ch. 11 of the Oracle Spatial User's Guide and Manual.
-.. [#fncovers] For an explanation of this routine, read `Quirks of the "Contains" Spatial Predicate <http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html>`_ by Martin Davis (a PostGIS developer).
-.. [#fncontainsproperly] Refer to the PostGIS ``ST_ContainsProperly`` `documentation <http://postgis.refractions.net/documentation/manual-1.4/ST_ContainsProperly.html>`_ for more details.
diff --git a/parts/django/docs/ref/contrib/gis/geos.txt b/parts/django/docs/ref/contrib/gis/geos.txt
deleted file mode 100644
index 06a88a8..0000000
--- a/parts/django/docs/ref/contrib/gis/geos.txt
+++ /dev/null
@@ -1,911 +0,0 @@
-.. _ref-geos:
-
-========
-GEOS API
-========
-
-.. module:: django.contrib.gis.geos
- :synopsis: GeoDjango's high-level interface to the GEOS library.
-
-Background
-==========
-
-What is GEOS?
--------------
-
-`GEOS`__ stands for **G**\ eometry **E**\ ngine - **O**\ pen **S**\ ource,
-and is a C++ library, ported from the `Java Topology Suite`__. GEOS
-implements the OpenGIS `Simple Features for SQL`__ spatial predicate functions
-and spatial operators. GEOS, now an OSGeo project, was initially developed and
-maintained by `Refractions Research`__ of Victoria, Canada.
-
-__ http://trac.osgeo.org/geos/
-__ http://sourceforge.net/projects/jts-topo-suite/
-__ http://www.opengeospatial.org/standards/sfs
-__ http://www.refractions.net/
-
-Features
---------
-
-GeoDjango implements a high-level Python wrapper for the GEOS library, its
-features include:
-
-* A BSD-licensed interface to the GEOS geometry routines, implemented purely
- in Python using ``ctypes``.
-* Loosely-coupled to GeoDjango. For example, :class:`GEOSGeometry` objects
- may be used outside of a django project/application. In other words,
- no need to have ``DJANGO_SETTINGS_MODULE`` set or use a database, etc.
-* Mutability: :class:`GEOSGeometry` objects may be modified.
-* Cross-platform and tested; compatible with Windows, Linux, Solaris, and Mac
- OS X platforms.
-
-.. _geos-tutorial:
-
-Tutorial
-========
-
-This section contains a brief introduction and tutorial to using
-:class:`GEOSGeometry` objects.
-
-Creating a Geometry
--------------------
-
-:class:`GEOSGeometry` objects may be created in a few ways. The first is
-to simply instantiate the object on some spatial input -- the following
-are examples of creating the same geometry from WKT, HEX, WKB, and GeoJSON::
-
- >>> from django.contrib.gis.geos import GEOSGeometry
- >>> pnt = GEOSGeometry('POINT(5 23)') # WKT
- >>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
- >>> pnt = GEOSGeometry(buffer('\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@'))
- >>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON
-
-Another option is to use the constructor for the specific geometry type
-that you wish to create. For example, a :class:`Point` object may be
-created by passing in the X and Y coordinates into its constructor::
-
- >>> from django.contrib.gis.geos import Point
- >>> pnt = Point(5, 23)
-
-Finally, there are :func:`fromstr` and :func:`fromfile` factory methods, which
-return a :class:`GEOSGeometry` object from an input string or a file::
-
- >>> from django.contrib.gis.geos import fromstr, fromfile
- >>> pnt = fromstr('POINT(5 23)')
- >>> pnt = fromfile('/path/to/pnt.wkt')
- >>> pnt = fromfile(open('/path/to/pnt.wkt'))
-
-Geometries are Pythonic
------------------------
-:class:`GEOSGeometry` objects are 'Pythonic', in other words components may
-be accessed, modified, and iterated over using standard Python conventions.
-For example, you can iterate over the coordinates in a :class:`Point`::
-
- >>> pnt = Point(5, 23)
- >>> [coord for coord in pnt]
- [5.0, 23.0]
-
-With any geometry object, the :attr:`GEOSGeometry.coords` property
-may be used to get the geometry coordinates as a Python tuple::
-
- >>> pnt.coords
- (5.0, 23.0)
-
-You can get/set geometry components using standard Python indexing
-techniques. However, what is returned depends on the geometry type
-of the object. For example, indexing on a :class:`LineString`
-returns a coordinate tuple::
-
- >>> from django.contrib.gis.geos import LineString
- >>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0))
- >>> line[0]
- (0.0, 0.0)
- >>> line[-2]
- (50.0, 0.0)
-
-Whereas indexing on a :class:`Polygon` will return the ring
-(a :class:`LinearRing` object) corresponding to the index::
-
- >>> from django.contrib.gis.geos import Polygon
- >>> poly = Polygon( ((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)) )
- >>> poly[0]
- <LinearRing object at 0x1044395b0>
- >>> poly[0][-2] # second-to-last coordinate of external ring
- (50.0, 0.0)
-
-In addition, coordinates/components of the geometry may added or modified,
-just like a Python list::
-
- >>> line[0] = (1.0, 1.0)
- >>> line.pop()
- (0.0, 0.0)
- >>> line.append((1.0, 1.0))
- >>> line.coords
- ((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))
-
-Geometry Objects
-================
-
-``GEOSGeometry``
-----------------
-
-.. class:: GEOSGeometry(geo_input[, srid=None])
-
- :param geo_input: Geometry input value
- :type geo_input: string or buffer
- :param srid: spatial reference identifier
- :type srid: integer
-
-This is the base class for all GEOS geometry objects. It initializes on the
-given ``geo_input`` argument, and then assumes the proper geometry subclass
-(e.g., ``GEOSGeometry('POINT(1 1)')`` will create a :class:`Point` object).
-
-The following input formats, along with their corresponding Python types,
-are accepted:
-
-============= ======================
-Format Input Type
-============= ======================
-WKT / EWKT ``str`` or ``unicode``
-HEX / HEXEWKB ``str`` or ``unicode``
-WKB / EWKB ``buffer``
-GeoJSON ``str`` or ``unicode``
-============= ======================
-
-Properties
-~~~~~~~~~~
-
-.. attribute:: GEOSGeometry.coords
-
-Returns the coordinates of the geometry as a tuple.
-
-.. attribute:: GEOSGeometry.empty
-
-Returns whether or not the set of points in the geometry is empty.
-
-.. attribute:: GEOSGeometry.geom_type
-
-Returns a string corresponding to the type of geometry. For example::
-
- >>> pnt = GEOSGeometry('POINT(5 23)')
- >>> pnt.geom_type
- 'Point'
-
-.. attribute:: GEOSGeometry.geom_typeid
-
-Returns the GEOS geometry type identification number. The following table
-shows the value for each geometry type:
-
-=========================== ========
-Geometry ID
-=========================== ========
-:class:`Point` 0
-:class:`LineString` 1
-:class:`LinearRing` 2
-:class:`Polygon` 3
-:class:`MultiPoint` 4
-:class:`MultiLineString` 5
-:class:`MultiPolygon` 6
-:class:`GeometryCollection` 7
-=========================== ========
-
-.. attribute:: GEOSGeometry.num_coords
-
-Returns the number of coordinates in the geometry.
-
-.. attribute:: GEOSGeometry.num_geom
-
-Returns the number of geometries in this geometry. In other words, will
-return 1 on anything but geometry collections.
-
-.. attribute:: GEOSGeometry.hasz
-
-Returns a boolean indicating whether the geometry is three-dimensional.
-
-.. attribute:: GEOSGeometry.ring
-
-Returns a boolean indicating whether the geometry is a ``LinearRing``.
-
-.. attribute:: GEOSGeometry.simple
-
-Returns a boolean indicating whether the geometry is 'simple'. A geometry
-is simple if and only if it does not intersect itself (except at boundary
-points). For example, a :class:`LineString` object is not simple if it
-intersects itself. Thus, :class:`LinearRing` and :class`Polygon` objects
-are always simple because they do cannot intersect themselves, by
-definition.
-
-.. attribute:: GEOSGeometry.valid
-
-Returns a boolean indicating whether the geometry is valid.
-
-.. attribute:: GEOSGeometry.srid
-
-Property that may be used to retrieve or set the SRID associated with the
-geometry. For example::
-
- >>> pnt = Point(5, 23)
- >>> print pnt.srid
- None
- >>> pnt.srid = 4326
- >>> pnt.srid
- 4326
-
-Output Properties
-~~~~~~~~~~~~~~~~~
-
-The properties in this section export the :class:`GEOSGeometry` object into
-a different. This output may be in the form of a string, buffer, or even
-another object.
-
-.. attribute:: GEOSGeometry.ewkt
-
-Returns the "extended" Well-Known Text of the geometry. This representation
-is specific to PostGIS and is a super set of the OGC WKT standard. [#fnogc]_
-Essentially the SRID is prepended to the WKT representation, for example
-``SRID=4326;POINT(5 23)``.
-
-.. note::
-
- The output from this property does not include the 3dm, 3dz, and 4d
- information that PostGIS supports in its EWKT representations.
-
-.. attribute:: GEOSGeometry.hex
-
-Returns the WKB of this Geometry in hexadecimal form. Please note
-that the SRID and Z values are not included in this representation
-because it is not a part of the OGC specification (use the
-:attr:`GEOSGeometry.hexewkb` property instead).
-
-.. attribute:: GEOSGeometry.hexewkb
-
-.. versionadded:: 1.2
-
-Returns the EWKB of this Geometry in hexadecimal form. This is an
-extension of the WKB specification that includes SRID and Z values
-that are a part of this geometry.
-
-.. note::
-
- GEOS 3.1 is *required* if you want valid 3D HEXEWKB.
-
-.. attribute:: GEOSGeometry.json
-
-Returns the GeoJSON representation of the geometry.
-
-.. note::
-
- Requires GDAL.
-
-.. attribute:: GEOSGeometry.geojson
-
-Alias for :attr:`GEOSGeometry.json`.
-
-.. attribute:: GEOSGeometry.kml
-
-Returns a `KML`__ (Keyhole Markup Language) representation of the
-geometry. This should only be used for geometries with an SRID of
-4326 (WGS84), but this restriction is not enforced.
-
-.. attribute:: GEOSGeometry.ogr
-
-Returns an :class:`~django.contrib.gis.gdal.OGRGeometry` object
-correspondg to the GEOS geometry.
-
-.. note::
-
- Requires GDAL.
-
-.. _wkb:
-
-.. attribute:: GEOSGeometry.wkb
-
-Returns the WKB (Well-Known Binary) representation of this Geometry
-as a Python buffer. SRID and Z values are not included, use the
-:attr:`GEOSGeometry.ewkb` property instead.
-
-.. _ewkb:
-
-.. attribute:: GEOSGeometry.ewkb
-
-.. versionadded:: 1.2
-
-Return the EWKB representation of this Geometry as a Python buffer.
-This is an extension of the WKB specification that includes any SRID
-and Z values that are a part of this geometry.
-
-.. note::
-
- GEOS 3.1 is *required* if you want valid 3D EWKB.
-
-.. attribute:: GEOSGeometry.wkt
-
-Returns the Well-Known Text of the geometry (an OGC standard).
-
-__ http://code.google.com/apis/kml/documentation/
-
-Spatial Predicate Methods
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-All of the following spatial predicate methods take another
-:class:`GEOSGeometry` instance (``other``) as a parameter, and
-return a boolean.
-
-.. method:: GEOSGeometry.contains(other)
-
-Returns ``True`` if :meth:`GEOSGeometry.within` is ``False``.
-
-.. method:: GEOSGeometry.crosses(other)
-
-Returns ``True`` if the DE-9IM intersection matrix for the two Geometries
-is ``T*T******`` (for a point and a curve,a point and an area or a line
-and an area) ``0********`` (for two curves).
-
-.. method:: GEOSGeometry.disjoint(other)
-
-Returns ``True`` if the DE-9IM intersection matrix for the two geometries
-is ``FF*FF****``.
-
-.. method:: GEOSGeometry.equals(other)
-
-Returns ``True`` if the DE-9IM intersection matrix for the two geometries
-is ``T*F**FFF*``.
-
-.. method:: GEOSGeometry.equals_exact(other, tolerance=0)
-
-Returns true if the two geometries are exactly equal, up to a
-specified tolerance. The ``tolerance`` value should be a floating
-point number representing the error tolerance in the comparison, e.g.,
-``poly1.equals_exact(poly2, 0.001)`` will compare equality to within
-one thousandth of a unit.
-
-.. method:: GEOSGeometry.intersects(other)
-
-Returns ``True`` if :meth:`GEOSGeometry.disjoint` is ``False``.
-
-.. method:: GEOSGeometry.overlaps(other)
-
-Returns true if the DE-9IM intersection matrix for the two geometries
-is ``T*T***T**`` (for two points or two surfaces) ``1*T***T**``
-(for two curves).
-
-.. method:: GEOSGeometry.relate_pattern(other, pattern)
-
-Returns ``True`` if the elements in the DE-9IM intersection matrix
-for this geometry and the other matches the given ``pattern`` --
-a string of nine characters from the alphabet: {``T``, ``F``, ``*``, ``0``}.
-
-.. method:: GEOSGeometry.touches(other)
-
-Returns ``True`` if the DE-9IM intersection matrix for the two geometries
-is ``FT*******``, ``F**T*****`` or ``F***T****``.
-
-.. method:: GEOSGeometry.within(other)
-
-Returns ``True`` if the DE-9IM intersection matrix for the two geometries
-is ``T*F**F***``.
-
-Topological Methods
-~~~~~~~~~~~~~~~~~~~
-
-.. method:: GEOSGeometry.buffer(width, quadsegs=8)
-
-Returns a :class:`GEOSGeometry` that represents all points whose distance
-from this geometry is less than or equal to the given ``width``. The optional
-``quadsegs`` keyword sets the number of segments used to approximate a
-quarter circle (defaults is 8).
-
-.. method:: GEOSGeometry.difference(other)
-
-Returns a :class:`GEOSGeometry` representing the points making up this
-geometry that do not make up other.
-
-.. method:: GEOSGeometry:intersection(other)
-
-Returns a :class:`GEOSGeometry` representing the points shared by this
-geometry and other.
-
-.. method:: GEOSGeometry.relate(other)
-
-Returns the DE-9IM intersection matrix (a string) representing the
-topological relationship between this geometry and the other.
-
-.. method:: GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)
-
-Returns a new :class:`GEOSGeometry`, simplified using the Douglas-Peucker
-algorithm to the specified tolerance. A higher tolerance value implies
-less points in the output. If no tolerance is tolerance provided,
-it defaults to 0.
-
-By default, this function does not preserve topology - e.g.,
-:class:`Polygon` objects can be split, collapsed into lines or disappear.
-:class:`Polygon` holes can be created or disappear, and lines can cross.
-By specifying ``preserve_topology=True``, the result will have the same
-dimension and number of components as the input, however, this is
-significantly slower.
-
-.. method:: GEOSGeometry.sym_difference(other)
-
-Returns a :class:`GEOSGeometry` combining the points in this geometry
-not in other, and the points in other not in this geometry.
-
-.. method:: GEOSGeometry.union(other)
-
-Returns a :class:`GEOSGeometry` representing all the points in this
-geometry and the other.
-
-Topological Properties
-~~~~~~~~~~~~~~~~~~~~~~
-
-.. attribute:: GEOSGeometry.boundary
-
-Returns the boundary as a newly allocated Geometry object.
-
-.. attribute:: GEOSGeometry.centroid
-
-Returns a :class:`Point` object representing the geometric center of
-the geometry. The point is not guaranteed to be on the interior
-of the geometry.
-
-.. attribute:: GEOSGeometry.convex_hull
-
-Returns the smallest :class:`Polygon` that contains all the points in
-the geometry.
-
-.. attribute:: GEOSGeometry.envelope
-
-Returns a :class:`Polygon` that represents the bounding envelope of
-this geometry.
-
-.. attribute:: GEOSGeometry.point_on_surface
-
-Computes and returns a :class:`Point` guaranteed to be on the interior
-of this geometry.
-
-Other Properties & Methods
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. attribute:: GEOSGeometry.area
-
-This property returns the area of the Geometry.
-
-.. attribute:: GEOSGeometry.extent
-
-This property returns the extent of this geometry as a 4-tuple,
-consisting of (xmin, ymin, xmax, ymax).
-
-.. method:: GEOSGeometry.clone()
-
-This method returns a :class:`GEOSGeometry` that is a clone of the original.
-
-.. method:: GEOSGeometry.distance(geom)
-
-Returns the distance between the closest points on this geometry and the given
-``geom`` (another :class:`GEOSGeometry` object).
-
-.. note::
-
- GEOS distance calculations are linear -- in other words, GEOS does not
- perform a spherical calculation even if the SRID specifies a geographic
- coordinate system.
-
-.. attribute:: GEOSGeometry.length
-
-Returns the length of this geometry (e.g., 0 for a :class:`Point`,
-the length of a :class:`LineString`, or the circumference of
-a :class:`Polygon`).
-
-.. attribute:: GEOSGeometry.prepared
-
-.. versionadded:: 1.1
-
-.. note::
-
- Support for prepared geometries requires GEOS 3.1.
-
-Returns a GEOS ``PreparedGeometry`` for the contents of this geometry.
-``PreparedGeometry`` objects are optimized for the contains, intersects,
-and covers operations. Refer to the :ref:`prepared-geometries` documentation
-for more information.
-
-.. attribute:: GEOSGeometry.srs
-
-Returns a :class:`~django.contrib.gis.gdal.SpatialReference` object
-corresponding to the SRID of the geometry or ``None``.
-
-.. note::
-
- Requires GDAL.
-
-.. method:: transform(ct, clone=False)
-
-Transforms the geometry according to the given coordinate transformation paramter
-(``ct``), which may be an integer SRID, spatial reference WKT string,
-a PROJ.4 string, a :class:`~django.contrib.gis.gdal.SpatialReference` object, or a
-:class:`~django.contrib.gis.gdal.CoordTransform` object. By default, the geometry
-is transformed in-place and nothing is returned. However if the ``clone`` keyword
-is set, then the geometry is not modified and a transformed clone of the geometry
-is returned instead.
-
-.. note::
-
- Requires GDAL.
-
-``Point``
----------
-
-.. class:: Point(x, y, z=None, srid=None)
-
- ``Point`` objects are instantiated using arguments that represent
- the component coordinates of the point or with a single sequence
- coordinates. For example, the following are equivalent::
-
- >>> pnt = Point(5, 23)
- >>> pnt = Point([5, 23])
-
-``LineString``
---------------
-
-.. class:: LineString(*args, **kwargs)
-
- ``LineString`` objects are instantiated using arguments that are
- either a sequence of coordinates or :class:`Point` objects.
- For example, the following are equivalent::
-
- >>> ls = LineString((0, 0), (1, 1))
- >>> ls = LineString(Point(0, 0), Point(1, 1))
-
- In addition, ``LineString`` objects may also be created by passing
- in a single sequence of coordinate or :class:`Point` objects::
-
- >>> ls = LineString( ((0, 0), (1, 1)) )
- >>> ls = LineString( [Point(0, 0), Point(1, 1)] )
-
-``LinearRing``
---------------
-
-.. class:: LinearRing(*args, **kwargs)
-
- ``LinearRing`` objects are constructed in the exact same way as
- :class:`LineString` objects, however the coordinates must be
- *closed*, in other words, the first coordinates must be the
- same as the last coordinates. For example::
-
- >>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
-
- Notice that ``(0, 0)`` is the first and last coordinate -- if
- they were not equal, an error would be raised.
-
-``Polygon``
------------
-
-.. class:: Polygon(*args, **kwargs)
-
- ``Polygon`` objects may be instantiated by passing in one or
- more parameters that represent the rings of the polygon. The
- parameters must either be :class:`LinearRing` instances, or
- a sequence that may be used to construct a :class:`LinearRing`::
-
- >>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0))
- >>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4))
- >>> poly = Polygon(ext_coords, int_coords)
- >>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
-
- .. classmethod:: from_bbox(bbox)
-
- .. versionadded:: 1.1
-
- Returns a polygon object from the given bounding-box, a 4-tuple
- comprising (xmin, ymin, xmax, ymax).
-
- .. attribute:: num_interior_rings
-
- Returns the number of interior rings in this geometry.
-
-Geometry Collections
-====================
-
-``MultiPoint``
---------------
-
-.. class:: MultiPoint(*args, **kwargs)
-
- ``MultiPoint`` objects may be instantiated by passing in one
- or more :class:`Point` objects as arguments, or a single
- sequence of :class:`Point` objects::
-
- >>> mp = MultiPoint(Point(0, 0), Point(1, 1))
- >>> mp = MultiPoint( (Point(0, 0), Point(1, 1)) )
-
-``MultiLineString``
--------------------
-
-.. class:: MultiLineString(*args, **kwargs)
-
- ``MultiLineString`` objects may be instantiated by passing in one
- or more :class:`LineString` objects as arguments, or a single
- sequence of :class:`LineString` objects::
-
- >>> ls1 = LineString((0, 0), (1, 1))
- >>> ls2 = LineString((2, 2), (3, 3))
- >>> mls = MultiLineString(ls1, ls2)
- >>> mls = MultiLineString([ls1, ls2])
-
- .. attribute:: merged
-
- .. versionadded:: 1.1
-
- Returns a :class:`LineString` representing the line merge of
- all the components in this ``MultiLineString``.
-
-
-``MultiPolygon``
-----------------
-
-.. class:: MultiPolygon(*args, **kwargs)
-
- ``MultiPolygon`` objects may be instantiated by passing one or
- more :class:`Polygon` objects as arguments, or a single sequence
- of :class:`Polygon` objects::
-
- >>> p1 = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
- >>> p2 = Polygon( ((1, 1), (1, 2), (2, 2), (1, 1)) )
- >>> mp = MultiPolygon(p1, p2)
- >>> mp = MultiPolygon([p1, p2])
-
- .. attribute:: cascaded_union
-
- .. versionadded:: 1.1
-
- Returns a :class:`Polygon` that is the union of all of the component
- polygons in this collection. The algorithm employed is significantly
- more efficient (faster) than trying to union the geometries together
- individually. [#fncascadedunion]_
-
- .. note::
-
- GEOS 3.1 is *required* to peform cascaded unions.
-
-``GeometryCollection``
-----------------------
-
-.. class:: GeometryCollection(*args, **kwargs)
-
- ``GeometryCollection`` objects may be instantiated by passing in
- one or more other :class:`GEOSGeometry` as arguments, or a single
- sequence of :class:`GEOSGeometry` objects::
-
- >>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
- >>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly)
- >>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))
-
-.. _prepared-geometries:
-
-Prepared Geometries
-===================
-
-.. versionadded: 1.1
-
-In order to obtain a prepared geometry, just access the
-:attr:`GEOSGeometry.prepared` property. Once you have a
-``PreparedGeometry`` instance its spatial predicate methods, listed below,
-may be used with other ``GEOSGeometry`` objects. An operation with a prepared
-geometry can be orders of magnitude faster -- the more complex the geometry
-that is prepared, the larger the speedup in the operation. For more information,
-please consult the `GEOS wiki page on prepared geometries <http://trac.osgeo.org/geos/wiki/PreparedGeometry>`_.
-
-.. note::
-
- GEOS 3.1 is *required* in order to use prepared geometries.
-
-For example::
-
- >>> from django.contrib.gis.geos import Point, Polygon
- >>> poly = Polygon.from_bbox((0, 0, 5, 5))
- >>> prep_poly = poly.prepared
- >>> prep_poly.contains(Point(2.5, 2.5))
- True
-
-``PreparedGeometry``
---------------------
-
-.. class:: PreparedGeometry
-
- All methods on ``PreparedGeometry`` take an ``other`` argument, which
- must be a :class:`GEOSGeometry` instance.
-
- .. method:: contains(other)
-
- .. method:: contains_properly(other)
-
- .. method:: covers(other)
-
- .. method:: intersects(other)
-
-Geometry Factories
-==================
-
-.. function:: fromfile(file_h)
-
- :param file_h: input file that contains spatial data
- :type file_h: a Python ``file`` object or a string path to the file
- :rtype: a :class:`GEOSGeometry` corresponding to the spatial data in the file
-
-Example::
-
- >>> from django.contrib.gis.geos import fromfile
- >>> g = fromfile('/home/bob/geom.wkt')
-
-.. function:: fromstr(string, [,srid=None])
-
- :param string: string that contains spatial data
- :type string: string
- :param srid: spatial reference identifier
- :type srid: integer
- :rtype: a :class:`GEOSGeometry` corresponding to the spatial data in the string
-
-Example::
-
- >>> from django.contrib.gis.geos import fromstr
- >>> pnt = fromstr('POINT(-90.5 29.5)', srid=4326)
-
-I/O Objects
-===========
-
-.. versionadded: 1.1
-
-Reader Objects
---------------
-
-The reader I/O classes simply return a :class:`GEOSGeometry` instance from the
-WKB and/or WKT input given to their ``read(geom)`` method.
-
-.. class:: WKBReader
-
-Example::
-
- >>> from django.contrib.gis.geos import WKBReader
- >>> wkb_r = WKBReader()
- >>> wkb_r.read('0101000000000000000000F03F000000000000F03F')
- <Point object at 0x103a88910>
-
-.. class:: WKTReader
-
-Example::
-
- >>> from django.contrib.gis.geos import WKTReader
- >>> wkt_r = WKTReader()
- >>> wkt_r.read('POINT(1 1)')
- <Point object at 0x103a88b50>
-
-Writer Objects
---------------
-
-All writer objects have a ``write(geom)`` method that returns either the
-WKB or WKT of the given geometry. In addition, :class:`WKBWriter` objects
-also have properties that may be used to change the byte order, and or
-include the SRID and 3D values (in other words, EWKB).
-
-.. class:: WKBWriter
-
-``WKBWriter`` provides the most control over its output. By default it
-returns OGC-compliant WKB when it's ``write`` method is called. However,
-it has properties that allow for the creation of EWKB, a superset of the
-WKB standard that includes additional information.
-
-.. method:: WKBWriter.write(geom)
-
-Returns the WKB of the given geometry as a Python ``buffer`` object.
-Example::
-
- >>> from django.contrib.gis.geos import Point, WKBWriter
- >>> pnt = Point(1, 1)
- >>> wkb_w = WKBWriter()
- >>> wkb_w.write(pnt)
- <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
-
-.. method:: WKBWriter.write_hex(geom)
-
-Returns WKB of the geometry in hexadecimal. Example::
-
- >>> from django.contrib.gis.geos import Point, WKBWriter
- >>> pnt = Point(1, 1)
- >>> wkb_w = WKBWriter()
- >>> wkb_w.write_hex(pnt)
- '0101000000000000000000F03F000000000000F03F'
-
-.. attribute:: WKBWriter.byteorder
-
-This property may be be set to change the byte-order of the geometry
-representation.
-
-=============== =================================================
-Byteorder Value Description
-=============== =================================================
-0 Big Endian (e.g., compatible with RISC systems)
-1 Little Endian (e.g., compatible with x86 systems)
-=============== =================================================
-
-Example::
-
- >>> from django.contrib.gis.geos import Point, WKBWriter
- >>> wkb_w = WKBWriter()
- >>> pnt = Point(1, 1)
- >>> wkb_w.write_hex(pnt)
- '0101000000000000000000F03F000000000000F03F'
- >>> wkb_w.byteorder = 0
- '00000000013FF00000000000003FF0000000000000'
-
-.. attribute:: WKBWriter.outdim
-
-This property may be set to change the output dimension of the geometry
-representation. In other words, if you have a 3D geometry then set to 3
-so that the Z value is included in the WKB.
-
-============ ===========================
-Outdim Value Description
-============ ===========================
-2 The default, output 2D WKB.
-3 Output 3D EWKB.
-============ ===========================
-
-Example::
-
- >>> from django.contrib.gis.geos import Point, WKBWriter
- >>> wkb_w = WKBWriter()
- >>> wkb_w.outdim
- 2
- >>> pnt = Point(1, 1, 1)
- >>> wkb_w.write_hex(pnt) # By default, no Z value included:
- '0101000000000000000000F03F000000000000F03F'
- >>> wkb_w.outdim = 3 # Tell writer to include Z values
- >>> wkb_w.write_hex(pnt)
- '0101000080000000000000F03F000000000000F03F000000000000F03F'
-
-.. attribute:: WKBWriter.srid
-
-Set this property with a boolean to indicate whether the SRID of the
-geometry should be included with the WKB representation. Example::
-
- >>> from django.contrib.gis.geos import Point, WKBWriter
- >>> wkb_w = WKBWriter()
- >>> pnt = Point(1, 1, srid=4326)
- >>> wkb_w.write_hex(pnt) # By default, no SRID included:
- '0101000000000000000000F03F000000000000F03F'
- >>> wkb_w.srid = True # Tell writer to include SRID
- >>> wkb_w.write_hex(pnt)
- '0101000020E6100000000000000000F03F000000000000F03F'
-
-.. class:: WKTWriter
-
-.. method:: WKTWriter.write(geom)
-
-Returns the WKT of the given geometry. Example::
-
- >>> from django.contrib.gis.geos import Point, WKTWriter
- >>> pnt = Point(1, 1)
- >>> wkt_w = WKTWriter()
- >>> wkt_w.write(pnt)
- 'POINT (1.0000000000000000 1.0000000000000000)'
-
-
-.. rubric:: Footnotes
-.. [#fnogc] *See* `PostGIS EWKB, EWKT and Canonical Forms <http://postgis.refractions.net/docs/ch04.html#id2591381>`_, PostGIS documentation at Ch. 4.1.2.
-.. [#fncascadedunion] For more information, read Paul Ramsey's blog post about `(Much) Faster Unions in PostGIS 1.4 <http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html>`_ and Martin Davis' blog post on `Fast polygon merging in JTS using Cascaded Union <http://lin-ear-th-inking.blogspot.com/2007/11/fast-polygon-merging-in-jts-using.html>`_.
-
-Settings
-========
-
-.. setting:: GEOS_LIBRARY_PATH
-
-GEOS_LIBRARY_PATH
------------------
-
-A string specifying the location of the GEOS C library. Typically,
-this setting is only used if the GEOS C library is in a non-standard
-location (e.g., ``/home/bob/lib/libgeos_c.so``).
-
-.. note::
-
- The setting must be the *full* path to the **C** shared library; in
- other words you want to use ``libgeos_c.so``, not ``libgeos.so``.
diff --git a/parts/django/docs/ref/contrib/gis/index.txt b/parts/django/docs/ref/contrib/gis/index.txt
deleted file mode 100644
index c4959e0..0000000
--- a/parts/django/docs/ref/contrib/gis/index.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _ref-contrib-gis:
-
-=========
-GeoDjango
-=========
-
-.. versionadded:: 1.0
-
-.. module:: django.contrib.gis
- :synopsis: Geographic Information System (GIS) extensions for Django
-
-GeoDjango intends to be a world-class geographic Web framework. Its goal is to
-make it as easy as possible to build GIS Web applications and harness the power
-of spatially enabled data.
-
-.. toctree::
- :maxdepth: 2
-
- tutorial
- install
- model-api
- db-api
- geoquerysets
- measure
- geos
- gdal
- utils
- commands
- admin
- feeds
- sitemaps
- testing
- deployment
diff --git a/parts/django/docs/ref/contrib/gis/install.txt b/parts/django/docs/ref/contrib/gis/install.txt
deleted file mode 100644
index fa8e34c..0000000
--- a/parts/django/docs/ref/contrib/gis/install.txt
+++ /dev/null
@@ -1,1190 +0,0 @@
-.. _ref-gis-install:
-
-======================
-GeoDjango Installation
-======================
-
-Overview
-========
-In general, GeoDjango installation requires:
-
-1. :ref:`python24` and :ref:`django`
-2. :ref:`spatial_database`
-3. :ref:`geospatial_libs`
-
-Details for each of the requirements and installation instructions
-are provided in the sections below. In addition, platform-specific
-instructions are available for:
-
-* :ref:`macosx`
-* :ref:`ubuntudebian`
-* :ref:`windows`
-
-.. admonition:: Use the Source
-
- Because GeoDjango takes advantage of the latest in the open source geospatial
- software technology, recent versions of the libraries are necessary.
- If binary packages aren't available for your platform,
- :ref:`installation from source <build_from_source>`
- may be required. When compiling the libraries from source, please follow the
- directions closely, especially if you're a beginner.
-
-Requirements
-============
-
-.. _python24:
-
-Python 2.4+
------------
-
-Python 2.4 is the minimum version supported by Django, however Python 2.5+ is
-recommended because the `ctypes`__ module comes included; otherwise, 2.4 users
-will need to `download and install ctypes`__.
-
-__ http://docs.python.org/lib/module-ctypes.html
-__ http://sourceforge.net/projects/ctypes/files/
-
-.. _django:
-
-Django
-------
-
-Because GeoDjango is included with Django, please refer to Django's
-:doc:`installation instructions </intro/install>` for details on how to install.
-
-.. _spatial_database:
-
-Spatial Database
-----------------
-PostgreSQL (with PostGIS), MySQL, Oracle, and SQLite (with SpatiaLite) are
-the spatial databases currently supported.
-
-.. note::
-
- PostGIS is recommended, because it is the most mature and feature-rich
- open source spatial database.
-
-The geospatial libraries required for a GeoDjango installation depends
-on the spatial database used. The following lists the library requirements,
-supported versions, and any notes for each of the supported database backends:
-
-================== ============================== ================== ==========================================================
-Database Library Requirements Supported Versions Notes
-================== ============================== ================== ==========================================================
-PostgreSQL GEOS, PROJ.4, PostGIS 8.1+ Requires PostGIS.
-MySQL GEOS 5.x Not OGC-compliant; limited functionality.
-Oracle GEOS 10.2, 11 XE not supported; not tested with 9.
-SQLite GEOS, GDAL, PROJ.4, SpatiaLite 3.6.+ Requires SpatiaLite 2.3+, pysqlite2 2.5+, and Django 1.1.
-================== ============================== ================== ==========================================================
-
-.. _geospatial_libs:
-
-Geospatial Libraries
---------------------
-GeoDjango uses and/or provides interfaces for the the following open source
-geospatial libraries:
-
-======================== ==================================== ================================ ==========================
-Program Description Required Supported Versions
-======================== ==================================== ================================ ==========================
-:ref:`GEOS <ref-geos>` Geometry Engine Open Source Yes 3.2, 3.1, 3.0
-`PROJ.4`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 4.7, 4.6, 4.5, 4.4
-:ref:`GDAL <ref-gdal>` Geospatial Data Abstraction Library No (but, required for SQLite) 1.7, 1.6, 1.5, 1.4
-:ref:`GeoIP <ref-geoip>` IP-based geolocation library No 1.4
-`PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 1.5, 1.4, 1.3
-`SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 2.4, 2.3
-======================== ==================================== ================================ ==========================
-
-.. admonition:: Install GDAL
-
- While :ref:`gdalbuild` is technically not required, it is *recommended*.
- Some features of GeoDjango (including the :ref:`ref-layermapping` and the geographic
- admin) depend on its functionality.
-
-.. note::
-
- The GeoDjango interfaces to GEOS, GDAL, and GeoIP may be used
- independently of Django. In other words, no database or settings file
- required -- just import them as normal from :mod:`django.contrib.gis`.
-
-.. _PROJ.4: http://trac.osgeo.org/proj/
-__ http://postgis.refractions.net/
-__ http://www.gaia-gis.it/spatialite/index.html
-
-.. _build_from_source:
-
-Building from Source
-====================
-
-When installing from source on UNIX and GNU/Linux systems, please follow
-the installation instructions carefully, and install the libraries in the
-given order. If using MySQL or Oracle as the spatial database, only GEOS
-is required.
-
-.. note::
-
- On Linux platforms, it may be necessarry to run the ``ldconfig``
- command after installing each library. For example::
-
- $ sudo make install
- $ sudo ldconfig
-
-.. note::
-
- OS X users are required to install `Apple Developer Tools`_ in order
- to compile software from source. This is typically included on your
- OS X installation DVDs.
-
-.. _Apple Developer Tools: http://developer.apple.com/tools/xcode/
-
-.. _geosbuild:
-
-GEOS
-----
-
-GEOS is a C++ library for performing geometric operations, and is the default
-internal geometry representation used by GeoDjango (it's behind the "lazy"
-geometries). Specifically, the C API library is called (e.g., ``libgeos_c.so``)
-directly from Python using ctypes.
-
-First, download GEOS 3.2 from the refractions Web site and untar the source
-archive::
-
- $ wget http://download.osgeo.org/geos/geos-3.2.2.tar.bz2
- $ tar xjf geos-3.2.2.tar.bz2
-
-Next, change into the directory where GEOS was unpacked, run the configure
-script, compile, and install::
-
- $ cd geos-3.2.2
- $ ./configure
- $ make
- $ sudo make install
- $ cd ..
-
-Troubleshooting
-^^^^^^^^^^^^^^^
-
-Can't find GEOS Library
-~~~~~~~~~~~~~~~~~~~~~~~
-
-When GeoDjango can't find GEOS, this error is raised::
-
- ImportError: Could not find the GEOS library (tried "geos_c"). Try setting GEOS_LIBRARY_PATH in your settings.
-
-The most common solution is to properly configure your :ref:`libsettings` *or* set
-:ref:`geoslibrarypath` in your settings.
-
-If using a binary package of GEOS (e.g., on Ubuntu 8.10), you may need to :ref:`binutils`.
-
-.. _geoslibrarypath:
-
-``GEOS_LIBRARY_PATH``
-~~~~~~~~~~~~~~~~~~~~~
-
-If your GEOS library is in a non-standard location, or you don't want to
-modify the system's library path then the :setting:`GEOS_LIBRARY_PATH` setting
-may be added to your Django settings file with the full path to the GEOS
-C library. For example::
-
- GEOS_LIBRARY_PATH = '/home/bob/local/lib/libgeos_c.so'
-
-.. note::
-
- The setting must be the *full* path to the **C** shared library; in
- other words you want to use ``libgeos_c.so``, not ``libgeos.so``.
-
-.. _proj4:
-
-PROJ.4
-------
-
-`PROJ.4`_ is a library for converting geospatial data to different coordinate
-reference systems.
-
-First, download the PROJ.4 source code and datum shifting files [#]_::
-
- $ wget http://download.osgeo.org/proj/proj-4.7.0.tar.gz
- $ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip
-
-Next, untar the source code archive, and extract the datum shifting files in the
-``nad`` subdirectory. This must be done *prior* to configuration::
-
- $ tar xzf proj-4.7.0.tar.gz
- $ cd proj-4.7.0/nad
- $ unzip ../../proj-datumgrid-1.5.zip
- $ cd ..
-
-Finally, configure, make and install PROJ.4::
-
- $ ./configure
- $ make
- $ sudo make install
- $ cd ..
-
-.. _postgis:
-
-PostGIS
--------
-
-`PostGIS`__ adds geographic object support to PostgreSQL, turning it
-into a spatial database. :ref:`geosbuild` and :ref:`proj4` should be
-installed prior to building PostGIS.
-
-.. note::
-
- The `psycopg2`_ module is required for use as the database adaptor
- when using GeoDjango with PostGIS.
-
-.. _psycopg2: http://initd.org/projects/psycopg2
-
-First download the source archive, and extract::
-
- $ wget http://postgis.refractions.net/download/postgis-1.5.2.tar.gz
- $ tar xzf postgis-1.5.2.tar.gz
- $ cd postgis-1.5.2
-
-Next, configure, make and install PostGIS::
-
- $ ./configure
-
-Finally, make and install::
-
- $ make
- $ sudo make install
- $ cd ..
-
-.. note::
-
- GeoDjango does not automatically create a spatial database. Please
- consult the section on :ref:`spatialdb_template` for more information.
-
-__ http://postgis.refractions.net/
-
-.. _gdalbuild:
-
-GDAL
-----
-
-`GDAL`__ is an excellent open source geospatial library that has support for
-reading most vector and raster spatial data formats. Currently, GeoDjango only
-supports :ref:`GDAL's vector data <ref-gdal>` capabilities [#]_.
-:ref:`geosbuild` and :ref:`proj4` should be installed prior to building GDAL.
-
-First download the latest GDAL release version and untar the archive::
-
- $ wget http://download.osgeo.org/gdal/gdal-1.7.2.tar.gz
- $ tar xzf gdal-1.7.2.tar.gz
- $ cd gdal-1.7.2
-
-Configure, make and install::
-
- $ ./configure
- $ make # Go get some coffee, this takes a while.
- $ sudo make install
- $ cd ..
-
-.. note::
-
- Because GeoDjango has it's own Python interface, the preceding instructions
- do not build GDAL's own Python bindings. The bindings may be built by
- adding the ``--with-python`` flag when running ``configure``. See
- `GDAL/OGR In Python`__ for more information on GDAL's bindings.
-
-If you have any problems, please see the troubleshooting section below for
-suggestions and solutions.
-
-__ http://trac.osgeo.org/gdal/
-__ http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
-
-.. _gdaltrouble:
-
-Troubleshooting
-^^^^^^^^^^^^^^^
-
-Can't find GDAL Library
-~~~~~~~~~~~~~~~~~~~~~~~
-
-When GeoDjango can't find the GDAL library, the ``HAS_GDAL`` flag
-will be false::
-
- >>> from django.contrib.gis import gdal
- >>> gdal.HAS_GDAL
- False
-
-The solution is to properly configure your :ref:`libsettings` *or* set
-:ref:`gdallibrarypath` in your settings.
-
-.. _gdallibrarypath:
-
-``GDAL_LIBRARY_PATH``
-~~~~~~~~~~~~~~~~~~~~~
-
-If your GDAL library is in a non-standard location, or you don't want to
-modify the system's library path then the :setting:`GDAL_LIBRARY_PATH`
-setting may be added to your Django settings file with the full path to
-the GDAL library. For example::
-
- GDAL_LIBRARY_PATH = '/home/sue/local/lib/libgdal.so'
-
-.. _gdaldata:
-
-Can't find GDAL data files (``GDAL_DATA``)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-When installed from source, GDAL versions 1.5.1 and below have an autoconf bug
-that places data in the wrong location. [#]_ This can lead to error messages
-like this::
-
- ERROR 4: Unable to open EPSG support file gcs.csv.
- ...
- OGRException: OGR failure.
-
-The solution is to set the ``GDAL_DATA`` environment variable to the location of the
-GDAL data files before invoking Python (typically ``/usr/local/share``; use
-``gdal-config --datadir`` to find out). For example::
-
- $ export GDAL_DATA=`gdal-config --datadir`
- $ python manage.py shell
-
-If using Apache, you may need to add this environment variable to your configuration
-file::
-
- SetEnv GDAL_DATA /usr/local/share
-
-.. _spatialite:
-
-SpatiaLite
-----------
-.. versionadded:: 1.1
-
-.. note::
-
- Mac OS X users should follow the instructions in the :ref:`kyngchaos` section,
- as it is much easier than building from source.
-
-`SpatiaLite`__ adds spatial support to SQLite, turning it into a full-featured
-spatial database. Because SpatiaLite has special requirements, it typically
-requires SQLite and pysqlite2 (the Python SQLite DB-API adaptor) to be built from
-source. :ref:`geosbuild` and :ref:`proj4` should be installed prior to building
-SpatiaLite.
-
-After installation is complete, don't forget to read the post-installation
-docs on :ref:`create_spatialite_db`.
-
-__ http://www.gaia-gis.it/spatialite/index.html
-
-.. _sqlite:
-
-SQLite
-^^^^^^
-
-Typically, SQLite packages are not compiled to include the `R*Tree module`__ --
-thus it must be compiled from source. First download the latest amalgamation
-source archive from the `SQLite download page`__, and extract::
-
- $ wget http://sqlite.org/sqlite-amalgamation-3.6.23.1.tar.gz
- $ tar xzf sqlite-amalgamation-3.6.23.1.tar.gz
- $ cd sqlite-3.6.23.1
-
-Next, run the ``configure`` script -- however the ``CFLAGS`` environment variable
-needs to be customized so that SQLite knows to build the R*Tree module::
-
- $ CFLAGS="-DSQLITE_ENABLE_RTREE=1" ./configure
- $ make
- $ sudo make install
- $ cd ..
-
-.. note::
-
- If using Ubuntu, installing a newer SQLite from source can be very difficult
- because it links to the existing ``libsqlite3.so`` in ``/usr/lib`` which
- many other packages depend on. Unfortunately, the best solution at this time
- is to overwrite the existing library by adding ``--prefix=/usr`` to the
- ``configure`` command.
-
-__ http://www.sqlite.org/rtree.html
-__ http://www.sqlite.org/download.html
-
-.. _spatialitebuild :
-
-SpatiaLite Library (``libspatialite``) and Tools (``spatialite``)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-After SQLite has been built with the R*Tree module enabled, get the latest
-SpatiaLite library source and tools bundle from the `download page`__::
-
- $ wget http://www.gaia-gis.it/spatialite/libspatialite-amalgamation-2.3.1.tar.gz
- $ wget http://www.gaia-gis.it/spatialite/spatialite-tools-2.3.1.tar.gz
- $ tar xzf libspatialite-amalgamation-2.3.1.tar.gz
- $ tar xzf spatialite-tools-2.3.1.tar.gz
-
-Prior to attempting to build, please read the important notes below to see if
-customization of the ``configure`` command is necessary. If not, then run the
-``configure`` script, make, and install for the SpatiaLite library::
-
- $ cd libspatialite-amalgamation-2.3.1
- $ ./configure # May need to modified, see notes below.
- $ make
- $ sudo make install
- $ cd ..
-
-Finally, do the same for the SpatiaLite tools::
-
- $ cd spatialite-tools-2.3.1
- $ ./configure # May need to modified, see notes below.
- $ make
- $ sudo make install
- $ cd ..
-
-.. note::
-
- If you've installed GEOS and PROJ.4 from binary packages, you will have to specify
- their paths when running the ``configure`` scripts for *both* the library and the
- tools (the configure scripts look, by default, in ``/usr/local``). For example,
- on Debian/Ubuntu distributions that have GEOS and PROJ.4 packages, the command would be::
-
- $ ./configure --with-proj-include=/usr/include --with-proj-lib=/usr/lib --with-geos-include=/usr/include --with-geos-lib=/usr/lib
-
-.. note::
-
- For Mac OS X users building from source, the SpatiaLite library *and* tools
- need to have their ``target`` configured::
-
- $ ./configure --target=macosx
-
-__ http://www.gaia-gis.it/spatialite/sources.html
-
-.. _pysqlite2:
-
-pysqlite2
-^^^^^^^^^
-
-Because SpatiaLite must be loaded as an external extension, it requires the
-``enable_load_extension`` method, which is only available in versions 2.5+.
-Thus, download pysqlite2 2.6, and untar::
-
- $ wget http://pysqlite.googlecode.com/files/pysqlite-2.6.0.tar.gz
- $ tar xzf pysqlite-2.6.0.tar.gz
- $ cd pysqlite-2.6.0
-
-Next, use a text editor (e.g., ``emacs`` or ``vi``) to edit the ``setup.cfg`` file
-to look like the following::
-
- [build_ext]
- #define=
- include_dirs=/usr/local/include
- library_dirs=/usr/local/lib
- libraries=sqlite3
- #define=SQLITE_OMIT_LOAD_EXTENSION
-
-.. note::
-
- The important thing here is to make sure you comment out the the
- ``define=SQLITE_OMIT_LOAD_EXTENSION`` flag and that the ``include_dirs``
- and ``library_dirs`` settings are uncommented and set to the appropriate
- path if the SQLite header files and libraries are not in ``/usr/include``
- and ``/usr/lib``, respectively.
-
-After modifying ``setup.cfg`` appropriately, then run the ``setup.py`` script
-to build and install::
-
- $ sudo python setup.py install
-
-Post-Installation
-=================
-
-.. _spatialdb_template:
-
-Creating a Spatial Database Template for PostGIS
-------------------------------------------------
-
-Creating a spatial database with PostGIS is different than normal because
-additional SQL must be loaded to enable spatial functionality. Because of
-the steps in this process, it's better to create a database template that
-can be reused later.
-
-First, you need to be able to execute the commands as a privileged database
-user. For example, you can use the following to become the ``postgres`` user::
-
- $ sudo su - postgres
-
-.. note::
-
- The location *and* name of the PostGIS SQL files (e.g., from
- ``POSTGIS_SQL_PATH`` below) depends on the version of PostGIS.
- PostGIS versions 1.3 and below use ``<pg_sharedir>/contrib/lwpostgis.sql``;
- whereas version 1.4 uses ``<sharedir>/contrib/postgis.sql`` and
- version 1.5 uses ``<sharedir>/contrib/postgis-1.5/postgis.sql``.
-
- The example below assumes PostGIS 1.5, thus you may need to modify
- ``POSTGIS_SQL_PATH`` and the name of the SQL file for the specific
- version of PostGIS you are using.
-
-Once you're a database super user, then you may execute the following commands
-to create a PostGIS spatial database template. If running Ubuntu :ref:`ibex`
-or Debian :ref:`lenny`, please refer to their specific documentation for
-modifications to these commands::
-
- $ POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-1.5
- # Creating the template spatial database.
- $ createdb -E UTF8 template_postgis
- $ createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
- # Allows non-superusers the ability to create from this template
- $ psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
- # Loading the PostGIS SQL routines
- $ psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql
- $ psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
- # Enabling users to alter spatial tables.
- $ psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
- $ psql -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
- $ psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
-
-These commands may be placed in a shell script for later use; for convenience
-the following scripts are available:
-
-=============== ==========================================
-PostGIS Version Shell Script
-=============== ==========================================
-1.3 `create_template_postgis-1.3.sh`_
-1.4 `create_template_postgis-1.4.sh`_
-1.5 `create_template_postgis-1.5.sh`_
-=============== ==========================================
-
-Afterwards, you may create a spatial database by simply specifying
-``template_postgis`` as the template to use (via the ``-T`` option)::
-
- $ createdb -T template_postgis <db name>
-
-.. note::
-
- While the ``createdb`` command does not require database super-user privileges,
- it must be executed by a database user that has permissions to create databases.
- You can create such a user with the following command::
-
- $ createuser --createdb <user>
-
-.. _create_template_postgis-1.3.sh: http://geodjango.org/docs/create_template_postgis-1.3.sh
-.. _create_template_postgis-1.4.sh: http://geodjango.org/docs/create_template_postgis-1.4.sh
-.. _create_template_postgis-1.5.sh: http://geodjango.org/docs/create_template_postgis-1.5.sh
-.. _create_template_postgis-debian.sh: http://geodjango.org/docs/create_template_postgis-debian.sh
-
-.. _create_spatialite_db:
-
-Creating a Spatial Database for SpatiaLite
--------------------------------------------
-
-After the SpatiaLite library and tools have been installed, it is now possible
-to create spatial database for use with GeoDjango. In order to do this, download
-the spatial database initialization SQL from the `SpatiaLite Resources`__ page::
-
- $ wget http://www.gaia-gis.it/spatialite/init_spatialite-2.3.sql.gz
- $ gunzip init_spatialite-2.3.sql.gz
-
-Now, the ``spatialite`` command can be used to initialize a spatial database::
-
- $ spatialite geodjango.db < init_spatialite-2.3.sql
-
-.. note::
-
- The parameter ``geodjango.db`` is the *filename* of the SQLite database
- you want to use. Use the same in the :setting:`DATABASE_NAME`
- inside your ``settings.py``.
-
-
-__ http://www.gaia-gis.it/spatialite/resources.html
-
-
-Add ``django.contrib.gis`` to ``INSTALLED_APPS``
-------------------------------------------------
-
-Like other Django contrib applications, you will *only* need to add
-:mod:`django.contrib.gis` to :setting:`INSTALLED_APPS` in your settings.
-This is the so that ``gis`` templates can be located -- if not done, then
-features such as the geographic admin or KML sitemaps will not function properly.
-
-.. _addgoogleprojection:
-
-Add Google Projection to ``spatial_ref_sys`` table
---------------------------------------------------
-
-.. versionchanged:: 1.2
-
-.. note::
-
- If running PostGIS 1.4 and above, the entry is already included in the
- default ``spatial_ref_sys`` table. You can skip this step.
-
-In order to conduct database transformations to the so-called "Google"
-projection (a spherical mercator projection used by Google Maps),
-an entry must be added to your spatial database's ``spatial_ref_sys`` table.
-Invoke the Django shell from your project and execute the
-``add_srs_entry`` function::
-
- $ python manage shell
- >>> from django.contrib.gis.utils import add_srs_entry
- >>> add_srs_entry(900913)
-
-.. note::
-
- In Django 1.1 the name of this function is ``add_postgis_srs``.
-
-This adds an entry for the 900913 SRID to the ``spatial_ref_sys`` (or equivalent)
-table, making it possible for the spatial database to transform coordinates in
-this projection. You only need to execute this command *once* per spatial database.
-
-Troubleshooting
-===============
-
-If you can't find the solution to your problem here then participate in the
-community! You can:
-
-* Join the ``#geodjango`` IRC channel on FreeNode (may be accessed on the
- Web via `Mibbit`__). Please be patient and polite -- while you may not
- get an immediate response, someone will attempt to answer your question
- as soon as they see it.
-* Ask your question on the `GeoDjango`__ mailing list.
-* File a ticket on the `Django trac`__ if you think there's a bug. Make
- sure to provide a complete description of the problem, versions used,
- and specify the component as "GIS".
-
-__ http://www.mibbit.com/?server=irc.freenode.net&channel=%23geodjango
-__ http://groups.google.com/group/geodjango
-__ http://code.djangoproject.com/simpleticket
-
-.. _libsettings:
-
-Library Environment Settings
-----------------------------
-
-By far, the most common problem when installing GeoDjango is that the
-external shared libraries (e.g., for GEOS and GDAL) cannot be located. [#]_
-Typically, the cause of this problem is that the operating system isn't aware
-of the directory where the libraries built from source were installed.
-
-In general, the library path may be set on a per-user basis by setting
-an environment variable, or by configuring the library path for the entire
-system.
-
-``LD_LIBRARY_PATH`` environment variable
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-A user may set this environment variable to customize the library paths
-they want to use. The typical library directory for software
-built from source is ``/usr/local/lib``. Thus, ``/usr/local/lib`` needs
-to be included in the ``LD_LIBRARY_PATH`` variable. For example, the user
-could place the following in their bash profile::
-
- export LD_LIBRARY_PATH=/usr/local/lib
-
-Setting System Library Path
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-On GNU/Linux systems, there is typically a file in ``/etc/ld.so.conf``, which may include
-additional paths from files in another directory, such as ``/etc/ld.so.conf.d``.
-As the root user, add the custom library path (like ``/usr/local/lib``) on a
-new line in ``ld.so.conf``. This is *one* example of how to do so::
-
- $ sudo echo /usr/local/lib >> /etc/ld.so.conf
- $ sudo ldconfig
-
-For OpenSolaris users, the system library path may be modified using the
-``crle`` utility. Run ``crle`` with no options to see the current configuration
-and use ``crle -l`` to set with the new library path. Be *very* careful when
-modifying the system library path::
-
- # crle -l $OLD_PATH:/usr/local/lib
-
-.. _binutils:
-
-Install ``binutils``
-^^^^^^^^^^^^^^^^^^^^
-
-GeoDjango uses the ``find_library`` function (from the ``ctypes.util`` Python
-module) to discover libraries. The ``find_library`` routine uses a program
-called ``objdump`` (part of the ``binutils`` package) to verify a shared
-library on GNU/Linux systems. Thus, if ``binutils`` is not installed on your
-Linux system then Python's ctypes may not be able to find your library even if
-your library path is set correctly and geospatial libraries were built perfectly.
-
-The ``binutils`` package may be installed on Debian and Ubuntu systems using the
-following command::
-
- $ sudo apt-get install binutils
-
-Similarly, on Red Hat and CentOS systems::
-
- $ sudo yum install binutils
-
-Platform Specific Instructions
-==============================
-
-.. _macosx:
-
-Mac OS X
---------
-
-Because of the variety of packaging systems available for OS X, users have
-several different options for installing GeoDjango. These options are:
-
-* :ref:`kyngchaos`
-* :ref:`fink`
-* :ref:`macports`
-* :ref:`build_from_source`
-
-.. note::
-
- Currently, the easiest and recommended approach for installing GeoDjango
- on OS X is to use the KyngChaos packages.
-
-This section also includes instructions for installing an upgraded version
-of :ref:`macosx_python` from packages provided by the Python Software
-Foundation, however, this is not required.
-
-.. _macosx_python:
-
-Python
-^^^^^^
-
-Although OS X comes with Python installed, users can use framework
-installers (`2.5`__ and `2.6`__ are available) provided by
-the Python Software Foundation. An advantage to using the installer is
-that OS X's Python will remain "pristine" for internal operating system
-use.
-
-__ http://python.org/ftp/python/2.5.4/python-2.5.4-macosx.dmg
-__ http://python.org/ftp/python/2.6.2/python-2.6.2-macosx2009-04-16.dmg
-
-.. note::
-
- You will need to modify the ``PATH`` environment variable in your
- ``.profile`` file so that the new version of Python is used when
- ``python`` is entered at the command-line::
-
- export PATH=/Library/Frameworks/Python.framework/Versions/Current/bin:$PATH
-
-.. _kyngchaos:
-
-KyngChaos Packages
-^^^^^^^^^^^^^^^^^^
-
-William Kyngesburye provides a number of `geospatial library binary packages`__
-that make it simple to get GeoDjango installed on OS X without compiling
-them from source. However, the `Apple Developer Tools`_ are still necessary
-for compiling the Python database adapters :ref:`psycopg2_kyngchaos` (for PostGIS)
-and :ref:`pysqlite2_kyngchaos` (for SpatiaLite).
-
-.. note::
-
- SpatiaLite users should consult the :ref:`spatialite_kyngchaos` section
- after installing the packages for additional instructions.
-
-Download the framework packages for:
-
-* UnixImageIO
-* PROJ
-* GEOS
-* SQLite3 (includes the SpatiaLite library)
-* GDAL
-
-Install the packages in the order they are listed above, as the GDAL and SQLite
-packages require the packages listed before them. Afterwards, you can also
-install the KyngChaos binary packages for `PostgreSQL and PostGIS`__.
-
-After installing the binary packages, you'll want to add the following to
-your ``.profile`` to be able to run the package programs from the command-line::
-
- export PATH=/Library/Frameworks/UnixImageIO.framework/Programs:$PATH
- export PATH=/Library/Frameworks/PROJ.framework/Programs:$PATH
- export PATH=/Library/Frameworks/GEOS.framework/Programs:$PATH
- export PATH=/Library/Frameworks/SQLite3.framework/Programs:$PATH
- export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH
- export PATH=/usr/local/pgsql/bin:$PATH
-
-__ http://www.kyngchaos.com/software/frameworks
-__ http://www.kyngchaos.com/software/postgres
-
-.. note::
-
- Use of these binaries requires Django 1.0.3 and above. If you are
- using a previous version of Django (like 1.0.2), then you will have
- to add the the following in your settings::
-
- GEOS_LIBRARY_PATH='/Library/Frameworks/GEOS.framework/GEOS'
- GDAL_LIBRARY_PATH='/Library/Frameworks/GDAL.framework/GDAL'
-
-.. _psycopg2_kyngchaos:
-
-psycopg2
-~~~~~~~~
-
-After you've installed the KyngChaos binaries and modified your ``PATH``, as
-described above, ``psycopg2`` may be installed using the following command::
-
- $ sudo python easy_install psycopg2
-
-.. note::
-
- To use ``easy_install`` you'll need to install Python's `setuptools`_.
-
-.. _setuptools: http://pypi.python.org/pypi/setuptools
-
-.. _pysqlite2_kyngchaos:
-
-pysqlite2
-~~~~~~~~~
-
-Follow the :ref:`pysqlite2` source install instructions, however,
-when editing the ``setup.cfg`` use the following instead::
-
- [build_ext]
- #define=
- include_dirs=/Library/Frameworks/SQLite3.framework/unix/include
- library_dirs=/Library/Frameworks/SQLite3.framework/unix/lib
- libraries=sqlite3
- #define=SQLITE_OMIT_LOAD_EXTENSION
-
-.. _spatialite_kyngchaos:
-
-SpatiaLite
-~~~~~~~~~~
-
-When :ref:`create_spatialite_db`, the ``spatialite`` program is required.
-However, instead of attempting to compile the SpatiaLite tools from source,
-download the `SpatiaLite Binaries`__ for OS X, and install ``spatialite`` in a
-location available in your ``PATH``. For example::
-
- $ curl -O http://www.gaia-gis.it/spatialite/spatialite-tools-osx-x86-2.3.1.tar.gz
- $ tar xzf spatialite-tools-osx-x86-2.3.1.tar.gz
- $ cd spatialite-tools-osx-x86-2.3.1/bin
- $ sudo cp spatialite /Library/Frameworks/SQLite3.framework/Programs
-
-Finally, for GeoDjango to be able to find the KyngChaos SpatiaLite library,
-add the following to your ``settings.py``::
-
- SPATIALITE_LIBRARY_PATH='/Library/Frameworks/SQLite3.framework/SQLite3'
-
-__ http://www.gaia-gis.it/spatialite/binaries.html
-
-.. _fink:
-
-Fink
-^^^^
-
-`Kurt Schwehr`__ has been gracious enough to create GeoDjango packages for users
-of the `Fink`__ package system. The following packages are available, depending
-on which version of Python you want to use:
-
-* ``django-gis-py26``
-* ``django-gis-py25``
-* ``django-gis-py24``
-
-__ http://schwehr.org/blog/
-__ http://www.finkproject.org/
-
-.. _macports:
-
-MacPorts
-^^^^^^^^
-
-`MacPorts`__ may be used to install GeoDjango prerequisites on Macintosh
-computers running OS X. Because MacPorts still builds the software from source,
-the `Apple Developer Tools`_ are required.
-
-Summary::
-
- $ sudo port install postgresql83-server
- $ sudo port install geos
- $ sudo port install proj
- $ sudo port install postgis
- $ sudo port install gdal
- $ sudo port install libgeoip
-
-.. note::
-
- You will also have to modify the ``PATH`` in your ``.profile`` so
- that the MacPorts programs are accessible from the command-line::
-
- export PATH=/opt/local/bin:/opt/local/lib/postgresql83/bin
-
- In addition, add the ``FALLBACK_DYLD_LIBRARY_PATH`` setting so that
- the libraries can be found by Python::
-
- export FALLBACK_DYLD_LIBRARY_PATH=/opt/local/lib:/opt/local/lib/postgresql83
-
-__ http://www.macports.org/
-
-.. _ubuntudebian:
-
-Ubuntu & Debian GNU/Linux
--------------------------
-
-.. _ubuntu:
-
-Ubuntu
-^^^^^^
-
-.. _heron:
-
-8.04 and lower
-~~~~~~~~~~~~~~
-
-The 8.04 (and lower) versions of Ubuntu use GEOS v2.2.3 in their binary packages,
-which is incompatible with GeoDjango. Thus, do *not* use the binary packages
-for GEOS or PostGIS and build some prerequisites from source, per the instructions
-in this document; however, it is okay to use the PostgreSQL binary packages.
-
-For more details, please see the Debian instructions for :ref:`etch` below.
-
-.. _ibex:
-
-8.10
-~~~~
-
-Use the synaptic package manager to install the following packages::
-
- $ sudo apt-get install binutils libgdal1-1.5.0 postgresql-8.3-postgis postgresql-server-dev-8.3 python-psycopg2 python-setuptools
-
-Afterwards, you may install Django with Python's ``easy_install`` script (the
-Ubuntu package ``python-django`` uses an older version missing several
-important bug fixes for GeoDjango)::
-
- $ sudo easy_install Django
-
-That's it! For the curious, the required binary prerequisites packages are:
-
-* ``binutils``: for ctypes to find libraries
-* ``postgresql-8.3``
-* ``postgresql-server-dev-8.3``: for ``pg_config``
-* ``postgresql-8.3-postgis``: for PostGIS 1.3.3
-* ``libgeos-3.0.0``, and ``libgeos-c1``: for GEOS 3.0.0
-* ``libgdal1-1.5.0``: for GDAL 1.5.0 library
-* ``proj``: for PROJ 4.6.0 -- but no datum shifting files, see note below
-* ``python-psycopg2``
-* ``python-setuptools``: for ``easy_install``
-
-Optional packages to consider:
-
-* ``libgeoip1``: for :ref:`GeoIP <ref-geoip>` support
-* ``gdal-bin``: for GDAL command line programs like ``ogr2ogr``
-* ``python-gdal`` for GDAL's own Python bindings -- includes interfaces for raster manipulation
-
-.. note::
-
- The Ubuntu ``proj`` package does not come with the datum shifting files
- installed, which will cause problems with the geographic admin because
- the ``null`` datum grid is not available for transforming geometries to the
- spherical mercator projection. A solution is to download the
- datum-shifting files, create the grid file, and install it yourself::
-
- $ wget http://download.osgeo.org/proj/proj-datumgrid-1.4.tar.gz
- $ mkdir nad
- $ cd nad
- $ tar xzf ../proj-datumgrid-1.4.tar.gz
- $ nad2bin null < null.lla
- $ sudo cp null /usr/share/proj
-
- Otherwise, the Ubuntu ``proj`` package is fine for general use as long as you
- do not plan on doing any database transformation of geometries to the
- Google projection (900913).
-
-.. note::
-
- The PostGIS SQL files are not placed the PostgreSQL share directory in the
- Ubuntu packages. Use the `create_template_postgis-debian.sh`_ script
- instead when :ref:`spatialdb_template`.
-
-.. _debian:
-
-Debian
-------
-
-.. _etch:
-
-4.0 (Etch)
-^^^^^^^^^^
-The situation here is the same as that of Ubuntu :ref:`heron` -- in other words,
-some packages must be built from source to work properly with GeoDjango.
-
-Binary Packages
-~~~~~~~~~~~~~~~
-The following command will install acceptable binary packages, as well as
-the development tools necessary to build the rest of the requirements::
-
- $ sudo apt-get install binutils bzip2 gcc g++ flex make postgresql-8.1 postgresql-server-dev-8.1 python-ctypes python-psycopg2 python-setuptools
-
-Required package information:
-
-* ``binutils``: for ctypes to find libraries
-* ``bzip2``: for decompressing the source packages
-* ``gcc``, ``g++``, ``make``: GNU developer tools used to compile the libraries
-* ``flex``: required to build PostGIS
-* ``postgresql-8.1``
-* ``postgresql-server-dev-8.1``: for ``pg_config``
-* ``python-ctypes``: Python 2.4 needs to have ctypes installed separately
-* ``python-psycopg2``
-* ``python-setuptools``: for ``easy_install``
-
-Optional packages:
-
-* ``libgeoip``: for :ref:`GeoIP <ref-geoip>` support
-
-Source Packages
-~~~~~~~~~~~~~~~
-You will still have to install :ref:`geosbuild`, :ref:`proj4`,
-:ref:`postgis`, and :ref:`gdalbuild` from source. Please follow the
-directions carefully.
-
-.. _lenny:
-
-5.0 (Lenny)
-^^^^^^^^^^^
-This version is comparable to Ubuntu :ref:`ibex`, so the command
-is very similar::
-
- $ sudo apt-get install binutils libgdal1-1.5.0 postgresql-8.3 postgresql-8.3-postgis postgresql-server-dev-8.3 python-psycopg2 python-setuptools
-
-This assumes that you are using PostgreSQL version 8.3. Else, replace ``8.3``
-in the above command with the appropriate PostgreSQL version.
-
-.. note::
-
- Please read the note in the Ubuntu :ref:`ibex` install documentation
- about the ``proj`` package -- it also applies here because the package does
- not include the datum shifting files.
-
-.. _post_install:
-
-Post-installation Notes
-~~~~~~~~~~~~~~~~~~~~~~~
-
-If the PostgreSQL database cluster was not initiated after installing, then it
-can be created (and started) with the following command::
-
- $ sudo pg_createcluster --start 8.3 main
-
-Afterwards, the ``/etc/init.d/postgresql-8.3`` script should be used to manage
-the starting and stopping of PostgreSQL.
-
-In addition, the SQL files for PostGIS are placed in a different location on
-Debian 5.0 . Thus when :ref:`spatialdb_template` either:
-
-* Create a symbolic link to these files::
-
- $ sudo ln -s /usr/share/postgresql-8.3-postgis/{lwpostgis,spatial_ref_sys}.sql /usr/share/postgresql/8.3
-
- If not running PostgreSQL 8.3, then replace ``8.3`` in the command above with the correct version.
-
-* Or use the `create_template_postgis-debian.sh`_ to create the spatial database.
-
-.. _windows:
-
-Windows XP
-----------
-
-Python
-^^^^^^
-
-First, download the `Python 2.6 installer`__ from the Python Web site. Next,
-execute the installer and use defaults, e.g., keep 'Install for all users'
-checked and the installation path set as ``C:\Python26``.
-
-.. note::
-
- You may already have a version of Python installed in ``C:\python`` as ESRI
- products sometimes install a copy there. *You should still install a
- fresh version of Python 2.6.*
-
-__ http://python.org/ftp/python/2.6.2/python-2.6.2.msi
-
-PostgreSQL
-^^^^^^^^^^
-
-First, select a mirror and download the latest `PostgreSQL 8.3 installer`__ from
-the EnterpriseDB Web site.
-
-.. note::
-
- PostgreSQL 8.3 is required because PostGIS is not available yet for 8.4.
-
-After downloading, simply click on the installer, follow the
-on-screen directions, and keep the default options (e.g., keep the installation
-path as ``C:\Program Files\PostgreSQL\8.3``).
-
-.. note::
-
- This PostgreSQL installation process will create both a new windows user to be the
- 'postgres service account' and a special 'postgres superuser' to own the database
- cluster. You will be prompted to set a password for both users (make sure to write
- them down!). To see basic details on the 'service user' account right click on
- 'My Computer' and select 'Manage' or go to: Control Panel -> Administrative Tools ->
- Computer Management -> System Tools -> Local Users and Groups.
-
-If installed successfully, the PostgreSQL server will run in the background each time
-the system as started as a Windows service. When finished, the installer should launch
-the Application Stack Builder (ASB) -- use this to install PostGIS, see instructions
-below for more details. A 'PostgreSQL 8.3' start menu group should be created that
-contains shortcuts for the ASB and 'Command Prompt', which launches a terminal window
-in the PostgreSQL directory.
-
-__ http://www.enterprisedb.com/products/pgdownload.do#windows
-
-PostGIS
-^^^^^^^
-
-From the Application Stack Builder (Programs -> PostgreSQL 8.3), select
-'PostgreSQL Database Server 8.3 on port 5432' from the drop down menu. Next,
-select 'PostGIS 1.3.6 for PostgreSQL 8.3' from the 'Spatial Extensions' tree
-in the list. Select only the default options during install (do not uncheck
-the option to create a default PostGIS database).
-
-.. note::
-
- You will be prompted to enter your 'postgres superuser' password in the
- 'Database Connection Information' dialog.
-
-psycopg2
-^^^^^^^^
-
-The ``psycopg2`` Python module provides the interface between Python and the
-PostgreSQL database. Download the `Windows installer`__ (v2.0.10) and run
-using the default settings. [#]_
-
-__ http://www.stickpeople.com/projects/python/win-psycopg/psycopg2-2.0.10.win32-py2.6-pg8.3.7-release.exe
-
-GeoDjango Installer
-^^^^^^^^^^^^^^^^^^^
-
-Download the `GeoDjango Installer`__; this was created [#]_ to simplify the rest
-of the process for installing GeoDjango on Windows platforms. The installer
-automatically installs Django 1.1, GDAL 1.6.0, PROJ 4.6.1 (including datum grid
-files), and configures the necessary environment variables.
-
-Once the installer has completed, log out and log back in so that the
-modifications to the system environment variables take effect, and you
-should be good to go.
-
-.. note::
-
- The installer modifies the system ``Path`` environment variable to
- include ``C:\Program Files\PostgreSQL\8.3\bin`` and
- ``C:\Program Files\GeoDjango\bin``. This is required so that Python
- may find the GEOS DLL provided by PostGIS and the GDAL DLL provided
- by the installer. The installer also sets the ``GDAL_DATA`` and
- ``PROJ_LIB`` environment variables.
-
-__ http://geodjango.org/windows/GeoDjango_Installer.exe
-
-.. rubric:: Footnotes
-.. [#] The datum shifting files are needed for converting data to and from certain projections.
- For example, the PROJ.4 string for the `Google projection (900913) <http://spatialreference.org/ref/epsg/900913/proj4>`_
- requires the ``null`` grid file only included in the extra datum shifting files.
- It is easier to install the shifting files now, then to have debug a problem caused by their absence later.
-.. [#] Specifically, GeoDjango provides support for the `OGR <http://gdal.org/ogr>`_ library, a component of GDAL.
-.. [#] See `GDAL ticket #2382 <http://trac.osgeo.org/gdal/ticket/2382>`_.
-.. [#] GeoDjango uses the `find_library <http://docs.python.org/library/ctypes.html#finding-shared-libraries>`_
- routine from ``ctypes.util`` to locate shared libraries.
-.. [#] The ``psycopg2`` Windows installers are packaged and maintained by
- `Jason Erickson <http://www.stickpeople.com/projects/python/win-psycopg/>`_.
-.. [#] The source code for the installer is available in the `nsis_installer <http://geodjango.org/hg/nsis_installer/>`_
- GeoDjango mercurial repository.
diff --git a/parts/django/docs/ref/contrib/gis/layermapping.txt b/parts/django/docs/ref/contrib/gis/layermapping.txt
deleted file mode 100644
index 0b09e17..0000000
--- a/parts/django/docs/ref/contrib/gis/layermapping.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-.. _ref-layermapping:
-
-====================================
-``LayerMapping`` data import utility
-====================================
-
-.. module:: django.contrib.gis.utils.layermapping
- :synopsis: Spatial data import utility for GeoDjango models.
-
-.. currentmodule:: django.contrib.gis.utils
-
-The :class:`LayerMapping` class provides a way to map the contents of
-vector spatial data files (e.g. shapefiles) intoto GeoDjango models.
-
-This utility grew out of the author's personal needs to eliminate
-the code repetition that went into pulling geometries and fields out of
-a vector layer, converting to another coordinate system (e.g. WGS84), and
-then inserting into a GeoDjango model.
-
-.. note::
-
- Use of :class:`LayerMapping` requires GDAL.
-
-.. warning ::
-
- GIS data sources, like shapefiles, may be very large. If you find
- that :class:`LayerMapping` is using too much memory, set
- :setting:`DEBUG` to ``False`` in your settings. When :setting:`DEBUG`
- is set to ``True``, Django :ref:`automatically logs <faq-see-raw-sql-queries>`
- *every* SQL query -- thus, when SQL statements contain geometries, it is
- easy to consume more memory than is typical.
-
-Example
-=======
-
-1. You need a GDAL-supported data source, like a shapefile (here we're using
- a simple polygon shapefile, ``test_poly.shp``, with three features)::
-
- >>> from django.contrib.gis.gdal import DataSource
- >>> ds = DataSource('test_poly.shp')
- >>> layer = ds[0]
- >>> print layer.fields # Exploring the fields in the layer, we only want the 'str' field.
- ['float', 'int', 'str']
- >>> print len(layer) # getting the number of features in the layer (should be 3)
- 3
- >>> print layer.geom_type # Should be 'Polygon'
- Polygon
- >>> print layer.srs # WGS84 in WKT
- GEOGCS["GCS_WGS_1984",
- DATUM["WGS_1984",
- SPHEROID["WGS_1984",6378137,298.257223563]],
- PRIMEM["Greenwich",0],
- UNIT["Degree",0.017453292519943295]]
-
-2. Now we define our corresponding Django model (make sure to use ``syncdb``)::
-
- from django.contrib.gis.db import models
-
- class TestGeo(models.Model):
- name = models.CharField(max_length=25) # corresponds to the 'str' field
- poly = models.PolygonField(srid=4269) # we want our model in a different SRID
- objects = models.GeoManager()
- def __unicode__(self):
- return 'Name: %s' % self.name
-
-3. Use :class:`LayerMapping` to extract all the features and place them in the
- database::
-
- >>> from django.contrib.gis.utils import LayerMapping
- >>> from geoapp.models import TestGeo
- >>> mapping = {'name' : 'str', # The 'name' model field maps to the 'str' layer field.
- 'poly' : 'POLYGON', # For geometry fields use OGC name.
- } # The mapping is a dictionary
- >>> lm = LayerMapping(TestGeo, 'test_poly.shp', mapping)
- >>> lm.save(verbose=True) # Save the layermap, imports the data.
- Saved: Name: 1
- Saved: Name: 2
- Saved: Name: 3
-
-Here, :class:`LayerMapping` just transformed the three geometries from the
-shapefile in their original spatial reference system (WGS84) to the spatial
-reference system of the GeoDjango model (NAD83). If no spatial reference
-system is defined for the layer, use the ``source_srs`` keyword with a
-:class:`~django.contrib.gis.gdal.SpatialReference` object to specify one.
-
-``LayerMapping`` API
-====================
-
-.. class:: LayerMapping(model, data_source, mapping[, layer=0, source_srs=None, encoding=None, transaction_mode='commit_on_success', transform=True, unique=True, using='default'])
-
-The following are the arguments and keywords that may be used during
-instantiation of ``LayerMapping`` objects.
-
-================= =========================================================
-Argument Description
-================= =========================================================
-``model`` The geographic model, *not* an instance.
-
-``data_source`` The path to the OGR-supported data source file
- (e.g., a shapefile). Also accepts
- :class:`django.contrib.gis.gdal.DataSource` instances.
-
-``mapping`` A dictionary: keys are strings corresponding to
- the model field, and values correspond to
- string field names for the OGR feature, or if the
- model field is a geographic then it should
- correspond to the OGR geometry type,
- e.g., ``'POINT'``, ``'LINESTRING'``, ``'POLYGON'``.
-================= =========================================================
-
-===================== =====================================================
-Keyword Arguments
-===================== =====================================================
-``layer`` The index of the layer to use from the Data Source
- (defaults to 0)
-
-``source_srs`` Use this to specify the source SRS manually (for
- example, some shapefiles don't come with a '.prj'
- file). An integer SRID, WKT or PROJ.4 strings, and
- :class:`django.contrib.gis.gdal.SpatialReference`
- objects are accepted.
-
-``encoding`` Specifies the character set encoding of the strings
- in the OGR data source. For example, ``'latin-1'``,
- ``'utf-8'``, and ``'cp437'`` are all valid encoding
- parameters.
-
-``transaction_mode`` May be ``'commit_on_success'`` (default) or
- ``'autocommit'``.
-
-``transform`` Setting this to False will disable coordinate
- transformations. In other words, geometries will
- be inserted into the database unmodified from their
- original state in the data source.
-
-``unique`` Setting this to the name, or a tuple of names,
- from the given model will create models unique
- only to the given name(s). Geometries will from
- each feature will be added into the collection
- associated with the unique model. Forces
- the transaction mode to be ``'autocommit'``.
-
-``using`` New in version 1.2. Sets the database to use when
- importing spatial data. Default is ``'default'``
-===================== =====================================================
-
-``save()`` Keyword Arguments
-----------------------------
-
-.. method:: LayerMapping.save([verbose=False, fid_range=False, step=False, progress=False, silent=False, stream=sys.stdout, strict=False])
-
-The ``save()`` method also accepts keywords. These keywords are
-used for controlling output logging, error handling, and for importing
-specific feature ranges.
-
-=========================== =================================================
-Save Keyword Arguments Description
-=========================== =================================================
-``fid_range`` May be set with a slice or tuple of
- (begin, end) feature ID's to map from
- the data source. In other words, this
- keyword enables the user to selectively
- import a subset range of features in the
- geographic data source.
-
-``progress`` When this keyword is set, status information
- will be printed giving the number of features
- processed and successfully saved. By default,
- progress information will be printed every 1000
- features processed, however, this default may
- be overridden by setting this keyword with an
- integer for the desired interval.
-
-``silent`` By default, non-fatal error notifications are
- printed to ``sys.stdout``, but this keyword may
- be set to disable these notifications.
-
-``step`` If set with an integer, transactions will
- occur at every step interval. For example, if
- ``step=1000``, a commit would occur after the
- 1,000th feature, the 2,000th feature etc.
-
-
-``stream`` Status information will be written to this file
- handle. Defaults to using ``sys.stdout``, but
- any object with a ``write`` method is supported.
-
-``strict`` Execution of the model mapping will cease upon
- the first error encountered. The default value
- (``False``)
- behavior is to attempt to continue.
-
-``verbose`` If set, information will be printed
- subsequent to each model save
- executed on the database.
-=========================== =================================================
-
-Troubleshooting
-===============
-
-Running out of memory
----------------------
-
-As noted in the warning at the top of this section, Django stores all SQL
-queries when ``DEBUG=True``. Set ``DEBUG=False`` in your settings, and this
-should stop excessive memory use when running ``LayerMapping`` scripts.
-
-MySQL: ``max_allowed_packet`` error
------------------------------------
-
-If you encounter the following error when using ``LayerMapping`` and MySQL::
-
- OperationalError: (1153, "Got a packet bigger than 'max_allowed_packet' bytes")
-
-Then the solution is to increase the value of the ``max_allowed_packet``
-setting in your MySQL configuration. For example, the default value may
-be something low like one megabyte -- the setting may be modified in MySQL's
-configuration file (``my.cnf``) in the ``[mysqld]`` section::
-
- max_allowed_packet = 10M
diff --git a/parts/django/docs/ref/contrib/gis/measure.txt b/parts/django/docs/ref/contrib/gis/measure.txt
deleted file mode 100644
index 6971788..0000000
--- a/parts/django/docs/ref/contrib/gis/measure.txt
+++ /dev/null
@@ -1,180 +0,0 @@
-.. _ref-measure:
-
-===================
-Measurement Objects
-===================
-
-.. module:: django.contrib.gis.measure
- :synopsis: GeoDjango's distance and area measurment objects.
-
-The :mod:`django.contrib.gis.measure` module contains objects that allow
-for convenient representation of distance and area units of measure. [#]_
-Specifically, it implements two objects, :class:`Distance` and
-:class:`Area` -- both of which may be accessed via the
-:class:`D` and :class:`A` convenience aliases, respectively.
-
-Example
-=======
-
-:class:`Distance` objects may be instantiated using a keyword argument indicating the
-context of the units. In the example below, two different distance objects are
-instantiated in units of kilometers (``km``) and miles (``mi``)::
-
- >>> from django.contrib.gis.measure import Distance, D
- >>> d1 = Distance(km=5)
- >>> print d1
- 5.0 km
- >>> d2 = D(mi=5) # `D` is an alias for `Distance`
- >>> print d2
- 5.0 mi
-
-Conversions are easy, just access the preferred unit attribute to get a
-converted distance quantity::
-
- >>> print d1.mi # Converting 5 kilometers to miles
- 3.10685596119
- >>> print d2.km # Converting 5 miles to kilometers
- 8.04672
-
-Moreover, arithmetic operations may be performed between the distance
-objects::
-
- >>> print d1 + d2 # Adding 5 miles to 5 kilometers
- 13.04672 km
- >>> print d2 - d1 # Subtracting 5 kilometers from 5 miles
- 1.89314403881 mi
-
-Two :class:`Distance` objects multiplied together will yield an :class:`Area`
-object, which uses squared units of measure::
-
- >>> a = d1 * d2 # Returns an Area object.
- >>> print a
- 40.2336 sq_km
-
-To determine what the attribute abbreviation of a unit is, the ``unit_attname``
-class method may be used::
-
- >>> print Distance.unit_attname('US Survey Foot')
- survey_ft
- >>> print Distance.unit_attname('centimeter')
- cm
-
-.. _supported_units:
-
-Supported units
-===============
-
-================================= ========================================
-Unit Attribute Full name or alias(es)
-================================= ========================================
-``km`` Kilometre, Kilometer
-``mi`` Mile
-``m`` Meter, Metre
-``yd`` Yard
-``ft`` Foot, Foot (International)
-``survey_ft`` U.S. Foot, US survey foot
-``inch`` Inches
-``cm`` Centimeter
-``mm`` Millimetre, Millimeter
-``um`` Micrometer, Micrometre
-``british_ft`` British foot (Sears 1922)
-``british_yd`` British yard (Sears 1922)
-``british_chain_sears`` British chain (Sears 1922)
-``indian_yd`` Indian yard, Yard (Indian)
-``sears_yd`` Yard (Sears)
-``clarke_ft`` Clarke's Foot
-``chain`` Chain
-``chain_benoit`` Chain (Benoit)
-``chain_sears`` Chain (Sears)
-``british_chain_benoit`` British chain (Benoit 1895 B)
-``british_chain_sears_truncated`` British chain (Sears 1922 truncated)
-``gold_coast_ft`` Gold Coast foot
-``link`` Link
-``link_benoit`` Link (Benoit)
-``link_sears`` Link (Sears)
-``clarke_link`` Clarke's link
-``fathom`` Fathom
-``rod`` Rod
-``nm`` Nautical Mile
-``nm_uk`` Nautical Mile (UK)
-``german_m`` German legal metre
-================================= ========================================
-
-.. note::
-
- :class:`Area` attributes are the same as :class:`Distance` attributes,
- except they are prefixed with ``sq_`` (area units are square in nature).
- For example, ``Area(sq_m=2)`` creates an :class:`Area` object
- representing two square meters.
-
-Measurement API
-===============
-
-``Distance``
-------------
-
-.. class:: Distance(**kwargs)
-
- To initialize a distance object, pass in a keyword corresponding to
- the desired :ref:`unit attribute name <supported_units>` set with
- desired value. For example, the following creates a distance
- object representing 5 miles::
-
- >>> dist = Distance(mi=5)
-
- .. method:: __getattr__(unit_att)
-
- Returns the distance value in units corresponding to the given unit
- attribute. For example::
-
- >>> print dist.km
- 8.04672
-
- .. classmethod:: unit_attname(unit_name)
-
- Returns the distance unit attribute name for the given full unit name.
- For example::
-
- >>> Distance.unit_attname('Mile')
- 'mi'
-
-.. class:: D
-
- Alias for :class:`Distance` class.
-
-``Area``
---------
-
-.. class:: Area(**kwargs)
-
- To initialize a distance object, pass in a keyword corresponding to
- the desired :ref:`unit attribute name <supported_units>` set with
- desired value. For example, the following creates a distance
- object representing 5 square miles::
-
- >>> a = Area(sq_mi=5)
-
- .. method:: __getattr__(unit_att)
-
- Returns the area value in units corresponding to the given unit
- attribute. For example::
-
- >>> print a.sq_km
- 12.949940551680001
-
- .. classmethod:: unit_attname(unit_name)
-
- Returns the area unit attribute name for the given full unit name.
- For example::
-
- >>> Area.unit_attname('Kilometer')
- 'sq_km'
-
-.. class:: A
-
- Alias for :class:`Area` class.
-
-.. rubric:: Footnotes
-.. [#] `Robert Coup <http://koordinates.com/>`_ is the initial author of the measure objects,
- and was inspired by Brian Beck's work in `geopy <http://code.google.com/p/geopy/>`_
- and Geoff Biggs' PhD work on dimensioned units for robotics.
diff --git a/parts/django/docs/ref/contrib/gis/model-api.txt b/parts/django/docs/ref/contrib/gis/model-api.txt
deleted file mode 100644
index 6b50cf3..0000000
--- a/parts/django/docs/ref/contrib/gis/model-api.txt
+++ /dev/null
@@ -1,265 +0,0 @@
-.. _ref-gis-model-api:
-
-===================
-GeoDjango Model API
-===================
-
-.. module:: django.contrib.gis.db.models
- :synopsis: GeoDjango model and field API.
-
-This document explores the details of the GeoDjango Model API. Throughout this
-section, we'll be using the following geographic model of a `ZIP code`__ as our
-example::
-
- from django.contrib.gis.db import models
-
- class Zipcode(models.Model):
- code = models.CharField(max_length=5)
- poly = models.PolygonField()
- objects = models.GeoManager()
-
-__ http://en.wikipedia.org/wiki/ZIP_code
-
-Geometry Field Types
-====================
-
-Each of the following geometry field types correspond with the
-OpenGIS Simple Features specification [#fnogc]_.
-
-``GeometryField``
------------------
-
-.. class:: GeometryField
-
-``PointField``
---------------
-
-.. class:: PointField
-
-``LineStringField``
--------------------
-
-.. class:: LineStringField
-
-``PolygonField``
-----------------
-
-.. class:: PolygonField
-
-``MultiPointField``
--------------------
-
-.. class:: MultiPointField
-
-``MultiLineStringField``
-------------------------
-
-.. class:: MultiLineStringField
-
-``MultiPolygonField``
----------------------
-
-.. class:: MultiPolygonField
-
-``GeometryCollectionField``
----------------------------
-
-.. class:: GeometryCollectionField
-
-.. _geometry-field-options:
-
-Geometry Field Options
-======================
-
-In addition to the regular :ref:`common-model-field-options` available for
-Django model fields, geometry fields have the following additional options.
-All are optional.
-
-``srid``
---------
-
-.. attribute:: GeometryField.srid
-
-Sets the SRID [#fnogcsrid]_ (Spatial Reference System Identity) of the geometry field to
-the given value. Defaults to 4326 (also known as `WGS84`__, units are in degrees
-of longitude and latitude).
-
-__ http://en.wikipedia.org/wiki/WGS84
-
-.. _selecting-an-srid:
-
-Selecting an SRID
-^^^^^^^^^^^^^^^^^
-
-Choosing an appropriate SRID for your model is an important decision that the
-developer should consider carefully. The SRID is an integer specifier that
-corresponds to the projection system that will be used to interpret the data
-in the spatial database. [#fnsrid]_ Projection systems give the context to the
-coordinates that specify a location. Although the details of `geodesy`__ are
-beyond the scope of this documentation, the general problem is that the earth
-is spherical and representations of the earth (e.g., paper maps, Web maps)
-are not.
-
-Most people are familiar with using latitude and longitude to reference a
-location on the earth's surface. However, latitude and longitude are angles,
-not distances. [#fnharvard]_ In other words, while the shortest path between two points on
-a flat surface is a straight line, the shortest path between two points on a curved
-surface (such as the earth) is an *arc* of a `great circle`__. [#fnthematic]_ Thus,
-additional computation is required to obtain distances in planar units (e.g.,
-kilometers and miles). Using a geographic coordinate system may introduce
-complications for the developer later on. For example, PostGIS versions 1.4
-and below do not have the capability to perform distance calculations between
-non-point geometries using geographic coordinate systems, e.g., constructing a
-query to find all points within 5 miles of a county boundary stored as WGS84.
-[#fndist]_
-
-Portions of the earth's surface may projected onto a two-dimensional, or
-Cartesian, plane. Projected coordinate systems are especially convenient
-for region-specific applications, e.g., if you know that your database will
-only cover geometries in `North Kansas`__, then you may consider using projection
-system specific to that region. Moreover, projected coordinate systems are
-defined in Cartesian units (such as meters or feet), easing distance
-calculations.
-
-.. note::
-
- If you wish to peform arbitrary distance queries using non-point
- geometries in WGS84, consider upgrading to PostGIS 1.5. For
- better performance, enable the :attr:`GeometryField.geography`
- keyword so that :ref:`geography database type <geography-type>`
- is used instead.
-
-Additional Resources:
-
-* `spatialreference.org`__: A Django-powered database of spatial reference
- systems.
-* `The State Plane Coordinate System`__: A Web site covering the various
- projection systems used in the United States. Much of the U.S. spatial
- data encountered will be in one of these coordinate systems rather than
- in a geographic coordinate system such as WGS84.
-
-__ http://en.wikipedia.org/wiki/Geodesy
-__ http://en.wikipedia.org/wiki/Great_circle
-__ http://www.spatialreference.org/ref/epsg/2796/
-__ http://spatialreference.org/
-__ http://welcome.warnercnr.colostate.edu/class_info/nr502/lg3/datums_coordinates/spcs.html
-
-``spatial_index``
------------------
-
-.. attribute:: GeometryField.spatial_index
-
-Defaults to ``True``. Creates a spatial index for the given geometry
-field.
-
-.. note::
-
- This is different from the ``db_index`` field option because spatial
- indexes are created in a different manner than regular database
- indexes. Specifically, spatial indexes are typically created using
- a variant of the R-Tree, while regular database indexes typically
- use B-Trees.
-
-``dim``
--------
-
-.. versionadded:: 1.2
-
-.. attribute:: GeometryField.dim
-
-This option may be used for customizing the coordinate dimension of the
-geometry field. By default, it is set to 2, for representing two-dimensional
-geometries. For spatial backends that support it, it may be set to 3 for
-three-dimensonal support.
-
-.. note::
-
- At this time 3D support requires that GEOS 3.1 be installed, and is
- limited only to the PostGIS spatial backend.
-
-``geography``
--------------
-
-.. versionadded:: 1.2
-
-.. attribute:: GeometryField.geography
-
-If set to ``True``, this option will create a database column of
-type geography, rather than geometry. Please refer to the
-:ref:`geography type <geography-type>` section below for more
-details.
-
-.. note::
-
- Geography support is limited only to PostGIS 1.5+, and will
- force the SRID to be 4326.
-
-.. _geography-type:
-
-Geography Type
-^^^^^^^^^^^^^^
-
-In PostGIS 1.5, the geography type was introduced -- it provides
-provides native support for spatial features represented with geographic
-coordinates (e.g., WGS84 longitude/latitude). [#fngeography]_
-Unlike the plane used by a geometry type, the geography type uses a spherical
-representation of its data. Distance and measurement operations
-performed on a geography column automatically employ great circle arc
-calculations and return linear units. In other words, when ``ST_Distance``
-is called on two geographies, a value in meters is returned (as opposed
-to degrees if called on a geometry column in WGS84).
-
-Because geography calculations involve more mathematics, only a subset of the
-PostGIS spatial lookups are available for the geography type. Practically,
-this means that in addition to the :ref:`distance lookups <distance-lookups>`
-only the following additional :ref:`spatial lookups <spatial-lookups>` are
-available for geography columns:
-
-* :lookup:`bboverlaps`
-* :lookup:`coveredby`
-* :lookup:`covers`
-* :lookup:`intersects`
-
-For more information, the PostGIS documentation contains a helpful section on
-determining `when to use geography data type over geometry data type
-<http://postgis.refractions.net/documentation/manual-1.5/ch04.html#PostGIS_GeographyVSGeometry>`_.
-
-``GeoManager``
-==============
-
-.. currentmodule:: django.contrib.gis.db.models
-.. class:: GeoManager
-
-In order to conduct geographic queries, each geographic model requires
-a ``GeoManager`` model manager. This manager allows for the proper SQL
-construction for geographic queries; thus, without it, all geographic filters
-will fail. It should also be noted that ``GeoManager`` is required even if the
-model does not have a geographic field itself, e.g., in the case of a
-``ForeignKey`` relation to a model with a geographic field. For example,
-if we had an ``Address`` model with a ``ForeignKey`` to our ``Zipcode``
-model::
-
- from django.contrib.gis.db import models
- from django.contrib.localflavor.us.models import USStateField
-
- class Address(models.Model):
- num = models.IntegerField()
- street = models.CharField(max_length=100)
- city = models.CharField(max_length=100)
- state = USStateField()
- zipcode = models.ForeignKey(Zipcode)
- objects = models.GeoManager()
-
-The geographic manager is needed to do spatial queries on related ``Zipcode`` objects,
-for example::
-
- qs = Address.objects.filter(zipcode__poly__contains='POINT(-104.590948 38.319914)')
-
-.. rubric:: Footnotes
-.. [#fnogc] OpenGIS Consortium, Inc., `Simple Feature Specification For SQL <http://www.opengis.org/docs/99-049.pdf>`_, Document 99-049 (May 5, 1999).
-.. [#fnogcsrid] *See id.* at Ch. 2.3.8, p. 39 (Geometry Values and Spatial Reference Systems).
-.. [#fnsrid] Typically, SRID integer corresponds to an EPSG (`European Petroleum Survey Group <http://www.epsg.org>`_) identifier. However, it may also be associated with custom projections defined in spatial database's spatial reference systems table.
-.. [#fnharvard] Harvard Graduate School of Design, `An Overview of Geodesy and Geographic Referencing Systems <http://www.gsd.harvard.edu/gis/manual/projections/fundamentals/>`_. This is an excellent resource for an overview of principles relating to geographic and Cartesian coordinate systems.
-.. [#fnthematic] Terry A. Slocum, Robert B. McMaster, Fritz C. Kessler, & Hugh H. Howard, *Thematic Cartography and Geographic Visualization* (Prentice Hall, 2nd edition), at Ch. 7.1.3.
-.. [#fndist] This limitation does not apply to PostGIS 1.5. It should be noted that even in previous versions of PostGIS, this isn't impossible using GeoDjango; you could for example, take a known point in a projected coordinate system, buffer it to the appropriate radius, and then perform an intersection operation with the buffer transformed to the geographic coordinate system.
-.. [#fngeography] Please refer to the `PostGIS Geography Type <http://postgis.refractions.net/documentation/manual-1.5/ch04.html#PostGIS_Geography>`_ documentation for more details.
diff --git a/parts/django/docs/ref/contrib/gis/ogrinspect.txt b/parts/django/docs/ref/contrib/gis/ogrinspect.txt
deleted file mode 100644
index ed285e0..0000000
--- a/parts/django/docs/ref/contrib/gis/ogrinspect.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-.. _ref-ogrinspect:
-
-==============
-OGR Inspection
-==============
-
-.. module:: django.contrib.gis.utils.ogrinspect
- :synopsis: Utilities for inspecting OGR data sources.
-
-.. currentmodule:: django.contrib.gis.utils
-
-``ogrinspect``
-==============
-
-.. function:: ogrinspect(data_source, model_name[, **kwargs])
- :noindex:
-
-``mapping``
-===========
-
-.. function:: mapping(data_source, [geom_name='geom', layer_key=0, multi_geom=False])
diff --git a/parts/django/docs/ref/contrib/gis/sitemaps.txt b/parts/django/docs/ref/contrib/gis/sitemaps.txt
deleted file mode 100644
index 75bddd3..0000000
--- a/parts/django/docs/ref/contrib/gis/sitemaps.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-===================
-Geographic Sitemaps
-===================
-
-Google's sitemap protocol has been recently extended to support geospatial
-content. [#]_ This includes the addition of the ``<url>`` child element
-``<geo:geo>``, which tells Google that the content located at the URL is
-geographic in nature. [#]_
-
-Example
-=======
-
-Reference
-=========
-
-``KMLSitemap``
---------------
-
-``KMZSitemap``
---------------
-
-``GeoRSSSitemap``
------------------
-
-.. rubric:: Footnotes
-.. [#] Google, Inc., `What is a Geo Sitemap? <http://www.google.com/support/webmasters/bin/answer.py?answer=94554>`_.
-.. [#] Google, Inc., `Submit Your Geo Content to Google <http://code.google.com/apis/kml/documentation/kmlSearch.html>`_.
diff --git a/parts/django/docs/ref/contrib/gis/testing.txt b/parts/django/docs/ref/contrib/gis/testing.txt
deleted file mode 100644
index 889b43a..0000000
--- a/parts/django/docs/ref/contrib/gis/testing.txt
+++ /dev/null
@@ -1,268 +0,0 @@
-======================
-Testing GeoDjango Apps
-======================
-
-.. versionchanged:: 1.2
-
-In Django 1.2, the addition of :ref:`spatial-backends`
-simplified the process of testing GeoDjango applications. Specifically, testing
-GeoDjango applications is now the same as :doc:`/topics/testing`.
-
-Included in this documentation are some additional notes and settings
-for :ref:`testing-postgis` and :ref:`testing-spatialite` users.
-
-.. note::
-
- Django 1.1 users are still required to use a custom :setting:`TEST_RUNNER`.
- See the :ref:`testing-1.1` section for more details.
-
-.. _testing-postgis:
-
-PostGIS
-=======
-
-Settings
---------
-
-.. note::
-
- The settings below have sensible defaults, and shouldn't require manual setting.
-
-.. setting:: POSTGIS_TEMPLATE
-
-``POSTGIS_TEMPLATE``
-^^^^^^^^^^^^^^^^^^^^
-
-.. versionadded:: 1.1
-
-.. versionchanged:: 1.2
-
-This setting may be used to customize the name of the PostGIS template
-database to use. In Django versions 1.2 and above, it automatically
-defaults to ``'template_postgis'`` (the same name used in the
-:ref:`installation documentation <spatialdb_template>`).
-
-.. note::
-
- Django 1.1 users will still have to define the :setting:`POSTGIS_TEMPLATE`
- with a value, for example::
-
- POSTGIS_TEMPLATE='template_postgis'
-
-.. setting:: POSTGIS_VERSION
-
-``POSTGIS_VERSION``
-^^^^^^^^^^^^^^^^^^^
-
-.. versionadded:: 1.1
-
-When GeoDjango's spatial backend initializes on PostGIS, it has to perform
-a SQL query to determine the version in order to figure out what
-features are available. Advanced users wishing to prevent this additional
-query may set the version manually using a 3-tuple of integers specifying
-the major, minor, and subminor version numbers for PostGIS. For example,
-to configure for PostGIS 1.5.2 you would use::
-
- POSTGIS_VERSION = (1, 5, 2)
-
-Obtaining Sufficient Privileges
--------------------------------
-
-Depending on your configuration, this section describes several methods to
-configure a database user with sufficient privileges to run tests for
-GeoDjango applications on PostgreSQL. If your
-:ref:`spatial database template <spatialdb_template>`
-was created like in the instructions, then your testing database user
-only needs to have the ability to create databases. In other configurations,
-you may be required to use a database superuser.
-
-Create Database User
-^^^^^^^^^^^^^^^^^^^^
-
-To make database user with the ability to create databases, use the
-following command::
-
- $ createuser --createdb -R -S <user_name>
-
-The ``-R -S`` flags indicate that we do not want the user to have the ability
-to create additional users (roles) or to be a superuser, respectively.
-
-Alternatively, you may alter an existing user's role from the SQL shell
-(assuming this is done from an existing superuser account)::
-
- postgres# ALTER ROLE <user_name> CREATEDB NOSUPERUSER NOCREATEROLE;
-
-Create Database Superuser
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This may be done at the time the user is created, for example::
-
- $ createuser --superuser <user_name>
-
-Or you may alter the user's role from the SQL shell (assuming this
-is done from an existing superuser account)::
-
- postgres# ALTER ROLE <user_name> SUPERUSER;
-
-
-Create Local PostgreSQL Database
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-1. Initialize database: ``initdb -D /path/to/user/db``
-
-2. If there's already a Postgres instance on the machine, it will need
- to use a different TCP port than 5432. Edit ``postgresql.conf`` (in
- ``/path/to/user/db``) to change the database port (e.g. ``port = 5433``).
-
-3. Start this database ``pg_ctl -D /path/to/user/db start``
-
-Windows
--------
-
-On Windows platforms the pgAdmin III utility may also be used as
-a simple way to add superuser privileges to your database user.
-
-By default, the PostGIS installer on Windows includes a template
-spatial database entitled ``template_postgis``.
-
-.. _testing-spatialite:
-
-SpatiaLite
-==========
-
-.. versionadded:: 1.1
-
-You will need to download the `initialization SQL`__ script for SpatiaLite::
-
- $ wget http://www.gaia-gis.it/spatialite/init_spatialite-2.3.zip
- $ unzip init_spatialite-2.3.zip
-
-If ``init_spatialite-2.3.sql`` is in the same path as your project's ``manage.py``,
-then all you have to do is::
-
- $ python manage.py test
-
-Settings
---------
-
-.. setting:: SPATIALITE_SQL
-
-``SPATIALITE_SQL``
-^^^^^^^^^^^^^^^^^^
-
-.. versionadded:: 1.1
-
-By default, the GeoDjango test runner looks for the SpatiaLite SQL in the
-same directory where it was invoked (by default the same directory where
-``manage.py`` is located). If you want to use a different location, then
-you may add the following to your settings::
-
- SPATIALITE_SQL='/path/to/init_spatialite-2.3.sql'
-
-__ http://www.gaia-gis.it/spatialite/init_spatialite-2.3.zip
-
-.. _testing-1.1:
-
-Testing GeoDjango Applications in 1.1
-=====================================
-
-In Django 1.1, to accommodate the extra steps required to scaffalod a
-spatial database automatically, a test runner customized for GeoDjango
-must be used. To use this runner, configure :setting:`TEST_RUNNER` as follows::
-
- TEST_RUNNER='django.contrib.gis.tests.run_tests'
-
-.. note::
-
- In order to create a spatial database, the :setting:`USER` setting
- (or :setting:`TEST_USER`, if optionally defined on Oracle) requires
- elevated privileges. When using PostGIS or MySQL, the database user
- must have at least the ability to create databases. When testing on Oracle,
- the user should be a superuser.
-
-.. _geodjango-tests:
-
-GeoDjango Tests
-===============
-
-.. versionchanged:: 1.2.4
-
-GeoDjango's test suite may be run in one of two ways, either by itself or
-with the rest of Django's :ref:`unit-tests`.
-
-.. note::
-
- The :setting:`TEST_RUNNER` previously used to execute the GeoDjango
- test suite,:func:`django.contrib.gis.tests.run_gis_tests`, was deprecated
- in favor of the :class:`django.contrib.gis.tests.GeoDjangoTestSuiteRunner`
- class.
-
-Run only GeoDjango tests
-------------------------
-
-To run *only* the tests for GeoDjango, the :setting:`TEST_RUNNER`
-setting must be changed to use the
-:class:`~django.contrib.gis.tests.GeoDjangoTestSuiteRunner`::
-
- TEST_RUNNER = 'django.contrib.gis.tests.GeoDjangoTestSuiteRunner'
-
-Example
-^^^^^^^
-
-First, you'll need a bare-bones settings file, like below, that is
-customized with your spatial database name and user::
-
- TEST_RUNNER = 'django.contrib.gis.tests.GeoDjangoTestSuiteRunner'
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.contrib.gis.db.backends.postgis',
- 'NAME': 'a_spatial_database',
- 'USER': 'db_user'
- }
- }
-
-Assuming the above is in a file called ``postgis.py`` that is in the
-the same directory as ``manage.py`` of your Django project, then
-you may run the tests with the following command::
-
- $ python manage.py test --settings=postgis
-
-Run with ``runtests.py``
-------------------------
-
-To have the GeoDjango tests executed when
-:ref:`running the Django test suite <running-unit-tests>` with ``runtests.py``
-all of the databases in the settings file must be using one of the
-:ref:`spatial database backends <spatial-backends>`.
-
-.. warning::
-
- Do not change the :setting:`TEST_RUNNER` setting
- when running the GeoDjango tests with ``runtests.py``.
-
-Example
-^^^^^^^
-
-The following is an example bare-bones settings file with spatial backends
-that can be used to run the entire Django test suite, including those
-in :mod:`django.contrib.gis`::
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.contrib.gis.db.backends.postgis',
- 'NAME': 'geodjango',
- 'USER': 'geodjango',
- },
- 'other': {
- 'ENGINE': 'django.contrib.gis.db.backends.postgis',
- 'NAME': 'other',
- 'USER': 'geodjango',
- }
- }
-
-Assuming the settings above were in a ``postgis.py`` file in the same
-directory as ``runtests.py``, then all Django and GeoDjango tests would
-be performed when executing the command::
-
- $ ./runtests.py --settings=postgis
diff --git a/parts/django/docs/ref/contrib/gis/tutorial.txt b/parts/django/docs/ref/contrib/gis/tutorial.txt
deleted file mode 100644
index 9deeb78..0000000
--- a/parts/django/docs/ref/contrib/gis/tutorial.txt
+++ /dev/null
@@ -1,758 +0,0 @@
-==================
-GeoDjango Tutorial
-==================
-
-Introduction
-============
-
-GeoDjango is an add-on for Django that turns it into a world-class geographic
-Web framework. GeoDjango strives to make at as simple as possible to create
-geographic Web applications, like location-based services. Some features include:
-
-* Django model fields for `OGC`_ geometries.
-* Extensions to Django's ORM for the querying and manipulation of spatial data.
-* Loosely-coupled, high-level Python interfaces for GIS geometry operations and
- data formats.
-* Editing of geometry fields inside the admin.
-
-This tutorial assumes a familiarity with Django; thus, if you're brand new to
-Django please read through the :doc:`regular tutorial </intro/tutorial01>` to introduce
-yourself with basic Django concepts.
-
-.. note::
-
- GeoDjango has special prerequisites overwhat is required by Django --
- please consult the :ref:`installation documentation <ref-gis-install>`
- for more details.
-
-This tutorial will guide you through the creation of a geographic Web
-application for viewing the `world borders`_. [#]_ Some of the code
-used in this tutorial is taken from and/or inspired by the `GeoDjango
-basic apps`_ project. [#]_
-
-.. note::
-
- Proceed through the tutorial sections sequentially for step-by-step
- instructions.
-
-.. _OGC: http://www.opengeospatial.org/
-.. _world borders: http://thematicmapping.org/downloads/world_borders.php
-.. _GeoDjango basic apps: http://code.google.com/p/geodjango-basic-apps/
-
-Setting Up
-==========
-
-Create a Spatial Database
--------------------------
-
-.. note::
-
- MySQL and Oracle users can skip this section because spatial types
- are already built into the database.
-
-First, a spatial database needs to be created for our project. If using
-PostgreSQL and PostGIS, then the following commands will
-create the database from a :ref:`spatial database template <spatialdb_template>`::
-
- $ createdb -T template_postgis geodjango
-
-.. note::
-
- This command must be issued by a database user that has permissions to
- create a database. Here is an example set of commands to create such
- a user::
-
- $ sudo su - postgres
- $ createuser --createdb geo
- $ exit
-
- Replace ``geo`` to correspond to the system login user name will be
- connecting to the database. For example, ``johndoe`` if that is the
- system user that will be running GeoDjango.
-
-Users of SQLite and SpatiaLite should consult the instructions on how
-to create a :ref:`SpatiaLite database <create_spatialite_db>`.
-
-Create GeoDjango Project
-------------------------
-
-Use the ``django-admin.py`` script like normal to create a ``geodjango`` project::
-
- $ django-admin.py startproject geodjango
-
-With the project initialized, now create a ``world`` Django application within
-the ``geodjango`` project::
-
- $ cd geodjango
- $ python manage.py startapp world
-
-Configure ``settings.py``
--------------------------
-
-The ``geodjango`` project settings are stored in the ``settings.py`` file. Edit
-the database connection settings appropriately::
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.contrib.gis.db.backends.postgis',
- 'NAME': 'geodjango',
- 'USER': 'geo',
- }
- }
-
-.. note::
-
- These database settings are for Django 1.2 and above.
-
-In addition, modify the :setting:`INSTALLED_APPS` setting to include
-:mod:`django.contrib.admin`, :mod:`django.contrib.gis`,
-and ``world`` (our newly created application)::
-
- INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.admin',
- 'django.contrib.gis',
- 'world'
- )
-
-Geographic Data
-===============
-
-.. _worldborders:
-
-World Borders
--------------
-
-The world borders data is available in this `zip file`__. Create a data directory
-in the ``world`` application, download the world borders data, and unzip.
-On GNU/Linux platforms the following commands should do it::
-
- $ mkdir world/data
- $ cd world/data
- $ wget http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip
- $ unzip TM_WORLD_BORDERS-0.3.zip
- $ cd ../..
-
-The world borders ZIP file contains a set of data files collectively known as
-an `ESRI Shapefile`__, one of the most popular geospatial data formats. When
-unzipped the world borders data set includes files with the following extensions:
-
-* ``.shp``: Holds the vector data for the world borders geometries.
-* ``.shx``: Spatial index file for geometries stored in the ``.shp``.
-* ``.dbf``: Database file for holding non-geometric attribute data
- (e.g., integer and character fields).
-* ``.prj``: Contains the spatial reference information for the geographic
- data stored in the shapefile.
-
-__ http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip
-__ http://en.wikipedia.org/wiki/Shapefile
-
-Use ``ogrinfo`` to examine spatial data
----------------------------------------
-
-The GDAL ``ogrinfo`` utility is excellent for examining metadata about
-shapefiles (or other vector data sources)::
-
- $ ogrinfo world/data/TM_WORLD_BORDERS-0.3.shp
- INFO: Open of `world/data/TM_WORLD_BORDERS-0.3.shp'
- using driver `ESRI Shapefile' successful.
- 1: TM_WORLD_BORDERS-0.3 (Polygon)
-
-Here ``ogrinfo`` is telling us that the shapefile has one layer, and that
-layer contains polygon data. To find out more we'll specify the layer name
-and use the ``-so`` option to get only important summary information::
-
- $ ogrinfo -so world/data/TM_WORLD_BORDERS-0.3.shp TM_WORLD_BORDERS-0.3
- INFO: Open of `world/data/TM_WORLD_BORDERS-0.3.shp'
- using driver `ESRI Shapefile' successful.
-
- Layer name: TM_WORLD_BORDERS-0.3
- Geometry: Polygon
- Feature Count: 246
- Extent: (-180.000000, -90.000000) - (180.000000, 83.623596)
- Layer SRS WKT:
- GEOGCS["GCS_WGS_1984",
- DATUM["WGS_1984",
- SPHEROID["WGS_1984",6378137.0,298.257223563]],
- PRIMEM["Greenwich",0.0],
- UNIT["Degree",0.0174532925199433]]
- FIPS: String (2.0)
- ISO2: String (2.0)
- ISO3: String (3.0)
- UN: Integer (3.0)
- NAME: String (50.0)
- AREA: Integer (7.0)
- POP2005: Integer (10.0)
- REGION: Integer (3.0)
- SUBREGION: Integer (3.0)
- LON: Real (8.3)
- LAT: Real (7.3)
-
-This detailed summary information tells us the number of features in the layer
-(246), the geographical extent, the spatial reference system ("SRS WKT"),
-as well as detailed information for each attribute field. For example,
-``FIPS: String (2.0)`` indicates that there's a ``FIPS`` character field
-with a maximum length of 2; similarly, ``LON: Real (8.3)`` is a floating-point
-field that holds a maximum of 8 digits up to three decimal places. Although
-this information may be found right on the `world borders`_ Web site, this shows
-you how to determine this information yourself when such metadata is not
-provided.
-
-Geographic Models
-=================
-
-Defining a Geographic Model
----------------------------
-
-Now that we've examined our world borders data set using ``ogrinfo``, we can
-create a GeoDjango model to represent this data::
-
- from django.contrib.gis.db import models
-
- class WorldBorders(models.Model):
- # Regular Django fields corresponding to the attributes in the
- # world borders shapefile.
- name = models.CharField(max_length=50)
- area = models.IntegerField()
- pop2005 = models.IntegerField('Population 2005')
- fips = models.CharField('FIPS Code', max_length=2)
- iso2 = models.CharField('2 Digit ISO', max_length=2)
- iso3 = models.CharField('3 Digit ISO', max_length=3)
- un = models.IntegerField('United Nations Code')
- region = models.IntegerField('Region Code')
- subregion = models.IntegerField('Sub-Region Code')
- lon = models.FloatField()
- lat = models.FloatField()
-
- # GeoDjango-specific: a geometry field (MultiPolygonField), and
- # overriding the default manager with a GeoManager instance.
- mpoly = models.MultiPolygonField()
- objects = models.GeoManager()
-
- # So the model is pluralized correctly in the admin.
- class Meta:
- verbose_name_plural = "World Borders"
-
- # Returns the string representation of the model.
- def __unicode__(self):
- return self.name
-
-Two important things to note:
-
-1. The ``models`` module is imported from :mod:`django.contrib.gis.db`.
-2. The model overrides its default manager with
- :class:`~django.contrib.gis.db.models.GeoManager`; this is *required*
- to perform spatial queries.
-
-When declaring a geometry field on your model the default spatial reference system
-is WGS84 (meaning the `SRID`__ is 4326) -- in other words, the field coordinates are in
-longitude/latitude pairs in units of degrees. If you want the coordinate system to be
-different, then SRID of the geometry field may be customized by setting the ``srid``
-with an integer corresponding to the coordinate system of your choice.
-
-__ http://en.wikipedia.org/wiki/SRID
-
-Run ``syncdb``
---------------
-
-After you've defined your model, it needs to be synced with the spatial database.
-First, let's look at the SQL that will generate the table for the ``WorldBorders``
-model::
-
- $ python manage.py sqlall world
-
-This management command should produce the following output::
-
- BEGIN;
- CREATE TABLE "world_worldborders" (
- "id" serial NOT NULL PRIMARY KEY,
- "name" varchar(50) NOT NULL,
- "area" integer NOT NULL,
- "pop2005" integer NOT NULL,
- "fips" varchar(2) NOT NULL,
- "iso2" varchar(2) NOT NULL,
- "iso3" varchar(3) NOT NULL,
- "un" integer NOT NULL,
- "region" integer NOT NULL,
- "subregion" integer NOT NULL,
- "lon" double precision NOT NULL,
- "lat" double precision NOT NULL
- )
- ;
- SELECT AddGeometryColumn('world_worldborders', 'mpoly', 4326, 'MULTIPOLYGON', 2);
- ALTER TABLE "world_worldborders" ALTER "mpoly" SET NOT NULL;
- CREATE INDEX "world_worldborders_mpoly_id" ON "world_worldborders" USING GIST ( "mpoly" GIST_GEOMETRY_OPS );
- COMMIT;
-
-If satisfied, you may then create this table in the database by running the
-``syncdb`` management command::
-
- $ python manage.py syncdb
- Creating table world_worldborders
- Installing custom SQL for world.WorldBorders model
-
-The ``syncdb`` command may also prompt you to create an admin user; go ahead and
-do so (not required now, may be done at any point in the future using the
-``createsuperuser`` management command).
-
-Importing Spatial Data
-======================
-
-This section will show you how to take the data from the world borders
-shapefile and import it into GeoDjango models using the :ref:`ref-layermapping`.
-There are many different different ways to import data in to a
-spatial database -- besides the tools included within GeoDjango, you
-may also use the following to populate your spatial database:
-
-* `ogr2ogr`_: Command-line utility, included with GDAL, that
- supports loading a multitude of vector data formats into
- the PostGIS, MySQL, and Oracle spatial databases.
-* `shp2pgsql`_: This utility is included with PostGIS and only supports
- ESRI shapefiles.
-
-.. _ogr2ogr: http://www.gdal.org/ogr2ogr.html
-.. _shp2pgsql: http://postgis.refractions.net/documentation/manual-1.5/ch04.html#shp2pgsql_usage
-
-.. _gdalinterface:
-
-GDAL Interface
---------------
-
-Earlier we used the the ``ogrinfo`` to explore the contents of the world borders
-shapefile. Included within GeoDjango is an interface to GDAL's powerful OGR
-library -- in other words, you'll be able explore all the vector data sources
-that OGR supports via a Pythonic API.
-
-First, invoke the Django shell::
-
- $ python manage.py shell
-
-If the :ref:`worldborders` data was downloaded like earlier in the
-tutorial, then we can determine the path using Python's built-in
-``os`` module::
-
- >>> import os
- >>> from geodjango import world
- >>> world_shp = os.path.abspath(os.path.join(os.path.dirname(world.__file__),
- ... 'data/TM_WORLD_BORDERS-0.3.shp'))
-
-Now, the world borders shapefile may be opened using GeoDjango's
-:class:`~django.contrib.gis.gdal.DataSource` interface::
-
- >>> from django.contrib.gis.gdal import *
- >>> ds = DataSource(world_shp)
- >>> print ds
- / ... /geodjango/world/data/TM_WORLD_BORDERS-0.3.shp (ESRI Shapefile)
-
-Data source objects can have different layers of geospatial features; however,
-shapefiles are only allowed to have one layer::
-
- >>> print len(ds)
- 1
- >>> lyr = ds[0]
- >>> print lyr
- TM_WORLD_BORDERS-0.3
-
-You can see what the geometry type of the layer is and how many features it
-contains::
-
- >>> print lyr.geom_type
- Polygon
- >>> print len(lyr)
- 246
-
-.. note::
-
- Unfortunately the shapefile data format does not allow for greater
- specificity with regards to geometry types. This shapefile, like
- many others, actually includes ``MultiPolygon`` geometries in its
- features. You need to watch out for this when creating your models
- as a GeoDjango ``PolygonField`` will not accept a ``MultiPolygon``
- type geometry -- thus a ``MultiPolygonField`` is used in our model's
- definition instead.
-
-The :class:`~django.contrib.gis.gdal.Layer` may also have a spatial reference
-system associated with it -- if it does, the ``srs`` attribute will return a
-:class:`~django.contrib.gis.gdal.SpatialReference` object::
-
- >>> srs = lyr.srs
- >>> print srs
- GEOGCS["GCS_WGS_1984",
- DATUM["WGS_1984",
- SPHEROID["WGS_1984",6378137.0,298.257223563]],
- PRIMEM["Greenwich",0.0],
- UNIT["Degree",0.0174532925199433]]
- >>> srs.proj4 # PROJ.4 representation
- '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '
-
-Here we've noticed that the shapefile is in the popular WGS84 spatial reference
-system -- in other words, the data uses units of degrees longitude and latitude.
-
-In addition, shapefiles also support attribute fields that may contain
-additional data. Here are the fields on the World Borders layer:
-
- >>> print lyr.fields
- ['FIPS', 'ISO2', 'ISO3', 'UN', 'NAME', 'AREA', 'POP2005', 'REGION', 'SUBREGION', 'LON', 'LAT']
-
-Here we are examining the OGR types (e.g., whether a field is an integer or
-a string) associated with each of the fields:
-
- >>> [fld.__name__ for fld in lyr.field_types]
- ['OFTString', 'OFTString', 'OFTString', 'OFTInteger', 'OFTString', 'OFTInteger', 'OFTInteger', 'OFTInteger', 'OFTInteger', 'OFTReal', 'OFTReal']
-
-You can iterate over each feature in the layer and extract information from both
-the feature's geometry (accessed via the ``geom`` attribute) as well as the
-feature's attribute fields (whose **values** are accessed via ``get()``
-method)::
-
- >>> for feat in lyr:
- ... print feat.get('NAME'), feat.geom.num_points
- ...
- Guernsey 18
- Jersey 26
- South Georgia South Sandwich Islands 338
- Taiwan 363
-
-:class:`~django.contrib.gis.gdal.Layer` objects may be sliced::
-
- >>> lyr[0:2]
- [<django.contrib.gis.gdal.feature.Feature object at 0x2f47690>, <django.contrib.gis.gdal.feature.Feature object at 0x2f47650>]
-
-And individual features may be retrieved by their feature ID::
-
- >>> feat = lyr[234]
- >>> print feat.get('NAME')
- San Marino
-
-Here the boundary geometry for San Marino is extracted and looking
-exported to WKT and GeoJSON::
-
- >>> geom = feat.geom
- >>> print geom.wkt
- POLYGON ((12.415798 43.957954,12.450554 ...
- >>> print geom.json
- { "type": "Polygon", "coordinates": [ [ [ 12.415798, 43.957954 ], [ 12.450554, 43.979721 ], ...
-
-
-``LayerMapping``
-----------------
-
-We're going to dive right in -- create a file called ``load.py`` inside the
-``world`` application, and insert the following::
-
- import os
- from django.contrib.gis.utils import LayerMapping
- from models import WorldBorders
-
- world_mapping = {
- 'fips' : 'FIPS',
- 'iso2' : 'ISO2',
- 'iso3' : 'ISO3',
- 'un' : 'UN',
- 'name' : 'NAME',
- 'area' : 'AREA',
- 'pop2005' : 'POP2005',
- 'region' : 'REGION',
- 'subregion' : 'SUBREGION',
- 'lon' : 'LON',
- 'lat' : 'LAT',
- 'mpoly' : 'MULTIPOLYGON',
- }
-
- world_shp = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data/TM_WORLD_BORDERS-0.3.shp'))
-
- def run(verbose=True):
- lm = LayerMapping(WorldBorders, world_shp, world_mapping,
- transform=False, encoding='iso-8859-1')
-
- lm.save(strict=True, verbose=verbose)
-
-A few notes about what's going on:
-
-* Each key in the ``world_mapping`` dictionary corresponds to a field in the
- ``WorldBorders`` model, and the value is the name of the shapefile field
- that data will be loaded from.
-* The key ``mpoly`` for the geometry field is ``MULTIPOLYGON``, the
- geometry type we wish to import as. Even if simple polygons are encountered
- in the shapefile they will automatically be converted into collections prior
- to insertion into the database.
-* The path to the shapefile is not absolute -- in other words, if you move the
- ``world`` application (with ``data`` subdirectory) to a different location,
- then the script will still work.
-* The ``transform`` keyword is set to ``False`` because the data in the
- shapefile does not need to be converted -- it's already in WGS84 (SRID=4326).
-* The ``encoding`` keyword is set to the character encoding of string values in
- the shapefile. This ensures that string values are read and saved correctly
- from their original encoding system.
-
-Afterwards, invoke the Django shell from the ``geodjango`` project directory::
-
- $ python manage.py shell
-
-Next, import the ``load`` module, call the ``run`` routine, and watch ``LayerMapping``
-do the work::
-
- >>> from world import load
- >>> load.run()
-
-
-.. _ogrinspect-intro:
-
-Try ``ogrinspect``
-------------------
-Now that you've seen how to define geographic models and import data with the
-:ref:`ref-layermapping`, it's possible to further automate this process with
-use of the :djadmin:`ogrinspect` management command. The :djadmin:`ogrinspect`
-command introspects a GDAL-supported vector data source (e.g., a shapefile) and
-generates a model definition and ``LayerMapping`` dictionary automatically.
-
-The general usage of the command goes as follows::
-
- $ python manage.py ogrinspect [options] <data_source> <model_name> [options]
-
-Where ``data_source`` is the path to the GDAL-supported data source and
-``model_name`` is the name to use for the model. Command-line options may
-be used to further define how the model is generated.
-
-For example, the following command nearly reproduces the ``WorldBorders`` model
-and mapping dictionary created above, automatically::
-
- $ python manage.py ogrinspect world/data/TM_WORLD_BORDERS-0.3.shp WorldBorders --srid=4326 --mapping --multi
-
-A few notes about the command-line options given above:
-
-* The ``--srid=4326`` option sets the SRID for the geographic field.
-* The ``--mapping`` option tells ``ogrinspect`` to also generate a
- mapping dictionary for use with :class:`~django.contrib.gis.utils.LayerMapping`.
-* The ``--multi`` option is specified so that the geographic field is a
- :class:`~django.contrib.gis.db.models.MultiPolygonField` instead of just a
- :class:`~django.contrib.gis.db.models.PolygonField`.
-
-The command produces the following output, which may be copied
-directly into the ``models.py`` of a GeoDjango application::
-
- # This is an auto-generated Django model module created by ogrinspect.
- from django.contrib.gis.db import models
-
- class WorldBorders(models.Model):
- fips = models.CharField(max_length=2)
- iso2 = models.CharField(max_length=2)
- iso3 = models.CharField(max_length=3)
- un = models.IntegerField()
- name = models.CharField(max_length=50)
- area = models.IntegerField()
- pop2005 = models.IntegerField()
- region = models.IntegerField()
- subregion = models.IntegerField()
- lon = models.FloatField()
- lat = models.FloatField()
- geom = models.MultiPolygonField(srid=4326)
- objects = models.GeoManager()
-
- # Auto-generated `LayerMapping` dictionary for WorldBorders model
- worldborders_mapping = {
- 'fips' : 'FIPS',
- 'iso2' : 'ISO2',
- 'iso3' : 'ISO3',
- 'un' : 'UN',
- 'name' : 'NAME',
- 'area' : 'AREA',
- 'pop2005' : 'POP2005',
- 'region' : 'REGION',
- 'subregion' : 'SUBREGION',
- 'lon' : 'LON',
- 'lat' : 'LAT',
- 'geom' : 'MULTIPOLYGON',
- }
-
-Spatial Queries
-===============
-
-Spatial Lookups
----------------
-GeoDjango extends the Django ORM and allows the use of spatial lookups.
-Let's do an example where we find the ``WorldBorder`` model that contains
-a point. First, fire up the management shell::
-
- $ python manage.py shell
-
-Now, define a point of interest [#]_::
-
- >>> pnt_wkt = 'POINT(-95.3385 29.7245)'
-
-The ``pnt_wkt`` string represents the point at -95.3385 degrees longitude,
-and 29.7245 degrees latitude. The geometry is in a format known as
-Well Known Text (WKT), an open standard issued by the Open Geospatial
-Consortium (OGC). [#]_ Import the ``WorldBorders`` model, and perform
-a ``contains`` lookup using the ``pnt_wkt`` as the parameter::
-
- >>> from world.models import WorldBorders
- >>> qs = WorldBorders.objects.filter(mpoly__contains=pnt_wkt)
- >>> qs
- [<WorldBorders: United States>]
-
-Here we retrieved a ``GeoQuerySet`` that has only one model: the one
-for the United States (which is what we would expect). Similarly,
-a :ref:`GEOS geometry object <ref-geos>` may also be used -- here the ``intersects``
-spatial lookup is combined with the ``get`` method to retrieve
-only the ``WorldBorders`` instance for San Marino instead of a queryset::
-
- >>> from django.contrib.gis.geos import Point
- >>> pnt = Point(12.4604, 43.9420)
- >>> sm = WorldBorders.objects.get(mpoly__intersects=pnt)
- >>> sm
- <WorldBorders: San Marino>
-
-The ``contains`` and ``intersects`` lookups are just a subset of what's
-available -- the :ref:`ref-gis-db-api` documentation has more.
-
-Automatic Spatial Transformations
----------------------------------
-When querying the spatial database GeoDjango automatically transforms
-geometries if they're in a different coordinate system. In the following
-example, the coordinate will be expressed in terms of `EPSG SRID 32140`__,
-a coordinate system specific to south Texas **only** and in units of
-**meters** and not degrees::
-
- >>> from django.contrib.gis.geos import *
- >>> pnt = Point(954158.1, 4215137.1, srid=32140)
-
-Note that ``pnt`` may also constructed with EWKT, an "extended" form of
-WKT that includes the SRID::
-
- >>> pnt = GEOSGeometry('SRID=32140;POINT(954158.1 4215137.1)')
-
-When using GeoDjango's ORM, it will automatically wrap geometry values
-in transformation SQL, allowing the developer to work at a higher level
-of abstraction::
-
- >>> qs = WorldBorders.objects.filter(mpoly__intersects=pnt)
- >>> qs.query.as_sql() # Generating the SQL
- ('SELECT "world_worldborders"."id", "world_worldborders"."name", "world_worldborders"."area",
- "world_worldborders"."pop2005", "world_worldborders"."fips", "world_worldborders"."iso2",
- "world_worldborders"."iso3", "world_worldborders"."un", "world_worldborders"."region",
- "world_worldborders"."subregion", "world_worldborders"."lon", "world_worldborders"."lat",
- "world_worldborders"."mpoly" FROM "world_worldborders"
- WHERE ST_Intersects("world_worldborders"."mpoly", ST_Transform(%s, 4326))',
- (<django.contrib.gis.db.backend.postgis.adaptor.PostGISAdaptor object at 0x25641b0>,))
- >>> qs # printing evaluates the queryset
- [<WorldBorders: United States>]
-
-__ http://spatialreference.org/ref/epsg/32140/
-
-Lazy Geometries
----------------
-Geometries come to GeoDjango in a standardized textual representation. Upon
-access of the geometry field, GeoDjango creates a `GEOS geometry object <ref-geos>`,
-exposing powerful functionality, such as serialization properties for
-popular geospatial formats::
-
- >>> sm = WorldBorders.objects.get(name='San Marino')
- >>> sm.mpoly
- <MultiPolygon object at 0x24c6798>
- >>> sm.mpoly.wkt # WKT
- MULTIPOLYGON (((12.4157980000000006 43.9579540000000009, 12.4505540000000003 43.9797209999999978, ...
- >>> sm.mpoly.wkb # WKB (as Python binary buffer)
- <read-only buffer for 0x1fe2c70, size -1, offset 0 at 0x2564c40>
- >>> sm.mpoly.geojson # GeoJSON (requires GDAL)
- '{ "type": "MultiPolygon", "coordinates": [ [ [ [ 12.415798, 43.957954 ], [ 12.450554, 43.979721 ], ...
-
-This includes access to all of the advanced geometric operations provided by
-the GEOS library::
-
- >>> pnt = Point(12.4604, 43.9420)
- >>> sm.mpoly.contains(pnt)
- True
- >>> pnt.contains(sm.mpoly)
- False
-
-``GeoQuerySet`` Methods
------------------------
-
-
-Putting your data on the map
-============================
-
-Google
-------
-
-Geographic Admin
-----------------
-
-GeoDjango extends :doc:`Django's admin application </ref/contrib/admin/index>`
-to enable support for editing geometry fields.
-
-Basics
-^^^^^^
-
-GeoDjango also supplements the Django admin by allowing users to create
-and modify geometries on a JavaScript slippy map (powered by `OpenLayers`_).
-
-Let's dive in again -- create a file called ``admin.py`` inside the
-``world`` application, and insert the following::
-
- from django.contrib.gis import admin
- from models import WorldBorders
-
- admin.site.register(WorldBorders, admin.GeoModelAdmin)
-
-Next, edit your ``urls.py`` in the ``geodjango`` project folder to look
-as follows::
-
- from django.conf.urls.defaults import *
- from django.contrib.gis import admin
-
- admin.autodiscover()
-
- urlpatterns = patterns('',
- (r'^admin/', include(admin.site.urls)),
- )
-
-Start up the Django development server::
-
- $ python manage.py runserver
-
-Finally, browse to ``http://localhost:8000/admin/``, and log in with the admin
-user created after running ``syncdb``. Browse to any of the ``WorldBorders``
-entries -- the borders may be edited by clicking on a polygon and dragging
-the vertexes to the desired position.
-
-.. _OpenLayers: http://openlayers.org/
-.. _Open Street Map: http://openstreetmap.org/
-.. _Vector Map Level 0: http://earth-info.nga.mil/publications/vmap0.html
-.. _Metacarta: http://metacarta.com
-
-.. _osmgeoadmin-intro:
-
-``OSMGeoAdmin``
-^^^^^^^^^^^^^^^
-
-With the :class:`~django.contrib.gis.admin.OSMGeoAdmin`, GeoDjango uses
-a `Open Street Map`_ layer in the admin.
-This provides more context (including street and thoroughfare details) than
-available with the :class:`~django.contrib.gis.admin.GeoModelAdmin`
-(which uses the `Vector Map Level 0`_ WMS data set hosted at `Metacarta`_).
-
-First, there are some important requirements and limitations:
-
-* :class:`~django.contrib.gis.admin.OSMGeoAdmin` requires that the
- :ref:`spherical mercator projection be added <addgoogleprojection>`
- to the to be added to the ``spatial_ref_sys`` table (PostGIS 1.3 and
- below, only).
-* The PROJ.4 datum shifting files must be installed (see the
- :ref:`PROJ.4 installation instructions <proj4>` for more details).
-
-If you meet these requirements, then just substitute in the ``OSMGeoAdmin``
-option class in your ``admin.py`` file::
-
- admin.site.register(WorldBorders, admin.OSMGeoAdmin)
-
-.. rubric:: Footnotes
-
-.. [#] Special thanks to Bjørn Sandvik of `thematicmapping.org <http://thematicmapping.org>`_ for providing and maintaining this data set.
-.. [#] GeoDjango basic apps was written by Dane Springmeyer, Josh Livni, and Christopher Schmidt.
-.. [#] Here the point is for the `University of Houston Law Center <http://www.law.uh.edu/>`_ .
-.. [#] Open Geospatial Consortium, Inc., `OpenGIS Simple Feature Specification For SQL <http://www.opengis.org/docs/99-049.pdf>`_, Document 99-049.
diff --git a/parts/django/docs/ref/contrib/gis/utils.txt b/parts/django/docs/ref/contrib/gis/utils.txt
deleted file mode 100644
index 9f8e518..0000000
--- a/parts/django/docs/ref/contrib/gis/utils.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-.. _ref-gis-utils:
-
-===================
-GeoDjango Utilities
-===================
-
-.. module:: django.contrib.gis.utils
- :synopsis: GeoDjango's collection of utilities.
-
-The :mod:`django.contrib.gis.utils` module contains various utilities that are
-useful in creating geospatial Web applications.
-
-.. toctree::
- :maxdepth: 2
-
- geoip
- layermapping
- ogrinspect
-
-GeoIP
-=====
-
-Interface to the MaxMind GeoIP library for performing IP-based geolocation
-from GeoDjango. See :ref:`GeoIP reference <ref-geoip>` documentation for
-more information.
-
-LayerMapping
-============
-
-The :class:`~django.contrib.gis.utils.LayerMapping` simplifies the process
-of importing spatial data and attributes into your GeoDjango models.
-
diff --git a/parts/django/docs/ref/contrib/humanize.txt b/parts/django/docs/ref/contrib/humanize.txt
deleted file mode 100644
index b5ec518..0000000
--- a/parts/django/docs/ref/contrib/humanize.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-========================
-django.contrib.humanize
-========================
-
-.. module:: django.contrib.humanize
- :synopsis: A set of Django template filters useful for adding a "human
- touch" to data.
-
-A set of Django template filters useful for adding a "human touch" to data.
-
-To activate these filters, add ``'django.contrib.humanize'`` to your
-:setting:`INSTALLED_APPS` setting. Once you've done that, use
-``{% load humanize %}`` in a template, and you'll have access to the following
-filters.
-
-.. templatefilter:: apnumber
-
-apnumber
---------
-
-For numbers 1-9, returns the number spelled out. Otherwise, returns the
-number. This follows Associated Press style.
-
-Examples:
-
- * ``1`` becomes ``one``.
- * ``2`` becomes ``two``.
- * ``10`` becomes ``10``.
-
-You can pass in either an integer or a string representation of an integer.
-
-.. templatefilter:: intcomma
-
-intcomma
---------
-
-Converts an integer to a string containing commas every three digits.
-
-Examples:
-
- * ``4500`` becomes ``4,500``.
- * ``45000`` becomes ``45,000``.
- * ``450000`` becomes ``450,000``.
- * ``4500000`` becomes ``4,500,000``.
-
-You can pass in either an integer or a string representation of an integer.
-
-.. templatefilter:: intword
-
-intword
--------
-
-Converts a large integer to a friendly text representation. Works best for
-numbers over 1 million.
-
-Examples:
-
- * ``1000000`` becomes ``1.0 million``.
- * ``1200000`` becomes ``1.2 million``.
- * ``1200000000`` becomes ``1.2 billion``.
-
-Values up to 1000000000000000 (one quadrillion) are supported.
-
-You can pass in either an integer or a string representation of an integer.
-
-.. templatefilter:: naturalday
-
-naturalday
-----------
-
-.. versionadded:: 1.0
-
-For dates that are the current day or within one day, return "today",
-"tomorrow" or "yesterday", as appropriate. Otherwise, format the date using
-the passed in format string.
-
-**Argument:** Date formatting string as described in the :tfilter:`date` tag.
-
-Examples (when 'today' is 17 Feb 2007):
-
- * ``16 Feb 2007`` becomes ``yesterday``.
- * ``17 Feb 2007`` becomes ``today``.
- * ``18 Feb 2007`` becomes ``tomorrow``.
- * Any other day is formatted according to given argument or the
- :setting:`DATE_FORMAT` setting if no argument is given.
-
-.. templatefilter:: ordinal
-
-ordinal
--------
-
-Converts an integer to its ordinal as a string.
-
-Examples:
-
- * ``1`` becomes ``1st``.
- * ``2`` becomes ``2nd``.
- * ``3`` becomes ``3rd``.
-
-You can pass in either an integer or a string representation of an integer.
diff --git a/parts/django/docs/ref/contrib/index.txt b/parts/django/docs/ref/contrib/index.txt
deleted file mode 100644
index 90edf72..0000000
--- a/parts/django/docs/ref/contrib/index.txt
+++ /dev/null
@@ -1,207 +0,0 @@
-====================
-``contrib`` packages
-====================
-
-Django aims to follow Python's `"batteries included" philosophy`_. It ships
-with a variety of extra, optional tools that solve common Web-development
-problems.
-
-This code lives in ``django/contrib`` in the Django distribution. This document
-gives a rundown of the packages in ``contrib``, along with any dependencies
-those packages have.
-
-.. admonition:: Note
-
- For most of these add-ons -- specifically, the add-ons that include either
- models or template tags -- you'll need to add the package name (e.g.,
- ``'django.contrib.admin'``) to your ``INSTALLED_APPS`` setting and re-run
- ``manage.py syncdb``.
-
-.. _"batteries included" philosophy: http://docs.python.org/tutorial/stdlib.html#batteries-included
-
-.. toctree::
- :maxdepth: 1
-
- admin/index
- auth
- comments/index
- contenttypes
- csrf
- databrowse
- flatpages
- formtools/index
- gis/index
- humanize
- localflavor
- markup
- messages
- redirects
- sitemaps
- sites
- syndication
- webdesign
-
-admin
-=====
-
-The automatic Django administrative interface. For more information, see
-:doc:`Tutorial 2 </intro/tutorial02>` and the
-:doc:`admin documentation </ref/contrib/admin/index>`.
-
-Requires the auth_ and contenttypes_ contrib packages to be installed.
-
-auth
-====
-
-Django's authentication framework.
-
-See :doc:`/topics/auth`.
-
-comments
-========
-
-.. versionchanged:: 1.0
- The comments application has been rewriten. See :doc:`/ref/contrib/comments/upgrade`
- for information on howto upgrade.
-
-A simple yet flexible comments system. See :doc:`/ref/contrib/comments/index`.
-
-contenttypes
-============
-
-A light framework for hooking into "types" of content, where each installed
-Django model is a separate content type.
-
-See the :doc:`contenttypes documentation </ref/contrib/contenttypes>`.
-
-csrf
-====
-
-A middleware for preventing Cross Site Request Forgeries
-
-See the :doc:`csrf documentation </ref/contrib/csrf>`.
-
-flatpages
-=========
-
-A framework for managing simple "flat" HTML content in a database.
-
-See the :doc:`flatpages documentation </ref/contrib/flatpages>`.
-
-Requires the sites_ contrib package to be installed as well.
-
-formtools
-=========
-
-A set of high-level abstractions for Django forms (django.forms).
-
-django.contrib.formtools.preview
---------------------------------
-
-An abstraction of the following workflow:
-
-"Display an HTML form, force a preview, then do something with the submission."
-
-See the :doc:`form preview documentation </ref/contrib/formtools/form-preview>`.
-
-django.contrib.formtools.wizard
---------------------------------
-
-Splits forms across multiple Web pages.
-
-See the :doc:`form wizard documentation </ref/contrib/formtools/form-wizard>`.
-
-gis
-====
-
-A world-class geospatial framework built on top of Django, that enables
-storage, manipulation and display of spatial data.
-
-See the :doc:`/ref/contrib/gis/index` documentation for more.
-
-humanize
-========
-
-A set of Django template filters useful for adding a "human touch" to data.
-
-See the :doc:`humanize documentation </ref/contrib/humanize>`.
-
-localflavor
-===========
-
-A collection of various Django snippets that are useful only for a particular
-country or culture. For example, ``django.contrib.localflavor.us.forms``
-contains a ``USZipCodeField`` that you can use to validate U.S. zip codes.
-
-See the :doc:`localflavor documentation </ref/contrib/localflavor>`.
-
-markup
-======
-
-A collection of template filters that implement common markup languages
-
-See the :doc:`markup documentation </ref/contrib/markup>`.
-
-messages
-========
-
-.. versionchanged:: 1.2
- The messages framework was added.
-
-A framework for storing and retrieving temporary cookie- or session-based
-messages
-
-See the :doc:`messages documentation </ref/contrib/messages>`.
-
-redirects
-=========
-
-A framework for managing redirects.
-
-See the :doc:`redirects documentation </ref/contrib/redirects>`.
-
-sessions
-========
-
-A framework for storing data in anonymous sessions.
-
-See the :doc:`sessions documentation </topics/http/sessions>`.
-
-sites
-=====
-
-A light framework that lets you operate multiple Web sites off of the same
-database and Django installation. It gives you hooks for associating objects to
-one or more sites.
-
-See the :doc:`sites documentation </ref/contrib/sites>`.
-
-sitemaps
-========
-
-A framework for generating Google sitemap XML files.
-
-See the :doc:`sitemaps documentation </ref/contrib/sitemaps>`.
-
-syndication
-===========
-
-A framework for generating syndication feeds, in RSS and Atom, quite easily.
-
-See the :doc:`syndication documentation </ref/contrib/syndication>`.
-
-webdesign
-=========
-
-Helpers and utilities targeted primarily at Web *designers* rather than
-Web *developers*.
-
-See the :doc:`Web design helpers documentation </ref/contrib/webdesign>`.
-
-Other add-ons
-=============
-
-If you have an idea for functionality to include in ``contrib``, let us know!
-Code it up, and post it to the `django-users mailing list`_.
-
-.. _django-users mailing list: http://groups.google.com/group/django-users
diff --git a/parts/django/docs/ref/contrib/localflavor.txt b/parts/django/docs/ref/contrib/localflavor.txt
deleted file mode 100644
index 2eb731d..0000000
--- a/parts/django/docs/ref/contrib/localflavor.txt
+++ /dev/null
@@ -1,842 +0,0 @@
-==========================
-The "local flavor" add-ons
-==========================
-
-.. module:: django.contrib.localflavor
- :synopsis: A collection of various Django snippets that are useful only for
- a particular country or culture.
-
-Following its "batteries included" philosophy, Django comes with assorted
-pieces of code that are useful for particular countries or cultures. These are
-called the "local flavor" add-ons and live in the
-:mod:`django.contrib.localflavor` package.
-
-Inside that package, country- or culture-specific code is organized into
-subpackages, named using `ISO 3166 country codes`_.
-
-Most of the ``localflavor`` add-ons are localized form components deriving
-from the :doc:`forms </topics/forms/index>` framework -- for example, a
-:class:`~django.contrib.localflavor.us.forms.USStateField` that knows how to
-validate U.S. state abbreviations, and a
-:class:`~django.contrib.localflavor.fi.forms.FISocialSecurityNumber` that
-knows how to validate Finnish social security numbers.
-
-To use one of these localized components, just import the relevant subpackage.
-For example, here's how you can create a form with a field representing a
-French telephone number::
-
- from django import forms
- from django.contrib.localflavor.fr.forms import FRPhoneNumberField
-
- class MyForm(forms.Form):
- my_french_phone_no = FRPhoneNumberField()
-
-Supported countries
-===================
-
-Countries currently supported by :mod:`~django.contrib.localflavor` are:
-
- * Argentina_
- * Australia_
- * Austria_
- * Brazil_
- * Canada_
- * Chile_
- * Czech_
- * Finland_
- * France_
- * Germany_
- * Iceland_
- * India_
- * Indonesia_
- * Ireland_
- * Italy_
- * Japan_
- * Kuwait_
- * Mexico_
- * `The Netherlands`_
- * Norway_
- * Peru_
- * Poland_
- * Portugal_
- * Romania_
- * Slovakia_
- * `South Africa`_
- * Spain_
- * Sweden_
- * Switzerland_
- * `United Kingdom`_
- * `United States of America`_
- * Uruguay_
-
-The ``django.contrib.localflavor`` package also includes a ``generic`` subpackage,
-containing useful code that is not specific to one particular country or culture.
-Currently, it defines date, datetime and split datetime input fields based on
-those from :doc:`forms </topics/forms/index>`, but with non-US default formats.
-Here's an example of how to use them::
-
- from django import forms
- from django.contrib.localflavor import generic
-
- class MyForm(forms.Form):
- my_date_field = generic.forms.DateField()
-
-.. _ISO 3166 country codes: http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm
-.. _Argentina: `Argentina (ar)`_
-.. _Australia: `Australia (au)`_
-.. _Austria: `Austria (at)`_
-.. _Brazil: `Brazil (br)`_
-.. _Canada: `Canada (ca)`_
-.. _Chile: `Chile (cl)`_
-.. _Czech: `Czech (cz)`_
-.. _Finland: `Finland (fi)`_
-.. _France: `France (fr)`_
-.. _Germany: `Germany (de)`_
-.. _The Netherlands: `The Netherlands (nl)`_
-.. _Iceland: `Iceland (is\_)`_
-.. _India: `India (in\_)`_
-.. _Indonesia: `Indonesia (id)`_
-.. _Ireland: `Ireland (ie)`_
-.. _Italy: `Italy (it)`_
-.. _Japan: `Japan (jp)`_
-.. _Kuwait: `Kuwait (kw)`_
-.. _Mexico: `Mexico (mx)`_
-.. _Norway: `Norway (no)`_
-.. _Peru: `Peru (pe)`_
-.. _Poland: `Poland (pl)`_
-.. _Portugal: `Portugal (pt)`_
-.. _Romania: `Romania (ro)`_
-.. _Slovakia: `Slovakia (sk)`_
-.. _South Africa: `South Africa (za)`_
-.. _Spain: `Spain (es)`_
-.. _Sweden: `Sweden (se)`_
-.. _Switzerland: `Switzerland (ch)`_
-.. _United Kingdom: `United Kingdom (uk)`_
-.. _United States of America: `United States of America (us)`_
-.. _Uruguay: `Uruguay (uy)`_
-
-Adding flavors
-==============
-
-We'd love to add more of these to Django, so please `create a ticket`_ with
-any code you'd like to contribute. One thing we ask is that you please use
-Unicode objects (``u'mystring'``) for strings, rather than setting the encoding
-in the file. See any of the existing flavors for examples.
-
-.. _create a ticket: http://code.djangoproject.com/simpleticket
-
-Argentina (``ar``)
-=============================================
-
-.. class:: ar.forms.ARPostalCodeField
-
- A form field that validates input as either a classic four-digit Argentinian
- postal code or a CPA_.
-
-.. _CPA: http://www.correoargentino.com.ar/consulta_cpa/home.php
-
-.. class:: ar.forms.ARDNIField
-
- A form field that validates input as a Documento Nacional de Identidad (DNI)
- number.
-
-.. class:: ar.forms.ARCUITField
-
- A form field that validates input as a Codigo Unico de Identificacion
- Tributaria (CUIT) number.
-
-.. class:: ar.forms.ARProvinceSelect
-
- A ``Select`` widget that uses a list of Argentina's provinces and autonomous
- cities as its choices.
-
-Australia (``au``)
-=============================================
-
-.. class:: au.forms.AUPostCodeField
-
- A form field that validates input as an Australian postcode.
-
-.. class:: au.forms.AUPhoneNumberField
-
- A form field that validates input as an Australian phone number. Valid numbers
- have ten digits.
-
-.. class:: au.forms.AUStateSelect
-
- A ``Select`` widget that uses a list of Australian states/territories as its
- choices.
-
-Austria (``at``)
-================
-
-.. class:: at.forms.ATZipCodeField
-
- A form field that validates its input as an Austrian zip code.
-
-.. class:: at.forms.ATStateSelect
-
- A ``Select`` widget that uses a list of Austrian states as its choices.
-
-.. class:: at.forms.ATSocialSecurityNumberField
-
- A form field that validates its input as an Austrian social security number.
-
-Brazil (``br``)
-===============
-
-.. class:: br.forms.BRPhoneNumberField
-
- A form field that validates input as a Brazilian phone number, with the format
- XX-XXXX-XXXX.
-
-.. class:: br.forms.BRZipCodeField
-
- A form field that validates input as a Brazilian zip code, with the format
- XXXXX-XXX.
-
-.. class:: br.forms.BRStateSelect
-
- A ``Select`` widget that uses a list of Brazilian states/territories as its
- choices.
-
-.. class:: br.forms.BRCPFField
-
- A form field that validates input as `Brazilian CPF`_.
-
- Input can either be of the format XXX.XXX.XXX-VD or be a group of 11 digits.
-
-.. _Brazilian CPF: http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas
-
-.. class:: br.forms.BRCNPJField
-
- A form field that validates input as `Brazilian CNPJ`_.
-
- Input can either be of the format XX.XXX.XXX/XXXX-XX or be a group of 14
- digits.
-
-.. _Brazilian CNPJ: http://en.wikipedia.org/wiki/National_identification_number#Brazil
-
-Canada (``ca``)
-===============
-
-.. class:: ca.forms.CAPhoneNumberField
-
- A form field that validates input as a Canadian phone number, with the format
- XXX-XXX-XXXX.
-
-.. class:: ca.forms.CAPostalCodeField
-
- A form field that validates input as a Canadian postal code, with the format
- XXX XXX.
-
-.. class:: ca.forms.CAProvinceField
-
- A form field that validates input as a Canadian province name or abbreviation.
-
-.. class:: ca.forms.CASocialInsuranceNumberField
-
- A form field that validates input as a Canadian Social Insurance Number (SIN).
- A valid number must have the format XXX-XXX-XXX and pass a `Luhn mod-10
- checksum`_.
-
-.. _Luhn mod-10 checksum: http://en.wikipedia.org/wiki/Luhn_algorithm
-
-.. class:: ca.forms.CAProvinceSelect
-
- A ``Select`` widget that uses a list of Canadian provinces and territories as
- its choices.
-
-Chile (``cl``)
-==============
-
-.. class:: cl.forms.CLRutField
-
- A form field that validates input as a Chilean national identification number
- ('Rol Unico Tributario' or RUT). The valid format is XX.XXX.XXX-X.
-
-.. class:: cl.forms.CLRegionSelect
-
- A ``Select`` widget that uses a list of Chilean regions (Regiones) as its
- choices.
-
-Czech (``cz``)
-==============
-
-.. class:: cz.forms.CZPostalCodeField
-
- A form field that validates input as a Czech postal code. Valid formats
- are XXXXX or XXX XX, where X is a digit.
-
-.. class:: cz.forms.CZBirthNumberField
-
- A form field that validates input as a Czech Birth Number.
- A valid number must be in format XXXXXX/XXXX (slash is optional).
-
-.. class:: cz.forms.CZICNumberField
-
- A form field that validates input as a Czech IC number field.
-
-.. class:: cz.forms.CZRegionSelect
-
- A ``Select`` widget that uses a list of Czech regions as its choices.
-
-Finland (``fi``)
-================
-
-.. class:: fi.forms.FISocialSecurityNumber
-
- A form field that validates input as a Finnish social security number.
-
-.. class:: fi.forms.FIZipCodeField
-
- A form field that validates input as a Finnish zip code. Valid codes
- consist of five digits.
-
-.. class:: fi.forms.FIMunicipalitySelect
-
- A ``Select`` widget that uses a list of Finnish municipalities as its
- choices.
-
-France (``fr``)
-===============
-
-.. class:: fr.forms.FRPhoneNumberField
-
- A form field that validates input as a French local phone number. The
- correct format is 0X XX XX XX XX. 0X.XX.XX.XX.XX and 0XXXXXXXXX validate
- but are corrected to 0X XX XX XX XX.
-
-.. class:: fr.forms.FRZipCodeField
-
- A form field that validates input as a French zip code. Valid codes
- consist of five digits.
-
-.. class:: fr.forms.FRDepartmentSelect
-
- A ``Select`` widget that uses a list of French departments as its choices.
-
-Germany (``de``)
-================
-
-.. class:: de.forms.DEIdentityCardNumberField
-
- A form field that validates input as a German identity card number
- (Personalausweis_). Valid numbers have the format
- XXXXXXXXXXX-XXXXXXX-XXXXXXX-X, with no group consisting entirely of zeroes.
-
-.. _Personalausweis: http://de.wikipedia.org/wiki/Personalausweis
-
-.. class:: de.forms.DEZipCodeField
-
- A form field that validates input as a German zip code. Valid codes
- consist of five digits.
-
-.. class:: de.forms.DEStateSelect
-
- A ``Select`` widget that uses a list of German states as its choices.
-
-The Netherlands (``nl``)
-========================
-
-.. class:: nl.forms.NLPhoneNumberField
-
- A form field that validates input as a Dutch telephone number.
-
-.. class:: nl.forms.NLSofiNumberField
-
- A form field that validates input as a Dutch social security number
- (SoFI/BSN).
-
-.. class:: nl.forms.NLZipCodeField
-
- A form field that validates input as a Dutch zip code.
-
-.. class:: nl.forms.NLProvinceSelect
-
- A ``Select`` widget that uses a list of Dutch provinces as its list of
- choices.
-
-Iceland (``is_``)
-=================
-
-.. class:: is_.forms.ISIdNumberField
-
- A form field that validates input as an Icelandic identification number
- (kennitala). The format is XXXXXX-XXXX.
-
-.. class:: is_.forms.ISPhoneNumberField
-
- A form field that validates input as an Icelandtic phone number (seven
- digits with an optional hyphen or space after the first three digits).
-
-.. class:: is_.forms.ISPostalCodeSelect
-
- A ``Select`` widget that uses a list of Icelandic postal codes as its
- choices.
-
-India (``in_``)
-===============
-
-.. class:: in.forms.INStateField
-
- A form field that validates input as an Indian state/territory name or
- abbreviation. Input is normalized to the standard two-letter vehicle
- registration abbreviation for the given state or territory.
-
-.. class:: in.forms.INZipCodeField
-
- A form field that validates input as an Indian zip code, with the
- format XXXXXXX.
-
-.. class:: in.forms.INStateSelect
-
- A ``Select`` widget that uses a list of Indian states/territories as its
- choices.
-
-Ireland (``ie``)
-================
-
-.. class:: ie.forms.IECountySelect
-
- A ``Select`` widget that uses a list of Irish Counties as its choices.
-
-Indonesia (``id``)
-==================
-
-.. class:: id.forms.IDPostCodeField
-
- A form field that validates input as an Indonesian post code field.
-
-.. class:: id.forms.IDProvinceSelect
-
- A ``Select`` widget that uses a list of Indonesian provinces as its choices.
-
-.. class:: id.forms.IDPhoneNumberField
-
- A form field that validates input as an Indonesian telephone number.
-
-.. class:: id.forms.IDLicensePlatePrefixSelect
-
- A ``Select`` widget that uses a list of Indonesian license plate
- prefix code as its choices.
-
-.. class:: id.forms.IDLicensePlateField
-
- A form field that validates input as an Indonesian vehicle license plate.
-
-.. class:: id.forms.IDNationalIdentityNumberField
-
- A form field that validates input as an Indonesian national identity
- number (`NIK`_/KTP). The output will be in the format of
- 'XX.XXXX.DDMMYY.XXXX'. Dots or spaces can be used in the input to break
- down the numbers.
-
-.. _NIK: http://en.wikipedia.org/wiki/Indonesian_identity_card
-
-Italy (``it``)
-==============
-
-.. class:: it.forms.ITSocialSecurityNumberField
-
- A form field that validates input as an Italian social security number
- (`codice fiscale`_).
-
-.. _codice fiscale: http://www.agenziaentrate.it/ilwwcm/connect/Nsi/Servizi/Codice+fiscale+-+tessera+sanitaria/NSI+Informazioni+sulla+codificazione+delle+persone+fisiche
-
-.. class:: it.forms.ITVatNumberField
-
- A form field that validates Italian VAT numbers (partita IVA).
-
-.. class:: it.forms.ITZipCodeField
-
- A form field that validates input as an Italian zip code. Valid codes
- must have five digits.
-
-.. class:: it.forms.ITProvinceSelect
-
- A ``Select`` widget that uses a list of Italian provinces as its choices.
-
-.. class:: it.forms.ITRegionSelect
-
- A ``Select`` widget that uses a list of Italian regions as its choices.
-
-Japan (``jp``)
-==============
-
-.. class:: jp.forms.JPPostalCodeField
-
- A form field that validates input as a Japanese postcode. It accepts seven
- digits, with or without a hyphen.
-
-.. class:: jp.forms.JPPrefectureSelect
-
- A ``Select`` widget that uses a list of Japanese prefectures as its choices.
-
-Kuwait (``kw``)
-===============
-
-.. class:: kw.forms.KWCivilIDNumberField
-
- A form field that validates input as a Kuwaiti Civil ID number. A valid
- Civil ID number must obey the following rules:
-
- * The number consist of 12 digits.
- * The birthdate of the person is a valid date.
- * The calculated checksum equals to the last digit of the Civil ID.
-
-Mexico (``mx``)
-===============
-
-.. class:: mx.forms.MXStateSelect
-
- A ``Select`` widget that uses a list of Mexican states as its choices.
-
-Norway (``no``)
-===============
-
-.. class:: no.forms.NOSocialSecurityNumber
-
- A form field that validates input as a Norwegian social security number
- (personnummer_).
-
-.. _personnummer: http://no.wikipedia.org/wiki/Personnummer
-
-.. class:: no.forms.NOZipCodeField
-
- A form field that validates input as a Norwegian zip code. Valid codes
- have four digits.
-
-.. class:: no.forms.NOMunicipalitySelect
-
- A ``Select`` widget that uses a list of Norwegian municipalities (fylker) as
- its choices.
-
-Peru (``pe``)
-=============
-
-.. class:: pe.forms.PEDNIField
-
- A form field that validates input as a DNI (Peruvian national identity)
- number.
-
-.. class:: pe.forms.PERUCField
-
- A form field that validates input as an RUC (Registro Unico de
- Contribuyentes) number. Valid RUC numbers have 11 digits.
-
-.. class:: pe.forms.PEDepartmentSelect
-
- A ``Select`` widget that uses a list of Peruvian Departments as its choices.
-
-Poland (``pl``)
-===============
-
-.. class:: pl.forms.PLPESELField
-
- A form field that validates input as a Polish national identification number
- (PESEL_).
-
-.. _PESEL: http://en.wikipedia.org/wiki/PESEL
-
-.. class:: pl.forms.PLREGONField
-
- A form field that validates input as a Polish National Official Business
- Register Number (REGON_), having either seven or nine digits. The checksum
- algorithm used for REGONs is documented at
- http://wipos.p.lodz.pl/zylla/ut/nip-rego.html.
-
-.. _REGON: http://www.stat.gov.pl/bip/regon_ENG_HTML.htm
-
-.. class:: pl.forms.PLPostalCodeField
-
- A form field that validates input as a Polish postal code. The valid format
- is XX-XXX, where X is a digit.
-
-.. class:: pl.forms.PLNIPField
-
- A form field that validates input as a Polish Tax Number (NIP). Valid
- formats are XXX-XXX-XX-XX or XX-XX-XXX-XXX. The checksum algorithm used
- for NIPs is documented at http://wipos.p.lodz.pl/zylla/ut/nip-rego.html.
-
-.. class:: pl.forms.PLCountySelect
-
- A ``Select`` widget that uses a list of Polish administrative units as its
- choices.
-
-.. class:: pl.forms.PLProvinceSelect
-
- A ``Select`` widget that uses a list of Polish voivodeships (administrative
- provinces) as its choices.
-
-Portugal (``pt``)
-=================
-
-.. class:: pt.forms.PTZipCodeField
-
- A form field that validates input as a Portuguese zip code.
-
-.. class:: pt.forms.PTPhoneNumberField
-
- A form field that validates input as a Portuguese phone number.
- Valid numbers have 9 digits (may include spaces) or start by 00
- or + (international).
-
-Romania (``ro``)
-================
-
-.. class:: ro.forms.ROCIFField
-
- A form field that validates Romanian fiscal identification codes (CIF). The
- return value strips the leading RO, if given.
-
-.. class:: ro.forms.ROCNPField
-
- A form field that validates Romanian personal numeric codes (CNP).
-
-.. class:: ro.forms.ROCountyField
-
- A form field that validates its input as a Romanian county (judet) name or
- abbreviation. It normalizes the input to the standard vehicle registration
- abbreviation for the given county. This field will only accept names written
- with diacritics; consider using ROCountySelect as an alternative.
-
-.. class:: ro.forms.ROCountySelect
-
- A ``Select`` widget that uses a list of Romanian counties (judete) as its
- choices.
-
-.. class:: ro.forms.ROIBANField
-
- A form field that validates its input as a Romanian International Bank
- Account Number (IBAN). The valid format is ROXX-XXXX-XXXX-XXXX-XXXX-XXXX,
- with or without hyphens.
-
-.. class:: ro.forms.ROPhoneNumberField
-
- A form field that validates Romanian phone numbers, short special numbers
- excluded.
-
-.. class:: ro.forms.ROPostalCodeField
-
- A form field that validates Romanian postal codes.
-
-Slovakia (``sk``)
-=================
-
-.. class:: sk.forms.SKPostalCodeField
-
- A form field that validates input as a Slovak postal code. Valid formats
- are XXXXX or XXX XX, where X is a digit.
-
-.. class:: sk.forms.SKDistrictSelect
-
- A ``Select`` widget that uses a list of Slovak districts as its choices.
-
-.. class:: sk.forms.SKRegionSelect
-
- A ``Select`` widget that uses a list of Slovak regions as its choices.
-
-South Africa (``za``)
-=====================
-
-.. class:: za.forms.ZAIDField
-
- A form field that validates input as a South African ID number. Validation
- uses the Luhn checksum and a simplistic (i.e., not entirely accurate) check
- for birth date.
-
-.. class:: za.forms.ZAPostCodeField
-
- A form field that validates input as a South African postcode. Valid
- postcodes must have four digits.
-
-Spain (``es``)
-==============
-
-.. class:: es.forms.ESIdentityCardNumberField
-
- A form field that validates input as a Spanish NIF/NIE/CIF (Fiscal
- Identification Number) code.
-
-.. class:: es.forms.ESCCCField
-
- A form field that validates input as a Spanish bank account number (Codigo
- Cuenta Cliente or CCC). A valid CCC number has the format
- EEEE-OOOO-CC-AAAAAAAAAA, where the E, O, C and A digits denote the entity,
- office, checksum and account, respectively. The first checksum digit
- validates the entity and office. The second checksum digit validates the
- account. It is also valid to use a space as a delimiter, or to use no
- delimiter.
-
-.. class:: es.forms.ESPhoneNumberField
-
- A form field that validates input as a Spanish phone number. Valid numbers
- have nine digits, the first of which is 6, 8 or 9.
-
-.. class:: es.forms.ESPostalCodeField
-
- A form field that validates input as a Spanish postal code. Valid codes
- have five digits, the first two being in the range 01 to 52, representing
- the province.
-
-.. class:: es.forms.ESProvinceSelect
-
- A ``Select`` widget that uses a list of Spanish provinces as its choices.
-
-.. class:: es.forms.ESRegionSelect
-
- A ``Select`` widget that uses a list of Spanish regions as its choices.
-
-Sweden (``se``)
-===============
-
-.. class:: se.forms.SECountySelect
-
- A Select form widget that uses a list of the Swedish counties (län) as its
- choices.
-
- The cleaned value is the official county code -- see
- http://en.wikipedia.org/wiki/Counties_of_Sweden for a list.
-
-.. class:: se.forms.SEOrganisationNumber
-
- A form field that validates input as a Swedish organisation number
- (organisationsnummer).
-
- It accepts the same input as SEPersonalIdentityField (for sole
- proprietorships (enskild firma). However, co-ordination numbers are not
- accepted.
-
- It also accepts ordinary Swedish organisation numbers with the format
- NNNNNNNNNN.
-
- The return value will be YYYYMMDDXXXX for sole proprietors, and NNNNNNNNNN
- for other organisations.
-
-.. class:: se.forms.SEPersonalIdentityNumber
-
- A form field that validates input as a Swedish personal identity number
- (personnummer).
-
- The correct formats are YYYYMMDD-XXXX, YYYYMMDDXXXX, YYMMDD-XXXX,
- YYMMDDXXXX and YYMMDD+XXXX.
-
- A \+ indicates that the person is older than 100 years, which will be taken
- into consideration when the date is validated.
-
- The checksum will be calculated and checked. The birth date is checked
- to be a valid date.
-
- By default, co-ordination numbers (samordningsnummer) will be accepted. To
- only allow real personal identity numbers, pass the keyword argument
- coordination_number=False to the constructor.
-
- The cleaned value will always have the format YYYYMMDDXXXX.
-
-.. class:: se.forms.SEPostalCodeField
-
- A form field that validates input as a Swedish postal code (postnummer).
- Valid codes consist of five digits (XXXXX). The number can optionally be
- formatted with a space after the third digit (XXX XX).
-
- The cleaned value will never contain the space.
-
-Switzerland (``ch``)
-====================
-
-.. class:: ch.forms.CHIdentityCardNumberField
-
- A form field that validates input as a Swiss identity card number.
- A valid number must confirm to the X1234567<0 or 1234567890 format and
- have the correct checksums -- see http://adi.kousz.ch/artikel/IDCHE.htm.
-
-.. class:: ch.forms.CHPhoneNumberField
-
- A form field that validates input as a Swiss phone number. The correct
- format is 0XX XXX XX XX. 0XX.XXX.XX.XX and 0XXXXXXXXX validate but are
- corrected to 0XX XXX XX XX.
-
-.. class:: ch.forms.CHZipCodeField
-
- A form field that validates input as a Swiss zip code. Valid codes
- consist of four digits.
-
-.. class:: ch.forms.CHStateSelect
-
- A ``Select`` widget that uses a list of Swiss states as its choices.
-
-United Kingdom (``uk``)
-=======================
-
-.. class:: uk.forms.UKPostcodeField
-
- A form field that validates input as a UK postcode. The regular
- expression used is sourced from the schema for British Standard BS7666
- address types at http://www.cabinetoffice.gov.uk/media/291293/bs7666-v2-0.xml.
-
-.. class:: uk.forms.UKCountySelect
-
- A ``Select`` widget that uses a list of UK counties/regions as its choices.
-
-.. class:: uk.forms.UKNationSelect
-
- A ``Select`` widget that uses a list of UK nations as its choices.
-
-United States of America (``us``)
-=================================
-
-.. class:: us.forms.USPhoneNumberField
-
- A form field that validates input as a U.S. phone number.
-
-.. class:: us.forms.USSocialSecurityNumberField
-
- A form field that validates input as a U.S. Social Security Number (SSN).
- A valid SSN must obey the following rules:
-
- * Format of XXX-XX-XXXX
- * No group of digits consisting entirely of zeroes
- * Leading group of digits cannot be 666
- * Number not in promotional block 987-65-4320 through 987-65-4329
- * Number not one known to be invalid due to widespread promotional
- use or distribution (e.g., the Woolworth's number or the 1962
- promotional number)
-
-.. class:: us.forms.USStateField
-
- A form field that validates input as a U.S. state name or abbreviation. It
- normalizes the input to the standard two-letter postal service abbreviation
- for the given state.
-
-.. class:: us.forms.USZipCodeField
-
- A form field that validates input as a U.S. ZIP code. Valid formats are
- XXXXX or XXXXX-XXXX.
-
-.. class:: us.forms.USStateSelect
-
- A form ``Select`` widget that uses a list of U.S. states/territories as its
- choices.
-
-.. class:: us.models.PhoneNumberField
-
- A :class:`CharField` that checks that the value is a valid U.S.A.-style phone
- number (in the format ``XXX-XXX-XXXX``).
-
-.. class:: us.models.USStateField
-
- A model field that forms represent as a ``forms.USStateField`` field and
- stores the two-letter U.S. state abbreviation in the database.
-
-Uruguay (``uy``)
-================
-
-.. class:: uy.forms.UYCIField
-
- A field that validates Uruguayan 'Cedula de identidad' (CI) numbers.
-
-.. class:: uy.forms.UYDepartamentSelect
-
- A ``Select`` widget that uses a list of Uruguayan departaments as its
- choices.
diff --git a/parts/django/docs/ref/contrib/markup.txt b/parts/django/docs/ref/contrib/markup.txt
deleted file mode 100644
index 9282313..0000000
--- a/parts/django/docs/ref/contrib/markup.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-=====================
-django.contrib.markup
-=====================
-
-.. module:: django.contrib.markup
- :synopsis: A collection of template filters that implement common markup languages.
-
-Django provides template filters that implement the following markup
-languages:
-
- * ``textile`` -- implements `Textile`_ -- requires `PyTextile`_
- * ``markdown`` -- implements `Markdown`_ -- requires `Python-markdown`_
- * ``restructuredtext`` -- implements `reST (reStructured Text)`_
- -- requires `doc-utils`_
-
-In each case, the filter expects formatted markup as a string and
-returns a string representing the marked-up text. For example, the
-``textile`` filter converts text that is marked-up in Textile format
-to HTML.
-
-To activate these filters, add ``'django.contrib.markup'`` to your
-:setting:`INSTALLED_APPS` setting. Once you've done that, use
-``{% load markup %}`` in a template, and you'll have access to these filters.
-For more documentation, read the source code in
-:file:`django/contrib/markup/templatetags/markup.py`.
-
-.. _Textile: http://en.wikipedia.org/wiki/Textile_%28markup_language%29
-.. _Markdown: http://en.wikipedia.org/wiki/Markdown
-.. _reST (reStructured Text): http://en.wikipedia.org/wiki/ReStructuredText
-.. _PyTextile: http://loopcore.com/python-textile/
-.. _Python-markdown: http://www.freewisdom.org/projects/python-markdown
-.. _doc-utils: http://docutils.sf.net/
-
-reStructured Text
------------------
-
-When using the ``restructuredtext`` markup filter you can define a
-:setting:`RESTRUCTUREDTEXT_FILTER_SETTINGS` in your django settings to
-override the default writer settings. See the `restructuredtext writer
-settings`_ for details on what these settings are.
-
-.. _restructuredtext writer settings: http://docutils.sourceforge.net/docs/user/config.html#html4css1-writer
diff --git a/parts/django/docs/ref/contrib/messages.txt b/parts/django/docs/ref/contrib/messages.txt
deleted file mode 100644
index 3081f27..0000000
--- a/parts/django/docs/ref/contrib/messages.txt
+++ /dev/null
@@ -1,411 +0,0 @@
-======================
-The messages framework
-======================
-
-.. module:: django.contrib.messages
- :synopsis: Provides cookie- and session-based temporary message storage.
-
-Django provides full support for cookie- and session-based messaging, for
-both anonymous and authenticated clients. The messages framework allows you
-to temporarily store messages in one request and retrieve them for display
-in a subsequent request (usually the next one). Every message is tagged
-with a specific ``level`` that determines its priority (e.g., ``info``,
-``warning``, or ``error``).
-
-.. versionadded:: 1.2
- The messages framework was added.
-
-Enabling messages
-=================
-
-Messages are implemented through a :doc:`middleware </ref/middleware>`
-class and corresponding :doc:`context processor </ref/templates/api>`.
-
-To enable message functionality, do the following:
-
- * Edit the :setting:`MIDDLEWARE_CLASSES` setting and make sure
- it contains ``'django.contrib.messages.middleware.MessageMiddleware'``.
-
- If you are using a :ref:`storage backend <message-storage-backends>` that
- relies on :doc:`sessions </topics/http/sessions>` (the default),
- ``'django.contrib.sessions.middleware.SessionMiddleware'`` must be
- enabled and appear before ``MessageMiddleware`` in your
- :setting:`MIDDLEWARE_CLASSES`.
-
- * Edit the :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting and make sure
- it contains ``'django.contrib.messages.context_processors.messages'``.
-
- * Add ``'django.contrib.messages'`` to your :setting:`INSTALLED_APPS`
- setting
-
-The default ``settings.py`` created by ``django-admin.py startproject`` has
-``MessageMiddleware`` activated and the ``django.contrib.messages`` app
-installed. Also, the default value for :setting:`TEMPLATE_CONTEXT_PROCESSORS`
-contains ``'django.contrib.messages.context_processors.messages'``.
-
-If you don't want to use messages, you can remove the
-``MessageMiddleware`` line from :setting:`MIDDLEWARE_CLASSES`, the ``messages``
-context processor from :setting:`TEMPLATE_CONTEXT_PROCESSORS` and
-``'django.contrib.messages'`` from your :setting:`INSTALLED_APPS`.
-
-Configuring the message engine
-==============================
-
-.. _message-storage-backends:
-
-Storage backends
-----------------
-
-The messages framework can use different backends to store temporary messages.
-To change which backend is being used, add a `MESSAGE_STORAGE`_ to your
-settings, referencing the module and class of the storage class. For
-example::
-
- MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
-
-The value should be the full path of the desired storage class.
-
-Four storage classes are included:
-
-``'django.contrib.messages.storage.session.SessionStorage'``
- This class stores all messages inside of the request's session. It
- requires Django's ``contrib.sessions`` application.
-
-``'django.contrib.messages.storage.cookie.CookieStorage'``
- This class stores the message data in a cookie (signed with a secret hash
- to prevent manipulation) to persist notifications across requests. Old
- messages are dropped if the cookie data size would exceed 4096 bytes.
-
-``'django.contrib.messages.storage.fallback.FallbackStorage'``
- This class first uses CookieStorage for all messages, falling back to using
- SessionStorage for the messages that could not fit in a single cookie.
-
- Since it is uses SessionStorage, it also requires Django's
- ``contrib.session`` application.
-
-``'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'``
- This is the default temporary storage class.
-
- This class extends FallbackStorage and adds compatibility methods to
- to retrieve any messages stored in the user Message model by code that
- has not yet been updated to use the new API. This storage is temporary
- (because it makes use of code that is pending deprecation) and will be
- removed in Django 1.4. At that time, the default storage will become
- ``django.contrib.messages.storage.fallback.FallbackStorage``. For more
- information, see `LegacyFallbackStorage`_ below.
-
-To write your own storage class, subclass the ``BaseStorage`` class in
-``django.contrib.messages.storage.base`` and implement the ``_get`` and
-``_store`` methods.
-
-LegacyFallbackStorage
-^^^^^^^^^^^^^^^^^^^^^
-
-The ``LegacyFallbackStorage`` is a temporary tool to facilitate the transition
-from the deprecated ``user.message_set`` API and will be removed in Django 1.4
-according to Django's standard deprecation policy. For more information, see
-the full :doc:`release process documentation </internals/release-process>`.
-
-In addition to the functionality in the ``FallbackStorage``, it adds a custom,
-read-only storage class that retrieves messages from the user ``Message``
-model. Any messages that were stored in the ``Message`` model (e.g., by code
-that has not yet been updated to use the messages framework) will be retrieved
-first, followed by those stored in a cookie and in the session, if any. Since
-messages stored in the ``Message`` model do not have a concept of levels, they
-will be assigned the ``INFO`` level by default.
-
-Message levels
---------------
-
-The messages framework is based on a configurable level architecture similar
-to that of the Python logging module. Message levels allow you to group
-messages by type so they can be filtered or displayed differently in views and
-templates.
-
-The built-in levels (which can be imported from ``django.contrib.messages``
-directly) are:
-
-=========== ========
-Constant Purpose
-=========== ========
-``DEBUG`` Development-related messages that will be ignored (or removed) in a production deployment
-``INFO`` Informational messages for the user
-``SUCCESS`` An action was successful, e.g. "Your profile was updated successfully"
-``WARNING`` A failure did not occur but may be imminent
-``ERROR`` An action was **not** successful or some other failure occurred
-=========== ========
-
-The `MESSAGE_LEVEL`_ setting can be used to change the minimum recorded level
-(or it can be `changed per request`_). Attempts to add messages of a level less
-than this will be ignored.
-
-.. _`changed per request`: `Changing the minimum recorded level per-request`_
-
-Message tags
-------------
-
-Message tags are a string representation of the message level plus any
-extra tags that were added directly in the view (see
-`Adding extra message tags`_ below for more details). Tags are stored in a
-string and are separated by spaces. Typically, message tags
-are used as CSS classes to customize message style based on message type. By
-default, each level has a single tag that's a lowercase version of its own
-constant:
-
-============== ===========
-Level Constant Tag
-============== ===========
-``DEBUG`` ``debug``
-``INFO`` ``info``
-``SUCCESS`` ``success``
-``WARNING`` ``warning``
-``ERROR`` ``error``
-============== ===========
-
-To change the default tags for a message level (either built-in or custom),
-set the `MESSAGE_TAGS`_ setting to a dictionary containing the levels
-you wish to change. As this extends the default tags, you only need to provide
-tags for the levels you wish to override::
-
- from django.contrib.messages import constants as messages
- MESSAGE_TAGS = {
- messages.INFO: '',
- 50: 'critical',
- }
-
-Using messages in views and templates
-=====================================
-
-Adding a message
-----------------
-
-To add a message, call::
-
- from django.contrib import messages
- messages.add_message(request, messages.INFO, 'Hello world.')
-
-Some shortcut methods provide a standard way to add messages with commonly
-used tags (which are usually represented as HTML classes for the message)::
-
- messages.debug(request, '%s SQL statements were executed.' % count)
- messages.info(request, 'Three credits remain in your account.')
- messages.success(request, 'Profile details updated.')
- messages.warning(request, 'Your account expires in three days.')
- messages.error(request, 'Document deleted.')
-
-Displaying messages
--------------------
-
-In your template, use something like::
-
- {% if messages %}
- <ul class="messages">
- {% for message in messages %}
- <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
- {% endfor %}
- </ul>
- {% endif %}
-
-If you're using the context processor, your template should be rendered with a
-``RequestContext``. Otherwise, ensure ``messages`` is available to
-the template context.
-
-Creating custom message levels
-------------------------------
-
-Messages levels are nothing more than integers, so you can define your own
-level constants and use them to create more customized user feedback, e.g.::
-
- CRITICAL = 50
-
- def my_view(request):
- messages.add_message(request, CRITICAL, 'A serious error occurred.')
-
-When creating custom message levels you should be careful to avoid overloading
-existing levels. The values for the built-in levels are:
-
-.. _message-level-constants:
-
-============== =====
-Level Constant Value
-============== =====
-``DEBUG`` 10
-``INFO`` 20
-``SUCCESS`` 25
-``WARNING`` 30
-``ERROR`` 40
-============== =====
-
-If you need to identify the custom levels in your HTML or CSS, you need to
-provide a mapping via the `MESSAGE_TAGS`_ setting.
-
-.. note::
- If you are creating a reusable application, it is recommended to use
- only the built-in `message levels`_ and not rely on any custom levels.
-
-Changing the minimum recorded level per-request
------------------------------------------------
-
-The minimum recorded level can be set per request via the ``set_level``
-method::
-
- from django.contrib import messages
-
- # Change the messages level to ensure the debug message is added.
- messages.set_level(request, messages.DEBUG)
- messages.debug(request, 'Test message...')
-
- # In another request, record only messages with a level of WARNING and higher
- messages.set_level(request, messages.WARNING)
- messages.success(request, 'Your profile was updated.') # ignored
- messages.warning(request, 'Your account is about to expire.') # recorded
-
- # Set the messages level back to default.
- messages.set_level(request, None)
-
-Similarly, the current effective level can be retrieved with ``get_level``::
-
- from django.contrib import messages
- current_level = messages.get_level(request)
-
-For more information on how the minimum recorded level functions, see
-`Message levels`_ above.
-
-Adding extra message tags
--------------------------
-
-For more direct control over message tags, you can optionally provide a string
-containing extra tags to any of the add methods::
-
- messages.add_message(request, messages.INFO, 'Over 9000!',
- extra_tags='dragonball')
- messages.error(request, 'Email box full', extra_tags='email')
-
-Extra tags are added before the default tag for that level and are space
-separated.
-
-Failing silently when the message framework is disabled
--------------------------------------------------------
-
-If you're writing a reusable app (or other piece of code) and want to include
-messaging functionality, but don't want to require your users to enable it
-if they don't want to, you may pass an additional keyword argument
-``fail_silently=True`` to any of the ``add_message`` family of methods. For
-example::
-
- messages.add_message(request, messages.SUCCESS, 'Profile details updated.',
- fail_silently=True)
- messages.info(request, 'Hello world.', fail_silently=True)
-
-Internally, Django uses this functionality in the create, update, and delete
-:doc:`generic views </topics/http/generic-views>` so that they work even if the
-message framework is disabled.
-
-.. note::
- Setting ``fail_silently=True`` only hides the ``MessageFailure`` that would
- otherwise occur when the messages framework disabled and one attempts to
- use one of the ``add_message`` family of methods. It does not hide failures
- that may occur for other reasons.
-
-Expiration of messages
-======================
-
-The messages are marked to be cleared when the storage instance is iterated
-(and cleared when the response is processed).
-
-To avoid the messages being cleared, you can set the messages storage to
-``False`` after iterating::
-
- storage = messages.get_messages(request)
- for message in storage:
- do_something_with(message)
- storage.used = False
-
-Behavior of parallel requests
-=============================
-
-Due to the way cookies (and hence sessions) work, **the behavior of any
-backends that make use of cookies or sessions is undefined when the same
-client makes multiple requests that set or get messages in parallel**. For
-example, if a client initiates a request that creates a message in one window
-(or tab) and then another that fetches any uniterated messages in another
-window, before the first window redirects, the message may appear in the
-second window instead of the first window where it may be expected.
-
-In short, when multiple simultaneous requests from the same client are
-involved, messages are not guaranteed to be delivered to the same window that
-created them nor, in some cases, at all. Note that this is typically not a
-problem in most applications and will become a non-issue in HTML5, where each
-window/tab will have its own browsing context.
-
-Settings
-========
-
-A few :doc:`Django settings </ref/settings>` give you control over message
-behavior:
-
-MESSAGE_LEVEL
--------------
-
-Default: ``messages.INFO``
-
-This sets the minimum message that will be saved in the message storage. See
-`Message levels`_ above for more details.
-
-.. admonition:: Important
-
- If you override ``MESSAGE_LEVEL`` in your settings file and rely on any of
- the built-in constants, you must import the constants module directly to
- avoid the potential for circular imports, e.g.::
-
- from django.contrib.messages import constants as message_constants
- MESSAGE_LEVEL = message_constants.DEBUG
-
- If desired, you may specify the numeric values for the constants directly
- according to the values in the above :ref:`constants table
- <message-level-constants>`.
-
-MESSAGE_STORAGE
----------------
-
-Default: ``'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'``
-
-Controls where Django stores message data. Valid values are:
-
- * ``'django.contrib.messages.storage.fallback.FallbackStorage'``
- * ``'django.contrib.messages.storage.session.SessionStorage'``
- * ``'django.contrib.messages.storage.cookie.CookieStorage'``
- * ``'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'``
-
-See `Storage backends`_ for more details.
-
-MESSAGE_TAGS
-------------
-
-Default::
-
- {messages.DEBUG: 'debug',
- messages.INFO: 'info',
- messages.SUCCESS: 'success',
- messages.WARNING: 'warning',
- messages.ERROR: 'error',}
-
-This sets the mapping of message level to message tag, which is typically
-rendered as a CSS class in HTML. If you specify a value, it will extend
-the default. This means you only have to specify those values which you need
-to override. See `Displaying messages`_ above for more details.
-
-.. admonition:: Important
-
- If you override ``MESSAGE_TAGS`` in your settings file and rely on any of
- the built-in constants, you must import the ``constants`` module directly to
- avoid the potential for circular imports, e.g.::
-
- from django.contrib.messages import constants as message_constants
- MESSAGE_TAGS = {message_constants.INFO: ''}
-
- If desired, you may specify the numeric values for the constants directly
- according to the values in the above :ref:`constants table
- <message-level-constants>`.
-
-.. _Django settings: ../settings/
diff --git a/parts/django/docs/ref/contrib/redirects.txt b/parts/django/docs/ref/contrib/redirects.txt
deleted file mode 100644
index f1a58cb..0000000
--- a/parts/django/docs/ref/contrib/redirects.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-=================
-The redirects app
-=================
-
-.. module:: django.contrib.redirects
- :synopsis: A framework for managing redirects.
-
-Django comes with an optional redirects application. It lets you store simple
-redirects in a database and handles the redirecting for you.
-
-Installation
-============
-
-To install the redirects app, follow these steps:
-
- 1. Add ``'django.contrib.redirects'`` to your :setting:`INSTALLED_APPS`
- setting.
- 2. Add ``'django.contrib.redirects.middleware.RedirectFallbackMiddleware'``
- to your :setting:`MIDDLEWARE_CLASSES` setting.
- 3. Run the command :djadmin:`manage.py syncdb <syncdb>`.
-
-How it works
-============
-
-``manage.py syncdb`` creates a ``django_redirect`` table in your database. This
-is a simple lookup table with ``site_id``, ``old_path`` and ``new_path`` fields.
-
-The ``RedirectFallbackMiddleware`` does all of the work. Each time any Django
-application raises a 404 error, this middleware checks the redirects database
-for the requested URL as a last resort. Specifically, it checks for a redirect
-with the given ``old_path`` with a site ID that corresponds to the
-:setting:`SITE_ID` setting.
-
- * If it finds a match, and ``new_path`` is not empty, it redirects to
- ``new_path``.
- * If it finds a match, and ``new_path`` is empty, it sends a 410 ("Gone")
- HTTP header and empty (content-less) response.
- * If it doesn't find a match, the request continues to be processed as
- usual.
-
-The middleware only gets activated for 404s -- not for 500s or responses of any
-other status code.
-
-Note that the order of :setting:`MIDDLEWARE_CLASSES` matters. Generally, you
-can put ``RedirectFallbackMiddleware`` at the end of the list, because it's a
-last resort.
-
-For more on middleware, read the :doc:`middleware docs
-</topics/http/middleware>`.
-
-How to add, change and delete redirects
-=======================================
-
-Via the admin interface
------------------------
-
-If you've activated the automatic Django admin interface, you should see a
-"Redirects" section on the admin index page. Edit redirects as you edit any
-other object in the system.
-
-Via the Python API
-------------------
-
-.. class:: models.Redirect
-
- Redirects are represented by a standard :doc:`Django model </topics/db/models>`,
- which lives in `django/contrib/redirects/models.py`_. You can access redirect
- objects via the :doc:`Django database API </topics/db/queries>`.
-
-.. _django/contrib/redirects/models.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/redirects/models.py
diff --git a/parts/django/docs/ref/contrib/sitemaps.txt b/parts/django/docs/ref/contrib/sitemaps.txt
deleted file mode 100644
index eb29c6c..0000000
--- a/parts/django/docs/ref/contrib/sitemaps.txt
+++ /dev/null
@@ -1,351 +0,0 @@
-=====================
-The sitemap framework
-=====================
-
-.. module:: django.contrib.sitemaps
- :synopsis: A framework for generating Google sitemap XML files.
-
-Django comes with a high-level sitemap-generating framework that makes
-creating sitemap_ XML files easy.
-
-.. _sitemap: http://www.sitemaps.org/
-
-Overview
-========
-
-A sitemap is an XML file on your Web site that tells search-engine indexers how
-frequently your pages change and how "important" certain pages are in relation
-to other pages on your site. This information helps search engines index your
-site.
-
-The Django sitemap framework automates the creation of this XML file by letting
-you express this information in Python code.
-
-It works much like Django's :doc:`syndication framework
-</ref/contrib/syndication>`. To create a sitemap, just write a
-:class:`~django.contrib.sitemaps.Sitemap` class and point to it in your
-:doc:`URLconf </topics/http/urls>`.
-
-Installation
-============
-
-To install the sitemap app, follow these steps:
-
- 1. Add ``'django.contrib.sitemaps'`` to your :setting:`INSTALLED_APPS`
- setting.
-
- 2. Make sure ``'django.template.loaders.app_directories.Loader'``
- is in your :setting:`TEMPLATE_LOADERS` setting. It's in there by default,
- so you'll only need to change this if you've changed that setting.
-
- 3. Make sure you've installed the
- :mod:`sites framework <django.contrib.sites>`.
-
-(Note: The sitemap application doesn't install any database tables. The only
-reason it needs to go into :setting:`INSTALLED_APPS` is so that the
-:func:`~django.template.loaders.app_directories.Loader` template
-loader can find the default templates.)
-
-Initialization
-==============
-
-To activate sitemap generation on your Django site, add this line to your
-:doc:`URLconf </topics/http/urls>`::
-
- (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
-
-This tells Django to build a sitemap when a client accesses :file:`/sitemap.xml`.
-
-The name of the sitemap file is not important, but the location is. Search
-engines will only index links in your sitemap for the current URL level and
-below. For instance, if :file:`sitemap.xml` lives in your root directory, it may
-reference any URL in your site. However, if your sitemap lives at
-:file:`/content/sitemap.xml`, it may only reference URLs that begin with
-:file:`/content/`.
-
-The sitemap view takes an extra, required argument: ``{'sitemaps': sitemaps}``.
-``sitemaps`` should be a dictionary that maps a short section label (e.g.,
-``blog`` or ``news``) to its :class:`~django.contrib.sitemaps.Sitemap` class
-(e.g., ``BlogSitemap`` or ``NewsSitemap``). It may also map to an *instance* of
-a :class:`~django.contrib.sitemaps.Sitemap` class (e.g.,
-``BlogSitemap(some_var)``).
-
-Sitemap classes
-===============
-
-A :class:`~django.contrib.sitemaps.Sitemap` class is a simple Python
-class that represents a "section" of entries in your sitemap. For example,
-one :class:`~django.contrib.sitemaps.Sitemap` class could represent
-all the entries of your Weblog, while another could represent all of the
-events in your events calendar.
-
-In the simplest case, all these sections get lumped together into one
-:file:`sitemap.xml`, but it's also possible to use the framework to generate a
-sitemap index that references individual sitemap files, one per section. (See
-`Creating a sitemap index`_ below.)
-
-:class:`~django.contrib.sitemaps.Sitemap` classes must subclass
-``django.contrib.sitemaps.Sitemap``. They can live anywhere in your codebase.
-
-A simple example
-================
-
-Let's assume you have a blog system, with an ``Entry`` model, and you want your
-sitemap to include all the links to your individual blog entries. Here's how
-your sitemap class might look::
-
- from django.contrib.sitemaps import Sitemap
- from blog.models import Entry
-
- class BlogSitemap(Sitemap):
- changefreq = "never"
- priority = 0.5
-
- def items(self):
- return Entry.objects.filter(is_draft=False)
-
- def lastmod(self, obj):
- return obj.pub_date
-
-Note:
-
- * :attr:`~Sitemap.changefreq` and :attr:`~Sitemap.priority` are class
- attributes corresponding to ``<changefreq>`` and ``<priority>`` elements,
- respectively. They can be made callable as functions, as
- :attr:`~Sitemap.lastmod` was in the example.
- * :attr:`~Sitemap.items()` is simply a method that returns a list of
- objects. The objects returned will get passed to any callable methods
- corresponding to a sitemap property (:attr:`~Sitemap.location`,
- :attr:`~Sitemap.lastmod`, :attr:`~Sitemap.changefreq`, and
- :attr:`~Sitemap.priority`).
- * :attr:`~Sitemap.lastmod` should return a Python ``datetime`` object.
- * There is no :attr:`~Sitemap.location` method in this example, but you
- can provide it in order to specify the URL for your object. By default,
- :attr:`~Sitemap.location()` calls ``get_absolute_url()`` on each object
- and returns the result.
-
-Sitemap class reference
-=======================
-
-.. class:: Sitemap
-
- A ``Sitemap`` class can define the following methods/attributes:
-
- .. attribute:: Sitemap.items
-
- **Required.** A method that returns a list of objects. The framework
- doesn't care what *type* of objects they are; all that matters is that
- these objects get passed to the :attr:`~Sitemap.location()`,
- :attr:`~Sitemap.lastmod()`, :attr:`~Sitemap.changefreq()` and
- :attr:`~Sitemap.priority()` methods.
-
- .. attribute:: Sitemap.location
-
- **Optional.** Either a method or attribute.
-
- If it's a method, it should return the absolute path for a given object
- as returned by :attr:`~Sitemap.items()`.
-
- If it's an attribute, its value should be a string representing an
- absolute path to use for *every* object returned by
- :attr:`~Sitemap.items()`.
-
- In both cases, "absolute path" means a URL that doesn't include the
- protocol or domain. Examples:
-
- * Good: :file:`'/foo/bar/'`
- * Bad: :file:`'example.com/foo/bar/'`
- * Bad: :file:`'http://example.com/foo/bar/'`
-
- If :attr:`~Sitemap.location` isn't provided, the framework will call
- the ``get_absolute_url()`` method on each object as returned by
- :attr:`~Sitemap.items()`.
-
- .. attribute:: Sitemap.lastmod
-
- **Optional.** Either a method or attribute.
-
- If it's a method, it should take one argument -- an object as returned by
- :attr:`~Sitemap.items()` -- and return that object's last-modified date/time, as a Python
- ``datetime.datetime`` object.
-
- If it's an attribute, its value should be a Python ``datetime.datetime`` object
- representing the last-modified date/time for *every* object returned by
- :attr:`~Sitemap.items()`.
-
- .. attribute:: Sitemap.changefreq
-
- **Optional.** Either a method or attribute.
-
- If it's a method, it should take one argument -- an object as returned by
- :attr:`~Sitemap.items()` -- and return that object's change frequency, as a Python string.
-
- If it's an attribute, its value should be a string representing the change
- frequency of *every* object returned by :attr:`~Sitemap.items()`.
-
- Possible values for :attr:`~Sitemap.changefreq`, whether you use a method or attribute, are:
-
- * ``'always'``
- * ``'hourly'``
- * ``'daily'``
- * ``'weekly'``
- * ``'monthly'``
- * ``'yearly'``
- * ``'never'``
-
- .. method:: Sitemap.priority
-
- **Optional.** Either a method or attribute.
-
- If it's a method, it should take one argument -- an object as returned by
- :attr:`~Sitemap.items()` -- and return that object's priority, as either a string or float.
-
- If it's an attribute, its value should be either a string or float representing
- the priority of *every* object returned by :attr:`~Sitemap.items()`.
-
- Example values for :attr:`~Sitemap.priority`: ``0.4``, ``1.0``. The default priority of a
- page is ``0.5``. See the `sitemaps.org documentation`_ for more.
-
- .. _sitemaps.org documentation: http://www.sitemaps.org/protocol.html#prioritydef
-
-Shortcuts
-=========
-
-The sitemap framework provides a couple convenience classes for common cases:
-
-.. class:: FlatPageSitemap
-
- The :class:`django.contrib.sitemaps.FlatPageSitemap` class looks at all
- publicly visible :mod:`flatpages <django.contrib.flatpages>`
- defined for the current :setting:`SITE_ID` (see the
- :mod:`sites documentation <django.contrib.sites>`) and
- creates an entry in the sitemap. These entries include only the
- :attr:`~Sitemap.location` attribute -- not :attr:`~Sitemap.lastmod`,
- :attr:`~Sitemap.changefreq` or :attr:`~Sitemap.priority`.
-
-.. class:: GenericSitemap
-
- The :class:`django.contrib.sitemaps.GenericSitemap` class works with any
- :doc:`generic views </ref/generic-views>` you already have.
- To use it, create an instance, passing in the same :data:`info_dict` you pass to
- the generic views. The only requirement is that the dictionary have a
- :data:`queryset` entry. It may also have a :data:`date_field` entry that specifies a
- date field for objects retrieved from the :data:`queryset`. This will be used for
- the :attr:`~Sitemap.lastmod` attribute in the generated sitemap. You may
- also pass :attr:`~Sitemap.priority` and :attr:`~Sitemap.changefreq`
- keyword arguments to the :class:`~django.contrib.sitemaps.GenericSitemap`
- constructor to specify these attributes for all URLs.
-
-Example
--------
-
-Here's an example of a :doc:`URLconf </topics/http/urls>` using both::
-
- from django.conf.urls.defaults import *
- from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap
- from blog.models import Entry
-
- info_dict = {
- 'queryset': Entry.objects.all(),
- 'date_field': 'pub_date',
- }
-
- sitemaps = {
- 'flatpages': FlatPageSitemap,
- 'blog': GenericSitemap(info_dict, priority=0.6),
- }
-
- urlpatterns = patterns('',
- # some generic view using info_dict
- # ...
-
- # the sitemap
- (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
- )
-
-.. _URLconf: ../url_dispatch/
-
-Creating a sitemap index
-========================
-
-The sitemap framework also has the ability to create a sitemap index that
-references individual sitemap files, one per each section defined in your
-:data:`sitemaps` dictionary. The only differences in usage are:
-
- * You use two views in your URLconf: :func:`django.contrib.sitemaps.views.index`
- and :func:`django.contrib.sitemaps.views.sitemap`.
- * The :func:`django.contrib.sitemaps.views.sitemap` view should take a
- :data:`section` keyword argument.
-
-Here's what the relevant URLconf lines would look like for the example above::
-
- (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),
- (r'^sitemap-(?P<section>.+)\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
-
-This will automatically generate a :file:`sitemap.xml` file that references both
-:file:`sitemap-flatpages.xml` and :file:`sitemap-blog.xml`. The
-:class:`~django.contrib.sitemaps.Sitemap` classes and the :data:`sitemaps` dict
-don't change at all.
-
-You should create an index file if one of your sitemaps has more than 50,000
-URLs. In this case, Django will automatically paginate the sitemap, and the
-index will reflect that.
-
-Pinging Google
-==============
-
-You may want to "ping" Google when your sitemap changes, to let it know to
-reindex your site. The sitemaps framework provides a function to do just
-that: :func:`django.contrib.sitemaps.ping_google()`.
-
-.. function:: ping_google
-
- :func:`ping_google` takes an optional argument, :data:`sitemap_url`,
- which should be the absolute path to your site's sitemap (e.g.,
- :file:`'/sitemap.xml'`). If this argument isn't provided,
- :func:`ping_google` will attempt to figure out your
- sitemap by performing a reverse looking in your URLconf.
-
- :func:`ping_google` raises the exception
- :exc:`django.contrib.sitemaps.SitemapNotFound` if it cannot determine your
- sitemap URL.
-
-.. admonition:: Register with Google first!
-
- The :func:`ping_google` command only works if you have registered your
- site with `Google Webmaster Tools`_.
-
-.. _`Google Webmaster Tools`: http://www.google.com/webmasters/tools/
-
-One useful way to call :func:`ping_google` is from a model's ``save()``
-method::
-
- from django.contrib.sitemaps import ping_google
-
- class Entry(models.Model):
- # ...
- def save(self, force_insert=False, force_update=False):
- super(Entry, self).save(force_insert, force_update)
- try:
- ping_google()
- except Exception:
- # Bare 'except' because we could get a variety
- # of HTTP-related exceptions.
- pass
-
-A more efficient solution, however, would be to call :func:`ping_google` from a
-cron script, or some other scheduled task. The function makes an HTTP request
-to Google's servers, so you may not want to introduce that network overhead
-each time you call ``save()``.
-
-Pinging Google via `manage.py`
-------------------------------
-
-.. django-admin:: ping_google
-
-.. versionadded:: 1.0
-
-Once the sitemaps application is added to your project, you may also
-ping Google using the ``ping_google`` management command::
-
- python manage.py ping_google [/sitemap.xml]
diff --git a/parts/django/docs/ref/contrib/sites.txt b/parts/django/docs/ref/contrib/sites.txt
deleted file mode 100644
index 6d795d0..0000000
--- a/parts/django/docs/ref/contrib/sites.txt
+++ /dev/null
@@ -1,415 +0,0 @@
-=====================
-The "sites" framework
-=====================
-
-.. module:: django.contrib.sites
- :synopsis: Lets you operate multiple Web sites from the same database and
- Django project
-
-Django comes with an optional "sites" framework. It's a hook for associating
-objects and functionality to particular Web sites, and it's a holding place for
-the domain names and "verbose" names of your Django-powered sites.
-
-Use it if your single Django installation powers more than one site and you
-need to differentiate between those sites in some way.
-
-The whole sites framework is based on a simple model:
-
-.. class:: django.contrib.sites.models.Site
-
-This model has :attr:`~django.contrib.sites.models.Site.domain` and
-:attr:`~django.contrib.sites.models.Site.name` fields. The :setting:`SITE_ID`
-setting specifies the database ID of the
-:class:`~django.contrib.sites.models.Site` object associated with that
-particular settings file.
-
-How you use this is up to you, but Django uses it in a couple of ways
-automatically via simple conventions.
-
-Example usage
-=============
-
-Why would you use sites? It's best explained through examples.
-
-Associating content with multiple sites
----------------------------------------
-
-The Django-powered sites LJWorld.com_ and Lawrence.com_ are operated by the
-same news organization -- the Lawrence Journal-World newspaper in Lawrence,
-Kansas. LJWorld.com focuses on news, while Lawrence.com focuses on local
-entertainment. But sometimes editors want to publish an article on *both*
-sites.
-
-The brain-dead way of solving the problem would be to require site producers to
-publish the same story twice: once for LJWorld.com and again for Lawrence.com.
-But that's inefficient for site producers, and it's redundant to store
-multiple copies of the same story in the database.
-
-The better solution is simple: Both sites use the same article database, and an
-article is associated with one or more sites. In Django model terminology,
-that's represented by a :class:`~django.db.models.ManyToManyField` in the
-``Article`` model::
-
- from django.db import models
- from django.contrib.sites.models import Site
-
- class Article(models.Model):
- headline = models.CharField(max_length=200)
- # ...
- sites = models.ManyToManyField(Site)
-
-This accomplishes several things quite nicely:
-
- * It lets the site producers edit all content -- on both sites -- in a
- single interface (the Django admin).
-
- * It means the same story doesn't have to be published twice in the
- database; it only has a single record in the database.
-
- * It lets the site developers use the same Django view code for both sites.
- The view code that displays a given story just checks to make sure the
- requested story is on the current site. It looks something like this::
-
- from django.conf import settings
-
- def article_detail(request, article_id):
- try:
- a = Article.objects.get(id=article_id, sites__id__exact=settings.SITE_ID)
- except Article.DoesNotExist:
- raise Http404
- # ...
-
-.. _ljworld.com: http://www.ljworld.com/
-.. _lawrence.com: http://www.lawrence.com/
-
-Associating content with a single site
---------------------------------------
-
-Similarly, you can associate a model to the :class:`~django.contrib.sites.models.Site`
-model in a many-to-one relationship, using
-:class:`~django.db.models.fields.related.ForeignKey`.
-
-For example, if an article is only allowed on a single site, you'd use a model
-like this::
-
- from django.db import models
- from django.contrib.sites.models import Site
-
- class Article(models.Model):
- headline = models.CharField(max_length=200)
- # ...
- site = models.ForeignKey(Site)
-
-This has the same benefits as described in the last section.
-
-Hooking into the current site from views
-----------------------------------------
-
-You can use the sites framework in your Django views to do
-particular things based on the site in which the view is being called.
-For example::
-
- from django.conf import settings
-
- def my_view(request):
- if settings.SITE_ID == 3:
- # Do something.
- else:
- # Do something else.
-
-Of course, it's ugly to hard-code the site IDs like that. This sort of
-hard-coding is best for hackish fixes that you need done quickly. A slightly
-cleaner way of accomplishing the same thing is to check the current site's
-domain::
-
- from django.conf import settings
- from django.contrib.sites.models import Site
-
- def my_view(request):
- current_site = Site.objects.get(id=settings.SITE_ID)
- if current_site.domain == 'foo.com':
- # Do something
- else:
- # Do something else.
-
-The idiom of retrieving the :class:`~django.contrib.sites.models.Site` object
-for the value of :setting:`settings.SITE_ID <SITE_ID>` is quite common, so
-the :class:`~django.contrib.sites.models.Site` model's manager has a
-``get_current()`` method. This example is equivalent to the previous one::
-
- from django.contrib.sites.models import Site
-
- def my_view(request):
- current_site = Site.objects.get_current()
- if current_site.domain == 'foo.com':
- # Do something
- else:
- # Do something else.
-
-.. versionchanged:: 1.3
-
-For code which relies on getting the current domain but cannot be certain
-that the sites framework will be installed for any given project, there is a
-utility function :func:`~django.contrib.sites.models.get_current_site` that
-takes a request object as an argument and returns either a Site instance (if
-the sites framework is installed) or a RequestSite instance (if it is not).
-This allows loose coupling with the sites framework and provides a usable
-fallback for cases where it is not installed.
-
-Getting the current domain for display
---------------------------------------
-
-LJWorld.com and Lawrence.com both have e-mail alert functionality, which lets
-readers sign up to get notifications when news happens. It's pretty basic: A
-reader signs up on a Web form, and he immediately gets an e-mail saying,
-"Thanks for your subscription."
-
-It'd be inefficient and redundant to implement this signup-processing code
-twice, so the sites use the same code behind the scenes. But the "thank you for
-signing up" notice needs to be different for each site. By using
-:class:`~django.contrib.sites.models.Site`
-objects, we can abstract the "thank you" notice to use the values of the
-current site's :attr:`~django.contrib.sites.models.Site.name` and
-:attr:`~django.contrib.sites.models.Site.domain`.
-
-Here's an example of what the form-handling view looks like::
-
- from django.contrib.sites.models import Site
- from django.core.mail import send_mail
-
- def register_for_newsletter(request):
- # Check form values, etc., and subscribe the user.
- # ...
-
- current_site = Site.objects.get_current()
- send_mail('Thanks for subscribing to %s alerts' % current_site.name,
- 'Thanks for your subscription. We appreciate it.\n\n-The %s team.' % current_site.name,
- 'editor@%s' % current_site.domain,
- [user.email])
-
- # ...
-
-On Lawrence.com, this e-mail has the subject line "Thanks for subscribing to
-lawrence.com alerts." On LJWorld.com, the e-mail has the subject "Thanks for
-subscribing to LJWorld.com alerts." Same goes for the e-mail's message body.
-
-Note that an even more flexible (but more heavyweight) way of doing this would
-be to use Django's template system. Assuming Lawrence.com and LJWorld.com have
-different template directories (:setting:`TEMPLATE_DIRS`), you could simply farm out
-to the template system like so::
-
- from django.core.mail import send_mail
- from django.template import loader, Context
-
- def register_for_newsletter(request):
- # Check form values, etc., and subscribe the user.
- # ...
-
- subject = loader.get_template('alerts/subject.txt').render(Context({}))
- message = loader.get_template('alerts/message.txt').render(Context({}))
- send_mail(subject, message, 'editor@ljworld.com', [user.email])
-
- # ...
-
-In this case, you'd have to create :file:`subject.txt` and :file:`message.txt` template
-files for both the LJWorld.com and Lawrence.com template directories. That
-gives you more flexibility, but it's also more complex.
-
-It's a good idea to exploit the :class:`~django.contrib.sites.models.Site`
-objects as much as possible, to remove unneeded complexity and redundancy.
-
-Getting the current domain for full URLs
-----------------------------------------
-
-Django's ``get_absolute_url()`` convention is nice for getting your objects'
-URL without the domain name, but in some cases you might want to display the
-full URL -- with ``http://`` and the domain and everything -- for an object.
-To do this, you can use the sites framework. A simple example::
-
- >>> from django.contrib.sites.models import Site
- >>> obj = MyModel.objects.get(id=3)
- >>> obj.get_absolute_url()
- '/mymodel/objects/3/'
- >>> Site.objects.get_current().domain
- 'example.com'
- >>> 'http://%s%s' % (Site.objects.get_current().domain, obj.get_absolute_url())
- 'http://example.com/mymodel/objects/3/'
-
-Caching the current ``Site`` object
-===================================
-
-.. versionadded:: 1.0
-
-As the current site is stored in the database, each call to
-``Site.objects.get_current()`` could result in a database query. But Django is a
-little cleverer than that: on the first request, the current site is cached, and
-any subsequent call returns the cached data instead of hitting the database.
-
-If for any reason you want to force a database query, you can tell Django to
-clear the cache using ``Site.objects.clear_cache()``::
-
- # First call; current site fetched from database.
- current_site = Site.objects.get_current()
- # ...
-
- # Second call; current site fetched from cache.
- current_site = Site.objects.get_current()
- # ...
-
- # Force a database query for the third call.
- Site.objects.clear_cache()
- current_site = Site.objects.get_current()
-
-The ``CurrentSiteManager``
-==========================
-
-.. class:: django.contrib.sites.managers.CurrentSiteManager
-
-If :class:`~django.contrib.sites.models.Site` plays a key role in your
-application, consider using the helpful
-:class:`~django.contrib.sites.managers.CurrentSiteManager` in your
-model(s). It's a model :doc:`manager </topics/db/managers>` that
-automatically filters its queries to include only objects associated
-with the current :class:`~django.contrib.sites.models.Site`.
-
-Use :class:`~django.contrib.sites.managers.CurrentSiteManager` by adding it to
-your model explicitly. For example::
-
- from django.db import models
- from django.contrib.sites.models import Site
- from django.contrib.sites.managers import CurrentSiteManager
-
- class Photo(models.Model):
- photo = models.FileField(upload_to='/home/photos')
- photographer_name = models.CharField(max_length=100)
- pub_date = models.DateField()
- site = models.ForeignKey(Site)
- objects = models.Manager()
- on_site = CurrentSiteManager()
-
-With this model, ``Photo.objects.all()`` will return all ``Photo`` objects in
-the database, but ``Photo.on_site.all()`` will return only the ``Photo`` objects
-associated with the current site, according to the :setting:`SITE_ID` setting.
-
-Put another way, these two statements are equivalent::
-
- Photo.objects.filter(site=settings.SITE_ID)
- Photo.on_site.all()
-
-How did :class:`~django.contrib.sites.managers.CurrentSiteManager`
-know which field of ``Photo`` was the
-:class:`~django.contrib.sites.models.Site`? By default,
-:class:`~django.contrib.sites.managers.CurrentSiteManager` looks for a
-either a :class:`~django.db.models.fields.related.ForeignKey` called
-``site`` or a
-:class:`~django.db.models.fields.related.ManyToManyField` called
-``sites`` to filter on. If you use a field named something other than
-``site`` or ``sites`` to identify which
-:class:`~django.contrib.sites.models.Site` objects your object is
-related to, then you need to explicitly pass the custom field name as
-a parameter to
-:class:`~django.contrib.sites.managers.CurrentSiteManager` on your
-model. The following model, which has a field called ``publish_on``,
-demonstrates this::
-
- from django.db import models
- from django.contrib.sites.models import Site
- from django.contrib.sites.managers import CurrentSiteManager
-
- class Photo(models.Model):
- photo = models.FileField(upload_to='/home/photos')
- photographer_name = models.CharField(max_length=100)
- pub_date = models.DateField()
- publish_on = models.ForeignKey(Site)
- objects = models.Manager()
- on_site = CurrentSiteManager('publish_on')
-
-If you attempt to use :class:`~django.contrib.sites.managers.CurrentSiteManager`
-and pass a field name that doesn't exist, Django will raise a :exc:`ValueError`.
-
-Finally, note that you'll probably want to keep a normal
-(non-site-specific) ``Manager`` on your model, even if you use
-:class:`~django.contrib.sites.managers.CurrentSiteManager`. As
-explained in the :doc:`manager documentation </topics/db/managers>`, if
-you define a manager manually, then Django won't create the automatic
-``objects = models.Manager()`` manager for you. Also note that certain
-parts of Django -- namely, the Django admin site and generic views --
-use whichever manager is defined *first* in the model, so if you want
-your admin site to have access to all objects (not just site-specific
-ones), put ``objects = models.Manager()`` in your model, before you
-define :class:`~django.contrib.sites.managers.CurrentSiteManager`.
-
-How Django uses the sites framework
-===================================
-
-Although it's not required that you use the sites framework, it's strongly
-encouraged, because Django takes advantage of it in a few places. Even if your
-Django installation is powering only a single site, you should take the two
-seconds to create the site object with your ``domain`` and ``name``, and point
-to its ID in your :setting:`SITE_ID` setting.
-
-Here's how Django uses the sites framework:
-
-* In the :mod:`redirects framework <django.contrib.redirects>`, each
- redirect object is associated with a particular site. When Django searches
- for a redirect, it takes into account the current :setting:`SITE_ID`.
-
-* In the comments framework, each comment is associated with a particular
- site. When a comment is posted, its
- :class:`~django.contrib.sites.models.Site` is set to the current
- :setting:`SITE_ID`, and when comments are listed via the appropriate
- template tag, only the comments for the current site are displayed.
-
-* In the :mod:`flatpages framework <django.contrib.flatpages>`, each
- flatpage is associated with a particular site. When a flatpage is created,
- you specify its :class:`~django.contrib.sites.models.Site`, and the
- :class:`~django.contrib.flatpages.middleware.FlatpageFallbackMiddleware`
- checks the current :setting:`SITE_ID` in retrieving flatpages to display.
-
-* In the :mod:`syndication framework <django.contrib.syndication>`, the
- templates for ``title`` and ``description`` automatically have access to a
- variable ``{{ site }}``, which is the
- :class:`~django.contrib.sites.models.Site` object representing the current
- site. Also, the hook for providing item URLs will use the ``domain`` from
- the current :class:`~django.contrib.sites.models.Site` object if you don't
- specify a fully-qualified domain.
-
-* In the :mod:`authentication framework <django.contrib.auth>`, the
- :func:`django.contrib.auth.views.login` view passes the current
- :class:`~django.contrib.sites.models.Site` name to the template as
- ``{{ site_name }}``.
-
-* The shortcut view (:func:`django.views.defaults.shortcut`) uses the domain
- of the current :class:`~django.contrib.sites.models.Site` object when
- calculating an object's URL.
-
-* In the admin framework, the "view on site" link uses the current
- :class:`~django.contrib.sites.models.Site` to work out the domain for the
- site that it will redirect to.
-
-
-``RequestSite`` objects
-=======================
-
-.. _requestsite-objects:
-
-.. versionadded:: 1.0
-
-Some :doc:`django.contrib </ref/contrib/index>` applications take advantage of
-the sites framework but are architected in a way that doesn't *require* the
-sites framework to be installed in your database. (Some people don't want to, or
-just aren't *able* to install the extra database table that the sites framework
-requires.) For those cases, the framework provides a
-:class:`~django.contrib.sites.models.RequestSite` class, which can be used as a
-fallback when the database-backed sites framework is not available.
-
-A :class:`~django.contrib.sites.models.RequestSite` object has a similar
-interface to a normal :class:`~django.contrib.sites.models.Site` object, except
-its :meth:`~django.contrib.sites.models.RequestSite.__init__()` method takes an
-:class:`~django.http.HttpRequest` object. It's able to deduce the
-:attr:`~django.contrib.sites.models.RequestSite.domain` and
-:attr:`~django.contrib.sites.models.RequestSite.name` by looking at the
-request's domain. It has :meth:`~django.contrib.sites.models.RequestSite.save()`
-and :meth:`~django.contrib.sites.models.RequestSite.delete()` methods to match
-the interface of :class:`~django.contrib.sites.models.Site`, but the methods
-raise :exc:`NotImplementedError`.
diff --git a/parts/django/docs/ref/contrib/syndication.txt b/parts/django/docs/ref/contrib/syndication.txt
deleted file mode 100644
index 04f14b5..0000000
--- a/parts/django/docs/ref/contrib/syndication.txt
+++ /dev/null
@@ -1,949 +0,0 @@
-==============================
-The syndication feed framework
-==============================
-
-.. module:: django.contrib.syndication
- :synopsis: A framework for generating syndication feeds, in RSS and Atom,
- quite easily.
-
-Django comes with a high-level syndication-feed-generating framework
-that makes creating RSS_ and Atom_ feeds easy.
-
-To create any syndication feed, all you have to do is write a short
-Python class. You can create as many feeds as you want.
-
-Django also comes with a lower-level feed-generating API. Use this if
-you want to generate feeds outside of a Web context, or in some other
-lower-level way.
-
-.. _RSS: http://www.whatisrss.com/
-.. _Atom: http://www.atomenabled.org/
-
-The high-level framework
-========================
-
-.. versionchanged:: 1.2
- The high-level feeds framework was refactored in Django 1.2. The
- pre-1.2 interface still exists, but it has been deprecated, and
- will be removed in Django 1.4. If you need to maintain an old-style
- Django feed, please consult the Django 1.1 documentation. For
- details on updating to use the new high-level feed framework, see
- the :ref:`Django 1.2 release notes <1.2-updating-feeds>`.
-
-Overview
---------
-
-The high-level feed-generating framework is supplied by the
-:class:`~django.contrib.syndication.views.Feed` class. To create a
-feed, write a :class:`~django.contrib.syndication.views.Feed` class
-and point to an instance of it in your :doc:`URLconf
-</topics/http/urls>`.
-
-Feed classes
-------------
-
-A :class:`~django.contrib.syndication.views.Feed` class is a Python
-class that represents a syndication feed. A feed can be simple (e.g.,
-a "site news" feed, or a basic feed displaying the latest entries of a
-blog) or more complex (e.g., a feed displaying all the blog entries in
-a particular category, where the category is variable).
-
-Feed classes subclass :class:`django.contrib.syndication.views.Feed`.
-They can live anywhere in your codebase.
-
-Instances of :class:`~django.contrib.syndication.views.Feed` classes
-are views which can be used in your :doc:`URLconf </topics/http/urls>`.
-
-A simple example
-----------------
-
-This simple example, taken from `chicagocrime.org`_, describes a feed of the
-latest five news items::
-
- from django.contrib.syndication.views import Feed
- from chicagocrime.models import NewsItem
-
- class LatestEntriesFeed(Feed):
- title = "Chicagocrime.org site news"
- link = "/sitenews/"
- description = "Updates on changes and additions to chicagocrime.org."
-
- def items(self):
- return NewsItem.objects.order_by('-pub_date')[:5]
-
- def item_title(self, item):
- return item.title
-
- def item_description(self, item):
- return item.description
-
-To connect a URL to this feed, put an instance of the Feed object in
-your :doc:`URLconf </topics/http/urls>`. For example::
-
- from django.conf.urls.defaults import *
- from myproject.feeds import LatestEntriesFeed
-
- urlpatterns = patterns('',
- # ...
- (r'^latest/feed/$', LatestEntriesFeed()),
- # ...
- )
-
-Note:
-
-* The Feed class subclasses :class:`django.contrib.syndication.views.Feed`.
-
-* :attr:`title`, :attr:`link` and :attr:`description` correspond to the
- standard RSS ``<title>``, ``<link>`` and ``<description>`` elements,
- respectively.
-
-* :meth:`items()` is, simply, a method that returns a list of objects that
- should be included in the feed as ``<item>`` elements. Although this
- example returns ``NewsItem`` objects using Django's
- :doc:`object-relational mapper </ref/models/querysets>`, :meth:`items()`
- doesn't have to return model instances. Although you get a few bits of
- functionality "for free" by using Django models, :meth:`items()` can
- return any type of object you want.
-
-* If you're creating an Atom feed, rather than an RSS feed, set the
- :attr:`subtitle` attribute instead of the :attr:`description` attribute.
- See `Publishing Atom and RSS feeds in tandem`_, later, for an example.
-
-One thing is left to do. In an RSS feed, each ``<item>`` has a ``<title>``,
-``<link>`` and ``<description>``. We need to tell the framework what data to put
-into those elements.
-
- * For the contents of ``<title>`` and ``<description>``, Django tries
- calling the methods :meth:`item_title()` and :meth:`item_description()` on
- the :class:`~django.contrib.syndication.views.Feed` class. They are passed
- a single parameter, :attr:`item`, which is the object itself. These are
- optional; by default, the unicode representation of the object is used for
- both.
-
- If you want to do any special formatting for either the title or
- description, :doc:`Django templates </topics/templates>` can be used
- instead. Their paths can be specified with the ``title_template`` and
- ``description_template`` attributes on the
- :class:`~django.contrib.syndication.views.Feed` class. The templates are
- rendered for each item and are passed two template context variables:
-
- * ``{{ obj }}`` -- The current object (one of whichever objects you
- returned in :meth:`items()`).
-
- * ``{{ site }}`` -- A :class:`django.contrib.sites.models.Site` object
- representing the current site. This is useful for ``{{ site.domain
- }}`` or ``{{ site.name }}``. If you do *not* have the Django sites
- framework installed, this will be set to a
- :class:`django.contrib.sites.models.RequestSite` object. See the
- :ref:`RequestSite section of the sites framework documentation
- <requestsite-objects>` for more.
-
- See `a complex example`_ below that uses a description template.
-
- * To specify the contents of ``<link>``, you have two options. For each item
- in :meth:`items()`, Django first tries calling the
- :meth:`item_link()` method on the
- :class:`~django.contrib.syndication.views.Feed` class. In a similar way to
- the title and description, it is passed it a single parameter,
- :attr:`item`. If that method doesn't exist, Django tries executing a
- ``get_absolute_url()`` method on that object. Both
- :meth:`get_absolute_url()` and :meth:`item_link()` should return the
- item's URL as a normal Python string. As with ``get_absolute_url()``, the
- result of :meth:`item_link()` will be included directly in the URL, so you
- are responsible for doing all necessary URL quoting and conversion to
- ASCII inside the method itself.
-
-.. _chicagocrime.org: http://www.chicagocrime.org/
-
-A complex example
------------------
-
-The framework also supports more complex feeds, via arguments.
-
-For example, `chicagocrime.org`_ offers an RSS feed of recent crimes for every
-police beat in Chicago. It'd be silly to create a separate
-:class:`~django.contrib.syndication.views.Feed` class for each police beat; that
-would violate the :ref:`DRY principle <dry>` and would couple data to
-programming logic. Instead, the syndication framework lets you access the
-arguments passed from your :doc:`URLconf </topics/http/urls>` so feeds can output
-items based on information in the feed's URL.
-
-On chicagocrime.org, the police-beat feeds are accessible via URLs like this:
-
- * :file:`/beats/613/rss/` -- Returns recent crimes for beat 613.
- * :file:`/beats/1424/rss/` -- Returns recent crimes for beat 1424.
-
-These can be matched with a :doc:`URLconf </topics/http/urls>` line such as::
-
- (r'^beats/(?P<beat_id>\d+)/rss/$', BeatFeed()),
-
-Like a view, the arguments in the URL are passed to the :meth:`get_object()`
-method along with the request object.
-
-.. versionchanged:: 1.2
- Prior to version 1.2, ``get_object()`` only accepted a ``bits`` argument.
-
-Here's the code for these beat-specific feeds::
-
- from django.contrib.syndication.views import FeedDoesNotExist
- from django.shortcuts import get_object_or_404
-
- class BeatFeed(Feed):
- description_template = 'feeds/beat_description.html'
-
- def get_object(self, request, beat_id):
- return get_object_or_404(Beat, pk=beat_id)
-
- def title(self, obj):
- return "Chicagocrime.org: Crimes for beat %s" % obj.beat
-
- def link(self, obj):
- return obj.get_absolute_url()
-
- def description(self, obj):
- return "Crimes recently reported in police beat %s" % obj.beat
-
- def items(self, obj):
- return Crime.objects.filter(beat=obj).order_by('-crime_date')[:30]
-
-To generate the feed's ``<title>``, ``<link>`` and ``<description>``, Django
-uses the :meth:`title()`, :meth:`link()` and :meth:`description()` methods. In
-the previous example, they were simple string class attributes, but this example
-illustrates that they can be either strings *or* methods. For each of
-:attr:`title`, :attr:`link` and :attr:`description`, Django follows this
-algorithm:
-
- * First, it tries to call a method, passing the ``obj`` argument, where
- ``obj`` is the object returned by :meth:`get_object()`.
-
- * Failing that, it tries to call a method with no arguments.
-
- * Failing that, it uses the class attribute.
-
-Also note that :meth:`items()` also follows the same algorithm -- first, it
-tries :meth:`items(obj)`, then :meth:`items()`, then finally an :attr:`items`
-class attribute (which should be a list).
-
-We are using a template for the item descriptions. It can be very simple:
-
-.. code-block:: html+django
-
- {{ obj.description }}
-
-However, you are free to add formatting as desired.
-
-The ``ExampleFeed`` class below gives full documentation on methods and
-attributes of :class:`~django.contrib.syndication.views.Feed` classes.
-
-Specifying the type of feed
----------------------------
-
-By default, feeds produced in this framework use RSS 2.0.
-
-To change that, add a ``feed_type`` attribute to your
-:class:`~django.contrib.syndication.views.Feed` class, like so::
-
- from django.utils.feedgenerator import Atom1Feed
-
- class MyFeed(Feed):
- feed_type = Atom1Feed
-
-Note that you set ``feed_type`` to a class object, not an instance.
-
-Currently available feed types are:
-
- * :class:`django.utils.feedgenerator.Rss201rev2Feed` (RSS 2.01. Default.)
- * :class:`django.utils.feedgenerator.RssUserland091Feed` (RSS 0.91.)
- * :class:`django.utils.feedgenerator.Atom1Feed` (Atom 1.0.)
-
-Enclosures
-----------
-
-To specify enclosures, such as those used in creating podcast feeds, use the
-:attr:`item_enclosure_url`, :attr:`item_enclosure_length` and
-:attr:`item_enclosure_mime_type` hooks. See the ``ExampleFeed`` class below for
-usage examples.
-
-Language
---------
-
-Feeds created by the syndication framework automatically include the
-appropriate ``<language>`` tag (RSS 2.0) or ``xml:lang`` attribute (Atom). This
-comes directly from your :setting:`LANGUAGE_CODE` setting.
-
-URLs
-----
-
-The :attr:`link` method/attribute can return either an absolute path (e.g.
-:file:`"/blog/"`) or a URL with the fully-qualified domain and protocol (e.g.
-``"http://www.example.com/blog/"``). If :attr:`link` doesn't return the domain,
-the syndication framework will insert the domain of the current site, according
-to your :setting:`SITE_ID setting <SITE_ID>`.
-
-Atom feeds require a ``<link rel="self">`` that defines the feed's current
-location. The syndication framework populates this automatically, using the
-domain of the current site according to the :setting:`SITE_ID` setting.
-
-Publishing Atom and RSS feeds in tandem
----------------------------------------
-
-Some developers like to make available both Atom *and* RSS versions of their
-feeds. That's easy to do with Django: Just create a subclass of your
-:class:`~django.contrib.syndication.views.Feed`
-class and set the :attr:`feed_type` to something different. Then update your
-URLconf to add the extra versions.
-
-Here's a full example::
-
- from django.contrib.syndication.views import Feed
- from chicagocrime.models import NewsItem
- from django.utils.feedgenerator import Atom1Feed
-
- class RssSiteNewsFeed(Feed):
- title = "Chicagocrime.org site news"
- link = "/sitenews/"
- description = "Updates on changes and additions to chicagocrime.org."
-
- def items(self):
- return NewsItem.objects.order_by('-pub_date')[:5]
-
- class AtomSiteNewsFeed(RssSiteNewsFeed):
- feed_type = Atom1Feed
- subtitle = RssSiteNewsFeed.description
-
-.. Note::
- In this example, the RSS feed uses a :attr:`description` while the Atom
- feed uses a :attr:`subtitle`. That's because Atom feeds don't provide for
- a feed-level "description," but they *do* provide for a "subtitle."
-
- If you provide a :attr:`description` in your
- :class:`~django.contrib.syndication.views.Feed` class, Django will *not*
- automatically put that into the :attr:`subtitle` element, because a
- subtitle and description are not necessarily the same thing. Instead, you
- should define a :attr:`subtitle` attribute.
-
- In the above example, we simply set the Atom feed's :attr:`subtitle` to the
- RSS feed's :attr:`description`, because it's quite short already.
-
-And the accompanying URLconf::
-
- from django.conf.urls.defaults import *
- from myproject.feeds import RssSiteNewsFeed, AtomSiteNewsFeed
-
- urlpatterns = patterns('',
- # ...
- (r'^sitenews/rss/$', RssSiteNewsFeed()),
- (r'^sitenews/atom/$', AtomSiteNewsFeed()),
- # ...
- )
-
-Feed class reference
---------------------
-
-.. class:: django.contrib.syndication.views.Feed
-
-This example illustrates all possible attributes and methods for a
-:class:`~django.contrib.syndication.views.Feed` class::
-
- from django.contrib.syndication.views import Feed
- from django.utils import feedgenerator
-
- class ExampleFeed(Feed):
-
- # FEED TYPE -- Optional. This should be a class that subclasses
- # django.utils.feedgenerator.SyndicationFeed. This designates
- # which type of feed this should be: RSS 2.0, Atom 1.0, etc. If
- # you don't specify feed_type, your feed will be RSS 2.0. This
- # should be a class, not an instance of the class.
-
- feed_type = feedgenerator.Rss201rev2Feed
-
- # TEMPLATE NAMES -- Optional. These should be strings
- # representing names of Django templates that the system should
- # use in rendering the title and description of your feed items.
- # Both are optional. If a template is not specified, the
- # item_title() or item_description() methods are used instead.
-
- title_template = None
- description_template = None
-
- # TITLE -- One of the following three is required. The framework
- # looks for them in this order.
-
- def title(self, obj):
- """
- Takes the object returned by get_object() and returns the
- feed's title as a normal Python string.
- """
-
- def title(self):
- """
- Returns the feed's title as a normal Python string.
- """
-
- title = 'foo' # Hard-coded title.
-
- # LINK -- One of the following three is required. The framework
- # looks for them in this order.
-
- def link(self, obj):
- """
- # Takes the object returned by get_object() and returns the feed's
- # link as a normal Python string.
- """
-
- def link(self):
- """
- Returns the feed's link as a normal Python string.
- """
-
- link = '/foo/bar/' # Hard-coded link.
-
- # GUID -- One of the following three is optional. The framework looks
- # for them in this order. This property is only used for Atom feeds
- # (where it is the feed-level ID element). If not provided, the feed
- # link is used as the ID.
-
- def feed_guid(self, obj):
- """
- Takes the object returned by get_object() and returns the globally
- unique ID for the feed as a normal Python string.
- """
-
- def feed_guid(self):
- """
- Returns the feed's globally unique ID as a normal Python string.
- """
-
- feed_guid = '/foo/bar/1234' # Hard-coded guid.
-
- # DESCRIPTION -- One of the following three is required. The framework
- # looks for them in this order.
-
- def description(self, obj):
- """
- Takes the object returned by get_object() and returns the feed's
- description as a normal Python string.
- """
-
- def description(self):
- """
- Returns the feed's description as a normal Python string.
- """
-
- description = 'Foo bar baz.' # Hard-coded description.
-
- # AUTHOR NAME --One of the following three is optional. The framework
- # looks for them in this order.
-
- def author_name(self, obj):
- """
- Takes the object returned by get_object() and returns the feed's
- author's name as a normal Python string.
- """
-
- def author_name(self):
- """
- Returns the feed's author's name as a normal Python string.
- """
-
- author_name = 'Sally Smith' # Hard-coded author name.
-
- # AUTHOR E-MAIL --One of the following three is optional. The framework
- # looks for them in this order.
-
- def author_email(self, obj):
- """
- Takes the object returned by get_object() and returns the feed's
- author's e-mail as a normal Python string.
- """
-
- def author_email(self):
- """
- Returns the feed's author's e-mail as a normal Python string.
- """
-
- author_email = 'test@example.com' # Hard-coded author e-mail.
-
- # AUTHOR LINK --One of the following three is optional. The framework
- # looks for them in this order. In each case, the URL should include
- # the "http://" and domain name.
-
- def author_link(self, obj):
- """
- Takes the object returned by get_object() and returns the feed's
- author's URL as a normal Python string.
- """
-
- def author_link(self):
- """
- Returns the feed's author's URL as a normal Python string.
- """
-
- author_link = 'http://www.example.com/' # Hard-coded author URL.
-
- # CATEGORIES -- One of the following three is optional. The framework
- # looks for them in this order. In each case, the method/attribute
- # should return an iterable object that returns strings.
-
- def categories(self, obj):
- """
- Takes the object returned by get_object() and returns the feed's
- categories as iterable over strings.
- """
-
- def categories(self):
- """
- Returns the feed's categories as iterable over strings.
- """
-
- categories = ("python", "django") # Hard-coded list of categories.
-
- # COPYRIGHT NOTICE -- One of the following three is optional. The
- # framework looks for them in this order.
-
- def feed_copyright(self, obj):
- """
- Takes the object returned by get_object() and returns the feed's
- copyright notice as a normal Python string.
- """
-
- def feed_copyright(self):
- """
- Returns the feed's copyright notice as a normal Python string.
- """
-
- feed_copyright = 'Copyright (c) 2007, Sally Smith' # Hard-coded copyright notice.
-
- # TTL -- One of the following three is optional. The framework looks
- # for them in this order. Ignored for Atom feeds.
-
- def ttl(self, obj):
- """
- Takes the object returned by get_object() and returns the feed's
- TTL (Time To Live) as a normal Python string.
- """
-
- def ttl(self):
- """
- Returns the feed's TTL as a normal Python string.
- """
-
- ttl = 600 # Hard-coded Time To Live.
-
- # ITEMS -- One of the following three is required. The framework looks
- # for them in this order.
-
- def items(self, obj):
- """
- Takes the object returned by get_object() and returns a list of
- items to publish in this feed.
- """
-
- def items(self):
- """
- Returns a list of items to publish in this feed.
- """
-
- items = ('Item 1', 'Item 2') # Hard-coded items.
-
- # GET_OBJECT -- This is required for feeds that publish different data
- # for different URL parameters. (See "A complex example" above.)
-
- def get_object(self, request, *args, **kwargs):
- """
- Takes the current request and the arguments from the URL, and
- returns an object represented by this feed. Raises
- django.core.exceptions.ObjectDoesNotExist on error.
- """
-
- # ITEM TITLE AND DESCRIPTION -- If title_template or
- # description_template are not defined, these are used instead. Both are
- # optional, by default they will use the unicode representation of the
- # item.
-
- def item_title(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- title as a normal Python string.
- """
-
- def item_title(self):
- """
- Returns the title for every item in the feed.
- """
-
- item_title = 'Breaking News: Nothing Happening' # Hard-coded title.
-
- def item_description(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- description as a normal Python string.
- """
-
- def item_description(self):
- """
- Returns the description for every item in the feed.
- """
-
- item_description = 'A description of the item.' # Hard-coded description.
-
- # ITEM LINK -- One of these three is required. The framework looks for
- # them in this order.
-
- # First, the framework tries the two methods below, in
- # order. Failing that, it falls back to the get_absolute_url()
- # method on each item returned by items().
-
- def item_link(self, item):
- """
- Takes an item, as returned by items(), and returns the item's URL.
- """
-
- def item_link(self):
- """
- Returns the URL for every item in the feed.
- """
-
- # ITEM_GUID -- The following method is optional. If not provided, the
- # item's link is used by default.
-
- def item_guid(self, obj):
- """
- Takes an item, as return by items(), and returns the item's ID.
- """
-
- # ITEM AUTHOR NAME -- One of the following three is optional. The
- # framework looks for them in this order.
-
- def item_author_name(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- author's name as a normal Python string.
- """
-
- def item_author_name(self):
- """
- Returns the author name for every item in the feed.
- """
-
- item_author_name = 'Sally Smith' # Hard-coded author name.
-
- # ITEM AUTHOR E-MAIL --One of the following three is optional. The
- # framework looks for them in this order.
- #
- # If you specify this, you must specify item_author_name.
-
- def item_author_email(self, obj):
- """
- Takes an item, as returned by items(), and returns the item's
- author's e-mail as a normal Python string.
- """
-
- def item_author_email(self):
- """
- Returns the author e-mail for every item in the feed.
- """
-
- item_author_email = 'test@example.com' # Hard-coded author e-mail.
-
- # ITEM AUTHOR LINK -- One of the following three is optional. The
- # framework looks for them in this order. In each case, the URL should
- # include the "http://" and domain name.
- #
- # If you specify this, you must specify item_author_name.
-
- def item_author_link(self, obj):
- """
- Takes an item, as returned by items(), and returns the item's
- author's URL as a normal Python string.
- """
-
- def item_author_link(self):
- """
- Returns the author URL for every item in the feed.
- """
-
- item_author_link = 'http://www.example.com/' # Hard-coded author URL.
-
- # ITEM ENCLOSURE URL -- One of these three is required if you're
- # publishing enclosures. The framework looks for them in this order.
-
- def item_enclosure_url(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- enclosure URL.
- """
-
- def item_enclosure_url(self):
- """
- Returns the enclosure URL for every item in the feed.
- """
-
- item_enclosure_url = "/foo/bar.mp3" # Hard-coded enclosure link.
-
- # ITEM ENCLOSURE LENGTH -- One of these three is required if you're
- # publishing enclosures. The framework looks for them in this order.
- # In each case, the returned value should be either an integer, or a
- # string representation of the integer, in bytes.
-
- def item_enclosure_length(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- enclosure length.
- """
-
- def item_enclosure_length(self):
- """
- Returns the enclosure length for every item in the feed.
- """
-
- item_enclosure_length = 32000 # Hard-coded enclosure length.
-
- # ITEM ENCLOSURE MIME TYPE -- One of these three is required if you're
- # publishing enclosures. The framework looks for them in this order.
-
- def item_enclosure_mime_type(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- enclosure MIME type.
- """
-
- def item_enclosure_mime_type(self):
- """
- Returns the enclosure MIME type for every item in the feed.
- """
-
- item_enclosure_mime_type = "audio/mpeg" # Hard-coded enclosure MIME type.
-
- # ITEM PUBDATE -- It's optional to use one of these three. This is a
- # hook that specifies how to get the pubdate for a given item.
- # In each case, the method/attribute should return a Python
- # datetime.datetime object.
-
- def item_pubdate(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- pubdate.
- """
-
- def item_pubdate(self):
- """
- Returns the pubdate for every item in the feed.
- """
-
- item_pubdate = datetime.datetime(2005, 5, 3) # Hard-coded pubdate.
-
- # ITEM CATEGORIES -- It's optional to use one of these three. This is
- # a hook that specifies how to get the list of categories for a given
- # item. In each case, the method/attribute should return an iterable
- # object that returns strings.
-
- def item_categories(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- categories.
- """
-
- def item_categories(self):
- """
- Returns the categories for every item in the feed.
- """
-
- item_categories = ("python", "django") # Hard-coded categories.
-
- # ITEM COPYRIGHT NOTICE (only applicable to Atom feeds) -- One of the
- # following three is optional. The framework looks for them in this
- # order.
-
- def item_copyright(self, obj):
- """
- Takes an item, as returned by items(), and returns the item's
- copyright notice as a normal Python string.
- """
-
- def item_copyright(self):
- """
- Returns the copyright notice for every item in the feed.
- """
-
- item_copyright = 'Copyright (c) 2007, Sally Smith' # Hard-coded copyright notice.
-
-
-The low-level framework
-=======================
-
-Behind the scenes, the high-level RSS framework uses a lower-level framework
-for generating feeds' XML. This framework lives in a single module:
-`django/utils/feedgenerator.py`_.
-
-You use this framework on your own, for lower-level feed generation. You can
-also create custom feed generator subclasses for use with the ``feed_type``
-``Feed`` option.
-
-``SyndicationFeed`` classes
----------------------------
-
-The :mod:`~django.utils.feedgenerator` module contains a base class:
-
-.. class:: django.utils.feedgenerator.SyndicationFeed
-
-and several subclasses:
-
-.. class:: django.utils.feedgenerator.RssUserland091Feed
-.. class:: django.utils.feedgenerator.Rss201rev2Feed
-.. class:: django.utils.feedgenerator.Atom1Feed
-
-Each of these three classes knows how to render a certain type of feed as XML.
-They share this interface:
-
-.. method:: SyndicationFeed.__init__(**kwargs)
-
- Initialize the feed with the given dictionary of metadata, which applies to
- the entire feed. Required keyword arguments are:
-
- * ``title``
- * ``link``
- * ``description``
-
- There's also a bunch of other optional keywords:
-
- * ``language``
- * ``author_email``
- * ``author_name``
- * ``author_link``
- * ``subtitle``
- * ``categories``
- * ``feed_url``
- * ``feed_copyright``
- * ``feed_guid``
- * ``ttl``
-
- Any extra keyword arguments you pass to ``__init__`` will be stored in
- ``self.feed`` for use with `custom feed generators`_.
-
- All parameters should be Unicode objects, except ``categories``, which
- should be a sequence of Unicode objects.
-
-.. method:: SyndicationFeed.add_item(**kwargs)
-
- Add an item to the feed with the given parameters.
-
- Required keyword arguments are:
-
- * ``title``
- * ``link``
- * ``description``
-
- Optional keyword arguments are:
-
- * ``author_email``
- * ``author_name``
- * ``author_link``
- * ``pubdate``
- * ``comments``
- * ``unique_id``
- * ``enclosure``
- * ``categories``
- * ``item_copyright``
- * ``ttl``
-
- Extra keyword arguments will be stored for `custom feed generators`_.
-
- All parameters, if given, should be Unicode objects, except:
-
- * ``pubdate`` should be a `Python datetime object`_.
- * ``enclosure`` should be an instance of ``feedgenerator.Enclosure``.
- * ``categories`` should be a sequence of Unicode objects.
-
-.. method:: SyndicationFeed.write(outfile, encoding)
-
- Outputs the feed in the given encoding to outfile, which is a file-like object.
-
-.. method:: SyndicationFeed.writeString(encoding)
-
- Returns the feed as a string in the given encoding.
-
-For example, to create an Atom 1.0 feed and print it to standard output::
-
- >>> from django.utils import feedgenerator
- >>> from datetime import datetime
- >>> f = feedgenerator.Atom1Feed(
- ... title=u"My Weblog",
- ... link=u"http://www.example.com/",
- ... description=u"In which I write about what I ate today.",
- ... language=u"en",
- ... author_name=u"Myself",
- ... feed_url=u"http://example.com/atom.xml")
- >>> f.add_item(title=u"Hot dog today",
- ... link=u"http://www.example.com/entries/1/",
- ... pubdate=datetime.now(),
- ... description=u"<p>Today I had a Vienna Beef hot dog. It was pink, plump and perfect.</p>")
- >>> print f.writeString('UTF-8')
- <?xml version="1.0" encoding="UTF-8"?>
- <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
- ...
- </feed>
-
-.. _django/utils/feedgenerator.py: http://code.djangoproject.com/browser/django/trunk/django/utils/feedgenerator.py
-.. _Python datetime object: http://docs.python.org/library/datetime.html#datetime-objects
-
-Custom feed generators
-----------------------
-
-If you need to produce a custom feed format, you've got a couple of options.
-
-If the feed format is totally custom, you'll want to subclass
-``SyndicationFeed`` and completely replace the ``write()`` and
-``writeString()`` methods.
-
-However, if the feed format is a spin-off of RSS or Atom (i.e. GeoRSS_, Apple's
-`iTunes podcast format`_, etc.), you've got a better choice. These types of
-feeds typically add extra elements and/or attributes to the underlying format,
-and there are a set of methods that ``SyndicationFeed`` calls to get these extra
-attributes. Thus, you can subclass the appropriate feed generator class
-(``Atom1Feed`` or ``Rss201rev2Feed``) and extend these callbacks. They are:
-
-.. _georss: http://georss.org/
-.. _itunes podcast format: http://www.apple.com/itunes/podcasts/specs.html
-
-``SyndicationFeed.root_attributes(self, )``
- Return a ``dict`` of attributes to add to the root feed element
- (``feed``/``channel``).
-
-``SyndicationFeed.add_root_elements(self, handler)``
- Callback to add elements inside the root feed element
- (``feed``/``channel``). ``handler`` is an `XMLGenerator`_ from Python's
- built-in SAX library; you'll call methods on it to add to the XML
- document in process.
-
-``SyndicationFeed.item_attributes(self, item)``
- Return a ``dict`` of attributes to add to each item (``item``/``entry``)
- element. The argument, ``item``, is a dictionary of all the data passed to
- ``SyndicationFeed.add_item()``.
-
-``SyndicationFeed.add_item_elements(self, handler, item)``
- Callback to add elements to each item (``item``/``entry``) element.
- ``handler`` and ``item`` are as above.
-
-.. warning::
-
- If you override any of these methods, be sure to call the superclass methods
- since they add the required elements for each feed format.
-
-For example, you might start implementing an iTunes RSS feed generator like so::
-
- class iTunesFeed(Rss201rev2Feed):
- def root_attributes(self):
- attrs = super(iTunesFeed, self).root_attributes()
- attrs['xmlns:itunes'] = 'http://www.itunes.com/dtds/podcast-1.0.dtd'
- return attrs
-
- def add_root_elements(self, handler):
- super(iTunesFeed, self).add_root_elements(handler)
- handler.addQuickElement('itunes:explicit', 'clean')
-
-Obviously there's a lot more work to be done for a complete custom feed class,
-but the above example should demonstrate the basic idea.
-
-.. _XMLGenerator: http://docs.python.org/dev/library/xml.sax.utils.html#xml.sax.saxutils.XMLGenerator
diff --git a/parts/django/docs/ref/contrib/webdesign.txt b/parts/django/docs/ref/contrib/webdesign.txt
deleted file mode 100644
index d355d03..0000000
--- a/parts/django/docs/ref/contrib/webdesign.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-========================
-django.contrib.webdesign
-========================
-
-.. module:: django.contrib.webdesign
- :synopsis: Helpers and utilities targeted primarily at Web *designers*
- rather than Web *developers*.
-
-The ``django.contrib.webdesign`` package, part of the
-:doc:`"django.contrib" add-ons </ref/contrib/index>`, provides various Django
-helpers that are particularly useful to Web *designers* (as opposed to
-developers).
-
-At present, the package contains only a single template tag. If you have ideas
-for Web-designer-friendly functionality in Django, please
-:doc:`suggest them </internals/contributing>`.
-
-Template tags
-=============
-
-To use these template tags, add ``'django.contrib.webdesign'`` to your
-:setting:`INSTALLED_APPS` setting. Once you've done that, use
-``{% load webdesign %}`` in a template to give your template access to the tags.
-
-
-lorem
-=====
-
-Displays random "lorem ipsum" Latin text. This is useful for providing sample
-data in templates.
-
-Usage::
-
- {% lorem [count] [method] [random] %}
-
-The ``{% lorem %}`` tag can be used with zero, one, two or three arguments.
-The arguments are:
-
- =========== =============================================================
- Argument Description
- =========== =============================================================
- ``count`` A number (or variable) containing the number of paragraphs or
- words to generate (default is 1).
- ``method`` Either ``w`` for words, ``p`` for HTML paragraphs or ``b``
- for plain-text paragraph blocks (default is ``b``).
- ``random`` The word ``random``, which if given, does not use the common
- paragraph ("Lorem ipsum dolor sit amet...") when generating
- text.
- =========== =============================================================
-
-Examples:
-
- * ``{% lorem %}`` will output the common "lorem ipsum" paragraph.
- * ``{% lorem 3 p %}`` will output the common "lorem ipsum" paragraph
- and two random paragraphs each wrapped in HTML ``<p>`` tags.
- * ``{% lorem 2 w random %}`` will output two random Latin words.
diff --git a/parts/django/docs/ref/databases.txt b/parts/django/docs/ref/databases.txt
deleted file mode 100644
index c49a3fc..0000000
--- a/parts/django/docs/ref/databases.txt
+++ /dev/null
@@ -1,682 +0,0 @@
-=========
-Databases
-=========
-
-Django attempts to support as many features as possible on all database
-backends. However, not all database backends are alike, and we've had to make
-design decisions on which features to support and which assumptions we can make
-safely.
-
-This file describes some of the features that might be relevant to Django
-usage. Of course, it is not intended as a replacement for server-specific
-documentation or reference manuals.
-
-.. _postgresql-notes:
-
-PostgreSQL notes
-================
-
-PostgreSQL 8.2 to 8.2.4
------------------------
-
-The implementation of the population statistics aggregates ``STDDEV_POP`` and
-``VAR_POP`` that shipped with PostgreSQL 8.2 to 8.2.4 are `known to be
-faulty`_. Users of these releases of PostgreSQL are advised to upgrade to
-`Release 8.2.5`_ or later. Django will raise a ``NotImplementedError`` if you
-attempt to use the ``StdDev(sample=False)`` or ``Variance(sample=False)``
-aggregate with a database backend that falls within the affected release range.
-
-.. _known to be faulty: http://archives.postgresql.org/pgsql-bugs/2007-07/msg00046.php
-.. _Release 8.2.5: http://developer.postgresql.org/pgdocs/postgres/release-8-2-5.html
-
-Transaction handling
----------------------
-
-:doc:`By default </topics/db/transactions>`, Django starts a transaction when a
-database connection is first used and commits the result at the end of the
-request/response handling. The PostgreSQL backends normally operate the same
-as any other Django backend in this respect.
-
-Autocommit mode
-~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.1
-
-If your application is particularly read-heavy and doesn't make many
-database writes, the overhead of a constantly open transaction can
-sometimes be noticeable. For those situations, if you're using the
-``postgresql_psycopg2`` backend, you can configure Django to use
-*"autocommit"* behavior for the connection, meaning that each database
-operation will normally be in its own transaction, rather than having
-the transaction extend over multiple operations. In this case, you can
-still manually start a transaction if you're doing something that
-requires consistency across multiple database operations. The
-autocommit behavior is enabled by setting the ``autocommit`` key in
-the :setting:`OPTIONS` part of your database configuration in
-:setting:`DATABASES`::
-
- 'OPTIONS': {
- 'autocommit': True,
- }
-
-In this configuration, Django still ensures that :ref:`delete()
-<topics-db-queries-delete>` and :ref:`update() <topics-db-queries-update>`
-queries run inside a single transaction, so that either all the affected
-objects are changed or none of them are.
-
-.. admonition:: This is database-level autocommit
-
- This functionality is not the same as the
- :ref:`topics-db-transactions-autocommit` decorator. That decorator
- is a Django-level implementation that commits automatically after
- data changing operations. The feature enabled using the
- :setting:`OPTIONS` option provides autocommit behavior at the
- database adapter level. It commits after *every* operation.
-
-If you are using this feature and performing an operation akin to delete or
-updating that requires multiple operations, you are strongly recommended to
-wrap you operations in manual transaction handling to ensure data consistency.
-You should also audit your existing code for any instances of this behavior
-before enabling this feature. It's faster, but it provides less automatic
-protection for multi-call operations.
-
-Indexes for ``varchar`` and ``text`` columns
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.. versionadded:: 1.1.2
-
-When specifying ``db_index=True`` on your model fields, Django typically
-outputs a single ``CREATE INDEX`` statement. However, if the database type
-for the field is either ``varchar`` or ``text`` (e.g., used by ``CharField``,
-``FileField``, and ``TextField``), then Django will create
-an additional index that uses an appropriate `PostgreSQL operator class`_
-for the column. The extra index is necessary to correctly perfrom
-lookups that use the ``LIKE`` operator in their SQL, as is done with the
-``contains`` and ``startswith`` lookup types.
-
-.. _PostgreSQL operator class: http://www.postgresql.org/docs/8.4/static/indexes-opclass.html
-
-.. _mysql-notes:
-
-MySQL notes
-===========
-
-Django expects the database to support transactions, referential integrity, and
-Unicode (UTF-8 encoding). Fortunately, MySQL_ has all these features as
-available as far back as 3.23. While it may be possible to use 3.23 or 4.0,
-you'll probably have less trouble if you use 4.1 or 5.0.
-
-MySQL 4.1
----------
-
-`MySQL 4.1`_ has greatly improved support for character sets. It is possible to
-set different default character sets on the database, table, and column.
-Previous versions have only a server-wide character set setting. It's also the
-first version where the character set can be changed on the fly. 4.1 also has
-support for views, but Django currently doesn't use views.
-
-MySQL 5.0
----------
-
-`MySQL 5.0`_ adds the ``information_schema`` database, which contains detailed
-data on all database schema. Django's ``inspectdb`` feature uses this
-``information_schema`` if it's available. 5.0 also has support for stored
-procedures, but Django currently doesn't use stored procedures.
-
-.. _MySQL: http://www.mysql.com/
-.. _MySQL 4.1: http://dev.mysql.com/doc/refman/4.1/en/index.html
-.. _MySQL 5.0: http://dev.mysql.com/doc/refman/5.0/en/index.html
-
-Storage engines
----------------
-
-MySQL has several `storage engines`_ (previously called table types). You can
-change the default storage engine in the server configuration.
-
-The default engine is MyISAM_ [#]_. The main drawback of MyISAM is that it
-doesn't currently support transactions or foreign keys. On the plus side, it's
-currently the only engine that supports full-text indexing and searching.
-
-The InnoDB_ engine is fully transactional and supports foreign key references.
-
-The BDB_ engine, like InnoDB, is also fully transactional and supports foreign
-key references. However, its use seems to be deprecated.
-
-`Other storage engines`_, including SolidDB_ and Falcon_, are on the horizon.
-For now, InnoDB is probably your best choice.
-
-.. _storage engines: http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html
-.. _MyISAM: http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html
-.. _BDB: http://dev.mysql.com/doc/refman/5.0/en/bdb-storage-engine.html
-.. _InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb.html
-.. _Other storage engines: http://dev.mysql.com/doc/refman/5.1/en/storage-engines-other.html
-.. _SolidDB: http://forge.mysql.com/projects/project.php?id=139
-.. _Falcon: http://dev.mysql.com/doc/falcon/en/index.html
-
-.. [#] Unless this was changed by the packager of your MySQL package. We've
- had reports that the Windows Community Server installer sets up InnoDB as
- the default storage engine, for example.
-
-MySQLdb
--------
-
-`MySQLdb`_ is the Python interface to MySQL. Version 1.2.1p2 or later is
-required for full MySQL support in Django.
-
-.. note::
- If you see ``ImportError: cannot import name ImmutableSet`` when trying to
- use Django, your MySQLdb installation may contain an outdated ``sets.py``
- file that conflicts with the built-in module of the same name from Python
- 2.4 and later. To fix this, verify that you have installed MySQLdb version
- 1.2.1p2 or newer, then delete the ``sets.py`` file in the MySQLdb
- directory that was left by an earlier version.
-
-.. _MySQLdb: http://sourceforge.net/projects/mysql-python
-
-Creating your database
-----------------------
-
-You can `create your database`_ using the command-line tools and this SQL::
-
- CREATE DATABASE <dbname> CHARACTER SET utf8;
-
-This ensures all tables and columns will use UTF-8 by default.
-
-.. _create your database: http://dev.mysql.com/doc/refman/5.0/en/create-database.html
-
-.. _mysql-collation:
-
-Collation settings
-~~~~~~~~~~~~~~~~~~
-
-The collation setting for a column controls the order in which data is sorted
-as well as what strings compare as equal. It can be set on a database-wide
-level and also per-table and per-column. This is `documented thoroughly`_ in
-the MySQL documentation. In all cases, you set the collation by directly
-manipulating the database tables; Django doesn't provide a way to set this on
-the model definition.
-
-.. _documented thoroughly: http://dev.mysql.com/doc/refman/5.0/en/charset.html
-
-By default, with a UTF-8 database, MySQL will use the
-``utf8_general_ci_swedish`` collation. This results in all string equality
-comparisons being done in a *case-insensitive* manner. That is, ``"Fred"`` and
-``"freD"`` are considered equal at the database level. If you have a unique
-constraint on a field, it would be illegal to try to insert both ``"aa"`` and
-``"AA"`` into the same column, since they compare as equal (and, hence,
-non-unique) with the default collation.
-
-In many cases, this default will not be a problem. However, if you really want
-case-sensitive comparisons on a particular column or table, you would change
-the column or table to use the ``utf8_bin`` collation. The main thing to be
-aware of in this case is that if you are using MySQLdb 1.2.2, the database
-backend in Django will then return bytestrings (instead of unicode strings) for
-any character fields it receive from the database. This is a strong variation
-from Django's normal practice of *always* returning unicode strings. It is up
-to you, the developer, to handle the fact that you will receive bytestrings if
-you configure your table(s) to use ``utf8_bin`` collation. Django itself should
-mostly work smoothly with such columns (except for the ``contrib.sessions``
-``Session`` and ``contrib.admin`` ``LogEntry`` tables described below), but
-your code must be prepared to call ``django.utils.encoding.smart_unicode()`` at
-times if it really wants to work with consistent data -- Django will not do
-this for you (the database backend layer and the model population layer are
-separated internally so the database layer doesn't know it needs to make this
-conversion in this one particular case).
-
-If you're using MySQLdb 1.2.1p2, Django's standard
-:class:`~django.db.models.CharField` class will return unicode strings even
-with ``utf8_bin`` collation. However, :class:`~django.db.models.TextField`
-fields will be returned as an ``array.array`` instance (from Python's standard
-``array`` module). There isn't a lot Django can do about that, since, again,
-the information needed to make the necessary conversions isn't available when
-the data is read in from the database. This problem was `fixed in MySQLdb
-1.2.2`_, so if you want to use :class:`~django.db.models.TextField` with
-``utf8_bin`` collation, upgrading to version 1.2.2 and then dealing with the
-bytestrings (which shouldn't be too difficult) as described above is the
-recommended solution.
-
-Should you decide to use ``utf8_bin`` collation for some of your tables with
-MySQLdb 1.2.1p2 or 1.2.2, you should still use ``utf8_collation_ci_swedish``
-(the default) collation for the :class:`django.contrib.sessions.models.Session`
-table (usually called ``django_session``) and the
-:class:`django.contrib.admin.models.LogEntry` table (usually called
-``django_admin_log``). Those are the two standard tables that use
-:class:`~django.db.model.TextField` internally.
-
-.. _fixed in MySQLdb 1.2.2: http://sourceforge.net/tracker/index.php?func=detail&aid=1495765&group_id=22307&atid=374932
-
-Connecting to the database
---------------------------
-
-Refer to the :doc:`settings documentation </ref/settings>`.
-
-Connection settings are used in this order:
-
- 1. :setting:`OPTIONS`.
- 2. :setting:`NAME`, :setting:`USER`, :setting:`PASSWORD`,
- :setting:`HOST`, :setting:`PORT`
- 3. MySQL option files.
-
-In other words, if you set the name of the database in ``OPTIONS``,
-this will take precedence over ``NAME``, which would override
-anything in a `MySQL option file`_.
-
-Here's a sample configuration which uses a MySQL option file::
-
- # settings.py
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'OPTIONS': {
- 'read_default_file': '/path/to/my.cnf',
- },
- }
- }
-
-
- # my.cnf
- [client]
- database = NAME
- user = USER
- password = PASSWORD
- default-character-set = utf8
-
-Several other MySQLdb connection options may be useful, such as ``ssl``,
-``use_unicode``, ``init_command``, and ``sql_mode``. Consult the
-`MySQLdb documentation`_ for more details.
-
-.. _MySQL option file: http://dev.mysql.com/doc/refman/5.0/en/option-files.html
-.. _MySQLdb documentation: http://mysql-python.sourceforge.net/
-
-Creating your tables
---------------------
-
-When Django generates the schema, it doesn't specify a storage engine, so
-tables will be created with whatever default storage engine your database
-server is configured for. The easiest solution is to set your database server's
-default storage engine to the desired engine.
-
-If you're using a hosting service and can't change your server's default
-storage engine, you have a couple of options.
-
- * After the tables are created, execute an ``ALTER TABLE`` statement to
- convert a table to a new storage engine (such as InnoDB)::
-
- ALTER TABLE <tablename> ENGINE=INNODB;
-
- This can be tedious if you have a lot of tables.
-
- * Another option is to use the ``init_command`` option for MySQLdb prior to
- creating your tables::
-
- 'OPTIONS': {
- 'init_command': 'SET storage_engine=INNODB',
- }
-
- This sets the default storage engine upon connecting to the database.
- After your tables have been created, you should remove this option.
-
- * Another method for changing the storage engine is described in
- AlterModelOnSyncDB_.
-
-.. _AlterModelOnSyncDB: http://code.djangoproject.com/wiki/AlterModelOnSyncDB
-
-Notes on specific fields
-------------------------
-
-Boolean fields
-~~~~~~~~~~~~~~
-
-.. versionchanged:: 1.2
-
-In previous versions of Django when running under MySQL ``BooleanFields`` would
-return their data as ``ints``, instead of true ``bools``. See the release
-notes for a complete description of the change.
-
-Character fields
-~~~~~~~~~~~~~~~~
-
-Any fields that are stored with ``VARCHAR`` column types have their
-``max_length`` restricted to 255 characters if you are using ``unique=True``
-for the field. This affects :class:`~django.db.models.CharField`,
-:class:`~django.db.models.SlugField` and
-:class:`~django.db.models.CommaSeparatedIntegerField`.
-
-Furthermore, if you are using a version of MySQL prior to 5.0.3, all of those
-column types have a maximum length restriction of 255 characters, regardless
-of whether ``unique=True`` is specified or not.
-
-.. _sqlite-notes:
-
-SQLite notes
-============
-
-SQLite_ provides an excellent development alternative for applications that
-are predominantly read-only or require a smaller installation footprint. As
-with all database servers, though, there are some differences that are
-specific to SQLite that you should be aware of.
-
-.. _SQLite: http://www.sqlite.org/
-
-.. _sqlite-string-matching:
-
-String matching for non-ASCII strings
---------------------------------------
-
-SQLite doesn't support case-insensitive matching for non-ASCII strings. Some
-possible workarounds for this are `documented at sqlite.org`_, but they are
-not utilised by the default SQLite backend in Django. Therefore, if you are
-using the ``iexact`` lookup type in your queryset filters, be aware that it
-will not work as expected for non-ASCII strings.
-
-.. _documented at sqlite.org: http://www.sqlite.org/faq.html#q18
-
-SQLite 3.3.6 or newer strongly recommended
-------------------------------------------
-
-Versions of SQLite 3.3.5 and older contains the following bugs:
-
- * A bug when `handling`_ ``ORDER BY`` parameters. This can cause problems when
- you use the ``select`` parameter for the ``extra()`` QuerySet method. The bug
- can be identified by the error message ``OperationalError: ORDER BY terms
- must not be non-integer constants``.
-
- * A bug when handling `aggregation`_ together with DateFields and
- DecimalFields.
-
-.. _handling: http://www.sqlite.org/cvstrac/tktview?tn=1768
-.. _aggregation: http://code.djangoproject.com/ticket/10031
-
-SQLite 3.3.6 was released in April 2006, so most current binary distributions
-for different platforms include newer version of SQLite usable from Python
-through either the ``pysqlite2`` or the ``sqlite3`` modules.
-
-However, some platform/Python version combinations include older versions of
-SQLite (e.g. the official binary distribution of Python 2.5 for Windows, 2.5.4
-as of this writing, includes SQLite 3.3.4). There are (as of Django 1.1) even
-some tests in the Django test suite that will fail when run under this setup.
-
-As described :ref:`below<using-newer-versions-of-pysqlite>`, this can be solved
-by downloading and installing a newer version of ``pysqlite2``
-(``pysqlite-2.x.x.win32-py2.5.exe`` in the described case) that includes and
-uses a newer version of SQLite. Python 2.6 for Windows ships with a version of
-SQLite that is not affected by these issues.
-
-Version 3.5.9
--------------
-
-The Ubuntu "Intrepid Ibex" (8.10) SQLite 3.5.9-3 package contains a bug that
-causes problems with the evaluation of query expressions. If you are using
-Ubuntu "Intrepid Ibex", you will need to update the package to version
-3.5.9-3ubuntu1 or newer (recommended) or find an alternate source for SQLite
-packages, or install SQLite from source.
-
-At one time, Debian Lenny shipped with the same malfunctioning SQLite 3.5.9-3
-package. However the Debian project has subsequently issued updated versions
-of the SQLite package that correct these bugs. If you find you are getting
-unexpected results under Debian, ensure you have updated your SQLite package
-to 3.5.9-5 or later.
-
-The problem does not appear to exist with other versions of SQLite packaged
-with other operating systems.
-
-Version 3.6.2
---------------
-
-SQLite version 3.6.2 (released August 30, 2008) introduced a bug into ``SELECT
-DISTINCT`` handling that is triggered by, amongst other things, Django's
-``DateQuerySet`` (returned by the ``dates()`` method on a queryset).
-
-You should avoid using this version of SQLite with Django. Either upgrade to
-3.6.3 (released September 22, 2008) or later, or downgrade to an earlier
-version of SQLite.
-
-.. _using-newer-versions-of-pysqlite:
-
-Using newer versions of the SQLite DB-API 2.0 driver
-----------------------------------------------------
-
-.. versionadded:: 1.1
-
-For versions of Python 2.5 or newer that include ``sqlite3`` in the standard
-library Django will now use a ``pysqlite2`` interface in preference to
-``sqlite3`` if it finds one is available.
-
-This provides the ability to upgrade both the DB-API 2.0 interface or SQLite 3
-itself to versions newer than the ones included with your particular Python
-binary distribution, if needed.
-
-"Database is locked" errors
------------------------------------------------
-
-SQLite is meant to be a lightweight database, and thus can't support a high
-level of concurrency. ``OperationalError: database is locked`` errors indicate
-that your application is experiencing more concurrency than ``sqlite`` can
-handle in default configuration. This error means that one thread or process has
-an exclusive lock on the database connection and another thread timed out
-waiting for the lock the be released.
-
-Python's SQLite wrapper has
-a default timeout value that determines how long the second thread is allowed to
-wait on the lock before it times out and raises the ``OperationalError: database
-is locked`` error.
-
-If you're getting this error, you can solve it by:
-
- * Switching to another database backend. At a certain point SQLite becomes
- too "lite" for real-world applications, and these sorts of concurrency
- errors indicate you've reached that point.
-
- * Rewriting your code to reduce concurrency and ensure that database
- transactions are short-lived.
-
- * Increase the default timeout value by setting the ``timeout`` database
- option option::
-
- 'OPTIONS': {
- # ...
- 'timeout': 20,
- # ...
- }
-
- This will simply make SQLite wait a bit longer before throwing "database
- is locked" errors; it won't really do anything to solve them.
-
-.. _oracle-notes:
-
-Oracle notes
-============
-
-Django supports `Oracle Database Server`_ versions 9i and
-higher. Oracle version 10g or later is required to use Django's
-``regex`` and ``iregex`` query operators. You will also need at least
-version 4.3.1 of the `cx_Oracle`_ Python driver.
-
-Note that due to a Unicode-corruption bug in ``cx_Oracle`` 5.0, that
-version of the driver should **not** be used with Django;
-``cx_Oracle`` 5.0.1 resolved this issue, so if you'd like to use a
-more recent ``cx_Oracle``, use version 5.0.1.
-
-``cx_Oracle`` 5.0.1 or greater can optionally be compiled with the
-``WITH_UNICODE`` environment variable. This is recommended but not
-required.
-
-.. _`Oracle Database Server`: http://www.oracle.com/
-.. _`cx_Oracle`: http://cx-oracle.sourceforge.net/
-
-In order for the ``python manage.py syncdb`` command to work, your Oracle
-database user must have privileges to run the following commands:
-
- * CREATE TABLE
- * CREATE SEQUENCE
- * CREATE PROCEDURE
- * CREATE TRIGGER
-
-To run Django's test suite, the user needs these *additional* privileges:
-
- * CREATE USER
- * DROP USER
- * CREATE TABLESPACE
- * DROP TABLESPACE
- * CONNECT WITH ADMIN OPTION
- * RESOURCE WITH ADMIN OPTION
-
-Connecting to the database
---------------------------
-
-Your Django settings.py file should look something like this for Oracle::
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.oracle',
- 'NAME': 'xe',
- 'USER': 'a_user',
- 'PASSWORD': 'a_password',
- 'HOST': '',
- 'PORT': '',
- }
- }
-
-
-If you don't use a ``tnsnames.ora`` file or a similar naming method that
-recognizes the SID ("xe" in this example), then fill in both
-``HOST`` and ``PORT`` like so::
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.oracle',
- 'NAME': 'xe',
- 'USER': 'a_user',
- 'PASSWORD': 'a_password',
- 'HOST': 'dbprod01ned.mycompany.com',
- 'PORT': '1540',
- }
- }
-
-You should supply both ``HOST`` and ``PORT``, or leave both
-as empty strings.
-
-Threaded option
-----------------
-
-If you plan to run Django in a multithreaded environment (e.g. Apache in Windows
-using the default MPM module), then you **must** set the ``threaded`` option of
-your Oracle database configuration to True::
-
- 'OPTIONS': {
- 'threaded': True,
- },
-
-Failure to do this may result in crashes and other odd behavior.
-
-Tablespace options
-------------------
-
-A common paradigm for optimizing performance in Oracle-based systems is the
-use of `tablespaces`_ to organize disk layout. The Oracle backend supports
-this use case by adding ``db_tablespace`` options to the ``Meta`` and
-``Field`` classes. (When you use a backend that lacks support for tablespaces,
-Django ignores these options.)
-
-.. _`tablespaces`: http://en.wikipedia.org/wiki/Tablespace
-
-A tablespace can be specified for the table(s) generated by a model by
-supplying the ``db_tablespace`` option inside the model's ``class Meta``.
-Additionally, you can pass the ``db_tablespace`` option to a ``Field``
-constructor to specify an alternate tablespace for the ``Field``'s column
-index. If no index would be created for the column, the ``db_tablespace``
-option is ignored::
-
- class TablespaceExample(models.Model):
- name = models.CharField(max_length=30, db_index=True, db_tablespace="indexes")
- data = models.CharField(max_length=255, db_index=True)
- edges = models.ManyToManyField(to="self", db_tablespace="indexes")
-
- class Meta:
- db_tablespace = "tables"
-
-In this example, the tables generated by the ``TablespaceExample`` model
-(i.e., the model table and the many-to-many table) would be stored in the
-``tables`` tablespace. The index for the name field and the indexes on the
-many-to-many table would be stored in the ``indexes`` tablespace. The ``data``
-field would also generate an index, but no tablespace for it is specified, so
-it would be stored in the model tablespace ``tables`` by default.
-
-.. versionadded:: 1.0
-
-Use the :setting:`DEFAULT_TABLESPACE` and :setting:`DEFAULT_INDEX_TABLESPACE`
-settings to specify default values for the db_tablespace options.
-These are useful for setting a tablespace for the built-in Django apps and
-other applications whose code you cannot control.
-
-Django does not create the tablespaces for you. Please refer to `Oracle's
-documentation`_ for details on creating and managing tablespaces.
-
-.. _`Oracle's documentation`: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7003.htm#SQLRF01403
-
-Naming issues
--------------
-
-Oracle imposes a name length limit of 30 characters. To accommodate this, the
-backend truncates database identifiers to fit, replacing the final four
-characters of the truncated name with a repeatable MD5 hash value.
-
-When running syncdb, an ``ORA-06552`` error may be encountered if
-certain Oracle keywords are used as the name of a model field or the
-value of a ``db_column`` option. Django quotes all identifiers used
-in queries to prevent most such problems, but this error can still
-occur when an Oracle datatype is used as a column name. In
-particular, take care to avoid using the names ``date``,
-``timestamp``, ``number`` or ``float`` as a field name.
-
-NULL and empty strings
-----------------------
-
-Django generally prefers to use the empty string ('') rather than
-NULL, but Oracle treats both identically. To get around this, the
-Oracle backend coerces the ``null=True`` option on fields that have
-the empty string as a possible value. When fetching from the database,
-it is assumed that a NULL value in one of these fields really means
-the empty string, and the data is silently converted to reflect this
-assumption.
-
-``TextField`` limitations
--------------------------
-
-The Oracle backend stores ``TextFields`` as ``NCLOB`` columns. Oracle imposes
-some limitations on the usage of such LOB columns in general:
-
- * LOB columns may not be used as primary keys.
-
- * LOB columns may not be used in indexes.
-
- * LOB columns may not be used in a ``SELECT DISTINCT`` list. This means that
- attempting to use the ``QuerySet.distinct`` method on a model that
- includes ``TextField`` columns will result in an error when run against
- Oracle. As a workaround, use the ``QuerySet.defer`` method in conjunction
- with ``distinct()`` to prevent ``TextField`` columns from being included in
- the ``SELECT DISTINCT`` list.
-
-.. _third-party-notes:
-
-Using a 3rd-party database backend
-==================================
-
-In addition to the officially supported databases, there are backends provided
-by 3rd parties that allow you to use other databases with Django:
-
-* `Sybase SQL Anywhere`_
-* `IBM DB2`_
-* `Microsoft SQL Server 2005`_
-* Firebird_
-* ODBC_
-
-The Django versions and ORM features supported by these unofficial backends
-vary considerably. Queries regarding the specific capabilities of these
-unofficial backends, along with any support queries, should be directed to
-the support channels provided by each 3rd party project.
-
-.. _Sybase SQL Anywhere: http://code.google.com/p/sqlany-django/
-.. _IBM DB2: http://code.google.com/p/ibm-db/
-.. _Microsoft SQL Server 2005: http://code.google.com/p/django-mssql/
-.. _Firebird: http://code.google.com/p/django-firebird/
-.. _ODBC: http://code.google.com/p/django-pyodbc/
diff --git a/parts/django/docs/ref/django-admin.txt b/parts/django/docs/ref/django-admin.txt
deleted file mode 100644
index 70faa3c..0000000
--- a/parts/django/docs/ref/django-admin.txt
+++ /dev/null
@@ -1,1293 +0,0 @@
-=============================
-django-admin.py and manage.py
-=============================
-
-``django-admin.py`` is Django's command-line utility for administrative tasks.
-This document outlines all it can do.
-
-In addition, ``manage.py`` is automatically created in each Django project.
-``manage.py`` is a thin wrapper around ``django-admin.py`` that takes care of
-two things for you before delegating to ``django-admin.py``:
-
- * It puts your project's package on ``sys.path``.
-
- * It sets the :envvar:`DJANGO_SETTINGS_MODULE` environment variable so that
- it points to your project's ``settings.py`` file.
-
-The ``django-admin.py`` script should be on your system path if you installed
-Django via its ``setup.py`` utility. If it's not on your path, you can find it
-in ``site-packages/django/bin`` within your Python installation. Consider
-symlinking it from some place on your path, such as ``/usr/local/bin``.
-
-For Windows users, who do not have symlinking functionality available, you can
-copy ``django-admin.py`` to a location on your existing path or edit the
-``PATH`` settings (under ``Settings - Control Panel - System - Advanced -
-Environment...``) to point to its installed location.
-
-Generally, when working on a single Django project, it's easier to use
-``manage.py``. Use ``django-admin.py`` with ``DJANGO_SETTINGS_MODULE``, or the
-``--settings`` command line option, if you need to switch between multiple
-Django settings files.
-
-The command-line examples throughout this document use ``django-admin.py`` to
-be consistent, but any example can use ``manage.py`` just as well.
-
-Usage
-=====
-
-.. code-block:: bash
-
- django-admin.py <command> [options]
- manage.py <command> [options]
-
-``command`` should be one of the commands listed in this document.
-``options``, which is optional, should be zero or more of the options available
-for the given command.
-
-Getting runtime help
---------------------
-
-.. django-admin-option:: --help
-
-Run ``django-admin.py help`` to display a list of all available commands.
-Run ``django-admin.py help <command>`` to display a description of the
-given command and a list of its available options.
-
-App names
----------
-
-Many commands take a list of "app names." An "app name" is the basename of
-the package containing your models. For example, if your ``INSTALLED_APPS``
-contains the string ``'mysite.blog'``, the app name is ``blog``.
-
-Determining the version
------------------------
-
-.. django-admin-option:: --version
-
-Run ``django-admin.py --version`` to display the current Django version.
-
-Examples of output::
-
- 0.95
- 0.96
- 0.97-pre-SVN-6069
-
-Displaying debug output
------------------------
-
-Use :djadminopt:`--verbosity` to specify the amount of notification and debug information
-that ``django-admin.py`` should print to the console. For more details, see the
-documentation for the :djadminopt:`--verbosity` option.
-
-Available commands
-==================
-
-cleanup
--------
-
-.. django-admin:: cleanup
-
-.. versionadded:: 1.0
-
-Can be run as a cronjob or directly to clean out old data from the database
-(only expired sessions at the moment).
-
-compilemessages
----------------
-
-.. django-admin:: compilemessages
-
-.. versionchanged:: 1.0
- Before 1.0 this was the "bin/compile-messages.py" command.
-
-Compiles .po files created with ``makemessages`` to .mo files for use with
-the builtin gettext support. See :doc:`/topics/i18n/index`.
-
-Use the :djadminopt:`--locale` option to specify the locale to process.
-If not provided, all locales are processed.
-
-Example usage::
-
- django-admin.py compilemessages --locale=br_PT
-
-createcachetable
-----------------
-
-.. django-admin:: createcachetable
-
-Creates a cache table named ``tablename`` for use with the database cache
-backend. See :doc:`/topics/cache` for more information.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database
-onto which the cachetable will be installed.
-
-dbshell
--------
-
-.. django-admin:: dbshell
-
-Runs the command-line client for the database engine specified in your
-``ENGINE`` setting, with the connection parameters specified in your
-``USER``, ``PASSWORD``, etc., settings.
-
- * For PostgreSQL, this runs the ``psql`` command-line client.
- * For MySQL, this runs the ``mysql`` command-line client.
- * For SQLite, this runs the ``sqlite3`` command-line client.
-
-This command assumes the programs are on your ``PATH`` so that a simple call to
-the program name (``psql``, ``mysql``, ``sqlite3``) will find the program in
-the right place. There's no way to specify the location of the program
-manually.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database
-onto which to open a shell.
-
-diffsettings
-------------
-
-.. django-admin:: diffsettings
-
-Displays differences between the current settings file and Django's default
-settings.
-
-Settings that don't appear in the defaults are followed by ``"###"``. For
-example, the default settings don't define ``ROOT_URLCONF``, so
-``ROOT_URLCONF`` is followed by ``"###"`` in the output of ``diffsettings``.
-
-Note that Django's default settings live in ``django/conf/global_settings.py``,
-if you're ever curious to see the full list of defaults.
-
-dumpdata <appname appname appname.Model ...>
---------------------------------------------
-
-.. django-admin:: dumpdata
-
-Outputs to standard output all data in the database associated with the named
-application(s).
-
-If no application name is provided, all installed applications will be dumped.
-
-The output of ``dumpdata`` can be used as input for ``loaddata``.
-
-Note that ``dumpdata`` uses the default manager on the model for selecting the
-records to dump. If you're using a :ref:`custom manager <custom-managers>` as
-the default manager and it filters some of the available records, not all of the
-objects will be dumped.
-
-.. django-admin-option:: --format <fmt>
-
-By default, ``dumpdata`` will format its output in JSON, but you can use the
-``--format`` option to specify another format. Currently supported formats
-are listed in :ref:`serialization-formats`.
-
-.. django-admin-option:: --indent <num>
-
-By default, ``dumpdata`` will output all data on a single line. This isn't
-easy for humans to read, so you can use the ``--indent`` option to
-pretty-print the output with a number of indentation spaces.
-
-.. versionadded:: 1.0
-
-The :djadminopt:`--exclude` option may be provided to prevent specific
-applications from being dumped.
-
-.. versionadded:: 1.1
-
-In addition to specifying application names, you can provide a list of
-individual models, in the form of ``appname.Model``. If you specify a model
-name to ``dumpdata``, the dumped output will be restricted to that model,
-rather than the entire application. You can also mix application names and
-model names.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database
-onto which the data will be loaded.
-
-.. django-admin-option:: --natural
-
-.. versionadded:: 1.2
-
-Use :ref:`natural keys <topics-serialization-natural-keys>` to represent
-any foreign key and many-to-many relationship with a model that provides
-a natural key definition. If you are dumping ``contrib.auth`` ``Permission``
-objects or ``contrib.contenttypes`` ``ContentType`` objects, you should
-probably be using this flag.
-
-flush
------
-
-.. django-admin:: flush
-
-Returns the database to the state it was in immediately after syncdb was
-executed. This means that all data will be removed from the database, any
-post-synchronization handlers will be re-executed, and the ``initial_data``
-fixture will be re-installed.
-
-The :djadminopt:`--noinput` option may be provided to suppress all user
-prompts.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option may be used to specify the database
-to flush.
-
-
-inspectdb
----------
-
-.. django-admin:: inspectdb
-
-Introspects the database tables in the database pointed-to by the
-``NAME`` setting and outputs a Django model module (a ``models.py``
-file) to standard output.
-
-Use this if you have a legacy database with which you'd like to use Django.
-The script will inspect the database and create a model for each table within
-it.
-
-As you might expect, the created models will have an attribute for every field
-in the table. Note that ``inspectdb`` has a few special cases in its field-name
-output:
-
- * If ``inspectdb`` cannot map a column's type to a model field type, it'll
- use ``TextField`` and will insert the Python comment
- ``'This field type is a guess.'`` next to the field in the generated
- model.
-
- * If the database column name is a Python reserved word (such as
- ``'pass'``, ``'class'`` or ``'for'``), ``inspectdb`` will append
- ``'_field'`` to the attribute name. For example, if a table has a column
- ``'for'``, the generated model will have a field ``'for_field'``, with
- the ``db_column`` attribute set to ``'for'``. ``inspectdb`` will insert
- the Python comment
- ``'Field renamed because it was a Python reserved word.'`` next to the
- field.
-
-This feature is meant as a shortcut, not as definitive model generation. After
-you run it, you'll want to look over the generated models yourself to make
-customizations. In particular, you'll need to rearrange models' order, so that
-models that refer to other models are ordered properly.
-
-Primary keys are automatically introspected for PostgreSQL, MySQL and
-SQLite, in which case Django puts in the ``primary_key=True`` where
-needed.
-
-``inspectdb`` works with PostgreSQL, MySQL and SQLite. Foreign-key detection
-only works in PostgreSQL and with certain types of MySQL tables.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option may be used to specify the
-database to introspect.
-
-loaddata <fixture fixture ...>
-------------------------------
-
-.. django-admin:: loaddata
-
-Searches for and loads the contents of the named fixture into the database.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database
-onto which the data will be loaded.
-
-What's a "fixture"?
-~~~~~~~~~~~~~~~~~~~
-
-A *fixture* is a collection of files that contain the serialized contents of
-the database. Each fixture has a unique name, and the files that comprise the
-fixture can be distributed over multiple directories, in multiple applications.
-
-Django will search in three locations for fixtures:
-
- 1. In the ``fixtures`` directory of every installed application
- 2. In any directory named in the ``FIXTURE_DIRS`` setting
- 3. In the literal path named by the fixture
-
-Django will load any and all fixtures it finds in these locations that match
-the provided fixture names.
-
-If the named fixture has a file extension, only fixtures of that type
-will be loaded. For example::
-
- django-admin.py loaddata mydata.json
-
-would only load JSON fixtures called ``mydata``. The fixture extension
-must correspond to the registered name of a
-:ref:`serializer <serialization-formats>` (e.g., ``json`` or ``xml``).
-
-If you omit the extensions, Django will search all available fixture types
-for a matching fixture. For example::
-
- django-admin.py loaddata mydata
-
-would look for any fixture of any fixture type called ``mydata``. If a fixture
-directory contained ``mydata.json``, that fixture would be loaded
-as a JSON fixture.
-
-The fixtures that are named can include directory components. These
-directories will be included in the search path. For example::
-
- django-admin.py loaddata foo/bar/mydata.json
-
-would search ``<appname>/fixtures/foo/bar/mydata.json`` for each installed
-application, ``<dirname>/foo/bar/mydata.json`` for each directory in
-``FIXTURE_DIRS``, and the literal path ``foo/bar/mydata.json``.
-
-When fixture files are processed, the data is saved to the database as is.
-Model defined ``save`` methods and ``pre_save`` signals are not called.
-
-Note that the order in which fixture files are processed is undefined. However,
-all fixture data is installed as a single transaction, so data in
-one fixture can reference data in another fixture. If the database backend
-supports row-level constraints, these constraints will be checked at the
-end of the transaction.
-
-The ``dumpdata`` command can be used to generate input for ``loaddata``.
-
-Compressed fixtures
-~~~~~~~~~~~~~~~~~~~
-
-Fixtures may be compressed in ``zip``, ``gz``, or ``bz2`` format. For example::
-
- django-admin.py loaddata mydata.json
-
-would look for any of ``mydata.json``, ``mydata.json.zip``,
-``mydata.json.gz``, or ``mydata.json.bz2``. The first file contained within a
-zip-compressed archive is used.
-
-Note that if two fixtures with the same name but different
-fixture type are discovered (for example, if ``mydata.json`` and
-``mydata.xml.gz`` were found in the same fixture directory), fixture
-installation will be aborted, and any data installed in the call to
-``loaddata`` will be removed from the database.
-
-.. admonition:: MySQL and Fixtures
-
- Unfortunately, MySQL isn't capable of completely supporting all the
- features of Django fixtures. If you use MyISAM tables, MySQL doesn't
- support transactions or constraints, so you won't get a rollback if
- multiple transaction files are found, or validation of fixture data.
- If you use InnoDB tables, you won't be able to have any forward
- references in your data files - MySQL doesn't provide a mechanism to
- defer checking of row constraints until a transaction is committed.
-
-Database-specific fixtures
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you are in a multi-database setup, you may have fixture data that
-you want to load onto one database, but not onto another. In this
-situation, you can add database identifier into . If your
-:setting:`DATABASES` setting has a 'master' database defined, you can
-define the fixture ``mydata.master.json`` or
-``mydata.master.json.gz``. This fixture will only be loaded if you
-have specified that you want to load data onto the ``master``
-database.
-
-makemessages
-------------
-
-.. django-admin:: makemessages
-
-.. versionchanged:: 1.0
- Before 1.0 this was the ``bin/make-messages.py`` command.
-
-Runs over the entire source tree of the current directory and pulls out all
-strings marked for translation. It creates (or updates) a message file in the
-conf/locale (in the django tree) or locale (for project and application)
-directory. After making changes to the messages files you need to compile them
-with ``compilemessages`` for use with the builtin gettext support. See the
-:ref:`i18n documentation <how-to-create-language-files>` for details.
-
-.. django-admin-option:: --all
-
-Use the ``--all`` or ``-a`` option to update the message files for all
-available languages.
-
-Example usage::
-
- django-admin.py makemessages --all
-
-.. django-admin-option:: --extension
-
-Use the ``--extension`` or ``-e`` option to specify a list of file extensions
-to examine (default: ".html").
-
-Example usage::
-
- django-admin.py makemessages --locale=de --extension xhtml
-
-Separate multiple extensions with commas or use -e or --extension multiple times::
-
- django-admin.py makemessages --locale=de --extension=html,txt --extension xml
-
-Use the :djadminopt:`--locale` option to specify the locale to process.
-
-Example usage::
-
- django-admin.py makemessages --locale=br_PT
-
-.. django-admin-option:: --domain
-
-Use the ``--domain`` or ``-d`` option to change the domain of the messages files.
-Currently supported:
-
- * ``django`` for all ``*.py`` and ``*.html`` files (default)
- * ``djangojs`` for ``*.js`` files
-
-.. django-admin-option:: --symlinks
-
-.. versionadded:: 1.2
-
-Use the ``--symlinks`` or ``-s`` option to follow symlinks to directories when
-looking for new translation strings.
-
-Example usage::
-
- django-admin.py makemessages --locale=de --symlinks
-
-.. django-admin-option:: --ignore
-
-Use the ``--ignore`` or ``-i`` option to ignore files or directories matching
-the given `glob-style pattern`_. Use multiple times to ignore more.
-
-These patterns are used by default: ``'CVS'``, ``'.*'``, ``'*~'``
-
-Example usage::
-
- django-admin.py makemessages --locale=en_US --ignore=apps/* --ignore=secret/*.html
-
-.. _`glob-style pattern`: http://docs.python.org/library/glob.html
-
-.. django-admin-option:: --no-default-ignore
-
-Use the ``--no-default-ignore`` option to disable the default values of
-:djadminopt:`--ignore`.
-
-reset <appname appname ...>
----------------------------
-
-.. django-admin:: reset
-
-Executes the equivalent of ``sqlreset`` for the given app name(s).
-
-The :djadminopt:`--noinput` option may be provided to suppress all user
-prompts.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the alias
-of the database to reset.
-
-runfcgi [options]
------------------
-
-.. django-admin:: runfcgi
-
-Starts a set of FastCGI processes suitable for use with any Web server that
-supports the FastCGI protocol. See the :doc:`FastCGI deployment documentation
-</howto/deployment/fastcgi>` for details. Requires the Python FastCGI module from
-`flup`_.
-
-.. _flup: http://www.saddi.com/software/flup/
-
-The options accepted by this command are passed to the FastCGI library and
-don't use the ``'--'`` prefix as is usual for other Django management commands.
-
-.. django-admin-option:: protocol
-
-``protocol=PROTOCOL``
-
-Protocol to use. *PROTOCOL* can be ``fcgi``, ``scgi``, ``ajp``, etc.
-(default is ``fcgi``)
-
-.. django-admin-option:: host
-
-``host=HOSTNAME``
-
-Hostname to listen on.
-
-.. django-admin-option:: port
-
-``port=PORTNUM``
-
-Port to listen on.
-
-.. django-admin-option:: socket
-
-``socket=FILE``
-
-UNIX socket to listen on.
-
-.. django-admin-option:: method
-
-``method=IMPL``
-
-Possible values: ``prefork`` or ``threaded`` (default ``prefork``)
-
-.. django-admin-option:: maxrequests
-
-``maxrequests=NUMBER``
-
-Number of requests a child handles before it is killed and a new child is
-forked (0 means no limit).
-
-.. django-admin-option:: maxspare
-
-``maxspare=NUMBER``
-
-Max number of spare processes / threads.
-
-.. django-admin-option:: minspare
-
-``minspare=NUMBER``
-
-Min number of spare processes / threads.
-
-.. django-admin-option:: maxchildren
-
-``maxchildren=NUMBER``
-
-Hard limit number of processes / threads.
-
-.. django-admin-option:: daemonize
-
-``daemonize=BOOL``
-
-Whether to detach from terminal.
-
-.. django-admin-option:: pidfile
-
-``pidfile=FILE``
-
-Write the spawned process-id to file *FILE*.
-
-.. django-admin-option:: workdir
-
-``workdir=DIRECTORY``
-
-Change to directory *DIRECTORY* when daemonizing.
-
-.. django-admin-option:: debug
-
-``debug=BOOL``
-
-Set to true to enable flup tracebacks.
-
-.. django-admin-option:: outlog
-
-``outlog=FILE``
-
-Write stdout to the *FILE* file.
-
-.. django-admin-option:: errlog
-
-``errlog=FILE``
-
-Write stderr to the *FILE* file.
-
-.. django-admin-option:: umask
-
-``umask=UMASK``
-
-Umask to use when daemonizing. The value is interpeted as an octal number
-(default value is ``022``).
-
-Example usage::
-
- django-admin.py runfcgi socket=/tmp/fcgi.sock method=prefork daemonize=true \
- pidfile=/var/run/django-fcgi.pid
-
-Run a FastCGI server as a daemon and write the spawned PID in a file.
-
-runserver [port or ipaddr:port]
--------------------------------
-
-.. django-admin:: runserver
-
-Starts a lightweight development Web server on the local machine. By default,
-the server runs on port 8000 on the IP address 127.0.0.1. You can pass in an
-IP address and port number explicitly.
-
-If you run this script as a user with normal privileges (recommended), you
-might not have access to start a port on a low port number. Low port numbers
-are reserved for the superuser (root).
-
-DO NOT USE THIS SERVER IN A PRODUCTION SETTING. It has not gone through
-security audits or performance tests. (And that's how it's gonna stay. We're in
-the business of making Web frameworks, not Web servers, so improving this
-server to be able to handle a production environment is outside the scope of
-Django.)
-
-The development server automatically reloads Python code for each request, as
-needed. You don't need to restart the server for code changes to take effect.
-
-When you start the server, and each time you change Python code while the
-server is running, the server will validate all of your installed models. (See
-the ``validate`` command below.) If the validator finds errors, it will print
-them to standard output, but it won't stop the server.
-
-You can run as many servers as you want, as long as they're on separate ports.
-Just execute ``django-admin.py runserver`` more than once.
-
-Note that the default IP address, 127.0.0.1, is not accessible from other
-machines on your network. To make your development server viewable to other
-machines on the network, use its own IP address (e.g. ``192.168.2.1``) or
-``0.0.0.0``.
-
-.. django-admin-option:: --adminmedia
-
-Use the ``--adminmedia`` option to tell Django where to find the various CSS
-and JavaScript files for the Django admin interface. Normally, the development
-server serves these files out of the Django source tree magically, but you'd
-want to use this if you made any changes to those files for your own site.
-
-Example usage::
-
- django-admin.py runserver --adminmedia=/tmp/new-admin-style/
-
-.. django-admin-option:: --noreload
-
-Use the ``--noreload`` option to disable the use of the auto-reloader. This
-means any Python code changes you make while the server is running will *not*
-take effect if the particular Python modules have already been loaded into
-memory.
-
-Example usage::
-
- django-admin.py runserver --noreload
-
-Examples of using different ports and addresses
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Port 8000 on IP address 127.0.0.1::
-
- django-admin.py runserver
-
-Port 8000 on IP address 1.2.3.4::
-
- django-admin.py runserver 1.2.3.4:8000
-
-Port 7000 on IP address 127.0.0.1::
-
- django-admin.py runserver 7000
-
-Port 7000 on IP address 1.2.3.4::
-
- django-admin.py runserver 1.2.3.4:7000
-
-Serving static files with the development server
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-By default, the development server doesn't serve any static files for your site
-(such as CSS files, images, things under ``MEDIA_URL`` and so forth). If
-you want to configure Django to serve static media, read :doc:`/howto/static-files`.
-
-shell
------
-
-.. django-admin:: shell
-
-Starts the Python interactive interpreter.
-
-Django will use IPython_, if it's installed. If you have IPython installed and
-want to force use of the "plain" Python interpreter, use the ``--plain``
-option, like so::
-
- django-admin.py shell --plain
-
-.. _IPython: http://ipython.scipy.org/
-
-sql <appname appname ...>
--------------------------
-
-.. django-admin:: sql
-
-Prints the CREATE TABLE SQL statements for the given app name(s).
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-sqlall <appname appname ...>
-----------------------------
-
-.. django-admin:: sqlall
-
-Prints the CREATE TABLE and initial-data SQL statements for the given app name(s).
-
-Refer to the description of ``sqlcustom`` for an explanation of how to
-specify initial data.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-sqlclear <appname appname ...>
-------------------------------
-
-.. django-admin:: sqlclear
-
-Prints the DROP TABLE SQL statements for the given app name(s).
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-sqlcustom <appname appname ...>
--------------------------------
-
-.. django-admin:: sqlcustom
-
-Prints the custom SQL statements for the given app name(s).
-
-For each model in each specified app, this command looks for the file
-``<appname>/sql/<modelname>.sql``, where ``<appname>`` is the given app name and
-``<modelname>`` is the model's name in lowercase. For example, if you have an
-app ``news`` that includes a ``Story`` model, ``sqlcustom`` will attempt
-to read a file ``news/sql/story.sql`` and append it to the output of this
-command.
-
-Each of the SQL files, if given, is expected to contain valid SQL. The SQL
-files are piped directly into the database after all of the models'
-table-creation statements have been executed. Use this SQL hook to make any
-table modifications, or insert any SQL functions into the database.
-
-Note that the order in which the SQL files are processed is undefined.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-sqlflush
---------
-
-.. django-admin:: sqlflush
-
-Prints the SQL statements that would be executed for the :djadmin:`flush`
-command.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-sqlindexes <appname appname ...>
---------------------------------
-
-.. django-admin:: sqlindexes
-
-Prints the CREATE INDEX SQL statements for the given app name(s).
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-sqlreset <appname appname ...>
-------------------------------
-
-.. django-admin:: sqlreset
-
-Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s).
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-sqlsequencereset <appname appname ...>
---------------------------------------
-
-.. django-admin:: sqlsequencereset
-
-Prints the SQL statements for resetting sequences for the given app name(s).
-
-Sequences are indexes used by some database engines to track the next available
-number for automatically incremented fields.
-
-Use this command to generate SQL which will fix cases where a sequence is out
-of sync with its automatically incremented field data.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database for
-which to print the SQL.
-
-startapp <appname>
-------------------
-
-.. django-admin:: startapp
-
-Creates a Django app directory structure for the given app name in the current
-directory.
-
-startproject <projectname>
---------------------------
-
-.. django-admin:: startproject
-
-Creates a Django project directory structure for the given project name in the
-current directory.
-
-This command is disabled when the ``--settings`` option to
-``django-admin.py`` is used, or when the environment variable
-``DJANGO_SETTINGS_MODULE`` has been set. To re-enable it in these
-situations, either omit the ``--settings`` option or unset
-``DJANGO_SETTINGS_MODULE``.
-
-syncdb
-------
-
-.. django-admin:: syncdb
-
-Creates the database tables for all apps in ``INSTALLED_APPS`` whose tables
-have not already been created.
-
-Use this command when you've added new applications to your project and want to
-install them in the database. This includes any apps shipped with Django that
-might be in ``INSTALLED_APPS`` by default. When you start a new project, run
-this command to install the default apps.
-
-.. admonition:: Syncdb will not alter existing tables
-
- ``syncdb`` will only create tables for models which have not yet been
- installed. It will *never* issue ``ALTER TABLE`` statements to match
- changes made to a model class after installation. Changes to model classes
- and database schemas often involve some form of ambiguity and, in those
- cases, Django would have to guess at the correct changes to make. There is
- a risk that critical data would be lost in the process.
-
- If you have made changes to a model and wish to alter the database tables
- to match, use the ``sql`` command to display the new SQL structure and
- compare that to your existing table schema to work out the changes.
-
-If you're installing the ``django.contrib.auth`` application, ``syncdb`` will
-give you the option of creating a superuser immediately.
-
-``syncdb`` will also search for and install any fixture named ``initial_data``
-with an appropriate extension (e.g. ``json`` or ``xml``). See the
-documentation for ``loaddata`` for details on the specification of fixture
-data files.
-
---noinput
-~~~~~~~~~
-The :djadminopt:`--noinput` option may be provided to suppress all user
-prompts.
-
-.. versionadded:: 1.2
-
-The :djadminopt:`--database` option can be used to specify the database to
-synchronize.
-
-test <app or test identifier>
------------------------------
-
-.. django-admin:: test
-
-Runs tests for all installed models. See :doc:`/topics/testing` for more
-information.
-
-.. versionadded:: 1.2
-.. django-admin-option:: --failfast
-
-Use the :djadminopt:`--failfast` option to stop running tests and report the failure
-immediately after a test fails.
-
-testserver <fixture fixture ...>
---------------------------------
-
-.. django-admin:: testserver
-
-.. versionadded:: 1.0
-
-Runs a Django development server (as in ``runserver``) using data from the
-given fixture(s).
-
-For example, this command::
-
- django-admin.py testserver mydata.json
-
-...would perform the following steps:
-
- 1. Create a test database, as described in :doc:`/topics/testing`.
- 2. Populate the test database with fixture data from the given fixtures.
- (For more on fixtures, see the documentation for ``loaddata`` above.)
- 3. Runs the Django development server (as in ``runserver``), pointed at
- this newly created test database instead of your production database.
-
-This is useful in a number of ways:
-
- * When you're writing :doc:`unit tests </topics/testing>` of how your views
- act with certain fixture data, you can use ``testserver`` to interact with
- the views in a Web browser, manually.
-
- * Let's say you're developing your Django application and have a "pristine"
- copy of a database that you'd like to interact with. You can dump your
- database to a fixture (using the ``dumpdata`` command, explained above),
- then use ``testserver`` to run your Web application with that data. With
- this arrangement, you have the flexibility of messing up your data
- in any way, knowing that whatever data changes you're making are only
- being made to a test database.
-
-Note that this server does *not* automatically detect changes to your Python
-source code (as ``runserver`` does). It does, however, detect changes to
-templates.
-
-.. django-admin-option:: --addrport [port number or ipaddr:port]
-
-Use ``--addrport`` to specify a different port, or IP address and port, from
-the default of 127.0.0.1:8000. This value follows exactly the same format and
-serves exactly the same function as the argument to the ``runserver`` command.
-
-Examples:
-
-To run the test server on port 7000 with ``fixture1`` and ``fixture2``::
-
- django-admin.py testserver --addrport 7000 fixture1 fixture2
- django-admin.py testserver fixture1 fixture2 --addrport 7000
-
-(The above statements are equivalent. We include both of them to demonstrate
-that it doesn't matter whether the options come before or after the fixture
-arguments.)
-
-To run on 1.2.3.4:7000 with a ``test`` fixture::
-
- django-admin.py testserver --addrport 1.2.3.4:7000 test
-
-validate
---------
-
-.. django-admin:: validate
-
-Validates all installed models (according to the ``INSTALLED_APPS`` setting)
-and prints validation errors to standard output.
-
-Commands provided by applications
-=================================
-
-Some commands are only available when the ``django.contrib`` application that
-:doc:`implements </howto/custom-management-commands>` them has been
-:setting:`enabled <INSTALLED_APPS>`. This section describes them grouped by
-their application.
-
-``django.contrib.auth``
------------------------
-
-changepassword
-~~~~~~~~~~~~~~
-
-.. django-admin:: changepassword
-
-.. versionadded:: 1.2
-
-This command is only available if Django's :doc:`authentication system
-</topics/auth>` (``django.contrib.auth``) is installed.
-
-Allows changing a user's password. It prompts you to enter twice the password of
-the user given as parameter. If they both match, the new password will be
-changed immediately. If you do not supply a user, the command will attempt to
-change the password whose username matches the current user.
-
-Example usage::
-
- django-admin.py changepassword ringo
-
-createsuperuser
-~~~~~~~~~~~~~~~
-
-.. django-admin:: createsuperuser
-
-.. versionadded:: 1.0
-
-This command is only available if Django's :doc:`authentication system
-</topics/auth>` (``django.contrib.auth``) is installed.
-
-Creates a superuser account (a user who has all permissions). This is
-useful if you need to create an initial superuser account but did not
-do so during ``syncdb``, or if you need to programmatically generate
-superuser accounts for your site(s).
-
-When run interactively, this command will prompt for a password for
-the new superuser account. When run non-interactively, no password
-will be set, and the superuser account will not be able to log in until
-a password has been manually set for it.
-
-.. django-admin-option:: --username
-.. django-admin-option:: --email
-
-The username and e-mail address for the new account can be supplied by
-using the ``--username`` and ``--email`` arguments on the command
-line. If either of those is not supplied, ``createsuperuser`` will prompt for
-it when running interactively.
-
-``django.contrib.gis``
-----------------------
-
-ogrinspect
-~~~~~~~~~~
-
-This command is only available if :doc:`GeoDjango </ref/contrib/gis/index>`
-(``django.contrib.gis``) is installed.
-
-Please refer to its :djadmin:`description <ogrinspect>` in the GeoDjango
-documentation.
-
-``django.contrib.sitemaps``
----------------------------
-
-ping_google
-~~~~~~~~~~~
-
-This command is only available if the :doc:`Sitemaps framework
-</ref/contrib/sitemaps>` (``django.contrib.sitemaps``) is installed.
-
-Please refer to its :djadmin:`description <ping_google>` in the Sitemaps
-documentation.
-
-Default options
-===============
-
-Although some commands may allow their own custom options, every command
-allows for the following options:
-
-.. django-admin-option:: --pythonpath
-
-Example usage::
-
- django-admin.py syncdb --pythonpath='/home/djangoprojects/myproject'
-
-Adds the given filesystem path to the Python `import search path`_. If this
-isn't provided, ``django-admin.py`` will use the ``PYTHONPATH`` environment
-variable.
-
-Note that this option is unnecessary in ``manage.py``, because it takes care of
-setting the Python path for you.
-
-.. _import search path: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html
-
-.. django-admin-option:: --settings
-
-Example usage::
-
- django-admin.py syncdb --settings=mysite.settings
-
-Explicitly specifies the settings module to use. The settings module should be
-in Python package syntax, e.g. ``mysite.settings``. If this isn't provided,
-``django-admin.py`` will use the ``DJANGO_SETTINGS_MODULE`` environment
-variable.
-
-Note that this option is unnecessary in ``manage.py``, because it uses
-``settings.py`` from the current project by default.
-
-.. django-admin-option:: --traceback
-
-Example usage::
-
- django-admin.py syncdb --traceback
-
-By default, ``django-admin.py`` will show a simple error message whenever an
-error occurs. If you specify ``--traceback``, ``django-admin.py`` will
-output a full stack trace whenever an exception is raised.
-
-.. django-admin-option:: --verbosity
-
-Example usage::
-
- django-admin.py syncdb --verbosity 2
-
-Use ``--verbosity`` to specify the amount of notification and debug information
-that ``django-admin.py`` should print to the console.
-
- * ``0`` means no output.
- * ``1`` means normal output (default).
- * ``2`` means verbose output.
-
-Common options
-==============
-
-The following options are not available on every commands, but they are
-common to a number of commands.
-
-.. django-admin-option:: --database
-
-.. versionadded:: 1.2
-
-Used to specify the database on which a command will operate. If not
-specified, this option will default to an alias of ``default``.
-
-For example, to dump data from the database with the alias ``master``::
-
- django-admin.py dumpdata --database=master
-
-.. django-admin-option:: --exclude
-
-Exclude a specific application from the applications whose contents is
-output. For example, to specifically exclude the `auth` application from
-the output of dumpdata, you would call::
-
- django-admin.py dumpdata --exclude=auth
-
-If you want to exclude multiple applications, use multiple ``--exclude``
-directives::
-
- django-admin.py dumpdata --exclude=auth --exclude=contenttypes
-
-.. django-admin-option:: --locale
-
-Use the ``--locale`` or ``-l`` option to specify the locale to process.
-If not provided all locales are processed.
-
-.. django-admin-option:: --noinput
-
-Use the ``--noinput`` option to suppress all user prompting, such as "Are
-you sure?" confirmation messages. This is useful if ``django-admin.py`` is
-being executed as an unattended, automated script.
-
-Extra niceties
-==============
-
-.. _syntax-coloring:
-
-Syntax coloring
----------------
-
-The ``django-admin.py`` / ``manage.py`` commands will use pretty
-color-coded output if your terminal supports ANSI-colored output. It
-won't use the color codes if you're piping the command's output to
-another program.
-
-The colors used for syntax highlighting can be customized. Django
-ships with three color palettes:
-
- * ``dark``, suited to terminals that show white text on a black
- background. This is the default palette.
-
- * ``light``, suited to terminals that show black text on a white
- background.
-
- * ``nocolor``, which disables syntax highlighting.
-
-You select a palette by setting a ``DJANGO_COLORS`` environment
-variable to specify the palette you want to use. For example, to
-specify the ``light`` palette under a Unix or OS/X BASH shell, you
-would run the following at a command prompt::
-
- export DJANGO_COLORS="light"
-
-You can also customize the colors that are used. Django specifies a
-number of roles in which color is used:
-
- * ``error`` - A major error.
- * ``notice`` - A minor error.
- * ``sql_field`` - The name of a model field in SQL.
- * ``sql_coltype`` - The type of a model field in SQL.
- * ``sql_keyword`` - A SQL keyword.
- * ``sql_table`` - The name of a model in SQL.
- * ``http_info`` - A 1XX HTTP Informational server response.
- * ``http_success`` - A 2XX HTTP Success server response.
- * ``http_not_modified`` - A 304 HTTP Not Modified server response.
- * ``http_redirect`` - A 3XX HTTP Redirect server response other than 304.
- * ``http_not_found`` - A 404 HTTP Not Found server response.
- * ``http_bad_request`` - A 4XX HTTP Bad Request server response other than 404.
- * ``http_server_error`` - A 5XX HTTP Server Error response.
-
-Each of these roles can be assigned a specific foreground and
-background color, from the following list:
-
- * ``black``
- * ``red``
- * ``green``
- * ``yellow``
- * ``blue``
- * ``magenta``
- * ``cyan``
- * ``white``
-
-Each of these colors can then be modified by using the following
-display options:
-
- * ``bold``
- * ``underscore``
- * ``blink``
- * ``reverse``
- * ``conceal``
-
-A color specification follows one of the the following patterns:
-
- * ``role=fg``
- * ``role=fg/bg``
- * ``role=fg,option,option``
- * ``role=fg/bg,option,option``
-
-where ``role`` is the name of a valid color role, ``fg`` is the
-foreground color, ``bg`` is the background color and each ``option``
-is one of the color modifying options. Multiple color specifications
-are then separated by semicolon. For example::
-
- export DJANGO_COLORS="error=yellow/blue,blink;notice=magenta"
-
-would specify that errors be displayed using blinking yellow on blue,
-and notices displayed using magenta. All other color roles would be
-left uncolored.
-
-Colors can also be specified by extending a base palette. If you put
-a palette name in a color specification, all the colors implied by that
-palette will be loaded. So::
-
- export DJANGO_COLORS="light;error=yellow/blue,blink;notice=magenta"
-
-would specify the use of all the colors in the light color palette,
-*except* for the colors for errors and notices which would be
-overridden as specified.
-
-Bash completion
----------------
-
-If you use the Bash shell, consider installing the Django bash completion
-script, which lives in ``extras/django_bash_completion`` in the Django
-distribution. It enables tab-completion of ``django-admin.py`` and
-``manage.py`` commands, so you can, for instance...
-
- * Type ``django-admin.py``.
- * Press [TAB] to see all available options.
- * Type ``sql``, then [TAB], to see all available options whose names start
- with ``sql``.
-
-
-See :doc:`/howto/custom-management-commands` for how to add customized actions.
-
-
-==========================================
-Running management commands from your code
-==========================================
-
-.. function:: django.core.management.call_command(name, *args, **options)
-
-To call a management command from code use ``call_command``.
-
-``name``
- the name of the command to call.
-
-``*args``
- a list of arguments accepted by the command.
-
-``**options``
- named options accepted on the command-line.
-
-Examples::
-
- from django.core import management
- management.call_command('flush', verbosity=0, interactive=False)
- management.call_command('loaddata', 'test_data', verbosity=0)
diff --git a/parts/django/docs/ref/exceptions.txt b/parts/django/docs/ref/exceptions.txt
deleted file mode 100644
index f1246bf..0000000
--- a/parts/django/docs/ref/exceptions.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-=================
-Django Exceptions
-=================
-
-
-Django raises some Django specific exceptions as well as many standard
-Python exceptions.
-
-Django-specific Exceptions
-==========================
-
-.. module:: django.core.exceptions
- :synopsis: Django specific exceptions
-
-ObjectDoesNotExist and DoesNotExist
------------------------------------
-.. exception:: DoesNotExist
-.. exception:: ObjectDoesNotExist
-
- The :exc:`DoesNotExist` exception is raised when an object is not found
- for the given parameters of a query.
-
- :exc:`ObjectDoesNotExist` is defined in :mod:`django.core.exceptions`.
- :exc:`DoesNotExist` is a subclass of the base :exc:`ObjectDoesNotExist`
- exception that is provided on every model class as a way of
- identifying the specific type of object that could not be found.
-
- See :meth:`~django.db.models.QuerySet.get()` for further information
- on :exc:`ObjectDoesNotExist` and :exc:`DoesNotExist`.
-
-MultipleObjectsReturned
------------------------
-.. exception:: MultipleObjectsReturned
-
- The :exc:`MultipleObjectsReturned` exception is raised by a query if only
- one object is expected, but multiple objects are returned. A base version
- of this exception is provided in :mod:`django.core.exceptions`; each model
- class contains a subclassed version that can be used to identify the
- specific object type that has returned multiple objects.
-
- See :meth:`~django.db.models.QuerySet.get()` for further information.
-
-SuspiciousOperation
--------------------
-.. exception:: SuspiciousOperation
-
- The :exc:`SuspiciousOperation` exception is raised when a user has performed
- an operation that should be considered suspicious from a security perspective,
- such as tampering with a session cookie.
-
-PermissionDenied
-----------------
-.. exception:: PermissionDenied
-
- The :exc:`PermissionDenied` exception is raised when a user does not have
- permission to perform the action requested.
-
-ViewDoesNotExist
-----------------
-.. exception:: ViewDoesNotExist
-
- The :exc:`ViewDoesNotExist` exception is raised by
- :mod:`django.core.urlresolvers` when a requested view does not exist.
-
-MiddlewareNotUsed
------------------
-.. exception:: MiddlewareNotUsed
-
- The :exc:`MiddlewareNotUsed` exception is raised when a middleware is not
- used in the server configuration.
-
-ImproperlyConfigured
---------------------
-.. exception:: ImproperlyConfigured
-
- The :exc:`ImproperlyConfigured` exception is raised when Django is
- somehow improperly configured -- for example, if a value in ``settings.py``
- is incorrect or unparseable.
-
-FieldError
-----------
-.. exception:: FieldError
-
- The :exc:`FieldError` exception is raised when there is a problem with a
- model field. This can happen for several reasons:
-
- - A field in a model clashes with a field of the same name from an
- abstract base class
- - An infinite loop is caused by ordering
- - A keyword cannot be parsed from the filter parameters
- - A field cannot be determined from a keyword in the query
- parameters
- - A join is not permitted on the specified field
- - A field name is invalid
- - A query contains invalid order_by arguments
-
-ValidationError
----------------
-.. exception:: ValidationError
-
- The :exc:`ValidationError` exception is raised when data fails form or
- model field validation. For more information about validation, see
- :doc:`Form and Field Validation </ref/forms/validation>`,
- :ref:`Model Field Validation <validating-objects>` and the
- :doc:`Validator Reference </ref/validators>`.
-
-Database Exceptions
-===================
-
-Django wraps the standard database exceptions :exc:`DatabaseError` and
-:exc:`IntegrityError` so that your Django code has a guaranteed common
-implementation of these classes. These database exceptions are
-provided in :mod:`django.db`.
-
-The Django wrappers for database exceptions behave exactly the same as
-the underlying database exceptions. See `PEP 249 - Python Database API
-Specification v2.0`_ for further information.
-
-.. _`PEP 249 - Python Database API Specification v2.0`: http://www.python.org/dev/peps/pep-0249/
-
-Python Exceptions
-=================
-
-Django raises built-in Python exceptions when appropriate as well. See
-the Python `documentation`_ for further information on the built-in
-exceptions.
-
-.. _`documentation`: http://docs.python.org/lib/module-exceptions.html
diff --git a/parts/django/docs/ref/files/file.txt b/parts/django/docs/ref/files/file.txt
deleted file mode 100644
index 1374d01..0000000
--- a/parts/django/docs/ref/files/file.txt
+++ /dev/null
@@ -1,152 +0,0 @@
-The ``File`` object
-===================
-
-The :mod:`django.core.files` module and its submodules contain built-in classes
-for basic file handling in Django.
-
-.. currentmodule:: django.core.files
-
-The ``File`` Class
-------------------
-
-.. class:: File(file_object)
-
- The :class:`File` is a thin wrapper around Python's built-in file object
- with some Django-specific additions. Internally, Django uses this class
- any time it needs to represent a file.
-
- :class:`File` objects have the following attributes and methods:
-
- .. attribute:: name
-
- The name of file including the relative path from
- :setting:`MEDIA_ROOT`.
-
- .. attribute:: size
-
- The size of the file in bytes.
-
- .. attribute:: file
-
- The underlying Python ``file`` object passed to
- :class:`~django.core.files.File`.
-
- .. attribute:: mode
-
- The read/write mode for the file.
-
- .. method:: open([mode=None])
-
- Open or reopen the file (which by definition also does
- ``File.seek(0)``). The ``mode`` argument allows the same values
- as Python's standard ``open()``.
-
- When reopening a file, ``mode`` will override whatever mode the file
- was originally opened with; ``None`` means to reopen with the original
- mode.
-
- .. method:: read([num_bytes=None])
-
- Read content from the file. The optional ``size`` is the number of
- bytes to read; if not specified, the file will be read to the end.
-
- .. method:: __iter__()
-
- Iterate over the file yielding one line at a time.
-
- .. method:: chunks([chunk_size=None])
-
- Iterate over the file yielding "chunks" of a given size. ``chunk_size``
- defaults to 64 KB.
-
- This is especially useful with very large files since it allows them to
- be streamed off disk and avoids storing the whole file in memory.
-
- .. method:: multiple_chunks([chunk_size=None])
-
- Returns ``True`` if the file is large enough to require multiple chunks
- to access all of its content give some ``chunk_size``.
-
- .. method:: write([content])
-
- Writes the specified content string to the file. Depending on the
- storage system behind the scenes, this content might not be fully
- committed until ``close()`` is called on the file.
-
- .. method:: close()
-
- Close the file.
-
- In addition to the listed methods, :class:`~django.core.files.File` exposes
- the following attributes and methods of the underlying ``file`` object:
- ``encoding``, ``fileno``, ``flush``, ``isatty``, ``newlines``,
- ``read``, ``readinto``, ``readlines``, ``seek``, ``softspace``, ``tell``,
- ``truncate``, ``writelines``, ``xreadlines``.
-
-.. currentmodule:: django.core.files.base
-
-The ``ContentFile`` Class
--------------------------
-
-.. class:: ContentFile(File)
-
- The ``ContentFile`` class inherits from :class:`~django.core.files.File`,
- but unlike :class:`~django.core.files.File` it operates on string content,
- rather than an actual file. For example::
-
- from django.core.files.base import ContentFile
-
- f1 = ContentFile("my string content")
- f2 = ContentFile(u"my unicode content encoded as UTF-8".encode('UTF-8'))
-
-.. currentmodule:: django.core.files.images
-
-The ``ImageFile`` Class
------------------------
-
-.. class:: ImageFile(file_object)
-
- Django provides a built-in class specifically for images.
- :class:`django.core.files.images.ImageFile` inherits all the attributes
- and methods of :class:`~django.core.files.File`, and additionally
- provides the following:
-
- .. attribute:: width
-
- Width of the image in pixels.
-
- .. attribute:: height
-
- Height of the image in pixels.
-
-.. currentmodule:: django.core.files
-
-Additional methods on files attached to objects
------------------------------------------------
-
-Any :class:`File` that's associated with an object (as with ``Car.photo``,
-below) will also have a couple of extra methods:
-
-.. method:: File.save(name, content, [save=True])
-
- Saves a new file with the file name and contents provided. This will not
- replace the existing file, but will create a new file and update the object
- to point to it. If ``save`` is ``True``, the model's ``save()`` method will
- be called once the file is saved. That is, these two lines::
-
- >>> car.photo.save('myphoto.jpg', contents, save=False)
- >>> car.save()
-
- are the same as this one line::
-
- >>> car.photo.save('myphoto.jpg', contents, save=True)
-
- Note that the ``content`` argument must be an instance of either
- :class:`File` or of a subclass of :class:`File`, such as
- :class:`ContentFile`.
-
-.. method:: File.delete([save=True])
-
- Removes the file from the model instance and deletes the underlying file.
- If ``save`` is ``True``, the model's ``save()`` method will be called once
- the file is deleted.
diff --git a/parts/django/docs/ref/files/index.txt b/parts/django/docs/ref/files/index.txt
deleted file mode 100644
index 552559d..0000000
--- a/parts/django/docs/ref/files/index.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-=============
-File handling
-=============
-
-.. module:: django.core.files
- :synopsis: File handling and storage
-
-.. toctree::
- :maxdepth: 2
-
- file
- storage
diff --git a/parts/django/docs/ref/files/storage.txt b/parts/django/docs/ref/files/storage.txt
deleted file mode 100644
index 84ef00c..0000000
--- a/parts/django/docs/ref/files/storage.txt
+++ /dev/null
@@ -1,119 +0,0 @@
-File storage API
-================
-
-.. module:: django.core.files.storage
-
-Getting the current storage class
----------------------------------
-
-Django provides two convenient ways to access the current storage class:
-
-.. class:: DefaultStorage
-
- :class:`~django.core.files.storage.DefaultStorage` provides
- lazy access to the current default storage system as defined by
- :setting:`DEFAULT_FILE_STORAGE`. :class:`DefaultStorage` uses
- :func:`~django.core.files.storage.get_storage_class` internally.
-
-.. function:: get_storage_class([import_path=None])
-
- Returns a class or module which implements the storage API.
-
- When called without the ``import_path`` parameter ``get_storage_class``
- will return the current default storage system as defined by
- :setting:`DEFAULT_FILE_STORAGE`. If ``import_path`` is provided,
- ``get_storage_class`` will attempt to import the class or module from the
- given path and will return it if successful. An exception will be
- raised if the import is unsuccessful.
-
-The FileSystemStorage Class
----------------------------
-
-.. class:: FileSystemStorage
-
- The :class:`~django.core.files.storage.FileSystemStorage` class implements
- basic file storage on a local filesystem. It inherits from
- :class:`~django.core.files.storage.Storage` and provides implementations
- for all the public methods thereof.
-
- .. note::
-
- The :class:`FileSystemStorage.delete` method will not raise
- raise an exception if the given file name does not exist.
-
-The Storage Class
------------------
-
-.. class:: Storage
-
- The :class:`~django.core.files.storage.Storage` class provides a
- standardized API for storing files, along with a set of default
- behaviors that all other storage systems can inherit or override
- as necessary.
-
- .. method:: delete(name)
-
- Deletes the file referenced by ``name``. If deletion is not supported
- on the targest storage system this will raise ``NotImplementedError``
- instead
-
- .. method:: exists(name)
-
- Returns ``True`` if a file referened by the given name already exists
- in the storage system, or ``False`` if the name is available for a new
- file.
-
- .. method:: get_available_name(name)
-
- Returns a filename based on the ``name`` parameter that's free and
- available for new content to be written to on the target storage
- system.
-
-
- .. method:: get_valid_name(name)
-
- Returns a filename based on the ``name`` parameter that's suitable
- for use on the target storage system.
-
- .. method:: listdir(path)
-
- Lists the contents of the specified path, returning a 2-tuple of lists;
- the first item being directories, the second item being files. For
- storage systems that aren't able to provide such a listing, this will
- raise a ``NotImplementedError`` instead.
-
- .. method:: open(name, mode='rb')
-
- Opens the file given by ``name``. Note that although the returned file
- is guaranteed to be a ``File`` object, it might actually be some
- subclass. In the case of remote file storage this means that
- reading/writing could be quite slow, so be warned.
-
- .. method:: path(name)
-
- The local filesystem path where the file can be opened using Python's
- standard ``open()``. For storage systems that aren't accessible from
- the local filesystem, this will raise ``NotImplementedError`` instead.
-
- .. method:: save(name, content)
-
- Saves a new file using the storage system, preferably with the name
- specified. If there already exists a file with this name ``name``, the
- storage system may modify the filename as necessary to get a unique
- name. The actual name of the stored file will be returned.
-
- The ``content`` argument must be an instance of
- :class:`django.core.files.File` or of a subclass of
- :class:`~django.core.files.File`.
-
- .. method:: size(name)
-
- Returns the total size, in bytes, of the file referenced by ``name``.
- For storage systems that aren't able to return the file size this will
- raise ``NotImplementedError`` instead.
-
- .. method:: url(name)
-
- Returns the URL where the contents of the file referenced by ``name``
- can be accessed. For storage systems that don't support access by URL
- this will raise ``NotImplementedError`` instead.
diff --git a/parts/django/docs/ref/forms/api.txt b/parts/django/docs/ref/forms/api.txt
deleted file mode 100644
index 613d754..0000000
--- a/parts/django/docs/ref/forms/api.txt
+++ /dev/null
@@ -1,791 +0,0 @@
-=============
-The Forms API
-=============
-
-.. module:: django.forms.forms
-
-.. currentmodule:: django.forms
-
-.. admonition:: About this document
-
- This document covers the gritty details of Django's forms API. You should
- read the :doc:`introduction to working with forms </topics/forms/index>`
- first.
-
-.. _ref-forms-api-bound-unbound:
-
-Bound and unbound forms
------------------------
-
-A :class:`Form` instance is either **bound** to a set of data, or **unbound**.
-
- * If it's **bound** to a set of data, it's capable of validating that data
- and rendering the form as HTML with the data displayed in the HTML.
-
- * If it's **unbound**, it cannot do validation (because there's no data to
- validate!), but it can still render the blank form as HTML.
-
-.. class:: Form
-
-To create an unbound :class:`Form` instance, simply instantiate the class::
-
- >>> f = ContactForm()
-
-To bind data to a form, pass the data as a dictionary as the first parameter to
-your :class:`Form` class constructor::
-
- >>> data = {'subject': 'hello',
- ... 'message': 'Hi there',
- ... 'sender': 'foo@example.com',
- ... 'cc_myself': True}
- >>> f = ContactForm(data)
-
-In this dictionary, the keys are the field names, which correspond to the
-attributes in your :class:`Form` class. The values are the data you're trying to
-validate. These will usually be strings, but there's no requirement that they be
-strings; the type of data you pass depends on the :class:`Field`, as we'll see
-in a moment.
-
-.. attribute:: Form.is_bound
-
-If you need to distinguish between bound and unbound form instances at runtime,
-check the value of the form's :attr:`~Form.is_bound` attribute::
-
- >>> f = ContactForm()
- >>> f.is_bound
- False
- >>> f = ContactForm({'subject': 'hello'})
- >>> f.is_bound
- True
-
-Note that passing an empty dictionary creates a *bound* form with empty data::
-
- >>> f = ContactForm({})
- >>> f.is_bound
- True
-
-If you have a bound :class:`Form` instance and want to change the data somehow,
-or if you want to bind an unbound :class:`Form` instance to some data, create
-another :class:`Form` instance. There is no way to change data in a
-:class:`Form` instance. Once a :class:`Form` instance has been created, you
-should consider its data immutable, whether it has data or not.
-
-Using forms to validate data
-----------------------------
-
-.. method:: Form.is_valid()
-
-The primary task of a :class:`Form` object is to validate data. With a bound
-:class:`Form` instance, call the :meth:`~Form.is_valid` method to run validation
-and return a boolean designating whether the data was valid::
-
- >>> data = {'subject': 'hello',
- ... 'message': 'Hi there',
- ... 'sender': 'foo@example.com',
- ... 'cc_myself': True}
- >>> f = ContactForm(data)
- >>> f.is_valid()
- True
-
-Let's try with some invalid data. In this case, ``subject`` is blank (an error,
-because all fields are required by default) and ``sender`` is not a valid
-e-mail address::
-
- >>> data = {'subject': '',
- ... 'message': 'Hi there',
- ... 'sender': 'invalid e-mail address',
- ... 'cc_myself': True}
- >>> f = ContactForm(data)
- >>> f.is_valid()
- False
-
-.. attribute:: Form.errors
-
-Access the :attr:`~Form.errors` attribute to get a dictionary of error
-messages::
-
- >>> f.errors
- {'sender': [u'Enter a valid e-mail address.'], 'subject': [u'This field is required.']}
-
-In this dictionary, the keys are the field names, and the values are lists of
-Unicode strings representing the error messages. The error messages are stored
-in lists because a field can have multiple error messages.
-
-You can access :attr:`~Form.errors` without having to call
-:meth:`~Form.is_valid` first. The form's data will be validated the first time
-either you call :meth:`~Form.is_valid` or access :attr:`~Form.errors`.
-
-The validation routines will only get called once, regardless of how many times
-you access :attr:`~Form.errors` or call :meth:`~Form.is_valid`. This means that
-if validation has side effects, those side effects will only be triggered once.
-
-Behavior of unbound forms
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It's meaningless to validate a form with no data, but, for the record, here's
-what happens with unbound forms::
-
- >>> f = ContactForm()
- >>> f.is_valid()
- False
- >>> f.errors
- {}
-
-Dynamic initial values
-----------------------
-
-.. attribute:: Form.initial
-
-Use :attr:`~Form.initial` to declare the initial value of form fields at
-runtime. For example, you might want to fill in a ``username`` field with the
-username of the current session.
-
-To accomplish this, use the :attr:`~Form.initial` argument to a :class:`Form`.
-This argument, if given, should be a dictionary mapping field names to initial
-values. Only include the fields for which you're specifying an initial value;
-it's not necessary to include every field in your form. For example::
-
- >>> f = ContactForm(initial={'subject': 'Hi there!'})
-
-These values are only displayed for unbound forms, and they're not used as
-fallback values if a particular value isn't provided.
-
-Note that if a :class:`~django.forms.fields.Field` defines
-:attr:`~Form.initial` *and* you include ``initial`` when instantiating the
-``Form``, then the latter ``initial`` will have precedence. In this example,
-``initial`` is provided both at the field level and at the form instance level,
-and the latter gets precedence::
-
- >>> class CommentForm(forms.Form):
- ... name = forms.CharField(initial='class')
- ... url = forms.URLField()
- ... comment = forms.CharField()
- >>> f = CommentForm(initial={'name': 'instance'}, auto_id=False)
- >>> print f
- <tr><th>Name:</th><td><input type="text" name="name" value="instance" /></td></tr>
- <tr><th>Url:</th><td><input type="text" name="url" /></td></tr>
- <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
-
-Accessing "clean" data
-----------------------
-
-.. attribute:: Form.cleaned_data
-
-Each field in a :class:`Form` class is responsible not only for validating
-data, but also for "cleaning" it -- normalizing it to a consistent format. This
-is a nice feature, because it allows data for a particular field to be input in
-a variety of ways, always resulting in consistent output.
-
-For example, :class:`~django.forms.DateField` normalizes input into a
-Python ``datetime.date`` object. Regardless of whether you pass it a string in
-the format ``'1994-07-15'``, a ``datetime.date`` object, or a number of other
-formats, ``DateField`` will always normalize it to a ``datetime.date`` object
-as long as it's valid.
-
-Once you've created a :class:`~Form` instance with a set of data and validated
-it, you can access the clean data via its ``cleaned_data`` attribute::
-
- >>> data = {'subject': 'hello',
- ... 'message': 'Hi there',
- ... 'sender': 'foo@example.com',
- ... 'cc_myself': True}
- >>> f = ContactForm(data)
- >>> f.is_valid()
- True
- >>> f.cleaned_data
- {'cc_myself': True, 'message': u'Hi there', 'sender': u'foo@example.com', 'subject': u'hello'}
-
-.. versionchanged:: 1.0
- The ``cleaned_data`` attribute was called ``clean_data`` in earlier releases.
-
-Note that any text-based field -- such as ``CharField`` or ``EmailField`` --
-always cleans the input into a Unicode string. We'll cover the encoding
-implications later in this document.
-
-If your data does *not* validate, your ``Form`` instance will not have a
-``cleaned_data`` attribute::
-
- >>> data = {'subject': '',
- ... 'message': 'Hi there',
- ... 'sender': 'invalid e-mail address',
- ... 'cc_myself': True}
- >>> f = ContactForm(data)
- >>> f.is_valid()
- False
- >>> f.cleaned_data
- Traceback (most recent call last):
- ...
- AttributeError: 'ContactForm' object has no attribute 'cleaned_data'
-
-``cleaned_data`` will always *only* contain a key for fields defined in the
-``Form``, even if you pass extra data when you define the ``Form``. In this
-example, we pass a bunch of extra fields to the ``ContactForm`` constructor,
-but ``cleaned_data`` contains only the form's fields::
-
- >>> data = {'subject': 'hello',
- ... 'message': 'Hi there',
- ... 'sender': 'foo@example.com',
- ... 'cc_myself': True,
- ... 'extra_field_1': 'foo',
- ... 'extra_field_2': 'bar',
- ... 'extra_field_3': 'baz'}
- >>> f = ContactForm(data)
- >>> f.is_valid()
- True
- >>> f.cleaned_data # Doesn't contain extra_field_1, etc.
- {'cc_myself': True, 'message': u'Hi there', 'sender': u'foo@example.com', 'subject': u'hello'}
-
-``cleaned_data`` will include a key and value for *all* fields defined in the
-``Form``, even if the data didn't include a value for fields that are not
-required. In this example, the data dictionary doesn't include a value for the
-``nick_name`` field, but ``cleaned_data`` includes it, with an empty value::
-
- >>> class OptionalPersonForm(Form):
- ... first_name = CharField()
- ... last_name = CharField()
- ... nick_name = CharField(required=False)
- >>> data = {'first_name': u'John', 'last_name': u'Lennon'}
- >>> f = OptionalPersonForm(data)
- >>> f.is_valid()
- True
- >>> f.cleaned_data
- {'nick_name': u'', 'first_name': u'John', 'last_name': u'Lennon'}
-
-In this above example, the ``cleaned_data`` value for ``nick_name`` is set to an
-empty string, because ``nick_name`` is ``CharField``, and ``CharField``\s treat
-empty values as an empty string. Each field type knows what its "blank" value
-is -- e.g., for ``DateField``, it's ``None`` instead of the empty string. For
-full details on each field's behavior in this case, see the "Empty value" note
-for each field in the "Built-in ``Field`` classes" section below.
-
-You can write code to perform validation for particular form fields (based on
-their name) or for the form as a whole (considering combinations of various
-fields). More information about this is in :doc:`/ref/forms/validation`.
-
-Outputting forms as HTML
-------------------------
-
-The second task of a ``Form`` object is to render itself as HTML. To do so,
-simply ``print`` it::
-
- >>> f = ContactForm()
- >>> print f
- <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
- <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>
- <tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>
- <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>
-
-If the form is bound to data, the HTML output will include that data
-appropriately. For example, if a field is represented by an
-``<input type="text">``, the data will be in the ``value`` attribute. If a
-field is represented by an ``<input type="checkbox">``, then that HTML will
-include ``checked="checked"`` if appropriate::
-
- >>> data = {'subject': 'hello',
- ... 'message': 'Hi there',
- ... 'sender': 'foo@example.com',
- ... 'cc_myself': True}
- >>> f = ContactForm(data)
- >>> print f
- <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" /></td></tr>
- <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" /></td></tr>
- <tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" value="foo@example.com" /></td></tr>
- <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked="checked" /></td></tr>
-
-This default output is a two-column HTML table, with a ``<tr>`` for each field.
-Notice the following:
-
- * For flexibility, the output does *not* include the ``<table>`` and
- ``</table>`` tags, nor does it include the ``<form>`` and ``</form>``
- tags or an ``<input type="submit">`` tag. It's your job to do that.
-
- * Each field type has a default HTML representation. ``CharField`` and
- ``EmailField`` are represented by an ``<input type="text">``.
- ``BooleanField`` is represented by an ``<input type="checkbox">``. Note
- these are merely sensible defaults; you can specify which HTML to use for
- a given field by using widgets, which we'll explain shortly.
-
- * The HTML ``name`` for each tag is taken directly from its attribute name
- in the ``ContactForm`` class.
-
- * The text label for each field -- e.g. ``'Subject:'``, ``'Message:'`` and
- ``'Cc myself:'`` is generated from the field name by converting all
- underscores to spaces and upper-casing the first letter. Again, note
- these are merely sensible defaults; you can also specify labels manually.
-
- * Each text label is surrounded in an HTML ``<label>`` tag, which points
- to the appropriate form field via its ``id``. Its ``id``, in turn, is
- generated by prepending ``'id_'`` to the field name. The ``id``
- attributes and ``<label>`` tags are included in the output by default, to
- follow best practices, but you can change that behavior.
-
-Although ``<table>`` output is the default output style when you ``print`` a
-form, other output styles are available. Each style is available as a method on
-a form object, and each rendering method returns a Unicode object.
-
-``as_p()``
-~~~~~~~~~~
-
-.. method:: Form.as_p
-
- ``as_p()`` renders the form as a series of ``<p>`` tags, with each ``<p>``
- containing one field::
-
- >>> f = ContactForm()
- >>> f.as_p()
- u'<p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></p>\n<p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p>\n<p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></p>\n<p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>'
- >>> print f.as_p()
- <p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></p>
- <p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p>
- <p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></p>
- <p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>
-
-``as_ul()``
-~~~~~~~~~~~
-
-.. method:: Form.as_ul
-
- ``as_ul()`` renders the form as a series of ``<li>`` tags, with each
- ``<li>`` containing one field. It does *not* include the ``<ul>`` or
- ``</ul>``, so that you can specify any HTML attributes on the ``<ul>`` for
- flexibility::
-
- >>> f = ContactForm()
- >>> f.as_ul()
- u'<li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></li>\n<li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li>\n<li><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></li>\n<li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></li>'
- >>> print f.as_ul()
- <li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></li>
- <li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li>
- <li><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></li>
- <li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></li>
-
-``as_table()``
-~~~~~~~~~~~~~~
-
-.. method:: Form.as_table
-
- Finally, ``as_table()`` outputs the form as an HTML ``<table>``. This is
- exactly the same as ``print``. In fact, when you ``print`` a form object,
- it calls its ``as_table()`` method behind the scenes::
-
- >>> f = ContactForm()
- >>> f.as_table()
- u'<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>\n<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>\n<tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>\n<tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>'
- >>> print f.as_table()
- <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
- <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>
- <tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>
- <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>
-
-Styling required or erroneous form rows
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2
-
-It's pretty common to style form rows and fields that are required or have
-errors. For example, you might want to present required form rows in bold and
-highlight errors in red.
-
-The :class:`Form` class has a couple of hooks you can use to add ``class``
-attributes to required rows or to rows with errors: simple set the
-:attr:`Form.error_css_class` and/or :attr:`Form.required_css_class`
-attributes::
-
- class ContactForm(Form):
- error_css_class = 'error'
- required_css_class = 'required'
-
- # ... and the rest of your fields here
-
-Once you've done that, rows will be given ``"error"`` and/or ``"required"``
-classes, as needed. The HTML will look something like::
-
- >>> f = ContactForm(data)
- >>> print f.as_table()
- <tr class="required"><th><label for="id_subject">Subject:</label> ...
- <tr class="required"><th><label for="id_message">Message:</label> ...
- <tr class="required error"><th><label for="id_sender">Sender:</label> ...
- <tr><th><label for="id_cc_myself">Cc myself:<label> ...
-
-.. _ref-forms-api-configuring-label:
-
-Configuring HTML ``<label>`` tags
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-An HTML ``<label>`` tag designates which label text is associated with which
-form element. This small enhancement makes forms more usable and more accessible
-to assistive devices. It's always a good idea to use ``<label>`` tags.
-
-By default, the form rendering methods include HTML ``id`` attributes on the
-form elements and corresponding ``<label>`` tags around the labels. The ``id``
-attribute values are generated by prepending ``id_`` to the form field names.
-This behavior is configurable, though, if you want to change the ``id``
-convention or remove HTML ``id`` attributes and ``<label>`` tags entirely.
-
-Use the ``auto_id`` argument to the ``Form`` constructor to control the label
-and ``id`` behavior. This argument must be ``True``, ``False`` or a string.
-
-If ``auto_id`` is ``False``, then the form output will not include ``<label>``
-tags nor ``id`` attributes::
-
- >>> f = ContactForm(auto_id=False)
- >>> print f.as_table()
- <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" /></td></tr>
- <tr><th>Message:</th><td><input type="text" name="message" /></td></tr>
- <tr><th>Sender:</th><td><input type="text" name="sender" /></td></tr>
- <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr>
- >>> print f.as_ul()
- <li>Subject: <input type="text" name="subject" maxlength="100" /></li>
- <li>Message: <input type="text" name="message" /></li>
- <li>Sender: <input type="text" name="sender" /></li>
- <li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
- >>> print f.as_p()
- <p>Subject: <input type="text" name="subject" maxlength="100" /></p>
- <p>Message: <input type="text" name="message" /></p>
- <p>Sender: <input type="text" name="sender" /></p>
- <p>Cc myself: <input type="checkbox" name="cc_myself" /></p>
-
-If ``auto_id`` is set to ``True``, then the form output *will* include
-``<label>`` tags and will simply use the field name as its ``id`` for each form
-field::
-
- >>> f = ContactForm(auto_id=True)
- >>> print f.as_table()
- <tr><th><label for="subject">Subject:</label></th><td><input id="subject" type="text" name="subject" maxlength="100" /></td></tr>
- <tr><th><label for="message">Message:</label></th><td><input type="text" name="message" id="message" /></td></tr>
- <tr><th><label for="sender">Sender:</label></th><td><input type="text" name="sender" id="sender" /></td></tr>
- <tr><th><label for="cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="cc_myself" /></td></tr>
- >>> print f.as_ul()
- <li><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" /></li>
- <li><label for="message">Message:</label> <input type="text" name="message" id="message" /></li>
- <li><label for="sender">Sender:</label> <input type="text" name="sender" id="sender" /></li>
- <li><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself" /></li>
- >>> print f.as_p()
- <p><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" /></p>
- <p><label for="message">Message:</label> <input type="text" name="message" id="message" /></p>
- <p><label for="sender">Sender:</label> <input type="text" name="sender" id="sender" /></p>
- <p><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself" /></p>
-
-If ``auto_id`` is set to a string containing the format character ``'%s'``,
-then the form output will include ``<label>`` tags, and will generate ``id``
-attributes based on the format string. For example, for a format string
-``'field_%s'``, a field named ``subject`` will get the ``id`` value
-``'field_subject'``. Continuing our example::
-
- >>> f = ContactForm(auto_id='id_for_%s')
- >>> print f.as_table()
- <tr><th><label for="id_for_subject">Subject:</label></th><td><input id="id_for_subject" type="text" name="subject" maxlength="100" /></td></tr>
- <tr><th><label for="id_for_message">Message:</label></th><td><input type="text" name="message" id="id_for_message" /></td></tr>
- <tr><th><label for="id_for_sender">Sender:</label></th><td><input type="text" name="sender" id="id_for_sender" /></td></tr>
- <tr><th><label for="id_for_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></td></tr>
- >>> print f.as_ul()
- <li><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></li>
- <li><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" /></li>
- <li><label for="id_for_sender">Sender:</label> <input type="text" name="sender" id="id_for_sender" /></li>
- <li><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li>
- >>> print f.as_p()
- <p><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></p>
- <p><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" /></p>
- <p><label for="id_for_sender">Sender:</label> <input type="text" name="sender" id="id_for_sender" /></p>
- <p><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></p>
-
-If ``auto_id`` is set to any other true value -- such as a string that doesn't
-include ``%s`` -- then the library will act as if ``auto_id`` is ``True``.
-
-By default, ``auto_id`` is set to the string ``'id_%s'``.
-
-Normally, a colon (``:``) will be appended after any label name when a form is
-rendered. It's possible to change the colon to another character, or omit it
-entirely, using the ``label_suffix`` parameter::
-
- >>> f = ContactForm(auto_id='id_for_%s', label_suffix='')
- >>> print f.as_ul()
- <li><label for="id_for_subject">Subject</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></li>
- <li><label for="id_for_message">Message</label> <input type="text" name="message" id="id_for_message" /></li>
- <li><label for="id_for_sender">Sender</label> <input type="text" name="sender" id="id_for_sender" /></li>
- <li><label for="id_for_cc_myself">Cc myself</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li>
- >>> f = ContactForm(auto_id='id_for_%s', label_suffix=' ->')
- >>> print f.as_ul()
- <li><label for="id_for_subject">Subject -></label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></li>
- <li><label for="id_for_message">Message -></label> <input type="text" name="message" id="id_for_message" /></li>
- <li><label for="id_for_sender">Sender -></label> <input type="text" name="sender" id="id_for_sender" /></li>
- <li><label for="id_for_cc_myself">Cc myself -></label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li>
-
-Note that the label suffix is added only if the last character of the
-label isn't a punctuation character (``.``, ``!``, ``?`` or ``:``)
-
-Notes on field ordering
-~~~~~~~~~~~~~~~~~~~~~~~
-
-In the ``as_p()``, ``as_ul()`` and ``as_table()`` shortcuts, the fields are
-displayed in the order in which you define them in your form class. For
-example, in the ``ContactForm`` example, the fields are defined in the order
-``subject``, ``message``, ``sender``, ``cc_myself``. To reorder the HTML
-output, just change the order in which those fields are listed in the class.
-
-How errors are displayed
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you render a bound ``Form`` object, the act of rendering will automatically
-run the form's validation if it hasn't already happened, and the HTML output
-will include the validation errors as a ``<ul class="errorlist">`` near the
-field. The particular positioning of the error messages depends on the output
-method you're using::
-
- >>> data = {'subject': '',
- ... 'message': 'Hi there',
- ... 'sender': 'invalid e-mail address',
- ... 'cc_myself': True}
- >>> f = ContactForm(data, auto_id=False)
- >>> print f.as_table()
- <tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" /></td></tr>
- <tr><th>Message:</th><td><input type="text" name="message" value="Hi there" /></td></tr>
- <tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul><input type="text" name="sender" value="invalid e-mail address" /></td></tr>
- <tr><th>Cc myself:</th><td><input checked="checked" type="checkbox" name="cc_myself" /></td></tr>
- >>> print f.as_ul()
- <li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" /></li>
- <li>Message: <input type="text" name="message" value="Hi there" /></li>
- <li><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul>Sender: <input type="text" name="sender" value="invalid e-mail address" /></li>
- <li>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></li>
- >>> print f.as_p()
- <p><ul class="errorlist"><li>This field is required.</li></ul></p>
- <p>Subject: <input type="text" name="subject" maxlength="100" /></p>
- <p>Message: <input type="text" name="message" value="Hi there" /></p>
- <p><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul></p>
- <p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p>
- <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p>
-
-Customizing the error list format
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-By default, forms use ``django.forms.util.ErrorList`` to format validation
-errors. If you'd like to use an alternate class for displaying errors, you can
-pass that in at construction time::
-
- >>> from django.forms.util import ErrorList
- >>> class DivErrorList(ErrorList):
- ... def __unicode__(self):
- ... return self.as_divs()
- ... def as_divs(self):
- ... if not self: return u''
- ... return u'<div class="errorlist">%s</div>' % ''.join([u'<div class="error">%s</div>' % e for e in self])
- >>> f = ContactForm(data, auto_id=False, error_class=DivErrorList)
- >>> f.as_p()
- <div class="errorlist"><div class="error">This field is required.</div></div>
- <p>Subject: <input type="text" name="subject" maxlength="100" /></p>
- <p>Message: <input type="text" name="message" value="Hi there" /></p>
- <div class="errorlist"><div class="error">Enter a valid e-mail address.</div></div>
- <p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p>
- <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p>
-
-More granular output
-~~~~~~~~~~~~~~~~~~~~
-
-The ``as_p()``, ``as_ul()`` and ``as_table()`` methods are simply shortcuts for
-lazy developers -- they're not the only way a form object can be displayed.
-
-To display the HTML for a single field in your form, use dictionary lookup
-syntax using the field's name as the key, and print the resulting object::
-
- >>> f = ContactForm()
- >>> print f['subject']
- <input id="id_subject" type="text" name="subject" maxlength="100" />
- >>> print f['message']
- <input type="text" name="message" id="id_message" />
- >>> print f['sender']
- <input type="text" name="sender" id="id_sender" />
- >>> print f['cc_myself']
- <input type="checkbox" name="cc_myself" id="id_cc_myself" />
-
-Call ``str()`` or ``unicode()`` on the field to get its rendered HTML as a
-string or Unicode object, respectively::
-
- >>> str(f['subject'])
- '<input id="id_subject" type="text" name="subject" maxlength="100" />'
- >>> unicode(f['subject'])
- u'<input id="id_subject" type="text" name="subject" maxlength="100" />'
-
-Form objects define a custom ``__iter__()`` method, which allows you to loop
-through their fields::
-
- >>> f = ContactForm()
- >>> for field in f: print field
- <input id="id_subject" type="text" name="subject" maxlength="100" />
- <input type="text" name="message" id="id_message" />
- <input type="text" name="sender" id="id_sender" />
- <input type="checkbox" name="cc_myself" id="id_cc_myself" />
-
-The field-specific output honors the form object's ``auto_id`` setting::
-
- >>> f = ContactForm(auto_id=False)
- >>> print f['message']
- <input type="text" name="message" />
- >>> f = ContactForm(auto_id='id_%s')
- >>> print f['message']
- <input type="text" name="message" id="id_message" />
-
-For a field's list of errors, access the field's ``errors`` attribute. This
-is a list-like object that is displayed as an HTML ``<ul class="errorlist">``
-when printed::
-
- >>> data = {'subject': 'hi', 'message': '', 'sender': '', 'cc_myself': ''}
- >>> f = ContactForm(data, auto_id=False)
- >>> print f['message']
- <input type="text" name="message" />
- >>> f['message'].errors
- [u'This field is required.']
- >>> print f['message'].errors
- <ul class="errorlist"><li>This field is required.</li></ul>
- >>> f['subject'].errors
- []
- >>> print f['subject'].errors
-
- >>> str(f['subject'].errors)
- ''
-
-.. versionadded:: 1.2
-
-When you use Django's rendering shortcuts, CSS classes are used to
-indicate required form fields or fields that contain errors. If you're
-manually rendering a form, you can access these CSS classes using the
-``css_classes`` method::
-
- >>> f = ContactForm(data)
- >>> f['message'].css_classes()
- 'required'
-
-If you want to provide some additional classes in addition to the
-error and required classes that may be required, you can provide
-those classes as an argument::
-
- >>> f = ContactForm(data)
- >>> f['message'].css_classes('foo bar')
- 'foo bar required'
-
-.. _binding-uploaded-files:
-
-Binding uploaded files to a form
---------------------------------
-
-.. versionadded:: 1.0
-
-Dealing with forms that have ``FileField`` and ``ImageField`` fields
-is a little more complicated than a normal form.
-
-Firstly, in order to upload files, you'll need to make sure that your
-``<form>`` element correctly defines the ``enctype`` as
-``"multipart/form-data"``::
-
- <form enctype="multipart/form-data" method="post" action="/foo/">
-
-Secondly, when you use the form, you need to bind the file data. File
-data is handled separately to normal form data, so when your form
-contains a ``FileField`` and ``ImageField``, you will need to specify
-a second argument when you bind your form. So if we extend our
-ContactForm to include an ``ImageField`` called ``mugshot``, we
-need to bind the file data containing the mugshot image::
-
- # Bound form with an image field
- >>> from django.core.files.uploadedfile import SimpleUploadedFile
- >>> data = {'subject': 'hello',
- ... 'message': 'Hi there',
- ... 'sender': 'foo@example.com',
- ... 'cc_myself': True}
- >>> file_data = {'mugshot': SimpleUploadedFile('face.jpg', <file data>)}
- >>> f = ContactFormWithMugshot(data, file_data)
-
-In practice, you will usually specify ``request.FILES`` as the source
-of file data (just like you use ``request.POST`` as the source of
-form data)::
-
- # Bound form with an image field, data from the request
- >>> f = ContactFormWithMugshot(request.POST, request.FILES)
-
-Constructing an unbound form is the same as always -- just omit both
-form data *and* file data::
-
- # Unbound form with a image field
- >>> f = ContactFormWithMugshot()
-
-Testing for multipart forms
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you're writing reusable views or templates, you may not know ahead of time
-whether your form is a multipart form or not. The ``is_multipart()`` method
-tells you whether the form requires multipart encoding for submission::
-
- >>> f = ContactFormWithMugshot()
- >>> f.is_multipart()
- True
-
-Here's an example of how you might use this in a template::
-
- {% if form.is_multipart %}
- <form enctype="multipart/form-data" method="post" action="/foo/">
- {% else %}
- <form method="post" action="/foo/">
- {% endif %}
- {{ form }}
- </form>
-
-Subclassing forms
------------------
-
-If you have multiple ``Form`` classes that share fields, you can use
-subclassing to remove redundancy.
-
-When you subclass a custom ``Form`` class, the resulting subclass will
-include all fields of the parent class(es), followed by the fields you define
-in the subclass.
-
-In this example, ``ContactFormWithPriority`` contains all the fields from
-``ContactForm``, plus an additional field, ``priority``. The ``ContactForm``
-fields are ordered first::
-
- >>> class ContactFormWithPriority(ContactForm):
- ... priority = forms.CharField()
- >>> f = ContactFormWithPriority(auto_id=False)
- >>> print f.as_ul()
- <li>Subject: <input type="text" name="subject" maxlength="100" /></li>
- <li>Message: <input type="text" name="message" /></li>
- <li>Sender: <input type="text" name="sender" /></li>
- <li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
- <li>Priority: <input type="text" name="priority" /></li>
-
-It's possible to subclass multiple forms, treating forms as "mix-ins." In this
-example, ``BeatleForm`` subclasses both ``PersonForm`` and ``InstrumentForm``
-(in that order), and its field list includes the fields from the parent
-classes::
-
- >>> class PersonForm(Form):
- ... first_name = CharField()
- ... last_name = CharField()
- >>> class InstrumentForm(Form):
- ... instrument = CharField()
- >>> class BeatleForm(PersonForm, InstrumentForm):
- ... haircut_type = CharField()
- >>> b = BeatleForm(auto_id=False)
- >>> print b.as_ul()
- <li>First name: <input type="text" name="first_name" /></li>
- <li>Last name: <input type="text" name="last_name" /></li>
- <li>Instrument: <input type="text" name="instrument" /></li>
- <li>Haircut type: <input type="text" name="haircut_type" /></li>
-
-.. _form-prefix:
-
-Prefixes for forms
-------------------
-
-.. attribute:: Form.prefix
-
-You can put several Django forms inside one ``<form>`` tag. To give each
-``Form`` its own namespace, use the ``prefix`` keyword argument::
-
- >>> mother = PersonForm(prefix="mother")
- >>> father = PersonForm(prefix="father")
- >>> print mother.as_ul()
- <li><label for="id_mother-first_name">First name:</label> <input type="text" name="mother-first_name" id="id_mother-first_name" /></li>
- <li><label for="id_mother-last_name">Last name:</label> <input type="text" name="mother-last_name" id="id_mother-last_name" /></li>
- >>> print father.as_ul()
- <li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" /></li>
- <li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name" /></li>
diff --git a/parts/django/docs/ref/forms/fields.txt b/parts/django/docs/ref/forms/fields.txt
deleted file mode 100644
index 91f245a..0000000
--- a/parts/django/docs/ref/forms/fields.txt
+++ /dev/null
@@ -1,939 +0,0 @@
-===========
-Form fields
-===========
-
-.. module:: django.forms.fields
- :synopsis: Django's built-in form fields.
-
-.. currentmodule:: django.forms
-
-.. class:: Field(**kwargs)
-
-When you create a ``Form`` class, the most important part is defining the
-fields of the form. Each field has custom validation logic, along with a few
-other hooks.
-
-.. method:: Field.clean(value)
-
-Although the primary way you'll use ``Field`` classes is in ``Form`` classes,
-you can also instantiate them and use them directly to get a better idea of
-how they work. Each ``Field`` instance has a ``clean()`` method, which takes
-a single argument and either raises a ``django.forms.ValidationError``
-exception or returns the clean value::
-
- >>> from django import forms
- >>> f = forms.EmailField()
- >>> f.clean('foo@example.com')
- u'foo@example.com'
- >>> f.clean(u'foo@example.com')
- u'foo@example.com'
- >>> f.clean('invalid e-mail address')
- Traceback (most recent call last):
- ...
- ValidationError: [u'Enter a valid e-mail address.']
-
-Core field arguments
---------------------
-
-Each ``Field`` class constructor takes at least these arguments. Some
-``Field`` classes take additional, field-specific arguments, but the following
-should *always* be accepted:
-
-``required``
-~~~~~~~~~~~~
-
-.. attribute:: Field.required
-
-By default, each ``Field`` class assumes the value is required, so if you pass
-an empty value -- either ``None`` or the empty string (``""``) -- then
-``clean()`` will raise a ``ValidationError`` exception::
-
- >>> f = forms.CharField()
- >>> f.clean('foo')
- u'foo'
- >>> f.clean('')
- Traceback (most recent call last):
- ...
- ValidationError: [u'This field is required.']
- >>> f.clean(None)
- Traceback (most recent call last):
- ...
- ValidationError: [u'This field is required.']
- >>> f.clean(' ')
- u' '
- >>> f.clean(0)
- u'0'
- >>> f.clean(True)
- u'True'
- >>> f.clean(False)
- u'False'
-
-To specify that a field is *not* required, pass ``required=False`` to the
-``Field`` constructor::
-
- >>> f = forms.CharField(required=False)
- >>> f.clean('foo')
- u'foo'
- >>> f.clean('')
- u''
- >>> f.clean(None)
- u''
- >>> f.clean(0)
- u'0'
- >>> f.clean(True)
- u'True'
- >>> f.clean(False)
- u'False'
-
-If a ``Field`` has ``required=False`` and you pass ``clean()`` an empty value,
-then ``clean()`` will return a *normalized* empty value rather than raising
-``ValidationError``. For ``CharField``, this will be a Unicode empty string.
-For other ``Field`` classes, it might be ``None``. (This varies from field to
-field.)
-
-``label``
-~~~~~~~~~
-
-.. attribute:: Field.label
-
-The ``label`` argument lets you specify the "human-friendly" label for this
-field. This is used when the ``Field`` is displayed in a ``Form``.
-
-As explained in "Outputting forms as HTML" above, the default label for a
-``Field`` is generated from the field name by converting all underscores to
-spaces and upper-casing the first letter. Specify ``label`` if that default
-behavior doesn't result in an adequate label.
-
-Here's a full example ``Form`` that implements ``label`` for two of its fields.
-We've specified ``auto_id=False`` to simplify the output::
-
- >>> class CommentForm(forms.Form):
- ... name = forms.CharField(label='Your name')
- ... url = forms.URLField(label='Your Web site', required=False)
- ... comment = forms.CharField()
- >>> f = CommentForm(auto_id=False)
- >>> print f
- <tr><th>Your name:</th><td><input type="text" name="name" /></td></tr>
- <tr><th>Your Web site:</th><td><input type="text" name="url" /></td></tr>
- <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
-
-``initial``
-~~~~~~~~~~~
-
-.. attribute:: Field.initial
-
-The ``initial`` argument lets you specify the initial value to use when
-rendering this ``Field`` in an unbound ``Form``.
-
-To specify dynamic initial data, see the :attr:`Form.initial` parameter.
-
-The use-case for this is when you want to display an "empty" form in which a
-field is initialized to a particular value. For example::
-
- >>> class CommentForm(forms.Form):
- ... name = forms.CharField(initial='Your name')
- ... url = forms.URLField(initial='http://')
- ... comment = forms.CharField()
- >>> f = CommentForm(auto_id=False)
- >>> print f
- <tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
- <tr><th>Url:</th><td><input type="text" name="url" value="http://" /></td></tr>
- <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
-
-You may be thinking, why not just pass a dictionary of the initial values as
-data when displaying the form? Well, if you do that, you'll trigger validation,
-and the HTML output will include any validation errors::
-
- >>> class CommentForm(forms.Form):
- ... name = forms.CharField()
- ... url = forms.URLField()
- ... comment = forms.CharField()
- >>> default_data = {'name': 'Your name', 'url': 'http://'}
- >>> f = CommentForm(default_data, auto_id=False)
- >>> print f
- <tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
- <tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="text" name="url" value="http://" /></td></tr>
- <tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" /></td></tr>
-
-This is why ``initial`` values are only displayed for unbound forms. For bound
-forms, the HTML output will use the bound data.
-
-Also note that ``initial`` values are *not* used as "fallback" data in
-validation if a particular field's value is not given. ``initial`` values are
-*only* intended for initial form display::
-
- >>> class CommentForm(forms.Form):
- ... name = forms.CharField(initial='Your name')
- ... url = forms.URLField(initial='http://')
- ... comment = forms.CharField()
- >>> data = {'name': '', 'url': '', 'comment': 'Foo'}
- >>> f = CommentForm(data)
- >>> f.is_valid()
- False
- # The form does *not* fall back to using the initial values.
- >>> f.errors
- {'url': [u'This field is required.'], 'name': [u'This field is required.']}
-
-Instead of a constant, you can also pass any callable::
-
- >>> import datetime
- >>> class DateForm(forms.Form):
- ... day = forms.DateField(initial=datetime.date.today)
- >>> print DateForm()
- <tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" /><td></tr>
-
-The callable will be evaluated only when the unbound form is displayed, not when it is defined.
-
-``widget``
-~~~~~~~~~~
-
-.. attribute:: Field.widget
-
-The ``widget`` argument lets you specify a ``Widget`` class to use when
-rendering this ``Field``. See :doc:`/ref/forms/widgets` for more information.
-
-``help_text``
-~~~~~~~~~~~~~
-
-.. attribute:: Field.help_text
-
-The ``help_text`` argument lets you specify descriptive text for this
-``Field``. If you provide ``help_text``, it will be displayed next to the
-``Field`` when the ``Field`` is rendered by one of the convenience ``Form``
-methods (e.g., ``as_ul()``).
-
-Here's a full example ``Form`` that implements ``help_text`` for two of its
-fields. We've specified ``auto_id=False`` to simplify the output::
-
- >>> class HelpTextContactForm(forms.Form):
- ... subject = forms.CharField(max_length=100, help_text='100 characters max.')
- ... message = forms.CharField()
- ... sender = forms.EmailField(help_text='A valid e-mail address, please.')
- ... cc_myself = forms.BooleanField(required=False)
- >>> f = HelpTextContactForm(auto_id=False)
- >>> print f.as_table()
- <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" /><br />100 characters max.</td></tr>
- <tr><th>Message:</th><td><input type="text" name="message" /></td></tr>
- <tr><th>Sender:</th><td><input type="text" name="sender" /><br />A valid e-mail address, please.</td></tr>
- <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr>
- >>> print f.as_ul()
- <li>Subject: <input type="text" name="subject" maxlength="100" /> 100 characters max.</li>
- <li>Message: <input type="text" name="message" /></li>
- <li>Sender: <input type="text" name="sender" /> A valid e-mail address, please.</li>
- <li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
- >>> print f.as_p()
- <p>Subject: <input type="text" name="subject" maxlength="100" /> 100 characters max.</p>
- <p>Message: <input type="text" name="message" /></p>
- <p>Sender: <input type="text" name="sender" /> A valid e-mail address, please.</p>
- <p>Cc myself: <input type="checkbox" name="cc_myself" /></p>
-
-``error_messages``
-~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. attribute:: Field.error_messages
-
-The ``error_messages`` argument lets you override the default messages that the
-field will raise. Pass in a dictionary with keys matching the error messages you
-want to override. For example, here is the default error message::
-
- >>> generic = forms.CharField()
- >>> generic.clean('')
- Traceback (most recent call last):
- ...
- ValidationError: [u'This field is required.']
-
-And here is a custom error message::
-
- >>> name = forms.CharField(error_messages={'required': 'Please enter your name'})
- >>> name.clean('')
- Traceback (most recent call last):
- ...
- ValidationError: [u'Please enter your name']
-
-In the `built-in Field classes`_ section below, each ``Field`` defines the
-error message keys it uses.
-
-``validators``
-~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2
-
-.. attribute:: Field.validators
-
-The ``validators`` argument lets you provide a list of validation functions
-for this field.
-
-See the :doc:`validators documentation </ref/validators>` for more information.
-
-``localize``
-~~~~~~~~~~~~
-
-.. versionadded:: 1.2
-
-.. attribute:: Field.localize
-
-The ``localize`` argument enables the localization of form data, input as well
-as the rendered output.
-
-See the :ref:`format localization <format-localization>` documentation for
-more information.
-
-
-Built-in ``Field`` classes
---------------------------
-
-Naturally, the ``forms`` library comes with a set of ``Field`` classes that
-represent common validation needs. This section documents each built-in field.
-
-For each field, we describe the default widget used if you don't specify
-``widget``. We also specify the value returned when you provide an empty value
-(see the section on ``required`` above to understand what that means).
-
-``BooleanField``
-~~~~~~~~~~~~~~~~
-
-.. class:: BooleanField(**kwargs)
-
- * Default widget: ``CheckboxInput``
- * Empty value: ``False``
- * Normalizes to: A Python ``True`` or ``False`` value.
- * Validates that the value is ``True`` (e.g. the check box is checked) if
- the field has ``required=True``.
- * Error message keys: ``required``
-
-.. versionchanged:: 1.0
- The empty value for a ``CheckboxInput`` (and hence the standard
- ``BooleanField``) has changed to return ``False`` instead of ``None`` in
- the Django 1.0.
-
-.. note::
-
- Since all ``Field`` subclasses have ``required=True`` by default, the
- validation condition here is important. If you want to include a boolean
- in your form that can be either ``True`` or ``False`` (e.g. a checked or
- unchecked checkbox), you must remember to pass in ``required=False`` when
- creating the ``BooleanField``.
-
-``CharField``
-~~~~~~~~~~~~~
-
-.. class:: CharField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates ``max_length`` or ``min_length``, if they are provided.
- Otherwise, all inputs are valid.
- * Error message keys: ``required``, ``max_length``, ``min_length``
-
-Has two optional arguments for validation:
-
-.. attribute:: CharField.max_length
-.. attribute:: CharField.min_length
-
- If provided, these arguments ensure that the string is at most or at least
- the given length.
-
-``ChoiceField``
-~~~~~~~~~~~~~~~
-
-.. class:: ChoiceField(**kwargs)
-
- * Default widget: ``Select``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates that the given value exists in the list of choices.
- * Error message keys: ``required``, ``invalid_choice``
-
-Takes one extra required argument:
-
-.. attribute:: ChoiceField.choices
-
- An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this
- field. This argument accepts the same formats as the ``choices`` argument
- to a model field. See the :ref:`model field reference documentation on
- choices <field-choices>` for more details.
-
-``TypedChoiceField``
-~~~~~~~~~~~~~~~~~~~~
-
-.. class:: TypedChoiceField(**kwargs)
-
-Just like a :class:`ChoiceField`, except :class:`TypedChoiceField` takes an
-extra ``coerce`` argument.
-
- * Default widget: ``Select``
- * Empty value: Whatever you've given as ``empty_value``
- * Normalizes to: the value returned by the ``coerce`` argument.
- * Validates that the given value exists in the list of choices.
- * Error message keys: ``required``, ``invalid_choice``
-
-Takes extra arguments:
-
-.. attribute:: TypedChoiceField.coerce
-
- A function that takes one argument and returns a coerced value. Examples
- include the built-in ``int``, ``float``, ``bool`` and other types. Defaults
- to an identity function.
-
-.. attribute:: TypedChoiceField.empty_value
-
- The value to use to represent "empty." Defaults to the empty string;
- ``None`` is another common choice here.
-
-``DateField``
-~~~~~~~~~~~~~
-
-.. class:: DateField(**kwargs)
-
- * Default widget: ``DateInput``
- * Empty value: ``None``
- * Normalizes to: A Python ``datetime.date`` object.
- * Validates that the given value is either a ``datetime.date``,
- ``datetime.datetime`` or string formatted in a particular date format.
- * Error message keys: ``required``, ``invalid``
-
-Takes one optional argument:
-
-.. attribute:: DateField.input_formats
-
- A list of formats used to attempt to convert a string to a valid
- ``datetime.date`` object.
-
-If no ``input_formats`` argument is provided, the default input formats are::
-
- '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
- '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
- '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
- '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
- '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
-
-.. versionchanged:: 1.1
- The ``DateField`` previously used a ``TextInput`` widget by default. It now
- uses a ``DateInput`` widget.
-
-``DateTimeField``
-~~~~~~~~~~~~~~~~~
-
-.. class:: DateTimeField(**kwargs)
-
- * Default widget: ``DateTimeInput``
- * Empty value: ``None``
- * Normalizes to: A Python ``datetime.datetime`` object.
- * Validates that the given value is either a ``datetime.datetime``,
- ``datetime.date`` or string formatted in a particular datetime format.
- * Error message keys: ``required``, ``invalid``
-
-Takes one optional argument:
-
-.. attribute:: DateTimeField.input_formats
-
- A list of formats used to attempt to convert a string to a valid
- ``datetime.datetime`` object.
-
-If no ``input_formats`` argument is provided, the default input formats are::
-
- '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
- '%Y-%m-%d %H:%M', # '2006-10-25 14:30'
- '%Y-%m-%d', # '2006-10-25'
- '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
- '%m/%d/%Y %H:%M', # '10/25/2006 14:30'
- '%m/%d/%Y', # '10/25/2006'
- '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
- '%m/%d/%y %H:%M', # '10/25/06 14:30'
- '%m/%d/%y', # '10/25/06'
-
-.. versionchanged:: 1.0
- The ``DateTimeField`` used to use a ``TextInput`` widget by default. This has now changed.
-
-``DecimalField``
-~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. class:: DecimalField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``None``
- * Normalizes to: A Python ``decimal``.
- * Validates that the given value is a decimal. Leading and trailing
- whitespace is ignored.
- * Error message keys: ``required``, ``invalid``, ``max_value``,
- ``min_value``, ``max_digits``, ``max_decimal_places``,
- ``max_whole_digits``
-
-Takes four optional arguments:
-
-.. attribute:: DecimalField.max_value
-.. attribute:: DecimalField.min_value
-
- These attributes define the limits for the fields value.
-
-.. attribute:: DecimalField.max_digits
-
- The maximum number of digits (those before the decimal point plus those
- after the decimal point, with leading zeros stripped) permitted in the
- value.
-
-.. attribute:: DecimalField.decimal_places
-
- The maximum number of decimal places permitted.
-
-``EmailField``
-~~~~~~~~~~~~~~
-
-.. class:: EmailField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates that the given value is a valid e-mail address, using a
- moderately complex regular expression.
- * Error message keys: ``required``, ``invalid``
-
-Has two optional arguments for validation, ``max_length`` and ``min_length``.
-If provided, these arguments ensure that the string is at most or at least the
-given length.
-
-.. versionchanged:: 1.2
- The EmailField previously did not recognize e-mail addresses as valid that
- contained an IDN (Internationalized Domain Name; a domain containing
- unicode characters) domain part. This has now been corrected.
-
-``FileField``
-~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. class:: FileField(**kwargs)
-
- * Default widget: ``FileInput``
- * Empty value: ``None``
- * Normalizes to: An ``UploadedFile`` object that wraps the file content
- and file name into a single object.
- * Validates that non-empty file data has been bound to the form.
- * Error message keys: ``required``, ``invalid``, ``missing``, ``empty``
-
-To learn more about the ``UploadedFile`` object, see the :doc:`file uploads
-documentation </topics/http/file-uploads>`.
-
-When you use a ``FileField`` in a form, you must also remember to
-:ref:`bind the file data to the form <binding-uploaded-files>`.
-
-``FilePathField``
-~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. class:: FilePathField(**kwargs)
-
- * Default widget: ``Select``
- * Empty value: ``None``
- * Normalizes to: A unicode object
- * Validates that the selected choice exists in the list of choices.
- * Error message keys: ``required``, ``invalid_choice``
-
-The field allows choosing from files inside a certain directory. It takes three
-extra arguments; only ``path`` is required:
-
-.. attribute:: FilePathField.path
-
- The absolute path to the directory whose contents you want listed. This
- directory must exist.
-
-.. attribute:: FilePathField.recursive
-
- If ``False`` (the default) only the direct contents of ``path`` will be
- offered as choices. If ``True``, the directory will be descended into
- recursively and all descendants will be listed as choices.
-
-.. attribute:: FilePathField.match
-
- A regular expression pattern; only files with names matching this expression
- will be allowed as choices.
-
-``FloatField``
-~~~~~~~~~~~~~~
-
- * Default widget: ``TextInput``
- * Empty value: ``None``
- * Normalizes to: A Python float.
- * Validates that the given value is an float. Leading and trailing
- whitespace is allowed, as in Python's ``float()`` function.
- * Error message keys: ``required``, ``invalid``, ``max_value``,
- ``min_value``
-
-Takes two optional arguments for validation, ``max_value`` and ``min_value``.
-These control the range of values permitted in the field.
-
-``ImageField``
-~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. class:: ImageField(**kwargs)
-
- * Default widget: ``FileInput``
- * Empty value: ``None``
- * Normalizes to: An ``UploadedFile`` object that wraps the file content
- and file name into a single object.
- * Validates that file data has been bound to the form, and that the
- file is of an image format understood by PIL.
- * Error message keys: ``required``, ``invalid``, ``missing``, ``empty``,
- ``invalid_image``
-
-Using an ImageField requires that the `Python Imaging Library`_ is installed.
-
-When you use an ``ImageField`` on a form, you must also remember to
-:ref:`bind the file data to the form <binding-uploaded-files>`.
-
-.. _Python Imaging Library: http://www.pythonware.com/products/pil/
-
-``IntegerField``
-~~~~~~~~~~~~~~~~
-
-.. class:: IntegerField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``None``
- * Normalizes to: A Python integer or long integer.
- * Validates that the given value is an integer. Leading and trailing
- whitespace is allowed, as in Python's ``int()`` function.
- * Error message keys: ``required``, ``invalid``, ``max_value``,
- ``min_value``
-
-Takes two optional arguments for validation:
-
-.. attribute:: IntegerField.max_value
-.. attribute:: IntegerField.min_value
-
- These control the range of values permitted in the field.
-
-``IPAddressField``
-~~~~~~~~~~~~~~~~~~
-
-.. class:: IPAddressField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates that the given value is a valid IPv4 address, using a regular
- expression.
- * Error message keys: ``required``, ``invalid``
-
-``MultipleChoiceField``
-~~~~~~~~~~~~~~~~~~~~~~~
-
-.. class:: MultipleChoiceField(**kwargs)
-
- * Default widget: ``SelectMultiple``
- * Empty value: ``[]`` (an empty list)
- * Normalizes to: A list of Unicode objects.
- * Validates that every value in the given list of values exists in the list
- of choices.
- * Error message keys: ``required``, ``invalid_choice``, ``invalid_list``
-
-Takes one extra argument, ``choices``, as for ``ChoiceField``.
-
-``NullBooleanField``
-~~~~~~~~~~~~~~~~~~~~
-
-.. class:: NullBooleanField(**kwargs)
-
- * Default widget: ``NullBooleanSelect``
- * Empty value: ``None``
- * Normalizes to: A Python ``True``, ``False`` or ``None`` value.
- * Validates nothing (i.e., it never raises a ``ValidationError``).
-
-``RegexField``
-~~~~~~~~~~~~~~
-
-.. class:: RegexField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates that the given value matches against a certain regular
- expression.
- * Error message keys: ``required``, ``invalid``
-
-Takes one required argument:
-
-.. attribute:: RegexField.regex
-
- A regular expression specified either as a string or a compiled regular
- expression object.
-
-Also takes ``max_length`` and ``min_length``, which work just as they do for
-``CharField``.
-
-The optional argument ``error_message`` is also accepted for backwards
-compatibility. The preferred way to provide an error message is to use the
-``error_messages`` argument, passing a dictionary with ``'invalid'`` as a key
-and the error message as the value.
-
-``SlugField``
-~~~~~~~~~~~~~
-
-.. class:: SlugField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates that the given value contains only letters, numbers,
- underscores, and hyphens.
- * Error messages: ``required``, ``invalid``
-
-This field is intended for use in representing a model
-:class:`~django.db.models.SlugField` in forms.
-
-``TimeField``
-~~~~~~~~~~~~~
-
-.. class:: TimeField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``None``
- * Normalizes to: A Python ``datetime.time`` object.
- * Validates that the given value is either a ``datetime.time`` or string
- formatted in a particular time format.
- * Error message keys: ``required``, ``invalid``
-
-Takes one optional argument:
-
-.. attribute:: TimeField.input_formats
-
- A list of formats used to attempt to convert a string to a valid
- ``datetime.time`` object.
-
-If no ``input_formats`` argument is provided, the default input formats are::
-
- '%H:%M:%S', # '14:30:59'
- '%H:%M', # '14:30'
-
-``URLField``
-~~~~~~~~~~~~
-
-.. class:: URLField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates that the given value is a valid URL.
- * Error message keys: ``required``, ``invalid``, ``invalid_link``
-
-Takes the following optional arguments:
-
-.. attribute:: URLField.max_length
-.. attribute:: URLField.min_length
-
- Same as ``CharField.max_length`` and ``CharField.min_length``.
-
-.. attribute:: URLField.verify_exists
-
- If ``True``, the validator will attempt to load the given URL, raising
- ``ValidationError`` if the page gives a 404. Defaults to ``False``.
-
-.. attribute:: URLField.validator_user_agent
-
- String used as the user-agent used when checking for a URL's existence.
- Defaults to the value of the ``URL_VALIDATOR_USER_AGENT`` setting.
-
-.. versionchanged:: 1.2
- The URLField previously did not recognize URLs as valid that contained an IDN
- (Internationalized Domain Name; a domain name containing unicode characters)
- domain name. This has now been corrected.
-
-
-Slightly complex built-in ``Field`` classes
--------------------------------------------
-
-``ComboField``
-~~~~~~~~~~~~~~
-
-.. class:: ComboField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: A Unicode object.
- * Validates that the given value against each of the fields specified
- as an argument to the ``ComboField``.
- * Error message keys: ``required``, ``invalid``
-
-Takes one extra required argument:
-
-.. attribute:: ComboField.fields
-
- The list of fields that should be used to validate the field's value (in
- the order in which they are provided).
-
- >>> f = ComboField(fields=[CharField(max_length=20), EmailField()])
- >>> f.clean('test@example.com')
- u'test@example.com'
- >>> f.clean('longemailaddress@example.com')
- Traceback (most recent call last):
- ...
- ValidationError: [u'Ensure this value has at most 20 characters (it has 28).']
-
-``MultiValueField``
-~~~~~~~~~~~~~~~~~~~
-
-.. class:: MultiValueField(**kwargs)
-
- * Default widget: ``TextInput``
- * Empty value: ``''`` (an empty string)
- * Normalizes to: the type returned by the ``compress`` method of the subclass.
- * Validates that the given value against each of the fields specified
- as an argument to the ``MultiValueField``.
- * Error message keys: ``required``, ``invalid``
-
- This abstract field (must be subclassed) aggregates the logic of multiple
- fields. Subclasses should not have to implement clean(). Instead, they must
- implement compress(), which takes a list of valid values and returns a
- "compressed" version of those values -- a single value. For example,
- :class:`SplitDateTimeField` is a subclass which combines a time field and
- a date field into a datetime object.
-
-Takes one extra required argument:
-
-.. attribute:: MultiValueField.fields
-
- A list of fields which are cleaned into a single field. Each value in
- ``clean`` is cleaned by the corresponding field in ``fields`` -- the first
- value is cleaned by the first field, the second value is cleaned by
- the second field, etc. Once all fields are cleaned, the list of clean
- values is "compressed" into a single value.
-
-``SplitDateTimeField``
-~~~~~~~~~~~~~~~~~~~~~~
-
-.. class:: SplitDateTimeField(**kwargs)
-
- * Default widget: ``SplitDateTimeWidget``
- * Empty value: ``None``
- * Normalizes to: A Python ``datetime.datetime`` object.
- * Validates that the given value is a ``datetime.datetime`` or string
- formatted in a particular datetime format.
- * Error message keys: ``required``, ``invalid``
-
-Takes two optional arguments:
-
-.. attribute:: SplitDateTimeField.input_date_formats
-
- A list of formats used to attempt to convert a string to a valid
- ``datetime.date`` object.
-
-If no ``input_date_formats`` argument is provided, the default input formats
-for ``DateField`` are used.
-
-.. attribute:: SplitDateTimeField.input_time_formats
-
- A list of formats used to attempt to convert a string to a valid
- ``datetime.time`` object.
-
-If no ``input_time_formats`` argument is provided, the default input formats
-for ``TimeField`` are used.
-
-.. versionchanged:: 1.1
- The ``SplitDateTimeField`` previously used two ``TextInput`` widgets by
- default. The ``input_date_formats`` and ``input_time_formats`` arguments
- are also new.
-
-Fields which handle relationships
----------------------------------
-
-Two fields are available for representing relationships between
-models: :class:`ModelChoiceField` and
-:class:`ModelMultipleChoiceField`. Both of these fields require a
-single ``queryset`` parameter that is used to create the choices for
-the field. Upon form validation, these fields will place either one
-model object (in the case of ``ModelChoiceField``) or multiple model
-objects (in the case of ``ModelMultipleChoiceField``) into the
-``cleaned_data`` dictionary of the form.
-
-``ModelChoiceField``
-~~~~~~~~~~~~~~~~~~~~
-
-.. class:: ModelChoiceField(**kwargs)
-
- * Default widget: ``Select``
- * Empty value: ``None``
- * Normalizes to: A model instance.
- * Validates that the given id exists in the queryset.
- * Error message keys: ``required``, ``invalid_choice``
-
-Allows the selection of a single model object, suitable for
-representing a foreign key. A single argument is required:
-
-.. attribute:: ModelChoiceField.queryset
-
- A ``QuerySet`` of model objects from which the choices for the
- field will be derived, and which will be used to validate the
- user's selection.
-
-``ModelChoiceField`` also takes one optional argument:
-
-.. attribute:: ModelChoiceField.empty_label
-
- By default the ``<select>`` widget used by ``ModelChoiceField`` will have a
- an empty choice at the top of the list. You can change the text of this
- label (which is ``"---------"`` by default) with the ``empty_label``
- attribute, or you can disable the empty label entirely by setting
- ``empty_label`` to ``None``::
-
- # A custom empty label
- field1 = forms.ModelChoiceField(queryset=..., empty_label="(Nothing)")
-
- # No empty label
- field2 = forms.ModelChoiceField(queryset=..., empty_label=None)
-
- Note that if a ``ModelChoiceField`` is required and has a default
- initial value, no empty choice is created (regardless of the value
- of ``empty_label``).
-
-The ``__unicode__`` method of the model will be called to generate
-string representations of the objects for use in the field's choices;
-to provide customized representations, subclass ``ModelChoiceField``
-and override ``label_from_instance``. This method will receive a model
-object, and should return a string suitable for representing it. For
-example::
-
- class MyModelChoiceField(ModelChoiceField):
- def label_from_instance(self, obj):
- return "My Object #%i" % obj.id
-
-``ModelMultipleChoiceField``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. class:: ModelMultipleChoiceField(**kwargs)
-
- * Default widget: ``SelectMultiple``
- * Empty value: ``[]`` (an empty list)
- * Normalizes to: A list of model instances.
- * Validates that every id in the given list of values exists in the
- queryset.
- * Error message keys: ``required``, ``list``, ``invalid_choice``,
- ``invalid_pk_value``
-
-Allows the selection of one or more model objects, suitable for
-representing a many-to-many relation. As with :class:`ModelChoiceField`,
-you can use ``label_from_instance`` to customize the object
-representations, and ``queryset`` is a required parameter:
-
-.. attribute:: ModelMultipleChoiceField.queryset
-
- A ``QuerySet`` of model objects from which the choices for the
- field will be derived, and which will be used to validate the
- user's selection.
-
-Creating custom fields
-----------------------
-
-If the built-in ``Field`` classes don't meet your needs, you can easily create
-custom ``Field`` classes. To do this, just create a subclass of
-``django.forms.Field``. Its only requirements are that it implement a
-``clean()`` method and that its ``__init__()`` method accept the core arguments
-mentioned above (``required``, ``label``, ``initial``, ``widget``,
-``help_text``).
diff --git a/parts/django/docs/ref/forms/index.txt b/parts/django/docs/ref/forms/index.txt
deleted file mode 100644
index 866afed..0000000
--- a/parts/django/docs/ref/forms/index.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-=====
-Forms
-=====
-
-Detailed form API reference. For introductory material, see :doc:`/topics/forms/index`.
-
-.. toctree::
- :maxdepth: 2
-
- api
- fields
- widgets
- validation
diff --git a/parts/django/docs/ref/forms/validation.txt b/parts/django/docs/ref/forms/validation.txt
deleted file mode 100644
index 1c047f2..0000000
--- a/parts/django/docs/ref/forms/validation.txt
+++ /dev/null
@@ -1,366 +0,0 @@
-Form and field validation
-=========================
-
-.. versionchanged:: 1.2
-
-Form validation happens when the data is cleaned. If you want to customize
-this process, there are various places you can change, each one serving a
-different purpose. Three types of cleaning methods are run during form
-processing. These are normally executed when you call the ``is_valid()``
-method on a form. There are other things that can trigger cleaning and
-validation (accessing the ``errors`` attribute or calling ``full_clean()``
-directly), but normally they won't be needed.
-
-In general, any cleaning method can raise ``ValidationError`` if there is a
-problem with the data it is processing, passing the relevant error message to
-the ``ValidationError`` constructor. If no ``ValidationError`` is raised, the
-method should return the cleaned (normalized) data as a Python object.
-
-If you detect multiple errors during a cleaning method and wish to signal all
-of them to the form submitter, it is possible to pass a list of errors to the
-``ValidationError`` constructor.
-
-Most validation can be done using `validators`_ - simple helpers that can be
-reused easily. Validators are simple functions (or callables) that take a single
-argument and raise ``ValidationError`` on invalid input. Validators are run
-after the field's ``to_python`` and ``validate`` methods have been called.
-
-Validation of a Form is split into several steps, which can be customized or
-overridden:
-
- * The ``to_python()`` method on a Field is the first step in every
- validation. It coerces the value to correct datatype and raises
- ``ValidationError`` if that is not possible. This method accepts the raw
- value from the widget and returns the converted value. For example, a
- FloatField will turn the data into a Python ``float`` or raise a
- ``ValidationError``.
-
- * The ``validate()`` method on a Field handles field-specific validation
- that is not suitable for a validator, It takes a value that has been
- coerced to correct datatype and raises ``ValidationError`` on any error.
- This method does not return anything and shouldn't alter the value. You
- should override it to handle validation logic that you can't or don't
- want to put in a validator.
-
- * The ``run_validators()`` method on a Field runs all of the field's
- validators and aggregates all the errors into a single
- ``ValidationError``. You shouldn't need to override this method.
-
- * The ``clean()`` method on a Field subclass. This is responsible for
- running ``to_python``, ``validate`` and ``run_validators`` in the correct
- order and propagating their errors. If, at any time, any of the methods
- raise ``ValidationError``, the validation stops and that error is raised.
- This method returns the clean data, which is then inserted into the
- ``cleaned_data`` dictionary of the form.
-
- * The ``clean_<fieldname>()`` method in a form subclass -- where
- ``<fieldname>`` is replaced with the name of the form field attribute.
- This method does any cleaning that is specific to that particular
- attribute, unrelated to the type of field that it is. This method is not
- passed any parameters. You will need to look up the value of the field
- in ``self.cleaned_data`` and remember that it will be a Python object
- at this point, not the original string submitted in the form (it will be
- in ``cleaned_data`` because the general field ``clean()`` method, above,
- has already cleaned the data once).
-
- For example, if you wanted to validate that the contents of a
- ``CharField`` called ``serialnumber`` was unique,
- ``clean_serialnumber()`` would be the right place to do this. You don't
- need a specific field (it's just a ``CharField``), but you want a
- formfield-specific piece of validation and, possibly,
- cleaning/normalizing the data.
-
- Just like the general field ``clean()`` method, above, this method
- should return the cleaned data, regardless of whether it changed
- anything or not.
-
- * The Form subclass's ``clean()`` method. This method can perform
- any validation that requires access to multiple fields from the form at
- once. This is where you might put in things to check that if field ``A``
- is supplied, field ``B`` must contain a valid e-mail address and the
- like. The data that this method returns is the final ``cleaned_data``
- attribute for the form, so don't forget to return the full list of
- cleaned data if you override this method (by default, ``Form.clean()``
- just returns ``self.cleaned_data``).
-
- Note that any errors raised by your ``Form.clean()`` override will not
- be associated with any field in particular. They go into a special
- "field" (called ``__all__``), which you can access via the
- ``non_field_errors()`` method if you need to. If you want to attach
- errors to a specific field in the form, you will need to access the
- ``_errors`` attribute on the form, which is `described later`_.
-
- Also note that there are special considerations when overriding
- the ``clean()`` method of a ``ModelForm`` subclass. (see the
- :ref:`ModelForm documentation
- <overriding-modelform-clean-method>` for more information)
-
-These methods are run in the order given above, one field at a time. That is,
-for each field in the form (in the order they are declared in the form
-definition), the ``Field.clean()`` method (or its override) is run, then
-``clean_<fieldname>()``. Finally, once those two methods are run for every
-field, the ``Form.clean()`` method, or its override, is executed.
-
-Examples of each of these methods are provided below.
-
-As mentioned, any of these methods can raise a ``ValidationError``. For any
-field, if the ``Field.clean()`` method raises a ``ValidationError``, any
-field-specific cleaning method is not called. However, the cleaning methods
-for all remaining fields are still executed.
-
-The ``clean()`` method for the ``Form`` class or subclass is always run. If
-that method raises a ``ValidationError``, ``cleaned_data`` will be an empty
-dictionary.
-
-The previous paragraph means that if you are overriding ``Form.clean()``, you
-should iterate through ``self.cleaned_data.items()``, possibly considering the
-``_errors`` dictionary attribute on the form as well. In this way, you will
-already know which fields have passed their individual validation requirements.
-
-.. _described later:
-
-Form subclasses and modifying field errors
-------------------------------------------
-
-Sometimes, in a form's ``clean()`` method, you will want to add an error
-message to a particular field in the form. This won't always be appropriate
-and the more typical situation is to raise a ``ValidationError`` from
-``Form.clean()``, which is turned into a form-wide error that is available
-through the ``Form.non_field_errors()`` method.
-
-When you really do need to attach the error to a particular field, you should
-store (or amend) a key in the ``Form._errors`` attribute. This attribute is an
-instance of a ``django.forms.util.ErrorDict`` class. Essentially, though, it's
-just a dictionary. There is a key in the dictionary for each field in the form
-that has an error. Each value in the dictionary is a
-``django.forms.util.ErrorList`` instance, which is a list that knows how to
-display itself in different ways. So you can treat ``_errors`` as a dictionary
-mapping field names to lists.
-
-If you want to add a new error to a particular field, you should check whether
-the key already exists in ``self._errors`` or not. If not, create a new entry
-for the given key, holding an empty ``ErrorList`` instance. In either case,
-you can then append your error message to the list for the field name in
-question and it will be displayed when the form is displayed.
-
-There is an example of modifying ``self._errors`` in the following section.
-
-.. admonition:: What's in a name?
-
- You may be wondering why is this attribute called ``_errors`` and not
- ``errors``. Normal Python practice is to prefix a name with an underscore
- if it's not for external usage. In this case, you are subclassing the
- ``Form`` class, so you are essentially writing new internals. In effect,
- you are given permission to access some of the internals of ``Form``.
-
- Of course, any code outside your form should never access ``_errors``
- directly. The data is available to external code through the ``errors``
- property, which populates ``_errors`` before returning it).
-
- Another reason is purely historical: the attribute has been called
- ``_errors`` since the early days of the forms module and changing it now
- (particularly since ``errors`` is used for the read-only property name)
- would be inconvenient for a number of reasons. You can use whichever
- explanation makes you feel more comfortable. The result is the same.
-
-Using validation in practice
-----------------------------
-
-The previous sections explained how validation works in general for forms.
-Since it can sometimes be easier to put things into place by seeing each
-feature in use, here are a series of small examples that use each of the
-previous features.
-
-.. _validators:
-
-Using validators
-~~~~~~~~~~~~~~~~
-.. versionadded:: 1.2
-
-Django's form (and model) fields support use of simple utility functions and
-classes known as validators. These can be passed to a field's constructor, via
-the field's ``validators`` argument, or defined on the Field class itself with
-the ``default_validators`` attribute.
-
-Simple validators can be used to validate values inside the field, let's have
-a look at Django's ``EmailField``::
-
- class EmailField(CharField):
- default_error_messages = {
- 'invalid': _(u'Enter a valid e-mail address.'),
- }
- default_validators = [validators.validate_email]
-
-As you can see, ``EmailField`` is just a ``CharField`` with customized error
-message and a validator that validates e-mail addresses. This can also be done
-on field definition so::
-
- email = forms.EmailField()
-
-is equivalent to::
-
- email = forms.CharField(validators=[validators.validate_email],
- error_messages={'invalid': _(u'Enter a valid e-mail address.')})
-
-
-Form field default cleaning
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Let's firstly create a custom form field that validates its input is a string
-containing comma-separated e-mail addresses. The full class looks like this::
-
- from django import forms
- from django.core.validators import validate_email
-
- class MultiEmailField(forms.Field):
- def to_python(self, value):
- "Normalize data to a list of strings."
-
- # Return an empty list if no input was given.
- if not value:
- return []
- return value.split(',')
-
- def validate(self, value):
- "Check if value consists only of valid emails."
-
- # Use the parent's handling of required fields, etc.
- super(MultiEmailField, self).validate(value)
-
- for email in value:
- validate_email(email)
-
-Every form that uses this field will have these methods run before anything
-else can be done with the field's data. This is cleaning that is specific to
-this type of field, regardless of how it is subsequently used.
-
-Let's create a simple ``ContactForm`` to demonstrate how you'd use this
-field::
-
- class ContactForm(forms.Form):
- subject = forms.CharField(max_length=100)
- message = forms.CharField()
- sender = forms.EmailField()
- recipients = MultiEmailField()
- cc_myself = forms.BooleanField(required=False)
-
-Simply use ``MultiEmailField`` like any other form field. When the
-``is_valid()`` method is called on the form, the ``MultiEmailField.clean()``
-method will be run as part of the cleaning process and it will, in turn, call
-the custom ``to_python()`` and ``validate()`` methods.
-
-Cleaning a specific field attribute
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Continuing on from the previous example, suppose that in our ``ContactForm``,
-we want to make sure that the ``recipients`` field always contains the address
-``"fred@example.com"``. This is validation that is specific to our form, so we
-don't want to put it into the general ``MultiEmailField`` class. Instead, we
-write a cleaning method that operates on the ``recipients`` field, like so::
-
- class ContactForm(forms.Form):
- # Everything as before.
- ...
-
- def clean_recipients(self):
- data = self.cleaned_data['recipients']
- if "fred@example.com" not in data:
- raise forms.ValidationError("You have forgotten about Fred!")
-
- # Always return the cleaned data, whether you have changed it or
- # not.
- return data
-
-Cleaning and validating fields that depend on each other
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Suppose we add another requirement to our contact form: if the ``cc_myself``
-field is ``True``, the ``subject`` must contain the word ``"help"``. We are
-performing validation on more than one field at a time, so the form's
-``clean()`` method is a good spot to do this. Notice that we are talking about
-the ``clean()`` method on the form here, whereas earlier we were writing a
-``clean()`` method on a field. It's important to keep the field and form
-difference clear when working out where to validate things. Fields are single
-data points, forms are a collection of fields.
-
-By the time the form's ``clean()`` method is called, all the individual field
-clean methods will have been run (the previous two sections), so
-``self.cleaned_data`` will be populated with any data that has survived so
-far. So you also need to remember to allow for the fact that the fields you
-are wanting to validate might not have survived the initial individual field
-checks.
-
-There are two way to report any errors from this step. Probably the most
-common method is to display the error at the top of the form. To create such
-an error, you can raise a ``ValidationError`` from the ``clean()`` method. For
-example::
-
- class ContactForm(forms.Form):
- # Everything as before.
- ...
-
- def clean(self):
- cleaned_data = self.cleaned_data
- cc_myself = cleaned_data.get("cc_myself")
- subject = cleaned_data.get("subject")
-
- if cc_myself and subject:
- # Only do something if both fields are valid so far.
- if "help" not in subject:
- raise forms.ValidationError("Did not send for 'help' in "
- "the subject despite CC'ing yourself.")
-
- # Always return the full collection of cleaned data.
- return cleaned_data
-
-In this code, if the validation error is raised, the form will display an
-error message at the top of the form (normally) describing the problem.
-
-The second approach might involve assigning the error message to one of the
-fields. In this case, let's assign an error message to both the "subject" and
-"cc_myself" rows in the form display. Be careful when doing this in practice,
-since it can lead to confusing form output. We're showing what is possible
-here and leaving it up to you and your designers to work out what works
-effectively in your particular situation. Our new code (replacing the previous
-sample) looks like this::
-
- class ContactForm(forms.Form):
- # Everything as before.
- ...
-
- def clean(self):
- cleaned_data = self.cleaned_data
- cc_myself = cleaned_data.get("cc_myself")
- subject = cleaned_data.get("subject")
-
- if cc_myself and subject and "help" not in subject:
- # We know these are not in self._errors now (see discussion
- # below).
- msg = u"Must put 'help' in subject when cc'ing yourself."
- self._errors["cc_myself"] = self.error_class([msg])
- self._errors["subject"] = self.error_class([msg])
-
- # These fields are no longer valid. Remove them from the
- # cleaned data.
- del cleaned_data["cc_myself"]
- del cleaned_data["subject"]
-
- # Always return the full collection of cleaned data.
- return cleaned_data
-
-As you can see, this approach requires a bit more effort, not withstanding the
-extra design effort to create a sensible form display. The details are worth
-noting, however. Firstly, earlier we mentioned that you might need to check if
-the field name keys already exist in the ``_errors`` dictionary. In this case,
-since we know the fields exist in ``self.cleaned_data``, they must have been
-valid when cleaned as individual fields, so there will be no corresponding
-entries in ``_errors``.
-
-Secondly, once we have decided that the combined data in the two fields we are
-considering aren't valid, we must remember to remove them from the
-``cleaned_data``.
-
-In fact, Django will currently completely wipe out the ``cleaned_data``
-dictionary if there are any errors in the form. However, this behaviour may
-change in the future, so it's not a bad idea to clean up after yourself in the
-first place.
diff --git a/parts/django/docs/ref/forms/widgets.txt b/parts/django/docs/ref/forms/widgets.txt
deleted file mode 100644
index 9d78b84..0000000
--- a/parts/django/docs/ref/forms/widgets.txt
+++ /dev/null
@@ -1,247 +0,0 @@
-=======
-Widgets
-=======
-
-.. module:: django.forms.widgets
- :synopsis: Django's built-in form widgets.
-
-.. currentmodule:: django.forms
-
-A widget is Django's representation of a HTML input element. The widget
-handles the rendering of the HTML, and the extraction of data from a GET/POST
-dictionary that corresponds to the widget.
-
-Django provides a representation of all the basic HTML widgets, plus some
-commonly used groups of widgets:
-
-.. class:: TextInput
-
- Text input: ``<input type='text' ...>``
-
-.. class:: PasswordInput
-
- Password input: ``<input type='password' ...>``
-
- Takes one optional argument:
-
- .. attribute:: PasswordInput.render_value
-
- Determines whether the widget will have a value filled in when the
- form is re-displayed after a validation error (default is ``True``).
-
-.. class:: HiddenInput
-
- Hidden input: ``<input type='hidden' ...>``
-
-.. class:: MultipleHiddenInput
-
- Multiple ``<input type='hidden' ...>`` widgets.
-
-.. class:: FileInput
-
- File upload input: ``<input type='file' ...>``
-
-.. class:: DateInput
-
- .. versionadded:: 1.1
-
- Date input as a simple text box: ``<input type='text' ...>``
-
- Takes one optional argument:
-
- .. attribute:: DateInput.format
-
- The format in which this field's initial value will be displayed.
-
- If no ``format`` argument is provided, the default format is ``'%Y-%m-%d'``.
-
-.. class:: DateTimeInput
-
- .. versionadded:: 1.0
-
- Date/time input as a simple text box: ``<input type='text' ...>``
-
- Takes one optional argument:
-
- .. attribute:: DateTimeInput.format
-
- The format in which this field's initial value will be displayed.
-
- If no ``format`` argument is provided, the default format is ``'%Y-%m-%d
- %H:%M:%S'``.
-
-.. class:: TimeInput
-
- Time input as a simple text box: ``<input type='text' ...>``
-
- Takes one optional argument:
-
- .. attribute:: TimeInput.format
-
- The format in which this field's initial value will be displayed.
-
- If no ``format`` argument is provided, the default format is ``'%H:%M:%S'``.
-
- .. versionchanged:: 1.1
- The ``format`` argument was not supported in Django 1.0.
-
-.. class:: Textarea
-
- Text area: ``<textarea>...</textarea>``
-
-.. class:: CheckboxInput
-
- Checkbox: ``<input type='checkbox' ...>``
-
- Takes one optional argument:
-
- .. attribute:: CheckboxInput.check_test
-
- A callable that takes the value of the CheckBoxInput
- and returns ``True`` if the checkbox should be checked for
- that value.
-
-.. class:: Select
-
- Select widget: ``<select><option ...>...</select>``
-
- Requires that your field provides :attr:`~Field.choices`.
-
-.. class:: NullBooleanSelect
-
- Select widget with options 'Unknown', 'Yes' and 'No'
-
-.. class:: SelectMultiple
-
- Select widget allowing multiple selection: ``<select
- multiple='multiple'>...</select>``
-
- Requires that your field provides :attr:`~Field.choices`.
-
-.. class:: RadioSelect
-
- A list of radio buttons:
-
- .. code-block:: html
-
- <ul>
- <li><input type='radio' ...></li>
- ...
- </ul>
-
- Requires that your field provides :attr:`~Field.choices`.
-
-.. class:: CheckboxSelectMultiple
-
- A list of checkboxes:
-
- .. code-block:: html
-
- <ul>
- <li><input type='checkbox' ...></li>
- ...
- </ul>
-
-.. class:: MultiWidget
-
- Wrapper around multiple other widgets
-
-.. class:: SplitDateTimeWidget
-
- Wrapper around two widgets: ``DateInput`` for the date, and ``TimeInput``
- for the time.
-
- Takes two optional arguments, ``date_format`` and ``time_format``, which
- work just like the ``format`` argument for ``DateInput`` and ``TimeInput``.
-
- .. versionchanged:: 1.1
- The ``date_format`` and ``time_format`` arguments were not supported in Django 1.0.
-
-.. class:: SelectDateWidget
-
- Wrapper around three select widgets: one each for month, day, and year.
- Note that this widget lives in a separate file from the standard widgets.
-
- .. code-block:: python
-
- from django.forms.extras.widgets import SelectDateWidget
-
- date = forms.DateField(widget=SelectDateWidget())
-
-Specifying widgets
-------------------
-
-.. attribute:: Form.widget
-
-Whenever you specify a field on a form, Django will use a default widget
-that is appropriate to the type of data that is to be displayed. To find
-which widget is used on which field, see the documentation for the
-built-in Field classes.
-
-However, if you want to use a different widget for a field, you can -
-just use the 'widget' argument on the field definition. For example::
-
- from django import forms
-
- class CommentForm(forms.Form):
- name = forms.CharField()
- url = forms.URLField()
- comment = forms.CharField(widget=forms.Textarea)
-
-This would specify a form with a comment that uses a larger Textarea widget,
-rather than the default TextInput widget.
-
-Customizing widget instances
-----------------------------
-
-When Django renders a widget as HTML, it only renders the bare minimum
-HTML - Django doesn't add a class definition, or any other widget-specific
-attributes. This means that all 'TextInput' widgets will appear the same
-on your Web page.
-
-If you want to make one widget look different to another, you need to
-specify additional attributes for each widget. When you specify a
-widget, you can provide a list of attributes that will be added to the
-rendered HTML for the widget.
-
-For example, take the following simple form::
-
- class CommentForm(forms.Form):
- name = forms.CharField()
- url = forms.URLField()
- comment = forms.CharField()
-
-This form will include three default TextInput widgets, with default rendering -
-no CSS class, no extra attributes. This means that the input boxes provided for
-each widget will be rendered exactly the same::
-
- >>> f = CommentForm(auto_id=False)
- >>> f.as_table()
- <tr><th>Name:</th><td><input type="text" name="name" /></td></tr>
- <tr><th>Url:</th><td><input type="text" name="url"/></td></tr>
- <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
-
-
-On a real Web page, you probably don't want every widget to look the same. You
-might want a larger input element for the comment, and you might want the 'name'
-widget to have some special CSS class. To do this, you use the ``attrs``
-argument when creating the widget:
-
-.. attribute:: Widget.attrs
-
-For example::
-
- class CommentForm(forms.Form):
- name = forms.CharField(
- widget=forms.TextInput(attrs={'class':'special'}))
- url = forms.URLField()
- comment = forms.CharField(
- widget=forms.TextInput(attrs={'size':'40'}))
-
-Django will then include the extra attributes in the rendered output::
-
- >>> f = CommentForm(auto_id=False)
- >>> f.as_table()
- <tr><th>Name:</th><td><input type="text" name="name" class="special"/></td></tr>
- <tr><th>Url:</th><td><input type="text" name="url"/></td></tr>
- <tr><th>Comment:</th><td><input type="text" name="comment" size="40"/></td></tr>
diff --git a/parts/django/docs/ref/generic-views.txt b/parts/django/docs/ref/generic-views.txt
deleted file mode 100644
index ea7fe2a..0000000
--- a/parts/django/docs/ref/generic-views.txt
+++ /dev/null
@@ -1,1095 +0,0 @@
-=============
-Generic views
-=============
-
-Writing Web applications can be monotonous, because we repeat certain patterns
-again and again. In Django, the most common of these patterns have been
-abstracted into "generic views" that let you quickly provide common views of
-an object without actually needing to write any Python code.
-
-A general introduction to generic views can be found in the :doc:`topic guide
-</topics/http/generic-views>`.
-
-This reference contains details of Django's built-in generic views, along with
-a list of all keyword arguments that a generic view expects. Remember that
-arguments may either come from the URL pattern or from the ``extra_context``
-additional-information dictionary.
-
-Most generic views require the ``queryset`` key, which is a ``QuerySet``
-instance; see :doc:`/topics/db/queries` for more information about ``QuerySet``
-objects.
-
-"Simple" generic views
-======================
-
-The ``django.views.generic.simple`` module contains simple views to handle a
-couple of common cases: rendering a template when no view logic is needed,
-and issuing a redirect.
-
-``django.views.generic.simple.direct_to_template``
---------------------------------------------------
-
-**Description:**
-
-Renders a given template, passing it a ``{{ params }}`` template variable,
-which is a dictionary of the parameters captured in the URL.
-
-**Required arguments:**
-
- * ``template``: The full name of a template to use.
-
-**Optional arguments:**
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
-**Example:**
-
-Given the following URL patterns::
-
- urlpatterns = patterns('django.views.generic.simple',
- (r'^foo/$', 'direct_to_template', {'template': 'foo_index.html'}),
- (r'^foo/(?P<id>\d+)/$', 'direct_to_template', {'template': 'foo_detail.html'}),
- )
-
-... a request to ``/foo/`` would render the template ``foo_index.html``, and a
-request to ``/foo/15/`` would render the ``foo_detail.html`` with a context
-variable ``{{ params.id }}`` that is set to ``15``.
-
-``django.views.generic.simple.redirect_to``
--------------------------------------------
-
-**Description:**
-
-Redirects to a given URL.
-
-The given URL may contain dictionary-style string formatting, which will be
-interpolated against the parameters captured in the URL. Because keyword
-interpolation is *always* done (even if no arguments are passed in), any ``"%"``
-characters in the URL must be written as ``"%%"`` so that Python will convert
-them to a single percent sign on output.
-
-If the given URL is ``None``, Django will return an ``HttpResponseGone`` (410).
-
-**Required arguments:**
-
- * ``url``: The URL to redirect to, as a string. Or ``None`` to raise a 410
- (Gone) HTTP error.
-
-**Optional arguments:**
-
- * ``permanent``: Whether the redirect should be permanent. The only
- difference here is the HTTP status code returned. If ``True``, then the
- redirect will use status code 301. If ``False``, then the redirect will
- use status code 302. By default, ``permanent`` is ``True``.
-
-.. versionadded:: 1.1
- The ``permanent`` keyword argument is new in Django 1.1.
-
-**Example:**
-
-This example issues a permanent redirect (HTTP status code 301) from
-``/foo/<id>/`` to ``/bar/<id>/``::
-
- urlpatterns = patterns('django.views.generic.simple',
- ('^foo/(?P<id>\d+)/$', 'redirect_to', {'url': '/bar/%(id)s/'}),
- )
-
-This example issues a non-permanent redirect (HTTP status code 302) from
-``/foo/<id>/`` to ``/bar/<id>/``::
-
- urlpatterns = patterns('django.views.generic.simple',
- ('^foo/(?P<id>\d+)/$', 'redirect_to', {'url': '/bar/%(id)s/', 'permanent': False}),
- )
-
-This example returns a 410 HTTP error for requests to ``/bar/``::
-
- urlpatterns = patterns('django.views.generic.simple',
- ('^bar/$', 'redirect_to', {'url': None}),
- )
-
-This example shows how ``"%"`` characters must be written in the URL in order
-to avoid confusion with Python's string formatting markers. If the redirect
-string is written as ``"%7Ejacob/"`` (with only a single ``%``), an exception would be raised::
-
- urlpatterns = patterns('django.views.generic.simple',
- ('^bar/$', 'redirect_to', {'url': '%%7Ejacob.'}),
- )
-
-Date-based generic views
-========================
-
-Date-based generic views (in the module ``django.views.generic.date_based``)
-are views for displaying drilldown pages for date-based data.
-
-``django.views.generic.date_based.archive_index``
--------------------------------------------------
-
-**Description:**
-
-A top-level index page showing the "latest" objects, by date. Objects with
-a date in the *future* are not included unless you set ``allow_future`` to
-``True``.
-
-**Required arguments:**
-
- * ``queryset``: A ``QuerySet`` of objects for which the archive serves.
-
- * ``date_field``: The name of the ``DateField`` or ``DateTimeField`` in
- the ``QuerySet``'s model that the date-based archive should use to
- determine the objects on the page.
-
-**Optional arguments:**
-
- * ``num_latest``: The number of latest objects to send to the template
- context. By default, it's 15.
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``allow_empty``: A boolean specifying whether to display the page if no
- objects are available. If this is ``False`` and no objects are available,
- the view will raise a 404 instead of displaying an empty page. By
- default, this is ``True``.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
- * ``allow_future``: A boolean specifying whether to include "future"
- objects on this page, where "future" means objects in which the field
- specified in ``date_field`` is greater than the current date/time. By
- default, this is ``False``.
-
- .. versionadded:: 1.0
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'latest'``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_archive.html`` by default, where:
-
- * ``<model_name>`` is your model's name in all lowercase. For a model
- ``StaffMember``, that'd be ``staffmember``.
-
- * ``<app_label>`` is the right-most part of the full Python path to
- your model's app. For example, if your model lives in
- ``apps/blog/models.py``, that'd be ``blog``.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``date_list``: A ``DateQuerySet`` object containing all years that have
- have objects available according to ``queryset``, represented as
- ``datetime.datetime`` objects. These are ordered in reverse. This is
- equivalent to ``queryset.dates(date_field, 'year')[::-1]``.
-
- .. versionchanged:: 1.0
- The behaviour depending on ``template_object_name`` is new in this version.
-
- * ``latest``: The ``num_latest`` objects in the system, ordered descending
- by ``date_field``. For example, if ``num_latest`` is ``10``, then
- ``latest`` will be a list of the latest 10 objects in ``queryset``.
-
- This variable's name depends on the ``template_object_name`` parameter,
- which is ``'latest'`` by default. If ``template_object_name`` is
- ``'foo'``, this variable's name will be ``foo``.
-
-``django.views.generic.date_based.archive_year``
-------------------------------------------------
-
-**Description:**
-
-A yearly archive page showing all available months in a given year. Objects
-with a date in the *future* are not displayed unless you set ``allow_future``
-to ``True``.
-
-**Required arguments:**
-
- * ``year``: The four-digit year for which the archive serves.
-
- * ``queryset``: A ``QuerySet`` of objects for which the archive serves.
-
- * ``date_field``: The name of the ``DateField`` or ``DateTimeField`` in
- the ``QuerySet``'s model that the date-based archive should use to
- determine the objects on the page.
-
-**Optional arguments:**
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``allow_empty``: A boolean specifying whether to display the page if no
- objects are available. If this is ``False`` and no objects are available,
- the view will raise a 404 instead of displaying an empty page. By
- default, this is ``False``.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``. The
- view will append ``'_list'`` to the value of this parameter in
- determining the variable's name.
-
- * ``make_object_list``: A boolean specifying whether to retrieve the full
- list of objects for this year and pass those to the template. If ``True``,
- this list of objects will be made available to the template as
- ``object_list``. (The name ``object_list`` may be different; see the docs
- for ``object_list`` in the "Template context" section below.) By default,
- this is ``False``.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
- * ``allow_future``: A boolean specifying whether to include "future"
- objects on this page, where "future" means objects in which the field
- specified in ``date_field`` is greater than the current date/time. By
- default, this is ``False``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_archive_year.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``date_list``: A ``DateQuerySet`` object containing all months that have
- have objects available according to ``queryset``, represented as
- ``datetime.datetime`` objects, in ascending order.
-
- * ``year``: The given year, as a four-character string.
-
- * ``object_list``: If the ``make_object_list`` parameter is ``True``, this
- will be set to a list of objects available for the given year, ordered by
- the date field. This variable's name depends on the
- ``template_object_name`` parameter, which is ``'object'`` by default. If
- ``template_object_name`` is ``'foo'``, this variable's name will be
- ``foo_list``.
-
- If ``make_object_list`` is ``False``, ``object_list`` will be passed to
- the template as an empty list.
-
-``django.views.generic.date_based.archive_month``
--------------------------------------------------
-
-**Description:**
-
-A monthly archive page showing all objects in a given month. Objects with a
-date in the *future* are not displayed unless you set ``allow_future`` to
-``True``.
-
-**Required arguments:**
-
- * ``year``: The four-digit year for which the archive serves (a string).
-
- * ``month``: The month for which the archive serves, formatted according to
- the ``month_format`` argument.
-
- * ``queryset``: A ``QuerySet`` of objects for which the archive serves.
-
- * ``date_field``: The name of the ``DateField`` or ``DateTimeField`` in
- the ``QuerySet``'s model that the date-based archive should use to
- determine the objects on the page.
-
-**Optional arguments:**
-
- * ``month_format``: A format string that regulates what format the
- ``month`` parameter uses. This should be in the syntax accepted by
- Python's ``time.strftime``. (See the `strftime docs`_.) It's set to
- ``"%b"`` by default, which is a three-letter month abbreviation. To
- change it to use numbers, use ``"%m"``.
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``allow_empty``: A boolean specifying whether to display the page if no
- objects are available. If this is ``False`` and no objects are available,
- the view will raise a 404 instead of displaying an empty page. By
- default, this is ``False``.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``. The
- view will append ``'_list'`` to the value of this parameter in
- determining the variable's name.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
- * ``allow_future``: A boolean specifying whether to include "future"
- objects on this page, where "future" means objects in which the field
- specified in ``date_field`` is greater than the current date/time. By
- default, this is ``False``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_archive_month.html`` by default.
-
-**Template context:**
-
-.. versionadded:: 1.2
- The inclusion of ``date_list`` in the template's context is new.
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``date_list``: A ``DateQuerySet`` object containing all days that have
- have objects available in the given month, according to ``queryset``,
- represented as ``datetime.datetime`` objects, in ascending order.
-
- * ``month``: A ``datetime.date`` object representing the given month.
-
- * ``next_month``: A ``datetime.date`` object representing the first day of
- the next month. If the next month is in the future, this will be
- ``None``.
-
- * ``previous_month``: A ``datetime.date`` object representing the first day
- of the previous month. Unlike ``next_month``, this will never be
- ``None``.
-
- * ``object_list``: A list of objects available for the given month. This
- variable's name depends on the ``template_object_name`` parameter, which
- is ``'object'`` by default. If ``template_object_name`` is ``'foo'``,
- this variable's name will be ``foo_list``.
-
-.. _strftime docs: http://docs.python.org/library/time.html#time.strftime
-
-``django.views.generic.date_based.archive_week``
-------------------------------------------------
-
-**Description:**
-
-A weekly archive page showing all objects in a given week. Objects with a date
-in the *future* are not displayed unless you set ``allow_future`` to ``True``.
-
-**Required arguments:**
-
- * ``year``: The four-digit year for which the archive serves (a string).
-
- * ``week``: The week of the year for which the archive serves (a string).
- Weeks start with Sunday.
-
- * ``queryset``: A ``QuerySet`` of objects for which the archive serves.
-
- * ``date_field``: The name of the ``DateField`` or ``DateTimeField`` in
- the ``QuerySet``'s model that the date-based archive should use to
- determine the objects on the page.
-
-**Optional arguments:**
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``allow_empty``: A boolean specifying whether to display the page if no
- objects are available. If this is ``False`` and no objects are available,
- the view will raise a 404 instead of displaying an empty page. By
- default, this is ``True``.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``. The
- view will append ``'_list'`` to the value of this parameter in
- determining the variable's name.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
- * ``allow_future``: A boolean specifying whether to include "future"
- objects on this page, where "future" means objects in which the field
- specified in ``date_field`` is greater than the current date/time. By
- default, this is ``False``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_archive_week.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``week``: A ``datetime.date`` object representing the first day of the
- given week.
-
- * ``object_list``: A list of objects available for the given week. This
- variable's name depends on the ``template_object_name`` parameter, which
- is ``'object'`` by default. If ``template_object_name`` is ``'foo'``,
- this variable's name will be ``foo_list``.
-
-``django.views.generic.date_based.archive_day``
------------------------------------------------
-
-**Description:**
-
-A day archive page showing all objects in a given day. Days in the future throw
-a 404 error, regardless of whether any objects exist for future days, unless
-you set ``allow_future`` to ``True``.
-
-**Required arguments:**
-
- * ``year``: The four-digit year for which the archive serves (a string).
-
- * ``month``: The month for which the archive serves, formatted according to
- the ``month_format`` argument.
-
- * ``day``: The day for which the archive serves, formatted according to the
- ``day_format`` argument.
-
- * ``queryset``: A ``QuerySet`` of objects for which the archive serves.
-
- * ``date_field``: The name of the ``DateField`` or ``DateTimeField`` in
- the ``QuerySet``'s model that the date-based archive should use to
- determine the objects on the page.
-
-**Optional arguments:**
-
- * ``month_format``: A format string that regulates what format the
- ``month`` parameter uses. This should be in the syntax accepted by
- Python's ``time.strftime``. (See the `strftime docs`_.) It's set to
- ``"%b"`` by default, which is a three-letter month abbreviation. To
- change it to use numbers, use ``"%m"``.
-
- * ``day_format``: Like ``month_format``, but for the ``day`` parameter.
- It defaults to ``"%d"`` (day of the month as a decimal number, 01-31).
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``allow_empty``: A boolean specifying whether to display the page if no
- objects are available. If this is ``False`` and no objects are available,
- the view will raise a 404 instead of displaying an empty page. By
- default, this is ``False``.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``. The
- view will append ``'_list'`` to the value of this parameter in
- determining the variable's name.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
- * ``allow_future``: A boolean specifying whether to include "future"
- objects on this page, where "future" means objects in which the field
- specified in ``date_field`` is greater than the current date/time. By
- default, this is ``False``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_archive_day.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``day``: A ``datetime.date`` object representing the given day.
-
- * ``next_day``: A ``datetime.date`` object representing the next day. If
- the next day is in the future, this will be ``None``.
-
- * ``previous_day``: A ``datetime.date`` object representing the previous day.
- Unlike ``next_day``, this will never be ``None``.
-
- * ``object_list``: A list of objects available for the given day. This
- variable's name depends on the ``template_object_name`` parameter, which
- is ``'object'`` by default. If ``template_object_name`` is ``'foo'``,
- this variable's name will be ``foo_list``.
-
-``django.views.generic.date_based.archive_today``
--------------------------------------------------
-
-**Description:**
-
-A day archive page showing all objects for *today*. This is exactly the same as
-``archive_day``, except the ``year``/``month``/``day`` arguments are not used,
-and today's date is used instead.
-
-``django.views.generic.date_based.object_detail``
--------------------------------------------------
-
-**Description:**
-
-A page representing an individual object. If the object has a date value in the
-future, the view will throw a 404 error by default, unless you set
-``allow_future`` to ``True``.
-
-**Required arguments:**
-
- * ``year``: The object's four-digit year (a string).
-
- * ``month``: The object's month , formatted according to the
- ``month_format`` argument.
-
- * ``day``: The object's day , formatted according to the ``day_format``
- argument.
-
- * ``queryset``: A ``QuerySet`` that contains the object.
-
- * ``date_field``: The name of the ``DateField`` or ``DateTimeField`` in
- the ``QuerySet``'s model that the generic view should use to look up the
- object according to ``year``, ``month`` and ``day``.
-
- * Either ``object_id`` or (``slug`` *and* ``slug_field``) is required.
-
- If you provide ``object_id``, it should be the value of the primary-key
- field for the object being displayed on this page.
-
- Otherwise, ``slug`` should be the slug of the given object, and
- ``slug_field`` should be the name of the slug field in the ``QuerySet``'s
- model. By default, ``slug_field`` is ``'slug'``.
-
-**Optional arguments:**
-
- * ``month_format``: A format string that regulates what format the
- ``month`` parameter uses. This should be in the syntax accepted by
- Python's ``time.strftime``. (See the `strftime docs`_.) It's set to
- ``"%b"`` by default, which is a three-letter month abbreviation. To
- change it to use numbers, use ``"%m"``.
-
- * ``day_format``: Like ``month_format``, but for the ``day`` parameter.
- It defaults to ``"%d"`` (day of the month as a decimal number, 01-31).
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_name_field``: The name of a field on the object whose value is
- the template name to use. This lets you store template names in the data.
- In other words, if your object has a field ``'the_template'`` that
- contains a string ``'foo.html'``, and you set ``template_name_field`` to
- ``'the_template'``, then the generic view for this object will use the
- template ``'foo.html'``.
-
- It's a bit of a brain-bender, but it's useful in some cases.
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
- * ``allow_future``: A boolean specifying whether to include "future"
- objects on this page, where "future" means objects in which the field
- specified in ``date_field`` is greater than the current date/time. By
- default, this is ``False``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_detail.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``object``: The object. This variable's name depends on the
- ``template_object_name`` parameter, which is ``'object'`` by default. If
- ``template_object_name`` is ``'foo'``, this variable's name will be
- ``foo``.
-
-List/detail generic views
-=========================
-
-The list-detail generic-view framework (in the
-``django.views.generic.list_detail`` module) is similar to the date-based one,
-except the former simply has two views: a list of objects and an individual
-object page.
-
-``django.views.generic.list_detail.object_list``
-------------------------------------------------
-
-**Description:**
-
-A page representing a list of objects.
-
-**Required arguments:**
-
- * ``queryset``: A ``QuerySet`` that represents the objects.
-
-**Optional arguments:**
-
- * ``paginate_by``: An integer specifying how many objects should be
- displayed per page. If this is given, the view will paginate objects with
- ``paginate_by`` objects per page. The view will expect either a ``page``
- query string parameter (via ``GET``) or a ``page`` variable specified in
- the URLconf. See `Notes on pagination`_ below.
-
- * ``page``: The current page number, as an integer, or the string
- ``'last'``. This is 1-based. See `Notes on pagination`_ below.
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``allow_empty``: A boolean specifying whether to display the page if no
- objects are available. If this is ``False`` and no objects are available,
- the view will raise a 404 instead of displaying an empty page. By
- default, this is ``True``.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``. The
- view will append ``'_list'`` to the value of this parameter in
- determining the variable's name.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_list.html`` by default.
-
-**Template context:**
-
-.. versionadded:: 1.0
- The ``paginator`` and ``page_obj`` context variables are new.
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``object_list``: The list of objects. This variable's name depends on the
- ``template_object_name`` parameter, which is ``'object'`` by default. If
- ``template_object_name`` is ``'foo'``, this variable's name will be
- ``foo_list``.
-
- * ``is_paginated``: A boolean representing whether the results are
- paginated. Specifically, this is set to ``False`` if the number of
- available objects is less than or equal to ``paginate_by``.
-
-If the results are paginated, the context will contain these extra variables:
-
- * ``paginator``: An instance of ``django.core.paginator.Paginator``.
-
- * ``page_obj``: An instance of ``django.core.paginator.Page``.
-
-Notes on pagination
-~~~~~~~~~~~~~~~~~~~
-
-If ``paginate_by`` is specified, Django will paginate the results. You can
-specify the page number in the URL in one of two ways:
-
- * Use the ``page`` parameter in the URLconf. For example, this is what
- your URLconf might look like::
-
- (r'^objects/page(?P<page>[0-9]+)/$', 'object_list', dict(info_dict))
-
- * Pass the page number via the ``page`` query-string parameter. For
- example, a URL would look like this::
-
- /objects/?page=3
-
- * To loop over all the available page numbers, use the ``page_range``
- variable. You can iterate over the list provided by ``page_range``
- to create a link to every page of results.
-
-These values and lists are 1-based, not 0-based, so the first page would be
-represented as page ``1``.
-
-For more on pagination, read the :doc:`pagination documentation
-</topics/pagination>`.
-
-.. versionadded:: 1.0
-
-As a special case, you are also permitted to use ``last`` as a value for
-``page``::
-
- /objects/?page=last
-
-This allows you to access the final page of results without first having to
-determine how many pages there are.
-
-Note that ``page`` *must* be either a valid page number or the value ``last``;
-any other value for ``page`` will result in a 404 error.
-
-``django.views.generic.list_detail.object_detail``
---------------------------------------------------
-
-A page representing an individual object.
-
-**Description:**
-
-A page representing an individual object.
-
-**Required arguments:**
-
- * ``queryset``: A ``QuerySet`` that contains the object.
-
- * Either ``object_id`` or (``slug`` *and* ``slug_field``) is required.
-
- If you provide ``object_id``, it should be the value of the primary-key
- field for the object being displayed on this page.
-
- Otherwise, ``slug`` should be the slug of the given object, and
- ``slug_field`` should be the name of the slug field in the ``QuerySet``'s
- model. By default, ``slug_field`` is ``'slug'``.
-
-**Optional arguments:**
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_name_field``: The name of a field on the object whose value is
- the template name to use. This lets you store template names in the data.
- In other words, if your object has a field ``'the_template'`` that
- contains a string ``'foo.html'``, and you set ``template_name_field`` to
- ``'the_template'``, then the generic view for this object will use the
- template ``'foo.html'``.
-
- It's a bit of a brain-bender, but it's useful in some cases.
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``.
-
- * ``mimetype``: The MIME type to use for the resulting document. Defaults
- to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_detail.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``object``: The object. This variable's name depends on the
- ``template_object_name`` parameter, which is ``'object'`` by default. If
- ``template_object_name`` is ``'foo'``, this variable's name will be
- ``foo``.
-
-Create/update/delete generic views
-==================================
-
-The ``django.views.generic.create_update`` module contains a set of functions
-for creating, editing and deleting objects.
-
-.. versionchanged:: 1.0
-
-``django.views.generic.create_update.create_object`` and
-``django.views.generic.create_update.update_object`` now use the new :doc:`forms
-library </topics/forms/index>` to build and display the form.
-
-``django.views.generic.create_update.create_object``
-----------------------------------------------------
-
-**Description:**
-
-A page that displays a form for creating an object, redisplaying the form with
-validation errors (if there are any) and saving the object.
-
-**Required arguments:**
-
- * Either ``form_class`` or ``model`` is required.
-
- If you provide ``form_class``, it should be a ``django.forms.ModelForm``
- subclass. Use this argument when you need to customize the model's form.
- See the :doc:`ModelForm docs </topics/forms/modelforms>` for more
- information.
-
- Otherwise, ``model`` should be a Django model class and the form used
- will be a standard ``ModelForm`` for ``model``.
-
-**Optional arguments:**
-
- * ``post_save_redirect``: A URL to which the view will redirect after
- saving the object. By default, it's ``object.get_absolute_url()``.
-
- ``post_save_redirect`` may contain dictionary string formatting, which
- will be interpolated against the object's field attributes. For example,
- you could use ``post_save_redirect="/polls/%(slug)s/"``.
-
- * ``login_required``: A boolean that designates whether a user must be
- logged in, in order to see the page and save changes. This hooks into the
- Django :doc:`authentication system </topics/auth>`. By default, this is
- ``False``.
-
- If this is ``True``, and a non-logged-in user attempts to visit this page
- or save the form, Django will redirect the request to ``/accounts/login/``.
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_form.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``form``: A ``django.forms.ModelForm`` instance representing the form
- for creating the object. This lets you refer to form fields easily in the
- template system.
-
- For example, if the model has two fields, ``name`` and ``address``::
-
- <form action="" method="post">
- <p>{{ form.name.label_tag }} {{ form.name }}</p>
- <p>{{ form.address.label_tag }} {{ form.address }}</p>
- </form>
-
- See the :doc:`forms documentation </topics/forms/index>` for more
- information about using ``Form`` objects in templates.
-
-``django.views.generic.create_update.update_object``
-----------------------------------------------------
-
-**Description:**
-
-A page that displays a form for editing an existing object, redisplaying the
-form with validation errors (if there are any) and saving changes to the
-object. This uses a form automatically generated from the object's
-model class.
-
-**Required arguments:**
-
- * Either ``form_class`` or ``model`` is required.
-
- If you provide ``form_class``, it should be a ``django.forms.ModelForm``
- subclass. Use this argument when you need to customize the model's form.
- See the :doc:`ModelForm docs </topics/forms/modelforms>` for more
- information.
-
- Otherwise, ``model`` should be a Django model class and the form used
- will be a standard ``ModelForm`` for ``model``.
-
- * Either ``object_id`` or (``slug`` *and* ``slug_field``) is required.
-
- If you provide ``object_id``, it should be the value of the primary-key
- field for the object being displayed on this page.
-
- Otherwise, ``slug`` should be the slug of the given object, and
- ``slug_field`` should be the name of the slug field in the ``QuerySet``'s
- model. By default, ``slug_field`` is ``'slug'``.
-
-**Optional arguments:**
-
- * ``post_save_redirect``: A URL to which the view will redirect after
- saving the object. By default, it's ``object.get_absolute_url()``.
-
- ``post_save_redirect`` may contain dictionary string formatting, which
- will be interpolated against the object's field attributes. For example,
- you could use ``post_save_redirect="/polls/%(slug)s/"``.
-
- * ``login_required``: A boolean that designates whether a user must be
- logged in, in order to see the page and save changes. This hooks into the
- Django :doc:`authentication system </topics/auth>`. By default, this is
- ``False``.
-
- If this is ``True``, and a non-logged-in user attempts to visit this page
- or save the form, Django will redirect the request to ``/accounts/login/``.
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_form.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``form``: A ``django.forms.ModelForm`` instance representing the form
- for editing the object. This lets you refer to form fields easily in the
- template system.
-
- For example, if the model has two fields, ``name`` and ``address``::
-
- <form action="" method="post">
- <p>{{ form.name.label_tag }} {{ form.name }}</p>
- <p>{{ form.address.label_tag }} {{ form.address }}</p>
- </form>
-
- See the :doc:`forms documentation </topics/forms/index>` for more
- information about using ``Form`` objects in templates.
-
- * ``object``: The original object being edited. This variable's name
- depends on the ``template_object_name`` parameter, which is ``'object'``
- by default. If ``template_object_name`` is ``'foo'``, this variable's
- name will be ``foo``.
-
-``django.views.generic.create_update.delete_object``
-----------------------------------------------------
-
-**Description:**
-
-A view that displays a confirmation page and deletes an existing object. The
-given object will only be deleted if the request method is ``POST``. If this
-view is fetched via ``GET``, it will display a confirmation page that should
-contain a form that POSTs to the same URL.
-
-**Required arguments:**
-
- * ``model``: The Django model class of the object that the form will
- create.
-
- * Either ``object_id`` or (``slug`` *and* ``slug_field``) is required.
-
- If you provide ``object_id``, it should be the value of the primary-key
- field for the object being displayed on this page.
-
- Otherwise, ``slug`` should be the slug of the given object, and
- ``slug_field`` should be the name of the slug field in the ``QuerySet``'s
- model. By default, ``slug_field`` is ``'slug'``.
-
- * ``post_delete_redirect``: A URL to which the view will redirect after
- deleting the object.
-
-**Optional arguments:**
-
- * ``login_required``: A boolean that designates whether a user must be
- logged in, in order to see the page and save changes. This hooks into the
- Django :doc:`authentication system </topics/auth>`. By default, this is
- ``False``.
-
- If this is ``True``, and a non-logged-in user attempts to visit this page
- or save the form, Django will redirect the request to ``/accounts/login/``.
-
- * ``template_name``: The full name of a template to use in rendering the
- page. This lets you override the default template name (see below).
-
- * ``template_loader``: The template loader to use when loading the
- template. By default, it's ``django.template.loader``.
-
- * ``extra_context``: A dictionary of values to add to the template
- context. By default, this is an empty dictionary. If a value in the
- dictionary is callable, the generic view will call it
- just before rendering the template.
-
- * ``context_processors``: A list of template-context processors to apply to
- the view's template.
-
- * ``template_object_name``: Designates the name of the template variable
- to use in the template context. By default, this is ``'object'``.
-
-**Template name:**
-
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_confirm_delete.html`` by default.
-
-**Template context:**
-
-In addition to ``extra_context``, the template's context will be:
-
- * ``object``: The original object that's about to be deleted. This
- variable's name depends on the ``template_object_name`` parameter, which
- is ``'object'`` by default. If ``template_object_name`` is ``'foo'``,
- this variable's name will be ``foo``.
diff --git a/parts/django/docs/ref/index.txt b/parts/django/docs/ref/index.txt
deleted file mode 100644
index 0919417..0000000
--- a/parts/django/docs/ref/index.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-=============
-API Reference
-=============
-
-.. toctree::
- :maxdepth: 1
-
- authbackends
- contrib/index
- databases
- django-admin
- exceptions
- files/index
- forms/index
- generic-views
- middleware
- models/index
- request-response
- settings
- signals
- templates/index
- unicode
- utils
- validators
diff --git a/parts/django/docs/ref/middleware.txt b/parts/django/docs/ref/middleware.txt
deleted file mode 100644
index b3ddb23..0000000
--- a/parts/django/docs/ref/middleware.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-==========
-Middleware
-==========
-
-.. module:: django.middleware
- :synopsis: Django's built-in middleware classes.
-
-This document explains all middleware components that come with Django. For
-information on how how to use them and how to write your own middleware, see
-the :doc:`middleware usage guide </topics/http/middleware>`.
-
-Available middleware
-====================
-
-Cache middleware
-----------------
-
-.. module:: django.middleware.cache
- :synopsis: Middleware for the site-wide cache.
-
-.. class:: UpdateCacheMiddleware
-
-.. class:: FetchFromCacheMiddleware
-
-Enable the site-wide cache. If these are enabled, each Django-powered page will
-be cached for as long as the :setting:`CACHE_MIDDLEWARE_SECONDS` setting
-defines. See the :doc:`cache documentation </topics/cache>`.
-
-"Common" middleware
--------------------
-
-.. module:: django.middleware.common
- :synopsis: Middleware adding "common" conveniences for perfectionists.
-
-.. class:: CommonMiddleware
-
-Adds a few conveniences for perfectionists:
-
- * Forbids access to user agents in the :setting:`DISALLOWED_USER_AGENTS`
- setting, which should be a list of strings.
-
- * Performs URL rewriting based on the :setting:`APPEND_SLASH` and
- :setting:`PREPEND_WWW` settings.
-
- If :setting:`APPEND_SLASH` is ``True`` and the initial URL doesn't end
- with a slash, and it is not found in the URLconf, then a new URL is
- formed by appending a slash at the end. If this new URL is found in the
- URLconf, then Django redirects the request to this new URL. Otherwise,
- the initial URL is processed as usual.
-
- For example, ``foo.com/bar`` will be redirected to ``foo.com/bar/`` if
- you don't have a valid URL pattern for ``foo.com/bar`` but *do* have a
- valid pattern for ``foo.com/bar/``.
-
- .. versionchanged:: 1.0
- The behavior of :setting:`APPEND_SLASH` has changed slightly in this
- version. It didn't used to check whether the pattern was matched in
- the URLconf.
-
- If :setting:`PREPEND_WWW` is ``True``, URLs that lack a leading "www."
- will be redirected to the same URL with a leading "www."
-
- Both of these options are meant to normalize URLs. The philosophy is that
- each URL should exist in one, and only one, place. Technically a URL
- ``foo.com/bar`` is distinct from ``foo.com/bar/`` -- a search-engine
- indexer would treat them as separate URLs -- so it's best practice to
- normalize URLs.
-
- * Sends broken link notification emails to :setting:`MANAGERS` if
- :setting:`SEND_BROKEN_LINK_EMAILS` is set to ``True``.
-
- * Handles ETags based on the :setting:`USE_ETAGS` setting. If
- :setting:`USE_ETAGS` is set to ``True``, Django will calculate an ETag
- for each request by MD5-hashing the page content, and it'll take care of
- sending ``Not Modified`` responses, if appropriate.
-
-View metadata middleware
-------------------------
-
-.. module:: django.middleware.doc
- :synopsis: Middleware to help your app self-document.
-
-.. class:: XViewMiddleware
-
-Sends custom ``X-View`` HTTP headers to HEAD requests that come from IP
-addresses defined in the :setting:`INTERNAL_IPS` setting. This is used by
-Django's :doc:`automatic documentation system </ref/contrib/admin/admindocs>`.
-
-GZIP middleware
----------------
-
-.. module:: django.middleware.gzip
- :synopsis: Middleware to serve gziped content for performance.
-
-.. class:: GZipMiddleware
-
-Compresses content for browsers that understand gzip compression (all modern
-browsers).
-
-It is suggested to place this first in the middleware list, so that the
-compression of the response content is the last thing that happens. Will not
-compress content bodies less than 200 bytes long, when the response code is
-something other than 200, JavaScript files (for IE compatibility), or
-responses that have the ``Content-Encoding`` header already specified.
-
-Conditional GET middleware
---------------------------
-
-.. module:: django.middleware.http
- :synopsis: Middleware handling advanced HTTP features.
-
-.. class:: ConditionalGetMiddleware
-
-Handles conditional GET operations. If the response has a ``ETag`` or
-``Last-Modified`` header, and the request has ``If-None-Match`` or
-``If-Modified-Since``, the response is replaced by an
-:class:`~django.http.HttpNotModified`.
-
-Also sets the ``Date`` and ``Content-Length`` response-headers.
-
-Reverse proxy middleware
-------------------------
-
-.. class:: SetRemoteAddrFromForwardedFor
-
-.. versionchanged:: 1.1
-
-This middleware was removed in Django 1.1. See :ref:`the release notes
-<removed-setremoteaddrfromforwardedfor-middleware>` for details.
-
-Locale middleware
------------------
-
-.. module:: django.middleware.locale
- :synopsis: Middleware to enable language selection based on the request.
-
-.. class:: LocaleMiddleware
-
-Enables language selection based on data from the request. It customizes
-content for each user. See the :doc:`internationalization documentation
-</topics/i18n/index>`.
-
-Message middleware
-------------------
-
-.. module:: django.contrib.messages.middleware
- :synopsis: Message middleware.
-
-.. class:: MessageMiddleware
-
-.. versionadded:: 1.2
- ``MessageMiddleware`` was added.
-
-Enables cookie- and session-based message support. See the
-:doc:`messages documentation </ref/contrib/messages>`.
-
-Session middleware
-------------------
-
-.. module:: django.contrib.sessions.middleware
- :synopsis: Session middleware.
-
-.. class:: SessionMiddleware
-
-Enables session support. See the :doc:`session documentation
-</topics/http/sessions>`.
-
-Authentication middleware
--------------------------
-
-.. module:: django.contrib.auth.middleware
- :synopsis: Authentication middleware.
-
-.. class:: AuthenticationMiddleware
-
-Adds the ``user`` attribute, representing the currently-logged-in user, to
-every incoming ``HttpRequest`` object. See :doc:`Authentication in Web requests
-</topics/auth>`.
-
-CSRF protection middleware
---------------------------
-
-.. module:: django.middleware.csrf
- :synopsis: Middleware adding protection against Cross Site Request
- Forgeries.
-
-.. class:: CsrfMiddleware
-
-.. versionadded:: 1.0
-
-Adds protection against Cross Site Request Forgeries by adding hidden form
-fields to POST forms and checking requests for the correct value. See the
-:doc:`Cross Site Request Forgery protection documentation </ref/contrib/csrf>`.
-
-Transaction middleware
-----------------------
-
-.. module:: django.middleware.transaction
- :synopsis: Middleware binding a database transaction to each Web request.
-
-.. class:: TransactionMiddleware
-
-Binds commit and rollback to the request/response phase. If a view function
-runs successfully, a commit is done. If it fails with an exception, a rollback
-is done.
-
-The order of this middleware in the stack is important: middleware modules
-running outside of it run with commit-on-save - the default Django behavior.
-Middleware modules running inside it (coming later in the stack) will be under
-the same transaction control as the view functions.
-
-See the :doc:`transaction management documentation </topics/db/transactions>`.
diff --git a/parts/django/docs/ref/models/fields.txt b/parts/django/docs/ref/models/fields.txt
deleted file mode 100644
index 146ca43..0000000
--- a/parts/django/docs/ref/models/fields.txt
+++ /dev/null
@@ -1,1063 +0,0 @@
-=====================
-Model field reference
-=====================
-
-.. module:: django.db.models.fields
- :synopsis: Built-in field types.
-
-.. currentmodule:: django.db.models
-
-This document contains all the gory details about all the `field options`_ and
-`field types`_ Django's got to offer.
-
-.. seealso::
-
- If the built-in fields don't do the trick, you can easily :doc:`write your
- own custom model fields </howto/custom-model-fields>`.
-
-.. note::
-
- Technically, these models are defined in :mod:`django.db.models.fields`, but
- for convenience they're imported into :mod:`django.db.models`; the standard
- convention is to use ``from django.db import models`` and refer to fields as
- ``models.<Foo>Field``.
-
-.. _common-model-field-options:
-
-Field options
-=============
-
-The following arguments are available to all field types. All are optional.
-
-``null``
---------
-
-.. attribute:: Field.null
-
-If ``True``, Django will store empty values as ``NULL`` in the database. Default
-is ``False``.
-
-Note that empty string values will always get stored as empty strings, not as
-``NULL``. Only use ``null=True`` for non-string fields such as integers,
-booleans and dates. For both types of fields, you will also need to set
-``blank=True`` if you wish to permit empty values in forms, as the
-:attr:`~Field.null` parameter only affects database storage (see
-:attr:`~Field.blank`).
-
-Avoid using :attr:`~Field.null` on string-based fields such as
-:class:`CharField` and :class:`TextField` unless you have an excellent reason.
-If a string-based field has ``null=True``, that means it has two possible values
-for "no data": ``NULL``, and the empty string. In most cases, it's redundant to
-have two possible values for "no data;" Django convention is to use the empty
-string, not ``NULL``.
-
-.. note::
-
- When using the Oracle database backend, the ``null=True`` option will be
- coerced for string-based fields that have the empty string as a possible
- value, and the value ``NULL`` will be stored to denote the empty string.
-
-``blank``
----------
-
-.. attribute:: Field.blank
-
-If ``True``, the field is allowed to be blank. Default is ``False``.
-
-Note that this is different than :attr:`~Field.null`. :attr:`~Field.null` is
-purely database-related, whereas :attr:`~Field.blank` is validation-related. If
-a field has ``blank=True``, validation on Django's admin site will allow entry
-of an empty value. If a field has ``blank=False``, the field will be required.
-
-.. _field-choices:
-
-``choices``
------------
-
-.. attribute:: Field.choices
-
-An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this
-field.
-
-If this is given, Django's admin will use a select box instead of the standard
-text field and will limit choices to the choices given.
-
-A choices list looks like this::
-
- YEAR_IN_SCHOOL_CHOICES = (
- ('FR', 'Freshman'),
- ('SO', 'Sophomore'),
- ('JR', 'Junior'),
- ('SR', 'Senior'),
- ('GR', 'Graduate'),
- )
-
-The first element in each tuple is the actual value to be stored. The second
-element is the human-readable name for the option.
-
-The choices list can be defined either as part of your model class::
-
- class Foo(models.Model):
- GENDER_CHOICES = (
- ('M', 'Male'),
- ('F', 'Female'),
- )
- gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
-
-or outside your model class altogether::
-
- GENDER_CHOICES = (
- ('M', 'Male'),
- ('F', 'Female'),
- )
- class Foo(models.Model):
- gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
-
-You can also collect your available choices into named groups that can
-be used for organizational purposes::
-
- MEDIA_CHOICES = (
- ('Audio', (
- ('vinyl', 'Vinyl'),
- ('cd', 'CD'),
- )
- ),
- ('Video', (
- ('vhs', 'VHS Tape'),
- ('dvd', 'DVD'),
- )
- ),
- ('unknown', 'Unknown'),
- )
-
-The first element in each tuple is the name to apply to the group. The
-second element is an iterable of 2-tuples, with each 2-tuple containing
-a value and a human-readable name for an option. Grouped options may be
-combined with ungrouped options within a single list (such as the
-`unknown` option in this example).
-
-For each model field that has :attr:`~Field.choices` set, Django will add a
-method to retrieve the human-readable name for the field's current value. See
-:meth:`~django.db.models.Model.get_FOO_display` in the database API
-documentation.
-
-Finally, note that choices can be any iterable object -- not necessarily a list
-or tuple. This lets you construct choices dynamically. But if you find yourself
-hacking :attr:`~Field.choices` to be dynamic, you're probably better off using a
-proper database table with a :class:`ForeignKey`. :attr:`~Field.choices` is
-meant for static data that doesn't change much, if ever.
-
-``db_column``
--------------
-
-.. attribute:: Field.db_column
-
-The name of the database column to use for this field. If this isn't given,
-Django will use the field's name.
-
-If your database column name is an SQL reserved word, or contains
-characters that aren't allowed in Python variable names -- notably, the
-hyphen -- that's OK. Django quotes column and table names behind the
-scenes.
-
-``db_index``
-------------
-
-.. attribute:: Field.db_index
-
-If ``True``, djadmin:`django-admin.py sqlindexes <sqlindexes>` will output a
-``CREATE INDEX`` statement for this field.
-
-``db_tablespace``
------------------
-
-.. attribute:: Field.db_tablespace
-
-.. versionadded:: 1.0
-
-The name of the database tablespace to use for this field's index, if this field
-is indexed. The default is the project's :setting:`DEFAULT_INDEX_TABLESPACE`
-setting, if set, or the :attr:`~Field.db_tablespace` of the model, if any. If
-the backend doesn't support tablespaces, this option is ignored.
-
-``default``
------------
-
-.. attribute:: Field.default
-
-The default value for the field. This can be a value or a callable object. If
-callable it will be called every time a new object is created.
-
-``editable``
-------------
-
-.. attribute:: Field.editable
-
-If ``False``, the field will not be editable in the admin or via forms
-automatically generated from the model class. Default is ``True``.
-
-``error_messages``
-------------------
-
-.. versionadded:: 1.2
-
-.. attribute:: Field.error_messages
-
-The ``error_messages`` argument lets you override the default messages that the
-field will raise. Pass in a dictionary with keys matching the error messages you
-want to override.
-
-``help_text``
--------------
-
-.. attribute:: Field.help_text
-
-Extra "help" text to be displayed under the field on the object's admin form.
-It's useful for documentation even if your object doesn't have an admin form.
-
-Note that this value is *not* HTML-escaped when it's displayed in the admin
-interface. This lets you include HTML in :attr:`~Field.help_text` if you so
-desire. For example::
-
- help_text="Please use the following format: <em>YYYY-MM-DD</em>."
-
-Alternatively you can use plain text and
-``django.utils.html.escape()`` to escape any HTML special characters.
-
-``primary_key``
----------------
-
-.. attribute:: Field.primary_key
-
-If ``True``, this field is the primary key for the model.
-
-If you don't specify ``primary_key=True`` for any fields in your model, Django
-will automatically add an :class:`IntegerField` to hold the primary key, so you
-don't need to set ``primary_key=True`` on any of your fields unless you want to
-override the default primary-key behavior. For more, see
-:ref:`automatic-primary-key-fields`.
-
-``primary_key=True`` implies :attr:`null=False <Field.null>` and :attr:`unique=True <Field.unique>`.
-Only one primary key is allowed on an object.
-
-``unique``
-----------
-
-.. attribute:: Field.unique
-
-If ``True``, this field must be unique throughout the table.
-
-This is enforced at the database level and at the Django admin-form level. If
-you try to save a model with a duplicate value in a :attr:`~Field.unique`
-field, a :exc:`django.db.IntegrityError` will be raised by the model's
-:meth:`~django.db.models.Model.save` method.
-
-This option is valid on all field types except :class:`ManyToManyField` and
-:class:`FileField`.
-
-``unique_for_date``
--------------------
-
-.. attribute:: Field.unique_for_date
-
-Set this to the name of a :class:`DateField` or :class:`DateTimeField` to
-require that this field be unique for the value of the date field.
-
-For example, if you have a field ``title`` that has
-``unique_for_date="pub_date"``, then Django wouldn't allow the entry of two
-records with the same ``title`` and ``pub_date``.
-
-This is enforced at the Django admin-form level but not at the database level.
-
-``unique_for_month``
---------------------
-
-.. attribute:: Field.unique_for_month
-
-Like :attr:`~Field.unique_for_date`, but requires the field to be unique with
-respect to the month.
-
-``unique_for_year``
--------------------
-
-.. attribute:: Field.unique_for_year
-
-Like :attr:`~Field.unique_for_date` and :attr:`~Field.unique_for_month`.
-
-``verbose_name``
--------------------
-
-.. attribute:: Field.verbose_name
-
-A human-readable name for the field. If the verbose name isn't given, Django
-will automatically create it using the field's attribute name, converting
-underscores to spaces. See :ref:`Verbose field names <verbose-field-names>`.
-
-``validators``
--------------------
-
-.. versionadded:: 1.2
-
-.. attribute:: Field.validators
-
-A list of validators to run for this field.See the :doc:`validators
-documentation </ref/validators>` for more information.
-
-.. _model-field-types:
-
-Field types
-===========
-
-.. currentmodule:: django.db.models
-
-``AutoField``
--------------
-
-.. class:: AutoField(**options)
-
-An :class:`IntegerField` that automatically increments
-according to available IDs. You usually won't need to use this directly; a
-primary key field will automatically be added to your model if you don't specify
-otherwise. See :ref:`automatic-primary-key-fields`.
-
-``BigIntegerField``
--------------------
-
-.. versionadded:: 1.2
-
-.. class:: BigIntegerField([**options])
-
-A 64 bit integer, much like an :class:`IntegerField` except that it is
-guaranteed to fit numbers from -9223372036854775808 to 9223372036854775807. The
-admin represents this as an ``<input type="text">`` (a single-line input).
-
-
-``BooleanField``
-----------------
-
-.. class:: BooleanField(**options)
-
-A true/false field.
-
-The admin represents this as a checkbox.
-
-.. versionchanged:: 1.2
-
- In previous versions of Django when running under MySQL ``BooleanFields``
- would return their data as ``ints``, instead of true ``bools``. See the
- release notes for a complete description of the change.
-
-``CharField``
--------------
-
-.. class:: CharField(max_length=None, [**options])
-
-A string field, for small- to large-sized strings.
-
-For large amounts of text, use :class:`~django.db.models.TextField`.
-
-The admin represents this as an ``<input type="text">`` (a single-line input).
-
-:class:`CharField` has one extra required argument:
-
-.. attribute:: CharField.max_length
-
- The maximum length (in characters) of the field. The max_length is enforced
- at the database level and in Django's validation.
-
-.. note::
-
- If you are writing an application that must be portable to multiple
- database backends, you should be aware that there are restrictions on
- ``max_length`` for some backends. Refer to the :doc:`database backend
- notes </ref/databases>` for details.
-
-.. admonition:: MySQL users
-
- If you are using this field with MySQLdb 1.2.2 and the ``utf8_bin``
- collation (which is *not* the default), there are some issues to be aware
- of. Refer to the :ref:`MySQL database notes <mysql-collation>` for
- details.
-
-
-``CommaSeparatedIntegerField``
-------------------------------
-
-.. class:: CommaSeparatedIntegerField(max_length=None, [**options])
-
-A field of integers separated by commas. As in :class:`CharField`, the
-:attr:`~CharField.max_length` argument is required and the note about database
-portability mentioned there should be heeded.
-
-``DateField``
--------------
-
-.. class:: DateField([auto_now=False, auto_now_add=False, **options])
-
-A date, represented in Python by a ``datetime.date`` instance. Has a few extra,
-optional arguments:
-
-.. attribute:: DateField.auto_now
-
- Automatically set the field to now every time the object is saved. Useful
- for "last-modified" timestamps. Note that the current date is *always*
- used; it's not just a default value that you can override.
-
-.. attribute:: DateField.auto_now_add
-
- Automatically set the field to now when the object is first created. Useful
- for creation of timestamps. Note that the current date is *always* used;
- it's not just a default value that you can override.
-
-The admin represents this as an ``<input type="text">`` with a JavaScript
-calendar, and a shortcut for "Today". The JavaScript calendar will always
-start the week on a Sunday.
-
-.. note::
- As currently implemented, setting ``auto_now`` or ``auto_add_now`` to
- ``True`` will cause the field to have ``editable=False`` and ``blank=True``
- set.
-
-``DateTimeField``
------------------
-
-.. class:: DateTimeField([auto_now=False, auto_now_add=False, **options])
-
-A date and time, represented in Python by a ``datetime.datetime`` instance.
-Takes the same extra arguments as :class:`DateField`.
-
-The admin represents this as two ``<input type="text">`` fields, with
-JavaScript shortcuts.
-
-``DecimalField``
-----------------
-
-.. versionadded:: 1.0
-
-.. class:: DecimalField(max_digits=None, decimal_places=None, [**options])
-
-A fixed-precision decimal number, represented in Python by a
-:class:`~decimal.Decimal` instance. Has two **required** arguments:
-
-.. attribute:: DecimalField.max_digits
-
- The maximum number of digits allowed in the number
-
-.. attribute:: DecimalField.decimal_places
-
- The number of decimal places to store with the number
-
-For example, to store numbers up to 999 with a resolution of 2 decimal places,
-you'd use::
-
- models.DecimalField(..., max_digits=5, decimal_places=2)
-
-And to store numbers up to approximately one billion with a resolution of 10
-decimal places::
-
- models.DecimalField(..., max_digits=19, decimal_places=10)
-
-The admin represents this as an ``<input type="text">`` (a single-line input).
-
-``EmailField``
---------------
-
-.. class:: EmailField([max_length=75, **options])
-
-A :class:`CharField` that checks that the value is a valid e-mail address.
-
-``FileField``
--------------
-
-.. class:: FileField(upload_to=None, [max_length=100, **options])
-
-A file-upload field.
-
-.. note::
- The ``primary_key`` and ``unique`` arguments are not supported, and will
- raise a ``TypeError`` if used.
-
-Has one **required** argument:
-
-.. attribute:: FileField.upload_to
-
- A local filesystem path that will be appended to your :setting:`MEDIA_ROOT`
- setting to determine the value of the :attr:`~django.core.files.File.url`
- attribute.
-
- This path may contain `strftime formatting`_, which will be replaced by the
- date/time of the file upload (so that uploaded files don't fill up the given
- directory).
-
- .. versionchanged:: 1.0
-
- This may also be a callable, such as a function, which will be called to
- obtain the upload path, including the filename. This callable must be able
- to accept two arguments, and return a Unix-style path (with forward slashes)
- to be passed along to the storage system. The two arguments that will be
- passed are:
-
- ====================== ===============================================
- Argument Description
- ====================== ===============================================
- ``instance`` An instance of the model where the
- ``FileField`` is defined. More specifically,
- this is the particular instance where the
- current file is being attached.
-
- In most cases, this object will not have been
- saved to the database yet, so if it uses the
- default ``AutoField``, *it might not yet have a
- value for its primary key field*.
-
- ``filename`` The filename that was originally given to the
- file. This may or may not be taken into account
- when determining the final destination path.
- ====================== ===============================================
-
-Also has one optional argument:
-
-.. attribute:: FileField.storage
-
- .. versionadded:: 1.0
-
- Optional. A storage object, which handles the storage and retrieval of your
- files. See :doc:`/topics/files` for details on how to provide this object.
-
-The admin represents this field as an ``<input type="file">`` (a file-upload
-widget).
-
-Using a :class:`FileField` or an :class:`ImageField` (see below) in a model
-takes a few steps:
-
- 1. In your settings file, you'll need to define :setting:`MEDIA_ROOT` as the
- full path to a directory where you'd like Django to store uploaded files.
- (For performance, these files are not stored in the database.) Define
- :setting:`MEDIA_URL` as the base public URL of that directory. Make sure
- that this directory is writable by the Web server's user account.
-
- 2. Add the :class:`FileField` or :class:`ImageField` to your model, making
- sure to define the :attr:`~FileField.upload_to` option to tell Django
- to which subdirectory of :setting:`MEDIA_ROOT` it should upload files.
-
- 3. All that will be stored in your database is a path to the file
- (relative to :setting:`MEDIA_ROOT`). You'll most likely want to use the
- convenience :attr:`~django.core.files.File.url` function provided by
- Django. For example, if your :class:`ImageField` is called ``mug_shot``,
- you can get the absolute path to your image in a template with
- ``{{ object.mug_shot.url }}``.
-
-For example, say your :setting:`MEDIA_ROOT` is set to ``'/home/media'``, and
-:attr:`~FileField.upload_to` is set to ``'photos/%Y/%m/%d'``. The ``'%Y/%m/%d'``
-part of :attr:`~FileField.upload_to` is `strftime formatting`_; ``'%Y'`` is the
-four-digit year, ``'%m'`` is the two-digit month and ``'%d'`` is the two-digit
-day. If you upload a file on Jan. 15, 2007, it will be saved in the directory
-``/home/media/photos/2007/01/15``.
-
-If you want to retrieve the upload file's on-disk filename, or a URL that refers
-to that file, or the file's size, you can use the
-:attr:`~django.core.files.File.name`, :attr:`~django.core.files.File.url`
-and :attr:`~django.core.files.File.size` attributes; see :doc:`/topics/files`.
-
-Note that whenever you deal with uploaded files, you should pay close attention
-to where you're uploading them and what type of files they are, to avoid
-security holes. *Validate all uploaded files* so that you're sure the files are
-what you think they are. For example, if you blindly let somebody upload files,
-without validation, to a directory that's within your Web server's document
-root, then somebody could upload a CGI or PHP script and execute that script by
-visiting its URL on your site. Don't allow that.
-
-.. versionadded:: 1.0
- The ``max_length`` argument was added in this version.
-
-By default, :class:`FileField` instances are
-created as ``varchar(100)`` columns in your database. As with other fields, you
-can change the maximum length using the :attr:`~CharField.max_length` argument.
-
-.. _`strftime formatting`: http://docs.python.org/library/time.html#time.strftime
-
-FileField and FieldFile
-~~~~~~~~~~~~~~~~~~~~~~~
-
-When you access a :class:`FileField` on a model, you are given an instance
-of :class:`FieldFile` as a proxy for accessing the underlying file. This
-class has several methods that can be used to interact with file data:
-
-.. method:: FieldFile.open(mode='rb')
-
-Behaves like the standard Python ``open()`` method and opens the file
-associated with this instance in the mode specified by ``mode``.
-
-.. method:: FieldFile.close()
-
-Behaves like the standard Python ``file.close()`` method and closes the file
-associated with this instance.
-
-.. method:: FieldFile.save(name, content, save=True)
-
-This method takes a filename and file contents and passes them to the storage
-class for the field, then associates the stored file with the model field.
-If you want to manually associate file data with :class:`FileField`
-instances on your model, the ``save()`` method is used to persist that file
-data.
-
-Takes two required arguments: ``name`` which is the name of the file, and
-``content`` which is a file-like object containing the file's contents. The
-optional ``save`` argument controls whether or not the instance is saved after
-the file has been altered. Defaults to ``True``.
-
-.. method:: FieldFile.delete(save=True)
-
-Deletes the file associated with this instance and clears all attributes on
-the field. Note: This method will close the file if it happens to be open when
-``delete()`` is called.
-
-The optional ``save`` argument controls whether or not the instance is saved
-after the file has been deleted. Defaults to ``True``.
-
-``FilePathField``
------------------
-
-.. class:: FilePathField(path=None, [match=None, recursive=False, max_length=100, **options])
-
-A :class:`CharField` whose choices are limited to the filenames in a certain
-directory on the filesystem. Has three special arguments, of which the first is
-**required**:
-
-.. attribute:: FilePathField.path
-
- Required. The absolute filesystem path to a directory from which this
- :class:`FilePathField` should get its choices. Example: ``"/home/images"``.
-
-.. attribute:: FilePathField.match
-
- Optional. A regular expression, as a string, that :class:`FilePathField`
- will use to filter filenames. Note that the regex will be applied to the
- base filename, not the full path. Example: ``"foo.*\.txt$"``, which will
- match a file called ``foo23.txt`` but not ``bar.txt`` or ``foo23.gif``.
-
-.. attribute:: FilePathField.recursive
-
- Optional. Either ``True`` or ``False``. Default is ``False``. Specifies
- whether all subdirectories of :attr:`~FilePathField.path` should be included
-
-Of course, these arguments can be used together.
-
-The one potential gotcha is that :attr:`~FilePathField.match` applies to the
-base filename, not the full path. So, this example::
-
- FilePathField(path="/home/images", match="foo.*", recursive=True)
-
-...will match ``/home/images/foo.gif`` but not ``/home/images/foo/bar.gif``
-because the :attr:`~FilePathField.match` applies to the base filename
-(``foo.gif`` and ``bar.gif``).
-
-.. versionadded:: 1.0
- The ``max_length`` argument was added in this version.
-
-By default, :class:`FilePathField` instances are
-created as ``varchar(100)`` columns in your database. As with other fields, you
-can change the maximum length using the :attr:`~CharField.max_length` argument.
-
-``FloatField``
---------------
-
-.. class:: FloatField([**options])
-
-.. versionchanged:: 1.0
-
-A floating-point number represented in Python by a ``float`` instance.
-
-The admin represents this as an ``<input type="text">`` (a single-line input).
-
-``ImageField``
---------------
-
-.. class:: ImageField(upload_to=None, [height_field=None, width_field=None, max_length=100, **options])
-
-Inherits all attributes and methods from :class:`FileField`, but also
-validates that the uploaded object is a valid image.
-
-In addition to the special attributes that are available for :class:`FileField`,
-an :class:`ImageField` also has :attr:`~django.core.files.File.height` and
-:attr:`~django.core.files.File.width` attributes.
-
-To facilitate querying on those attributes, :class:`ImageField` has two extra
-optional arguments:
-
-.. attribute:: ImageField.height_field
-
- Name of a model field which will be auto-populated with the height of the
- image each time the model instance is saved.
-
-.. attribute:: ImageField.width_field
-
- Name of a model field which will be auto-populated with the width of the
- image each time the model instance is saved.
-
-Requires the `Python Imaging Library`_.
-
-.. _Python Imaging Library: http://www.pythonware.com/products/pil/
-
-.. versionadded:: 1.0
- The ``max_length`` argument was added in this version.
-
-By default, :class:`ImageField` instances are created as ``varchar(100)``
-columns in your database. As with other fields, you can change the maximum
-length using the :attr:`~CharField.max_length` argument.
-
-``IntegerField``
-----------------
-
-.. class:: IntegerField([**options])
-
-An integer. The admin represents this as an ``<input type="text">`` (a
-single-line input).
-
-``IPAddressField``
-------------------
-
-.. class:: IPAddressField([**options])
-
-An IP address, in string format (e.g. "192.0.2.30"). The admin represents this
-as an ``<input type="text">`` (a single-line input).
-
-``NullBooleanField``
---------------------
-
-.. class:: NullBooleanField([**options])
-
-Like a :class:`BooleanField`, but allows ``NULL`` as one of the options. Use
-this instead of a :class:`BooleanField` with ``null=True``. The admin represents
-this as a ``<select>`` box with "Unknown", "Yes" and "No" choices.
-
-``PositiveIntegerField``
-------------------------
-
-.. class:: PositiveIntegerField([**options])
-
-Like an :class:`IntegerField`, but must be positive.
-
-``PositiveSmallIntegerField``
------------------------------
-
-.. class:: PositiveSmallIntegerField([**options])
-
-Like a :class:`PositiveIntegerField`, but only allows values under a certain
-(database-dependent) point.
-
-``SlugField``
--------------
-
-.. class:: SlugField([max_length=50, **options])
-
-:term:`Slug` is a newspaper term. A slug is a short label for something,
-containing only letters, numbers, underscores or hyphens. They're generally used
-in URLs.
-
-Like a CharField, you can specify :attr:`~CharField.max_length` (read the note
-about database portability and :attr:`~CharField.max_length` in that section,
-too). If :attr:`~CharField.max_length` is not specified, Django will use a
-default length of 50.
-
-Implies setting :attr:`Field.db_index` to ``True``.
-
-It is often useful to automatically prepopulate a SlugField based on the value
-of some other value. You can do this automatically in the admin using
-:attr:`~django.contrib.admin.ModelAdmin.prepopulated_fields`.
-
-``SmallIntegerField``
----------------------
-
-.. class:: SmallIntegerField([**options])
-
-Like an :class:`IntegerField`, but only allows values under a certain
-(database-dependent) point.
-
-``TextField``
--------------
-
-.. class:: TextField([**options])
-
-A large text field. The admin represents this as a ``<textarea>`` (a multi-line
-input).
-
-.. admonition:: MySQL users
-
- If you are using this field with MySQLdb 1.2.1p2 and the ``utf8_bin``
- collation (which is *not* the default), there are some issues to be aware
- of. Refer to the :ref:`MySQL database notes <mysql-collation>` for
- details.
-
-``TimeField``
--------------
-
-.. class:: TimeField([auto_now=False, auto_now_add=False, **options])
-
-A time, represented in Python by a ``datetime.time`` instance. Accepts the same
-auto-population options as :class:`DateField`.
-
-The admin represents this as an ``<input type="text">`` with some JavaScript
-shortcuts.
-
-``URLField``
-------------
-
-.. class:: URLField([verify_exists=True, max_length=200, **options])
-
-A :class:`CharField` for a URL. Has one extra optional argument:
-
-.. attribute:: URLField.verify_exists
-
- If ``True`` (the default), the URL given will be checked for existence
- (i.e., the URL actually loads and doesn't give a 404 response).
-
- Note that when you're using the single-threaded development server,
- validating a URL being served by the same server will hang. This should not
- be a problem for multithreaded servers.
-
-The admin represents this as an ``<input type="text">`` (a single-line input).
-
-Like all :class:`CharField` subclasses, :class:`URLField` takes the optional
-:attr:`~CharField.max_length`argument. If you don't specify
-:attr:`~CharField.max_length`, a default of 200 is used.
-
-``XMLField``
-------------
-
-.. class:: XMLField(schema_path=None, [**options])
-
-A :class:`TextField` that checks that the value is valid XML that matches a
-given schema. Takes one required argument:
-
-.. attribute:: schema_path
-
- The filesystem path to a RelaxNG_ schema against which to validate the
- field.
-
-.. _RelaxNG: http://www.relaxng.org/
-
-Relationship fields
-===================
-
-.. module:: django.db.models.fields.related
- :synopsis: Related field types
-
-.. currentmodule:: django.db.models
-
-Django also defines a set of fields that represent relations.
-
-.. _ref-foreignkey:
-
-``ForeignKey``
---------------
-
-.. class:: ForeignKey(othermodel, [**options])
-
-A many-to-one relationship. Requires a positional argument: the class to which
-the model is related.
-
-.. _recursive-relationships:
-
-To create a recursive relationship -- an object that has a many-to-one
-relationship with itself -- use ``models.ForeignKey('self')``.
-
-.. _lazy-relationships:
-
-If you need to create a relationship on a model that has not yet been defined,
-you can use the name of the model, rather than the model object itself::
-
- class Car(models.Model):
- manufacturer = models.ForeignKey('Manufacturer')
- # ...
-
- class Manufacturer(models.Model):
- # ...
-
-.. versionadded:: 1.0
-
-To refer to models defined in another application, you can explicitly specify
-a model with the full application label. For example, if the ``Manufacturer``
-model above is defined in another application called ``production``, you'd
-need to use::
-
- class Car(models.Model):
- manufacturer = models.ForeignKey('production.Manufacturer')
-
-This sort of reference can be useful when resolving circular import
-dependencies between two applications.
-
-Database Representation
-~~~~~~~~~~~~~~~~~~~~~~~
-
-Behind the scenes, Django appends ``"_id"`` to the field name to create its
-database column name. In the above example, the database table for the ``Car``
-model will have a ``manufacturer_id`` column. (You can change this explicitly by
-specifying :attr:`~Field.db_column`) However, your code should never have to
-deal with the database column name, unless you write custom SQL. You'll always
-deal with the field names of your model object.
-
-.. _foreign-key-arguments:
-
-Arguments
-~~~~~~~~~
-
-:class:`ForeignKey` accepts an extra set of arguments -- all optional -- that
-define the details of how the relation works.
-
-.. attribute:: ForeignKey.limit_choices_to
-
- A dictionary of lookup arguments and values (see :doc:`/topics/db/queries`)
- that limit the available admin choices for this object. Use this with
- functions from the Python ``datetime`` module to limit choices of objects by
- date. For example::
-
- limit_choices_to = {'pub_date__lte': datetime.now}
-
- only allows the choice of related objects with a ``pub_date`` before the
- current date/time to be chosen.
-
- Instead of a dictionary this can also be a :class:`~django.db.models.Q`
- object for more :ref:`complex queries <complex-lookups-with-q>`. However,
- if ``limit_choices_to`` is a :class:`~django.db.models.Q` object then it
- will only have an effect on the choices available in the admin when the
- field is not listed in ``raw_id_fields`` in the ``ModelAdmin`` for the model.
-
-.. attribute:: ForeignKey.related_name
-
- The name to use for the relation from the related object back to this one.
- See the :ref:`related objects documentation <backwards-related-objects>` for
- a full explanation and example. Note that you must set this value
- when defining relations on :ref:`abstract models
- <abstract-base-classes>`; and when you do so
- :ref:`some special syntax <abstract-related-name>` is available.
-
- If you wish to suppress the provision of a backwards relation, you may
- simply provide a ``related_name`` which ends with a ``'+'`` character.
- For example::
-
- user = models.ForeignKey(User, related_name='+')
-
- will ensure that no backwards relation to this model is provided on the
- ``User`` model.
-
-.. attribute:: ForeignKey.to_field
-
- The field on the related object that the relation is to. By default, Django
- uses the primary key of the related object.
-
-.. _ref-manytomany:
-
-``ManyToManyField``
--------------------
-
-.. class:: ManyToManyField(othermodel, [**options])
-
-A many-to-many relationship. Requires a positional argument: the class to which
-the model is related. This works exactly the same as it does for
-:class:`ForeignKey`, including all the options regarding :ref:`recursive
-<recursive-relationships>` and :ref:`lazy <lazy-relationships>` relationships.
-
-Database Representation
-~~~~~~~~~~~~~~~~~~~~~~~
-
-Behind the scenes, Django creates an intermediary join table to
-represent the many-to-many relationship. By default, this table name
-is generated using the name of the many-to-many field and the model
-that contains it. Since some databases don't support table names above
-a certain length, these table names will be automatically truncated to
-64 characters and a uniqueness hash will be used. This means you might
-see table names like ``author_books_9cdf4``; this is perfectly normal.
-You can manually provide the name of the join table using the
-:attr:`~ManyToManyField.db_table` option.
-
-.. _manytomany-arguments:
-
-Arguments
-~~~~~~~~~
-
-:class:`ManyToManyField` accepts an extra set of arguments -- all optional --
-that control how the relationship functions.
-
-.. attribute:: ManyToManyField.related_name
-
- Same as :attr:`ForeignKey.related_name`.
-
-.. attribute:: ManyToManyField.limit_choices_to
-
- Same as :attr:`ForeignKey.limit_choices_to`.
-
- ``limit_choices_to`` has no effect when used on a ``ManyToManyField`` with a
- custom intermediate table specified using the
- :attr:`~ManyToManyField.through` parameter.
-
-.. attribute:: ManyToManyField.symmetrical
-
- Only used in the definition of ManyToManyFields on self. Consider the
- following model::
-
- class Person(models.Model):
- friends = models.ManyToManyField("self")
-
- When Django processes this model, it identifies that it has a
- :class:`ManyToManyField` on itself, and as a result, it doesn't add a
- ``person_set`` attribute to the ``Person`` class. Instead, the
- :class:`ManyToManyField` is assumed to be symmetrical -- that is, if I am
- your friend, then you are my friend.
-
- If you do not want symmetry in many-to-many relationships with ``self``, set
- :attr:`~ManyToManyField.symmetrical` to ``False``. This will force Django to
- add the descriptor for the reverse relationship, allowing
- :class:`ManyToManyField` relationships to be non-symmetrical.
-
-.. attribute:: ManyToManyField.through
-
- Django will automatically generate a table to manage many-to-many
- relationships. However, if you want to manually specify the intermediary
- table, you can use the :attr:`~ManyToManyField.through` option to specify
- the Django model that represents the intermediate table that you want to
- use.
-
- The most common use for this option is when you want to associate
- :ref:`extra data with a many-to-many relationship
- <intermediary-manytomany>`.
-
-.. attribute:: ManyToManyField.db_table
-
- The name of the table to create for storing the many-to-many data. If this
- is not provided, Django will assume a default name based upon the names of
- the two tables being joined.
-
-.. _ref-onetoone:
-
-``OneToOneField``
------------------
-
-.. class:: OneToOneField(othermodel, [parent_link=False, **options])
-
-A one-to-one relationship. Conceptually, this is similar to a
-:class:`ForeignKey` with :attr:`unique=True <Field.unique>`, but the
-"reverse" side of the relation will directly return a single object.
-
-This is most useful as the primary key of a model which "extends"
-another model in some way; :ref:`multi-table-inheritance` is
-implemented by adding an implicit one-to-one relation from the child
-model to the parent model, for example.
-
-One positional argument is required: the class to which the model will be
-related. This works exactly the same as it does for :class:`ForeignKey`,
-including all the options regarding :ref:`recursive <recursive-relationships>`
-and :ref:`lazy <lazy-relationships>` relationships.
-
-.. _onetoone-arguments:
-
-Additionally, ``OneToOneField`` accepts all of the extra arguments
-accepted by :class:`ForeignKey`, plus one extra argument:
-
-.. attribute:: OneToOneField.parent_link
-
- When ``True`` and used in a model which inherits from another
- (concrete) model, indicates that this field should be used as the
- link back to the parent class, rather than the extra
- ``OneToOneField`` which would normally be implicitly created by
- subclassing.
diff --git a/parts/django/docs/ref/models/index.txt b/parts/django/docs/ref/models/index.txt
deleted file mode 100644
index b5896c3..0000000
--- a/parts/django/docs/ref/models/index.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-======
-Models
-======
-
-Model API reference. For introductory material, see :doc:`/topics/db/models`.
-
-.. toctree::
- :maxdepth: 1
-
- fields
- relations
- options
- instances
- querysets
diff --git a/parts/django/docs/ref/models/instances.txt b/parts/django/docs/ref/models/instances.txt
deleted file mode 100644
index 1730ec6..0000000
--- a/parts/django/docs/ref/models/instances.txt
+++ /dev/null
@@ -1,570 +0,0 @@
-========================
-Model instance reference
-========================
-
-.. currentmodule:: django.db.models
-
-This document describes the details of the ``Model`` API. It builds on the
-material presented in the :doc:`model </topics/db/models>` and :doc:`database
-query </topics/db/queries>` guides, so you'll probably want to read and
-understand those documents before reading this one.
-
-Throughout this reference we'll use the :ref:`example Weblog models
-<queryset-model-example>` presented in the :doc:`database query guide
-</topics/db/queries>`.
-
-Creating objects
-================
-
-To create a new instance of a model, just instantiate it like any other Python
-class:
-
-.. class:: Model(**kwargs)
-
-The keyword arguments are simply the names of the fields you've defined on your
-model. Note that instantiating a model in no way touches your database; for
-that, you need to ``save()``.
-
-.. _validating-objects:
-
-Validating objects
-==================
-
-.. versionadded:: 1.2
-
-There are three steps involved in validating a model:
-
- 1. Validate the model fields
- 2. Validate the model as a whole
- 3. Validate the field uniqueness
-
-All three steps are performed when you call by a model's
-``full_clean()`` method.
-
-When you use a ``ModelForm``, the call to ``is_valid()`` will perform
-these validation steps for all the fields that are included on the
-form. (See the :doc:`ModelForm documentation
-</topics/forms/modelforms>` for more information.) You should only need
-to call a model's ``full_clean()`` method if you plan to handle
-validation errors yourself, or if you have excluded fields from the
-ModelForm that require validation.
-
-.. method:: Model.full_clean(exclude=None)
-
-This method calls ``Model.clean_fields()``, ``Model.clean()``, and
-``Model.validate_unique()``, in that order and raises a ``ValidationError``
-that has a ``message_dict`` attribute containing errors from all three stages.
-
-The optional ``exclude`` argument can be used to provide a list of field names
-that can be excluded from validation and cleaning. ``ModelForm`` uses this
-argument to exclude fields that aren't present on your form from being
-validated since any errors raised could not be corrected by the user.
-
-Note that ``full_clean()`` will *not* be called automatically when you
-call your model's ``save()`` method, nor as a result of ``ModelForm``
-validation. You'll need to call it manually when you want to run model
-validation outside of a ``ModelForm``.
-
-Example::
-
- try:
- article.full_clean()
- except ValidationError, e:
- # Do something based on the errors contained in e.message_dict.
- # Display them to a user, or handle them programatically.
-
-The first step ``full_clean()`` performs is to clean each individual field.
-
-.. method:: Model.clean_fields(exclude=None)
-
-This method will validate all fields on your model. The optional ``exclude``
-argument lets you provide a list of field names to exclude from validation. It
-will raise a ``ValidationError`` if any fields fail validation.
-
-The second step ``full_clean()`` performs is to call ``Model.clean()``.
-This method should be overridden to perform custom validation on your model.
-
-.. method:: Model.clean()
-
-This method should be used to provide custom model validation, and to modify
-attributes on your model if desired. For instance, you could use it to
-automatically provide a value for a field, or to do validation that requires
-access to more than a single field::
-
- def clean(self):
- from django.core.exceptions import ValidationError
- # Don't allow draft entries to have a pub_date.
- if self.status == 'draft' and self.pub_date is not None:
- raise ValidationError('Draft entries may not have a publication date.')
- # Set the pub_date for published items if it hasn't been set already.
- if self.status == 'published' and self.pub_date is None:
- self.pub_date = datetime.datetime.now()
-
-Any ``ValidationError`` raised by ``Model.clean()`` will be stored under a
-special key that is used for errors that are tied to the entire model instead
-of to a specific field. You can access these errors with ``NON_FIELD_ERRORS``::
-
-
- from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
- try:
- article.full_clean()
- except ValidationError, e:
- non_field_errors = e.message_dict[NON_FIELD_ERRORS]
-
-Finally, ``full_clean()`` will check any unique constraints on your model.
-
-.. method:: Model.validate_unique(exclude=None)
-
-This method is similar to ``clean_fields``, but validates all uniqueness
-constraints on your model instead of individual field values. The optional
-``exclude`` argument allows you to provide a list of field names to exclude
-from validation. It will raise a ``ValidationError`` if any fields fail
-validation.
-
-Note that if you provide an ``exclude`` argument to ``validate_unique``, any
-``unique_together`` constraint that contains one of the fields you provided
-will not be checked.
-
-
-Saving objects
-==============
-
-To save an object back to the database, call ``save()``:
-
-.. method:: Model.save([force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS])
-
-.. versionadded:: 1.0
- The ``force_insert`` and ``force_update`` arguments were added.
-
-.. versionadded:: 1.2
- The ``using`` argument was added.
-
-If you want customized saving behavior, you can override this
-``save()`` method. See :ref:`overriding-model-methods` for more
-details.
-
-The model save process also has some subtleties; see the sections
-below.
-
-Auto-incrementing primary keys
-------------------------------
-
-If a model has an ``AutoField`` -- an auto-incrementing primary key -- then
-that auto-incremented value will be calculated and saved as an attribute on
-your object the first time you call ``save()``::
-
- >>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
- >>> b2.id # Returns None, because b doesn't have an ID yet.
- >>> b2.save()
- >>> b2.id # Returns the ID of your new object.
-
-There's no way to tell what the value of an ID will be before you call
-``save()``, because that value is calculated by your database, not by Django.
-
-(For convenience, each model has an ``AutoField`` named ``id`` by default
-unless you explicitly specify ``primary_key=True`` on a field. See the
-documentation for ``AutoField`` for more details.
-
-The ``pk`` property
-~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. attribute:: Model.pk
-
-Regardless of whether you define a primary key field yourself, or let Django
-supply one for you, each model will have a property called ``pk``. It behaves
-like a normal attribute on the model, but is actually an alias for whichever
-attribute is the primary key field for the model. You can read and set this
-value, just as you would for any other attribute, and it will update the
-correct field in the model.
-
-Explicitly specifying auto-primary-key values
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If a model has an ``AutoField`` but you want to define a new object's ID
-explicitly when saving, just define it explicitly before saving, rather than
-relying on the auto-assignment of the ID::
-
- >>> b3 = Blog(id=3, name='Cheddar Talk', tagline='Thoughts on cheese.')
- >>> b3.id # Returns 3.
- >>> b3.save()
- >>> b3.id # Returns 3.
-
-If you assign auto-primary-key values manually, make sure not to use an
-already-existing primary-key value! If you create a new object with an explicit
-primary-key value that already exists in the database, Django will assume you're
-changing the existing record rather than creating a new one.
-
-Given the above ``'Cheddar Talk'`` blog example, this example would override the
-previous record in the database::
-
- b4 = Blog(id=3, name='Not Cheddar', tagline='Anything but cheese.')
- b4.save() # Overrides the previous blog with ID=3!
-
-See `How Django knows to UPDATE vs. INSERT`_, below, for the reason this
-happens.
-
-Explicitly specifying auto-primary-key values is mostly useful for bulk-saving
-objects, when you're confident you won't have primary-key collision.
-
-What happens when you save?
----------------------------
-
-When you save an object, Django performs the following steps:
-
- 1. **Emit a pre-save signal.** The :doc:`signal </ref/signals>`
- :attr:`django.db.models.signals.pre_save` is sent, allowing any
- functions listening for that signal to take some customized
- action.
-
- 2. **Pre-process the data.** Each field on the object is asked to
- perform any automated data modification that the field may need
- to perform.
-
- Most fields do *no* pre-processing -- the field data is kept as-is.
- Pre-processing is only used on fields that have special behavior.
- For example, if your model has a ``DateField`` with ``auto_now=True``,
- the pre-save phase will alter the data in the object to ensure that
- the date field contains the current date stamp. (Our documentation
- doesn't yet include a list of all the fields with this "special
- behavior.")
-
- 3. **Prepare the data for the database.** Each field is asked to provide
- its current value in a data type that can be written to the database.
-
- Most fields require *no* data preparation. Simple data types, such as
- integers and strings, are 'ready to write' as a Python object. However,
- more complex data types often require some modification.
-
- For example, ``DateFields`` use a Python ``datetime`` object to store
- data. Databases don't store ``datetime`` objects, so the field value
- must be converted into an ISO-compliant date string for insertion
- into the database.
-
- 4. **Insert the data into the database.** The pre-processed, prepared
- data is then composed into an SQL statement for insertion into the
- database.
-
- 5. **Emit a post-save signal.** The signal
- :attr:`django.db.models.signals.post_save` is sent, allowing
- any functions listening for that signal to take some customized
- action.
-
-How Django knows to UPDATE vs. INSERT
--------------------------------------
-
-You may have noticed Django database objects use the same ``save()`` method
-for creating and changing objects. Django abstracts the need to use ``INSERT``
-or ``UPDATE`` SQL statements. Specifically, when you call ``save()``, Django
-follows this algorithm:
-
- * If the object's primary key attribute is set to a value that evaluates to
- ``True`` (i.e., a value other than ``None`` or the empty string), Django
- executes a ``SELECT`` query to determine whether a record with the given
- primary key already exists.
- * If the record with the given primary key does already exist, Django
- executes an ``UPDATE`` query.
- * If the object's primary key attribute is *not* set, or if it's set but a
- record doesn't exist, Django executes an ``INSERT``.
-
-The one gotcha here is that you should be careful not to specify a primary-key
-value explicitly when saving new objects, if you cannot guarantee the
-primary-key value is unused. For more on this nuance, see `Explicitly specifying
-auto-primary-key values`_ above and `Forcing an INSERT or UPDATE`_ below.
-
-.. _ref-models-force-insert:
-
-Forcing an INSERT or UPDATE
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-In some rare circumstances, it's necessary to be able to force the ``save()``
-method to perform an SQL ``INSERT`` and not fall back to doing an ``UPDATE``.
-Or vice-versa: update, if possible, but not insert a new row. In these cases
-you can pass the ``force_insert=True`` or ``force_update=True`` parameters to
-the ``save()`` method. Passing both parameters is an error, since you cannot
-both insert *and* update at the same time.
-
-It should be very rare that you'll need to use these parameters. Django will
-almost always do the right thing and trying to override that will lead to
-errors that are difficult to track down. This feature is for advanced use
-only.
-
-Updating attributes based on existing fields
---------------------------------------------
-
-Sometimes you'll need to perform a simple arithmetic task on a field, such
-as incrementing or decrementing the current value. The obvious way to
-achieve this is to do something like::
-
- >>> product = Product.objects.get(name='Venezuelan Beaver Cheese')
- >>> product.number_sold += 1
- >>> product.save()
-
-If the old ``number_sold`` value retrieved from the database was 10, then
-the value of 11 will be written back to the database.
-
-This can be optimized slightly by expressing the update relative to the
-original field value, rather than as an explicit assignment of a new value.
-Django provides :ref:`F() expressions <query-expressions>` as a way of
-performing this kind of relative update. Using ``F()`` expressions, the
-previous example would be expressed as::
-
- >>> from django.db.models import F
- >>> product = Product.objects.get(name='Venezuelan Beaver Cheese')
- >>> product.number_sold = F('number_sold') + 1
- >>> product.save()
-
-This approach doesn't use the initial value from the database. Instead, it
-makes the database do the update based on whatever value is current at the
-time that the save() is executed.
-
-Once the object has been saved, you must reload the object in order to access
-the actual value that was applied to the updated field::
-
- >>> product = Products.objects.get(pk=product.pk)
- >>> print product.number_sold
- 42
-
-For more details, see the documentation on :ref:`F() expressions
-<query-expressions>` and their :ref:`use in update queries
-<topics-db-queries-update>`.
-
-Deleting objects
-================
-
-.. method:: Model.delete([using=DEFAULT_DB_ALIAS])
-
-.. versionadded:: 1.2
- The ``using`` argument was added.
-
-Issues a SQL ``DELETE`` for the object. This only deletes the object
-in the database; the Python instance will still be around, and will
-still have data in its fields.
-
-For more details, including how to delete objects in bulk, see
-:ref:`topics-db-queries-delete`.
-
-If you want customized deletion behavior, you can override this
-``delete()`` method. See :ref:`overriding-model-methods` for more
-details.
-
-.. _model-instance-methods:
-
-Other model instance methods
-============================
-
-A few object methods have special purposes.
-
-``__str__``
------------
-
-.. method:: Model.__str__()
-
-``__str__()`` is a Python "magic method" that defines what should be returned
-if you call ``str()`` on the object. Django uses ``str(obj)`` (or the related
-function, ``unicode(obj)`` -- see below) in a number of places, most notably
-as the value displayed to render an object in the Django admin site and as the
-value inserted into a template when it displays an object. Thus, you should
-always return a nice, human-readable string for the object's ``__str__``.
-Although this isn't required, it's strongly encouraged (see the description of
-``__unicode__``, below, before putting ``__str__`` methods everywhere).
-
-For example::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
-
- def __str__(self):
- # Note use of django.utils.encoding.smart_str() here because
- # first_name and last_name will be unicode strings.
- return smart_str('%s %s' % (self.first_name, self.last_name))
-
-``__unicode__``
----------------
-
-.. method:: Model.__unicode__()
-
-The ``__unicode__()`` method is called whenever you call ``unicode()`` on an
-object. Since Django's database backends will return Unicode strings in your
-model's attributes, you would normally want to write a ``__unicode__()``
-method for your model. The example in the previous section could be written
-more simply as::
-
- class Person(models.Model):
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return u'%s %s' % (self.first_name, self.last_name)
-
-If you define a ``__unicode__()`` method on your model and not a ``__str__()``
-method, Django will automatically provide you with a ``__str__()`` that calls
-``__unicode__()`` and then converts the result correctly to a UTF-8 encoded
-string object. This is recommended development practice: define only
-``__unicode__()`` and let Django take care of the conversion to string objects
-when required.
-
-``get_absolute_url``
---------------------
-
-.. method:: Model.get_absolute_url()
-
-Define a ``get_absolute_url()`` method to tell Django how to calculate the
-URL for an object. For example::
-
- def get_absolute_url(self):
- return "/people/%i/" % self.id
-
-Django uses this in its admin interface. If an object defines
-``get_absolute_url()``, the object-editing page will have a "View on site"
-link that will jump you directly to the object's public view, according to
-``get_absolute_url()``.
-
-Also, a couple of other bits of Django, such as the :doc:`syndication feed
-framework </ref/contrib/syndication>`, use ``get_absolute_url()`` as a
-convenience to reward people who've defined the method.
-
-It's good practice to use ``get_absolute_url()`` in templates, instead of
-hard-coding your objects' URLs. For example, this template code is bad::
-
- <a href="/people/{{ object.id }}/">{{ object.name }}</a>
-
-But this template code is good::
-
- <a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
-
-.. note::
- The string you return from ``get_absolute_url()`` must contain only ASCII
- characters (required by the URI spec, `RFC 2396`_) that have been
- URL-encoded, if necessary. Code and templates using ``get_absolute_url()``
- should be able to use the result directly without needing to do any
- further processing. You may wish to use the
- ``django.utils.encoding.iri_to_uri()`` function to help with this if you
- are using unicode strings a lot.
-
-.. _RFC 2396: http://www.ietf.org/rfc/rfc2396.txt
-
-The ``permalink`` decorator
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The problem with the way we wrote ``get_absolute_url()`` above is that it
-slightly violates the DRY principle: the URL for this object is defined both
-in the URLconf file and in the model.
-
-You can further decouple your models from the URLconf using the ``permalink``
-decorator:
-
-.. function:: permalink()
-
-This decorator is passed the view function, a list of positional parameters and
-(optionally) a dictionary of named parameters. Django then works out the correct
-full URL path using the URLconf, substituting the parameters you have given into
-the URL. For example, if your URLconf contained a line such as::
-
- (r'^people/(\d+)/$', 'people.views.details'),
-
-...your model could have a ``get_absolute_url`` method that looked like this::
-
- from django.db import models
-
- @models.permalink
- def get_absolute_url(self):
- return ('people.views.details', [str(self.id)])
-
-Similarly, if you had a URLconf entry that looked like::
-
- (r'/archive/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$', archive_view)
-
-...you could reference this using ``permalink()`` as follows::
-
- @models.permalink
- def get_absolute_url(self):
- return ('archive_view', (), {
- 'year': self.created.year,
- 'month': self.created.month,
- 'day': self.created.day})
-
-Notice that we specify an empty sequence for the second parameter in this case,
-because we only want to pass keyword parameters, not positional ones.
-
-In this way, you're tying the model's absolute path to the view that is used
-to display it, without repeating the URL information anywhere. You can still
-use the ``get_absolute_url`` method in templates, as before.
-
-In some cases, such as the use of generic views or the re-use of
-custom views for multiple models, specifying the view function may
-confuse the reverse URL matcher (because multiple patterns point to
-the same view).
-
-For that problem, Django has **named URL patterns**. Using a named
-URL pattern, it's possible to give a name to a pattern, and then
-reference the name rather than the view function. A named URL
-pattern is defined by replacing the pattern tuple by a call to
-the ``url`` function)::
-
- from django.conf.urls.defaults import *
-
- url(r'^people/(\d+)/$',
- 'django.views.generic.list_detail.object_detail',
- name='people_view'),
-
-...and then using that name to perform the reverse URL resolution instead
-of the view name::
-
- from django.db import models
-
- @models.permalink
- def get_absolute_url(self):
- return ('people_view', [str(self.id)])
-
-More details on named URL patterns are in the :doc:`URL dispatch documentation
-</topics/http/urls>`.
-
-Extra instance methods
-======================
-
-In addition to ``save()``, ``delete()``, a model object might get any or all
-of the following methods:
-
-.. method:: Model.get_FOO_display()
-
-For every field that has ``choices`` set, the object will have a
-``get_FOO_display()`` method, where ``FOO`` is the name of the field. This
-method returns the "human-readable" value of the field. For example, in the
-following model::
-
- GENDER_CHOICES = (
- ('M', 'Male'),
- ('F', 'Female'),
- )
- class Person(models.Model):
- name = models.CharField(max_length=20)
- gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
-
-...each ``Person`` instance will have a ``get_gender_display()`` method. Example::
-
- >>> p = Person(name='John', gender='M')
- >>> p.save()
- >>> p.gender
- 'M'
- >>> p.get_gender_display()
- 'Male'
-
-.. method:: Model.get_next_by_FOO(\**kwargs)
-.. method:: Model.get_previous_by_FOO(\**kwargs)
-
-For every ``DateField`` and ``DateTimeField`` that does not have ``null=True``,
-the object will have ``get_next_by_FOO()`` and ``get_previous_by_FOO()``
-methods, where ``FOO`` is the name of the field. This returns the next and
-previous object with respect to the date field, raising the appropriate
-``DoesNotExist`` exception when appropriate.
-
-Both methods accept optional keyword arguments, which should be in the format
-described in :ref:`Field lookups <field-lookups>`.
-
-Note that in the case of identical date values, these methods will use the ID
-as a fallback check. This guarantees that no records are skipped or duplicated.
diff --git a/parts/django/docs/ref/models/options.txt b/parts/django/docs/ref/models/options.txt
deleted file mode 100644
index 1b04c46..0000000
--- a/parts/django/docs/ref/models/options.txt
+++ /dev/null
@@ -1,269 +0,0 @@
-======================
-Model ``Meta`` options
-======================
-
-This document explains all the possible :ref:`metadata options
-<meta-options>` that you can give your model in its internal ``class
-Meta``.
-
-Available ``Meta`` options
-==========================
-
-.. currentmodule:: django.db.models
-
-``abstract``
-------------
-
-.. attribute:: Options.abstract
-
-If ``True``, this model will be an :ref:`abstract base class <abstract-base-classes>`.
-
-``app_label``
--------------
-
-.. attribute:: Options.app_label
-
-If a model exists outside of the standard :file:`models.py` (for instance, if
-the app's models are in submodules of ``myapp.models``), the model must define
-which app it is part of::
-
- app_label = 'myapp'
-
-``db_table``
-------------
-
-.. attribute:: Options.db_table
-
-The name of the database table to use for the model::
-
- db_table = 'music_album'
-
-.. _table-names:
-
-Table names
-~~~~~~~~~~~
-
-To save you time, Django automatically derives the name of the database table
-from the name of your model class and the app that contains it. A model's
-database table name is constructed by joining the model's "app label" -- the
-name you used in ``manage.py startapp`` -- to the model's class name, with an
-underscore between them.
-
-For example, if you have an app ``bookstore`` (as created by
-``manage.py startapp bookstore``), a model defined as ``class Book`` will have
-a database table named ``bookstore_book``.
-
-To override the database table name, use the ``db_table`` parameter in
-``class Meta``.
-
-If your database table name is an SQL reserved word, or contains characters that
-aren't allowed in Python variable names -- notably, the hyphen -- that's OK.
-Django quotes column and table names behind the scenes.
-
-``db_tablespace``
------------------
-
-.. attribute:: Options.db_tablespace
-
-.. versionadded:: 1.0
-
-The name of the database tablespace to use for the model. If the backend doesn't
-support tablespaces, this option is ignored.
-
-``get_latest_by``
------------------
-
-.. attribute:: Options.get_latest_by
-
-The name of a :class:`DateField` or :class:`DateTimeField` in the model. This
-specifies the default field to use in your model :class:`Manager`'s
-:class:`~QuerySet.latest` method.
-
-Example::
-
- get_latest_by = "order_date"
-
-See the docs for :meth:`~django.db.models.QuerySet.latest` for more.
-
-``managed``
------------------------
-
-.. attribute:: Options.managed
-
-.. versionadded:: 1.1
-
-Defaults to ``True``, meaning Django will create the appropriate database
-tables in :djadmin:`syncdb` and remove them as part of a :djadmin:`reset`
-management command. That is, Django *manages* the database tables' lifecycles.
-
-If ``False``, no database table creation or deletion operations will be
-performed for this model. This is useful if the model represents an existing
-table or a database view that has been created by some other means. This is
-the *only* difference when ``managed`` is ``False``. All other aspects of
-model handling are exactly the same as normal. This includes
-
- 1. Adding an automatic primary key field to the model if you don't declare
- it. To avoid confusion for later code readers, it's recommended to
- specify all the columns from the database table you are modeling when
- using unmanaged models.
-
- 2. If a model with ``managed=False`` contains a
- :class:`~django.db.models.ManyToManyField` that points to another
- unmanaged model, then the intermediate table for the many-to-many join
- will also not be created. However, a the intermediary table between one
- managed and one unmanaged model *will* be created.
-
- If you need to change this default behavior, create the intermediary
- table as an explicit model (with ``managed`` set as needed) and use the
- :attr:`ManyToManyField.through` attribute to make the relation use your
- custom model.
-
-For tests involving models with ``managed=False``, it's up to you to ensure
-the correct tables are created as part of the test setup.
-
-If you're interested in changing the Python-level behavior of a model class,
-you *could* use ``managed=False`` and create a copy of an existing model.
-However, there's a better approach for that situation: :ref:`proxy-models`.
-
-``order_with_respect_to``
--------------------------
-
-.. attribute:: Options.order_with_respect_to
-
-Marks this object as "orderable" with respect to the given field. This is almost
-always used with related objects to allow them to be ordered with respect to a
-parent object. For example, if an ``Answer`` relates to a ``Question`` object,
-and a question has more than one answer, and the order of answers matters, you'd
-do this::
-
- class Answer(models.Model):
- question = models.ForeignKey(Question)
- # ...
-
- class Meta:
- order_with_respect_to = 'question'
-
-When ``order_with_respect_to`` is set, two additional methods are provided to
-retrieve and to set the order of the related objects: ``get_RELATED_order()``
-and ``set_RELATED_order()``, where ``RELATED`` is the lowercased model name. For
-example, assuming that a ``Question`` object has multiple related ``Answer``
-objects, the list returned contains the primary keys of the related ``Answer``
-objects::
-
- >>> question = Question.objects.get(id=1)
- >>> question.get_answer_order()
- [1, 2, 3]
-
-The order of a ``Question`` object's related ``Answer`` objects can be set by
-passing in a list of ``Answer`` primary keys::
-
- >>> question.set_answer_order([3, 1, 2])
-
-The related objects also get two methods, ``get_next_in_order()`` and
-``get_previous_in_order()``, which can be used to access those objects in their
-proper order. Assuming the ``Answer`` objects are ordered by ``id``::
-
- >>> answer = Answer.objects.get(id=2)
- >>> answer.get_next_in_order()
- <Answer: 3>
- >>> answer.get_previous_in_order()
- <Answer: 1>
-
-``ordering``
-------------
-
-.. attribute:: Options.ordering
-
-The default ordering for the object, for use when obtaining lists of objects::
-
- ordering = ['-order_date']
-
-This is a tuple or list of strings. Each string is a field name with an optional
-"-" prefix, which indicates descending order. Fields without a leading "-" will
-be ordered ascending. Use the string "?" to order randomly.
-
-.. note::
-
- Regardless of how many fields are in :attr:`~Options.ordering`, the admin
- site uses only the first field.
-
-For example, to order by a ``pub_date`` field ascending, use this::
-
- ordering = ['pub_date']
-
-To order by ``pub_date`` descending, use this::
-
- ordering = ['-pub_date']
-
-To order by ``pub_date`` descending, then by ``author`` ascending, use this::
-
- ordering = ['-pub_date', 'author']
-
-``permissions``
----------------
-
-.. attribute:: Options.permissions
-
-Extra permissions to enter into the permissions table when creating this object.
-Add, delete and change permissions are automatically created for each object
-that has ``admin`` set. This example specifies an extra permission,
-``can_deliver_pizzas``::
-
- permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)
-
-This is a list or tuple of 2-tuples in the format ``(permission_code,
-human_readable_permission_name)``.
-
-``proxy``
----------
-
-.. attribute:: Options.proxy
-
-.. versionadded:: 1.1
-
-If set to ``True``, a model which subclasses another model will be treated as
-a :ref:`proxy model <proxy-models>`.
-
-``unique_together``
--------------------
-
-.. attribute:: Options.unique_together
-
-Sets of field names that, taken together, must be unique::
-
- unique_together = (("driver", "restaurant"),)
-
-This is a list of lists of fields that must be unique when considered together.
-It's used in the Django admin and is enforced at the database level (i.e., the
-appropriate ``UNIQUE`` statements are included in the ``CREATE TABLE``
-statement).
-
-.. versionadded:: 1.0
-
-For convenience, unique_together can be a single list when dealing with a single
-set of fields::
-
- unique_together = ("driver", "restaurant")
-
-``verbose_name``
-----------------
-
-.. attribute:: Options.verbose_name
-
-A human-readable name for the object, singular::
-
- verbose_name = "pizza"
-
-If this isn't given, Django will use a munged version of the class name:
-``CamelCase`` becomes ``camel case``.
-
-``verbose_name_plural``
------------------------
-
-.. attribute:: Options.verbose_name_plural
-
-The plural name for the object::
-
- verbose_name_plural = "stories"
-
-If this isn't given, Django will use :attr:`~Options.verbose_name` + ``"s"``.
diff --git a/parts/django/docs/ref/models/querysets.txt b/parts/django/docs/ref/models/querysets.txt
deleted file mode 100644
index 9f0de1f..0000000
--- a/parts/django/docs/ref/models/querysets.txt
+++ /dev/null
@@ -1,1888 +0,0 @@
-======================
-QuerySet API reference
-======================
-
-.. currentmodule:: django.db.models.QuerySet
-
-This document describes the details of the ``QuerySet`` API. It builds on the
-material presented in the :doc:`model </topics/db/models>` and :doc:`database
-query </topics/db/queries>` guides, so you'll probably want to read and
-understand those documents before reading this one.
-
-Throughout this reference we'll use the :ref:`example Weblog models
-<queryset-model-example>` presented in the :doc:`database query guide
-</topics/db/queries>`.
-
-.. _when-querysets-are-evaluated:
-
-When QuerySets are evaluated
-============================
-
-Internally, a ``QuerySet`` can be constructed, filtered, sliced, and generally
-passed around without actually hitting the database. No database activity
-actually occurs until you do something to evaluate the queryset.
-
-You can evaluate a ``QuerySet`` in the following ways:
-
- * **Iteration.** A ``QuerySet`` is iterable, and it executes its database
- query the first time you iterate over it. For example, this will print
- the headline of all entries in the database::
-
- for e in Entry.objects.all():
- print e.headline
-
- * **Slicing.** As explained in :ref:`limiting-querysets`, a ``QuerySet`` can
- be sliced, using Python's array-slicing syntax. Usually slicing a
- ``QuerySet`` returns another (unevaluated) ``QuerySet``, but Django will
- execute the database query if you use the "step" parameter of slice
- syntax.
-
- * **Pickling/Caching.** See the following section for details of what
- is involved when `pickling QuerySets`_. The important thing for the
- purposes of this section is that the results are read from the database.
-
- * **repr().** A ``QuerySet`` is evaluated when you call ``repr()`` on it.
- This is for convenience in the Python interactive interpreter, so you can
- immediately see your results when using the API interactively.
-
- * **len().** A ``QuerySet`` is evaluated when you call ``len()`` on it.
- This, as you might expect, returns the length of the result list.
-
- Note: *Don't* use ``len()`` on ``QuerySet``\s if all you want to do is
- determine the number of records in the set. It's much more efficient to
- handle a count at the database level, using SQL's ``SELECT COUNT(*)``,
- and Django provides a ``count()`` method for precisely this reason. See
- ``count()`` below.
-
- * **list().** Force evaluation of a ``QuerySet`` by calling ``list()`` on
- it. For example::
-
- entry_list = list(Entry.objects.all())
-
- Be warned, though, that this could have a large memory overhead, because
- Django will load each element of the list into memory. In contrast,
- iterating over a ``QuerySet`` will take advantage of your database to
- load data and instantiate objects only as you need them.
-
- * **bool().** Testing a ``QuerySet`` in a boolean context, such as using
- ``bool()``, ``or``, ``and`` or an ``if`` statement, will cause the query
- to be executed. If there is at least one result, the ``QuerySet`` is
- ``True``, otherwise ``False``. For example::
-
- if Entry.objects.filter(headline="Test"):
- print "There is at least one Entry with the headline Test"
-
- Note: *Don't* use this if all you want to do is determine if at least one
- result exists, and don't need the actual objects. It's more efficient to
- use ``exists()`` (see below).
-
-.. _pickling QuerySets:
-
-Pickling QuerySets
-------------------
-
-If you pickle_ a ``QuerySet``, this will force all the results to be loaded
-into memory prior to pickling. Pickling is usually used as a precursor to
-caching and when the cached queryset is reloaded, you want the results to
-already be present and ready for use (reading from the database can take some
-time, defeating the purpose of caching). This means that when you unpickle a
-``QuerySet``, it contains the results at the moment it was pickled, rather
-than the results that are currently in the database.
-
-If you only want to pickle the necessary information to recreate the
-``QuerySet`` from the database at a later time, pickle the ``query`` attribute
-of the ``QuerySet``. You can then recreate the original ``QuerySet`` (without
-any results loaded) using some code like this::
-
- >>> import pickle
- >>> query = pickle.loads(s) # Assuming 's' is the pickled string.
- >>> qs = MyModel.objects.all()
- >>> qs.query = query # Restore the original 'query'.
-
-The ``query`` attribute is an opaque object. It represents the internals of
-the query construction and is not part of the public API. However, it is safe
-(and fully supported) to pickle and unpickle the attribute's contents as
-described here.
-
-.. admonition:: You can't share pickles between versions
-
- Pickles of QuerySets are only valid for the version of Django that
- was used to generate them. If you generate a pickle using Django
- version N, there is no guarantee that pickle will be readable with
- Django version N+1. Pickles should not be used as part of a long-term
- archival strategy.
-
-.. _pickle: http://docs.python.org/library/pickle.html
-
-.. _queryset-api:
-
-QuerySet API
-============
-
-Though you usually won't create one manually -- you'll go through a
-:class:`Manager` -- here's the formal declaration of a ``QuerySet``:
-
-.. class:: QuerySet([model=None])
-
-Usually when you'll interact with a ``QuerySet`` you'll use it by :ref:`chaining
-filters <chaining-filters>`. To make this work, most ``QuerySet`` methods return new querysets.
-
-Methods that return new QuerySets
----------------------------------
-
-Django provides a range of ``QuerySet`` refinement methods that modify either
-the types of results returned by the ``QuerySet`` or the way its SQL query is
-executed.
-
-filter
-~~~~~~
-
-.. method:: filter(**kwargs)
-
-Returns a new ``QuerySet`` containing objects that match the given lookup
-parameters.
-
-The lookup parameters (``**kwargs``) should be in the format described in
-`Field lookups`_ below. Multiple parameters are joined via ``AND`` in the
-underlying SQL statement.
-
-exclude
-~~~~~~~
-
-.. method:: exclude(**kwargs)
-
-Returns a new ``QuerySet`` containing objects that do *not* match the given
-lookup parameters.
-
-The lookup parameters (``**kwargs``) should be in the format described in
-`Field lookups`_ below. Multiple parameters are joined via ``AND`` in the
-underlying SQL statement, and the whole thing is enclosed in a ``NOT()``.
-
-This example excludes all entries whose ``pub_date`` is later than 2005-1-3
-AND whose ``headline`` is "Hello"::
-
- Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello')
-
-In SQL terms, that evaluates to::
-
- SELECT ...
- WHERE NOT (pub_date > '2005-1-3' AND headline = 'Hello')
-
-This example excludes all entries whose ``pub_date`` is later than 2005-1-3
-OR whose headline is "Hello"::
-
- Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3)).exclude(headline='Hello')
-
-In SQL terms, that evaluates to::
-
- SELECT ...
- WHERE NOT pub_date > '2005-1-3'
- AND NOT headline = 'Hello'
-
-Note the second example is more restrictive.
-
-annotate
-~~~~~~~~
-
-.. method:: annotate(*args, **kwargs)
-
-.. versionadded:: 1.1
-
-Annotates each object in the ``QuerySet`` with the provided list of
-aggregate values (averages, sums, etc) that have been computed over
-the objects that are related to the objects in the ``QuerySet``.
-Each argument to ``annotate()`` is an annotation that will be added
-to each object in the ``QuerySet`` that is returned.
-
-The aggregation functions that are provided by Django are described
-in `Aggregation Functions`_ below.
-
-Annotations specified using keyword arguments will use the keyword as
-the alias for the annotation. Anonymous arguments will have an alias
-generated for them based upon the name of the aggregate function and
-the model field that is being aggregated.
-
-For example, if you were manipulating a list of blogs, you may want
-to determine how many entries have been made in each blog::
-
- >>> q = Blog.objects.annotate(Count('entry'))
- # The name of the first blog
- >>> q[0].name
- 'Blogasaurus'
- # The number of entries on the first blog
- >>> q[0].entry__count
- 42
-
-The ``Blog`` model doesn't define an ``entry__count`` attribute by itself,
-but by using a keyword argument to specify the aggregate function, you can
-control the name of the annotation::
-
- >>> q = Blog.objects.annotate(number_of_entries=Count('entry'))
- # The number of entries on the first blog, using the name provided
- >>> q[0].number_of_entries
- 42
-
-For an in-depth discussion of aggregation, see :doc:`the topic guide on
-Aggregation </topics/db/aggregation>`.
-
-order_by
-~~~~~~~~
-
-.. method:: order_by(*fields)
-
-By default, results returned by a ``QuerySet`` are ordered by the ordering
-tuple given by the ``ordering`` option in the model's ``Meta``. You can
-override this on a per-``QuerySet`` basis by using the ``order_by`` method.
-
-Example::
-
- Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
-
-The result above will be ordered by ``pub_date`` descending, then by
-``headline`` ascending. The negative sign in front of ``"-pub_date"`` indicates
-*descending* order. Ascending order is implied. To order randomly, use ``"?"``,
-like so::
-
- Entry.objects.order_by('?')
-
-Note: ``order_by('?')`` queries may be expensive and slow, depending on the
-database backend you're using.
-
-To order by a field in a different model, use the same syntax as when you are
-querying across model relations. That is, the name of the field, followed by a
-double underscore (``__``), followed by the name of the field in the new model,
-and so on for as many models as you want to join. For example::
-
- Entry.objects.order_by('blog__name', 'headline')
-
-If you try to order by a field that is a relation to another model, Django will
-use the default ordering on the related model (or order by the related model's
-primary key if there is no ``Meta.ordering`` specified. For example::
-
- Entry.objects.order_by('blog')
-
-...is identical to::
-
- Entry.objects.order_by('blog__id')
-
-...since the ``Blog`` model has no default ordering specified.
-
-Be cautious when ordering by fields in related models if you are also using
-``distinct()``. See the note in :meth:`distinct` for an explanation of how
-related model ordering can change the expected results.
-
-It is permissible to specify a multi-valued field to order the results by (for
-example, a ``ManyToMany`` field). Normally this won't be a sensible thing to
-do and it's really an advanced usage feature. However, if you know that your
-queryset's filtering or available data implies that there will only be one
-ordering piece of data for each of the main items you are selecting, the
-ordering may well be exactly what you want to do. Use ordering on multi-valued
-fields with care and make sure the results are what you expect.
-
-.. versionadded:: 1.0
-
-The syntax for ordering across related models has changed. See the `Django 0.96
-documentation`_ for the old behaviour.
-
-.. _Django 0.96 documentation: http://www.djangoproject.com/documentation/0.96/model-api/#floatfield
-
-There's no way to specify whether ordering should be case sensitive. With
-respect to case-sensitivity, Django will order results however your database
-backend normally orders them.
-
-If you don't want any ordering to be applied to a query, not even the default
-ordering, call ``order_by()`` with no parameters.
-
-.. versionadded:: 1.1
-
-You can tell if a query is ordered or not by checking the
-:attr:`QuerySet.ordered` attribute, which will be ``True`` if the
-``QuerySet`` has been ordered in any way.
-
-reverse
-~~~~~~~
-
-.. method:: reverse()
-
-.. versionadded:: 1.0
-
-Use the ``reverse()`` method to reverse the order in which a queryset's
-elements are returned. Calling ``reverse()`` a second time restores the
-ordering back to the normal direction.
-
-To retrieve the ''last'' five items in a queryset, you could do this::
-
- my_queryset.reverse()[:5]
-
-Note that this is not quite the same as slicing from the end of a sequence in
-Python. The above example will return the last item first, then the
-penultimate item and so on. If we had a Python sequence and looked at
-``seq[-5:]``, we would see the fifth-last item first. Django doesn't support
-that mode of access (slicing from the end), because it's not possible to do it
-efficiently in SQL.
-
-Also, note that ``reverse()`` should generally only be called on a
-``QuerySet`` which has a defined ordering (e.g., when querying against
-a model which defines a default ordering, or when using
-``order_by()``). If no such ordering is defined for a given
-``QuerySet``, calling ``reverse()`` on it has no real effect (the
-ordering was undefined prior to calling ``reverse()``, and will remain
-undefined afterward).
-
-distinct
-~~~~~~~~
-
-.. method:: distinct()
-
-Returns a new ``QuerySet`` that uses ``SELECT DISTINCT`` in its SQL query. This
-eliminates duplicate rows from the query results.
-
-By default, a ``QuerySet`` will not eliminate duplicate rows. In practice, this
-is rarely a problem, because simple queries such as ``Blog.objects.all()``
-don't introduce the possibility of duplicate result rows. However, if your
-query spans multiple tables, it's possible to get duplicate results when a
-``QuerySet`` is evaluated. That's when you'd use ``distinct()``.
-
-.. note::
- Any fields used in an :meth:`order_by` call are included in the SQL
- ``SELECT`` columns. This can sometimes lead to unexpected results when
- used in conjunction with ``distinct()``. If you order by fields from a
- related model, those fields will be added to the selected columns and they
- may make otherwise duplicate rows appear to be distinct. Since the extra
- columns don't appear in the returned results (they are only there to
- support ordering), it sometimes looks like non-distinct results are being
- returned.
-
- Similarly, if you use a ``values()`` query to restrict the columns
- selected, the columns used in any ``order_by()`` (or default model
- ordering) will still be involved and may affect uniqueness of the results.
-
- The moral here is that if you are using ``distinct()`` be careful about
- ordering by related models. Similarly, when using ``distinct()`` and
- ``values()`` together, be careful when ordering by fields not in the
- ``values()`` call.
-
-values
-~~~~~~
-
-.. method:: values(*fields)
-
-Returns a ``ValuesQuerySet`` -- a ``QuerySet`` that returns dictionaries when
-used as an iterable, rather than model-instance objects.
-
-Each of those dictionaries represents an object, with the keys corresponding to
-the attribute names of model objects.
-
-This example compares the dictionaries of ``values()`` with the normal model
-objects::
-
- # This list contains a Blog object.
- >>> Blog.objects.filter(name__startswith='Beatles')
- [<Blog: Beatles Blog>]
-
- # This list contains a dictionary.
- >>> Blog.objects.filter(name__startswith='Beatles').values()
- [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
-
-``values()`` takes optional positional arguments, ``*fields``, which specify
-field names to which the ``SELECT`` should be limited. If you specify the
-fields, each dictionary will contain only the field keys/values for the fields
-you specify. If you don't specify the fields, each dictionary will contain a
-key and value for every field in the database table.
-
-Example::
-
- >>> Blog.objects.values()
- [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
- >>> Blog.objects.values('id', 'name')
- [{'id': 1, 'name': 'Beatles Blog'}]
-
-A couple of subtleties that are worth mentioning:
-
- * The ``values()`` method does not return anything for
- :class:`~django.db.models.ManyToManyField` attributes and will raise an
- error if you try to pass in this type of field to it.
- * If you have a field called ``foo`` that is a
- :class:`~django.db.models.ForeignKey`, the default ``values()`` call
- will return a dictionary key called ``foo_id``, since this is the name
- of the hidden model attribute that stores the actual value (the ``foo``
- attribute refers to the related model). When you are calling
- ``values()`` and passing in field names, you can pass in either ``foo``
- or ``foo_id`` and you will get back the same thing (the dictionary key
- will match the field name you passed in).
-
- For example::
-
- >>> Entry.objects.values()
- [{'blog_id': 1, 'headline': u'First Entry', ...}, ...]
-
- >>> Entry.objects.values('blog')
- [{'blog': 1}, ...]
-
- >>> Entry.objects.values('blog_id')
- [{'blog_id': 1}, ...]
-
- * When using ``values()`` together with ``distinct()``, be aware that
- ordering can affect the results. See the note in :meth:`distinct` for
- details.
-
- * If you use a ``values()`` clause after an ``extra()`` clause,
- any fields defined by a ``select`` argument in the ``extra()``
- must be explicitly included in the ``values()`` clause. However,
- if the ``extra()`` clause is used after the ``values()``, the
- fields added by the select will be included automatically.
-
-.. versionadded:: 1.0
-
-Previously, it was not possible to pass ``blog_id`` to ``values()`` in the above
-example, only ``blog``.
-
-A ``ValuesQuerySet`` is useful when you know you're only going to need values
-from a small number of the available fields and you won't need the
-functionality of a model instance object. It's more efficient to select only
-the fields you need to use.
-
-Finally, note a ``ValuesQuerySet`` is a subclass of ``QuerySet``, so it has all
-methods of ``QuerySet``. You can call ``filter()`` on it, or ``order_by()``, or
-whatever. Yes, that means these two calls are identical::
-
- Blog.objects.values().order_by('id')
- Blog.objects.order_by('id').values()
-
-The people who made Django prefer to put all the SQL-affecting methods first,
-followed (optionally) by any output-affecting methods (such as ``values()``),
-but it doesn't really matter. This is your chance to really flaunt your
-individualism.
-
-values_list
-~~~~~~~~~~~
-
-.. method:: values_list(*fields)
-
-.. versionadded:: 1.0
-
-This is similar to ``values()`` except that instead of returning dictionaries,
-it returns tuples when iterated over. Each tuple contains the value from the
-respective field passed into the ``values_list()`` call -- so the first item is
-the first field, etc. For example::
-
- >>> Entry.objects.values_list('id', 'headline')
- [(1, u'First entry'), ...]
-
-If you only pass in a single field, you can also pass in the ``flat``
-parameter. If ``True``, this will mean the returned results are single values,
-rather than one-tuples. An example should make the difference clearer::
-
- >>> Entry.objects.values_list('id').order_by('id')
- [(1,), (2,), (3,), ...]
-
- >>> Entry.objects.values_list('id', flat=True).order_by('id')
- [1, 2, 3, ...]
-
-It is an error to pass in ``flat`` when there is more than one field.
-
-If you don't pass any values to ``values_list()``, it will return all the
-fields in the model, in the order they were declared.
-
-dates
-~~~~~
-
-.. method:: dates(field, kind, order='ASC')
-
-Returns a ``DateQuerySet`` -- a ``QuerySet`` that evaluates to a list of
-``datetime.datetime`` objects representing all available dates of a particular
-kind within the contents of the ``QuerySet``.
-
-``field`` should be the name of a ``DateField`` or ``DateTimeField`` of your
-model.
-
-``kind`` should be either ``"year"``, ``"month"`` or ``"day"``. Each
-``datetime.datetime`` object in the result list is "truncated" to the given
-``type``.
-
- * ``"year"`` returns a list of all distinct year values for the field.
- * ``"month"`` returns a list of all distinct year/month values for the field.
- * ``"day"`` returns a list of all distinct year/month/day values for the field.
-
-``order``, which defaults to ``'ASC'``, should be either ``'ASC'`` or
-``'DESC'``. This specifies how to order the results.
-
-Examples::
-
- >>> Entry.objects.dates('pub_date', 'year')
- [datetime.datetime(2005, 1, 1)]
- >>> Entry.objects.dates('pub_date', 'month')
- [datetime.datetime(2005, 2, 1), datetime.datetime(2005, 3, 1)]
- >>> Entry.objects.dates('pub_date', 'day')
- [datetime.datetime(2005, 2, 20), datetime.datetime(2005, 3, 20)]
- >>> Entry.objects.dates('pub_date', 'day', order='DESC')
- [datetime.datetime(2005, 3, 20), datetime.datetime(2005, 2, 20)]
- >>> Entry.objects.filter(headline__contains='Lennon').dates('pub_date', 'day')
- [datetime.datetime(2005, 3, 20)]
-
-none
-~~~~
-
-.. method:: none()
-
-.. versionadded:: 1.0
-
-Returns an ``EmptyQuerySet`` -- a ``QuerySet`` that always evaluates to
-an empty list. This can be used in cases where you know that you should
-return an empty result set and your caller is expecting a ``QuerySet``
-object (instead of returning an empty list, for example.)
-
-Examples::
-
- >>> Entry.objects.none()
- []
-
-all
-~~~
-
-.. method:: all()
-
-.. versionadded:: 1.0
-
-Returns a *copy* of the current ``QuerySet`` (or ``QuerySet`` subclass you
-pass in). This can be useful in some situations where you might want to pass
-in either a model manager or a ``QuerySet`` and do further filtering on the
-result. You can safely call ``all()`` on either object and then you'll
-definitely have a ``QuerySet`` to work with.
-
-.. _select-related:
-
-select_related
-~~~~~~~~~~~~~~
-
-.. method:: select_related()
-
-Returns a ``QuerySet`` that will automatically "follow" foreign-key
-relationships, selecting that additional related-object data when it executes
-its query. This is a performance booster which results in (sometimes much)
-larger queries but means later use of foreign-key relationships won't require
-database queries.
-
-The following examples illustrate the difference between plain lookups and
-``select_related()`` lookups. Here's standard lookup::
-
- # Hits the database.
- e = Entry.objects.get(id=5)
-
- # Hits the database again to get the related Blog object.
- b = e.blog
-
-And here's ``select_related`` lookup::
-
- # Hits the database.
- e = Entry.objects.select_related().get(id=5)
-
- # Doesn't hit the database, because e.blog has been prepopulated
- # in the previous query.
- b = e.blog
-
-``select_related()`` follows foreign keys as far as possible. If you have the
-following models::
-
- class City(models.Model):
- # ...
-
- class Person(models.Model):
- # ...
- hometown = models.ForeignKey(City)
-
- class Book(models.Model):
- # ...
- author = models.ForeignKey(Person)
-
-...then a call to ``Book.objects.select_related().get(id=4)`` will cache the
-related ``Person`` *and* the related ``City``::
-
- b = Book.objects.select_related().get(id=4)
- p = b.author # Doesn't hit the database.
- c = p.hometown # Doesn't hit the database.
-
- b = Book.objects.get(id=4) # No select_related() in this example.
- p = b.author # Hits the database.
- c = p.hometown # Hits the database.
-
-Note that, by default, ``select_related()`` does not follow foreign keys that
-have ``null=True``.
-
-Usually, using ``select_related()`` can vastly improve performance because your
-app can avoid many database calls. However, in situations with deeply nested
-sets of relationships ``select_related()`` can sometimes end up following "too
-many" relations, and can generate queries so large that they end up being slow.
-
-In these situations, you can use the ``depth`` argument to ``select_related()``
-to control how many "levels" of relations ``select_related()`` will actually
-follow::
-
- b = Book.objects.select_related(depth=1).get(id=4)
- p = b.author # Doesn't hit the database.
- c = p.hometown # Requires a database call.
-
-Sometimes you only want to access specific models that are related to your root
-model, not all of the related models. In these cases, you can pass the related
-field names to ``select_related()`` and it will only follow those relations.
-You can even do this for models that are more than one relation away by
-separating the field names with double underscores, just as for filters. For
-example, if you have this model::
-
- class Room(models.Model):
- # ...
- building = models.ForeignKey(...)
-
- class Group(models.Model):
- # ...
- teacher = models.ForeignKey(...)
- room = models.ForeignKey(Room)
- subject = models.ForeignKey(...)
-
-...and you only needed to work with the ``room`` and ``subject`` attributes,
-you could write this::
-
- g = Group.objects.select_related('room', 'subject')
-
-This is also valid::
-
- g = Group.objects.select_related('room__building', 'subject')
-
-...and would also pull in the ``building`` relation.
-
-You can refer to any ``ForeignKey`` or ``OneToOneField`` relation in
-the list of fields passed to ``select_related``. Ths includes foreign
-keys that have ``null=True`` (unlike the default ``select_related()``
-call). It's an error to use both a list of fields and the ``depth``
-parameter in the same ``select_related()`` call, since they are
-conflicting options.
-
-.. versionadded:: 1.0
-
-Both the ``depth`` argument and the ability to specify field names in the call
-to ``select_related()`` are new in Django version 1.0.
-
-.. versionchanged:: 1.2
-
-You can also refer to the reverse direction of a ``OneToOneFields`` in
-the list of fields passed to ``select_related`` -- that is, you can traverse
-a ``OneToOneField`` back to the object on which the field is defined. Instead
-of specifying the field name, use the ``related_name`` for the field on the
-related object.
-
-``OneToOneFields`` will not be traversed in the reverse direction if you
-are performing a depth-based ``select_related``.
-
-extra
-~~~~~
-
-.. method:: extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None)
-
-Sometimes, the Django query syntax by itself can't easily express a complex
-``WHERE`` clause. For these edge cases, Django provides the ``extra()``
-``QuerySet`` modifier -- a hook for injecting specific clauses into the SQL
-generated by a ``QuerySet``.
-
-By definition, these extra lookups may not be portable to different database
-engines (because you're explicitly writing SQL code) and violate the DRY
-principle, so you should avoid them if possible.
-
-Specify one or more of ``params``, ``select``, ``where`` or ``tables``. None
-of the arguments is required, but you should use at least one of them.
-
- * ``select``
- The ``select`` argument lets you put extra fields in the ``SELECT`` clause.
- It should be a dictionary mapping attribute names to SQL clauses to use to
- calculate that attribute.
-
- Example::
-
- Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
-
- As a result, each ``Entry`` object will have an extra attribute,
- ``is_recent``, a boolean representing whether the entry's ``pub_date`` is
- greater than Jan. 1, 2006.
-
- Django inserts the given SQL snippet directly into the ``SELECT``
- statement, so the resulting SQL of the above example would be something
- like::
-
- SELECT blog_entry.*, (pub_date > '2006-01-01') AS is_recent
- FROM blog_entry;
-
-
- The next example is more advanced; it does a subquery to give each
- resulting ``Blog`` object an ``entry_count`` attribute, an integer count
- of associated ``Entry`` objects::
-
- Blog.objects.extra(
- select={
- 'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id'
- },
- )
-
- (In this particular case, we're exploiting the fact that the query will
- already contain the ``blog_blog`` table in its ``FROM`` clause.)
-
- The resulting SQL of the above example would be::
-
- SELECT blog_blog.*, (SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id) AS entry_count
- FROM blog_blog;
-
- Note that the parenthesis required by most database engines around
- subqueries are not required in Django's ``select`` clauses. Also note that
- some database backends, such as some MySQL versions, don't support
- subqueries.
-
- .. versionadded:: 1.0
-
- In some rare cases, you might wish to pass parameters to the SQL fragments
- in ``extra(select=...)``. For this purpose, use the ``select_params``
- parameter. Since ``select_params`` is a sequence and the ``select``
- attribute is a dictionary, some care is required so that the parameters
- are matched up correctly with the extra select pieces. In this situation,
- you should use a ``django.utils.datastructures.SortedDict`` for the
- ``select`` value, not just a normal Python dictionary.
-
- This will work, for example::
-
- Blog.objects.extra(
- select=SortedDict([('a', '%s'), ('b', '%s')]),
- select_params=('one', 'two'))
-
- The only thing to be careful about when using select parameters in
- ``extra()`` is to avoid using the substring ``"%%s"`` (that's *two*
- percent characters before the ``s``) in the select strings. Django's
- tracking of parameters looks for ``%s`` and an escaped ``%`` character
- like this isn't detected. That will lead to incorrect results.
-
- * ``where`` / ``tables``
- You can define explicit SQL ``WHERE`` clauses -- perhaps to perform
- non-explicit joins -- by using ``where``. You can manually add tables to
- the SQL ``FROM`` clause by using ``tables``.
-
- ``where`` and ``tables`` both take a list of strings. All ``where``
- parameters are "AND"ed to any other search criteria.
-
- Example::
-
- Entry.objects.extra(where=['id IN (3, 4, 5, 20)'])
-
- ...translates (roughly) into the following SQL::
-
- SELECT * FROM blog_entry WHERE id IN (3, 4, 5, 20);
-
- Be careful when using the ``tables`` parameter if you're specifying
- tables that are already used in the query. When you add extra tables
- via the ``tables`` parameter, Django assumes you want that table included
- an extra time, if it is already included. That creates a problem,
- since the table name will then be given an alias. If a table appears
- multiple times in an SQL statement, the second and subsequent occurrences
- must use aliases so the database can tell them apart. If you're
- referring to the extra table you added in the extra ``where`` parameter
- this is going to cause errors.
-
- Normally you'll only be adding extra tables that don't already appear in
- the query. However, if the case outlined above does occur, there are a few
- solutions. First, see if you can get by without including the extra table
- and use the one already in the query. If that isn't possible, put your
- ``extra()`` call at the front of the queryset construction so that your
- table is the first use of that table. Finally, if all else fails, look at
- the query produced and rewrite your ``where`` addition to use the alias
- given to your extra table. The alias will be the same each time you
- construct the queryset in the same way, so you can rely upon the alias
- name to not change.
-
- * ``order_by``
- If you need to order the resulting queryset using some of the new fields
- or tables you have included via ``extra()`` use the ``order_by`` parameter
- to ``extra()`` and pass in a sequence of strings. These strings should
- either be model fields (as in the normal ``order_by()`` method on
- querysets), of the form ``table_name.column_name`` or an alias for a column
- that you specified in the ``select`` parameter to ``extra()``.
-
- For example::
-
- q = Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
- q = q.extra(order_by = ['-is_recent'])
-
- This would sort all the items for which ``is_recent`` is true to the front
- of the result set (``True`` sorts before ``False`` in a descending
- ordering).
-
- This shows, by the way, that you can make multiple calls to
- ``extra()`` and it will behave as you expect (adding new constraints each
- time).
-
- * ``params``
- The ``where`` parameter described above may use standard Python database
- string placeholders -- ``'%s'`` to indicate parameters the database engine
- should automatically quote. The ``params`` argument is a list of any extra
- parameters to be substituted.
-
- Example::
-
- Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
-
- Always use ``params`` instead of embedding values directly into ``where``
- because ``params`` will ensure values are quoted correctly according to
- your particular backend. (For example, quotes will be escaped correctly.)
-
- Bad::
-
- Entry.objects.extra(where=["headline='Lennon'"])
-
- Good::
-
- Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
-
-defer
-~~~~~
-
-.. method:: defer(*fields)
-
-.. versionadded:: 1.1
-
-In some complex data-modeling situations, your models might contain a lot of
-fields, some of which could contain a lot of data (for example, text fields),
-or require expensive processing to convert them to Python objects. If you are
-using the results of a queryset in some situation where you know you don't
-need those particular fields, you can tell Django not to retrieve them from
-the database.
-
-This is done by passing the names of the fields to not load to ``defer()``::
-
- Entry.objects.defer("headline", "body")
-
-A queryset that has deferred fields will still return model instances. Each
-deferred field will be retrieved from the database if you access that field
-(one at a time, not all the deferred fields at once).
-
-You can make multiple calls to ``defer()``. Each call adds new fields to the
-deferred set::
-
- # Defers both the body and headline fields.
- Entry.objects.defer("body").filter(rating=5).defer("headline")
-
-The order in which fields are added to the deferred set does not matter.
-Calling ``defer()`` with a field name that has already been deferred is
-harmless (the field will still be deferred).
-
-You can defer loading of fields in related models (if the related models are
-loading via ``select_related()``) by using the standard double-underscore
-notation to separate related fields::
-
- Blog.objects.select_related().defer("entry__headline", "entry__body")
-
-If you want to clear the set of deferred fields, pass ``None`` as a parameter
-to ``defer()``::
-
- # Load all fields immediately.
- my_queryset.defer(None)
-
-Some fields in a model won't be deferred, even if you ask for them. You can
-never defer the loading of the primary key. If you are using
-``select_related()`` to retrieve other models at the same time you shouldn't
-defer the loading of the field that connects from the primary model to the
-related one (at the moment, that doesn't raise an error, but it will
-eventually).
-
-.. note::
-
- The ``defer()`` method (and its cousin, ``only()``, below) are only for
- advanced use-cases. They provide an optimization for when you have
- analyzed your queries closely and understand *exactly* what information
- you need and have measured that the difference between returning the
- fields you need and the full set of fields for the model will be
- significant. When you are initially developing your applications, don't
- bother using ``defer()``; leave it until your query construction has
- settled down and you understand where the hot-points are.
-
-only
-~~~~
-
-.. method:: only(*fields)
-
-.. versionadded:: 1.1
-
-The ``only()`` method is more or less the opposite of ``defer()``. You
-call it with the fields that should *not* be deferred when retrieving a model.
-If you have a model where almost all the fields need to be deferred, using
-``only()`` to specify the complementary set of fields could result in simpler
-code.
-
-If you have a model with fields ``name``, ``age`` and ``biography``, the
-following two querysets are the same, in terms of deferred fields::
-
- Person.objects.defer("age", "biography")
- Person.objects.only("name")
-
-Whenever you call ``only()`` it *replaces* the set of fields to load
-immediately. The method's name is mnemonic: **only** those fields are loaded
-immediately; the remainder are deferred. Thus, successive calls to ``only()``
-result in only the final fields being considered::
-
- # This will defer all fields except the headline.
- Entry.objects.only("body", "rating").only("headline")
-
-Since ``defer()`` acts incrementally (adding fields to the deferred list), you
-can combine calls to ``only()`` and ``defer()`` and things will behave
-logically::
-
- # Final result is that everything except "headline" is deferred.
- Entry.objects.only("headline", "body").defer("body")
-
- # Final result loads headline and body immediately (only() replaces any
- # existing set of fields).
- Entry.objects.defer("body").only("headline", "body")
-
-using
-~~~~~
-
-.. method:: using(alias)
-
-.. versionadded:: 1.2
-
-This method is for controlling which database the ``QuerySet`` will be
-evaluated against if you are using more than one database. The only argument
-this method takes is the alias of a database, as defined in
-:setting:`DATABASES`.
-
-For example::
-
- # queries the database with the 'default' alias.
- >>> Entry.objects.all()
-
- # queries the database with the 'backup' alias
- >>> Entry.objects.using('backup')
-
-
-Methods that do not return QuerySets
-------------------------------------
-
-The following ``QuerySet`` methods evaluate the ``QuerySet`` and return
-something *other than* a ``QuerySet``.
-
-These methods do not use a cache (see :ref:`caching-and-querysets`). Rather,
-they query the database each time they're called.
-
-get
-~~~
-
-.. method:: get(**kwargs)
-
-Returns the object matching the given lookup parameters, which should be in
-the format described in `Field lookups`_.
-
-``get()`` raises ``MultipleObjectsReturned`` if more than one object was
-found. The ``MultipleObjectsReturned`` exception is an attribute of the model
-class.
-
-``get()`` raises a ``DoesNotExist`` exception if an object wasn't found for
-the given parameters. This exception is also an attribute of the model class.
-Example::
-
- Entry.objects.get(id='foo') # raises Entry.DoesNotExist
-
-The ``DoesNotExist`` exception inherits from
-``django.core.exceptions.ObjectDoesNotExist``, so you can target multiple
-``DoesNotExist`` exceptions. Example::
-
- from django.core.exceptions import ObjectDoesNotExist
- try:
- e = Entry.objects.get(id=3)
- b = Blog.objects.get(id=1)
- except ObjectDoesNotExist:
- print "Either the entry or blog doesn't exist."
-
-create
-~~~~~~
-
-.. method:: create(**kwargs)
-
-A convenience method for creating an object and saving it all in one step. Thus::
-
- p = Person.objects.create(first_name="Bruce", last_name="Springsteen")
-
-and::
-
- p = Person(first_name="Bruce", last_name="Springsteen")
- p.save(force_insert=True)
-
-are equivalent.
-
-The :ref:`force_insert <ref-models-force-insert>` parameter is documented
-elsewhere, but all it means is that a new object will always be created.
-Normally you won't need to worry about this. However, if your model contains a
-manual primary key value that you set and if that value already exists in the
-database, a call to ``create()`` will fail with an :exc:`IntegrityError` since
-primary keys must be unique. So remember to be prepared to handle the exception
-if you are using manual primary keys.
-
-get_or_create
-~~~~~~~~~~~~~
-
-.. method:: get_or_create(**kwargs)
-
-A convenience method for looking up an object with the given kwargs, creating
-one if necessary.
-
-Returns a tuple of ``(object, created)``, where ``object`` is the retrieved or
-created object and ``created`` is a boolean specifying whether a new object was
-created.
-
-This is meant as a shortcut to boilerplatish code and is mostly useful for
-data-import scripts. For example::
-
- try:
- obj = Person.objects.get(first_name='John', last_name='Lennon')
- except Person.DoesNotExist:
- obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
- obj.save()
-
-This pattern gets quite unwieldy as the number of fields in a model goes up.
-The above example can be rewritten using ``get_or_create()`` like so::
-
- obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
- defaults={'birthday': date(1940, 10, 9)})
-
-Any keyword arguments passed to ``get_or_create()`` -- *except* an optional one
-called ``defaults`` -- will be used in a ``get()`` call. If an object is found,
-``get_or_create()`` returns a tuple of that object and ``False``. If an object
-is *not* found, ``get_or_create()`` will instantiate and save a new object,
-returning a tuple of the new object and ``True``. The new object will be
-created roughly according to this algorithm::
-
- defaults = kwargs.pop('defaults', {})
- params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
- params.update(defaults)
- obj = self.model(**params)
- obj.save()
-
-In English, that means start with any non-``'defaults'`` keyword argument that
-doesn't contain a double underscore (which would indicate a non-exact lookup).
-Then add the contents of ``defaults``, overriding any keys if necessary, and
-use the result as the keyword arguments to the model class. As hinted at
-above, this is a simplification of the algorithm that is used, but it contains
-all the pertinent details. The internal implementation has some more
-error-checking than this and handles some extra edge-conditions; if you're
-interested, read the code.
-
-If you have a field named ``defaults`` and want to use it as an exact lookup in
-``get_or_create()``, just use ``'defaults__exact'``, like so::
-
- Foo.objects.get_or_create(defaults__exact='bar', defaults={'defaults': 'baz'})
-
-
-The ``get_or_create()`` method has similar error behaviour to ``create()``
-when you are using manually specified primary keys. If an object needs to be
-created and the key already exists in the database, an ``IntegrityError`` will
-be raised.
-
-Finally, a word on using ``get_or_create()`` in Django views. As mentioned
-earlier, ``get_or_create()`` is mostly useful in scripts that need to parse
-data and create new records if existing ones aren't available. But if you need
-to use ``get_or_create()`` in a view, please make sure to use it only in
-``POST`` requests unless you have a good reason not to. ``GET`` requests
-shouldn't have any effect on data; use ``POST`` whenever a request to a page
-has a side effect on your data. For more, see `Safe methods`_ in the HTTP spec.
-
-.. _Safe methods: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
-
-count
-~~~~~
-
-.. method:: count()
-
-Returns an integer representing the number of objects in the database matching
-the ``QuerySet``. ``count()`` never raises exceptions.
-
-Example::
-
- # Returns the total number of entries in the database.
- Entry.objects.count()
-
- # Returns the number of entries whose headline contains 'Lennon'
- Entry.objects.filter(headline__contains='Lennon').count()
-
-``count()`` performs a ``SELECT COUNT(*)`` behind the scenes, so you should
-always use ``count()`` rather than loading all of the record into Python
-objects and calling ``len()`` on the result (unless you need to load the
-objects into memory anyway, in which case ``len()`` will be faster).
-
-Depending on which database you're using (e.g. PostgreSQL vs. MySQL),
-``count()`` may return a long integer instead of a normal Python integer. This
-is an underlying implementation quirk that shouldn't pose any real-world
-problems.
-
-in_bulk
-~~~~~~~
-
-.. method:: in_bulk(id_list)
-
-Takes a list of primary-key values and returns a dictionary mapping each
-primary-key value to an instance of the object with the given ID.
-
-Example::
-
- >>> Blog.objects.in_bulk([1])
- {1: <Blog: Beatles Blog>}
- >>> Blog.objects.in_bulk([1, 2])
- {1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>}
- >>> Blog.objects.in_bulk([])
- {}
-
-If you pass ``in_bulk()`` an empty list, you'll get an empty dictionary.
-
-iterator
-~~~~~~~~
-
-.. method:: iterator()
-
-Evaluates the ``QuerySet`` (by performing the query) and returns an
-`iterator`_ over the results. A ``QuerySet`` typically caches its
-results internally so that repeated evaluations do not result in
-additional queries; ``iterator()`` will instead read results directly,
-without doing any caching at the ``QuerySet`` level. For a
-``QuerySet`` which returns a large number of objects, this often
-results in better performance and a significant reduction in memory
-
-Note that using ``iterator()`` on a ``QuerySet`` which has already
-been evaluated will force it to evaluate again, repeating the query.
-
-.. _iterator: http://www.python.org/dev/peps/pep-0234/
-
-latest
-~~~~~~
-
-.. method:: latest(field_name=None)
-
-Returns the latest object in the table, by date, using the ``field_name``
-provided as the date field.
-
-This example returns the latest ``Entry`` in the table, according to the
-``pub_date`` field::
-
- Entry.objects.latest('pub_date')
-
-If your model's ``Meta`` specifies ``get_latest_by``, you can leave off the
-``field_name`` argument to ``latest()``. Django will use the field specified in
-``get_latest_by`` by default.
-
-Like ``get()``, ``latest()`` raises ``DoesNotExist`` if an object doesn't
-exist with the given parameters.
-
-Note ``latest()`` exists purely for convenience and readability.
-
-aggregate
-~~~~~~~~~
-
-.. method:: aggregate(*args, **kwargs)
-
-.. versionadded:: 1.1
-
-Returns a dictionary of aggregate values (averages, sums, etc) calculated
-over the ``QuerySet``. Each argument to ``aggregate()`` specifies
-a value that will be included in the dictionary that is returned.
-
-The aggregation functions that are provided by Django are described
-in `Aggregation Functions`_ below.
-
-Aggregates specified using keyword arguments will use the keyword as
-the name for the annotation. Anonymous arguments will have an name
-generated for them based upon the name of the aggregate function and
-the model field that is being aggregated.
-
-For example, if you were manipulating blog entries, you may want to know
-the number of authors that have contributed blog entries::
-
- >>> q = Blog.objects.aggregate(Count('entry'))
- {'entry__count': 16}
-
-By using a keyword argument to specify the aggregate function, you can
-control the name of the aggregation value that is returned::
-
- >>> q = Blog.objects.aggregate(number_of_entries=Count('entry'))
- {'number_of_entries': 16}
-
-For an in-depth discussion of aggregation, see :doc:`the topic guide on
-Aggregation </topics/db/aggregation>`.
-
-exists
-~~~~~~
-
-.. method:: exists()
-
-.. versionadded:: 1.2
-
-Returns ``True`` if the :class:`QuerySet` contains any results, and ``False``
-if not. This tries to perform the query in the simplest and fastest way
-possible, but it *does* execute nearly the same query. This means that calling
-:meth:`QuerySet.exists()` is faster than ``bool(some_query_set)``, but not by
-a large degree. If ``some_query_set`` has not yet been evaluated, but you know
-that it will be at some point, then using ``some_query_set.exists()`` will do
-more overall work (an additional query) than simply using
-``bool(some_query_set)``.
-
-update
-~~~~~~
-
-.. method:: update(**kwargs)
-
-Performs an SQL update query for the specified fields, and returns
-the number of rows affected. The ``update()`` method is applied instantly and
-the only restriction on the :class:`QuerySet` that is updated is that it can
-only update columns in the model's main table. Filtering based on related
-fields is still possible. You cannot call ``update()`` on a
-:class:`QuerySet` that has had a slice taken or can otherwise no longer be
-filtered.
-
-For example, if you wanted to update all the entries in a particular blog
-to use the same headline::
-
- >>> b = Blog.objects.get(pk=1)
-
- # Update all the headlines belonging to this Blog.
- >>> Entry.objects.select_related().filter(blog=b).update(headline='Everything is the same')
-
-The ``update()`` method does a bulk update and does not call any ``save()``
-methods on your models, nor does it emit the ``pre_save`` or ``post_save``
-signals (which are a consequence of calling ``save()``).
-
-delete
-~~~~~~
-
-.. method:: delete()
-
-Performs an SQL delete query on all rows in the :class:`QuerySet`. The
-``delete()`` is applied instantly. You cannot call ``delete()`` on a
-:class:`QuerySet` that has had a slice taken or can otherwise no longer be
-filtered.
-
-For example, to delete all the entries in a particular blog::
-
- >>> b = Blog.objects.get(pk=1)
-
- # Delete all the entries belonging to this Blog.
- >>> Entry.objects.filter(blog=b).delete()
-
-Django emulates the SQL constraint ``ON DELETE CASCADE`` -- in other words, any
-objects with foreign keys pointing at the objects to be deleted will be deleted
-along with them. For example::
-
- blogs = Blog.objects.all()
- # This will delete all Blogs and all of their Entry objects.
- blogs.delete()
-
-The ``delete()`` method does a bulk delete and does not call any ``delete()``
-methods on your models. It does, however, emit the
-:data:`~django.db.models.signals.pre_delete` and
-:data:`~django.db.models.signals.post_delete` signals for all deleted objects
-(including cascaded deletions).
-
-.. _field-lookups:
-
-Field lookups
--------------
-
-Field lookups are how you specify the meat of an SQL ``WHERE`` clause. They're
-specified as keyword arguments to the ``QuerySet`` methods ``filter()``,
-``exclude()`` and ``get()``.
-
-For an introduction, see :ref:`field-lookups-intro`.
-
-.. fieldlookup:: exact
-
-exact
-~~~~~
-
-Exact match. If the value provided for comparison is ``None``, it will
-be interpreted as an SQL ``NULL`` (See isnull_ for more details).
-
-Examples::
-
- Entry.objects.get(id__exact=14)
- Entry.objects.get(id__exact=None)
-
-SQL equivalents::
-
- SELECT ... WHERE id = 14;
- SELECT ... WHERE id IS NULL;
-
-.. versionchanged:: 1.0
- The semantics of ``id__exact=None`` have changed in Django 1.0. Previously,
- it was (intentionally) converted to ``WHERE id = NULL`` at the SQL level,
- which would never match anything. It has now been changed to behave the
- same as ``id__isnull=True``.
-
-.. admonition:: MySQL comparisons
-
- In MySQL, a database table's "collation" setting determines whether
- ``exact`` comparisons are case-sensitive. This is a database setting, *not*
- a Django setting. It's possible to configure your MySQL tables to use
- case-sensitive comparisons, but some trade-offs are involved. For more
- information about this, see the :ref:`collation section <mysql-collation>`
- in the :doc:`databases </ref/databases>` documentation.
-
-.. fieldlookup:: iexact
-
-iexact
-~~~~~~
-
-Case-insensitive exact match.
-
-Example::
-
- Blog.objects.get(name__iexact='beatles blog')
-
-SQL equivalent::
-
- SELECT ... WHERE name ILIKE 'beatles blog';
-
-Note this will match ``'Beatles Blog'``, ``'beatles blog'``, ``'BeAtLes
-BLoG'``, etc.
-
-.. admonition:: SQLite users
-
- When using the SQLite backend and Unicode (non-ASCII) strings, bear in
- mind the :ref:`database note <sqlite-string-matching>` about string
- comparisons. SQLite does not do case-insensitive matching for Unicode
- strings.
-
-.. fieldlookup:: contains
-
-contains
-~~~~~~~~
-
-Case-sensitive containment test.
-
-Example::
-
- Entry.objects.get(headline__contains='Lennon')
-
-SQL equivalent::
-
- SELECT ... WHERE headline LIKE '%Lennon%';
-
-Note this will match the headline ``'Today Lennon honored'`` but not
-``'today lennon honored'``.
-
-SQLite doesn't support case-sensitive ``LIKE`` statements; ``contains`` acts
-like ``icontains`` for SQLite.
-
-.. fieldlookup:: icontains
-
-icontains
-~~~~~~~~~
-
-Case-insensitive containment test.
-
-Example::
-
- Entry.objects.get(headline__icontains='Lennon')
-
-SQL equivalent::
-
- SELECT ... WHERE headline ILIKE '%Lennon%';
-
-.. admonition:: SQLite users
-
- When using the SQLite backend and Unicode (non-ASCII) strings, bear in
- mind the :ref:`database note <sqlite-string-matching>` about string
- comparisons.
-
-.. fieldlookup:: in
-
-in
-~~
-
-In a given list.
-
-Example::
-
- Entry.objects.filter(id__in=[1, 3, 4])
-
-SQL equivalent::
-
- SELECT ... WHERE id IN (1, 3, 4);
-
-You can also use a queryset to dynamically evaluate the list of values
-instead of providing a list of literal values::
-
- inner_qs = Blog.objects.filter(name__contains='Cheddar')
- entries = Entry.objects.filter(blog__in=inner_qs)
-
-This queryset will be evaluated as subselect statement::
-
- SELECT ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE '%Cheddar%')
-
-The above code fragment could also be written as follows::
-
- inner_q = Blog.objects.filter(name__contains='Cheddar').values('pk').query
- entries = Entry.objects.filter(blog__in=inner_q)
-
-
-.. versionchanged:: 1.1
- In Django 1.0, only the latter piece of code is valid.
-
-This second form is a bit less readable and unnatural to write, since it
-accesses the internal ``query`` attribute and requires a ``ValuesQuerySet``.
-If your code doesn't require compatibility with Django 1.0, use the first
-form, passing in a queryset directly.
-
-If you pass in a ``ValuesQuerySet`` or ``ValuesListQuerySet`` (the result of
-calling ``values()`` or ``values_list()`` on a queryset) as the value to an
-``__in`` lookup, you need to ensure you are only extracting one field in the
-result. For example, this will work (filtering on the blog names)::
-
- inner_qs = Blog.objects.filter(name__contains='Ch').values('name')
- entries = Entry.objects.filter(blog__name__in=inner_qs)
-
-This example will raise an exception, since the inner query is trying to
-extract two field values, where only one is expected::
-
- # Bad code! Will raise a TypeError.
- inner_qs = Blog.objects.filter(name__contains='Ch').values('name', 'id')
- entries = Entry.objects.filter(blog__name__in=inner_qs)
-
-.. warning::
-
- This ``query`` attribute should be considered an opaque internal attribute.
- It's fine to use it like above, but its API may change between Django
- versions.
-
-.. admonition:: Performance considerations
-
- Be cautious about using nested queries and understand your database
- server's performance characteristics (if in doubt, benchmark!). Some
- database backends, most notably MySQL, don't optimize nested queries very
- well. It is more efficient, in those cases, to extract a list of values
- and then pass that into the second query. That is, execute two queries
- instead of one::
-
- values = Blog.objects.filter(
- name__contains='Cheddar').values_list('pk', flat=True)
- entries = Entry.objects.filter(blog__in=list(values))
-
- Note the ``list()`` call around the Blog ``QuerySet`` to force execution of
- the first query. Without it, a nested query would be executed, because
- :ref:`querysets-are-lazy`.
-
-.. fieldlookup:: gt
-
-gt
-~~
-
-Greater than.
-
-Example::
-
- Entry.objects.filter(id__gt=4)
-
-SQL equivalent::
-
- SELECT ... WHERE id > 4;
-
-.. fieldlookup:: gte
-
-gte
-~~~
-
-Greater than or equal to.
-
-.. fieldlookup:: lt
-
-lt
-~~
-
-Less than.
-
-.. fieldlookup:: lte
-
-lte
-~~~
-
-Less than or equal to.
-
-.. fieldlookup:: startswith
-
-startswith
-~~~~~~~~~~
-
-Case-sensitive starts-with.
-
-Example::
-
- Entry.objects.filter(headline__startswith='Will')
-
-SQL equivalent::
-
- SELECT ... WHERE headline LIKE 'Will%';
-
-SQLite doesn't support case-sensitive ``LIKE`` statements; ``startswith`` acts
-like ``istartswith`` for SQLite.
-
-.. fieldlookup:: istartswith
-
-istartswith
-~~~~~~~~~~~
-
-Case-insensitive starts-with.
-
-Example::
-
- Entry.objects.filter(headline__istartswith='will')
-
-SQL equivalent::
-
- SELECT ... WHERE headline ILIKE 'Will%';
-
-.. admonition:: SQLite users
-
- When using the SQLite backend and Unicode (non-ASCII) strings, bear in
- mind the :ref:`database note <sqlite-string-matching>` about string
- comparisons.
-
-.. fieldlookup:: endswith
-
-endswith
-~~~~~~~~
-
-Case-sensitive ends-with.
-
-Example::
-
- Entry.objects.filter(headline__endswith='cats')
-
-SQL equivalent::
-
- SELECT ... WHERE headline LIKE '%cats';
-
-SQLite doesn't support case-sensitive ``LIKE`` statements; ``endswith`` acts
-like ``iendswith`` for SQLite.
-
-.. fieldlookup:: iendswith
-
-iendswith
-~~~~~~~~~
-
-Case-insensitive ends-with.
-
-Example::
-
- Entry.objects.filter(headline__iendswith='will')
-
-SQL equivalent::
-
- SELECT ... WHERE headline ILIKE '%will'
-
-.. admonition:: SQLite users
-
- When using the SQLite backend and Unicode (non-ASCII) strings, bear in
- mind the :ref:`database note <sqlite-string-matching>` about string
- comparisons.
-
-.. fieldlookup:: range
-
-range
-~~~~~
-
-Range test (inclusive).
-
-Example::
-
- start_date = datetime.date(2005, 1, 1)
- end_date = datetime.date(2005, 3, 31)
- Entry.objects.filter(pub_date__range=(start_date, end_date))
-
-SQL equivalent::
-
- SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';
-
-You can use ``range`` anywhere you can use ``BETWEEN`` in SQL -- for dates,
-numbers and even characters.
-
-.. fieldlookup:: year
-
-year
-~~~~
-
-For date/datetime fields, exact year match. Takes a four-digit year.
-
-Example::
-
- Entry.objects.filter(pub_date__year=2005)
-
-SQL equivalent::
-
- SELECT ... WHERE EXTRACT('year' FROM pub_date) = '2005';
-
-(The exact SQL syntax varies for each database engine.)
-
-.. fieldlookup:: month
-
-month
-~~~~~
-
-For date/datetime fields, exact month match. Takes an integer 1 (January)
-through 12 (December).
-
-Example::
-
- Entry.objects.filter(pub_date__month=12)
-
-SQL equivalent::
-
- SELECT ... WHERE EXTRACT('month' FROM pub_date) = '12';
-
-(The exact SQL syntax varies for each database engine.)
-
-.. fieldlookup:: day
-
-day
-~~~
-
-For date/datetime fields, exact day match.
-
-Example::
-
- Entry.objects.filter(pub_date__day=3)
-
-SQL equivalent::
-
- SELECT ... WHERE EXTRACT('day' FROM pub_date) = '3';
-
-(The exact SQL syntax varies for each database engine.)
-
-Note this will match any record with a pub_date on the third day of the month,
-such as January 3, July 3, etc.
-
-.. fieldlookup:: week_day
-
-week_day
-~~~~~~~~
-
-.. versionadded:: 1.1
-
-For date/datetime fields, a 'day of the week' match.
-
-Takes an integer value representing the day of week from 1 (Sunday) to 7
-(Saturday).
-
-Example::
-
- Entry.objects.filter(pub_date__week_day=2)
-
-(No equivalent SQL code fragment is included for this lookup because
-implementation of the relevant query varies among different database engines.)
-
-Note this will match any record with a pub_date that falls on a Monday (day 2
-of the week), regardless of the month or year in which it occurs. Week days
-are indexed with day 1 being Sunday and day 7 being Saturday.
-
-.. fieldlookup:: isnull
-
-isnull
-~~~~~~
-
-Takes either ``True`` or ``False``, which correspond to SQL queries of
-``IS NULL`` and ``IS NOT NULL``, respectively.
-
-Example::
-
- Entry.objects.filter(pub_date__isnull=True)
-
-SQL equivalent::
-
- SELECT ... WHERE pub_date IS NULL;
-
-.. fieldlookup:: search
-
-search
-~~~~~~
-
-A boolean full-text search, taking advantage of full-text indexing. This is
-like ``contains`` but is significantly faster due to full-text indexing.
-
-Example::
-
- Entry.objects.filter(headline__search="+Django -jazz Python")
-
-SQL equivalent::
-
- SELECT ... WHERE MATCH(tablename, headline) AGAINST (+Django -jazz Python IN BOOLEAN MODE);
-
-Note this is only available in MySQL and requires direct manipulation of the
-database to add the full-text index. By default Django uses BOOLEAN MODE for
-full text searches. `See the MySQL documentation for additional details.
-<http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html>`_
-
-
-.. fieldlookup:: regex
-
-regex
-~~~~~
-
-.. versionadded:: 1.0
-
-Case-sensitive regular expression match.
-
-The regular expression syntax is that of the database backend in use.
-In the case of SQLite, which has no built in regular expression support,
-this feature is provided by a (Python) user-defined REGEXP function, and
-the regular expression syntax is therefore that of Python's ``re`` module.
-
-Example::
-
- Entry.objects.get(title__regex=r'^(An?|The) +')
-
-SQL equivalents::
-
- SELECT ... WHERE title REGEXP BINARY '^(An?|The) +'; -- MySQL
-
- SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'c'); -- Oracle
-
- SELECT ... WHERE title ~ '^(An?|The) +'; -- PostgreSQL
-
- SELECT ... WHERE title REGEXP '^(An?|The) +'; -- SQLite
-
-Using raw strings (e.g., ``r'foo'`` instead of ``'foo'``) for passing in the
-regular expression syntax is recommended.
-
-.. fieldlookup:: iregex
-
-iregex
-~~~~~~
-
-.. versionadded:: 1.0
-
-Case-insensitive regular expression match.
-
-Example::
-
- Entry.objects.get(title__iregex=r'^(an?|the) +')
-
-SQL equivalents::
-
- SELECT ... WHERE title REGEXP '^(an?|the) +'; -- MySQL
-
- SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'i'); -- Oracle
-
- SELECT ... WHERE title ~* '^(an?|the) +'; -- PostgreSQL
-
- SELECT ... WHERE title REGEXP '(?i)^(an?|the) +'; -- SQLite
-
-.. _aggregation-functions:
-
-Aggregation Functions
----------------------
-
-.. versionadded:: 1.1
-
-Django provides the following aggregation functions in the
-``django.db.models`` module. For details on how to use these
-aggregate functions, see
-:doc:`the topic guide on aggregation </topics/db/aggregation>`.
-
-Avg
-~~~
-
-.. class:: Avg(field)
-
-Returns the mean value of the given field.
-
- * Default alias: ``<field>__avg``
- * Return type: float
-
-Count
-~~~~~
-
-.. class:: Count(field, distinct=False)
-
-Returns the number of objects that are related through the provided field.
-
- * Default alias: ``<field>__count``
- * Return type: integer
-
-Has one optional argument:
-
-.. attribute:: distinct
-
- If distinct=True, the count will only include unique instances. This has
- the SQL equivalent of ``COUNT(DISTINCT field)``. Default value is ``False``.
-
-Max
-~~~
-
-.. class:: Max(field)
-
-Returns the maximum value of the given field.
-
- * Default alias: ``<field>__max``
- * Return type: same as input field
-
-Min
-~~~
-
-.. class:: Min(field)
-
-Returns the minimum value of the given field.
-
- * Default alias: ``<field>__min``
- * Return type: same as input field
-
-StdDev
-~~~~~~
-
-.. class:: StdDev(field, sample=False)
-
-Returns the standard deviation of the data in the provided field.
-
- * Default alias: ``<field>__stddev``
- * Return type: float
-
-Has one optional argument:
-
-.. attribute:: sample
-
- By default, ``StdDev`` returns the population standard deviation. However,
- if ``sample=True``, the return value will be the sample standard deviation.
-
-.. admonition:: SQLite
-
- SQLite doesn't provide ``StdDev`` out of the box. An implementation is
- available as an extension module for SQLite. Consult the SQlite
- documentation for instructions on obtaining and installing this extension.
-
-Sum
-~~~
-
-.. class:: Sum(field)
-
-Computes the sum of all values of the given field.
-
- * Default alias: ``<field>__sum``
- * Return type: same as input field
-
-Variance
-~~~~~~~~
-
-.. class:: Variance(field, sample=False)
-
-Returns the variance of the data in the provided field.
-
- * Default alias: ``<field>__variance``
- * Return type: float
-
-Has one optional argument:
-
-.. attribute:: sample
-
- By default, ``Variance`` returns the population variance. However,
- if ``sample=True``, the return value will be the sample variance.
-
-.. admonition:: SQLite
-
- SQLite doesn't provide ``Variance`` out of the box. An implementation is
- available as an extension module for SQLite. Consult the SQlite
- documentation for instructions on obtaining and installing this extension.
diff --git a/parts/django/docs/ref/models/relations.txt b/parts/django/docs/ref/models/relations.txt
deleted file mode 100644
index ee6bcdd..0000000
--- a/parts/django/docs/ref/models/relations.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-=========================
-Related objects reference
-=========================
-
-.. currentmodule:: django.db.models.fields.related
-
-.. class:: RelatedManager
-
- A "related manager" is a manager used in a one-to-many or many-to-many
- related context. This happens in two cases:
-
- * The "other side" of a :class:`~django.db.models.ForeignKey` relation.
- That is::
-
- class Reporter(models.Model):
- ...
-
- class Article(models.Model):
- reporter = models.ForeignKey(Reporter)
-
- In the above example, the methods below will be available on
- the manager ``reporter.article_set``.
-
- * Both sides of a :class:`~django.db.models.ManyToManyField` relation::
-
- class Topping(models.Model):
- ...
-
- class Pizza(models.Model):
- toppings = models.ManyToManyField(Topping)
-
- In this example, the methods below will be available both on
- ``topping.pizza_set`` and on ``pizza.toppings``.
-
- These related managers have some extra methods:
-
- .. method:: add(obj1, [obj2, ...])
-
- Adds the specified model objects to the related object set.
-
- Example::
-
- >>> b = Blog.objects.get(id=1)
- >>> e = Entry.objects.get(id=234)
- >>> b.entry_set.add(e) # Associates Entry e with Blog b.
-
- .. method:: create(**kwargs)
-
- Creates a new object, saves it and puts it in the related object set.
- Returns the newly created object::
-
- >>> b = Blog.objects.get(id=1)
- >>> e = b.entry_set.create(
- ... headline='Hello',
- ... body_text='Hi',
- ... pub_date=datetime.date(2005, 1, 1)
- ... )
-
- # No need to call e.save() at this point -- it's already been saved.
-
- This is equivalent to (but much simpler than)::
-
- >>> b = Blog.objects.get(id=1)
- >>> e = Entry(
- ... blog=b,
- ... headline='Hello',
- ... body_text='Hi',
- ... pub_date=datetime.date(2005, 1, 1)
- ... )
- >>> e.save(force_insert=True)
-
- Note that there's no need to specify the keyword argument of the model
- that defines the relationship. In the above example, we don't pass the
- parameter ``blog`` to ``create()``. Django figures out that the new
- ``Entry`` object's ``blog`` field should be set to ``b``.
-
- .. method:: remove(obj1, [obj2, ...])
-
- Removes the specified model objects from the related object set::
-
- >>> b = Blog.objects.get(id=1)
- >>> e = Entry.objects.get(id=234)
- >>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.
-
- In order to prevent database inconsistency, this method only exists on
- :class:`~django.db.models.ForeignKey` objects where ``null=True``. If
- the related field can't be set to ``None`` (``NULL``), then an object
- can't be removed from a relation without being added to another. In the
- above example, removing ``e`` from ``b.entry_set()`` is equivalent to
- doing ``e.blog = None``, and because the ``blog``
- :class:`~django.db.models.ForeignKey` doesn't have ``null=True``, this
- is invalid.
-
- .. method:: clear()
-
- Removes all objects from the related object set::
-
- >>> b = Blog.objects.get(id=1)
- >>> b.entry_set.clear()
-
- Note this doesn't delete the related objects -- it just disassociates
- them.
-
- Just like ``remove()``, ``clear()`` is only available on
- :class:`~django.db.models.ForeignKey`\s where ``null=True``.
diff --git a/parts/django/docs/ref/request-response.txt b/parts/django/docs/ref/request-response.txt
deleted file mode 100644
index c663c1e..0000000
--- a/parts/django/docs/ref/request-response.txt
+++ /dev/null
@@ -1,646 +0,0 @@
-============================
-Request and response objects
-============================
-
-.. module:: django.http
- :synopsis: Classes dealing with HTTP requests and responses.
-
-Quick overview
-==============
-
-Django uses request and response objects to pass state through the system.
-
-When a page is requested, Django creates an :class:`HttpRequest` object that
-contains metadata about the request. Then Django loads the appropriate view,
-passing the :class:`HttpRequest` as the first argument to the view function.
-Each view is responsible for returning an :class:`HttpResponse` object.
-
-This document explains the APIs for :class:`HttpRequest` and
-:class:`HttpResponse` objects.
-
-HttpRequest objects
-===================
-
-.. class:: HttpRequest
-
-Attributes
-----------
-
-All attributes except ``session`` should be considered read-only.
-
-.. attribute:: HttpRequest.path
-
- A string representing the full path to the requested page, not including
- the domain.
-
- Example: ``"/music/bands/the_beatles/"``
-
-.. attribute:: HttpRequest.path_info
-
- Under some web server configurations, the portion of the URL after the host
- name is split up into a script prefix portion and a path info portion
- (this happens, for example, when using the ``django.root`` option
- with the :ref:`modpython handler from Apache <howto-deployment-modpython>`).
- The ``path_info`` attribute always contains the path info portion of the
- path, no matter what web server is being used. Using this instead of
- attr:`~HttpRequest.path` can make your code much easier to move between test
- and deployment servers.
-
- For example, if the ``django.root`` for your application is set to
- ``"/minfo"``, then ``path`` might be ``"/minfo/music/bands/the_beatles/"``
- and ``path_info`` would be ``"/music/bands/the_beatles/"``.
-
-.. attribute:: HttpRequest.method
-
- A string representing the HTTP method used in the request. This is
- guaranteed to be uppercase. Example::
-
- if request.method == 'GET':
- do_something()
- elif request.method == 'POST':
- do_something_else()
-
-.. attribute:: HttpRequest.encoding
-
- A string representing the current encoding used to decode form submission
- data (or ``None``, which means the :setting:`DEFAULT_CHARSET` setting is
- used). You can write to this attribute to change the encoding used when
- accessing the form data. Any subsequent attribute accesses (such as reading
- from ``GET`` or ``POST``) will use the new ``encoding`` value. Useful if
- you know the form data is not in the :setting:`DEFAULT_CHARSET` encoding.
-
-.. attribute:: HttpRequest.GET
-
- A dictionary-like object containing all given HTTP GET parameters. See the
- :class:`QueryDict` documentation below.
-
-.. attribute:: HttpRequest.POST
-
- A dictionary-like object containing all given HTTP POST parameters. See the
- :class:`QueryDict` documentation below.
-
- It's possible that a request can come in via POST with an empty ``POST``
- dictionary -- if, say, a form is requested via the POST HTTP method but
- does not include form data. Therefore, you shouldn't use ``if request.POST``
- to check for use of the POST method; instead, use ``if request.method ==
- "POST"`` (see above).
-
- Note: ``POST`` does *not* include file-upload information. See ``FILES``.
-
-.. attribute:: HttpRequest.REQUEST
-
- For convenience, a dictionary-like object that searches ``POST`` first,
- then ``GET``. Inspired by PHP's ``$_REQUEST``.
-
- For example, if ``GET = {"name": "john"}`` and ``POST = {"age": '34'}``,
- ``REQUEST["name"]`` would be ``"john"``, and ``REQUEST["age"]`` would be
- ``"34"``.
-
- It's strongly suggested that you use ``GET`` and ``POST`` instead of
- ``REQUEST``, because the former are more explicit.
-
-.. attribute:: HttpRequest.COOKIES
-
- A standard Python dictionary containing all cookies. Keys and values are
- strings.
-
-.. attribute:: HttpRequest.FILES
-
- A dictionary-like object containing all uploaded files. Each key in
- ``FILES`` is the ``name`` from the ``<input type="file" name="" />``. Each
- value in ``FILES`` is an :class:`UploadedFile` as described below.
-
- See :doc:`/topics/files` for more information.
-
- Note that ``FILES`` will only contain data if the request method was POST
- and the ``<form>`` that posted to the request had
- ``enctype="multipart/form-data"``. Otherwise, ``FILES`` will be a blank
- dictionary-like object.
-
- .. versionchanged:: 1.0
-
- In previous versions of Django, ``request.FILES`` contained simple ``dict``
- objects representing uploaded files. This is no longer true -- files are
- represented by :class:`UploadedFile` objects.
-
- These :class:`UploadedFile` objects will emulate the old-style ``dict``
- interface, but this is deprecated and will be removed in the next release
- of Django.
-
-.. attribute:: HttpRequest.META
-
- A standard Python dictionary containing all available HTTP headers.
- Available headers depend on the client and server, but here are some
- examples:
-
- * ``CONTENT_LENGTH``
- * ``CONTENT_TYPE``
- * ``HTTP_ACCEPT_ENCODING``
- * ``HTTP_ACCEPT_LANGUAGE``
- * ``HTTP_HOST`` -- The HTTP Host header sent by the client.
- * ``HTTP_REFERER`` -- The referring page, if any.
- * ``HTTP_USER_AGENT`` -- The client's user-agent string.
- * ``QUERY_STRING`` -- The query string, as a single (unparsed) string.
- * ``REMOTE_ADDR`` -- The IP address of the client.
- * ``REMOTE_HOST`` -- The hostname of the client.
- * ``REMOTE_USER`` -- The user authenticated by the Web server, if any.
- * ``REQUEST_METHOD`` -- A string such as ``"GET"`` or ``"POST"``.
- * ``SERVER_NAME`` -- The hostname of the server.
- * ``SERVER_PORT`` -- The port of the server.
-
- With the exception of ``CONTENT_LENGTH`` and ``CONTENT_TYPE``, as given
- above, any HTTP headers in the request are converted to ``META`` keys by
- converting all characters to uppercase, replacing any hyphens with
- underscores and adding an ``HTTP_`` prefix to the name. So, for example, a
- header called ``X-Bender`` would be mapped to the ``META`` key
- ``HTTP_X_BENDER``.
-
-.. attribute:: HttpRequest.user
-
- A ``django.contrib.auth.models.User`` object representing the currently
- logged-in user. If the user isn't currently logged in, ``user`` will be set
- to an instance of ``django.contrib.auth.models.AnonymousUser``. You
- can tell them apart with ``is_authenticated()``, like so::
-
- if request.user.is_authenticated():
- # Do something for logged-in users.
- else:
- # Do something for anonymous users.
-
- ``user`` is only available if your Django installation has the
- ``AuthenticationMiddleware`` activated. For more, see
- :doc:`/topics/auth`.
-
-.. attribute:: HttpRequest.session
-
- A readable-and-writable, dictionary-like object that represents the current
- session. This is only available if your Django installation has session
- support activated. See the :doc:`session documentation
- </topics/http/sessions>` for full details.
-
-.. attribute:: HttpRequest.raw_post_data
-
- The raw HTTP POST data. This is only useful for advanced processing. Use
- ``POST`` instead.
-
-.. attribute:: HttpRequest.urlconf
-
- Not defined by Django itself, but will be read if other code (e.g., a custom
- middleware class) sets it. When present, this will be used as the root
- URLconf for the current request, overriding the :setting:`ROOT_URLCONF`
- setting. See :ref:`how-django-processes-a-request` for details.
-
-Methods
--------
-
-.. method:: HttpRequest.get_host()
-
- Returns the originating host of the request using information from the
- ``HTTP_X_FORWARDED_HOST`` and ``HTTP_HOST`` headers (in that order). If
- they don't provide a value, the method uses a combination of
- ``SERVER_NAME`` and ``SERVER_PORT`` as detailed in `PEP 333`_.
-
- .. _PEP 333: http://www.python.org/dev/peps/pep-0333/
-
- Example: ``"127.0.0.1:8000"``
-
- .. note:: The :meth:`~HttpRequest.get_host()` method fails when the host is
- behind multiple proxies. One solution is to use middleware to rewrite
- the proxy headers, as in the following example::
-
- class MultipleProxyMiddleware(object):
- FORWARDED_FOR_FIELDS = [
- 'HTTP_X_FORWARDED_FOR',
- 'HTTP_X_FORWARDED_HOST',
- 'HTTP_X_FORWARDED_SERVER',
- ]
-
- def process_request(self, request):
- """
- Rewrites the proxy headers so that only the most
- recent proxy is used.
- """
- for field in self.FORWARDED_FOR_FIELDS:
- if field in request.META:
- if ',' in request.META[field]:
- parts = request.META[field].split(',')
- request.META[field] = parts[-1].strip()
-
-
-.. method:: HttpRequest.get_full_path()
-
- Returns the ``path``, plus an appended query string, if applicable.
-
- Example: ``"/music/bands/the_beatles/?print=true"``
-
-.. method:: HttpRequest.build_absolute_uri(location)
-
- Returns the absolute URI form of ``location``. If no location is provided,
- the location will be set to ``request.get_full_path()``.
-
- If the location is already an absolute URI, it will not be altered.
- Otherwise the absolute URI is built using the server variables available in
- this request.
-
- Example: ``"http://example.com/music/bands/the_beatles/?print=true"``
-
-.. method:: HttpRequest.is_secure()
-
- Returns ``True`` if the request is secure; that is, if it was made with
- HTTPS.
-
-.. method:: HttpRequest.is_ajax()
-
- Returns ``True`` if the request was made via an ``XMLHttpRequest``, by
- checking the ``HTTP_X_REQUESTED_WITH`` header for the string
- ``'XMLHttpRequest'``. Most modern JavaScript libraries send this header.
- If you write your own XMLHttpRequest call (on the browser side), you'll
- have to set this header manually if you want ``is_ajax()`` to work.
-
-
-UploadedFile objects
-====================
-
-.. class:: UploadedFile
-
-
-Attributes
-----------
-
-.. attribute:: UploadedFile.name
-
- The name of the uploaded file.
-
-.. attribute:: UploadedFile.size
-
- The size, in bytes, of the uploaded file.
-
-Methods
-----------
-
-.. method:: UploadedFile.chunks(chunk_size=None)
-
- Returns a generator that yields sequential chunks of data.
-
-.. method:: UploadedFile.read(num_bytes=None)
-
- Read a number of bytes from the file.
-
-
-
-QueryDict objects
-=================
-
-.. class:: QueryDict
-
-In an :class:`HttpRequest` object, the ``GET`` and ``POST`` attributes are instances
-of ``django.http.QueryDict``. :class:`QueryDict` is a dictionary-like
-class customized to deal with multiple values for the same key. This is
-necessary because some HTML form elements, notably
-``<select multiple="multiple">``, pass multiple values for the same key.
-
-``QueryDict`` instances are immutable, unless you create a ``copy()`` of them.
-That means you can't change attributes of ``request.POST`` and ``request.GET``
-directly.
-
-Methods
--------
-
-:class:`QueryDict` implements all the standard dictionary methods, because it's
-a subclass of dictionary. Exceptions are outlined here:
-
-.. method:: QueryDict.__getitem__(key)
-
- Returns the value for the given key. If the key has more than one value,
- ``__getitem__()`` returns the last value. Raises
- ``django.utils.datastructures.MultiValueDictKeyError`` if the key does not
- exist. (This is a subclass of Python's standard ``KeyError``, so you can
- stick to catching ``KeyError``.)
-
-.. method:: QueryDict.__setitem__(key, value)
-
- Sets the given key to ``[value]`` (a Python list whose single element is
- ``value``). Note that this, as other dictionary functions that have side
- effects, can only be called on a mutable ``QueryDict`` (one that was created
- via ``copy()``).
-
-.. method:: QueryDict.__contains__(key)
-
- Returns ``True`` if the given key is set. This lets you do, e.g., ``if "foo"
- in request.GET``.
-
-.. method:: QueryDict.get(key, default)
-
- Uses the same logic as ``__getitem__()`` above, with a hook for returning a
- default value if the key doesn't exist.
-
-.. method:: QueryDict.setdefault(key, default)
-
- Just like the standard dictionary ``setdefault()`` method, except it uses
- ``__setitem__()`` internally.
-
-.. method:: QueryDict.update(other_dict)
-
- Takes either a ``QueryDict`` or standard dictionary. Just like the standard
- dictionary ``update()`` method, except it *appends* to the current
- dictionary items rather than replacing them. For example::
-
- >>> q = QueryDict('a=1')
- >>> q = q.copy() # to make it mutable
- >>> q.update({'a': '2'})
- >>> q.getlist('a')
- [u'1', u'2']
- >>> q['a'] # returns the last
- [u'2']
-
-.. method:: QueryDict.items()
-
- Just like the standard dictionary ``items()`` method, except this uses the
- same last-value logic as ``__getitem__()``. For example::
-
- >>> q = QueryDict('a=1&a=2&a=3')
- >>> q.items()
- [(u'a', u'3')]
-
-.. method:: QueryDict.iteritems()
-
- Just like the standard dictionary ``iteritems()`` method. Like
- :meth:`QueryDict.items()` this uses the same last-value logic as
- :meth:`QueryDict.__getitem__()`.
-
-.. method:: QueryDict.iterlists()
-
- Like :meth:`QueryDict.iteritems()` except it includes all values, as a list,
- for each member of the dictionary.
-
-.. method:: QueryDict.values()
-
- Just like the standard dictionary ``values()`` method, except this uses the
- same last-value logic as ``__getitem__()``. For example::
-
- >>> q = QueryDict('a=1&a=2&a=3')
- >>> q.values()
- [u'3']
-
-.. method:: QueryDict.itervalues()
-
- Just like :meth:`QueryDict.values()`, except an iterator.
-
-In addition, ``QueryDict`` has the following methods:
-
-.. method:: QueryDict.copy()
-
- Returns a copy of the object, using ``copy.deepcopy()`` from the Python
- standard library. The copy will be mutable -- that is, you can change its
- values.
-
-.. method:: QueryDict.getlist(key)
-
- Returns the data with the requested key, as a Python list. Returns an
- empty list if the key doesn't exist. It's guaranteed to return a list of
- some sort.
-
-.. method:: QueryDict.setlist(key, list_)
-
- Sets the given key to ``list_`` (unlike ``__setitem__()``).
-
-.. method:: QueryDict.appendlist(key, item)
-
- Appends an item to the internal list associated with key.
-
-.. method:: QueryDict.setlistdefault(key, default_list)
-
- Just like ``setdefault``, except it takes a list of values instead of a
- single value.
-
-.. method:: QueryDict.lists()
-
- Like :meth:`items()`, except it includes all values, as a list, for each
- member of the dictionary. For example::
-
- >>> q = QueryDict('a=1&a=2&a=3')
- >>> q.lists()
- [(u'a', [u'1', u'2', u'3'])]
-
-.. method:: QueryDict.urlencode()
-
- Returns a string of the data in query-string format.
- Example: ``"a=2&b=3&b=5"``.
-
-HttpResponse objects
-====================
-
-.. class:: HttpResponse
-
-In contrast to :class:`HttpRequest` objects, which are created automatically by
-Django, :class:`HttpResponse` objects are your responsibility. Each view you
-write is responsible for instantiating, populating and returning an
-:class:`HttpResponse`.
-
-The :class:`HttpResponse` class lives in the :mod:`django.http` module.
-
-Usage
------
-
-Passing strings
-~~~~~~~~~~~~~~~
-
-Typical usage is to pass the contents of the page, as a string, to the
-:class:`HttpResponse` constructor::
-
- >>> response = HttpResponse("Here's the text of the Web page.")
- >>> response = HttpResponse("Text only, please.", mimetype="text/plain")
-
-But if you want to add content incrementally, you can use ``response`` as a
-file-like object::
-
- >>> response = HttpResponse()
- >>> response.write("<p>Here's the text of the Web page.</p>")
- >>> response.write("<p>Here's another paragraph.</p>")
-
-Passing iterators
-~~~~~~~~~~~~~~~~~
-
-Finally, you can pass ``HttpResponse`` an iterator rather than passing it
-hard-coded strings. If you use this technique, follow these guidelines:
-
- * The iterator should return strings.
- * If an :class:`HttpResponse` has been initialized with an iterator as its
- content, you can't use the class:`HttpResponse` instance as a file-like
- object. Doing so will raise ``Exception``.
-
-Setting headers
-~~~~~~~~~~~~~~~
-
-To set or remove a header in your response, treat it like a dictionary::
-
- >>> response = HttpResponse()
- >>> response['Cache-Control'] = 'no-cache'
- >>> del response['Cache-Control']
-
-Note that unlike a dictionary, ``del`` doesn't raise ``KeyError`` if the header
-doesn't exist.
-
-.. versionadded:: 1.1
-
-HTTP headers cannot contain newlines. An attempt to set a header containing a
-newline character (CR or LF) will raise ``BadHeaderError``
-
-Telling the browser to treat the response as a file attachment
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To tell the browser to treat the response as a file attachment, use the
-``mimetype`` argument and set the ``Content-Disposition`` header. For example,
-this is how you might return a Microsoft Excel spreadsheet::
-
- >>> response = HttpResponse(my_data, mimetype='application/vnd.ms-excel')
- >>> response['Content-Disposition'] = 'attachment; filename=foo.xls'
-
-There's nothing Django-specific about the ``Content-Disposition`` header, but
-it's easy to forget the syntax, so we've included it here.
-
-Attributes
-----------
-
-.. attribute:: HttpResponse.content
-
- A normal Python string representing the content, encoded from a Unicode
- object if necessary.
-
-.. attribute:: HttpResponse.status_code
-
- The `HTTP Status code`_ for the response.
-
-Methods
--------
-
-.. method:: HttpResponse.__init__(content='', mimetype=None, status=200, content_type=DEFAULT_CONTENT_TYPE)
-
- Instantiates an ``HttpResponse`` object with the given page content (a
- string) and MIME type. The :setting:`DEFAULT_CONTENT_TYPE` is
- ``'text/html'``.
-
- ``content`` can be an iterator or a string. If it's an iterator, it should
- return strings, and those strings will be joined together to form the
- content of the response.
-
- ``status`` is the `HTTP Status code`_ for the response.
-
- ``content_type`` is an alias for ``mimetype``. Historically, this parameter
- was only called ``mimetype``, but since this is actually the value included
- in the HTTP ``Content-Type`` header, it can also include the character set
- encoding, which makes it more than just a MIME type specification.
- If ``mimetype`` is specified (not ``None``), that value is used.
- Otherwise, ``content_type`` is used. If neither is given, the
- :setting:`DEFAULT_CONTENT_TYPE` setting is used.
-
-.. method:: HttpResponse.__setitem__(header, value)
-
- Sets the given header name to the given value. Both ``header`` and
- ``value`` should be strings.
-
-.. method:: HttpResponse.__delitem__(header)
-
- Deletes the header with the given name. Fails silently if the header
- doesn't exist. Case-insensitive.
-
-.. method:: HttpResponse.__getitem__(header)
-
- Returns the value for the given header name. Case-insensitive.
-
-.. method:: HttpResponse.has_header(header)
-
- Returns ``True`` or ``False`` based on a case-insensitive check for a
- header with the given name.
-
-.. method:: HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None)
-
- Sets a cookie. The parameters are the same as in the `cookie Morsel`_
- object in the Python standard library.
-
- * ``max_age`` should be a number of seconds, or ``None`` (default) if
- the cookie should last only as long as the client's browser session.
- * ``expires`` should be a string in the format
- ``"Wdy, DD-Mon-YY HH:MM:SS GMT"``.
- * Use ``domain`` if you want to set a cross-domain cookie. For example,
- ``domain=".lawrence.com"`` will set a cookie that is readable by
- the domains www.lawrence.com, blogs.lawrence.com and
- calendars.lawrence.com. Otherwise, a cookie will only be readable by
- the domain that set it.
-
- .. _`cookie Morsel`: http://docs.python.org/library/cookie.html#Cookie.Morsel
-
-.. method:: HttpResponse.delete_cookie(key, path='/', domain=None)
-
- Deletes the cookie with the given key. Fails silently if the key doesn't
- exist.
-
- Due to the way cookies work, ``path`` and ``domain`` should be the same
- values you used in ``set_cookie()`` -- otherwise the cookie may not be
- deleted.
-
-.. method:: HttpResponse.write(content)
-
- This method makes an :class:`HttpResponse` instance a file-like object.
-
-.. method:: HttpResponse.flush()
-
- This method makes an :class:`HttpResponse` instance a file-like object.
-
-.. method:: HttpResponse.tell()
-
- This method makes an :class:`HttpResponse` instance a file-like object.
-
-.. _HTTP Status code: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10
-
-
-.. _ref-httpresponse-subclasses:
-
-HttpResponse subclasses
------------------------
-
-Django includes a number of ``HttpResponse`` subclasses that handle different
-types of HTTP responses. Like ``HttpResponse``, these subclasses live in
-:mod:`django.http`.
-
-.. class:: HttpResponseRedirect
-
- The constructor takes a single argument -- the path to redirect to. This
- can be a fully qualified URL (e.g. ``'http://www.yahoo.com/search/'``) or
- an absolute path with no domain (e.g. ``'/search/'``). Note that this
- returns an HTTP status code 302.
-
-.. class:: HttpResponsePermanentRedirect
-
- Like :class:`HttpResponseRedirect`, but it returns a permanent redirect
- (HTTP status code 301) instead of a "found" redirect (status code 302).
-
-.. class:: HttpResponseNotModified
-
- The constructor doesn't take any arguments. Use this to designate that a
- page hasn't been modified since the user's last request (status code 304).
-
-.. class:: HttpResponseBadRequest
-
- Acts just like :class:`HttpResponse` but uses a 400 status code.
-
-.. class:: HttpResponseNotFound
-
- Acts just like :class:`HttpResponse` but uses a 404 status code.
-
-.. class:: HttpResponseForbidden
-
- Acts just like :class:`HttpResponse` but uses a 403 status code.
-
-.. class:: HttpResponseNotAllowed
-
- Like :class:`HttpResponse`, but uses a 405 status code. Takes a single,
- required argument: a list of permitted methods (e.g. ``['GET', 'POST']``).
-
-.. class:: HttpResponseGone
-
- Acts just like :class:`HttpResponse` but uses a 410 status code.
-
-.. class:: HttpResponseServerError
-
- Acts just like :class:`HttpResponse` but uses a 500 status code.
diff --git a/parts/django/docs/ref/settings.txt b/parts/django/docs/ref/settings.txt
deleted file mode 100644
index ab1f28c..0000000
--- a/parts/django/docs/ref/settings.txt
+++ /dev/null
@@ -1,1836 +0,0 @@
-========
-Settings
-========
-
-.. contents::
- :local:
- :depth: 1
-
-Available settings
-==================
-
-Here's a full list of all available settings, in alphabetical order, and their
-default values.
-
-.. setting:: ABSOLUTE_URL_OVERRIDES
-
-ABSOLUTE_URL_OVERRIDES
-----------------------
-
-Default: ``{}`` (Empty dictionary)
-
-A dictionary mapping ``"app_label.model_name"`` strings to functions that take
-a model object and return its URL. This is a way of overriding
-``get_absolute_url()`` methods on a per-installation basis. Example::
-
- ABSOLUTE_URL_OVERRIDES = {
- 'blogs.weblog': lambda o: "/blogs/%s/" % o.slug,
- 'news.story': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
- }
-
-Note that the model name used in this setting should be all lower-case, regardless
-of the case of the actual model class name.
-
-.. setting:: ADMIN_FOR
-
-ADMIN_FOR
----------
-
-Default: ``()`` (Empty tuple)
-
-Used for admin-site settings modules, this should be a tuple of settings
-modules (in the format ``'foo.bar.baz'``) for which this site is an admin.
-
-The admin site uses this in its automatically-introspected documentation of
-models, views and template tags.
-
-.. setting:: ADMIN_MEDIA_PREFIX
-
-ADMIN_MEDIA_PREFIX
-------------------
-
-Default: ``'/media/'``
-
-The URL prefix for admin media -- CSS, JavaScript and images used by
-the Django administrative interface. Make sure to use a trailing
-slash, and to have this be different from the ``MEDIA_URL`` setting
-(since the same URL cannot be mapped onto two different sets of
-files).
-
-.. setting:: ADMINS
-
-ADMINS
-------
-
-Default: ``()`` (Empty tuple)
-
-A tuple that lists people who get code error notifications. When
-``DEBUG=False`` and a view raises an exception, Django will e-mail these people
-with the full exception information. Each member of the tuple should be a tuple
-of (Full name, e-mail address). Example::
-
- (('John', 'john@example.com'), ('Mary', 'mary@example.com'))
-
-Note that Django will e-mail *all* of these people whenever an error happens.
-See :doc:`/howto/error-reporting` for more information.
-
-.. setting:: ALLOWED_INCLUDE_ROOTS
-
-ALLOWED_INCLUDE_ROOTS
----------------------
-
-Default: ``()`` (Empty tuple)
-
-A tuple of strings representing allowed prefixes for the ``{% ssi %}`` template
-tag. This is a security measure, so that template authors can't access files
-that they shouldn't be accessing.
-
-For example, if ``ALLOWED_INCLUDE_ROOTS`` is ``('/home/html', '/var/www')``,
-then ``{% ssi /home/html/foo.txt %}`` would work, but ``{% ssi /etc/passwd %}``
-wouldn't.
-
-.. setting:: APPEND_SLASH
-
-APPEND_SLASH
-------------
-
-Default: ``True``
-
-When set to ``True``, if the request URL does not match any of the patterns
-in the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the
-same URL with a slash appended. Note that the redirect may cause any data
-submitted in a POST request to be lost.
-
-The ``APPEND_SLASH`` setting is only used if
-:class:`~django.middleware.common.CommonMiddleware` is installed
-(see :doc:`/topics/http/middleware`). See also :setting:`PREPEND_WWW`.
-
-.. setting:: AUTHENTICATION_BACKENDS
-
-AUTHENTICATION_BACKENDS
------------------------
-
-Default: ``('django.contrib.auth.backends.ModelBackend',)``
-
-A tuple of authentication backend classes (as strings) to use when attempting to
-authenticate a user. See the :doc:`authentication backends documentation
-</ref/authbackends>` for details.
-
-.. setting:: AUTH_PROFILE_MODULE
-
-AUTH_PROFILE_MODULE
--------------------
-
-Default: Not defined
-
-The site-specific user profile model used by this site. See
-:ref:`auth-profiles`.
-
-.. setting:: CACHE_BACKEND
-
-CACHE_BACKEND
--------------
-
-Default: ``'locmem://'``
-
-The cache backend to use. See :doc:`/topics/cache`.
-
-.. setting:: CACHE_MIDDLEWARE_ANONYMOUS_ONLY
-
-CACHE_MIDDLEWARE_ANONYMOUS_ONLY
--------------------------------
-
-Default: ``False``
-
-If the value of this setting is ``True``, only anonymous requests (i.e., not
-those made by a logged-in user) will be cached. Otherwise, the middleware
-caches every page that doesn't have GET or POST parameters.
-
-If you set the value of this setting to ``True``, you should make sure you've
-activated ``AuthenticationMiddleware``.
-
-See the :doc:`cache documentation </topics/cache>` for more information.
-
-.. setting:: CACHE_MIDDLEWARE_KEY_PREFIX
-
-CACHE_MIDDLEWARE_KEY_PREFIX
----------------------------
-
-Default: ``''`` (Empty string)
-
-The cache key prefix that the cache middleware should use. See
-:doc:`/topics/cache`.
-
-.. setting:: CACHE_MIDDLEWARE_SECONDS
-
-CACHE_MIDDLEWARE_SECONDS
-------------------------
-
-Default: ``600``
-
-The default number of seconds to cache a page when the caching middleware or
-``cache_page()`` decorator is used.
-
-.. setting:: CSRF_COOKIE_DOMAIN
-
-CSRF_COOKIE_DOMAIN
-------------------
-
-.. versionadded:: 1.2
-
-Default: ``None``
-
-The domain to be used when setting the CSRF cookie. This can be useful for
-allowing cross-subdomain requests to be exluded from the normal cross site
-request forgery protection. It should be set to a string such as
-``".lawrence.com"`` to allow a POST request from a form on one subdomain to be
-accepted by accepted by a view served from another subdomain.
-
-.. setting:: CSRF_COOKIE_NAME
-
-CSRF_COOKIE_NAME
-----------------
-
-.. versionadded:: 1.2
-
-Default: ``'csrftoken'``
-
-The name of the cookie to use for the CSRF authentication token. This can be whatever you
-want. See :doc:`/ref/contrib/csrf`.
-
-.. setting:: CSRF_FAILURE_VIEW
-
-CSRF_FAILURE_VIEW
------------------
-
-.. versionadded:: 1.2
-
-Default: ``'django.views.csrf.csrf_failure'``
-
-A dotted path to the view function to be used when an incoming request
-is rejected by the CSRF protection. The function should have this signature::
-
- def csrf_failure(request, reason="")
-
-where ``reason`` is a short message (intended for developers or logging, not for
-end users) indicating the reason the request was rejected. See
-:doc:`/ref/contrib/csrf`.
-
-
-.. setting:: DATABASES
-
-DATABASES
----------
-
-.. versionadded:: 1.2
-
-Default: ``{}`` (Empty dictionary)
-
-A dictionary containing the settings for all databases to be used with
-Django. It is a nested dictionary whose contents maps database aliases
-to a dictionary containing the options for an individual database.
-
-The :setting:`DATABASES` setting must configure a ``default`` database;
-any number of additional databases may also be specified.
-
-The simplest possible settings file is for a single-database setup using
-SQLite. This can be configured using the following::
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': 'mydatabase'
- }
- }
-
-For other database backends, or more complex SQLite configurations, other options
-will be required. The following inner options are available.
-
-.. setting:: ENGINE
-
-ENGINE
-~~~~~~
-
-Default: ``''`` (Empty string)
-
-The database backend to use. The built-in database backends are:
-
- * ``'django.db.backends.postgresql_psycopg2'``
- * ``'django.db.backends.postgresql'``
- * ``'django.db.backends.mysql'``
- * ``'django.db.backends.sqlite3'``
- * ``'django.db.backends.oracle'``
-
-You can use a database backend that doesn't ship with Django by setting
-``ENGINE`` to a fully-qualified path (i.e.
-``mypackage.backends.whatever``). Writing a whole new database backend from
-scratch is left as an exercise to the reader; see the other backends for
-examples.
-
-.. note::
- Prior to Django 1.2, you could use a short version of the backend name
- to reference the built-in database backends (e.g., you could use
- ``'sqlite3'`` to refer to the SQLite backend). This format has been
- deprecated, and will be removed in Django 1.4.
-
-.. setting:: HOST
-
-HOST
-~~~~
-
-Default: ``''`` (Empty string)
-
-Which host to use when connecting to the database. An empty string means
-localhost. Not used with SQLite.
-
-If this value starts with a forward slash (``'/'``) and you're using MySQL,
-MySQL will connect via a Unix socket to the specified socket. For example::
-
- "HOST": '/var/run/mysql'
-
-If you're using MySQL and this value *doesn't* start with a forward slash, then
-this value is assumed to be the host.
-
-If you're using PostgreSQL, an empty string means to use a Unix domain socket
-for the connection, rather than a network connection to localhost. If you
-explicitly need to use a TCP/IP connection on the local machine with
-PostgreSQL, specify ``localhost`` here.
-
-.. setting:: NAME
-
-NAME
-~~~~
-
-Default: ``''`` (Empty string)
-
-The name of the database to use. For SQLite, it's the full path to the database
-file. When specifying the path, always use forward slashes, even on Windows
-(e.g. ``C:/homes/user/mysite/sqlite3.db``).
-
-.. setting:: OPTIONS
-
-OPTIONS
-~~~~~~~
-
-Default: ``{}`` (Empty dictionary)
-
-Extra parameters to use when connecting to the database. Available parameters
-vary depending on your database backend.
-
-Some information on available parameters can be found in the
-:doc:`Database Backends </ref/databases>` documentation. For more information,
-consult your backend module's own documentation.
-
-.. setting:: PASSWORD
-
-PASSWORD
-~~~~~~~~
-
-Default: ``''`` (Empty string)
-
-The password to use when connecting to the database. Not used with SQLite.
-
-.. setting:: PORT
-
-PORT
-~~~~
-
-Default: ``''`` (Empty string)
-
-The port to use when connecting to the database. An empty string means the
-default port. Not used with SQLite.
-
-.. setting:: USER
-
-USER
-~~~~
-
-Default: ``''`` (Empty string)
-
-The username to use when connecting to the database. Not used with SQLite.
-
-.. setting:: TEST_CHARSET
-
-TEST_CHARSET
-~~~~~~~~~~~~
-
-Default: ``None``
-
-The character set encoding used to create the test database. The value of this
-string is passed directly through to the database, so its format is
-backend-specific.
-
-Supported for the PostgreSQL_ (``postgresql``, ``postgresql_psycopg2``) and
-MySQL_ (``mysql``) backends.
-
-.. _PostgreSQL: http://www.postgresql.org/docs/8.2/static/multibyte.html
-.. _MySQL: http://dev.mysql.com/doc/refman/5.0/en/charset-database.html
-
-.. setting:: TEST_COLLATION
-
-TEST_COLLATION
-~~~~~~~~~~~~~~
-
-Default: ``None``
-
-The collation order to use when creating the test database. This value is
-passed directly to the backend, so its format is backend-specific.
-
-Only supported for the ``mysql`` backend (see the `MySQL manual`_ for details).
-
-.. _MySQL manual: MySQL_
-
-.. setting:: TEST_DEPENDENCIES
-
-TEST_DEPENDENCIES
-~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2.4
-
-Default: ``['default']``, for all databases other than ``default``,
-which has no dependencies.
-
-The creation-order dependencies of the database. See the documentation
-on :ref:`controlling the creation order of test databases
-<topics-testing-creation-dependencies>` for details.
-
-.. setting:: TEST_MIRROR
-
-TEST_MIRROR
-~~~~~~~~~~~
-
-Default: ``None``
-
-The alias of the database that this database should mirror during
-testing.
-
-This setting exists to allow for testing of master/slave
-configurations of multiple databases. See the documentation on
-:ref:`testing master/slave configurations
-<topics-testing-masterslave>` for details.
-
-.. setting:: TEST_NAME
-
-TEST_NAME
-~~~~~~~~~
-
-Default: ``None``
-
-The name of database to use when running the test suite.
-
-If the default value (``None``) is used with the SQLite database engine, the
-tests will use a memory resident database. For all other database engines the
-test database will use the name ``'test_' + DATABASE_NAME``.
-
-See :doc:`/topics/testing`.
-
-.. setting:: TEST_USER
-
-TEST_USER
-~~~~~~~~~
-
-Default: ``None``
-
-This is an Oracle-specific setting.
-
-The username to use when connecting to the Oracle database that will be used
-when running tests.
-
-.. setting:: DATABASE_ROUTERS
-
-DATABASE_ROUTERS
-----------------
-
-.. versionadded:: 1.2
-
-Default: ``[]`` (Empty list)
-
-The list of routers that will be used to determine which database
-to use when performing a database queries.
-
-See the documentation on :ref:`automatic database routing in multi
-database configurations <topics-db-multi-db-routing>`.
-
-.. setting:: DATE_FORMAT
-
-DATE_FORMAT
------------
-
-Default: ``'N j, Y'`` (e.g. ``Feb. 4, 2003``)
-
-The default formatting to use for displaying date fields in any part of the
-system. Note that if :setting:`USE_L10N` is set to ``True``, then the
-locale-dictated format has higher precedence and will be applied instead. See
-:tfilter:`allowed date format strings <date>`.
-
-.. versionchanged:: 1.2
- This setting can now be overriden by setting ``USE_L10N`` to ``True``.
-
-See also ``DATETIME_FORMAT``, ``TIME_FORMAT`` and ``SHORT_DATE_FORMAT``.
-
-.. setting:: DATE_INPUT_FORMATS
-
-DATE_INPUT_FORMATS
-------------------
-
-.. versionadded:: 1.2
-
-Default::
-
- ('%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
- '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y',
- '%B %d, %Y', '%d %B %Y', '%d %B, %Y')
-
-A tuple of formats that will be accepted when inputting data on a date
-field. Formats will be tried in order, using the first valid.
-Note that these format strings are specified in Python's datetime_ module
-syntax, that is different from the one used by Django for formatting dates
-to be displayed.
-
-See also ``DATETIME_INPUT_FORMATS`` and ``TIME_INPUT_FORMATS``.
-
-.. _datetime: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
-
-.. setting:: DATETIME_FORMAT
-
-DATETIME_FORMAT
----------------
-
-Default: ``'N j, Y, P'`` (e.g. ``Feb. 4, 2003, 4 p.m.``)
-
-The default formatting to use for displaying datetime fields in any part of the
-system. Note that if :setting:`USE_L10N` is set to ``True``, then the
-locale-dictated format has higher precedence and will be applied instead. See
-:tfilter:`allowed date format strings <date>`.
-
-.. versionchanged:: 1.2
- This setting can now be overriden by setting ``USE_L10N`` to ``True``.
-
-See also ``DATE_FORMAT``, ``TIME_FORMAT`` and ``SHORT_DATETIME_FORMAT``.
-
-.. setting:: DATETIME_INPUT_FORMATS
-
-DATETIME_INPUT_FORMATS
-----------------------
-
-.. versionadded:: 1.2
-
-Default::
-
- ('%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M', '%Y-%m-%d',
- '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M', '%m/%d/%Y',
- '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M', '%m/%d/%y')
-
-A tuple of formats that will be accepted when inputting data on a datetime
-field. Formats will be tried in order, using the first valid.
-Note that these format strings are specified in Python's datetime_ module
-syntax, that is different from the one used by Django for formatting dates
-to be displayed.
-
-See also ``DATE_INPUT_FORMATS`` and ``TIME_INPUT_FORMATS``.
-
-.. _datetime: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
-
-.. setting:: DEBUG
-
-DEBUG
------
-
-Default: ``False``
-
-A boolean that turns on/off debug mode.
-
-If you define custom settings, `django/views/debug.py`_ has a ``HIDDEN_SETTINGS``
-regular expression which will hide from the DEBUG view anything that contains
-``'SECRET'``, ``'PASSWORD'``, ``'PROFANITIES'``, or ``'SIGNATURE'``. This allows
-untrusted users to be able to give backtraces without seeing sensitive (or
-offensive) settings.
-
-Still, note that there are always going to be sections of your debug output that
-are inappropriate for public consumption. File paths, configuration options, and
-the like all give attackers extra information about your server.
-
-It is also important to remember that when running with ``DEBUG`` turned on, Django
-will remember every SQL query it executes. This is useful when you are debugging,
-but on a production server, it will rapidly consume memory.
-
-Never deploy a site into production with ``DEBUG`` turned on.
-
-.. _django/views/debug.py: http://code.djangoproject.com/browser/django/trunk/django/views/debug.py
-
-DEBUG_PROPAGATE_EXCEPTIONS
---------------------------
-
-.. versionadded:: 1.0
-
-Default: ``False``
-
-If set to True, Django's normal exception handling of view functions
-will be suppressed, and exceptions will propagate upwards. This can
-be useful for some test setups, and should never be used on a live
-site.
-
-.. setting:: DECIMAL_SEPARATOR
-
-DECIMAL_SEPARATOR
------------------
-
-.. versionadded:: 1.2
-
-Default: ``'.'`` (Dot)
-
-Default decimal separator used when formatting decimal numbers.
-
-.. setting:: DEFAULT_CHARSET
-
-DEFAULT_CHARSET
----------------
-
-Default: ``'utf-8'``
-
-Default charset to use for all ``HttpResponse`` objects, if a MIME type isn't
-manually specified. Used with ``DEFAULT_CONTENT_TYPE`` to construct the
-``Content-Type`` header.
-
-.. setting:: DEFAULT_CONTENT_TYPE
-
-DEFAULT_CONTENT_TYPE
---------------------
-
-Default: ``'text/html'``
-
-Default content type to use for all ``HttpResponse`` objects, if a MIME type
-isn't manually specified. Used with ``DEFAULT_CHARSET`` to construct the
-``Content-Type`` header.
-
-.. setting:: DEFAULT_FILE_STORAGE
-
-DEFAULT_FILE_STORAGE
---------------------
-
-Default: :class:`django.core.files.storage.FileSystemStorage`
-
-Default file storage class to be used for any file-related operations that don't
-specify a particular storage system. See :doc:`/topics/files`.
-
-.. setting:: DEFAULT_FROM_EMAIL
-
-DEFAULT_FROM_EMAIL
-------------------
-
-Default: ``'webmaster@localhost'``
-
-Default e-mail address to use for various automated correspondence from the
-site manager(s).
-
-.. setting:: DEFAULT_INDEX_TABLESPACE
-
-DEFAULT_INDEX_TABLESPACE
-------------------------
-
-.. versionadded:: 1.0
-
-Default: ``''`` (Empty string)
-
-Default tablespace to use for indexes on fields that don't specify
-one, if the backend supports it.
-
-.. setting:: DEFAULT_TABLESPACE
-
-DEFAULT_TABLESPACE
-------------------
-
-.. versionadded:: 1.0
-
-Default: ``''`` (Empty string)
-
-Default tablespace to use for models that don't specify one, if the
-backend supports it.
-
-.. setting:: DISALLOWED_USER_AGENTS
-
-DISALLOWED_USER_AGENTS
-----------------------
-
-Default: ``()`` (Empty tuple)
-
-List of compiled regular expression objects representing User-Agent strings that
-are not allowed to visit any page, systemwide. Use this for bad robots/crawlers.
-This is only used if ``CommonMiddleware`` is installed (see
-:doc:`/topics/http/middleware`).
-
-.. setting:: EMAIL_BACKEND
-
-EMAIL_BACKEND
--------------
-
-.. versionadded:: 1.2
-
-Default: ``'django.core.mail.backends.smtp.EmailBackend'``
-
-The backend to use for sending emails. For the list of available backends see
-:doc:`/topics/email`.
-
-.. setting:: EMAIL_FILE_PATH
-
-EMAIL_FILE_PATH
----------------
-
-.. versionadded:: 1.2
-
-Default: Not defined
-
-The directory used by the ``file`` email backend to store output files.
-
-.. setting:: EMAIL_HOST
-
-EMAIL_HOST
-----------
-
-Default: ``'localhost'``
-
-The host to use for sending e-mail.
-
-See also ``EMAIL_PORT``.
-
-.. setting:: EMAIL_HOST_PASSWORD
-
-EMAIL_HOST_PASSWORD
--------------------
-
-Default: ``''`` (Empty string)
-
-Password to use for the SMTP server defined in ``EMAIL_HOST``. This setting is
-used in conjunction with ``EMAIL_HOST_USER`` when authenticating to the SMTP
-server. If either of these settings is empty, Django won't attempt
-authentication.
-
-See also ``EMAIL_HOST_USER``.
-
-.. setting:: EMAIL_HOST_USER
-
-EMAIL_HOST_USER
----------------
-
-Default: ``''`` (Empty string)
-
-Username to use for the SMTP server defined in ``EMAIL_HOST``. If empty,
-Django won't attempt authentication.
-
-See also ``EMAIL_HOST_PASSWORD``.
-
-.. setting:: EMAIL_PORT
-
-EMAIL_PORT
-----------
-
-Default: ``25``
-
-Port to use for the SMTP server defined in ``EMAIL_HOST``.
-
-.. setting:: EMAIL_SUBJECT_PREFIX
-
-EMAIL_SUBJECT_PREFIX
---------------------
-
-Default: ``'[Django] '``
-
-Subject-line prefix for e-mail messages sent with ``django.core.mail.mail_admins``
-or ``django.core.mail.mail_managers``. You'll probably want to include the
-trailing space.
-
-.. setting:: EMAIL_USE_TLS
-
-EMAIL_USE_TLS
--------------
-
-.. versionadded:: 1.0
-
-Default: ``False``
-
-Whether to use a TLS (secure) connection when talking to the SMTP server.
-
-.. setting:: FILE_CHARSET
-
-FILE_CHARSET
-------------
-
-.. versionadded:: 1.0
-
-Default: ``'utf-8'``
-
-The character encoding used to decode any files read from disk. This includes
-template files and initial SQL data files.
-
-.. setting:: FILE_UPLOAD_HANDLERS
-
-FILE_UPLOAD_HANDLERS
---------------------
-
-.. versionadded:: 1.0
-
-Default::
-
- ("django.core.files.uploadhandler.MemoryFileUploadHandler",
- "django.core.files.uploadhandler.TemporaryFileUploadHandler",)
-
-A tuple of handlers to use for uploading. See :doc:`/topics/files` for details.
-
-.. setting:: FILE_UPLOAD_MAX_MEMORY_SIZE
-
-FILE_UPLOAD_MAX_MEMORY_SIZE
----------------------------
-
-.. versionadded:: 1.0
-
-Default: ``2621440`` (i.e. 2.5 MB).
-
-The maximum size (in bytes) that an upload will be before it gets streamed to
-the file system. See :doc:`/topics/files` for details.
-
-.. setting:: FILE_UPLOAD_PERMISSIONS
-
-FILE_UPLOAD_PERMISSIONS
------------------------
-
-Default: ``None``
-
-The numeric mode (i.e. ``0644``) to set newly uploaded files to. For
-more information about what these modes mean, see the `documentation for
-os.chmod`_
-
-If this isn't given or is ``None``, you'll get operating-system
-dependent behavior. On most platforms, temporary files will have a mode
-of ``0600``, and files saved from memory will be saved using the
-system's standard umask.
-
-.. warning::
-
- **Always prefix the mode with a 0.**
-
- If you're not familiar with file modes, please note that the leading
- ``0`` is very important: it indicates an octal number, which is the
- way that modes must be specified. If you try to use ``644``, you'll
- get totally incorrect behavior.
-
-
-.. _documentation for os.chmod: http://docs.python.org/library/os.html#os.chmod
-
-.. setting:: FILE_UPLOAD_TEMP_DIR
-
-FILE_UPLOAD_TEMP_DIR
---------------------
-
-.. versionadded:: 1.0
-
-Default: ``None``
-
-The directory to store data temporarily while uploading files. If ``None``,
-Django will use the standard temporary directory for the operating system. For
-example, this will default to '/tmp' on \*nix-style operating systems.
-
-See :doc:`/topics/files` for details.
-
-.. setting:: FIRST_DAY_OF_WEEK
-
-FIRST_DAY_OF_WEEK
------------------
-
-.. versionadded:: 1.2
-
-Default: ``0`` (Sunday)
-
-Number representing the first day of the week. This is especially useful
-when displaying a calendar. This value is only used when not using
-format internationalization, or when a format cannot be found for the
-current locale.
-
-The value must be an integer from 0 to 6, where 0 means Sunday, 1 means
-Monday and so on.
-
-.. setting:: FIXTURE_DIRS
-
-FIXTURE_DIRS
--------------
-
-Default: ``()`` (Empty tuple)
-
-List of locations of the fixture data files, in search order. Note that
-these paths should use Unix-style forward slashes, even on Windows. See
-:doc:`/topics/testing`.
-
-FORCE_SCRIPT_NAME
-------------------
-
-Default: ``None``
-
-If not ``None``, this will be used as the value of the ``SCRIPT_NAME``
-environment variable in any HTTP request. This setting can be used to override
-the server-provided value of ``SCRIPT_NAME``, which may be a rewritten version
-of the preferred value or not supplied at all.
-
-.. setting:: FORMAT_MODULE_PATH
-
-FORMAT_MODULE_PATH
-------------------
-
-.. versionadded:: 1.2
-
-Default: ``None``
-
-A full Python path to a Python package that contains format definitions for
-project locales. If not ``None``, Django will check for a ``formats.py``
-file, under the directory named as the current locale, and will use the
-formats defined on this file.
-
-For example, if ``FORMAT_MODULE_PATH`` is set to ``mysite.formats``, and
-current language is ``en`` (English), Django will expect a directory tree
-like::
-
- mysite/
- formats/
- __init__.py
- en/
- __init__.py
- formats.py
-
-Available formats are ``DATE_FORMAT``, ``TIME_FORMAT``, ``DATETIME_FORMAT``,
-``YEAR_MONTH_FORMAT``, ``MONTH_DAY_FORMAT``, ``SHORT_DATE_FORMAT``,
-``SHORT_DATETIME_FORMAT``, ``FIRST_DAY_OF_WEEK``, ``DECIMAL_SEPARATOR``,
-``THOUSAND_SEPARATOR`` and ``NUMBER_GROUPING``.
-
-.. setting:: IGNORABLE_404_ENDS
-
-IGNORABLE_404_ENDS
-------------------
-
-Default: ``('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')``
-
-See also ``IGNORABLE_404_STARTS`` and ``Error reporting via e-mail``.
-
-.. setting:: IGNORABLE_404_STARTS
-
-IGNORABLE_404_STARTS
---------------------
-
-Default: ``('/cgi-bin/', '/_vti_bin', '/_vti_inf')``
-
-A tuple of strings that specify beginnings of URLs that should be ignored by
-the 404 e-mailer. See ``SEND_BROKEN_LINK_EMAILS``, ``IGNORABLE_404_ENDS`` and
-the :doc:`/howto/error-reporting`.
-
-.. setting:: INSTALLED_APPS
-
-INSTALLED_APPS
---------------
-
-Default: ``()`` (Empty tuple)
-
-A tuple of strings designating all applications that are enabled in this Django
-installation. Each string should be a full Python path to a Python package that
-contains a Django application, as created by :djadmin:`django-admin.py startapp
-<startapp>`.
-
-.. admonition:: App names must be unique
-
- The application names (that is, the final dotted part of the
- path to the module containing ``models.py``) defined in
- :setting:`INSTALLED_APPS` *must* be unique. For example, you can't
- include both ``django.contrib.auth`` and ``myproject.auth`` in
- INSTALLED_APPS.
-
-.. setting:: INTERNAL_IPS
-
-INTERNAL_IPS
-------------
-
-Default: ``()`` (Empty tuple)
-
-A tuple of IP addresses, as strings, that:
-
- * See debug comments, when ``DEBUG`` is ``True``
- * Receive X headers if the ``XViewMiddleware`` is installed (see
- :doc:`/topics/http/middleware`)
-
-.. setting:: LANGUAGE_CODE
-
-LANGUAGE_CODE
--------------
-
-Default: ``'en-us'``
-
-A string representing the language code for this installation. This should be in
-standard :term:`language format<language code>`. For example, U.S. English is
-``"en-us"``. See :doc:`/topics/i18n/index`.
-
-.. setting:: LANGUAGE_COOKIE_NAME
-
-LANGUAGE_COOKIE_NAME
---------------------
-
-.. versionadded:: 1.0
-
-Default: ``'django_language'``
-
-The name of the cookie to use for the language cookie. This can be whatever you
-want (but should be different from ``SESSION_COOKIE_NAME``). See
-:doc:`/topics/i18n/index`.
-
-.. setting:: LANGUAGES
-
-LANGUAGES
----------
-
-Default: A tuple of all available languages. This list is continually growing
-and including a copy here would inevitably become rapidly out of date. You can
-see the current list of translated languages by looking in
-``django/conf/global_settings.py`` (or view the `online source`_).
-
-.. _online source: http://code.djangoproject.com/browser/django/trunk/django/conf/global_settings.py
-
-The list is a tuple of two-tuples in the format ``(language code, language
-name)``, the ``language code`` part should be a
-:term:`language name<language code>` -- for example, ``('ja', 'Japanese')``.
-This specifies which languages are available for language selection. See
-:doc:`/topics/i18n/index`.
-
-Generally, the default value should suffice. Only set this setting if you want
-to restrict language selection to a subset of the Django-provided languages.
-
-If you define a custom ``LANGUAGES`` setting, it's OK to mark the languages as
-translation strings (as in the default value referred to above) -- but use a
-"dummy" ``gettext()`` function, not the one in ``django.utils.translation``.
-You should *never* import ``django.utils.translation`` from within your
-settings file, because that module in itself depends on the settings, and that
-would cause a circular import.
-
-The solution is to use a "dummy" ``gettext()`` function. Here's a sample
-settings file::
-
- gettext = lambda s: s
-
- LANGUAGES = (
- ('de', gettext('German')),
- ('en', gettext('English')),
- )
-
-With this arrangement, ``django-admin.py makemessages`` will still find and
-mark these strings for translation, but the translation won't happen at
-runtime -- so you'll have to remember to wrap the languages in the *real*
-``gettext()`` in any code that uses ``LANGUAGES`` at runtime.
-
-.. setting:: LOCALE_PATHS
-
-LOCALE_PATHS
-------------
-
-Default: ``()`` (Empty tuple)
-
-A tuple of directories where Django looks for translation files.
-See :ref:`using-translations-in-your-own-projects`.
-
-.. setting:: LOGIN_REDIRECT_URL
-
-LOGIN_REDIRECT_URL
-------------------
-
-.. versionadded:: 1.0
-
-Default: ``'/accounts/profile/'``
-
-The URL where requests are redirected after login when the
-``contrib.auth.login`` view gets no ``next`` parameter.
-
-This is used by the :func:`~django.contrib.auth.decorators.login_required`
-decorator, for example.
-
-.. setting:: LOGIN_URL
-
-LOGIN_URL
----------
-
-.. versionadded:: 1.0
-
-Default: ``'/accounts/login/'``
-
-The URL where requests are redirected for login, especially when using the
-:func:`~django.contrib.auth.decorators.login_required` decorator.
-
-.. setting:: LOGOUT_URL
-
-LOGOUT_URL
-----------
-
-.. versionadded:: 1.0
-
-Default: ``'/accounts/logout/'``
-
-LOGIN_URL counterpart.
-
-.. setting:: MANAGERS
-
-MANAGERS
---------
-
-Default: ``()`` (Empty tuple)
-
-A tuple in the same format as ``ADMINS`` that specifies who should get
-broken-link notifications when ``SEND_BROKEN_LINK_EMAILS=True``.
-
-.. setting:: MEDIA_ROOT
-
-MEDIA_ROOT
-----------
-
-Default: ``''`` (Empty string)
-
-Absolute path to the directory that holds media for this installation.
-Example: ``"/home/media/media.lawrence.com/"`` See also ``MEDIA_URL``.
-
-.. setting:: MEDIA_URL
-
-MEDIA_URL
----------
-
-Default: ``''`` (Empty string)
-
-URL that handles the media served from ``MEDIA_ROOT``.
-Example: ``"http://media.lawrence.com"``
-
-Note that this should have a trailing slash if it has a path component.
-
-Good: ``"http://www.example.com/static/"``
-Bad: ``"http://www.example.com/static"``
-
-.. setting:: MIDDLEWARE_CLASSES
-
-MESSAGE_LEVEL
--------------
-
-.. versionadded:: 1.2
-
-Default: `messages.INFO`
-
-Sets the minimum message level that will be recorded by the messages
-framework. See the :doc:`messages documentation </ref/contrib/messages>` for
-more details.
-
-MESSAGE_STORAGE
----------------
-
-.. versionadded:: 1.2
-
-Default: ``'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'``
-
-Controls where Django stores message data. See the
-:doc:`messages documentation </ref/contrib/messages>` for more details.
-
-MESSAGE_TAGS
-------------
-
-.. versionadded:: 1.2
-
-Default::
-
- {messages.DEBUG: 'debug',
- messages.INFO: 'info',
- messages.SUCCESS: 'success',
- messages.WARNING: 'warning',
- messages.ERROR: 'error',}
-
-Sets the mapping of message levels to message tags. See the
-:doc:`messages documentation </ref/contrib/messages>` for more details.
-
-MIDDLEWARE_CLASSES
-------------------
-
-Default::
-
- ('django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',)
-
-A tuple of middleware classes to use. See :doc:`/topics/http/middleware`.
-
-.. versionchanged:: 1.2
- ``'django.contrib.messages.middleware.MessageMiddleware'`` was added to the
- default. For more information, see the :doc:`messages documentation
- </ref/contrib/messages>`.
-
-.. setting:: MONTH_DAY_FORMAT
-
-MONTH_DAY_FORMAT
-----------------
-
-Default: ``'F j'``
-
-The default formatting to use for date fields on Django admin change-list
-pages -- and, possibly, by other parts of the system -- in cases when only the
-month and day are displayed.
-
-For example, when a Django admin change-list page is being filtered by a date
-drilldown, the header for a given day displays the day and month. Different
-locales have different formats. For example, U.S. English would say
-"January 1," whereas Spanish might say "1 Enero."
-
-See :tfilter:`allowed date format strings <date>`. See also ``DATE_FORMAT``,
-``DATETIME_FORMAT``, ``TIME_FORMAT`` and ``YEAR_MONTH_FORMAT``.
-
-.. setting:: NUMBER_GROUPING
-
-NUMBER_GROUPING
-----------------
-
-.. versionadded:: 1.2
-
-Default: ``0``
-
-Number of digits grouped together on the integer part of a number. Common use
-is to display a thousand separator. If this setting is ``0``, then, no grouping
-will be applied to the number. If this setting is greater than ``0`` then the
-setting :setting:`THOUSAND_SEPARATOR` will be used as the separator between those
-groups.
-
-See also :setting:`THOUSAND_SEPARATOR` and :setting:`USE_THOUSAND_SEPARATOR`.
-
-.. setting:: PASSWORD_RESET_TIMEOUT_DAYS
-
-PASSWORD_RESET_TIMEOUT_DAYS
----------------------------
-
-Default: ``3``
-
-The number of days a password reset link is valid for. Used by the
-:mod:`django.contrib.auth` password reset mechanism.
-
-.. setting:: PREPEND_WWW
-
-PREPEND_WWW
------------
-
-Default: ``False``
-
-Whether to prepend the "www." subdomain to URLs that don't have it. This is only
-used if :class:`~django.middleware.common.CommonMiddleware` is installed
-(see :doc:`/topics/http/middleware`). See also :setting:`APPEND_SLASH`.
-
-.. setting:: PROFANITIES_LIST
-
-PROFANITIES_LIST
-----------------
-
-A tuple of profanities, as strings, that will trigger a validation error when
-the ``hasNoProfanities`` validator is called.
-
-We don't list the default values here, because that would be profane. To see
-the default values, see the file `django/conf/global_settings.py`_.
-
-.. _django/conf/global_settings.py: http://code.djangoproject.com/browser/django/trunk/django/conf/global_settings.py
-
-.. setting:: RESTRUCTUREDTEXT_FILTER_SETTINGS
-
-RESTRUCTUREDTEXT_FILTER_SETTINGS
---------------------------------
-
-Default: ``{}``
-
-A dictionary containing settings for the ``restructuredtext`` markup filter from
-the :doc:`django.contrib.markup application </ref/contrib/markup>`. They override
-the default writer settings. See the Docutils restructuredtext `writer settings
-docs`_ for details.
-
-.. _writer settings docs: http://docutils.sourceforge.net/docs/user/config.html#html4css1-writer
-
-.. setting:: ROOT_URLCONF
-
-ROOT_URLCONF
-------------
-
-Default: Not defined
-
-A string representing the full Python import path to your root URLconf. For example:
-``"mydjangoapps.urls"``. Can be overridden on a per-request basis by
-setting the attribute ``urlconf`` on the incoming ``HttpRequest``
-object. See :ref:`how-django-processes-a-request` for details.
-
-.. setting:: SECRET_KEY
-
-SECRET_KEY
-----------
-
-Default: ``''`` (Empty string)
-
-A secret key for this particular Django installation. Used to provide a seed in
-secret-key hashing algorithms. Set this to a random string -- the longer, the
-better. ``django-admin.py startproject`` creates one automatically.
-
-.. setting:: SEND_BROKEN_LINK_EMAILS
-
-SEND_BROKEN_LINK_EMAILS
------------------------
-
-Default: ``False``
-
-Whether to send an e-mail to the ``MANAGERS`` each time somebody visits a
-Django-powered page that is 404ed with a non-empty referer (i.e., a broken
-link). This is only used if ``CommonMiddleware`` is installed (see
-:doc:`/topics/http/middleware`. See also ``IGNORABLE_404_STARTS``,
-``IGNORABLE_404_ENDS`` and :doc:`/howto/error-reporting`.
-
-.. setting:: SERIALIZATION_MODULES
-
-SERIALIZATION_MODULES
----------------------
-
-Default: Not defined.
-
-A dictionary of modules containing serializer definitions (provided as
-strings), keyed by a string identifier for that serialization type. For
-example, to define a YAML serializer, use::
-
- SERIALIZATION_MODULES = { 'yaml' : 'path.to.yaml_serializer' }
-
-.. setting:: SERVER_EMAIL
-
-SERVER_EMAIL
-------------
-
-Default: ``'root@localhost'``
-
-The e-mail address that error messages come from, such as those sent to
-``ADMINS`` and ``MANAGERS``.
-
-.. setting:: SESSION_COOKIE_AGE
-
-SESSION_COOKIE_AGE
-------------------
-
-Default: ``1209600`` (2 weeks, in seconds)
-
-The age of session cookies, in seconds. See :doc:`/topics/http/sessions`.
-
-.. setting:: SESSION_COOKIE_DOMAIN
-
-SESSION_COOKIE_DOMAIN
----------------------
-
-Default: ``None``
-
-The domain to use for session cookies. Set this to a string such as
-``".lawrence.com"`` for cross-domain cookies, or use ``None`` for a standard
-domain cookie. See the :doc:`/topics/http/sessions`.
-
-.. setting:: SESSION_COOKIE_NAME
-
-SESSION_COOKIE_NAME
--------------------
-
-Default: ``'sessionid'``
-
-The name of the cookie to use for sessions. This can be whatever you want (but
-should be different from ``LANGUAGE_COOKIE_NAME``). See the :doc:`/topics/http/sessions`.
-
-.. setting:: SESSION_COOKIE_PATH
-
-SESSION_COOKIE_PATH
--------------------
-
-.. versionadded:: 1.0
-
-Default: ``'/'``
-
-The path set on the session cookie. This should either match the URL path of your
-Django installation or be parent of that path.
-
-This is useful if you have multiple Django instances running under the same
-hostname. They can use different cookie paths, and each instance will only see
-its own session cookie.
-
-.. setting:: SESSION_COOKIE_SECURE
-
-SESSION_COOKIE_SECURE
----------------------
-
-Default: ``False``
-
-Whether to use a secure cookie for the session cookie. If this is set to
-``True``, the cookie will be marked as "secure," which means browsers may
-ensure that the cookie is only sent under an HTTPS connection.
-See the :doc:`/topics/http/sessions`.
-
-.. setting:: SESSION_ENGINE
-
-SESSION_ENGINE
---------------
-
-.. versionadded:: 1.0
-
-.. versionchanged:: 1.1
- The ``cached_db`` backend was added
-
-Default: ``django.contrib.sessions.backends.db``
-
-Controls where Django stores session data. Valid values are:
-
- * ``'django.contrib.sessions.backends.db'``
- * ``'django.contrib.sessions.backends.file'``
- * ``'django.contrib.sessions.backends.cache'``
- * ``'django.contrib.sessions.backends.cached_db'``
-
-See :doc:`/topics/http/sessions`.
-
-.. setting:: SESSION_EXPIRE_AT_BROWSER_CLOSE
-
-SESSION_EXPIRE_AT_BROWSER_CLOSE
--------------------------------
-
-Default: ``False``
-
-Whether to expire the session when the user closes his or her browser.
-See the :doc:`/topics/http/sessions`.
-
-.. setting:: SESSION_FILE_PATH
-
-SESSION_FILE_PATH
------------------
-
-.. versionadded:: 1.0
-
-Default: ``None``
-
-If you're using file-based session storage, this sets the directory in
-which Django will store session data. See :doc:`/topics/http/sessions`. When
-the default value (``None``) is used, Django will use the standard temporary
-directory for the system.
-
-.. setting:: SESSION_SAVE_EVERY_REQUEST
-
-SESSION_SAVE_EVERY_REQUEST
---------------------------
-
-Default: ``False``
-
-Whether to save the session data on every request. See
-:doc:`/topics/http/sessions`.
-
-.. setting:: SHORT_DATE_FORMAT
-
-SHORT_DATE_FORMAT
------------------
-
-.. versionadded:: 1.2
-
-Default: ``m/d/Y`` (e.g. ``12/31/2003``)
-
-An available formatting that can be used for displaying date fields on
-templates. Note that if :setting:`USE_L10N` is set to ``True``, then the
-corresponding locale-dictated format has higher precedence and will be applied.
-See :tfilter:`allowed date format strings <date>`.
-
-See also ``DATE_FORMAT`` and ``SHORT_DATETIME_FORMAT``.
-
-.. setting:: SHORT_DATETIME_FORMAT
-
-SHORT_DATETIME_FORMAT
----------------------
-
-.. versionadded:: 1.2
-
-Default: ``m/d/Y P`` (e.g. ``12/31/2003 4 p.m.``)
-
-An available formatting that can be used for displaying datetime fields on
-templates. Note that if :setting:`USE_L10N` is set to ``True``, then the
-corresponding locale-dictated format has higher precedence and will be applied.
-See :tfilter:`allowed date format strings <date>`.
-
-See also ``DATE_FORMAT`` and ``SHORT_DATETIME_FORMAT``.
-
-.. setting:: SITE_ID
-
-SITE_ID
--------
-
-Default: Not defined
-
-The ID, as an integer, of the current site in the ``django_site`` database
-table. This is used so that application data can hook into specific site(s)
-and a single database can manage content for multiple sites.
-
-See :doc:`/ref/contrib/sites`.
-
-.. _site framework docs: ../sites/
-
-.. setting:: TEMPLATE_CONTEXT_PROCESSORS
-
-TEMPLATE_CONTEXT_PROCESSORS
----------------------------
-
-Default::
-
- ("django.contrib.auth.context_processors.auth",
- "django.core.context_processors.debug",
- "django.core.context_processors.i18n",
- "django.core.context_processors.media",
- "django.contrib.messages.context_processors.messages")
-
-A tuple of callables that are used to populate the context in ``RequestContext``.
-These callables take a request object as their argument and return a dictionary
-of items to be merged into the context.
-
-.. versionchanged:: 1.2
- ``"django.contrib.messages.context_processors.messages"`` was added to the
- default. For more information, see the :doc:`messages documentation
- </ref/contrib/messages>`.
-
-.. versionchanged:: 1.2
- The auth context processor was moved in this release from its old location
- ``django.core.context_processors.auth`` to
- ``django.contrib.auth.context_processors.auth``.
-
-.. setting:: TEMPLATE_DEBUG
-
-TEMPLATE_DEBUG
---------------
-
-Default: ``False``
-
-A boolean that turns on/off template debug mode. If this is ``True``, the fancy
-error page will display a detailed report for any ``TemplateSyntaxError``. This
-report contains the relevant snippet of the template, with the appropriate line
-highlighted.
-
-Note that Django only displays fancy error pages if ``DEBUG`` is ``True``, so
-you'll want to set that to take advantage of this setting.
-
-See also ``DEBUG``.
-
-.. setting:: TEMPLATE_DIRS
-
-TEMPLATE_DIRS
--------------
-
-Default: ``()`` (Empty tuple)
-
-List of locations of the template source files, in search order. Note that
-these paths should use Unix-style forward slashes, even on Windows.
-
-See :doc:`/topics/templates`.
-
-.. setting:: TEMPLATE_LOADERS
-
-TEMPLATE_LOADERS
-----------------
-
-Default::
-
- ('django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader')
-
-A tuple of template loader classes, specified as strings. Each ``Loader`` class
-knows how to import templates from a particular source. Optionally, a tuple can be
-used instead of a string. The first item in the tuple should be the ``Loader``'s
-module, subsequent items are passed to the ``Loader`` during initialization. See
-:doc:`/ref/templates/api`.
-
-.. setting:: TEMPLATE_STRING_IF_INVALID
-
-TEMPLATE_STRING_IF_INVALID
---------------------------
-
-Default: ``''`` (Empty string)
-
-Output, as a string, that the template system should use for invalid (e.g.
-misspelled) variables. See :ref:`invalid-template-variables`..
-
-.. setting:: TEST_RUNNER
-
-TEST_RUNNER
------------
-
-Default: ``'django.test.simple.DjangoTestSuiteRunner'``
-
-.. versionchanged:: 1.2
- Prior to 1.2, test runners were a function, not a class.
-
-The name of the class to use for starting the test suite. See
-:doc:`/topics/testing`.
-
-.. _Testing Django Applications: ../testing/
-
-.. setting:: THOUSAND_SEPARATOR
-
-THOUSAND_SEPARATOR
-------------------
-
-.. versionadded:: 1.2
-
-Default ``,`` (Comma)
-
-Default thousand separator used when formatting numbers. This setting is
-used only when ``NUMBER_GROUPING`` and ``USE_THOUSAND_SEPARATOR`` are set.
-
-See also :setting:`NUMBER_GROUPING`, :setting:`DECIMAL_SEPARATOR` and
-:setting:`USE_THOUSAND_SEPARATOR`.
-
-.. setting:: TIME_FORMAT
-
-TIME_FORMAT
------------
-
-Default: ``'P'`` (e.g. ``4 p.m.``)
-
-The default formatting to use for displaying time fields in any part of the
-system. Note that if :setting:`USE_L10N` is set to ``True``, then the
-locale-dictated format has higher precedence and will be applied instead. See
-:tfilter:`allowed date format strings <date>`.
-
-.. versionchanged:: 1.2
- This setting can now be overriden by setting ``USE_L10N`` to ``True``.
-
-See also ``DATE_FORMAT`` and ``DATETIME_FORMAT``.
-
-.. setting:: TIME_INPUT_FORMATS
-
-TIME_INPUT_FORMATS
-------------------
-
-.. versionadded:: 1.2
-
-Default: ``('%H:%M:%S', '%H:%M')``
-
-A tuple of formats that will be accepted when inputting data on a time
-field. Formats will be tried in order, using the first valid.
-Note that these format strings are specified in Python's datetime_ module
-syntax, that is different from the one used by Django for formatting dates
-to be displayed.
-
-See also ``DATE_INPUT_FORMATS`` and ``DATETIME_INPUT_FORMATS``.
-
-.. _datetime: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
-
-.. setting:: TIME_ZONE
-
-TIME_ZONE
----------
-
-Default: ``'America/Chicago'``
-
-.. versionchanged:: 1.2
- ``None`` was added as an allowed value.
-
-A string representing the time zone for this installation, or
-``None``. `See available choices`_. (Note that list of available
-choices lists more than one on the same line; you'll want to use just
-one of the choices for a given time zone. For instance, one line says
-``'Europe/London GB GB-Eire'``, but you should use the first bit of
-that -- ``'Europe/London'`` -- as your ``TIME_ZONE`` setting.)
-
-Note that this is the time zone to which Django will convert all
-dates/times -- not necessarily the timezone of the server. For
-example, one server may serve multiple Django-powered sites, each with
-a separate time-zone setting.
-
-Normally, Django sets the ``os.environ['TZ']`` variable to the time
-zone you specify in the ``TIME_ZONE`` setting. Thus, all your views
-and models will automatically operate in the correct time zone.
-However, Django won't set the ``TZ`` environment variable under the
-following conditions:
-
- * If you're using the manual configuration option as described in
- :ref:`manually configuring settings
- <settings-without-django-settings-module>`, or
-
- * If you specify ``TIME_ZONE = None``. This will cause Django to fall
- back to using the system timezone.
-
-If Django doesn't set the ``TZ`` environment variable, it's up to you
-to ensure your processes are running in the correct environment.
-
-.. note::
- Django cannot reliably use alternate time zones in a Windows
- environment. If you're running Django on Windows, this variable
- must be set to match the system timezone.
-
-
-.. _See available choices: http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
-
-.. setting:: URL_VALIDATOR_USER_AGENT
-
-URL_VALIDATOR_USER_AGENT
-------------------------
-
-Default: ``Django/<version> (http://www.djangoproject.com/)``
-
-The string to use as the ``User-Agent`` header when checking to see if URLs
-exist (see the ``verify_exists`` option on :class:`~django.db.models.URLField`).
-
-.. setting:: USE_ETAGS
-
-USE_ETAGS
----------
-
-Default: ``False``
-
-A boolean that specifies whether to output the "Etag" header. This saves
-bandwidth but slows down performance. This is only used if ``CommonMiddleware``
-is installed (see :doc:`/topics/http/middleware`).
-
-.. setting:: USE_I18N
-
-USE_I18N
---------
-
-Default: ``True``
-
-A boolean that specifies whether Django's internationalization system should be
-enabled. This provides an easy way to turn it off, for performance. If this is
-set to ``False``, Django will make some optimizations so as not to load the
-internationalization machinery.
-
-See also ``USE_L10N``
-
-.. setting:: USE_L10N
-
-USE_L10N
---------
-
-.. versionadded:: 1.2
-
-Default ``False``
-
-A boolean that specifies if data will be localized by default or not. If this
-is set to ``True``, e.g. Django will display numbers and dates using the
-format of the current locale.
-
-See also ``USE_I18N`` and ``LANGUAGE_CODE``
-
-.. setting:: USE_THOUSAND_SEPARATOR
-
-USE_THOUSAND_SEPARATOR
-----------------------
-
-.. versionadded:: 1.2
-
-Default ``False``
-
-A boolean that specifies wheter to display numbers using a thousand separator.
-If this is set to ``True``, Django will use values from ``THOUSAND_SEPARATOR``
-and ``NUMBER_GROUPING`` from current locale, to format the number.
-``USE_L10N`` must be set to ``True``, in order to format numbers.
-
-See also ``THOUSAND_SEPARATOR`` and ``NUMBER_GROUPING``.
-
-.. setting:: YEAR_MONTH_FORMAT
-
-YEAR_MONTH_FORMAT
------------------
-
-Default: ``'F Y'``
-
-The default formatting to use for date fields on Django admin change-list
-pages -- and, possibly, by other parts of the system -- in cases when only the
-year and month are displayed.
-
-For example, when a Django admin change-list page is being filtered by a date
-drilldown, the header for a given month displays the month and the year.
-Different locales have different formats. For example, U.S. English would say
-"January 2006," whereas another locale might say "2006/January."
-
-See :tfilter:`allowed date format strings <date>`. See also ``DATE_FORMAT``,
-``DATETIME_FORMAT``, ``TIME_FORMAT`` and ``MONTH_DAY_FORMAT``.
-
-Deprecated settings
-===================
-
-.. setting:: DATABASE_ENGINE
-
-DATABASE_ENGINE
----------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`ENGINE` in
- :setting:`DATABASES`.
-
-.. setting:: DATABASE_HOST
-
-DATABASE_HOST
--------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`HOST` in
- :setting:`DATABASES`.
-
-.. setting:: DATABASE_NAME
-
-DATABASE_NAME
--------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`NAME` in
- :setting:`DATABASES`.
-
-.. setting:: DATABASE_OPTIONS
-
-DATABASE_OPTIONS
-----------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`OPTIONS` in
- :setting:`DATABASES`.
-
-.. setting:: DATABASE_PASSWORD
-
-DATABASE_PASSWORD
------------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`PASSWORD` in
- :setting:`DATABASES`.
-
-.. setting:: DATABASE_PORT
-
-DATABASE_PORT
--------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`PORT` in
- :setting:`DATABASES`.
-
-.. setting:: DATABASE_USER
-
-DATABASE_USER
--------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`USER` in
- :setting:`DATABASES`.
-
-.. setting:: TEST_DATABASE_CHARSET
-
-TEST_DATABASE_CHARSET
----------------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`TEST_CHARSET` in
- :setting:`DATABASES`.
-
-.. setting:: TEST_DATABASE_COLLATION
-
-TEST_DATABASE_COLLATION
------------------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`TEST_COLLATION` in
- :setting:`DATABASES`.
-
-.. setting:: TEST_DATABASE_NAME
-
-TEST_DATABASE_NAME
-------------------
-
-.. deprecated:: 1.2
- This setting has been replaced by :setting:`TEST_NAME` in
- :setting:`DATABASES`.
-
diff --git a/parts/django/docs/ref/signals.txt b/parts/django/docs/ref/signals.txt
deleted file mode 100644
index 4bc1f3f..0000000
--- a/parts/django/docs/ref/signals.txt
+++ /dev/null
@@ -1,475 +0,0 @@
-=======
-Signals
-=======
-
-A list of all the signals that Django sends.
-
-.. seealso::
-
- See the documentation on the :doc:`signal dispatcher </topics/signals>` for
- information regarding how to register for and receive signals.
-
- The :doc:`comment framework </ref/contrib/comments/index>` sends a :doc:`set
- of comment-related signals </ref/contrib/comments/signals>`.
-
-Model signals
-=============
-
-.. module:: django.db.models.signals
- :synopsis: Signals sent by the model system.
-
-The :mod:`django.db.models.signals` module defines a set of signals sent by the
-module system.
-
-.. warning::
-
- Many of these signals are sent by various model methods like
- :meth:`~django.db.models.Model.__init__` or
- :meth:`~django.db.models.Model.save` that you can overwrite in your own
- code.
-
- If you override these methods on your model, you must call the parent class'
- methods for this signals to be sent.
-
- Note also that Django stores signal handlers as weak references by default,
- so if your handler is a local function, it may be garbage collected. To
- prevent this, pass ``weak=False`` when you call the signal's :meth:`~django.dispatch.Signal.connect`.
-
-pre_init
---------
-
-.. attribute:: django.db.models.signals.pre_init
- :module:
-
-.. ^^^^^^^ this :module: hack keeps Sphinx from prepending the module.
-
-Whenever you instantiate a Django model,, this signal is sent at the beginning
-of the model's :meth:`~django.db.models.Model.__init__` method.
-
-Arguments sent with this signal:
-
- ``sender``
- The model class that just had an instance created.
-
- ``args``
- A list of positional arguments passed to
- :meth:`~django.db.models.Model.__init__`:
-
- ``kwargs``
- A dictionary of keyword arguments passed to
- :meth:`~django.db.models.Model.__init__`:.
-
-For example, the :doc:`tutorial </intro/tutorial01>` has this line:
-
-.. code-block:: python
-
- p = Poll(question="What's up?", pub_date=datetime.now())
-
-The arguments sent to a :data:`pre_init` handler would be:
-
- ========== ===============================================================
- Argument Value
- ========== ===============================================================
- ``sender`` ``Poll`` (the class itself)
-
- ``args`` ``[]`` (an empty list because there were no positional
- arguments passed to ``__init__``.)
-
- ``kwargs`` ``{'question': "What's up?", 'pub_date': datetime.now()}``
- ========== ===============================================================
-
-post_init
----------
-
-.. data:: django.db.models.signals.post_init
- :module:
-
-Like pre_init, but this one is sent when the :meth:`~django.db.models.Model.__init__`: method finishes.
-
-Arguments sent with this signal:
-
- ``sender``
- As above: the model class that just had an instance created.
-
- ``instance``
- The actual instance of the model that's just been created.
-
-pre_save
---------
-
-.. data:: django.db.models.signals.pre_save
- :module:
-
-This is sent at the beginning of a model's :meth:`~django.db.models.Model.save`
-method.
-
-Arguments sent with this signal:
-
- ``sender``
- The model class.
-
- ``instance``
- The actual instance being saved.
-
-post_save
----------
-
-.. data:: django.db.models.signals.post_save
- :module:
-
-Like :data:`pre_save`, but sent at the end of the
-:meth:`~django.db.models.Model.save` method.
-
-Arguments sent with this signal:
-
- ``sender``
- The model class.
-
- ``instance``
- The actual instance being saved.
-
- ``created``
- A boolean; ``True`` if a new record was created.
-
-pre_delete
-----------
-
-.. data:: django.db.models.signals.pre_delete
- :module:
-
-Sent at the beginning of a model's :meth:`~django.db.models.Model.delete`
-method.
-
-Arguments sent with this signal:
-
- ``sender``
- The model class.
-
- ``instance``
- The actual instance being deleted.
-
-post_delete
------------
-
-.. data:: django.db.models.signals.post_delete
- :module:
-
-Like :data:`pre_delete`, but sent at the end of the
-:meth:`~django.db.models.Model.delete` method.
-
-Arguments sent with this signal:
-
- ``sender``
- The model class.
-
- ``instance``
- The actual instance being deleted.
-
- Note that the object will no longer be in the database, so be very
- careful what you do with this instance.
-
-m2m_changed
------------
-
-.. data:: django.db.models.signals.m2m_changed
- :module:
-
-.. versionadded:: 1.2
-
-Sent when a :class:`ManyToManyField` is changed on a model instance.
-Strictly speaking, this is not a model signal since it is sent by the
-:class:`ManyToManyField`, but since it complements the
-:data:`pre_save`/:data:`post_save` and :data:`pre_delete`/:data:`post_delete`
-when it comes to tracking changes to models, it is included here.
-
-Arguments sent with this signal:
-
- ``sender``
- The intermediate model class describing the :class:`ManyToManyField`.
- This class is automatically created when a many-to-many field is
- defined; you can access it using the ``through`` attribute on the
- many-to-many field.
-
- ``instance``
- The instance whose many-to-many relation is updated. This can be an
- instance of the ``sender``, or of the class the :class:`ManyToManyField`
- is related to.
-
- ``action``
- A string indicating the type of update that is done on the relation.
- This can be one of the following:
-
- ``"pre_add"``
- Sent *before* one or more objects are added to the relation
- ``"post_add"``
- Sent *after* one or more objects are added to the relation
- ``"pre_remove"``
- Sent *after* one or more objects are removed from the relation
- ``"post_remove"``
- Sent *after* one or more objects are removed from the relation
- ``"pre_clear"``
- Sent *before* the relation is cleared
- ``"post_clear"``
- Sent *after* the relation is cleared
-
- ``reverse``
- Indicates which side of the relation is updated (i.e., if it is the
- forward or reverse relation that is being modified).
-
- ``model``
- The class of the objects that are added to, removed from or cleared
- from the relation.
-
- ``pk_set``
- For the ``pre_add``, ``post_add``, ``pre_remove`` and ``post_remove``
- actions, this is a list of primary key values that have been added to
- or removed from the relation.
-
- For the ``pre_clear`` and ``post_clear`` actions, this is ``None``.
-
-For example, if a ``Pizza`` can have multiple ``Topping`` objects, modeled
-like this:
-
-.. code-block:: python
-
- class Topping(models.Model):
- # ...
-
- class Pizza(models.Model):
- # ...
- toppings = models.ManyToManyField(Topping)
-
-If we would do something like this:
-
-.. code-block:: python
-
- >>> p = Pizza.object.create(...)
- >>> t = Topping.objects.create(...)
- >>> p.toppings.add(t)
-
-the arguments sent to a :data:`m2m_changed` handler would be:
-
- ============== ============================================================
- Argument Value
- ============== ============================================================
- ``sender`` ``Pizza.toppings.through`` (the intermediate m2m class)
-
- ``instance`` ``p`` (the ``Pizza`` instance being modified)
-
- ``action`` ``"pre_add"`` (followed by a separate signal with ``"post_add"``)
-
- ``reverse`` ``False`` (``Pizza`` contains the :class:`ManyToManyField`,
- so this call modifies the forward relation)
-
- ``model`` ``Topping`` (the class of the objects added to the
- ``Pizza``)
-
- ``pk_set`` ``[t.id]`` (since only ``Topping t`` was added to the relation)
- ============== ============================================================
-
-And if we would then do something like this:
-
-.. code-block:: python
-
- >>> t.pizza_set.remove(p)
-
-the arguments sent to a :data:`m2m_changed` handler would be:
-
- ============== ============================================================
- Argument Value
- ============== ============================================================
- ``sender`` ``Pizza.toppings.through`` (the intermediate m2m class)
-
- ``instance`` ``t`` (the ``Topping`` instance being modified)
-
- ``action`` ``"pre_remove"`` (followed by a separate signal with ``"post_remove"``)
-
- ``reverse`` ``True`` (``Pizza`` contains the :class:`ManyToManyField`,
- so this call modifies the reverse relation)
-
- ``model`` ``Pizza`` (the class of the objects removed from the
- ``Topping``)
-
- ``pk_set`` ``[p.id]`` (since only ``Pizza p`` was removed from the
- relation)
- ============== ============================================================
-
-class_prepared
---------------
-
-.. data:: django.db.models.signals.class_prepared
- :module:
-
-Sent whenever a model class has been "prepared" -- that is, once model has
-been defined and registered with Django's model system. Django uses this
-signal internally; it's not generally used in third-party applications.
-
-Arguments that are sent with this signal:
-
-``sender``
- The model class which was just prepared.
-
-Management signals
-==================
-
-Signals sent by :doc:`django-admin </ref/django-admin>`.
-
-post_syncdb
------------
-
-.. data:: django.db.models.signals.post_syncdb
- :module:
-
-Sent by :djadmin:`syncdb` after it installs an application.
-
-Any handlers that listen to this signal need to be written in a particular
-place: a ``management`` module in one of your :setting:`INSTALLED_APPS`. If
-handlers are registered anywhere else they may not be loaded by
-:djadmin:`syncdb`.
-
-Arguments sent with this signal:
-
- ``sender``
- The ``models`` module that was just installed. That is, if
- :djadmin:`syncdb` just installed an app called ``"foo.bar.myapp"``,
- ``sender`` will be the ``foo.bar.myapp.models`` module.
-
- ``app``
- Same as ``sender``.
-
- ``created_models``
- A list of the model classes from any app which :djadmin:`syncdb` has
- created so far.
-
- ``verbosity``
- Indicates how much information manage.py is printing on screen. See
- the :djadminopt:`--verbosity` flag for details.
-
- Functions which listen for :data:`post_syncdb` should adjust what they
- output to the screen based on the value of this argument.
-
- ``interactive``
- If ``interactive`` is ``True``, it's safe to prompt the user to input
- things on the command line. If ``interactive`` is ``False``, functions
- which listen for this signal should not try to prompt for anything.
-
- For example, the :mod:`django.contrib.auth` app only prompts to create a
- superuser when ``interactive`` is ``True``.
-
-Request/response signals
-========================
-
-.. module:: django.core.signals
- :synopsis: Core signals sent by the request/response system.
-
-Signals sent by the core framework when processing a request.
-
-request_started
----------------
-
-.. data:: django.core.signals.request_started
- :module:
-
-Sent when Django begins processing an HTTP request.
-
-Arguments sent with this signal:
-
- ``sender``
- The handler class -- i.e.
- :class:`django.core.handlers.modpython.ModPythonHandler` or
- :class:`django.core.handlers.wsgi.WsgiHandler` -- that handled
- the request.
-
-request_finished
-----------------
-
-.. data:: django.core.signals.request_finished
- :module:
-
-Sent when Django finishes processing an HTTP request.
-
-Arguments sent with this signal:
-
- ``sender``
- The handler class, as above.
-
-got_request_exception
----------------------
-
-.. data:: django.core.signals.got_request_exception
- :module:
-
-This signal is sent whenever Django encounters an exception while processing an incoming HTTP request.
-
-Arguments sent with this signal:
-
- ``sender``
- The handler class, as above.
-
- ``request``
- The :class:`~django.http.HttpRequest` object.
-
-Test signals
-============
-
-.. module:: django.test.signals
- :synopsis: Signals sent during testing.
-
-Signals only sent when :doc:`running tests </topics/testing>`.
-
-template_rendered
------------------
-
-.. data:: django.test.signals.template_rendered
- :module:
-
-Sent when the test system renders a template. This signal is not emitted during
-normal operation of a Django server -- it is only available during testing.
-
-Arguments sent with this signal:
-
- sender
- The :class:`~django.template.Template` object which was rendered.
-
- template
- Same as sender
-
- context
- The :class:`~django.template.Context` with which the template was
- rendered.
-
-Database Wrappers
-=================
-
-.. module:: django.db.backends
- :synopsis: Core signals sent by the database wrapper.
-
-Signals sent by the database wrapper when a database connection is
-initiated.
-
-connection_created
-------------------
-
-.. data:: django.db.backends.signals.connection_created
- :module:
-
-.. versionadded:: 1.1
-
-.. versionchanged:: 1.2
- The connection argument was added
-
-Sent when the database wrapper makes the initial connection to the
-database. This is particularly useful if you'd like to send any post
-connection commands to the SQL backend.
-
-Arguments sent with this signal:
-
- sender
- The database wrapper class -- i.e.
- :class: `django.db.backends.postgresql_psycopg2.DatabaseWrapper` or
- :class: `django.db.backends.mysql.DatabaseWrapper`, etc.
-
- connection
- The database connection that was opened. This can be used in a
- multiple-database configuration to differentiate connection signals
- from different databases.
diff --git a/parts/django/docs/ref/templates/api.txt b/parts/django/docs/ref/templates/api.txt
deleted file mode 100644
index 1111869..0000000
--- a/parts/django/docs/ref/templates/api.txt
+++ /dev/null
@@ -1,815 +0,0 @@
-====================================================
-The Django template language: For Python programmers
-====================================================
-
-This document explains the Django template system from a technical
-perspective -- how it works and how to extend it. If you're just looking for
-reference on the language syntax, see :doc:`/topics/templates`.
-
-If you're looking to use the Django template system as part of another
-application -- i.e., without the rest of the framework -- make sure to read
-the `configuration`_ section later in this document.
-
-.. _configuration: `configuring the template system in standalone mode`_
-
-Basics
-======
-
-A **template** is a text document, or a normal Python string, that is marked-up
-using the Django template language. A template can contain **block tags** or
-**variables**.
-
-A **block tag** is a symbol within a template that does something.
-
-This definition is deliberately vague. For example, a block tag can output
-content, serve as a control structure (an "if" statement or "for" loop), grab
-content from a database or enable access to other template tags.
-
-Block tags are surrounded by ``"{%"`` and ``"%}"``.
-
-Example template with block tags:
-
-.. code-block:: html+django
-
- {% if is_logged_in %}Thanks for logging in!{% else %}Please log in.{% endif %}
-
-A **variable** is a symbol within a template that outputs a value.
-
-Variable tags are surrounded by ``"{{"`` and ``"}}"``.
-
-Example template with variables:
-
-.. code-block:: html+django
-
- My first name is {{ first_name }}. My last name is {{ last_name }}.
-
-A **context** is a "variable name" -> "variable value" mapping that is passed
-to a template.
-
-A template **renders** a context by replacing the variable "holes" with values
-from the context and executing all block tags.
-
-Using the template system
-=========================
-
-.. class:: django.template.Template
-
-Using the template system in Python is a two-step process:
-
- * First, you compile the raw template code into a ``Template`` object.
- * Then, you call the ``render()`` method of the ``Template`` object with a
- given context.
-
-Compiling a string
-------------------
-
-The easiest way to create a ``Template`` object is by instantiating it
-directly. The class lives at :class:`django.template.Template`. The constructor
-takes one argument -- the raw template code::
-
- >>> from django.template import Template
- >>> t = Template("My name is {{ my_name }}.")
- >>> print t
- <django.template.Template instance>
-
-.. admonition:: Behind the scenes
-
- The system only parses your raw template code once -- when you create the
- ``Template`` object. From then on, it's stored internally as a "node"
- structure for performance.
-
- Even the parsing itself is quite fast. Most of the parsing happens via a
- single call to a single, short, regular expression.
-
-Rendering a context
--------------------
-
-.. method:: render(context)
-
-Once you have a compiled ``Template`` object, you can render a context -- or
-multiple contexts -- with it. The ``Context`` class lives at
-:class:`django.template.Context`, and the constructor takes two (optional)
-arguments:
-
- * A dictionary mapping variable names to variable values.
-
- * The name of the current application. This application name is used
- to help :ref:`resolve namespaced URLs<topics-http-reversing-url-namespaces>`.
- If you're not using namespaced URLs, you can ignore this argument.
-
-Call the ``Template`` object's ``render()`` method with the context to "fill" the
-template::
-
- >>> from django.template import Context, Template
- >>> t = Template("My name is {{ my_name }}.")
-
- >>> c = Context({"my_name": "Adrian"})
- >>> t.render(c)
- "My name is Adrian."
-
- >>> c = Context({"my_name": "Dolores"})
- >>> t.render(c)
- "My name is Dolores."
-
-Variable names must consist of any letter (A-Z), any digit (0-9), an underscore
-or a dot.
-
-Dots have a special meaning in template rendering. A dot in a variable name
-signifies **lookup**. Specifically, when the template system encounters a dot
-in a variable name, it tries the following lookups, in this order:
-
- * Dictionary lookup. Example: ``foo["bar"]``
- * Attribute lookup. Example: ``foo.bar``
- * Method call. Example: ``foo.bar()``
- * List-index lookup. Example: ``foo[bar]``
-
-The template system uses the first lookup type that works. It's short-circuit
-logic.
-
-Here are a few examples::
-
- >>> from django.template import Context, Template
- >>> t = Template("My name is {{ person.first_name }}.")
- >>> d = {"person": {"first_name": "Joe", "last_name": "Johnson"}}
- >>> t.render(Context(d))
- "My name is Joe."
-
- >>> class PersonClass: pass
- >>> p = PersonClass()
- >>> p.first_name = "Ron"
- >>> p.last_name = "Nasty"
- >>> t.render(Context({"person": p}))
- "My name is Ron."
-
- >>> class PersonClass2:
- ... def first_name(self):
- ... return "Samantha"
- >>> p = PersonClass2()
- >>> t.render(Context({"person": p}))
- "My name is Samantha."
-
- >>> t = Template("The first stooge in the list is {{ stooges.0 }}.")
- >>> c = Context({"stooges": ["Larry", "Curly", "Moe"]})
- >>> t.render(c)
- "The first stooge in the list is Larry."
-
-Method lookups are slightly more complex than the other lookup types. Here are
-some things to keep in mind:
-
- * If, during the method lookup, a method raises an exception, the exception
- will be propagated, unless the exception has an attribute
- ``silent_variable_failure`` whose value is ``True``. If the exception
- *does* have a ``silent_variable_failure`` attribute, the variable will
- render as an empty string. Example::
-
- >>> t = Template("My name is {{ person.first_name }}.")
- >>> class PersonClass3:
- ... def first_name(self):
- ... raise AssertionError, "foo"
- >>> p = PersonClass3()
- >>> t.render(Context({"person": p}))
- Traceback (most recent call last):
- ...
- AssertionError: foo
-
- >>> class SilentAssertionError(Exception):
- ... silent_variable_failure = True
- >>> class PersonClass4:
- ... def first_name(self):
- ... raise SilentAssertionError
- >>> p = PersonClass4()
- >>> t.render(Context({"person": p}))
- "My name is ."
-
- Note that :exc:`django.core.exceptions.ObjectDoesNotExist`, which is the
- base class for all Django database API ``DoesNotExist`` exceptions, has
- ``silent_variable_failure = True``. So if you're using Django templates
- with Django model objects, any ``DoesNotExist`` exception will fail
- silently.
-
- * A method call will only work if the method has no required arguments.
- Otherwise, the system will move to the next lookup type (list-index
- lookup).
-
- * Obviously, some methods have side effects, and it'd be either foolish or
- a security hole to allow the template system to access them.
-
- A good example is the :meth:`~django.db.models.Model.delete` method on
- each Django model object. The template system shouldn't be allowed to do
- something like this::
-
- I will now delete this valuable data. {{ data.delete }}
-
- To prevent this, set a function attribute ``alters_data`` on the method.
- The template system won't execute a method if the method has
- ``alters_data=True`` set. The dynamically-generated
- :meth:`~django.db.models.Model.delete` and
- :meth:`~django.db.models.Model.save` methods on Django model objects get
- ``alters_data=True`` automatically. Example::
-
- def sensitive_function(self):
- self.database_record.delete()
- sensitive_function.alters_data = True
-
-.. _invalid-template-variables:
-
-How invalid variables are handled
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Generally, if a variable doesn't exist, the template system inserts the
-value of the :setting:`TEMPLATE_STRING_IF_INVALID` setting, which is set to
-``''`` (the empty string) by default.
-
-Filters that are applied to an invalid variable will only be applied if
-:setting:`TEMPLATE_STRING_IF_INVALID` is set to ``''`` (the empty string). If
-:setting:`TEMPLATE_STRING_IF_INVALID` is set to any other value, variable
-filters will be ignored.
-
-This behavior is slightly different for the ``if``, ``for`` and ``regroup``
-template tags. If an invalid variable is provided to one of these template
-tags, the variable will be interpreted as ``None``. Filters are always
-applied to invalid variables within these template tags.
-
-If :setting:`TEMPLATE_STRING_IF_INVALID` contains a ``'%s'``, the format marker will
-be replaced with the name of the invalid variable.
-
-.. admonition:: For debug purposes only!
-
- While :setting:`TEMPLATE_STRING_IF_INVALID` can be a useful debugging tool,
- it is a bad idea to turn it on as a 'development default'.
-
- Many templates, including those in the Admin site, rely upon the
- silence of the template system when a non-existent variable is
- encountered. If you assign a value other than ``''`` to
- :setting:`TEMPLATE_STRING_IF_INVALID`, you will experience rendering
- problems with these templates and sites.
-
- Generally, :setting:`TEMPLATE_STRING_IF_INVALID` should only be enabled
- in order to debug a specific template problem, then cleared
- once debugging is complete.
-
-Playing with Context objects
-----------------------------
-
-.. class:: django.template.Context
-
-Most of the time, you'll instantiate ``Context`` objects by passing in a
-fully-populated dictionary to ``Context()``. But you can add and delete items
-from a ``Context`` object once it's been instantiated, too, using standard
-dictionary syntax::
-
- >>> c = Context({"foo": "bar"})
- >>> c['foo']
- 'bar'
- >>> del c['foo']
- >>> c['foo']
- ''
- >>> c['newvariable'] = 'hello'
- >>> c['newvariable']
- 'hello'
-
-.. method:: pop()
-.. method:: push()
-.. exception:: django.template.ContextPopException
-
-A ``Context`` object is a stack. That is, you can ``push()`` and ``pop()`` it.
-If you ``pop()`` too much, it'll raise
-``django.template.ContextPopException``::
-
- >>> c = Context()
- >>> c['foo'] = 'first level'
- >>> c.push()
- >>> c['foo'] = 'second level'
- >>> c['foo']
- 'second level'
- >>> c.pop()
- >>> c['foo']
- 'first level'
- >>> c['foo'] = 'overwritten'
- >>> c['foo']
- 'overwritten'
- >>> c.pop()
- Traceback (most recent call last):
- ...
- django.template.ContextPopException
-
-.. method:: update(other_dict)
-
-In addition to ``push()`` and ``pop()``, the ``Context``
-object also defines an ``update()`` method. This works like ``push()``
-but takes a dictionary as an argument and pushes that dictionary onto
-the stack instead of an empty one.
-
- >>> c = Context()
- >>> c['foo'] = 'first level'
- >>> c.update({'foo': 'updated'})
- {'foo': 'updated'}
- >>> c['foo']
- 'updated'
- >>> c.pop()
- {'foo': 'updated'}
- >>> c['foo']
- 'first level'
-
-Using a ``Context`` as a stack comes in handy in some custom template tags, as
-you'll see below.
-
-.. _subclassing-context-requestcontext:
-
-Subclassing Context: RequestContext
------------------------------------
-
-Django comes with a special ``Context`` class,
-``django.template.RequestContext``, that acts slightly differently than the
-normal ``django.template.Context``. The first difference is that it takes an
-:class:`~django.http.HttpRequest` as its first argument. For example::
-
- c = RequestContext(request, {
- 'foo': 'bar',
- })
-
-The second difference is that it automatically populates the context with a few
-variables, according to your :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting.
-
-The :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting is a tuple of callables --
-called **context processors** -- that take a request object as their argument
-and return a dictionary of items to be merged into the context. By default,
-:setting:`TEMPLATE_CONTEXT_PROCESSORS` is set to::
-
- ("django.contrib.auth.context_processors.auth",
- "django.core.context_processors.debug",
- "django.core.context_processors.i18n",
- "django.core.context_processors.media",
- "django.contrib.messages.context_processors.messages")
-
-.. versionadded:: 1.2
- In addition to these, ``RequestContext`` always uses
- ``django.core.context_processors.csrf``. This is a security
- related context processor required by the admin and other contrib apps, and,
- in case of accidental misconfiguration, it is deliberately hardcoded in and
- cannot be turned off by the :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting.
-
-.. versionadded:: 1.2
- The ``'messages'`` context processor was added. For more information, see
- the :doc:`messages documentation </ref/contrib/messages>`.
-
-.. versionchanged:: 1.2
- The auth context processor was moved in this release from its old location
- ``django.core.context_processors.auth`` to
- ``django.contrib.auth.context_processors.auth``.
-
-Each processor is applied in order. That means, if one processor adds a
-variable to the context and a second processor adds a variable with the same
-name, the second will override the first. The default processors are explained
-below.
-
-.. admonition:: When context processors are applied
-
- When you use ``RequestContext``, the variables you supply directly
- are added first, followed any variables supplied by context
- processors. This means that a context processor may overwrite a
- variable you've supplied, so take care to avoid variable names
- which overlap with those supplied by your context processors.
-
-Also, you can give ``RequestContext`` a list of additional processors, using the
-optional, third positional argument, ``processors``. In this example, the
-``RequestContext`` instance gets a ``ip_address`` variable::
-
- def ip_address_processor(request):
- return {'ip_address': request.META['REMOTE_ADDR']}
-
- def some_view(request):
- # ...
- c = RequestContext(request, {
- 'foo': 'bar',
- }, [ip_address_processor])
- return HttpResponse(t.render(c))
-
-.. note::
- If you're using Django's ``render_to_response()`` shortcut to populate a
- template with the contents of a dictionary, your template will be passed a
- ``Context`` instance by default (not a ``RequestContext``). To use a
- ``RequestContext`` in your template rendering, pass an optional third
- argument to ``render_to_response()``: a ``RequestContext``
- instance. Your code might look like this::
-
- def some_view(request):
- # ...
- return render_to_response('my_template.html',
- my_data_dictionary,
- context_instance=RequestContext(request))
-
-Here's what each of the default processors does:
-
-django.contrib.auth.context_processors.auth
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
-``RequestContext`` will contain these three variables:
-
- * ``user`` -- An ``auth.User`` instance representing the currently
- logged-in user (or an ``AnonymousUser`` instance, if the client isn't
- logged in).
-
- * ``messages`` -- A list of messages (as strings) that have been set
- via the :doc:`messages framework </ref/contrib/messages>`.
-
- * ``perms`` -- An instance of
- ``django.core.context_processors.PermWrapper``, representing the
- permissions that the currently logged-in user has.
-
-.. versionchanged:: 1.2
- This context processor was moved in this release from
- ``django.core.context_processors.auth`` to its current location.
-
-.. versionchanged:: 1.2
- Prior to version 1.2, the ``messages`` variable was a lazy accessor for
- ``user.get_and_delete_messages()``. It has been changed to include any
- messages added via the :doc:`messages framework </ref/contrib/messages>`.
-
-django.core.context_processors.debug
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
-``RequestContext`` will contain these two variables -- but only if your
-:setting:`DEBUG` setting is set to ``True`` and the request's IP address
-(``request.META['REMOTE_ADDR']``) is in the :setting:`INTERNAL_IPS` setting:
-
- * ``debug`` -- ``True``. You can use this in templates to test whether
- you're in :setting:`DEBUG` mode.
- * ``sql_queries`` -- A list of ``{'sql': ..., 'time': ...}`` dictionaries,
- representing every SQL query that has happened so far during the request
- and how long it took. The list is in order by query.
-
-django.core.context_processors.i18n
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
-``RequestContext`` will contain these two variables:
-
- * ``LANGUAGES`` -- The value of the :setting:`LANGUAGES` setting.
- * ``LANGUAGE_CODE`` -- ``request.LANGUAGE_CODE``, if it exists. Otherwise,
- the value of the :setting:`LANGUAGE_CODE` setting.
-
-See :doc:`/topics/i18n/index` for more.
-
-django.core.context_processors.media
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
-``RequestContext`` will contain a variable ``MEDIA_URL``, providing the
-value of the :setting:`MEDIA_URL` setting.
-
-django.core.context_processors.csrf
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2
-
-This processor adds a token that is needed by the ``csrf_token`` template tag
-for protection against :doc:`Cross Site Request Forgeries </ref/contrib/csrf>`.
-
-django.core.context_processors.request
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
-``RequestContext`` will contain a variable ``request``, which is the current
-:class:`~django.http.HttpRequest`. Note that this processor is not enabled by default;
-you'll have to activate it.
-
-django.contrib.messages.context_processors.messages
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
-``RequestContext`` will contain a single additional variable:
-
- * ``messages`` -- A list of messages (as strings) that have been set
- via the user model (using ``user.message_set.create``) or through
- the :doc:`messages framework </ref/contrib/messages>`.
-
-.. versionadded:: 1.2
- This template context variable was previously supplied by the ``'auth'``
- context processor. For backwards compatibility the ``'auth'`` context
- processor will continue to supply the ``messages`` variable until Django
- 1.4. If you use the ``messages`` variable, your project will work with
- either (or both) context processors, but it is recommended to add
- ``django.contrib.messages.context_processors.messages`` so your project
- will be prepared for the future upgrade.
-
-Writing your own context processors
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-A context processor has a very simple interface: It's just a Python function
-that takes one argument, an :class:`~django.http.HttpRequest` object, and
-returns a dictionary that gets added to the template context. Each context
-processor *must* return a dictionary.
-
-Custom context processors can live anywhere in your code base. All Django cares
-about is that your custom context processors are pointed-to by your
-:setting:`TEMPLATE_CONTEXT_PROCESSORS` setting.
-
-Loading templates
------------------
-
-Generally, you'll store templates in files on your filesystem rather than using
-the low-level ``Template`` API yourself. Save templates in a directory
-specified as a **template directory**.
-
-Django searches for template directories in a number of places, depending on
-your template-loader settings (see "Loader types" below), but the most basic
-way of specifying template directories is by using the :setting:`TEMPLATE_DIRS`
-setting.
-
-The TEMPLATE_DIRS setting
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Tell Django what your template directories are by using the
-:setting:`TEMPLATE_DIRS` setting in your settings file. This should be set to a
-list or tuple of strings that contain full paths to your template
-directory(ies). Example::
-
- TEMPLATE_DIRS = (
- "/home/html/templates/lawrence.com",
- "/home/html/templates/default",
- )
-
-Your templates can go anywhere you want, as long as the directories and
-templates are readable by the Web server. They can have any extension you want,
-such as ``.html`` or ``.txt``, or they can have no extension at all.
-
-Note that these paths should use Unix-style forward slashes, even on Windows.
-
-.. _ref-templates-api-the-python-api:
-
-The Python API
-~~~~~~~~~~~~~~
-
-Django has two ways to load templates from files:
-
-.. function:: django.template.loader.get_template(template_name)
-
- ``get_template`` returns the compiled template (a ``Template`` object) for
- the template with the given name. If the template doesn't exist, it raises
- ``django.template.TemplateDoesNotExist``.
-
-.. function:: django.template.loader.select_template(template_name_list)
-
- ``select_template`` is just like ``get_template``, except it takes a list
- of template names. Of the list, it returns the first template that exists.
-
-For example, if you call ``get_template('story_detail.html')`` and have the
-above :setting:`TEMPLATE_DIRS` setting, here are the files Django will look for,
-in order:
-
- * ``/home/html/templates/lawrence.com/story_detail.html``
- * ``/home/html/templates/default/story_detail.html``
-
-If you call ``select_template(['story_253_detail.html', 'story_detail.html'])``,
-here's what Django will look for:
-
- * ``/home/html/templates/lawrence.com/story_253_detail.html``
- * ``/home/html/templates/default/story_253_detail.html``
- * ``/home/html/templates/lawrence.com/story_detail.html``
- * ``/home/html/templates/default/story_detail.html``
-
-When Django finds a template that exists, it stops looking.
-
-.. admonition:: Tip
-
- You can use ``select_template()`` for super-flexible "templatability." For
- example, if you've written a news story and want some stories to have
- custom templates, use something like
- ``select_template(['story_%s_detail.html' % story.id, 'story_detail.html'])``.
- That'll allow you to use a custom template for an individual story, with a
- fallback template for stories that don't have custom templates.
-
-Using subdirectories
-~~~~~~~~~~~~~~~~~~~~
-
-It's possible -- and preferable -- to organize templates in subdirectories of
-the template directory. The convention is to make a subdirectory for each
-Django app, with subdirectories within those subdirectories as needed.
-
-Do this for your own sanity. Storing all templates in the root level of a
-single directory gets messy.
-
-To load a template that's within a subdirectory, just use a slash, like so::
-
- get_template('news/story_detail.html')
-
-Using the same :setting:`TEMPLATE_DIRS` setting from above, this example
-``get_template()`` call will attempt to load the following templates:
-
- * ``/home/html/templates/lawrence.com/news/story_detail.html``
- * ``/home/html/templates/default/news/story_detail.html``
-
-.. _template-loaders:
-
-Loader types
-~~~~~~~~~~~~
-
-By default, Django uses a filesystem-based template loader, but Django comes
-with a few other template loaders, which know how to load templates from other
-sources.
-
-Some of these other loaders are disabled by default, but you can activate them
-by editing your :setting:`TEMPLATE_LOADERS` setting. :setting:`TEMPLATE_LOADERS`
-should be a tuple of strings, where each string represents a template loader.
-Here are the template loaders that come with Django:
-
-``django.template.loaders.filesystem.Loader``
- Loads templates from the filesystem, according to :setting:`TEMPLATE_DIRS`.
- This loader is enabled by default.
-
-``django.template.loaders.app_directories.Loader``
- Loads templates from Django apps on the filesystem. For each app in
- :setting:`INSTALLED_APPS`, the loader looks for a ``templates``
- subdirectory. If the directory exists, Django looks for templates in there.
-
- This means you can store templates with your individual apps. This also
- makes it easy to distribute Django apps with default templates.
-
- For example, for this setting::
-
- INSTALLED_APPS = ('myproject.polls', 'myproject.music')
-
- ...then ``get_template('foo.html')`` will look for templates in these
- directories, in this order:
-
- * ``/path/to/myproject/polls/templates/foo.html``
- * ``/path/to/myproject/music/templates/foo.html``
-
- Note that the loader performs an optimization when it is first imported: It
- caches a list of which :setting:`INSTALLED_APPS` packages have a
- ``templates`` subdirectory.
-
- This loader is enabled by default.
-
-``django.template.loaders.eggs.Loader``
- Just like ``app_directories`` above, but it loads templates from Python
- eggs rather than from the filesystem.
-
- This loader is disabled by default.
-
-``django.template.loaders.cached.Loader``
- By default, the templating system will read and compile your templates every
- time they need to be rendered. While the Django templating system is quite
- fast, the overhead from reading and compiling templates can add up.
-
- The cached template loader is a class-based loader that you configure with
- a list of other loaders that it should wrap. The wrapped loaders are used to
- locate unknown templates when they are first encountered. The cached loader
- then stores the compiled ``Template`` in memory. The cached ``Template``
- instance is returned for subsequent requests to load the same template.
-
- For example, to enable template caching with the ``filesystem`` and
- ``app_directories`` template loaders you might use the following settings::
-
- TEMPLATE_LOADERS = (
- ('django.template.loaders.cached.Loader', (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
- )),
- )
-
- .. note::
- All of the built-in Django template tags are safe to use with the cached
- loader, but if you're using custom template tags that come from third
- party packages, or that you wrote yourself, you should ensure that the
- ``Node`` implementation for each tag is thread-safe. For more
- information, see
- :ref:`template tag thread safety considerations<template_tag_thread_safety>`.
-
- This loader is disabled by default.
-
-Django uses the template loaders in order according to the
-:setting:`TEMPLATE_LOADERS` setting. It uses each loader until a loader finds a
-match.
-
-The ``render_to_string`` shortcut
-===================================
-
-.. function:: django.template.loader.render_to_string(template_name, dictionary=None, context_instance=None)
-
-To cut down on the repetitive nature of loading and rendering
-templates, Django provides a shortcut function which largely
-automates the process: ``render_to_string()`` in
-:mod:`django.template.loader`, which loads a template, renders it and
-returns the resulting string::
-
- from django.template.loader import render_to_string
- rendered = render_to_string('my_template.html', { 'foo': 'bar' })
-
-The ``render_to_string`` shortcut takes one required argument --
-``template_name``, which should be the name of the template to load
-and render (or a list of template names, in which case Django will use
-the first template in the list that exists) -- and two optional arguments:
-
- dictionary
- A dictionary to be used as variables and values for the
- template's context. This can also be passed as the second
- positional argument.
-
- context_instance
- An instance of ``Context`` or a subclass (e.g., an instance of
- ``RequestContext``) to use as the template's context. This can
- also be passed as the third positional argument.
-
-See also the :func:`~django.shortcuts.render_to_response()` shortcut, which
-calls ``render_to_string`` and feeds the result into an :class:`~django.http.HttpResponse`
-suitable for returning directly from a view.
-
-Configuring the template system in standalone mode
-==================================================
-
-.. note::
-
- This section is only of interest to people trying to use the template
- system as an output component in another application. If you're using the
- template system as part of a Django application, nothing here applies to
- you.
-
-Normally, Django will load all the configuration information it needs from its
-own default configuration file, combined with the settings in the module given
-in the :envvar:`DJANGO_SETTINGS_MODULE` environment variable. But if you're
-using the template system independently of the rest of Django, the environment
-variable approach isn't very convenient, because you probably want to configure
-the template system in line with the rest of your application rather than
-dealing with settings files and pointing to them via environment variables.
-
-To solve this problem, you need to use the manual configuration option described
-in :ref:`settings-without-django-settings-module`. Simply import the appropriate
-pieces of the templating system and then, *before* you call any of the
-templating functions, call :func:`django.conf.settings.configure()` with any
-settings you wish to specify. You might want to consider setting at least
-:setting:`TEMPLATE_DIRS` (if you're going to use template loaders),
-:setting:`DEFAULT_CHARSET` (although the default of ``utf-8`` is probably fine)
-and :setting:`TEMPLATE_DEBUG`. All available settings are described in the
-:doc:`settings documentation </ref/settings>`, and any setting starting with
-``TEMPLATE_`` is of obvious interest.
-
-.. _topic-template-alternate-language:
-
-Using an alternative template language
-======================================
-
-.. versionadded:: 1.2
-
-The Django ``Template`` and ``Loader`` classes implement a simple API for
-loading and rendering templates. By providing some simple wrapper classes that
-implement this API we can use third party template systems like `Jinja2
-<http://jinja.pocoo.org/2/>`_ or `Cheetah <http://www.cheetahtemplate.org/>`_. This
-allows us to use third-party template libraries without giving up useful Django
-features like the Django ``Context`` object and handy shortcuts like
-``render_to_response()``.
-
-The core component of the Django templating system is the ``Template`` class.
-This class has a very simple interface: it has a constructor that takes a single
-positional argument specifying the template string, and a ``render()`` method
-that takes a :class:`~django.template.Context` object and returns a string
-containing the rendered response.
-
-Suppose we're using a template language that defines a ``Template`` object with
-a ``render()`` method that takes a dictionary rather than a ``Context`` object.
-We can write a simple wrapper that implements the Django ``Template`` interface::
-
- import some_template_language
- class Template(some_template_language.Template):
- def render(self, context):
- # flatten the Django Context into a single dictionary.
- context_dict = {}
- for d in context.dicts:
- context_dict.update(d)
- return super(Template, self).render(context_dict)
-
-That's all that's required to make our fictional ``Template`` class compatible
-with the Django loading and rendering system!
-
-The next step is to write a ``Loader`` class that returns instances of our custom
-template class instead of the default :class:`~django.template.Template`. Custom ``Loader``
-classes should inherit from ``django.template.loader.BaseLoader`` and override
-the ``load_template_source()`` method, which takes a ``template_name`` argument,
-loads the template from disk (or elsewhere), and returns a tuple:
-``(template_string, template_origin)``.
-
-The ``load_template()`` method of the ``Loader`` class retrieves the template
-string by calling ``load_template_source()``, instantiates a ``Template`` from
-the template source, and returns a tuple: ``(template, template_origin)``. Since
-this is the method that actually instantiates the ``Template``, we'll need to
-override it to use our custom template class instead. We can inherit from the
-builtin :class:`django.template.loaders.app_directories.Loader` to take advantage
-of the ``load_template_source()`` method implemented there::
-
- from django.template.loaders import app_directories
- class Loader(app_directories.Loader):
- is_usable = True
-
- def load_template(self, template_name, template_dirs=None):
- source, origin = self.load_template_source(template_name, template_dirs)
- template = Template(source)
- return template, origin
-
-Finally, we need to modify our project settings, telling Django to use our custom
-loader. Now we can write all of our templates in our alternative template
-language while continuing to use the rest of the Django templating system.
diff --git a/parts/django/docs/ref/templates/builtins.txt b/parts/django/docs/ref/templates/builtins.txt
deleted file mode 100644
index 44bbc37..0000000
--- a/parts/django/docs/ref/templates/builtins.txt
+++ /dev/null
@@ -1,2107 +0,0 @@
-==================================
-Built-in template tags and filters
-==================================
-
-This document describes Django's built-in template tags and filters. It is
-recommended that you use the :doc:`automatic documentation
-</ref/contrib/admin/admindocs>`, if available, as this will also include
-documentation for any custom tags or filters installed.
-
-.. _ref-templates-builtins-tags:
-
-Built-in tag reference
-----------------------
-
-.. highlightlang:: html+django
-
-.. templatetag:: autoescape
-
-autoescape
-~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-Control the current auto-escaping behavior. This tag takes either ``on`` or
-``off`` as an argument and that determines whether auto-escaping is in effect
-inside the block. The block is closed with an ``endautoescape`` ending tag.
-
-When auto-escaping is in effect, all variable content has HTML escaping applied
-to it before placing the result into the output (but after any filters have
-been applied). This is equivalent to manually applying the ``escape`` filter
-to each variable.
-
-The only exceptions are variables that are already marked as "safe" from
-escaping, either by the code that populated the variable, or because it has had
-the ``safe`` or ``escape`` filters applied.
-
-Sample usage::
-
- {% autoescape on %}
- {{ body }}
- {% endautoescape %}
-
-.. templatetag:: block
-
-block
-~~~~~
-
-Define a block that can be overridden by child templates. See
-:ref:`Template inheritance <template-inheritance>` for more information.
-
-.. templatetag:: comment
-
-comment
-~~~~~~~
-
-Ignore everything between ``{% comment %}`` and ``{% endcomment %}``
-
-.. templatetag:: csrf_token
-
-csrf_token
-~~~~~~~~~~
-
-.. versionadded:: 1.1.2
-
-In the Django 1.1.X series, this is a no-op tag that returns an empty string for
-future compatibility purposes. In Django 1.2 and later, it is used for CSRF
-protection, as described in the documentation for :doc:`Cross Site Request
-Forgeries </ref/contrib/csrf>`.
-
-.. templatetag:: cycle
-
-cycle
-~~~~~
-
-.. versionchanged:: 1.0
- Cycle among the given strings or variables each time this tag is encountered.
-
-Within a loop, cycles among the given strings each time through the
-loop::
-
- {% for o in some_list %}
- <tr class="{% cycle 'row1' 'row2' %}">
- ...
- </tr>
- {% endfor %}
-
-You can use variables, too. For example, if you have two template variables,
-``rowvalue1`` and ``rowvalue2``, you can cycle between their values like this::
-
- {% for o in some_list %}
- <tr class="{% cycle rowvalue1 rowvalue2 %}">
- ...
- </tr>
- {% endfor %}
-
-Yes, you can mix variables and strings::
-
- {% for o in some_list %}
- <tr class="{% cycle 'row1' rowvalue2 'row3' %}">
- ...
- </tr>
- {% endfor %}
-
-In some cases you might want to refer to the next value of a cycle from
-outside of a loop. To do this, just give the ``{% cycle %}`` tag a name, using
-"as", like this::
-
- {% cycle 'row1' 'row2' as rowcolors %}
-
-From then on, you can insert the current value of the cycle wherever you'd like
-in your template::
-
- <tr class="{% cycle rowcolors %}">...</tr>
- <tr class="{% cycle rowcolors %}">...</tr>
-
-You can use any number of values in a ``{% cycle %}`` tag, separated by spaces.
-Values enclosed in single (``'``) or double quotes (``"``) are treated as
-string literals, while values without quotes are treated as template variables.
-
-Note that the variables included in the cycle will not be escaped.
-This is because template tags do not escape their content. Any HTML or
-Javascript code contained in the printed variable will be rendered
-as-is, which could potentially lead to security issues.
-
-If you need to escape the variables in the cycle, you must do so
-explicitly::
-
- {% filter force_escape %}
- {% cycle var1 var2 var3 %}
- {% endfilter %}
-
-For backwards compatibility, the ``{% cycle %}`` tag supports the much inferior
-old syntax from previous Django versions. You shouldn't use this in any new
-projects, but for the sake of the people who are still using it, here's what it
-looks like::
-
- {% cycle row1,row2,row3 %}
-
-In this syntax, each value gets interpreted as a literal string, and there's no
-way to specify variable values. Or literal commas. Or spaces. Did we mention
-you shouldn't use this syntax in any new projects?
-
-.. templatetag:: debug
-
-debug
-~~~~~
-
-Output a whole load of debugging information, including the current context and
-imported modules.
-
-.. templatetag:: extends
-
-extends
-~~~~~~~
-
-Signal that this template extends a parent template.
-
-This tag can be used in two ways:
-
- * ``{% extends "base.html" %}`` (with quotes) uses the literal value
- ``"base.html"`` as the name of the parent template to extend.
-
- * ``{% extends variable %}`` uses the value of ``variable``. If the variable
- evaluates to a string, Django will use that string as the name of the
- parent template. If the variable evaluates to a ``Template`` object,
- Django will use that object as the parent template.
-
-See :ref:`template-inheritance` for more information.
-
-.. templatetag:: filter
-
-filter
-~~~~~~
-
-Filter the contents of the variable through variable filters.
-
-Filters can also be piped through each other, and they can have arguments --
-just like in variable syntax.
-
-Sample usage::
-
- {% filter force_escape|lower %}
- This text will be HTML-escaped, and will appear in all lowercase.
- {% endfilter %}
-
-.. templatetag:: firstof
-
-firstof
-~~~~~~~
-
-Outputs the first variable passed that is not False, without escaping.
-
-Outputs nothing if all the passed variables are False.
-
-Sample usage::
-
- {% firstof var1 var2 var3 %}
-
-This is equivalent to::
-
- {% if var1 %}
- {{ var1|safe }}
- {% else %}{% if var2 %}
- {{ var2|safe }}
- {% else %}{% if var3 %}
- {{ var3|safe }}
- {% endif %}{% endif %}{% endif %}
-
-You can also use a literal string as a fallback value in case all
-passed variables are False::
-
- {% firstof var1 var2 var3 "fallback value" %}
-
-Note that the variables included in the firstof tag will not be
-escaped. This is because template tags do not escape their content.
-Any HTML or Javascript code contained in the printed variable will be
-rendered as-is, which could potentially lead to security issues.
-
-If you need to escape the variables in the firstof tag, you must do so
-explicitly::
-
- {% filter force_escape %}
- {% firstof var1 var2 var3 "fallback value" %}
- {% endfilter %}
-
-.. templatetag:: for
-
-for
-~~~
-
-Loop over each item in an array. For example, to display a list of athletes
-provided in ``athlete_list``::
-
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% endfor %}
- </ul>
-
-You can loop over a list in reverse by using ``{% for obj in list reversed %}``.
-
-.. versionadded:: 1.0
-
-If you need to loop over a list of lists, you can unpack the values
-in each sub-list into individual variables. For example, if your context
-contains a list of (x,y) coordinates called ``points``, you could use the
-following to output the list of points::
-
- {% for x, y in points %}
- There is a point at {{ x }},{{ y }}
- {% endfor %}
-
-This can also be useful if you need to access the items in a dictionary.
-For example, if your context contained a dictionary ``data``, the following
-would display the keys and values of the dictionary::
-
- {% for key, value in data.items %}
- {{ key }}: {{ value }}
- {% endfor %}
-
-The for loop sets a number of variables available within the loop:
-
- ========================== ================================================
- Variable Description
- ========================== ================================================
- ``forloop.counter`` The current iteration of the loop (1-indexed)
- ``forloop.counter0`` The current iteration of the loop (0-indexed)
- ``forloop.revcounter`` The number of iterations from the end of the
- loop (1-indexed)
- ``forloop.revcounter0`` The number of iterations from the end of the
- loop (0-indexed)
- ``forloop.first`` True if this is the first time through the loop
- ``forloop.last`` True if this is the last time through the loop
- ``forloop.parentloop`` For nested loops, this is the loop "above" the
- current one
- ========================== ================================================
-
-for ... empty
-^^^^^^^^^^^^^
-
-.. versionadded:: 1.1
-
-The ``for`` tag can take an optional ``{% empty %}`` clause that will be
-displayed if the given array is empty or could not be found::
-
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% empty %}
- <li>Sorry, no athlete in this list!</li>
- {% endfor %}
- <ul>
-
-The above is equivalent to -- but shorter, cleaner, and possibly faster
-than -- the following::
-
- <ul>
- {% if athlete_list %}
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% endfor %}
- {% else %}
- <li>Sorry, no athletes in this list.</li>
- {% endif %}
- </ul>
-
-.. templatetag:: if
-
-if
-~~
-
-The ``{% if %}`` tag evaluates a variable, and if that variable is "true" (i.e.
-exists, is not empty, and is not a false boolean value) the contents of the
-block are output::
-
- {% if athlete_list %}
- Number of athletes: {{ athlete_list|length }}
- {% else %}
- No athletes.
- {% endif %}
-
-In the above, if ``athlete_list`` is not empty, the number of athletes will be
-displayed by the ``{{ athlete_list|length }}`` variable.
-
-As you can see, the ``if`` tag can take an optional ``{% else %}`` clause that
-will be displayed if the test fails.
-
-Boolean operators
-^^^^^^^^^^^^^^^^^
-
-``if`` tags may use ``and``, ``or`` or ``not`` to test a number of variables or
-to negate a given variable::
-
- {% if athlete_list and coach_list %}
- Both athletes and coaches are available.
- {% endif %}
-
- {% if not athlete_list %}
- There are no athletes.
- {% endif %}
-
- {% if athlete_list or coach_list %}
- There are some athletes or some coaches.
- {% endif %}
-
- {% if not athlete_list or coach_list %}
- There are no athletes or there are some coaches (OK, so
- writing English translations of boolean logic sounds
- stupid; it's not our fault).
- {% endif %}
-
- {% if athlete_list and not coach_list %}
- There are some athletes and absolutely no coaches.
- {% endif %}
-
-.. versionchanged:: 1.2
-
-Use of both ``and`` and ``or`` clauses within the same tag is allowed, with
-``and`` having higher precedence than ``or`` e.g.::
-
- {% if athlete_list and coach_list or cheerleader_list %}
-
-will be interpreted like:
-
-.. code-block:: python
-
- if (athlete_list and coach_list) or cheerleader_list
-
-Use of actual brackets in the ``if`` tag is invalid syntax. If you need them to
-indicate precedence, you should use nested ``if`` tags.
-
-.. versionadded:: 1.2
-
-
-``if`` tags may also use the operators ``==``, ``!=``, ``<``, ``>``,
-``<=``, ``>=`` and ``in`` which work as follows:
-
-
-``==`` operator
-^^^^^^^^^^^^^^^
-
-Equality. Example::
-
- {% if somevar == "x" %}
- This appears if variable somevar equals the string "x"
- {% endif %}
-
-``!=`` operator
-^^^^^^^^^^^^^^^
-
-Inequality. Example::
-
- {% if somevar != "x" %}
- This appears if variable somevar does not equal the string "x",
- or if somevar is not found in the context
- {% endif %}
-
-``<`` operator
-^^^^^^^^^^^^^^
-
-Less than. Example::
-
- {% if somevar < 100 %}
- This appears if variable somevar is less than 100.
- {% endif %}
-
-``>`` operator
-^^^^^^^^^^^^^^
-
-Greater than. Example::
-
- {% if somevar > 0 %}
- This appears if variable somevar is greater than 0.
- {% endif %}
-
-``<=`` operator
-^^^^^^^^^^^^^^^
-
-Less than or equal to. Example::
-
- {% if somevar <= 100 %}
- This appears if variable somevar is less than 100 or equal to 100.
- {% endif %}
-
-``>=`` operator
-^^^^^^^^^^^^^^^
-
-Greater than or equal to. Example::
-
- {% if somevar >= 1 %}
- This appears if variable somevar is greater than 1 or equal to 1.
- {% endif %}
-
-``in`` operator
-^^^^^^^^^^^^^^^
-
-Contained within. This operator is supported by many Python containers to test
-whether the given value is in the container. The following are some examples of
-how ``x in y`` will be interpreted::
-
- {% if "bc" in "abcdef" %}
- This appears since "bc" is a substring of "abcdef"
- {% endif %}
-
- {% if "hello" in greetings %}
- If greetings is a list or set, one element of which is the string
- "hello", this will appear.
- {% endif %}
-
- {% if user in users %}
- If users is a QuerySet, this will appear if user is an
- instance that belongs to the QuerySet.
- {% endif %}
-
-``not in`` operator
-~~~~~~~~~~~~~~~~~~~~
-
-Not contained within. This is the negation of the ``in`` operator.
-
-
-The comparison operators cannot be 'chained' like in Python or in mathematical
-notation. For example, instead of using::
-
- {% if a > b > c %} (WRONG)
-
-you should use::
-
- {% if a > b and b > c %}
-
-
-Filters
-^^^^^^^
-
-You can also use filters in the ``if`` expression. For example::
-
- {% if messages|length >= 100 %}
- You have lots of messages today!
- {% endif %}
-
-Complex expressions
-^^^^^^^^^^^^^^^^^^^
-
-All of the above can be combined to form complex expressions. For such
-expressions, it can be important to know how the operators are grouped when the
-expression is evaluated - that is, the precedence rules. The precedence of the
-operators, from lowest to highest, is as follows:
-
- * ``or``
- * ``and``
- * ``not``
- * ``in``
- * ``==``, ``!=``, ``<``, ``>``,``<=``, ``>=``
-
-(This follows Python exactly). So, for example, the following complex if tag:
-
- {% if a == b or c == d and e %}
-
-...will be interpreted as:
-
-.. code-block:: python
-
- (a == b) or ((c == d) and e)
-
-If you need different precedence, you will need to use nested if tags. Sometimes
-that is better for clarity anyway, for the sake of those who do not know the
-precedence rules.
-
-
-.. templatetag:: ifchanged
-
-ifchanged
-~~~~~~~~~
-
-Check if a value has changed from the last iteration of a loop.
-
-The 'ifchanged' block tag is used within a loop. It has two possible uses.
-
-1. Checks its own rendered contents against its previous state and only
- displays the content if it has changed. For example, this displays a list of
- days, only displaying the month if it changes::
-
- <h1>Archive for {{ year }}</h1>
-
- {% for date in days %}
- {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
- <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
- {% endfor %}
-
-2. If given a variable, check whether that variable has changed. For
- example, the following shows the date every time it changes, but
- only shows the hour if both the hour and the date has changed::
-
- {% for date in days %}
- {% ifchanged date.date %} {{ date.date }} {% endifchanged %}
- {% ifchanged date.hour date.date %}
- {{ date.hour }}
- {% endifchanged %}
- {% endfor %}
-
-The ``ifchanged`` tag can also take an optional ``{% else %}`` clause that
-will be displayed if the value has not changed::
-
- {% for match in matches %}
- <div style="background-color:
- {% ifchanged match.ballot_id %}
- {% cycle "red" "blue" %}
- {% else %}
- grey
- {% endifchanged %}
- ">{{ match }}</div>
- {% endfor %}
-
-.. templatetag:: ifequal
-
-ifequal
-~~~~~~~
-
-Output the contents of the block if the two arguments equal each other.
-
-Example::
-
- {% ifequal user.id comment.user_id %}
- ...
- {% endifequal %}
-
-As in the ``{% if %}`` tag, an ``{% else %}`` clause is optional.
-
-The arguments can be hard-coded strings, so the following is valid::
-
- {% ifequal user.username "adrian" %}
- ...
- {% endifequal %}
-
-It is only possible to compare an argument to template variables or strings.
-You cannot check for equality with Python objects such as ``True`` or
-``False``. If you need to test if something is true or false, use the ``if``
-tag instead.
-
-.. versionadded:: 1.2
- An alternative to the ``ifequal`` tag is to use the :ttag:`if` tag and the ``==`` operator.
-
-.. templatetag:: ifnotequal
-
-ifnotequal
-~~~~~~~~~~
-
-Just like ``ifequal``, except it tests that the two arguments are not equal.
-
-.. versionadded:: 1.2
- An alternative to the ``ifnotequal`` tag is to use the :ttag:`if` tag and the ``!=`` operator.
-
-.. templatetag:: include
-
-include
-~~~~~~~
-
-Loads a template and renders it with the current context. This is a way of
-"including" other templates within a template.
-
-The template name can either be a variable or a hard-coded (quoted) string,
-in either single or double quotes.
-
-This example includes the contents of the template ``"foo/bar.html"``::
-
- {% include "foo/bar.html" %}
-
-This example includes the contents of the template whose name is contained in
-the variable ``template_name``::
-
- {% include template_name %}
-
-An included template is rendered with the context of the template that's
-including it. This example produces the output ``"Hello, John"``:
-
- * Context: variable ``person`` is set to ``"john"``.
- * Template::
-
- {% include "name_snippet.html" %}
-
- * The ``name_snippet.html`` template::
-
- Hello, {{ person }}
-
-See also: ``{% ssi %}``.
-
-.. note::
- The :ttag:`include` tag should be considered as an implementation of
- "render this subtemplate and include the HTML", not as "parse this
- subtemplate and include its contents as if it were part of the parent".
- This means that there is no shared state between included templates --
- each include is a completely independent rendering process.
-
-.. templatetag:: load
-
-load
-~~~~
-
-Load a custom template tag set.
-
-See :doc:`Custom tag and filter libraries </howto/custom-template-tags>` for more information.
-
-.. templatetag:: now
-
-now
-~~~
-
-Display the current date and/or time, according to the given string.
-
-Given format can be one of the predefined ones ``DATE_FORMAT``,
-``DATETIME_FORMAT``, ``SHORT_DATE_FORMAT`` or ``SHORT_DATETIME_FORMAT``,
-or a custom format, same as the :tfilter:`date` filter. Note that predefined
-formats may vary depending on the current locale.
-
-Example::
-
- It is {% now "jS F Y H:i" %}
-
-Note that you can backslash-escape a format string if you want to use the
-"raw" value. In this example, "f" is backslash-escaped, because otherwise
-"f" is a format string that displays the time. The "o" doesn't need to be
-escaped, because it's not a format character::
-
- It is the {% now "jS o\f F" %}
-
-This would display as "It is the 4th of September".
-
-.. templatetag:: regroup
-
-regroup
-~~~~~~~
-
-Regroup a list of alike objects by a common attribute.
-
-This complex tag is best illustrated by use of an example: say that ``people``
-is a list of people represented by dictionaries with ``first_name``,
-``last_name``, and ``gender`` keys:
-
-.. code-block:: python
-
- people = [
- {'first_name': 'George', 'last_name': 'Bush', 'gender': 'Male'},
- {'first_name': 'Bill', 'last_name': 'Clinton', 'gender': 'Male'},
- {'first_name': 'Margaret', 'last_name': 'Thatcher', 'gender': 'Female'},
- {'first_name': 'Condoleezza', 'last_name': 'Rice', 'gender': 'Female'},
- {'first_name': 'Pat', 'last_name': 'Smith', 'gender': 'Unknown'},
- ]
-
-...and you'd like to display a hierarchical list that is ordered by gender,
-like this:
-
- * Male:
- * George Bush
- * Bill Clinton
- * Female:
- * Margaret Thatcher
- * Condoleezza Rice
- * Unknown:
- * Pat Smith
-
-You can use the ``{% regroup %}`` tag to group the list of people by gender.
-The following snippet of template code would accomplish this::
-
- {% regroup people by gender as gender_list %}
-
- <ul>
- {% for gender in gender_list %}
- <li>{{ gender.grouper }}
- <ul>
- {% for item in gender.list %}
- <li>{{ item.first_name }} {{ item.last_name }}</li>
- {% endfor %}
- </ul>
- </li>
- {% endfor %}
- </ul>
-
-Let's walk through this example. ``{% regroup %}`` takes three arguments: the
-list you want to regroup, the attribute to group by, and the name of the
-resulting list. Here, we're regrouping the ``people`` list by the ``gender``
-attribute and calling the result ``gender_list``.
-
-``{% regroup %}`` produces a list (in this case, ``gender_list``) of
-**group objects**. Each group object has two attributes:
-
- * ``grouper`` -- the item that was grouped by (e.g., the string "Male" or
- "Female").
- * ``list`` -- a list of all items in this group (e.g., a list of all people
- with gender='Male').
-
-Note that ``{% regroup %}`` does not order its input! Our example relies on
-the fact that the ``people`` list was ordered by ``gender`` in the first place.
-If the ``people`` list did *not* order its members by ``gender``, the regrouping
-would naively display more than one group for a single gender. For example,
-say the ``people`` list was set to this (note that the males are not grouped
-together):
-
-.. code-block:: python
-
- people = [
- {'first_name': 'Bill', 'last_name': 'Clinton', 'gender': 'Male'},
- {'first_name': 'Pat', 'last_name': 'Smith', 'gender': 'Unknown'},
- {'first_name': 'Margaret', 'last_name': 'Thatcher', 'gender': 'Female'},
- {'first_name': 'George', 'last_name': 'Bush', 'gender': 'Male'},
- {'first_name': 'Condoleezza', 'last_name': 'Rice', 'gender': 'Female'},
- ]
-
-With this input for ``people``, the example ``{% regroup %}`` template code
-above would result in the following output:
-
- * Male:
- * Bill Clinton
- * Unknown:
- * Pat Smith
- * Female:
- * Margaret Thatcher
- * Male:
- * George Bush
- * Female:
- * Condoleezza Rice
-
-The easiest solution to this gotcha is to make sure in your view code that the
-data is ordered according to how you want to display it.
-
-Another solution is to sort the data in the template using the ``dictsort``
-filter, if your data is in a list of dictionaries::
-
- {% regroup people|dictsort:"gender" by gender as gender_list %}
-
-.. templatetag:: spaceless
-
-spaceless
-~~~~~~~~~
-
-Removes whitespace between HTML tags. This includes tab
-characters and newlines.
-
-Example usage::
-
- {% spaceless %}
- <p>
- <a href="foo/">Foo</a>
- </p>
- {% endspaceless %}
-
-This example would return this HTML::
-
- <p><a href="foo/">Foo</a></p>
-
-Only space between *tags* is removed -- not space between tags and text. In
-this example, the space around ``Hello`` won't be stripped::
-
- {% spaceless %}
- <strong>
- Hello
- </strong>
- {% endspaceless %}
-
-.. templatetag:: ssi
-
-ssi
-~~~
-
-Output the contents of a given file into the page.
-
-Like a simple "include" tag, ``{% ssi %}`` includes the contents of another
-file -- which must be specified using an absolute path -- in the current
-page::
-
- {% ssi /home/html/ljworld.com/includes/right_generic.html %}
-
-If the optional "parsed" parameter is given, the contents of the included
-file are evaluated as template code, within the current context::
-
- {% ssi /home/html/ljworld.com/includes/right_generic.html parsed %}
-
-Note that if you use ``{% ssi %}``, you'll need to define
-:setting:`ALLOWED_INCLUDE_ROOTS` in your Django settings, as a security measure.
-
-See also: ``{% include %}``.
-
-.. templatetag:: templatetag
-
-templatetag
-~~~~~~~~~~~
-
-Output one of the syntax characters used to compose template tags.
-
-Since the template system has no concept of "escaping", to display one of the
-bits used in template tags, you must use the ``{% templatetag %}`` tag.
-
-The argument tells which template bit to output:
-
- ================== =======
- Argument Outputs
- ================== =======
- ``openblock`` ``{%``
- ``closeblock`` ``%}``
- ``openvariable`` ``{{``
- ``closevariable`` ``}}``
- ``openbrace`` ``{``
- ``closebrace`` ``}``
- ``opencomment`` ``{#``
- ``closecomment`` ``#}``
- ================== =======
-
-.. templatetag:: url
-
-url
-~~~
-
-Returns an absolute path reference (a URL without the domain name) matching a
-given view function and optional parameters. This is a way to output links
-without violating the DRY principle by having to hard-code URLs in your
-templates::
-
- {% url path.to.some_view v1 v2 %}
-
-The first argument is a path to a view function in the format
-``package.package.module.function``. Additional arguments are optional and
-should be space-separated values that will be used as arguments in the URL.
-The example above shows passing positional arguments. Alternatively you may
-use keyword syntax::
-
- {% url path.to.some_view arg1=v1 arg2=v2 %}
-
-Do not mix both positional and keyword syntax in a single call. All arguments
-required by the URLconf should be present.
-
-For example, suppose you have a view, ``app_views.client``, whose URLconf
-takes a client ID (here, ``client()`` is a method inside the views file
-``app_views.py``). The URLconf line might look like this:
-
-.. code-block:: python
-
- ('^client/(\d+)/$', 'app_views.client')
-
-If this app's URLconf is included into the project's URLconf under a path
-such as this:
-
-.. code-block:: python
-
- ('^clients/', include('project_name.app_name.urls'))
-
-...then, in a template, you can create a link to this view like this::
-
- {% url app_views.client client.id %}
-
-The template tag will output the string ``/clients/client/123/``.
-
-.. versionadded:: 1.0
-
-If you're using :ref:`named URL patterns <naming-url-patterns>`, you can
-refer to the name of the pattern in the ``url`` tag instead of using the
-path to the view.
-
-Note that if the URL you're reversing doesn't exist, you'll get an
-:exc:`NoReverseMatch` exception raised, which will cause your site to display an
-error page.
-
-.. versionadded:: 1.0
-
-If you'd like to retrieve a URL without displaying it, you can use a slightly
-different call::
-
-
- {% url path.to.view arg arg2 as the_url %}
-
- <a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
-
-This ``{% url ... as var %}`` syntax will *not* cause an error if the view is
-missing. In practice you'll use this to link to views that are optional::
-
- {% url path.to.view as the_url %}
- {% if the_url %}
- <a href="{{ the_url }}">Link to optional stuff</a>
- {% endif %}
-
-.. versionadded:: 1.1
-
-If you'd like to retrieve a namespaced URL, specify the fully qualified name::
-
- {% url myapp:view-name %}
-
-This will follow the normal :ref:`namespaced URL resolution strategy
-<topics-http-reversing-url-namespaces>`, including using any hints provided
-by the context as to the current application.
-
-.. versionchanged:: 1.2
-
-For backwards compatibility, the ``{% url %}`` tag also supports the
-use of commas to separate arguments. You shouldn't use this in any new
-projects, but for the sake of the people who are still using it,
-here's what it looks like::
-
- {% url path.to.view arg,arg2 %}
- {% url path.to.view arg, arg2 %}
-
-This syntax doesn't support the use of literal commas, or or equals
-signs. Did we mention you shouldn't use this syntax in any new
-projects?
-
-.. templatetag:: widthratio
-
-widthratio
-~~~~~~~~~~
-
-For creating bar charts and such, this tag calculates the ratio of a given value
-to a maximum value, and then applies that ratio to a constant.
-
-For example::
-
- <img src="bar.gif" height="10" width="{% widthratio this_value max_value 100 %}" />
-
-Above, if ``this_value`` is 175 and ``max_value`` is 200, the image in the
-above example will be 88 pixels wide (because 175/200 = .875; .875 * 100 = 87.5
-which is rounded up to 88).
-
-.. templatetag:: with
-
-with
-~~~~
-
-.. versionadded:: 1.0
-
-Caches a complex variable under a simpler name. This is useful when accessing
-an "expensive" method (e.g., one that hits the database) multiple times.
-
-For example::
-
- {% with business.employees.count as total %}
- {{ total }} employee{{ total|pluralize }}
- {% endwith %}
-
-The populated variable (in the example above, ``total``) is only available
-between the ``{% with %}`` and ``{% endwith %}`` tags.
-
-.. _ref-templates-builtins-filters:
-
-Built-in filter reference
--------------------------
-
-.. templatefilter:: add
-
-add
-~~~
-
-Adds the argument to the value.
-
-For example::
-
- {{ value|add:"2" }}
-
-If ``value`` is ``4``, then the output will be ``6``.
-
-.. versionchanged:: 1.2
- The following behavior didn't exist in previous Django versions.
-
-This filter will first try to coerce both values to integers. If this fails,
-it'll attempt to add the values together anyway. This will work on some data
-types (strings, list, etc.) and fail on others. If it fails, the result will
-be an empty string.
-
-For example, if we have::
-
- {{ first|add:second }}
-
-and ``first`` is ``[1, 2, 3]`` and ``second`` is ``[4, 5, 6]``, then the
-output will be ``[1, 2, 3, 4, 5, 6]``.
-
-.. warning::
-
- Strings that can be coerced to integers will be **summed**, not
- concatenated, as in the first example above.
-
-.. templatefilter:: addslashes
-
-addslashes
-~~~~~~~~~~
-
-Adds slashes before quotes. Useful for escaping strings in CSV, for example.
-
-For example::
-
- {{ value|addslashes }}
-
-If ``value`` is ``"I'm using Django"``, the output will be ``"I\'m using Django"``.
-
-.. templatefilter:: capfirst
-
-capfirst
-~~~~~~~~
-
-Capitalizes the first character of the value.
-
-For example::
-
- {{ value|capfirst }}
-
-If ``value`` is ``"django"``, the output will be ``"Django"``.
-
-.. templatefilter:: center
-
-center
-~~~~~~
-
-Centers the value in a field of a given width.
-
-For example::
-
- "{{ value|center:"15" }}"
-
-If ``value`` is ``"Django"``, the output will be ``" Django "``.
-
-.. templatefilter:: cut
-
-cut
-~~~
-
-Removes all values of arg from the given string.
-
-For example::
-
- {{ value|cut:" "}}
-
-If ``value`` is ``"String with spaces"``, the output will be ``"Stringwithspaces"``.
-
-.. templatefilter:: date
-
-date
-~~~~
-
-Formats a date according to the given format.
-
-Uses the same format as PHP's ``date()`` function (http://php.net/date)
-with some custom extensions.
-
-Available format strings:
-
- ================ ======================================== =====================
- Format character Description Example output
- ================ ======================================== =====================
- a ``'a.m.'`` or ``'p.m.'`` (Note that ``'a.m.'``
- this is slightly different than PHP's
- output, because this includes periods
- to match Associated Press style.)
- A ``'AM'`` or ``'PM'``. ``'AM'``
- b Month, textual, 3 letters, lowercase. ``'jan'``
- B Not implemented.
- c ISO 8601 Format. ``2008-01-02T10:30:00.000123``
- d Day of the month, 2 digits with ``'01'`` to ``'31'``
- leading zeros.
- D Day of the week, textual, 3 letters. ``'Fri'``
- f Time, in 12-hour hours and minutes, ``'1'``, ``'1:30'``
- with minutes left off if they're zero.
- Proprietary extension.
- F Month, textual, long. ``'January'``
- g Hour, 12-hour format without leading ``'1'`` to ``'12'``
- zeros.
- G Hour, 24-hour format without leading ``'0'`` to ``'23'``
- zeros.
- h Hour, 12-hour format. ``'01'`` to ``'12'``
- H Hour, 24-hour format. ``'00'`` to ``'23'``
- i Minutes. ``'00'`` to ``'59'``
- I Not implemented.
- j Day of the month without leading ``'1'`` to ``'31'``
- zeros.
- l Day of the week, textual, long. ``'Friday'``
- L Boolean for whether it's a leap year. ``True`` or ``False``
- m Month, 2 digits with leading zeros. ``'01'`` to ``'12'``
- M Month, textual, 3 letters. ``'Jan'``
- n Month without leading zeros. ``'1'`` to ``'12'``
- N Month abbreviation in Associated Press ``'Jan.'``, ``'Feb.'``, ``'March'``, ``'May'``
- style. Proprietary extension.
- O Difference to Greenwich time in hours. ``'+0200'``
- P Time, in 12-hour hours, minutes and ``'1 a.m.'``, ``'1:30 p.m.'``, ``'midnight'``, ``'noon'``, ``'12:30 p.m.'``
- 'a.m.'/'p.m.', with minutes left off
- if they're zero and the special-case
- strings 'midnight' and 'noon' if
- appropriate. Proprietary extension.
- r RFC 2822 formatted date. ``'Thu, 21 Dec 2000 16:01:07 +0200'``
- s Seconds, 2 digits with leading zeros. ``'00'`` to ``'59'``
- S English ordinal suffix for day of the ``'st'``, ``'nd'``, ``'rd'`` or ``'th'``
- month, 2 characters.
- t Number of days in the given month. ``28`` to ``31``
- T Time zone of this machine. ``'EST'``, ``'MDT'``
- u Microseconds. ``0`` to ``999999``
- U Seconds since the Unix Epoch
- (January 1 1970 00:00:00 UTC).
- w Day of the week, digits without ``'0'`` (Sunday) to ``'6'`` (Saturday)
- leading zeros.
- W ISO-8601 week number of year, with ``1``, ``53``
- weeks starting on Monday.
- y Year, 2 digits. ``'99'``
- Y Year, 4 digits. ``'1999'``
- z Day of the year. ``0`` to ``365``
- Z Time zone offset in seconds. The ``-43200`` to ``43200``
- offset for timezones west of UTC is
- always negative, and for those east of
- UTC is always positive.
- ================ ======================================== =====================
-
-.. versionadded:: 1.2
-
-The ``c`` and ``u`` format specification characters were added in Django 1.2.
-
-For example::
-
- {{ value|date:"D d M Y" }}
-
-If ``value`` is a ``datetime`` object (e.g., the result of
-``datetime.datetime.now()``), the output will be the string
-``'Wed 09 Jan 2008'``.
-
-The format passed can be one of the predefined ones ``DATE_FORMAT``,
-``DATETIME_FORMAT``, ``SHORT_DATE_FORMAT`` or ``SHORT_DATETIME_FORMAT``, or a
-custom format that uses the format specifiers shown in the table above. Note
-that predefined formats may vary depending on the current locale.
-
-Assuming that :setting:`USE_L10N` is ``True`` and :setting:`LANGUAGE_CODE` is,
-for example, ``"es"``, then for::
-
- {{ value|date:"SHORT_DATE_FORMAT" }}
-
-the output would be the string ``"09/01/2008"`` (the ``"SHORT_DATE_FORMAT"``
-format specifier for the ``es`` locale as shipped with Django is ``"d/m/Y"``).
-
-When used without a format string::
-
- {{ value|date }}
-
-...the formatting string defined in the :setting:`DATE_FORMAT` setting will be
-used, without applying any localization.
-
-.. versionchanged:: 1.2
- Predefined formats can now be influenced by the current locale.
-
-.. templatefilter:: default
-
-default
-~~~~~~~
-
-If value evaluates to ``False``, use given default. Otherwise, use the value.
-
-For example::
-
- {{ value|default:"nothing" }}
-
-If ``value`` is ``""`` (the empty string), the output will be ``nothing``.
-
-.. templatefilter:: default_if_none
-
-default_if_none
-~~~~~~~~~~~~~~~
-
-If (and only if) value is ``None``, use given default. Otherwise, use the
-value.
-
-Note that if an empty string is given, the default value will *not* be used.
-Use the ``default`` filter if you want to fallback for empty strings.
-
-For example::
-
- {{ value|default_if_none:"nothing" }}
-
-If ``value`` is ``None``, the output will be the string ``"nothing"``.
-
-.. templatefilter:: dictsort
-
-dictsort
-~~~~~~~~
-
-Takes a list of dictionaries and returns that list sorted by the key given in
-the argument.
-
-For example::
-
- {{ value|dictsort:"name" }}
-
-If ``value`` is:
-
-.. code-block:: python
-
- [
- {'name': 'zed', 'age': 19},
- {'name': 'amy', 'age': 22},
- {'name': 'joe', 'age': 31},
- ]
-
-then the output would be:
-
-.. code-block:: python
-
- [
- {'name': 'amy', 'age': 22},
- {'name': 'joe', 'age': 31},
- {'name': 'zed', 'age': 19},
- ]
-
-.. templatefilter:: dictsortreversed
-
-dictsortreversed
-~~~~~~~~~~~~~~~~
-
-Takes a list of dictionaries and returns that list sorted in reverse order by
-the key given in the argument. This works exactly the same as the above filter,
-but the returned value will be in reverse order.
-
-.. templatefilter:: divisibleby
-
-divisibleby
-~~~~~~~~~~~
-
-Returns ``True`` if the value is divisible by the argument.
-
-For example::
-
- {{ value|divisibleby:"3" }}
-
-If ``value`` is ``21``, the output would be ``True``.
-
-.. templatefilter:: escape
-
-escape
-~~~~~~
-
-Escapes a string's HTML. Specifically, it makes these replacements:
-
- * ``<`` is converted to ``&lt;``
- * ``>`` is converted to ``&gt;``
- * ``'`` (single quote) is converted to ``&#39;``
- * ``"`` (double quote) is converted to ``&quot;``
- * ``&`` is converted to ``&amp;``
-
-The escaping is only applied when the string is output, so it does not matter
-where in a chained sequence of filters you put ``escape``: it will always be
-applied as though it were the last filter. If you want escaping to be applied
-immediately, use the ``force_escape`` filter.
-
-Applying ``escape`` to a variable that would normally have auto-escaping
-applied to the result will only result in one round of escaping being done. So
-it is safe to use this function even in auto-escaping environments. If you want
-multiple escaping passes to be applied, use the ``force_escape`` filter.
-
-.. versionchanged:: 1.0
- Due to auto-escaping, the behavior of this filter has changed slightly.
- The replacements are only made once, after
- all other filters are applied -- including filters before and after it.
-
-.. templatefilter:: escapejs
-
-escapejs
-~~~~~~~~
-
-.. versionadded:: 1.0
-
-Escapes characters for use in JavaScript strings. This does *not* make the
-string safe for use in HTML, but does protect you from syntax errors when using
-templates to generate JavaScript/JSON.
-
-For example::
-
- {{ value|escapejs }}
-
-If ``value`` is ``"testing\r\njavascript \'string" <b>escaping</b>"``,
-the output will be ``"testing\\u000D\\u000Ajavascript \\u0027string\\u0022 \\u003Cb\\u003Eescaping\\u003C/b\\u003E"``.
-
-.. templatefilter:: filesizeformat
-
-filesizeformat
-~~~~~~~~~~~~~~
-
-Format the value like a 'human-readable' file size (i.e. ``'13 KB'``,
-``'4.1 MB'``, ``'102 bytes'``, etc).
-
-For example::
-
- {{ value|filesizeformat }}
-
-If ``value`` is 123456789, the output would be ``117.7 MB``.
-
-.. templatefilter:: first
-
-first
-~~~~~
-
-Returns the first item in a list.
-
-For example::
-
- {{ value|first }}
-
-If ``value`` is the list ``['a', 'b', 'c']``, the output will be ``'a'``.
-
-.. templatefilter:: fix_ampersands
-
-fix_ampersands
-~~~~~~~~~~~~~~
-
-.. versionchanged:: 1.0
- This is rarely useful as ampersands are now automatically escaped. See escape_ for more information.
-
-Replaces ampersands with ``&amp;`` entities.
-
-For example::
-
- {{ value|fix_ampersands }}
-
-If ``value`` is ``Tom & Jerry``, the output will be ``Tom &amp; Jerry``.
-
-.. templatefilter:: floatformat
-
-floatformat
-~~~~~~~~~~~
-
-When used without an argument, rounds a floating-point number to one decimal
-place -- but only if there's a decimal part to be displayed. For example:
-
-============ =========================== ========
-``value`` Template Output
-============ =========================== ========
-``34.23234`` ``{{ value|floatformat }}`` ``34.2``
-``34.00000`` ``{{ value|floatformat }}`` ``34``
-``34.26000`` ``{{ value|floatformat }}`` ``34.3``
-============ =========================== ========
-
-If used with a numeric integer argument, ``floatformat`` rounds a number to
-that many decimal places. For example:
-
-============ ============================= ==========
-``value`` Template Output
-============ ============================= ==========
-``34.23234`` ``{{ value|floatformat:3 }}`` ``34.232``
-``34.00000`` ``{{ value|floatformat:3 }}`` ``34.000``
-``34.26000`` ``{{ value|floatformat:3 }}`` ``34.260``
-============ ============================= ==========
-
-If the argument passed to ``floatformat`` is negative, it will round a number
-to that many decimal places -- but only if there's a decimal part to be
-displayed. For example:
-
-============ ================================ ==========
-``value`` Template Output
-============ ================================ ==========
-``34.23234`` ``{{ value|floatformat:"-3" }}`` ``34.232``
-``34.00000`` ``{{ value|floatformat:"-3" }}`` ``34``
-``34.26000`` ``{{ value|floatformat:"-3" }}`` ``34.260``
-============ ================================ ==========
-
-Using ``floatformat`` with no argument is equivalent to using ``floatformat``
-with an argument of ``-1``.
-
-.. templatefilter:: force_escape
-
-force_escape
-~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-Applies HTML escaping to a string (see the ``escape`` filter for details).
-This filter is applied *immediately* and returns a new, escaped string. This
-is useful in the rare cases where you need multiple escaping or want to apply
-other filters to the escaped results. Normally, you want to use the ``escape``
-filter.
-
-.. templatefilter:: get_digit
-
-get_digit
-~~~~~~~~~
-
-Given a whole number, returns the requested digit, where 1 is the right-most
-digit, 2 is the second-right-most digit, etc. Returns the original value for
-invalid input (if input or argument is not an integer, or if argument is less
-than 1). Otherwise, output is always an integer.
-
-For example::
-
- {{ value|get_digit:"2" }}
-
-If ``value`` is ``123456789``, the output will be ``8``.
-
-.. templatefilter:: iriencode
-
-iriencode
-~~~~~~~~~
-
-Converts an IRI (Internationalized Resource Identifier) to a string that is
-suitable for including in a URL. This is necessary if you're trying to use
-strings containing non-ASCII characters in a URL.
-
-It's safe to use this filter on a string that has already gone through the
-``urlencode`` filter.
-
-For example::
-
- {{ value|iriencode }}
-
-If ``value`` is ``"?test=1&me=2"``, the output will be ``"?test=1&amp;me=2"``.
-
-.. templatefilter:: join
-
-join
-~~~~
-
-Joins a list with a string, like Python's ``str.join(list)``
-
-For example::
-
- {{ value|join:" // " }}
-
-If ``value`` is the list ``['a', 'b', 'c']``, the output will be the string
-``"a // b // c"``.
-
-.. templatefilter:: last
-
-last
-~~~~
-
-.. versionadded:: 1.0
-
-Returns the last item in a list.
-
-For example::
-
- {{ value|last }}
-
-If ``value`` is the list ``['a', 'b', 'c', 'd']``, the output will be the string
-``"d"``.
-
-.. templatefilter:: length
-
-length
-~~~~~~
-
-Returns the length of the value. This works for both strings and lists.
-
-For example::
-
- {{ value|length }}
-
-If ``value`` is ``['a', 'b', 'c', 'd']``, the output will be ``4``.
-
-.. templatefilter:: length_is
-
-length_is
-~~~~~~~~~
-
-Returns ``True`` if the value's length is the argument, or ``False`` otherwise.
-
-For example::
-
- {{ value|length_is:"4" }}
-
-If ``value`` is ``['a', 'b', 'c', 'd']``, the output will be ``True``.
-
-.. templatefilter:: linebreaks
-
-linebreaks
-~~~~~~~~~~
-
-Replaces line breaks in plain text with appropriate HTML; a single
-newline becomes an HTML line break (``<br />``) and a new line
-followed by a blank line becomes a paragraph break (``</p>``).
-
-For example::
-
- {{ value|linebreaks }}
-
-If ``value`` is ``Joel\nis a slug``, the output will be ``<p>Joel<br />is a
-slug</p>``.
-
-.. templatefilter:: linebreaksbr
-
-linebreaksbr
-~~~~~~~~~~~~
-
-Converts all newlines in a piece of plain text to HTML line breaks
-(``<br />``).
-
-For example::
-
- {{ value|linebreaksbr }}
-
-If ``value`` is ``Joel\nis a slug``, the output will be ``Joel<br />is a
-slug``.
-
-.. templatefilter:: linenumbers
-
-linenumbers
-~~~~~~~~~~~
-
-Displays text with line numbers.
-
-For example::
-
- {{ value|linenumbers }}
-
-If ``value`` is::
-
- one
- two
- three
-
-the output will be::
-
- 1. one
- 2. two
- 3. three
-
-.. templatefilter:: ljust
-
-ljust
-~~~~~
-
-Left-aligns the value in a field of a given width.
-
-**Argument:** field size
-
-For example::
-
- "{{ value|ljust:"10" }}"
-
-If ``value`` is ``Django``, the output will be ``"Django "``.
-
-.. templatefilter:: lower
-
-lower
-~~~~~
-
-Converts a string into all lowercase.
-
-For example::
-
- {{ value|lower }}
-
-If ``value`` is ``Still MAD At Yoko``, the output will be ``still mad at yoko``.
-
-.. templatefilter:: make_list
-
-make_list
-~~~~~~~~~
-
-Returns the value turned into a list. For an integer, it's a list of
-digits. For a string, it's a list of characters.
-
-For example::
-
- {{ value|make_list }}
-
-If ``value`` is the string ``"Joel"``, the output would be the list
-``[u'J', u'o', u'e', u'l']``. If ``value`` is ``123``, the output will be the
-list ``[1, 2, 3]``.
-
-.. templatefilter:: phone2numeric
-
-phone2numeric
-~~~~~~~~~~~~~
-
-Converts a phone number (possibly containing letters) to its numerical
-equivalent.
-
-The input doesn't have to be a valid phone number. This will happily convert
-any string.
-
-For example::
-
- {{ value|phone2numeric }}
-
-If ``value`` is ``800-COLLECT``, the output will be ``800-2655328``.
-
-.. templatefilter:: pluralize
-
-pluralize
-~~~~~~~~~
-
-Returns a plural suffix if the value is not 1. By default, this suffix is ``'s'``.
-
-Example::
-
- You have {{ num_messages }} message{{ num_messages|pluralize }}.
-
-If ``num_messages`` is ``1``, the output will be ``You have 1 message.``
-If ``num_messages`` is ``2`` the output will be ``You have 2 messages.``
-
-For words that require a suffix other than ``'s'``, you can provide an alternate
-suffix as a parameter to the filter.
-
-Example::
-
- You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.
-
-For words that don't pluralize by simple suffix, you can specify both a
-singular and plural suffix, separated by a comma.
-
-Example::
-
- You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
-
-.. templatefilter:: pprint
-
-pprint
-~~~~~~
-
-A wrapper around `pprint.pprint`__ -- for debugging, really.
-
-__ http://docs.python.org/library/pprint.html
-
-.. templatefilter:: random
-
-random
-~~~~~~
-
-Returns a random item from the given list.
-
-For example::
-
- {{ value|random }}
-
-If ``value`` is the list ``['a', 'b', 'c', 'd']``, the output could be ``"b"``.
-
-.. templatefilter:: removetags
-
-removetags
-~~~~~~~~~~
-
-Removes a space-separated list of [X]HTML tags from the output.
-
-For example::
-
- {{ value|removetags:"b span"|safe }}
-
-If ``value`` is ``"<b>Joel</b> <button>is</button> a <span>slug</span>"`` the
-output will be ``"Joel <button>is</button> a slug"``.
-
-Note that this filter is case-sensitive.
-
-If ``value`` is ``"<B>Joel</B> <button>is</button> a <span>slug</span>"`` the
-output will be ``"<B>Joel</B> <button>is</button> a slug"``.
-
-.. templatefilter:: rjust
-
-rjust
-~~~~~
-
-Right-aligns the value in a field of a given width.
-
-**Argument:** field size
-
-For example::
-
- "{{ value|rjust:"10" }}"
-
-If ``value`` is ``Django``, the output will be ``" Django"``.
-
-.. templatefilter:: safe
-
-safe
-~~~~
-
-Marks a string as not requiring further HTML escaping prior to output. When
-autoescaping is off, this filter has no effect.
-
-.. note::
-
- If you are chaining filters, a filter applied after ``safe`` can
- make the contents unsafe again. For example, the following code
- prints the variable as is, unescaped:
-
- .. code-block:: html+django
-
- {{ var|safe|escape }}
-
-.. templatefilter:: safeseq
-
-safeseq
-~~~~~~~
-
-Applies the :tfilter:`safe` filter to each element of a sequence. Useful in
-conjunction with other filters that operate on sequences, such as
-:tfilter:`join`. For example::
-
- {{ some_list|safeseq|join:", " }}
-
-You couldn't use the :tfilter:`safe` filter directly in this case, as it would
-first convert the variable into a string, rather than working with the
-individual elements of the sequence.
-
-.. templatefilter:: slice
-
-slice
-~~~~~
-
-Returns a slice of the list.
-
-Uses the same syntax as Python's list slicing. See
-http://diveintopython.org/native_data_types/lists.html#odbchelper.list.slice
-for an introduction.
-
-Example::
-
- {{ some_list|slice:":2" }}
-
-If ``some_list`` is ``['a', 'b', 'c']``, the output will be ``['a', 'b']``.
-
-.. templatefilter:: slugify
-
-slugify
-~~~~~~~
-
-Converts to lowercase, removes non-word characters (alphanumerics and
-underscores) and converts spaces to hyphens. Also strips leading and trailing
-whitespace.
-
-For example::
-
- {{ value|slugify }}
-
-If ``value`` is ``"Joel is a slug"``, the output will be ``"joel-is-a-slug"``.
-
-.. templatefilter:: stringformat
-
-stringformat
-~~~~~~~~~~~~
-
-Formats the variable according to the argument, a string formatting specifier.
-This specifier uses Python string formatting syntax, with the exception that
-the leading "%" is dropped.
-
-See http://docs.python.org/library/stdtypes.html#string-formatting-operations
-for documentation of Python string formatting
-
-For example::
-
- {{ value|stringformat:"s" }}
-
-If ``value`` is ``"Joel is a slug"``, the output will be ``"Joel is a slug"``.
-
-.. templatefilter:: striptags
-
-striptags
-~~~~~~~~~
-
-Strips all [X]HTML tags.
-
-For example::
-
- {{ value|striptags }}
-
-If ``value`` is ``"<b>Joel</b> <button>is</button> a <span>slug</span>"``, the
-output will be ``"Joel is a slug"``.
-
-.. templatefilter:: time
-
-time
-~~~~
-
-Formats a time according to the given format.
-
-Given format can be the predefined one ``TIME_FORMAT``, or a custom format,
-same as the :tfilter:`date` filter. Note that the predefined format is locale-
-dependant.
-
-The time filter will only accept parameters in the format string that relate
-to the time of day, not the date (for obvious reasons). If you need to
-format a date, use the :tfilter:`date` filter.
-
-For example::
-
- {{ value|time:"H:i" }}
-
-If ``value`` is equivalent to ``datetime.datetime.now()``, the output will be
-the string ``"01:23"``.
-
-Another example:
-
-Assuming that :setting:`USE_L10N` is ``True`` and :setting:`LANGUAGE_CODE` is,
-for example, ``"de"``, then for::
-
- {{ value|time:"TIME_FORMAT" }}
-
-the output will be the string ``"01:23:00"`` (The ``"TIME_FORMAT"`` format
-specifier for the ``de`` locale as shipped with Django is ``"H:i:s"``).
-
-When used without a format string::
-
- {{ value|time }}
-
-...the formatting string defined in the :setting:`TIME_FORMAT` setting will be
-used, without applying any localization.
-
-.. versionchanged:: 1.2
- Predefined formats can now be influenced by the current locale.
-
-.. templatefilter:: timesince
-
-timesince
-~~~~~~~~~
-
-Formats a date as the time since that date (e.g., "4 days, 6 hours").
-
-Takes an optional argument that is a variable containing the date to use as
-the comparison point (without the argument, the comparison point is *now*).
-For example, if ``blog_date`` is a date instance representing midnight on 1
-June 2006, and ``comment_date`` is a date instance for 08:00 on 1 June 2006,
-then ``{{ blog_date|timesince:comment_date }}`` would return "8 hours".
-
-Comparing offset-naive and offset-aware datetimes will return an empty string.
-
-Minutes is the smallest unit used, and "0 minutes" will be returned for any
-date that is in the future relative to the comparison point.
-
-.. templatefilter:: timeuntil
-
-timeuntil
-~~~~~~~~~
-
-Similar to ``timesince``, except that it measures the time from now until the
-given date or datetime. For example, if today is 1 June 2006 and
-``conference_date`` is a date instance holding 29 June 2006, then
-``{{ conference_date|timeuntil }}`` will return "4 weeks".
-
-Takes an optional argument that is a variable containing the date to use as
-the comparison point (instead of *now*). If ``from_date`` contains 22 June
-2006, then ``{{ conference_date|timeuntil:from_date }}`` will return "1 week".
-
-Comparing offset-naive and offset-aware datetimes will return an empty string.
-
-Minutes is the smallest unit used, and "0 minutes" will be returned for any
-date that is in the past relative to the comparison point.
-
-.. templatefilter:: title
-
-title
-~~~~~
-
-Converts a string into titlecase.
-
-For example::
-
- {{ value|title }}
-
-If ``value`` is ``"my first post"``, the output will be ``"My First Post"``.
-
-.. templatefilter:: truncatewords
-
-truncatewords
-~~~~~~~~~~~~~
-
-Truncates a string after a certain number of words.
-
-**Argument:** Number of words to truncate after
-
-For example::
-
- {{ value|truncatewords:2 }}
-
-If ``value`` is ``"Joel is a slug"``, the output will be ``"Joel is ..."``.
-
-Newlines within the string will be removed.
-
-.. templatefilter:: truncatewords_html
-
-truncatewords_html
-~~~~~~~~~~~~~~~~~~
-
-Similar to ``truncatewords``, except that it is aware of HTML tags. Any tags
-that are opened in the string and not closed before the truncation point, are
-closed immediately after the truncation.
-
-This is less efficient than ``truncatewords``, so should only be used when it
-is being passed HTML text.
-
-For example::
-
- {{ value|truncatewords_html:2 }}
-
-If ``value`` is ``"<p>Joel is a slug</p>"``, the output will be
-``"<p>Joel is ...</p>"``.
-
-Newlines in the HTML content will be preserved.
-
-.. templatefilter:: unordered_list
-
-unordered_list
-~~~~~~~~~~~~~~
-
-Recursively takes a self-nested list and returns an HTML unordered list --
-WITHOUT opening and closing <ul> tags.
-
-.. versionchanged:: 1.0
- The format accepted by ``unordered_list`` has changed to be easier to understand.
-
-The list is assumed to be in the proper format. For example, if ``var`` contains
-``['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]``, then
-``{{ var|unordered_list }}`` would return::
-
- <li>States
- <ul>
- <li>Kansas
- <ul>
- <li>Lawrence</li>
- <li>Topeka</li>
- </ul>
- </li>
- <li>Illinois</li>
- </ul>
- </li>
-
-Note: the previous more restrictive and verbose format is still supported:
-``['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]]``,
-
-.. templatefilter:: upper
-
-upper
-~~~~~
-
-Converts a string into all uppercase.
-
-For example::
-
- {{ value|upper }}
-
-If ``value`` is ``"Joel is a slug"``, the output will be ``"JOEL IS A SLUG"``.
-
-.. templatefilter:: urlencode
-
-urlencode
-~~~~~~~~~
-
-Escapes a value for use in a URL.
-
-For example::
-
- {{ value|urlencode }}
-
-If ``value`` is ``"http://www.example.org/foo?a=b&c=d"``, the output will be
-``"http%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"``.
-
-.. templatefilter:: urlize
-
-urlize
-~~~~~~
-
-Converts URLs in plain text into clickable links.
-
-Note that if ``urlize`` is applied to text that already contains HTML markup,
-things won't work as expected. Apply this filter only to *plain* text.
-
-For example::
-
- {{ value|urlize }}
-
-If ``value`` is ``"Check out www.djangoproject.com"``, the output will be
-``"Check out <a
-href="http://www.djangoproject.com">www.djangoproject.com</a>"``.
-
-.. templatefilter:: urlizetrunc
-
-urlizetrunc
-~~~~~~~~~~~
-
-Converts URLs into clickable links, truncating URLs longer than the given
-character limit.
-
-As with urlize_, this filter should only be applied to *plain* text.
-
-**Argument:** Length to truncate URLs to
-
-For example::
-
- {{ value|urlizetrunc:15 }}
-
-If ``value`` is ``"Check out www.djangoproject.com"``, the output would be
-``'Check out <a
-href="http://www.djangoproject.com">www.djangopr...</a>'``.
-
-.. templatefilter:: wordcount
-
-wordcount
-~~~~~~~~~
-
-Returns the number of words.
-
-For example::
-
- {{ value|wordcount }}
-
-If ``value`` is ``"Joel is a slug"``, the output will be ``4``.
-
-.. templatefilter:: wordwrap
-
-wordwrap
-~~~~~~~~
-
-Wraps words at specified line length.
-
-**Argument:** number of characters at which to wrap the text
-
-For example::
-
- {{ value|wordwrap:5 }}
-
-If ``value`` is ``Joel is a slug``, the output would be::
-
- Joel
- is a
- slug
-
-.. templatefilter:: yesno
-
-yesno
-~~~~~
-
-Given a string mapping values for true, false and (optionally) None,
-returns one of those strings according to the value:
-
-For example::
-
- {{ value|yesno:"yeah,no,maybe" }}
-
-========== ====================== ==================================
-Value Argument Outputs
-========== ====================== ==================================
-``True`` ``"yeah,no,maybe"`` ``yeah``
-``False`` ``"yeah,no,maybe"`` ``no``
-``None`` ``"yeah,no,maybe"`` ``maybe``
-``None`` ``"yeah,no"`` ``"no"`` (converts None to False
- if no mapping for None is given)
-========== ====================== ==================================
-
-Other tags and filter libraries
--------------------------------
-
-Django comes with a couple of other template-tag libraries that you have to
-enable explicitly in your ``INSTALLED_APPS`` setting and enable in your
-template with the ``{% load %}`` tag.
-
-django.contrib.humanize
-~~~~~~~~~~~~~~~~~~~~~~~
-
-A set of Django template filters useful for adding a "human touch" to data. See
-:doc:`/ref/contrib/humanize`.
-
-django.contrib.markup
-~~~~~~~~~~~~~~~~~~~~~
-
-A collection of template filters that implement these common markup languages:
-
- * Textile
- * Markdown
- * reST (reStructuredText)
-
-See the :doc:`markup documentation </ref/contrib/markup>`.
-
-django.contrib.webdesign
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-A collection of template tags that can be useful while designing a Web site,
-such as a generator of Lorem Ipsum text. See :doc:`/ref/contrib/webdesign`.
-
-i18n
-~~~~
-
-Provides a couple of templatetags that allow specifying translatable text in
-Django templates. It is slightly different from the libraries described
-above because you don't need to add any application to the ``INSTALLED_APPS``
-setting but rather set :setting:`USE_I18N` to True, then loading it with
-``{% load i18n %}``. See :ref:`specifying-translation-strings-in-template-code`.
diff --git a/parts/django/docs/ref/templates/index.txt b/parts/django/docs/ref/templates/index.txt
deleted file mode 100644
index 0aa4798..0000000
--- a/parts/django/docs/ref/templates/index.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-=========
-Templates
-=========
-
-Django's template engine provides a powerful mini-language for defining the
-user-facing layer of your application, encouraging a clean separation of
-application and presentation logic. Templates can be maintained by anyone with
-an understanding of HTML; no knowledge of Python is required.
-
-.. toctree::
- :maxdepth: 2
-
- builtins
- api
-
-.. seealso::
-
- For information on writing your own custom tags and filters, see
- :doc:`/howto/custom-template-tags`.
diff --git a/parts/django/docs/ref/unicode.txt b/parts/django/docs/ref/unicode.txt
deleted file mode 100644
index 8e110af..0000000
--- a/parts/django/docs/ref/unicode.txt
+++ /dev/null
@@ -1,362 +0,0 @@
-============
-Unicode data
-============
-
-.. versionadded:: 1.0
-
-Django natively supports Unicode data everywhere. Providing your database can
-somehow store the data, you can safely pass around Unicode strings to
-templates, models and the database.
-
-This document tells you what you need to know if you're writing applications
-that use data or templates that are encoded in something other than ASCII.
-
-Creating the database
-=====================
-
-Make sure your database is configured to be able to store arbitrary string
-data. Normally, this means giving it an encoding of UTF-8 or UTF-16. If you use
-a more restrictive encoding -- for example, latin1 (iso8859-1) -- you won't be
-able to store certain characters in the database, and information will be lost.
-
- * MySQL users, refer to the `MySQL manual`_ (section 9.1.3.2 for MySQL 5.1)
- for details on how to set or alter the database character set encoding.
-
- * PostgreSQL users, refer to the `PostgreSQL manual`_ (section 21.2.2 in
- PostgreSQL 8) for details on creating databases with the correct encoding.
-
- * SQLite users, there is nothing you need to do. SQLite always uses UTF-8
- for internal encoding.
-
-.. _MySQL manual: http://dev.mysql.com/doc/refman/5.1/en/charset-database.html
-.. _PostgreSQL manual: http://www.postgresql.org/docs/8.2/static/multibyte.html#AEN24104
-
-All of Django's database backends automatically convert Unicode strings into
-the appropriate encoding for talking to the database. They also automatically
-convert strings retrieved from the database into Python Unicode strings. You
-don't even need to tell Django what encoding your database uses: that is
-handled transparently.
-
-For more, see the section "The database API" below.
-
-General string handling
-=======================
-
-Whenever you use strings with Django -- e.g., in database lookups, template
-rendering or anywhere else -- you have two choices for encoding those strings.
-You can use Unicode strings, or you can use normal strings (sometimes called
-"bytestrings") that are encoded using UTF-8.
-
-.. admonition:: Warning
-
- A bytestring does not carry any information with it about its encoding.
- For that reason, we have to make an assumption, and Django assumes that all
- bytestrings are in UTF-8.
-
- If you pass a string to Django that has been encoded in some other format,
- things will go wrong in interesting ways. Usually, Django will raise a
- ``UnicodeDecodeError`` at some point.
-
-If your code only uses ASCII data, it's safe to use your normal strings,
-passing them around at will, because ASCII is a subset of UTF-8.
-
-Don't be fooled into thinking that if your :setting:`DEFAULT_CHARSET` setting is set
-to something other than ``'utf-8'`` you can use that other encoding in your
-bytestrings! :setting:`DEFAULT_CHARSET` only applies to the strings generated as
-the result of template rendering (and e-mail). Django will always assume UTF-8
-encoding for internal bytestrings. The reason for this is that the
-:setting:`DEFAULT_CHARSET` setting is not actually under your control (if you are the
-application developer). It's under the control of the person installing and
-using your application -- and if that person chooses a different setting, your
-code must still continue to work. Ergo, it cannot rely on that setting.
-
-In most cases when Django is dealing with strings, it will convert them to
-Unicode strings before doing anything else. So, as a general rule, if you pass
-in a bytestring, be prepared to receive a Unicode string back in the result.
-
-Translated strings
-------------------
-
-Aside from Unicode strings and bytestrings, there's a third type of string-like
-object you may encounter when using Django. The framework's
-internationalization features introduce the concept of a "lazy translation" --
-a string that has been marked as translated but whose actual translation result
-isn't determined until the object is used in a string. This feature is useful
-in cases where the translation locale is unknown until the string is used, even
-though the string might have originally been created when the code was first
-imported.
-
-Normally, you won't have to worry about lazy translations. Just be aware that
-if you examine an object and it claims to be a
-``django.utils.functional.__proxy__`` object, it is a lazy translation.
-Calling ``unicode()`` with the lazy translation as the argument will generate a
-Unicode string in the current locale.
-
-For more details about lazy translation objects, refer to the
-:doc:`internationalization </topics/i18n/index>` documentation.
-
-Useful utility functions
-------------------------
-
-Because some string operations come up again and again, Django ships with a few
-useful functions that should make working with Unicode and bytestring objects
-a bit easier.
-
-Conversion functions
-~~~~~~~~~~~~~~~~~~~~
-
-The ``django.utils.encoding`` module contains a few functions that are handy
-for converting back and forth between Unicode and bytestrings.
-
- * ``smart_unicode(s, encoding='utf-8', strings_only=False, errors='strict')``
- converts its input to a Unicode string. The ``encoding`` parameter
- specifies the input encoding. (For example, Django uses this internally
- when processing form input data, which might not be UTF-8 encoded.) The
- ``strings_only`` parameter, if set to True, will result in Python
- numbers, booleans and ``None`` not being converted to a string (they keep
- their original types). The ``errors`` parameter takes any of the values
- that are accepted by Python's ``unicode()`` function for its error
- handling.
-
- If you pass ``smart_unicode()`` an object that has a ``__unicode__``
- method, it will use that method to do the conversion.
-
- * ``force_unicode(s, encoding='utf-8', strings_only=False,
- errors='strict')`` is identical to ``smart_unicode()`` in almost all
- cases. The difference is when the first argument is a :ref:`lazy
- translation <lazy-translations>` instance. While ``smart_unicode()``
- preserves lazy translations, ``force_unicode()`` forces those objects to a
- Unicode string (causing the translation to occur). Normally, you'll want
- to use ``smart_unicode()``. However, ``force_unicode()`` is useful in
- template tags and filters that absolutely *must* have a string to work
- with, not just something that can be converted to a string.
-
- * ``smart_str(s, encoding='utf-8', strings_only=False, errors='strict')``
- is essentially the opposite of ``smart_unicode()``. It forces the first
- argument to a bytestring. The ``strings_only`` parameter has the same
- behavior as for ``smart_unicode()`` and ``force_unicode()``. This is
- slightly different semantics from Python's builtin ``str()`` function,
- but the difference is needed in a few places within Django's internals.
-
-Normally, you'll only need to use ``smart_unicode()``. Call it as early as
-possible on any input data that might be either Unicode or a bytestring, and
-from then on, you can treat the result as always being Unicode.
-
-URI and IRI handling
-~~~~~~~~~~~~~~~~~~~~
-
-Web frameworks have to deal with URLs (which are a type of IRI_). One
-requirement of URLs is that they are encoded using only ASCII characters.
-However, in an international environment, you might need to construct a
-URL from an IRI_ -- very loosely speaking, a URI that can contain Unicode
-characters. Quoting and converting an IRI to URI can be a little tricky, so
-Django provides some assistance.
-
- * The function ``django.utils.encoding.iri_to_uri()`` implements the
- conversion from IRI to URI as required by the specification (`RFC
- 3987`_).
-
- * The functions ``django.utils.http.urlquote()`` and
- ``django.utils.http.urlquote_plus()`` are versions of Python's standard
- ``urllib.quote()`` and ``urllib.quote_plus()`` that work with non-ASCII
- characters. (The data is converted to UTF-8 prior to encoding.)
-
-These two groups of functions have slightly different purposes, and it's
-important to keep them straight. Normally, you would use ``urlquote()`` on the
-individual portions of the IRI or URI path so that any reserved characters
-such as '&' or '%' are correctly encoded. Then, you apply ``iri_to_uri()`` to
-the full IRI and it converts any non-ASCII characters to the correct encoded
-values.
-
-.. note::
- Technically, it isn't correct to say that ``iri_to_uri()`` implements the
- full algorithm in the IRI specification. It doesn't (yet) perform the
- international domain name encoding portion of the algorithm.
-
-The ``iri_to_uri()`` function will not change ASCII characters that are
-otherwise permitted in a URL. So, for example, the character '%' is not
-further encoded when passed to ``iri_to_uri()``. This means you can pass a
-full URL to this function and it will not mess up the query string or anything
-like that.
-
-An example might clarify things here::
-
- >>> urlquote(u'Paris & Orléans')
- u'Paris%20%26%20Orl%C3%A9ans'
- >>> iri_to_uri(u'/favorites/François/%s' % urlquote(u'Paris & Orléans'))
- '/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans'
-
-If you look carefully, you can see that the portion that was generated by
-``urlquote()`` in the second example was not double-quoted when passed to
-``iri_to_uri()``. This is a very important and useful feature. It means that
-you can construct your IRI without worrying about whether it contains
-non-ASCII characters and then, right at the end, call ``iri_to_uri()`` on the
-result.
-
-The ``iri_to_uri()`` function is also idempotent, which means the following is
-always true::
-
- iri_to_uri(iri_to_uri(some_string)) = iri_to_uri(some_string)
-
-So you can safely call it multiple times on the same IRI without risking
-double-quoting problems.
-
-.. _URI: http://www.ietf.org/rfc/rfc2396.txt
-.. _IRI: http://www.ietf.org/rfc/rfc3987.txt
-.. _RFC 3987: IRI_
-
-Models
-======
-
-Because all strings are returned from the database as Unicode strings, model
-fields that are character based (CharField, TextField, URLField, etc) will
-contain Unicode values when Django retrieves data from the database. This
-is *always* the case, even if the data could fit into an ASCII bytestring.
-
-You can pass in bytestrings when creating a model or populating a field, and
-Django will convert it to Unicode when it needs to.
-
-Choosing between ``__str__()`` and ``__unicode__()``
-----------------------------------------------------
-
-One consequence of using Unicode by default is that you have to take some care
-when printing data from the model.
-
-In particular, rather than giving your model a ``__str__()`` method, we
-recommended you implement a ``__unicode__()`` method. In the ``__unicode__()``
-method, you can quite safely return the values of all your fields without
-having to worry about whether they fit into a bytestring or not. (The way
-Python works, the result of ``__str__()`` is *always* a bytestring, even if you
-accidentally try to return a Unicode object).
-
-You can still create a ``__str__()`` method on your models if you want, of
-course, but you shouldn't need to do this unless you have a good reason.
-Django's ``Model`` base class automatically provides a ``__str__()``
-implementation that calls ``__unicode__()`` and encodes the result into UTF-8.
-This means you'll normally only need to implement a ``__unicode__()`` method
-and let Django handle the coercion to a bytestring when required.
-
-Taking care in ``get_absolute_url()``
--------------------------------------
-
-URLs can only contain ASCII characters. If you're constructing a URL from
-pieces of data that might be non-ASCII, be careful to encode the results in a
-way that is suitable for a URL. The ``django.db.models.permalink()`` decorator
-handles this for you automatically.
-
-If you're constructing a URL manually (i.e., *not* using the ``permalink()``
-decorator), you'll need to take care of the encoding yourself. In this case,
-use the ``iri_to_uri()`` and ``urlquote()`` functions that were documented
-above_. For example::
-
- from django.utils.encoding import iri_to_uri
- from django.utils.http import urlquote
-
- def get_absolute_url(self):
- url = u'/person/%s/?x=0&y=0' % urlquote(self.location)
- return iri_to_uri(url)
-
-This function returns a correctly encoded URL even if ``self.location`` is
-something like "Jack visited Paris & Orléans". (In fact, the ``iri_to_uri()``
-call isn't strictly necessary in the above example, because all the
-non-ASCII characters would have been removed in quoting in the first line.)
-
-.. _above: `URI and IRI handling`_
-
-The database API
-================
-
-You can pass either Unicode strings or UTF-8 bytestrings as arguments to
-``filter()`` methods and the like in the database API. The following two
-querysets are identical::
-
- qs = People.objects.filter(name__contains=u'Å')
- qs = People.objects.filter(name__contains='\xc3\x85') # UTF-8 encoding of Å
-
-Templates
-=========
-
-You can use either Unicode or bytestrings when creating templates manually::
-
- from django.template import Template
- t1 = Template('This is a bytestring template.')
- t2 = Template(u'This is a Unicode template.')
-
-But the common case is to read templates from the filesystem, and this creates
-a slight complication: not all filesystems store their data encoded as UTF-8.
-If your template files are not stored with a UTF-8 encoding, set the :setting:`FILE_CHARSET`
-setting to the encoding of the files on disk. When Django reads in a template
-file, it will convert the data from this encoding to Unicode. (:setting:`FILE_CHARSET`
-is set to ``'utf-8'`` by default.)
-
-The :setting:`DEFAULT_CHARSET` setting controls the encoding of rendered templates.
-This is set to UTF-8 by default.
-
-Template tags and filters
--------------------------
-
-A couple of tips to remember when writing your own template tags and filters:
-
- * Always return Unicode strings from a template tag's ``render()`` method
- and from template filters.
-
- * Use ``force_unicode()`` in preference to ``smart_unicode()`` in these
- places. Tag rendering and filter calls occur as the template is being
- rendered, so there is no advantage to postponing the conversion of lazy
- translation objects into strings. It's easier to work solely with Unicode
- strings at that point.
-
-E-mail
-======
-
-Django's e-mail framework (in ``django.core.mail``) supports Unicode
-transparently. You can use Unicode data in the message bodies and any headers.
-However, you're still obligated to respect the requirements of the e-mail
-specifications, so, for example, e-mail addresses should use only ASCII
-characters.
-
-The following code example demonstrates that everything except e-mail addresses
-can be non-ASCII::
-
- from django.core.mail import EmailMessage
-
- subject = u'My visit to Sør-Trøndelag'
- sender = u'Arnbjörg Ráðormsdóttir <arnbjorg@example.com>'
- recipients = ['Fred <fred@example.com']
- body = u'...'
- EmailMessage(subject, body, sender, recipients).send()
-
-Form submission
-===============
-
-HTML form submission is a tricky area. There's no guarantee that the
-submission will include encoding information, which means the framework might
-have to guess at the encoding of submitted data.
-
-Django adopts a "lazy" approach to decoding form data. The data in an
-``HttpRequest`` object is only decoded when you access it. In fact, most of
-the data is not decoded at all. Only the ``HttpRequest.GET`` and
-``HttpRequest.POST`` data structures have any decoding applied to them. Those
-two fields will return their members as Unicode data. All other attributes and
-methods of ``HttpRequest`` return data exactly as it was submitted by the
-client.
-
-By default, the :setting:`DEFAULT_CHARSET` setting is used as the assumed encoding
-for form data. If you need to change this for a particular form, you can set
-the ``encoding`` attribute on an ``HttpRequest`` instance. For example::
-
- def some_view(request):
- # We know that the data must be encoded as KOI8-R (for some reason).
- request.encoding = 'koi8-r'
- ...
-
-You can even change the encoding after having accessed ``request.GET`` or
-``request.POST``, and all subsequent accesses will use the new encoding.
-
-Most developers won't need to worry about changing form encoding, but this is
-a useful feature for applications that talk to legacy systems whose encoding
-you cannot control.
-
-Django does not decode the data of file uploads, because that data is normally
-treated as collections of bytes, rather than strings. Any automatic decoding
-there would alter the meaning of the stream of bytes.
diff --git a/parts/django/docs/ref/utils.txt b/parts/django/docs/ref/utils.txt
deleted file mode 100644
index e4ce7c4..0000000
--- a/parts/django/docs/ref/utils.txt
+++ /dev/null
@@ -1,504 +0,0 @@
-============
-Django Utils
-============
-
-.. module:: django.utils
- :synopsis: Django's built-in utilities.
-
-This document covers all stable modules in ``django.utils``. Most of the
-modules in ``django.utils`` are designed for internal use and only the
-following parts can be considered stable and thus backwards compatible as per
-the :ref:`internal release deprecation policy <internal-release-deprecation-policy>`.
-
-``django.utils.cache``
-======================
-
-.. module:: django.utils.cache
- :synopsis: Helper functions for controlling caching.
-
-This module contains helper functions for controlling caching. It does so by
-managing the ``Vary`` header of responses. It includes functions to patch the
-header of response objects directly and decorators that change functions to do
-that header-patching themselves.
-
-For information on the ``Vary`` header, see `RFC 2616 section 14.44`_.
-
-.. _RFC 2616 section 14.44: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44
-
-Essentially, the ``Vary`` HTTP header defines which headers a cache should take
-into account when building its cache key. Requests with the same path but
-different header content for headers named in ``Vary`` need to get different
-cache keys to prevent delivery of wrong content.
-
-For example, :doc:`internationalization </topics/i18n/index>` middleware would need
-to distinguish caches by the ``Accept-language`` header.
-
-.. function:: patch_cache_control(response, **kwargs)
-
-This function patches the ``Cache-Control`` header by adding all keyword
-arguments to it. The transformation is as follows:
-
- * All keyword parameter names are turned to lowercase, and underscores
- are converted to hyphens.
- * If the value of a parameter is ``True`` (exactly ``True``, not just a
- true value), only the parameter name is added to the header.
- * All other parameters are added with their value, after applying
- ``str()`` to it.
-
-.. function:: get_max_age(response)
-
-Returns the max-age from the response Cache-Control header as an integer (or
-``None`` if it wasn't found or wasn't an integer).
-
-.. function:: patch_response_headers(response, cache_timeout=None)
-
-Adds some useful headers to the given ``HttpResponse`` object:
-
- * ``ETag``
- * ``Last-Modified``
- * ``Expires``
- * ``Cache-Control``
-
-Each header is only added if it isn't already set.
-
-``cache_timeout`` is in seconds. The ``CACHE_MIDDLEWARE_SECONDS`` setting is
-used by default.
-
-.. function:: add_never_cache_headers(response)
-
-Adds headers to a response to indicate that a page should never be cached.
-
-.. function:: patch_vary_headers(response, newheaders)
-
-Adds (or updates) the ``Vary`` header in the given ``HttpResponse`` object.
-``newheaders`` is a list of header names that should be in ``Vary``. Existing
-headers in ``Vary`` aren't removed.
-
-.. function:: get_cache_key(request, key_prefix=None)
-
-Returns a cache key based on the request path. It can be used in the request
-phase because it pulls the list of headers to take into account from the
-global path registry and uses those to build a cache key to check against.
-
-If there is no headerlist stored, the page needs to be rebuilt, so this
-function returns ``None``.
-
-.. function:: learn_cache_key(request, response, cache_timeout=None, key_prefix=None)
-
-Learns what headers to take into account for some request path from the
-response object. It stores those headers in a global path registry so that
-later access to that path will know what headers to take into account without
-building the response object itself. The headers are named in the ``Vary``
-header of the response, but we want to prevent response generation.
-
-The list of headers to use for cache key generation is stored in the same cache
-as the pages themselves. If the cache ages some data out of the cache, this
-just means that we have to build the response once to get at the Vary header
-and so at the list of headers to use for the cache key.
-
-SortedDict
-==========
-
-.. module:: django.utils.datastructures
- :synopsis: A dictionary that keeps its keys in the order in which they're inserted.
-
-.. class:: django.utils.datastructures.SortedDict
-
-Methods
--------
-
-Extra methods that ``SortedDict`` adds to the standard Python ``dict`` class.
-
-.. method:: insert(index, key, value)
-
-Inserts the key, value pair before the item with the given index.
-
-.. method:: value_for_index(index)
-
-Returns the value of the item at the given zero-based index.
-
-Creating new SortedDict
------------------------
-
-Creating a new ``SortedDict`` must be done in a way where ordering is
-guaranteed. For example::
-
- SortedDict({'b': 1, 'a': 2, 'c': 3})
-
-will not work. Passing in a basic Python ``dict`` could produce unreliable
-results. Instead do::
-
- SortedDict([('b', 1), ('a', 2), ('c', 3)])
-
-``django.utils.encoding``
-=========================
-
-.. module:: django.utils.encoding
- :synopsis: A series of helper classes and function to manage character encoding.
-
-.. class:: StrAndUnicode
-
-A class whose ``__str__`` returns its ``__unicode__`` as a UTF-8 bytestring.
-Useful as a mix-in.
-
-.. function:: smart_unicode(s, encoding='utf-8', strings_only=False, errors='strict')
-
-Returns a ``unicode`` object representing ``s``. Treats bytestrings using the
-'encoding' codec.
-
-If ``strings_only`` is ``True``, don't convert (some) non-string-like objects.
-
-.. function:: is_protected_type(obj)
-
-Determine if the object instance is of a protected type.
-
-Objects of protected types are preserved as-is when passed to
-``force_unicode(strings_only=True)``.
-
-.. function:: force_unicode(s, encoding='utf-8', strings_only=False, errors='strict')
-
-Similar to ``smart_unicode``, except that lazy instances are resolved to strings,
-rather than kept as lazy objects.
-
-If ``strings_only`` is ``True``, don't convert (some) non-string-like objects.
-
-.. function:: smart_str(s, encoding='utf-8', strings_only=False, errors='strict')
-
-Returns a bytestring version of ``s``, encoded as specified in ``encoding``.
-
-If ``strings_only`` is ``True``, don't convert (some) non-string-like objects.
-
-.. function:: iri_to_uri(iri)
-
-Convert an Internationalized Resource Identifier (IRI) portion to a URI portion
-that is suitable for inclusion in a URL.
-
-This is the algorithm from section 3.1 of `RFC 3987`_. However, since we are
-assuming input is either UTF-8 or unicode already, we can simplify things a
-little from the full method.
-
-.. _RFC 3987: http://www.ietf.org/rfc/rfc3987.txt
-
-Returns an ASCII string containing the encoded result.
-
-``django.utils.feedgenerator``
-==============================
-
-.. module:: django.utils.feedgenerator
- :synopsis: Syndication feed generation library -- used for generating RSS, etc.
-
-Sample usage::
-
- >>> from django.utils import feedgenerator
- >>> feed = feedgenerator.Rss201rev2Feed(
- ... title=u"Poynter E-Media Tidbits",
- ... link=u"http://www.poynter.org/column.asp?id=31",
- ... description=u"A group Weblog by the sharpest minds in online media/journalism/publishing.",
- ... language=u"en",
- ... )
- >>> feed.add_item(
- ... title="Hello",
- ... link=u"http://www.holovaty.com/test/",
- ... description="Testing."
- ... )
- >>> fp = open('test.rss', 'w')
- >>> feed.write(fp, 'utf-8')
- >>> fp.close()
-
-For simplifying the selection of a generator use ``feedgenerator.DefaultFeed``
-which is currently ``Rss201rev2Feed``
-
-For definitions of the different versions of RSS, see:
-http://diveintomark.org/archives/2004/02/04/incompatible-rss
-
-.. function:: get_tag_uri(url, date)
-
-Creates a TagURI.
-
-See http://diveintomark.org/archives/2004/05/28/howto-atom-id
-
-SyndicationFeed
----------------
-
-.. class:: SyndicationFeed
-
-Base class for all syndication feeds. Subclasses should provide write().
-
-Methods
-~~~~~~~
-
-.. method:: add_item(title, link, description, [author_email=None, author_name=None, author_link=None, pubdate=None, comments=None, unique_id=None, enclosure=None, categories=(), item_copyright=None, ttl=None, **kwargs])
-
-Adds an item to the feed. All args are expected to be Python ``unicode``
-objects except ``pubdate``, which is a ``datetime.datetime`` object, and
-``enclosure``, which is an instance of the ``Enclosure`` class.
-
-.. method:: num_items()
-
-.. method:: root_attributes()
-
-Return extra attributes to place on the root (i.e. feed/channel) element.
-Called from write().
-
-.. method:: add_root_elements(handler)
-
-Add elements in the root (i.e. feed/channel) element. Called from write().
-
-.. method:: item_attributes(item)
-
-Return extra attributes to place on each item (i.e. item/entry) element.
-
-.. method:: add_item_elements(handler, item)
-
-Add elements on each item (i.e. item/entry) element.
-
-.. method:: write(outfile, encoding)
-
-Outputs the feed in the given encoding to ``outfile``, which is a file-like
-object. Subclasses should override this.
-
-.. method:: writeString(encoding)
-
-Returns the feed in the given encoding as a string.
-
-.. method:: latest_post_date()
-
-Returns the latest item's ``pubdate``. If none of them have a ``pubdate``,
-this returns the current date/time.
-
-Enclosure
----------
-
-.. class:: Enclosure
-
-Represents an RSS enclosure
-
-RssFeed
--------
-
-.. class:: RssFeed(SyndicationFeed)
-
-Rss201rev2Feed
---------------
-
-.. class:: Rss201rev2Feed(RssFeed)
-
-Spec: http://blogs.law.harvard.edu/tech/rss
-
-Atom1Feed
----------
-
-.. class:: Atom1Feed(SyndicationFeed)
-
-Spec: http://atompub.org/2005/07/11/draft-ietf-atompub-format-10.html
-
-``django.utils.http``
-=====================
-
-.. module:: django.utils.http
- :synopsis: HTTP helper functions. (URL encoding, cookie handling, ...)
-
-.. function:: urlquote(url, safe='/')
-
-A version of Python's ``urllib.quote()`` function that can operate on unicode
-strings. The url is first UTF-8 encoded before quoting. The returned string
-can safely be used as part of an argument to a subsequent ``iri_to_uri()``
-call without double-quoting occurring. Employs lazy execution.
-
-.. function:: urlquote_plus(url, safe='')
-
-A version of Python's urllib.quote_plus() function that can operate on unicode
-strings. The url is first UTF-8 encoded before quoting. The returned string can
-safely be used as part of an argument to a subsequent iri_to_uri() call without
-double-quoting occurring. Employs lazy execution.
-
-.. function:: urlencode(query, doseq=0)
-
-A version of Python's urllib.urlencode() function that can operate on unicode
-strings. The parameters are first case to UTF-8 encoded strings and then
-encoded as per normal.
-
-.. function:: cookie_date(epoch_seconds=None)
-
-Formats the time to ensure compatibility with Netscape's cookie standard.
-
-Accepts a floating point number expressed in seconds since the epoch, in UTC -
-such as that outputted by ``time.time()``. If set to ``None``, defaults to the current
-time.
-
-Outputs a string in the format ``Wdy, DD-Mon-YYYY HH:MM:SS GMT``.
-
-.. function:: http_date(epoch_seconds=None)
-
-Formats the time to match the RFC 1123 date format as specified by HTTP
-`RFC 2616`_ section 3.3.1.
-
-.. _RFC 2616: http://www.w3.org/Protocols/rfc2616/rfc2616.txt
-
-Accepts a floating point number expressed in seconds since the epoch, in UTC -
-such as that outputted by ``time.time()``. If set to ``None``, defaults to the current
-time.
-
-Outputs a string in the format ``Wdy, DD Mon YYYY HH:MM:SS GMT``.
-
-.. function:: base36_to_int(s)
-
-Converted a base 36 string to an integer
-
-.. function:: int_to_base36(i)
-
-Converts an integer to a base36 string
-
-``django.utils.safestring``
-===========================
-
-.. module:: django.utils.safestring
- :synopsis: Functions and classes for working with strings that can be displayed safely without further escaping in HTML.
-
-Functions and classes for working with "safe strings": strings that can be
-displayed safely without further escaping in HTML. Marking something as a "safe
-string" means that the producer of the string has already turned characters
-that should not be interpreted by the HTML engine (e.g. '<') into the
-appropriate entities.
-
-.. class:: SafeString
-
-A string subclass that has been specifically marked as "safe" (requires no
-further escaping) for HTML output purposes.
-
-.. class:: SafeUnicode
-
-A unicode subclass that has been specifically marked as "safe" for HTML output
-purposes.
-
-.. function:: mark_safe(s)
-
-Explicitly mark a string as safe for (HTML) output purposes. The returned
-object can be used everywhere a string or unicode object is appropriate.
-
-Can be called multiple times on a single string.
-
-.. function:: mark_for_escaping(s)
-
-Explicitly mark a string as requiring HTML escaping upon output. Has no effect
-on ``SafeData`` subclasses.
-
-Can be called multiple times on a single string (the resulting escaping is only
-applied once).
-
-``django.utils.translation``
-============================
-
-.. module:: django.utils.translation
- :synopsis: Internationalization support.
-
-For a complete discussion on the usage of the following see the
-:doc:`Internationalization documentation </topics/i18n/internationalization>`.
-
-.. function:: gettext(message)
-
-Translates ``message`` and returns it in a UTF-8 bytestring
-
-.. function:: ugettext(message)
-
-Translates ``message`` and returns it in a unicode string
-
-.. function:: gettext_lazy(message)
-.. function:: ugettext_lazy(message)
-
-Same as the non-lazy versions above, but using lazy execution.
-
-See :ref:`lazy translations documentation <lazy-translations>`.
-
-.. function:: gettext_noop(message)
-
-Marks strings for translation but doesn't translate them now. This can be used
-to store strings in global variables that should stay in the base language
-(because they might be used externally) and will be translated later.
-
-.. 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)
-
-Translates ``singular`` and ``plural`` and returns the appropriate string based
-on ``number`` in a unicode string
-
-.. function:: ngettext_lazy(singular, plural, number)
-.. function:: ungettext_lazy(singular, plural, number)
-
-Same as the non-lazy versions above, but using lazy execution.
-
-See :ref:`lazy translations documentation <lazy-translations>`.
-
-.. function:: string_concat(*strings)
-
-Lazy variant of string concatenation, needed for translations that are
-constructed from multiple parts.
-
-.. function:: activate(language)
-
-Fetches the translation object for a given tuple of application name and
-language and installs it as the current translation object for the current
-thread.
-
-.. function:: deactivate()
-
-De-installs the currently active translation object so that further _ calls will
-resolve against the default translation object, again.
-
-.. function:: deactivate_all()
-
-Makes the active translation object a NullTranslations() instance. This is
-useful when we want delayed translations to appear as the original string for
-some reason.
-
-.. function:: get_language()
-
-Returns the currently selected language code.
-
-.. function:: get_language_bidi()
-
-Returns selected language's BiDi layout:
-
- * ``False`` = left-to-right layout
- * ``True`` = right-to-left layout
-
-.. function:: get_date_formats()
-
-Checks whether translation files provide a translation for some technical
-message ID to store date and time formats. If it doesn't contain one, the
-formats provided in the settings will be used.
-
-.. function:: get_language_from_request(request)
-
-Analyzes the request to find what language the user wants the system to show.
-Only languages listed in settings.LANGUAGES are taken into account. If the user
-requests a sublanguage where we have a main language, we send out the main
-language.
-
-.. function:: to_locale(language)
-
-Turns a language name (en-us) into a locale name (en_US).
-
-.. function:: templatize(src)
-
-Turns a Django template into something that is understood by xgettext. It does
-so by translating the Django translation tags into standard gettext function
-invocations.
-
-``django.utils.tzinfo``
-=======================
-
-.. module:: django.utils.tzinfo
- :synopsis: Implementation of ``tzinfo`` classes for use with ``datetime.datetime``.
-
-.. class:: FixedOffset
-
-Fixed offset in minutes east from UTC.
-
-.. class:: LocalTimezone
-
-Proxy timezone information from time module.
diff --git a/parts/django/docs/ref/validators.txt b/parts/django/docs/ref/validators.txt
deleted file mode 100644
index 0451f65..0000000
--- a/parts/django/docs/ref/validators.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-==========
-Validators
-==========
-
-.. versionadded:: 1.2
-.. module:: django.core.validators
- :synopsis: Validation utilities and base classes
-
-Writing validators
-==================
-
-A validator is a callable that takes a value and raises a
-:exc:`~django.core.exceptions.ValidationError` if it doesn't meet some
-criteria. Validators can be useful for re-using validation logic between
-different types of fields.
-
-For example, here's a validator that only allows even numbers::
-
- from django.core.exceptions import ValidationError
-
- def validate_even(value):
- if value % 2 != 0:
- raise ValidationError(u'%s is not an even number' % value)
-
-You can add this to a model field via the field's :attr:`~django.db.models.Field.validators`
-argument::
-
- from django.db import models
-
- class MyModel(models.Model):
- even_field = models.IntegerField(validators=[validate_even])
-
-Because values are converted to Python before validators are run, you can even
-use the same validator with forms::
-
- from django import forms
-
- class MyForm(forms.Form):
- even_field = forms.IntegerField(validators=[validate_even])
-
-How validators are run
-======================
-
-See the :doc:`form validation </ref/forms/validation>` for more information on
-how validators are run in forms, and :ref:`Validating objects
-<validating-objects>` for how they're run in models. Note that validators will
-not be run automatically when you save a model, but if you are using a
-:class:`~django.forms.ModelForm`, it will run your validators on any fields
-that are included in your form. See the
-:doc:`ModelForm documentation </topics/forms/modelforms>` for information on
-how model validation interacts with forms.
-
-Built-in validators
-===================
-
-The :mod:`django.core.validators` module contains a collection of callable
-validators for use with model and form fields. They're used internally but
-are available for use with your own fields, too. They can be used in addition
-to, or in lieu of custom ``field.clean()`` methods.
-
-``RegexValidator``
-------------------
-.. class:: RegexValidator(regex, [message=None, code=None])
-
- .. attribute:: regex
-
- The regular expression pattern to search for the provided ``value``,
- or a pre-compiled regular expression. Raises a
- :exc:`~django.core.exceptions.ValidationError` with :attr:`.message`
- and :attr:`.code` if no match is found.
-
- .. attribute:: message
-
- The error message used by :exc:`~django.core.exceptions.ValidationError`
- if validation fails. If no :attr:`.message` is specified, a generic
- ``"Enter a valid value"`` message is used. Default value: ``None``.
-
- .. attribute:: code
-
- The error code used by :exc:`~django.core.exceptions.ValidationError`
- if validation fails. If :attr:`.code` is not specified, ``"invalid"``
- is used. Default value: ``None``.
-
-``URLValidator``
-----------------
-.. class:: URLValidator([verify_exists=False, validator_user_agent=URL_VALIDATOR_USER_AGENT])
-
- A :class:`RegexValidator` that ensures a value looks like a URL and
- optionally verifies that the URL actually exists (i.e., doesn't return a
- 404 status code). Raises an error code of ``'invalid'`` if it doesn't look
- like a URL, and a code of ``'invalid_link'`` if it doesn't exist.
-
- .. attribute:: verify_exists
-
- Default value: ``False``. If set to ``True``, this validator checks
- that the URL actually exists.
-
- .. attribute:: validator_user_agent
-
- If :attr:`.verify_exists` is ``True``, Django uses the value of
- :attr:`.validator_user_agent` as the "User-agent" for the request. This
- defaults to :setting:`settings.URL_VALIDATOR_USER_AGENT <URL_VALIDATOR_USER_AGENT>`.
-
-``validate_email``
-------------------
-.. data:: validate_email
-
- A :class:`RegexValidator` instance that ensures a value looks like an
- e-mail address.
-
-``validate_slug``
------------------
-.. data:: validate_slug
-
- A :class:`RegexValidator` instance that ensures a value consists of only
- letters, numbers, underscores or hyphens.
-
-``validate_ipv4_address``
--------------------------
-.. data:: validate_ipv4_address
-
- A :class:`RegexValidator` instance that ensures a value looks like an IPv4
- address.
-
-``validate_comma_separated_integer_list``
------------------------------------------
-.. data:: validate_comma_separated_integer_list
-
- A :class:`RegexValidator` instance that ensures a value is a
- comma-separated list of integers.
-
-``MaxValueValidator``
----------------------
-.. class:: MaxValueValidator(max_value)
-
- Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
- ``'max_value'`` if ``value`` is greater than ``max_value``.
-
-``MinValueValidator``
----------------------
-.. class:: MinValueValidator(min_value)
-
- Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
- ``'min_value'`` if ``value`` is less than ``min_value``.
-
-``MaxLengthValidator``
-----------------------
-.. class:: MaxLengthValidator(max_length)
-
- Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
- ``'max_length'`` if the length of ``value`` is greater than ``max_length``.
-
-``MinLengthValidator``
-----------------------
-.. class:: MinLengthValidator(min_length)
-
- Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
- ``'min_length'`` if the length of ``value`` is less than ``min_length``.
diff --git a/parts/django/docs/releases/0.95.txt b/parts/django/docs/releases/0.95.txt
deleted file mode 100644
index 7409bff..0000000
--- a/parts/django/docs/releases/0.95.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-=================================
-Django version 0.95 release notes
-=================================
-
-Welcome to the Django 0.95 release.
-
-This represents a significant advance in Django development since the 0.91
-release in January 2006. The details of every change in this release would be
-too extensive to list in full, but a summary is presented below.
-
-Suitability and API stability
-=============================
-
-This release is intended to provide a stable reference point for developers
-wanting to work on production-level applications that use Django.
-
-However, it's not the 1.0 release, and we'll be introducing further changes
-before 1.0. For a clear look at which areas of the framework will change (and
-which ones will *not* change) before 1.0, see the api-stability.txt file, which
-lives in the docs/ directory of the distribution.
-
-You may have a need to use some of the features that are marked as
-"subject to API change" in that document, but that's OK with us as long as it's
-OK with you, and as long as you understand APIs may change in the future.
-
-Fortunately, most of Django's core APIs won't be changing before version 1.0.
-There likely won't be as big of a change between 0.95 and 1.0 versions as there
-was between 0.91 and 0.95.
-
-Changes and new features
-========================
-
-The major changes in this release (for developers currently using the 0.91
-release) are a result of merging the 'magic-removal' branch of development.
-This branch removed a number of constraints in the way Django code had to be
-written that were a consequence of decisions made in the early days of Django,
-prior to its open-source release. It's now possible to write more natural,
-Pythonic code that works as expected, and there's less "black magic" happening
-behind the scenes.
-
-Aside from that, another main theme of this release is a dramatic increase in
-usability. We've made countless improvements in error messages, documentation,
-etc., to improve developers' quality of life.
-
-The new features and changes introduced in 0.95 include:
-
- * Django now uses a more consistent and natural filtering interface for
- retrieving objects from the database.
-
- * User-defined models, functions and constants now appear in the module
- namespace they were defined in. (Previously everything was magically
- transferred to the django.models.* namespace.)
-
- * Some optional applications, such as the FlatPage, Sites and Redirects
- apps, have been decoupled and moved into django.contrib. If you don't
- want to use these applications, you no longer have to install their
- database tables.
-
- * Django now has support for managing database transactions.
-
- * We've added the ability to write custom authentication and authorization
- backends for authenticating users against alternate systems, such as
- LDAP.
-
- * We've made it easier to add custom table-level functions to models,
- through a new "Manager" API.
-
- * It's now possible to use Django without a database. This simply means
- that the framework no longer requires you to have a working database set
- up just to serve dynamic pages. In other words, you can just use
- URLconfs/views on their own. Previously, the framework required that a
- database be configured, regardless of whether you actually used it.
-
- * It's now more explicit and natural to override save() and delete()
- methods on models, rather than needing to hook into the pre_save() and
- post_save() method hooks.
-
- * Individual pieces of the framework now can be configured without
- requiring the setting of an environment variable. This permits use of,
- for example, the Django templating system inside other applications.
-
- * More and more parts of the framework have been internationalized, as
- we've expanded internationalization (i18n) support. The Django
- codebase, including code and templates, has now been translated, at least
- in part, into 31 languages. From Arabic to Chinese to Hungarian to Welsh,
- it is now possible to use Django's admin site in your native language.
-
-The number of changes required to port from 0.91-compatible code to the 0.95
-code base are significant in some cases. However, they are, for the most part,
-reasonably routine and only need to be done once. A list of the necessary
-changes is described in the `Removing The Magic`_ wiki page. There is also an
-easy checklist_ for reference when undertaking the porting operation.
-
-.. _Removing The Magic: http://code.djangoproject.com/wiki/RemovingTheMagic
-.. _checklist: http://code.djangoproject.com/wiki/MagicRemovalCheatSheet1
-
-Problem reports and getting help
-================================
-
-Need help resolving a problem with Django? The documentation in the distribution
-is also available online_ at the `Django Web site`_. The :doc:`FAQ </faq/index>`
-document is especially recommended, as it contains a number of issues that come
-up time and again.
-
-For more personalized help, the `django-users`_ mailing list is a very active
-list, with more than 2,000 subscribers who can help you solve any sort of
-Django problem. We recommend you search the archives first, though, because
-many common questions appear with some regularity, and any particular problem
-may already have been answered.
-
-Finally, for those who prefer the more immediate feedback offered by IRC,
-there's a #django channel on irc.freenode.net that is regularly populated by
-Django users and developers from around the world. Friendly people are usually
-available at any hour of the day -- to help, or just to chat.
-
-.. _online: http://www.djangoproject.com/documentation/0.95/
-.. _Django Web site: http://www.djangoproject.com/
-.. _django-users: http://groups.google.com/group/django-users
-
-Thanks for using Django!
-
-The Django Team
-July 2006
-
diff --git a/parts/django/docs/releases/0.96.txt b/parts/django/docs/releases/0.96.txt
deleted file mode 100644
index 1224360..0000000
--- a/parts/django/docs/releases/0.96.txt
+++ /dev/null
@@ -1,264 +0,0 @@
-=================================
-Django version 0.96 release notes
-=================================
-
-Welcome to Django 0.96!
-
-The primary goal for 0.96 is a cleanup and stabilization of the features
-introduced in 0.95. There have been a few small `backwards-incompatible
-changes`_ since 0.95, but the upgrade process should be fairly simple
-and should not require major changes to existing applications.
-
-However, we're also releasing 0.96 now because we have a set of
-backwards-incompatible changes scheduled for the near future. Once
-completed, they will involve some code changes for application
-developers, so we recommend that you stick with Django 0.96 until the
-next official release; then you'll be able to upgrade in one step
-instead of needing to make incremental changes to keep up with the
-development version of Django.
-
-Backwards-incompatible changes
-==============================
-
-The following changes may require you to update your code when you switch from
-0.95 to 0.96:
-
-``MySQLdb`` version requirement
--------------------------------
-
-Due to a bug in older versions of the ``MySQLdb`` Python module (which
-Django uses to connect to MySQL databases), Django's MySQL backend now
-requires version 1.2.1p2 or higher of ``MySQLdb``, and will raise
-exceptions if you attempt to use an older version.
-
-If you're currently unable to upgrade your copy of ``MySQLdb`` to meet
-this requirement, a separate, backwards-compatible backend, called
-"mysql_old", has been added to Django. To use this backend, change
-the :setting:`DATABASE_ENGINE` setting in your Django settings file from
-this::
-
- DATABASE_ENGINE = "mysql"
-
-to this::
-
- DATABASE_ENGINE = "mysql_old"
-
-However, we strongly encourage MySQL users to upgrade to a more recent
-version of ``MySQLdb`` as soon as possible, The "mysql_old" backend is
-provided only to ease this transition, and is considered deprecated;
-aside from any necessary security fixes, it will not be actively
-maintained, and it will be removed in a future release of Django.
-
-Also, note that some features, like the new :setting:`DATABASE_OPTIONS`
-setting (see the `databases documentation`_ for details), are only
-available on the "mysql" backend, and will not be made available for
-"mysql_old".
-
-.. _databases documentation: http://www.djangoproject.com/documentation/0.96/databases/
-
-Database constraint names changed
----------------------------------
-
-The format of the constraint names Django generates for foreign key
-references have changed slightly. These names are generally only used
-when it is not possible to put the reference directly on the affected
-column, so they are not always visible.
-
-The effect of this change is that running ``manage.py reset`` and
-similar commands against an existing database may generate SQL with
-the new form of constraint name, while the database itself contains
-constraints named in the old form; this will cause the database server
-to raise an error message about modifying non-existent constraints.
-
-If you need to work around this, there are two methods available:
-
- 1. Redirect the output of ``manage.py`` to a file, and edit the
- generated SQL to use the correct constraint names before
- executing it.
-
- 2. Examine the output of ``manage.py sqlall`` to see the new-style
- constraint names, and use that as a guide to rename existing
- constraints in your database.
-
-Name changes in ``manage.py``
------------------------------
-
-A few of the options to ``manage.py`` have changed with the addition of fixture
-support:
-
- * There are new ``dumpdata`` and ``loaddata`` commands which, as
- you might expect, will dump and load data to/from the
- database. These commands can operate against any of Django's
- supported serialization formats.
-
- * The ``sqlinitialdata`` command has been renamed to ``sqlcustom`` to
- emphasize that ``loaddata`` should be used for data (and ``sqlcustom`` for
- other custom SQL -- views, stored procedures, etc.).
-
- * The vestigial ``install`` command has been removed. Use ``syncdb``.
-
-Backslash escaping changed
---------------------------
-
-The Django database API now escapes backslashes given as query parameters. If
-you have any database API code that matches backslashes, and it was working before
-(despite the lack of escaping), you'll have to change your code to "unescape" the
-slashes one level.
-
-For example, this used to work::
-
- # Find text containing a single backslash
- MyModel.objects.filter(text__contains='\\\\')
-
-The above is now incorrect, and should be rewritten as::
-
- # Find text containing a single backslash
- MyModel.objects.filter(text__contains='\\')
-
-Removed ENABLE_PSYCO setting
-----------------------------
-
-The ``ENABLE_PSYCO`` setting no longer exists. If your settings file includes
-``ENABLE_PSYCO`` it will have no effect; to use Psyco_, we recommend
-writing a middleware class to activate it.
-
-.. _psyco: http://psyco.sourceforge.net/
-
-What's new in 0.96?
-===================
-
-This revision represents over a thousand source commits and over four hundred
-bug fixes, so we can't possibly catalog all the changes. Here, we describe the
-most notable changes in this release.
-
-New forms library
------------------
-
-``django.newforms`` is Django's new form-handling library. It's a
-replacement for ``django.forms``, the old form/manipulator/validation
-framework. Both APIs are available in 0.96, but over the next two
-releases we plan to switch completely to the new forms system, and
-deprecate and remove the old system.
-
-There are three elements to this transition:
-
- * We've copied the current ``django.forms`` to
- ``django.oldforms``. This allows you to upgrade your code *now*
- rather than waiting for the backwards-incompatible change and
- rushing to fix your code after the fact. Just change your
- import statements like this::
-
- from django import forms # 0.95-style
- from django import oldforms as forms # 0.96-style
-
- * The next official release of Django will move the current
- ``django.newforms`` to ``django.forms``. This will be a
- backwards-incompatible change, and anyone still using the old
- version of ``django.forms`` at that time will need to change
- their import statements as described above.
-
- * The next release after that will completely remove
- ``django.oldforms``.
-
-Although the ``newforms`` library will continue to evolve, it's ready for use
-for most common cases. We recommend that anyone new to form handling skip the
-old forms system and start with the new.
-
-For more information about ``django.newforms``, read the `newforms
-documentation`_.
-
-.. _newforms documentation: http://www.djangoproject.com/documentation/0.96/newforms/
-
-URLconf improvements
---------------------
-
-You can now use any callable as the callback in URLconfs (previously, only
-strings that referred to callables were allowed). This allows a much more
-natural use of URLconfs. For example, this URLconf::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- ('^myview/$', 'mysite.myapp.views.myview')
- )
-
-can now be rewritten as::
-
- from django.conf.urls.defaults import *
- from mysite.myapp.views import myview
-
- urlpatterns = patterns('',
- ('^myview/$', myview)
- )
-
-One useful application of this can be seen when using decorators; this
-change allows you to apply decorators to views *in your
-URLconf*. Thus, you can make a generic view require login very
-easily::
-
- from django.conf.urls.defaults import *
- from django.contrib.auth.decorators import login_required
- from django.views.generic.list_detail import object_list
- from mysite.myapp.models import MyModel
-
- info = {
- "queryset" : MyModel.objects.all(),
- }
-
- urlpatterns = patterns('',
- ('^myview/$', login_required(object_list), info)
- )
-
-Note that both syntaxes (strings and callables) are valid, and will continue to
-be valid for the foreseeable future.
-
-The test framework
-------------------
-
-Django now includes a test framework so you can start transmuting fear into
-boredom (with apologies to Kent Beck). You can write tests based on doctest_
-or unittest_ and test your views with a simple test client.
-
-There is also new support for "fixtures" -- initial data, stored in any of the
-supported `serialization formats`_, that will be loaded into your database at the
-start of your tests. This makes testing with real data much easier.
-
-See `the testing documentation`_ for the full details.
-
-.. _doctest: http://docs.python.org/library/doctest.html
-.. _unittest: http://docs.python.org/library/unittest.html
-.. _the testing documentation: http://www.djangoproject.com/documentation/0.96/testing/
-.. _serialization formats: http://www.djangoproject.com/documentation/0.96/serialization/
-
-Improvements to the admin interface
------------------------------------
-
-A small change, but a very nice one: dedicated views for adding and
-updating users have been added to the admin interface, so you no
-longer need to worry about working with hashed passwords in the admin.
-
-Thanks
-======
-
-Since 0.95, a number of people have stepped forward and taken a major
-new role in Django's development. We'd like to thank these people for
-all their hard work:
-
- * Russell Keith-Magee and Malcolm Tredinnick for their major code
- contributions. This release wouldn't have been possible without them.
-
- * Our new release manager, James Bennett, for his work in getting out
- 0.95.1, 0.96, and (hopefully) future release.
-
- * Our ticket managers Chris Beaven (aka SmileyChris), Simon Greenhill,
- Michael Radziej, and Gary Wilson. They agreed to take on the monumental
- task of wrangling our tickets into nicely cataloged submission. Figuring
- out what to work on is now about a million times easier; thanks again,
- guys.
-
- * Everyone who submitted a bug report, patch or ticket comment. We can't
- possibly thank everyone by name -- over 200 developers submitted patches
- that went into 0.96 -- but everyone who's contributed to Django is listed
- in AUTHORS_.
-
-.. _AUTHORS: http://code.djangoproject.com/browser/django/trunk/AUTHORS
diff --git a/parts/django/docs/releases/1.0-alpha-1.txt b/parts/django/docs/releases/1.0-alpha-1.txt
deleted file mode 100644
index 82846be..0000000
--- a/parts/django/docs/releases/1.0-alpha-1.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-================================
-Django 1.0 alpha release notes
-================================
-
-Welcome to Django 1.0 alpha!
-
-This is the first in a series of preview/development releases leading
-up to the eventual release of Django 1.0, currently scheduled to take
-place in early September 2008. This release is primarily targeted at
-developers who are interested in testing the Django codebase and
-helping to identify and resolve bugs prior to the final 1.0 release.
-
-As such, this release is *not* intended for production use, and any
-such use is strongly discouraged.
-
-
-What's new in Django 1.0 alpha
-==============================
-
-Django's development trunk has been the site of nearly constant
-activity over the past year, with several major new features landing
-since the 0.96 release. Some of the highlights include:
-
-Refactored admin application (newforms-admin)
- The Django administrative interface (``django.contrib.admin``) has
- been completely refactored; admin definitions are now completely
- decoupled from model definitions (no more ``class Admin``
- declaration in models!), rewritten to use Django's new
- form-handling library (introduced in the 0.96 release as
- ``django.newforms``, and now available as simply ``django.forms``)
- and redesigned with extensibility and customization in mind. Full
- documentation for the admin application is available online in the
- official Django documentation:
-
- :doc:`admin reference </ref/contrib/admin/index>`
-
-Improved Unicode handling
- Django's internals have been refactored to use Unicode throughout;
- this drastically simplifies the task of dealing with
- non-Western-European content and data in Django. Additionally,
- utility functions have been provided to ease interoperability with
- third-party libraries and systems which may or may not handle
- Unicode gracefully. Details are available in Django's
- Unicode-handling documentation:
-
- :doc:`unicode reference </ref/unicode>`
-
-An improved Django ORM
- Django's object-relational mapper -- the component which provides
- the mapping between Django model classes and your database, and
- which mediates your database queries -- has been dramatically
- improved by a massive refactoring. For most users of Django this
- is backwards-compatible; the public-facing API for database
- querying underwent a few minor changes, but most of the updates
- took place in the ORM's internals. A guide to the changes,
- including backwards-incompatible modifications and mentions of new
- features opened up by this refactoring, is available on the Django
- wiki:
-
- http://code.djangoproject.com/wiki/QuerysetRefactorBranch
-
-Automatic escaping of template variables
- To provide improved security against cross-site scripting (XSS)
- vulnerabilities, Django's template system now automatically
- escapes the output of variables. This behavior is configurable,
- and allows both variables and larger template constructs to be
- marked as safe (requiring no escaping) or unsafe (requiring
- escaping). A full guide to this feature is in the documentation
- for the :ttag:`autoescape` tag.
-
-There are many more new features, many bugfixes and many enhancements
-to existing features from previous releases. The ``newforms`` library,
-for example, has undergone massive improvements including several
-useful add-ons in ``django.contrib`` which complement and build on
-Django's form-handling capabilities, and Django's file-uploading
-handlers have been refactored to allow finer-grained control over the
-uploading process as well as streaming uploads of large files.
-
-Along with these improvements and additions, we've made a number of
-of backwards-incompatible changes to the framework, as features have been
-fleshed out and APIs have been finalized for the 1.0 release. A
-complete guide to these changes will be available as part of the final
-Django 1.0 release, and a comprehensive list of backwards-incompatible
-changes is also available on the Django wiki for those who want to
-begin developing and testing their upgrade process:
-
- http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges
-
-
-The Django 1.0 roadmap
-======================
-
-One of the primary goals of this alpha release is to focus attention
-on the remaining features to be implemented for Django 1.0, and on the
-bugs that need to be resolved before the final release. Following
-this release, we'll be conducting a series of sprints building up to a
-series of beta releases and a release-candidate stage, followed soon
-after by Django 1.0. The timeline is projected to be:
-
-* August 1, 2008: Sprint (based in Washington, DC, and online).
-
-* August 5, 2008: Django 1.0 beta 1 release. This will also constitute
- the feature freeze for 1.0. Any feature to be included in 1.0 must
- be completed and in trunk by this time.
-
-* August 8, 2008: Sprint (based in Lawrence, KS, and online).
-
-* August 12, 2008: Django 1.0 beta 2 release.
-
-* August 15, 2008: Sprint (based in Austin, TX, and online).
-
-* August 19, 2008: Django 1.0 release candidate 1.
-
-* August 22, 2008: Sprint (based in Portland, OR, and online).
-
-* August 26, 2008: Django 1.0 release candidate 2.
-
-* September 2, 2008: Django 1.0 final release. The official Django 1.0
- release party will take place during the first-ever DjangoCon, to be
- held in Mountain View, CA, September 6-7.
-
-Of course, like any estimated timeline, this is subject to change as
-requirements dictate. The latest information will always be available
-on the Django project wiki:
-
- http://code.djangoproject.com/wiki/VersionOneRoadmap
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.0 release, we need your
-help. Although this alpha release is, again, *not* intended for
-production use, you can help the Django team by trying out the alpha
-codebase in a safe test environment and reporting any bugs or issues
-you encounter. The Django ticket tracker is the central place to
-search for open issues:
-
- http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem
-you're running into.
-
-Additionally, discussion of Django development, including progress
-toward the 1.0 release, takes place daily on the django-developers
-mailing list:
-
- http://groups.google.com/group/django-developers
-
-...and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If
-you're interested in helping out with Django's development, feel free
-to join the discussions there.
-
-Django's online documentation also includes pointers on how to
-contribute to Django:
-
- :doc:`contributing to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing
-documentation or simply triaging tickets and helping to test proposed
-bugfixes -- are always welcome and appreciated.
diff --git a/parts/django/docs/releases/1.0-alpha-2.txt b/parts/django/docs/releases/1.0-alpha-2.txt
deleted file mode 100644
index 83e2e2e..0000000
--- a/parts/django/docs/releases/1.0-alpha-2.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-================================
-Django 1.0 alpha 2 release notes
-================================
-
-Welcome to Django 1.0 alpha 2!
-
-This is the second in a series of preview/development releases leading
-up to the eventual release of Django 1.0, currently scheduled to take
-place in early September 2008. This releases is primarily targeted at
-developers who are interested in testing the Django codebase and
-helping to identify and resolve bugs prior to the final 1.0 release.
-
-As such, this release is *not* intended for production use, and any
-such use is strongly discouraged.
-
-
-What's new in Django 1.0 alpha 2
-================================
-
-Django's development trunk has been the site of nearly constant activity over
-the past year, with several major new features landing since the 0.96 release.
-For features which were new as of Django 1.0 alpha 1, see :doc:`the 1.0 alpha 1
-release notes </releases/1.0-alpha-1>`. Since the 1.0 alpha 1 release several new
-features have landed, including:
-
-``django.contrib.gis`` (`GeoDjango`_)
- A project over a year in the making, this adds world-class GIS
- (`Geographic Information Systems`_) support to Django, in the form
- of a ``contrib`` application. `Its documentation`_ is currently
- being maintained externally, and will be merged into the main
- Django documentation prior to the final 1.0 release. Huge thanks
- go to Justin Bronn, Jeremy Dunck, Brett Hoerner and Travis Pinney
- for their efforts in creating and completing this feature.
-
-Pluggable file storage
- Django's built-in ``FileField`` and ``ImageField`` now can take advantage of
- pluggable file-storage backends, allowing extensive customization of where
- and how uploaded files get stored by Django. For details, see :doc:`the
- files documentation </topics/files>`; big thanks go to Marty Alchin for
- putting in the hard work to get this completed.
-
-Jython compatibility
- Thanks to a lot of work from Leo Soto during a Google Summer of
- Code project, Django's codebase has been refactored to remove
- incompatibilities with `Jython`_, an implementation of Python
- written in Java, which runs Python code on the Java Virtual
- Machine. Django is now compatible with the forthcoming Jython 2.5
- release.
-
-There are many other new features and improvements in this release, including
-two major performance boosts: strings marked for translation using
-:doc:`Django's internationalization system </topics/i18n/index>` now consume far less
-memory, and Django's internal dispatcher -- which is invoked frequently during
-request/response processing and when working with Django's object-relational
-mapper -- is now significantly faster.
-
-.. _GeoDjango: http://geodjango.org/
-.. _Geographic Information Systems: http://en.wikipedia.org/wiki/Geographic_information_system
-.. _Its documentation: http://geodjango.org/docs/
-.. _Jython: http://www.jython.org/
-
-
-The Django 1.0 roadmap
-======================
-
-One of the primary goals of this alpha release is to focus attention
-on the remaining features to be implemented for Django 1.0, and on the
-bugs that need to be resolved before the final release. Following this
-release, we'll be conducting a series of development sprints building
-up to the beta and release-candidate stages, followed soon after by
-Django 1.0. The timeline is projected to be:
-
-* **August 14, 2008: Django 1.0 beta release.** Past this point Django
- will be in a "feature freeze" for the 1.0 release; after Django 1.0
- beta, the development focus will be solely on bug fixes and
- stabilization.
-
-* August 15, 2008: Sprint (based in Austin, Texas, USA, and online).
-
-* August 17, 2008: Sprint (based in Tel Aviv, Israel, and online).
-
-* **August 21, 2008: Django 1.0 release candidate 1.** At this point,
- all strings marked for translation within Django's codebase will be
- frozen, to provide contributors time to check and finalize all of
- Django's bundled translation files prior to the final 1.0 release.
-
-* August 22, 2008: Sprint (based in Portland, Oregon, USA, and online).
-
-* **August 26, 2008: Django 1.0 release candidate 2.**
-
-* August 30, 2008: Sprint (based in London, England, UK, and online).
-
-* **September 2, 2008: Django 1.0 final release.** The official Django
- 1.0 release party will take place during the first-ever DjangoCon,
- to be held in Mountain View, California, USA, September 6-7.
-
-Of course, like any estimated timeline, this is subject to change as
-requirements dictate. The latest information will always be available
-on the Django project wiki:
-
- http://code.djangoproject.com/wiki/VersionOneRoadmap
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.0 release, we need your
-help. Although this alpha release is, again, *not* intended for
-production use, you can help the Django team by trying out the alpha
-codebase in a safe test environment and reporting any bugs or issues
-you encounter. The Django ticket tracker is the central place to
-search for open issues:
-
- http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem
-you're running into.
-
-Additionally, discussion of Django development, including progress
-toward the 1.0 release, takes place daily on the django-developers
-mailing list:
-
- http://groups.google.com/group/django-developers
-
-...and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If
-you're interested in helping out with Django's development, feel free
-to join the discussions there.
-
-Django's online documentation also includes pointers on how to
-contribute to Django:
-
- :doc:`contributing to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing
-documentation or simply triaging tickets and helping to test proposed
-bugfixes -- are always welcome and appreciated.
diff --git a/parts/django/docs/releases/1.0-beta-2.txt b/parts/django/docs/releases/1.0-beta-2.txt
deleted file mode 100644
index eabd6b7..0000000
--- a/parts/django/docs/releases/1.0-beta-2.txt
+++ /dev/null
@@ -1,119 +0,0 @@
-===============================
-Django 1.0 beta 2 release notes
-===============================
-
-Welcome to Django 1.0 beta 2!
-
-This is the fourth in a series of preview/development releases leading
-up to the eventual release of Django 1.0, currently scheduled to take
-place in early September 2008. This releases is primarily targeted at
-developers who are interested in testing the Django codebase and
-helping to identify and resolve bugs prior to the final 1.0 release.
-
-As such, this release is *not* intended for production use, and any
-such use is discouraged.
-
-What's new in Django 1.0 beta 2
-===============================
-
-Django's development trunk has been the site of nearly constant
-activity over the past year, with several major new features landing
-since the 0.96 release. For features which were new as of Django 1.0
-alpha 1, see :doc:`the 1.0 alpha 1 release notes
-</releases/1.0-alpha-1>`. For features which were new as of Django 1.0
-alpha 2, see :doc:`the 1.0 alpha 2 release notes
-</releases/1.0-alpha-2>`. For features which were new as of Django 1.0
-beta 1, see :doc:`the 1.0 beta 1 release notes </releases/1.0-beta>`.
-
-This beta release includes two major features:
-
-Refactored ``django.contrib.comments``
- As part of a Google Summer of Code project, Thejaswi Puthraya
- carried out a major rewrite and refactoring of Django's bundled
- comment system, greatly increasing its flexibility and
- customizability. :doc:`Full documentation
- </ref/contrib/comments/index>` is available, as well as :doc:`an
- upgrade guide </ref/contrib/comments/upgrade>` if you were using
- the previous incarnation of the comments application..
-
-Refactored documentation
- Django's bundled and online documentation has also been
- significantly refactored; the new documentation system uses
- `Sphinx`_ to build the docs and handle such niceties as topical
- indexes, reference documentation and cross-references within the
- docs. You can check out the new documentation `online`_ or, if you
- have Sphinx installed, build the HTML yourself from the
- documentation files bundled with Django.
-
-.. _Sphinx: http://sphinx.pocoo.org/
-.. _online: http://docs.djangoproject.com/en/dev/
-
-Along with these new features, the Django team has also been hard at
-work polishing Django's codebase for the final 1.0 release; this beta
-release contains a large number of smaller improvements and bugfixes
-from the ongoing push to 1.0.
-
-Also, as part of its ongoing deprecation process, Django's old
-form-handling system has been removed; this means ``django.oldforms``
-no longer exists, and its various API hooks (such as automatic
-manipulators) are no longer present in Django. This system has been
-completely replaced by :doc:`the new form-handling system
-</topics/forms/index>` in ``django.forms``.
-
-
-The Django 1.0 roadmap
-======================
-
-One of the primary goals of this beta release is to focus attention on
-the remaining features to be implemented for Django 1.0, and on the
-bugs that need to be resolved before the final release. As of this
-beta release, Django is in its final "feature freeze" for 1.0; feature
-requests will be deferred to later releases, and the development
-effort will be focused solely on bug-fixing and stability. Django is
-also now in a "string freeze"; translatable strings (labels, error
-messages, etc.) in Django's codebase will not be changed prior to the
-release, in order to allow our translators to produce the final 1.0
-version of Django's translation files.
-
-Following this release, we'll be conducting a final development sprint
-on August 30, 2008, based in London and coordinated online; the goal
-of this sprint will be to squash as many bugs as possible in
-anticipation of the final 1.0 release, which is currently targeted for
-**September 2, 2008**. The official Django 1.0 release party will take
-place during the first-ever DjangoCon, to be held in Mountain View,
-California, USA, September 6-7.
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.0 release, we need your
-help. Although this beta release is, again, *not* intended for
-production use, you can help the Django team by trying out the beta
-codebase in a safe test environment and reporting any bugs or issues
-you encounter. The Django ticket tracker is the central place to
-search for open issues:
-
- http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem
-you're running into.
-
-Additionally, discussion of Django development, including progress
-toward the 1.0 release, takes place daily on the django-developers
-mailing list:
-
- http://groups.google.com/group/django-developers
-
-...and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If
-you're interested in helping out with Django's development, feel free
-to join the discussions there.
-
-Django's online documentation also includes pointers on how to
-contribute to Django:
-
- :doc:`contributing to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing
-documentation or simply triaging tickets and helping to test proposed
-bugfixes -- are always welcome and appreciated.
diff --git a/parts/django/docs/releases/1.0-beta.txt b/parts/django/docs/releases/1.0-beta.txt
deleted file mode 100644
index 9e07e6c..0000000
--- a/parts/django/docs/releases/1.0-beta.txt
+++ /dev/null
@@ -1,153 +0,0 @@
-===============================
-Django 1.0 beta 1 release notes
-===============================
-
-Welcome to Django 1.0 beta 1!
-
-This is the third in a series of preview/development releases leading
-up to the eventual release of Django 1.0, currently scheduled to take
-place in early September 2008. This releases is primarily targeted at
-developers who are interested in testing the Django codebase and
-helping to identify and resolve bugs prior to the final 1.0 release.
-
-As such, this release is *not* intended for production use, and any
-such use is discouraged.
-
-What's new in Django 1.0 beta 1
-===============================
-
-Django's development trunk has been the site of nearly constant activity over
-the past year, with several major new features landing since the 0.96 release.
-For features which were new as of Django 1.0 alpha 1, see :doc:`the 1.0 alpha 1
-release notes </releases/1.0-alpha-1>`. For features which were new as of Django
-1.0 alpha 2, see :doc:`the 1.0 alpha 2 release notes </releases/1.0-alpha-2>`.
-
-This beta release does not contain any major new features, but does
-include several smaller updates and improvements to Django:
-
-Generic relations in forms and admin
- Classes are now included in ``django.contrib.contenttypes`` which
- can be used to support generic relations in both the admin
- interface and in end-user forms. See :ref:`the documentation for
- generic relations <generic-relations>` for details.
-
-Improved flexibility in the admin
- Following up on the refactoring of Django's administrative
- interface (``django.contrib.admin``), introduced in Django 1.0
- alpha 1, two new hooks have been added to allow customized pre-
- and post-save handling of model instances in the admin. Full
- details are in :doc:`the admin documentation </ref/contrib/admin/index>`.
-
-``INSERT``/``UPDATE`` distinction
- Although Django's default behavior of having a model's ``save()``
- method automatically determine whether to perform an ``INSERT`` or
- an ``UPDATE`` at the SQL level is suitable for the majority of
- cases, there are occasional situations where forcing one or the
- other is useful. As a result, models can now support an additional
- parameter to ``save()`` which can force a specific
- operation. Consult the database API documentation for details
- and important notes about appropriate use of this parameter.
-
-Split ``CacheMiddleware``
- Django's ``CacheMiddleware`` has been split into three classes:
- ``CacheMiddleware`` itself still exists and retains all of its
- previous functionality, but it is now built from two separate
- middleware classes which handle the two parts of caching (inserting
- into and reading from the cache) separately, offering additional
- flexibility for situations where combining these functions into a
- single middleware posed problems. Full details, including updated
- notes on appropriate use, are in
- :doc:`the caching documentation </topics/cache>`.
-
-Removal of deprecated features
- A number of features and methods which had previously been marked
- as deprecated, and which were scheduled for removal prior to the
- 1.0 release, are no longer present in Django. These include
- imports of the form library from ``django.newforms`` (now located
- simply at ``django.forms``), the ``form_for_model`` and
- ``form_for_instance`` helper functions (which have been replaced
- by ``ModelForm``) and a number of deprecated features which were
- replaced by the dispatcher, file-uploading and file-storage
- refactorings introduced in the Django 1.0 alpha releases. A full
- list of these and all other backwards-incompatible changes is
- available on `the Django wiki`_.
-
-A number of other improvements and bugfixes have also been included:
-some tricky cases involving case-sensitivity in differing MySQL
-collations have been resolved, Windows packaging and installation has
-been improved and the method by which Django generates unique session
-identifiers has been made much more robust.
-
-.. _the documentation for generic relations: ../contenttypes/#generic-relations
-.. _the Django wiki: http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges#Removedseveralmoredeprecatedfeaturesfor1.0
-
-
-The Django 1.0 roadmap
-======================
-
-One of the primary goals of this beta release is to focus attention on
-the remaining features to be implemented for Django 1.0, and on the
-bugs that need to be resolved before the final release. Following this
-release, we'll be conducting a series of development sprints building
-up to the release-candidate stage, followed soon after by Django
-1.0. The timeline is projected to be:
-
-* August 15, 2008: Sprint (based in Austin, Texas, USA, and online).
-
-* August 17, 2008: Sprint (based in Tel Aviv, Israel, and online).
-
-* **August 21, 2008: Django 1.0 release candidate 1.** At this point,
- all strings marked for translation within Django's codebase will be
- frozen, to provide contributors time to check and finalize all of
- Django's bundled translation files prior to the final 1.0 release.
-
-* August 22, 2008: Sprint (based in Portland, Oregon, USA, and online).
-
-* **August 26, 2008: Django 1.0 release candidate 2.**
-
-* August 30, 2008: Sprint (based in London, England, UK, and online).
-
-* **September 2, 2008: Django 1.0 final release.** The official Django
- 1.0 release party will take place during the first-ever DjangoCon,
- to be held in Mountain View, California, USA, September 6-7.
-
-Of course, like any estimated timeline, this is subject to change as
-requirements dictate. The latest information will always be available
-on the Django project wiki:
-
- http://code.djangoproject.com/wiki/VersionOneRoadmap
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.0 release, we need your
-help. Although this beta release is, again, *not* intended for
-production use, you can help the Django team by trying out the beta
-codebase in a safe test environment and reporting any bugs or issues
-you encounter. The Django ticket tracker is the central place to
-search for open issues:
-
- http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem
-you're running into.
-
-Additionally, discussion of Django development, including progress
-toward the 1.0 release, takes place daily on the django-developers
-mailing list:
-
- http://groups.google.com/group/django-developers
-
-...and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If
-you're interested in helping out with Django's development, feel free
-to join the discussions there.
-
-Django's online documentation also includes pointers on how to
-contribute to Django:
-
- :doc:`contributing to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing
-documentation or simply triaging tickets and helping to test proposed
-bugfixes -- are always welcome and appreciated.
diff --git a/parts/django/docs/releases/1.0-porting-guide.txt b/parts/django/docs/releases/1.0-porting-guide.txt
deleted file mode 100644
index e12b34e..0000000
--- a/parts/django/docs/releases/1.0-porting-guide.txt
+++ /dev/null
@@ -1,772 +0,0 @@
-=========================================
-Porting your apps from Django 0.96 to 1.0
-=========================================
-
-.. highlight:: python
-
-Django 1.0 breaks compatibility with 0.96 in some areas.
-
-This guide will help you port 0.96 projects and apps to 1.0. The first part of
-this document includes the common changes needed to run with 1.0. If after going
-through the first part your code still breaks, check the section `Less-common
-Changes`_ for a list of a bunch of less-common compatibility issues.
-
-.. seealso::
-
- The :doc:`1.0 release notes </releases/1.0>`. That document explains the new
- features in 1.0 more deeply; the porting guide is more concerned with
- helping you quickly update your code.
-
-Common changes
-==============
-
-This section describes the changes between 0.96 and 1.0 that most users will
-need to make.
-
-Use Unicode
------------
-
-Change string literals (``'foo'``) into Unicode literals (``u'foo'``). Django
-now uses Unicode strings throughout. In most places, raw strings will continue
-to work, but updating to use Unicode literals will prevent some obscure
-problems.
-
-See :doc:`/ref/unicode` for full details.
-
-Models
-------
-
-Common changes to your models file:
-
-Rename ``maxlength`` to ``max_length``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Rename your ``maxlength`` argument to ``max_length`` (this was changed to be
-consistent with form fields):
-
-Replace ``__str__`` with ``__unicode__``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Replace your model's ``__str__`` function with a ``__unicode__`` method, and
-make sure you `use Unicode`_ (``u'foo'``) in that method.
-
-Remove ``prepopulated_from``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Remove the ``prepopulated_from`` argument on model fields. It's no longer valid
-and has been moved to the ``ModelAdmin`` class in ``admin.py``. See `the
-admin`_, below, for more details about changes to the admin.
-
-Remove ``core``
-~~~~~~~~~~~~~~~
-
-Remove the ``core`` argument from your model fields. It is no longer
-necessary, since the equivalent functionality (part of :ref:`inline editing
-<admin-inlines>`) is handled differently by the admin interface now. You don't
-have to worry about inline editing until you get to `the admin`_ section,
-below. For now, remove all references to ``core``.
-
-Replace ``class Admin:`` with ``admin.py``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Remove all your inner ``class Admin`` declarations from your models. They won't
-break anything if you leave them, but they also won't do anything. To register
-apps with the admin you'll move those declarations to an ``admin.py`` file;
-see `the admin`_ below for more details.
-
-.. seealso::
-
- A contributor to djangosnippets__ has written a script that'll `scan your
- models.py and generate a corresponding admin.py`__.
-
- __ http://www.djangosnippets.org/
- __ http://www.djangosnippets.org/snippets/603/
-
-Example
-~~~~~~~
-
-Below is an example ``models.py`` file with all the changes you'll need to make:
-
-Old (0.96) ``models.py``::
-
- class Author(models.Model):
- first_name = models.CharField(maxlength=30)
- last_name = models.CharField(maxlength=30)
- slug = models.CharField(maxlength=60, prepopulate_from=('first_name', 'last_name'))
-
- class Admin:
- list_display = ['first_name', 'last_name']
-
- def __str__(self):
- return '%s %s' % (self.first_name, self.last_name)
-
-New (1.0) ``models.py``::
-
- class Author(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
- slug = models.CharField(max_length=60)
-
- def __unicode__(self):
- return u'%s %s' % (self.first_name, self.last_name)
-
-New (1.0) ``admin.py``::
-
- from django.contrib import admin
- from models import Author
-
- class AuthorAdmin(admin.ModelAdmin):
- list_display = ['first_name', 'last_name']
- prepopulated_fields = {
- 'slug': ('first_name', 'last_name')
- }
-
- admin.site.register(Author, AuthorAdmin)
-
-The Admin
----------
-
-One of the biggest changes in 1.0 is the new admin. The Django administrative
-interface (``django.contrib.admin``) has been completely refactored; admin
-definitions are now completely decoupled from model definitions, the framework
-has been rewritten to use Django's new form-handling library and redesigned with
-extensibility and customization in mind.
-
-Practically, this means you'll need to rewrite all of your ``class Admin``
-declarations. You've already seen in `models`_ above how to replace your ``class
-Admin`` with a ``admin.site.register()`` call in an ``admin.py`` file. Below are
-some more details on how to rewrite that ``Admin`` declaration into the new
-syntax.
-
-Use new inline syntax
-~~~~~~~~~~~~~~~~~~~~~
-
-The new ``edit_inline`` options have all been moved to ``admin.py``. Here's an
-example:
-
-Old (0.96)::
-
- class Parent(models.Model):
- ...
-
- class Child(models.Model):
- parent = models.ForeignKey(Parent, edit_inline=models.STACKED, num_in_admin=3)
-
-
-New (1.0)::
-
- class ChildInline(admin.StackedInline):
- model = Child
- extra = 3
-
- class ParentAdmin(admin.ModelAdmin):
- model = Parent
- inlines = [ChildInline]
-
- admin.site.register(Parent, ParentAdmin)
-
-See :ref:`admin-inlines` for more details.
-
-Simplify ``fields``, or use ``fieldsets``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The old ``fields`` syntax was quite confusing, and has been simplified. The old
-syntax still works, but you'll need to use ``fieldsets`` instead.
-
-Old (0.96)::
-
- class ModelOne(models.Model):
- ...
-
- class Admin:
- fields = (
- (None, {'fields': ('foo','bar')}),
- )
-
- class ModelTwo(models.Model):
- ...
-
- class Admin:
- fields = (
- ('group1', {'fields': ('foo','bar'), 'classes': 'collapse'}),
- ('group2', {'fields': ('spam','eggs'), 'classes': 'collapse wide'}),
- )
-
-
-New (1.0)::
-
- class ModelOneAdmin(admin.ModelAdmin):
- fields = ('foo', 'bar')
-
- class ModelTwoAdmin(admin.ModelAdmin):
- fieldsets = (
- ('group1', {'fields': ('foo','bar'), 'classes': 'collapse'}),
- ('group2', {'fields': ('spam','eggs'), 'classes': 'collapse wide'}),
- )
-
-
-.. seealso::
-
- * More detailed information about the changes and the reasons behind them
- can be found on the `NewformsAdminBranch wiki page`__
-
- * The new admin comes with a ton of new features; you can read about them in
- the :doc:`admin documentation </ref/contrib/admin/index>`.
-
- __ http://code.djangoproject.com/wiki/NewformsAdminBranch
-
-URLs
-----
-
-Update your root ``urls.py``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you're using the admin site, you need to update your root ``urls.py``.
-
-Old (0.96) ``urls.py``::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- (r'^admin/', include('django.contrib.admin.urls')),
-
- # ... the rest of your URLs here ...
- )
-
-New (1.0) ``urls.py``::
-
- from django.conf.urls.defaults import *
-
- # The next two lines enable the admin and load each admin.py file:
- from django.contrib import admin
- admin.autodiscover()
-
- urlpatterns = patterns('',
- (r'^admin/(.*)', admin.site.root),
-
- # ... the rest of your URLs here ...
- )
-
-Views
------
-
-Use ``django.forms`` instead of ``newforms``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Replace ``django.newforms`` with ``django.forms`` -- Django 1.0 renamed the
-``newforms`` module (introduced in 0.96) to plain old ``forms``. The
-``oldforms`` module was also removed.
-
-If you're already using the ``newforms`` library, and you used our recommended
-``import`` statement syntax, all you have to do is change your import
-statements.
-
-Old::
-
- from django import newforms as forms
-
-New::
-
- from django import forms
-
-If you're using the old forms system (formerly known as ``django.forms`` and
-``django.oldforms``), you'll have to rewrite your forms. A good place to start
-is the :doc:`forms documentation </topics/forms/index>`
-
-Handle uploaded files using the new API
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Replace use of uploaded files -- that is, entries in ``request.FILES`` -- as
-simple dictionaries with the new :class:`~django.core.files.UploadedFile`. The
-old dictionary syntax no longer works.
-
-Thus, in a view like::
-
- def my_view(request):
- f = request.FILES['file_field_name']
- ...
-
-...you'd need to make the following changes:
-
-===================== =====================
-Old (0.96) New (1.0)
-===================== =====================
-``f['content']`` ``f.read()``
-``f['filename']`` ``f.name``
-``f['content-type']`` ``f.content_type``
-===================== =====================
-
-Work with file fields using the new API
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The internal implementation of :class:`django.db.models.FileField` have changed.
-A visible result of this is that the way you access special attributes (URL,
-filename, image size, etc) of these model fields has changed. You will need to
-make the following changes, assuming your model's
-:class:`~django.db.models.FileField` is called ``myfile``:
-
-=================================== ========================
-Old (0.96) New (1.0)
-=================================== ========================
-``myfile.get_content_filename()`` ``myfile.content.path``
-``myfile.get_content_url()`` ``myfile.content.url``
-``myfile.get_content_size()`` ``myfile.content.size``
-``myfile.save_content_file()`` ``myfile.content.save()``
-``myfile.get_content_width()`` ``myfile.content.width``
-``myfile.get_content_height()`` ``myfile.content.height``
-=================================== ========================
-
-Note that the ``width`` and ``height`` attributes only make sense for
-:class:`~django.db.models.ImageField` fields. More details can be found in the
-:doc:`model API </ref/models/fields>` documentation.
-
-Use ``Paginator`` instead of ``ObjectPaginator``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``ObjectPaginator`` in 0.96 has been removed and replaced with an improved
-version, :class:`django.core.paginator.Paginator`.
-
-Templates
----------
-
-Learn to love autoescaping
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-By default, the template system now automatically HTML-escapes the output of
-every variable. To learn more, see :ref:`automatic-html-escaping`.
-
-To disable auto-escaping for an individual variable, use the :tfilter:`safe`
-filter:
-
-.. code-block:: html+django
-
- This will be escaped: {{ data }}
- This will not be escaped: {{ data|safe }}
-
-To disable auto-escaping for an entire template, wrap the template (or just a
-particular section of the template) in the :ttag:`autoescape` tag:
-
-.. code-block:: html+django
-
- {% autoescape off %}
- ... unescaped template content here ...
- {% endautoescape %}
-
-Less-common changes
-===================
-
-The following changes are smaller, more localized changes. They should only
-affect more advanced users, but it's probably worth reading through the list and
-checking your code for these things.
-
-Signals
--------
-
-* Add ``**kwargs`` to any registered signal handlers.
-
-* Connect, disconnect, and send signals via methods on the
- :class:`~django.dispatch.Signal` object instead of through module methods in
- ``django.dispatch.dispatcher``.
-
-* Remove any use of the ``Anonymous`` and ``Any`` sender options; they no longer
- exist. You can still receive signals sent by any sender by using
- ``sender=None``
-
-* Make any custom signals you've declared into instances of
- :class:`django.dispatch.Signal` instead of anonymous objects.
-
-Here's quick summary of the code changes you'll need to make:
-
-================================================= ======================================
-Old (0.96) New (1.0)
-================================================= ======================================
-``def callback(sender)`` ``def callback(sender, **kwargs)``
-``sig = object()`` ``sig = django.dispatch.Signal()``
-``dispatcher.connect(callback, sig)`` ``sig.connect(callback)``
-``dispatcher.send(sig, sender)`` ``sig.send(sender)``
-``dispatcher.connect(callback, sig, sender=Any)`` ``sig.connect(callback, sender=None)``
-================================================= ======================================
-
-Comments
---------
-
-If you were using Django 0.96's ``django.contrib.comments`` app, you'll need to
-upgrade to the new comments app introduced in 1.0. See
-:doc:`/ref/contrib/comments/upgrade` for details.
-
-Template tags
--------------
-
-:ttag:`spaceless` tag
-~~~~~~~~~~~~~~~~~~~~~
-
-The spaceless template tag now removes *all* spaces between HTML tags, instead
-of preserving a single space.
-
-Local flavors
--------------
-
-U.S. local flavor
-~~~~~~~~~~~~~~~~~
-
-``django.contrib.localflavor.usa`` has been renamed to
-:mod:`django.contrib.localflavor.us`. This change was made to match the naming
-scheme of other local flavors. To migrate your code, all you need to do is
-change the imports.
-
-Sessions
---------
-
-Getting a new session key
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``SessionBase.get_new_session_key()`` has been renamed to
-``_get_new_session_key()``. ``get_new_session_object()`` no longer exists.
-
-Fixtures
---------
-
-Loading a row no longer calls ``save()``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Previously, loading a row automatically ran the model's ``save()`` method. This
-is no longer the case, so any fields (for example: timestamps) that were
-auto-populated by a ``save()`` now need explicit values in any fixture.
-
-Settings
---------
-
-Better exceptions
-~~~~~~~~~~~~~~~~~
-
-The old :exc:`EnvironmentError` has split into an :exc:`ImportError` when
-Django fails to find the settings module and a :exc:`RuntimeError` when you try
-to reconfigure settings after having already used them
-
-``LOGIN_URL`` has moved
-~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``LOGIN_URL`` constant moved from ``django.contrib.auth`` into the
-``settings`` module. Instead of using ``from django.contrib.auth import
-LOGIN_URL`` refer to :setting:`settings.LOGIN_URL <LOGIN_URL>`.
-
-:setting:`APPEND_SLASH` behavior has been updated
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In 0.96, if a URL didn't end in a slash or have a period in the final
-component of its path, and ``APPEND_SLASH`` was True, Django would redirect
-to the same URL, but with a slash appended to the end. Now, Django checks to
-see whether the pattern without the trailing slash would be matched by
-something in your URL patterns. If so, no redirection takes place, because it
-is assumed you deliberately wanted to catch that pattern.
-
-For most people, this won't require any changes. Some people, though, have URL
-patterns that look like this::
-
- r'/some_prefix/(.*)$'
-
-Previously, those patterns would have been redirected to have a trailing
-slash. If you always want a slash on such URLs, rewrite the pattern as::
-
- r'/some_prefix/(.*/)$'
-
-Smaller model changes
----------------------
-
-Different exception from ``get()``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Managers now return a :exc:`MultipleObjectsReturned` exception
-instead of :exc:`AssertionError`:
-
-Old (0.96)::
-
- try:
- Model.objects.get(...)
- except AssertionError:
- handle_the_error()
-
-New (1.0)::
-
- try:
- Model.objects.get(...)
- except Model.MultipleObjectsReturned:
- handle_the_error()
-
-``LazyDate`` has been fired
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``LazyDate`` helper class no longer exists.
-
-Default field values and query arguments can both be callable objects, so
-instances of ``LazyDate`` can be replaced with a reference to ``datetime.datetime.now``:
-
-Old (0.96)::
-
- class Article(models.Model):
- title = models.CharField(maxlength=100)
- published = models.DateField(default=LazyDate())
-
-New (1.0)::
-
- import datetime
-
- class Article(models.Model):
- title = models.CharField(max_length=100)
- published = models.DateField(default=datetime.datetime.now)
-
-``DecimalField`` is new, and ``FloatField`` is now a proper float
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Old (0.96)::
-
- class MyModel(models.Model):
- field_name = models.FloatField(max_digits=10, decimal_places=3)
- ...
-
-New (1.0)::
-
- class MyModel(models.Model):
- field_name = models.DecimalField(max_digits=10, decimal_places=3)
- ...
-
-If you forget to make this change, you will see errors about ``FloatField``
-not taking a ``max_digits`` attribute in ``__init__``, because the new
-``FloatField`` takes no precision-related arguments.
-
-If you're using MySQL or PostgreSQL, no further changes are needed. The
-database column types for ``DecimalField`` are the same as for the old
-``FloatField``.
-
-If you're using SQLite, you need to force the database to view the
-appropriate columns as decimal types, rather than floats. To do this, you'll
-need to reload your data. Do this after you have made the change to using
-``DecimalField`` in your code and updated the Django code.
-
-.. warning::
-
- **Back up your database first!**
-
- For SQLite, this means making a copy of the single file that stores the
- database (the name of that file is the ``DATABASE_NAME`` in your settings.py
- file).
-
-To upgrade each application to use a ``DecimalField``, you can do the
-following, replacing ``<app>`` in the code below with each app's name:
-
-.. code-block:: bash
-
- $ ./manage.py dumpdata --format=xml <app> > data-dump.xml
- $ ./manage.py reset <app>
- $ ./manage.py loaddata data-dump.xml
-
-Notes:
-
- 1. It's important that you remember to use XML format in the first step of
- this process. We are exploiting a feature of the XML data dumps that makes
- porting floats to decimals with SQLite possible.
-
- 2. In the second step you will be asked to confirm that you are prepared to
- lose the data for the application(s) in question. Say yes; we'll restore
- this data in the third step, of course.
-
- 3. ``DecimalField`` is not used in any of the apps shipped with Django prior
- to this change being made, so you do not need to worry about performing
- this procedure for any of the standard Django models.
-
-If something goes wrong in the above process, just copy your backed up
-database file over the original file and start again.
-
-Internationalization
---------------------
-
-:func:`django.views.i18n.set_language` now requires a POST request
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Previously, a GET request was used. The old behavior meant that state (the
-locale used to display the site) could be changed by a GET request, which is
-against the HTTP specification's recommendations. Code calling this view must
-ensure that a POST request is now made, instead of a GET. This means you can
-no longer use a link to access the view, but must use a form submission of
-some kind (e.g. a button).
-
-``_()`` is no longer in builtins
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``_()`` (the callable object whose name is a single underscore) is no longer
-monkeypatched into builtins -- that is, it's no longer available magically in
-every module.
-
-If you were previously relying on ``_()`` always being present, you should now
-explicitly import ``ugettext`` or ``ugettext_lazy``, if appropriate, and alias
-it to ``_`` yourself::
-
- from django.utils.translation import ugettext as _
-
-HTTP request/response objects
------------------------------
-
-Dictionary access to ``HttpRequest``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``HttpRequest`` objects no longer directly support dictionary-style
-access; previously, both ``GET`` and ``POST`` data were directly
-available on the ``HttpRequest`` object (e.g., you could check for a
-piece of form data by using ``if 'some_form_key' in request`` or by
-reading ``request['some_form_key']``. This is no longer supported; if
-you need access to the combined ``GET`` and ``POST`` data, use
-``request.REQUEST`` instead.
-
-It is strongly suggested, however, that you always explicitly look in
-the appropriate dictionary for the type of request you expect to
-receive (``request.GET`` or ``request.POST``); relying on the combined
-``request.REQUEST`` dictionary can mask the origin of incoming data.
-
-Accessing ``HTTPResponse`` headers
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``django.http.HttpResponse.headers`` has been renamed to ``_headers`` and
-:class:`~django.http.HttpResponse` now supports containment checking directly.
-So use ``if header in response:`` instead of ``if header in response.headers:``.
-
-Generic relations
------------------
-
-Generic relations have been moved out of core
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The generic relation classes -- ``GenericForeignKey`` and ``GenericRelation``
--- have moved into the :mod:`django.contrib.contenttypes` module.
-
-Testing
--------
-
-:meth:`django.test.Client.login` has changed
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Old (0.96)::
-
- from django.test import Client
- c = Client()
- c.login('/path/to/login','myuser','mypassword')
-
-New (1.0)::
-
- # ... same as above, but then:
- c.login(username='myuser', password='mypassword')
-
-Management commands
--------------------
-
-Running management commands from your code
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-:mod:`django.core.management` has been greatly refactored.
-
-Calls to management services in your code now need to use
-``call_command``. For example, if you have some test code that calls flush and
-load_data::
-
- from django.core import management
- management.flush(verbosity=0, interactive=False)
- management.load_data(['test_data'], verbosity=0)
-
-...you'll need to change this code to read::
-
- from django.core import management
- management.call_command('flush', verbosity=0, interactive=False)
- management.call_command('loaddata', 'test_data', verbosity=0)
-
-Subcommands must now precede options
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``django-admin.py`` and ``manage.py`` now require subcommands to precede
-options. So:
-
-.. code-block:: bash
-
- $ django-admin.py --settings=foo.bar runserver
-
-...no longer works and should be changed to:
-
-.. code-block:: bash
-
- $ django-admin.py runserver --settings=foo.bar
-
-Syndication
------------
-
-``Feed.__init__`` has changed
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``__init__()`` method of the syndication framework's ``Feed`` class now
-takes an ``HttpRequest`` object as its second parameter, instead of the feed's
-URL. This allows the syndication framework to work without requiring the sites
-framework. This only affects code that subclasses ``Feed`` and overrides the
-``__init__()`` method, and code that calls ``Feed.__init__()`` directly.
-
-Data structures
----------------
-
-``SortedDictFromList`` is gone
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``django.newforms.forms.SortedDictFromList`` was removed.
-:class:`django.utils.datastructures.SortedDict` can now be instantiated with
-a sequence of tuples.
-
-To update your code:
-
- 1. Use :class:`django.utils.datastructures.SortedDict` wherever you were
- using ``django.newforms.forms.SortedDictFromList``.
-
- 2. Because :meth:`django.utils.datastructures.SortedDict.copy` doesn't
- return a deepcopy as ``SortedDictFromList.copy()`` did, you will need
- to update your code if you were relying on a deepcopy. Do this by using
- ``copy.deepcopy`` directly.
-
-Database backend functions
---------------------------
-
-Database backend functions have been renamed
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Almost *all* of the database backend-level functions have been renamed and/or
-relocated. None of these were documented, but you'll need to change your code
-if you're using any of these functions, all of which are in :mod:`django.db`:
-
-======================================= ===================================================
-Old (0.96) New (1.0)
-======================================= ===================================================
-``backend.get_autoinc_sql`` ``connection.ops.autoinc_sql``
-``backend.get_date_extract_sql`` ``connection.ops.date_extract_sql``
-``backend.get_date_trunc_sql`` ``connection.ops.date_trunc_sql``
-``backend.get_datetime_cast_sql`` ``connection.ops.datetime_cast_sql``
-``backend.get_deferrable_sql`` ``connection.ops.deferrable_sql``
-``backend.get_drop_foreignkey_sql`` ``connection.ops.drop_foreignkey_sql``
-``backend.get_fulltext_search_sql`` ``connection.ops.fulltext_search_sql``
-``backend.get_last_insert_id`` ``connection.ops.last_insert_id``
-``backend.get_limit_offset_sql`` ``connection.ops.limit_offset_sql``
-``backend.get_max_name_length`` ``connection.ops.max_name_length``
-``backend.get_pk_default_value`` ``connection.ops.pk_default_value``
-``backend.get_random_function_sql`` ``connection.ops.random_function_sql``
-``backend.get_sql_flush`` ``connection.ops.sql_flush``
-``backend.get_sql_sequence_reset`` ``connection.ops.sequence_reset_sql``
-``backend.get_start_transaction_sql`` ``connection.ops.start_transaction_sql``
-``backend.get_tablespace_sql`` ``connection.ops.tablespace_sql``
-``backend.quote_name`` ``connection.ops.quote_name``
-``backend.get_query_set_class`` ``connection.ops.query_set_class``
-``backend.get_field_cast_sql`` ``connection.ops.field_cast_sql``
-``backend.get_drop_sequence`` ``connection.ops.drop_sequence_sql``
-``backend.OPERATOR_MAPPING`` ``connection.operators``
-``backend.allows_group_by_ordinal`` ``connection.features.allows_group_by_ordinal``
-``backend.allows_unique_and_pk`` ``connection.features.allows_unique_and_pk``
-``backend.autoindexes_primary_keys`` ``connection.features.autoindexes_primary_keys``
-``backend.needs_datetime_string_cast`` ``connection.features.needs_datetime_string_cast``
-``backend.needs_upper_for_iops`` ``connection.features.needs_upper_for_iops``
-``backend.supports_constraints`` ``connection.features.supports_constraints``
-``backend.supports_tablespaces`` ``connection.features.supports_tablespaces``
-``backend.uses_case_insensitive_names`` ``connection.features.uses_case_insensitive_names``
-``backend.uses_custom_queryset`` ``connection.features.uses_custom_queryset``
-======================================= ===================================================
-
diff --git a/parts/django/docs/releases/1.0.1.txt b/parts/django/docs/releases/1.0.1.txt
deleted file mode 100644
index 780dc53..0000000
--- a/parts/django/docs/releases/1.0.1.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-==========================
-Django 1.0.1 release notes
-==========================
-
-Welcome to Django 1.0.1!
-
-This is the first "bugfix" release in the Django 1.0 series, improving
-the stability and performance of the Django 1.0 codebase. As such,
-Django 1.0.1 contains no new features (and, pursuant to `our
-compatibility policy`_, maintains backwards compatibility with Django
-1.0), but does contain a number of fixes and other
-improvements. Django 1.0.1 is a recommended upgrade for any
-development or deployment currently using or targeting Django 1.0.
-
-
-Fixes and improvements in Django 1.0.1
-======================================
-
-Django 1.0.1 contains over two hundred fixes to the original Django
-1.0 codebase; full details of every fix are available in `the
-Subversion log of the 1.0.X branch`_, but here are some of the
-highlights:
-
-* Several fixes in ``django.contrib.comments``, pertaining to RSS
- feeds of comments, default ordering of comments and the XHTML and
- internationalization of the default templates for comments.
-
-* Multiple fixes for Django's support of Oracle databases, including
- pagination support for GIS QuerySets, more efficient slicing of
- results and improved introspection of existing databases.
-
-* Several fixes for query support in the Django object-relational
- mapper, including repeated setting and resetting of ordering and
- fixes for working with ``INSERT``-only queries.
-
-* Multiple fixes for inline forms in formsets.
-
-* Multiple fixes for ``unique`` and ``unique_together`` model
- constraints in automatically-generated forms.
-
-* Fixed support for custom callable ``upload_to`` declarations when
- handling file uploads through automatically-generated forms.
-
-* Fixed support for sorting an admin change list based on a callable
- attributes in ``list_display``.
-
-* A fix to the application of autoescaping for literal strings passed
- to the ``join`` template filter. Previously, literal strings passed
- to ``join`` were automatically escaped, contrary to `the documented
- behavior for autoescaping and literal strings`_. Literal strings
- passed to ``join`` are no longer automatically escaped, meaning you
- must now manually escape them; this is an incompatibility if you
- were relying on this bug, but not if you were relying on escaping
- behaving as documented.
-
-* Improved and expanded translation files for many of the languages
- Django supports by default.
-
-* And as always, a large number of improvements to Django's
- documentation, including both corrections to existing documents and
- expanded and new documentation.
-
-.. _our compatibility policy: http://docs.djangoproject.com/en/dev/misc/api-stability/
-.. _the Subversion log of the 1.0.X branch: http://code.djangoproject.com/log/django/branches/releases/1.0.X
-.. _the documented behavior for autoescaping and literal strings: http://docs.djangoproject.com/en/dev/topics/templates/#string-literals-and-automatic-escaping
diff --git a/parts/django/docs/releases/1.0.2.txt b/parts/django/docs/releases/1.0.2.txt
deleted file mode 100644
index b34522a..0000000
--- a/parts/django/docs/releases/1.0.2.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-==========================
-Django 1.0.2 release notes
-==========================
-
-Welcome to Django 1.0.2!
-
-This is the second "bugfix" release in the Django 1.0 series,
-improving the stability and performance of the Django 1.0 codebase. As
-such, Django 1.0.2 contains no new features (and, pursuant to
-:doc:`our compatibility policy </misc/api-stability>`, maintains backwards compatibility with Django
-1.0.0), but does contain a number of fixes and other
-improvements. Django 1.0.2 is a recommended upgrade for any
-development or deployment currently using or targeting Django 1.0.
-
-
-Fixes and improvements in Django 1.0.2
-======================================
-
-The primary reason behind this release is to remedy an issue in the
-recently-released Django 1.0.1; the packaging scripts used for Django
-1.0.1 omitted some directories from the final release package,
-including one directory required by ``django.contrib.gis`` and part of
-Django's unit-test suite.
-
-Django 1.0.2 contains updated packaging scripts, and the release
-package contains the directories omitted from Django 1.0.1. As such,
-this release contains all of the fixes and improvements from Django
-1.0.1; see :doc:`the Django 1.0.1 release notes </releases/1.0.1>` for
-details.
-
-Additionally, in the period since Django 1.0.1 was released:
-
-* Updated Hebrew and Danish translations have been added.
-
-* The default ``__repr__`` method of Django models has been made more
- robust in the face of bad Unicode data coming from the
- ``__unicode__`` method; rather than raise an exception in such
- cases, ``repr()`` will now contain the string "[Bad Unicode data]"
- in place of the invalid Unicode.
-
-* A bug involving the interaction of Django's ``SafeUnicode`` class
- and the MySQL adapter has been resolved; ``SafeUnicode`` instances
- (generated, for example, by template rendering) can now be assigned
- to model attributes and saved to MySQL without requiring an explicit
- intermediate cast to ``unicode``.
-
-* A bug affecting filtering on a nullable ``DateField`` in SQLite has
- been resolved.
-
-* Several updates and improvements have been made to Django's
- documentation.
diff --git a/parts/django/docs/releases/1.0.txt b/parts/django/docs/releases/1.0.txt
deleted file mode 100644
index a2b6083..0000000
--- a/parts/django/docs/releases/1.0.txt
+++ /dev/null
@@ -1,246 +0,0 @@
-========================
-Django 1.0 release notes
-========================
-
-Welcome to Django 1.0!
-
-We've been looking forward to this moment for over three years, and it's finally
-here. Django 1.0 represents a the largest milestone in Django's development to
-date: a Web framework that a group of perfectionists can truly be proud of.
-
-Django 1.0 represents over three years of community development as an Open
-Source project. Django's received contributions from hundreds of developers,
-been translated into fifty languages, and today is used by developers on every
-continent and in every kind of job.
-
-An interesting historical note: when Django was first released in July 2005, the
-initial released version of Django came from an internal repository at revision
-number 8825. Django 1.0 represents revision 8961 of our public repository. It
-seems fitting that our 1.0 release comes at the moment where community
-contributions overtake those made privately.
-
-Stability and forwards-compatibility
-====================================
-
-:doc:`The release of Django 1.0 </releases/1.0>` comes with a promise of API
-stability and forwards-compatibility. In a nutshell, this means that code you
-develop against Django 1.0 will continue to work against 1.1 unchanged, and you
-should need to make only minor changes for any 1.X release.
-
-See the :doc:`API stability guide </misc/api-stability>` for full details.
-
-Backwards-incompatible changes
-==============================
-
-Django 1.0 has a number of backwards-incompatible changes from Django 0.96. If
-you have apps written against Django 0.96 that you need to port, see our
-detailed porting guide:
-
-.. toctree::
- :maxdepth: 1
-
- 1.0-porting-guide
-
-A complete list of backwards-incompatible changes can be found at
-http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges.
-
-What's new in Django 1.0
-========================
-
-A *lot*!
-
-Since Django 0.96, we've made over 4,000 code commits, fixed more than 2,000
-bugs, and edited, added, or removed around 350,000 lines of code. We've also
-added 40,000 lines of new documentation, and greatly improved what was already
-there.
-
-In fact, new documentation is one of our favorite features of Django 1.0, so we
-might as well start there. First, there's a new documentation site:
-
- http://docs.djangoproject.com/
-
-The documentation has been greatly improved, cleaned up, and generally made
-awesome. There's now dedicated search, indexes, and more.
-
-We can't possibly document everything that's new in 1.0, but the documentation
-will be your definitive guide. Anywhere you see something like:
-
-.. versionadded:: 1.0
- This feature is new in Django 1.0
-
-You'll know that you're looking at something new or changed.
-
-The other major highlights of Django 1.0 are:
-
-Re-factored admin application
------------------------------
-
-The Django administrative interface (``django.contrib.admin``) has been
-completely refactored; admin definitions are now completely decoupled from model
-definitions (no more ``class Admin`` declaration in models!), rewritten to use
-Django's new form-handling library (introduced in the 0.96 release as
-``django.newforms``, and now available as simply ``django.forms``) and
-redesigned with extensibility and customization in mind. Full documentation for
-the admin application is available online in the official Django documentation:
-
-See the :doc:`admin reference </ref/contrib/admin/index>` for details
-
-Improved Unicode handling
--------------------------
-
-Django's internals have been refactored to use Unicode throughout; this
-drastically simplifies the task of dealing with non-Western-European content and
-data in Django. Additionally, utility functions have been provided to ease
-interoperability with third-party libraries and systems which may or may not
-handle Unicode gracefully. Details are available in Django's Unicode-handling
-documentation.
-
-See :doc:`/ref/unicode`.
-
-An improved ORM
----------------
-
-Django's object-relational mapper -- the component which provides the mapping
-between Django model classes and your database, and which mediates your database
-queries -- has been dramatically improved by a massive refactoring. For most
-users of Django this is backwards-compatible; the public-facing API for database
-querying underwent a few minor changes, but most of the updates took place in
-the ORM's internals. A guide to the changes, including backwards-incompatible
-modifications and mentions of new features opened up by this refactoring, is
-`available on the Django wiki`__.
-
-__ http://code.djangoproject.com/wiki/QuerysetRefactorBranch
-
-Automatic escaping of template variables
-----------------------------------------
-
-To provide improved security against cross-site scripting (XSS) vulnerabilities,
-Django's template system now automatically escapes the output of variables. This
-behavior is configurable, and allows both variables and larger template
-constructs to be marked as safe (requiring no escaping) or unsafe (requiring
-escaping). A full guide to this feature is in the documentation for the
-:ttag:`autoescape` tag.
-
-``django.contrib.gis`` (GeoDjango)
-----------------------------------
-
-A project over a year in the making, this adds world-class GIS (`Geographic
-Information Systems`_) support to Django, in the form of a ``contrib``
-application. Its documentation is currently being maintained externally, and
-will be merged into the main Django documentation shortly. Huge thanks go to
-Justin Bronn, Jeremy Dunck, Brett Hoerner and Travis Pinney for their efforts in
-creating and completing this feature.
-
-See http://geodjango.org/ for details.
-
-.. _Geographic Information Systems: http://en.wikipedia.org/wiki/Geographic_information_system
-
-Pluggable file storage
-----------------------
-
-Django's built-in ``FileField`` and ``ImageField`` now can take advantage of
-pluggable file-storage backends, allowing extensive customization of where and
-how uploaded files get stored by Django. For details, see :doc:`the files
-documentation </topics/files>`; big thanks go to Marty Alchin for putting in the
-hard work to get this completed.
-
-Jython compatibility
---------------------
-
-Thanks to a lot of work from Leo Soto during a Google Summer of Code project,
-Django's codebase has been refactored to remove incompatibilities with
-`Jython`_, an implementation of Python written in Java, which runs Python code
-on the Java Virtual Machine. Django is now compatible with the forthcoming
-Jython 2.5 release.
-
-See :doc:`/howto/jython`.
-
-.. _Jython: http://www.jython.org/
-
-Generic relations in forms and admin
-------------------------------------
-
-Classes are now included in ``django.contrib.contenttypes`` which can be used to
-support generic relations in both the admin interface and in end-user forms. See
-:ref:`the documentation for generic relations <generic-relations>` for details.
-
-``INSERT``/``UPDATE`` distinction
----------------------------------
-
-Although Django's default behavior of having a model's ``save()`` method
-automatically determine whether to perform an ``INSERT`` or an ``UPDATE`` at the
-SQL level is suitable for the majority of cases, there are occasional situations
-where forcing one or the other is useful. As a result, models can now support an
-additional parameter to ``save()`` which can force a specific operation.
-
-See :ref:`ref-models-force-insert` for details.
-
-Split ``CacheMiddleware``
--------------------------
-
-Django's ``CacheMiddleware`` has been split into three classes:
-``CacheMiddleware`` itself still exists and retains all of its previous
-functionality, but it is now built from two separate middleware classes which
-handle the two parts of caching (inserting into and reading from the cache)
-separately, offering additional flexibility for situations where combining these
-functions into a single middleware posed problems.
-
-Full details, including updated notes on appropriate use, are in :doc:`the
-caching documentation </topics/cache>`.
-
-Refactored ``django.contrib.comments``
---------------------------------------
-
-As part of a Google Summer of Code project, Thejaswi Puthraya carried out a
-major rewrite and refactoring of Django's bundled comment system, greatly
-increasing its flexibility and customizability. :doc:`Full documentation
-</ref/contrib/comments/index>` is available, as well as :doc:`an upgrade guide
-</ref/contrib/comments/upgrade>` if you were using the previous incarnation of
-the comments application.
-
-Removal of deprecated features
-------------------------------
-
-A number of features and methods which had previously been marked as deprecated,
-and which were scheduled for removal prior to the 1.0 release, are no longer
-present in Django. These include imports of the form library from
-``django.newforms`` (now located simply at ``django.forms``), the
-``form_for_model`` and ``form_for_instance`` helper functions (which have been
-replaced by ``ModelForm``) and a number of deprecated features which were
-replaced by the dispatcher, file-uploading and file-storage refactorings
-introduced in the Django 1.0 alpha releases.
-
-Known issues
-============
-
-We've done our best to make Django 1.0 as solid as possible, but unfortunately
-there are a couple of issues that we know about in the release.
-
-Multi-table model inheritance with ``to_field``
------------------------------------------------
-
-If you're using :ref:`multiple table model inheritance
-<multi-table-inheritance>`, be aware of this caveat: child models using a custom
-``parent_link`` and ``to_field`` will cause database integrity errors. A set of
-models like the following are **not valid**::
-
- class Parent(models.Model):
- name = models.CharField(max_length=10)
- other_value = models.IntegerField(unique=True)
-
- class Child(Parent):
- father = models.OneToOneField(Parent, primary_key=True, to_field="other_value", parent_link=True)
- value = models.IntegerField()
-
-This bug will be fixed in the next release of Django.
-
-Caveats with support of certain databases
------------------------------------------
-
-Django attempts to support as many features as possible on all database
-backends. However, not all database backends are alike, and in particular many of the supported database differ greatly from version to version. It's a good idea to checkout our :doc:`notes on supported database </ref/databases>`:
-
- - :ref:`mysql-notes`
- - :ref:`sqlite-notes`
- - :ref:`oracle-notes`
-
diff --git a/parts/django/docs/releases/1.1-alpha-1.txt b/parts/django/docs/releases/1.1-alpha-1.txt
deleted file mode 100644
index b15a2a4..0000000
--- a/parts/django/docs/releases/1.1-alpha-1.txt
+++ /dev/null
@@ -1,163 +0,0 @@
-================================
-Django 1.1 alpha 1 release notes
-================================
-
-February 23, 2009
-
-Welcome to Django 1.1 alpha 1!
-
-This is the first in a series of preview/development releases leading up to the
-eventual release of Django 1.1, currently scheduled to take place in April 2009.
-This release is primarily targeted at developers who are interested in trying
-out new features and testing the Django codebase to help identify and resolve
-bugs prior to the final 1.1 release.
-
-As such, this release is *not* intended for production use, and any such use is
-discouraged.
-
-What's new in Django 1.1 alpha 1
-================================
-
-ORM improvements
-----------------
-
-Two major enhancements have been added to Django's object-relational mapper
-(ORM):
-
-Aggregate support
-~~~~~~~~~~~~~~~~~
-
-.. currentmodule:: django.db.models
-
-It's now possible to run SQL aggregate queries (i.e. ``COUNT()``, ``MAX()``,
-``MIN()``, etc.) from within Django's ORM. You can choose to either return the
-results of the aggregate directly, or else annotate the objects in a
-:class:`QuerySet` with the results of the aggregate query.
-
-This feature is available as new :meth:`QuerySet.aggregate()`` and
-:meth:`QuerySet.annotate()`` methods, and is covered in detail in :doc:`the ORM
-aggregation documentation </topics/db/aggregation>`
-
-Query expressions
-~~~~~~~~~~~~~~~~~
-
-Queries can now refer to a another field on the query and can traverse
-relationships to refer to fields on related models. This is implemented in the
-new :class:`F` object; for full details, including examples, consult the
-:ref:`documentation for F expressions <query-expressions>`.
-
-Performance improvements
-------------------------
-
-.. currentmodule:: django.test
-
-Tests written using Django's :doc:`testing framework </topics/testing>` now run
-dramatically faster (as much as 10 times faster in many cases).
-
-This was accomplished through the introduction of transaction-based tests: when
-using :class:`django.test.TestCase`, your tests will now be run in a transaction
-which is rolled back when finished, instead of by flushing and re-populating the
-database. This results in an immense speedup for most types of unit tests. See
-the documentation for :class:`TestCase` and :class:`TransactionTestCase` for a
-full description, and some important notes on database support.
-
-Other improvements
-------------------
-
-Other new features and changes introduced since Django 1.0 include:
-
-* The :doc:`CSRF protection middleware </ref/contrib/csrf>` has been split into
- two classes -- ``CsrfViewMiddleware`` checks incoming requests, and
- ``CsrfResponseMiddleware`` processes outgoing responses. The combined
- ``CsrfMiddleware`` class (which does both) remains for
- backwards-compatibility, but using the split classes is now recommended in
- order to allow fine-grained control of when and where the CSRF processing
- takes place.
-
-* :func:`~django.core.urlresolvers.reverse` and code which uses it (e.g., the
- ``{% url %}`` template tag) now works with URLs in Django's administrative
- site, provided that the admin URLs are set up via ``include(admin.site.urls)``
- (sending admin requests to the ``admin.site.root`` view still works, but URLs
- in the admin will not be "reversible" when configured this way).
-
-* The ``include()`` function in Django URLconf modules can now accept sequences
- of URL patterns (generated by ``patterns()``) in addition to module names.
-
-* Instances of Django forms (see :doc:`the forms overview </topics/forms/index>`)
- now have two additional methods, ``hidden_fields()`` and ``visible_fields()``,
- which return the list of hidden -- i.e., ``<input type="hidden">`` -- and
- visible fields on the form, respectively.
-
-* The ``redirect_to`` generic view (see :doc:`the generic views documentation
- </ref/generic-views>`) now accepts an additional keyword argument
- ``permanent``. If ``permanent`` is ``True``, the view will emit an HTTP
- permanent redirect (status code 301). If ``False``, the view will emit an HTTP
- temporary redirect (status code 302).
-
-* A new database lookup type -- ``week_day`` -- has been added for ``DateField``
- and ``DateTimeField``. This type of lookup accepts a number between 1 (Sunday)
- and 7 (Saturday), and returns objects where the field value matches that day
- of the week. See :ref:`the full list of lookup types <field-lookups>` for
- details.
-
-* The ``{% for %}`` tag in Django's template language now accepts an optional
- ``{% empty %}`` clause, to be displayed when ``{% for %}`` is asked to loop
- over an empty sequence. See :doc:`the list of built-in template tags
- </ref/templates/builtins>` for examples of this.
-
-The Django 1.1 roadmap
-======================
-
-Before Django 1.1 goes final, several other preview/development releases will be
-made available. The current schedule consists of at least the following:
-
-* Week of *March 20, 2009:* Django 1.1 beta 1, at which point Django 1.1 will
- be in "feature freeze": no new features will be implemented for 1.1
- past that point, and all new feature work will be deferred to
- Django 1.2.
-
-* Week of *April 2, 2009:* Django 1.1 release candidate. At this point all
- strings marked for translation must freeze to allow translations to
- be submitted in advance of the final release.
-
-* Week of *April 13, 2009:* Django 1.1 final.
-
-If deemed necessary, additional alpha, beta or release candidate packages will
-be issued prior to the final 1.1 release.
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.1 release, we need your help. Although this
-alpha release is, again, *not* intended for production use, you can help the
-Django team by trying out the alpha codebase in a safe test environment and
-reporting any bugs or issues you encounter. The Django ticket tracker is the
-central place to search for open issues:
-
- * http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem you're
-running into.
-
-Additionally, discussion of Django development, including progress toward the
-1.1 release, takes place daily on the django-developers mailing list:
-
- * http://groups.google.com/group/django-developers
-
-... and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If you're
-interested in helping out with Django's development, feel free to join the
-discussions there.
-
-Django's online documentation also includes pointers on how to contribute to
-Django:
-
- * :doc:`How to contribute to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing documentation or simply
-triaging tickets and helping to test proposed bugfixes -- are always welcome and
-appreciated.
-
-Development sprints for Django 1.1 will also be taking place at PyCon US 2009,
-on the dedicated sprint days (March 30 through April 2), and anyone who wants to
-help out is welcome to join in, either in person at PyCon or virtually in the
-IRC channel or on the mailing list.
diff --git a/parts/django/docs/releases/1.1-beta-1.txt b/parts/django/docs/releases/1.1-beta-1.txt
deleted file mode 100644
index 535f818..0000000
--- a/parts/django/docs/releases/1.1-beta-1.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-===============================
-Django 1.1 beta 1 release notes
-===============================
-
-March 23, 2009
-
-Welcome to Django 1.1 beta 1!
-
-This is the second in a series of preview/development releases leading up to
-the eventual release of Django 1.1, currently scheduled to take place in April
-2009. This release is primarily targeted at developers who are interested in
-trying out new features and testing the Django codebase to help identify and
-resolve bugs prior to the final 1.1 release.
-
-As such, this release is *not* intended for production use, and any such use
-is discouraged.
-
-What's new in Django 1.1 beta 1
-===============================
-
-.. seealso::
-
- The :doc:`1.1 alpha release notes </releases/1.1-alpha-1>`, which has a
- list of everything new between Django 1.0 and Django 1.1 alpha.
-
-Model improvements
-------------------
-
-.. currentmodule:: django.db.models
-
-A number of features have been added to Django's model layer:
-
-"Unmanaged" models
-~~~~~~~~~~~~~~~~~~
-
-You can now control whether or not Django creates database tables for a model
-using the :attr:`~Options.managed` model option. This defaults to ``True``,
-meaning that Django will create the appropriate database tables in
-:djadmin:`syncdb` and remove them as part of :djadmin:`reset` command. That
-is, Django *manages* the database table's lifecycle.
-
-If you set this to ``False``, however, no database table creating or deletion
-will be automatically performed for this model. This is useful if the model
-represents an existing table or a database view that has been created by some
-other means.
-
-For more details, see the documentation for the :attr:`~Options.managed`
-option.
-
-Proxy models
-~~~~~~~~~~~~
-
-You can now create :ref:`proxy models <proxy-models>`: subclasses of existing
-models that only add Python behavior and aren't represented by a new table.
-That is, the new model is a *proxy* for some underlying model, which stores
-all the real data.
-
-All the details can be found in the :ref:`proxy models documentation
-<proxy-models>`. This feature is similar on the surface to unmanaged models,
-so the documentation has an explanation of :ref:`how proxy models differ from
-unmanaged models <proxy-vs-unmanaged-models>`.
-
-Deferred fields
-~~~~~~~~~~~~~~~
-
-In some complex situations, your models might contain fields which could
-contain a lot of data (for example, large text fields), or require expensive
-processing to convert them to Python objects. If you know you don't need those
-particular fields, you can now tell Django not to retrieve them from the
-database.
-
-You'll do this with the new queryset methods
-:meth:`~django.db.models.QuerySet.defer` and
-:meth:`~django.db.models.QuerySet.only`.
-
-New admin features
-------------------
-
-Since 1.1 alpha, a couple of new features have been added to Django's admin
-application:
-
-Editable fields on the change list
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You can now make fields editable on the admin list views via the new
-:ref:`list_editable <admin-list-editable>` admin option. These fields will show
-up as form widgets on the list pages, and can be edited and saved in bulk.
-
-Admin "actions"
-~~~~~~~~~~~~~~~
-
-You can now define :doc:`admin actions </ref/contrib/admin/actions>` that can perform
-some action to a group of models in bulk. Users will be able to select objects on
-the change list page and then apply these bulk actions to all selected objects.
-
-Django ships with one pre-defined admin action to delete a group of objects in
-one fell swoop.
-
-Testing improvements
---------------------
-
-.. currentmodule:: django.test.client
-
-A couple of small but very useful improvements have been made to the
-:doc:`testing framework </topics/testing>`:
-
- * The test :class:`Client` now can automatically follow redirects with the
- ``follow`` argument to :meth:`Client.get` and :meth:`Client.post`. This
- makes testing views that issue redirects simpler.
-
- * It's now easier to get at the template context in the response returned
- the test client: you'll simply access the context as
- ``request.context[key]``. The old way, which treats ``request.context``
- as a list of contexts, one for each rendered template, is still
- available if you need it.
-
-Conditional view processing
----------------------------
-
-Django now has much better support for :doc:`conditional view processing
-</topics/conditional-view-processing>` using the standard ``ETag`` and
-``Last-Modified`` HTTP headers. This means you can now easily short-circuit
-view processing by testing less-expensive conditions. For many views this can
-lead to a serious improvement in speed and reduction in bandwidth.
-
-Other improvements
-------------------
-
-Finally, a grab-bag of other neat features made their way into this beta
-release, including:
-
- * The :djadmin:`dumpdata` management command now accepts individual
- model names as arguments, allowing you to export the data just from
- particular models.
-
- * There's a new :tfilter:`safeseq` template filter which works just like
- :tfilter:`safe` for lists, marking each item in the list as safe.
-
- * :doc:`Cache backends </topics/cache>` now support ``incr()`` and
- ``decr()`` commands to increment and decrement the value of a cache key.
- On cache backends that support atomic increment/decrement -- most
- notably, the memcached backend -- these operations will be atomic, and
- quite fast.
-
- * Django now can :doc:`easily delegate authentication to the Web server
- </howto/auth-remote-user>` via a new authentication backend that supports
- the standard ``REMOTE_USER`` environment variable used for this purpose.
-
- * There's a new :func:`django.shortcuts.redirect` function that makes it
- easier to issue redirects given an object, a view name, or a URL.
-
- * The ``postgresql_psycopg2`` backend now supports :ref:`native PostgreSQL
- autocommit <postgresql-notes>`. This is an advanced, PostgreSQL-specific
- feature, that can make certain read-heavy applications a good deal
- faster.
-
-The Django 1.1 roadmap
-======================
-
-Before Django 1.1 goes final, at least one other preview/development release
-will be made available. The current schedule consists of at least the
-following:
-
-* Week of *April 2, 2009:* Django 1.1 release candidate. At this point all
- strings marked for translation must freeze to allow translations to
- be submitted in advance of the final release.
-
-* Week of *April 13, 2009:* Django 1.1 final.
-
-If deemed necessary, additional beta or release candidate packages will be
-issued prior to the final 1.1 release.
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.1 release, we need your help. Although this
-beta release is, again, *not* intended for production use, you can help the
-Django team by trying out the beta codebase in a safe test environment and
-reporting any bugs or issues you encounter. The Django ticket tracker is the
-central place to search for open issues:
-
- * http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem you're
-running into.
-
-Additionally, discussion of Django development, including progress toward the
-1.1 release, takes place daily on the django-developers mailing list:
-
- * http://groups.google.com/group/django-developers
-
-... and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If you're
-interested in helping out with Django's development, feel free to join the
-discussions there.
-
-Django's online documentation also includes pointers on how to contribute to
-Django:
-
- * :doc:`How to contribute to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing documentation or simply
-triaging tickets and helping to test proposed bugfixes -- are always welcome and
-appreciated.
-
-Development sprints for Django 1.1 will also be taking place at PyCon US 2009,
-on the dedicated sprint days (March 30 through April 2), and anyone who wants to
-help out is welcome to join in, either in person at PyCon or virtually in the
-IRC channel or on the mailing list.
diff --git a/parts/django/docs/releases/1.1-rc-1.txt b/parts/django/docs/releases/1.1-rc-1.txt
deleted file mode 100644
index f74444f..0000000
--- a/parts/django/docs/releases/1.1-rc-1.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-=============================
-Django 1.1 RC 1 release notes
-=============================
-
-
-July 21, 2009
-
-Welcome to the first Django 1.1 release candidate!
-
-This is the third -- and likely last -- in a series of
-preview/development releases leading up to the eventual release of
-Django 1.1, currently scheduled to take place approximately one week
-after this release candidate. This release is targeted primarily at
-developers who are interested in trying out new features and testing
-the Django codebase to help identify and resolve any critical bugs
-prior to the final 1.1 release.
-
-As such, this release is not yet intended for production use, and any
-such use is discouraged.
-
-
-What's new in Django 1.1 RC 1
-=============================
-
-The Django codebase has -- with one exception -- been in feature
-freeze since the first 1.1 beta release, and so this release candidate
-contains only one new feature (see below); work leading up to this
-release candidate has instead been focused on bugfixing, particularly
-on the new features introduced prior to the 1.1 beta.
-
-For an overview of those features, consult :doc:`the Django 1.1 beta
-release notes </releases/1.1-beta-1>`.
-
-
-URL namespaces
---------------
-
-The 1.1 beta release introduced the ability to use reverse URL
-resolution with Django's admin application, which exposed a set of
-:ref:`named URLs <naming-url-patterns>`. Unfortunately, achieving
-consistent and correct reverse resolution for admin URLs proved
-extremely difficult, and so one additional feature was added to Django
-to resolve this issue: URL namespaces.
-
-In short, this feature allows the same group of URLs, from the same
-application, to be included in a Django URLConf multiple times, with
-varying (and potentially nested) named prefixes which will be used
-when performing reverse resolution. For full details, see :ref:`the
-documentation on defining URL namespaces
-<topics-http-defining-url-namespaces>`.
-
-Due to the changes needed to support this feature, the URL pattern
-names used when reversing admin URLs have changed since the 1.1 beta
-release; if you were developing applications which took advantage of
-this new feature, you will need to update your code to reflect the new
-names (for most purposes, changing ``admin_`` to ``admin:`` in names
-to be reversed will suffice). For a full list of URL pattern names
-used by the admin and information on how namespaces are applied to
-them, consult the documentation on :ref:`reversing admin URLs
-<admin-reverse-urls>`.
-
-
-The Django 1.1 roadmap
-======================
-
-As of this release candidate, Django 1.1 is in both feature freeze and
-"string freeze" -- all strings marked for translation in the Django
-codebase will retain their current form in the final Django 1.1
-release. Only critical release-blocking bugs will receive attention
-between now and the final 1.1 release.
-
-If no such bugs are discovered, Django 1.1 will be released
-approximately one week after this release candidate, on or about July
-28, 2009.
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.1 release, we need your
-help. Although this release candidate is, again, *not* intended for
-production use, you can help the Django team by trying out this
-release candidate in a safe testing environment and reporting any bugs
-or issues you encounter. The Django ticket tracker is the central
-place to search for open issues:
-
- * http://code.djangoproject.com/timeline
-
-Please open a new ticket only if no existing ticket corresponds to a
-problem you're running into.
-
-Additionally, discussion of Django development, including progress
-toward the 1.1 release, takes place daily on the django-developers
-mailing list:
-
- * http://groups.google.com/group/django-developers
-
-... and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If you're
-interested in helping out with Django's development, feel free to join the
-discussions there.
-
-Django's online documentation also includes pointers on how to contribute to
-Django:
-
- * :doc:`How to contribute to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing documentation or simply
-triaging tickets and helping to test proposed bugfixes -- are always welcome and
-appreciated.
diff --git a/parts/django/docs/releases/1.1.2.txt b/parts/django/docs/releases/1.1.2.txt
deleted file mode 100644
index 90a6975..0000000
--- a/parts/django/docs/releases/1.1.2.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-==========================
-Django 1.1.2 release notes
-==========================
-
-Welcome to Django 1.1.2!
-
-This is the second "bugfix" release in the Django 1.1 series,
-improving the stability and performance of the Django 1.1 codebase.
-
-Django 1.1.2 maintains backwards compatibility with Django
-1.1.0, but contain a number of fixes and other
-improvements. Django 1.1.2 is a recommended upgrade for any
-development or deployment currently using or targeting Django 1.1.
-
-For full details on the new features, backwards incompatibilities, and
-deprecated features in the 1.1 branch, see the :doc:`/releases/1.1`.
-
-Backwards-incompatible changes in 1.1.2
-=======================================
-
-Test runner exit status code
-----------------------------
-
-The exit status code of the test runners (``tests/runtests.py`` and ``python
-manage.py test``) no longer represents the number of failed tests, since a
-failure of 256 or more tests resulted in a wrong exit status code. The exit
-status code for the test runner is now 0 for success (no failing tests) and 1
-for any number of test failures. If needed, the number of test failures can be
-found at the end of the test runner's output.
-
-Cookie encoding
----------------
-
-To fix bugs with cookies in Internet Explorer, Safari, and possibly other
-browsers, our encoding of cookie values was changed so that the characters
-comma and semi-colon are treated as non-safe characters, and are therefore
-encoded as ``\054`` and ``\073`` respectively. This could produce backwards
-incompatibilities, especially if you are storing comma or semi-colon in
-cookies and have javascript code that parses and manipulates cookie values
-client-side.
-
-One new feature
-===============
-
-Ordinarily, a point release would not include new features, but in the
-case of Django 1.1.2, we have made an exception to this rule. Django
-1.2 (the next major release of Django) will contain a feature that
-will improve protection against Cross-Site Request Forgery (CSRF)
-attacks. This feature requires the use of a new :ttag:`csrf_token`
-template tag in all forms that Django renders.
-
-To make it easier to support both 1.1.X and 1.2.X versions of Django with
-the same templates, we have decided to introduce the :ttag:`csrf_token` template
-tag to the 1.1.X branch. In the 1.1.X branch, :ttag:`csrf_token` does nothing -
-it has no effect on templates or form processing. However, it means that the
-same template will work with Django 1.2.
diff --git a/parts/django/docs/releases/1.1.txt b/parts/django/docs/releases/1.1.txt
deleted file mode 100644
index 3ca8344..0000000
--- a/parts/django/docs/releases/1.1.txt
+++ /dev/null
@@ -1,463 +0,0 @@
-========================
-Django 1.1 release notes
-========================
-
-
-July 29, 2009
-
-Welcome to Django 1.1!
-
-Django 1.1 includes a number of nifty `new features`_, lots of bug
-fixes, and an easy upgrade path from Django 1.0.
-
-.. _new features: `What's new in Django 1.1`_
-
-.. _backwards-incompatible-changes-1.1:
-
-Backwards-incompatible changes in 1.1
-=====================================
-
-Django has a policy of :doc:`API stability </misc/api-stability>`. This means
-that, in general, code you develop against Django 1.0 should continue to work
-against 1.1 unchanged. However, we do sometimes make backwards-incompatible
-changes if they're necessary to resolve bugs, and there are a handful of such
-(minor) changes between Django 1.0 and Django 1.1.
-
-Before upgrading to Django 1.1 you should double-check that the following
-changes don't impact you, and upgrade your code if they do.
-
-Changes to constraint names
----------------------------
-
-Django 1.1 modifies the method used to generate database constraint names so
-that names are consistent regardless of machine word size. This change is
-backwards incompatible for some users.
-
-If you are using a 32-bit platform, you're off the hook; you'll observe no
-differences as a result of this change.
-
-However, **users on 64-bit platforms may experience some problems** using the
-:djadmin:`reset` management command. Prior to this change, 64-bit platforms
-would generate a 64-bit, 16 character digest in the constraint name; for
-example::
-
- ALTER TABLE myapp_sometable ADD CONSTRAINT object_id_refs_id_5e8f10c132091d1e FOREIGN KEY ...
-
-Following this change, all platforms, regardless of word size, will generate a
-32-bit, 8 character digest in the constraint name; for example::
-
- ALTER TABLE myapp_sometable ADD CONSTRAINT object_id_refs_id_32091d1e FOREIGN KEY ...
-
-As a result of this change, you will not be able to use the :djadmin:`reset`
-management command on any table made by a 64-bit machine. This is because the
-the new generated name will not match the historically generated name; as a
-result, the SQL constructed by the reset command will be invalid.
-
-If you need to reset an application that was created with 64-bit constraints,
-you will need to manually drop the old constraint prior to invoking
-:djadmin:`reset`.
-
-Test cases are now run in a transaction
----------------------------------------
-
-Django 1.1 runs tests inside a transaction, allowing better test performance
-(see `test performance improvements`_ for details).
-
-This change is slightly backwards incompatible if existing tests need to test
-transactional behavior, if they rely on invalid assumptions about the test
-environment, or if they require a specific test case ordering.
-
-For these cases, :class:`~django.test.TransactionTestCase` can be used instead.
-This is a just a quick fix to get around test case errors revealed by the new
-rollback approach; in the long-term tests should be rewritten to correct the
-test case.
-
-.. _removed-setremoteaddrfromforwardedfor-middleware:
-
-Removed ``SetRemoteAddrFromForwardedFor`` middleware
-----------------------------------------------------
-
-For convenience, Django 1.0 included an optional middleware class --
-``django.middleware.http.SetRemoteAddrFromForwardedFor`` -- which updated the
-value of ``REMOTE_ADDR`` based on the HTTP ``X-Forwarded-For`` header commonly
-set by some proxy configurations.
-
-It has been demonstrated that this mechanism cannot be made reliable enough for
-general-purpose use, and that (despite documentation to the contrary) its
-inclusion in Django may lead application developers to assume that the value of
-``REMOTE_ADDR`` is "safe" or in some way reliable as a source of authentication.
-
-While not directly a security issue, we've decided to remove this middleware
-with the Django 1.1 release. It has been replaced with a class that does nothing
-other than raise a ``DeprecationWarning``.
-
-If you've been relying on this middleware, the easiest upgrade path is:
-
- * Examine `the code as it existed before it was removed`__.
-
- * Verify that it works correctly with your upstream proxy, modifying
- it to support your particular proxy (if necessary).
-
- * Introduce your modified version of ``SetRemoteAddrFromForwardedFor`` as a
- piece of middleware in your own project.
-
-__ http://code.djangoproject.com/browser/django/trunk/django/middleware/http.py?rev=11000#L33
-
-Names of uploaded files are available later
--------------------------------------------
-
-.. currentmodule:: django.db.models
-
-In Django 1.0, files uploaded and stored in a model's :class:`FileField` were
-saved to disk before the model was saved to the database. This meant that the
-actual file name assigned to the file was available before saving. For example,
-it was available in a model's pre-save signal handler.
-
-In Django 1.1 the file is saved as part of saving the model in the database, so
-the actual file name used on disk cannot be relied on until *after* the model
-has been saved.
-
-Changes to how model formsets are saved
----------------------------------------
-
-.. currentmodule:: django.forms.models
-
-In Django 1.1, :class:`BaseModelFormSet` now calls :meth:`ModelForm.save()`.
-
-This is backwards-incompatible if you were modifying ``self.initial`` in a model
-formset's ``__init__``, or if you relied on the internal ``_total_form_count``
-or ``_initial_form_count`` attributes of BaseFormSet. Those attributes are now
-public methods.
-
-Fixed the ``join`` filter's escaping behavior
----------------------------------------------
-
-The :ttag:`join` filter no longer escapes the literal value that is
-passed in for the connector.
-
-This is backwards incompatible for the special situation of the literal string
-containing one of the five special HTML characters. Thus, if you were writing
-``{{ foo|join:"&" }}``, you now have to write ``{{ foo|join:"&amp;" }}``.
-
-The previous behavior was a bug and contrary to what was documented
-and expected.
-
-Permanent redirects and the ``redirect_to()`` generic view
-----------------------------------------------------------
-
-Django 1.1 adds a ``permanent`` argument to the
-:func:`django.views.generic.simple.redirect_to()` view. This is technically
-backwards-incompatible if you were using the ``redirect_to`` view with a
-format-string key called 'permanent', which is highly unlikely.
-
-.. _deprecated-features-1.1:
-
-Features deprecated in 1.1
-==========================
-
-One feature has been marked as deprecated in Django 1.1:
-
- * You should no longer use ``AdminSite.root()`` to register that admin
- views. That is, if your URLconf contains the line::
-
- (r'^admin/(.*)', admin.site.root),
-
- You should change it to read::
-
- (r'^admin/', include(admin.site.urls)),
-
-You should begin to remove use of this feature from your code immediately.
-
-``AdminSite.root`` will raise a ``PendingDeprecationWarning`` if used in
-Django 1.1. This warning is hidden by default. In Django 1.2, this warning will
-be upgraded to a ``DeprecationWarning``, which will be displayed loudly. Django
-1.3 will remove ``AdminSite.root()`` entirely.
-
-For more details on our deprecation policies and strategy, see
-:doc:`/internals/release-process`.
-
-What's new in Django 1.1
-========================
-
-Quite a bit: since Django 1.0, we've made 1,290 code commits, fixed 1,206 bugs,
-and added roughly 10,000 lines of documentation.
-
-The major new features in Django 1.1 are:
-
-ORM improvements
-----------------
-
-.. currentmodule:: django.db.models
-
-Two major enhancements have been added to Django's object-relational mapper
-(ORM): aggregate support, and query expressions.
-
-Aggregate support
-~~~~~~~~~~~~~~~~~
-
-It's now possible to run SQL aggregate queries (i.e. ``COUNT()``, ``MAX()``,
-``MIN()``, etc.) from within Django's ORM. You can choose to either return the
-results of the aggregate directly, or else annotate the objects in a
-:class:`QuerySet` with the results of the aggregate query.
-
-This feature is available as new :meth:`QuerySet.aggregate()`` and
-:meth:`QuerySet.annotate()`` methods, and is covered in detail in :doc:`the ORM
-aggregation documentation </topics/db/aggregation>`.
-
-Query expressions
-~~~~~~~~~~~~~~~~~
-
-Queries can now refer to a another field on the query and can traverse
-relationships to refer to fields on related models. This is implemented in the
-new :class:`F` object; for full details, including examples, consult the
-:ref:`documentation for F expressions <query-expressions>`.
-
-Model improvements
-------------------
-
-A number of features have been added to Django's model layer:
-
-"Unmanaged" models
-~~~~~~~~~~~~~~~~~~
-
-You can now control whether or not Django manages the life-cycle of the database
-tables for a model using the :attr:`~Options.managed` model option. This
-defaults to ``True``, meaning that Django will create the appropriate database
-tables in :djadmin:`syncdb` and remove them as part of the :djadmin:`reset`
-command. That is, Django *manages* the database table's lifecycle.
-
-If you set this to ``False``, however, no database table creating or deletion
-will be automatically performed for this model. This is useful if the model
-represents an existing table or a database view that has been created by some
-other means.
-
-For more details, see the documentation for the :attr:`~Options.managed`
-option.
-
-Proxy models
-~~~~~~~~~~~~
-
-You can now create :ref:`proxy models <proxy-models>`: subclasses of existing
-models that only add Python-level (rather than database-level) behavior and
-aren't represented by a new table. That is, the new model is a *proxy* for some
-underlying model, which stores all the real data.
-
-All the details can be found in the :ref:`proxy models documentation
-<proxy-models>`. This feature is similar on the surface to unmanaged models,
-so the documentation has an explanation of :ref:`how proxy models differ from
-unmanaged models <proxy-vs-unmanaged-models>`.
-
-Deferred fields
-~~~~~~~~~~~~~~~
-
-In some complex situations, your models might contain fields which could
-contain a lot of data (for example, large text fields), or require expensive
-processing to convert them to Python objects. If you know you don't need those
-particular fields, you can now tell Django not to retrieve them from the
-database.
-
-You'll do this with the new queryset methods
-:meth:`~django.db.models.QuerySet.defer` and
-:meth:`~django.db.models.QuerySet.only`.
-
-Testing improvements
---------------------
-
-A few notable improvements have been made to the :doc:`testing framework
-</topics/testing>`.
-
-Test performance improvements
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. currentmodule:: django.test
-
-Tests written using Django's :doc:`testing framework </topics/testing>` now run
-dramatically faster (as much as 10 times faster in many cases).
-
-This was accomplished through the introduction of transaction-based tests: when
-using :class:`django.test.TestCase`, your tests will now be run in a transaction
-which is rolled back when finished, instead of by flushing and re-populating the
-database. This results in an immense speedup for most types of unit tests. See
-the documentation for :class:`TestCase` and :class:`TransactionTestCase` for a
-full description, and some important notes on database support.
-
-Test client improvements
-------------------------
-
-.. currentmodule:: django.test.client
-
-A couple of small -- but highly useful -- improvements have been made to the
-test client:
-
- * The test :class:`Client` now can automatically follow redirects with the
- ``follow`` argument to :meth:`Client.get` and :meth:`Client.post`. This
- makes testing views that issue redirects simpler.
-
- * It's now easier to get at the template context in the response returned
- the test client: you'll simply access the context as
- ``request.context[key]``. The old way, which treats ``request.context`` as
- a list of contexts, one for each rendered template in the inheritance
- chain, is still available if you need it.
-
-New admin features
-------------------
-
-Django 1.1 adds a couple of nifty new features to Django's admin interface:
-
-Editable fields on the change list
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You can now make fields editable on the admin list views via the new
-:ref:`list_editable <admin-list-editable>` admin option. These fields will show
-up as form widgets on the list pages, and can be edited and saved in bulk.
-
-Admin "actions"
-~~~~~~~~~~~~~~~
-
-You can now define :doc:`admin actions </ref/contrib/admin/actions>` that can
-perform some action to a group of models in bulk. Users will be able to select
-objects on the change list page and then apply these bulk actions to all
-selected objects.
-
-Django ships with one pre-defined admin action to delete a group of objects in
-one fell swoop.
-
-Conditional view processing
----------------------------
-
-Django now has much better support for :doc:`conditional view processing
-</topics/conditional-view-processing>` using the standard ``ETag`` and
-``Last-Modified`` HTTP headers. This means you can now easily short-circuit
-view processing by testing less-expensive conditions. For many views this can
-lead to a serious improvement in speed and reduction in bandwidth.
-
-URL namespaces
---------------
-
-Django 1.1 improves :ref:`named URL patterns <naming-url-patterns>` with the
-introduction of URL "namespaces."
-
-In short, this feature allows the same group of URLs, from the same application,
-to be included in a Django URLConf multiple times, with varying (and potentially
-nested) named prefixes which will be used when performing reverse resolution. In
-other words, reusable applications like Django's admin interface may be
-registered multiple times without URL conflicts.
-
-For full details, see :ref:`the documentation on defining URL namespaces
-<topics-http-defining-url-namespaces>`.
-
-GeoDjango
----------
-
-In Django 1.1, GeoDjango_ (i.e. ``django.contrib.gis``) has several new
-features:
-
- * Support for SpatiaLite_ -- a spatial database for SQLite -- as a spatial
- backend.
-
- * Geographic aggregates (``Collect``, ``Extent``, ``MakeLine``, ``Union``)
- and ``F`` expressions.
-
- * New ``GeoQuerySet`` methods: ``collect``, ``geojson``, and
- ``snap_to_grid``.
-
- * A new list interface methods for ``GEOSGeometry`` objects.
-
-For more details, see the `GeoDjango documentation`_.
-
-.. _geodjango: http://geodjango.org/
-.. _spatialite: http://www.gaia-gis.it/spatialite/
-.. _geodjango documentation: http://geodjango.org/docs/
-
-Other improvements
-------------------
-
-Other new features and changes introduced since Django 1.0 include:
-
-* The :doc:`CSRF protection middleware </ref/contrib/csrf>` has been split into
- two classes -- ``CsrfViewMiddleware`` checks incoming requests, and
- ``CsrfResponseMiddleware`` processes outgoing responses. The combined
- ``CsrfMiddleware`` class (which does both) remains for
- backwards-compatibility, but using the split classes is now recommended in
- order to allow fine-grained control of when and where the CSRF processing
- takes place.
-
-* :func:`~django.core.urlresolvers.reverse` and code which uses it (e.g., the
- ``{% url %}`` template tag) now works with URLs in Django's administrative
- site, provided that the admin URLs are set up via ``include(admin.site.urls)``
- (sending admin requests to the ``admin.site.root`` view still works, but URLs
- in the admin will not be "reversible" when configured this way).
-
-* The ``include()`` function in Django URLconf modules can now accept sequences
- of URL patterns (generated by ``patterns()``) in addition to module names.
-
-* Instances of Django forms (see :doc:`the forms overview </topics/forms/index>`)
- now have two additional methods, ``hidden_fields()`` and ``visible_fields()``,
- which return the list of hidden -- i.e., ``<input type="hidden">`` -- and
- visible fields on the form, respectively.
-
-* The ``redirect_to`` generic view (see :doc:`the generic views documentation
- </ref/generic-views>`) now accepts an additional keyword argument
- ``permanent``. If ``permanent`` is ``True``, the view will emit an HTTP
- permanent redirect (status code 301). If ``False``, the view will emit an HTTP
- temporary redirect (status code 302).
-
-* A new database lookup type -- ``week_day`` -- has been added for ``DateField``
- and ``DateTimeField``. This type of lookup accepts a number between 1 (Sunday)
- and 7 (Saturday), and returns objects where the field value matches that day
- of the week. See :ref:`the full list of lookup types <field-lookups>` for
- details.
-
-* The ``{% for %}`` tag in Django's template language now accepts an optional
- ``{% empty %}`` clause, to be displayed when ``{% for %}`` is asked to loop
- over an empty sequence. See :doc:`the list of built-in template tags
- </ref/templates/builtins>` for examples of this.
-
-* The :djadmin:`dumpdata` management command now accepts individual
- model names as arguments, allowing you to export the data just from
- particular models.
-
-* There's a new :tfilter:`safeseq` template filter which works just like
- :tfilter:`safe` for lists, marking each item in the list as safe.
-
-* :doc:`Cache backends </topics/cache>` now support ``incr()`` and
- ``decr()`` commands to increment and decrement the value of a cache key.
- On cache backends that support atomic increment/decrement -- most
- notably, the memcached backend -- these operations will be atomic, and
- quite fast.
-
-* Django now can :doc:`easily delegate authentication to the Web server
- </howto/auth-remote-user>` via a new authentication backend that supports
- the standard ``REMOTE_USER`` environment variable used for this purpose.
-
-* There's a new :func:`django.shortcuts.redirect` function that makes it
- easier to issue redirects given an object, a view name, or a URL.
-
-* The ``postgresql_psycopg2`` backend now supports :ref:`native PostgreSQL
- autocommit <postgresql-notes>`. This is an advanced, PostgreSQL-specific
- feature, that can make certain read-heavy applications a good deal
- faster.
-
-What's next?
-============
-
-We'll take a short break, and then work on Django 1.2 will begin -- no rest for
-the weary! If you'd like to help, discussion of Django development, including
-progress toward the 1.2 release, takes place daily on the django-developers
-mailing list:
-
- * http://groups.google.com/group/django-developers
-
-... and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. Feel free to
-join the discussions!
-
-Django's online documentation also includes pointers on how to contribute to
-Django:
-
- * :doc:`How to contribute to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing documentation or simply
-triaging tickets and helping to test proposed bugfixes -- are always welcome and
-appreciated.
-
-And that's the way it is.
diff --git a/parts/django/docs/releases/1.2-alpha-1.txt b/parts/django/docs/releases/1.2-alpha-1.txt
deleted file mode 100644
index 4144a9a..0000000
--- a/parts/django/docs/releases/1.2-alpha-1.txt
+++ /dev/null
@@ -1,578 +0,0 @@
-================================
-Django 1.2 alpha 1 release notes
-================================
-
-January 5, 2010
-
-Welcome to Django 1.2 alpha 1!
-
-This is the first in a series of preview/development releases leading up to the
-eventual release of Django 1.2, currently scheduled to take place in March 2010.
-This release is primarily targeted at developers who are interested in trying
-out new features and testing the Django codebase to help identify and resolve
-bugs prior to the final 1.2 release.
-
-As such, this release is *not* intended for production use, and any such use is
-discouraged.
-
-
-Backwards-incompatible changes in 1.2
-=====================================
-
-CSRF Protection
----------------
-
-There have been large changes to the way that CSRF protection works, detailed in
-:doc:`the CSRF documentaton </ref/contrib/csrf>`. The following are the major
-changes that developers must be aware of:
-
- * ``CsrfResponseMiddleware`` and ``CsrfMiddleware`` have been deprecated, and
- **will be removed completely in Django 1.4**, in favor of a template tag that
- should be inserted into forms.
-
- * All contrib apps use a ``csrf_protect`` decorator to protect the view. This
- requires the use of the ``csrf_token`` template tag in the template, so if you
- have used custom templates for contrib views, you MUST READ THE :ref:`UPGRADE
- INSTRUCTIONS <ref-csrf-upgrading-notes>` to fix those templates.
-
- * ``CsrfViewMiddleware`` is included in :setting:`MIDDLEWARE_CLASSES` by
- default. This turns on CSRF protection by default, so that views that accept
- POST requests need to be written to work with the middleware. Instructions
- on how to do this are found in the CSRF docs.
-
- * CSRF-related code has moved from ``contrib`` to ``core`` (with
- backwards compatible imports in the old locations, which are
- deprecated).
-
-:ttag:`if` tag changes
-----------------------
-
-Due to new features in the :ttag:`if` template tag, it no longer accepts 'and',
-'or' and 'not' as valid **variable** names. Previously that worked in some
-cases even though these strings were normally treated as keywords. Now, the
-keyword status is always enforced, and template code like ``{% if not %}`` or
-``{% if and %}`` will throw a TemplateSyntaxError.
-
-``LazyObject``
---------------
-
-``LazyObject`` is an undocumented utility class used for lazily wrapping other
-objects of unknown type. In Django 1.1 and earlier, it handled introspection in
-a non-standard way, depending on wrapped objects implementing a public method
-``get_all_members()``. Since this could easily lead to name clashes, it has been
-changed to use the standard method, involving ``__members__`` and ``__dir__()``.
-If you used ``LazyObject`` in your own code, and implemented the
-``get_all_members()`` method for wrapped objects, you need to make the following
-changes:
-
- * If your class does not have special requirements for introspection (i.e. you
- have not implemented ``__getattr__()`` or other methods that allow for
- attributes not discoverable by normal mechanisms), you can simply remove the
- ``get_all_members()`` method. The default implementation on ``LazyObject``
- will do the right thing.
-
- * If you have more complex requirements for introspection, first rename the
- ``get_all_members()`` method to ``__dir__()``. This is the standard method,
- from Python 2.6 onwards, for supporting introspection. If you are require
- support for Python < 2.6, add the following code to the class::
-
- __members__ = property(lambda self: self.__dir__())
-
-``__dict__`` on Model instances
--------------------------------
-
-Historically, the ``__dict__`` attribute of a model instance has only contained
-attributes corresponding to the fields on a model.
-
-In order to support multiple database configurations, Django 1.2 has
-added a ``_state`` attribute to object instances. This attribute will
-appear in ``__dict__`` for a model instance. If your code relies on
-iterating over __dict__ to obtain a list of fields, you must now
-filter the ``_state`` attribute of out ``__dict__``.
-
-``get_db_prep_*()`` methods on Field
-------------------------------------
-
-Prior to v1.2, a custom field had the option of defining several
-functions to support conversion of Python values into
-database-compatible values. A custom field might look something like::
-
- class CustomModelField(models.Field):
- # ...
-
- def get_db_prep_save(self, value):
- # ...
-
- def get_db_prep_value(self, value):
- # ...
-
- def get_db_prep_lookup(self, lookup_type, value):
- # ...
-
-In 1.2, these three methods have undergone a change in prototype, and
-two extra methods have been introduced::
-
- class CustomModelField(models.Field):
- # ...
-
- def get_prep_value(self, value):
- # ...
-
- def get_prep_lookup(self, lookup_type, value):
- # ...
-
- def get_db_prep_save(self, value, connection):
- # ...
-
- def get_db_prep_value(self, value, connection, prepared=False):
- # ...
-
- def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
- # ...
-
-These changes are required to support multiple databases:
-``get_db_prep_*`` can no longer make any assumptions regarding the
-database for which it is preparing. The ``connection`` argument now
-provides the preparation methods with the specific connection for
-which the value is being prepared.
-
-The two new methods exist to differentiate general data preparation
-requirements, and requirements that are database-specific. The
-``prepared`` argument is used to indicate to the database preparation
-methods whether generic value preparation has been performed. If
-an unprepared (i.e., ``prepared=False``) value is provided to the
-``get_db_prep_*()`` calls, they should invoke the corresponding
-``get_prep_*()`` calls to perform generic data preparation.
-
-Conversion functions has been provided which will transparently
-convert functions adhering to the old prototype into functions
-compatible with the new prototype. However, this conversion function
-will be removed in Django 1.4, so you should upgrade your Field
-definitions to use the new prototype.
-
-If your ``get_db_prep_*()`` methods made no use of the database
-connection, you should be able to upgrade by renaming
-``get_db_prep_value()`` to ``get_prep_value()`` and
-``get_db_prep_lookup()`` to ``get_prep_lookup()`. If you require
-database specific conversions, then you will need to provide an
-implementation ``get_db_prep_*`` that uses the ``connection``
-argument to resolve database-specific values.
-
-Stateful template tags
-----------------------
-
-Template tags that store rendering state on the node itself may experience
-problems if they are used with the new :ref:`cached
-template loader<template-loaders>`.
-
-All of the built-in Django template tags are safe to use with the cached
-loader, but if you're using custom template tags that come from third
-party packages, or that you wrote yourself, you should ensure that the
-``Node`` implementation for each tag is thread-safe. For more
-information, see
-:ref:`template tag thread safety considerations<template_tag_thread_safety>`.
-
-Test runner exit status code
-----------------------------
-
-The exit status code of the test runners (``tests/runtests.py`` and ``python
-manage.py test``) no longer represents the number of failed tests, since a
-failure of 256 or more tests resulted in a wrong exit status code. The exit
-status code for the test runner is now 0 for success (no failing tests) and 1
-for any number of test failures. If needed, the number of test failures can be
-found at the end of the test runner's output.
-
-Features deprecated in 1.2
-==========================
-
-CSRF response rewriting middleware
-----------------------------------
-
-``CsrfResponseMiddleware``, the middleware that automatically inserted CSRF
-tokens into POST forms in outgoing pages, has been deprecated in favor of a
-template tag method (see above), and will be removed completely in Django
-1.4. ``CsrfMiddleware``, which includes the functionality of
-``CsrfResponseMiddleware`` and ``CsrfViewMiddleware`` has likewise been
-deprecated.
-
-Also, the CSRF module has moved from contrib to core, and the old imports are
-deprecated, as described in the :ref:`upgrading notes <ref-csrf-upgrading-notes>`.
-
-``SMTPConnection``
-------------------
-
-The ``SMTPConnection`` class has been deprecated in favor of a generic
-E-mail backend API. Old code that explicitly instantiated an instance
-of an SMTPConnection::
-
- from django.core.mail import SMTPConnection
- connection = SMTPConnection()
- messages = get_notification_email()
- connection.send_messages(messages)
-
-should now call :meth:`~django.core.mail.get_connection()` to
-instantiate a generic e-mail connection::
-
- from django.core.mail import get_connection
- connection = get_connection()
- messages = get_notification_email()
- connection.send_messages(messages)
-
-Depending on the value of the :setting:`EMAIL_BACKEND` setting, this
-may not return an SMTP connection. If you explicitly require an SMTP
-connection with which to send e-mail, you can explicitly request an
-SMTP connection::
-
- from django.core.mail import get_connection
- connection = get_connection('django.core.mail.backends.smtp.EmailBackend')
- messages = get_notification_email()
- connection.send_messages(messages)
-
-If your call to construct an instance of ``SMTPConnection`` required
-additional arguments, those arguments can be passed to the
-:meth:`~django.core.mail.get_connection()` call::
-
- connection = get_connection('django.core.mail.backends.smtp.EmailBackend', hostname='localhost', port=1234)
-
-Specifying databases
---------------------
-
-Prior to Django 1.1, Django used a number of settings to control access to a
-single database. Django 1.2 introduces support for multiple databases, and as
-a result, the way you define database settings has changed.
-
-**Any existing Django settings file will continue to work as expected
-until Django 1.4.** Old-style database settings will be automatically
-translated to the new-style format.
-
-In the old-style (pre 1.2) format, there were a number of
-``DATABASE_`` settings at the top level of your settings file. For
-example::
-
- DATABASE_NAME = 'test_db'
- DATABASE_ENGINE = 'postgresql_psycopg2'
- DATABASE_USER = 'myusername'
- DATABASE_PASSWORD = 's3krit'
-
-These settings are now contained inside a dictionary named
-:setting:`DATABASES`. Each item in the dictionary corresponds to a
-single database connection, with the name ``'default'`` describing the
-default database connection. The setting names have also been
-shortened to reflect the fact that they are stored in a dictionary.
-The sample settings given previously would now be stored using::
-
- DATABASES = {
- 'default': {
- 'NAME': 'test_db',
- 'ENGINE': 'django.db.backends.postgresql_psycopg2',
- 'USER': 'myusername',
- 'PASSWORD': 's3krit',
- }
- }
-
-This affects the following settings:
-
- ========================================= ==========================
- Old setting New Setting
- ========================================= ==========================
- :setting:`DATABASE_ENGINE` :setting:`ENGINE`
- :setting:`DATABASE_HOST` :setting:`HOST`
- :setting:`DATABASE_NAME` :setting:`NAME`
- :setting:`DATABASE_OPTIONS` :setting:`OPTIONS`
- :setting:`DATABASE_PASSWORD` :setting:`PASSWORD`
- :setting:`DATABASE_PORT` :setting:`PORT`
- :setting:`DATABASE_USER` :setting:`USER`
- :setting:`TEST_DATABASE_CHARSET` :setting:`TEST_CHARSET`
- :setting:`TEST_DATABASE_COLLATION` :setting:`TEST_COLLATION`
- :setting:`TEST_DATABASE_NAME` :setting:`TEST_NAME`
- ========================================= ==========================
-
-These changes are also required if you have manually created a database
-connection using ``DatabaseWrapper()`` from your database backend of choice.
-
-In addition to the change in structure, Django 1.2 removes the special
-handling for the built-in database backends. All database backends
-must now be specified by a fully qualified module name (i.e.,
-``django.db.backends.postgresql_psycopg2``, rather than just
-``postgresql_psycopg2``).
-
-User Messages API
------------------
-
-The API for storing messages in the user ``Message`` model (via
-``user.message_set.create``) is now deprecated and will be removed in Django
-1.4 according to the standard :doc:`release process </internals/release-process>`.
-
-To upgrade your code, you need to replace any instances of::
-
- user.message_set.create('a message')
-
-with the following::
-
- from django.contrib import messages
- messages.add_message(request, messages.INFO, 'a message')
-
-Additionally, if you make use of the method, you need to replace the
-following::
-
- for message in user.get_and_delete_messages():
- ...
-
-with::
-
- from django.contrib import messages
- for message in messages.get_messages(request):
- ...
-
-For more information, see the full
-:doc:`messages documentation </ref/contrib/messages>`. You should begin to
-update your code to use the new API immediately.
-
-Date format helper functions
-----------------------------
-
-``django.utils.translation.get_date_formats()`` and
-``django.utils.translation.get_partial_date_formats()`` have been deprecated
-in favor of the appropriate calls to ``django.utils.formats.get_format()``
-which is locale aware when :setting:`USE_L10N` is set to ``True``, and falls
-back to default settings if set to ``False``.
-
-To get the different date formats, instead of writing::
-
- from django.utils.translation import get_date_formats
- date_format, datetime_format, time_format = get_date_formats()
-
-use::
-
- from django.utils import formats
-
- date_format = formats.get_format('DATE_FORMAT')
- datetime_format = formats.get_format('DATETIME_FORMAT')
- time_format = formats.get_format('TIME_FORMAT')
-
-or, when directly formatting a date value::
-
- from django.utils import formats
- value_formatted = formats.date_format(value, 'DATETIME_FORMAT')
-
-The same applies to the globals found in ``django.forms.fields``:
-
- * ``DEFAULT_DATE_INPUT_FORMATS``
- * ``DEFAULT_TIME_INPUT_FORMATS``
- * ``DEFAULT_DATETIME_INPUT_FORMATS``
-
-Use ``django.utils.formats.get_format()`` to get the appropriate formats.
-
-
-What's new in Django 1.2 alpha 1
-================================
-
-The following new features are present as of this alpha release; this
-release also marks the end of major feature development for the 1.2
-release cycle. Some minor features will continue development until the
-1.2 beta release, however.
-
-
-CSRF support
-------------
-
-Django now has much improved protection against :doc:`Cross-Site
-Request Forgery (CSRF) attacks</ref/contrib/csrf>`. This type of attack
-occurs when a malicious Web site contains a link, a form button or
-some javascript that is intended to perform some action on your Web
-site, using the credentials of a logged-in user who visits the
-malicious site in their browser. A related type of attack, 'login
-CSRF', where an attacking site tricks a user's browser into logging
-into a site with someone else's credentials, is also covered.
-
-E-mail Backends
----------------
-
-You can now :ref:`configure the way that Django sends e-mail
-<topic-email-backends>`. Instead of using SMTP to send all e-mail, you
-can now choose a configurable e-mail backend to send messages. If your
-hosting provider uses a sandbox or some other non-SMTP technique for
-sending mail, you can now construct an e-mail backend that will allow
-Django's standard :doc:`mail sending methods</topics/email>` to use
-those facilities.
-
-This also makes it easier to debug mail sending - Django ships with
-backend implementations that allow you to send e-mail to a
-:ref:`file<topic-email-file-backend>`, to the
-:ref:`console<topic-email-console-backend>`, or to
-:ref:`memory<topic-email-memory-backend>` - you can even configure all
-e-mail to be :ref:`thrown away<topic-email-dummy-backend>`.
-
-Messages Framework
-------------------
-
-Django now includes a robust and configurable :doc:`messages framework
-</ref/contrib/messages>` with built-in support for cookie- and session-based
-messaging, for both anonymous and authenticated clients. The messages framework
-replaces the deprecated user message API and allows you to temporarily store
-messages in one request and retrieve them for display in a subsequent request
-(usually the next one).
-
-Support for multiple databases
-------------------------------
-
-Django 1.2 adds the ability to use :doc:`more than one database
-</topics/db/multi-db>` in your Django project. Queries can be
-issued at a specific database with the `using()` method on
-querysets; individual objects can be saved to a specific database
-by providing a ``using`` argument when you save the instance.
-
-'Smart' if tag
---------------
-
-The :ttag:`if` tag has been upgraded to be much more powerful. First, support
-for comparison operators has been added. No longer will you have to type:
-
-.. code-block:: html+django
-
- {% ifnotequal a b %}
- ...
- {% endifnotequal %}
-
-...as you can now do:
-
-.. code-block:: html+django
-
- {% if a != b %}
- ...
- {% endif %}
-
-The operators supported are ``==``, ``!=``, ``<``, ``>``, ``<=``, ``>=`` and
-``in``, all of which work like the Python operators, in addition to ``and``,
-``or`` and ``not`` which were already supported.
-
-Also, filters may now be used in the ``if`` expression. For example:
-
-.. code-block:: html+django
-
- <div
- {% if user.email|lower == message.recipient|lower %}
- class="highlight"
- {% endif %}
- >{{ message }}</div>
-
-Template caching
-----------------
-
-In previous versions of Django, every time you rendered a template it
-would be reloaded from disk. In Django 1.2, you can use a :ref:`cached
-template loader <template-loaders>` to load templates once, then use
-the cached result for every subsequent render. This can lead to a
-significant performance improvement if your templates are broken into
-lots of smaller subtemplates (using the ``{% extends %}`` or ``{%
-include %}`` tags).
-
-As a side effect, it is now much easier to support non-Django template
-languages. For more details, see the :ref:`notes on supporting
-non-Django template languages<topic-template-alternate-language>`.
-
-Natural keys in fixtures
-------------------------
-
-Fixtures can refer to remote objects using
-:ref:`topics-serialization-natural-keys`. This lookup scheme is an
-alternative to the normal primary-key based object references in a
-fixture, improving readability, and resolving problems referring to
-objects whose primary key value may not be predictable or known.
-
-``BigIntegerField``
--------------------
-
-Models can now use a 64 bit :class:`~django.db.models.BigIntegerField` type.
-
-Fast Failure for Tests
-----------------------
-
-The :djadmin:`test` subcommand of ``django-admin.py``, and the ``runtests.py``
-script used to run Django's own test suite, support a new ``--failfast`` option.
-When specified, this option causes the test runner to exit after encountering
-a failure instead of continuing with the test run. In addition, the handling
-of ``Ctrl-C`` during a test run has been improved to trigger a graceful exit
-from the test run that reports details of the tests run before the interruption.
-
-Improved localization
----------------------
-
-Django's :doc:`internationalization framework </topics/i18n/index>` has been
-expanded by locale aware formatting and form processing. That means, if
-enabled, dates and numbers on templates will be displayed using the format
-specified for the current locale. Django will also use localized formats
-when parsing data in forms.
-See :ref:`Format localization <format-localization>` for more details.
-
-Added ``readonly_fields`` to ``ModelAdmin``
--------------------------------------------
-
-:attr:`django.contrib.admin.ModelAdmin.readonly_fields` has been added to
-enable non-editable fields in add/change pages for models and inlines. Field
-and calculated values can be displayed along side editable fields.
-
-Customizable syntax highlighting
---------------------------------
-
-You can now use the ``DJANGO_COLORS`` environment variable to modify
-or disable the colors used by ``django-admin.py`` to provide
-:ref:`syntax highlighting <syntax-coloring>`.
-
-
-The Django 1.2 roadmap
-======================
-
-Before the final Django 1.2 release, several other preview/development
-releases will be made available. The current schedule consists of at
-least the following:
-
-* Week of **January 26, 2010**: First Django 1.2 beta release. Final
- feature freeze for Django 1.2.
-
-* Week of **March 2, 2010**: First Django 1.2 release
- candidate. String freeze for translations.
-
-* Week of **March 9, 2010**: Django 1.2 final release.
-
-If necessary, additional alpha, beta or release-candidate packages
-will be issued prior to the final 1.2 release. Django 1.2 will be
-released approximately one week after the final release candidate.
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.2 release, we need your help. Although this
-alpha release is, again, *not* intended for production use, you can help the
-Django team by trying out the alpha codebase in a safe test environment and
-reporting any bugs or issues you encounter. The Django ticket tracker is the
-central place to search for open issues:
-
- * http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem you're
-running into.
-
-Additionally, discussion of Django development, including progress toward the
-1.2 release, takes place daily on the django-developers mailing list:
-
- * http://groups.google.com/group/django-developers
-
-... and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If you're
-interested in helping out with Django's development, feel free to join the
-discussions there.
-
-Django's online documentation also includes pointers on how to contribute to
-Django:
-
- * :doc:`How to contribute to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing documentation or simply
-triaging tickets and helping to test proposed bugfixes -- are always welcome and
-appreciated.
-
-Development sprints for Django 1.2 will also be taking place at PyCon
-US 2010, on the dedicated sprint days (February 22 through 25), and
-anyone who wants to help out is welcome to join in, either in person
-at PyCon or virtually in the IRC channel or on the mailing list.
diff --git a/parts/django/docs/releases/1.2-beta-1.txt b/parts/django/docs/releases/1.2-beta-1.txt
deleted file mode 100644
index 2a12ef3..0000000
--- a/parts/django/docs/releases/1.2-beta-1.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-===============================
-Django 1.2 beta 1 release notes
-===============================
-
-February 5, 2010
-
-Welcome to Django 1.2 beta 1!
-
-This is the second in a series of preview/development releases leading
-up to the eventual release of Django 1.2, currently scheduled to take
-place in March 2010. This release is primarily targeted at developers
-who are interested in trying out new features and testing the Django
-codebase to help identify and resolve bugs prior to the final 1.2
-release.
-
-As such, this release is *not* intended for production use, and any
-such use is discouraged.
-
-This document covers changes since the Django 1.2 alpha release; the
-:doc:`1.2 alpha release notes </releases/1.2-alpha-1>` cover new and
-updated features in Django between 1.1 and 1.2 alpha.
-
-
-Deprecations and other changes in 1.2 beta
-==========================================
-
-This beta release deprecates two portions of public API, and
-introduces a potentially backwards-incompatible change to
-another. Under :doc:`our API stability policy </misc/api-stability>`,
-deprecation proceeds over multiple release cycles: initially, the
-deprecated API will raise ``PendingDeprecationWarning``, followed by
-raising ``DeprecationWarning`` in the next release, and finally
-removal of the deprecated API in the release after that. APIs
-beginning the deprecation process in Django 1.2 will be removed in the
-Django 1.4 release.
-
-
-Unit test runners
------------------
-
-Django 1.2 changes the test runner tools to use a class-based
-approach. Old style function-based test runners will still work, but
-should be updated to use the new :ref:`class-based runners
-<topics-testing-test_runner>`.
-
-
-Syndication feeds
------------------
-
-The :class:`django.contrib.syndication.feeds.Feed` class is being
-replaced by the :class:`django.contrib.syndication.views.Feed` class.
-The old ``feeds.Feed`` class is deprecated. The new class has an
-almost identical API, but allows instances to be used as views.
-
-Also, in accordance with `RSS best practices`_, RSS feeds will now
-include an ``atom:link`` element. You may need to update your tests to
-take this into account.
-
-For more information, see the full :doc:`syndication framework
-documentation </ref/contrib/syndication>`.
-
-.. _RSS best practices: http://www.rssboard.org/rss-profile
-
-
-Cookie encoding
----------------
-
-Due to cookie-handling bugs in Internet Explorer, Safari, and possibly
-other browsers, Django's encoding of cookie values was changed so that
-the characters comma (',') and semi-colon (';') are treated as
-non-safe characters, and are therefore encoded as ``\054`` and
-``\073`` respectively. This could produce backwards incompatibilities
-if you are relying on the ability to set these characters directly in
-cookie values.
-
-
-What's new in 1.2 beta
-======================
-
-This 1.2 beta release marks the final feature freeze for Django 1.2;
-while most feature development was completed for 1.2 alpha (which
-constituted a freeze on major features), a few other new features were
-added afterward and so are new as of 1.2 beta.
-
-
-Object-level permissions
-------------------------
-
-A foundation for specifying permissions at the per-object level was
-added in Django 1.2 alpha but not documented with the alpha release.
-
-The default authentication backends shipped with Django do not
-currently make use of this, but third-party authentication backends
-are free to do so. See the :doc:`authentication docs </topics/auth>`
-for more information.
-
-
-Permissions for anonymous users
--------------------------------
-
-If you provide a custom authentication backend with the attribute
-``supports_anonymous_user`` set to ``True``, the ``AnonymousUser``
-class will check the backend for permissions, just as the normal
-``User`` does. This is intended to help centralize permission
-handling; apps can always delegate the question of whether something
-is allowed or not to the authorization/authentication system. See the
-:doc:`authentication docs </topics/auth>` for more details.
-
-
-``select_related()`` improvements
----------------------------------
-
-The ``select_related()`` method of ``QuerySet`` now accepts the
-``related_name`` of a reverse one-to-one relation in the list of
-fields to select. One-to-one relations will not, however, be traversed
-by a depth-based ``select_related()`` call.
-
-
-The Django 1.2 roadmap
-======================
-
-Before the final Django 1.2 release, at least one additional
-preview/development releases will be made available. The current
-schedule consists of at least the following:
-
-* Week of **March 2, 2010**: First Django 1.2 release
- candidate. String freeze for translations.
-
-* Week of **March 9, 2010**: Django 1.2 final release.
-
-If necessary, additional beta or release-candidate packages will be
-issued prior to the final 1.2 release. Django 1.2 will be released
-approximately one week after the final release candidate.
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.2 release, we need your
-help. Although this beta release is, again, *not* intended for
-production use, you can help the Django team by trying out the beta
-codebase in a safe test environment and reporting any bugs or issues
-you encounter. The Django ticket tracker is the central place to
-search for open issues:
-
- * http://code.djangoproject.com/timeline
-
-Please open new tickets if no existing ticket corresponds to a problem
-you're running into.
-
-Additionally, discussion of Django development, including progress
-toward the 1.2 release, takes place daily on the django-developers
-mailing list:
-
- * http://groups.google.com/group/django-developers
-
-... and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If you're
-interested in helping out with Django's development, feel free to join the
-discussions there.
-
-Django's online documentation also includes pointers on how to
-contribute to Django:
-
- * :doc:`How to contribute to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing documentation
-or simply triaging tickets and helping to test proposed bugfixes --
-are always welcome and appreciated.
-
-Development sprints for Django 1.2 will also be taking place at PyCon
-US 2010, on the dedicated sprint days (February 22 through 25), and
-anyone who wants to help out is welcome to join in, either in person
-at PyCon or virtually in the IRC channel or on the mailing list.
diff --git a/parts/django/docs/releases/1.2-rc-1.txt b/parts/django/docs/releases/1.2-rc-1.txt
deleted file mode 100644
index b599dcc..0000000
--- a/parts/django/docs/releases/1.2-rc-1.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-=============================
-Django 1.2 RC 1 release notes
-=============================
-
-
-May 5, 2010
-
-Welcome to the first Django 1.2 release candidate!
-
-This is the third -- and likely last -- in a series of
-preview/development releases leading up to the eventual release of
-Django 1.2. This release is targeted primarily at developers who are
-interested in trying out new features and testing the Django codebase
-to help identify and resolve any critical bugs prior to the final 1.2
-release.
-
-As such, this release is not yet intended for production use, and any
-such use is discouraged.
-
-Django has been feature frozen since the 1.2 beta release, so this
-release candidate contains no new features, only bugfixes; for a
-summary of features new to Django 1.2, consult the :doc:`1.2 alpha
-</releases/1.2-alpha-1>` and :doc:`1.2 beta </releases/1.2-beta-1>`
-release notes.
-
-
-Python compatibility
-====================
-
-While not a new feature, it's important to note that Django 1.2
-introduces the first shift in our Python compatibility policy since
-Django's initial public debut. Previous Django releases were tested
-and supported on 2.x Python versions from 2.3 up; Django 1.2, however,
-drops official support for Python 2.3. As such, the minimum Python
-version required for Django is now 2.4, and Django is tested and
-supported on Python 2.4, 2.5 and 2.6, and will be supported on the
-as-yet-unreleased Python 2.7.
-
-This change should affect only a small number of Django users, as most
-operating-system vendors today are shipping Python 2.4 or newer as
-their default version. If you're still using Python 2.3, however,
-you'll need to stick to Django 1.1 until you can upgrade; per
-:doc:`our support policy </internals/release-process>`, Django 1.1 will
-continue to receive security support until the release of Django 1.3.
-
-A roadmap for Django's overall 2.x Python support, and eventual
-transition to Python 3.x, is currently being developed, and will be
-announced prior to the release of Django 1.3.
-
-
-The Django 1.2 roadmap
-======================
-
-As of this release candidate, Django 1.2 is in both feature freeze and
-"string freeze" -- all strings marked for translation in the Django
-codebase will retain their current form in the final Django 1.2
-release. Only critical release-blocking bugs, documentation and
-updated translation files will receive attention between now and the
-final 1.2 release. Note that Django's localization infrastructure has
-been expanded for 1.2, and translation packages should now include a
-``formats.py`` file containing data for localized formatting of
-numbers and dates.
-
-If no critical bugs are discovered, Django 1.2 will be released
-approximately one week after this release candidate, on or about May
-12, 2010.
-
-
-What you can do to help
-=======================
-
-In order to provide a high-quality 1.2 release, we need your
-help. Although this release candidate is, again, *not* intended for
-production use, you can help the Django team by trying out this
-release candidate in a safe testing environment and reporting any bugs
-or issues you encounter. The Django ticket tracker is the central
-place to search for open issues:
-
- * http://code.djangoproject.com/timeline
-
-Please open a new ticket only if no existing ticket corresponds to a
-problem you're running into.
-
-Additionally, discussion of Django development, including progress
-toward the 1.2 release, takes place daily on the django-developers
-mailing list:
-
- * http://groups.google.com/group/django-developers
-
-... and in the ``#django-dev`` IRC channel on ``irc.freenode.net``. If you're
-interested in helping out with Django's development, feel free to join the
-discussions there.
-
-Django's online documentation also includes pointers on how to contribute to
-Django:
-
- * :doc:`How to contribute to Django </internals/contributing>`
-
-Contributions on any level -- developing code, writing documentation or simply
-triaging tickets and helping to test proposed bugfixes -- are always welcome and
-appreciated.
diff --git a/parts/django/docs/releases/1.2.2.txt b/parts/django/docs/releases/1.2.2.txt
deleted file mode 100644
index 4ae74ab..0000000
--- a/parts/django/docs/releases/1.2.2.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-==========================
-Django 1.2.2 release notes
-==========================
-
-Welcome to Django 1.2.2!
-
-This is the second "bugfix" release in the Django 1.2 series,
-improving the stability and performance of the Django 1.2 codebase.
-
-Django 1.2.2 maintains backwards compatibility with Django
-1.2.1, but contain a number of fixes and other
-improvements. Django 1.2.2 is a recommended upgrade for any
-development or deployment currently using or targeting Django 1.2.
-
-For full details on the new features, backwards incompatibilities, and
-deprecated features in the 1.2 branch, see the :doc:`/releases/1.2`.
-
-One new feature
-===============
-
-Ordinarily, a point release would not include new features, but in the
-case of Django 1.2.2, we have made an exception to this rule.
-
-In order to test a bug fix that forms part of the 1.2.2 release, it
-was necessary to add a feature -- the ``enforce_csrf_checks`` flag --
-to the :mod:`test client <django.test.client>`. This flag forces
-the test client to perform full CSRF checks on forms. The default
-behavior of the test client hasn't changed, but if you want to do
-CSRF checks with the test client, it is now possible to do so.
diff --git a/parts/django/docs/releases/1.2.4.txt b/parts/django/docs/releases/1.2.4.txt
deleted file mode 100644
index 5472a28..0000000
--- a/parts/django/docs/releases/1.2.4.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-==========================
-Django 1.2.4 release notes
-==========================
-
-Welcome to Django 1.2.4!
-
-This is the fourth "bugfix" release in the Django 1.2 series,
-improving the stability and performance of the Django 1.2 codebase.
-
-Django 1.2.4 maintains backwards compatibility with Django
-1.2.3, but contain a number of fixes and other
-improvements. Django 1.2.4 is a recommended upgrade for any
-development or deployment currently using or targeting Django 1.2.
-
-For full details on the new features, backwards incompatibilities, and
-deprecated features in the 1.2 branch, see the :doc:`/releases/1.2`.
-
-One new feature
-===============
-
-Ordinarily, a point release would not include new features, but in the
-case of Django 1.2.4, we have made an exception to this rule.
-
-One of the bugs fixed in Django 1.2.4 involves a set of
-circumstances whereby a running a test suite on a multiple database
-configuration could cause the original source database (i.e., the
-actual production database) to be dropped, causing catastrophic loss
-of data. In order to provide a fix for this problem, it was necessary
-to introduce a new setting -- :setting:`TEST_DEPENDENCIES` -- that
-allows you to define any creation order dependencies in your database
-configuration.
-
-Most users -- even users with multiple-database configurations -- need
-not be concerned about the data loss bug, or the manual configuration of
-:setting:`TEST_DEPENDENCIES`. See the `original problem report`_
-documentation on :ref:`controlling the creation order of test
-databases <topics-testing-creation-dependencies>` for details.
-
-.. _original problem report: http://code.djangoproject.com/ticket/14415
-
-GeoDjango
-=========
-
-The function-based :setting:`TEST_RUNNER` previously used to execute
-the GeoDjango test suite, :func:`django.contrib.gis.tests.run_gis_tests`,
-was finally deprecated in favor of a class-based test runner,
-:class:`django.contrib.gis.tests.GeoDjangoTestSuiteRunner`, added in this
-release.
-
-In addition, the GeoDjango test suite is now included when
-:ref:`running the Django test suite <running-unit-tests>` with ``runtests.py``
-and using :ref:`spatial database backends <spatial-backends>`.
diff --git a/parts/django/docs/releases/1.2.txt b/parts/django/docs/releases/1.2.txt
deleted file mode 100644
index efff2a6..0000000
--- a/parts/django/docs/releases/1.2.txt
+++ /dev/null
@@ -1,1139 +0,0 @@
-========================
-Django 1.2 release notes
-========================
-
-*May 17, 2010.*
-
-Welcome to Django 1.2!
-
-Nearly a year in the making, Django 1.2 packs an impressive list of `new
-features`_ and lots of bug fixes. These release notes cover the new features,
-as well as important changes you'll want to be aware of when upgrading from
-Django 1.1 or older versions.
-
-.. _new features: `What's new in Django 1.2`_
-
-Overview
-========
-
-Django 1.2 introduces several large, important new features, including:
-
- * Support for `multiple database connections`_ in a single Django instance.
-
- * `Model validation`_ inspired by Django's form validation.
-
- * Vastly `improved protection against Cross-Site Request Forgery`_ (CSRF).
-
- * A new `user "messages" framework`_ with support for cookie- and session-based
- message for both anonymous and authenticated users.
-
- * Hooks for `object-level permissions`_, `permissions for anonymous users`_,
- and `more flexible username requirements`_.
-
- * Customization of e-mail sending via `e-mail backends`_.
-
- * New :ref:`"smart" if template tag <new-in-1.2-smart-if>` which supports
- comparison operators.
-
-.. _multiple database connections: `support for multiple databases`_
-.. _improved protection against Cross-Site Request Forgery: `improved CSRF protection`_
-.. _user "messages" framework: `messages framework`_
-.. _more flexible username requirements: `relaxed requirements for usernames`_
-
-These are just the highlights; full details and a complete list of features `may
-be found below`_.
-
-.. _may be found below: `what's new in django 1.2`_
-
-.. seealso::
-
- `Django Advent`_ covered the release of Django 1.2 with a series of
- articles and tutorials that cover some of the new features in depth.
-
-.. _django advent: http://djangoadvent.com/
-
-Wherever possible these features have been introduced in a backwards-compatible
-manner per :doc:`our API stability policy </misc/api-stability>` policy.
-
-However, a handful of features *have* changed in ways that, for some users, will be
-backwards-incompatible. The big changes are:
-
- * Support for Python 2.3 has been dropped. See the full notes
- below.
-
- * The new CSRF protection framework is not backwards-compatible with
- the old system. Users of the old system will not be affected until
- the old system is removed in Django 1.4.
-
- However, upgrading to the new CSRF protection framework requires a few
- important backwards-incompatible changes, detailed in `CSRF Protection`_,
- below.
-
- * Authors of custom :class:`~django.db.models.Field` subclasses should be
- aware that a number of methods have had a change in prototype, detailed
- under `get_db_prep_*() methods on Field`_, below.
-
- * The internals of template tags have changed somewhat; authors of custom
- template tags that need to store state (e.g. custom control flow tags)
- should ensure that their code follows the new rules for `stateful template
- tags`_
-
- * The :func:`~django.contrib.auth.decorators.user_passes_test`,
- :func:`~django.contrib.auth.decorators.login_required`, and
- :func:`~django.contrib.auth.decorators.permission_required`, decorators
- from :mod:`django.contrib.auth` only apply to functions and no longer
- work on methods. There's a simple one-line fix `detailed below`_.
-
-.. _detailed below: `user_passes_test, login_required and permission_required`_
-
-Again, these are just the big features that will affect the most users. Users
-upgrading from previous versions of Django are heavily encouraged to consult
-the complete list of :ref:`backwards-incompatible changes
-<backwards-incompatible-changes-1.2>` and the list of :ref:`deprecated
-features <deprecated-features-1.2>`.
-
-Python compatibility
-====================
-
-While not a new feature, it's important to note that Django 1.2
-introduces the first shift in our Python compatibility policy since
-Django's initial public debut. Previous Django releases were tested
-and supported on 2.x Python versions from 2.3 up; Django 1.2, however,
-drops official support for Python 2.3. As such, the minimum Python
-version required for Django is now 2.4, and Django is tested and
-supported on Python 2.4, 2.5 and 2.6, and will be supported on the
-as-yet-unreleased Python 2.7.
-
-This change should affect only a small number of Django users, as most
-operating-system vendors today are shipping Python 2.4 or newer as
-their default version. If you're still using Python 2.3, however,
-you'll need to stick to Django 1.1 until you can upgrade; per
-:doc:`our support policy </internals/release-process>`, Django 1.1 will
-continue to receive security support until the release of Django 1.3.
-
-A roadmap for Django's overall 2.x Python support, and eventual
-transition to Python 3.x, is currently being developed, and will be
-announced prior to the release of Django 1.3.
-
-What's new in Django 1.2
-========================
-
-Support for multiple databases
-------------------------------
-
-Django 1.2 adds the ability to use :doc:`more than one database
-</topics/db/multi-db>` in your Django project. Queries can be issued at a
-specific database with the `using()` method on ``QuerySet`` objects. Individual
-objects can be saved to a specific database by providing a ``using`` argument
-when you call ``save()``.
-
-Model validation
-----------------
-
-Model instances now have support for :ref:`validating their own data
-<validating-objects>`, and both model and form fields now accept configurable
-lists of :doc:`validators </ref/validators>` specifying reusable, encapsulated
-validation behavior. Note, however, that validation must still be performed
-explicitly. Simply invoking a model instance's ``save()`` method will not
-perform any validation of the instance's data.
-
-Improved CSRF protection
-------------------------
-
-Django now has much improved protection against :doc:`Cross-Site Request Forgery
-(CSRF) attacks</ref/contrib/csrf>`. This type of attack occurs when a malicious
-Web site contains a link, a form button or some JavaScript that is intended to
-perform some action on your Web site, using the credentials of a logged-in user
-who visits the malicious site in their browser. A related type of attack, "login
-CSRF," where an attacking site tricks a user's browser into logging into a site
-with someone else's credentials, is also covered.
-
-Messages framework
-------------------
-
-Django now includes a robust and configurable :doc:`messages framework
-</ref/contrib/messages>` with built-in support for cookie- and session-based
-messaging, for both anonymous and authenticated clients. The messages framework
-replaces the deprecated user message API and allows you to temporarily store
-messages in one request and retrieve them for display in a subsequent request
-(usually the next one).
-
-Object-level permissions
-------------------------
-
-A foundation for specifying permissions at the per-object level has been added.
-Although there is no implementation of this in core, a custom authentication
-backend can provide this implementation and it will be used by
-:class:`django.contrib.auth.models.User`. See the :doc:`authentication docs
-</topics/auth>` for more information.
-
-Permissions for anonymous users
--------------------------------
-
-If you provide a custom auth backend with ``supports_anonymous_user`` set to
-``True``, AnonymousUser will check the backend for permissions, just like
-User already did. This is useful for centralizing permission handling - apps
-can always delegate the question of whether something is allowed or not to
-the authorization/authentication backend. See the :doc:`authentication
-docs </topics/auth>` for more details.
-
-Relaxed requirements for usernames
-----------------------------------
-
-The built-in :class:`~django.contrib.auth.models.User` model's
-:attr:`~django.contrib.auth.models.User.username` field now allows a wider range
-of characters, including ``@``, ``+``, ``.`` and ``-`` characters.
-
-E-mail backends
----------------
-
-You can now :ref:`configure the way that Django sends e-mail
-<topic-email-backends>`. Instead of using SMTP to send all e-mail, you
-can now choose a configurable e-mail backend to send messages. If your
-hosting provider uses a sandbox or some other non-SMTP technique for
-sending mail, you can now construct an e-mail backend that will allow
-Django's standard :doc:`mail sending methods</topics/email>` to use
-those facilities.
-
-This also makes it easier to debug mail sending. Django ships with
-backend implementations that allow you to send e-mail to a
-:ref:`file<topic-email-file-backend>`, to the
-:ref:`console<topic-email-console-backend>`, or to
-:ref:`memory<topic-email-memory-backend>`. You can even configure all
-e-mail to be :ref:`thrown away<topic-email-dummy-backend>`.
-
-.. _new-in-1.2-smart-if:
-
-"Smart" :ttag:`if` tag
-----------------------
-
-The :ttag:`if` tag has been upgraded to be much more powerful. First, we've
-added support for comparison operators. No longer will you have to type:
-
-.. code-block:: html+django
-
- {% ifnotequal a b %}
- ...
- {% endifnotequal %}
-
-You can now do this:
-
-.. code-block:: html+django
-
- {% if a != b %}
- ...
- {% endif %}
-
-There's really no reason to use ``{% ifequal %}`` or ``{% ifnotequal %}``
-anymore, unless you're the nostalgic type.
-
-The operators supported are ``==``, ``!=``, ``<``, ``>``, ``<=``, ``>=``,
-``in`` and ``not in``, all of which work like the Python operators, in addition
-to ``and``, ``or`` and ``not``, which were already supported.
-
-Also, filters may now be used in the ``if`` expression. For example:
-
-.. code-block:: html+django
-
- <div
- {% if user.email|lower == message.recipient|lower %}
- class="highlight"
- {% endif %}
- >{{ message }}</div>
-
-Template caching
-----------------
-
-In previous versions of Django, every time you rendered a template, it
-would be reloaded from disk. In Django 1.2, you can use a :ref:`cached
-template loader <template-loaders>` to load templates once, then
-cache the result for every subsequent render. This can lead to a
-significant performance improvement if your templates are broken into
-lots of smaller subtemplates (using the ``{% extends %}`` or ``{%
-include %}`` tags).
-
-As a side effect, it is now much easier to support non-Django template
-languages. For more details, see the :ref:`notes on supporting
-non-Django template languages<topic-template-alternate-language>`.
-
-Natural keys in fixtures
-------------------------
-
-Fixtures can now refer to remote objects using
-:ref:`topics-serialization-natural-keys`. This lookup scheme is an
-alternative to the normal primary-key based object references in a
-fixture, improving readability and resolving problems referring to
-objects whose primary key value may not be predictable or known.
-
-Fast failure for tests
-----------------------
-
-Both the :djadmin:`test` subcommand of ``django-admin.py`` and the
-``runtests.py`` script used to run Django's own test suite now support a
-``--failfast`` option. When specified, this option causes the test runner to
-exit after encountering a failure instead of continuing with the test run. In
-addition, the handling of ``Ctrl-C`` during a test run has been improved to
-trigger a graceful exit from the test run that reports details of the tests that
-were run before the interruption.
-
-``BigIntegerField``
--------------------
-
-Models can now use a 64-bit :class:`~django.db.models.BigIntegerField` type.
-
-Improved localization
----------------------
-
-Django's :doc:`internationalization framework </topics/i18n/index>` has been expanded
-with locale-aware formatting and form processing. That means, if enabled, dates
-and numbers on templates will be displayed using the format specified for the
-current locale. Django will also use localized formats when parsing data in
-forms. See :ref:`Format localization <format-localization>` for more details.
-
-``readonly_fields`` in ``ModelAdmin``
--------------------------------------
-
-:attr:`django.contrib.admin.ModelAdmin.readonly_fields` has been added to
-enable non-editable fields in add/change pages for models and inlines. Field
-and calculated values can be displayed alongside editable fields.
-
-Customizable syntax highlighting
---------------------------------
-
-You can now use a ``DJANGO_COLORS`` environment variable to modify or disable
-the colors used by ``django-admin.py`` to provide :ref:`syntax highlighting
-<syntax-coloring>`.
-
-Syndication feeds as views
---------------------------
-
-:doc:`Syndication feeds </ref/contrib/syndication>` can now be used directly as
-views in your :doc:`URLconf </topics/http/urls>`. This means that you can
-maintain complete control over the URL structure of your feeds. Like any other
-view, feeds views are passed a ``request`` object, so you can do anything you
-would normally do with a view, like user based access control, or making a feed
-a named URL.
-
-GeoDjango
----------
-
-The most significant new feature for :doc:`GeoDjango </ref/contrib/gis/index>`
-in 1.2 is support for multiple spatial databases. As a result,
-the following :ref:`spatial database backends <spatial-backends>`
-are now included:
-
-* :mod:`django.contrib.gis.db.backends.postgis`
-* :mod:`django.contrib.gis.db.backends.mysql`
-* :mod:`django.contrib.gis.db.backends.oracle`
-* :mod:`django.contrib.gis.db.backends.spatialite`
-
-GeoDjango now supports the rich capabilities added
-in the `PostGIS 1.5 release <http://postgis.refractions.net/documentation/manual-1.5/>`_.
-New features include suppport for the the :ref:`geography type <geography-type>`
-and enabling of :ref:`distance queries <distance-queries>`
-with non-point geometries on geographic coordinate systems.
-
-Support for 3D geometry fields was added, and may be enabled
-by setting the :attr:`~django.contrib.gis.db.models.GeometryField.dim`
-keyword to 3 in your :class:`~django.contrib.gis.db.models.GeometryField`.
-The :class:`~django.contrib.gis.db.models.Extent3D` aggregate
-and :meth:`~django.contrib.gis.db.models.GeoQuerySet.extent3d` ``GeoQuerySet``
-method were added as a part of this feature.
-
-The following :class:`~django.contrib.gis.db.models.GeoQuerySet`
-methods are new in 1.2:
-
-* :meth:`~django.contrib.gis.db.models.GeoQuerySet.force_rhr`
-* :meth:`~django.contrib.gis.db.models.GeoQuerySet.reverse_geom`
-* :meth:`~django.contrib.gis.db.models.GeoQuerySet.geohash`
-
-The :ref:`GEOS interface <ref-geos>` was updated to use
-thread-safe C library functions when available on the platform.
-
-The :ref:`GDAL interface <ref-gdal>` now allows the user to
-set a :attr:`~django.contrib.gis.gdal.Layer.spatial_filter` on
-the features returned when iterating over a
-:class:`~django.contrib.gis.gdal.Layer`.
-
-Finally, :doc:`GeoDjango's documentation </ref/contrib/gis/index>` is now
-included with Django's and is no longer
-hosted separately at `geodjango.org <http://geodjango.org/>`_.
-
-.. _1.2-js-assisted-inlines:
-
-JavaScript-assisted handling of inline related objects in the admin
--------------------------------------------------------------------
-
-If a user has JavaScript enabled in their browser, the interface for
-inline objects in the admin now allows inline objects to be
-dynamically added and removed. Users without JavaScript-enabled
-browsers will see no change in the behavior of inline objects.
-
-New ``now`` template tag format specifier characters: ``c`` and ``u``
----------------------------------------------------------------------
-
-The argument to the :ttag:`now` has gained two new format characters:
-``c`` to specify that a datetime value should be formatted in ISO 8601
-format, and ``u`` that allows output of the microseconds part of a
-datetime or time value.
-
-These are also available in others parts like the :tfilter:`date` and
-:tfilter:`time` template filters, the ``humanize`` template tag library
-and the new `format localization`_ framework.
-
-.. _format localization: `Improved localization`_
-
-.. _backwards-incompatible-changes-1.2:
-
-Backwards-incompatible changes in 1.2
-=====================================
-
-Wherever possible the new features above have been introduced in a
-backwards-compatible manner per :doc:`our API stability policy
-</misc/api-stability>` policy. This means that practically all existing
-code which worked with Django 1.1 will continue to work with Django
-1.2; such code will, however, begin issuing warnings (see below for
-details).
-
-However, a handful of features *have* changed in ways that, for some
-users, will be immediately backwards-incompatible. Those changes are
-detailed below.
-
-CSRF Protection
----------------
-
-We've made large changes to the way CSRF protection works, detailed in
-:doc:`the CSRF documentaton </ref/contrib/csrf>`. Here are the major changes you
-should be aware of:
-
- * ``CsrfResponseMiddleware`` and ``CsrfMiddleware`` have been deprecated and
- will be removed completely in Django 1.4, in favor of a template tag that
- should be inserted into forms.
-
- * All contrib apps use a ``csrf_protect`` decorator to protect the view. This
- requires the use of the ``csrf_token`` template tag in the template. If you
- have used custom templates for contrib views, you MUST READ THE :ref:`UPGRADE
- INSTRUCTIONS <ref-csrf-upgrading-notes>` to fix those templates.
-
- * ``CsrfViewMiddleware`` is included in :setting:`MIDDLEWARE_CLASSES` by
- default. This turns on CSRF protection by default, so views that accept
- POST requests need to be written to work with the middleware. Instructions
- on how to do this are found in the CSRF docs.
-
- * All of the CSRF has moved from contrib to core (with backwards
- compatible imports in the old locations, which are deprecated and
- will cease to be supported in Django 1.4).
-
-``get_db_prep_*()`` methods on ``Field``
-----------------------------------------
-
-Prior to Django 1.2, a custom ``Field`` had the option of defining
-several functions to support conversion of Python values into
-database-compatible values. A custom field might look something like::
-
- class CustomModelField(models.Field):
- # ...
- def db_type(self):
- # ...
-
- def get_db_prep_save(self, value):
- # ...
-
- def get_db_prep_value(self, value):
- # ...
-
- def get_db_prep_lookup(self, lookup_type, value):
- # ...
-
-In 1.2, these three methods have undergone a change in prototype, and
-two extra methods have been introduced::
-
- class CustomModelField(models.Field):
- # ...
-
- def db_type(self, connection):
- # ...
-
- def get_prep_value(self, value):
- # ...
-
- def get_prep_lookup(self, lookup_type, value):
- # ...
-
- def get_db_prep_save(self, value, connection):
- # ...
-
- def get_db_prep_value(self, value, connection, prepared=False):
- # ...
-
- def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
- # ...
-
-These changes are required to support multiple databases --
-``db_type`` and ``get_db_prep_*`` can no longer make any assumptions
-regarding the database for which it is preparing. The ``connection``
-argument now provides the preparation methods with the specific
-connection for which the value is being prepared.
-
-The two new methods exist to differentiate general data-preparation
-requirements from requirements that are database-specific. The
-``prepared`` argument is used to indicate to the database-preparation
-methods whether generic value preparation has been performed. If
-an unprepared (i.e., ``prepared=False``) value is provided to the
-``get_db_prep_*()`` calls, they should invoke the corresponding
-``get_prep_*()`` calls to perform generic data preparation.
-
-We've provided conversion functions that will transparently
-convert functions adhering to the old prototype into functions
-compatible with the new prototype. However, these conversion functions
-will be removed in Django 1.4, so you should upgrade your ``Field``
-definitions to use the new prototype as soon as possible.
-
-If your ``get_db_prep_*()`` methods made no use of the database
-connection, you should be able to upgrade by renaming
-``get_db_prep_value()`` to ``get_prep_value()`` and
-``get_db_prep_lookup()`` to ``get_prep_lookup()``. If you require
-database specific conversions, then you will need to provide an
-implementation ``get_db_prep_*`` that uses the ``connection``
-argument to resolve database-specific values.
-
-Stateful template tags
-----------------------
-
-Template tags that store rendering state on their ``Node`` subclass
-have always been vulnerable to thread-safety and other issues; as of
-Django 1.2, however, they may also cause problems when used with the
-new :ref:`cached template loader<template-loaders>`.
-
-All of the built-in Django template tags are safe to use with the cached
-loader, but if you're using custom template tags that come from third
-party packages, or from your own code, you should ensure that the
-``Node`` implementation for each tag is thread-safe. For more
-information, see
-:ref:`template tag thread safety considerations<template_tag_thread_safety>`.
-
-You may also need to update your templates if you were relying on the
-implementation of Django's template tags *not* being thread safe. The
-:ttag:`cycle` tag is the most likely to be affected in this way,
-especially when used in conjunction with the :ttag:`include` tag.
-Consider the following template fragment::
-
- {% for object in object_list %}
- {% include "subtemplate.html" %}
- {% endfor %}
-
-with a ``subtemplate.html`` that reads::
-
- {% cycle 'even' 'odd' %}
-
-Using the non-thread-safe, pre-Django 1.2 renderer, this would output::
-
- even odd even odd ...
-
-Using the thread-safe Django 1.2 renderer, you will instead get::
-
- even even even even ...
-
-This is because each rendering of the :ttag:`include` tag is an
-independent rendering. When the :ttag:`cycle` tag was not thread safe,
-the state of the :ttag:`cycle` tag would leak between multiple
-renderings of the same :ttag:`include`. Now that the :ttag:`cycle` tag
-is thread safe, this leakage no longer occurs.
-
-``user_passes_test``, ``login_required`` and ``permission_required``
---------------------------------------------------------------------
-
-``django.contrib.auth.decorators`` provides the decorators
-``login_required``, ``permission_required`` and
-``user_passes_test``. Previously it was possible to use these
-decorators both on functions (where the first argument is 'request')
-and on methods (where the first argument is 'self', and the second
-argument is 'request'). Unfortunately, flaws were discovered in the
-code supporting this: it only works in limited circumstances, and
-produces errors that are very difficult to debug when it does not
-work.
-
-For this reason, the 'auto adapt' behavior has been removed, and if
-you are using these decorators on methods, you will need to manually
-apply :func:`django.utils.decorators.method_decorator` to convert the
-decorator to one that works with methods. For example, you would
-change code from this::
-
- class MyClass(object):
-
- @login_required
- def my_view(self, request):
- pass
-
-to this::
-
- from django.utils.decorators import method_decorator
-
- class MyClass(object):
-
- @method_decorator(login_required)
- def my_view(self, request):
- pass
-
-or::
-
- from django.utils.decorators import method_decorator
-
- login_required_m = method_decorator(login_required)
-
- class MyClass(object):
-
- @login_required_m
- def my_view(self, request):
- pass
-
-For those of you who've been following the development trunk, this
-change also applies to other decorators introduced since 1.1,
-including ``csrf_protect``, ``cache_control`` and anything created
-using ``decorator_from_middleware``.
-
-:ttag:`if` tag changes
-----------------------
-
-Due to new features in the :ttag:`if` template tag, it no longer
-accepts 'and', 'or' and 'not' as valid **variable** names. Previously,
-these strings could be used as variable names. Now, the keyword status
-is always enforced, and template code such as ``{% if not %}`` or ``{%
-if and %}`` will throw a ``TemplateSyntaxError``. Also, ``in`` is a
-new keyword and so is not a valid variable name in this tag.
-
-``LazyObject``
---------------
-
-``LazyObject`` is an undocumented-but-often-used utility class used for lazily
-wrapping other objects of unknown type.
-
-In Django 1.1 and earlier, it handled introspection in a non-standard way,
-depending on wrapped objects implementing a public method named
-``get_all_members()``. Since this could easily lead to name clashes, it has been
-changed to use the standard Python introspection method, involving
-``__members__`` and ``__dir__()``.
-
-If you used ``LazyObject`` in your own code
-and implemented the ``get_all_members()`` method for wrapped objects, you'll need
-to make a couple of changes:
-
-First, if your class does not have special requirements for introspection (i.e.,
-you have not implemented ``__getattr__()`` or other methods that allow for
-attributes not discoverable by normal mechanisms), you can simply remove the
-``get_all_members()`` method. The default implementation on ``LazyObject`` will
-do the right thing.
-
-If you have more complex requirements for introspection, first rename the
-``get_all_members()`` method to ``__dir__()``. This is the standard
-introspection method for Python 2.6 and above. If you require support for Python
-versions earlier than 2.6, add the following code to the class::
-
- __members__ = property(lambda self: self.__dir__())
-
-``__dict__`` on model instances
--------------------------------
-
-Historically, the ``__dict__`` attribute of a model instance has only contained
-attributes corresponding to the fields on a model.
-
-In order to support multiple database configurations, Django 1.2 has
-added a ``_state`` attribute to object instances. This attribute will
-appear in ``__dict__`` for a model instance. If your code relies on
-iterating over ``__dict__`` to obtain a list of fields, you must now
-be prepared to handle or filter out the ``_state`` attribute.
-
-Test runner exit status code
-----------------------------
-
-The exit status code of the test runners (``tests/runtests.py`` and ``python
-manage.py test``) no longer represents the number of failed tests, because a
-failure of 256 or more tests resulted in a wrong exit status code. The exit
-status code for the test runner is now 0 for success (no failing tests) and 1
-for any number of test failures. If needed, the number of test failures can be
-found at the end of the test runner's output.
-
-Cookie encoding
----------------
-
-To fix bugs with cookies in Internet Explorer, Safari, and possibly
-other browsers, our encoding of cookie values was changed so that the
-comma and semicolon are treated as non-safe characters, and are
-therefore encoded as ``\054`` and ``\073`` respectively. This could
-produce backwards incompatibilities, especially if you are storing
-comma or semi-colon in cookies and have javascript code that parses
-and manipulates cookie values client-side.
-
-``ModelForm.is_valid()`` and ``ModelForm.errors``
--------------------------------------------------
-
-Much of the validation work for ModelForms has been moved down to the model
-level. As a result, the first time you call ``ModelForm.is_valid()``, access
-``ModelForm.errors`` or otherwise trigger form validation, your model will be
-cleaned in-place. This conversion used to happen when the model was saved. If
-you need an unmodified instance of your model, you should pass a copy to the
-``ModelForm`` constructor.
-
-``BooleanField`` on MySQL
---------------------------
-
-In previous versions of Django, a model's ``BooleanField`` under MySQL
-would return its value as either ``1`` or ``0``, instead of ``True``
-or ``False``; for most people this wasn't a problem because ``bool``
-is a subclass of ``int`` in Python. In Django 1.2, however,
-``BooleanField`` on MySQL correctly returns a real ``bool``. The only
-time this should ever be an issue is if you were expecting the
-``repr`` of a ``BooleanField`` to print ``1`` or ``0``.
-
-Changes to the interpretation of ``max_num`` in FormSets
---------------------------------------------------------
-
-As part of enhancements made to the handling of FormSets, the default
-value and interpretation of the ``max_num`` parameter to the
-:ref:`django.forms.formsets.formset_factory() <formsets-max-num>` and
-:ref:`django.forms.models.modelformset_factory()
-<model-formsets-max-num>` functions has changed slightly. This
-change also affects the way the ``max_num`` argument is :ref:`used for
-inline admin objects <ref-contrib-admin-inline-max-num>`
-
-Previously, the default value for ``max_num`` was ``0`` (zero).
-FormSets then used the boolean value of ``max_num`` to determine if a
-limit was to be imposed on the number of generated forms. The default
-value of ``0`` meant that there was no default limit on the number of
-forms in a FormSet.
-
-Starting with 1.2, the default value for ``max_num`` has been changed
-to ``None``, and FormSets will differentiate between a value of
-``None`` and a value of ``0``. A value of ``None`` indicates that no
-limit on the number of forms is to be imposed; a value of ``0``
-indicates that a maximum of 0 forms should be imposed. This doesn't
-necessarily mean that no forms will be displayed -- see the
-:ref:`ModelFormSet documentation <model-formsets-max-num>` for more
-details.
-
-If you were manually specifying a value of ``0`` for ``max_num``, you
-will need to update your FormSet and/or admin definitions.
-
-.. seealso::
-
- :ref:`1.2-js-assisted-inlines`
-
-``email_re``
-------------
-
-An undocumented regular expression for validating email addresses has been moved
-from ``django.form.fields`` to ``django.core.validators``. You will need to
-update your imports if you are using it.
-
-.. _deprecated-features-1.2:
-
-Features deprecated in 1.2
-==========================
-
-Finally, Django 1.2 deprecates some features from earlier releases.
-These features are still supported, but will be gradually phased out
-over the next few release cycles.
-
-Code taking advantage of any of the features below will raise a
-``PendingDeprecationWarning`` in Django 1.2. This warning will be
-silent by default, but may be turned on using Python's `warnings
-module`_, or by running Python with a ``-Wd`` or `-Wall` flag.
-
-.. _warnings module: http://docs.python.org/library/warnings.html
-
-In Django 1.3, these warnings will become a ``DeprecationWarning``,
-which is *not* silent. In Django 1.4 support for these features will
-be removed entirely.
-
-.. seealso::
-
- For more details, see the documentation :doc:`Django's release process
- </internals/release-process>` and our :doc:`deprecation timeline
- </internals/deprecation>`.`
-
-.. _specifying-databases:
-
-Specifying databases
---------------------
-
-Prior to Django 1.2, Django used a number of settings to control
-access to a single database. Django 1.2 introduces support for
-multiple databases, and as a result the way you define database
-settings has changed.
-
-Any existing Django settings file will continue to work as expected
-until Django 1.4. Until then, old-style database settings will be
-automatically translated to the new-style format.
-
-In the old-style (pre 1.2) format, you had a number of ``DATABASE_``
-settings in your settings file. For example::
-
- DATABASE_NAME = 'test_db'
- DATABASE_ENGINE = 'postgresql_psycopg2'
- DATABASE_USER = 'myusername'
- DATABASE_PASSWORD = 's3krit'
-
-These settings are now in a dictionary named
-:setting:`DATABASES`. Each item in the dictionary corresponds to a
-single database connection, with the name ``'default'`` describing the
-default database connection. The setting names have also been
-shortened. The previous sample settings would now look like this::
-
- DATABASES = {
- 'default': {
- 'NAME': 'test_db',
- 'ENGINE': 'django.db.backends.postgresql_psycopg2',
- 'USER': 'myusername',
- 'PASSWORD': 's3krit',
- }
- }
-
-This affects the following settings:
-
- ========================================= ==========================
- Old setting New Setting
- ========================================= ==========================
- :setting:`DATABASE_ENGINE` :setting:`ENGINE`
- :setting:`DATABASE_HOST` :setting:`HOST`
- :setting:`DATABASE_NAME` :setting:`NAME`
- :setting:`DATABASE_OPTIONS` :setting:`OPTIONS`
- :setting:`DATABASE_PASSWORD` :setting:`PASSWORD`
- :setting:`DATABASE_PORT` :setting:`PORT`
- :setting:`DATABASE_USER` :setting:`USER`
- :setting:`TEST_DATABASE_CHARSET` :setting:`TEST_CHARSET`
- :setting:`TEST_DATABASE_COLLATION` :setting:`TEST_COLLATION`
- :setting:`TEST_DATABASE_NAME` :setting:`TEST_NAME`
- ========================================= ==========================
-
-These changes are also required if you have manually created a database
-connection using ``DatabaseWrapper()`` from your database backend of choice.
-
-In addition to the change in structure, Django 1.2 removes the special
-handling for the built-in database backends. All database backends
-must now be specified by a fully qualified module name (i.e.,
-``django.db.backends.postgresql_psycopg2``, rather than just
-``postgresql_psycopg2``).
-
-``postgresql`` database backend
--------------------------------
-
-The ``psycopg1`` library has not been updated since October 2005. As a
-result, the ``postgresql`` database backend, which uses this library,
-has been deprecated.
-
-If you are currently using the ``postgresql`` backend, you should
-migrate to using the ``postgresql_psycopg2`` backend. To update your
-code, install the ``psycopg2`` library and change the
-:setting:`DATABASE_ENGINE` setting to use
-``django.db.backends.postgresql_psycopg2``.
-
-CSRF response-rewriting middleware
-----------------------------------
-
-``CsrfResponseMiddleware``, the middleware that automatically inserted
-CSRF tokens into ``POST`` forms in outgoing pages, has been deprecated
-in favor of a template tag method (see above), and will be removed
-completely in Django 1.4. ``CsrfMiddleware``, which includes the
-functionality of ``CsrfResponseMiddleware`` and
-``CsrfViewMiddleware``, has likewise been deprecated.
-
-Also, the CSRF module has moved from contrib to core, and the old
-imports are deprecated, as described in the :ref:`upgrading notes
-<ref-csrf-upgrading-notes>`.
-
-``SMTPConnection``
-------------------
-
-The ``SMTPConnection`` class has been deprecated in favor of a generic
-e-mail backend API. Old code that explicitly instantiated an instance
-of an SMTPConnection::
-
- from django.core.mail import SMTPConnection
- connection = SMTPConnection()
- messages = get_notification_email()
- connection.send_messages(messages)
-
-...should now call :meth:`~django.core.mail.get_connection()` to
-instantiate a generic e-mail connection::
-
- from django.core.mail import get_connection
- connection = get_connection()
- messages = get_notification_email()
- connection.send_messages(messages)
-
-Depending on the value of the :setting:`EMAIL_BACKEND` setting, this
-may not return an SMTP connection. If you explicitly require an SMTP
-connection with which to send e-mail, you can explicitly request an
-SMTP connection::
-
- from django.core.mail import get_connection
- connection = get_connection('django.core.mail.backends.smtp.EmailBackend')
- messages = get_notification_email()
- connection.send_messages(messages)
-
-If your call to construct an instance of ``SMTPConnection`` required
-additional arguments, those arguments can be passed to the
-:meth:`~django.core.mail.get_connection()` call::
-
- connection = get_connection('django.core.mail.backends.smtp.EmailBackend', hostname='localhost', port=1234)
-
-User Messages API
------------------
-
-The API for storing messages in the user ``Message`` model (via
-``user.message_set.create``) is now deprecated and will be removed in Django
-1.4 according to the standard :doc:`release process </internals/release-process>`.
-
-To upgrade your code, you need to replace any instances of this::
-
- user.message_set.create('a message')
-
-...with the following::
-
- from django.contrib import messages
- messages.add_message(request, messages.INFO, 'a message')
-
-Additionally, if you make use of the method, you need to replace the
-following::
-
- for message in user.get_and_delete_messages():
- ...
-
-...with::
-
- from django.contrib import messages
- for message in messages.get_messages(request):
- ...
-
-For more information, see the full
-:doc:`messages documentation </ref/contrib/messages>`. You should begin to
-update your code to use the new API immediately.
-
-Date format helper functions
-----------------------------
-
-``django.utils.translation.get_date_formats()`` and
-``django.utils.translation.get_partial_date_formats()`` have been deprecated
-in favor of the appropriate calls to ``django.utils.formats.get_format()``,
-which is locale-aware when :setting:`USE_L10N` is set to ``True``, and falls
-back to default settings if set to ``False``.
-
-To get the different date formats, instead of writing this::
-
- from django.utils.translation import get_date_formats
- date_format, datetime_format, time_format = get_date_formats()
-
-...use::
-
- from django.utils import formats
- date_format = formats.get_format('DATE_FORMAT')
- datetime_format = formats.get_format('DATETIME_FORMAT')
- time_format = formats.get_format('TIME_FORMAT')
-
-Or, when directly formatting a date value::
-
- from django.utils import formats
- value_formatted = formats.date_format(value, 'DATETIME_FORMAT')
-
-The same applies to the globals found in ``django.forms.fields``:
-
- * ``DEFAULT_DATE_INPUT_FORMATS``
- * ``DEFAULT_TIME_INPUT_FORMATS``
- * ``DEFAULT_DATETIME_INPUT_FORMATS``
-
-Use ``django.utils.formats.get_format()`` to get the appropriate formats.
-
-Function-based test runners
----------------------------
-
-Django 1.2 changes the test runner tools to use a class-based
-approach. Old style function-based test runners will still work, but
-should be updated to use the new :ref:`class-based runners
-<topics-testing-test_runner>`.
-
-.. _1.2-updating-feeds:
-
-``Feed`` in ``django.contrib.syndication.feeds``
-------------------------------------------------
-
-The :class:`django.contrib.syndication.feeds.Feed` class has been
-replaced by the :class:`django.contrib.syndication.views.Feed` class.
-The old ``feeds.Feed`` class is deprecated, and will be removed in
-Django 1.4.
-
-The new class has an almost identical API, but allows instances to be
-used as views. For example, consider the use of the old framework in
-the following :doc:`URLconf </topics/http/urls>`::
-
- from django.conf.urls.defaults import *
- from myproject.feeds import LatestEntries, LatestEntriesByCategory
-
- feeds = {
- 'latest': LatestEntries,
- 'categories': LatestEntriesByCategory,
- }
-
- urlpatterns = patterns('',
- # ...
- (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed',
- {'feed_dict': feeds}),
- # ...
- )
-
-Using the new Feed class, these feeds can be deployed directly as views::
-
- from django.conf.urls.defaults import *
- from myproject.feeds import LatestEntries, LatestEntriesByCategory
-
- urlpatterns = patterns('',
- # ...
- (r'^feeds/latest/$', LatestEntries()),
- (r'^feeds/categories/(?P<category_id>\d+)/$', LatestEntriesByCategory()),
- # ...
- )
-
-If you currently use the ``feed()`` view, the ``LatestEntries`` class would
-often not need to be modified apart from subclassing the new
-:class:`~django.contrib.syndication.views.Feed` class. The exception is if
-Django was automatically working out the name of the template to use to render
-the feed's description and title elements (if you were not specifying the
-``title_template`` and ``description_template`` attributes). You should ensure
-that you always specify ``title_template`` and ``description_template``
-attributes, or provide ``item_title()`` and ``item_description()`` methods.
-
-However, ``LatestEntriesByCategory`` uses the ``get_object()`` method
-with the ``bits`` argument to specify a specific category to show. In
-the new :class:`~django.contrib.syndication.views.Feed` class,
-``get_object()`` method takes a ``request`` and arguments from the
-URL, so it would look like this::
-
- from django.contrib.syndication.views import Feed
- from django.shortcuts import get_object_or_404
- from myproject.models import Category
-
- class LatestEntriesByCategory(Feed):
- def get_object(self, request, category_id):
- return get_object_or_404(Category, id=category_id)
-
- # ...
-
-Additionally, the ``get_feed()`` method on ``Feed`` classes now take
-different arguments, which may impact you if you use the ``Feed``
-classes directly. Instead of just taking an optional ``url`` argument,
-it now takes two arguments: the object returned by its own
-``get_object()`` method, and the current ``request`` object.
-
-To take into account ``Feed`` classes not being initialized for each
-request, the ``__init__()`` method now takes no arguments by default.
-Previously it would have taken the ``slug`` from the URL and the
-``request`` object.
-
-In accordance with `RSS best practices`_, RSS feeds will now include
-an ``atom:link`` element. You may need to update your tests to take
-this into account.
-
-For more information, see the full :doc:`syndication framework
-documentation </ref/contrib/syndication>`.
-
-.. _RSS best practices: http://www.rssboard.org/rss-profile
-
-Technical message IDs
----------------------
-
-Up to version 1.1 Django used :ref:`technical message IDs<technical-messages>`
-to provide localizers the possibility to translate date and time formats. They
-were translatable :term:`translation strings <translation string>` that could
-be recognized because they were all upper case (for example
-``DATETIME_FORMAT``, ``DATE_FORMAT``, ``TIME_FORMAT``). They have been
-deprecated in favor of the new :ref:`Format localization
-<format-localization>` infrastructure that allows localizers to specify that
-information in a ``formats.py`` file in the corresponding
-``django/conf/locale/<locale name>/`` directory.
-
-GeoDjango
----------
-
-To allow support for multiple databases, the GeoDjango database internals were
-changed substantially. The largest backwards-incompatible change is that
-the module ``django.contrib.gis.db.backend`` was renamed to
-:mod:`django.contrib.gis.db.backends`, where the full-fledged
-:ref:`spatial database backends <spatial-backends>` now exist. The
-following sections provide information on the most-popular APIs that
-were affected by these changes.
-
-``SpatialBackend``
-^^^^^^^^^^^^^^^^^^
-
-Prior to the creation of the separate spatial backends, the
-``django.contrib.gis.db.backend.SpatialBackend`` object was
-provided as an abstraction to introspect on the capabilities of
-the spatial database. All of the attributes and routines provided by
-``SpatialBackend`` are now a part of the ``ops`` attribute of the
-database backend.
-
-The old module ``django.contrib.gis.db.backend`` is still provided
-for backwards-compatibility access to a ``SpatialBackend`` object,
-which is just an alias to the ``ops`` module of the
-*default* spatial database connection.
-
-Users that were relying on undocumented modules and objects
-within ``django.contrib.gis.db.backend``, rather the abstractions
-provided by ``SpatialBackend``, are required to modify their code.
-For example, the following import which would work in 1.1 and
-below::
-
- from django.contrib.gis.db.backend.postgis import PostGISAdaptor
-
-Would need to be changed::
-
- from django.db import connection
- PostGISAdaptor = connection.ops.Adapter
-
-``SpatialRefSys`` and ``GeometryColumns`` models
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-In previous versions of GeoDjango, :mod:`django.contrib.gis.db.models`
-had ``SpatialRefSys`` and ``GeometryColumns`` models for querying
-the OGC spatial metadata tables ``spatial_ref_sys`` and ``geometry_columns``,
-respectively.
-
-While these aliases are still provided, they are only for the
-*default* database connection and exist only if the default connection
-is using a supported spatial database backend.
-
-.. note::
-
- Because the table structure of the OGC spatial metadata tables
- differs across spatial databases, the ``SpatialRefSys`` and
- ``GeometryColumns`` models can no longer be associated with
- the ``gis`` application name. Thus, no models will be returned
- when using the ``get_models`` method in the following example::
-
- >>> from django.db.models import get_app, get_models
- >>> get_models(get_app('gis'))
- []
-
-To get the correct ``SpatialRefSys`` and ``GeometryColumns``
-for your spatial database use the methods provided by the spatial backend::
-
- >>> from django.db import connections
- >>> SpatialRefSys = connections['my_spatialite'].ops.spatial_ref_sys()
- >>> GeometryColumns = connections['my_postgis'].ops.geometry_columns()
-
-.. note::
-
- When using the models returned from the ``spatial_ref_sys()`` and
- ``geometry_columns()`` method, you'll still need to use the
- correct database alias when querying on the non-default connection.
- In other words, to ensure that the models in the example above
- use the correct database::
-
- sr_qs = SpatialRefSys.objects.using('my_spatialite').filter(...)
- gc_qs = GeometryColumns.objects.using('my_postgis').filter(...)
-
-Language code ``no``
---------------------
-
-The currently used language code for Norwegian Bokmål ``no`` is being
-replaced by the more common language code ``nb``.
-
diff --git a/parts/django/docs/releases/index.txt b/parts/django/docs/releases/index.txt
deleted file mode 100644
index 7abaf78..0000000
--- a/parts/django/docs/releases/index.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-=============
-Release notes
-=============
-
-Release notes for the official Django releases. Each release note will tell you
-what's new in each version, and will also describe any backwards-incompatible
-changes made in that version.
-
-For those upgrading to a new version of Django, you will need to check
-all the backwards-incompatible changes and deprecated features for
-each 'final' release from the one after your current Django version,
-up to and including the new version.
-
-Final releases
-==============
-
-1.2 release
------------
-.. toctree::
- :maxdepth: 1
-
- 1.2.4
- 1.2.2
- 1.2
-
-1.1 release
------------
-.. toctree::
- :maxdepth: 1
-
- 1.1.2
- 1.1
-
-1.0 release
------------
-.. toctree::
- :maxdepth: 1
-
- 1.0.2
- 1.0.1
- 1.0
-
-Pre-1.0 releases
-----------------
-.. toctree::
- :maxdepth: 1
-
- 0.96
- 0.95
-
-Development releases
-====================
-
-These notes are retained for historical purposes. If you are upgrading
-between formal Django releases, you don't need to worry about these
-notes.
-
-.. toctree::
- :maxdepth: 1
-
- 1.2-rc-1
- 1.2-beta-1
- 1.2-alpha-1
- 1.1-rc-1
- 1.1-beta-1
- 1.1-alpha-1
- 1.0-beta-2
- 1.0-beta
- 1.0-alpha-2
- 1.0-alpha-1
diff --git a/parts/django/docs/topics/auth.txt b/parts/django/docs/topics/auth.txt
deleted file mode 100644
index a58e523..0000000
--- a/parts/django/docs/topics/auth.txt
+++ /dev/null
@@ -1,1612 +0,0 @@
-=============================
-User authentication in Django
-=============================
-
-.. module:: django.contrib.auth
- :synopsis: Django's authentication framework.
-
-Django comes with a user authentication system. It handles user accounts,
-groups, permissions and cookie-based user sessions. This document explains how
-things work.
-
-Overview
-========
-
-The auth system consists of:
-
- * Users
- * Permissions: Binary (yes/no) flags designating whether a user may perform
- a certain task.
- * Groups: A generic way of applying labels and permissions to more than one
- user.
- * Messages: A simple way to queue messages for given users.
-
-.. deprecated:: 1.2
- The Messages component of the auth system will be removed in Django 1.4.
-
-Installation
-============
-
-Authentication support is bundled as a Django application in
-``django.contrib.auth``. To install it, do the following:
-
- 1. Put ``'django.contrib.auth'`` and ``'django.contrib.contenttypes'`` in
- your :setting:`INSTALLED_APPS` setting.
- (The :class:`~django.contrib.auth.models.Permission` model in
- :mod:`django.contrib.auth` depends on :mod:`django.contrib.contenttypes`.)
- 2. Run the command ``manage.py syncdb``.
-
-Note that the default :file:`settings.py` file created by
-:djadmin:`django-admin.py startproject <startproject>` includes
-``'django.contrib.auth'`` and ``'django.contrib.contenttypes'`` in
-:setting:`INSTALLED_APPS` for convenience. If your :setting:`INSTALLED_APPS`
-already contains these apps, feel free to run :djadmin:`manage.py syncdb
-<syncdb>` again; you can run that command as many times as you'd like, and each
-time it'll only install what's needed.
-
-The :djadmin:`syncdb` command creates the necessary database tables, creates
-permission objects for all installed apps that need 'em, and prompts you to
-create a superuser account the first time you run it.
-
-Once you've taken those steps, that's it.
-
-Users
-=====
-
-.. class:: models.User
-
-API reference
--------------
-
-Fields
-~~~~~~
-
-.. class:: models.User
-
- :class:`~django.contrib.auth.models.User` objects have the following
- fields:
-
- .. attribute:: models.User.username
-
- Required. 30 characters or fewer. Alphanumeric characters only
- (letters, digits and underscores).
-
- .. versionchanged:: 1.2
- Usernames may now contain ``@``, ``+``, ``.`` and ``-`` characters.
-
- .. attribute:: models.User.first_name
-
- Optional. 30 characters or fewer.
-
- .. attribute:: models.User.last_name
-
- Optional. 30 characters or fewer.
-
- .. attribute:: models.User.email
-
- Optional. E-mail address.
-
- .. attribute:: models.User.password
-
- Required. A hash of, and metadata about, the password. (Django doesn't
- store the raw password.) Raw passwords can be arbitrarily long and can
- contain any character. See the "Passwords" section below.
-
- .. attribute:: models.User.is_staff
-
- Boolean. Designates whether this user can access the admin site.
-
- .. attribute:: models.User.is_active
-
- Boolean. Designates whether this user account should be considered
- active. We recommend that you set this flag to ``False`` instead of
- deleting accounts; that way, if your applications have any foreign keys
- to users, the foreign keys won't break.
-
- This doesn't necessarily control whether or not the user can log in.
- Authentication backends aren't required to check for the ``is_active``
- flag, so if you want to reject a login based on ``is_active`` being
- ``False``, it's up to you to check that in your own login view.
- However, the :class:`~django.contrib.auth.forms.AuthenticationForm`
- used by the :func:`~django.contrib.auth.views.login` view *does*
- perform this check, as do the permission-checking methods such as
- :meth:`~models.User.has_perm` and the authentication in the Django
- admin. All of those functions/methods will return ``False`` for
- inactive users.
-
- .. attribute:: models.User.is_superuser
-
- Boolean. Designates that this user has all permissions without
- explicitly assigning them.
-
- .. attribute:: models.User.last_login
-
- A datetime of the user's last login. Is set to the current date/time by
- default.
-
- .. attribute:: models.User.date_joined
-
- A datetime designating when the account was created. Is set to the
- current date/time by default when the account is created.
-
-Methods
-~~~~~~~
-
-.. class:: models.User
-
- :class:`~django.contrib.auth.models.User` objects have two many-to-many
- fields: models.User. ``groups`` and ``user_permissions``.
- :class:`~django.contrib.auth.models.User` objects can access their related
- objects in the same way as any other :doc:`Django model
- </topics/db/models>`:
-
- .. code-block:: python
-
- myuser.groups = [group_list]
- myuser.groups.add(group, group, ...)
- myuser.groups.remove(group, group, ...)
- myuser.groups.clear()
- myuser.user_permissions = [permission_list]
- myuser.user_permissions.add(permission, permission, ...)
- myuser.user_permissions.remove(permission, permission, ...)
- myuser.user_permissions.clear()
-
- In addition to those automatic API methods,
- :class:`~django.contrib.auth.models.User` objects have the following custom
- methods:
-
- .. method:: models.User.is_anonymous()
-
- Always returns ``False``. This is a way of differentiating
- :class:`~django.contrib.auth.models.User` and
- :class:`~django.contrib.auth.models.AnonymousUser` objects.
- Generally, you should prefer using
- :meth:`~django.contrib.auth.models.User.is_authenticated()` to this
- method.
-
- .. method:: models.User.is_authenticated()
-
- Always returns ``True``. This is a way to tell if the user has been
- authenticated. This does not imply any permissions, and doesn't check
- if the user is active - it only indicates that the user has provided a
- valid username and password.
-
- .. method:: models.User.get_full_name()
-
- Returns the :attr:`~django.contrib.auth.models.User.first_name` plus
- the :attr:`~django.contrib.auth.models.User.last_name`, with a space in
- between.
-
- .. method:: models.User.set_password(raw_password)
-
- Sets the user's password to the given raw string, taking care of the
- password hashing. Doesn't save the
- :class:`~django.contrib.auth.models.User` object.
-
- .. method:: models.User.check_password(raw_password)
-
- Returns ``True`` if the given raw string is the correct password for
- the user. (This takes care of the password hashing in making the
- comparison.)
-
- .. method:: models.User.set_unusable_password()
-
- .. versionadded:: 1.0
-
- Marks the user as having no password set. This isn't the same as
- having a blank string for a password.
- :meth:`~django.contrib.auth.models.User.check_password()` for this user
- will never return ``True``. Doesn't save the
- :class:`~django.contrib.auth.models.User` object.
-
- You may need this if authentication for your application takes place
- against an existing external source such as an LDAP directory.
-
- .. method:: models.User.has_usable_password()
-
- .. versionadded:: 1.0
-
- Returns ``False`` if
- :meth:`~django.contrib.auth.models.User.set_unusable_password()` has
- been called for this user.
-
- .. method:: models.User.get_group_permissions(obj=None)
-
- Returns a set of permission strings that the user has, through his/her
- groups.
-
- .. versionadded:: 1.2
-
- If ``obj`` is passed in, only returns the group permissions for
- this specific object.
-
- .. method:: models.User.get_all_permissions(obj=None)
-
- Returns a set of permission strings that the user has, both through
- group and user permissions.
-
- .. versionadded:: 1.2
-
- If ``obj`` is passed in, only returns the permissions for this
- specific object.
-
- .. method:: models.User.has_perm(perm, obj=None)
-
- Returns ``True`` if the user has the specified permission, where perm is
- in the format ``"<app label>.<permission codename>"``. (see
- `permissions`_ section below). If the user is inactive, this method will
- always return ``False``.
-
- .. versionadded:: 1.2
-
- If ``obj`` is passed in, this method won't check for a permission for
- the model, but for this specific object.
-
- .. method:: models.User.has_perms(perm_list, obj=None)
-
- Returns ``True`` if the user has each of the specified permissions,
- where each perm is in the format
- ``"<app label>.<permission codename>"``. If the user is inactive,
- this method will always return ``False``.
-
- .. versionadded:: 1.2
-
- If ``obj`` is passed in, this method won't check for permissions for
- the model, but for the specific object.
-
- .. method:: models.User.has_module_perms(package_name)
-
- Returns ``True`` if the user has any permissions in the given package
- (the Django app label). If the user is inactive, this method will
- always return ``False``.
-
- .. method:: models.User.get_and_delete_messages()
-
- Returns a list of :class:`~django.contrib.auth.models.Message` objects
- in the user's queue and deletes the messages from the queue.
-
- .. method:: models.User.email_user(subject, message, from_email=None)
-
- Sends an e-mail to the user. If
- :attr:`~django.contrib.auth.models.User.from_email` is ``None``, Django
- uses the :setting:`DEFAULT_FROM_EMAIL`.
-
- .. method:: models.User.get_profile()
-
- Returns a site-specific profile for this user. Raises
- :exc:`django.contrib.auth.models.SiteProfileNotAvailable` if the
- current site doesn't allow profiles. For information on how to define a
- site-specific user profile, see the section on `storing additional user
- information`_ below.
-
-.. _storing additional user information: #storing-additional-information-about-users
-
-Manager functions
-~~~~~~~~~~~~~~~~~
-
-.. class:: models.UserManager
-
- The :class:`~django.contrib.auth.models.User` model has a custom manager
- that has the following helper functions:
-
- .. method:: models.UserManager.create_user(username, email, password=None)
-
- Creates, saves and returns a :class:`~django.contrib.auth.models.User`.
-
- The :attr:`~django.contrib.auth.models.User.username` and
- :attr:`~django.contrib.auth.models.User.password` are set as given. The
- domain portion of :attr:`~django.contrib.auth.models.User.email` is
- automatically convered to lowercase, and the returned
- :class:`~django.contrib.auth.models.User` object will have
- :attr:`~models.User.is_active` set to ``True``.
-
- If no password is provided,
- :meth:`~django.contrib.auth.models.User.set_unusable_password()` will
- be called.
-
- See `Creating users`_ for example usage.
-
- .. method:: models.UserManager.make_random_password(length=10, allowed_chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789')
-
- Returns a random password with the given length and given string of
- allowed characters. (Note that the default value of ``allowed_chars``
- doesn't contain letters that can cause user confusion, including:
-
- * ``i``, ``l``, ``I``, and ``1`` (lowercase letter i, lowercase
- letter L, uppercase letter i, and the number one)
- * ``o``, ``O``, and ``0`` (uppercase letter o, lowercase letter o,
- and zero)
-
-Basic usage
------------
-
-.. _topics-auth-creating-users:
-
-Creating users
-~~~~~~~~~~~~~~
-
-The most basic way to create users is to use the
-:meth:`~django.contrib.auth.models.UserManager.create_user` helper function
-that comes with Django::
-
- >>> from django.contrib.auth.models import User
- >>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
-
- # At this point, user is a User object that has already been saved
- # to the database. You can continue to change its attributes
- # if you want to change other fields.
- >>> user.is_staff = True
- >>> user.save()
-
-You can also create users using the Django admin site. Assuming you've enabled
-the admin site and hooked it to the URL ``/admin/``, the "Add user" page is at
-``/admin/auth/user/add/``. You should also see a link to "Users" in the "Auth"
-section of the main admin index page. The "Add user" admin page is different
-than standard admin pages in that it requires you to choose a username and
-password before allowing you to edit the rest of the user's fields.
-
-Also note: if you want your own user account to be able to create users using
-the Django admin site, you'll need to give yourself permission to add users
-*and* change users (i.e., the "Add user" and "Change user" permissions). If
-your account has permission to add users but not to change them, you won't be
-able to add users. Why? Because if you have permission to add users, you have
-the power to create superusers, which can then, in turn, change other users. So
-Django requires add *and* change permissions as a slight security measure.
-
-Changing passwords
-~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2
- The ``manage.py changepassword`` command was added.
-
-:djadmin:`manage.py changepassword *username* <changepassword>` offers a method
-of changing a User's password from the command line. It prompts you to
-change the password of a given user which you must enter twice. If
-they both match, the new password will be changed immediately. If you
-do not supply a user, the command will attempt to change the password
-whose username matches the current user.
-
-You can also change a password programmatically, using
-:meth:`~django.contrib.auth.models.User.set_password()`:
-
-.. code-block:: python
-
- >>> from django.contrib.auth.models import User
- >>> u = User.objects.get(username__exact='john')
- >>> u.set_password('new password')
- >>> u.save()
-
-Don't set the :attr:`~django.contrib.auth.models.User.password` attribute
-directly unless you know what you're doing. This is explained in the next
-section.
-
-Passwords
----------
-
-The :attr:`~django.contrib.auth.models.User.password` attribute of a
-:class:`~django.contrib.auth.models.User` object is a string in this format::
-
- hashtype$salt$hash
-
-That's hashtype, salt and hash, separated by the dollar-sign character.
-
-Hashtype is either ``sha1`` (default), ``md5`` or ``crypt`` -- the algorithm
-used to perform a one-way hash of the password. Salt is a random string used
-to salt the raw password to create the hash. Note that the ``crypt`` method is
-only supported on platforms that have the standard Python ``crypt`` module
-available.
-
-.. versionadded:: 1.0
- Support for the ``crypt`` module is new in Django 1.0.
-
-For example::
-
- sha1$a1976$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4
-
-The :meth:`~django.contrib.auth.models.User.set_password` and
-:meth:`~django.contrib.auth.models.User.check_password` functions handle the
-setting and checking of these values behind the scenes.
-
-Previous Django versions, such as 0.90, used simple MD5 hashes without password
-salts. For backwards compatibility, those are still supported; they'll be
-converted automatically to the new style the first time
-:meth:`~django.contrib.auth.models.User.check_password()` works correctly for
-a given user.
-
-Anonymous users
----------------
-
-.. class:: models.AnonymousUser
-
- :class:`django.contrib.auth.models.AnonymousUser` is a class that
- implements the :class:`django.contrib.auth.models.User` interface, with
- these differences:
-
- * :attr:`~django.contrib.auth.models.User.id` is always ``None``.
- * :attr:`~django.contrib.auth.models.User.is_staff` and
- :attr:`~django.contrib.auth.models.User.is_superuser` are always
- ``False``.
- * :attr:`~django.contrib.auth.models.User.is_active` is always ``False``.
- * :attr:`~django.contrib.auth.models.User.groups` and
- :attr:`~django.contrib.auth.models.User.user_permissions` are always
- empty.
- * :meth:`~django.contrib.auth.models.User.is_anonymous()` returns ``True``
- instead of ``False``.
- * :meth:`~django.contrib.auth.models.User.is_authenticated()` returns
- ``False`` instead of ``True``.
- * :meth:`~django.contrib.auth.models.User.set_password()`,
- :meth:`~django.contrib.auth.models.User.check_password()`,
- :meth:`~django.contrib.auth.models.User.save()`,
- :meth:`~django.contrib.auth.models.User.delete()`,
- :meth:`~django.contrib.auth.models.User.set_groups()` and
- :meth:`~django.contrib.auth.models.User.set_permissions()` raise
- :exc:`NotImplementedError`.
-
-In practice, you probably won't need to use
-:class:`~django.contrib.auth.models.AnonymousUser` objects on your own, but
-they're used by Web requests, as explained in the next section.
-
-.. _topics-auth-creating-superusers:
-
-Creating superusers
--------------------
-
-.. versionadded:: 1.0
- The ``manage.py createsuperuser`` command is new.
-
-:djadmin:`manage.py syncdb <syncdb>` prompts you to create a superuser the
-first time you run it after adding ``'django.contrib.auth'`` to your
-:setting:`INSTALLED_APPS`. If you need to create a superuser at a later date,
-you can use a command line utility::
-
- manage.py createsuperuser --username=joe --email=joe@example.com
-
-You will be prompted for a password. After you enter one, the user will be
-created immediately. If you leave off the :djadminopt:`--username` or the
-:djadminopt:`--email` options, it will prompt you for those values.
-
-If you're using an older release of Django, the old way of creating a superuser
-on the command line still works::
-
- python /path/to/django/contrib/auth/create_superuser.py
-
-...where :file:`/path/to` is the path to the Django codebase on your
-filesystem. The ``manage.py`` command is preferred because it figures out the
-correct path and environment for you.
-
-.. _auth-profiles:
-
-Storing additional information about users
-------------------------------------------
-
-If you'd like to store additional information related to your users, Django
-provides a method to specify a site-specific related model -- termed a "user
-profile" -- for this purpose.
-
-To make use of this feature, define a model with fields for the
-additional information you'd like to store, or additional methods
-you'd like to have available, and also add a
-:class:`~django.db.models.Field.OneToOneField` from your model to the
-:class:`~django.contrib.auth.models.User` model. This will ensure only
-one instance of your model can be created for each
-:class:`~django.contrib.auth.models.User`.
-
-To indicate that this model is the user profile model for a given site, fill in
-the setting :setting:`AUTH_PROFILE_MODULE` with a string consisting of the
-following items, separated by a dot:
-
-1. The name of the application (case sensitive) in which the user
- profile model is defined (in other words, the
- name which was passed to :djadmin:`manage.py startapp <startapp>` to create
- the application).
-
-2. The name of the model (not case sensitive) class.
-
-For example, if the profile model was a class named ``UserProfile`` and was
-defined inside an application named ``accounts``, the appropriate setting would
-be::
-
- AUTH_PROFILE_MODULE = 'accounts.UserProfile'
-
-When a user profile model has been defined and specified in this manner, each
-:class:`~django.contrib.auth.models.User` object will have a method --
-:class:`~django.contrib.auth.models.User.get_profile()` -- which returns the
-instance of the user profile model associated with that
-:class:`~django.contrib.auth.models.User`.
-
-The method :class:`~django.contrib.auth.models.User.get_profile()`
-does not create the profile, if it does not exist. You need to
-register a handler for the signal
-:attr:`django.db.models.signals.post_save` on the User model, and, in
-the handler, if created=True, create the associated user profile.
-
-For more information, see `Chapter 12 of the Django book`_.
-
-.. _Chapter 12 of the Django book: http://www.djangobook.com/en/1.0/chapter12/#cn222
-
-Authentication in Web requests
-==============================
-
-Until now, this document has dealt with the low-level APIs for manipulating
-authentication-related objects. On a higher level, Django can hook this
-authentication framework into its system of
-:class:`request objects <django.http.HttpRequest>`.
-
-First, install the
-:class:`~django.contrib.sessions.middleware.SessionMiddleware` and
-:class:`~django.contrib.auth.middleware.AuthenticationMiddleware`
-middlewares by adding them to your :setting:`MIDDLEWARE_CLASSES` setting. See
-the :doc:`session documentation </topics/http/sessions>` for more information.
-
-Once you have those middlewares installed, you'll be able to access
-:attr:`request.user <django.http.HttpRequest.user>` in views.
-:attr:`request.user <django.http.HttpRequest.user>` will give you a
-:class:`~django.contrib.auth.models.User` object representing the currently
-logged-in user. If a user isn't currently logged in,
-:attr:`request.user <django.http.HttpRequest.user>` will be set to an instance
-of :class:`~django.contrib.auth.models.AnonymousUser` (see the previous
-section). You can tell them apart with
-:meth:`~django.contrib.auth.models.User.is_authenticated()`, like so::
-
- if request.user.is_authenticated():
- # Do something for authenticated users.
- else:
- # Do something for anonymous users.
-
-.. _how-to-log-a-user-in:
-
-How to log a user in
---------------------
-
-Django provides two functions in :mod:`django.contrib.auth`:
-:func:`~django.contrib.auth.authenticate()` and
-:func:`~django.contrib.auth.login()`.
-
-.. function:: authenticate()
-
- To authenticate a given username and password, use
- :func:`~django.contrib.auth.authenticate()`. It takes two keyword
- arguments, ``username`` and ``password``, and it returns a
- :class:`~django.contrib.auth.models.User` object if the password is valid
- for the given username. If the password is invalid,
- :func:`~django.contrib.auth.authenticate()` returns ``None``. Example::
-
- from django.contrib.auth import authenticate
- user = authenticate(username='john', password='secret')
- if user is not None:
- if user.is_active:
- print "You provided a correct username and password!"
- else:
- print "Your account has been disabled!"
- else:
- print "Your username and password were incorrect."
-
-.. function:: login()
-
- To log a user in, in a view, use :func:`~django.contrib.auth.login()`. It
- takes an :class:`~django.http.HttpRequest` object and a
- :class:`~django.contrib.auth.models.User` object.
- :func:`~django.contrib.auth.login()` saves the user's ID in the session,
- using Django's session framework, so, as mentioned above, you'll need to
- make sure to have the session middleware installed.
-
- This example shows how you might use both
- :func:`~django.contrib.auth.authenticate()` and
- :func:`~django.contrib.auth.login()`::
-
- from django.contrib.auth import authenticate, login
-
- def my_view(request):
- username = request.POST['username']
- password = request.POST['password']
- user = authenticate(username=username, password=password)
- if user is not None:
- if user.is_active:
- login(request, user)
- # Redirect to a success page.
- else:
- # Return a 'disabled account' error message
- else:
- # Return an 'invalid login' error message.
-
-.. admonition:: Calling ``authenticate()`` first
-
- When you're manually logging a user in, you *must* call
- :func:`~django.contrib.auth.authenticate()` before you call
- :func:`~django.contrib.auth.login()`.
- :func:`~django.contrib.auth.authenticate()`
- sets an attribute on the :class:`~django.contrib.auth.models.User` noting
- which authentication backend successfully authenticated that user (see the
- `backends documentation`_ for details), and this information is needed
- later during the login process.
-
-.. _backends documentation: #other-authentication-sources
-
-Manually checking a user's password
------------------------------------
-
-.. function:: check_password()
-
- If you'd like to manually authenticate a user by comparing a plain-text
- password to the hashed password in the database, use the convenience
- function :func:`django.contrib.auth.models.check_password`. It takes two
- arguments: the plain-text password to check, and the full value of a user's
- ``password`` field in the database to check against, and returns ``True``
- if they match, ``False`` otherwise.
-
-How to log a user out
----------------------
-
-.. function:: logout()
-
- To log out a user who has been logged in via
- :func:`django.contrib.auth.login()`, use
- :func:`django.contrib.auth.logout()` within your view. It takes an
- :class:`~django.http.HttpRequest` object and has no return value.
- Example::
-
- from django.contrib.auth import logout
-
- def logout_view(request):
- logout(request)
- # Redirect to a success page.
-
- Note that :func:`~django.contrib.auth.logout()` doesn't throw any errors if
- the user wasn't logged in.
-
- .. versionchanged:: 1.0
- Calling ``logout()`` now cleans session data.
-
- When you call :func:`~django.contrib.auth.logout()`, the session data for
- the current request is completely cleaned out. All existing data is
- removed. This is to prevent another person from using the same Web browser
- to log in and have access to the previous user's session data. If you want
- to put anything into the session that will be available to the user
- immediately after logging out, do that *after* calling
- :func:`django.contrib.auth.logout()`.
-
-Limiting access to logged-in users
-----------------------------------
-
-The raw way
-~~~~~~~~~~~
-
-The simple, raw way to limit access to pages is to check
-:meth:`request.user.is_authenticated()
-<django.contrib.auth.models.User.is_authenticated()>` and either redirect to a
-login page::
-
- from django.http import HttpResponseRedirect
-
- def my_view(request):
- if not request.user.is_authenticated():
- return HttpResponseRedirect('/login/?next=%s' % request.path)
- # ...
-
-...or display an error message::
-
- def my_view(request):
- if not request.user.is_authenticated():
- return render_to_response('myapp/login_error.html')
- # ...
-
-The login_required decorator
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. function:: decorators.login_required([redirect_field_name=REDIRECT_FIELD_NAME])
-
- As a shortcut, you can use the convenient
- :func:`~django.contrib.auth.decorators.login_required` decorator::
-
- from django.contrib.auth.decorators import login_required
-
- @login_required
- def my_view(request):
- ...
-
- :func:`~django.contrib.auth.decorators.login_required` does the following:
-
- * If the user isn't logged in, redirect to
- :setting:`settings.LOGIN_URL <LOGIN_URL>`, passing the current absolute
- path in the query string. Example: ``/accounts/login/?next=/polls/3/``.
-
- * If the user is logged in, execute the view normally. The view code is
- free to assume the user is logged in.
-
- By default, the path that the user should be redirected to upon
- successful authentication is stored in a query string parameter called
- ``"next"``. If you would prefer to use a different name for this parameter,
- :func:`~django.contrib.auth.decorators.login_required` takes an
- optional ``redirect_field_name`` parameter::
-
- from django.contrib.auth.decorators import login_required
-
- @login_required(redirect_field_name='my_redirect_field')
- def my_view(request):
- ...
-
- If you provide a value to ``redirect_field_name``, you will most
- likely need to customize your login template as well, since the template
- context variable which stores the redirect path will use the value of
- ``redirect_field_name`` as it's key rather than ``"next"`` (the default).
-
- Note that you'll need to map the appropriate Django view to
- :setting:`settings.LOGIN_URL <LOGIN_URL>`. For example, using the defaults,
- add the following line to your URLconf::
-
- (r'^accounts/login/$', 'django.contrib.auth.views.login'),
-
-.. function:: views.login(request, [template_name, redirect_field_name, authentication_form])
-
- Here's what ``django.contrib.auth.views.login`` does:
-
- * If called via ``GET``, it displays a login form that POSTs to the
- same URL. More on this in a bit.
-
- * If called via ``POST``, it tries to log the user in. If login is
- successful, the view redirects to the URL specified in ``next``. If
- ``next`` isn't provided, it redirects to
- :setting:`settings.LOGIN_REDIRECT_URL <LOGIN_REDIRECT_URL>` (which
- defaults to ``/accounts/profile/``). If login isn't successful, it
- redisplays the login form.
-
- It's your responsibility to provide the login form in a template called
- ``registration/login.html`` by default. This template gets passed four
- template context variables:
-
- * ``form``: A :class:`~django.forms.Form` object representing the login
- form. See the :doc:`forms documentation </topics/forms/index>` for
- more on ``Form`` objects.
-
- * ``next``: The URL to redirect to after successful login. This may
- contain a query string, too.
-
- * ``site``: The current :class:`~django.contrib.sites.models.Site`,
- according to the :setting:`SITE_ID` setting. If you don't have the
- site framework installed, this will be set to an instance of
- :class:`~django.contrib.sites.models.RequestSite`, which derives the
- site name and domain from the current
- :class:`~django.http.HttpRequest`.
-
- * ``site_name``: An alias for ``site.name``. If you don't have the site
- framework installed, this will be set to the value of
- :attr:`request.META['SERVER_NAME'] <django.http.HttpRequest.META>`.
- For more on sites, see :doc:`/ref/contrib/sites`.
-
- If you'd prefer not to call the template :file:`registration/login.html`,
- you can pass the ``template_name`` parameter via the extra arguments to
- the view in your URLconf. For example, this URLconf line would use
- :file:`myapp/login.html` instead::
-
- (r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html'}),
-
- You can also specify the name of the ``GET`` field which contains the URL
- to redirect to after login by passing ``redirect_field_name`` to the view.
- By default, the field is called ``next``.
-
- Here's a sample :file:`registration/login.html` template you can use as a
- starting point. It assumes you have a :file:`base.html` template that
- defines a ``content`` block:
-
- .. code-block:: html+django
-
- {% extends "base.html" %}
-
- {% block content %}
-
- {% if form.errors %}
- <p>Your username and password didn't match. Please try again.</p>
- {% endif %}
-
- <form method="post" action="{% url django.contrib.auth.views.login %}">
- {% csrf_token %}
- <table>
- <tr>
- <td>{{ form.username.label_tag }}</td>
- <td>{{ form.username }}</td>
- </tr>
- <tr>
- <td>{{ form.password.label_tag }}</td>
- <td>{{ form.password }}</td>
- </tr>
- </table>
-
- <input type="submit" value="login" />
- <input type="hidden" name="next" value="{{ next }}" />
- </form>
-
- {% endblock %}
-
- .. versionadded:: 1.2
-
- If you are using alternate authentication (see
- :ref:`authentication-backends`) you can pass a custom authentication form
- to the login view via the ``authentication_form`` parameter. This form must
- accept a ``request`` keyword argument in its ``__init__`` method, and
- provide a ``get_user`` method which returns the authenticated user object
- (this method is only ever called after successful form validation).
-
- .. _forms documentation: ../forms/
- .. _site framework docs: ../sites/
-
-Other built-in views
---------------------
-
-In addition to the :func:`~views.login` view, the authentication system
-includes a few other useful built-in views located in
-:mod:`django.contrib.auth.views`:
-
-.. function:: views.logout(request, [next_page, template_name, redirect_field_name])
-
- Logs a user out.
-
- **Optional arguments:**
-
- * ``next_page``: The URL to redirect to after logout.
-
- * ``template_name``: The full name of a template to display after
- logging the user out. This will default to
- :file:`registration/logged_out.html` if no argument is supplied.
-
- * ``redirect_field_name``: The name of a ``GET`` field containing the
- URL to redirect to after log out. Overrides ``next_page`` if the given
- ``GET`` parameter is passed.
-
- **Template context:**
-
- * ``title``: The string "Logged out", localized.
-
-.. function:: views.logout_then_login(request[, login_url])
-
- Logs a user out, then redirects to the login page.
-
- **Optional arguments:**
-
- * ``login_url``: The URL of the login page to redirect to. This will
- default to :setting:`settings.LOGIN_URL <LOGIN_URL>` if not supplied.
-
-.. function:: views.password_change(request[, template_name, post_change_redirect, password_change_form])
-
- Allows a user to change their password.
-
- **Optional arguments:**
-
- * ``template_name``: The full name of a template to use for
- displaying the password change form. This will default to
- :file:`registration/password_change_form.html` if not supplied.
-
- * ``post_change_redirect``: The URL to redirect to after a successful
- password change.
-
- * .. versionadded:: 1.2
-
- ``password_change_form``: A custom "change password" form which must
- accept a ``user`` keyword argument. The form is responsible for
- actually changing the user's password.
-
-
- **Template context:**
-
- * ``form``: The password change form.
-
-.. function:: views.password_change_done(request[, template_name])
-
- The page shown after a user has changed their password.
-
- **Optional arguments:**
-
- * ``template_name``: The full name of a template to use. This will
- default to :file:`registration/password_change_done.html` if not
- supplied.
-
-.. function:: views.password_reset(request[, is_admin_site, template_name, email_template_name, password_reset_form, token_generator, post_reset_redirect])
-
- Allows a user to reset their password by generating a one-time use link
- that can be used to reset the password, and sending that link to the
- user's registered e-mail address.
-
- **Optional arguments:**
-
- * ``template_name``: The full name of a template to use for
- displaying the password reset form. This will default to
- :file:`registration/password_reset_form.html` if not supplied.
-
- * ``email_template_name``: The full name of a template to use for
- generating the e-mail with the new password. This will default to
- :file:`registration/password_reset_email.html` if not supplied.
-
- * ``password_reset_form``: Form that will be used to set the password.
- Defaults to :class:`~django.contrib.auth.forms.PasswordResetForm`.
-
- * ``token_generator``: Instance of the class to check the password. This
- will default to ``default_token_generator``, it's an instance of
- ``django.contrib.auth.tokens.PasswordResetTokenGenerator``.
-
- * ``post_reset_redirect``: The URL to redirect to after a successful
- password change.
-
- **Template context:**
-
- * ``form``: The form for resetting the user's password.
-
-.. function:: views.password_reset_done(request[, template_name])
-
- The page shown after a user has reset their password.
-
- **Optional arguments:**
-
- * ``template_name``: The full name of a template to use. This will
- default to :file:`registration/password_reset_done.html` if not
- supplied.
-
-.. function:: views.redirect_to_login(next[, login_url, redirect_field_name])
-
- Redirects to the login page, and then back to another URL after a
- successful login.
-
- **Required arguments:**
-
- * ``next``: The URL to redirect to after a successful login.
-
- **Optional arguments:**
-
- * ``login_url``: The URL of the login page to redirect to. This will
- default to :setting:`settings.LOGIN_URL <LOGIN_URL>` if not supplied.
-
- * ``redirect_field_name``: The name of a ``GET`` field containing the
- URL to redirect to after log out. Overrides ``next`` if the given
- ``GET`` parameter is passed.
-
-.. function:: password_reset_confirm(request[, uidb36, token, template_name, token_generator, set_password_form, post_reset_redirect])
-
- Presents a form for entering a new password.
-
- **Optional arguments:**
-
- * ``uidb36``: The user's id encoded in base 36. This will default to
- ``None``.
- * ``token``: Token to check that the password is valid. This will default to ``None``.
- * ``template_name``: The full name of a template to display the confirm
- password view. Default value is :file:`registration/password_reset_confirm.html`.
- * ``token_generator``: Instance of the class to check the password. This
- will default to ``default_token_generator``, it's an instance of
- ``django.contrib.auth.tokens.PasswordResetTokenGenerator``.
- * ``set_password_form``: Form that will be used to set the password.
- This will default to ``SetPasswordForm``.
- * ``post_reset_redirect``: URL to redirect after the password reset
- done. This will default to ``None``.
-
-.. function:: password_reset_complete(request[,template_name])
-
- Presents a view which informs the user that the password has been
- successfully changed.
-
- **Optional arguments:**
-
- * ``template_name``: The full name of a template to display the view.
- This will default to :file:`registration/password_reset_complete.html`.
-
-Built-in forms
---------------
-
-.. module:: django.contrib.auth.forms
-
-If you don't want to use the built-in views, but want the convenience of not
-having to write forms for this functionality, the authentication system
-provides several built-in forms located in :mod:`django.contrib.auth.forms`:
-
-.. class:: AdminPasswordChangeForm
-
- A form used in the admin interface to change a user's password.
-
-.. class:: AuthenticationForm
-
- A form for logging a user in.
-
-.. class:: PasswordChangeForm
-
- A form for allowing a user to change their password.
-
-.. class:: PasswordResetForm
-
- A form for generating and e-mailing a one-time use link to reset a
- user's password.
-
-.. class:: SetPasswordForm
-
- A form that lets a user change his/her password without entering the old
- password.
-
-.. class:: UserChangeForm
-
- A form used in the admin interface to change a user's information and
- permissions.
-
-.. class:: UserCreationForm
-
- A form for creating a new user.
-
-Limiting access to logged-in users that pass a test
----------------------------------------------------
-
-.. currentmodule:: django.contrib.auth
-
-To limit access based on certain permissions or some other test, you'd do
-essentially the same thing as described in the previous section.
-
-The simple way is to run your test on :attr:`request.user
-<django.http.HttpRequest.user>` in the view directly. For example, this view
-checks to make sure the user is logged in and has the permission
-``polls.can_vote``::
-
- def my_view(request):
- if not request.user.has_perm('polls.can_vote'):
- return HttpResponse("You can't vote in this poll.")
- # ...
-
-.. function:: decorators.user_passes_test()
-
- As a shortcut, you can use the convenient ``user_passes_test`` decorator::
-
- from django.contrib.auth.decorators import user_passes_test
-
- @user_passes_test(lambda u: u.has_perm('polls.can_vote'))
- def my_view(request):
- ...
-
- We're using this particular test as a relatively simple example. However,
- if you just want to test whether a permission is available to a user, you
- can use the :func:`~django.contrib.auth.decorators.permission_required()`
- decorator, described later in this document.
-
- :func:`~django.contrib.auth.decorators.user_passes_test` takes a required
- argument: a callable that takes a
- :class:`~django.contrib.auth.models.User` object and returns ``True`` if
- the user is allowed to view the page. Note that
- :func:`~django.contrib.auth.decorators.user_passes_test` does not
- automatically check that the :class:`~django.contrib.auth.models.User` is
- not anonymous.
-
- :func:`~django.contrib.auth.decorators.user_passes_test()` takes an
- optional ``login_url`` argument, which lets you specify the URL for your
- login page (:setting:`settings.LOGIN_URL <LOGIN_URL>` by default).
-
- For example::
-
- from django.contrib.auth.decorators import user_passes_test
-
- @user_passes_test(lambda u: u.has_perm('polls.can_vote'), login_url='/login/')
- def my_view(request):
- ...
-
-The permission_required decorator
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. function:: decorators.permission_required()
-
- It's a relatively common task to check whether a user has a particular
- permission. For that reason, Django provides a shortcut for that case: the
- :func:`~django.contrib.auth.decorators.permission_required()` decorator.
- Using this decorator, the earlier example can be written as::
-
- from django.contrib.auth.decorators import permission_required
-
- @permission_required('polls.can_vote')
- def my_view(request):
- ...
-
- As for the :meth:`User.has_perm` method, permission names take the form
- ``"<app label>.<permission codename>"`` (i.e. ``polls.can_vote`` for a
- permission on a model in the ``polls`` application).
-
- Note that :func:`~django.contrib.auth.decorators.permission_required()`
- also takes an optional ``login_url`` parameter. Example::
-
- from django.contrib.auth.decorators import permission_required
-
- @permission_required('polls.can_vote', login_url='/loginpage/')
- def my_view(request):
- ...
-
- As in the :func:`~decorators.login_required` decorator, ``login_url``
- defaults to :setting:`settings.LOGIN_URL <LOGIN_URL>`.
-
-Limiting access to generic views
---------------------------------
-
-To limit access to a :doc:`generic view </ref/generic-views>`, write a thin
-wrapper around the view, and point your URLconf to your wrapper instead of the
-generic view itself. For example::
-
- from django.views.generic.date_based import object_detail
-
- @login_required
- def limited_object_detail(*args, **kwargs):
- return object_detail(*args, **kwargs)
-
-.. _permissions:
-
-Permissions
-===========
-
-Django comes with a simple permissions system. It provides a way to assign
-permissions to specific users and groups of users.
-
-It's used by the Django admin site, but you're welcome to use it in your own
-code.
-
-The Django admin site uses permissions as follows:
-
- * Access to view the "add" form and add an object is limited to users with
- the "add" permission for that type of object.
- * Access to view the change list, view the "change" form and change an
- object is limited to users with the "change" permission for that type of
- object.
- * Access to delete an object is limited to users with the "delete"
- permission for that type of object.
-
-Permissions are set globally per type of object, not per specific object
-instance. For example, it's possible to say "Mary may change news stories," but
-it's not currently possible to say "Mary may change news stories, but only the
-ones she created herself" or "Mary may only change news stories that have a
-certain status, publication date or ID." The latter functionality is something
-Django developers are currently discussing.
-
-Default permissions
--------------------
-
-When ``django.contrib.auth`` is listed in your :setting:`INSTALLED_APPS`
-setting, it will ensure that three default permissions -- add, change and
-delete -- are created for each Django model defined in one of your installed
-applications.
-
-These permissions will be created when you run :djadmin:`manage.py syncdb
-<syncdb>`; the first time you run ``syncdb`` after adding
-``django.contrib.auth`` to :setting:`INSTALLED_APPS`, the default permissions
-will be created for all previously-installed models, as well as for any new
-models being installed at that time. Afterward, it will create default
-permissions for new models each time you run :djadmin:`manage.py syncdb
-<syncdb>`.
-
-Assuming you have an application with an
-:attr:`~django.db.models.Options.app_label` ``foo`` and a model named ``Bar``,
-to test for basic permissions you should use:
-
- * add: ``user.has_perm('foo.add_bar')``
- * change: ``user.has_perm('foo.change_bar')``
- * delete: ``user.has_perm('foo.delete_bar')``
-
-.. _custom-permissions:
-
-Custom permissions
-------------------
-
-To create custom permissions for a given model object, use the ``permissions``
-:ref:`model Meta attribute <meta-options>`.
-
-This example Task model creates three custom permissions, i.e., actions users
-can or cannot do with Task instances, specific to your appication::
-
- class Task(models.Model):
- ...
- class Meta:
- permissions = (
- ("can_view", "Can see available tasks"),
- ("can_change_status", "Can change the status of tasks"),
- ("can_close", "Can remove a task by setting its status as closed"),
- )
-
-The only thing this does is create those extra permissions when you run
-:djadmin:`manage.py syncdb <syncdb>`. Your code is in charge of checking the
-value of these permissions when an user is trying to access the functionality
-provided by the application (viewing tasks, changing the status of tasks,
-closing tasks.)
-
-API reference
--------------
-
-.. class:: models.Permission
-
- Just like users, permissions are implemented in a Django model that lives
- in `django/contrib/auth/models.py`_.
-
-.. _django/contrib/auth/models.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/models.py
-
-Fields
-~~~~~~
-
-:class:`~django.contrib.auth.models.Permission` objects have the following
-fields:
-
-.. attribute:: models.Permission.name
-
- Required. 50 characters or fewer. Example: ``'Can vote'``.
-
-.. attribute:: models.Permission.content_type
-
- Required. A reference to the ``django_content_type`` database table, which
- contains a record for each installed Django model.
-
-.. attribute:: models.Permission.codename
-
- Required. 100 characters or fewer. Example: ``'can_vote'``.
-
-Methods
-~~~~~~~
-
-:class:`~django.contrib.auth.models.Permission` objects have the standard
-data-access methods like any other :doc:`Django model </ref/models/instances>`.
-
-Authentication data in templates
-================================
-
-The currently logged-in user and his/her permissions are made available in the
-:doc:`template context </ref/templates/api>` when you use
-:class:`~django.template.context.RequestContext`.
-
-.. admonition:: Technicality
-
- Technically, these variables are only made available in the template context
- if you use :class:`~django.template.context.RequestContext` *and* your
- :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting contains
- ``"django.contrib.auth.context_processors.auth"``, which is default. For
- more, see the :ref:`RequestContext docs <subclassing-context-requestcontext>`.
-
-Users
------
-
-When rendering a template :class:`~django.template.context.RequestContext`, the
-currently logged-in user, either a :class:`~django.contrib.auth.models.User`
-instance or an :class:`~django.contrib.auth.models.AnonymousUser` instance, is
-stored in the template variable ``{{ user }}``:
-
-.. code-block:: html+django
-
- {% if user.is_authenticated %}
- <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
- {% else %}
- <p>Welcome, new user. Please log in.</p>
- {% endif %}
-
-This template context variable is not available if a ``RequestContext`` is not
-being used.
-
-Permissions
------------
-
-The currently logged-in user's permissions are stored in the template variable
-``{{ perms }}``. This is an instance of
-:class:`django.core.context_processors.PermWrapper`, which is a
-template-friendly proxy of permissions.
-
-In the ``{{ perms }}`` object, single-attribute lookup is a proxy to
-:meth:`User.has_module_perms <django.contrib.auth.models.User.has_module_perms>`.
-This example would display ``True`` if the logged-in user had any permissions
-in the ``foo`` app::
-
- {{ perms.foo }}
-
-Two-level-attribute lookup is a proxy to
-:meth:`User.has_perm <django.contrib.auth.models.User.has_perm>`. This example
-would display ``True`` if the logged-in user had the permission
-``foo.can_vote``::
-
- {{ perms.foo.can_vote }}
-
-Thus, you can check permissions in template ``{% if %}`` statements:
-
-.. code-block:: html+django
-
- {% if perms.foo %}
- <p>You have permission to do something in the foo app.</p>
- {% if perms.foo.can_vote %}
- <p>You can vote!</p>
- {% endif %}
- {% if perms.foo.can_drive %}
- <p>You can drive!</p>
- {% endif %}
- {% else %}
- <p>You don't have permission to do anything in the foo app.</p>
- {% endif %}
-
-Groups
-======
-
-Groups are a generic way of categorizing users so you can apply permissions, or
-some other label, to those users. A user can belong to any number of groups.
-
-A user in a group automatically has the permissions granted to that group. For
-example, if the group ``Site editors`` has the permission
-``can_edit_home_page``, any user in that group will have that permission.
-
-Beyond permissions, groups are a convenient way to categorize users to give
-them some label, or extended functionality. For example, you could create a
-group ``'Special users'``, and you could write code that could, say, give them
-access to a members-only portion of your site, or send them members-only e-mail
-messages.
-
-Messages
-========
-
-.. deprecated:: 1.2
- This functionality will be removed in Django 1.4. You should use the
- :doc:`messages framework </ref/contrib/messages>` for all new projects and
- begin to update your existing code immediately.
-
-The message system is a lightweight way to queue messages for given users.
-
-A message is associated with a :class:`~django.contrib.auth.models.User`.
-There's no concept of expiration or timestamps.
-
-Messages are used by the Django admin after successful actions. For example,
-``"The poll Foo was created successfully."`` is a message.
-
-The API is simple:
-
-.. method:: models.User.message_set.create(message)
-
- To create a new message, use
- ``user_obj.message_set.create(message='message_text')``.
-
- To retrieve/delete messages, use
- :meth:`user_obj.get_and_delete_messages() <django.contrib.auth.models.User.get_and_delete_messages>`,
- which returns a list of ``Message`` objects in the user's queue (if any)
- and deletes the messages from the queue.
-
-In this example view, the system saves a message for the user after creating
-a playlist::
-
- def create_playlist(request, songs):
- # Create the playlist with the given songs.
- # ...
- request.user.message_set.create(message="Your playlist was added successfully.")
- return render_to_response("playlists/create.html",
- context_instance=RequestContext(request))
-
-When you use :class:`~django.template.context.RequestContext`, the currently
-logged-in user and his/her messages are made available in the
-:doc:`template context </ref/templates/api>` as the template variable
-``{{ messages }}``. Here's an example of template code that displays messages:
-
-.. code-block:: html+django
-
- {% if messages %}
- <ul>
- {% for message in messages %}
- <li>{{ message }}</li>
- {% endfor %}
- </ul>
- {% endif %}
-
-.. versionchanged:: 1.2
- The ``messages`` template variable uses a backwards compatible method in the
- :doc:`messages framework </ref/contrib/messages>` to retrieve messages from
- both the user ``Message`` model and from the new framework. Unlike in
- previous revisions, the messages will not be erased unless they are actually
- displayed.
-
-Finally, note that this messages framework only works with users in the user
-database. To send messages to anonymous users, use the
-:doc:`messages framework </ref/contrib/messages>`.
-
-.. _authentication-backends:
-
-Other authentication sources
-============================
-
-The authentication that comes with Django is good enough for most common cases,
-but you may have the need to hook into another authentication source -- that
-is, another source of usernames and passwords or authentication methods.
-
-For example, your company may already have an LDAP setup that stores a username
-and password for every employee. It'd be a hassle for both the network
-administrator and the users themselves if users had separate accounts in LDAP
-and the Django-based applications.
-
-So, to handle situations like this, the Django authentication system lets you
-plug in other authentication sources. You can override Django's default
-database-based scheme, or you can use the default system in tandem with other
-systems.
-
-See the :doc:`authentication backend reference </ref/authbackends>`
-for information on the authentication backends included with Django.
-
-Specifying authentication backends
-----------------------------------
-
-Behind the scenes, Django maintains a list of "authentication backends" that it
-checks for authentication. When somebody calls
-:func:`django.contrib.auth.authenticate()` -- as described in :ref:`How to log
-a user in <how-to-log-a-user-in>` above -- Django tries authenticating across
-all of its authentication backends. If the first authentication method fails,
-Django tries the second one, and so on, until all backends have been attempted.
-
-The list of authentication backends to use is specified in the
-:setting:`AUTHENTICATION_BACKENDS` setting. This should be a tuple of Python
-path names that point to Python classes that know how to authenticate. These
-classes can be anywhere on your Python path.
-
-By default, :setting:`AUTHENTICATION_BACKENDS` is set to::
-
- ('django.contrib.auth.backends.ModelBackend',)
-
-That's the basic authentication scheme that checks the Django users database.
-
-The order of :setting:`AUTHENTICATION_BACKENDS` matters, so if the same
-username and password is valid in multiple backends, Django will stop
-processing at the first positive match.
-
-.. note::
-
- Once a user has authenticated, Django stores which backend was used to
- authenticate the user in the user's session, and re-uses the same backend
- for subsequent authentication attempts for that user. This effectively means
- that authentication sources are cached, so if you change
- :setting:`AUTHENTICATION_BACKENDS`, you'll need to clear out session data if
- you need to force users to re-authenticate using different methods. A simple
- way to do that is simply to execute ``Session.objects.all().delete()``.
-
-Writing an authentication backend
----------------------------------
-
-An authentication backend is a class that implements two methods:
-``get_user(user_id)`` and ``authenticate(**credentials)``.
-
-The ``get_user`` method takes a ``user_id`` -- which could be a username,
-database ID or whatever -- and returns a ``User`` object.
-
-The ``authenticate`` method takes credentials as keyword arguments. Most of
-the time, it'll just look like this::
-
- class MyBackend:
- def authenticate(self, username=None, password=None):
- # Check the username/password and return a User.
-
-But it could also authenticate a token, like so::
-
- class MyBackend:
- def authenticate(self, token=None):
- # Check the token and return a User.
-
-Either way, ``authenticate`` should check the credentials it gets, and it
-should return a ``User`` object that matches those credentials, if the
-credentials are valid. If they're not valid, it should return ``None``.
-
-The Django admin system is tightly coupled to the Django ``User`` object
-described at the beginning of this document. For now, the best way to deal with
-this is to create a Django ``User`` object for each user that exists for your
-backend (e.g., in your LDAP directory, your external SQL database, etc.) You
-can either write a script to do this in advance, or your ``authenticate``
-method can do it the first time a user logs in.
-
-Here's an example backend that authenticates against a username and password
-variable defined in your ``settings.py`` file and creates a Django ``User``
-object the first time a user authenticates::
-
- from django.conf import settings
- from django.contrib.auth.models import User, check_password
-
- class SettingsBackend:
- """
- Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD.
-
- Use the login name, and a hash of the password. For example:
-
- ADMIN_LOGIN = 'admin'
- ADMIN_PASSWORD = 'sha1$4e987$afbcf42e21bd417fb71db8c66b321e9fc33051de'
- """
- def authenticate(self, username=None, password=None):
- login_valid = (settings.ADMIN_LOGIN == username)
- pwd_valid = check_password(password, settings.ADMIN_PASSWORD)
- if login_valid and pwd_valid:
- try:
- user = User.objects.get(username=username)
- except User.DoesNotExist:
- # Create a new user. Note that we can set password
- # to anything, because it won't be checked; the password
- # from settings.py will.
- user = User(username=username, password='get from settings.py')
- user.is_staff = True
- user.is_superuser = True
- user.save()
- return user
- return None
-
- def get_user(self, user_id):
- try:
- return User.objects.get(pk=user_id)
- except User.DoesNotExist:
- return None
-
-Handling authorization in custom backends
------------------------------------------
-
-Custom auth backends can provide their own permissions.
-
-The user model will delegate permission lookup functions
-(:meth:`~django.contrib.auth.models.User.get_group_permissions()`,
-:meth:`~django.contrib.auth.models.User.get_all_permissions()`,
-:meth:`~django.contrib.auth.models.User.has_perm()`, and
-:meth:`~django.contrib.auth.models.User.has_module_perms()`) to any
-authentication backend that implements these functions.
-
-The permissions given to the user will be the superset of all permissions
-returned by all backends. That is, Django grants a permission to a user that
-any one backend grants.
-
-The simple backend above could implement permissions for the magic admin
-fairly simply::
-
- class SettingsBackend:
-
- # ...
-
- def has_perm(self, user_obj, perm):
- if user_obj.username == settings.ADMIN_LOGIN:
- return True
- else:
- return False
-
-This gives full permissions to the user granted access in the above example.
-Notice that the backend auth functions all take the user object as an argument,
-and they also accept the same arguments given to the associated
-:class:`django.contrib.auth.models.User` functions.
-
-A full authorization implementation can be found in
-`django/contrib/auth/backends.py`_, which is the default backend and queries
-the ``auth_permission`` table most of the time.
-
-.. _django/contrib/auth/backends.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/backends.py
-
-Authorization for anonymous users
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionchanged:: 1.2
-
-An anonymous user is one that is not authenticated i.e. they have provided no
-valid authentication details. However, that does not necessarily mean they are
-not authorized to do anything. At the most basic level, most Web sites
-authorize anonymous users to browse most of the site, and many allow anonymous
-posting of comments etc.
-
-Django's permission framework does not have a place to store permissions for
-anonymous users. However, it has a foundation that allows custom authentication
-backends to specify authorization for anonymous users. This is especially useful
-for the authors of re-usable apps, who can delegate all questions of authorization
-to the auth backend, rather than needing settings, for example, to control
-anonymous access.
-
-To enable this in your own backend, you must set the class attribute
-``supports_anonymous_user`` to ``True``. (This precaution is to maintain
-compatibility with backends that assume that all user objects are actual
-instances of the :class:`django.contrib.auth.models.User` class). With this
-in place, :class:`django.contrib.auth.models.AnonymousUser` will delegate all
-the relevant permission methods to the authentication backends.
-
-A nonexistent ``supports_anonymous_user`` attribute will raise a hidden
-``PendingDeprecationWarning`` if used in Django 1.2. In Django 1.3, this
-warning will be upgraded to a ``DeprecationWarning``, which will be displayed
-loudly. Additionally ``supports_anonymous_user`` will be set to ``False``.
-Django 1.4 will assume that every backend supports anonymous users being
-passed to the authorization methods.
-
-Handling object permissions
----------------------------
-
-Django's permission framework has a foundation for object permissions, though
-there is no implementation for it in the core. That means that checking for
-object permissions will always return ``False`` or an empty list (depending on
-the check performed).
-
-To enable object permissions in your own
-:doc:`authentication backend </ref/authbackends>` you'll just have
-to allow passing an ``obj`` parameter to the permission methods and set the
-``supports_object_permissions`` class attribute to ``True``.
-
-A nonexistent ``supports_object_permissions`` will raise a hidden
-``PendingDeprecationWarning`` if used in Django 1.2. In Django 1.3, this
-warning will be upgraded to a ``DeprecationWarning``, which will be displayed
-loudly. Additionally ``supports_object_permissions`` will be set to ``False``.
-Django 1.4 will assume that every backend supports object permissions and
-won't check for the existence of ``supports_object_permissions``, which
-means not supporting ``obj`` as a parameter will raise a ``TypeError``.
diff --git a/parts/django/docs/topics/cache.txt b/parts/django/docs/topics/cache.txt
deleted file mode 100644
index c18b811..0000000
--- a/parts/django/docs/topics/cache.txt
+++ /dev/null
@@ -1,917 +0,0 @@
-========================
-Django's cache framework
-========================
-
-A fundamental trade-off in dynamic Web sites is, well, they're dynamic. Each
-time a user requests a page, the Web server makes all sorts of calculations --
-from database queries to template rendering to business logic -- to create the
-page that your site's visitor sees. This is a lot more expensive, from a
-processing-overhead perspective, than your standard
-read-a-file-off-the-filesystem server arrangement.
-
-For most Web applications, this overhead isn't a big deal. Most Web
-applications aren't washingtonpost.com or slashdot.org; they're simply small-
-to medium-sized sites with so-so traffic. But for medium- to high-traffic
-sites, it's essential to cut as much overhead as possible.
-
-That's where caching comes in.
-
-To cache something is to save the result of an expensive calculation so that
-you don't have to perform the calculation next time. Here's some pseudocode
-explaining how this would work for a dynamically generated Web page::
-
- given a URL, try finding that page in the cache
- if the page is in the cache:
- return the cached page
- else:
- generate the page
- save the generated page in the cache (for next time)
- return the generated page
-
-Django comes with a robust cache system that lets you save dynamic pages so
-they don't have to be calculated for each request. For convenience, Django
-offers different levels of cache granularity: You can cache the output of
-specific views, you can cache only the pieces that are difficult to produce, or
-you can cache your entire site.
-
-Django also works well with "upstream" caches, such as `Squid
-<http://www.squid-cache.org>`_ and browser-based caches. These are the types of
-caches that you don't directly control but to which you can provide hints (via
-HTTP headers) about which parts of your site should be cached, and how.
-
-Setting up the cache
-====================
-
-The cache system requires a small amount of setup. Namely, you have to tell it
-where your cached data should live -- whether in a database, on the filesystem
-or directly in memory. This is an important decision that affects your cache's
-performance; yes, some cache types are faster than others.
-
-Your cache preference goes in the ``CACHE_BACKEND`` setting in your settings
-file. Here's an explanation of all available values for ``CACHE_BACKEND``.
-
-Memcached
----------
-
-By far the fastest, most efficient type of cache available to Django, Memcached
-is an entirely memory-based cache framework originally developed to handle high
-loads at LiveJournal.com and subsequently open-sourced by Danga Interactive.
-It's used by sites such as Facebook and Wikipedia to reduce database access and
-dramatically increase site performance.
-
-Memcached is available for free at http://memcached.org/. It runs as a
-daemon and is allotted a specified amount of RAM. All it does is provide a
-fast interface for adding, retrieving and deleting arbitrary data in the cache.
-All data is stored directly in memory, so there's no overhead of database or
-filesystem usage.
-
-After installing Memcached itself, you'll need to install
-``python-memcached``, which provides Python bindings to Memcached.
-This is available at ftp://ftp.tummy.com/pub/python-memcached/
-
-.. versionchanged:: 1.2
- In Django 1.0 and 1.1, you could also use ``cmemcache`` as a binding.
- However, support for this library was deprecated in 1.2 due to
- a lack of maintenance on the ``cmemcache`` library itself. Support for
- ``cmemcache`` will be removed completely in Django 1.4.
-
-To use Memcached with Django, set ``CACHE_BACKEND`` to
-``memcached://ip:port/``, where ``ip`` is the IP address of the Memcached
-daemon and ``port`` is the port on which Memcached is running.
-
-In this example, Memcached is running on localhost (127.0.0.1) port 11211::
-
- CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
-
-One excellent feature of Memcached is its ability to share cache over multiple
-servers. This means you can run Memcached daemons on multiple machines, and the
-program will treat the group of machines as a *single* cache, without the need
-to duplicate cache values on each machine. To take advantage of this feature,
-include all server addresses in ``CACHE_BACKEND``, separated by semicolons.
-
-In this example, the cache is shared over Memcached instances running on IP
-address 172.19.26.240 and 172.19.26.242, both on port 11211::
-
- CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'
-
-In the following example, the cache is shared over Memcached instances running
-on the IP addresses 172.19.26.240 (port 11211), 172.19.26.242 (port 11212), and
-172.19.26.244 (port 11213)::
-
- CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/'
-
-A final point about Memcached is that memory-based caching has one
-disadvantage: Because the cached data is stored in memory, the data will be
-lost if your server crashes. Clearly, memory isn't intended for permanent data
-storage, so don't rely on memory-based caching as your only data storage.
-Without a doubt, *none* of the Django caching backends should be used for
-permanent storage -- they're all intended to be solutions for caching, not
-storage -- but we point this out here because memory-based caching is
-particularly temporary.
-
-Database caching
-----------------
-
-To use a database table as your cache backend, first create a cache table in
-your database by running this command::
-
- python manage.py createcachetable [cache_table_name]
-
-...where ``[cache_table_name]`` is the name of the database table to create.
-(This name can be whatever you want, as long as it's a valid table name that's
-not already being used in your database.) This command creates a single table
-in your database that is in the proper format that Django's database-cache
-system expects.
-
-Once you've created that database table, set your ``CACHE_BACKEND`` setting to
-``"db://tablename"``, where ``tablename`` is the name of the database table.
-In this example, the cache table's name is ``my_cache_table``::
-
- CACHE_BACKEND = 'db://my_cache_table'
-
-The database caching backend uses the same database as specified in your
-settings file. You can't use a different database backend for your cache table.
-
-Database caching works best if you've got a fast, well-indexed database server.
-
-Database caching and multiple databases
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you use database caching with multiple databases, you'll also need
-to set up routing instructions for your database cache table. For the
-purposes of routing, the database cache table appears as a model named
-``CacheEntry``, in an application named ``django_cache``. This model
-won't appear in the models cache, but the model details can be used
-for routing purposes.
-
-For example, the following router would direct all cache read
-operations to ``cache_slave``, and all write operations to
-``cache_master``. The cache table will only be synchronized onto
-``cache_master``::
-
- class CacheRouter(object):
- """A router to control all database cache operations"""
-
- def db_for_read(self, model, **hints):
- "All cache read operations go to the slave"
- if model._meta.app_label in ('django_cache',):
- return 'cache_slave'
- return None
-
- def db_for_write(self, model, **hints):
- "All cache write operations go to master"
- if model._meta.app_label in ('django_cache',):
- return 'cache_master'
- return None
-
- def allow_syncdb(self, db, model):
- "Only synchronize the cache model on master"
- if model._meta.app_label in ('django_cache',):
- return db == 'cache_master'
- return None
-
-If you don't specify routing directions for the database cache model,
-the cache backend will use the ``default`` database.
-
-Of course, if you don't use the database cache backend, you don't need
-to worry about providing routing instructions for the database cache
-model.
-
-Filesystem caching
-------------------
-
-To store cached items on a filesystem, use the ``"file://"`` cache type for
-``CACHE_BACKEND``. For example, to store cached data in ``/var/tmp/django_cache``,
-use this setting::
-
- CACHE_BACKEND = 'file:///var/tmp/django_cache'
-
-Note that there are three forward slashes toward the beginning of that example.
-The first two are for ``file://``, and the third is the first character of the
-directory path, ``/var/tmp/django_cache``. If you're on Windows, put the
-drive letter after the ``file://``, like this::
-
- file://c:/foo/bar
-
-The directory path should be absolute -- that is, it should start at the root
-of your filesystem. It doesn't matter whether you put a slash at the end of the
-setting.
-
-Make sure the directory pointed-to by this setting exists and is readable and
-writable by the system user under which your Web server runs. Continuing the
-above example, if your server runs as the user ``apache``, make sure the
-directory ``/var/tmp/django_cache`` exists and is readable and writable by the
-user ``apache``.
-
-Each cache value will be stored as a separate file whose contents are the
-cache data saved in a serialized ("pickled") format, using Python's ``pickle``
-module. Each file's name is the cache key, escaped for safe filesystem use.
-
-Local-memory caching
---------------------
-
-If you want the speed advantages of in-memory caching but don't have the
-capability of running Memcached, consider the local-memory cache backend. This
-cache is multi-process and thread-safe. To use it, set ``CACHE_BACKEND`` to
-``"locmem://"``. For example::
-
- CACHE_BACKEND = 'locmem://'
-
-Note that each process will have its own private cache instance, which means no
-cross-process caching is possible. This obviously also means the local memory
-cache isn't particularly memory-efficient, so it's probably not a good choice
-for production environments. It's nice for development.
-
-Dummy caching (for development)
--------------------------------
-
-Finally, Django comes with a "dummy" cache that doesn't actually cache -- it
-just implements the cache interface without doing anything.
-
-This is useful if you have a production site that uses heavy-duty caching in
-various places but a development/test environment where you don't want to cache
-and don't want to have to change your code to special-case the latter. To
-activate dummy caching, set ``CACHE_BACKEND`` like so::
-
- CACHE_BACKEND = 'dummy://'
-
-Using a custom cache backend
-----------------------------
-
-.. versionadded:: 1.0
-
-While Django includes support for a number of cache backends out-of-the-box,
-sometimes you might want to use a customized cache backend. To use an external
-cache backend with Django, use a Python import path as the scheme portion (the
-part before the initial colon) of the ``CACHE_BACKEND`` URI, like so::
-
- CACHE_BACKEND = 'path.to.backend://'
-
-If you're building your own backend, you can use the standard cache backends
-as reference implementations. You'll find the code in the
-``django/core/cache/backends/`` directory of the Django source.
-
-Note: Without a really compelling reason, such as a host that doesn't support
-them, you should stick to the cache backends included with Django. They've
-been well-tested and are easy to use.
-
-CACHE_BACKEND arguments
------------------------
-
-Each cache backend may take arguments. They're given in query-string style on
-the ``CACHE_BACKEND`` setting. Valid arguments are as follows:
-
- * ``timeout``: The default timeout, in seconds, to use for the cache.
- This argument defaults to 300 seconds (5 minutes).
-
- * ``max_entries``: For the ``locmem``, ``filesystem`` and ``database``
- backends, the maximum number of entries allowed in the cache before old
- values are deleted. This argument defaults to 300.
-
- * ``cull_frequency``: The fraction of entries that are culled when
- ``max_entries`` is reached. The actual ratio is ``1/cull_frequency``, so
- set ``cull_frequency=2`` to cull half of the entries when ``max_entries``
- is reached.
-
- A value of ``0`` for ``cull_frequency`` means that the entire cache will
- be dumped when ``max_entries`` is reached. This makes culling *much*
- faster at the expense of more cache misses.
-
-In this example, ``timeout`` is set to ``60``::
-
- CACHE_BACKEND = "memcached://127.0.0.1:11211/?timeout=60"
-
-In this example, ``timeout`` is ``30`` and ``max_entries`` is ``400``::
-
- CACHE_BACKEND = "locmem://?timeout=30&max_entries=400"
-
-Invalid arguments are silently ignored, as are invalid values of known
-arguments.
-
-The per-site cache
-==================
-
-.. versionchanged:: 1.0
- (previous versions of Django only provided a single ``CacheMiddleware`` instead
- of the two pieces described below).
-
-Once the cache is set up, the simplest way to use caching is to cache your
-entire site. You'll need to add
-``'django.middleware.cache.UpdateCacheMiddleware'`` and
-``'django.middleware.cache.FetchFromCacheMiddleware'`` to your
-``MIDDLEWARE_CLASSES`` setting, as in this example::
-
- MIDDLEWARE_CLASSES = (
- 'django.middleware.cache.UpdateCacheMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.cache.FetchFromCacheMiddleware',
- )
-
-.. note::
-
- No, that's not a typo: the "update" middleware must be first in the list,
- and the "fetch" middleware must be last. The details are a bit obscure, but
- see `Order of MIDDLEWARE_CLASSES`_ below if you'd like the full story.
-
-Then, add the following required settings to your Django settings file:
-
-* ``CACHE_MIDDLEWARE_SECONDS`` -- The number of seconds each page should be
- cached.
-* ``CACHE_MIDDLEWARE_KEY_PREFIX`` -- If the cache is shared across multiple
- sites using the same Django installation, set this to the name of the site,
- or some other string that is unique to this Django instance, to prevent key
- collisions. Use an empty string if you don't care.
-
-The cache middleware caches every page that doesn't have GET or POST
-parameters. Optionally, if the ``CACHE_MIDDLEWARE_ANONYMOUS_ONLY`` setting is
-``True``, only anonymous requests (i.e., not those made by a logged-in user)
-will be cached. This is a simple and effective way of disabling caching for any
-user-specific pages (include Django's admin interface). Note that if you use
-``CACHE_MIDDLEWARE_ANONYMOUS_ONLY``, you should make sure you've activated
-``AuthenticationMiddleware``.
-
-Additionally, the cache middleware automatically sets a few headers in each
-:class:`~django.http.HttpResponse`:
-
- * Sets the ``Last-Modified`` header to the current date/time when a fresh
- (uncached) version of the page is requested.
-
- * Sets the ``Expires`` header to the current date/time plus the defined
- ``CACHE_MIDDLEWARE_SECONDS``.
-
- * Sets the ``Cache-Control`` header to give a max age for the page --
- again, from the ``CACHE_MIDDLEWARE_SECONDS`` setting.
-
-See :doc:`/topics/http/middleware` for more on middleware.
-
-.. versionadded:: 1.0
-
-If a view sets its own cache expiry time (i.e. it has a ``max-age`` section in
-its ``Cache-Control`` header) then the page will be cached until the expiry
-time, rather than ``CACHE_MIDDLEWARE_SECONDS``. Using the decorators in
-``django.views.decorators.cache`` you can easily set a view's expiry time
-(using the ``cache_control`` decorator) or disable caching for a view (using
-the ``never_cache`` decorator). See the `using other headers`__ section for
-more on these decorators.
-
-.. _i18n-cache-key:
-
-.. versionadded:: 1.2
-
-If :setting:`USE_I18N` is set to ``True`` then the generated cache key will
-include the name of the active :term:`language<language code>`.
-This allows you to easily cache multilingual sites without having to create
-the cache key yourself.
-
-See :doc:`/topics/i18n/deployment` for more on how Django discovers the active
-language.
-
-__ `Controlling cache: Using other headers`_
-
-The per-view cache
-==================
-
-A more granular way to use the caching framework is by caching the output of
-individual views. ``django.views.decorators.cache`` defines a ``cache_page``
-decorator that will automatically cache the view's response for you. It's easy
-to use::
-
- from django.views.decorators.cache import cache_page
-
- @cache_page(60 * 15)
- def my_view(request):
- ...
-
-``cache_page`` takes a single argument: the cache timeout, in seconds. In the
-above example, the result of the ``my_view()`` view will be cached for 15
-minutes. (Note that we've written it as ``60 * 15`` for the purpose of
-readability. ``60 * 15`` will be evaluated to ``900`` -- that is, 15 minutes
-multiplied by 60 seconds per minute.)
-
-The per-view cache, like the per-site cache, is keyed off of the URL. If
-multiple URLs point at the same view, each URL will be cached separately.
-Continuing the ``my_view`` example, if your URLconf looks like this::
-
- urlpatterns = ('',
- (r'^foo/(\d{1,2})/$', my_view),
- )
-
-then requests to ``/foo/1/`` and ``/foo/23/`` will be cached separately, as
-you may expect. But once a particular URL (e.g., ``/foo/23/``) has been
-requested, subsequent requests to that URL will use the cache.
-
-``cache_page`` can also take an optional keyword argument, ``key_prefix``, which
-works in the same way as the ``CACHE_MIDDLEWARE_KEY_PREFIX`` setting for the
-middleware. It can be used like this::
-
- @cache_page(60 * 15, key_prefix="site1")
- def my_view(request):
- ...
-
-Specifying per-view cache in the URLconf
-----------------------------------------
-
-The examples in the previous section have hard-coded the fact that the view is
-cached, because ``cache_page`` alters the ``my_view`` function in place. This
-approach couples your view to the cache system, which is not ideal for several
-reasons. For instance, you might want to reuse the view functions on another,
-cache-less site, or you might want to distribute the views to people who might
-want to use them without being cached. The solution to these problems is to
-specify the per-view cache in the URLconf rather than next to the view functions
-themselves.
-
-Doing so is easy: simply wrap the view function with ``cache_page`` when you
-refer to it in the URLconf. Here's the old URLconf from earlier::
-
- urlpatterns = ('',
- (r'^foo/(\d{1,2})/$', my_view),
- )
-
-Here's the same thing, with ``my_view`` wrapped in ``cache_page``::
-
- from django.views.decorators.cache import cache_page
-
- urlpatterns = ('',
- (r'^foo/(\d{1,2})/$', cache_page(my_view, 60 * 15)),
- )
-
-If you take this approach, don't forget to import ``cache_page`` within your
-URLconf.
-
-Template fragment caching
-=========================
-
-.. versionadded:: 1.0
-
-If you're after even more control, you can also cache template fragments using
-the ``cache`` template tag. To give your template access to this tag, put
-``{% load cache %}`` near the top of your template.
-
-The ``{% cache %}`` template tag caches the contents of the block for a given
-amount of time. It takes at least two arguments: the cache timeout, in seconds,
-and the name to give the cache fragment. For example:
-
-.. code-block:: html+django
-
- {% load cache %}
- {% cache 500 sidebar %}
- .. sidebar ..
- {% endcache %}
-
-Sometimes you might want to cache multiple copies of a fragment depending on
-some dynamic data that appears inside the fragment. For example, you might want a
-separate cached copy of the sidebar used in the previous example for every user
-of your site. Do this by passing additional arguments to the ``{% cache %}``
-template tag to uniquely identify the cache fragment:
-
-.. code-block:: html+django
-
- {% load cache %}
- {% cache 500 sidebar request.user.username %}
- .. sidebar for logged in user ..
- {% endcache %}
-
-It's perfectly fine to specify more than one argument to identify the fragment.
-Simply pass as many arguments to ``{% cache %}`` as you need.
-
-If :setting:`USE_I18N` is set to ``True`` the per-site middleware cache will
-:ref:`respect the active language<i18n-cache-key>`. For the ``cache`` template
-tag you could use one of the
-:ref:`translation-specific variables<template-translation-vars>` available in
-templates to archieve the same result:
-
-.. code-block:: html+django
-
- {% load i18n %}
- {% load cache %}
-
- {% get_current_language as LANGUAGE_CODE %}
-
- {% cache 600 welcome LANGUAGE_CODE %}
- {% trans "Welcome to example.com" %}
- {% endcache %}
-
-The cache timeout can be a template variable, as long as the template variable
-resolves to an integer value. For example, if the template variable
-``my_timeout`` is set to the value ``600``, then the following two examples are
-equivalent:
-
-.. code-block:: html+django
-
- {% cache 600 sidebar %} ... {% endcache %}
- {% cache my_timeout sidebar %} ... {% endcache %}
-
-This feature is useful in avoiding repetition in templates. You can set the
-timeout in a variable, in one place, and just reuse that value.
-
-The low-level cache API
-=======================
-
-.. highlight:: python
-
-Sometimes, caching an entire rendered page doesn't gain you very much and is,
-in fact, inconvenient overkill.
-
-Perhaps, for instance, your site includes a view whose results depend on
-several expensive queries, the results of which change at different intervals.
-In this case, it would not be ideal to use the full-page caching that the
-per-site or per-view cache strategies offer, because you wouldn't want to
-cache the entire result (since some of the data changes often), but you'd still
-want to cache the results that rarely change.
-
-For cases like this, Django exposes a simple, low-level cache API. You can use
-this API to store objects in the cache with any level of granularity you like.
-You can cache any Python object that can be pickled safely: strings,
-dictionaries, lists of model objects, and so forth. (Most common Python objects
-can be pickled; refer to the Python documentation for more information about
-pickling.)
-
-The cache module, ``django.core.cache``, has a ``cache`` object that's
-automatically created from the ``CACHE_BACKEND`` setting::
-
- >>> from django.core.cache import cache
-
-The basic interface is ``set(key, value, timeout)`` and ``get(key)``::
-
- >>> cache.set('my_key', 'hello, world!', 30)
- >>> cache.get('my_key')
- 'hello, world!'
-
-The ``timeout`` argument is optional and defaults to the ``timeout``
-argument in the ``CACHE_BACKEND`` setting (explained above). It's the number of
-seconds the value should be stored in the cache.
-
-If the object doesn't exist in the cache, ``cache.get()`` returns ``None``::
-
- # Wait 30 seconds for 'my_key' to expire...
-
- >>> cache.get('my_key')
- None
-
-We advise against storing the literal value ``None`` in the cache, because you
-won't be able to distinguish between your stored ``None`` value and a cache
-miss signified by a return value of ``None``.
-
-``cache.get()`` can take a ``default`` argument. This specifies which value to
-return if the object doesn't exist in the cache::
-
- >>> cache.get('my_key', 'has expired')
- 'has expired'
-
-.. versionadded:: 1.0
-
-To add a key only if it doesn't already exist, use the ``add()`` method.
-It takes the same parameters as ``set()``, but it will not attempt to
-update the cache if the key specified is already present::
-
- >>> cache.set('add_key', 'Initial value')
- >>> cache.add('add_key', 'New value')
- >>> cache.get('add_key')
- 'Initial value'
-
-If you need to know whether ``add()`` stored a value in the cache, you can
-check the return value. It will return ``True`` if the value was stored,
-``False`` otherwise.
-
-There's also a ``get_many()`` interface that only hits the cache once.
-``get_many()`` returns a dictionary with all the keys you asked for that
-actually exist in the cache (and haven't expired)::
-
- >>> cache.set('a', 1)
- >>> cache.set('b', 2)
- >>> cache.set('c', 3)
- >>> cache.get_many(['a', 'b', 'c'])
- {'a': 1, 'b': 2, 'c': 3}
-
-.. versionadded:: 1.2
-
-To set multiple values more efficiently, use ``set_many()`` to pass a dictionary
-of key-value pairs::
-
- >>> cache.set_many({'a': 1, 'b': 2, 'c': 3})
- >>> cache.get_many(['a', 'b', 'c'])
- {'a': 1, 'b': 2, 'c': 3}
-
-Like ``cache.set()``, ``set_many()`` takes an optional ``timeout`` parameter.
-
-You can delete keys explicitly with ``delete()``. This is an easy way of
-clearing the cache for a particular object::
-
- >>> cache.delete('a')
-
-.. versionadded:: 1.2
-
-If you want to clear a bunch of keys at once, ``delete_many()`` can take a list
-of keys to be cleared::
-
- >>> cache.delete_many(['a', 'b', 'c'])
-
-.. versionadded:: 1.2
-
-Finally, if you want to delete all the keys in the cache, use
-``cache.clear()``. Be careful with this; ``clear()`` will remove *everything*
-from the cache, not just the keys set by your application. ::
-
- >>> cache.clear()
-
-.. versionadded:: 1.1
-
-You can also increment or decrement a key that already exists using the
-``incr()`` or ``decr()`` methods, respectively. By default, the existing cache
-value will incremented or decremented by 1. Other increment/decrement values
-can be specified by providing an argument to the increment/decrement call. A
-ValueError will be raised if you attempt to increment or decrement a
-nonexistent cache key.::
-
- >>> cache.set('num', 1)
- >>> cache.incr('num')
- 2
- >>> cache.incr('num', 10)
- 12
- >>> cache.decr('num')
- 11
- >>> cache.decr('num', 5)
- 6
-
-.. note::
-
- ``incr()``/``decr()`` methods are not guaranteed to be atomic. On those
- backends that support atomic increment/decrement (most notably, the
- memcached backend), increment and decrement operations will be atomic.
- However, if the backend doesn't natively provide an increment/decrement
- operation, it will be implemented using a two-step retrieve/update.
-
-Cache key warnings
-------------------
-
-.. versionadded:: 1.3
-
-Memcached, the most commonly-used production cache backend, does not allow
-cache keys longer than 250 characters or containing whitespace or control
-characters, and using such keys will cause an exception. To encourage
-cache-portable code and minimize unpleasant surprises, the other built-in cache
-backends issue a warning (``django.core.cache.backends.base.CacheKeyWarning``)
-if a key is used that would cause an error on memcached.
-
-If you are using a production backend that can accept a wider range of keys (a
-custom backend, or one of the non-memcached built-in backends), and want to use
-this wider range without warnings, you can silence ``CacheKeyWarning`` with
-this code in the ``management`` module of one of your
-:setting:`INSTALLED_APPS`::
-
- import warnings
-
- from django.core.cache import CacheKeyWarning
-
- warnings.simplefilter("ignore", CacheKeyWarning)
-
-If you want to instead provide custom key validation logic for one of the
-built-in backends, you can subclass it, override just the ``validate_key``
-method, and follow the instructions for `using a custom cache backend`_. For
-instance, to do this for the ``locmem`` backend, put this code in a module::
-
- from django.core.cache.backends.locmem import CacheClass as LocMemCacheClass
-
- class CacheClass(LocMemCacheClass):
- def validate_key(self, key):
- """Custom validation, raising exceptions or warnings as needed."""
- # ...
-
-...and use the dotted Python path to this module as the scheme portion of your
-:setting:`CACHE_BACKEND`.
-
-Upstream caches
-===============
-
-So far, this document has focused on caching your *own* data. But another type
-of caching is relevant to Web development, too: caching performed by "upstream"
-caches. These are systems that cache pages for users even before the request
-reaches your Web site.
-
-Here are a few examples of upstream caches:
-
- * Your ISP may cache certain pages, so if you requested a page from
- http://example.com/, your ISP would send you the page without having to
- access example.com directly. The maintainers of example.com have no
- knowledge of this caching; the ISP sits between example.com and your Web
- browser, handling all of the caching transparently.
-
- * Your Django Web site may sit behind a *proxy cache*, such as Squid Web
- Proxy Cache (http://www.squid-cache.org/), that caches pages for
- performance. In this case, each request first would be handled by the
- proxy, and it would be passed to your application only if needed.
-
- * Your Web browser caches pages, too. If a Web page sends out the
- appropriate headers, your browser will use the local cached copy for
- subsequent requests to that page, without even contacting the Web page
- again to see whether it has changed.
-
-Upstream caching is a nice efficiency boost, but there's a danger to it:
-Many Web pages' contents differ based on authentication and a host of other
-variables, and cache systems that blindly save pages based purely on URLs could
-expose incorrect or sensitive data to subsequent visitors to those pages.
-
-For example, say you operate a Web e-mail system, and the contents of the
-"inbox" page obviously depend on which user is logged in. If an ISP blindly
-cached your site, then the first user who logged in through that ISP would have
-his user-specific inbox page cached for subsequent visitors to the site. That's
-not cool.
-
-Fortunately, HTTP provides a solution to this problem. A number of HTTP headers
-exist to instruct upstream caches to differ their cache contents depending on
-designated variables, and to tell caching mechanisms not to cache particular
-pages. We'll look at some of these headers in the sections that follow.
-
-Using Vary headers
-==================
-
-The ``Vary`` header defines which request headers a cache
-mechanism should take into account when building its cache key. For example, if
-the contents of a Web page depend on a user's language preference, the page is
-said to "vary on language."
-
-By default, Django's cache system creates its cache keys using the requested
-path (e.g., ``"/stories/2005/jun/23/bank_robbed/"``). This means every request
-to that URL will use the same cached version, regardless of user-agent
-differences such as cookies or language preferences. However, if this page
-produces different content based on some difference in request headers -- such
-as a cookie, or a language, or a user-agent -- you'll need to use the ``Vary``
-header to tell caching mechanisms that the page output depends on those things.
-
-To do this in Django, use the convenient ``vary_on_headers`` view decorator,
-like so::
-
- from django.views.decorators.vary import vary_on_headers
-
- @vary_on_headers('User-Agent')
- def my_view(request):
- # ...
-
-In this case, a caching mechanism (such as Django's own cache middleware) will
-cache a separate version of the page for each unique user-agent.
-
-The advantage to using the ``vary_on_headers`` decorator rather than manually
-setting the ``Vary`` header (using something like
-``response['Vary'] = 'user-agent'``) is that the decorator *adds* to the
-``Vary`` header (which may already exist), rather than setting it from scratch
-and potentially overriding anything that was already in there.
-
-You can pass multiple headers to ``vary_on_headers()``::
-
- @vary_on_headers('User-Agent', 'Cookie')
- def my_view(request):
- # ...
-
-This tells upstream caches to vary on *both*, which means each combination of
-user-agent and cookie will get its own cache value. For example, a request with
-the user-agent ``Mozilla`` and the cookie value ``foo=bar`` will be considered
-different from a request with the user-agent ``Mozilla`` and the cookie value
-``foo=ham``.
-
-Because varying on cookie is so common, there's a ``vary_on_cookie``
-decorator. These two views are equivalent::
-
- @vary_on_cookie
- def my_view(request):
- # ...
-
- @vary_on_headers('Cookie')
- def my_view(request):
- # ...
-
-The headers you pass to ``vary_on_headers`` are not case sensitive;
-``"User-Agent"`` is the same thing as ``"user-agent"``.
-
-You can also use a helper function, ``django.utils.cache.patch_vary_headers``,
-directly. This function sets, or adds to, the ``Vary header``. For example::
-
- from django.utils.cache import patch_vary_headers
-
- def my_view(request):
- # ...
- response = render_to_response('template_name', context)
- patch_vary_headers(response, ['Cookie'])
- return response
-
-``patch_vary_headers`` takes an :class:`~django.http.HttpResponse` instance as
-its first argument and a list/tuple of case-insensitive header names as its
-second argument.
-
-For more on Vary headers, see the `official Vary spec`_.
-
-.. _`official Vary spec`: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44
-
-Controlling cache: Using other headers
-======================================
-
-Other problems with caching are the privacy of data and the question of where
-data should be stored in a cascade of caches.
-
-A user usually faces two kinds of caches: his or her own browser cache (a
-private cache) and his or her provider's cache (a public cache). A public cache
-is used by multiple users and controlled by someone else. This poses problems
-with sensitive data--you don't want, say, your bank account number stored in a
-public cache. So Web applications need a way to tell caches which data is
-private and which is public.
-
-The solution is to indicate a page's cache should be "private." To do this in
-Django, use the ``cache_control`` view decorator. Example::
-
- from django.views.decorators.cache import cache_control
-
- @cache_control(private=True)
- def my_view(request):
- # ...
-
-This decorator takes care of sending out the appropriate HTTP header behind the
-scenes.
-
-There are a few other ways to control cache parameters. For example, HTTP
-allows applications to do the following:
-
- * Define the maximum time a page should be cached.
-
- * Specify whether a cache should always check for newer versions, only
- delivering the cached content when there are no changes. (Some caches
- might deliver cached content even if the server page changed, simply
- because the cache copy isn't yet expired.)
-
-In Django, use the ``cache_control`` view decorator to specify these cache
-parameters. In this example, ``cache_control`` tells caches to revalidate the
-cache on every access and to store cached versions for, at most, 3,600 seconds::
-
- from django.views.decorators.cache import cache_control
-
- @cache_control(must_revalidate=True, max_age=3600)
- def my_view(request):
- # ...
-
-Any valid ``Cache-Control`` HTTP directive is valid in ``cache_control()``.
-Here's a full list:
-
- * ``public=True``
- * ``private=True``
- * ``no_cache=True``
- * ``no_transform=True``
- * ``must_revalidate=True``
- * ``proxy_revalidate=True``
- * ``max_age=num_seconds``
- * ``s_maxage=num_seconds``
-
-For explanation of Cache-Control HTTP directives, see the `Cache-Control spec`_.
-
-(Note that the caching middleware already sets the cache header's max-age with
-the value of the :setting:`CACHE_MIDDLEWARE_SECONDS` setting. If you use a custom
-``max_age`` in a ``cache_control`` decorator, the decorator will take
-precedence, and the header values will be merged correctly.)
-
-If you want to use headers to disable caching altogether,
-``django.views.decorators.cache.never_cache`` is a view decorator that adds
-headers to ensure the response won't be cached by browsers or other caches.
-Example::
-
- from django.views.decorators.cache import never_cache
-
- @never_cache
- def myview(request):
- # ...
-
-.. _`Cache-Control spec`: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
-
-Other optimizations
-===================
-
-Django comes with a few other pieces of middleware that can help optimize your
-site's performance:
-
- * ``django.middleware.http.ConditionalGetMiddleware`` adds support for
- modern browsers to conditionally GET responses based on the ``ETag``
- and ``Last-Modified`` headers.
-
- * ``django.middleware.gzip.GZipMiddleware`` compresses responses for all
- moderns browsers, saving bandwidth and transfer time.
-
-Order of MIDDLEWARE_CLASSES
-===========================
-
-If you use caching middleware, it's important to put each half in the right
-place within the ``MIDDLEWARE_CLASSES`` setting. That's because the cache
-middleware needs to know which headers by which to vary the cache storage.
-Middleware always adds something to the ``Vary`` response header when it can.
-
-``UpdateCacheMiddleware`` runs during the response phase, where middleware is
-run in reverse order, so an item at the top of the list runs *last* during the
-response phase. Thus, you need to make sure that ``UpdateCacheMiddleware``
-appears *before* any other middleware that might add something to the ``Vary``
-header. The following middleware modules do so:
-
- * ``SessionMiddleware`` adds ``Cookie``
- * ``GZipMiddleware`` adds ``Accept-Encoding``
- * ``LocaleMiddleware`` adds ``Accept-Language``
-
-``FetchFromCacheMiddleware``, on the other hand, runs during the request phase,
-where middleware is applied first-to-last, so an item at the top of the list
-runs *first* during the request phase. The ``FetchFromCacheMiddleware`` also
-needs to run after other middleware updates the ``Vary`` header, so
-``FetchFromCacheMiddleware`` must be *after* any item that does so.
-
diff --git a/parts/django/docs/topics/conditional-view-processing.txt b/parts/django/docs/topics/conditional-view-processing.txt
deleted file mode 100644
index c631a13..0000000
--- a/parts/django/docs/topics/conditional-view-processing.txt
+++ /dev/null
@@ -1,199 +0,0 @@
-===========================
-Conditional View Processing
-===========================
-
-.. versionadded:: 1.1
-
-HTTP clients can send a number of headers to tell the server about copies of a
-resource that they have already seen. This is commonly used when retrieving a
-Web page (using an HTTP ``GET`` request) to avoid sending all the data for
-something the client has already retrieved. However, the same headers can be
-used for all HTTP methods (``POST``, ``PUT``, ``DELETE``, etc).
-
-For each page (response) that Django sends back from a view, it might provide
-two HTTP headers: the ``ETag`` header and the ``Last-Modified`` header. These
-headers are optional on HTTP responses. They can be set by your view function,
-or you can rely on the :class:`~django.middleware.common.CommonMiddleware`
-middleware to set the ``ETag`` header.
-
-When the client next requests the same resource, it might send along a header
-such as `If-modified-since`_, containing the date of the last modification
-time it was sent, or `If-none-match`_, containing the ``ETag`` it was sent.
-If the current version of the page matches the ``ETag`` sent by the client, or
-if the resource has not been modified, a 304 status code can be sent back,
-instead of a full response, telling the client that nothing has changed.
-
-.. _If-none-match: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26
-.. _If-modified-since: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25
-
-When you need more fine-grained control you may use per-view conditional
-processing functions.
-
-.. conditional-decorators:
-
-The ``condition`` decorator
-===========================
-
-Sometimes (in fact, quite often) you can create functions to rapidly compute the ETag_
-value or the last-modified time for a resource, **without** needing to do all
-the computations needed to construct the full view. Django can then use these
-functions to provide an "early bailout" option for the view processing.
-Telling the client that the content has not been modified since the last
-request, perhaps.
-
-.. _ETag: http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11
-
-These two functions are passed as parameters the
-``django.views.decorators.http.condition`` decorator. This decorator uses
-the two functions (you only need to supply one, if you can't compute both
-quantities easily and quickly) to work out if the headers in the HTTP request
-match those on the resource. If they don't match, a new copy of the resource
-must be computed and your normal view is called.
-
-The ``condition`` decorator's signature looks like this::
-
- condition(etag_func=None, last_modified_func=None)
-
-The two functions, to compute the ETag and the last modified time, will be
-passed the incoming ``request`` object and the same parameters, in the same
-order, as the view function they are helping to wrap. The function passed
-``last_modified_func`` should return a standard datetime value specifying the
-last time the resource was modified, or ``None`` if the resource doesn't
-exist. The function passed to the ``etag`` decorator should return a string
-representing the `Etag`_ for the resource, or ``None`` if it doesn't exist.
-
-Using this feature usefully is probably best explained with an example.
-Suppose you have this pair of models, representing a simple blog system::
-
- import datetime
- from django.db import models
-
- class Blog(models.Model):
- ...
-
- class Entry(models.Model):
- blog = models.ForeignKey(Blog)
- published = models.DateTimeField(default=datetime.datetime.now)
- ...
-
-If the front page, displaying the latest blog entries, only changes when you
-add a new blog entry, you can compute the last modified time very quickly. You
-need the latest ``published`` date for every entry associated with that blog.
-One way to do this would be::
-
- def latest_entry(request, blog_id):
- return Entry.objects.filter(blog=blog_id).latest("published").published
-
-You can then use this function to provide early detection of an unchanged page
-for your front page view::
-
- from django.views.decorators.http import condition
-
- @condition(last_modified_func=latest_entry)
- def front_page(request, blog_id):
- ...
-
-Shortcuts for only computing one value
-======================================
-
-As a general rule, if you can provide functions to compute *both* the ETag and
-the last modified time, you should do so. You don't know which headers any
-given HTTP client will send you, so be prepared to handle both. However,
-sometimes only one value is easy to compute and Django provides decorators
-that handle only ETag or only last-modified computations.
-
-The ``django.views.decorators.http.etag`` and
-``django.views.decorators.http.last_modified`` decorators are passed the same
-type of functions as the ``condition`` decorator. Their signatures are::
-
- etag(etag_func)
- last_modified(last_modified_func)
-
-We could write the earlier example, which only uses a last-modified function,
-using one of these decorators::
-
- @last_modified(latest_entry)
- def front_page(request, blog_id):
- ...
-
-...or::
-
- def front_page(request, blog_id):
- ...
- front_page = last_modified(latest_entry)(front_page)
-
-Use ``condition`` when testing both conditions
-------------------------------------------------
-
-It might look nicer to some people to try and chain the ``etag`` and
-``last_modified`` decorators if you want to test both preconditions. However,
-this would lead to incorrect behavior.
-
-::
-
- # Bad code. Don't do this!
- @etag(etag_func)
- @last_modified(last_modified_func)
- def my_view(request):
- # ...
-
- # End of bad code.
-
-The first decorator doesn't know anything about the second and might
-answer that the response is not modified even if the second decorators would
-determine otherwise. The ``condition`` decorator uses both callback functions
-simultaneously to work out the right action to take.
-
-Using the decorators with other HTTP methods
-============================================
-
-The ``condition`` decorator is useful for more than only ``GET`` and
-``HEAD`` requests (``HEAD`` requests are the same as ``GET`` in this
-situation). It can be used also to be used to provide checking for ``POST``,
-``PUT`` and ``DELETE`` requests. In these situations, the idea isn't to return
-a "not modified" response, but to tell the client that the resource they are
-trying to change has been altered in the meantime.
-
-For example, consider the following exchange between the client and server:
-
- 1. Client requests ``/foo/``.
- 2. Server responds with some content with an ETag of ``"abcd1234"``.
- 3. Client sends an HTTP ``PUT`` request to ``/foo/`` to update the
- resource. It also sends an ``If-Match: "abcd1234"`` header to specify
- the version it is trying to update.
- 4. Server checks to see if the resource has changed, by computing the ETag
- the same way it does for a ``GET`` request (using the same function).
- If the resource *has* changed, it will return a 412 status code code,
- meaning "precondition failed".
- 5. Client sends a ``GET`` request to ``/foo/``, after receiving a 412
- response, to retrieve an updated version of the content before updating
- it.
-
-The important thing this example shows is that the same functions can be used
-to compute the ETag and last modification values in all situations. In fact,
-you **should** use the same functions, so that the same values are returned
-every time.
-
-Comparison with middleware conditional processing
-=================================================
-
-You may notice that Django already provides simple and straightforward
-conditional ``GET`` handling via the
-:class:`django.middleware.http.ConditionalGetMiddleware` and
-:class:`~django.middleware.common.CommonMiddleware`. Whilst certainly being
-easy to use and suitable for many situations, those pieces of middleware
-functionality have limitations for advanced usage:
-
- * They are applied globally to all views in your project
- * They don't save you from generating the response itself, which may be
- expensive
- * They are only appropriate for HTTP ``GET`` requests.
-
-You should choose the most appropriate tool for your particular problem here.
-If you have a way to compute ETags and modification times quickly and if some
-view takes a while to generate the content, you should consider using the
-``condition`` decorator described in this document. If everything already runs
-fairly quickly, stick to using the middleware and the amount of network
-traffic sent back to the clients will still be reduced if the view hasn't
-changed.
-
diff --git a/parts/django/docs/topics/db/aggregation.txt b/parts/django/docs/topics/db/aggregation.txt
deleted file mode 100644
index eb21021..0000000
--- a/parts/django/docs/topics/db/aggregation.txt
+++ /dev/null
@@ -1,378 +0,0 @@
-===========
-Aggregation
-===========
-
-.. versionadded:: 1.1
-
-.. currentmodule:: django.db.models
-
-The topic guide on :doc:`Django's database-abstraction API </topics/db/queries>`
-described the way that you can use Django queries that create,
-retrieve, update and delete individual objects. However, sometimes you will
-need to retrieve values that are derived by summarizing or *aggregating* a
-collection of objects. This topic guide describes the ways that aggregate values
-can be generated and returned using Django queries.
-
-Throughout this guide, we'll refer to the following models. These models are
-used to track the inventory for a series of online bookstores:
-
-.. _queryset-model-example:
-
-.. code-block:: python
-
- class Author(models.Model):
- name = models.CharField(max_length=100)
- age = models.IntegerField()
- friends = models.ManyToManyField('self', blank=True)
-
- class Publisher(models.Model):
- name = models.CharField(max_length=300)
- num_awards = models.IntegerField()
-
- class Book(models.Model):
- isbn = models.CharField(max_length=9)
- name = models.CharField(max_length=300)
- pages = models.IntegerField()
- price = models.DecimalField(max_digits=10, decimal_places=2)
- rating = models.FloatField()
- authors = models.ManyToManyField(Author)
- publisher = models.ForeignKey(Publisher)
- pubdate = models.DateField()
-
- class Store(models.Model):
- name = models.CharField(max_length=300)
- books = models.ManyToManyField(Book)
-
-
-Generating aggregates over a QuerySet
-=====================================
-
-Django provides two ways to generate aggregates. The first way is to generate
-summary values over an entire ``QuerySet``. For example, say you wanted to
-calculate the average price of all books available for sale. Django's query
-syntax provides a means for describing the set of all books::
-
- >>> Book.objects.all()
-
-What we need is a way to calculate summary values over the objects that
-belong to this ``QuerySet``. This is done by appending an ``aggregate()``
-clause onto the ``QuerySet``::
-
- >>> from django.db.models import Avg
- >>> Book.objects.all().aggregate(Avg('price'))
- {'price__avg': 34.35}
-
-The ``all()`` is redundant in this example, so this could be simplified to::
-
- >>> Book.objects.aggregate(Avg('price'))
- {'price__avg': 34.35}
-
-The argument to the ``aggregate()`` clause describes the aggregate value that
-we want to compute - in this case, the average of the ``price`` field on the
-``Book`` model. A list of the aggregate functions that are available can be
-found in the :ref:`QuerySet reference <aggregation-functions>`.
-
-``aggregate()`` is a terminal clause for a ``QuerySet`` that, when invoked,
-returns a dictionary of name-value pairs. The name is an identifier for the
-aggregate value; the value is the computed aggregate. The name is
-automatically generated from the name of the field and the aggregate function.
-If you want to manually specify a name for the aggregate value, you can do so
-by providing that name when you specify the aggregate clause::
-
- >>> Book.objects.aggregate(average_price=Avg('price'))
- {'average_price': 34.35}
-
-If you want to generate more than one aggregate, you just add another
-argument to the ``aggregate()`` clause. So, if we also wanted to know
-the maximum and minimum price of all books, we would issue the query::
-
- >>> from django.db.models import Avg, Max, Min, Count
- >>> Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
- {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}
-
-Generating aggregates for each item in a QuerySet
-=================================================
-
-The second way to generate summary values is to generate an independent
-summary for each object in a ``QuerySet``. For example, if you are retrieving
-a list of books, you may want to know how many authors contributed to
-each book. Each Book has a many-to-many relationship with the Author; we
-want to summarize this relationship for each book in the ``QuerySet``.
-
-Per-object summaries can be generated using the ``annotate()`` clause.
-When an ``annotate()`` clause is specified, each object in the ``QuerySet``
-will be annotated with the specified values.
-
-The syntax for these annotations is identical to that used for the
-``aggregate()`` clause. Each argument to ``annotate()`` describes an
-aggregate that is to be calculated. For example, to annotate Books with
-the number of authors::
-
- # Build an annotated queryset
- >>> q = Book.objects.annotate(Count('authors'))
- # Interrogate the first object in the queryset
- >>> q[0]
- <Book: The Definitive Guide to Django>
- >>> q[0].authors__count
- 2
- # Interrogate the second object in the queryset
- >>> q[1]
- <Book: Practical Django Projects>
- >>> q[1].authors__count
- 1
-
-As with ``aggregate()``, the name for the annotation is automatically derived
-from the name of the aggregate function and the name of the field being
-aggregated. You can override this default name by providing an alias when you
-specify the annotation::
-
- >>> q = Book.objects.annotate(num_authors=Count('authors'))
- >>> q[0].num_authors
- 2
- >>> q[1].num_authors
- 1
-
-Unlike ``aggregate()``, ``annotate()`` is *not* a terminal clause. The output
-of the ``annotate()`` clause is a ``QuerySet``; this ``QuerySet`` can be
-modified using any other ``QuerySet`` operation, including ``filter()``,
-``order_by``, or even additional calls to ``annotate()``.
-
-Joins and aggregates
-====================
-
-So far, we have dealt with aggregates over fields that belong to the
-model being queried. However, sometimes the value you want to aggregate
-will belong to a model that is related to the model you are querying.
-
-When specifying the field to be aggregated in an aggregate function, Django
-will allow you to use the same :ref:`double underscore notation
-<field-lookups-intro>` that is used when referring to related fields in
-filters. Django will then handle any table joins that are required to retrieve
-and aggregate the related value.
-
-For example, to find the price range of books offered in each store,
-you could use the annotation::
-
- >>> Store.objects.annotate(min_price=Min('books__price'), max_price=Max('books__price'))
-
-This tells Django to retrieve the Store model, join (through the
-many-to-many relationship) with the Book model, and aggregate on the
-price field of the book model to produce a minimum and maximum value.
-
-The same rules apply to the ``aggregate()`` clause. If you wanted to
-know the lowest and highest price of any book that is available for sale
-in a store, you could use the aggregate::
-
- >>> Store.objects.aggregate(min_price=Min('books__price'), max_price=Max('books__price'))
-
-Join chains can be as deep as you require. For example, to extract the
-age of the youngest author of any book available for sale, you could
-issue the query::
-
- >>> Store.objects.aggregate(youngest_age=Min('books__authors__age'))
-
-Aggregations and other QuerySet clauses
-=======================================
-
-``filter()`` and ``exclude()``
-------------------------------
-
-Aggregates can also participate in filters. Any ``filter()`` (or
-``exclude()``) applied to normal model fields will have the effect of
-constraining the objects that are considered for aggregation.
-
-When used with an ``annotate()`` clause, a filter has the effect of
-constraining the objects for which an annotation is calculated. For example,
-you can generate an annotated list of all books that have a title starting
-with "Django" using the query::
-
- >>> Book.objects.filter(name__startswith="Django").annotate(num_authors=Count('authors'))
-
-When used with an ``aggregate()`` clause, a filter has the effect of
-constraining the objects over which the aggregate is calculated.
-For example, you can generate the average price of all books with a
-title that starts with "Django" using the query::
-
- >>> Book.objects.filter(name__startswith="Django").aggregate(Avg('price'))
-
-Filtering on annotations
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Annotated values can also be filtered. The alias for the annotation can be
-used in ``filter()`` and ``exclude()`` clauses in the same way as any other
-model field.
-
-For example, to generate a list of books that have more than one author,
-you can issue the query::
-
- >>> Book.objects.annotate(num_authors=Count('authors')).filter(num_authors__gt=1)
-
-This query generates an annotated result set, and then generates a filter
-based upon that annotation.
-
-Order of ``annotate()`` and ``filter()`` clauses
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-When developing a complex query that involves both ``annotate()`` and
-``filter()`` clauses, particular attention should be paid to the order
-in which the clauses are applied to the ``QuerySet``.
-
-When an ``annotate()`` clause is applied to a query, the annotation is
-computed over the state of the query up to the point where the annotation
-is requested. The practical implication of this is that ``filter()`` and
-``annotate()`` are not commutative operations -- that is, there is a
-difference between the query::
-
- >>> Publisher.objects.annotate(num_books=Count('book')).filter(book__rating__gt=3.0)
-
-and the query::
-
- >>> Publisher.objects.filter(book__rating__gt=3.0).annotate(num_books=Count('book'))
-
-Both queries will return a list of Publishers that have at least one good
-book (i.e., a book with a rating exceeding 3.0). However, the annotation in
-the first query will provide the total number of all books published by the
-publisher; the second query will only include good books in the annotated
-count. In the first query, the annotation precedes the filter, so the
-filter has no effect on the annotation. In the second query, the filter
-preceeds the annotation, and as a result, the filter constrains the objects
-considered when calculating the annotation.
-
-``order_by()``
---------------
-
-Annotations can be used as a basis for ordering. When you
-define an ``order_by()`` clause, the aggregates you provide can reference
-any alias defined as part of an ``annotate()`` clause in the query.
-
-For example, to order a ``QuerySet`` of books by the number of authors
-that have contributed to the book, you could use the following query::
-
- >>> Book.objects.annotate(num_authors=Count('authors')).order_by('num_authors')
-
-``values()``
-------------
-
-Ordinarily, annotations are generated on a per-object basis - an annotated
-``QuerySet`` will return one result for each object in the original
-``QuerySet``. However, when a ``values()`` clause is used to constrain the
-columns that are returned in the result set, the method for evaluating
-annotations is slightly different. Instead of returning an annotated result
-for each result in the original ``QuerySet``, the original results are
-grouped according to the unique combinations of the fields specified in the
-``values()`` clause. An annotation is then provided for each unique group;
-the annotation is computed over all members of the group.
-
-For example, consider an author query that attempts to find out the average
-rating of books written by each author:
-
- >>> Author.objects.annotate(average_rating=Avg('book__rating'))
-
-This will return one result for each author in the database, annotated with
-their average book rating.
-
-However, the result will be slightly different if you use a ``values()`` clause::
-
- >>> Author.objects.values('name').annotate(average_rating=Avg('book__rating'))
-
-In this example, the authors will be grouped by name, so you will only get
-an annotated result for each *unique* author name. This means if you have
-two authors with the same name, their results will be merged into a single
-result in the output of the query; the average will be computed as the
-average over the books written by both authors.
-
-Order of ``annotate()`` and ``values()`` clauses
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-As with the ``filter()`` clause, the order in which ``annotate()`` and
-``values()`` clauses are applied to a query is significant. If the
-``values()`` clause precedes the ``annotate()``, the annotation will be
-computed using the grouping described by the ``values()`` clause.
-
-However, if the ``annotate()`` clause precedes the ``values()`` clause,
-the annotations will be generated over the entire query set. In this case,
-the ``values()`` clause only constrains the fields that are generated on
-output.
-
-For example, if we reverse the order of the ``values()`` and ``annotate()``
-clause from our previous example::
-
- >>> Author.objects.annotate(average_rating=Avg('book__rating')).values('name', 'average_rating')
-
-This will now yield one unique result for each author; however, only
-the author's name and the ``average_rating`` annotation will be returned
-in the output data.
-
-You should also note that ``average_rating`` has been explicitly included
-in the list of values to be returned. This is required because of the
-ordering of the ``values()`` and ``annotate()`` clause.
-
-If the ``values()`` clause precedes the ``annotate()`` clause, any annotations
-will be automatically added to the result set. However, if the ``values()``
-clause is applied after the ``annotate()`` clause, you need to explicitly
-include the aggregate column.
-
-Interaction with default ordering or ``order_by()``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Fields that are mentioned in the ``order_by()`` part of a queryset (or which
-are used in the default ordering on a model) are used when selecting the
-output data, even if they are not otherwise specified in the ``values()``
-call. These extra fields are used to group "like" results together and they
-can make otherwise identical result rows appear to be separate. This shows up,
-particularly, when counting things.
-
-By way of example, suppose you have a model like this::
-
- class Item(models.Model):
- name = models.CharField(max_length=10)
- data = models.IntegerField()
-
- class Meta:
- ordering = ["name"]
-
-The important part here is the default ordering on the ``name`` field. If you
-want to count how many times each distinct ``data`` value appears, you might
-try this::
-
- # Warning: not quite correct!
- Item.objects.values("data").annotate(Count("id"))
-
-...which will group the ``Item`` objects by their common ``data`` values and
-then count the number of ``id`` values in each group. Except that it won't
-quite work. The default ordering by ``name`` will also play a part in the
-grouping, so this query will group by distinct ``(data, name)`` pairs, which
-isn't what you want. Instead, you should construct this queryset::
-
- Item.objects.values("data").annotate(Count("id")).order_by()
-
-...clearing any ordering in the query. You could also order by, say, ``data``
-without any harmful effects, since that is already playing a role in the
-query.
-
-This behavior is the same as that noted in the queryset documentation for
-:meth:`~django.db.models.QuerySet.distinct` and the general rule is the same:
-normally you won't want extra columns playing a part in the result, so clear
-out the ordering, or at least make sure it's restricted only to those fields
-you also select in a ``values()`` call.
-
-.. note::
- You might reasonably ask why Django doesn't remove the extraneous columns
- for you. The main reason is consistency with ``distinct()`` and other
- places: Django **never** removes ordering constraints that you have
- specified (and we can't change those other methods' behavior, as that
- would violate our :doc:`/misc/api-stability` policy).
-
-Aggregating annotations
------------------------
-
-You can also generate an aggregate on the result of an annotation. When you
-define an ``aggregate()`` clause, the aggregates you provide can reference
-any alias defined as part of an ``annotate()`` clause in the query.
-
-For example, if you wanted to calculate the average number of authors per
-book you first annotate the set of books with the author count, then
-aggregate that author count, referencing the annotation field::
-
- >>> Book.objects.annotate(num_authors=Count('authors')).aggregate(Avg('num_authors'))
- {'num_authors__avg': 1.66}
diff --git a/parts/django/docs/topics/db/index.txt b/parts/django/docs/topics/db/index.txt
deleted file mode 100644
index c49f158..0000000
--- a/parts/django/docs/topics/db/index.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-Models and databases
-====================
-
-A model is the single, definitive source of data about your data. It contains
-the essential fields and behaviors of the data you're storing. Generally, each
-model maps to a single database table.
-
-.. toctree::
- :maxdepth: 1
-
- models
- queries
- aggregation
- managers
- sql
- transactions
- multi-db
- optimization
diff --git a/parts/django/docs/topics/db/managers.txt b/parts/django/docs/topics/db/managers.txt
deleted file mode 100644
index 5ebe0b1..0000000
--- a/parts/django/docs/topics/db/managers.txt
+++ /dev/null
@@ -1,376 +0,0 @@
-========
-Managers
-========
-
-.. currentmodule:: django.db.models
-
-.. class:: Manager()
-
-A ``Manager`` is the interface through which database query operations are
-provided to Django models. At least one ``Manager`` exists for every model in
-a Django application.
-
-The way ``Manager`` classes work is documented in :doc:`/topics/db/queries`;
-this document specifically touches on model options that customize ``Manager``
-behavior.
-
-.. _manager-names:
-
-Manager names
-=============
-
-By default, Django adds a ``Manager`` with the name ``objects`` to every Django
-model class. However, if you want to use ``objects`` as a field name, or if you
-want to use a name other than ``objects`` for the ``Manager``, you can rename
-it on a per-model basis. To rename the ``Manager`` for a given class, define a
-class attribute of type ``models.Manager()`` on that model. For example::
-
- from django.db import models
-
- class Person(models.Model):
- #...
- people = models.Manager()
-
-Using this example model, ``Person.objects`` will generate an
-``AttributeError`` exception, but ``Person.people.all()`` will provide a list
-of all ``Person`` objects.
-
-.. _custom-managers:
-
-Custom Managers
-===============
-
-You can use a custom ``Manager`` in a particular model by extending the base
-``Manager`` class and instantiating your custom ``Manager`` in your model.
-
-There are two reasons you might want to customize a ``Manager``: to add extra
-``Manager`` methods, and/or to modify the initial ``QuerySet`` the ``Manager``
-returns.
-
-Adding extra Manager methods
-----------------------------
-
-Adding extra ``Manager`` methods is the preferred way to add "table-level"
-functionality to your models. (For "row-level" functionality -- i.e., functions
-that act on a single instance of a model object -- use :ref:`Model methods
-<model-methods>`, not custom ``Manager`` methods.)
-
-A custom ``Manager`` method can return anything you want. It doesn't have to
-return a ``QuerySet``.
-
-For example, this custom ``Manager`` offers a method ``with_counts()``, which
-returns a list of all ``OpinionPoll`` objects, each with an extra
-``num_responses`` attribute that is the result of an aggregate query::
-
- class PollManager(models.Manager):
- def with_counts(self):
- from django.db import connection
- cursor = connection.cursor()
- cursor.execute("""
- SELECT p.id, p.question, p.poll_date, COUNT(*)
- FROM polls_opinionpoll p, polls_response r
- WHERE p.id = r.poll_id
- GROUP BY 1, 2, 3
- ORDER BY 3 DESC""")
- result_list = []
- for row in cursor.fetchall():
- p = self.model(id=row[0], question=row[1], poll_date=row[2])
- p.num_responses = row[3]
- result_list.append(p)
- return result_list
-
- class OpinionPoll(models.Model):
- question = models.CharField(max_length=200)
- poll_date = models.DateField()
- objects = PollManager()
-
- class Response(models.Model):
- poll = models.ForeignKey(Poll)
- person_name = models.CharField(max_length=50)
- response = models.TextField()
-
-With this example, you'd use ``OpinionPoll.objects.with_counts()`` to return
-that list of ``OpinionPoll`` objects with ``num_responses`` attributes.
-
-Another thing to note about this example is that ``Manager`` methods can
-access ``self.model`` to get the model class to which they're attached.
-
-Modifying initial Manager QuerySets
------------------------------------
-
-A ``Manager``'s base ``QuerySet`` returns all objects in the system. For
-example, using this model::
-
- class Book(models.Model):
- title = models.CharField(max_length=100)
- author = models.CharField(max_length=50)
-
-...the statement ``Book.objects.all()`` will return all books in the database.
-
-You can override a ``Manager``\'s base ``QuerySet`` by overriding the
-``Manager.get_query_set()`` method. ``get_query_set()`` should return a
-``QuerySet`` with the properties you require.
-
-For example, the following model has *two* ``Manager``\s -- one that returns
-all objects, and one that returns only the books by Roald Dahl::
-
- # First, define the Manager subclass.
- class DahlBookManager(models.Manager):
- def get_query_set(self):
- return super(DahlBookManager, self).get_query_set().filter(author='Roald Dahl')
-
- # Then hook it into the Book model explicitly.
- class Book(models.Model):
- title = models.CharField(max_length=100)
- author = models.CharField(max_length=50)
-
- objects = models.Manager() # The default manager.
- dahl_objects = DahlBookManager() # The Dahl-specific manager.
-
-With this sample model, ``Book.objects.all()`` will return all books in the
-database, but ``Book.dahl_objects.all()`` will only return the ones written by
-Roald Dahl.
-
-Of course, because ``get_query_set()`` returns a ``QuerySet`` object, you can
-use ``filter()``, ``exclude()`` and all the other ``QuerySet`` methods on it.
-So these statements are all legal::
-
- Book.dahl_objects.all()
- Book.dahl_objects.filter(title='Matilda')
- Book.dahl_objects.count()
-
-This example also pointed out another interesting technique: using multiple
-managers on the same model. You can attach as many ``Manager()`` instances to
-a model as you'd like. This is an easy way to define common "filters" for your
-models.
-
-For example::
-
- class MaleManager(models.Manager):
- def get_query_set(self):
- return super(MaleManager, self).get_query_set().filter(sex='M')
-
- class FemaleManager(models.Manager):
- def get_query_set(self):
- return super(FemaleManager, self).get_query_set().filter(sex='F')
-
- class Person(models.Model):
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
- sex = models.CharField(max_length=1, choices=(('M', 'Male'), ('F', 'Female')))
- people = models.Manager()
- men = MaleManager()
- women = FemaleManager()
-
-This example allows you to request ``Person.men.all()``, ``Person.women.all()``,
-and ``Person.people.all()``, yielding predictable results.
-
-If you use custom ``Manager`` objects, take note that the first ``Manager``
-Django encounters (in the order in which they're defined in the model) has a
-special status. Django interprets the first ``Manager`` defined in a class as
-the "default" ``Manager``, and several parts of Django
-(including :djadmin:`dumpdata`) will use that ``Manager``
-exclusively for that model. As a result, it's a good idea to be careful in
-your choice of default manager in order to avoid a situation where overriding
-``get_query_set()`` results in an inability to retrieve objects you'd like to
-work with.
-
-.. _managers-for-related-objects:
-
-Using managers for related object access
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-By default, Django uses an instance of a "plain" manager class when accessing
-related objects (i.e. ``choice.poll``), not the default manager on the related
-object. This is because Django needs to be able to retrieve the related
-object, even if it would otherwise be filtered out (and hence be inaccessible)
-by the default manager.
-
-If the normal plain manager class (:class:`django.db.models.Manager`) is not
-appropriate for your circumstances, you can force Django to use the same class
-as the default manager for your model by setting the `use_for_related_fields`
-attribute on the manager class. This is documented fully below_.
-
-.. _below: manager-types_
-
-.. _custom-managers-and-inheritance:
-
-Custom managers and model inheritance
--------------------------------------
-
-Class inheritance and model managers aren't quite a perfect match for each
-other. Managers are often specific to the classes they are defined on and
-inheriting them in subclasses isn't necessarily a good idea. Also, because the
-first manager declared is the *default manager*, it is important to allow that
-to be controlled. So here's how Django handles custom managers and
-:ref:`model inheritance <model-inheritance>`:
-
- 1. Managers defined on non-abstract base classes are *not* inherited by
- child classes. If you want to reuse a manager from a non-abstract base,
- redeclare it explicitly on the child class. These sorts of managers are
- likely to be fairly specific to the class they are defined on, so
- inheriting them can often lead to unexpected results (particularly as
- far as the default manager goes). Therefore, they aren't passed onto
- child classes.
-
- 2. Managers from abstract base classes are always inherited by the child
- class, using Python's normal name resolution order (names on the child
- class override all others; then come names on the first parent class,
- and so on). Abstract base classes are designed to capture information
- and behavior that is common to their child classes. Defining common
- managers is an appropriate part of this common information.
-
- 3. The default manager on a class is either the first manager declared on
- the class, if that exists, or the default manager of the first abstract
- base class in the parent hierarchy, if that exists. If no default
- manager is explicitly declared, Django's normal default manager is
- used.
-
-These rules provide the necessary flexibility if you want to install a
-collection of custom managers on a group of models, via an abstract base
-class, but still customize the default manager. For example, suppose you have
-this base class::
-
- class AbstractBase(models.Model):
- ...
- objects = CustomManager()
-
- class Meta:
- abstract = True
-
-If you use this directly in a subclass, ``objects`` will be the default
-manager if you declare no managers in the base class::
-
- class ChildA(AbstractBase):
- ...
- # This class has CustomManager as the default manager.
-
-If you want to inherit from ``AbstractBase``, but provide a different default
-manager, you can provide the default manager on the child class::
-
- class ChildB(AbstractBase):
- ...
- # An explicit default manager.
- default_manager = OtherManager()
-
-Here, ``default_manager`` is the default. The ``objects`` manager is
-still available, since it's inherited. It just isn't used as the default.
-
-Finally for this example, suppose you want to add extra managers to the child
-class, but still use the default from ``AbstractBase``. You can't add the new
-manager directly in the child class, as that would override the default and you would
-have to also explicitly include all the managers from the abstract base class.
-The solution is to put the extra managers in another base class and introduce
-it into the inheritance hierarchy *after* the defaults::
-
- class ExtraManager(models.Model):
- extra_manager = OtherManager()
-
- class Meta:
- abstract = True
-
- class ChildC(AbstractBase, ExtraManager):
- ...
- # Default manager is CustomManager, but OtherManager is
- # also available via the "extra_manager" attribute.
-
-.. _manager-types:
-
-Controlling Automatic Manager Types
-===================================
-
-This document has already mentioned a couple of places where Django creates a
-manager class for you: `default managers`_ and the "plain" manager used to
-`access related objects`_. There are other places in the implementation of
-Django where temporary plain managers are needed. Those automatically created
-managers will normally be instances of the :class:`django.db.models.Manager`
-class.
-
-.. _default managers: manager-names_
-.. _access related objects: managers-for-related-objects_
-
-Throughout this section, we will use the term "automatic manager" to mean a
-manager that Django creates for you -- either as a default manager on a model
-with no managers, or to use temporarily when accessing related objects.
-
-Sometimes this default class won't be the right choice. One example is in the
-:mod:`django.contrib.gis` application that ships with Django itself. All ``gis``
-models must use a special manager class (:class:`~django.contrib.gis.db.models.GeoManager`)
-because they need a special queryset (:class:`~django.contrib.gis.db.models.GeoQuerySet`)
-to be used for interacting with the database. It turns out that models which require
-a special manager like this need to use the same manager class wherever an automatic
-manager is created.
-
-Django provides a way for custom manager developers to say that their manager
-class should be used for automatic managers whenever it is the default manager
-on a model. This is done by setting the ``use_for_related_fields`` attribute on
-the manager class::
-
- class MyManager(models.Manager):
- use_for_related_fields = True
-
- ...
-
-If this attribute is set on the *default* manager for a model (only the
-default manager is considered in these situations), Django will use that class
-whenever it needs to automatically create a manager for the class. Otherwise,
-it will use :class:`django.db.models.Manager`.
-
-.. admonition:: Historical Note
-
- Given the purpose for which it's used, the name of this attribute
- (``use_for_related_fields``) might seem a little odd. Originally, the
- attribute only controlled the type of manager used for related field
- access, which is where the name came from. As it became clear the concept
- was more broadly useful, the name hasn't been changed. This is primarily
- so that existing code will :doc:`continue to work </misc/api-stability>` in
- future Django versions.
-
-Writing Correct Managers For Use In Automatic Manager Instances
----------------------------------------------------------------
-
-As already suggested by the `django.contrib.gis` example, above, the
-``use_for_related_fields`` feature is primarily for managers that need to
-return a custom ``QuerySet`` subclass. In providing this functionality in your
-manager, there are a couple of things to remember.
-
-Do not filter away any results in this type of manager subclass
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-One reason an automatic manager is used is to access objects that are related
-to from some other model. In those situations, Django has to be able to see
-all the objects for the model it is fetching, so that *anything* which is
-referred to can be retrieved.
-
-If you override the ``get_query_set()`` method and filter out any rows, Django
-will return incorrect results. Don't do that. A manager that filters results
-in ``get_query_set()`` is not appropriate for use as an automatic manager.
-
-Set ``use_for_related_fields`` when you define the class
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``use_for_related_fields`` attribute must be set on the manager *class*,
-object not on an *instance* of the class. The earlier example shows the
-correct way to set it, whereas the following will not work::
-
- # BAD: Incorrect code
- class MyManager(models.Manager):
- ...
-
- # Sets the attribute on an instance of MyManager. Django will
- # ignore this setting.
- mgr = MyManager()
- mgr.use_for_related_fields = True
-
- class MyModel(models.Model):
- ...
- objects = mgr
-
- # End of incorrect code.
-
-You also shouldn't change the attribute on the class object after it has been
-used in a model, since the attribute's value is processed when the model class
-is created and not subsequently reread. Set the attribute on the manager class
-when it is first defined, as in the initial example of this section and
-everything will work smoothly.
-
diff --git a/parts/django/docs/topics/db/models.txt b/parts/django/docs/topics/db/models.txt
deleted file mode 100644
index 2a19cbd..0000000
--- a/parts/django/docs/topics/db/models.txt
+++ /dev/null
@@ -1,1234 +0,0 @@
-======
-Models
-======
-
-.. module:: django.db.models
-
-A model is the single, definitive source of data about your data. It contains
-the essential fields and behaviors of the data you're storing. Generally, each
-model maps to a single database table.
-
-The basics:
-
- * Each model is a Python class that subclasses
- :class:`django.db.models.Model`.
-
- * Each attribute of the model represents a database field.
-
- * With all of this, Django gives you an automatically-generated
- database-access API; see :doc:`/topics/db/queries`.
-
-.. seealso::
-
- A companion to this document is the `official repository of model
- examples`_. (In the Django source distribution, these examples are in the
- ``tests/modeltests`` directory.)
-
- .. _official repository of model examples: http://www.djangoproject.com/documentation/models/
-
-Quick example
-=============
-
-This example model defines a ``Person``, which has a ``first_name`` and
-``last_name``::
-
- from django.db import models
-
- class Person(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
-
-``first_name`` and ``last_name`` are fields_ of the model. Each field is
-specified as a class attribute, and each attribute maps to a database column.
-
-The above ``Person`` model would create a database table like this:
-
-.. code-block:: sql
-
- CREATE TABLE myapp_person (
- "id" serial NOT NULL PRIMARY KEY,
- "first_name" varchar(30) NOT NULL,
- "last_name" varchar(30) NOT NULL
- );
-
-Some technical notes:
-
- * The name of the table, ``myapp_person``, is automatically derived from
- some model metadata but can be overridden. See :ref:`table-names` for more
- details..
-
- * An ``id`` field is added automatically, but this behavior can be
- overridden. See :ref:`automatic-primary-key-fields`.
-
- * The ``CREATE TABLE`` SQL in this example is formatted using PostgreSQL
- syntax, but it's worth noting Django uses SQL tailored to the database
- backend specified in your :doc:`settings file </topics/settings>`.
-
-Using models
-============
-
-Once you have defined your models, you need to tell Django you're going to *use*
-those models. Do this by editing your settings file and changing the
-:setting:`INSTALLED_APPS` setting to add the name of the module that contains
-your ``models.py``.
-
-For example, if the models for your application live in the module
-``mysite.myapp.models`` (the package structure that is created for an
-application by the :djadmin:`manage.py startapp <startapp>` script),
-:setting:`INSTALLED_APPS` should read, in part::
-
- INSTALLED_APPS = (
- #...
- 'mysite.myapp',
- #...
- )
-
-When you add new apps to :setting:`INSTALLED_APPS`, be sure to run
-:djadmin:`manage.py syncdb <syncdb>`.
-
-Fields
-======
-
-The most important part of a model -- and the only required part of a model --
-is the list of database fields it defines. Fields are specified by class
-attributes.
-
-Example::
-
- class Musician(models.Model):
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
- instrument = models.CharField(max_length=100)
-
- class Album(models.Model):
- artist = models.ForeignKey(Musician)
- name = models.CharField(max_length=100)
- release_date = models.DateField()
- num_stars = models.IntegerField()
-
-Field types
------------
-
-Each field in your model should be an instance of the appropriate
-:class:`~django.db.models.Field` class. Django uses the field class types to
-determine a few things:
-
- * The database column type (e.g. ``INTEGER``, ``VARCHAR``).
-
- * The :doc:`widget </ref/forms/widgets>` to use in Django's admin interface,
- if you care to use it (e.g. ``<input type="text">``, ``<select>``).
-
- * The minimal validation requirements, used in Django's admin and in
- automatically-generated forms.
-
-Django ships with dozens of built-in field types; you can find the complete list
-in the :ref:`model field reference <model-field-types>`. You can easily write
-your own fields if Django's built-in ones don't do the trick; see
-:doc:`/howto/custom-model-fields`.
-
-Field options
--------------
-
-Each field takes a certain set of field-specific arguments (documented in the
-:ref:`model field reference <model-field-types>`). For example,
-:class:`~django.db.models.CharField` (and its subclasses) require a
-:attr:`~django.db.models.CharField.max_length` argument which specifies the size
-of the ``VARCHAR`` database field used to store the data.
-
-There's also a set of common arguments available to all field types. All are
-optional. They're fully explained in the :ref:`reference
-<common-model-field-options>`, but here's a quick summary of the most often-used
-ones:
-
- :attr:`~Field.null`
- If ``True``, Django will store empty values as ``NULL`` in the database.
- Default is ``False``.
-
- :attr:`~Field.blank`
- If ``True``, the field is allowed to be blank. Default is ``False``.
-
- Note that this is different than :attr:`~Field.null`.
- :attr:`~Field.null` is purely database-related, whereas
- :attr:`~Field.blank` is validation-related. If a field has
- :attr:`blank=True <Field.blank>`, validation on Django's admin site will
- allow entry of an empty value. If a field has :attr:`blank=False
- <Field.blank>`, the field will be required.
-
- :attr:`~Field.choices`
- An iterable (e.g., a list or tuple) of 2-tuples to use as choices for
- this field. If this is given, Django's admin will use a select box
- instead of the standard text field and will limit choices to the choices
- given.
-
- A choices list looks like this::
-
- YEAR_IN_SCHOOL_CHOICES = (
- (u'FR', u'Freshman'),
- (u'SO', u'Sophomore'),
- (u'JR', u'Junior'),
- (u'SR', u'Senior'),
- (u'GR', u'Graduate'),
- )
-
- The first element in each tuple is the value that will be stored in the
- database, the second element will be displayed by the admin interface,
- or in a ModelChoiceField. Given an instance of a model object, the
- display value for a choices field can be accessed using the
- ``get_FOO_display`` method. For example::
-
- from django.db import models
-
- class Person(models.Model):
- GENDER_CHOICES = (
- (u'M', u'Male'),
- (u'F', u'Female'),
- )
- name = models.CharField(max_length=60)
- gender = models.CharField(max_length=2, choices=GENDER_CHOICES)
-
- ::
-
- >>> p = Person(name="Fred Flinstone", gender="M")
- >>> p.save()
- >>> p.gender
- u'M'
- >>> p.get_gender_display()
- u'Male'
-
- :attr:`~Field.default`
- The default value for the field. This can be a value or a callable
- object. If callable it will be called every time a new object is
- created.
-
- :attr:`~Field.help_text`
- Extra "help" text to be displayed under the field on the object's admin
- form. It's useful for documentation even if your object doesn't have an
- admin form.
-
- :attr:`~Field.primary_key`
- If ``True``, this field is the primary key for the model.
-
- If you don't specify :attr:`primary_key=True <Field.primary_key>` for
- any fields in your model, Django will automatically add an
- :class:`IntegerField` to hold the primary key, so you don't need to set
- :attr:`primary_key=True <Field.primary_key>` on any of your fields
- unless you want to override the default primary-key behavior. For more,
- see :ref:`automatic-primary-key-fields`.
-
- :attr:`~Field.unique`
- If ``True``, this field must be unique throughout the table.
-
-Again, these are just short descriptions of the most common field options. Full
-details can be found in the :ref:`common model field option reference
-<common-model-field-options>`.
-
-.. _automatic-primary-key-fields:
-
-Automatic primary key fields
-----------------------------
-
-By default, Django gives each model the following field::
-
- id = models.AutoField(primary_key=True)
-
-This is an auto-incrementing primary key.
-
-If you'd like to specify a custom primary key, just specify
-:attr:`primary_key=True <Field.primary_key>` on one of your fields. If Django
-sees you've explicitly set :attr:`Field.primary_key`, it won't add the automatic
-``id`` column.
-
-Each model requires exactly one field to have :attr:`primary_key=True
-<Field.primary_key>`.
-
-.. _verbose-field-names:
-
-Verbose field names
--------------------
-
-Each field type, except for :class:`~django.db.models.ForeignKey`,
-:class:`~django.db.models.ManyToManyField` and
-:class:`~django.db.models.OneToOneField`, takes an optional first positional
-argument -- a verbose name. If the verbose name isn't given, Django will
-automatically create it using the field's attribute name, converting underscores
-to spaces.
-
-In this example, the verbose name is ``"person's first name"``::
-
- first_name = models.CharField("person's first name", max_length=30)
-
-In this example, the verbose name is ``"first name"``::
-
- first_name = models.CharField(max_length=30)
-
-:class:`~django.db.models.ForeignKey`,
-:class:`~django.db.models.ManyToManyField` and
-:class:`~django.db.models.OneToOneField` require the first argument to be a
-model class, so use the :attr:`~Field.verbose_name` keyword argument::
-
- poll = models.ForeignKey(Poll, verbose_name="the related poll")
- sites = models.ManyToManyField(Site, verbose_name="list of sites")
- place = models.OneToOneField(Place, verbose_name="related place")
-
-The convention is not to capitalize the first letter of the
-:attr:`~Field.verbose_name`. Django will automatically capitalize the first
-letter where it needs to.
-
-Relationships
--------------
-
-Clearly, the power of relational databases lies in relating tables to each
-other. Django offers ways to define the three most common types of database
-relationships: many-to-one, many-to-many and one-to-one.
-
-Many-to-one relationships
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To define a many-to-one relationship, use :class:`~django.db.models.ForeignKey`.
-You use it just like any other :class:`~django.db.models.Field` type: by
-including it as a class attribute of your model.
-
-:class:`~django.db.models.ForeignKey` requires a positional argument: the class
-to which the model is related.
-
-For example, if a ``Car`` model has a ``Manufacturer`` -- that is, a
-``Manufacturer`` makes multiple cars but each ``Car`` only has one
-``Manufacturer`` -- use the following definitions::
-
- class Manufacturer(models.Model):
- # ...
-
- class Car(models.Model):
- manufacturer = models.ForeignKey(Manufacturer)
- # ...
-
-You can also create :ref:`recursive relationships <recursive-relationships>` (an
-object with a many-to-one relationship to itself) and :ref:`relationships to
-models not yet defined <lazy-relationships>`; see :ref:`the model field
-reference <ref-foreignkey>` for details.
-
-It's suggested, but not required, that the name of a
-:class:`~django.db.models.ForeignKey` field (``manufacturer`` in the example
-above) be the name of the model, lowercase. You can, of course, call the field
-whatever you want. For example::
-
- class Car(models.Model):
- company_that_makes_it = models.ForeignKey(Manufacturer)
- # ...
-
-.. seealso::
-
- See the `Many-to-one relationship model example`_ for a full example.
-
-.. _Many-to-one relationship model example: http://www.djangoproject.com/documentation/models/many_to_one/
-
-:class:`~django.db.models.ForeignKey` fields also accept a number of extra
-arguments which are explained in :ref:`the model field reference
-<foreign-key-arguments>`. These options help define how the relationship should
-work; all are optional.
-
-Many-to-many relationships
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To define a many-to-many relationship, use
-:class:`~django.db.models.ManyToManyField`. You use it just like any other
-:class:`~django.db.models.Field` type: by including it as a class attribute of
-your model.
-
-:class:`~django.db.models.ManyToManyField` requires a positional argument: the
-class to which the model is related.
-
-For example, if a ``Pizza`` has multiple ``Topping`` objects -- that is, a
-``Topping`` can be on multiple pizzas and each ``Pizza`` has multiple toppings
--- here's how you'd represent that::
-
- class Topping(models.Model):
- # ...
-
- class Pizza(models.Model):
- # ...
- toppings = models.ManyToManyField(Topping)
-
-As with :class:`~django.db.models.ForeignKey`, you can also create
-:ref:`recursive relationships <recursive-relationships>` (an object with a
-many-to-many relationship to itself) and :ref:`relationships to models not yet
-defined <lazy-relationships>`; see :ref:`the model field reference
-<ref-manytomany>` for details.
-
-It's suggested, but not required, that the name of a
-:class:`~django.db.models.ManyToManyField` (``toppings`` in the example above)
-be a plural describing the set of related model objects.
-
-It doesn't matter which model gets the
-:class:`~django.db.models.ManyToManyField`, but you only need it in one of the
-models -- not in both.
-
-Generally, :class:`~django.db.models.ManyToManyField` instances should go in the
-object that's going to be edited in the admin interface, if you're using
-Django's admin. In the above example, ``toppings`` is in ``Pizza`` (rather than
-``Topping`` having a ``pizzas`` :class:`~django.db.models.ManyToManyField` )
-because it's more natural to think about a pizza having toppings than a
-topping being on multiple pizzas. The way it's set up above, the ``Pizza`` admin
-form would let users select the toppings.
-
-.. seealso::
-
- See the `Many-to-many relationship model example`_ for a full example.
-
-.. _Many-to-many relationship model example: http://www.djangoproject.com/documentation/models/many_to_many/
-
-:class:`~django.db.models.ManyToManyField` fields also accept a number of extra
-arguments which are explained in :ref:`the model field reference
-<manytomany-arguments>`. These options help define how the relationship should
-work; all are optional.
-
-.. _intermediary-manytomany:
-
-Extra fields on many-to-many relationships
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-When you're only dealing with simple many-to-many relationships such as
-mixing and matching pizzas and toppings, a standard :class:`~django.db.models.ManyToManyField` is all you need. However, sometimes
-you may need to associate data with the relationship between two models.
-
-For example, consider the case of an application tracking the musical groups
-which musicians belong to. There is a many-to-many relationship between a person
-and the groups of which they are a member, so you could use a
-:class:`~django.db.models.ManyToManyField` to represent this relationship.
-However, there is a lot of detail about the membership that you might want to
-collect, such as the date at which the person joined the group.
-
-For these situations, Django allows you to specify the model that will be used
-to govern the many-to-many relationship. You can then put extra fields on the
-intermediate model. The intermediate model is associated with the
-:class:`~django.db.models.ManyToManyField` using the
-:attr:`through <ManyToManyField.through>` argument to point to the model
-that will act as an intermediary. For our musician example, the code would look
-something like this::
-
- class Person(models.Model):
- name = models.CharField(max_length=128)
-
- def __unicode__(self):
- return self.name
-
- class Group(models.Model):
- name = models.CharField(max_length=128)
- members = models.ManyToManyField(Person, through='Membership')
-
- def __unicode__(self):
- return self.name
-
- class Membership(models.Model):
- person = models.ForeignKey(Person)
- group = models.ForeignKey(Group)
- date_joined = models.DateField()
- invite_reason = models.CharField(max_length=64)
-
-When you set up the intermediary model, you explicitly specify foreign
-keys to the models that are involved in the ManyToMany relation. This
-explicit declaration defines how the two models are related.
-
-There are a few restrictions on the intermediate model:
-
- * Your intermediate model must contain one - and *only* one - foreign key
- to the target model (this would be ``Person`` in our example). If you
- have more than one foreign key, a validation error will be raised.
-
- * Your intermediate model must contain one - and *only* one - foreign key
- to the source model (this would be ``Group`` in our example). If you
- have more than one foreign key, a validation error will be raised.
-
- * The only exception to this is a model which has a many-to-many
- relationship to itself, through an intermediary model. In this
- case, two foreign keys to the same model are permitted, but they
- will be treated as the two (different) sides of the many-to-many
- relation.
-
- * When defining a many-to-many relationship from a model to
- itself, using an intermediary model, you *must* use
- :attr:`symmetrical=False <ManyToManyField.symmetrical>` (see
- :ref:`the model field reference <manytomany-arguments>`).
-
-Now that you have set up your :class:`~django.db.models.ManyToManyField` to use
-your intermediary model (``Membership``, in this case), you're ready to start
-creating some many-to-many relationships. You do this by creating instances of
-the intermediate model::
-
- >>> ringo = Person.objects.create(name="Ringo Starr")
- >>> paul = Person.objects.create(name="Paul McCartney")
- >>> beatles = Group.objects.create(name="The Beatles")
- >>> m1 = Membership(person=ringo, group=beatles,
- ... date_joined=date(1962, 8, 16),
- ... invite_reason= "Needed a new drummer.")
- >>> m1.save()
- >>> beatles.members.all()
- [<Person: Ringo Starr>]
- >>> ringo.group_set.all()
- [<Group: The Beatles>]
- >>> m2 = Membership.objects.create(person=paul, group=beatles,
- ... date_joined=date(1960, 8, 1),
- ... invite_reason= "Wanted to form a band.")
- >>> beatles.members.all()
- [<Person: Ringo Starr>, <Person: Paul McCartney>]
-
-Unlike normal many-to-many fields, you *can't* use ``add``, ``create``,
-or assignment (i.e., ``beatles.members = [...]``) to create relationships::
-
- # THIS WILL NOT WORK
- >>> beatles.members.add(john)
- # NEITHER WILL THIS
- >>> beatles.members.create(name="George Harrison")
- # AND NEITHER WILL THIS
- >>> beatles.members = [john, paul, ringo, george]
-
-Why? You can't just create a relationship between a ``Person`` and a ``Group``
-- you need to specify all the detail for the relationship required by the
-``Membership`` model. The simple ``add``, ``create`` and assignment calls
-don't provide a way to specify this extra detail. As a result, they are
-disabled for many-to-many relationships that use an intermediate model.
-The only way to create this type of relationship is to create instances of the
-intermediate model.
-
-The :meth:`~django.db.models.fields.related.RelatedManager.remove` method is
-disabled for similar reasons. However, the
-:meth:`~django.db.models.fields.related.RelatedManager.clear` method can be
-used to remove all many-to-many relationships for an instance::
-
- # Beatles have broken up
- >>> beatles.members.clear()
-
-Once you have established the many-to-many relationships by creating instances
-of your intermediate model, you can issue queries. Just as with normal
-many-to-many relationships, you can query using the attributes of the
-many-to-many-related model::
-
- # Find all the groups with a member whose name starts with 'Paul'
- >>> Group.objects.filter(members__name__startswith='Paul')
- [<Group: The Beatles>]
-
-As you are using an intermediate model, you can also query on its attributes::
-
- # Find all the members of the Beatles that joined after 1 Jan 1961
- >>> Person.objects.filter(
- ... group__name='The Beatles',
- ... membership__date_joined__gt=date(1961,1,1))
- [<Person: Ringo Starr]
-
-
-One-to-one relationships
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-To define a one-to-one relationship, use
-:class:`~django.db.models.OneToOneField`. You use it just like any other
-``Field`` type: by including it as a class attribute of your model.
-
-This is most useful on the primary key of an object when that object "extends"
-another object in some way.
-
-:class:`~django.db.models.OneToOneField` requires a positional argument: the
-class to which the model is related.
-
-For example, if you were building a database of "places", you would
-build pretty standard stuff such as address, phone number, etc. in the
-database. Then, if you wanted to build a database of restaurants on
-top of the places, instead of repeating yourself and replicating those
-fields in the ``Restaurant`` model, you could make ``Restaurant`` have
-a :class:`~django.db.models.OneToOneField` to ``Place`` (because a
-restaurant "is a" place; in fact, to handle this you'd typically use
-:ref:`inheritance <model-inheritance>`, which involves an implicit
-one-to-one relation).
-
-As with :class:`~django.db.models.ForeignKey`, a
-:ref:`recursive relationship <recursive-relationships>`
-can be defined and
-:ref:`references to as-yet undefined models <lazy-relationships>`
-can be made; see :ref:`the model field reference <ref-onetoone>` for details.
-
-.. seealso::
-
- See the `One-to-one relationship model example`_ for a full example.
-
-.. _One-to-one relationship model example: http://www.djangoproject.com/documentation/models/one_to_one/
-
-.. versionadded:: 1.0
-
-:class:`~django.db.models.OneToOneField` fields also accept one optional argument
-described in the :ref:`model field reference <ref-onetoone>`.
-
-:class:`~django.db.models.OneToOneField` classes used to automatically become
-the primary key on a model. This is no longer true (although you can manually
-pass in the :attr:`~django.db.models.Field.primary_key` argument if you like).
-Thus, it's now possible to have multiple fields of type
-:class:`~django.db.models.OneToOneField` on a single model.
-
-Models across files
--------------------
-
-It's perfectly OK to relate a model to one from another app. To do this,
-import the related model at the top of the model that holds your model. Then,
-just refer to the other model class wherever needed. For example::
-
- from geography.models import ZipCode
-
- class Restaurant(models.Model):
- # ...
- zip_code = models.ForeignKey(ZipCode)
-
-Field name restrictions
------------------------
-
-Django places only two restrictions on model field names:
-
- 1. A field name cannot be a Python reserved word, because that would result
- in a Python syntax error. For example::
-
- class Example(models.Model):
- pass = models.IntegerField() # 'pass' is a reserved word!
-
- 2. A field name cannot contain more than one underscore in a row, due to
- the way Django's query lookup syntax works. For example::
-
- class Example(models.Model):
- foo__bar = models.IntegerField() # 'foo__bar' has two underscores!
-
-These limitations can be worked around, though, because your field name doesn't
-necessarily have to match your database column name. See the
-:attr:`~Field.db_column` option.
-
-SQL reserved words, such as ``join``, ``where`` or ``select``, *are* allowed as
-model field names, because Django escapes all database table names and column
-names in every underlying SQL query. It uses the quoting syntax of your
-particular database engine.
-
-Custom field types
-------------------
-
-.. versionadded:: 1.0
-
-If one of the existing model fields cannot be used to fit your purposes, or if
-you wish to take advantage of some less common database column types, you can
-create your own field class. Full coverage of creating your own fields is
-provided in :doc:`/howto/custom-model-fields`.
-
-.. _meta-options:
-
-Meta options
-============
-
-Give your model metadata by using an inner ``class Meta``, like so::
-
- class Ox(models.Model):
- horn_length = models.IntegerField()
-
- class Meta:
- ordering = ["horn_length"]
- verbose_name_plural = "oxen"
-
-Model metadata is "anything that's not a field", such as ordering options
-(:attr:`~Options.ordering`), database table name (:attr:`~Options.db_table`), or
-human-readable singular and plural names (:attr:`~Options.verbose_name` and
-:attr:`~Options.verbose_name_plural`). None are required, and adding ``class
-Meta`` to a model is completely optional.
-
-A complete list of all possible ``Meta`` options can be found in the :doc:`model
-option reference </ref/models/options>`.
-
-.. _model-methods:
-
-Model methods
-=============
-
-Define custom methods on a model to add custom "row-level" functionality to your
-objects. Whereas :class:`~django.db.models.Manager` methods are intended to do
-"table-wide" things, model methods should act on a particular model instance.
-
-This is a valuable technique for keeping business logic in one place -- the
-model.
-
-For example, this model has a few custom methods::
-
- from django.contrib.localflavor.us.models import USStateField
-
- class Person(models.Model):
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
- birth_date = models.DateField()
- address = models.CharField(max_length=100)
- city = models.CharField(max_length=50)
- state = USStateField() # Yes, this is America-centric...
-
- def baby_boomer_status(self):
- "Returns the person's baby-boomer status."
- import datetime
- if datetime.date(1945, 8, 1) <= self.birth_date <= datetime.date(1964, 12, 31):
- return "Baby boomer"
- if self.birth_date < datetime.date(1945, 8, 1):
- return "Pre-boomer"
- return "Post-boomer"
-
- def is_midwestern(self):
- "Returns True if this person is from the Midwest."
- return self.state in ('IL', 'WI', 'MI', 'IN', 'OH', 'IA', 'MO')
-
- def _get_full_name(self):
- "Returns the person's full name."
- return '%s %s' % (self.first_name, self.last_name)
- full_name = property(_get_full_name)
-
-The last method in this example is a :term:`property`. `Read more about
-properties`_.
-
-.. _Read more about properties: http://www.python.org/download/releases/2.2/descrintro/#property
-
-The :doc:`model instance reference </ref/models/instances>` has a complete list
-of :ref:`methods automatically given to each model <model-instance-methods>`.
-You can override most of these -- see `overriding predefined model methods`_,
-below -- but there are a couple that you'll almost always want to define:
-
- :meth:`~Model.__unicode__`
- A Python "magic method" that returns a unicode "representation" of any
- object. This is what Python and Django will use whenever a model
- instance needs to be coerced and displayed as a plain string. Most
- notably, this happens when you display an object in an interactive
- console or in the admin.
-
- You'll always want to define this method; the default isn't very helpful
- at all.
-
- :meth:`~Model.get_absolute_url`
- This tells Django how to calculate the URL for an object. Django uses
- this in its admin interface, and any time it needs to figure out a URL
- for an object.
-
- Any object that has a URL that uniquely identifies it should define this
- method.
-
-.. _overriding-model-methods:
-
-Overriding predefined model methods
------------------------------------
-
-There's another set of :ref:`model methods <model-instance-methods>` that
-encapsulate a bunch of database behavior that you'll want to customize. In
-particular you'll often want to change the way :meth:`~Model.save` and
-:meth:`~Model.delete` work.
-
-You're free to override these methods (and any other model method) to alter
-behavior.
-
-A classic use-case for overriding the built-in methods is if you want something
-to happen whenever you save an object. For example (see
-:meth:`~Model.save` for documentation of the parameters it accepts)::
-
- class Blog(models.Model):
- name = models.CharField(max_length=100)
- tagline = models.TextField()
-
- def save(self, *args, **kwargs):
- do_something()
- super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
- do_something_else()
-
-You can also prevent saving::
-
- class Blog(models.Model):
- name = models.CharField(max_length=100)
- tagline = models.TextField()
-
- def save(self, *args, **kwargs):
- if self.name == "Yoko Ono's blog":
- return # Yoko shall never have her own blog!
- else:
- super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
-
-It's important to remember to call the superclass method -- that's
-that ``super(Blog, self).save(*args, **kwargs)`` business -- to ensure
-that the object still gets saved into the database. If you forget to
-call the superclass method, the default behavior won't happen and the
-database won't get touched.
-
-It's also important that you pass through the arguments that can be
-passed to the model method -- that's what the ``*args, **kwargs`` bit
-does. Django will, from time to time, extend the capabilities of
-built-in model methods, adding new arguments. If you use ``*args,
-**kwargs`` in your method definitions, you are guaranteed that your
-code will automatically support those arguments when they are added.
-
-Executing custom SQL
---------------------
-
-Another common pattern is writing custom SQL statements in model methods and
-module-level methods. For more details on using raw SQL, see the documentation
-on :doc:`using raw SQL</topics/db/sql>`.
-
-.. _model-inheritance:
-
-Model inheritance
-=================
-
-.. versionadded:: 1.0
-
-Model inheritance in Django works almost identically to the way normal
-class inheritance works in Python. The only decision you have to make
-is whether you want the parent models to be models in their own right
-(with their own database tables), or if the parents are just holders
-of common information that will only be visible through the child
-models.
-
-There are three styles of inheritance that are possible in Django.
-
- 1. Often, you will just want to use the parent class to hold information that
- you don't want to have to type out for each child model. This class isn't
- going to ever be used in isolation, so :ref:`abstract-base-classes` are
- what you're after.
- 2. If you're subclassing an existing model (perhaps something from another
- application entirely) and want each model to have its own database table,
- :ref:`multi-table-inheritance` is the way to go.
- 3. Finally, if you only want to modify the Python-level behaviour of a model,
- without changing the models fields in any way, you can use
- :ref:`proxy-models`.
-
-.. _abstract-base-classes:
-
-Abstract base classes
----------------------
-
-Abstract base classes are useful when you want to put some common
-information into a number of other models. You write your base class
-and put ``abstract=True`` in the :ref:`Meta <meta-options>`
-class. This model will then not be used to create any database
-table. Instead, when it is used as a base class for other models, its
-fields will be added to those of the child class. It is an error to
-have fields in the abstract base class with the same name as those in
-the child (and Django will raise an exception).
-
-An example::
-
- class CommonInfo(models.Model):
- name = models.CharField(max_length=100)
- age = models.PositiveIntegerField()
-
- class Meta:
- abstract = True
-
- class Student(CommonInfo):
- home_group = models.CharField(max_length=5)
-
-The ``Student`` model will have three fields: ``name``, ``age`` and
-``home_group``. The ``CommonInfo`` model cannot be used as a normal Django
-model, since it is an abstract base class. It does not generate a database
-table or have a manager, and cannot be instantiated or saved directly.
-
-For many uses, this type of model inheritance will be exactly what you want.
-It provides a way to factor out common information at the Python level, whilst
-still only creating one database table per child model at the database level.
-
-``Meta`` inheritance
-~~~~~~~~~~~~~~~~~~~~
-
-When an abstract base class is created, Django makes any :ref:`Meta <meta-options>`
-inner class you declared in the base class available as an
-attribute. If a child class does not declare its own :ref:`Meta <meta-options>`
-class, it will inherit the parent's :ref:`Meta <meta-options>`. If the child wants to
-extend the parent's :ref:`Meta <meta-options>` class, it can subclass it. For example::
-
- class CommonInfo(models.Model):
- ...
- class Meta:
- abstract = True
- ordering = ['name']
-
- class Student(CommonInfo):
- ...
- class Meta(CommonInfo.Meta):
- db_table = 'student_info'
-
-Django does make one adjustment to the :ref:`Meta <meta-options>` class of an abstract base
-class: before installing the :ref:`Meta <meta-options>` attribute, it sets ``abstract=False``.
-This means that children of abstract base classes don't automatically become
-abstract classes themselves. Of course, you can make an abstract base class
-that inherits from another abstract base class. You just need to remember to
-explicitly set ``abstract=True`` each time.
-
-Some attributes won't make sense to include in the :ref:`Meta <meta-options>` class of an
-abstract base class. For example, including ``db_table`` would mean that all
-the child classes (the ones that don't specify their own :ref:`Meta <meta-options>`) would use
-the same database table, which is almost certainly not what you want.
-
-.. _abstract-related-name:
-
-Be careful with ``related_name``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you are using the :attr:`~django.db.models.ForeignKey.related_name` attribute on a ``ForeignKey`` or
-``ManyToManyField``, you must always specify a *unique* reverse name for the
-field. This would normally cause a problem in abstract base classes, since the
-fields on this class are included into each of the child classes, with exactly
-the same values for the attributes (including :attr:`~django.db.models.ForeignKey.related_name`) each time.
-
-.. versionchanged:: 1.2
-
-To work around this problem, when you are using :attr:`~django.db.models.ForeignKey.related_name` in an
-abstract base class (only), part of the name should contain
-``'%(app_label)s'`` and ``'%(class)s'``.
-
-- ``'%(class)s'`` is replaced by the lower-cased name of the child class
- that the field is used in.
-- ``'%(app_label)s'`` is replaced by the lower-cased name of the app the child
- class is contained within. Each installed application name must be unique
- and the model class names within each app must also be unique, therefore the
- resulting name will end up being different.
-
-For example, given an app ``common/models.py``::
-
- class Base(models.Model):
- m2m = models.ManyToManyField(OtherModel, related_name="%(app_label)s_%(class)s_related")
-
- class Meta:
- abstract = True
-
- class ChildA(Base):
- pass
-
- class ChildB(Base):
- pass
-
-Along with another app ``rare/models.py``::
-
- from common.models import Base
-
- class ChildB(Base):
- pass
-
-The reverse name of the ``commmon.ChildA.m2m`` field will be
-``common_childa_related``, whilst the reverse name of the
-``common.ChildB.m2m`` field will be ``common_childb_related``, and finally the
-reverse name of the ``rare.ChildB.m2m`` field will be ``rare_childb_related``.
-It is up to you how you use the ``'%(class)s'`` and ``'%(app_label)s`` portion
-to construct your related name, but if you forget to use it, Django will raise
-errors when you validate your models (or run :djadmin:`syncdb`).
-
-If you don't specify a :attr:`~django.db.models.ForeignKey.related_name`
-attribute for a field in an abstract base class, the default reverse name will
-be the name of the child class followed by ``'_set'``, just as it normally
-would be if you'd declared the field directly on the child class. For example,
-in the above code, if the :attr:`~django.db.models.ForeignKey.related_name`
-attribute was omitted, the reverse name for the ``m2m`` field would be
-``childa_set`` in the ``ChildA`` case and ``childb_set`` for the ``ChildB``
-field.
-
-.. _multi-table-inheritance:
-
-Multi-table inheritance
------------------------
-
-The second type of model inheritance supported by Django is when each model in
-the hierarchy is a model all by itself. Each model corresponds to its own
-database table and can be queried and created individually. The inheritance
-relationship introduces links between the child model and each of its parents
-(via an automatically-created :class:`~django.db.models.fields.OneToOneField`).
-For example::
-
- class Place(models.Model):
- name = models.CharField(max_length=50)
- address = models.CharField(max_length=80)
-
- class Restaurant(Place):
- serves_hot_dogs = models.BooleanField()
- serves_pizza = models.BooleanField()
-
-All of the fields of ``Place`` will also be available in ``Restaurant``,
-although the data will reside in a different database table. So these are both
-possible::
-
- >>> Place.objects.filter(name="Bob's Cafe")
- >>> Restaurant.objects.filter(name="Bob's Cafe")
-
-If you have a ``Place`` that is also a ``Restaurant``, you can get from the
-``Place`` object to the ``Restaurant`` object by using the lower-case version
-of the model name::
-
- >>> p = Place.objects.get(id=12)
- # If p is a Restaurant object, this will give the child class:
- >>> p.restaurant
- <Restaurant: ...>
-
-However, if ``p`` in the above example was *not* a ``Restaurant`` (it had been
-created directly as a ``Place`` object or was the parent of some other class),
-referring to ``p.restaurant`` would raise a Restaurant.DoesNotExist exception.
-
-``Meta`` and multi-table inheritance
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In the multi-table inheritance situation, it doesn't make sense for a child
-class to inherit from its parent's :ref:`Meta <meta-options>` class. All the :ref:`Meta <meta-options>` options
-have already been applied to the parent class and applying them again would
-normally only lead to contradictory behavior (this is in contrast with the
-abstract base class case, where the base class doesn't exist in its own
-right).
-
-So a child model does not have access to its parent's :ref:`Meta
-<meta-options>` class. However, there are a few limited cases where the child
-inherits behavior from the parent: if the child does not specify an
-:attr:`~django.db.models.Options.ordering` attribute or a
-:attr:`~django.db.models.Options.get_latest_by` attribute, it will inherit
-these from its parent.
-
-If the parent has an ordering and you don't want the child to have any natural
-ordering, you can explicitly disable it::
-
- class ChildModel(ParentModel):
- ...
- class Meta:
- # Remove parent's ordering effect
- ordering = []
-
-Inheritance and reverse relations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Because multi-table inheritance uses an implicit
-:class:`~django.db.models.OneToOneField` to link the child and
-the parent, it's possible to move from the parent down to the child,
-as in the above example. However, this uses up the name that is the
-default :attr:`~django.db.models.ForeignKey.related_name` value for
-:class:`~django.db.models.ForeignKey` and
-:class:`~django.db.models.ManyToManyField` relations. If you
-are putting those types of relations on a subclass of another model,
-you **must** specify the
-:attr:`~django.db.models.ForeignKey.related_name` attribute on each
-such field. If you forget, Django will raise an error when you run
-:djadmin:`validate` or :djadmin:`syncdb`.
-
-For example, using the above ``Place`` class again, let's create another
-subclass with a :class:`~django.db.models.ManyToManyField`::
-
- class Supplier(Place):
- # Must specify related_name on all relations.
- customers = models.ManyToManyField(Restaurant, related_name='provider')
-
-
-Specifying the parent link field
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-As mentioned, Django will automatically create a
-:class:`~django.db.models.OneToOneField` linking your child
-class back any non-abstract parent models. If you want to control the
-name of the attribute linking back to the parent, you can create your
-own :class:`~django.db.models.OneToOneField` and set
-:attr:`parent_link=True <django.db.models.OneToOneField.parent_link>`
-to indicate that your field is the link back to the parent class.
-
-.. _proxy-models:
-
-Proxy models
-------------
-
-.. versionadded:: 1.1
-
-When using :ref:`multi-table inheritance <multi-table-inheritance>`, a new
-database table is created for each subclass of a model. This is usually the
-desired behavior, since the subclass needs a place to store any additional
-data fields that are not present on the base class. Sometimes, however, you
-only want to change the Python behavior of a model -- perhaps to change the
-default manager, or add a new method.
-
-This is what proxy model inheritance is for: creating a *proxy* for the
-original model. You can create, delete and update instances of the proxy model
-and all the data will be saved as if you were using the original (non-proxied)
-model. The difference is that you can change things like the default model
-ordering or the default manager in the proxy, without having to alter the
-original.
-
-Proxy models are declared like normal models. You tell Django that it's a
-proxy model by setting the :attr:`~django.db.models.Options.proxy` attribute of
-the ``Meta`` class to ``True``.
-
-For example, suppose you want to add a method to the standard
-:class:`~django.contrib.auth.models.User` model that will be used in your
-templates. You can do it like this::
-
- from django.contrib.auth.models import User
-
- class MyUser(User):
- class Meta:
- proxy = True
-
- def do_something(self):
- ...
-
-The ``MyUser`` class operates on the same database table as its parent
-:class:`~django.contrib.auth.models.User` class. In particular, any new
-instances of :class:`~django.contrib.auth.models.User` will also be accessible
-through ``MyUser``, and vice-versa::
-
- >>> u = User.objects.create(username="foobar")
- >>> MyUser.objects.get(username="foobar")
- <MyUser: foobar>
-
-You could also use a proxy model to define a different default ordering on a
-model. The standard :class:`~django.contrib.auth.models.User` model has no
-ordering defined on it (intentionally; sorting is expensive and we don't want
-to do it all the time when we fetch users). You might want to regularly order
-by the ``username`` attribute when you use the proxy. This is easy::
-
- class OrderedUser(User):
- class Meta:
- ordering = ["username"]
- proxy = True
-
-Now normal :class:`~django.contrib.auth.models.User` queries will be unordered
-and ``OrderedUser`` queries will be ordered by ``username``.
-
-QuerySets still return the model that was requested
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-There is no way to have Django return, say, a ``MyUser`` object whenever you
-query for :class:`~django.contrib.auth.models.User` objects. A queryset for
-``User`` objects will return those types of objects. The whole point of proxy
-objects is that code relying on the original ``User`` will use those and your
-own code can use the extensions you included (that no other code is relying on
-anyway). It is not a way to replace the ``User`` (or any other) model
-everywhere with something of your own creation.
-
-Base class restrictions
-~~~~~~~~~~~~~~~~~~~~~~~
-
-A proxy model must inherit from exactly one non-abstract model class. You
-can't inherit from multiple non-abstract models as the proxy model doesn't
-provide any connection between the rows in the different database tables. A
-proxy model can inherit from any number of abstract model classes, providing
-they do *not* define any model fields.
-
-Proxy models inherit any ``Meta`` options that they don't define from their
-non-abstract model parent (the model they are proxying for).
-
-Proxy model managers
-~~~~~~~~~~~~~~~~~~~~
-
-If you don't specify any model managers on a proxy model, it inherits the
-managers from its model parents. If you define a manager on the proxy model,
-it will become the default, although any managers defined on the parent
-classes will still be available.
-
-Continuing our example from above, you could change the default manager used
-when you query the ``User`` model like this::
-
- class NewManager(models.Manager):
- ...
-
- class MyUser(User):
- objects = NewManager()
-
- class Meta:
- proxy = True
-
-If you wanted to add a new manager to the Proxy, without replacing the
-existing default, you can use the techniques described in the :ref:`custom
-manager <custom-managers-and-inheritance>` documentation: create a base class
-containing the new managers and inherit that after the primary base class::
-
- # Create an abstract class for the new manager.
- class ExtraManagers(models.Model):
- secondary = NewManager()
-
- class Meta:
- abstract = True
-
- class MyUser(User, ExtraManagers):
- class Meta:
- proxy = True
-
-You probably won't need to do this very often, but, when you do, it's
-possible.
-
-.. _proxy-vs-unmanaged-models:
-
-Differences between proxy inheritance and unmanaged models
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Proxy model inheritance might look fairly similar to creating an unmanaged
-model, using the :attr:`~django.db.models.Options.managed` attribute on a
-model's ``Meta`` class. The two alternatives are not quite the same and it's
-worth considering which one you should use.
-
-One difference is that you can (and, in fact, must unless you want an empty
-model) specify model fields on models with ``Meta.managed=False``. You could,
-with careful setting of :attr:`Meta.db_table
-<django.db.models.Options.db_table>` create an unmanaged model that shadowed
-an existing model and add Python methods to it. However, that would be very
-repetitive and fragile as you need to keep both copies synchronized if you
-make any changes.
-
-The other difference that is more important for proxy models, is how model
-managers are handled. Proxy models are intended to behave exactly like the
-model they are proxying for. So they inherit the parent model's managers,
-including the default manager. In the normal multi-table model inheritance
-case, children do not inherit managers from their parents as the custom
-managers aren't always appropriate when extra fields are involved. The
-:ref:`manager documentation <custom-managers-and-inheritance>` has more
-details about this latter case.
-
-When these two features were implemented, attempts were made to squash them
-into a single option. It turned out that interactions with inheritance, in
-general, and managers, in particular, made the API very complicated and
-potentially difficult to understand and use. It turned out that two options
-were needed in any case, so the current separation arose.
-
-So, the general rules are:
-
- 1. If you are mirroring an existing model or database table and don't want
- all the original database table columns, use ``Meta.managed=False``.
- That option is normally useful for modeling database views and tables
- not under the control of Django.
- 2. If you are wanting to change the Python-only behavior of a model, but
- keep all the same fields as in the original, use ``Meta.proxy=True``.
- This sets things up so that the proxy model is an exact copy of the
- storage structure of the original model when data is saved.
-
-Multiple inheritance
---------------------
-
-Just as with Python's subclassing, it's possible for a Django model to inherit
-from multiple parent models. Keep in mind that normal Python name resolution
-rules apply. The first base class that a particular name (e.g. :ref:`Meta
-<meta-options>`) appears in will be the one that is used; for example, this
-means that if multiple parents contain a :ref:`Meta <meta-options>` class,
-only the first one is going to be used, and all others will be ignored.
-
-Generally, you won't need to inherit from multiple parents. The main use-case
-where this is useful is for "mix-in" classes: adding a particular extra
-field or method to every class that inherits the mix-in. Try to keep your
-inheritance hierarchies as simple and straightforward as possible so that you
-won't have to struggle to work out where a particular piece of information is
-coming from.
-
-Field name "hiding" is not permitted
--------------------------------------
-
-In normal Python class inheritance, it is permissible for a child class to
-override any attribute from the parent class. In Django, this is not permitted
-for attributes that are :class:`~django.db.models.fields.Field` instances (at
-least, not at the moment). If a base class has a field called ``author``, you
-cannot create another model field called ``author`` in any class that inherits
-from that base class.
-
-Overriding fields in a parent model leads to difficulties in areas such as
-initialising new instances (specifying which field is being initialized in
-``Model.__init__``) and serialization. These are features which normal Python
-class inheritance doesn't have to deal with in quite the same way, so the
-difference between Django model inheritance and Python class inheritance isn't
-arbitrary.
-
-This restriction only applies to attributes which are
-:class:`~django.db.models.fields.Field` instances. Normal Python attributes
-can be overridden if you wish. It also only applies to the name of the
-attribute as Python sees it: if you are manually specifying the database
-column name, you can have the same column name appearing in both a child and
-an ancestor model for multi-table inheritance (they are columns in two
-different database tables).
-
-Django will raise a :exc:`~django.core.exceptions.FieldError` if you override
-any model field in any ancestor model.
diff --git a/parts/django/docs/topics/db/multi-db.txt b/parts/django/docs/topics/db/multi-db.txt
deleted file mode 100644
index 1a939b0..0000000
--- a/parts/django/docs/topics/db/multi-db.txt
+++ /dev/null
@@ -1,574 +0,0 @@
-==================
-Multiple databases
-==================
-
-.. versionadded:: 1.2
-
-This topic guide describes Django's support for interacting with
-multiple databases. Most of the rest of Django's documentation assumes
-you are interacting with a single database. If you want to interact
-with multiple databases, you'll need to take some additional steps.
-
-Defining your databases
-=======================
-
-The first step to using more than one database with Django is to tell
-Django about the database servers you'll be using. This is done using
-the :setting:`DATABASES` setting. This setting maps database aliases,
-which are a way to refer to a specific database throughout Django, to
-a dictionary of settings for that specific connection. The settings in
-the inner dictionaries are described fully in the :setting:`DATABASES`
-documentation.
-
-Databases can have any alias you choose. However, the alias
-``default`` has special significance. Django uses the database with
-the alias of ``default`` when no other database has been selected. If
-you don't have a ``default`` database, you need to be careful to
-always specify the database that you want to use.
-
-The following is an example ``settings.py`` snippet defining two
-databases -- a default PostgreSQL database and a MySQL database called
-``users``:
-
-.. code-block:: python
-
- DATABASES = {
- 'default': {
- 'NAME': 'app_data',
- 'ENGINE': 'django.db.backends.postgresql_psycopg2',
- 'USER': 'postgres_user',
- 'PASSWORD': 's3krit'
- },
- 'users': {
- 'NAME': 'user_data',
- 'ENGINE': 'django.db.backends.mysql',
- 'USER': 'mysql_user',
- 'PASSWORD': 'priv4te'
- }
- }
-
-If you attempt to access a database that you haven't defined in your
-:setting:`DATABASES` setting, Django will raise a
-``django.db.utils.ConnectionDoesNotExist`` exception.
-
-Synchronizing your databases
-============================
-
-The :djadmin:`syncdb` management command operates on one database at a
-time. By default, it operates on the ``default`` database, but by
-providing a :djadminopt:`--database` argument, you can tell syncdb to
-synchronize a different database. So, to synchronize all models onto
-all databases in our example, you would need to call::
-
- $ ./manage.py syncdb
- $ ./manage.py syncdb --database=users
-
-If you don't want every application to be synchronized onto a
-particular database, you can define a :ref:`database
-router<topics-db-multi-db-routing>` that implements a policy
-constraining the availability of particular models.
-
-Alternatively, if you want fine-grained control of synchronization,
-you can pipe all or part of the output of :djadmin:`sqlall` for a
-particular application directly into your database prompt, like this::
-
- $ ./manage.py sqlall sales | ./manage.py dbshell
-
-Using other management commands
--------------------------------
-
-The other ``django-admin.py`` commands that interact with the database
-operate in the same way as :djadmin:`syncdb` -- they only ever operate
-on one database at a time, using :djadminopt:`--database` to control
-the database used.
-
-.. _topics-db-multi-db-routing:
-
-Automatic database routing
-==========================
-
-The easiest way to use multiple databases is to set up a database
-routing scheme. The default routing scheme ensures that objects remain
-'sticky' to their original database (i.e., an object retrieved from
-the ``foo`` database will be saved on the same database). The default
-routing scheme ensures that if a database isn't specified, all queries
-fall back to the ``default`` database.
-
-You don't have to do anything to activate the default routing scheme
--- it is provided 'out of the box' on every Django project. However,
-if you want to implement more interesting database allocation
-behaviors, you can define and install your own database routers.
-
-Database routers
-----------------
-
-A database Router is a class that provides up to four methods:
-
-.. method:: db_for_read(model, **hints)
-
- Suggest the database that should be used for read operations for
- objects of type ``model``.
-
- If a database operation is able to provide any additional
- information that might assist in selecting a database, it will be
- provided in the ``hints`` dictionary. Details on valid hints are
- provided :ref:`below <topics-db-multi-db-hints>`.
-
- Returns None if there is no suggestion.
-
-.. method:: db_for_write(model, **hints)
-
- Suggest the database that should be used for writes of objects of
- type Model.
-
- If a database operation is able to provide any additional
- information that might assist in selecting a database, it will be
- provided in the ``hints`` dictionary. Details on valid hints are
- provided :ref:`below <topics-db-multi-db-hints>`.
-
- Returns None if there is no suggestion.
-
-.. method:: allow_relation(obj1, obj2, **hints)
-
- Return True if a relation between obj1 and obj2 should be
- allowed, False if the relation should be prevented, or None if
- the router has no opinion. This is purely a validation operation,
- used by foreign key and many to many operations to determine if a
- relation should be allowed between two objects.
-
-.. method:: allow_syncdb(db, model)
-
- Determine if the ``model`` should be synchronized onto the
- database with alias ``db``. Return True if the model should be
- synchronized, False if it should not be synchronized, or None if
- the router has no opinion. This method can be used to determine
- the availability of a model on a given database.
-
-A router doesn't have to provide *all* these methods - it omit one or
-more of them. If one of the methods is omitted, Django will skip that
-router when performing the relevant check.
-
-.. _topics-db-multi-db-hints:
-
-Hints
-~~~~~
-
-The hints received by the database router can be used to decide which
-database should receive a given request.
-
-At present, the only hint that will be provided is ``instance``, an
-object instance that is related to the read or write operation that is
-underway. This might be the instance that is being saved, or it might
-be an instance that is being added in a many-to-many relation. In some
-cases, no instance hint will be provided at all. The router checks for
-the existence of an instance hint, and determine if that hint should be
-used to alter routing behavior.
-
-Using routers
--------------
-
-Database routers are installed using the :setting:`DATABASE_ROUTERS`
-setting. This setting defines a list of class names, each specifying a
-router that should be used by the master router
-(``django.db.router``).
-
-The master router is used by Django's database operations to allocate
-database usage. Whenever a query needs to know which database to use,
-it calls the master router, providing a model and a hint (if
-available). Django then tries each router in turn until a database
-suggestion can be found. If no suggestion can be found, it tries the
-current ``_state.db`` of the hint instance. If a hint instance wasn't
-provided, or the instance doesn't currently have database state, the
-master router will allocate the ``default`` database.
-
-An example
-----------
-
-.. admonition:: Example purposes only!
-
- This example is intended as a demonstration of how the router
- infrastructure can be used to alter database usage. It
- intentionally ignores some complex issues in order to
- demonstrate how routers are used.
-
- This example won't work if any of the models in ``myapp`` contain
- relationships to models outside of the ``other`` database.
- :ref:`Cross-database relationships <no_cross_database_relations>`
- introduce referential integrity problems that Django can't
- currently handle.
-
- The master/slave configuration described is also flawed -- it
- doesn't provide any solution for handling replication lag (i.e.,
- query inconsistencies introduced because of the time taken for a
- write to propagate to the slaves). It also doesn't consider the
- interaction of transactions with the database utilization strategy.
-
-So - what does this mean in practice? Say you want ``myapp`` to
-exist on the ``other`` database, and you want all other models in a
-master/slave relationship between the databases ``master``, ``slave1`` and
-``slave2``. To implement this, you would need 2 routers::
-
- class MyAppRouter(object):
- """A router to control all database operations on models in
- the myapp application"""
-
- def db_for_read(self, model, **hints):
- "Point all operations on myapp models to 'other'"
- if model._meta.app_label == 'myapp':
- return 'other'
- return None
-
- def db_for_write(self, model, **hints):
- "Point all operations on myapp models to 'other'"
- if model._meta.app_label == 'myapp':
- return 'other'
- return None
-
- def allow_relation(self, obj1, obj2, **hints):
- "Allow any relation if a model in myapp is involved"
- if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp':
- return True
- return None
-
- def allow_syncdb(self, db, model):
- "Make sure the myapp app only appears on the 'other' db"
- if db == 'other':
- return model._meta.app_label == 'myapp'
- elif model._meta.app_label == 'myapp':
- return False
- return None
-
- class MasterSlaveRouter(object):
- """A router that sets up a simple master/slave configuration"""
-
- def db_for_read(self, model, **hints):
- "Point all read operations to a random slave"
- return random.choice(['slave1','slave2'])
-
- def db_for_write(self, model, **hints):
- "Point all write operations to the master"
- return 'master'
-
- def allow_relation(self, obj1, obj2, **hints):
- "Allow any relation between two objects in the db pool"
- db_list = ('master','slave1','slave2')
- if obj1._state.db in db_list and obj2._state.db in db_list:
- return True
- return None
-
- def allow_syncdb(self, db, model):
- "Explicitly put all models on all databases."
- return True
-
-Then, in your settings file, add the following (substituting ``path.to.`` with
-the actual python path to the module where you define the routers)::
-
- DATABASE_ROUTERS = ['path.to.MyAppRouter', 'path.to.MasterSlaveRouter']
-
-The order in which routers are processed is significant. Routers will
-be queried in the order the are listed in the
-:setting:`DATABASE_ROUTERS` setting . In this example, the
-``MyAppRouter`` is processed before the ``MasterSlaveRouter``, and as a
-result, decisions concerning the models in ``myapp`` are processed
-before any other decision is made. If the :setting:`DATABASE_ROUTERS`
-setting listed the two routers in the other order,
-``MasterSlaveRouter.allow_syncdb()`` would be processed first. The
-catch-all nature of the MasterSlaveRouter implementation would mean
-that all models would be available on all databases.
-
-With this setup installed, lets run some Django code::
-
- >>> # This retrieval will be performed on the 'credentials' database
- >>> fred = User.objects.get(username='fred')
- >>> fred.first_name = 'Frederick'
-
- >>> # This save will also be directed to 'credentials'
- >>> fred.save()
-
- >>> # These retrieval will be randomly allocated to a slave database
- >>> dna = Person.objects.get(name='Douglas Adams')
-
- >>> # A new object has no database allocation when created
- >>> mh = Book(title='Mostly Harmless')
-
- >>> # This assignment will consult the router, and set mh onto
- >>> # the same database as the author object
- >>> mh.author = dna
-
- >>> # This save will force the 'mh' instance onto the master database...
- >>> mh.save()
-
- >>> # ... but if we re-retrieve the object, it will come back on a slave
- >>> mh = Book.objects.get(title='Mostly Harmless')
-
-
-Manually selecting a database
-=============================
-
-Django also provides an API that allows you to maintain complete control
-over database usage in your code. A manually specified database allocation
-will take priority over a database allocated by a router.
-
-Manually selecting a database for a ``QuerySet``
-------------------------------------------------
-
-You can select the database for a ``QuerySet`` at any point in the
-``QuerySet`` "chain." Just call ``using()`` on the ``QuerySet`` to get
-another ``QuerySet`` that uses the specified database.
-
-``using()`` takes a single argument: the alias of the database on
-which you want to run the query. For example::
-
- >>> # This will run on the 'default' database.
- >>> Author.objects.all()
-
- >>> # So will this.
- >>> Author.objects.using('default').all()
-
- >>> # This will run on the 'other' database.
- >>> Author.objects.using('other').all()
-
-Selecting a database for ``save()``
------------------------------------
-
-Use the ``using`` keyword to ``Model.save()`` to specify to which
-database the data should be saved.
-
-For example, to save an object to the ``legacy_users`` database, you'd
-use this::
-
- >>> my_object.save(using='legacy_users')
-
-If you don't specify ``using``, the ``save()`` method will save into
-the default database allocated by the routers.
-
-Moving an object from one database to another
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you've saved an instance to one database, it might be tempting to
-use ``save(using=...)`` as a way to migrate the instance to a new
-database. However, if you don't take appropriate steps, this could
-have some unexpected consequences.
-
-Consider the following example::
-
- >>> p = Person(name='Fred')
- >>> p.save(using='first') # (statement 1)
- >>> p.save(using='second') # (statement 2)
-
-In statement 1, a new ``Person`` object is saved to the ``first``
-database. At this time, ``p`` doesn't have a primary key, so Django
-issues a SQL ``INSERT`` statement. This creates a primary key, and
-Django assigns that primary key to ``p``.
-
-When the save occurs in statement 2, ``p`` already has a primary key
-value, and Django will attempt to use that primary key on the new
-database. If the primary key value isn't in use in the ``second``
-database, then you won't have any problems -- the object will be
-copied to the new database.
-
-However, if the primary key of ``p`` is already in use on the
-``second`` database, the existing object in the ``second`` database
-will be overridden when ``p`` is saved.
-
-You can avoid this in two ways. First, you can clear the primary key
-of the instance. If an object has no primary key, Django will treat it
-as a new object, avoiding any loss of data on the ``second``
-database::
-
- >>> p = Person(name='Fred')
- >>> p.save(using='first')
- >>> p.pk = None # Clear the primary key.
- >>> p.save(using='second') # Write a completely new object.
-
-The second option is to use the ``force_insert`` option to ``save()``
-to ensure that Django does a SQL ``INSERT``::
-
- >>> p = Person(name='Fred')
- >>> p.save(using='first')
- >>> p.save(using='second', force_insert=True)
-
-This will ensure that the person named ``Fred`` will have the same
-primary key on both databases. If that primary key is already in use
-when you try to save onto the ``second`` database, an error will be
-raised.
-
-Selecting a database to delete from
------------------------------------
-
-By default, a call to delete an existing object will be executed on
-the same database that was used to retrieve the object in the first
-place::
-
- >>> u = User.objects.using('legacy_users').get(username='fred')
- >>> u.delete() # will delete from the `legacy_users` database
-
-To specify the database from which a model will be deleted, pass a
-``using`` keyword argument to the ``Model.delete()`` method. This
-argument works just like the ``using`` keyword argument to ``save()``.
-
-For example, if you're migrating a user from the ``legacy_users``
-database to the ``new_users`` database, you might use these commands::
-
- >>> user_obj.save(using='new_users')
- >>> user_obj.delete(using='legacy_users')
-
-Using managers with multiple databases
---------------------------------------
-
-Use the ``db_manager()`` method on managers to give managers access to
-a non-default database.
-
-For example, say you have a custom manager method that touches the
-database -- ``User.objects.create_user()``. Because ``create_user()``
-is a manager method, not a ``QuerySet`` method, you can't do
-``User.objects.using('new_users').create_user()``. (The
-``create_user()`` method is only available on ``User.objects``, the
-manager, not on ``QuerySet`` objects derived from the manager.) The
-solution is to use ``db_manager()``, like this::
-
- User.objects.db_manager('new_users').create_user(...)
-
-``db_manager()`` returns a copy of the manager bound to the database you specify.
-
-Using ``get_query_set()`` with multiple databases
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you're overriding ``get_query_set()`` on your manager, be sure to
-either call the method on the parent (using ``super()``) or do the
-appropriate handling of the ``_db`` attribute on the manager (a string
-containing the name of the database to use).
-
-For example, if you want to return a custom ``QuerySet`` class from
-the ``get_query_set`` method, you could do this::
-
- class MyManager(models.Manager):
- def get_query_set(self):
- qs = CustomQuerySet(self.model)
- if self._db is not None:
- qs = qs.using(self._db)
- return qs
-
-Exposing multiple databases in Django's admin interface
-=======================================================
-
-Django's admin doesn't have any explicit support for multiple
-databases. If you want to provide an admin interface for a model on a
-database other than that that specified by your router chain, you'll
-need to write custom :class:`~django.contrib.admin.ModelAdmin` classes
-that will direct the admin to use a specific database for content.
-
-``ModelAdmin`` objects have four methods that require customization for
-multiple-database support::
-
- class MultiDBModelAdmin(admin.ModelAdmin):
- # A handy constant for the name of the alternate database.
- using = 'other'
-
- def save_model(self, request, obj, form, change):
- # Tell Django to save objects to the 'other' database.
- obj.save(using=self.using)
-
- def queryset(self, request):
- # Tell Django to look for objects on the 'other' database.
- return super(MultiDBModelAdmin, self).queryset(request).using(self.using)
-
- def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
- # Tell Django to populate ForeignKey widgets using a query
- # on the 'other' database.
- return super(MultiDBModelAdmin, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)
-
- def formfield_for_manytomany(self, db_field, request=None, **kwargs):
- # Tell Django to populate ManyToMany widgets using a query
- # on the 'other' database.
- return super(MultiDBModelAdmin, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)
-
-The implementation provided here implements a multi-database strategy
-where all objects of a given type are stored on a specific database
-(e.g., all ``User`` objects are in the ``other`` database). If your
-usage of multiple databases is more complex, your ``ModelAdmin`` will
-need to reflect that strategy.
-
-Inlines can be handled in a similar fashion. They require three customized methods::
-
- class MultiDBTabularInline(admin.TabularInline):
- using = 'other'
-
- def queryset(self, request):
- # Tell Django to look for inline objects on the 'other' database.
- return super(MultiDBTabularInline, self).queryset(request).using(self.using)
-
- def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
- # Tell Django to populate ForeignKey widgets using a query
- # on the 'other' database.
- return super(MultiDBTabularInline, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)
-
- def formfield_for_manytomany(self, db_field, request=None, **kwargs):
- # Tell Django to populate ManyToMany widgets using a query
- # on the 'other' database.
- return super(MultiDBTabularInline, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)
-
-Once you've written your model admin definitions, they can be
-registered with any ``Admin`` instance::
-
- from django.contrib import admin
-
- # Specialize the multi-db admin objects for use with specific models.
- class BookInline(MultiDBTabularInline):
- model = Book
-
- class PublisherAdmin(MultiDBModelAdmin):
- inlines = [BookInline]
-
- admin.site.register(Author, MultiDBModelAdmin)
- admin.site.register(Publisher, PublisherAdmin)
-
- othersite = admin.Site('othersite')
- othersite.register(Publisher, MultiDBModelAdmin)
-
-This example sets up two admin sites. On the first site, the
-``Author`` and ``Publisher`` objects are exposed; ``Publisher``
-objects have an tabular inline showing books published by that
-publisher. The second site exposes just publishers, without the
-inlines.
-
-Using raw cursors with multiple databases
-=========================================
-
-If you are using more than one database you can use
-``django.db.connections`` to obtain the connection (and cursor) for a
-specific database. ``django.db.connections`` is a dictionary-like
-object that allows you to retrieve a specific connection using it's
-alias::
-
- from django.db import connections
- cursor = connections['my_db_alias'].cursor()
-
-Limitations of multiple databases
-=================================
-
-.. _no_cross_database_relations:
-
-Cross-database relations
-------------------------
-
-Django doesn't currently provide any support for foreign key or
-many-to-many relationships spanning multiple databases. If you
-have used a router to partition models to different databases,
-any foreign key and many-to-many relationships defined by those
-models must be internal to a single database.
-
-This is because of referential integrity. In order to maintain a
-relationship between two objects, Django needs to know that the
-primary key of the related object is valid. If the primary key is
-stored on a separate database, it's not possible to easily evaluate
-the validity of a primary key.
-
-If you're using Postgres, Oracle, or MySQL with InnoDB, this is
-enforced at the database integrity level -- database level key
-constraints prevent the creation of relations that can't be validated.
-
-However, if you're using SQLite or MySQL with MyISAM tables, there is
-no enforced referential integrity; as a result, you may be able to
-'fake' cross database foreign keys. However, this configuration is not
-officially supported by Django.
diff --git a/parts/django/docs/topics/db/optimization.txt b/parts/django/docs/topics/db/optimization.txt
deleted file mode 100644
index 7d51052..0000000
--- a/parts/django/docs/topics/db/optimization.txt
+++ /dev/null
@@ -1,260 +0,0 @@
-============================
-Database access optimization
-============================
-
-Django's database layer provides various ways to help developers get the most
-out of their databases. This document gathers together links to the relevant
-documentation, and adds various tips, organized under a number of headings that
-outline the steps to take when attempting to optimize your database usage.
-
-Profile first
-=============
-
-As general programming practice, this goes without saying. Find out :ref:`what
-queries you are doing and what they are costing you
-<faq-see-raw-sql-queries>`. You may also want to use an external project like
-django-debug-toolbar_, or a tool that monitors your database directly.
-
-Remember that you may be optimizing for speed or memory or both, depending on
-your requirements. Sometimes optimizing for one will be detrimental to the
-other, but sometimes they will help each other. Also, work that is done by the
-database process might not have the same cost (to you) as the same amount of
-work done in your Python process. It is up to you to decide what your
-priorities are, where the balance must lie, and profile all of these as required
-since this will depend on your application and server.
-
-With everything that follows, remember to profile after every change to ensure
-that the change is a benefit, and a big enough benefit given the decrease in
-readability of your code. **All** of the suggestions below come with the caveat
-that in your circumstances the general principle might not apply, or might even
-be reversed.
-
-.. _django-debug-toolbar: http://robhudson.github.com/django-debug-toolbar/
-
-Use standard DB optimization techniques
-=======================================
-
-...including:
-
-* Indexes. This is a number one priority, *after* you have determined from
- profiling what indexes should be added. Use
- :attr:`django.db.models.Field.db_index` to add these from Django.
-
-* Appropriate use of field types.
-
-We will assume you have done the obvious things above. The rest of this document
-focuses on how to use Django in such a way that you are not doing unnecessary
-work. This document also does not address other optimization techniques that
-apply to all expensive operations, such as :doc:`general purpose caching
-</topics/cache>`.
-
-Understand QuerySets
-====================
-
-Understanding :doc:`QuerySets </ref/models/querysets>` is vital to getting good
-performance with simple code. In particular:
-
-Understand QuerySet evaluation
-------------------------------
-
-To avoid performance problems, it is important to understand:
-
-* that :ref:`QuerySets are lazy <querysets-are-lazy>`.
-
-* when :ref:`they are evaluated <when-querysets-are-evaluated>`.
-
-* how :ref:`the data is held in memory <caching-and-querysets>`.
-
-Understand cached attributes
-----------------------------
-
-As well as caching of the whole ``QuerySet``, there is caching of the result of
-attributes on ORM objects. In general, attributes that are not callable will be
-cached. For example, assuming the :ref:`example Weblog models
-<queryset-model-example>`::
-
- >>> entry = Entry.objects.get(id=1)
- >>> entry.blog # Blog object is retrieved at this point
- >>> entry.blog # cached version, no DB access
-
-But in general, callable attributes cause DB lookups every time::
-
- >>> entry = Entry.objects.get(id=1)
- >>> entry.authors.all() # query performed
- >>> entry.authors.all() # query performed again
-
-Be careful when reading template code - the template system does not allow use
-of parentheses, but will call callables automatically, hiding the above
-distinction.
-
-Be careful with your own custom properties - it is up to you to implement
-caching.
-
-Use the ``with`` template tag
------------------------------
-
-To make use of the caching behaviour of ``QuerySet``, you may need to use the
-:ttag:`with` template tag.
-
-Use ``iterator()``
-------------------
-
-When you have a lot of objects, the caching behaviour of the ``QuerySet`` can
-cause a large amount of memory to be used. In this case,
-:meth:`~django.db.models.QuerySet.iterator()` may help.
-
-Do database work in the database rather than in Python
-======================================================
-
-For instance:
-
-* At the most basic level, use :ref:`filter and exclude <queryset-api>` to do
- filtering in the database.
-
-* Use :ref:`F() object query expressions <query-expressions>` to do filtering
- against other fields within the same model.
-
-* Use :doc:`annotate to do aggregation in the database </topics/db/aggregation>`.
-
-If these aren't enough to generate the SQL you need:
-
-Use ``QuerySet.extra()``
-------------------------
-
-A less portable but more powerful method is
-:meth:`~django.db.models.QuerySet.extra()`, which allows some SQL to be
-explicitly added to the query. If that still isn't powerful enough:
-
-Use raw SQL
------------
-
-Write your own :doc:`custom SQL to retrieve data or populate models
-</topics/db/sql>`. Use ``django.db.connection.queries`` to find out what Django
-is writing for you and start from there.
-
-Retrieve everything at once if you know you will need it
-========================================================
-
-Hitting the database multiple times for different parts of a single 'set' of
-data that you will need all parts of is, in general, less efficient than
-retrieving it all in one query. This is particularly important if you have a
-query that is executed in a loop, and could therefore end up doing many database
-queries, when only one was needed. So:
-
-Use ``QuerySet.select_related()``
----------------------------------
-
-Understand :ref:`QuerySet.select_related() <select-related>` thoroughly, and use it:
-
-* in view code,
-
-* and in :doc:`managers and default managers </topics/db/managers>` where
- appropriate. Be aware when your manager is and is not used; sometimes this is
- tricky so don't make assumptions.
-
-Don't retrieve things you don't need
-====================================
-
-Use ``QuerySet.values()`` and ``values_list()``
------------------------------------------------
-
-When you just want a ``dict`` or ``list`` of values, and don't need ORM model
-objects, make appropriate usage of :meth:`~django.db.models.QuerySet.values()`.
-These can be useful for replacing model objects in template code - as long as
-the dicts you supply have the same attributes as those used in the template,
-you are fine.
-
-Use ``QuerySet.defer()`` and ``only()``
----------------------------------------
-
-Use :meth:`~django.db.models.QuerySet.defer()` and
-:meth:`~django.db.models.QuerySet.only()` if there are database columns you
-know that you won't need (or won't need in most cases) to avoid loading
-them. Note that if you *do* use them, the ORM will have to go and get them in a
-separate query, making this a pessimization if you use it inappropriately.
-
-Use QuerySet.count()
---------------------
-
-...if you only want the count, rather than doing ``len(queryset)``.
-
-Use QuerySet.exists()
----------------------
-
-...if you only want to find out if at least one result exists, rather than ``if
-queryset``.
-
-But:
-
-Don't overuse ``count()`` and ``exists()``
-------------------------------------------
-
-If you are going to need other data from the QuerySet, just evaluate it.
-
-For example, assuming an Email class that has a ``body`` attribute and a
-many-to-many relation to User, the following template code is optimal:
-
-.. code-block:: html+django
-
- {% if display_inbox %}
- {% with user.emails.all as emails %}
- {% if emails %}
- <p>You have {{ emails|length }} email(s)</p>
- {% for email in emails %}
- <p>{{ email.body }}</p>
- {% endfor %}
- {% else %}
- <p>No messages today.</p>
- {% endif %}
- {% endwith %}
- {% endif %}
-
-
-It is optimal because:
-
- 1. Since QuerySets are lazy, this does no database if 'display_inbox' is False.
-
- #. Use of ``with`` means that we store ``user.emails.all`` in a variable for
- later use, allowing its cache to be re-used.
-
- #. The line ``{% if emails %}`` causes ``QuerySet.__nonzero__()`` to be called,
- which causes the ``user.emails.all()`` query to be run on the database, and
- at the least the first line to be turned into an ORM object. If there aren't
- any results, it will return False, otherwise True.
-
- #. The use of ``{{ emails|length }}`` calls ``QuerySet.__len__()``, filling
- out the rest of the cache without doing another query.
-
- #. The ``for`` loop iterates over the already filled cache.
-
-In total, this code does either one or zero database queries. The only
-deliberate optimization performed is the use of the ``with`` tag. Using
-``QuerySet.exists()`` or ``QuerySet.count()`` at any point would cause
-additional queries.
-
-Use ``QuerySet.update()`` and ``delete()``
-------------------------------------------
-
-Rather than retrieve a load of objects, set some values, and save them
-individual, use a bulk SQL UPDATE statement, via :ref:`QuerySet.update()
-<topics-db-queries-update>`. Similarly, do :ref:`bulk deletes
-<topics-db-queries-delete>` where possible.
-
-Note, however, that these bulk update methods cannot call the ``save()`` or
-``delete()`` methods of individual instances, which means that any custom
-behaviour you have added for these methods will not be executed, including
-anything driven from the normal database object :doc:`signals </ref/signals>`.
-
-Use foreign key values directly
--------------------------------
-
-If you only need a foreign key value, use the foreign key value that is already on
-the object you've got, rather than getting the whole related object and taking
-its primary key. i.e. do::
-
- entry.blog_id
-
-instead of::
-
- entry.blog.id
-
diff --git a/parts/django/docs/topics/db/queries.txt b/parts/django/docs/topics/db/queries.txt
deleted file mode 100644
index 923b1e4..0000000
--- a/parts/django/docs/topics/db/queries.txt
+++ /dev/null
@@ -1,1110 +0,0 @@
-==============
-Making queries
-==============
-
-.. currentmodule:: django.db.models
-
-Once you've created your :doc:`data models </topics/db/models>`, Django
-automatically gives you a database-abstraction API that lets you create,
-retrieve, update and delete objects. This document explains how to use this
-API. Refer to the :doc:`data model reference </ref/models/index>` for full
-details of all the various model lookup options.
-
-Throughout this guide (and in the reference), we'll refer to the following
-models, which comprise a Weblog application:
-
-.. _queryset-model-example:
-
-.. code-block:: python
-
- class Blog(models.Model):
- name = models.CharField(max_length=100)
- tagline = models.TextField()
-
- def __unicode__(self):
- return self.name
-
- class Author(models.Model):
- name = models.CharField(max_length=50)
- email = models.EmailField()
-
- def __unicode__(self):
- return self.name
-
- class Entry(models.Model):
- blog = models.ForeignKey(Blog)
- headline = models.CharField(max_length=255)
- body_text = models.TextField()
- pub_date = models.DateTimeField()
- authors = models.ManyToManyField(Author)
- n_comments = models.IntegerField()
- n_pingbacks = models.IntegerField()
- rating = models.IntegerField()
-
- def __unicode__(self):
- return self.headline
-
-Creating objects
-================
-
-To represent database-table data in Python objects, Django uses an intuitive
-system: A model class represents a database table, and an instance of that
-class represents a particular record in the database table.
-
-To create an object, instantiate it using keyword arguments to the model class,
-then call ``save()`` to save it to the database.
-
-You import the model class from wherever it lives on the Python path, as you
-may expect. (We point this out here because previous Django versions required
-funky model importing.)
-
-Assuming models live in a file ``mysite/blog/models.py``, here's an example::
-
- >>> from blog.models import Blog
- >>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
- >>> b.save()
-
-This performs an ``INSERT`` SQL statement behind the scenes. Django doesn't hit
-the database until you explicitly call ``save()``.
-
-The ``save()`` method has no return value.
-
-.. seealso::
-
- ``save()`` takes a number of advanced options not described here.
- See the documentation for ``save()`` for complete details.
-
- To create an object and save it all in one step see the ```create()```
- method.
-
-Saving changes to objects
-=========================
-
-To save changes to an object that's already in the database, use ``save()``.
-
-Given a ``Blog`` instance ``b5`` that has already been saved to the database,
-this example changes its name and updates its record in the database::
-
- >> b5.name = 'New name'
- >> b5.save()
-
-This performs an ``UPDATE`` SQL statement behind the scenes. Django doesn't hit
-the database until you explicitly call ``save()``.
-
-Saving ``ForeignKey`` and ``ManyToManyField`` fields
-----------------------------------------------------
-
-Updating a ``ForeignKey`` field works exactly the same way as saving a normal
-field; simply assign an object of the right type to the field in question.
-This example updates the ``blog`` attribute of an ``Entry`` instance ``entry``::
-
- >>> from blog.models import Entry
- >>> entry = Entry.objects.get(pk=1)
- >>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
- >>> entry.blog = cheese_blog
- >>> entry.save()
-
-Updating a ``ManyToManyField`` works a little differently; use the ``add()``
-method on the field to add a record to the relation. This example adds the
-``Author`` instance ``joe`` to the ``entry`` object::
-
- >>> from blog.models import Author
- >>> joe = Author.objects.create(name="Joe")
- >>> entry.authors.add(joe)
-
-Django will complain if you try to assign or add an object of the wrong type.
-
-Retrieving objects
-==================
-
-To retrieve objects from your database, you construct a ``QuerySet`` via a
-``Manager`` on your model class.
-
-A ``QuerySet`` represents a collection of objects from your database. It can
-have zero, one or many *filters* -- criteria that narrow down the collection
-based on given parameters. In SQL terms, a ``QuerySet`` equates to a ``SELECT``
-statement, and a filter is a limiting clause such as ``WHERE`` or ``LIMIT``.
-
-You get a ``QuerySet`` by using your model's ``Manager``. Each model has at
-least one ``Manager``, and it's called ``objects`` by default. Access it
-directly via the model class, like so::
-
- >>> Blog.objects
- <django.db.models.manager.Manager object at ...>
- >>> b = Blog(name='Foo', tagline='Bar')
- >>> b.objects
- Traceback:
- ...
- AttributeError: "Manager isn't accessible via Blog instances."
-
-.. note::
-
- ``Managers`` are accessible only via model classes, rather than from model
- instances, to enforce a separation between "table-level" operations and
- "record-level" operations.
-
-The ``Manager`` is the main source of ``QuerySets`` for a model. It acts as a
-"root" ``QuerySet`` that describes all objects in the model's database table.
-For example, ``Blog.objects`` is the initial ``QuerySet`` that contains all
-``Blog`` objects in the database.
-
-Retrieving all objects
-----------------------
-
-The simplest way to retrieve objects from a table is to get all of them.
-To do this, use the ``all()`` method on a ``Manager``::
-
- >>> all_entries = Entry.objects.all()
-
-The ``all()`` method returns a ``QuerySet`` of all the objects in the database.
-
-(If ``Entry.objects`` is a ``QuerySet``, why can't we just do ``Entry.objects``?
-That's because ``Entry.objects``, the root ``QuerySet``, is a special case
-that cannot be evaluated. The ``all()`` method returns a ``QuerySet`` that
-*can* be evaluated.)
-
-
-Retrieving specific objects with filters
-----------------------------------------
-
-The root ``QuerySet`` provided by the ``Manager`` describes all objects in the
-database table. Usually, though, you'll need to select only a subset of the
-complete set of objects.
-
-To create such a subset, you refine the initial ``QuerySet``, adding filter
-conditions. The two most common ways to refine a ``QuerySet`` are:
-
- ``filter(**kwargs)``
- Returns a new ``QuerySet`` containing objects that match the given
- lookup parameters.
-
- ``exclude(**kwargs)``
- Returns a new ``QuerySet`` containing objects that do *not* match the
- given lookup parameters.
-
-The lookup parameters (``**kwargs`` in the above function definitions) should
-be in the format described in `Field lookups`_ below.
-
-For example, to get a ``QuerySet`` of blog entries from the year 2006, use
-``filter()`` like so::
-
- Entry.objects.filter(pub_date__year=2006)
-
-We don't have to add an ``all()`` -- ``Entry.objects.all().filter(...)``. That
-would still work, but you only need ``all()`` when you want all objects from the
-root ``QuerySet``.
-
-.. _chaining-filters:
-
-Chaining filters
-~~~~~~~~~~~~~~~~
-
-The result of refining a ``QuerySet`` is itself a ``QuerySet``, so it's
-possible to chain refinements together. For example::
-
- >>> Entry.objects.filter(
- ... headline__startswith='What'
- ... ).exclude(
- ... pub_date__gte=datetime.now()
- ... ).filter(
- ... pub_date__gte=datetime(2005, 1, 1)
- ... )
-
-This takes the initial ``QuerySet`` of all entries in the database, adds a
-filter, then an exclusion, then another filter. The final result is a
-``QuerySet`` containing all entries with a headline that starts with "What",
-that were published between January 1, 2005, and the current day.
-
-.. _filtered-querysets-are-unique:
-
-Filtered QuerySets are unique
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Each time you refine a ``QuerySet``, you get a brand-new ``QuerySet`` that is
-in no way bound to the previous ``QuerySet``. Each refinement creates a
-separate and distinct ``QuerySet`` that can be stored, used and reused.
-
-Example::
-
- >> q1 = Entry.objects.filter(headline__startswith="What")
- >> q2 = q1.exclude(pub_date__gte=datetime.now())
- >> q3 = q1.filter(pub_date__gte=datetime.now())
-
-These three ``QuerySets`` are separate. The first is a base ``QuerySet``
-containing all entries that contain a headline starting with "What". The second
-is a subset of the first, with an additional criteria that excludes records
-whose ``pub_date`` is greater than now. The third is a subset of the first,
-with an additional criteria that selects only the records whose ``pub_date`` is
-greater than now. The initial ``QuerySet`` (``q1``) is unaffected by the
-refinement process.
-
-.. _querysets-are-lazy:
-
-QuerySets are lazy
-~~~~~~~~~~~~~~~~~~
-
-``QuerySets`` are lazy -- the act of creating a ``QuerySet`` doesn't involve any
-database activity. You can stack filters together all day long, and Django won't
-actually run the query until the ``QuerySet`` is *evaluated*. Take a look at
-this example::
-
- >>> q = Entry.objects.filter(headline__startswith="What")
- >>> q = q.filter(pub_date__lte=datetime.now())
- >>> q = q.exclude(body_text__icontains="food")
- >>> print q
-
-Though this looks like three database hits, in fact it hits the database only
-once, at the last line (``print q``). In general, the results of a ``QuerySet``
-aren't fetched from the database until you "ask" for them. When you do, the
-``QuerySet`` is *evaluated* by accessing the database. For more details on
-exactly when evaluation takes place, see :ref:`when-querysets-are-evaluated`.
-
-
-.. _retrieving-single-object-with-get:
-
-Retrieving a single object with get
------------------------------------
-
-``.filter()`` will always give you a ``QuerySet``, even if only a single
-object matches the query - in this case, it will be a ``QuerySet`` containing
-a single element.
-
-If you know there is only one object that matches your query, you can use
-the ``get()`` method on a `Manager` which returns the object directly::
-
- >>> one_entry = Entry.objects.get(pk=1)
-
-You can use any query expression with ``get()``, just like with ``filter()`` -
-again, see `Field lookups`_ below.
-
-Note that there is a difference between using ``.get()``, and using
-``.filter()`` with a slice of ``[0]``. If there are no results that match the
-query, ``.get()`` will raise a ``DoesNotExist`` exception. This exception is an
-attribute of the model class that the query is being performed on - so in the
-code above, if there is no ``Entry`` object with a primary key of 1, Django will
-raise ``Entry.DoesNotExist``.
-
-Similarly, Django will complain if more than one item matches the ``get()``
-query. In this case, it will raise ``MultipleObjectsReturned``, which again is
-an attribute of the model class itself.
-
-
-Other QuerySet methods
-----------------------
-
-Most of the time you'll use ``all()``, ``get()``, ``filter()`` and ``exclude()``
-when you need to look up objects from the database. However, that's far from all
-there is; see the :ref:`QuerySet API Reference <queryset-api>` for a complete
-list of all the various ``QuerySet`` methods.
-
-.. _limiting-querysets:
-
-Limiting QuerySets
-------------------
-
-Use a subset of Python's array-slicing syntax to limit your ``QuerySet`` to a
-certain number of results. This is the equivalent of SQL's ``LIMIT`` and
-``OFFSET`` clauses.
-
-For example, this returns the first 5 objects (``LIMIT 5``)::
-
- >>> Entry.objects.all()[:5]
-
-This returns the sixth through tenth objects (``OFFSET 5 LIMIT 5``)::
-
- >>> Entry.objects.all()[5:10]
-
-Negative indexing (i.e. ``Entry.objects.all()[-1]``) is not supported.
-
-Generally, slicing a ``QuerySet`` returns a new ``QuerySet`` -- it doesn't
-evaluate the query. An exception is if you use the "step" parameter of Python
-slice syntax. For example, this would actually execute the query in order to
-return a list of every *second* object of the first 10::
-
- >>> Entry.objects.all()[:10:2]
-
-To retrieve a *single* object rather than a list
-(e.g. ``SELECT foo FROM bar LIMIT 1``), use a simple index instead of a
-slice. For example, this returns the first ``Entry`` in the database, after
-ordering entries alphabetically by headline::
-
- >>> Entry.objects.order_by('headline')[0]
-
-This is roughly equivalent to::
-
- >>> Entry.objects.order_by('headline')[0:1].get()
-
-Note, however, that the first of these will raise ``IndexError`` while the
-second will raise ``DoesNotExist`` if no objects match the given criteria. See
-:meth:`~django.db.models.QuerySet.get` for more details.
-
-.. _field-lookups-intro:
-
-Field lookups
--------------
-
-Field lookups are how you specify the meat of an SQL ``WHERE`` clause. They're
-specified as keyword arguments to the ``QuerySet`` methods ``filter()``,
-``exclude()`` and ``get()``.
-
-Basic lookups keyword arguments take the form ``field__lookuptype=value``.
-(That's a double-underscore). For example::
-
- >>> Entry.objects.filter(pub_date__lte='2006-01-01')
-
-translates (roughly) into the following SQL::
-
- SELECT * FROM blog_entry WHERE pub_date <= '2006-01-01';
-
-.. admonition:: How this is possible
-
- Python has the ability to define functions that accept arbitrary name-value
- arguments whose names and values are evaluated at runtime. For more
- information, see `Keyword Arguments`_ in the official Python tutorial.
-
- .. _`Keyword Arguments`: http://docs.python.org/tutorial/controlflow.html#keyword-arguments
-
-If you pass an invalid keyword argument, a lookup function will raise
-``TypeError``.
-
-The database API supports about two dozen lookup types; a complete reference
-can be found in the :ref:`field lookup reference <field-lookups>`. To give you a taste of what's available, here's some of the more common lookups
-you'll probably use:
-
- :lookup:`exact`
- An "exact" match. For example::
-
- >>> Entry.objects.get(headline__exact="Man bites dog")
-
- Would generate SQL along these lines:
-
- .. code-block:: sql
-
- SELECT ... WHERE headline = 'Man bites dog';
-
- If you don't provide a lookup type -- that is, if your keyword argument
- doesn't contain a double underscore -- the lookup type is assumed to be
- ``exact``.
-
- For example, the following two statements are equivalent::
-
- >>> Blog.objects.get(id__exact=14) # Explicit form
- >>> Blog.objects.get(id=14) # __exact is implied
-
- This is for convenience, because ``exact`` lookups are the common case.
-
- :lookup:`iexact`
- A case-insensitive match. So, the query::
-
- >>> Blog.objects.get(name__iexact="beatles blog")
-
- Would match a ``Blog`` titled "Beatles Blog", "beatles blog", or even
- "BeAtlES blOG".
-
- :lookup:`contains`
- Case-sensitive containment test. For example::
-
- Entry.objects.get(headline__contains='Lennon')
-
- Roughly translates to this SQL:
-
- .. code-block:: sql
-
- SELECT ... WHERE headline LIKE '%Lennon%';
-
- Note this will match the headline ``'Today Lennon honored'`` but not
- ``'today lennon honored'``.
-
- There's also a case-insensitive version, :lookup:`icontains`.
-
- :lookup:`startswith`, :lookup:`endswith`
- Starts-with and ends-with search, respectively. There are also
- case-insensitive versions called :lookup:`istartswith` and
- :lookup:`iendswith`.
-
-Again, this only scratches the surface. A complete reference can be found in the
-:ref:`field lookup reference <field-lookups>`.
-
-Lookups that span relationships
--------------------------------
-
-Django offers a powerful and intuitive way to "follow" relationships in
-lookups, taking care of the SQL ``JOIN``\s for you automatically, behind the
-scenes. To span a relationship, just use the field name of related fields
-across models, separated by double underscores, until you get to the field you
-want.
-
-This example retrieves all ``Entry`` objects with a ``Blog`` whose ``name``
-is ``'Beatles Blog'``::
-
- >>> Entry.objects.filter(blog__name__exact='Beatles Blog')
-
-This spanning can be as deep as you'd like.
-
-It works backwards, too. To refer to a "reverse" relationship, just use the
-lowercase name of the model.
-
-This example retrieves all ``Blog`` objects which have at least one ``Entry``
-whose ``headline`` contains ``'Lennon'``::
-
- >>> Blog.objects.filter(entry__headline__contains='Lennon')
-
-If you are filtering across multiple relationships and one of the intermediate
-models doesn't have a value that meets the filter condition, Django will treat
-it as if there is an empty (all values are ``NULL``), but valid, object there.
-All this means is that no error will be raised. For example, in this filter::
-
- Blog.objects.filter(entry__authors__name='Lennon')
-
-(if there was a related ``Author`` model), if there was no ``author``
-associated with an entry, it would be treated as if there was also no ``name``
-attached, rather than raising an error because of the missing ``author``.
-Usually this is exactly what you want to have happen. The only case where it
-might be confusing is if you are using ``isnull``. Thus::
-
- Blog.objects.filter(entry__authors__name__isnull=True)
-
-will return ``Blog`` objects that have an empty ``name`` on the ``author`` and
-also those which have an empty ``author`` on the ``entry``. If you don't want
-those latter objects, you could write::
-
- Blog.objects.filter(entry__authors__isnull=False,
- entry__authors__name__isnull=True)
-
-Spanning multi-valued relationships
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-When you are filtering an object based on a ``ManyToManyField`` or a reverse
-``ForeignKey``, there are two different sorts of filter you may be
-interested in. Consider the ``Blog``/``Entry`` relationship (``Blog`` to
-``Entry`` is a one-to-many relation). We might be interested in finding blogs
-that have an entry which has both *"Lennon"* in the headline and was published
-in 2008. Or we might want to find blogs that have an entry with *"Lennon"* in
-the headline as well as an entry that was published in 2008. Since there are
-multiple entries associated with a single ``Blog``, both of these queries are
-possible and make sense in some situations.
-
-The same type of situation arises with a ``ManyToManyField``. For example, if
-an ``Entry`` has a ``ManyToManyField`` called ``tags``, we might want to find
-entries linked to tags called *"music"* and *"bands"* or we might want an
-entry that contains a tag with a name of *"music"* and a status of *"public"*.
-
-To handle both of these situations, Django has a consistent way of processing
-``filter()`` and ``exclude()`` calls. Everything inside a single ``filter()``
-call is applied simultaneously to filter out items matching all those
-requirements. Successive ``filter()`` calls further restrict the set of
-objects, but for multi-valued relations, they apply to any object linked to
-the primary model, not necessarily those objects that were selected by an
-earlier ``filter()`` call.
-
-That may sound a bit confusing, so hopefully an example will clarify. To
-select all blogs that contain entries with both *"Lennon"* in the headline
-and that were published in 2008 (the same entry satisfying both conditions),
-we would write::
-
- Blog.objects.filter(entry__headline__contains='Lennon',
- entry__pub_date__year=2008)
-
-To select all blogs that contain an entry with *"Lennon"* in the headline
-**as well as** an entry that was published in 2008, we would write::
-
- Blog.objects.filter(entry__headline__contains='Lennon').filter(
- entry__pub_date__year=2008)
-
-In this second example, the first filter restricted the queryset to all those
-blogs linked to that particular type of entry. The second filter restricted
-the set of blogs *further* to those that are also linked to the second type of
-entry. The entries select by the second filter may or may not be the same as
-the entries in the first filter. We are filtering the ``Blog`` items with each
-filter statement, not the ``Entry`` items.
-
-All of this behavior also applies to ``exclude()``: all the conditions in a
-single ``exclude()`` statement apply to a single instance (if those conditions
-are talking about the same multi-valued relation). Conditions in subsequent
-``filter()`` or ``exclude()`` calls that refer to the same relation may end up
-filtering on different linked objects.
-
-.. _query-expressions:
-
-Filters can reference fields on the model
------------------------------------------
-
-.. versionadded:: 1.1
-
-In the examples given so far, we have constructed filters that compare
-the value of a model field with a constant. But what if you want to compare
-the value of a model field with another field on the same model?
-
-Django provides the ``F()`` object to allow such comparisons. Instances
-of ``F()`` act as a reference to a model field within a query. These
-references can then be used in query filters to compare the values of two
-different fields on the same model instance.
-
-For example, to find a list of all blog entries that have had more comments
-than pingbacks, we construct an ``F()`` object to reference the comment count,
-and use that ``F()`` object in the query::
-
- >>> from django.db.models import F
- >>> Entry.objects.filter(n_comments__gt=F('n_pingbacks'))
-
-Django supports the use of addition, subtraction, multiplication,
-division and modulo arithmetic with ``F()`` objects, both with constants
-and with other ``F()`` objects. To find all the blog entries with more than
-*twice* as many comments as pingbacks, we modify the query::
-
- >>> Entry.objects.filter(n_comments__gt=F('n_pingbacks') * 2)
-
-To find all the entries where the rating of the entry is less than the
-sum of the pingback count and comment count, we would issue the
-query::
-
- >>> Entry.objects.filter(rating__lt=F('n_comments') + F('n_pingbacks'))
-
-You can also use the double underscore notation to span relationships in
-an ``F()`` object. An ``F()`` object with a double underscore will introduce
-any joins needed to access the related object. For example, to retrieve all
-the entries where the author's name is the same as the blog name, we could
-issue the query:
-
- >>> Entry.objects.filter(authors__name=F('blog__name'))
-
-The pk lookup shortcut
-----------------------
-
-For convenience, Django provides a ``pk`` lookup shortcut, which stands for
-"primary key".
-
-In the example ``Blog`` model, the primary key is the ``id`` field, so these
-three statements are equivalent::
-
- >>> Blog.objects.get(id__exact=14) # Explicit form
- >>> Blog.objects.get(id=14) # __exact is implied
- >>> Blog.objects.get(pk=14) # pk implies id__exact
-
-The use of ``pk`` isn't limited to ``__exact`` queries -- any query term
-can be combined with ``pk`` to perform a query on the primary key of a model::
-
- # Get blogs entries with id 1, 4 and 7
- >>> Blog.objects.filter(pk__in=[1,4,7])
-
- # Get all blog entries with id > 14
- >>> Blog.objects.filter(pk__gt=14)
-
-``pk`` lookups also work across joins. For example, these three statements are
-equivalent::
-
- >>> Entry.objects.filter(blog__id__exact=3) # Explicit form
- >>> Entry.objects.filter(blog__id=3) # __exact is implied
- >>> Entry.objects.filter(blog__pk=3) # __pk implies __id__exact
-
-Escaping percent signs and underscores in LIKE statements
----------------------------------------------------------
-
-The field lookups that equate to ``LIKE`` SQL statements (``iexact``,
-``contains``, ``icontains``, ``startswith``, ``istartswith``, ``endswith``
-and ``iendswith``) will automatically escape the two special characters used in
-``LIKE`` statements -- the percent sign and the underscore. (In a ``LIKE``
-statement, the percent sign signifies a multiple-character wildcard and the
-underscore signifies a single-character wildcard.)
-
-This means things should work intuitively, so the abstraction doesn't leak.
-For example, to retrieve all the entries that contain a percent sign, just use
-the percent sign as any other character::
-
- >>> Entry.objects.filter(headline__contains='%')
-
-Django takes care of the quoting for you; the resulting SQL will look something
-like this:
-
-.. code-block:: sql
-
- SELECT ... WHERE headline LIKE '%\%%';
-
-Same goes for underscores. Both percentage signs and underscores are handled
-for you transparently.
-
-.. _caching-and-querysets:
-
-Caching and QuerySets
----------------------
-
-Each ``QuerySet`` contains a cache, to minimize database access. It's important
-to understand how it works, in order to write the most efficient code.
-
-In a newly created ``QuerySet``, the cache is empty. The first time a
-``QuerySet`` is evaluated -- and, hence, a database query happens -- Django
-saves the query results in the ``QuerySet``'s cache and returns the results
-that have been explicitly requested (e.g., the next element, if the
-``QuerySet`` is being iterated over). Subsequent evaluations of the
-``QuerySet`` reuse the cached results.
-
-Keep this caching behavior in mind, because it may bite you if you don't use
-your ``QuerySet``\s correctly. For example, the following will create two
-``QuerySet``\s, evaluate them, and throw them away::
-
- >>> print [e.headline for e in Entry.objects.all()]
- >>> print [e.pub_date for e in Entry.objects.all()]
-
-That means the same database query will be executed twice, effectively doubling
-your database load. Also, there's a possibility the two lists may not include
-the same database records, because an ``Entry`` may have been added or deleted
-in the split second between the two requests.
-
-To avoid this problem, simply save the ``QuerySet`` and reuse it::
-
- >>> queryset = Entry.objects.all()
- >>> print [p.headline for p in queryset] # Evaluate the query set.
- >>> print [p.pub_date for p in queryset] # Re-use the cache from the evaluation.
-
-.. _complex-lookups-with-q:
-
-Complex lookups with Q objects
-==============================
-
-Keyword argument queries -- in ``filter()``, etc. -- are "AND"ed together. If
-you need to execute more complex queries (for example, queries with ``OR``
-statements), you can use ``Q`` objects.
-
-A ``Q`` object (``django.db.models.Q``) is an object used to encapsulate a
-collection of keyword arguments. These keyword arguments are specified as in
-"Field lookups" above.
-
-For example, this ``Q`` object encapsulates a single ``LIKE`` query::
-
- Q(question__startswith='What')
-
-``Q`` objects can be combined using the ``&`` and ``|`` operators. When an
-operator is used on two ``Q`` objects, it yields a new ``Q`` object.
-
-For example, this statement yields a single ``Q`` object that represents the
-"OR" of two ``"question__startswith"`` queries::
-
- Q(question__startswith='Who') | Q(question__startswith='What')
-
-This is equivalent to the following SQL ``WHERE`` clause::
-
- WHERE question LIKE 'Who%' OR question LIKE 'What%'
-
-You can compose statements of arbitrary complexity by combining ``Q`` objects
-with the ``&`` and ``|`` operators and use parenthetical grouping. Also, ``Q``
-objects can be negated using the ``~`` operator, allowing for combined lookups
-that combine both a normal query and a negated (``NOT``) query::
-
- Q(question__startswith='Who') | ~Q(pub_date__year=2005)
-
-Each lookup function that takes keyword-arguments (e.g. ``filter()``,
-``exclude()``, ``get()``) can also be passed one or more ``Q`` objects as
-positional (not-named) arguments. If you provide multiple ``Q`` object
-arguments to a lookup function, the arguments will be "AND"ed together. For
-example::
-
- Poll.objects.get(
- Q(question__startswith='Who'),
- Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
- )
-
-... roughly translates into the SQL::
-
- SELECT * from polls WHERE question LIKE 'Who%'
- AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')
-
-Lookup functions can mix the use of ``Q`` objects and keyword arguments. All
-arguments provided to a lookup function (be they keyword arguments or ``Q``
-objects) are "AND"ed together. However, if a ``Q`` object is provided, it must
-precede the definition of any keyword arguments. For example::
-
- Poll.objects.get(
- Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
- question__startswith='Who')
-
-... would be a valid query, equivalent to the previous example; but::
-
- # INVALID QUERY
- Poll.objects.get(
- question__startswith='Who',
- Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))
-
-... would not be valid.
-
-.. seealso::
-
- The `OR lookups examples`_ in the Django unit tests show some possible uses
- of ``Q``.
-
- .. _OR lookups examples: http://code.djangoproject.com/browser/django/trunk/tests/modeltests/or_lookups/tests.py
-
-Comparing objects
-=================
-
-To compare two model instances, just use the standard Python comparison operator,
-the double equals sign: ``==``. Behind the scenes, that compares the primary
-key values of two models.
-
-Using the ``Entry`` example above, the following two statements are equivalent::
-
- >>> some_entry == other_entry
- >>> some_entry.id == other_entry.id
-
-If a model's primary key isn't called ``id``, no problem. Comparisons will
-always use the primary key, whatever it's called. For example, if a model's
-primary key field is called ``name``, these two statements are equivalent::
-
- >>> some_obj == other_obj
- >>> some_obj.name == other_obj.name
-
-.. _topics-db-queries-delete:
-
-Deleting objects
-================
-
-The delete method, conveniently, is named ``delete()``. This method immediately
-deletes the object and has no return value. Example::
-
- e.delete()
-
-You can also delete objects in bulk. Every ``QuerySet`` has a ``delete()``
-method, which deletes all members of that ``QuerySet``.
-
-For example, this deletes all ``Entry`` objects with a ``pub_date`` year of
-2005::
-
- Entry.objects.filter(pub_date__year=2005).delete()
-
-Keep in mind that this will, whenever possible, be executed purely in
-SQL, and so the ``delete()`` methods of individual object instances
-will not necessarily be called during the process. If you've provided
-a custom ``delete()`` method on a model class and want to ensure that
-it is called, you will need to "manually" delete instances of that
-model (e.g., by iterating over a ``QuerySet`` and calling ``delete()``
-on each object individually) rather than using the bulk ``delete()``
-method of a ``QuerySet``.
-
-When Django deletes an object, it emulates the behavior of the SQL
-constraint ``ON DELETE CASCADE`` -- in other words, any objects which
-had foreign keys pointing at the object to be deleted will be deleted
-along with it. For example::
-
- b = Blog.objects.get(pk=1)
- # This will delete the Blog and all of its Entry objects.
- b.delete()
-
-Note that ``delete()`` is the only ``QuerySet`` method that is not exposed on a
-``Manager`` itself. This is a safety mechanism to prevent you from accidentally
-requesting ``Entry.objects.delete()``, and deleting *all* the entries. If you
-*do* want to delete all the objects, then you have to explicitly request a
-complete query set::
-
- Entry.objects.all().delete()
-
-.. _topics-db-queries-update:
-
-Updating multiple objects at once
-=================================
-
-.. versionadded:: 1.0
-
-Sometimes you want to set a field to a particular value for all the objects in
-a ``QuerySet``. You can do this with the ``update()`` method. For example::
-
- # Update all the headlines with pub_date in 2007.
- Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')
-
-You can only set non-relation fields and ``ForeignKey`` fields using this
-method. To update a non-relation field, provide the new value as a constant.
-To update ``ForeignKey`` fields, set the new value to be the new model
-instance you want to point to. For example::
-
- >>> b = Blog.objects.get(pk=1)
-
- # Change every Entry so that it belongs to this Blog.
- >>> Entry.objects.all().update(blog=b)
-
-The ``update()`` method is applied instantly and returns the number of rows
-affected by the query. The only restriction on the ``QuerySet`` that is
-updated is that it can only access one database table, the model's main
-table. You can filter based on related fields, but you can only update columns
-in the model's main table. Example::
-
- >>> b = Blog.objects.get(pk=1)
-
- # Update all the headlines belonging to this Blog.
- >>> Entry.objects.select_related().filter(blog=b).update(headline='Everything is the same')
-
-Be aware that the ``update()`` method is converted directly to an SQL
-statement. It is a bulk operation for direct updates. It doesn't run any
-``save()`` methods on your models, or emit the ``pre_save`` or ``post_save``
-signals (which are a consequence of calling ``save()``). If you want to save
-every item in a ``QuerySet`` and make sure that the ``save()`` method is
-called on each instance, you don't need any special function to handle that.
-Just loop over them and call ``save()``::
-
- for item in my_queryset:
- item.save()
-
-.. versionadded:: 1.1
-
-Calls to update can also use :ref:`F() objects <query-expressions>` to update
-one field based on the value of another field in the model. This is especially
-useful for incrementing counters based upon their current value. For example, to
-increment the pingback count for every entry in the blog::
-
- >>> Entry.objects.all().update(n_pingbacks=F('n_pingbacks') + 1)
-
-However, unlike ``F()`` objects in filter and exclude clauses, you can't
-introduce joins when you use ``F()`` objects in an update -- you can only
-reference fields local to the model being updated. If you attempt to introduce
-a join with an ``F()`` object, a ``FieldError`` will be raised::
-
- # THIS WILL RAISE A FieldError
- >>> Entry.objects.update(headline=F('blog__name'))
-
-Related objects
-===============
-
-When you define a relationship in a model (i.e., a ``ForeignKey``,
-``OneToOneField``, or ``ManyToManyField``), instances of that model will have
-a convenient API to access the related object(s).
-
-Using the models at the top of this page, for example, an ``Entry`` object ``e``
-can get its associated ``Blog`` object by accessing the ``blog`` attribute:
-``e.blog``.
-
-(Behind the scenes, this functionality is implemented by Python descriptors_.
-This shouldn't really matter to you, but we point it out here for the curious.)
-
-Django also creates API accessors for the "other" side of the relationship --
-the link from the related model to the model that defines the relationship.
-For example, a ``Blog`` object ``b`` has access to a list of all related
-``Entry`` objects via the ``entry_set`` attribute: ``b.entry_set.all()``.
-
-All examples in this section use the sample ``Blog``, ``Author`` and ``Entry``
-models defined at the top of this page.
-
-.. _descriptors: http://users.rcn.com/python/download/Descriptor.htm
-
-One-to-many relationships
--------------------------
-
-Forward
-~~~~~~~
-
-If a model has a ``ForeignKey``, instances of that model will have access to
-the related (foreign) object via a simple attribute of the model.
-
-Example::
-
- >>> e = Entry.objects.get(id=2)
- >>> e.blog # Returns the related Blog object.
-
-You can get and set via a foreign-key attribute. As you may expect, changes to
-the foreign key aren't saved to the database until you call ``save()``.
-Example::
-
- >>> e = Entry.objects.get(id=2)
- >>> e.blog = some_blog
- >>> e.save()
-
-If a ``ForeignKey`` field has ``null=True`` set (i.e., it allows ``NULL``
-values), you can assign ``None`` to it. Example::
-
- >>> e = Entry.objects.get(id=2)
- >>> e.blog = None
- >>> e.save() # "UPDATE blog_entry SET blog_id = NULL ...;"
-
-Forward access to one-to-many relationships is cached the first time the
-related object is accessed. Subsequent accesses to the foreign key on the same
-object instance are cached. Example::
-
- >>> e = Entry.objects.get(id=2)
- >>> print e.blog # Hits the database to retrieve the associated Blog.
- >>> print e.blog # Doesn't hit the database; uses cached version.
-
-Note that the ``select_related()`` ``QuerySet`` method recursively prepopulates
-the cache of all one-to-many relationships ahead of time. Example::
-
- >>> e = Entry.objects.select_related().get(id=2)
- >>> print e.blog # Doesn't hit the database; uses cached version.
- >>> print e.blog # Doesn't hit the database; uses cached version.
-
-.. _backwards-related-objects:
-
-Following relationships "backward"
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If a model has a ``ForeignKey``, instances of the foreign-key model will have
-access to a ``Manager`` that returns all instances of the first model. By
-default, this ``Manager`` is named ``FOO_set``, where ``FOO`` is the source
-model name, lowercased. This ``Manager`` returns ``QuerySets``, which can be
-filtered and manipulated as described in the "Retrieving objects" section
-above.
-
-Example::
-
- >>> b = Blog.objects.get(id=1)
- >>> b.entry_set.all() # Returns all Entry objects related to Blog.
-
- # b.entry_set is a Manager that returns QuerySets.
- >>> b.entry_set.filter(headline__contains='Lennon')
- >>> b.entry_set.count()
-
-You can override the ``FOO_set`` name by setting the ``related_name``
-parameter in the ``ForeignKey()`` definition. For example, if the ``Entry``
-model was altered to ``blog = ForeignKey(Blog, related_name='entries')``, the
-above example code would look like this::
-
- >>> b = Blog.objects.get(id=1)
- >>> b.entries.all() # Returns all Entry objects related to Blog.
-
- # b.entries is a Manager that returns QuerySets.
- >>> b.entries.filter(headline__contains='Lennon')
- >>> b.entries.count()
-
-You cannot access a reverse ``ForeignKey`` ``Manager`` from the class; it must
-be accessed from an instance::
-
- >>> Blog.entry_set
- Traceback:
- ...
- AttributeError: "Manager must be accessed via instance".
-
-In addition to the ``QuerySet`` methods defined in "Retrieving objects" above,
-the ``ForeignKey`` ``Manager`` has additional methods used to handle the set of
-related objects. A synopsis of each is below, and complete details can be found
-in the :doc:`related objects reference </ref/models/relations>`.
-
-``add(obj1, obj2, ...)``
- Adds the specified model objects to the related object set.
-
-``create(**kwargs)``
- Creates a new object, saves it and puts it in the related object set.
- Returns the newly created object.
-
-``remove(obj1, obj2, ...)``
- Removes the specified model objects from the related object set.
-
-``clear()``
- Removes all objects from the related object set.
-
-To assign the members of a related set in one fell swoop, just assign to it
-from any iterable object. The iterable can contain object instances, or just
-a list of primary key values. For example::
-
- b = Blog.objects.get(id=1)
- b.entry_set = [e1, e2]
-
-In this example, ``e1`` and ``e2`` can be full Entry instances, or integer
-primary key values.
-
-If the ``clear()`` method is available, any pre-existing objects will be
-removed from the ``entry_set`` before all objects in the iterable (in this
-case, a list) are added to the set. If the ``clear()`` method is *not*
-available, all objects in the iterable will be added without removing any
-existing elements.
-
-Each "reverse" operation described in this section has an immediate effect on
-the database. Every addition, creation and deletion is immediately and
-automatically saved to the database.
-
-Many-to-many relationships
---------------------------
-
-Both ends of a many-to-many relationship get automatic API access to the other
-end. The API works just as a "backward" one-to-many relationship, above.
-
-The only difference is in the attribute naming: The model that defines the
-``ManyToManyField`` uses the attribute name of that field itself, whereas the
-"reverse" model uses the lowercased model name of the original model, plus
-``'_set'`` (just like reverse one-to-many relationships).
-
-An example makes this easier to understand::
-
- e = Entry.objects.get(id=3)
- e.authors.all() # Returns all Author objects for this Entry.
- e.authors.count()
- e.authors.filter(name__contains='John')
-
- a = Author.objects.get(id=5)
- a.entry_set.all() # Returns all Entry objects for this Author.
-
-Like ``ForeignKey``, ``ManyToManyField`` can specify ``related_name``. In the
-above example, if the ``ManyToManyField`` in ``Entry`` had specified
-``related_name='entries'``, then each ``Author`` instance would have an
-``entries`` attribute instead of ``entry_set``.
-
-One-to-one relationships
-------------------------
-
-One-to-one relationships are very similar to many-to-one relationships. If you
-define a :class:`~django.db.models.OneToOneField` on your model, instances of
-that model will have access to the related object via a simple attribute of the
-model.
-
-For example::
-
- class EntryDetail(models.Model):
- entry = models.OneToOneField(Entry)
- details = models.TextField()
-
- ed = EntryDetail.objects.get(id=2)
- ed.entry # Returns the related Entry object.
-
-The difference comes in "reverse" queries. The related model in a one-to-one
-relationship also has access to a :class:`~django.db.models.Manager` object, but
-that :class:`~django.db.models.Manager` represents a single object, rather than
-a collection of objects::
-
- e = Entry.objects.get(id=2)
- e.entrydetail # returns the related EntryDetail object
-
-If no object has been assigned to this relationship, Django will raise
-a ``DoesNotExist`` exception.
-
-Instances can be assigned to the reverse relationship in the same way as
-you would assign the forward relationship::
-
- e.entrydetail = ed
-
-How are the backward relationships possible?
---------------------------------------------
-
-Other object-relational mappers require you to define relationships on both
-sides. The Django developers believe this is a violation of the DRY (Don't
-Repeat Yourself) principle, so Django only requires you to define the
-relationship on one end.
-
-But how is this possible, given that a model class doesn't know which other
-model classes are related to it until those other model classes are loaded?
-
-The answer lies in the :setting:`INSTALLED_APPS` setting. The first time any model is
-loaded, Django iterates over every model in :setting:`INSTALLED_APPS` and creates the
-backward relationships in memory as needed. Essentially, one of the functions
-of :setting:`INSTALLED_APPS` is to tell Django the entire model domain.
-
-Queries over related objects
-----------------------------
-
-Queries involving related objects follow the same rules as queries involving
-normal value fields. When specifying the value for a query to match, you may
-use either an object instance itself, or the primary key value for the object.
-
-For example, if you have a Blog object ``b`` with ``id=5``, the following
-three queries would be identical::
-
- Entry.objects.filter(blog=b) # Query using object instance
- Entry.objects.filter(blog=b.id) # Query using id from instance
- Entry.objects.filter(blog=5) # Query using id directly
-
-Falling back to raw SQL
-=======================
-
-If you find yourself needing to write an SQL query that is too complex for
-Django's database-mapper to handle, you can fall back on writing SQL by hand.
-Django has a couple of options for writing raw SQL queries; see
-:doc:`/topics/db/sql`.
-
-Finally, it's important to note that the Django database layer is merely an
-interface to your database. You can access your database via other tools,
-programming languages or database frameworks; there's nothing Django-specific
-about your database.
diff --git a/parts/django/docs/topics/db/sql.txt b/parts/django/docs/topics/db/sql.txt
deleted file mode 100644
index cac9a72..0000000
--- a/parts/django/docs/topics/db/sql.txt
+++ /dev/null
@@ -1,279 +0,0 @@
-==========================
-Performing raw SQL queries
-==========================
-
-.. currentmodule:: django.db.models
-
-When the :doc:`model query APIs </topics/db/queries>` don't go far enough, you
-can fall back to writing raw SQL. Django gives you two ways of performing raw
-SQL queries: you can use :meth:`Manager.raw()` to `perform raw queries and
-return model instances`__, or you can avoid the model layer entirely and
-`execute custom SQL directly`__.
-
-__ `performing raw queries`_
-__ `executing custom SQL directly`_
-
-Performing raw queries
-======================
-
-.. versionadded:: 1.2
-
-The ``raw()`` manager method can be used to perform raw SQL queries that
-return model instances:
-
-.. method:: Manager.raw(raw_query, params=None, translations=None)
-
-This method method takes a raw SQL query, executes it, and returns a
-:class:`~django.db.models.query.RawQuerySet` instance. This
-:class:`~django.db.models.query.RawQuerySet` instance can be iterated
-over just like an normal QuerySet to provide object instances.
-
-This is best illustrated with an example. Suppose you've got the following model::
-
- class Person(models.Model):
- first_name = models.CharField(...)
- last_name = models.CharField(...)
- birth_date = models.DateField(...)
-
-You could then execute custom SQL like so::
-
- >>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
- ... print p
- John Smith
- Jane Jones
-
-.. admonition:: Model table names
-
- Where'd the name of the ``Person`` table come from in that example?
-
- By default, Django figures out a database table name by joining the
- model's "app label" -- the name you used in ``manage.py startapp`` -- to
- the model's class name, with an underscore between them. In the example
- we've assumed that the ``Person`` model lives in an app named ``myapp``,
- so its table would be ``myapp_person``.
-
- For more details check out the documentation for the
- :attr:`~Options.db_table` option, which also lets you manually set the
- database table name.
-
-Of course, this example isn't very exciting -- it's exactly the same as
-running ``Person.objects.all()``. However, ``raw()`` has a bunch of other
-options that make it very powerful.
-
-Mapping query fields to model fields
-------------------------------------
-
-``raw()`` automatically maps fields in the query to fields on the model.
-
-The order of fields in your query doesn't matter. In other words, both
-of the following queries work identically::
-
- >>> Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM myapp_person')
- ...
- >>> Person.objects.raw('SELECT last_name, birth_date, first_name, id FROM myapp_person')
- ...
-
-Matching is done by name. This means that you can use SQL's ``AS`` clauses to
-map fields in the query to model fields. So if you had some other table that
-had ``Person`` data in it, you could easily map it into ``Person`` instances::
-
- >>> Person.objects.raw('''SELECT first AS first_name,
- ... last AS last_name,
- ... bd AS birth_date,
- ... pk as id,
- ... FROM some_other_table''')
-
-As long as the names match, the model instances will be created correctly.
-
-Alternatively, you can map fields in the query to model fields using the
-``translations`` argument to ``raw()``. This is a dictionary mapping names of
-fields in the query to names of fields on the model. For example, the above
-query could also be written::
-
- >>> name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'}
- >>> Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)
-
-Index lookups
--------------
-
-``raw()`` supports indexing, so if you need only the first result you can
-write::
-
- >>> first_person = Person.objects.raw('SELECT * from myapp_person')[0]
-
-However, the indexing and slicing are not performed at the database level. If
-you have a big amount of ``Person`` objects in your database, it is more
-efficient to limit the query at the SQL level::
-
- >>> first_person = Person.objects.raw('SELECT * from myapp_person LIMIT 1')[0]
-
-Deferring model fields
-----------------------
-
-Fields may also be left out::
-
- >>> people = Person.objects.raw('SELECT id, first_name FROM myapp_person')
-
-The ``Person`` objects returned by this query will be deferred model instances
-(see :meth:`~django.db.models.QuerySet.defer()`). This means that the fields
-that are omitted from the query will be loaded on demand. For example::
-
- >>> for p in Person.objects.raw('SELECT id, first_name FROM myapp_person'):
- ... print p.first_name, # This will be retrieved by the original query
- ... print p.last_name # This will be retrieved on demand
- ...
- John Smith
- Jane Jones
-
-From outward appearances, this looks like the query has retrieved both
-the first name and last name. However, this example actually issued 3
-queries. Only the first names were retrieved by the raw() query -- the
-last names were both retrieved on demand when they were printed.
-
-There is only one field that you can't leave out - the primary key
-field. Django uses the primary key to identify model instances, so it
-must always be included in a raw query. An ``InvalidQuery`` exception
-will be raised if you forget to include the primary key.
-
-Adding annotations
-------------------
-
-You can also execute queries containing fields that aren't defined on the
-model. For example, we could use `PostgreSQL's age() function`__ to get a list
-of people with their ages calculated by the database::
-
- >>> people = Person.objects.raw('SELECT *, age(birth_date) AS age FROM myapp_person')
- >>> for p in people:
- ... print "%s is %s." % (p.first_name, p.age)
- John is 37.
- Jane is 42.
- ...
-
-__ http://www.postgresql.org/docs/8.4/static/functions-datetime.html
-
-Passing parameters into ``raw()``
----------------------------------
-
-If you need to perform parameterized queries, you can use the ``params``
-argument to ``raw()``::
-
- >>> lname = 'Doe'
- >>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])
-
-``params`` is a list of parameters. You'll use ``%s`` placeholders in the
-query string (regardless of your database engine); they'll be replaced with
-parameters from the ``params`` list.
-
-.. warning::
-
- **Do not use string formatting on raw queries!**
-
- It's tempting to write the above query as::
-
- >>> query = 'SELECT * FROM myapp_person WHERE last_name = %s' % lname
- >>> Person.objects.raw(query)
-
- **Don't.**
-
- Using the ``params`` list completely protects you from `SQL injection
- attacks`__, a common exploit where attackers inject arbitrary SQL into
- your database. If you use string interpolation, sooner or later you'll
- fall victim to SQL injection. As long as you remember to always use the
- ``params`` list you'll be protected.
-
-__ http://en.wikipedia.org/wiki/SQL_injection
-
-Executing custom SQL directly
-=============================
-
-Sometimes even :meth:`Manager.raw` isn't quite enough: you might need to
-perform queries that don't map cleanly to models, or directly execute
-``UPDATE``, ``INSERT``, or ``DELETE`` queries.
-
-In these cases, you can always access the database directly, routing around
-the model layer entirely.
-
-The object ``django.db.connection`` represents the
-default database connection, and ``django.db.transaction`` represents the
-default database transaction. To use the database connection, call
-``connection.cursor()`` to get a cursor object. Then, call
-``cursor.execute(sql, [params])`` to execute the SQL and ``cursor.fetchone()``
-or ``cursor.fetchall()`` to return the resulting rows. After performing a data
-changing operation, you should then call
-``transaction.commit_unless_managed()`` to ensure your changes are committed
-to the database. If your query is purely a data retrieval operation, no commit
-is required. For example::
-
- def my_custom_sql():
- from django.db import connection, transaction
- cursor = connection.cursor()
-
- # Data modifying operation - commit required
- cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
- transaction.commit_unless_managed()
-
- # Data retrieval operation - no commit required
- cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
- row = cursor.fetchone()
-
- return row
-
-If you are using more than one database you can use
-``django.db.connections`` to obtain the connection (and cursor) for a
-specific database. ``django.db.connections`` is a dictionary-like
-object that allows you to retrieve a specific connection using it's
-alias::
-
- from django.db import connections
- cursor = connections['my_db_alias'].cursor()
-
-.. _transactions-and-raw-sql:
-
-Transactions and raw SQL
-------------------------
-If you are using transaction decorators (such as ``commit_on_success``) to
-wrap your views and provide transaction control, you don't have to make a
-manual call to ``transaction.commit_unless_managed()`` -- you can manually
-commit if you want to, but you aren't required to, since the decorator will
-commit for you. However, if you don't manually commit your changes, you will
-need to manually mark the transaction as dirty, using
-``transaction.set_dirty()``::
-
- @commit_on_success
- def my_custom_sql_view(request, value):
- from django.db import connection, transaction
- cursor = connection.cursor()
-
- # Data modifying operation
- cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [value])
-
- # Since we modified data, mark the transaction as dirty
- transaction.set_dirty()
-
- # Data retrieval operation. This doesn't dirty the transaction,
- # so no call to set_dirty() is required.
- cursor.execute("SELECT foo FROM bar WHERE baz = %s", [value])
- row = cursor.fetchone()
-
- return render_to_response('template.html', {'row': row})
-
-The call to ``set_dirty()`` is made automatically when you use the Django ORM
-to make data modifying database calls. However, when you use raw SQL, Django
-has no way of knowing if your SQL modifies data or not. The manual call to
-``set_dirty()`` ensures that Django knows that there are modifications that
-must be committed.
-
-Connections and cursors
------------------------
-
-``connection`` and ``cursor`` mostly implement the standard `Python DB-API`_
-(except when it comes to :doc:`transaction handling </topics/db/transactions>`).
-If you're not familiar with the Python DB-API, note that the SQL statement in
-``cursor.execute()`` uses placeholders, ``"%s"``, rather than adding parameters
-directly within the SQL. If you use this technique, the underlying database
-library will automatically add quotes and escaping to your parameter(s) as
-necessary. (Also note that Django expects the ``"%s"`` placeholder, *not* the
-``"?"`` placeholder, which is used by the SQLite Python bindings. This is for
-the sake of consistency and sanity.)
-
-.. _Python DB-API: http://www.python.org/dev/peps/pep-0249/
diff --git a/parts/django/docs/topics/db/transactions.txt b/parts/django/docs/topics/db/transactions.txt
deleted file mode 100644
index be9d9a8..0000000
--- a/parts/django/docs/topics/db/transactions.txt
+++ /dev/null
@@ -1,328 +0,0 @@
-==============================
-Managing database transactions
-==============================
-
-.. currentmodule:: django.db
-
-Django gives you a few ways to control how database transactions are managed,
-if you're using a database that supports transactions.
-
-Django's default transaction behavior
-=====================================
-
-Django's default behavior is to run with an open transaction which it
-commits automatically when any built-in, data-altering model function is
-called. For example, if you call ``model.save()`` or ``model.delete()``, the
-change will be committed immediately.
-
-This is much like the auto-commit setting for most databases. As soon as you
-perform an action that needs to write to the database, Django produces the
-``INSERT``/``UPDATE``/``DELETE`` statements and then does the ``COMMIT``.
-There's no implicit ``ROLLBACK``.
-
-Tying transactions to HTTP requests
-===================================
-
-The recommended way to handle transactions in Web requests is to tie them to
-the request and response phases via Django's ``TransactionMiddleware``.
-
-It works like this: When a request starts, Django starts a transaction. If the
-response is produced without problems, Django commits any pending transactions.
-If the view function produces an exception, Django rolls back any pending
-transactions.
-
-To activate this feature, just add the ``TransactionMiddleware`` middleware to
-your :setting:`MIDDLEWARE_CLASSES` setting::
-
- MIDDLEWARE_CLASSES = (
- 'django.middleware.cache.UpdateCacheMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.transaction.TransactionMiddleware',
- 'django.middleware.cache.FetchFromCacheMiddleware',
- )
-
-The order is quite important. The transaction middleware applies not only to
-view functions, but also for all middleware modules that come after it. So if
-you use the session middleware after the transaction middleware, session
-creation will be part of the transaction.
-
-The various cache middlewares are an exception:
-:class:`~django.middleware.cache.CacheMiddleware`,
-:class:`~django.middleware.cache.UpdateCacheMiddleware`, and
-:class:`~django.middleware.cache.FetchFromCacheMiddleware` are never affected.
-Even when using database caching, Django's cache backend uses its own
-database cursor (which is mapped to its own database connection internally).
-
-Controlling transaction management in views
-===========================================
-
-For most people, implicit request-based transactions work wonderfully. However,
-if you need more fine-grained control over how transactions are managed, you
-can use Python decorators to change the way transactions are handled by a
-particular view function. All of the decorators take an option ``using``
-parameter which should be the alias for a database connection for which the
-behavior applies to. If no alias is specified then the ``"default"`` database
-is used.
-
-.. note::
-
- Although the examples below use view functions as examples, these
- decorators can be applied to non-view functions as well.
-
-.. _topics-db-transactions-autocommit:
-
-``django.db.transaction.autocommit``
-------------------------------------
-
-Use the ``autocommit`` decorator to switch a view function to Django's default
-commit behavior, regardless of the global transaction setting.
-
-Example::
-
- from django.db import transaction
-
- @transaction.autocommit
- def viewfunc(request):
- ....
-
- @transaction.autocommit(using="my_other_database")
- def viewfunc2(request):
- ....
-
-Within ``viewfunc()``, transactions will be committed as soon as you call
-``model.save()``, ``model.delete()``, or any other function that writes to the
-database. ``viewfunc2()`` will have this same behavior, but for the
-``"my_other_database"`` connection.
-
-``django.db.transaction.commit_on_success``
--------------------------------------------
-
-Use the ``commit_on_success`` decorator to use a single transaction for
-all the work done in a function::
-
- from django.db import transaction
-
- @transaction.commit_on_success
- def viewfunc(request):
- ....
-
- @transaction.commit_on_success(using="my_other_database")
- def viewfunc2(request):
- ....
-
-If the function returns successfully, then Django will commit all work done
-within the function at that point. If the function raises an exception, though,
-Django will roll back the transaction.
-
-``django.db.transaction.commit_manually``
------------------------------------------
-
-Use the ``commit_manually`` decorator if you need full control over
-transactions. It tells Django you'll be managing the transaction on your own.
-
-If your view changes data and doesn't ``commit()`` or ``rollback()``, Django
-will raise a ``TransactionManagementError`` exception.
-
-Manual transaction management looks like this::
-
- from django.db import transaction
-
- @transaction.commit_manually
- def viewfunc(request):
- ...
- # You can commit/rollback however and whenever you want
- transaction.commit()
- ...
-
- # But you've got to remember to do it yourself!
- try:
- ...
- except:
- transaction.rollback()
- else:
- transaction.commit()
-
- @transaction.commit_manually(using="my_other_database")
- def viewfunc2(request):
- ....
-
-.. admonition:: An important note to users of earlier Django releases:
-
- The database ``connection.commit()`` and ``connection.rollback()`` methods
- (called ``db.commit()`` and ``db.rollback()`` in 0.91 and earlier) no
- longer exist. They've been replaced by ``transaction.commit()`` and
- ``transaction.rollback()``.
-
-How to globally deactivate transaction management
-=================================================
-
-Control freaks can totally disable all transaction management by setting
-``DISABLE_TRANSACTION_MANAGEMENT`` to ``True`` in the Django settings file.
-
-If you do this, Django won't provide any automatic transaction management
-whatsoever. Middleware will no longer implicitly commit transactions, and
-you'll need to roll management yourself. This even requires you to commit
-changes done by middleware somewhere else.
-
-Thus, this is best used in situations where you want to run your own
-transaction-controlling middleware or do something really strange. In almost
-all situations, you'll be better off using the default behavior, or the
-transaction middleware, and only modify selected functions as needed.
-
-.. _topics-db-transactions-savepoints:
-
-Savepoints
-==========
-
-A savepoint is a marker within a transaction that enables you to roll back
-part of a transaction, rather than the full transaction. Savepoints are
-available to the PostgreSQL 8 and Oracle backends. Other backends will
-provide the savepoint functions, but they are empty operations - they won't
-actually do anything.
-
-Savepoints aren't especially useful if you are using the default
-``autocommit`` behaviour of Django. However, if you are using
-``commit_on_success`` or ``commit_manually``, each open transaction will build
-up a series of database operations, awaiting a commit or rollback. If you
-issue a rollback, the entire transaction is rolled back. Savepoints provide
-the ability to perform a fine-grained rollback, rather than the full rollback
-that would be performed by ``transaction.rollback()``.
-
-Each of these functions takes a ``using`` argument which should be the name of
-a database for which the behavior applies. If no ``using`` argument is
-provided then the ``"default"`` database is used.
-
-Savepoints are controlled by three methods on the transaction object:
-
-.. method:: transaction.savepoint(using=None)
-
- Creates a new savepoint. This marks a point in the transaction that
- is known to be in a "good" state.
-
- Returns the savepoint ID (sid).
-
-.. method:: transaction.savepoint_commit(sid, using=None)
-
- Updates the savepoint to include any operations that have been performed
- since the savepoint was created, or since the last commit.
-
-.. method:: transaction.savepoint_rollback(sid, using=None)
-
- Rolls the transaction back to the last point at which the savepoint was
- committed.
-
-The following example demonstrates the use of savepoints::
-
- from django.db import transaction
-
- @transaction.commit_manually
- def viewfunc(request):
-
- a.save()
- # open transaction now contains a.save()
- sid = transaction.savepoint()
-
- b.save()
- # open transaction now contains a.save() and b.save()
-
- if want_to_keep_b:
- transaction.savepoint_commit(sid)
- # open transaction still contains a.save() and b.save()
- else:
- transaction.savepoint_rollback(sid)
- # open transaction now contains only a.save()
-
- transaction.commit()
-
-Transactions in MySQL
-=====================
-
-If you're using MySQL, your tables may or may not support transactions; it
-depends on your MySQL version and the table types you're using. (By
-"table types," we mean something like "InnoDB" or "MyISAM".) MySQL transaction
-peculiarities are outside the scope of this article, but the MySQL site has
-`information on MySQL transactions`_.
-
-If your MySQL setup does *not* support transactions, then Django will function
-in auto-commit mode: Statements will be executed and committed as soon as
-they're called. If your MySQL setup *does* support transactions, Django will
-handle transactions as explained in this document.
-
-.. _information on MySQL transactions: http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-transactions.html
-
-Handling exceptions within PostgreSQL transactions
-==================================================
-
-When a call to a PostgreSQL cursor raises an exception (typically
-``IntegrityError``), all subsequent SQL in the same transaction will fail with
-the error "current transaction is aborted, queries ignored until end of
-transaction block". Whilst simple use of ``save()`` is unlikely to raise an
-exception in PostgreSQL, there are more advanced usage patterns which
-might, such as saving objects with unique fields, saving using the
-force_insert/force_update flag, or invoking custom SQL.
-
-There are several ways to recover from this sort of error.
-
-Transaction rollback
---------------------
-
-The first option is to roll back the entire transaction. For example::
-
- a.save() # Succeeds, but may be undone by transaction rollback
- try:
- b.save() # Could throw exception
- except IntegrityError:
- transaction.rollback()
- c.save() # Succeeds, but a.save() may have been undone
-
-Calling ``transaction.rollback()`` rolls back the entire transaction. Any
-uncommitted database operations will be lost. In this example, the changes
-made by ``a.save()`` would be lost, even though that operation raised no error
-itself.
-
-Savepoint rollback
-------------------
-
-If you are using PostgreSQL 8 or later, you can use :ref:`savepoints
-<topics-db-transactions-savepoints>` to control the extent of a rollback.
-Before performing a database operation that could fail, you can set or update
-the savepoint; that way, if the operation fails, you can roll back the single
-offending operation, rather than the entire transaction. For example::
-
- a.save() # Succeeds, and never undone by savepoint rollback
- try:
- sid = transaction.savepoint()
- b.save() # Could throw exception
- transaction.savepoint_commit(sid)
- except IntegrityError:
- transaction.savepoint_rollback(sid)
- c.save() # Succeeds, and a.save() is never undone
-
-In this example, ``a.save()`` will not be undone in the case where
-``b.save()`` raises an exception.
-
-Database-level autocommit
--------------------------
-
-.. versionadded:: 1.1
-
-With PostgreSQL 8.2 or later, there is an advanced option to run PostgreSQL
-with :doc:`database-level autocommit </ref/databases>`. If you use this option,
-there is no constantly open transaction, so it is always possible to continue
-after catching an exception. For example::
-
- a.save() # succeeds
- try:
- b.save() # Could throw exception
- except IntegrityError:
- pass
- c.save() # succeeds
-
-.. note::
-
- This is not the same as the :ref:`autocommit decorator
- <topics-db-transactions-autocommit>`. When using database level autocommit
- there is no database transaction at all. The ``autocommit`` decorator
- still uses transactions, automatically committing each transaction when
- a database modifying operation occurs.
diff --git a/parts/django/docs/topics/email.txt b/parts/django/docs/topics/email.txt
deleted file mode 100644
index 36bebfb..0000000
--- a/parts/django/docs/topics/email.txt
+++ /dev/null
@@ -1,618 +0,0 @@
-==============
-Sending e-mail
-==============
-
-.. module:: django.core.mail
- :synopsis: Helpers to easily send e-mail.
-
-Although Python makes sending e-mail relatively easy via the `smtplib
-library`_, Django provides a couple of light wrappers over it. These wrappers
-are provided to make sending e-mail extra quick, to make it easy to test
-e-mail sending during development, and to provide support for platforms that
-can't use SMTP.
-
-The code lives in the ``django.core.mail`` module.
-
-.. _smtplib library: http://docs.python.org/library/smtplib.html
-
-Quick example
-=============
-
-In two lines::
-
- from django.core.mail import send_mail
-
- send_mail('Subject here', 'Here is the message.', 'from@example.com',
- ['to@example.com'], fail_silently=False)
-
-Mail is sent using the SMTP host and port specified in the
-:setting:`EMAIL_HOST` and :setting:`EMAIL_PORT` settings. The
-:setting:`EMAIL_HOST_USER` and :setting:`EMAIL_HOST_PASSWORD` settings, if
-set, are used to authenticate to the SMTP server, and the
-:setting:`EMAIL_USE_TLS` setting controls whether a secure connection is used.
-
-.. note::
-
- The character set of e-mail sent with ``django.core.mail`` will be set to
- the value of your :setting:`DEFAULT_CHARSET` setting.
-
-send_mail()
-===========
-
-.. function:: send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None)
-
-The simplest way to send e-mail is using
-``django.core.mail.send_mail()``.
-
-The ``subject``, ``message``, ``from_email`` and ``recipient_list`` parameters
-are required.
-
- * ``subject``: A string.
- * ``message``: A string.
- * ``from_email``: A string.
- * ``recipient_list``: A list of strings, each an e-mail address. Each
- member of ``recipient_list`` will see the other recipients in the "To:"
- field of the e-mail message.
- * ``fail_silently``: A boolean. If it's ``False``, ``send_mail`` will raise
- an ``smtplib.SMTPException``. See the `smtplib docs`_ for a list of
- possible exceptions, all of which are subclasses of ``SMTPException``.
- * ``auth_user``: The optional username to use to authenticate to the SMTP
- server. If this isn't provided, Django will use the value of the
- :setting:`EMAIL_HOST_USER` setting.
- * ``auth_password``: The optional password to use to authenticate to the
- SMTP server. If this isn't provided, Django will use the value of the
- :setting:`EMAIL_HOST_PASSWORD` setting.
- * ``connection``: The optional e-mail backend to use to send the mail.
- If unspecified, an instance of the default backend will be used.
- See the documentation on :ref:`E-mail backends <topic-email-backends>`
- for more details.
-
-.. _smtplib docs: http://docs.python.org/library/smtplib.html
-
-send_mass_mail()
-================
-
-.. function:: send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password=None, connection=None)
-
-``django.core.mail.send_mass_mail()`` is intended to handle mass e-mailing.
-
-``datatuple`` is a tuple in which each element is in this format::
-
- (subject, message, from_email, recipient_list)
-
-``fail_silently``, ``auth_user`` and ``auth_password`` have the same functions
-as in :meth:`~django.core.mail.send_mail()`.
-
-Each separate element of ``datatuple`` results in a separate e-mail message.
-As in :meth:`~django.core.mail.send_mail()`, recipients in the same
-``recipient_list`` will all see the other addresses in the e-mail messages'
-"To:" field.
-
-For example, the following code would send two different messages to
-two different sets of recipients; however, only one connection to the
-mail server would be opened::
-
- message1 = ('Subject here', 'Here is the message', 'from@example.com, ['first@example.com', 'other@example.com'])
- message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com'])
- send_mass_mail((message1, message2), fail_silently=False)
-
-send_mass_mail() vs. send_mail()
---------------------------------
-
-The main difference between :meth:`~django.core.mail.send_mass_mail()` and
-:meth:`~django.core.mail.send_mail()` is that
-:meth:`~django.core.mail.send_mail()` opens a connection to the mail server
-each time it's executed, while :meth:`~django.core.mail.send_mass_mail()` uses
-a single connection for all of its messages. This makes
-:meth:`~django.core.mail.send_mass_mail()` slightly more efficient.
-
-mail_admins()
-=============
-
-.. function:: mail_admins(subject, message, fail_silently=False, connection=None)
-
-``django.core.mail.mail_admins()`` is a shortcut for sending an e-mail to the
-site admins, as defined in the :setting:`ADMINS` setting.
-
-``mail_admins()`` prefixes the subject with the value of the
-:setting:`EMAIL_SUBJECT_PREFIX` setting, which is ``"[Django] "`` by default.
-
-The "From:" header of the e-mail will be the value of the
-:setting:`SERVER_EMAIL` setting.
-
-This method exists for convenience and readability.
-
-mail_managers()
-===============
-
-.. function:: mail_managers(subject, message, fail_silently=False, connection=None)
-
-``django.core.mail.mail_managers()`` is just like ``mail_admins()``, except it
-sends an e-mail to the site managers, as defined in the :setting:`MANAGERS`
-setting.
-
-Examples
-========
-
-This sends a single e-mail to john@example.com and jane@example.com, with them
-both appearing in the "To:"::
-
- send_mail('Subject', 'Message.', 'from@example.com',
- ['john@example.com', 'jane@example.com'])
-
-This sends a message to john@example.com and jane@example.com, with them both
-receiving a separate e-mail::
-
- datatuple = (
- ('Subject', 'Message.', 'from@example.com', ['john@example.com']),
- ('Subject', 'Message.', 'from@example.com', ['jane@example.com']),
- )
- send_mass_mail(datatuple)
-
-Preventing header injection
-===========================
-
-`Header injection`_ is a security exploit in which an attacker inserts extra
-e-mail headers to control the "To:" and "From:" in e-mail messages that your
-scripts generate.
-
-The Django e-mail functions outlined above all protect against header injection
-by forbidding newlines in header values. If any ``subject``, ``from_email`` or
-``recipient_list`` contains a newline (in either Unix, Windows or Mac style),
-the e-mail function (e.g. :meth:`~django.core.mail.send_mail()`) will raise
-``django.core.mail.BadHeaderError`` (a subclass of ``ValueError``) and, hence,
-will not send the e-mail. It's your responsibility to validate all data before
-passing it to the e-mail functions.
-
-If a ``message`` contains headers at the start of the string, the headers will
-simply be printed as the first bit of the e-mail message.
-
-Here's an example view that takes a ``subject``, ``message`` and ``from_email``
-from the request's POST data, sends that to admin@example.com and redirects to
-"/contact/thanks/" when it's done::
-
- from django.core.mail import send_mail, BadHeaderError
-
- def send_email(request):
- subject = request.POST.get('subject', '')
- message = request.POST.get('message', '')
- from_email = request.POST.get('from_email', '')
- if subject and message and from_email:
- try:
- send_mail(subject, message, from_email, ['admin@example.com'])
- except BadHeaderError:
- return HttpResponse('Invalid header found.')
- return HttpResponseRedirect('/contact/thanks/')
- else:
- # In reality we'd use a form class
- # to get proper validation errors.
- return HttpResponse('Make sure all fields are entered and valid.')
-
-.. _Header injection: http://www.nyphp.org/phundamentals/email_header_injection.php
-
-.. _emailmessage-and-smtpconnection:
-
-The EmailMessage class
-======================
-
-.. versionadded:: 1.0
-
-Django's :meth:`~django.core.mail.send_mail()` and
-:meth:`~django.core.mail.send_mass_mail()` functions are actually thin
-wrappers that make use of the :class:`~django.core.mail.EmailMessage` class.
-
-Not all features of the :class:`~django.core.mail.EmailMessage` class are
-available through the :meth:`~django.core.mail.send_mail()` and related
-wrapper functions. If you wish to use advanced features, such as BCC'ed
-recipients, file attachments, or multi-part e-mail, you'll need to create
-:class:`~django.core.mail.EmailMessage` instances directly.
-
-.. note::
- This is a design feature. :meth:`~django.core.mail.send_mail()` and
- related functions were originally the only interface Django provided.
- However, the list of parameters they accepted was slowly growing over
- time. It made sense to move to a more object-oriented design for e-mail
- messages and retain the original functions only for backwards
- compatibility.
-
-:class:`~django.core.mail.EmailMessage` is responsible for creating the e-mail
-message itself. The :ref:`e-mail backend <topic-email-backends>` is then
-responsible for sending the e-mail.
-
-For convenience, :class:`~django.core.mail.EmailMessage` provides a simple
-``send()`` method for sending a single e-mail. If you need to send multiple
-messages, the e-mail backend API :ref:`provides an alternative
-<topics-sending-multiple-emails>`.
-
-EmailMessage Objects
---------------------
-
-.. class:: EmailMessage
-
-The :class:`~django.core.mail.EmailMessage` class is initialized with the
-following parameters (in the given order, if positional arguments are used).
-All parameters are optional and can be set at any time prior to calling the
-``send()`` method.
-
- * ``subject``: The subject line of the e-mail.
-
- * ``body``: The body text. This should be a plain text message.
-
- * ``from_email``: The sender's address. Both ``fred@example.com`` and
- ``Fred <fred@example.com>`` forms are legal. If omitted, the
- :setting:`DEFAULT_FROM_EMAIL` setting is used.
-
- * ``to``: A list or tuple of recipient addresses.
-
- * ``bcc``: A list or tuple of addresses used in the "Bcc" header when
- sending the e-mail.
-
- * ``connection``: An e-mail backend instance. Use this parameter if
- you want to use the same connection for multiple messages. If omitted, a
- new connection is created when ``send()`` is called.
-
- * ``attachments``: A list of attachments to put on the message. These can
- be either ``email.MIMEBase.MIMEBase`` instances, or ``(filename,
- content, mimetype)`` triples.
-
- * ``headers``: A dictionary of extra headers to put on the message. The
- keys are the header name, values are the header values. It's up to the
- caller to ensure header names and values are in the correct format for
- an e-mail message.
-
-For example::
-
- email = EmailMessage('Hello', 'Body goes here', 'from@example.com',
- ['to1@example.com', 'to2@example.com'], ['bcc@example.com'],
- headers = {'Reply-To': 'another@example.com'})
-
-The class has the following methods:
-
- * ``send(fail_silently=False)`` sends the message. If a connection was
- specified when the e-mail was constructed, that connection will be used.
- Otherwise, an instance of the default backend will be instantiated and
- used. If the keyword argument ``fail_silently`` is ``True``, exceptions
- raised while sending the message will be quashed.
-
- * ``message()`` constructs a ``django.core.mail.SafeMIMEText`` object (a
- subclass of Python's ``email.MIMEText.MIMEText`` class) or a
- ``django.core.mail.SafeMIMEMultipart`` object holding the message to be
- sent. If you ever need to extend the
- :class:`~django.core.mail.EmailMessage` class, you'll probably want to
- override this method to put the content you want into the MIME object.
-
- * ``recipients()`` returns a list of all the recipients of the message,
- whether they're recorded in the ``to`` or ``bcc`` attributes. This is
- another method you might need to override when subclassing, because the
- SMTP server needs to be told the full list of recipients when the message
- is sent. If you add another way to specify recipients in your class, they
- need to be returned from this method as well.
-
- * ``attach()`` creates a new file attachment and adds it to the message.
- There are two ways to call ``attach()``:
-
- * You can pass it a single argument that is an
- ``email.MIMEBase.MIMEBase`` instance. This will be inserted directly
- into the resulting message.
-
- * Alternatively, you can pass ``attach()`` three arguments:
- ``filename``, ``content`` and ``mimetype``. ``filename`` is the name
- of the file attachment as it will appear in the e-mail, ``content`` is
- the data that will be contained inside the attachment and
- ``mimetype`` is the optional MIME type for the attachment. If you
- omit ``mimetype``, the MIME content type will be guessed from the
- filename of the attachment.
-
- For example::
-
- message.attach('design.png', img_data, 'image/png')
-
- * ``attach_file()`` creates a new attachment using a file from your
- filesystem. Call it with the path of the file to attach and, optionally,
- the MIME type to use for the attachment. If the MIME type is omitted, it
- will be guessed from the filename. The simplest use would be::
-
- message.attach_file('/images/weather_map.png')
-
-.. _DEFAULT_FROM_EMAIL: ../settings/#default-from-email
-
-Sending alternative content types
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It can be useful to include multiple versions of the content in an e-mail; the
-classic example is to send both text and HTML versions of a message. With
-Django's e-mail library, you can do this using the ``EmailMultiAlternatives``
-class. This subclass of :class:`~django.core.mail.EmailMessage` has an
-``attach_alternative()`` method for including extra versions of the message
-body in the e-mail. All the other methods (including the class initialization)
-are inherited directly from :class:`~django.core.mail.EmailMessage`.
-
-To send a text and HTML combination, you could write::
-
- from django.core.mail import EmailMultiAlternatives
-
- subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
- text_content = 'This is an important message.'
- html_content = '<p>This is an <strong>important</strong> message.</p>'
- msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
- msg.attach_alternative(html_content, "text/html")
- msg.send()
-
-By default, the MIME type of the ``body`` parameter in an
-:class:`~django.core.mail.EmailMessage` is ``"text/plain"``. It is good
-practice to leave this alone, because it guarantees that any recipient will be
-able to read the e-mail, regardless of their mail client. However, if you are
-confident that your recipients can handle an alternative content type, you can
-use the ``content_subtype`` attribute on the
-:class:`~django.core.mail.EmailMessage` class to change the main content type.
-The major type will always be ``"text"``, but you can change the
-subtype. For example::
-
- msg = EmailMessage(subject, html_content, from_email, [to])
- msg.content_subtype = "html" # Main content is now text/html
- msg.send()
-
-.. _topic-email-backends:
-
-E-Mail Backends
-===============
-
-.. versionadded:: 1.2
-
-The actual sending of an e-mail is handled by the e-mail backend.
-
-The e-mail backend class has the following methods:
-
- * ``open()`` instantiates an long-lived e-mail-sending connection.
-
- * ``close()`` closes the current e-mail-sending connection.
-
- * ``send_messages(email_messages)`` sends a list of
- :class:`~django.core.mail.EmailMessage` objects. If the connection is
- not open, this call will implicitly open the connection, and close the
- connection afterwards. If the connection is already open, it will be
- left open after mail has been sent.
-
-Obtaining an instance of an e-mail backend
-------------------------------------------
-
-The :meth:`get_connection` function in ``django.core.mail`` returns an
-instance of the e-mail backend that you can use.
-
-.. currentmodule:: django.core.mail
-
-.. function:: get_connection(backend=None, fail_silently=False, *args, **kwargs)
-
-By default, a call to ``get_connection()`` will return an instance of the
-e-mail backend specified in :setting:`EMAIL_BACKEND`. If you specify the
-``backend`` argument, an instance of that backend will be instantiated.
-
-The ``fail_silently`` argument controls how the backend should handle errors.
-If ``fail_silently`` is True, exceptions during the e-mail sending process
-will be silently ignored.
-
-All other arguments are passed directly to the constructor of the
-e-mail backend.
-
-Django ships with several e-mail sending backends. With the exception of the
-SMTP backend (which is the default), these backends are only useful during
-testing and development. If you have special e-mail sending requirements, you
-can :ref:`write your own e-mail backend <topic-custom-email-backend>`.
-
-.. _topic-email-smtp-backend:
-
-SMTP backend
-~~~~~~~~~~~~
-
-This is the default backend. E-mail will be sent through a SMTP server.
-The server address and authentication credentials are set in the
-:setting:`EMAIL_HOST`, :setting:`EMAIL_PORT`, :setting:`EMAIL_HOST_USER`,
-:setting:`EMAIL_HOST_PASSWORD` and :setting:`EMAIL_USE_TLS` settings in your
-settings file.
-
-The SMTP backend is the default configuration inherited by Django. If you
-want to specify it explicitly, put the following in your settings::
-
- EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
-
-.. admonition:: SMTPConnection objects
-
- Prior to version 1.2, Django provided a
- :class:`~django.core.mail.SMTPConnection` class. This class provided a way
- to directly control the use of SMTP to send e-mail. This class has been
- deprecated in favor of the generic e-mail backend API.
-
- For backwards compatibility :class:`~django.core.mail.SMTPConnection` is
- still available in ``django.core.mail`` as an alias for the SMTP backend.
- New code should use :meth:`~django.core.mail.get_connection` instead.
-
-.. _topic-email-console-backend:
-
-Console backend
-~~~~~~~~~~~~~~~
-
-Instead of sending out real e-mails the console backend just writes the
-e-mails that would be send to the standard output. By default, the console
-backend writes to ``stdout``. You can use a different stream-like object by
-providing the ``stream`` keyword argument when constructing the connection.
-
-To specify this backend, put the following in your settings::
-
- EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
-
-This backend is not intended for use in production -- it is provided as a
-convenience that can be used during development.
-
-.. _topic-email-file-backend:
-
-File backend
-~~~~~~~~~~~~
-
-The file backend writes e-mails to a file. A new file is created for each new
-session that is opened on this backend. The directory to which the files are
-written is either taken from the :setting:`EMAIL_FILE_PATH` setting or from
-the ``file_path`` keyword when creating a connection with
-:meth:`~django.core.mail.get_connection`.
-
-To specify this backend, put the following in your settings::
-
- EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
- EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location
-
-This backend is not intended for use in production -- it is provided as a
-convenience that can be used during development.
-
-.. _topic-email-memory-backend:
-
-In-memory backend
-~~~~~~~~~~~~~~~~~
-
-The ``'locmem'`` backend stores messages in a special attribute of the
-``django.core.mail`` module. The ``outbox`` attribute is created when the
-first message is sent. It's a list with an
-:class:`~django.core.mail.EmailMessage` instance for each message that would
-be send.
-
-To specify this backend, put the following in your settings::
-
- EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
-
-This backend is not intended for use in production -- it is provided as a
-convenience that can be used during development and testing.
-
-.. _topic-email-dummy-backend:
-
-Dummy backend
-~~~~~~~~~~~~~
-
-As the name suggests the dummy backend does nothing with your messages. To
-specify this backend, put the following in your settings::
-
- EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
-
-This backend is not intended for use in production -- it is provided as a
-convenience that can be used during development.
-
-.. _topic-custom-email-backend:
-
-Defining a custom e-mail backend
---------------------------------
-
-If you need to change how e-mails are sent you can write your own e-mail
-backend. The ``EMAIL_BACKEND`` setting in your settings file is then the
-Python import path for your backend class.
-
-Custom e-mail backends should subclass ``BaseEmailBackend`` that is located in
-the ``django.core.mail.backends.base`` module. A custom e-mail backend must
-implement the ``send_messages(email_messages)`` method. This method receives a
-list of :class:`~django.core.mail.EmailMessage` instances and returns the
-number of successfully delivered messages. If your backend has any concept of
-a persistent session or connection, you should also implement the ``open()``
-and ``close()`` methods. Refer to ``smtp.EmailBackend`` for a reference
-implementation.
-
-.. _topics-sending-multiple-emails:
-
-Sending multiple e-mails
-------------------------
-
-Establishing and closing an SMTP connection (or any other network connection,
-for that matter) is an expensive process. If you have a lot of e-mails to send,
-it makes sense to reuse an SMTP connection, rather than creating and
-destroying a connection every time you want to send an e-mail.
-
-There are two ways you tell an e-mail backend to reuse a connection.
-
-Firstly, you can use the ``send_messages()`` method. ``send_messages()`` takes
-a list of :class:`~django.core.mail.EmailMessage` instances (or subclasses),
-and sends them all using a single connection.
-
-For example, if you have a function called ``get_notification_email()`` that
-returns a list of :class:`~django.core.mail.EmailMessage` objects representing
-some periodic e-mail you wish to send out, you could send these e-mails using
-a single call to send_messages::
-
- from django.core import mail
- connection = mail.get_connection() # Use default e-mail connection
- messages = get_notification_email()
- connection.send_messages(messages)
-
-In this example, the call to ``send_messages()`` opens a connection on the
-backend, sends the list of messages, and then closes the connection again.
-
-The second approach is to use the ``open()`` and ``close()`` methods on the
-e-mail backend to manually control the connection. ``send_messages()`` will not
-manually open or close the connection if it is already open, so if you
-manually open the connection, you can control when it is closed. For example::
-
- from django.core import mail
- connection = mail.get_connection()
-
- # Manually open the connection
- connection.open()
-
- # Construct an e-mail message that uses the connection
- email1 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com',
- ['to1@example.com'], connection=connection)
- email1.send() # Send the e-mail
-
- # Construct two more messages
- email2 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com',
- ['to2@example.com'])
- email3 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com',
- ['to3@example.com'])
-
- # Send the two e-mails in a single call -
- connection.send_messages([email2, email3])
- # The connection was already open so send_messages() doesn't close it.
- # We need to manually close the connection.
- connection.close()
-
-
-Testing e-mail sending
-======================
-
-There are times when you do not want Django to send e-mails at
-all. For example, while developing a Web site, you probably don't want
-to send out thousands of e-mails -- but you may want to validate that
-e-mails will be sent to the right people under the right conditions,
-and that those e-mails will contain the correct content.
-
-The easiest way to test your project's use of e-mail is to use the ``console``
-e-mail backend. This backend redirects all e-mail to stdout, allowing you to
-inspect the content of mail.
-
-The ``file`` e-mail backend can also be useful during development -- this backend
-dumps the contents of every SMTP connection to a file that can be inspected
-at your leisure.
-
-Another approach is to use a "dumb" SMTP server that receives the e-mails
-locally and displays them to the terminal, but does not actually send
-anything. Python has a built-in way to accomplish this with a single command::
-
- python -m smtpd -n -c DebuggingServer localhost:1025
-
-This command will start a simple SMTP server listening on port 1025 of
-localhost. This server simply prints to standard output all e-mail headers and
-the e-mail body. You then only need to set the :setting:`EMAIL_HOST` and
-:setting:`EMAIL_PORT` accordingly, and you are set.
-
-For a more detailed discussion of testing and processing of e-mails locally,
-see the Python documentation on the `SMTP Server`_.
-
-.. _SMTP Server: http://docs.python.org/library/smtpd.html
-
-SMTPConnection
-==============
-
-.. class:: SMTPConnection
-
-.. deprecated:: 1.2
-
-The ``SMTPConnection`` class has been deprecated in favor of the generic e-mail
-backend API.
-
-For backwards compatibility ``SMTPConnection`` is still available in
-``django.core.mail`` as an alias for the :ref:`SMTP backend
-<topic-email-smtp-backend>`. New code should use
-:meth:`~django.core.mail.get_connection` instead.
diff --git a/parts/django/docs/topics/files.txt b/parts/django/docs/topics/files.txt
deleted file mode 100644
index d1926c6..0000000
--- a/parts/django/docs/topics/files.txt
+++ /dev/null
@@ -1,147 +0,0 @@
-==============
-Managing files
-==============
-
-.. versionadded:: 1.0
-
-This document describes Django's file access APIs.
-
-By default, Django stores files locally, using the :setting:`MEDIA_ROOT` and
-:setting:`MEDIA_URL` settings. The examples below assume that you're using these
-defaults.
-
-However, Django provides ways to write custom `file storage systems`_ that
-allow you to completely customize where and how Django stores files. The
-second half of this document describes how these storage systems work.
-
-.. _file storage systems: `File storage`_
-
-Using files in models
-=====================
-
-When you use a :class:`~django.db.models.FileField` or
-:class:`~django.db.models.ImageField`, Django provides a set of APIs you can use
-to deal with that file.
-
-Consider the following model, using an :class:`~django.db.models.ImageField` to
-store a photo::
-
- class Car(models.Model):
- name = models.CharField(max_length=255)
- price = models.DecimalField(max_digits=5, decimal_places=2)
- photo = models.ImageField(upload_to='cars')
-
-Any ``Car`` instance will have a ``photo`` attribute that you can use to get at
-the details of the attached photo::
-
- >>> car = Car.objects.get(name="57 Chevy")
- >>> car.photo
- <ImageFieldFile: chevy.jpg>
- >>> car.photo.name
- u'cars/chevy.jpg'
- >>> car.photo.path
- u'/media/cars/chevy.jpg'
- >>> car.photo.url
- u'http://media.example.com/cars/chevy.jpg'
-
-This object -- ``car.photo`` in the example -- is a ``File`` object, which means
-it has all the methods and attributes described below.
-
-The ``File`` object
-===================
-
-Internally, Django uses a :class:`django.core.files.File` instance any time it
-needs to represent a file. This object is a thin wrapper around Python's
-`built-in file object`_ with some Django-specific additions.
-
-.. _built-in file object: http://docs.python.org/library/stdtypes.html#bltin-file-objects
-
-Most of the time you'll simply use a ``File`` that Django's given you (i.e. a
-file attached to a model as above, or perhaps an uploaded file).
-
-If you need to construct a ``File`` yourself, the easiest way is to create one
-using a Python built-in ``file`` object::
-
- >>> from django.core.files import File
-
- # Create a Python file object using open()
- >>> f = open('/tmp/hello.world', 'w')
- >>> myfile = File(f)
-
-Now you can use any of the documented attributes and methods
-of the :class:`~django.core.files.File` class.
-
-File storage
-============
-
-Behind the scenes, Django delegates decisions about how and where to store files
-to a file storage system. This is the object that actually understands things
-like file systems, opening and reading files, etc.
-
-Django's default file storage is given by the :setting:`DEFAULT_FILE_STORAGE`
-setting; if you don't explicitly provide a storage system, this is the one that
-will be used.
-
-See below for details of the built-in default file storage system, and see
-:doc:`/howto/custom-file-storage` for information on writing your own file
-storage system.
-
-Storage objects
----------------
-
-Though most of the time you'll want to use a ``File`` object (which delegates to
-the proper storage for that file), you can use file storage systems directly.
-You can create an instance of some custom file storage class, or -- often more
-useful -- you can use the global default storage system::
-
- >>> from django.core.files.storage import default_storage
- >>> from django.core.files.base import ContentFile
-
- >>> path = default_storage.save('/path/to/file', ContentFile('new content'))
- >>> path
- u'/path/to/file'
-
- >>> default_storage.size(path)
- 11
- >>> default_storage.open(path).read()
- 'new content'
-
- >>> default_storage.delete(path)
- >>> default_storage.exists(path)
- False
-
-See :doc:`/ref/files/storage` for the file storage API.
-
-The built-in filesystem storage class
--------------------------------------
-
-Django ships with a built-in ``FileSystemStorage`` class (defined in
-``django.core.files.storage``) which implements basic local filesystem file
-storage. Its initializer takes two arguments:
-
-====================== ===================================================
-Argument Description
-====================== ===================================================
-``location`` Optional. Absolute path to the directory that will
- hold the files. If omitted, it will be set to the
- value of your :setting:`MEDIA_ROOT` setting.
-``base_url`` Optional. URL that serves the files stored at this
- location. If omitted, it will default to the value
- of your :setting:`MEDIA_URL` setting.
-====================== ===================================================
-
-For example, the following code will store uploaded files under
-``/media/photos`` regardless of what your :setting:`MEDIA_ROOT` setting is::
-
- from django.db import models
- from django.core.files.storage import FileSystemStorage
-
- fs = FileSystemStorage(location='/media/photos')
-
- class Car(models.Model):
- ...
- photo = models.ImageField(storage=fs)
-
-:doc:`Custom storage systems </howto/custom-file-storage>` work the same way:
-you can pass them in as the ``storage`` argument to a
-:class:`~django.db.models.FileField`.
diff --git a/parts/django/docs/topics/forms/formsets.txt b/parts/django/docs/topics/forms/formsets.txt
deleted file mode 100644
index 72296bc..0000000
--- a/parts/django/docs/topics/forms/formsets.txt
+++ /dev/null
@@ -1,440 +0,0 @@
-.. _formsets:
-
-Formsets
-========
-
-A formset is a layer of abstraction to working with multiple forms on the same
-page. It can be best compared to a data grid. Let's say you have the following
-form::
-
- >>> from django import forms
- >>> class ArticleForm(forms.Form):
- ... title = forms.CharField()
- ... pub_date = forms.DateField()
-
-You might want to allow the user to create several articles at once. To create
-a formset out of an ``ArticleForm`` you would do::
-
- >>> from django.forms.formsets import formset_factory
- >>> ArticleFormSet = formset_factory(ArticleForm)
-
-You now have created a formset named ``ArticleFormSet``. The formset gives you
-the ability to iterate over the forms in the formset and display them as you
-would with a regular form::
-
- >>> formset = ArticleFormSet()
- >>> for form in formset.forms:
- ... print form.as_table()
- <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
- <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
-
-As you can see it only displayed one empty form. The number of empty forms
-that is displayed is controlled by the ``extra`` parameter. By default,
-``formset_factory`` defines one extra form; the following example will
-display two blank forms::
-
- >>> ArticleFormSet = formset_factory(ArticleForm, extra=2)
-
-Using initial data with a formset
----------------------------------
-
-Initial data is what drives the main usability of a formset. As shown above
-you can define the number of extra forms. What this means is that you are
-telling the formset how many additional forms to show in addition to the
-number of forms it generates from the initial data. Lets take a look at an
-example::
-
- >>> ArticleFormSet = formset_factory(ArticleForm, extra=2)
- >>> formset = ArticleFormSet(initial=[
- ... {'title': u'Django is now open source',
- ... 'pub_date': datetime.date.today()},
- ... ])
-
- >>> for form in formset.forms:
- ... print form.as_table()
- <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Django is now open source" id="id_form-0-title" /></td></tr>
- <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-12" id="id_form-0-pub_date" /></td></tr>
- <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" id="id_form-1-title" /></td></tr>
- <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" id="id_form-1-pub_date" /></td></tr>
- <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title" /></td></tr>
- <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td></tr>
-
-There are now a total of three forms showing above. One for the initial data
-that was passed in and two extra forms. Also note that we are passing in a
-list of dictionaries as the initial data.
-
-.. seealso::
-
- :ref:`Creating formsets from models with model formsets <model-formsets>`.
-
-.. _formsets-max-num:
-
-Limiting the maximum number of forms
-------------------------------------
-
-The ``max_num`` parameter to ``formset_factory`` gives you the ability to
-limit the maximum number of empty forms the formset will display::
-
- >>> ArticleFormSet = formset_factory(ArticleForm, extra=2, max_num=1)
- >>> formset = ArticleFormset()
- >>> for form in formset.forms:
- ... print form.as_table()
- <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
- <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
-
-.. versionchanged:: 1.2
-
-If the value of ``max_num`` is greater than the number of existing
-objects, up to ``extra`` additional blank forms will be added to the formset,
-so long as the total number of forms does not exceed ``max_num``.
-
-A ``max_num`` value of ``None`` (the default) puts no limit on the number of
-forms displayed. Please note that the default value of ``max_num`` was changed
-from ``0`` to ``None`` in version 1.2 to allow ``0`` as a valid value.
-
-Formset validation
-------------------
-
-Validation with a formset is almost identical to a regular ``Form``. There is
-an ``is_valid`` method on the formset to provide a convenient way to validate
-all forms in the formset::
-
- >>> ArticleFormSet = formset_factory(ArticleForm)
- >>> formset = ArticleFormSet({})
- >>> formset.is_valid()
- True
-
-We passed in no data to the formset which is resulting in a valid form. The
-formset is smart enough to ignore extra forms that were not changed. If we
-provide an invalid article::
-
- >>> data = {
- ... 'form-TOTAL_FORMS': u'2',
- ... 'form-INITIAL_FORMS': u'0',
- ... 'form-MAX_NUM_FORMS': u'',
- ... 'form-0-title': u'Test',
- ... 'form-0-pub_date': u'16 June 1904',
- ... 'form-1-title': u'Test',
- ... 'form-1-pub_date': u'', # <-- this date is missing but required
- ... }
- >>> formset = ArticleFormSet(data)
- >>> formset.is_valid()
- False
- >>> formset.errors
- [{}, {'pub_date': [u'This field is required.']}]
-
-As we can see, ``formset.errors`` is a list whose entries correspond to the
-forms in the formset. Validation was performed for each of the two forms, and
-the expected error message appears for the second item.
-
-.. _understanding-the-managementform:
-
-Understanding the ManagementForm
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You may have noticed the additional data (``form-TOTAL_FORMS``,
-``form-INITIAL_FORMS`` and ``form-MAX_NUM_FORMS``) that was required
-in the formset's data above. This data is required for the
-``ManagementForm``. This form is used by the formset to manage the
-collection of forms contained in the formset. If you don't provide
-this management data, an exception will be raised::
-
- >>> data = {
- ... 'form-0-title': u'Test',
- ... 'form-0-pub_date': u'',
- ... }
- >>> formset = ArticleFormSet(data)
- Traceback (most recent call last):
- ...
- django.forms.util.ValidationError: [u'ManagementForm data is missing or has been tampered with']
-
-It is used to keep track of how many form instances are being displayed. If
-you are adding new forms via JavaScript, you should increment the count fields
-in this form as well.
-
-The management form is available as an attribute of the formset
-itself. When rendering a formset in a template, you can include all
-the management data by rendering ``{{ my_formset.management_form }}``
-(substituting the name of your formset as appropriate).
-
-.. versionadded:: 1.1
-
-``total_form_count`` and ``initial_form_count``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-``BaseFormSet`` has a couple of methods that are closely related to the
-``ManagementForm``, ``total_form_count`` and ``initial_form_count``.
-
-``total_form_count`` returns the total number of forms in this formset.
-``initial_form_count`` returns the number of forms in the formset that were
-pre-filled, and is also used to determine how many forms are required. You
-will probably never need to override either of these methods, so please be
-sure you understand what they do before doing so.
-
-.. versionadded:: 1.2
-
-``empty_form``
-~~~~~~~~~~~~~~
-
-``BaseFormSet`` provides an additional attribute ``empty_form`` which returns
-a form instance with a prefix of ``__prefix__`` for easier use in dynamic
-forms with JavaScript.
-
-Custom formset validation
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-A formset has a ``clean`` method similar to the one on a ``Form`` class. This
-is where you define your own validation that works at the formset level::
-
- >>> from django.forms.formsets import BaseFormSet
-
- >>> class BaseArticleFormSet(BaseFormSet):
- ... def clean(self):
- ... """Checks that no two articles have the same title."""
- ... if any(self.errors):
- ... # Don't bother validating the formset unless each form is valid on its own
- ... return
- ... titles = []
- ... for i in range(0, self.total_form_count()):
- ... form = self.forms[i]
- ... title = form.cleaned_data['title']
- ... if title in titles:
- ... raise forms.ValidationError, "Articles in a set must have distinct titles."
- ... titles.append(title)
-
- >>> ArticleFormSet = formset_factory(ArticleForm, formset=BaseArticleFormSet)
- >>> data = {
- ... 'form-TOTAL_FORMS': u'2',
- ... 'form-INITIAL_FORMS': u'0',
- ... 'form-MAX_NUM_FORMS': u'',
- ... 'form-0-title': u'Test',
- ... 'form-0-pub_date': u'16 June 1904',
- ... 'form-1-title': u'Test',
- ... 'form-1-pub_date': u'23 June 1912',
- ... }
- >>> formset = ArticleFormSet(data)
- >>> formset.is_valid()
- False
- >>> formset.errors
- [{}, {}]
- >>> formset.non_form_errors()
- [u'Articles in a set must have distinct titles.']
-
-The formset ``clean`` method is called after all the ``Form.clean`` methods
-have been called. The errors will be found using the ``non_form_errors()``
-method on the formset.
-
-Dealing with ordering and deletion of forms
--------------------------------------------
-
-Common use cases with a formset is dealing with ordering and deletion of the
-form instances. This has been dealt with for you. The ``formset_factory``
-provides two optional parameters ``can_order`` and ``can_delete`` that will do
-the extra work of adding the extra fields and providing simpler ways of
-getting to that data.
-
-``can_order``
-~~~~~~~~~~~~~
-
-Default: ``False``
-
-Lets create a formset with the ability to order::
-
- >>> ArticleFormSet = formset_factory(ArticleForm, can_order=True)
- >>> formset = ArticleFormSet(initial=[
- ... {'title': u'Article #1', 'pub_date': datetime.date(2008, 5, 10)},
- ... {'title': u'Article #2', 'pub_date': datetime.date(2008, 5, 11)},
- ... ])
- >>> for form in formset.forms:
- ... print form.as_table()
- <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title" /></td></tr>
- <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date" /></td></tr>
- <tr><th><label for="id_form-0-ORDER">Order:</label></th><td><input type="text" name="form-0-ORDER" value="1" id="id_form-0-ORDER" /></td></tr>
- <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" value="Article #2" id="id_form-1-title" /></td></tr>
- <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" value="2008-05-11" id="id_form-1-pub_date" /></td></tr>
- <tr><th><label for="id_form-1-ORDER">Order:</label></th><td><input type="text" name="form-1-ORDER" value="2" id="id_form-1-ORDER" /></td></tr>
- <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title" /></td></tr>
- <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td></tr>
- <tr><th><label for="id_form-2-ORDER">Order:</label></th><td><input type="text" name="form-2-ORDER" id="id_form-2-ORDER" /></td></tr>
-
-This adds an additional field to each form. This new field is named ``ORDER``
-and is an ``forms.IntegerField``. For the forms that came from the initial
-data it automatically assigned them a numeric value. Lets look at what will
-happen when the user changes these values::
-
- >>> data = {
- ... 'form-TOTAL_FORMS': u'3',
- ... 'form-INITIAL_FORMS': u'2',
- ... 'form-MAX_NUM_FORMS': u'',
- ... 'form-0-title': u'Article #1',
- ... 'form-0-pub_date': u'2008-05-10',
- ... 'form-0-ORDER': u'2',
- ... 'form-1-title': u'Article #2',
- ... 'form-1-pub_date': u'2008-05-11',
- ... 'form-1-ORDER': u'1',
- ... 'form-2-title': u'Article #3',
- ... 'form-2-pub_date': u'2008-05-01',
- ... 'form-2-ORDER': u'0',
- ... }
-
- >>> formset = ArticleFormSet(data, initial=[
- ... {'title': u'Article #1', 'pub_date': datetime.date(2008, 5, 10)},
- ... {'title': u'Article #2', 'pub_date': datetime.date(2008, 5, 11)},
- ... ])
- >>> formset.is_valid()
- True
- >>> for form in formset.ordered_forms:
- ... print form.cleaned_data
- {'pub_date': datetime.date(2008, 5, 1), 'ORDER': 0, 'title': u'Article #3'}
- {'pub_date': datetime.date(2008, 5, 11), 'ORDER': 1, 'title': u'Article #2'}
- {'pub_date': datetime.date(2008, 5, 10), 'ORDER': 2, 'title': u'Article #1'}
-
-``can_delete``
-~~~~~~~~~~~~~~
-
-Default: ``False``
-
-Lets create a formset with the ability to delete::
-
- >>> ArticleFormSet = formset_factory(ArticleForm, can_delete=True)
- >>> formset = ArticleFormSet(initial=[
- ... {'title': u'Article #1', 'pub_date': datetime.date(2008, 5, 10)},
- ... {'title': u'Article #2', 'pub_date': datetime.date(2008, 5, 11)},
- ... ])
- >>> for form in formset.forms:
- .... print form.as_table()
- <input type="hidden" name="form-TOTAL_FORMS" value="3" id="id_form-TOTAL_FORMS" /><input type="hidden" name="form-INITIAL_FORMS" value="2" id="id_form-INITIAL_FORMS" /><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS" />
- <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title" /></td></tr>
- <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date" /></td></tr>
- <tr><th><label for="id_form-0-DELETE">Delete:</label></th><td><input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE" /></td></tr>
- <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" value="Article #2" id="id_form-1-title" /></td></tr>
- <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" value="2008-05-11" id="id_form-1-pub_date" /></td></tr>
- <tr><th><label for="id_form-1-DELETE">Delete:</label></th><td><input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE" /></td></tr>
- <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title" /></td></tr>
- <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td></tr>
- <tr><th><label for="id_form-2-DELETE">Delete:</label></th><td><input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE" /></td></tr>
-
-Similar to ``can_order`` this adds a new field to each form named ``DELETE``
-and is a ``forms.BooleanField``. When data comes through marking any of the
-delete fields you can access them with ``deleted_forms``::
-
- >>> data = {
- ... 'form-TOTAL_FORMS': u'3',
- ... 'form-INITIAL_FORMS': u'2',
- ... 'form-MAX_NUM_FORMS': u'',
- ... 'form-0-title': u'Article #1',
- ... 'form-0-pub_date': u'2008-05-10',
- ... 'form-0-DELETE': u'on',
- ... 'form-1-title': u'Article #2',
- ... 'form-1-pub_date': u'2008-05-11',
- ... 'form-1-DELETE': u'',
- ... 'form-2-title': u'',
- ... 'form-2-pub_date': u'',
- ... 'form-2-DELETE': u'',
- ... }
-
- >>> formset = ArticleFormSet(data, initial=[
- ... {'title': u'Article #1', 'pub_date': datetime.date(2008, 5, 10)},
- ... {'title': u'Article #2', 'pub_date': datetime.date(2008, 5, 11)},
- ... ])
- >>> [form.cleaned_data for form in formset.deleted_forms]
- [{'DELETE': True, 'pub_date': datetime.date(2008, 5, 10), 'title': u'Article #1'}]
-
-Adding additional fields to a formset
--------------------------------------
-
-If you need to add additional fields to the formset this can be easily
-accomplished. The formset base class provides an ``add_fields`` method. You
-can simply override this method to add your own fields or even redefine the
-default fields/attributes of the order and deletion fields::
-
- >>> class BaseArticleFormSet(BaseFormSet):
- ... def add_fields(self, form, index):
- ... super(BaseArticleFormSet, self).add_fields(form, index)
- ... form.fields["my_field"] = forms.CharField()
-
- >>> ArticleFormSet = formset_factory(ArticleForm, formset=BaseArticleFormSet)
- >>> formset = ArticleFormSet()
- >>> for form in formset.forms:
- ... print form.as_table()
- <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
- <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
- <tr><th><label for="id_form-0-my_field">My field:</label></th><td><input type="text" name="form-0-my_field" id="id_form-0-my_field" /></td></tr>
-
-Using a formset in views and templates
---------------------------------------
-
-Using a formset inside a view is as easy as using a regular ``Form`` class.
-The only thing you will want to be aware of is making sure to use the
-management form inside the template. Let's look at a sample view:
-
-.. code-block:: python
-
- def manage_articles(request):
- ArticleFormSet = formset_factory(ArticleForm)
- if request.method == 'POST':
- formset = ArticleFormSet(request.POST, request.FILES)
- if formset.is_valid():
- # do something with the formset.cleaned_data
- pass
- else:
- formset = ArticleFormSet()
- return render_to_response('manage_articles.html', {'formset': formset})
-
-The ``manage_articles.html`` template might look like this:
-
-.. code-block:: html+django
-
- <form method="post" action="">
- {{ formset.management_form }}
- <table>
- {% for form in formset.forms %}
- {{ form }}
- {% endfor %}
- </table>
- </form>
-
-However the above can be slightly shortcutted and let the formset itself deal
-with the management form:
-
-.. code-block:: html+django
-
- <form method="post" action="">
- <table>
- {{ formset }}
- </table>
- </form>
-
-The above ends up calling the ``as_table`` method on the formset class.
-
-Using more than one formset in a view
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You are able to use more than one formset in a view if you like. Formsets
-borrow much of its behavior from forms. With that said you are able to use
-``prefix`` to prefix formset form field names with a given value to allow
-more than one formset to be sent to a view without name clashing. Lets take
-a look at how this might be accomplished:
-
-.. code-block:: python
-
- def manage_articles(request):
- ArticleFormSet = formset_factory(ArticleForm)
- BookFormSet = formset_factory(BookForm)
- if request.method == 'POST':
- article_formset = ArticleFormSet(request.POST, request.FILES, prefix='articles')
- book_formset = BookFormSet(request.POST, request.FILES, prefix='books')
- if article_formset.is_valid() and book_formset.is_valid():
- # do something with the cleaned_data on the formsets.
- pass
- else:
- article_formset = ArticleFormSet(prefix='articles')
- book_formset = BookFormSet(prefix='books')
- return render_to_response('manage_articles.html', {
- 'article_formset': article_formset,
- 'book_formset': book_formset,
- })
-
-You would then render the formsets as normal. It is important to point out
-that you need to pass ``prefix`` on both the POST and non-POST cases so that
-it is rendered and processed correctly.
diff --git a/parts/django/docs/topics/forms/index.txt b/parts/django/docs/topics/forms/index.txt
deleted file mode 100644
index 30b09c0..0000000
--- a/parts/django/docs/topics/forms/index.txt
+++ /dev/null
@@ -1,402 +0,0 @@
-==================
-Working with forms
-==================
-
-.. admonition:: About this document
-
- This document provides an introduction to Django's form handling features.
- For a more detailed look at specific areas of the forms API, see
- :doc:`/ref/forms/api`, :doc:`/ref/forms/fields`, and
- :doc:`/ref/forms/validation`.
-
-.. highlightlang:: html+django
-
-``django.forms`` is Django's form-handling library.
-
-While it is possible to process form submissions just using Django's
-:class:`~django.http.HttpRequest` class, using the form library takes care of a
-number of common form-related tasks. Using it, you can:
-
- 1. Display an HTML form with automatically generated form widgets.
- 2. Check submitted data against a set of validation rules.
- 3. Redisplay a form in the case of validation errors.
- 4. Convert submitted form data to the relevant Python data types.
-
-Overview
-========
-
-The library deals with these concepts:
-
-.. glossary::
-
- Widget
- A class that corresponds to an HTML form widget, e.g.
- ``<input type="text">`` or ``<textarea>``. This handles rendering of the
- widget as HTML.
-
- Field
- A class that is responsible for doing validation, e.g.
- an ``EmailField`` that makes sure its data is a valid e-mail address.
-
- Form
- A collection of fields that knows how to validate itself and
- display itself as HTML.
-
- Form Media
- The CSS and JavaScript resources that are required to render a form.
-
-The library is decoupled from the other Django components, such as the database
-layer, views and templates. It relies only on Django settings, a couple of
-``django.utils`` helper functions and Django's internationalization hooks (but
-you're not required to be using internationalization features to use this
-library).
-
-Form objects
-============
-
-A Form object encapsulates a sequence of form fields and a collection of
-validation rules that must be fulfilled in order for the form to be accepted.
-Form classes are created as subclasses of ``django.forms.Form`` and
-make use of a declarative style that you'll be familiar with if you've used
-Django's database models.
-
-For example, consider a form used to implement "contact me" functionality on a
-personal Web site:
-
-.. code-block:: python
-
- from django import forms
-
- class ContactForm(forms.Form):
- subject = forms.CharField(max_length=100)
- message = forms.CharField()
- sender = forms.EmailField()
- cc_myself = forms.BooleanField(required=False)
-
-A form is composed of ``Field`` objects. In this case, our form has four
-fields: ``subject``, ``message``, ``sender`` and ``cc_myself``. ``CharField``,
-``EmailField`` and ``BooleanField`` are just three of the available field types;
-a full list can be found in :doc:`/ref/forms/fields`.
-
-If your form is going to be used to directly add or edit a Django model, you can
-use a :doc:`ModelForm </topics/forms/modelforms>` to avoid duplicating your model
-description.
-
-Using a form in a view
-----------------------
-
-The standard pattern for processing a form in a view looks like this:
-
-.. code-block:: python
-
- def contact(request):
- if request.method == 'POST': # If the form has been submitted...
- form = ContactForm(request.POST) # A form bound to the POST data
- if form.is_valid(): # All validation rules pass
- # Process the data in form.cleaned_data
- # ...
- return HttpResponseRedirect('/thanks/') # Redirect after POST
- else:
- form = ContactForm() # An unbound form
-
- return render_to_response('contact.html', {
- 'form': form,
- })
-
-
-There are three code paths here:
-
- 1. If the form has not been submitted, an unbound instance of ContactForm is
- created and passed to the template.
- 2. If the form has been submitted, a bound instance of the form is created
- using ``request.POST``. If the submitted data is valid, it is processed
- and the user is re-directed to a "thanks" page.
- 3. If the form has been submitted but is invalid, the bound form instance is
- passed on to the template.
-
-.. versionchanged:: 1.0
- The ``cleaned_data`` attribute was called ``clean_data`` in earlier releases.
-
-The distinction between **bound** and **unbound** forms is important. An unbound
-form does not have any data associated with it; when rendered to the user, it
-will be empty or will contain default values. A bound form does have submitted
-data, and hence can be used to tell if that data is valid. If an invalid bound
-form is rendered it can include inline error messages telling the user where
-they went wrong.
-
-See :ref:`ref-forms-api-bound-unbound` for further information on the
-differences between bound and unbound forms.
-
-Handling file uploads with a form
----------------------------------
-
-To see how to handle file uploads with your form see
-:ref:`binding-uploaded-files` for more information.
-
-Processing the data from a form
--------------------------------
-
-Once ``is_valid()`` returns ``True``, you can process the form submission safe
-in the knowledge that it conforms to the validation rules defined by your form.
-While you could access ``request.POST`` directly at this point, it is better to
-access ``form.cleaned_data``. This data has not only been validated but will
-also be converted in to the relevant Python types for you. In the above example,
-``cc_myself`` will be a boolean value. Likewise, fields such as ``IntegerField``
-and ``FloatField`` convert values to a Python int and float respectively.
-
-Extending the above example, here's how the form data could be processed:
-
-.. code-block:: python
-
- if form.is_valid():
- subject = form.cleaned_data['subject']
- message = form.cleaned_data['message']
- sender = form.cleaned_data['sender']
- cc_myself = form.cleaned_data['cc_myself']
-
- recipients = ['info@example.com']
- if cc_myself:
- recipients.append(sender)
-
- from django.core.mail import send_mail
- send_mail(subject, message, sender, recipients)
- return HttpResponseRedirect('/thanks/') # Redirect after POST
-
-For more on sending e-mail from Django, see :doc:`/topics/email`.
-
-Displaying a form using a template
-----------------------------------
-
-Forms are designed to work with the Django template language. In the above
-example, we passed our ``ContactForm`` instance to the template using the
-context variable ``form``. Here's a simple example template::
-
- <form action="/contact/" method="post">
- {{ form.as_p }}
- <input type="submit" value="Submit" />
- </form>
-
-The form only outputs its own fields; it is up to you to provide the surrounding
-``<form>`` tags and the submit button.
-
-``form.as_p`` will output the form with each form field and accompanying label
-wrapped in a paragraph. Here's the output for our example template::
-
- <form action="/contact/" method="post">
- <p><label for="id_subject">Subject:</label>
- <input id="id_subject" type="text" name="subject" maxlength="100" /></p>
- <p><label for="id_message">Message:</label>
- <input type="text" name="message" id="id_message" /></p>
- <p><label for="id_sender">Sender:</label>
- <input type="text" name="sender" id="id_sender" /></p>
- <p><label for="id_cc_myself">Cc myself:</label>
- <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>
- <input type="submit" value="Submit" />
- </form>
-
-Note that each form field has an ID attribute set to ``id_<field-name>``, which
-is referenced by the accompanying label tag. This is important for ensuring
-forms are accessible to assistive technology such as screen reader software. You
-can also :ref:`customize the way in which labels and ids are generated
-<ref-forms-api-configuring-label>`.
-
-You can also use ``form.as_table`` to output table rows (you'll need to provide
-your own ``<table>`` tags) and ``form.as_ul`` to output list items.
-
-Customizing the form template
------------------------------
-
-If the default generated HTML is not to your taste, you can completely customize
-the way a form is presented using the Django template language. Extending the
-above example::
-
- <form action="/contact/" method="post">
- {{ form.non_field_errors }}
- <div class="fieldWrapper">
- {{ form.subject.errors }}
- <label for="id_subject">E-mail subject:</label>
- {{ form.subject }}
- </div>
- <div class="fieldWrapper">
- {{ form.message.errors }}
- <label for="id_message">Your message:</label>
- {{ form.message }}
- </div>
- <div class="fieldWrapper">
- {{ form.sender.errors }}
- <label for="id_sender">Your email address:</label>
- {{ form.sender }}
- </div>
- <div class="fieldWrapper">
- {{ form.cc_myself.errors }}
- <label for="id_cc_myself">CC yourself?</label>
- {{ form.cc_myself }}
- </div>
- <p><input type="submit" value="Send message" /></p>
- </form>
-
-Each named form-field can be output to the template using
-``{{ form.name_of_field }}``, which will produce the HTML needed to display the
-form widget. Using ``{{ form.name_of_field.errors }}`` displays a list of form
-errors, rendered as an unordered list. This might look like::
-
- <ul class="errorlist">
- <li>Sender is required.</li>
- </ul>
-
-The list has a CSS class of ``errorlist`` to allow you to style its appearance.
-If you wish to further customize the display of errors you can do so by looping
-over them::
-
- {% if form.subject.errors %}
- <ol>
- {% for error in form.subject.errors %}
- <li><strong>{{ error|escape }}</strong></li>
- {% endfor %}
- </ol>
- {% endif %}
-
-Looping over the form's fields
-------------------------------
-
-If you're using the same HTML for each of your form fields, you can reduce
-duplicate code by looping through each field in turn using a ``{% for %}``
-loop::
-
- <form action="/contact/" method="post">
- {% for field in form %}
- <div class="fieldWrapper">
- {{ field.errors }}
- {{ field.label_tag }}: {{ field }}
- </div>
- {% endfor %}
- <p><input type="submit" value="Send message" /></p>
- </form>
-
-Within this loop, ``{{ field }}`` is an instance of :class:`BoundField`.
-``BoundField`` also has the following attributes, which can be useful in your
-templates:
-
- ``{{ field.label }}``
- The label of the field, e.g. ``E-mail address``.
-
- ``{{ field.label_tag }}``
- The field's label wrapped in the appropriate HTML ``<label>`` tag,
- e.g. ``<label for="id_email">E-mail address</label>``
-
- ``{{ field.html_name }}``
- The name of the field that will be used in the input element's name
- field. This takes the form prefix into account, if it has been set.
-
- ``{{ field.help_text }}``
- Any help text that has been associated with the field.
-
- ``{{ field.errors }}``
- Outputs a ``<ul class="errorlist">`` containing any validation errors
- corresponding to this field. You can customize the presentation of
- the errors with a ``{% for error in field.errors %}`` loop. In this
- case, each object in the loop is a simple string containing the error
- message.
-
- ``field.is_hidden``
- This attribute is ``True`` if the form field is a hidden field and
- ``False`` otherwise. It's not particularly useful as a template
- variable, but could be useful in conditional tests such as::
-
- {% if field.is_hidden %}
- {# Do something special #}
- {% endif %}
-
-Looping over hidden and visible fields
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you're manually laying out a form in a template, as opposed to relying on
-Django's default form layout, you might want to treat ``<input type="hidden">``
-fields differently than non-hidden fields. For example, because hidden fields
-don't display anything, putting error messages "next to" the field could cause
-confusion for your users -- so errors for those fields should be handled
-differently.
-
-Django provides two methods on a form that allow you to loop over the hidden
-and visible fields independently: ``hidden_fields()`` and
-``visible_fields()``. Here's a modification of an earlier example that uses
-these two methods::
-
- <form action="/contact/" method="post">
- {% for field in form.visible_fields %}
- <div class="fieldWrapper">
-
- {# Include the hidden fields in the form #}
- {% if forloop.first %}
- {% for hidden in form.hidden_fields %}
- {{ hidden }}
- {% endfor %}
- {% endif %}
-
- {{ field.errors }}
- {{ field.label_tag }}: {{ field }}
- </div>
- {% endfor %}
- <p><input type="submit" value="Send message" /></p>
- </form>
-
-This example does not handle any errors in the hidden fields. Usually, an
-error in a hidden field is a sign of form tampering, since normal form
-interaction won't alter them. However, you could easily insert some error
-displays for those form errors, as well.
-
-.. versionadded:: 1.1
- The ``hidden_fields`` and ``visible_fields`` methods are new in Django
- 1.1.
-
-Reusable form templates
------------------------
-
-If your site uses the same rendering logic for forms in multiple places, you
-can reduce duplication by saving the form's loop in a standalone template and
-using the :ttag:`include` tag to reuse it in other templates::
-
- <form action="/contact/" method="post">
- {% include "form_snippet.html" %}
- <p><input type="submit" value="Send message" /></p>
- </form>
-
- # In form_snippet.html:
-
- {% for field in form %}
- <div class="fieldWrapper">
- {{ field.errors }}
- {{ field.label_tag }}: {{ field }}
- </div>
- {% endfor %}
-
-If the form object passed to a template has a different name within the
-context, you can alias it using the :ttag:`with` tag::
-
- <form action="/comments/add/" method="post">
- {% with comment_form as form %}
- {% include "form_snippet.html" %}
- {% endwith %}
- <p><input type="submit" value="Submit comment" /></p>
- </form>
-
-If you find yourself doing this often, you might consider creating a custom
-:ref:`inclusion tag<howto-custom-template-tags-inclusion-tags>`.
-
-Further topics
-==============
-
-This covers the basics, but forms can do a whole lot more:
-
-.. toctree::
- :maxdepth: 2
-
- modelforms
- formsets
- media
-
-.. seealso::
-
- :doc:`The Forms Reference </ref/forms/index>`
- Covers the full API reference, including form fields, form widgets,
- and form and field validation.
diff --git a/parts/django/docs/topics/forms/media.txt b/parts/django/docs/topics/forms/media.txt
deleted file mode 100644
index fe70894..0000000
--- a/parts/django/docs/topics/forms/media.txt
+++ /dev/null
@@ -1,309 +0,0 @@
-Form Media
-==========
-
-Rendering an attractive and easy-to-use Web form requires more than just
-HTML - it also requires CSS stylesheets, and if you want to use fancy
-"Web2.0" widgets, you may also need to include some JavaScript on each
-page. The exact combination of CSS and JavaScript that is required for
-any given page will depend upon the widgets that are in use on that page.
-
-This is where Django media definitions come in. Django allows you to
-associate different media files with the forms and widgets that require
-that media. For example, if you want to use a calendar to render DateFields,
-you can define a custom Calendar widget. This widget can then be associated
-with the CSS and JavaScript that is required to render the calendar. When
-the Calendar widget is used on a form, Django is able to identify the CSS and
-JavaScript files that are required, and provide the list of file names
-in a form suitable for easy inclusion on your Web page.
-
-.. admonition:: Media and Django Admin
-
- The Django Admin application defines a number of customized widgets
- for calendars, filtered selections, and so on. These widgets define
- media requirements, and the Django Admin uses the custom widgets
- in place of the Django defaults. The Admin templates will only include
- those media files that are required to render the widgets on any
- given page.
-
- If you like the widgets that the Django Admin application uses,
- feel free to use them in your own application! They're all stored
- in ``django.contrib.admin.widgets``.
-
-.. admonition:: Which JavaScript toolkit?
-
- Many JavaScript toolkits exist, and many of them include widgets (such
- as calendar widgets) that can be used to enhance your application.
- Django has deliberately avoided blessing any one JavaScript toolkit.
- Each toolkit has its own relative strengths and weaknesses - use
- whichever toolkit suits your requirements. Django is able to integrate
- with any JavaScript toolkit.
-
-Media as a static definition
-----------------------------
-
-The easiest way to define media is as a static definition. Using this method,
-the media declaration is an inner class. The properties of the inner class
-define the media requirements.
-
-Here's a simple example::
-
- class CalendarWidget(forms.TextInput):
- class Media:
- css = {
- 'all': ('pretty.css',)
- }
- js = ('animations.js', 'actions.js')
-
-This code defines a ``CalendarWidget``, which will be based on ``TextInput``.
-Every time the CalendarWidget is used on a form, that form will be directed
-to include the CSS file ``pretty.css``, and the JavaScript files
-``animations.js`` and ``actions.js``.
-
-This static media definition is converted at runtime into a widget property
-named ``media``. The media for a CalendarWidget instance can be retrieved
-through this property::
-
- >>> w = CalendarWidget()
- >>> print w.media
- <link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/animations.js"></script>
- <script type="text/javascript" src="http://media.example.com/actions.js"></script>
-
-Here's a list of all possible ``Media`` options. There are no required options.
-
-``css``
-~~~~~~~
-
-A dictionary describing the CSS files required for various forms of output
-media.
-
-The values in the dictionary should be a tuple/list of file names. See
-`the section on media paths`_ for details of how to specify paths to media
-files.
-
-.. _the section on media paths: `Paths in media definitions`_
-
-The keys in the dictionary are the output media types. These are the same
-types accepted by CSS files in media declarations: 'all', 'aural', 'braille',
-'embossed', 'handheld', 'print', 'projection', 'screen', 'tty' and 'tv'. If
-you need to have different stylesheets for different media types, provide
-a list of CSS files for each output medium. The following example would
-provide two CSS options -- one for the screen, and one for print::
-
- class Media:
- css = {
- 'screen': ('pretty.css',),
- 'print': ('newspaper.css',)
- }
-
-If a group of CSS files are appropriate for multiple output media types,
-the dictionary key can be a comma separated list of output media types.
-In the following example, TV's and projectors will have the same media
-requirements::
-
- class Media:
- css = {
- 'screen': ('pretty.css',),
- 'tv,projector': ('lo_res.css',),
- 'print': ('newspaper.css',)
- }
-
-If this last CSS definition were to be rendered, it would become the following HTML::
-
- <link href="http://media.example.com/pretty.css" type="text/css" media="screen" rel="stylesheet" />
- <link href="http://media.example.com/lo_res.css" type="text/css" media="tv,projector" rel="stylesheet" />
- <link href="http://media.example.com/newspaper.css" type="text/css" media="print" rel="stylesheet" />
-
-``js``
-~~~~~~
-
-A tuple describing the required JavaScript files. See
-`the section on media paths`_ for details of how to specify paths to media
-files.
-
-``extend``
-~~~~~~~~~~
-
-A boolean defining inheritance behavior for media declarations.
-
-By default, any object using a static media definition will inherit all the
-media associated with the parent widget. This occurs regardless of how the
-parent defines its media requirements. For example, if we were to extend our
-basic Calendar widget from the example above::
-
- >>> class FancyCalendarWidget(CalendarWidget):
- ... class Media:
- ... css = {
- ... 'all': ('fancy.css',)
- ... }
- ... js = ('whizbang.js',)
-
- >>> w = FancyCalendarWidget()
- >>> print w.media
- <link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
- <link href="http://media.example.com/fancy.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/animations.js"></script>
- <script type="text/javascript" src="http://media.example.com/actions.js"></script>
- <script type="text/javascript" src="http://media.example.com/whizbang.js"></script>
-
-The FancyCalendar widget inherits all the media from it's parent widget. If
-you don't want media to be inherited in this way, add an ``extend=False``
-declaration to the media declaration::
-
- >>> class FancyCalendarWidget(CalendarWidget):
- ... class Media:
- ... extend = False
- ... css = {
- ... 'all': ('fancy.css',)
- ... }
- ... js = ('whizbang.js',)
-
- >>> w = FancyCalendarWidget()
- >>> print w.media
- <link href="http://media.example.com/fancy.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/whizbang.js"></script>
-
-If you require even more control over media inheritance, define your media
-using a `dynamic property`_. Dynamic properties give you complete control over
-which media files are inherited, and which are not.
-
-.. _dynamic property: `Media as a dynamic property`_
-
-Media as a dynamic property
----------------------------
-
-If you need to perform some more sophisticated manipulation of media
-requirements, you can define the media property directly. This is done
-by defining a widget property that returns an instance of ``forms.Media``.
-The constructor for ``forms.Media`` accepts ``css`` and ``js`` keyword
-arguments in the same format as that used in a static media definition.
-
-For example, the static media definition for our Calendar Widget could
-also be defined in a dynamic fashion::
-
- class CalendarWidget(forms.TextInput):
- def _media(self):
- return forms.Media(css={'all': ('pretty.css',)},
- js=('animations.js', 'actions.js'))
- media = property(_media)
-
-See the section on `Media objects`_ for more details on how to construct
-return values for dynamic media properties.
-
-Paths in media definitions
---------------------------
-
-Paths used to specify media can be either relative or absolute. If a path
-starts with '/', 'http://' or 'https://', it will be interpreted as an absolute
-path, and left as-is. All other paths will be prepended with the value of
-``settings.MEDIA_URL``. For example, if the MEDIA_URL for your site was
-``http://media.example.com/``::
-
- class CalendarWidget(forms.TextInput):
- class Media:
- css = {
- 'all': ('/css/pretty.css',),
- }
- js = ('animations.js', 'http://othersite.com/actions.js')
-
- >>> w = CalendarWidget()
- >>> print w.media
- <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/animations.js"></script>
- <script type="text/javascript" src="http://othersite.com/actions.js"></script>
-
-Media objects
--------------
-
-When you interrogate the media attribute of a widget or form, the value that
-is returned is a ``forms.Media`` object. As we have already seen, the string
-representation of a Media object is the HTML required to include media
-in the ``<head>`` block of your HTML page.
-
-However, Media objects have some other interesting properties.
-
-Media subsets
-~~~~~~~~~~~~~
-
-If you only want media of a particular type, you can use the subscript operator
-to filter out a medium of interest. For example::
-
- >>> w = CalendarWidget()
- >>> print w.media
- <link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/animations.js"></script>
- <script type="text/javascript" src="http://media.example.com/actions.js"></script>
-
- >>> print w.media['css']
- <link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
-
-When you use the subscript operator, the value that is returned is a new
-Media object -- but one that only contains the media of interest.
-
-Combining media objects
-~~~~~~~~~~~~~~~~~~~~~~~
-
-Media objects can also be added together. When two media objects are added,
-the resulting Media object contains the union of the media from both files::
-
- >>> class CalendarWidget(forms.TextInput):
- ... class Media:
- ... css = {
- ... 'all': ('pretty.css',)
- ... }
- ... js = ('animations.js', 'actions.js')
-
- >>> class OtherWidget(forms.TextInput):
- ... class Media:
- ... js = ('whizbang.js',)
-
- >>> w1 = CalendarWidget()
- >>> w2 = OtherWidget()
- >>> print w1.media + w2.media
- <link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/animations.js"></script>
- <script type="text/javascript" src="http://media.example.com/actions.js"></script>
- <script type="text/javascript" src="http://media.example.com/whizbang.js"></script>
-
-Media on Forms
---------------
-
-Widgets aren't the only objects that can have media definitions -- forms
-can also define media. The rules for media definitions on forms are the
-same as the rules for widgets: declarations can be static or dynamic;
-path and inheritance rules for those declarations are exactly the same.
-
-Regardless of whether you define a media declaration, *all* Form objects
-have a media property. The default value for this property is the result
-of adding the media definitions for all widgets that are part of the form::
-
- >>> class ContactForm(forms.Form):
- ... date = DateField(widget=CalendarWidget)
- ... name = CharField(max_length=40, widget=OtherWidget)
-
- >>> f = ContactForm()
- >>> f.media
- <link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/animations.js"></script>
- <script type="text/javascript" src="http://media.example.com/actions.js"></script>
- <script type="text/javascript" src="http://media.example.com/whizbang.js"></script>
-
-If you want to associate additional media with a form -- for example, CSS for form
-layout -- simply add a media declaration to the form::
-
- >>> class ContactForm(forms.Form):
- ... date = DateField(widget=CalendarWidget)
- ... name = CharField(max_length=40, widget=OtherWidget)
- ...
- ... class Media:
- ... css = {
- ... 'all': ('layout.css',)
- ... }
-
- >>> f = ContactForm()
- >>> f.media
- <link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
- <link href="http://media.example.com/layout.css" type="text/css" media="all" rel="stylesheet" />
- <script type="text/javascript" src="http://media.example.com/animations.js"></script>
- <script type="text/javascript" src="http://media.example.com/actions.js"></script>
- <script type="text/javascript" src="http://media.example.com/whizbang.js"></script>
diff --git a/parts/django/docs/topics/forms/modelforms.txt b/parts/django/docs/topics/forms/modelforms.txt
deleted file mode 100644
index 23ed9a7..0000000
--- a/parts/django/docs/topics/forms/modelforms.txt
+++ /dev/null
@@ -1,885 +0,0 @@
-==========================
-Creating forms from models
-==========================
-
-.. module:: django.forms.models
- :synopsis: ModelForm and ModelFormset.
-
-.. currentmodule:: django.forms
-
-``ModelForm``
-=============
-.. class:: ModelForm
-
-If you're building a database-driven app, chances are you'll have forms that
-map closely to Django models. For instance, you might have a ``BlogComment``
-model, and you want to create a form that lets people submit comments. In this
-case, it would be redundant to define the field types in your form, because
-you've already defined the fields in your model.
-
-For this reason, Django provides a helper class that let you create a ``Form``
-class from a Django model.
-
-For example::
-
- >>> from django.forms import ModelForm
-
- # Create the form class.
- >>> class ArticleForm(ModelForm):
- ... class Meta:
- ... model = Article
-
- # Creating a form to add an article.
- >>> form = ArticleForm()
-
- # Creating a form to change an existing article.
- >>> article = Article.objects.get(pk=1)
- >>> form = ArticleForm(instance=article)
-
-Field types
------------
-
-The generated ``Form`` class will have a form field for every model field. Each
-model field has a corresponding default form field. For example, a
-``CharField`` on a model is represented as a ``CharField`` on a form. A
-model ``ManyToManyField`` is represented as a ``MultipleChoiceField``. Here is
-the full list of conversions:
-
- =============================== ========================================
- Model field Form field
- =============================== ========================================
- ``AutoField`` Not represented in the form
-
- ``BigIntegerField`` ``IntegerField`` with ``min_value`` set
- to -9223372036854775808 and ``max_value``
- set to 9223372036854775807.
-
- ``BooleanField`` ``BooleanField``
-
- ``CharField`` ``CharField`` with ``max_length`` set to
- the model field's ``max_length``
-
- ``CommaSeparatedIntegerField`` ``CharField``
-
- ``DateField`` ``DateField``
-
- ``DateTimeField`` ``DateTimeField``
-
- ``DecimalField`` ``DecimalField``
-
- ``EmailField`` ``EmailField``
-
- ``FileField`` ``FileField``
-
- ``FilePathField`` ``CharField``
-
- ``FloatField`` ``FloatField``
-
- ``ForeignKey`` ``ModelChoiceField`` (see below)
-
- ``ImageField`` ``ImageField``
-
- ``IntegerField`` ``IntegerField``
-
- ``IPAddressField`` ``IPAddressField``
-
- ``ManyToManyField`` ``ModelMultipleChoiceField`` (see
- below)
-
- ``NullBooleanField`` ``CharField``
-
- ``PhoneNumberField`` ``USPhoneNumberField``
- (from ``django.contrib.localflavor.us``)
-
- ``PositiveIntegerField`` ``IntegerField``
-
- ``PositiveSmallIntegerField`` ``IntegerField``
-
- ``SlugField`` ``SlugField``
-
- ``SmallIntegerField`` ``IntegerField``
-
- ``TextField`` ``CharField`` with
- ``widget=forms.Textarea``
-
- ``TimeField`` ``TimeField``
-
- ``URLField`` ``URLField`` with ``verify_exists`` set
- to the model field's ``verify_exists``
-
- ``XMLField`` ``CharField`` with
- ``widget=forms.Textarea``
- =============================== ========================================
-
-
-.. versionadded:: 1.0
- The ``FloatField`` form field and ``DecimalField`` model and form fields
- are new in Django 1.0.
-
-.. versionadded:: 1.2
- The ``BigIntegerField`` is new in Django 1.2.
-
-
-As you might expect, the ``ForeignKey`` and ``ManyToManyField`` model field
-types are special cases:
-
- * ``ForeignKey`` is represented by ``django.forms.ModelChoiceField``,
- which is a ``ChoiceField`` whose choices are a model ``QuerySet``.
-
- * ``ManyToManyField`` is represented by
- ``django.forms.ModelMultipleChoiceField``, which is a
- ``MultipleChoiceField`` whose choices are a model ``QuerySet``.
-
-In addition, each generated form field has attributes set as follows:
-
- * If the model field has ``blank=True``, then ``required`` is set to
- ``False`` on the form field. Otherwise, ``required=True``.
-
- * The form field's ``label`` is set to the ``verbose_name`` of the model
- field, with the first character capitalized.
-
- * The form field's ``help_text`` is set to the ``help_text`` of the model
- field.
-
- * If the model field has ``choices`` set, then the form field's ``widget``
- will be set to ``Select``, with choices coming from the model field's
- ``choices``. The choices will normally include the blank choice which is
- selected by default. If the field is required, this forces the user to
- make a selection. The blank choice will not be included if the model
- field has ``blank=False`` and an explicit ``default`` value (the
- ``default`` value will be initially selected instead).
-
-Finally, note that you can override the form field used for a given model
-field. See `Overriding the default field types or widgets`_ below.
-
-A full example
---------------
-
-Consider this set of models::
-
- from django.db import models
- from django.forms import ModelForm
-
- TITLE_CHOICES = (
- ('MR', 'Mr.'),
- ('MRS', 'Mrs.'),
- ('MS', 'Ms.'),
- )
-
- class Author(models.Model):
- name = models.CharField(max_length=100)
- title = models.CharField(max_length=3, choices=TITLE_CHOICES)
- birth_date = models.DateField(blank=True, null=True)
-
- def __unicode__(self):
- return self.name
-
- class Book(models.Model):
- name = models.CharField(max_length=100)
- authors = models.ManyToManyField(Author)
-
- class AuthorForm(ModelForm):
- class Meta:
- model = Author
-
- class BookForm(ModelForm):
- class Meta:
- model = Book
-
-With these models, the ``ModelForm`` subclasses above would be roughly
-equivalent to this (the only difference being the ``save()`` method, which
-we'll discuss in a moment.)::
-
- class AuthorForm(forms.Form):
- name = forms.CharField(max_length=100)
- title = forms.CharField(max_length=3,
- widget=forms.Select(choices=TITLE_CHOICES))
- birth_date = forms.DateField(required=False)
-
- class BookForm(forms.Form):
- name = forms.CharField(max_length=100)
- authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all())
-
-The ``is_valid()`` method and ``errors``
-----------------------------------------
-
-.. versionchanged:: 1.2
-
-The first time you call ``is_valid()`` or access the ``errors`` attribute of a
-``ModelForm`` has always triggered form validation, but as of Django 1.2, it
-will also trigger :ref:`model validation <validating-objects>`. This has the
-side-effect of cleaning the model you pass to the ``ModelForm`` constructor.
-For instance, calling ``is_valid()`` on your form will convert any date fields
-on your model to actual date objects.
-
-
-The ``save()`` method
----------------------
-
-Every form produced by ``ModelForm`` also has a ``save()``
-method. This method creates and saves a database object from the data
-bound to the form. A subclass of ``ModelForm`` can accept an existing
-model instance as the keyword argument ``instance``; if this is
-supplied, ``save()`` will update that instance. If it's not supplied,
-``save()`` will create a new instance of the specified model::
-
- # Create a form instance from POST data.
- >>> f = ArticleForm(request.POST)
-
- # Save a new Article object from the form's data.
- >>> new_article = f.save()
-
- # Create a form to edit an existing Article.
- >>> a = Article.objects.get(pk=1)
- >>> f = ArticleForm(instance=a)
- >>> f.save()
-
- # Create a form to edit an existing Article, but use
- # POST data to populate the form.
- >>> a = Article.objects.get(pk=1)
- >>> f = ArticleForm(request.POST, instance=a)
- >>> f.save()
-
-Note that ``save()`` will raise a ``ValueError`` if the data in the form
-doesn't validate -- i.e., if form.errors evaluates to True.
-
-This ``save()`` method accepts an optional ``commit`` keyword argument, which
-accepts either ``True`` or ``False``. If you call ``save()`` with
-``commit=False``, then it will return an object that hasn't yet been saved to
-the database. In this case, it's up to you to call ``save()`` on the resulting
-model instance. This is useful if you want to do custom processing on the
-object before saving it, or if you want to use one of the specialized
-:ref:`model saving options <ref-models-force-insert>`. ``commit`` is ``True``
-by default.
-
-Another side effect of using ``commit=False`` is seen when your model has
-a many-to-many relation with another model. If your model has a many-to-many
-relation and you specify ``commit=False`` when you save a form, Django cannot
-immediately save the form data for the many-to-many relation. This is because
-it isn't possible to save many-to-many data for an instance until the instance
-exists in the database.
-
-To work around this problem, every time you save a form using ``commit=False``,
-Django adds a ``save_m2m()`` method to your ``ModelForm`` subclass. After
-you've manually saved the instance produced by the form, you can invoke
-``save_m2m()`` to save the many-to-many form data. For example::
-
- # Create a form instance with POST data.
- >>> f = AuthorForm(request.POST)
-
- # Create, but don't save the new author instance.
- >>> new_author = f.save(commit=False)
-
- # Modify the author in some way.
- >>> new_author.some_field = 'some_value'
-
- # Save the new instance.
- >>> new_author.save()
-
- # Now, save the many-to-many data for the form.
- >>> f.save_m2m()
-
-Calling ``save_m2m()`` is only required if you use ``save(commit=False)``.
-When you use a simple ``save()`` on a form, all data -- including
-many-to-many data -- is saved without the need for any additional method calls.
-For example::
-
- # Create a form instance with POST data.
- >>> a = Author()
- >>> f = AuthorForm(request.POST, instance=a)
-
- # Create and save the new author instance. There's no need to do anything else.
- >>> new_author = f.save()
-
-Other than the ``save()`` and ``save_m2m()`` methods, a ``ModelForm`` works
-exactly the same way as any other ``forms`` form. For example, the
-``is_valid()`` method is used to check for validity, the ``is_multipart()``
-method is used to determine whether a form requires multipart file upload (and
-hence whether ``request.FILES`` must be passed to the form), etc. See
-:ref:`binding-uploaded-files` for more information.
-
-Using a subset of fields on the form
-------------------------------------
-
-In some cases, you may not want all the model fields to appear on the generated
-form. There are three ways of telling ``ModelForm`` to use only a subset of the
-model fields:
-
-1. Set ``editable=False`` on the model field. As a result, *any* form
- created from the model via ``ModelForm`` will not include that
- field.
-
-2. Use the ``fields`` attribute of the ``ModelForm``'s inner ``Meta``
- class. This attribute, if given, should be a list of field names
- to include in the form.
-
- .. versionchanged:: 1.1
-
- The form will render the fields in the same order they are specified in the
- ``fields`` attribute.
-
-3. Use the ``exclude`` attribute of the ``ModelForm``'s inner ``Meta``
- class. This attribute, if given, should be a list of field names
- to exclude from the form.
-
-For example, if you want a form for the ``Author`` model (defined
-above) that includes only the ``name`` and ``title`` fields, you would
-specify ``fields`` or ``exclude`` like this::
-
- class PartialAuthorForm(ModelForm):
- class Meta:
- model = Author
- fields = ('name', 'title')
-
- class PartialAuthorForm(ModelForm):
- class Meta:
- model = Author
- exclude = ('birth_date',)
-
-Since the Author model has only 3 fields, 'name', 'title', and
-'birth_date', the forms above will contain exactly the same fields.
-
-.. note::
-
- If you specify ``fields`` or ``exclude`` when creating a form with
- ``ModelForm``, then the fields that are not in the resulting form will not
- be set by the form's ``save()`` method. Django will prevent any attempt to
- save an incomplete model, so if the model does not allow the missing fields
- to be empty, and does not provide a default value for the missing fields,
- any attempt to ``save()`` a ``ModelForm`` with missing fields will fail.
- To avoid this failure, you must instantiate your model with initial values
- for the missing, but required fields::
-
- author = Author(title='Mr')
- form = PartialAuthorForm(request.POST, instance=author)
- form.save()
-
- Alternatively, you can use ``save(commit=False)`` and manually set
- any extra required fields::
-
- form = PartialAuthorForm(request.POST)
- author = form.save(commit=False)
- author.title = 'Mr'
- author.save()
-
- See the `section on saving forms`_ for more details on using
- ``save(commit=False)``.
-
-.. _section on saving forms: `The save() method`_
-
-Overriding the default field types or widgets
----------------------------------------------
-
-.. versionadded:: 1.2
- The ``widgets`` attribute is new in Django 1.2.
-
-The default field types, as described in the `Field types`_ table above, are
-sensible defaults. If you have a ``DateField`` in your model, chances are you'd
-want that to be represented as a ``DateField`` in your form. But
-``ModelForm`` gives you the flexibility of changing the form field type and
-widget for a given model field.
-
-To specify a custom widget for a field, use the ``widgets`` attribute of the
-inner ``Meta`` class. This should be a dictionary mapping field names to widget
-classes or instances.
-
-For example, if you want the a ``CharField`` for the ``name``
-attribute of ``Author`` to be represented by a ``<textarea>`` instead
-of its default ``<input type="text">``, you can override the field's
-widget::
-
- from django.forms import ModelForm, Textarea
-
- class AuthorForm(ModelForm):
- class Meta:
- model = Author
- fields = ('name', 'title', 'birth_date')
- widgets = {
- 'name': Textarea(attrs={'cols': 80, 'rows': 20}),
- }
-
-The ``widgets`` dictionary accepts either widget instances (e.g.,
-``Textarea(...)``) or classes (e.g., ``Textarea``).
-
-If you want to further customize a field -- including its type, label, etc. --
-you can do this by declaratively specifying fields like you would in a regular
-``Form``. Declared fields will override the default ones generated by using the
-``model`` attribute.
-
-For example, if you wanted to use ``MyDateFormField`` for the ``pub_date``
-field, you could do the following::
-
- class ArticleForm(ModelForm):
- pub_date = MyDateFormField()
-
- class Meta:
- model = Article
-
-If you want to override a field's default label, then specify the ``label``
-parameter when declaring the form field::
-
- >>> class ArticleForm(ModelForm):
- ... pub_date = DateField(label='Publication date')
- ...
- ... class Meta:
- ... model = Article
-
-.. note::
-
- If you explicitly instantiate a form field like this, Django assumes that you
- want to completely define its behavior; therefore, default attributes (such as
- ``max_length`` or ``required``) are not drawn from the corresponding model. If
- you want to maintain the behavior specified in the model, you must set the
- relevant arguments explicitly when declaring the form field.
-
- For example, if the ``Article`` model looks like this::
-
- class Article(models.Model):
- headline = models.CharField(max_length=200, null=True, blank=True,
- help_text="Use puns liberally")
- content = models.TextField()
-
- and you want to do some custom validation for ``headline``, while keeping
- the ``blank`` and ``help_text`` values as specified, you might define
- ``ArticleForm`` like this::
-
- class ArticleForm(ModelForm):
- headline = MyFormField(max_length=200, required=False,
- help_text="Use puns liberally")
-
- class Meta:
- model = Article
-
- See the :doc:`form field documentation </ref/forms/fields>` for more information
- on fields and their arguments.
-
-Changing the order of fields
-----------------------------
-
-.. versionadded:: 1.1
-
-By default, a ``ModelForm`` will render fields in the same order that they are
-defined on the model, with ``ManyToManyField`` instances appearing last. If
-you want to change the order in which fields are rendered, you can use the
-``fields`` attribute on the ``Meta`` class.
-
-The ``fields`` attribute defines the subset of model fields that will be
-rendered, and the order in which they will be rendered. For example given this
-model::
-
- class Book(models.Model):
- author = models.ForeignKey(Author)
- title = models.CharField(max_length=100)
-
-the ``author`` field would be rendered first. If we wanted the title field
-to be rendered first, we could specify the following ``ModelForm``::
-
- >>> class BookForm(ModelForm):
- ... class Meta:
- ... model = Book
- ... fields = ('title', 'author')
-
-.. _overriding-modelform-clean-method:
-
-Overriding the clean() method
------------------------------
-
-You can override the ``clean()`` method on a model form to provide additional
-validation in the same way you can on a normal form.
-
-In this regard, model forms have two specific characteristics when compared to
-forms:
-
-By default the ``clean()`` method validates the uniqueness of fields that are
-marked as ``unique``, ``unique_together`` or ``unique_for_date|month|year`` on
-the model. Therefore, if you would like to override the ``clean()`` method and
-maintain the default validation, you must call the parent class's ``clean()``
-method.
-
-Also, a model form instance bound to a model object will contain a
-``self.instance`` attribute that gives model form methods access to that
-specific model instance.
-
-Form inheritance
-----------------
-
-As with basic forms, you can extend and reuse ``ModelForms`` by inheriting
-them. This is useful if you need to declare extra fields or extra methods on a
-parent class for use in a number of forms derived from models. For example,
-using the previous ``ArticleForm`` class::
-
- >>> class EnhancedArticleForm(ArticleForm):
- ... def clean_pub_date(self):
- ... ...
-
-This creates a form that behaves identically to ``ArticleForm``, except there's
-some extra validation and cleaning for the ``pub_date`` field.
-
-You can also subclass the parent's ``Meta`` inner class if you want to change
-the ``Meta.fields`` or ``Meta.excludes`` lists::
-
- >>> class RestrictedArticleForm(EnhancedArticleForm):
- ... class Meta(ArticleForm.Meta):
- ... exclude = ('body',)
-
-This adds the extra method from the ``EnhancedArticleForm`` and modifies
-the original ``ArticleForm.Meta`` to remove one field.
-
-There are a couple of things to note, however.
-
- * Normal Python name resolution rules apply. If you have multiple base
- classes that declare a ``Meta`` inner class, only the first one will be
- used. This means the child's ``Meta``, if it exists, otherwise the
- ``Meta`` of the first parent, etc.
-
- * For technical reasons, a subclass cannot inherit from both a ``ModelForm``
- and a ``Form`` simultaneously.
-
-Chances are these notes won't affect you unless you're trying to do something
-tricky with subclassing.
-
-Interaction with model validation
----------------------------------
-
-As part of its validation process, ``ModelForm`` will call the ``clean()``
-method of each field on your model that has a corresponding field on your form.
-If you have excluded any model fields, validation will not be run on those
-fields. See the :doc:`form validation </ref/forms/validation>` documentation
-for more on how field cleaning and validation work. Also, your model's
-``clean()`` method will be called before any uniqueness checks are made. See
-:ref:`Validating objects <validating-objects>` for more information on the
-model's ``clean()`` hook.
-
-.. _model-formsets:
-
-Model formsets
-==============
-
-Like :doc:`regular formsets </topics/forms/formsets>`, Django provides a couple
-of enhanced formset classes that make it easy to work with Django models. Let's
-reuse the ``Author`` model from above::
-
- >>> from django.forms.models import modelformset_factory
- >>> AuthorFormSet = modelformset_factory(Author)
-
-This will create a formset that is capable of working with the data associated
-with the ``Author`` model. It works just like a regular formset::
-
- >>> formset = AuthorFormSet()
- >>> print formset
- <input type="hidden" name="form-TOTAL_FORMS" value="1" id="id_form-TOTAL_FORMS" /><input type="hidden" name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS" /><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS" />
- <tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></td></tr>
- <tr><th><label for="id_form-0-title">Title:</label></th><td><select name="form-0-title" id="id_form-0-title">
- <option value="" selected="selected">---------</option>
- <option value="MR">Mr.</option>
- <option value="MRS">Mrs.</option>
- <option value="MS">Ms.</option>
- </select></td></tr>
- <tr><th><label for="id_form-0-birth_date">Birth date:</label></th><td><input type="text" name="form-0-birth_date" id="id_form-0-birth_date" /><input type="hidden" name="form-0-id" id="id_form-0-id" /></td></tr>
-
-.. note::
- ``modelformset_factory`` uses ``formset_factory`` to generate formsets.
- This means that a model formset is just an extension of a basic formset
- that knows how to interact with a particular model.
-
-Changing the queryset
----------------------
-
-By default, when you create a formset from a model, the formset will use a
-queryset that includes all objects in the model (e.g.,
-``Author.objects.all()``). You can override this behavior by using the
-``queryset`` argument::
-
- >>> formset = AuthorFormSet(queryset=Author.objects.filter(name__startswith='O'))
-
-Alternatively, you can create a subclass that sets ``self.queryset`` in
-``__init__``::
-
- from django.forms.models import BaseModelFormSet
-
- class BaseAuthorFormSet(BaseModelFormSet):
- def __init__(self, *args, **kwargs):
- super(BaseAuthorFormSet, self).__init__(*args, **kwargs)
- self.queryset = Author.objects.filter(name__startswith='O')
-
-Then, pass your ``BaseAuthorFormSet`` class to the factory function::
-
- >>> AuthorFormSet = modelformset_factory(Author, formset=BaseAuthorFormSet)
-
-If you want to return a formset that doesn't include *any* pre-existing
-instances of the model, you can specify an empty QuerySet::
-
- >>> AuthorFormSet(queryset=Author.objects.none())
-
-
-Controlling which fields are used with ``fields`` and ``exclude``
------------------------------------------------------------------
-
-By default, a model formset uses all fields in the model that are not marked
-with ``editable=False``. However, this can be overridden at the formset level::
-
- >>> AuthorFormSet = modelformset_factory(Author, fields=('name', 'title'))
-
-Using ``fields`` restricts the formset to use only the given fields.
-Alternatively, you can take an "opt-out" approach, specifying which fields to
-exclude::
-
- >>> AuthorFormSet = modelformset_factory(Author, exclude=('birth_date',))
-
-.. _saving-objects-in-the-formset:
-
-Saving objects in the formset
------------------------------
-
-As with a ``ModelForm``, you can save the data as a model object. This is done
-with the formset's ``save()`` method::
-
- # Create a formset instance with POST data.
- >>> formset = AuthorFormSet(request.POST)
-
- # Assuming all is valid, save the data.
- >>> instances = formset.save()
-
-The ``save()`` method returns the instances that have been saved to the
-database. If a given instance's data didn't change in the bound data, the
-instance won't be saved to the database and won't be included in the return
-value (``instances``, in the above example).
-
-Pass ``commit=False`` to return the unsaved model instances::
-
- # don't save to the database
- >>> instances = formset.save(commit=False)
- >>> for instance in instances:
- ... # do something with instance
- ... instance.save()
-
-This gives you the ability to attach data to the instances before saving them
-to the database. If your formset contains a ``ManyToManyField``, you'll also
-need to call ``formset.save_m2m()`` to ensure the many-to-many relationships
-are saved properly.
-
-.. _model-formsets-max-num:
-
-Limiting the number of editable objects
----------------------------------------
-
-.. versionchanged:: 1.2
-
-As with regular formsets, you can use the ``max_num`` and ``extra`` parameters
-to ``modelformset_factory`` to limit the number of extra forms displayed.
-
-``max_num`` does not prevent existing objects from being displayed::
-
- >>> Author.objects.order_by('name')
- [<Author: Charles Baudelaire>, <Author: Paul Verlaine>, <Author: Walt Whitman>]
-
- >>> AuthorFormSet = modelformset_factory(Author, max_num=1)
- >>> formset = AuthorFormSet(queryset=Author.objects.order_by('name'))
- >>> [x.name for x in formset.get_queryset()]
- [u'Charles Baudelaire', u'Paul Verlaine', u'Walt Whitman']
-
-If the value of ``max_num`` is greater than the number of existing related
-objects, up to ``extra`` additional blank forms will be added to the formset,
-so long as the total number of forms does not exceed ``max_num``::
-
- >>> AuthorFormSet = modelformset_factory(Author, max_num=4, extra=2)
- >>> formset = AuthorFormSet(queryset=Author.objects.order_by('name'))
- >>> for form in formset.forms:
- ... print form.as_table()
- <tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" value="Charles Baudelaire" maxlength="100" /><input type="hidden" name="form-0-id" value="1" id="id_form-0-id" /></td></tr>
- <tr><th><label for="id_form-1-name">Name:</label></th><td><input id="id_form-1-name" type="text" name="form-1-name" value="Paul Verlaine" maxlength="100" /><input type="hidden" name="form-1-id" value="3" id="id_form-1-id" /></td></tr>
- <tr><th><label for="id_form-2-name">Name:</label></th><td><input id="id_form-2-name" type="text" name="form-2-name" value="Walt Whitman" maxlength="100" /><input type="hidden" name="form-2-id" value="2" id="id_form-2-id" /></td></tr>
- <tr><th><label for="id_form-3-name">Name:</label></th><td><input id="id_form-3-name" type="text" name="form-3-name" maxlength="100" /><input type="hidden" name="form-3-id" id="id_form-3-id" /></td></tr>
-
-.. versionchanged:: 1.2
-
-A ``max_num`` value of ``None`` (the default) puts no limit on the number of
-forms displayed.
-
-Using a model formset in a view
--------------------------------
-
-Model formsets are very similar to formsets. Let's say we want to present a
-formset to edit ``Author`` model instances::
-
- def manage_authors(request):
- AuthorFormSet = modelformset_factory(Author)
- if request.method == 'POST':
- formset = AuthorFormSet(request.POST, request.FILES)
- if formset.is_valid():
- formset.save()
- # do something.
- else:
- formset = AuthorFormSet()
- return render_to_response("manage_authors.html", {
- "formset": formset,
- })
-
-As you can see, the view logic of a model formset isn't drastically different
-than that of a "normal" formset. The only difference is that we call
-``formset.save()`` to save the data into the database. (This was described
-above, in :ref:`saving-objects-in-the-formset`.)
-
-Overiding ``clean()`` on a ``model_formset``
---------------------------------------------
-
-Just like with ``ModelForms``, by default the ``clean()`` method of a
-``model_formset`` will validate that none of the items in the formset violate
-the unique constraints on your model (either ``unique``, ``unique_together`` or
-``unique_for_date|month|year``). If you want to overide the ``clean()`` method
-on a ``model_formset`` and maintain this validation, you must call the parent
-class's ``clean`` method::
-
- class MyModelFormSet(BaseModelFormSet):
- def clean(self):
- super(MyModelFormSet, self).clean()
- # example custom validation across forms in the formset:
- for form in self.forms:
- # your custom formset validation
-
-Using a custom queryset
------------------------
-
-As stated earlier, you can override the default queryset used by the model
-formset::
-
- def manage_authors(request):
- AuthorFormSet = modelformset_factory(Author)
- if request.method == "POST":
- formset = AuthorFormSet(request.POST, request.FILES,
- queryset=Author.objects.filter(name__startswith='O'))
- if formset.is_valid():
- formset.save()
- # Do something.
- else:
- formset = AuthorFormSet(queryset=Author.objects.filter(name__startswith='O'))
- return render_to_response("manage_authors.html", {
- "formset": formset,
- })
-
-Note that we pass the ``queryset`` argument in both the ``POST`` and ``GET``
-cases in this example.
-
-Using the formset in the template
----------------------------------
-
-.. highlight:: html+django
-
-There are three ways to render a formset in a Django template.
-
-First, you can let the formset do most of the work::
-
- <form method="post" action="">
- {{ formset }}
- </form>
-
-Second, you can manually render the formset, but let the form deal with
-itself::
-
- <form method="post" action="">
- {{ formset.management_form }}
- {% for form in formset.forms %}
- {{ form }}
- {% endfor %}
- </form>
-
-When you manually render the forms yourself, be sure to render the management
-form as shown above. See the :ref:`management form documentation
-<understanding-the-managementform>`.
-
-Third, you can manually render each field::
-
- <form method="post" action="">
- {{ formset.management_form }}
- {% for form in formset.forms %}
- {% for field in form %}
- {{ field.label_tag }}: {{ field }}
- {% endfor %}
- {% endfor %}
- </form>
-
-If you opt to use this third method and you don't iterate over the fields with
-a ``{% for %}`` loop, you'll need to render the primary key field. For example,
-if you were rendering the ``name`` and ``age`` fields of a model::
-
- <form method="post" action="">
- {{ formset.management_form }}
- {% for form in formset.forms %}
- {{ form.id }}
- <ul>
- <li>{{ form.name }}</li>
- <li>{{ form.age }}</li>
- </ul>
- {% endfor %}
- </form>
-
-Notice how we need to explicitly render ``{{ form.id }}``. This ensures that
-the model formset, in the ``POST`` case, will work correctly. (This example
-assumes a primary key named ``id``. If you've explicitly defined your own
-primary key that isn't called ``id``, make sure it gets rendered.)
-
-.. highlight:: python
-
-Inline formsets
-===============
-
-Inline formsets is a small abstraction layer on top of model formsets. These
-simplify the case of working with related objects via a foreign key. Suppose
-you have these two models::
-
- class Author(models.Model):
- name = models.CharField(max_length=100)
-
- class Book(models.Model):
- author = models.ForeignKey(Author)
- title = models.CharField(max_length=100)
-
-If you want to create a formset that allows you to edit books belonging to
-a particular author, you could do this::
-
- >>> from django.forms.models import inlineformset_factory
- >>> BookFormSet = inlineformset_factory(Author, Book)
- >>> author = Author.objects.get(name=u'Mike Royko')
- >>> formset = BookFormSet(instance=author)
-
-.. note::
- ``inlineformset_factory`` uses ``modelformset_factory`` and marks
- ``can_delete=True``.
-
-More than one foreign key to the same model
--------------------------------------------
-
-If your model contains more than one foreign key to the same model, you'll
-need to resolve the ambiguity manually using ``fk_name``. For example, consider
-the following model::
-
- class Friendship(models.Model):
- from_friend = models.ForeignKey(Friend)
- to_friend = models.ForeignKey(Friend)
- length_in_months = models.IntegerField()
-
-To resolve this, you can use ``fk_name`` to ``inlineformset_factory``::
-
- >>> FriendshipFormSet = inlineformset_factory(Friend, Friendship, fk_name="from_friend")
-
-Using an inline formset in a view
----------------------------------
-
-You may want to provide a view that allows a user to edit the related objects
-of a model. Here's how you can do that::
-
- def manage_books(request, author_id):
- author = Author.objects.get(pk=author_id)
- BookInlineFormSet = inlineformset_factory(Author, Book)
- if request.method == "POST":
- formset = BookInlineFormSet(request.POST, request.FILES, instance=author)
- if formset.is_valid():
- formset.save()
- # Do something.
- else:
- formset = BookInlineFormSet(instance=author)
- return render_to_response("manage_books.html", {
- "formset": formset,
- })
-
-Notice how we pass ``instance`` in both the ``POST`` and ``GET`` cases.
diff --git a/parts/django/docs/topics/generic-views.txt b/parts/django/docs/topics/generic-views.txt
deleted file mode 100644
index 41e32c8..0000000
--- a/parts/django/docs/topics/generic-views.txt
+++ /dev/null
@@ -1,501 +0,0 @@
-=============
-Generic views
-=============
-
-Writing Web applications can be monotonous, because we repeat certain patterns
-again and again. Django tries to take away some of that monotony at the model
-and template layers, but Web developers also experience this boredom at the view
-level.
-
-Django's *generic views* were developed to ease that pain. They take certain
-common idioms and patterns found in view development and abstract them so that
-you can quickly write common views of data without having to write too much
-code.
-
-We can recognize certain common tasks, like displaying a list of objects, and
-write code that displays a list of *any* object. Then the model in question can
-be passed as an extra argument to the URLconf.
-
-Django ships with generic views to do the following:
-
- * Perform common "simple" tasks: redirect to a different page and
- render a given template.
-
- * Display list and detail pages for a single object. If we were creating an
- application to manage conferences then a ``talk_list`` view and a
- ``registered_user_list`` view would be examples of list views. A single
- talk page is an example of what we call a "detail" view.
-
- * Present date-based objects in year/month/day archive pages,
- associated detail, and "latest" pages. The Django Weblog's
- (http://www.djangoproject.com/weblog/) year, month, and
- day archives are built with these, as would be a typical
- newspaper's archives.
-
- * Allow users to create, update, and delete objects -- with or
- without authorization.
-
-Taken together, these views provide easy interfaces to perform the most common
-tasks developers encounter.
-
-Using generic views
-===================
-
-All of these views are used by creating configuration dictionaries in
-your URLconf files and passing those dictionaries as the third member of the
-URLconf tuple for a given pattern.
-
-For example, here's a simple URLconf you could use to present a static "about"
-page::
-
- from django.conf.urls.defaults import *
- from django.views.generic.simple import direct_to_template
-
- urlpatterns = patterns('',
- ('^about/$', direct_to_template, {
- 'template': 'about.html'
- })
- )
-
-Though this might seem a bit "magical" at first glance -- look, a view with no
-code! --, actually the ``direct_to_template`` view simply grabs information from
-the extra-parameters dictionary and uses that information when rendering the
-view.
-
-Because this generic view -- and all the others -- is a regular view function
-like any other, we can reuse it inside our own views. As an example, let's
-extend our "about" example to map URLs of the form ``/about/<whatever>/`` to
-statically rendered ``about/<whatever>.html``. We'll do this by first modifying
-the URLconf to point to a view function:
-
-.. parsed-literal::
-
- from django.conf.urls.defaults import *
- from django.views.generic.simple import direct_to_template
- **from books.views import about_pages**
-
- urlpatterns = patterns('',
- ('^about/$', direct_to_template, {
- 'template': 'about.html'
- }),
- **('^about/(\\w+)/$', about_pages),**
- )
-
-Next, we'll write the ``about_pages`` view::
-
- from django.http import Http404
- from django.template import TemplateDoesNotExist
- from django.views.generic.simple import direct_to_template
-
- def about_pages(request, page):
- try:
- return direct_to_template(request, template="about/%s.html" % page)
- except TemplateDoesNotExist:
- raise Http404()
-
-Here we're treating ``direct_to_template`` like any other function. Since it
-returns an ``HttpResponse``, we can simply return it as-is. The only slightly
-tricky business here is dealing with missing templates. We don't want a
-nonexistent template to cause a server error, so we catch
-``TemplateDoesNotExist`` exceptions and return 404 errors instead.
-
-.. admonition:: Is there a security vulnerability here?
-
- Sharp-eyed readers may have noticed a possible security hole: we're
- constructing the template name using interpolated content from the browser
- (``template="about/%s.html" % page``). At first glance, this looks like a
- classic *directory traversal* vulnerability. But is it really?
-
- Not exactly. Yes, a maliciously crafted value of ``page`` could cause
- directory traversal, but although ``page`` *is* taken from the request URL,
- not every value will be accepted. The key is in the URLconf: we're using
- the regular expression ``\w+`` to match the ``page`` part of the URL, and
- ``\w`` only accepts letters and numbers. Thus, any malicious characters
- (dots and slashes, here) will be rejected by the URL resolver before they
- reach the view itself.
-
-Generic views of objects
-========================
-
-The ``direct_to_template`` certainly is useful, but Django's generic views
-really shine when it comes to presenting views on your database content. Because
-it's such a common task, Django comes with a handful of built-in generic views
-that make generating list and detail views of objects incredibly easy.
-
-Let's take a look at one of these generic views: the "object list" view. We'll
-be using these models::
-
- # models.py
- from django.db import models
-
- class Publisher(models.Model):
- name = models.CharField(max_length=30)
- address = models.CharField(max_length=50)
- city = models.CharField(max_length=60)
- state_province = models.CharField(max_length=30)
- country = models.CharField(max_length=50)
- website = models.URLField()
-
- def __unicode__(self):
- return self.name
-
- class Meta:
- ordering = ["-name"]
-
- class Book(models.Model):
- title = models.CharField(max_length=100)
- authors = models.ManyToManyField('Author')
- publisher = models.ForeignKey(Publisher)
- publication_date = models.DateField()
-
-To build a list page of all publishers, we'd use a URLconf along these lines::
-
- from django.conf.urls.defaults import *
- from django.views.generic import list_detail
- from books.models import Publisher
-
- publisher_info = {
- "queryset" : Publisher.objects.all(),
- }
-
- urlpatterns = patterns('',
- (r'^publishers/$', list_detail.object_list, publisher_info)
- )
-
-That's all the Python code we need to write. We still need to write a template,
-however. We could explicitly tell the ``object_list`` view which template to use
-by including a ``template_name`` key in the extra arguments dictionary, but in
-the absence of an explicit template Django will infer one from the object's
-name. In this case, the inferred template will be
-``"books/publisher_list.html"`` -- the "books" part comes from the name of the
-app that defines the model, while the "publisher" bit is just the lowercased
-version of the model's name.
-
-.. highlightlang:: html+django
-
-This template will be rendered against a context containing a variable called
-``object_list`` that contains all the publisher objects. A very simple template
-might look like the following::
-
- {% extends "base.html" %}
-
- {% block content %}
- <h2>Publishers</h2>
- <ul>
- {% for publisher in object_list %}
- <li>{{ publisher.name }}</li>
- {% endfor %}
- </ul>
- {% endblock %}
-
-That's really all there is to it. All the cool features of generic views come
-from changing the "info" dictionary passed to the generic view. The
-:doc:`generic views reference</ref/generic-views>` documents all the generic
-views and all their options in detail; the rest of this document will consider
-some of the common ways you might customize and extend generic views.
-
-Extending generic views
-=======================
-
-.. highlightlang:: python
-
-There's no question that using generic views can speed up development
-substantially. In most projects, however, there comes a moment when the
-generic views no longer suffice. Indeed, the most common question asked by new
-Django developers is how to make generic views handle a wider array of
-situations.
-
-Luckily, in nearly every one of these cases, there are ways to simply extend
-generic views to handle a larger array of use cases. These situations usually
-fall into a handful of patterns dealt with in the sections that follow.
-
-Making "friendly" template contexts
------------------------------------
-
-You might have noticed that our sample publisher list template stores all the
-books in a variable named ``object_list``. While this works just fine, it isn't
-all that "friendly" to template authors: they have to "just know" that they're
-dealing with publishers here. A better name for that variable would be
-``publisher_list``; that variable's content is pretty obvious.
-
-We can change the name of that variable easily with the ``template_object_name``
-argument:
-
-.. parsed-literal::
-
- publisher_info = {
- "queryset" : Publisher.objects.all(),
- **"template_object_name" : "publisher",**
- }
-
- urlpatterns = patterns('',
- (r'^publishers/$', list_detail.object_list, publisher_info)
- )
-
-Providing a useful ``template_object_name`` is always a good idea. Your
-coworkers who design templates will thank you.
-
-Adding extra context
---------------------
-
-Often you simply need to present some extra information beyond that provided by
-the generic view. For example, think of showing a list of all the books on each
-publisher detail page. The ``object_detail`` generic view provides the
-publisher to the context, but it seems there's no way to get additional
-information in that template.
-
-But there is: all generic views take an extra optional parameter,
-``extra_context``. This is a dictionary of extra objects that will be added to
-the template's context. So, to provide the list of all books on the detail
-detail view, we'd use an info dict like this:
-
-.. parsed-literal::
-
- from books.models import Publisher, **Book**
-
- publisher_info = {
- "queryset" : Publisher.objects.all(),
- "template_object_name" : "publisher",
- **"extra_context" : {"book_list" : Book.objects.all()}**
- }
-
-This would populate a ``{{ book_list }}`` variable in the template context.
-This pattern can be used to pass any information down into the template for the
-generic view. It's very handy.
-
-However, there's actually a subtle bug here -- can you spot it?
-
-The problem has to do with when the queries in ``extra_context`` are evaluated.
-Because this example puts ``Book.objects.all()`` in the URLconf, it will
-be evaluated only once (when the URLconf is first loaded). Once you add or
-remove books, you'll notice that the generic view doesn't reflect those
-changes until you reload the Web server (see :ref:`caching-and-querysets`
-for more information about when QuerySets are cached and evaluated).
-
-.. note::
-
- This problem doesn't apply to the ``queryset`` generic view argument. Since
- Django knows that particular QuerySet should *never* be cached, the generic
- view takes care of clearing the cache when each view is rendered.
-
-The solution is to use a callback in ``extra_context`` instead of a value. Any
-callable (i.e., a function) that's passed to ``extra_context`` will be evaluated
-when the view is rendered (instead of only once). You could do this with an
-explicitly defined function:
-
-.. parsed-literal::
-
- def get_books():
- return Book.objects.all()
-
- publisher_info = {
- "queryset" : Publisher.objects.all(),
- "template_object_name" : "publisher",
- "extra_context" : **{"book_list" : get_books}**
- }
-
-or you could use a less obvious but shorter version that relies on the fact that
-``Book.objects.all`` is itself a callable:
-
-.. parsed-literal::
-
- publisher_info = {
- "queryset" : Publisher.objects.all(),
- "template_object_name" : "publisher",
- "extra_context" : **{"book_list" : Book.objects.all}**
- }
-
-Notice the lack of parentheses after ``Book.objects.all``; this references
-the function without actually calling it (which the generic view will do later).
-
-Viewing subsets of objects
---------------------------
-
-Now let's take a closer look at this ``queryset`` key we've been using all
-along. Most generic views take one of these ``queryset`` arguments -- it's how
-the view knows which set of objects to display (see :doc:`/topics/db/queries` for
-more information about ``QuerySet`` objects, and see the
-:doc:`generic views reference</ref/generic-views>` for the complete details).
-
-To pick a simple example, we might want to order a list of books by
-publication date, with the most recent first:
-
-.. parsed-literal::
-
- book_info = {
- "queryset" : Book.objects.all().order_by("-publication_date"),
- }
-
- urlpatterns = patterns('',
- (r'^publishers/$', list_detail.object_list, publisher_info),
- **(r'^books/$', list_detail.object_list, book_info),**
- )
-
-
-That's a pretty simple example, but it illustrates the idea nicely. Of course,
-you'll usually want to do more than just reorder objects. If you want to
-present a list of books by a particular publisher, you can use the same
-technique:
-
-.. parsed-literal::
-
- **acme_books = {**
- **"queryset": Book.objects.filter(publisher__name="Acme Publishing"),**
- **"template_name" : "books/acme_list.html"**
- **}**
-
- urlpatterns = patterns('',
- (r'^publishers/$', list_detail.object_list, publisher_info),
- **(r'^books/acme/$', list_detail.object_list, acme_books),**
- )
-
-Notice that along with a filtered ``queryset``, we're also using a custom
-template name. If we didn't, the generic view would use the same template as the
-"vanilla" object list, which might not be what we want.
-
-Also notice that this isn't a very elegant way of doing publisher-specific
-books. If we want to add another publisher page, we'd need another handful of
-lines in the URLconf, and more than a few publishers would get unreasonable.
-We'll deal with this problem in the next section.
-
-.. note::
-
- If you get a 404 when requesting ``/books/acme/``, check to ensure you
- actually have a Publisher with the name 'ACME Publishing'. Generic
- views have an ``allow_empty`` parameter for this case. See the
- :doc:`generic views reference</ref/generic-views>` for more details.
-
-Complex filtering with wrapper functions
-----------------------------------------
-
-Another common need is to filter down the objects given in a list page by some
-key in the URL. Earlier we hard-coded the publisher's name in the URLconf, but
-what if we wanted to write a view that displayed all the books by some arbitrary
-publisher? We can "wrap" the ``object_list`` generic view to avoid writing a lot
-of code by hand. As usual, we'll start by writing a URLconf:
-
-.. parsed-literal::
-
- from books.views import books_by_publisher
-
- urlpatterns = patterns('',
- (r'^publishers/$', list_detail.object_list, publisher_info),
- **(r'^books/(\\w+)/$', books_by_publisher),**
- )
-
-Next, we'll write the ``books_by_publisher`` view itself::
-
- from django.http import Http404
- from django.views.generic import list_detail
- from books.models import Book, Publisher
-
- def books_by_publisher(request, name):
-
- # Look up the publisher (and raise a 404 if it can't be found).
- try:
- publisher = Publisher.objects.get(name__iexact=name)
- except Publisher.DoesNotExist:
- raise Http404
-
- # Use the object_list view for the heavy lifting.
- return list_detail.object_list(
- request,
- queryset = Book.objects.filter(publisher=publisher),
- template_name = "books/books_by_publisher.html",
- template_object_name = "books",
- extra_context = {"publisher" : publisher}
- )
-
-This works because there's really nothing special about generic views -- they're
-just Python functions. Like any view function, generic views expect a certain
-set of arguments and return ``HttpResponse`` objects. Thus, it's incredibly easy
-to wrap a small function around a generic view that does additional work before
-(or after; see the next section) handing things off to the generic view.
-
-.. note::
-
- Notice that in the preceding example we passed the current publisher being
- displayed in the ``extra_context``. This is usually a good idea in wrappers
- of this nature; it lets the template know which "parent" object is currently
- being browsed.
-
-Performing extra work
----------------------
-
-The last common pattern we'll look at involves doing some extra work before
-or after calling the generic view.
-
-Imagine we had a ``last_accessed`` field on our ``Author`` object that we were
-using to keep track of the last time anybody looked at that author::
-
- # models.py
-
- class Author(models.Model):
- salutation = models.CharField(max_length=10)
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=40)
- email = models.EmailField()
- headshot = models.ImageField(upload_to='/tmp')
- last_accessed = models.DateTimeField()
-
-The generic ``object_detail`` view, of course, wouldn't know anything about this
-field, but once again we could easily write a custom view to keep that field
-updated.
-
-First, we'd need to add an author detail bit in the URLconf to point to a
-custom view:
-
-.. parsed-literal::
-
- from books.views import author_detail
-
- urlpatterns = patterns('',
- #...
- **(r'^authors/(?P<author_id>\\d+)/$', author_detail),**
- )
-
-Then we'd write our wrapper function::
-
- import datetime
- from books.models import Author
- from django.views.generic import list_detail
- from django.shortcuts import get_object_or_404
-
- def author_detail(request, author_id):
- # Look up the Author (and raise a 404 if she's not found)
- author = get_object_or_404(Author, pk=author_id)
-
- # Record the last accessed date
- author.last_accessed = datetime.datetime.now()
- author.save()
-
- # Show the detail page
- return list_detail.object_detail(
- request,
- queryset = Author.objects.all(),
- object_id = author_id,
- )
-
-.. note::
-
- This code won't actually work unless you create a
- ``books/author_detail.html`` template.
-
-We can use a similar idiom to alter the response returned by the generic view.
-If we wanted to provide a downloadable plain-text version of the list of
-authors, we could use a view like this::
-
- def author_list_plaintext(request):
- response = list_detail.object_list(
- request,
- queryset = Author.objects.all(),
- mimetype = "text/plain",
- template_name = "books/author_list.txt"
- )
- response["Content-Disposition"] = "attachment; filename=authors.txt"
- return response
-
-This works because the generic views return simple ``HttpResponse`` objects
-that can be treated like dictionaries to set HTTP headers. This
-``Content-Disposition`` business, by the way, instructs the browser to
-download and save the page instead of displaying it in the browser.
diff --git a/parts/django/docs/topics/http/_images/middleware.png b/parts/django/docs/topics/http/_images/middleware.png
deleted file mode 100644
index 505c70a..0000000
--- a/parts/django/docs/topics/http/_images/middleware.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/docs/topics/http/file-uploads.txt b/parts/django/docs/topics/http/file-uploads.txt
deleted file mode 100644
index a06a1ca..0000000
--- a/parts/django/docs/topics/http/file-uploads.txt
+++ /dev/null
@@ -1,394 +0,0 @@
-============
-File Uploads
-============
-
-.. currentmodule:: django.core.files
-
-.. versionadded:: 1.0
-
-When Django handles a file upload, the file data ends up placed in
-:attr:`request.FILES <django.http.HttpRequest.FILES>` (for more on the
-``request`` object see the documentation for :doc:`request and response objects
-</ref/request-response>`). This document explains how files are stored on disk
-and in memory, and how to customize the default behavior.
-
-Basic file uploads
-==================
-
-Consider a simple form containing a :class:`~django.forms.FileField`::
-
- from django import forms
-
- class UploadFileForm(forms.Form):
- title = forms.CharField(max_length=50)
- file = forms.FileField()
-
-A view handling this form will receive the file data in
-:attr:`request.FILES <django.http.HttpRequest.FILES>`, which is a dictionary
-containing a key for each :class:`~django.forms.FileField` (or
-:class:`~django.forms.ImageField`, or other :class:`~django.forms.FileField`
-subclass) in the form. So the data from the above form would
-be accessible as ``request.FILES['file']``.
-
-Note that :attr:`request.FILES <django.http.HttpRequest.FILES>` will only
-contain data if the request method was ``POST`` and the ``<form>`` that posted
-the request has the attribute ``enctype="multipart/form-data"``. Otherwise,
-``request.FILES`` will be empty.
-
-Most of the time, you'll simply pass the file data from ``request`` into the
-form as described in :ref:`binding-uploaded-files`. This would look
-something like::
-
- from django.http import HttpResponseRedirect
- from django.shortcuts import render_to_response
-
- # Imaginary function to handle an uploaded file.
- from somewhere import handle_uploaded_file
-
- def upload_file(request):
- if request.method == 'POST':
- form = UploadFileForm(request.POST, request.FILES)
- if form.is_valid():
- handle_uploaded_file(request.FILES['file'])
- return HttpResponseRedirect('/success/url/')
- else:
- form = UploadFileForm()
- return render_to_response('upload.html', {'form': form})
-
-Notice that we have to pass :attr:`request.FILES <django.http.HttpRequest.FILES>`
-into the form's constructor; this is how file data gets bound into a form.
-
-Handling uploaded files
------------------------
-
-The final piece of the puzzle is handling the actual file data from
-:attr:`request.FILES <django.http.HttpRequest.FILES>`. Each entry in this
-dictionary is an ``UploadedFile`` object -- a simple wrapper around an uploaded
-file. You'll usually use one of these methods to access the uploaded content:
-
- ``UploadedFile.read()``
- Read the entire uploaded data from the file. Be careful with this
- method: if the uploaded file is huge it can overwhelm your system if you
- try to read it into memory. You'll probably want to use ``chunks()``
- instead; see below.
-
- ``UploadedFile.multiple_chunks()``
- Returns ``True`` if the uploaded file is big enough to require
- reading in multiple chunks. By default this will be any file
- larger than 2.5 megabytes, but that's configurable; see below.
-
- ``UploadedFile.chunks()``
- A generator returning chunks of the file. If ``multiple_chunks()`` is
- ``True``, you should use this method in a loop instead of ``read()``.
-
- In practice, it's often easiest simply to use ``chunks()`` all the time;
- see the example below.
-
- ``UploadedFile.name``
- The name of the uploaded file (e.g. ``my_file.txt``).
-
- ``UploadedFile.size``
- The size, in bytes, of the uploaded file.
-
-There are a few other methods and attributes available on ``UploadedFile``
-objects; see `UploadedFile objects`_ for a complete reference.
-
-Putting it all together, here's a common way you might handle an uploaded file::
-
- def handle_uploaded_file(f):
- destination = open('some/file/name.txt', 'wb+')
- for chunk in f.chunks():
- destination.write(chunk)
- destination.close()
-
-Looping over ``UploadedFile.chunks()`` instead of using ``read()`` ensures that
-large files don't overwhelm your system's memory.
-
-Where uploaded data is stored
------------------------------
-
-Before you save uploaded files, the data needs to be stored somewhere.
-
-By default, if an uploaded file is smaller than 2.5 megabytes, Django will hold
-the entire contents of the upload in memory. This means that saving the file
-involves only a read from memory and a write to disk and thus is very fast.
-
-However, if an uploaded file is too large, Django will write the uploaded file
-to a temporary file stored in your system's temporary directory. On a Unix-like
-platform this means you can expect Django to generate a file called something
-like ``/tmp/tmpzfp6I6.upload``. If an upload is large enough, you can watch this
-file grow in size as Django streams the data onto disk.
-
-These specifics -- 2.5 megabytes; ``/tmp``; etc. -- are simply "reasonable
-defaults". Read on for details on how you can customize or completely replace
-upload behavior.
-
-Changing upload handler behavior
---------------------------------
-
-Three settings control Django's file upload behavior:
-
- :setting:`FILE_UPLOAD_MAX_MEMORY_SIZE`
- The maximum size, in bytes, for files that will be uploaded into memory.
- Files larger than :setting:`FILE_UPLOAD_MAX_MEMORY_SIZE` will be
- streamed to disk.
-
- Defaults to 2.5 megabytes.
-
- :setting:`FILE_UPLOAD_TEMP_DIR`
- The directory where uploaded files larger than
- :setting:`FILE_UPLOAD_MAX_MEMORY_SIZE` will be stored.
-
- Defaults to your system's standard temporary directory (i.e. ``/tmp`` on
- most Unix-like systems).
-
- :setting:`FILE_UPLOAD_PERMISSIONS`
- The numeric mode (i.e. ``0644``) to set newly uploaded files to. For
- more information about what these modes mean, see the `documentation for
- os.chmod`_
-
- If this isn't given or is ``None``, you'll get operating-system
- dependent behavior. On most platforms, temporary files will have a mode
- of ``0600``, and files saved from memory will be saved using the
- system's standard umask.
-
- .. warning::
-
- If you're not familiar with file modes, please note that the leading
- ``0`` is very important: it indicates an octal number, which is the
- way that modes must be specified. If you try to use ``644``, you'll
- get totally incorrect behavior.
-
- **Always prefix the mode with a 0.**
-
- :setting:`FILE_UPLOAD_HANDLERS`
- The actual handlers for uploaded files. Changing this setting allows
- complete customization -- even replacement -- of Django's upload
- process. See `upload handlers`_, below, for details.
-
- Defaults to::
-
- ("django.core.files.uploadhandler.MemoryFileUploadHandler",
- "django.core.files.uploadhandler.TemporaryFileUploadHandler",)
-
- Which means "try to upload to memory first, then fall back to temporary
- files."
-
-.. _documentation for os.chmod: http://docs.python.org/library/os.html#os.chmod
-
-``UploadedFile`` objects
-========================
-
-.. class:: UploadedFile
-
-In addition to those inherited from :class:`File`, all ``UploadedFile`` objects
-define the following methods/attributes:
-
- ``UploadedFile.content_type``
- The content-type header uploaded with the file (e.g. ``text/plain`` or
- ``application/pdf``). Like any data supplied by the user, you shouldn't
- trust that the uploaded file is actually this type. You'll still need to
- validate that the file contains the content that the content-type header
- claims -- "trust but verify."
-
- ``UploadedFile.charset``
- For ``text/*`` content-types, the character set (i.e. ``utf8``) supplied
- by the browser. Again, "trust but verify" is the best policy here.
-
- ``UploadedFile.temporary_file_path()``
- Only files uploaded onto disk will have this method; it returns the full
- path to the temporary uploaded file.
-
-.. note::
-
- Like regular Python files, you can read the file line-by-line simply by
- iterating over the uploaded file:
-
- .. code-block:: python
-
- for line in uploadedfile:
- do_something_with(line)
-
- However, *unlike* standard Python files, :class:`UploadedFile` only
- understands ``\n`` (also known as "Unix-style") line endings. If you know
- that you need to handle uploaded files with different line endings, you'll
- need to do so in your view.
-
-Upload Handlers
-===============
-
-When a user uploads a file, Django passes off the file data to an *upload
-handler* -- a small class that handles file data as it gets uploaded. Upload
-handlers are initially defined in the ``FILE_UPLOAD_HANDLERS`` setting, which
-defaults to::
-
- ("django.core.files.uploadhandler.MemoryFileUploadHandler",
- "django.core.files.uploadhandler.TemporaryFileUploadHandler",)
-
-Together the ``MemoryFileUploadHandler`` and ``TemporaryFileUploadHandler``
-provide Django's default file upload behavior of reading small files into memory
-and large ones onto disk.
-
-You can write custom handlers that customize how Django handles files. You
-could, for example, use custom handlers to enforce user-level quotas, compress
-data on the fly, render progress bars, and even send data to another storage
-location directly without storing it locally.
-
-Modifying upload handlers on the fly
-------------------------------------
-
-Sometimes particular views require different upload behavior. In these cases,
-you can override upload handlers on a per-request basis by modifying
-``request.upload_handlers``. By default, this list will contain the upload
-handlers given by ``FILE_UPLOAD_HANDLERS``, but you can modify the list as you
-would any other list.
-
-For instance, suppose you've written a ``ProgressBarUploadHandler`` that
-provides feedback on upload progress to some sort of AJAX widget. You'd add this
-handler to your upload handlers like this::
-
- request.upload_handlers.insert(0, ProgressBarUploadHandler())
-
-You'd probably want to use ``list.insert()`` in this case (instead of
-``append()``) because a progress bar handler would need to run *before* any
-other handlers. Remember, the upload handlers are processed in order.
-
-If you want to replace the upload handlers completely, you can just assign a new
-list::
-
- request.upload_handlers = [ProgressBarUploadHandler()]
-
-.. note::
-
- You can only modify upload handlers *before* accessing
- ``request.POST`` or ``request.FILES`` -- it doesn't make sense to
- change upload handlers after upload handling has already
- started. If you try to modify ``request.upload_handlers`` after
- reading from ``request.POST`` or ``request.FILES`` Django will
- throw an error.
-
- Thus, you should always modify uploading handlers as early in your view as
- possible.
-
- Also, ``request.POST`` is accessed by
- :class:`~django.middleware.csrf.CsrfViewMiddleware` which is enabled by
- default. This means you will probably need to use
- :func:`~django.views.decorators.csrf.csrf_exempt` on your view to allow you
- to change the upload handlers. Assuming you do need CSRF protection, you
- will then need to use :func:`~django.views.decorators.csrf.csrf_protect` on
- the function that actually processes the request. Note that this means that
- the handlers may start receiving the file upload before the CSRF checks have
- been done. Example code:
-
- .. code-block:: python
-
- from django.views.decorators.csrf import csrf_exempt, csrf_protect
-
- @csrf_exempt
- def upload_file_view(request):
- request.upload_handlers.insert(0, ProgressBarUploadHandler())
- return _upload_file_view(request)
-
- @csrf_protect
- def _upload_file_view(request):
- ... # Process request
-
-
-Writing custom upload handlers
-------------------------------
-
-All file upload handlers should be subclasses of
-``django.core.files.uploadhandler.FileUploadHandler``. You can define upload
-handlers wherever you wish.
-
-Required methods
-~~~~~~~~~~~~~~~~
-
-Custom file upload handlers **must** define the following methods:
-
- ``FileUploadHandler.receive_data_chunk(self, raw_data, start)``
- Receives a "chunk" of data from the file upload.
-
- ``raw_data`` is a byte string containing the uploaded data.
-
- ``start`` is the position in the file where this ``raw_data`` chunk
- begins.
-
- The data you return will get fed into the subsequent upload handlers'
- ``receive_data_chunk`` methods. In this way, one handler can be a
- "filter" for other handlers.
-
- Return ``None`` from ``receive_data_chunk`` to sort-circuit remaining
- upload handlers from getting this chunk.. This is useful if you're
- storing the uploaded data yourself and don't want future handlers to
- store a copy of the data.
-
- If you raise a ``StopUpload`` or a ``SkipFile`` exception, the upload
- will abort or the file will be completely skipped.
-
- ``FileUploadHandler.file_complete(self, file_size)``
- Called when a file has finished uploading.
-
- The handler should return an ``UploadedFile`` object that will be stored
- in ``request.FILES``. Handlers may also return ``None`` to indicate that
- the ``UploadedFile`` object should come from subsequent upload handlers.
-
-Optional methods
-~~~~~~~~~~~~~~~~
-
-Custom upload handlers may also define any of the following optional methods or
-attributes:
-
- ``FileUploadHandler.chunk_size``
- Size, in bytes, of the "chunks" Django should store into memory and feed
- into the handler. That is, this attribute controls the size of chunks
- fed into ``FileUploadHandler.receive_data_chunk``.
-
- For maximum performance the chunk sizes should be divisible by ``4`` and
- should not exceed 2 GB (2\ :sup:`31` bytes) in size. When there are
- multiple chunk sizes provided by multiple handlers, Django will use the
- smallest chunk size defined by any handler.
-
- The default is 64*2\ :sup:`10` bytes, or 64 KB.
-
- ``FileUploadHandler.new_file(self, field_name, file_name, content_type, content_length, charset)``
- Callback signaling that a new file upload is starting. This is called
- before any data has been fed to any upload handlers.
-
- ``field_name`` is a string name of the file ``<input>`` field.
-
- ``file_name`` is the unicode filename that was provided by the browser.
-
- ``content_type`` is the MIME type provided by the browser -- E.g.
- ``'image/jpeg'``.
-
- ``content_length`` is the length of the image given by the browser.
- Sometimes this won't be provided and will be ``None``.
-
- ``charset`` is the character set (i.e. ``utf8``) given by the browser.
- Like ``content_length``, this sometimes won't be provided.
-
- This method may raise a ``StopFutureHandlers`` exception to prevent
- future handlers from handling this file.
-
- ``FileUploadHandler.upload_complete(self)``
- Callback signaling that the entire upload (all files) has completed.
-
- ``FileUploadHandler.handle_raw_input(self, input_data, META, content_length, boundary, encoding)``
- Allows the handler to completely override the parsing of the raw
- HTTP input.
-
- ``input_data`` is a file-like object that supports ``read()``-ing.
-
- ``META`` is the same object as ``request.META``.
-
- ``content_length`` is the length of the data in ``input_data``. Don't
- read more than ``content_length`` bytes from ``input_data``.
-
- ``boundary`` is the MIME boundary for this request.
-
- ``encoding`` is the encoding of the request.
-
- Return ``None`` if you want upload handling to continue, or a tuple of
- ``(POST, FILES)`` if you want to return the new data structures suitable
- for the request directly.
diff --git a/parts/django/docs/topics/http/generic-views.txt b/parts/django/docs/topics/http/generic-views.txt
deleted file mode 100644
index 15f895e..0000000
--- a/parts/django/docs/topics/http/generic-views.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-=============
-Generic views
-=============
-
-See :doc:`/ref/generic-views`.
diff --git a/parts/django/docs/topics/http/index.txt b/parts/django/docs/topics/http/index.txt
deleted file mode 100644
index 5ef776d..0000000
--- a/parts/django/docs/topics/http/index.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Handling HTTP requests
-======================
-
-Information on handling HTTP requests in Django:
-
-.. toctree::
- :maxdepth: 1
-
- urls
- views
- file-uploads
- shortcuts
- generic-views
- middleware
- sessions
diff --git a/parts/django/docs/topics/http/middleware.txt b/parts/django/docs/topics/http/middleware.txt
deleted file mode 100644
index d376c6b..0000000
--- a/parts/django/docs/topics/http/middleware.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-==========
-Middleware
-==========
-
-Middleware is a framework of hooks into Django's request/response processing.
-It's a light, low-level "plugin" system for globally altering Django's input
-and/or output.
-
-Each middleware component is responsible for doing some specific function. For
-example, Django includes a middleware component, ``XViewMiddleware``, that adds
-an ``"X-View"`` HTTP header to every response to a ``HEAD`` request.
-
-This document explains how middleware works, how you activate middleware, and
-how to write your own middleware. Django ships with some built-in middleware
-you can use right out of the box; they're documented in the :doc:`built-in
-middleware reference </ref/middleware>`.
-
-Activating middleware
-=====================
-
-To activate a middleware component, add it to the :setting:`MIDDLEWARE_CLASSES`
-list in your Django settings. In :setting:`MIDDLEWARE_CLASSES`, each middleware
-component is represented by a string: the full Python path to the middleware's
-class name. For example, here's the default :setting:`MIDDLEWARE_CLASSES`
-created by :djadmin:`django-admin.py startproject <startproject>`::
-
- MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- )
-
-During the request phases (:meth:`process_request` and :meth:`process_view`
-middleware), Django applies middleware in the order it's defined in
-:setting:`MIDDLEWARE_CLASSES`, top-down. During the response phases
-(:meth:`process_response` and :meth:`process_exception` middleware), the
-classes are applied in reverse order, from the bottom up. You can think of it
-like an onion: each middleware class is a "layer" that wraps the view:
-
-.. image:: _images/middleware.png
- :width: 502
- :height: 417
- :alt: Middleware application order.
-
-A Django installation doesn't require any middleware -- e.g.,
-:setting:`MIDDLEWARE_CLASSES` can be empty, if you'd like -- but it's strongly
-suggested that you at least use
-:class:`~django.middleware.common.CommonMiddleware`.
-
-Writing your own middleware
-===========================
-
-Writing your own middleware is easy. Each middleware component is a single
-Python class that defines one or more of the following methods:
-
-.. _request-middleware:
-
-``process_request``
--------------------
-
-.. method:: process_request(self, request)
-
-``request`` is an :class:`~django.http.HttpRequest` object. This method is
-called on each request, before Django decides which view to execute.
-
-``process_request()`` should return either ``None`` or an
-:class:`~django.http.HttpResponse` object. If it returns ``None``, Django will
-continue processing this request, executing any other middleware and, then, the
-appropriate view. If it returns an :class:`~django.http.HttpResponse` object,
-Django won't bother calling ANY other request, view or exception middleware, or
-the appropriate view; it'll return that :class:`~django.http.HttpResponse`.
-Response middleware is always called on every response.
-
-.. _view-middleware:
-
-``process_view``
-----------------
-
-.. method:: process_view(self, request, view_func, view_args, view_kwargs)
-
-``request`` is an :class:`~django.http.HttpRequest` object. ``view_func`` is
-the Python function that Django is about to use. (It's the actual function
-object, not the name of the function as a string.) ``view_args`` is a list of
-positional arguments that will be passed to the view, and ``view_kwargs`` is a
-dictionary of keyword arguments that will be passed to the view. Neither
-``view_args`` nor ``view_kwargs`` include the first view argument
-(``request``).
-
-``process_view()`` is called just before Django calls the view. It should
-return either ``None`` or an :class:`~django.http.HttpResponse` object. If it
-returns ``None``, Django will continue processing this request, executing any
-other ``process_view()`` middleware and, then, the appropriate view. If it
-returns an :class:`~django.http.HttpResponse` object, Django won't bother
-calling ANY other request, view or exception middleware, or the appropriate
-view; it'll return that :class:`~django.http.HttpResponse`. Response
-middleware is always called on every response.
-
-.. _response-middleware:
-
-``process_response``
---------------------
-
-.. method:: process_response(self, request, response)
-
-``request`` is an :class:`~django.http.HttpRequest` object. ``response`` is the
-:class:`~django.http.HttpResponse` object returned by a Django view.
-
-``process_response()`` must return an :class:`~django.http.HttpResponse`
-object. It could alter the given ``response``, or it could create and return a
-brand-new :class:`~django.http.HttpResponse`.
-
-Unlike the ``process_request()`` and ``process_view()`` methods, the
-``process_response()`` method is always called, even if the ``process_request()``
-and ``process_view()`` methods of the same middleware class were skipped because
-an earlier middleware method returned an :class:`~django.http.HttpResponse`
-(this means that your ``process_response()`` method cannot rely on setup done in
-``process_request()``, for example). In addition, during the response phase the
-classes are applied in reverse order, from the bottom up. This means classes
-defined at the end of :setting:`MIDDLEWARE_CLASSES` will be run first.
-
-.. _exception-middleware:
-
-``process_exception``
----------------------
-
-.. method:: process_exception(self, request, exception)
-
-``request`` is an :class:`~django.http.HttpRequest` object. ``exception`` is an
-``Exception`` object raised by the view function.
-
-Django calls ``process_exception()`` when a view raises an exception.
-``process_exception()`` should return either ``None`` or an
-:class:`~django.http.HttpResponse` object. If it returns an
-:class:`~django.http.HttpResponse` object, the response will be returned to
-the browser. Otherwise, default exception handling kicks in.
-
-Again, middleware are run in reverse order during the response phase, which
-includes ``process_exception``. If an exception middleware return a response,
-the middleware classes above that middleware will not be called at all.
-
-``__init__``
-------------
-
-Most middleware classes won't need an initializer since middleware classes are
-essentially placeholders for the ``process_*`` methods. If you do need some
-global state you may use ``__init__`` to set up. However, keep in mind a couple
-of caveats:
-
- * Django initializes your middleware without any arguments, so you can't
- define ``__init__`` as requiring any arguments.
-
- * Unlike the ``process_*`` methods which get called once per request,
- ``__init__`` gets called only *once*, when the Web server starts up.
-
-Marking middleware as unused
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It's sometimes useful to determine at run-time whether a piece of middleware
-should be used. In these cases, your middleware's ``__init__`` method may raise
-``django.core.exceptions.MiddlewareNotUsed``. Django will then remove that
-piece of middleware from the middleware process.
-
-Guidelines
-----------
-
- * Middleware classes don't have to subclass anything.
-
- * The middleware class can live anywhere on your Python path. All Django
- cares about is that the :setting:`MIDDLEWARE_CLASSES` setting includes
- the path to it.
-
- * Feel free to look at :doc:`Django's available middleware
- </ref/middleware>` for examples.
-
- * If you write a middleware component that you think would be useful to
- other people, contribute to the community! :doc:`Let us know
- </internals/contributing>`, and we'll consider adding it to Django.
diff --git a/parts/django/docs/topics/http/sessions.txt b/parts/django/docs/topics/http/sessions.txt
deleted file mode 100644
index 8a0f0d4..0000000
--- a/parts/django/docs/topics/http/sessions.txt
+++ /dev/null
@@ -1,529 +0,0 @@
-===================
-How to use sessions
-===================
-
-.. module:: django.contrib.sessions
- :synopsis: Provides session management for Django projects.
-
-Django provides full support for anonymous sessions. The session framework lets
-you store and retrieve arbitrary data on a per-site-visitor basis. It stores
-data on the server side and abstracts the sending and receiving of cookies.
-Cookies contain a session ID -- not the data itself.
-
-Enabling sessions
-=================
-
-Sessions are implemented via a piece of :doc:`middleware </ref/middleware>`.
-
-To enable session functionality, do the following:
-
- * Edit the ``MIDDLEWARE_CLASSES`` setting and make sure
- ``MIDDLEWARE_CLASSES`` contains ``'django.contrib.sessions.middleware.SessionMiddleware'``.
- The default ``settings.py`` created by ``django-admin.py startproject`` has
- ``SessionMiddleware`` activated.
-
-If you don't want to use sessions, you might as well remove the
-``SessionMiddleware`` line from ``MIDDLEWARE_CLASSES`` and ``'django.contrib.sessions'``
-from your ``INSTALLED_APPS``. It'll save you a small bit of overhead.
-
-Configuring the session engine
-==============================
-
-.. versionadded:: 1.0
-
-By default, Django stores sessions in your database (using the model
-``django.contrib.sessions.models.Session``). Though this is convenient, in
-some setups it's faster to store session data elsewhere, so Django can be
-configured to store session data on your filesystem or in your cache.
-
-Using database-backed sessions
-------------------------------
-
-If you want to use a database-backed session, you need to add
-``'django.contrib.sessions'`` to your ``INSTALLED_APPS`` setting.
-
-Once you have configured your installation, run ``manage.py syncdb``
-to install the single database table that stores session data.
-
-Using cached sessions
----------------------
-
-For better performance, you may want to use a cache-based session backend.
-
-.. versionchanged:: 1.1
- Django 1.0 did not include the ``cached_db`` session backend.
-
-To store session data using Django's cache system, you'll first need to make
-sure you've configured your cache; see the :doc:`cache documentation
-</topics/cache>` for details.
-
-.. warning::
-
- You should only use cache-based sessions if you're using the Memcached
- cache backend. The local-memory cache backend doesn't retain data long
- enough to be a good choice, and it'll be faster to use file or database
- sessions directly instead of sending everything through the file or
- database cache backends.
-
-Once your cache is configured, you've got two choices for how to store data in
-the cache:
-
- * Set :setting:`SESSION_ENGINE` to
- ``"django.contrib.sessions.backends.cache"`` for a simple caching session
- store. Session data will be stored directly your cache. However, session
- data may not be persistent: cached data can be evicted if the cache fills
- up or if the cache server is restarted.
-
- * For persistent, cached data, set :setting:`SESSION_ENGINE` to
- ``"django.contrib.sessions.backends.cached_db"``. This uses a
- write-through cache -- every write to the cache will also be written to
- the database. Session reads only use the database if the data is not
- already in the cache.
-
-Both session stores are quite fast, but the simple cache is faster because it
-disregards persistence. In most cases, the ``cached_db`` backend will be fast
-enough, but if you need that last bit of performance, and are willing to let
-session data be expunged from time to time, the ``cache`` backend is for you.
-
-If you use the ``cached_db`` session backend, you also need to follow the
-configuration instructions for the `using database-backed sessions`_.
-
-Using file-based sessions
--------------------------
-
-To use file-based sessions, set the ``SESSION_ENGINE`` setting to
-``"django.contrib.sessions.backends.file"``.
-
-You might also want to set the ``SESSION_FILE_PATH`` setting (which defaults
-to output from ``tempfile.gettempdir()``, most likely ``/tmp``) to control
-where Django stores session files. Be sure to check that your Web server has
-permissions to read and write to this location.
-
-
-Using sessions in views
-=======================
-
-When ``SessionMiddleware`` is activated, each ``HttpRequest`` object -- the
-first argument to any Django view function -- will have a ``session``
-attribute, which is a dictionary-like object. You can read it and write to it.
-
-A session object has the following standard dictionary methods:
-
- * ``__getitem__(key)``
-
- Example: ``fav_color = request.session['fav_color']``
-
- * ``__setitem__(key, value)``
-
- Example: ``request.session['fav_color'] = 'blue'``
-
- * ``__delitem__(key)``
-
- Example: ``del request.session['fav_color']``. This raises ``KeyError``
- if the given ``key`` isn't already in the session.
-
- * ``__contains__(key)``
-
- Example: ``'fav_color' in request.session``
-
- * ``get(key, default=None)``
-
- Example: ``fav_color = request.session.get('fav_color', 'red')``
-
- * ``keys()``
-
- * ``items()``
-
- * ``setdefault()``
-
- * ``clear()``
-
-.. versionadded:: 1.0
- ``setdefault()`` and ``clear()`` are new in this version.
-
-It also has these methods:
-
- * ``flush()``
-
- .. versionadded:: 1.0
-
- Delete the current session data from the session and regenerate the
- session key value that is sent back to the user in the cookie. This is
- used if you want to ensure that the previous session data can't be
- accessed again from the user's browser (for example, the
- :func:`django.contrib.auth.logout()` function calls it).
-
- * ``set_test_cookie()``
-
- Sets a test cookie to determine whether the user's browser supports
- cookies. Due to the way cookies work, you won't be able to test this
- until the user's next page request. See `Setting test cookies`_ below for
- more information.
-
- * ``test_cookie_worked()``
-
- Returns either ``True`` or ``False``, depending on whether the user's
- browser accepted the test cookie. Due to the way cookies work, you'll
- have to call ``set_test_cookie()`` on a previous, separate page request.
- See `Setting test cookies`_ below for more information.
-
- * ``delete_test_cookie()``
-
- Deletes the test cookie. Use this to clean up after yourself.
-
- * ``set_expiry(value)``
-
- .. versionadded:: 1.0
-
- Sets the expiration time for the session. You can pass a number of
- different values:
-
- * If ``value`` is an integer, the session will expire after that
- many seconds of inactivity. For example, calling
- ``request.session.set_expiry(300)`` would make the session expire
- in 5 minutes.
-
- * If ``value`` is a ``datetime`` or ``timedelta`` object, the
- session will expire at that specific date/time.
-
- * If ``value`` is ``0``, the user's session cookie will expire
- when the user's Web browser is closed.
-
- * If ``value`` is ``None``, the session reverts to using the global
- session expiry policy.
-
- Reading a session is not considered activity for expiration
- purposes. Session expiration is computed from the last time the
- session was *modified*.
-
- * ``get_expiry_age()``
-
- .. versionadded:: 1.0
-
- Returns the number of seconds until this session expires. For sessions
- with no custom expiration (or those set to expire at browser close), this
- will equal ``settings.SESSION_COOKIE_AGE``.
-
- * ``get_expiry_date()``
-
- .. versionadded:: 1.0
-
- Returns the date this session will expire. For sessions with no custom
- expiration (or those set to expire at browser close), this will equal the
- date ``settings.SESSION_COOKIE_AGE`` seconds from now.
-
- * ``get_expire_at_browser_close()``
-
- .. versionadded:: 1.0
-
- Returns either ``True`` or ``False``, depending on whether the user's
- session cookie will expire when the user's Web browser is closed.
-
-You can edit ``request.session`` at any point in your view. You can edit it
-multiple times.
-
-Session object guidelines
--------------------------
-
- * Use normal Python strings as dictionary keys on ``request.session``. This
- is more of a convention than a hard-and-fast rule.
-
- * Session dictionary keys that begin with an underscore are reserved for
- internal use by Django.
-
- * Don't override ``request.session`` with a new object, and don't access or
- set its attributes. Use it like a Python dictionary.
-
-Examples
---------
-
-This simplistic view sets a ``has_commented`` variable to ``True`` after a user
-posts a comment. It doesn't let a user post a comment more than once::
-
- def post_comment(request, new_comment):
- if request.session.get('has_commented', False):
- return HttpResponse("You've already commented.")
- c = comments.Comment(comment=new_comment)
- c.save()
- request.session['has_commented'] = True
- return HttpResponse('Thanks for your comment!')
-
-This simplistic view logs in a "member" of the site::
-
- def login(request):
- m = Member.objects.get(username=request.POST['username'])
- if m.password == request.POST['password']:
- request.session['member_id'] = m.id
- return HttpResponse("You're logged in.")
- else:
- return HttpResponse("Your username and password didn't match.")
-
-...And this one logs a member out, according to ``login()`` above::
-
- def logout(request):
- try:
- del request.session['member_id']
- except KeyError:
- pass
- return HttpResponse("You're logged out.")
-
-The standard ``django.contrib.auth.logout()`` function actually does a bit
-more than this to prevent inadvertent data leakage. It calls
-``request.session.flush()``. We are using this example as a demonstration of
-how to work with session objects, not as a full ``logout()`` implementation.
-
-Setting test cookies
-====================
-
-As a convenience, Django provides an easy way to test whether the user's
-browser accepts cookies. Just call ``request.session.set_test_cookie()`` in a
-view, and call ``request.session.test_cookie_worked()`` in a subsequent view --
-not in the same view call.
-
-This awkward split between ``set_test_cookie()`` and ``test_cookie_worked()``
-is necessary due to the way cookies work. When you set a cookie, you can't
-actually tell whether a browser accepted it until the browser's next request.
-
-It's good practice to use ``delete_test_cookie()`` to clean up after yourself.
-Do this after you've verified that the test cookie worked.
-
-Here's a typical usage example::
-
- def login(request):
- if request.method == 'POST':
- if request.session.test_cookie_worked():
- request.session.delete_test_cookie()
- return HttpResponse("You're logged in.")
- else:
- return HttpResponse("Please enable cookies and try again.")
- request.session.set_test_cookie()
- return render_to_response('foo/login_form.html')
-
-Using sessions out of views
-===========================
-
-.. versionadded:: 1.0
-
-An API is available to manipulate session data outside of a view::
-
- >>> from django.contrib.sessions.backends.db import SessionStore
- >>> s = SessionStore(session_key='2b1189a188b44ad18c35e113ac6ceead')
- >>> s['last_login'] = datetime.datetime(2005, 8, 20, 13, 35, 10)
- >>> s['last_login']
- datetime.datetime(2005, 8, 20, 13, 35, 0)
- >>> s.save()
-
-If you're using the ``django.contrib.sessions.backends.db`` backend, each
-session is just a normal Django model. The ``Session`` model is defined in
-``django/contrib/sessions/models.py``. Because it's a normal model, you can
-access sessions using the normal Django database API::
-
- >>> from django.contrib.sessions.models import Session
- >>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead')
- >>> s.expire_date
- datetime.datetime(2005, 8, 20, 13, 35, 12)
-
-Note that you'll need to call ``get_decoded()`` to get the session dictionary.
-This is necessary because the dictionary is stored in an encoded format::
-
- >>> s.session_data
- 'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
- >>> s.get_decoded()
- {'user_id': 42}
-
-When sessions are saved
-=======================
-
-By default, Django only saves to the session database when the session has been
-modified -- that is if any of its dictionary values have been assigned or
-deleted::
-
- # Session is modified.
- request.session['foo'] = 'bar'
-
- # Session is modified.
- del request.session['foo']
-
- # Session is modified.
- request.session['foo'] = {}
-
- # Gotcha: Session is NOT modified, because this alters
- # request.session['foo'] instead of request.session.
- request.session['foo']['bar'] = 'baz'
-
-In the last case of the above example, we can tell the session object
-explicitly that it has been modified by setting the ``modified`` attribute on
-the session object::
-
- request.session.modified = True
-
-To change this default behavior, set the ``SESSION_SAVE_EVERY_REQUEST`` setting
-to ``True``. If ``SESSION_SAVE_EVERY_REQUEST`` is ``True``, Django will save
-the session to the database on every single request.
-
-Note that the session cookie is only sent when a session has been created or
-modified. If ``SESSION_SAVE_EVERY_REQUEST`` is ``True``, the session cookie
-will be sent on every request.
-
-Similarly, the ``expires`` part of a session cookie is updated each time the
-session cookie is sent.
-
-Browser-length sessions vs. persistent sessions
-===============================================
-
-You can control whether the session framework uses browser-length sessions vs.
-persistent sessions with the ``SESSION_EXPIRE_AT_BROWSER_CLOSE`` setting.
-
-By default, ``SESSION_EXPIRE_AT_BROWSER_CLOSE`` is set to ``False``, which
-means session cookies will be stored in users' browsers for as long as
-``SESSION_COOKIE_AGE``. Use this if you don't want people to have to log in
-every time they open a browser.
-
-If ``SESSION_EXPIRE_AT_BROWSER_CLOSE`` is set to ``True``, Django will use
-browser-length cookies -- cookies that expire as soon as the user closes his or
-her browser. Use this if you want people to have to log in every time they open
-a browser.
-
-.. versionadded:: 1.0
-
-This setting is a global default and can be overwritten at a per-session level
-by explicitly calling ``request.session.set_expiry()`` as described above in
-`using sessions in views`_.
-
-Clearing the session table
-==========================
-
-If you're using the database backend, note that session data can accumulate in
-the ``django_session`` database table and Django does *not* provide automatic
-purging. Therefore, it's your job to purge expired sessions on a regular basis.
-
-To understand this problem, consider what happens when a user uses a session.
-When a user logs in, Django adds a row to the ``django_session`` database
-table. Django updates this row each time the session data changes. If the user
-logs out manually, Django deletes the row. But if the user does *not* log out,
-the row never gets deleted.
-
-Django provides a sample clean-up script: ``django-admin.py cleanup``.
-That script deletes any session in the session table whose ``expire_date`` is
-in the past -- but your application may have different requirements.
-
-Settings
-========
-
-A few :doc:`Django settings </ref/settings>` give you control over session behavior:
-
-SESSION_ENGINE
---------------
-
-.. versionadded:: 1.0
-
-.. versionchanged:: 1.1
- The ``cached_db`` backend was added
-
-Default: ``django.contrib.sessions.backends.db``
-
-Controls where Django stores session data. Valid values are:
-
- * ``'django.contrib.sessions.backends.db'``
- * ``'django.contrib.sessions.backends.file'``
- * ``'django.contrib.sessions.backends.cache'``
- * ``'django.contrib.sessions.backends.cached_db'``
-
-See `configuring the session engine`_ for more details.
-
-SESSION_FILE_PATH
------------------
-
-.. versionadded:: 1.0
-
-Default: ``/tmp/``
-
-If you're using file-based session storage, this sets the directory in
-which Django will store session data.
-
-SESSION_COOKIE_AGE
-------------------
-
-Default: ``1209600`` (2 weeks, in seconds)
-
-The age of session cookies, in seconds.
-
-SESSION_COOKIE_DOMAIN
----------------------
-
-Default: ``None``
-
-The domain to use for session cookies. Set this to a string such as
-``".lawrence.com"`` (note the leading dot!) for cross-domain cookies, or use
-``None`` for a standard domain cookie.
-
-SESSION_COOKIE_NAME
--------------------
-
-Default: ``'sessionid'``
-
-The name of the cookie to use for sessions. This can be whatever you want.
-
-SESSION_COOKIE_PATH
--------------------
-
-.. versionadded:: 1.0
-
-Default: ``'/'``
-
-The path set on the session cookie. This should either match the URL path of
-your Django installation or be parent of that path.
-
-This is useful if you have multiple Django instances running under the same
-hostname. They can use different cookie paths, and each instance will only see
-its own session cookie.
-
-SESSION_COOKIE_SECURE
----------------------
-
-Default: ``False``
-
-Whether to use a secure cookie for the session cookie. If this is set to
-``True``, the cookie will be marked as "secure," which means browsers may
-ensure that the cookie is only sent under an HTTPS connection.
-
-SESSION_EXPIRE_AT_BROWSER_CLOSE
--------------------------------
-
-Default: ``False``
-
-Whether to expire the session when the user closes his or her browser. See
-"Browser-length sessions vs. persistent sessions" above.
-
-SESSION_SAVE_EVERY_REQUEST
---------------------------
-
-Default: ``False``
-
-Whether to save the session data on every request. If this is ``False``
-(default), then the session data will only be saved if it has been modified --
-that is, if any of its dictionary values have been assigned or deleted.
-
-.. _Django settings: ../settings/
-
-Technical details
-=================
-
- * The session dictionary should accept any pickleable Python object. See
- `the pickle module`_ for more information.
-
- * Session data is stored in a database table named ``django_session`` .
-
- * Django only sends a cookie if it needs to. If you don't set any session
- data, it won't send a session cookie.
-
-.. _`the pickle module`: http://docs.python.org/library/pickle.html
-
-Session IDs in URLs
-===================
-
-The Django sessions framework is entirely, and solely, cookie-based. It does
-not fall back to putting session IDs in URLs as a last resort, as PHP does.
-This is an intentional design decision. Not only does that behavior make URLs
-ugly, it makes your site vulnerable to session-ID theft via the "Referer"
-header.
diff --git a/parts/django/docs/topics/http/shortcuts.txt b/parts/django/docs/topics/http/shortcuts.txt
deleted file mode 100644
index 315460e..0000000
--- a/parts/django/docs/topics/http/shortcuts.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-=========================
-Django shortcut functions
-=========================
-
-.. module:: django.shortcuts
- :synopsis:
- Convience shortcuts that spam multiple levels of Django's MVC stack.
-
-.. index:: shortcuts
-
-The package ``django.shortcuts`` collects helper functions and classes that
-"span" multiple levels of MVC. In other words, these functions/classes
-introduce controlled coupling for convenience's sake.
-
-``render_to_response``
-======================
-
-.. function:: render_to_response(template[, dictionary][, context_instance][, mimetype])
-
- Renders a given template with a given context dictionary and returns an
- :class:`~django.http.HttpResponse` object with that rendered text.
-
-Required arguments
-------------------
-
-``template``
- The full name of a template to use or sequence of template names. If a
- sequence is given, the first template that exists will be used. See the
- :ref:`template loader documentation <ref-templates-api-the-python-api>`
- for more information on how templates are found.
-
-Optional arguments
-------------------
-
-``dictionary``
- A dictionary of values to add to the template context. By default, this
- is an empty dictionary. If a value in the dictionary is callable, the
- view will call it just before rendering the template.
-
-``context_instance``
- The context instance to render the template with. By default, the template
- will be rendered with a :class:`~django.template.Context` instance (filled
- with values from ``dictionary``). If you need to use :ref:`context
- processors <subclassing-context-requestcontext>`, render the template with
- a :class:`~django.template.RequestContext` instance instead. Your code
- might look something like this::
-
- return render_to_response('my_template.html',
- my_data_dictionary,
- context_instance=RequestContext(request))
-
-``mimetype``
- The MIME type to use for the resulting document. Defaults to the value of
- the :setting:`DEFAULT_CONTENT_TYPE` setting.
-
-Example
--------
-
-The following example renders the template ``myapp/index.html`` with the
-MIME type ``application/xhtml+xml``::
-
- from django.shortcuts import render_to_response
-
- def my_view(request):
- # View code here...
- return render_to_response('myapp/index.html', {"foo": "bar"},
- mimetype="application/xhtml+xml")
-
-This example is equivalent to::
-
- from django.http import HttpResponse
- from django.template import Context, loader
-
- def my_view(request):
- # View code here...
- t = loader.get_template('myapp/template.html')
- c = Context({'foo': 'bar'})
- return HttpResponse(t.render(c),
- mimetype="application/xhtml+xml")
-
-``redirect``
-============
-
-.. function:: redirect(to[, permanent=False], *args, **kwargs)
-
- .. versionadded:: 1.1
-
- Returns an :class:`~django.http.HttpResponseRedirect` to the appropriate URL
- for the arguments passed.
-
- The arguments could be:
-
- * A model: the model's `get_absolute_url()` function will be called.
-
- * A view name, possibly with arguments: `urlresolvers.reverse()` will
- be used to reverse-resolve the name.
-
- * A URL, which will be used as-is for the redirect location.
-
- By default issues a temporary redirect; pass ``permanent=True`` to issue a
- permanent redirect
-
-Examples
---------
-
-You can use the :func:`redirect` function in a number of ways.
-
- 1. By passing some object; that object's
- :meth:`~django.db.models.Model.get_absolute_url` method will be called
- to figure out the redirect URL::
-
- def my_view(request):
- ...
- object = MyModel.objects.get(...)
- return redirect(object)
-
- 2. By passing the name of a view and optionally some positional or
- keyword arguments; the URL will be reverse resolved using the
- :func:`~django.core.urlresolvers.reverse` method::
-
- def my_view(request):
- ...
- return redirect('some-view-name', foo='bar')
-
- 3. By passing a hardcoded URL to redirect to::
-
- def my_view(request):
- ...
- return redirect('/some/url/')
-
- This also works with full URLs::
-
- def my_view(request):
- ...
- return redirect('http://example.com/')
-
-By default, :func:`redirect` returns a temporary redirect. All of the above
-forms accept a ``permanent`` argument; if set to ``True`` a permanent redirect
-will be returned::
-
- def my_view(request):
- ...
- object = MyModel.objects.get(...)
- return redirect(object, permanent=True)
-
-``get_object_or_404``
-=====================
-
-.. function:: get_object_or_404(klass, *args, **kwargs)
-
- Calls :meth:`~django.db.models.QuerySet.get()` on a given model manager,
- but it raises :class:`~django.http.Http404` instead of the model's
- :class:`~django.core.exceptions.DoesNotExist` exception.
-
-Required arguments
-------------------
-
-``klass``
- A :class:`~django.db.models.Model`, :class:`~django.db.models.Manager` or
- :class:`~django.db.models.QuerySet` instance from which to get the object.
-
-``**kwargs``
- Lookup parameters, which should be in the format accepted by ``get()`` and
- ``filter()``.
-
-Example
--------
-
-The following example gets the object with the primary key of 1 from
-``MyModel``::
-
- from django.shortcuts import get_object_or_404
-
- def my_view(request):
- my_object = get_object_or_404(MyModel, pk=1)
-
-This example is equivalent to::
-
- from django.http import Http404
-
- def my_view(request):
- try:
- my_object = MyModel.objects.get(pk=1)
- except MyModel.DoesNotExist:
- raise Http404
-
-Note: As with ``get()``, a
-:class:`~django.core.exceptions.MultipleObjectsReturned` exception
-will be raised if more than one object is found.
-
-``get_list_or_404``
-===================
-
-.. function:: get_list_or_404(klass, *args, **kwargs)
-
- Returns the result of :meth:`~django.db.models.QuerySet.filter()` on a
- given model manager, raising :class:`~django.http.Http404` if the resulting
- list is empty.
-
-Required arguments
-------------------
-
-``klass``
- A :class:`~django.db.models.Model`, :class:`~django.db.models.Manager` or
- :class:`~django.db.models.query.QuerySet` instance from which to get the
- list.
-
-``**kwargs``
- Lookup parameters, which should be in the format accepted by ``get()`` and
- ``filter()``.
-
-Example
--------
-
-The following example gets all published objects from ``MyModel``::
-
- from django.shortcuts import get_list_or_404
-
- def my_view(request):
- my_objects = get_list_or_404(MyModel, published=True)
-
-This example is equivalent to::
-
- from django.http import Http404
-
- def my_view(request):
- my_objects = list(MyModel.objects.filter(published=True))
- if not my_objects:
- raise Http404
diff --git a/parts/django/docs/topics/http/urls.txt b/parts/django/docs/topics/http/urls.txt
deleted file mode 100644
index 2361297..0000000
--- a/parts/django/docs/topics/http/urls.txt
+++ /dev/null
@@ -1,890 +0,0 @@
-==============
-URL dispatcher
-==============
-
-.. module:: django.core.urlresolvers
-
-A clean, elegant URL scheme is an important detail in a high-quality Web
-application. Django lets you design URLs however you want, with no framework
-limitations.
-
-There's no ``.php`` or ``.cgi`` required, and certainly none of that
-``0,2097,1-1-1928,00`` nonsense.
-
-See `Cool URIs don't change`_, by World Wide Web creator Tim Berners-Lee, for
-excellent arguments on why URLs should be clean and usable.
-
-.. _Cool URIs don't change: http://www.w3.org/Provider/Style/URI
-
-Overview
-========
-
-To design URLs for an app, you create a Python module informally called a
-**URLconf** (URL configuration). This module is pure Python code and
-is a simple mapping between URL patterns (as simple regular expressions) to
-Python callback functions (your views).
-
-This mapping can be as short or as long as needed. It can reference other
-mappings. And, because it's pure Python code, it can be constructed
-dynamically.
-
-.. _how-django-processes-a-request:
-
-How Django processes a request
-==============================
-
-When a user requests a page from your Django-powered site, this is the
-algorithm the system follows to determine which Python code to execute:
-
- 1. Django determines the root URLconf module to use. Ordinarily,
- this is the value of the :setting:`ROOT_URLCONF` setting, but if the incoming
- ``HttpRequest`` object has an attribute called ``urlconf`` (set by
- middleware :ref:`request processing <request-middleware>`), its value
- will be used in place of the :setting:`ROOT_URLCONF` setting.
-
- 2. Django loads that Python module and looks for the variable
- ``urlpatterns``. This should be a Python list, in the format returned by
- the function :func:`django.conf.urls.defaults.patterns`.
-
- 3. Django runs through each URL pattern, in order, and stops at the first
- one that matches the requested URL.
-
- 4. Once one of the regexes matches, Django imports and calls the given
- view, which is a simple Python function. The view gets passed an
- :class:`~django.http.HttpRequest` as its first argument and any values
- captured in the regex as remaining arguments.
-
-Example
-=======
-
-Here's a sample URLconf::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- (r'^articles/2003/$', 'news.views.special_case_2003'),
- (r'^articles/(\d{4})/$', 'news.views.year_archive'),
- (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
- (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
- )
-
-Notes:
-
- * ``from django.conf.urls.defaults import *`` makes the ``patterns()``
- function available.
-
- * To capture a value from the URL, just put parenthesis around it.
-
- * There's no need to add a leading slash, because every URL has that. For
- example, it's ``^articles``, not ``^/articles``.
-
- * The ``'r'`` in front of each regular expression string is optional but
- recommended. It tells Python that a string is "raw" -- that nothing in
- the string should be escaped. See `Dive Into Python's explanation`_.
-
-Example requests:
-
- * A request to ``/articles/2005/03/`` would match the third entry in the
- list. Django would call the function
- ``news.views.month_archive(request, '2005', '03')``.
-
- * ``/articles/2005/3/`` would not match any URL patterns, because the
- third entry in the list requires two digits for the month.
-
- * ``/articles/2003/`` would match the first pattern in the list, not the
- second one, because the patterns are tested in order, and the first one
- is the first test to pass. Feel free to exploit the ordering to insert
- special cases like this.
-
- * ``/articles/2003`` would not match any of these patterns, because each
- pattern requires that the URL end with a slash.
-
- * ``/articles/2003/03/3/`` would match the final pattern. Django would call
- the function ``news.views.article_detail(request, '2003', '03', '3')``.
-
-.. _Dive Into Python's explanation: http://diveintopython.org/regular_expressions/street_addresses.html#re.matching.2.3
-
-Named groups
-============
-
-The above example used simple, *non-named* regular-expression groups (via
-parenthesis) to capture bits of the URL and pass them as *positional* arguments
-to a view. In more advanced usage, it's possible to use *named*
-regular-expression groups to capture URL bits and pass them as *keyword*
-arguments to a view.
-
-In Python regular expressions, the syntax for named regular-expression groups
-is ``(?P<name>pattern)``, where ``name`` is the name of the group and
-``pattern`` is some pattern to match.
-
-Here's the above example URLconf, rewritten to use named groups::
-
- urlpatterns = patterns('',
- (r'^articles/2003/$', 'news.views.special_case_2003'),
- (r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'),
- (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'),
- (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d+)/$', 'news.views.article_detail'),
- )
-
-This accomplishes exactly the same thing as the previous example, with one
-subtle difference: The captured values are passed to view functions as keyword
-arguments rather than positional arguments. For example:
-
- * A request to ``/articles/2005/03/`` would call the function
- ``news.views.month_archive(request, year='2005', month='03')``, instead
- of ``news.views.month_archive(request, '2005', '03')``.
-
- * A request to ``/articles/2003/03/3/`` would call the function
- ``news.views.article_detail(request, year='2003', month='03', day='3')``.
-
-In practice, this means your URLconfs are slightly more explicit and less prone
-to argument-order bugs -- and you can reorder the arguments in your views'
-function definitions. Of course, these benefits come at the cost of brevity;
-some developers find the named-group syntax ugly and too verbose.
-
-The matching/grouping algorithm
--------------------------------
-
-Here's the algorithm the URLconf parser follows, with respect to named groups
-vs. non-named groups in a regular expression:
-
-If there are any named arguments, it will use those, ignoring non-named arguments.
-Otherwise, it will pass all non-named arguments as positional arguments.
-
-In both cases, it will pass any extra keyword arguments as keyword arguments.
-See "Passing extra options to view functions" below.
-
-What the URLconf searches against
-=================================
-
-The URLconf searches against the requested URL, as a normal Python string. This
-does not include GET or POST parameters, or the domain name.
-
-For example, in a request to ``http://www.example.com/myapp/``, the URLconf
-will look for ``myapp/``.
-
-In a request to ``http://www.example.com/myapp/?page=3``, the URLconf will look
-for ``myapp/``.
-
-The URLconf doesn't look at the request method. In other words, all request
-methods -- ``POST``, ``GET``, ``HEAD``, etc. -- will be routed to the same
-function for the same URL.
-
-Syntax of the urlpatterns variable
-==================================
-
-``urlpatterns`` should be a Python list, in the format returned by the function
-:func:`django.conf.urls.defaults.patterns`. Always use ``patterns()`` to create
-the ``urlpatterns`` variable.
-
-Convention is to use ``from django.conf.urls.defaults import *`` at the top of
-your URLconf. This gives your module access to these objects:
-
-.. module:: django.conf.urls.defaults
-
-patterns
---------
-
-.. function:: patterns(prefix, pattern_description, ...)
-
-A function that takes a prefix, and an arbitrary number of URL patterns, and
-returns a list of URL patterns in the format Django needs.
-
-The first argument to ``patterns()`` is a string ``prefix``. See
-`The view prefix`_ below.
-
-The remaining arguments should be tuples in this format::
-
- (regular expression, Python callback function [, optional dictionary [, optional name]])
-
-...where ``optional dictionary`` and ``optional name`` are optional. (See
-`Passing extra options to view functions`_ below.)
-
-.. note::
- Because `patterns()` is a function call, it accepts a maximum of 255
- arguments (URL patterns, in this case). This is a limit for all Python
- function calls. This is rarely a problem in practice, because you'll
- typically structure your URL patterns modularly by using `include()`
- sections. However, on the off-chance you do hit the 255-argument limit,
- realize that `patterns()` returns a Python list, so you can split up the
- construction of the list.
-
- ::
-
- urlpatterns = patterns('',
- ...
- )
- urlpatterns += patterns('',
- ...
- )
-
- Python lists have unlimited size, so there's no limit to how many URL
- patterns you can construct. The only limit is that you can only create 254
- at a time (the 255th argument is the initial prefix argument).
-
-url
----
-
-.. versionadded:: 1.0
-
-.. function:: url(regex, view, kwargs=None, name=None, prefix='')
-
-You can use the ``url()`` function, instead of a tuple, as an argument to
-``patterns()``. This is convenient if you want to specify a name without the
-optional extra arguments dictionary. For example::
-
- urlpatterns = patterns('',
- url(r'^index/$', index_view, name="main-view"),
- ...
- )
-
-This function takes five arguments, most of which are optional::
-
- url(regex, view, kwargs=None, name=None, prefix='')
-
-See `Naming URL patterns`_ for why the ``name`` parameter is useful.
-
-The ``prefix`` parameter has the same meaning as the first argument to
-``patterns()`` and is only relevant when you're passing a string as the
-``view`` parameter.
-
-handler404
-----------
-
-.. data:: handler404
-
-A callable, or a string representing the full Python import path to the view
-that should be called if none of the URL patterns match.
-
-By default, this is ``'django.views.defaults.page_not_found'``. That default
-value should suffice.
-
-.. versionchanged:: 1.2
- Previous versions of Django only accepted strings representing import paths.
-
-handler500
-----------
-
-.. data:: handler500
-
-A callable, or a string representing the full Python import path to the view
-that should be called in case of server errors. Server errors happen when you
-have runtime errors in view code.
-
-By default, this is ``'django.views.defaults.server_error'``. That default
-value should suffice.
-
-.. versionchanged:: 1.2
- Previous versions of Django only accepted strings representing import paths.
-
-include
--------
-
-.. function:: include(<module or pattern_list>)
-
-A function that takes a full Python import path to another URLconf module that
-should be "included" in this place.
-
-.. versionadded:: 1.1
-
-:func:`include` also accepts as an argument an iterable that returns URL
-patterns.
-
-See `Including other URLconfs`_ below.
-
-Notes on capturing text in URLs
-===============================
-
-Each captured argument is sent to the view as a plain Python string, regardless
-of what sort of match the regular expression makes. For example, in this
-URLconf line::
-
- (r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'),
-
-...the ``year`` argument to ``news.views.year_archive()`` will be a string, not
-an integer, even though the ``\d{4}`` will only match integer strings.
-
-A convenient trick is to specify default parameters for your views' arguments.
-Here's an example URLconf and view::
-
- # URLconf
- urlpatterns = patterns('',
- (r'^blog/$', 'blog.views.page'),
- (r'^blog/page(?P<num>\d+)/$', 'blog.views.page'),
- )
-
- # View (in blog/views.py)
- def page(request, num="1"):
- # Output the appropriate page of blog entries, according to num.
-
-In the above example, both URL patterns point to the same view --
-``blog.views.page`` -- but the first pattern doesn't capture anything from the
-URL. If the first pattern matches, the ``page()`` function will use its
-default argument for ``num``, ``"1"``. If the second pattern matches,
-``page()`` will use whatever ``num`` value was captured by the regex.
-
-Performance
-===========
-
-Each regular expression in a ``urlpatterns`` is compiled the first time it's
-accessed. This makes the system blazingly fast.
-
-The view prefix
-===============
-
-You can specify a common prefix in your ``patterns()`` call, to cut down on
-code duplication.
-
-Here's the example URLconf from the :doc:`Django overview </intro/overview>`::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- (r'^articles/(\d{4})/$', 'news.views.year_archive'),
- (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
- (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
- )
-
-In this example, each view has a common prefix -- ``'news.views'``.
-Instead of typing that out for each entry in ``urlpatterns``, you can use the
-first argument to the ``patterns()`` function to specify a prefix to apply to
-each view function.
-
-With this in mind, the above example can be written more concisely as::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('news.views',
- (r'^articles/(\d{4})/$', 'year_archive'),
- (r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
- (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
- )
-
-Note that you don't put a trailing dot (``"."``) in the prefix. Django puts
-that in automatically.
-
-Multiple view prefixes
-----------------------
-
-In practice, you'll probably end up mixing and matching views to the point
-where the views in your ``urlpatterns`` won't have a common prefix. However,
-you can still take advantage of the view prefix shortcut to remove duplication.
-Just add multiple ``patterns()`` objects together, like this:
-
-Old::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- (r'^$', 'django.views.generic.date_based.archive_index'),
- (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', 'django.views.generic.date_based.archive_month'),
- (r'^tag/(?P<tag>\w+)/$', 'weblog.views.tag'),
- )
-
-New::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('django.views.generic.date_based',
- (r'^$', 'archive_index'),
- (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$','archive_month'),
- )
-
- urlpatterns += patterns('weblog.views',
- (r'^tag/(?P<tag>\w+)/$', 'tag'),
- )
-
-Including other URLconfs
-========================
-
-At any point, your ``urlpatterns`` can "include" other URLconf modules. This
-essentially "roots" a set of URLs below other ones.
-
-For example, here's the URLconf for the `Django Web site`_ itself. It includes a
-number of other URLconfs::
-
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- (r'^weblog/', include('django_website.apps.blog.urls.blog')),
- (r'^documentation/', include('django_website.apps.docs.urls.docs')),
- (r'^comments/', include('django.contrib.comments.urls')),
- )
-
-Note that the regular expressions in this example don't have a ``$``
-(end-of-string match character) but do include a trailing slash. Whenever
-Django encounters ``include()``, it chops off whatever part of the URL matched
-up to that point and sends the remaining string to the included URLconf for
-further processing.
-
-.. versionadded:: 1.1
-
-Another possibility is to include additional URL patterns not by specifying the
-URLconf Python module defining them as the `include`_ argument but by using
-directly the pattern list as returned by `patterns`_ instead. For example::
-
- from django.conf.urls.defaults import *
-
- extra_patterns = patterns('',
- url(r'reports/(?P<id>\d+)/$', 'credit.views.report', name='credit-reports'),
- url(r'charge/$', 'credit.views.charge', name='credit-charge'),
- )
-
- urlpatterns = patterns('',
- url(r'^$', 'apps.main.views.homepage', name='site-homepage'),
- (r'^help/', include('apps.help.urls')),
- (r'^credit/', include(extra_patterns)),
- )
-
-This approach can be seen in use when you deploy an instance of the Django
-Admin application. The Django Admin is deployed as instances of a
-:class:`~django.contrib.admin.AdminSite`; each
-:class:`~django.contrib.admin.AdminSite` instance has an attribute ``urls``
-that returns the url patterns available to that instance. It is this attribute
-that you ``include()`` into your projects ``urlpatterns`` when you deploy the
-admin instance.
-
-.. _`Django Web site`: http://www.djangoproject.com/
-
-Captured parameters
--------------------
-
-An included URLconf receives any captured parameters from parent URLconfs, so
-the following example is valid::
-
- # In settings/urls/main.py
- urlpatterns = patterns('',
- (r'^(?P<username>\w+)/blog/', include('foo.urls.blog')),
- )
-
- # In foo/urls/blog.py
- urlpatterns = patterns('foo.views',
- (r'^$', 'blog.index'),
- (r'^archive/$', 'blog.archive'),
- )
-
-In the above example, the captured ``"username"`` variable is passed to the
-included URLconf, as expected.
-
-.. _topics-http-defining-url-namespaces:
-
-Defining URL Namespaces
------------------------
-
-When you need to deploy multiple instances of a single application, it can be
-helpful to be able to differentiate between instances. This is especially
-important when using :ref:`named URL patterns <naming-url-patterns>`, since
-multiple instances of a single application will share named URLs. Namespaces
-provide a way to tell these named URLs apart.
-
-A URL namespace comes in two parts, both of which are strings:
-
- * An **application namespace**. This describes the name of the application
- that is being deployed. Every instance of a single application will have
- the same application namespace. For example, Django's admin application
- has the somewhat predictable application namespace of ``admin``.
-
- * An **instance namespace**. This identifies a specific instance of an
- application. Instance namespaces should be unique across your entire
- project. However, an instance namespace can be the same as the
- application namespace. This is used to specify a default instance of an
- application. For example, the default Django Admin instance has an
- instance namespace of ``admin``.
-
-URL Namespaces can be specified in two ways.
-
-Firstly, you can provide the application and instance namespace as arguments
-to ``include()`` when you construct your URL patterns. For example,::
-
- (r'^help/', include('apps.help.urls', namespace='foo', app_name='bar')),
-
-This will include the URLs defined in ``apps.help.urls`` into the application
-namespace ``bar``, with the instance namespace ``foo``.
-
-Secondly, you can include an object that contains embedded namespace data. If
-you ``include()`` a ``patterns`` object, that object will be added to the
-global namespace. However, you can also ``include()`` an object that contains
-a 3-tuple containing::
-
- (<patterns object>, <application namespace>, <instance namespace>)
-
-This will include the nominated URL patterns into the given application and
-instance namespace. For example, the ``urls`` attribute of Django's
-:class:`~django.contrib.admin.AdminSite` object returns a 3-tuple that contains
-all the patterns in an admin site, plus the name of the admin instance, and the
-application namespace ``admin``.
-
-Once you have defined namespaced URLs, you can reverse them. For details on
-reversing namespaced urls, see the documentation on :ref:`reversing namespaced
-URLs <topics-http-reversing-url-namespaces>`.
-
-Passing extra options to view functions
-=======================================
-
-URLconfs have a hook that lets you pass extra arguments to your view functions,
-as a Python dictionary.
-
-Any URLconf tuple can have an optional third element, which should be a
-dictionary of extra keyword arguments to pass to the view function.
-
-For example::
-
- urlpatterns = patterns('blog.views',
- (r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}),
- )
-
-In this example, for a request to ``/blog/2005/``, Django will call the
-``blog.views.year_archive()`` view, passing it these keyword arguments::
-
- year='2005', foo='bar'
-
-This technique is used in :doc:`generic views </ref/generic-views>` and in the
-:doc:`syndication framework </ref/contrib/syndication>` to pass metadata and
-options to views.
-
-.. admonition:: Dealing with conflicts
-
- It's possible to have a URL pattern which captures named keyword arguments,
- and also passes arguments with the same names in its dictionary of extra
- arguments. When this happens, the arguments in the dictionary will be used
- instead of the arguments captured in the URL.
-
-Passing extra options to ``include()``
---------------------------------------
-
-Similarly, you can pass extra options to ``include()``. When you pass extra
-options to ``include()``, *each* line in the included URLconf will be passed
-the extra options.
-
-For example, these two URLconf sets are functionally identical:
-
-Set one::
-
- # main.py
- urlpatterns = patterns('',
- (r'^blog/', include('inner'), {'blogid': 3}),
- )
-
- # inner.py
- urlpatterns = patterns('',
- (r'^archive/$', 'mysite.views.archive'),
- (r'^about/$', 'mysite.views.about'),
- )
-
-Set two::
-
- # main.py
- urlpatterns = patterns('',
- (r'^blog/', include('inner')),
- )
-
- # inner.py
- urlpatterns = patterns('',
- (r'^archive/$', 'mysite.views.archive', {'blogid': 3}),
- (r'^about/$', 'mysite.views.about', {'blogid': 3}),
- )
-
-Note that extra options will *always* be passed to *every* line in the included
-URLconf, regardless of whether the line's view actually accepts those options
-as valid. For this reason, this technique is only useful if you're certain that
-every view in the included URLconf accepts the extra options you're passing.
-
-Passing callable objects instead of strings
-===========================================
-
-Some developers find it more natural to pass the actual Python function object
-rather than a string containing the path to its module. This alternative is
-supported -- you can pass any callable object as the view.
-
-For example, given this URLconf in "string" notation::
-
- urlpatterns = patterns('',
- (r'^archive/$', 'mysite.views.archive'),
- (r'^about/$', 'mysite.views.about'),
- (r'^contact/$', 'mysite.views.contact'),
- )
-
-You can accomplish the same thing by passing objects rather than strings. Just
-be sure to import the objects::
-
- from mysite.views import archive, about, contact
-
- urlpatterns = patterns('',
- (r'^archive/$', archive),
- (r'^about/$', about),
- (r'^contact/$', contact),
- )
-
-The following example is functionally identical. It's just a bit more compact
-because it imports the module that contains the views, rather than importing
-each view individually::
-
- from mysite import views
-
- urlpatterns = patterns('',
- (r'^archive/$', views.archive),
- (r'^about/$', views.about),
- (r'^contact/$', views.contact),
- )
-
-The style you use is up to you.
-
-Note that if you use this technique -- passing objects rather than strings --
-the view prefix (as explained in "The view prefix" above) will have no effect.
-
-.. _naming-url-patterns:
-
-Naming URL patterns
-===================
-
-.. versionadded:: 1.0
-
-It's fairly common to use the same view function in multiple URL patterns in
-your URLconf. For example, these two URL patterns both point to the ``archive``
-view::
-
- urlpatterns = patterns('',
- (r'^archive/(\d{4})/$', archive),
- (r'^archive-summary/(\d{4})/$', archive, {'summary': True}),
- )
-
-This is completely valid, but it leads to problems when you try to do reverse
-URL matching (through the ``permalink()`` decorator or the :ttag:`url` template
-tag). Continuing this example, if you wanted to retrieve the URL for the
-``archive`` view, Django's reverse URL matcher would get confused, because *two*
-URLpatterns point at that view.
-
-To solve this problem, Django supports **named URL patterns**. That is, you can
-give a name to a URL pattern in order to distinguish it from other patterns
-using the same view and parameters. Then, you can use this name in reverse URL
-matching.
-
-Here's the above example, rewritten to use named URL patterns::
-
- urlpatterns = patterns('',
- url(r'^archive/(\d{4})/$', archive, name="full-archive"),
- url(r'^archive-summary/(\d{4})/$', archive, {'summary': True}, "arch-summary"),
- )
-
-With these names in place (``full-archive`` and ``arch-summary``), you can
-target each pattern individually by using its name:
-
-.. code-block:: html+django
-
- {% url arch-summary 1945 %}
- {% url full-archive 2007 %}
-
-Even though both URL patterns refer to the ``archive`` view here, using the
-``name`` parameter to ``url()`` allows you to tell them apart in templates.
-
-The string used for the URL name can contain any characters you like. You are
-not restricted to valid Python names.
-
-.. note::
-
- When you name your URL patterns, make sure you use names that are unlikely
- to clash with any other application's choice of names. If you call your URL
- pattern ``comment``, and another application does the same thing, there's
- no guarantee which URL will be inserted into your template when you use
- this name.
-
- Putting a prefix on your URL names, perhaps derived from the application
- name, will decrease the chances of collision. We recommend something like
- ``myapp-comment`` instead of ``comment``.
-
-.. _topics-http-reversing-url-namespaces:
-
-URL namespaces
---------------
-
-.. versionadded:: 1.1
-
-Namespaced URLs are specified using the ``:`` operator. For example, the main
-index page of the admin application is referenced using ``admin:index``. This
-indicates a namespace of ``admin``, and a named URL of ``index``.
-
-Namespaces can also be nested. The named URL ``foo:bar:whiz`` would look for
-a pattern named ``whiz`` in the namespace ``bar`` that is itself defined within
-the top-level namespace ``foo``.
-
-When given a namespaced URL (e.g. ``myapp:index``) to resolve, Django splits
-the fully qualified name into parts, and then tries the following lookup:
-
- 1. First, Django looks for a matching application namespace (in this
- example, ``myapp``). This will yield a list of instances of that
- application.
-
- 2. If there is a *current* application defined, Django finds and returns
- the URL resolver for that instance. The *current* application can be
- specified as an attribute on the template context - applications that
- expect to have multiple deployments should set the ``current_app``
- attribute on any ``Context`` or ``RequestContext`` that is used to
- render a template.
-
- The current application can also be specified manually as an argument
- to the :func:`reverse()` function.
-
- 3. If there is no current application. Django looks for a default
- application instance. The default application instance is the instance
- that has an instance namespace matching the application namespace (in
- this example, an instance of the ``myapp`` called ``myapp``).
-
- 4. If there is no default application instance, Django will pick the last
- deployed instance of the application, whatever its instance name may be.
-
- 5. If the provided namespace doesn't match an application namespace in
- step 1, Django will attempt a direct lookup of the namespace as an
- instance namespace.
-
-If there are nested namespaces, these steps are repeated for each part of the
-namespace until only the view name is unresolved. The view name will then be
-resolved into a URL in the namespace that has been found.
-
-To show this resolution strategy in action, consider an example of two instances
-of ``myapp``: one called ``foo``, and one called ``bar``. ``myapp`` has a main
-index page with a URL named `index`. Using this setup, the following lookups are
-possible:
-
- * If one of the instances is current - say, if we were rendering a utility page
- in the instance ``bar`` - ``myapp:index`` will resolve to the index page of
- the instance ``bar``.
-
- * If there is no current instance - say, if we were rendering a page
- somewhere else on the site - ``myapp:index`` will resolve to the last
- registered instance of ``myapp``. Since there is no default instance,
- the last instance of ``myapp`` that is registered will be used. This could
- be ``foo`` or ``bar``, depending on the order they are introduced into the
- urlpatterns of the project.
-
- * ``foo:index`` will always resolve to the index page of the instance ``foo``.
-
-If there was also a default instance - i.e., an instance named `myapp` - the
-following would happen:
-
- * If one of the instances is current - say, if we were rendering a utility page
- in the instance ``bar`` - ``myapp:index`` will resolve to the index page of
- the instance ``bar``.
-
- * If there is no current instance - say, if we were rendering a page somewhere
- else on the site - ``myapp:index`` will resolve to the index page of the
- default instance.
-
- * ``foo:index`` will again resolve to the index page of the instance ``foo``.
-
-
-Utility methods
-===============
-
-reverse()
----------
-
-If you need to use something similar to the :ttag:`url` template tag in
-your code, Django provides the following method (in the
-``django.core.urlresolvers`` module):
-
-.. function:: reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
-
-``viewname`` is either the function name (either a function reference, or the
-string version of the name, if you used that form in ``urlpatterns``) or the
-`URL pattern name`_. Normally, you won't need to worry about the
-``urlconf`` parameter and will only pass in the positional and keyword
-arguments to use in the URL matching. For example::
-
- from django.core.urlresolvers import reverse
-
- def myview(request):
- return HttpResponseRedirect(reverse('arch-summary', args=[1945]))
-
-.. _URL pattern name: `Naming URL patterns`_
-
-The ``reverse()`` function can reverse a large variety of regular expression
-patterns for URLs, but not every possible one. The main restriction at the
-moment is that the pattern cannot contain alternative choices using the
-vertical bar (``"|"``) character. You can quite happily use such patterns for
-matching against incoming URLs and sending them off to views, but you cannot
-reverse such patterns.
-
-.. versionadded:: 1.1
-
-The ``current_app`` argument allows you to provide a hint to the resolver
-indicating the application to which the currently executing view belongs.
-This ``current_app`` argument is used as a hint to resolve application
-namespaces into URLs on specific application instances, according to the
-:ref:`namespaced URL resolution strategy <topics-http-reversing-url-namespaces>`.
-
-.. admonition:: Make sure your views are all correct.
-
- As part of working out which URL names map to which patterns, the
- ``reverse()`` function has to import all of your URLconf files and examine
- the name of each view. This involves importing each view function. If
- there are *any* errors whilst importing any of your view functions, it
- will cause ``reverse()`` to raise an error, even if that view function is
- not the one you are trying to reverse.
-
- Make sure that any views you reference in your URLconf files exist and can
- be imported correctly. Do not include lines that reference views you
- haven't written yet, because those views will not be importable.
-
-resolve()
----------
-
-The :func:`django.core.urlresolvers.resolve` function can be used for resolving
-URL paths to the corresponding view functions. It has the following signature:
-
-.. function:: resolve(path, urlconf=None)
-
-``path`` is the URL path you want to resolve. As with
-:func:`~django.core.urlresolvers.reverse`, you don't need to
-worry about the ``urlconf`` parameter. The function returns
-the triple (view function, arguments, keyword arguments).
-
-If the URL does not resolve, the function raises an
-:class:`~django.http.Http404` exception.
-
-For example, it can be used for testing if a view would raise a ``Http404``
-error before redirecting to it::
-
- from urlparse import urlparse
- from django.core.urlresolvers import resolve
- from django.http import HttpResponseRedirect, Http404
-
- def myview(request):
- next = request.META.get('HTTP_REFERER', None) or '/'
- response = HttpResponseRedirect(next)
-
- # modify the request and response as required, e.g. change locale
- # and set corresponding locale cookie
-
- view, args, kwargs = resolve(urlparse(next)[2])
- kwargs['request'] = request
- try:
- view(*args, **kwargs)
- except Http404:
- return HttpResponseRedirect('/')
- return response
-
-permalink()
------------
-
-The :func:`django.db.models.permalink` decorator is useful for writing short
-methods that return a full URL path. For example, a model's
-``get_absolute_url()`` method. See :func:`django.db.models.permalink` for more.
-
-get_script_prefix()
--------------------
-
-.. function:: get_script_prefix()
-
-.. versionadded:: 1.0
-
-Normally, you should always use :func:`~django.core.urlresolvers.reverse` or
-:func:`~django.db.models.permalink` to define URLs within your application.
-However, if your application constructs part of the URL hierarchy itself, you
-may occasionally need to generate URLs. In that case, you need to be able to
-find the base URL of the Django project within its web server
-(normally, :func:`~django.core.urlresolvers.reverse` takes care of this for
-you). In that case, you can call ``get_script_prefix()``, which will return the
-script prefix portion of the URL for your Django project. If your Django
-project is at the root of its webserver, this is always ``"/"``, but it can be
-changed, for instance by using ``django.root`` (see :ref:`How to use
-Django with Apache and mod_python <howto-deployment-modpython>`). \ No newline at end of file
diff --git a/parts/django/docs/topics/http/views.txt b/parts/django/docs/topics/http/views.txt
deleted file mode 100644
index 2818f42..0000000
--- a/parts/django/docs/topics/http/views.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-=============
-Writing Views
-=============
-
-A view function, or *view* for short, is simply a Python function that takes a
-Web request and returns a Web response. This response can be the HTML contents
-of a Web page, or a redirect, or a 404 error, or an XML document, or an image .
-. . or anything, really. The view itself contains whatever arbitrary logic is
-necessary to return that response. This code can live anywhere you want, as long
-as it's on your Python path. There's no other requirement--no "magic," so to
-speak. For the sake of putting the code *somewhere*, let's create a file called
-``views.py`` in the ``mysite`` directory, which you created in the previous
-chapter.
-
-A simple view
-=============
-
-Here's a view that returns the current date and time, as an HTML document:
-
-.. code-block:: python
-
- from django.http import HttpResponse
- import datetime
-
- def current_datetime(request):
- now = datetime.datetime.now()
- html = "<html><body>It is now %s.</body></html>" % now
- return HttpResponse(html)
-
-Let's step through this code one line at a time:
-
- * First, we import the class :class:`~django.http.HttpResponse` from the
- :mod:`django.http` module, along with Python's ``datetime`` library.
-
- * Next, we define a function called ``current_datetime``. This is the view
- function. Each view function takes an :class:`~django.http.HttpRequest`
- object as its first parameter, which is typically named ``request``.
-
- Note that the name of the view function doesn't matter; it doesn't have to
- be named in a certain way in order for Django to recognize it. We're
- calling it ``current_datetime`` here, because that name clearly indicates
- what it does.
-
- * The view returns an :class:`~django.http.HttpResponse` object that
- contains the generated response. Each view function is responsible for
- returning an :class:`~django.http.HttpResponse` object. (There are
- exceptions, but we'll get to those later.)
-
-.. admonition:: Django's Time Zone
-
- Django includes a ``TIME_ZONE`` setting that defaults to
- ``America/Chicago``. This probably isn't where you live, so you might want
- to change it in your settings file.
-
-Mapping URLs to Views
-=====================
-
-So, to recap, this view function returns an HTML page that includes the current
-date and time. To display this view at a particular URL, you'll need to create a
-*URLconf*; see :doc:`/topics/http/urls` for instructions.
-
-Returning errors
-================
-
-Returning HTTP error codes in Django is easy. There are subclasses of
-:class:`~django.http.HttpResponse` for a number of common HTTP status codes
-other than 200 (which means *"OK"*). You can find the full list of available
-subclasses in the :ref:`request/response <ref-httpresponse-subclasses>`
-documentation. Just return an instance of one of those subclasses instead of
-a normal :class:`~django.http.HttpResponse` in order to signify an error. For
-example::
-
- def my_view(request):
- # ...
- if foo:
- return HttpResponseNotFound('<h1>Page not found</h1>')
- else:
- return HttpResponse('<h1>Page was found</h1>')
-
-There isn't a specialized subclass for every possible HTTP response code,
-since many of them aren't going to be that common. However, as documented in
-the :class:`~django.http.HttpResponse` documentation, you can also pass the
-HTTP status code into the constructor for :class:`~django.http.HttpResponse`
-to create a return class for any status code you like. For example::
-
- def my_view(request):
- # ...
-
- # Return a "created" (201) response code.
- return HttpResponse(status=201)
-
-Because 404 errors are by far the most common HTTP error, there's an easier way
-to handle those errors.
-
-The Http404 exception
----------------------
-
-.. class:: django.http.Http404()
-
-When you return an error such as :class:`~django.http.HttpResponseNotFound`,
-you're responsible for defining the HTML of the resulting error page::
-
- return HttpResponseNotFound('<h1>Page not found</h1>')
-
-For convenience, and because it's a good idea to have a consistent 404 error page
-across your site, Django provides an ``Http404`` exception. If you raise
-``Http404`` at any point in a view function, Django will catch it and return the
-standard error page for your application, along with an HTTP error code 404.
-
-Example usage::
-
- from django.http import Http404
-
- def detail(request, poll_id):
- try:
- p = Poll.objects.get(pk=poll_id)
- except Poll.DoesNotExist:
- raise Http404
- return render_to_response('polls/detail.html', {'poll': p})
-
-In order to use the ``Http404`` exception to its fullest, you should create a
-template that is displayed when a 404 error is raised. This template should be
-called ``404.html`` and located in the top level of your template tree.
-
-Customizing error views
-=======================
-
-The 404 (page not found) view
------------------------------
-
-When you raise an ``Http404`` exception, Django loads a special view devoted
-to handling 404 errors. By default, it's the view
-``django.views.defaults.page_not_found``, which loads and renders the template
-``404.html``.
-
-This means you need to define a ``404.html`` template in your root template
-directory. This template will be used for all 404 errors.
-
-This ``page_not_found`` view should suffice for 99% of Web applications, but if
-you want to override the 404 view, you can specify ``handler404`` in your
-URLconf, like so::
-
- handler404 = 'mysite.views.my_custom_404_view'
-
-Behind the scenes, Django determines the 404 view by looking for ``handler404``.
-By default, URLconfs contain the following line::
-
- from django.conf.urls.defaults import *
-
-That takes care of setting ``handler404`` in the current module. As you can see
-in ``django/conf/urls/defaults.py``, ``handler404`` is set to
-``'django.views.defaults.page_not_found'`` by default.
-
-Three things to note about 404 views:
-
- * The 404 view is also called if Django doesn't find a match after checking
- every regular expression in the URLconf.
-
- * If you don't define your own 404 view -- and simply use the
- default, which is recommended -- you still have one obligation:
- you must create a ``404.html`` template in the root of your
- template directory. The default 404 view will use that template
- for all 404 errors. The default 404 view will pass one variable
- to the template: ``request_path``, which is the URL that resulted
- in the 404.
-
- * The 404 view is passed a :class:`~django.template.RequestContext` and
- will have access to variables supplied by your
- :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting (e.g.,
- :setting:`MEDIA_URL`).
-
- * If :setting:`DEBUG` is set to ``True`` (in your settings module), then
- your 404 view will never be used, and the traceback will be displayed
- instead.
-
-The 500 (server error) view
-----------------------------
-
-Similarly, Django executes special-case behavior in the case of runtime errors
-in view code. If a view results in an exception, Django will, by default, call
-the view ``django.views.defaults.server_error``, which loads and renders the
-template ``500.html``.
-
-This means you need to define a ``500.html`` template in your root template
-directory. This template will be used for all server errors. The default 500
-view passes no variables to this template and is rendered with an empty
-``Context`` to lessen the chance of additional errors.
-
-This ``server_error`` view should suffice for 99% of Web applications, but if
-you want to override the view, you can specify ``handler500`` in your
-URLconf, like so::
-
- handler500 = 'mysite.views.my_custom_error_view'
-
-Behind the scenes, Django determines the error view by looking for ``handler500``.
-By default, URLconfs contain the following line::
-
- from django.conf.urls.defaults import *
-
-That takes care of setting ``handler500`` in the current module. As you can see
-in ``django/conf/urls/defaults.py``, ``handler500`` is set to
-``'django.views.defaults.server_error'`` by default.
diff --git a/parts/django/docs/topics/i18n/deployment.txt b/parts/django/docs/topics/i18n/deployment.txt
deleted file mode 100644
index 4727841..0000000
--- a/parts/django/docs/topics/i18n/deployment.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-==========================
-Deployment of translations
-==========================
-
-If you don't need internationalization
-======================================
-
-Django's internationalization hooks are on by default, and that means there's a
-bit of i18n-related overhead in certain places of the framework. If you don't
-use internationalization, you should take the two seconds to set
-:setting:`USE_I18N = False <USE_I18N>` in your settings file. If
-:setting:`USE_I18N` is set to ``False``, then Django will make some
-optimizations so as not to load the internationalization machinery.
-
-You'll probably also want to remove ``'django.core.context_processors.i18n'``
-from your ``TEMPLATE_CONTEXT_PROCESSORS`` setting.
-
-.. note::
-
- There is also an independent but related :setting:`USE_L10N` setting that
- controls if Django should implement format localization.
-
- If :setting:`USE_L10N` is set to ``True``, Django will handle numbers times,
- and dates in the format of the current locale. That includes representation
- of these field types on templates and allowed input formats for dates,
- times on model forms.
-
- See :ref:`format-localization` for more details.
-
-If you do need internationalization
-===================================
-
-.. _how-django-discovers-language-preference:
-
-How Django discovers language preference
-----------------------------------------
-
-Once you've prepared your translations -- or, if you just want to use the
-translations that come with Django -- you'll just need to activate translation
-for your app.
-
-Behind the scenes, Django has a very flexible model of deciding which language
-should be used -- installation-wide, for a particular user, or both.
-
-To set an installation-wide language preference, set :setting:`LANGUAGE_CODE`.
-Django uses this language as the default translation -- the final attempt if no
-other translator finds a translation.
-
-If all you want to do is run Django with your native language, and a language
-file is available for it, all you need to do is set ``LANGUAGE_CODE``.
-
-If you want to let each individual user specify which language he or she
-prefers, use ``LocaleMiddleware``. ``LocaleMiddleware`` enables language
-selection based on data from the request. It customizes content for each user.
-
-To use ``LocaleMiddleware``, add ``'django.middleware.locale.LocaleMiddleware'``
-to your ``MIDDLEWARE_CLASSES`` setting. Because middleware order matters, you
-should follow these guidelines:
-
- * Make sure it's one of the first middlewares installed.
- * It should come after ``SessionMiddleware``, because ``LocaleMiddleware``
- makes use of session data.
- * If you use ``CacheMiddleware``, put ``LocaleMiddleware`` after it.
-
-For example, your ``MIDDLEWARE_CLASSES`` might look like this::
-
- MIDDLEWARE_CLASSES = (
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.locale.LocaleMiddleware',
- 'django.middleware.common.CommonMiddleware',
- )
-
-(For more on middleware, see the :doc:`middleware documentation
-</topics/http/middleware>`.)
-
-``LocaleMiddleware`` tries to determine the user's language preference by
-following this algorithm:
-
- * First, it looks for a ``django_language`` key in the current user's
- session.
-
- * Failing that, it looks for a cookie.
-
- .. versionchanged:: 1.0
-
- In Django version 0.96 and before, the cookie's name is hard-coded to
- ``django_language``. In Django 1,0, The cookie name is set by the
- ``LANGUAGE_COOKIE_NAME`` setting. (The default name is
- ``django_language``.)
-
- * Failing that, it looks at the ``Accept-Language`` HTTP header. This
- header is sent by your browser and tells the server which language(s) you
- prefer, in order by priority. Django tries each language in the header
- until it finds one with available translations.
-
- * Failing that, it uses the global ``LANGUAGE_CODE`` setting.
-
-.. _locale-middleware-notes:
-
-Notes:
-
- * In each of these places, the language preference is expected to be in the
- standard :term:`language format<language code>`, as a string. For example,
- Brazilian Portuguese is ``pt-br``.
-
- * If a base language is available but the sublanguage specified is not,
- Django uses the base language. For example, if a user specifies ``de-at``
- (Austrian German) but Django only has ``de`` available, Django uses
- ``de``.
-
- * Only languages listed in the :setting:`LANGUAGES` setting can be selected.
- If you want to restrict the language selection to a subset of provided
- languages (because your application doesn't provide all those languages),
- set ``LANGUAGES`` to a list of languages. For example::
-
- LANGUAGES = (
- ('de', _('German')),
- ('en', _('English')),
- )
-
- This example restricts languages that are available for automatic
- selection to German and English (and any sublanguage, like de-ch or
- en-us).
-
- * If you define a custom ``LANGUAGES`` setting, as explained in the
- previous bullet, it's OK to mark the languages as translation strings
- -- but use a "dummy" ``ugettext()`` function, not the one in
- ``django.utils.translation``. You should *never* import
- ``django.utils.translation`` from within your settings file, because that
- module in itself depends on the settings, and that would cause a circular
- import.
-
- The solution is to use a "dummy" ``ugettext()`` function. Here's a sample
- settings file::
-
- ugettext = lambda s: s
-
- LANGUAGES = (
- ('de', ugettext('German')),
- ('en', ugettext('English')),
- )
-
- With this arrangement, ``django-admin.py makemessages`` will still find
- and mark these strings for translation, but the translation won't happen
- at runtime -- so you'll have to remember to wrap the languages in the
- *real* ``ugettext()`` in any code that uses ``LANGUAGES`` at runtime.
-
- * The ``LocaleMiddleware`` can only select languages for which there is a
- Django-provided base translation. If you want to provide translations
- for your application that aren't already in the set of translations
- in Django's source tree, you'll want to provide at least a basic
- one as described in the :ref:`Locale restrictions<locale-restrictions>`
- note.
-
-Once ``LocaleMiddleware`` determines the user's preference, it makes this
-preference available as ``request.LANGUAGE_CODE`` for each
-:class:`~django.http.HttpRequest`. Feel free to read this value in your view
-code. Here's a simple example::
-
- def hello_world(request, count):
- if request.LANGUAGE_CODE == 'de-at':
- return HttpResponse("You prefer to read Austrian German.")
- else:
- return HttpResponse("You prefer to read another language.")
-
-Note that, with static (middleware-less) translation, the language is in
-``settings.LANGUAGE_CODE``, while with dynamic (middleware) translation, it's
-in ``request.LANGUAGE_CODE``.
-
-.. _settings file: ../settings/
-.. _middleware documentation: ../middleware/
-.. _session: ../sessions/
-.. _request object: ../request_response/#httprequest-objects
-
-How Django discovers translations
----------------------------------
-
-As described in :ref:`using-translations-in-your-own-projects`,
-at runtime, Django looks for translations by following this algorithm:
-
- * First, it looks for a ``locale`` directory in the directory containing
- your settings file.
- * Second, it looks for a ``locale`` directory in the project directory.
- * Third, it looks for a ``locale`` directory in each of the installed apps.
- It does this in the reverse order of INSTALLED_APPS
- * Finally, it checks the Django-provided base translation in
- ``django/conf/locale``.
-
-In all cases the name of the directory containing the translation is expected to
-be named using :term:`locale name` notation. E.g. ``de``, ``pt_BR``, ``es_AR``,
-etc.
diff --git a/parts/django/docs/topics/i18n/index.txt b/parts/django/docs/topics/i18n/index.txt
deleted file mode 100644
index 9c25192..0000000
--- a/parts/django/docs/topics/i18n/index.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-=====================================
-Internationalization and localization
-=====================================
-
-Overview
-========
-
-Django has full support for internationalization of text in code and
-templates, and format localization of dates and numbers. Here's how it works.
-
-Essentially, Django does two things:
-
- * It allows developers and template authors to specify which parts of
- their apps should be translatable.
- * It uses these hooks to translate Web apps for particular users according
- to their language preferences.
-
-The complete process can be seen as divided in three stages. It is also possible
-to identify an identical number of roles with very well defined responsibilities
-associated with each of these tasks (although it's perfectly normal if you
-find yourself performing more than one of these roles):
-
- * For application authors wishing to make sure their Django apps can be
- used in different locales: :doc:`/topics/i18n/internationalization`.
- * For translators wanting to translate Django apps: :doc:`/topics/i18n/localization`.
- * For system administrators/final users setting up internationalized apps or
- developers integrating third party apps: :doc:`/topics/i18n/deployment`.
-
-.. toctree::
- :hidden:
- :maxdepth: 1
-
- internationalization
- localization
- deployment
-
-.. _ seealso::
-
-For more general information about the topic, see the `GNU gettext documentation`_
-and the `Wikipedia article`_.
-
-.. _GNU gettext documentation: http://www.gnu.org/software/gettext/manual/gettext.html#Concepts
-.. _Wikipedia article: http://en.wikipedia.org/wiki/Internationalization_and_localization
-
-Glossary
-========
-
-First lets define some terms that will help us to handle a common language:
-
-.. glossary::
-
- locale name
- A locale name, either a language specification of the form ``ll`` or a
- combined language and country specification of the form ``ll_CC``.
- Examples: ``it``, ``de_AT``, ``es``, ``pt_BR``. Note the underscore in
- some of them and the case of the part located to its right.
-
- language code
- Represents the name of a language. Browsers send the names of the
- languages they accept in the ``Accept-Language`` HTTP header using this
- format. Examples: ``it``, ``de-at``, ``es``, ``pt-br``. Note the ``-``
- separator.
-
- message file
- A message file is a plain-text file, representing a single language,
- that contains all available :term:`translation strings
- <translation string>` and how they should be represented in the given
- language. Message files have a ``.po`` file extension.
-
- translation string
- A literal that can be translated.
-
-.. _specialties-of-django-i18n:
-
-Specialties of Django translation
-=================================
-
-Django's translation machinery uses the standard ``gettext`` module that comes
-with Python. If you know ``gettext``, you might note these specialties in the
-way Django does translation:
-
- * The string domain is ``django`` or ``djangojs``. This string domain is
- used to differentiate between different programs that store their data
- in a common message-file library (usually ``/usr/share/locale/``). The
- ``django`` domain is used for python and template translation strings
- and is loaded into the global translation catalogs. The ``djangojs``
- domain is only used for JavaScript translation catalogs to make sure
- that those are as small as possible.
- * Django doesn't use ``xgettext`` alone. It uses Python wrappers around
- ``xgettext`` and ``msgfmt``. This is mostly for convenience.
-
-.. _technical-messages:
-
-Django technical message IDs
-----------------------------
-
-.. versionchanged:: 1.2
- Starting with Django 1.2, technical message IDs are being replaced by :ref:`format-localization`
-
-Django uses technical message IDs to translate date formats and time formats.
-Technical message IDs are :term:`translation strings <translation string>` and
-can be easily recognized; they're all upper case. You don't translate the
-message ID as with other translation strings, you provide the correct local
-variant on the provided English value. The format is identical to the format
-strings used by the ``now`` template tag.
-
-For example, with ``DATETIME_FORMAT`` (or ``DATE_FORMAT`` or ``TIME_FORMAT``),
-this would be the format string that you want to use in your language. A Django
-contributor localizing it to Spanish probably would provide a ``"j N Y P"``
-"translation" for it in the relevant ``django.po`` file::
-
- msgid "DATETIME_FORMAT"
- msgstr "j N Y P"
diff --git a/parts/django/docs/topics/i18n/internationalization.txt b/parts/django/docs/topics/i18n/internationalization.txt
deleted file mode 100644
index b6847ea..0000000
--- a/parts/django/docs/topics/i18n/internationalization.txt
+++ /dev/null
@@ -1,624 +0,0 @@
-====================
-Internationalization
-====================
-
-Overview
-========
-
-The goal of internationalization is to allow a single Web application to offer
-its content and functionality in multiple languages and locales.
-
-For text translations, you, the Django developer, can accomplish this goal by
-adding a minimal amount of hooks to your Python and templates. These hooks
-are called **translation strings**. They tell Django: "This text should be
-translated into the end user's language, if a translation for this text is
-available in that language." It's your responsibility to mark translatable
-strings; the system can only translate strings it knows about.
-
-Django takes care of using these hooks to translate Web apps, on the fly,
-according to users' language preferences.
-
-Specifying translation strings: In Python code
-==============================================
-
-Standard translation
---------------------
-
-Specify a translation string by using the function ``ugettext()``. It's
-convention to import this as a shorter alias, ``_``, to save typing.
-
-.. note::
- Python's standard library ``gettext`` module installs ``_()`` into the
- global namespace, as an alias for ``gettext()``. In Django, we have chosen
- not to follow this practice, for a couple of reasons:
-
- 1. For international character set (Unicode) support, ``ugettext()`` is
- more useful than ``gettext()``. Sometimes, you should be using
- ``ugettext_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.
-
- 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.
-
-.. highlightlang:: python
-
-In this example, the text ``"Welcome to my site."`` is marked as a translation
-string::
-
- from django.utils.translation import ugettext as _
-
- def my_view(request):
- output = _("Welcome to my site.")
- return HttpResponse(output)
-
-Obviously, you could code this without using the alias. This example is
-identical to the previous one::
-
- from django.utils.translation import ugettext
-
- def my_view(request):
- output = ugettext("Welcome to my site.")
- return HttpResponse(output)
-
-Translation works on computed values. This example is identical to the previous
-two::
-
- def my_view(request):
- words = ['Welcome', 'to', 'my', 'site.']
- output = _(' '.join(words))
- return HttpResponse(output)
-
-Translation works on variables. Again, here's an identical example::
-
- def my_view(request):
- sentence = 'Welcome to my site.'
- output = _(sentence)
- return HttpResponse(output)
-
-(The caveat with using variables or computed values, as in the previous two
-examples, is that Django's translation-string-detecting utility,
-``django-admin.py makemessages``, won't be able to find these strings. More on
-``makemessages`` later.)
-
-The strings you pass to ``_()`` or ``ugettext()`` can take placeholders,
-specified with Python's standard named-string interpolation syntax. Example::
-
- def my_view(request, m, d):
- output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d}
- return HttpResponse(output)
-
-This technique lets language-specific translations reorder the placeholder
-text. For example, an English translation may be ``"Today is November 26."``,
-while a Spanish translation may be ``"Hoy es 26 de Noviembre."`` -- with the
-the month and the day placeholders swapped.
-
-For this reason, you should use named-string interpolation (e.g., ``%(day)s``)
-instead of positional interpolation (e.g., ``%s`` or ``%d``) whenever you
-have more than a single parameter. If you used positional interpolation,
-translations wouldn't be able to reorder placeholder text.
-
-Marking strings as no-op
-------------------------
-
-Use the function ``django.utils.translation.ugettext_noop()`` to mark a string
-as a translation string without translating it. The string is later translated
-from a variable.
-
-Use this if you have constant strings that should be stored in the source
-language because they are exchanged over systems or users -- such as strings in
-a database -- but should be translated at the last possible point in time, such
-as when the string is presented to the user.
-
-Pluralization
--------------
-
-Use the function ``django.utils.translation.ungettext()`` to specify pluralized
-messages.
-
-``ungettext`` 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
-<http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms>`_ is
-greater than the two forms used in English ('object' for the singular and
-'objects' for all the cases where ``count`` is different from zero, irrespective
-of its value.)
-
-For example::
-
- from django.utils.translation import ungettext
- def hello_world(request, count):
- page = ungettext('there is %(count)d object', 'there are %(count)d objects', count) % {
- 'count': count,
- }
- return HttpResponse(page)
-
-In this example the number of objects is passed to the translation languages as
-the ``count`` variable.
-
-Lets see a slightly more complex usage example::
-
- from django.utils.translation import ungettext
-
- count = Report.objects.count()
- if count == 1:
- name = Report._meta.verbose_name
- else:
- name = Report._meta.verbose_name_plural
-
- text = ungettext(
- 'There is %(count)d %(name)s available.',
- 'There are %(count)d %(name)s available.',
- count
- ) % {
- 'count': count,
- 'name': name
- }
-
-Here we reuse localizable, hopefully already translated literals (contained in
-the ``verbose_name`` and ``verbose_name_plural`` model ``Meta`` options) for
-other parts of the sentence so all of it is consistently based on the
-cardinality of the elements at play.
-
-.. _pluralization-var-notes:
-
-.. note::
-
- When using this technique, make sure you use a single name for every
- extrapolated variable included in the literal. In the example above note how
- we used the ``name`` Python variable in both translation strings. This
- example would fail::
-
- from django.utils.translation import ungettext
- from myapp.models import Report
-
- count = Report.objects.count()
- d = {
- 'count': count,
- 'name': Report._meta.verbose_name,
- 'plural_name': Report._meta.verbose_name_plural
- }
- text = ungettext(
- 'There is %(count)d %(name)s available.',
- 'There are %(count)d %(plural_name)s available.',
- count
- ) % d
-
- You would get a ``a format specification for argument 'name', as in
- 'msgstr[0]', doesn't exist in 'msgid'`` error when running
- ``django-admin.py compilemessages``.
-
-.. _lazy-translations:
-
-Lazy translation
-----------------
-
-Use the function ``django.utils.translation.ugettext_lazy()`` to translate
-strings lazily -- when the value is accessed rather than when the
-``ugettext_lazy()`` function is called.
-
-For example, to translate a model's ``help_text``, do the following::
-
- from django.utils.translation import ugettext_lazy
-
- class MyThing(models.Model):
- name = models.CharField(help_text=ugettext_lazy('This is the help text'))
-
-In this example, ``ugettext_lazy()`` stores a lazy reference to the string --
-not the actual translation. The translation itself will be done when the string
-is used in a string context, such as template rendering on the Django admin
-site.
-
-The result of a ``ugettext_lazy()`` call can be used wherever you would use a
-unicode string (an object with type ``unicode``) in Python. If you try to use
-it where a bytestring (a ``str`` object) is expected, things will not work as
-expected, since a ``ugettext_lazy()`` object doesn't know how to convert
-itself to a bytestring. You can't use a unicode string inside a bytestring,
-either, so this is consistent with normal Python behavior. For example::
-
- # This is fine: putting a unicode proxy into a unicode string.
- u"Hello %s" % ugettext_lazy("people")
-
- # This will not work, since you cannot insert a unicode object
- # into a bytestring (nor can you insert our unicode proxy there)
- "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 verbose name ``ugettext_lazy``, you can just alias it as
-``_`` (underscore), like so::
-
- from django.utils.translation import ugettext_lazy as _
-
- class MyThing(models.Model):
- name = models.CharField(help_text=_('This is the help text'))
-
-Always use lazy translations in :doc:`Django models </topics/db/models>`.
-Field names and table names should be marked for translation (otherwise, they
-won't be translated in the admin interface). This means writing explicit
-``verbose_name`` and ``verbose_name_plural`` options in the ``Meta`` class,
-though, rather than relying on Django's default determination of
-``verbose_name`` and ``verbose_name_plural`` by looking at the model's class
-name::
-
- from django.utils.translation import ugettext_lazy as _
-
- class MyThing(models.Model):
- name = models.CharField(_('name'), help_text=_('This is the help text'))
- class Meta:
- verbose_name = _('my thing')
- verbose_name_plural = _('mythings')
-
-Working with lazy translation objects
--------------------------------------
-
-.. highlightlang:: python
-
-Using ``ugettext_lazy()`` and ``ungettext_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
-(so that the correct locale is in effect). This necessitates the use of a
-couple of helper functions.
-
-Joining strings: string_concat()
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Standard Python string joins (``''.join([...])``) will not work on lists
-containing lazy translation objects. Instead, you can use
-``django.utils.translation.string_concat()``, which creates a lazy object that
-concatenates its contents *and* converts them to strings only when the result
-is included in a string. For example::
-
- from django.utils.translation import string_concat
- ...
- name = ugettext_lazy(u'John Lennon')
- instrument = ugettext_lazy(u'guitar')
- result = string_concat(name, ': ', instrument)
-
-In this case, the lazy translations in ``result`` will only be converted to
-strings when ``result`` itself is used in a string (usually at template
-rendering time).
-
-The allow_lazy() decorator
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Django offers many utility functions (particularly in ``django.utils``) that
-take a string as their first argument and do something to that string. These
-functions are used by template filters as well as directly in other code.
-
-If you write your own similar functions and deal with translations, you'll
-face the problem of what to do when the first argument is a lazy translation
-object. You don't want to convert it to a string immediately, because you might
-be using this function outside of a view (and hence the current thread's locale
-setting will not be correct).
-
-For cases like this, use the ``django.utils.functional.allow_lazy()``
-decorator. It modifies the function so that *if* it's called with a lazy
-translation as the first argument, the function evaluation is delayed until it
-needs to be converted to a string.
-
-For example::
-
- from django.utils.functional import allow_lazy
-
- def fancy_utility_function(s, ...):
- # Do some conversion on string 's'
- ...
- fancy_utility_function = allow_lazy(fancy_utility_function, unicode)
-
-The ``allow_lazy()`` decorator takes, in addition to the function to decorate,
-a number of extra arguments (``*args``) specifying the type(s) that the
-original function can return. Usually, it's enough to include ``unicode`` here
-and ensure that your function returns only Unicode strings.
-
-Using this decorator means you can write your function and assume that the
-input is a proper string, then add support for lazy translation objects at the
-end.
-
-.. _specifying-translation-strings-in-template-code:
-
-Specifying translation strings: In template code
-================================================
-
-.. highlightlang:: html+django
-
-Translations in :doc:`Django templates </topics/templates>` uses two template
-tags and a slightly different syntax than in Python code. To give your template
-access to these tags, put ``{% load i18n %}`` toward the top of your template.
-
-``trans`` template tag
-----------------------
-
-The ``{% trans %}`` template tag translates either a constant string
-(enclosed in single or double quotes) or variable content::
-
- <title>{% trans "This is the title." %}</title>
- <title>{% trans myvar %}</title>
-
-If the ``noop`` option is present, variable lookup still takes place but the
-translation is skipped. This is useful when "stubbing out" content that will
-require translation in the future::
-
- <title>{% trans "myvar" noop %}</title>
-
-Internally, inline translations use an ``ugettext`` 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
-string in the message catalogs.
-
-It's not possible to mix a template variable inside a string within ``{% trans
-%}``. If your translations require strings with variables (placeholders), use
-``{% blocktrans %}`` instead.
-
-``blocktrans`` template tag
----------------------------
-
-Contrarily to the ``trans`` tag, the ``blocktrans`` tag allows you to mark
-complex sentences consisting of literals and variable content for translation
-by making use of placeholders::
-
- {% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}
-
-To translate a template expression -- say, accessing object attributes or
-using template filters -- you need to bind the expression to a local variable
-for use within the translation block. Examples::
-
- {% blocktrans with article.price as amount %}
- That will cost $ {{ amount }}.
- {% endblocktrans %}
-
- {% blocktrans with value|filter as myvar %}
- This will have {{ myvar }} inside.
- {% endblocktrans %}
-
-If you need to bind more than one expression inside a ``blocktrans`` tag,
-separate the pieces with ``and``::
-
- {% blocktrans with book|title as book_t and author|title as author_t %}
- This is {{ book_t }} by {{ author_t }}
- {% endblocktrans %}
-
-This tag also provides for pluralization. To use it:
-
- * Designate and bind a counter value with the name ``count``. This value will
- be the one used to select the right plural form.
-
- * Specify both the singular and plural forms separating them with the
- ``{% plural %}`` tag within the ``{% blocktrans %}`` and
- ``{% endblocktrans %}`` tags.
-
-An example::
-
- {% blocktrans count list|length as counter %}
- There is only one {{ name }} object.
- {% plural %}
- There are {{ counter }} {{ name }} objects.
- {% endblocktrans %}
-
-A more complex example::
-
- {% blocktrans with article.price as amount count i.length as years %}
- That will cost $ {{ amount }} per year.
- {% plural %}
- That will cost $ {{ amount }} per {{ years }} years.
- {% endblocktrans %}
-
-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>`
-apply.
-
-.. _template-translation-vars:
-
-Other tags
-----------
-
-Each ``RequestContext`` has access to three translation-specific variables:
-
- * ``LANGUAGES`` is a list of tuples in which the first element is the
- :term:`language code` and the second is the language name (translated into
- the currently active locale).
-
- * ``LANGUAGE_CODE`` is the current user's preferred language, as a string.
- Example: ``en-us``. (See :ref:`how-django-discovers-language-preference`.)
-
- * ``LANGUAGE_BIDI`` is the current locale's direction. If True, it's a
- right-to-left language, e.g.: Hebrew, Arabic. If False it's a
- left-to-right language, e.g.: English, French, German etc.
-
-If you don't use the ``RequestContext`` extension, you can get those values with
-three tags::
-
- {% get_current_language as LANGUAGE_CODE %}
- {% get_available_languages as LANGUAGES %}
- {% get_current_language_bidi as LANGUAGE_BIDI %}
-
-These tags also require a ``{% load i18n %}``.
-
-Translation hooks are also available within any template block tag that accepts
-constant strings. In those cases, just use ``_()`` syntax to specify a
-translation string::
-
- {% some_special_tag _("Page not found") value|yesno:_("yes,no") %}
-
-In this case, both the tag and the filter will see the already-translated
-string, so they don't need to be aware of translations.
-
-.. note::
- In this example, the translation infrastructure will be passed the string
- ``"yes,no"``, not the individual strings ``"yes"`` and ``"no"``. The
- translated string will need to contain the comma so that the filter
- parsing code knows how to split up the arguments. For example, a German
- translator might translate the string ``"yes,no"`` as ``"ja,nein"``
- (keeping the comma intact).
-
-.. _Django templates: ../templates_python/
-
-Specifying translation strings: In JavaScript code
-==================================================
-
-Adding translations to JavaScript poses some problems:
-
- * JavaScript code doesn't have access to a ``gettext`` implementation.
-
- * JavaScript code doesn't have access to .po or .mo files; they need to be
- delivered by the server.
-
- * The translation catalogs for JavaScript should be kept as small as
- possible.
-
-Django provides an integrated solution for these problems: It passes the
-translations into JavaScript, so you can call ``gettext``, etc., from within
-JavaScript.
-
-The ``javascript_catalog`` view
--------------------------------
-
-.. module:: django.views.i18n
-
-.. function:: javascript_catalog(request, domain='djangojs', packages=None)
-
-The main solution to these problems is the :meth:`django.views.i18n.javascript_catalog`
-view, which sends out a JavaScript code library with functions that mimic the
-``gettext`` interface, plus an array of translation strings. Those translation
-strings are taken from the application, project or Django core, according to what
-you specify in either the info_dict or the URL.
-
-You hook it up like this::
-
- js_info_dict = {
- 'packages': ('your.app.package',),
- }
-
- urlpatterns = patterns('',
- (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
- )
-
-Each string in ``packages`` should be in Python dotted-package syntax (the
-same format as the strings in ``INSTALLED_APPS``) and should refer to a package
-that contains a ``locale`` directory. If you specify multiple packages, all
-those catalogs are merged into one catalog. This is useful if you have
-JavaScript that uses strings from different applications.
-
-By default, the view uses the ``djangojs`` gettext domain. This can be
-changed by altering the ``domain`` argument.
-
-You can make the view dynamic by putting the packages into the URL pattern::
-
- urlpatterns = patterns('',
- (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'),
- )
-
-With this, you specify the packages as a list of package names delimited by '+'
-signs in the URL. This is especially useful if your pages use code from
-different apps and this changes often and you don't want to pull in one big
-catalog file. As a security measure, these values can only be either
-``django.conf`` or any package from the ``INSTALLED_APPS`` setting.
-
-Using the JavaScript translation catalog
-----------------------------------------
-
-To use the catalog, just pull in the dynamically generated script like this::
-
- <script type="text/javascript" src="{% url django.views.i18n.javascript_catalog %}"></script>
-
-This uses reverse URL lookup to find the URL of the JavaScript catalog view.
-When the catalog is loaded, your JavaScript code can use the standard
-``gettext`` interface to access it::
-
- document.write(gettext('this is to be translated'));
-
-There is also an ``ngettext`` interface::
-
- var object_cnt = 1 // or 0, or 2, or 3, ...
- s = ngettext('literal for the singular case',
- 'literal for the plural case', object_cnt);
-
-and even a string interpolation function::
-
- function interpolate(fmt, obj, named);
-
-The interpolation syntax is borrowed from Python, so the ``interpolate``
-function supports both positional and named interpolation:
-
- * Positional interpolation: ``obj`` contains a JavaScript Array object
- whose elements values are then sequentially interpolated in their
- corresponding ``fmt`` placeholders in the same order they appear.
- For example::
-
- fmts = ngettext('There is %s object. Remaining: %s',
- 'There are %s objects. Remaining: %s', 11);
- s = interpolate(fmts, [11, 20]);
- // s is 'There are 11 objects. Remaining: 20'
-
- * Named interpolation: This mode is selected by passing the optional
- boolean ``named`` parameter as true. ``obj`` contains a JavaScript
- object or associative array. For example::
-
- d = {
- count: 10,
- total: 50
- };
-
- fmts = ngettext('Total: %(total)s, there is %(count)s object',
- 'there are %(count)s of a total of %(total)s objects', d.count);
- s = interpolate(fmts, d, true);
-
-You shouldn't go over the top with string interpolation, though: this is still
-JavaScript, so the code has to make repeated regular-expression substitutions.
-This isn't as fast as string interpolation in Python, so keep it to those
-cases where you really need it (for example, in conjunction with ``ngettext``
-to produce proper pluralizations).
-
-The ``set_language`` redirect view
-==================================
-
-.. function:: set_language(request)
-
-As a convenience, Django comes with a view, :meth:`django.views.i18n.set_language`,
-that sets a user's language preference and redirects back to the previous page.
-
-Activate this view by adding the following line to your URLconf::
-
- (r'^i18n/', include('django.conf.urls.i18n')),
-
-(Note that this example makes the view available at ``/i18n/setlang/``.)
-
-The view expects to be called via the ``POST`` method, with a ``language``
-parameter set in request. If session support is enabled, the view
-saves the language choice in the user's session. Otherwise, it saves the
-language choice in a cookie that is by default named ``django_language``.
-(The name can be changed through the ``LANGUAGE_COOKIE_NAME`` setting.)
-
-After setting the language choice, Django redirects the user, following this
-algorithm:
-
- * Django looks for a ``next`` parameter in the ``POST`` data.
- * If that doesn't exist, or is empty, Django tries the URL in the
- ``Referrer`` header.
- * If that's empty -- say, if a user's browser suppresses that header --
- then the user will be redirected to ``/`` (the site root) as a fallback.
-
-Here's example HTML template code:
-
-.. code-block:: html+django
-
- <form action="/i18n/setlang/" method="post">
- {% csrf_token %}
- <input name="next" type="hidden" value="/next/page/" />
- <select name="language">
- {% for lang in LANGUAGES %}
- <option value="{{ lang.0 }}">{{ lang.1 }}</option>
- {% endfor %}
- </select>
- <input type="submit" value="Go" />
- </form>
diff --git a/parts/django/docs/topics/i18n/localization.txt b/parts/django/docs/topics/i18n/localization.txt
deleted file mode 100644
index 38d74e6..0000000
--- a/parts/django/docs/topics/i18n/localization.txt
+++ /dev/null
@@ -1,317 +0,0 @@
-============
-Localization
-============
-
-This document covers two localization-related topics: `Creating language
-files`_ and `locale aware date, time and numbers input/output in forms`_
-
-.. _`Creating language files`: how-to-create-language-files_
-.. _`locale aware date, time and numbers input/output in forms`: format-localization_
-
-.. seealso::
-
- The :doc:`/howto/i18n` document included with the Django HOW-TO documents collection.
-
-.. _how-to-create-language-files:
-
-How to create language files
-============================
-
-Once the string literals of an application have been tagged for later
-translation, the translation themselves need to be written (or obtained). Here's
-how that works.
-
-.. _locale-restrictions:
-
-.. admonition:: Locale restrictions
-
- Django does not support localizing your application into a locale for which
- Django itself has not been translated. In this case, it will ignore your
- translation files. If you were to try this and Django supported it, you
- would inevitably see a mixture of translated strings (from your application)
- and English strings (from Django itself). If you want to support a locale
- for your application that is not already part of Django, you'll need to make
- at least a minimal translation of the Django core.
-
- A good starting point is to copy the Django English ``.po`` file and to
- translate at least some :term:`translation strings <translation string>`.
-
-Message files
--------------
-
-The first step is to create a :term:`message file` for a new language. A message
-file is a plain-text file, representing a single language, that contains all
-available translation strings and how they should be represented in the given
-language. Message files have a ``.po`` file extension.
-
-Django comes with a tool, ``django-admin.py makemessages``, that automates the
-creation and upkeep of these files.
-
-.. admonition:: A note to Django veterans
-
- The old tool ``bin/make-messages.py`` has been moved to the command
- ``django-admin.py makemessages`` to provide consistency throughout Django.
-
-.. admonition:: Gettext utilities
-
- The ``makemessages`` command (and ``compilemessages`` discussed later) use
- commands from the GNU gettext toolset: ``xgettext``, ``msgfmt``,
- ``msgmerge`` and ``msguniq``.
-
- .. versionchanged:: 1.2
-
- The minimum version of the ``gettext`` utilities supported is 0.15.
-
-To create or update a message file, run this command::
-
- django-admin.py makemessages -l de
-
-...where ``de`` is the language code for the message file you want to create.
-The language code, in this case, is in :term:`locale format<locale name>`. For
-example, it's ``pt_BR`` for Brazilian Portuguese and ``de_AT`` for Austrian
-German.
-
-The script should be run from one of two places:
-
- * The root directory of your Django project.
- * The root directory of your Django app.
-
-The script runs over your project source tree or your application source tree
-and pulls out all strings marked for translation. It creates (or updates) a
-message file in the directory ``locale/LANG/LC_MESSAGES``. In the ``de``
-example, the file will be ``locale/de/LC_MESSAGES/django.po``.
-
-By default ``django-admin.py makemessages`` examines every file that has the
-``.html`` file extension. In case you want to override that default, use the
-``--extension`` or ``-e`` option to specify the file extensions to examine::
-
- django-admin.py makemessages -l de -e txt
-
-Separate multiple extensions with commas and/or use ``-e`` or ``--extension``
-multiple times::
-
- django-admin.py makemessages -l de -e html,txt -e xml
-
-When :ref:`creating message files from JavaScript source code
-<creating-message-files-from-js-code>` you need to use the special 'djangojs'
-domain, **not** ``-e js``.
-
-.. admonition:: No gettext?
-
- If you don't have the ``gettext`` utilities installed, ``django-admin.py
- makemessages`` will create empty files. If that's the case, either install
- the ``gettext`` utilities or just copy the English message file
- (``locale/en/LC_MESSAGES/django.po``) if available and use it as a starting
- point; it's just an empty translation file.
-
-.. admonition:: Working on Windows?
-
- If you're using Windows and need to install the GNU gettext utilities so
- ``django-admin makemessages`` works see :ref:`gettext_on_windows` for more
- information.
-
-The format of ``.po`` files is straightforward. Each ``.po`` file contains a
-small bit of metadata, such as the translation maintainer's contact
-information, but the bulk of the file is a list of **messages** -- simple
-mappings between translation strings and the actual translated text for the
-particular language.
-
-For example, if your Django app contained a translation string for the text
-``"Welcome to my site."``, like so::
-
- _("Welcome to my site.")
-
-...then ``django-admin.py makemessages`` will have created a ``.po`` file
-containing the following snippet -- a message::
-
- #: path/to/python/module.py:23
- msgid "Welcome to my site."
- msgstr ""
-
-A quick explanation:
-
- * ``msgid`` is the translation string, which appears in the source. Don't
- change it.
- * ``msgstr`` is where you put the language-specific translation. It starts
- out empty, so it's your responsibility to change it. Make sure you keep
- the quotes around your translation.
- * As a convenience, each message includes, in the form of a comment line
- prefixed with ``#`` and located above the ``msgid`` line, the filename and
- line number from which the translation string was gleaned.
-
-Long messages are a special case. There, the first string directly after the
-``msgstr`` (or ``msgid``) is an empty string. Then the content itself will be
-written over the next few lines as one string per line. Those strings are
-directly concatenated. Don't forget trailing spaces within the strings;
-otherwise, they'll be tacked together without whitespace!
-
-.. admonition:: Mind your charset
-
- When creating a PO file with your favorite text editor, first edit
- the charset line (search for ``"CHARSET"``) and set it to the charset
- you'll be using to edit the content. Due to the way the ``gettext`` tools
- work internally and because we want to allow non-ASCII source strings in
- Django's core and your applications, you **must** use UTF-8 as the encoding
- for your PO file. This means that everybody will be using the same
- encoding, which is important when Django processes the PO files.
-
-To reexamine all source code and templates for new translation strings and
-update all message files for **all** languages, run this::
-
- django-admin.py makemessages -a
-
-Compiling message files
------------------------
-
-After you create your message file -- and each time you make changes to it --
-you'll need to compile it into a more efficient form, for use by ``gettext``.
-Do this with the ``django-admin.py compilemessages`` utility.
-
-This tool runs over all available ``.po`` files and creates ``.mo`` files, which
-are binary files optimized for use by ``gettext``. In the same directory from
-which you ran ``django-admin.py makemessages``, run ``django-admin.py
-compilemessages`` like this::
-
- django-admin.py compilemessages
-
-That's it. Your translations are ready for use.
-
-.. admonition:: A note to Django veterans
-
- The old tool ``bin/compile-messages.py`` has been moved to the command
- ``django-admin.py compilemessages`` to provide consistency throughout
- Django.
-
-.. admonition:: Working on Windows?
-
- If you're using Windows and need to install the GNU gettext utilities so
- ``django-admin compilemessages`` works see :ref:`gettext_on_windows` for more
- information.
-
-.. admonition:: .po files: Encoding and BOM usage.
-
- Django only supports ``.po`` files encoded in UTF-8 and without any BOM
- (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.
-
-.. _creating-message-files-from-js-code:
-
-Creating message files from JavaScript source code
-==================================================
-
-You create and update the message files the same way as the other Django message
-files -- with the ``django-admin.py makemessages`` tool. The only difference is
-you need to provide a ``-d djangojs`` parameter, like this::
-
- django-admin.py makemessages -d djangojs -l de
-
-This would create or update the message file for JavaScript for German.
-After updating message files, just run ``django-admin.py compilemessages``
-the same way as you do with normal Django message files.
-
-.. _gettext_on_windows:
-
-``gettext`` on Windows
-======================
-
-This is only needed for people who either want to extract message IDs or compile
-message files (``.po``). Translation work itself just involves editing existing
-files of this type, but if you want to create your own message files, or want to
-test or compile a changed message file, you will need the ``gettext`` utilities:
-
- * Download the following zip files from the GNOME servers
- http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/ or from one
- of its mirrors_
-
- * ``gettext-runtime-X.zip``
- * ``gettext-tools-X.zip``
-
- ``X`` is the version number, we are requiring ``0.15`` or higher.
-
- * Extract the contents of the ``bin\`` directories in both files to the
- same folder on your system (i.e. ``C:\Program Files\gettext-utils``)
-
- * Update the system PATH:
-
- * ``Control Panel > System > Advanced > Environment Variables``.
- * In the ``System variables`` list, click ``Path``, click ``Edit``.
- * Add ``;C:\Program Files\gettext-utils\bin`` at the end of the
- ``Variable value`` field.
-
-.. _mirrors: http://ftp.gnome.org/pub/GNOME/MIRRORS
-
-You may also use ``gettext`` binaries you have obtained elsewhere, so long as
-the ``xgettext --version`` command works properly. Do not attempt to use Django
-translation utilities with a ``gettext`` package if the command ``xgettext
---version`` entered at a Windows command prompt causes a popup window saying
-"xgettext.exe has generated errors and will be closed by Windows".
-
-.. _format-localization:
-
-Format localization
-===================
-
-.. versionadded:: 1.2
-
-Django's formatting system is disabled by default. To enable it, it's
-necessary to set :setting:`USE_L10N = True <USE_L10N>` in your settings file.
-
-.. note::
- The default :file:`settings.py` file created by
- :djadmin:`django-admin.py startproject <startproject>` includes
- :setting:`USE_L10N = True <USE_L10N>` for convenience.
-
-When using Django's formatting system, dates and numbers on templates will be
-displayed using the format specified for the current locale. Two users
-accessing the same content, but in different language, will see date and
-number fields formatted in different ways, depending on the format for their
-current locale.
-
-Django will also use localized formats when parsing data in forms. That means
-Django uses different formats for different locales when guessing the format
-used by the user when inputting data on forms.
-
-.. note::
- Django uses different formats for displaying data to those it uses for
- parsing data. Most notably, the formats for parsing dates can't use the
- ``%a`` (abbreviated weekday name), ``%A`` (full weekday name),
- ``%b`` (abbreviated month name), ``%B`` (full month name),
- or ``%p`` (AM/PM).
-
-To enable a form field to localize input and output data simply use its
-``localize`` argument::
-
- class CashRegisterForm(forms.Form):
- product = forms.CharField()
- revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)
-
-Creating custom format files
-----------------------------
-
-Django provides format definitions for many locales, but sometimes you might
-want to create your own, because a format files doesn't exist for your locale,
-or because you want to overwrite some of the values.
-
-To use custom formats, first thing to do, is to specify the path where you'll
-place format files. To do that, just set your :setting:`FORMAT_MODULE_PATH`
-setting to the path (in the format ``'foo.bar.baz``) where format files
-will exists.
-
-Files are not placed directly in this directory, but in a directory named as
-the locale, and must be named ``formats.py``.
-
-To customize the English formats, a structure like this would be needed::
-
- mysite/
- formats/
- __init__.py
- en/
- __init__.py
- formats.py
-
-where :file:`formats.py` contains custom format definitions. For example::
-
- THOUSAND_SEPARATOR = ' '
-
-to use a space as a thousand separator, instead of the default for English,
-a comma.
diff --git a/parts/django/docs/topics/index.txt b/parts/django/docs/topics/index.txt
deleted file mode 100644
index 4c6b7fc..0000000
--- a/parts/django/docs/topics/index.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Using Django
-============
-
-Introductions to all the key parts of Django you'll need to know:
-
-.. toctree::
- :maxdepth: 1
-
- install
- db/index
- http/index
- forms/index
- forms/modelforms
- templates
- generic-views
- files
- testing
- auth
- cache
- conditional-view-processing
- email
- i18n/index
- pagination
- serialization
- settings
- signals
-
diff --git a/parts/django/docs/topics/install.txt b/parts/django/docs/topics/install.txt
deleted file mode 100644
index 20c8074..0000000
--- a/parts/django/docs/topics/install.txt
+++ /dev/null
@@ -1,298 +0,0 @@
-=====================
-How to install Django
-=====================
-
-This document will get you up and running with Django.
-
-Install Python
-==============
-
-Being a Python Web framework, Django requires Python.
-
-It works with any Python version from 2.4 to 2.7 (due to backwards
-incompatibilities in Python 3.0, Django does not currently work with
-Python 3.0; see :doc:`the Django FAQ </faq/install>` for more
-information on supported Python versions and the 3.0 transition).
-
-Get Python at http://www.python.org. If you're running Linux or Mac OS X, you
-probably already have it installed.
-
-.. admonition:: Django on Jython
-
- If you use Jython_ (a Python implementation for the Java platform), you'll
- need to follow a few additional steps. See :doc:`/howto/jython` for details.
-
-.. _jython: http://jython.org/
-
-Install Apache and mod_wsgi
-=============================
-
-If you just want to experiment with Django, skip ahead to the next section;
-Django includes a lightweight Web server you can use for testing, so you won't
-need to set up Apache until you're ready to deploy Django in production.
-
-If you want to use Django on a production site, use Apache with `mod_wsgi`_.
-mod_wsgi is similar to mod_perl -- it embeds Python within Apache and loads
-Python code into memory when the server starts. Code stays in memory throughout
-the life of an Apache process, which leads to significant performance gains over
-other server arrangements. Make sure you have Apache installed, with the
-mod_wsgi module activated. Django will work with any version of Apache that
-supports mod_wsgi.
-
-See :doc:`How to use Django with mod_wsgi </howto/deployment/modwsgi>` for
-information on how to configure mod_wsgi once you have it installed.
-
-If you can't use mod_wsgi for some reason, fear not: Django supports many other
-deployment options. A great second choice is :doc:`mod_python
-</howto/deployment/modpython>`, the predecessor to mod_wsgi. Additionally, Django
-follows the WSGI_ spec, which allows it to run on a variety of server platforms.
-See the `server-arrangements wiki page`_ for specific installation instructions
-for each platform.
-
-.. _Apache: http://httpd.apache.org/
-.. _mod_wsgi: http://code.google.com/p/modwsgi/
-.. _WSGI: http://www.python.org/dev/peps/pep-0333/
-.. _server-arrangements wiki page: http://code.djangoproject.com/wiki/ServerArrangements
-
-.. _database-installation:
-
-Get your database running
-=========================
-
-If you plan to use Django's database API functionality, you'll need to make
-sure a database server is running. Django supports many different database
-servers and is officially supported with PostgreSQL_, MySQL_, Oracle_ and
-SQLite_ (although SQLite doesn't require a separate server to be running).
-
-In addition to the officially supported databases, there are backends provided
-by 3rd parties that allow you to use other databases with Django:
-
-* `Sybase SQL Anywhere`_
-* `IBM DB2`_
-* `Microsoft SQL Server 2005`_
-* Firebird_
-* ODBC_
-
-The Django versions and ORM features supported by these unofficial backends
-vary considerably. Queries regarding the specific capabilities of these
-unofficial backends, along with any support queries, should be directed to the
-support channels provided by each 3rd party project.
-
-In addition to a database backend, you'll need to make sure your Python
-database bindings are installed.
-
-* If you're using PostgreSQL, you'll need the psycopg_ package. Django supports
- both version 1 and 2. (When you configure Django's database layer, specify
- either ``postgresql`` [for version 1] or ``postgresql_psycopg2`` [for version 2].)
- You might want to refer to our :ref:`PostgreSQL notes <postgresql-notes>` for
- further technical details specific to this database.
-
- If you're on Windows, check out the unofficial `compiled Windows version`_.
-
-* If you're using MySQL, you'll need MySQLdb_, version 1.2.1p2 or higher. You
- will also want to read the database-specific :ref:`notes for the MySQL
- backend <mysql-notes>`.
-
-* If you're using SQLite and Python 2.4, you'll need pysqlite_. Use version
- 2.0.3 or higher. Python 2.5 ships with an SQLite wrapper in the standard
- library, so you don't need to install anything extra in that case. Please
- read the :ref:`SQLite backend notes <sqlite-notes>`.
-
-* If you're using Oracle, you'll need a copy of cx_Oracle_, but please
- read the database-specific :ref:`notes for the Oracle backend <oracle-notes>`
- for important information regarding supported versions of both Oracle and
- ``cx_Oracle``.
-
-* If you're using an unofficial 3rd party backend, please consult the
- documentation provided for any additional requirements.
-
-If you plan to use Django's ``manage.py syncdb`` command to
-automatically create database tables for your models, you'll need to
-ensure that Django has permission to create and alter tables in the
-database you're using; if you plan to manually create the tables, you
-can simply grant Django ``SELECT``, ``INSERT``, ``UPDATE`` and
-``DELETE`` permissions. On some databases, Django will need
-``ALTER TABLE`` privileges during ``syncdb`` but won't issue
-``ALTER TABLE`` statements on a table once ``syncdb`` has created it.
-
-If you're using Django's :doc:`testing framework</topics/testing>` to test database queries,
-Django will need permission to create a test database.
-
-.. _PostgreSQL: http://www.postgresql.org/
-.. _MySQL: http://www.mysql.com/
-.. _psycopg: http://initd.org/pub/software/psycopg/
-.. _compiled Windows version: http://stickpeople.com/projects/python/win-psycopg/
-.. _MySQLdb: http://sourceforge.net/projects/mysql-python
-.. _SQLite: http://www.sqlite.org/
-.. _pysqlite: http://trac.edgewall.org/wiki/PySqlite
-.. _cx_Oracle: http://cx-oracle.sourceforge.net/
-.. _Oracle: http://www.oracle.com/
-.. _Sybase SQL Anywhere: http://code.google.com/p/sqlany-django/
-.. _IBM DB2: http://code.google.com/p/ibm-db/
-.. _Microsoft SQL Server 2005: http://code.google.com/p/django-mssql/
-.. _Firebird: http://code.google.com/p/django-firebird/
-.. _ODBC: http://code.google.com/p/django-pyodbc/
-.. _removing-old-versions-of-django:
-
-Remove any old versions of Django
-=================================
-
-If you are upgrading your installation of Django from a previous version,
-you will need to uninstall the old Django version before installing the
-new version.
-
-If you installed Django using ``setup.py install``, uninstalling
-is as simple as deleting the ``django`` directory from your Python
-``site-packages``.
-
-If you installed Django from a Python egg, remove the Django ``.egg`` file,
-and remove the reference to the egg in the file named ``easy-install.pth``.
-This file should also be located in your ``site-packages`` directory.
-
-.. admonition:: Where are my ``site-packages`` stored?
-
- The location of the ``site-packages`` directory depends on the operating
- system, and the location in which Python was installed. To find out your
- system's ``site-packages`` location, execute the following:
-
- .. code-block:: bash
-
- python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
-
- (Note that this should be run from a shell prompt, not a Python interactive
- prompt.)
-
-.. _install-django-code:
-
-Install the Django code
-=======================
-
-Installation instructions are slightly different depending on whether you're
-installing a distribution-specific package, downloading the latest official
-release, or fetching the latest development version.
-
-It's easy, no matter which way you choose.
-
-Installing a distribution-specific package
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Check the :doc:`distribution specific notes </misc/distributions>` to see if your
-platform/distribution provides official Django packages/installers.
-Distribution-provided packages will typically allow for automatic installation
-of dependencies and easy upgrade paths.
-
-.. _installing-official-release:
-
-Installing an official release
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- 1. Download the latest release from our `download page`_.
-
- 2. Untar the downloaded file (e.g. ``tar xzvf Django-NNN.tar.gz``,
- where ``NNN`` is the version number of the latest release).
- If you're using Windows, you can download the command-line tool
- bsdtar_ to do this, or you can use a GUI-based tool such as 7-zip_.
-
- 3. Change into the directory created in step 2 (e.g. ``cd Django-NNN``).
-
- 4. If you're using Linux, Mac OS X or some other flavor of Unix, enter
- the command ``sudo python setup.py install`` at the shell prompt.
- If you're using Windows, start up a command shell with administrator
- privileges and run the command ``setup.py install``.
-
-These commands will install Django in your Python installation's
-``site-packages`` directory.
-
-.. _bsdtar: http://gnuwin32.sourceforge.net/packages/bsdtar.htm
-.. _7-zip: http://www.7-zip.org/
-
-.. _installing-development-version:
-
-Installing the development version
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. admonition:: Tracking Django development
-
- If you decide to use the latest development version of Django,
- you'll want to pay close attention to `the development timeline`_,
- and you'll want to keep an eye on `the list of
- backwards-incompatible changes`_. This will help you stay on top
- of any new features you might want to use, as well as any changes
- you'll need to make to your code when updating your copy of Django.
- (For stable releases, any necessary changes are documented in the
- release notes.)
-
-.. _the development timeline: http://code.djangoproject.com/timeline
-.. _the list of backwards-incompatible changes: http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges
-
-If you'd like to be able to update your Django code occasionally with the
-latest bug fixes and improvements, follow these instructions:
-
-1. Make sure that you have Subversion_ installed, and that you can run its
- commands from a shell. (Enter ``svn help`` at a shell prompt to test
- this.)
-
-2. Check out Django's main development branch (the 'trunk') like so:
-
- .. code-block:: bash
-
- svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
-
-3. Next, make sure that the Python interpreter can load Django's code. There
- are various ways of accomplishing this. One of the most convenient, on
- Linux, Mac OSX or other Unix-like systems, is to use a symbolic link:
-
- .. code-block:: bash
-
- ln -s WORKING-DIR/django-trunk/django SITE-PACKAGES-DIR/django
-
- (In the above line, change ``SITE-PACKAGES-DIR`` to match the location of
- your system's ``site-packages`` directory, as explained in the
- "Where are my ``site-packages`` stored?" section above. Change WORKING-DIR
- to match the full path to your new ``django-trunk`` directory.)
-
- Alternatively, you can define your ``PYTHONPATH`` environment variable
- so that it includes the ``django-trunk`` directory. This is perhaps the
- most convenient solution on Windows systems, which don't support symbolic
- links. (Environment variables can be defined on Windows systems `from the
- Control Panel`_.)
-
- .. admonition:: What about Apache and mod_python?
-
- If you take the approach of setting ``PYTHONPATH``, you'll need to
- remember to do the same thing in your Apache configuration once you
- deploy your production site. Do this by setting ``PythonPath`` in your
- Apache configuration file.
-
- More information about deployment is available, of course, in our
- :doc:`How to use Django with mod_python </howto/deployment/modpython>`
- documentation.
-
-4. On Unix-like systems, create a symbolic link to the file
- ``django-trunk/django/bin/django-admin.py`` in a directory on your system
- path, such as ``/usr/local/bin``. For example:
-
- .. code-block:: bash
-
- ln -s WORKING-DIR/django-trunk/django/bin/django-admin.py /usr/local/bin
-
- (In the above line, change WORKING-DIR to match the full path to your new
- ``django-trunk`` directory.)
-
- This simply lets you type ``django-admin.py`` from within any directory,
- rather than having to qualify the command with the full path to the file.
-
- On Windows systems, the same result can be achieved by copying the file
- ``django-trunk/django/bin/django-admin.py`` to somewhere on your system
- path, for example ``C:\Python24\Scripts``.
-
-You *don't* have to run ``python setup.py install``, because you've already
-carried out the equivalent actions in steps 3 and 4.
-
-When you want to update your copy of the Django source code, just run the
-command ``svn update`` from within the ``django-trunk`` directory. When you do
-this, Subversion will automatically download any changes.
-
-.. _`download page`: http://www.djangoproject.com/download/
-.. _Subversion: http://subversion.tigris.org/
-.. _from the Control Panel: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sysdm_advancd_environmnt_addchange_variable.mspx
diff --git a/parts/django/docs/topics/pagination.txt b/parts/django/docs/topics/pagination.txt
deleted file mode 100644
index ee8a433..0000000
--- a/parts/django/docs/topics/pagination.txt
+++ /dev/null
@@ -1,281 +0,0 @@
-==========
-Pagination
-==========
-
-.. module:: django.core.paginator
- :synopsis: Classes to help you easily manage paginated data.
-
-.. versionchanged:: 1.0
- Pagination facilities have been almost fully reworked.
-
-Django provides a few classes that help you manage paginated data -- that is,
-data that's split across several pages, with "Previous/Next" links. These
-classes live in :file:`django/core/paginator.py`.
-
-Example
-=======
-
-Give :class:`Paginator` a list of objects, plus the number of items you'd like to
-have on each page, and it gives you methods for accessing the items for each
-page::
-
- >>> from django.core.paginator import Paginator
- >>> objects = ['john', 'paul', 'george', 'ringo']
- >>> p = Paginator(objects, 2)
-
- >>> p.count
- 4
- >>> p.num_pages
- 2
- >>> p.page_range
- [1, 2]
-
- >>> page1 = p.page(1)
- >>> page1
- <Page 1 of 2>
- >>> page1.object_list
- ['john', 'paul']
-
- >>> page2 = p.page(2)
- >>> page2.object_list
- ['george', 'ringo']
- >>> page2.has_next()
- False
- >>> page2.has_previous()
- True
- >>> page2.has_other_pages()
- True
- >>> page2.next_page_number()
- 3
- >>> page2.previous_page_number()
- 1
- >>> page2.start_index() # The 1-based index of the first item on this page
- 3
- >>> page2.end_index() # The 1-based index of the last item on this page
- 4
-
- >>> p.page(0)
- Traceback (most recent call last):
- ...
- EmptyPage: That page number is less than 1
- >>> p.page(3)
- Traceback (most recent call last):
- ...
- EmptyPage: That page contains no results
-
-.. note::
-
- Note that you can give ``Paginator`` a list/tuple, a Django ``QuerySet``, or
- any other object with a ``count()`` or ``__len__()`` method. When
- determining the number of objects contained in the passed object,
- ``Paginator`` will first try calling ``count()``, then fallback to using
- ``len()`` if the passed object has no ``count()`` method. This allows
- objects such as Django's ``QuerySet`` to use a more efficient ``count()``
- method when available.
-
-
-Using ``Paginator`` in a view
-==============================
-
-Here's a slightly more complex example using :class:`Paginator` in a view to
-paginate a queryset. We give both the view and the accompanying template to
-show how you can display the results. This example assumes you have a
-``Contacts`` model that has already been imported.
-
-The view function looks like this::
-
- from django.core.paginator import Paginator, InvalidPage, EmptyPage
-
- def listing(request):
- contact_list = Contacts.objects.all()
- paginator = Paginator(contact_list, 25) # Show 25 contacts per page
-
- # Make sure page request is an int. If not, deliver first page.
- try:
- page = int(request.GET.get('page', '1'))
- except ValueError:
- page = 1
-
- # If page request (9999) is out of range, deliver last page of results.
- try:
- contacts = paginator.page(page)
- except (EmptyPage, InvalidPage):
- contacts = paginator.page(paginator.num_pages)
-
- return render_to_response('list.html', {"contacts": contacts})
-
-In the template :file:`list.html`, you'll want to include navigation between
-pages along with any interesting information from the objects themselves::
-
- {% for contact in contacts.object_list %}
- {# Each "contact" is a Contact model object. #}
- {{ contact.full_name|upper }}<br />
- ...
- {% endfor %}
-
- <div class="pagination">
- <span class="step-links">
- {% if contacts.has_previous %}
- <a href="?page={{ contacts.previous_page_number }}">previous</a>
- {% endif %}
-
- <span class="current">
- Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
- </span>
-
- {% if contacts.has_next %}
- <a href="?page={{ contacts.next_page_number }}">next</a>
- {% endif %}
- </span>
- </div>
-
-
-``Paginator`` objects
-=====================
-
-The :class:`Paginator` class has this constructor:
-
-.. class:: Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
-
-Required arguments
-------------------
-
-``object_list``
- A list, tuple, Django ``QuerySet``, or other sliceable object with a
- ``count()`` or ``__len__()`` method.
-
-``per_page``
- The maximum number of items to include on a page, not including orphans
- (see the ``orphans`` optional argument below).
-
-Optional arguments
-------------------
-
-``orphans``
- The minimum number of items allowed on the last page, defaults to zero.
- Use this when you don't want to have a last page with very few items.
- If the last page would normally have a number of items less than or equal
- to ``orphans``, then those items will be added to the previous page (which
- becomes the last page) instead of leaving the items on a page by
- themselves. For example, with 23 items, ``per_page=10``, and
- ``orphans=3``, there will be two pages; the first page with 10 items and
- the second (and last) page with 13 items.
-
-``allow_empty_first_page``
- Whether or not the first page is allowed to be empty. If ``False`` and
- ``object_list`` is empty, then an ``EmptyPage`` error will be raised.
-
-Methods
--------
-
-.. method:: Paginator.page(number)
-
- Returns a :class:`Page` object with the given 1-based index. Raises
- :exc:`InvalidPage` if the given page number doesn't exist.
-
-Attributes
-----------
-
-.. attribute:: Paginator.count
-
- The total number of objects, across all pages.
-
- .. note::
-
- When determining the number of objects contained in ``object_list``,
- ``Paginator`` will first try calling ``object_list.count()``. If
- ``object_list`` has no ``count()`` method, then ``Paginator`` will
- fallback to using ``object_list.__len__()``. This allows objects, such
- as Django's ``QuerySet``, to use a more efficient ``count()`` method
- when available.
-
-.. attribute:: Paginator.num_pages
-
- The total number of pages.
-
-.. attribute:: Paginator.page_range
-
- A 1-based range of page numbers, e.g., ``[1, 2, 3, 4]``.
-
-``InvalidPage`` exceptions
-==========================
-
-The ``page()`` method raises ``InvalidPage`` if the requested page is invalid
-(i.e., not an integer) or contains no objects. Generally, it's enough to trap
-the ``InvalidPage`` exception, but if you'd like more granularity, you can trap
-either of the following exceptions:
-
-``PageNotAnInteger``
- Raised when ``page()`` is given a value that isn't an integer.
-
-``EmptyPage``
- Raised when ``page()`` is given a valid value but no objects exist on that
- page.
-
-Both of the exceptions are subclasses of ``InvalidPage``, so you can handle
-them both with a simple ``except InvalidPage``.
-
-
-``Page`` objects
-================
-
-.. class:: Page(object_list, number, paginator)
-
-You usually won't construct :class:`Pages <Page>` by hand -- you'll get them
-using :meth:`Paginator.page`.
-
-
-Methods
--------
-
-.. method:: Page.has_next()
-
- Returns ``True`` if there's a next page.
-
-.. method:: Page.has_previous()
-
- Returns ``True`` if there's a previous page.
-
-.. method:: Page.has_other_pages()
-
- Returns ``True`` if there's a next *or* previous page.
-
-.. method:: Page.next_page_number()
-
- Returns the next page number. Note that this is "dumb" and will return the
- next page number regardless of whether a subsequent page exists.
-
-.. method:: Page.previous_page_number()
-
- Returns the previous page number. Note that this is "dumb" and will return
- the previous page number regardless of whether a previous page exists.
-
-.. method:: Page.start_index()
-
- Returns the 1-based index of the first object on the page, relative to all
- of the objects in the paginator's list. For example, when paginating a list
- of 5 objects with 2 objects per page, the second page's :meth:`~Page.start_index`
- would return ``3``.
-
-.. method:: Page.end_index()
-
- Returns the 1-based index of the last object on the page, relative to all of
- the objects in the paginator's list. For example, when paginating a list of
- 5 objects with 2 objects per page, the second page's :meth:`~Page.end_index`
- would return ``4``.
-
-Attributes
-----------
-
-.. attribute:: Page.object_list
-
- The list of objects on this page.
-
-.. attribute:: Page.number
-
- The 1-based page number for this page.
-
-.. attribute:: Page.paginator
-
- The associated :class:`Paginator` object.
-
diff --git a/parts/django/docs/topics/serialization.txt b/parts/django/docs/topics/serialization.txt
deleted file mode 100644
index c8acc85..0000000
--- a/parts/django/docs/topics/serialization.txt
+++ /dev/null
@@ -1,402 +0,0 @@
-==========================
-Serializing Django objects
-==========================
-
-Django's serialization framework provides a mechanism for "translating" Django
-objects into other formats. Usually these other formats will be text-based and
-used for sending Django objects over a wire, but it's possible for a
-serializer to handle any format (text-based or not).
-
-.. seealso::
-
- If you just want to get some data from your tables into a serialized
- form, you could use the :djadmin:`dumpdata` management command.
-
-Serializing data
-----------------
-
-At the highest level, serializing data is a very simple operation::
-
- from django.core import serializers
- data = serializers.serialize("xml", SomeModel.objects.all())
-
-The arguments to the ``serialize`` function are the format to serialize the data
-to (see `Serialization formats`_) and a :class:`~django.db.models.QuerySet` to
-serialize. (Actually, the second argument can be any iterator that yields Django
-objects, but it'll almost always be a QuerySet).
-
-You can also use a serializer object directly::
-
- XMLSerializer = serializers.get_serializer("xml")
- xml_serializer = XMLSerializer()
- xml_serializer.serialize(queryset)
- data = xml_serializer.getvalue()
-
-This is useful if you want to serialize data directly to a file-like object
-(which includes an :class:`~django.http.HttpResponse`)::
-
- out = open("file.xml", "w")
- xml_serializer.serialize(SomeModel.objects.all(), stream=out)
-
-Subset of fields
-~~~~~~~~~~~~~~~~
-
-If you only want a subset of fields to be serialized, you can
-specify a ``fields`` argument to the serializer::
-
- from django.core import serializers
- data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
-
-In this example, only the ``name`` and ``size`` attributes of each model will
-be serialized.
-
-.. note::
-
- Depending on your model, you may find that it is not possible to
- deserialize a model that only serializes a subset of its fields. If a
- serialized object doesn't specify all the fields that are required by a
- model, the deserializer will not be able to save deserialized instances.
-
-Inherited Models
-~~~~~~~~~~~~~~~~
-
-If you have a model that is defined using an :ref:`abstract base class
-<abstract-base-classes>`, you don't have to do anything special to serialize
-that model. Just call the serializer on the object (or objects) that you want to
-serialize, and the output will be a complete representation of the serialized
-object.
-
-However, if you have a model that uses :ref:`multi-table inheritance
-<multi-table-inheritance>`, you also need to serialize all of the base classes
-for the model. This is because only the fields that are locally defined on the
-model will be serialized. For example, consider the following models::
-
- class Place(models.Model):
- name = models.CharField(max_length=50)
-
- class Restaurant(Place):
- serves_hot_dogs = models.BooleanField()
-
-If you only serialize the Restaurant model::
-
- data = serializers.serialize('xml', Restaurant.objects.all())
-
-the fields on the serialized output will only contain the `serves_hot_dogs`
-attribute. The `name` attribute of the base class will be ignored.
-
-In order to fully serialize your Restaurant instances, you will need to
-serialize the Place models as well::
-
- all_objects = list(Restaurant.objects.all()) + list(Place.objects.all())
- data = serializers.serialize('xml', all_objects)
-
-Deserializing data
-------------------
-
-Deserializing data is also a fairly simple operation::
-
- for obj in serializers.deserialize("xml", data):
- do_something_with(obj)
-
-As you can see, the ``deserialize`` function takes the same format argument as
-``serialize``, a string or stream of data, and returns an iterator.
-
-However, here it gets slightly complicated. The objects returned by the
-``deserialize`` iterator *aren't* simple Django objects. Instead, they are
-special ``DeserializedObject`` instances that wrap a created -- but unsaved --
-object and any associated relationship data.
-
-Calling ``DeserializedObject.save()`` saves the object to the database.
-
-This ensures that deserializing is a non-destructive operation even if the
-data in your serialized representation doesn't match what's currently in the
-database. Usually, working with these ``DeserializedObject`` instances looks
-something like::
-
- for deserialized_object in serializers.deserialize("xml", data):
- if object_should_be_saved(deserialized_object):
- deserialized_object.save()
-
-In other words, the usual use is to examine the deserialized objects to make
-sure that they are "appropriate" for saving before doing so. Of course, if you
-trust your data source you could just save the object and move on.
-
-The Django object itself can be inspected as ``deserialized_object.object``.
-
-.. _serialization-formats:
-
-Serialization formats
----------------------
-
-Django supports a number of serialization formats, some of which require you
-to install third-party Python modules:
-
- ========== ==============================================================
- Identifier Information
- ========== ==============================================================
- ``xml`` Serializes to and from a simple XML dialect.
-
- ``json`` Serializes to and from JSON_ (using a version of simplejson_
- bundled with Django).
-
- ``yaml`` Serializes to YAML (YAML Ain't a Markup Language). This
- serializer is only available if PyYAML_ is installed.
- ========== ==============================================================
-
-.. _json: http://json.org/
-.. _simplejson: http://undefined.org/python/#simplejson
-.. _PyYAML: http://www.pyyaml.org/
-
-Notes for specific serialization formats
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-json
-^^^^
-
-If you're using UTF-8 (or any other non-ASCII encoding) data with the JSON
-serializer, you must pass ``ensure_ascii=False`` as a parameter to the
-``serialize()`` call. Otherwise, the output won't be encoded correctly.
-
-For example::
-
- json_serializer = serializers.get_serializer("json")()
- json_serializer.serialize(queryset, ensure_ascii=False, stream=response)
-
-The Django source code includes the simplejson_ module. However, if you're
-using Python 2.6 or later (which includes a builtin version of the module), Django will
-use the builtin ``json`` module automatically. If you have a system installed
-version that includes the C-based speedup extension, or your system version is
-more recent than the version shipped with Django (currently, 2.0.7), the
-system version will be used instead of the version included with Django.
-
-Be aware that if you're serializing using that module directly, not all Django
-output can be passed unmodified to simplejson. In particular, :ref:`lazy
-translation objects <lazy-translations>` need a `special encoder`_ written for
-them. Something like this will work::
-
- from django.utils.functional import Promise
- from django.utils.encoding import force_unicode
-
- class LazyEncoder(simplejson.JSONEncoder):
- def default(self, obj):
- if isinstance(obj, Promise):
- return force_unicode(obj)
- return super(LazyEncoder, self).default(obj)
-
-.. _special encoder: http://svn.red-bean.com/bob/simplejson/tags/simplejson-1.7/docs/index.html
-
-.. _topics-serialization-natural-keys:
-
-Natural keys
-------------
-
-.. versionadded:: 1.2
-
- The ability to use natural keys when serializing/deserializing data was
- added in the 1.2 release.
-
-The default serialization strategy for foreign keys and many-to-many
-relations is to serialize the value of the primary key(s) of the
-objects in the relation. This strategy works well for most types of
-object, but it can cause difficulty in some circumstances.
-
-Consider the case of a list of objects that have foreign key on
-:class:`ContentType`. If you're going to serialize an object that
-refers to a content type, you need to have a way to refer to that
-content type. Content Types are automatically created by Django as
-part of the database synchronization process, so you don't need to
-include content types in a fixture or other serialized data. As a
-result, the primary key of any given content type isn't easy to
-predict - it will depend on how and when :djadmin:`syncdb` was
-executed to create the content types.
-
-There is also the matter of convenience. An integer id isn't always
-the most convenient way to refer to an object; sometimes, a
-more natural reference would be helpful.
-
-It is for these reasons that Django provides *natural keys*. A natural
-key is a tuple of values that can be used to uniquely identify an
-object instance without using the primary key value.
-
-Deserialization of natural keys
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Consider the following two models::
-
- from django.db import models
-
- class Person(models.Model):
- first_name = models.CharField(max_length=100)
- last_name = models.CharField(max_length=100)
-
- birthdate = models.DateField()
-
- class Meta:
- unique_together = (('first_name', 'last_name'),)
-
- class Book(models.Model):
- name = models.CharField(max_length=100)
- author = models.ForeignKey(Person)
-
-Ordinarily, serialized data for ``Book`` would use an integer to refer to
-the author. For example, in JSON, a Book might be serialized as::
-
- ...
- {
- "pk": 1,
- "model": "store.book",
- "fields": {
- "name": "Mostly Harmless",
- "author": 42
- }
- }
- ...
-
-This isn't a particularly natural way to refer to an author. It
-requires that you know the primary key value for the author; it also
-requires that this primary key value is stable and predictable.
-
-However, if we add natural key handling to Person, the fixture becomes
-much more humane. To add natural key handling, you define a default
-Manager for Person with a ``get_by_natural_key()`` method. In the case
-of a Person, a good natural key might be the pair of first and last
-name::
-
- from django.db import models
-
- class PersonManager(models.Manager):
- def get_by_natural_key(self, first_name, last_name):
- return self.get(first_name=first_name, last_name=last_name)
-
- class Person(models.Model):
- objects = PersonManager()
-
- first_name = models.CharField(max_length=100)
- last_name = models.CharField(max_length=100)
-
- birthdate = models.DateField()
-
- class Meta:
- unique_together = (('first_name', 'last_name'),)
-
-Now books can use that natural key to refer to ``Person`` objects::
-
- ...
- {
- "pk": 1,
- "model": "store.book",
- "fields": {
- "name": "Mostly Harmless",
- "author": ["Douglas", "Adams"]
- }
- }
- ...
-
-When you try to load this serialized data, Django will use the
-``get_by_natural_key()`` method to resolve ``["Douglas", "Adams"]``
-into the primary key of an actual ``Person`` object.
-
-.. note::
-
- Whatever fields you use for a natural key must be able to uniquely
- identify an object. This will usually mean that your model will
- have a uniqueness clause (either unique=True on a single field, or
- ``unique_together`` over multiple fields) for the field or fields
- in your natural key. However, uniqueness doesn't need to be
- enforced at the database level. If you are certain that a set of
- fields will be effectively unique, you can still use those fields
- as a natural key.
-
-Serialization of natural keys
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-So how do you get Django to emit a natural key when serializing an object?
-Firstly, you need to add another method -- this time to the model itself::
-
- class Person(models.Model):
- objects = PersonManager()
-
- first_name = models.CharField(max_length=100)
- last_name = models.CharField(max_length=100)
-
- birthdate = models.DateField()
-
- def natural_key(self):
- return (self.first_name, self.last_name)
-
- class Meta:
- unique_together = (('first_name', 'last_name'),)
-
-That method should always return a natural key tuple -- in this
-example, ``(first name, last name)``. Then, when you call
-``serializers.serialize()``, you provide a ``use_natural_keys=True``
-argument::
-
- >>> serializers.serialize('json', [book1, book2], indent=2, use_natural_keys=True)
-
-When ``use_natural_keys=True`` is specified, Django will use the
-``natural_key()`` method to serialize any reference to objects of the
-type that defines the method.
-
-If you are using :djadmin:`dumpdata` to generate serialized data, you
-use the `--natural` command line flag to generate natural keys.
-
-.. note::
-
- You don't need to define both ``natural_key()`` and
- ``get_by_natural_key()``. If you don't want Django to output
- natural keys during serialization, but you want to retain the
- ability to load natural keys, then you can opt to not implement
- the ``natural_key()`` method.
-
- Conversely, if (for some strange reason) you want Django to output
- natural keys during serialization, but *not* be able to load those
- key values, just don't define the ``get_by_natural_key()`` method.
-
-Dependencies during serialization
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Since natural keys rely on database lookups to resolve references, it
-is important that data exists before it is referenced. You can't make
-a `forward reference` with natural keys - the data you are referencing
-must exist before you include a natural key reference to that data.
-
-To accommodate this limitation, calls to :djadmin:`dumpdata` that use
-the :djadminopt:`--natural` option will serialize any model with a
-``natural_key()`` method before it serializes normal key objects.
-
-However, this may not always be enough. If your natural key refers to
-another object (by using a foreign key or natural key to another object
-as part of a natural key), then you need to be able to ensure that
-the objects on which a natural key depends occur in the serialized data
-before the natural key requires them.
-
-To control this ordering, you can define dependencies on your
-``natural_key()`` methods. You do this by setting a ``dependencies``
-attribute on the ``natural_key()`` method itself.
-
-For example, consider the ``Permission`` model in ``contrib.auth``.
-The following is a simplified version of the ``Permission`` model::
-
- class Permission(models.Model):
- name = models.CharField(max_length=50)
- content_type = models.ForeignKey(ContentType)
- codename = models.CharField(max_length=100)
- # ...
- def natural_key(self):
- return (self.codename,) + self.content_type.natural_key()
-
-The natural key for a ``Permission`` is a combination of the codename for the
-``Permission``, and the ``ContentType`` to which the ``Permission`` applies. This means
-that ``ContentType`` must be serialized before ``Permission``. To define this
-dependency, we add one extra line::
-
- class Permission(models.Model):
- # ...
- def natural_key(self):
- return (self.codename,) + self.content_type.natural_key()
- natural_key.dependencies = ['contenttypes.contenttype']
-
-This definition ensures that ``ContentType`` models are serialized before
-``Permission`` models. In turn, any object referencing ``Permission`` will
-be serialized after both ``ContentType`` and ``Permission``.
diff --git a/parts/django/docs/topics/settings.txt b/parts/django/docs/topics/settings.txt
deleted file mode 100644
index 59c02c3..0000000
--- a/parts/django/docs/topics/settings.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-===============
-Django settings
-===============
-
-A Django settings file contains all the configuration of your Django
-installation. This document explains how settings work and which settings are
-available.
-
-The basics
-==========
-
-A settings file is just a Python module with module-level variables.
-
-Here are a couple of example settings::
-
- DEBUG = False
- DEFAULT_FROM_EMAIL = 'webmaster@example.com'
- TEMPLATE_DIRS = ('/home/templates/mike', '/home/templates/john')
-
-Because a settings file is a Python module, the following apply:
-
- * It doesn't allow for Python syntax errors.
- * It can assign settings dynamically using normal Python syntax.
- For example::
-
- MY_SETTING = [str(i) for i in range(30)]
-
- * It can import values from other settings files.
-
-.. _django-settings-module:
-
-Designating the settings
-========================
-
-When you use Django, you have to tell it which settings you're using. Do this
-by using an environment variable, ``DJANGO_SETTINGS_MODULE``.
-
-The value of ``DJANGO_SETTINGS_MODULE`` should be in Python path syntax, e.g.
-``mysite.settings``. Note that the settings module should be on the
-Python `import search path`_.
-
-.. _import search path: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html
-
-The django-admin.py utility
----------------------------
-
-When using :doc:`django-admin.py </ref/django-admin>`, you can either set the
-environment variable once, or explicitly pass in the settings module each time
-you run the utility.
-
-Example (Unix Bash shell)::
-
- export DJANGO_SETTINGS_MODULE=mysite.settings
- django-admin.py runserver
-
-Example (Windows shell)::
-
- set DJANGO_SETTINGS_MODULE=mysite.settings
- django-admin.py runserver
-
-Use the ``--settings`` command-line argument to specify the settings manually::
-
- django-admin.py runserver --settings=mysite.settings
-
-.. _django-admin.py: ../django-admin/
-
-On the server (mod_python)
---------------------------
-
-In your live server environment, you'll need to tell Apache/mod_python which
-settings file to use. Do that with ``SetEnv``::
-
- <Location "/mysite/">
- SetHandler python-program
- PythonHandler django.core.handlers.modpython
- SetEnv DJANGO_SETTINGS_MODULE mysite.settings
- </Location>
-
-Read the :doc:`Django mod_python documentation </howto/deployment/modpython>` for
-more information.
-
-Default settings
-================
-
-A Django settings file doesn't have to define any settings if it doesn't need
-to. Each setting has a sensible default value. These defaults live in the
-module :file:`django/conf/global_settings.py`.
-
-Here's the algorithm Django uses in compiling settings:
-
- * Load settings from ``global_settings.py``.
- * Load settings from the specified settings file, overriding the global
- settings as necessary.
-
-Note that a settings file should *not* import from ``global_settings``, because
-that's redundant.
-
-Seeing which settings you've changed
-------------------------------------
-
-There's an easy way to view which of your settings deviate from the default
-settings. The command ``python manage.py diffsettings`` displays differences
-between the current settings file and Django's default settings.
-
-For more, see the :djadmin:`diffsettings` documentation.
-
-Using settings in Python code
-=============================
-
-In your Django apps, use settings by importing the object
-``django.conf.settings``. Example::
-
- from django.conf import settings
-
- if settings.DEBUG:
- # Do something
-
-Note that ``django.conf.settings`` isn't a module -- it's an object. So
-importing individual settings is not possible::
-
- from django.conf.settings import DEBUG # This won't work.
-
-Also note that your code should *not* import from either ``global_settings`` or
-your own settings file. ``django.conf.settings`` abstracts the concepts of
-default settings and site-specific settings; it presents a single interface.
-It also decouples the code that uses settings from the location of your
-settings.
-
-Altering settings at runtime
-============================
-
-You shouldn't alter settings in your applications at runtime. For example,
-don't do this in a view::
-
- from django.conf import settings
-
- settings.DEBUG = True # Don't do this!
-
-The only place you should assign to settings is in a settings file.
-
-Security
-========
-
-Because a settings file contains sensitive information, such as the database
-password, you should make every attempt to limit access to it. For example,
-change its file permissions so that only you and your Web server's user can
-read it. This is especially important in a shared-hosting environment.
-
-Available settings
-==================
-
-For a full list of available settings, see the :doc:`settings reference </ref/settings>`.
-
-Creating your own settings
-==========================
-
-There's nothing stopping you from creating your own settings, for your own
-Django apps. Just follow these conventions:
-
- * Setting names are in all uppercase.
- * Don't reinvent an already-existing setting.
-
-For settings that are sequences, Django itself uses tuples, rather than lists,
-but this is only a convention.
-
-.. _settings-without-django-settings-module:
-
-Using settings without setting DJANGO_SETTINGS_MODULE
-=====================================================
-
-In some cases, you might want to bypass the ``DJANGO_SETTINGS_MODULE``
-environment variable. For example, if you're using the template system by
-itself, you likely don't want to have to set up an environment variable
-pointing to a settings module.
-
-In these cases, you can configure Django's settings manually. Do this by
-calling:
-
-.. function:: django.conf.settings.configure(default_settings, **settings)
-
-Example::
-
- from django.conf import settings
-
- settings.configure(DEBUG=True, TEMPLATE_DEBUG=True,
- TEMPLATE_DIRS=('/home/web-apps/myapp', '/home/web-apps/base'))
-
-Pass ``configure()`` as many keyword arguments as you'd like, with each keyword
-argument representing a setting and its value. Each argument name should be all
-uppercase, with the same name as the settings described above. If a particular
-setting is not passed to ``configure()`` and is needed at some later point,
-Django will use the default setting value.
-
-Configuring Django in this fashion is mostly necessary -- and, indeed,
-recommended -- when you're using a piece of the framework inside a larger
-application.
-
-Consequently, when configured via ``settings.configure()``, Django will not
-make any modifications to the process environment variables (see the
-documentation of :setting:`TIME_ZONE` for why this would normally occur). It's
-assumed that you're already in full control of your environment in these
-cases.
-
-Custom default settings
------------------------
-
-If you'd like default values to come from somewhere other than
-``django.conf.global_settings``, you can pass in a module or class that
-provides the default settings as the ``default_settings`` argument (or as the
-first positional argument) in the call to ``configure()``.
-
-In this example, default settings are taken from ``myapp_defaults``, and the
-``DEBUG`` setting is set to ``True``, regardless of its value in
-``myapp_defaults``::
-
- from django.conf import settings
- from myapp import myapp_defaults
-
- settings.configure(default_settings=myapp_defaults, DEBUG=True)
-
-The following example, which uses ``myapp_defaults`` as a positional argument,
-is equivalent::
-
- settings.configure(myapp_defaults, DEBUG = True)
-
-Normally, you will not need to override the defaults in this fashion. The
-Django defaults are sufficiently tame that you can safely use them. Be aware
-that if you do pass in a new default module, it entirely *replaces* the Django
-defaults, so you must specify a value for every possible setting that might be
-used in that code you are importing. Check in
-``django.conf.settings.global_settings`` for the full list.
-
-Either configure() or DJANGO_SETTINGS_MODULE is required
---------------------------------------------------------
-
-If you're not setting the ``DJANGO_SETTINGS_MODULE`` environment variable, you
-*must* call ``configure()`` at some point before using any code that reads
-settings.
-
-If you don't set ``DJANGO_SETTINGS_MODULE`` and don't call ``configure()``,
-Django will raise an ``ImportError`` exception the first time a setting
-is accessed.
-
-If you set ``DJANGO_SETTINGS_MODULE``, access settings values somehow, *then*
-call ``configure()``, Django will raise a ``RuntimeError`` indicating
-that settings have already been configured.
-
-Also, it's an error to call ``configure()`` more than once, or to call
-``configure()`` after any setting has been accessed.
-
-It boils down to this: Use exactly one of either ``configure()`` or
-``DJANGO_SETTINGS_MODULE``. Not both, and not neither.
-
-.. _@login_required: ../authentication/#the-login-required-decorator
-
diff --git a/parts/django/docs/topics/signals.txt b/parts/django/docs/topics/signals.txt
deleted file mode 100644
index 35e111d..0000000
--- a/parts/django/docs/topics/signals.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-=======
-Signals
-=======
-
-.. module:: django.dispatch
- :synopsis: Signal dispatch
-
-Django includes a "signal dispatcher" which helps allow decoupled applications
-get notified when actions occur elsewhere in the framework. In a nutshell,
-signals allow certain *senders* to notify a set of *receivers* that some action
-has taken place. They're especially useful when many pieces of code may be
-interested in the same events.
-
-Django provides a :doc:`set of built-in signals </ref/signals>` that let user
-code get notified by Django itself of certain actions. These include some useful
-notifications:
-
- * :data:`django.db.models.signals.pre_save` &
- :data:`django.db.models.signals.post_save`
-
- Sent before or after a model's :meth:`~django.db.models.Model.save` method
- is called.
-
- * :data:`django.db.models.signals.pre_delete` &
- :data:`django.db.models.signals.post_delete`
-
- Sent before or after a model's :meth:`~django.db.models.Model.delete`
- method is called.
-
- * :data:`django.db.models.signals.m2m_changed`
-
- Sent when a :class:`ManyToManyField` on a model is changed.
-
- * :data:`django.core.signals.request_started` &
- :data:`django.core.signals.request_finished`
-
- Sent when Django starts or finishes an HTTP request.
-
-See the :doc:`built-in signal documentation </ref/signals>` for a complete list,
-and a complete explanation of each signal.
-
-You can also `define and send your own custom signals`_; see below.
-
-.. _define and send your own custom signals: `defining and sending signals`_
-
-Listening to signals
-====================
-
-To receive a signal, you need to register a *receiver* function that gets
-called when the signal is sent by using the
-:meth:`.Signal.connect` method:
-
-.. method:: Signal.connect(receiver, [sender=None, weak=True, dispatch_uid=None])
-
- :param receiver: The callback function which will be connected to this
- signal. See :ref:`receiver-functions` for more information.
-
- :param sender: Specifies a particular sender to receive signals from. See
- :ref:`connecting-to-specific-signals` for more information.
-
- :param weak: Django stores signal handlers as weak references by
- default. Thus, if your receiver is a local function, it may be
- garbage collected. To prevent this, pass ``weak=False`` when you call
- the signal's ``connect()`` method.
-
- :param dispatch_uid: A unique identifier for a signal receiver in cases
- where duplicate signals may be sent. See
- :ref:`preventing-duplicate-signals` for more information.
-
-Let's see how this works by registering a signal that
-gets called after each HTTP request is finished. We'll be connecting to the
-:data:`~django.core.signals.request_finished` signal.
-
-.. _receiver-functions:
-
-Receiver functions
-------------------
-
-First, we need to define a receiver function. A receiver can be any Python
-function or method:
-
-.. code-block:: python
-
- def my_callback(sender, **kwargs):
- print "Request finished!"
-
-Notice that the function takes a ``sender`` argument, along with wildcard
-keyword arguments (``**kwargs``); all signal handlers must take these arguments.
-
-We'll look at senders `a bit later`_, but right now look at the ``**kwargs``
-argument. All signals send keyword arguments, and may change those keyword
-arguments at any time. In the case of
-:data:`~django.core.signals.request_finished`, it's documented as sending no
-arguments, which means we might be tempted to write our signal handling as
-``my_callback(sender)``.
-
-.. _a bit later: `connecting to signals sent by specific senders`_
-
-This would be wrong -- in fact, Django will throw an error if you do so. That's
-because at any point arguments could get added to the signal and your receiver
-must be able to handle those new arguments.
-
-.. _connecting-receiver-functions:
-
-Connecting receiver functions
------------------------------
-
-Next, we'll need to connect our receiver to the signal:
-
-.. code-block:: python
-
- from django.core.signals import request_finished
-
- request_finished.connect(my_callback)
-
-Now, our ``my_callback`` function will be called each time a request finishes.
-
-.. admonition:: Where should this code live?
-
- You can put signal handling and registration code anywhere you like.
- However, you'll need to make sure that the module it's in gets imported
- early on so that the signal handling gets registered before any signals need
- to be sent. This makes your app's ``models.py`` a good place to put
- registration of signal handlers.
-
-.. _connecting-to-specific-signals:
-
-Connecting to signals sent by specific senders
-----------------------------------------------
-
-Some signals get sent many times, but you'll only be interested in receiving a
-certain subset of those signals. For example, consider the
-:data:`django.db.models.signals.pre_save` signal sent before a model gets saved.
-Most of the time, you don't need to know when *any* model gets saved -- just
-when one *specific* model is saved.
-
-In these cases, you can register to receive signals sent only by particular
-senders. In the case of :data:`django.db.models.signals.pre_save`, the sender
-will be the model class being saved, so you can indicate that you only want
-signals sent by some model:
-
-.. code-block:: python
-
- from django.db.models.signals import pre_save
- from myapp.models import MyModel
-
- def my_handler(sender, **kwargs):
- ...
-
- pre_save.connect(my_handler, sender=MyModel)
-
-The ``my_handler`` function will only be called when an instance of ``MyModel``
-is saved.
-
-Different signals use different objects as their senders; you'll need to consult
-the :doc:`built-in signal documentation </ref/signals>` for details of each
-particular signal.
-
-.. _preventing-duplicate-signals:
-
-Preventing duplicate signals
-----------------------------
-
-In some circumstances, the module in which you are connecting signals may be
-imported multiple times. This can cause your receiver function to be
-registered more than once, and thus called multiples times for a single signal
-event.
-
-If this behavior is problematic (such as when using signals to
-send an e-mail whenever a model is saved), pass a unique identifier as
-the ``dispatch_uid`` argument to identify your receiver function. This
-identifier will usually be a string, although any hashable object will
-suffice. The end result is that your receiver function will only be
-bound to the signal once for each unique ``dispatch_uid`` value.
-
-.. code-block:: python
-
- from django.core.signals import request_finished
-
- request_finished.connect(my_callback, dispatch_uid="my_unique_identifier")
-
-Defining and sending signals
-============================
-
-Your applications can take advantage of the signal infrastructure and provide
-its own signals.
-
-Defining signals
-----------------
-
-.. class:: Signal([providing_args=list])
-
-All signals are :class:`django.dispatch.Signal` instances. The
-``providing_args`` is a list of the names of arguments the signal will provide
-to listeners.
-
-For example:
-
-.. code-block:: python
-
- import django.dispatch
-
- pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])
-
-This declares a ``pizza_done`` signal that will provide receivers with
-``toppings`` and ``size`` arguments.
-
-Remember that you're allowed to change this list of arguments at any time, so getting the API right on the first try isn't necessary.
-
-Sending signals
----------------
-
-There are two ways to send send signals in Django.
-
-.. method:: Signal.send(sender, **kwargs)
-.. method:: Signal.send_robust(sender, **kwargs)
-
-To send a signal, call either :meth:`Signal.send` or :meth:`Signal.send_robust`.
-You must provide the ``sender`` argument, and may provide as many other keyword
-arguments as you like.
-
-For example, here's how sending our ``pizza_done`` signal might look:
-
-.. code-block:: python
-
- class PizzaStore(object):
- ...
-
- def send_pizza(self, toppings, size):
- pizza_done.send(sender=self, toppings=toppings, size=size)
- ...
-
-Both ``send()`` and ``send_robust()`` return a list of tuple pairs
-``[(receiver, response), ... ]``, representing the list of called receiver
-functions and their response values.
-
-``send()`` differs from ``send_robust()`` in how exceptions raised by receiver
-functions are handled. ``send()`` does *not* catch any exceptions raised by
-receivers; it simply allows errors to propagate. Thus not all receivers may
-be notified of a signal in the face of an error.
-
-``send_robust()`` catches all errors derived from Python's ``Exception`` class,
-and ensures all receivers are notified of the signal. If an error occurs, the
-error instance is returned in the tuple pair for the receiver that raised the error.
-
-Disconnecting signals
-=====================
-
-.. method:: Signal.disconnect([receiver=None, sender=None, weak=True, dispatch_uid=None])
-
-To disconnect a receiver from a signal, call :meth:`Signal.disconnect`. The
-arguments are as described in :meth:`.Signal.connect`.
-
-The *receiver* argument indicates the registered receiver to disconnect. It may
-be ``None`` if ``dispatch_uid`` is used to identify the receiver.
diff --git a/parts/django/docs/topics/templates.txt b/parts/django/docs/topics/templates.txt
deleted file mode 100644
index d249bd3..0000000
--- a/parts/django/docs/topics/templates.txt
+++ /dev/null
@@ -1,617 +0,0 @@
-============================
-The Django template language
-============================
-
-.. admonition:: About this document
-
- This document explains the language syntax of the Django template system. If
- you're looking for a more technical perspective on how it works and how to
- extend it, see :doc:`/ref/templates/api`.
-
-Django's template language is designed to strike a balance between power and
-ease. It's designed to feel comfortable to those used to working with HTML. If
-you have any exposure to other text-based template languages, such as Smarty_
-or CheetahTemplate_, you should feel right at home with Django's templates.
-
-.. admonition:: Philosophy
-
- If you have a background in programming, or if you're used to languages
- like PHP which mix programming code directly into HTML, you'll want to
- bear in mind that the Django template system is not simply Python embedded
- into HTML. This is by design: the template system is meant to express
- presentation, not program logic.
-
- The Django template system provides tags which function similarly to some
- programming constructs -- an :ttag:`if` tag for boolean tests, a :ttag:`for`
- tag for looping, etc. -- but these are not simply executed as the
- corresponding Python code, and the template system will not execute
- arbitrary Python expressions. Only the tags, filters and syntax listed below
- are supported by default (although you can add :doc:`your own extensions
- </howto/custom-template-tags>` to the template language as needed).
-
-.. _`The Django template language: For Python programmers`: ../templates_python/
-.. _Smarty: http://smarty.php.net/
-.. _CheetahTemplate: http://www.cheetahtemplate.org/
-
-Templates
-=========
-
-.. highlightlang:: html+django
-
-A template is simply a text file. It can generate any text-based format (HTML,
-XML, CSV, etc.).
-
-A template contains **variables**, which get replaced with values when the
-template is evaluated, and **tags**, which control the logic of the template.
-
-Below is a minimal template that illustrates a few basics. Each element will be
-explained later in this document.::
-
- {% extends "base_generic.html" %}
-
- {% block title %}{{ section.title }}{% endblock %}
-
- {% block content %}
- <h1>{{ section.title }}</h1>
-
- {% for story in story_list %}
- <h2>
- <a href="{{ story.get_absolute_url }}">
- {{ story.headline|upper }}
- </a>
- </h2>
- <p>{{ story.tease|truncatewords:"100" }}</p>
- {% endfor %}
- {% endblock %}
-
-.. admonition:: Philosophy
-
- Why use a text-based template instead of an XML-based one (like Zope's
- TAL)? We wanted Django's template language to be usable for more than
- just XML/HTML templates. At World Online, we use it for e-mails,
- JavaScript and CSV. You can use the template language for any text-based
- format.
-
- Oh, and one more thing: Making humans edit XML is sadistic!
-
-Variables
-=========
-
-Variables look like this: ``{{ variable }}``. When the template engine
-encounters a variable, it evaluates that variable and replaces it with the
-result.
-
-Use a dot (``.``) to access attributes of a variable.
-
-.. admonition:: Behind the scenes
-
- Technically, when the template system encounters a dot, it tries the
- following lookups, in this order:
-
- * Dictionary lookup
- * Attribute lookup
- * Method call
- * List-index lookup
-
-In the above example, ``{{ section.title }}`` will be replaced with the
-``title`` attribute of the ``section`` object.
-
-If you use a variable that doesn't exist, the template system will insert
-the value of the ``TEMPLATE_STRING_IF_INVALID`` setting, which is set to ``''``
-(the empty string) by default.
-
-Filters
-=======
-
-You can modify variables for display by using **filters**.
-
-Filters look like this: ``{{ name|lower }}``. This displays the value of the
-``{{ name }}`` variable after being filtered through the ``lower`` filter,
-which converts text to lowercase. Use a pipe (``|``) to apply a filter.
-
-Filters can be "chained." The output of one filter is applied to the next.
-``{{ text|escape|linebreaks }}`` is a common idiom for escaping text contents,
-then converting line breaks to ``<p>`` tags.
-
-Some filters take arguments. A filter argument looks like this: ``{{
-bio|truncatewords:30 }}``. This will display the first 30 words of the ``bio``
-variable.
-
-Filter arguments that contain spaces must be quoted; for example, to join a list
-with commas and spaced you'd use ``{{ list|join:", " }}``.
-
-Django provides about thirty built-in template filters. You can read all about
-them in the :ref:`built-in filter reference <ref-templates-builtins-filters>`.
-To give you a taste of what's available, here are some of the more commonly used
-template filters:
-
- :tfilter:`default`
- If a variable is false or empty, use given default. Otherwise, use the
- value of the variable
-
- For example::
-
- {{ value|default:"nothing" }}
-
- If ``value`` isn't provided or is empty, the above will display
- "``nothing``".
-
- :tfilter:`length`
- Returns the length of the value. This works for both strings and lists;
- for example::
-
- {{ value|length }}
-
- If ``value`` is ``['a', 'b', 'c', 'd']``, the output will be ``4``.
-
- :tfilter:`striptags`
- Strips all [X]HTML tags. For example::
-
- {{ value|striptags }}
-
- If ``value`` is ``"<b>Joel</b> <button>is</button> a
- <span>slug</span>"``, the output will be ``"Joel is a slug"``.
-
-Again, these are just a few examples; see the :ref:`built-in filter reference
-<ref-templates-builtins-filters>` for the complete list.
-
-You can also create your own custom template filters; see
-:doc:`/howto/custom-template-tags`.
-
-.. seealso::
-
- Django's admin interface can include a complete reference of all template
- tags and filters available for a given site. See
- :doc:`/ref/contrib/admin/admindocs`.
-
-Tags
-====
-
-Tags look like this: ``{% tag %}``. Tags are more complex than variables: Some
-create text in the output, some control flow by performing loops or logic, and
-some load external information into the template to be used by later variables.
-
-Some tags require beginning and ending tags (i.e. ``{% tag %} ... tag contents
-... {% endtag %}``).
-
-Django ships with about two dozen built-in template tags. You can read all about
-them in the :ref:`built-in tag reference <ref-templates-builtins-tags>`. To give
-you a taste of what's available, here are some of the more commonly used
-tags:
-
- :ttag:`for`
- Loop over each item in an array. For example, to display a list of athletes
- provided in ``athlete_list``::
-
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% endfor %}
- </ul>
-
- :ttag:`if` and ``else``
- Evaluates a variable, and if that variable is "true" the contents of the
- block are displayed::
-
- {% if athlete_list %}
- Number of athletes: {{ athlete_list|length }}
- {% else %}
- No athletes.
- {% endif %}
-
- In the above, if ``athlete_list`` is not empty, the number of athletes
- will be displayed by the ``{{ athlete_list|length }}`` variable.
-
- You can also use filters and various operators in the ``if`` tag::
-
- {% if athlete_list|length > 1 %}
- Team: {% for athlete in athlete_list %} ... {% endfor %}
- {% else %}
- Athlete: {{ athlete_list.0.name }}
- {% endif %}
-
- :ttag:`block` and :ttag:`extends`
- Set up `template inheritance`_ (see below), a powerful way
- of cutting down on "boilerplate" in templates.
-
-Again, the above is only a selection of the whole list; see the :ref:`built-in
-tag reference <ref-templates-builtins-tags>` for the complete list.
-
-You can also create your own custom template tags; see
-:doc:`/howto/custom-template-tags`.
-
-.. seealso::
-
- Django's admin interface can include a complete reference of all template
- tags and filters available for a given site. See
- :doc:`/ref/contrib/admin/admindocs`.
-
-Comments
-========
-
-To comment-out part of a line in a template, use the comment syntax: ``{# #}``.
-
-For example, this template would render as ``'hello'``::
-
- {# greeting #}hello
-
-A comment can contain any template code, invalid or not. For example::
-
- {# {% if foo %}bar{% else %} #}
-
-This syntax can only be used for single-line comments (no newlines are permitted
-between the ``{#`` and ``#}`` delimiters). If you need to comment out a
-multiline portion of the template, see the :ttag:`comment` tag.
-
-.. _template-inheritance:
-
-Template inheritance
-====================
-
-The most powerful -- and thus the most complex -- part of Django's template
-engine is template inheritance. Template inheritance allows you to build a base
-"skeleton" template that contains all the common elements of your site and
-defines **blocks** that child templates can override.
-
-It's easiest to understand template inheritance by starting with an example::
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <link rel="stylesheet" href="style.css" />
- <title>{% block title %}My amazing site{% endblock %}</title>
- </head>
-
- <body>
- <div id="sidebar">
- {% block sidebar %}
- <ul>
- <li><a href="/">Home</a></li>
- <li><a href="/blog/">Blog</a></li>
- </ul>
- {% endblock %}
- </div>
-
- <div id="content">
- {% block content %}{% endblock %}
- </div>
- </body>
- </html>
-
-This template, which we'll call ``base.html``, defines a simple HTML skeleton
-document that you might use for a simple two-column page. It's the job of
-"child" templates to fill the empty blocks with content.
-
-In this example, the ``{% block %}`` tag defines three blocks that child
-templates can fill in. All the ``block`` tag does is to tell the template
-engine that a child template may override those portions of the template.
-
-A child template might look like this::
-
- {% extends "base.html" %}
-
- {% block title %}My amazing blog{% endblock %}
-
- {% block content %}
- {% for entry in blog_entries %}
- <h2>{{ entry.title }}</h2>
- <p>{{ entry.body }}</p>
- {% endfor %}
- {% endblock %}
-
-The ``{% extends %}`` tag is the key here. It tells the template engine that
-this template "extends" another template. When the template system evaluates
-this template, first it locates the parent -- in this case, "base.html".
-
-At that point, the template engine will notice the three ``{% block %}`` tags
-in ``base.html`` and replace those blocks with the contents of the child
-template. Depending on the value of ``blog_entries``, the output might look
-like::
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <link rel="stylesheet" href="style.css" />
- <title>My amazing blog</title>
- </head>
-
- <body>
- <div id="sidebar">
- <ul>
- <li><a href="/">Home</a></li>
- <li><a href="/blog/">Blog</a></li>
- </ul>
- </div>
-
- <div id="content">
- <h2>Entry one</h2>
- <p>This is my first entry.</p>
-
- <h2>Entry two</h2>
- <p>This is my second entry.</p>
- </div>
- </body>
- </html>
-
-Note that since the child template didn't define the ``sidebar`` block, the
-value from the parent template is used instead. Content within a ``{% block %}``
-tag in a parent template is always used as a fallback.
-
-You can use as many levels of inheritance as needed. One common way of using
-inheritance is the following three-level approach:
-
- * Create a ``base.html`` template that holds the main look-and-feel of your
- site.
- * Create a ``base_SECTIONNAME.html`` template for each "section" of your
- site. For example, ``base_news.html``, ``base_sports.html``. These
- templates all extend ``base.html`` and include section-specific
- styles/design.
- * Create individual templates for each type of page, such as a news
- article or blog entry. These templates extend the appropriate section
- template.
-
-This approach maximizes code reuse and makes it easy to add items to shared
-content areas, such as section-wide navigation.
-
-Here are some tips for working with inheritance:
-
- * If you use ``{% extends %}`` in a template, it must be the first template
- tag in that template. Template inheritance won't work, otherwise.
-
- * More ``{% block %}`` tags in your base templates are better. Remember,
- child templates don't have to define all parent blocks, so you can fill
- in reasonable defaults in a number of blocks, then only define the ones
- you need later. It's better to have more hooks than fewer hooks.
-
- * If you find yourself duplicating content in a number of templates, it
- probably means you should move that content to a ``{% block %}`` in a
- parent template.
-
- * If you need to get the content of the block from the parent template,
- the ``{{ block.super }}`` variable will do the trick. This is useful
- if you want to add to the contents of a parent block instead of
- completely overriding it. Data inserted using ``{{ block.super }}`` will
- not be automatically escaped (see the `next section`_), since it was
- already escaped, if necessary, in the parent template.
-
- * For extra readability, you can optionally give a *name* to your
- ``{% endblock %}`` tag. For example::
-
- {% block content %}
- ...
- {% endblock content %}
-
- In larger templates, this technique helps you see which ``{% block %}``
- tags are being closed.
-
-Finally, note that you can't define multiple ``{% block %}`` tags with the same
-name in the same template. This limitation exists because a block tag works in
-"both" directions. That is, a block tag doesn't just provide a hole to fill --
-it also defines the content that fills the hole in the *parent*. If there were
-two similarly-named ``{% block %}`` tags in a template, that template's parent
-wouldn't know which one of the blocks' content to use.
-
-.. _next section: #automatic-html-escaping
-.. _automatic-html-escaping:
-
-Automatic HTML escaping
-=======================
-
-.. versionadded:: 1.0
-
-When generating HTML from templates, there's always a risk that a variable will
-include characters that affect the resulting HTML. For example, consider this
-template fragment::
-
- Hello, {{ name }}.
-
-At first, this seems like a harmless way to display a user's name, but consider
-what would happen if the user entered his name as this::
-
- <script>alert('hello')</script>
-
-With this name value, the template would be rendered as::
-
- Hello, <script>alert('hello')</script>
-
-...which means the browser would pop-up a JavaScript alert box!
-
-Similarly, what if the name contained a ``'<'`` symbol, like this?
-
- <b>username
-
-That would result in a rendered template like this::
-
- Hello, <b>username
-
-...which, in turn, would result in the remainder of the Web page being bolded!
-
-Clearly, user-submitted data shouldn't be trusted blindly and inserted directly
-into your Web pages, because a malicious user could use this kind of hole to
-do potentially bad things. This type of security exploit is called a
-`Cross Site Scripting`_ (XSS) attack.
-
-To avoid this problem, you have two options:
-
- * One, you can make sure to run each untrusted variable through the
- ``escape`` filter (documented below), which converts potentially harmful
- HTML characters to unharmful ones. This was the default solution
- in Django for its first few years, but the problem is that it puts the
- onus on *you*, the developer / template author, to ensure you're escaping
- everything. It's easy to forget to escape data.
-
- * Two, you can take advantage of Django's automatic HTML escaping. The
- remainder of this section describes how auto-escaping works.
-
-By default in Django, every template automatically escapes the output
-of every variable tag. Specifically, these five characters are
-escaped:
-
- * ``<`` is converted to ``&lt;``
- * ``>`` is converted to ``&gt;``
- * ``'`` (single quote) is converted to ``&#39;``
- * ``"`` (double quote) is converted to ``&quot;``
- * ``&`` is converted to ``&amp;``
-
-Again, we stress that this behavior is on by default. If you're using Django's
-template system, you're protected.
-
-.. _Cross Site Scripting: http://en.wikipedia.org/wiki/Cross-site_scripting
-
-How to turn it off
-------------------
-
-If you don't want data to be auto-escaped, on a per-site, per-template level or
-per-variable level, you can turn it off in several ways.
-
-Why would you want to turn it off? Because sometimes, template variables
-contain data that you *intend* to be rendered as raw HTML, in which case you
-don't want their contents to be escaped. For example, you might store a blob of
-HTML in your database and want to embed that directly into your template. Or,
-you might be using Django's template system to produce text that is *not* HTML
--- like an e-mail message, for instance.
-
-For individual variables
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-To disable auto-escaping for an individual variable, use the ``safe`` filter::
-
- This will be escaped: {{ data }}
- This will not be escaped: {{ data|safe }}
-
-Think of *safe* as shorthand for *safe from further escaping* or *can be
-safely interpreted as HTML*. In this example, if ``data`` contains ``'<b>'``,
-the output will be::
-
- This will be escaped: &lt;b&gt;
- This will not be escaped: <b>
-
-For template blocks
-~~~~~~~~~~~~~~~~~~~
-
-To control auto-escaping for a template, wrap the template (or just a
-particular section of the template) in the ``autoescape`` tag, like so::
-
- {% autoescape off %}
- Hello {{ name }}
- {% endautoescape %}
-
-The ``autoescape`` tag takes either ``on`` or ``off`` as its argument. At
-times, you might want to force auto-escaping when it would otherwise be
-disabled. Here is an example template::
-
- Auto-escaping is on by default. Hello {{ name }}
-
- {% autoescape off %}
- This will not be auto-escaped: {{ data }}.
-
- Nor this: {{ other_data }}
- {% autoescape on %}
- Auto-escaping applies again: {{ name }}
- {% endautoescape %}
- {% endautoescape %}
-
-The auto-escaping tag passes its effect onto templates that extend the
-current one as well as templates included via the ``include`` tag, just like
-all block tags. For example::
-
- # base.html
-
- {% autoescape off %}
- <h1>{% block title %}{% endblock %}</h1>
- {% block content %}
- {% endblock %}
- {% endautoescape %}
-
-
- # child.html
-
- {% extends "base.html" %}
- {% block title %}This & that{% endblock %}
- {% block content %}{{ greeting }}{% endblock %}
-
-Because auto-escaping is turned off in the base template, it will also be
-turned off in the child template, resulting in the following rendered
-HTML when the ``greeting`` variable contains the string ``<b>Hello!</b>``::
-
- <h1>This & that</h1>
- <b>Hello!</b>
-
-Notes
------
-
-Generally, template authors don't need to worry about auto-escaping very much.
-Developers on the Python side (people writing views and custom filters) need to
-think about the cases in which data shouldn't be escaped, and mark data
-appropriately, so things Just Work in the template.
-
-If you're creating a template that might be used in situations where you're
-not sure whether auto-escaping is enabled, then add an ``escape`` filter to any
-variable that needs escaping. When auto-escaping is on, there's no danger of
-the ``escape`` filter *double-escaping* data -- the ``escape`` filter does not
-affect auto-escaped variables.
-
-String literals and automatic escaping
---------------------------------------
-
-As we mentioned earlier, filter arguments can be strings::
-
- {{ data|default:"This is a string literal." }}
-
-All string literals are inserted **without** any automatic escaping into the
-template -- they act as if they were all passed through the ``safe`` filter.
-The reasoning behind this is that the template author is in control of what
-goes into the string literal, so they can make sure the text is correctly
-escaped when the template is written.
-
-This means you would write ::
-
- {{ data|default:"3 &lt; 2" }}
-
-...rather than ::
-
- {{ data|default:"3 < 2" }} <-- Bad! Don't do this.
-
-This doesn't affect what happens to data coming from the variable itself.
-The variable's contents are still automatically escaped, if necessary, because
-they're beyond the control of the template author.
-
-.. _loading-custom-template-libraries:
-
-Custom tag and filter libraries
-===============================
-
-Certain applications provide custom tag and filter libraries. To access them in
-a template, use the ``{% load %}`` tag::
-
- {% load comments %}
-
- {% comment_form for blogs.entries entry.id with is_public yes %}
-
-In the above, the ``load`` tag loads the ``comments`` tag library, which then
-makes the ``comment_form`` tag available for use. Consult the documentation
-area in your admin to find the list of custom libraries in your installation.
-
-The ``{% load %}`` tag can take multiple library names, separated by spaces.
-Example::
-
- {% load comments i18n %}
-
-See :doc:`/howto/custom-template-tags` for information on writing your own custom
-template libraries.
-
-Custom libraries and template inheritance
------------------------------------------
-
-When you load a custom tag or filter library, the tags/filters are only made
-available to the current template -- not any parent or child templates along
-the template-inheritance path.
-
-For example, if a template ``foo.html`` has ``{% load comments %}``, a child
-template (e.g., one that has ``{% extends "foo.html" %}``) will *not* have
-access to the comments template tags and filters. The child template is
-responsible for its own ``{% load comments %}``.
-
-This is a feature for the sake of maintainability and sanity.
diff --git a/parts/django/docs/topics/testing.txt b/parts/django/docs/topics/testing.txt
deleted file mode 100644
index 155f758..0000000
--- a/parts/django/docs/topics/testing.txt
+++ /dev/null
@@ -1,1613 +0,0 @@
-===========================
-Testing Django applications
-===========================
-
-.. module:: django.test
- :synopsis: Testing tools for Django applications.
-
-Automated testing is an extremely useful bug-killing tool for the modern
-Web developer. You can use a collection of tests -- a **test suite** -- to
-solve, or avoid, a number of problems:
-
- * When you're writing new code, you can use tests to validate your code
- works as expected.
-
- * When you're refactoring or modifying old code, you can use tests to
- ensure your changes haven't affected your application's behavior
- unexpectedly.
-
-Testing a Web application is a complex task, because a Web application is made
-of several layers of logic -- from HTTP-level request handling, to form
-validation and processing, to template rendering. With Django's test-execution
-framework and assorted utilities, you can simulate requests, insert test data,
-inspect your application's output and generally verify your code is doing what
-it should be doing.
-
-The best part is, it's really easy.
-
-This document is split into two primary sections. First, we explain how to
-write tests with Django. Then, we explain how to run them.
-
-Writing tests
-=============
-
-There are two primary ways to write tests with Django, corresponding to the
-two test frameworks that ship in the Python standard library. The two
-frameworks are:
-
- * **Doctests** -- tests that are embedded in your functions' docstrings and
- are written in a way that emulates a session of the Python interactive
- interpreter. For example::
-
- def my_func(a_list, idx):
- """
- >>> a = ['larry', 'curly', 'moe']
- >>> my_func(a, 0)
- 'larry'
- >>> my_func(a, 1)
- 'curly'
- """
- return a_list[idx]
-
- * **Unit tests** -- tests that are expressed as methods on a Python class
- that subclasses ``unittest.TestCase``. For example::
-
- import unittest
-
- class MyFuncTestCase(unittest.TestCase):
- def testBasic(self):
- a = ['larry', 'curly', 'moe']
- self.assertEquals(my_func(a, 0), 'larry')
- self.assertEquals(my_func(a, 1), 'curly')
-
-You can choose the test framework you like, depending on which syntax you
-prefer, or you can mix and match, using one framework for some of your code and
-the other framework for other code. You can also use any *other* Python test
-frameworks, as we'll explain in a bit.
-
-Writing doctests
-----------------
-
-Doctests use Python's standard doctest_ module, which searches your docstrings
-for statements that resemble a session of the Python interactive interpreter.
-A full explanation of how doctest works is out of the scope of this document;
-read Python's official documentation for the details.
-
-.. admonition:: What's a **docstring**?
-
- A good explanation of docstrings (and some guidelines for using them
- effectively) can be found in :pep:`257`:
-
- A docstring is a string literal that occurs as the first statement in
- a module, function, class, or method definition. Such a docstring
- becomes the ``__doc__`` special attribute of that object.
-
- For example, this function has a docstring that describes what it does::
-
- def add_two(num):
- "Return the result of adding two to the provided number."
- return num + 2
-
- Because tests often make great documentation, putting tests directly in
- your docstrings is an effective way to document *and* test your code.
-
-For a given Django application, the test runner looks for doctests in two
-places:
-
- * The ``models.py`` file. You can define module-level doctests and/or a
- doctest for individual models. It's common practice to put
- application-level doctests in the module docstring and model-level
- doctests in the model docstrings.
-
- * A file called ``tests.py`` in the application directory -- i.e., the
- directory that holds ``models.py``. This file is a hook for any and all
- doctests you want to write that aren't necessarily related to models.
-
-Here is an example model doctest::
-
- # models.py
-
- from django.db import models
-
- class Animal(models.Model):
- """
- An animal that knows how to make noise
-
- # Create some animals
- >>> lion = Animal.objects.create(name="lion", sound="roar")
- >>> cat = Animal.objects.create(name="cat", sound="meow")
-
- # Make 'em speak
- >>> lion.speak()
- 'The lion says "roar"'
- >>> cat.speak()
- 'The cat says "meow"'
- """
- name = models.CharField(max_length=20)
- sound = models.CharField(max_length=20)
-
- def speak(self):
- return 'The %s says "%s"' % (self.name, self.sound)
-
-When you :ref:`run your tests <running-tests>`, the test runner will find this
-docstring, notice that portions of it look like an interactive Python session,
-and execute those lines while checking that the results match.
-
-In the case of model tests, note that the test runner takes care of creating
-its own test database. That is, any test that accesses a database -- by
-creating and saving model instances, for example -- will not affect your
-production database. However, the database is not refreshed between doctests,
-so if your doctest requires a certain state you should consider flushing the
-database or loading a fixture. (See the section on fixtures, below, for more
-on this.) Note that to use this feature, the database user Django is connecting
-as must have ``CREATE DATABASE`` rights.
-
-For more details about how doctest works, see the `standard library
-documentation for doctest`_.
-
-.. _doctest: http://docs.python.org/library/doctest.html
-.. _standard library documentation for doctest: doctest_
-
-Writing unit tests
-------------------
-
-Like doctests, Django's unit tests use a standard library module: unittest_.
-This module uses a different way of defining tests, taking a class-based
-approach.
-
-As with doctests, for a given Django application, the test runner looks for
-unit tests in two places:
-
- * The ``models.py`` file. The test runner looks for any subclass of
- ``unittest.TestCase`` in this module.
-
- * A file called ``tests.py`` in the application directory -- i.e., the
- directory that holds ``models.py``. Again, the test runner looks for any
- subclass of ``unittest.TestCase`` in this module.
-
-This example ``unittest.TestCase`` subclass is equivalent to the example given
-in the doctest section above::
-
- import unittest
- from myapp.models import Animal
-
- class AnimalTestCase(unittest.TestCase):
- def setUp(self):
- self.lion = Animal.objects.create(name="lion", sound="roar")
- self.cat = Animal.objects.create(name="cat", sound="meow")
-
- def testSpeaking(self):
- self.assertEquals(self.lion.speak(), 'The lion says "roar"')
- self.assertEquals(self.cat.speak(), 'The cat says "meow"')
-
-When you :ref:`run your tests <running-tests>`, the default behavior of the
-test utility is to find all the test cases (that is, subclasses of
-``unittest.TestCase``) in ``models.py`` and ``tests.py``, automatically build a
-test suite out of those test cases, and run that suite.
-
-There is a second way to define the test suite for a module: if you define a
-function called ``suite()`` in either ``models.py`` or ``tests.py``, the
-Django test runner will use that function to construct the test suite for that
-module. This follows the `suggested organization`_ for unit tests. See the
-Python documentation for more details on how to construct a complex test
-suite.
-
-For more details about ``unittest``, see the `standard library unittest
-documentation`_.
-
-.. _unittest: http://docs.python.org/library/unittest.html
-.. _standard library unittest documentation: unittest_
-.. _suggested organization: http://docs.python.org/library/unittest.html#organizing-tests
-
-Which should I use?
--------------------
-
-Because Django supports both of the standard Python test frameworks, it's up to
-you and your tastes to decide which one to use. You can even decide to use
-*both*.
-
-For developers new to testing, however, this choice can seem confusing. Here,
-then, are a few key differences to help you decide which approach is right for
-you:
-
- * If you've been using Python for a while, ``doctest`` will probably feel
- more "pythonic". It's designed to make writing tests as easy as possible,
- so it requires no overhead of writing classes or methods. You simply put
- tests in docstrings. This has the added advantage of serving as
- documentation (and correct documentation, at that!).
-
- If you're just getting started with testing, using doctests will probably
- get you started faster.
-
- * The ``unittest`` framework will probably feel very familiar to developers
- coming from Java. ``unittest`` is inspired by Java's JUnit, so you'll
- feel at home with this method if you've used JUnit or any test framework
- inspired by JUnit.
-
- * If you need to write a bunch of tests that share similar code, then
- you'll appreciate the ``unittest`` framework's organization around
- classes and methods. This makes it easy to abstract common tasks into
- common methods. The framework also supports explicit setup and/or cleanup
- routines, which give you a high level of control over the environment
- in which your test cases are run.
-
-Again, remember that you can use both systems side-by-side (even in the same
-app). In the end, most projects will eventually end up using both. Each shines
-in different circumstances.
-
-.. _running-tests:
-
-Running tests
-=============
-
-Once you've written tests, run them using the :djadmin:`test` command of
-your project's ``manage.py`` utility::
-
- $ ./manage.py test
-
-By default, this will run every test in every application in
-:setting:`INSTALLED_APPS`. If you only want to run tests for a particular
-application, add the application name to the command line. For example, if your
-:setting:`INSTALLED_APPS` contains ``'myproject.polls'`` and
-``'myproject.animals'``, you can run the ``myproject.animals`` unit tests alone
-with this command::
-
- $ ./manage.py test animals
-
-Note that we used ``animals``, not ``myproject.animals``.
-
-.. versionadded:: 1.0
- You can now choose which test to run.
-
-You can be even *more* specific by naming an individual test case. To
-run a single test case in an application (for example, the
-``AnimalTestCase`` described in the "Writing unit tests" section), add
-the name of the test case to the label on the command line::
-
- $ ./manage.py test animals.AnimalTestCase
-
-And it gets even more granular than that! To run a *single* test
-method inside a test case, add the name of the test method to the
-label::
-
- $ ./manage.py test animals.AnimalTestCase.testFluffyAnimals
-
-.. versionadded:: 1.2
- The ability to select individual doctests was added.
-
-You can use the same rules if you're using doctests. Django will use the
-test label as a path to the test method or class that you want to run.
-If your ``models.py`` or ``tests.py`` has a function with a doctest, or
-class with a class-level doctest, you can invoke that test by appending the
-name of the test method or class to the label::
-
- $ ./manage.py test animals.classify
-
-If you want to run the doctest for a specific method in a class, add the
-name of the method to the label::
-
- $ ./manage.py test animals.Classifier.run
-
-If you're using a ``__test__`` dictionary to specify doctests for a
-module, Django will use the label as a key in the ``__test__`` dictionary
-for defined in ``models.py`` and ``tests.py``.
-
-.. versionadded:: 1.2
- You can now trigger a graceful exit from a test run by pressing ``Ctrl-C``.
-
-If you press ``Ctrl-C`` while the tests are running, the test runner will
-wait for the currently running test to complete and then exit gracefully.
-During a graceful exit the test runner will output details of any test
-failures, report on how many tests were run and how many errors and failures
-were encountered, and destroy any test databases as usual. Thus pressing
-``Ctrl-C`` can be very useful if you forget to pass the :djadminopt:`--failfast`
-option, notice that some tests are unexpectedly failing, and want to get details
-on the failures without waiting for the full test run to complete.
-
-If you do not want to wait for the currently running test to finish, you
-can press ``Ctrl-C`` a second time and the test run will halt immediately,
-but not gracefully. No details of the tests run before the interruption will
-be reported, and any test databases created by the run will not be destroyed.
-
-.. admonition:: Test with warnings enabled
-
- It is a good idea to run your tests with ``python -Wall manage.py
- test``. This will allow you to catch any deprecation warnings that
- might be in your code. Django (as well as many other libraries) use
- warnings to flag when features are deprecated. It can also flag
- areas in your code that are not strictly wrong, but may benefit
- from a better implementation.
-
-Running tests outside the test runner
--------------------------------------
-
-If you want to run tests outside of ``./manage.py test`` -- for example,
-from a shell prompt -- you will need to set up the test
-environment first. Django provides a convenience method to do this::
-
- >>> from django.test.utils import setup_test_environment
- >>> setup_test_environment()
-
-This convenience method sets up the test database, and puts other
-Django features into modes that allow for repeatable testing.
-
-The call to :meth:`~django.test.utils.setup_test_environment` is made
-automatically as part of the setup of `./manage.py test`. You only
-need to manually invoke this method if you're not using running your
-tests via Django's test runner.
-
-The test database
------------------
-
-Tests that require a database (namely, model tests) will not use your "real"
-(production) database. Separate, blank databases are created for the tests.
-
-Regardless of whether the tests pass or fail, the test databases are destroyed
-when all the tests have been executed.
-
-By default the test databases get their names by prepending ``test_``
-to the value of the :setting:`NAME` settings for the databases
-defined in :setting:`DATABASES`. When using the SQLite database engine
-the tests will by default use an in-memory database (i.e., the
-database will be created in memory, bypassing the filesystem
-entirely!). If you want to use a different database name, specify
-:setting:`TEST_NAME` in the dictionary for any given database in
-:setting:`DATABASES`.
-
-Aside from using a separate database, the test runner will otherwise
-use all of the same database settings you have in your settings file:
-:setting:`ENGINE`, :setting:`USER`, :setting:`HOST`, etc. The test
-database is created by the user specified by ``USER``, so you'll need
-to make sure that the given user account has sufficient privileges to
-create a new database on the system.
-
-.. versionadded:: 1.0
-
-For fine-grained control over the character encoding of your test
-database, use the :setting:`TEST_CHARSET` option. If you're using
-MySQL, you can also use the :setting:`TEST_COLLATION` option to
-control the particular collation used by the test database. See the
-:doc:`settings documentation </ref/settings>` for details of these
-advanced settings.
-
-.. _topics-testing-masterslave:
-
-Testing master/slave configurations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2
-
-If you're testing a multiple database configuration with master/slave
-replication, this strategy of creating test databases poses a problem.
-When the test databases are created, there won't be any replication,
-and as a result, data created on the master won't be seen on the
-slave.
-
-To compensate for this, Django allows you to define that a database is
-a *test mirror*. Consider the following (simplified) example database
-configuration::
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'myproject',
- 'HOST': 'dbmaster',
- # ... plus some other settings
- },
- 'slave': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'myproject',
- 'HOST': 'dbslave',
- 'TEST_MIRROR': 'default'
- # ... plus some other settings
- }
- }
-
-In this setup, we have two database servers: ``dbmaster``, described
-by the database alias ``default``, and ``dbslave`` described by the
-alias ``slave``. As you might expect, ``dbslave`` has been configured
-by the database administrator as a read slave of ``dbmaster``, so in
-normal activity, any write to ``default`` will appear on ``slave``.
-
-If Django created two independent test databases, this would break any
-tests that expected replication to occur. However, the ``slave``
-database has been configured as a test mirror (using the
-:setting:`TEST_MIRROR` setting), indicating that under testing,
-``slave`` should be treated as a mirror of ``default``.
-
-When the test environment is configured, a test version of ``slave``
-will *not* be created. Instead the connection to ``slave``
-will be redirected to point at ``default``. As a result, writes to
-``default`` will appear on ``slave`` -- but because they are actually
-the same database, not because there is data replication between the
-two databases.
-
-.. _topics-testing-creation-dependencies:
-
-Controlling creation order for test databases
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.2.4
-
-By default, Django will always create the ``default`` database first.
-However, no guarantees are made on the creation order of any other
-databases in your test setup.
-
-If your database configuration requires a specific creation order, you
-can specify the dependencies that exist using the
-:setting:`TEST_DEPENDENCIES` setting. Consider the following
-(simplified) example database configuration::
-
- DATABASES = {
- 'default': {
- # ... db settings
- 'TEST_DEPENDENCIES': ['diamonds']
- },
- 'diamonds': {
- # ... db settings
- },
- 'clubs': {
- # ... db settings
- 'TEST_DEPENDENCIES': ['diamonds']
- },
- 'spades': {
- # ... db settings
- 'TEST_DEPENDENCIES': ['diamonds','hearts']
- },
- 'hearts': {
- # ... db settings
- 'TEST_DEPENDENCIES': ['diamonds','clubs']
- }
- }
-
-Under this configuration, the ``diamonds`` database will be created first,
-as it is the only database alias without dependencies. The ``default``` and
-``clubs`` alias will be created next (although the order of creation of this
-pair is not guaranteed); then ``hearts``; and finally ``spades``.
-
-If there are any circular dependencies in the
-:setting:`TEST_DEPENDENCIES` definition, an ``ImproperlyConfigured``
-exception will be raised.
-
-Other test conditions
----------------------
-
-Regardless of the value of the :setting:`DEBUG` setting in your configuration
-file, all Django tests run with :setting:`DEBUG`\=False. This is to ensure that
-the observed output of your code matches what will be seen in a production
-setting.
-
-Understanding the test output
------------------------------
-
-When you run your tests, you'll see a number of messages as the test runner
-prepares itself. You can control the level of detail of these messages with the
-``verbosity`` option on the command line::
-
- Creating test database...
- Creating table myapp_animal
- Creating table myapp_mineral
- Loading 'initial_data' fixtures...
- No fixtures found.
-
-This tells you that the test runner is creating a test database, as described
-in the previous section.
-
-Once the test database has been created, Django will run your tests.
-If everything goes well, you'll see something like this::
-
- ----------------------------------------------------------------------
- Ran 22 tests in 0.221s
-
- OK
-
-If there are test failures, however, you'll see full details about which tests
-failed::
-
- ======================================================================
- FAIL: Doctest: ellington.core.throttle.models
- ----------------------------------------------------------------------
- Traceback (most recent call last):
- File "/dev/django/test/doctest.py", line 2153, in runTest
- raise self.failureException(self.format_failure(new.getvalue()))
- AssertionError: Failed doctest test for myapp.models
- File "/dev/myapp/models.py", line 0, in models
-
- ----------------------------------------------------------------------
- File "/dev/myapp/models.py", line 14, in myapp.models
- Failed example:
- throttle.check("actor A", "action one", limit=2, hours=1)
- Expected:
- True
- Got:
- False
-
- ----------------------------------------------------------------------
- Ran 2 tests in 0.048s
-
- FAILED (failures=1)
-
-A full explanation of this error output is beyond the scope of this document,
-but it's pretty intuitive. You can consult the documentation of Python's
-``unittest`` library for details.
-
-Note that the return code for the test-runner script is the total number of
-failed and erroneous tests. If all the tests pass, the return code is 0. This
-feature is useful if you're using the test-runner script in a shell script and
-need to test for success or failure at that level.
-
-Testing tools
-=============
-
-Django provides a small set of tools that come in handy when writing tests.
-
-The test client
----------------
-
-.. module:: django.test.client
- :synopsis: Django's test client.
-
-The test client is a Python class that acts as a dummy Web browser, allowing
-you to test your views and interact with your Django-powered application
-programmatically.
-
-Some of the things you can do with the test client are:
-
- * Simulate GET and POST requests on a URL and observe the response --
- everything from low-level HTTP (result headers and status codes) to
- page content.
-
- * Test that the correct view is executed for a given URL.
-
- * Test that a given request is rendered by a given Django template, with
- a template context that contains certain values.
-
-Note that the test client is not intended to be a replacement for Twill_,
-Selenium_, or other "in-browser" frameworks. Django's test client has
-a different focus. In short:
-
- * Use Django's test client to establish that the correct view is being
- called and that the view is collecting the correct context data.
-
- * Use in-browser frameworks such as Twill and Selenium to test *rendered*
- HTML and the *behavior* of Web pages, namely JavaScript functionality.
-
-A comprehensive test suite should use a combination of both test types.
-
-.. _Twill: http://twill.idyll.org/
-.. _Selenium: http://seleniumhq.org/
-
-Overview and a quick example
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To use the test client, instantiate ``django.test.client.Client`` and retrieve
-Web pages::
-
- >>> from django.test.client import Client
- >>> c = Client()
- >>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
- >>> response.status_code
- 200
- >>> response = c.get('/customer/details/')
- >>> response.content
- '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...'
-
-As this example suggests, you can instantiate ``Client`` from within a session
-of the Python interactive interpreter.
-
-Note a few important things about how the test client works:
-
- * The test client does *not* require the Web server to be running. In fact,
- it will run just fine with no Web server running at all! That's because
- it avoids the overhead of HTTP and deals directly with the Django
- framework. This helps make the unit tests run quickly.
-
- * When retrieving pages, remember to specify the *path* of the URL, not the
- whole domain. For example, this is correct::
-
- >>> c.get('/login/')
-
- This is incorrect::
-
- >>> c.get('http://www.example.com/login/')
-
- The test client is not capable of retrieving Web pages that are not
- powered by your Django project. If you need to retrieve other Web pages,
- use a Python standard library module such as urllib_ or urllib2_.
-
- * To resolve URLs, the test client uses whatever URLconf is pointed-to by
- your :setting:`ROOT_URLCONF` setting.
-
- * Although the above example would work in the Python interactive
- interpreter, some of the test client's functionality, notably the
- template-related functionality, is only available *while tests are
- running*.
-
- The reason for this is that Django's test runner performs a bit of black
- magic in order to determine which template was loaded by a given view.
- This black magic (essentially a patching of Django's template system in
- memory) only happens during test running.
-
- * By default, the test client will disable any CSRF checks
- performed by your site.
-
- .. versionadded:: 1.2.2
-
- If, for some reason, you *want* the test client to perform CSRF
- checks, you can create an instance of the test client that
- enforces CSRF checks. To do this, pass in the
- ``enforce_csrf_checks`` argument when you construct your
- client::
-
- >>> from django.test import Client
- >>> csrf_client = Client(enforce_csrf_checks=True)
-
-
-.. _urllib: http://docs.python.org/library/urllib.html
-.. _urllib2: http://docs.python.org/library/urllib2.html
-
-Making requests
-~~~~~~~~~~~~~~~
-
-Use the ``django.test.client.Client`` class to make requests. It requires no
-arguments at time of construction:
-
-.. class:: Client()
-
- Once you have a ``Client`` instance, you can call any of the following
- methods:
-
- .. method:: Client.get(path, data={}, follow=False, **extra)
-
-
- Makes a GET request on the provided ``path`` and returns a ``Response``
- object, which is documented below.
-
- The key-value pairs in the ``data`` dictionary are used to create a GET
- data payload. For example::
-
- >>> c = Client()
- >>> c.get('/customers/details/', {'name': 'fred', 'age': 7})
-
- ...will result in the evaluation of a GET request equivalent to::
-
- /customers/details/?name=fred&age=7
-
- The ``extra`` keyword arguments parameter can be used to specify
- headers to be sent in the request. For example::
-
- >>> c = Client()
- >>> c.get('/customers/details/', {'name': 'fred', 'age': 7},
- ... HTTP_X_REQUESTED_WITH='XMLHttpRequest')
-
- ...will send the HTTP header ``HTTP_X_REQUESTED_WITH`` to the
- details view, which is a good way to test code paths that use the
- :meth:`django.http.HttpRequest.is_ajax()` method.
-
- .. versionadded:: 1.1
-
- If you already have the GET arguments in URL-encoded form, you can
- use that encoding instead of using the data argument. For example,
- the previous GET request could also be posed as::
-
- >>> c = Client()
- >>> c.get('/customers/details/?name=fred&age=7')
-
- If you provide a URL with both an encoded GET data and a data argument,
- the data argument will take precedence.
-
- If you set ``follow`` to ``True`` the client will follow any redirects
- and a ``redirect_chain`` attribute will be set in the response object
- containing tuples of the intermediate urls and status codes.
-
- If you had an url ``/redirect_me/`` that redirected to ``/next/``, that
- redirected to ``/final/``, this is what you'd see::
-
- >>> response = c.get('/redirect_me/', follow=True)
- >>> response.redirect_chain
- [(u'http://testserver/next/', 302), (u'http://testserver/final/', 302)]
-
- .. method:: Client.post(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra)
-
- Makes a POST request on the provided ``path`` and returns a
- ``Response`` object, which is documented below.
-
- The key-value pairs in the ``data`` dictionary are used to submit POST
- data. For example::
-
- >>> c = Client()
- >>> c.post('/login/', {'name': 'fred', 'passwd': 'secret'})
-
- ...will result in the evaluation of a POST request to this URL::
-
- /login/
-
- ...with this POST data::
-
- name=fred&passwd=secret
-
- If you provide ``content_type`` (e.g., ``text/xml`` for an XML
- payload), the contents of ``data`` will be sent as-is in the POST
- request, using ``content_type`` in the HTTP ``Content-Type`` header.
-
- If you don't provide a value for ``content_type``, the values in
- ``data`` will be transmitted with a content type of
- ``multipart/form-data``. In this case, the key-value pairs in ``data``
- will be encoded as a multipart message and used to create the POST data
- payload.
-
- To submit multiple values for a given key -- for example, to specify
- the selections for a ``<select multiple>`` -- provide the values as a
- list or tuple for the required key. For example, this value of ``data``
- would submit three selected values for the field named ``choices``::
-
- {'choices': ('a', 'b', 'd')}
-
- Submitting files is a special case. To POST a file, you need only
- provide the file field name as a key, and a file handle to the file you
- wish to upload as a value. For example::
-
- >>> c = Client()
- >>> f = open('wishlist.doc')
- >>> c.post('/customers/wishes/', {'name': 'fred', 'attachment': f})
- >>> f.close()
-
- (The name ``attachment`` here is not relevant; use whatever name your
- file-processing code expects.)
-
- Note that if you wish to use the same file handle for multiple
- ``post()`` calls then you will need to manually reset the file
- pointer between posts. The easiest way to do this is to
- manually close the file after it has been provided to
- ``post()``, as demonstrated above.
-
- You should also ensure that the file is opened in a way that
- allows the data to be read. If your file contains binary data
- such as an image, this means you will need to open the file in
- ``rb`` (read binary) mode.
-
- The ``extra`` argument acts the same as for :meth:`Client.get`.
-
- .. versionchanged:: 1.1
-
- If the URL you request with a POST contains encoded parameters, these
- parameters will be made available in the request.GET data. For example,
- if you were to make the request::
-
- >>> c.post('/login/?visitor=true', {'name': 'fred', 'passwd': 'secret'})
-
- ... the view handling this request could interrogate request.POST
- to retrieve the username and password, and could interrogate request.GET
- to determine if the user was a visitor.
-
- If you set ``follow`` to ``True`` the client will follow any redirects
- and a ``redirect_chain`` attribute will be set in the response object
- containing tuples of the intermediate urls and status codes.
-
- .. method:: Client.head(path, data={}, follow=False, **extra)
-
- .. versionadded:: 1.1
-
- Makes a HEAD request on the provided ``path`` and returns a ``Response``
- object. Useful for testing RESTful interfaces. Acts just like
- :meth:`Client.get` except it does not return a message body.
-
- If you set ``follow`` to ``True`` the client will follow any redirects
- and a ``redirect_chain`` attribute will be set in the response object
- containing tuples of the intermediate urls and status codes.
-
- .. method:: Client.options(path, data={}, follow=False, **extra)
-
- .. versionadded:: 1.1
-
- Makes an OPTIONS request on the provided ``path`` and returns a
- ``Response`` object. Useful for testing RESTful interfaces.
-
- If you set ``follow`` to ``True`` the client will follow any redirects
- and a ``redirect_chain`` attribute will be set in the response object
- containing tuples of the intermediate urls and status codes.
-
- The ``extra`` argument acts the same as for :meth:`Client.get`.
-
- .. method:: Client.put(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra)
-
- .. versionadded:: 1.1
-
- Makes a PUT request on the provided ``path`` and returns a
- ``Response`` object. Useful for testing RESTful interfaces. Acts just
- like :meth:`Client.post` except with the PUT request method.
-
- If you set ``follow`` to ``True`` the client will follow any redirects
- and a ``redirect_chain`` attribute will be set in the response object
- containing tuples of the intermediate urls and status codes.
-
- .. method:: Client.delete(path, follow=False, **extra)
-
- .. versionadded:: 1.1
-
- Makes an DELETE request on the provided ``path`` and returns a
- ``Response`` object. Useful for testing RESTful interfaces.
-
- If you set ``follow`` to ``True`` the client will follow any redirects
- and a ``redirect_chain`` attribute will be set in the response object
- containing tuples of the intermediate urls and status codes.
-
- The ``extra`` argument acts the same as for :meth:`Client.get`.
-
- .. method:: Client.login(**credentials)
-
- .. versionadded:: 1.0
-
- If your site uses Django's :doc:`authentication system</topics/auth>`
- and you deal with logging in users, you can use the test client's
- ``login()`` method to simulate the effect of a user logging into the
- site.
-
- After you call this method, the test client will have all the cookies
- and session data required to pass any login-based tests that may form
- part of a view.
-
- The format of the ``credentials`` argument depends on which
- :ref:`authentication backend <authentication-backends>` you're using
- (which is configured by your :setting:`AUTHENTICATION_BACKENDS`
- setting). If you're using the standard authentication backend provided
- by Django (``ModelBackend``), ``credentials`` should be the user's
- username and password, provided as keyword arguments::
-
- >>> c = Client()
- >>> c.login(username='fred', password='secret')
-
- # Now you can access a view that's only available to logged-in users.
-
- If you're using a different authentication backend, this method may
- require different credentials. It requires whichever credentials are
- required by your backend's ``authenticate()`` method.
-
- ``login()`` returns ``True`` if it the credentials were accepted and
- login was successful.
-
- Finally, you'll need to remember to create user accounts before you can
- use this method. As we explained above, the test runner is executed
- using a test database, which contains no users by default. As a result,
- user accounts that are valid on your production site will not work
- under test conditions. You'll need to create users as part of the test
- suite -- either manually (using the Django model API) or with a test
- fixture. Remember that if you want your test user to have a password,
- you can't set the user's password by setting the password attribute
- directly -- you must use the
- :meth:`~django.contrib.auth.models.User.set_password()` function to
- store a correctly hashed password. Alternatively, you can use the
- :meth:`~django.contrib.auth.models.UserManager.create_user` helper
- method to create a new user with a correctly hashed password.
-
- .. method:: Client.logout()
-
- .. versionadded:: 1.0
-
- If your site uses Django's :doc:`authentication system</topics/auth>`,
- the ``logout()`` method can be used to simulate the effect of a user
- logging out of your site.
-
- After you call this method, the test client will have all the cookies
- and session data cleared to defaults. Subsequent requests will appear
- to come from an AnonymousUser.
-
-Testing responses
-~~~~~~~~~~~~~~~~~
-
-The ``get()`` and ``post()`` methods both return a ``Response`` object. This
-``Response`` object is *not* the same as the ``HttpResponse`` object returned
-Django views; the test response object has some additional data useful for
-test code to verify.
-
-Specifically, a ``Response`` object has the following attributes:
-
-.. class:: Response()
-
- .. attribute:: client
-
- The test client that was used to make the request that resulted in the
- response.
-
- .. attribute:: content
-
- The body of the response, as a string. This is the final page content as
- rendered by the view, or any error message.
-
- .. attribute:: context
-
- The template ``Context`` instance that was used to render the template that
- produced the response content.
-
- If the rendered page used multiple templates, then ``context`` will be a
- list of ``Context`` objects, in the order in which they were rendered.
-
- .. versionadded:: 1.1
-
- Regardless of the number of templates used during rendering, you can
- retrieve context values using the ``[]`` operator. For example, the
- context variable ``name`` could be retrieved using::
-
- >>> response = client.get('/foo/')
- >>> response.context['name']
- 'Arthur'
-
- .. attribute:: request
-
- The request data that stimulated the response.
-
- .. attribute:: status_code
-
- The HTTP status of the response, as an integer. See RFC2616_ for a full
- list of HTTP status codes.
-
- .. attribute:: template
-
- The ``Template`` instance that was used to render the final content. Use
- ``template.name`` to get the template's file name, if the template was
- loaded from a file. (The name is a string such as ``'admin/index.html'``.)
-
- If the rendered page used multiple templates -- e.g., using :ref:`template
- inheritance<template-inheritance>` -- then ``template`` will be a list of
- ``Template`` instances, in the order in which they were rendered.
-
-You can also use dictionary syntax on the response object to query the value
-of any settings in the HTTP headers. For example, you could determine the
-content type of a response using ``response['Content-Type']``.
-
-.. _RFC2616: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
-
-Exceptions
-~~~~~~~~~~
-
-If you point the test client at a view that raises an exception, that exception
-will be visible in the test case. You can then use a standard ``try...except``
-block or ``unittest.TestCase.assertRaises()`` to test for exceptions.
-
-The only exceptions that are not visible to the test client are ``Http404``,
-``PermissionDenied`` and ``SystemExit``. Django catches these exceptions
-internally and converts them into the appropriate HTTP response codes. In these
-cases, you can check ``response.status_code`` in your test.
-
-Persistent state
-~~~~~~~~~~~~~~~~
-
-The test client is stateful. If a response returns a cookie, then that cookie
-will be stored in the test client and sent with all subsequent ``get()`` and
-``post()`` requests.
-
-Expiration policies for these cookies are not followed. If you want a cookie
-to expire, either delete it manually or create a new ``Client`` instance (which
-will effectively delete all cookies).
-
-A test client has two attributes that store persistent state information. You
-can access these properties as part of a test condition.
-
-.. attribute:: Client.cookies
-
- A Python ``SimpleCookie`` object, containing the current values of all the
- client cookies. See the `Cookie module documentation`_ for more.
-
-.. attribute:: Client.session
-
- A dictionary-like object containing session information. See the
- :doc:`session documentation</topics/http/sessions>` for full details.
-
- To modify the session and then save it, it must be stored in a variable
- first (because a new ``SessionStore`` is created every time this property
- is accessed)::
-
- def test_something(self):
- session = self.client.session
- session['somekey'] = 'test'
- session.save()
-
-.. _Cookie module documentation: http://docs.python.org/library/cookie.html
-
-Example
-~~~~~~~
-
-The following is a simple unit test using the test client::
-
- import unittest
- from django.test.client import Client
-
- class SimpleTest(unittest.TestCase):
- def setUp(self):
- # Every test needs a client.
- self.client = Client()
-
- def test_details(self):
- # Issue a GET request.
- response = self.client.get('/customer/details/')
-
- # Check that the response is 200 OK.
- self.failUnlessEqual(response.status_code, 200)
-
- # Check that the rendered context contains 5 customers.
- self.failUnlessEqual(len(response.context['customers']), 5)
-
-TestCase
---------
-
-.. currentmodule:: django.test
-
-Normal Python unit test classes extend a base class of ``unittest.TestCase``.
-Django provides an extension of this base class:
-
-.. class:: TestCase()
-
-This class provides some additional capabilities that can be useful for testing
-Web sites.
-
-Converting a normal ``unittest.TestCase`` to a Django ``TestCase`` is easy:
-just change the base class of your test from ``unittest.TestCase`` to
-``django.test.TestCase``. All of the standard Python unit test functionality
-will continue to be available, but it will be augmented with some useful
-additions.
-
-.. versionadded:: 1.1
-
-.. class:: TransactionTestCase()
-
-Django ``TestCase`` classes make use of database transaction facilities, if
-available, to speed up the process of resetting the database to a known state
-at the beginning of each test. A consequence of this, however, is that the
-effects of transaction commit and rollback cannot be tested by a Django
-``TestCase`` class. If your test requires testing of such transactional
-behavior, you should use a Django ``TransactionTestCase``.
-
-``TransactionTestCase`` and ``TestCase`` are identical except for the manner
-in which the database is reset to a known state and the ability for test code
-to test the effects of commit and rollback. A ``TransactionTestCase`` resets
-the database before the test runs by truncating all tables and reloading
-initial data. A ``TransactionTestCase`` may call commit and rollback and
-observe the effects of these calls on the database.
-
-A ``TestCase``, on the other hand, does not truncate tables and reload initial
-data at the beginning of a test. Instead, it encloses the test code in a
-database transaction that is rolled back at the end of the test. It also
-prevents the code under test from issuing any commit or rollback operations
-on the database, to ensure that the rollback at the end of the test restores
-the database to its initial state. In order to guarantee that all ``TestCase``
-code starts with a clean database, the Django test runner runs all ``TestCase``
-tests first, before any other tests (e.g. doctests) that may alter the
-database without restoring it to its original state.
-
-When running on a database that does not support rollback (e.g. MySQL with the
-MyISAM storage engine), ``TestCase`` falls back to initializing the database
-by truncating tables and reloading initial data.
-
-
-.. note::
- The ``TestCase`` use of rollback to un-do the effects of the test code
- may reveal previously-undetected errors in test code. For example,
- test code that assumes primary keys values will be assigned starting at
- one may find that assumption no longer holds true when rollbacks instead
- of table truncation are being used to reset the database. Similarly,
- the reordering of tests so that all ``TestCase`` classes run first may
- reveal unexpected dependencies on test case ordering. In such cases a
- quick fix is to switch the ``TestCase`` to a ``TransactionTestCase``.
- A better long-term fix, that allows the test to take advantage of the
- speed benefit of ``TestCase``, is to fix the underlying test problem.
-
-
-Default test client
-~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. attribute:: TestCase.client
-
-Every test case in a ``django.test.TestCase`` instance has access to an
-instance of a Django test client. This client can be accessed as
-``self.client``. This client is recreated for each test, so you don't have to
-worry about state (such as cookies) carrying over from one test to another.
-
-This means, instead of instantiating a ``Client`` in each test::
-
- import unittest
- from django.test.client import Client
-
- class SimpleTest(unittest.TestCase):
- def test_details(self):
- client = Client()
- response = client.get('/customer/details/')
- self.failUnlessEqual(response.status_code, 200)
-
- def test_index(self):
- client = Client()
- response = client.get('/customer/index/')
- self.failUnlessEqual(response.status_code, 200)
-
-...you can just refer to ``self.client``, like so::
-
- from django.test import TestCase
-
- class SimpleTest(TestCase):
- def test_details(self):
- response = self.client.get('/customer/details/')
- self.failUnlessEqual(response.status_code, 200)
-
- def test_index(self):
- response = self.client.get('/customer/index/')
- self.failUnlessEqual(response.status_code, 200)
-
-.. _topics-testing-fixtures:
-
-Fixture loading
-~~~~~~~~~~~~~~~
-
-.. attribute:: TestCase.fixtures
-
-A test case for a database-backed Web site isn't much use if there isn't any
-data in the database. To make it easy to put test data into the database,
-Django's custom ``TestCase`` class provides a way of loading **fixtures**.
-
-A fixture is a collection of data that Django knows how to import into a
-database. For example, if your site has user accounts, you might set up a
-fixture of fake user accounts in order to populate your database during tests.
-
-The most straightforward way of creating a fixture is to use the
-:djadmin:`manage.py dumpdata <dumpdata>` command. This assumes you
-already have some data in your database. See the :djadmin:`dumpdata
-documentation<dumpdata>` for more details.
-
-.. note::
- If you've ever run :djadmin:`manage.py syncdb<syncdb>`, you've
- already used a fixture without even knowing it! When you call
- :djadmin:`syncdb` in the database for the first time, Django
- installs a fixture called ``initial_data``. This gives you a way
- of populating a new database with any initial data, such as a
- default set of categories.
-
- Fixtures with other names can always be installed manually using
- the :djadmin:`manage.py loaddata<loaddata>` command.
-
-Once you've created a fixture and placed it in a ``fixtures`` directory in one
-of your :setting:`INSTALLED_APPS`, you can use it in your unit tests by
-specifying a ``fixtures`` class attribute on your :class:`django.test.TestCase`
-subclass::
-
- from django.test import TestCase
- from myapp.models import Animal
-
- class AnimalTestCase(TestCase):
- fixtures = ['mammals.json', 'birds']
-
- def setUp(self):
- # Test definitions as before.
- call_setup_methods()
-
- def testFluffyAnimals(self):
- # A test that uses the fixtures.
- call_some_test_code()
-
-Here's specifically what will happen:
-
- * At the start of each test case, before ``setUp()`` is run, Django will
- flush the database, returning the database to the state it was in
- directly after :djadmin:`syncdb` was called.
-
- * Then, all the named fixtures are installed. In this example, Django will
- install any JSON fixture named ``mammals``, followed by any fixture named
- ``birds``. See the :djadmin:`loaddata` documentation for more
- details on defining and installing fixtures.
-
-This flush/load procedure is repeated for each test in the test case, so you
-can be certain that the outcome of a test will not be affected by another test,
-or by the order of test execution.
-
-URLconf configuration
-~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. attribute:: TestCase.urls
-
-If your application provides views, you may want to include tests that use the
-test client to exercise those views. However, an end user is free to deploy the
-views in your application at any URL of their choosing. This means that your
-tests can't rely upon the fact that your views will be available at a
-particular URL.
-
-In order to provide a reliable URL space for your test,
-``django.test.TestCase`` provides the ability to customize the URLconf
-configuration for the duration of the execution of a test suite. If your
-``TestCase`` instance defines an ``urls`` attribute, the ``TestCase`` will use
-the value of that attribute as the ``ROOT_URLCONF`` for the duration of that
-test.
-
-For example::
-
- from django.test import TestCase
-
- class TestMyViews(TestCase):
- urls = 'myapp.test_urls'
-
- def testIndexPageView(self):
- # Here you'd test your view using ``Client``.
- call_some_test_code()
-
-This test case will use the contents of ``myapp.test_urls`` as the
-URLconf for the duration of the test case.
-
-.. _emptying-test-outbox:
-
-Multi-database support
-~~~~~~~~~~~~~~~~~~~~~~
-
-.. attribute:: TestCase.multi_db
-
-.. versionadded:: 1.2
-
-Django sets up a test database corresponding to every database that is
-defined in the :setting:`DATABASES` definition in your settings
-file. However, a big part of the time taken to run a Django TestCase
-is consumed by the call to ``flush`` that ensures that you have a
-clean database at the start of each test run. If you have multiple
-databases, multiple flushes are required (one for each database),
-which can be a time consuming activity -- especially if your tests
-don't need to test multi-database activity.
-
-As an optimization, Django only flushes the ``default`` database at
-the start of each test run. If your setup contains multiple databases,
-and you have a test that requires every database to be clean, you can
-use the ``multi_db`` attribute on the test suite to request a full
-flush.
-
-For example::
-
- class TestMyViews(TestCase):
- multi_db = True
-
- def testIndexPageView(self):
- call_some_test_code()
-
-This test case will flush *all* the test databases before running
-``testIndexPageView``.
-
-Emptying the test outbox
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-If you use Django's custom ``TestCase`` class, the test runner will clear the
-contents of the test e-mail outbox at the start of each test case.
-
-For more detail on e-mail services during tests, see `E-mail services`_.
-
-Assertions
-~~~~~~~~~~
-
-.. versionadded:: 1.0
-
-.. versionchanged:: 1.2
- Addded ``msg_prefix`` argument.
-
-As Python's normal ``unittest.TestCase`` class implements assertion methods
-such as ``assertTrue`` and ``assertEquals``, Django's custom ``TestCase`` class
-provides a number of custom assertion methods that are useful for testing Web
-applications:
-
-The failure messages given by the assertion methods can be customized
-with the ``msg_prefix`` argument. This string will be prefixed to any
-failure message generated by the assertion. This allows you to provide
-additional details that may help you to identify the location and
-cause of an failure in your test suite.
-
-.. method:: TestCase.assertContains(response, text, count=None, status_code=200, msg_prefix='')
-
- Asserts that a ``Response`` instance produced the given ``status_code`` and
- that ``text`` appears in the content of the response. If ``count`` is
- provided, ``text`` must occur exactly ``count`` times in the response.
-
-.. method:: TestCase.assertNotContains(response, text, status_code=200, msg_prefix='')
-
- Asserts that a ``Response`` instance produced the given ``status_code`` and
- that ``text`` does not appears in the content of the response.
-
-.. method:: TestCase.assertFormError(response, form, field, errors, msg_prefix='')
-
- Asserts that a field on a form raises the provided list of errors when
- rendered on the form.
-
- ``form`` is the name the ``Form`` instance was given in the template
- context.
-
- ``field`` is the name of the field on the form to check. If ``field``
- has a value of ``None``, non-field errors (errors you can access via
- ``form.non_field_errors()``) will be checked.
-
- ``errors`` is an error string, or a list of error strings, that are
- expected as a result of form validation.
-
-.. method:: TestCase.assertTemplateUsed(response, template_name, msg_prefix='')
-
- Asserts that the template with the given name was used in rendering the
- response.
-
- The name is a string such as ``'admin/index.html'``.
-
-.. method:: TestCase.assertTemplateNotUsed(response, template_name, msg_prefix='')
-
- Asserts that the template with the given name was *not* used in rendering
- the response.
-
-.. method:: TestCase.assertRedirects(response, expected_url, status_code=302, target_status_code=200, msg_prefix='')
-
- Asserts that the response return a ``status_code`` redirect status, it
- redirected to ``expected_url`` (including any GET data), and the final
- page was received with ``target_status_code``.
-
- .. versionadded:: 1.1
-
- If your request used the ``follow`` argument, the ``expected_url`` and
- ``target_status_code`` will be the url and status code for the final
- point of the redirect chain.
-
-.. _topics-testing-email:
-
-E-mail services
----------------
-
-.. versionadded:: 1.0
-
-If any of your Django views send e-mail using :doc:`Django's e-mail
-functionality </topics/email>`, you probably don't want to send e-mail each time
-you run a test using that view. For this reason, Django's test runner
-automatically redirects all Django-sent e-mail to a dummy outbox. This lets you
-test every aspect of sending e-mail -- from the number of messages sent to the
-contents of each message -- without actually sending the messages.
-
-The test runner accomplishes this by transparently replacing the normal
-email backend with a testing backend.
-(Don't worry -- this has no effect on any other e-mail senders outside of
-Django, such as your machine's mail server, if you're running one.)
-
-.. currentmodule:: django.core.mail
-
-.. data:: django.core.mail.outbox
-
-During test running, each outgoing e-mail is saved in
-``django.core.mail.outbox``. This is a simple list of all
-:class:`~django.core.mail.EmailMessage` instances that have been sent.
-The ``outbox`` attribute is a special attribute that is created *only* when
-the ``locmem`` e-mail backend is used. It doesn't normally exist as part of the
-:mod:`django.core.mail` module and you can't import it directly. The code
-below shows how to access this attribute correctly.
-
-Here's an example test that examines ``django.core.mail.outbox`` for length
-and contents::
-
- from django.core import mail
- from django.test import TestCase
-
- class EmailTest(TestCase):
- def test_send_email(self):
- # Send message.
- mail.send_mail('Subject here', 'Here is the message.',
- 'from@example.com', ['to@example.com'],
- fail_silently=False)
-
- # Test that one message has been sent.
- self.assertEquals(len(mail.outbox), 1)
-
- # Verify that the subject of the first message is correct.
- self.assertEquals(mail.outbox[0].subject, 'Subject here')
-
-As noted :ref:`previously <emptying-test-outbox>`, the test outbox is emptied
-at the start of every test in a Django ``TestCase``. To empty the outbox
-manually, assign the empty list to ``mail.outbox``::
-
- from django.core import mail
-
- # Empty the test outbox
- mail.outbox = []
-
-Using different testing frameworks
-==================================
-
-Clearly, ``doctest`` and ``unittest`` are not the only Python testing
-frameworks. While Django doesn't provide explicit support for alternative
-frameworks, it does provide a way to invoke tests constructed for an
-alternative framework as if they were normal Django tests.
-
-When you run ``./manage.py test``, Django looks at the :setting:`TEST_RUNNER`
-setting to determine what to do. By default, :setting:`TEST_RUNNER` points to
-``'django.test.simple.DjangoTestSuiteRunner'``. This class defines the default Django
-testing behavior. This behavior involves:
-
- #. Performing global pre-test setup.
-
- #. Looking for unit tests and doctests in the ``models.py`` and
- ``tests.py`` files in each installed application.
-
- #. Creating the test databases.
-
- #. Running ``syncdb`` to install models and initial data into the test
- databases.
-
- #. Running the unit tests and doctests that are found.
-
- #. Destroying the test databases.
-
- #. Performing global post-test teardown.
-
-If you define your own test runner class and point :setting:`TEST_RUNNER` at
-that class, Django will execute your test runner whenever you run
-``./manage.py test``. In this way, it is possible to use any test framework
-that can be executed from Python code, or to modify the Django test execution
-process to satisfy whatever testing requirements you may have.
-
-.. _topics-testing-test_runner:
-
-Defining a test runner
-----------------------
-
-.. versionchanged:: 1.2
- Prior to 1.2, test runners were a single function, not a class.
-
-.. currentmodule:: django.test.simple
-
-A test runner is a class defining a ``run_tests()`` method. Django ships
-with a ``DjangoTestSuiteRunner`` class that defines the default Django
-testing behavior. This class defines the ``run_tests()`` entry point,
-plus a selection of other methods that are used to by ``run_tests()`` to
-set up, execute and tear down the test suite.
-
-.. class:: DjangoTestSuiteRunner(verbosity=1, interactive=True, failfast=True, **kwargs)
-
- ``verbosity`` determines the amount of notification and debug information
- that will be printed to the console; ``0`` is no output, ``1`` is normal
- output, and ``2`` is verbose output.
-
- If ``interactive`` is ``True``, the test suite has permission to ask the
- user for instructions when the test suite is executed. An example of this
- behavior would be asking for permission to delete an existing test
- database. If ``interactive`` is ``False``, the test suite must be able to
- run without any manual intervention.
-
- If ``failfast`` is ``True``, the test suite will stop running after the
- first test failure is detected.
-
- Django will, from time to time, extend the capabilities of
- the test runner by adding new arguments. The ``**kwargs`` declaration
- allows for this expansion. If you subclass ``DjangoTestSuiteRunner`` or
- write your own test runner, ensure accept and handle the ``**kwargs``
- parameter.
-
-.. method:: DjangoTestSuiteRunner.run_tests(test_labels, extra_tests=None, **kwargs)
-
- Run the test suite.
-
- ``test_labels`` is a list of strings describing the tests to be run. A test
- label can take one of three forms:
-
- * ``app.TestCase.test_method`` -- Run a single test method in a test
- case.
- * ``app.TestCase`` -- Run all the test methods in a test case.
- * ``app`` -- Search for and run all tests in the named application.
-
- If ``test_labels`` has a value of ``None``, the test runner should run
- search for tests in all the applications in :setting:`INSTALLED_APPS`.
-
- ``extra_tests`` is a list of extra ``TestCase`` instances to add to the
- suite that is executed by the test runner. These extra tests are run
- in addition to those discovered in the modules listed in ``test_labels``.
-
- This method should return the number of tests that failed.
-
-.. method:: DjangoTestSuiteRunner.setup_test_environment(**kwargs)
-
- Sets up the test environment ready for testing.
-
-.. method:: DjangoTestSuiteRunner.build_suite(test_labels, extra_tests=None, **kwargs)
-
- Constructs a test suite that matches the test labels provided.
-
- ``test_labels`` is a list of strings describing the tests to be run. A test
- label can take one of three forms:
-
- * ``app.TestCase.test_method`` -- Run a single test method in a test
- case.
- * ``app.TestCase`` -- Run all the test methods in a test case.
- * ``app`` -- Search for and run all tests in the named application.
-
- If ``test_labels`` has a value of ``None``, the test runner should run
- search for tests in all the applications in :setting:`INSTALLED_APPS`.
-
- ``extra_tests`` is a list of extra ``TestCase`` instances to add to the
- suite that is executed by the test runner. These extra tests are run
- in addition to those discovered in the modules listed in ``test_labels``.
-
- Returns a ``TestSuite`` instance ready to be run.
-
-.. method:: DjangoTestSuiteRunner.setup_databases(**kwargs)
-
- Creates the test databases.
-
- Returns a data structure that provides enough detail to undo the changes
- that have been made. This data will be provided to the ``teardown_databases()``
- function at the conclusion of testing.
-
-.. method:: DjangoTestSuiteRunner.run_suite(suite, **kwargs)
-
- Runs the test suite.
-
- Returns the result produced by the running the test suite.
-
-.. method:: DjangoTestSuiteRunner.teardown_databases(old_config, **kwargs)
-
- Destroys the test databases, restoring pre-test conditions.
-
- ``old_config`` is a data structure defining the changes in the
- database configuration that need to be reversed. It is the return
- value of the ``setup_databases()`` method.
-
-.. method:: DjangoTestSuiteRunner.teardown_test_environment(**kwargs)
-
- Restores the pre-test environment.
-
-.. method:: DjangoTestSuiteRunner.suite_result(suite, result, **kwargs)
-
- Computes and returns a return code based on a test suite, and the result
- from that test suite.
-
-
-Testing utilities
------------------
-
-.. module:: django.test.utils
- :synopsis: Helpers to write custom test runners.
-
-To assist in the creation of your own test runner, Django provides a number of
-utility methods in the ``django.test.utils`` module.
-
-.. function:: setup_test_environment()
-
- Performs any global pre-test setup, such as the installing the
- instrumentation of the template rendering system and setting up
- the dummy ``SMTPConnection``.
-
-.. function:: teardown_test_environment()
-
- Performs any global post-test teardown, such as removing the black
- magic hooks into the template system and restoring normal e-mail
- services.
-
-The creation module of the database backend (``connection.creation``)
-also provides some utilities that can be useful during testing.
-
-.. function:: create_test_db(verbosity=1, autoclobber=False)
-
- Creates a new test database and runs ``syncdb`` against it.
-
- ``verbosity`` has the same behavior as in ``run_tests()``.
-
- ``autoclobber`` describes the behavior that will occur if a
- database with the same name as the test database is discovered:
-
- * If ``autoclobber`` is ``False``, the user will be asked to
- approve destroying the existing database. ``sys.exit`` is
- called if the user does not approve.
-
- * If autoclobber is ``True``, the database will be destroyed
- without consulting the user.
-
- Returns the name of the test database that it created.
-
- ``create_test_db()`` has the side effect of modifying the value of
- :setting:`NAME` in :setting:`DATABASES` to match the name of the test
- database.
-
- .. versionchanged:: 1.0
- ``create_test_db()`` now returns the name of the test database.
-
-.. function:: destroy_test_db(old_database_name, verbosity=1)
-
- Destroys the database whose name is in stored in :setting:`NAME` in the
- :setting:`DATABASES`, and sets :setting:`NAME` to use the
- provided name.
-
- ``verbosity`` has the same behavior as in ``run_tests()``.
diff --git a/parts/django/extras/README.TXT b/parts/django/extras/README.TXT
deleted file mode 100644
index 3fb2a84..0000000
--- a/parts/django/extras/README.TXT
+++ /dev/null
@@ -1 +0,0 @@
-This directory contains extra stuff that can improve your Django experience.
diff --git a/parts/django/extras/csrf_migration_helper.py b/parts/django/extras/csrf_migration_helper.py
deleted file mode 100644
index 6416193..0000000
--- a/parts/django/extras/csrf_migration_helper.py
+++ /dev/null
@@ -1,357 +0,0 @@
-#!/usr/bin/env python
-
-# This script aims to help developers locate forms and view code that needs to
-# use the new CSRF protection in Django 1.2. It tries to find all the code that
-# may need the steps described in the CSRF documentation. It does not modify
-# any code directly, it merely attempts to locate it. Developers should be
-# aware of its limitations, described below.
-#
-# For each template that contains at least one POST form, the following info is printed:
-#
-# <Absolute path to template>
-# AKA: <Aliases (relative to template directory/directories that contain it)>
-# POST forms: <Number of POST forms>
-# With token: <Number of POST forms with the CSRF token already added>
-# Without token:
-# <File name and line number of form without token>
-#
-# Searching for:
-# <Template names that need to be searched for in view code
-# (includes templates that 'include' current template)>
-#
-# Found:
-# <File name and line number of any view code found>
-#
-# The format used allows this script to be used in Emacs grep mode:
-# M-x grep
-# Run grep (like this): /path/to/my/virtualenv/python /path/to/django/src/extras/csrf_migration_helper.py --settings=mysettings /path/to/my/srcs
-
-
-# Limitations
-# ===========
-#
-# - All templates must be stored on disk in '.html' or '.htm' files.
-# (extensions configurable below)
-#
-# - All Python code must be stored on disk in '.py' files. (extensions
-# configurable below)
-#
-# - All templates must be accessible from TEMPLATE_DIRS or from the 'templates/'
-# directory in apps specified in INSTALLED_APPS. Non-file based template
-# loaders are out of the picture, because there is no way to ask them to
-# return all templates.
-#
-# - If you put the {% csrf_token %} tag on the same line as the <form> tag it
-# will be detected, otherwise it will be assumed that the form does not have
-# the token.
-#
-# - It's impossible to programmatically determine which forms should and should
-# not have the token added. The developer must decide when to do this,
-# ensuring that the token is only added to internally targetted forms.
-#
-# - It's impossible to programmatically work out when a template is used. The
-# attempts to trace back to view functions are guesses, and could easily fail
-# in the following ways:
-#
-# * If the 'include' template tag is used with a variable
-# i.e. {% include tname %} where tname is a variable containing the actual
-# template name, rather than {% include "my_template.html" %}.
-#
-# * If the template name has been built up by view code instead of as a simple
-# string. For example, generic views and the admin both do this. (These
-# apps are both contrib and both use RequestContext already, as it happens).
-#
-# * If the 'ssl' tag (or any template tag other than 'include') is used to
-# include the template in another template.
-#
-# - All templates belonging to apps referenced in INSTALLED_APPS will be
-# searched, which may include third party apps or Django contrib. In some
-# cases, this will be a good thing, because even if the templates of these
-# apps have been fixed by someone else, your own view code may reference the
-# same template and may need to be updated.
-#
-# You may, however, wish to comment out some entries in INSTALLED_APPS or
-# TEMPLATE_DIRS before running this script.
-
-# Improvements to this script are welcome!
-
-# Configuration
-# =============
-
-TEMPLATE_EXTENSIONS = [
- ".html",
- ".htm",
- ]
-
-PYTHON_SOURCE_EXTENSIONS = [
- ".py",
- ]
-
-TEMPLATE_ENCODING = "UTF-8"
-
-PYTHON_ENCODING = "UTF-8"
-
-# Method
-# ======
-
-# Find templates:
-# - template dirs
-# - installed apps
-#
-# Search for POST forms
-# - Work out what the name of the template is, as it would appear in an
-# 'include' or get_template() call. This can be done by comparing template
-# filename to all template dirs. Some templates can have more than one
-# 'name' e.g. if a directory and one of its child directories are both in
-# TEMPLATE_DIRS. This is actually a common hack used for
-# overriding-and-extending admin templates.
-#
-# For each POST form,
-# - see if it already contains '{% csrf_token %}' immediately after <form>
-# - work back to the view function(s):
-# - First, see if the form is included in any other templates, then
-# recursively compile a list of affected templates.
-# - Find any code function that references that template. This is just a
-# brute force text search that can easily return false positives
-# and fail to find real instances.
-
-
-import os
-import sys
-import re
-from optparse import OptionParser
-
-USAGE = """
-This tool helps to locate forms that need CSRF tokens added and the
-corresponding view code. This processing is NOT fool proof, and you should read
-the help contained in the script itself. Also, this script may need configuring
-(by editing the script) before use.
-
-Usage:
-
-python csrf_migration_helper.py [--settings=path.to.your.settings] /path/to/python/code [more paths...]
-
- Paths can be specified as relative paths.
-
- With no arguments, this help is printed.
-"""
-
-_POST_FORM_RE = \
- re.compile(r'(<form\W[^>]*\bmethod\s*=\s*(\'|"|)POST(\'|"|)\b[^>]*>)', re.IGNORECASE)
-_TOKEN_RE = re.compile('\{% csrf_token')
-
-def get_template_dirs():
- """
- Returns a set of all directories that contain project templates.
- """
- from django.conf import settings
- dirs = set()
- if ('django.template.loaders.filesystem.load_template_source' in settings.TEMPLATE_LOADERS
- or 'django.template.loaders.filesystem.Loader' in settings.TEMPLATE_LOADERS):
- dirs.update(map(unicode, settings.TEMPLATE_DIRS))
-
- if ('django.template.loaders.app_directories.load_template_source' in settings.TEMPLATE_LOADERS
- or 'django.template.loaders.app_directories.Loader' in settings.TEMPLATE_LOADERS):
- from django.template.loaders.app_directories import app_template_dirs
- dirs.update(app_template_dirs)
- return dirs
-
-def make_template_info(filename, root_dirs):
- """
- Creates a Template object for a filename, calculating the possible
- relative_filenames from the supplied filename and root template directories
- """
- return Template(filename,
- [filename[len(d)+1:] for d in root_dirs if filename.startswith(d)])
-
-
-class Template(object):
- def __init__(self, absolute_filename, relative_filenames):
- self.absolute_filename, self.relative_filenames = absolute_filename, relative_filenames
-
- def content(self):
- try:
- return self._content
- except AttributeError:
- fd = open(self.absolute_filename)
- try:
- content = fd.read().decode(TEMPLATE_ENCODING)
- except UnicodeDecodeError, e:
- message = '%s in %s' % (
- e[4], self.absolute_filename.encode('UTF-8', 'ignore'))
- raise UnicodeDecodeError(*(e.args[:4] + (message,)))
- fd.close()
- self._content = content
- return content
- content = property(content)
-
- def post_form_info(self):
- """
- Get information about any POST forms in the template.
- Returns [(linenumber, csrf_token added)]
- """
- matches = []
- for ln, line in enumerate(self.content.split("\n")):
- m = _POST_FORM_RE.search(line)
- if m is not None:
- matches.append((ln + 1, _TOKEN_RE.search(line) is not None))
- return matches
-
- def includes_template(self, t):
- """
- Returns true if this template includes template 't' (via {% include %})
- """
- for r in t.relative_filenames:
- if re.search(r'\{%\s*include\s+(\'|")' + re.escape(r) + r'(\1)\s*%\}', self.content):
- return True
- return False
-
- def related_templates(self):
- """
- Returns all templates that include this one, recursively. (starting
- with this one)
- """
- try:
- return self._related_templates
- except AttributeError:
- pass
-
- retval = set([self])
- for t in self.all_templates:
- if t.includes_template(self):
- # If two templates mutually include each other, directly or
- # indirectly, we have a problem here...
- retval = retval.union(t.related_templates())
-
- self._related_templates = retval
- return retval
-
- def __repr__(self):
- return repr(self.absolute_filename)
-
- def __eq__(self, other):
- return self.absolute_filename == other.absolute_filename
-
- def __hash__(self):
- return hash(self.absolute_filename)
-
-def get_templates(dirs):
- """
- Returns all files in dirs that have template extensions, as Template
- objects.
- """
- templates = set()
- for root in dirs:
- for (dirpath, dirnames, filenames) in os.walk(root):
- for f in filenames:
- if len([True for e in TEMPLATE_EXTENSIONS if f.endswith(e)]) > 0:
- t = make_template_info(os.path.join(dirpath, f), dirs)
- # templates need to be able to search others:
- t.all_templates = templates
- templates.add(t)
- return templates
-
-def get_python_code(paths):
- """
- Returns all Python code, as a list of tuples, each one being:
- (filename, list of lines)
- """
- retval = []
- for p in paths:
- if not os.path.isdir(p):
- raise Exception("'%s' is not a directory." % p)
- for (dirpath, dirnames, filenames) in os.walk(p):
- for f in filenames:
- if len([True for e in PYTHON_SOURCE_EXTENSIONS if f.endswith(e)]) > 0:
- fn = os.path.join(dirpath, f)
- fd = open(fn)
- content = [l.decode(PYTHON_ENCODING) for l in fd.readlines()]
- fd.close()
- retval.append((fn, content))
- return retval
-
-def search_python_list(python_code, template_names):
- """
- Searches python code for a list of template names.
- Returns a list of tuples, each one being:
- (filename, line number)
- """
- retval = []
- for tn in template_names:
- retval.extend(search_python(python_code, tn))
- retval = list(set(retval))
- retval.sort()
- return retval
-
-def search_python(python_code, template_name):
- """
- Searches Python code for a template name.
- Returns a list of tuples, each one being:
- (filename, line number)
- """
- retval = []
- for fn, content in python_code:
- for ln, line in enumerate(content):
- if ((u'"%s"' % template_name) in line) or \
- ((u"'%s'" % template_name) in line):
- retval.append((fn, ln + 1))
- return retval
-
-def main(pythonpaths):
- template_dirs = get_template_dirs()
- templates = get_templates(template_dirs)
- python_code = get_python_code(pythonpaths)
- for t in templates:
- # Logic
- form_matches = t.post_form_info()
- num_post_forms = len(form_matches)
- form_lines_without_token = [ln for (ln, has_token) in form_matches if not has_token]
- if num_post_forms == 0:
- continue
- to_search = [rf for rt in t.related_templates() for rf in rt.relative_filenames]
- found = search_python_list(python_code, to_search)
-
- # Display:
- print t.absolute_filename
- for r in t.relative_filenames:
- print u" AKA %s" % r
- print u" POST forms: %s" % num_post_forms
- print u" With token: %s" % (num_post_forms - len(form_lines_without_token))
- if form_lines_without_token:
- print u" Without token:"
- for ln in form_lines_without_token:
- print "%s:%d:" % (t.absolute_filename, ln)
- print
- print u" Searching for:"
- for r in to_search:
- print u" " + r
- print
- print u" Found:"
- if len(found) == 0:
- print " Nothing"
- else:
- for fn, ln in found:
- print "%s:%d:" % (fn, ln)
-
- print
- print "----"
-
-
-parser = OptionParser(usage=USAGE)
-parser.add_option("", "--settings", action="store", dest="settings", help="Dotted path to settings file")
-
-if __name__ == '__main__':
- options, args = parser.parse_args()
- if len(args) == 0:
- parser.print_help()
- sys.exit(1)
-
- settings = getattr(options, 'settings', None)
- if settings is None:
- if os.environ.get("DJANGO_SETTINGS_MODULE", None) is None:
- print "You need to set DJANGO_SETTINGS_MODULE or use the '--settings' parameter"
- sys.exit(1)
- else:
- os.environ["DJANGO_SETTINGS_MODULE"] = settings
-
- main(args)
diff --git a/parts/django/extras/django_bash_completion b/parts/django/extras/django_bash_completion
deleted file mode 100755
index 1c3887e..0000000
--- a/parts/django/extras/django_bash_completion
+++ /dev/null
@@ -1,72 +0,0 @@
-# #########################################################################
-# This bash script adds tab-completion feature to django-admin.py and
-# manage.py.
-#
-# Testing it out without installing
-# =================================
-#
-# To test out the completion without "installing" this, just run this file
-# directly, like so:
-#
-# . ~/path/to/django_bash_completion
-#
-# Note: There's a dot ('.') at the beginning of that command.
-#
-# After you do that, tab completion will immediately be made available in your
-# current Bash shell. But it won't be available next time you log in.
-#
-# Installing
-# ==========
-#
-# To install this, point to this file from your .bash_profile, like so:
-#
-# . ~/path/to/django_bash_completion
-#
-# Do the same in your .bashrc if .bashrc doesn't invoke .bash_profile.
-#
-# Settings will take effect the next time you log in.
-#
-# Uninstalling
-# ============
-#
-# To uninstall, just remove the line from your .bash_profile and .bashrc.
-
-_django_completion()
-{
- COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \
- COMP_CWORD=$COMP_CWORD \
- DJANGO_AUTO_COMPLETE=1 $1 ) )
-}
-complete -F _django_completion -o default django-admin.py manage.py django-admin
-
-_python_django_completion()
-{
- if [[ ${COMP_CWORD} -ge 2 ]]; then
- PYTHON_EXE=$( basename -- ${COMP_WORDS[0]} )
- echo $PYTHON_EXE | egrep "python([2-9]\.[0-9])?" >/dev/null 2>&1
- if [[ $? == 0 ]]; then
- PYTHON_SCRIPT=$( basename -- ${COMP_WORDS[1]} )
- echo $PYTHON_SCRIPT | egrep "manage\.py|django-admin(\.py)?" >/dev/null 2>&1
- if [[ $? == 0 ]]; then
- COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]:1}" \
- COMP_CWORD=$(( COMP_CWORD-1 )) \
- DJANGO_AUTO_COMPLETE=1 ${COMP_WORDS[*]} ) )
- fi
- fi
- fi
-}
-
-# Support for multiple interpreters.
-unset pythons
-if command -v whereis &>/dev/null; then
- python_interpreters=$(whereis python | cut -d " " -f 2-)
- for python in $python_interpreters; do
- pythons="${pythons} $(basename -- $python)"
- done
- pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
-else
- pythons=python
-fi
-
-complete -F _python_django_completion -o default $pythons
-
diff --git a/parts/django/scripts/rpm-install.sh b/parts/django/scripts/rpm-install.sh
deleted file mode 100644
index f337a78..0000000
--- a/parts/django/scripts/rpm-install.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#! /bin/sh
-#
-# This file becomes the install section of the generated spec file.
-#
-
-# This is what dist.py normally does.
-python setup.py install --root=${RPM_BUILD_ROOT} --record="INSTALLED_FILES"
-
-# Sort the filelist so that directories appear before files. This avoids
-# duplicate filename problems on some systems.
-touch DIRS
-for i in `cat INSTALLED_FILES`; do
- if [ -f ${RPM_BUILD_ROOT}/$i ]; then
- echo $i >>FILES
- fi
- if [ -d ${RPM_BUILD_ROOT}/$i ]; then
- echo %dir $i >>DIRS
- fi
-done
-
-# Make sure we match foo.pyo and foo.pyc along with foo.py (but only once each)
-sed -e "/\.py[co]$/d" -e "s/\.py$/.py*/" DIRS FILES >INSTALLED_FILES
-
-mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man1/
-cp docs/man/* ${RPM_BUILD_ROOT}/%{_mandir}/man1/
-cat << EOF >> INSTALLED_FILES
-%doc %{_mandir}/man1/*"
-EOF
diff --git a/parts/django/setup.cfg b/parts/django/setup.cfg
deleted file mode 100644
index 37cc9a5..0000000
--- a/parts/django/setup.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-[bdist_rpm]
-doc_files = docs extras AUTHORS INSTALL LICENSE README
-install-script = scripts/rpm-install.sh
-
diff --git a/parts/django/setup.py b/parts/django/setup.py
deleted file mode 100644
index e04062a..0000000
--- a/parts/django/setup.py
+++ /dev/null
@@ -1,98 +0,0 @@
-from distutils.core import setup
-from distutils.command.install_data import install_data
-from distutils.command.install import INSTALL_SCHEMES
-import os
-import sys
-
-class osx_install_data(install_data):
- # On MacOS, the platform-specific lib dir is /System/Library/Framework/Python/.../
- # which is wrong. Python 2.5 supplied with MacOS 10.5 has an Apple-specific fix
- # for this in distutils.command.install_data#306. It fixes install_lib but not
- # install_data, which is why we roll our own install_data class.
-
- def finalize_options(self):
- # By the time finalize_options is called, install.install_lib is set to the
- # fixed directory, so we set the installdir to install_lib. The
- # install_data class uses ('install_data', 'install_dir') instead.
- self.set_undefined_options('install', ('install_lib', 'install_dir'))
- install_data.finalize_options(self)
-
-if sys.platform == "darwin":
- cmdclasses = {'install_data': osx_install_data}
-else:
- cmdclasses = {'install_data': install_data}
-
-def fullsplit(path, result=None):
- """
- Split a pathname into components (the opposite of os.path.join) in a
- platform-neutral way.
- """
- if result is None:
- result = []
- head, tail = os.path.split(path)
- if head == '':
- return [tail] + result
- if head == path:
- return result
- return fullsplit(head, [tail] + result)
-
-# Tell distutils to put the data_files in platform-specific installation
-# locations. See here for an explanation:
-# http://groups.google.com/group/comp.lang.python/browse_thread/thread/35ec7b2fed36eaec/2105ee4d9e8042cb
-for scheme in INSTALL_SCHEMES.values():
- scheme['data'] = scheme['purelib']
-
-# Compile the list of packages available, because distutils doesn't have
-# an easy way to do this.
-packages, data_files = [], []
-root_dir = os.path.dirname(__file__)
-if root_dir != '':
- os.chdir(root_dir)
-django_dir = 'django'
-
-for dirpath, dirnames, filenames in os.walk(django_dir):
- # Ignore dirnames that start with '.'
- for i, dirname in enumerate(dirnames):
- if dirname.startswith('.'): del dirnames[i]
- if '__init__.py' in filenames:
- packages.append('.'.join(fullsplit(dirpath)))
- elif filenames:
- data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])
-
-# Small hack for working with bdist_wininst.
-# See http://mail.python.org/pipermail/distutils-sig/2004-August/004134.html
-if len(sys.argv) > 1 and sys.argv[1] == 'bdist_wininst':
- for file_info in data_files:
- file_info[0] = '\\PURELIB\\%s' % file_info[0]
-
-# Dynamically calculate the version based on django.VERSION.
-version = __import__('django').get_version()
-if u'SVN' in version:
- version = ' '.join(version.split(' ')[:-1])
-
-setup(
- name = "Django",
- version = version.replace(' ', '-'),
- url = 'http://www.djangoproject.com/',
- author = 'Django Software Foundation',
- author_email = 'foundation@djangoproject.com',
- description = 'A high-level Python Web framework that encourages rapid development and clean, pragmatic design.',
- download_url = 'http://media.djangoproject.com/releases/1.2/Django-1.2.4.tar.gz',
- packages = packages,
- cmdclass = cmdclasses,
- data_files = data_files,
- scripts = ['django/bin/django-admin.py'],
- classifiers = ['Development Status :: 5 - Production/Stable',
- 'Environment :: Web Environment',
- 'Framework :: Django',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: BSD License',
- 'Operating System :: OS Independent',
- 'Programming Language :: Python',
- 'Topic :: Internet :: WWW/HTTP',
- 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
- 'Topic :: Internet :: WWW/HTTP :: WSGI',
- 'Topic :: Software Development :: Libraries :: Application Frameworks',
- 'Topic :: Software Development :: Libraries :: Python Modules',
- ],
-)
diff --git a/parts/django/tests/modeltests/__init__.py b/parts/django/tests/modeltests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/aggregation/__init__.py b/parts/django/tests/modeltests/aggregation/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/aggregation/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/aggregation/fixtures/initial_data.json b/parts/django/tests/modeltests/aggregation/fixtures/initial_data.json
deleted file mode 100644
index a002100..0000000
--- a/parts/django/tests/modeltests/aggregation/fixtures/initial_data.json
+++ /dev/null
@@ -1,243 +0,0 @@
-[
- {
- "pk": 1,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Apress",
- "num_awards": 3
- }
- },
- {
- "pk": 2,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Sams",
- "num_awards": 1
- }
- },
- {
- "pk": 3,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Prentice Hall",
- "num_awards": 7
- }
- },
- {
- "pk": 4,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Morgan Kaufmann",
- "num_awards": 9
- }
- },
- {
- "pk": 5,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Jonno's House of Books",
- "num_awards": 0
- }
- },
- {
- "pk": 1,
- "model": "aggregation.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059725",
- "name": "The Definitive Guide to Django: Web Development Done Right",
- "price": "30.00",
- "rating": 4.5,
- "authors": [1, 2],
- "contact": 1,
- "pages": 447,
- "pubdate": "2007-12-6"
- }
- },
- {
- "pk": 2,
- "model": "aggregation.book",
- "fields": {
- "publisher": 2,
- "isbn": "067232959",
- "name": "Sams Teach Yourself Django in 24 Hours",
- "price": "23.09",
- "rating": 3.0,
- "authors": [3],
- "contact": 3,
- "pages": 528,
- "pubdate": "2008-3-3"
- }
- },
- {
- "pk": 3,
- "model": "aggregation.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059996",
- "name": "Practical Django Projects",
- "price": "29.69",
- "rating": 4.0,
- "authors": [4],
- "contact": 4,
- "pages": 300,
- "pubdate": "2008-6-23"
- }
- },
- {
- "pk": 4,
- "model": "aggregation.book",
- "fields": {
- "publisher": 3,
- "isbn": "013235613",
- "name": "Python Web Development with Django",
- "price": "29.69",
- "rating": 4.0,
- "authors": [5, 6, 7],
- "contact": 5,
- "pages": 350,
- "pubdate": "2008-11-3"
- }
- },
- {
- "pk": 5,
- "model": "aggregation.book",
- "fields": {
- "publisher": 3,
- "isbn": "013790395",
- "name": "Artificial Intelligence: A Modern Approach",
- "price": "82.80",
- "rating": 4.0,
- "authors": [8, 9],
- "contact": 8,
- "pages": 1132,
- "pubdate": "1995-1-15"
- }
- },
- {
- "pk": 6,
- "model": "aggregation.book",
- "fields": {
- "publisher": 4,
- "isbn": "155860191",
- "name": "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp",
- "price": "75.00",
- "rating": 5.0,
- "authors": [8],
- "contact": 8,
- "pages": 946,
- "pubdate": "1991-10-15"
- }
- },
- {
- "pk": 1,
- "model": "aggregation.store",
- "fields": {
- "books": [1, 2, 3, 4, 5, 6],
- "name": "Amazon.com",
- "original_opening": "1994-4-23 9:17:42",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 2,
- "model": "aggregation.store",
- "fields": {
- "books": [1, 3, 5, 6],
- "name": "Books.com",
- "original_opening": "2001-3-15 11:23:37",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 3,
- "model": "aggregation.store",
- "fields": {
- "books": [3, 4, 6],
- "name": "Mamma and Pappa's Books",
- "original_opening": "1945-4-25 16:24:14",
- "friday_night_closing": "21:30:00"
- }
- },
- {
- "pk": 1,
- "model": "aggregation.author",
- "fields": {
- "age": 34,
- "friends": [2, 4],
- "name": "Adrian Holovaty"
- }
- },
- {
- "pk": 2,
- "model": "aggregation.author",
- "fields": {
- "age": 35,
- "friends": [1, 7],
- "name": "Jacob Kaplan-Moss"
- }
- },
- {
- "pk": 3,
- "model": "aggregation.author",
- "fields": {
- "age": 45,
- "friends": [],
- "name": "Brad Dayley"
- }
- },
- {
- "pk": 4,
- "model": "aggregation.author",
- "fields": {
- "age": 29,
- "friends": [1],
- "name": "James Bennett"
- }
- },
- {
- "pk": 5,
- "model": "aggregation.author",
- "fields": {
- "age": 37,
- "friends": [6, 7],
- "name": "Jeffrey Forcier"
- }
- },
- {
- "pk": 6,
- "model": "aggregation.author",
- "fields": {
- "age": 29,
- "friends": [5, 7],
- "name": "Paul Bissex"
- }
- },
- {
- "pk": 7,
- "model": "aggregation.author",
- "fields": {
- "age": 25,
- "friends": [2, 5, 6],
- "name": "Wesley J. Chun"
- }
- },
- {
- "pk": 8,
- "model": "aggregation.author",
- "fields": {
- "age": 57,
- "friends": [9],
- "name": "Peter Norvig"
- }
- },
- {
- "pk": 9,
- "model": "aggregation.author",
- "fields": {
- "age": 46,
- "friends": [8],
- "name": "Stuart Russell"
- }
- }
-]
diff --git a/parts/django/tests/modeltests/aggregation/models.py b/parts/django/tests/modeltests/aggregation/models.py
deleted file mode 100644
index ccc1289..0000000
--- a/parts/django/tests/modeltests/aggregation/models.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# coding: utf-8
-from django.db import models
-
-
-class Author(models.Model):
- name = models.CharField(max_length=100)
- age = models.IntegerField()
- friends = models.ManyToManyField('self', blank=True)
-
- def __unicode__(self):
- return self.name
-
-class Publisher(models.Model):
- name = models.CharField(max_length=255)
- num_awards = models.IntegerField()
-
- def __unicode__(self):
- return self.name
-
-class Book(models.Model):
- isbn = models.CharField(max_length=9)
- name = models.CharField(max_length=255)
- pages = models.IntegerField()
- rating = models.FloatField()
- price = models.DecimalField(decimal_places=2, max_digits=6)
- authors = models.ManyToManyField(Author)
- contact = models.ForeignKey(Author, related_name='book_contact_set')
- publisher = models.ForeignKey(Publisher)
- pubdate = models.DateField()
-
- def __unicode__(self):
- return self.name
-
-class Store(models.Model):
- name = models.CharField(max_length=255)
- books = models.ManyToManyField(Book)
- original_opening = models.DateTimeField()
- friday_night_closing = models.TimeField()
-
- def __unicode__(self):
- return self.name
-
diff --git a/parts/django/tests/modeltests/aggregation/tests.py b/parts/django/tests/modeltests/aggregation/tests.py
deleted file mode 100644
index c830368..0000000
--- a/parts/django/tests/modeltests/aggregation/tests.py
+++ /dev/null
@@ -1,565 +0,0 @@
-import datetime
-from decimal import Decimal
-
-from django.db.models import Avg, Sum, Count, Max, Min
-from django.test import TestCase, Approximate
-
-from models import Author, Publisher, Book, Store
-
-
-class BaseAggregateTestCase(TestCase):
- fixtures = ["initial_data.json"]
-
- def test_empty_aggregate(self):
- self.assertEqual(Author.objects.all().aggregate(), {})
-
- def test_single_aggregate(self):
- vals = Author.objects.aggregate(Avg("age"))
- self.assertEqual(vals, {"age__avg": Approximate(37.4, places=1)})
-
- def test_multiple_aggregates(self):
- vals = Author.objects.aggregate(Sum("age"), Avg("age"))
- self.assertEqual(vals, {"age__sum": 337, "age__avg": Approximate(37.4, places=1)})
-
- def test_filter_aggregate(self):
- vals = Author.objects.filter(age__gt=29).aggregate(Sum("age"))
- self.assertEqual(len(vals), 1)
- self.assertEqual(vals["age__sum"], 254)
-
- def test_related_aggregate(self):
- vals = Author.objects.aggregate(Avg("friends__age"))
- self.assertEqual(len(vals), 1)
- self.assertAlmostEqual(vals["friends__age__avg"], 34.07, places=2)
-
- vals = Book.objects.filter(rating__lt=4.5).aggregate(Avg("authors__age"))
- self.assertEqual(len(vals), 1)
- self.assertAlmostEqual(vals["authors__age__avg"], 38.2857, places=2)
-
- vals = Author.objects.all().filter(name__contains="a").aggregate(Avg("book__rating"))
- self.assertEqual(len(vals), 1)
- self.assertEqual(vals["book__rating__avg"], 4.0)
-
- vals = Book.objects.aggregate(Sum("publisher__num_awards"))
- self.assertEqual(len(vals), 1)
- self.assertEquals(vals["publisher__num_awards__sum"], 30)
-
- vals = Publisher.objects.aggregate(Sum("book__price"))
- self.assertEqual(len(vals), 1)
- self.assertEqual(vals["book__price__sum"], Decimal("270.27"))
-
- def test_aggregate_multi_join(self):
- vals = Store.objects.aggregate(Max("books__authors__age"))
- self.assertEqual(len(vals), 1)
- self.assertEqual(vals["books__authors__age__max"], 57)
-
- vals = Author.objects.aggregate(Min("book__publisher__num_awards"))
- self.assertEqual(len(vals), 1)
- self.assertEqual(vals["book__publisher__num_awards__min"], 1)
-
- def test_aggregate_alias(self):
- vals = Store.objects.filter(name="Amazon.com").aggregate(amazon_mean=Avg("books__rating"))
- self.assertEqual(len(vals), 1)
- self.assertAlmostEqual(vals["amazon_mean"], 4.08, places=2)
-
- def test_annotate_basic(self):
- self.assertQuerysetEqual(
- Book.objects.annotate().order_by('pk'), [
- "The Definitive Guide to Django: Web Development Done Right",
- "Sams Teach Yourself Django in 24 Hours",
- "Practical Django Projects",
- "Python Web Development with Django",
- "Artificial Intelligence: A Modern Approach",
- "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp"
- ],
- lambda b: b.name
- )
-
- books = Book.objects.annotate(mean_age=Avg("authors__age"))
- b = books.get(pk=1)
- self.assertEqual(
- b.name,
- u'The Definitive Guide to Django: Web Development Done Right'
- )
- self.assertEqual(b.mean_age, 34.5)
-
- def test_annotate_m2m(self):
- books = Book.objects.filter(rating__lt=4.5).annotate(Avg("authors__age")).order_by("name")
- self.assertQuerysetEqual(
- books, [
- (u'Artificial Intelligence: A Modern Approach', 51.5),
- (u'Practical Django Projects', 29.0),
- (u'Python Web Development with Django', Approximate(30.3, places=1)),
- (u'Sams Teach Yourself Django in 24 Hours', 45.0)
- ],
- lambda b: (b.name, b.authors__age__avg),
- )
-
- books = Book.objects.annotate(num_authors=Count("authors")).order_by("name")
- self.assertQuerysetEqual(
- books, [
- (u'Artificial Intelligence: A Modern Approach', 2),
- (u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp', 1),
- (u'Practical Django Projects', 1),
- (u'Python Web Development with Django', 3),
- (u'Sams Teach Yourself Django in 24 Hours', 1),
- (u'The Definitive Guide to Django: Web Development Done Right', 2)
- ],
- lambda b: (b.name, b.num_authors)
- )
-
- def test_backwards_m2m_annotate(self):
- authors = Author.objects.filter(name__contains="a").annotate(Avg("book__rating")).order_by("name")
- self.assertQuerysetEqual(
- authors, [
- (u'Adrian Holovaty', 4.5),
- (u'Brad Dayley', 3.0),
- (u'Jacob Kaplan-Moss', 4.5),
- (u'James Bennett', 4.0),
- (u'Paul Bissex', 4.0),
- (u'Stuart Russell', 4.0)
- ],
- lambda a: (a.name, a.book__rating__avg)
- )
-
- authors = Author.objects.annotate(num_books=Count("book")).order_by("name")
- self.assertQuerysetEqual(
- authors, [
- (u'Adrian Holovaty', 1),
- (u'Brad Dayley', 1),
- (u'Jacob Kaplan-Moss', 1),
- (u'James Bennett', 1),
- (u'Jeffrey Forcier', 1),
- (u'Paul Bissex', 1),
- (u'Peter Norvig', 2),
- (u'Stuart Russell', 1),
- (u'Wesley J. Chun', 1)
- ],
- lambda a: (a.name, a.num_books)
- )
-
- def test_reverse_fkey_annotate(self):
- books = Book.objects.annotate(Sum("publisher__num_awards")).order_by("name")
- self.assertQuerysetEqual(
- books, [
- (u'Artificial Intelligence: A Modern Approach', 7),
- (u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp', 9),
- (u'Practical Django Projects', 3),
- (u'Python Web Development with Django', 7),
- (u'Sams Teach Yourself Django in 24 Hours', 1),
- (u'The Definitive Guide to Django: Web Development Done Right', 3)
- ],
- lambda b: (b.name, b.publisher__num_awards__sum)
- )
-
- publishers = Publisher.objects.annotate(Sum("book__price")).order_by("name")
- self.assertQuerysetEqual(
- publishers, [
- (u'Apress', Decimal("59.69")),
- (u"Jonno's House of Books", None),
- (u'Morgan Kaufmann', Decimal("75.00")),
- (u'Prentice Hall', Decimal("112.49")),
- (u'Sams', Decimal("23.09"))
- ],
- lambda p: (p.name, p.book__price__sum)
- )
-
- def test_annotate_values(self):
- books = list(Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values())
- self.assertEqual(
- books, [
- {
- "contact_id": 1,
- "id": 1,
- "isbn": "159059725",
- "mean_age": 34.5,
- "name": "The Definitive Guide to Django: Web Development Done Right",
- "pages": 447,
- "price": Approximate(Decimal("30")),
- "pubdate": datetime.date(2007, 12, 6),
- "publisher_id": 1,
- "rating": 4.5,
- }
- ]
- )
-
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg('authors__age')).values('pk', 'isbn', 'mean_age')
- self.assertEqual(
- list(books), [
- {
- "pk": 1,
- "isbn": "159059725",
- "mean_age": 34.5,
- }
- ]
- )
-
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values("name")
- self.assertEqual(
- list(books), [
- {
- "name": "The Definitive Guide to Django: Web Development Done Right"
- }
- ]
- )
-
- books = Book.objects.filter(pk=1).values().annotate(mean_age=Avg('authors__age'))
- self.assertEqual(
- list(books), [
- {
- "contact_id": 1,
- "id": 1,
- "isbn": "159059725",
- "mean_age": 34.5,
- "name": "The Definitive Guide to Django: Web Development Done Right",
- "pages": 447,
- "price": Approximate(Decimal("30")),
- "pubdate": datetime.date(2007, 12, 6),
- "publisher_id": 1,
- "rating": 4.5,
- }
- ]
- )
-
- books = Book.objects.values("rating").annotate(n_authors=Count("authors__id"), mean_age=Avg("authors__age")).order_by("rating")
- self.assertEqual(
- list(books), [
- {
- "rating": 3.0,
- "n_authors": 1,
- "mean_age": 45.0,
- },
- {
- "rating": 4.0,
- "n_authors": 6,
- "mean_age": Approximate(37.16, places=1)
- },
- {
- "rating": 4.5,
- "n_authors": 2,
- "mean_age": 34.5,
- },
- {
- "rating": 5.0,
- "n_authors": 1,
- "mean_age": 57.0,
- }
- ]
- )
-
- authors = Author.objects.annotate(Avg("friends__age")).order_by("name")
- self.assertEqual(len(authors), 9)
- self.assertQuerysetEqual(
- authors, [
- (u'Adrian Holovaty', 32.0),
- (u'Brad Dayley', None),
- (u'Jacob Kaplan-Moss', 29.5),
- (u'James Bennett', 34.0),
- (u'Jeffrey Forcier', 27.0),
- (u'Paul Bissex', 31.0),
- (u'Peter Norvig', 46.0),
- (u'Stuart Russell', 57.0),
- (u'Wesley J. Chun', Approximate(33.66, places=1))
- ],
- lambda a: (a.name, a.friends__age__avg)
- )
-
- def test_count(self):
- vals = Book.objects.aggregate(Count("rating"))
- self.assertEqual(vals, {"rating__count": 6})
-
- vals = Book.objects.aggregate(Count("rating", distinct=True))
- self.assertEqual(vals, {"rating__count": 4})
-
- def test_fkey_aggregate(self):
- explicit = list(Author.objects.annotate(Count('book__id')))
- implicit = list(Author.objects.annotate(Count('book')))
- self.assertEqual(explicit, implicit)
-
- def test_annotate_ordering(self):
- books = Book.objects.values('rating').annotate(oldest=Max('authors__age')).order_by('oldest', 'rating')
- self.assertEqual(
- list(books), [
- {
- "rating": 4.5,
- "oldest": 35,
- },
- {
- "rating": 3.0,
- "oldest": 45
- },
- {
- "rating": 4.0,
- "oldest": 57,
- },
- {
- "rating": 5.0,
- "oldest": 57,
- }
- ]
- )
-
- books = Book.objects.values("rating").annotate(oldest=Max("authors__age")).order_by("-oldest", "-rating")
- self.assertEqual(
- list(books), [
- {
- "rating": 5.0,
- "oldest": 57,
- },
- {
- "rating": 4.0,
- "oldest": 57,
- },
- {
- "rating": 3.0,
- "oldest": 45,
- },
- {
- "rating": 4.5,
- "oldest": 35,
- }
- ]
- )
-
- def test_aggregate_annotation(self):
- vals = Book.objects.annotate(num_authors=Count("authors__id")).aggregate(Avg("num_authors"))
- self.assertEqual(vals, {"num_authors__avg": Approximate(1.66, places=1)})
-
- def test_filtering(self):
- p = Publisher.objects.create(name='Expensive Publisher', num_awards=0)
- Book.objects.create(
- name='ExpensiveBook1',
- pages=1,
- isbn='111',
- rating=3.5,
- price=Decimal("1000"),
- publisher=p,
- contact_id=1,
- pubdate=datetime.date(2008,12,1)
- )
- Book.objects.create(
- name='ExpensiveBook2',
- pages=1,
- isbn='222',
- rating=4.0,
- price=Decimal("1000"),
- publisher=p,
- contact_id=1,
- pubdate=datetime.date(2008,12,2)
- )
- Book.objects.create(
- name='ExpensiveBook3',
- pages=1,
- isbn='333',
- rating=4.5,
- price=Decimal("35"),
- publisher=p,
- contact_id=1,
- pubdate=datetime.date(2008,12,3)
- )
-
- publishers = Publisher.objects.annotate(num_books=Count("book__id")).filter(num_books__gt=1).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Prentice Hall",
- "Expensive Publisher",
- ],
- lambda p: p.name,
- )
-
- publishers = Publisher.objects.filter(book__price__lt=Decimal("40.0")).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Apress",
- "Sams",
- "Prentice Hall",
- "Expensive Publisher",
- ],
- lambda p: p.name
- )
-
- publishers = Publisher.objects.annotate(num_books=Count("book__id")).filter(num_books__gt=1, book__price__lt=Decimal("40.0")).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Prentice Hall",
- "Expensive Publisher",
- ],
- lambda p: p.name,
- )
-
- publishers = Publisher.objects.filter(book__price__lt=Decimal("40.0")).annotate(num_books=Count("book__id")).filter(num_books__gt=1).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- ],
- lambda p: p.name
- )
-
- publishers = Publisher.objects.annotate(num_books=Count("book")).filter(num_books__range=[1, 3]).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Sams",
- "Prentice Hall",
- "Morgan Kaufmann",
- "Expensive Publisher",
- ],
- lambda p: p.name
- )
-
- publishers = Publisher.objects.annotate(num_books=Count("book")).filter(num_books__range=[1, 2]).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Sams",
- "Prentice Hall",
- "Morgan Kaufmann",
- ],
- lambda p: p.name
- )
-
- publishers = Publisher.objects.annotate(num_books=Count("book")).filter(num_books__in=[1, 3]).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Sams",
- "Morgan Kaufmann",
- "Expensive Publisher",
- ],
- lambda p: p.name,
- )
-
- publishers = Publisher.objects.annotate(num_books=Count("book")).filter(num_books__isnull=True)
- self.assertEqual(len(publishers), 0)
-
- def test_annotation(self):
- vals = Author.objects.filter(pk=1).aggregate(Count("friends__id"))
- self.assertEqual(vals, {"friends__id__count": 2})
-
- books = Book.objects.annotate(num_authors=Count("authors__name")).filter(num_authors__ge=2).order_by("pk")
- self.assertQuerysetEqual(
- books, [
- "The Definitive Guide to Django: Web Development Done Right",
- "Artificial Intelligence: A Modern Approach",
- ],
- lambda b: b.name
- )
-
- authors = Author.objects.annotate(num_friends=Count("friends__id", distinct=True)).filter(num_friends=0).order_by("pk")
- self.assertQuerysetEqual(
- authors, [
- "Brad Dayley",
- ],
- lambda a: a.name
- )
-
- publishers = Publisher.objects.annotate(num_books=Count("book__id")).filter(num_books__gt=1).order_by("pk")
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Prentice Hall",
- ],
- lambda p: p.name
- )
-
- publishers = Publisher.objects.filter(book__price__lt=Decimal("40.0")).annotate(num_books=Count("book__id")).filter(num_books__gt=1)
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- ],
- lambda p: p.name
- )
-
- books = Book.objects.annotate(num_authors=Count("authors__id")).filter(authors__name__contains="Norvig", num_authors__gt=1)
- self.assertQuerysetEqual(
- books, [
- "Artificial Intelligence: A Modern Approach",
- ],
- lambda b: b.name
- )
-
- def test_more_aggregation(self):
- a = Author.objects.get(name__contains='Norvig')
- b = Book.objects.get(name__contains='Done Right')
- b.authors.add(a)
- b.save()
-
- vals = Book.objects.annotate(num_authors=Count("authors__id")).filter(authors__name__contains="Norvig", num_authors__gt=1).aggregate(Avg("rating"))
- self.assertEqual(vals, {"rating__avg": 4.25})
-
- def test_even_more_aggregate(self):
- publishers = Publisher.objects.annotate(earliest_book=Min("book__pubdate")).exclude(earliest_book=None).order_by("earliest_book").values()
- self.assertEqual(
- list(publishers), [
- {
- 'earliest_book': datetime.date(1991, 10, 15),
- 'num_awards': 9,
- 'id': 4,
- 'name': u'Morgan Kaufmann'
- },
- {
- 'earliest_book': datetime.date(1995, 1, 15),
- 'num_awards': 7,
- 'id': 3,
- 'name': u'Prentice Hall'
- },
- {
- 'earliest_book': datetime.date(2007, 12, 6),
- 'num_awards': 3,
- 'id': 1,
- 'name': u'Apress'
- },
- {
- 'earliest_book': datetime.date(2008, 3, 3),
- 'num_awards': 1,
- 'id': 2,
- 'name': u'Sams'
- }
- ]
- )
-
- vals = Store.objects.aggregate(Max("friday_night_closing"), Min("original_opening"))
- self.assertEqual(
- vals,
- {
- "friday_night_closing__max": datetime.time(23, 59, 59),
- "original_opening__min": datetime.datetime(1945, 4, 25, 16, 24, 14),
- }
- )
-
- def test_annotate_values_list(self):
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("pk", "isbn", "mean_age")
- self.assertEqual(
- list(books), [
- (1, "159059725", 34.5),
- ]
- )
-
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("isbn")
- self.assertEqual(
- list(books), [
- ('159059725',)
- ]
- )
-
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("mean_age")
- self.assertEqual(
- list(books), [
- (34.5,)
- ]
- )
-
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("mean_age", flat=True)
- self.assertEqual(list(books), [34.5])
-
- books = Book.objects.values_list("price").annotate(count=Count("price")).order_by("-count", "price")
- self.assertEqual(
- list(books), [
- (Decimal("29.69"), 2),
- (Decimal('23.09'), 1),
- (Decimal('30'), 1),
- (Decimal('75'), 1),
- (Decimal('82.8'), 1),
- ]
- )
diff --git a/parts/django/tests/modeltests/basic/__init__.py b/parts/django/tests/modeltests/basic/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/basic/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/basic/models.py b/parts/django/tests/modeltests/basic/models.py
deleted file mode 100644
index 97552a9..0000000
--- a/parts/django/tests/modeltests/basic/models.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# coding: utf-8
-"""
-1. Bare-bones model
-
-This is a basic model with only two non-primary-key fields.
-"""
-from django.db import models, DEFAULT_DB_ALIAS
-
-class Article(models.Model):
- headline = models.CharField(max_length=100, default='Default headline')
- pub_date = models.DateTimeField()
-
- class Meta:
- ordering = ('pub_date','headline')
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/modeltests/basic/tests.py b/parts/django/tests/modeltests/basic/tests.py
deleted file mode 100644
index bafe9a0..0000000
--- a/parts/django/tests/modeltests/basic/tests.py
+++ /dev/null
@@ -1,562 +0,0 @@
-from datetime import datetime
-import re
-
-from django.conf import settings
-from django.core.exceptions import ObjectDoesNotExist
-from django.db import models, DEFAULT_DB_ALIAS, connection
-from django.db.models.fields import FieldDoesNotExist
-from django.test import TestCase
-
-from models import Article
-
-
-class ModelTest(TestCase):
- def assertRaisesErrorWithMessage(self, error, message, callable, *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
- def test_lookup(self):
- # No articles are in the system yet.
- self.assertQuerysetEqual(Article.objects.all(), [])
-
- # Create an Article.
- a = Article(
- id=None,
- headline='Area man programs in Python',
- pub_date=datetime(2005, 7, 28),
- )
-
- # Save it into the database. You have to call save() explicitly.
- a.save()
-
- # Now it has an ID.
- self.assertTrue(a.id != None)
-
- # Models have a pk property that is an alias for the primary key
- # attribute (by default, the 'id' attribute).
- self.assertEqual(a.pk, a.id)
-
- # Access database columns via Python attributes.
- self.assertEqual(a.headline, 'Area man programs in Python')
- self.assertEqual(a.pub_date, datetime(2005, 7, 28, 0, 0))
-
- # Change values by changing the attributes, then calling save().
- a.headline = 'Area woman programs in Python'
- a.save()
-
- # Article.objects.all() returns all the articles in the database.
- self.assertQuerysetEqual(Article.objects.all(),
- ['<Article: Area woman programs in Python>'])
-
- # Django provides a rich database lookup API.
- self.assertEqual(Article.objects.get(id__exact=a.id), a)
- self.assertEqual(Article.objects.get(headline__startswith='Area woman'), a)
- self.assertEqual(Article.objects.get(pub_date__year=2005), a)
- self.assertEqual(Article.objects.get(pub_date__year=2005, pub_date__month=7), a)
- self.assertEqual(Article.objects.get(pub_date__year=2005, pub_date__month=7, pub_date__day=28), a)
- self.assertEqual(Article.objects.get(pub_date__week_day=5), a)
-
- # The "__exact" lookup type can be omitted, as a shortcut.
- self.assertEqual(Article.objects.get(id=a.id), a)
- self.assertEqual(Article.objects.get(headline='Area woman programs in Python'), a)
-
- self.assertQuerysetEqual(
- Article.objects.filter(pub_date__year=2005),
- ['<Article: Area woman programs in Python>'],
- )
- self.assertQuerysetEqual(
- Article.objects.filter(pub_date__year=2004),
- [],
- )
- self.assertQuerysetEqual(
- Article.objects.filter(pub_date__year=2005, pub_date__month=7),
- ['<Article: Area woman programs in Python>'],
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(pub_date__week_day=5),
- ['<Article: Area woman programs in Python>'],
- )
- self.assertQuerysetEqual(
- Article.objects.filter(pub_date__week_day=6),
- [],
- )
-
- # Django raises an Article.DoesNotExist exception for get() if the
- # parameters don't match any object.
- self.assertRaisesErrorWithMessage(
- ObjectDoesNotExist,
- "Article matching query does not exist.",
- Article.objects.get,
- id__exact=2000,
- )
-
- self.assertRaisesErrorWithMessage(
- ObjectDoesNotExist,
- "Article matching query does not exist.",
- Article.objects.get,
- pub_date__year=2005,
- pub_date__month=8,
- )
-
- self.assertRaisesErrorWithMessage(
- ObjectDoesNotExist,
- "Article matching query does not exist.",
- Article.objects.get,
- pub_date__week_day=6,
- )
-
- # Lookup by a primary key is the most common case, so Django
- # provides a shortcut for primary-key exact lookups.
- # The following is identical to articles.get(id=a.id).
- self.assertEqual(Article.objects.get(pk=a.id), a)
-
- # pk can be used as a shortcut for the primary key name in any query.
- self.assertQuerysetEqual(Article.objects.filter(pk__in=[a.id]),
- ["<Article: Area woman programs in Python>"])
-
- # Model instances of the same type and same ID are considered equal.
- a = Article.objects.get(pk=a.id)
- b = Article.objects.get(pk=a.id)
- self.assertEqual(a, b)
-
- def test_object_creation(self):
- # Create an Article.
- a = Article(
- id=None,
- headline='Area man programs in Python',
- pub_date=datetime(2005, 7, 28),
- )
-
- # Save it into the database. You have to call save() explicitly.
- a.save()
-
- # You can initialize a model instance using positional arguments,
- # which should match the field order as defined in the model.
- a2 = Article(None, 'Second article', datetime(2005, 7, 29))
- a2.save()
-
- self.assertNotEqual(a2.id, a.id)
- self.assertEqual(a2.headline, 'Second article')
- self.assertEqual(a2.pub_date, datetime(2005, 7, 29, 0, 0))
-
- # ...or, you can use keyword arguments.
- a3 = Article(
- id=None,
- headline='Third article',
- pub_date=datetime(2005, 7, 30),
- )
- a3.save()
-
- self.assertNotEqual(a3.id, a.id)
- self.assertNotEqual(a3.id, a2.id)
- self.assertEqual(a3.headline, 'Third article')
- self.assertEqual(a3.pub_date, datetime(2005, 7, 30, 0, 0))
-
- # You can also mix and match position and keyword arguments, but
- # be sure not to duplicate field information.
- a4 = Article(None, 'Fourth article', pub_date=datetime(2005, 7, 31))
- a4.save()
- self.assertEqual(a4.headline, 'Fourth article')
-
- # Don't use invalid keyword arguments.
- self.assertRaisesErrorWithMessage(
- TypeError,
- "'foo' is an invalid keyword argument for this function",
- Article,
- id=None,
- headline='Invalid',
- pub_date=datetime(2005, 7, 31),
- foo='bar',
- )
-
- # You can leave off the value for an AutoField when creating an
- # object, because it'll get filled in automatically when you save().
- a5 = Article(headline='Article 6', pub_date=datetime(2005, 7, 31))
- a5.save()
- self.assertEqual(a5.headline, 'Article 6')
-
- # If you leave off a field with "default" set, Django will use
- # the default.
- a6 = Article(pub_date=datetime(2005, 7, 31))
- a6.save()
- self.assertEqual(a6.headline, u'Default headline')
-
- # For DateTimeFields, Django saves as much precision (in seconds)
- # as you give it.
- a7 = Article(
- headline='Article 7',
- pub_date=datetime(2005, 7, 31, 12, 30),
- )
- a7.save()
- self.assertEqual(Article.objects.get(id__exact=a7.id).pub_date,
- datetime(2005, 7, 31, 12, 30))
-
- a8 = Article(
- headline='Article 8',
- pub_date=datetime(2005, 7, 31, 12, 30, 45),
- )
- a8.save()
- self.assertEqual(Article.objects.get(id__exact=a8.id).pub_date,
- datetime(2005, 7, 31, 12, 30, 45))
-
- # Saving an object again doesn't create a new object -- it just saves
- # the old one.
- current_id = a8.id
- a8.save()
- self.assertEqual(a8.id, current_id)
- a8.headline = 'Updated article 8'
- a8.save()
- self.assertEqual(a8.id, current_id)
-
- # Check that != and == operators behave as expecte on instances
- self.assertTrue(a7 != a8)
- self.assertFalse(a7 == a8)
- self.assertEqual(a8, Article.objects.get(id__exact=a8.id))
-
- self.assertTrue(Article.objects.get(id__exact=a8.id) != Article.objects.get(id__exact=a7.id))
- self.assertFalse(Article.objects.get(id__exact=a8.id) == Article.objects.get(id__exact=a7.id))
-
- # You can use 'in' to test for membership...
- self.assertTrue(a8 in Article.objects.all())
-
- # ... but there will often be more efficient ways if that is all you need:
- self.assertTrue(Article.objects.filter(id=a8.id).exists())
-
- # dates() returns a list of available dates of the given scope for
- # the given field.
- self.assertQuerysetEqual(
- Article.objects.dates('pub_date', 'year'),
- ["datetime.datetime(2005, 1, 1, 0, 0)"])
- self.assertQuerysetEqual(
- Article.objects.dates('pub_date', 'month'),
- ["datetime.datetime(2005, 7, 1, 0, 0)"])
- self.assertQuerysetEqual(
- Article.objects.dates('pub_date', 'day'),
- ["datetime.datetime(2005, 7, 28, 0, 0)",
- "datetime.datetime(2005, 7, 29, 0, 0)",
- "datetime.datetime(2005, 7, 30, 0, 0)",
- "datetime.datetime(2005, 7, 31, 0, 0)"])
- self.assertQuerysetEqual(
- Article.objects.dates('pub_date', 'day', order='ASC'),
- ["datetime.datetime(2005, 7, 28, 0, 0)",
- "datetime.datetime(2005, 7, 29, 0, 0)",
- "datetime.datetime(2005, 7, 30, 0, 0)",
- "datetime.datetime(2005, 7, 31, 0, 0)"])
- self.assertQuerysetEqual(
- Article.objects.dates('pub_date', 'day', order='DESC'),
- ["datetime.datetime(2005, 7, 31, 0, 0)",
- "datetime.datetime(2005, 7, 30, 0, 0)",
- "datetime.datetime(2005, 7, 29, 0, 0)",
- "datetime.datetime(2005, 7, 28, 0, 0)"])
-
- # dates() requires valid arguments.
- self.assertRaisesErrorWithMessage(
- TypeError,
- "dates() takes at least 3 arguments (1 given)",
- Article.objects.dates,
- )
-
- self.assertRaisesErrorWithMessage(
- FieldDoesNotExist,
- "Article has no field named 'invalid_field'",
- Article.objects.dates,
- "invalid_field",
- "year",
- )
-
- self.assertRaisesErrorWithMessage(
- AssertionError,
- "'kind' must be one of 'year', 'month' or 'day'.",
- Article.objects.dates,
- "pub_date",
- "bad_kind",
- )
-
- self.assertRaisesErrorWithMessage(
- AssertionError,
- "'order' must be either 'ASC' or 'DESC'.",
- Article.objects.dates,
- "pub_date",
- "year",
- order="bad order",
- )
-
- # Use iterator() with dates() to return a generator that lazily
- # requests each result one at a time, to save memory.
- dates = []
- for article in Article.objects.dates('pub_date', 'day', order='DESC').iterator():
- dates.append(article)
- self.assertEqual(dates, [
- datetime(2005, 7, 31, 0, 0),
- datetime(2005, 7, 30, 0, 0),
- datetime(2005, 7, 29, 0, 0),
- datetime(2005, 7, 28, 0, 0)])
-
- # You can combine queries with & and |.
- s1 = Article.objects.filter(id__exact=a.id)
- s2 = Article.objects.filter(id__exact=a2.id)
- self.assertQuerysetEqual(s1 | s2,
- ["<Article: Area man programs in Python>",
- "<Article: Second article>"])
- self.assertQuerysetEqual(s1 & s2, [])
-
- # You can get the number of objects like this:
- self.assertEqual(len(Article.objects.filter(id__exact=a.id)), 1)
-
- # You can get items using index and slice notation.
- self.assertEqual(Article.objects.all()[0], a)
- self.assertQuerysetEqual(Article.objects.all()[1:3],
- ["<Article: Second article>", "<Article: Third article>"])
-
- s3 = Article.objects.filter(id__exact=a3.id)
- self.assertQuerysetEqual((s1 | s2 | s3)[::2],
- ["<Article: Area man programs in Python>",
- "<Article: Third article>"])
-
- # Slicing works with longs.
- self.assertEqual(Article.objects.all()[0L], a)
- self.assertQuerysetEqual(Article.objects.all()[1L:3L],
- ["<Article: Second article>", "<Article: Third article>"])
- self.assertQuerysetEqual((s1 | s2 | s3)[::2L],
- ["<Article: Area man programs in Python>",
- "<Article: Third article>"])
-
- # And can be mixed with ints.
- self.assertQuerysetEqual(Article.objects.all()[1:3L],
- ["<Article: Second article>", "<Article: Third article>"])
-
- # Slices (without step) are lazy:
- self.assertQuerysetEqual(Article.objects.all()[0:5].filter(),
- ["<Article: Area man programs in Python>",
- "<Article: Second article>",
- "<Article: Third article>",
- "<Article: Article 6>",
- "<Article: Default headline>"])
-
- # Slicing again works:
- self.assertQuerysetEqual(Article.objects.all()[0:5][0:2],
- ["<Article: Area man programs in Python>",
- "<Article: Second article>"])
- self.assertQuerysetEqual(Article.objects.all()[0:5][:2],
- ["<Article: Area man programs in Python>",
- "<Article: Second article>"])
- self.assertQuerysetEqual(Article.objects.all()[0:5][4:],
- ["<Article: Default headline>"])
- self.assertQuerysetEqual(Article.objects.all()[0:5][5:], [])
-
- # Some more tests!
- self.assertQuerysetEqual(Article.objects.all()[2:][0:2],
- ["<Article: Third article>", "<Article: Article 6>"])
- self.assertQuerysetEqual(Article.objects.all()[2:][:2],
- ["<Article: Third article>", "<Article: Article 6>"])
- self.assertQuerysetEqual(Article.objects.all()[2:][2:3],
- ["<Article: Default headline>"])
-
- # Using an offset without a limit is also possible.
- self.assertQuerysetEqual(Article.objects.all()[5:],
- ["<Article: Fourth article>",
- "<Article: Article 7>",
- "<Article: Updated article 8>"])
-
- # Also, once you have sliced you can't filter, re-order or combine
- self.assertRaisesErrorWithMessage(
- AssertionError,
- "Cannot filter a query once a slice has been taken.",
- Article.objects.all()[0:5].filter,
- id=a.id,
- )
-
- self.assertRaisesErrorWithMessage(
- AssertionError,
- "Cannot reorder a query once a slice has been taken.",
- Article.objects.all()[0:5].order_by,
- 'id',
- )
-
- try:
- Article.objects.all()[0:1] & Article.objects.all()[4:5]
- self.fail('Should raise an AssertionError')
- except AssertionError, e:
- self.assertEqual(str(e), "Cannot combine queries once a slice has been taken.")
- except Exception, e:
- self.fail('Should raise an AssertionError, not %s' % e)
-
- # Negative slices are not supported, due to database constraints.
- # (hint: inverting your ordering might do what you need).
- try:
- Article.objects.all()[-1]
- self.fail('Should raise an AssertionError')
- except AssertionError, e:
- self.assertEqual(str(e), "Negative indexing is not supported.")
- except Exception, e:
- self.fail('Should raise an AssertionError, not %s' % e)
-
- error = None
- try:
- Article.objects.all()[0:-5]
- except Exception, e:
- error = e
- self.assertTrue(isinstance(error, AssertionError))
- self.assertEqual(str(error), "Negative indexing is not supported.")
-
- # An Article instance doesn't have access to the "objects" attribute.
- # That's only available on the class.
- self.assertRaisesErrorWithMessage(
- AttributeError,
- "Manager isn't accessible via Article instances",
- getattr,
- a7,
- "objects",
- )
-
- # Bulk delete test: How many objects before and after the delete?
- self.assertQuerysetEqual(Article.objects.all(),
- ["<Article: Area man programs in Python>",
- "<Article: Second article>",
- "<Article: Third article>",
- "<Article: Article 6>",
- "<Article: Default headline>",
- "<Article: Fourth article>",
- "<Article: Article 7>",
- "<Article: Updated article 8>"])
- Article.objects.filter(id__lte=a4.id).delete()
- self.assertQuerysetEqual(Article.objects.all(),
- ["<Article: Article 6>",
- "<Article: Default headline>",
- "<Article: Article 7>",
- "<Article: Updated article 8>"])
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'].startswith('django.db.backends.postgresql'):
- def test_microsecond_precision(self):
- # In PostgreSQL, microsecond-level precision is available.
- a9 = Article(
- headline='Article 9',
- pub_date=datetime(2005, 7, 31, 12, 30, 45, 180),
- )
- a9.save()
- self.assertEqual(Article.objects.get(pk=a9.pk).pub_date,
- datetime(2005, 7, 31, 12, 30, 45, 180))
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.mysql':
- def test_microsecond_precision_not_supported(self):
- # In MySQL, microsecond-level precision isn't available. You'll lose
- # microsecond-level precision once the data is saved.
- a9 = Article(
- headline='Article 9',
- pub_date=datetime(2005, 7, 31, 12, 30, 45, 180),
- )
- a9.save()
- self.assertEqual(Article.objects.get(id__exact=a9.id).pub_date,
- datetime(2005, 7, 31, 12, 30, 45))
-
- def test_manually_specify_primary_key(self):
- # You can manually specify the primary key when creating a new object.
- a101 = Article(
- id=101,
- headline='Article 101',
- pub_date=datetime(2005, 7, 31, 12, 30, 45),
- )
- a101.save()
- a101 = Article.objects.get(pk=101)
- self.assertEqual(a101.headline, u'Article 101')
-
- def test_create_method(self):
- # You can create saved objects in a single step
- a10 = Article.objects.create(
- headline="Article 10",
- pub_date=datetime(2005, 7, 31, 12, 30, 45),
- )
- self.assertEqual(Article.objects.get(headline="Article 10"), a10)
-
- def test_year_lookup_edge_case(self):
- # Edge-case test: A year lookup should retrieve all objects in
- # the given year, including Jan. 1 and Dec. 31.
- a11 = Article.objects.create(
- headline='Article 11',
- pub_date=datetime(2008, 1, 1),
- )
- a12 = Article.objects.create(
- headline='Article 12',
- pub_date=datetime(2008, 12, 31, 23, 59, 59, 999999),
- )
- self.assertQuerysetEqual(Article.objects.filter(pub_date__year=2008),
- ["<Article: Article 11>", "<Article: Article 12>"])
-
- def test_unicode_data(self):
- # Unicode data works, too.
- a = Article(
- headline=u'\u6797\u539f \u3081\u3050\u307f',
- pub_date=datetime(2005, 7, 28),
- )
- a.save()
- self.assertEqual(Article.objects.get(pk=a.id).headline,
- u'\u6797\u539f \u3081\u3050\u307f')
-
- def test_hash_function(self):
- # Model instances have a hash function, so they can be used in sets
- # or as dictionary keys. Two models compare as equal if their primary
- # keys are equal.
- a10 = Article.objects.create(
- headline="Article 10",
- pub_date=datetime(2005, 7, 31, 12, 30, 45),
- )
- a11 = Article.objects.create(
- headline='Article 11',
- pub_date=datetime(2008, 1, 1),
- )
- a12 = Article.objects.create(
- headline='Article 12',
- pub_date=datetime(2008, 12, 31, 23, 59, 59, 999999),
- )
-
- s = set([a10, a11, a12])
- self.assertTrue(Article.objects.get(headline='Article 11') in s)
-
- def test_extra_method_select_argument_with_dashes_and_values(self):
- # The 'select' argument to extra() supports names with dashes in
- # them, as long as you use values().
- a10 = Article.objects.create(
- headline="Article 10",
- pub_date=datetime(2005, 7, 31, 12, 30, 45),
- )
- a11 = Article.objects.create(
- headline='Article 11',
- pub_date=datetime(2008, 1, 1),
- )
- a12 = Article.objects.create(
- headline='Article 12',
- pub_date=datetime(2008, 12, 31, 23, 59, 59, 999999),
- )
-
- dicts = Article.objects.filter(
- pub_date__year=2008).extra(
- select={'dashed-value': '1'}
- ).values('headline', 'dashed-value')
- self.assertEqual([sorted(d.items()) for d in dicts],
- [[('dashed-value', 1), ('headline', u'Article 11')], [('dashed-value', 1), ('headline', u'Article 12')]])
-
- def test_extra_method_select_argument_with_dashes(self):
- # If you use 'select' with extra() and names containing dashes on a
- # query that's *not* a values() query, those extra 'select' values
- # will silently be ignored.
- a10 = Article.objects.create(
- headline="Article 10",
- pub_date=datetime(2005, 7, 31, 12, 30, 45),
- )
- a11 = Article.objects.create(
- headline='Article 11',
- pub_date=datetime(2008, 1, 1),
- )
- a12 = Article.objects.create(
- headline='Article 12',
- pub_date=datetime(2008, 12, 31, 23, 59, 59, 999999),
- )
-
- articles = Article.objects.filter(
- pub_date__year=2008).extra(
- select={'dashed-value': '1', 'undashedvalue': '2'})
- self.assertEqual(articles[0].undashedvalue, 2)
diff --git a/parts/django/tests/modeltests/choices/__init__.py b/parts/django/tests/modeltests/choices/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/choices/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/choices/models.py b/parts/django/tests/modeltests/choices/models.py
deleted file mode 100644
index 27316f5..0000000
--- a/parts/django/tests/modeltests/choices/models.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-21. Specifying 'choices' for a field
-
-Most fields take a ``choices`` parameter, which should be a tuple of tuples
-specifying which are the valid values for that field.
-
-For each field that has ``choices``, a model instance gets a
-``get_fieldname_display()`` method, where ``fieldname`` is the name of the
-field. This method returns the "human-readable" value of the field.
-"""
-
-from django.db import models
-
-GENDER_CHOICES = (
- ('M', 'Male'),
- ('F', 'Female'),
-)
-
-class Person(models.Model):
- name = models.CharField(max_length=20)
- gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/choices/tests.py b/parts/django/tests/modeltests/choices/tests.py
deleted file mode 100644
index 09023d8..0000000
--- a/parts/django/tests/modeltests/choices/tests.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from django.test import TestCase
-
-from models import Person
-
-
-class ChoicesTests(TestCase):
- def test_display(self):
- a = Person.objects.create(name='Adrian', gender='M')
- s = Person.objects.create(name='Sara', gender='F')
- self.assertEqual(a.gender, 'M')
- self.assertEqual(s.gender, 'F')
-
- self.assertEqual(a.get_gender_display(), 'Male')
- self.assertEqual(s.get_gender_display(), 'Female')
-
- # If the value for the field doesn't correspond to a valid choice,
- # the value itself is provided as a display value.
- a.gender = ''
- self.assertEqual(a.get_gender_display(), '')
-
- a.gender = 'U'
- self.assertEqual(a.get_gender_display(), 'U')
-
diff --git a/parts/django/tests/modeltests/custom_columns/__init__.py b/parts/django/tests/modeltests/custom_columns/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/custom_columns/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/custom_columns/models.py b/parts/django/tests/modeltests/custom_columns/models.py
deleted file mode 100644
index 651f8a6..0000000
--- a/parts/django/tests/modeltests/custom_columns/models.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-17. Custom column/table names
-
-If your database column name is different than your model attribute, use the
-``db_column`` parameter. Note that you'll use the field's name, not its column
-name, in API usage.
-
-If your database table name is different than your model name, use the
-``db_table`` Meta attribute. This has no effect on the API used to
-query the database.
-
-If you need to use a table name for a many-to-many relationship that differs
-from the default generated name, use the ``db_table`` parameter on the
-``ManyToManyField``. This has no effect on the API for querying the database.
-
-"""
-
-from django.db import models
-
-class Author(models.Model):
- first_name = models.CharField(max_length=30, db_column='firstname')
- last_name = models.CharField(max_length=30, db_column='last')
-
- def __unicode__(self):
- return u'%s %s' % (self.first_name, self.last_name)
-
- class Meta:
- db_table = 'my_author_table'
- ordering = ('last_name','first_name')
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- authors = models.ManyToManyField(Author, db_table='my_m2m_table')
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- ordering = ('headline',)
-
diff --git a/parts/django/tests/modeltests/custom_columns/tests.py b/parts/django/tests/modeltests/custom_columns/tests.py
deleted file mode 100644
index f38f087..0000000
--- a/parts/django/tests/modeltests/custom_columns/tests.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from django.core.exceptions import FieldError
-from django.test import TestCase
-
-from models import Author, Article
-
-
-class CustomColumnsTests(TestCase):
- def test_db_column(self):
- a1 = Author.objects.create(first_name="John", last_name="Smith")
- a2 = Author.objects.create(first_name="Peter", last_name="Jones")
-
- art = Article.objects.create(headline="Django lets you build Web apps easily")
- art.authors = [a1, a2]
-
- # Although the table and column names on Author have been set to custom
- # values, nothing about using the Author model has changed...
-
- # Query the available authors
- self.assertQuerysetEqual(
- Author.objects.all(), [
- "Peter Jones", "John Smith",
- ],
- unicode
- )
- self.assertQuerysetEqual(
- Author.objects.filter(first_name__exact="John"), [
- "John Smith",
- ],
- unicode
- )
- self.assertEqual(
- Author.objects.get(first_name__exact="John"),
- a1,
- )
-
- self.assertRaises(FieldError,
- lambda: Author.objects.filter(firstname__exact="John")
- )
-
- a = Author.objects.get(last_name__exact="Smith")
- a.first_name = "John"
- a.last_name = "Smith"
-
- self.assertRaises(AttributeError, lambda: a.firstname)
- self.assertRaises(AttributeError, lambda: a.last)
-
- # Although the Article table uses a custom m2m table,
- # nothing about using the m2m relationship has changed...
-
- # Get all the authors for an article
- self.assertQuerysetEqual(
- art.authors.all(), [
- "Peter Jones",
- "John Smith",
- ],
- unicode
- )
- # Get the articles for an author
- self.assertQuerysetEqual(
- a.article_set.all(), [
- "Django lets you build Web apps easily",
- ],
- lambda a: a.headline
- )
- # Query the authors across the m2m relation
- self.assertQuerysetEqual(
- art.authors.filter(last_name='Jones'), [
- "Peter Jones"
- ],
- unicode
- )
diff --git a/parts/django/tests/modeltests/custom_managers/__init__.py b/parts/django/tests/modeltests/custom_managers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/custom_managers/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/custom_managers/models.py b/parts/django/tests/modeltests/custom_managers/models.py
deleted file mode 100644
index 1052552..0000000
--- a/parts/django/tests/modeltests/custom_managers/models.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-23. Giving models a custom manager
-
-You can use a custom ``Manager`` in a particular model by extending the base
-``Manager`` class and instantiating your custom ``Manager`` in your model.
-
-There are two reasons you might want to customize a ``Manager``: to add extra
-``Manager`` methods, and/or to modify the initial ``QuerySet`` the ``Manager``
-returns.
-"""
-
-from django.db import models
-
-# An example of a custom manager called "objects".
-
-class PersonManager(models.Manager):
- def get_fun_people(self):
- return self.filter(fun=True)
-
-class Person(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
- fun = models.BooleanField()
- objects = PersonManager()
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
-
-# An example of a custom manager that sets get_query_set().
-
-class PublishedBookManager(models.Manager):
- def get_query_set(self):
- return super(PublishedBookManager, self).get_query_set().filter(is_published=True)
-
-class Book(models.Model):
- title = models.CharField(max_length=50)
- author = models.CharField(max_length=30)
- is_published = models.BooleanField()
- published_objects = PublishedBookManager()
- authors = models.ManyToManyField(Person, related_name='books')
-
- def __unicode__(self):
- return self.title
-
-# An example of providing multiple custom managers.
-
-class FastCarManager(models.Manager):
- def get_query_set(self):
- return super(FastCarManager, self).get_query_set().filter(top_speed__gt=150)
-
-class Car(models.Model):
- name = models.CharField(max_length=10)
- mileage = models.IntegerField()
- top_speed = models.IntegerField(help_text="In miles per hour.")
- cars = models.Manager()
- fast_cars = FastCarManager()
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/custom_managers/tests.py b/parts/django/tests/modeltests/custom_managers/tests.py
deleted file mode 100644
index 8721e9a..0000000
--- a/parts/django/tests/modeltests/custom_managers/tests.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from django.test import TestCase
-
-from models import Person, Book, Car, PersonManager, PublishedBookManager
-
-
-class CustomManagerTests(TestCase):
- def test_manager(self):
- p1 = Person.objects.create(first_name="Bugs", last_name="Bunny", fun=True)
- p2 = Person.objects.create(first_name="Droopy", last_name="Dog", fun=False)
-
- self.assertQuerysetEqual(
- Person.objects.get_fun_people(), [
- "Bugs Bunny"
- ],
- unicode
- )
- # The RelatedManager used on the 'books' descriptor extends the default
- # manager
- self.assertTrue(isinstance(p2.books, PublishedBookManager))
-
- b1 = Book.published_objects.create(
- title="How to program", author="Rodney Dangerfield", is_published=True
- )
- b2 = Book.published_objects.create(
- title="How to be smart", author="Albert Einstein", is_published=False
- )
-
- # The default manager, "objects", doesn't exist, because a custom one
- # was provided.
- self.assertRaises(AttributeError, lambda: Book.objects)
-
- # The RelatedManager used on the 'authors' descriptor extends the
- # default manager
- self.assertTrue(isinstance(b2.authors, PersonManager))
-
- self.assertQuerysetEqual(
- Book.published_objects.all(), [
- "How to program",
- ],
- lambda b: b.title
- )
-
- c1 = Car.cars.create(name="Corvette", mileage=21, top_speed=180)
- c2 = Car.cars.create(name="Neon", mileage=31, top_speed=100)
-
- self.assertQuerysetEqual(
- Car.cars.order_by("name"), [
- "Corvette",
- "Neon",
- ],
- lambda c: c.name
- )
-
- self.assertQuerysetEqual(
- Car.fast_cars.all(), [
- "Corvette",
- ],
- lambda c: c.name
- )
-
- # Each model class gets a "_default_manager" attribute, which is a
- # reference to the first manager defined in the class. In this case,
- # it's "cars".
-
- self.assertQuerysetEqual(
- Car._default_manager.order_by("name"), [
- "Corvette",
- "Neon",
- ],
- lambda c: c.name
- )
diff --git a/parts/django/tests/modeltests/custom_methods/__init__.py b/parts/django/tests/modeltests/custom_methods/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/custom_methods/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/custom_methods/models.py b/parts/django/tests/modeltests/custom_methods/models.py
deleted file mode 100644
index 15150a6..0000000
--- a/parts/django/tests/modeltests/custom_methods/models.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-3. Giving models custom methods
-
-Any method you add to a model will be available to instances.
-"""
-
-from django.db import models
-import datetime
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateField()
-
- def __unicode__(self):
- return self.headline
-
- def was_published_today(self):
- return self.pub_date == datetime.date.today()
-
- def articles_from_same_day_1(self):
- return Article.objects.filter(pub_date=self.pub_date).exclude(id=self.id)
-
- def articles_from_same_day_2(self):
- """
- Verbose version of get_articles_from_same_day_1, which does a custom
- database query for the sake of demonstration.
- """
- from django.db import connection
- cursor = connection.cursor()
- cursor.execute("""
- SELECT id, headline, pub_date
- FROM custom_methods_article
- WHERE pub_date = %s
- AND id != %s""", [connection.ops.value_to_db_date(self.pub_date),
- self.id])
- return [self.__class__(*row) for row in cursor.fetchall()]
diff --git a/parts/django/tests/modeltests/custom_methods/tests.py b/parts/django/tests/modeltests/custom_methods/tests.py
deleted file mode 100644
index 90a7f0d..0000000
--- a/parts/django/tests/modeltests/custom_methods/tests.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from datetime import date
-
-from django.test import TestCase
-
-from models import Article
-
-
-class MethodsTests(TestCase):
- def test_custom_methods(self):
- a = Article.objects.create(
- headline="Area man programs in Python", pub_date=date(2005, 7, 27)
- )
- b = Article.objects.create(
- headline="Beatles reunite", pub_date=date(2005, 7, 27)
- )
-
- self.assertFalse(a.was_published_today())
- self.assertQuerysetEqual(
- a.articles_from_same_day_1(), [
- "Beatles reunite",
- ],
- lambda a: a.headline,
- )
- self.assertQuerysetEqual(
- a.articles_from_same_day_2(), [
- "Beatles reunite",
- ],
- lambda a: a.headline
- )
-
- self.assertQuerysetEqual(
- b.articles_from_same_day_1(), [
- "Area man programs in Python",
- ],
- lambda a: a.headline,
- )
- self.assertQuerysetEqual(
- b.articles_from_same_day_2(), [
- "Area man programs in Python",
- ],
- lambda a: a.headline
- )
diff --git a/parts/django/tests/modeltests/custom_pk/__init__.py b/parts/django/tests/modeltests/custom_pk/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/custom_pk/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/custom_pk/fields.py b/parts/django/tests/modeltests/custom_pk/fields.py
deleted file mode 100644
index 2eeb80e..0000000
--- a/parts/django/tests/modeltests/custom_pk/fields.py
+++ /dev/null
@@ -1,55 +0,0 @@
-import random
-import string
-
-from django.db import models
-
-
-class MyWrapper(object):
- def __init__(self, value):
- self.value = value
-
- def __repr__(self):
- return "<%s: %s>" % (self.__class__.__name__, self.value)
-
- def __unicode__(self):
- return self.value
-
- def __eq__(self, other):
- if isinstance(other, self.__class__):
- return self.value == other.value
- return self.value == other
-
-class MyAutoField(models.CharField):
- __metaclass__ = models.SubfieldBase
-
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = 10
- super(MyAutoField, self).__init__(*args, **kwargs)
-
- def pre_save(self, instance, add):
- value = getattr(instance, self.attname, None)
- if not value:
- value = MyWrapper(''.join(random.sample(string.lowercase, 10)))
- setattr(instance, self.attname, value)
- return value
-
- def to_python(self, value):
- if not value:
- return
- if not isinstance(value, MyWrapper):
- value = MyWrapper(value)
- return value
-
- def get_db_prep_save(self, value):
- if not value:
- return
- if isinstance(value, MyWrapper):
- return unicode(value)
- return value
-
- def get_db_prep_value(self, value):
- if not value:
- return
- if isinstance(value, MyWrapper):
- return unicode(value)
- return value
diff --git a/parts/django/tests/modeltests/custom_pk/models.py b/parts/django/tests/modeltests/custom_pk/models.py
deleted file mode 100644
index ff2f2ba..0000000
--- a/parts/django/tests/modeltests/custom_pk/models.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-14. Using a custom primary key
-
-By default, Django adds an ``"id"`` field to each model. But you can override
-this behavior by explicitly adding ``primary_key=True`` to a field.
-"""
-
-from django.conf import settings
-from django.db import models, transaction, IntegrityError, DEFAULT_DB_ALIAS
-
-from fields import MyAutoField
-
-class Employee(models.Model):
- employee_code = models.IntegerField(primary_key=True, db_column = 'code')
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=20)
- class Meta:
- ordering = ('last_name', 'first_name')
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
-
-class Business(models.Model):
- name = models.CharField(max_length=20, primary_key=True)
- employees = models.ManyToManyField(Employee)
- class Meta:
- verbose_name_plural = 'businesses'
-
- def __unicode__(self):
- return self.name
-
-class Bar(models.Model):
- id = MyAutoField(primary_key=True, db_index=True)
-
- def __unicode__(self):
- return repr(self.pk)
-
-
-class Foo(models.Model):
- bar = models.ForeignKey(Bar)
-
diff --git a/parts/django/tests/modeltests/custom_pk/tests.py b/parts/django/tests/modeltests/custom_pk/tests.py
deleted file mode 100644
index 6ef4bdd..0000000
--- a/parts/django/tests/modeltests/custom_pk/tests.py
+++ /dev/null
@@ -1,183 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.conf import settings
-from django.db import DEFAULT_DB_ALIAS, transaction, IntegrityError
-from django.test import TestCase
-
-from models import Employee, Business, Bar, Foo
-
-
-class CustomPKTests(TestCase):
- def test_custom_pk(self):
- dan = Employee.objects.create(
- employee_code=123, first_name="Dan", last_name="Jones"
- )
- self.assertQuerysetEqual(
- Employee.objects.all(), [
- "Dan Jones",
- ],
- unicode
- )
-
- fran = Employee.objects.create(
- employee_code=456, first_name="Fran", last_name="Bones"
- )
- self.assertQuerysetEqual(
- Employee.objects.all(), [
- "Fran Bones",
- "Dan Jones",
- ],
- unicode
- )
-
- self.assertEqual(Employee.objects.get(pk=123), dan)
- self.assertEqual(Employee.objects.get(pk=456), fran)
-
- self.assertRaises(Employee.DoesNotExist,
- lambda: Employee.objects.get(pk=42)
- )
-
- # Use the name of the primary key, rather than pk.
- self.assertEqual(Employee.objects.get(employee_code=123), dan)
- # pk can be used as a substitute for the primary key.
- self.assertQuerysetEqual(
- Employee.objects.filter(pk__in=[123, 456]), [
- "Fran Bones",
- "Dan Jones",
- ],
- unicode
- )
- # The primary key can be accessed via the pk property on the model.
- e = Employee.objects.get(pk=123)
- self.assertEqual(e.pk, 123)
- # Or we can use the real attribute name for the primary key:
- self.assertEqual(e.employee_code, 123)
-
- # Fran got married and changed her last name.
- fran = Employee.objects.get(pk=456)
- fran.last_name = "Jones"
- fran.save()
-
- self.assertQuerysetEqual(
- Employee.objects.filter(last_name="Jones"), [
- "Dan Jones",
- "Fran Jones",
- ],
- unicode
- )
-
- emps = Employee.objects.in_bulk([123, 456])
- self.assertEqual(emps[123], dan)
-
- b = Business.objects.create(name="Sears")
- b.employees.add(dan, fran)
- self.assertQuerysetEqual(
- b.employees.all(), [
- "Dan Jones",
- "Fran Jones",
- ],
- unicode
- )
- self.assertQuerysetEqual(
- fran.business_set.all(), [
- "Sears",
- ],
- lambda b: b.name
- )
-
- self.assertEqual(Business.objects.in_bulk(["Sears"]), {
- "Sears": b,
- })
-
- self.assertQuerysetEqual(
- Business.objects.filter(name="Sears"), [
- "Sears"
- ],
- lambda b: b.name
- )
- self.assertQuerysetEqual(
- Business.objects.filter(pk="Sears"), [
- "Sears",
- ],
- lambda b: b.name
- )
-
- # Queries across tables, involving primary key
- self.assertQuerysetEqual(
- Employee.objects.filter(business__name="Sears"), [
- "Dan Jones",
- "Fran Jones",
- ],
- unicode,
- )
- self.assertQuerysetEqual(
- Employee.objects.filter(business__pk="Sears"), [
- "Dan Jones",
- "Fran Jones",
- ],
- unicode,
- )
-
- self.assertQuerysetEqual(
- Business.objects.filter(employees__employee_code=123), [
- "Sears",
- ],
- lambda b: b.name
- )
- self.assertQuerysetEqual(
- Business.objects.filter(employees__pk=123), [
- "Sears",
- ],
- lambda b: b.name,
- )
-
- self.assertQuerysetEqual(
- Business.objects.filter(employees__first_name__startswith="Fran"), [
- "Sears",
- ],
- lambda b: b.name
- )
-
- def test_unicode_pk(self):
- # Primary key may be unicode string
- bus = Business.objects.create(name=u'jaźń')
-
- def test_unique_pk(self):
- # The primary key must also obviously be unique, so trying to create a
- # new object with the same primary key will fail.
- e = Employee.objects.create(
- employee_code=123, first_name="Frank", last_name="Jones"
- )
- sid = transaction.savepoint()
- self.assertRaises(IntegrityError,
- Employee.objects.create, employee_code=123, first_name="Fred", last_name="Jones"
- )
- transaction.savepoint_rollback(sid)
-
- def test_custom_field_pk(self):
- # Regression for #10785 -- Custom fields can be used for primary keys.
- new_bar = Bar.objects.create()
- new_foo = Foo.objects.create(bar=new_bar)
-
- # FIXME: This still doesn't work, but will require some changes in
- # get_db_prep_lookup to fix it.
- # f = Foo.objects.get(bar=new_bar.pk)
- # self.assertEqual(f, new_foo)
- # self.assertEqual(f.bar, new_bar)
-
- f = Foo.objects.get(bar=new_bar)
- self.assertEqual(f, new_foo),
- self.assertEqual(f.bar, new_bar)
-
-
- # SQLite lets objects be saved with an empty primary key, even though an
- # integer is expected. So we can't check for an error being raised in that
- # case for SQLite. Remove it from the suite for this next bit.
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.sqlite3':
- def test_required_pk(self):
- # The primary key must be specified, so an error is raised if you
- # try to create an object without it.
- sid = transaction.savepoint()
- self.assertRaises(IntegrityError,
- Employee.objects.create, first_name="Tom", last_name="Smith"
- )
- transaction.savepoint_rollback(sid)
diff --git a/parts/django/tests/modeltests/defer/__init__.py b/parts/django/tests/modeltests/defer/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/defer/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/defer/models.py b/parts/django/tests/modeltests/defer/models.py
deleted file mode 100644
index 4fddd39..0000000
--- a/parts/django/tests/modeltests/defer/models.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-Tests for defer() and only().
-"""
-
-from django.db import models
-
-
-class Secondary(models.Model):
- first = models.CharField(max_length=50)
- second = models.CharField(max_length=50)
-
-class Primary(models.Model):
- name = models.CharField(max_length=50)
- value = models.CharField(max_length=50)
- related = models.ForeignKey(Secondary)
-
- def __unicode__(self):
- return self.name
-
-class Child(Primary):
- pass
-
-class BigChild(Primary):
- other = models.CharField(max_length=50)
diff --git a/parts/django/tests/modeltests/defer/tests.py b/parts/django/tests/modeltests/defer/tests.py
deleted file mode 100644
index 5f6c53d..0000000
--- a/parts/django/tests/modeltests/defer/tests.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from django.db.models.query_utils import DeferredAttribute
-from django.test import TestCase
-
-from models import Secondary, Primary, Child, BigChild
-
-
-class DeferTests(TestCase):
- def assert_delayed(self, obj, num):
- count = 0
- for field in obj._meta.fields:
- if isinstance(obj.__class__.__dict__.get(field.attname),
- DeferredAttribute):
- count += 1
- self.assertEqual(count, num)
-
- def test_defer(self):
- # To all outward appearances, instances with deferred fields look the
- # same as normal instances when we examine attribute values. Therefore
- # we test for the number of deferred fields on returned instances (by
- # poking at the internals), as a way to observe what is going on.
-
- s1 = Secondary.objects.create(first="x1", second="y1")
- p1 = Primary.objects.create(name="p1", value="xx", related=s1)
-
- qs = Primary.objects.all()
-
- self.assert_delayed(qs.defer("name")[0], 1)
- self.assert_delayed(qs.only("name")[0], 2)
- self.assert_delayed(qs.defer("related__first")[0], 0)
-
- obj = qs.select_related().only("related__first")[0]
- self.assert_delayed(obj, 2)
-
- self.assertEqual(obj.related_id, s1.pk)
-
- self.assert_delayed(qs.defer("name").extra(select={"a": 1})[0], 1)
- self.assert_delayed(qs.extra(select={"a": 1}).defer("name")[0], 1)
- self.assert_delayed(qs.defer("name").defer("value")[0], 2)
- self.assert_delayed(qs.only("name").only("value")[0], 2)
- self.assert_delayed(qs.only("name").defer("value")[0], 2)
- self.assert_delayed(qs.only("name", "value").defer("value")[0], 2)
- self.assert_delayed(qs.defer("name").only("value")[0], 2)
-
- obj = qs.only()[0]
- self.assert_delayed(qs.defer(None)[0], 0)
- self.assert_delayed(qs.only("name").defer(None)[0], 0)
-
- # User values() won't defer anything (you get the full list of
- # dictionaries back), but it still works.
- self.assertEqual(qs.defer("name").values()[0], {
- "id": p1.id,
- "name": "p1",
- "value": "xx",
- "related_id": s1.id,
- })
- self.assertEqual(qs.only("name").values()[0], {
- "id": p1.id,
- "name": "p1",
- "value": "xx",
- "related_id": s1.id,
- })
-
- # Using defer() and only() with get() is also valid.
- self.assert_delayed(qs.defer("name").get(pk=p1.pk), 1)
- self.assert_delayed(qs.only("name").get(pk=p1.pk), 2)
-
- # DOES THIS WORK?
- self.assert_delayed(qs.only("name").select_related("related")[0], 1)
- self.assert_delayed(qs.defer("related").select_related("related")[0], 0)
-
- # Saving models with deferred fields is possible (but inefficient,
- # since every field has to be retrieved first).
- obj = Primary.objects.defer("value").get(name="p1")
- obj.name = "a new name"
- obj.save()
- self.assertQuerysetEqual(
- Primary.objects.all(), [
- "a new name",
- ],
- lambda p: p.name
- )
-
- # Regression for #10572 - A subclass with no extra fields can defer
- # fields from the base class
- Child.objects.create(name="c1", value="foo", related=s1)
- # You can defer a field on a baseclass when the subclass has no fields
- obj = Child.objects.defer("value").get(name="c1")
- self.assert_delayed(obj, 1)
- self.assertEqual(obj.name, "c1")
- self.assertEqual(obj.value, "foo")
- obj.name = "c2"
- obj.save()
-
- # You can retrive a single column on a base class with no fields
- obj = Child.objects.only("name").get(name="c2")
- self.assert_delayed(obj, 3)
- self.assertEqual(obj.name, "c2")
- self.assertEqual(obj.value, "foo")
- obj.name = "cc"
- obj.save()
-
- BigChild.objects.create(name="b1", value="foo", related=s1, other="bar")
- # You can defer a field on a baseclass
- obj = BigChild.objects.defer("value").get(name="b1")
- self.assert_delayed(obj, 1)
- self.assertEqual(obj.name, "b1")
- self.assertEqual(obj.value, "foo")
- self.assertEqual(obj.other, "bar")
- obj.name = "b2"
- obj.save()
-
- # You can defer a field on a subclass
- obj = BigChild.objects.defer("other").get(name="b2")
- self.assert_delayed(obj, 1)
- self.assertEqual(obj.name, "b2")
- self.assertEqual(obj.value, "foo")
- self.assertEqual(obj.other, "bar")
- obj.name = "b3"
- obj.save()
-
- # You can retrieve a single field on a baseclass
- obj = BigChild.objects.only("name").get(name="b3")
- self.assert_delayed(obj, 4)
- self.assertEqual(obj.name, "b3")
- self.assertEqual(obj.value, "foo")
- self.assertEqual(obj.other, "bar")
- obj.name = "b4"
- obj.save()
-
- # You can retrieve a single field on a baseclass
- obj = BigChild.objects.only("other").get(name="b4")
- self.assert_delayed(obj, 4)
- self.assertEqual(obj.name, "b4")
- self.assertEqual(obj.value, "foo")
- self.assertEqual(obj.other, "bar")
- obj.name = "bb"
- obj.save()
diff --git a/parts/django/tests/modeltests/delete/__init__.py b/parts/django/tests/modeltests/delete/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/modeltests/delete/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/modeltests/delete/models.py b/parts/django/tests/modeltests/delete/models.py
deleted file mode 100644
index 9c81f6b..0000000
--- a/parts/django/tests/modeltests/delete/models.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# coding: utf-8
-"""
-Tests for some corner cases with deleting.
-"""
-
-from django.db import models
-
-class DefaultRepr(object):
- def __repr__(self):
- return u"<%s: %s>" % (self.__class__.__name__, self.__dict__)
-
-class A(DefaultRepr, models.Model):
- pass
-
-class B(DefaultRepr, models.Model):
- a = models.ForeignKey(A)
-
-class C(DefaultRepr, models.Model):
- b = models.ForeignKey(B)
-
-class D(DefaultRepr, models.Model):
- c = models.ForeignKey(C)
- a = models.ForeignKey(A)
-
-# Simplified, we have:
-# A
-# B -> A
-# C -> B
-# D -> C
-# D -> A
-
-# So, we must delete Ds first of all, then Cs then Bs then As.
-# However, if we start at As, we might find Bs first (in which
-# case things will be nice), or find Ds first.
-
-# Some mutually dependent models, but nullable
-class E(DefaultRepr, models.Model):
- f = models.ForeignKey('F', null=True, related_name='e_rel')
-
-class F(DefaultRepr, models.Model):
- e = models.ForeignKey(E, related_name='f_rel')
-
diff --git a/parts/django/tests/modeltests/delete/tests.py b/parts/django/tests/modeltests/delete/tests.py
deleted file mode 100644
index 7927cce..0000000
--- a/parts/django/tests/modeltests/delete/tests.py
+++ /dev/null
@@ -1,135 +0,0 @@
-from django.db.models import sql
-from django.db.models.loading import cache
-from django.db.models.query import CollectedObjects
-from django.db.models.query_utils import CyclicDependency
-from django.test import TestCase
-
-from models import A, B, C, D, E, F
-
-
-class DeleteTests(TestCase):
- def clear_rel_obj_caches(self, *models):
- for m in models:
- if hasattr(m._meta, '_related_objects_cache'):
- del m._meta._related_objects_cache
-
- def order_models(self, *models):
- cache.app_models["delete"].keyOrder = models
-
- def setUp(self):
- self.order_models("a", "b", "c", "d", "e", "f")
- self.clear_rel_obj_caches(A, B, C, D, E, F)
-
- def tearDown(self):
- self.order_models("a", "b", "c", "d", "e", "f")
- self.clear_rel_obj_caches(A, B, C, D, E, F)
-
- def test_collected_objects(self):
- g = CollectedObjects()
- self.assertFalse(g.add("key1", 1, "item1", None))
- self.assertEqual(g["key1"], {1: "item1"})
-
- self.assertFalse(g.add("key2", 1, "item1", "key1"))
- self.assertFalse(g.add("key2", 2, "item2", "key1"))
-
- self.assertEqual(g["key2"], {1: "item1", 2: "item2"})
-
- self.assertFalse(g.add("key3", 1, "item1", "key1"))
- self.assertTrue(g.add("key3", 1, "item1", "key2"))
- self.assertEqual(g.ordered_keys(), ["key3", "key2", "key1"])
-
- self.assertTrue(g.add("key2", 1, "item1", "key3"))
- self.assertRaises(CyclicDependency, g.ordered_keys)
-
- def test_delete(self):
- ## Second, test the usage of CollectedObjects by Model.delete()
-
- # Due to the way that transactions work in the test harness, doing
- # m.delete() here can work but fail in a real situation, since it may
- # delete all objects, but not in the right order. So we manually check
- # that the order of deletion is correct.
-
- # Also, it is possible that the order is correct 'accidentally', due
- # solely to order of imports etc. To check this, we set the order that
- # 'get_models()' will retrieve to a known 'nice' order, and then try
- # again with a known 'tricky' order. Slightly naughty access to
- # internals here :-)
-
- # If implementation changes, then the tests may need to be simplified:
- # - remove the lines that set the .keyOrder and clear the related
- # object caches
- # - remove the second set of tests (with a2, b2 etc)
-
- a1 = A.objects.create()
- b1 = B.objects.create(a=a1)
- c1 = C.objects.create(b=b1)
- d1 = D.objects.create(c=c1, a=a1)
-
- o = CollectedObjects()
- a1._collect_sub_objects(o)
- self.assertEqual(o.keys(), [D, C, B, A])
- a1.delete()
-
- # Same again with a known bad order
- self.order_models("d", "c", "b", "a")
- self.clear_rel_obj_caches(A, B, C, D)
-
- a2 = A.objects.create()
- b2 = B.objects.create(a=a2)
- c2 = C.objects.create(b=b2)
- d2 = D.objects.create(c=c2, a=a2)
-
- o = CollectedObjects()
- a2._collect_sub_objects(o)
- self.assertEqual(o.keys(), [D, C, B, A])
- a2.delete()
-
- def test_collected_objects_null(self):
- g = CollectedObjects()
- self.assertFalse(g.add("key1", 1, "item1", None))
- self.assertFalse(g.add("key2", 1, "item1", "key1", nullable=True))
- self.assertTrue(g.add("key1", 1, "item1", "key2"))
- self.assertEqual(g.ordered_keys(), ["key1", "key2"])
-
- def test_delete_nullable(self):
- e1 = E.objects.create()
- f1 = F.objects.create(e=e1)
- e1.f = f1
- e1.save()
-
- # Since E.f is nullable, we should delete F first (after nulling out
- # the E.f field), then E.
-
- o = CollectedObjects()
- e1._collect_sub_objects(o)
- self.assertEqual(o.keys(), [F, E])
-
- # temporarily replace the UpdateQuery class to verify that E.f is
- # actually nulled out first
-
- logged = []
- class LoggingUpdateQuery(sql.UpdateQuery):
- def clear_related(self, related_field, pk_list, using):
- logged.append(related_field.name)
- return super(LoggingUpdateQuery, self).clear_related(related_field, pk_list, using)
- original = sql.UpdateQuery
- sql.UpdateQuery = LoggingUpdateQuery
-
- e1.delete()
- self.assertEqual(logged, ["f"])
- logged = []
-
- e2 = E.objects.create()
- f2 = F.objects.create(e=e2)
- e2.f = f2
- e2.save()
-
- # Same deal as before, though we are starting from the other object.
- o = CollectedObjects()
- f2._collect_sub_objects(o)
- self.assertEqual(o.keys(), [F, E])
- f2.delete()
- self.assertEqual(logged, ["f"])
- logged = []
-
- sql.UpdateQuery = original
diff --git a/parts/django/tests/modeltests/empty/__init__.py b/parts/django/tests/modeltests/empty/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/empty/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/empty/models.py b/parts/django/tests/modeltests/empty/models.py
deleted file mode 100644
index a6cdb0a..0000000
--- a/parts/django/tests/modeltests/empty/models.py
+++ /dev/null
@@ -1,12 +0,0 @@
-"""
-40. Empty model tests
-
-These test that things behave sensibly for the rare corner-case of a model with
-no fields.
-"""
-
-from django.db import models
-
-
-class Empty(models.Model):
- pass
diff --git a/parts/django/tests/modeltests/empty/tests.py b/parts/django/tests/modeltests/empty/tests.py
deleted file mode 100644
index 01fa1c5..0000000
--- a/parts/django/tests/modeltests/empty/tests.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from django.test import TestCase
-
-from models import Empty
-
-
-class EmptyModelTests(TestCase):
- def test_empty(self):
- m = Empty()
- self.assertEqual(m.id, None)
- m.save()
- m2 = Empty.objects.create()
- self.assertEqual(len(Empty.objects.all()), 2)
- self.assertTrue(m.id is not None)
- existing = Empty(m.id)
- existing.save()
diff --git a/parts/django/tests/modeltests/expressions/__init__.py b/parts/django/tests/modeltests/expressions/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/expressions/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/expressions/models.py b/parts/django/tests/modeltests/expressions/models.py
deleted file mode 100644
index b004408..0000000
--- a/parts/django/tests/modeltests/expressions/models.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-Tests for F() query expression syntax.
-"""
-
-from django.db import models
-
-class Employee(models.Model):
- firstname = models.CharField(max_length=50)
- lastname = models.CharField(max_length=50)
-
- def __unicode__(self):
- return u'%s %s' % (self.firstname, self.lastname)
-
-class Company(models.Model):
- name = models.CharField(max_length=100)
- num_employees = models.PositiveIntegerField()
- num_chairs = models.PositiveIntegerField()
- ceo = models.ForeignKey(
- Employee,
- related_name='company_ceo_set')
- point_of_contact = models.ForeignKey(
- Employee,
- related_name='company_point_of_contact_set',
- null=True)
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/expressions/tests.py b/parts/django/tests/modeltests/expressions/tests.py
deleted file mode 100644
index 0a136ae..0000000
--- a/parts/django/tests/modeltests/expressions/tests.py
+++ /dev/null
@@ -1,218 +0,0 @@
-from django.core.exceptions import FieldError
-from django.db.models import F
-from django.test import TestCase
-
-from models import Company, Employee
-
-
-class ExpressionsTests(TestCase):
- def test_filter(self):
- Company.objects.create(
- name="Example Inc.", num_employees=2300, num_chairs=5,
- ceo=Employee.objects.create(firstname="Joe", lastname="Smith")
- )
- Company.objects.create(
- name="Foobar Ltd.", num_employees=3, num_chairs=4,
- ceo=Employee.objects.create(firstname="Frank", lastname="Meyer")
- )
- Company.objects.create(
- name="Test GmbH", num_employees=32, num_chairs=1,
- ceo=Employee.objects.create(firstname="Max", lastname="Mustermann")
- )
-
- company_query = Company.objects.values(
- "name", "num_employees", "num_chairs"
- ).order_by(
- "name", "num_employees", "num_chairs"
- )
-
- # We can filter for companies where the number of employees is greater
- # than the number of chairs.
- self.assertQuerysetEqual(
- company_query.filter(num_employees__gt=F("num_chairs")), [
- {
- "num_chairs": 5,
- "name": "Example Inc.",
- "num_employees": 2300,
- },
- {
- "num_chairs": 1,
- "name": "Test GmbH",
- "num_employees": 32
- },
- ],
- lambda o: o
- )
-
- # We can set one field to have the value of another field
- # Make sure we have enough chairs
- company_query.update(num_chairs=F("num_employees"))
- self.assertQuerysetEqual(
- company_query, [
- {
- "num_chairs": 2300,
- "name": "Example Inc.",
- "num_employees": 2300
- },
- {
- "num_chairs": 3,
- "name": "Foobar Ltd.",
- "num_employees": 3
- },
- {
- "num_chairs": 32,
- "name": "Test GmbH",
- "num_employees": 32
- }
- ],
- lambda o: o
- )
-
- # We can perform arithmetic operations in expressions
- # Make sure we have 2 spare chairs
- company_query.update(num_chairs=F("num_employees")+2)
- self.assertQuerysetEqual(
- company_query, [
- {
- 'num_chairs': 2302,
- 'name': u'Example Inc.',
- 'num_employees': 2300
- },
- {
- 'num_chairs': 5,
- 'name': u'Foobar Ltd.',
- 'num_employees': 3
- },
- {
- 'num_chairs': 34,
- 'name': u'Test GmbH',
- 'num_employees': 32
- }
- ],
- lambda o: o,
- )
-
- # Law of order of operations is followed
- company_query.update(
- num_chairs=F('num_employees') + 2 * F('num_employees')
- )
- self.assertQuerysetEqual(
- company_query, [
- {
- 'num_chairs': 6900,
- 'name': u'Example Inc.',
- 'num_employees': 2300
- },
- {
- 'num_chairs': 9,
- 'name': u'Foobar Ltd.',
- 'num_employees': 3
- },
- {
- 'num_chairs': 96,
- 'name': u'Test GmbH',
- 'num_employees': 32
- }
- ],
- lambda o: o,
- )
-
- # Law of order of operations can be overridden by parentheses
- company_query.update(
- num_chairs=((F('num_employees') + 2) * F('num_employees'))
- )
- self.assertQuerysetEqual(
- company_query, [
- {
- 'num_chairs': 5294600,
- 'name': u'Example Inc.',
- 'num_employees': 2300
- },
- {
- 'num_chairs': 15,
- 'name': u'Foobar Ltd.',
- 'num_employees': 3
- },
- {
- 'num_chairs': 1088,
- 'name': u'Test GmbH',
- 'num_employees': 32
- }
- ],
- lambda o: o,
- )
-
- # The relation of a foreign key can become copied over to an other
- # foreign key.
- self.assertEqual(
- Company.objects.update(point_of_contact=F('ceo')),
- 3
- )
- self.assertQuerysetEqual(
- Company.objects.all(), [
- "Joe Smith",
- "Frank Meyer",
- "Max Mustermann",
- ],
- lambda c: unicode(c.point_of_contact),
- )
-
- c = Company.objects.all()[0]
- c.point_of_contact = Employee.objects.create(firstname="Guido", lastname="van Rossum")
- c.save()
-
- # F Expressions can also span joins
- self.assertQuerysetEqual(
- Company.objects.filter(ceo__firstname=F("point_of_contact__firstname")), [
- "Foobar Ltd.",
- "Test GmbH",
- ],
- lambda c: c.name
- )
-
- Company.objects.exclude(
- ceo__firstname=F("point_of_contact__firstname")
- ).update(name="foo")
- self.assertEqual(
- Company.objects.exclude(
- ceo__firstname=F('point_of_contact__firstname')
- ).get().name,
- "foo",
- )
-
- self.assertRaises(FieldError,
- lambda: Company.objects.exclude(
- ceo__firstname=F('point_of_contact__firstname')
- ).update(name=F('point_of_contact__lastname'))
- )
-
- # F expressions can be used to update attributes on single objects
- test_gmbh = Company.objects.get(name="Test GmbH")
- self.assertEqual(test_gmbh.num_employees, 32)
- test_gmbh.num_employees = F("num_employees") + 4
- test_gmbh.save()
- test_gmbh = Company.objects.get(pk=test_gmbh.pk)
- self.assertEqual(test_gmbh.num_employees, 36)
-
- # F expressions cannot be used to update attributes which are foreign
- # keys, or attributes which involve joins.
- test_gmbh.point_of_contact = None
- test_gmbh.save()
- self.assertTrue(test_gmbh.point_of_contact is None)
- def test():
- test_gmbh.point_of_contact = F("ceo")
- self.assertRaises(ValueError, test)
-
- test_gmbh.point_of_contact = test_gmbh.ceo
- test_gmbh.save()
- test_gmbh.name = F("ceo__last_name")
- self.assertRaises(FieldError, test_gmbh.save)
-
- # F expressions cannot be used to update attributes on objects which do
- # not yet exist in the database
- acme = Company(
- name="The Acme Widget Co.", num_employees=12, num_chairs=5,
- ceo=test_gmbh.ceo
- )
- acme.num_employees = F("num_employees") + 16
- self.assertRaises(TypeError, acme.save)
diff --git a/parts/django/tests/modeltests/field_defaults/__init__.py b/parts/django/tests/modeltests/field_defaults/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/field_defaults/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/field_defaults/models.py b/parts/django/tests/modeltests/field_defaults/models.py
deleted file mode 100644
index 0dd1f72..0000000
--- a/parts/django/tests/modeltests/field_defaults/models.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# coding: utf-8
-"""
-32. Callable defaults
-
-You can pass callable objects as the ``default`` parameter to a field. When
-the object is created without an explicit value passed in, Django will call
-the method to determine the default value.
-
-This example uses ``datetime.datetime.now`` as the default for the ``pub_date``
-field.
-"""
-
-from django.db import models
-from datetime import datetime
-
-class Article(models.Model):
- headline = models.CharField(max_length=100, default='Default headline')
- pub_date = models.DateTimeField(default=datetime.now)
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/modeltests/field_defaults/tests.py b/parts/django/tests/modeltests/field_defaults/tests.py
deleted file mode 100644
index a23f644..0000000
--- a/parts/django/tests/modeltests/field_defaults/tests.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from datetime import datetime
-
-from django.test import TestCase
-
-from models import Article
-
-
-class DefaultTests(TestCase):
- def test_field_defaults(self):
- a = Article()
- now = datetime.now()
- a.save()
-
- self.assertTrue(isinstance(a.id, (int, long)))
- self.assertEqual(a.headline, "Default headline")
- self.assertTrue((now - a.pub_date).seconds < 5)
diff --git a/parts/django/tests/modeltests/field_subclassing/__init__.py b/parts/django/tests/modeltests/field_subclassing/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/field_subclassing/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/field_subclassing/fields.py b/parts/django/tests/modeltests/field_subclassing/fields.py
deleted file mode 100644
index 8675b31..0000000
--- a/parts/django/tests/modeltests/field_subclassing/fields.py
+++ /dev/null
@@ -1,74 +0,0 @@
-from django.core.exceptions import FieldError
-from django.db import models
-from django.utils import simplejson as json
-from django.utils.encoding import force_unicode
-
-
-class Small(object):
- """
- A simple class to show that non-trivial Python objects can be used as
- attributes.
- """
- def __init__(self, first, second):
- self.first, self.second = first, second
-
- def __unicode__(self):
- return u'%s%s' % (force_unicode(self.first), force_unicode(self.second))
-
- def __str__(self):
- return unicode(self).encode('utf-8')
-
-class SmallField(models.Field):
- """
- Turns the "Small" class into a Django field. Because of the similarities
- with normal character fields and the fact that Small.__unicode__ does
- something sensible, we don't need to implement a lot here.
- """
- __metaclass__ = models.SubfieldBase
-
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = 2
- super(SmallField, self).__init__(*args, **kwargs)
-
- def get_internal_type(self):
- return 'CharField'
-
- def to_python(self, value):
- if isinstance(value, Small):
- return value
- return Small(value[0], value[1])
-
- def get_db_prep_save(self, value):
- return unicode(value)
-
- def get_prep_lookup(self, lookup_type, value):
- if lookup_type == 'exact':
- return force_unicode(value)
- if lookup_type == 'in':
- return [force_unicode(v) for v in value]
- if lookup_type == 'isnull':
- return []
- raise TypeError('Invalid lookup type: %r' % lookup_type)
-
-class SmallerField(SmallField):
- pass
-
-
-class JSONField(models.TextField):
- __metaclass__ = models.SubfieldBase
-
- description = ("JSONField automatically serializes and desializes values to "
- "and from JSON.")
-
- def to_python(self, value):
- if not value:
- return None
-
- if isinstance(value, basestring):
- value = json.loads(value)
- return value
-
- def get_db_prep_save(self, value):
- if value is None:
- return None
- return json.dumps(value)
diff --git a/parts/django/tests/modeltests/field_subclassing/models.py b/parts/django/tests/modeltests/field_subclassing/models.py
deleted file mode 100644
index b0d8336..0000000
--- a/parts/django/tests/modeltests/field_subclassing/models.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""
-Tests for field subclassing.
-"""
-
-from django.db import models
-from django.utils.encoding import force_unicode
-
-from fields import Small, SmallField, SmallerField, JSONField
-
-
-class MyModel(models.Model):
- name = models.CharField(max_length=10)
- data = SmallField('small field')
-
- def __unicode__(self):
- return force_unicode(self.name)
-
-class OtherModel(models.Model):
- data = SmallerField()
-
-class DataModel(models.Model):
- data = JSONField()
diff --git a/parts/django/tests/modeltests/field_subclassing/tests.py b/parts/django/tests/modeltests/field_subclassing/tests.py
deleted file mode 100644
index 25f5160..0000000
--- a/parts/django/tests/modeltests/field_subclassing/tests.py
+++ /dev/null
@@ -1,81 +0,0 @@
-from django.core import serializers
-from django.test import TestCase
-
-from fields import Small
-from models import DataModel, MyModel, OtherModel
-
-
-class CustomField(TestCase):
- def test_defer(self):
- d = DataModel.objects.create(data=[1, 2, 3])
-
- self.assertTrue(isinstance(d.data, list))
-
- d = DataModel.objects.get(pk=d.pk)
- self.assertTrue(isinstance(d.data, list))
- self.assertEqual(d.data, [1, 2, 3])
-
- d = DataModel.objects.defer("data").get(pk=d.pk)
- d.save()
-
- d = DataModel.objects.get(pk=d.pk)
- self.assertTrue(isinstance(d.data, list))
- self.assertEqual(d.data, [1, 2, 3])
-
- def test_custom_field(self):
- # Creating a model with custom fields is done as per normal.
- s = Small(1, 2)
- self.assertEqual(str(s), "12")
-
- m = MyModel.objects.create(name="m", data=s)
- # Custom fields still have normal field's attributes.
- self.assertEqual(m._meta.get_field("data").verbose_name, "small field")
-
- # The m.data attribute has been initialised correctly. It's a Small
- # object.
- self.assertEqual((m.data.first, m.data.second), (1, 2))
-
- # The data loads back from the database correctly and 'data' has the
- # right type.
- m1 = MyModel.objects.get(pk=m.pk)
- self.assertTrue(isinstance(m1.data, Small))
- self.assertEqual(str(m1.data), "12")
-
- # We can do normal filtering on the custom field (and will get an error
- # when we use a lookup type that does not make sense).
- s1 = Small(1, 3)
- s2 = Small("a", "b")
- self.assertQuerysetEqual(
- MyModel.objects.filter(data__in=[s, s1, s2]), [
- "m",
- ],
- lambda m: m.name,
- )
- self.assertRaises(TypeError, lambda: MyModel.objects.filter(data__lt=s))
-
- # Serialization works, too.
- stream = serializers.serialize("json", MyModel.objects.all())
- self.assertEqual(stream, '[{"pk": 1, "model": "field_subclassing.mymodel", "fields": {"data": "12", "name": "m"}}]')
-
- obj = list(serializers.deserialize("json", stream))[0]
- self.assertEqual(obj.object, m)
-
- # Test retrieving custom field data
- m.delete()
-
- m1 = MyModel.objects.create(name="1", data=Small(1, 2))
- m2 = MyModel.objects.create(name="2", data=Small(2, 3))
-
- self.assertQuerysetEqual(
- MyModel.objects.all(), [
- "12",
- "23",
- ],
- lambda m: str(m.data)
- )
-
- def test_field_subclassing(self):
- o = OtherModel.objects.create(data=Small("a", "b"))
- o = OtherModel.objects.get()
- self.assertEqual(o.data.first, "a")
- self.assertEqual(o.data.second, "b")
diff --git a/parts/django/tests/modeltests/files/__init__.py b/parts/django/tests/modeltests/files/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/modeltests/files/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/modeltests/files/models.py b/parts/django/tests/modeltests/files/models.py
deleted file mode 100644
index f798f74..0000000
--- a/parts/django/tests/modeltests/files/models.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""
-42. Storing files according to a custom storage system
-
-``FileField`` and its variations can take a ``storage`` argument to specify how
-and where files should be stored.
-"""
-
-import random
-import tempfile
-
-from django.db import models
-from django.core.files.base import ContentFile
-from django.core.files.storage import FileSystemStorage
-
-
-temp_storage_location = tempfile.mkdtemp()
-temp_storage = FileSystemStorage(location=temp_storage_location)
-
-# Write out a file to be used as default content
-temp_storage.save('tests/default.txt', ContentFile('default content'))
-
-class Storage(models.Model):
- def custom_upload_to(self, filename):
- return 'foo'
-
- def random_upload_to(self, filename):
- # This returns a different result each time,
- # to make sure it only gets called once.
- return '%s/%s' % (random.randint(100, 999), filename)
-
- normal = models.FileField(storage=temp_storage, upload_to='tests')
- custom = models.FileField(storage=temp_storage, upload_to=custom_upload_to)
- random = models.FileField(storage=temp_storage, upload_to=random_upload_to)
- default = models.FileField(storage=temp_storage, upload_to='tests', default='tests/default.txt')
diff --git a/parts/django/tests/modeltests/files/tests.py b/parts/django/tests/modeltests/files/tests.py
deleted file mode 100644
index 025fcc5..0000000
--- a/parts/django/tests/modeltests/files/tests.py
+++ /dev/null
@@ -1,100 +0,0 @@
-import shutil
-
-from django.core.cache import cache
-from django.core.files.base import ContentFile
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.test import TestCase
-
-from models import Storage, temp_storage, temp_storage_location
-
-
-class FileTests(TestCase):
- def tearDown(self):
- shutil.rmtree(temp_storage_location)
-
- def test_files(self):
- # Attempting to access a FileField from the class raises a descriptive
- # error
- self.assertRaises(AttributeError, lambda: Storage.normal)
-
- # An object without a file has limited functionality.
- obj1 = Storage()
- self.assertEqual(obj1.normal.name, "")
- self.assertRaises(ValueError, lambda: obj1.normal.size)
-
- # Saving a file enables full functionality.
- obj1.normal.save("django_test.txt", ContentFile("content"))
- self.assertEqual(obj1.normal.name, "tests/django_test.txt")
- self.assertEqual(obj1.normal.size, 7)
- self.assertEqual(obj1.normal.read(), "content")
-
- # File objects can be assigned to FileField attributes, but shouldn't
- # get committed until the model it's attached to is saved.
- obj1.normal = SimpleUploadedFile("assignment.txt", "content")
- dirs, files = temp_storage.listdir("tests")
- self.assertEqual(dirs, [])
- self.assertEqual(sorted(files), ["default.txt", "django_test.txt"])
-
- obj1.save()
- dirs, files = temp_storage.listdir("tests")
- self.assertEqual(
- sorted(files), ["assignment.txt", "default.txt", "django_test.txt"]
- )
-
- # Files can be read in a little at a time, if necessary.
- obj1.normal.open()
- self.assertEqual(obj1.normal.read(3), "con")
- self.assertEqual(obj1.normal.read(), "tent")
- self.assertEqual(list(obj1.normal.chunks(chunk_size=2)), ["co", "nt", "en", "t"])
-
- # Save another file with the same name.
- obj2 = Storage()
- obj2.normal.save("django_test.txt", ContentFile("more content"))
- self.assertEqual(obj2.normal.name, "tests/django_test_1.txt")
- self.assertEqual(obj2.normal.size, 12)
-
- # Push the objects into the cache to make sure they pickle properly
- cache.set("obj1", obj1)
- cache.set("obj2", obj2)
- self.assertEqual(cache.get("obj2").normal.name, "tests/django_test_1.txt")
-
- # Deleting an object deletes the file it uses, if there are no other
- # objects still using that file.
- obj2.delete()
- obj2.normal.save("django_test.txt", ContentFile("more content"))
- self.assertEqual(obj2.normal.name, "tests/django_test_1.txt")
-
- # Multiple files with the same name get _N appended to them.
- objs = [Storage() for i in range(3)]
- for o in objs:
- o.normal.save("multiple_files.txt", ContentFile("Same Content"))
- self.assertEqual(
- [o.normal.name for o in objs],
- ["tests/multiple_files.txt", "tests/multiple_files_1.txt", "tests/multiple_files_2.txt"]
- )
- for o in objs:
- o.delete()
-
- # Default values allow an object to access a single file.
- obj3 = Storage.objects.create()
- self.assertEqual(obj3.default.name, "tests/default.txt")
- self.assertEqual(obj3.default.read(), "default content")
-
- # But it shouldn't be deleted, even if there are no more objects using
- # it.
- obj3.delete()
- obj3 = Storage()
- self.assertEqual(obj3.default.read(), "default content")
-
- # Verify the fix for #5655, making sure the directory is only
- # determined once.
- obj4 = Storage()
- obj4.random.save("random_file", ContentFile("random content"))
- self.assertTrue(obj4.random.name.endswith("/random_file"))
-
- # Clean up the temporary files and dir.
- obj1.normal.delete()
- obj2.normal.delete()
- obj3.default.delete()
- obj4.random.delete()
-
diff --git a/parts/django/tests/modeltests/fixtures/__init__.py b/parts/django/tests/modeltests/fixtures/__init__.py
deleted file mode 100644
index 139597f..0000000
--- a/parts/django/tests/modeltests/fixtures/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_1.default.json b/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_1.default.json
deleted file mode 100644
index 9bb39e4..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_1.default.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "pk": "6",
- "model": "fixtures.article",
- "fields": {
- "headline": "Who needs more than one database?",
- "pub_date": "2006-06-16 14:00:00"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_2.default.json.gz b/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_2.default.json.gz
deleted file mode 100644
index 80e4ba1..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_2.default.json.gz
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_3.nosuchdb.json b/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_3.nosuchdb.json
deleted file mode 100644
index 3da326b..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/db_fixture_3.nosuchdb.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "pk": "8",
- "model": "fixtures.article",
- "fields": {
- "headline": "There is no spoon.",
- "pub_date": "2006-06-16 14:00:00"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture1.json b/parts/django/tests/modeltests/fixtures/fixtures/fixture1.json
deleted file mode 100644
index 332feae..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture1.json
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- {
- "pk": 1,
- "model": "sites.site",
- "fields": {
- "domain": "example.com",
- "name": "example.com"
- }
- },
- {
- "pk": "2",
- "model": "fixtures.article",
- "fields": {
- "headline": "Poker has no place on ESPN",
- "pub_date": "2006-06-16 12:00:00"
- }
- },
- {
- "pk": "3",
- "model": "fixtures.article",
- "fields": {
- "headline": "Time to reform copyright",
- "pub_date": "2006-06-16 13:00:00"
- }
- },
- {
- "pk": 1,
- "model": "fixtures.category",
- "fields": {
- "description": "Latest news stories",
- "title": "News Stories"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture2.json b/parts/django/tests/modeltests/fixtures/fixtures/fixture2.json
deleted file mode 100644
index 01b40d7..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture2.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "pk": "3",
- "model": "fixtures.article",
- "fields": {
- "headline": "Copyright is fine the way it is",
- "pub_date": "2006-06-16 14:00:00"
- }
- },
- {
- "pk": "4",
- "model": "fixtures.article",
- "fields": {
- "headline": "Django conquers world!",
- "pub_date": "2006-06-16 15:00:00"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture2.xml b/parts/django/tests/modeltests/fixtures/fixtures/fixture2.xml
deleted file mode 100644
index 9ced781..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="2" model="fixtures.article">
- <field type="CharField" name="headline">Poker on TV is great!</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field>
- </object>
- <object pk="5" model="fixtures.article">
- <field type="CharField" name="headline">XML identified as leading cause of cancer</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 16:00:00</field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture3.xml b/parts/django/tests/modeltests/fixtures/fixtures/fixture3.xml
deleted file mode 100644
index 9ced781..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="2" model="fixtures.article">
- <field type="CharField" name="headline">Poker on TV is great!</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field>
- </object>
- <object pk="5" model="fixtures.article">
- <field type="CharField" name="headline">XML identified as leading cause of cancer</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 16:00:00</field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture4.json.zip b/parts/django/tests/modeltests/fixtures/fixtures/fixture4.json.zip
deleted file mode 100644
index 270cccb..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture4.json.zip
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.gz b/parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.gz
deleted file mode 100644
index bb6baca..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.gz
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.zip b/parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.zip
deleted file mode 100644
index 9380cef..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture5.json.zip
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture6.json b/parts/django/tests/modeltests/fixtures/fixtures/fixture6.json
deleted file mode 100644
index 60e4733..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture6.json
+++ /dev/null
@@ -1,41 +0,0 @@
-[
- {
- "pk": "1",
- "model": "fixtures.tag",
- "fields": {
- "name": "copyright",
- "tagged_type": ["fixtures", "article"],
- "tagged_id": "3"
- }
- },
- {
- "pk": "2",
- "model": "fixtures.tag",
- "fields": {
- "name": "law",
- "tagged_type": ["fixtures", "article"],
- "tagged_id": "3"
- }
- },
- {
- "pk": "1",
- "model": "fixtures.person",
- "fields": {
- "name": "Django Reinhardt"
- }
- },
- {
- "pk": "2",
- "model": "fixtures.person",
- "fields": {
- "name": "Stephane Grappelli"
- }
- },
- {
- "pk": "3",
- "model": "fixtures.person",
- "fields": {
- "name": "Prince"
- }
- }
-]
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture7.xml b/parts/django/tests/modeltests/fixtures/fixtures/fixture7.xml
deleted file mode 100644
index 547cba1..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture7.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="2" model="fixtures.tag">
- <field type="CharField" name="name">legal</field>
- <field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel">
- <natural>fixtures</natural>
- <natural>article</natural>
- </field>
- <field type="PositiveIntegerField" name="tagged_id">3</field>
- </object>
- <object pk="3" model="fixtures.tag">
- <field type="CharField" name="name">django</field>
- <field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel">
- <natural>fixtures</natural>
- <natural>article</natural>
- </field>
- <field type="PositiveIntegerField" name="tagged_id">4</field>
- </object>
- <object pk="4" model="fixtures.tag">
- <field type="CharField" name="name">world domination</field>
- <field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel">
- <natural>fixtures</natural>
- <natural>article</natural>
- </field>
- <field type="PositiveIntegerField" name="tagged_id">4</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture8.json b/parts/django/tests/modeltests/fixtures/fixtures/fixture8.json
deleted file mode 100644
index bc113aa..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture8.json
+++ /dev/null
@@ -1,32 +0,0 @@
-[
- {
- "pk": "1",
- "model": "fixtures.visa",
- "fields": {
- "person": ["Django Reinhardt"],
- "permissions": [
- ["add_user", "auth", "user"],
- ["change_user", "auth", "user"],
- ["delete_user", "auth", "user"]
- ]
- }
- },
- {
- "pk": "2",
- "model": "fixtures.visa",
- "fields": {
- "person": ["Stephane Grappelli"],
- "permissions": [
- ["add_user", "auth", "user"]
- ]
- }
- },
- {
- "pk": "3",
- "model": "fixtures.visa",
- "fields": {
- "person": ["Prince"],
- "permissions": []
- }
- }
-]
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/fixture9.xml b/parts/django/tests/modeltests/fixtures/fixtures/fixture9.xml
deleted file mode 100644
index 100f63d..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/fixture9.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="2" model="fixtures.visa">
- <field type="CharField" name="person">
- <natural>Stephane Grappelli</natural>
- </field>
- <field to="auth.permission" name="permissions" rel="ManyToManyRel">
- <object>
- <natural>add_user</natural>
- <natural>auth</natural>
- <natural>user</natural>
- </object>
- <object>
- <natural>delete_user</natural>
- <natural>auth</natural>
- <natural>user</natural>
- </object>
- </field>
- </object>
- <object pk="3" model="fixtures.person">
- <field type="CharField" name="name">
- <natural>Artist formerly known as &quot;Prince&quot;</natural>
- </field>
- </object>
- <object pk="3" model="fixtures.visa">
- <field type="CharField" name="person">
- <natural>Artist formerly known as &quot;Prince&quot;</natural>
- </field>
- <field to="auth.permission" name="permissions" rel="ManyToManyRel">
- <object>
- <natural>change_user</natural>
- <natural>auth</natural>
- <natural>user</natural>
- </object>
- </field>
- </object>
- <object pk="1" model="fixtures.book">
- <field type="CharField" name="name">Music for all ages</field>
- <field to="fixtures.person" name="authors" rel="ManyToManyRel">
- <object>
- <natural>Django Reinhardt</natural>
- </object>
- <object>
- <natural>Artist formerly known as &quot;Prince&quot;</natural>
- </object>
- </field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/modeltests/fixtures/fixtures/initial_data.json b/parts/django/tests/modeltests/fixtures/fixtures/initial_data.json
deleted file mode 100644
index 477d781..0000000
--- a/parts/django/tests/modeltests/fixtures/fixtures/initial_data.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "pk": "1",
- "model": "fixtures.article",
- "fields": {
- "headline": "Python program becomes self aware",
- "pub_date": "2006-06-16 11:00:00"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/modeltests/fixtures/models.py b/parts/django/tests/modeltests/fixtures/models.py
deleted file mode 100644
index 216a8e2..0000000
--- a/parts/django/tests/modeltests/fixtures/models.py
+++ /dev/null
@@ -1,92 +0,0 @@
-"""
-37. Fixtures.
-
-Fixtures are a way of loading data into the database in bulk. Fixure data
-can be stored in any serializable format (including JSON and XML). Fixtures
-are identified by name, and are stored in either a directory named 'fixtures'
-in the application directory, on in one of the directories named in the
-``FIXTURE_DIRS`` setting.
-"""
-
-from django.contrib.auth.models import Permission
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-from django.db import models, DEFAULT_DB_ALIAS
-from django.conf import settings
-
-
-class Category(models.Model):
- title = models.CharField(max_length=100)
- description = models.TextField()
-
- def __unicode__(self):
- return self.title
-
- class Meta:
- ordering = ('title',)
-
-class Article(models.Model):
- headline = models.CharField(max_length=100, default='Default headline')
- pub_date = models.DateTimeField()
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- ordering = ('-pub_date', 'headline')
-
-class Blog(models.Model):
- name = models.CharField(max_length=100)
- featured = models.ForeignKey(Article, related_name='fixtures_featured_set')
- articles = models.ManyToManyField(Article, blank=True,
- related_name='fixtures_articles_set')
-
- def __unicode__(self):
- return self.name
-
-
-class Tag(models.Model):
- name = models.CharField(max_length=100)
- tagged_type = models.ForeignKey(ContentType, related_name="fixtures_tag_set")
- tagged_id = models.PositiveIntegerField(default=0)
- tagged = generic.GenericForeignKey(ct_field='tagged_type',
- fk_field='tagged_id')
-
- def __unicode__(self):
- return '<%s: %s> tagged "%s"' % (self.tagged.__class__.__name__,
- self.tagged, self.name)
-
-class PersonManager(models.Manager):
- def get_by_natural_key(self, name):
- return self.get(name=name)
-
-class Person(models.Model):
- objects = PersonManager()
- name = models.CharField(max_length=100)
- def __unicode__(self):
- return self.name
-
- class Meta:
- ordering = ('name',)
-
- def natural_key(self):
- return (self.name,)
-
-class Visa(models.Model):
- person = models.ForeignKey(Person)
- permissions = models.ManyToManyField(Permission, blank=True)
-
- def __unicode__(self):
- return '%s %s' % (self.person.name,
- ', '.join(p.name for p in self.permissions.all()))
-
-class Book(models.Model):
- name = models.CharField(max_length=100)
- authors = models.ManyToManyField(Person)
-
- def __unicode__(self):
- return '%s by %s' % (self.name,
- ' and '.join(a.name for a in self.authors.all()))
-
- class Meta:
- ordering = ('name',)
diff --git a/parts/django/tests/modeltests/fixtures/tests.py b/parts/django/tests/modeltests/fixtures/tests.py
deleted file mode 100644
index 4facc6d..0000000
--- a/parts/django/tests/modeltests/fixtures/tests.py
+++ /dev/null
@@ -1,277 +0,0 @@
-import StringIO
-import sys
-
-from django.test import TestCase, TransactionTestCase
-from django.conf import settings
-from django.core import management
-from django.db import DEFAULT_DB_ALIAS
-
-from models import Article, Blog, Book, Category, Person, Tag, Visa
-
-class TestCaseFixtureLoadingTests(TestCase):
- fixtures = ['fixture1.json', 'fixture2.json']
-
- def testClassFixtures(self):
- "Check that test case has installed 4 fixture objects"
- self.assertEqual(Article.objects.count(), 4)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Django conquers world!>',
- '<Article: Copyright is fine the way it is>',
- '<Article: Poker has no place on ESPN>',
- '<Article: Python program becomes self aware>'
- ])
-
-class FixtureLoadingTests(TestCase):
-
- def _dumpdata_assert(self, args, output, format='json', natural_keys=False):
- new_io = StringIO.StringIO()
- management.call_command('dumpdata', *args, **{'format':format, 'stdout':new_io, 'use_natural_keys':natural_keys})
- command_output = new_io.getvalue().strip()
- self.assertEqual(command_output, output)
-
- def test_initial_data(self):
- # Syncdb introduces 1 initial data object from initial_data.json.
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Python program becomes self aware>'
- ])
-
- def test_loading_and_dumping(self):
- new_io = StringIO.StringIO()
-
- # Load fixture 1. Single JSON file, with two objects.
- management.call_command('loaddata', 'fixture1.json', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Time to reform copyright>',
- '<Article: Poker has no place on ESPN>',
- '<Article: Python program becomes self aware>'
- ])
-
- # Dump the current contents of the database as a JSON fixture
- self._dumpdata_assert(['fixtures'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]')
-
- # Try just dumping the contents of fixtures.Category
- self._dumpdata_assert(['fixtures.Category'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}]')
-
- # ...and just fixtures.Article
- self._dumpdata_assert(['fixtures.Article'], '[{"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]')
-
- # ...and both
- self._dumpdata_assert(['fixtures.Category', 'fixtures.Article'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]')
-
- # Specify a specific model twice
- self._dumpdata_assert(['fixtures.Article', 'fixtures.Article'], '[{"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]')
-
- # Specify a dump that specifies Article both explicitly and implicitly
- self._dumpdata_assert(['fixtures.Article', 'fixtures'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]')
-
- # Same again, but specify in the reverse order
- self._dumpdata_assert(['fixtures'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]')
-
- # Specify one model from one application, and an entire other application.
- self._dumpdata_assert(['fixtures.Category', 'sites'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}]')
-
- # Load fixture 2. JSON file imported by default. Overwrites some existing objects
- management.call_command('loaddata', 'fixture2.json', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Django conquers world!>',
- '<Article: Copyright is fine the way it is>',
- '<Article: Poker has no place on ESPN>',
- '<Article: Python program becomes self aware>'
- ])
-
- # Load fixture 3, XML format.
- management.call_command('loaddata', 'fixture3.xml', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: XML identified as leading cause of cancer>',
- '<Article: Django conquers world!>',
- '<Article: Copyright is fine the way it is>',
- '<Article: Poker on TV is great!>',
- '<Article: Python program becomes self aware>'
- ])
-
- # Load fixture 6, JSON file with dynamic ContentType fields. Testing ManyToOne.
- management.call_command('loaddata', 'fixture6.json', verbosity=0, commit=False)
- self.assertQuerysetEqual(Tag.objects.all(), [
- '<Tag: <Article: Copyright is fine the way it is> tagged "copyright">',
- '<Tag: <Article: Copyright is fine the way it is> tagged "law">'
- ])
-
- # Load fixture 7, XML file with dynamic ContentType fields. Testing ManyToOne.
- management.call_command('loaddata', 'fixture7.xml', verbosity=0, commit=False)
- self.assertQuerysetEqual(Tag.objects.all(), [
- '<Tag: <Article: Copyright is fine the way it is> tagged "copyright">',
- '<Tag: <Article: Copyright is fine the way it is> tagged "legal">',
- '<Tag: <Article: Django conquers world!> tagged "django">',
- '<Tag: <Article: Django conquers world!> tagged "world domination">'
- ])
-
- # Load fixture 8, JSON file with dynamic Permission fields. Testing ManyToMany.
- management.call_command('loaddata', 'fixture8.json', verbosity=0, commit=False)
- self.assertQuerysetEqual(Visa.objects.all(), [
- '<Visa: Django Reinhardt Can add user, Can change user, Can delete user>',
- '<Visa: Stephane Grappelli Can add user>',
- '<Visa: Prince >'
- ])
-
- # Load fixture 9, XML file with dynamic Permission fields. Testing ManyToMany.
- management.call_command('loaddata', 'fixture9.xml', verbosity=0, commit=False)
- self.assertQuerysetEqual(Visa.objects.all(), [
- '<Visa: Django Reinhardt Can add user, Can change user, Can delete user>',
- '<Visa: Stephane Grappelli Can add user, Can delete user>',
- '<Visa: Artist formerly known as "Prince" Can change user>'
- ])
-
- self.assertQuerysetEqual(Book.objects.all(), [
- '<Book: Music for all ages by Artist formerly known as "Prince" and Django Reinhardt>'
- ])
-
- # Load a fixture that doesn't exist
- management.call_command('loaddata', 'unknown.json', verbosity=0, commit=False)
-
- # object list is unaffected
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: XML identified as leading cause of cancer>',
- '<Article: Django conquers world!>',
- '<Article: Copyright is fine the way it is>',
- '<Article: Poker on TV is great!>',
- '<Article: Python program becomes self aware>'
- ])
-
- # By default, you get raw keys on dumpdata
- self._dumpdata_assert(['fixtures.book'], '[{"pk": 1, "model": "fixtures.book", "fields": {"name": "Music for all ages", "authors": [3, 1]}}]')
-
- # But you can get natural keys if you ask for them and they are available
- self._dumpdata_assert(['fixtures.book'], '[{"pk": 1, "model": "fixtures.book", "fields": {"name": "Music for all ages", "authors": [["Artist formerly known as \\"Prince\\""], ["Django Reinhardt"]]}}]', natural_keys=True)
-
- # Dump the current contents of the database as a JSON fixture
- self._dumpdata_assert(['fixtures'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 5, "model": "fixtures.article", "fields": {"headline": "XML identified as leading cause of cancer", "pub_date": "2006-06-16 16:00:00"}}, {"pk": 4, "model": "fixtures.article", "fields": {"headline": "Django conquers world!", "pub_date": "2006-06-16 15:00:00"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Copyright is fine the way it is", "pub_date": "2006-06-16 14:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker on TV is great!", "pub_date": "2006-06-16 11:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}, {"pk": 1, "model": "fixtures.tag", "fields": {"tagged_type": ["fixtures", "article"], "name": "copyright", "tagged_id": 3}}, {"pk": 2, "model": "fixtures.tag", "fields": {"tagged_type": ["fixtures", "article"], "name": "legal", "tagged_id": 3}}, {"pk": 3, "model": "fixtures.tag", "fields": {"tagged_type": ["fixtures", "article"], "name": "django", "tagged_id": 4}}, {"pk": 4, "model": "fixtures.tag", "fields": {"tagged_type": ["fixtures", "article"], "name": "world domination", "tagged_id": 4}}, {"pk": 3, "model": "fixtures.person", "fields": {"name": "Artist formerly known as \\"Prince\\""}}, {"pk": 1, "model": "fixtures.person", "fields": {"name": "Django Reinhardt"}}, {"pk": 2, "model": "fixtures.person", "fields": {"name": "Stephane Grappelli"}}, {"pk": 1, "model": "fixtures.visa", "fields": {"person": ["Django Reinhardt"], "permissions": [["add_user", "auth", "user"], ["change_user", "auth", "user"], ["delete_user", "auth", "user"]]}}, {"pk": 2, "model": "fixtures.visa", "fields": {"person": ["Stephane Grappelli"], "permissions": [["add_user", "auth", "user"], ["delete_user", "auth", "user"]]}}, {"pk": 3, "model": "fixtures.visa", "fields": {"person": ["Artist formerly known as \\"Prince\\""], "permissions": [["change_user", "auth", "user"]]}}, {"pk": 1, "model": "fixtures.book", "fields": {"name": "Music for all ages", "authors": [["Artist formerly known as \\"Prince\\""], ["Django Reinhardt"]]}}]', natural_keys=True)
-
- # Dump the current contents of the database as an XML fixture
- self._dumpdata_assert(['fixtures'], """<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0"><object pk="1" model="fixtures.category"><field type="CharField" name="title">News Stories</field><field type="TextField" name="description">Latest news stories</field></object><object pk="5" model="fixtures.article"><field type="CharField" name="headline">XML identified as leading cause of cancer</field><field type="DateTimeField" name="pub_date">2006-06-16 16:00:00</field></object><object pk="4" model="fixtures.article"><field type="CharField" name="headline">Django conquers world!</field><field type="DateTimeField" name="pub_date">2006-06-16 15:00:00</field></object><object pk="3" model="fixtures.article"><field type="CharField" name="headline">Copyright is fine the way it is</field><field type="DateTimeField" name="pub_date">2006-06-16 14:00:00</field></object><object pk="2" model="fixtures.article"><field type="CharField" name="headline">Poker on TV is great!</field><field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field></object><object pk="1" model="fixtures.article"><field type="CharField" name="headline">Python program becomes self aware</field><field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field></object><object pk="1" model="fixtures.tag"><field type="CharField" name="name">copyright</field><field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel"><natural>fixtures</natural><natural>article</natural></field><field type="PositiveIntegerField" name="tagged_id">3</field></object><object pk="2" model="fixtures.tag"><field type="CharField" name="name">legal</field><field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel"><natural>fixtures</natural><natural>article</natural></field><field type="PositiveIntegerField" name="tagged_id">3</field></object><object pk="3" model="fixtures.tag"><field type="CharField" name="name">django</field><field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel"><natural>fixtures</natural><natural>article</natural></field><field type="PositiveIntegerField" name="tagged_id">4</field></object><object pk="4" model="fixtures.tag"><field type="CharField" name="name">world domination</field><field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel"><natural>fixtures</natural><natural>article</natural></field><field type="PositiveIntegerField" name="tagged_id">4</field></object><object pk="3" model="fixtures.person"><field type="CharField" name="name">Artist formerly known as "Prince"</field></object><object pk="1" model="fixtures.person"><field type="CharField" name="name">Django Reinhardt</field></object><object pk="2" model="fixtures.person"><field type="CharField" name="name">Stephane Grappelli</field></object><object pk="1" model="fixtures.visa"><field to="fixtures.person" name="person" rel="ManyToOneRel"><natural>Django Reinhardt</natural></field><field to="auth.permission" name="permissions" rel="ManyToManyRel"><object><natural>add_user</natural><natural>auth</natural><natural>user</natural></object><object><natural>change_user</natural><natural>auth</natural><natural>user</natural></object><object><natural>delete_user</natural><natural>auth</natural><natural>user</natural></object></field></object><object pk="2" model="fixtures.visa"><field to="fixtures.person" name="person" rel="ManyToOneRel"><natural>Stephane Grappelli</natural></field><field to="auth.permission" name="permissions" rel="ManyToManyRel"><object><natural>add_user</natural><natural>auth</natural><natural>user</natural></object><object><natural>delete_user</natural><natural>auth</natural><natural>user</natural></object></field></object><object pk="3" model="fixtures.visa"><field to="fixtures.person" name="person" rel="ManyToOneRel"><natural>Artist formerly known as "Prince"</natural></field><field to="auth.permission" name="permissions" rel="ManyToManyRel"><object><natural>change_user</natural><natural>auth</natural><natural>user</natural></object></field></object><object pk="1" model="fixtures.book"><field type="CharField" name="name">Music for all ages</field><field to="fixtures.person" name="authors" rel="ManyToManyRel"><object><natural>Artist formerly known as "Prince"</natural></object><object><natural>Django Reinhardt</natural></object></field></object></django-objects>""", format='xml', natural_keys=True)
-
- def test_compress_format_loading(self):
- # Load fixture 4 (compressed), using format specification
- management.call_command('loaddata', 'fixture4.json', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Django pets kitten>',
- '<Article: Python program becomes self aware>'
- ])
-
- def test_compressed_specified_loading(self):
- # Load fixture 5 (compressed), using format *and* compression specification
- management.call_command('loaddata', 'fixture5.json.zip', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: WoW subscribers now outnumber readers>',
- '<Article: Python program becomes self aware>'
- ])
-
- def test_compressed_loading(self):
- # Load fixture 5 (compressed), only compression specification
- management.call_command('loaddata', 'fixture5.zip', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: WoW subscribers now outnumber readers>',
- '<Article: Python program becomes self aware>'
- ])
-
- def test_ambiguous_compressed_fixture(self):
- # The name "fixture5" is ambigous, so loading it will raise an error
- new_io = StringIO.StringIO()
- management.call_command('loaddata', 'fixture5', verbosity=0, stderr=new_io, commit=False)
- output = new_io.getvalue().strip().split('\n')
- self.assertEqual(len(output), 1)
- self.assertTrue(output[0].startswith("Multiple fixtures named 'fixture5'"))
-
- def test_db_loading(self):
- # Load db fixtures 1 and 2. These will load using the 'default' database identifier implicitly
- management.call_command('loaddata', 'db_fixture_1', verbosity=0, commit=False)
- management.call_command('loaddata', 'db_fixture_2', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Who needs more than one database?>',
- '<Article: Who needs to use compressed data?>',
- '<Article: Python program becomes self aware>'
- ])
-
- def test_loading_using(self):
- # Load db fixtures 1 and 2. These will load using the 'default' database identifier explicitly
- management.call_command('loaddata', 'db_fixture_1', verbosity=0, using='default', commit=False)
- management.call_command('loaddata', 'db_fixture_2', verbosity=0, using='default', commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Who needs more than one database?>',
- '<Article: Who needs to use compressed data?>',
- '<Article: Python program becomes self aware>'
- ])
-
- def test_unmatched_identifier_loading(self):
- # Try to load db fixture 3. This won't load because the database identifier doesn't match
- management.call_command('loaddata', 'db_fixture_3', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Python program becomes self aware>'
- ])
-
- management.call_command('loaddata', 'db_fixture_3', verbosity=0, using='default', commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Python program becomes self aware>'
- ])
-
- def test_output_formats(self):
- # Load back in fixture 1, we need the articles from it
- management.call_command('loaddata', 'fixture1', verbosity=0, commit=False)
-
- # Try to load fixture 6 using format discovery
- management.call_command('loaddata', 'fixture6', verbosity=0, commit=False)
- self.assertQuerysetEqual(Tag.objects.all(), [
- '<Tag: <Article: Time to reform copyright> tagged "copyright">',
- '<Tag: <Article: Time to reform copyright> tagged "law">'
- ])
-
- # Dump the current contents of the database as a JSON fixture
- self._dumpdata_assert(['fixtures'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}, {"pk": 1, "model": "fixtures.tag", "fields": {"tagged_type": ["fixtures", "article"], "name": "copyright", "tagged_id": 3}}, {"pk": 2, "model": "fixtures.tag", "fields": {"tagged_type": ["fixtures", "article"], "name": "law", "tagged_id": 3}}, {"pk": 1, "model": "fixtures.person", "fields": {"name": "Django Reinhardt"}}, {"pk": 3, "model": "fixtures.person", "fields": {"name": "Prince"}}, {"pk": 2, "model": "fixtures.person", "fields": {"name": "Stephane Grappelli"}}]', natural_keys=True)
-
- # Dump the current contents of the database as an XML fixture
- self._dumpdata_assert(['fixtures'], """<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0"><object pk="1" model="fixtures.category"><field type="CharField" name="title">News Stories</field><field type="TextField" name="description">Latest news stories</field></object><object pk="3" model="fixtures.article"><field type="CharField" name="headline">Time to reform copyright</field><field type="DateTimeField" name="pub_date">2006-06-16 13:00:00</field></object><object pk="2" model="fixtures.article"><field type="CharField" name="headline">Poker has no place on ESPN</field><field type="DateTimeField" name="pub_date">2006-06-16 12:00:00</field></object><object pk="1" model="fixtures.article"><field type="CharField" name="headline">Python program becomes self aware</field><field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field></object><object pk="1" model="fixtures.tag"><field type="CharField" name="name">copyright</field><field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel"><natural>fixtures</natural><natural>article</natural></field><field type="PositiveIntegerField" name="tagged_id">3</field></object><object pk="2" model="fixtures.tag"><field type="CharField" name="name">law</field><field to="contenttypes.contenttype" name="tagged_type" rel="ManyToOneRel"><natural>fixtures</natural><natural>article</natural></field><field type="PositiveIntegerField" name="tagged_id">3</field></object><object pk="1" model="fixtures.person"><field type="CharField" name="name">Django Reinhardt</field></object><object pk="3" model="fixtures.person"><field type="CharField" name="name">Prince</field></object><object pk="2" model="fixtures.person"><field type="CharField" name="name">Stephane Grappelli</field></object></django-objects>""", format='xml', natural_keys=True)
-
-if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.mysql':
- class FixtureTransactionTests(TransactionTestCase):
- def _dumpdata_assert(self, args, output, format='json'):
- new_io = StringIO.StringIO()
- management.call_command('dumpdata', *args, **{'format':format, 'stdout':new_io})
- command_output = new_io.getvalue().strip()
- self.assertEqual(command_output, output)
-
- def test_format_discovery(self):
- # Load fixture 1 again, using format discovery
- management.call_command('loaddata', 'fixture1', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Time to reform copyright>',
- '<Article: Poker has no place on ESPN>',
- '<Article: Python program becomes self aware>'
- ])
-
- # Try to load fixture 2 using format discovery; this will fail
- # because there are two fixture2's in the fixtures directory
- new_io = StringIO.StringIO()
- management.call_command('loaddata', 'fixture2', verbosity=0, stderr=new_io)
- output = new_io.getvalue().strip().split('\n')
- self.assertEqual(len(output), 1)
- self.assertTrue(output[0].startswith("Multiple fixtures named 'fixture2'"))
-
- # object list is unaffected
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Time to reform copyright>',
- '<Article: Poker has no place on ESPN>',
- '<Article: Python program becomes self aware>'
- ])
-
- # Dump the current contents of the database as a JSON fixture
- self._dumpdata_assert(['fixtures'], '[{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]')
-
- # Load fixture 4 (compressed), using format discovery
- management.call_command('loaddata', 'fixture4', verbosity=0, commit=False)
- self.assertQuerysetEqual(Article.objects.all(), [
- '<Article: Django pets kitten>',
- '<Article: Time to reform copyright>',
- '<Article: Poker has no place on ESPN>',
- '<Article: Python program becomes self aware>'
- ])
diff --git a/parts/django/tests/modeltests/fixtures_model_package/__init__.py b/parts/django/tests/modeltests/fixtures_model_package/__init__.py
deleted file mode 100644
index 139597f..0000000
--- a/parts/django/tests/modeltests/fixtures_model_package/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture1.json b/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture1.json
deleted file mode 100644
index 7684d84..0000000
--- a/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture1.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "pk": "2",
- "model": "fixtures_model_package.article",
- "fields": {
- "headline": "Poker has no place on ESPN",
- "pub_date": "2006-06-16 12:00:00"
- }
- },
- {
- "pk": "3",
- "model": "fixtures_model_package.article",
- "fields": {
- "headline": "Time to reform copyright",
- "pub_date": "2006-06-16 13:00:00"
- }
- }
-]
diff --git a/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.json b/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.json
deleted file mode 100644
index 4997627..0000000
--- a/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "pk": "3",
- "model": "fixtures_model_package.article",
- "fields": {
- "headline": "Copyright is fine the way it is",
- "pub_date": "2006-06-16 14:00:00"
- }
- },
- {
- "pk": "4",
- "model": "fixtures_model_package.article",
- "fields": {
- "headline": "Django conquers world!",
- "pub_date": "2006-06-16 15:00:00"
- }
- }
-]
diff --git a/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.xml b/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.xml
deleted file mode 100644
index 55337cf..0000000
--- a/parts/django/tests/modeltests/fixtures_model_package/fixtures/fixture2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="2" model="fixtures_model_package.article">
- <field type="CharField" name="headline">Poker on TV is great!</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field>
- </object>
- <object pk="5" model="fixtures_model_package.article">
- <field type="CharField" name="headline">XML identified as leading cause of cancer</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 16:00:00</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/modeltests/fixtures_model_package/fixtures/initial_data.json b/parts/django/tests/modeltests/fixtures_model_package/fixtures/initial_data.json
deleted file mode 100644
index 66cb5d7..0000000
--- a/parts/django/tests/modeltests/fixtures_model_package/fixtures/initial_data.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "pk": "1",
- "model": "fixtures_model_package.article",
- "fields": {
- "headline": "Python program becomes self aware",
- "pub_date": "2006-06-16 11:00:00"
- }
- }
-]
diff --git a/parts/django/tests/modeltests/fixtures_model_package/models/__init__.py b/parts/django/tests/modeltests/fixtures_model_package/models/__init__.py
deleted file mode 100644
index c0450b2..0000000
--- a/parts/django/tests/modeltests/fixtures_model_package/models/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.db import models
-from django.conf import settings
-
-class Article(models.Model):
- headline = models.CharField(max_length=100, default='Default headline')
- pub_date = models.DateTimeField()
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- app_label = 'fixtures_model_package'
- ordering = ('-pub_date', 'headline')
-
diff --git a/parts/django/tests/modeltests/fixtures_model_package/tests.py b/parts/django/tests/modeltests/fixtures_model_package/tests.py
deleted file mode 100644
index 1fae5ee..0000000
--- a/parts/django/tests/modeltests/fixtures_model_package/tests.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from django.core import management
-from django.test import TestCase
-
-from models import Article
-
-
-class SampleTestCase(TestCase):
- fixtures = ['fixture1.json', 'fixture2.json']
-
- def testClassFixtures(self):
- "Test cases can load fixture objects into models defined in packages"
- self.assertEqual(Article.objects.count(), 4)
- self.assertQuerysetEqual(
- Article.objects.all(),[
- "Django conquers world!",
- "Copyright is fine the way it is",
- "Poker has no place on ESPN",
- "Python program becomes self aware"
- ],
- lambda a: a.headline
- )
-
-
-class FixtureTestCase(TestCase):
- def test_initial_data(self):
- "Fixtures can load initial data into models defined in packages"
- #Syncdb introduces 1 initial data object from initial_data.json
- self.assertQuerysetEqual(
- Article.objects.all(), [
- "Python program becomes self aware"
- ],
- lambda a: a.headline
- )
-
- def test_loaddata(self):
- "Fixtures can load data into models defined in packages"
- # Load fixture 1. Single JSON file, with two objects
- management.call_command("loaddata", "fixture1.json", verbosity=0, commit=False)
- self.assertQuerysetEqual(
- Article.objects.all(), [
- "Time to reform copyright",
- "Poker has no place on ESPN",
- "Python program becomes self aware",
- ],
- lambda a: a.headline,
- )
-
- # Load fixture 2. JSON file imported by default. Overwrites some
- # existing objects
- management.call_command("loaddata", "fixture2.json", verbosity=0, commit=False)
- self.assertQuerysetEqual(
- Article.objects.all(), [
- "Django conquers world!",
- "Copyright is fine the way it is",
- "Poker has no place on ESPN",
- "Python program becomes self aware",
- ],
- lambda a: a.headline,
- )
-
- # Load a fixture that doesn't exist
- management.call_command("loaddata", "unknown.json", verbosity=0, commit=False)
- self.assertQuerysetEqual(
- Article.objects.all(), [
- "Django conquers world!",
- "Copyright is fine the way it is",
- "Poker has no place on ESPN",
- "Python program becomes self aware",
- ],
- lambda a: a.headline,
- )
diff --git a/parts/django/tests/modeltests/force_insert_update/__init__.py b/parts/django/tests/modeltests/force_insert_update/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/force_insert_update/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/force_insert_update/models.py b/parts/django/tests/modeltests/force_insert_update/models.py
deleted file mode 100644
index 9516be7..0000000
--- a/parts/django/tests/modeltests/force_insert_update/models.py
+++ /dev/null
@@ -1,13 +0,0 @@
-"""
-Tests for forcing insert and update queries (instead of Django's normal
-automatic behaviour).
-"""
-from django.db import models, transaction, IntegrityError
-
-class Counter(models.Model):
- name = models.CharField(max_length = 10)
- value = models.IntegerField()
-
-class WithCustomPK(models.Model):
- name = models.IntegerField(primary_key=True)
- value = models.IntegerField()
diff --git a/parts/django/tests/modeltests/force_insert_update/tests.py b/parts/django/tests/modeltests/force_insert_update/tests.py
deleted file mode 100644
index bd3eb7d..0000000
--- a/parts/django/tests/modeltests/force_insert_update/tests.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from django.db import transaction, IntegrityError, DatabaseError
-from django.test import TestCase
-
-from models import Counter, WithCustomPK
-
-
-class ForceTests(TestCase):
- def test_force_update(self):
- c = Counter.objects.create(name="one", value=1)
- # The normal case
-
- c.value = 2
- c.save()
- # Same thing, via an update
- c.value = 3
- c.save(force_update=True)
-
- # Won't work because force_update and force_insert are mutually
- # exclusive
- c.value = 4
- self.assertRaises(ValueError, c.save, force_insert=True, force_update=True)
-
- # Try to update something that doesn't have a primary key in the first
- # place.
- c1 = Counter(name="two", value=2)
- self.assertRaises(ValueError, c1.save, force_update=True)
- c1.save(force_insert=True)
-
- # Won't work because we can't insert a pk of the same value.
- sid = transaction.savepoint()
- c.value = 5
- self.assertRaises(IntegrityError, c.save, force_insert=True)
- transaction.savepoint_rollback(sid)
-
- # Trying to update should still fail, even with manual primary keys, if
- # the data isn't in the database already.
- obj = WithCustomPK(name=1, value=1)
- self.assertRaises(DatabaseError, obj.save, force_update=True)
diff --git a/parts/django/tests/modeltests/generic_relations/__init__.py b/parts/django/tests/modeltests/generic_relations/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/generic_relations/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/generic_relations/models.py b/parts/django/tests/modeltests/generic_relations/models.py
deleted file mode 100644
index 18b77a3..0000000
--- a/parts/django/tests/modeltests/generic_relations/models.py
+++ /dev/null
@@ -1,80 +0,0 @@
-"""
-34. Generic relations
-
-Generic relations let an object have a foreign key to any object through a
-content-type/object-id field. A ``GenericForeignKey`` field can point to any
-object, be it animal, vegetable, or mineral.
-
-The canonical example is tags (although this example implementation is *far*
-from complete).
-"""
-
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-from django.db import models
-
-
-class TaggedItem(models.Model):
- """A tag on an item."""
- tag = models.SlugField()
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
-
- content_object = generic.GenericForeignKey()
-
- class Meta:
- ordering = ["tag", "content_type__name"]
-
- def __unicode__(self):
- return self.tag
-
-class ValuableTaggedItem(TaggedItem):
- value = models.PositiveIntegerField()
-
-class Comparison(models.Model):
- """
- A model that tests having multiple GenericForeignKeys
- """
- comparative = models.CharField(max_length=50)
-
- content_type1 = models.ForeignKey(ContentType, related_name="comparative1_set")
- object_id1 = models.PositiveIntegerField()
-
- content_type2 = models.ForeignKey(ContentType, related_name="comparative2_set")
- object_id2 = models.PositiveIntegerField()
-
- first_obj = generic.GenericForeignKey(ct_field="content_type1", fk_field="object_id1")
- other_obj = generic.GenericForeignKey(ct_field="content_type2", fk_field="object_id2")
-
- def __unicode__(self):
- return u"%s is %s than %s" % (self.first_obj, self.comparative, self.other_obj)
-
-class Animal(models.Model):
- common_name = models.CharField(max_length=150)
- latin_name = models.CharField(max_length=150)
-
- tags = generic.GenericRelation(TaggedItem)
- comparisons = generic.GenericRelation(Comparison,
- object_id_field="object_id1",
- content_type_field="content_type1")
-
- def __unicode__(self):
- return self.common_name
-
-class Vegetable(models.Model):
- name = models.CharField(max_length=150)
- is_yucky = models.BooleanField(default=True)
-
- tags = generic.GenericRelation(TaggedItem)
-
- def __unicode__(self):
- return self.name
-
-class Mineral(models.Model):
- name = models.CharField(max_length=150)
- hardness = models.PositiveSmallIntegerField()
-
- # note the lack of an explicit GenericRelation here...
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/generic_relations/tests.py b/parts/django/tests/modeltests/generic_relations/tests.py
deleted file mode 100644
index 3d25301..0000000
--- a/parts/django/tests/modeltests/generic_relations/tests.py
+++ /dev/null
@@ -1,223 +0,0 @@
-from django.contrib.contenttypes.generic import generic_inlineformset_factory
-from django.contrib.contenttypes.models import ContentType
-from django.test import TestCase
-
-from models import (TaggedItem, ValuableTaggedItem, Comparison, Animal,
- Vegetable, Mineral)
-
-
-class GenericRelationsTests(TestCase):
- def test_generic_relations(self):
- # Create the world in 7 lines of code...
- lion = Animal.objects.create(common_name="Lion", latin_name="Panthera leo")
- platypus = Animal.objects.create(
- common_name="Platypus", latin_name="Ornithorhynchus anatinus"
- )
- eggplant = Vegetable.objects.create(name="Eggplant", is_yucky=True)
- bacon = Vegetable.objects.create(name="Bacon", is_yucky=False)
- quartz = Mineral.objects.create(name="Quartz", hardness=7)
-
- # Objects with declared GenericRelations can be tagged directly -- the
- # API mimics the many-to-many API.
- bacon.tags.create(tag="fatty")
- bacon.tags.create(tag="salty")
- lion.tags.create(tag="yellow")
- lion.tags.create(tag="hairy")
- platypus.tags.create(tag="fatty")
- self.assertQuerysetEqual(lion.tags.all(), [
- "<TaggedItem: hairy>",
- "<TaggedItem: yellow>"
- ])
- self.assertQuerysetEqual(bacon.tags.all(), [
- "<TaggedItem: fatty>",
- "<TaggedItem: salty>"
- ])
-
- # You can easily access the content object like a foreign key.
- t = TaggedItem.objects.get(tag="salty")
- self.assertEqual(t.content_object, bacon)
-
- # Recall that the Mineral class doesn't have an explicit GenericRelation
- # defined. That's OK, because you can create TaggedItems explicitly.
- tag1 = TaggedItem.objects.create(content_object=quartz, tag="shiny")
- tag2 = TaggedItem.objects.create(content_object=quartz, tag="clearish")
-
- # However, excluding GenericRelations means your lookups have to be a
- # bit more explicit.
- ctype = ContentType.objects.get_for_model(quartz)
- q = TaggedItem.objects.filter(
- content_type__pk=ctype.id, object_id=quartz.id
- )
- self.assertQuerysetEqual(q, [
- "<TaggedItem: clearish>",
- "<TaggedItem: shiny>"
- ])
-
- # You can set a generic foreign key in the way you'd expect.
- tag1.content_object = platypus
- tag1.save()
- self.assertQuerysetEqual(platypus.tags.all(), [
- "<TaggedItem: fatty>",
- "<TaggedItem: shiny>"
- ])
- q = TaggedItem.objects.filter(
- content_type__pk=ctype.id, object_id=quartz.id
- )
- self.assertQuerysetEqual(q, ["<TaggedItem: clearish>"])
-
- # Queries across generic relations respect the content types. Even
- # though there are two TaggedItems with a tag of "fatty", this query
- # only pulls out the one with the content type related to Animals.
- self.assertQuerysetEqual(Animal.objects.order_by('common_name'), [
- "<Animal: Lion>",
- "<Animal: Platypus>"
- ])
- self.assertQuerysetEqual(Animal.objects.filter(tags__tag='fatty'), [
- "<Animal: Platypus>"
- ])
- self.assertQuerysetEqual(Animal.objects.exclude(tags__tag='fatty'), [
- "<Animal: Lion>"
- ])
-
- # If you delete an object with an explicit Generic relation, the related
- # objects are deleted when the source object is deleted.
- # Original list of tags:
- comp_func = lambda obj: (
- obj.tag, obj.content_type.model_class(), obj.object_id
- )
-
- self.assertQuerysetEqual(TaggedItem.objects.all(), [
- (u'clearish', Mineral, quartz.pk),
- (u'fatty', Animal, platypus.pk),
- (u'fatty', Vegetable, bacon.pk),
- (u'hairy', Animal, lion.pk),
- (u'salty', Vegetable, bacon.pk),
- (u'shiny', Animal, platypus.pk),
- (u'yellow', Animal, lion.pk)
- ],
- comp_func
- )
- lion.delete()
- self.assertQuerysetEqual(TaggedItem.objects.all(), [
- (u'clearish', Mineral, quartz.pk),
- (u'fatty', Animal, platypus.pk),
- (u'fatty', Vegetable, bacon.pk),
- (u'salty', Vegetable, bacon.pk),
- (u'shiny', Animal, platypus.pk)
- ],
- comp_func
- )
-
- # If Generic Relation is not explicitly defined, any related objects
- # remain after deletion of the source object.
- quartz_pk = quartz.pk
- quartz.delete()
- self.assertQuerysetEqual(TaggedItem.objects.all(), [
- (u'clearish', Mineral, quartz_pk),
- (u'fatty', Animal, platypus.pk),
- (u'fatty', Vegetable, bacon.pk),
- (u'salty', Vegetable, bacon.pk),
- (u'shiny', Animal, platypus.pk)
- ],
- comp_func
- )
- # If you delete a tag, the objects using the tag are unaffected
- # (other than losing a tag)
- tag = TaggedItem.objects.order_by("id")[0]
- tag.delete()
- self.assertQuerysetEqual(bacon.tags.all(), ["<TaggedItem: salty>"])
- self.assertQuerysetEqual(TaggedItem.objects.all(), [
- (u'clearish', Mineral, quartz_pk),
- (u'fatty', Animal, platypus.pk),
- (u'salty', Vegetable, bacon.pk),
- (u'shiny', Animal, platypus.pk)
- ],
- comp_func
- )
- TaggedItem.objects.filter(tag='fatty').delete()
- ctype = ContentType.objects.get_for_model(lion)
- self.assertQuerysetEqual(Animal.objects.filter(tags__content_type=ctype), [
- "<Animal: Platypus>"
- ])
-
-
- def test_multiple_gfk(self):
- # Simple tests for multiple GenericForeignKeys
- # only uses one model, since the above tests should be sufficient.
- tiger = Animal.objects.create(common_name="tiger")
- cheetah = Animal.objects.create(common_name="cheetah")
- bear = Animal.objects.create(common_name="bear")
-
- # Create directly
- Comparison.objects.create(
- first_obj=cheetah, other_obj=tiger, comparative="faster"
- )
- Comparison.objects.create(
- first_obj=tiger, other_obj=cheetah, comparative="cooler"
- )
-
- # Create using GenericRelation
- tiger.comparisons.create(other_obj=bear, comparative="cooler")
- tiger.comparisons.create(other_obj=cheetah, comparative="stronger")
- self.assertQuerysetEqual(cheetah.comparisons.all(), [
- "<Comparison: cheetah is faster than tiger>"
- ])
-
- # Filtering works
- self.assertQuerysetEqual(tiger.comparisons.filter(comparative="cooler"), [
- "<Comparison: tiger is cooler than cheetah>",
- "<Comparison: tiger is cooler than bear>"
- ])
-
- # Filtering and deleting works
- subjective = ["cooler"]
- tiger.comparisons.filter(comparative__in=subjective).delete()
- self.assertQuerysetEqual(Comparison.objects.all(), [
- "<Comparison: cheetah is faster than tiger>",
- "<Comparison: tiger is stronger than cheetah>"
- ])
-
- # If we delete cheetah, Comparisons with cheetah as 'first_obj' will be
- # deleted since Animal has an explicit GenericRelation to Comparison
- # through first_obj. Comparisons with cheetah as 'other_obj' will not
- # be deleted.
- cheetah.delete()
- self.assertQuerysetEqual(Comparison.objects.all(), [
- "<Comparison: tiger is stronger than None>"
- ])
-
- def test_gfk_subclasses(self):
- # GenericForeignKey should work with subclasses (see #8309)
- quartz = Mineral.objects.create(name="Quartz", hardness=7)
- valuedtag = ValuableTaggedItem.objects.create(
- content_object=quartz, tag="shiny", value=10
- )
- self.assertEqual(valuedtag.content_object, quartz)
-
- def test_generic_inline_formsets(self):
- GenericFormSet = generic_inlineformset_factory(TaggedItem, extra=1)
- formset = GenericFormSet()
- self.assertEqual(u''.join(form.as_p() for form in formset.forms), u"""<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag">Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" type="text" name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50" /></p>
-<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE" id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" /><input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>""")
-
- formset = GenericFormSet(instance=Animal())
- self.assertEqual(u''.join(form.as_p() for form in formset.forms), u"""<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag">Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" type="text" name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50" /></p>
-<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE" id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" /><input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>""")
-
- platypus = Animal.objects.create(
- common_name="Platypus", latin_name="Ornithorhynchus anatinus"
- )
- platypus.tags.create(tag="shiny")
- GenericFormSet = generic_inlineformset_factory(TaggedItem, extra=1)
- formset = GenericFormSet(instance=platypus)
- tagged_item_id = TaggedItem.objects.get(
- tag='shiny', object_id=platypus.id
- ).id
- self.assertEqual(u''.join(form.as_p() for form in formset.forms), u"""<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag">Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" type="text" name="generic_relations-taggeditem-content_type-object_id-0-tag" value="shiny" maxlength="50" /></p>
-<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE" id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" /><input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" value="%s" id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p><p><label for="id_generic_relations-taggeditem-content_type-object_id-1-tag">Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-1-tag" type="text" name="generic_relations-taggeditem-content_type-object_id-1-tag" maxlength="50" /></p>
-<p><label for="id_generic_relations-taggeditem-content_type-object_id-1-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-1-DELETE" id="id_generic_relations-taggeditem-content_type-object_id-1-DELETE" /><input type="hidden" name="generic_relations-taggeditem-content_type-object_id-1-id" id="id_generic_relations-taggeditem-content_type-object_id-1-id" /></p>""" % tagged_item_id)
-
- lion = Animal.objects.create(common_name="Lion", latin_name="Panthera leo")
- formset = GenericFormSet(instance=lion, prefix='x')
- self.assertEqual(u''.join(form.as_p() for form in formset.forms), u"""<p><label for="id_x-0-tag">Tag:</label> <input id="id_x-0-tag" type="text" name="x-0-tag" maxlength="50" /></p>
-<p><label for="id_x-0-DELETE">Delete:</label> <input type="checkbox" name="x-0-DELETE" id="id_x-0-DELETE" /><input type="hidden" name="x-0-id" id="id_x-0-id" /></p>""")
diff --git a/parts/django/tests/modeltests/get_latest/__init__.py b/parts/django/tests/modeltests/get_latest/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/get_latest/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/get_latest/models.py b/parts/django/tests/modeltests/get_latest/models.py
deleted file mode 100644
index 1eeb299..0000000
--- a/parts/django/tests/modeltests/get_latest/models.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
-8. get_latest_by
-
-Models can have a ``get_latest_by`` attribute, which should be set to the name
-of a ``DateField`` or ``DateTimeField``. If ``get_latest_by`` exists, the
-model's manager will get a ``latest()`` method, which will return the latest
-object in the database according to that field. "Latest" means "having the date
-farthest into the future."
-"""
-
-from django.db import models
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateField()
- expire_date = models.DateField()
- class Meta:
- get_latest_by = 'pub_date'
-
- def __unicode__(self):
- return self.headline
-
-class Person(models.Model):
- name = models.CharField(max_length=30)
- birthday = models.DateField()
-
- # Note that this model doesn't have "get_latest_by" set.
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/get_latest/tests.py b/parts/django/tests/modeltests/get_latest/tests.py
deleted file mode 100644
index 3c3588b..0000000
--- a/parts/django/tests/modeltests/get_latest/tests.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from datetime import datetime
-
-from django.test import TestCase
-
-from models import Article, Person
-
-
-class LatestTests(TestCase):
- def test_latest(self):
- # Because no Articles exist yet, latest() raises ArticleDoesNotExist.
- self.assertRaises(Article.DoesNotExist, Article.objects.latest)
-
- a1 = Article.objects.create(
- headline="Article 1", pub_date=datetime(2005, 7, 26),
- expire_date=datetime(2005, 9, 1)
- )
- a2 = Article.objects.create(
- headline="Article 2", pub_date=datetime(2005, 7, 27),
- expire_date=datetime(2005, 7, 28)
- )
- a3 = Article.objects.create(
- headline="Article 3", pub_date=datetime(2005, 7, 27),
- expire_date=datetime(2005, 8, 27)
- )
- a4 = Article.objects.create(
- headline="Article 4", pub_date=datetime(2005, 7, 28),
- expire_date=datetime(2005, 7, 30)
- )
-
- # Get the latest Article.
- self.assertEqual(Article.objects.latest(), a4)
- # Get the latest Article that matches certain filters.
- self.assertEqual(
- Article.objects.filter(pub_date__lt=datetime(2005, 7, 27)).latest(),
- a1
- )
-
- # Pass a custom field name to latest() to change the field that's used
- # to determine the latest object.
- self.assertEqual(Article.objects.latest('expire_date'), a1)
- self.assertEqual(
- Article.objects.filter(pub_date__gt=datetime(2005, 7, 26)).latest('expire_date'),
- a3,
- )
-
- def test_latest_manual(self):
- # You can still use latest() with a model that doesn't have
- # "get_latest_by" set -- just pass in the field name manually.
- p1 = Person.objects.create(name="Ralph", birthday=datetime(1950, 1, 1))
- p2 = Person.objects.create(name="Stephanie", birthday=datetime(1960, 2, 3))
- self.assertRaises(AssertionError, Person.objects.latest)
-
- self.assertEqual(Person.objects.latest("birthday"), p2)
diff --git a/parts/django/tests/modeltests/get_object_or_404/__init__.py b/parts/django/tests/modeltests/get_object_or_404/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/get_object_or_404/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/get_object_or_404/models.py b/parts/django/tests/modeltests/get_object_or_404/models.py
deleted file mode 100644
index eb3cd82..0000000
--- a/parts/django/tests/modeltests/get_object_or_404/models.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""
-35. DB-API Shortcuts
-
-``get_object_or_404()`` is a shortcut function to be used in view functions for
-performing a ``get()`` lookup and raising a ``Http404`` exception if a
-``DoesNotExist`` exception was raised during the ``get()`` call.
-
-``get_list_or_404()`` is a shortcut function to be used in view functions for
-performing a ``filter()`` lookup and raising a ``Http404`` exception if a
-``DoesNotExist`` exception was raised during the ``filter()`` call.
-"""
-
-from django.db import models
-from django.http import Http404
-from django.shortcuts import get_object_or_404, get_list_or_404
-
-class Author(models.Model):
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return self.name
-
-class ArticleManager(models.Manager):
- def get_query_set(self):
- return super(ArticleManager, self).get_query_set().filter(authors__name__icontains='sir')
-
-class Article(models.Model):
- authors = models.ManyToManyField(Author)
- title = models.CharField(max_length=50)
- objects = models.Manager()
- by_a_sir = ArticleManager()
-
- def __unicode__(self):
- return self.title
diff --git a/parts/django/tests/modeltests/get_object_or_404/tests.py b/parts/django/tests/modeltests/get_object_or_404/tests.py
deleted file mode 100644
index b8c4f75..0000000
--- a/parts/django/tests/modeltests/get_object_or_404/tests.py
+++ /dev/null
@@ -1,80 +0,0 @@
-from django.http import Http404
-from django.shortcuts import get_object_or_404, get_list_or_404
-from django.test import TestCase
-
-from models import Author, Article
-
-
-class GetObjectOr404Tests(TestCase):
- def test_get_object_or_404(self):
- a1 = Author.objects.create(name="Brave Sir Robin")
- a2 = Author.objects.create(name="Patsy")
-
- # No Articles yet, so we should get a Http404 error.
- self.assertRaises(Http404, get_object_or_404, Article, title="Foo")
-
- article = Article.objects.create(title="Run away!")
- article.authors = [a1, a2]
- # get_object_or_404 can be passed a Model to query.
- self.assertEqual(
- get_object_or_404(Article, title__contains="Run"),
- article
- )
-
- # We can also use the Article manager through an Author object.
- self.assertEqual(
- get_object_or_404(a1.article_set, title__contains="Run"),
- article
- )
-
- # No articles containing "Camelot". This should raise a Http404 error.
- self.assertRaises(Http404,
- get_object_or_404, a1.article_set, title__contains="Camelot"
- )
-
- # Custom managers can be used too.
- self.assertEqual(
- get_object_or_404(Article.by_a_sir, title="Run away!"),
- article
- )
-
- # QuerySets can be used too.
- self.assertEqual(
- get_object_or_404(Article.objects.all(), title__contains="Run"),
- article
- )
-
- # Just as when using a get() lookup, you will get an error if more than
- # one object is returned.
-
- self.assertRaises(Author.MultipleObjectsReturned,
- get_object_or_404, Author.objects.all()
- )
-
- # Using an EmptyQuerySet raises a Http404 error.
- self.assertRaises(Http404,
- get_object_or_404, Article.objects.none(), title__contains="Run"
- )
-
- # get_list_or_404 can be used to get lists of objects
- self.assertEqual(
- get_list_or_404(a1.article_set, title__icontains="Run"),
- [article]
- )
-
- # Http404 is returned if the list is empty.
- self.assertRaises(Http404,
- get_list_or_404, a1.article_set, title__icontains="Shrubbery"
- )
-
- # Custom managers can be used too.
- self.assertEqual(
- get_list_or_404(Article.by_a_sir, title__icontains="Run"),
- [article]
- )
-
- # QuerySets can be used too.
- self.assertEqual(
- get_list_or_404(Article.objects.all(), title__icontains="Run"),
- [article]
- )
diff --git a/parts/django/tests/modeltests/get_or_create/__init__.py b/parts/django/tests/modeltests/get_or_create/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/get_or_create/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/get_or_create/models.py b/parts/django/tests/modeltests/get_or_create/models.py
deleted file mode 100644
index db5719b..0000000
--- a/parts/django/tests/modeltests/get_or_create/models.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""
-33. get_or_create()
-
-``get_or_create()`` does what it says: it tries to look up an object with the
-given parameters. If an object isn't found, it creates one with the given
-parameters.
-"""
-
-from django.db import models, IntegrityError
-
-class Person(models.Model):
- first_name = models.CharField(max_length=100)
- last_name = models.CharField(max_length=100)
- birthday = models.DateField()
-
- def __unicode__(self):
- return u'%s %s' % (self.first_name, self.last_name)
-
-class ManualPrimaryKeyTest(models.Model):
- id = models.IntegerField(primary_key=True)
- data = models.CharField(max_length=100)
diff --git a/parts/django/tests/modeltests/get_or_create/tests.py b/parts/django/tests/modeltests/get_or_create/tests.py
deleted file mode 100644
index 1999b20..0000000
--- a/parts/django/tests/modeltests/get_or_create/tests.py
+++ /dev/null
@@ -1,52 +0,0 @@
-from datetime import date
-
-from django.db import IntegrityError
-from django.test import TransactionTestCase
-
-from models import Person, ManualPrimaryKeyTest
-
-
-class GetOrCreateTests(TransactionTestCase):
- def test_get_or_create(self):
- p = Person.objects.create(
- first_name='John', last_name='Lennon', birthday=date(1940, 10, 9)
- )
-
- p, created = Person.objects.get_or_create(
- first_name="John", last_name="Lennon", defaults={
- "birthday": date(1940, 10, 9)
- }
- )
- self.assertFalse(created)
- self.assertEqual(Person.objects.count(), 1)
-
- p, created = Person.objects.get_or_create(
- first_name='George', last_name='Harrison', defaults={
- 'birthday': date(1943, 2, 25)
- }
- )
- self.assertTrue(created)
- self.assertEqual(Person.objects.count(), 2)
-
- # If we execute the exact same statement, it won't create a Person.
- p, created = Person.objects.get_or_create(
- first_name='George', last_name='Harrison', defaults={
- 'birthday': date(1943, 2, 25)
- }
- )
- self.assertFalse(created)
- self.assertEqual(Person.objects.count(), 2)
-
- # If you don't specify a value or default value for all required
- # fields, you will get an error.
- self.assertRaises(IntegrityError,
- Person.objects.get_or_create, first_name="Tom", last_name="Smith"
- )
-
- # If you specify an existing primary key, but different other fields,
- # then you will get an error and data will not be updated.
- m = ManualPrimaryKeyTest.objects.create(id=1, data="Original")
- self.assertRaises(IntegrityError,
- ManualPrimaryKeyTest.objects.get_or_create, id=1, data="Different"
- )
- self.assertEqual(ManualPrimaryKeyTest.objects.get(id=1).data, "Original")
diff --git a/parts/django/tests/modeltests/invalid_models/__init__.py b/parts/django/tests/modeltests/invalid_models/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/modeltests/invalid_models/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/modeltests/invalid_models/models.py b/parts/django/tests/modeltests/invalid_models/models.py
deleted file mode 100644
index 09301ed..0000000
--- a/parts/django/tests/modeltests/invalid_models/models.py
+++ /dev/null
@@ -1,335 +0,0 @@
-"""
-26. Invalid models
-
-This example exists purely to point out errors in models.
-"""
-
-from django.contrib.contenttypes import generic
-from django.db import models
-
-class FieldErrors(models.Model):
- charfield = models.CharField()
- charfield2 = models.CharField(max_length=-1)
- charfield3 = models.CharField(max_length="bad")
- decimalfield = models.DecimalField()
- decimalfield2 = models.DecimalField(max_digits=-1, decimal_places=-1)
- decimalfield3 = models.DecimalField(max_digits="bad", decimal_places="bad")
- filefield = models.FileField()
- choices = models.CharField(max_length=10, choices='bad')
- choices2 = models.CharField(max_length=10, choices=[(1,2,3),(1,2,3)])
- index = models.CharField(max_length=10, db_index='bad')
- field_ = models.CharField(max_length=10)
- nullbool = models.BooleanField(null=True)
-
-class Target(models.Model):
- tgt_safe = models.CharField(max_length=10)
- clash1 = models.CharField(max_length=10)
- clash2 = models.CharField(max_length=10)
-
- clash1_set = models.CharField(max_length=10)
-
-class Clash1(models.Model):
- src_safe = models.CharField(max_length=10)
-
- foreign = models.ForeignKey(Target)
- m2m = models.ManyToManyField(Target)
-
-class Clash2(models.Model):
- src_safe = models.CharField(max_length=10)
-
- foreign_1 = models.ForeignKey(Target, related_name='id')
- foreign_2 = models.ForeignKey(Target, related_name='src_safe')
-
- m2m_1 = models.ManyToManyField(Target, related_name='id')
- m2m_2 = models.ManyToManyField(Target, related_name='src_safe')
-
-class Target2(models.Model):
- clash3 = models.CharField(max_length=10)
- foreign_tgt = models.ForeignKey(Target)
- clashforeign_set = models.ForeignKey(Target)
-
- m2m_tgt = models.ManyToManyField(Target)
- clashm2m_set = models.ManyToManyField(Target)
-
-class Clash3(models.Model):
- src_safe = models.CharField(max_length=10)
-
- foreign_1 = models.ForeignKey(Target2, related_name='foreign_tgt')
- foreign_2 = models.ForeignKey(Target2, related_name='m2m_tgt')
-
- m2m_1 = models.ManyToManyField(Target2, related_name='foreign_tgt')
- m2m_2 = models.ManyToManyField(Target2, related_name='m2m_tgt')
-
-class ClashForeign(models.Model):
- foreign = models.ForeignKey(Target2)
-
-class ClashM2M(models.Model):
- m2m = models.ManyToManyField(Target2)
-
-class SelfClashForeign(models.Model):
- src_safe = models.CharField(max_length=10)
- selfclashforeign = models.CharField(max_length=10)
-
- selfclashforeign_set = models.ForeignKey("SelfClashForeign")
- foreign_1 = models.ForeignKey("SelfClashForeign", related_name='id')
- foreign_2 = models.ForeignKey("SelfClashForeign", related_name='src_safe')
-
-class ValidM2M(models.Model):
- src_safe = models.CharField(max_length=10)
- validm2m = models.CharField(max_length=10)
-
- # M2M fields are symmetrical by default. Symmetrical M2M fields
- # on self don't require a related accessor, so many potential
- # clashes are avoided.
- validm2m_set = models.ManyToManyField("self")
-
- m2m_1 = models.ManyToManyField("self", related_name='id')
- m2m_2 = models.ManyToManyField("self", related_name='src_safe')
-
- m2m_3 = models.ManyToManyField('self')
- m2m_4 = models.ManyToManyField('self')
-
-class SelfClashM2M(models.Model):
- src_safe = models.CharField(max_length=10)
- selfclashm2m = models.CharField(max_length=10)
-
- # Non-symmetrical M2M fields _do_ have related accessors, so
- # there is potential for clashes.
- selfclashm2m_set = models.ManyToManyField("self", symmetrical=False)
-
- m2m_1 = models.ManyToManyField("self", related_name='id', symmetrical=False)
- m2m_2 = models.ManyToManyField("self", related_name='src_safe', symmetrical=False)
-
- m2m_3 = models.ManyToManyField('self', symmetrical=False)
- m2m_4 = models.ManyToManyField('self', symmetrical=False)
-
-class Model(models.Model):
- "But it's valid to call a model Model."
- year = models.PositiveIntegerField() #1960
- make = models.CharField(max_length=10) #Aston Martin
- name = models.CharField(max_length=10) #DB 4 GT
-
-class Car(models.Model):
- colour = models.CharField(max_length=5)
- model = models.ForeignKey(Model)
-
-class MissingRelations(models.Model):
- rel1 = models.ForeignKey("Rel1")
- rel2 = models.ManyToManyField("Rel2")
-
-class MissingManualM2MModel(models.Model):
- name = models.CharField(max_length=5)
- missing_m2m = models.ManyToManyField(Model, through="MissingM2MModel")
-
-class Person(models.Model):
- name = models.CharField(max_length=5)
-
-class Group(models.Model):
- name = models.CharField(max_length=5)
- primary = models.ManyToManyField(Person, through="Membership", related_name="primary")
- secondary = models.ManyToManyField(Person, through="Membership", related_name="secondary")
- tertiary = models.ManyToManyField(Person, through="RelationshipDoubleFK", related_name="tertiary")
-
-class GroupTwo(models.Model):
- name = models.CharField(max_length=5)
- primary = models.ManyToManyField(Person, through="Membership")
- secondary = models.ManyToManyField(Group, through="MembershipMissingFK")
-
-class Membership(models.Model):
- person = models.ForeignKey(Person)
- group = models.ForeignKey(Group)
- not_default_or_null = models.CharField(max_length=5)
-
-class MembershipMissingFK(models.Model):
- person = models.ForeignKey(Person)
-
-class PersonSelfRefM2M(models.Model):
- name = models.CharField(max_length=5)
- friends = models.ManyToManyField('self', through="Relationship")
- too_many_friends = models.ManyToManyField('self', through="RelationshipTripleFK")
-
-class PersonSelfRefM2MExplicit(models.Model):
- name = models.CharField(max_length=5)
- friends = models.ManyToManyField('self', through="ExplicitRelationship", symmetrical=True)
-
-class Relationship(models.Model):
- first = models.ForeignKey(PersonSelfRefM2M, related_name="rel_from_set")
- second = models.ForeignKey(PersonSelfRefM2M, related_name="rel_to_set")
- date_added = models.DateTimeField()
-
-class ExplicitRelationship(models.Model):
- first = models.ForeignKey(PersonSelfRefM2MExplicit, related_name="rel_from_set")
- second = models.ForeignKey(PersonSelfRefM2MExplicit, related_name="rel_to_set")
- date_added = models.DateTimeField()
-
-class RelationshipTripleFK(models.Model):
- first = models.ForeignKey(PersonSelfRefM2M, related_name="rel_from_set_2")
- second = models.ForeignKey(PersonSelfRefM2M, related_name="rel_to_set_2")
- third = models.ForeignKey(PersonSelfRefM2M, related_name="too_many_by_far")
- date_added = models.DateTimeField()
-
-class RelationshipDoubleFK(models.Model):
- first = models.ForeignKey(Person, related_name="first_related_name")
- second = models.ForeignKey(Person, related_name="second_related_name")
- third = models.ForeignKey(Group, related_name="rel_to_set")
- date_added = models.DateTimeField()
-
-class AbstractModel(models.Model):
- name = models.CharField(max_length=10)
- class Meta:
- abstract = True
-
-class AbstractRelationModel(models.Model):
- fk1 = models.ForeignKey('AbstractModel')
- fk2 = models.ManyToManyField('AbstractModel')
-
-class UniqueM2M(models.Model):
- """ Model to test for unique ManyToManyFields, which are invalid. """
- unique_people = models.ManyToManyField(Person, unique=True)
-
-class NonUniqueFKTarget1(models.Model):
- """ Model to test for non-unique FK target in yet-to-be-defined model: expect an error """
- tgt = models.ForeignKey('FKTarget', to_field='bad')
-
-class UniqueFKTarget1(models.Model):
- """ Model to test for unique FK target in yet-to-be-defined model: expect no error """
- tgt = models.ForeignKey('FKTarget', to_field='good')
-
-class FKTarget(models.Model):
- bad = models.IntegerField()
- good = models.IntegerField(unique=True)
-
-class NonUniqueFKTarget2(models.Model):
- """ Model to test for non-unique FK target in previously seen model: expect an error """
- tgt = models.ForeignKey(FKTarget, to_field='bad')
-
-class UniqueFKTarget2(models.Model):
- """ Model to test for unique FK target in previously seen model: expect no error """
- tgt = models.ForeignKey(FKTarget, to_field='good')
-
-class NonExistingOrderingWithSingleUnderscore(models.Model):
- class Meta:
- ordering = ("does_not_exist",)
-
-class Tag(models.Model):
- name = models.CharField("name", max_length=20)
-
-class TaggedObject(models.Model):
- object_id = models.PositiveIntegerField("Object ID")
- tag = models.ForeignKey(Tag)
- content_object = generic.GenericForeignKey()
-
-class UserTaggedObject(models.Model):
- object_tag = models.ForeignKey(TaggedObject)
-
-class ArticleAttachment(models.Model):
- tags = generic.GenericRelation(TaggedObject)
- user_tags = generic.GenericRelation(UserTaggedObject)
-
-model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "max_length" attribute that is a positive integer.
-invalid_models.fielderrors: "charfield2": CharFields require a "max_length" attribute that is a positive integer.
-invalid_models.fielderrors: "charfield3": CharFields require a "max_length" attribute that is a positive integer.
-invalid_models.fielderrors: "decimalfield": DecimalFields require a "decimal_places" attribute that is a non-negative integer.
-invalid_models.fielderrors: "decimalfield": DecimalFields require a "max_digits" attribute that is a positive integer.
-invalid_models.fielderrors: "decimalfield2": DecimalFields require a "decimal_places" attribute that is a non-negative integer.
-invalid_models.fielderrors: "decimalfield2": DecimalFields require a "max_digits" attribute that is a positive integer.
-invalid_models.fielderrors: "decimalfield3": DecimalFields require a "decimal_places" attribute that is a non-negative integer.
-invalid_models.fielderrors: "decimalfield3": DecimalFields require a "max_digits" attribute that is a positive integer.
-invalid_models.fielderrors: "filefield": FileFields require an "upload_to" attribute.
-invalid_models.fielderrors: "choices": "choices" should be iterable (e.g., a tuple or list).
-invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
-invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
-invalid_models.fielderrors: "index": "db_index" should be either None, True or False.
-invalid_models.fielderrors: "field_": Field names cannot end with underscores, because this would lead to ambiguous queryset filters.
-invalid_models.fielderrors: "nullbool": BooleanFields do not accept null values. Use a NullBooleanField instead.
-invalid_models.clash1: Accessor for field 'foreign' clashes with field 'Target.clash1_set'. Add a related_name argument to the definition for 'foreign'.
-invalid_models.clash1: Accessor for field 'foreign' clashes with related m2m field 'Target.clash1_set'. Add a related_name argument to the definition for 'foreign'.
-invalid_models.clash1: Reverse query name for field 'foreign' clashes with field 'Target.clash1'. Add a related_name argument to the definition for 'foreign'.
-invalid_models.clash1: Accessor for m2m field 'm2m' clashes with field 'Target.clash1_set'. Add a related_name argument to the definition for 'm2m'.
-invalid_models.clash1: Accessor for m2m field 'm2m' clashes with related field 'Target.clash1_set'. Add a related_name argument to the definition for 'm2m'.
-invalid_models.clash1: Reverse query name for m2m field 'm2m' clashes with field 'Target.clash1'. Add a related_name argument to the definition for 'm2m'.
-invalid_models.clash2: Accessor for field 'foreign_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash2: Accessor for field 'foreign_1' clashes with related m2m field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash2: Reverse query name for field 'foreign_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash2: Reverse query name for field 'foreign_1' clashes with related m2m field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash2: Accessor for field 'foreign_2' clashes with related m2m field 'Target.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.clash2: Reverse query name for field 'foreign_2' clashes with related m2m field 'Target.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.clash2: Accessor for m2m field 'm2m_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash2: Accessor for m2m field 'm2m_1' clashes with related field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash2: Reverse query name for m2m field 'm2m_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash2: Reverse query name for m2m field 'm2m_1' clashes with related field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash2: Accessor for m2m field 'm2m_2' clashes with related field 'Target.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.clash2: Reverse query name for m2m field 'm2m_2' clashes with related field 'Target.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.clash3: Accessor for field 'foreign_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash3: Accessor for field 'foreign_1' clashes with related m2m field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash3: Reverse query name for field 'foreign_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash3: Reverse query name for field 'foreign_1' clashes with related m2m field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.clash3: Accessor for field 'foreign_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.clash3: Accessor for field 'foreign_2' clashes with related m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.clash3: Reverse query name for field 'foreign_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.clash3: Reverse query name for field 'foreign_2' clashes with related m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.clash3: Accessor for m2m field 'm2m_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash3: Accessor for m2m field 'm2m_1' clashes with related field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash3: Reverse query name for m2m field 'm2m_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash3: Reverse query name for m2m field 'm2m_1' clashes with related field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.clash3: Accessor for m2m field 'm2m_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.clash3: Accessor for m2m field 'm2m_2' clashes with related field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.clash3: Reverse query name for m2m field 'm2m_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.clash3: Reverse query name for m2m field 'm2m_2' clashes with related field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.clashforeign: Accessor for field 'foreign' clashes with field 'Target2.clashforeign_set'. Add a related_name argument to the definition for 'foreign'.
-invalid_models.clashm2m: Accessor for m2m field 'm2m' clashes with m2m field 'Target2.clashm2m_set'. Add a related_name argument to the definition for 'm2m'.
-invalid_models.target2: Accessor for field 'foreign_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'foreign_tgt'.
-invalid_models.target2: Accessor for field 'foreign_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'foreign_tgt'.
-invalid_models.target2: Accessor for field 'foreign_tgt' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'foreign_tgt'.
-invalid_models.target2: Accessor for field 'clashforeign_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashforeign_set'.
-invalid_models.target2: Accessor for field 'clashforeign_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashforeign_set'.
-invalid_models.target2: Accessor for field 'clashforeign_set' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'clashforeign_set'.
-invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
-invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
-invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
-invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
-invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
-invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
-invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
-invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
-invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
-invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
-invalid_models.selfclashforeign: Accessor for field 'selfclashforeign_set' clashes with field 'SelfClashForeign.selfclashforeign_set'. Add a related_name argument to the definition for 'selfclashforeign_set'.
-invalid_models.selfclashforeign: Reverse query name for field 'selfclashforeign_set' clashes with field 'SelfClashForeign.selfclashforeign'. Add a related_name argument to the definition for 'selfclashforeign_set'.
-invalid_models.selfclashforeign: Accessor for field 'foreign_1' clashes with field 'SelfClashForeign.id'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.selfclashforeign: Reverse query name for field 'foreign_1' clashes with field 'SelfClashForeign.id'. Add a related_name argument to the definition for 'foreign_1'.
-invalid_models.selfclashforeign: Accessor for field 'foreign_2' clashes with field 'SelfClashForeign.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.selfclashforeign: Reverse query name for field 'foreign_2' clashes with field 'SelfClashForeign.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
-invalid_models.selfclashm2m: Accessor for m2m field 'selfclashm2m_set' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'selfclashm2m_set'.
-invalid_models.selfclashm2m: Reverse query name for m2m field 'selfclashm2m_set' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'selfclashm2m_set'.
-invalid_models.selfclashm2m: Accessor for m2m field 'selfclashm2m_set' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'selfclashm2m_set'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_1' clashes with field 'SelfClashM2M.id'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_2' clashes with field 'SelfClashM2M.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_1' clashes with field 'SelfClashM2M.id'. Add a related_name argument to the definition for 'm2m_1'.
-invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_2' clashes with field 'SelfClashM2M.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
-invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
-invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_3' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_3'.
-invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_4' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_4'.
-invalid_models.missingrelations: 'rel1' has a relation with model Rel1, which has either not been installed or is abstract.
-invalid_models.missingrelations: 'rel2' has an m2m relation with model Rel2, which has either not been installed or is abstract.
-invalid_models.grouptwo: 'primary' is a manually-defined m2m relation through model Membership, which does not have foreign keys to Person and GroupTwo
-invalid_models.grouptwo: 'secondary' is a manually-defined m2m relation through model MembershipMissingFK, which does not have foreign keys to Group and GroupTwo
-invalid_models.missingmanualm2mmodel: 'missing_m2m' specifies an m2m relation through model MissingM2MModel, which has not been installed
-invalid_models.group: The model Group has two manually-defined m2m relations through the model Membership, which is not permitted. Please consider using an extra field on your intermediary model instead.
-invalid_models.group: Intermediary model RelationshipDoubleFK has more than one foreign key to Person, which is ambiguous and is not permitted.
-invalid_models.personselfrefm2m: Many-to-many fields with intermediate tables cannot be symmetrical.
-invalid_models.personselfrefm2m: Intermediary model RelationshipTripleFK has more than two foreign keys to PersonSelfRefM2M, which is ambiguous and is not permitted.
-invalid_models.personselfrefm2mexplicit: Many-to-many fields with intermediate tables cannot be symmetrical.
-invalid_models.abstractrelationmodel: 'fk1' has a relation with model AbstractModel, which has either not been installed or is abstract.
-invalid_models.abstractrelationmodel: 'fk2' has an m2m relation with model AbstractModel, which has either not been installed or is abstract.
-invalid_models.uniquem2m: ManyToManyFields cannot be unique. Remove the unique argument on 'unique_people'.
-invalid_models.nonuniquefktarget1: Field 'bad' under model 'FKTarget' must have a unique=True constraint.
-invalid_models.nonuniquefktarget2: Field 'bad' under model 'FKTarget' must have a unique=True constraint.
-invalid_models.nonexistingorderingwithsingleunderscore: "ordering" refers to "does_not_exist", a field that doesn't exist.
-invalid_models.articleattachment: Model 'UserTaggedObject' must have a GenericForeignKey in order to create a GenericRelation that points to it.
-"""
diff --git a/parts/django/tests/modeltests/lookup/__init__.py b/parts/django/tests/modeltests/lookup/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/lookup/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/lookup/models.py b/parts/django/tests/modeltests/lookup/models.py
deleted file mode 100644
index 99eec51..0000000
--- a/parts/django/tests/modeltests/lookup/models.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-7. The lookup API
-
-This demonstrates features of the database API.
-"""
-
-from django.db import models
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateTimeField()
- class Meta:
- ordering = ('-pub_date', 'headline')
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/modeltests/lookup/tests.py b/parts/django/tests/modeltests/lookup/tests.py
deleted file mode 100644
index 9e0b68e..0000000
--- a/parts/django/tests/modeltests/lookup/tests.py
+++ /dev/null
@@ -1,547 +0,0 @@
-from datetime import datetime
-from operator import attrgetter
-
-from django.conf import settings
-from django.core.exceptions import FieldError
-from django.db import connection, DEFAULT_DB_ALIAS
-from django.test import TestCase
-
-from models import Article
-
-class LookupTests(TestCase):
-
- #def setUp(self):
- def setUp(self):
- # Create a couple of Articles.
- self.a1 = Article(headline='Article 1', pub_date=datetime(2005, 7, 26))
- self.a1.save()
- self.a2 = Article(headline='Article 2', pub_date=datetime(2005, 7, 27))
- self.a2.save()
- self.a3 = Article(headline='Article 3', pub_date=datetime(2005, 7, 27))
- self.a3.save()
- self.a4 = Article(headline='Article 4', pub_date=datetime(2005, 7, 28))
- self.a4.save()
- self.a5 = Article(headline='Article 5', pub_date=datetime(2005, 8, 1, 9, 0))
- self.a5.save()
- self.a6 = Article(headline='Article 6', pub_date=datetime(2005, 8, 1, 8, 0))
- self.a6.save()
- self.a7 = Article(headline='Article 7', pub_date=datetime(2005, 7, 27))
- self.a7.save()
-
- def test_exists(self):
- # We can use .exists() to check that there are some
- self.assertTrue(Article.objects.exists())
- for a in Article.objects.all():
- a.delete()
- # There should be none now!
- self.assertFalse(Article.objects.exists())
-
- def test_lookup_int_as_str(self):
- # Integer value can be queried using string
- self.assertQuerysetEqual(Article.objects.filter(id__iexact=str(self.a1.id)),
- ['<Article: Article 1>'])
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] in (
- 'django.db.backends.postgresql',
- 'django.db.backends.postgresql_psycopg2'):
- def test_lookup_date_as_str(self):
- # A date lookup can be performed using a string search
- self.assertQuerysetEqual(Article.objects.filter(pub_date__startswith='2005'),
- [
- '<Article: Article 5>',
- '<Article: Article 6>',
- '<Article: Article 4>',
- '<Article: Article 2>',
- '<Article: Article 3>',
- '<Article: Article 7>',
- '<Article: Article 1>',
- ])
-
- def test_iterator(self):
- # Each QuerySet gets iterator(), which is a generator that "lazily"
- # returns results using database-level iteration.
- self.assertQuerysetEqual(Article.objects.iterator(),
- [
- 'Article 5',
- 'Article 6',
- 'Article 4',
- 'Article 2',
- 'Article 3',
- 'Article 7',
- 'Article 1',
- ],
- transform=attrgetter('headline'))
- # iterator() can be used on any QuerySet.
- self.assertQuerysetEqual(
- Article.objects.filter(headline__endswith='4').iterator(),
- ['Article 4'],
- transform=attrgetter('headline'))
-
- def test_count(self):
- # count() returns the number of objects matching search criteria.
- self.assertEqual(Article.objects.count(), 7)
- self.assertEqual(Article.objects.filter(pub_date__exact=datetime(2005, 7, 27)).count(), 3)
- self.assertEqual(Article.objects.filter(headline__startswith='Blah blah').count(), 0)
-
- # count() should respect sliced query sets.
- articles = Article.objects.all()
- self.assertEqual(articles.count(), 7)
- self.assertEqual(articles[:4].count(), 4)
- self.assertEqual(articles[1:100].count(), 6)
- self.assertEqual(articles[10:100].count(), 0)
-
- # Date and date/time lookups can also be done with strings.
- self.assertEqual(Article.objects.filter(pub_date__exact='2005-07-27 00:00:00').count(), 3)
-
- def test_in_bulk(self):
- # in_bulk() takes a list of IDs and returns a dictionary mapping IDs to objects.
- arts = Article.objects.in_bulk([self.a1.id, self.a2.id])
- self.assertEqual(arts[self.a1.id], self.a1)
- self.assertEqual(arts[self.a2.id], self.a2)
- self.assertEqual(Article.objects.in_bulk([self.a3.id]), {self.a3.id: self.a3})
- self.assertEqual(Article.objects.in_bulk(set([self.a3.id])), {self.a3.id: self.a3})
- self.assertEqual(Article.objects.in_bulk(frozenset([self.a3.id])), {self.a3.id: self.a3})
- self.assertEqual(Article.objects.in_bulk((self.a3.id,)), {self.a3.id: self.a3})
- self.assertEqual(Article.objects.in_bulk([1000]), {})
- self.assertEqual(Article.objects.in_bulk([]), {})
- self.assertRaises(AssertionError, Article.objects.in_bulk, 'foo')
- self.assertRaises(TypeError, Article.objects.in_bulk)
- self.assertRaises(TypeError, Article.objects.in_bulk, headline__startswith='Blah')
-
- def test_values(self):
- # values() returns a list of dictionaries instead of object instances --
- # and you can specify which fields you want to retrieve.
- identity = lambda x:x
- self.assertQuerysetEqual(Article.objects.values('headline'),
- [
- {'headline': u'Article 5'},
- {'headline': u'Article 6'},
- {'headline': u'Article 4'},
- {'headline': u'Article 2'},
- {'headline': u'Article 3'},
- {'headline': u'Article 7'},
- {'headline': u'Article 1'},
- ],
- transform=identity)
- self.assertQuerysetEqual(
- Article.objects.filter(pub_date__exact=datetime(2005, 7, 27)).values('id'),
- [{'id': self.a2.id}, {'id': self.a3.id}, {'id': self.a7.id}],
- transform=identity)
- self.assertQuerysetEqual(Article.objects.values('id', 'headline'),
- [
- {'id': self.a5.id, 'headline': 'Article 5'},
- {'id': self.a6.id, 'headline': 'Article 6'},
- {'id': self.a4.id, 'headline': 'Article 4'},
- {'id': self.a2.id, 'headline': 'Article 2'},
- {'id': self.a3.id, 'headline': 'Article 3'},
- {'id': self.a7.id, 'headline': 'Article 7'},
- {'id': self.a1.id, 'headline': 'Article 1'},
- ],
- transform=identity)
- # You can use values() with iterator() for memory savings,
- # because iterator() uses database-level iteration.
- self.assertQuerysetEqual(Article.objects.values('id', 'headline').iterator(),
- [
- {'headline': u'Article 5', 'id': self.a5.id},
- {'headline': u'Article 6', 'id': self.a6.id},
- {'headline': u'Article 4', 'id': self.a4.id},
- {'headline': u'Article 2', 'id': self.a2.id},
- {'headline': u'Article 3', 'id': self.a3.id},
- {'headline': u'Article 7', 'id': self.a7.id},
- {'headline': u'Article 1', 'id': self.a1.id},
- ],
- transform=identity)
- # The values() method works with "extra" fields specified in extra(select).
- self.assertQuerysetEqual(
- Article.objects.extra(select={'id_plus_one': 'id + 1'}).values('id', 'id_plus_one'),
- [
- {'id': self.a5.id, 'id_plus_one': self.a5.id + 1},
- {'id': self.a6.id, 'id_plus_one': self.a6.id + 1},
- {'id': self.a4.id, 'id_plus_one': self.a4.id + 1},
- {'id': self.a2.id, 'id_plus_one': self.a2.id + 1},
- {'id': self.a3.id, 'id_plus_one': self.a3.id + 1},
- {'id': self.a7.id, 'id_plus_one': self.a7.id + 1},
- {'id': self.a1.id, 'id_plus_one': self.a1.id + 1},
- ],
- transform=identity)
- data = {
- 'id_plus_one': 'id+1',
- 'id_plus_two': 'id+2',
- 'id_plus_three': 'id+3',
- 'id_plus_four': 'id+4',
- 'id_plus_five': 'id+5',
- 'id_plus_six': 'id+6',
- 'id_plus_seven': 'id+7',
- 'id_plus_eight': 'id+8',
- }
- self.assertQuerysetEqual(
- Article.objects.filter(id=self.a1.id).extra(select=data).values(*data.keys()),
- [{
- 'id_plus_one': self.a1.id + 1,
- 'id_plus_two': self.a1.id + 2,
- 'id_plus_three': self.a1.id + 3,
- 'id_plus_four': self.a1.id + 4,
- 'id_plus_five': self.a1.id + 5,
- 'id_plus_six': self.a1.id + 6,
- 'id_plus_seven': self.a1.id + 7,
- 'id_plus_eight': self.a1.id + 8,
- }], transform=identity)
- # However, an exception FieldDoesNotExist will be thrown if you specify
- # a non-existent field name in values() (a field that is neither in the
- # model nor in extra(select)).
- self.assertRaises(FieldError,
- Article.objects.extra(select={'id_plus_one': 'id + 1'}).values,
- 'id', 'id_plus_two')
- # If you don't specify field names to values(), all are returned.
- self.assertQuerysetEqual(Article.objects.filter(id=self.a5.id).values(),
- [{
- 'id': self.a5.id,
- 'headline': 'Article 5',
- 'pub_date': datetime(2005, 8, 1, 9, 0)
- }], transform=identity)
-
- def test_values_list(self):
- # values_list() is similar to values(), except that the results are
- # returned as a list of tuples, rather than a list of dictionaries.
- # Within each tuple, the order of the elemnts is the same as the order
- # of fields in the values_list() call.
- identity = lambda x:x
- self.assertQuerysetEqual(Article.objects.values_list('headline'),
- [
- (u'Article 5',),
- (u'Article 6',),
- (u'Article 4',),
- (u'Article 2',),
- (u'Article 3',),
- (u'Article 7',),
- (u'Article 1',),
- ], transform=identity)
- self.assertQuerysetEqual(Article.objects.values_list('id').order_by('id'),
- [(self.a1.id,), (self.a2.id,), (self.a3.id,), (self.a4.id,), (self.a5.id,), (self.a6.id,), (self.a7.id,)],
- transform=identity)
- self.assertQuerysetEqual(
- Article.objects.values_list('id', flat=True).order_by('id'),
- [self.a1.id, self.a2.id, self.a3.id, self.a4.id, self.a5.id, self.a6.id, self.a7.id],
- transform=identity)
- self.assertQuerysetEqual(
- Article.objects.extra(select={'id_plus_one': 'id+1'})
- .order_by('id').values_list('id'),
- [(self.a1.id,), (self.a2.id,), (self.a3.id,), (self.a4.id,), (self.a5.id,), (self.a6.id,), (self.a7.id,)],
- transform=identity)
- self.assertQuerysetEqual(
- Article.objects.extra(select={'id_plus_one': 'id+1'})
- .order_by('id').values_list('id_plus_one', 'id'),
- [
- (self.a1.id+1, self.a1.id),
- (self.a2.id+1, self.a2.id),
- (self.a3.id+1, self.a3.id),
- (self.a4.id+1, self.a4.id),
- (self.a5.id+1, self.a5.id),
- (self.a6.id+1, self.a6.id),
- (self.a7.id+1, self.a7.id)
- ],
- transform=identity)
- self.assertQuerysetEqual(
- Article.objects.extra(select={'id_plus_one': 'id+1'})
- .order_by('id').values_list('id', 'id_plus_one'),
- [
- (self.a1.id, self.a1.id+1),
- (self.a2.id, self.a2.id+1),
- (self.a3.id, self.a3.id+1),
- (self.a4.id, self.a4.id+1),
- (self.a5.id, self.a5.id+1),
- (self.a6.id, self.a6.id+1),
- (self.a7.id, self.a7.id+1)
- ],
- transform=identity)
- self.assertRaises(TypeError, Article.objects.values_list, 'id', 'headline', flat=True)
-
- def test_get_next_previous_by(self):
- # Every DateField and DateTimeField creates get_next_by_FOO() and
- # get_previous_by_FOO() methods. In the case of identical date values,
- # these methods will use the ID as a fallback check. This guarantees
- # that no records are skipped or duplicated.
- self.assertEqual(repr(self.a1.get_next_by_pub_date()),
- '<Article: Article 2>')
- self.assertEqual(repr(self.a2.get_next_by_pub_date()),
- '<Article: Article 3>')
- self.assertEqual(repr(self.a2.get_next_by_pub_date(headline__endswith='6')),
- '<Article: Article 6>')
- self.assertEqual(repr(self.a3.get_next_by_pub_date()),
- '<Article: Article 7>')
- self.assertEqual(repr(self.a4.get_next_by_pub_date()),
- '<Article: Article 6>')
- self.assertRaises(Article.DoesNotExist, self.a5.get_next_by_pub_date)
- self.assertEqual(repr(self.a6.get_next_by_pub_date()),
- '<Article: Article 5>')
- self.assertEqual(repr(self.a7.get_next_by_pub_date()),
- '<Article: Article 4>')
-
- self.assertEqual(repr(self.a7.get_previous_by_pub_date()),
- '<Article: Article 3>')
- self.assertEqual(repr(self.a6.get_previous_by_pub_date()),
- '<Article: Article 4>')
- self.assertEqual(repr(self.a5.get_previous_by_pub_date()),
- '<Article: Article 6>')
- self.assertEqual(repr(self.a4.get_previous_by_pub_date()),
- '<Article: Article 7>')
- self.assertEqual(repr(self.a3.get_previous_by_pub_date()),
- '<Article: Article 2>')
- self.assertEqual(repr(self.a2.get_previous_by_pub_date()),
- '<Article: Article 1>')
-
- def test_escaping(self):
- # Underscores, percent signs and backslashes have special meaning in the
- # underlying SQL code, but Django handles the quoting of them automatically.
- a8 = Article(headline='Article_ with underscore', pub_date=datetime(2005, 11, 20))
- a8.save()
- self.assertQuerysetEqual(Article.objects.filter(headline__startswith='Article'),
- [
- '<Article: Article_ with underscore>',
- '<Article: Article 5>',
- '<Article: Article 6>',
- '<Article: Article 4>',
- '<Article: Article 2>',
- '<Article: Article 3>',
- '<Article: Article 7>',
- '<Article: Article 1>',
- ])
- self.assertQuerysetEqual(Article.objects.filter(headline__startswith='Article_'),
- ['<Article: Article_ with underscore>'])
- a9 = Article(headline='Article% with percent sign', pub_date=datetime(2005, 11, 21))
- a9.save()
- self.assertQuerysetEqual(Article.objects.filter(headline__startswith='Article'),
- [
- '<Article: Article% with percent sign>',
- '<Article: Article_ with underscore>',
- '<Article: Article 5>',
- '<Article: Article 6>',
- '<Article: Article 4>',
- '<Article: Article 2>',
- '<Article: Article 3>',
- '<Article: Article 7>',
- '<Article: Article 1>',
- ])
- self.assertQuerysetEqual(Article.objects.filter(headline__startswith='Article%'),
- ['<Article: Article% with percent sign>'])
- a10 = Article(headline='Article with \\ backslash', pub_date=datetime(2005, 11, 22))
- a10.save()
- self.assertQuerysetEqual(Article.objects.filter(headline__contains='\\'),
- ['<Article: Article with \ backslash>'])
-
- def test_exclude(self):
- a8 = Article.objects.create(headline='Article_ with underscore', pub_date=datetime(2005, 11, 20))
- a9 = Article.objects.create(headline='Article% with percent sign', pub_date=datetime(2005, 11, 21))
- a10 = Article.objects.create(headline='Article with \\ backslash', pub_date=datetime(2005, 11, 22))
-
- # exclude() is the opposite of filter() when doing lookups:
- self.assertQuerysetEqual(
- Article.objects.filter(headline__contains='Article').exclude(headline__contains='with'),
- [
- '<Article: Article 5>',
- '<Article: Article 6>',
- '<Article: Article 4>',
- '<Article: Article 2>',
- '<Article: Article 3>',
- '<Article: Article 7>',
- '<Article: Article 1>',
- ])
- self.assertQuerysetEqual(Article.objects.exclude(headline__startswith="Article_"),
- [
- '<Article: Article with \\ backslash>',
- '<Article: Article% with percent sign>',
- '<Article: Article 5>',
- '<Article: Article 6>',
- '<Article: Article 4>',
- '<Article: Article 2>',
- '<Article: Article 3>',
- '<Article: Article 7>',
- '<Article: Article 1>',
- ])
- self.assertQuerysetEqual(Article.objects.exclude(headline="Article 7"),
- [
- '<Article: Article with \\ backslash>',
- '<Article: Article% with percent sign>',
- '<Article: Article_ with underscore>',
- '<Article: Article 5>',
- '<Article: Article 6>',
- '<Article: Article 4>',
- '<Article: Article 2>',
- '<Article: Article 3>',
- '<Article: Article 1>',
- ])
-
- def test_none(self):
- # none() returns an EmptyQuerySet that behaves like any other QuerySet object
- self.assertQuerysetEqual(Article.objects.none(), [])
- self.assertQuerysetEqual(
- Article.objects.none().filter(headline__startswith='Article'), [])
- self.assertQuerysetEqual(
- Article.objects.filter(headline__startswith='Article').none(), [])
- self.assertEqual(Article.objects.none().count(), 0)
- self.assertEqual(
- Article.objects.none().update(headline="This should not take effect"), 0)
- self.assertQuerysetEqual(
- [article for article in Article.objects.none().iterator()],
- [])
-
- def test_in(self):
- # using __in with an empty list should return an empty query set
- self.assertQuerysetEqual(Article.objects.filter(id__in=[]), [])
- self.assertQuerysetEqual(Article.objects.exclude(id__in=[]),
- [
- '<Article: Article 5>',
- '<Article: Article 6>',
- '<Article: Article 4>',
- '<Article: Article 2>',
- '<Article: Article 3>',
- '<Article: Article 7>',
- '<Article: Article 1>',
- ])
-
- def test_error_messages(self):
- # Programming errors are pointed out with nice error messages
- try:
- Article.objects.filter(pub_date_year='2005').count()
- self.fail('FieldError not raised')
- except FieldError, ex:
- self.assertEqual(str(ex), "Cannot resolve keyword 'pub_date_year' "
- "into field. Choices are: headline, id, pub_date")
- try:
- Article.objects.filter(headline__starts='Article')
- self.fail('FieldError not raised')
- except FieldError, ex:
- self.assertEqual(str(ex), "Join on field 'headline' not permitted. "
- "Did you misspell 'starts' for the lookup type?")
-
- def test_regex(self):
- # Create some articles with a bit more interesting headlines for testing field lookups:
- for a in Article.objects.all():
- a.delete()
- now = datetime.now()
- a1 = Article(pub_date=now, headline='f')
- a1.save()
- a2 = Article(pub_date=now, headline='fo')
- a2.save()
- a3 = Article(pub_date=now, headline='foo')
- a3.save()
- a4 = Article(pub_date=now, headline='fooo')
- a4.save()
- a5 = Article(pub_date=now, headline='hey-Foo')
- a5.save()
- a6 = Article(pub_date=now, headline='bar')
- a6.save()
- a7 = Article(pub_date=now, headline='AbBa')
- a7.save()
- a8 = Article(pub_date=now, headline='baz')
- a8.save()
- a9 = Article(pub_date=now, headline='baxZ')
- a9.save()
- # zero-or-more
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'fo*'),
- ['<Article: f>', '<Article: fo>', '<Article: foo>', '<Article: fooo>'])
- self.assertQuerysetEqual(Article.objects.filter(headline__iregex=r'fo*'),
- [
- '<Article: f>',
- '<Article: fo>',
- '<Article: foo>',
- '<Article: fooo>',
- '<Article: hey-Foo>',
- ])
- # one-or-more
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'fo+'),
- ['<Article: fo>', '<Article: foo>', '<Article: fooo>'])
- # wildcard
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'fooo?'),
- ['<Article: foo>', '<Article: fooo>'])
- # leading anchor
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'^b'),
- ['<Article: bar>', '<Article: baxZ>', '<Article: baz>'])
- self.assertQuerysetEqual(Article.objects.filter(headline__iregex=r'^a'),
- ['<Article: AbBa>'])
- # trailing anchor
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'z$'),
- ['<Article: baz>'])
- self.assertQuerysetEqual(Article.objects.filter(headline__iregex=r'z$'),
- ['<Article: baxZ>', '<Article: baz>'])
- # character sets
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'ba[rz]'),
- ['<Article: bar>', '<Article: baz>'])
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'ba.[RxZ]'),
- ['<Article: baxZ>'])
- self.assertQuerysetEqual(Article.objects.filter(headline__iregex=r'ba[RxZ]'),
- ['<Article: bar>', '<Article: baxZ>', '<Article: baz>'])
-
- # and more articles:
- a10 = Article(pub_date=now, headline='foobar')
- a10.save()
- a11 = Article(pub_date=now, headline='foobaz')
- a11.save()
- a12 = Article(pub_date=now, headline='ooF')
- a12.save()
- a13 = Article(pub_date=now, headline='foobarbaz')
- a13.save()
- a14 = Article(pub_date=now, headline='zoocarfaz')
- a14.save()
- a15 = Article(pub_date=now, headline='barfoobaz')
- a15.save()
- a16 = Article(pub_date=now, headline='bazbaRFOO')
- a16.save()
-
- # alternation
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'oo(f|b)'),
- [
- '<Article: barfoobaz>',
- '<Article: foobar>',
- '<Article: foobarbaz>',
- '<Article: foobaz>',
- ])
- self.assertQuerysetEqual(Article.objects.filter(headline__iregex=r'oo(f|b)'),
- [
- '<Article: barfoobaz>',
- '<Article: foobar>',
- '<Article: foobarbaz>',
- '<Article: foobaz>',
- '<Article: ooF>',
- ])
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'^foo(f|b)'),
- ['<Article: foobar>', '<Article: foobarbaz>', '<Article: foobaz>'])
-
- # greedy matching
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b.*az'),
- [
- '<Article: barfoobaz>',
- '<Article: baz>',
- '<Article: bazbaRFOO>',
- '<Article: foobarbaz>',
- '<Article: foobaz>',
- ])
- self.assertQuerysetEqual(Article.objects.filter(headline__iregex=r'b.*ar'),
- [
- '<Article: bar>',
- '<Article: barfoobaz>',
- '<Article: bazbaRFOO>',
- '<Article: foobar>',
- '<Article: foobarbaz>',
- ])
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.mysql':
- def test_regex_backreferencing(self):
- # grouping and backreferences
- now = datetime.now()
- a10 = Article(pub_date=now, headline='foobar')
- a10.save()
- a11 = Article(pub_date=now, headline='foobaz')
- a11.save()
- a12 = Article(pub_date=now, headline='ooF')
- a12.save()
- a13 = Article(pub_date=now, headline='foobarbaz')
- a13.save()
- a14 = Article(pub_date=now, headline='zoocarfaz')
- a14.save()
- a15 = Article(pub_date=now, headline='barfoobaz')
- a15.save()
- a16 = Article(pub_date=now, headline='bazbaRFOO')
- a16.save()
- self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b(.).*b\1'),
- ['<Article: barfoobaz>', '<Article: bazbaRFOO>', '<Article: foobarbaz>'])
diff --git a/parts/django/tests/modeltests/m2m_and_m2o/__init__.py b/parts/django/tests/modeltests/m2m_and_m2o/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/m2m_and_m2o/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/m2m_and_m2o/models.py b/parts/django/tests/modeltests/m2m_and_m2o/models.py
deleted file mode 100644
index 0fea1a2..0000000
--- a/parts/django/tests/modeltests/m2m_and_m2o/models.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""
-29. Many-to-many and many-to-one relationships to the same table
-
-Make sure to set ``related_name`` if you use relationships to the same table.
-"""
-
-from django.db import models
-
-class User(models.Model):
- username = models.CharField(max_length=20)
-
-class Issue(models.Model):
- num = models.IntegerField()
- cc = models.ManyToManyField(User, blank=True, related_name='test_issue_cc')
- client = models.ForeignKey(User, related_name='test_issue_client')
-
- def __unicode__(self):
- return unicode(self.num)
-
- class Meta:
- ordering = ('num',)
diff --git a/parts/django/tests/modeltests/m2m_and_m2o/tests.py b/parts/django/tests/modeltests/m2m_and_m2o/tests.py
deleted file mode 100644
index dedf9cd..0000000
--- a/parts/django/tests/modeltests/m2m_and_m2o/tests.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from django.db.models import Q
-from django.test import TestCase
-
-from models import Issue, User
-
-
-class RelatedObjectTests(TestCase):
- def test_m2m_and_m2o(self):
- r = User.objects.create(username="russell")
- g = User.objects.create(username="gustav")
-
- i1 = Issue(num=1)
- i1.client = r
- i1.save()
-
- i2 = Issue(num=2)
- i2.client = r
- i2.save()
- i2.cc.add(r)
-
- i3 = Issue(num=3)
- i3.client = g
- i3.save()
- i3.cc.add(r)
-
- self.assertQuerysetEqual(
- Issue.objects.filter(client=r.id), [
- 1,
- 2,
- ],
- lambda i: i.num
- )
- self.assertQuerysetEqual(
- Issue.objects.filter(client=g.id), [
- 3,
- ],
- lambda i: i.num
- )
- self.assertQuerysetEqual(
- Issue.objects.filter(cc__id__exact=g.id), []
- )
- self.assertQuerysetEqual(
- Issue.objects.filter(cc__id__exact=r.id), [
- 2,
- 3,
- ],
- lambda i: i.num
- )
-
- # These queries combine results from the m2m and the m2o relationships.
- # They're three ways of saying the same thing.
- self.assertQuerysetEqual(
- Issue.objects.filter(Q(cc__id__exact = r.id) | Q(client=r.id)), [
- 1,
- 2,
- 3,
- ],
- lambda i: i.num
- )
- self.assertQuerysetEqual(
- Issue.objects.filter(cc__id__exact=r.id) | Issue.objects.filter(client=r.id), [
- 1,
- 2,
- 3,
- ],
- lambda i: i.num
- )
- self.assertQuerysetEqual(
- Issue.objects.filter(Q(client=r.id) | Q(cc__id__exact=r.id)), [
- 1,
- 2,
- 3,
- ],
- lambda i: i.num
- )
diff --git a/parts/django/tests/modeltests/m2m_intermediary/__init__.py b/parts/django/tests/modeltests/m2m_intermediary/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/m2m_intermediary/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/m2m_intermediary/models.py b/parts/django/tests/modeltests/m2m_intermediary/models.py
deleted file mode 100644
index 8042a52..0000000
--- a/parts/django/tests/modeltests/m2m_intermediary/models.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-9. Many-to-many relationships via an intermediary table
-
-For many-to-many relationships that need extra fields on the intermediary
-table, use an intermediary model.
-
-In this example, an ``Article`` can have multiple ``Reporter`` objects, and
-each ``Article``-``Reporter`` combination (a ``Writer``) has a ``position``
-field, which specifies the ``Reporter``'s position for the given article
-(e.g. "Staff writer").
-"""
-
-from django.db import models
-
-class Reporter(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateField()
-
- def __unicode__(self):
- return self.headline
-
-class Writer(models.Model):
- reporter = models.ForeignKey(Reporter)
- article = models.ForeignKey(Article)
- position = models.CharField(max_length=100)
-
- def __unicode__(self):
- return u'%s (%s)' % (self.reporter, self.position)
-
diff --git a/parts/django/tests/modeltests/m2m_intermediary/tests.py b/parts/django/tests/modeltests/m2m_intermediary/tests.py
deleted file mode 100644
index 5f35741..0000000
--- a/parts/django/tests/modeltests/m2m_intermediary/tests.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from datetime import datetime
-
-from django.test import TestCase
-
-from models import Reporter, Article, Writer
-
-
-class M2MIntermediaryTests(TestCase):
- def test_intermeiary(self):
- r1 = Reporter.objects.create(first_name="John", last_name="Smith")
- r2 = Reporter.objects.create(first_name="Jane", last_name="Doe")
-
- a = Article.objects.create(
- headline="This is a test", pub_date=datetime(2005, 7, 27)
- )
-
- w1 = Writer.objects.create(reporter=r1, article=a, position="Main writer")
- w2 = Writer.objects.create(reporter=r2, article=a, position="Contributor")
-
- self.assertQuerysetEqual(
- a.writer_set.select_related().order_by("-position"), [
- ("John Smith", "Main writer"),
- ("Jane Doe", "Contributor"),
- ],
- lambda w: (unicode(w.reporter), w.position)
- )
- self.assertEqual(w1.reporter, r1)
- self.assertEqual(w2.reporter, r2)
-
- self.assertEqual(w1.article, a)
- self.assertEqual(w2.article, a)
-
- self.assertQuerysetEqual(
- r1.writer_set.all(), [
- ("John Smith", "Main writer")
- ],
- lambda w: (unicode(w.reporter), w.position)
- )
diff --git a/parts/django/tests/modeltests/m2m_multiple/__init__.py b/parts/django/tests/modeltests/m2m_multiple/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/m2m_multiple/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/m2m_multiple/models.py b/parts/django/tests/modeltests/m2m_multiple/models.py
deleted file mode 100644
index e53f840..0000000
--- a/parts/django/tests/modeltests/m2m_multiple/models.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
-20. Multiple many-to-many relationships between the same two tables
-
-In this example, an ``Article`` can have many "primary" ``Category`` objects
-and many "secondary" ``Category`` objects.
-
-Set ``related_name`` to designate what the reverse relationship is called.
-"""
-
-from django.db import models
-
-class Category(models.Model):
- name = models.CharField(max_length=20)
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class Article(models.Model):
- headline = models.CharField(max_length=50)
- pub_date = models.DateTimeField()
- primary_categories = models.ManyToManyField(Category, related_name='primary_article_set')
- secondary_categories = models.ManyToManyField(Category, related_name='secondary_article_set')
- class Meta:
- ordering = ('pub_date',)
-
- def __unicode__(self):
- return self.headline
-
diff --git a/parts/django/tests/modeltests/m2m_multiple/tests.py b/parts/django/tests/modeltests/m2m_multiple/tests.py
deleted file mode 100644
index 1f4503a..0000000
--- a/parts/django/tests/modeltests/m2m_multiple/tests.py
+++ /dev/null
@@ -1,84 +0,0 @@
-from datetime import datetime
-
-from django.test import TestCase
-
-from models import Article, Category
-
-
-class M2MMultipleTests(TestCase):
- def test_multiple(self):
- c1, c2, c3, c4 = [
- Category.objects.create(name=name)
- for name in ["Sports", "News", "Crime", "Life"]
- ]
-
- a1 = Article.objects.create(
- headline="Area man steals", pub_date=datetime(2005, 11, 27)
- )
- a1.primary_categories.add(c2, c3)
- a1.secondary_categories.add(c4)
-
- a2 = Article.objects.create(
- headline="Area man runs", pub_date=datetime(2005, 11, 28)
- )
- a2.primary_categories.add(c1, c2)
- a2.secondary_categories.add(c4)
-
- self.assertQuerysetEqual(
- a1.primary_categories.all(), [
- "Crime",
- "News",
- ],
- lambda c: c.name
- )
- self.assertQuerysetEqual(
- a2.primary_categories.all(), [
- "News",
- "Sports",
- ],
- lambda c: c.name
- )
- self.assertQuerysetEqual(
- a1.secondary_categories.all(), [
- "Life",
- ],
- lambda c: c.name
- )
- self.assertQuerysetEqual(
- c1.primary_article_set.all(), [
- "Area man runs",
- ],
- lambda a: a.headline
- )
- self.assertQuerysetEqual(
- c1.secondary_article_set.all(), []
- )
- self.assertQuerysetEqual(
- c2.primary_article_set.all(), [
- "Area man steals",
- "Area man runs",
- ],
- lambda a: a.headline
- )
- self.assertQuerysetEqual(
- c2.secondary_article_set.all(), []
- )
- self.assertQuerysetEqual(
- c3.primary_article_set.all(), [
- "Area man steals",
- ],
- lambda a: a.headline
- )
- self.assertQuerysetEqual(
- c3.secondary_article_set.all(), []
- )
- self.assertQuerysetEqual(
- c4.primary_article_set.all(), []
- )
- self.assertQuerysetEqual(
- c4.secondary_article_set.all(), [
- "Area man steals",
- "Area man runs",
- ],
- lambda a: a.headline
- )
diff --git a/parts/django/tests/modeltests/m2m_recursive/__init__.py b/parts/django/tests/modeltests/m2m_recursive/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/m2m_recursive/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/m2m_recursive/models.py b/parts/django/tests/modeltests/m2m_recursive/models.py
deleted file mode 100644
index 83c943a..0000000
--- a/parts/django/tests/modeltests/m2m_recursive/models.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""
-28. Many-to-many relationships between the same two tables
-
-In this example, a ``Person`` can have many friends, who are also ``Person``
-objects. Friendship is a symmetrical relationship - if I am your friend, you
-are my friend. Here, ``friends`` is an example of a symmetrical
-``ManyToManyField``.
-
-A ``Person`` can also have many idols - but while I may idolize you, you may
-not think the same of me. Here, ``idols`` is an example of a non-symmetrical
-``ManyToManyField``. Only recursive ``ManyToManyField`` fields may be
-non-symmetrical, and they are symmetrical by default.
-
-This test validates that the many-to-many table is created using a mangled name
-if there is a name clash, and tests that symmetry is preserved where
-appropriate.
-"""
-
-from django.db import models
-
-
-class Person(models.Model):
- name = models.CharField(max_length=20)
- friends = models.ManyToManyField('self')
- idols = models.ManyToManyField('self', symmetrical=False, related_name='stalkers')
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/m2m_recursive/tests.py b/parts/django/tests/modeltests/m2m_recursive/tests.py
deleted file mode 100644
index 4251028..0000000
--- a/parts/django/tests/modeltests/m2m_recursive/tests.py
+++ /dev/null
@@ -1,253 +0,0 @@
-from operator import attrgetter
-
-from django.test import TestCase
-
-from models import Person
-
-
-class RecursiveM2MTests(TestCase):
- def test_recursive_m2m(self):
- a, b, c, d = [
- Person.objects.create(name=name)
- for name in ["Anne", "Bill", "Chuck", "David"]
- ]
-
- # Add some friends in the direction of field definition
- # Anne is friends with Bill and Chuck
- a.friends.add(b, c)
-
- # David is friends with Anne and Chuck - add in reverse direction
- d.friends.add(a,c)
-
- # Who is friends with Anne?
- self.assertQuerysetEqual(
- a.friends.all(), [
- "Bill",
- "Chuck",
- "David"
- ],
- attrgetter("name")
- )
- # Who is friends with Bill?
- self.assertQuerysetEqual(
- b.friends.all(), [
- "Anne",
- ],
- attrgetter("name")
- )
- # Who is friends with Chuck?
- self.assertQuerysetEqual(
- c.friends.all(), [
- "Anne",
- "David"
- ],
- attrgetter("name")
- )
- # Who is friends with David?
- self.assertQuerysetEqual(
- d.friends.all(), [
- "Anne",
- "Chuck",
- ],
- attrgetter("name")
- )
- # Bill is already friends with Anne - add Anne again, but in the
- # reverse direction
- b.friends.add(a)
-
- # Who is friends with Anne?
- self.assertQuerysetEqual(
- a.friends.all(), [
- "Bill",
- "Chuck",
- "David",
- ],
- attrgetter("name")
- )
- # Who is friends with Bill?
- self.assertQuerysetEqual(
- b.friends.all(), [
- "Anne",
- ],
- attrgetter("name")
- )
- # Remove Anne from Bill's friends
- b.friends.remove(a)
- # Who is friends with Anne?
- self.assertQuerysetEqual(
- a.friends.all(), [
- "Chuck",
- "David",
- ],
- attrgetter("name")
- )
- # Who is friends with Bill?
- self.assertQuerysetEqual(
- b.friends.all(), []
- )
-
- # Clear Anne's group of friends
- a.friends.clear()
- # Who is friends with Anne?
- self.assertQuerysetEqual(
- a.friends.all(), []
- )
- # Reverse relationships should also be gone
- # Who is friends with Chuck?
- self.assertQuerysetEqual(
- c.friends.all(), [
- "David",
- ],
- attrgetter("name")
- )
- # Who is friends with David?
- self.assertQuerysetEqual(
- d.friends.all(), [
- "Chuck",
- ],
- attrgetter("name")
- )
-
- # Add some idols in the direction of field definition
- # Anne idolizes Bill and Chuck
- a.idols.add(b, c)
- # Bill idolizes Anne right back
- b.idols.add(a)
- # David is idolized by Anne and Chuck - add in reverse direction
- d.stalkers.add(a, c)
-
- # Who are Anne's idols?
- self.assertQuerysetEqual(
- a.idols.all(), [
- "Bill",
- "Chuck",
- "David",
- ],
- attrgetter("name")
- )
- # Who is stalking Anne?
- self.assertQuerysetEqual(
- a.stalkers.all(), [
- "Bill",
- ],
- attrgetter("name")
- )
- # Who are Bill's idols?
- self.assertQuerysetEqual(
- b.idols.all(), [
- "Anne",
- ],
- attrgetter("name")
- )
- # Who is stalking Bill?
- self.assertQuerysetEqual(
- b.stalkers.all(), [
- "Anne",
- ],
- attrgetter("name")
- )
- # Who are Chuck's idols?
- self.assertQuerysetEqual(
- c.idols.all(), [
- "David",
- ],
- attrgetter("name"),
- )
- # Who is stalking Chuck?
- self.assertQuerysetEqual(
- c.stalkers.all(), [
- "Anne",
- ],
- attrgetter("name")
- )
- # Who are David's idols?
- self.assertQuerysetEqual(
- d.idols.all(), []
- )
- # Who is stalking David
- self.assertQuerysetEqual(
- d.stalkers.all(), [
- "Anne",
- "Chuck",
- ],
- attrgetter("name")
- )
- # Bill is already being stalked by Anne - add Anne again, but in the
- # reverse direction
- b.stalkers.add(a)
- # Who are Anne's idols?
- self.assertQuerysetEqual(
- a.idols.all(), [
- "Bill",
- "Chuck",
- "David",
- ],
- attrgetter("name")
- )
- # Who is stalking Anne?
- self.assertQuerysetEqual(
- a.stalkers.all(), [
- "Bill",
- ],
- attrgetter("name")
- )
- # Who are Bill's idols
- self.assertQuerysetEqual(
- b.idols.all(), [
- "Anne",
- ],
- attrgetter("name")
- )
- # Who is stalking Bill?
- self.assertQuerysetEqual(
- b.stalkers.all(), [
- "Anne",
- ],
- attrgetter("name"),
- )
- # Remove Anne from Bill's list of stalkers
- b.stalkers.remove(a)
- # Who are Anne's idols?
- self.assertQuerysetEqual(
- a.idols.all(), [
- "Chuck",
- "David",
- ],
- attrgetter("name")
- )
- # Who is stalking Anne?
- self.assertQuerysetEqual(
- a.stalkers.all(), [
- "Bill",
- ],
- attrgetter("name")
- )
- # Who are Bill's idols?
- self.assertQuerysetEqual(
- b.idols.all(), [
- "Anne",
- ],
- attrgetter("name")
- )
- # Who is stalking Bill?
- self.assertQuerysetEqual(
- b.stalkers.all(), []
- )
- # Clear Anne's group of idols
- a.idols.clear()
- # Who are Anne's idols
- self.assertQuerysetEqual(
- a.idols.all(), []
- )
- # Reverse relationships should also be gone
- # Who is stalking Chuck?
- self.assertQuerysetEqual(
- c.stalkers.all(), []
- )
- # Who is friends with David?
- self.assertQuerysetEqual(
- d.stalkers.all(), [
- "Chuck",
- ],
- attrgetter("name")
- )
diff --git a/parts/django/tests/modeltests/m2m_signals/__init__.py b/parts/django/tests/modeltests/m2m_signals/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/modeltests/m2m_signals/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/modeltests/m2m_signals/models.py b/parts/django/tests/modeltests/m2m_signals/models.py
deleted file mode 100644
index 526c4a7..0000000
--- a/parts/django/tests/modeltests/m2m_signals/models.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from django.db import models
-
-
-class Part(models.Model):
- name = models.CharField(max_length=20)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class Car(models.Model):
- name = models.CharField(max_length=20)
- default_parts = models.ManyToManyField(Part)
- optional_parts = models.ManyToManyField(Part, related_name='cars_optional')
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class SportsCar(Car):
- price = models.IntegerField()
-
-class Person(models.Model):
- name = models.CharField(max_length=20)
- fans = models.ManyToManyField('self', related_name='idols', symmetrical=False)
- friends = models.ManyToManyField('self')
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/m2m_signals/tests.py b/parts/django/tests/modeltests/m2m_signals/tests.py
deleted file mode 100644
index 9e9158f..0000000
--- a/parts/django/tests/modeltests/m2m_signals/tests.py
+++ /dev/null
@@ -1,427 +0,0 @@
-"""
-Testing signals emitted on changing m2m relations.
-"""
-
-from django.db import models
-from django.test import TestCase
-
-from models import Part, Car, SportsCar, Person
-
-
-class ManyToManySignalsTest(TestCase):
- def m2m_changed_signal_receiver(self, signal, sender, **kwargs):
- message = {
- 'instance': kwargs['instance'],
- 'action': kwargs['action'],
- 'reverse': kwargs['reverse'],
- 'model': kwargs['model'],
- }
- if kwargs['pk_set']:
- message['objects'] = list(
- kwargs['model'].objects.filter(pk__in=kwargs['pk_set'])
- )
- self.m2m_changed_messages.append(message)
-
- def setUp(self):
- self.m2m_changed_messages = []
-
- self.vw = Car.objects.create(name='VW')
- self.bmw = Car.objects.create(name='BMW')
- self.toyota = Car.objects.create(name='Toyota')
- self.wheelset = Part.objects.create(name='Wheelset')
- self.doors = Part.objects.create(name='Doors')
- self.engine = Part.objects.create(name='Engine')
- self.airbag = Part.objects.create(name='Airbag')
- self.sunroof = Part.objects.create(name='Sunroof')
-
- self.alice = Person.objects.create(name='Alice')
- self.bob = Person.objects.create(name='Bob')
- self.chuck = Person.objects.create(name='Chuck')
- self.daisy = Person.objects.create(name='Daisy')
-
- def tearDown(self):
- # disconnect all signal handlers
- models.signals.m2m_changed.disconnect(
- self.m2m_changed_signal_receiver, Car.default_parts.through
- )
- models.signals.m2m_changed.disconnect(
- self.m2m_changed_signal_receiver, Car.optional_parts.through
- )
- models.signals.m2m_changed.disconnect(
- self.m2m_changed_signal_receiver, Person.fans.through
- )
- models.signals.m2m_changed.disconnect(
- self.m2m_changed_signal_receiver, Person.friends.through
- )
-
- def test_m2m_relations_add_remove_clear(self):
- expected_messages = []
-
- # Install a listener on one of the two m2m relations.
- models.signals.m2m_changed.connect(
- self.m2m_changed_signal_receiver, Car.optional_parts.through
- )
-
- # Test the add, remove and clear methods on both sides of the
- # many-to-many relation
-
- # adding a default part to our car - no signal listener installed
- self.vw.default_parts.add(self.sunroof)
-
- # Now install a listener
- models.signals.m2m_changed.connect(
- self.m2m_changed_signal_receiver, Car.default_parts.through
- )
-
- self.vw.default_parts.add(self.wheelset, self.doors, self.engine)
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'pre_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.doors, self.engine, self.wheelset],
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'post_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.doors, self.engine, self.wheelset],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # give the BMW and Toyata some doors as well
- self.doors.car_set.add(self.bmw, self.toyota)
- expected_messages.append({
- 'instance': self.doors,
- 'action': 'pre_add',
- 'reverse': True,
- 'model': Car,
- 'objects': [self.bmw, self.toyota],
- })
- expected_messages.append({
- 'instance': self.doors,
- 'action': 'post_add',
- 'reverse': True,
- 'model': Car,
- 'objects': [self.bmw, self.toyota],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # remove the engine from the self.vw and the airbag (which is not set
- # but is returned)
- self.vw.default_parts.remove(self.engine, self.airbag)
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'pre_remove',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.airbag, self.engine],
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'post_remove',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.airbag, self.engine],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # give the self.vw some optional parts (second relation to same model)
- self.vw.optional_parts.add(self.airbag, self.sunroof)
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'pre_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.airbag, self.sunroof],
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'post_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.airbag, self.sunroof],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # add airbag to all the cars (even though the self.vw already has one)
- self.airbag.cars_optional.add(self.vw, self.bmw, self.toyota)
- expected_messages.append({
- 'instance': self.airbag,
- 'action': 'pre_add',
- 'reverse': True,
- 'model': Car,
- 'objects': [self.bmw, self.toyota],
- })
- expected_messages.append({
- 'instance': self.airbag,
- 'action': 'post_add',
- 'reverse': True,
- 'model': Car,
- 'objects': [self.bmw, self.toyota],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # remove airbag from the self.vw (reverse relation with custom
- # related_name)
- self.airbag.cars_optional.remove(self.vw)
- expected_messages.append({
- 'instance': self.airbag,
- 'action': 'pre_remove',
- 'reverse': True,
- 'model': Car,
- 'objects': [self.vw],
- })
- expected_messages.append({
- 'instance': self.airbag,
- 'action': 'post_remove',
- 'reverse': True,
- 'model': Car,
- 'objects': [self.vw],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # clear all parts of the self.vw
- self.vw.default_parts.clear()
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'pre_clear',
- 'reverse': False,
- 'model': Part,
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'post_clear',
- 'reverse': False,
- 'model': Part,
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # take all the doors off of cars
- self.doors.car_set.clear()
- expected_messages.append({
- 'instance': self.doors,
- 'action': 'pre_clear',
- 'reverse': True,
- 'model': Car,
- })
- expected_messages.append({
- 'instance': self.doors,
- 'action': 'post_clear',
- 'reverse': True,
- 'model': Car,
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # take all the airbags off of cars (clear reverse relation with custom
- # related_name)
- self.airbag.cars_optional.clear()
- expected_messages.append({
- 'instance': self.airbag,
- 'action': 'pre_clear',
- 'reverse': True,
- 'model': Car,
- })
- expected_messages.append({
- 'instance': self.airbag,
- 'action': 'post_clear',
- 'reverse': True,
- 'model': Car,
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # alternative ways of setting relation:
- self.vw.default_parts.create(name='Windows')
- p6 = Part.objects.get(name='Windows')
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'pre_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [p6],
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'post_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [p6],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # direct assignment clears the set first, then adds
- self.vw.default_parts = [self.wheelset,self.doors,self.engine]
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'pre_clear',
- 'reverse': False,
- 'model': Part,
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'post_clear',
- 'reverse': False,
- 'model': Part,
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'pre_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.doors, self.engine, self.wheelset],
- })
- expected_messages.append({
- 'instance': self.vw,
- 'action': 'post_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.doors, self.engine, self.wheelset],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- # Check that signals still work when model inheritance is involved
- c4 = SportsCar.objects.create(name='Bugatti', price='1000000')
- c4b = Car.objects.get(name='Bugatti')
- c4.default_parts = [self.doors]
- expected_messages.append({
- 'instance': c4,
- 'action': 'pre_clear',
- 'reverse': False,
- 'model': Part,
- })
- expected_messages.append({
- 'instance': c4,
- 'action': 'post_clear',
- 'reverse': False,
- 'model': Part,
- })
- expected_messages.append({
- 'instance': c4,
- 'action': 'pre_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.doors],
- })
- expected_messages.append({
- 'instance': c4,
- 'action': 'post_add',
- 'reverse': False,
- 'model': Part,
- 'objects': [self.doors],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- self.engine.car_set.add(c4)
- expected_messages.append({
- 'instance': self.engine,
- 'action': 'pre_add',
- 'reverse': True,
- 'model': Car,
- 'objects': [c4b],
- })
- expected_messages.append({
- 'instance': self.engine,
- 'action': 'post_add',
- 'reverse': True,
- 'model': Car,
- 'objects': [c4b],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- def test_m2m_relations_with_self(self):
- expected_messages = []
-
- models.signals.m2m_changed.connect(
- self.m2m_changed_signal_receiver, Person.fans.through
- )
- models.signals.m2m_changed.connect(
- self.m2m_changed_signal_receiver, Person.friends.through
- )
-
- self.alice.friends = [self.bob, self.chuck]
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'pre_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'post_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'pre_add',
- 'reverse': False,
- 'model': Person,
- 'objects': [self.bob, self.chuck],
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'post_add',
- 'reverse': False,
- 'model': Person,
- 'objects': [self.bob, self.chuck],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- self.alice.fans = [self.daisy]
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'pre_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'post_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'pre_add',
- 'reverse': False,
- 'model': Person,
- 'objects': [self.daisy],
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'post_add',
- 'reverse': False,
- 'model': Person,
- 'objects': [self.daisy],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
-
- self.chuck.idols = [self.alice,self.bob]
- expected_messages.append({
- 'instance': self.chuck,
- 'action': 'pre_clear',
- 'reverse': True,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.chuck,
- 'action': 'post_clear',
- 'reverse': True,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.chuck,
- 'action': 'pre_add',
- 'reverse': True,
- 'model': Person,
- 'objects': [self.alice, self.bob],
- })
- expected_messages.append({
- 'instance': self.chuck,
- 'action': 'post_add',
- 'reverse': True,
- 'model': Person,
- 'objects': [self.alice, self.bob],
- })
- self.assertEqual(self.m2m_changed_messages, expected_messages)
diff --git a/parts/django/tests/modeltests/m2m_through/__init__.py b/parts/django/tests/modeltests/m2m_through/__init__.py
deleted file mode 100644
index 139597f..0000000
--- a/parts/django/tests/modeltests/m2m_through/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/parts/django/tests/modeltests/m2m_through/models.py b/parts/django/tests/modeltests/m2m_through/models.py
deleted file mode 100644
index d41fe8d..0000000
--- a/parts/django/tests/modeltests/m2m_through/models.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from django.db import models
-from datetime import datetime
-
-# M2M described on one of the models
-class Person(models.Model):
- name = models.CharField(max_length=128)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class Group(models.Model):
- name = models.CharField(max_length=128)
- members = models.ManyToManyField(Person, through='Membership')
- custom_members = models.ManyToManyField(Person, through='CustomMembership', related_name="custom")
- nodefaultsnonulls = models.ManyToManyField(Person, through='TestNoDefaultsOrNulls', related_name="testnodefaultsnonulls")
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class Membership(models.Model):
- person = models.ForeignKey(Person)
- group = models.ForeignKey(Group)
- date_joined = models.DateTimeField(default=datetime.now)
- invite_reason = models.CharField(max_length=64, null=True)
-
- class Meta:
- ordering = ('date_joined', 'invite_reason', 'group')
-
- def __unicode__(self):
- return "%s is a member of %s" % (self.person.name, self.group.name)
-
-class CustomMembership(models.Model):
- person = models.ForeignKey(Person, db_column="custom_person_column", related_name="custom_person_related_name")
- group = models.ForeignKey(Group)
- weird_fk = models.ForeignKey(Membership, null=True)
- date_joined = models.DateTimeField(default=datetime.now)
-
- def __unicode__(self):
- return "%s is a member of %s" % (self.person.name, self.group.name)
-
- class Meta:
- db_table = "test_table"
-
-class TestNoDefaultsOrNulls(models.Model):
- person = models.ForeignKey(Person)
- group = models.ForeignKey(Group)
- nodefaultnonull = models.CharField(max_length=5)
-
-class PersonSelfRefM2M(models.Model):
- name = models.CharField(max_length=5)
- friends = models.ManyToManyField('self', through="Friendship", symmetrical=False)
-
- def __unicode__(self):
- return self.name
-
-class Friendship(models.Model):
- first = models.ForeignKey(PersonSelfRefM2M, related_name="rel_from_set")
- second = models.ForeignKey(PersonSelfRefM2M, related_name="rel_to_set")
- date_friended = models.DateTimeField()
diff --git a/parts/django/tests/modeltests/m2m_through/tests.py b/parts/django/tests/modeltests/m2m_through/tests.py
deleted file mode 100644
index 807e952..0000000
--- a/parts/django/tests/modeltests/m2m_through/tests.py
+++ /dev/null
@@ -1,343 +0,0 @@
-from datetime import datetime
-from operator import attrgetter
-
-from django.test import TestCase
-
-from models import Person, Group, Membership, CustomMembership, \
- TestNoDefaultsOrNulls, PersonSelfRefM2M, Friendship
-
-
-class M2mThroughTests(TestCase):
- def setUp(self):
- self.bob = Person.objects.create(name='Bob')
- self.jim = Person.objects.create(name='Jim')
- self.jane = Person.objects.create(name='Jane')
- self.rock = Group.objects.create(name='Rock')
- self.roll = Group.objects.create(name='Roll')
-
- def test_m2m_through(self):
- # We start out by making sure that the Group 'rock' has no members.
- self.assertQuerysetEqual(
- self.rock.members.all(),
- []
- )
- # To make Jim a member of Group Rock, simply create a Membership object.
- m1 = Membership.objects.create(person=self.jim, group=self.rock)
- # We can do the same for Jane and Rock.
- m2 = Membership.objects.create(person=self.jane, group=self.rock)
- # Let's check to make sure that it worked. Jane and Jim should be members of Rock.
- self.assertQuerysetEqual(
- self.rock.members.all(), [
- 'Jane',
- 'Jim'
- ],
- attrgetter("name")
- )
- # Now we can add a bunch more Membership objects to test with.
- m3 = Membership.objects.create(person=self.bob, group=self.roll)
- m4 = Membership.objects.create(person=self.jim, group=self.roll)
- m5 = Membership.objects.create(person=self.jane, group=self.roll)
- # We can get Jim's Group membership as with any ForeignKey.
- self.assertQuerysetEqual(
- self.jim.group_set.all(), [
- 'Rock',
- 'Roll'
- ],
- attrgetter("name")
- )
- # Querying the intermediary model works like normal.
- self.assertEqual(
- repr(Membership.objects.get(person=self.jane, group=self.rock)),
- '<Membership: Jane is a member of Rock>'
- )
- # It's not only get that works. Filter works like normal as well.
- self.assertQuerysetEqual(
- Membership.objects.filter(person=self.jim), [
- '<Membership: Jim is a member of Rock>',
- '<Membership: Jim is a member of Roll>'
- ]
- )
- self.rock.members.clear()
- # Now there will be no members of Rock.
- self.assertQuerysetEqual(
- self.rock.members.all(),
- []
- )
-
-
-
- def test_forward_descriptors(self):
- # Due to complications with adding via an intermediary model,
- # the add method is not provided.
- self.assertRaises(AttributeError, lambda: self.rock.members.add(self.bob))
- # Create is also disabled as it suffers from the same problems as add.
- self.assertRaises(AttributeError, lambda: self.rock.members.create(name='Anne'))
- # Remove has similar complications, and is not provided either.
- self.assertRaises(AttributeError, lambda: self.rock.members.remove(self.jim))
-
- m1 = Membership.objects.create(person=self.jim, group=self.rock)
- m2 = Membership.objects.create(person=self.jane, group=self.rock)
-
- # Here we back up the list of all members of Rock.
- backup = list(self.rock.members.all())
- # ...and we verify that it has worked.
- self.assertEqual(
- [p.name for p in backup],
- ['Jane', 'Jim']
- )
- # The clear function should still work.
- self.rock.members.clear()
- # Now there will be no members of Rock.
- self.assertQuerysetEqual(
- self.rock.members.all(),
- []
- )
-
- # Assignment should not work with models specifying a through model for many of
- # the same reasons as adding.
- self.assertRaises(AttributeError, setattr, self.rock, "members", backup)
- # Let's re-save those instances that we've cleared.
- m1.save()
- m2.save()
- # Verifying that those instances were re-saved successfully.
- self.assertQuerysetEqual(
- self.rock.members.all(),[
- 'Jane',
- 'Jim'
- ],
- attrgetter("name")
- )
-
- def test_reverse_descriptors(self):
- # Due to complications with adding via an intermediary model,
- # the add method is not provided.
- self.assertRaises(AttributeError, lambda: self.bob.group_set.add(self.rock))
- # Create is also disabled as it suffers from the same problems as add.
- self.assertRaises(AttributeError, lambda: self.bob.group_set.create(name="funk"))
- # Remove has similar complications, and is not provided either.
- self.assertRaises(AttributeError, lambda: self.jim.group_set.remove(self.rock))
-
- m1 = Membership.objects.create(person=self.jim, group=self.rock)
- m2 = Membership.objects.create(person=self.jim, group=self.roll)
-
- # Here we back up the list of all of Jim's groups.
- backup = list(self.jim.group_set.all())
- self.assertEqual(
- [g.name for g in backup],
- ['Rock', 'Roll']
- )
- # The clear function should still work.
- self.jim.group_set.clear()
- # Now Jim will be in no groups.
- self.assertQuerysetEqual(
- self.jim.group_set.all(),
- []
- )
- # Assignment should not work with models specifying a through model for many of
- # the same reasons as adding.
- self.assertRaises(AttributeError, setattr, self.jim, "group_set", backup)
- # Let's re-save those instances that we've cleared.
-
- m1.save()
- m2.save()
- # Verifying that those instances were re-saved successfully.
- self.assertQuerysetEqual(
- self.jim.group_set.all(),[
- 'Rock',
- 'Roll'
- ],
- attrgetter("name")
- )
-
- def test_custom_tests(self):
- # Let's see if we can query through our second relationship.
- self.assertQuerysetEqual(
- self.rock.custom_members.all(),
- []
- )
- # We can query in the opposite direction as well.
- self.assertQuerysetEqual(
- self.bob.custom.all(),
- []
- )
-
- cm1 = CustomMembership.objects.create(person=self.bob, group=self.rock)
- cm2 = CustomMembership.objects.create(person=self.jim, group=self.rock)
-
- # If we get the number of people in Rock, it should be both Bob and Jim.
- self.assertQuerysetEqual(
- self.rock.custom_members.all(),[
- 'Bob',
- 'Jim'
- ],
- attrgetter("name")
- )
- # Bob should only be in one custom group.
- self.assertQuerysetEqual(
- self.bob.custom.all(),[
- 'Rock'
- ],
- attrgetter("name")
- )
- # Let's make sure our new descriptors don't conflict with the FK related_name.
- self.assertQuerysetEqual(
- self.bob.custom_person_related_name.all(),[
- '<CustomMembership: Bob is a member of Rock>'
- ]
- )
-
- def test_self_referential_tests(self):
- # Let's first create a person who has no friends.
- tony = PersonSelfRefM2M.objects.create(name="Tony")
- self.assertQuerysetEqual(
- tony.friends.all(),
- []
- )
-
- chris = PersonSelfRefM2M.objects.create(name="Chris")
- f = Friendship.objects.create(first=tony, second=chris, date_friended=datetime.now())
-
- # Tony should now show that Chris is his friend.
- self.assertQuerysetEqual(
- tony.friends.all(),[
- 'Chris'
- ],
- attrgetter("name")
- )
- # But we haven't established that Chris is Tony's Friend.
- self.assertQuerysetEqual(
- chris.friends.all(),
- []
- )
- f2 = Friendship.objects.create(first=chris, second=tony, date_friended=datetime.now())
-
- # Having added Chris as a friend, let's make sure that his friend set reflects
- # that addition.
- self.assertQuerysetEqual(
- chris.friends.all(),[
- 'Tony'
- ],
- attrgetter("name")
- )
-
- # Chris gets mad and wants to get rid of all of his friends.
- chris.friends.clear()
- # Now he should not have any more friends.
- self.assertQuerysetEqual(
- chris.friends.all(),
- []
- )
- # Since this isn't a symmetrical relation, Tony's friend link still exists.
- self.assertQuerysetEqual(
- tony.friends.all(),[
- 'Chris'
- ],
- attrgetter("name")
- )
-
- def test_query_tests(self):
- m1 = Membership.objects.create(person=self.jim, group=self.rock)
- m2 = Membership.objects.create(person=self.jane, group=self.rock)
- m3 = Membership.objects.create(person=self.bob, group=self.roll)
- m4 = Membership.objects.create(person=self.jim, group=self.roll)
- m5 = Membership.objects.create(person=self.jane, group=self.roll)
-
- m2.invite_reason = "She was just awesome."
- m2.date_joined = datetime(2006, 1, 1)
- m2.save()
- m3.date_joined = datetime(2004, 1, 1)
- m3.save()
- m5.date_joined = datetime(2004, 1, 1)
- m5.save()
-
- # We can query for the related model by using its attribute name (members, in
- # this case).
- self.assertQuerysetEqual(
- Group.objects.filter(members__name='Bob'),[
- 'Roll'
- ],
- attrgetter("name")
- )
-
- # To query through the intermediary model, we specify its model name.
- # In this case, membership.
- self.assertQuerysetEqual(
- Group.objects.filter(membership__invite_reason="She was just awesome."),[
- 'Rock'
- ],
- attrgetter("name")
- )
-
- # If we want to query in the reverse direction by the related model, use its
- # model name (group, in this case).
- self.assertQuerysetEqual(
- Person.objects.filter(group__name="Rock"),[
- 'Jane',
- 'Jim'
- ],
- attrgetter("name")
- )
-
- cm1 = CustomMembership.objects.create(person=self.bob, group=self.rock)
- cm2 = CustomMembership.objects.create(person=self.jim, group=self.rock)
- # If the m2m field has specified a related_name, using that will work.
- self.assertQuerysetEqual(
- Person.objects.filter(custom__name="Rock"),[
- 'Bob',
- 'Jim'
- ],
- attrgetter("name")
- )
-
- # To query through the intermediary model in the reverse direction, we again
- # specify its model name (membership, in this case).
- self.assertQuerysetEqual(
- Person.objects.filter(membership__invite_reason="She was just awesome."),[
- 'Jane'
- ],
- attrgetter("name")
- )
-
- # Let's see all of the groups that Jane joined after 1 Jan 2005:
- self.assertQuerysetEqual(
- Group.objects.filter(membership__date_joined__gt=datetime(2005, 1, 1), membership__person=self.jane),[
- 'Rock'
- ],
- attrgetter("name")
- )
-
- # Queries also work in the reverse direction: Now let's see all of the people
- # that have joined Rock since 1 Jan 2005:
- self.assertQuerysetEqual(
- Person.objects.filter(membership__date_joined__gt=datetime(2005, 1, 1), membership__group=self.rock),[
- 'Jane',
- 'Jim'
- ],
- attrgetter("name")
- )
-
- # Conceivably, queries through membership could return correct, but non-unique
- # querysets. To demonstrate this, we query for all people who have joined a
- # group after 2004:
- self.assertQuerysetEqual(
- Person.objects.filter(membership__date_joined__gt=datetime(2004, 1, 1)),[
- 'Jane',
- 'Jim',
- 'Jim'
- ],
- attrgetter("name")
- )
-
- # Jim showed up twice, because he joined two groups ('Rock', and 'Roll'):
- self.assertEqual(
- [(m.person.name, m.group.name) for m in Membership.objects.filter(date_joined__gt=datetime(2004, 1, 1))],
- [(u'Jane', u'Rock'), (u'Jim', u'Rock'), (u'Jim', u'Roll')]
- )
- # QuerySet's distinct() method can correct this problem.
- self.assertQuerysetEqual(
- Person.objects.filter(membership__date_joined__gt=datetime(2004, 1, 1)).distinct(),[
- 'Jane',
- 'Jim'
- ],
- attrgetter("name")
- )
diff --git a/parts/django/tests/modeltests/m2o_recursive/__init__.py b/parts/django/tests/modeltests/m2o_recursive/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/m2o_recursive/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/m2o_recursive/models.py b/parts/django/tests/modeltests/m2o_recursive/models.py
deleted file mode 100644
index ed9945a..0000000
--- a/parts/django/tests/modeltests/m2o_recursive/models.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""
-11. Relating an object to itself, many-to-one
-
-To define a many-to-one relationship between a model and itself, use
-``ForeignKey('self')``.
-
-In this example, a ``Category`` is related to itself. That is, each
-``Category`` has a parent ``Category``.
-
-Set ``related_name`` to designate what the reverse relationship is called.
-"""
-
-from django.db import models
-
-class Category(models.Model):
- name = models.CharField(max_length=20)
- parent = models.ForeignKey('self', blank=True, null=True, related_name='child_set')
-
- def __unicode__(self):
- return self.name
-
-class Person(models.Model):
- full_name = models.CharField(max_length=20)
- mother = models.ForeignKey('self', null=True, related_name='mothers_child_set')
- father = models.ForeignKey('self', null=True, related_name='fathers_child_set')
-
- def __unicode__(self):
- return self.full_name
diff --git a/parts/django/tests/modeltests/m2o_recursive/tests.py b/parts/django/tests/modeltests/m2o_recursive/tests.py
deleted file mode 100644
index 79dde8b..0000000
--- a/parts/django/tests/modeltests/m2o_recursive/tests.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from django.test import TestCase
-from models import Category, Person
-
-class ManyToOneRecursiveTests(TestCase):
-
- def setUp(self):
- self.r = Category(id=None, name='Root category', parent=None)
- self.r.save()
- self.c = Category(id=None, name='Child category', parent=self.r)
- self.c.save()
-
- def test_m2o_recursive(self):
- self.assertQuerysetEqual(self.r.child_set.all(),
- ['<Category: Child category>'])
- self.assertEqual(self.r.child_set.get(name__startswith='Child').id, self.c.id)
- self.assertEqual(self.r.parent, None)
- self.assertQuerysetEqual(self.c.child_set.all(), [])
- self.assertEqual(self.c.parent.id, self.r.id)
-
-class MultipleManyToOneRecursiveTests(TestCase):
-
- def setUp(self):
- self.dad = Person(full_name='John Smith Senior', mother=None, father=None)
- self.dad.save()
- self.mom = Person(full_name='Jane Smith', mother=None, father=None)
- self.mom.save()
- self.kid = Person(full_name='John Smith Junior', mother=self.mom, father=self.dad)
- self.kid.save()
-
- def test_m2o_recursive2(self):
- self.assertEqual(self.kid.mother.id, self.mom.id)
- self.assertEqual(self.kid.father.id, self.dad.id)
- self.assertQuerysetEqual(self.dad.fathers_child_set.all(),
- ['<Person: John Smith Junior>'])
- self.assertQuerysetEqual(self.mom.mothers_child_set.all(),
- ['<Person: John Smith Junior>'])
- self.assertQuerysetEqual(self.kid.mothers_child_set.all(), [])
- self.assertQuerysetEqual(self.kid.fathers_child_set.all(), [])
diff --git a/parts/django/tests/modeltests/many_to_many/__init__.py b/parts/django/tests/modeltests/many_to_many/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/many_to_many/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/many_to_many/models.py b/parts/django/tests/modeltests/many_to_many/models.py
deleted file mode 100644
index 96636da..0000000
--- a/parts/django/tests/modeltests/many_to_many/models.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""
-5. Many-to-many relationships
-
-To define a many-to-many relationship, use ``ManyToManyField()``.
-
-In this example, an ``Article`` can be published in multiple ``Publication``
-objects, and a ``Publication`` has multiple ``Article`` objects.
-"""
-
-from django.db import models
-
-class Publication(models.Model):
- title = models.CharField(max_length=30)
-
- def __unicode__(self):
- return self.title
-
- class Meta:
- ordering = ('title',)
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- publications = models.ManyToManyField(Publication)
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- ordering = ('headline',)
diff --git a/parts/django/tests/modeltests/many_to_many/tests.py b/parts/django/tests/modeltests/many_to_many/tests.py
deleted file mode 100644
index 39fe581..0000000
--- a/parts/django/tests/modeltests/many_to_many/tests.py
+++ /dev/null
@@ -1,384 +0,0 @@
-from django.test import TestCase
-from models import Article, Publication
-
-class ManyToManyTests(TestCase):
-
- def setUp(self):
- # Create a couple of Publications.
- self.p1 = Publication.objects.create(id=None, title='The Python Journal')
- self.p2 = Publication.objects.create(id=None, title='Science News')
- self.p3 = Publication.objects.create(id=None, title='Science Weekly')
- self.p4 = Publication.objects.create(title='Highlights for Children')
-
- self.a1 = Article.objects.create(id=None, headline='Django lets you build Web apps easily')
- self.a1.publications.add(self.p1)
-
- self.a2 = Article.objects.create(id=None, headline='NASA uses Python')
- self.a2.publications.add(self.p1, self.p2, self.p3, self.p4)
-
- self.a3 = Article.objects.create(headline='NASA finds intelligent life on Earth')
- self.a3.publications.add(self.p2)
-
- self.a4 = Article.objects.create(headline='Oxygen-free diet works wonders')
- self.a4.publications.add(self.p2)
-
- def test_add(self):
- # Create an Article.
- a5 = Article(id=None, headline='Django lets you reate Web apps easily')
- # You can't associate it with a Publication until it's been saved.
- self.assertRaises(ValueError, getattr, a5, 'publications')
- # Save it!
- a5.save()
- # Associate the Article with a Publication.
- a5.publications.add(self.p1)
- self.assertQuerysetEqual(a5.publications.all(),
- ['<Publication: The Python Journal>'])
- # Create another Article, and set it to appear in both Publications.
- a6 = Article(id=None, headline='ESA uses Python')
- a6.save()
- a6.publications.add(self.p1, self.p2)
- a6.publications.add(self.p3)
- # Adding a second time is OK
- a6.publications.add(self.p3)
- self.assertQuerysetEqual(a6.publications.all(),
- [
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
-
- # Adding an object of the wrong type raises TypeError
- self.assertRaises(TypeError, a6.publications.add, a5)
- # Add a Publication directly via publications.add by using keyword arguments.
- p4 = a6.publications.create(title='Highlights for Adults')
- self.assertQuerysetEqual(a6.publications.all(),
- [
- '<Publication: Highlights for Adults>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
-
- def test_reverse_add(self):
- # Adding via the 'other' end of an m2m
- a5 = Article(headline='NASA finds intelligent life on Mars')
- a5.save()
- self.p2.article_set.add(a5)
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA finds intelligent life on Mars>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(a5.publications.all(),
- ['<Publication: Science News>'])
-
- # Adding via the other end using keywords
- new_article = self.p2.article_set.create(headline='Carbon-free diet works wonders')
- self.assertQuerysetEqual(
- self.p2.article_set.all(),
- [
- '<Article: Carbon-free diet works wonders>',
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA finds intelligent life on Mars>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- a6 = self.p2.article_set.all()[3]
- self.assertQuerysetEqual(a6.publications.all(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
-
- def test_related_sets(self):
- # Article objects have access to their related Publication objects.
- self.assertQuerysetEqual(self.a1.publications.all(),
- ['<Publication: The Python Journal>'])
- self.assertQuerysetEqual(self.a2.publications.all(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
- # Publication objects have access to their related Article objects.
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(self.p1.article_set.all(),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA uses Python>',
- ])
- self.assertQuerysetEqual(Publication.objects.get(id=self.p4.id).article_set.all(),
- ['<Article: NASA uses Python>'])
-
- def test_selects(self):
- # We can perform kwarg queries across m2m relationships
- self.assertQuerysetEqual(
- Article.objects.filter(publications__id__exact=self.p1.id),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA uses Python>',
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(publications__pk=self.p1.id),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA uses Python>',
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(publications=self.p1.id),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA uses Python>',
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(publications=self.p1),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA uses Python>',
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(publications__title__startswith="Science"),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(publications__title__startswith="Science").distinct(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
-
- # The count() function respects distinct() as well.
- self.assertEqual(Article.objects.filter(publications__title__startswith="Science").count(), 4)
- self.assertEqual(Article.objects.filter(publications__title__startswith="Science").distinct().count(), 3)
- self.assertQuerysetEqual(
- Article.objects.filter(publications__in=[self.p1.id,self.p2.id]).distinct(),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(publications__in=[self.p1.id,self.p2]).distinct(),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(publications__in=[self.p1,self.p2]).distinct(),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
-
- # Excluding a related item works as you would expect, too (although the SQL
- # involved is a little complex).
- self.assertQuerysetEqual(Article.objects.exclude(publications=self.p2),
- ['<Article: Django lets you build Web apps easily>'])
-
- def test_reverse_selects(self):
- # Reverse m2m queries are supported (i.e., starting at the table that
- # doesn't have a ManyToManyField).
- self.assertQuerysetEqual(Publication.objects.filter(id__exact=self.p1.id),
- ['<Publication: The Python Journal>'])
- self.assertQuerysetEqual(Publication.objects.filter(pk=self.p1.id),
- ['<Publication: The Python Journal>'])
- self.assertQuerysetEqual(
- Publication.objects.filter(article__headline__startswith="NASA"),
- [
- '<Publication: Highlights for Children>',
- '<Publication: Science News>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
- self.assertQuerysetEqual(Publication.objects.filter(article__id__exact=self.a1.id),
- ['<Publication: The Python Journal>'])
- self.assertQuerysetEqual(Publication.objects.filter(article__pk=self.a1.id),
- ['<Publication: The Python Journal>'])
- self.assertQuerysetEqual(Publication.objects.filter(article=self.a1.id),
- ['<Publication: The Python Journal>'])
- self.assertQuerysetEqual(Publication.objects.filter(article=self.a1),
- ['<Publication: The Python Journal>'])
-
- self.assertQuerysetEqual(
- Publication.objects.filter(article__in=[self.a1.id,self.a2.id]).distinct(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
- self.assertQuerysetEqual(
- Publication.objects.filter(article__in=[self.a1.id,self.a2]).distinct(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
- self.assertQuerysetEqual(
- Publication.objects.filter(article__in=[self.a1,self.a2]).distinct(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- '<Publication: The Python Journal>',
- ])
-
- def test_delete(self):
- # If we delete a Publication, its Articles won't be able to access it.
- self.p1.delete()
- self.assertQuerysetEqual(Publication.objects.all(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: Science News>',
- '<Publication: Science Weekly>',
- ])
- self.assertQuerysetEqual(self.a1.publications.all(), [])
- # If we delete an Article, its Publications won't be able to access it.
- self.a2.delete()
- self.assertQuerysetEqual(Article.objects.all(),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: Oxygen-free diet works wonders>',
- ])
-
- def test_bulk_delete(self):
- # Bulk delete some Publications - references to deleted publications should go
- Publication.objects.filter(title__startswith='Science').delete()
- self.assertQuerysetEqual(Publication.objects.all(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: The Python Journal>',
- ])
- self.assertQuerysetEqual(Article.objects.all(),
- [
- '<Article: Django lets you build Web apps easily>',
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(self.a2.publications.all(),
- [
- '<Publication: Highlights for Children>',
- '<Publication: The Python Journal>',
- ])
-
- # Bulk delete some articles - references to deleted objects should go
- q = Article.objects.filter(headline__startswith='Django')
- self.assertQuerysetEqual(q, ['<Article: Django lets you build Web apps easily>'])
- q.delete()
- # After the delete, the QuerySet cache needs to be cleared,
- # and the referenced objects should be gone
- self.assertQuerysetEqual(q, [])
- self.assertQuerysetEqual(self.p1.article_set.all(),
- ['<Article: NASA uses Python>'])
-
- def test_remove(self):
- # Removing publication from an article:
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.a4.publications.remove(self.p2)
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: NASA uses Python>',
- ])
- self.assertQuerysetEqual(self.a4.publications.all(), [])
- # And from the other end
- self.p2.article_set.remove(self.a3)
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA uses Python>',
- ])
- self.assertQuerysetEqual(self.a3.publications.all(), [])
-
- def test_assign(self):
- # Relation sets can be assigned. Assignment clears any existing set members
- self.p2.article_set = [self.a4, self.a3]
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(self.a4.publications.all(),
- ['<Publication: Science News>'])
- self.a4.publications = [self.p3.id]
- self.assertQuerysetEqual(self.p2.article_set.all(),
- ['<Article: NASA finds intelligent life on Earth>'])
- self.assertQuerysetEqual(self.a4.publications.all(),
- ['<Publication: Science Weekly>'])
-
- # An alternate to calling clear() is to assign the empty set
- self.p2.article_set = []
- self.assertQuerysetEqual(self.p2.article_set.all(), [])
- self.a4.publications = []
- self.assertQuerysetEqual(self.a4.publications.all(), [])
-
- def test_assign_ids(self):
- # Relation sets can also be set using primary key values
- self.p2.article_set = [self.a4.id, self.a3.id]
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(self.a4.publications.all(),
- ['<Publication: Science News>'])
- self.a4.publications = [self.p3.id]
- self.assertQuerysetEqual(self.p2.article_set.all(),
- ['<Article: NASA finds intelligent life on Earth>'])
- self.assertQuerysetEqual(self.a4.publications.all(),
- ['<Publication: Science Weekly>'])
-
- def test_clear(self):
- # Relation sets can be cleared:
- self.p2.article_set.clear()
- self.assertQuerysetEqual(self.p2.article_set.all(), [])
- self.assertQuerysetEqual(self.a4.publications.all(), [])
-
- # And you can clear from the other end
- self.p2.article_set.add(self.a3, self.a4)
- self.assertQuerysetEqual(self.p2.article_set.all(),
- [
- '<Article: NASA finds intelligent life on Earth>',
- '<Article: Oxygen-free diet works wonders>',
- ])
- self.assertQuerysetEqual(self.a4.publications.all(),
- [
- '<Publication: Science News>',
- ])
- self.a4.publications.clear()
- self.assertQuerysetEqual(self.a4.publications.all(), [])
- self.assertQuerysetEqual(self.p2.article_set.all(),
- ['<Article: NASA finds intelligent life on Earth>'])
diff --git a/parts/django/tests/modeltests/many_to_one/__init__.py b/parts/django/tests/modeltests/many_to_one/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/many_to_one/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/many_to_one/models.py b/parts/django/tests/modeltests/many_to_one/models.py
deleted file mode 100644
index b4a0f37..0000000
--- a/parts/django/tests/modeltests/many_to_one/models.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""
-4. Many-to-one relationships
-
-To define a many-to-one relationship, use ``ForeignKey()``.
-"""
-
-from django.db import models
-
-class Reporter(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
- email = models.EmailField()
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateField()
- reporter = models.ForeignKey(Reporter)
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- ordering = ('headline',)
diff --git a/parts/django/tests/modeltests/many_to_one/tests.py b/parts/django/tests/modeltests/many_to_one/tests.py
deleted file mode 100644
index 53306b7..0000000
--- a/parts/django/tests/modeltests/many_to_one/tests.py
+++ /dev/null
@@ -1,371 +0,0 @@
-from datetime import datetime
-from django.test import TestCase
-from django.core.exceptions import FieldError
-from models import Article, Reporter
-
-class ManyToOneTests(TestCase):
-
- def setUp(self):
- # Create a few Reporters.
- self.r = Reporter(first_name='John', last_name='Smith', email='john@example.com')
- self.r.save()
- self.r2 = Reporter(first_name='Paul', last_name='Jones', email='paul@example.com')
- self.r2.save()
- # Create an Article.
- self.a = Article(id=None, headline="This is a test",
- pub_date=datetime(2005, 7, 27), reporter=self.r)
- self.a.save()
-
- def test_get(self):
- # Article objects have access to their related Reporter objects.
- r = self.a.reporter
- self.assertEqual(r.id, self.r.id)
- # These are strings instead of unicode strings because that's what was used in
- # the creation of this reporter (and we haven't refreshed the data from the
- # database, which always returns unicode strings).
- self.assertEqual((r.first_name, self.r.last_name), ('John', 'Smith'))
-
- def test_create(self):
- # You can also instantiate an Article by passing the Reporter's ID
- # instead of a Reporter object.
- a3 = Article(id=None, headline="Third article",
- pub_date=datetime(2005, 7, 27), reporter_id=self.r.id)
- a3.save()
- self.assertEqual(a3.reporter.id, self.r.id)
-
- # Similarly, the reporter ID can be a string.
- a4 = Article(id=None, headline="Fourth article",
- pub_date=datetime(2005, 7, 27), reporter_id=str(self.r.id))
- a4.save()
- self.assertEqual(repr(a4.reporter), "<Reporter: John Smith>")
-
- def test_add(self):
- # Create an Article via the Reporter object.
- new_article = self.r.article_set.create(headline="John's second story",
- pub_date=datetime(2005, 7, 29))
- self.assertEqual(repr(new_article), "<Article: John's second story>")
- self.assertEqual(new_article.reporter.id, self.r.id)
-
- # Create a new article, and add it to the article set.
- new_article2 = Article(headline="Paul's story", pub_date=datetime(2006, 1, 17))
- self.r.article_set.add(new_article2)
- self.assertEqual(new_article2.reporter.id, self.r.id)
- self.assertQuerysetEqual(self.r.article_set.all(),
- [
- "<Article: John's second story>",
- "<Article: Paul's story>",
- "<Article: This is a test>",
- ])
-
- # Add the same article to a different article set - check that it moves.
- self.r2.article_set.add(new_article2)
- self.assertEqual(new_article2.reporter.id, self.r2.id)
- self.assertQuerysetEqual(self.r2.article_set.all(), ["<Article: Paul's story>"])
-
- # Adding an object of the wrong type raises TypeError.
- self.assertRaises(TypeError, self.r.article_set.add, self.r2)
- self.assertQuerysetEqual(self.r.article_set.all(),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
-
- def test_assign(self):
- new_article = self.r.article_set.create(headline="John's second story",
- pub_date=datetime(2005, 7, 29))
- new_article2 = self.r2.article_set.create(headline="Paul's story",
- pub_date=datetime(2006, 1, 17))
- # Assign the article to the reporter directly using the descriptor.
- new_article2.reporter = self.r
- new_article2.save()
- self.assertEqual(repr(new_article2.reporter), "<Reporter: John Smith>")
- self.assertEqual(new_article2.reporter.id, self.r.id)
- self.assertQuerysetEqual(self.r.article_set.all(), [
- "<Article: John's second story>",
- "<Article: Paul's story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(self.r2.article_set.all(), [])
- # Set the article back again using set descriptor.
- self.r2.article_set = [new_article, new_article2]
- self.assertQuerysetEqual(self.r.article_set.all(), ["<Article: This is a test>"])
- self.assertQuerysetEqual(self.r2.article_set.all(),
- [
- "<Article: John's second story>",
- "<Article: Paul's story>",
- ])
-
- # Funny case - assignment notation can only go so far; because the
- # ForeignKey cannot be null, existing members of the set must remain.
- self.r.article_set = [new_article]
- self.assertQuerysetEqual(self.r.article_set.all(),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(self.r2.article_set.all(), ["<Article: Paul's story>"])
- # Reporter cannot be null - there should not be a clear or remove method
- self.assertFalse(hasattr(self.r2.article_set, 'remove'))
- self.assertFalse(hasattr(self.r2.article_set, 'clear'))
-
- def test_selects(self):
- new_article = self.r.article_set.create(headline="John's second story",
- pub_date=datetime(2005, 7, 29))
- new_article2 = self.r2.article_set.create(headline="Paul's story",
- pub_date=datetime(2006, 1, 17))
- # Reporter objects have access to their related Article objects.
- self.assertQuerysetEqual(self.r.article_set.all(), [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(self.r.article_set.filter(headline__startswith='This'),
- ["<Article: This is a test>"])
- self.assertEqual(self.r.article_set.count(), 2)
- self.assertEqual(self.r2.article_set.count(), 1)
- # Get articles by id
- self.assertQuerysetEqual(Article.objects.filter(id__exact=self.a.id),
- ["<Article: This is a test>"])
- self.assertQuerysetEqual(Article.objects.filter(pk=self.a.id),
- ["<Article: This is a test>"])
- # Query on an article property
- self.assertQuerysetEqual(Article.objects.filter(headline__startswith='This'),
- ["<Article: This is a test>"])
- # The API automatically follows relationships as far as you need.
- # Use double underscores to separate relationships.
- # This works as many levels deep as you want. There's no limit.
- # Find all Articles for any Reporter whose first name is "John".
- self.assertQuerysetEqual(Article.objects.filter(reporter__first_name__exact='John'),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- # Check that implied __exact also works
- self.assertQuerysetEqual(Article.objects.filter(reporter__first_name='John'),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- # Query twice over the related field.
- self.assertQuerysetEqual(
- Article.objects.filter(reporter__first_name__exact='John',
- reporter__last_name__exact='Smith'),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- # The underlying query only makes one join when a related table is referenced twice.
- queryset = Article.objects.filter(reporter__first_name__exact='John',
- reporter__last_name__exact='Smith')
- self.assertEqual(queryset.query.get_compiler(queryset.db).as_sql()[0].count('INNER JOIN'), 1)
-
- # The automatically joined table has a predictable name.
- self.assertQuerysetEqual(
- Article.objects.filter(reporter__first_name__exact='John').extra(
- where=["many_to_one_reporter.last_name='Smith'"]),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- # ... and should work fine with the unicode that comes out of forms.Form.cleaned_data
- self.assertQuerysetEqual(
- Article.objects.filter(reporter__first_name__exact='John'
- ).extra(where=["many_to_one_reporter.last_name='%s'" % u'Smith']),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- # Find all Articles for a Reporter.
- # Use direct ID check, pk check, and object comparison
- self.assertQuerysetEqual(
- Article.objects.filter(reporter__id__exact=self.r.id),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(reporter__pk=self.r.id),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(reporter=self.r.id),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(reporter=self.r),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(reporter__in=[self.r.id,self.r2.id]).distinct(),
- [
- "<Article: John's second story>",
- "<Article: Paul's story>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(
- Article.objects.filter(reporter__in=[self.r,self.r2]).distinct(),
- [
- "<Article: John's second story>",
- "<Article: Paul's story>",
- "<Article: This is a test>",
- ])
- # You can also use a queryset instead of a literal list of instances.
- # The queryset must be reduced to a list of values using values(),
- # then converted into a query
- self.assertQuerysetEqual(
- Article.objects.filter(
- reporter__in=Reporter.objects.filter(first_name='John').values('pk').query
- ).distinct(),
- [
- "<Article: John's second story>",
- "<Article: This is a test>",
- ])
- # You need two underscores between "reporter" and "id" -- not one.
- self.assertRaises(FieldError, Article.objects.filter, reporter_id__exact=self.r.id)
- # You need to specify a comparison clause
- self.assertRaises(FieldError, Article.objects.filter, reporter_id=self.r.id)
-
- def test_reverse_selects(self):
- a3 = Article.objects.create(id=None, headline="Third article",
- pub_date=datetime(2005, 7, 27), reporter_id=self.r.id)
- a4 = Article.objects.create(id=None, headline="Fourth article",
- pub_date=datetime(2005, 7, 27), reporter_id=str(self.r.id))
- # Reporters can be queried
- self.assertQuerysetEqual(Reporter.objects.filter(id__exact=self.r.id),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(Reporter.objects.filter(pk=self.r.id),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(Reporter.objects.filter(first_name__startswith='John'),
- ["<Reporter: John Smith>"])
- # Reporters can query in opposite direction of ForeignKey definition
- self.assertQuerysetEqual(Reporter.objects.filter(article__id__exact=self.a.id),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(Reporter.objects.filter(article__pk=self.a.id),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(Reporter.objects.filter(article=self.a.id),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(Reporter.objects.filter(article=self.a),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__in=[self.a.id,a3.id]).distinct(),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__in=[self.a.id,a3]).distinct(),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__in=[self.a,a3]).distinct(),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__headline__startswith='T'),
- ["<Reporter: John Smith>", "<Reporter: John Smith>"])
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__headline__startswith='T').distinct(),
- ["<Reporter: John Smith>"])
-
- # Counting in the opposite direction works in conjunction with distinct()
- self.assertEqual(
- Reporter.objects.filter(article__headline__startswith='T').count(), 2)
- self.assertEqual(
- Reporter.objects.filter(article__headline__startswith='T').distinct().count(), 1)
-
- # Queries can go round in circles.
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__reporter__first_name__startswith='John'),
- [
- "<Reporter: John Smith>",
- "<Reporter: John Smith>",
- "<Reporter: John Smith>",
- ])
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__reporter__first_name__startswith='John').distinct(),
- ["<Reporter: John Smith>"])
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__reporter__exact=self.r).distinct(),
- ["<Reporter: John Smith>"])
-
- # Check that implied __exact also works.
- self.assertQuerysetEqual(
- Reporter.objects.filter(article__reporter=self.r).distinct(),
- ["<Reporter: John Smith>"])
-
- # It's possible to use values() calls across many-to-one relations.
- # (Note, too, that we clear the ordering here so as not to drag the
- # 'headline' field into the columns being used to determine uniqueness)
- d = {'reporter__first_name': u'John', 'reporter__last_name': u'Smith'}
- self.assertEqual([d],
- list(Article.objects.filter(reporter=self.r).distinct().order_by()
- .values('reporter__first_name', 'reporter__last_name')))
-
- def test_select_related(self):
- # Check that Article.objects.select_related().dates() works properly when
- # there are multiple Articles with the same date but different foreign-key
- # objects (Reporters).
- r1 = Reporter.objects.create(first_name='Mike', last_name='Royko', email='royko@suntimes.com')
- r2 = Reporter.objects.create(first_name='John', last_name='Kass', email='jkass@tribune.com')
- a1 = Article.objects.create(headline='First', pub_date=datetime(1980, 4, 23), reporter=r1)
- a2 = Article.objects.create(headline='Second', pub_date=datetime(1980, 4, 23), reporter=r2)
- self.assertEqual(list(Article.objects.select_related().dates('pub_date', 'day')),
- [
- datetime(1980, 4, 23, 0, 0),
- datetime(2005, 7, 27, 0, 0),
- ])
- self.assertEqual(list(Article.objects.select_related().dates('pub_date', 'month')),
- [
- datetime(1980, 4, 1, 0, 0),
- datetime(2005, 7, 1, 0, 0),
- ])
- self.assertEqual(list(Article.objects.select_related().dates('pub_date', 'year')),
- [
- datetime(1980, 1, 1, 0, 0),
- datetime(2005, 1, 1, 0, 0),
- ])
-
- def test_delete(self):
- new_article = self.r.article_set.create(headline="John's second story",
- pub_date=datetime(2005, 7, 29))
- new_article2 = self.r2.article_set.create(headline="Paul's story",
- pub_date=datetime(2006, 1, 17))
- a3 = Article.objects.create(id=None, headline="Third article",
- pub_date=datetime(2005, 7, 27), reporter_id=self.r.id)
- a4 = Article.objects.create(id=None, headline="Fourth article",
- pub_date=datetime(2005, 7, 27), reporter_id=str(self.r.id))
- # If you delete a reporter, his articles will be deleted.
- self.assertQuerysetEqual(Article.objects.all(),
- [
- "<Article: Fourth article>",
- "<Article: John's second story>",
- "<Article: Paul's story>",
- "<Article: Third article>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(Reporter.objects.order_by('first_name'),
- [
- "<Reporter: John Smith>",
- "<Reporter: Paul Jones>",
- ])
- self.r2.delete()
- self.assertQuerysetEqual(Article.objects.all(),
- [
- "<Article: Fourth article>",
- "<Article: John's second story>",
- "<Article: Third article>",
- "<Article: This is a test>",
- ])
- self.assertQuerysetEqual(Reporter.objects.order_by('first_name'),
- ["<Reporter: John Smith>"])
- # You can delete using a JOIN in the query.
- Reporter.objects.filter(article__headline__startswith='This').delete()
- self.assertQuerysetEqual(Reporter.objects.all(), [])
- self.assertQuerysetEqual(Article.objects.all(), [])
-
- def test_regression_12876(self):
- # Regression for #12876 -- Model methods that include queries that
- # recursive don't cause recursion depth problems under deepcopy.
- self.r.cached_query = Article.objects.filter(reporter=self.r)
- from copy import deepcopy
- self.assertEqual(repr(deepcopy(self.r)), "<Reporter: John Smith>")
diff --git a/parts/django/tests/modeltests/many_to_one_null/__init__.py b/parts/django/tests/modeltests/many_to_one_null/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/many_to_one_null/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/many_to_one_null/models.py b/parts/django/tests/modeltests/many_to_one_null/models.py
deleted file mode 100644
index 5f824b4..0000000
--- a/parts/django/tests/modeltests/many_to_one_null/models.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-16. Many-to-one relationships that can be null
-
-To define a many-to-one relationship that can have a null foreign key, use
-``ForeignKey()`` with ``null=True`` .
-"""
-
-from django.db import models
-
-class Reporter(models.Model):
- name = models.CharField(max_length=30)
-
- def __unicode__(self):
- return self.name
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- reporter = models.ForeignKey(Reporter, null=True)
-
- class Meta:
- ordering = ('headline',)
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/modeltests/many_to_one_null/tests.py b/parts/django/tests/modeltests/many_to_one_null/tests.py
deleted file mode 100644
index c78f980..0000000
--- a/parts/django/tests/modeltests/many_to_one_null/tests.py
+++ /dev/null
@@ -1,84 +0,0 @@
-from django.test import TestCase
-from models import Reporter, Article
-
-class ManyToOneNullTests(TestCase):
-
- def setUp(self):
- # Create a Reporter.
- self.r = Reporter(name='John Smith')
- self.r.save()
- # Create an Article.
- self.a = Article(headline="First", reporter=self.r)
- self.a.save()
- # Create an Article via the Reporter object.
- self.a2 = self.r.article_set.create(headline="Second")
- # Create an Article with no Reporter by passing "reporter=None".
- self.a3 = Article(headline="Third", reporter=None)
- self.a3.save()
- # Create another article and reporter
- self.r2 = Reporter(name='Paul Jones')
- self.r2.save()
- self.a4 = self.r2.article_set.create(headline='Fourth')
-
- def test_get_related(self):
- self.assertEqual(self.a.reporter.id, self.r.id)
- # Article objects have access to their related Reporter objects.
- r = self.a.reporter
- self.assertEqual(r.id, self.r.id)
-
- def test_created_via_related_set(self):
- self.assertEqual(self.a2.reporter.id, self.r.id)
-
- def test_related_set(self):
- # Reporter objects have access to their related Article objects.
- self.assertQuerysetEqual(self.r.article_set.all(),
- ['<Article: First>', '<Article: Second>'])
- self.assertQuerysetEqual(self.r.article_set.filter(headline__startswith='Fir'),
- ['<Article: First>'])
- self.assertEqual(self.r.article_set.count(), 2)
-
- def test_created_without_related(self):
- self.assertEqual(self.a3.reporter, None)
- # Need to reget a3 to refresh the cache
- a3 = Article.objects.get(pk=self.a3.pk)
- self.assertRaises(AttributeError, getattr, a3.reporter, 'id')
- # Accessing an article's 'reporter' attribute returns None
- # if the reporter is set to None.
- self.assertEqual(a3.reporter, None)
- # To retrieve the articles with no reporters set, use "reporter__isnull=True".
- self.assertQuerysetEqual(Article.objects.filter(reporter__isnull=True),
- ['<Article: Third>'])
- # We can achieve the same thing by filtering for the case where the
- # reporter is None.
- self.assertQuerysetEqual(Article.objects.filter(reporter=None),
- ['<Article: Third>'])
- # Set the reporter for the Third article
- self.assertQuerysetEqual(self.r.article_set.all(),
- ['<Article: First>', '<Article: Second>'])
- self.r.article_set.add(a3)
- self.assertQuerysetEqual(self.r.article_set.all(),
- ['<Article: First>', '<Article: Second>', '<Article: Third>'])
- # Remove an article from the set, and check that it was removed.
- self.r.article_set.remove(a3)
- self.assertQuerysetEqual(self.r.article_set.all(),
- ['<Article: First>', '<Article: Second>'])
- self.assertQuerysetEqual(Article.objects.filter(reporter__isnull=True),
- ['<Article: Third>'])
-
- def test_remove_from_wrong_set(self):
- self.assertQuerysetEqual(self.r2.article_set.all(), ['<Article: Fourth>'])
- # Try to remove a4 from a set it does not belong to
- self.assertRaises(Reporter.DoesNotExist, self.r.article_set.remove, self.a4)
- self.assertQuerysetEqual(self.r2.article_set.all(), ['<Article: Fourth>'])
-
- def test_assign_clear_related_set(self):
- # Use descriptor assignment to allocate ForeignKey. Null is legal, so
- # existing members of set that are not in the assignment set are set null
- self.r2.article_set = [self.a2, self.a3]
- self.assertQuerysetEqual(self.r2.article_set.all(),
- ['<Article: Second>', '<Article: Third>'])
- # Clear the rest of the set
- self.r.article_set.clear()
- self.assertQuerysetEqual(self.r.article_set.all(), [])
- self.assertQuerysetEqual(Article.objects.filter(reporter__isnull=True),
- ['<Article: First>', '<Article: Fourth>'])
diff --git a/parts/django/tests/modeltests/model_forms/__init__.py b/parts/django/tests/modeltests/model_forms/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/model_forms/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/model_forms/mforms.py b/parts/django/tests/modeltests/model_forms/mforms.py
deleted file mode 100644
index aef763e..0000000
--- a/parts/django/tests/modeltests/model_forms/mforms.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from django import forms
-from django.forms import ModelForm
-
-from models import Product, Price, Book, DerivedBook, ExplicitPK, Post, DerivedPost, Writer
-
-class ProductForm(ModelForm):
- class Meta:
- model = Product
-
-class PriceForm(ModelForm):
- class Meta:
- model = Price
-
-class BookForm(ModelForm):
- class Meta:
- model = Book
-
-class DerivedBookForm(ModelForm):
- class Meta:
- model = DerivedBook
-
-class ExplicitPKForm(ModelForm):
- class Meta:
- model = ExplicitPK
- fields = ('key', 'desc',)
-
-class PostForm(ModelForm):
- class Meta:
- model = Post
-
-class DerivedPostForm(ModelForm):
- class Meta:
- model = DerivedPost
-
-class CustomWriterForm(ModelForm):
- name = forms.CharField(required=False)
-
- class Meta:
- model = Writer
diff --git a/parts/django/tests/modeltests/model_forms/models.py b/parts/django/tests/modeltests/model_forms/models.py
deleted file mode 100644
index 1087cf8..0000000
--- a/parts/django/tests/modeltests/model_forms/models.py
+++ /dev/null
@@ -1,1575 +0,0 @@
-"""
-XX. Generating HTML forms from models
-
-This is mostly just a reworking of the ``form_for_model``/``form_for_instance``
-tests to use ``ModelForm``. As such, the text may not make sense in all cases,
-and the examples are probably a poor fit for the ``ModelForm`` syntax. In other
-words, most of these tests should be rewritten.
-"""
-
-import os
-import tempfile
-
-from django.db import models
-from django.core.files.storage import FileSystemStorage
-
-temp_storage_dir = tempfile.mkdtemp()
-temp_storage = FileSystemStorage(temp_storage_dir)
-
-ARTICLE_STATUS = (
- (1, 'Draft'),
- (2, 'Pending'),
- (3, 'Live'),
-)
-
-ARTICLE_STATUS_CHAR = (
- ('d', 'Draft'),
- ('p', 'Pending'),
- ('l', 'Live'),
-)
-
-class Category(models.Model):
- name = models.CharField(max_length=20)
- slug = models.SlugField(max_length=20)
- url = models.CharField('The URL', max_length=40)
-
- def __unicode__(self):
- return self.name
-
-class Writer(models.Model):
- name = models.CharField(max_length=50, help_text='Use both first and last names.')
-
- def __unicode__(self):
- return self.name
-
-class Article(models.Model):
- headline = models.CharField(max_length=50)
- slug = models.SlugField()
- pub_date = models.DateField()
- created = models.DateField(editable=False)
- writer = models.ForeignKey(Writer)
- article = models.TextField()
- categories = models.ManyToManyField(Category, blank=True)
- status = models.PositiveIntegerField(choices=ARTICLE_STATUS, blank=True, null=True)
-
- def save(self):
- import datetime
- if not self.id:
- self.created = datetime.date.today()
- return super(Article, self).save()
-
- def __unicode__(self):
- return self.headline
-
-class ImprovedArticle(models.Model):
- article = models.OneToOneField(Article)
-
-class ImprovedArticleWithParentLink(models.Model):
- article = models.OneToOneField(Article, parent_link=True)
-
-class BetterWriter(Writer):
- score = models.IntegerField()
-
-class WriterProfile(models.Model):
- writer = models.OneToOneField(Writer, primary_key=True)
- age = models.PositiveIntegerField()
-
- def __unicode__(self):
- return "%s is %s" % (self.writer, self.age)
-
-from django.contrib.localflavor.us.models import PhoneNumberField
-class PhoneNumber(models.Model):
- phone = PhoneNumberField()
- description = models.CharField(max_length=20)
-
- def __unicode__(self):
- return self.phone
-
-class TextFile(models.Model):
- description = models.CharField(max_length=20)
- file = models.FileField(storage=temp_storage, upload_to='tests', max_length=15)
-
- def __unicode__(self):
- return self.description
-
-try:
- # If PIL is available, try testing ImageFields. Checking for the existence
- # of Image is enough for CPython, but for PyPy, you need to check for the
- # underlying modules If PIL is not available, ImageField tests are omitted.
- # Try to import PIL in either of the two ways it can end up installed.
- try:
- from PIL import Image, _imaging
- except ImportError:
- import Image, _imaging
-
- test_images = True
-
- class ImageFile(models.Model):
- def custom_upload_path(self, filename):
- path = self.path or 'tests'
- return '%s/%s' % (path, filename)
-
- description = models.CharField(max_length=20)
-
- # Deliberately put the image field *after* the width/height fields to
- # trigger the bug in #10404 with width/height not getting assigned.
- width = models.IntegerField(editable=False)
- height = models.IntegerField(editable=False)
- image = models.ImageField(storage=temp_storage, upload_to=custom_upload_path,
- width_field='width', height_field='height')
- path = models.CharField(max_length=16, blank=True, default='')
-
- def __unicode__(self):
- return self.description
-
- class OptionalImageFile(models.Model):
- def custom_upload_path(self, filename):
- path = self.path or 'tests'
- return '%s/%s' % (path, filename)
-
- description = models.CharField(max_length=20)
- image = models.ImageField(storage=temp_storage, upload_to=custom_upload_path,
- width_field='width', height_field='height',
- blank=True, null=True)
- width = models.IntegerField(editable=False, null=True)
- height = models.IntegerField(editable=False, null=True)
- path = models.CharField(max_length=16, blank=True, default='')
-
- def __unicode__(self):
- return self.description
-except ImportError:
- test_images = False
-
-class CommaSeparatedInteger(models.Model):
- field = models.CommaSeparatedIntegerField(max_length=20)
-
- def __unicode__(self):
- return self.field
-
-class Product(models.Model):
- slug = models.SlugField(unique=True)
-
- def __unicode__(self):
- return self.slug
-
-class Price(models.Model):
- price = models.DecimalField(max_digits=10, decimal_places=2)
- quantity = models.PositiveIntegerField()
-
- def __unicode__(self):
- return u"%s for %s" % (self.quantity, self.price)
-
- class Meta:
- unique_together = (('price', 'quantity'),)
-
-class ArticleStatus(models.Model):
- status = models.CharField(max_length=2, choices=ARTICLE_STATUS_CHAR, blank=True, null=True)
-
-class Inventory(models.Model):
- barcode = models.PositiveIntegerField(unique=True)
- parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True)
- name = models.CharField(blank=False, max_length=20)
-
- def __unicode__(self):
- return self.name
-
-class Book(models.Model):
- title = models.CharField(max_length=40)
- author = models.ForeignKey(Writer, blank=True, null=True)
- special_id = models.IntegerField(blank=True, null=True, unique=True)
-
- class Meta:
- unique_together = ('title', 'author')
-
-class BookXtra(models.Model):
- isbn = models.CharField(max_length=16, unique=True)
- suffix1 = models.IntegerField(blank=True, default=0)
- suffix2 = models.IntegerField(blank=True, default=0)
-
- class Meta:
- unique_together = (('suffix1', 'suffix2'))
- abstract = True
-
-class DerivedBook(Book, BookXtra):
- pass
-
-class ExplicitPK(models.Model):
- key = models.CharField(max_length=20, primary_key=True)
- desc = models.CharField(max_length=20, blank=True, unique=True)
- class Meta:
- unique_together = ('key', 'desc')
-
- def __unicode__(self):
- return self.key
-
-class Post(models.Model):
- title = models.CharField(max_length=50, unique_for_date='posted', blank=True)
- slug = models.CharField(max_length=50, unique_for_year='posted', blank=True)
- subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True)
- posted = models.DateField()
-
- def __unicode__(self):
- return self.name
-
-class DerivedPost(Post):
- pass
-
-class BigInt(models.Model):
- biggie = models.BigIntegerField()
-
- def __unicode__(self):
- return unicode(self.biggie)
-
-class MarkupField(models.CharField):
- def __init__(self, *args, **kwargs):
- kwargs["max_length"] = 20
- super(MarkupField, self).__init__(*args, **kwargs)
-
- def formfield(self, **kwargs):
- # don't allow this field to be used in form (real use-case might be
- # that you know the markup will always be X, but it is among an app
- # that allows the user to say it could be something else)
- # regressed at r10062
- return None
-
-class CustomFieldForExclusionModel(models.Model):
- name = models.CharField(max_length=10)
- markup = MarkupField()
-
-__test__ = {'API_TESTS': """
->>> from django import forms
->>> from django.forms.models import ModelForm, model_to_dict
->>> from django.core.files.uploadedfile import SimpleUploadedFile
-
-The bare bones, absolutely nothing custom, basic case.
-
->>> class CategoryForm(ModelForm):
-... class Meta:
-... model = Category
->>> CategoryForm.base_fields.keys()
-['name', 'slug', 'url']
-
-
-Extra fields.
-
->>> class CategoryForm(ModelForm):
-... some_extra_field = forms.BooleanField()
-...
-... class Meta:
-... model = Category
-
->>> CategoryForm.base_fields.keys()
-['name', 'slug', 'url', 'some_extra_field']
-
-Extra field that has a name collision with a related object accessor.
-
->>> class WriterForm(ModelForm):
-... book = forms.CharField(required=False)
-...
-... class Meta:
-... model = Writer
-
->>> wf = WriterForm({'name': 'Richard Lockridge'})
->>> wf.is_valid()
-True
-
-Replacing a field.
-
->>> class CategoryForm(ModelForm):
-... url = forms.BooleanField()
-...
-... class Meta:
-... model = Category
-
->>> CategoryForm.base_fields['url'].__class__
-<class 'django.forms.fields.BooleanField'>
-
-
-Using 'fields'.
-
->>> class CategoryForm(ModelForm):
-...
-... class Meta:
-... model = Category
-... fields = ['url']
-
->>> CategoryForm.base_fields.keys()
-['url']
-
-
-Using 'exclude'
-
->>> class CategoryForm(ModelForm):
-...
-... class Meta:
-... model = Category
-... exclude = ['url']
-
->>> CategoryForm.base_fields.keys()
-['name', 'slug']
-
-
-Using 'fields' *and* 'exclude'. Not sure why you'd want to do this, but uh,
-"be liberal in what you accept" and all.
-
->>> class CategoryForm(ModelForm):
-...
-... class Meta:
-... model = Category
-... fields = ['name', 'url']
-... exclude = ['url']
-
->>> CategoryForm.base_fields.keys()
-['name']
-
-Using 'widgets'
-
->>> class CategoryForm(ModelForm):
-...
-... class Meta:
-... model = Category
-... fields = ['name', 'url', 'slug']
-... widgets = {
-... 'name': forms.Textarea,
-... 'url': forms.TextInput(attrs={'class': 'url'})
-... }
-
->>> str(CategoryForm()['name'])
-'<textarea id="id_name" rows="10" cols="40" name="name"></textarea>'
-
->>> str(CategoryForm()['url'])
-'<input id="id_url" type="text" class="url" name="url" maxlength="40" />'
-
->>> str(CategoryForm()['slug'])
-'<input id="id_slug" type="text" name="slug" maxlength="20" />'
-
-Don't allow more than one 'model' definition in the inheritance hierarchy.
-Technically, it would generate a valid form, but the fact that the resulting
-save method won't deal with multiple objects is likely to trip up people not
-familiar with the mechanics.
-
->>> class CategoryForm(ModelForm):
-... class Meta:
-... model = Category
-
->>> class OddForm(CategoryForm):
-... class Meta:
-... model = Article
-
-OddForm is now an Article-related thing, because BadForm.Meta overrides
-CategoryForm.Meta.
->>> OddForm.base_fields.keys()
-['headline', 'slug', 'pub_date', 'writer', 'article', 'status', 'categories']
-
->>> class ArticleForm(ModelForm):
-... class Meta:
-... model = Article
-
-First class with a Meta class wins.
-
->>> class BadForm(ArticleForm, CategoryForm):
-... pass
->>> OddForm.base_fields.keys()
-['headline', 'slug', 'pub_date', 'writer', 'article', 'status', 'categories']
-
-Subclassing without specifying a Meta on the class will use the parent's Meta
-(or the first parent in the MRO if there are multiple parent classes).
-
->>> class CategoryForm(ModelForm):
-... class Meta:
-... model = Category
->>> class SubCategoryForm(CategoryForm):
-... pass
->>> SubCategoryForm.base_fields.keys()
-['name', 'slug', 'url']
-
-We can also subclass the Meta inner class to change the fields list.
-
->>> class CategoryForm(ModelForm):
-... checkbox = forms.BooleanField()
-...
-... class Meta:
-... model = Category
->>> class SubCategoryForm(CategoryForm):
-... class Meta(CategoryForm.Meta):
-... exclude = ['url']
-
->>> print SubCategoryForm()
-<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" type="text" name="name" maxlength="20" /></td></tr>
-<tr><th><label for="id_slug">Slug:</label></th><td><input id="id_slug" type="text" name="slug" maxlength="20" /></td></tr>
-<tr><th><label for="id_checkbox">Checkbox:</label></th><td><input type="checkbox" name="checkbox" id="id_checkbox" /></td></tr>
-
-# test using fields to provide ordering to the fields
->>> class CategoryForm(ModelForm):
-... class Meta:
-... model = Category
-... fields = ['url', 'name']
-
->>> CategoryForm.base_fields.keys()
-['url', 'name']
-
-
->>> print CategoryForm()
-<tr><th><label for="id_url">The URL:</label></th><td><input id="id_url" type="text" name="url" maxlength="40" /></td></tr>
-<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" type="text" name="name" maxlength="20" /></td></tr>
-
->>> class CategoryForm(ModelForm):
-... class Meta:
-... model = Category
-... fields = ['slug', 'url', 'name']
-... exclude = ['url']
-
->>> CategoryForm.base_fields.keys()
-['slug', 'name']
-
-# Old form_for_x tests #######################################################
-
->>> from django.forms import ModelForm, CharField
->>> import datetime
-
->>> Category.objects.all()
-[]
-
->>> class CategoryForm(ModelForm):
-... class Meta:
-... model = Category
->>> f = CategoryForm()
->>> print f
-<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" type="text" name="name" maxlength="20" /></td></tr>
-<tr><th><label for="id_slug">Slug:</label></th><td><input id="id_slug" type="text" name="slug" maxlength="20" /></td></tr>
-<tr><th><label for="id_url">The URL:</label></th><td><input id="id_url" type="text" name="url" maxlength="40" /></td></tr>
->>> print f.as_ul()
-<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="20" /></li>
-<li><label for="id_slug">Slug:</label> <input id="id_slug" type="text" name="slug" maxlength="20" /></li>
-<li><label for="id_url">The URL:</label> <input id="id_url" type="text" name="url" maxlength="40" /></li>
->>> print f['name']
-<input id="id_name" type="text" name="name" maxlength="20" />
-
->>> f = CategoryForm(auto_id=False)
->>> print f.as_ul()
-<li>Name: <input type="text" name="name" maxlength="20" /></li>
-<li>Slug: <input type="text" name="slug" maxlength="20" /></li>
-<li>The URL: <input type="text" name="url" maxlength="40" /></li>
-
->>> f = CategoryForm({'name': 'Entertainment', 'slug': 'entertainment', 'url': 'entertainment'})
->>> f.is_valid()
-True
->>> f.cleaned_data['url']
-u'entertainment'
->>> f.cleaned_data['name']
-u'Entertainment'
->>> f.cleaned_data['slug']
-u'entertainment'
->>> obj = f.save()
->>> obj
-<Category: Entertainment>
->>> Category.objects.all()
-[<Category: Entertainment>]
-
->>> f = CategoryForm({'name': "It's a test", 'slug': 'its-test', 'url': 'test'})
->>> f.is_valid()
-True
->>> f.cleaned_data['url']
-u'test'
->>> f.cleaned_data['name']
-u"It's a test"
->>> f.cleaned_data['slug']
-u'its-test'
->>> obj = f.save()
->>> obj
-<Category: It's a test>
->>> Category.objects.order_by('name')
-[<Category: Entertainment>, <Category: It's a test>]
-
-If you call save() with commit=False, then it will return an object that
-hasn't yet been saved to the database. In this case, it's up to you to call
-save() on the resulting model instance.
->>> f = CategoryForm({'name': 'Third test', 'slug': 'third-test', 'url': 'third'})
->>> f.is_valid()
-True
->>> f.cleaned_data['url']
-u'third'
->>> f.cleaned_data['name']
-u'Third test'
->>> f.cleaned_data['slug']
-u'third-test'
->>> obj = f.save(commit=False)
->>> obj
-<Category: Third test>
->>> Category.objects.order_by('name')
-[<Category: Entertainment>, <Category: It's a test>]
->>> obj.save()
->>> Category.objects.order_by('name')
-[<Category: Entertainment>, <Category: It's a test>, <Category: Third test>]
-
-If you call save() with invalid data, you'll get a ValueError.
->>> f = CategoryForm({'name': '', 'slug': 'not a slug!', 'url': 'foo'})
->>> f.errors['name']
-[u'This field is required.']
->>> f.errors['slug']
-[u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."]
->>> f.cleaned_data
-Traceback (most recent call last):
-...
-AttributeError: 'CategoryForm' object has no attribute 'cleaned_data'
->>> f.save()
-Traceback (most recent call last):
-...
-ValueError: The Category could not be created because the data didn't validate.
->>> f = CategoryForm({'name': '', 'slug': '', 'url': 'foo'})
->>> f.save()
-Traceback (most recent call last):
-...
-ValueError: The Category could not be created because the data didn't validate.
-
-Create a couple of Writers.
->>> w_royko = Writer(name='Mike Royko')
->>> w_royko.save()
->>> w_woodward = Writer(name='Bob Woodward')
->>> w_woodward.save()
-
-ManyToManyFields are represented by a MultipleChoiceField, ForeignKeys and any
-fields with the 'choices' attribute are represented by a ChoiceField.
->>> class ArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = ArticleForm(auto_id=False)
->>> print f
-<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" /></td></tr>
-<tr><th>Slug:</th><td><input type="text" name="slug" maxlength="50" /></td></tr>
-<tr><th>Pub date:</th><td><input type="text" name="pub_date" /></td></tr>
-<tr><th>Writer:</th><td><select name="writer">
-<option value="" selected="selected">---------</option>
-<option value="...">Mike Royko</option>
-<option value="...">Bob Woodward</option>
-</select></td></tr>
-<tr><th>Article:</th><td><textarea rows="10" cols="40" name="article"></textarea></td></tr>
-<tr><th>Status:</th><td><select name="status">
-<option value="" selected="selected">---------</option>
-<option value="1">Draft</option>
-<option value="2">Pending</option>
-<option value="3">Live</option>
-</select></td></tr>
-<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
-<option value="1">Entertainment</option>
-<option value="2">It&#39;s a test</option>
-<option value="3">Third test</option>
-</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr>
-
-You can restrict a form to a subset of the complete list of fields
-by providing a 'fields' argument. If you try to save a
-model created with such a form, you need to ensure that the fields
-that are _not_ on the form have default values, or are allowed to have
-a value of None. If a field isn't specified on a form, the object created
-from the form can't provide a value for that field!
->>> class PartialArticleForm(ModelForm):
-... class Meta:
-... model = Article
-... fields = ('headline','pub_date')
->>> f = PartialArticleForm(auto_id=False)
->>> print f
-<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" /></td></tr>
-<tr><th>Pub date:</th><td><input type="text" name="pub_date" /></td></tr>
-
-When the ModelForm is passed an instance, that instance's current values are
-inserted as 'initial' data in each Field.
->>> w = Writer.objects.get(name='Mike Royko')
->>> class RoykoForm(ModelForm):
-... class Meta:
-... model = Writer
->>> f = RoykoForm(auto_id=False, instance=w)
->>> print f
-<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="50" /><br />Use both first and last names.</td></tr>
-
->>> art = Article(headline='Test article', slug='test-article', pub_date=datetime.date(1988, 1, 4), writer=w, article='Hello.')
->>> art.save()
->>> art.id
-1
->>> class TestArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = TestArticleForm(auto_id=False, instance=art)
->>> print f.as_ul()
-<li>Headline: <input type="text" name="headline" value="Test article" maxlength="50" /></li>
-<li>Slug: <input type="text" name="slug" value="test-article" maxlength="50" /></li>
-<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" /></li>
-<li>Writer: <select name="writer">
-<option value="">---------</option>
-<option value="..." selected="selected">Mike Royko</option>
-<option value="...">Bob Woodward</option>
-</select></li>
-<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
-<li>Status: <select name="status">
-<option value="" selected="selected">---------</option>
-<option value="1">Draft</option>
-<option value="2">Pending</option>
-<option value="3">Live</option>
-</select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="1">Entertainment</option>
-<option value="2">It&#39;s a test</option>
-<option value="3">Third test</option>
-</select> Hold down "Control", or "Command" on a Mac, to select more than one.</li>
->>> f = TestArticleForm({'headline': u'Test headline', 'slug': 'test-headline', 'pub_date': u'1984-02-06', 'writer': unicode(w_royko.pk), 'article': 'Hello.'}, instance=art)
->>> f.errors
-{}
->>> f.is_valid()
-True
->>> test_art = f.save()
->>> test_art.id
-1
->>> test_art = Article.objects.get(id=1)
->>> test_art.headline
-u'Test headline'
-
-You can create a form over a subset of the available fields
-by specifying a 'fields' argument to form_for_instance.
->>> class PartialArticleForm(ModelForm):
-... class Meta:
-... model = Article
-... fields=('headline', 'slug', 'pub_date')
->>> f = PartialArticleForm({'headline': u'New headline', 'slug': 'new-headline', 'pub_date': u'1988-01-04'}, auto_id=False, instance=art)
->>> print f.as_ul()
-<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" /></li>
-<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" /></li>
-<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" /></li>
->>> f.is_valid()
-True
->>> new_art = f.save()
->>> new_art.id
-1
->>> new_art = Article.objects.get(id=1)
->>> new_art.headline
-u'New headline'
-
-Add some categories and test the many-to-many form output.
->>> new_art.categories.all()
-[]
->>> new_art.categories.add(Category.objects.get(name='Entertainment'))
->>> new_art.categories.all()
-[<Category: Entertainment>]
->>> class TestArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = TestArticleForm(auto_id=False, instance=new_art)
->>> print f.as_ul()
-<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" /></li>
-<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" /></li>
-<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" /></li>
-<li>Writer: <select name="writer">
-<option value="">---------</option>
-<option value="..." selected="selected">Mike Royko</option>
-<option value="...">Bob Woodward</option>
-</select></li>
-<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
-<li>Status: <select name="status">
-<option value="" selected="selected">---------</option>
-<option value="1">Draft</option>
-<option value="2">Pending</option>
-<option value="3">Live</option>
-</select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="1" selected="selected">Entertainment</option>
-<option value="2">It&#39;s a test</option>
-<option value="3">Third test</option>
-</select> Hold down "Control", or "Command" on a Mac, to select more than one.</li>
-
-Initial values can be provided for model forms
->>> f = TestArticleForm(auto_id=False, initial={'headline': 'Your headline here', 'categories': ['1','2']})
->>> print f.as_ul()
-<li>Headline: <input type="text" name="headline" value="Your headline here" maxlength="50" /></li>
-<li>Slug: <input type="text" name="slug" maxlength="50" /></li>
-<li>Pub date: <input type="text" name="pub_date" /></li>
-<li>Writer: <select name="writer">
-<option value="" selected="selected">---------</option>
-<option value="...">Mike Royko</option>
-<option value="...">Bob Woodward</option>
-</select></li>
-<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
-<li>Status: <select name="status">
-<option value="" selected="selected">---------</option>
-<option value="1">Draft</option>
-<option value="2">Pending</option>
-<option value="3">Live</option>
-</select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="1" selected="selected">Entertainment</option>
-<option value="2" selected="selected">It&#39;s a test</option>
-<option value="3">Third test</option>
-</select> Hold down "Control", or "Command" on a Mac, to select more than one.</li>
-
->>> f = TestArticleForm({'headline': u'New headline', 'slug': u'new-headline', 'pub_date': u'1988-01-04',
-... 'writer': unicode(w_royko.pk), 'article': u'Hello.', 'categories': [u'1', u'2']}, instance=new_art)
->>> new_art = f.save()
->>> new_art.id
-1
->>> new_art = Article.objects.get(id=1)
->>> new_art.categories.order_by('name')
-[<Category: Entertainment>, <Category: It's a test>]
-
-Now, submit form data with no categories. This deletes the existing categories.
->>> f = TestArticleForm({'headline': u'New headline', 'slug': u'new-headline', 'pub_date': u'1988-01-04',
-... 'writer': unicode(w_royko.pk), 'article': u'Hello.'}, instance=new_art)
->>> new_art = f.save()
->>> new_art.id
-1
->>> new_art = Article.objects.get(id=1)
->>> new_art.categories.all()
-[]
-
-Create a new article, with categories, via the form.
->>> class ArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = ArticleForm({'headline': u'The walrus was Paul', 'slug': u'walrus-was-paul', 'pub_date': u'1967-11-01',
-... 'writer': unicode(w_royko.pk), 'article': u'Test.', 'categories': [u'1', u'2']})
->>> new_art = f.save()
->>> new_art.id
-2
->>> new_art = Article.objects.get(id=2)
->>> new_art.categories.order_by('name')
-[<Category: Entertainment>, <Category: It's a test>]
-
-Create a new article, with no categories, via the form.
->>> class ArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = ArticleForm({'headline': u'The walrus was Paul', 'slug': u'walrus-was-paul', 'pub_date': u'1967-11-01',
-... 'writer': unicode(w_royko.pk), 'article': u'Test.'})
->>> new_art = f.save()
->>> new_art.id
-3
->>> new_art = Article.objects.get(id=3)
->>> new_art.categories.all()
-[]
-
-Create a new article, with categories, via the form, but use commit=False.
-The m2m data won't be saved until save_m2m() is invoked on the form.
->>> class ArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = ArticleForm({'headline': u'The walrus was Paul', 'slug': 'walrus-was-paul', 'pub_date': u'1967-11-01',
-... 'writer': unicode(w_royko.pk), 'article': u'Test.', 'categories': [u'1', u'2']})
->>> new_art = f.save(commit=False)
-
-# Manually save the instance
->>> new_art.save()
->>> new_art.id
-4
-
-# The instance doesn't have m2m data yet
->>> new_art = Article.objects.get(id=4)
->>> new_art.categories.all()
-[]
-
-# Save the m2m data on the form
->>> f.save_m2m()
->>> new_art.categories.order_by('name')
-[<Category: Entertainment>, <Category: It's a test>]
-
-Here, we define a custom ModelForm. Because it happens to have the same fields as
-the Category model, we can just call the form's save() to apply its changes to an
-existing Category instance.
->>> class ShortCategory(ModelForm):
-... name = CharField(max_length=5)
-... slug = CharField(max_length=5)
-... url = CharField(max_length=3)
->>> cat = Category.objects.get(name='Third test')
->>> cat
-<Category: Third test>
->>> cat.id
-3
->>> form = ShortCategory({'name': 'Third', 'slug': 'third', 'url': '3rd'}, instance=cat)
->>> form.save()
-<Category: Third>
->>> Category.objects.get(id=3)
-<Category: Third>
-
-Here, we demonstrate that choices for a ForeignKey ChoiceField are determined
-at runtime, based on the data in the database when the form is displayed, not
-the data in the database when the form is instantiated.
->>> class ArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = ArticleForm(auto_id=False)
->>> print f.as_ul()
-<li>Headline: <input type="text" name="headline" maxlength="50" /></li>
-<li>Slug: <input type="text" name="slug" maxlength="50" /></li>
-<li>Pub date: <input type="text" name="pub_date" /></li>
-<li>Writer: <select name="writer">
-<option value="" selected="selected">---------</option>
-<option value="...">Mike Royko</option>
-<option value="...">Bob Woodward</option>
-</select></li>
-<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
-<li>Status: <select name="status">
-<option value="" selected="selected">---------</option>
-<option value="1">Draft</option>
-<option value="2">Pending</option>
-<option value="3">Live</option>
-</select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="1">Entertainment</option>
-<option value="2">It&#39;s a test</option>
-<option value="3">Third</option>
-</select> Hold down "Control", or "Command" on a Mac, to select more than one.</li>
->>> Category.objects.create(name='Fourth', url='4th')
-<Category: Fourth>
->>> Writer.objects.create(name='Carl Bernstein')
-<Writer: Carl Bernstein>
->>> print f.as_ul()
-<li>Headline: <input type="text" name="headline" maxlength="50" /></li>
-<li>Slug: <input type="text" name="slug" maxlength="50" /></li>
-<li>Pub date: <input type="text" name="pub_date" /></li>
-<li>Writer: <select name="writer">
-<option value="" selected="selected">---------</option>
-<option value="...">Mike Royko</option>
-<option value="...">Bob Woodward</option>
-<option value="...">Carl Bernstein</option>
-</select></li>
-<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
-<li>Status: <select name="status">
-<option value="" selected="selected">---------</option>
-<option value="1">Draft</option>
-<option value="2">Pending</option>
-<option value="3">Live</option>
-</select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="1">Entertainment</option>
-<option value="2">It&#39;s a test</option>
-<option value="3">Third</option>
-<option value="4">Fourth</option>
-</select> Hold down "Control", or "Command" on a Mac, to select more than one.</li>
-
-# ModelChoiceField ############################################################
-
->>> from django.forms import ModelChoiceField, ModelMultipleChoiceField
-
->>> f = ModelChoiceField(Category.objects.all())
->>> list(f.choices)
-[(u'', u'---------'), (1, u'Entertainment'), (2, u"It's a test"), (3, u'Third'), (4, u'Fourth')]
->>> f.clean('')
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
->>> f.clean(None)
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
->>> f.clean(0)
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
->>> f.clean(3)
-<Category: Third>
->>> f.clean(2)
-<Category: It's a test>
-
-# Add a Category object *after* the ModelChoiceField has already been
-# instantiated. This proves clean() checks the database during clean() rather
-# than caching it at time of instantiation.
->>> Category.objects.create(name='Fifth', url='5th')
-<Category: Fifth>
->>> f.clean(5)
-<Category: Fifth>
-
-# Delete a Category object *after* the ModelChoiceField has already been
-# instantiated. This proves clean() checks the database during clean() rather
-# than caching it at time of instantiation.
->>> Category.objects.get(url='5th').delete()
->>> f.clean(5)
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
-
->>> f = ModelChoiceField(Category.objects.filter(pk=1), required=False)
->>> print f.clean('')
-None
->>> f.clean('')
->>> f.clean('1')
-<Category: Entertainment>
->>> f.clean('100')
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
-
-# queryset can be changed after the field is created.
->>> f.queryset = Category.objects.exclude(name='Fourth')
->>> list(f.choices)
-[(u'', u'---------'), (1, u'Entertainment'), (2, u"It's a test"), (3, u'Third')]
->>> f.clean(3)
-<Category: Third>
->>> f.clean(4)
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
-
-# check that we can safely iterate choices repeatedly
->>> gen_one = list(f.choices)
->>> gen_two = f.choices
->>> gen_one[2]
-(2L, u"It's a test")
->>> list(gen_two)
-[(u'', u'---------'), (1L, u'Entertainment'), (2L, u"It's a test"), (3L, u'Third')]
-
-# check that we can override the label_from_instance method to print custom labels (#4620)
->>> f.queryset = Category.objects.all()
->>> f.label_from_instance = lambda obj: "category " + str(obj)
->>> list(f.choices)
-[(u'', u'---------'), (1L, 'category Entertainment'), (2L, "category It's a test"), (3L, 'category Third'), (4L, 'category Fourth')]
-
-# ModelMultipleChoiceField ####################################################
-
->>> f = ModelMultipleChoiceField(Category.objects.all())
->>> list(f.choices)
-[(1, u'Entertainment'), (2, u"It's a test"), (3, u'Third'), (4, u'Fourth')]
->>> f.clean(None)
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
->>> f.clean([])
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
->>> f.clean([1])
-[<Category: Entertainment>]
->>> f.clean([2])
-[<Category: It's a test>]
->>> f.clean(['1'])
-[<Category: Entertainment>]
->>> f.clean(['1', '2'])
-[<Category: Entertainment>, <Category: It's a test>]
->>> f.clean([1, '2'])
-[<Category: Entertainment>, <Category: It's a test>]
->>> f.clean((1, '2'))
-[<Category: Entertainment>, <Category: It's a test>]
->>> f.clean(['100'])
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 100 is not one of the available choices.']
->>> f.clean('hello')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a list of values.']
->>> f.clean(['fail'])
-Traceback (most recent call last):
-...
-ValidationError: [u'"fail" is not a valid value for a primary key.']
-
-# Add a Category object *after* the ModelMultipleChoiceField has already been
-# instantiated. This proves clean() checks the database during clean() rather
-# than caching it at time of instantiation.
->>> Category.objects.create(id=6, name='Sixth', url='6th')
-<Category: Sixth>
->>> f.clean([6])
-[<Category: Sixth>]
-
-# Delete a Category object *after* the ModelMultipleChoiceField has already been
-# instantiated. This proves clean() checks the database during clean() rather
-# than caching it at time of instantiation.
->>> Category.objects.get(url='6th').delete()
->>> f.clean([6])
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 6 is not one of the available choices.']
-
->>> f = ModelMultipleChoiceField(Category.objects.all(), required=False)
->>> f.clean([])
-[]
->>> f.clean(())
-[]
->>> f.clean(['10'])
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 10 is not one of the available choices.']
->>> f.clean(['3', '10'])
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 10 is not one of the available choices.']
->>> f.clean(['1', '10'])
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 10 is not one of the available choices.']
-
-# queryset can be changed after the field is created.
->>> f.queryset = Category.objects.exclude(name='Fourth')
->>> list(f.choices)
-[(1, u'Entertainment'), (2, u"It's a test"), (3, u'Third')]
->>> f.clean([3])
-[<Category: Third>]
->>> f.clean([4])
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 4 is not one of the available choices.']
->>> f.clean(['3', '4'])
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 4 is not one of the available choices.']
-
->>> f.queryset = Category.objects.all()
->>> f.label_from_instance = lambda obj: "multicategory " + str(obj)
->>> list(f.choices)
-[(1L, 'multicategory Entertainment'), (2L, "multicategory It's a test"), (3L, 'multicategory Third'), (4L, 'multicategory Fourth')]
-
-# OneToOneField ###############################################################
-
->>> class ImprovedArticleForm(ModelForm):
-... class Meta:
-... model = ImprovedArticle
->>> ImprovedArticleForm.base_fields.keys()
-['article']
-
->>> class ImprovedArticleWithParentLinkForm(ModelForm):
-... class Meta:
-... model = ImprovedArticleWithParentLink
->>> ImprovedArticleWithParentLinkForm.base_fields.keys()
-[]
-
->>> bw = BetterWriter(name=u'Joe Better', score=10)
->>> bw.save()
->>> sorted(model_to_dict(bw).keys())
-['id', 'name', 'score', 'writer_ptr']
-
->>> class BetterWriterForm(ModelForm):
-... class Meta:
-... model = BetterWriter
->>> form = BetterWriterForm({'name': 'Some Name', 'score': 12})
->>> form.is_valid()
-True
->>> bw2 = form.save()
->>> bw2.delete()
-
-
->>> class WriterProfileForm(ModelForm):
-... class Meta:
-... model = WriterProfile
->>> form = WriterProfileForm()
->>> print form.as_p()
-<p><label for="id_writer">Writer:</label> <select name="writer" id="id_writer">
-<option value="" selected="selected">---------</option>
-<option value="...">Mike Royko</option>
-<option value="...">Bob Woodward</option>
-<option value="...">Carl Bernstein</option>
-<option value="...">Joe Better</option>
-</select></p>
-<p><label for="id_age">Age:</label> <input type="text" name="age" id="id_age" /></p>
-
->>> data = {
-... 'writer': unicode(w_woodward.pk),
-... 'age': u'65',
-... }
->>> form = WriterProfileForm(data)
->>> instance = form.save()
->>> instance
-<WriterProfile: Bob Woodward is 65>
-
->>> form = WriterProfileForm(instance=instance)
->>> print form.as_p()
-<p><label for="id_writer">Writer:</label> <select name="writer" id="id_writer">
-<option value="">---------</option>
-<option value="...">Mike Royko</option>
-<option value="..." selected="selected">Bob Woodward</option>
-<option value="...">Carl Bernstein</option>
-<option value="...">Joe Better</option>
-</select></p>
-<p><label for="id_age">Age:</label> <input type="text" name="age" value="65" id="id_age" /></p>
-
-# PhoneNumberField ############################################################
-
->>> class PhoneNumberForm(ModelForm):
-... class Meta:
-... model = PhoneNumber
->>> f = PhoneNumberForm({'phone': '(312) 555-1212', 'description': 'Assistance'})
->>> f.is_valid()
-True
->>> f.cleaned_data['phone']
-u'312-555-1212'
->>> f.cleaned_data['description']
-u'Assistance'
-
-# FileField ###################################################################
-
-# File forms.
-
->>> class TextFileForm(ModelForm):
-... class Meta:
-... model = TextFile
-
-# Test conditions when files is either not given or empty.
-
->>> f = TextFileForm(data={'description': u'Assistance'})
->>> f.is_valid()
-False
->>> f = TextFileForm(data={'description': u'Assistance'}, files={})
->>> f.is_valid()
-False
-
-# Upload a file and ensure it all works as expected.
-
->>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': SimpleUploadedFile('test1.txt', 'hello world')})
->>> f.is_valid()
-True
->>> type(f.cleaned_data['file'])
-<class 'django.core.files.uploadedfile.SimpleUploadedFile'>
->>> instance = f.save()
->>> instance.file
-<FieldFile: tests/test1.txt>
-
->>> instance.file.delete()
-
->>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': SimpleUploadedFile('test1.txt', 'hello world')})
->>> f.is_valid()
-True
->>> type(f.cleaned_data['file'])
-<class 'django.core.files.uploadedfile.SimpleUploadedFile'>
->>> instance = f.save()
->>> instance.file
-<FieldFile: tests/test1.txt>
-
-# Check if the max_length attribute has been inherited from the model.
->>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': SimpleUploadedFile('test-maxlength.txt', 'hello world')})
->>> f.is_valid()
-False
-
-# Edit an instance that already has the file defined in the model. This will not
-# save the file again, but leave it exactly as it is.
-
->>> f = TextFileForm(data={'description': u'Assistance'}, instance=instance)
->>> f.is_valid()
-True
->>> f.cleaned_data['file']
-<FieldFile: tests/test1.txt>
->>> instance = f.save()
->>> instance.file
-<FieldFile: tests/test1.txt>
-
-# Delete the current file since this is not done by Django.
->>> instance.file.delete()
-
-# Override the file by uploading a new one.
-
->>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': SimpleUploadedFile('test2.txt', 'hello world')}, instance=instance)
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.file
-<FieldFile: tests/test2.txt>
-
-# Delete the current file since this is not done by Django.
->>> instance.file.delete()
-
->>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': SimpleUploadedFile('test2.txt', 'hello world')})
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.file
-<FieldFile: tests/test2.txt>
-
-# Delete the current file since this is not done by Django.
->>> instance.file.delete()
-
->>> instance.delete()
-
-# Test the non-required FileField
->>> f = TextFileForm(data={'description': u'Assistance'})
->>> f.fields['file'].required = False
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.file
-<FieldFile: None>
-
->>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': SimpleUploadedFile('test3.txt', 'hello world')}, instance=instance)
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.file
-<FieldFile: tests/test3.txt>
-
-# Instance can be edited w/out re-uploading the file and existing file should be preserved.
-
->>> f = TextFileForm(data={'description': u'New Description'}, instance=instance)
->>> f.fields['file'].required = False
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.description
-u'New Description'
->>> instance.file
-<FieldFile: tests/test3.txt>
-
-# Delete the current file since this is not done by Django.
->>> instance.file.delete()
->>> instance.delete()
-
->>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': SimpleUploadedFile('test3.txt', 'hello world')})
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.file
-<FieldFile: tests/test3.txt>
-
-# Delete the current file since this is not done by Django.
->>> instance.file.delete()
->>> instance.delete()
-
-# BigIntegerField ################################################################
->>> class BigIntForm(forms.ModelForm):
-... class Meta:
-... model = BigInt
-...
->>> bif = BigIntForm({'biggie': '-9223372036854775808'})
->>> bif.is_valid()
-True
->>> bif = BigIntForm({'biggie': '-9223372036854775809'})
->>> bif.is_valid()
-False
->>> bif.errors
-{'biggie': [u'Ensure this value is greater than or equal to -9223372036854775808.']}
->>> bif = BigIntForm({'biggie': '9223372036854775807'})
->>> bif.is_valid()
-True
->>> bif = BigIntForm({'biggie': '9223372036854775808'})
->>> bif.is_valid()
-False
->>> bif.errors
-{'biggie': [u'Ensure this value is less than or equal to 9223372036854775807.']}
-"""}
-
-if test_images:
- __test__['API_TESTS'] += """
-# ImageField ###################################################################
-
-# ImageField and FileField are nearly identical, but they differ slighty when
-# it comes to validation. This specifically tests that #6302 is fixed for
-# both file fields and image fields.
-
->>> class ImageFileForm(ModelForm):
-... class Meta:
-... model = ImageFile
-
->>> image_data = open(os.path.join(os.path.dirname(__file__), "test.png"), 'rb').read()
->>> image_data2 = open(os.path.join(os.path.dirname(__file__), "test2.png"), 'rb').read()
-
->>> f = ImageFileForm(data={'description': u'An image'}, files={'image': SimpleUploadedFile('test.png', image_data)})
->>> f.is_valid()
-True
->>> type(f.cleaned_data['image'])
-<class 'django.core.files.uploadedfile.SimpleUploadedFile'>
->>> instance = f.save()
->>> instance.image
-<...FieldFile: tests/test.png>
->>> instance.width
-16
->>> instance.height
-16
-
-# Delete the current file since this is not done by Django, but don't save
-# because the dimension fields are not null=True.
->>> instance.image.delete(save=False)
-
->>> f = ImageFileForm(data={'description': u'An image'}, files={'image': SimpleUploadedFile('test.png', image_data)})
->>> f.is_valid()
-True
->>> type(f.cleaned_data['image'])
-<class 'django.core.files.uploadedfile.SimpleUploadedFile'>
->>> instance = f.save()
->>> instance.image
-<...FieldFile: tests/test.png>
->>> instance.width
-16
->>> instance.height
-16
-
-# Edit an instance that already has the (required) image defined in the model. This will not
-# save the image again, but leave it exactly as it is.
-
->>> f = ImageFileForm(data={'description': u'Look, it changed'}, instance=instance)
->>> f.is_valid()
-True
->>> f.cleaned_data['image']
-<...FieldFile: tests/test.png>
->>> instance = f.save()
->>> instance.image
-<...FieldFile: tests/test.png>
->>> instance.height
-16
->>> instance.width
-16
-
-# Delete the current file since this is not done by Django, but don't save
-# because the dimension fields are not null=True.
->>> instance.image.delete(save=False)
-
-# Override the file by uploading a new one.
-
->>> f = ImageFileForm(data={'description': u'Changed it'}, files={'image': SimpleUploadedFile('test2.png', image_data2)}, instance=instance)
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.image
-<...FieldFile: tests/test2.png>
->>> instance.height
-32
->>> instance.width
-48
-
-# Delete the current file since this is not done by Django, but don't save
-# because the dimension fields are not null=True.
->>> instance.image.delete(save=False)
->>> instance.delete()
-
->>> f = ImageFileForm(data={'description': u'Changed it'}, files={'image': SimpleUploadedFile('test2.png', image_data2)})
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.image
-<...FieldFile: tests/test2.png>
->>> instance.height
-32
->>> instance.width
-48
-
-# Delete the current file since this is not done by Django, but don't save
-# because the dimension fields are not null=True.
->>> instance.image.delete(save=False)
->>> instance.delete()
-
-# Test the non-required ImageField
-
->>> class OptionalImageFileForm(ModelForm):
-... class Meta:
-... model = OptionalImageFile
-
->>> f = OptionalImageFileForm(data={'description': u'Test'})
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.image
-<...FieldFile: None>
->>> instance.width
->>> instance.height
-
->>> f = OptionalImageFileForm(data={'description': u'And a final one'}, files={'image': SimpleUploadedFile('test3.png', image_data)}, instance=instance)
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.image
-<...FieldFile: tests/test3.png>
->>> instance.width
-16
->>> instance.height
-16
-
-# Editing the instance without re-uploading the image should not affect the image or its width/height properties
->>> f = OptionalImageFileForm(data={'description': u'New Description'}, instance=instance)
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.description
-u'New Description'
->>> instance.image
-<...FieldFile: tests/test3.png>
->>> instance.width
-16
->>> instance.height
-16
-
-# Delete the current file since this is not done by Django.
->>> instance.image.delete()
->>> instance.delete()
-
->>> f = OptionalImageFileForm(data={'description': u'And a final one'}, files={'image': SimpleUploadedFile('test4.png', image_data2)})
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.image
-<...FieldFile: tests/test4.png>
->>> instance.width
-48
->>> instance.height
-32
->>> instance.delete()
-
-# Test callable upload_to behavior that's dependent on the value of another field in the model
->>> f = ImageFileForm(data={'description': u'And a final one', 'path': 'foo'}, files={'image': SimpleUploadedFile('test4.png', image_data)})
->>> f.is_valid()
-True
->>> instance = f.save()
->>> instance.image
-<...FieldFile: foo/test4.png>
->>> instance.delete()
-"""
-
-__test__['API_TESTS'] += """
-
-# Media on a ModelForm ########################################################
-
-# Similar to a regular Form class you can define custom media to be used on
-# the ModelForm.
-
->>> class ModelFormWithMedia(ModelForm):
-... class Media:
-... js = ('/some/form/javascript',)
-... css = {
-... 'all': ('/some/form/css',)
-... }
-... class Meta:
-... model = PhoneNumber
->>> f = ModelFormWithMedia()
->>> print f.media
-<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/some/form/javascript"></script>
-
->>> class CommaSeparatedIntegerForm(ModelForm):
-... class Meta:
-... model = CommaSeparatedInteger
-
->>> f = CommaSeparatedIntegerForm({'field': '1,2,3'})
->>> f.is_valid()
-True
->>> f.cleaned_data
-{'field': u'1,2,3'}
->>> f = CommaSeparatedIntegerForm({'field': '1a,2'})
->>> f.errors
-{'field': [u'Enter only digits separated by commas.']}
->>> f = CommaSeparatedIntegerForm({'field': ',,,,'})
->>> f.is_valid()
-True
->>> f.cleaned_data
-{'field': u',,,,'}
->>> f = CommaSeparatedIntegerForm({'field': '1.2'})
->>> f.errors
-{'field': [u'Enter only digits separated by commas.']}
->>> f = CommaSeparatedIntegerForm({'field': '1,a,2'})
->>> f.errors
-{'field': [u'Enter only digits separated by commas.']}
->>> f = CommaSeparatedIntegerForm({'field': '1,,2'})
->>> f.is_valid()
-True
->>> f.cleaned_data
-{'field': u'1,,2'}
->>> f = CommaSeparatedIntegerForm({'field': '1'})
->>> f.is_valid()
-True
->>> f.cleaned_data
-{'field': u'1'}
-
-This Price instance generated by this form is not valid because the quantity
-field is required, but the form is valid because the field is excluded from
-the form. This is for backwards compatibility.
-
->>> class PriceForm(ModelForm):
-... class Meta:
-... model = Price
-... exclude = ('quantity',)
->>> form = PriceForm({'price': '6.00'})
->>> form.is_valid()
-True
->>> price = form.save(commit=False)
->>> price.full_clean()
-Traceback (most recent call last):
- ...
-ValidationError: {'quantity': [u'This field cannot be null.']}
-
-The form should not validate fields that it doesn't contain even if they are
-specified using 'fields', not 'exclude'.
-... class Meta:
-... model = Price
-... fields = ('price',)
->>> form = PriceForm({'price': '6.00'})
->>> form.is_valid()
-True
-
-The form should still have an instance of a model that is not complete and
-not saved into a DB yet.
-
->>> form.instance.price
-Decimal('6.00')
->>> form.instance.quantity is None
-True
->>> form.instance.pk is None
-True
-
-# Choices on CharField and IntegerField
->>> class ArticleForm(ModelForm):
-... class Meta:
-... model = Article
->>> f = ArticleForm()
->>> f.fields['status'].clean('42')
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. 42 is not one of the available choices.']
-
->>> class ArticleStatusForm(ModelForm):
-... class Meta:
-... model = ArticleStatus
->>> f = ArticleStatusForm()
->>> f.fields['status'].clean('z')
-Traceback (most recent call last):
-...
-ValidationError: [u'Select a valid choice. z is not one of the available choices.']
-
-# Foreign keys which use to_field #############################################
-
->>> apple = Inventory.objects.create(barcode=86, name='Apple')
->>> pear = Inventory.objects.create(barcode=22, name='Pear')
->>> core = Inventory.objects.create(barcode=87, name='Core', parent=apple)
-
->>> field = ModelChoiceField(Inventory.objects.all(), to_field_name='barcode')
->>> for choice in field.choices:
-... print choice
-(u'', u'---------')
-(86, u'Apple')
-(22, u'Pear')
-(87, u'Core')
-
->>> class InventoryForm(ModelForm):
-... class Meta:
-... model = Inventory
->>> form = InventoryForm(instance=core)
->>> print form['parent']
-<select name="parent" id="id_parent">
-<option value="">---------</option>
-<option value="86" selected="selected">Apple</option>
-<option value="22">Pear</option>
-<option value="87">Core</option>
-</select>
-
->>> data = model_to_dict(core)
->>> data['parent'] = '22'
->>> form = InventoryForm(data=data, instance=core)
->>> core = form.save()
->>> core.parent
-<Inventory: Pear>
-
->>> class CategoryForm(ModelForm):
-... description = forms.CharField()
-... class Meta:
-... model = Category
-... fields = ['description', 'url']
-
->>> CategoryForm.base_fields.keys()
-['description', 'url']
-
->>> print CategoryForm()
-<tr><th><label for="id_description">Description:</label></th><td><input type="text" name="description" id="id_description" /></td></tr>
-<tr><th><label for="id_url">The URL:</label></th><td><input id="id_url" type="text" name="url" maxlength="40" /></td></tr>
-
-# Model field that returns None to exclude itself with explicit fields ########
-
->>> class CustomFieldForExclusionForm(ModelForm):
-... class Meta:
-... model = CustomFieldForExclusionModel
-... fields = ['name', 'markup']
-
->>> CustomFieldForExclusionForm.base_fields.keys()
-['name']
-
->>> print CustomFieldForExclusionForm()
-<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" type="text" name="name" maxlength="10" /></td></tr>
-
-# Clean up
->>> import shutil
->>> shutil.rmtree(temp_storage_dir)
-"""
diff --git a/parts/django/tests/modeltests/model_forms/test.png b/parts/django/tests/modeltests/model_forms/test.png
deleted file mode 100644
index 4f17cd0..0000000
--- a/parts/django/tests/modeltests/model_forms/test.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/modeltests/model_forms/test2.png b/parts/django/tests/modeltests/model_forms/test2.png
deleted file mode 100644
index 10702f7..0000000
--- a/parts/django/tests/modeltests/model_forms/test2.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/modeltests/model_forms/tests.py b/parts/django/tests/modeltests/model_forms/tests.py
deleted file mode 100644
index c5647c7..0000000
--- a/parts/django/tests/modeltests/model_forms/tests.py
+++ /dev/null
@@ -1,185 +0,0 @@
-import datetime
-from django.test import TestCase
-from django import forms
-from models import Category, Writer, Book, DerivedBook, Post
-from mforms import (ProductForm, PriceForm, BookForm, DerivedBookForm,
- ExplicitPKForm, PostForm, DerivedPostForm, CustomWriterForm)
-
-
-class IncompleteCategoryFormWithFields(forms.ModelForm):
- """
- A form that replaces the model's url field with a custom one. This should
- prevent the model field's validation from being called.
- """
- url = forms.CharField(required=False)
-
- class Meta:
- fields = ('name', 'slug')
- model = Category
-
-class IncompleteCategoryFormWithExclude(forms.ModelForm):
- """
- A form that replaces the model's url field with a custom one. This should
- prevent the model field's validation from being called.
- """
- url = forms.CharField(required=False)
-
- class Meta:
- exclude = ['url']
- model = Category
-
-
-class ValidationTest(TestCase):
- def test_validates_with_replaced_field_not_specified(self):
- form = IncompleteCategoryFormWithFields(data={'name': 'some name', 'slug': 'some-slug'})
- assert form.is_valid()
-
- def test_validates_with_replaced_field_excluded(self):
- form = IncompleteCategoryFormWithExclude(data={'name': 'some name', 'slug': 'some-slug'})
- assert form.is_valid()
-
- def test_notrequired_overrides_notblank(self):
- form = CustomWriterForm({})
- assert form.is_valid()
-
-# unique/unique_together validation
-class UniqueTest(TestCase):
- def setUp(self):
- self.writer = Writer.objects.create(name='Mike Royko')
-
- def test_simple_unique(self):
- form = ProductForm({'slug': 'teddy-bear-blue'})
- self.assertTrue(form.is_valid())
- obj = form.save()
- form = ProductForm({'slug': 'teddy-bear-blue'})
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['slug'], [u'Product with this Slug already exists.'])
- form = ProductForm({'slug': 'teddy-bear-blue'}, instance=obj)
- self.assertTrue(form.is_valid())
-
- def test_unique_together(self):
- """ModelForm test of unique_together constraint"""
- form = PriceForm({'price': '6.00', 'quantity': '1'})
- self.assertTrue(form.is_valid())
- form.save()
- form = PriceForm({'price': '6.00', 'quantity': '1'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['__all__'], [u'Price with this Price and Quantity already exists.'])
-
- def test_unique_null(self):
- title = 'I May Be Wrong But I Doubt It'
- form = BookForm({'title': title, 'author': self.writer.pk})
- self.assertTrue(form.is_valid())
- form.save()
- form = BookForm({'title': title, 'author': self.writer.pk})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['__all__'], [u'Book with this Title and Author already exists.'])
- form = BookForm({'title': title})
- self.assertTrue(form.is_valid())
- form.save()
- form = BookForm({'title': title})
- self.assertTrue(form.is_valid())
-
- def test_inherited_unique(self):
- title = 'Boss'
- Book.objects.create(title=title, author=self.writer, special_id=1)
- form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'special_id': u'1', 'isbn': '12345'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['special_id'], [u'Book with this Special id already exists.'])
-
- def test_inherited_unique_together(self):
- title = 'Boss'
- form = BookForm({'title': title, 'author': self.writer.pk})
- self.assertTrue(form.is_valid())
- form.save()
- form = DerivedBookForm({'title': title, 'author': self.writer.pk, 'isbn': '12345'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['__all__'], [u'Book with this Title and Author already exists.'])
-
- def test_abstract_inherited_unique(self):
- title = 'Boss'
- isbn = '12345'
- dbook = DerivedBook.objects.create(title=title, author=self.writer, isbn=isbn)
- form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'isbn': isbn})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['isbn'], [u'Derived book with this Isbn already exists.'])
-
- def test_abstract_inherited_unique_together(self):
- title = 'Boss'
- isbn = '12345'
- dbook = DerivedBook.objects.create(title=title, author=self.writer, isbn=isbn)
- form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'isbn': '9876', 'suffix1': u'0', 'suffix2': u'0'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['__all__'], [u'Derived book with this Suffix1 and Suffix2 already exists.'])
-
- def test_explicitpk_unspecified(self):
- """Test for primary_key being in the form and failing validation."""
- form = ExplicitPKForm({'key': u'', 'desc': u'' })
- self.assertFalse(form.is_valid())
-
- def test_explicitpk_unique(self):
- """Ensure keys and blank character strings are tested for uniqueness."""
- form = ExplicitPKForm({'key': u'key1', 'desc': u''})
- self.assertTrue(form.is_valid())
- form.save()
- form = ExplicitPKForm({'key': u'key1', 'desc': u''})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 3)
- self.assertEqual(form.errors['__all__'], [u'Explicit pk with this Key and Desc already exists.'])
- self.assertEqual(form.errors['desc'], [u'Explicit pk with this Desc already exists.'])
- self.assertEqual(form.errors['key'], [u'Explicit pk with this Key already exists.'])
-
- def test_unique_for_date(self):
- p = Post.objects.create(title="Django 1.0 is released",
- slug="Django 1.0", subtitle="Finally", posted=datetime.date(2008, 9, 3))
- form = PostForm({'title': "Django 1.0 is released", 'posted': '2008-09-03'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['title'], [u'Title must be unique for Posted date.'])
- form = PostForm({'title': "Work on Django 1.1 begins", 'posted': '2008-09-03'})
- self.assertTrue(form.is_valid())
- form = PostForm({'title': "Django 1.0 is released", 'posted': '2008-09-04'})
- self.assertTrue(form.is_valid())
- form = PostForm({'slug': "Django 1.0", 'posted': '2008-01-01'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['slug'], [u'Slug must be unique for Posted year.'])
- form = PostForm({'subtitle': "Finally", 'posted': '2008-09-30'})
- self.assertFalse(form.is_valid())
- self.assertEqual(form.errors['subtitle'], [u'Subtitle must be unique for Posted month.'])
- form = PostForm({'subtitle': "Finally", "title": "Django 1.0 is released",
- "slug": "Django 1.0", 'posted': '2008-09-03'}, instance=p)
- self.assertTrue(form.is_valid())
- form = PostForm({'title': "Django 1.0 is released"})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['posted'], [u'This field is required.'])
-
- def test_inherited_unique_for_date(self):
- p = Post.objects.create(title="Django 1.0 is released",
- slug="Django 1.0", subtitle="Finally", posted=datetime.date(2008, 9, 3))
- form = DerivedPostForm({'title': "Django 1.0 is released", 'posted': '2008-09-03'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['title'], [u'Title must be unique for Posted date.'])
- form = DerivedPostForm({'title': "Work on Django 1.1 begins", 'posted': '2008-09-03'})
- self.assertTrue(form.is_valid())
- form = DerivedPostForm({'title': "Django 1.0 is released", 'posted': '2008-09-04'})
- self.assertTrue(form.is_valid())
- form = DerivedPostForm({'slug': "Django 1.0", 'posted': '2008-01-01'})
- self.assertFalse(form.is_valid())
- self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['slug'], [u'Slug must be unique for Posted year.'])
- form = DerivedPostForm({'subtitle': "Finally", 'posted': '2008-09-30'})
- self.assertFalse(form.is_valid())
- self.assertEqual(form.errors['subtitle'], [u'Subtitle must be unique for Posted month.'])
- form = DerivedPostForm({'subtitle': "Finally", "title": "Django 1.0 is released",
- "slug": "Django 1.0", 'posted': '2008-09-03'}, instance=p)
- self.assertTrue(form.is_valid())
-
diff --git a/parts/django/tests/modeltests/model_formsets/__init__.py b/parts/django/tests/modeltests/model_formsets/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/model_formsets/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/model_formsets/models.py b/parts/django/tests/modeltests/model_formsets/models.py
deleted file mode 100644
index 3eca696..0000000
--- a/parts/django/tests/modeltests/model_formsets/models.py
+++ /dev/null
@@ -1,193 +0,0 @@
-import datetime
-from django.db import models
-
-class Author(models.Model):
- name = models.CharField(max_length=100)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class BetterAuthor(Author):
- write_speed = models.IntegerField()
-
-class Book(models.Model):
- author = models.ForeignKey(Author)
- title = models.CharField(max_length=100)
-
- class Meta:
- unique_together = (
- ('author', 'title'),
- )
- ordering = ['id']
-
- def __unicode__(self):
- return self.title
-
-class BookWithCustomPK(models.Model):
- my_pk = models.DecimalField(max_digits=5, decimal_places=0, primary_key=True)
- author = models.ForeignKey(Author)
- title = models.CharField(max_length=100)
-
- def __unicode__(self):
- return u'%s: %s' % (self.my_pk, self.title)
-
-class Editor(models.Model):
- name = models.CharField(max_length=100)
-
-class BookWithOptionalAltEditor(models.Model):
- author = models.ForeignKey(Author)
- # Optional secondary author
- alt_editor = models.ForeignKey(Editor, blank=True, null=True)
- title = models.CharField(max_length=100)
-
- class Meta:
- unique_together = (
- ('author', 'title', 'alt_editor'),
- )
-
- def __unicode__(self):
- return self.title
-
-class AlternateBook(Book):
- notes = models.CharField(max_length=100)
-
- def __unicode__(self):
- return u'%s - %s' % (self.title, self.notes)
-
-class AuthorMeeting(models.Model):
- name = models.CharField(max_length=100)
- authors = models.ManyToManyField(Author)
- created = models.DateField(editable=False)
-
- def __unicode__(self):
- return self.name
-
-class CustomPrimaryKey(models.Model):
- my_pk = models.CharField(max_length=10, primary_key=True)
- some_field = models.CharField(max_length=100)
-
-
-# models for inheritance tests.
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
- city = models.CharField(max_length=50)
-
- def __unicode__(self):
- return self.name
-
-class Owner(models.Model):
- auto_id = models.AutoField(primary_key=True)
- name = models.CharField(max_length=100)
- place = models.ForeignKey(Place)
-
- def __unicode__(self):
- return "%s at %s" % (self.name, self.place)
-
-class Location(models.Model):
- place = models.ForeignKey(Place, unique=True)
- # this is purely for testing the data doesn't matter here :)
- lat = models.CharField(max_length=100)
- lon = models.CharField(max_length=100)
-
-class OwnerProfile(models.Model):
- owner = models.OneToOneField(Owner, primary_key=True)
- age = models.PositiveIntegerField()
-
- def __unicode__(self):
- return "%s is %d" % (self.owner.name, self.age)
-
-class Restaurant(Place):
- serves_pizza = models.BooleanField()
-
- def __unicode__(self):
- return self.name
-
-class Product(models.Model):
- slug = models.SlugField(unique=True)
-
- def __unicode__(self):
- return self.slug
-
-class Price(models.Model):
- price = models.DecimalField(max_digits=10, decimal_places=2)
- quantity = models.PositiveIntegerField()
-
- def __unicode__(self):
- return u"%s for %s" % (self.quantity, self.price)
-
- class Meta:
- unique_together = (('price', 'quantity'),)
-
-class MexicanRestaurant(Restaurant):
- serves_tacos = models.BooleanField()
-
-class ClassyMexicanRestaurant(MexicanRestaurant):
- restaurant = models.OneToOneField(MexicanRestaurant, parent_link=True, primary_key=True)
- tacos_are_yummy = models.BooleanField()
-
-# models for testing unique_together validation when a fk is involved and
-# using inlineformset_factory.
-class Repository(models.Model):
- name = models.CharField(max_length=25)
-
- def __unicode__(self):
- return self.name
-
-class Revision(models.Model):
- repository = models.ForeignKey(Repository)
- revision = models.CharField(max_length=40)
-
- class Meta:
- unique_together = (("repository", "revision"),)
-
- def __unicode__(self):
- return u"%s (%s)" % (self.revision, unicode(self.repository))
-
-# models for testing callable defaults (see bug #7975). If you define a model
-# with a callable default value, you cannot rely on the initial value in a
-# form.
-class Person(models.Model):
- name = models.CharField(max_length=128)
-
-class Membership(models.Model):
- person = models.ForeignKey(Person)
- date_joined = models.DateTimeField(default=datetime.datetime.now)
- karma = models.IntegerField()
-
-# models for testing a null=True fk to a parent
-class Team(models.Model):
- name = models.CharField(max_length=100)
-
-class Player(models.Model):
- team = models.ForeignKey(Team, null=True)
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
-# Models for testing custom ModelForm save methods in formsets and inline formsets
-class Poet(models.Model):
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
-class Poem(models.Model):
- poet = models.ForeignKey(Poet)
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
-class Post(models.Model):
- title = models.CharField(max_length=50, unique_for_date='posted', blank=True)
- slug = models.CharField(max_length=50, unique_for_year='posted', blank=True)
- subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True)
- posted = models.DateField()
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/model_formsets/tests.py b/parts/django/tests/modeltests/model_formsets/tests.py
deleted file mode 100644
index c856a5f..0000000
--- a/parts/django/tests/modeltests/model_formsets/tests.py
+++ /dev/null
@@ -1,1159 +0,0 @@
-import datetime
-import re
-from datetime import date
-from decimal import Decimal
-
-from django import forms
-from django.db import models
-from django.forms.models import (_get_foreign_key, inlineformset_factory,
- modelformset_factory, modelformset_factory)
-from django.test import TestCase
-
-from modeltests.model_formsets.models import (
- Author, BetterAuthor, Book, BookWithCustomPK, Editor,
- BookWithOptionalAltEditor, AlternateBook, AuthorMeeting, CustomPrimaryKey,
- Place, Owner, Location, OwnerProfile, Restaurant, Product, Price,
- MexicanRestaurant, ClassyMexicanRestaurant, Repository, Revision,
- Person, Membership, Team, Player, Poet, Poem, Post)
-
-class DeletionTests(TestCase):
- def test_deletion(self):
- PoetFormSet = modelformset_factory(Poet, can_delete=True)
- poet = Poet.objects.create(name='test')
- data = {
- 'form-TOTAL_FORMS': u'1',
- 'form-INITIAL_FORMS': u'1',
- 'form-MAX_NUM_FORMS': u'0',
- 'form-0-id': str(poet.pk),
- 'form-0-name': u'test',
- 'form-0-DELETE': u'on',
- }
- formset = PoetFormSet(data, queryset=Poet.objects.all())
- formset.save()
- self.assertTrue(formset.is_valid())
- self.assertEqual(Poet.objects.count(), 0)
-
- def test_add_form_deletion_when_invalid(self):
- """
- Make sure that an add form that is filled out, but marked for deletion
- doesn't cause validation errors.
- """
- PoetFormSet = modelformset_factory(Poet, can_delete=True)
- data = {
- 'form-TOTAL_FORMS': u'1',
- 'form-INITIAL_FORMS': u'0',
- 'form-MAX_NUM_FORMS': u'0',
- 'form-0-id': u'',
- 'form-0-name': u'x' * 1000,
- }
- formset = PoetFormSet(data, queryset=Poet.objects.all())
- # Make sure this form doesn't pass validation.
- self.assertEqual(formset.is_valid(), False)
- self.assertEqual(Poet.objects.count(), 0)
-
- # Then make sure that it *does* pass validation and delete the object,
- # even though the data isn't actually valid.
- data['form-0-DELETE'] = 'on'
- formset = PoetFormSet(data, queryset=Poet.objects.all())
- self.assertEqual(formset.is_valid(), True)
- formset.save()
- self.assertEqual(Poet.objects.count(), 0)
-
- def test_change_form_deletion_when_invalid(self):
- """
- Make sure that an add form that is filled out, but marked for deletion
- doesn't cause validation errors.
- """
- PoetFormSet = modelformset_factory(Poet, can_delete=True)
- poet = Poet.objects.create(name='test')
- data = {
- 'form-TOTAL_FORMS': u'1',
- 'form-INITIAL_FORMS': u'1',
- 'form-MAX_NUM_FORMS': u'0',
- 'form-0-id': u'1',
- 'form-0-name': u'x' * 1000,
- }
- formset = PoetFormSet(data, queryset=Poet.objects.all())
- # Make sure this form doesn't pass validation.
- self.assertEqual(formset.is_valid(), False)
- self.assertEqual(Poet.objects.count(), 1)
-
- # Then make sure that it *does* pass validation and delete the object,
- # even though the data isn't actually valid.
- data['form-0-DELETE'] = 'on'
- formset = PoetFormSet(data, queryset=Poet.objects.all())
- self.assertEqual(formset.is_valid(), True)
- formset.save()
- self.assertEqual(Poet.objects.count(), 0)
-
-class ModelFormsetTest(TestCase):
- def test_simple_save(self):
- qs = Author.objects.all()
- AuthorFormSet = modelformset_factory(Author, extra=3)
-
- formset = AuthorFormSet(queryset=qs)
- self.assertEqual(len(formset.forms), 3)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /><input type="hidden" name="form-0-id" id="id_form-0-id" /></p>')
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" /><input type="hidden" name="form-1-id" id="id_form-1-id" /></p>')
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_form-2-name">Name:</label> <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" /><input type="hidden" name="form-2-id" id="id_form-2-id" /></p>')
-
- data = {
- 'form-TOTAL_FORMS': '3', # the number of forms rendered
- 'form-INITIAL_FORMS': '0', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-name': 'Charles Baudelaire',
- 'form-1-name': 'Arthur Rimbaud',
- 'form-2-name': '',
- }
-
- formset = AuthorFormSet(data=data, queryset=qs)
- self.assertTrue(formset.is_valid())
-
- saved = formset.save()
- self.assertEqual(len(saved), 2)
- author1, author2 = saved
- self.assertEqual(author1, Author.objects.get(name='Charles Baudelaire'))
- self.assertEqual(author2, Author.objects.get(name='Arthur Rimbaud'))
-
- authors = list(Author.objects.order_by('name'))
- self.assertEqual(authors, [author2, author1])
-
- # Gah! We forgot Paul Verlaine. Let's create a formset to edit the
- # existing authors with an extra form to add him. We *could* pass in a
- # queryset to restrict the Author objects we edit, but in this case
- # we'll use it to display them in alphabetical order by name.
-
- qs = Author.objects.order_by('name')
- AuthorFormSet = modelformset_factory(Author, extra=1, can_delete=False)
-
- formset = AuthorFormSet(queryset=qs)
- self.assertEqual(len(formset.forms), 3)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100" /><input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id)
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100" /><input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id)
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_form-2-name">Name:</label> <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" /><input type="hidden" name="form-2-id" id="id_form-2-id" /></p>')
-
- data = {
- 'form-TOTAL_FORMS': '3', # the number of forms rendered
- 'form-INITIAL_FORMS': '2', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-id': str(author2.id),
- 'form-0-name': 'Arthur Rimbaud',
- 'form-1-id': str(author1.id),
- 'form-1-name': 'Charles Baudelaire',
- 'form-2-name': 'Paul Verlaine',
- }
-
- formset = AuthorFormSet(data=data, queryset=qs)
- self.assertTrue(formset.is_valid())
-
- # Only changed or new objects are returned from formset.save()
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- author3 = saved[0]
- self.assertEqual(author3, Author.objects.get(name='Paul Verlaine'))
-
- authors = list(Author.objects.order_by('name'))
- self.assertEqual(authors, [author2, author1, author3])
-
- # This probably shouldn't happen, but it will. If an add form was
- # marked for deletion, make sure we don't save that form.
-
- qs = Author.objects.order_by('name')
- AuthorFormSet = modelformset_factory(Author, extra=1, can_delete=True)
-
- formset = AuthorFormSet(queryset=qs)
- self.assertEqual(len(formset.forms), 4)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100" /></p>\n'
- '<p><label for="id_form-0-DELETE">Delete:</label> <input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE" /><input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id)
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100" /></p>\n'
- '<p><label for="id_form-1-DELETE">Delete:</label> <input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE" /><input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id)
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_form-2-name">Name:</label> <input id="id_form-2-name" type="text" name="form-2-name" value="Paul Verlaine" maxlength="100" /></p>\n'
- '<p><label for="id_form-2-DELETE">Delete:</label> <input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE" /><input type="hidden" name="form-2-id" value="%d" id="id_form-2-id" /></p>' % author3.id)
- self.assertEqual(formset.forms[3].as_p(),
- '<p><label for="id_form-3-name">Name:</label> <input id="id_form-3-name" type="text" name="form-3-name" maxlength="100" /></p>\n'
- '<p><label for="id_form-3-DELETE">Delete:</label> <input type="checkbox" name="form-3-DELETE" id="id_form-3-DELETE" /><input type="hidden" name="form-3-id" id="id_form-3-id" /></p>')
-
- data = {
- 'form-TOTAL_FORMS': '4', # the number of forms rendered
- 'form-INITIAL_FORMS': '3', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-id': str(author2.id),
- 'form-0-name': 'Arthur Rimbaud',
- 'form-1-id': str(author1.id),
- 'form-1-name': 'Charles Baudelaire',
- 'form-2-id': str(author3.id),
- 'form-2-name': 'Paul Verlaine',
- 'form-3-name': 'Walt Whitman',
- 'form-3-DELETE': 'on',
- }
-
- formset = AuthorFormSet(data=data, queryset=qs)
- self.assertTrue(formset.is_valid())
-
- # No objects were changed or saved so nothing will come back.
-
- self.assertEqual(formset.save(), [])
-
- authors = list(Author.objects.order_by('name'))
- self.assertEqual(authors, [author2, author1, author3])
-
- # Let's edit a record to ensure save only returns that one record.
-
- data = {
- 'form-TOTAL_FORMS': '4', # the number of forms rendered
- 'form-INITIAL_FORMS': '3', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-id': str(author2.id),
- 'form-0-name': 'Walt Whitman',
- 'form-1-id': str(author1.id),
- 'form-1-name': 'Charles Baudelaire',
- 'form-2-id': str(author3.id),
- 'form-2-name': 'Paul Verlaine',
- 'form-3-name': '',
- 'form-3-DELETE': '',
- }
-
- formset = AuthorFormSet(data=data, queryset=qs)
- self.assertTrue(formset.is_valid())
-
- # One record has changed.
-
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- self.assertEqual(saved[0], Author.objects.get(name='Walt Whitman'))
-
- def test_commit_false(self):
- # Test the behavior of commit=False and save_m2m
-
- author1 = Author.objects.create(name='Charles Baudelaire')
- author2 = Author.objects.create(name='Paul Verlaine')
- author3 = Author.objects.create(name='Walt Whitman')
-
- meeting = AuthorMeeting.objects.create(created=date.today())
- meeting.authors = Author.objects.all()
-
- # create an Author instance to add to the meeting.
-
- author4 = Author.objects.create(name=u'John Steinbeck')
-
- AuthorMeetingFormSet = modelformset_factory(AuthorMeeting, extra=1, can_delete=True)
- data = {
- 'form-TOTAL_FORMS': '2', # the number of forms rendered
- 'form-INITIAL_FORMS': '1', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-id': '1',
- 'form-0-name': '2nd Tuesday of the Week Meeting',
- 'form-0-authors': [2, 1, 3, 4],
- 'form-1-name': '',
- 'form-1-authors': '',
- 'form-1-DELETE': '',
- }
- formset = AuthorMeetingFormSet(data=data, queryset=AuthorMeeting.objects.all())
- self.assertTrue(formset.is_valid())
-
- instances = formset.save(commit=False)
- for instance in instances:
- instance.created = date.today()
- instance.save()
- formset.save_m2m()
- self.assertQuerysetEqual(instances[0].authors.all(), [
- '<Author: Charles Baudelaire>',
- '<Author: John Steinbeck>',
- '<Author: Paul Verlaine>',
- '<Author: Walt Whitman>',
- ])
-
- def test_max_num(self):
- # Test the behavior of max_num with model formsets. It should allow
- # all existing related objects/inlines for a given object to be
- # displayed, but not allow the creation of new inlines beyond max_num.
-
- author1 = Author.objects.create(name='Charles Baudelaire')
- author2 = Author.objects.create(name='Paul Verlaine')
- author3 = Author.objects.create(name='Walt Whitman')
-
- qs = Author.objects.order_by('name')
-
- AuthorFormSet = modelformset_factory(Author, max_num=None, extra=3)
- formset = AuthorFormSet(queryset=qs)
- self.assertEqual(len(formset.forms), 6)
- self.assertEqual(len(formset.extra_forms), 3)
-
- AuthorFormSet = modelformset_factory(Author, max_num=4, extra=3)
- formset = AuthorFormSet(queryset=qs)
- self.assertEqual(len(formset.forms), 4)
- self.assertEqual(len(formset.extra_forms), 1)
-
- AuthorFormSet = modelformset_factory(Author, max_num=0, extra=3)
- formset = AuthorFormSet(queryset=qs)
- self.assertEqual(len(formset.forms), 3)
- self.assertEqual(len(formset.extra_forms), 0)
-
- AuthorFormSet = modelformset_factory(Author, max_num=None)
- formset = AuthorFormSet(queryset=qs)
- self.assertQuerysetEqual(formset.get_queryset(), [
- '<Author: Charles Baudelaire>',
- '<Author: Paul Verlaine>',
- '<Author: Walt Whitman>',
- ])
-
- AuthorFormSet = modelformset_factory(Author, max_num=0)
- formset = AuthorFormSet(queryset=qs)
- self.assertQuerysetEqual(formset.get_queryset(), [
- '<Author: Charles Baudelaire>',
- '<Author: Paul Verlaine>',
- '<Author: Walt Whitman>',
- ])
-
- AuthorFormSet = modelformset_factory(Author, max_num=4)
- formset = AuthorFormSet(queryset=qs)
- self.assertQuerysetEqual(formset.get_queryset(), [
- '<Author: Charles Baudelaire>',
- '<Author: Paul Verlaine>',
- '<Author: Walt Whitman>',
- ])
-
- def test_custom_save_method(self):
- class PoetForm(forms.ModelForm):
- def save(self, commit=True):
- # change the name to "Vladimir Mayakovsky" just to be a jerk.
- author = super(PoetForm, self).save(commit=False)
- author.name = u"Vladimir Mayakovsky"
- if commit:
- author.save()
- return author
-
- PoetFormSet = modelformset_factory(Poet, form=PoetForm)
-
- data = {
- 'form-TOTAL_FORMS': '3', # the number of forms rendered
- 'form-INITIAL_FORMS': '0', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-name': 'Walt Whitman',
- 'form-1-name': 'Charles Baudelaire',
- 'form-2-name': '',
- }
-
- qs = Poet.objects.all()
- formset = PoetFormSet(data=data, queryset=qs)
- self.assertTrue(formset.is_valid())
-
- poets = formset.save()
- self.assertEqual(len(poets), 2)
- poet1, poet2 = poets
- self.assertEqual(poet1.name, 'Vladimir Mayakovsky')
- self.assertEqual(poet2.name, 'Vladimir Mayakovsky')
-
- def test_model_inheritance(self):
- BetterAuthorFormSet = modelformset_factory(BetterAuthor)
- formset = BetterAuthorFormSet()
- self.assertEqual(len(formset.forms), 1)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></p>\n'
- '<p><label for="id_form-0-write_speed">Write speed:</label> <input type="text" name="form-0-write_speed" id="id_form-0-write_speed" /><input type="hidden" name="form-0-author_ptr" id="id_form-0-author_ptr" /></p>')
-
- data = {
- 'form-TOTAL_FORMS': '1', # the number of forms rendered
- 'form-INITIAL_FORMS': '0', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-author_ptr': '',
- 'form-0-name': 'Ernest Hemingway',
- 'form-0-write_speed': '10',
- }
-
- formset = BetterAuthorFormSet(data)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- author1, = saved
- self.assertEqual(author1, BetterAuthor.objects.get(name='Ernest Hemingway'))
- hemingway_id = BetterAuthor.objects.get(name="Ernest Hemingway").pk
-
- formset = BetterAuthorFormSet()
- self.assertEqual(len(formset.forms), 2)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" value="Ernest Hemingway" maxlength="100" /></p>\n'
- '<p><label for="id_form-0-write_speed">Write speed:</label> <input type="text" name="form-0-write_speed" value="10" id="id_form-0-write_speed" /><input type="hidden" name="form-0-author_ptr" value="%d" id="id_form-0-author_ptr" /></p>' % hemingway_id)
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" /></p>\n'
- '<p><label for="id_form-1-write_speed">Write speed:</label> <input type="text" name="form-1-write_speed" id="id_form-1-write_speed" /><input type="hidden" name="form-1-author_ptr" id="id_form-1-author_ptr" /></p>')
-
- data = {
- 'form-TOTAL_FORMS': '2', # the number of forms rendered
- 'form-INITIAL_FORMS': '1', # the number of forms with initial data
- 'form-MAX_NUM_FORMS': '', # the max number of forms
- 'form-0-author_ptr': hemingway_id,
- 'form-0-name': 'Ernest Hemingway',
- 'form-0-write_speed': '10',
- 'form-1-author_ptr': '',
- 'form-1-name': '',
- 'form-1-write_speed': '',
- }
-
- formset = BetterAuthorFormSet(data)
- self.assertTrue(formset.is_valid())
- self.assertEqual(formset.save(), [])
-
- def test_inline_formsets(self):
- # We can also create a formset that is tied to a parent model. This is
- # how the admin system's edit inline functionality works.
-
- AuthorBooksFormSet = inlineformset_factory(Author, Book, can_delete=False, extra=3)
- author = Author.objects.create(name='Charles Baudelaire')
-
- formset = AuthorBooksFormSet(instance=author)
- self.assertEqual(len(formset.forms), 3)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" maxlength="100" /><input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" id="id_book_set-0-id" /></p>' % author.id)
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" /><input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id)
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" /><input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id)
-
- data = {
- 'book_set-TOTAL_FORMS': '3', # the number of forms rendered
- 'book_set-INITIAL_FORMS': '0', # the number of forms with initial data
- 'book_set-MAX_NUM_FORMS': '', # the max number of forms
- 'book_set-0-title': 'Les Fleurs du Mal',
- 'book_set-1-title': '',
- 'book_set-2-title': '',
- }
-
- formset = AuthorBooksFormSet(data, instance=author)
- self.assertTrue(formset.is_valid())
-
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- book1, = saved
- self.assertEqual(book1, Book.objects.get(title='Les Fleurs du Mal'))
- self.assertQuerysetEqual(author.book_set.all(), ['<Book: Les Fleurs du Mal>'])
-
- # Now that we've added a book to Charles Baudelaire, let's try adding
- # another one. This time though, an edit form will be available for
- # every existing book.
-
- AuthorBooksFormSet = inlineformset_factory(Author, Book, can_delete=False, extra=2)
- author = Author.objects.get(name='Charles Baudelaire')
-
- formset = AuthorBooksFormSet(instance=author)
- self.assertEqual(len(formset.forms), 3)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" value="Les Fleurs du Mal" maxlength="100" /><input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" value="%d" id="id_book_set-0-id" /></p>' % (author.id, book1.id))
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" /><input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id)
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" /><input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id)
-
- data = {
- 'book_set-TOTAL_FORMS': '3', # the number of forms rendered
- 'book_set-INITIAL_FORMS': '1', # the number of forms with initial data
- 'book_set-MAX_NUM_FORMS': '', # the max number of forms
- 'book_set-0-id': '1',
- 'book_set-0-title': 'Les Fleurs du Mal',
- 'book_set-1-title': 'Les Paradis Artificiels',
- 'book_set-2-title': '',
- }
-
- formset = AuthorBooksFormSet(data, instance=author)
- self.assertTrue(formset.is_valid())
-
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- book2, = saved
- self.assertEqual(book2, Book.objects.get(title='Les Paradis Artificiels'))
-
- # As you can see, 'Les Paradis Artificiels' is now a book belonging to
- # Charles Baudelaire.
- self.assertQuerysetEqual(author.book_set.order_by('title'), [
- '<Book: Les Fleurs du Mal>',
- '<Book: Les Paradis Artificiels>',
- ])
-
- def test_inline_formsets_save_as_new(self):
- # The save_as_new parameter lets you re-associate the data to a new
- # instance. This is used in the admin for save_as functionality.
- AuthorBooksFormSet = inlineformset_factory(Author, Book, can_delete=False, extra=2)
- author = Author.objects.create(name='Charles Baudelaire')
-
- data = {
- 'book_set-TOTAL_FORMS': '3', # the number of forms rendered
- 'book_set-INITIAL_FORMS': '2', # the number of forms with initial data
- 'book_set-MAX_NUM_FORMS': '', # the max number of forms
- 'book_set-0-id': '1',
- 'book_set-0-title': 'Les Fleurs du Mal',
- 'book_set-1-id': '2',
- 'book_set-1-title': 'Les Paradis Artificiels',
- 'book_set-2-title': '',
- }
-
- formset = AuthorBooksFormSet(data, instance=Author(), save_as_new=True)
- self.assertTrue(formset.is_valid())
-
- new_author = Author.objects.create(name='Charles Baudelaire')
- formset = AuthorBooksFormSet(data, instance=new_author, save_as_new=True)
- saved = formset.save()
- self.assertEqual(len(saved), 2)
- book1, book2 = saved
- self.assertEqual(book1.title, 'Les Fleurs du Mal')
- self.assertEqual(book2.title, 'Les Paradis Artificiels')
-
- # Test using a custom prefix on an inline formset.
-
- formset = AuthorBooksFormSet(prefix="test")
- self.assertEqual(len(formset.forms), 2)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_test-0-title">Title:</label> <input id="id_test-0-title" type="text" name="test-0-title" maxlength="100" /><input type="hidden" name="test-0-author" id="id_test-0-author" /><input type="hidden" name="test-0-id" id="id_test-0-id" /></p>')
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_test-1-title">Title:</label> <input id="id_test-1-title" type="text" name="test-1-title" maxlength="100" /><input type="hidden" name="test-1-author" id="id_test-1-author" /><input type="hidden" name="test-1-id" id="id_test-1-id" /></p>')
-
- def test_inline_formsets_with_custom_pk(self):
- # Test inline formsets where the inline-edited object has a custom
- # primary key that is not the fk to the parent object.
-
- AuthorBooksFormSet2 = inlineformset_factory(Author, BookWithCustomPK, can_delete=False, extra=1)
- author = Author.objects.create(pk=1, name='Charles Baudelaire')
-
- formset = AuthorBooksFormSet2(instance=author)
- self.assertEqual(len(formset.forms), 1)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_bookwithcustompk_set-0-my_pk">My pk:</label> <input type="text" name="bookwithcustompk_set-0-my_pk" id="id_bookwithcustompk_set-0-my_pk" /></p>\n'
- '<p><label for="id_bookwithcustompk_set-0-title">Title:</label> <input id="id_bookwithcustompk_set-0-title" type="text" name="bookwithcustompk_set-0-title" maxlength="100" /><input type="hidden" name="bookwithcustompk_set-0-author" value="1" id="id_bookwithcustompk_set-0-author" /></p>')
-
- data = {
- 'bookwithcustompk_set-TOTAL_FORMS': '1', # the number of forms rendered
- 'bookwithcustompk_set-INITIAL_FORMS': '0', # the number of forms with initial data
- 'bookwithcustompk_set-MAX_NUM_FORMS': '', # the max number of forms
- 'bookwithcustompk_set-0-my_pk': '77777',
- 'bookwithcustompk_set-0-title': 'Les Fleurs du Mal',
- }
-
- formset = AuthorBooksFormSet2(data, instance=author)
- self.assertTrue(formset.is_valid())
-
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- book1, = saved
- self.assertEqual(book1.pk, 77777)
-
- book1 = author.bookwithcustompk_set.get()
- self.assertEqual(book1.title, 'Les Fleurs du Mal')
-
- def test_inline_formsets_with_multi_table_inheritance(self):
- # Test inline formsets where the inline-edited object uses multi-table
- # inheritance, thus has a non AutoField yet auto-created primary key.
-
- AuthorBooksFormSet3 = inlineformset_factory(Author, AlternateBook, can_delete=False, extra=1)
- author = Author.objects.create(pk=1, name='Charles Baudelaire')
-
- formset = AuthorBooksFormSet3(instance=author)
- self.assertEqual(len(formset.forms), 1)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_alternatebook_set-0-title">Title:</label> <input id="id_alternatebook_set-0-title" type="text" name="alternatebook_set-0-title" maxlength="100" /></p>\n'
- '<p><label for="id_alternatebook_set-0-notes">Notes:</label> <input id="id_alternatebook_set-0-notes" type="text" name="alternatebook_set-0-notes" maxlength="100" /><input type="hidden" name="alternatebook_set-0-author" value="1" id="id_alternatebook_set-0-author" /><input type="hidden" name="alternatebook_set-0-book_ptr" id="id_alternatebook_set-0-book_ptr" /></p>')
-
- data = {
- 'alternatebook_set-TOTAL_FORMS': '1', # the number of forms rendered
- 'alternatebook_set-INITIAL_FORMS': '0', # the number of forms with initial data
- 'alternatebook_set-MAX_NUM_FORMS': '', # the max number of forms
- 'alternatebook_set-0-title': 'Flowers of Evil',
- 'alternatebook_set-0-notes': 'English translation of Les Fleurs du Mal'
- }
-
- formset = AuthorBooksFormSet3(data, instance=author)
- self.assertTrue(formset.is_valid())
-
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- book1, = saved
- self.assertEqual(book1.title, 'Flowers of Evil')
- self.assertEqual(book1.notes, 'English translation of Les Fleurs du Mal')
-
- # Test inline formsets where the inline-edited object has a
- # unique_together constraint with a nullable member
-
- AuthorBooksFormSet4 = inlineformset_factory(Author, BookWithOptionalAltEditor, can_delete=False, extra=2)
-
- data = {
- 'bookwithoptionalalteditor_set-TOTAL_FORMS': '2', # the number of forms rendered
- 'bookwithoptionalalteditor_set-INITIAL_FORMS': '0', # the number of forms with initial data
- 'bookwithoptionalalteditor_set-MAX_NUM_FORMS': '', # the max number of forms
- 'bookwithoptionalalteditor_set-0-author': '1',
- 'bookwithoptionalalteditor_set-0-title': 'Les Fleurs du Mal',
- 'bookwithoptionalalteditor_set-1-author': '1',
- 'bookwithoptionalalteditor_set-1-title': 'Les Fleurs du Mal',
- }
- formset = AuthorBooksFormSet4(data, instance=author)
- self.assertTrue(formset.is_valid())
-
- saved = formset.save()
- self.assertEqual(len(saved), 2)
- book1, book2 = saved
- self.assertEqual(book1.author_id, 1)
- self.assertEqual(book1.title, 'Les Fleurs du Mal')
- self.assertEqual(book2.author_id, 1)
- self.assertEqual(book2.title, 'Les Fleurs du Mal')
-
- def test_inline_formsets_with_custom_save_method(self):
- AuthorBooksFormSet = inlineformset_factory(Author, Book, can_delete=False, extra=2)
- author = Author.objects.create(pk=1, name='Charles Baudelaire')
- book1 = Book.objects.create(pk=1, author=author, title='Les Paradis Artificiels')
- book2 = Book.objects.create(pk=2, author=author, title='Les Fleurs du Mal')
- book3 = Book.objects.create(pk=3, author=author, title='Flowers of Evil')
-
- class PoemForm(forms.ModelForm):
- def save(self, commit=True):
- # change the name to "Brooklyn Bridge" just to be a jerk.
- poem = super(PoemForm, self).save(commit=False)
- poem.name = u"Brooklyn Bridge"
- if commit:
- poem.save()
- return poem
-
- PoemFormSet = inlineformset_factory(Poet, Poem, form=PoemForm)
-
- data = {
- 'poem_set-TOTAL_FORMS': '3', # the number of forms rendered
- 'poem_set-INITIAL_FORMS': '0', # the number of forms with initial data
- 'poem_set-MAX_NUM_FORMS': '', # the max number of forms
- 'poem_set-0-name': 'The Cloud in Trousers',
- 'poem_set-1-name': 'I',
- 'poem_set-2-name': '',
- }
-
- poet = Poet.objects.create(name='Vladimir Mayakovsky')
- formset = PoemFormSet(data=data, instance=poet)
- self.assertTrue(formset.is_valid())
-
- saved = formset.save()
- self.assertEqual(len(saved), 2)
- poem1, poem2 = saved
- self.assertEqual(poem1.name, 'Brooklyn Bridge')
- self.assertEqual(poem2.name, 'Brooklyn Bridge')
-
- # We can provide a custom queryset to our InlineFormSet:
-
- custom_qs = Book.objects.order_by('-title')
- formset = AuthorBooksFormSet(instance=author, queryset=custom_qs)
- self.assertEqual(len(formset.forms), 5)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" value="Les Paradis Artificiels" maxlength="100" /><input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" value="1" id="id_book_set-0-id" /></p>')
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" value="Les Fleurs du Mal" maxlength="100" /><input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" value="2" id="id_book_set-1-id" /></p>')
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" value="Flowers of Evil" maxlength="100" /><input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" value="3" id="id_book_set-2-id" /></p>')
- self.assertEqual(formset.forms[3].as_p(),
- '<p><label for="id_book_set-3-title">Title:</label> <input id="id_book_set-3-title" type="text" name="book_set-3-title" maxlength="100" /><input type="hidden" name="book_set-3-author" value="1" id="id_book_set-3-author" /><input type="hidden" name="book_set-3-id" id="id_book_set-3-id" /></p>')
- self.assertEqual(formset.forms[4].as_p(),
- '<p><label for="id_book_set-4-title">Title:</label> <input id="id_book_set-4-title" type="text" name="book_set-4-title" maxlength="100" /><input type="hidden" name="book_set-4-author" value="1" id="id_book_set-4-author" /><input type="hidden" name="book_set-4-id" id="id_book_set-4-id" /></p>')
-
- data = {
- 'book_set-TOTAL_FORMS': '5', # the number of forms rendered
- 'book_set-INITIAL_FORMS': '3', # the number of forms with initial data
- 'book_set-MAX_NUM_FORMS': '', # the max number of forms
- 'book_set-0-id': str(book1.id),
- 'book_set-0-title': 'Les Paradis Artificiels',
- 'book_set-1-id': str(book2.id),
- 'book_set-1-title': 'Les Fleurs du Mal',
- 'book_set-2-id': str(book3.id),
- 'book_set-2-title': 'Flowers of Evil',
- 'book_set-3-title': 'Revue des deux mondes',
- 'book_set-4-title': '',
- }
- formset = AuthorBooksFormSet(data, instance=author, queryset=custom_qs)
- self.assertTrue(formset.is_valid())
-
- custom_qs = Book.objects.filter(title__startswith='F')
- formset = AuthorBooksFormSet(instance=author, queryset=custom_qs)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" value="Flowers of Evil" maxlength="100" /><input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" value="3" id="id_book_set-0-id" /></p>')
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" /><input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>')
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" /><input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>')
-
- data = {
- 'book_set-TOTAL_FORMS': '3', # the number of forms rendered
- 'book_set-INITIAL_FORMS': '1', # the number of forms with initial data
- 'book_set-MAX_NUM_FORMS': '', # the max number of forms
- 'book_set-0-id': str(book3.id),
- 'book_set-0-title': 'Flowers of Evil',
- 'book_set-1-title': 'Revue des deux mondes',
- 'book_set-2-title': '',
- }
- formset = AuthorBooksFormSet(data, instance=author, queryset=custom_qs)
- self.assertTrue(formset.is_valid())
-
- def test_custom_pk(self):
- # We need to ensure that it is displayed
-
- CustomPrimaryKeyFormSet = modelformset_factory(CustomPrimaryKey)
- formset = CustomPrimaryKeyFormSet()
- self.assertEqual(len(formset.forms), 1)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_form-0-my_pk">My pk:</label> <input id="id_form-0-my_pk" type="text" name="form-0-my_pk" maxlength="10" /></p>\n'
- '<p><label for="id_form-0-some_field">Some field:</label> <input id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100" /></p>')
-
- # Custom primary keys with ForeignKey, OneToOneField and AutoField ############
-
- place = Place.objects.create(pk=1, name=u'Giordanos', city=u'Chicago')
-
- FormSet = inlineformset_factory(Place, Owner, extra=2, can_delete=False)
- formset = FormSet(instance=place)
- self.assertEqual(len(formset.forms), 2)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_owner_set-0-name">Name:</label> <input id="id_owner_set-0-name" type="text" name="owner_set-0-name" maxlength="100" /><input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" /><input type="hidden" name="owner_set-0-auto_id" id="id_owner_set-0-auto_id" /></p>')
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_owner_set-1-name">Name:</label> <input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" /><input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" /><input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>')
-
- data = {
- 'owner_set-TOTAL_FORMS': '2',
- 'owner_set-INITIAL_FORMS': '0',
- 'owner_set-MAX_NUM_FORMS': '',
- 'owner_set-0-auto_id': '',
- 'owner_set-0-name': u'Joe Perry',
- 'owner_set-1-auto_id': '',
- 'owner_set-1-name': '',
- }
- formset = FormSet(data, instance=place)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- owner, = saved
- self.assertEqual(owner.name, 'Joe Perry')
- self.assertEqual(owner.place.name, 'Giordanos')
-
- formset = FormSet(instance=place)
- self.assertEqual(len(formset.forms), 3)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_owner_set-0-name">Name:</label> <input id="id_owner_set-0-name" type="text" name="owner_set-0-name" value="Joe Perry" maxlength="100" /><input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" /><input type="hidden" name="owner_set-0-auto_id" value="1" id="id_owner_set-0-auto_id" /></p>')
- self.assertEqual(formset.forms[1].as_p(),
- '<p><label for="id_owner_set-1-name">Name:</label> <input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" /><input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" /><input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>')
- self.assertEqual(formset.forms[2].as_p(),
- '<p><label for="id_owner_set-2-name">Name:</label> <input id="id_owner_set-2-name" type="text" name="owner_set-2-name" maxlength="100" /><input type="hidden" name="owner_set-2-place" value="1" id="id_owner_set-2-place" /><input type="hidden" name="owner_set-2-auto_id" id="id_owner_set-2-auto_id" /></p>')
-
- data = {
- 'owner_set-TOTAL_FORMS': '3',
- 'owner_set-INITIAL_FORMS': '1',
- 'owner_set-MAX_NUM_FORMS': '',
- 'owner_set-0-auto_id': u'1',
- 'owner_set-0-name': u'Joe Perry',
- 'owner_set-1-auto_id': '',
- 'owner_set-1-name': u'Jack Berry',
- 'owner_set-2-auto_id': '',
- 'owner_set-2-name': '',
- }
- formset = FormSet(data, instance=place)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- owner, = saved
- self.assertEqual(owner.name, 'Jack Berry')
- self.assertEqual(owner.place.name, 'Giordanos')
-
- # Ensure a custom primary key that is a ForeignKey or OneToOneField get rendered for the user to choose.
-
- FormSet = modelformset_factory(OwnerProfile)
- formset = FormSet()
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_form-0-owner">Owner:</label> <select name="form-0-owner" id="id_form-0-owner">\n'
- '<option value="" selected="selected">---------</option>\n'
- '<option value="1">Joe Perry at Giordanos</option>\n'
- '<option value="2">Jack Berry at Giordanos</option>\n'
- '</select></p>\n'
- '<p><label for="id_form-0-age">Age:</label> <input type="text" name="form-0-age" id="id_form-0-age" /></p>')
-
- owner = Owner.objects.get(name=u'Joe Perry')
- FormSet = inlineformset_factory(Owner, OwnerProfile, max_num=1, can_delete=False)
- self.assertEqual(FormSet.max_num, 1)
-
- formset = FormSet(instance=owner)
- self.assertEqual(len(formset.forms), 1)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_ownerprofile-0-age">Age:</label> <input type="text" name="ownerprofile-0-age" id="id_ownerprofile-0-age" /><input type="hidden" name="ownerprofile-0-owner" value="1" id="id_ownerprofile-0-owner" /></p>')
-
- data = {
- 'ownerprofile-TOTAL_FORMS': '1',
- 'ownerprofile-INITIAL_FORMS': '0',
- 'ownerprofile-MAX_NUM_FORMS': '1',
- 'ownerprofile-0-owner': '',
- 'ownerprofile-0-age': u'54',
- }
- formset = FormSet(data, instance=owner)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- profile1, = saved
- self.assertEqual(profile1.owner, owner)
- self.assertEqual(profile1.age, 54)
-
- formset = FormSet(instance=owner)
- self.assertEqual(len(formset.forms), 1)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_ownerprofile-0-age">Age:</label> <input type="text" name="ownerprofile-0-age" value="54" id="id_ownerprofile-0-age" /><input type="hidden" name="ownerprofile-0-owner" value="1" id="id_ownerprofile-0-owner" /></p>')
-
- data = {
- 'ownerprofile-TOTAL_FORMS': '1',
- 'ownerprofile-INITIAL_FORMS': '1',
- 'ownerprofile-MAX_NUM_FORMS': '1',
- 'ownerprofile-0-owner': u'1',
- 'ownerprofile-0-age': u'55',
- }
- formset = FormSet(data, instance=owner)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- profile1, = saved
- self.assertEqual(profile1.owner, owner)
- self.assertEqual(profile1.age, 55)
-
- def test_unique_true_enforces_max_num_one(self):
- # ForeignKey with unique=True should enforce max_num=1
-
- place = Place.objects.create(pk=1, name=u'Giordanos', city=u'Chicago')
-
- FormSet = inlineformset_factory(Place, Location, can_delete=False)
- self.assertEqual(FormSet.max_num, 1)
-
- formset = FormSet(instance=place)
- self.assertEqual(len(formset.forms), 1)
- self.assertEqual(formset.forms[0].as_p(),
- '<p><label for="id_location_set-0-lat">Lat:</label> <input id="id_location_set-0-lat" type="text" name="location_set-0-lat" maxlength="100" /></p>\n'
- '<p><label for="id_location_set-0-lon">Lon:</label> <input id="id_location_set-0-lon" type="text" name="location_set-0-lon" maxlength="100" /><input type="hidden" name="location_set-0-place" value="1" id="id_location_set-0-place" /><input type="hidden" name="location_set-0-id" id="id_location_set-0-id" /></p>')
-
- def test_foreign_keys_in_parents(self):
- self.assertEqual(type(_get_foreign_key(Restaurant, Owner)), models.ForeignKey)
- self.assertEqual(type(_get_foreign_key(MexicanRestaurant, Owner)), models.ForeignKey)
-
- def test_unique_validation(self):
- FormSet = modelformset_factory(Product, extra=1)
- data = {
- 'form-TOTAL_FORMS': '1',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
- 'form-0-slug': 'car-red',
- }
- formset = FormSet(data)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- product1, = saved
- self.assertEqual(product1.slug, 'car-red')
-
- data = {
- 'form-TOTAL_FORMS': '1',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
- 'form-0-slug': 'car-red',
- }
- formset = FormSet(data)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.errors, [{'slug': [u'Product with this Slug already exists.']}])
-
- def test_unique_together_validation(self):
- FormSet = modelformset_factory(Price, extra=1)
- data = {
- 'form-TOTAL_FORMS': '1',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
- 'form-0-price': u'12.00',
- 'form-0-quantity': '1',
- }
- formset = FormSet(data)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- price1, = saved
- self.assertEqual(price1.price, Decimal('12.00'))
- self.assertEqual(price1.quantity, 1)
-
- data = {
- 'form-TOTAL_FORMS': '1',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
- 'form-0-price': u'12.00',
- 'form-0-quantity': '1',
- }
- formset = FormSet(data)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.errors, [{'__all__': [u'Price with this Price and Quantity already exists.']}])
-
- def test_unique_together_with_inlineformset_factory(self):
- # Also see bug #8882.
-
- repository = Repository.objects.create(name=u'Test Repo')
- FormSet = inlineformset_factory(Repository, Revision, extra=1)
- data = {
- 'revision_set-TOTAL_FORMS': '1',
- 'revision_set-INITIAL_FORMS': '0',
- 'revision_set-MAX_NUM_FORMS': '',
- 'revision_set-0-repository': repository.pk,
- 'revision_set-0-revision': '146239817507f148d448db38840db7c3cbf47c76',
- 'revision_set-0-DELETE': '',
- }
- formset = FormSet(data, instance=repository)
- self.assertTrue(formset.is_valid())
- saved = formset.save()
- self.assertEqual(len(saved), 1)
- revision1, = saved
- self.assertEqual(revision1.repository, repository)
- self.assertEqual(revision1.revision, '146239817507f148d448db38840db7c3cbf47c76')
-
- # attempt to save the same revision against against the same repo.
- data = {
- 'revision_set-TOTAL_FORMS': '1',
- 'revision_set-INITIAL_FORMS': '0',
- 'revision_set-MAX_NUM_FORMS': '',
- 'revision_set-0-repository': repository.pk,
- 'revision_set-0-revision': '146239817507f148d448db38840db7c3cbf47c76',
- 'revision_set-0-DELETE': '',
- }
- formset = FormSet(data, instance=repository)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.errors, [{'__all__': [u'Revision with this Repository and Revision already exists.']}])
-
- # unique_together with inlineformset_factory with overridden form fields
- # Also see #9494
-
- FormSet = inlineformset_factory(Repository, Revision, fields=('revision',), extra=1)
- data = {
- 'revision_set-TOTAL_FORMS': '1',
- 'revision_set-INITIAL_FORMS': '0',
- 'revision_set-MAX_NUM_FORMS': '',
- 'revision_set-0-repository': repository.pk,
- 'revision_set-0-revision': '146239817507f148d448db38840db7c3cbf47c76',
- 'revision_set-0-DELETE': '',
- }
- formset = FormSet(data, instance=repository)
- self.assertFalse(formset.is_valid())
-
- def test_callable_defaults(self):
- # Use of callable defaults (see bug #7975).
-
- person = Person.objects.create(name='Ringo')
- FormSet = inlineformset_factory(Person, Membership, can_delete=False, extra=1)
- formset = FormSet(instance=person)
-
- # Django will render a hidden field for model fields that have a callable
- # default. This is required to ensure the value is tested for change correctly
- # when determine what extra forms have changed to save.
-
- self.assertEquals(len(formset.forms), 1) # this formset only has one form
- form = formset.forms[0]
- now = form.fields['date_joined'].initial()
- result = form.as_p()
- result = re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)?', '__DATETIME__', result)
- self.assertEqual(result,
- '<p><label for="id_membership_set-0-date_joined">Date joined:</label> <input type="text" name="membership_set-0-date_joined" value="__DATETIME__" id="id_membership_set-0-date_joined" /><input type="hidden" name="initial-membership_set-0-date_joined" value="__DATETIME__" id="initial-membership_set-0-id_membership_set-0-date_joined" /></p>\n'
- '<p><label for="id_membership_set-0-karma">Karma:</label> <input type="text" name="membership_set-0-karma" id="id_membership_set-0-karma" /><input type="hidden" name="membership_set-0-person" value="1" id="id_membership_set-0-person" /><input type="hidden" name="membership_set-0-id" id="id_membership_set-0-id" /></p>')
-
- # test for validation with callable defaults. Validations rely on hidden fields
-
- data = {
- 'membership_set-TOTAL_FORMS': '1',
- 'membership_set-INITIAL_FORMS': '0',
- 'membership_set-MAX_NUM_FORMS': '',
- 'membership_set-0-date_joined': unicode(now.strftime('%Y-%m-%d %H:%M:%S')),
- 'initial-membership_set-0-date_joined': unicode(now.strftime('%Y-%m-%d %H:%M:%S')),
- 'membership_set-0-karma': '',
- }
- formset = FormSet(data, instance=person)
- self.assertTrue(formset.is_valid())
-
- # now test for when the data changes
-
- one_day_later = now + datetime.timedelta(days=1)
- filled_data = {
- 'membership_set-TOTAL_FORMS': '1',
- 'membership_set-INITIAL_FORMS': '0',
- 'membership_set-MAX_NUM_FORMS': '',
- 'membership_set-0-date_joined': unicode(one_day_later.strftime('%Y-%m-%d %H:%M:%S')),
- 'initial-membership_set-0-date_joined': unicode(now.strftime('%Y-%m-%d %H:%M:%S')),
- 'membership_set-0-karma': '',
- }
- formset = FormSet(filled_data, instance=person)
- self.assertFalse(formset.is_valid())
-
- # now test with split datetime fields
-
- class MembershipForm(forms.ModelForm):
- date_joined = forms.SplitDateTimeField(initial=now)
- class Meta:
- model = Membership
- def __init__(self, **kwargs):
- super(MembershipForm, self).__init__(**kwargs)
- self.fields['date_joined'].widget = forms.SplitDateTimeWidget()
-
- FormSet = inlineformset_factory(Person, Membership, form=MembershipForm, can_delete=False, extra=1)
- data = {
- 'membership_set-TOTAL_FORMS': '1',
- 'membership_set-INITIAL_FORMS': '0',
- 'membership_set-MAX_NUM_FORMS': '',
- 'membership_set-0-date_joined_0': unicode(now.strftime('%Y-%m-%d')),
- 'membership_set-0-date_joined_1': unicode(now.strftime('%H:%M:%S')),
- 'initial-membership_set-0-date_joined': unicode(now.strftime('%Y-%m-%d %H:%M:%S')),
- 'membership_set-0-karma': '',
- }
- formset = FormSet(data, instance=person)
- self.assertTrue(formset.is_valid())
-
- def test_inlineformset_factory_with_null_fk(self):
- # inlineformset_factory tests with fk having null=True. see #9462.
- # create some data that will exbit the issue
- team = Team.objects.create(name=u"Red Vipers")
- Player(name="Timmy").save()
- Player(name="Bobby", team=team).save()
-
- PlayerInlineFormSet = inlineformset_factory(Team, Player)
- formset = PlayerInlineFormSet()
- self.assertQuerysetEqual(formset.get_queryset(), [])
-
- formset = PlayerInlineFormSet(instance=team)
- players = formset.get_queryset()
- self.assertEqual(len(players), 1)
- player1, = players
- self.assertEqual(player1.team, team)
- self.assertEqual(player1.name, 'Bobby')
-
- def test_model_formset_with_custom_pk(self):
- # a formset for a Model that has a custom primary key that still needs to be
- # added to the formset automatically
- FormSet = modelformset_factory(ClassyMexicanRestaurant, fields=["tacos_are_yummy"])
- self.assertEqual(sorted(FormSet().forms[0].fields.keys()), ['restaurant', 'tacos_are_yummy'])
-
- def test_prevent_duplicates_from_with_the_same_formset(self):
- FormSet = modelformset_factory(Product, extra=2)
- data = {
- 'form-TOTAL_FORMS': 2,
- 'form-INITIAL_FORMS': 0,
- 'form-MAX_NUM_FORMS': '',
- 'form-0-slug': 'red_car',
- 'form-1-slug': 'red_car',
- }
- formset = FormSet(data)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset._non_form_errors,
- [u'Please correct the duplicate data for slug.'])
-
- FormSet = modelformset_factory(Price, extra=2)
- data = {
- 'form-TOTAL_FORMS': 2,
- 'form-INITIAL_FORMS': 0,
- 'form-MAX_NUM_FORMS': '',
- 'form-0-price': '25',
- 'form-0-quantity': '7',
- 'form-1-price': '25',
- 'form-1-quantity': '7',
- }
- formset = FormSet(data)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset._non_form_errors,
- [u'Please correct the duplicate data for price and quantity, which must be unique.'])
-
- # Only the price field is specified, this should skip any unique checks since
- # the unique_together is not fulfilled. This will fail with a KeyError if broken.
- FormSet = modelformset_factory(Price, fields=("price",), extra=2)
- data = {
- 'form-TOTAL_FORMS': '2',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
- 'form-0-price': '24',
- 'form-1-price': '24',
- }
- formset = FormSet(data)
- self.assertTrue(formset.is_valid())
-
- FormSet = inlineformset_factory(Author, Book, extra=0)
- author = Author.objects.create(pk=1, name='Charles Baudelaire')
- book1 = Book.objects.create(pk=1, author=author, title='Les Paradis Artificiels')
- book2 = Book.objects.create(pk=2, author=author, title='Les Fleurs du Mal')
- book3 = Book.objects.create(pk=3, author=author, title='Flowers of Evil')
-
- book_ids = author.book_set.order_by('id').values_list('id', flat=True)
- data = {
- 'book_set-TOTAL_FORMS': '2',
- 'book_set-INITIAL_FORMS': '2',
- 'book_set-MAX_NUM_FORMS': '',
-
- 'book_set-0-title': 'The 2008 Election',
- 'book_set-0-author': str(author.id),
- 'book_set-0-id': str(book_ids[0]),
-
- 'book_set-1-title': 'The 2008 Election',
- 'book_set-1-author': str(author.id),
- 'book_set-1-id': str(book_ids[1]),
- }
- formset = FormSet(data=data, instance=author)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset._non_form_errors,
- [u'Please correct the duplicate data for title.'])
- self.assertEqual(formset.errors,
- [{}, {'__all__': u'Please correct the duplicate values below.'}])
-
- FormSet = modelformset_factory(Post, extra=2)
- data = {
- 'form-TOTAL_FORMS': '2',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
-
- 'form-0-title': 'blah',
- 'form-0-slug': 'Morning',
- 'form-0-subtitle': 'foo',
- 'form-0-posted': '2009-01-01',
- 'form-1-title': 'blah',
- 'form-1-slug': 'Morning in Prague',
- 'form-1-subtitle': 'rawr',
- 'form-1-posted': '2009-01-01'
- }
- formset = FormSet(data)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset._non_form_errors,
- [u'Please correct the duplicate data for title which must be unique for the date in posted.'])
- self.assertEqual(formset.errors,
- [{}, {'__all__': u'Please correct the duplicate values below.'}])
-
- data = {
- 'form-TOTAL_FORMS': '2',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
-
- 'form-0-title': 'foo',
- 'form-0-slug': 'Morning in Prague',
- 'form-0-subtitle': 'foo',
- 'form-0-posted': '2009-01-01',
- 'form-1-title': 'blah',
- 'form-1-slug': 'Morning in Prague',
- 'form-1-subtitle': 'rawr',
- 'form-1-posted': '2009-08-02'
- }
- formset = FormSet(data)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset._non_form_errors,
- [u'Please correct the duplicate data for slug which must be unique for the year in posted.'])
-
- data = {
- 'form-TOTAL_FORMS': '2',
- 'form-INITIAL_FORMS': '0',
- 'form-MAX_NUM_FORMS': '',
-
- 'form-0-title': 'foo',
- 'form-0-slug': 'Morning in Prague',
- 'form-0-subtitle': 'rawr',
- 'form-0-posted': '2008-08-01',
- 'form-1-title': 'blah',
- 'form-1-slug': 'Prague',
- 'form-1-subtitle': 'rawr',
- 'form-1-posted': '2009-08-02'
- }
- formset = FormSet(data)
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset._non_form_errors,
- [u'Please correct the duplicate data for subtitle which must be unique for the month in posted.'])
diff --git a/parts/django/tests/modeltests/model_inheritance/__init__.py b/parts/django/tests/modeltests/model_inheritance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/model_inheritance/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/model_inheritance/models.py b/parts/django/tests/modeltests/model_inheritance/models.py
deleted file mode 100644
index 6cee512..0000000
--- a/parts/django/tests/modeltests/model_inheritance/models.py
+++ /dev/null
@@ -1,145 +0,0 @@
-"""
-XX. Model inheritance
-
-Model inheritance exists in two varieties:
- - abstract base classes which are a way of specifying common
- information inherited by the subclasses. They don't exist as a separate
- model.
- - non-abstract base classes (the default), which are models in their own
- right with their own database tables and everything. Their subclasses
- have references back to them, created automatically.
-
-Both styles are demonstrated here.
-"""
-
-from django.db import models
-
-#
-# Abstract base classes
-#
-
-class CommonInfo(models.Model):
- name = models.CharField(max_length=50)
- age = models.PositiveIntegerField()
-
- class Meta:
- abstract = True
- ordering = ['name']
-
- def __unicode__(self):
- return u'%s %s' % (self.__class__.__name__, self.name)
-
-class Worker(CommonInfo):
- job = models.CharField(max_length=50)
-
-class Student(CommonInfo):
- school_class = models.CharField(max_length=10)
-
- class Meta:
- pass
-
-class StudentWorker(Student, Worker):
- pass
-
-#
-# Abstract base classes with related models
-#
-
-class Post(models.Model):
- title = models.CharField(max_length=50)
-
-class Attachment(models.Model):
- post = models.ForeignKey(Post, related_name='attached_%(class)s_set')
- content = models.TextField()
-
- class Meta:
- abstract = True
-
- def __unicode__(self):
- return self.content
-
-class Comment(Attachment):
- is_spam = models.BooleanField()
-
-class Link(Attachment):
- url = models.URLField()
-
-#
-# Multi-table inheritance
-#
-
-class Chef(models.Model):
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return u"%s the chef" % self.name
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
- address = models.CharField(max_length=80)
-
- def __unicode__(self):
- return u"%s the place" % self.name
-
-class Rating(models.Model):
- rating = models.IntegerField(null=True, blank=True)
-
- class Meta:
- abstract = True
- ordering = ['-rating']
-
-class Restaurant(Place, Rating):
- serves_hot_dogs = models.BooleanField()
- serves_pizza = models.BooleanField()
- chef = models.ForeignKey(Chef, null=True, blank=True)
-
- class Meta(Rating.Meta):
- db_table = 'my_restaurant'
-
- def __unicode__(self):
- return u"%s the restaurant" % self.name
-
-class ItalianRestaurant(Restaurant):
- serves_gnocchi = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the italian restaurant" % self.name
-
-class Supplier(Place):
- customers = models.ManyToManyField(Restaurant, related_name='provider')
-
- def __unicode__(self):
- return u"%s the supplier" % self.name
-
-class ParkingLot(Place):
- # An explicit link to the parent (we can control the attribute name).
- parent = models.OneToOneField(Place, primary_key=True, parent_link=True)
- main_site = models.ForeignKey(Place, related_name='lot')
-
- def __unicode__(self):
- return u"%s the parking lot" % self.name
-
-#
-# Abstract base classes with related models where the sub-class has the
-# same name in a different app and inherits from the same abstract base
-# class.
-# NOTE: The actual API tests for the following classes are in
-# model_inheritance_same_model_name/models.py - They are defined
-# here in order to have the name conflict between apps
-#
-
-class Title(models.Model):
- title = models.CharField(max_length=50)
-
-class NamedURL(models.Model):
- title = models.ForeignKey(Title, related_name='attached_%(app_label)s_%(class)s_set')
- url = models.URLField()
-
- class Meta:
- abstract = True
-
-class Copy(NamedURL):
- content = models.TextField()
-
- def __unicode__(self):
- return self.content
diff --git a/parts/django/tests/modeltests/model_inheritance/tests.py b/parts/django/tests/modeltests/model_inheritance/tests.py
deleted file mode 100644
index 80dd0de..0000000
--- a/parts/django/tests/modeltests/model_inheritance/tests.py
+++ /dev/null
@@ -1,281 +0,0 @@
-from operator import attrgetter
-
-from django.conf import settings
-from django.core.exceptions import FieldError
-from django.db import connection
-from django.test import TestCase
-
-from models import (Chef, CommonInfo, ItalianRestaurant, ParkingLot, Place,
- Post, Restaurant, Student, StudentWorker, Supplier, Worker)
-
-
-class ModelInheritanceTests(TestCase):
- def test_abstract(self):
- # The Student and Worker models both have 'name' and 'age' fields on
- # them and inherit the __unicode__() method, just as with normal Python
- # subclassing. This is useful if you want to factor out common
- # information for programming purposes, but still completely
- # independent separate models at the database level.
- w1 = Worker.objects.create(name="Fred", age=35, job="Quarry worker")
- w2 = Worker.objects.create(name="Barney", age=34, job="Quarry worker")
-
- s = Student.objects.create(name="Pebbles", age=5, school_class="1B")
-
- self.assertEqual(unicode(w1), "Worker Fred")
- self.assertEqual(unicode(s), "Student Pebbles")
-
- # The children inherit the Meta class of their parents (if they don't
- # specify their own).
- self.assertQuerysetEqual(
- Worker.objects.values("name"), [
- {"name": "Barney"},
- {"name": "Fred"},
- ],
- lambda o: o
- )
-
- # Since Student does not subclass CommonInfo's Meta, it has the effect
- # of completely overriding it. So ordering by name doesn't take place
- # for Students.
- self.assertEqual(Student._meta.ordering, [])
-
- # However, the CommonInfo class cannot be used as a normal model (it
- # doesn't exist as a model).
- self.assertRaises(AttributeError, lambda: CommonInfo.objects.all())
-
- # A StudentWorker which does not exist is both a Student and Worker
- # which does not exist.
- self.assertRaises(Student.DoesNotExist,
- StudentWorker.objects.get, pk=12321321
- )
- self.assertRaises(Worker.DoesNotExist,
- StudentWorker.objects.get, pk=12321321
- )
-
- # MultipleObjectsReturned is also inherited.
- # This is written out "long form", rather than using __init__/create()
- # because of a bug with diamond inheritance (#10808)
- sw1 = StudentWorker()
- sw1.name = "Wilma"
- sw1.age = 35
- sw1.save()
- sw2 = StudentWorker()
- sw2.name = "Betty"
- sw2.age = 24
- sw2.save()
-
- self.assertRaises(Student.MultipleObjectsReturned,
- StudentWorker.objects.get, pk__lt=sw2.pk + 100
- )
- self.assertRaises(Worker.MultipleObjectsReturned,
- StudentWorker.objects.get, pk__lt=sw2.pk + 100
- )
-
- def test_multiple_table(self):
- post = Post.objects.create(title="Lorem Ipsum")
- # The Post model has distinct accessors for the Comment and Link models.
- post.attached_comment_set.create(content="Save $ on V1agr@", is_spam=True)
- post.attached_link_set.create(
- content="The Web framework for perfections with deadlines.",
- url="http://www.djangoproject.com/"
- )
-
- # The Post model doesn't have an attribute called
- # 'attached_%(class)s_set'.
- self.assertRaises(AttributeError,
- getattr, post, "attached_%(class)s_set"
- )
-
- # The Place/Restaurant/ItalianRestaurant models all exist as
- # independent models. However, the subclasses also have transparent
- # access to the fields of their ancestors.
- # Create a couple of Places.
- p1 = Place.objects.create(name="Master Shakes", address="666 W. Jersey")
- p2 = Place.objects.create(name="Ace Harware", address="1013 N. Ashland")
-
- # Test constructor for Restaurant.
- r = Restaurant.objects.create(
- name="Demon Dogs",
- address="944 W. Fullerton",
- serves_hot_dogs=True,
- serves_pizza=False,
- rating=2
- )
- # Test the constructor for ItalianRestaurant.
- c = Chef.objects.create(name="Albert")
- ir = ItalianRestaurant.objects.create(
- name="Ristorante Miron",
- address="1234 W. Ash",
- serves_hot_dogs=False,
- serves_pizza=False,
- serves_gnocchi=True,
- rating=4,
- chef=c
- )
- self.assertQuerysetEqual(
- ItalianRestaurant.objects.filter(address="1234 W. Ash"), [
- "Ristorante Miron",
- ],
- attrgetter("name")
- )
- ir.address = "1234 W. Elm"
- ir.save()
- self.assertQuerysetEqual(
- ItalianRestaurant.objects.filter(address="1234 W. Elm"), [
- "Ristorante Miron",
- ],
- attrgetter("name")
- )
-
- # Make sure Restaurant and ItalianRestaurant have the right fields in
- # the right order.
- self.assertEqual(
- [f.name for f in Restaurant._meta.fields],
- ["id", "name", "address", "place_ptr", "rating", "serves_hot_dogs", "serves_pizza", "chef"]
- )
- self.assertEqual(
- [f.name for f in ItalianRestaurant._meta.fields],
- ["id", "name", "address", "place_ptr", "rating", "serves_hot_dogs", "serves_pizza", "chef", "restaurant_ptr", "serves_gnocchi"],
- )
- self.assertEqual(Restaurant._meta.ordering, ["-rating"])
-
- # Even though p.supplier for a Place 'p' (a parent of a Supplier), a
- # Restaurant object cannot access that reverse relation, since it's not
- # part of the Place-Supplier Hierarchy.
- self.assertQuerysetEqual(Place.objects.filter(supplier__name="foo"), [])
- self.assertRaises(FieldError,
- Restaurant.objects.filter, supplier__name="foo"
- )
-
- # Parent fields can be used directly in filters on the child model.
- self.assertQuerysetEqual(
- Restaurant.objects.filter(name="Demon Dogs"), [
- "Demon Dogs",
- ],
- attrgetter("name")
- )
- self.assertQuerysetEqual(
- ItalianRestaurant.objects.filter(address="1234 W. Elm"), [
- "Ristorante Miron",
- ],
- attrgetter("name")
- )
-
- # Filters against the parent model return objects of the parent's type.
- p = Place.objects.get(name="Demon Dogs")
- self.assertTrue(type(p) is Place)
-
- # Since the parent and child are linked by an automatically created
- # OneToOneField, you can get from the parent to the child by using the
- # child's name.
- self.assertEqual(
- p.restaurant, Restaurant.objects.get(name="Demon Dogs")
- )
- self.assertEqual(
- Place.objects.get(name="Ristorante Miron").restaurant.italianrestaurant,
- ItalianRestaurant.objects.get(name="Ristorante Miron")
- )
- self.assertEqual(
- Restaurant.objects.get(name="Ristorante Miron").italianrestaurant,
- ItalianRestaurant.objects.get(name="Ristorante Miron")
- )
-
- # This won't work because the Demon Dogs restaurant is not an Italian
- # restaurant.
- self.assertRaises(ItalianRestaurant.DoesNotExist,
- lambda: p.restaurant.italianrestaurant
- )
- # An ItalianRestaurant which does not exist is also a Place which does
- # not exist.
- self.assertRaises(Place.DoesNotExist,
- ItalianRestaurant.objects.get, name="The Noodle Void"
- )
- # MultipleObjectsReturned is also inherited.
- self.assertRaises(Place.MultipleObjectsReturned,
- Restaurant.objects.get, id__lt=12321
- )
-
- # Related objects work just as they normally do.
- s1 = Supplier.objects.create(name="Joe's Chickens", address="123 Sesame St")
- s1.customers = [r, ir]
- s2 = Supplier.objects.create(name="Luigi's Pasta", address="456 Sesame St")
- s2.customers = [ir]
-
- # This won't work because the Place we select is not a Restaurant (it's
- # a Supplier).
- p = Place.objects.get(name="Joe's Chickens")
- self.assertRaises(Restaurant.DoesNotExist,
- lambda: p.restaurant
- )
-
- self.assertEqual(p.supplier, s1)
- self.assertQuerysetEqual(
- ir.provider.order_by("-name"), [
- "Luigi's Pasta",
- "Joe's Chickens"
- ],
- attrgetter("name")
- )
- self.assertQuerysetEqual(
- Restaurant.objects.filter(provider__name__contains="Chickens"), [
- "Ristorante Miron",
- "Demon Dogs",
- ],
- attrgetter("name")
- )
- self.assertQuerysetEqual(
- ItalianRestaurant.objects.filter(provider__name__contains="Chickens"), [
- "Ristorante Miron",
- ],
- attrgetter("name"),
- )
-
- park1 = ParkingLot.objects.create(
- name="Main St", address="111 Main St", main_site=s1
- )
- park2 = ParkingLot.objects.create(
- name="Well Lit", address="124 Sesame St", main_site=ir
- )
-
- self.assertEqual(
- Restaurant.objects.get(lot__name="Well Lit").name,
- "Ristorante Miron"
- )
-
- # The update() command can update fields in parent and child classes at
- # once (although it executed multiple SQL queries to do so).
- rows = Restaurant.objects.filter(
- serves_hot_dogs=True, name__contains="D"
- ).update(
- name="Demon Puppies", serves_hot_dogs=False
- )
- self.assertEqual(rows, 1)
-
- r1 = Restaurant.objects.get(pk=r.pk)
- self.assertFalse(r1.serves_hot_dogs)
- self.assertEqual(r1.name, "Demon Puppies")
-
- # The values() command also works on fields from parent models.
- self.assertQuerysetEqual(
- ItalianRestaurant.objects.values("name", "rating"), [
- {"rating": 4, "name": "Ristorante Miron"}
- ],
- lambda o: o
- )
-
- # select_related works with fields from the parent object as if they
- # were a normal part of the model.
- old_DEBUG = settings.DEBUG
- try:
- settings.DEBUG = True
- starting_queries = len(connection.queries)
- ItalianRestaurant.objects.all()[0].chef
- self.assertEqual(len(connection.queries) - starting_queries, 2)
-
- starting_queries = len(connection.queries)
- ItalianRestaurant.objects.select_related("chef")[0].chef
- self.assertEqual(len(connection.queries) - starting_queries, 1)
- finally:
- settings.DEBUG = old_DEBUG
-
-
diff --git a/parts/django/tests/modeltests/model_inheritance_same_model_name/__init__.py b/parts/django/tests/modeltests/model_inheritance_same_model_name/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/model_inheritance_same_model_name/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/model_inheritance_same_model_name/models.py b/parts/django/tests/modeltests/model_inheritance_same_model_name/models.py
deleted file mode 100644
index 40de027..0000000
--- a/parts/django/tests/modeltests/model_inheritance_same_model_name/models.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""
-XX. Model inheritance
-
-Model inheritance across apps can result in models with the same name resulting
-in the need for an %(app_label)s format string. This app specifically tests
-this feature by redefining the Copy model from model_inheritance/models.py
-"""
-
-from django.db import models
-from modeltests.model_inheritance.models import NamedURL
-
-#
-# Abstract base classes with related models
-#
-class Copy(NamedURL):
- content = models.TextField()
-
- def __unicode__(self):
- return self.content
diff --git a/parts/django/tests/modeltests/model_inheritance_same_model_name/tests.py b/parts/django/tests/modeltests/model_inheritance_same_model_name/tests.py
deleted file mode 100644
index 3f1e345..0000000
--- a/parts/django/tests/modeltests/model_inheritance_same_model_name/tests.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from django.test import TestCase
-from modeltests.model_inheritance.models import Title
-
-class InheritanceSameModelNameTests(TestCase):
-
- def setUp(self):
- # The Title model has distinct accessors for both
- # model_inheritance.Copy and model_inheritance_same_model_name.Copy
- # models.
- self.title = Title.objects.create(title='Lorem Ipsum')
-
- def test_inheritance_related_name(self):
- from modeltests.model_inheritance.models import Copy
- self.assertEquals(
- self.title.attached_model_inheritance_copy_set.create(
- content='Save $ on V1agr@',
- url='http://v1agra.com/',
- title='V1agra is spam',
- ), Copy.objects.get(content='Save $ on V1agr@'))
-
- def test_inheritance_with_same_model_name(self):
- from modeltests.model_inheritance_same_model_name.models import Copy
- self.assertEquals(
- self.title.attached_model_inheritance_same_model_name_copy_set.create(
- content='The Web framework for perfectionists with deadlines.',
- url='http://www.djangoproject.com/',
- title='Django Rocks'
- ), Copy.objects.get(content='The Web framework for perfectionists with deadlines.'))
-
- def test_related_name_attribute_exists(self):
- # The Post model doesn't have an attribute called 'attached_%(app_label)s_%(class)s_set'.
- self.assertEqual(hasattr(self.title, 'attached_%(app_label)s_%(class)s_set'), False)
diff --git a/parts/django/tests/modeltests/model_package/__init__.py b/parts/django/tests/modeltests/model_package/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/modeltests/model_package/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/modeltests/model_package/models/__init__.py b/parts/django/tests/modeltests/model_package/models/__init__.py
deleted file mode 100644
index 91e1b02..0000000
--- a/parts/django/tests/modeltests/model_package/models/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Import all the models from subpackages
-from article import Article
-from publication import Publication
diff --git a/parts/django/tests/modeltests/model_package/models/article.py b/parts/django/tests/modeltests/model_package/models/article.py
deleted file mode 100644
index c8fae1c..0000000
--- a/parts/django/tests/modeltests/model_package/models/article.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from django.db import models
-from django.contrib.sites.models import Site
-
-class Article(models.Model):
- sites = models.ManyToManyField(Site)
- headline = models.CharField(max_length=100)
- publications = models.ManyToManyField("model_package.Publication", null=True, blank=True,)
-
- class Meta:
- app_label = 'model_package'
diff --git a/parts/django/tests/modeltests/model_package/models/publication.py b/parts/django/tests/modeltests/model_package/models/publication.py
deleted file mode 100644
index 4dc2d6a..0000000
--- a/parts/django/tests/modeltests/model_package/models/publication.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.db import models
-
-class Publication(models.Model):
- title = models.CharField(max_length=30)
-
- class Meta:
- app_label = 'model_package'
diff --git a/parts/django/tests/modeltests/model_package/tests.py b/parts/django/tests/modeltests/model_package/tests.py
deleted file mode 100644
index e63e2e6..0000000
--- a/parts/django/tests/modeltests/model_package/tests.py
+++ /dev/null
@@ -1,72 +0,0 @@
-from django.contrib.sites.models import Site
-from django.db import models
-from django.test import TestCase
-
-from models.publication import Publication
-from models.article import Article
-
-
-class Advertisment(models.Model):
- customer = models.CharField(max_length=100)
- publications = models.ManyToManyField(
- "model_package.Publication", null=True, blank=True
- )
-
- class Meta:
- app_label = 'model_package'
-
-
-class ModelPackageTests(TestCase):
- def test_model_packages(self):
- p = Publication.objects.create(title="FooBar")
-
- current_site = Site.objects.get_current()
- self.assertEqual(current_site.domain, "example.com")
-
- # Regression for #12168: models split into subpackages still get M2M
- # tables
- a = Article.objects.create(headline="a foo headline")
- a.publications.add(p)
- a.sites.add(current_site)
-
- a = Article.objects.get(id=a.pk)
- self.assertEqual(a.id, a.pk)
- self.assertEqual(a.sites.count(), 1)
-
- # Regression for #12245 - Models can exist in the test package, too
- ad = Advertisment.objects.create(customer="Lawrence Journal-World")
- ad.publications.add(p)
-
- ad = Advertisment.objects.get(id=ad.pk)
- self.assertEqual(ad.publications.count(), 1)
-
- # Regression for #12386 - field names on the autogenerated intermediate
- # class that are specified as dotted strings don't retain any path
- # component for the field or column name
- self.assertEqual(
- Article.publications.through._meta.fields[1].name, 'article'
- )
- self.assertEqual(
- Article.publications.through._meta.fields[1].get_attname_column(),
- ('article_id', 'article_id')
- )
- self.assertEqual(
- Article.publications.through._meta.fields[2].name, 'publication'
- )
- self.assertEqual(
- Article.publications.through._meta.fields[2].get_attname_column(),
- ('publication_id', 'publication_id')
- )
-
- # The oracle backend truncates the name to 'model_package_article_publ233f'.
- self.assertTrue(
- Article._meta.get_field('publications').m2m_db_table() in ('model_package_article_publications', 'model_package_article_publ233f')
- )
-
- self.assertEqual(
- Article._meta.get_field('publications').m2m_column_name(), 'article_id'
- )
- self.assertEqual(
- Article._meta.get_field('publications').m2m_reverse_name(),
- 'publication_id'
- )
diff --git a/parts/django/tests/modeltests/mutually_referential/__init__.py b/parts/django/tests/modeltests/mutually_referential/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/mutually_referential/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/mutually_referential/models.py b/parts/django/tests/modeltests/mutually_referential/models.py
deleted file mode 100644
index db05cbc..0000000
--- a/parts/django/tests/modeltests/mutually_referential/models.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""
-24. Mutually referential many-to-one relationships
-
-Strings can be used instead of model literals to set up "lazy" relations.
-"""
-
-from django.db.models import *
-
-class Parent(Model):
- name = CharField(max_length=100)
-
- # Use a simple string for forward declarations.
- bestchild = ForeignKey("Child", null=True, related_name="favoured_by")
-
-class Child(Model):
- name = CharField(max_length=100)
-
- # You can also explicitally specify the related app.
- parent = ForeignKey("mutually_referential.Parent")
diff --git a/parts/django/tests/modeltests/mutually_referential/tests.py b/parts/django/tests/modeltests/mutually_referential/tests.py
deleted file mode 100644
index 101d67c..0000000
--- a/parts/django/tests/modeltests/mutually_referential/tests.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.test import TestCase
-from models import Parent, Child
-
-class MutuallyReferentialTests(TestCase):
-
- def test_mutually_referential(self):
- # Create a Parent
- q = Parent(name='Elizabeth')
- q.save()
-
- # Create some children
- c = q.child_set.create(name='Charles')
- e = q.child_set.create(name='Edward')
-
- # Set the best child
- # No assertion require here; if basic assignment and
- # deletion works, the test passes.
- q.bestchild = c
- q.save()
- q.delete()
diff --git a/parts/django/tests/modeltests/one_to_one/__init__.py b/parts/django/tests/modeltests/one_to_one/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/one_to_one/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/one_to_one/models.py b/parts/django/tests/modeltests/one_to_one/models.py
deleted file mode 100644
index f263735..0000000
--- a/parts/django/tests/modeltests/one_to_one/models.py
+++ /dev/null
@@ -1,47 +0,0 @@
-"""
-10. One-to-one relationships
-
-To define a one-to-one relationship, use ``OneToOneField()``.
-
-In this example, a ``Place`` optionally can be a ``Restaurant``.
-"""
-
-from django.db import models, transaction, IntegrityError
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
- address = models.CharField(max_length=80)
-
- def __unicode__(self):
- return u"%s the place" % self.name
-
-class Restaurant(models.Model):
- place = models.OneToOneField(Place, primary_key=True)
- serves_hot_dogs = models.BooleanField()
- serves_pizza = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the restaurant" % self.place.name
-
-class Waiter(models.Model):
- restaurant = models.ForeignKey(Restaurant)
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return u"%s the waiter at %s" % (self.name, self.restaurant)
-
-class ManualPrimaryKey(models.Model):
- primary_key = models.CharField(max_length=10, primary_key=True)
- name = models.CharField(max_length = 50)
-
-class RelatedModel(models.Model):
- link = models.OneToOneField(ManualPrimaryKey)
- name = models.CharField(max_length = 50)
-
-class MultiModel(models.Model):
- link1 = models.OneToOneField(Place)
- link2 = models.OneToOneField(ManualPrimaryKey)
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return u"Multimodel %s" % self.name
diff --git a/parts/django/tests/modeltests/one_to_one/tests.py b/parts/django/tests/modeltests/one_to_one/tests.py
deleted file mode 100644
index c3e1704..0000000
--- a/parts/django/tests/modeltests/one_to_one/tests.py
+++ /dev/null
@@ -1,119 +0,0 @@
-from django.test import TestCase
-from django.db import transaction, IntegrityError
-from models import Place, Restaurant, Waiter, ManualPrimaryKey, RelatedModel, MultiModel
-
-class OneToOneTests(TestCase):
-
- def setUp(self):
- self.p1 = Place(name='Demon Dogs', address='944 W. Fullerton')
- self.p1.save()
- self.p2 = Place(name='Ace Hardware', address='1013 N. Ashland')
- self.p2.save()
- self.r = Restaurant(place=self.p1, serves_hot_dogs=True, serves_pizza=False)
- self.r.save()
-
- def test_getter(self):
- # A Restaurant can access its place.
- self.assertEqual(repr(self.r.place), '<Place: Demon Dogs the place>')
- # A Place can access its restaurant, if available.
- self.assertEqual(repr(self.p1.restaurant), '<Restaurant: Demon Dogs the restaurant>')
- # p2 doesn't have an associated restaurant.
- self.assertRaises(Restaurant.DoesNotExist, getattr, self.p2, 'restaurant')
-
- def test_setter(self):
- # Set the place using assignment notation. Because place is the primary
- # key on Restaurant, the save will create a new restaurant
- self.r.place = self.p2
- self.r.save()
- self.assertEqual(repr(self.p2.restaurant), '<Restaurant: Ace Hardware the restaurant>')
- self.assertEqual(repr(self.r.place), '<Place: Ace Hardware the place>')
- self.assertEqual(self.p2.pk, self.r.pk)
- # Set the place back again, using assignment in the reverse direction.
- self.p1.restaurant = self.r
- self.assertEqual(repr(self.p1.restaurant), '<Restaurant: Demon Dogs the restaurant>')
- r = Restaurant.objects.get(pk=self.p1.id)
- self.assertEqual(repr(r.place), '<Place: Demon Dogs the place>')
-
- def test_manager_all(self):
- # Restaurant.objects.all() just returns the Restaurants, not the Places.
- self.assertQuerysetEqual(Restaurant.objects.all(), [
- '<Restaurant: Demon Dogs the restaurant>',
- ])
- # Place.objects.all() returns all Places, regardless of whether they
- # have Restaurants.
- self.assertQuerysetEqual(Place.objects.order_by('name'), [
- '<Place: Ace Hardware the place>',
- '<Place: Demon Dogs the place>',
- ])
-
- def test_manager_get(self):
- def assert_get_restaurant(**params):
- self.assertEqual(repr(Restaurant.objects.get(**params)),
- '<Restaurant: Demon Dogs the restaurant>')
- assert_get_restaurant(place__id__exact=self.p1.pk)
- assert_get_restaurant(place__id=self.p1.pk)
- assert_get_restaurant(place__exact=self.p1.pk)
- assert_get_restaurant(place__exact=self.p1)
- assert_get_restaurant(place=self.p1.pk)
- assert_get_restaurant(place=self.p1)
- assert_get_restaurant(pk=self.p1.pk)
- assert_get_restaurant(place__pk__exact=self.p1.pk)
- assert_get_restaurant(place__pk=self.p1.pk)
- assert_get_restaurant(place__name__startswith="Demon")
-
- def assert_get_place(**params):
- self.assertEqual(repr(Place.objects.get(**params)),
- '<Place: Demon Dogs the place>')
- assert_get_place(restaurant__place__exact=self.p1.pk)
- assert_get_place(restaurant__place__exact=self.p1)
- assert_get_place(restaurant__place__pk=self.p1.pk)
- assert_get_place(restaurant__exact=self.p1.pk)
- assert_get_place(restaurant__exact=self.r)
- assert_get_place(restaurant__pk=self.p1.pk)
- assert_get_place(restaurant=self.p1.pk)
- assert_get_place(restaurant=self.r)
- assert_get_place(id__exact=self.p1.pk)
- assert_get_place(pk=self.p1.pk)
-
- def test_foreign_key(self):
- # Add a Waiter to the Restaurant.
- w = self.r.waiter_set.create(name='Joe')
- w.save()
- self.assertEqual(repr(w), '<Waiter: Joe the waiter at Demon Dogs the restaurant>')
- # Query the waiters
- def assert_filter_waiters(**params):
- self.assertQuerysetEqual(Waiter.objects.filter(**params), [
- '<Waiter: Joe the waiter at Demon Dogs the restaurant>'
- ])
- assert_filter_waiters(restaurant__place__exact=self.p1.pk)
- assert_filter_waiters(restaurant__place__exact=self.p1)
- assert_filter_waiters(restaurant__place__pk=self.p1.pk)
- assert_filter_waiters(restaurant__exact=self.p1.pk)
- assert_filter_waiters(restaurant__exact=self.p1)
- assert_filter_waiters(restaurant__pk=self.p1.pk)
- assert_filter_waiters(restaurant=self.p1.pk)
- assert_filter_waiters(restaurant=self.r)
- assert_filter_waiters(id__exact=self.p1.pk)
- assert_filter_waiters(pk=self.p1.pk)
- # Delete the restaurant; the waiter should also be removed
- r = Restaurant.objects.get(pk=self.p1.pk)
- r.delete()
- self.assertEqual(Waiter.objects.count(), 0)
-
- def test_multiple_o2o(self):
- # One-to-one fields still work if you create your own primary key
- o1 = ManualPrimaryKey(primary_key="abc123", name="primary")
- o1.save()
- o2 = RelatedModel(link=o1, name="secondary")
- o2.save()
-
- # You can have multiple one-to-one fields on a model, too.
- x1 = MultiModel(link1=self.p1, link2=o1, name="x1")
- x1.save()
- self.assertEqual(repr(o1.multimodel), '<MultiModel: Multimodel x1>')
- # This will fail because each one-to-one field must be unique (and
- # link2=o1 was used for x1, above).
- sid = transaction.savepoint()
- mm = MultiModel(link1=self.p2, link2=o1, name="x1")
- self.assertRaises(IntegrityError, mm.save)
- transaction.savepoint_rollback(sid)
diff --git a/parts/django/tests/modeltests/or_lookups/__init__.py b/parts/django/tests/modeltests/or_lookups/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/or_lookups/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/or_lookups/models.py b/parts/django/tests/modeltests/or_lookups/models.py
deleted file mode 100644
index 7f14ba5..0000000
--- a/parts/django/tests/modeltests/or_lookups/models.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""
-19. OR lookups
-
-To perform an OR lookup, or a lookup that combines ANDs and ORs, combine
-``QuerySet`` objects using ``&`` and ``|`` operators.
-
-Alternatively, use positional arguments, and pass one or more expressions of
-clauses using the variable ``django.db.models.Q`` (or any object with an
-``add_to_query`` method).
-"""
-
-from django.db import models
-
-class Article(models.Model):
- headline = models.CharField(max_length=50)
- pub_date = models.DateTimeField()
-
- class Meta:
- ordering = ('pub_date',)
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/modeltests/or_lookups/tests.py b/parts/django/tests/modeltests/or_lookups/tests.py
deleted file mode 100644
index ad218cd..0000000
--- a/parts/django/tests/modeltests/or_lookups/tests.py
+++ /dev/null
@@ -1,232 +0,0 @@
-from datetime import datetime
-from operator import attrgetter
-
-from django.db.models import Q
-from django.test import TestCase
-
-from models import Article
-
-
-class OrLookupsTests(TestCase):
-
- def setUp(self):
- self.a1 = Article.objects.create(
- headline='Hello', pub_date=datetime(2005, 11, 27)
- ).pk
- self.a2 = Article.objects.create(
- headline='Goodbye', pub_date=datetime(2005, 11, 28)
- ).pk
- self.a3 = Article.objects.create(
- headline='Hello and goodbye', pub_date=datetime(2005, 11, 29)
- ).pk
-
- def test_filter_or(self):
- self.assertQuerysetEqual(
- Article.objects.filter(headline__startswith='Hello') | Article.objects.filter(headline__startswith='Goodbye'), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline")
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(headline__contains='Hello') | Article.objects.filter(headline__contains='bye'), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline")
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(headline__iexact='Hello') | Article.objects.filter(headline__contains='ood'), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline")
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(Q(headline__startswith='Hello') | Q(headline__startswith='Goodbye')), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline")
- )
-
-
- def test_stages(self):
- # You can shorten this syntax with code like the following, which is
- # especially useful if building the query in stages:
- articles = Article.objects.all()
- self.assertQuerysetEqual(
- articles.filter(headline__startswith='Hello') & articles.filter(headline__startswith='Goodbye'),
- []
- )
- self.assertQuerysetEqual(
- articles.filter(headline__startswith='Hello') & articles.filter(headline__contains='bye'), [
- 'Hello and goodbye'
- ],
- attrgetter("headline")
- )
-
- def test_pk_q(self):
- self.assertQuerysetEqual(
- Article.objects.filter(Q(pk=self.a1) | Q(pk=self.a2)), [
- 'Hello',
- 'Goodbye'
- ],
- attrgetter("headline")
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(Q(pk=self.a1) | Q(pk=self.a2) | Q(pk=self.a3)), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline"),
- )
-
- def test_pk_in(self):
- self.assertQuerysetEqual(
- Article.objects.filter(pk__in=[self.a1, self.a2, self.a3]), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline"),
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(pk__in=(self.a1, self.a2, self.a3)), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline"),
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(pk__in=[self.a1, self.a2, self.a3, 40000]), [
- 'Hello',
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline"),
- )
-
- def test_q_negated(self):
- # Q objects can be negated
- self.assertQuerysetEqual(
- Article.objects.filter(Q(pk=self.a1) | ~Q(pk=self.a2)), [
- 'Hello',
- 'Hello and goodbye'
- ],
- attrgetter("headline")
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(~Q(pk=self.a1) & ~Q(pk=self.a2)), [
- 'Hello and goodbye'
- ],
- attrgetter("headline"),
- )
- # This allows for more complex queries than filter() and exclude()
- # alone would allow
- self.assertQuerysetEqual(
- Article.objects.filter(Q(pk=self.a1) & (~Q(pk=self.a2) | Q(pk=self.a3))), [
- 'Hello'
- ],
- attrgetter("headline"),
- )
-
- def test_complex_filter(self):
- # The 'complex_filter' method supports framework features such as
- # 'limit_choices_to' which normally take a single dictionary of lookup
- # arguments but need to support arbitrary queries via Q objects too.
- self.assertQuerysetEqual(
- Article.objects.complex_filter({'pk': self.a1}), [
- 'Hello'
- ],
- attrgetter("headline"),
- )
-
- self.assertQuerysetEqual(
- Article.objects.complex_filter(Q(pk=self.a1) | Q(pk=self.a2)), [
- 'Hello',
- 'Goodbye'
- ],
- attrgetter("headline"),
- )
-
- def test_empty_in(self):
- # Passing "in" an empty list returns no results ...
- self.assertQuerysetEqual(
- Article.objects.filter(pk__in=[]),
- []
- )
- # ... but can return results if we OR it with another query.
- self.assertQuerysetEqual(
- Article.objects.filter(Q(pk__in=[]) | Q(headline__icontains='goodbye')), [
- 'Goodbye',
- 'Hello and goodbye'
- ],
- attrgetter("headline"),
- )
-
- def test_q_and(self):
- # Q arg objects are ANDed
- self.assertQuerysetEqual(
- Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye')), [
- 'Hello and goodbye'
- ],
- attrgetter("headline")
- )
- # Q arg AND order is irrelevant
- self.assertQuerysetEqual(
- Article.objects.filter(Q(headline__contains='bye'), headline__startswith='Hello'), [
- 'Hello and goodbye'
- ],
- attrgetter("headline"),
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(Q(headline__startswith='Hello') & Q(headline__startswith='Goodbye')),
- []
- )
-
- def test_q_exclude(self):
- self.assertQuerysetEqual(
- Article.objects.exclude(Q(headline__startswith='Hello')), [
- 'Goodbye'
- ],
- attrgetter("headline")
- )
-
- def test_other_arg_queries(self):
- # Try some arg queries with operations other than filter.
- self.assertEqual(
- Article.objects.get(Q(headline__startswith='Hello'), Q(headline__contains='bye')).headline,
- 'Hello and goodbye'
- )
-
- self.assertEqual(
- Article.objects.filter(Q(headline__startswith='Hello') | Q(headline__contains='bye')).count(),
- 3
- )
-
- self.assertQuerysetEqual(
- Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye')).values(), [
- {"headline": "Hello and goodbye", "id": self.a3, "pub_date": datetime(2005, 11, 29)},
- ],
- lambda o: o,
- )
-
- self.assertEqual(
- Article.objects.filter(Q(headline__startswith='Hello')).in_bulk([self.a1, self.a2]),
- {self.a1: Article.objects.get(pk=self.a1)}
- )
diff --git a/parts/django/tests/modeltests/order_with_respect_to/__init__.py b/parts/django/tests/modeltests/order_with_respect_to/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/order_with_respect_to/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/order_with_respect_to/models.py b/parts/django/tests/modeltests/order_with_respect_to/models.py
deleted file mode 100644
index 59f01d4..0000000
--- a/parts/django/tests/modeltests/order_with_respect_to/models.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""
-Tests for the order_with_respect_to Meta attribute.
-"""
-
-from django.db import models
-
-
-class Question(models.Model):
- text = models.CharField(max_length=200)
-
-class Answer(models.Model):
- text = models.CharField(max_length=200)
- question = models.ForeignKey(Question)
-
- class Meta:
- order_with_respect_to = 'question'
-
- def __unicode__(self):
- return unicode(self.text)
-
-class Post(models.Model):
- title = models.CharField(max_length=200)
- parent = models.ForeignKey("self", related_name="children", null=True)
-
- class Meta:
- order_with_respect_to = "parent"
-
- def __unicode__(self):
- return self.title
diff --git a/parts/django/tests/modeltests/order_with_respect_to/tests.py b/parts/django/tests/modeltests/order_with_respect_to/tests.py
deleted file mode 100644
index 328d968..0000000
--- a/parts/django/tests/modeltests/order_with_respect_to/tests.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from operator import attrgetter
-
-from django.test import TestCase
-
-from models import Post, Question, Answer
-
-
-class OrderWithRespectToTests(TestCase):
- def test_basic(self):
- q1 = Question.objects.create(text="Which Beatle starts with the letter 'R'?")
- q2 = Question.objects.create(text="What is your name?")
-
- Answer.objects.create(text="John", question=q1)
- Answer.objects.create(text="Jonno", question=q2)
- Answer.objects.create(text="Paul", question=q1)
- Answer.objects.create(text="Paulo", question=q2)
- Answer.objects.create(text="George", question=q1)
- Answer.objects.create(text="Ringo", question=q1)
-
- # The answers will always be ordered in the order they were inserted.
- self.assertQuerysetEqual(
- q1.answer_set.all(), [
- "John", "Paul", "George", "Ringo",
- ],
- attrgetter("text"),
- )
-
- # We can retrieve the answers related to a particular object, in the
- # order they were created, once we have a particular object.
- a1 = Answer.objects.filter(question=q1)[0]
- self.assertEqual(a1.text, "John")
- a2 = a1.get_next_in_order()
- self.assertEqual(a2.text, "Paul")
- a4 = list(Answer.objects.filter(question=q1))[-1]
- self.assertEqual(a4.text, "Ringo")
- self.assertEqual(a4.get_previous_in_order().text, "George")
-
- # Determining (and setting) the ordering for a particular item is also
- # possible.
- id_list = [o.pk for o in q1.answer_set.all()]
- self.assertEqual(a2.question.get_answer_order(), id_list)
-
- a5 = Answer.objects.create(text="Number five", question=q1)
-
- # It doesn't matter which answer we use to check the order, it will
- # always be the same.
- self.assertEqual(
- a2.question.get_answer_order(), a5.question.get_answer_order()
- )
-
- # The ordering can be altered:
- id_list = [o.pk for o in q1.answer_set.all()]
- x = id_list.pop()
- id_list.insert(-1, x)
- self.assertNotEqual(a5.question.get_answer_order(), id_list)
- a5.question.set_answer_order(id_list)
- self.assertQuerysetEqual(
- q1.answer_set.all(), [
- "John", "Paul", "George", "Number five", "Ringo"
- ],
- attrgetter("text")
- )
-
- def test_recursive_ordering(self):
- p1 = Post.objects.create(title='1')
- p2 = Post.objects.create(title='2')
- p1_1 = Post.objects.create(title="1.1", parent=p1)
- p1_2 = Post.objects.create(title="1.2", parent=p1)
- p2_1 = Post.objects.create(title="2.1", parent=p2)
- p1_3 = Post.objects.create(title="1.3", parent=p1)
- self.assertEqual(p1.get_post_order(), [p1_1.pk, p1_2.pk, p1_3.pk])
diff --git a/parts/django/tests/modeltests/ordering/__init__.py b/parts/django/tests/modeltests/ordering/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/ordering/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/ordering/models.py b/parts/django/tests/modeltests/ordering/models.py
deleted file mode 100644
index 25d3c2c..0000000
--- a/parts/django/tests/modeltests/ordering/models.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""
-6. Specifying ordering
-
-Specify default ordering for a model using the ``ordering`` attribute, which
-should be a list or tuple of field names. This tells Django how to order
-``QuerySet`` results.
-
-If a field name in ``ordering`` starts with a hyphen, that field will be
-ordered in descending order. Otherwise, it'll be ordered in ascending order.
-The special-case field name ``"?"`` specifies random order.
-
-The ordering attribute is not required. If you leave it off, ordering will be
-undefined -- not random, just undefined.
-"""
-
-from django.db import models
-
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateTimeField()
- class Meta:
- ordering = ('-pub_date', 'headline')
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/modeltests/ordering/tests.py b/parts/django/tests/modeltests/ordering/tests.py
deleted file mode 100644
index 77862c5..0000000
--- a/parts/django/tests/modeltests/ordering/tests.py
+++ /dev/null
@@ -1,137 +0,0 @@
-from datetime import datetime
-from operator import attrgetter
-
-from django.test import TestCase
-
-from models import Article
-
-
-class OrderingTests(TestCase):
- def test_basic(self):
- a1 = Article.objects.create(
- headline="Article 1", pub_date=datetime(2005, 7, 26)
- )
- a2 = Article.objects.create(
- headline="Article 2", pub_date=datetime(2005, 7, 27)
- )
- a3 = Article.objects.create(
- headline="Article 3", pub_date=datetime(2005, 7, 27)
- )
- a4 = Article.objects.create(
- headline="Article 4", pub_date=datetime(2005, 7, 28)
- )
-
- # By default, Article.objects.all() orders by pub_date descending, then
- # headline ascending.
- self.assertQuerysetEqual(
- Article.objects.all(), [
- "Article 4",
- "Article 2",
- "Article 3",
- "Article 1",
- ],
- attrgetter("headline")
- )
-
- # Override ordering with order_by, which is in the same format as the
- # ordering attribute in models.
- self.assertQuerysetEqual(
- Article.objects.order_by("headline"), [
- "Article 1",
- "Article 2",
- "Article 3",
- "Article 4",
- ],
- attrgetter("headline")
- )
- self.assertQuerysetEqual(
- Article.objects.order_by("pub_date", "-headline"), [
- "Article 1",
- "Article 3",
- "Article 2",
- "Article 4",
- ],
- attrgetter("headline")
- )
-
- # Only the last order_by has any effect (since they each override any
- # previous ordering).
- self.assertQuerysetEqual(
- Article.objects.order_by("id"), [
- "Article 1",
- "Article 2",
- "Article 3",
- "Article 4",
- ],
- attrgetter("headline")
- )
- self.assertQuerysetEqual(
- Article.objects.order_by("id").order_by("-headline"), [
- "Article 4",
- "Article 3",
- "Article 2",
- "Article 1",
- ],
- attrgetter("headline")
- )
-
- # Use the 'stop' part of slicing notation to limit the results.
- self.assertQuerysetEqual(
- Article.objects.order_by("headline")[:2], [
- "Article 1",
- "Article 2",
- ],
- attrgetter("headline")
- )
-
- # Use the 'stop' and 'start' parts of slicing notation to offset the
- # result list.
- self.assertQuerysetEqual(
- Article.objects.order_by("headline")[1:3], [
- "Article 2",
- "Article 3",
- ],
- attrgetter("headline")
- )
-
- # Getting a single item should work too:
- self.assertEqual(Article.objects.all()[0], a4)
-
- # Use '?' to order randomly.
- self.assertEqual(
- len(list(Article.objects.order_by("?"))), 4
- )
-
- # Ordering can be reversed using the reverse() method on a queryset.
- # This allows you to extract things like "the last two items" (reverse
- # and then take the first two).
- self.assertQuerysetEqual(
- Article.objects.all().reverse()[:2], [
- "Article 1",
- "Article 3",
- ],
- attrgetter("headline")
- )
-
- # Ordering can be based on fields included from an 'extra' clause
- self.assertQuerysetEqual(
- Article.objects.extra(select={"foo": "pub_date"}, order_by=["foo", "headline"]), [
- "Article 1",
- "Article 2",
- "Article 3",
- "Article 4",
- ],
- attrgetter("headline")
- )
-
- # If the extra clause uses an SQL keyword for a name, it will be
- # protected by quoting.
- self.assertQuerysetEqual(
- Article.objects.extra(select={"order": "pub_date"}, order_by=["order", "headline"]), [
- "Article 1",
- "Article 2",
- "Article 3",
- "Article 4",
- ],
- attrgetter("headline")
- )
diff --git a/parts/django/tests/modeltests/pagination/__init__.py b/parts/django/tests/modeltests/pagination/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/pagination/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/pagination/models.py b/parts/django/tests/modeltests/pagination/models.py
deleted file mode 100644
index 48484dd..0000000
--- a/parts/django/tests/modeltests/pagination/models.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-30. Object pagination
-
-Django provides a framework for paginating a list of objects in a few lines
-of code. This is often useful for dividing search results or long lists of
-objects into easily readable pages.
-"""
-
-from django.db import models
-
-
-class Article(models.Model):
- headline = models.CharField(max_length=100, default='Default headline')
- pub_date = models.DateTimeField()
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/modeltests/pagination/tests.py b/parts/django/tests/modeltests/pagination/tests.py
deleted file mode 100644
index eaee466..0000000
--- a/parts/django/tests/modeltests/pagination/tests.py
+++ /dev/null
@@ -1,132 +0,0 @@
-from datetime import datetime
-from operator import attrgetter
-
-from django.core.paginator import Paginator, InvalidPage, EmptyPage
-from django.test import TestCase
-
-from models import Article
-
-
-class CountContainer(object):
- def count(self):
- return 42
-
-class LenContainer(object):
- def __len__(self):
- return 42
-
-class PaginationTests(TestCase):
- def setUp(self):
- # Prepare a list of objects for pagination.
- for x in range(1, 10):
- a = Article(headline='Article %s' % x, pub_date=datetime(2005, 7, 29))
- a.save()
-
- def test_paginator(self):
- paginator = Paginator(Article.objects.all(), 5)
- self.assertEqual(9, paginator.count)
- self.assertEqual(2, paginator.num_pages)
- self.assertEqual([1, 2], paginator.page_range)
-
- def test_first_page(self):
- paginator = Paginator(Article.objects.all(), 5)
- p = paginator.page(1)
- self.assertEqual(u"<Page 1 of 2>", unicode(p))
- self.assertQuerysetEqual(p.object_list, [
- "<Article: Article 1>",
- "<Article: Article 2>",
- "<Article: Article 3>",
- "<Article: Article 4>",
- "<Article: Article 5>"
- ]
- )
- self.assertTrue(p.has_next())
- self.assertFalse(p.has_previous())
- self.assertTrue(p.has_other_pages())
- self.assertEqual(2, p.next_page_number())
- self.assertEqual(0, p.previous_page_number())
- self.assertEqual(1, p.start_index())
- self.assertEqual(5, p.end_index())
-
- def test_last_page(self):
- paginator = Paginator(Article.objects.all(), 5)
- p = paginator.page(2)
- self.assertEqual(u"<Page 2 of 2>", unicode(p))
- self.assertQuerysetEqual(p.object_list, [
- "<Article: Article 6>",
- "<Article: Article 7>",
- "<Article: Article 8>",
- "<Article: Article 9>"
- ]
- )
- self.assertFalse(p.has_next())
- self.assertTrue(p.has_previous())
- self.assertTrue(p.has_other_pages())
- self.assertEqual(3, p.next_page_number())
- self.assertEqual(1, p.previous_page_number())
- self.assertEqual(6, p.start_index())
- self.assertEqual(9, p.end_index())
-
- def test_empty_page(self):
- paginator = Paginator(Article.objects.all(), 5)
- self.assertRaises(EmptyPage, paginator.page, 0)
- self.assertRaises(EmptyPage, paginator.page, 3)
-
- # Empty paginators with allow_empty_first_page=True.
- paginator = Paginator(Article.objects.filter(id=0), 5, allow_empty_first_page=True)
- self.assertEqual(0, paginator.count)
- self.assertEqual(1, paginator.num_pages)
- self.assertEqual([1], paginator.page_range)
-
- # Empty paginators with allow_empty_first_page=False.
- paginator = Paginator(Article.objects.filter(id=0), 5, allow_empty_first_page=False)
- self.assertEqual(0, paginator.count)
- self.assertEqual(0, paginator.num_pages)
- self.assertEqual([], paginator.page_range)
-
- def test_invalid_page(self):
- paginator = Paginator(Article.objects.all(), 5)
- self.assertRaises(InvalidPage, paginator.page, 7)
-
- def test_orphans(self):
- # Add a few more records to test out the orphans feature.
- for x in range(10, 13):
- Article(headline="Article %s" % x, pub_date=datetime(2006, 10, 6)).save()
-
- # With orphans set to 3 and 10 items per page, we should get all 12 items on a single page.
- paginator = Paginator(Article.objects.all(), 10, orphans=3)
- self.assertEqual(1, paginator.num_pages)
-
- # With orphans only set to 1, we should get two pages.
- paginator = Paginator(Article.objects.all(), 10, orphans=1)
- self.assertEqual(2, paginator.num_pages)
-
- def test_paginate_list(self):
- # Paginators work with regular lists/tuples, too -- not just with QuerySets.
- paginator = Paginator([1, 2, 3, 4, 5, 6, 7, 8, 9], 5)
- self.assertEqual(9, paginator.count)
- self.assertEqual(2, paginator.num_pages)
- self.assertEqual([1, 2], paginator.page_range)
- p = paginator.page(1)
- self.assertEqual(u"<Page 1 of 2>", unicode(p))
- self.assertEqual([1, 2, 3, 4, 5], p.object_list)
- self.assertTrue(p.has_next())
- self.assertFalse(p.has_previous())
- self.assertTrue(p.has_other_pages())
- self.assertEqual(2, p.next_page_number())
- self.assertEqual(0, p.previous_page_number())
- self.assertEqual(1, p.start_index())
- self.assertEqual(5, p.end_index())
-
- def test_paginate_misc_classes(self):
- # Paginator can be passed other objects with a count() method.
- paginator = Paginator(CountContainer(), 10)
- self.assertEqual(42, paginator.count)
- self.assertEqual(5, paginator.num_pages)
- self.assertEqual([1, 2, 3, 4, 5], paginator.page_range)
-
- # Paginator can be passed other objects that implement __len__.
- paginator = Paginator(LenContainer(), 10)
- self.assertEqual(42, paginator.count)
- self.assertEqual(5, paginator.num_pages)
- self.assertEqual([1, 2, 3, 4, 5], paginator.page_range)
diff --git a/parts/django/tests/modeltests/properties/__init__.py b/parts/django/tests/modeltests/properties/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/properties/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/properties/models.py b/parts/django/tests/modeltests/properties/models.py
deleted file mode 100644
index 390efe3..0000000
--- a/parts/django/tests/modeltests/properties/models.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""
-22. Using properties on models
-
-Use properties on models just like on any other Python object.
-"""
-
-from django.db import models
-
-class Person(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
-
- def _get_full_name(self):
- return "%s %s" % (self.first_name, self.last_name)
-
- def _set_full_name(self, combined_name):
- self.first_name, self.last_name = combined_name.split(' ', 1)
-
- full_name = property(_get_full_name)
-
- full_name_2 = property(_get_full_name, _set_full_name)
diff --git a/parts/django/tests/modeltests/properties/tests.py b/parts/django/tests/modeltests/properties/tests.py
deleted file mode 100644
index e31ac58..0000000
--- a/parts/django/tests/modeltests/properties/tests.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.test import TestCase
-from models import Person
-
-class PropertyTests(TestCase):
-
- def setUp(self):
- self.a = Person(first_name='John', last_name='Lennon')
- self.a.save()
-
- def test_getter(self):
- self.assertEqual(self.a.full_name, 'John Lennon')
-
- def test_setter(self):
- # The "full_name" property hasn't provided a "set" method.
- self.assertRaises(AttributeError, setattr, self.a, 'full_name', 'Paul McCartney')
-
- # But "full_name_2" has, and it can be used to initialise the class.
- a2 = Person(full_name_2 = 'Paul McCartney')
- a2.save()
- self.assertEqual(a2.first_name, 'Paul')
diff --git a/parts/django/tests/modeltests/proxy_model_inheritance/__init__.py b/parts/django/tests/modeltests/proxy_model_inheritance/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/proxy_model_inheritance/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/proxy_model_inheritance/app1/__init__.py b/parts/django/tests/modeltests/proxy_model_inheritance/app1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/proxy_model_inheritance/app1/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/proxy_model_inheritance/app1/models.py b/parts/django/tests/modeltests/proxy_model_inheritance/app1/models.py
deleted file mode 100644
index 59a9ac7..0000000
--- a/parts/django/tests/modeltests/proxy_model_inheritance/app1/models.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from app2.models import NiceModel
-
-class ProxyModel(NiceModel):
- class Meta:
- proxy = True
diff --git a/parts/django/tests/modeltests/proxy_model_inheritance/app2/__init__.py b/parts/django/tests/modeltests/proxy_model_inheritance/app2/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/proxy_model_inheritance/app2/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/proxy_model_inheritance/app2/models.py b/parts/django/tests/modeltests/proxy_model_inheritance/app2/models.py
deleted file mode 100644
index 549cd07..0000000
--- a/parts/django/tests/modeltests/proxy_model_inheritance/app2/models.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from django.db import models
-
-class NiceModel(models.Model):
- pass
diff --git a/parts/django/tests/modeltests/proxy_model_inheritance/models.py b/parts/django/tests/modeltests/proxy_model_inheritance/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/proxy_model_inheritance/models.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/proxy_model_inheritance/tests.py b/parts/django/tests/modeltests/proxy_model_inheritance/tests.py
deleted file mode 100644
index b682851..0000000
--- a/parts/django/tests/modeltests/proxy_model_inheritance/tests.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-XX. Proxy model inheritance
-
-Proxy model inheritance across apps can result in syncdb not creating the table
-for the proxied model (as described in #12286). This test creates two dummy
-apps and calls syncdb, then verifies that the table has been created.
-"""
-
-import os
-import sys
-
-from django.conf import settings, Settings
-from django.core.management import call_command
-from django.db.models.loading import load_app
-from django.test import TransactionTestCase
-
-class ProxyModelInheritanceTests(TransactionTestCase):
-
- def setUp(self):
- self.old_sys_path = sys.path[:]
- sys.path.append(os.path.dirname(os.path.abspath(__file__)))
- self.old_installed_apps = settings.INSTALLED_APPS
- settings.INSTALLED_APPS = ('app1', 'app2')
- map(load_app, settings.INSTALLED_APPS)
- call_command('syncdb', verbosity=0)
- global ProxyModel, NiceModel
- from app1.models import ProxyModel
- from app2.models import NiceModel
-
- def tearDown(self):
- settings.INSTALLED_APPS = self.old_installed_apps
- sys.path = self.old_sys_path
-
- def test_table_exists(self):
- self.assertEquals(NiceModel.objects.all().count(), 0)
- self.assertEquals(ProxyModel.objects.all().count(), 0)
diff --git a/parts/django/tests/modeltests/proxy_models/__init__.py b/parts/django/tests/modeltests/proxy_models/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/proxy_models/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/proxy_models/fixtures/mypeople.json b/parts/django/tests/modeltests/proxy_models/fixtures/mypeople.json
deleted file mode 100644
index d20c8f2..0000000
--- a/parts/django/tests/modeltests/proxy_models/fixtures/mypeople.json
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- {
- "pk": 100,
- "model": "proxy_models.myperson",
- "fields": {
- "name": "Elvis Presley"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/modeltests/proxy_models/models.py b/parts/django/tests/modeltests/proxy_models/models.py
deleted file mode 100644
index 90d54d9..0000000
--- a/parts/django/tests/modeltests/proxy_models/models.py
+++ /dev/null
@@ -1,164 +0,0 @@
-"""
-By specifying the 'proxy' Meta attribute, model subclasses can specify that
-they will take data directly from the table of their base class table rather
-than using a new table of their own. This allows them to act as simple proxies,
-providing a modified interface to the data from the base class.
-"""
-
-from django.contrib.contenttypes.models import ContentType
-from django.db import models
-
-
-# A couple of managers for testing managing overriding in proxy model cases.
-
-class PersonManager(models.Manager):
- def get_query_set(self):
- return super(PersonManager, self).get_query_set().exclude(name="fred")
-
-class SubManager(models.Manager):
- def get_query_set(self):
- return super(SubManager, self).get_query_set().exclude(name="wilma")
-
-class Person(models.Model):
- """
- A simple concrete base class.
- """
- name = models.CharField(max_length=50)
-
- objects = PersonManager()
-
- def __unicode__(self):
- return self.name
-
-class Abstract(models.Model):
- """
- A simple abstract base class, to be used for error checking.
- """
- data = models.CharField(max_length=10)
-
- class Meta:
- abstract = True
-
-class MyPerson(Person):
- """
- A proxy subclass, this should not get a new table. Overrides the default
- manager.
- """
- class Meta:
- proxy = True
- ordering = ["name"]
-
- objects = SubManager()
- other = PersonManager()
-
- def has_special_name(self):
- return self.name.lower() == "special"
-
-class ManagerMixin(models.Model):
- excluder = SubManager()
-
- class Meta:
- abstract = True
-
-class OtherPerson(Person, ManagerMixin):
- """
- A class with the default manager from Person, plus an secondary manager.
- """
- class Meta:
- proxy = True
- ordering = ["name"]
-
-class StatusPerson(MyPerson):
- """
- A non-proxy subclass of a proxy, it should get a new table.
- """
- status = models.CharField(max_length=80)
-
-# We can even have proxies of proxies (and subclass of those).
-class MyPersonProxy(MyPerson):
- class Meta:
- proxy = True
-
-class LowerStatusPerson(MyPersonProxy):
- status = models.CharField(max_length=80)
-
-class User(models.Model):
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
-class UserProxy(User):
- class Meta:
- proxy = True
-
-class UserProxyProxy(UserProxy):
- class Meta:
- proxy = True
-
-# We can still use `select_related()` to include related models in our querysets.
-class Country(models.Model):
- name = models.CharField(max_length=50)
-
-class State(models.Model):
- name = models.CharField(max_length=50)
- country = models.ForeignKey(Country)
-
- def __unicode__(self):
- return self.name
-
-class StateProxy(State):
- class Meta:
- proxy = True
-
-# Proxy models still works with filters (on related fields)
-# and select_related, even when mixed with model inheritance
-class BaseUser(models.Model):
- name = models.CharField(max_length=255)
-
-class TrackerUser(BaseUser):
- status = models.CharField(max_length=50)
-
-class ProxyTrackerUser(TrackerUser):
- class Meta:
- proxy = True
-
-
-class Issue(models.Model):
- summary = models.CharField(max_length=255)
- assignee = models.ForeignKey(TrackerUser)
-
- def __unicode__(self):
- return ':'.join((self.__class__.__name__,self.summary,))
-
-class Bug(Issue):
- version = models.CharField(max_length=50)
- reporter = models.ForeignKey(BaseUser)
-
-class ProxyBug(Bug):
- """
- Proxy of an inherited class
- """
- class Meta:
- proxy = True
-
-
-class ProxyProxyBug(ProxyBug):
- """
- A proxy of proxy model with related field
- """
- class Meta:
- proxy = True
-
-class Improvement(Issue):
- """
- A model that has relation to a proxy model
- or to a proxy of proxy model
- """
- version = models.CharField(max_length=50)
- reporter = models.ForeignKey(ProxyTrackerUser)
- associated_bug = models.ForeignKey(ProxyProxyBug)
-
-class ProxyImprovement(Improvement):
- class Meta:
- proxy = True \ No newline at end of file
diff --git a/parts/django/tests/modeltests/proxy_models/tests.py b/parts/django/tests/modeltests/proxy_models/tests.py
deleted file mode 100644
index 346a2a3..0000000
--- a/parts/django/tests/modeltests/proxy_models/tests.py
+++ /dev/null
@@ -1,314 +0,0 @@
-from django.test import TestCase
-from django.db import models, DEFAULT_DB_ALIAS
-from django.db.models import signals
-from django.core import management
-from django.core.exceptions import FieldError
-
-from django.contrib.contenttypes.models import ContentType
-
-from models import MyPerson, Person, StatusPerson, LowerStatusPerson
-from models import MyPersonProxy, Abstract, OtherPerson, User, UserProxy
-from models import UserProxyProxy, Country, State, StateProxy, TrackerUser
-from models import BaseUser, Bug, ProxyTrackerUser, Improvement, ProxyProxyBug
-from models import ProxyBug, ProxyImprovement
-
-class ProxyModelTests(TestCase):
- def test_same_manager_queries(self):
- """
- The MyPerson model should be generating the same database queries as
- the Person model (when the same manager is used in each case).
- """
- my_person_sql = MyPerson.other.all().query.get_compiler(
- DEFAULT_DB_ALIAS).as_sql()
- person_sql = Person.objects.order_by("name").query.get_compiler(
- DEFAULT_DB_ALIAS).as_sql()
- self.assertEqual(my_person_sql, person_sql)
-
- def test_inheretance_new_table(self):
- """
- The StatusPerson models should have its own table (it's using ORM-level
- inheritance).
- """
- sp_sql = StatusPerson.objects.all().query.get_compiler(
- DEFAULT_DB_ALIAS).as_sql()
- p_sql = Person.objects.all().query.get_compiler(
- DEFAULT_DB_ALIAS).as_sql()
- self.assertNotEqual(sp_sql, p_sql)
-
- def test_basic_proxy(self):
- """
- Creating a Person makes them accessible through the MyPerson proxy.
- """
- Person.objects.create(name="Foo McBar")
- self.assertEqual(len(Person.objects.all()), 1)
- self.assertEqual(len(MyPerson.objects.all()), 1)
- self.assertEqual(MyPerson.objects.get(name="Foo McBar").id, 1)
- self.assertFalse(MyPerson.objects.get(id=1).has_special_name())
-
- def test_no_proxy(self):
- """
- Person is not proxied by StatusPerson subclass.
- """
- Person.objects.create(name="Foo McBar")
- self.assertEqual(list(StatusPerson.objects.all()), [])
-
- def test_basic_proxy_reverse(self):
- """
- A new MyPerson also shows up as a standard Person.
- """
- MyPerson.objects.create(name="Bazza del Frob")
- self.assertEqual(len(MyPerson.objects.all()), 1)
- self.assertEqual(len(Person.objects.all()), 1)
-
- LowerStatusPerson.objects.create(status="low", name="homer")
- lsps = [lsp.name for lsp in LowerStatusPerson.objects.all()]
- self.assertEqual(lsps, ["homer"])
-
- def test_correct_type_proxy_of_proxy(self):
- """
- Correct type when querying a proxy of proxy
- """
- Person.objects.create(name="Foo McBar")
- MyPerson.objects.create(name="Bazza del Frob")
- LowerStatusPerson.objects.create(status="low", name="homer")
- pp = sorted([mpp.name for mpp in MyPersonProxy.objects.all()])
- self.assertEqual(pp, ['Bazza del Frob', 'Foo McBar', 'homer'])
-
- def test_proxy_included_in_ancestors(self):
- """
- Proxy models are included in the ancestors for a model's DoesNotExist
- and MultipleObjectsReturned
- """
- Person.objects.create(name="Foo McBar")
- MyPerson.objects.create(name="Bazza del Frob")
- LowerStatusPerson.objects.create(status="low", name="homer")
- max_id = Person.objects.aggregate(max_id=models.Max('id'))['max_id']
-
- self.assertRaises(Person.DoesNotExist,
- MyPersonProxy.objects.get,
- name='Zathras'
- )
- self.assertRaises(Person.MultipleObjectsReturned,
- MyPersonProxy.objects.get,
- id__lt=max_id+1
- )
- self.assertRaises(Person.DoesNotExist,
- StatusPerson.objects.get,
- name='Zathras'
- )
-
- sp1 = StatusPerson.objects.create(name='Bazza Jr.')
- sp2 = StatusPerson.objects.create(name='Foo Jr.')
- max_id = Person.objects.aggregate(max_id=models.Max('id'))['max_id']
-
- self.assertRaises(Person.MultipleObjectsReturned,
- StatusPerson.objects.get,
- id__lt=max_id+1
- )
-
- def test_abc(self):
- """
- All base classes must be non-abstract
- """
- def build_abc():
- class NoAbstract(Abstract):
- class Meta:
- proxy = True
- self.assertRaises(TypeError, build_abc)
-
- def test_no_cbc(self):
- """
- The proxy must actually have one concrete base class
- """
- def build_no_cbc():
- class TooManyBases(Person, Abstract):
- class Meta:
- proxy = True
- self.assertRaises(TypeError, build_no_cbc)
-
- def test_no_base_classes(self):
- def build_no_base_classes():
- class NoBaseClasses(models.Model):
- class Meta:
- proxy = True
- self.assertRaises(TypeError, build_no_base_classes)
-
- def test_new_fields(self):
- def build_new_fields():
- class NoNewFields(Person):
- newfield = models.BooleanField()
- class Meta:
- proxy = True
- self.assertRaises(FieldError, build_new_fields)
-
- def test_myperson_manager(self):
- Person.objects.create(name="fred")
- Person.objects.create(name="wilma")
- Person.objects.create(name="barney")
-
- resp = [p.name for p in MyPerson.objects.all()]
- self.assertEqual(resp, ['barney', 'fred'])
-
- resp = [p.name for p in MyPerson._default_manager.all()]
- self.assertEqual(resp, ['barney', 'fred'])
-
- def test_otherperson_manager(self):
- Person.objects.create(name="fred")
- Person.objects.create(name="wilma")
- Person.objects.create(name="barney")
-
- resp = [p.name for p in OtherPerson.objects.all()]
- self.assertEqual(resp, ['barney', 'wilma'])
-
- resp = [p.name for p in OtherPerson.excluder.all()]
- self.assertEqual(resp, ['barney', 'fred'])
-
- resp = [p.name for p in OtherPerson._default_manager.all()]
- self.assertEqual(resp, ['barney', 'wilma'])
-
- def test_proxy_model_signals(self):
- """
- Test save signals for proxy models
- """
- output = []
-
- def make_handler(model, event):
- def _handler(*args, **kwargs):
- output.append('%s %s save' % (model, event))
- return _handler
-
- h1 = make_handler('MyPerson', 'pre')
- h2 = make_handler('MyPerson', 'post')
- h3 = make_handler('Person', 'pre')
- h4 = make_handler('Person', 'post')
-
- signals.pre_save.connect(h1, sender=MyPerson)
- signals.post_save.connect(h2, sender=MyPerson)
- signals.pre_save.connect(h3, sender=Person)
- signals.post_save.connect(h4, sender=Person)
-
- dino = MyPerson.objects.create(name=u"dino")
- self.assertEqual(output, [
- 'MyPerson pre save',
- 'MyPerson post save'
- ])
-
- output = []
-
- h5 = make_handler('MyPersonProxy', 'pre')
- h6 = make_handler('MyPersonProxy', 'post')
-
- signals.pre_save.connect(h5, sender=MyPersonProxy)
- signals.post_save.connect(h6, sender=MyPersonProxy)
-
- dino = MyPersonProxy.objects.create(name=u"pebbles")
-
- self.assertEqual(output, [
- 'MyPersonProxy pre save',
- 'MyPersonProxy post save'
- ])
-
- signals.pre_save.disconnect(h1, sender=MyPerson)
- signals.post_save.disconnect(h2, sender=MyPerson)
- signals.pre_save.disconnect(h3, sender=Person)
- signals.post_save.disconnect(h4, sender=Person)
- signals.pre_save.disconnect(h5, sender=MyPersonProxy)
- signals.post_save.disconnect(h6, sender=MyPersonProxy)
-
- def test_content_type(self):
- ctype = ContentType.objects.get_for_model
- self.assertTrue(ctype(Person) is ctype(OtherPerson))
-
- def test_user_userproxy_userproxyproxy(self):
- User.objects.create(name='Bruce')
-
- resp = [u.name for u in User.objects.all()]
- self.assertEqual(resp, ['Bruce'])
-
- resp = [u.name for u in UserProxy.objects.all()]
- self.assertEqual(resp, ['Bruce'])
-
- resp = [u.name for u in UserProxyProxy.objects.all()]
- self.assertEqual(resp, ['Bruce'])
-
- def test_proxy_delete(self):
- """
- Proxy objects can be deleted
- """
- User.objects.create(name='Bruce')
- u2 = UserProxy.objects.create(name='George')
-
- resp = [u.name for u in UserProxy.objects.all()]
- self.assertEqual(resp, ['Bruce', 'George'])
-
- u2.delete()
-
- resp = [u.name for u in UserProxy.objects.all()]
- self.assertEqual(resp, ['Bruce'])
-
- def test_select_related(self):
- """
- We can still use `select_related()` to include related models in our
- querysets.
- """
- country = Country.objects.create(name='Australia')
- state = State.objects.create(name='New South Wales', country=country)
-
- resp = [s.name for s in State.objects.select_related()]
- self.assertEqual(resp, ['New South Wales'])
-
- resp = [s.name for s in StateProxy.objects.select_related()]
- self.assertEqual(resp, ['New South Wales'])
-
- self.assertEqual(StateProxy.objects.get(name='New South Wales').name,
- 'New South Wales')
-
- resp = StateProxy.objects.select_related().get(name='New South Wales')
- self.assertEqual(resp.name, 'New South Wales')
-
- def test_proxy_bug(self):
- contributor = TrackerUser.objects.create(name='Contributor',
- status='contrib')
- someone = BaseUser.objects.create(name='Someone')
- Bug.objects.create(summary='fix this', version='1.1beta',
- assignee=contributor, reporter=someone)
- pcontributor = ProxyTrackerUser.objects.create(name='OtherContributor',
- status='proxy')
- Improvement.objects.create(summary='improve that', version='1.1beta',
- assignee=contributor, reporter=pcontributor,
- associated_bug=ProxyProxyBug.objects.all()[0])
-
- # Related field filter on proxy
- resp = ProxyBug.objects.get(version__icontains='beta')
- self.assertEqual(repr(resp), '<ProxyBug: ProxyBug:fix this>')
-
- # Select related + filter on proxy
- resp = ProxyBug.objects.select_related().get(version__icontains='beta')
- self.assertEqual(repr(resp), '<ProxyBug: ProxyBug:fix this>')
-
- # Proxy of proxy, select_related + filter
- resp = ProxyProxyBug.objects.select_related().get(
- version__icontains='beta'
- )
- self.assertEqual(repr(resp), '<ProxyProxyBug: ProxyProxyBug:fix this>')
-
- # Select related + filter on a related proxy field
- resp = ProxyImprovement.objects.select_related().get(
- reporter__name__icontains='butor'
- )
- self.assertEqual(repr(resp),
- '<ProxyImprovement: ProxyImprovement:improve that>'
- )
-
- # Select related + filter on a related proxy of proxy field
- resp = ProxyImprovement.objects.select_related().get(
- associated_bug__summary__icontains='fix'
- )
- self.assertEqual(repr(resp),
- '<ProxyImprovement: ProxyImprovement:improve that>'
- )
-
- def test_proxy_load_from_fixture(self):
- management.call_command('loaddata', 'mypeople.json', verbosity=0, commit=False)
- p = MyPerson.objects.get(pk=100)
- self.assertEqual(p.name, 'Elvis Presley')
diff --git a/parts/django/tests/modeltests/raw_query/__init__.py b/parts/django/tests/modeltests/raw_query/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/raw_query/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/raw_query/fixtures/raw_query_books.json b/parts/django/tests/modeltests/raw_query/fixtures/raw_query_books.json
deleted file mode 100644
index 35879aa..0000000
--- a/parts/django/tests/modeltests/raw_query/fixtures/raw_query_books.json
+++ /dev/null
@@ -1,110 +0,0 @@
-[
- {
- "pk": 1,
- "model": "raw_query.author",
- "fields": {
- "dob": "1950-09-20",
- "first_name": "Joe",
- "last_name": "Smith"
- }
- },
- {
- "pk": 2,
- "model": "raw_query.author",
- "fields": {
- "dob": "1920-04-02",
- "first_name": "Jill",
- "last_name": "Doe"
- }
- },
- {
- "pk": 3,
- "model": "raw_query.author",
- "fields": {
- "dob": "1986-01-25",
- "first_name": "Bob",
- "last_name": "Smith"
- }
- },
- {
- "pk": 4,
- "model": "raw_query.author",
- "fields": {
- "dob": "1932-05-10",
- "first_name": "Bill",
- "last_name": "Jones"
- }
- },
- {
- "pk": 1,
- "model": "raw_query.book",
- "fields": {
- "author": 1,
- "title": "The awesome book",
- "paperback": false,
- "opening_line": "It was a bright cold day in April and the clocks were striking thirteen."
- }
- },
- {
- "pk": 2,
- "model": "raw_query.book",
- "fields": {
- "author": 1,
- "title": "The horrible book",
- "paperback": true,
- "opening_line": "On an evening in the latter part of May a middle-aged man was walking homeward from Shaston to the village of Marlott, in the adjoining Vale of Blakemore, or Blackmoor."
- }
- },
- {
- "pk": 3,
- "model": "raw_query.book",
- "fields": {
- "author": 1,
- "title": "Another awesome book",
- "paperback": false,
- "opening_line": "A squat grey building of only thirty-four stories."
- }
- },
- {
- "pk": 4,
- "model": "raw_query.book",
- "fields": {
- "author": 3,
- "title": "Some other book",
- "paperback": true,
- "opening_line": "It was the day my grandmother exploded."
- }
- },
- {
- "pk": 1,
- "model": "raw_query.coffee",
- "fields": {
- "brand": "dunkin doughnuts"
- }
- },
- {
- "pk": 2,
- "model": "raw_query.coffee",
- "fields": {
- "brand": "starbucks"
- }
- },
- {
- "pk": 1,
- "model": "raw_query.reviewer",
- "fields": {
- "reviewed": [
- 2,
- 3,
- 4
- ]
- }
- },
- {
- "pk": 2,
- "model": "raw_query.reviewer",
- "fields": {
- "reviewed": []
- }
- }
-]
diff --git a/parts/django/tests/modeltests/raw_query/models.py b/parts/django/tests/modeltests/raw_query/models.py
deleted file mode 100644
index bb42b5b..0000000
--- a/parts/django/tests/modeltests/raw_query/models.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from django.db import models
-
-class Author(models.Model):
- first_name = models.CharField(max_length=255)
- last_name = models.CharField(max_length=255)
- dob = models.DateField()
-
- def __init__(self, *args, **kwargs):
- super(Author, self).__init__(*args, **kwargs)
- # Protect against annotations being passed to __init__ --
- # this'll make the test suite get angry if annotations aren't
- # treated differently than fields.
- for k in kwargs:
- assert k in [f.attname for f in self._meta.fields], \
- "Author.__init__ got an unexpected paramater: %s" % k
-
-class Book(models.Model):
- title = models.CharField(max_length=255)
- author = models.ForeignKey(Author)
- paperback = models.BooleanField()
- opening_line = models.TextField()
-
-class Coffee(models.Model):
- brand = models.CharField(max_length=255, db_column="name")
-
-class Reviewer(models.Model):
- reviewed = models.ManyToManyField(Book)
-
-class FriendlyAuthor(Author):
- pass
diff --git a/parts/django/tests/modeltests/raw_query/tests.py b/parts/django/tests/modeltests/raw_query/tests.py
deleted file mode 100644
index a1e7edb..0000000
--- a/parts/django/tests/modeltests/raw_query/tests.py
+++ /dev/null
@@ -1,236 +0,0 @@
-from datetime import date
-
-from django.conf import settings
-from django.db import connection
-from django.db.models.sql.query import InvalidQuery
-from django.test import TestCase
-
-from models import Author, Book, Coffee, Reviewer, FriendlyAuthor
-
-
-class RawQueryTests(TestCase):
- fixtures = ['raw_query_books.json']
-
- def assertSuccessfulRawQuery(self, model, query, expected_results,
- expected_annotations=(), params=[], translations=None):
- """
- Execute the passed query against the passed model and check the output
- """
- results = list(model.objects.raw(query, params=params, translations=translations))
- self.assertProcessed(model, results, expected_results, expected_annotations)
- self.assertAnnotations(results, expected_annotations)
-
- def assertProcessed(self, model, results, orig, expected_annotations=()):
- """
- Compare the results of a raw query against expected results
- """
- self.assertEqual(len(results), len(orig))
- for index, item in enumerate(results):
- orig_item = orig[index]
- for annotation in expected_annotations:
- setattr(orig_item, *annotation)
-
- for field in model._meta.fields:
- # Check that all values on the model are equal
- self.assertEquals(getattr(item,field.attname),
- getattr(orig_item,field.attname))
- # This includes checking that they are the same type
- self.assertEquals(type(getattr(item,field.attname)),
- type(getattr(orig_item,field.attname)))
-
- def assertNoAnnotations(self, results):
- """
- Check that the results of a raw query contain no annotations
- """
- self.assertAnnotations(results, ())
-
- def assertAnnotations(self, results, expected_annotations):
- """
- Check that the passed raw query results contain the expected
- annotations
- """
- if expected_annotations:
- for index, result in enumerate(results):
- annotation, value = expected_annotations[index]
- self.assertTrue(hasattr(result, annotation))
- self.assertEqual(getattr(result, annotation), value)
-
- def assert_num_queries(self, n, func, *args, **kwargs):
- old_DEBUG = settings.DEBUG
- settings.DEBUG = True
- starting_queries = len(connection.queries)
- try:
- func(*args, **kwargs)
- finally:
- settings.DEBUG = old_DEBUG
- self.assertEqual(starting_queries + n, len(connection.queries))
-
- def testSimpleRawQuery(self):
- """
- Basic test of raw query with a simple database query
- """
- query = "SELECT * FROM raw_query_author"
- authors = Author.objects.all()
- self.assertSuccessfulRawQuery(Author, query, authors)
-
- def testRawQueryLazy(self):
- """
- Raw queries are lazy: they aren't actually executed until they're
- iterated over.
- """
- q = Author.objects.raw('SELECT * FROM raw_query_author')
- self.assert_(q.query.cursor is None)
- list(q)
- self.assert_(q.query.cursor is not None)
-
- def testFkeyRawQuery(self):
- """
- Test of a simple raw query against a model containing a foreign key
- """
- query = "SELECT * FROM raw_query_book"
- books = Book.objects.all()
- self.assertSuccessfulRawQuery(Book, query, books)
-
- def testDBColumnHandler(self):
- """
- Test of a simple raw query against a model containing a field with
- db_column defined.
- """
- query = "SELECT * FROM raw_query_coffee"
- coffees = Coffee.objects.all()
- self.assertSuccessfulRawQuery(Coffee, query, coffees)
-
- def testOrderHandler(self):
- """
- Test of raw raw query's tolerance for columns being returned in any
- order
- """
- selects = (
- ('dob, last_name, first_name, id'),
- ('last_name, dob, first_name, id'),
- ('first_name, last_name, dob, id'),
- )
-
- for select in selects:
- query = "SELECT %s FROM raw_query_author" % select
- authors = Author.objects.all()
- self.assertSuccessfulRawQuery(Author, query, authors)
-
- def testTranslations(self):
- """
- Test of raw query's optional ability to translate unexpected result
- column names to specific model fields
- """
- query = "SELECT first_name AS first, last_name AS last, dob, id FROM raw_query_author"
- translations = {'first': 'first_name', 'last': 'last_name'}
- authors = Author.objects.all()
- self.assertSuccessfulRawQuery(Author, query, authors, translations=translations)
-
- def testParams(self):
- """
- Test passing optional query parameters
- """
- query = "SELECT * FROM raw_query_author WHERE first_name = %s"
- author = Author.objects.all()[2]
- params = [author.first_name]
- results = list(Author.objects.raw(query, params=params))
- self.assertProcessed(Author, results, [author])
- self.assertNoAnnotations(results)
- self.assertEqual(len(results), 1)
-
- def testManyToMany(self):
- """
- Test of a simple raw query against a model containing a m2m field
- """
- query = "SELECT * FROM raw_query_reviewer"
- reviewers = Reviewer.objects.all()
- self.assertSuccessfulRawQuery(Reviewer, query, reviewers)
-
- def testExtraConversions(self):
- """
- Test to insure that extra translations are ignored.
- """
- query = "SELECT * FROM raw_query_author"
- translations = {'something': 'else'}
- authors = Author.objects.all()
- self.assertSuccessfulRawQuery(Author, query, authors, translations=translations)
-
- def testMissingFields(self):
- query = "SELECT id, first_name, dob FROM raw_query_author"
- for author in Author.objects.raw(query):
- self.assertNotEqual(author.first_name, None)
- # last_name isn't given, but it will be retrieved on demand
- self.assertNotEqual(author.last_name, None)
-
- def testMissingFieldsWithoutPK(self):
- query = "SELECT first_name, dob FROM raw_query_author"
- try:
- list(Author.objects.raw(query))
- self.fail('Query without primary key should fail')
- except InvalidQuery:
- pass
-
- def testAnnotations(self):
- query = "SELECT a.*, count(b.id) as book_count FROM raw_query_author a LEFT JOIN raw_query_book b ON a.id = b.author_id GROUP BY a.id, a.first_name, a.last_name, a.dob ORDER BY a.id"
- expected_annotations = (
- ('book_count', 3),
- ('book_count', 0),
- ('book_count', 1),
- ('book_count', 0),
- )
- authors = Author.objects.all()
- self.assertSuccessfulRawQuery(Author, query, authors, expected_annotations)
-
- def testInvalidQuery(self):
- query = "UPDATE raw_query_author SET first_name='thing' WHERE first_name='Joe'"
- self.assertRaises(InvalidQuery, Author.objects.raw, query)
-
- def testWhiteSpaceQuery(self):
- query = " SELECT * FROM raw_query_author"
- authors = Author.objects.all()
- self.assertSuccessfulRawQuery(Author, query, authors)
-
- def testMultipleIterations(self):
- query = "SELECT * FROM raw_query_author"
- normal_authors = Author.objects.all()
- raw_authors = Author.objects.raw(query)
-
- # First Iteration
- first_iterations = 0
- for index, raw_author in enumerate(raw_authors):
- self.assertEqual(normal_authors[index], raw_author)
- first_iterations += 1
-
- # Second Iteration
- second_iterations = 0
- for index, raw_author in enumerate(raw_authors):
- self.assertEqual(normal_authors[index], raw_author)
- second_iterations += 1
-
- self.assertEqual(first_iterations, second_iterations)
-
- def testGetItem(self):
- # Indexing on RawQuerySets
- query = "SELECT * FROM raw_query_author ORDER BY id ASC"
- third_author = Author.objects.raw(query)[2]
- self.assertEqual(third_author.first_name, 'Bob')
-
- first_two = Author.objects.raw(query)[0:2]
- self.assertEquals(len(first_two), 2)
-
- self.assertRaises(TypeError, lambda: Author.objects.raw(query)['test'])
-
- def test_inheritance(self):
- # date is the end of the Cuban Missile Crisis, I have no idea when
- # Wesley was bron
- f = FriendlyAuthor.objects.create(first_name="Wesley", last_name="Chun",
- dob=date(1962, 10, 28))
- query = "SELECT * FROM raw_query_friendlyauthor"
- self.assertEqual(
- [o.pk for o in FriendlyAuthor.objects.raw(query)], [f.pk]
- )
-
- def test_query_count(self):
- self.assert_num_queries(1,
- list, Author.objects.raw("SELECT * FROM raw_query_author")
- )
diff --git a/parts/django/tests/modeltests/reserved_names/__init__.py b/parts/django/tests/modeltests/reserved_names/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/reserved_names/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/reserved_names/models.py b/parts/django/tests/modeltests/reserved_names/models.py
deleted file mode 100644
index d8c1238..0000000
--- a/parts/django/tests/modeltests/reserved_names/models.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
-18. Using SQL reserved names
-
-Need to use a reserved SQL name as a column name or table name? Need to include
-a hyphen in a column or table name? No problem. Django quotes names
-appropriately behind the scenes, so your database won't complain about
-reserved-name usage.
-"""
-
-from django.db import models
-
-class Thing(models.Model):
- when = models.CharField(max_length=1, primary_key=True)
- join = models.CharField(max_length=1)
- like = models.CharField(max_length=1)
- drop = models.CharField(max_length=1)
- alter = models.CharField(max_length=1)
- having = models.CharField(max_length=1)
- where = models.DateField(max_length=1)
- has_hyphen = models.CharField(max_length=1, db_column='has-hyphen')
- class Meta:
- db_table = 'select'
-
- def __unicode__(self):
- return self.when \ No newline at end of file
diff --git a/parts/django/tests/modeltests/reserved_names/tests.py b/parts/django/tests/modeltests/reserved_names/tests.py
deleted file mode 100644
index b7e4867..0000000
--- a/parts/django/tests/modeltests/reserved_names/tests.py
+++ /dev/null
@@ -1,48 +0,0 @@
-import datetime
-
-from django.test import TestCase
-
-from models import Thing
-
-class ReservedNameTests(TestCase):
- def generate(self):
- day1 = datetime.date(2005, 1, 1)
- t = Thing.objects.create(when='a', join='b', like='c', drop='d',
- alter='e', having='f', where=day1, has_hyphen='h')
- day2 = datetime.date(2006, 2, 2)
- u = Thing.objects.create(when='h', join='i', like='j', drop='k',
- alter='l', having='m', where=day2)
-
- def test_simple(self):
- day1 = datetime.date(2005, 1, 1)
- t = Thing.objects.create(when='a', join='b', like='c', drop='d',
- alter='e', having='f', where=day1, has_hyphen='h')
- self.assertEqual(t.when, 'a')
-
- day2 = datetime.date(2006, 2, 2)
- u = Thing.objects.create(when='h', join='i', like='j', drop='k',
- alter='l', having='m', where=day2)
- self.assertEqual(u.when, 'h')
-
- def test_order_by(self):
- self.generate()
- things = [t.when for t in Thing.objects.order_by('when')]
- self.assertEqual(things, ['a', 'h'])
-
- def test_fields(self):
- self.generate()
- v = Thing.objects.get(pk='a')
- self.assertEqual(v.join, 'b')
- self.assertEqual(v.where, datetime.date(year=2005, month=1, day=1))
-
- def test_dates(self):
- self.generate()
- resp = Thing.objects.dates('where', 'year')
- self.assertEqual(list(resp), [
- datetime.datetime(2005, 1, 1, 0, 0),
- datetime.datetime(2006, 1, 1, 0, 0),
- ])
-
- def test_month_filter(self):
- self.generate()
- self.assertEqual(Thing.objects.filter(where__month=1)[0].when, 'a')
diff --git a/parts/django/tests/modeltests/reverse_lookup/__init__.py b/parts/django/tests/modeltests/reverse_lookup/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/reverse_lookup/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/reverse_lookup/models.py b/parts/django/tests/modeltests/reverse_lookup/models.py
deleted file mode 100644
index 2ffdc39..0000000
--- a/parts/django/tests/modeltests/reverse_lookup/models.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""
-25. Reverse lookups
-
-This demonstrates the reverse lookup features of the database API.
-"""
-
-from django.db import models
-
-class User(models.Model):
- name = models.CharField(max_length=200)
-
- def __unicode__(self):
- return self.name
-
-class Poll(models.Model):
- question = models.CharField(max_length=200)
- creator = models.ForeignKey(User)
-
- def __unicode__(self):
- return self.question
-
-class Choice(models.Model):
- name = models.CharField(max_length=100)
- poll = models.ForeignKey(Poll, related_name="poll_choice")
- related_poll = models.ForeignKey(Poll, related_name="related_choice")
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/modeltests/reverse_lookup/tests.py b/parts/django/tests/modeltests/reverse_lookup/tests.py
deleted file mode 100644
index 9a6e306..0000000
--- a/parts/django/tests/modeltests/reverse_lookup/tests.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from django.test import TestCase
-from django.core.exceptions import FieldError
-
-from models import User, Poll, Choice
-
-class ReverseLookupTests(TestCase):
-
- def setUp(self):
- john = User.objects.create(name="John Doe")
- jim = User.objects.create(name="Jim Bo")
- first_poll = Poll.objects.create(
- question="What's the first question?",
- creator=john
- )
- second_poll = Poll.objects.create(
- question="What's the second question?",
- creator=jim
- )
- new_choice = Choice.objects.create(
- poll=first_poll,
- related_poll=second_poll,
- name="This is the answer."
- )
-
- def test_reverse_by_field(self):
- u1 = User.objects.get(
- poll__question__exact="What's the first question?"
- )
- self.assertEqual(u1.name, "John Doe")
-
- u2 = User.objects.get(
- poll__question__exact="What's the second question?"
- )
- self.assertEqual(u2.name, "Jim Bo")
-
- def test_reverse_by_related_name(self):
- p1 = Poll.objects.get(poll_choice__name__exact="This is the answer.")
- self.assertEqual(p1.question, "What's the first question?")
-
- p2 = Poll.objects.get(
- related_choice__name__exact="This is the answer.")
- self.assertEqual(p2.question, "What's the second question?")
-
- def test_reverse_field_name_disallowed(self):
- """
- If a related_name is given you can't use the field name instead
- """
- self.assertRaises(FieldError, Poll.objects.get,
- choice__name__exact="This is the answer")
diff --git a/parts/django/tests/modeltests/save_delete_hooks/__init__.py b/parts/django/tests/modeltests/save_delete_hooks/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/save_delete_hooks/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/save_delete_hooks/models.py b/parts/django/tests/modeltests/save_delete_hooks/models.py
deleted file mode 100644
index 515c7f6..0000000
--- a/parts/django/tests/modeltests/save_delete_hooks/models.py
+++ /dev/null
@@ -1,32 +0,0 @@
-"""
-13. Adding hooks before/after saving and deleting
-
-To execute arbitrary code around ``save()`` and ``delete()``, just subclass
-the methods.
-"""
-
-from django.db import models
-
-
-class Person(models.Model):
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=20)
-
- def __init__(self, *args, **kwargs):
- super(Person, self).__init__(*args, **kwargs)
- self.data = []
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
-
- def save(self, *args, **kwargs):
- self.data.append("Before save")
- # Call the "real" save() method
- super(Person, self).save(*args, **kwargs)
- self.data.append("After save")
-
- def delete(self):
- self.data.append("Before deletion")
- # Call the "real" delete() method
- super(Person, self).delete()
- self.data.append("After deletion")
diff --git a/parts/django/tests/modeltests/save_delete_hooks/tests.py b/parts/django/tests/modeltests/save_delete_hooks/tests.py
deleted file mode 100644
index dc7b8ee..0000000
--- a/parts/django/tests/modeltests/save_delete_hooks/tests.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from django.test import TestCase
-
-from models import Person
-
-
-class SaveDeleteHookTests(TestCase):
- def test_basic(self):
- p = Person(first_name="John", last_name="Smith")
- self.assertEqual(p.data, [])
- p.save()
- self.assertEqual(p.data, [
- "Before save",
- "After save",
- ])
-
- self.assertQuerysetEqual(
- Person.objects.all(), [
- "John Smith",
- ],
- unicode
- )
-
- p.delete()
- self.assertEqual(p.data, [
- "Before save",
- "After save",
- "Before deletion",
- "After deletion",
- ])
- self.assertQuerysetEqual(Person.objects.all(), [])
diff --git a/parts/django/tests/modeltests/select_related/__init__.py b/parts/django/tests/modeltests/select_related/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/select_related/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/select_related/models.py b/parts/django/tests/modeltests/select_related/models.py
deleted file mode 100644
index 3c2e772..0000000
--- a/parts/django/tests/modeltests/select_related/models.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-41. Tests for select_related()
-
-``select_related()`` follows all relationships and pre-caches any foreign key
-values so that complex trees can be fetched in a single query. However, this
-isn't always a good idea, so the ``depth`` argument control how many "levels"
-the select-related behavior will traverse.
-"""
-
-from django.db import models
-
-# Who remembers high school biology?
-
-class Domain(models.Model):
- name = models.CharField(max_length=50)
- def __unicode__(self):
- return self.name
-
-class Kingdom(models.Model):
- name = models.CharField(max_length=50)
- domain = models.ForeignKey(Domain)
- def __unicode__(self):
- return self.name
-
-class Phylum(models.Model):
- name = models.CharField(max_length=50)
- kingdom = models.ForeignKey(Kingdom)
- def __unicode__(self):
- return self.name
-
-class Klass(models.Model):
- name = models.CharField(max_length=50)
- phylum = models.ForeignKey(Phylum)
- def __unicode__(self):
- return self.name
-
-class Order(models.Model):
- name = models.CharField(max_length=50)
- klass = models.ForeignKey(Klass)
- def __unicode__(self):
- return self.name
-
-class Family(models.Model):
- name = models.CharField(max_length=50)
- order = models.ForeignKey(Order)
- def __unicode__(self):
- return self.name
-
-class Genus(models.Model):
- name = models.CharField(max_length=50)
- family = models.ForeignKey(Family)
- def __unicode__(self):
- return self.name
-
-class Species(models.Model):
- name = models.CharField(max_length=50)
- genus = models.ForeignKey(Genus)
- def __unicode__(self):
- return self.name \ No newline at end of file
diff --git a/parts/django/tests/modeltests/select_related/tests.py b/parts/django/tests/modeltests/select_related/tests.py
deleted file mode 100644
index 72b3ab2..0000000
--- a/parts/django/tests/modeltests/select_related/tests.py
+++ /dev/null
@@ -1,166 +0,0 @@
-from django.test import TestCase
-from django.conf import settings
-from django import db
-
-from models import Domain, Kingdom, Phylum, Klass, Order, Family, Genus, Species
-
-class SelectRelatedTests(TestCase):
-
- def create_tree(self, stringtree):
- """
- Helper to create a complete tree.
- """
- names = stringtree.split()
- models = [Domain, Kingdom, Phylum, Klass, Order, Family, Genus, Species]
- assert len(names) == len(models), (names, models)
-
- parent = None
- for name, model in zip(names, models):
- try:
- obj = model.objects.get(name=name)
- except model.DoesNotExist:
- obj = model(name=name)
- if parent:
- setattr(obj, parent.__class__.__name__.lower(), parent)
- obj.save()
- parent = obj
-
- def create_base_data(self):
- self.create_tree("Eukaryota Animalia Anthropoda Insecta Diptera Drosophilidae Drosophila melanogaster")
- self.create_tree("Eukaryota Animalia Chordata Mammalia Primates Hominidae Homo sapiens")
- self.create_tree("Eukaryota Plantae Magnoliophyta Magnoliopsida Fabales Fabaceae Pisum sativum")
- self.create_tree("Eukaryota Fungi Basidiomycota Homobasidiomycatae Agaricales Amanitacae Amanita muscaria")
-
- def setUp(self):
- # The test runner sets settings.DEBUG to False, but we want to gather
- # queries so we'll set it to True here and reset it at the end of the
- # test case.
- self.create_base_data()
- settings.DEBUG = True
- db.reset_queries()
-
- def tearDown(self):
- settings.DEBUG = False
-
- def test_access_fks_without_select_related(self):
- """
- Normally, accessing FKs doesn't fill in related objects
- """
- fly = Species.objects.get(name="melanogaster")
- domain = fly.genus.family.order.klass.phylum.kingdom.domain
- self.assertEqual(domain.name, 'Eukaryota')
- self.assertEqual(len(db.connection.queries), 8)
-
- def test_access_fks_with_select_related(self):
- """
- A select_related() call will fill in those related objects without any
- extra queries
- """
- person = Species.objects.select_related(depth=10).get(name="sapiens")
- domain = person.genus.family.order.klass.phylum.kingdom.domain
- self.assertEqual(domain.name, 'Eukaryota')
- self.assertEqual(len(db.connection.queries), 1)
-
- def test_list_without_select_related(self):
- """
- select_related() also of course applies to entire lists, not just
- items. This test verifies the expected behavior without select_related.
- """
- world = Species.objects.all()
- families = [o.genus.family.name for o in world]
- self.assertEqual(sorted(families), [
- 'Amanitacae',
- 'Drosophilidae',
- 'Fabaceae',
- 'Hominidae',
- ])
- self.assertEqual(len(db.connection.queries), 9)
-
- def test_list_with_select_related(self):
- """
- select_related() also of course applies to entire lists, not just
- items. This test verifies the expected behavior with select_related.
- """
- world = Species.objects.all().select_related()
- families = [o.genus.family.name for o in world]
- self.assertEqual(sorted(families), [
- 'Amanitacae',
- 'Drosophilidae',
- 'Fabaceae',
- 'Hominidae',
- ])
- self.assertEqual(len(db.connection.queries), 1)
-
- def test_depth(self, depth=1, expected=7):
- """
- The "depth" argument to select_related() will stop the descent at a
- particular level.
- """
- pea = Species.objects.select_related(depth=depth).get(name="sativum")
- self.assertEqual(
- pea.genus.family.order.klass.phylum.kingdom.domain.name,
- 'Eukaryota'
- )
- # Notice: one fewer queries than above because of depth=1
- self.assertEqual(len(db.connection.queries), expected)
-
- def test_larger_depth(self):
- """
- The "depth" argument to select_related() will stop the descent at a
- particular level. This tests a larger depth value.
- """
- self.test_depth(depth=5, expected=3)
-
- def test_list_with_depth(self):
- """
- The "depth" argument to select_related() will stop the descent at a
- particular level. This can be used on lists as well.
- """
- world = Species.objects.all().select_related(depth=2)
- orders = [o.genus.family.order.name for o in world]
- self.assertEqual(sorted(orders),
- ['Agaricales', 'Diptera', 'Fabales', 'Primates'])
- self.assertEqual(len(db.connection.queries), 5)
-
- def test_select_related_with_extra(self):
- s = Species.objects.all().select_related(depth=1)\
- .extra(select={'a': 'select_related_species.id + 10'})[0]
- self.assertEqual(s.id + 10, s.a)
-
- def test_certain_fields(self):
- """
- The optional fields passed to select_related() control which related
- models we pull in. This allows for smaller queries and can act as an
- alternative (or, in addition to) the depth parameter.
-
- In this case, we explicitly say to select the 'genus' and
- 'genus.family' models, leading to the same number of queries as before.
- """
- world = Species.objects.select_related('genus__family')
- families = [o.genus.family.name for o in world]
- self.assertEqual(sorted(families),
- ['Amanitacae', 'Drosophilidae', 'Fabaceae', 'Hominidae'])
- self.assertEqual(len(db.connection.queries), 1)
-
- def test_more_certain_fields(self):
- """
- In this case, we explicitly say to select the 'genus' and
- 'genus.family' models, leading to the same number of queries as before.
- """
- world = Species.objects.filter(genus__name='Amanita')\
- .select_related('genus__family')
- orders = [o.genus.family.order.name for o in world]
- self.assertEqual(orders, [u'Agaricales'])
- self.assertEqual(len(db.connection.queries), 2)
-
- def test_field_traversal(self):
- s = Species.objects.all().select_related('genus__family__order'
- ).order_by('id')[0:1].get().genus.family.order.name
- self.assertEqual(s, u'Diptera')
- self.assertEqual(len(db.connection.queries), 1)
-
- def test_depth_fields_fails(self):
- self.assertRaises(TypeError,
- Species.objects.select_related,
- 'genus__family__order', depth=4
- )
diff --git a/parts/django/tests/modeltests/serializers/__init__.py b/parts/django/tests/modeltests/serializers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/serializers/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/serializers/models.py b/parts/django/tests/modeltests/serializers/models.py
deleted file mode 100644
index c12e73f..0000000
--- a/parts/django/tests/modeltests/serializers/models.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-42. Serialization
-
-``django.core.serializers`` provides interfaces to converting Django
-``QuerySet`` objects to and from "flat" data (i.e. strings).
-"""
-
-from decimal import Decimal
-from django.db import models
-
-class Category(models.Model):
- name = models.CharField(max_length=20)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-
-class Author(models.Model):
- name = models.CharField(max_length=20)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-
-class Article(models.Model):
- author = models.ForeignKey(Author)
- headline = models.CharField(max_length=50)
- pub_date = models.DateTimeField()
- categories = models.ManyToManyField(Category)
-
- class Meta:
- ordering = ('pub_date',)
-
- def __unicode__(self):
- return self.headline
-
-
-class AuthorProfile(models.Model):
- author = models.OneToOneField(Author, primary_key=True)
- date_of_birth = models.DateField()
-
- def __unicode__(self):
- return u"Profile of %s" % self.author
-
-
-class Actor(models.Model):
- name = models.CharField(max_length=20, primary_key=True)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-
-class Movie(models.Model):
- actor = models.ForeignKey(Actor)
- title = models.CharField(max_length=50)
- price = models.DecimalField(max_digits=6, decimal_places=2, default=Decimal('0.00'))
-
- class Meta:
- ordering = ('title',)
-
- def __unicode__(self):
- return self.title
-
-
-class Score(models.Model):
- score = models.FloatField()
-
-
-class Team(object):
- def __init__(self, title):
- self.title = title
-
- def __unicode__(self):
- raise NotImplementedError("Not so simple")
-
- def __str__(self):
- raise NotImplementedError("Not so simple")
-
- def to_string(self):
- return "%s" % self.title
-
-
-class TeamField(models.CharField):
- __metaclass__ = models.SubfieldBase
-
- def __init__(self):
- super(TeamField, self).__init__(max_length=100)
-
- def get_db_prep_save(self, value):
- return unicode(value.title)
-
- def to_python(self, value):
- if isinstance(value, Team):
- return value
- return Team(value)
-
- def value_to_string(self, obj):
- return self._get_val_from_obj(obj).to_string()
-
-
-class Player(models.Model):
- name = models.CharField(max_length=50)
- rank = models.IntegerField()
- team = TeamField()
-
- def __unicode__(self):
- return u'%s (%d) playing for %s' % (self.name, self.rank, self.team.to_string())
diff --git a/parts/django/tests/modeltests/serializers/tests.py b/parts/django/tests/modeltests/serializers/tests.py
deleted file mode 100644
index 9b648a8..0000000
--- a/parts/django/tests/modeltests/serializers/tests.py
+++ /dev/null
@@ -1,417 +0,0 @@
-# -*- coding: utf-8 -*-
-from datetime import datetime
-from StringIO import StringIO
-from xml.dom import minidom
-
-from django.core import serializers
-from django.db import transaction
-from django.test import TestCase, TransactionTestCase, Approximate
-from django.utils import simplejson
-
-from models import Category, Author, Article, AuthorProfile, Actor, \
- Movie, Score, Player, Team
-
-class SerializersTestBase(object):
- @staticmethod
- def _comparison_value(value):
- return value
-
- def setUp(self):
- sports = Category.objects.create(name="Sports")
- music = Category.objects.create(name="Music")
- op_ed = Category.objects.create(name="Op-Ed")
-
- self.joe = Author.objects.create(name="Joe")
- self.jane = Author.objects.create(name="Jane")
-
- self.a1 = Article(
- author=self.jane,
- headline="Poker has no place on ESPN",
- pub_date=datetime(2006, 6, 16, 11, 00)
- )
- self.a1.save()
- self.a1.categories = [sports, op_ed]
-
- self.a2 = Article(
- author=self.joe,
- headline="Time to reform copyright",
- pub_date=datetime(2006, 6, 16, 13, 00, 11, 345)
- )
- self.a2.save()
- self.a2.categories = [music, op_ed]
-
- def test_serialize(self):
- """Tests that basic serialization works."""
- serial_str = serializers.serialize(self.serializer_name,
- Article.objects.all())
- self.assertTrue(self._validate_output(serial_str))
-
- def test_serializer_roundtrip(self):
- """Tests that serialized content can be deserialized."""
- serial_str = serializers.serialize(self.serializer_name,
- Article.objects.all())
- models = list(serializers.deserialize(self.serializer_name, serial_str))
- self.assertEqual(len(models), 2)
-
- def test_altering_serialized_output(self):
- """
- Tests the ability to create new objects by
- modifying serialized content.
- """
- old_headline = "Poker has no place on ESPN"
- new_headline = "Poker has no place on television"
- serial_str = serializers.serialize(self.serializer_name,
- Article.objects.all())
- serial_str = serial_str.replace(old_headline, new_headline)
- models = list(serializers.deserialize(self.serializer_name, serial_str))
-
- # Prior to saving, old headline is in place
- self.assertTrue(Article.objects.filter(headline=old_headline))
- self.assertFalse(Article.objects.filter(headline=new_headline))
-
- for model in models:
- model.save()
-
- # After saving, new headline is in place
- self.assertTrue(Article.objects.filter(headline=new_headline))
- self.assertFalse(Article.objects.filter(headline=old_headline))
-
- def test_one_to_one_as_pk(self):
- """
- Tests that if you use your own primary key field
- (such as a OneToOneField), it doesn't appear in the
- serialized field list - it replaces the pk identifier.
- """
- profile = AuthorProfile(author=self.joe,
- date_of_birth=datetime(1970,1,1))
- profile.save()
- serial_str = serializers.serialize(self.serializer_name,
- AuthorProfile.objects.all())
- self.assertFalse(self._get_field_values(serial_str, 'author'))
-
- for obj in serializers.deserialize(self.serializer_name, serial_str):
- self.assertEqual(obj.object.pk, self._comparison_value(self.joe.pk))
-
- def test_serialize_field_subset(self):
- """Tests that output can be restricted to a subset of fields"""
- valid_fields = ('headline','pub_date')
- invalid_fields = ("author", "categories")
- serial_str = serializers.serialize(self.serializer_name,
- Article.objects.all(),
- fields=valid_fields)
- for field_name in invalid_fields:
- self.assertFalse(self._get_field_values(serial_str, field_name))
-
- for field_name in valid_fields:
- self.assertTrue(self._get_field_values(serial_str, field_name))
-
- def test_serialize_unicode(self):
- """Tests that unicode makes the roundtrip intact"""
- actor_name = u"Za\u017c\u00f3\u0142\u0107"
- movie_title = u'G\u0119\u015bl\u0105 ja\u017a\u0144'
- ac = Actor(name=actor_name)
- mv = Movie(title=movie_title, actor=ac)
- ac.save()
- mv.save()
-
- serial_str = serializers.serialize(self.serializer_name, [mv])
- self.assertEqual(self._get_field_values(serial_str, "title")[0], movie_title)
- self.assertEqual(self._get_field_values(serial_str, "actor")[0], actor_name)
-
- obj_list = list(serializers.deserialize(self.serializer_name, serial_str))
- mv_obj = obj_list[0].object
- self.assertEqual(mv_obj.title, movie_title)
-
- def test_serialize_with_null_pk(self):
- """
- Tests that serialized data with no primary key results
- in a model instance with no id
- """
- category = Category(name="Reference")
- serial_str = serializers.serialize(self.serializer_name, [category])
- pk_value = self._get_pk_values(serial_str)[0]
- self.assertFalse(pk_value)
-
- cat_obj = list(serializers.deserialize(self.serializer_name,
- serial_str))[0].object
- self.assertEqual(cat_obj.id, None)
-
- def test_float_serialization(self):
- """Tests that float values serialize and deserialize intact"""
- sc = Score(score=3.4)
- sc.save()
- serial_str = serializers.serialize(self.serializer_name, [sc])
- deserial_objs = list(serializers.deserialize(self.serializer_name,
- serial_str))
- self.assertEqual(deserial_objs[0].object.score, Approximate(3.4, places=1))
-
- def test_custom_field_serialization(self):
- """Tests that custom fields serialize and deserialize intact"""
- team_str = "Spartak Moskva"
- player = Player()
- player.name = "Soslan Djanaev"
- player.rank = 1
- player.team = Team(team_str)
- player.save()
- serial_str = serializers.serialize(self.serializer_name,
- Player.objects.all())
- team = self._get_field_values(serial_str, "team")
- self.assertTrue(team)
- self.assertEqual(team[0], team_str)
-
- deserial_objs = list(serializers.deserialize(self.serializer_name, serial_str))
- self.assertEqual(deserial_objs[0].object.team.to_string(),
- player.team.to_string())
-
- def test_pre_1000ad_date(self):
- """Tests that year values before 1000AD are properly formatted"""
- # Regression for #12524 -- dates before 1000AD get prefixed
- # 0's on the year
- a = Article.objects.create(
- author = self.jane,
- headline = "Nobody remembers the early years",
- pub_date = datetime(1, 2, 3, 4, 5, 6))
-
- serial_str = serializers.serialize(self.serializer_name, [a])
- date_values = self._get_field_values(serial_str, "pub_date")
- self.assertEquals(date_values[0], "0001-02-03 04:05:06")
-
- def test_pkless_serialized_strings(self):
- """
- Tests that serialized strings without PKs
- can be turned into models
- """
- deserial_objs = list(serializers.deserialize(self.serializer_name,
- self.pkless_str))
- for obj in deserial_objs:
- self.assertFalse(obj.object.id)
- obj.save()
- self.assertEqual(Category.objects.all().count(), 4)
-
-
-class SerializersTransactionTestBase(object):
- def test_forward_refs(self):
- """
- Tests that objects ids can be referenced before they are
- defined in the serialization data.
- """
- # The deserialization process needs to be contained
- # within a transaction in order to test forward reference
- # handling.
- transaction.enter_transaction_management()
- transaction.managed(True)
- objs = serializers.deserialize(self.serializer_name, self.fwd_ref_str)
- for obj in objs:
- obj.save()
- transaction.commit()
- transaction.leave_transaction_management()
-
- for model_cls in (Category, Author, Article):
- self.assertEqual(model_cls.objects.all().count(), 1)
- art_obj = Article.objects.all()[0]
- self.assertEqual(art_obj.categories.all().count(), 1)
- self.assertEqual(art_obj.author.name, "Agnes")
-
-
-class XmlSerializerTestCase(SerializersTestBase, TestCase):
- serializer_name = "xml"
- pkless_str = """<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object model="serializers.category">
- <field type="CharField" name="name">Reference</field>
- </object>
-</django-objects>"""
-
- @staticmethod
- def _comparison_value(value):
- # The XML serializer handles everything as strings, so comparisons
- # need to be performed on the stringified value
- return unicode(value)
-
- @staticmethod
- def _validate_output(serial_str):
- try:
- minidom.parseString(serial_str)
- except Exception:
- return False
- else:
- return True
-
- @staticmethod
- def _get_pk_values(serial_str):
- ret_list = []
- dom = minidom.parseString(serial_str)
- fields = dom.getElementsByTagName("object")
- for field in fields:
- ret_list.append(field.getAttribute("pk"))
- return ret_list
-
- @staticmethod
- def _get_field_values(serial_str, field_name):
- ret_list = []
- dom = minidom.parseString(serial_str)
- fields = dom.getElementsByTagName("field")
- for field in fields:
- if field.getAttribute("name") == field_name:
- temp = []
- for child in field.childNodes:
- temp.append(child.nodeValue)
- ret_list.append("".join(temp))
- return ret_list
-
-class XmlSerializerTransactionTestCase(SerializersTransactionTestBase, TransactionTestCase):
- serializer_name = "xml"
- fwd_ref_str = """<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="serializers.article">
- <field to="serializers.author" name="author" rel="ManyToOneRel">1</field>
- <field type="CharField" name="headline">Forward references pose no problem</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 15:00:00</field>
- <field to="serializers.category" name="categories" rel="ManyToManyRel">
- <object pk="1"></object>
- </field>
- </object>
- <object pk="1" model="serializers.author">
- <field type="CharField" name="name">Agnes</field>
- </object>
- <object pk="1" model="serializers.category">
- <field type="CharField" name="name">Reference</field></object>
-</django-objects>"""
-
-
-class JsonSerializerTestCase(SerializersTestBase, TestCase):
- serializer_name = "json"
- pkless_str = """[{"pk": null, "model": "serializers.category", "fields": {"name": "Reference"}}]"""
-
- @staticmethod
- def _validate_output(serial_str):
- try:
- simplejson.loads(serial_str)
- except Exception:
- return False
- else:
- return True
-
- @staticmethod
- def _get_pk_values(serial_str):
- ret_list = []
- serial_list = simplejson.loads(serial_str)
- for obj_dict in serial_list:
- ret_list.append(obj_dict["pk"])
- return ret_list
-
- @staticmethod
- def _get_field_values(serial_str, field_name):
- ret_list = []
- serial_list = simplejson.loads(serial_str)
- for obj_dict in serial_list:
- if field_name in obj_dict["fields"]:
- ret_list.append(obj_dict["fields"][field_name])
- return ret_list
-
-class JsonSerializerTransactionTestCase(SerializersTransactionTestBase, TransactionTestCase):
- serializer_name = "json"
- fwd_ref_str = """[
- {
- "pk": 1,
- "model": "serializers.article",
- "fields": {
- "headline": "Forward references pose no problem",
- "pub_date": "2006-06-16 15:00:00",
- "categories": [1],
- "author": 1
- }
- },
- {
- "pk": 1,
- "model": "serializers.category",
- "fields": {
- "name": "Reference"
- }
- },
- {
- "pk": 1,
- "model": "serializers.author",
- "fields": {
- "name": "Agnes"
- }
- }]"""
-
-try:
- import yaml
-except ImportError:
- pass
-else:
- class YamlSerializerTestCase(SerializersTestBase, TestCase):
- serializer_name = "yaml"
- fwd_ref_str = """- fields:
- headline: Forward references pose no problem
- pub_date: 2006-06-16 15:00:00
- categories: [1]
- author: 1
- pk: 1
- model: serializers.article
-- fields:
- name: Reference
- pk: 1
- model: serializers.category
-- fields:
- name: Agnes
- pk: 1
- model: serializers.author"""
-
- pkless_str = """- fields:
- name: Reference
- pk: null
- model: serializers.category"""
-
- @staticmethod
- def _validate_output(serial_str):
- try:
- yaml.load(StringIO(serial_str))
- except Exception:
- return False
- else:
- return True
-
- @staticmethod
- def _get_pk_values(serial_str):
- ret_list = []
- stream = StringIO(serial_str)
- for obj_dict in yaml.load(stream):
- ret_list.append(obj_dict["pk"])
- return ret_list
-
- @staticmethod
- def _get_field_values(serial_str, field_name):
- ret_list = []
- stream = StringIO(serial_str)
- for obj_dict in yaml.load(stream):
- if "fields" in obj_dict and field_name in obj_dict["fields"]:
- field_value = obj_dict["fields"][field_name]
- # yaml.load will return non-string objects for some
- # of the fields we are interested in, this ensures that
- # everything comes back as a string
- if isinstance(field_value, basestring):
- ret_list.append(field_value)
- else:
- ret_list.append(str(field_value))
- return ret_list
-
- class YamlSerializerTransactionTestCase(SerializersTransactionTestBase, TransactionTestCase):
- serializer_name = "yaml"
- fwd_ref_str = """- fields:
- headline: Forward references pose no problem
- pub_date: 2006-06-16 15:00:00
- categories: [1]
- author: 1
- pk: 1
- model: serializers.article
-- fields:
- name: Reference
- pk: 1
- model: serializers.category
-- fields:
- name: Agnes
- pk: 1
- model: serializers.author"""
diff --git a/parts/django/tests/modeltests/signals/__init__.py b/parts/django/tests/modeltests/signals/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/signals/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/signals/models.py b/parts/django/tests/modeltests/signals/models.py
deleted file mode 100644
index f1250b4..0000000
--- a/parts/django/tests/modeltests/signals/models.py
+++ /dev/null
@@ -1,13 +0,0 @@
-"""
-Testing signals before/after saving and deleting.
-"""
-
-from django.db import models
-
-
-class Person(models.Model):
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=20)
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
diff --git a/parts/django/tests/modeltests/signals/tests.py b/parts/django/tests/modeltests/signals/tests.py
deleted file mode 100644
index 27948c6..0000000
--- a/parts/django/tests/modeltests/signals/tests.py
+++ /dev/null
@@ -1,148 +0,0 @@
-from django.db.models import signals
-from django.test import TestCase
-
-from models import Person
-
-
-# #8285: signals can be any callable
-class PostDeleteHandler(object):
- def __init__(self, data):
- self.data = data
-
- def __call__(self, signal, sender, instance, **kwargs):
- self.data.append(
- (instance, instance.id is None)
- )
-
-class MyReceiver(object):
- def __init__(self, param):
- self.param = param
- self._run = False
-
- def __call__(self, signal, sender, **kwargs):
- self._run = True
- signal.disconnect(receiver=self, sender=sender)
-
-class SignalTests(TestCase):
- def test_basic(self):
- # Save up the number of connected signals so that we can check at the
- # end that all the signals we register get properly unregistered (#9989)
- pre_signals = (
- len(signals.pre_save.receivers),
- len(signals.post_save.receivers),
- len(signals.pre_delete.receivers),
- len(signals.post_delete.receivers),
- )
-
- data = []
-
- def pre_save_test(signal, sender, instance, **kwargs):
- data.append(
- (instance, kwargs.get("raw", False))
- )
- signals.pre_save.connect(pre_save_test)
-
- def post_save_test(signal, sender, instance, **kwargs):
- data.append(
- (instance, kwargs.get("created"), kwargs.get("raw", False))
- )
- signals.post_save.connect(post_save_test)
-
- def pre_delete_test(signal, sender, instance, **kwargs):
- data.append(
- (instance, instance.id is None)
- )
- signals.pre_delete.connect(pre_delete_test)
-
- post_delete_test = PostDeleteHandler(data)
- signals.post_delete.connect(post_delete_test)
-
- p1 = Person(first_name="John", last_name="Smith")
- self.assertEqual(data, [])
- p1.save()
- self.assertEqual(data, [
- (p1, False),
- (p1, True, False),
- ])
- data[:] = []
-
- p1.first_name = "Tom"
- p1.save()
- self.assertEqual(data, [
- (p1, False),
- (p1, False, False),
- ])
- data[:] = []
-
- # Calling an internal method purely so that we can trigger a "raw" save.
- p1.save_base(raw=True)
- self.assertEqual(data, [
- (p1, True),
- (p1, False, True),
- ])
- data[:] = []
-
- p1.delete()
- self.assertEqual(data, [
- (p1, False),
- (p1, False),
- ])
- data[:] = []
-
- p2 = Person(first_name="James", last_name="Jones")
- p2.id = 99999
- p2.save()
- self.assertEqual(data, [
- (p2, False),
- (p2, True, False),
- ])
- data[:] = []
-
- p2.id = 99998
- p2.save()
- self.assertEqual(data, [
- (p2, False),
- (p2, True, False),
- ])
- data[:] = []
-
- p2.delete()
- self.assertEqual(data, [
- (p2, False),
- (p2, False)
- ])
-
- self.assertQuerysetEqual(
- Person.objects.all(), [
- "James Jones",
- ],
- unicode
- )
-
- signals.post_delete.disconnect(post_delete_test)
- signals.pre_delete.disconnect(pre_delete_test)
- signals.post_save.disconnect(post_save_test)
- signals.pre_save.disconnect(pre_save_test)
-
- # Check that all our signals got disconnected properly.
- post_signals = (
- len(signals.pre_save.receivers),
- len(signals.post_save.receivers),
- len(signals.pre_delete.receivers),
- len(signals.post_delete.receivers),
- )
- self.assertEqual(pre_signals, post_signals)
-
- def test_disconnect_in_dispatch(self):
- """
- Test that signals that disconnect when being called don't mess future
- dispatching.
- """
- a, b = MyReceiver(1), MyReceiver(2)
- signals.post_save.connect(sender=Person, receiver=a)
- signals.post_save.connect(sender=Person, receiver=b)
- p = Person.objects.create(first_name='John', last_name='Smith')
-
- self.assertTrue(a._run)
- self.assertTrue(b._run)
- self.assertEqual(signals.post_save.receivers, [])
diff --git a/parts/django/tests/modeltests/str/__init__.py b/parts/django/tests/modeltests/str/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/str/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/str/models.py b/parts/django/tests/modeltests/str/models.py
deleted file mode 100644
index 84b8d67..0000000
--- a/parts/django/tests/modeltests/str/models.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-2. Adding __str__() or __unicode__() to models
-
-Although it's not a strict requirement, each model should have a
-``_str__()`` or ``__unicode__()`` method to return a "human-readable"
-representation of the object. Do this not only for your own sanity when dealing
-with the interactive prompt, but also because objects' representations are used
-throughout Django's automatically-generated admin.
-
-Normally, you should write ``__unicode__()`` method, since this will work for
-all field types (and Django will automatically provide an appropriate
-``__str__()`` method). However, you can write a ``__str__()`` method directly,
-if you prefer. You must be careful to encode the results correctly, though.
-"""
-
-from django.db import models
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateTimeField()
-
- def __str__(self):
- # Caution: this is only safe if you are certain that headline will be
- # in ASCII.
- return self.headline
-
-class InternationalArticle(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateTimeField()
-
- def __unicode__(self):
- return self.headline \ No newline at end of file
diff --git a/parts/django/tests/modeltests/str/tests.py b/parts/django/tests/modeltests/str/tests.py
deleted file mode 100644
index 4e4c765..0000000
--- a/parts/django/tests/modeltests/str/tests.py
+++ /dev/null
@@ -1,23 +0,0 @@
- # -*- coding: utf-8 -*-
-import datetime
-
-from django.test import TestCase
-
-from models import Article, InternationalArticle
-
-class SimpleTests(TestCase):
- def test_basic(self):
- a = Article.objects.create(
- headline='Area man programs in Python',
- pub_date=datetime.datetime(2005, 7, 28)
- )
- self.assertEqual(str(a), 'Area man programs in Python')
- self.assertEqual(repr(a), '<Article: Area man programs in Python>')
-
- def test_international(self):
- a = InternationalArticle.objects.create(
- headline=u'Girl wins €12.500 in lottery',
- pub_date=datetime.datetime(2005, 7, 28)
- )
- # The default str() output will be the UTF-8 encoded output of __unicode__().
- self.assertEqual(str(a), 'Girl wins \xe2\x82\xac12.500 in lottery') \ No newline at end of file
diff --git a/parts/django/tests/modeltests/test_client/__init__.py b/parts/django/tests/modeltests/test_client/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/test_client/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/test_client/fixtures/testdata.json b/parts/django/tests/modeltests/test_client/fixtures/testdata.json
deleted file mode 100644
index 0dcf625..0000000
--- a/parts/django/tests/modeltests/test_client/fixtures/testdata.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "2",
- "model": "auth.user",
- "fields": {
- "username": "inactive",
- "first_name": "Inactive",
- "last_name": "User",
- "is_active": false,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "3",
- "model": "auth.user",
- "fields": {
- "username": "staff",
- "first_name": "Staff",
- "last_name": "Member",
- "is_active": true,
- "is_superuser": false,
- "is_staff": true,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/modeltests/test_client/models.py b/parts/django/tests/modeltests/test_client/models.py
deleted file mode 100644
index 654f649..0000000
--- a/parts/django/tests/modeltests/test_client/models.py
+++ /dev/null
@@ -1,459 +0,0 @@
-# coding: utf-8
-"""
-39. Testing using the Test Client
-
-The test client is a class that can act like a simple
-browser for testing purposes.
-
-It allows the user to compose GET and POST requests, and
-obtain the response that the server gave to those requests.
-The server Response objects are annotated with the details
-of the contexts and templates that were rendered during the
-process of serving the request.
-
-``Client`` objects are stateful - they will retain cookie (and
-thus session) details for the lifetime of the ``Client`` instance.
-
-This is not intended as a replacement for Twill, Selenium, or
-other browser automation frameworks - it is here to allow
-testing against the contexts and templates produced by a view,
-rather than the HTML rendered to the end-user.
-
-"""
-from django.test import Client, TestCase
-from django.conf import settings
-from django.core import mail
-
-class ClientTest(TestCase):
- fixtures = ['testdata.json']
-
- def test_get_view(self):
- "GET a view"
- # The data is ignored, but let's check it doesn't crash the system
- # anyway.
- data = {'var': u'\xf2'}
- response = self.client.get('/test_client/get_view/', data)
-
- # Check some response details
- self.assertContains(response, 'This is a test')
- self.assertEqual(response.context['var'], u'\xf2')
- self.assertEqual(response.template.name, 'GET Template')
-
- def test_get_post_view(self):
- "GET a view that normally expects POSTs"
- response = self.client.get('/test_client/post_view/', {})
-
- # Check some response details
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.template.name, 'Empty GET Template')
- self.assertTemplateUsed(response, 'Empty GET Template')
- self.assertTemplateNotUsed(response, 'Empty POST Template')
-
- def test_empty_post(self):
- "POST an empty dictionary to a view"
- response = self.client.post('/test_client/post_view/', {})
-
- # Check some response details
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.template.name, 'Empty POST Template')
- self.assertTemplateNotUsed(response, 'Empty GET Template')
- self.assertTemplateUsed(response, 'Empty POST Template')
-
- def test_post(self):
- "POST some data to a view"
- post_data = {
- 'value': 37
- }
- response = self.client.post('/test_client/post_view/', post_data)
-
- # Check some response details
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['data'], '37')
- self.assertEqual(response.template.name, 'POST Template')
- self.assertTrue('Data received' in response.content)
-
- def test_response_headers(self):
- "Check the value of HTTP headers returned in a response"
- response = self.client.get("/test_client/header_view/")
-
- self.assertEquals(response['X-DJANGO-TEST'], 'Slartibartfast')
-
- def test_raw_post(self):
- "POST raw data (with a content type) to a view"
- test_doc = """<?xml version="1.0" encoding="utf-8"?><library><book><title>Blink</title><author>Malcolm Gladwell</author></book></library>"""
- response = self.client.post("/test_client/raw_post_view/", test_doc,
- content_type="text/xml")
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.template.name, "Book template")
- self.assertEqual(response.content, "Blink - Malcolm Gladwell")
-
- def test_redirect(self):
- "GET a URL that redirects elsewhere"
- response = self.client.get('/test_client/redirect_view/')
- # Check that the response was a 302 (redirect) and that
- # assertRedirect() understands to put an implicit http://testserver/ in
- # front of non-absolute URLs.
- self.assertRedirects(response, '/test_client/get_view/')
-
- host = 'django.testserver'
- client_providing_host = Client(HTTP_HOST=host)
- response = client_providing_host.get('/test_client/redirect_view/')
- # Check that the response was a 302 (redirect) with absolute URI
- self.assertRedirects(response, '/test_client/get_view/', host=host)
-
- def test_redirect_with_query(self):
- "GET a URL that redirects with given GET parameters"
- response = self.client.get('/test_client/redirect_view/', {'var': 'value'})
-
- # Check if parameters are intact
- self.assertRedirects(response, 'http://testserver/test_client/get_view/?var=value')
-
- def test_permanent_redirect(self):
- "GET a URL that redirects permanently elsewhere"
- response = self.client.get('/test_client/permanent_redirect_view/')
- # Check that the response was a 301 (permanent redirect)
- self.assertRedirects(response, 'http://testserver/test_client/get_view/', status_code=301)
-
- client_providing_host = Client(HTTP_HOST='django.testserver')
- response = client_providing_host.get('/test_client/permanent_redirect_view/')
- # Check that the response was a 301 (permanent redirect) with absolute URI
- self.assertRedirects(response, 'http://django.testserver/test_client/get_view/', status_code=301)
-
- def test_temporary_redirect(self):
- "GET a URL that does a non-permanent redirect"
- response = self.client.get('/test_client/temporary_redirect_view/')
- # Check that the response was a 302 (non-permanent redirect)
- self.assertRedirects(response, 'http://testserver/test_client/get_view/', status_code=302)
-
- def test_redirect_to_strange_location(self):
- "GET a URL that redirects to a non-200 page"
- response = self.client.get('/test_client/double_redirect_view/')
-
- # Check that the response was a 302, and that
- # the attempt to get the redirection location returned 301 when retrieved
- self.assertRedirects(response, 'http://testserver/test_client/permanent_redirect_view/', target_status_code=301)
-
- def test_follow_redirect(self):
- "A URL that redirects can be followed to termination."
- response = self.client.get('/test_client/double_redirect_view/', follow=True)
- self.assertRedirects(response, 'http://testserver/test_client/get_view/', status_code=302, target_status_code=200)
- self.assertEquals(len(response.redirect_chain), 2)
-
- def test_redirect_http(self):
- "GET a URL that redirects to an http URI"
- response = self.client.get('/test_client/http_redirect_view/',follow=True)
- self.assertFalse(response.test_was_secure_request)
-
- def test_redirect_https(self):
- "GET a URL that redirects to an https URI"
- response = self.client.get('/test_client/https_redirect_view/',follow=True)
- self.assertTrue(response.test_was_secure_request)
-
- def test_notfound_response(self):
- "GET a URL that responds as '404:Not Found'"
- response = self.client.get('/test_client/bad_view/')
-
- # Check that the response was a 404, and that the content contains MAGIC
- self.assertContains(response, 'MAGIC', status_code=404)
-
- def test_valid_form(self):
- "POST valid data to a form"
- post_data = {
- 'text': 'Hello World',
- 'email': 'foo@example.com',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Valid POST Template")
-
- def test_valid_form_with_hints(self):
- "GET a form, providing hints in the GET data"
- hints = {
- 'text': 'Hello World',
- 'multi': ('b','c','e')
- }
- response = self.client.get('/test_client/form_view/', data=hints)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Form GET Template")
- # Check that the multi-value data has been rolled out ok
- self.assertContains(response, 'Select a valid choice.', 0)
-
- def test_incomplete_data_form(self):
- "POST incomplete data to a form"
- post_data = {
- 'text': 'Hello World',
- 'value': 37
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertContains(response, 'This field is required.', 3)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- self.assertFormError(response, 'form', 'email', 'This field is required.')
- self.assertFormError(response, 'form', 'single', 'This field is required.')
- self.assertFormError(response, 'form', 'multi', 'This field is required.')
-
- def test_form_error(self):
- "POST erroneous data to a form"
- post_data = {
- 'text': 'Hello World',
- 'email': 'not an email address',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- self.assertFormError(response, 'form', 'email', 'Enter a valid e-mail address.')
-
- def test_valid_form_with_template(self):
- "POST valid data to a form using multiple templates"
- post_data = {
- 'text': 'Hello World',
- 'email': 'foo@example.com',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view_with_template/', post_data)
- self.assertContains(response, 'POST data OK')
- self.assertTemplateUsed(response, "form_view.html")
- self.assertTemplateUsed(response, 'base.html')
- self.assertTemplateNotUsed(response, "Valid POST Template")
-
- def test_incomplete_data_form_with_template(self):
- "POST incomplete data to a form using multiple templates"
- post_data = {
- 'text': 'Hello World',
- 'value': 37
- }
- response = self.client.post('/test_client/form_view_with_template/', post_data)
- self.assertContains(response, 'POST data has errors')
- self.assertTemplateUsed(response, 'form_view.html')
- self.assertTemplateUsed(response, 'base.html')
- self.assertTemplateNotUsed(response, "Invalid POST Template")
-
- self.assertFormError(response, 'form', 'email', 'This field is required.')
- self.assertFormError(response, 'form', 'single', 'This field is required.')
- self.assertFormError(response, 'form', 'multi', 'This field is required.')
-
- def test_form_error_with_template(self):
- "POST erroneous data to a form using multiple templates"
- post_data = {
- 'text': 'Hello World',
- 'email': 'not an email address',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view_with_template/', post_data)
- self.assertContains(response, 'POST data has errors')
- self.assertTemplateUsed(response, "form_view.html")
- self.assertTemplateUsed(response, 'base.html')
- self.assertTemplateNotUsed(response, "Invalid POST Template")
-
- self.assertFormError(response, 'form', 'email', 'Enter a valid e-mail address.')
-
- def test_unknown_page(self):
- "GET an invalid URL"
- response = self.client.get('/test_client/unknown_view/')
-
- # Check that the response was a 404
- self.assertEqual(response.status_code, 404)
-
- def test_view_with_login(self):
- "Request a page that is protected with @login_required"
-
- # Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/login_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/login_protected_view/')
-
- # Log in
- login = self.client.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['user'].username, 'testclient')
-
- def test_view_with_method_login(self):
- "Request a page that is protected with a @login_required method"
-
- # Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/login_protected_method_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/login_protected_method_view/')
-
- # Log in
- login = self.client.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Request a page that requires a login
- response = self.client.get('/test_client/login_protected_method_view/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['user'].username, 'testclient')
-
- def test_view_with_login_and_custom_redirect(self):
- "Request a page that is protected with @login_required(redirect_field_name='redirect_to')"
-
- # Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/login_protected_view_custom_redirect/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?redirect_to=/test_client/login_protected_view_custom_redirect/')
-
- # Log in
- login = self.client.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view_custom_redirect/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['user'].username, 'testclient')
-
- def test_view_with_bad_login(self):
- "Request a page that is protected with @login, but use bad credentials"
-
- login = self.client.login(username='otheruser', password='nopassword')
- self.assertFalse(login)
-
- def test_view_with_inactive_login(self):
- "Request a page that is protected with @login, but use an inactive login"
-
- login = self.client.login(username='inactive', password='password')
- self.assertFalse(login)
-
- def test_logout(self):
- "Request a logout after logging in"
- # Log in
- self.client.login(username='testclient', password='password')
-
- # Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['user'].username, 'testclient')
-
- # Log out
- self.client.logout()
-
- # Request a page that requires a login
- response = self.client.get('/test_client/login_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/login_protected_view/')
-
- def test_view_with_permissions(self):
- "Request a page that is protected with @permission_required"
-
- # Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/permission_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_view/')
-
- # Log in
- login = self.client.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Log in with wrong permissions. Should result in 302.
- response = self.client.get('/test_client/permission_protected_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_view/')
-
- # TODO: Log in with right permissions and request the page again
-
- def test_view_with_method_permissions(self):
- "Request a page that is protected with a @permission_required method"
-
- # Get the page without logging in. Should result in 302.
- response = self.client.get('/test_client/permission_protected_method_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_method_view/')
-
- # Log in
- login = self.client.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Log in with wrong permissions. Should result in 302.
- response = self.client.get('/test_client/permission_protected_method_view/')
- self.assertRedirects(response, 'http://testserver/accounts/login/?next=/test_client/permission_protected_method_view/')
-
- # TODO: Log in with right permissions and request the page again
-
- def test_session_modifying_view(self):
- "Request a page that modifies the session"
- # Session value isn't set initially
- try:
- self.client.session['tobacconist']
- self.fail("Shouldn't have a session value")
- except KeyError:
- pass
-
- from django.contrib.sessions.models import Session
- response = self.client.post('/test_client/session_view/')
-
- # Check that the session was modified
- self.assertEquals(self.client.session['tobacconist'], 'hovercraft')
-
- def test_view_with_exception(self):
- "Request a page that is known to throw an error"
- self.assertRaises(KeyError, self.client.get, "/test_client/broken_view/")
-
- #Try the same assertion, a different way
- try:
- self.client.get('/test_client/broken_view/')
- self.fail('Should raise an error')
- except KeyError:
- pass
-
- def test_mail_sending(self):
- "Test that mail is redirected to a dummy outbox during test setup"
-
- response = self.client.get('/test_client/mail_sending_view/')
- self.assertEqual(response.status_code, 200)
-
- self.assertEqual(len(mail.outbox), 1)
- self.assertEqual(mail.outbox[0].subject, 'Test message')
- self.assertEqual(mail.outbox[0].body, 'This is a test email')
- self.assertEqual(mail.outbox[0].from_email, 'from@example.com')
- self.assertEqual(mail.outbox[0].to[0], 'first@example.com')
- self.assertEqual(mail.outbox[0].to[1], 'second@example.com')
-
- def test_mass_mail_sending(self):
- "Test that mass mail is redirected to a dummy outbox during test setup"
-
- response = self.client.get('/test_client/mass_mail_sending_view/')
- self.assertEqual(response.status_code, 200)
-
- self.assertEqual(len(mail.outbox), 2)
- self.assertEqual(mail.outbox[0].subject, 'First Test message')
- self.assertEqual(mail.outbox[0].body, 'This is the first test email')
- self.assertEqual(mail.outbox[0].from_email, 'from@example.com')
- self.assertEqual(mail.outbox[0].to[0], 'first@example.com')
- self.assertEqual(mail.outbox[0].to[1], 'second@example.com')
-
- self.assertEqual(mail.outbox[1].subject, 'Second Test message')
- self.assertEqual(mail.outbox[1].body, 'This is the second test email')
- self.assertEqual(mail.outbox[1].from_email, 'from@example.com')
- self.assertEqual(mail.outbox[1].to[0], 'second@example.com')
- self.assertEqual(mail.outbox[1].to[1], 'third@example.com')
-
-class CSRFEnabledClientTests(TestCase):
- def setUp(self):
- # Enable the CSRF middleware for this test
- self.old_MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES
- csrf_middleware_class = 'django.middleware.csrf.CsrfViewMiddleware'
- if csrf_middleware_class not in settings.MIDDLEWARE_CLASSES:
- settings.MIDDLEWARE_CLASSES += (csrf_middleware_class,)
-
- def tearDown(self):
- settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
-
- def test_csrf_enabled_client(self):
- "A client can be instantiated with CSRF checks enabled"
- csrf_client = Client(enforce_csrf_checks=True)
-
- # The normal client allows the post
- response = self.client.post('/test_client/post_view/', {})
- self.assertEqual(response.status_code, 200)
-
- # The CSRF-enabled client rejects it
- response = csrf_client.post('/test_client/post_view/', {})
- self.assertEqual(response.status_code, 403)
diff --git a/parts/django/tests/modeltests/test_client/tests.py b/parts/django/tests/modeltests/test_client/tests.py
deleted file mode 100644
index 09f292e..0000000
--- a/parts/django/tests/modeltests/test_client/tests.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Validate that you can override the default test suite
-
-import unittest
-
-def suite():
- """
- Define a suite that deliberately ignores a test defined in
- this module.
- """
-
- testSuite = unittest.TestSuite()
- testSuite.addTest(SampleTests('testGoodStuff'))
- return testSuite
-
-class SampleTests(unittest.TestCase):
- def testGoodStuff(self):
- pass
-
- def testBadStuff(self):
- self.fail("This test shouldn't run")
diff --git a/parts/django/tests/modeltests/test_client/urls.py b/parts/django/tests/modeltests/test_client/urls.py
deleted file mode 100644
index 9e0eabe..0000000
--- a/parts/django/tests/modeltests/test_client/urls.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from django.conf.urls.defaults import *
-from django.views.generic.simple import redirect_to
-import views
-
-urlpatterns = patterns('',
- (r'^get_view/$', views.get_view),
- (r'^post_view/$', views.post_view),
- (r'^header_view/$', views.view_with_header),
- (r'^raw_post_view/$', views.raw_post_view),
- (r'^redirect_view/$', views.redirect_view),
- (r'^secure_view/$', views.view_with_secure),
- (r'^permanent_redirect_view/$', redirect_to, {'url': '/test_client/get_view/'}),
- (r'^temporary_redirect_view/$', redirect_to, {'url': '/test_client/get_view/', 'permanent': False}),
- (r'^http_redirect_view/$', redirect_to, {'url': '/test_client/secure_view/'}),
- (r'^https_redirect_view/$', redirect_to, {'url': 'https://testserver/test_client/secure_view/'}),
- (r'^double_redirect_view/$', views.double_redirect_view),
- (r'^bad_view/$', views.bad_view),
- (r'^form_view/$', views.form_view),
- (r'^form_view_with_template/$', views.form_view_with_template),
- (r'^login_protected_view/$', views.login_protected_view),
- (r'^login_protected_method_view/$', views.login_protected_method_view),
- (r'^login_protected_view_custom_redirect/$', views.login_protected_view_changed_redirect),
- (r'^permission_protected_view/$', views.permission_protected_view),
- (r'^permission_protected_method_view/$', views.permission_protected_method_view),
- (r'^session_view/$', views.session_view),
- (r'^broken_view/$', views.broken_view),
- (r'^mail_sending_view/$', views.mail_sending_view),
- (r'^mass_mail_sending_view/$', views.mass_mail_sending_view)
-)
diff --git a/parts/django/tests/modeltests/test_client/views.py b/parts/django/tests/modeltests/test_client/views.py
deleted file mode 100644
index baa9525..0000000
--- a/parts/django/tests/modeltests/test_client/views.py
+++ /dev/null
@@ -1,214 +0,0 @@
-from xml.dom.minidom import parseString
-
-from django.core import mail
-from django.template import Context, Template
-from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
-from django.contrib.auth.decorators import login_required, permission_required
-from django.forms.forms import Form
-from django.forms import fields
-from django.shortcuts import render_to_response
-from django.utils.decorators import method_decorator
-
-def get_view(request):
- "A simple view that expects a GET request, and returns a rendered template"
- t = Template('This is a test. {{ var }} is the value.', name='GET Template')
- c = Context({'var': request.GET.get('var', 42)})
-
- return HttpResponse(t.render(c))
-
-def post_view(request):
- """A view that expects a POST, and returns a different template depending
- on whether any POST data is available
- """
- if request.method == 'POST':
- if request.POST:
- t = Template('Data received: {{ data }} is the value.', name='POST Template')
- c = Context({'data': request.POST['value']})
- else:
- t = Template('Viewing POST page.', name='Empty POST Template')
- c = Context()
- else:
- t = Template('Viewing GET page.', name='Empty GET Template')
- c = Context()
-
- return HttpResponse(t.render(c))
-
-def view_with_header(request):
- "A view that has a custom header"
- response = HttpResponse()
- response['X-DJANGO-TEST'] = 'Slartibartfast'
- return response
-
-def raw_post_view(request):
- """A view which expects raw XML to be posted and returns content extracted
- from the XML"""
- if request.method == 'POST':
- root = parseString(request.raw_post_data)
- first_book = root.firstChild.firstChild
- title, author = [n.firstChild.nodeValue for n in first_book.childNodes]
- t = Template("{{ title }} - {{ author }}", name="Book template")
- c = Context({"title": title, "author": author})
- else:
- t = Template("GET request.", name="Book GET template")
- c = Context()
-
- return HttpResponse(t.render(c))
-
-def redirect_view(request):
- "A view that redirects all requests to the GET view"
- if request.GET:
- from urllib import urlencode
- query = '?' + urlencode(request.GET, True)
- else:
- query = ''
- return HttpResponseRedirect('/test_client/get_view/' + query)
-
-def view_with_secure(request):
- "A view that indicates if the request was secure"
- response = HttpResponse()
- response.test_was_secure_request = request.is_secure()
- return response
-
-def double_redirect_view(request):
- "A view that redirects all requests to a redirection view"
- return HttpResponseRedirect('/test_client/permanent_redirect_view/')
-
-def bad_view(request):
- "A view that returns a 404 with some error content"
- return HttpResponseNotFound('Not found!. This page contains some MAGIC content')
-
-TestChoices = (
- ('a', 'First Choice'),
- ('b', 'Second Choice'),
- ('c', 'Third Choice'),
- ('d', 'Fourth Choice'),
- ('e', 'Fifth Choice')
-)
-
-class TestForm(Form):
- text = fields.CharField()
- email = fields.EmailField()
- value = fields.IntegerField()
- single = fields.ChoiceField(choices=TestChoices)
- multi = fields.MultipleChoiceField(choices=TestChoices)
-
-def form_view(request):
- "A view that tests a simple form"
- if request.method == 'POST':
- form = TestForm(request.POST)
- if form.is_valid():
- t = Template('Valid POST data.', name='Valid POST Template')
- c = Context()
- else:
- t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
- c = Context({'form': form})
- else:
- form = TestForm(request.GET)
- t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
- c = Context({'form': form})
-
- return HttpResponse(t.render(c))
-
-def form_view_with_template(request):
- "A view that tests a simple form"
- if request.method == 'POST':
- form = TestForm(request.POST)
- if form.is_valid():
- message = 'POST data OK'
- else:
- message = 'POST data has errors'
- else:
- form = TestForm()
- message = 'GET form page'
- return render_to_response('form_view.html',
- {
- 'form': form,
- 'message': message
- }
- )
-
-def login_protected_view(request):
- "A simple view that is login protected."
- t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
- c = Context({'user': request.user})
-
- return HttpResponse(t.render(c))
-login_protected_view = login_required(login_protected_view)
-
-def login_protected_view_changed_redirect(request):
- "A simple view that is login protected with a custom redirect field set"
- t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
- c = Context({'user': request.user})
-
- return HttpResponse(t.render(c))
-login_protected_view_changed_redirect = login_required(redirect_field_name="redirect_to")(login_protected_view_changed_redirect)
-
-def permission_protected_view(request):
- "A simple view that is permission protected."
- t = Template('This is a permission protected test. '
- 'Username is {{ user.username }}. '
- 'Permissions are {{ user.get_all_permissions }}.' ,
- name='Permissions Template')
- c = Context({'user': request.user})
- return HttpResponse(t.render(c))
-permission_protected_view = permission_required('modeltests.test_perm')(permission_protected_view)
-
-class _ViewManager(object):
- @method_decorator(login_required)
- def login_protected_view(self, request):
- t = Template('This is a login protected test using a method. '
- 'Username is {{ user.username }}.',
- name='Login Method Template')
- c = Context({'user': request.user})
- return HttpResponse(t.render(c))
-
- @method_decorator(permission_required('modeltests.test_perm'))
- def permission_protected_view(self, request):
- t = Template('This is a permission protected test using a method. '
- 'Username is {{ user.username }}. '
- 'Permissions are {{ user.get_all_permissions }}.' ,
- name='Permissions Template')
- c = Context({'user': request.user})
- return HttpResponse(t.render(c))
-
-_view_manager = _ViewManager()
-login_protected_method_view = _view_manager.login_protected_view
-permission_protected_method_view = _view_manager.permission_protected_view
-
-def session_view(request):
- "A view that modifies the session"
- request.session['tobacconist'] = 'hovercraft'
-
- t = Template('This is a view that modifies the session.',
- name='Session Modifying View Template')
- c = Context()
- return HttpResponse(t.render(c))
-
-def broken_view(request):
- """A view which just raises an exception, simulating a broken view."""
- raise KeyError("Oops! Looks like you wrote some bad code.")
-
-def mail_sending_view(request):
- mail.EmailMessage(
- "Test message",
- "This is a test email",
- "from@example.com",
- ['first@example.com', 'second@example.com']).send()
- return HttpResponse("Mail sent")
-
-def mass_mail_sending_view(request):
- m1 = mail.EmailMessage(
- 'First Test message',
- 'This is the first test email',
- 'from@example.com',
- ['first@example.com', 'second@example.com'])
- m2 = mail.EmailMessage(
- 'Second Test message',
- 'This is the second test email',
- 'from@example.com',
- ['second@example.com', 'third@example.com'])
-
- c = mail.get_connection()
- c.send_messages([m1,m2])
-
- return HttpResponse("Mail sent")
diff --git a/parts/django/tests/modeltests/transactions/__init__.py b/parts/django/tests/modeltests/transactions/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/transactions/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/transactions/models.py b/parts/django/tests/modeltests/transactions/models.py
deleted file mode 100644
index d957fe1..0000000
--- a/parts/django/tests/modeltests/transactions/models.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""
-15. Transactions
-
-Django handles transactions in three different ways. The default is to commit
-each transaction upon a write, but you can decorate a function to get
-commit-on-success behavior. Alternatively, you can manage the transaction
-manually.
-"""
-
-from django.db import models, DEFAULT_DB_ALIAS
-
-class Reporter(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
- email = models.EmailField()
-
- class Meta:
- ordering = ('first_name', 'last_name')
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name) \ No newline at end of file
diff --git a/parts/django/tests/modeltests/transactions/tests.py b/parts/django/tests/modeltests/transactions/tests.py
deleted file mode 100644
index 9964f5d..0000000
--- a/parts/django/tests/modeltests/transactions/tests.py
+++ /dev/null
@@ -1,155 +0,0 @@
-from django.test import TransactionTestCase
-from django.db import connection, transaction, IntegrityError, DEFAULT_DB_ALIAS
-from django.conf import settings
-
-from models import Reporter
-
-PGSQL = 'psycopg2' in settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE']
-MYSQL = 'mysql' in settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE']
-
-class TransactionTests(TransactionTestCase):
-
- if not MYSQL:
-
- def create_a_reporter_then_fail(self, first, last):
- a = Reporter(first_name=first, last_name=last)
- a.save()
- raise Exception("I meant to do that")
-
- def remove_a_reporter(self, first_name):
- r = Reporter.objects.get(first_name="Alice")
- r.delete()
-
- def manually_managed(self):
- r = Reporter(first_name="Dirk", last_name="Gently")
- r.save()
- transaction.commit()
-
- def manually_managed_mistake(self):
- r = Reporter(first_name="Edward", last_name="Woodward")
- r.save()
- # Oops, I forgot to commit/rollback!
-
- def execute_bad_sql(self):
- cursor = connection.cursor()
- cursor.execute("INSERT INTO transactions_reporter (first_name, last_name) VALUES ('Douglas', 'Adams');")
- transaction.set_dirty()
-
- def test_autocommit(self):
- """
- The default behavior is to autocommit after each save() action.
- """
- self.assertRaises(Exception,
- self.create_a_reporter_then_fail,
- "Alice", "Smith"
- )
-
- # The object created before the exception still exists
- self.assertEqual(Reporter.objects.count(), 1)
-
- def test_autocommit_decorator(self):
- """
- The autocommit decorator works exactly the same as the default behavior.
- """
- autocomitted_create_then_fail = transaction.autocommit(
- self.create_a_reporter_then_fail
- )
- self.assertRaises(Exception,
- autocomitted_create_then_fail,
- "Alice", "Smith"
- )
- # Again, the object created before the exception still exists
- self.assertEqual(Reporter.objects.count(), 1)
-
- def test_autocommit_decorator_with_using(self):
- """
- The autocommit decorator also works with a using argument.
- """
- autocomitted_create_then_fail = transaction.autocommit(using='default')(
- self.create_a_reporter_then_fail
- )
- self.assertRaises(Exception,
- autocomitted_create_then_fail,
- "Alice", "Smith"
- )
- # Again, the object created before the exception still exists
- self.assertEqual(Reporter.objects.count(), 1)
-
- def test_commit_on_success(self):
- """
- With the commit_on_success decorator, the transaction is only committed
- if the function doesn't throw an exception.
- """
- committed_on_success = transaction.commit_on_success(
- self.create_a_reporter_then_fail)
- self.assertRaises(Exception, committed_on_success, "Dirk", "Gently")
- # This time the object never got saved
- self.assertEqual(Reporter.objects.count(), 0)
-
- def test_commit_on_success_with_using(self):
- """
- The commit_on_success decorator also works with a using argument.
- """
- using_committed_on_success = transaction.commit_on_success(using='default')(
- self.create_a_reporter_then_fail
- )
- self.assertRaises(Exception,
- using_committed_on_success,
- "Dirk", "Gently"
- )
- # This time the object never got saved
- self.assertEqual(Reporter.objects.count(), 0)
-
- def test_commit_on_success_succeed(self):
- """
- If there aren't any exceptions, the data will get saved.
- """
- Reporter.objects.create(first_name="Alice", last_name="Smith")
- remove_comitted_on_success = transaction.commit_on_success(
- self.remove_a_reporter
- )
- remove_comitted_on_success("Alice")
- self.assertEqual(list(Reporter.objects.all()), [])
-
- def test_manually_managed(self):
- """
- You can manually manage transactions if you really want to, but you
- have to remember to commit/rollback.
- """
- manually_managed = transaction.commit_manually(self.manually_managed)
- manually_managed()
- self.assertEqual(Reporter.objects.count(), 1)
-
- def test_manually_managed_mistake(self):
- """
- If you forget, you'll get bad errors.
- """
- manually_managed_mistake = transaction.commit_manually(
- self.manually_managed_mistake
- )
- self.assertRaises(transaction.TransactionManagementError,
- manually_managed_mistake)
-
- def test_manually_managed_with_using(self):
- """
- The commit_manually function also works with a using argument.
- """
- using_manually_managed_mistake = transaction.commit_manually(using='default')(
- self.manually_managed_mistake
- )
- self.assertRaises(transaction.TransactionManagementError,
- using_manually_managed_mistake
- )
-
- if PGSQL:
-
- def test_bad_sql(self):
- """
- Regression for #11900: If a function wrapped by commit_on_success
- writes a transaction that can't be committed, that transaction should
- be rolled back. The bug is only visible using the psycopg2 backend,
- though the fix is generally a good idea.
- """
- execute_bad_sql = transaction.commit_on_success(self.execute_bad_sql)
- self.assertRaises(IntegrityError, execute_bad_sql)
- transaction.rollback()
diff --git a/parts/django/tests/modeltests/unmanaged_models/__init__.py b/parts/django/tests/modeltests/unmanaged_models/__init__.py
deleted file mode 100644
index 139597f..0000000
--- a/parts/django/tests/modeltests/unmanaged_models/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/parts/django/tests/modeltests/unmanaged_models/models.py b/parts/django/tests/modeltests/unmanaged_models/models.py
deleted file mode 100644
index 0c2cf50..0000000
--- a/parts/django/tests/modeltests/unmanaged_models/models.py
+++ /dev/null
@@ -1,125 +0,0 @@
-"""
-Models can have a ``managed`` attribute, which specifies whether the SQL code
-is generated for the table on various manage.py operations.
-"""
-
-from django.db import models
-
-# All of these models are creatd in the database by Django.
-
-class A01(models.Model):
- f_a = models.CharField(max_length=10, db_index=True)
- f_b = models.IntegerField()
-
- class Meta:
- db_table = 'A01'
-
- def __unicode__(self):
- return self.f_a
-
-class B01(models.Model):
- fk_a = models.ForeignKey(A01)
- f_a = models.CharField(max_length=10, db_index=True)
- f_b = models.IntegerField()
-
- class Meta:
- db_table = 'B01'
- # 'managed' is True by default. This tests we can set it explicitly.
- managed = True
-
- def __unicode__(self):
- return self.f_a
-
-class C01(models.Model):
- mm_a = models.ManyToManyField(A01, db_table='D01')
- f_a = models.CharField(max_length=10, db_index=True)
- f_b = models.IntegerField()
-
- class Meta:
- db_table = 'C01'
-
- def __unicode__(self):
- return self.f_a
-
-# All of these models use the same tables as the previous set (they are shadows
-# of possibly a subset of the columns). There should be no creation errors,
-# since we have told Django they aren't managed by Django.
-
-class A02(models.Model):
- f_a = models.CharField(max_length=10, db_index=True)
-
- class Meta:
- db_table = 'A01'
- managed = False
-
- def __unicode__(self):
- return self.f_a
-
-class B02(models.Model):
- class Meta:
- db_table = 'B01'
- managed = False
-
- fk_a = models.ForeignKey(A02)
- f_a = models.CharField(max_length=10, db_index=True)
- f_b = models.IntegerField()
-
- def __unicode__(self):
- return self.f_a
-
-# To re-use the many-to-many intermediate table, we need to manually set up
-# things up.
-class C02(models.Model):
- mm_a = models.ManyToManyField(A02, through="Intermediate")
- f_a = models.CharField(max_length=10, db_index=True)
- f_b = models.IntegerField()
-
- class Meta:
- db_table = 'C01'
- managed = False
-
- def __unicode__(self):
- return self.f_a
-
-class Intermediate(models.Model):
- a02 = models.ForeignKey(A02, db_column="a01_id")
- c02 = models.ForeignKey(C02, db_column="c01_id")
-
- class Meta:
- db_table = 'D01'
- managed = False
-
-#
-# These next models test the creation (or not) of many to many join tables
-# between managed and unmanaged models. A join table between two unmanaged
-# models shouldn't be automatically created (see #10647).
-#
-
-# Firstly, we need some models that will create the tables, purely so that the
-# tables are created. This is a test setup, not a requirement for unmanaged
-# models.
-class Proxy1(models.Model):
- class Meta:
- db_table = "unmanaged_models_proxy1"
-
-class Proxy2(models.Model):
- class Meta:
- db_table = "unmanaged_models_proxy2"
-
-class Unmanaged1(models.Model):
- class Meta:
- managed = False
- db_table = "unmanaged_models_proxy1"
-
-# Unmanged with an m2m to unmanaged: the intermediary table won't be created.
-class Unmanaged2(models.Model):
- mm = models.ManyToManyField(Unmanaged1)
-
- class Meta:
- managed = False
- db_table = "unmanaged_models_proxy2"
-
-# Here's an unmanaged model with an m2m to a managed one; the intermediary
-# table *will* be created (unless given a custom `through` as for C02 above).
-class Managed1(models.Model):
- mm = models.ManyToManyField(Unmanaged1)
diff --git a/parts/django/tests/modeltests/unmanaged_models/tests.py b/parts/django/tests/modeltests/unmanaged_models/tests.py
deleted file mode 100644
index dbbe848..0000000
--- a/parts/django/tests/modeltests/unmanaged_models/tests.py
+++ /dev/null
@@ -1,58 +0,0 @@
-from django.test import TestCase
-from django.db import connection
-from models import Unmanaged1, Unmanaged2, Managed1
-from models import A01, A02, B01, B02, C01, C02
-
-class SimpleTests(TestCase):
-
- def test_simple(self):
- """
- The main test here is that the all the models can be created without
- any database errors. We can also do some more simple insertion and
- lookup tests whilst we're here to show that the second of models do
- refer to the tables from the first set.
- """
- # Insert some data into one set of models.
- a = A01.objects.create(f_a="foo", f_b=42)
- B01.objects.create(fk_a=a, f_a="fred", f_b=1729)
- c = C01.objects.create(f_a="barney", f_b=1)
- c.mm_a = [a]
-
- # ... and pull it out via the other set.
- a2 = A02.objects.all()[0]
- self.assertTrue(isinstance(a2, A02))
- self.assertEqual(a2.f_a, "foo")
-
- b2 = B02.objects.all()[0]
- self.assertTrue(isinstance(b2, B02))
- self.assertEqual(b2.f_a, "fred")
-
- self.assertTrue(isinstance(b2.fk_a, A02))
- self.assertEqual(b2.fk_a.f_a, "foo")
-
- self.assertEqual(list(C02.objects.filter(f_a=None)), [])
-
- resp = list(C02.objects.filter(mm_a=a.id))
- self.assertEqual(len(resp), 1)
-
- self.assertTrue(isinstance(resp[0], C02))
- self.assertEqual(resp[0].f_a, 'barney')
-
-
-class ManyToManyUnmanagedTests(TestCase):
-
- def test_many_to_many_between_unmanaged(self):
- """
- The intermediary table between two unmanaged models should not be created.
- """
- table = Unmanaged2._meta.get_field('mm').m2m_db_table()
- tables = connection.introspection.table_names()
- self.assert_(table not in tables, "Table '%s' should not exist, but it does." % table)
-
- def test_many_to_many_between_unmanaged_and_managed(self):
- """
- An intermediary table between a managed and an unmanaged model should be created.
- """
- table = Managed1._meta.get_field('mm').m2m_db_table()
- tables = connection.introspection.table_names()
- self.assert_(table in tables, "Table '%s' does not exist." % table)
diff --git a/parts/django/tests/modeltests/update/__init__.py b/parts/django/tests/modeltests/update/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/update/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/update/models.py b/parts/django/tests/modeltests/update/models.py
deleted file mode 100644
index 7b633e2..0000000
--- a/parts/django/tests/modeltests/update/models.py
+++ /dev/null
@@ -1,35 +0,0 @@
-"""
-Tests for the update() queryset method that allows in-place, multi-object
-updates.
-"""
-
-from django.db import models
-
-class DataPoint(models.Model):
- name = models.CharField(max_length=20)
- value = models.CharField(max_length=20)
- another_value = models.CharField(max_length=20, blank=True)
-
- def __unicode__(self):
- return unicode(self.name)
-
-class RelatedPoint(models.Model):
- name = models.CharField(max_length=20)
- data = models.ForeignKey(DataPoint)
-
- def __unicode__(self):
- return unicode(self.name)
-
-
-class A(models.Model):
- x = models.IntegerField(default=10)
-
-class B(models.Model):
- a = models.ForeignKey(A)
- y = models.IntegerField(default=10)
-
-class C(models.Model):
- y = models.IntegerField(default=10)
-
-class D(C):
- a = models.ForeignKey(A)
diff --git a/parts/django/tests/modeltests/update/tests.py b/parts/django/tests/modeltests/update/tests.py
deleted file mode 100644
index d0b6ea3..0000000
--- a/parts/django/tests/modeltests/update/tests.py
+++ /dev/null
@@ -1,116 +0,0 @@
-from django.test import TestCase
-
-from models import A, B, C, D, DataPoint, RelatedPoint
-
-
-class SimpleTest(TestCase):
- def setUp(self):
- self.a1 = A.objects.create()
- self.a2 = A.objects.create()
- for x in range(20):
- B.objects.create(a=self.a1)
- D.objects.create(a=self.a1)
-
- def test_nonempty_update(self):
- """
- Test that update changes the right number of rows for a nonempty queryset
- """
- num_updated = self.a1.b_set.update(y=100)
- self.assertEqual(num_updated, 20)
- cnt = B.objects.filter(y=100).count()
- self.assertEqual(cnt, 20)
-
- def test_empty_update(self):
- """
- Test that update changes the right number of rows for an empty queryset
- """
- num_updated = self.a2.b_set.update(y=100)
- self.assertEqual(num_updated, 0)
- cnt = B.objects.filter(y=100).count()
- self.assertEqual(cnt, 0)
-
- def test_nonempty_update_with_inheritance(self):
- """
- Test that update changes the right number of rows for an empty queryset
- when the update affects only a base table
- """
- num_updated = self.a1.d_set.update(y=100)
- self.assertEqual(num_updated, 20)
- cnt = D.objects.filter(y=100).count()
- self.assertEqual(cnt, 20)
-
- def test_empty_update_with_inheritance(self):
- """
- Test that update changes the right number of rows for an empty queryset
- when the update affects only a base table
- """
- num_updated = self.a2.d_set.update(y=100)
- self.assertEqual(num_updated, 0)
- cnt = D.objects.filter(y=100).count()
- self.assertEqual(cnt, 0)
-
-class AdvancedTests(TestCase):
-
- def setUp(self):
- self.d0 = DataPoint.objects.create(name="d0", value="apple")
- self.d2 = DataPoint.objects.create(name="d2", value="banana")
- self.d3 = DataPoint.objects.create(name="d3", value="banana")
- self.r1 = RelatedPoint.objects.create(name="r1", data=self.d3)
-
- def test_update(self):
- """
- Objects are updated by first filtering the candidates into a queryset
- and then calling the update() method. It executes immediately and
- returns nothing.
- """
- resp = DataPoint.objects.filter(value="apple").update(name="d1")
- self.assertEqual(resp, 1)
- resp = DataPoint.objects.filter(value="apple")
- self.assertEqual(list(resp), [self.d0])
-
- def test_update_multiple_objects(self):
- """
- We can update multiple objects at once.
- """
- resp = DataPoint.objects.filter(value="banana").update(
- value="pineapple")
- self.assertEqual(resp, 2)
- self.assertEqual(DataPoint.objects.get(name="d2").value, u'pineapple')
-
- def test_update_fk(self):
- """
- Foreign key fields can also be updated, although you can only update
- the object referred to, not anything inside the related object.
- """
- resp = RelatedPoint.objects.filter(name="r1").update(data=self.d0)
- self.assertEqual(resp, 1)
- resp = RelatedPoint.objects.filter(data__name="d0")
- self.assertEqual(list(resp), [self.r1])
-
- def test_update_multiple_fields(self):
- """
- Multiple fields can be updated at once
- """
- resp = DataPoint.objects.filter(value="apple").update(
- value="fruit", another_value="peach")
- self.assertEqual(resp, 1)
- d = DataPoint.objects.get(name="d0")
- self.assertEqual(d.value, u'fruit')
- self.assertEqual(d.another_value, u'peach')
-
- def test_update_all(self):
- """
- In the rare case you want to update every instance of a model, update()
- is also a manager method.
- """
- self.assertEqual(DataPoint.objects.update(value='thing'), 3)
- resp = DataPoint.objects.values('value').distinct()
- self.assertEqual(list(resp), [{'value': u'thing'}])
-
- def test_update_slice_fail(self):
- """
- We do not support update on already sliced query sets.
- """
- method = DataPoint.objects.all()[:2].update
- self.assertRaises(AssertionError, method,
- another_value='another thing')
diff --git a/parts/django/tests/modeltests/user_commands/__init__.py b/parts/django/tests/modeltests/user_commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/user_commands/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/user_commands/management/__init__.py b/parts/django/tests/modeltests/user_commands/management/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/user_commands/management/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/user_commands/management/commands/__init__.py b/parts/django/tests/modeltests/user_commands/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/user_commands/management/commands/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/user_commands/management/commands/dance.py b/parts/django/tests/modeltests/user_commands/management/commands/dance.py
deleted file mode 100644
index acefe09..0000000
--- a/parts/django/tests/modeltests/user_commands/management/commands/dance.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from optparse import make_option
-from django.core.management.base import BaseCommand
-
-class Command(BaseCommand):
- help = "Dance around like a madman."
- args = ''
- requires_model_validation = True
-
- option_list =[
- make_option("-s", "--style", default="Rock'n'Roll")
- ]
-
- def handle(self, *args, **options):
- self.stdout.write("I don't feel like dancing %s." % options["style"])
diff --git a/parts/django/tests/modeltests/user_commands/models.py b/parts/django/tests/modeltests/user_commands/models.py
deleted file mode 100644
index f2aa549..0000000
--- a/parts/django/tests/modeltests/user_commands/models.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""
-38. User-registered management commands
-
-The ``manage.py`` utility provides a number of useful commands for managing a
-Django project. If you want to add a utility command of your own, you can.
-
-The user-defined command ``dance`` is defined in the management/commands
-subdirectory of this test application. It is a simple command that responds
-with a printed message when invoked.
-
-For more details on how to define your own ``manage.py`` commands, look at the
-``django.core.management.commands`` directory. This directory contains the
-definitions for the base Django ``manage.py`` commands.
-"""
diff --git a/parts/django/tests/modeltests/user_commands/tests.py b/parts/django/tests/modeltests/user_commands/tests.py
deleted file mode 100644
index 84aa7a5..0000000
--- a/parts/django/tests/modeltests/user_commands/tests.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from StringIO import StringIO
-
-from django.test import TestCase
-from django.core import management
-from django.core.management.base import CommandError
-
-class CommandTests(TestCase):
- def test_command(self):
- out = StringIO()
- management.call_command('dance', stdout=out)
- self.assertEquals(out.getvalue(),
- "I don't feel like dancing Rock'n'Roll.")
-
- def test_command_style(self):
- out = StringIO()
- management.call_command('dance', style='Jive', stdout=out)
- self.assertEquals(out.getvalue(),
- "I don't feel like dancing Jive.")
-
- def test_explode(self):
- self.assertRaises(CommandError, management.call_command, ('explode',)) \ No newline at end of file
diff --git a/parts/django/tests/modeltests/validation/__init__.py b/parts/django/tests/modeltests/validation/__init__.py
deleted file mode 100644
index d0a7d19..0000000
--- a/parts/django/tests/modeltests/validation/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import unittest
-
-from django.core.exceptions import ValidationError
-
-class ValidationTestCase(unittest.TestCase):
- def assertFailsValidation(self, clean, failed_fields):
- self.assertRaises(ValidationError, clean)
- try:
- clean()
- except ValidationError, e:
- self.assertEquals(sorted(failed_fields), sorted(e.message_dict.keys()))
-
- def assertFieldFailsValidationWithMessage(self, clean, field_name, message):
- self.assertRaises(ValidationError, clean)
- try:
- clean()
- except ValidationError, e:
- self.assertTrue(field_name in e.message_dict)
- self.assertEquals(message, e.message_dict[field_name])
-
-
diff --git a/parts/django/tests/modeltests/validation/models.py b/parts/django/tests/modeltests/validation/models.py
deleted file mode 100644
index dd42936..0000000
--- a/parts/django/tests/modeltests/validation/models.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from datetime import datetime
-from django.core.exceptions import ValidationError
-from django.db import models
-from django.test import TestCase
-
-
-def validate_answer_to_universe(value):
- if value != 42:
- raise ValidationError('This is not the answer to life, universe and everything!', code='not42')
-
-class ModelToValidate(models.Model):
- name = models.CharField(max_length=100)
- created = models.DateTimeField(default=datetime.now)
- number = models.IntegerField(db_column='number_val')
- parent = models.ForeignKey('self', blank=True, null=True, limit_choices_to={'number': 10})
- email = models.EmailField(blank=True)
- url = models.URLField(blank=True)
- f_with_custom_validator = models.IntegerField(blank=True, null=True, validators=[validate_answer_to_universe])
-
- def clean(self):
- super(ModelToValidate, self).clean()
- if self.number == 11:
- raise ValidationError('Invalid number supplied!')
-
-class UniqueFieldsModel(models.Model):
- unique_charfield = models.CharField(max_length=100, unique=True)
- unique_integerfield = models.IntegerField(unique=True)
- non_unique_field = models.IntegerField()
-
-class CustomPKModel(models.Model):
- my_pk_field = models.CharField(max_length=100, primary_key=True)
-
-class UniqueTogetherModel(models.Model):
- cfield = models.CharField(max_length=100)
- ifield = models.IntegerField()
- efield = models.EmailField()
-
- class Meta:
- unique_together = (('ifield', 'cfield',), ['ifield', 'efield'])
-
-class UniqueForDateModel(models.Model):
- start_date = models.DateField()
- end_date = models.DateTimeField()
- count = models.IntegerField(unique_for_date="start_date", unique_for_year="end_date")
- order = models.IntegerField(unique_for_month="end_date")
- name = models.CharField(max_length=100)
-
-class CustomMessagesModel(models.Model):
- other = models.IntegerField(blank=True, null=True)
- number = models.IntegerField(db_column='number_val',
- error_messages={'null': 'NULL', 'not42': 'AAARGH', 'not_equal': '%s != me'},
- validators=[validate_answer_to_universe]
- )
-
-class Author(models.Model):
- name = models.CharField(max_length=100)
-
-class Article(models.Model):
- title = models.CharField(max_length=100)
- author = models.ForeignKey(Author)
- pub_date = models.DateTimeField(blank=True)
-
- def clean(self):
- if self.pub_date is None:
- self.pub_date = datetime.now()
diff --git a/parts/django/tests/modeltests/validation/test_custom_messages.py b/parts/django/tests/modeltests/validation/test_custom_messages.py
deleted file mode 100644
index 05bb651..0000000
--- a/parts/django/tests/modeltests/validation/test_custom_messages.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from modeltests.validation import ValidationTestCase
-from models import CustomMessagesModel
-
-
-class CustomMessagesTest(ValidationTestCase):
- def test_custom_simple_validator_message(self):
- cmm = CustomMessagesModel(number=12)
- self.assertFieldFailsValidationWithMessage(cmm.full_clean, 'number', ['AAARGH'])
-
- def test_custom_null_message(self):
- cmm = CustomMessagesModel()
- self.assertFieldFailsValidationWithMessage(cmm.full_clean, 'number', ['NULL'])
-
diff --git a/parts/django/tests/modeltests/validation/test_unique.py b/parts/django/tests/modeltests/validation/test_unique.py
deleted file mode 100644
index fb77c4d..0000000
--- a/parts/django/tests/modeltests/validation/test_unique.py
+++ /dev/null
@@ -1,85 +0,0 @@
-import unittest
-import datetime
-from django.conf import settings
-from django.db import connection
-from models import CustomPKModel, UniqueTogetherModel, UniqueFieldsModel, UniqueForDateModel, ModelToValidate
-
-
-class GetUniqueCheckTests(unittest.TestCase):
- def test_unique_fields_get_collected(self):
- m = UniqueFieldsModel()
- self.assertEqual(
- ([(UniqueFieldsModel, ('id',)),
- (UniqueFieldsModel, ('unique_charfield',)),
- (UniqueFieldsModel, ('unique_integerfield',))],
- []),
- m._get_unique_checks()
- )
-
- def test_unique_together_gets_picked_up_and_converted_to_tuple(self):
- m = UniqueTogetherModel()
- self.assertEqual(
- ([(UniqueTogetherModel, ('ifield', 'cfield',)),
- (UniqueTogetherModel, ('ifield', 'efield')),
- (UniqueTogetherModel, ('id',)), ],
- []),
- m._get_unique_checks()
- )
-
- def test_primary_key_is_considered_unique(self):
- m = CustomPKModel()
- self.assertEqual(([(CustomPKModel, ('my_pk_field',))], []), m._get_unique_checks())
-
- def test_unique_for_date_gets_picked_up(self):
- m = UniqueForDateModel()
- self.assertEqual((
- [(UniqueForDateModel, ('id',))],
- [(UniqueForDateModel, 'date', 'count', 'start_date'),
- (UniqueForDateModel, 'year', 'count', 'end_date'),
- (UniqueForDateModel, 'month', 'order', 'end_date')]
- ), m._get_unique_checks()
- )
-
- def test_unique_for_date_exclusion(self):
- m = UniqueForDateModel()
- self.assertEqual((
- [(UniqueForDateModel, ('id',))],
- [(UniqueForDateModel, 'year', 'count', 'end_date'),
- (UniqueForDateModel, 'month', 'order', 'end_date')]
- ), m._get_unique_checks(exclude='start_date')
- )
-
-class PerformUniqueChecksTest(unittest.TestCase):
- def setUp(self):
- # Set debug to True to gain access to connection.queries.
- self._old_debug, settings.DEBUG = settings.DEBUG, True
- super(PerformUniqueChecksTest, self).setUp()
-
- def tearDown(self):
- # Restore old debug value.
- settings.DEBUG = self._old_debug
- super(PerformUniqueChecksTest, self).tearDown()
-
- def test_primary_key_unique_check_not_performed_when_adding_and_pk_not_specified(self):
- # Regression test for #12560
- query_count = len(connection.queries)
- mtv = ModelToValidate(number=10, name='Some Name')
- setattr(mtv, '_adding', True)
- mtv.full_clean()
- self.assertEqual(query_count, len(connection.queries))
-
- def test_primary_key_unique_check_performed_when_adding_and_pk_specified(self):
- # Regression test for #12560
- query_count = len(connection.queries)
- mtv = ModelToValidate(number=10, name='Some Name', id=123)
- setattr(mtv, '_adding', True)
- mtv.full_clean()
- self.assertEqual(query_count + 1, len(connection.queries))
-
- def test_primary_key_unique_check_not_performed_when_not_adding(self):
- # Regression test for #12132
- query_count= len(connection.queries)
- mtv = ModelToValidate(number=10, name='Some Name')
- mtv.full_clean()
- self.assertEqual(query_count, len(connection.queries))
-
diff --git a/parts/django/tests/modeltests/validation/tests.py b/parts/django/tests/modeltests/validation/tests.py
deleted file mode 100644
index 0027393..0000000
--- a/parts/django/tests/modeltests/validation/tests.py
+++ /dev/null
@@ -1,114 +0,0 @@
-from django import forms
-from django.test import TestCase
-from django.core.exceptions import NON_FIELD_ERRORS
-from modeltests.validation import ValidationTestCase
-from modeltests.validation.models import Author, Article, ModelToValidate
-
-# Import other tests for this package.
-from modeltests.validation.validators import TestModelsWithValidators
-from modeltests.validation.test_unique import GetUniqueCheckTests, PerformUniqueChecksTest
-from modeltests.validation.test_custom_messages import CustomMessagesTest
-
-
-class BaseModelValidationTests(ValidationTestCase):
-
- def test_missing_required_field_raises_error(self):
- mtv = ModelToValidate(f_with_custom_validator=42)
- self.assertFailsValidation(mtv.full_clean, ['name', 'number'])
-
- def test_with_correct_value_model_validates(self):
- mtv = ModelToValidate(number=10, name='Some Name')
- self.assertEqual(None, mtv.full_clean())
-
- def test_custom_validate_method(self):
- mtv = ModelToValidate(number=11)
- self.assertFailsValidation(mtv.full_clean, [NON_FIELD_ERRORS, 'name'])
-
- def test_wrong_FK_value_raises_error(self):
- mtv=ModelToValidate(number=10, name='Some Name', parent_id=3)
- self.assertFailsValidation(mtv.full_clean, ['parent'])
-
- def test_correct_FK_value_validates(self):
- parent = ModelToValidate.objects.create(number=10, name='Some Name')
- mtv = ModelToValidate(number=10, name='Some Name', parent_id=parent.pk)
- self.assertEqual(None, mtv.full_clean())
-
- def test_limitted_FK_raises_error(self):
- # The limit_choices_to on the parent field says that a parent object's
- # number attribute must be 10, so this should fail validation.
- parent = ModelToValidate.objects.create(number=11, name='Other Name')
- mtv = ModelToValidate(number=10, name='Some Name', parent_id=parent.pk)
- self.assertFailsValidation(mtv.full_clean, ['parent'])
-
- def test_wrong_email_value_raises_error(self):
- mtv = ModelToValidate(number=10, name='Some Name', email='not-an-email')
- self.assertFailsValidation(mtv.full_clean, ['email'])
-
- def test_correct_email_value_passes(self):
- mtv = ModelToValidate(number=10, name='Some Name', email='valid@email.com')
- self.assertEqual(None, mtv.full_clean())
-
- def test_wrong_url_value_raises_error(self):
- mtv = ModelToValidate(number=10, name='Some Name', url='not a url')
- self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'Enter a valid value.'])
-
- def test_correct_url_but_nonexisting_gives_404(self):
- mtv = ModelToValidate(number=10, name='Some Name', url='http://google.com/we-love-microsoft.html')
- self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'url', [u'This URL appears to be a broken link.'])
-
- def test_correct_url_value_passes(self):
- mtv = ModelToValidate(number=10, name='Some Name', url='http://www.djangoproject.com/')
- self.assertEqual(None, mtv.full_clean()) # This will fail if there's no Internet connection
-
- def test_text_greater_that_charfields_max_length_eaises_erros(self):
- mtv = ModelToValidate(number=10, name='Some Name'*100)
- self.assertFailsValidation(mtv.full_clean, ['name',])
-
-class ArticleForm(forms.ModelForm):
- class Meta:
- model = Article
- exclude = ['author']
-
-class ModelFormsTests(TestCase):
- def setUp(self):
- self.author = Author.objects.create(name='Joseph Kocherhans')
-
- def test_partial_validation(self):
- # Make sure the "commit=False and set field values later" idiom still
- # works with model validation.
- data = {
- 'title': 'The state of model validation',
- 'pub_date': '2010-1-10 14:49:00'
- }
- form = ArticleForm(data)
- self.assertEqual(form.errors.keys(), [])
- article = form.save(commit=False)
- article.author = self.author
- article.save()
-
- def test_validation_with_empty_blank_field(self):
- # Since a value for pub_date wasn't provided and the field is
- # blank=True, model-validation should pass.
- # Also, Article.clean() should be run, so pub_date will be filled after
- # validation, so the form should save cleanly even though pub_date is
- # not allowed to be null.
- data = {
- 'title': 'The state of model validation',
- }
- article = Article(author_id=self.author.id)
- form = ArticleForm(data, instance=article)
- self.assertEqual(form.errors.keys(), [])
- self.assertNotEqual(form.instance.pub_date, None)
- article = form.save()
-
- def test_validation_with_invalid_blank_field(self):
- # Even though pub_date is set to blank=True, an invalid value was
- # provided, so it should fail validation.
- data = {
- 'title': 'The state of model validation',
- 'pub_date': 'never'
- }
- article = Article(author_id=self.author.id)
- form = ArticleForm(data, instance=article)
- self.assertEqual(form.errors.keys(), ['pub_date'])
-
diff --git a/parts/django/tests/modeltests/validation/validators.py b/parts/django/tests/modeltests/validation/validators.py
deleted file mode 100644
index 3ad2c40..0000000
--- a/parts/django/tests/modeltests/validation/validators.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from unittest import TestCase
-from modeltests.validation import ValidationTestCase
-from models import *
-
-
-class TestModelsWithValidators(ValidationTestCase):
- def test_custom_validator_passes_for_correct_value(self):
- mtv = ModelToValidate(number=10, name='Some Name', f_with_custom_validator=42)
- self.assertEqual(None, mtv.full_clean())
-
- def test_custom_validator_raises_error_for_incorrect_value(self):
- mtv = ModelToValidate(number=10, name='Some Name', f_with_custom_validator=12)
- self.assertFailsValidation(mtv.full_clean, ['f_with_custom_validator'])
- self.assertFieldFailsValidationWithMessage(
- mtv.full_clean,
- 'f_with_custom_validator',
- [u'This is not the answer to life, universe and everything!']
- )
diff --git a/parts/django/tests/modeltests/validators/__init__.py b/parts/django/tests/modeltests/validators/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/validators/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/validators/models.py b/parts/django/tests/modeltests/validators/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/modeltests/validators/models.py
+++ /dev/null
diff --git a/parts/django/tests/modeltests/validators/tests.py b/parts/django/tests/modeltests/validators/tests.py
deleted file mode 100644
index 44ad176..0000000
--- a/parts/django/tests/modeltests/validators/tests.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# -*- coding: utf-8 -*-
-import re
-import types
-from unittest import TestCase
-from datetime import datetime, timedelta
-from django.core.exceptions import ValidationError
-from django.core.validators import *
-
-NOW = datetime.now()
-
-TEST_DATA = (
- # (validator, value, expected),
- (validate_integer, '42', None),
- (validate_integer, '-42', None),
- (validate_integer, -42, None),
- (validate_integer, -42.5, None),
-
- (validate_integer, None, ValidationError),
- (validate_integer, 'a', ValidationError),
-
- (validate_email, 'email@here.com', None),
- (validate_email, 'weirder-email@here.and.there.com', None),
-
- (validate_email, None, ValidationError),
- (validate_email, '', ValidationError),
- (validate_email, 'abc', ValidationError),
- (validate_email, 'a @x.cz', ValidationError),
- (validate_email, 'something@@somewhere.com', ValidationError),
-
- (validate_slug, 'slug-ok', None),
- (validate_slug, 'longer-slug-still-ok', None),
- (validate_slug, '--------', None),
- (validate_slug, 'nohyphensoranything', None),
-
- (validate_slug, '', ValidationError),
- (validate_slug, ' text ', ValidationError),
- (validate_slug, ' ', ValidationError),
- (validate_slug, 'some@mail.com', ValidationError),
- (validate_slug, '你好', ValidationError),
- (validate_slug, '\n', ValidationError),
-
- (validate_ipv4_address, '1.1.1.1', None),
- (validate_ipv4_address, '255.0.0.0', None),
- (validate_ipv4_address, '0.0.0.0', None),
-
- (validate_ipv4_address, '256.1.1.1', ValidationError),
- (validate_ipv4_address, '25.1.1.', ValidationError),
- (validate_ipv4_address, '25,1,1,1', ValidationError),
- (validate_ipv4_address, '25.1 .1.1', ValidationError),
-
- (validate_comma_separated_integer_list, '1', None),
- (validate_comma_separated_integer_list, '1,2,3', None),
- (validate_comma_separated_integer_list, '1,2,3,', None),
-
- (validate_comma_separated_integer_list, '', ValidationError),
- (validate_comma_separated_integer_list, 'a,b,c', ValidationError),
- (validate_comma_separated_integer_list, '1, 2, 3', ValidationError),
-
- (MaxValueValidator(10), 10, None),
- (MaxValueValidator(10), -10, None),
- (MaxValueValidator(10), 0, None),
- (MaxValueValidator(NOW), NOW, None),
- (MaxValueValidator(NOW), NOW - timedelta(days=1), None),
-
- (MaxValueValidator(0), 1, ValidationError),
- (MaxValueValidator(NOW), NOW + timedelta(days=1), ValidationError),
-
- (MinValueValidator(-10), -10, None),
- (MinValueValidator(-10), 10, None),
- (MinValueValidator(-10), 0, None),
- (MinValueValidator(NOW), NOW, None),
- (MinValueValidator(NOW), NOW + timedelta(days=1), None),
-
- (MinValueValidator(0), -1, ValidationError),
- (MinValueValidator(NOW), NOW - timedelta(days=1), ValidationError),
-
- (MaxLengthValidator(10), '', None),
- (MaxLengthValidator(10), 10*'x', None),
-
- (MaxLengthValidator(10), 15*'x', ValidationError),
-
- (MinLengthValidator(10), 15*'x', None),
- (MinLengthValidator(10), 10*'x', None),
-
- (MinLengthValidator(10), '', ValidationError),
-
- (URLValidator(), 'http://www.djangoproject.com/', None),
- (URLValidator(), 'http://localhost/', None),
- (URLValidator(), 'http://example.com/', None),
- (URLValidator(), 'http://www.example.com/', None),
- (URLValidator(), 'http://www.example.com:8000/test', None),
- (URLValidator(), 'http://valid-with-hyphens.com/', None),
- (URLValidator(), 'http://subdomain.domain.com/', None),
- (URLValidator(), 'http://200.8.9.10/', None),
- (URLValidator(), 'http://200.8.9.10:8000/test', None),
- (URLValidator(), 'http://valid-----hyphens.com/', None),
- (URLValidator(), 'http://example.com?something=value', None),
- (URLValidator(), 'http://example.com/index.php?something=value&another=value2', None),
-
- (URLValidator(), 'foo', ValidationError),
- (URLValidator(), 'http://', ValidationError),
- (URLValidator(), 'http://example', ValidationError),
- (URLValidator(), 'http://example.', ValidationError),
- (URLValidator(), 'http://.com', ValidationError),
- (URLValidator(), 'http://invalid-.com', ValidationError),
- (URLValidator(), 'http://-invalid.com', ValidationError),
- (URLValidator(), 'http://inv-.alid-.com', ValidationError),
- (URLValidator(), 'http://inv-.-alid.com', ValidationError),
-
- (BaseValidator(True), True, None),
- (BaseValidator(True), False, ValidationError),
-
- (RegexValidator('.*'), '', None),
- (RegexValidator(re.compile('.*')), '', None),
- (RegexValidator('.*'), 'xxxxx', None),
-
- (RegexValidator('x'), 'y', ValidationError),
- (RegexValidator(re.compile('x')), 'y', ValidationError),
-)
-
-def create_simple_test_method(validator, expected, value, num):
- if expected is not None and issubclass(expected, Exception):
- test_mask = 'test_%s_raises_error_%d'
- def test_func(self):
- self.assertRaises(expected, validator, value)
- else:
- test_mask = 'test_%s_%d'
- def test_func(self):
- self.assertEqual(expected, validator(value))
- if isinstance(validator, types.FunctionType):
- val_name = validator.__name__
- else:
- val_name = validator.__class__.__name__
- test_name = test_mask % (val_name, num)
- return test_name, test_func
-
-# Dynamically assemble a test class with the contents of TEST_DATA
-
-class TestSimpleValidators(TestCase):
- def test_single_message(self):
- v = ValidationError('Not Valid')
- self.assertEquals(str(v), "[u'Not Valid']")
- self.assertEquals(repr(v), "ValidationError([u'Not Valid'])")
-
- def test_message_list(self):
- v = ValidationError(['First Problem', 'Second Problem'])
- self.assertEquals(str(v), "[u'First Problem', u'Second Problem']")
- self.assertEquals(repr(v), "ValidationError([u'First Problem', u'Second Problem'])")
-
- def test_message_dict(self):
- v = ValidationError({'first': 'First Problem'})
- self.assertEquals(str(v), "{'first': 'First Problem'}")
- self.assertEquals(repr(v), "ValidationError({'first': 'First Problem'})")
-
-test_counter = 0
-for validator, value, expected in TEST_DATA:
- name, method = create_simple_test_method(validator, expected, value, test_counter)
- setattr(TestSimpleValidators, name, method)
- test_counter += 1
diff --git a/parts/django/tests/regressiontests/__init__.py b/parts/django/tests/regressiontests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_changelist/__init__.py b/parts/django/tests/regressiontests/admin_changelist/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_changelist/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_changelist/models.py b/parts/django/tests/regressiontests/admin_changelist/models.py
deleted file mode 100644
index f030a78..0000000
--- a/parts/django/tests/regressiontests/admin_changelist/models.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.db import models
-from django.contrib import admin
-
-class Parent(models.Model):
- name = models.CharField(max_length=128)
-
-class Child(models.Model):
- parent = models.ForeignKey(Parent, editable=False)
- name = models.CharField(max_length=30, blank=True) \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_changelist/tests.py b/parts/django/tests/regressiontests/admin_changelist/tests.py
deleted file mode 100644
index 96b36f8..0000000
--- a/parts/django/tests/regressiontests/admin_changelist/tests.py
+++ /dev/null
@@ -1,103 +0,0 @@
-from django.contrib import admin
-from django.contrib.admin.options import IncorrectLookupParameters
-from django.contrib.admin.views.main import ChangeList
-from django.template import Context, Template
-from django.test import TransactionTestCase
-from regressiontests.admin_changelist.models import Child, Parent
-
-class ChangeListTests(TransactionTestCase):
- def test_select_related_preserved(self):
- """
- Regression test for #10348: ChangeList.get_query_set() shouldn't
- overwrite a custom select_related provided by ModelAdmin.queryset().
- """
- m = ChildAdmin(Child, admin.site)
- cl = ChangeList(MockRequest(), Child, m.list_display, m.list_display_links,
- m.list_filter, m.date_hierarchy, m.search_fields,
- m.list_select_related, m.list_per_page, m.list_editable, m)
- self.assertEqual(cl.query_set.query.select_related, {'parent': {'name': {}}})
-
- def test_result_list_html(self):
- """
- Verifies that inclusion tag result_list generates a table when with
- default ModelAdmin settings.
- """
- new_parent = Parent.objects.create(name='parent')
- new_child = Child.objects.create(name='name', parent=new_parent)
- request = MockRequest()
- m = ChildAdmin(Child, admin.site)
- cl = ChangeList(request, Child, m.list_display, m.list_display_links,
- m.list_filter, m.date_hierarchy, m.search_fields,
- m.list_select_related, m.list_per_page, m.list_editable, m)
- cl.formset = None
- template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
- context = Context({'cl': cl})
- table_output = template.render(context)
- row_html = '<tbody><tr class="row1"><td><input type="checkbox" class="action-select" value="1" name="_selected_action" /></td><th><a href="1/">name</a></th><td>Parent object</td></tr></tbody>'
- self.assertFalse(table_output.find(row_html) == -1,
- 'Failed to find expected row element: %s' % table_output)
-
- def test_result_list_editable_html(self):
- """
- Regression tests for #11791: Inclusion tag result_list generates a
- table and this checks that the items are nested within the table
- element tags.
- Also a regression test for #13599, verifies that hidden fields
- when list_editable is enabled are rendered in a div outside the
- table.
- """
- new_parent = Parent.objects.create(name='parent')
- new_child = Child.objects.create(name='name', parent=new_parent)
- request = MockRequest()
- m = ChildAdmin(Child, admin.site)
-
- # Test with list_editable fields
- m.list_display = ['id', 'name', 'parent']
- m.list_display_links = ['id']
- m.list_editable = ['name']
- cl = ChangeList(request, Child, m.list_display, m.list_display_links,
- m.list_filter, m.date_hierarchy, m.search_fields,
- m.list_select_related, m.list_per_page, m.list_editable, m)
- FormSet = m.get_changelist_formset(request)
- cl.formset = FormSet(queryset=cl.result_list)
- template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
- context = Context({'cl': cl})
- table_output = template.render(context)
- # make sure that hidden fields are in the correct place
- hiddenfields_div = '<div class="hiddenfields"><input type="hidden" name="form-0-id" value="1" id="id_form-0-id" /></div>'
- self.assertFalse(table_output.find(hiddenfields_div) == -1,
- 'Failed to find hidden fields in: %s' % table_output)
- # make sure that list editable fields are rendered in divs correctly
- editable_name_field = '<input name="form-0-name" value="name" class="vTextField" maxlength="30" type="text" id="id_form-0-name" />'
- self.assertFalse('<td>%s</td>' % editable_name_field == -1,
- 'Failed to find "name" list_editable field in: %s' % table_output)
-
- def test_result_list_editable(self):
- """
- Regression test for #14312: list_editable with pagination
- """
-
- new_parent = Parent.objects.create(name='parent')
- for i in range(200):
- new_child = Child.objects.create(name='name %s' % i, parent=new_parent)
- request = MockRequest()
- request.GET['p'] = -1 # Anything outside range
- m = ChildAdmin(Child, admin.site)
-
- # Test with list_editable fields
- m.list_display = ['id', 'name', 'parent']
- m.list_display_links = ['id']
- m.list_editable = ['name']
- self.assertRaises(IncorrectLookupParameters, lambda: \
- ChangeList(request, Child, m.list_display, m.list_display_links,
- m.list_filter, m.date_hierarchy, m.search_fields,
- m.list_select_related, m.list_per_page, m.list_editable, m))
-
-
-class ChildAdmin(admin.ModelAdmin):
- list_display = ['name', 'parent']
- def queryset(self, request):
- return super(ChildAdmin, self).queryset(request).select_related("parent__name")
-
-class MockRequest(object):
- GET = {}
diff --git a/parts/django/tests/regressiontests/admin_inlines/__init__.py b/parts/django/tests/regressiontests/admin_inlines/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_inlines/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_inlines/fixtures/admin-views-users.xml b/parts/django/tests/regressiontests/admin_inlines/fixtures/admin-views-users.xml
deleted file mode 100644
index aba8f4a..0000000
--- a/parts/django/tests/regressiontests/admin_inlines/fixtures/admin-views-users.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/admin_inlines/models.py b/parts/django/tests/regressiontests/admin_inlines/models.py
deleted file mode 100644
index 4e5c4e3..0000000
--- a/parts/django/tests/regressiontests/admin_inlines/models.py
+++ /dev/null
@@ -1,125 +0,0 @@
-"""
-Testing of admin inline formsets.
-
-"""
-from django.db import models
-from django.contrib import admin
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.contenttypes import generic
-
-class Parent(models.Model):
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return self.name
-
-class Teacher(models.Model):
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return self.name
-
-class Child(models.Model):
- name = models.CharField(max_length=50)
- teacher = models.ForeignKey(Teacher)
-
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- parent = generic.GenericForeignKey()
-
- def __unicode__(self):
- return u'I am %s, a child of %s' % (self.name, self.parent)
-
-class Book(models.Model):
- name = models.CharField(max_length=50)
-
-class Author(models.Model):
- name = models.CharField(max_length=50)
- books = models.ManyToManyField(Book)
-
-class BookInline(admin.TabularInline):
- model = Author.books.through
-
-class AuthorAdmin(admin.ModelAdmin):
- inlines = [BookInline]
-
-admin.site.register(Author, AuthorAdmin)
-
-class Holder(models.Model):
- dummy = models.IntegerField()
-
-
-class Inner(models.Model):
- dummy = models.IntegerField()
- holder = models.ForeignKey(Holder)
- readonly = models.CharField("Inner readonly label", max_length=1)
-
-
-class InnerInline(admin.StackedInline):
- model = Inner
- can_delete = False
- readonly_fields = ('readonly',) # For bug #13174 tests.
-
-
-class Holder2(models.Model):
- dummy = models.IntegerField()
-
-
-class Inner2(models.Model):
- dummy = models.IntegerField()
- holder = models.ForeignKey(Holder2)
-
-class HolderAdmin(admin.ModelAdmin):
-
- class Media:
- js = ('my_awesome_admin_scripts.js',)
-
-class InnerInline2(admin.StackedInline):
- model = Inner2
-
- class Media:
- js = ('my_awesome_inline_scripts.js',)
-
-class Holder3(models.Model):
- dummy = models.IntegerField()
-
-
-class Inner3(models.Model):
- dummy = models.IntegerField()
- holder = models.ForeignKey(Holder3)
-
-class InnerInline3(admin.StackedInline):
- model = Inner3
-
- class Media:
- js = ('my_awesome_inline_scripts.js',)
-
-# Test bug #12561 and #12778
-# only ModelAdmin media
-admin.site.register(Holder, HolderAdmin, inlines=[InnerInline])
-# ModelAdmin and Inline media
-admin.site.register(Holder2, HolderAdmin, inlines=[InnerInline2])
-# only Inline media
-admin.site.register(Holder3, inlines=[InnerInline3])
-
-# Models for #12749
-
-class Person(models.Model):
- firstname = models.CharField(max_length=15)
-
-class OutfitItem(models.Model):
- name = models.CharField(max_length=15)
-
-class Fashionista(models.Model):
- person = models.OneToOneField(Person, primary_key=True)
- weaknesses = models.ManyToManyField(OutfitItem, through='ShoppingWeakness', blank=True)
-
-class ShoppingWeakness(models.Model):
- fashionista = models.ForeignKey(Fashionista)
- item = models.ForeignKey(OutfitItem)
-
-class InlineWeakness(admin.TabularInline):
- model = ShoppingWeakness
- extra = 1
-
-admin.site.register(Fashionista, inlines=[InlineWeakness])
diff --git a/parts/django/tests/regressiontests/admin_inlines/tests.py b/parts/django/tests/regressiontests/admin_inlines/tests.py
deleted file mode 100644
index b10474d..0000000
--- a/parts/django/tests/regressiontests/admin_inlines/tests.py
+++ /dev/null
@@ -1,121 +0,0 @@
-from django.contrib.admin.helpers import InlineAdminForm
-from django.contrib.contenttypes.models import ContentType
-from django.test import TestCase
-
-# local test models
-from models import (Holder, Inner, InnerInline, Holder2, Inner2, Holder3,
- Inner3, Person, OutfitItem, Fashionista, Teacher, Parent, Child)
-
-
-class TestInline(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- holder = Holder(dummy=13)
- holder.save()
- Inner(dummy=42, holder=holder).save()
- self.change_url = '/test_admin/admin/admin_inlines/holder/%i/' % holder.id
-
- result = self.client.login(username='super', password='secret')
- self.assertEqual(result, True)
-
- def tearDown(self):
- self.client.logout()
-
- def test_can_delete(self):
- """
- can_delete should be passed to inlineformset factory.
- """
- response = self.client.get(self.change_url)
- inner_formset = response.context[-1]['inline_admin_formsets'][0].formset
- expected = InnerInline.can_delete
- actual = inner_formset.can_delete
- self.assertEqual(expected, actual, 'can_delete must be equal')
-
- def test_readonly_stacked_inline_label(self):
- """Bug #13174."""
- holder = Holder.objects.create(dummy=42)
- inner = Inner.objects.create(holder=holder, dummy=42, readonly='')
- response = self.client.get('/test_admin/admin/admin_inlines/holder/%i/'
- % holder.id)
- self.assertContains(response, '<label>Inner readonly label:</label>')
-
- def test_many_to_many_inlines(self):
- "Autogenerated many-to-many inlines are displayed correctly (#13407)"
- response = self.client.get('/test_admin/admin/admin_inlines/author/add/')
- # The heading for the m2m inline block uses the right text
- self.assertContains(response, '<h2>Author-book relationships</h2>')
- # The "add another" label is correct
- self.assertContains(response, 'Add another Author-Book Relationship')
- # The '+' is dropped from the autogenerated form prefix (Author_books+)
- self.assertContains(response, 'id="id_Author_books-TOTAL_FORMS"')
-
- def test_inline_primary(self):
- person = Person.objects.create(firstname='Imelda')
- item = OutfitItem.objects.create(name='Shoes')
- # Imelda likes shoes, but can't cary her own bags.
- data = {
- 'shoppingweakness_set-TOTAL_FORMS': 1,
- 'shoppingweakness_set-INITIAL_FORMS': 0,
- 'shoppingweakness_set-MAX_NUM_FORMS': 0,
- '_save': u'Save',
- 'person': person.id,
- 'max_weight': 0,
- 'shoppingweakness_set-0-item': item.id,
- }
- response = self.client.post('/test_admin/admin/admin_inlines/fashionista/add/', data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(len(Fashionista.objects.filter(person__firstname='Imelda')), 1)
-
-class TestInlineMedia(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
-
- result = self.client.login(username='super', password='secret')
- self.assertEqual(result, True)
-
- def tearDown(self):
- self.client.logout()
-
- def test_inline_media_only_base(self):
- holder = Holder(dummy=13)
- holder.save()
- Inner(dummy=42, holder=holder).save()
- change_url = '/test_admin/admin/admin_inlines/holder/%i/' % holder.id
- response = self.client.get(change_url)
- self.assertContains(response, 'my_awesome_admin_scripts.js')
-
- def test_inline_media_only_inline(self):
- holder = Holder3(dummy=13)
- holder.save()
- Inner3(dummy=42, holder=holder).save()
- change_url = '/test_admin/admin/admin_inlines/holder3/%i/' % holder.id
- response = self.client.get(change_url)
- self.assertContains(response, 'my_awesome_inline_scripts.js')
-
- def test_all_inline_media(self):
- holder = Holder2(dummy=13)
- holder.save()
- Inner2(dummy=42, holder=holder).save()
- change_url = '/test_admin/admin/admin_inlines/holder2/%i/' % holder.id
- response = self.client.get(change_url)
- self.assertContains(response, 'my_awesome_admin_scripts.js')
- self.assertContains(response, 'my_awesome_inline_scripts.js')
-
-class TestInlineAdminForm(TestCase):
-
- def test_immutable_content_type(self):
- """Regression for #9362
- The problem depends only on InlineAdminForm and its "original"
- argument, so we can safely set the other arguments to None/{}. We just
- need to check that the content_type argument of Child isn't altered by
- the internals of the inline form."""
-
- sally = Teacher.objects.create(name='Sally')
- john = Parent.objects.create(name='John')
- joe = Child.objects.create(name='Joe', teacher=sally, parent=john)
-
- iaf = InlineAdminForm(None, None, {}, {}, joe)
- parent_ct = ContentType.objects.get_for_model(Parent)
- self.assertEqual(iaf.original.content_type, parent_ct)
diff --git a/parts/django/tests/regressiontests/admin_ordering/__init__.py b/parts/django/tests/regressiontests/admin_ordering/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_ordering/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_ordering/models.py b/parts/django/tests/regressiontests/admin_ordering/models.py
deleted file mode 100644
index ad63685..0000000
--- a/parts/django/tests/regressiontests/admin_ordering/models.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# coding: utf-8
-from django.db import models
-
-class Band(models.Model):
- name = models.CharField(max_length=100)
- bio = models.TextField()
- rank = models.IntegerField()
-
- class Meta:
- ordering = ('name',)
diff --git a/parts/django/tests/regressiontests/admin_ordering/tests.py b/parts/django/tests/regressiontests/admin_ordering/tests.py
deleted file mode 100644
index f63f202..0000000
--- a/parts/django/tests/regressiontests/admin_ordering/tests.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from django.test import TestCase
-from django.contrib.admin.options import ModelAdmin
-
-from models import Band
-
-class TestAdminOrdering(TestCase):
- """
- Let's make sure that ModelAdmin.queryset uses the ordering we define in
- ModelAdmin rather that ordering defined in the model's inner Meta
- class.
- """
-
- def setUp(self):
- b1 = Band(name='Aerosmith', bio='', rank=3)
- b1.save()
- b2 = Band(name='Radiohead', bio='', rank=1)
- b2.save()
- b3 = Band(name='Van Halen', bio='', rank=2)
- b3.save()
-
- def test_default_ordering(self):
- """
- The default ordering should be by name, as specified in the inner Meta
- class.
- """
- ma = ModelAdmin(Band, None)
- names = [b.name for b in ma.queryset(None)]
- self.assertEqual([u'Aerosmith', u'Radiohead', u'Van Halen'], names)
-
- def test_specified_ordering(self):
- """
- Let's use a custom ModelAdmin that changes the ordering, and make sure
- it actually changes.
- """
- class BandAdmin(ModelAdmin):
- ordering = ('rank',) # default ordering is ('name',)
- ma = BandAdmin(Band, None)
- names = [b.name for b in ma.queryset(None)]
- self.assertEqual([u'Radiohead', u'Van Halen', u'Aerosmith'], names)
diff --git a/parts/django/tests/regressiontests/admin_registration/__init__.py b/parts/django/tests/regressiontests/admin_registration/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_registration/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_registration/models.py b/parts/django/tests/regressiontests/admin_registration/models.py
deleted file mode 100644
index 4a2d4e9..0000000
--- a/parts/django/tests/regressiontests/admin_registration/models.py
+++ /dev/null
@@ -1,11 +0,0 @@
-"""
-Tests for various ways of registering models with the admin site.
-"""
-
-from django.db import models
-
-class Person(models.Model):
- name = models.CharField(max_length=200)
-
-class Place(models.Model):
- name = models.CharField(max_length=200)
diff --git a/parts/django/tests/regressiontests/admin_registration/tests.py b/parts/django/tests/regressiontests/admin_registration/tests.py
deleted file mode 100644
index e2a5d7e..0000000
--- a/parts/django/tests/regressiontests/admin_registration/tests.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from django.test import TestCase
-
-from django.contrib import admin
-
-from models import Person, Place
-
-class NameAdmin(admin.ModelAdmin):
- list_display = ['name']
- save_on_top = True
-
-class TestRegistration(TestCase):
- def setUp(self):
- self.site = admin.AdminSite()
-
- def test_bare_registration(self):
- self.site.register(Person)
- self.assertTrue(
- isinstance(self.site._registry[Person], admin.options.ModelAdmin)
- )
-
- def test_registration_with_model_admin(self):
- self.site.register(Person, NameAdmin)
- self.assertTrue(
- isinstance(self.site._registry[Person], NameAdmin)
- )
-
- def test_prevent_double_registration(self):
- self.site.register(Person)
- self.assertRaises(admin.sites.AlreadyRegistered,
- self.site.register,
- Person)
-
- def test_registration_with_star_star_options(self):
- self.site.register(Person, search_fields=['name'])
- self.assertEqual(self.site._registry[Person].search_fields, ['name'])
-
- def test_star_star_overrides(self):
- self.site.register(Person, NameAdmin,
- search_fields=["name"], list_display=['__str__'])
- self.assertEqual(self.site._registry[Person].search_fields, ['name'])
- self.assertEqual(self.site._registry[Person].list_display,
- ['action_checkbox', '__str__'])
- self.assertTrue(self.site._registry[Person].save_on_top)
-
- def test_iterable_registration(self):
- self.site.register([Person, Place], search_fields=['name'])
- self.assertTrue(
- isinstance(self.site._registry[Person], admin.options.ModelAdmin)
- )
- self.assertEqual(self.site._registry[Person].search_fields, ['name'])
- self.assertTrue(
- isinstance(self.site._registry[Place], admin.options.ModelAdmin)
- )
- self.assertEqual(self.site._registry[Place].search_fields, ['name'])
diff --git a/parts/django/tests/regressiontests/admin_scripts/__init__.py b/parts/django/tests/regressiontests/admin_scripts/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/app_with_import/__init__.py b/parts/django/tests/regressiontests/admin_scripts/app_with_import/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/app_with_import/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/app_with_import/models.py b/parts/django/tests/regressiontests/admin_scripts/app_with_import/models.py
deleted file mode 100644
index 06ca0e8..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/app_with_import/models.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.contrib.comments.models import Comment
-from django.db import models
-
-# Regression for #13368. This is an example of a model
-# that imports a class that has an abstract base class.
-class CommentScore(models.Model):
- comment = models.OneToOneField(Comment, primary_key=True)
diff --git a/parts/django/tests/regressiontests/admin_scripts/broken_app/__init__.py b/parts/django/tests/regressiontests/admin_scripts/broken_app/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/broken_app/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/broken_app/models.py b/parts/django/tests/regressiontests/admin_scripts/broken_app/models.py
deleted file mode 100644
index f37f1ef..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/broken_app/models.py
+++ /dev/null
@@ -1 +0,0 @@
-from django.db import modelz
diff --git a/parts/django/tests/regressiontests/admin_scripts/complex_app/__init__.py b/parts/django/tests/regressiontests/admin_scripts/complex_app/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/complex_app/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/complex_app/admin/__init__.py b/parts/django/tests/regressiontests/admin_scripts/complex_app/admin/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/complex_app/admin/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/complex_app/admin/foo.py b/parts/django/tests/regressiontests/admin_scripts/complex_app/admin/foo.py
deleted file mode 100644
index 1b933d0..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/complex_app/admin/foo.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.contrib import admin
-from admin_scripts.complex_app.models.foo import Foo
-admin.site.register(Foo)
diff --git a/parts/django/tests/regressiontests/admin_scripts/complex_app/models/__init__.py b/parts/django/tests/regressiontests/admin_scripts/complex_app/models/__init__.py
deleted file mode 100644
index a4d6d95..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/complex_app/models/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from admin_scripts.complex_app.models.bar import Bar
-from admin_scripts.complex_app.models.foo import Foo
-
-__all__ = ['Foo', 'Bar']
diff --git a/parts/django/tests/regressiontests/admin_scripts/complex_app/models/bar.py b/parts/django/tests/regressiontests/admin_scripts/complex_app/models/bar.py
deleted file mode 100644
index a5d8853..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/complex_app/models/bar.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.db import models
-
-from admin_scripts.complex_app.admin import foo
-class Bar(models.Model):
- name = models.CharField(max_length=5)
- class Meta:
- app_label = 'complex_app'
diff --git a/parts/django/tests/regressiontests/admin_scripts/complex_app/models/foo.py b/parts/django/tests/regressiontests/admin_scripts/complex_app/models/foo.py
deleted file mode 100644
index 70c285e..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/complex_app/models/foo.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.db import models
-
-class Foo(models.Model):
- name = models.CharField(max_length=5)
- class Meta:
- app_label = 'complex_app'
diff --git a/parts/django/tests/regressiontests/admin_scripts/management/__init__.py b/parts/django/tests/regressiontests/admin_scripts/management/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/management/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/management/commands/__init__.py b/parts/django/tests/regressiontests/admin_scripts/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/management/commands/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/management/commands/app_command.py b/parts/django/tests/regressiontests/admin_scripts/management/commands/app_command.py
deleted file mode 100644
index f72e912..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/management/commands/app_command.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from django.core.management.base import AppCommand
-
-class Command(AppCommand):
- help = 'Test Application-based commands'
- requires_model_validation = False
- args = '[appname ...]'
-
- def handle_app(self, app, **options):
- print 'EXECUTE:AppCommand app=%s, options=%s' % (app, sorted(options.items()))
-
diff --git a/parts/django/tests/regressiontests/admin_scripts/management/commands/base_command.py b/parts/django/tests/regressiontests/admin_scripts/management/commands/base_command.py
deleted file mode 100644
index 438f703..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/management/commands/base_command.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from django.core.management.base import BaseCommand
-from optparse import make_option
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option('--option_a','-a', action='store', dest='option_a', default='1'),
- make_option('--option_b','-b', action='store', dest='option_b', default='2'),
- make_option('--option_c','-c', action='store', dest='option_c', default='3'),
- )
- help = 'Test basic commands'
- requires_model_validation = False
- args = '[labels ...]'
-
- def handle(self, *labels, **options):
- print 'EXECUTE:BaseCommand labels=%s, options=%s' % (labels, sorted(options.items()))
diff --git a/parts/django/tests/regressiontests/admin_scripts/management/commands/label_command.py b/parts/django/tests/regressiontests/admin_scripts/management/commands/label_command.py
deleted file mode 100644
index 2b735c8..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/management/commands/label_command.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.core.management.base import LabelCommand
-
-class Command(LabelCommand):
- help = "Test Label-based commands"
- requires_model_validation = False
- args = '<label>'
-
- def handle_label(self, label, **options):
- print 'EXECUTE:LabelCommand label=%s, options=%s' % (label, sorted(options.items()))
diff --git a/parts/django/tests/regressiontests/admin_scripts/management/commands/noargs_command.py b/parts/django/tests/regressiontests/admin_scripts/management/commands/noargs_command.py
deleted file mode 100644
index 683eb7a..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/management/commands/noargs_command.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.core.management.base import NoArgsCommand
-
-class Command(NoArgsCommand):
- help = "Test No-args commands"
- requires_model_validation = False
-
-
- def handle_noargs(self, **options):
- print 'EXECUTE:NoArgsCommand options=%s' % sorted(options.items())
diff --git a/parts/django/tests/regressiontests/admin_scripts/models.py b/parts/django/tests/regressiontests/admin_scripts/models.py
deleted file mode 100644
index 96a40d2..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/models.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.db import models
-
-class Article(models.Model):
- headline = models.CharField(max_length=100, default='Default headline')
- pub_date = models.DateTimeField()
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- ordering = ('-pub_date', 'headline')
- \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_scripts/simple_app/__init__.py b/parts/django/tests/regressiontests/admin_scripts/simple_app/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/simple_app/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_scripts/simple_app/models.py b/parts/django/tests/regressiontests/admin_scripts/simple_app/models.py
deleted file mode 100644
index 65b30ed..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/simple_app/models.py
+++ /dev/null
@@ -1 +0,0 @@
-from admin_scripts.complex_app.models.bar import Bar
diff --git a/parts/django/tests/regressiontests/admin_scripts/tests.py b/parts/django/tests/regressiontests/admin_scripts/tests.py
deleted file mode 100644
index 2a7f302..0000000
--- a/parts/django/tests/regressiontests/admin_scripts/tests.py
+++ /dev/null
@@ -1,1199 +0,0 @@
-"""
-A series of tests to establish that the command-line managment tools work as
-advertised - especially with regards to the handling of the DJANGO_SETTINGS_MODULE
-and default settings.py files.
-"""
-import os
-import unittest
-import shutil
-import sys
-import re
-
-from django import conf, bin, get_version
-from django.conf import settings
-
-
-class AdminScriptTestCase(unittest.TestCase):
- def write_settings(self, filename, apps=None, is_dir=False, sdict=None):
- test_dir = os.path.dirname(os.path.dirname(__file__))
- if is_dir:
- settings_dir = os.path.join(test_dir,filename)
- os.mkdir(settings_dir)
- settings_file = open(os.path.join(settings_dir,'__init__.py'), 'w')
- else:
- settings_file = open(os.path.join(test_dir, filename), 'w')
- settings_file.write('# Settings file automatically generated by regressiontests.admin_scripts test case\n')
- exports = [
- 'DATABASES',
- 'ROOT_URLCONF'
- ]
- for s in exports:
- if hasattr(settings, s):
- o = getattr(settings, s)
- if not isinstance(o, dict):
- o = "'%s'" % o
- settings_file.write("%s = %s\n" % (s, o))
-
- if apps is None:
- apps = ['django.contrib.auth', 'django.contrib.contenttypes', 'admin_scripts']
-
- if apps:
- settings_file.write("INSTALLED_APPS = %s\n" % apps)
-
- if sdict:
- for k, v in sdict.items():
- settings_file.write("%s = %s\n" % (k, v))
-
- settings_file.close()
-
- def remove_settings(self, filename, is_dir=False):
- test_dir = os.path.dirname(os.path.dirname(__file__))
- full_name = os.path.join(test_dir, filename)
- if is_dir:
- shutil.rmtree(full_name)
- else:
- os.remove(full_name)
-
- # Also try to remove the compiled file; if it exists, it could
- # mess up later tests that depend upon the .py file not existing
- try:
- if sys.platform.startswith('java'):
- # Jython produces module$py.class files
- os.remove(re.sub(r'\.py$', '$py.class', full_name))
- else:
- # CPython produces module.pyc files
- os.remove(full_name + 'c')
- except OSError:
- pass
-
- def _ext_backend_paths(self):
- """
- Returns the paths for any external backend packages.
- """
- paths = []
- first_package_re = re.compile(r'(^[^\.]+)\.')
- for backend in settings.DATABASES.values():
- result = first_package_re.findall(backend['ENGINE'])
- if result and result != 'django':
- backend_pkg = __import__(result[0])
- backend_dir = os.path.dirname(backend_pkg.__file__)
- paths.append(os.path.dirname(backend_dir))
- return paths
-
- def run_test(self, script, args, settings_file=None, apps=None):
- test_dir = os.path.dirname(os.path.dirname(__file__))
- project_dir = os.path.dirname(test_dir)
- base_dir = os.path.dirname(project_dir)
- ext_backend_base_dirs = self._ext_backend_paths()
-
- # Remember the old environment
- old_django_settings_module = os.environ.get('DJANGO_SETTINGS_MODULE', None)
- if sys.platform.startswith('java'):
- python_path_var_name = 'JYTHONPATH'
- else:
- python_path_var_name = 'PYTHONPATH'
-
- old_python_path = os.environ.get(python_path_var_name, None)
- old_cwd = os.getcwd()
-
- # Set the test environment
- if settings_file:
- os.environ['DJANGO_SETTINGS_MODULE'] = settings_file
- elif 'DJANGO_SETTINGS_MODULE' in os.environ:
- del os.environ['DJANGO_SETTINGS_MODULE']
- python_path = [test_dir, base_dir]
- python_path.extend(ext_backend_base_dirs)
- os.environ[python_path_var_name] = os.pathsep.join(python_path)
-
- # Build the command line
- executable = sys.executable
- arg_string = ' '.join(['%s' % arg for arg in args])
- if ' ' in executable:
- cmd = '""%s" "%s" %s"' % (executable, script, arg_string)
- else:
- cmd = '%s "%s" %s' % (executable, script, arg_string)
-
- # Move to the test directory and run
- os.chdir(test_dir)
- try:
- from subprocess import Popen, PIPE
- p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
- stdin, stdout, stderr = (p.stdin, p.stdout, p.stderr)
- p.wait()
- except ImportError:
- stdin, stdout, stderr = os.popen3(cmd)
- out, err = stdout.read(), stderr.read()
-
- # Restore the old environment
- if old_django_settings_module:
- os.environ['DJANGO_SETTINGS_MODULE'] = old_django_settings_module
- if old_python_path:
- os.environ[python_path_var_name] = old_python_path
- # Move back to the old working directory
- os.chdir(old_cwd)
-
- return out, err
-
- def run_django_admin(self, args, settings_file=None):
- bin_dir = os.path.abspath(os.path.dirname(bin.__file__))
- return self.run_test(os.path.join(bin_dir,'django-admin.py'), args, settings_file)
-
- def run_manage(self, args, settings_file=None):
- conf_dir = os.path.dirname(conf.__file__)
- template_manage_py = os.path.join(conf_dir, 'project_template', 'manage.py')
-
- test_dir = os.path.dirname(os.path.dirname(__file__))
- test_manage_py = os.path.join(test_dir, 'manage.py')
- shutil.copyfile(template_manage_py, test_manage_py)
-
- stdout, stderr = self.run_test('./manage.py', args, settings_file)
-
- # Cleanup - remove the generated manage.py script
- os.remove(test_manage_py)
-
- return stdout, stderr
-
- def assertNoOutput(self, stream):
- "Utility assertion: assert that the given stream is empty"
- self.assertEquals(len(stream), 0, "Stream should be empty: actually contains '%s'" % stream)
- def assertOutput(self, stream, msg):
- "Utility assertion: assert that the given message exists in the output"
- self.assertTrue(msg in stream, "'%s' does not match actual output text '%s'" % (msg, stream))
-
-##########################################################################
-# DJANGO ADMIN TESTS
-# This first series of test classes checks the environment processing
-# of the django-admin.py script
-##########################################################################
-
-
-class DjangoAdminNoSettings(AdminScriptTestCase):
- "A series of tests for django-admin.py when there is no settings.py file."
-
- def test_builtin_command(self):
- "no settings: django-admin builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'environment variable DJANGO_SETTINGS_MODULE is undefined')
-
- def test_builtin_with_bad_settings(self):
- "no settings: django-admin builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "no settings: django-admin builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
-
-class DjangoAdminDefaultSettings(AdminScriptTestCase):
- """A series of tests for django-admin.py when using a settings.py file that
- contains the test application.
- """
- def setUp(self):
- self.write_settings('settings.py')
-
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_builtin_command(self):
- "default: django-admin builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'environment variable DJANGO_SETTINGS_MODULE is undefined')
-
- def test_builtin_with_settings(self):
- "default: django-admin builtin commands succeed if settings are provided as argument"
- args = ['sqlall','--settings=settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "default: django-admin builtin commands succeed if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_bad_settings(self):
- "default: django-admin builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "default: django-admin builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_custom_command(self):
- "default: django-admin can't execute user commands if it isn't provided settings"
- args = ['noargs_command']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_settings(self):
- "default: django-admin can execute user commands if settings are provided as argument"
- args = ['noargs_command', '--settings=settings']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_environment(self):
- "default: django-admin can execute user commands if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
-class DjangoAdminFullPathDefaultSettings(AdminScriptTestCase):
- """A series of tests for django-admin.py when using a settings.py file that
- contains the test application specified using a full path.
- """
- def setUp(self):
- self.write_settings('settings.py', ['django.contrib.auth', 'django.contrib.contenttypes', 'regressiontests.admin_scripts'])
-
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_builtin_command(self):
- "fulldefault: django-admin builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'environment variable DJANGO_SETTINGS_MODULE is undefined')
-
- def test_builtin_with_settings(self):
- "fulldefault: django-admin builtin commands succeed if a settings file is provided"
- args = ['sqlall','--settings=settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "fulldefault: django-admin builtin commands succeed if the environment contains settings"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_bad_settings(self):
- "fulldefault: django-admin builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "fulldefault: django-admin builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_custom_command(self):
- "fulldefault: django-admin can't execute user commands unless settings are provided"
- args = ['noargs_command']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_settings(self):
- "fulldefault: django-admin can execute user commands if settings are provided as argument"
- args = ['noargs_command', '--settings=settings']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_environment(self):
- "fulldefault: django-admin can execute user commands if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
-class DjangoAdminMinimalSettings(AdminScriptTestCase):
- """A series of tests for django-admin.py when using a settings.py file that
- doesn't contain the test application.
- """
- def setUp(self):
- self.write_settings('settings.py', apps=['django.contrib.auth','django.contrib.contenttypes'])
-
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_builtin_command(self):
- "minimal: django-admin builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'environment variable DJANGO_SETTINGS_MODULE is undefined')
-
- def test_builtin_with_settings(self):
- "minimal: django-admin builtin commands fail if settings are provided as argument"
- args = ['sqlall','--settings=settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found')
-
- def test_builtin_with_environment(self):
- "minimal: django-admin builtin commands fail if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found')
-
- def test_builtin_with_bad_settings(self):
- "minimal: django-admin builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "minimal: django-admin builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_custom_command(self):
- "minimal: django-admin can't execute user commands unless settings are provided"
- args = ['noargs_command']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_settings(self):
- "minimal: django-admin can't execute user commands, even if settings are provided as argument"
- args = ['noargs_command', '--settings=settings']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_environment(self):
- "minimal: django-admin can't execute user commands, even if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
-class DjangoAdminAlternateSettings(AdminScriptTestCase):
- """A series of tests for django-admin.py when using a settings file
- with a name other than 'settings.py'.
- """
- def setUp(self):
- self.write_settings('alternate_settings.py')
-
- def tearDown(self):
- self.remove_settings('alternate_settings.py')
-
- def test_builtin_command(self):
- "alternate: django-admin builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'environment variable DJANGO_SETTINGS_MODULE is undefined')
-
- def test_builtin_with_settings(self):
- "alternate: django-admin builtin commands succeed if settings are provided as argument"
- args = ['sqlall','--settings=alternate_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "alternate: django-admin builtin commands succeed if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'alternate_settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_bad_settings(self):
- "alternate: django-admin builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "alternate: django-admin builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_custom_command(self):
- "alternate: django-admin can't execute user commands unless settings are provided"
- args = ['noargs_command']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_settings(self):
- "alternate: django-admin can execute user commands if settings are provided as argument"
- args = ['noargs_command', '--settings=alternate_settings']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_environment(self):
- "alternate: django-admin can execute user commands if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_django_admin(args,'alternate_settings')
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
-
-class DjangoAdminMultipleSettings(AdminScriptTestCase):
- """A series of tests for django-admin.py when multiple settings files
- (including the default 'settings.py') are available. The default settings
- file is insufficient for performing the operations described, so the
- alternate settings must be used by the running script.
- """
- def setUp(self):
- self.write_settings('settings.py', apps=['django.contrib.auth','django.contrib.contenttypes'])
- self.write_settings('alternate_settings.py')
-
- def tearDown(self):
- self.remove_settings('settings.py')
- self.remove_settings('alternate_settings.py')
-
- def test_builtin_command(self):
- "alternate: django-admin builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'environment variable DJANGO_SETTINGS_MODULE is undefined')
-
- def test_builtin_with_settings(self):
- "alternate: django-admin builtin commands succeed if settings are provided as argument"
- args = ['sqlall','--settings=alternate_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "alternate: django-admin builtin commands succeed if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'alternate_settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_bad_settings(self):
- "alternate: django-admin builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "alternate: django-admin builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_custom_command(self):
- "alternate: django-admin can't execute user commands unless settings are provided"
- args = ['noargs_command']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_settings(self):
- "alternate: django-admin can't execute user commands, even if settings are provided as argument"
- args = ['noargs_command', '--settings=alternate_settings']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_environment(self):
- "alternate: django-admin can't execute user commands, even if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_django_admin(args,'alternate_settings')
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
-
-class DjangoAdminSettingsDirectory(AdminScriptTestCase):
- """
- A series of tests for django-admin.py when the settings file is in a
- directory. (see #9751).
- """
-
- def setUp(self):
- self.write_settings('settings', is_dir=True)
-
- def tearDown(self):
- self.remove_settings('settings', is_dir=True)
-
- def test_setup_environ(self):
- "directory: startapp creates the correct directory"
- test_dir = os.path.dirname(os.path.dirname(__file__))
- args = ['startapp','settings_test']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(err)
- self.assert_(os.path.exists(os.path.join(test_dir, 'settings_test')))
- shutil.rmtree(os.path.join(test_dir, 'settings_test'))
-
- def test_builtin_command(self):
- "directory: django-admin builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'environment variable DJANGO_SETTINGS_MODULE is undefined')
-
- def test_builtin_with_bad_settings(self):
- "directory: django-admin builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "directory: django-admin builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_custom_command(self):
- "directory: django-admin can't execute user commands unless settings are provided"
- args = ['noargs_command']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_builtin_with_settings(self):
- "directory: django-admin builtin commands succeed if settings are provided as argument"
- args = ['sqlall','--settings=settings', 'admin_scripts']
- out, err = self.run_django_admin(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "directory: django-admin builtin commands succeed if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_django_admin(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
-
-##########################################################################
-# MANAGE.PY TESTS
-# This next series of test classes checks the environment processing
-# of the generated manage.py script
-##########################################################################
-
-class ManageNoSettings(AdminScriptTestCase):
- "A series of tests for manage.py when there is no settings.py file."
-
- def test_builtin_command(self):
- "no settings: manage.py builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_builtin_with_bad_settings(self):
- "no settings: manage.py builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_builtin_with_bad_environment(self):
- "no settings: manage.py builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
-
-class ManageDefaultSettings(AdminScriptTestCase):
- """A series of tests for manage.py when using a settings.py file that
- contains the test application.
- """
- def setUp(self):
- self.write_settings('settings.py')
-
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_builtin_command(self):
- "default: manage.py builtin commands succeed when default settings are appropriate"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_settings(self):
- "default: manage.py builtin commands succeed if settings are provided as argument"
- args = ['sqlall','--settings=settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "default: manage.py builtin commands succeed if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_bad_settings(self):
- "default: manage.py builtin commands succeed if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "default: manage.py builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'bad_settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_custom_command(self):
- "default: manage.py can execute user commands when default settings are appropriate"
- args = ['noargs_command']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_settings(self):
- "default: manage.py can execute user commands when settings are provided as argument"
- args = ['noargs_command', '--settings=settings']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_environment(self):
- "default: manage.py can execute user commands when settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_manage(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
-
-class ManageFullPathDefaultSettings(AdminScriptTestCase):
- """A series of tests for manage.py when using a settings.py file that
- contains the test application specified using a full path.
- """
- def setUp(self):
- self.write_settings('settings.py', ['django.contrib.auth', 'django.contrib.contenttypes', 'regressiontests.admin_scripts'])
-
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_builtin_command(self):
- "fulldefault: manage.py builtin commands succeed when default settings are appropriate"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_settings(self):
- "fulldefault: manage.py builtin commands succeed if settings are provided as argument"
- args = ['sqlall','--settings=settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "fulldefault: manage.py builtin commands succeed if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_bad_settings(self):
- "fulldefault: manage.py builtin commands succeed if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "fulldefault: manage.py builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'bad_settings')
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_custom_command(self):
- "fulldefault: manage.py can execute user commands when default settings are appropriate"
- args = ['noargs_command']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_settings(self):
- "fulldefault: manage.py can execute user commands when settings are provided as argument"
- args = ['noargs_command', '--settings=settings']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_environment(self):
- "fulldefault: manage.py can execute user commands when settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_manage(args,'settings')
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
-class ManageMinimalSettings(AdminScriptTestCase):
- """A series of tests for manage.py when using a settings.py file that
- doesn't contain the test application.
- """
- def setUp(self):
- self.write_settings('settings.py', apps=['django.contrib.auth','django.contrib.contenttypes'])
-
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_builtin_command(self):
- "minimal: manage.py builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found')
-
- def test_builtin_with_settings(self):
- "minimal: manage.py builtin commands fail if settings are provided as argument"
- args = ['sqlall','--settings=settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found')
-
- def test_builtin_with_environment(self):
- "minimal: manage.py builtin commands fail if settings are provided in the environment"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'settings')
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found')
-
- def test_builtin_with_bad_settings(self):
- "minimal: manage.py builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "minimal: manage.py builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found')
-
- def test_custom_command(self):
- "minimal: manage.py can't execute user commands without appropriate settings"
- args = ['noargs_command']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_settings(self):
- "minimal: manage.py can't execute user commands, even if settings are provided as argument"
- args = ['noargs_command', '--settings=settings']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_environment(self):
- "minimal: manage.py can't execute user commands, even if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_manage(args,'settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
-class ManageAlternateSettings(AdminScriptTestCase):
- """A series of tests for manage.py when using a settings file
- with a name other than 'settings.py'.
- """
- def setUp(self):
- self.write_settings('alternate_settings.py')
-
- def tearDown(self):
- self.remove_settings('alternate_settings.py')
-
- def test_builtin_command(self):
- "alternate: manage.py builtin commands fail with an import error when no default settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_builtin_with_settings(self):
- "alternate: manage.py builtin commands fail if settings are provided as argument but no defaults"
- args = ['sqlall','--settings=alternate_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_builtin_with_environment(self):
- "alternate: manage.py builtin commands fail if settings are provided in the environment but no defaults"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'alternate_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_builtin_with_bad_settings(self):
- "alternate: manage.py builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_builtin_with_bad_environment(self):
- "alternate: manage.py builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_custom_command(self):
- "alternate: manage.py can't execute user commands"
- args = ['noargs_command']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_custom_command_with_settings(self):
- "alternate: manage.py can't execute user commands, even if settings are provided as argument"
- args = ['noargs_command', '--settings=alternate_settings']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
- def test_custom_command_with_environment(self):
- "alternate: manage.py can't execute user commands, even if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_manage(args,'alternate_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Can't find the file 'settings.py' in the directory containing './manage.py'")
-
-
-class ManageMultipleSettings(AdminScriptTestCase):
- """A series of tests for manage.py when multiple settings files
- (including the default 'settings.py') are available. The default settings
- file is insufficient for performing the operations described, so the
- alternate settings must be used by the running script.
- """
- def setUp(self):
- self.write_settings('settings.py', apps=['django.contrib.auth','django.contrib.contenttypes'])
- self.write_settings('alternate_settings.py')
-
- def tearDown(self):
- self.remove_settings('settings.py')
- self.remove_settings('alternate_settings.py')
-
- def test_builtin_command(self):
- "multiple: manage.py builtin commands fail with an import error when no settings provided"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found.')
-
- def test_builtin_with_settings(self):
- "multiple: manage.py builtin commands succeed if settings are provided as argument"
- args = ['sqlall','--settings=alternate_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, 'CREATE TABLE')
-
- def test_builtin_with_environment(self):
- "multiple: manage.py builtin commands fail if settings are provided in the environment"
- # FIXME: This doesn't seem to be the correct output.
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'alternate_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, 'App with label admin_scripts could not be found.')
-
- def test_builtin_with_bad_settings(self):
- "multiple: manage.py builtin commands fail if settings file (from argument) doesn't exist"
- args = ['sqlall','--settings=bad_settings', 'admin_scripts']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Could not import settings 'bad_settings'")
-
- def test_builtin_with_bad_environment(self):
- "multiple: manage.py builtin commands fail if settings file (from environment) doesn't exist"
- args = ['sqlall','admin_scripts']
- out, err = self.run_manage(args,'bad_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "App with label admin_scripts could not be found")
-
- def test_custom_command(self):
- "multiple: manage.py can't execute user commands using default settings"
- args = ['noargs_command']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
- def test_custom_command_with_settings(self):
- "multiple: manage.py can execute user commands if settings are provided as argument"
- args = ['noargs_command', '--settings=alternate_settings']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand")
-
- def test_custom_command_with_environment(self):
- "multiple: manage.py can execute user commands if settings are provided in environment"
- args = ['noargs_command']
- out, err = self.run_manage(args,'alternate_settings')
- self.assertNoOutput(out)
- self.assertOutput(err, "Unknown command: 'noargs_command'")
-
-
-class ManageValidate(AdminScriptTestCase):
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_nonexistent_app(self):
- "manage.py validate reports an error on a non-existent app in INSTALLED_APPS"
- self.write_settings('settings.py', apps=['admin_scriptz.broken_app'], sdict={'USE_I18N': False})
- args = ['validate']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'No module named admin_scriptz')
-
- def test_broken_app(self):
- "manage.py validate reports an ImportError if an app's models.py raises one on import"
- self.write_settings('settings.py', apps=['admin_scripts.broken_app'])
- args = ['validate']
- out, err = self.run_manage(args)
- self.assertNoOutput(out)
- self.assertOutput(err, 'ImportError')
-
- def test_complex_app(self):
- "manage.py validate does not raise an ImportError validating a complex app with nested calls to load_app"
- self.write_settings('settings.py',
- apps=['admin_scripts.complex_app', 'admin_scripts.simple_app'],
- sdict={'DEBUG': True})
- args = ['validate']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, '0 errors found')
-
- def test_app_with_import(self):
- "manage.py validate does not raise errors when an app imports a base class that itself has an abstract base"
- self.write_settings('settings.py',
- apps=['admin_scripts.app_with_import', 'django.contrib.comments'],
- sdict={'DEBUG': True})
- args = ['validate']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, '0 errors found')
-
-##########################################################################
-# COMMAND PROCESSING TESTS
-# Check that user-space commands are correctly handled - in particular,
-# that arguments to the commands are correctly parsed and processed.
-##########################################################################
-
-class CommandTypes(AdminScriptTestCase):
- "Tests for the various types of base command types that can be defined."
- def setUp(self):
- self.write_settings('settings.py')
-
- def tearDown(self):
- self.remove_settings('settings.py')
-
- def test_version(self):
- "--version is handled as a special case"
- args = ['--version']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- # Only check the first part of the version number
- self.assertOutput(out, get_version().split('-')[0])
-
- def test_help(self):
- "--help is handled as a special case"
- args = ['--help']
- out, err = self.run_manage(args)
- if sys.version_info < (2, 5):
- self.assertOutput(out, "usage: manage.py subcommand [options] [args]")
- else:
- self.assertOutput(out, "Usage: manage.py subcommand [options] [args]")
- self.assertOutput(err, "Type 'manage.py help <subcommand>' for help on a specific subcommand.")
-
- def test_specific_help(self):
- "--help can be used on a specific command"
- args = ['sqlall','--help']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s).")
-
- def test_base_command(self):
- "User BaseCommands can execute when a label is provided"
- args = ['base_command','testlabel']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', '1'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_base_command_no_label(self):
- "User BaseCommands can execute when no labels are provided"
- args = ['base_command']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=(), options=[('option_a', '1'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_base_command_multiple_label(self):
- "User BaseCommands can execute when no labels are provided"
- args = ['base_command','testlabel','anotherlabel']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel', 'anotherlabel'), options=[('option_a', '1'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_base_command_with_option(self):
- "User BaseCommands can execute with options when a label is provided"
- args = ['base_command','testlabel','--option_a=x']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_base_command_with_options(self):
- "User BaseCommands can execute with multiple options when a label is provided"
- args = ['base_command','testlabel','-a','x','--option_b=y']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', 'y'), ('option_c', '3'), ('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_noargs(self):
- "NoArg Commands can be executed"
- args = ['noargs_command']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:NoArgsCommand options=[('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_noargs_with_args(self):
- "NoArg Commands raise an error if an argument is provided"
- args = ['noargs_command','argument']
- out, err = self.run_manage(args)
- self.assertOutput(err, "Error: Command doesn't accept any arguments")
-
- def test_app_command(self):
- "User AppCommands can execute when a single app name is provided"
- args = ['app_command', 'auth']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:AppCommand app=<module 'django.contrib.auth.models'")
- self.assertOutput(out, os.sep.join(['django','contrib','auth','models.py']))
- self.assertOutput(out, "'>, options=[('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_app_command_no_apps(self):
- "User AppCommands raise an error when no app name is provided"
- args = ['app_command']
- out, err = self.run_manage(args)
- self.assertOutput(err, 'Error: Enter at least one appname.')
-
- def test_app_command_multiple_apps(self):
- "User AppCommands raise an error when multiple app names are provided"
- args = ['app_command','auth','contenttypes']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:AppCommand app=<module 'django.contrib.auth.models'")
- self.assertOutput(out, os.sep.join(['django','contrib','auth','models.py']))
- self.assertOutput(out, "'>, options=[('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
- self.assertOutput(out, "EXECUTE:AppCommand app=<module 'django.contrib.contenttypes.models'")
- self.assertOutput(out, os.sep.join(['django','contrib','contenttypes','models.py']))
- self.assertOutput(out, "'>, options=[('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_app_command_invalid_appname(self):
- "User AppCommands can execute when a single app name is provided"
- args = ['app_command', 'NOT_AN_APP']
- out, err = self.run_manage(args)
- self.assertOutput(err, "App with label NOT_AN_APP could not be found")
-
- def test_app_command_some_invalid_appnames(self):
- "User AppCommands can execute when some of the provided app names are invalid"
- args = ['app_command', 'auth', 'NOT_AN_APP']
- out, err = self.run_manage(args)
- self.assertOutput(err, "App with label NOT_AN_APP could not be found")
-
- def test_label_command(self):
- "User LabelCommands can execute when a label is provided"
- args = ['label_command','testlabel']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:LabelCommand label=testlabel, options=[('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
- def test_label_command_no_label(self):
- "User LabelCommands raise an error if no label is provided"
- args = ['label_command']
- out, err = self.run_manage(args)
- self.assertOutput(err, 'Enter at least one label')
-
- def test_label_command_multiple_label(self):
- "User LabelCommands are executed multiple times if multiple labels are provided"
- args = ['label_command','testlabel','anotherlabel']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:LabelCommand label=testlabel, options=[('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
- self.assertOutput(out, "EXECUTE:LabelCommand label=anotherlabel, options=[('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]")
-
-class ArgumentOrder(AdminScriptTestCase):
- """Tests for 2-stage argument parsing scheme.
-
- django-admin command arguments are parsed in 2 parts; the core arguments
- (--settings, --traceback and --pythonpath) are parsed using a Lax parser.
- This Lax parser ignores any unknown options. Then the full settings are
- passed to the command parser, which extracts commands of interest to the
- individual command.
- """
- def setUp(self):
- self.write_settings('settings.py', apps=['django.contrib.auth','django.contrib.contenttypes'])
- self.write_settings('alternate_settings.py')
-
- def tearDown(self):
- self.remove_settings('settings.py')
- self.remove_settings('alternate_settings.py')
-
- def test_setting_then_option(self):
- "Options passed after settings are correctly handled"
- args = ['base_command','testlabel','--settings=alternate_settings','--option_a=x']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', 'alternate_settings'), ('traceback', None), ('verbosity', '1')]")
-
- def test_setting_then_short_option(self):
- "Short options passed after settings are correctly handled"
- args = ['base_command','testlabel','--settings=alternate_settings','--option_a=x']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', 'alternate_settings'), ('traceback', None), ('verbosity', '1')]")
-
- def test_option_then_setting(self):
- "Options passed before settings are correctly handled"
- args = ['base_command','testlabel','--option_a=x','--settings=alternate_settings']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', 'alternate_settings'), ('traceback', None), ('verbosity', '1')]")
-
- def test_short_option_then_setting(self):
- "Short options passed before settings are correctly handled"
- args = ['base_command','testlabel','-a','x','--settings=alternate_settings']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', '2'), ('option_c', '3'), ('pythonpath', None), ('settings', 'alternate_settings'), ('traceback', None), ('verbosity', '1')]")
-
- def test_option_then_setting_then_option(self):
- "Options are correctly handled when they are passed before and after a setting"
- args = ['base_command','testlabel','--option_a=x','--settings=alternate_settings','--option_b=y']
- out, err = self.run_manage(args)
- self.assertNoOutput(err)
- self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', 'y'), ('option_c', '3'), ('pythonpath', None), ('settings', 'alternate_settings'), ('traceback', None), ('verbosity', '1')]")
diff --git a/parts/django/tests/regressiontests/admin_util/__init__.py b/parts/django/tests/regressiontests/admin_util/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_util/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_util/models.py b/parts/django/tests/regressiontests/admin_util/models.py
deleted file mode 100644
index 3191a55..0000000
--- a/parts/django/tests/regressiontests/admin_util/models.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from django.db import models
-
-class Article(models.Model):
- """
- A simple Article model for testing
- """
- site = models.ForeignKey('sites.Site', related_name="admin_articles")
- title = models.CharField(max_length=100)
- title2 = models.CharField(max_length=100, verbose_name="another name")
- created = models.DateTimeField()
-
- def test_from_model(self):
- return "nothing"
-
- def test_from_model_with_override(self):
- return "nothing"
- test_from_model_with_override.short_description = "not What you Expect"
-
-class Count(models.Model):
- num = models.PositiveSmallIntegerField()
-
-class Event(models.Model):
- date = models.DateTimeField(auto_now_add=True)
-
-class Location(models.Model):
- event = models.OneToOneField(Event, verbose_name='awesome event')
-
-class Guest(models.Model):
- event = models.OneToOneField(Event)
- name = models.CharField(max_length=255)
-
- class Meta:
- verbose_name = "awesome guest"
diff --git a/parts/django/tests/regressiontests/admin_util/tests.py b/parts/django/tests/regressiontests/admin_util/tests.py
deleted file mode 100644
index 7476d10..0000000
--- a/parts/django/tests/regressiontests/admin_util/tests.py
+++ /dev/null
@@ -1,239 +0,0 @@
-from datetime import datetime
-import unittest
-
-from django.conf import settings
-from django.db import models
-from django.utils.formats import localize
-from django.test import TestCase
-
-from django.contrib import admin
-from django.contrib.admin.util import display_for_field, label_for_field, lookup_field
-from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
-from django.contrib.sites.models import Site
-from django.contrib.admin.util import NestedObjects
-
-from models import Article, Count, Event, Location
-
-
-class NestedObjectsTests(TestCase):
- """
- Tests for ``NestedObject`` utility collection.
-
- """
- def setUp(self):
- self.n = NestedObjects()
- self.objs = [Count.objects.create(num=i) for i in range(5)]
-
- def _check(self, target):
- self.assertEquals(self.n.nested(lambda obj: obj.num), target)
-
- def _add(self, obj, parent=None):
- # don't bother providing the extra args that NestedObjects ignores
- self.n.add(None, None, obj, None, parent)
-
- def test_unrelated_roots(self):
- self._add(self.objs[0])
- self._add(self.objs[1])
- self._add(self.objs[2], self.objs[1])
-
- self._check([0, 1, [2]])
-
- def test_siblings(self):
- self._add(self.objs[0])
- self._add(self.objs[1], self.objs[0])
- self._add(self.objs[2], self.objs[0])
-
- self._check([0, [1, 2]])
-
- def test_duplicate_instances(self):
- self._add(self.objs[0])
- self._add(self.objs[1])
- dupe = Count.objects.get(num=1)
- self._add(dupe, self.objs[0])
-
- self._check([0, 1])
-
- def test_non_added_parent(self):
- self._add(self.objs[0], self.objs[1])
-
- self._check([0])
-
- def test_cyclic(self):
- self._add(self.objs[0], self.objs[2])
- self._add(self.objs[1], self.objs[0])
- self._add(self.objs[2], self.objs[1])
- self._add(self.objs[0], self.objs[2])
-
- self._check([0, [1, [2]]])
-
-
-class UtilTests(unittest.TestCase):
- def test_values_from_lookup_field(self):
- """
- Regression test for #12654: lookup_field
- """
- SITE_NAME = 'example.com'
- TITLE_TEXT = 'Some title'
- CREATED_DATE = datetime.min
- ADMIN_METHOD = 'admin method'
- SIMPLE_FUNCTION = 'function'
- INSTANCE_ATTRIBUTE = 'attr'
-
- class MockModelAdmin(object):
- def get_admin_value(self, obj):
- return ADMIN_METHOD
-
- simple_function = lambda obj: SIMPLE_FUNCTION
-
- article = Article(
- site=Site(domain=SITE_NAME),
- title=TITLE_TEXT,
- created=CREATED_DATE,
- )
- article.non_field = INSTANCE_ATTRIBUTE
-
- verifications = (
- ('site', SITE_NAME),
- ('created', localize(CREATED_DATE)),
- ('title', TITLE_TEXT),
- ('get_admin_value', ADMIN_METHOD),
- (simple_function, SIMPLE_FUNCTION),
- ('test_from_model', article.test_from_model()),
- ('non_field', INSTANCE_ATTRIBUTE)
- )
-
- mock_admin = MockModelAdmin()
- for name, value in verifications:
- field, attr, resolved_value = lookup_field(name, article, mock_admin)
-
- if field is not None:
- resolved_value = display_for_field(resolved_value, field)
-
- self.assertEqual(value, resolved_value)
-
- def test_null_display_for_field(self):
- """
- Regression test for #12550: display_for_field should handle None
- value.
- """
- display_value = display_for_field(None, models.CharField())
- self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
-
- display_value = display_for_field(None, models.CharField(
- choices=(
- (None, "test_none"),
- )
- ))
- self.assertEqual(display_value, "test_none")
-
- display_value = display_for_field(None, models.DateField())
- self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
-
- display_value = display_for_field(None, models.TimeField())
- self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
-
- # Regression test for #13071: NullBooleanField has special
- # handling.
- display_value = display_for_field(None, models.NullBooleanField())
- expected = u'<img src="%simg/admin/icon-unknown.gif" alt="None" />' % settings.ADMIN_MEDIA_PREFIX
- self.assertEqual(display_value, expected)
-
- display_value = display_for_field(None, models.DecimalField())
- self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
-
- display_value = display_for_field(None, models.FloatField())
- self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
-
- def test_label_for_field(self):
- """
- Tests for label_for_field
- """
- self.assertEquals(
- label_for_field("title", Article),
- "title"
- )
- self.assertEquals(
- label_for_field("title2", Article),
- "another name"
- )
- self.assertEquals(
- label_for_field("title2", Article, return_attr=True),
- ("another name", None)
- )
-
- self.assertEquals(
- label_for_field("__unicode__", Article),
- "article"
- )
- self.assertEquals(
- label_for_field("__str__", Article),
- "article"
- )
-
- self.assertRaises(
- AttributeError,
- lambda: label_for_field("unknown", Article)
- )
-
- def test_callable(obj):
- return "nothing"
- self.assertEquals(
- label_for_field(test_callable, Article),
- "Test callable"
- )
- self.assertEquals(
- label_for_field(test_callable, Article, return_attr=True),
- ("Test callable", test_callable)
- )
-
- self.assertEquals(
- label_for_field("test_from_model", Article),
- "Test from model"
- )
- self.assertEquals(
- label_for_field("test_from_model", Article, return_attr=True),
- ("Test from model", Article.test_from_model)
- )
- self.assertEquals(
- label_for_field("test_from_model_with_override", Article),
- "not What you Expect"
- )
-
- self.assertEquals(
- label_for_field(lambda x: "nothing", Article),
- "--"
- )
-
- class MockModelAdmin(object):
- def test_from_model(self, obj):
- return "nothing"
- test_from_model.short_description = "not Really the Model"
-
- self.assertEquals(
- label_for_field("test_from_model", Article, model_admin=MockModelAdmin),
- "not Really the Model"
- )
- self.assertEquals(
- label_for_field("test_from_model", Article,
- model_admin = MockModelAdmin,
- return_attr = True
- ),
- ("not Really the Model", MockModelAdmin.test_from_model)
- )
-
- def test_related_name(self):
- """
- Regression test for #13963
- """
- self.assertEquals(
- label_for_field('location', Event, return_attr=True),
- ('location', None),
- )
- self.assertEquals(
- label_for_field('event', Location, return_attr=True),
- ('awesome event', None),
- )
- self.assertEquals(
- label_for_field('guest', Event, return_attr=True),
- ('awesome guest', None),
- )
diff --git a/parts/django/tests/regressiontests/admin_validation/__init__.py b/parts/django/tests/regressiontests/admin_validation/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_validation/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_validation/models.py b/parts/django/tests/regressiontests/admin_validation/models.py
deleted file mode 100644
index 24387cc..0000000
--- a/parts/django/tests/regressiontests/admin_validation/models.py
+++ /dev/null
@@ -1,47 +0,0 @@
-"""
-Tests of ModelAdmin validation logic.
-"""
-
-from django.db import models
-
-
-class Album(models.Model):
- title = models.CharField(max_length=150)
-
-
-class Song(models.Model):
- title = models.CharField(max_length=150)
- album = models.ForeignKey(Album)
- original_release = models.DateField(editable=False)
-
- class Meta:
- ordering = ('title',)
-
- def __unicode__(self):
- return self.title
-
- def readonly_method_on_model(self):
- # does nothing
- pass
-
-
-class TwoAlbumFKAndAnE(models.Model):
- album1 = models.ForeignKey(Album, related_name="album1_set")
- album2 = models.ForeignKey(Album, related_name="album2_set")
- e = models.CharField(max_length=1)
-
-
-class Author(models.Model):
- name = models.CharField(max_length=100)
-
-
-class Book(models.Model):
- name = models.CharField(max_length=100)
- subtitle = models.CharField(max_length=100)
- price = models.FloatField()
- authors = models.ManyToManyField(Author, through='AuthorsBooks')
-
-
-class AuthorsBooks(models.Model):
- author = models.ForeignKey(Author)
- book = models.ForeignKey(Book)
diff --git a/parts/django/tests/regressiontests/admin_validation/tests.py b/parts/django/tests/regressiontests/admin_validation/tests.py
deleted file mode 100644
index 1872ca5..0000000
--- a/parts/django/tests/regressiontests/admin_validation/tests.py
+++ /dev/null
@@ -1,247 +0,0 @@
-from django.contrib import admin
-from django import forms
-from django.contrib.admin.validation import validate, validate_inline, \
- ImproperlyConfigured
-from django.test import TestCase
-
-from models import Song, Book, Album, TwoAlbumFKAndAnE
-
-class SongForm(forms.ModelForm):
- pass
-
-class ValidFields(admin.ModelAdmin):
- form = SongForm
- fields = ['title']
-
-class InvalidFields(admin.ModelAdmin):
- form = SongForm
- fields = ['spam']
-
-class ValidationTestCase(TestCase):
- def assertRaisesMessage(self, exc, msg, func, *args, **kwargs):
- try:
- func(*args, **kwargs)
- except Exception, e:
- self.assertEqual(msg, str(e))
- self.assertTrue(isinstance(e, exc), "Expected %s, got %s" % (exc, type(e)))
-
- def test_readonly_and_editable(self):
- class SongAdmin(admin.ModelAdmin):
- readonly_fields = ["original_release"]
- fieldsets = [
- (None, {
- "fields": ["title", "original_release"],
- }),
- ]
- validate(SongAdmin, Song)
-
- def test_custom_modelforms_with_fields_fieldsets(self):
- """
- # Regression test for #8027: custom ModelForms with fields/fieldsets
- """
- validate(ValidFields, Song)
- self.assertRaisesMessage(ImproperlyConfigured,
- "'InvalidFields.fields' refers to field 'spam' that is missing from the form.",
- validate,
- InvalidFields, Song)
-
- def test_exclude_values(self):
- """
- Tests for basic validation of 'exclude' option values (#12689)
- """
- class ExcludedFields1(admin.ModelAdmin):
- exclude = ('foo')
- self.assertRaisesMessage(ImproperlyConfigured,
- "'ExcludedFields1.exclude' must be a list or tuple.",
- validate,
- ExcludedFields1, Book)
-
- def test_exclude_duplicate_values(self):
- class ExcludedFields2(admin.ModelAdmin):
- exclude = ('name', 'name')
- self.assertRaisesMessage(ImproperlyConfigured,
- "There are duplicate field(s) in ExcludedFields2.exclude",
- validate,
- ExcludedFields2, Book)
-
- def test_exclude_in_inline(self):
- class ExcludedFieldsInline(admin.TabularInline):
- model = Song
- exclude = ('foo')
-
- class ExcludedFieldsAlbumAdmin(admin.ModelAdmin):
- model = Album
- inlines = [ExcludedFieldsInline]
-
- self.assertRaisesMessage(ImproperlyConfigured,
- "'ExcludedFieldsInline.exclude' must be a list or tuple.",
- validate,
- ExcludedFieldsAlbumAdmin, Album)
-
- def test_exclude_inline_model_admin(self):
- """
- # Regression test for #9932 - exclude in InlineModelAdmin
- # should not contain the ForeignKey field used in ModelAdmin.model
- """
- class SongInline(admin.StackedInline):
- model = Song
- exclude = ['album']
-
- class AlbumAdmin(admin.ModelAdmin):
- model = Album
- inlines = [SongInline]
-
- self.assertRaisesMessage(ImproperlyConfigured,
- "SongInline cannot exclude the field 'album' - this is the foreign key to the parent model Album.",
- validate,
- AlbumAdmin, Album)
-
- def test_fk_exclusion(self):
- """
- Regression test for #11709 - when testing for fk excluding (when exclude is
- given) make sure fk_name is honored or things blow up when there is more
- than one fk to the parent model.
- """
- class TwoAlbumFKAndAnEInline(admin.TabularInline):
- model = TwoAlbumFKAndAnE
- exclude = ("e",)
- fk_name = "album1"
- validate_inline(TwoAlbumFKAndAnEInline, None, Album)
-
- def test_inline_self_validation(self):
- class TwoAlbumFKAndAnEInline(admin.TabularInline):
- model = TwoAlbumFKAndAnE
-
- self.assertRaisesMessage(Exception,
- "<class 'regressiontests.admin_validation.models.TwoAlbumFKAndAnE'> has more than 1 ForeignKey to <class 'regressiontests.admin_validation.models.Album'>",
- validate_inline,
- TwoAlbumFKAndAnEInline, None, Album)
-
- def test_inline_with_specified(self):
- class TwoAlbumFKAndAnEInline(admin.TabularInline):
- model = TwoAlbumFKAndAnE
- fk_name = "album1"
- validate_inline(TwoAlbumFKAndAnEInline, None, Album)
-
- def test_readonly(self):
- class SongAdmin(admin.ModelAdmin):
- readonly_fields = ("title",)
-
- validate(SongAdmin, Song)
-
- def test_readonly_on_method(self):
- def my_function(obj):
- pass
-
- class SongAdmin(admin.ModelAdmin):
- readonly_fields = (my_function,)
-
- validate(SongAdmin, Song)
-
- def test_readonly_on_modeladmin(self):
- class SongAdmin(admin.ModelAdmin):
- readonly_fields = ("readonly_method_on_modeladmin",)
-
- def readonly_method_on_modeladmin(self, obj):
- pass
-
- validate(SongAdmin, Song)
-
- def test_readonly_method_on_model(self):
- class SongAdmin(admin.ModelAdmin):
- readonly_fields = ("readonly_method_on_model",)
-
- validate(SongAdmin, Song)
-
- def test_nonexistant_field(self):
- class SongAdmin(admin.ModelAdmin):
- readonly_fields = ("title", "nonexistant")
-
- self.assertRaisesMessage(ImproperlyConfigured,
- "SongAdmin.readonly_fields[1], 'nonexistant' is not a callable or an attribute of 'SongAdmin' or found in the model 'Song'.",
- validate,
- SongAdmin, Song)
-
- def test_extra(self):
- class SongAdmin(admin.ModelAdmin):
- def awesome_song(self, instance):
- if instance.title == "Born to Run":
- return "Best Ever!"
- return "Status unknown."
- validate(SongAdmin, Song)
-
- def test_readonly_lambda(self):
- class SongAdmin(admin.ModelAdmin):
- readonly_fields = (lambda obj: "test",)
-
- validate(SongAdmin, Song)
-
- def test_graceful_m2m_fail(self):
- """
- Regression test for #12203/#12237 - Fail more gracefully when a M2M field that
- specifies the 'through' option is included in the 'fields' or the 'fieldsets'
- ModelAdmin options.
- """
-
- class BookAdmin(admin.ModelAdmin):
- fields = ['authors']
-
- self.assertRaisesMessage(ImproperlyConfigured,
- "'BookAdmin.fields' can't include the ManyToManyField field 'authors' because 'authors' manually specifies a 'through' model.",
- validate,
- BookAdmin, Book)
-
- def test_cannon_include_through(self):
- class FieldsetBookAdmin(admin.ModelAdmin):
- fieldsets = (
- ('Header 1', {'fields': ('name',)}),
- ('Header 2', {'fields': ('authors',)}),
- )
- self.assertRaisesMessage(ImproperlyConfigured,
- "'FieldsetBookAdmin.fieldsets[1][1]['fields']' can't include the ManyToManyField field 'authors' because 'authors' manually specifies a 'through' model.",
- validate,
- FieldsetBookAdmin, Book)
-
- def test_nested_fieldsets(self):
- class NestedFieldsetAdmin(admin.ModelAdmin):
- fieldsets = (
- ('Main', {'fields': ('price', ('name', 'subtitle'))}),
- )
- validate(NestedFieldsetAdmin, Book)
-
- def test_explicit_through_override(self):
- """
- Regression test for #12209 -- If the explicitly provided through model
- is specified as a string, the admin should still be able use
- Model.m2m_field.through
- """
-
- class AuthorsInline(admin.TabularInline):
- model = Book.authors.through
-
- class BookAdmin(admin.ModelAdmin):
- inlines = [AuthorsInline]
-
- # If the through model is still a string (and hasn't been resolved to a model)
- # the validation will fail.
- validate(BookAdmin, Book)
-
- def test_non_model_fields(self):
- """
- Regression for ensuring ModelAdmin.fields can contain non-model fields
- that broke with r11737
- """
- class SongForm(forms.ModelForm):
- extra_data = forms.CharField()
- class Meta:
- model = Song
-
- class FieldsOnFormOnlyAdmin(admin.ModelAdmin):
- form = SongForm
- fields = ['title', 'extra_data']
-
- validate(FieldsOnFormOnlyAdmin, Song)
-
-
-
-
diff --git a/parts/django/tests/regressiontests/admin_views/__init__.py b/parts/django/tests/regressiontests/admin_views/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_views/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_views/customadmin.py b/parts/django/tests/regressiontests/admin_views/customadmin.py
deleted file mode 100644
index 34e39ef..0000000
--- a/parts/django/tests/regressiontests/admin_views/customadmin.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""
-A second, custom AdminSite -- see tests.CustomAdminSiteTests.
-"""
-from django.conf.urls.defaults import patterns
-from django.contrib import admin
-from django.http import HttpResponse
-
-import models
-
-class Admin2(admin.AdminSite):
- login_template = 'custom_admin/login.html'
- logout_template = 'custom_admin/logout.html'
- index_template = 'custom_admin/index.html'
- password_change_template = 'custom_admin/password_change_form.html'
- password_change_done_template = 'custom_admin/password_change_done.html'
-
- # A custom index view.
- def index(self, request, extra_context=None):
- return super(Admin2, self).index(request, {'foo': '*bar*'})
-
- def get_urls(self):
- return patterns('',
- (r'^my_view/$', self.admin_view(self.my_view)),
- ) + super(Admin2, self).get_urls()
-
- def my_view(self, request):
- return HttpResponse("Django is a magical pony!")
-
-site = Admin2(name="admin2")
-
-site.register(models.Article, models.ArticleAdmin)
-site.register(models.Section, inlines=[models.ArticleInline])
-site.register(models.Thing, models.ThingAdmin)
-site.register(models.Fabric, models.FabricAdmin)
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-actions.xml b/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-actions.xml
deleted file mode 100644
index 316e750..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-actions.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.subscriber">
- <field type="CharField" name="name">John Doe</field>
- <field type="CharField" name="email">john@example.org</field>
- </object>
- <object pk="2" model="admin_views.subscriber">
- <field type="CharField" name="name">Max Mustermann</field>
- <field type="CharField" name="email">max@example.org</field>
- </object>
- <object pk="1" model="admin_views.externalsubscriber">
- <field type="CharField" name="name">John Doe</field>
- <field type="CharField" name="email">john@example.org</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml b/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml
deleted file mode 100644
index e121356..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.color">
- <field type="CharField" name="value">Red</field>
- <field type="BooleanField" name="warm">1</field>
- </object>
- <object pk="2" model="admin_views.color">
- <field type="CharField" name="value">Orange</field>
- <field type="BooleanField" name="warm">1</field>
- </object>
- <object pk="3" model="admin_views.color">
- <field type="CharField" name="value">Blue</field>
- <field type="BooleanField" name="warm">0</field>
- </object>
- <object pk="4" model="admin_views.color">
- <field type="CharField" name="value">Green</field>
- <field type="BooleanField" name="warm">0</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml b/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml
deleted file mode 100644
index 485bb27..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.fabric">
- <field type="CharField" name="surface">x</field>
- </object>
- <object pk="2" model="admin_views.fabric">
- <field type="CharField" name="surface">y</field>
- </object>
- <object pk="3" model="admin_views.fabric">
- <field type="CharField" name="surface">plain</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-person.xml b/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-person.xml
deleted file mode 100644
index ff00fd2..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-person.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.person">
- <field type="CharField" name="name">John Mauchly</field>
- <field type="IntegerField" name="gender">1</field>
- <field type="BooleanField" name="alive">True</field>
- </object>
- <object pk="2" model="admin_views.person">
- <field type="CharField" name="name">Grace Hopper</field>
- <field type="IntegerField" name="gender">1</field>
- <field type="BooleanField" name="alive">False</field>
- </object>
- <object pk="3" model="admin_views.person">
- <field type="CharField" name="name">Guido van Rossum</field>
- <field type="IntegerField" name="gender">1</field>
- <field type="BooleanField" name="alive">True</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-unicode.xml b/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-unicode.xml
deleted file mode 100644
index 5652aa1..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-unicode.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="1" model="admin_views.book">
- <field type="CharField" name="name">Lærdommer</field>
- </object>
- <object pk="1" model="admin_views.promo">
- <field type="CharField" name="name">&lt;Promo for Lærdommer&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="1" model="admin_views.chapter">
- <field type="CharField" name="title">Norske bostaver æøå skaper problemer</field>
- <field type="TextField" name="content">&lt;p&gt;Svært frustrerende med UnicodeDecodeErro&lt;/p&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.chapter">
- <field type="CharField" name="title">Kjærlighet</field>
- <field type="TextField" name="content">&lt;p&gt;La kjærligheten til de lidende seire.&lt;/p&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="3" model="admin_views.chapter">
- <field type="CharField" name="title">Kjærlighet</field>
- <field type="TextField" name="content">&lt;p&gt;Noe innhold&lt;/p&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="1" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">&lt;Xtra(1) Norske bostaver æøå skaper problemer&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">&lt;Xtra(1) Kjærlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">2</field>
- </object>
- <object pk="3" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">&lt;Xtra(1) Kjærlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">3</field>
- </object>
- <object pk="1" model="admin_views.chapterxtra2">
- <field type="CharField" name="xtra">&lt;Xtra(2) Norske bostaver æøå skaper problemer&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.chapterxtra2">
- <field type="CharField" name="xtra">&lt;Xtra(2) Kjærlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">2</field>
- </object>
- <object pk="3" model="admin_views.chapterxtra2">
- <field type="CharField" name="xtra">&lt;Xtra(2) Kjærlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">3</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-users.xml b/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-users.xml
deleted file mode 100644
index f1ff296..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/admin-views-users.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="101" model="auth.user">
- <field type="CharField" name="username">adduser</field>
- <field type="CharField" name="first_name">Add</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">auser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="102" model="auth.user">
- <field type="CharField" name="username">changeuser</field>
- <field type="CharField" name="first_name">Change</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">cuser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="103" model="auth.user">
- <field type="CharField" name="username">deleteuser</field>
- <field type="CharField" name="first_name">Delete</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">duser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="104" model="auth.user">
- <field type="CharField" name="username">joepublic</field>
- <field type="CharField" name="first_name">Joe</field>
- <field type="CharField" name="last_name">Public</field>
- <field type="CharField" name="email">joepublic@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">False</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="1" model="admin_views.section">
- <field type="CharField" name="name">Test section</field>
- </object>
- <object pk="1" model="admin_views.article">
- <field type="TextField" name="content">&lt;p&gt;Middle content&lt;/p&gt;</field>
- <field type="DateTimeField" name="date">2008-03-18 11:54:58</field>
- <field to="admin_views.section" name="section" rel="ManyToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.article">
- <field type="TextField" name="content">&lt;p&gt;Oldest content&lt;/p&gt;</field>
- <field type="DateTimeField" name="date">2000-03-18 11:54:58</field>
- <field to="admin_views.section" name="section" rel="ManyToOneRel">1</field>
- </object>
- <object pk="3" model="admin_views.article">
- <field type="TextField" name="content">&lt;p&gt;Newest content&lt;/p&gt;</field>
- <field type="DateTimeField" name="date">2009-03-18 11:54:58</field>
- <field to="admin_views.section" name="section" rel="ManyToOneRel">1</field>
- </object>
-
-
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/deleted-objects.xml b/parts/django/tests/regressiontests/admin_views/fixtures/deleted-objects.xml
deleted file mode 100644
index 92e43db..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/deleted-objects.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.villain">
- <field type="CharField" name="name">Adam</field>
- </object>
- <object pk="2" model="admin_views.villain">
- <field type="CharField" name="name">Sue</field>
- </object>
- <object pk="3" model="admin_views.villain">
- <field type="CharField" name="name">Bob</field>
- </object>
- <object pk="3" model="admin_views.supervillain">
- </object>
- <object pk="1" model="admin_views.plot">
- <field type="CharField" name="name">World Domination</field>
- <field type="ForeignKey" name="team_leader">1</field>
- <field type="ForeignKey" name="contact">2</field>
- </object>
- <object pk="2" model="admin_views.plot">
- <field type="CharField" name="name">World Peace</field>
- <field type="ForeignKey" name="team_leader">2</field>
- <field type="ForeignKey" name="contact">2</field>
- </object>
- <object pk="1" model="admin_views.plotdetails">
- <field type="CharField" name="details">almost finished</field>
- <field type="ForeignKey" name="plot">1</field>
- </object>
- <object pk="1" model="admin_views.secrethideout">
- <field type="CharField" name="location">underground bunker</field>
- <field type="ForeignKey" name="villain">1</field>
- </object>
- <object pk="2" model="admin_views.secrethideout">
- <field type="CharField" name="location">floating castle</field>
- <field type="ForeignKey" name="villain">3</field>
- </object>
- <object pk="1" model="admin_views.supersecrethideout">
- <field type="CharField" name="location">super floating castle!</field>
- <field type="ForeignKey" name="supervillain">3</field>
- </object>
- <object pk="1" model="admin_views.cyclicone">
- <field type="CharField" name="name">I am recursive</field>
- <field type="ForeignKey" name="two">1</field>
- </object>
- <object pk="1" model="admin_views.cyclictwo">
- <field type="CharField" name="name">I am recursive too</field>
- <field type="ForeignKey" name="one">1</field>
- </object>
- <object pk="3" model="admin_views.plot">
- <field type="CharField" name="name">Corn Conspiracy</field>
- <field type="ForeignKey" name="team_leader">1</field>
- <field type="ForeignKey" name="contact">1</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/multiple-child-classes.json b/parts/django/tests/regressiontests/admin_views/fixtures/multiple-child-classes.json
deleted file mode 100644
index 5cadf4c..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/multiple-child-classes.json
+++ /dev/null
@@ -1,107 +0,0 @@
-[
- {
- "pk": 1,
- "model": "admin_views.title",
- "fields":
- {
- }
- },
-
- {
- "pk": 2,
- "model": "admin_views.title",
- "fields":
- {
- }
- },
-
- {
- "pk": 3,
- "model": "admin_views.title",
- "fields":
- {
- }
- },
-
- {
- "pk": 4,
- "model": "admin_views.title",
- "fields":
- {
- }
- },
-
- {
- "pk": 1,
- "model": "admin_views.titletranslation",
- "fields":
- {
- "text": "Bar",
- "title": 1
- }
- },
-
- {
- "pk": 2,
- "model": "admin_views.titletranslation",
- "fields":
- {
- "text": "Foo",
- "title": 2
- }
- },
-
- {
- "pk": 3,
- "model": "admin_views.titletranslation",
- "fields":
- {
- "text": "Few",
- "title": 3
- }
- },
-
- {
- "pk": 4,
- "model": "admin_views.titletranslation",
- "fields":
- {
- "text": "Bas",
- "title": 4
- }
- },
-
- {
- "pk": 1,
- "model": "admin_views.recommender",
- "fields":
- {
- }
- },
-
- {
- "pk": 4,
- "model": "admin_views.recommender",
- "fields":
- {
- }
- },
-
- {
- "pk": 2,
- "model": "admin_views.recommendation",
- "fields":
- {
- "recommender": 1
- }
- },
-
- {
- "pk": 3,
- "model": "admin_views.recommendation",
- "fields":
- {
- "recommender": 4
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_views/fixtures/string-primary-key.xml b/parts/django/tests/regressiontests/admin_views/fixtures/string-primary-key.xml
deleted file mode 100644
index 8e1dbf0..0000000
--- a/parts/django/tests/regressiontests/admin_views/fixtures/string-primary-key.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.modelwithstringprimarykey">
- <field type="CharField" name="id"><![CDATA[abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`]]></field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_views/models.py b/parts/django/tests/regressiontests/admin_views/models.py
deleted file mode 100644
index 191b4f3..0000000
--- a/parts/django/tests/regressiontests/admin_views/models.py
+++ /dev/null
@@ -1,636 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-import tempfile
-import os
-
-from django.contrib import admin
-from django.core.files.storage import FileSystemStorage
-from django.contrib.admin.views.main import ChangeList
-from django.core.mail import EmailMessage
-from django.db import models
-from django import forms
-from django.forms.models import BaseModelFormSet
-from django.contrib.auth.models import User
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-
-class Section(models.Model):
- """
- A simple section that links to articles, to test linking to related items
- in admin views.
- """
- name = models.CharField(max_length=100)
-
-class Article(models.Model):
- """
- A simple article to test admin views. Test backwards compatibility.
- """
- title = models.CharField(max_length=100)
- content = models.TextField()
- date = models.DateTimeField()
- section = models.ForeignKey(Section, null=True, blank=True)
-
- def __unicode__(self):
- return self.title
-
- def model_year(self):
- return self.date.year
- model_year.admin_order_field = 'date'
- model_year.short_description = ''
-
-class Book(models.Model):
- """
- A simple book that has chapters.
- """
- name = models.CharField(max_length=100, verbose_name=u'¿Name?')
-
- def __unicode__(self):
- return self.name
-
-class Promo(models.Model):
- name = models.CharField(max_length=100, verbose_name=u'¿Name?')
- book = models.ForeignKey(Book)
-
- def __unicode__(self):
- return self.name
-
-class Chapter(models.Model):
- title = models.CharField(max_length=100, verbose_name=u'¿Title?')
- content = models.TextField()
- book = models.ForeignKey(Book)
-
- def __unicode__(self):
- return self.title
-
- class Meta:
- # Use a utf-8 bytestring to ensure it works (see #11710)
- verbose_name = '¿Chapter?'
-
-class ChapterXtra1(models.Model):
- chap = models.OneToOneField(Chapter, verbose_name=u'¿Chap?')
- xtra = models.CharField(max_length=100, verbose_name=u'¿Xtra?')
-
- def __unicode__(self):
- return u'¿Xtra1: %s' % self.xtra
-
-class ChapterXtra2(models.Model):
- chap = models.OneToOneField(Chapter, verbose_name=u'¿Chap?')
- xtra = models.CharField(max_length=100, verbose_name=u'¿Xtra?')
-
- def __unicode__(self):
- return u'¿Xtra2: %s' % self.xtra
-
-def callable_year(dt_value):
- return dt_value.year
-callable_year.admin_order_field = 'date'
-
-class ArticleInline(admin.TabularInline):
- model = Article
-
-class ChapterInline(admin.TabularInline):
- model = Chapter
-
-class ArticleAdmin(admin.ModelAdmin):
- list_display = ('content', 'date', callable_year, 'model_year', 'modeladmin_year')
- list_filter = ('date', 'section')
-
- def changelist_view(self, request):
- "Test that extra_context works"
- return super(ArticleAdmin, self).changelist_view(
- request, extra_context={
- 'extra_var': 'Hello!'
- }
- )
-
- def modeladmin_year(self, obj):
- return obj.date.year
- modeladmin_year.admin_order_field = 'date'
- modeladmin_year.short_description = None
-
-class CustomArticle(models.Model):
- content = models.TextField()
- date = models.DateTimeField()
-
-class CustomArticleAdmin(admin.ModelAdmin):
- """
- Tests various hooks for using custom templates and contexts.
- """
- change_list_template = 'custom_admin/change_list.html'
- change_form_template = 'custom_admin/change_form.html'
- add_form_template = 'custom_admin/add_form.html'
- object_history_template = 'custom_admin/object_history.html'
- delete_confirmation_template = 'custom_admin/delete_confirmation.html'
- delete_selected_confirmation_template = 'custom_admin/delete_selected_confirmation.html'
-
- def changelist_view(self, request):
- "Test that extra_context works"
- return super(CustomArticleAdmin, self).changelist_view(
- request, extra_context={
- 'extra_var': 'Hello!'
- }
- )
-
-class ModelWithStringPrimaryKey(models.Model):
- id = models.CharField(max_length=255, primary_key=True)
-
- def __unicode__(self):
- return self.id
-
-class Color(models.Model):
- value = models.CharField(max_length=10)
- warm = models.BooleanField()
- def __unicode__(self):
- return self.value
-
-class Thing(models.Model):
- title = models.CharField(max_length=20)
- color = models.ForeignKey(Color, limit_choices_to={'warm': True})
- def __unicode__(self):
- return self.title
-
-class ThingAdmin(admin.ModelAdmin):
- list_filter = ('color',)
-
-class Fabric(models.Model):
- NG_CHOICES = (
- ('Textured', (
- ('x', 'Horizontal'),
- ('y', 'Vertical'),
- )
- ),
- ('plain', 'Smooth'),
- )
- surface = models.CharField(max_length=20, choices=NG_CHOICES)
-
-class FabricAdmin(admin.ModelAdmin):
- list_display = ('surface',)
- list_filter = ('surface',)
-
-class Person(models.Model):
- GENDER_CHOICES = (
- (1, "Male"),
- (2, "Female"),
- )
- name = models.CharField(max_length=100)
- gender = models.IntegerField(choices=GENDER_CHOICES)
- alive = models.BooleanField()
-
- def __unicode__(self):
- return self.name
-
- class Meta:
- ordering = ["id"]
-
-class BasePersonModelFormSet(BaseModelFormSet):
- def clean(self):
- for person_dict in self.cleaned_data:
- person = person_dict.get('id')
- alive = person_dict.get('alive')
- if person and alive and person.name == "Grace Hopper":
- raise forms.ValidationError, "Grace is not a Zombie"
-
-class PersonAdmin(admin.ModelAdmin):
- list_display = ('name', 'gender', 'alive')
- list_editable = ('gender', 'alive')
- list_filter = ('gender',)
- search_fields = (u'name',)
- ordering = ["id"]
- save_as = True
-
- def get_changelist_formset(self, request, **kwargs):
- return super(PersonAdmin, self).get_changelist_formset(request,
- formset=BasePersonModelFormSet, **kwargs)
-
-
-class Persona(models.Model):
- """
- A simple persona associated with accounts, to test inlining of related
- accounts which inherit from a common accounts class.
- """
- name = models.CharField(blank=False, max_length=80)
- def __unicode__(self):
- return self.name
-
-class Account(models.Model):
- """
- A simple, generic account encapsulating the information shared by all
- types of accounts.
- """
- username = models.CharField(blank=False, max_length=80)
- persona = models.ForeignKey(Persona, related_name="accounts")
- servicename = u'generic service'
-
- def __unicode__(self):
- return "%s: %s" % (self.servicename, self.username)
-
-class FooAccount(Account):
- """A service-specific account of type Foo."""
- servicename = u'foo'
-
-class BarAccount(Account):
- """A service-specific account of type Bar."""
- servicename = u'bar'
-
-class FooAccountAdmin(admin.StackedInline):
- model = FooAccount
- extra = 1
-
-class BarAccountAdmin(admin.StackedInline):
- model = BarAccount
- extra = 1
-
-class PersonaAdmin(admin.ModelAdmin):
- inlines = (
- FooAccountAdmin,
- BarAccountAdmin
- )
-
-class Subscriber(models.Model):
- name = models.CharField(blank=False, max_length=80)
- email = models.EmailField(blank=False, max_length=175)
-
- def __unicode__(self):
- return "%s (%s)" % (self.name, self.email)
-
-class SubscriberAdmin(admin.ModelAdmin):
- actions = ['mail_admin']
-
- def mail_admin(self, request, selected):
- EmailMessage(
- 'Greetings from a ModelAdmin action',
- 'This is the test email from a admin action',
- 'from@example.com',
- ['to@example.com']
- ).send()
-
-class ExternalSubscriber(Subscriber):
- pass
-
-class OldSubscriber(Subscriber):
- pass
-
-def external_mail(modeladmin, request, selected):
- EmailMessage(
- 'Greetings from a function action',
- 'This is the test email from a function action',
- 'from@example.com',
- ['to@example.com']
- ).send()
-
-def redirect_to(modeladmin, request, selected):
- from django.http import HttpResponseRedirect
- return HttpResponseRedirect('/some-where-else/')
-
-class ExternalSubscriberAdmin(admin.ModelAdmin):
- actions = [external_mail, redirect_to]
-
-class Media(models.Model):
- name = models.CharField(max_length=60)
-
-class Podcast(Media):
- release_date = models.DateField()
-
-class PodcastAdmin(admin.ModelAdmin):
- list_display = ('name', 'release_date')
- list_editable = ('release_date',)
-
- ordering = ('name',)
-
-class Vodcast(Media):
- media = models.OneToOneField(Media, primary_key=True, parent_link=True)
- released = models.BooleanField(default=False)
-
-class VodcastAdmin(admin.ModelAdmin):
- list_display = ('name', 'released')
- list_editable = ('released',)
-
- ordering = ('name',)
-
-class Parent(models.Model):
- name = models.CharField(max_length=128)
-
-class Child(models.Model):
- parent = models.ForeignKey(Parent, editable=False)
- name = models.CharField(max_length=30, blank=True)
-
-class ChildInline(admin.StackedInline):
- model = Child
-
-class ParentAdmin(admin.ModelAdmin):
- model = Parent
- inlines = [ChildInline]
-
-class EmptyModel(models.Model):
- def __unicode__(self):
- return "Primary key = %s" % self.id
-
-class EmptyModelAdmin(admin.ModelAdmin):
- def queryset(self, request):
- return super(EmptyModelAdmin, self).queryset(request).filter(pk__gt=1)
-
-class OldSubscriberAdmin(admin.ModelAdmin):
- actions = None
-
-temp_storage = FileSystemStorage(tempfile.mkdtemp())
-UPLOAD_TO = os.path.join(temp_storage.location, 'test_upload')
-
-class Gallery(models.Model):
- name = models.CharField(max_length=100)
-
-class Picture(models.Model):
- name = models.CharField(max_length=100)
- image = models.FileField(storage=temp_storage, upload_to='test_upload')
- gallery = models.ForeignKey(Gallery, related_name="pictures")
-
-class PictureInline(admin.TabularInline):
- model = Picture
- extra = 1
-
-class GalleryAdmin(admin.ModelAdmin):
- inlines = [PictureInline]
-
-class PictureAdmin(admin.ModelAdmin):
- pass
-
-class Language(models.Model):
- iso = models.CharField(max_length=5, primary_key=True)
- name = models.CharField(max_length=50)
- english_name = models.CharField(max_length=50)
- shortlist = models.BooleanField(default=False)
-
- class Meta:
- ordering = ('iso',)
-
-class LanguageAdmin(admin.ModelAdmin):
- list_display = ['iso', 'shortlist', 'english_name', 'name']
- list_editable = ['shortlist']
-
-# a base class for Recommender and Recommendation
-class Title(models.Model):
- pass
-
-class TitleTranslation(models.Model):
- title = models.ForeignKey(Title)
- text = models.CharField(max_length=100)
-
-class Recommender(Title):
- pass
-
-class Recommendation(Title):
- recommender = models.ForeignKey(Recommender)
-
-class RecommendationAdmin(admin.ModelAdmin):
- search_fields = ('titletranslation__text', 'recommender__titletranslation__text',)
-
-class Collector(models.Model):
- name = models.CharField(max_length=100)
-
-class Widget(models.Model):
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
-
-class DooHickey(models.Model):
- code = models.CharField(max_length=10, primary_key=True)
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
-
-class Grommet(models.Model):
- code = models.AutoField(primary_key=True)
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
-
-class Whatsit(models.Model):
- index = models.IntegerField(primary_key=True)
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
-
-class Doodad(models.Model):
- name = models.CharField(max_length=100)
-
-class FancyDoodad(Doodad):
- owner = models.ForeignKey(Collector)
- expensive = models.BooleanField(default=True)
-
-class WidgetInline(admin.StackedInline):
- model = Widget
-
-class DooHickeyInline(admin.StackedInline):
- model = DooHickey
-
-class GrommetInline(admin.StackedInline):
- model = Grommet
-
-class WhatsitInline(admin.StackedInline):
- model = Whatsit
-
-class FancyDoodadInline(admin.StackedInline):
- model = FancyDoodad
-
-class Category(models.Model):
- collector = models.ForeignKey(Collector)
- order = models.PositiveIntegerField()
-
- class Meta:
- ordering = ('order',)
-
- def __unicode__(self):
- return u'%s:o%s' % (self.id, self.order)
-
-class CategoryAdmin(admin.ModelAdmin):
- list_display = ('id', 'collector', 'order')
- list_editable = ('order',)
-
-class CategoryInline(admin.StackedInline):
- model = Category
-
-class CollectorAdmin(admin.ModelAdmin):
- inlines = [
- WidgetInline, DooHickeyInline, GrommetInline, WhatsitInline,
- FancyDoodadInline, CategoryInline
- ]
-
-class Link(models.Model):
- posted = models.DateField(
- default=lambda: datetime.date.today() - datetime.timedelta(days=7)
- )
- url = models.URLField()
- post = models.ForeignKey("Post")
-
-
-class LinkInline(admin.TabularInline):
- model = Link
- extra = 1
-
- readonly_fields = ("posted",)
-
-
-class Post(models.Model):
- title = models.CharField(max_length=100)
- content = models.TextField()
- posted = models.DateField(default=datetime.date.today)
- public = models.NullBooleanField()
-
- def awesomeness_level(self):
- return "Very awesome."
-
-class PostAdmin(admin.ModelAdmin):
- list_display = ['title', 'public']
- readonly_fields = ('posted', 'awesomeness_level', 'coolness', 'value', lambda obj: "foo")
-
- inlines = [
- LinkInline
- ]
-
- def coolness(self, instance):
- if instance.pk:
- return "%d amount of cool." % instance.pk
- else:
- return "Unkown coolness."
-
- def value(self, instance):
- return 1000
- value.short_description = 'Value in $US'
-
-class Gadget(models.Model):
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
-class CustomChangeList(ChangeList):
- def get_query_set(self):
- return self.root_query_set.filter(pk=9999) # Does not exist
-
-class GadgetAdmin(admin.ModelAdmin):
- def get_changelist(self, request, **kwargs):
- return CustomChangeList
-
-class Villain(models.Model):
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
-class SuperVillain(Villain):
- pass
-
-class FunkyTag(models.Model):
- "Because we all know there's only one real use case for GFKs."
- name = models.CharField(max_length=25)
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey('content_type', 'object_id')
-
- def __unicode__(self):
- return self.name
-
-class Plot(models.Model):
- name = models.CharField(max_length=100)
- team_leader = models.ForeignKey(Villain, related_name='lead_plots')
- contact = models.ForeignKey(Villain, related_name='contact_plots')
- tags = generic.GenericRelation(FunkyTag)
-
- def __unicode__(self):
- return self.name
-
-class PlotDetails(models.Model):
- details = models.CharField(max_length=100)
- plot = models.OneToOneField(Plot)
-
- def __unicode__(self):
- return self.details
-
-class SecretHideout(models.Model):
- """ Secret! Not registered with the admin! """
- location = models.CharField(max_length=100)
- villain = models.ForeignKey(Villain)
-
- def __unicode__(self):
- return self.location
-
-class SuperSecretHideout(models.Model):
- """ Secret! Not registered with the admin! """
- location = models.CharField(max_length=100)
- supervillain = models.ForeignKey(SuperVillain)
-
- def __unicode__(self):
- return self.location
-
-class CyclicOne(models.Model):
- name = models.CharField(max_length=25)
- two = models.ForeignKey('CyclicTwo')
-
- def __unicode__(self):
- return self.name
-
-class CyclicTwo(models.Model):
- name = models.CharField(max_length=25)
- one = models.ForeignKey(CyclicOne)
-
- def __unicode__(self):
- return self.name
-
-class Topping(models.Model):
- name = models.CharField(max_length=20)
-
-class Pizza(models.Model):
- name = models.CharField(max_length=20)
- toppings = models.ManyToManyField('Topping')
-
-class PizzaAdmin(admin.ModelAdmin):
- readonly_fields = ('toppings',)
-
-class Album(models.Model):
- owner = models.ForeignKey(User)
- title = models.CharField(max_length=30)
-
-class AlbumAdmin(admin.ModelAdmin):
- list_filter = ['title']
-
-admin.site.register(Article, ArticleAdmin)
-admin.site.register(CustomArticle, CustomArticleAdmin)
-admin.site.register(Section, save_as=True, inlines=[ArticleInline])
-admin.site.register(ModelWithStringPrimaryKey)
-admin.site.register(Color)
-admin.site.register(Thing, ThingAdmin)
-admin.site.register(Person, PersonAdmin)
-admin.site.register(Persona, PersonaAdmin)
-admin.site.register(Subscriber, SubscriberAdmin)
-admin.site.register(ExternalSubscriber, ExternalSubscriberAdmin)
-admin.site.register(OldSubscriber, OldSubscriberAdmin)
-admin.site.register(Podcast, PodcastAdmin)
-admin.site.register(Vodcast, VodcastAdmin)
-admin.site.register(Parent, ParentAdmin)
-admin.site.register(EmptyModel, EmptyModelAdmin)
-admin.site.register(Fabric, FabricAdmin)
-admin.site.register(Gallery, GalleryAdmin)
-admin.site.register(Picture, PictureAdmin)
-admin.site.register(Language, LanguageAdmin)
-admin.site.register(Recommendation, RecommendationAdmin)
-admin.site.register(Recommender)
-admin.site.register(Collector, CollectorAdmin)
-admin.site.register(Category, CategoryAdmin)
-admin.site.register(Post, PostAdmin)
-admin.site.register(Gadget, GadgetAdmin)
-admin.site.register(Villain)
-admin.site.register(SuperVillain)
-admin.site.register(Plot)
-admin.site.register(PlotDetails)
-admin.site.register(CyclicOne)
-admin.site.register(CyclicTwo)
-
-# We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2.
-# That way we cover all four cases:
-# related ForeignKey object registered in admin
-# related ForeignKey object not registered in admin
-# related OneToOne object registered in admin
-# related OneToOne object not registered in admin
-# when deleting Book so as exercise all four troublesome (w.r.t escaping
-# and calling force_unicode to avoid problems on Python 2.3) paths through
-# contrib.admin.util's get_deleted_objects function.
-admin.site.register(Book, inlines=[ChapterInline])
-admin.site.register(Promo)
-admin.site.register(ChapterXtra1)
-admin.site.register(Pizza, PizzaAdmin)
-admin.site.register(Topping)
-admin.site.register(Album, AlbumAdmin)
diff --git a/parts/django/tests/regressiontests/admin_views/tests.py b/parts/django/tests/regressiontests/admin_views/tests.py
deleted file mode 100644
index d3467dd..0000000
--- a/parts/django/tests/regressiontests/admin_views/tests.py
+++ /dev/null
@@ -1,2287 +0,0 @@
-# coding: utf-8
-
-import re
-import datetime
-
-from django.conf import settings
-from django.core.exceptions import SuspiciousOperation
-from django.core.files import temp as tempfile
-# Register auth models with the admin.
-from django.contrib.auth import REDIRECT_FIELD_NAME, admin
-from django.contrib.auth.models import User, Permission, UNUSABLE_PASSWORD
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.admin.models import LogEntry, DELETION
-from django.contrib.admin.sites import LOGIN_FORM_KEY
-from django.contrib.admin.util import quote
-from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
-from django.forms.util import ErrorList
-from django.test import TestCase
-from django.utils import formats
-from django.utils.cache import get_max_age
-from django.utils.encoding import iri_to_uri
-from django.utils.html import escape
-from django.utils.translation import activate, deactivate
-import django.template.context
-
-# local test models
-from models import Article, BarAccount, CustomArticle, EmptyModel, \
- FooAccount, Gallery, ModelWithStringPrimaryKey, \
- Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast, \
- Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit, \
- Category, Post, Plot, FunkyTag
-
-
-class AdminViewBasicTest(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml']
-
- # Store the bit of the URL where the admin is registered as a class
- # variable. That way we can test a second AdminSite just by subclassing
- # this test case and changing urlbit.
- urlbit = 'admin'
-
- def setUp(self):
- self.old_language_code = settings.LANGUAGE_CODE
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- settings.LANGUAGE_CODE = self.old_language_code
- self.client.logout()
-
- def testTrailingSlashRequired(self):
- """
- If you leave off the trailing slash, app should redirect and add it.
- """
- request = self.client.get('/test_admin/%s/admin_views/article/add' % self.urlbit)
- self.assertRedirects(request,
- '/test_admin/%s/admin_views/article/add/' % self.urlbit, status_code=301
- )
-
- def testBasicAddGet(self):
- """
- A smoke test to ensure GET on the add_view works.
- """
- response = self.client.get('/test_admin/%s/admin_views/section/add/' % self.urlbit)
- self.assertEqual(response.status_code, 200)
-
- def testAddWithGETArgs(self):
- response = self.client.get('/test_admin/%s/admin_views/section/add/' % self.urlbit, {'name': 'My Section'})
- self.assertEqual(response.status_code, 200)
- self.assertTrue(
- 'value="My Section"' in response.content,
- "Couldn't find an input with the right value in the response."
- )
-
- def testBasicEditGet(self):
- """
- A smoke test to ensure GET on the change_view works.
- """
- response = self.client.get('/test_admin/%s/admin_views/section/1/' % self.urlbit)
- self.assertEqual(response.status_code, 200)
-
- def testBasicEditGetStringPK(self):
- """
- A smoke test to ensure GET on the change_view works (returns an HTTP
- 404 error, see #11191) when passing a string as the PK argument for a
- model with an integer PK field.
- """
- response = self.client.get('/test_admin/%s/admin_views/section/abc/' % self.urlbit)
- self.assertEqual(response.status_code, 404)
-
- def testBasicAddPost(self):
- """
- A smoke test to ensure POST on add_view works.
- """
- post_data = {
- "name": u"Another Section",
- # inline data
- "article_set-TOTAL_FORMS": u"3",
- "article_set-INITIAL_FORMS": u"0",
- "article_set-MAX_NUM_FORMS": u"0",
- }
- response = self.client.post('/test_admin/%s/admin_views/section/add/' % self.urlbit, post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
-
- # Post data for edit inline
- inline_post_data = {
- "name": u"Test section",
- # inline data
- "article_set-TOTAL_FORMS": u"6",
- "article_set-INITIAL_FORMS": u"3",
- "article_set-MAX_NUM_FORMS": u"0",
- "article_set-0-id": u"1",
- # there is no title in database, give one here or formset will fail.
- "article_set-0-title": u"Norske bostaver æøå skaper problemer",
- "article_set-0-content": u"&lt;p&gt;Middle content&lt;/p&gt;",
- "article_set-0-date_0": u"2008-03-18",
- "article_set-0-date_1": u"11:54:58",
- "article_set-0-section": u"1",
- "article_set-1-id": u"2",
- "article_set-1-title": u"Need a title.",
- "article_set-1-content": u"&lt;p&gt;Oldest content&lt;/p&gt;",
- "article_set-1-date_0": u"2000-03-18",
- "article_set-1-date_1": u"11:54:58",
- "article_set-2-id": u"3",
- "article_set-2-title": u"Need a title.",
- "article_set-2-content": u"&lt;p&gt;Newest content&lt;/p&gt;",
- "article_set-2-date_0": u"2009-03-18",
- "article_set-2-date_1": u"11:54:58",
- "article_set-3-id": u"",
- "article_set-3-title": u"",
- "article_set-3-content": u"",
- "article_set-3-date_0": u"",
- "article_set-3-date_1": u"",
- "article_set-4-id": u"",
- "article_set-4-title": u"",
- "article_set-4-content": u"",
- "article_set-4-date_0": u"",
- "article_set-4-date_1": u"",
- "article_set-5-id": u"",
- "article_set-5-title": u"",
- "article_set-5-content": u"",
- "article_set-5-date_0": u"",
- "article_set-5-date_1": u"",
- }
-
- def testBasicEditPost(self):
- """
- A smoke test to ensure POST on edit_view works.
- """
- response = self.client.post('/test_admin/%s/admin_views/section/1/' % self.urlbit, self.inline_post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
-
- def testEditSaveAs(self):
- """
- Test "save as".
- """
- post_data = self.inline_post_data.copy()
- post_data.update({
- '_saveasnew': u'Save+as+new',
- "article_set-1-section": u"1",
- "article_set-2-section": u"1",
- "article_set-3-section": u"1",
- "article_set-4-section": u"1",
- "article_set-5-section": u"1",
- })
- response = self.client.post('/test_admin/%s/admin_views/section/1/' % self.urlbit, post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
-
- def testChangeListSortingCallable(self):
- """
- Ensure we can sort on a list_display field that is a callable
- (column 2 is callable_year in ArticleAdmin)
- """
- response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit, {'ot': 'asc', 'o': 2})
- self.assertEqual(response.status_code, 200)
- self.assertTrue(
- response.content.index('Oldest content') < response.content.index('Middle content') and
- response.content.index('Middle content') < response.content.index('Newest content'),
- "Results of sorting on callable are out of order."
- )
-
- def testChangeListSortingModel(self):
- """
- Ensure we can sort on a list_display field that is a Model method
- (colunn 3 is 'model_year' in ArticleAdmin)
- """
- response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit, {'ot': 'dsc', 'o': 3})
- self.assertEqual(response.status_code, 200)
- self.assertTrue(
- response.content.index('Newest content') < response.content.index('Middle content') and
- response.content.index('Middle content') < response.content.index('Oldest content'),
- "Results of sorting on Model method are out of order."
- )
-
- def testChangeListSortingModelAdmin(self):
- """
- Ensure we can sort on a list_display field that is a ModelAdmin method
- (colunn 4 is 'modeladmin_year' in ArticleAdmin)
- """
- response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit, {'ot': 'asc', 'o': 4})
- self.assertEqual(response.status_code, 200)
- self.assertTrue(
- response.content.index('Oldest content') < response.content.index('Middle content') and
- response.content.index('Middle content') < response.content.index('Newest content'),
- "Results of sorting on ModelAdmin method are out of order."
- )
-
- def testLimitedFilter(self):
- """Ensure admin changelist filters do not contain objects excluded via limit_choices_to."""
- response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit)
- self.assertEqual(response.status_code, 200)
- self.assertTrue(
- '<div id="changelist-filter">' in response.content,
- "Expected filter not found in changelist view."
- )
- self.assertFalse(
- '<a href="?color__id__exact=3">Blue</a>' in response.content,
- "Changelist filter not correctly limited by limit_choices_to."
- )
-
- def testIncorrectLookupParameters(self):
- """Ensure incorrect lookup parameters are handled gracefully."""
- response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'notarealfield': '5'})
- self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit)
- response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'color__id__exact': 'StringNotInteger!'})
- self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit)
-
- def testIsNullLookups(self):
- """Ensure is_null is handled correctly."""
- Article.objects.create(title="I Could Go Anywhere", content="Versatile", date=datetime.datetime.now())
- response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit)
- self.assertTrue('4 articles' in response.content, '"4 articles" missing from response')
- response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit, {'section__isnull': 'false'})
- self.assertTrue('3 articles' in response.content, '"3 articles" missing from response')
- response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit, {'section__isnull': 'true'})
- self.assertTrue('1 article' in response.content, '"1 article" missing from response')
-
- def testLogoutAndPasswordChangeURLs(self):
- response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit)
- self.assertFalse('<a href="/test_admin/%s/logout/">' % self.urlbit not in response.content)
- self.assertFalse('<a href="/test_admin/%s/password_change/">' % self.urlbit not in response.content)
-
- def testNamedGroupFieldChoicesChangeList(self):
- """
- Ensures the admin changelist shows correct values in the relevant column
- for rows corresponding to instances of a model in which a named group
- has been used in the choices option of a field.
- """
- response = self.client.get('/test_admin/%s/admin_views/fabric/' % self.urlbit)
- self.assertEqual(response.status_code, 200)
- self.assertTrue(
- '<a href="1/">Horizontal</a>' in response.content and
- '<a href="2/">Vertical</a>' in response.content,
- "Changelist table isn't showing the right human-readable values set by a model field 'choices' option named group."
- )
-
- def testNamedGroupFieldChoicesFilter(self):
- """
- Ensures the filter UI shows correctly when at least one named group has
- been used in the choices option of a model field.
- """
- response = self.client.get('/test_admin/%s/admin_views/fabric/' % self.urlbit)
- self.assertEqual(response.status_code, 200)
- self.assertTrue(
- '<div id="changelist-filter">' in response.content,
- "Expected filter not found in changelist view."
- )
- self.assertTrue(
- '<a href="?surface__exact=x">Horizontal</a>' in response.content and
- '<a href="?surface__exact=y">Vertical</a>' in response.content,
- "Changelist filter isn't showing options contained inside a model field 'choices' option named group."
- )
-
- def testChangeListNullBooleanDisplay(self):
- Post.objects.create(public=None)
- # This hard-codes the URl because it'll fail if it runs
- # against the 'admin2' custom admin (which doesn't have the
- # Post model).
- response = self.client.get("/test_admin/admin/admin_views/post/")
- self.assertTrue('icon-unknown.gif' in response.content)
-
- def testI18NLanguageNonEnglishDefault(self):
- """
- Check if the Javascript i18n view returns an empty language catalog
- if the default language is non-English but the selected language
- is English. See #13388 and #3594 for more details.
- """
- settings.LANGUAGE_CODE = 'fr'
- activate('en-us')
- response = self.client.get('/test_admin/admin/jsi18n/')
- self.assertNotContains(response, 'Choisir une heure')
- deactivate()
-
- def testI18NLanguageNonEnglishFallback(self):
- """
- Makes sure that the fallback language is still working properly
- in cases where the selected language cannot be found.
- """
- settings.LANGUAGE_CODE = 'fr'
- activate('none')
- response = self.client.get('/test_admin/admin/jsi18n/')
- self.assertContains(response, 'Choisir une heure')
- deactivate()
-
- def test_disallowed_filtering(self):
- self.assertRaises(SuspiciousOperation,
- self.client.get, "/test_admin/admin/admin_views/album/?owner__email__startswith=fuzzy"
- )
-
-class SaveAsTests(TestCase):
- fixtures = ['admin-views-users.xml','admin-views-person.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_save_as_duplication(self):
- """Ensure save as actually creates a new person"""
- post_data = {'_saveasnew':'', 'name':'John M', 'gender':1}
- response = self.client.post('/test_admin/admin/admin_views/person/1/', post_data)
- self.assertEqual(len(Person.objects.filter(name='John M')), 1)
- self.assertEqual(len(Person.objects.filter(id=1)), 1)
-
- def test_save_as_display(self):
- """
- Ensure that 'save as' is displayed when activated and after submitting
- invalid data aside save_as_new will not show us a form to overwrite the
- initial model.
- """
- response = self.client.get('/test_admin/admin/admin_views/person/1/')
- self.assert_(response.context['save_as'])
- post_data = {'_saveasnew':'', 'name':'John M', 'gender':3, 'alive':'checked'}
- response = self.client.post('/test_admin/admin/admin_views/person/1/', post_data)
- self.assertEqual(response.context['form_url'], '../add/')
-
-class CustomModelAdminTest(AdminViewBasicTest):
- urlbit = "admin2"
-
- def testCustomAdminSiteLoginTemplate(self):
- self.client.logout()
- request = self.client.get('/test_admin/admin2/')
- self.assertTemplateUsed(request, 'custom_admin/login.html')
- self.assert_('Hello from a custom login template' in request.content)
-
- def testCustomAdminSiteLogoutTemplate(self):
- request = self.client.get('/test_admin/admin2/logout/')
- self.assertTemplateUsed(request, 'custom_admin/logout.html')
- self.assert_('Hello from a custom logout template' in request.content)
-
- def testCustomAdminSiteIndexViewAndTemplate(self):
- request = self.client.get('/test_admin/admin2/')
- self.assertTemplateUsed(request, 'custom_admin/index.html')
- self.assert_('Hello from a custom index template *bar*' in request.content)
-
- def testCustomAdminSitePasswordChangeTemplate(self):
- request = self.client.get('/test_admin/admin2/password_change/')
- self.assertTemplateUsed(request, 'custom_admin/password_change_form.html')
- self.assert_('Hello from a custom password change form template' in request.content)
-
- def testCustomAdminSitePasswordChangeDoneTemplate(self):
- request = self.client.get('/test_admin/admin2/password_change/done/')
- self.assertTemplateUsed(request, 'custom_admin/password_change_done.html')
- self.assert_('Hello from a custom password change done template' in request.content)
-
- def testCustomAdminSiteView(self):
- self.client.login(username='super', password='secret')
- response = self.client.get('/test_admin/%s/my_view/' % self.urlbit)
- self.assert_(response.content == "Django is a magical pony!", response.content)
-
-def get_perm(Model, perm):
- """Return the permission object, for the Model"""
- ct = ContentType.objects.get_for_model(Model)
- return Permission.objects.get(content_type=ct, codename=perm)
-
-class AdminViewPermissionsTest(TestCase):
- """Tests for Admin Views Permissions."""
-
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- """Test setup."""
- # Setup permissions, for our users who can add, change, and delete.
- # We can't put this into the fixture, because the content type id
- # and the permission id could be different on each run of the test.
-
- opts = Article._meta
-
- # User who can add Articles
- add_user = User.objects.get(username='adduser')
- add_user.user_permissions.add(get_perm(Article,
- opts.get_add_permission()))
-
- # User who can change Articles
- change_user = User.objects.get(username='changeuser')
- change_user.user_permissions.add(get_perm(Article,
- opts.get_change_permission()))
-
- # User who can delete Articles
- delete_user = User.objects.get(username='deleteuser')
- delete_user.user_permissions.add(get_perm(Article,
- opts.get_delete_permission()))
-
- delete_user.user_permissions.add(get_perm(Section,
- Section._meta.get_delete_permission()))
-
- # login POST dicts
- self.super_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'super',
- 'password': 'secret'}
- self.super_email_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'super@example.com',
- 'password': 'secret'}
- self.super_email_bad_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'super@example.com',
- 'password': 'notsecret'}
- self.adduser_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'adduser',
- 'password': 'secret'}
- self.changeuser_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'changeuser',
- 'password': 'secret'}
- self.deleteuser_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'deleteuser',
- 'password': 'secret'}
- self.joepublic_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'joepublic',
- 'password': 'secret'}
- self.no_username_login = {
- LOGIN_FORM_KEY: 1,
- 'password': 'secret'}
-
- def testLogin(self):
- """
- Make sure only staff members can log in.
-
- Successful posts to the login page will redirect to the orignal url.
- Unsuccessfull attempts will continue to render the login page with
- a 200 status code.
- """
- # Super User
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/', self.super_login)
- self.assertRedirects(login, '/test_admin/admin/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
-
- # Test if user enters e-mail address
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/', self.super_email_login)
- self.assertContains(login, "Your e-mail address is not your username")
- # only correct passwords get a username hint
- login = self.client.post('/test_admin/admin/', self.super_email_bad_login)
- self.assertContains(login, "Please enter a correct username and password")
- new_user = User(username='jondoe', password='secret', email='super@example.com')
- new_user.save()
- # check to ensure if there are multiple e-mail addresses a user doesn't get a 500
- login = self.client.post('/test_admin/admin/', self.super_email_login)
- self.assertContains(login, "Please enter a correct username and password")
-
- # Add User
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/', self.adduser_login)
- self.assertRedirects(login, '/test_admin/admin/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
-
- # Change User
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/', self.changeuser_login)
- self.assertRedirects(login, '/test_admin/admin/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
-
- # Delete User
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/', self.deleteuser_login)
- self.assertRedirects(login, '/test_admin/admin/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
-
- # Regular User should not be able to login.
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/', self.joepublic_login)
- self.assertEqual(login.status_code, 200)
- self.assertContains(login, "Please enter a correct username and password.")
-
- # Requests without username should not return 500 errors.
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/', self.no_username_login)
- self.assertEqual(login.status_code, 200)
- form = login.context[0].get('form')
- self.assert_(login.context[0].get('error_message'))
-
- def testLoginSuccessfullyRedirectsToOriginalUrl(self):
- request = self.client.get('/test_admin/admin/')
- self.assertEqual(request.status_code, 200)
- query_string = 'the-answer=42'
- redirect_url = '/test_admin/admin/?%s' % query_string
- new_next = {REDIRECT_FIELD_NAME: redirect_url}
- login = self.client.post('/test_admin/admin/', dict(self.super_login, **new_next), QUERY_STRING=query_string)
- self.assertRedirects(login, redirect_url)
-
- def testAddView(self):
- """Test add view restricts access and actually adds items."""
-
- add_dict = {'title' : 'Døm ikke',
- 'content': '<p>great article</p>',
- 'date_0': '2008-03-18', 'date_1': '10:54:39',
- 'section': 1}
-
- # Change User should not have access to add articles
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.changeuser_login)
- # make sure the view removes test cookie
- self.assertEqual(self.client.session.test_cookie_worked(), False)
- request = self.client.get('/test_admin/admin/admin_views/article/add/')
- self.assertEqual(request.status_code, 403)
- # Try POST just to make sure
- post = self.client.post('/test_admin/admin/admin_views/article/add/', add_dict)
- self.assertEqual(post.status_code, 403)
- self.assertEqual(Article.objects.all().count(), 3)
- self.client.get('/test_admin/admin/logout/')
-
- # Add user may login and POST to add view, then redirect to admin root
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.adduser_login)
- addpage = self.client.get('/test_admin/admin/admin_views/article/add/')
- self.assertEqual(addpage.status_code, 200)
- change_list_link = '<a href="../">Articles</a> &rsaquo;'
- self.assertFalse(change_list_link in addpage.content,
- 'User restricted to add permission is given link to change list view in breadcrumbs.')
- post = self.client.post('/test_admin/admin/admin_views/article/add/', add_dict)
- self.assertRedirects(post, '/test_admin/admin/')
- self.assertEqual(Article.objects.all().count(), 4)
- self.client.get('/test_admin/admin/logout/')
-
- # Super can add too, but is redirected to the change list view
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.super_login)
- addpage = self.client.get('/test_admin/admin/admin_views/article/add/')
- self.assertEqual(addpage.status_code, 200)
- self.assertFalse(change_list_link not in addpage.content,
- 'Unrestricted user is not given link to change list view in breadcrumbs.')
- post = self.client.post('/test_admin/admin/admin_views/article/add/', add_dict)
- self.assertRedirects(post, '/test_admin/admin/admin_views/article/')
- self.assertEqual(Article.objects.all().count(), 5)
- self.client.get('/test_admin/admin/logout/')
-
- # 8509 - if a normal user is already logged in, it is possible
- # to change user into the superuser without error
- login = self.client.login(username='joepublic', password='secret')
- # Check and make sure that if user expires, data still persists
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.super_login)
- # make sure the view removes test cookie
- self.assertEqual(self.client.session.test_cookie_worked(), False)
-
- def testChangeView(self):
- """Change view should restrict access and allow users to edit items."""
-
- change_dict = {'title' : 'Ikke fordømt',
- 'content': '<p>edited article</p>',
- 'date_0': '2008-03-18', 'date_1': '10:54:39',
- 'section': 1}
-
- # add user shoud not be able to view the list of article or change any of them
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.adduser_login)
- request = self.client.get('/test_admin/admin/admin_views/article/')
- self.assertEqual(request.status_code, 403)
- request = self.client.get('/test_admin/admin/admin_views/article/1/')
- self.assertEqual(request.status_code, 403)
- post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
- self.assertEqual(post.status_code, 403)
- self.client.get('/test_admin/admin/logout/')
-
- # change user can view all items and edit them
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.changeuser_login)
- request = self.client.get('/test_admin/admin/admin_views/article/')
- self.assertEqual(request.status_code, 200)
- request = self.client.get('/test_admin/admin/admin_views/article/1/')
- self.assertEqual(request.status_code, 200)
- post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
- self.assertRedirects(post, '/test_admin/admin/admin_views/article/')
- self.assertEqual(Article.objects.get(pk=1).content, '<p>edited article</p>')
-
- # one error in form should produce singular error message, multiple errors plural
- change_dict['title'] = ''
- post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
- self.assertEqual(request.status_code, 200)
- self.assertTrue('Please correct the error below.' in post.content,
- 'Singular error message not found in response to post with one error.')
- change_dict['content'] = ''
- post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
- self.assertEqual(request.status_code, 200)
- self.assertTrue('Please correct the errors below.' in post.content,
- 'Plural error message not found in response to post with multiple errors.')
- self.client.get('/test_admin/admin/logout/')
-
- def testCustomModelAdminTemplates(self):
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.super_login)
-
- # Test custom change list template with custom extra context
- request = self.client.get('/test_admin/admin/admin_views/customarticle/')
- self.assertEqual(request.status_code, 200)
- self.assert_("var hello = 'Hello!';" in request.content)
- self.assertTemplateUsed(request, 'custom_admin/change_list.html')
-
- # Test custom add form template
- request = self.client.get('/test_admin/admin/admin_views/customarticle/add/')
- self.assertTemplateUsed(request, 'custom_admin/add_form.html')
-
- # Add an article so we can test delete, change, and history views
- post = self.client.post('/test_admin/admin/admin_views/customarticle/add/', {
- 'content': '<p>great article</p>',
- 'date_0': '2008-03-18',
- 'date_1': '10:54:39'
- })
- self.assertRedirects(post, '/test_admin/admin/admin_views/customarticle/')
- self.assertEqual(CustomArticle.objects.all().count(), 1)
-
- # Test custom delete, change, and object history templates
- # Test custom change form template
- request = self.client.get('/test_admin/admin/admin_views/customarticle/1/')
- self.assertTemplateUsed(request, 'custom_admin/change_form.html')
- request = self.client.get('/test_admin/admin/admin_views/customarticle/1/delete/')
- self.assertTemplateUsed(request, 'custom_admin/delete_confirmation.html')
- request = self.client.post('/test_admin/admin/admin_views/customarticle/', data={
- 'index': 0,
- 'action': ['delete_selected'],
- '_selected_action': ['1'],
- })
- self.assertTemplateUsed(request, 'custom_admin/delete_selected_confirmation.html')
- request = self.client.get('/test_admin/admin/admin_views/customarticle/1/history/')
- self.assertTemplateUsed(request, 'custom_admin/object_history.html')
-
- self.client.get('/test_admin/admin/logout/')
-
- def testDeleteView(self):
- """Delete view should restrict access and actually delete items."""
-
- delete_dict = {'post': 'yes'}
-
- # add user shoud not be able to delete articles
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.adduser_login)
- request = self.client.get('/test_admin/admin/admin_views/article/1/delete/')
- self.assertEqual(request.status_code, 403)
- post = self.client.post('/test_admin/admin/admin_views/article/1/delete/', delete_dict)
- self.assertEqual(post.status_code, 403)
- self.assertEqual(Article.objects.all().count(), 3)
- self.client.get('/test_admin/admin/logout/')
-
- # Delete user can delete
- self.client.get('/test_admin/admin/')
- self.client.post('/test_admin/admin/', self.deleteuser_login)
- response = self.client.get('/test_admin/admin/admin_views/section/1/delete/')
- # test response contains link to related Article
- self.assertContains(response, "admin_views/article/1/")
-
- response = self.client.get('/test_admin/admin/admin_views/article/1/delete/')
- self.assertEqual(response.status_code, 200)
- post = self.client.post('/test_admin/admin/admin_views/article/1/delete/', delete_dict)
- self.assertRedirects(post, '/test_admin/admin/')
- self.assertEqual(Article.objects.all().count(), 2)
- article_ct = ContentType.objects.get_for_model(Article)
- logged = LogEntry.objects.get(content_type=article_ct, action_flag=DELETION)
- self.assertEqual(logged.object_id, u'1')
- self.client.get('/test_admin/admin/logout/')
-
- def testDisabledPermissionsWhenLoggedIn(self):
- self.client.login(username='super', password='secret')
- superuser = User.objects.get(username='super')
- superuser.is_active = False
- superuser.save()
-
- response = self.client.get('/test_admin/admin/')
- self.assertContains(response, 'id="login-form"')
- self.assertNotContains(response, 'Log out')
-
- response = self.client.get('/test_admin/admin/secure-view/')
- self.assertContains(response, 'id="login-form"')
-
-
-class AdminViewDeletedObjectsTest(TestCase):
- fixtures = ['admin-views-users.xml', 'deleted-objects.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_nesting(self):
- """
- Objects should be nested to display the relationships that
- cause them to be scheduled for deletion.
- """
- pattern = re.compile(r"""<li>Plot: <a href=".+/admin_views/plot/1/">World Domination</a>\s*<ul>\s*<li>Plot details: <a href=".+/admin_views/plotdetails/1/">almost finished</a>""")
- response = self.client.get('/test_admin/admin/admin_views/villain/%s/delete/' % quote(1))
- self.assertTrue(pattern.search(response.content))
-
- def test_cyclic(self):
- """
- Cyclic relationships should still cause each object to only be
- listed once.
-
- """
- one = """<li>Cyclic one: <a href="/test_admin/admin/admin_views/cyclicone/1/">I am recursive</a>"""
- two = """<li>Cyclic two: <a href="/test_admin/admin/admin_views/cyclictwo/1/">I am recursive too</a>"""
- response = self.client.get('/test_admin/admin/admin_views/cyclicone/%s/delete/' % quote(1))
-
- self.assertContains(response, one, 1)
- self.assertContains(response, two, 1)
-
- def test_perms_needed(self):
- self.client.logout()
- delete_user = User.objects.get(username='deleteuser')
- delete_user.user_permissions.add(get_perm(Plot,
- Plot._meta.get_delete_permission()))
-
- self.assertTrue(self.client.login(username='deleteuser',
- password='secret'))
-
- response = self.client.get('/test_admin/admin/admin_views/plot/%s/delete/' % quote(1))
- self.assertContains(response, "your account doesn't have permission to delete the following types of objects")
- self.assertContains(response, "<li>plot details</li>")
-
-
- def test_not_registered(self):
- should_contain = """<li>Secret hideout: underground bunker"""
- response = self.client.get('/test_admin/admin/admin_views/villain/%s/delete/' % quote(1))
- self.assertContains(response, should_contain, 1)
-
- def test_multiple_fkeys_to_same_model(self):
- """
- If a deleted object has two relationships from another model,
- both of those should be followed in looking for related
- objects to delete.
-
- """
- should_contain = """<li>Plot: <a href="/test_admin/admin/admin_views/plot/1/">World Domination</a>"""
- response = self.client.get('/test_admin/admin/admin_views/villain/%s/delete/' % quote(1))
- self.assertContains(response, should_contain)
- response = self.client.get('/test_admin/admin/admin_views/villain/%s/delete/' % quote(2))
- self.assertContains(response, should_contain)
-
- def test_multiple_fkeys_to_same_instance(self):
- """
- If a deleted object has two relationships pointing to it from
- another object, the other object should still only be listed
- once.
-
- """
- should_contain = """<li>Plot: <a href="/test_admin/admin/admin_views/plot/2/">World Peace</a></li>"""
- response = self.client.get('/test_admin/admin/admin_views/villain/%s/delete/' % quote(2))
- self.assertContains(response, should_contain, 1)
-
- def test_inheritance(self):
- """
- In the case of an inherited model, if either the child or
- parent-model instance is deleted, both instances are listed
- for deletion, as well as any relationships they have.
-
- """
- should_contain = [
- """<li>Villain: <a href="/test_admin/admin/admin_views/villain/3/">Bob</a>""",
- """<li>Super villain: <a href="/test_admin/admin/admin_views/supervillain/3/">Bob</a>""",
- """<li>Secret hideout: floating castle""",
- """<li>Super secret hideout: super floating castle!"""
- ]
- response = self.client.get('/test_admin/admin/admin_views/villain/%s/delete/' % quote(3))
- for should in should_contain:
- self.assertContains(response, should, 1)
- response = self.client.get('/test_admin/admin/admin_views/supervillain/%s/delete/' % quote(3))
- for should in should_contain:
- self.assertContains(response, should, 1)
-
- def test_generic_relations(self):
- """
- If a deleted object has GenericForeignKeys pointing to it,
- those objects should be listed for deletion.
-
- """
- plot = Plot.objects.get(pk=3)
- tag = FunkyTag.objects.create(content_object=plot, name='hott')
- should_contain = """<li>Funky tag: hott"""
- response = self.client.get('/test_admin/admin/admin_views/plot/%s/delete/' % quote(3))
- self.assertContains(response, should_contain)
-
-class AdminViewStringPrimaryKeyTest(TestCase):
- fixtures = ['admin-views-users.xml', 'string-primary-key.xml']
-
- def __init__(self, *args):
- super(AdminViewStringPrimaryKeyTest, self).__init__(*args)
- self.pk = """abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`"""
-
- def setUp(self):
- self.client.login(username='super', password='secret')
- content_type_pk = ContentType.objects.get_for_model(ModelWithStringPrimaryKey).pk
- LogEntry.objects.log_action(100, content_type_pk, self.pk, self.pk, 2, change_message='')
-
- def tearDown(self):
- self.client.logout()
-
- def test_get_history_view(self):
- "Retrieving the history for the object using urlencoded form of primary key should work"
- response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/history/' % quote(self.pk))
- self.assertContains(response, escape(self.pk))
- self.assertEqual(response.status_code, 200)
-
- def test_get_change_view(self):
- "Retrieving the object using urlencoded form of primary key should work"
- response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(self.pk))
- self.assertContains(response, escape(self.pk))
- self.assertEqual(response.status_code, 200)
-
- def test_changelist_to_changeform_link(self):
- "The link from the changelist referring to the changeform of the object should be quoted"
- response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/')
- should_contain = """<th><a href="%s/">%s</a></th></tr>""" % (quote(self.pk), escape(self.pk))
- self.assertContains(response, should_contain)
-
- def test_recentactions_link(self):
- "The link from the recent actions list referring to the changeform of the object should be quoted"
- response = self.client.get('/test_admin/admin/')
- should_contain = """<a href="admin_views/modelwithstringprimarykey/%s/">%s</a>""" % (quote(self.pk), escape(self.pk))
- self.assertContains(response, should_contain)
-
- def test_recentactions_without_content_type(self):
- "If a LogEntry is missing content_type it will not display it in span tag under the hyperlink."
- response = self.client.get('/test_admin/admin/')
- should_contain = """<a href="admin_views/modelwithstringprimarykey/%s/">%s</a>""" % (quote(self.pk), escape(self.pk))
- self.assertContains(response, should_contain)
- should_contain = "Model with string primary key" # capitalized in Recent Actions
- self.assertContains(response, should_contain)
- logentry = LogEntry.objects.get(content_type__name__iexact=should_contain)
- # http://code.djangoproject.com/ticket/10275
- # if the log entry doesn't have a content type it should still be
- # possible to view the Recent Actions part
- logentry.content_type = None
- logentry.save()
-
- counted_presence_before = response.content.count(should_contain)
- response = self.client.get('/test_admin/admin/')
- counted_presence_after = response.content.count(should_contain)
- self.assertEquals(counted_presence_before - 1,
- counted_presence_after)
-
- def test_deleteconfirmation_link(self):
- "The link from the delete confirmation page referring back to the changeform of the object should be quoted"
- response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/delete/' % quote(self.pk))
- # this URL now comes through reverse(), thus iri_to_uri encoding
- should_contain = """/%s/">%s</a>""" % (iri_to_uri(quote(self.pk)), escape(self.pk))
- self.assertContains(response, should_contain)
-
- def test_url_conflicts_with_add(self):
- "A model with a primary key that ends with add should be visible"
- add_model = ModelWithStringPrimaryKey(id="i have something to add")
- add_model.save()
- response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(add_model.pk))
- should_contain = """<h1>Change model with string primary key</h1>"""
- self.assertContains(response, should_contain)
-
- def test_url_conflicts_with_delete(self):
- "A model with a primary key that ends with delete should be visible"
- delete_model = ModelWithStringPrimaryKey(id="delete")
- delete_model.save()
- response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(delete_model.pk))
- should_contain = """<h1>Change model with string primary key</h1>"""
- self.assertContains(response, should_contain)
-
- def test_url_conflicts_with_history(self):
- "A model with a primary key that ends with history should be visible"
- history_model = ModelWithStringPrimaryKey(id="history")
- history_model.save()
- response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(history_model.pk))
- should_contain = """<h1>Change model with string primary key</h1>"""
- self.assertContains(response, should_contain)
-
-
-class SecureViewTest(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- # login POST dicts
- self.super_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'super',
- 'password': 'secret'}
- self.super_email_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'super@example.com',
- 'password': 'secret'}
- self.super_email_bad_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'super@example.com',
- 'password': 'notsecret'}
- self.adduser_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'adduser',
- 'password': 'secret'}
- self.changeuser_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'changeuser',
- 'password': 'secret'}
- self.deleteuser_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'deleteuser',
- 'password': 'secret'}
- self.joepublic_login = {
- LOGIN_FORM_KEY: 1,
- 'username': 'joepublic',
- 'password': 'secret'}
-
- def tearDown(self):
- self.client.logout()
-
- def test_secure_view_shows_login_if_not_logged_in(self):
- "Ensure that we see the login form"
- response = self.client.get('/test_admin/admin/secure-view/' )
- self.assertTemplateUsed(response, 'admin/login.html')
-
- def test_secure_view_login_successfully_redirects_to_original_url(self):
- request = self.client.get('/test_admin/admin/secure-view/')
- self.assertEqual(request.status_code, 200)
- query_string = 'the-answer=42'
- redirect_url = '/test_admin/admin/secure-view/?%s' % query_string
- new_next = {REDIRECT_FIELD_NAME: redirect_url}
- login = self.client.post('/test_admin/admin/secure-view/', dict(self.super_login, **new_next), QUERY_STRING=query_string)
- self.assertRedirects(login, redirect_url)
-
- def test_staff_member_required_decorator_works_as_per_admin_login(self):
- """
- Make sure only staff members can log in.
-
- Successful posts to the login page will redirect to the orignal url.
- Unsuccessfull attempts will continue to render the login page with
- a 200 status code.
- """
- # Super User
- request = self.client.get('/test_admin/admin/secure-view/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/secure-view/', self.super_login)
- self.assertRedirects(login, '/test_admin/admin/secure-view/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
- # make sure the view removes test cookie
- self.assertEqual(self.client.session.test_cookie_worked(), False)
-
- # Test if user enters e-mail address
- request = self.client.get('/test_admin/admin/secure-view/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/secure-view/', self.super_email_login)
- self.assertContains(login, "Your e-mail address is not your username")
- # only correct passwords get a username hint
- login = self.client.post('/test_admin/admin/secure-view/', self.super_email_bad_login)
- self.assertContains(login, "Please enter a correct username and password")
- new_user = User(username='jondoe', password='secret', email='super@example.com')
- new_user.save()
- # check to ensure if there are multiple e-mail addresses a user doesn't get a 500
- login = self.client.post('/test_admin/admin/secure-view/', self.super_email_login)
- self.assertContains(login, "Please enter a correct username and password")
-
- # Add User
- request = self.client.get('/test_admin/admin/secure-view/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/secure-view/', self.adduser_login)
- self.assertRedirects(login, '/test_admin/admin/secure-view/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
-
- # Change User
- request = self.client.get('/test_admin/admin/secure-view/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/secure-view/', self.changeuser_login)
- self.assertRedirects(login, '/test_admin/admin/secure-view/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
-
- # Delete User
- request = self.client.get('/test_admin/admin/secure-view/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/secure-view/', self.deleteuser_login)
- self.assertRedirects(login, '/test_admin/admin/secure-view/')
- self.assertFalse(login.context)
- self.client.get('/test_admin/admin/logout/')
-
- # Regular User should not be able to login.
- request = self.client.get('/test_admin/admin/secure-view/')
- self.assertEqual(request.status_code, 200)
- login = self.client.post('/test_admin/admin/secure-view/', self.joepublic_login)
- self.assertEqual(login.status_code, 200)
- # Login.context is a list of context dicts we just need to check the first one.
- self.assert_(login.context[0].get('error_message'))
-
- # 8509 - if a normal user is already logged in, it is possible
- # to change user into the superuser without error
- login = self.client.login(username='joepublic', password='secret')
- # Check and make sure that if user expires, data still persists
- self.client.get('/test_admin/admin/secure-view/')
- self.client.post('/test_admin/admin/secure-view/', self.super_login)
- # make sure the view removes test cookie
- self.assertEqual(self.client.session.test_cookie_worked(), False)
-
-class AdminViewUnicodeTest(TestCase):
- fixtures = ['admin-views-unicode.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def testUnicodeEdit(self):
- """
- A test to ensure that POST on edit_view handles non-ascii characters.
- """
- post_data = {
- "name": u"Test lærdommer",
- # inline data
- "chapter_set-TOTAL_FORMS": u"6",
- "chapter_set-INITIAL_FORMS": u"3",
- "chapter_set-MAX_NUM_FORMS": u"0",
- "chapter_set-0-id": u"1",
- "chapter_set-0-title": u"Norske bostaver æøå skaper problemer",
- "chapter_set-0-content": u"&lt;p&gt;Svært frustrerende med UnicodeDecodeError&lt;/p&gt;",
- "chapter_set-1-id": u"2",
- "chapter_set-1-title": u"Kjærlighet.",
- "chapter_set-1-content": u"&lt;p&gt;La kjærligheten til de lidende seire.&lt;/p&gt;",
- "chapter_set-2-id": u"3",
- "chapter_set-2-title": u"Need a title.",
- "chapter_set-2-content": u"&lt;p&gt;Newest content&lt;/p&gt;",
- "chapter_set-3-id": u"",
- "chapter_set-3-title": u"",
- "chapter_set-3-content": u"",
- "chapter_set-4-id": u"",
- "chapter_set-4-title": u"",
- "chapter_set-4-content": u"",
- "chapter_set-5-id": u"",
- "chapter_set-5-title": u"",
- "chapter_set-5-content": u"",
- }
-
- response = self.client.post('/test_admin/admin/admin_views/book/1/', post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
-
- def testUnicodeDelete(self):
- """
- Ensure that the delete_view handles non-ascii characters
- """
- delete_dict = {'post': 'yes'}
- response = self.client.get('/test_admin/admin/admin_views/book/1/delete/')
- self.assertEqual(response.status_code, 200)
- response = self.client.post('/test_admin/admin/admin_views/book/1/delete/', delete_dict)
- self.assertRedirects(response, '/test_admin/admin/admin_views/book/')
-
-
-class AdminViewListEditable(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-person.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_inheritance(self):
- Podcast.objects.create(name="This Week in Django",
- release_date=datetime.date.today())
- response = self.client.get('/test_admin/admin/admin_views/podcast/')
- self.assertEqual(response.status_code, 200)
-
- def test_inheritance_2(self):
- Vodcast.objects.create(name="This Week in Django", released=True)
- response = self.client.get('/test_admin/admin/admin_views/vodcast/')
- self.assertEqual(response.status_code, 200)
-
- def test_custom_pk(self):
- Language.objects.create(iso='en', name='English', english_name='English')
- response = self.client.get('/test_admin/admin/admin_views/language/')
- self.assertEqual(response.status_code, 200)
-
- def test_changelist_input_html(self):
- response = self.client.get('/test_admin/admin/admin_views/person/')
- # 2 inputs per object(the field and the hidden id field) = 6
- # 3 management hidden fields = 3
- # 4 action inputs (3 regular checkboxes, 1 checkbox to select all)
- # main form submit button = 1
- # search field and search submit button = 2
- # CSRF field = 1
- # field to track 'select all' across paginated views = 1
- # 6 + 3 + 4 + 1 + 2 + 1 + 1 = 18 inputs
- self.assertEqual(response.content.count("<input"), 18)
- # 1 select per object = 3 selects
- self.assertEqual(response.content.count("<select"), 4)
-
- def test_post_messages(self):
- # Ticket 12707: Saving inline editable should not show admin
- # action warnings
- data = {
- "form-TOTAL_FORMS": "3",
- "form-INITIAL_FORMS": "3",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-gender": "1",
- "form-0-id": "1",
-
- "form-1-gender": "2",
- "form-1-id": "2",
-
- "form-2-alive": "checked",
- "form-2-gender": "1",
- "form-2-id": "3",
-
- "_save": "Save",
- }
- response = self.client.post('/test_admin/admin/admin_views/person/',
- data, follow=True)
- self.assertEqual(len(response.context['messages']), 1)
-
- def test_post_submission(self):
- data = {
- "form-TOTAL_FORMS": "3",
- "form-INITIAL_FORMS": "3",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-gender": "1",
- "form-0-id": "1",
-
- "form-1-gender": "2",
- "form-1-id": "2",
-
- "form-2-alive": "checked",
- "form-2-gender": "1",
- "form-2-id": "3",
-
- "_save": "Save",
- }
- self.client.post('/test_admin/admin/admin_views/person/', data)
-
- self.assertEqual(Person.objects.get(name="John Mauchly").alive, False)
- self.assertEqual(Person.objects.get(name="Grace Hopper").gender, 2)
-
- # test a filtered page
- data = {
- "form-TOTAL_FORMS": "2",
- "form-INITIAL_FORMS": "2",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-id": "1",
- "form-0-gender": "1",
- "form-0-alive": "checked",
-
- "form-1-id": "3",
- "form-1-gender": "1",
- "form-1-alive": "checked",
-
- "_save": "Save",
- }
- self.client.post('/test_admin/admin/admin_views/person/?gender__exact=1', data)
-
- self.assertEqual(Person.objects.get(name="John Mauchly").alive, True)
-
- # test a searched page
- data = {
- "form-TOTAL_FORMS": "1",
- "form-INITIAL_FORMS": "1",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-id": "1",
- "form-0-gender": "1",
-
- "_save": "Save",
- }
- self.client.post('/test_admin/admin/admin_views/person/?q=mauchly', data)
-
- self.assertEqual(Person.objects.get(name="John Mauchly").alive, False)
-
- def test_non_form_errors(self):
- # test if non-form errors are handled; ticket #12716
- data = {
- "form-TOTAL_FORMS": "1",
- "form-INITIAL_FORMS": "1",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-id": "2",
- "form-0-alive": "1",
- "form-0-gender": "2",
-
- # Ensure that the form processing understands this as a list_editable "Save"
- # and not an action "Go".
- "_save": "Save",
- }
- response = self.client.post('/test_admin/admin/admin_views/person/', data)
- self.assertContains(response, "Grace is not a Zombie")
-
- def test_non_form_errors_is_errorlist(self):
- # test if non-form errors are correctly handled; ticket #12878
- data = {
- "form-TOTAL_FORMS": "1",
- "form-INITIAL_FORMS": "1",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-id": "2",
- "form-0-alive": "1",
- "form-0-gender": "2",
-
- "_save": "Save",
- }
- response = self.client.post('/test_admin/admin/admin_views/person/', data)
- non_form_errors = response.context['cl'].formset.non_form_errors()
- self.assert_(isinstance(non_form_errors, ErrorList))
- self.assertEqual(str(non_form_errors), str(ErrorList(["Grace is not a Zombie"])))
-
- def test_list_editable_ordering(self):
- collector = Collector.objects.create(id=1, name="Frederick Clegg")
-
- Category.objects.create(id=1, order=1, collector=collector)
- Category.objects.create(id=2, order=2, collector=collector)
- Category.objects.create(id=3, order=0, collector=collector)
- Category.objects.create(id=4, order=0, collector=collector)
-
- # NB: The order values must be changed so that the items are reordered.
- data = {
- "form-TOTAL_FORMS": "4",
- "form-INITIAL_FORMS": "4",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-order": "14",
- "form-0-id": "1",
- "form-0-collector": "1",
-
- "form-1-order": "13",
- "form-1-id": "2",
- "form-1-collector": "1",
-
- "form-2-order": "1",
- "form-2-id": "3",
- "form-2-collector": "1",
-
- "form-3-order": "0",
- "form-3-id": "4",
- "form-3-collector": "1",
-
- # Ensure that the form processing understands this as a list_editable "Save"
- # and not an action "Go".
- "_save": "Save",
- }
- response = self.client.post('/test_admin/admin/admin_views/category/', data)
- # Successful post will redirect
- self.assertEqual(response.status_code, 302)
-
- # Check that the order values have been applied to the right objects
- self.assertEqual(Category.objects.get(id=1).order, 14)
- self.assertEqual(Category.objects.get(id=2).order, 13)
- self.assertEqual(Category.objects.get(id=3).order, 1)
- self.assertEqual(Category.objects.get(id=4).order, 0)
-
- def test_list_editable_action_submit(self):
- # List editable changes should not be executed if the action "Go" button is
- # used to submit the form.
- data = {
- "form-TOTAL_FORMS": "3",
- "form-INITIAL_FORMS": "3",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-gender": "1",
- "form-0-id": "1",
-
- "form-1-gender": "2",
- "form-1-id": "2",
-
- "form-2-alive": "checked",
- "form-2-gender": "1",
- "form-2-id": "3",
-
- "index": "0",
- "_selected_action": [u'3'],
- "action": [u'', u'delete_selected'],
- }
- self.client.post('/test_admin/admin/admin_views/person/', data)
-
- self.assertEqual(Person.objects.get(name="John Mauchly").alive, True)
- self.assertEqual(Person.objects.get(name="Grace Hopper").gender, 1)
-
- def test_list_editable_action_choices(self):
- # List editable changes should be executed if the "Save" button is
- # used to submit the form - any action choices should be ignored.
- data = {
- "form-TOTAL_FORMS": "3",
- "form-INITIAL_FORMS": "3",
- "form-MAX_NUM_FORMS": "0",
-
- "form-0-gender": "1",
- "form-0-id": "1",
-
- "form-1-gender": "2",
- "form-1-id": "2",
-
- "form-2-alive": "checked",
- "form-2-gender": "1",
- "form-2-id": "3",
-
- "_save": "Save",
- "_selected_action": [u'1'],
- "action": [u'', u'delete_selected'],
- }
- self.client.post('/test_admin/admin/admin_views/person/', data)
-
- self.assertEqual(Person.objects.get(name="John Mauchly").alive, False)
- self.assertEqual(Person.objects.get(name="Grace Hopper").gender, 2)
-
-
-
-
-class AdminSearchTest(TestCase):
- fixtures = ['admin-views-users','multiple-child-classes']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_search_on_sibling_models(self):
- "Check that a search that mentions sibling models"
- response = self.client.get('/test_admin/admin/admin_views/recommendation/?q=bar')
- # confirm the search returned 1 object
- self.assertContains(response, "\n1 recommendation\n")
-
-class AdminInheritedInlinesTest(TestCase):
- fixtures = ['admin-views-users.xml',]
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def testInline(self):
- "Ensure that inline models which inherit from a common parent are correctly handled by admin."
-
- foo_user = u"foo username"
- bar_user = u"bar username"
-
- name_re = re.compile('name="(.*?)"')
-
- # test the add case
- response = self.client.get('/test_admin/admin/admin_views/persona/add/')
- names = name_re.findall(response.content)
- # make sure we have no duplicate HTML names
- self.assertEqual(len(names), len(set(names)))
-
- # test the add case
- post_data = {
- "name": u"Test Name",
- # inline data
- "accounts-TOTAL_FORMS": u"1",
- "accounts-INITIAL_FORMS": u"0",
- "accounts-MAX_NUM_FORMS": u"0",
- "accounts-0-username": foo_user,
- "accounts-2-TOTAL_FORMS": u"1",
- "accounts-2-INITIAL_FORMS": u"0",
- "accounts-2-MAX_NUM_FORMS": u"0",
- "accounts-2-0-username": bar_user,
- }
-
- response = self.client.post('/test_admin/admin/admin_views/persona/add/', post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
- self.assertEqual(Persona.objects.count(), 1)
- self.assertEqual(FooAccount.objects.count(), 1)
- self.assertEqual(BarAccount.objects.count(), 1)
- self.assertEqual(FooAccount.objects.all()[0].username, foo_user)
- self.assertEqual(BarAccount.objects.all()[0].username, bar_user)
- self.assertEqual(Persona.objects.all()[0].accounts.count(), 2)
-
- # test the edit case
-
- response = self.client.get('/test_admin/admin/admin_views/persona/1/')
- names = name_re.findall(response.content)
- # make sure we have no duplicate HTML names
- self.assertEqual(len(names), len(set(names)))
-
- post_data = {
- "name": u"Test Name",
-
- "accounts-TOTAL_FORMS": "2",
- "accounts-INITIAL_FORMS": u"1",
- "accounts-MAX_NUM_FORMS": u"0",
-
- "accounts-0-username": "%s-1" % foo_user,
- "accounts-0-account_ptr": "1",
- "accounts-0-persona": "1",
-
- "accounts-2-TOTAL_FORMS": u"2",
- "accounts-2-INITIAL_FORMS": u"1",
- "accounts-2-MAX_NUM_FORMS": u"0",
-
- "accounts-2-0-username": "%s-1" % bar_user,
- "accounts-2-0-account_ptr": "2",
- "accounts-2-0-persona": "1",
- }
- response = self.client.post('/test_admin/admin/admin_views/persona/1/', post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Persona.objects.count(), 1)
- self.assertEqual(FooAccount.objects.count(), 1)
- self.assertEqual(BarAccount.objects.count(), 1)
- self.assertEqual(FooAccount.objects.all()[0].username, "%s-1" % foo_user)
- self.assertEqual(BarAccount.objects.all()[0].username, "%s-1" % bar_user)
- self.assertEqual(Persona.objects.all()[0].accounts.count(), 2)
-
-from django.core import mail
-
-class AdminActionsTest(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-actions.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_model_admin_custom_action(self):
- "Tests a custom action defined in a ModelAdmin method"
- action_data = {
- ACTION_CHECKBOX_NAME: [1],
- 'action' : 'mail_admin',
- 'index': 0,
- }
- response = self.client.post('/test_admin/admin/admin_views/subscriber/', action_data)
- self.assertEquals(len(mail.outbox), 1)
- self.assertEquals(mail.outbox[0].subject, 'Greetings from a ModelAdmin action')
-
- def test_model_admin_default_delete_action(self):
- "Tests the default delete action defined as a ModelAdmin method"
- action_data = {
- ACTION_CHECKBOX_NAME: [1, 2],
- 'action' : 'delete_selected',
- 'index': 0,
- }
- delete_confirmation_data = {
- ACTION_CHECKBOX_NAME: [1, 2],
- 'action' : 'delete_selected',
- 'post': 'yes',
- }
- confirmation = self.client.post('/test_admin/admin/admin_views/subscriber/', action_data)
- self.assertContains(confirmation, "Are you sure you want to delete the selected subscriber objects")
- self.assertTrue(confirmation.content.count(ACTION_CHECKBOX_NAME) == 2)
- response = self.client.post('/test_admin/admin/admin_views/subscriber/', delete_confirmation_data)
- self.assertEqual(Subscriber.objects.count(), 0)
-
- def test_custom_function_mail_action(self):
- "Tests a custom action defined in a function"
- action_data = {
- ACTION_CHECKBOX_NAME: [1],
- 'action' : 'external_mail',
- 'index': 0,
- }
- response = self.client.post('/test_admin/admin/admin_views/externalsubscriber/', action_data)
- self.assertEquals(len(mail.outbox), 1)
- self.assertEquals(mail.outbox[0].subject, 'Greetings from a function action')
-
- def test_custom_function_action_with_redirect(self):
- "Tests a custom action defined in a function"
- action_data = {
- ACTION_CHECKBOX_NAME: [1],
- 'action' : 'redirect_to',
- 'index': 0,
- }
- response = self.client.post('/test_admin/admin/admin_views/externalsubscriber/', action_data)
- self.assertEqual(response.status_code, 302)
-
- def test_default_redirect(self):
- """
- Test that actions which don't return an HttpResponse are redirected to
- the same page, retaining the querystring (which may contain changelist
- information).
- """
- action_data = {
- ACTION_CHECKBOX_NAME: [1],
- 'action' : 'external_mail',
- 'index': 0,
- }
- url = '/test_admin/admin/admin_views/externalsubscriber/?ot=asc&o=1'
- response = self.client.post(url, action_data)
- self.assertRedirects(response, url)
-
- def test_model_without_action(self):
- "Tests a ModelAdmin without any action"
- response = self.client.get('/test_admin/admin/admin_views/oldsubscriber/')
- self.assertEquals(response.context["action_form"], None)
- self.assert_(
- '<input type="checkbox" class="action-select"' not in response.content,
- "Found an unexpected action toggle checkboxbox in response"
- )
- self.assert_('action-checkbox-column' not in response.content,
- "Found unexpected action-checkbox-column class in response")
-
- def test_model_without_action_still_has_jquery(self):
- "Tests that a ModelAdmin without any actions still gets jQuery included in page"
- response = self.client.get('/test_admin/admin/admin_views/oldsubscriber/')
- self.assertEquals(response.context["action_form"], None)
- self.assert_('jquery.min.js' in response.content,
- "jQuery missing from admin pages for model with no admin actions"
- )
-
- def test_action_column_class(self):
- "Tests that the checkbox column class is present in the response"
- response = self.client.get('/test_admin/admin/admin_views/subscriber/')
- self.assertNotEqual(response.context["action_form"], None)
- self.assert_('action-checkbox-column' in response.content,
- "Expected an action-checkbox-column in response")
-
- def test_multiple_actions_form(self):
- """
- Test that actions come from the form whose submit button was pressed (#10618).
- """
- action_data = {
- ACTION_CHECKBOX_NAME: [1],
- # Two different actions selected on the two forms...
- 'action': ['external_mail', 'delete_selected'],
- # ...but we clicked "go" on the top form.
- 'index': 0
- }
- response = self.client.post('/test_admin/admin/admin_views/externalsubscriber/', action_data)
-
- # Send mail, don't delete.
- self.assertEquals(len(mail.outbox), 1)
- self.assertEquals(mail.outbox[0].subject, 'Greetings from a function action')
-
- def test_user_message_on_none_selected(self):
- """
- User should see a warning when 'Go' is pressed and no items are selected.
- """
- action_data = {
- ACTION_CHECKBOX_NAME: [],
- 'action' : 'delete_selected',
- 'index': 0,
- }
- response = self.client.post('/test_admin/admin/admin_views/subscriber/', action_data)
- msg = """Items must be selected in order to perform actions on them. No items have been changed."""
- self.assertContains(response, msg)
- self.assertEqual(Subscriber.objects.count(), 2)
-
- def test_user_message_on_no_action(self):
- """
- User should see a warning when 'Go' is pressed and no action is selected.
- """
- action_data = {
- ACTION_CHECKBOX_NAME: [1, 2],
- 'action' : '',
- 'index': 0,
- }
- response = self.client.post('/test_admin/admin/admin_views/subscriber/', action_data)
- msg = """No action selected."""
- self.assertContains(response, msg)
- self.assertEqual(Subscriber.objects.count(), 2)
-
- def test_selection_counter(self):
- """
- Check if the selection counter is there.
- """
- response = self.client.get('/test_admin/admin/admin_views/subscriber/')
- self.assertContains(response, '0 of 2 selected')
-
-
-class TestCustomChangeList(TestCase):
- fixtures = ['admin-views-users.xml']
- urlbit = 'admin'
-
- def setUp(self):
- result = self.client.login(username='super', password='secret')
- self.assertEqual(result, True)
-
- def tearDown(self):
- self.client.logout()
-
- def test_custom_changelist(self):
- """
- Validate that a custom ChangeList class can be used (#9749)
- """
- # Insert some data
- post_data = {"name": u"First Gadget"}
- response = self.client.post('/test_admin/%s/admin_views/gadget/add/' % self.urlbit, post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
- # Hit the page once to get messages out of the queue message list
- response = self.client.get('/test_admin/%s/admin_views/gadget/' % self.urlbit)
- # Ensure that that data is still not visible on the page
- response = self.client.get('/test_admin/%s/admin_views/gadget/' % self.urlbit)
- self.assertEqual(response.status_code, 200)
- self.assertNotContains(response, 'First Gadget')
-
-
-class TestInlineNotEditable(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- result = self.client.login(username='super', password='secret')
- self.assertEqual(result, True)
-
- def tearDown(self):
- self.client.logout()
-
- def test(self):
- """
- InlineModelAdmin broken?
- """
- response = self.client.get('/test_admin/admin/admin_views/parent/add/')
- self.assertEqual(response.status_code, 200)
-
-class AdminCustomQuerysetTest(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
- self.pks = [EmptyModel.objects.create().id for i in range(3)]
-
- def test_changelist_view(self):
- response = self.client.get('/test_admin/admin/admin_views/emptymodel/')
- for i in self.pks:
- if i > 1:
- self.assertContains(response, 'Primary key = %s' % i)
- else:
- self.assertNotContains(response, 'Primary key = %s' % i)
-
- def test_change_view(self):
- for i in self.pks:
- response = self.client.get('/test_admin/admin/admin_views/emptymodel/%s/' % i)
- if i > 1:
- self.assertEqual(response.status_code, 200)
- else:
- self.assertEqual(response.status_code, 404)
-
-class AdminInlineFileUploadTest(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-actions.xml']
- urlbit = 'admin'
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- # Set up test Picture and Gallery.
- # These must be set up here instead of in fixtures in order to allow Picture
- # to use a NamedTemporaryFile.
- tdir = tempfile.gettempdir()
- file1 = tempfile.NamedTemporaryFile(suffix=".file1", dir=tdir)
- file1.write('a' * (2 ** 21))
- filename = file1.name
- file1.close()
- g = Gallery(name="Test Gallery")
- g.save()
- p = Picture(name="Test Picture", image=filename, gallery=g)
- p.save()
-
- def tearDown(self):
- self.client.logout()
-
- def test_inline_file_upload_edit_validation_error_post(self):
- """
- Test that inline file uploads correctly display prior data (#10002).
- """
- post_data = {
- "name": u"Test Gallery",
- "pictures-TOTAL_FORMS": u"2",
- "pictures-INITIAL_FORMS": u"1",
- "pictures-MAX_NUM_FORMS": u"0",
- "pictures-0-id": u"1",
- "pictures-0-gallery": u"1",
- "pictures-0-name": "Test Picture",
- "pictures-0-image": "",
- "pictures-1-id": "",
- "pictures-1-gallery": "1",
- "pictures-1-name": "Test Picture 2",
- "pictures-1-image": "",
- }
- response = self.client.post('/test_admin/%s/admin_views/gallery/1/' % self.urlbit, post_data)
- self.assertTrue(response._container[0].find("Currently:") > -1)
-
-
-class AdminInlineTests(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- self.post_data = {
- "name": u"Test Name",
-
- "widget_set-TOTAL_FORMS": "3",
- "widget_set-INITIAL_FORMS": u"0",
- "widget_set-MAX_NUM_FORMS": u"0",
- "widget_set-0-id": "",
- "widget_set-0-owner": "1",
- "widget_set-0-name": "",
- "widget_set-1-id": "",
- "widget_set-1-owner": "1",
- "widget_set-1-name": "",
- "widget_set-2-id": "",
- "widget_set-2-owner": "1",
- "widget_set-2-name": "",
-
- "doohickey_set-TOTAL_FORMS": "3",
- "doohickey_set-INITIAL_FORMS": u"0",
- "doohickey_set-MAX_NUM_FORMS": u"0",
- "doohickey_set-0-owner": "1",
- "doohickey_set-0-code": "",
- "doohickey_set-0-name": "",
- "doohickey_set-1-owner": "1",
- "doohickey_set-1-code": "",
- "doohickey_set-1-name": "",
- "doohickey_set-2-owner": "1",
- "doohickey_set-2-code": "",
- "doohickey_set-2-name": "",
-
- "grommet_set-TOTAL_FORMS": "3",
- "grommet_set-INITIAL_FORMS": u"0",
- "grommet_set-MAX_NUM_FORMS": u"0",
- "grommet_set-0-code": "",
- "grommet_set-0-owner": "1",
- "grommet_set-0-name": "",
- "grommet_set-1-code": "",
- "grommet_set-1-owner": "1",
- "grommet_set-1-name": "",
- "grommet_set-2-code": "",
- "grommet_set-2-owner": "1",
- "grommet_set-2-name": "",
-
- "whatsit_set-TOTAL_FORMS": "3",
- "whatsit_set-INITIAL_FORMS": u"0",
- "whatsit_set-MAX_NUM_FORMS": u"0",
- "whatsit_set-0-owner": "1",
- "whatsit_set-0-index": "",
- "whatsit_set-0-name": "",
- "whatsit_set-1-owner": "1",
- "whatsit_set-1-index": "",
- "whatsit_set-1-name": "",
- "whatsit_set-2-owner": "1",
- "whatsit_set-2-index": "",
- "whatsit_set-2-name": "",
-
- "fancydoodad_set-TOTAL_FORMS": "3",
- "fancydoodad_set-INITIAL_FORMS": u"0",
- "fancydoodad_set-MAX_NUM_FORMS": u"0",
- "fancydoodad_set-0-doodad_ptr": "",
- "fancydoodad_set-0-owner": "1",
- "fancydoodad_set-0-name": "",
- "fancydoodad_set-0-expensive": "on",
- "fancydoodad_set-1-doodad_ptr": "",
- "fancydoodad_set-1-owner": "1",
- "fancydoodad_set-1-name": "",
- "fancydoodad_set-1-expensive": "on",
- "fancydoodad_set-2-doodad_ptr": "",
- "fancydoodad_set-2-owner": "1",
- "fancydoodad_set-2-name": "",
- "fancydoodad_set-2-expensive": "on",
-
- "category_set-TOTAL_FORMS": "3",
- "category_set-INITIAL_FORMS": "0",
- "category_set-MAX_NUM_FORMS": "0",
- "category_set-0-order": "",
- "category_set-0-id": "",
- "category_set-0-collector": "1",
- "category_set-1-order": "",
- "category_set-1-id": "",
- "category_set-1-collector": "1",
- "category_set-2-order": "",
- "category_set-2-id": "",
- "category_set-2-collector": "1",
- }
-
- result = self.client.login(username='super', password='secret')
- self.assertEqual(result, True)
- self.collector = Collector(pk=1,name='John Fowles')
- self.collector.save()
-
- def tearDown(self):
- self.client.logout()
-
- def test_simple_inline(self):
- "A simple model can be saved as inlines"
- # First add a new inline
- self.post_data['widget_set-0-name'] = "Widget 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Widget.objects.count(), 1)
- self.assertEqual(Widget.objects.all()[0].name, "Widget 1")
-
- # Check that the PK link exists on the rendered form
- response = self.client.get('/test_admin/admin/admin_views/collector/1/')
- self.assertContains(response, 'name="widget_set-0-id"')
-
- # Now resave that inline
- self.post_data['widget_set-INITIAL_FORMS'] = "1"
- self.post_data['widget_set-0-id'] = "1"
- self.post_data['widget_set-0-name'] = "Widget 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Widget.objects.count(), 1)
- self.assertEqual(Widget.objects.all()[0].name, "Widget 1")
-
- # Now modify that inline
- self.post_data['widget_set-INITIAL_FORMS'] = "1"
- self.post_data['widget_set-0-id'] = "1"
- self.post_data['widget_set-0-name'] = "Widget 1 Updated"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Widget.objects.count(), 1)
- self.assertEqual(Widget.objects.all()[0].name, "Widget 1 Updated")
-
- def test_explicit_autofield_inline(self):
- "A model with an explicit autofield primary key can be saved as inlines. Regression for #8093"
- # First add a new inline
- self.post_data['grommet_set-0-name'] = "Grommet 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Grommet.objects.count(), 1)
- self.assertEqual(Grommet.objects.all()[0].name, "Grommet 1")
-
- # Check that the PK link exists on the rendered form
- response = self.client.get('/test_admin/admin/admin_views/collector/1/')
- self.assertContains(response, 'name="grommet_set-0-code"')
-
- # Now resave that inline
- self.post_data['grommet_set-INITIAL_FORMS'] = "1"
- self.post_data['grommet_set-0-code'] = "1"
- self.post_data['grommet_set-0-name'] = "Grommet 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Grommet.objects.count(), 1)
- self.assertEqual(Grommet.objects.all()[0].name, "Grommet 1")
-
- # Now modify that inline
- self.post_data['grommet_set-INITIAL_FORMS'] = "1"
- self.post_data['grommet_set-0-code'] = "1"
- self.post_data['grommet_set-0-name'] = "Grommet 1 Updated"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Grommet.objects.count(), 1)
- self.assertEqual(Grommet.objects.all()[0].name, "Grommet 1 Updated")
-
- def test_char_pk_inline(self):
- "A model with a character PK can be saved as inlines. Regression for #10992"
- # First add a new inline
- self.post_data['doohickey_set-0-code'] = "DH1"
- self.post_data['doohickey_set-0-name'] = "Doohickey 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(DooHickey.objects.count(), 1)
- self.assertEqual(DooHickey.objects.all()[0].name, "Doohickey 1")
-
- # Check that the PK link exists on the rendered form
- response = self.client.get('/test_admin/admin/admin_views/collector/1/')
- self.assertContains(response, 'name="doohickey_set-0-code"')
-
- # Now resave that inline
- self.post_data['doohickey_set-INITIAL_FORMS'] = "1"
- self.post_data['doohickey_set-0-code'] = "DH1"
- self.post_data['doohickey_set-0-name'] = "Doohickey 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(DooHickey.objects.count(), 1)
- self.assertEqual(DooHickey.objects.all()[0].name, "Doohickey 1")
-
- # Now modify that inline
- self.post_data['doohickey_set-INITIAL_FORMS'] = "1"
- self.post_data['doohickey_set-0-code'] = "DH1"
- self.post_data['doohickey_set-0-name'] = "Doohickey 1 Updated"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(DooHickey.objects.count(), 1)
- self.assertEqual(DooHickey.objects.all()[0].name, "Doohickey 1 Updated")
-
- def test_integer_pk_inline(self):
- "A model with an integer PK can be saved as inlines. Regression for #10992"
- # First add a new inline
- self.post_data['whatsit_set-0-index'] = "42"
- self.post_data['whatsit_set-0-name'] = "Whatsit 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Whatsit.objects.count(), 1)
- self.assertEqual(Whatsit.objects.all()[0].name, "Whatsit 1")
-
- # Check that the PK link exists on the rendered form
- response = self.client.get('/test_admin/admin/admin_views/collector/1/')
- self.assertContains(response, 'name="whatsit_set-0-index"')
-
- # Now resave that inline
- self.post_data['whatsit_set-INITIAL_FORMS'] = "1"
- self.post_data['whatsit_set-0-index'] = "42"
- self.post_data['whatsit_set-0-name'] = "Whatsit 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Whatsit.objects.count(), 1)
- self.assertEqual(Whatsit.objects.all()[0].name, "Whatsit 1")
-
- # Now modify that inline
- self.post_data['whatsit_set-INITIAL_FORMS'] = "1"
- self.post_data['whatsit_set-0-index'] = "42"
- self.post_data['whatsit_set-0-name'] = "Whatsit 1 Updated"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Whatsit.objects.count(), 1)
- self.assertEqual(Whatsit.objects.all()[0].name, "Whatsit 1 Updated")
-
- def test_inherited_inline(self):
- "An inherited model can be saved as inlines. Regression for #11042"
- # First add a new inline
- self.post_data['fancydoodad_set-0-name'] = "Fancy Doodad 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(FancyDoodad.objects.count(), 1)
- self.assertEqual(FancyDoodad.objects.all()[0].name, "Fancy Doodad 1")
-
- # Check that the PK link exists on the rendered form
- response = self.client.get('/test_admin/admin/admin_views/collector/1/')
- self.assertContains(response, 'name="fancydoodad_set-0-doodad_ptr"')
-
- # Now resave that inline
- self.post_data['fancydoodad_set-INITIAL_FORMS'] = "1"
- self.post_data['fancydoodad_set-0-doodad_ptr'] = "1"
- self.post_data['fancydoodad_set-0-name'] = "Fancy Doodad 1"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(FancyDoodad.objects.count(), 1)
- self.assertEqual(FancyDoodad.objects.all()[0].name, "Fancy Doodad 1")
-
- # Now modify that inline
- self.post_data['fancydoodad_set-INITIAL_FORMS'] = "1"
- self.post_data['fancydoodad_set-0-doodad_ptr'] = "1"
- self.post_data['fancydoodad_set-0-name'] = "Fancy Doodad 1 Updated"
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(FancyDoodad.objects.count(), 1)
- self.assertEqual(FancyDoodad.objects.all()[0].name, "Fancy Doodad 1 Updated")
-
- def test_ordered_inline(self):
- """Check that an inline with an editable ordering fields is
- updated correctly. Regression for #10922"""
- # Create some objects with an initial ordering
- Category.objects.create(id=1, order=1, collector=self.collector)
- Category.objects.create(id=2, order=2, collector=self.collector)
- Category.objects.create(id=3, order=0, collector=self.collector)
- Category.objects.create(id=4, order=0, collector=self.collector)
-
- # NB: The order values must be changed so that the items are reordered.
- self.post_data.update({
- "name": "Frederick Clegg",
-
- "category_set-TOTAL_FORMS": "7",
- "category_set-INITIAL_FORMS": "4",
- "category_set-MAX_NUM_FORMS": "0",
-
- "category_set-0-order": "14",
- "category_set-0-id": "1",
- "category_set-0-collector": "1",
-
- "category_set-1-order": "13",
- "category_set-1-id": "2",
- "category_set-1-collector": "1",
-
- "category_set-2-order": "1",
- "category_set-2-id": "3",
- "category_set-2-collector": "1",
-
- "category_set-3-order": "0",
- "category_set-3-id": "4",
- "category_set-3-collector": "1",
-
- "category_set-4-order": "",
- "category_set-4-id": "",
- "category_set-4-collector": "1",
-
- "category_set-5-order": "",
- "category_set-5-id": "",
- "category_set-5-collector": "1",
-
- "category_set-6-order": "",
- "category_set-6-id": "",
- "category_set-6-collector": "1",
- })
- response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
- # Successful post will redirect
- self.assertEqual(response.status_code, 302)
-
- # Check that the order values have been applied to the right objects
- self.assertEqual(self.collector.category_set.count(), 4)
- self.assertEqual(Category.objects.get(id=1).order, 14)
- self.assertEqual(Category.objects.get(id=2).order, 13)
- self.assertEqual(Category.objects.get(id=3).order, 1)
- self.assertEqual(Category.objects.get(id=4).order, 0)
-
-
-class NeverCacheTests(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def testAdminIndex(self):
- "Check the never-cache status of the main index"
- response = self.client.get('/test_admin/admin/')
- self.assertEqual(get_max_age(response), 0)
-
- def testAppIndex(self):
- "Check the never-cache status of an application index"
- response = self.client.get('/test_admin/admin/admin_views/')
- self.assertEqual(get_max_age(response), 0)
-
- def testModelIndex(self):
- "Check the never-cache status of a model index"
- response = self.client.get('/test_admin/admin/admin_views/fabric/')
- self.assertEqual(get_max_age(response), 0)
-
- def testModelAdd(self):
- "Check the never-cache status of a model add page"
- response = self.client.get('/test_admin/admin/admin_views/fabric/add/')
- self.assertEqual(get_max_age(response), 0)
-
- def testModelView(self):
- "Check the never-cache status of a model edit page"
- response = self.client.get('/test_admin/admin/admin_views/section/1/')
- self.assertEqual(get_max_age(response), 0)
-
- def testModelHistory(self):
- "Check the never-cache status of a model history page"
- response = self.client.get('/test_admin/admin/admin_views/section/1/history/')
- self.assertEqual(get_max_age(response), 0)
-
- def testModelDelete(self):
- "Check the never-cache status of a model delete page"
- response = self.client.get('/test_admin/admin/admin_views/section/1/delete/')
- self.assertEqual(get_max_age(response), 0)
-
- def testLogin(self):
- "Check the never-cache status of login views"
- self.client.logout()
- response = self.client.get('/test_admin/admin/')
- self.assertEqual(get_max_age(response), 0)
-
- def testLogout(self):
- "Check the never-cache status of logout view"
- response = self.client.get('/test_admin/admin/logout/')
- self.assertEqual(get_max_age(response), 0)
-
- def testPasswordChange(self):
- "Check the never-cache status of the password change view"
- self.client.logout()
- response = self.client.get('/test_admin/password_change/')
- self.assertEqual(get_max_age(response), None)
-
- def testPasswordChangeDone(self):
- "Check the never-cache status of the password change done view"
- response = self.client.get('/test_admin/admin/password_change/done/')
- self.assertEqual(get_max_age(response), None)
-
- def testJsi18n(self):
- "Check the never-cache status of the Javascript i18n view"
- response = self.client.get('/test_admin/admin/jsi18n/')
- self.assertEqual(get_max_age(response), None)
-
-
-class ReadonlyTest(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_readonly_get(self):
- response = self.client.get('/test_admin/admin/admin_views/post/add/')
- self.assertEqual(response.status_code, 200)
- self.assertNotContains(response, 'name="posted"')
- # 3 fields + 2 submit buttons + 4 inline management form fields, + 2
- # hidden fields for inlines + 1 field for the inline + 2 empty form
- self.assertEqual(response.content.count("<input"), 14)
- self.assertContains(response, formats.localize(datetime.date.today()))
- self.assertContains(response,
- "<label>Awesomeness level:</label>")
- self.assertContains(response, "Very awesome.")
- self.assertContains(response, "Unkown coolness.")
- self.assertContains(response, "foo")
- self.assertContains(response,
- formats.localize(datetime.date.today() - datetime.timedelta(days=7))
- )
-
- self.assertContains(response, '<div class="form-row coolness">')
- self.assertContains(response, '<div class="form-row awesomeness_level">')
- self.assertContains(response, '<div class="form-row posted">')
- self.assertContains(response, '<div class="form-row value">')
- self.assertContains(response, '<div class="form-row ">')
-
- p = Post.objects.create(title="I worked on readonly_fields", content="Its good stuff")
- response = self.client.get('/test_admin/admin/admin_views/post/%d/' % p.pk)
- self.assertContains(response, "%d amount of cool" % p.pk)
-
- def test_readonly_post(self):
- data = {
- "title": "Django Got Readonly Fields",
- "content": "This is an incredible development.",
- "link_set-TOTAL_FORMS": "1",
- "link_set-INITIAL_FORMS": "0",
- "link_set-MAX_NUM_FORMS": "0",
- }
- response = self.client.post('/test_admin/admin/admin_views/post/add/', data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Post.objects.count(), 1)
- p = Post.objects.get()
- self.assertEqual(p.posted, datetime.date.today())
-
- data["posted"] = "10-8-1990" # some date that's not today
- response = self.client.post('/test_admin/admin/admin_views/post/add/', data)
- self.assertEqual(response.status_code, 302)
- self.assertEqual(Post.objects.count(), 2)
- p = Post.objects.order_by('-id')[0]
- self.assertEqual(p.posted, datetime.date.today())
-
- def test_readonly_manytomany(self):
- "Regression test for #13004"
- response = self.client.get('/test_admin/admin/admin_views/pizza/add/')
- self.assertEqual(response.status_code, 200)
-
-class UserAdminTest(TestCase):
- """
- Tests user CRUD functionality.
- """
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_save_button(self):
- user_count = User.objects.count()
- response = self.client.post('/test_admin/admin/auth/user/add/', {
- 'username': 'newuser',
- 'password1': 'newpassword',
- 'password2': 'newpassword',
- })
- new_user = User.objects.order_by('-id')[0]
- self.assertRedirects(response, '/test_admin/admin/auth/user/%s/' % new_user.pk)
- self.assertEqual(User.objects.count(), user_count + 1)
- self.assertNotEqual(new_user.password, UNUSABLE_PASSWORD)
-
- def test_save_continue_editing_button(self):
- user_count = User.objects.count()
- response = self.client.post('/test_admin/admin/auth/user/add/', {
- 'username': 'newuser',
- 'password1': 'newpassword',
- 'password2': 'newpassword',
- '_continue': '1',
- })
- new_user = User.objects.order_by('-id')[0]
- self.assertRedirects(response, '/test_admin/admin/auth/user/%s/' % new_user.pk)
- self.assertEqual(User.objects.count(), user_count + 1)
- self.assertNotEqual(new_user.password, UNUSABLE_PASSWORD)
-
- def test_password_mismatch(self):
- response = self.client.post('/test_admin/admin/auth/user/add/', {
- 'username': 'newuser',
- 'password1': 'newpassword',
- 'password2': 'mismatch',
- })
- self.assertEqual(response.status_code, 200)
- adminform = response.context['adminform']
- self.assertTrue('password' not in adminform.form.errors)
- self.assertEqual(adminform.form.errors['password2'],
- [u"The two password fields didn't match."])
-
- def test_user_fk_popup(self):
- response = self.client.get('/test_admin/admin/admin_views/album/add/')
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, '/test_admin/admin/auth/user/add')
- self.assertContains(response, 'class="add-another" id="add_id_owner" onclick="return showAddAnotherPopup(this);"')
- response = self.client.get('/test_admin/admin/auth/user/add/?_popup=1')
- self.assertNotContains(response, 'name="_continue"')
- self.assertNotContains(response, 'name="_addanother"')
-
- def test_save_add_another_button(self):
- user_count = User.objects.count()
- response = self.client.post('/test_admin/admin/auth/user/add/', {
- 'username': 'newuser',
- 'password1': 'newpassword',
- 'password2': 'newpassword',
- '_addanother': '1',
- })
- new_user = User.objects.order_by('-id')[0]
- self.assertRedirects(response, '/test_admin/admin/auth/user/add/')
- self.assertEqual(User.objects.count(), user_count + 1)
- self.assertNotEqual(new_user.password, UNUSABLE_PASSWORD)
-
-try:
- # If docutils isn't installed, skip the AdminDocs tests.
- import docutils
-
- class AdminDocsTest(TestCase):
- fixtures = ['admin-views-users.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def test_tags(self):
- response = self.client.get('/test_admin/admin/doc/tags/')
-
- # The builtin tag group exists
- self.assertContains(response, "<h2>Built-in tags</h2>", count=2)
-
- # A builtin tag exists in both the index and detail
- self.assertContains(response, '<h3 id="built_in-autoescape">autoescape</h3>')
- self.assertContains(response, '<li><a href="#built_in-autoescape">autoescape</a></li>')
-
- # An app tag exists in both the index and detail
- self.assertContains(response, '<h3 id="comments-get_comment_count">get_comment_count</h3>')
- self.assertContains(response, '<li><a href="#comments-get_comment_count">get_comment_count</a></li>')
-
- # The admin list tag group exists
- self.assertContains(response, "<h2>admin_list</h2>", count=2)
-
- # An admin list tag exists in both the index and detail
- self.assertContains(response, '<h3 id="admin_list-admin_actions">admin_actions</h3>')
- self.assertContains(response, '<li><a href="#admin_list-admin_actions">admin_actions</a></li>')
-
- def test_filters(self):
- response = self.client.get('/test_admin/admin/doc/filters/')
-
- # The builtin filter group exists
- self.assertContains(response, "<h2>Built-in filters</h2>", count=2)
-
- # A builtin filter exists in both the index and detail
- self.assertContains(response, '<h3 id="built_in-add">add</h3>')
- self.assertContains(response, '<li><a href="#built_in-add">add</a></li>')
-
-except ImportError:
- pass
-
-class ValidXHTMLTests(TestCase):
- fixtures = ['admin-views-users.xml']
- urlbit = 'admin'
-
- def setUp(self):
- self._context_processors = None
- self._use_i18n, settings.USE_I18N = settings.USE_I18N, False
- if 'django.core.context_processors.i18n' in settings.TEMPLATE_CONTEXT_PROCESSORS:
- self._context_processors = settings.TEMPLATE_CONTEXT_PROCESSORS
- cp = list(settings.TEMPLATE_CONTEXT_PROCESSORS)
- cp.remove('django.core.context_processors.i18n')
- settings.TEMPLATE_CONTEXT_PROCESSORS = tuple(cp)
- # Force re-evaluation of the contex processor list
- django.template.context._standard_context_processors = None
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
- if self._context_processors is not None:
- settings.TEMPLATE_CONTEXT_PROCESSORS = self._context_processors
- # Force re-evaluation of the contex processor list
- django.template.context._standard_context_processors = None
- settings.USE_I18N = self._use_i18n
-
- def testLangNamePresent(self):
- response = self.client.get('/test_admin/%s/admin_views/' % self.urlbit)
- self.assertFalse(' lang=""' in response.content)
- self.assertFalse(' xml:lang=""' in response.content)
diff --git a/parts/django/tests/regressiontests/admin_views/urls.py b/parts/django/tests/regressiontests/admin_views/urls.py
deleted file mode 100644
index f3f1fbd..0000000
--- a/parts/django/tests/regressiontests/admin_views/urls.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.conf.urls.defaults import *
-from django.contrib import admin
-import views
-import customadmin
-
-urlpatterns = patterns('',
- (r'^admin/doc/', include('django.contrib.admindocs.urls')),
- (r'^admin/secure-view/$', views.secure_view),
- (r'^admin/', include(admin.site.urls)),
- (r'^admin2/', include(customadmin.site.urls)),
-)
diff --git a/parts/django/tests/regressiontests/admin_views/views.py b/parts/django/tests/regressiontests/admin_views/views.py
deleted file mode 100644
index 732b253..0000000
--- a/parts/django/tests/regressiontests/admin_views/views.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.contrib.admin.views.decorators import staff_member_required
-from django.http import HttpResponse
-
-def secure_view(request):
- return HttpResponse('%s' % request.POST)
-secure_view = staff_member_required(secure_view) \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_widgets/__init__.py b/parts/django/tests/regressiontests/admin_widgets/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml b/parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml
deleted file mode 100644
index b851562..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="101" model="auth.user">
- <field type="CharField" name="username">testser</field>
- <field type="CharField" name="first_name">Add</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">auser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-
- <object pk="1" model="admin_widgets.car">
- <field to="auth.user" name="owner" rel="ManyToOneRel">100</field>
- <field type="CharField" name="make">Volkswagon</field>
- <field type="CharField" name="model">Passat</field>
- </object>
- <object pk="2" model="admin_widgets.car">
- <field to="auth.user" name="owner" rel="ManyToOneRel">101</field>
- <field type="CharField" name="make">BMW</field>
- <field type="CharField" name="model">M3</field>
- </object>
-
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/admin_widgets/models.py b/parts/django/tests/regressiontests/admin_widgets/models.py
deleted file mode 100644
index 450c3e6..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/models.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from django.db import models
-from django.contrib.auth.models import User
-
-class MyFileField(models.FileField):
- pass
-
-class Member(models.Model):
- name = models.CharField(max_length=100)
- birthdate = models.DateTimeField(blank=True, null=True)
- gender = models.CharField(max_length=1, blank=True, choices=[('M','Male'), ('F', 'Female')])
-
- def __unicode__(self):
- return self.name
-
-class Band(models.Model):
- name = models.CharField(max_length=100)
- members = models.ManyToManyField(Member)
-
- def __unicode__(self):
- return self.name
-
-class Album(models.Model):
- band = models.ForeignKey(Band)
- name = models.CharField(max_length=100)
- cover_art = models.FileField(upload_to='albums')
- backside_art = MyFileField(upload_to='albums_back', null=True)
-
- def __unicode__(self):
- return self.name
-
-class HiddenInventoryManager(models.Manager):
- def get_query_set(self):
- return super(HiddenInventoryManager, self).get_query_set().filter(hidden=False)
-
-class Inventory(models.Model):
- barcode = models.PositiveIntegerField(unique=True)
- parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True)
- name = models.CharField(blank=False, max_length=20)
- hidden = models.BooleanField(default=False)
-
- # see #9258
- default_manager = models.Manager()
- objects = HiddenInventoryManager()
-
- def __unicode__(self):
- return self.name
-
-class Event(models.Model):
- band = models.ForeignKey(Band, limit_choices_to=models.Q(pk__gt=0))
- start_date = models.DateField(blank=True, null=True)
- start_time = models.TimeField(blank=True, null=True)
- description = models.TextField(blank=True)
- link = models.URLField(blank=True)
- min_age = models.IntegerField(blank=True, null=True)
-
-class Car(models.Model):
- owner = models.ForeignKey(User)
- make = models.CharField(max_length=30)
- model = models.CharField(max_length=30)
-
- def __unicode__(self):
- return u"%s %s" % (self.make, self.model)
-
-class CarTire(models.Model):
- """
- A single car tire. This to test that a user can only select their own cars.
- """
- car = models.ForeignKey(Car)
diff --git a/parts/django/tests/regressiontests/admin_widgets/tests.py b/parts/django/tests/regressiontests/admin_widgets/tests.py
deleted file mode 100644
index 51d883f..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/tests.py
+++ /dev/null
@@ -1,316 +0,0 @@
-# encoding: utf-8
-
-from datetime import datetime
-from unittest import TestCase
-
-from django import forms
-from django.conf import settings
-from django.contrib import admin
-from django.contrib.admin import widgets
-from django.contrib.admin.widgets import FilteredSelectMultiple, AdminSplitDateTime
-from django.contrib.admin.widgets import (AdminFileWidget, ForeignKeyRawIdWidget,
- ManyToManyRawIdWidget)
-from django.core.files.storage import default_storage
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.db.models import DateField
-from django.test import TestCase as DjangoTestCase
-from django.utils.html import conditional_escape
-from django.utils.translation import activate, deactivate
-
-import models
-
-
-class AdminFormfieldForDBFieldTests(TestCase):
- """
- Tests for correct behavior of ModelAdmin.formfield_for_dbfield
- """
-
- def assertFormfield(self, model, fieldname, widgetclass, **admin_overrides):
- """
- Helper to call formfield_for_dbfield for a given model and field name
- and verify that the returned formfield is appropriate.
- """
- # Override any settings on the model admin
- class MyModelAdmin(admin.ModelAdmin): pass
- for k in admin_overrides:
- setattr(MyModelAdmin, k, admin_overrides[k])
-
- # Construct the admin, and ask it for a formfield
- ma = MyModelAdmin(model, admin.site)
- ff = ma.formfield_for_dbfield(model._meta.get_field(fieldname), request=None)
-
- # "unwrap" the widget wrapper, if needed
- if isinstance(ff.widget, widgets.RelatedFieldWidgetWrapper):
- widget = ff.widget.widget
- else:
- widget = ff.widget
-
- # Check that we got a field of the right type
- self.assert_(
- isinstance(widget, widgetclass),
- "Wrong widget for %s.%s: expected %s, got %s" % \
- (model.__class__.__name__, fieldname, widgetclass, type(widget))
- )
-
- # Return the formfield so that other tests can continue
- return ff
-
- def testDateField(self):
- self.assertFormfield(models.Event, 'start_date', widgets.AdminDateWidget)
-
- def testDateTimeField(self):
- self.assertFormfield(models.Member, 'birthdate', widgets.AdminSplitDateTime)
-
- def testTimeField(self):
- self.assertFormfield(models.Event, 'start_time', widgets.AdminTimeWidget)
-
- def testTextField(self):
- self.assertFormfield(models.Event, 'description', widgets.AdminTextareaWidget)
-
- def testURLField(self):
- self.assertFormfield(models.Event, 'link', widgets.AdminURLFieldWidget)
-
- def testIntegerField(self):
- self.assertFormfield(models.Event, 'min_age', widgets.AdminIntegerFieldWidget)
-
- def testCharField(self):
- self.assertFormfield(models.Member, 'name', widgets.AdminTextInputWidget)
-
- def testFileField(self):
- self.assertFormfield(models.Album, 'cover_art', widgets.AdminFileWidget)
-
- def testForeignKey(self):
- self.assertFormfield(models.Event, 'band', forms.Select)
-
- def testRawIDForeignKey(self):
- self.assertFormfield(models.Event, 'band', widgets.ForeignKeyRawIdWidget,
- raw_id_fields=['band'])
-
- def testRadioFieldsForeignKey(self):
- ff = self.assertFormfield(models.Event, 'band', widgets.AdminRadioSelect,
- radio_fields={'band':admin.VERTICAL})
- self.assertEqual(ff.empty_label, None)
-
- def testManyToMany(self):
- self.assertFormfield(models.Band, 'members', forms.SelectMultiple)
-
- def testRawIDManyTOMany(self):
- self.assertFormfield(models.Band, 'members', widgets.ManyToManyRawIdWidget,
- raw_id_fields=['members'])
-
- def testFilteredManyToMany(self):
- self.assertFormfield(models.Band, 'members', widgets.FilteredSelectMultiple,
- filter_vertical=['members'])
-
- def testFormfieldOverrides(self):
- self.assertFormfield(models.Event, 'start_date', forms.TextInput,
- formfield_overrides={DateField: {'widget': forms.TextInput}})
-
- def testFieldWithChoices(self):
- self.assertFormfield(models.Member, 'gender', forms.Select)
-
- def testChoicesWithRadioFields(self):
- self.assertFormfield(models.Member, 'gender', widgets.AdminRadioSelect,
- radio_fields={'gender':admin.VERTICAL})
-
- def testInheritance(self):
- self.assertFormfield(models.Album, 'backside_art', widgets.AdminFileWidget)
-
-
-class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
-
- def testFilterChoicesByRequestUser(self):
- """
- Ensure the user can only see their own cars in the foreign key dropdown.
- """
- self.client.login(username="super", password="secret")
- response = self.client.get("/widget_admin/admin_widgets/cartire/add/")
- self.assert_("BMW M3" not in response.content)
- self.assert_("Volkswagon Passat" in response.content)
-
-
-class AdminForeignKeyWidgetChangeList(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
- admin_root = '/widget_admin'
-
- def setUp(self):
- self.client.login(username="super", password="secret")
-
- def tearDown(self):
- self.client.logout()
-
- def test_changelist_foreignkey(self):
- response = self.client.get('%s/admin_widgets/car/' % self.admin_root)
- self.assertTrue('%s/auth/user/add/' % self.admin_root in response.content)
-
-
-class AdminForeignKeyRawIdWidget(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
- admin_root = '/widget_admin'
-
- def setUp(self):
- self.client.login(username="super", password="secret")
-
- def tearDown(self):
- self.client.logout()
-
- def test_nonexistent_target_id(self):
- band = models.Band.objects.create(name='Bogey Blues')
- pk = band.pk
- band.delete()
- post_data = {
- "band": u'%s' % pk,
- }
- # Try posting with a non-existent pk in a raw id field: this
- # should result in an error message, not a server exception.
- response = self.client.post('%s/admin_widgets/event/add/' % self.admin_root,
- post_data)
- self.assertContains(response,
- 'Select a valid choice. That choice is not one of the available choices.')
-
- def test_invalid_target_id(self):
-
- for test_str in ('Iñtërnâtiônàlizætiøn', "1234'", -1234):
- # This should result in an error message, not a server exception.
- response = self.client.post('%s/admin_widgets/event/add/' % self.admin_root,
- {"band": test_str})
-
- self.assertContains(response,
- 'Select a valid choice. That choice is not one of the available choices.')
-
-
-class FilteredSelectMultipleWidgetTest(TestCase):
- def test_render(self):
- w = FilteredSelectMultiple('test', False)
- self.assertEqual(
- conditional_escape(w.render('test', 'test')),
- '<select multiple="multiple" name="test" class="selectfilter">\n</select><script type="text/javascript">addEvent(window, "load", function(e) {SelectFilter.init("id_test", "test", 0, "%(ADMIN_MEDIA_PREFIX)s"); });</script>\n' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX}
- )
-
- def test_stacked_render(self):
- w = FilteredSelectMultiple('test', True)
- self.assertEqual(
- conditional_escape(w.render('test', 'test')),
- '<select multiple="multiple" name="test" class="selectfilterstacked">\n</select><script type="text/javascript">addEvent(window, "load", function(e) {SelectFilter.init("id_test", "test", 1, "%(ADMIN_MEDIA_PREFIX)s"); });</script>\n' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX}
- )
-
-
-class AdminSplitDateTimeWidgetTest(TestCase):
- def test_render(self):
- w = AdminSplitDateTime()
- self.assertEqual(
- conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
- '<p class="datetime">Date: <input value="2007-12-01" type="text" class="vDateField" name="test_0" size="10" /><br />Time: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>',
- )
-
- def test_localization(self):
- w = AdminSplitDateTime()
-
- activate('de-at')
- old_USE_L10N = settings.USE_L10N
- settings.USE_L10N = True
- w.is_localized = True
- self.assertEqual(
- conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
- '<p class="datetime">Datum: <input value="01.12.2007" type="text" class="vDateField" name="test_0" size="10" /><br />Zeit: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>',
- )
- deactivate()
- settings.USE_L10N = old_USE_L10N
-
-
-class AdminFileWidgetTest(DjangoTestCase):
- def test_render(self):
- band = models.Band.objects.create(name='Linkin Park')
- album = band.album_set.create(
- name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg'
- )
-
- w = AdminFileWidget()
- self.assertEqual(
- conditional_escape(w.render('test', album.cover_art)),
- 'Currently: <a target="_blank" href="%(STORAGE_URL)salbums/hybrid_theory.jpg">albums\hybrid_theory.jpg</a> <br />Change: <input type="file" name="test" />' % {'STORAGE_URL': default_storage.url('')},
- )
-
- self.assertEqual(
- conditional_escape(w.render('test', SimpleUploadedFile('test', 'content'))),
- '<input type="file" name="test" />',
- )
-
-
-class ForeignKeyRawIdWidgetTest(DjangoTestCase):
- def test_render(self):
- band = models.Band.objects.create(name='Linkin Park')
- band.album_set.create(
- name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg'
- )
- rel = models.Album._meta.get_field('band').rel
-
- w = ForeignKeyRawIdWidget(rel)
- self.assertEqual(
- conditional_escape(w.render('test', band.pk, attrs={})),
- '<input type="text" name="test" value="%(bandpk)s" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/band/?t=id" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Linkin Park</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX, "bandpk": band.pk},
- )
-
- def test_relations_to_non_primary_key(self):
- # Check that ForeignKeyRawIdWidget works with fields which aren't
- # related to the model's primary key.
- apple = models.Inventory.objects.create(barcode=86, name='Apple')
- models.Inventory.objects.create(barcode=22, name='Pear')
- core = models.Inventory.objects.create(
- barcode=87, name='Core', parent=apple
- )
- rel = models.Inventory._meta.get_field('parent').rel
- w = ForeignKeyRawIdWidget(rel)
- self.assertEqual(
- w.render('test', core.parent_id, attrs={}),
- '<input type="text" name="test" value="86" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/?t=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Apple</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX},
- )
-
-
- def test_proper_manager_for_label_lookup(self):
- # see #9258
- rel = models.Inventory._meta.get_field('parent').rel
- w = ForeignKeyRawIdWidget(rel)
-
- hidden = models.Inventory.objects.create(
- barcode=93, name='Hidden', hidden=True
- )
- child_of_hidden = models.Inventory.objects.create(
- barcode=94, name='Child of hidden', parent=hidden
- )
- self.assertEqual(
- w.render('test', child_of_hidden.parent_id, attrs={}),
- '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/?t=barcode" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Hidden</strong>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX},
- )
-
-
-class ManyToManyRawIdWidgetTest(DjangoTestCase):
- def test_render(self):
- band = models.Band.objects.create(name='Linkin Park')
- band.album_set.create(
- name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg'
- )
-
- m1 = models.Member.objects.create(name='Chester')
- m2 = models.Member.objects.create(name='Mike')
- band.members.add(m1, m2)
- rel = models.Band._meta.get_field('members').rel
-
- w = ManyToManyRawIdWidget(rel)
- self.assertEqual(
- conditional_escape(w.render('test', [m1.pk, m2.pk], attrs={})),
- '<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField" /><a href="../../../admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX, "m1pk": m1.pk, "m2pk": m2.pk},
- )
-
- self.assertEqual(
- conditional_escape(w.render('test', [m1.pk])),
- '<input type="text" name="test" value="%(m1pk)s" class="vManyToManyRawIdAdminField" /><a href="../../../admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % {"ADMIN_MEDIA_PREFIX": settings.ADMIN_MEDIA_PREFIX, "m1pk": m1.pk},
- )
-
- self.assertEqual(w._has_changed(None, None), False)
- self.assertEqual(w._has_changed([], None), False)
- self.assertEqual(w._has_changed(None, [u'1']), True)
- self.assertEqual(w._has_changed([1, 2], [u'1', u'2']), False)
- self.assertEqual(w._has_changed([1, 2], [u'1']), True)
- self.assertEqual(w._has_changed([1, 2], [u'1', u'3']), True)
diff --git a/parts/django/tests/regressiontests/admin_widgets/urls.py b/parts/django/tests/regressiontests/admin_widgets/urls.py
deleted file mode 100644
index af73d53..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/urls.py
+++ /dev/null
@@ -1,7 +0,0 @@
-
-from django.conf.urls.defaults import *
-import widgetadmin
-
-urlpatterns = patterns('',
- (r'^', include(widgetadmin.site.urls)),
-)
diff --git a/parts/django/tests/regressiontests/admin_widgets/widgetadmin.py b/parts/django/tests/regressiontests/admin_widgets/widgetadmin.py
deleted file mode 100644
index 6f15d92..0000000
--- a/parts/django/tests/regressiontests/admin_widgets/widgetadmin.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
-
-"""
-from django.contrib import admin
-
-import models
-
-class WidgetAdmin(admin.AdminSite):
- pass
-
-class CarAdmin(admin.ModelAdmin):
- list_display = ['make', 'model', 'owner']
- list_editable = ['owner']
-
-class CarTireAdmin(admin.ModelAdmin):
- def formfield_for_foreignkey(self, db_field, request, **kwargs):
- if db_field.name == "car":
- kwargs["queryset"] = models.Car.objects.filter(owner=request.user)
- return db_field.formfield(**kwargs)
- return super(CarTireAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
-
-class EventAdmin(admin.ModelAdmin):
- raw_id_fields = ['band']
-
-site = WidgetAdmin(name='widget-admin')
-
-site.register(models.User)
-site.register(models.Car, CarAdmin)
-site.register(models.CarTire, CarTireAdmin)
-site.register(models.Event, EventAdmin)
diff --git a/parts/django/tests/regressiontests/aggregation_regress/__init__.py b/parts/django/tests/regressiontests/aggregation_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/aggregation_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/aggregation_regress/fixtures/initial_data.json b/parts/django/tests/regressiontests/aggregation_regress/fixtures/initial_data.json
deleted file mode 100644
index 597ac04..0000000
--- a/parts/django/tests/regressiontests/aggregation_regress/fixtures/initial_data.json
+++ /dev/null
@@ -1,257 +0,0 @@
-[
- {
- "pk": 1,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Apress",
- "num_awards": 3
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Sams",
- "num_awards": 1
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Prentice Hall",
- "num_awards": 7
- }
- },
- {
- "pk": 4,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Morgan Kaufmann",
- "num_awards": 9
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Jonno's House of Books",
- "num_awards": 0
- }
- },
- {
- "pk": 1,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059725",
- "name": "The Definitive Guide to Django: Web Development Done Right",
- "price": "30.00",
- "rating": 4.5,
- "authors": [1, 2],
- "contact": 1,
- "pages": 447,
- "pubdate": "2007-12-6"
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 2,
- "isbn": "067232959",
- "name": "Sams Teach Yourself Django in 24 Hours",
- "price": "23.09",
- "rating": 3.0,
- "authors": [3],
- "contact": 3,
- "pages": 528,
- "pubdate": "2008-3-3"
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059996",
- "name": "Practical Django Projects",
- "price": "29.69",
- "rating": 4.0,
- "authors": [4],
- "contact": 4,
- "pages": 300,
- "pubdate": "2008-6-23"
- }
- },
- {
- "pk": 4,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 3,
- "isbn": "013235613",
- "name": "Python Web Development with Django",
- "price": "29.69",
- "rating": 4.0,
- "authors": [5, 6, 7],
- "contact": 5,
- "pages": 350,
- "pubdate": "2008-11-3"
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 3,
- "isbn": "013790395",
- "name": "Artificial Intelligence: A Modern Approach",
- "price": "82.80",
- "rating": 4.0,
- "authors": [8, 9],
- "contact": 8,
- "pages": 1132,
- "pubdate": "1995-1-15"
- }
- },
- {
- "pk": 6,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 4,
- "isbn": "155860191",
- "name": "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp",
- "price": "75.00",
- "rating": 5.0,
- "authors": [8],
- "contact": 8,
- "pages": 946,
- "pubdate": "1991-10-15"
- }
- },
- {
- "pk": 1,
- "model": "aggregation_regress.store",
- "fields": {
- "books": [1, 2, 3, 4, 5, 6],
- "name": "Amazon.com",
- "original_opening": "1994-4-23 9:17:42",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.store",
- "fields": {
- "books": [1, 3, 5, 6],
- "name": "Books.com",
- "original_opening": "2001-3-15 11:23:37",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.store",
- "fields": {
- "books": [3, 4, 6],
- "name": "Mamma and Pappa's Books",
- "original_opening": "1945-4-25 16:24:14",
- "friday_night_closing": "21:30:00"
- }
- },
- {
- "pk": 1,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 34,
- "friends": [2, 4],
- "name": "Adrian Holovaty"
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 35,
- "friends": [1, 7],
- "name": "Jacob Kaplan-Moss"
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 45,
- "friends": [],
- "name": "Brad Dayley"
- }
- },
- {
- "pk": 4,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 29,
- "friends": [1],
- "name": "James Bennett"
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 37,
- "friends": [6, 7],
- "name": "Jeffrey Forcier"
- }
- },
- {
- "pk": 6,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 29,
- "friends": [5, 7],
- "name": "Paul Bissex"
- }
- },
- {
- "pk": 7,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 25,
- "friends": [2, 5, 6],
- "name": "Wesley J. Chun"
- }
- },
- {
- "pk": 8,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 57,
- "friends": [9],
- "name": "Peter Norvig"
- }
- },
- {
- "pk": 9,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 46,
- "friends": [8],
- "name": "Stuart Russell"
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.hardbackbook",
- "fields": {
- "weight": 4.5
- }
- },
- {
- "pk": 6,
- "model": "aggregation_regress.hardbackbook",
- "fields": {
- "weight": 3.7
- }
- }
-]
diff --git a/parts/django/tests/regressiontests/aggregation_regress/models.py b/parts/django/tests/regressiontests/aggregation_regress/models.py
deleted file mode 100644
index ccef9a5..0000000
--- a/parts/django/tests/regressiontests/aggregation_regress/models.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# coding: utf-8
-from django.db import models
-
-
-class Author(models.Model):
- name = models.CharField(max_length=100)
- age = models.IntegerField()
- friends = models.ManyToManyField('self', blank=True)
-
- def __unicode__(self):
- return self.name
-
-
-class Publisher(models.Model):
- name = models.CharField(max_length=255)
- num_awards = models.IntegerField()
-
- def __unicode__(self):
- return self.name
-
-
-class Book(models.Model):
- isbn = models.CharField(max_length=9)
- name = models.CharField(max_length=255)
- pages = models.IntegerField()
- rating = models.FloatField()
- price = models.DecimalField(decimal_places=2, max_digits=6)
- authors = models.ManyToManyField(Author)
- contact = models.ForeignKey(Author, related_name='book_contact_set')
- publisher = models.ForeignKey(Publisher)
- pubdate = models.DateField()
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-
-class Store(models.Model):
- name = models.CharField(max_length=255)
- books = models.ManyToManyField(Book)
- original_opening = models.DateTimeField()
- friday_night_closing = models.TimeField()
-
- def __unicode__(self):
- return self.name
-
-class Entries(models.Model):
- EntryID = models.AutoField(primary_key=True, db_column='Entry ID')
- Entry = models.CharField(unique=True, max_length=50)
- Exclude = models.BooleanField()
-
-
-class Clues(models.Model):
- ID = models.AutoField(primary_key=True)
- EntryID = models.ForeignKey(Entries, verbose_name='Entry', db_column = 'Entry ID')
- Clue = models.CharField(max_length=150)
-
-
-class HardbackBook(Book):
- weight = models.FloatField()
-
- def __unicode__(self):
- return "%s (hardback): %s" % (self.name, self.weight)
diff --git a/parts/django/tests/regressiontests/aggregation_regress/tests.py b/parts/django/tests/regressiontests/aggregation_regress/tests.py
deleted file mode 100644
index 4d5a2a0..0000000
--- a/parts/django/tests/regressiontests/aggregation_regress/tests.py
+++ /dev/null
@@ -1,757 +0,0 @@
-import datetime
-import pickle
-from decimal import Decimal
-from operator import attrgetter
-
-from django.conf import settings
-from django.core.exceptions import FieldError
-from django.db import DEFAULT_DB_ALIAS
-from django.db.models import Count, Max, Avg, Sum, StdDev, Variance, F
-from django.test import TestCase, Approximate
-
-from models import Author, Book, Publisher, Clues, Entries, HardbackBook
-
-
-def run_stddev_tests():
- """Check to see if StdDev/Variance tests should be run.
-
- Stddev and Variance are not guaranteed to be available for SQLite, and
- are not available for PostgreSQL before 8.2.
- """
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.sqlite3':
- return False
-
- class StdDevPop(object):
- sql_function = 'STDDEV_POP'
-
- try:
- connection.ops.check_aggregate_support(StdDevPop())
- except:
- return False
- return True
-
-
-class AggregationTests(TestCase):
- def assertObjectAttrs(self, obj, **kwargs):
- for attr, value in kwargs.iteritems():
- self.assertEqual(getattr(obj, attr), value)
-
- def test_aggregates_in_where_clause(self):
- """
- Regression test for #12822: DatabaseError: aggregates not allowed in
- WHERE clause
-
- Tests that the subselect works and returns results equivalent to a
- query with the IDs listed.
-
- Before the corresponding fix for this bug, this test passed in 1.1 and
- failed in 1.2-beta (trunk).
- """
- qs = Book.objects.values('contact').annotate(Max('id'))
- qs = qs.order_by('contact').values_list('id__max', flat=True)
- # don't do anything with the queryset (qs) before including it as a
- # subquery
- books = Book.objects.order_by('id')
- qs1 = books.filter(id__in=qs)
- qs2 = books.filter(id__in=list(qs))
- self.assertEqual(list(qs1), list(qs2))
-
- def test_aggregates_in_where_clause_pre_eval(self):
- """
- Regression test for #12822: DatabaseError: aggregates not allowed in
- WHERE clause
-
- Same as the above test, but evaluates the queryset for the subquery
- before it's used as a subquery.
-
- Before the corresponding fix for this bug, this test failed in both
- 1.1 and 1.2-beta (trunk).
- """
- qs = Book.objects.values('contact').annotate(Max('id'))
- qs = qs.order_by('contact').values_list('id__max', flat=True)
- # force the queryset (qs) for the subquery to be evaluated in its
- # current state
- list(qs)
- books = Book.objects.order_by('id')
- qs1 = books.filter(id__in=qs)
- qs2 = books.filter(id__in=list(qs))
- self.assertEqual(list(qs1), list(qs2))
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.oracle':
- def test_annotate_with_extra(self):
- """
- Regression test for #11916: Extra params + aggregation creates
- incorrect SQL.
- """
- #oracle doesn't support subqueries in group by clause
- shortest_book_sql = """
- SELECT name
- FROM aggregation_regress_book b
- WHERE b.publisher_id = aggregation_regress_publisher.id
- ORDER BY b.pages
- LIMIT 1
- """
- # tests that this query does not raise a DatabaseError due to the full
- # subselect being (erroneously) added to the GROUP BY parameters
- qs = Publisher.objects.extra(select={
- 'name_of_shortest_book': shortest_book_sql,
- }).annotate(total_books=Count('book'))
- # force execution of the query
- list(qs)
-
- def test_aggregate(self):
- # Ordering requests are ignored
- self.assertEqual(
- Author.objects.order_by("name").aggregate(Avg("age")),
- {"age__avg": Approximate(37.444, places=1)}
- )
-
- # Implicit ordering is also ignored
- self.assertEqual(
- Book.objects.aggregate(Sum("pages")),
- {"pages__sum": 3703},
- )
-
- # Baseline results
- self.assertEqual(
- Book.objects.aggregate(Sum('pages'), Avg('pages')),
- {'pages__sum': 3703, 'pages__avg': Approximate(617.166, places=2)}
- )
-
- # Empty values query doesn't affect grouping or results
- self.assertEqual(
- Book.objects.values().aggregate(Sum('pages'), Avg('pages')),
- {'pages__sum': 3703, 'pages__avg': Approximate(617.166, places=2)}
- )
-
- # Aggregate overrides extra selected column
- self.assertEqual(
- Book.objects.extra(select={'price_per_page' : 'price / pages'}).aggregate(Sum('pages')),
- {'pages__sum': 3703}
- )
-
- def test_annotation(self):
- # Annotations get combined with extra select clauses
- obj = Book.objects.annotate(mean_auth_age=Avg("authors__age")).extra(select={"manufacture_cost": "price * .5"}).get(pk=2)
- self.assertObjectAttrs(obj,
- contact_id=3,
- id=2,
- isbn=u'067232959',
- mean_auth_age=45.0,
- name='Sams Teach Yourself Django in 24 Hours',
- pages=528,
- price=Decimal("23.09"),
- pubdate=datetime.date(2008, 3, 3),
- publisher_id=2,
- rating=3.0
- )
- # Different DB backends return different types for the extra select computation
- self.assertTrue(obj.manufacture_cost == 11.545 or obj.manufacture_cost == Decimal('11.545'))
-
- # Order of the annotate/extra in the query doesn't matter
- obj = Book.objects.extra(select={'manufacture_cost' : 'price * .5'}).annotate(mean_auth_age=Avg('authors__age')).get(pk=2)
- self.assertObjectAttrs(obj,
- contact_id=3,
- id=2,
- isbn=u'067232959',
- mean_auth_age=45.0,
- name=u'Sams Teach Yourself Django in 24 Hours',
- pages=528,
- price=Decimal("23.09"),
- pubdate=datetime.date(2008, 3, 3),
- publisher_id=2,
- rating=3.0
- )
- # Different DB backends return different types for the extra select computation
- self.assertTrue(obj.manufacture_cost == 11.545 or obj.manufacture_cost == Decimal('11.545'))
-
- # Values queries can be combined with annotate and extra
- obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'manufacture_cost' : 'price * .5'}).values().get(pk=2)
- manufacture_cost = obj['manufacture_cost']
- self.assertTrue(manufacture_cost == 11.545 or manufacture_cost == Decimal('11.545'))
- del obj['manufacture_cost']
- self.assertEqual(obj, {
- "contact_id": 3,
- "id": 2,
- "isbn": u"067232959",
- "mean_auth_age": 45.0,
- "name": u"Sams Teach Yourself Django in 24 Hours",
- "pages": 528,
- "price": Decimal("23.09"),
- "pubdate": datetime.date(2008, 3, 3),
- "publisher_id": 2,
- "rating": 3.0,
- })
-
- # The order of the (empty) values, annotate and extra clauses doesn't
- # matter
- obj = Book.objects.values().annotate(mean_auth_age=Avg('authors__age')).extra(select={'manufacture_cost' : 'price * .5'}).get(pk=2)
- manufacture_cost = obj['manufacture_cost']
- self.assertTrue(manufacture_cost == 11.545 or manufacture_cost == Decimal('11.545'))
- del obj['manufacture_cost']
- self.assertEqual(obj, {
- 'contact_id': 3,
- 'id': 2,
- 'isbn': u'067232959',
- 'mean_auth_age': 45.0,
- 'name': u'Sams Teach Yourself Django in 24 Hours',
- 'pages': 528,
- 'price': Decimal("23.09"),
- 'pubdate': datetime.date(2008, 3, 3),
- 'publisher_id': 2,
- 'rating': 3.0
- })
-
- # If the annotation precedes the values clause, it won't be included
- # unless it is explicitly named
- obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page' : 'price / pages'}).values('name').get(pk=1)
- self.assertEqual(obj, {
- "name": u'The Definitive Guide to Django: Web Development Done Right',
- })
-
- obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page' : 'price / pages'}).values('name','mean_auth_age').get(pk=1)
- self.assertEqual(obj, {
- 'mean_auth_age': 34.5,
- 'name': u'The Definitive Guide to Django: Web Development Done Right',
- })
-
- # If an annotation isn't included in the values, it can still be used
- # in a filter
- qs = Book.objects.annotate(n_authors=Count('authors')).values('name').filter(n_authors__gt=2)
- self.assertQuerysetEqual(
- qs, [
- {"name": u'Python Web Development with Django'}
- ],
- lambda b: b,
- )
-
- # The annotations are added to values output if values() precedes
- # annotate()
- obj = Book.objects.values('name').annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page' : 'price / pages'}).get(pk=1)
- self.assertEqual(obj, {
- 'mean_auth_age': 34.5,
- 'name': u'The Definitive Guide to Django: Web Development Done Right',
- })
-
- # Check that all of the objects are getting counted (allow_nulls) and
- # that values respects the amount of objects
- self.assertEqual(
- len(Author.objects.annotate(Avg('friends__age')).values()),
- 9
- )
-
- # Check that consecutive calls to annotate accumulate in the query
- qs = Book.objects.values('price').annotate(oldest=Max('authors__age')).order_by('oldest', 'price').annotate(Max('publisher__num_awards'))
- self.assertQuerysetEqual(
- qs, [
- {'price': Decimal("30"), 'oldest': 35, 'publisher__num_awards__max': 3},
- {'price': Decimal("29.69"), 'oldest': 37, 'publisher__num_awards__max': 7},
- {'price': Decimal("23.09"), 'oldest': 45, 'publisher__num_awards__max': 1},
- {'price': Decimal("75"), 'oldest': 57, 'publisher__num_awards__max': 9},
- {'price': Decimal("82.8"), 'oldest': 57, 'publisher__num_awards__max': 7}
- ],
- lambda b: b,
- )
-
- def test_aggrate_annotation(self):
- # Aggregates can be composed over annotations.
- # The return type is derived from the composed aggregate
- vals = Book.objects.all().annotate(num_authors=Count('authors__id')).aggregate(Max('pages'), Max('price'), Sum('num_authors'), Avg('num_authors'))
- self.assertEqual(vals, {
- 'num_authors__sum': 10,
- 'num_authors__avg': Approximate(1.666, places=2),
- 'pages__max': 1132,
- 'price__max': Decimal("82.80")
- })
-
- def test_field_error(self):
- # Bad field requests in aggregates are caught and reported
- self.assertRaises(
- FieldError,
- lambda: Book.objects.all().aggregate(num_authors=Count('foo'))
- )
-
- self.assertRaises(
- FieldError,
- lambda: Book.objects.all().annotate(num_authors=Count('foo'))
- )
-
- self.assertRaises(
- FieldError,
- lambda: Book.objects.all().annotate(num_authors=Count('authors__id')).aggregate(Max('foo'))
- )
-
- def test_more(self):
- # Old-style count aggregations can be mixed with new-style
- self.assertEqual(
- Book.objects.annotate(num_authors=Count('authors')).count(),
- 6
- )
-
- # Non-ordinal, non-computed Aggregates over annotations correctly
- # inherit the annotation's internal type if the annotation is ordinal
- # or computed
- vals = Book.objects.annotate(num_authors=Count('authors')).aggregate(Max('num_authors'))
- self.assertEqual(
- vals,
- {'num_authors__max': 3}
- )
-
- vals = Publisher.objects.annotate(avg_price=Avg('book__price')).aggregate(Max('avg_price'))
- self.assertEqual(
- vals,
- {'avg_price__max': 75.0}
- )
-
- # Aliases are quoted to protected aliases that might be reserved names
- vals = Book.objects.aggregate(number=Max('pages'), select=Max('pages'))
- self.assertEqual(
- vals,
- {'number': 1132, 'select': 1132}
- )
-
- # Regression for #10064: select_related() plays nice with aggregates
- obj = Book.objects.select_related('publisher').annotate(num_authors=Count('authors')).values()[0]
- self.assertEqual(obj, {
- 'contact_id': 8,
- 'id': 5,
- 'isbn': u'013790395',
- 'name': u'Artificial Intelligence: A Modern Approach',
- 'num_authors': 2,
- 'pages': 1132,
- 'price': Decimal("82.8"),
- 'pubdate': datetime.date(1995, 1, 15),
- 'publisher_id': 3,
- 'rating': 4.0,
- })
-
- # Regression for #10010: exclude on an aggregate field is correctly
- # negated
- self.assertEqual(
- len(Book.objects.annotate(num_authors=Count('authors'))),
- 6
- )
- self.assertEqual(
- len(Book.objects.annotate(num_authors=Count('authors')).filter(num_authors__gt=2)),
- 1
- )
- self.assertEqual(
- len(Book.objects.annotate(num_authors=Count('authors')).exclude(num_authors__gt=2)),
- 5
- )
-
- self.assertEqual(
- len(Book.objects.annotate(num_authors=Count('authors')).filter(num_authors__lt=3).exclude(num_authors__lt=2)),
- 2
- )
- self.assertEqual(
- len(Book.objects.annotate(num_authors=Count('authors')).exclude(num_authors__lt=2).filter(num_authors__lt=3)),
- 2
- )
-
- def test_aggregate_fexpr(self):
- # Aggregates can be used with F() expressions
- # ... where the F() is pushed into the HAVING clause
- qs = Publisher.objects.annotate(num_books=Count('book')).filter(num_books__lt=F('num_awards')/2).order_by('name').values('name','num_books','num_awards')
- self.assertQuerysetEqual(
- qs, [
- {'num_books': 1, 'name': u'Morgan Kaufmann', 'num_awards': 9},
- {'num_books': 2, 'name': u'Prentice Hall', 'num_awards': 7}
- ],
- lambda p: p,
- )
-
- qs = Publisher.objects.annotate(num_books=Count('book')).exclude(num_books__lt=F('num_awards')/2).order_by('name').values('name','num_books','num_awards')
- self.assertQuerysetEqual(
- qs, [
- {'num_books': 2, 'name': u'Apress', 'num_awards': 3},
- {'num_books': 0, 'name': u"Jonno's House of Books", 'num_awards': 0},
- {'num_books': 1, 'name': u'Sams', 'num_awards': 1}
- ],
- lambda p: p,
- )
-
- # ... and where the F() references an aggregate
- qs = Publisher.objects.annotate(num_books=Count('book')).filter(num_awards__gt=2*F('num_books')).order_by('name').values('name','num_books','num_awards')
- self.assertQuerysetEqual(
- qs, [
- {'num_books': 1, 'name': u'Morgan Kaufmann', 'num_awards': 9},
- {'num_books': 2, 'name': u'Prentice Hall', 'num_awards': 7}
- ],
- lambda p: p,
- )
-
- qs = Publisher.objects.annotate(num_books=Count('book')).exclude(num_books__lt=F('num_awards')/2).order_by('name').values('name','num_books','num_awards')
- self.assertQuerysetEqual(
- qs, [
- {'num_books': 2, 'name': u'Apress', 'num_awards': 3},
- {'num_books': 0, 'name': u"Jonno's House of Books", 'num_awards': 0},
- {'num_books': 1, 'name': u'Sams', 'num_awards': 1}
- ],
- lambda p: p,
- )
-
- def test_db_col_table(self):
- # Tests on fields with non-default table and column names.
- qs = Clues.objects.values('EntryID__Entry').annotate(Appearances=Count('EntryID'), Distinct_Clues=Count('Clue', distinct=True))
- self.assertQuerysetEqual(qs, [])
-
- qs = Entries.objects.annotate(clue_count=Count('clues__ID'))
- self.assertQuerysetEqual(qs, [])
-
- def test_empty(self):
- # Regression for #10089: Check handling of empty result sets with
- # aggregates
- self.assertEqual(
- Book.objects.filter(id__in=[]).count(),
- 0
- )
-
- vals = Book.objects.filter(id__in=[]).aggregate(num_authors=Count('authors'), avg_authors=Avg('authors'), max_authors=Max('authors'), max_price=Max('price'), max_rating=Max('rating'))
- self.assertEqual(
- vals,
- {'max_authors': None, 'max_rating': None, 'num_authors': 0, 'avg_authors': None, 'max_price': None}
- )
-
- qs = Publisher.objects.filter(pk=5).annotate(num_authors=Count('book__authors'), avg_authors=Avg('book__authors'), max_authors=Max('book__authors'), max_price=Max('book__price'), max_rating=Max('book__rating')).values()
- self.assertQuerysetEqual(
- qs, [
- {'max_authors': None, 'name': u"Jonno's House of Books", 'num_awards': 0, 'max_price': None, 'num_authors': 0, 'max_rating': None, 'id': 5, 'avg_authors': None}
- ],
- lambda p: p
- )
-
- def test_more_more(self):
- # Regression for #10113 - Fields mentioned in order_by() must be
- # included in the GROUP BY. This only becomes a problem when the
- # order_by introduces a new join.
- self.assertQuerysetEqual(
- Book.objects.annotate(num_authors=Count('authors')).order_by('publisher__name', 'name'), [
- "Practical Django Projects",
- "The Definitive Guide to Django: Web Development Done Right",
- "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp",
- "Artificial Intelligence: A Modern Approach",
- "Python Web Development with Django",
- "Sams Teach Yourself Django in 24 Hours",
- ],
- lambda b: b.name
- )
-
- # Regression for #10127 - Empty select_related() works with annotate
- qs = Book.objects.filter(rating__lt=4.5).select_related().annotate(Avg('authors__age'))
- self.assertQuerysetEqual(
- qs, [
- (u'Artificial Intelligence: A Modern Approach', 51.5, u'Prentice Hall', u'Peter Norvig'),
- (u'Practical Django Projects', 29.0, u'Apress', u'James Bennett'),
- (u'Python Web Development with Django', Approximate(30.333, places=2), u'Prentice Hall', u'Jeffrey Forcier'),
- (u'Sams Teach Yourself Django in 24 Hours', 45.0, u'Sams', u'Brad Dayley')
- ],
- lambda b: (b.name, b.authors__age__avg, b.publisher.name, b.contact.name)
- )
-
- # Regression for #10132 - If the values() clause only mentioned extra
- # (select=) columns, those columns are used for grouping
- qs = Book.objects.extra(select={'pub':'publisher_id'}).values('pub').annotate(Count('id')).order_by('pub')
- self.assertQuerysetEqual(
- qs, [
- {'pub': 1, 'id__count': 2},
- {'pub': 2, 'id__count': 1},
- {'pub': 3, 'id__count': 2},
- {'pub': 4, 'id__count': 1}
- ],
- lambda b: b
- )
-
- qs = Book.objects.extra(select={'pub':'publisher_id', 'foo':'pages'}).values('pub').annotate(Count('id')).order_by('pub')
- self.assertQuerysetEqual(
- qs, [
- {'pub': 1, 'id__count': 2},
- {'pub': 2, 'id__count': 1},
- {'pub': 3, 'id__count': 2},
- {'pub': 4, 'id__count': 1}
- ],
- lambda b: b
- )
-
- # Regression for #10182 - Queries with aggregate calls are correctly
- # realiased when used in a subquery
- ids = Book.objects.filter(pages__gt=100).annotate(n_authors=Count('authors')).filter(n_authors__gt=2).order_by('n_authors')
- self.assertQuerysetEqual(
- Book.objects.filter(id__in=ids), [
- "Python Web Development with Django",
- ],
- lambda b: b.name
- )
-
- def test_duplicate_alias(self):
- # Regression for #11256 - duplicating a default alias raises ValueError.
- self.assertRaises(ValueError, Book.objects.all().annotate, Avg('authors__age'), authors__age__avg=Avg('authors__age'))
-
- def test_field_name_conflict(self):
- # Regression for #11256 - providing an aggregate name that conflicts with a field name on the model raises ValueError
- self.assertRaises(ValueError, Author.objects.annotate, age=Avg('friends__age'))
-
- def test_m2m_name_conflict(self):
- # Regression for #11256 - providing an aggregate name that conflicts with an m2m name on the model raises ValueError
- self.assertRaises(ValueError, Author.objects.annotate, friends=Count('friends'))
-
- def test_reverse_relation_name_conflict(self):
- # Regression for #11256 - providing an aggregate name that conflicts with a reverse-related name on the model raises ValueError
- self.assertRaises(ValueError, Author.objects.annotate, book_contact_set=Avg('friends__age'))
-
- def test_pickle(self):
- # Regression for #10197 -- Queries with aggregates can be pickled.
- # First check that pickling is possible at all. No crash = success
- qs = Book.objects.annotate(num_authors=Count('authors'))
- pickle.dumps(qs)
-
- # Then check that the round trip works.
- query = qs.query.get_compiler(qs.db).as_sql()[0]
- qs2 = pickle.loads(pickle.dumps(qs))
- self.assertEqual(
- qs2.query.get_compiler(qs2.db).as_sql()[0],
- query,
- )
-
- def test_more_more_more(self):
- # Regression for #10199 - Aggregate calls clone the original query so
- # the original query can still be used
- books = Book.objects.all()
- books.aggregate(Avg("authors__age"))
- self.assertQuerysetEqual(
- books.all(), [
- u'Artificial Intelligence: A Modern Approach',
- u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp',
- u'Practical Django Projects',
- u'Python Web Development with Django',
- u'Sams Teach Yourself Django in 24 Hours',
- u'The Definitive Guide to Django: Web Development Done Right'
- ],
- lambda b: b.name
- )
-
- # Regression for #10248 - Annotations work with DateQuerySets
- qs = Book.objects.annotate(num_authors=Count('authors')).filter(num_authors=2).dates('pubdate', 'day')
- self.assertQuerysetEqual(
- qs, [
- datetime.datetime(1995, 1, 15, 0, 0),
- datetime.datetime(2007, 12, 6, 0, 0)
- ],
- lambda b: b
- )
-
- # Regression for #10290 - extra selects with parameters can be used for
- # grouping.
- qs = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'sheets' : '(pages + %s) / %s'}, select_params=[1, 2]).order_by('sheets').values('sheets')
- self.assertQuerysetEqual(
- qs, [
- 150,
- 175,
- 224,
- 264,
- 473,
- 566
- ],
- lambda b: int(b["sheets"])
- )
-
- # Regression for 10425 - annotations don't get in the way of a count()
- # clause
- self.assertEqual(
- Book.objects.values('publisher').annotate(Count('publisher')).count(),
- 4
- )
- self.assertEqual(
- Book.objects.annotate(Count('publisher')).values('publisher').count(),
- 6
- )
-
- publishers = Publisher.objects.filter(id__in=[1, 2])
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Sams"
- ],
- lambda p: p.name
- )
-
- publishers = publishers.annotate(n_books=Count("book"))
- self.assertEqual(
- publishers[0].n_books,
- 2
- )
-
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Sams",
- ],
- lambda p: p.name
- )
-
- books = Book.objects.filter(publisher__in=publishers)
- self.assertQuerysetEqual(
- books, [
- "Practical Django Projects",
- "Sams Teach Yourself Django in 24 Hours",
- "The Definitive Guide to Django: Web Development Done Right",
- ],
- lambda b: b.name
- )
- self.assertQuerysetEqual(
- publishers, [
- "Apress",
- "Sams",
- ],
- lambda p: p.name
- )
-
- # Regression for 10666 - inherited fields work with annotations and
- # aggregations
- self.assertEqual(
- HardbackBook.objects.aggregate(n_pages=Sum('book_ptr__pages')),
- {'n_pages': 2078}
- )
-
- self.assertEqual(
- HardbackBook.objects.aggregate(n_pages=Sum('pages')),
- {'n_pages': 2078},
- )
-
- qs = HardbackBook.objects.annotate(n_authors=Count('book_ptr__authors')).values('name', 'n_authors')
- self.assertQuerysetEqual(
- qs, [
- {'n_authors': 2, 'name': u'Artificial Intelligence: A Modern Approach'},
- {'n_authors': 1, 'name': u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'}
- ],
- lambda h: h
- )
-
- qs = HardbackBook.objects.annotate(n_authors=Count('authors')).values('name', 'n_authors')
- self.assertQuerysetEqual(
- qs, [
- {'n_authors': 2, 'name': u'Artificial Intelligence: A Modern Approach'},
- {'n_authors': 1, 'name': u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'}
- ],
- lambda h: h,
- )
-
- # Regression for #10766 - Shouldn't be able to reference an aggregate
- # fields in an an aggregate() call.
- self.assertRaises(
- FieldError,
- lambda: Book.objects.annotate(mean_age=Avg('authors__age')).annotate(Avg('mean_age'))
- )
-
- def test_empty_filter_count(self):
- self.assertEqual(
- Author.objects.filter(id__in=[]).annotate(Count("friends")).count(),
- 0
- )
-
- def test_empty_filter_aggregate(self):
- self.assertEqual(
- Author.objects.filter(id__in=[]).annotate(Count("friends")).aggregate(Count("pk")),
- {"pk__count": None}
- )
-
- def test_annotate_and_join(self):
- self.assertEqual(
- Author.objects.annotate(c=Count("friends__name")).exclude(friends__name="Joe").count(),
- Author.objects.count()
- )
-
- def test_f_expression_annotation(self):
- # Books with less than 200 pages per author.
- qs = Book.objects.values("name").annotate(
- n_authors=Count("authors")
- ).filter(
- pages__lt=F("n_authors") * 200
- ).values_list("pk")
- self.assertQuerysetEqual(
- Book.objects.filter(pk__in=qs), [
- "Python Web Development with Django"
- ],
- attrgetter("name")
- )
-
- def test_values_annotate_values(self):
- qs = Book.objects.values("name").annotate(
- n_authors=Count("authors")
- ).values_list("pk", flat=True)
- self.assertEqual(list(qs), list(Book.objects.values_list("pk", flat=True)))
-
- def test_having_group_by(self):
- # Test that when a field occurs on the LHS of a HAVING clause that it
- # appears correctly in the GROUP BY clause
- qs = Book.objects.values_list("name").annotate(
- n_authors=Count("authors")
- ).filter(
- pages__gt=F("n_authors")
- ).values_list("name", flat=True)
- # Results should be the same, all Books have more pages than authors
- self.assertEqual(
- list(qs), list(Book.objects.values_list("name", flat=True))
- )
-
- if run_stddev_tests():
- def test_stddev(self):
- self.assertEqual(
- Book.objects.aggregate(StdDev('pages')),
- {'pages__stddev': Approximate(311.46, 1)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(StdDev('rating')),
- {'rating__stddev': Approximate(0.60, 1)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(StdDev('price')),
- {'price__stddev': Approximate(24.16, 2)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(StdDev('pages', sample=True)),
- {'pages__stddev': Approximate(341.19, 2)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(StdDev('rating', sample=True)),
- {'rating__stddev': Approximate(0.66, 2)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(StdDev('price', sample=True)),
- {'price__stddev': Approximate(26.46, 1)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(Variance('pages')),
- {'pages__variance': Approximate(97010.80, 1)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(Variance('rating')),
- {'rating__variance': Approximate(0.36, 1)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(Variance('price')),
- {'price__variance': Approximate(583.77, 1)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(Variance('pages', sample=True)),
- {'pages__variance': Approximate(116412.96, 1)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(Variance('rating', sample=True)),
- {'rating__variance': Approximate(0.44, 2)}
- )
-
- self.assertEqual(
- Book.objects.aggregate(Variance('price', sample=True)),
- {'price__variance': Approximate(700.53, 2)}
- )
diff --git a/parts/django/tests/regressiontests/app_loading/__init__.py b/parts/django/tests/regressiontests/app_loading/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/app_loading/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/app_loading/eggs/brokenapp.egg b/parts/django/tests/regressiontests/app_loading/eggs/brokenapp.egg
deleted file mode 100755
index 8aca671..0000000
--- a/parts/django/tests/regressiontests/app_loading/eggs/brokenapp.egg
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/app_loading/eggs/modelapp.egg b/parts/django/tests/regressiontests/app_loading/eggs/modelapp.egg
deleted file mode 100755
index c2370b5..0000000
--- a/parts/django/tests/regressiontests/app_loading/eggs/modelapp.egg
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/app_loading/eggs/nomodelapp.egg b/parts/django/tests/regressiontests/app_loading/eggs/nomodelapp.egg
deleted file mode 100755
index 5b8d217..0000000
--- a/parts/django/tests/regressiontests/app_loading/eggs/nomodelapp.egg
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/app_loading/eggs/omelet.egg b/parts/django/tests/regressiontests/app_loading/eggs/omelet.egg
deleted file mode 100755
index bd1c687..0000000
--- a/parts/django/tests/regressiontests/app_loading/eggs/omelet.egg
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/app_loading/models.py b/parts/django/tests/regressiontests/app_loading/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/app_loading/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/app_loading/parent/__init__.py b/parts/django/tests/regressiontests/app_loading/parent/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/app_loading/parent/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/app_loading/parent/app/__init__.py b/parts/django/tests/regressiontests/app_loading/parent/app/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/app_loading/parent/app/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/app_loading/parent/app1/__init__.py b/parts/django/tests/regressiontests/app_loading/parent/app1/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/app_loading/parent/app1/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/app_loading/parent/app_2/__init__.py b/parts/django/tests/regressiontests/app_loading/parent/app_2/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/app_loading/parent/app_2/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/app_loading/test_settings.py b/parts/django/tests/regressiontests/app_loading/test_settings.py
deleted file mode 100644
index e956311..0000000
--- a/parts/django/tests/regressiontests/app_loading/test_settings.py
+++ /dev/null
@@ -1,3 +0,0 @@
-INSTALLED_APPS = (
- 'parent.*',
-)
diff --git a/parts/django/tests/regressiontests/app_loading/tests.py b/parts/django/tests/regressiontests/app_loading/tests.py
deleted file mode 100644
index 4fb60b2..0000000
--- a/parts/django/tests/regressiontests/app_loading/tests.py
+++ /dev/null
@@ -1,83 +0,0 @@
-import copy
-import os
-import sys
-import time
-from unittest import TestCase
-
-from django.conf import Settings
-from django.db.models.loading import cache, load_app
-
-
-class InstalledAppsGlobbingTest(TestCase):
- def setUp(self):
- self.OLD_SYS_PATH = sys.path[:]
- sys.path.append(os.path.dirname(os.path.abspath(__file__)))
- self.OLD_TZ = os.environ.get("TZ")
-
- def test_globbing(self):
- settings = Settings('test_settings')
- self.assertEquals(settings.INSTALLED_APPS, ['parent.app', 'parent.app1', 'parent.app_2'])
-
- def tearDown(self):
- sys.path = self.OLD_SYS_PATH
- if hasattr(time, "tzset") and self.OLD_TZ:
- os.environ["TZ"] = self.OLD_TZ
- time.tzset()
-
-
-class EggLoadingTest(TestCase):
-
- def setUp(self):
- self.old_path = sys.path[:]
- self.egg_dir = '%s/eggs' % os.path.dirname(__file__)
-
- # This test adds dummy applications to the app cache. These
- # need to be removed in order to prevent bad interactions
- # with the flush operation in other tests.
- self.old_app_models = copy.deepcopy(cache.app_models)
- self.old_app_store = copy.deepcopy(cache.app_store)
-
- def tearDown(self):
- sys.path = self.old_path
- cache.app_models = self.old_app_models
- cache.app_store = self.old_app_store
-
- def test_egg1(self):
- """Models module can be loaded from an app in an egg"""
- egg_name = '%s/modelapp.egg' % self.egg_dir
- sys.path.append(egg_name)
- models = load_app('app_with_models')
- self.assertFalse(models is None)
-
- def test_egg2(self):
- """Loading an app from an egg that has no models returns no models (and no error)"""
- egg_name = '%s/nomodelapp.egg' % self.egg_dir
- sys.path.append(egg_name)
- models = load_app('app_no_models')
- self.assertTrue(models is None)
-
- def test_egg3(self):
- """Models module can be loaded from an app located under an egg's top-level package"""
- egg_name = '%s/omelet.egg' % self.egg_dir
- sys.path.append(egg_name)
- models = load_app('omelet.app_with_models')
- self.assertFalse(models is None)
-
- def test_egg4(self):
- """Loading an app with no models from under the top-level egg package generates no error"""
- egg_name = '%s/omelet.egg' % self.egg_dir
- sys.path.append(egg_name)
- models = load_app('omelet.app_no_models')
- self.assertTrue(models is None)
-
- def test_egg5(self):
- """Loading an app from an egg that has an import error in its models module raises that error"""
- egg_name = '%s/brokenapp.egg' % self.egg_dir
- sys.path.append(egg_name)
- self.assertRaises(ImportError, load_app, 'broken_app')
- try:
- load_app('broken_app')
- except ImportError, e:
- # Make sure the message is indicating the actual
- # problem in the broken app.
- self.assertTrue("modelz" in e.args[0])
diff --git a/parts/django/tests/regressiontests/backends/__init__.py b/parts/django/tests/regressiontests/backends/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/backends/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/backends/models.py b/parts/django/tests/regressiontests/backends/models.py
deleted file mode 100644
index ea7ff96..0000000
--- a/parts/django/tests/regressiontests/backends/models.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from django.db import models
-
-class Square(models.Model):
- root = models.IntegerField()
- square = models.PositiveIntegerField()
-
- def __unicode__(self):
- return "%s ** 2 == %s" % (self.root, self.square)
-
-class Person(models.Model):
- first_name = models.CharField(max_length=20)
- last_name = models.CharField(max_length=20)
-
- def __unicode__(self):
- return u'%s %s' % (self.first_name, self.last_name)
-
-class SchoolClass(models.Model):
- year = models.PositiveIntegerField()
- day = models.CharField(max_length=9, blank=True)
- last_updated = models.DateTimeField()
-
-
-class Reporter(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
-
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateField()
- reporter = models.ForeignKey(Reporter)
-
- def __unicode__(self):
- return self.headline
diff --git a/parts/django/tests/regressiontests/backends/tests.py b/parts/django/tests/regressiontests/backends/tests.py
deleted file mode 100644
index 10cec89..0000000
--- a/parts/django/tests/regressiontests/backends/tests.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# -*- coding: utf-8 -*-
-# Unit and doctests for specific database backends.
-import datetime
-import unittest
-
-from django.conf import settings
-from django.db import backend, connection, DEFAULT_DB_ALIAS, IntegrityError
-from django.db.backends.signals import connection_created
-from django.db.backends.postgresql import version as pg_version
-from django.test import TestCase, TransactionTestCase
-
-import models
-
-class OracleChecks(unittest.TestCase):
-
- def test_dbms_session(self):
- # If the backend is Oracle, test that we can call a standard
- # stored procedure through our cursor wrapper.
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
- convert_unicode = backend.convert_unicode
- cursor = connection.cursor()
- cursor.callproc(convert_unicode('DBMS_SESSION.SET_IDENTIFIER'),
- [convert_unicode('_django_testing!'),])
- return True
- else:
- return True
-
- def test_cursor_var(self):
- # If the backend is Oracle, test that we can pass cursor variables
- # as query parameters.
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
- cursor = connection.cursor()
- var = cursor.var(backend.Database.STRING)
- cursor.execute("BEGIN %s := 'X'; END; ", [var])
- self.assertEqual(var.getvalue(), 'X')
-
- def test_long_string(self):
- # If the backend is Oracle, test that we can save a text longer
- # than 4000 chars and read it properly
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
- c = connection.cursor()
- c.execute('CREATE TABLE ltext ("TEXT" NCLOB)')
- long_str = ''.join([unicode(x) for x in xrange(4000)])
- c.execute('INSERT INTO ltext VALUES (%s)',[long_str])
- c.execute('SELECT text FROM ltext')
- row = c.fetchone()
- self.assertEquals(long_str, row[0].read())
- c.execute('DROP TABLE ltext')
-
- def test_client_encoding(self):
- # If the backend is Oracle, test that the client encoding is set
- # correctly. This was broken under Cygwin prior to r14781.
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
- c = connection.cursor() # Ensure the connection is initialized.
- self.assertEqual(connection.connection.encoding, "UTF-8")
- self.assertEqual(connection.connection.nencoding, "UTF-8")
-
-class DateQuotingTest(TestCase):
-
- def test_django_date_trunc(self):
- """
- Test the custom ``django_date_trunc method``, in particular against
- fields which clash with strings passed to it (e.g. 'year') - see
- #12818__.
-
- __: http://code.djangoproject.com/ticket/12818
-
- """
- updated = datetime.datetime(2010, 2, 20)
- models.SchoolClass.objects.create(year=2009, last_updated=updated)
- years = models.SchoolClass.objects.dates('last_updated', 'year')
- self.assertEqual(list(years), [datetime.datetime(2010, 1, 1, 0, 0)])
-
- def test_django_extract(self):
- """
- Test the custom ``django_extract method``, in particular against fields
- which clash with strings passed to it (e.g. 'day') - see #12818__.
-
- __: http://code.djangoproject.com/ticket/12818
-
- """
- updated = datetime.datetime(2010, 2, 20)
- models.SchoolClass.objects.create(year=2009, last_updated=updated)
- classes = models.SchoolClass.objects.filter(last_updated__day=20)
- self.assertEqual(len(classes), 1)
-
-class ParameterHandlingTest(TestCase):
- def test_bad_parameter_count(self):
- "An executemany call with too many/not enough parameters will raise an exception (Refs #12612)"
- cursor = connection.cursor()
- query = ('INSERT INTO %s (%s, %s) VALUES (%%s, %%s)' % (
- connection.introspection.table_name_converter('backends_square'),
- connection.ops.quote_name('root'),
- connection.ops.quote_name('square')
- ))
- self.assertRaises(Exception, cursor.executemany, query, [(1,2,3),])
- self.assertRaises(Exception, cursor.executemany, query, [(1,),])
-
-class PostgresVersionTest(TestCase):
- def assert_parses(self, version_string, version):
- self.assertEqual(pg_version._parse_version(version_string), version)
-
- def test_parsing(self):
- self.assert_parses("PostgreSQL 8.3 beta4", (8, 3, None))
- self.assert_parses("PostgreSQL 8.3", (8, 3, None))
- self.assert_parses("EnterpriseDB 8.3", (8, 3, None))
- self.assert_parses("PostgreSQL 8.3.6", (8, 3, 6))
- self.assert_parses("PostgreSQL 8.4beta1", (8, 4, None))
- self.assert_parses("PostgreSQL 8.3.1 on i386-apple-darwin9.2.2, compiled by GCC i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5478)", (8, 3, 1))
-
-# Unfortunately with sqlite3 the in-memory test database cannot be
-# closed, and so it cannot be re-opened during testing, and so we
-# sadly disable this test for now.
-if settings.DATABASES[DEFAULT_DB_ALIAS]["ENGINE"] != "django.db.backends.sqlite3":
- class ConnectionCreatedSignalTest(TestCase):
- def test_signal(self):
- data = {}
- def receiver(sender, connection, **kwargs):
- data["connection"] = connection
-
- connection_created.connect(receiver)
- connection.close()
- cursor = connection.cursor()
- self.assertTrue(data["connection"] is connection)
-
- connection_created.disconnect(receiver)
- data.clear()
- cursor = connection.cursor()
- self.assertTrue(data == {})
-
-
-class BackendTestCase(TestCase):
- def test_cursor_executemany(self):
- #4896: Test cursor.executemany
- cursor = connection.cursor()
- qn = connection.ops.quote_name
- opts = models.Square._meta
- f1, f2 = opts.get_field('root'), opts.get_field('square')
- query = ('INSERT INTO %s (%s, %s) VALUES (%%s, %%s)'
- % (connection.introspection.table_name_converter(opts.db_table), qn(f1.column), qn(f2.column)))
- cursor.executemany(query, [(i, i**2) for i in range(-5, 6)])
- self.assertEqual(models.Square.objects.count(), 11)
- for i in range(-5, 6):
- square = models.Square.objects.get(root=i)
- self.assertEqual(square.square, i**2)
-
- #4765: executemany with params=[] does nothing
- cursor.executemany(query, [])
- self.assertEqual(models.Square.objects.count(), 11)
-
-
-# We don't make these tests conditional because that means we would need to
-# check and differentiate between:
-# * MySQL+InnoDB, MySQL+MYISAM (something we currently can't do).
-# * if sqlite3 (if/once we get #14204 fixed) has referential integrity turned
-# on or not, something that would be controlled by runtime support and user
-# preference.
-# verify if its type is django.database.db.IntegrityError.
-
-class FkConstraintsTests(TransactionTestCase):
-
- def setUp(self):
- # Create a Reporter.
- self.r = models.Reporter.objects.create(first_name='John', last_name='Smith')
-
- def test_integrity_checks_on_creation(self):
- """
- Try to create a model instance that violates a FK constraint. If it
- fails it should fail with IntegrityError.
- """
- a = models.Article(headline="This is a test", pub_date=datetime.datetime(2005, 7, 27), reporter_id=30)
- try:
- a.save()
- except IntegrityError:
- pass
-
- def test_integrity_checks_on_update(self):
- """
- Try to update a model instance introducing a FK constraint violation.
- If it fails it should fail with IntegrityError.
- """
- # Create an Article.
- models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r)
- # Retrive it from the DB
- a = models.Article.objects.get(headline="Test article")
- a.reporter_id = 30
- try:
- a.save()
- except IntegrityError:
- pass
- def test_unicode_fetches(self):
- #6254: fetchone, fetchmany, fetchall return strings as unicode objects
- qn = connection.ops.quote_name
- models.Person(first_name="John", last_name="Doe").save()
- models.Person(first_name="Jane", last_name="Doe").save()
- models.Person(first_name="Mary", last_name="Agnelline").save()
- models.Person(first_name="Peter", last_name="Parker").save()
- models.Person(first_name="Clark", last_name="Kent").save()
- opts2 = models.Person._meta
- f3, f4 = opts2.get_field('first_name'), opts2.get_field('last_name')
- query2 = ('SELECT %s, %s FROM %s ORDER BY %s'
- % (qn(f3.column), qn(f4.column), connection.introspection.table_name_converter(opts2.db_table),
- qn(f3.column)))
- cursor = connection.cursor()
- cursor.execute(query2)
- self.assertEqual(cursor.fetchone(), (u'Clark', u'Kent'))
- self.assertEqual(list(cursor.fetchmany(2)), [(u'Jane', u'Doe'), (u'John', u'Doe')])
- self.assertEqual(list(cursor.fetchall()), [(u'Mary', u'Agnelline'), (u'Peter', u'Parker')])
diff --git a/parts/django/tests/regressiontests/bash_completion/__init__.py b/parts/django/tests/regressiontests/bash_completion/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/regressiontests/bash_completion/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/bash_completion/management/__init__.py b/parts/django/tests/regressiontests/bash_completion/management/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/regressiontests/bash_completion/management/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/bash_completion/management/commands/__init__.py b/parts/django/tests/regressiontests/bash_completion/management/commands/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/regressiontests/bash_completion/management/commands/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/bash_completion/management/commands/test_command.py b/parts/django/tests/regressiontests/bash_completion/management/commands/test_command.py
deleted file mode 100644
index 5cb8820..0000000
--- a/parts/django/tests/regressiontests/bash_completion/management/commands/test_command.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import sys, os
-from optparse import OptionParser, make_option
-
-from django.core.management.base import BaseCommand
-
-
-class Command(BaseCommand):
- option_list = BaseCommand.option_list + (
- make_option("--list", action="store_true", dest="list",
- help="Print all options"),
- )
-
- def handle(self, *args, **options):
- pass
diff --git a/parts/django/tests/regressiontests/bash_completion/models.py b/parts/django/tests/regressiontests/bash_completion/models.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/regressiontests/bash_completion/models.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/bash_completion/tests.py b/parts/django/tests/regressiontests/bash_completion/tests.py
deleted file mode 100644
index 24c8b1d..0000000
--- a/parts/django/tests/regressiontests/bash_completion/tests.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-A series of tests to establish that the command-line bash completion works.
-"""
-import os
-import unittest
-import sys
-import StringIO
-
-from django.conf import settings
-from django.core.management import ManagementUtility
-
-class BashCompletionTests(unittest.TestCase):
- """
- Testing the Python level bash completion code.
- This requires setting up the environment as if we got passed data
- from bash.
- """
-
- def setUp(self):
- self.old_DJANGO_AUTO_COMPLETE = os.environ.get('DJANGO_AUTO_COMPLETE')
- os.environ['DJANGO_AUTO_COMPLETE'] = '1'
- self.output = StringIO.StringIO()
- self.old_stdout = sys.stdout
- sys.stdout = self.output
-
- def tearDown(self):
- sys.stdout = self.old_stdout
- if self.old_DJANGO_AUTO_COMPLETE:
- os.environ['DJANGO_AUTO_COMPLETE'] = self.old_DJANGO_AUTO_COMPLETE
- else:
- del os.environ['DJANGO_AUTO_COMPLETE']
-
- def _user_input(self, input_str):
- os.environ['COMP_WORDS'] = input_str
- os.environ['COMP_CWORD'] = str(len(input_str.split()) - 1)
- sys.argv = input_str.split(' ')
-
- def _run_autocomplete(self):
- util = ManagementUtility(argv=sys.argv)
- try:
- util.autocomplete()
- except SystemExit:
- pass
- return self.output.getvalue().strip().split('\n')
-
- def test_django_admin_py(self):
- "django_admin.py will autocomplete option flags"
- self._user_input('django-admin.py sqlall --v')
- output = self._run_autocomplete()
- self.assertEqual(output, ['--verbosity='])
-
- def test_manage_py(self):
- "manage.py will autocomplete option flags"
- self._user_input('manage.py sqlall --v')
- output = self._run_autocomplete()
- self.assertEqual(output, ['--verbosity='])
-
- def test_custom_command(self):
- "A custom command can autocomplete option flags"
- self._user_input('django-admin.py test_command --l')
- output = self._run_autocomplete()
- self.assertEqual(output, ['--list'])
-
- def test_subcommands(self):
- "Subcommands can be autocompleted"
- self._user_input('django-admin.py sql')
- output = self._run_autocomplete()
- self.assertEqual(output, ['sql sqlall sqlclear sqlcustom sqlflush sqlindexes sqlinitialdata sqlreset sqlsequencereset'])
-
- def test_help(self):
- "No errors, just an empty list if there are no autocomplete options"
- self._user_input('django-admin.py help --')
- output = self._run_autocomplete()
- self.assertEqual(output, [''])
-
- def test_runfcgi(self):
- "Command arguments will be autocompleted"
- self._user_input('django-admin.py runfcgi h')
- output = self._run_autocomplete()
- self.assertEqual(output, ['host='])
-
- def test_app_completion(self):
- "Application names will be autocompleted for an AppCommand"
- self._user_input('django-admin.py sqlall a')
- output = self._run_autocomplete()
- app_labels = [name.split('.')[-1] for name in settings.INSTALLED_APPS]
- self.assertEqual(output, sorted(label for label in app_labels if label.startswith('a')))
diff --git a/parts/django/tests/regressiontests/bug639/__init__.py b/parts/django/tests/regressiontests/bug639/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/bug639/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/bug639/models.py b/parts/django/tests/regressiontests/bug639/models.py
deleted file mode 100644
index b7e3880..0000000
--- a/parts/django/tests/regressiontests/bug639/models.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import tempfile
-
-from django.db import models
-from django.core.files.storage import FileSystemStorage
-from django.forms import ModelForm
-
-temp_storage_dir = tempfile.mkdtemp()
-temp_storage = FileSystemStorage(temp_storage_dir)
-
-class Photo(models.Model):
- title = models.CharField(max_length=30)
- image = models.FileField(storage=temp_storage, upload_to='tests')
-
- # Support code for the tests; this keeps track of how many times save()
- # gets called on each instance.
- def __init__(self, *args, **kwargs):
- super(Photo, self).__init__(*args, **kwargs)
- self._savecount = 0
-
- def save(self, force_insert=False, force_update=False):
- super(Photo, self).save(force_insert, force_update)
- self._savecount += 1
-
-class PhotoForm(ModelForm):
- class Meta:
- model = Photo
diff --git a/parts/django/tests/regressiontests/bug639/test.jpg b/parts/django/tests/regressiontests/bug639/test.jpg
deleted file mode 100644
index 391b57a..0000000
--- a/parts/django/tests/regressiontests/bug639/test.jpg
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/bug639/tests.py b/parts/django/tests/regressiontests/bug639/tests.py
deleted file mode 100644
index 2cc3a8a..0000000
--- a/parts/django/tests/regressiontests/bug639/tests.py
+++ /dev/null
@@ -1,41 +0,0 @@
-"""
-Tests for file field behavior, and specifically #639, in which Model.save()
-gets called *again* for each FileField. This test will fail if calling a
-ModelForm's save() method causes Model.save() to be called more than once.
-"""
-
-import os
-import shutil
-import unittest
-
-from django.core.files.uploadedfile import SimpleUploadedFile
-from regressiontests.bug639.models import Photo, PhotoForm, temp_storage_dir
-
-class Bug639Test(unittest.TestCase):
-
- def testBug639(self):
- """
- Simulate a file upload and check how many times Model.save() gets
- called.
- """
- # Grab an image for testing.
- filename = os.path.join(os.path.dirname(__file__), "test.jpg")
- img = open(filename, "rb").read()
-
- # Fake a POST QueryDict and FILES MultiValueDict.
- data = {'title': 'Testing'}
- files = {"image": SimpleUploadedFile('test.jpg', img, 'image/jpeg')}
-
- form = PhotoForm(data=data, files=files)
- p = form.save()
-
- # Check the savecount stored on the object (see the model).
- self.assertEqual(p._savecount, 1)
-
- def tearDown(self):
- """
- Make sure to delete the "uploaded" file to avoid clogging /tmp.
- """
- p = Photo.objects.get()
- p.image.delete(save=False)
- shutil.rmtree(temp_storage_dir)
diff --git a/parts/django/tests/regressiontests/bug8245/__init__.py b/parts/django/tests/regressiontests/bug8245/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/bug8245/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/bug8245/admin.py b/parts/django/tests/regressiontests/bug8245/admin.py
deleted file mode 100644
index 1812269..0000000
--- a/parts/django/tests/regressiontests/bug8245/admin.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.contrib import admin
-
-from models import Story
-
-
-admin.site.register(Story)
-raise Exception("Bad admin module")
diff --git a/parts/django/tests/regressiontests/bug8245/models.py b/parts/django/tests/regressiontests/bug8245/models.py
deleted file mode 100644
index 5643955..0000000
--- a/parts/django/tests/regressiontests/bug8245/models.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from django.db import models
-
-class Story(models.Model):
- title = models.CharField(max_length=10)
diff --git a/parts/django/tests/regressiontests/bug8245/tests.py b/parts/django/tests/regressiontests/bug8245/tests.py
deleted file mode 100644
index 5aa4a94..0000000
--- a/parts/django/tests/regressiontests/bug8245/tests.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from unittest import TestCase
-
-from django.contrib import admin
-
-
-class Bug8245Test(TestCase):
- """
- Test for bug #8245 - don't raise an AlreadyRegistered exception when using
- autodiscover() and an admin.py module contains an error.
- """
- def test_bug_8245(self):
- # The first time autodiscover is called, we should get our real error.
- try:
- admin.autodiscover()
- except Exception, e:
- self.assertEqual(str(e), "Bad admin module")
- else:
- self.fail(
- 'autodiscover should have raised a "Bad admin module" error.')
-
- # Calling autodiscover again should raise the very same error it did
- # the first time, not an AlreadyRegistered error.
- try:
- admin.autodiscover()
- except Exception, e:
- self.assertEqual(str(e), "Bad admin module")
- else:
- self.fail(
- 'autodiscover should have raised a "Bad admin module" error.')
diff --git a/parts/django/tests/regressiontests/builtin_server/__init__.py b/parts/django/tests/regressiontests/builtin_server/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/builtin_server/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/builtin_server/models.py b/parts/django/tests/regressiontests/builtin_server/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/builtin_server/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/builtin_server/tests.py b/parts/django/tests/regressiontests/builtin_server/tests.py
deleted file mode 100644
index c3cfef1..0000000
--- a/parts/django/tests/regressiontests/builtin_server/tests.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from unittest import TestCase
-from StringIO import StringIO
-from django.core.servers.basehttp import ServerHandler
-
-#
-# Tests for #9659: wsgi.file_wrapper in the builtin server.
-# We need to mock a couple of of handlers and keep track of what
-# gets called when using a couple kinds of WSGI apps.
-#
-
-class DummyHandler(object):
- def log_request(*args, **kwargs):
- pass
-
-class FileWrapperHandler(ServerHandler):
- def __init__(self, *args, **kwargs):
- ServerHandler.__init__(self, *args, **kwargs)
- self.request_handler = DummyHandler()
- self._used_sendfile = False
-
- def sendfile(self):
- self._used_sendfile = True
- return True
-
-def wsgi_app(environ, start_response):
- start_response('200 OK', [('Content-Type', 'text/plain')])
- return ['Hello World!']
-
-def wsgi_app_file_wrapper(environ, start_response):
- start_response('200 OK', [('Content-Type', 'text/plain')])
- return environ['wsgi.file_wrapper'](StringIO('foo'))
-
-class WSGIFileWrapperTests(TestCase):
- """
- Test that the wsgi.file_wrapper works for the builting server.
- """
-
- def test_file_wrapper_uses_sendfile(self):
- env = {'SERVER_PROTOCOL': 'HTTP/1.0'}
- err = StringIO()
- handler = FileWrapperHandler(None, StringIO(), err, env)
- handler.run(wsgi_app_file_wrapper)
- self.assert_(handler._used_sendfile)
-
- def test_file_wrapper_no_sendfile(self):
- env = {'SERVER_PROTOCOL': 'HTTP/1.0'}
- err = StringIO()
- handler = FileWrapperHandler(None, StringIO(), err, env)
- handler.run(wsgi_app)
- self.assertFalse(handler._used_sendfile)
- self.assertEqual(handler.stdout.getvalue().splitlines()[-1],'Hello World!')
diff --git a/parts/django/tests/regressiontests/cache/__init__.py b/parts/django/tests/regressiontests/cache/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/cache/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/cache/liberal_backend.py b/parts/django/tests/regressiontests/cache/liberal_backend.py
deleted file mode 100644
index 5c7e312..0000000
--- a/parts/django/tests/regressiontests/cache/liberal_backend.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.core.cache.backends.locmem import CacheClass as LocMemCacheClass
-
-class LiberalKeyValidationMixin(object):
- def validate_key(self, key):
- pass
-
-class CacheClass(LiberalKeyValidationMixin, LocMemCacheClass):
- pass
-
diff --git a/parts/django/tests/regressiontests/cache/models.py b/parts/django/tests/regressiontests/cache/models.py
deleted file mode 100644
index 643fd22..0000000
--- a/parts/django/tests/regressiontests/cache/models.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.db import models
-from datetime import datetime
-
-def expensive_calculation():
- expensive_calculation.num_runs += 1
- return datetime.now()
-
-class Poll(models.Model):
- question = models.CharField(max_length=200)
- answer = models.CharField(max_length=200)
- pub_date = models.DateTimeField('date published', default=expensive_calculation)
diff --git a/parts/django/tests/regressiontests/cache/tests.py b/parts/django/tests/regressiontests/cache/tests.py
deleted file mode 100644
index 7167e2f..0000000
--- a/parts/django/tests/regressiontests/cache/tests.py
+++ /dev/null
@@ -1,652 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Unit tests for cache framework
-# Uses whatever cache backend is set in the test settings file.
-
-import os
-import shutil
-import tempfile
-import time
-import unittest
-import warnings
-
-from django.conf import settings
-from django.core import management
-from django.core.cache import get_cache
-from django.core.cache.backends.base import InvalidCacheBackendError, CacheKeyWarning
-from django.http import HttpResponse, HttpRequest
-from django.middleware.cache import FetchFromCacheMiddleware, UpdateCacheMiddleware
-from django.test.utils import get_warnings_state, restore_warnings_state
-from django.utils import translation
-from django.utils.cache import patch_vary_headers, get_cache_key, learn_cache_key
-from django.utils.hashcompat import md5_constructor
-from regressiontests.cache.models import Poll, expensive_calculation
-
-# functions/classes for complex data type tests
-def f():
- return 42
-class C:
- def m(n):
- return 24
-
-class DummyCacheTests(unittest.TestCase):
- # The Dummy cache backend doesn't really behave like a test backend,
- # so it has different test requirements.
- def setUp(self):
- self.cache = get_cache('dummy://')
-
- def test_simple(self):
- "Dummy cache backend ignores cache set calls"
- self.cache.set("key", "value")
- self.assertEqual(self.cache.get("key"), None)
-
- def test_add(self):
- "Add doesn't do anything in dummy cache backend"
- self.cache.add("addkey1", "value")
- result = self.cache.add("addkey1", "newvalue")
- self.assertEqual(result, True)
- self.assertEqual(self.cache.get("addkey1"), None)
-
- def test_non_existent(self):
- "Non-existent keys aren't found in the dummy cache backend"
- self.assertEqual(self.cache.get("does_not_exist"), None)
- self.assertEqual(self.cache.get("does_not_exist", "bang!"), "bang!")
-
- def test_get_many(self):
- "get_many returns nothing for the dummy cache backend"
- self.cache.set('a', 'a')
- self.cache.set('b', 'b')
- self.cache.set('c', 'c')
- self.cache.set('d', 'd')
- self.assertEqual(self.cache.get_many(['a', 'c', 'd']), {})
- self.assertEqual(self.cache.get_many(['a', 'b', 'e']), {})
-
- def test_delete(self):
- "Cache deletion is transparently ignored on the dummy cache backend"
- self.cache.set("key1", "spam")
- self.cache.set("key2", "eggs")
- self.assertEqual(self.cache.get("key1"), None)
- self.cache.delete("key1")
- self.assertEqual(self.cache.get("key1"), None)
- self.assertEqual(self.cache.get("key2"), None)
-
- def test_has_key(self):
- "The has_key method doesn't ever return True for the dummy cache backend"
- self.cache.set("hello1", "goodbye1")
- self.assertEqual(self.cache.has_key("hello1"), False)
- self.assertEqual(self.cache.has_key("goodbye1"), False)
-
- def test_in(self):
- "The in operator doesn't ever return True for the dummy cache backend"
- self.cache.set("hello2", "goodbye2")
- self.assertEqual("hello2" in self.cache, False)
- self.assertEqual("goodbye2" in self.cache, False)
-
- def test_incr(self):
- "Dummy cache values can't be incremented"
- self.cache.set('answer', 42)
- self.assertRaises(ValueError, self.cache.incr, 'answer')
- self.assertRaises(ValueError, self.cache.incr, 'does_not_exist')
-
- def test_decr(self):
- "Dummy cache values can't be decremented"
- self.cache.set('answer', 42)
- self.assertRaises(ValueError, self.cache.decr, 'answer')
- self.assertRaises(ValueError, self.cache.decr, 'does_not_exist')
-
- def test_data_types(self):
- "All data types are ignored equally by the dummy cache"
- stuff = {
- 'string' : 'this is a string',
- 'int' : 42,
- 'list' : [1, 2, 3, 4],
- 'tuple' : (1, 2, 3, 4),
- 'dict' : {'A': 1, 'B' : 2},
- 'function' : f,
- 'class' : C,
- }
- self.cache.set("stuff", stuff)
- self.assertEqual(self.cache.get("stuff"), None)
-
- def test_expiration(self):
- "Expiration has no effect on the dummy cache"
- self.cache.set('expire1', 'very quickly', 1)
- self.cache.set('expire2', 'very quickly', 1)
- self.cache.set('expire3', 'very quickly', 1)
-
- time.sleep(2)
- self.assertEqual(self.cache.get("expire1"), None)
-
- self.cache.add("expire2", "newvalue")
- self.assertEqual(self.cache.get("expire2"), None)
- self.assertEqual(self.cache.has_key("expire3"), False)
-
- def test_unicode(self):
- "Unicode values are ignored by the dummy cache"
- stuff = {
- u'ascii': u'ascii_value',
- u'unicode_ascii': u'Iñtërnâtiônàlizætiøn1',
- u'Iñtërnâtiônàlizætiøn': u'Iñtërnâtiônàlizætiøn2',
- u'ascii': {u'x' : 1 }
- }
- for (key, value) in stuff.items():
- self.cache.set(key, value)
- self.assertEqual(self.cache.get(key), None)
-
- def test_set_many(self):
- "set_many does nothing for the dummy cache backend"
- self.cache.set_many({'a': 1, 'b': 2})
-
- def test_delete_many(self):
- "delete_many does nothing for the dummy cache backend"
- self.cache.delete_many(['a', 'b'])
-
- def test_clear(self):
- "clear does nothing for the dummy cache backend"
- self.cache.clear()
-
-
-class BaseCacheTests(object):
- # A common set of tests to apply to all cache backends
- def tearDown(self):
- self.cache.clear()
-
- def test_simple(self):
- # Simple cache set/get works
- self.cache.set("key", "value")
- self.assertEqual(self.cache.get("key"), "value")
-
- def test_add(self):
- # A key can be added to a cache
- self.cache.add("addkey1", "value")
- result = self.cache.add("addkey1", "newvalue")
- self.assertEqual(result, False)
- self.assertEqual(self.cache.get("addkey1"), "value")
-
- def test_non_existent(self):
- # Non-existent cache keys return as None/default
- # get with non-existent keys
- self.assertEqual(self.cache.get("does_not_exist"), None)
- self.assertEqual(self.cache.get("does_not_exist", "bang!"), "bang!")
-
- def test_get_many(self):
- # Multiple cache keys can be returned using get_many
- self.cache.set('a', 'a')
- self.cache.set('b', 'b')
- self.cache.set('c', 'c')
- self.cache.set('d', 'd')
- self.assertEqual(self.cache.get_many(['a', 'c', 'd']), {'a' : 'a', 'c' : 'c', 'd' : 'd'})
- self.assertEqual(self.cache.get_many(['a', 'b', 'e']), {'a' : 'a', 'b' : 'b'})
-
- def test_delete(self):
- # Cache keys can be deleted
- self.cache.set("key1", "spam")
- self.cache.set("key2", "eggs")
- self.assertEqual(self.cache.get("key1"), "spam")
- self.cache.delete("key1")
- self.assertEqual(self.cache.get("key1"), None)
- self.assertEqual(self.cache.get("key2"), "eggs")
-
- def test_has_key(self):
- # The cache can be inspected for cache keys
- self.cache.set("hello1", "goodbye1")
- self.assertEqual(self.cache.has_key("hello1"), True)
- self.assertEqual(self.cache.has_key("goodbye1"), False)
-
- def test_in(self):
- # The in operator can be used to inspet cache contents
- self.cache.set("hello2", "goodbye2")
- self.assertEqual("hello2" in self.cache, True)
- self.assertEqual("goodbye2" in self.cache, False)
-
- def test_incr(self):
- # Cache values can be incremented
- self.cache.set('answer', 41)
- self.assertEqual(self.cache.incr('answer'), 42)
- self.assertEqual(self.cache.get('answer'), 42)
- self.assertEqual(self.cache.incr('answer', 10), 52)
- self.assertEqual(self.cache.get('answer'), 52)
- self.assertRaises(ValueError, self.cache.incr, 'does_not_exist')
-
- def test_decr(self):
- # Cache values can be decremented
- self.cache.set('answer', 43)
- self.assertEqual(self.cache.decr('answer'), 42)
- self.assertEqual(self.cache.get('answer'), 42)
- self.assertEqual(self.cache.decr('answer', 10), 32)
- self.assertEqual(self.cache.get('answer'), 32)
- self.assertRaises(ValueError, self.cache.decr, 'does_not_exist')
-
- def test_data_types(self):
- # Many different data types can be cached
- stuff = {
- 'string' : 'this is a string',
- 'int' : 42,
- 'list' : [1, 2, 3, 4],
- 'tuple' : (1, 2, 3, 4),
- 'dict' : {'A': 1, 'B' : 2},
- 'function' : f,
- 'class' : C,
- }
- self.cache.set("stuff", stuff)
- self.assertEqual(self.cache.get("stuff"), stuff)
-
- def test_cache_read_for_model_instance(self):
- # Don't want fields with callable as default to be called on cache read
- expensive_calculation.num_runs = 0
- Poll.objects.all().delete()
- my_poll = Poll.objects.create(question="Well?")
- self.assertEqual(Poll.objects.count(), 1)
- pub_date = my_poll.pub_date
- self.cache.set('question', my_poll)
- cached_poll = self.cache.get('question')
- self.assertEqual(cached_poll.pub_date, pub_date)
- # We only want the default expensive calculation run once
- self.assertEqual(expensive_calculation.num_runs, 1)
-
- def test_cache_write_for_model_instance_with_deferred(self):
- # Don't want fields with callable as default to be called on cache write
- expensive_calculation.num_runs = 0
- Poll.objects.all().delete()
- my_poll = Poll.objects.create(question="What?")
- self.assertEqual(expensive_calculation.num_runs, 1)
- defer_qs = Poll.objects.all().defer('question')
- self.assertEqual(defer_qs.count(), 1)
- self.assertEqual(expensive_calculation.num_runs, 1)
- self.cache.set('deferred_queryset', defer_qs)
- # cache set should not re-evaluate default functions
- self.assertEqual(expensive_calculation.num_runs, 1)
-
- def test_cache_read_for_model_instance_with_deferred(self):
- # Don't want fields with callable as default to be called on cache read
- expensive_calculation.num_runs = 0
- Poll.objects.all().delete()
- my_poll = Poll.objects.create(question="What?")
- self.assertEqual(expensive_calculation.num_runs, 1)
- defer_qs = Poll.objects.all().defer('question')
- self.assertEqual(defer_qs.count(), 1)
- self.cache.set('deferred_queryset', defer_qs)
- self.assertEqual(expensive_calculation.num_runs, 1)
- runs_before_cache_read = expensive_calculation.num_runs
- cached_polls = self.cache.get('deferred_queryset')
- # We only want the default expensive calculation run on creation and set
- self.assertEqual(expensive_calculation.num_runs, runs_before_cache_read)
-
- def test_expiration(self):
- # Cache values can be set to expire
- self.cache.set('expire1', 'very quickly', 1)
- self.cache.set('expire2', 'very quickly', 1)
- self.cache.set('expire3', 'very quickly', 1)
-
- time.sleep(2)
- self.assertEqual(self.cache.get("expire1"), None)
-
- self.cache.add("expire2", "newvalue")
- self.assertEqual(self.cache.get("expire2"), "newvalue")
- self.assertEqual(self.cache.has_key("expire3"), False)
-
- def test_unicode(self):
- # Unicode values can be cached
- stuff = {
- u'ascii': u'ascii_value',
- u'unicode_ascii': u'Iñtërnâtiônàlizætiøn1',
- u'Iñtërnâtiônàlizætiøn': u'Iñtërnâtiônàlizætiøn2',
- u'ascii': {u'x' : 1 }
- }
- for (key, value) in stuff.items():
- self.cache.set(key, value)
- self.assertEqual(self.cache.get(key), value)
-
- def test_binary_string(self):
- # Binary strings should be cachable
- from zlib import compress, decompress
- value = 'value_to_be_compressed'
- compressed_value = compress(value)
- self.cache.set('binary1', compressed_value)
- compressed_result = self.cache.get('binary1')
- self.assertEqual(compressed_value, compressed_result)
- self.assertEqual(value, decompress(compressed_result))
-
- def test_set_many(self):
- # Multiple keys can be set using set_many
- self.cache.set_many({"key1": "spam", "key2": "eggs"})
- self.assertEqual(self.cache.get("key1"), "spam")
- self.assertEqual(self.cache.get("key2"), "eggs")
-
- def test_set_many_expiration(self):
- # set_many takes a second ``timeout`` parameter
- self.cache.set_many({"key1": "spam", "key2": "eggs"}, 1)
- time.sleep(2)
- self.assertEqual(self.cache.get("key1"), None)
- self.assertEqual(self.cache.get("key2"), None)
-
- def test_delete_many(self):
- # Multiple keys can be deleted using delete_many
- self.cache.set("key1", "spam")
- self.cache.set("key2", "eggs")
- self.cache.set("key3", "ham")
- self.cache.delete_many(["key1", "key2"])
- self.assertEqual(self.cache.get("key1"), None)
- self.assertEqual(self.cache.get("key2"), None)
- self.assertEqual(self.cache.get("key3"), "ham")
-
- def test_clear(self):
- # The cache can be emptied using clear
- self.cache.set("key1", "spam")
- self.cache.set("key2", "eggs")
- self.cache.clear()
- self.assertEqual(self.cache.get("key1"), None)
- self.assertEqual(self.cache.get("key2"), None)
-
- def test_long_timeout(self):
- '''
- Using a timeout greater than 30 days makes memcached think
- it is an absolute expiration timestamp instead of a relative
- offset. Test that we honour this convention. Refs #12399.
- '''
- self.cache.set('key1', 'eggs', 60*60*24*30 + 1) #30 days + 1 second
- self.assertEqual(self.cache.get('key1'), 'eggs')
-
- self.cache.add('key2', 'ham', 60*60*24*30 + 1)
- self.assertEqual(self.cache.get('key2'), 'ham')
-
- self.cache.set_many({'key3': 'sausage', 'key4': 'lobster bisque'}, 60*60*24*30 + 1)
- self.assertEqual(self.cache.get('key3'), 'sausage')
- self.assertEqual(self.cache.get('key4'), 'lobster bisque')
-
- def perform_cull_test(self, initial_count, final_count):
- """This is implemented as a utility method, because only some of the backends
- implement culling. The culling algorithm also varies slightly, so the final
- number of entries will vary between backends"""
- # Create initial cache key entries. This will overflow the cache, causing a cull
- for i in range(1, initial_count):
- self.cache.set('cull%d' % i, 'value', 1000)
- count = 0
- # Count how many keys are left in the cache.
- for i in range(1, initial_count):
- if self.cache.has_key('cull%d' % i):
- count = count + 1
- self.assertEqual(count, final_count)
-
- def test_invalid_keys(self):
- """
- All the builtin backends (except memcached, see below) should warn on
- keys that would be refused by memcached. This encourages portable
- caching code without making it too difficult to use production backends
- with more liberal key rules. Refs #6447.
-
- """
- # On Python 2.6+ we could use the catch_warnings context
- # manager to test this warning nicely. Since we can't do that
- # yet, the cleanest option is to temporarily ask for
- # CacheKeyWarning to be raised as an exception.
- _warnings_state = get_warnings_state()
- warnings.simplefilter("error", CacheKeyWarning)
-
- try:
- # memcached does not allow whitespace or control characters in keys
- self.assertRaises(CacheKeyWarning, self.cache.set, 'key with spaces', 'value')
- # memcached limits key length to 250
- self.assertRaises(CacheKeyWarning, self.cache.set, 'a' * 251, 'value')
- finally:
- restore_warnings_state(_warnings_state)
-
-class DBCacheTests(unittest.TestCase, BaseCacheTests):
- def setUp(self):
- # Spaces are used in the table name to ensure quoting/escaping is working
- self._table_name = 'test cache table'
- management.call_command('createcachetable', self._table_name, verbosity=0, interactive=False)
- self.cache = get_cache('db://%s?max_entries=30' % self._table_name)
-
- def tearDown(self):
- from django.db import connection
- cursor = connection.cursor()
- cursor.execute('DROP TABLE %s' % connection.ops.quote_name(self._table_name))
-
- def test_cull(self):
- self.perform_cull_test(50, 29)
-
-class LocMemCacheTests(unittest.TestCase, BaseCacheTests):
- def setUp(self):
- self.cache = get_cache('locmem://?max_entries=30')
-
- def test_cull(self):
- self.perform_cull_test(50, 29)
-
-# memcached backend isn't guaranteed to be available.
-# To check the memcached backend, the test settings file will
-# need to contain a CACHE_BACKEND setting that points at
-# your memcache server.
-if settings.CACHE_BACKEND.startswith('memcached://'):
- class MemcachedCacheTests(unittest.TestCase, BaseCacheTests):
- def setUp(self):
- self.cache = get_cache(settings.CACHE_BACKEND)
-
- def test_invalid_keys(self):
- """
- On memcached, we don't introduce a duplicate key validation
- step (for speed reasons), we just let the memcached API
- library raise its own exception on bad keys. Refs #6447.
-
- In order to be memcached-API-library agnostic, we only assert
- that a generic exception of some kind is raised.
-
- """
- # memcached does not allow whitespace or control characters in keys
- self.assertRaises(Exception, self.cache.set, 'key with spaces', 'value')
- # memcached limits key length to 250
- self.assertRaises(Exception, self.cache.set, 'a' * 251, 'value')
-
-
-class FileBasedCacheTests(unittest.TestCase, BaseCacheTests):
- """
- Specific test cases for the file-based cache.
- """
- def setUp(self):
- self.dirname = tempfile.mkdtemp()
- self.cache = get_cache('file://%s?max_entries=30' % self.dirname)
-
- def test_hashing(self):
- """Test that keys are hashed into subdirectories correctly"""
- self.cache.set("foo", "bar")
- keyhash = md5_constructor("foo").hexdigest()
- keypath = os.path.join(self.dirname, keyhash[:2], keyhash[2:4], keyhash[4:])
- self.assert_(os.path.exists(keypath))
-
- def test_subdirectory_removal(self):
- """
- Make sure that the created subdirectories are correctly removed when empty.
- """
- self.cache.set("foo", "bar")
- keyhash = md5_constructor("foo").hexdigest()
- keypath = os.path.join(self.dirname, keyhash[:2], keyhash[2:4], keyhash[4:])
- self.assert_(os.path.exists(keypath))
-
- self.cache.delete("foo")
- self.assert_(not os.path.exists(keypath))
- self.assert_(not os.path.exists(os.path.dirname(keypath)))
- self.assert_(not os.path.exists(os.path.dirname(os.path.dirname(keypath))))
-
- def test_cull(self):
- self.perform_cull_test(50, 28)
-
-class CustomCacheKeyValidationTests(unittest.TestCase):
- """
- Tests for the ability to mixin a custom ``validate_key`` method to
- a custom cache backend that otherwise inherits from a builtin
- backend, and override the default key validation. Refs #6447.
-
- """
- def test_custom_key_validation(self):
- cache = get_cache('regressiontests.cache.liberal_backend://')
-
- # this key is both longer than 250 characters, and has spaces
- key = 'some key with spaces' * 15
- val = 'a value'
- cache.set(key, val)
- self.assertEqual(cache.get(key), val)
-
-class CacheUtils(unittest.TestCase):
- """TestCase for django.utils.cache functions."""
-
- def setUp(self):
- self.path = '/cache/test/'
- self.old_settings_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- self.old_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
- self.orig_use_i18n = settings.USE_I18N
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
- settings.CACHE_MIDDLEWARE_SECONDS = 1
- settings.USE_I18N = False
-
- def tearDown(self):
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.old_settings_key_prefix
- settings.CACHE_MIDDLEWARE_SECONDS = self.old_middleware_seconds
- settings.USE_I18N = self.orig_use_i18n
-
- def _get_request(self, path):
- request = HttpRequest()
- request.META = {
- 'SERVER_NAME': 'testserver',
- 'SERVER_PORT': 80,
- }
- request.path = request.path_info = "/cache/%s" % path
- return request
-
- def test_patch_vary_headers(self):
- headers = (
- # Initial vary, new headers, resulting vary.
- (None, ('Accept-Encoding',), 'Accept-Encoding'),
- ('Accept-Encoding', ('accept-encoding',), 'Accept-Encoding'),
- ('Accept-Encoding', ('ACCEPT-ENCODING',), 'Accept-Encoding'),
- ('Cookie', ('Accept-Encoding',), 'Cookie, Accept-Encoding'),
- ('Cookie, Accept-Encoding', ('Accept-Encoding',), 'Cookie, Accept-Encoding'),
- ('Cookie, Accept-Encoding', ('Accept-Encoding', 'cookie'), 'Cookie, Accept-Encoding'),
- (None, ('Accept-Encoding', 'COOKIE'), 'Accept-Encoding, COOKIE'),
- ('Cookie, Accept-Encoding', ('Accept-Encoding', 'cookie'), 'Cookie, Accept-Encoding'),
- ('Cookie , Accept-Encoding', ('Accept-Encoding', 'cookie'), 'Cookie, Accept-Encoding'),
- )
- for initial_vary, newheaders, resulting_vary in headers:
- response = HttpResponse()
- if initial_vary is not None:
- response['Vary'] = initial_vary
- patch_vary_headers(response, newheaders)
- self.assertEqual(response['Vary'], resulting_vary)
-
- def test_get_cache_key(self):
- request = self._get_request(self.path)
- response = HttpResponse()
- key_prefix = 'localprefix'
- # Expect None if no headers have been set yet.
- self.assertEqual(get_cache_key(request), None)
- # Set headers to an empty list.
- learn_cache_key(request, response)
- self.assertEqual(get_cache_key(request), 'views.decorators.cache.cache_page.settingsprefix.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
- # Verify that a specified key_prefix is taken in to account.
- learn_cache_key(request, response, key_prefix=key_prefix)
- self.assertEqual(get_cache_key(request, key_prefix=key_prefix), 'views.decorators.cache.cache_page.localprefix.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
-
- def test_learn_cache_key(self):
- request = self._get_request(self.path)
- response = HttpResponse()
- response['Vary'] = 'Pony'
- # Make sure that the Vary header is added to the key hash
- learn_cache_key(request, response)
- self.assertEqual(get_cache_key(request), 'views.decorators.cache.cache_page.settingsprefix.a8c87a3d8c44853d7f79474f7ffe4ad5.d41d8cd98f00b204e9800998ecf8427e')
-
-class CacheI18nTest(unittest.TestCase):
-
- def setUp(self):
- self.orig_cache_middleware_seconds = settings.CACHE_MIDDLEWARE_SECONDS
- self.orig_cache_middleware_key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- self.orig_cache_backend = settings.CACHE_BACKEND
- self.orig_use_i18n = settings.USE_I18N
- self.orig_languages = settings.LANGUAGES
- settings.LANGUAGES = (
- ('en', 'English'),
- ('es', 'Spanish'),
- )
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = 'settingsprefix'
- self.path = '/cache/test/'
-
- def tearDown(self):
- settings.CACHE_MIDDLEWARE_SECONDS = self.orig_cache_middleware_seconds
- settings.CACHE_MIDDLEWARE_KEY_PREFIX = self.orig_cache_middleware_key_prefix
- settings.CACHE_BACKEND = self.orig_cache_backend
- settings.USE_I18N = self.orig_use_i18n
- settings.LANGUAGES = self.orig_languages
- translation.deactivate()
-
- def _get_request(self):
- request = HttpRequest()
- request.META = {
- 'SERVER_NAME': 'testserver',
- 'SERVER_PORT': 80,
- }
- request.path = request.path_info = self.path
- return request
-
- def _get_request_cache(self):
- request = HttpRequest()
- request.META = {
- 'SERVER_NAME': 'testserver',
- 'SERVER_PORT': 80,
- }
- request.path = request.path_info = self.path
- request._cache_update_cache = True
- request.method = 'GET'
- request.session = {}
- return request
-
- def test_cache_key_i18n(self):
- settings.USE_I18N = True
- request = self._get_request()
- lang = translation.get_language()
- response = HttpResponse()
- key = learn_cache_key(request, response)
- self.assertTrue(key.endswith(lang), "Cache keys should include the language name when i18n is active")
- key2 = get_cache_key(request)
- self.assertEqual(key, key2)
-
- def test_cache_key_no_i18n (self):
- settings.USE_I18N = False
- request = self._get_request()
- lang = translation.get_language()
- response = HttpResponse()
- key = learn_cache_key(request, response)
- self.assertFalse(key.endswith(lang), "Cache keys shouldn't include the language name when i18n is inactive")
-
- def test_middleware(self):
- def set_cache(request, lang, msg):
- translation.activate(lang)
- response = HttpResponse()
- response.content= msg
- return UpdateCacheMiddleware().process_response(request, response)
-
- settings.CACHE_MIDDLEWARE_SECONDS = 60
- settings.CACHE_MIDDLEWARE_KEY_PREFIX="test"
- settings.CACHE_BACKEND='locmem:///'
- settings.USE_I18N = True
- en_message ="Hello world!"
- es_message ="Hola mundo!"
-
- request = self._get_request_cache()
- set_cache(request, 'en', en_message)
- get_cache_data = FetchFromCacheMiddleware().process_request(request)
- # Check that we can recover the cache
- self.assertNotEqual(get_cache_data.content, None)
- self.assertEqual(en_message, get_cache_data.content)
- # change the session language and set content
- request = self._get_request_cache()
- set_cache(request, 'es', es_message)
- # change again the language
- translation.activate('en')
- # retrieve the content from cache
- get_cache_data = FetchFromCacheMiddleware().process_request(request)
- self.assertEqual(get_cache_data.content, en_message)
- # change again the language
- translation.activate('es')
- get_cache_data = FetchFromCacheMiddleware().process_request(request)
- self.assertEqual(get_cache_data.content, es_message)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/parts/django/tests/regressiontests/comment_tests/__init__.py b/parts/django/tests/regressiontests/comment_tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/comment_tests/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/comment_tests/custom_comments/__init__.py b/parts/django/tests/regressiontests/comment_tests/custom_comments/__init__.py
deleted file mode 100644
index 598927e..0000000
--- a/parts/django/tests/regressiontests/comment_tests/custom_comments/__init__.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from django.core import urlresolvers
-from regressiontests.comment_tests.custom_comments.models import CustomComment
-from regressiontests.comment_tests.custom_comments.forms import CustomCommentForm
-
-def get_model():
- return CustomComment
-
-def get_form():
- return CustomCommentForm
-
-def get_form_target():
- return urlresolvers.reverse(
- "regressiontests.comment_tests.custom_comments.views.custom_submit_comment"
- )
-
-def get_flag_url(c):
- return urlresolvers.reverse(
- "regressiontests.comment_tests.custom_comments.views.custom_flag_comment",
- args=(c.id,)
- )
-
-def get_delete_url(c):
- return urlresolvers.reverse(
- "regressiontests.comment_tests.custom_comments.views.custom_delete_comment",
- args=(c.id,)
- )
-
-def get_approve_url(c):
- return urlresolvers.reverse(
- "regressiontests.comment_tests.custom_comments.views.custom_approve_comment",
- args=(c.id,)
- )
diff --git a/parts/django/tests/regressiontests/comment_tests/custom_comments/forms.py b/parts/django/tests/regressiontests/comment_tests/custom_comments/forms.py
deleted file mode 100644
index b788cdc..0000000
--- a/parts/django/tests/regressiontests/comment_tests/custom_comments/forms.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from django import forms
-
-class CustomCommentForm(forms.Form):
- pass
diff --git a/parts/django/tests/regressiontests/comment_tests/custom_comments/models.py b/parts/django/tests/regressiontests/comment_tests/custom_comments/models.py
deleted file mode 100644
index 592ad79..0000000
--- a/parts/django/tests/regressiontests/comment_tests/custom_comments/models.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from django.db import models
-
-class CustomComment(models.Model):
- pass
diff --git a/parts/django/tests/regressiontests/comment_tests/custom_comments/views.py b/parts/django/tests/regressiontests/comment_tests/custom_comments/views.py
deleted file mode 100644
index 93cea9d..0000000
--- a/parts/django/tests/regressiontests/comment_tests/custom_comments/views.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.http import HttpResponse
-
-def custom_submit_comment(request):
- return HttpResponse("Hello from the custom submit comment view.")
-
-def custom_flag_comment(request, comment_id):
- return HttpResponse("Hello from the custom flag view.")
-
-def custom_delete_comment(request, comment_id):
- return HttpResponse("Hello from the custom delete view.")
-
-def custom_approve_comment(request, comment_id):
- return HttpResponse("Hello from the custom approve view.")
diff --git a/parts/django/tests/regressiontests/comment_tests/fixtures/comment_tests.json b/parts/django/tests/regressiontests/comment_tests/fixtures/comment_tests.json
deleted file mode 100644
index 55e2161..0000000
--- a/parts/django/tests/regressiontests/comment_tests/fixtures/comment_tests.json
+++ /dev/null
@@ -1,53 +0,0 @@
-[
- {
- "model" : "comment_tests.book",
- "pk" : 1,
- "fields" : {
- "dewey_decimal" : "12.34"
- }
- },
- {
- "model" : "comment_tests.author",
- "pk" : 1,
- "fields" : {
- "first_name" : "John",
- "last_name" : "Smith"
- }
- },
- {
- "model" : "comment_tests.author",
- "pk" : 2,
- "fields" : {
- "first_name" : "Peter",
- "last_name" : "Jones"
- }
- },
- {
- "model" : "comment_tests.article",
- "pk" : 1,
- "fields" : {
- "author" : 1,
- "headline" : "Man Bites Dog"
- }
- },
- {
- "model" : "comment_tests.article",
- "pk" : 2,
- "fields" : {
- "author" : 2,
- "headline" : "Dog Bites Man"
- }
- },
-
- {
- "model" : "auth.user",
- "pk" : 100,
- "fields" : {
- "username" : "normaluser",
- "password" : "34ea4aaaf24efcbb4b30d27302f8657f",
- "first_name": "Joe",
- "last_name": "Normal",
- "email": "joe.normal@example.com"
- }
- }
-]
diff --git a/parts/django/tests/regressiontests/comment_tests/fixtures/comment_utils.xml b/parts/django/tests/regressiontests/comment_tests/fixtures/comment_utils.xml
deleted file mode 100644
index a39bbf6..0000000
--- a/parts/django/tests/regressiontests/comment_tests/fixtures/comment_utils.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="comment_tests.entry">
- <field type="CharField" name="title">ABC</field>
- <field type="TextField" name="body">This is the body</field>
- <field type="DateField" name="pub_date">2008-01-01</field>
- <field type="BooleanField" name="enable_comments">True</field>
- </object>
- <object pk="2" model="comment_tests.entry">
- <field type="CharField" name="title">XYZ</field>
- <field type="TextField" name="body">Text here</field>
- <field type="DateField" name="pub_date">2008-01-02</field>
- <field type="BooleanField" name="enable_comments">False</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/comment_tests/models.py b/parts/django/tests/regressiontests/comment_tests/models.py
deleted file mode 100644
index 8877ea1..0000000
--- a/parts/django/tests/regressiontests/comment_tests/models.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""
-Comments may be attached to any object. See the comment documentation for
-more information.
-"""
-
-from django.db import models
-from django.test import TestCase
-
-class Author(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
-
- def __str__(self):
- return '%s %s' % (self.first_name, self.last_name)
-
-class Article(models.Model):
- author = models.ForeignKey(Author)
- headline = models.CharField(max_length=100)
-
- def __str__(self):
- return self.headline
-
-class Entry(models.Model):
- title = models.CharField(max_length=250)
- body = models.TextField()
- pub_date = models.DateField()
- enable_comments = models.BooleanField()
-
- def __str__(self):
- return self.title
-
-class Book(models.Model):
- dewey_decimal = models.DecimalField(primary_key = True, decimal_places=2, max_digits=5)
- \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/__init__.py b/parts/django/tests/regressiontests/comment_tests/tests/__init__.py
deleted file mode 100644
index 449fea4..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/__init__.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from django.contrib.auth.models import User
-from django.contrib.comments.forms import CommentForm
-from django.contrib.comments.models import Comment
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.sites.models import Site
-from django.test import TestCase
-from regressiontests.comment_tests.models import Article, Author
-
-# Shortcut
-CT = ContentType.objects.get_for_model
-
-# Helper base class for comment tests that need data.
-class CommentTestCase(TestCase):
- fixtures = ["comment_tests"]
- urls = 'django.contrib.comments.urls'
-
- def createSomeComments(self):
- # Two anonymous comments on two different objects
- c1 = Comment.objects.create(
- content_type = CT(Article),
- object_pk = "1",
- user_name = "Joe Somebody",
- user_email = "jsomebody@example.com",
- user_url = "http://example.com/~joe/",
- comment = "First!",
- site = Site.objects.get_current(),
- )
- c2 = Comment.objects.create(
- content_type = CT(Author),
- object_pk = "1",
- user_name = "Joe Somebody",
- user_email = "jsomebody@example.com",
- user_url = "http://example.com/~joe/",
- comment = "First here, too!",
- site = Site.objects.get_current(),
- )
-
- # Two authenticated comments: one on the same Article, and
- # one on a different Author
- user = User.objects.create(
- username = "frank_nobody",
- first_name = "Frank",
- last_name = "Nobody",
- email = "fnobody@example.com",
- password = "",
- is_staff = False,
- is_active = True,
- is_superuser = False,
- )
- c3 = Comment.objects.create(
- content_type = CT(Article),
- object_pk = "1",
- user = user,
- user_url = "http://example.com/~frank/",
- comment = "Damn, I wanted to be first.",
- site = Site.objects.get_current(),
- )
- c4 = Comment.objects.create(
- content_type = CT(Author),
- object_pk = "2",
- user = user,
- user_url = "http://example.com/~frank/",
- comment = "You get here first, too?",
- site = Site.objects.get_current(),
- )
-
- return c1, c2, c3, c4
-
- def getData(self):
- return {
- 'name' : 'Jim Bob',
- 'email' : 'jim.bob@example.com',
- 'url' : '',
- 'comment' : 'This is my comment',
- }
-
- def getValidData(self, obj):
- f = CommentForm(obj)
- d = self.getData()
- d.update(f.initial)
- return d
-
-from regressiontests.comment_tests.tests.app_api_tests import *
-from regressiontests.comment_tests.tests.model_tests import *
-from regressiontests.comment_tests.tests.comment_form_tests import *
-from regressiontests.comment_tests.tests.templatetag_tests import *
-from regressiontests.comment_tests.tests.comment_view_tests import *
-from regressiontests.comment_tests.tests.moderation_view_tests import *
-from regressiontests.comment_tests.tests.comment_utils_moderators_tests import *
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/app_api_tests.py b/parts/django/tests/regressiontests/comment_tests/tests/app_api_tests.py
deleted file mode 100644
index c4d9ebf..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/app_api_tests.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from django.conf import settings
-from django.contrib import comments
-from django.contrib.comments.models import Comment
-from django.contrib.comments.forms import CommentForm
-from regressiontests.comment_tests.tests import CommentTestCase
-
-class CommentAppAPITests(CommentTestCase):
- """Tests for the "comment app" API"""
-
- def testGetCommentApp(self):
- self.assertEqual(comments.get_comment_app(), comments)
-
- def testGetForm(self):
- self.assertEqual(comments.get_form(), CommentForm)
-
- def testGetFormTarget(self):
- self.assertEqual(comments.get_form_target(), "/post/")
-
- def testGetFlagURL(self):
- c = Comment(id=12345)
- self.assertEqual(comments.get_flag_url(c), "/flag/12345/")
-
- def getGetDeleteURL(self):
- c = Comment(id=12345)
- self.assertEqual(comments.get_delete_url(c), "/delete/12345/")
-
- def getGetApproveURL(self):
- c = Comment(id=12345)
- self.assertEqual(comments.get_approve_url(c), "/approve/12345/")
-
-
-class CustomCommentTest(CommentTestCase):
- urls = 'regressiontests.comment_tests.urls'
-
- def setUp(self):
- self.old_comments_app = getattr(settings, 'COMMENTS_APP', None)
- settings.COMMENTS_APP = 'regressiontests.comment_tests.custom_comments'
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + [settings.COMMENTS_APP,]
-
- def tearDown(self):
- del settings.INSTALLED_APPS[-1]
- settings.COMMENTS_APP = self.old_comments_app
- if settings.COMMENTS_APP is None:
- delattr(settings._wrapped, 'COMMENTS_APP')
-
- def testGetCommentApp(self):
- from regressiontests.comment_tests import custom_comments
- self.assertEqual(comments.get_comment_app(), custom_comments)
-
- def testGetModel(self):
- from regressiontests.comment_tests.custom_comments.models import CustomComment
- self.assertEqual(comments.get_model(), CustomComment)
-
- def testGetForm(self):
- from regressiontests.comment_tests.custom_comments.forms import CustomCommentForm
- self.assertEqual(comments.get_form(), CustomCommentForm)
-
- def testGetFormTarget(self):
- self.assertEqual(comments.get_form_target(), "/post/")
-
- def testGetFlagURL(self):
- c = Comment(id=12345)
- self.assertEqual(comments.get_flag_url(c), "/flag/12345/")
-
- def getGetDeleteURL(self):
- c = Comment(id=12345)
- self.assertEqual(comments.get_delete_url(c), "/delete/12345/")
-
- def getGetApproveURL(self):
- c = Comment(id=12345)
- self.assertEqual(comments.get_approve_url(c), "/approve/12345/")
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/comment_form_tests.py b/parts/django/tests/regressiontests/comment_tests/tests/comment_form_tests.py
deleted file mode 100644
index 8dfcc07..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/comment_form_tests.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import time
-
-from django.conf import settings
-from django.contrib.comments.forms import CommentForm
-from django.contrib.comments.models import Comment
-from django.utils.hashcompat import sha_constructor
-
-from regressiontests.comment_tests.models import Article
-from regressiontests.comment_tests.tests import CommentTestCase
-
-
-class CommentFormTests(CommentTestCase):
- def testInit(self):
- f = CommentForm(Article.objects.get(pk=1))
- self.assertEqual(f.initial['content_type'], str(Article._meta))
- self.assertEqual(f.initial['object_pk'], "1")
- self.assertNotEqual(f.initial['security_hash'], None)
- self.assertNotEqual(f.initial['timestamp'], None)
-
- def testValidPost(self):
- a = Article.objects.get(pk=1)
- f = CommentForm(a, data=self.getValidData(a))
- self.assert_(f.is_valid(), f.errors)
- return f
-
- def tamperWithForm(self, **kwargs):
- a = Article.objects.get(pk=1)
- d = self.getValidData(a)
- d.update(kwargs)
- f = CommentForm(Article.objects.get(pk=1), data=d)
- self.assertFalse(f.is_valid())
- return f
-
- def testHoneypotTampering(self):
- self.tamperWithForm(honeypot="I am a robot")
-
- def testTimestampTampering(self):
- self.tamperWithForm(timestamp=str(time.time() - 28800))
-
- def testSecurityHashTampering(self):
- self.tamperWithForm(security_hash="Nobody expects the Spanish Inquisition!")
-
- def testContentTypeTampering(self):
- self.tamperWithForm(content_type="auth.user")
-
- def testObjectPKTampering(self):
- self.tamperWithForm(object_pk="3")
-
- def testSecurityErrors(self):
- f = self.tamperWithForm(honeypot="I am a robot")
- self.assert_("honeypot" in f.security_errors())
-
- def testGetCommentObject(self):
- f = self.testValidPost()
- c = f.get_comment_object()
- self.assert_(isinstance(c, Comment))
- self.assertEqual(c.content_object, Article.objects.get(pk=1))
- self.assertEqual(c.comment, "This is my comment")
- c.save()
- self.assertEqual(Comment.objects.count(), 1)
-
- def testProfanities(self):
- """Test COMMENTS_ALLOW_PROFANITIES and PROFANITIES_LIST settings"""
- a = Article.objects.get(pk=1)
- d = self.getValidData(a)
-
- # Save settings in case other tests need 'em
- saved = settings.PROFANITIES_LIST, settings.COMMENTS_ALLOW_PROFANITIES
-
- # Don't wanna swear in the unit tests if we don't have to...
- settings.PROFANITIES_LIST = ["rooster"]
-
- # Try with COMMENTS_ALLOW_PROFANITIES off
- settings.COMMENTS_ALLOW_PROFANITIES = False
- f = CommentForm(a, data=dict(d, comment="What a rooster!"))
- self.assertFalse(f.is_valid())
-
- # Now with COMMENTS_ALLOW_PROFANITIES on
- settings.COMMENTS_ALLOW_PROFANITIES = True
- f = CommentForm(a, data=dict(d, comment="What a rooster!"))
- self.assertTrue(f.is_valid())
-
- # Restore settings
- settings.PROFANITIES_LIST, settings.COMMENTS_ALLOW_PROFANITIES = saved
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py b/parts/django/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py
deleted file mode 100644
index 2e93b8b..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from regressiontests.comment_tests.tests import CommentTestCase, CT, Site
-from django.contrib.comments.forms import CommentForm
-from django.contrib.comments.models import Comment
-from django.contrib.comments.moderation import moderator, CommentModerator, AlreadyModerated
-from regressiontests.comment_tests.models import Entry
-from django.core import mail
-
-class EntryModerator1(CommentModerator):
- email_notification = True
-
-class EntryModerator2(CommentModerator):
- enable_field = 'enable_comments'
-
-class EntryModerator3(CommentModerator):
- auto_close_field = 'pub_date'
- close_after = 7
-
-class EntryModerator4(CommentModerator):
- auto_moderate_field = 'pub_date'
- moderate_after = 7
-
-class CommentUtilsModeratorTests(CommentTestCase):
- fixtures = ["comment_utils.xml"]
-
- def createSomeComments(self):
- # Tests for the moderation signals must actually post data
- # through the comment views, because only the comment views
- # emit the custom signals moderation listens for.
- e = Entry.objects.get(pk=1)
- data = self.getValidData(e)
-
- self.client.post("/post/", data, REMOTE_ADDR="1.2.3.4")
-
- # We explicitly do a try/except to get the comment we've just
- # posted because moderation may have disallowed it, in which
- # case we can just return it as None.
- try:
- c1 = Comment.objects.all()[0]
- except IndexError:
- c1 = None
-
- self.client.post("/post/", data, REMOTE_ADDR="1.2.3.4")
-
- try:
- c2 = Comment.objects.all()[0]
- except IndexError:
- c2 = None
- return c1, c2
-
- def tearDown(self):
- moderator.unregister(Entry)
-
- def testRegisterExistingModel(self):
- moderator.register(Entry, EntryModerator1)
- self.assertRaises(AlreadyModerated, moderator.register, Entry, EntryModerator1)
-
- def testEmailNotification(self):
- moderator.register(Entry, EntryModerator1)
- self.createSomeComments()
- self.assertEquals(len(mail.outbox), 2)
-
- def testCommentsEnabled(self):
- moderator.register(Entry, EntryModerator2)
- self.createSomeComments()
- self.assertEquals(Comment.objects.all().count(), 1)
-
- def testAutoCloseField(self):
- moderator.register(Entry, EntryModerator3)
- self.createSomeComments()
- self.assertEquals(Comment.objects.all().count(), 0)
-
- def testAutoModerateField(self):
- moderator.register(Entry, EntryModerator4)
- c1, c2 = self.createSomeComments()
- self.assertEquals(c2.is_public, False)
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/comment_view_tests.py b/parts/django/tests/regressiontests/comment_tests/tests/comment_view_tests.py
deleted file mode 100644
index b8a62b4..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/comment_view_tests.py
+++ /dev/null
@@ -1,258 +0,0 @@
-import re
-from django.conf import settings
-from django.contrib.auth.models import User
-from django.contrib.comments import signals
-from django.contrib.comments.models import Comment
-from regressiontests.comment_tests.models import Article, Book
-from regressiontests.comment_tests.tests import CommentTestCase
-
-post_redirect_re = re.compile(r'^http://testserver/posted/\?c=(?P<pk>\d+$)')
-
-class CommentViewTests(CommentTestCase):
-
- def testPostCommentHTTPMethods(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- response = self.client.get("/post/", data)
- self.assertEqual(response.status_code, 405)
- self.assertEqual(response["Allow"], "POST")
-
- def testPostCommentMissingCtype(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- del data["content_type"]
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
-
- def testPostCommentBadCtype(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["content_type"] = "Nobody expects the Spanish Inquisition!"
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
-
- def testPostCommentMissingObjectPK(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- del data["object_pk"]
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
-
- def testPostCommentBadObjectPK(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["object_pk"] = "14"
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
-
- def testPostInvalidIntegerPK(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["comment"] = "This is another comment"
- data["object_pk"] = u'\ufffd'
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
-
- def testPostInvalidDecimalPK(self):
- b = Book.objects.get(pk='12.34')
- data = self.getValidData(b)
- data["comment"] = "This is another comment"
- data["object_pk"] = 'cookies'
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
-
- def testCommentPreview(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["preview"] = "Preview"
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "comments/preview.html")
-
- def testHashTampering(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["security_hash"] = "Nobody expects the Spanish Inquisition!"
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
-
- def testDebugCommentErrors(self):
- """The debug error template should be shown only if DEBUG is True"""
- olddebug = settings.DEBUG
-
- settings.DEBUG = True
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["security_hash"] = "Nobody expects the Spanish Inquisition!"
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
- self.assertTemplateUsed(response, "comments/400-debug.html")
-
- settings.DEBUG = False
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
- self.assertTemplateNotUsed(response, "comments/400-debug.html")
-
- settings.DEBUG = olddebug
-
- def testCreateValidComment(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- self.response = self.client.post("/post/", data, REMOTE_ADDR="1.2.3.4")
- self.assertEqual(self.response.status_code, 302)
- self.assertEqual(Comment.objects.count(), 1)
- c = Comment.objects.all()[0]
- self.assertEqual(c.ip_address, "1.2.3.4")
- self.assertEqual(c.comment, "This is my comment")
-
- def testPostAsAuthenticatedUser(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data['name'] = data['email'] = ''
- self.client.login(username="normaluser", password="normaluser")
- self.response = self.client.post("/post/", data, REMOTE_ADDR="1.2.3.4")
- self.assertEqual(self.response.status_code, 302)
- self.assertEqual(Comment.objects.count(), 1)
- c = Comment.objects.all()[0]
- self.assertEqual(c.ip_address, "1.2.3.4")
- u = User.objects.get(username='normaluser')
- self.assertEqual(c.user, u)
- self.assertEqual(c.user_name, u.get_full_name())
- self.assertEqual(c.user_email, u.email)
-
- def testPostAsAuthenticatedUserWithoutFullname(self):
- """
- Check that the user's name in the comment is populated for
- authenticated users without first_name and last_name.
- """
- user = User.objects.create_user(username='jane_other',
- email='jane@example.com', password='jane_other')
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data['name'] = data['email'] = ''
- self.client.login(username="jane_other", password="jane_other")
- self.response = self.client.post("/post/", data, REMOTE_ADDR="1.2.3.4")
- c = Comment.objects.get(user=user)
- self.assertEqual(c.ip_address, "1.2.3.4")
- self.assertEqual(c.user_name, 'jane_other')
- user.delete()
-
- def testPreventDuplicateComments(self):
- """Prevent posting the exact same comment twice"""
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- self.client.post("/post/", data)
- self.client.post("/post/", data)
- self.assertEqual(Comment.objects.count(), 1)
-
- # This should not trigger the duplicate prevention
- self.client.post("/post/", dict(data, comment="My second comment."))
- self.assertEqual(Comment.objects.count(), 2)
-
- def testCommentSignals(self):
- """Test signals emitted by the comment posting view"""
-
- # callback
- def receive(sender, **kwargs):
- self.assertEqual(kwargs['comment'].comment, "This is my comment")
- self.assert_('request' in kwargs)
- received_signals.append(kwargs.get('signal'))
-
- # Connect signals and keep track of handled ones
- received_signals = []
- expected_signals = [
- signals.comment_will_be_posted, signals.comment_was_posted
- ]
- for signal in expected_signals:
- signal.connect(receive)
-
- # Post a comment and check the signals
- self.testCreateValidComment()
- self.assertEqual(received_signals, expected_signals)
-
- for signal in expected_signals:
- signal.disconnect(receive)
-
- def testWillBePostedSignal(self):
- """
- Test that the comment_will_be_posted signal can prevent the comment from
- actually getting saved
- """
- def receive(sender, **kwargs): return False
- signals.comment_will_be_posted.connect(receive, dispatch_uid="comment-test")
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- response = self.client.post("/post/", data)
- self.assertEqual(response.status_code, 400)
- self.assertEqual(Comment.objects.count(), 0)
- signals.comment_will_be_posted.disconnect(dispatch_uid="comment-test")
-
- def testWillBePostedSignalModifyComment(self):
- """
- Test that the comment_will_be_posted signal can modify a comment before
- it gets posted
- """
- def receive(sender, **kwargs):
- # a bad but effective spam filter :)...
- kwargs['comment'].is_public = False
-
- signals.comment_will_be_posted.connect(receive)
- self.testCreateValidComment()
- c = Comment.objects.all()[0]
- self.assertFalse(c.is_public)
-
- def testCommentNext(self):
- """Test the different "next" actions the comment view can take"""
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- response = self.client.post("/post/", data)
- location = response["Location"]
- match = post_redirect_re.match(location)
- self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
-
- data["next"] = "/somewhere/else/"
- data["comment"] = "This is another comment"
- response = self.client.post("/post/", data)
- location = response["Location"]
- match = re.search(r"^http://testserver/somewhere/else/\?c=\d+$", location)
- self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
-
- def testCommentDoneView(self):
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- response = self.client.post("/post/", data)
- location = response["Location"]
- match = post_redirect_re.match(location)
- self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
- pk = int(match.group('pk'))
- response = self.client.get(location)
- self.assertTemplateUsed(response, "comments/posted.html")
- self.assertEqual(response.context[0]["comment"], Comment.objects.get(pk=pk))
-
- def testCommentNextWithQueryString(self):
- """
- The `next` key needs to handle already having a query string (#10585)
- """
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["next"] = "/somewhere/else/?foo=bar"
- data["comment"] = "This is another comment"
- response = self.client.post("/post/", data)
- location = response["Location"]
- match = re.search(r"^http://testserver/somewhere/else/\?foo=bar&c=\d+$", location)
- self.assertTrue(match != None, "Unexpected redirect location: %s" % location)
-
- def testCommentPostRedirectWithInvalidIntegerPK(self):
- """
- Tests that attempting to retrieve the location specified in the
- post redirect, after adding some invalid data to the expected
- querystring it ends with, doesn't cause a server error.
- """
- a = Article.objects.get(pk=1)
- data = self.getValidData(a)
- data["comment"] = "This is another comment"
- response = self.client.post("/post/", data)
- location = response["Location"]
- broken_location = location + u"\ufffd"
- response = self.client.get(broken_location)
- self.assertEqual(response.status_code, 200)
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/model_tests.py b/parts/django/tests/regressiontests/comment_tests/tests/model_tests.py
deleted file mode 100644
index 2cbf66f..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/model_tests.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from django.contrib.comments.models import Comment
-
-from regressiontests.comment_tests.models import Author, Article
-from regressiontests.comment_tests.tests import CommentTestCase
-
-
-class CommentModelTests(CommentTestCase):
- def testSave(self):
- for c in self.createSomeComments():
- self.assertNotEqual(c.submit_date, None)
-
- def testUserProperties(self):
- c1, c2, c3, c4 = self.createSomeComments()
- self.assertEqual(c1.name, "Joe Somebody")
- self.assertEqual(c2.email, "jsomebody@example.com")
- self.assertEqual(c3.name, "Frank Nobody")
- self.assertEqual(c3.url, "http://example.com/~frank/")
- self.assertEqual(c1.user, None)
- self.assertEqual(c3.user, c4.user)
-
-class CommentManagerTests(CommentTestCase):
-
- def testInModeration(self):
- """Comments that aren't public are considered in moderation"""
- c1, c2, c3, c4 = self.createSomeComments()
- c1.is_public = False
- c2.is_public = False
- c1.save()
- c2.save()
- moderated_comments = list(Comment.objects.in_moderation().order_by("id"))
- self.assertEqual(moderated_comments, [c1, c2])
-
- def testRemovedCommentsNotInModeration(self):
- """Removed comments are not considered in moderation"""
- c1, c2, c3, c4 = self.createSomeComments()
- c1.is_public = False
- c2.is_public = False
- c2.is_removed = True
- c1.save()
- c2.save()
- moderated_comments = list(Comment.objects.in_moderation())
- self.assertEqual(moderated_comments, [c1])
-
- def testForModel(self):
- c1, c2, c3, c4 = self.createSomeComments()
- article_comments = list(Comment.objects.for_model(Article).order_by("id"))
- author_comments = list(Comment.objects.for_model(Author.objects.get(pk=1)))
- self.assertEqual(article_comments, [c1, c3])
- self.assertEqual(author_comments, [c2])
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/moderation_view_tests.py b/parts/django/tests/regressiontests/comment_tests/tests/moderation_view_tests.py
deleted file mode 100644
index e5094ab..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/moderation_view_tests.py
+++ /dev/null
@@ -1,203 +0,0 @@
-from django.contrib.auth.models import User, Permission
-from django.contrib.comments import signals
-from django.contrib.comments.models import Comment, CommentFlag
-from django.contrib.contenttypes.models import ContentType
-
-from regressiontests.comment_tests.tests import CommentTestCase
-
-
-class FlagViewTests(CommentTestCase):
-
- def testFlagGet(self):
- """GET the flag view: render a confirmation page."""
- comments = self.createSomeComments()
- pk = comments[0].pk
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.get("/flag/%d/" % pk)
- self.assertTemplateUsed(response, "comments/flag.html")
-
- def testFlagPost(self):
- """POST the flag view: actually flag the view (nice for XHR)"""
- comments = self.createSomeComments()
- pk = comments[0].pk
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.post("/flag/%d/" % pk)
- self.assertEqual(response["Location"], "http://testserver/flagged/?c=%d" % pk)
- c = Comment.objects.get(pk=pk)
- self.assertEqual(c.flags.filter(flag=CommentFlag.SUGGEST_REMOVAL).count(), 1)
- return c
-
- def testFlagPostTwice(self):
- """Users don't get to flag comments more than once."""
- c = self.testFlagPost()
- self.client.post("/flag/%d/" % c.pk)
- self.client.post("/flag/%d/" % c.pk)
- self.assertEqual(c.flags.filter(flag=CommentFlag.SUGGEST_REMOVAL).count(), 1)
-
- def testFlagAnon(self):
- """GET/POST the flag view while not logged in: redirect to log in."""
- comments = self.createSomeComments()
- pk = comments[0].pk
- response = self.client.get("/flag/%d/" % pk)
- self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/flag/%d/" % pk)
- response = self.client.post("/flag/%d/" % pk)
- self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/flag/%d/" % pk)
-
- def testFlaggedView(self):
- comments = self.createSomeComments()
- pk = comments[0].pk
- response = self.client.get("/flagged/", data={"c":pk})
- self.assertTemplateUsed(response, "comments/flagged.html")
-
- def testFlagSignals(self):
- """Test signals emitted by the comment flag view"""
-
- # callback
- def receive(sender, **kwargs):
- self.assertEqual(kwargs['flag'].flag, CommentFlag.SUGGEST_REMOVAL)
- self.assertEqual(kwargs['request'].user.username, "normaluser")
- received_signals.append(kwargs.get('signal'))
-
- # Connect signals and keep track of handled ones
- received_signals = []
- signals.comment_was_flagged.connect(receive)
-
- # Post a comment and check the signals
- self.testFlagPost()
- self.assertEqual(received_signals, [signals.comment_was_flagged])
-
-def makeModerator(username):
- u = User.objects.get(username=username)
- ct = ContentType.objects.get_for_model(Comment)
- p = Permission.objects.get(content_type=ct, codename="can_moderate")
- u.user_permissions.add(p)
-
-class DeleteViewTests(CommentTestCase):
-
- def testDeletePermissions(self):
- """The delete view should only be accessible to 'moderators'"""
- comments = self.createSomeComments()
- pk = comments[0].pk
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.get("/delete/%d/" % pk)
- self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/delete/%d/" % pk)
-
- makeModerator("normaluser")
- response = self.client.get("/delete/%d/" % pk)
- self.assertEqual(response.status_code, 200)
-
- def testDeletePost(self):
- """POSTing the delete view should mark the comment as removed"""
- comments = self.createSomeComments()
- pk = comments[0].pk
- makeModerator("normaluser")
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.post("/delete/%d/" % pk)
- self.assertEqual(response["Location"], "http://testserver/deleted/?c=%d" % pk)
- c = Comment.objects.get(pk=pk)
- self.assertTrue(c.is_removed)
- self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_DELETION, user__username="normaluser").count(), 1)
-
- def testDeleteSignals(self):
- def receive(sender, **kwargs):
- received_signals.append(kwargs.get('signal'))
-
- # Connect signals and keep track of handled ones
- received_signals = []
- signals.comment_was_flagged.connect(receive)
-
- # Post a comment and check the signals
- self.testDeletePost()
- self.assertEqual(received_signals, [signals.comment_was_flagged])
-
- def testDeletedView(self):
- comments = self.createSomeComments()
- pk = comments[0].pk
- response = self.client.get("/deleted/", data={"c":pk})
- self.assertTemplateUsed(response, "comments/deleted.html")
-
-class ApproveViewTests(CommentTestCase):
-
- def testApprovePermissions(self):
- """The delete view should only be accessible to 'moderators'"""
- comments = self.createSomeComments()
- pk = comments[0].pk
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.get("/approve/%d/" % pk)
- self.assertEqual(response["Location"], "http://testserver/accounts/login/?next=/approve/%d/" % pk)
-
- makeModerator("normaluser")
- response = self.client.get("/approve/%d/" % pk)
- self.assertEqual(response.status_code, 200)
-
- def testApprovePost(self):
- """POSTing the delete view should mark the comment as removed"""
- c1, c2, c3, c4 = self.createSomeComments()
- c1.is_public = False; c1.save()
-
- makeModerator("normaluser")
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.post("/approve/%d/" % c1.pk)
- self.assertEqual(response["Location"], "http://testserver/approved/?c=%d" % c1.pk)
- c = Comment.objects.get(pk=c1.pk)
- self.assertTrue(c.is_public)
- self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_APPROVAL, user__username="normaluser").count(), 1)
-
- def testApproveSignals(self):
- def receive(sender, **kwargs):
- received_signals.append(kwargs.get('signal'))
-
- # Connect signals and keep track of handled ones
- received_signals = []
- signals.comment_was_flagged.connect(receive)
-
- # Post a comment and check the signals
- self.testApprovePost()
- self.assertEqual(received_signals, [signals.comment_was_flagged])
-
- def testApprovedView(self):
- comments = self.createSomeComments()
- pk = comments[0].pk
- response = self.client.get("/approved/", data={"c":pk})
- self.assertTemplateUsed(response, "comments/approved.html")
-
-class AdminActionsTests(CommentTestCase):
- urls = "regressiontests.comment_tests.urls_admin"
-
- def setUp(self):
- super(AdminActionsTests, self).setUp()
-
- # Make "normaluser" a moderator
- u = User.objects.get(username="normaluser")
- u.is_staff = True
- perms = Permission.objects.filter(
- content_type__app_label = 'comments',
- codename__endswith = 'comment'
- )
- for perm in perms:
- u.user_permissions.add(perm)
- u.save()
-
- def testActionsNonModerator(self):
- comments = self.createSomeComments()
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.get("/admin/comments/comment/")
- self.assertEquals("approve_comments" in response.content, False)
-
- def testActionsModerator(self):
- comments = self.createSomeComments()
- makeModerator("normaluser")
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.get("/admin/comments/comment/")
- self.assertEquals("approve_comments" in response.content, True)
-
- def testActionsDisabledDelete(self):
- "Tests a CommentAdmin where 'delete_selected' has been disabled."
- comments = self.createSomeComments()
- self.client.login(username="normaluser", password="normaluser")
- response = self.client.get('/admin2/comments/comment/')
- self.assertEqual(response.status_code, 200)
- self.assert_(
- '<option value="delete_selected">' not in response.content,
- "Found an unexpected delete_selected in response"
- )
diff --git a/parts/django/tests/regressiontests/comment_tests/tests/templatetag_tests.py b/parts/django/tests/regressiontests/comment_tests/tests/templatetag_tests.py
deleted file mode 100644
index 29a097a..0000000
--- a/parts/django/tests/regressiontests/comment_tests/tests/templatetag_tests.py
+++ /dev/null
@@ -1,97 +0,0 @@
-from django.contrib.comments.forms import CommentForm
-from django.contrib.comments.models import Comment
-from django.contrib.contenttypes.models import ContentType
-from django.template import Template, Context
-from regressiontests.comment_tests.models import Article, Author
-from regressiontests.comment_tests.tests import CommentTestCase
-
-class CommentTemplateTagTests(CommentTestCase):
-
- def render(self, t, **c):
- ctx = Context(c)
- out = Template(t).render(ctx)
- return ctx, out
-
- def testCommentFormTarget(self):
- ctx, out = self.render("{% load comments %}{% comment_form_target %}")
- self.assertEqual(out, "/post/")
-
- def testGetCommentForm(self, tag=None):
- t = "{% load comments %}" + (tag or "{% get_comment_form for comment_tests.article a.id as form %}")
- ctx, out = self.render(t, a=Article.objects.get(pk=1))
- self.assertEqual(out, "")
- self.assert_(isinstance(ctx["form"], CommentForm))
-
- def testGetCommentFormFromLiteral(self):
- self.testGetCommentForm("{% get_comment_form for comment_tests.article 1 as form %}")
-
- def testGetCommentFormFromObject(self):
- self.testGetCommentForm("{% get_comment_form for a as form %}")
-
- def testRenderCommentForm(self, tag=None):
- t = "{% load comments %}" + (tag or "{% render_comment_form for comment_tests.article a.id %}")
- ctx, out = self.render(t, a=Article.objects.get(pk=1))
- self.assert_(out.strip().startswith("<form action="))
- self.assert_(out.strip().endswith("</form>"))
-
- def testRenderCommentFormFromLiteral(self):
- self.testRenderCommentForm("{% render_comment_form for comment_tests.article 1 %}")
-
- def testRenderCommentFormFromObject(self):
- self.testRenderCommentForm("{% render_comment_form for a %}")
-
- def testGetCommentCount(self, tag=None):
- self.createSomeComments()
- t = "{% load comments %}" + (tag or "{% get_comment_count for comment_tests.article a.id as cc %}") + "{{ cc }}"
- ctx, out = self.render(t, a=Article.objects.get(pk=1))
- self.assertEqual(out, "2")
-
- def testGetCommentCountFromLiteral(self):
- self.testGetCommentCount("{% get_comment_count for comment_tests.article 1 as cc %}")
-
- def testGetCommentCountFromObject(self):
- self.testGetCommentCount("{% get_comment_count for a as cc %}")
-
- def testGetCommentList(self, tag=None):
- c1, c2, c3, c4 = self.createSomeComments()
- t = "{% load comments %}" + (tag or "{% get_comment_list for comment_tests.author a.id as cl %}")
- ctx, out = self.render(t, a=Author.objects.get(pk=1))
- self.assertEqual(out, "")
- self.assertEqual(list(ctx["cl"]), [c2])
-
- def testGetCommentListFromLiteral(self):
- self.testGetCommentList("{% get_comment_list for comment_tests.author 1 as cl %}")
-
- def testGetCommentListFromObject(self):
- self.testGetCommentList("{% get_comment_list for a as cl %}")
-
- def testGetCommentPermalink(self):
- c1, c2, c3, c4 = self.createSomeComments()
- t = "{% load comments %}{% get_comment_list for comment_tests.author author.id as cl %}"
- t += "{% get_comment_permalink cl.0 %}"
- ct = ContentType.objects.get_for_model(Author)
- author = Author.objects.get(pk=1)
- ctx, out = self.render(t, author=author)
- self.assertEqual(out, "/cr/%s/%s/#c%s" % (ct.id, author.id, c2.id))
-
- def testGetCommentPermalinkFormatted(self):
- c1, c2, c3, c4 = self.createSomeComments()
- t = "{% load comments %}{% get_comment_list for comment_tests.author author.id as cl %}"
- t += "{% get_comment_permalink cl.0 '#c%(id)s-by-%(user_name)s' %}"
- ct = ContentType.objects.get_for_model(Author)
- author = Author.objects.get(pk=1)
- ctx, out = self.render(t, author=author)
- self.assertEqual(out, "/cr/%s/%s/#c%s-by-Joe Somebody" % (ct.id, author.id, c2.id))
-
- def testRenderCommentList(self, tag=None):
- t = "{% load comments %}" + (tag or "{% render_comment_list for comment_tests.article a.id %}")
- ctx, out = self.render(t, a=Article.objects.get(pk=1))
- self.assert_(out.strip().startswith("<dl id=\"comments\">"))
- self.assert_(out.strip().endswith("</dl>"))
-
- def testRenderCommentListFromLiteral(self):
- self.testRenderCommentList("{% render_comment_list for comment_tests.article 1 %}")
-
- def testRenderCommentListFromObject(self):
- self.testRenderCommentList("{% render_comment_list for a %}")
-
diff --git a/parts/django/tests/regressiontests/comment_tests/urls.py b/parts/django/tests/regressiontests/comment_tests/urls.py
deleted file mode 100644
index 0058689..0000000
--- a/parts/django/tests/regressiontests/comment_tests/urls.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('regressiontests.comment_tests.custom_comments.views',
- url(r'^post/$', 'custom_submit_comment'),
- url(r'^flag/(\d+)/$', 'custom_flag_comment'),
- url(r'^delete/(\d+)/$', 'custom_delete_comment'),
- url(r'^approve/(\d+)/$', 'custom_approve_comment'),
-)
-
diff --git a/parts/django/tests/regressiontests/comment_tests/urls_admin.py b/parts/django/tests/regressiontests/comment_tests/urls_admin.py
deleted file mode 100644
index d7e1a4e..0000000
--- a/parts/django/tests/regressiontests/comment_tests/urls_admin.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from django.conf.urls.defaults import *
-from django.contrib import admin
-from django.contrib.comments.admin import CommentsAdmin
-from django.contrib.comments.models import Comment
-
-# Make a new AdminSite to avoid picking up the deliberately broken admin
-# modules in other tests.
-admin_site = admin.AdminSite()
-admin_site.register(Comment, CommentsAdmin)
-
-# To demonstrate proper functionality even when ``delete_selected`` is removed.
-admin_site2 = admin.AdminSite()
-admin_site2.disable_action('delete_selected')
-admin_site2.register(Comment, CommentsAdmin)
-
-urlpatterns = patterns('',
- (r'^admin/', include(admin_site.urls)),
- (r'^admin2/', include(admin_site2.urls)),
-)
diff --git a/parts/django/tests/regressiontests/conditional_processing/__init__.py b/parts/django/tests/regressiontests/conditional_processing/__init__.py
deleted file mode 100644
index 380474e..0000000
--- a/parts/django/tests/regressiontests/conditional_processing/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding:utf-8 -*-
diff --git a/parts/django/tests/regressiontests/conditional_processing/models.py b/parts/django/tests/regressiontests/conditional_processing/models.py
deleted file mode 100644
index b291aed..0000000
--- a/parts/django/tests/regressiontests/conditional_processing/models.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# -*- coding:utf-8 -*-
-from datetime import datetime, timedelta
-from calendar import timegm
-
-from django.test import TestCase
-from django.utils.http import parse_etags, quote_etag
-
-FULL_RESPONSE = 'Test conditional get response'
-LAST_MODIFIED = datetime(2007, 10, 21, 23, 21, 47)
-LAST_MODIFIED_STR = 'Sun, 21 Oct 2007 23:21:47 GMT'
-EXPIRED_LAST_MODIFIED_STR = 'Sat, 20 Oct 2007 23:21:47 GMT'
-ETAG = 'b4246ffc4f62314ca13147c9d4f76974'
-EXPIRED_ETAG = '7fae4cd4b0f81e7d2914700043aa8ed6'
-
-class ConditionalGet(TestCase):
- def assertFullResponse(self, response, check_last_modified=True, check_etag=True):
- self.assertEquals(response.status_code, 200)
- self.assertEquals(response.content, FULL_RESPONSE)
- if check_last_modified:
- self.assertEquals(response['Last-Modified'], LAST_MODIFIED_STR)
- if check_etag:
- self.assertEquals(response['ETag'], '"%s"' % ETAG)
-
- def assertNotModified(self, response):
- self.assertEquals(response.status_code, 304)
- self.assertEquals(response.content, '')
-
- def testWithoutConditions(self):
- response = self.client.get('/condition/')
- self.assertFullResponse(response)
-
- def testIfModifiedSince(self):
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
- response = self.client.get('/condition/')
- self.assertNotModified(response)
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = EXPIRED_LAST_MODIFIED_STR
- response = self.client.get('/condition/')
- self.assertFullResponse(response)
-
- def testIfNoneMatch(self):
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % ETAG
- response = self.client.get('/condition/')
- self.assertNotModified(response)
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % EXPIRED_ETAG
- response = self.client.get('/condition/')
- self.assertFullResponse(response)
-
- # Several etags in If-None-Match is a bit exotic but why not?
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s", "%s"' % (ETAG, EXPIRED_ETAG)
- response = self.client.get('/condition/')
- self.assertNotModified(response)
-
- def testIfMatch(self):
- self.client.defaults['HTTP_IF_MATCH'] = '"%s"' % ETAG
- response = self.client.put('/condition/etag/', {'data': ''})
- self.assertEquals(response.status_code, 200)
- self.client.defaults['HTTP_IF_MATCH'] = '"%s"' % EXPIRED_ETAG
- response = self.client.put('/condition/etag/', {'data': ''})
- self.assertEquals(response.status_code, 412)
-
- def testBothHeaders(self):
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % ETAG
- response = self.client.get('/condition/')
- self.assertNotModified(response)
-
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = EXPIRED_LAST_MODIFIED_STR
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % ETAG
- response = self.client.get('/condition/')
- self.assertFullResponse(response)
-
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % EXPIRED_ETAG
- response = self.client.get('/condition/')
- self.assertFullResponse(response)
-
- def testSingleCondition1(self):
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
- response = self.client.get('/condition/last_modified/')
- self.assertNotModified(response)
- response = self.client.get('/condition/etag/')
- self.assertFullResponse(response, check_last_modified=False)
-
- def testSingleCondition2(self):
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % ETAG
- response = self.client.get('/condition/etag/')
- self.assertNotModified(response)
- response = self.client.get('/condition/last_modified/')
- self.assertFullResponse(response, check_etag=False)
-
- def testSingleCondition3(self):
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = EXPIRED_LAST_MODIFIED_STR
- response = self.client.get('/condition/last_modified/')
- self.assertFullResponse(response, check_etag=False)
-
- def testSingleCondition4(self):
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % EXPIRED_ETAG
- response = self.client.get('/condition/etag/')
- self.assertFullResponse(response, check_last_modified=False)
-
- def testSingleCondition5(self):
- self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
- response = self.client.get('/condition/last_modified2/')
- self.assertNotModified(response)
- response = self.client.get('/condition/etag2/')
- self.assertFullResponse(response, check_last_modified=False)
-
- def testSingleCondition6(self):
- self.client.defaults['HTTP_IF_NONE_MATCH'] = '"%s"' % ETAG
- response = self.client.get('/condition/etag2/')
- self.assertNotModified(response)
- response = self.client.get('/condition/last_modified2/')
- self.assertFullResponse(response, check_etag=False)
-
- def testInvalidETag(self):
- self.client.defaults['HTTP_IF_NONE_MATCH'] = r'"\"'
- response = self.client.get('/condition/etag/')
- self.assertFullResponse(response, check_last_modified=False)
-
-
-class ETagProcesing(TestCase):
- def testParsing(self):
- etags = parse_etags(r'"", "etag", "e\"t\"ag", "e\\tag", W/"weak"')
- self.assertEquals(etags, ['', 'etag', 'e"t"ag', r'e\tag', 'weak'])
-
- def testQuoting(self):
- quoted_etag = quote_etag(r'e\t"ag')
- self.assertEquals(quoted_etag, r'"e\\t\"ag"')
diff --git a/parts/django/tests/regressiontests/conditional_processing/urls.py b/parts/django/tests/regressiontests/conditional_processing/urls.py
deleted file mode 100644
index 4dbe11a..0000000
--- a/parts/django/tests/regressiontests/conditional_processing/urls.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from django.conf.urls.defaults import *
-import views
-
-urlpatterns = patterns('',
- ('^$', views.index),
- ('^last_modified/$', views.last_modified_view1),
- ('^last_modified2/$', views.last_modified_view2),
- ('^etag/$', views.etag_view1),
- ('^etag2/$', views.etag_view2),
-)
diff --git a/parts/django/tests/regressiontests/conditional_processing/views.py b/parts/django/tests/regressiontests/conditional_processing/views.py
deleted file mode 100644
index df49281..0000000
--- a/parts/django/tests/regressiontests/conditional_processing/views.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding:utf-8 -*-
-from django.views.decorators.http import condition, etag, last_modified
-from django.http import HttpResponse
-
-from models import FULL_RESPONSE, LAST_MODIFIED, ETAG
-
-def index(request):
- return HttpResponse(FULL_RESPONSE)
-index = condition(lambda r: ETAG, lambda r: LAST_MODIFIED)(index)
-
-def last_modified_view1(request):
- return HttpResponse(FULL_RESPONSE)
-last_modified_view1 = condition(last_modified_func=lambda r: LAST_MODIFIED)(last_modified_view1)
-
-def last_modified_view2(request):
- return HttpResponse(FULL_RESPONSE)
-last_modified_view2 = last_modified(lambda r: LAST_MODIFIED)(last_modified_view2)
-
-def etag_view1(request):
- return HttpResponse(FULL_RESPONSE)
-etag_view1 = condition(etag_func=lambda r: ETAG)(etag_view1)
-
-def etag_view2(request):
- return HttpResponse(FULL_RESPONSE)
-etag_view2 = etag(lambda r: ETAG)(etag_view2)
-
diff --git a/parts/django/tests/regressiontests/context_processors/__init__.py b/parts/django/tests/regressiontests/context_processors/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/context_processors/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/context_processors/fixtures/context-processors-users.xml b/parts/django/tests/regressiontests/context_processors/fixtures/context-processors-users.xml
deleted file mode 100644
index aba8f4a..0000000
--- a/parts/django/tests/regressiontests/context_processors/fixtures/context-processors-users.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/context_processors/models.py b/parts/django/tests/regressiontests/context_processors/models.py
deleted file mode 100644
index cde172d..0000000
--- a/parts/django/tests/regressiontests/context_processors/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# Models file for tests to run.
diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html
deleted file mode 100644
index b5c65db..0000000
--- a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_access.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ user }}
diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html
deleted file mode 100644
index 7b7e448..0000000
--- a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_messages.html
+++ /dev/null
@@ -1 +0,0 @@
-{% for m in messages %}{{ m }}{% endfor %}
diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html
deleted file mode 100644
index 8d1c8b6..0000000
--- a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_no_access.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html
deleted file mode 100644
index a5db868..0000000
--- a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_perms.html
+++ /dev/null
@@ -1 +0,0 @@
-{% if perms.auth %}Has auth permissions{% endif %}
diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html
deleted file mode 100644
index a28ff93..0000000
--- a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_test_access.html
+++ /dev/null
@@ -1 +0,0 @@
-{% if session_accessed %}Session accessed{% else %}Session not accessed{% endif %}
diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html
deleted file mode 100644
index 7ed16d7..0000000
--- a/parts/django/tests/regressiontests/context_processors/templates/context_processors/auth_attrs_user.html
+++ /dev/null
@@ -1,4 +0,0 @@
-unicode: {{ user }}
-id: {{ user.id }}
-username: {{ user.username }}
-url: {% url userpage user %}
diff --git a/parts/django/tests/regressiontests/context_processors/templates/context_processors/request_attrs.html b/parts/django/tests/regressiontests/context_processors/templates/context_processors/request_attrs.html
deleted file mode 100644
index 3978e9d..0000000
--- a/parts/django/tests/regressiontests/context_processors/templates/context_processors/request_attrs.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% if request %}
-Have request
-{% else %}
-No request
-{% endif %}
-
-{% if request.is_secure %}
-Secure
-{% else %}
-Not secure
-{% endif %}
-
-{{ request.path }}
diff --git a/parts/django/tests/regressiontests/context_processors/tests.py b/parts/django/tests/regressiontests/context_processors/tests.py
deleted file mode 100644
index 0d19bef..0000000
--- a/parts/django/tests/regressiontests/context_processors/tests.py
+++ /dev/null
@@ -1,112 +0,0 @@
-"""
-Tests for Django's bundled context processors.
-"""
-
-from django.conf import settings
-from django.contrib.auth import authenticate
-from django.db.models import Q
-from django.test import TestCase
-from django.template import Template
-
-class RequestContextProcessorTests(TestCase):
- """
- Tests for the ``django.core.context_processors.request`` processor.
- """
-
- urls = 'regressiontests.context_processors.urls'
-
- def test_request_attributes(self):
- """
- Test that the request object is available in the template and that its
- attributes can't be overridden by GET and POST parameters (#3828).
- """
- url = '/request_attrs/'
- # We should have the request object in the template.
- response = self.client.get(url)
- self.assertContains(response, 'Have request')
- # Test is_secure.
- response = self.client.get(url)
- self.assertContains(response, 'Not secure')
- response = self.client.get(url, {'is_secure': 'blah'})
- self.assertContains(response, 'Not secure')
- response = self.client.post(url, {'is_secure': 'blah'})
- self.assertContains(response, 'Not secure')
- # Test path.
- response = self.client.get(url)
- self.assertContains(response, url)
- response = self.client.get(url, {'path': '/blah/'})
- self.assertContains(response, url)
- response = self.client.post(url, {'path': '/blah/'})
- self.assertContains(response, url)
-
-class AuthContextProcessorTests(TestCase):
- """
- Tests for the ``django.contrib.auth.context_processors.auth`` processor
- """
- urls = 'regressiontests.context_processors.urls'
- fixtures = ['context-processors-users.xml']
-
- def test_session_not_accessed(self):
- """
- Tests that the session is not accessed simply by including
- the auth context processor
- """
- response = self.client.get('/auth_processor_no_attr_access/')
- self.assertContains(response, "Session not accessed")
-
- def test_session_is_accessed(self):
- """
- Tests that the session is accessed if the auth context processor
- is used and relevant attributes accessed.
- """
- response = self.client.get('/auth_processor_attr_access/')
- self.assertContains(response, "Session accessed")
-
- def test_perms_attrs(self):
- self.client.login(username='super', password='secret')
- response = self.client.get('/auth_processor_perms/')
- self.assertContains(response, "Has auth permissions")
-
- def test_message_attrs(self):
- self.client.login(username='super', password='secret')
- response = self.client.get('/auth_processor_messages/')
- self.assertContains(response, "Message 1")
-
- def test_user_attrs(self):
- """
- Test that the lazy objects returned behave just like the wrapped objects.
- """
- # These are 'functional' level tests for common use cases. Direct
- # testing of the implementation (SimpleLazyObject) is in the 'utils'
- # tests.
- self.client.login(username='super', password='secret')
- user = authenticate(username='super', password='secret')
- response = self.client.get('/auth_processor_user/')
- self.assertContains(response, "unicode: super")
- self.assertContains(response, "id: 100")
- self.assertContains(response, "username: super")
- # bug #12037 is tested by the {% url %} in the template:
- self.assertContains(response, "url: /userpage/super/")
-
- # See if this object can be used for queries where a Q() comparing
- # a user can be used with another Q() (in an AND or OR fashion).
- # This simulates what a template tag might do with the user from the
- # context. Note that we don't need to execute a query, just build it.
- #
- # The failure case (bug #12049) on Python 2.4 with a LazyObject-wrapped
- # User is a fatal TypeError: "function() takes at least 2 arguments
- # (0 given)" deep inside deepcopy().
- #
- # Python 2.5 and 2.6 succeeded, but logged internally caught exception
- # spew:
- #
- # Exception RuntimeError: 'maximum recursion depth exceeded while
- # calling a Python object' in <type 'exceptions.AttributeError'>
- # ignored"
- query = Q(user=response.context['user']) & Q(someflag=True)
-
- # Tests for user equality. This is hard because User defines
- # equality in a non-duck-typing way
- # See bug #12060
- self.assertEqual(response.context['user'], user)
- self.assertEqual(user, response.context['user'])
diff --git a/parts/django/tests/regressiontests/context_processors/urls.py b/parts/django/tests/regressiontests/context_processors/urls.py
deleted file mode 100644
index 30728c8..0000000
--- a/parts/django/tests/regressiontests/context_processors/urls.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.conf.urls.defaults import *
-
-import views
-
-
-urlpatterns = patterns('',
- (r'^request_attrs/$', views.request_processor),
- (r'^auth_processor_no_attr_access/$', views.auth_processor_no_attr_access),
- (r'^auth_processor_attr_access/$', views.auth_processor_attr_access),
- (r'^auth_processor_user/$', views.auth_processor_user),
- (r'^auth_processor_perms/$', views.auth_processor_perms),
- (r'^auth_processor_messages/$', views.auth_processor_messages),
- url(r'^userpage/(.+)/$', views.userpage, name="userpage"),
-)
diff --git a/parts/django/tests/regressiontests/context_processors/views.py b/parts/django/tests/regressiontests/context_processors/views.py
deleted file mode 100644
index 3f2dcb0..0000000
--- a/parts/django/tests/regressiontests/context_processors/views.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from django.core import context_processors
-from django.shortcuts import render_to_response
-from django.template.context import RequestContext
-
-
-def request_processor(request):
- return render_to_response('context_processors/request_attrs.html',
- RequestContext(request, {}, processors=[context_processors.request]))
-
-def auth_processor_no_attr_access(request):
- r1 = render_to_response('context_processors/auth_attrs_no_access.html',
- RequestContext(request, {}, processors=[context_processors.auth]))
- # *After* rendering, we check whether the session was accessed
- return render_to_response('context_processors/auth_attrs_test_access.html',
- {'session_accessed':request.session.accessed})
-
-def auth_processor_attr_access(request):
- r1 = render_to_response('context_processors/auth_attrs_access.html',
- RequestContext(request, {}, processors=[context_processors.auth]))
- return render_to_response('context_processors/auth_attrs_test_access.html',
- {'session_accessed':request.session.accessed})
-
-def auth_processor_user(request):
- return render_to_response('context_processors/auth_attrs_user.html',
- RequestContext(request, {}, processors=[context_processors.auth]))
-
-def auth_processor_perms(request):
- return render_to_response('context_processors/auth_attrs_perms.html',
- RequestContext(request, {}, processors=[context_processors.auth]))
-
-def auth_processor_messages(request):
- request.user.message_set.create(message="Message 1")
- return render_to_response('context_processors/auth_attrs_messages.html',
- RequestContext(request, {}, processors=[context_processors.auth]))
-
-def userpage(request):
- pass
diff --git a/parts/django/tests/regressiontests/csrf_tests/__init__.py b/parts/django/tests/regressiontests/csrf_tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/csrf_tests/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/csrf_tests/models.py b/parts/django/tests/regressiontests/csrf_tests/models.py
deleted file mode 100644
index 71abcc5..0000000
--- a/parts/django/tests/regressiontests/csrf_tests/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# models.py file for tests to run.
diff --git a/parts/django/tests/regressiontests/csrf_tests/tests.py b/parts/django/tests/regressiontests/csrf_tests/tests.py
deleted file mode 100644
index 9f74fc5..0000000
--- a/parts/django/tests/regressiontests/csrf_tests/tests.py
+++ /dev/null
@@ -1,375 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.test import TestCase
-from django.http import HttpRequest, HttpResponse
-from django.middleware.csrf import CsrfMiddleware, CsrfViewMiddleware
-from django.views.decorators.csrf import csrf_exempt, csrf_view_exempt, requires_csrf_token
-from django.core.context_processors import csrf
-from django.contrib.sessions.middleware import SessionMiddleware
-from django.utils.importlib import import_module
-from django.conf import settings
-from django.template import RequestContext, Template
-
-# Response/views used for CsrfResponseMiddleware and CsrfViewMiddleware tests
-def post_form_response():
- resp = HttpResponse(content=u"""
-<html><body><h1>\u00a1Unicode!<form method="post"><input type="text" /></form></body></html>
-""", mimetype="text/html")
- return resp
-
-def post_form_response_non_html():
- resp = post_form_response()
- resp["Content-Type"] = "application/xml"
- return resp
-
-def post_form_view(request):
- """A view that returns a POST form (without a token)"""
- return post_form_response()
-
-# Response/views used for template tag tests
-def _token_template():
- return Template("{% csrf_token %}")
-
-def _render_csrf_token_template(req):
- context = RequestContext(req, processors=[csrf])
- template = _token_template()
- return template.render(context)
-
-def token_view(request):
- """A view that uses {% csrf_token %}"""
- return HttpResponse(_render_csrf_token_template(request))
-
-def non_token_view_using_request_processor(request):
- """
- A view that doesn't use the token, but does use the csrf view processor.
- """
- context = RequestContext(request, processors=[csrf])
- template = Template("")
- return HttpResponse(template.render(context))
-
-class TestingHttpRequest(HttpRequest):
- """
- A version of HttpRequest that allows us to change some things
- more easily
- """
- def is_secure(self):
- return getattr(self, '_is_secure', False)
-
-class CsrfMiddlewareTest(TestCase):
- # The csrf token is potentially from an untrusted source, so could have
- # characters that need dealing with.
- _csrf_id_cookie = "<1>\xc2\xa1"
- _csrf_id = "1"
-
- # This is a valid session token for this ID and secret key. This was generated using
- # the old code that we're to be backwards-compatible with. Don't use the CSRF code
- # to generate this hash, or we're merely testing the code against itself and not
- # checking backwards-compatibility. This is also the output of (echo -n test1 | md5sum).
- _session_token = "5a105e8b9d40e1329780d62ea2265d8a"
- _session_id = "1"
- _secret_key_for_session_test= "test"
-
- def _get_GET_no_csrf_cookie_request(self):
- return TestingHttpRequest()
-
- def _get_GET_csrf_cookie_request(self):
- req = TestingHttpRequest()
- req.COOKIES[settings.CSRF_COOKIE_NAME] = self._csrf_id_cookie
- return req
-
- def _get_POST_csrf_cookie_request(self):
- req = self._get_GET_csrf_cookie_request()
- req.method = "POST"
- return req
-
- def _get_POST_no_csrf_cookie_request(self):
- req = self._get_GET_no_csrf_cookie_request()
- req.method = "POST"
- return req
-
- def _get_POST_request_with_token(self):
- req = self._get_POST_csrf_cookie_request()
- req.POST['csrfmiddlewaretoken'] = self._csrf_id
- return req
-
- def _get_POST_session_request_with_token(self):
- req = self._get_POST_no_csrf_cookie_request()
- req.COOKIES[settings.SESSION_COOKIE_NAME] = self._session_id
- req.POST['csrfmiddlewaretoken'] = self._session_token
- return req
-
- def _get_POST_session_request_no_token(self):
- req = self._get_POST_no_csrf_cookie_request()
- req.COOKIES[settings.SESSION_COOKIE_NAME] = self._session_id
- return req
-
- def _check_token_present(self, response, csrf_id=None):
- self.assertContains(response, "name='csrfmiddlewaretoken' value='%s'" % (csrf_id or self._csrf_id))
-
- # Check the post processing and outgoing cookie
- def test_process_response_no_csrf_cookie(self):
- """
- When no prior CSRF cookie exists, check that the cookie is created and a
- token is inserted.
- """
- req = self._get_GET_no_csrf_cookie_request()
- CsrfMiddleware().process_view(req, post_form_view, (), {})
-
- resp = post_form_response()
- resp_content = resp.content # needed because process_response modifies resp
- resp2 = CsrfMiddleware().process_response(req, resp)
-
- csrf_cookie = resp2.cookies.get(settings.CSRF_COOKIE_NAME, False)
- self.assertNotEqual(csrf_cookie, False)
- self.assertNotEqual(resp_content, resp2.content)
- self._check_token_present(resp2, csrf_cookie.value)
- # Check the Vary header got patched correctly
- self.assert_('Cookie' in resp2.get('Vary',''))
-
- def test_process_response_for_exempt_view(self):
- """
- Check that a view decorated with 'csrf_view_exempt' is still
- post-processed to add the CSRF token.
- """
- req = self._get_GET_no_csrf_cookie_request()
- CsrfMiddleware().process_view(req, csrf_view_exempt(post_form_view), (), {})
-
- resp = post_form_response()
- resp_content = resp.content # needed because process_response modifies resp
- resp2 = CsrfMiddleware().process_response(req, resp)
-
- csrf_cookie = resp2.cookies.get(settings.CSRF_COOKIE_NAME, False)
- self.assertNotEqual(csrf_cookie, False)
- self.assertNotEqual(resp_content, resp2.content)
- self._check_token_present(resp2, csrf_cookie.value)
-
- def test_process_response_no_csrf_cookie_view_only_get_token_used(self):
- """
- When no prior CSRF cookie exists, check that the cookie is created, even
- if only CsrfViewMiddleware is used.
- """
- # This is checking that CsrfViewMiddleware has the cookie setting
- # code. Most of the other tests use CsrfMiddleware.
- req = self._get_GET_no_csrf_cookie_request()
- # token_view calls get_token() indirectly
- CsrfViewMiddleware().process_view(req, token_view, (), {})
- resp = token_view(req)
- resp2 = CsrfViewMiddleware().process_response(req, resp)
-
- csrf_cookie = resp2.cookies.get(settings.CSRF_COOKIE_NAME, False)
- self.assertNotEqual(csrf_cookie, False)
-
- def test_process_response_get_token_not_used(self):
- """
- Check that if get_token() is not called, the view middleware does not
- add a cookie.
- """
- # This is important to make pages cacheable. Pages which do call
- # get_token(), assuming they use the token, are not cacheable because
- # the token is specific to the user
- req = self._get_GET_no_csrf_cookie_request()
- # non_token_view_using_request_processor does not call get_token(), but
- # does use the csrf request processor. By using this, we are testing
- # that the view processor is properly lazy and doesn't call get_token()
- # until needed.
- CsrfViewMiddleware().process_view(req, non_token_view_using_request_processor, (), {})
- resp = non_token_view_using_request_processor(req)
- resp2 = CsrfViewMiddleware().process_response(req, resp)
-
- csrf_cookie = resp2.cookies.get(settings.CSRF_COOKIE_NAME, False)
- self.assertEqual(csrf_cookie, False)
-
- def test_process_response_existing_csrf_cookie(self):
- """
- Check that the token is inserted when a prior CSRF cookie exists
- """
- req = self._get_GET_csrf_cookie_request()
- CsrfMiddleware().process_view(req, post_form_view, (), {})
-
- resp = post_form_response()
- resp_content = resp.content # needed because process_response modifies resp
- resp2 = CsrfMiddleware().process_response(req, resp)
- self.assertNotEqual(resp_content, resp2.content)
- self._check_token_present(resp2)
-
- def test_process_response_non_html(self):
- """
- Check the the post-processor does nothing for content-types not in _HTML_TYPES.
- """
- req = self._get_GET_no_csrf_cookie_request()
- CsrfMiddleware().process_view(req, post_form_view, (), {})
- resp = post_form_response_non_html()
- resp_content = resp.content # needed because process_response modifies resp
- resp2 = CsrfMiddleware().process_response(req, resp)
- self.assertEquals(resp_content, resp2.content)
-
- def test_process_response_exempt_view(self):
- """
- Check that no post processing is done for an exempt view
- """
- req = self._get_GET_csrf_cookie_request()
- view = csrf_exempt(post_form_view)
- CsrfMiddleware().process_view(req, view, (), {})
-
- resp = view(req)
- resp_content = resp.content
- resp2 = CsrfMiddleware().process_response(req, resp)
- self.assertEquals(resp_content, resp2.content)
-
- # Check the request processing
- def test_process_request_no_session_no_csrf_cookie(self):
- """
- Check that if neither a CSRF cookie nor a session cookie are present,
- the middleware rejects the incoming request. This will stop login CSRF.
- """
- req = self._get_POST_no_csrf_cookie_request()
- req2 = CsrfMiddleware().process_view(req, post_form_view, (), {})
- self.assertEquals(403, req2.status_code)
-
- def test_process_request_csrf_cookie_no_token(self):
- """
- Check that if a CSRF cookie is present but no token, the middleware
- rejects the incoming request.
- """
- req = self._get_POST_csrf_cookie_request()
- req2 = CsrfMiddleware().process_view(req, post_form_view, (), {})
- self.assertEquals(403, req2.status_code)
-
- def test_process_request_csrf_cookie_and_token(self):
- """
- Check that if both a cookie and a token is present, the middleware lets it through.
- """
- req = self._get_POST_request_with_token()
- req2 = CsrfMiddleware().process_view(req, post_form_view, (), {})
- self.assertEquals(None, req2)
-
- def test_process_request_session_cookie_no_csrf_cookie_token(self):
- """
- When no CSRF cookie exists, but the user has a session, check that a token
- using the session cookie as a legacy CSRF cookie is accepted.
- """
- orig_secret_key = settings.SECRET_KEY
- settings.SECRET_KEY = self._secret_key_for_session_test
- try:
- req = self._get_POST_session_request_with_token()
- req2 = CsrfMiddleware().process_view(req, post_form_view, (), {})
- self.assertEquals(None, req2)
- finally:
- settings.SECRET_KEY = orig_secret_key
-
- def test_process_request_session_cookie_no_csrf_cookie_no_token(self):
- """
- Check that if a session cookie is present but no token and no CSRF cookie,
- the request is rejected.
- """
- req = self._get_POST_session_request_no_token()
- req2 = CsrfMiddleware().process_view(req, post_form_view, (), {})
- self.assertEquals(403, req2.status_code)
-
- def test_process_request_csrf_cookie_no_token_exempt_view(self):
- """
- Check that if a CSRF cookie is present and no token, but the csrf_exempt
- decorator has been applied to the view, the middleware lets it through
- """
- req = self._get_POST_csrf_cookie_request()
- req2 = CsrfMiddleware().process_view(req, csrf_exempt(post_form_view), (), {})
- self.assertEquals(None, req2)
-
- def test_ajax_exemption(self):
- """
- Check that AJAX requests are automatically exempted.
- """
- req = self._get_POST_csrf_cookie_request()
- req.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
- req2 = CsrfMiddleware().process_view(req, post_form_view, (), {})
- self.assertEquals(None, req2)
-
- # Tests for the template tag method
- def test_token_node_no_csrf_cookie(self):
- """
- Check that CsrfTokenNode works when no CSRF cookie is set
- """
- req = self._get_GET_no_csrf_cookie_request()
- resp = token_view(req)
- self.assertEquals(u"", resp.content)
-
- def test_token_node_empty_csrf_cookie(self):
- """
- Check that we get a new token if the csrf_cookie is the empty string
- """
- req = self._get_GET_no_csrf_cookie_request()
- req.COOKIES[settings.CSRF_COOKIE_NAME] = ""
- CsrfViewMiddleware().process_view(req, token_view, (), {})
- resp = token_view(req)
-
- self.assertNotEqual(u"", resp.content)
-
- def test_token_node_with_csrf_cookie(self):
- """
- Check that CsrfTokenNode works when a CSRF cookie is set
- """
- req = self._get_GET_csrf_cookie_request()
- CsrfViewMiddleware().process_view(req, token_view, (), {})
- resp = token_view(req)
- self._check_token_present(resp)
-
- def test_get_token_for_exempt_view(self):
- """
- Check that get_token still works for a view decorated with 'csrf_view_exempt'.
- """
- req = self._get_GET_csrf_cookie_request()
- CsrfViewMiddleware().process_view(req, csrf_view_exempt(token_view), (), {})
- resp = token_view(req)
- self._check_token_present(resp)
-
- def test_get_token_for_requires_csrf_token_view(self):
- """
- Check that get_token works for a view decorated solely with requires_csrf_token
- """
- req = self._get_GET_csrf_cookie_request()
- resp = requires_csrf_token(token_view)(req)
- self._check_token_present(resp)
-
- def test_token_node_with_new_csrf_cookie(self):
- """
- Check that CsrfTokenNode works when a CSRF cookie is created by
- the middleware (when one was not already present)
- """
- req = self._get_GET_no_csrf_cookie_request()
- CsrfViewMiddleware().process_view(req, token_view, (), {})
- resp = token_view(req)
- resp2 = CsrfViewMiddleware().process_response(req, resp)
- csrf_cookie = resp2.cookies[settings.CSRF_COOKIE_NAME]
- self._check_token_present(resp, csrf_id=csrf_cookie.value)
-
- def test_response_middleware_without_view_middleware(self):
- """
- Check that CsrfResponseMiddleware finishes without error if the view middleware
- has not been called, as is the case if a request middleware returns a response.
- """
- req = self._get_GET_no_csrf_cookie_request()
- resp = post_form_view(req)
- CsrfMiddleware().process_response(req, resp)
-
- def test_https_bad_referer(self):
- """
- Test that a POST HTTPS request with a bad referer is rejected
- """
- req = self._get_POST_request_with_token()
- req._is_secure = True
- req.META['HTTP_HOST'] = 'www.example.com'
- req.META['HTTP_REFERER'] = 'https://www.evil.org/somepage'
- req2 = CsrfViewMiddleware().process_view(req, post_form_view, (), {})
- self.assertNotEqual(None, req2)
- self.assertEquals(403, req2.status_code)
-
- def test_https_good_referer(self):
- """
- Test that a POST HTTPS request with a good referer is accepted
- """
- req = self._get_POST_request_with_token()
- req._is_secure = True
- req.META['HTTP_HOST'] = 'www.example.com'
- req.META['HTTP_REFERER'] = 'https://www.example.com/somepage'
- req2 = CsrfViewMiddleware().process_view(req, post_form_view, (), {})
- self.assertEquals(None, req2)
diff --git a/parts/django/tests/regressiontests/custom_columns_regress/__init__.py b/parts/django/tests/regressiontests/custom_columns_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/custom_columns_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/custom_columns_regress/models.py b/parts/django/tests/regressiontests/custom_columns_regress/models.py
deleted file mode 100644
index 93de237..0000000
--- a/parts/django/tests/regressiontests/custom_columns_regress/models.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-Regression for #9736.
-
-Checks some pathological column naming to make sure it doesn't break
-table creation or queries.
-
-"""
-
-from django.db import models
-
-class Article(models.Model):
- Article_ID = models.AutoField(primary_key=True, db_column='Article ID')
- headline = models.CharField(max_length=100)
- authors = models.ManyToManyField('Author', db_table='my m2m table')
- primary_author = models.ForeignKey('Author', db_column='Author ID', related_name='primary_set')
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- ordering = ('headline',)
-
-class Author(models.Model):
- Author_ID = models.AutoField(primary_key=True, db_column='Author ID')
- first_name = models.CharField(max_length=30, db_column='first name')
- last_name = models.CharField(max_length=30, db_column='last name')
-
- def __unicode__(self):
- return u'%s %s' % (self.first_name, self.last_name)
-
- class Meta:
- db_table = 'my author table'
- ordering = ('last_name','first_name')
-
-
-
diff --git a/parts/django/tests/regressiontests/custom_columns_regress/tests.py b/parts/django/tests/regressiontests/custom_columns_regress/tests.py
deleted file mode 100644
index 8507601..0000000
--- a/parts/django/tests/regressiontests/custom_columns_regress/tests.py
+++ /dev/null
@@ -1,84 +0,0 @@
-from django.test import TestCase
-from django.core.exceptions import FieldError
-
-from models import Author, Article
-
-def pks(objects):
- """ Return pks to be able to compare lists"""
- return [o.pk for o in objects]
-
-class CustomColumnRegression(TestCase):
-
- def assertRaisesMessage(self, exc, msg, func, *args, **kwargs):
- try:
- func(*args, **kwargs)
- except Exception, e:
- self.assertEqual(msg, str(e))
- self.assertTrue(isinstance(e, exc), "Expected %s, got %s" % (exc, type(e)))
-
- def setUp(self):
- self.a1 = Author.objects.create(first_name='John', last_name='Smith')
- self.a2 = Author.objects.create(first_name='Peter', last_name='Jones')
- self.authors = [self.a1, self.a2]
-
- def test_basic_creation(self):
- art = Article(headline='Django lets you build Web apps easily', primary_author=self.a1)
- art.save()
- art.authors = [self.a1, self.a2]
-
- def test_author_querying(self):
- self.assertQuerysetEqual(
- Author.objects.all().order_by('last_name'),
- ['<Author: Peter Jones>', '<Author: John Smith>']
- )
-
- def test_author_filtering(self):
- self.assertQuerysetEqual(
- Author.objects.filter(first_name__exact='John'),
- ['<Author: John Smith>']
- )
-
- def test_author_get(self):
- self.assertEqual(self.a1, Author.objects.get(first_name__exact='John'))
-
- def test_filter_on_nonexistant_field(self):
- self.assertRaisesMessage(
- FieldError,
- "Cannot resolve keyword 'firstname' into field. Choices are: Author_ID, article, first_name, last_name, primary_set",
- Author.objects.filter,
- firstname__exact='John'
- )
-
- def test_author_get_attributes(self):
- a = Author.objects.get(last_name__exact='Smith')
- self.assertEqual('John', a.first_name)
- self.assertEqual('Smith', a.last_name)
- self.assertRaisesMessage(
- AttributeError,
- "'Author' object has no attribute 'firstname'",
- getattr,
- a, 'firstname'
- )
-
- self.assertRaisesMessage(
- AttributeError,
- "'Author' object has no attribute 'last'",
- getattr,
- a, 'last'
- )
-
- def test_m2m_table(self):
- art = Article.objects.create(headline='Django lets you build Web apps easily', primary_author=self.a1)
- art.authors = self.authors
- self.assertQuerysetEqual(
- art.authors.all().order_by('last_name'),
- ['<Author: Peter Jones>', '<Author: John Smith>']
- )
- self.assertQuerysetEqual(
- self.a1.article_set.all(),
- ['<Article: Django lets you build Web apps easily>']
- )
- self.assertQuerysetEqual(
- art.authors.filter(last_name='Jones'),
- ['<Author: Peter Jones>']
- )
diff --git a/parts/django/tests/regressiontests/custom_managers_regress/__init__.py b/parts/django/tests/regressiontests/custom_managers_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/custom_managers_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/custom_managers_regress/models.py b/parts/django/tests/regressiontests/custom_managers_regress/models.py
deleted file mode 100644
index 747972b..0000000
--- a/parts/django/tests/regressiontests/custom_managers_regress/models.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-Regression tests for custom manager classes.
-"""
-
-from django.db import models
-
-class RestrictedManager(models.Manager):
- """
- A manager that filters out non-public instances.
- """
- def get_query_set(self):
- return super(RestrictedManager, self).get_query_set().filter(is_public=True)
-
-class RelatedModel(models.Model):
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return self.name
-
-class RestrictedModel(models.Model):
- name = models.CharField(max_length=50)
- is_public = models.BooleanField(default=False)
- related = models.ForeignKey(RelatedModel)
-
- objects = RestrictedManager()
- plain_manager = models.Manager()
-
- def __unicode__(self):
- return self.name
-
-class OneToOneRestrictedModel(models.Model):
- name = models.CharField(max_length=50)
- is_public = models.BooleanField(default=False)
- related = models.OneToOneField(RelatedModel)
-
- objects = RestrictedManager()
- plain_manager = models.Manager()
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/regressiontests/custom_managers_regress/tests.py b/parts/django/tests/regressiontests/custom_managers_regress/tests.py
deleted file mode 100644
index 6dd668a..0000000
--- a/parts/django/tests/regressiontests/custom_managers_regress/tests.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from django.test import TestCase
-
-from models import RelatedModel, RestrictedModel, OneToOneRestrictedModel
-
-class CustomManagersRegressTestCase(TestCase):
- def test_filtered_default_manager(self):
- """Even though the default manager filters out some records,
- we must still be able to save (particularly, save by updating
- existing records) those filtered instances. This is a
- regression test for #8990, #9527"""
- related = RelatedModel.objects.create(name="xyzzy")
- obj = RestrictedModel.objects.create(name="hidden", related=related)
- obj.name = "still hidden"
- obj.save()
-
- # If the hidden object wasn't seen during the save process,
- # there would now be two objects in the database.
- self.assertEqual(RestrictedModel.plain_manager.count(), 1)
-
- def test_delete_related_on_filtered_manager(self):
- """Deleting related objects should also not be distracted by a
- restricted manager on the related object. This is a regression
- test for #2698."""
- related = RelatedModel.objects.create(name="xyzzy")
-
- for name, public in (('one', True), ('two', False), ('three', False)):
- RestrictedModel.objects.create(name=name, is_public=public, related=related)
-
- obj = RelatedModel.objects.get(name="xyzzy")
- obj.delete()
-
- # All of the RestrictedModel instances should have been
- # deleted, since they *all* pointed to the RelatedModel. If
- # the default manager is used, only the public one will be
- # deleted.
- self.assertEqual(len(RestrictedModel.plain_manager.all()), 0)
-
- def test_delete_one_to_one_manager(self):
- # The same test case as the last one, but for one-to-one
- # models, which are implemented slightly different internally,
- # so it's a different code path.
- obj = RelatedModel.objects.create(name="xyzzy")
- OneToOneRestrictedModel.objects.create(name="foo", is_public=False, related=obj)
- obj = RelatedModel.objects.get(name="xyzzy")
- obj.delete()
- self.assertEqual(len(OneToOneRestrictedModel.plain_manager.all()), 0)
-
diff --git a/parts/django/tests/regressiontests/datatypes/__init__.py b/parts/django/tests/regressiontests/datatypes/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/datatypes/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/datatypes/models.py b/parts/django/tests/regressiontests/datatypes/models.py
deleted file mode 100644
index f6fb72d..0000000
--- a/parts/django/tests/regressiontests/datatypes/models.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
-This is a basic model to test saving and loading boolean and date-related
-types, which in the past were problematic for some database backends.
-"""
-
-from django.db import models
-
-class Donut(models.Model):
- name = models.CharField(max_length=100)
- is_frosted = models.BooleanField(default=False)
- has_sprinkles = models.NullBooleanField()
- baked_date = models.DateField(null=True)
- baked_time = models.TimeField(null=True)
- consumed_at = models.DateTimeField(null=True)
- review = models.TextField()
-
- class Meta:
- ordering = ('consumed_at',)
-
- def __str__(self):
- return self.name
-
-class RumBaba(models.Model):
- baked_date = models.DateField(auto_now_add=True)
- baked_timestamp = models.DateTimeField(auto_now_add=True)
diff --git a/parts/django/tests/regressiontests/datatypes/tests.py b/parts/django/tests/regressiontests/datatypes/tests.py
deleted file mode 100644
index f7a0447..0000000
--- a/parts/django/tests/regressiontests/datatypes/tests.py
+++ /dev/null
@@ -1,93 +0,0 @@
-import datetime
-from django.db import DEFAULT_DB_ALIAS
-from django.test import TestCase
-from django.utils import tzinfo
-
-from models import Donut, RumBaba
-from django.conf import settings
-
-class DataTypesTestCase(TestCase):
-
- def test_boolean_type(self):
- d = Donut(name='Apple Fritter')
- self.assertFalse(d.is_frosted)
- self.assertTrue(d.has_sprinkles is None)
- d.has_sprinkles = True
- self.assertTrue(d.has_sprinkles)
-
- d.save()
-
- d2 = Donut.objects.get(name='Apple Fritter')
- self.assertFalse(d2.is_frosted)
- self.assertTrue(d2.has_sprinkles)
-
- def test_date_type(self):
- d = Donut(name='Apple Fritter')
- d.baked_date = datetime.date(year=1938, month=6, day=4)
- d.baked_time = datetime.time(hour=5, minute=30)
- d.consumed_at = datetime.datetime(year=2007, month=4, day=20, hour=16, minute=19, second=59)
- d.save()
-
- d2 = Donut.objects.get(name='Apple Fritter')
- self.assertEqual(d2.baked_date, datetime.date(1938, 6, 4))
- self.assertEqual(d2.baked_time, datetime.time(5, 30))
- self.assertEqual(d2.consumed_at, datetime.datetime(2007, 4, 20, 16, 19, 59))
-
- def test_time_field(self):
- #Test for ticket #12059: TimeField wrongly handling datetime.datetime object.
- d = Donut(name='Apple Fritter')
- d.baked_time = datetime.datetime(year=2007, month=4, day=20, hour=16, minute=19, second=59)
- d.save()
-
- d2 = Donut.objects.get(name='Apple Fritter')
- self.assertEqual(d2.baked_time, datetime.time(16, 19, 59))
-
- def test_year_boundaries(self):
- """Year boundary tests (ticket #3689)"""
- d = Donut.objects.create(name='Date Test 2007',
- baked_date=datetime.datetime(year=2007, month=12, day=31),
- consumed_at=datetime.datetime(year=2007, month=12, day=31, hour=23, minute=59, second=59))
- d1 = Donut.objects.create(name='Date Test 2006',
- baked_date=datetime.datetime(year=2006, month=1, day=1),
- consumed_at=datetime.datetime(year=2006, month=1, day=1))
-
- self.assertEqual("Date Test 2007",
- Donut.objects.filter(baked_date__year=2007)[0].name)
-
- self.assertEqual("Date Test 2006",
- Donut.objects.filter(baked_date__year=2006)[0].name)
-
- d2 = Donut.objects.create(name='Apple Fritter',
- consumed_at = datetime.datetime(year=2007, month=4, day=20, hour=16, minute=19, second=59))
-
- self.assertEqual([u'Apple Fritter', u'Date Test 2007'],
- list(Donut.objects.filter(consumed_at__year=2007).order_by('name').values_list('name', flat=True)))
-
- self.assertEqual(0, Donut.objects.filter(consumed_at__year=2005).count())
- self.assertEqual(0, Donut.objects.filter(consumed_at__year=2008).count())
-
- def test_textfields_unicode(self):
- """Regression test for #10238: TextField values returned from the
- database should be unicode."""
- d = Donut.objects.create(name=u'Jelly Donut', review=u'Outstanding')
- newd = Donut.objects.get(id=d.id)
- self.assert_(isinstance(newd.review, unicode))
-
- def test_tz_awareness_mysql(self):
- """Regression test for #8354: the MySQL backend should raise an error
- if given a timezone-aware datetime object."""
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.mysql':
- dt = datetime.datetime(2008, 8, 31, 16, 20, tzinfo=tzinfo.FixedOffset(0))
- d = Donut(name='Bear claw', consumed_at=dt)
- self.assertRaises(ValueError, d.save)
- # ValueError: MySQL backend does not support timezone-aware datetimes.
-
- def test_datefield_auto_now_add(self):
- """Regression test for #10970, auto_now_add for DateField should store
- a Python datetime.date, not a datetime.datetime"""
- b = RumBaba.objects.create()
- # Verify we didn't break DateTimeField behavior
- self.assert_(isinstance(b.baked_timestamp, datetime.datetime))
- # We need to test this this way because datetime.datetime inherits
- # from datetime.date:
- self.assert_(isinstance(b.baked_date, datetime.date) and not isinstance(b.baked_date, datetime.datetime))
diff --git a/parts/django/tests/regressiontests/db_typecasts/__init__.py b/parts/django/tests/regressiontests/db_typecasts/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/db_typecasts/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/db_typecasts/models.py b/parts/django/tests/regressiontests/db_typecasts/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/db_typecasts/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/db_typecasts/tests.py b/parts/django/tests/regressiontests/db_typecasts/tests.py
deleted file mode 100644
index 8c71c8f..0000000
--- a/parts/django/tests/regressiontests/db_typecasts/tests.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Unit tests for typecast functions in django.db.backends.util
-
-from django.db.backends import util as typecasts
-import datetime, unittest
-
-TEST_CASES = {
- 'typecast_date': (
- ('', None),
- (None, None),
- ('2005-08-11', datetime.date(2005, 8, 11)),
- ('1990-01-01', datetime.date(1990, 1, 1)),
- ),
- 'typecast_time': (
- ('', None),
- (None, None),
- ('0:00:00', datetime.time(0, 0)),
- ('0:30:00', datetime.time(0, 30)),
- ('8:50:00', datetime.time(8, 50)),
- ('08:50:00', datetime.time(8, 50)),
- ('12:00:00', datetime.time(12, 00)),
- ('12:30:00', datetime.time(12, 30)),
- ('13:00:00', datetime.time(13, 00)),
- ('23:59:00', datetime.time(23, 59)),
- ('00:00:12', datetime.time(0, 0, 12)),
- ('00:00:12.5', datetime.time(0, 0, 12, 500000)),
- ('7:22:13.312', datetime.time(7, 22, 13, 312000)),
- ),
- 'typecast_timestamp': (
- ('', None),
- (None, None),
- ('2005-08-11 0:00:00', datetime.datetime(2005, 8, 11)),
- ('2005-08-11 0:30:00', datetime.datetime(2005, 8, 11, 0, 30)),
- ('2005-08-11 8:50:30', datetime.datetime(2005, 8, 11, 8, 50, 30)),
- ('2005-08-11 8:50:30.123', datetime.datetime(2005, 8, 11, 8, 50, 30, 123000)),
- ('2005-08-11 8:50:30.9', datetime.datetime(2005, 8, 11, 8, 50, 30, 900000)),
- ('2005-08-11 8:50:30.312-05', datetime.datetime(2005, 8, 11, 8, 50, 30, 312000)),
- ('2005-08-11 8:50:30.312+02', datetime.datetime(2005, 8, 11, 8, 50, 30, 312000)),
- # ticket 14453
- ('2010-10-12 15:29:22.063202', datetime.datetime(2010, 10, 12, 15, 29, 22, 63202)),
- ('2010-10-12 15:29:22.063202-03', datetime.datetime(2010, 10, 12, 15, 29, 22, 63202)),
- ('2010-10-12 15:29:22.063202+04', datetime.datetime(2010, 10, 12, 15, 29, 22, 63202)),
- ('2010-10-12 15:29:22.0632021', datetime.datetime(2010, 10, 12, 15, 29, 22, 63202)),
- ('2010-10-12 15:29:22.0632029', datetime.datetime(2010, 10, 12, 15, 29, 22, 63202)),
- ),
- 'typecast_boolean': (
- (None, None),
- ('', False),
- ('t', True),
- ('f', False),
- ('x', False),
- ),
-}
-
-class DBTypeCasts(unittest.TestCase):
- def test_typeCasts(self):
- for k, v in TEST_CASES.items():
- for inpt, expected in v:
- got = getattr(typecasts, k)(inpt)
- assert got == expected, "In %s: %r doesn't match %r. Got %r instead." % (k, inpt, expected, got)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/parts/django/tests/regressiontests/decorators/__init__.py b/parts/django/tests/regressiontests/decorators/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/decorators/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/decorators/models.py b/parts/django/tests/regressiontests/decorators/models.py
deleted file mode 100644
index e5a7950..0000000
--- a/parts/django/tests/regressiontests/decorators/models.py
+++ /dev/null
@@ -1,2 +0,0 @@
-# A models.py so that tests run.
-
diff --git a/parts/django/tests/regressiontests/decorators/tests.py b/parts/django/tests/regressiontests/decorators/tests.py
deleted file mode 100644
index ea2e10e..0000000
--- a/parts/django/tests/regressiontests/decorators/tests.py
+++ /dev/null
@@ -1,141 +0,0 @@
-from unittest import TestCase
-from sys import version_info
-try:
- from functools import wraps
-except ImportError:
- from django.utils.functional import wraps # Python 2.4 fallback.
-
-from django.http import HttpResponse, HttpRequest
-from django.utils.functional import allow_lazy, lazy, memoize
-from django.views.decorators.http import require_http_methods, require_GET, require_POST
-from django.views.decorators.vary import vary_on_headers, vary_on_cookie
-from django.views.decorators.cache import cache_page, never_cache, cache_control
-from django.utils.decorators import method_decorator
-from django.contrib.auth.decorators import login_required, permission_required, user_passes_test
-from django.contrib.admin.views.decorators import staff_member_required
-
-def fully_decorated(request):
- """Expected __doc__"""
- return HttpResponse('<html><body>dummy</body></html>')
-fully_decorated.anything = "Expected __dict__"
-
-# django.views.decorators.http
-fully_decorated = require_http_methods(["GET"])(fully_decorated)
-fully_decorated = require_GET(fully_decorated)
-fully_decorated = require_POST(fully_decorated)
-
-# django.views.decorators.vary
-fully_decorated = vary_on_headers('Accept-language')(fully_decorated)
-fully_decorated = vary_on_cookie(fully_decorated)
-
-# django.views.decorators.cache
-fully_decorated = cache_page(60*15)(fully_decorated)
-fully_decorated = cache_control(private=True)(fully_decorated)
-fully_decorated = never_cache(fully_decorated)
-
-# django.contrib.auth.decorators
-# Apply user_passes_test twice to check #9474
-fully_decorated = user_passes_test(lambda u:True)(fully_decorated)
-fully_decorated = login_required(fully_decorated)
-fully_decorated = permission_required('change_world')(fully_decorated)
-
-# django.contrib.admin.views.decorators
-fully_decorated = staff_member_required(fully_decorated)
-
-# django.utils.functional
-fully_decorated = memoize(fully_decorated, {}, 1)
-fully_decorated = allow_lazy(fully_decorated)
-fully_decorated = lazy(fully_decorated)
-
-
-class DecoratorsTest(TestCase):
-
- def test_attributes(self):
- """
- Tests that django decorators set certain attributes of the wrapped
- function.
- """
- # Only check __name__ on Python 2.4 or later since __name__ can't be
- # assigned to in earlier Python versions.
- if version_info[0] >= 2 and version_info[1] >= 4:
- self.assertEquals(fully_decorated.__name__, 'fully_decorated')
- self.assertEquals(fully_decorated.__doc__, 'Expected __doc__')
- self.assertEquals(fully_decorated.__dict__['anything'], 'Expected __dict__')
-
- def test_user_passes_test_composition(self):
- """
- Test that the user_passes_test decorator can be applied multiple times
- (#9474).
- """
- def test1(user):
- user.decorators_applied.append('test1')
- return True
-
- def test2(user):
- user.decorators_applied.append('test2')
- return True
-
- def callback(request):
- return request.user.decorators_applied
-
- callback = user_passes_test(test1)(callback)
- callback = user_passes_test(test2)(callback)
-
- class DummyUser(object): pass
- class DummyRequest(object): pass
-
- request = DummyRequest()
- request.user = DummyUser()
- request.user.decorators_applied = []
- response = callback(request)
-
- self.assertEqual(response, ['test2', 'test1'])
-
- def test_cache_page_new_style(self):
- """
- Test that we can call cache_page the new way
- """
- def my_view(request):
- return "response"
- my_view_cached = cache_page(123)(my_view)
- self.assertEqual(my_view_cached(HttpRequest()), "response")
- my_view_cached2 = cache_page(123, key_prefix="test")(my_view)
- self.assertEqual(my_view_cached2(HttpRequest()), "response")
-
- def test_cache_page_old_style(self):
- """
- Test that we can call cache_page the old way
- """
- def my_view(request):
- return "response"
- my_view_cached = cache_page(my_view, 123)
- self.assertEqual(my_view_cached(HttpRequest()), "response")
- my_view_cached2 = cache_page(my_view, 123, key_prefix="test")
- self.assertEqual(my_view_cached2(HttpRequest()), "response")
- my_view_cached3 = cache_page(my_view)
- self.assertEqual(my_view_cached3(HttpRequest()), "response")
- my_view_cached4 = cache_page()(my_view)
- self.assertEqual(my_view_cached4(HttpRequest()), "response")
-
-
-# For testing method_decorator, a decorator that assumes a single argument.
-# We will get type arguments if there is a mismatch in the number of arguments.
-def simple_dec(func):
- def wrapper(arg):
- return func("test:" + arg)
- return wraps(func)(wrapper)
-
-simple_dec_m = method_decorator(simple_dec)
-
-
-class MethodDecoratorTests(TestCase):
- """
- Tests for method_decorator
- """
- def test_method_decorator(self):
- class Test(object):
- @simple_dec_m
- def say(self, arg):
- return arg
-
- self.assertEqual("test:hello", Test().say("hello"))
diff --git a/parts/django/tests/regressiontests/defaultfilters/__init__.py b/parts/django/tests/regressiontests/defaultfilters/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/defaultfilters/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/defaultfilters/models.py b/parts/django/tests/regressiontests/defaultfilters/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/defaultfilters/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/defaultfilters/tests.py b/parts/django/tests/regressiontests/defaultfilters/tests.py
deleted file mode 100644
index 0866bfc..0000000
--- a/parts/django/tests/regressiontests/defaultfilters/tests.py
+++ /dev/null
@@ -1,485 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-import unittest
-
-from django.template.defaultfilters import *
-
-class DefaultFiltersTests(unittest.TestCase):
-
- def test_floatformat(self):
- self.assertEqual(floatformat(7.7), u'7.7')
- self.assertEqual(floatformat(7.0), u'7')
- self.assertEqual(floatformat(0.7), u'0.7')
- self.assertEqual(floatformat(0.07), u'0.1')
- self.assertEqual(floatformat(0.007), u'0.0')
- self.assertEqual(floatformat(0.0), u'0')
- self.assertEqual(floatformat(7.7, 3), u'7.700')
- self.assertEqual(floatformat(6.000000, 3), u'6.000')
- self.assertEqual(floatformat(6.200000, 3), u'6.200')
- self.assertEqual(floatformat(6.200000, -3), u'6.200')
- self.assertEqual(floatformat(13.1031, -3), u'13.103')
- self.assertEqual(floatformat(11.1197, -2), u'11.12')
- self.assertEqual(floatformat(11.0000, -2), u'11')
- self.assertEqual(floatformat(11.000001, -2), u'11.00')
- self.assertEqual(floatformat(8.2798, 3), u'8.280')
- self.assertEqual(floatformat(u'foo'), u'')
- self.assertEqual(floatformat(13.1031, u'bar'), u'13.1031')
- self.assertEqual(floatformat(18.125, 2), u'18.13')
- self.assertEqual(floatformat(u'foo', u'bar'), u'')
- self.assertEqual(floatformat(u'¿Cómo esta usted?'), u'')
- self.assertEqual(floatformat(None), u'')
-
- pos_inf = float(1e30000)
- self.assertEqual(floatformat(pos_inf), unicode(pos_inf))
-
- neg_inf = float(-1e30000)
- self.assertEqual(floatformat(neg_inf), unicode(neg_inf))
-
- nan = pos_inf / pos_inf
- self.assertEqual(floatformat(nan), unicode(nan))
-
- class FloatWrapper(object):
- def __init__(self, value):
- self.value = value
- def __float__(self):
- return self.value
-
- self.assertEqual(floatformat(FloatWrapper(11.000001), -2), u'11.00')
-
- def test_addslashes(self):
- self.assertEqual(addslashes(u'"double quotes" and \'single quotes\''),
- u'\\"double quotes\\" and \\\'single quotes\\\'')
-
- self.assertEqual(addslashes(ur'\ : backslashes, too'),
- u'\\\\ : backslashes, too')
-
- def test_capfirst(self):
- self.assertEqual(capfirst(u'hello world'), u'Hello world')
-
- def test_escapejs(self):
- self.assertEqual(escapejs(u'"double quotes" and \'single quotes\''),
- u'\\u0022double quotes\\u0022 and \\u0027single quotes\\u0027')
- self.assertEqual(escapejs(ur'\ : backslashes, too'),
- u'\\u005C : backslashes, too')
- self.assertEqual(escapejs(u'and lots of whitespace: \r\n\t\v\f\b'),
- u'and lots of whitespace: \\u000D\\u000A\\u0009\\u000B\\u000C\\u0008')
- self.assertEqual(escapejs(ur'<script>and this</script>'),
- u'\\u003Cscript\\u003Eand this\\u003C/script\\u003E')
- self.assertEqual(
- escapejs(u'paragraph separator:\u2029and line separator:\u2028'),
- u'paragraph separator:\\u2029and line separator:\\u2028')
-
- def test_fix_ampersands(self):
- self.assertEqual(fix_ampersands(u'Jack & Jill & Jeroboam'),
- u'Jack &amp; Jill &amp; Jeroboam')
-
- def test_linenumbers(self):
- self.assertEqual(linenumbers(u'line 1\nline 2'),
- u'1. line 1\n2. line 2')
- self.assertEqual(linenumbers(u'\n'.join([u'x'] * 10)),
- u'01. x\n02. x\n03. x\n04. x\n05. x\n06. x\n07. '\
- u'x\n08. x\n09. x\n10. x')
-
- def test_lower(self):
- self.assertEqual(lower('TEST'), u'test')
-
- # uppercase E umlaut
- self.assertEqual(lower(u'\xcb'), u'\xeb')
-
- def test_make_list(self):
- self.assertEqual(make_list('abc'), [u'a', u'b', u'c'])
- self.assertEqual(make_list(1234), [u'1', u'2', u'3', u'4'])
-
- def test_slugify(self):
- self.assertEqual(slugify(' Jack & Jill like numbers 1,2,3 and 4 and'\
- ' silly characters ?%.$!/'),
- u'jack-jill-like-numbers-123-and-4-and-silly-characters')
-
- self.assertEqual(slugify(u"Un \xe9l\xe9phant \xe0 l'or\xe9e du bois"),
- u'un-elephant-a-loree-du-bois')
-
- def test_stringformat(self):
- self.assertEqual(stringformat(1, u'03d'), u'001')
- self.assertEqual(stringformat(1, u'z'), u'')
-
- def test_title(self):
- self.assertEqual(title('a nice title, isn\'t it?'),
- u"A Nice Title, Isn't It?")
- self.assertEqual(title(u'discoth\xe8que'), u'Discoth\xe8que')
-
- def test_truncatewords(self):
- self.assertEqual(
- truncatewords(u'A sentence with a few words in it', 1), u'A ...')
- self.assertEqual(
- truncatewords(u'A sentence with a few words in it', 5),
- u'A sentence with a few ...')
- self.assertEqual(
- truncatewords(u'A sentence with a few words in it', 100),
- u'A sentence with a few words in it')
- self.assertEqual(
- truncatewords(u'A sentence with a few words in it',
- 'not a number'), u'A sentence with a few words in it')
-
- def test_truncatewords_html(self):
- self.assertEqual(truncatewords_html(
- u'<p>one <a href="#">two - three <br>four</a> five</p>', 0), u'')
- self.assertEqual(truncatewords_html(u'<p>one <a href="#">two - '\
- u'three <br>four</a> five</p>', 2),
- u'<p>one <a href="#">two ...</a></p>')
- self.assertEqual(truncatewords_html(
- u'<p>one <a href="#">two - three <br>four</a> five</p>', 4),
- u'<p>one <a href="#">two - three <br>four ...</a></p>')
- self.assertEqual(truncatewords_html(
- u'<p>one <a href="#">two - three <br>four</a> five</p>', 5),
- u'<p>one <a href="#">two - three <br>four</a> five</p>')
- self.assertEqual(truncatewords_html(
- u'<p>one <a href="#">two - three <br>four</a> five</p>', 100),
- u'<p>one <a href="#">two - three <br>four</a> five</p>')
- self.assertEqual(truncatewords_html(
- u'\xc5ngstr\xf6m was here', 1), u'\xc5ngstr\xf6m ...')
-
- def test_upper(self):
- self.assertEqual(upper(u'Mixed case input'), u'MIXED CASE INPUT')
- # lowercase e umlaut
- self.assertEqual(upper(u'\xeb'), u'\xcb')
-
- def test_urlencode(self):
- self.assertEqual(urlencode(u'fran\xe7ois & jill'),
- u'fran%C3%A7ois%20%26%20jill')
- self.assertEqual(urlencode(1), u'1')
-
- def test_iriencode(self):
- self.assertEqual(iriencode(u'S\xf8r-Tr\xf8ndelag'),
- u'S%C3%B8r-Tr%C3%B8ndelag')
- self.assertEqual(iriencode(urlencode(u'fran\xe7ois & jill')),
- u'fran%C3%A7ois%20%26%20jill')
-
- def test_urlizetrunc(self):
- self.assertEqual(urlizetrunc(u'http://short.com/', 20), u'<a href='\
- u'"http://short.com/" rel="nofollow">http://short.com/</a>')
-
- self.assertEqual(urlizetrunc(u'http://www.google.co.uk/search?hl=en'\
- u'&q=some+long+url&btnG=Search&meta=', 20), u'<a href="http://'\
- u'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&'\
- u'meta=" rel="nofollow">http://www.google...</a>')
-
- self.assertEqual(urlizetrunc('http://www.google.co.uk/search?hl=en'\
- u'&q=some+long+url&btnG=Search&meta=', 20), u'<a href="http://'\
- u'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search'\
- u'&meta=" rel="nofollow">http://www.google...</a>')
-
- # Check truncating of URIs which are the exact length
- uri = 'http://31characteruri.com/test/'
- self.assertEqual(len(uri), 31)
-
- self.assertEqual(urlizetrunc(uri, 31),
- u'<a href="http://31characteruri.com/test/" rel="nofollow">'\
- u'http://31characteruri.com/test/</a>')
-
- self.assertEqual(urlizetrunc(uri, 30),
- u'<a href="http://31characteruri.com/test/" rel="nofollow">'\
- u'http://31characteruri.com/t...</a>')
-
- self.assertEqual(urlizetrunc(uri, 2),
- u'<a href="http://31characteruri.com/test/"'\
- u' rel="nofollow">...</a>')
-
- def test_urlize(self):
- # Check normal urlize
- self.assertEqual(urlize('http://google.com'),
- u'<a href="http://google.com" rel="nofollow">http://google.com</a>')
- self.assertEqual(urlize('http://google.com/'),
- u'<a href="http://google.com/" rel="nofollow">http://google.com/</a>')
- self.assertEqual(urlize('www.google.com'),
- u'<a href="http://www.google.com" rel="nofollow">www.google.com</a>')
- self.assertEqual(urlize('djangoproject.org'),
- u'<a href="http://djangoproject.org" rel="nofollow">djangoproject.org</a>')
- self.assertEqual(urlize('info@djangoproject.org'),
- u'<a href="mailto:info@djangoproject.org">info@djangoproject.org</a>')
-
- # Check urlize with https addresses
- self.assertEqual(urlize('https://google.com'),
- u'<a href="https://google.com" rel="nofollow">https://google.com</a>')
-
- def test_wordcount(self):
- self.assertEqual(wordcount(''), 0)
- self.assertEqual(wordcount(u'oneword'), 1)
- self.assertEqual(wordcount(u'lots of words'), 3)
-
- self.assertEqual(wordwrap(u'this is a long paragraph of text that '\
- u'really needs to be wrapped I\'m afraid', 14),
- u"this is a long\nparagraph of\ntext that\nreally needs\nto be "\
- u"wrapped\nI'm afraid")
-
- self.assertEqual(wordwrap(u'this is a short paragraph of text.\n '\
- u'But this line should be indented', 14),
- u'this is a\nshort\nparagraph of\ntext.\n But this\nline '\
- u'should be\nindented')
-
- self.assertEqual(wordwrap(u'this is a short paragraph of text.\n '\
- u'But this line should be indented',15), u'this is a short\n'\
- u'paragraph of\ntext.\n But this line\nshould be\nindented')
-
- def test_rjust(self):
- self.assertEqual(ljust(u'test', 10), u'test ')
- self.assertEqual(ljust(u'test', 3), u'test')
- self.assertEqual(rjust(u'test', 10), u' test')
- self.assertEqual(rjust(u'test', 3), u'test')
-
- def test_center(self):
- self.assertEqual(center(u'test', 6), u' test ')
-
- def test_cut(self):
- self.assertEqual(cut(u'a string to be mangled', 'a'),
- u' string to be mngled')
- self.assertEqual(cut(u'a string to be mangled', 'ng'),
- u'a stri to be maled')
- self.assertEqual(cut(u'a string to be mangled', 'strings'),
- u'a string to be mangled')
-
- def test_force_escape(self):
- self.assertEqual(
- force_escape(u'<some html & special characters > here'),
- u'&lt;some html &amp; special characters &gt; here')
- self.assertEqual(
- force_escape(u'<some html & special characters > here ĐÅ€£'),
- u'&lt;some html &amp; special characters &gt; here'\
- u' \u0110\xc5\u20ac\xa3')
-
- def test_linebreaks(self):
- self.assertEqual(linebreaks(u'line 1'), u'<p>line 1</p>')
- self.assertEqual(linebreaks(u'line 1\nline 2'),
- u'<p>line 1<br />line 2</p>')
-
- def test_removetags(self):
- self.assertEqual(removetags(u'some <b>html</b> with <script>alert'\
- u'("You smell")</script> disallowed <img /> tags', 'script img'),
- u'some <b>html</b> with alert("You smell") disallowed tags')
- self.assertEqual(striptags(u'some <b>html</b> with <script>alert'\
- u'("You smell")</script> disallowed <img /> tags'),
- u'some html with alert("You smell") disallowed tags')
-
- def test_dictsort(self):
- sorted_dicts = dictsort([{'age': 23, 'name': 'Barbara-Ann'},
- {'age': 63, 'name': 'Ra Ra Rasputin'},
- {'name': 'Jonny B Goode', 'age': 18}], 'age')
-
- self.assertEqual([sorted(dict.items()) for dict in sorted_dicts],
- [[('age', 18), ('name', 'Jonny B Goode')],
- [('age', 23), ('name', 'Barbara-Ann')],
- [('age', 63), ('name', 'Ra Ra Rasputin')]])
-
- def test_dictsortreversed(self):
- sorted_dicts = dictsortreversed([{'age': 23, 'name': 'Barbara-Ann'},
- {'age': 63, 'name': 'Ra Ra Rasputin'},
- {'name': 'Jonny B Goode', 'age': 18}],
- 'age')
-
- self.assertEqual([sorted(dict.items()) for dict in sorted_dicts],
- [[('age', 63), ('name', 'Ra Ra Rasputin')],
- [('age', 23), ('name', 'Barbara-Ann')],
- [('age', 18), ('name', 'Jonny B Goode')]])
-
- def test_first(self):
- self.assertEqual(first([0,1,2]), 0)
- self.assertEqual(first(u''), u'')
- self.assertEqual(first(u'test'), u't')
-
- def test_join(self):
- self.assertEqual(join([0,1,2], u'glue'), u'0glue1glue2')
-
- def test_length(self):
- self.assertEqual(length(u'1234'), 4)
- self.assertEqual(length([1,2,3,4]), 4)
- self.assertEqual(length_is([], 0), True)
- self.assertEqual(length_is([], 1), False)
- self.assertEqual(length_is('a', 1), True)
- self.assertEqual(length_is(u'a', 10), False)
-
- def test_slice(self):
- self.assertEqual(slice_(u'abcdefg', u'0'), u'')
- self.assertEqual(slice_(u'abcdefg', u'1'), u'a')
- self.assertEqual(slice_(u'abcdefg', u'-1'), u'abcdef')
- self.assertEqual(slice_(u'abcdefg', u'1:2'), u'b')
- self.assertEqual(slice_(u'abcdefg', u'1:3'), u'bc')
- self.assertEqual(slice_(u'abcdefg', u'0::2'), u'aceg')
-
- def test_unordered_list(self):
- self.assertEqual(unordered_list([u'item 1', u'item 2']),
- u'\t<li>item 1</li>\n\t<li>item 2</li>')
- self.assertEqual(unordered_list([u'item 1', [u'item 1.1']]),
- u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
-
- self.assertEqual(
- unordered_list([u'item 1', [u'item 1.1', u'item1.2'], u'item 2']),
- u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item1.2'\
- u'</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>')
-
- self.assertEqual(
- unordered_list([u'item 1', [u'item 1.1', [u'item 1.1.1',
- [u'item 1.1.1.1']]]]),
- u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1\n\t\t<ul>\n\t\t\t<li>'\
- u'item 1.1.1\n\t\t\t<ul>\n\t\t\t\t<li>item 1.1.1.1</li>\n\t\t\t'\
- u'</ul>\n\t\t\t</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>')
-
- self.assertEqual(unordered_list(
- ['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]),
- u'\t<li>States\n\t<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>'\
- u'Lawrence</li>\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>'\
- u'\n\t\t<li>Illinois</li>\n\t</ul>\n\t</li>')
-
- class ULItem(object):
- def __init__(self, title):
- self.title = title
- def __unicode__(self):
- return u'ulitem-%s' % str(self.title)
-
- a = ULItem('a')
- b = ULItem('b')
- self.assertEqual(unordered_list([a,b]),
- u'\t<li>ulitem-a</li>\n\t<li>ulitem-b</li>')
-
- # Old format for unordered lists should still work
- self.assertEqual(unordered_list([u'item 1', []]), u'\t<li>item 1</li>')
-
- self.assertEqual(unordered_list([u'item 1', [[u'item 1.1', []]]]),
- u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
-
- self.assertEqual(unordered_list([u'item 1', [[u'item 1.1', []],
- [u'item 1.2', []]]]), u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1'\
- u'</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>')
-
- self.assertEqual(unordered_list(['States', [['Kansas', [['Lawrence',
- []], ['Topeka', []]]], ['Illinois', []]]]), u'\t<li>States\n\t'\
- u'<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>Lawrence</li>'\
- u'\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>\n\t\t<li>'\
- u'Illinois</li>\n\t</ul>\n\t</li>')
-
- def test_add(self):
- self.assertEqual(add(u'1', u'2'), 3)
-
- def test_get_digit(self):
- self.assertEqual(get_digit(123, 1), 3)
- self.assertEqual(get_digit(123, 2), 2)
- self.assertEqual(get_digit(123, 3), 1)
- self.assertEqual(get_digit(123, 4), 0)
- self.assertEqual(get_digit(123, 0), 123)
- self.assertEqual(get_digit(u'xyz', 0), u'xyz')
-
- def test_date(self):
- # real testing of date() is in dateformat.py
- self.assertEqual(date(datetime.datetime(2005, 12, 29), u"d F Y"),
- u'29 December 2005')
- self.assertEqual(date(datetime.datetime(2005, 12, 29), ur'jS o\f F'),
- u'29th of December')
-
- def test_time(self):
- # real testing of time() is done in dateformat.py
- self.assertEqual(time(datetime.time(13), u"h"), u'01')
- self.assertEqual(time(datetime.time(0), u"h"), u'12')
-
- def test_timesince(self):
- # real testing is done in timesince.py, where we can provide our own 'now'
- self.assertEqual(
- timesince(datetime.datetime.now() - datetime.timedelta(1)),
- u'1 day')
-
- self.assertEqual(
- timesince(datetime.datetime(2005, 12, 29),
- datetime.datetime(2005, 12, 30)),
- u'1 day')
-
- def test_timeuntil(self):
- self.assertEqual(
- timeuntil(datetime.datetime.now() + datetime.timedelta(1)),
- u'1 day')
-
- self.assertEqual(timeuntil(datetime.datetime(2005, 12, 30),
- datetime.datetime(2005, 12, 29)),
- u'1 day')
-
- def test_default(self):
- self.assertEqual(default(u"val", u"default"), u'val')
- self.assertEqual(default(None, u"default"), u'default')
- self.assertEqual(default(u'', u"default"), u'default')
-
- def test_if_none(self):
- self.assertEqual(default_if_none(u"val", u"default"), u'val')
- self.assertEqual(default_if_none(None, u"default"), u'default')
- self.assertEqual(default_if_none(u'', u"default"), u'')
-
- def test_divisibleby(self):
- self.assertEqual(divisibleby(4, 2), True)
- self.assertEqual(divisibleby(4, 3), False)
-
- def test_yesno(self):
- self.assertEqual(yesno(True), u'yes')
- self.assertEqual(yesno(False), u'no')
- self.assertEqual(yesno(None), u'maybe')
- self.assertEqual(yesno(True, u'certainly,get out of town,perhaps'),
- u'certainly')
- self.assertEqual(yesno(False, u'certainly,get out of town,perhaps'),
- u'get out of town')
- self.assertEqual(yesno(None, u'certainly,get out of town,perhaps'),
- u'perhaps')
- self.assertEqual(yesno(None, u'certainly,get out of town'),
- u'get out of town')
-
- def test_filesizeformat(self):
- self.assertEqual(filesizeformat(1023), u'1023 bytes')
- self.assertEqual(filesizeformat(1024), u'1.0 KB')
- self.assertEqual(filesizeformat(10*1024), u'10.0 KB')
- self.assertEqual(filesizeformat(1024*1024-1), u'1024.0 KB')
- self.assertEqual(filesizeformat(1024*1024), u'1.0 MB')
- self.assertEqual(filesizeformat(1024*1024*50), u'50.0 MB')
- self.assertEqual(filesizeformat(1024*1024*1024-1), u'1024.0 MB')
- self.assertEqual(filesizeformat(1024*1024*1024), u'1.0 GB')
- self.assertEqual(filesizeformat(complex(1,-1)), u'0 bytes')
- self.assertEqual(filesizeformat(""), u'0 bytes')
- self.assertEqual(filesizeformat(u"\N{GREEK SMALL LETTER ALPHA}"),
- u'0 bytes')
-
- def test_pluralize(self):
- self.assertEqual(pluralize(1), u'')
- self.assertEqual(pluralize(0), u's')
- self.assertEqual(pluralize(2), u's')
- self.assertEqual(pluralize([1]), u'')
- self.assertEqual(pluralize([]), u's')
- self.assertEqual(pluralize([1,2,3]), u's')
- self.assertEqual(pluralize(1,u'es'), u'')
- self.assertEqual(pluralize(0,u'es'), u'es')
- self.assertEqual(pluralize(2,u'es'), u'es')
- self.assertEqual(pluralize(1,u'y,ies'), u'y')
- self.assertEqual(pluralize(0,u'y,ies'), u'ies')
- self.assertEqual(pluralize(2,u'y,ies'), u'ies')
- self.assertEqual(pluralize(0,u'y,ies,error'), u'')
-
- def test_phone2numeric(self):
- self.assertEqual(phone2numeric(u'0800 flowers'), u'0800 3569377')
-
- def test_non_string_input(self):
- # Filters shouldn't break if passed non-strings
- self.assertEqual(addslashes(123), u'123')
- self.assertEqual(linenumbers(123), u'1. 123')
- self.assertEqual(lower(123), u'123')
- self.assertEqual(make_list(123), [u'1', u'2', u'3'])
- self.assertEqual(slugify(123), u'123')
- self.assertEqual(title(123), u'123')
- self.assertEqual(truncatewords(123, 2), u'123')
- self.assertEqual(upper(123), u'123')
- self.assertEqual(urlencode(123), u'123')
- self.assertEqual(urlize(123), u'123')
- self.assertEqual(urlizetrunc(123, 1), u'123')
- self.assertEqual(wordcount(123), 1)
- self.assertEqual(wordwrap(123, 2), u'123')
- self.assertEqual(ljust('123', 4), u'123 ')
- self.assertEqual(rjust('123', 4), u' 123')
- self.assertEqual(center('123', 5), u' 123 ')
- self.assertEqual(center('123', 6), u' 123 ')
- self.assertEqual(cut(123, '2'), u'13')
- self.assertEqual(escape(123), u'123')
- self.assertEqual(linebreaks(123), u'<p>123</p>')
- self.assertEqual(linebreaksbr(123), u'123')
- self.assertEqual(removetags(123, 'a'), u'123')
- self.assertEqual(striptags(123), u'123')
-
diff --git a/parts/django/tests/regressiontests/defer_regress/__init__.py b/parts/django/tests/regressiontests/defer_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/defer_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/defer_regress/models.py b/parts/django/tests/regressiontests/defer_regress/models.py
deleted file mode 100644
index 8db8c29..0000000
--- a/parts/django/tests/regressiontests/defer_regress/models.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-Regression tests for defer() / only() behavior.
-"""
-
-from django.conf import settings
-from django.contrib.contenttypes.models import ContentType
-from django.db import connection, models
-
-class Item(models.Model):
- name = models.CharField(max_length=15)
- text = models.TextField(default="xyzzy")
- value = models.IntegerField()
- other_value = models.IntegerField(default=0)
-
- def __unicode__(self):
- return self.name
-
-class RelatedItem(models.Model):
- item = models.ForeignKey(Item)
-
-class Child(models.Model):
- name = models.CharField(max_length=10)
- value = models.IntegerField()
-
-class Leaf(models.Model):
- name = models.CharField(max_length=10)
- child = models.ForeignKey(Child)
- second_child = models.ForeignKey(Child, related_name="other", null=True)
- value = models.IntegerField(default=42)
-
- def __unicode__(self):
- return self.name
-
-class ResolveThis(models.Model):
- num = models.FloatField()
- name = models.CharField(max_length=16)
diff --git a/parts/django/tests/regressiontests/defer_regress/tests.py b/parts/django/tests/regressiontests/defer_regress/tests.py
deleted file mode 100644
index 05f1279..0000000
--- a/parts/django/tests/regressiontests/defer_regress/tests.py
+++ /dev/null
@@ -1,163 +0,0 @@
-from operator import attrgetter
-
-from django.conf import settings
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.sessions.backends.db import SessionStore
-from django.db import connection
-from django.db.models.loading import cache
-from django.test import TestCase
-
-from models import ResolveThis, Item, RelatedItem, Child, Leaf
-
-
-class DeferRegressionTest(TestCase):
- def assert_num_queries(self, n, func, *args, **kwargs):
- old_DEBUG = settings.DEBUG
- settings.DEBUG = True
- starting_queries = len(connection.queries)
- try:
- func(*args, **kwargs)
- finally:
- settings.DEBUG = old_DEBUG
- self.assertEqual(starting_queries + n, len(connection.queries))
-
- def test_basic(self):
- # Deferred fields should really be deferred and not accidentally use
- # the field's default value just because they aren't passed to __init__
-
- Item.objects.create(name="first", value=42)
- obj = Item.objects.only("name", "other_value").get(name="first")
- # Accessing "name" doesn't trigger a new database query. Accessing
- # "value" or "text" should.
- def test():
- self.assertEqual(obj.name, "first")
- self.assertEqual(obj.other_value, 0)
- self.assert_num_queries(0, test)
-
- def test():
- self.assertEqual(obj.value, 42)
- self.assert_num_queries(1, test)
-
- def test():
- self.assertEqual(obj.text, "xyzzy")
- self.assert_num_queries(1, test)
-
- def test():
- self.assertEqual(obj.text, "xyzzy")
- self.assert_num_queries(0, test)
-
- # Regression test for #10695. Make sure different instances don't
- # inadvertently share data in the deferred descriptor objects.
- i = Item.objects.create(name="no I'm first", value=37)
- items = Item.objects.only("value").order_by("-value")
- self.assertEqual(items[0].name, "first")
- self.assertEqual(items[1].name, "no I'm first")
-
- RelatedItem.objects.create(item=i)
- r = RelatedItem.objects.defer("item").get()
- self.assertEqual(r.item_id, i.id)
- self.assertEqual(r.item, i)
-
- # Some further checks for select_related() and inherited model
- # behaviour (regression for #10710).
- c1 = Child.objects.create(name="c1", value=42)
- c2 = Child.objects.create(name="c2", value=37)
- Leaf.objects.create(name="l1", child=c1, second_child=c2)
-
- obj = Leaf.objects.only("name", "child").select_related()[0]
- self.assertEqual(obj.child.name, "c1")
-
- self.assertQuerysetEqual(
- Leaf.objects.select_related().only("child__name", "second_child__name"), [
- "l1",
- ],
- attrgetter("name")
- )
-
- # Models instances with deferred fields should still return the same
- # content types as their non-deferred versions (bug #10738).
- ctype = ContentType.objects.get_for_model
- c1 = ctype(Item.objects.all()[0])
- c2 = ctype(Item.objects.defer("name")[0])
- c3 = ctype(Item.objects.only("name")[0])
- self.assertTrue(c1 is c2 is c3)
-
- # Regression for #10733 - only() can be used on a model with two
- # foreign keys.
- results = Leaf.objects.only("name", "child", "second_child").select_related()
- self.assertEqual(results[0].child.name, "c1")
- self.assertEqual(results[0].second_child.name, "c2")
-
- results = Leaf.objects.only("name", "child", "second_child", "child__name", "second_child__name").select_related()
- self.assertEqual(results[0].child.name, "c1")
- self.assertEqual(results[0].second_child.name, "c2")
-
- # Test for #12163 - Pickling error saving session with unsaved model
- # instances.
- SESSION_KEY = '2b1189a188b44ad18c35e1baac6ceead'
-
- item = Item()
- item._deferred = False
- s = SessionStore(SESSION_KEY)
- s.clear()
- s["item"] = item
- s.save()
-
- s = SessionStore(SESSION_KEY)
- s.modified = True
- s.save()
-
- i2 = s["item"]
- self.assertFalse(i2._deferred)
-
- # Regression for #11936 - loading.get_models should not return deferred
- # models by default.
- klasses = sorted(
- cache.get_models(cache.get_app("defer_regress")),
- key=lambda klass: klass.__name__
- )
- self.assertEqual(
- klasses, [
- Child,
- Item,
- Leaf,
- RelatedItem,
- ResolveThis,
- ]
- )
-
- klasses = sorted(
- map(
- attrgetter("__name__"),
- cache.get_models(
- cache.get_app("defer_regress"), include_deferred=True
- ),
- )
- )
- self.assertEqual(
- klasses, [
- "Child",
- "Child_Deferred_value",
- "Item",
- "Item_Deferred_name",
- "Item_Deferred_name_other_value_text",
- "Item_Deferred_name_other_value_value",
- "Item_Deferred_other_value_text_value",
- "Item_Deferred_text_value",
- "Leaf",
- "Leaf_Deferred_child_id_second_child_id_value",
- "Leaf_Deferred_name_value",
- "Leaf_Deferred_second_child_value",
- "Leaf_Deferred_value",
- "RelatedItem",
- "RelatedItem_Deferred_",
- "RelatedItem_Deferred_item_id",
- "ResolveThis",
- ]
- )
-
- def test_resolve_columns(self):
- rt = ResolveThis.objects.create(num=5.0, name='Foobar')
- qs = ResolveThis.objects.defer('num')
- self.assertEqual(1, qs.count())
- self.assertEqual('Foobar', qs[0].name)
diff --git a/parts/django/tests/regressiontests/delete_regress/__init__.py b/parts/django/tests/regressiontests/delete_regress/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/regressiontests/delete_regress/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/delete_regress/models.py b/parts/django/tests/regressiontests/delete_regress/models.py
deleted file mode 100644
index 8109c0a..0000000
--- a/parts/django/tests/regressiontests/delete_regress/models.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from django.db import models
-
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-
-class Award(models.Model):
- name = models.CharField(max_length=25)
- object_id = models.PositiveIntegerField()
- content_type = models.ForeignKey(ContentType)
- content_object = generic.GenericForeignKey()
-
-class AwardNote(models.Model):
- award = models.ForeignKey(Award)
- note = models.CharField(max_length=100)
-
-class Person(models.Model):
- name = models.CharField(max_length=25)
- awards = generic.GenericRelation(Award)
-
-class Book(models.Model):
- pagecount = models.IntegerField()
-
-class Toy(models.Model):
- name = models.CharField(max_length=50)
-
-class Child(models.Model):
- name = models.CharField(max_length=50)
- toys = models.ManyToManyField(Toy, through='PlayedWith')
-
-class PlayedWith(models.Model):
- child = models.ForeignKey(Child)
- toy = models.ForeignKey(Toy)
- date = models.DateField(db_column='date_col')
-
-class PlayedWithNote(models.Model):
- played = models.ForeignKey(PlayedWith)
- note = models.TextField()
diff --git a/parts/django/tests/regressiontests/delete_regress/tests.py b/parts/django/tests/regressiontests/delete_regress/tests.py
deleted file mode 100644
index 26cd3c5..0000000
--- a/parts/django/tests/regressiontests/delete_regress/tests.py
+++ /dev/null
@@ -1,116 +0,0 @@
-import datetime
-
-from django.conf import settings
-from django.db import backend, connection, transaction, DEFAULT_DB_ALIAS
-from django.test import TestCase, TransactionTestCase
-
-from models import Book, Award, AwardNote, Person, Child, Toy, PlayedWith, PlayedWithNote
-
-# Can't run this test under SQLite, because you can't
-# get two connections to an in-memory database.
-if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.sqlite3':
- class DeleteLockingTest(TransactionTestCase):
- def setUp(self):
- # Create a second connection to the default database
- conn_settings = settings.DATABASES[DEFAULT_DB_ALIAS]
- self.conn2 = backend.DatabaseWrapper({
- 'HOST': conn_settings['HOST'],
- 'NAME': conn_settings['NAME'],
- 'OPTIONS': conn_settings['OPTIONS'],
- 'PASSWORD': conn_settings['PASSWORD'],
- 'PORT': conn_settings['PORT'],
- 'USER': conn_settings['USER'],
- 'TIME_ZONE': settings.TIME_ZONE,
- })
-
- # Put both DB connections into managed transaction mode
- transaction.enter_transaction_management()
- transaction.managed(True)
- self.conn2._enter_transaction_management(True)
-
- def tearDown(self):
- # Close down the second connection.
- transaction.leave_transaction_management()
- self.conn2.close()
-
- def test_concurrent_delete(self):
- "Deletes on concurrent transactions don't collide and lock the database. Regression for #9479"
-
- # Create some dummy data
- b1 = Book(id=1, pagecount=100)
- b2 = Book(id=2, pagecount=200)
- b3 = Book(id=3, pagecount=300)
- b1.save()
- b2.save()
- b3.save()
-
- transaction.commit()
-
- self.assertEquals(3, Book.objects.count())
-
- # Delete something using connection 2.
- cursor2 = self.conn2.cursor()
- cursor2.execute('DELETE from delete_regress_book WHERE id=1')
- self.conn2._commit();
-
- # Now perform a queryset delete that covers the object
- # deleted in connection 2. This causes an infinite loop
- # under MySQL InnoDB unless we keep track of already
- # deleted objects.
- Book.objects.filter(pagecount__lt=250).delete()
- transaction.commit()
- self.assertEquals(1, Book.objects.count())
-
-class DeleteCascadeTests(TestCase):
- def test_generic_relation_cascade(self):
- """
- Test that Django cascades deletes through generic-related
- objects to their reverse relations.
-
- This might falsely succeed if the database cascades deletes
- itself immediately; the postgresql_psycopg2 backend does not
- give such a false success because ForeignKeys are created with
- DEFERRABLE INITIALLY DEFERRED, so its internal cascade is
- delayed until transaction commit.
-
- """
- person = Person.objects.create(name='Nelson Mandela')
- award = Award.objects.create(name='Nobel', content_object=person)
- note = AwardNote.objects.create(note='a peace prize',
- award=award)
- self.assertEquals(AwardNote.objects.count(), 1)
- person.delete()
- self.assertEquals(Award.objects.count(), 0)
- # first two asserts are just sanity checks, this is the kicker:
- self.assertEquals(AwardNote.objects.count(), 0)
-
- def test_fk_to_m2m_through(self):
- """
- Test that if a M2M relationship has an explicitly-specified
- through model, and some other model has an FK to that through
- model, deletion is cascaded from one of the participants in
- the M2M, to the through model, to its related model.
-
- Like the above test, this could in theory falsely succeed if
- the DB cascades deletes itself immediately.
-
- """
- juan = Child.objects.create(name='Juan')
- paints = Toy.objects.create(name='Paints')
- played = PlayedWith.objects.create(child=juan, toy=paints,
- date=datetime.date.today())
- note = PlayedWithNote.objects.create(played=played,
- note='the next Jackson Pollock')
- self.assertEquals(PlayedWithNote.objects.count(), 1)
- paints.delete()
- self.assertEquals(PlayedWith.objects.count(), 0)
- # first two asserts just sanity checks, this is the kicker:
- self.assertEquals(PlayedWithNote.objects.count(), 0)
-
-class LargeDeleteTests(TestCase):
- def test_large_deletes(self):
- "Regression for #13309 -- if the number of objects > chunk size, deletion still occurs"
- for x in range(300):
- track = Book.objects.create(pagecount=x+100)
- Book.objects.all().delete()
- self.assertEquals(Book.objects.count(), 0)
diff --git a/parts/django/tests/regressiontests/dispatch/__init__.py b/parts/django/tests/regressiontests/dispatch/__init__.py
deleted file mode 100644
index 679895b..0000000
--- a/parts/django/tests/regressiontests/dispatch/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-"""Unit-tests for the dispatch project
-"""
diff --git a/parts/django/tests/regressiontests/dispatch/models.py b/parts/django/tests/regressiontests/dispatch/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/dispatch/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/dispatch/tests/__init__.py b/parts/django/tests/regressiontests/dispatch/tests/__init__.py
deleted file mode 100644
index 150bb01..0000000
--- a/parts/django/tests/regressiontests/dispatch/tests/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"""
-Unit-tests for the dispatch project
-"""
-
-from test_saferef import *
-from test_dispatcher import *
diff --git a/parts/django/tests/regressiontests/dispatch/tests/test_dispatcher.py b/parts/django/tests/regressiontests/dispatch/tests/test_dispatcher.py
deleted file mode 100644
index ad3a05f..0000000
--- a/parts/django/tests/regressiontests/dispatch/tests/test_dispatcher.py
+++ /dev/null
@@ -1,123 +0,0 @@
-from django.dispatch import Signal
-import unittest
-import sys
-import gc
-import django.utils.copycompat as copy
-
-if sys.platform.startswith('java'):
- def garbage_collect():
- """Run the garbage collector and wait a bit to let it do his work"""
- import time
- gc.collect()
- time.sleep(0.1)
-else:
- def garbage_collect():
- gc.collect()
-
-def receiver_1_arg(val, **kwargs):
- return val
-
-class Callable(object):
- def __call__(self, val, **kwargs):
- return val
-
- def a(self, val, **kwargs):
- return val
-
-a_signal = Signal(providing_args=["val"])
-
-class DispatcherTests(unittest.TestCase):
- """Test suite for dispatcher (barely started)"""
-
- def _testIsClean(self, signal):
- """Assert that everything has been cleaned up automatically"""
- self.assertEqual(signal.receivers, [])
-
- # force cleanup just in case
- signal.receivers = []
-
- def testExact(self):
- a_signal.connect(receiver_1_arg, sender=self)
- expected = [(receiver_1_arg,"test")]
- result = a_signal.send(sender=self, val="test")
- self.assertEqual(result, expected)
- a_signal.disconnect(receiver_1_arg, sender=self)
- self._testIsClean(a_signal)
-
- def testIgnoredSender(self):
- a_signal.connect(receiver_1_arg)
- expected = [(receiver_1_arg,"test")]
- result = a_signal.send(sender=self, val="test")
- self.assertEqual(result, expected)
- a_signal.disconnect(receiver_1_arg)
- self._testIsClean(a_signal)
-
- def testGarbageCollected(self):
- a = Callable()
- a_signal.connect(a.a, sender=self)
- expected = []
- del a
- garbage_collect()
- result = a_signal.send(sender=self, val="test")
- self.assertEqual(result, expected)
- self._testIsClean(a_signal)
-
- def testMultipleRegistration(self):
- a = Callable()
- a_signal.connect(a)
- a_signal.connect(a)
- a_signal.connect(a)
- a_signal.connect(a)
- a_signal.connect(a)
- a_signal.connect(a)
- result = a_signal.send(sender=self, val="test")
- self.assertEqual(len(result), 1)
- self.assertEqual(len(a_signal.receivers), 1)
- del a
- del result
- garbage_collect()
- self._testIsClean(a_signal)
-
- def testUidRegistration(self):
- def uid_based_receiver_1(**kwargs):
- pass
-
- def uid_based_receiver_2(**kwargs):
- pass
-
- a_signal.connect(uid_based_receiver_1, dispatch_uid = "uid")
- a_signal.connect(uid_based_receiver_2, dispatch_uid = "uid")
- self.assertEqual(len(a_signal.receivers), 1)
- a_signal.disconnect(dispatch_uid = "uid")
- self._testIsClean(a_signal)
-
- def testRobust(self):
- """Test the sendRobust function"""
- def fails(val, **kwargs):
- raise ValueError('this')
- a_signal.connect(fails)
- result = a_signal.send_robust(sender=self, val="test")
- err = result[0][1]
- self.assert_(isinstance(err, ValueError))
- self.assertEqual(err.args, ('this',))
- a_signal.disconnect(fails)
- self._testIsClean(a_signal)
-
- def testDisconnection(self):
- receiver_1 = Callable()
- receiver_2 = Callable()
- receiver_3 = Callable()
- a_signal.connect(receiver_1)
- a_signal.connect(receiver_2)
- a_signal.connect(receiver_3)
- a_signal.disconnect(receiver_1)
- del receiver_2
- garbage_collect()
- a_signal.disconnect(receiver_3)
- self._testIsClean(a_signal)
-
-def getSuite():
- return unittest.makeSuite(DispatcherTests,'test')
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/parts/django/tests/regressiontests/dispatch/tests/test_saferef.py b/parts/django/tests/regressiontests/dispatch/tests/test_saferef.py
deleted file mode 100644
index c0ec879..0000000
--- a/parts/django/tests/regressiontests/dispatch/tests/test_saferef.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from django.dispatch.saferef import *
-
-import unittest
-
-class Test1(object):
- def x(self):
- pass
-
-def test2(obj):
- pass
-
-class Test2(object):
- def __call__(self, obj):
- pass
-
-class Tester(unittest.TestCase):
- def setUp(self):
- ts = []
- ss = []
- for x in xrange(5000):
- t = Test1()
- ts.append(t)
- s = safeRef(t.x, self._closure)
- ss.append(s)
- ts.append(test2)
- ss.append(safeRef(test2, self._closure))
- for x in xrange(30):
- t = Test2()
- ts.append(t)
- s = safeRef(t, self._closure)
- ss.append(s)
- self.ts = ts
- self.ss = ss
- self.closureCount = 0
-
- def tearDown(self):
- del self.ts
- del self.ss
-
- def testIn(self):
- """Test the "in" operator for safe references (cmp)"""
- for t in self.ts[:50]:
- self.assert_(safeRef(t.x) in self.ss)
-
- def testValid(self):
- """Test that the references are valid (return instance methods)"""
- for s in self.ss:
- self.assert_(s())
-
- def testShortCircuit (self):
- """Test that creation short-circuits to reuse existing references"""
- sd = {}
- for s in self.ss:
- sd[s] = 1
- for t in self.ts:
- if hasattr(t, 'x'):
- self.assert_(sd.has_key(safeRef(t.x)))
- self.assert_(safeRef(t.x) in sd)
- else:
- self.assert_(sd.has_key(safeRef(t)))
- self.assert_(safeRef(t) in sd)
-
- def testRepresentation (self):
- """Test that the reference object's representation works
-
- XXX Doesn't currently check the results, just that no error
- is raised
- """
- repr(self.ss[-1])
-
- def _closure(self, ref):
- """Dumb utility mechanism to increment deletion counter"""
- self.closureCount +=1
-
-def getSuite():
- return unittest.makeSuite(Tester,'test')
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/parts/django/tests/regressiontests/expressions_regress/__init__.py b/parts/django/tests/regressiontests/expressions_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/expressions_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/expressions_regress/models.py b/parts/django/tests/regressiontests/expressions_regress/models.py
deleted file mode 100644
index f2997ee..0000000
--- a/parts/django/tests/regressiontests/expressions_regress/models.py
+++ /dev/null
@@ -1,12 +0,0 @@
-"""
-Model for testing arithmetic expressions.
-"""
-from django.db import models
-
-class Number(models.Model):
- integer = models.IntegerField(db_column='the_integer')
- float = models.FloatField(null=True, db_column='the_float')
-
- def __unicode__(self):
- return u'%i, %.3f' % (self.integer, self.float)
-
diff --git a/parts/django/tests/regressiontests/expressions_regress/tests.py b/parts/django/tests/regressiontests/expressions_regress/tests.py
deleted file mode 100644
index a662728..0000000
--- a/parts/django/tests/regressiontests/expressions_regress/tests.py
+++ /dev/null
@@ -1,195 +0,0 @@
-"""
-Spanning tests for all the operations that F() expressions can perform.
-"""
-from django.test import TestCase, Approximate
-
-from django.conf import settings
-from django.db import models, DEFAULT_DB_ALIAS
-from django.db.models import F
-
-from regressiontests.expressions_regress.models import Number
-
-class ExpressionsRegressTests(TestCase):
-
- def setUp(self):
- Number(integer=-1).save()
- Number(integer=42).save()
- Number(integer=1337).save()
- self.assertEqual(Number.objects.update(float=F('integer')), 3)
-
- def test_fill_with_value_from_same_object(self):
- """
- We can fill a value in all objects with an other value of the
- same object.
- """
- self.assertQuerysetEqual(
- Number.objects.all(),
- [
- '<Number: -1, -1.000>',
- '<Number: 42, 42.000>',
- '<Number: 1337, 1337.000>'
- ]
- )
-
- def test_increment_value(self):
- """
- We can increment a value of all objects in a query set.
- """
- self.assertEqual(
- Number.objects.filter(integer__gt=0)
- .update(integer=F('integer') + 1),
- 2)
-
- self.assertQuerysetEqual(
- Number.objects.all(),
- [
- '<Number: -1, -1.000>',
- '<Number: 43, 42.000>',
- '<Number: 1338, 1337.000>'
- ]
- )
-
- def test_filter_not_equals_other_field(self):
- """
- We can filter for objects, where a value is not equals the value
- of an other field.
- """
- self.assertEqual(
- Number.objects.filter(integer__gt=0)
- .update(integer=F('integer') + 1),
- 2)
- self.assertQuerysetEqual(
- Number.objects.exclude(float=F('integer')),
- [
- '<Number: 43, 42.000>',
- '<Number: 1338, 1337.000>'
- ]
- )
-
- def test_complex_expressions(self):
- """
- Complex expressions of different connection types are possible.
- """
- n = Number.objects.create(integer=10, float=123.45)
- self.assertEqual(Number.objects.filter(pk=n.pk)
- .update(float=F('integer') + F('float') * 2),
- 1)
-
- self.assertEqual(Number.objects.get(pk=n.pk).integer, 10)
- self.assertEqual(Number.objects.get(pk=n.pk).float, Approximate(256.900, places=3))
-
-class ExpressionOperatorTests(TestCase):
- def setUp(self):
- self.n = Number.objects.create(integer=42, float=15.5)
-
- def test_lefthand_addition(self):
- # LH Addition of floats and integers
- Number.objects.filter(pk=self.n.pk).update(
- integer=F('integer') + 15,
- float=F('float') + 42.7
- )
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 57)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(58.200, places=3))
-
- def test_lefthand_subtraction(self):
- # LH Subtraction of floats and integers
- Number.objects.filter(pk=self.n.pk).update(integer=F('integer') - 15,
- float=F('float') - 42.7)
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 27)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(-27.200, places=3))
-
- def test_lefthand_multiplication(self):
- # Multiplication of floats and integers
- Number.objects.filter(pk=self.n.pk).update(integer=F('integer') * 15,
- float=F('float') * 42.7)
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 630)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(661.850, places=3))
-
- def test_lefthand_division(self):
- # LH Division of floats and integers
- Number.objects.filter(pk=self.n.pk).update(integer=F('integer') / 2,
- float=F('float') / 42.7)
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 21)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(0.363, places=3))
-
- def test_lefthand_modulo(self):
- # LH Modulo arithmetic on integers
- Number.objects.filter(pk=self.n.pk).update(integer=F('integer') % 20)
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 2)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(15.500, places=3))
-
- def test_lefthand_bitwise_and(self):
- # LH Bitwise ands on integers
- Number.objects.filter(pk=self.n.pk).update(integer=F('integer') & 56)
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 40)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(15.500, places=3))
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.oracle':
- def test_lefthand_bitwise_or(self):
- # LH Bitwise or on integers
- Number.objects.filter(pk=self.n.pk).update(integer=F('integer') | 48)
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 58)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(15.500, places=3))
-
- def test_right_hand_addition(self):
- # Right hand operators
- Number.objects.filter(pk=self.n.pk).update(integer=15 + F('integer'),
- float=42.7 + F('float'))
-
- # RH Addition of floats and integers
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 57)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(58.200, places=3))
-
- def test_right_hand_subtraction(self):
- Number.objects.filter(pk=self.n.pk).update(integer=15 - F('integer'),
- float=42.7 - F('float'))
-
- # RH Subtraction of floats and integers
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, -27)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(27.200, places=3))
-
- def test_right_hand_multiplication(self):
- # RH Multiplication of floats and integers
- Number.objects.filter(pk=self.n.pk).update(integer=15 * F('integer'),
- float=42.7 * F('float'))
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 630)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(661.850, places=3))
-
- def test_right_hand_division(self):
- # RH Division of floats and integers
- Number.objects.filter(pk=self.n.pk).update(integer=640 / F('integer'),
- float=42.7 / F('float'))
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 15)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(2.755, places=3))
-
- def test_right_hand_modulo(self):
- # RH Modulo arithmetic on integers
- Number.objects.filter(pk=self.n.pk).update(integer=69 % F('integer'))
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 27)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(15.500, places=3))
-
- def test_right_hand_bitwise_and(self):
- # RH Bitwise ands on integers
- Number.objects.filter(pk=self.n.pk).update(integer=15 & F('integer'))
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 10)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(15.500, places=3))
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.oracle':
- def test_right_hand_bitwise_or(self):
- # RH Bitwise or on integers
- Number.objects.filter(pk=self.n.pk).update(integer=15 | F('integer'))
-
- self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 47)
- self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(15.500, places=3))
-
diff --git a/parts/django/tests/regressiontests/extra_regress/__init__.py b/parts/django/tests/regressiontests/extra_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/extra_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/extra_regress/models.py b/parts/django/tests/regressiontests/extra_regress/models.py
deleted file mode 100644
index 073157a..0000000
--- a/parts/django/tests/regressiontests/extra_regress/models.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import datetime
-
-import django.utils.copycompat as copy
-
-from django.contrib.auth.models import User
-from django.db import models
-
-class RevisionableModel(models.Model):
- base = models.ForeignKey('self', null=True)
- title = models.CharField(blank=True, max_length=255)
- when = models.DateTimeField(default=datetime.datetime.now)
-
- def __unicode__(self):
- return u"%s (%s, %s)" % (self.title, self.id, self.base.id)
-
- def save(self, *args, **kwargs):
- super(RevisionableModel, self).save(*args, **kwargs)
- if not self.base:
- self.base = self
- kwargs.pop('force_insert', None)
- kwargs.pop('force_update', None)
- super(RevisionableModel, self).save(*args, **kwargs)
-
- def new_revision(self):
- new_revision = copy.copy(self)
- new_revision.pk = None
- return new_revision
-
-class Order(models.Model):
- created_by = models.ForeignKey(User)
- text = models.TextField()
-
-class TestObject(models.Model):
- first = models.CharField(max_length=20)
- second = models.CharField(max_length=20)
- third = models.CharField(max_length=20)
-
- def __unicode__(self):
- return u'TestObject: %s,%s,%s' % (self.first,self.second,self.third)
-
diff --git a/parts/django/tests/regressiontests/extra_regress/tests.py b/parts/django/tests/regressiontests/extra_regress/tests.py
deleted file mode 100644
index ef7cbb8..0000000
--- a/parts/django/tests/regressiontests/extra_regress/tests.py
+++ /dev/null
@@ -1,314 +0,0 @@
-from django.test import TestCase
-
-from django.utils.datastructures import SortedDict
-
-from django.contrib.auth.models import User
-from regressiontests.extra_regress.models import TestObject, Order, \
- RevisionableModel
-
-import datetime
-
-class ExtraRegressTests(TestCase):
-
- def setUp(self):
- self.u = User.objects.create_user(
- username="fred",
- password="secret",
- email="fred@example.com"
- )
-
- def test_regression_7314_7372(self):
- """
- Regression tests for #7314 and #7372
- """
- rm = RevisionableModel.objects.create(
- title='First Revision',
- when=datetime.datetime(2008, 9, 28, 10, 30, 0)
- )
- self.assertEqual(rm.pk, rm.base.pk)
-
- rm2 = rm.new_revision()
- rm2.title = "Second Revision"
- rm.when = datetime.datetime(2008, 9, 28, 14, 25, 0)
- rm2.save()
-
- self.assertEqual(rm2.title, 'Second Revision')
- self.assertEqual(rm2.base.title, 'First Revision')
-
- self.assertNotEqual(rm2.pk, rm.pk)
- self.assertEqual(rm2.base.pk, rm.pk)
-
- # Queryset to match most recent revision:
- qs = RevisionableModel.objects.extra(
- where=["%(table)s.id IN (SELECT MAX(rev.id) FROM %(table)s rev GROUP BY rev.base_id)" % {
- 'table': RevisionableModel._meta.db_table,
- }]
- )
-
- self.assertQuerysetEqual(qs,
- [('Second Revision', 'First Revision')],
- transform=lambda r: (r.title, r.base.title)
- )
-
- # Queryset to search for string in title:
- qs2 = RevisionableModel.objects.filter(title__contains="Revision")
- self.assertQuerysetEqual(qs2,
- [
- ('First Revision', 'First Revision'),
- ('Second Revision', 'First Revision'),
- ],
- transform=lambda r: (r.title, r.base.title)
- )
-
- # Following queryset should return the most recent revision:
- self.assertQuerysetEqual(qs & qs2,
- [('Second Revision', 'First Revision')],
- transform=lambda r: (r.title, r.base.title)
- )
-
- def test_extra_stay_tied(self):
- # Extra select parameters should stay tied to their corresponding
- # select portions. Applies when portions are updated or otherwise
- # moved around.
- qs = User.objects.extra(
- select=SortedDict((("alpha", "%s"), ("beta", "2"), ("gamma", "%s"))),
- select_params=(1, 3)
- )
- qs = qs.extra(select={"beta": 4})
- qs = qs.extra(select={"alpha": "%s"}, select_params=[5])
- self.assertEqual(
- list(qs.filter(id=self.u.id).values('alpha', 'beta', 'gamma')),
- [{'alpha': 5, 'beta': 4, 'gamma': 3}]
- )
-
- def test_regression_7957(self):
- """
- Regression test for #7957: Combining extra() calls should leave the
- corresponding parameters associated with the right extra() bit. I.e.
- internal dictionary must remain sorted.
- """
- self.assertEqual(
- User.objects.extra(select={"alpha": "%s"}, select_params=(1,)
- ).extra(select={"beta": "%s"}, select_params=(2,))[0].alpha,
- 1)
-
- self.assertEqual(
- User.objects.extra(select={"beta": "%s"}, select_params=(1,)
- ).extra(select={"alpha": "%s"}, select_params=(2,))[0].alpha,
- 2)
-
- def test_regression_7961(self):
- """
- Regression test for #7961: When not using a portion of an
- extra(...) in a query, remove any corresponding parameters from the
- query as well.
- """
- self.assertEqual(
- list(User.objects.extra(select={"alpha": "%s"}, select_params=(-6,)
- ).filter(id=self.u.id).values_list('id', flat=True)),
- [self.u.id]
- )
-
- def test_regression_8063(self):
- """
- Regression test for #8063: limiting a query shouldn't discard any
- extra() bits.
- """
- qs = User.objects.all().extra(where=['id=%s'], params=[self.u.id])
- self.assertQuerysetEqual(qs, ['<User: fred>'])
- self.assertQuerysetEqual(qs[:1], ['<User: fred>'])
-
- def test_regression_8039(self):
- """
- Regression test for #8039: Ordering sometimes removed relevant tables
- from extra(). This test is the critical case: ordering uses a table,
- but then removes the reference because of an optimisation. The table
- should still be present because of the extra() call.
- """
- self.assertQuerysetEqual(
- Order.objects.extra(where=["username=%s"],
- params=["fred"],
- tables=["auth_user"]
- ).order_by('created_by'),
- []
- )
-
- def test_regression_8819(self):
- """
- Regression test for #8819: Fields in the extra(select=...) list
- should be available to extra(order_by=...).
- """
- self.assertQuerysetEqual(
- User.objects.filter(pk=self.u.id).extra(select={'extra_field': 1}).distinct(),
- ['<User: fred>']
- )
- self.assertQuerysetEqual(
- User.objects.filter(pk=self.u.id).extra(select={'extra_field': 1}, order_by=['extra_field']),
- ['<User: fred>']
- )
- self.assertQuerysetEqual(
- User.objects.filter(pk=self.u.id).extra(select={'extra_field': 1}, order_by=['extra_field']).distinct(),
- ['<User: fred>']
- )
-
- def test_dates_query(self):
- """
- When calling the dates() method on a queryset with extra selection
- columns, we can (and should) ignore those columns. They don't change
- the result and cause incorrect SQL to be produced otherwise.
- """
- rm = RevisionableModel.objects.create(
- title='First Revision',
- when=datetime.datetime(2008, 9, 28, 10, 30, 0)
- )
-
- self.assertQuerysetEqual(
- RevisionableModel.objects.extra(select={"the_answer": 'id'}).dates('when', 'month'),
- ['datetime.datetime(2008, 9, 1, 0, 0)']
- )
-
- def test_values_with_extra(self):
- """
- Regression test for #10256... If there is a values() clause, Extra
- columns are only returned if they are explicitly mentioned.
- """
- obj = TestObject(first='first', second='second', third='third')
- obj.save()
-
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values()),
- [{'bar': u'second', 'third': u'third', 'second': u'second', 'whiz': u'third', 'foo': u'first', 'id': obj.pk, 'first': u'first'}]
- )
-
- # Extra clauses after an empty values clause are still included
- self.assertEqual(
- list(TestObject.objects.values().extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
- [{'bar': u'second', 'third': u'third', 'second': u'second', 'whiz': u'third', 'foo': u'first', 'id': obj.pk, 'first': u'first'}]
- )
-
- # Extra columns are ignored if not mentioned in the values() clause
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values('first', 'second')),
- [{'second': u'second', 'first': u'first'}]
- )
-
- # Extra columns after a non-empty values() clause are ignored
- self.assertEqual(
- list(TestObject.objects.values('first', 'second').extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
- [{'second': u'second', 'first': u'first'}]
- )
-
- # Extra columns can be partially returned
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values('first', 'second', 'foo')),
- [{'second': u'second', 'foo': u'first', 'first': u'first'}]
- )
-
- # Also works if only extra columns are included
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values('foo', 'whiz')),
- [{'foo': u'first', 'whiz': u'third'}]
- )
-
- # Values list works the same way
- # All columns are returned for an empty values_list()
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list()),
- [(u'first', u'second', u'third', obj.pk, u'first', u'second', u'third')]
- )
-
- # Extra columns after an empty values_list() are still included
- self.assertEqual(
- list(TestObject.objects.values_list().extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
- [(u'first', u'second', u'third', obj.pk, u'first', u'second', u'third')]
- )
-
- # Extra columns ignored completely if not mentioned in values_list()
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('first', 'second')),
- [(u'first', u'second')]
- )
-
- # Extra columns after a non-empty values_list() clause are ignored completely
- self.assertEqual(
- list(TestObject.objects.values_list('first', 'second').extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
- [(u'first', u'second')]
- )
-
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('second', flat=True)),
- [u'second']
- )
-
- # Only the extra columns specified in the values_list() are returned
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('first', 'second', 'whiz')),
- [(u'first', u'second', u'third')]
- )
-
- # ...also works if only extra columns are included
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('foo','whiz')),
- [(u'first', u'third')]
- )
-
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('whiz', flat=True)),
- [u'third']
- )
-
- # ... and values are returned in the order they are specified
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('whiz','foo')),
- [(u'third', u'first')]
- )
-
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('first','id')),
- [(u'first', obj.pk)]
- )
-
- self.assertEqual(
- list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('whiz', 'first', 'bar', 'id')),
- [(u'third', u'first', u'second', obj.pk)]
- )
-
- def test_regression_10847(self):
- """
- Regression for #10847: the list of extra columns can always be
- accurately evaluated. Using an inner query ensures that as_sql() is
- producing correct output without requiring full evaluation and
- execution of the inner query.
- """
- obj = TestObject(first='first', second='second', third='third')
- obj.save()
-
- self.assertEqual(
- list(TestObject.objects.extra(select={'extra': 1}).values('pk')),
- [{'pk': obj.pk}]
- )
-
- self.assertQuerysetEqual(
- TestObject.objects.filter(
- pk__in=TestObject.objects.extra(select={'extra': 1}).values('pk')
- ),
- ['<TestObject: TestObject: first,second,third>']
- )
-
- self.assertEqual(
- list(TestObject.objects.values('pk').extra(select={'extra': 1})),
- [{'pk': obj.pk}]
- )
-
- self.assertQuerysetEqual(
- TestObject.objects.filter(
- pk__in=TestObject.objects.values('pk').extra(select={'extra': 1})
- ),
- ['<TestObject: TestObject: first,second,third>']
- )
-
- self.assertQuerysetEqual(
- TestObject.objects.filter(pk=obj.pk) |
- TestObject.objects.extra(where=["id > %s"], params=[obj.pk]),
- ['<TestObject: TestObject: first,second,third>']
- )
diff --git a/parts/django/tests/regressiontests/file_storage/__init__.py b/parts/django/tests/regressiontests/file_storage/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/regressiontests/file_storage/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/file_storage/models.py b/parts/django/tests/regressiontests/file_storage/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/file_storage/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/file_storage/test.png b/parts/django/tests/regressiontests/file_storage/test.png
deleted file mode 100644
index 4f17cd0..0000000
--- a/parts/django/tests/regressiontests/file_storage/test.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/file_storage/test1.png b/parts/django/tests/regressiontests/file_storage/test1.png
deleted file mode 100644
index bc98741..0000000
--- a/parts/django/tests/regressiontests/file_storage/test1.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/file_storage/tests.py b/parts/django/tests/regressiontests/file_storage/tests.py
deleted file mode 100644
index 8726181..0000000
--- a/parts/django/tests/regressiontests/file_storage/tests.py
+++ /dev/null
@@ -1,382 +0,0 @@
-# -*- coding: utf-8 -*-
-import os
-import shutil
-import sys
-import tempfile
-import time
-import unittest
-from cStringIO import StringIO
-from django.conf import settings
-from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured
-from django.core.files.base import ContentFile, File
-from django.core.files.images import get_image_dimensions
-from django.core.files.storage import FileSystemStorage, get_storage_class
-from django.core.files.uploadedfile import UploadedFile
-from unittest import TestCase
-
-try:
- import threading
-except ImportError:
- import dummy_threading as threading
-
-# Try to import PIL in either of the two ways it can end up installed.
-# Checking for the existence of Image is enough for CPython, but
-# for PyPy, you need to check for the underlying modules
-try:
- from PIL import Image, _imaging
-except ImportError:
- try:
- import Image, _imaging
- except ImportError:
- Image = None
-
-class GetStorageClassTests(unittest.TestCase):
- def assertRaisesErrorWithMessage(self, error, message, callable,
- *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
- def test_get_filesystem_storage(self):
- """
- get_storage_class returns the class for a storage backend name/path.
- """
- self.assertEqual(
- get_storage_class('django.core.files.storage.FileSystemStorage'),
- FileSystemStorage)
-
- def test_get_invalid_storage_module(self):
- """
- get_storage_class raises an error if the requested import don't exist.
- """
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "NonExistingStorage isn't a storage module.",
- get_storage_class,
- 'NonExistingStorage')
-
- def test_get_nonexisting_storage_class(self):
- """
- get_storage_class raises an error if the requested class don't exist.
- """
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- 'Storage module "django.core.files.storage" does not define a '\
- '"NonExistingStorage" class.',
- get_storage_class,
- 'django.core.files.storage.NonExistingStorage')
-
- def test_get_nonexisting_storage_module(self):
- """
- get_storage_class raises an error if the requested module don't exist.
- """
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- 'Error importing storage module django.core.files.non_existing_'\
- 'storage: "No module named non_existing_storage"',
- get_storage_class,
- 'django.core.files.non_existing_storage.NonExistingStorage')
-
-class FileStorageTests(unittest.TestCase):
- storage_class = FileSystemStorage
-
- def setUp(self):
- self.temp_dir = tempfile.mktemp()
- os.makedirs(self.temp_dir)
- self.storage = self.storage_class(location=self.temp_dir,
- base_url='/test_media_url/')
-
- def tearDown(self):
- shutil.rmtree(self.temp_dir)
-
- def test_file_access_options(self):
- """
- Standard file access options are available, and work as expected.
- """
- self.assertFalse(self.storage.exists('storage_test'))
- f = self.storage.open('storage_test', 'w')
- f.write('storage contents')
- f.close()
- self.assert_(self.storage.exists('storage_test'))
-
- f = self.storage.open('storage_test', 'r')
- self.assertEqual(f.read(), 'storage contents')
- f.close()
-
- self.storage.delete('storage_test')
- self.assertFalse(self.storage.exists('storage_test'))
-
- def test_file_save_without_name(self):
- """
- File storage extracts the filename from the content object if no
- name is given explicitly.
- """
- self.assertFalse(self.storage.exists('test.file'))
-
- f = ContentFile('custom contents')
- f.name = 'test.file'
-
- storage_f_name = self.storage.save(None, f)
-
- self.assertEqual(storage_f_name, f.name)
-
- self.assert_(os.path.exists(os.path.join(self.temp_dir, f.name)))
-
- self.storage.delete(storage_f_name)
-
- def test_file_path(self):
- """
- File storage returns the full path of a file
- """
- self.assertFalse(self.storage.exists('test.file'))
-
- f = ContentFile('custom contents')
- f_name = self.storage.save('test.file', f)
-
- self.assertEqual(self.storage.path(f_name),
- os.path.join(self.temp_dir, f_name))
-
- self.storage.delete(f_name)
-
- def test_file_url(self):
- """
- File storage returns a url to access a given file from the Web.
- """
- self.assertEqual(self.storage.url('test.file'),
- '%s%s' % (self.storage.base_url, 'test.file'))
-
- self.storage.base_url = None
- self.assertRaises(ValueError, self.storage.url, 'test.file')
-
- def test_file_with_mixin(self):
- """
- File storage can get a mixin to extend the functionality of the
- returned file.
- """
- self.assertFalse(self.storage.exists('test.file'))
-
- class TestFileMixin(object):
- mixed_in = True
-
- f = ContentFile('custom contents')
- f_name = self.storage.save('test.file', f)
-
- self.assert_(isinstance(
- self.storage.open('test.file', mixin=TestFileMixin),
- TestFileMixin
- ))
-
- self.storage.delete('test.file')
-
- def test_listdir(self):
- """
- File storage returns a tuple containing directories and files.
- """
- self.assertFalse(self.storage.exists('storage_test_1'))
- self.assertFalse(self.storage.exists('storage_test_2'))
- self.assertFalse(self.storage.exists('storage_dir_1'))
-
- f = self.storage.save('storage_test_1', ContentFile('custom content'))
- f = self.storage.save('storage_test_2', ContentFile('custom content'))
- os.mkdir(os.path.join(self.temp_dir, 'storage_dir_1'))
-
- dirs, files = self.storage.listdir('')
- self.assertEqual(set(dirs), set([u'storage_dir_1']))
- self.assertEqual(set(files),
- set([u'storage_test_1', u'storage_test_2']))
-
- self.storage.delete('storage_test_1')
- self.storage.delete('storage_test_2')
- os.rmdir(os.path.join(self.temp_dir, 'storage_dir_1'))
-
- def test_file_storage_prevents_directory_traversal(self):
- """
- File storage prevents directory traversal (files can only be accessed if
- they're below the storage location).
- """
- self.assertRaises(SuspiciousOperation, self.storage.exists, '..')
- self.assertRaises(SuspiciousOperation, self.storage.exists, '/etc/passwd')
-
-class CustomStorage(FileSystemStorage):
- def get_available_name(self, name):
- """
- Append numbers to duplicate files rather than underscores, like Trac.
- """
- parts = name.split('.')
- basename, ext = parts[0], parts[1:]
- number = 2
- while self.exists(name):
- name = '.'.join([basename, str(number)] + ext)
- number += 1
-
- return name
-
-class CustomStorageTests(FileStorageTests):
- storage_class = CustomStorage
-
- def test_custom_get_available_name(self):
- first = self.storage.save('custom_storage', ContentFile('custom contents'))
- self.assertEqual(first, 'custom_storage')
- second = self.storage.save('custom_storage', ContentFile('more contents'))
- self.assertEqual(second, 'custom_storage.2')
- self.storage.delete(first)
- self.storage.delete(second)
-
-class UnicodeFileNameTests(unittest.TestCase):
- def test_unicode_file_names(self):
- """
- Regression test for #8156: files with unicode names I can't quite figure
- out the encoding situation between doctest and this file, but the actual
- repr doesn't matter; it just shouldn't return a unicode object.
- """
- uf = UploadedFile(name=u'¿Cómo?',content_type='text')
- self.assertEqual(type(uf.__repr__()), str)
-
-# Tests for a race condition on file saving (#4948).
-# This is written in such a way that it'll always pass on platforms
-# without threading.
-
-class SlowFile(ContentFile):
- def chunks(self):
- time.sleep(1)
- return super(ContentFile, self).chunks()
-
-class FileSaveRaceConditionTest(TestCase):
- def setUp(self):
- self.storage_dir = tempfile.mkdtemp()
- self.storage = FileSystemStorage(self.storage_dir)
- self.thread = threading.Thread(target=self.save_file, args=['conflict'])
-
- def tearDown(self):
- shutil.rmtree(self.storage_dir)
-
- def save_file(self, name):
- name = self.storage.save(name, SlowFile("Data"))
-
- def test_race_condition(self):
- self.thread.start()
- name = self.save_file('conflict')
- self.thread.join()
- self.assert_(self.storage.exists('conflict'))
- self.assert_(self.storage.exists('conflict_1'))
- self.storage.delete('conflict')
- self.storage.delete('conflict_1')
-
-class FileStoragePermissions(TestCase):
- def setUp(self):
- self.old_perms = settings.FILE_UPLOAD_PERMISSIONS
- settings.FILE_UPLOAD_PERMISSIONS = 0666
- self.storage_dir = tempfile.mkdtemp()
- self.storage = FileSystemStorage(self.storage_dir)
-
- def tearDown(self):
- settings.FILE_UPLOAD_PERMISSIONS = self.old_perms
- shutil.rmtree(self.storage_dir)
-
- def test_file_upload_permissions(self):
- name = self.storage.save("the_file", ContentFile("data"))
- actual_mode = os.stat(self.storage.path(name))[0] & 0777
- self.assertEqual(actual_mode, 0666)
-
-
-class FileStoragePathParsing(TestCase):
- def setUp(self):
- self.storage_dir = tempfile.mkdtemp()
- self.storage = FileSystemStorage(self.storage_dir)
-
- def tearDown(self):
- shutil.rmtree(self.storage_dir)
-
- def test_directory_with_dot(self):
- """Regression test for #9610.
-
- If the directory name contains a dot and the file name doesn't, make
- sure we still mangle the file name instead of the directory name.
- """
-
- self.storage.save('dotted.path/test', ContentFile("1"))
- self.storage.save('dotted.path/test', ContentFile("2"))
-
- self.assertFalse(os.path.exists(os.path.join(self.storage_dir, 'dotted_.path')))
- self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test')))
- self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test_1')))
-
- def test_first_character_dot(self):
- """
- File names with a dot as their first character don't have an extension,
- and the underscore should get added to the end.
- """
- self.storage.save('dotted.path/.test', ContentFile("1"))
- self.storage.save('dotted.path/.test', ContentFile("2"))
-
- self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/.test')))
- # Before 2.6, a leading dot was treated as an extension, and so
- # underscore gets added to beginning instead of end.
- if sys.version_info < (2, 6):
- self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/_1.test')))
- else:
- self.assert_(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/.test_1')))
-
-if Image is not None:
- class DimensionClosingBug(TestCase):
- """
- Test that get_image_dimensions() properly closes files (#8817)
- """
- def test_not_closing_of_files(self):
- """
- Open files passed into get_image_dimensions() should stay opened.
- """
- empty_io = StringIO()
- try:
- get_image_dimensions(empty_io)
- finally:
- self.assert_(not empty_io.closed)
-
- def test_closing_of_filenames(self):
- """
- get_image_dimensions() called with a filename should closed the file.
- """
- # We need to inject a modified open() builtin into the images module
- # that checks if the file was closed properly if the function is
- # called with a filename instead of an file object.
- # get_image_dimensions will call our catching_open instead of the
- # regular builtin one.
-
- class FileWrapper(object):
- _closed = []
- def __init__(self, f):
- self.f = f
- def __getattr__(self, name):
- return getattr(self.f, name)
- def close(self):
- self._closed.append(True)
- self.f.close()
-
- def catching_open(*args):
- return FileWrapper(open(*args))
-
- from django.core.files import images
- images.open = catching_open
- try:
- get_image_dimensions(os.path.join(os.path.dirname(__file__), "test1.png"))
- finally:
- del images.open
- self.assert_(FileWrapper._closed)
-
- class InconsistentGetImageDimensionsBug(TestCase):
- """
- Test that get_image_dimensions() works properly after various calls using a file handler (#11158)
- """
- def test_multiple_calls(self):
- """
- Multiple calls of get_image_dimensions() should return the same size.
- """
- from django.core.files.images import ImageFile
- img_path = os.path.join(os.path.dirname(__file__), "test.png")
- image = ImageFile(open(img_path, 'rb'))
- image_pil = Image.open(img_path)
- size_1, size_2 = get_image_dimensions(image), get_image_dimensions(image)
- self.assertEqual(image_pil.size, size_1)
- self.assertEqual(size_1, size_2)
diff --git a/parts/django/tests/regressiontests/file_uploads/__init__.py b/parts/django/tests/regressiontests/file_uploads/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/file_uploads/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/file_uploads/models.py b/parts/django/tests/regressiontests/file_uploads/models.py
deleted file mode 100644
index 9d02050..0000000
--- a/parts/django/tests/regressiontests/file_uploads/models.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import tempfile
-import os
-from django.db import models
-from django.core.files.storage import FileSystemStorage
-
-temp_storage = FileSystemStorage(tempfile.mkdtemp())
-UPLOAD_TO = os.path.join(temp_storage.location, 'test_upload')
-
-class FileModel(models.Model):
- testfile = models.FileField(storage=temp_storage, upload_to='test_upload')
diff --git a/parts/django/tests/regressiontests/file_uploads/tests.py b/parts/django/tests/regressiontests/file_uploads/tests.py
deleted file mode 100644
index 99d0b6b..0000000
--- a/parts/django/tests/regressiontests/file_uploads/tests.py
+++ /dev/null
@@ -1,305 +0,0 @@
-#! -*- coding: utf-8 -*-
-import errno
-import os
-import shutil
-import unittest
-from StringIO import StringIO
-
-from django.core.files import temp as tempfile
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.test import TestCase, client
-from django.utils import simplejson
-from django.utils.hashcompat import sha_constructor
-from django.http.multipartparser import MultiPartParser
-
-from models import FileModel, temp_storage, UPLOAD_TO
-import uploadhandler
-
-
-UNICODE_FILENAME = u'test-0123456789_中文_Orléans.jpg'
-
-class FileUploadTests(TestCase):
- def test_simple_upload(self):
- post_data = {
- 'name': 'Ringo',
- 'file_field': open(__file__),
- }
- response = self.client.post('/file_uploads/upload/', post_data)
- self.assertEqual(response.status_code, 200)
-
- def test_large_upload(self):
- tdir = tempfile.gettempdir()
-
- file1 = tempfile.NamedTemporaryFile(suffix=".file1", dir=tdir)
- file1.write('a' * (2 ** 21))
- file1.seek(0)
-
- file2 = tempfile.NamedTemporaryFile(suffix=".file2", dir=tdir)
- file2.write('a' * (10 * 2 ** 20))
- file2.seek(0)
-
- post_data = {
- 'name': 'Ringo',
- 'file_field1': file1,
- 'file_field2': file2,
- }
-
- for key in post_data.keys():
- try:
- post_data[key + '_hash'] = sha_constructor(post_data[key].read()).hexdigest()
- post_data[key].seek(0)
- except AttributeError:
- post_data[key + '_hash'] = sha_constructor(post_data[key]).hexdigest()
-
- response = self.client.post('/file_uploads/verify/', post_data)
-
- self.assertEqual(response.status_code, 200)
-
- def test_unicode_file_name(self):
- tdir = tempfile.gettempdir()
-
- # This file contains chinese symbols and an accented char in the name.
- file1 = open(os.path.join(tdir, UNICODE_FILENAME.encode('utf-8')), 'w+b')
- file1.write('b' * (2 ** 10))
- file1.seek(0)
-
- post_data = {
- 'file_unicode': file1,
- }
-
- response = self.client.post('/file_uploads/unicode_name/', post_data)
-
- file1.close()
- try:
- os.unlink(file1.name)
- except:
- pass
-
- self.assertEqual(response.status_code, 200)
-
- def test_dangerous_file_names(self):
- """Uploaded file names should be sanitized before ever reaching the view."""
- # This test simulates possible directory traversal attacks by a
- # malicious uploader We have to do some monkeybusiness here to construct
- # a malicious payload with an invalid file name (containing os.sep or
- # os.pardir). This similar to what an attacker would need to do when
- # trying such an attack.
- scary_file_names = [
- "/tmp/hax0rd.txt", # Absolute path, *nix-style.
- "C:\\Windows\\hax0rd.txt", # Absolute path, win-syle.
- "C:/Windows/hax0rd.txt", # Absolute path, broken-style.
- "\\tmp\\hax0rd.txt", # Absolute path, broken in a different way.
- "/tmp\\hax0rd.txt", # Absolute path, broken by mixing.
- "subdir/hax0rd.txt", # Descendant path, *nix-style.
- "subdir\\hax0rd.txt", # Descendant path, win-style.
- "sub/dir\\hax0rd.txt", # Descendant path, mixed.
- "../../hax0rd.txt", # Relative path, *nix-style.
- "..\\..\\hax0rd.txt", # Relative path, win-style.
- "../..\\hax0rd.txt" # Relative path, mixed.
- ]
-
- payload = []
- for i, name in enumerate(scary_file_names):
- payload.extend([
- '--' + client.BOUNDARY,
- 'Content-Disposition: form-data; name="file%s"; filename="%s"' % (i, name),
- 'Content-Type: application/octet-stream',
- '',
- 'You got pwnd.'
- ])
- payload.extend([
- '--' + client.BOUNDARY + '--',
- '',
- ])
-
- payload = "\r\n".join(payload)
- r = {
- 'CONTENT_LENGTH': len(payload),
- 'CONTENT_TYPE': client.MULTIPART_CONTENT,
- 'PATH_INFO': "/file_uploads/echo/",
- 'REQUEST_METHOD': 'POST',
- 'wsgi.input': client.FakePayload(payload),
- }
- response = self.client.request(**r)
-
- # The filenames should have been sanitized by the time it got to the view.
- recieved = simplejson.loads(response.content)
- for i, name in enumerate(scary_file_names):
- got = recieved["file%s" % i]
- self.assertEqual(got, "hax0rd.txt")
-
- def test_filename_overflow(self):
- """File names over 256 characters (dangerous on some platforms) get fixed up."""
- name = "%s.txt" % ("f"*500)
- payload = "\r\n".join([
- '--' + client.BOUNDARY,
- 'Content-Disposition: form-data; name="file"; filename="%s"' % name,
- 'Content-Type: application/octet-stream',
- '',
- 'Oops.'
- '--' + client.BOUNDARY + '--',
- '',
- ])
- r = {
- 'CONTENT_LENGTH': len(payload),
- 'CONTENT_TYPE': client.MULTIPART_CONTENT,
- 'PATH_INFO': "/file_uploads/echo/",
- 'REQUEST_METHOD': 'POST',
- 'wsgi.input': client.FakePayload(payload),
- }
- got = simplejson.loads(self.client.request(**r).content)
- self.assert_(len(got['file']) < 256, "Got a long file name (%s characters)." % len(got['file']))
-
- def test_custom_upload_handler(self):
- # A small file (under the 5M quota)
- smallfile = tempfile.NamedTemporaryFile()
- smallfile.write('a' * (2 ** 21))
- smallfile.seek(0)
-
- # A big file (over the quota)
- bigfile = tempfile.NamedTemporaryFile()
- bigfile.write('a' * (10 * 2 ** 20))
- bigfile.seek(0)
-
- # Small file posting should work.
- response = self.client.post('/file_uploads/quota/', {'f': smallfile})
- got = simplejson.loads(response.content)
- self.assert_('f' in got)
-
- # Large files don't go through.
- response = self.client.post("/file_uploads/quota/", {'f': bigfile})
- got = simplejson.loads(response.content)
- self.assert_('f' not in got)
-
- def test_broken_custom_upload_handler(self):
- f = tempfile.NamedTemporaryFile()
- f.write('a' * (2 ** 21))
- f.seek(0)
-
- # AttributeError: You cannot alter upload handlers after the upload has been processed.
- self.assertRaises(
- AttributeError,
- self.client.post,
- '/file_uploads/quota/broken/',
- {'f': f}
- )
-
- def test_fileupload_getlist(self):
- file1 = tempfile.NamedTemporaryFile()
- file1.write('a' * (2 ** 23))
- file1.seek(0)
-
- file2 = tempfile.NamedTemporaryFile()
- file2.write('a' * (2 * 2 ** 18))
- file2.seek(0)
-
- file2a = tempfile.NamedTemporaryFile()
- file2a.write('a' * (5 * 2 ** 20))
- file2a.seek(0)
-
- response = self.client.post('/file_uploads/getlist_count/', {
- 'file1': file1,
- 'field1': u'test',
- 'field2': u'test3',
- 'field3': u'test5',
- 'field4': u'test6',
- 'field5': u'test7',
- 'file2': (file2, file2a)
- })
- got = simplejson.loads(response.content)
-
- self.assertEqual(got.get('file1'), 1)
- self.assertEqual(got.get('file2'), 2)
-
- def test_file_error_blocking(self):
- """
- The server should not block when there are upload errors (bug #8622).
- This can happen if something -- i.e. an exception handler -- tries to
- access POST while handling an error in parsing POST. This shouldn't
- cause an infinite loop!
- """
- class POSTAccessingHandler(client.ClientHandler):
- """A handler that'll access POST during an exception."""
- def handle_uncaught_exception(self, request, resolver, exc_info):
- ret = super(POSTAccessingHandler, self).handle_uncaught_exception(request, resolver, exc_info)
- p = request.POST
- return ret
-
- post_data = {
- 'name': 'Ringo',
- 'file_field': open(__file__),
- }
- # Maybe this is a little more complicated that it needs to be; but if
- # the django.test.client.FakePayload.read() implementation changes then
- # this test would fail. So we need to know exactly what kind of error
- # it raises when there is an attempt to read more than the available bytes:
- try:
- client.FakePayload('a').read(2)
- except Exception, reference_error:
- pass
-
- # install the custom handler that tries to access request.POST
- self.client.handler = POSTAccessingHandler()
-
- try:
- response = self.client.post('/file_uploads/upload_errors/', post_data)
- except reference_error.__class__, err:
- self.failIf(
- str(err) == str(reference_error),
- "Caught a repeated exception that'll cause an infinite loop in file uploads."
- )
- except Exception, err:
- # CustomUploadError is the error that should have been raised
- self.assertEqual(err.__class__, uploadhandler.CustomUploadError)
-
-class DirectoryCreationTests(unittest.TestCase):
- """
- Tests for error handling during directory creation
- via _save_FIELD_file (ticket #6450)
- """
- def setUp(self):
- self.obj = FileModel()
- if not os.path.isdir(temp_storage.location):
- os.makedirs(temp_storage.location)
- if os.path.isdir(UPLOAD_TO):
- os.chmod(UPLOAD_TO, 0700)
- shutil.rmtree(UPLOAD_TO)
-
- def tearDown(self):
- os.chmod(temp_storage.location, 0700)
- shutil.rmtree(temp_storage.location)
-
- def test_readonly_root(self):
- """Permission errors are not swallowed"""
- os.chmod(temp_storage.location, 0500)
- try:
- self.obj.testfile.save('foo.txt', SimpleUploadedFile('foo.txt', 'x'))
- except OSError, err:
- self.assertEquals(err.errno, errno.EACCES)
- except Exception, err:
- self.fail("OSError [Errno %s] not raised." % errno.EACCES)
-
- def test_not_a_directory(self):
- """The correct IOError is raised when the upload directory name exists but isn't a directory"""
- # Create a file with the upload directory name
- fd = open(UPLOAD_TO, 'w')
- fd.close()
- try:
- self.obj.testfile.save('foo.txt', SimpleUploadedFile('foo.txt', 'x'))
- except IOError, err:
- # The test needs to be done on a specific string as IOError
- # is raised even without the patch (just not early enough)
- self.assertEquals(err.args[0],
- "%s exists and is not a directory." % UPLOAD_TO)
- except:
- self.fail("IOError not raised")
-
-class MultiParserTests(unittest.TestCase):
-
- def test_empty_upload_handlers(self):
- # We're not actually parsing here; just checking if the parser properly
- # instantiates with empty upload handlers.
- parser = MultiPartParser({
- 'CONTENT_TYPE': 'multipart/form-data; boundary=_foo',
- 'CONTENT_LENGTH': '1'
- }, StringIO('x'), [], 'utf-8')
diff --git a/parts/django/tests/regressiontests/file_uploads/uploadhandler.py b/parts/django/tests/regressiontests/file_uploads/uploadhandler.py
deleted file mode 100644
index 9f3960a..0000000
--- a/parts/django/tests/regressiontests/file_uploads/uploadhandler.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""
-Upload handlers to test the upload API.
-"""
-
-from django.core.files.uploadhandler import FileUploadHandler, StopUpload
-
-class QuotaUploadHandler(FileUploadHandler):
- """
- This test upload handler terminates the connection if more than a quota
- (5MB) is uploaded.
- """
-
- QUOTA = 5 * 2**20 # 5 MB
-
- def __init__(self, request=None):
- super(QuotaUploadHandler, self).__init__(request)
- self.total_upload = 0
-
- def receive_data_chunk(self, raw_data, start):
- self.total_upload += len(raw_data)
- if self.total_upload >= self.QUOTA:
- raise StopUpload(connection_reset=True)
- return raw_data
-
- def file_complete(self, file_size):
- return None
-
-class CustomUploadError(Exception):
- pass
-
-class ErroringUploadHandler(FileUploadHandler):
- """A handler that raises an exception."""
- def receive_data_chunk(self, raw_data, start):
- raise CustomUploadError("Oops!")
diff --git a/parts/django/tests/regressiontests/file_uploads/urls.py b/parts/django/tests/regressiontests/file_uploads/urls.py
deleted file mode 100644
index 413080e..0000000
--- a/parts/django/tests/regressiontests/file_uploads/urls.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.conf.urls.defaults import *
-import views
-
-urlpatterns = patterns('',
- (r'^upload/$', views.file_upload_view),
- (r'^verify/$', views.file_upload_view_verify),
- (r'^unicode_name/$', views.file_upload_unicode_name),
- (r'^echo/$', views.file_upload_echo),
- (r'^quota/$', views.file_upload_quota),
- (r'^quota/broken/$', views.file_upload_quota_broken),
- (r'^getlist_count/$', views.file_upload_getlist_count),
- (r'^upload_errors/$', views.file_upload_errors),
-)
diff --git a/parts/django/tests/regressiontests/file_uploads/views.py b/parts/django/tests/regressiontests/file_uploads/views.py
deleted file mode 100644
index 50bc3f8..0000000
--- a/parts/django/tests/regressiontests/file_uploads/views.py
+++ /dev/null
@@ -1,114 +0,0 @@
-import os
-from django.core.files.uploadedfile import UploadedFile
-from django.http import HttpResponse, HttpResponseServerError
-from django.utils import simplejson
-from models import FileModel, UPLOAD_TO
-from uploadhandler import QuotaUploadHandler, ErroringUploadHandler
-from django.utils.hashcompat import sha_constructor
-from tests import UNICODE_FILENAME
-
-def file_upload_view(request):
- """
- Check that a file upload can be updated into the POST dictionary without
- going pear-shaped.
- """
- form_data = request.POST.copy()
- form_data.update(request.FILES)
- if isinstance(form_data.get('file_field'), UploadedFile) and isinstance(form_data['name'], unicode):
- # If a file is posted, the dummy client should only post the file name,
- # not the full path.
- if os.path.dirname(form_data['file_field'].name) != '':
- return HttpResponseServerError()
- return HttpResponse('')
- else:
- return HttpResponseServerError()
-
-def file_upload_view_verify(request):
- """
- Use the sha digest hash to verify the uploaded contents.
- """
- form_data = request.POST.copy()
- form_data.update(request.FILES)
-
- for key, value in form_data.items():
- if key.endswith('_hash'):
- continue
- if key + '_hash' not in form_data:
- continue
- submitted_hash = form_data[key + '_hash']
- if isinstance(value, UploadedFile):
- new_hash = sha_constructor(value.read()).hexdigest()
- else:
- new_hash = sha_constructor(value).hexdigest()
- if new_hash != submitted_hash:
- return HttpResponseServerError()
-
- # Adding large file to the database should succeed
- largefile = request.FILES['file_field2']
- obj = FileModel()
- obj.testfile.save(largefile.name, largefile)
-
- return HttpResponse('')
-
-def file_upload_unicode_name(request):
-
- # Check to see if unicode name came through properly.
- if not request.FILES['file_unicode'].name.endswith(UNICODE_FILENAME):
- return HttpResponseServerError()
-
- response = None
-
- # Check to make sure the exotic characters are preserved even
- # through file save.
- uni_named_file = request.FILES['file_unicode']
- obj = FileModel.objects.create(testfile=uni_named_file)
- full_name = u'%s/%s' % (UPLOAD_TO, uni_named_file.name)
- if not os.path.exists(full_name):
- response = HttpResponseServerError()
-
- # Cleanup the object with its exotic file name immediately.
- # (shutil.rmtree used elsewhere in the tests to clean up the
- # upload directory has been seen to choke on unicode
- # filenames on Windows.)
- obj.delete()
-
- if response:
- return response
- else:
- return HttpResponse('')
-
-def file_upload_echo(request):
- """
- Simple view to echo back info about uploaded files for tests.
- """
- r = dict([(k, f.name) for k, f in request.FILES.items()])
- return HttpResponse(simplejson.dumps(r))
-
-def file_upload_quota(request):
- """
- Dynamically add in an upload handler.
- """
- request.upload_handlers.insert(0, QuotaUploadHandler())
- return file_upload_echo(request)
-
-def file_upload_quota_broken(request):
- """
- You can't change handlers after reading FILES; this view shouldn't work.
- """
- response = file_upload_echo(request)
- request.upload_handlers.insert(0, QuotaUploadHandler())
- return response
-
-def file_upload_getlist_count(request):
- """
- Check the .getlist() function to ensure we receive the correct number of files.
- """
- file_counts = {}
-
- for key in request.FILES.keys():
- file_counts[key] = len(request.FILES.getlist(key))
- return HttpResponse(simplejson.dumps(file_counts))
-
-def file_upload_errors(request):
- request.upload_handlers.insert(0, ErroringUploadHandler())
- return file_upload_echo(request)
diff --git a/parts/django/tests/regressiontests/fixtures_regress/__init__.py b/parts/django/tests/regressiontests/fixtures_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/absolute.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/absolute.json
deleted file mode 100644
index 37ed3f6..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/absolute.json
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- {
- "pk": "1",
- "model": "fixtures_regress.absolute",
- "fields": {
- "name": "Load Absolute Path Test"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/animal.xml b/parts/django/tests/regressiontests/fixtures_regress/fixtures/animal.xml
deleted file mode 100644
index 0383c60..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/animal.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="10" model="fixtures_regress.animal">
- <field type="CharField" name="name">Emu</field>
- <field type="CharField" name="latin_name">Dromaius novaehollandiae</field>
- <field type="IntegerField" name="count">42</field>
- <field type="FloatField" name="weight">1.2</field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture1.unkn b/parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture1.unkn
deleted file mode 100644
index a8b0a0c..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture1.unkn
+++ /dev/null
@@ -1 +0,0 @@
-This data shouldn't load, as it's of an unknown file format. \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture2.xml b/parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture2.xml
deleted file mode 100644
index 87b809f..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/bad_fixture2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objcts version="1.0">
- <objct pk="2" model="fixtures.article">
- <field type="CharField" name="headline">Poker on TV is great!</field>
- <field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field>
- </objct>
-</django-objcts> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/big-fixture.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/big-fixture.json
deleted file mode 100644
index e655fbb..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/big-fixture.json
+++ /dev/null
@@ -1,83 +0,0 @@
-[
- {
- "pk": 6,
- "model": "fixtures_regress.channel",
- "fields": {
- "name": "Business"
- }
- },
-
- {
- "pk": 1,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 1",
- "channels": [6]
- }
- },
- {
- "pk": 2,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 2",
- "channels": [6]
- }
- },
- {
- "pk": 3,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 3",
- "channels": [6]
- }
- },
- {
- "pk": 4,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 4",
- "channels": [6]
- }
- },
-
- {
- "pk": 5,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 5",
- "channels": [6]
- }
- },
- {
- "pk": 6,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 6",
- "channels": [6]
- }
- },
- {
- "pk": 7,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 7",
- "channels": [6]
- }
- },
- {
- "pk": 8,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Article Title 8",
- "channels": [6]
- }
- },
- {
- "pk": 9,
- "model": "fixtures_regress.article",
- "fields": {
- "title": "Yet Another Article",
- "channels": [6]
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/empty.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/empty.json
deleted file mode 100644
index 0637a08..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/empty.json
+++ /dev/null
@@ -1 +0,0 @@
-[] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/forward_ref_lookup.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/forward_ref_lookup.json
deleted file mode 100644
index fe50c65..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/forward_ref_lookup.json
+++ /dev/null
@@ -1,32 +0,0 @@
-[
- {
- "pk": "4",
- "model": "fixtures_regress.person",
- "fields": {
- "name": "Neal Stephenson"
- }
- },
- {
- "pk": "2",
- "model": "fixtures_regress.store",
- "fields": {
- "name": "Amazon"
- }
- },
- {
- "pk": "3",
- "model": "fixtures_regress.store",
- "fields": {
- "name": "Borders"
- }
- },
- {
- "pk": 1,
- "model": "fixtures_regress.book",
- "fields": {
- "name": "Cryptonomicon",
- "author": ["Neal Stephenson"],
- "stores": [["Amazon"], ["Borders"]]
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/model-inheritance.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/model-inheritance.json
deleted file mode 100644
index 00c482b..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/model-inheritance.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- {"pk": 1, "model": "fixtures_regress.parent", "fields": {"name": "fred"}},
- {"pk": 1, "model": "fixtures_regress.child", "fields": {"data": "apple"}}
-]
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance.json
deleted file mode 100644
index 08e5d4f..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "pk": 1,
- "model": "fixtures_regress.nkchild",
- "fields": {
- "data": "apple"
- }
- },
- {
- "pk": 1,
- "model": "fixtures_regress.reftonkchild",
- "fields": {
- "text": "my text",
- "nk_fk" : ["apple"],
- "nk_m2m": [["apple"]]
- }
- }
-]
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance2.xml b/parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance2.xml
deleted file mode 100644
index 7eb17a6..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/nk-inheritance2.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="2" model="fixtures_regress.parent">
- <field type="CharField" name="name">james</field>
- </object>
- <object pk="2" model="fixtures_regress.nkchild">
- <field type="CharField" name="data">banana</field>
- </object>
- <object pk="2" model="fixtures_regress.reftonkchild">
- <field type="CharField" name="text">other text</field>
- <field to="fixtures_regress.nkchild" name="nk_fk" rel="ManyToOneRel">
- <natural>apple</natural>
- </field>
- <field to="fixtures_regress.nkchild" name="nk_m2m" rel="ManyToManyRel">
- <object>
- <natural>banana</natural>
- </object>
- <object>
- <natural>apple</natural>
- </object>
- </field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_1.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_1.json
deleted file mode 100644
index 4bce792..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_1.json
+++ /dev/null
@@ -1,25 +0,0 @@
-[
- {
- "pk": 12,
- "model": "fixtures_regress.person",
- "fields": {
- "name": "Greg Egan"
- }
- },
- {
- "pk": 11,
- "model": "fixtures_regress.store",
- "fields": {
- "name": "Angus and Robertson"
- }
- },
- {
- "pk": 10,
- "model": "fixtures_regress.book",
- "fields": {
- "name": "Permutation City",
- "author": 12,
- "stores": [11]
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_2.xml b/parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_2.xml
deleted file mode 100644
index 280ad37..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/non_natural_2.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="22" model="fixtures_regress.person">
- <field type="CharField" name="name">Orson Scott Card</field>
- </object>
- <object pk="21" model="fixtures_regress.store">
- <field type="CharField" name="name">Collins Bookstore</field>
- </object>
- <object pk="20" model="fixtures_regress.book">
- <field type="CharField" name="name">Ender's Game</field>
- <field to="fixtures_regress.person" name="author" rel="ManyToOneRel">22</field>
- <field to="fixtures_regress.store" name="stores" rel="ManyToManyRel">
- <object pk="21"/>
- </field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/pretty.xml b/parts/django/tests/regressiontests/fixtures_regress/fixtures/pretty.xml
deleted file mode 100644
index 68e5710..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/pretty.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="fixtures_regress.stuff">
- <field type="CharField" name="name">
- <None/>
- </field>
- <field to="auth.user" name="owner" rel="ManyToOneRel">
- <None/>
- </field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/sequence.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/sequence.json
deleted file mode 100644
index 60bfcdd..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/sequence.json
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- {
- "pk": "1",
- "model": "fixtures_regress.animal",
- "fields": {
- "name": "Lion",
- "latin_name": "Panthera leo",
- "count": 3,
- "weight": 1.2
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/fixtures_regress/fixtures/thingy.json b/parts/django/tests/regressiontests/fixtures_regress/fixtures/thingy.json
deleted file mode 100644
index 1693177..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/fixtures/thingy.json
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- {
- "pk": "1",
- "model": "fixtures_regress.thingy",
- "fields": {
- "name": "Whatchamacallit"
- }
- }
-]
diff --git a/parts/django/tests/regressiontests/fixtures_regress/models.py b/parts/django/tests/regressiontests/fixtures_regress/models.py
deleted file mode 100644
index 7465fd2..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/models.py
+++ /dev/null
@@ -1,225 +0,0 @@
-from django.db import models, DEFAULT_DB_ALIAS
-from django.contrib.auth.models import User
-from django.conf import settings
-
-
-class Animal(models.Model):
- name = models.CharField(max_length=150)
- latin_name = models.CharField(max_length=150)
- count = models.IntegerField()
- weight = models.FloatField()
-
- # use a non-default name for the default manager
- specimens = models.Manager()
-
- def __unicode__(self):
- return self.name
-
-
-class Plant(models.Model):
- name = models.CharField(max_length=150)
-
- class Meta:
- # For testing when upper case letter in app name; regression for #4057
- db_table = "Fixtures_regress_plant"
-
-class Stuff(models.Model):
- name = models.CharField(max_length=20, null=True)
- owner = models.ForeignKey(User, null=True)
-
- def __unicode__(self):
- return unicode(self.name) + u' is owned by ' + unicode(self.owner)
-
-
-class Absolute(models.Model):
- name = models.CharField(max_length=40)
-
- load_count = 0
-
- def __init__(self, *args, **kwargs):
- super(Absolute, self).__init__(*args, **kwargs)
- Absolute.load_count += 1
-
-
-class Parent(models.Model):
- name = models.CharField(max_length=10)
-
- class Meta:
- ordering = ('id',)
-
-
-class Child(Parent):
- data = models.CharField(max_length=10)
-
-
-# Models to regression test #7572
-class Channel(models.Model):
- name = models.CharField(max_length=255)
-
-
-class Article(models.Model):
- title = models.CharField(max_length=255)
- channels = models.ManyToManyField(Channel)
-
- class Meta:
- ordering = ('id',)
-
-
-# Models to regression test #11428
-class Widget(models.Model):
- name = models.CharField(max_length=255)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-
-class WidgetProxy(Widget):
- class Meta:
- proxy = True
-
-
-# Check for forward references in FKs and M2Ms with natural keys
-class TestManager(models.Manager):
- def get_by_natural_key(self, key):
- return self.get(name=key)
-
-
-class Store(models.Model):
- objects = TestManager()
- name = models.CharField(max_length=255)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
- def natural_key(self):
- return (self.name,)
-
-
-class Person(models.Model):
- objects = TestManager()
- name = models.CharField(max_length=255)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
- # Person doesn't actually have a dependency on store, but we need to define
- # one to test the behaviour of the dependency resolution algorithm.
- def natural_key(self):
- return (self.name,)
- natural_key.dependencies = ['fixtures_regress.store']
-
-
-class Book(models.Model):
- name = models.CharField(max_length=255)
- author = models.ForeignKey(Person)
- stores = models.ManyToManyField(Store)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return u'%s by %s (available at %s)' % (
- self.name,
- self.author.name,
- ', '.join(s.name for s in self.stores.all())
- )
-
-
-class NKManager(models.Manager):
- def get_by_natural_key(self, data):
- return self.get(data=data)
-
-
-class NKChild(Parent):
- data = models.CharField(max_length=10, unique=True)
- objects = NKManager()
-
- def natural_key(self):
- return self.data
-
- def __unicode__(self):
- return u'NKChild %s:%s' % (self.name, self.data)
-
-
-class RefToNKChild(models.Model):
- text = models.CharField(max_length=10)
- nk_fk = models.ForeignKey(NKChild, related_name='ref_fks')
- nk_m2m = models.ManyToManyField(NKChild, related_name='ref_m2ms')
-
- def __unicode__(self):
- return u'%s: Reference to %s [%s]' % (
- self.text,
- self.nk_fk,
- ', '.join(str(o) for o in self.nk_m2m.all())
- )
-
-
-# ome models with pathological circular dependencies
-class Circle1(models.Model):
- name = models.CharField(max_length=255)
-
- def natural_key(self):
- return self.name
- natural_key.dependencies = ['fixtures_regress.circle2']
-
-
-class Circle2(models.Model):
- name = models.CharField(max_length=255)
-
- def natural_key(self):
- return self.name
- natural_key.dependencies = ['fixtures_regress.circle1']
-
-
-class Circle3(models.Model):
- name = models.CharField(max_length=255)
-
- def natural_key(self):
- return self.name
- natural_key.dependencies = ['fixtures_regress.circle3']
-
-
-class Circle4(models.Model):
- name = models.CharField(max_length=255)
-
- def natural_key(self):
- return self.name
- natural_key.dependencies = ['fixtures_regress.circle5']
-
-
-class Circle5(models.Model):
- name = models.CharField(max_length=255)
-
- def natural_key(self):
- return self.name
- natural_key.dependencies = ['fixtures_regress.circle6']
-
-
-class Circle6(models.Model):
- name = models.CharField(max_length=255)
-
- def natural_key(self):
- return self.name
- natural_key.dependencies = ['fixtures_regress.circle4']
-
-
-class ExternalDependency(models.Model):
- name = models.CharField(max_length=255)
-
- def natural_key(self):
- return self.name
- natural_key.dependencies = ['fixtures_regress.book']
-
-
-# Model for regression test of #11101
-class Thingy(models.Model):
- name = models.CharField(max_length=255)
diff --git a/parts/django/tests/regressiontests/fixtures_regress/tests.py b/parts/django/tests/regressiontests/fixtures_regress/tests.py
deleted file mode 100644
index 57ee7c0..0000000
--- a/parts/django/tests/regressiontests/fixtures_regress/tests.py
+++ /dev/null
@@ -1,611 +0,0 @@
-# -*- coding: utf-8 -*-
-# Unittests for fixtures.
-import os
-import sys
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.conf import settings
-from django.core import management
-from django.core.management.commands.dumpdata import sort_dependencies
-from django.core.management.base import CommandError
-from django.db.models import signals
-from django.db import DEFAULT_DB_ALIAS, transaction
-from django.test import TestCase, TransactionTestCase
-
-from models import Animal, Stuff
-from models import Absolute, Parent, Child
-from models import Article, Widget
-from models import Store, Person, Book
-from models import NKChild, RefToNKChild
-from models import Circle1, Circle2, Circle3
-from models import ExternalDependency
-from models import Thingy
-
-
-pre_save_checks = []
-def animal_pre_save_check(signal, sender, instance, **kwargs):
- "A signal that is used to check the type of data loaded from fixtures"
- pre_save_checks.append(
- (
- 'Count = %s (%s)' % (instance.count, type(instance.count)),
- 'Weight = %s (%s)' % (instance.weight, type(instance.weight)),
- )
- )
-
-
-class TestFixtures(TestCase):
- def test_duplicate_pk(self):
- """
- This is a regression test for ticket #3790.
- """
- # Load a fixture that uses PK=1
- management.call_command(
- 'loaddata',
- 'sequence',
- verbosity=0,
- commit=False
- )
-
- # Create a new animal. Without a sequence reset, this new object
- # will take a PK of 1 (on Postgres), and the save will fail.
-
- animal = Animal(
- name='Platypus',
- latin_name='Ornithorhynchus anatinus',
- count=2,
- weight=2.2
- )
- animal.save()
- self.assertTrue(animal.id > 1)
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.oracle':
- def test_pretty_print_xml(self):
- """
- Regression test for ticket #4558 -- pretty printing of XML fixtures
- doesn't affect parsing of None values.
- """
- # Load a pretty-printed XML fixture with Nulls.
- management.call_command(
- 'loaddata',
- 'pretty.xml',
- verbosity=0,
- commit=False
- )
- self.assertEqual(Stuff.objects.all()[0].name, None)
- self.assertEqual(Stuff.objects.all()[0].owner, None)
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
- def test_pretty_print_xml_empty_strings(self):
- """
- Regression test for ticket #4558 -- pretty printing of XML fixtures
- doesn't affect parsing of None values.
- """
- # Load a pretty-printed XML fixture with Nulls.
- management.call_command(
- 'loaddata',
- 'pretty.xml',
- verbosity=0,
- commit=False
- )
- self.assertEqual(Stuff.objects.all()[0].name, u'')
- self.assertEqual(Stuff.objects.all()[0].owner, None)
-
- def test_absolute_path(self):
- """
- Regression test for ticket #6436 --
- os.path.join will throw away the initial parts of a path if it
- encounters an absolute path.
- This means that if a fixture is specified as an absolute path,
- we need to make sure we don't discover the absolute path in every
- fixture directory.
- """
- load_absolute_path = os.path.join(
- os.path.dirname(__file__),
- 'fixtures',
- 'absolute.json'
- )
- management.call_command(
- 'loaddata',
- load_absolute_path,
- verbosity=0,
- commit=False
- )
- self.assertEqual(Absolute.load_count, 1)
-
-
- def test_unknown_format(self):
- """
- Test for ticket #4371 -- Loading data of an unknown format should fail
- Validate that error conditions are caught correctly
- """
- stderr = StringIO()
- management.call_command(
- 'loaddata',
- 'bad_fixture1.unkn',
- verbosity=0,
- commit=False,
- stderr=stderr,
- )
- self.assertEqual(
- stderr.getvalue(),
- "Problem installing fixture 'bad_fixture1': unkn is not a known serialization format.\n"
- )
-
- def test_invalid_data(self):
- """
- Test for ticket #4371 -- Loading a fixture file with invalid data
- using explicit filename.
- Validate that error conditions are caught correctly
- """
- stderr = StringIO()
- management.call_command(
- 'loaddata',
- 'bad_fixture2.xml',
- verbosity=0,
- commit=False,
- stderr=stderr,
- )
- self.assertEqual(
- stderr.getvalue(),
- "No fixture data found for 'bad_fixture2'. (File format may be invalid.)\n"
- )
-
- def test_invalid_data_no_ext(self):
- """
- Test for ticket #4371 -- Loading a fixture file with invalid data
- without file extension.
- Validate that error conditions are caught correctly
- """
- stderr = StringIO()
- management.call_command(
- 'loaddata',
- 'bad_fixture2',
- verbosity=0,
- commit=False,
- stderr=stderr,
- )
- self.assertEqual(
- stderr.getvalue(),
- "No fixture data found for 'bad_fixture2'. (File format may be invalid.)\n"
- )
-
- def test_empty(self):
- """
- Test for ticket #4371 -- Loading a fixture file with no data returns an error.
- Validate that error conditions are caught correctly
- """
- stderr = StringIO()
- management.call_command(
- 'loaddata',
- 'empty',
- verbosity=0,
- commit=False,
- stderr=stderr,
- )
- self.assertEqual(
- stderr.getvalue(),
- "No fixture data found for 'empty'. (File format may be invalid.)\n"
- )
-
- def test_abort_loaddata_on_error(self):
- """
- Test for ticket #4371 -- If any of the fixtures contain an error,
- loading is aborted.
- Validate that error conditions are caught correctly
- """
- stderr = StringIO()
- management.call_command(
- 'loaddata',
- 'empty',
- verbosity=0,
- commit=False,
- stderr=stderr,
- )
- self.assertEqual(
- stderr.getvalue(),
- "No fixture data found for 'empty'. (File format may be invalid.)\n"
- )
-
- def test_error_message(self):
- """
- (Regression for #9011 - error message is correct)
- """
- stderr = StringIO()
- management.call_command(
- 'loaddata',
- 'bad_fixture2',
- 'animal',
- verbosity=0,
- commit=False,
- stderr=stderr,
- )
- self.assertEqual(
- stderr.getvalue(),
- "No fixture data found for 'bad_fixture2'. (File format may be invalid.)\n"
- )
-
- def test_pg_sequence_resetting_checks(self):
- """
- Test for ticket #7565 -- PostgreSQL sequence resetting checks shouldn't
- ascend to parent models when inheritance is used
- (since they are treated individually).
- """
- management.call_command(
- 'loaddata',
- 'model-inheritance.json',
- verbosity=0,
- commit=False
- )
- self.assertEqual(Parent.objects.all()[0].id, 1)
- self.assertEqual(Child.objects.all()[0].id, 1)
-
- def test_close_connection_after_loaddata(self):
- """
- Test for ticket #7572 -- MySQL has a problem if the same connection is
- used to create tables, load data, and then query over that data.
- To compensate, we close the connection after running loaddata.
- This ensures that a new connection is opened when test queries are
- issued.
- """
- management.call_command(
- 'loaddata',
- 'big-fixture.json',
- verbosity=0,
- commit=False
- )
- articles = Article.objects.exclude(id=9)
- self.assertEqual(
- list(articles.values_list('id', flat=True)),
- [1, 2, 3, 4, 5, 6, 7, 8]
- )
- # Just for good measure, run the same query again.
- # Under the influence of ticket #7572, this will
- # give a different result to the previous call.
- self.assertEqual(
- list(articles.values_list('id', flat=True)),
- [1, 2, 3, 4, 5, 6, 7, 8]
- )
-
- def test_field_value_coerce(self):
- """
- Test for tickets #8298, #9942 - Field values should be coerced into the
- correct type by the deserializer, not as part of the database write.
- """
- global pre_save_checks
- pre_save_checks = []
- signals.pre_save.connect(animal_pre_save_check)
- management.call_command(
- 'loaddata',
- 'animal.xml',
- verbosity=0,
- commit=False,
- )
- self.assertEqual(
- pre_save_checks,
- [
- ("Count = 42 (<type 'int'>)", "Weight = 1.2 (<type 'float'>)")
- ]
- )
- signals.pre_save.disconnect(animal_pre_save_check)
-
- def test_dumpdata_uses_default_manager(self):
- """
- Regression for #11286
- Ensure that dumpdata honors the default manager
- Dump the current contents of the database as a JSON fixture
- """
- management.call_command(
- 'loaddata',
- 'animal.xml',
- verbosity=0,
- commit=False,
- )
- management.call_command(
- 'loaddata',
- 'sequence.json',
- verbosity=0,
- commit=False,
- )
- animal = Animal(
- name='Platypus',
- latin_name='Ornithorhynchus anatinus',
- count=2,
- weight=2.2
- )
- animal.save()
-
- stdout = StringIO()
- management.call_command(
- 'dumpdata',
- 'fixtures_regress.animal',
- format='json',
- stdout=stdout
- )
-
- # Output order isn't guaranteed, so check for parts
- data = stdout.getvalue()
- lion_json = '{"pk": 1, "model": "fixtures_regress.animal", "fields": {"count": 3, "weight": 1.2, "name": "Lion", "latin_name": "Panthera leo"}}'
- emu_json = '{"pk": 10, "model": "fixtures_regress.animal", "fields": {"count": 42, "weight": 1.2, "name": "Emu", "latin_name": "Dromaius novaehollandiae"}}'
- platypus_json = '{"pk": %d, "model": "fixtures_regress.animal", "fields": {"count": 2, "weight": 2.2000000000000002, "name": "Platypus", "latin_name": "Ornithorhynchus anatinus"}}'
- platypus_json = platypus_json % animal.pk
-
- self.assertEqual(len(data), len('[%s]' % ', '.join([lion_json, emu_json, platypus_json])))
- self.assertTrue(lion_json in data)
- self.assertTrue(emu_json in data)
- self.assertTrue(platypus_json in data)
-
- def test_proxy_model_included(self):
- """
- Regression for #11428 - Proxy models aren't included when you dumpdata
- """
- stdout = StringIO()
- # Create an instance of the concrete class
- Widget(name='grommet').save()
- management.call_command(
- 'dumpdata',
- 'fixtures_regress.widget',
- 'fixtures_regress.widgetproxy',
- format='json',
- stdout=stdout
- )
- self.assertEqual(
- stdout.getvalue(),
- """[{"pk": 1, "model": "fixtures_regress.widget", "fields": {"name": "grommet"}}]"""
- )
-
-
-class NaturalKeyFixtureTests(TestCase):
- def assertRaisesMessage(self, exc, msg, func, *args, **kwargs):
- try:
- func(*args, **kwargs)
- except Exception, e:
- self.assertEqual(msg, str(e))
- self.assertTrue(isinstance(e, exc), "Expected %s, got %s" % (exc, type(e)))
-
- def test_nk_deserialize(self):
- """
- Test for ticket #13030 - Python based parser version
- natural keys deserialize with fk to inheriting model
- """
- management.call_command(
- 'loaddata',
- 'model-inheritance.json',
- verbosity=0,
- commit=False
- )
- management.call_command(
- 'loaddata',
- 'nk-inheritance.json',
- verbosity=0,
- commit=False
- )
- self.assertEqual(
- NKChild.objects.get(pk=1).data,
- 'apple'
- )
-
- self.assertEqual(
- RefToNKChild.objects.get(pk=1).nk_fk.data,
- 'apple'
- )
-
- def test_nk_deserialize_xml(self):
- """
- Test for ticket #13030 - XML version
- natural keys deserialize with fk to inheriting model
- """
- management.call_command(
- 'loaddata',
- 'model-inheritance.json',
- verbosity=0,
- commit=False
- )
- management.call_command(
- 'loaddata',
- 'nk-inheritance.json',
- verbosity=0,
- commit=False
- )
- management.call_command(
- 'loaddata',
- 'nk-inheritance2.xml',
- verbosity=0,
- commit=False
- )
- self.assertEqual(
- NKChild.objects.get(pk=2).data,
- 'banana'
- )
- self.assertEqual(
- RefToNKChild.objects.get(pk=2).nk_fk.data,
- 'apple'
- )
-
- def test_nk_on_serialize(self):
- """
- Check that natural key requirements are taken into account
- when serializing models
- """
- management.call_command(
- 'loaddata',
- 'forward_ref_lookup.json',
- verbosity=0,
- commit=False
- )
-
- stdout = StringIO()
- management.call_command(
- 'dumpdata',
- 'fixtures_regress.book',
- 'fixtures_regress.person',
- 'fixtures_regress.store',
- verbosity=0,
- format='json',
- use_natural_keys=True,
- stdout=stdout,
- )
- self.assertEqual(
- stdout.getvalue(),
- """[{"pk": 2, "model": "fixtures_regress.store", "fields": {"name": "Amazon"}}, {"pk": 3, "model": "fixtures_regress.store", "fields": {"name": "Borders"}}, {"pk": 4, "model": "fixtures_regress.person", "fields": {"name": "Neal Stephenson"}}, {"pk": 1, "model": "fixtures_regress.book", "fields": {"stores": [["Amazon"], ["Borders"]], "name": "Cryptonomicon", "author": ["Neal Stephenson"]}}]"""
- )
-
- def test_dependency_sorting(self):
- """
- Now lets check the dependency sorting explicitly
- It doesn't matter what order you mention the models
- Store *must* be serialized before then Person, and both
- must be serialized before Book.
- """
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Book, Person, Store])]
- )
- self.assertEqual(
- sorted_deps,
- [Store, Person, Book]
- )
-
- def test_dependency_sorting_2(self):
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Book, Store, Person])]
- )
- self.assertEqual(
- sorted_deps,
- [Store, Person, Book]
- )
-
- def test_dependency_sorting_3(self):
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Store, Book, Person])]
- )
- self.assertEqual(
- sorted_deps,
- [Store, Person, Book]
- )
-
- def test_dependency_sorting_4(self):
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Store, Person, Book])]
- )
- self.assertEqual(
- sorted_deps,
- [Store, Person, Book]
- )
-
- def test_dependency_sorting_5(self):
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Person, Book, Store])]
- )
- self.assertEqual(
- sorted_deps,
- [Store, Person, Book]
- )
-
- def test_dependency_sorting_6(self):
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Person, Store, Book])]
- )
- self.assertEqual(
- sorted_deps,
- [Store, Person, Book]
- )
-
- def test_dependency_sorting_dangling(self):
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Person, Circle1, Store, Book])]
- )
- self.assertEqual(
- sorted_deps,
- [Circle1, Store, Person, Book]
- )
-
- def test_dependency_sorting_tight_circular(self):
- self.assertRaisesMessage(
- CommandError,
- """Can't resolve dependencies for fixtures_regress.Circle1, fixtures_regress.Circle2 in serialized app list.""",
- sort_dependencies,
- [('fixtures_regress', [Person, Circle2, Circle1, Store, Book])],
- )
-
- def test_dependency_sorting_tight_circular_2(self):
- self.assertRaisesMessage(
- CommandError,
- """Can't resolve dependencies for fixtures_regress.Circle1, fixtures_regress.Circle2 in serialized app list.""",
- sort_dependencies,
- [('fixtures_regress', [Circle1, Book, Circle2])],
- )
-
- def test_dependency_self_referential(self):
- self.assertRaisesMessage(
- CommandError,
- """Can't resolve dependencies for fixtures_regress.Circle3 in serialized app list.""",
- sort_dependencies,
- [('fixtures_regress', [Book, Circle3])],
- )
-
- def test_dependency_sorting_long(self):
- self.assertRaisesMessage(
- CommandError,
- """Can't resolve dependencies for fixtures_regress.Circle1, fixtures_regress.Circle2, fixtures_regress.Circle3 in serialized app list.""",
- sort_dependencies,
- [('fixtures_regress', [Person, Circle2, Circle1, Circle3, Store, Book])],
- )
-
- def test_dependency_sorting_normal(self):
- sorted_deps = sort_dependencies(
- [('fixtures_regress', [Person, ExternalDependency, Book])]
- )
- self.assertEqual(
- sorted_deps,
- [Person, Book, ExternalDependency]
- )
-
- def test_normal_pk(self):
- """
- Check that normal primary keys still work
- on a model with natural key capabilities
- """
- management.call_command(
- 'loaddata',
- 'non_natural_1.json',
- verbosity=0,
- commit=False
- )
- management.call_command(
- 'loaddata',
- 'forward_ref_lookup.json',
- verbosity=0,
- commit=False
- )
- management.call_command(
- 'loaddata',
- 'non_natural_2.xml',
- verbosity=0,
- commit=False
- )
- books = Book.objects.all()
- self.assertEqual(
- books.__repr__(),
- """[<Book: Cryptonomicon by Neal Stephenson (available at Amazon, Borders)>, <Book: Ender's Game by Orson Scott Card (available at Collins Bookstore)>, <Book: Permutation City by Greg Egan (available at Angus and Robertson)>]"""
- )
-
-
-class TestTicket11101(TransactionTestCase):
-
- def ticket_11101(self):
- management.call_command(
- 'loaddata',
- 'thingy.json',
- verbosity=0,
- commit=False
- )
- self.assertEqual(Thingy.objects.count(), 1)
- transaction.rollback()
- self.assertEqual(Thingy.objects.count(), 0)
-
- def test_ticket_11101(self):
- """Test that fixtures can be rolled back (ticket #11101)."""
- ticket_11101 = transaction.commit_manually(self.ticket_11101)
- ticket_11101()
diff --git a/parts/django/tests/regressiontests/forms/__init__.py b/parts/django/tests/regressiontests/forms/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/forms/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/forms/localflavor/__init__.py b/parts/django/tests/regressiontests/forms/localflavor/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/forms/localflavor/ar.py b/parts/django/tests/regressiontests/forms/localflavor/ar.py
deleted file mode 100644
index 9c67269..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/ar.py
+++ /dev/null
@@ -1,99 +0,0 @@
-from django.contrib.localflavor.ar.forms import (ARProvinceSelect,
- ARPostalCodeField, ARDNIField, ARCUITField)
-
-from utils import LocalFlavorTestCase
-
-
-class ARLocalFlavorTests(LocalFlavorTestCase):
- def test_ARProvinceSelect(self):
- f = ARProvinceSelect()
- out = u'''<select name="provincias">
-<option value="B">Buenos Aires</option>
-<option value="K">Catamarca</option>
-<option value="H">Chaco</option>
-<option value="U">Chubut</option>
-<option value="C">Ciudad Aut\xf3noma de Buenos Aires</option>
-<option value="X">C\xf3rdoba</option>
-<option value="W">Corrientes</option>
-<option value="E">Entre R\xedos</option>
-<option value="P">Formosa</option>
-<option value="Y">Jujuy</option>
-<option value="L">La Pampa</option>
-<option value="F">La Rioja</option>
-<option value="M">Mendoza</option>
-<option value="N">Misiones</option>
-<option value="Q">Neuqu\xe9n</option>
-<option value="R">R\xedo Negro</option>
-<option value="A" selected="selected">Salta</option>
-<option value="J">San Juan</option>
-<option value="D">San Luis</option>
-<option value="Z">Santa Cruz</option>
-<option value="S">Santa Fe</option>
-<option value="G">Santiago del Estero</option>
-<option value="V">Tierra del Fuego, Ant\xe1rtida e Islas del Atl\xe1ntico Sur</option>
-<option value="T">Tucum\xe1n</option>
-</select>'''
- self.assertEqual(f.render('provincias', 'A'), out)
-
- def test_ARPostalCodeField(self):
- error_format = [u'Enter a postal code in the format NNNN or ANNNNAAA.']
- error_atmost = [u'Ensure this value has at most 8 characters (it has 9).']
- error_atleast = [u'Ensure this value has at least 4 characters (it has 3).']
- valid = {
- '5000': '5000',
- 'C1064AAB': 'C1064AAB',
- 'c1064AAB': 'C1064AAB',
- 'C1064aab': 'C1064AAB',
- '4400': '4400',
- u'C1064AAB': 'C1064AAB',
- }
- invalid = {
- 'C1064AABB': error_atmost + error_format,
- 'C1064AA': error_format,
- 'C1064AB': error_format,
- '106AAB': error_format,
- '500': error_atleast + error_format,
- '5PPP': error_format,
- }
- self.assertFieldOutput(ARPostalCodeField, valid, invalid)
-
- def test_ARDNIField(self):
- error_length = [u'This field requires 7 or 8 digits.']
- error_digitsonly = [u'This field requires only numbers.']
- valid = {
- '20123456': '20123456',
- '20.123.456': '20123456',
- u'20123456': '20123456',
- u'20.123.456': '20123456',
- '20.123456': '20123456',
- '9123456': '9123456',
- '9.123.456': '9123456',
- }
- invalid = {
- '101234566': error_length,
- 'W0123456': error_digitsonly,
- '10,123,456': error_digitsonly,
- }
- self.assertFieldOutput(ARDNIField, valid, invalid)
-
- def test_ARCUITField(self):
- error_format = [u'Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.']
- error_invalid = [u'Invalid CUIT.']
- valid = {
- '20-10123456-9': '20-10123456-9',
- u'20-10123456-9': '20-10123456-9',
- '27-10345678-4': '27-10345678-4',
- '20101234569': '20-10123456-9',
- '27103456784': '27-10345678-4',
- }
- invalid = {
- '2-10123456-9': error_format,
- '210123456-9': error_format,
- '20-10123456': error_format,
- '20-10123456-': error_format,
- '20-10123456-5': error_invalid,
- '2-10123456-9': error_format,
- '27-10345678-1': error_invalid,
- u'27-10345678-1': error_invalid,
- }
- self.assertFieldOutput(ARCUITField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/at.py b/parts/django/tests/regressiontests/forms/localflavor/at.py
deleted file mode 100644
index 3fa50ac..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/at.py
+++ /dev/null
@@ -1,45 +0,0 @@
-from django.contrib.localflavor.at.forms import (ATZipCodeField, ATStateSelect,
- ATSocialSecurityNumberField)
-
-from utils import LocalFlavorTestCase
-
-
-class ATLocalFlavorTests(LocalFlavorTestCase):
- def test_ATStateSelect(self):
- f = ATStateSelect()
- out = u'''<select name="bundesland">
-<option value="BL">Burgenland</option>
-<option value="KA">Carinthia</option>
-<option value="NO">Lower Austria</option>
-<option value="OO">Upper Austria</option>
-<option value="SA">Salzburg</option>
-<option value="ST">Styria</option>
-<option value="TI">Tyrol</option>
-<option value="VO">Vorarlberg</option>
-<option value="WI" selected="selected">Vienna</option>
-</select>'''
- self.assertEqual(f.render('bundesland', 'WI'), out)
-
- def test_ATZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXX.']
- valid = {
- '1150': '1150',
- '4020': '4020',
- '8020': '8020',
- }
- invalid = {
- '111222': error_format,
- 'eeffee': error_format,
- }
- self.assertFieldOutput(ATZipCodeField, valid, invalid)
-
- def test_ATSocialSecurityNumberField(self):
- error_format = [u'Enter a valid Austrian Social Security Number in XXXX XXXXXX format.']
- valid = {
- '1237 010180': '1237 010180',
- }
- invalid = {
- '1237 010181': error_format,
- '12370 010180': error_format,
- }
- self.assertFieldOutput(ATSocialSecurityNumberField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/au.py b/parts/django/tests/regressiontests/forms/localflavor/au.py
deleted file mode 100644
index 4bd8a76..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/au.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from django.contrib.localflavor.au.forms import (AUPostCodeField,
- AUPhoneNumberField, AUStateSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class AULocalFlavorTests(LocalFlavorTestCase):
- def test_AUStateSelect(self):
- f = AUStateSelect()
- out = u'''<select name="state">
-<option value="ACT">Australian Capital Territory</option>
-<option value="NSW" selected="selected">New South Wales</option>
-<option value="NT">Northern Territory</option>
-<option value="QLD">Queensland</option>
-<option value="SA">South Australia</option>
-<option value="TAS">Tasmania</option>
-<option value="VIC">Victoria</option>
-<option value="WA">Western Australia</option>
-</select>'''
- self.assertEqual(f.render('state', 'NSW'), out)
-
- def test_AUPostCodeField(self):
- error_format = [u'Enter a 4 digit post code.']
- valid = {
- '1234': '1234',
- '2000': '2000',
- }
- invalid = {
- 'abcd': error_format,
- '20001': error_format,
- }
- self.assertFieldOutput(AUPostCodeField, valid, invalid)
-
- def test_AUPhoneNumberField(self):
- error_format = [u'Phone numbers must contain 10 digits.']
- valid = {
- '1234567890': '1234567890',
- '0213456789': '0213456789',
- '02 13 45 67 89': '0213456789',
- '(02) 1345 6789': '0213456789',
- '(02) 1345-6789': '0213456789',
- '(02)1345-6789': '0213456789',
- '0408 123 456': '0408123456',
- }
- invalid = {
- '123': error_format,
- '1800DJANGO': error_format,
- }
- self.assertFieldOutput(AUPhoneNumberField, valid, invalid)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/br.py b/parts/django/tests/regressiontests/forms/localflavor/br.py
deleted file mode 100644
index 6ae7105..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/br.py
+++ /dev/null
@@ -1,144 +0,0 @@
-from django.contrib.localflavor.br.forms import (BRZipCodeField,
- BRCNPJField, BRCPFField, BRPhoneNumberField, BRStateSelect,
- BRStateChoiceField)
-
-from utils import LocalFlavorTestCase
-
-
-class BRLocalFlavorTests(LocalFlavorTestCase):
- def test_BRZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXXX-XXX.']
- valid = {
- '12345-123': '12345-123',
- }
- invalid = {
- '12345_123': error_format,
- '1234-123': error_format,
- 'abcde-abc': error_format,
- '12345-': error_format,
- '-123': error_format,
- }
- self.assertFieldOutput(BRZipCodeField, valid, invalid)
-
- def test_BRCNPJField(self):
- error_format = [u'Invalid CNPJ number.']
- error_numbersonly = [u'This field requires only numbers.']
- valid = {
- '64.132.916/0001-88': '64.132.916/0001-88',
- '64-132-916/0001-88': '64-132-916/0001-88',
- '64132916/0001-88': '64132916/0001-88',
- }
- invalid = {
- '12-345-678/9012-10': error_format,
- '12.345.678/9012-10': error_format,
- '12345678/9012-10': error_format,
- '64.132.916/0001-XX': error_numbersonly,
- }
- self.assertFieldOutput(BRCNPJField, valid, invalid)
-
- def test_BRCPFField(self):
- error_format = [u'Invalid CPF number.']
- error_numbersonly = [u'This field requires only numbers.']
- error_atmost_chars = [u'Ensure this value has at most 14 characters (it has 15).']
- error_atleast_chars = [u'Ensure this value has at least 11 characters (it has 10).']
- error_atmost = [u'This field requires at most 11 digits or 14 characters.']
- valid = {
- '663.256.017-26': '663.256.017-26',
- '66325601726': '66325601726',
- '375.788.573-20': '375.788.573-20',
- '84828509895': '84828509895',
- }
- invalid = {
- '489.294.654-54': error_format,
- '295.669.575-98': error_format,
- '539.315.127-22': error_format,
- '375.788.573-XX': error_numbersonly,
- '375.788.573-000': error_atmost_chars,
- '123.456.78': error_atleast_chars,
- '123456789555': error_atmost,
- }
- self.assertFieldOutput(BRCPFField, valid, invalid)
-
- def test_BRPhoneNumberField(self):
- # TODO: this doesn't test for any invalid inputs.
- valid = {
- '41-3562-3464': u'41-3562-3464',
- '4135623464': u'41-3562-3464',
- '41 3562-3464': u'41-3562-3464',
- '41 3562 3464': u'41-3562-3464',
- '(41) 3562 3464': u'41-3562-3464',
- '41.3562.3464': u'41-3562-3464',
- '41.3562-3464': u'41-3562-3464',
- ' (41) 3562.3464': u'41-3562-3464',
- }
- invalid = {}
- self.assertFieldOutput(BRPhoneNumberField, valid, invalid)
-
- def test_BRStateSelect(self):
- f = BRStateSelect()
- out = u'''<select name="states">
-<option value="AC">Acre</option>
-<option value="AL">Alagoas</option>
-<option value="AP">Amap\xe1</option>
-<option value="AM">Amazonas</option>
-<option value="BA">Bahia</option>
-<option value="CE">Cear\xe1</option>
-<option value="DF">Distrito Federal</option>
-<option value="ES">Esp\xedrito Santo</option>
-<option value="GO">Goi\xe1s</option>
-<option value="MA">Maranh\xe3o</option>
-<option value="MT">Mato Grosso</option>
-<option value="MS">Mato Grosso do Sul</option>
-<option value="MG">Minas Gerais</option>
-<option value="PA">Par\xe1</option>
-<option value="PB">Para\xedba</option>
-<option value="PR" selected="selected">Paran\xe1</option>
-<option value="PE">Pernambuco</option>
-<option value="PI">Piau\xed</option>
-<option value="RJ">Rio de Janeiro</option>
-<option value="RN">Rio Grande do Norte</option>
-<option value="RS">Rio Grande do Sul</option>
-<option value="RO">Rond\xf4nia</option>
-<option value="RR">Roraima</option>
-<option value="SC">Santa Catarina</option>
-<option value="SP">S\xe3o Paulo</option>
-<option value="SE">Sergipe</option>
-<option value="TO">Tocantins</option>
-</select>'''
- self.assertEqual(f.render('states', 'PR'), out)
-
- def test_BRStateChoiceField(self):
- error_invalid = [u'Select a valid brazilian state. That state is not one of the available states.']
- valid = {
- 'AC': 'AC',
- 'AL': 'AL',
- 'AP': 'AP',
- 'AM': 'AM',
- 'BA': 'BA',
- 'CE': 'CE',
- 'DF': 'DF',
- 'ES': 'ES',
- 'GO': 'GO',
- 'MA': 'MA',
- 'MT': 'MT',
- 'MS': 'MS',
- 'MG': 'MG',
- 'PA': 'PA',
- 'PB': 'PB',
- 'PR': 'PR',
- 'PE': 'PE',
- 'PI': 'PI',
- 'RJ': 'RJ',
- 'RN': 'RN',
- 'RS': 'RS',
- 'RO': 'RO',
- 'RR': 'RR',
- 'SC': 'SC',
- 'SP': 'SP',
- 'SE': 'SE',
- 'TO': 'TO',
- }
- invalid = {
- 'pr': error_invalid,
- }
- self.assertFieldOutput(BRStateChoiceField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/ca.py b/parts/django/tests/regressiontests/forms/localflavor/ca.py
deleted file mode 100644
index 575f41c..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/ca.py
+++ /dev/null
@@ -1,95 +0,0 @@
-from django.contrib.localflavor.ca.forms import (CAPostalCodeField,
- CAPhoneNumberField, CAProvinceField, CAProvinceSelect,
- CASocialInsuranceNumberField)
-
-from utils import LocalFlavorTestCase
-
-
-class CALocalFlavorTests(LocalFlavorTestCase):
- def test_CAProvinceSelect(self):
- f = CAProvinceSelect()
- out = u'''<select name="province">
-<option value="AB" selected="selected">Alberta</option>
-<option value="BC">British Columbia</option>
-<option value="MB">Manitoba</option>
-<option value="NB">New Brunswick</option>
-<option value="NF">Newfoundland and Labrador</option>
-<option value="NT">Northwest Territories</option>
-<option value="NS">Nova Scotia</option>
-<option value="NU">Nunavut</option>
-<option value="ON">Ontario</option>
-<option value="PE">Prince Edward Island</option>
-<option value="QC">Quebec</option>
-<option value="SK">Saskatchewan</option>
-<option value="YK">Yukon</option>
-</select>'''
- self.assertEqual(f.render('province', 'AB'), out)
-
- def test_CAPostalCodeField(self):
- error_format = [u'Enter a postal code in the format XXX XXX.']
- valid = {
- 'T2S 2H7': 'T2S 2H7',
- 'T2S 2W7': 'T2S 2W7',
- 'T2S 2Z7': 'T2S 2Z7',
- 'T2Z 2H7': 'T2Z 2H7',
-
- }
- invalid = {
- 'T2S2H7' : error_format,
- 'T2S 2H' : error_format,
- '2T6 H8I': error_format,
- 'T2S2H' : error_format,
- 90210 : error_format,
- 'W2S 2H3': error_format,
- 'Z2S 2H3': error_format,
- 'F2S 2H3': error_format,
- 'A2S 2D3': error_format,
- 'A2I 2R3': error_format,
- 'A2Q 2R3': error_format,
- 'U2B 2R3': error_format,
- 'O2B 2R3': error_format,
- }
- self.assertFieldOutput(CAPostalCodeField, valid, invalid)
-
- def test_CAPhoneNumberField(self):
- error_format = [u'Phone numbers must be in XXX-XXX-XXXX format.']
- valid = {
- '403-555-1212': '403-555-1212',
- '4035551212': '403-555-1212',
- '403 555-1212': '403-555-1212',
- '(403) 555-1212': '403-555-1212',
- '403 555 1212': '403-555-1212',
- '403.555.1212': '403-555-1212',
- '403.555-1212': '403-555-1212',
- ' (403) 555.1212 ': '403-555-1212',
- }
- invalid = {
- '555-1212': error_format,
- '403-55-1212': error_format,
- }
- self.assertFieldOutput(CAPhoneNumberField, valid, invalid)
-
- def test_CAProvinceField(self):
- error_format = [u'Enter a Canadian province or territory.']
- valid = {
- 'ab': 'AB',
- 'BC': 'BC',
- 'nova scotia': 'NS',
- ' manitoba ': 'MB',
- }
- invalid = {
- 'T2S 2H7': error_format,
- }
- self.assertFieldOutput(CAProvinceField, valid, invalid)
-
- def test_CASocialInsuranceField(self):
- error_format = [u'Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format.']
- valid = {
- '046-454-286': '046-454-286',
- }
- invalid = {
- '046-454-287': error_format,
- '046 454 286': error_format,
- '046-44-286': error_format,
- }
- self.assertFieldOutput(CASocialInsuranceNumberField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/ch.py b/parts/django/tests/regressiontests/forms/localflavor/ch.py
deleted file mode 100644
index c67bfcf..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/ch.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from django.contrib.localflavor.ch.forms import (CHZipCodeField,
- CHPhoneNumberField, CHIdentityCardNumberField, CHStateSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class CHLocalFlavorTests(LocalFlavorTestCase):
- def test_CHStateSelect(self):
- f = CHStateSelect()
- out = u'''<select name="state">
-<option value="AG" selected="selected">Aargau</option>
-<option value="AI">Appenzell Innerrhoden</option>
-<option value="AR">Appenzell Ausserrhoden</option>
-<option value="BS">Basel-Stadt</option>
-<option value="BL">Basel-Land</option>
-<option value="BE">Berne</option>
-<option value="FR">Fribourg</option>
-<option value="GE">Geneva</option>
-<option value="GL">Glarus</option>
-<option value="GR">Graubuenden</option>
-<option value="JU">Jura</option>
-<option value="LU">Lucerne</option>
-<option value="NE">Neuchatel</option>
-<option value="NW">Nidwalden</option>
-<option value="OW">Obwalden</option>
-<option value="SH">Schaffhausen</option>
-<option value="SZ">Schwyz</option>
-<option value="SO">Solothurn</option>
-<option value="SG">St. Gallen</option>
-<option value="TG">Thurgau</option>
-<option value="TI">Ticino</option>
-<option value="UR">Uri</option>
-<option value="VS">Valais</option>
-<option value="VD">Vaud</option>
-<option value="ZG">Zug</option>
-<option value="ZH">Zurich</option>
-</select>'''
- self.assertEqual(f.render('state', 'AG'), out)
-
- def test_CHZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXX.']
- valid = {
- '1234': '1234',
- '0000': '0000',
- }
- invalid = {
- '800x': error_format,
- '80 00': error_format,
- }
- self.assertFieldOutput(CHZipCodeField, valid, invalid)
-
- def test_CHPhoneNumberField(self):
- error_format = [u'Phone numbers must be in 0XX XXX XX XX format.']
- valid = {
- '012 345 67 89': '012 345 67 89',
- '0123456789': '012 345 67 89',
- }
- invalid = {
- '01234567890': error_format,
- '1234567890': error_format,
- }
- self.assertFieldOutput(CHPhoneNumberField, valid, invalid)
-
- def test_CHIdentityCardNumberField(self):
- error_format = [u'Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.']
- valid = {
- 'C1234567<0': 'C1234567<0',
- '2123456700': '2123456700',
- }
- invalid = {
- 'C1234567<1': error_format,
- '2123456701': error_format,
- }
- self.assertFieldOutput(CHIdentityCardNumberField, valid, invalid)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/cl.py b/parts/django/tests/regressiontests/forms/localflavor/cl.py
deleted file mode 100644
index 15b8c7b..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/cl.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from django.contrib.localflavor.cl.forms import CLRutField, CLRegionSelect
-from django.core.exceptions import ValidationError
-
-from utils import LocalFlavorTestCase
-
-
-class CLLocalFlavorTests(LocalFlavorTestCase):
- def test_CLRegionSelect(self):
- f = CLRegionSelect()
- out = u'''<select name="foo">
-<option value="RM">Regi\xf3n Metropolitana de Santiago</option>
-<option value="I">Regi\xf3n de Tarapac\xe1</option>
-<option value="II">Regi\xf3n de Antofagasta</option>
-<option value="III">Regi\xf3n de Atacama</option>
-<option value="IV">Regi\xf3n de Coquimbo</option>
-<option value="V">Regi\xf3n de Valpara\xedso</option>
-<option value="VI">Regi\xf3n del Libertador Bernardo O&#39;Higgins</option>
-<option value="VII">Regi\xf3n del Maule</option>
-<option value="VIII">Regi\xf3n del B\xedo B\xedo</option>
-<option value="IX">Regi\xf3n de la Araucan\xeda</option>
-<option value="X">Regi\xf3n de los Lagos</option>
-<option value="XI">Regi\xf3n de Ays\xe9n del General Carlos Ib\xe1\xf1ez del Campo</option>
-<option value="XII">Regi\xf3n de Magallanes y la Ant\xe1rtica Chilena</option>
-<option value="XIV">Regi\xf3n de Los R\xedos</option>
-<option value="XV">Regi\xf3n de Arica-Parinacota</option>
-</select>'''
- self.assertEqual(f.render('foo', 'bar'), out)
-
- def test_CLRutField(self):
- error_invalid = [u'The Chilean RUT is not valid.']
- error_format = [u'Enter a valid Chilean RUT. The format is XX.XXX.XXX-X.']
- valid = {
- '11-6': '11-6',
- '116': '11-6',
- '767484100': '76.748.410-0',
- '78.412.790-7': '78.412.790-7',
- '8.334.6043': '8.334.604-3',
- '76793310-K': '76.793.310-K',
- }
- invalid = {
- '11.111.111-0': error_invalid,
- '111': error_invalid,
- }
- self.assertFieldOutput(CLRutField, valid, invalid)
-
- # deal with special "Strict Mode".
- invalid = {
- '11-6': error_format,
- '767484100': error_format,
- '8.334.6043': error_format,
- '76793310-K': error_format,
- '11.111.111-0': error_invalid
- }
- self.assertFieldOutput(CLRutField,
- {}, invalid, field_kwargs={"strict": True}
- )
diff --git a/parts/django/tests/regressiontests/forms/localflavor/cz.py b/parts/django/tests/regressiontests/forms/localflavor/cz.py
deleted file mode 100644
index 4cff172..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/cz.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# -*- coding: utf-8 -*-
-# Tests for the contrib/localflavor/ CZ Form Fields
-
-tests = r"""
-# CZPostalCodeField #########################################################
-
->>> from django.contrib.localflavor.cz.forms import CZPostalCodeField
->>> f = CZPostalCodeField()
->>> f.clean('84545x')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a postal code in the format XXXXX or XXX XX.']
->>> f.clean('91909')
-u'91909'
->>> f.clean('917 01')
-u'91701'
->>> f.clean('12345')
-u'12345'
->>> f.clean('123456')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a postal code in the format XXXXX or XXX XX.']
->>> f.clean('1234')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a postal code in the format XXXXX or XXX XX.']
->>> f.clean('123 4')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a postal code in the format XXXXX or XXX XX.']
-
-# CZRegionSelect ############################################################
-
->>> from django.contrib.localflavor.cz.forms import CZRegionSelect
->>> w = CZRegionSelect()
->>> w.render('regions', 'TT')
-u'<select name="regions">\n<option value="PR">Prague</option>\n<option value="CE">Central Bohemian Region</option>\n<option value="SO">South Bohemian Region</option>\n<option value="PI">Pilsen Region</option>\n<option value="CA">Carlsbad Region</option>\n<option value="US">Usti Region</option>\n<option value="LB">Liberec Region</option>\n<option value="HK">Hradec Region</option>\n<option value="PA">Pardubice Region</option>\n<option value="VY">Vysocina Region</option>\n<option value="SM">South Moravian Region</option>\n<option value="OL">Olomouc Region</option>\n<option value="ZL">Zlin Region</option>\n<option value="MS">Moravian-Silesian Region</option>\n</select>'
-
-# CZBirthNumberField ########################################################
-
->>> from django.contrib.localflavor.cz.forms import CZBirthNumberField
->>> f = CZBirthNumberField()
->>> f.clean('880523/1237')
-u'880523/1237'
->>> f.clean('8805231237')
-u'8805231237'
->>> f.clean('880523/000')
-u'880523/000'
->>> f.clean('880523000')
-u'880523000'
->>> f.clean('882101/0011')
-u'882101/0011'
->>> f.clean('880523/1237', 'm')
-u'880523/1237'
->>> f.clean('885523/1231', 'f')
-u'885523/1231'
->>> f.clean('123456/12')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX.']
->>> f.clean('123456/12345')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX.']
->>> f.clean('12345612')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX.']
->>> f.clean('12345612345')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX.']
->>> f.clean('881523/0000', 'm')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid birth number.']
->>> f.clean('885223/0000', 'm')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid birth number.']
->>> f.clean('881223/0000', 'f')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid birth number.']
->>> f.clean('886523/0000', 'f')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid birth number.']
->>> f.clean('880523/1239')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid birth number.']
->>> f.clean('8805231239')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid birth number.']
->>> f.clean('990101/0011')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid birth number.']
-
-# CZICNumberField ########################################################
-
->>> from django.contrib.localflavor.cz.forms import CZICNumberField
->>> f = CZICNumberField()
->>> f.clean('12345679')
-u'12345679'
->>> f.clean('12345601')
-u'12345601'
->>> f.clean('12345661')
-u'12345661'
->>> f.clean('12345610')
-u'12345610'
->>> f.clean('1234567')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid IC number.']
->>> f.clean('12345660')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid IC number.']
->>> f.clean('12345600')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid IC number.']
-"""
diff --git a/parts/django/tests/regressiontests/forms/localflavor/de.py b/parts/django/tests/regressiontests/forms/localflavor/de.py
deleted file mode 100644
index 7c68bcc..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/de.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from django.contrib.localflavor.de.forms import (DEZipCodeField, DEStateSelect,
- DEIdentityCardNumberField)
-
-from utils import LocalFlavorTestCase
-
-
-class DELocalFlavorTests(LocalFlavorTestCase):
- def test_DEStateSelect(self):
- f = DEStateSelect()
- out = u'''<select name="states">
-<option value="BW">Baden-Wuerttemberg</option>
-<option value="BY">Bavaria</option>
-<option value="BE">Berlin</option>
-<option value="BB">Brandenburg</option>
-<option value="HB">Bremen</option>
-<option value="HH">Hamburg</option>
-<option value="HE">Hessen</option>
-<option value="MV">Mecklenburg-Western Pomerania</option>
-<option value="NI">Lower Saxony</option>
-<option value="NW">North Rhine-Westphalia</option>
-<option value="RP">Rhineland-Palatinate</option>
-<option value="SL">Saarland</option>
-<option value="SN">Saxony</option>
-<option value="ST">Saxony-Anhalt</option>
-<option value="SH">Schleswig-Holstein</option>
-<option value="TH" selected="selected">Thuringia</option>
-</select>'''
- self.assertEqual(f.render('states', 'TH'), out)
-
- def test_DEZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXXX.']
- valid = {
- '99423': '99423',
- }
- invalid = {
- ' 99423': error_format,
- }
- self.assertFieldOutput(DEZipCodeField, valid, invalid)
-
- def test_DEIdentityCardNumberField(self):
- error_format = [u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.']
- valid = {
- '7549313035D-6004103-0903042-0': '7549313035D-6004103-0903042-0',
- '9786324830D 6104243 0910271 2': '9786324830D-6104243-0910271-2',
- }
- invalid = {
- '0434657485D-6407276-0508137-9': error_format,
- }
- self.assertFieldOutput(DEIdentityCardNumberField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/es.py b/parts/django/tests/regressiontests/forms/localflavor/es.py
deleted file mode 100644
index b584075..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/es.py
+++ /dev/null
@@ -1,172 +0,0 @@
-from django.contrib.localflavor.es.forms import (ESPostalCodeField, ESPhoneNumberField,
- ESIdentityCardNumberField, ESCCCField, ESRegionSelect, ESProvinceSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class ESLocalFlavorTests(LocalFlavorTestCase):
- def test_ESRegionSelect(self):
- f = ESRegionSelect()
- out = u'''<select name="regions">
-<option value="AN">Andalusia</option>
-<option value="AR">Aragon</option>
-<option value="O">Principality of Asturias</option>
-<option value="IB">Balearic Islands</option>
-<option value="PV">Basque Country</option>
-<option value="CN">Canary Islands</option>
-<option value="S">Cantabria</option>
-<option value="CM">Castile-La Mancha</option>
-<option value="CL">Castile and Leon</option>
-<option value="CT" selected="selected">Catalonia</option>
-<option value="EX">Extremadura</option>
-<option value="GA">Galicia</option>
-<option value="LO">La Rioja</option>
-<option value="M">Madrid</option>
-<option value="MU">Region of Murcia</option>
-<option value="NA">Foral Community of Navarre</option>
-<option value="VC">Valencian Community</option>
-</select>'''
- self.assertEqual(f.render('regions', 'CT'), out)
-
- def test_ESProvinceSelect(self):
- f = ESProvinceSelect()
- out = u'''<select name="provinces">
-<option value="01">Arava</option>
-<option value="02">Albacete</option>
-<option value="03">Alacant</option>
-<option value="04">Almeria</option>
-<option value="05">Avila</option>
-<option value="06">Badajoz</option>
-<option value="07">Illes Balears</option>
-<option value="08" selected="selected">Barcelona</option>
-<option value="09">Burgos</option>
-<option value="10">Caceres</option>
-<option value="11">Cadiz</option>
-<option value="12">Castello</option>
-<option value="13">Ciudad Real</option>
-<option value="14">Cordoba</option>
-<option value="15">A Coruna</option>
-<option value="16">Cuenca</option>
-<option value="17">Girona</option>
-<option value="18">Granada</option>
-<option value="19">Guadalajara</option>
-<option value="20">Guipuzkoa</option>
-<option value="21">Huelva</option>
-<option value="22">Huesca</option>
-<option value="23">Jaen</option>
-<option value="24">Leon</option>
-<option value="25">Lleida</option>
-<option value="26">La Rioja</option>
-<option value="27">Lugo</option>
-<option value="28">Madrid</option>
-<option value="29">Malaga</option>
-<option value="30">Murcia</option>
-<option value="31">Navarre</option>
-<option value="32">Ourense</option>
-<option value="33">Asturias</option>
-<option value="34">Palencia</option>
-<option value="35">Las Palmas</option>
-<option value="36">Pontevedra</option>
-<option value="37">Salamanca</option>
-<option value="38">Santa Cruz de Tenerife</option>
-<option value="39">Cantabria</option>
-<option value="40">Segovia</option>
-<option value="41">Seville</option>
-<option value="42">Soria</option>
-<option value="43">Tarragona</option>
-<option value="44">Teruel</option>
-<option value="45">Toledo</option>
-<option value="46">Valencia</option>
-<option value="47">Valladolid</option>
-<option value="48">Bizkaia</option>
-<option value="49">Zamora</option>
-<option value="50">Zaragoza</option>
-<option value="51">Ceuta</option>
-<option value="52">Melilla</option>
-</select>'''
- self.assertEqual(f.render('provinces', '08'), out)
-
- def test_ESPostalCodeField(self):
- error_invalid = [u'Enter a valid postal code in the range and format 01XXX - 52XXX.']
- valid = {
- '08028': '08028',
- '28080': '28080',
- }
- invalid = {
- '53001': error_invalid,
- '0801': error_invalid,
- '080001': error_invalid,
- '00999': error_invalid,
- '08 01': error_invalid,
- '08A01': error_invalid,
- }
- self.assertFieldOutput(ESPostalCodeField, valid, invalid)
-
- def test_ESPhoneNumberField(self):
- error_invalid = [u'Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX.']
- valid = {
- '650010101': '650010101',
- '931234567': '931234567',
- '800123123': '800123123',
- }
- invalid = {
- '555555555': error_invalid,
- '789789789': error_invalid,
- '99123123': error_invalid,
- '9999123123': error_invalid,
- }
- self.assertFieldOutput(ESPhoneNumberField, valid, invalid)
-
- def test_ESIdentityCardNumberField(self):
- error_invalid = [u'Please enter a valid NIF, NIE, or CIF.']
- error_checksum_nif = [u'Invalid checksum for NIF.']
- error_checksum_nie = [u'Invalid checksum for NIE.']
- error_checksum_cif = [u'Invalid checksum for CIF.']
- valid = {
- '78699688J': '78699688J',
- '78699688-J': '78699688J',
- '78699688 J': '78699688J',
- '78699688 j': '78699688J',
- 'X0901797J': 'X0901797J',
- 'X-6124387-Q': 'X6124387Q',
- 'X 0012953 G': 'X0012953G',
- 'x-3287690-r': 'X3287690R',
- 't-03287690r': 'T03287690R',
- 'P2907500I': 'P2907500I',
- 'B38790911': 'B38790911',
- 'B31234560': 'B31234560',
- 'B-3879091A': 'B3879091A',
- 'B 38790911': 'B38790911',
- 'P-3900800-H': 'P3900800H',
- 'P 39008008': 'P39008008',
- 'C-28795565': 'C28795565',
- 'C 2879556E': 'C2879556E',
- }
- invalid = {
- '78699688T': error_checksum_nif,
- 'X-03287690': error_invalid,
- 'X-03287690-T': error_checksum_nie,
- 'B 38790917': error_checksum_cif,
- 'C28795567': error_checksum_cif,
- 'I38790911': error_invalid,
- '78699688-2': error_invalid,
- }
- self.assertFieldOutput(ESIdentityCardNumberField, valid, invalid)
-
- def test_ESCCCField(self):
- error_invalid = [u'Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX.']
- error_checksum = [u'Invalid checksum for bank account number.']
- valid = {
- '20770338793100254321': '20770338793100254321',
- '2077 0338 79 3100254321': '2077 0338 79 3100254321',
- '2077-0338-79-3100254321': '2077-0338-79-3100254321',
- }
- invalid = {
- '2077.0338.79.3100254321': error_invalid,
- '2077-0338-78-3100254321': error_checksum,
- '2077-0338-89-3100254321': error_checksum,
- '2077-03-3879-3100254321': error_invalid,
- }
- self.assertFieldOutput(ESCCCField, valid, invalid)
-
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/fi.py b/parts/django/tests/regressiontests/forms/localflavor/fi.py
deleted file mode 100644
index 161eb17..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/fi.py
+++ /dev/null
@@ -1,382 +0,0 @@
-from django.contrib.localflavor.fi.forms import (FIZipCodeField,
- FISocialSecurityNumber, FIMunicipalitySelect)
-
-from utils import LocalFlavorTestCase
-
-
-class FILocalFlavorTests(LocalFlavorTestCase):
- def test_FIMunicipalitySelect(self):
- f = FIMunicipalitySelect()
- out = u'''<select name="municipalities">
-<option value="akaa">Akaa</option>
-<option value="alajarvi">Alaj\xe4rvi</option>
-<option value="alavieska">Alavieska</option>
-<option value="alavus">Alavus</option>
-<option value="artjarvi">Artj\xe4rvi</option>
-<option value="asikkala">Asikkala</option>
-<option value="askola">Askola</option>
-<option value="aura">Aura</option>
-<option value="brando">Br\xe4nd\xf6</option>
-<option value="eckero">Ecker\xf6</option>
-<option value="enonkoski">Enonkoski</option>
-<option value="enontekio">Enonteki\xf6</option>
-<option value="espoo">Espoo</option>
-<option value="eura">Eura</option>
-<option value="eurajoki">Eurajoki</option>
-<option value="evijarvi">Evij\xe4rvi</option>
-<option value="finstrom">Finstr\xf6m</option>
-<option value="forssa">Forssa</option>
-<option value="foglo">F\xf6gl\xf6</option>
-<option value="geta">Geta</option>
-<option value="haapajarvi">Haapaj\xe4rvi</option>
-<option value="haapavesi">Haapavesi</option>
-<option value="hailuoto">Hailuoto</option>
-<option value="halsua">Halsua</option>
-<option value="hamina">Hamina</option>
-<option value="hammarland">Hammarland</option>
-<option value="hankasalmi">Hankasalmi</option>
-<option value="hanko">Hanko</option>
-<option value="harjavalta">Harjavalta</option>
-<option value="hartola">Hartola</option>
-<option value="hattula">Hattula</option>
-<option value="haukipudas">Haukipudas</option>
-<option value="hausjarvi">Hausj\xe4rvi</option>
-<option value="heinola">Heinola</option>
-<option value="heinavesi">Hein\xe4vesi</option>
-<option value="helsinki">Helsinki</option>
-<option value="hirvensalmi">Hirvensalmi</option>
-<option value="hollola">Hollola</option>
-<option value="honkajoki">Honkajoki</option>
-<option value="huittinen">Huittinen</option>
-<option value="humppila">Humppila</option>
-<option value="hyrynsalmi">Hyrynsalmi</option>
-<option value="hyvinkaa">Hyvink\xe4\xe4</option>
-<option value="hameenkoski">H\xe4meenkoski</option>
-<option value="hameenkyro">H\xe4meenkyr\xf6</option>
-<option value="hameenlinna">H\xe4meenlinna</option>
-<option value="ii">Ii</option>
-<option value="iisalmi">Iisalmi</option>
-<option value="iitti">Iitti</option>
-<option value="ikaalinen">Ikaalinen</option>
-<option value="ilmajoki">Ilmajoki</option>
-<option value="ilomantsi">Ilomantsi</option>
-<option value="imatra">Imatra</option>
-<option value="inari">Inari</option>
-<option value="inkoo">Inkoo</option>
-<option value="isojoki">Isojoki</option>
-<option value="isokyro">Isokyr\xf6</option>
-<option value="jalasjarvi">Jalasj\xe4rvi</option>
-<option value="janakkala">Janakkala</option>
-<option value="joensuu">Joensuu</option>
-<option value="jokioinen">Jokioinen</option>
-<option value="jomala">Jomala</option>
-<option value="joroinen">Joroinen</option>
-<option value="joutsa">Joutsa</option>
-<option value="juankoski">Juankoski</option>
-<option value="juuka">Juuka</option>
-<option value="juupajoki">Juupajoki</option>
-<option value="juva">Juva</option>
-<option value="jyvaskyla">Jyv\xe4skyl\xe4</option>
-<option value="jamijarvi">J\xe4mij\xe4rvi</option>
-<option value="jamsa">J\xe4ms\xe4</option>
-<option value="jarvenpaa">J\xe4rvenp\xe4\xe4</option>
-<option value="kaarina">Kaarina</option>
-<option value="kaavi">Kaavi</option>
-<option value="kajaani">Kajaani</option>
-<option value="kalajoki">Kalajoki</option>
-<option value="kangasala">Kangasala</option>
-<option value="kangasniemi">Kangasniemi</option>
-<option value="kankaanpaa">Kankaanp\xe4\xe4</option>
-<option value="kannonkoski">Kannonkoski</option>
-<option value="kannus">Kannus</option>
-<option value="karijoki">Karijoki</option>
-<option value="karjalohja">Karjalohja</option>
-<option value="karkkila">Karkkila</option>
-<option value="karstula">Karstula</option>
-<option value="karttula">Karttula</option>
-<option value="karvia">Karvia</option>
-<option value="kaskinen">Kaskinen</option>
-<option value="kauhajoki">Kauhajoki</option>
-<option value="kauhava">Kauhava</option>
-<option value="kauniainen">Kauniainen</option>
-<option value="kaustinen">Kaustinen</option>
-<option value="keitele">Keitele</option>
-<option value="kemi">Kemi</option>
-<option value="kemijarvi">Kemij\xe4rvi</option>
-<option value="keminmaa">Keminmaa</option>
-<option value="kemionsaari">Kemi\xf6nsaari</option>
-<option value="kempele">Kempele</option>
-<option value="kerava">Kerava</option>
-<option value="kerimaki">Kerim\xe4ki</option>
-<option value="kesalahti">Kes\xe4lahti</option>
-<option value="keuruu">Keuruu</option>
-<option value="kihnio">Kihni\xf6</option>
-<option value="kiikoinen">Kiikoinen</option>
-<option value="kiiminki">Kiiminki</option>
-<option value="kinnula">Kinnula</option>
-<option value="kirkkonummi">Kirkkonummi</option>
-<option value="kitee">Kitee</option>
-<option value="kittila">Kittil\xe4</option>
-<option value="kiuruvesi">Kiuruvesi</option>
-<option value="kivijarvi">Kivij\xe4rvi</option>
-<option value="kokemaki">Kokem\xe4ki</option>
-<option value="kokkola">Kokkola</option>
-<option value="kolari">Kolari</option>
-<option value="konnevesi">Konnevesi</option>
-<option value="kontiolahti">Kontiolahti</option>
-<option value="korsnas">Korsn\xe4s</option>
-<option value="koskitl">Koski Tl</option>
-<option value="kotka">Kotka</option>
-<option value="kouvola">Kouvola</option>
-<option value="kristiinankaupunki">Kristiinankaupunki</option>
-<option value="kruunupyy">Kruunupyy</option>
-<option value="kuhmalahti">Kuhmalahti</option>
-<option value="kuhmo">Kuhmo</option>
-<option value="kuhmoinen">Kuhmoinen</option>
-<option value="kumlinge">Kumlinge</option>
-<option value="kuopio">Kuopio</option>
-<option value="kuortane">Kuortane</option>
-<option value="kurikka">Kurikka</option>
-<option value="kustavi">Kustavi</option>
-<option value="kuusamo">Kuusamo</option>
-<option value="kylmakoski">Kylm\xe4koski</option>
-<option value="kyyjarvi">Kyyj\xe4rvi</option>
-<option value="karkola">K\xe4rk\xf6l\xe4</option>
-<option value="karsamaki">K\xe4rs\xe4m\xe4ki</option>
-<option value="kokar">K\xf6kar</option>
-<option value="koylio">K\xf6yli\xf6</option>
-<option value="lahti">Lahti</option>
-<option value="laihia">Laihia</option>
-<option value="laitila">Laitila</option>
-<option value="lapinjarvi">Lapinj\xe4rvi</option>
-<option value="lapinlahti">Lapinlahti</option>
-<option value="lappajarvi">Lappaj\xe4rvi</option>
-<option value="lappeenranta">Lappeenranta</option>
-<option value="lapua">Lapua</option>
-<option value="laukaa">Laukaa</option>
-<option value="lavia">Lavia</option>
-<option value="lemi">Lemi</option>
-<option value="lemland">Lemland</option>
-<option value="lempaala">Lemp\xe4\xe4l\xe4</option>
-<option value="leppavirta">Lepp\xe4virta</option>
-<option value="lestijarvi">Lestij\xe4rvi</option>
-<option value="lieksa">Lieksa</option>
-<option value="lieto">Lieto</option>
-<option value="liminka">Liminka</option>
-<option value="liperi">Liperi</option>
-<option value="lohja">Lohja</option>
-<option value="loimaa">Loimaa</option>
-<option value="loppi">Loppi</option>
-<option value="loviisa">Loviisa</option>
-<option value="luhanka">Luhanka</option>
-<option value="lumijoki">Lumijoki</option>
-<option value="lumparland">Lumparland</option>
-<option value="luoto">Luoto</option>
-<option value="luumaki">Luum\xe4ki</option>
-<option value="luvia">Luvia</option>
-<option value="lansi-turunmaa">L\xe4nsi-Turunmaa</option>
-<option value="maalahti">Maalahti</option>
-<option value="maaninka">Maaninka</option>
-<option value="maarianhamina">Maarianhamina</option>
-<option value="marttila">Marttila</option>
-<option value="masku">Masku</option>
-<option value="merijarvi">Merij\xe4rvi</option>
-<option value="merikarvia">Merikarvia</option>
-<option value="miehikkala">Miehikk\xe4l\xe4</option>
-<option value="mikkeli">Mikkeli</option>
-<option value="muhos">Muhos</option>
-<option value="multia">Multia</option>
-<option value="muonio">Muonio</option>
-<option value="mustasaari">Mustasaari</option>
-<option value="muurame">Muurame</option>
-<option value="mynamaki">Myn\xe4m\xe4ki</option>
-<option value="myrskyla">Myrskyl\xe4</option>
-<option value="mantsala">M\xe4nts\xe4l\xe4</option>
-<option value="mantta-vilppula">M\xe4ntt\xe4-Vilppula</option>
-<option value="mantyharju">M\xe4ntyharju</option>
-<option value="naantali">Naantali</option>
-<option value="nakkila">Nakkila</option>
-<option value="nastola">Nastola</option>
-<option value="nilsia">Nilsi\xe4</option>
-<option value="nivala">Nivala</option>
-<option value="nokia">Nokia</option>
-<option value="nousiainen">Nousiainen</option>
-<option value="nummi-pusula">Nummi-Pusula</option>
-<option value="nurmes">Nurmes</option>
-<option value="nurmijarvi">Nurmij\xe4rvi</option>
-<option value="narpio">N\xe4rpi\xf6</option>
-<option value="oravainen">Oravainen</option>
-<option value="orimattila">Orimattila</option>
-<option value="oripaa">Orip\xe4\xe4</option>
-<option value="orivesi">Orivesi</option>
-<option value="oulainen">Oulainen</option>
-<option value="oulu">Oulu</option>
-<option value="oulunsalo">Oulunsalo</option>
-<option value="outokumpu">Outokumpu</option>
-<option value="padasjoki">Padasjoki</option>
-<option value="paimio">Paimio</option>
-<option value="paltamo">Paltamo</option>
-<option value="parikkala">Parikkala</option>
-<option value="parkano">Parkano</option>
-<option value="pedersore">Peders\xf6re</option>
-<option value="pelkosenniemi">Pelkosenniemi</option>
-<option value="pello">Pello</option>
-<option value="perho">Perho</option>
-<option value="pertunmaa">Pertunmaa</option>
-<option value="petajavesi">Pet\xe4j\xe4vesi</option>
-<option value="pieksamaki">Pieks\xe4m\xe4ki</option>
-<option value="pielavesi">Pielavesi</option>
-<option value="pietarsaari">Pietarsaari</option>
-<option value="pihtipudas">Pihtipudas</option>
-<option value="pirkkala">Pirkkala</option>
-<option value="polvijarvi">Polvij\xe4rvi</option>
-<option value="pomarkku">Pomarkku</option>
-<option value="pori">Pori</option>
-<option value="pornainen">Pornainen</option>
-<option value="porvoo">Porvoo</option>
-<option value="posio">Posio</option>
-<option value="pudasjarvi">Pudasj\xe4rvi</option>
-<option value="pukkila">Pukkila</option>
-<option value="punkaharju">Punkaharju</option>
-<option value="punkalaidun">Punkalaidun</option>
-<option value="puolanka">Puolanka</option>
-<option value="puumala">Puumala</option>
-<option value="pyhtaa">Pyht\xe4\xe4</option>
-<option value="pyhajoki">Pyh\xe4joki</option>
-<option value="pyhajarvi">Pyh\xe4j\xe4rvi</option>
-<option value="pyhanta">Pyh\xe4nt\xe4</option>
-<option value="pyharanta">Pyh\xe4ranta</option>
-<option value="palkane">P\xe4lk\xe4ne</option>
-<option value="poytya">P\xf6yty\xe4</option>
-<option value="raahe">Raahe</option>
-<option value="raasepori">Raasepori</option>
-<option value="raisio">Raisio</option>
-<option value="rantasalmi">Rantasalmi</option>
-<option value="ranua">Ranua</option>
-<option value="rauma">Rauma</option>
-<option value="rautalampi">Rautalampi</option>
-<option value="rautavaara">Rautavaara</option>
-<option value="rautjarvi">Rautj\xe4rvi</option>
-<option value="reisjarvi">Reisj\xe4rvi</option>
-<option value="riihimaki">Riihim\xe4ki</option>
-<option value="ristiina">Ristiina</option>
-<option value="ristijarvi">Ristij\xe4rvi</option>
-<option value="rovaniemi">Rovaniemi</option>
-<option value="ruokolahti">Ruokolahti</option>
-<option value="ruovesi">Ruovesi</option>
-<option value="rusko">Rusko</option>
-<option value="raakkyla">R\xe4\xe4kkyl\xe4</option>
-<option value="saarijarvi">Saarij\xe4rvi</option>
-<option value="salla">Salla</option>
-<option value="salo">Salo</option>
-<option value="saltvik">Saltvik</option>
-<option value="sastamala">Sastamala</option>
-<option value="sauvo">Sauvo</option>
-<option value="savitaipale">Savitaipale</option>
-<option value="savonlinna">Savonlinna</option>
-<option value="savukoski">Savukoski</option>
-<option value="seinajoki">Sein\xe4joki</option>
-<option value="sievi">Sievi</option>
-<option value="siikainen">Siikainen</option>
-<option value="siikajoki">Siikajoki</option>
-<option value="siikalatva">Siikalatva</option>
-<option value="siilinjarvi">Siilinj\xe4rvi</option>
-<option value="simo">Simo</option>
-<option value="sipoo">Sipoo</option>
-<option value="siuntio">Siuntio</option>
-<option value="sodankyla">Sodankyl\xe4</option>
-<option value="soini">Soini</option>
-<option value="somero">Somero</option>
-<option value="sonkajarvi">Sonkaj\xe4rvi</option>
-<option value="sotkamo">Sotkamo</option>
-<option value="sottunga">Sottunga</option>
-<option value="sulkava">Sulkava</option>
-<option value="sund">Sund</option>
-<option value="suomenniemi">Suomenniemi</option>
-<option value="suomussalmi">Suomussalmi</option>
-<option value="suonenjoki">Suonenjoki</option>
-<option value="sysma">Sysm\xe4</option>
-<option value="sakyla">S\xe4kyl\xe4</option>
-<option value="taipalsaari">Taipalsaari</option>
-<option value="taivalkoski">Taivalkoski</option>
-<option value="taivassalo">Taivassalo</option>
-<option value="tammela">Tammela</option>
-<option value="tampere">Tampere</option>
-<option value="tarvasjoki">Tarvasjoki</option>
-<option value="tervo">Tervo</option>
-<option value="tervola">Tervola</option>
-<option value="teuva">Teuva</option>
-<option value="tohmajarvi">Tohmaj\xe4rvi</option>
-<option value="toholampi">Toholampi</option>
-<option value="toivakka">Toivakka</option>
-<option value="tornio">Tornio</option>
-<option value="turku" selected="selected">Turku</option>
-<option value="tuusniemi">Tuusniemi</option>
-<option value="tuusula">Tuusula</option>
-<option value="tyrnava">Tyrn\xe4v\xe4</option>
-<option value="toysa">T\xf6ys\xe4</option>
-<option value="ulvila">Ulvila</option>
-<option value="urjala">Urjala</option>
-<option value="utajarvi">Utaj\xe4rvi</option>
-<option value="utsjoki">Utsjoki</option>
-<option value="uurainen">Uurainen</option>
-<option value="uusikaarlepyy">Uusikaarlepyy</option>
-<option value="uusikaupunki">Uusikaupunki</option>
-<option value="vaala">Vaala</option>
-<option value="vaasa">Vaasa</option>
-<option value="valkeakoski">Valkeakoski</option>
-<option value="valtimo">Valtimo</option>
-<option value="vantaa">Vantaa</option>
-<option value="varkaus">Varkaus</option>
-<option value="varpaisjarvi">Varpaisj\xe4rvi</option>
-<option value="vehmaa">Vehmaa</option>
-<option value="vesanto">Vesanto</option>
-<option value="vesilahti">Vesilahti</option>
-<option value="veteli">Veteli</option>
-<option value="vierema">Vierem\xe4</option>
-<option value="vihanti">Vihanti</option>
-<option value="vihti">Vihti</option>
-<option value="viitasaari">Viitasaari</option>
-<option value="vimpeli">Vimpeli</option>
-<option value="virolahti">Virolahti</option>
-<option value="virrat">Virrat</option>
-<option value="vardo">V\xe5rd\xf6</option>
-<option value="vahakyro">V\xe4h\xe4kyr\xf6</option>
-<option value="voyri-maksamaa">V\xf6yri-Maksamaa</option>
-<option value="yli-ii">Yli-Ii</option>
-<option value="ylitornio">Ylitornio</option>
-<option value="ylivieska">Ylivieska</option>
-<option value="ylojarvi">Yl\xf6j\xe4rvi</option>
-<option value="ypaja">Yp\xe4j\xe4</option>
-<option value="ahtari">\xc4ht\xe4ri</option>
-<option value="aanekoski">\xc4\xe4nekoski</option>
-</select>'''
- self.assertEquals(f.render('municipalities', 'turku'), out)
-
- def test_FIZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXXX.']
- valid = {
- '20540': '20540',
- '20101': '20101',
- }
- invalid = {
- '20s40': error_format,
- '205401': error_format
- }
- self.assertFieldOutput(FIZipCodeField, valid, invalid)
-
- def test_FISocialSecurityNumber(self):
- error_invalid = [u'Enter a valid Finnish social security number.']
- valid = {
- '010101-0101': '010101-0101',
- '010101+0101': '010101+0101',
- '010101A0101': '010101A0101',
- }
- invalid = {
- '101010-0102': error_invalid,
- '10a010-0101': error_invalid,
- '101010-0\xe401': error_invalid,
- '101010b0101': error_invalid,
- }
- self.assertFieldOutput(FISocialSecurityNumber, valid, invalid)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/fr.py b/parts/django/tests/regressiontests/forms/localflavor/fr.py
deleted file mode 100644
index 96045c3..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/fr.py
+++ /dev/null
@@ -1,145 +0,0 @@
-from django.contrib.localflavor.fr.forms import (FRZipCodeField,
- FRPhoneNumberField, FRDepartmentSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class FRLocalFlavorTests(LocalFlavorTestCase):
- def test_FRZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXXX.']
- valid = {
- '75001': '75001',
- '93200': '93200',
- }
- invalid = {
- '2A200': error_format,
- '980001': error_format,
- }
- self.assertFieldOutput(FRZipCodeField, valid, invalid)
-
- def test_FRPhoneNumberField(self):
- error_format = [u'Phone numbers must be in 0X XX XX XX XX format.']
- valid = {
- '01 55 44 58 64': '01 55 44 58 64',
- '0155445864': '01 55 44 58 64',
- '01 5544 5864': '01 55 44 58 64',
- '01 55.44.58.64': '01 55 44 58 64',
- '01.55.44.58.64': '01 55 44 58 64',
- }
- invalid = {
- '01,55,44,58,64': error_format,
- '555 015 544': error_format,
- }
- self.assertFieldOutput(FRPhoneNumberField, valid, invalid)
-
- def test_FRDepartmentSelect(self):
- f = FRDepartmentSelect()
- out = u'''<select name="dep">
-<option value="01">01 - Ain</option>
-<option value="02">02 - Aisne</option>
-<option value="03">03 - Allier</option>
-<option value="04">04 - Alpes-de-Haute-Provence</option>
-<option value="05">05 - Hautes-Alpes</option>
-<option value="06">06 - Alpes-Maritimes</option>
-<option value="07">07 - Ardeche</option>
-<option value="08">08 - Ardennes</option>
-<option value="09">09 - Ariege</option>
-<option value="10">10 - Aube</option>
-<option value="11">11 - Aude</option>
-<option value="12">12 - Aveyron</option>
-<option value="13">13 - Bouches-du-Rhone</option>
-<option value="14">14 - Calvados</option>
-<option value="15">15 - Cantal</option>
-<option value="16">16 - Charente</option>
-<option value="17">17 - Charente-Maritime</option>
-<option value="18">18 - Cher</option>
-<option value="19">19 - Correze</option>
-<option value="21">21 - Cote-d&#39;Or</option>
-<option value="22">22 - Cotes-d&#39;Armor</option>
-<option value="23">23 - Creuse</option>
-<option value="24">24 - Dordogne</option>
-<option value="25">25 - Doubs</option>
-<option value="26">26 - Drome</option>
-<option value="27">27 - Eure</option>
-<option value="28">28 - Eure-et-Loire</option>
-<option value="29">29 - Finistere</option>
-<option value="2A">2A - Corse-du-Sud</option>
-<option value="2B">2B - Haute-Corse</option>
-<option value="30">30 - Gard</option>
-<option value="31">31 - Haute-Garonne</option>
-<option value="32">32 - Gers</option>
-<option value="33">33 - Gironde</option>
-<option value="34">34 - Herault</option>
-<option value="35">35 - Ille-et-Vilaine</option>
-<option value="36">36 - Indre</option>
-<option value="37">37 - Indre-et-Loire</option>
-<option value="38">38 - Isere</option>
-<option value="39">39 - Jura</option>
-<option value="40">40 - Landes</option>
-<option value="41">41 - Loir-et-Cher</option>
-<option value="42">42 - Loire</option>
-<option value="43">43 - Haute-Loire</option>
-<option value="44">44 - Loire-Atlantique</option>
-<option value="45">45 - Loiret</option>
-<option value="46">46 - Lot</option>
-<option value="47">47 - Lot-et-Garonne</option>
-<option value="48">48 - Lozere</option>
-<option value="49">49 - Maine-et-Loire</option>
-<option value="50">50 - Manche</option>
-<option value="51">51 - Marne</option>
-<option value="52">52 - Haute-Marne</option>
-<option value="53">53 - Mayenne</option>
-<option value="54">54 - Meurthe-et-Moselle</option>
-<option value="55">55 - Meuse</option>
-<option value="56">56 - Morbihan</option>
-<option value="57">57 - Moselle</option>
-<option value="58">58 - Nievre</option>
-<option value="59">59 - Nord</option>
-<option value="60">60 - Oise</option>
-<option value="61">61 - Orne</option>
-<option value="62">62 - Pas-de-Calais</option>
-<option value="63">63 - Puy-de-Dome</option>
-<option value="64">64 - Pyrenees-Atlantiques</option>
-<option value="65">65 - Hautes-Pyrenees</option>
-<option value="66">66 - Pyrenees-Orientales</option>
-<option value="67">67 - Bas-Rhin</option>
-<option value="68">68 - Haut-Rhin</option>
-<option value="69">69 - Rhone</option>
-<option value="70">70 - Haute-Saone</option>
-<option value="71">71 - Saone-et-Loire</option>
-<option value="72">72 - Sarthe</option>
-<option value="73">73 - Savoie</option>
-<option value="74">74 - Haute-Savoie</option>
-<option value="75">75 - Paris</option>
-<option value="76">76 - Seine-Maritime</option>
-<option value="77">77 - Seine-et-Marne</option>
-<option value="78">78 - Yvelines</option>
-<option value="79">79 - Deux-Sevres</option>
-<option value="80">80 - Somme</option>
-<option value="81">81 - Tarn</option>
-<option value="82">82 - Tarn-et-Garonne</option>
-<option value="83">83 - Var</option>
-<option value="84">84 - Vaucluse</option>
-<option value="85">85 - Vendee</option>
-<option value="86">86 - Vienne</option>
-<option value="87">87 - Haute-Vienne</option>
-<option value="88">88 - Vosges</option>
-<option value="89">89 - Yonne</option>
-<option value="90">90 - Territoire de Belfort</option>
-<option value="91">91 - Essonne</option>
-<option value="92">92 - Hauts-de-Seine</option>
-<option value="93">93 - Seine-Saint-Denis</option>
-<option value="94">94 - Val-de-Marne</option>
-<option value="95">95 - Val-d&#39;Oise</option>
-<option value="971">971 - Guadeloupe</option>
-<option value="972">972 - Martinique</option>
-<option value="973">973 - Guyane</option>
-<option value="974">974 - La Reunion</option>
-<option value="975">975 - Saint-Pierre-et-Miquelon</option>
-<option value="976">976 - Mayotte</option>
-<option value="984">984 - Terres Australes et Antarctiques</option>
-<option value="986">986 - Wallis et Futuna</option>
-<option value="987">987 - Polynesie Francaise</option>
-<option value="988">988 - Nouvelle-Caledonie</option>
-</select>'''
- self.assertEqual(f.render('dep', 'Paris'), out)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/generic.py b/parts/django/tests/regressiontests/forms/localflavor/generic.py
deleted file mode 100644
index f47fc91..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/generic.py
+++ /dev/null
@@ -1,88 +0,0 @@
-import datetime
-
-from django.contrib.localflavor.generic.forms import DateField, DateTimeField
-
-from utils import LocalFlavorTestCase
-
-
-class GenericLocalFlavorTests(LocalFlavorTestCase):
- def test_GenericDateField(self):
- error_invalid = [u'Enter a valid date.']
- valid = {
- datetime.date(2006, 10, 25): datetime.date(2006, 10, 25),
- datetime.datetime(2006, 10, 25, 14, 30): datetime.date(2006, 10, 25),
- datetime.datetime(2006, 10, 25, 14, 30, 59): datetime.date(2006, 10, 25),
- datetime.datetime(2006, 10, 25, 14, 30, 59, 200): datetime.date(2006, 10, 25),
- '2006-10-25': datetime.date(2006, 10, 25),
- '25/10/2006': datetime.date(2006, 10, 25),
- '25/10/06': datetime.date(2006, 10, 25),
- 'Oct 25 2006': datetime.date(2006, 10, 25),
- 'October 25 2006': datetime.date(2006, 10, 25),
- 'October 25, 2006': datetime.date(2006, 10, 25),
- '25 October 2006': datetime.date(2006, 10, 25),
- '25 October, 2006': datetime.date(2006, 10, 25),
- }
- invalid = {
- '2006-4-31': error_invalid,
- '200a-10-25': error_invalid,
- '10/25/06': error_invalid,
- }
- self.assertFieldOutput(DateField, valid, invalid, empty_value=None)
-
- # DateField with optional input_formats parameter
- valid = {
- datetime.date(2006, 10, 25): datetime.date(2006, 10, 25),
- datetime.datetime(2006, 10, 25, 14, 30): datetime.date(2006, 10, 25),
- '2006 10 25': datetime.date(2006, 10, 25),
- }
- invalid = {
- '2006-10-25': error_invalid,
- '25/10/2006': error_invalid,
- '25/10/06': error_invalid,
- }
- kwargs = {'input_formats':['%Y %m %d'],}
- self.assertFieldOutput(DateField,
- valid, invalid, field_kwargs=kwargs, empty_value=None
- )
-
- def test_GenericDateTimeField(self):
- error_invalid = [u'Enter a valid date/time.']
- valid = {
- datetime.date(2006, 10, 25): datetime.datetime(2006, 10, 25, 0, 0),
- datetime.datetime(2006, 10, 25, 14, 30): datetime.datetime(2006, 10, 25, 14, 30),
- datetime.datetime(2006, 10, 25, 14, 30, 59): datetime.datetime(2006, 10, 25, 14, 30, 59),
- datetime.datetime(2006, 10, 25, 14, 30, 59, 200): datetime.datetime(2006, 10, 25, 14, 30, 59, 200),
- '2006-10-25 14:30:45': datetime.datetime(2006, 10, 25, 14, 30, 45),
- '2006-10-25 14:30:00': datetime.datetime(2006, 10, 25, 14, 30),
- '2006-10-25 14:30': datetime.datetime(2006, 10, 25, 14, 30),
- '2006-10-25': datetime.datetime(2006, 10, 25, 0, 0),
- '25/10/2006 14:30:45': datetime.datetime(2006, 10, 25, 14, 30, 45),
- '25/10/2006 14:30:00': datetime.datetime(2006, 10, 25, 14, 30),
- '25/10/2006 14:30': datetime.datetime(2006, 10, 25, 14, 30),
- '25/10/2006': datetime.datetime(2006, 10, 25, 0, 0),
- '25/10/06 14:30:45': datetime.datetime(2006, 10, 25, 14, 30, 45),
- '25/10/06 14:30:00': datetime.datetime(2006, 10, 25, 14, 30),
- '25/10/06 14:30': datetime.datetime(2006, 10, 25, 14, 30),
- '25/10/06': datetime.datetime(2006, 10, 25, 0, 0),
- }
- invalid = {
- 'hello': error_invalid,
- '2006-10-25 4:30 p.m.': error_invalid,
- }
- self.assertFieldOutput(DateTimeField, valid, invalid, empty_value=None)
-
- # DateTimeField with optional input_formats paramter
- valid = {
- datetime.date(2006, 10, 25): datetime.datetime(2006, 10, 25, 0, 0),
- datetime.datetime(2006, 10, 25, 14, 30): datetime.datetime(2006, 10, 25, 14, 30),
- datetime.datetime(2006, 10, 25, 14, 30, 59): datetime.datetime(2006, 10, 25, 14, 30, 59),
- datetime.datetime(2006, 10, 25, 14, 30, 59, 200): datetime.datetime(2006, 10, 25, 14, 30, 59, 200),
- '2006 10 25 2:30 PM': datetime.datetime(2006, 10, 25, 14, 30),
- }
- invalid = {
- '2006-10-25 14:30:45': error_invalid,
- }
- kwargs = {'input_formats':['%Y %m %d %I:%M %p'],}
- self.assertFieldOutput(DateTimeField,
- valid, invalid, field_kwargs=kwargs, empty_value=None
- )
diff --git a/parts/django/tests/regressiontests/forms/localflavor/id.py b/parts/django/tests/regressiontests/forms/localflavor/id.py
deleted file mode 100644
index cb346ef..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/id.py
+++ /dev/null
@@ -1,181 +0,0 @@
-from django.contrib.localflavor.id.forms import (IDPhoneNumberField,
- IDPostCodeField, IDNationalIdentityNumberField, IDLicensePlateField,
- IDProvinceSelect, IDLicensePlatePrefixSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class IDLocalFlavorTests(LocalFlavorTestCase):
- def test_IDProvinceSelect(self):
- f = IDProvinceSelect()
- out = u'''<select name="provinces">
-<option value="BLI">Bali</option>
-<option value="BTN">Banten</option>
-<option value="BKL">Bengkulu</option>
-<option value="DIY">Yogyakarta</option>
-<option value="JKT">Jakarta</option>
-<option value="GOR">Gorontalo</option>
-<option value="JMB">Jambi</option>
-<option value="JBR">Jawa Barat</option>
-<option value="JTG">Jawa Tengah</option>
-<option value="JTM">Jawa Timur</option>
-<option value="KBR">Kalimantan Barat</option>
-<option value="KSL">Kalimantan Selatan</option>
-<option value="KTG">Kalimantan Tengah</option>
-<option value="KTM">Kalimantan Timur</option>
-<option value="BBL">Kepulauan Bangka-Belitung</option>
-<option value="KRI">Kepulauan Riau</option>
-<option value="LPG" selected="selected">Lampung</option>
-<option value="MLK">Maluku</option>
-<option value="MUT">Maluku Utara</option>
-<option value="NAD">Nanggroe Aceh Darussalam</option>
-<option value="NTB">Nusa Tenggara Barat</option>
-<option value="NTT">Nusa Tenggara Timur</option>
-<option value="PPA">Papua</option>
-<option value="PPB">Papua Barat</option>
-<option value="RIU">Riau</option>
-<option value="SLB">Sulawesi Barat</option>
-<option value="SLS">Sulawesi Selatan</option>
-<option value="SLT">Sulawesi Tengah</option>
-<option value="SLR">Sulawesi Tenggara</option>
-<option value="SLU">Sulawesi Utara</option>
-<option value="SMB">Sumatera Barat</option>
-<option value="SMS">Sumatera Selatan</option>
-<option value="SMU">Sumatera Utara</option>
-</select>'''
- self.assertEqual(f.render('provinces', 'LPG'), out)
-
- def test_IDLicensePlatePrefixSelect(self):
- f = IDLicensePlatePrefixSelect()
- out = u'''<select name="codes">
-<option value="A">Banten</option>
-<option value="AA">Magelang</option>
-<option value="AB">Yogyakarta</option>
-<option value="AD">Surakarta - Solo</option>
-<option value="AE">Madiun</option>
-<option value="AG">Kediri</option>
-<option value="B">Jakarta</option>
-<option value="BA">Sumatera Barat</option>
-<option value="BB">Tapanuli</option>
-<option value="BD">Bengkulu</option>
-<option value="BE" selected="selected">Lampung</option>
-<option value="BG">Sumatera Selatan</option>
-<option value="BH">Jambi</option>
-<option value="BK">Sumatera Utara</option>
-<option value="BL">Nanggroe Aceh Darussalam</option>
-<option value="BM">Riau</option>
-<option value="BN">Kepulauan Bangka Belitung</option>
-<option value="BP">Kepulauan Riau</option>
-<option value="CC">Corps Consulate</option>
-<option value="CD">Corps Diplomatic</option>
-<option value="D">Bandung</option>
-<option value="DA">Kalimantan Selatan</option>
-<option value="DB">Sulawesi Utara Daratan</option>
-<option value="DC">Sulawesi Barat</option>
-<option value="DD">Sulawesi Selatan</option>
-<option value="DE">Maluku</option>
-<option value="DG">Maluku Utara</option>
-<option value="DH">NTT - Timor</option>
-<option value="DK">Bali</option>
-<option value="DL">Sulawesi Utara Kepulauan</option>
-<option value="DM">Gorontalo</option>
-<option value="DN">Sulawesi Tengah</option>
-<option value="DR">NTB - Lombok</option>
-<option value="DS">Papua dan Papua Barat</option>
-<option value="DT">Sulawesi Tenggara</option>
-<option value="E">Cirebon</option>
-<option value="EA">NTB - Sumbawa</option>
-<option value="EB">NTT - Flores</option>
-<option value="ED">NTT - Sumba</option>
-<option value="F">Bogor</option>
-<option value="G">Pekalongan</option>
-<option value="H">Semarang</option>
-<option value="K">Pati</option>
-<option value="KB">Kalimantan Barat</option>
-<option value="KH">Kalimantan Tengah</option>
-<option value="KT">Kalimantan Timur</option>
-<option value="L">Surabaya</option>
-<option value="M">Madura</option>
-<option value="N">Malang</option>
-<option value="P">Jember</option>
-<option value="R">Banyumas</option>
-<option value="RI">Federal Government</option>
-<option value="S">Bojonegoro</option>
-<option value="T">Purwakarta</option>
-<option value="W">Sidoarjo</option>
-<option value="Z">Garut</option>
-</select>'''
- self.assertEqual(f.render('codes', 'BE'), out)
-
- def test_IDPhoneNumberField(self):
- error_invalid = [u'Enter a valid phone number']
- valid = {
- '0812-3456789': u'0812-3456789',
- '081234567890': u'081234567890',
- '021 345 6789': u'021 345 6789',
- '0213456789': u'0213456789',
- '+62-21-3456789': u'+62-21-3456789',
- '(021) 345 6789': u'(021) 345 6789',
- }
- invalid = {
- '0123456789': error_invalid,
- '+62-021-3456789': error_invalid,
- '+62-021-3456789': error_invalid,
- '+62-0812-3456789': error_invalid,
- '0812345678901': error_invalid,
- 'foo': error_invalid,
- }
- self.assertFieldOutput(IDPhoneNumberField, valid, invalid)
-
- def test_IDPostCodeField(self):
- error_invalid = [u'Enter a valid post code']
- valid = {
- '12340': u'12340',
- '25412': u'25412',
- ' 12340 ': u'12340',
- }
- invalid = {
- '12 3 4 0': error_invalid,
- '12345': error_invalid,
- '10100': error_invalid,
- '123456': error_invalid,
- 'foo': error_invalid,
- }
- self.assertFieldOutput(IDPostCodeField, valid, invalid)
-
- def test_IDNationalIdentityNumberField(self):
- error_invalid = [u'Enter a valid NIK/KTP number']
- valid = {
- ' 12.3456.010178 3456 ': u'12.3456.010178.3456',
- '1234560101783456': u'12.3456.010178.3456',
- '12.3456.010101.3456': u'12.3456.010101.3456',
- }
- invalid = {
- '12.3456.310278.3456': error_invalid,
- '00.0000.010101.0000': error_invalid,
- '1234567890123456': error_invalid,
- 'foo': error_invalid,
- }
- self.assertFieldOutput(IDNationalIdentityNumberField, valid, invalid)
-
- def test_IDLicensePlateField(self):
- error_invalid = [u'Enter a valid vehicle license plate number']
- valid = {
- ' b 1234 ab ': u'B 1234 AB',
- 'B 1234 ABC': u'B 1234 ABC',
- 'A 12': u'A 12',
- 'DK 12345 12': u'DK 12345 12',
- 'RI 10': u'RI 10',
- 'CD 12 12': u'CD 12 12',
- }
- invalid = {
- 'CD 10 12': error_invalid,
- 'CD 1234 12': error_invalid,
- 'RI 10 AB': error_invalid,
- 'B 12345 01': error_invalid,
- 'N 1234 12': error_invalid,
- 'A 12 XYZ': error_invalid,
- 'Q 1234 AB': error_invalid,
- 'foo': error_invalid,
- }
- self.assertFieldOutput(IDLicensePlateField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/ie.py b/parts/django/tests/regressiontests/forms/localflavor/ie.py
deleted file mode 100644
index fab519b..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/ie.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from django.contrib.localflavor.ie.forms import IECountySelect
-
-from utils import LocalFlavorTestCase
-
-
-class IELocalFlavorTests(LocalFlavorTestCase):
- def test_IECountySelect(self):
- f = IECountySelect()
- out = u'''<select name="counties">
-<option value="antrim">Antrim</option>
-<option value="armagh">Armagh</option>
-<option value="carlow">Carlow</option>
-<option value="cavan">Cavan</option>
-<option value="clare">Clare</option>
-<option value="cork">Cork</option>
-<option value="derry">Derry</option>
-<option value="donegal">Donegal</option>
-<option value="down">Down</option>
-<option value="dublin" selected="selected">Dublin</option>
-<option value="fermanagh">Fermanagh</option>
-<option value="galway">Galway</option>
-<option value="kerry">Kerry</option>
-<option value="kildare">Kildare</option>
-<option value="kilkenny">Kilkenny</option>
-<option value="laois">Laois</option>
-<option value="leitrim">Leitrim</option>
-<option value="limerick">Limerick</option>
-<option value="longford">Longford</option>
-<option value="louth">Louth</option>
-<option value="mayo">Mayo</option>
-<option value="meath">Meath</option>
-<option value="monaghan">Monaghan</option>
-<option value="offaly">Offaly</option>
-<option value="roscommon">Roscommon</option>
-<option value="sligo">Sligo</option>
-<option value="tipperary">Tipperary</option>
-<option value="tyrone">Tyrone</option>
-<option value="waterford">Waterford</option>
-<option value="westmeath">Westmeath</option>
-<option value="wexford">Wexford</option>
-<option value="wicklow">Wicklow</option>
-</select>'''
- self.assertEqual(f.render('counties', 'dublin'), out)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/is_.py b/parts/django/tests/regressiontests/forms/localflavor/is_.py
deleted file mode 100644
index fa6b133..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/is_.py
+++ /dev/null
@@ -1,199 +0,0 @@
-from django.contrib.localflavor.is_.forms import (ISIdNumberField,
- ISPhoneNumberField, ISPostalCodeSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class ISLocalFlavorTests(LocalFlavorTestCase):
- def test_ISPostalCodeSelect(self):
- f = ISPostalCodeSelect()
- out = u'''<select name="foo">
-<option value="101">101 Reykjav\xedk</option>
-<option value="103">103 Reykjav\xedk</option>
-<option value="104">104 Reykjav\xedk</option>
-<option value="105">105 Reykjav\xedk</option>
-<option value="107">107 Reykjav\xedk</option>
-<option value="108">108 Reykjav\xedk</option>
-<option value="109">109 Reykjav\xedk</option>
-<option value="110">110 Reykjav\xedk</option>
-<option value="111">111 Reykjav\xedk</option>
-<option value="112">112 Reykjav\xedk</option>
-<option value="113">113 Reykjav\xedk</option>
-<option value="116">116 Kjalarnes</option>
-<option value="121">121 Reykjav\xedk</option>
-<option value="123">123 Reykjav\xedk</option>
-<option value="124">124 Reykjav\xedk</option>
-<option value="125">125 Reykjav\xedk</option>
-<option value="127">127 Reykjav\xedk</option>
-<option value="128">128 Reykjav\xedk</option>
-<option value="129">129 Reykjav\xedk</option>
-<option value="130">130 Reykjav\xedk</option>
-<option value="132">132 Reykjav\xedk</option>
-<option value="150">150 Reykjav\xedk</option>
-<option value="155">155 Reykjav\xedk</option>
-<option value="170">170 Seltjarnarnes</option>
-<option value="172">172 Seltjarnarnes</option>
-<option value="190">190 Vogar</option>
-<option value="200">200 K\xf3pavogur</option>
-<option value="201">201 K\xf3pavogur</option>
-<option value="202">202 K\xf3pavogur</option>
-<option value="203">203 K\xf3pavogur</option>
-<option value="210">210 Gar\xf0ab\xe6r</option>
-<option value="212">212 Gar\xf0ab\xe6r</option>
-<option value="220">220 Hafnarfj\xf6r\xf0ur</option>
-<option value="221">221 Hafnarfj\xf6r\xf0ur</option>
-<option value="222">222 Hafnarfj\xf6r\xf0ur</option>
-<option value="225">225 \xc1lftanes</option>
-<option value="230">230 Reykjanesb\xe6r</option>
-<option value="232">232 Reykjanesb\xe6r</option>
-<option value="233">233 Reykjanesb\xe6r</option>
-<option value="235">235 Keflav\xedkurflugv\xf6llur</option>
-<option value="240">240 Grindav\xedk</option>
-<option value="245">245 Sandger\xf0i</option>
-<option value="250">250 Gar\xf0ur</option>
-<option value="260">260 Reykjanesb\xe6r</option>
-<option value="270">270 Mosfellsb\xe6r</option>
-<option value="300">300 Akranes</option>
-<option value="301">301 Akranes</option>
-<option value="302">302 Akranes</option>
-<option value="310">310 Borgarnes</option>
-<option value="311">311 Borgarnes</option>
-<option value="320">320 Reykholt \xed Borgarfir\xf0i</option>
-<option value="340">340 Stykkish\xf3lmur</option>
-<option value="345">345 Flatey \xe1 Brei\xf0afir\xf0i</option>
-<option value="350">350 Grundarfj\xf6r\xf0ur</option>
-<option value="355">355 \xd3lafsv\xedk</option>
-<option value="356">356 Sn\xe6fellsb\xe6r</option>
-<option value="360">360 Hellissandur</option>
-<option value="370">370 B\xfa\xf0ardalur</option>
-<option value="371">371 B\xfa\xf0ardalur</option>
-<option value="380">380 Reykh\xf3lahreppur</option>
-<option value="400">400 \xcdsafj\xf6r\xf0ur</option>
-<option value="401">401 \xcdsafj\xf6r\xf0ur</option>
-<option value="410">410 Hn\xedfsdalur</option>
-<option value="415">415 Bolungarv\xedk</option>
-<option value="420">420 S\xfa\xf0av\xedk</option>
-<option value="425">425 Flateyri</option>
-<option value="430">430 Su\xf0ureyri</option>
-<option value="450">450 Patreksfj\xf6r\xf0ur</option>
-<option value="451">451 Patreksfj\xf6r\xf0ur</option>
-<option value="460">460 T\xe1lknafj\xf6r\xf0ur</option>
-<option value="465">465 B\xedldudalur</option>
-<option value="470">470 \xdeingeyri</option>
-<option value="471">471 \xdeingeyri</option>
-<option value="500">500 Sta\xf0ur</option>
-<option value="510">510 H\xf3lmav\xedk</option>
-<option value="512">512 H\xf3lmav\xedk</option>
-<option value="520">520 Drangsnes</option>
-<option value="522">522 Kj\xf6rvogur</option>
-<option value="523">523 B\xe6r</option>
-<option value="524">524 Nor\xf0urfj\xf6r\xf0ur</option>
-<option value="530">530 Hvammstangi</option>
-<option value="531">531 Hvammstangi</option>
-<option value="540">540 Bl\xf6ndu\xf3s</option>
-<option value="541">541 Bl\xf6ndu\xf3s</option>
-<option value="545">545 Skagastr\xf6nd</option>
-<option value="550">550 Sau\xf0\xe1rkr\xf3kur</option>
-<option value="551">551 Sau\xf0\xe1rkr\xf3kur</option>
-<option value="560">560 Varmahl\xed\xf0</option>
-<option value="565">565 Hofs\xf3s</option>
-<option value="566">566 Hofs\xf3s</option>
-<option value="570">570 Flj\xf3t</option>
-<option value="580">580 Siglufj\xf6r\xf0ur</option>
-<option value="600">600 Akureyri</option>
-<option value="601">601 Akureyri</option>
-<option value="602">602 Akureyri</option>
-<option value="603">603 Akureyri</option>
-<option value="610">610 Greniv\xedk</option>
-<option value="611">611 Gr\xedmsey</option>
-<option value="620">620 Dalv\xedk</option>
-<option value="621">621 Dalv\xedk</option>
-<option value="625">625 \xd3lafsfj\xf6r\xf0ur</option>
-<option value="630">630 Hr\xedsey</option>
-<option value="640">640 H\xfasav\xedk</option>
-<option value="641">641 H\xfasav\xedk</option>
-<option value="645">645 Fossh\xf3ll</option>
-<option value="650">650 Laugar</option>
-<option value="660">660 M\xfdvatn</option>
-<option value="670">670 K\xf3pasker</option>
-<option value="671">671 K\xf3pasker</option>
-<option value="675">675 Raufarh\xf6fn</option>
-<option value="680">680 \xde\xf3rsh\xf6fn</option>
-<option value="681">681 \xde\xf3rsh\xf6fn</option>
-<option value="685">685 Bakkafj\xf6r\xf0ur</option>
-<option value="690">690 Vopnafj\xf6r\xf0ur</option>
-<option value="700">700 Egilssta\xf0ir</option>
-<option value="701">701 Egilssta\xf0ir</option>
-<option value="710">710 Sey\xf0isfj\xf6r\xf0ur</option>
-<option value="715">715 Mj\xf3ifj\xf6r\xf0ur</option>
-<option value="720">720 Borgarfj\xf6r\xf0ur eystri</option>
-<option value="730">730 Rey\xf0arfj\xf6r\xf0ur</option>
-<option value="735">735 Eskifj\xf6r\xf0ur</option>
-<option value="740">740 Neskaupsta\xf0ur</option>
-<option value="750">750 F\xe1skr\xfa\xf0sfj\xf6r\xf0ur</option>
-<option value="755">755 St\xf6\xf0varfj\xf6r\xf0ur</option>
-<option value="760">760 Brei\xf0dalsv\xedk</option>
-<option value="765">765 Dj\xfapivogur</option>
-<option value="780">780 H\xf6fn \xed Hornafir\xf0i</option>
-<option value="781">781 H\xf6fn \xed Hornafir\xf0i</option>
-<option value="785">785 \xd6r\xe6fi</option>
-<option value="800">800 Selfoss</option>
-<option value="801">801 Selfoss</option>
-<option value="802">802 Selfoss</option>
-<option value="810">810 Hverager\xf0i</option>
-<option value="815">815 \xdeorl\xe1ksh\xf6fn</option>
-<option value="820">820 Eyrarbakki</option>
-<option value="825">825 Stokkseyri</option>
-<option value="840">840 Laugarvatn</option>
-<option value="845">845 Fl\xfa\xf0ir</option>
-<option value="850">850 Hella</option>
-<option value="851">851 Hella</option>
-<option value="860">860 Hvolsv\xf6llur</option>
-<option value="861">861 Hvolsv\xf6llur</option>
-<option value="870">870 V\xedk</option>
-<option value="871">871 V\xedk</option>
-<option value="880">880 Kirkjub\xe6jarklaustur</option>
-<option value="900">900 Vestmannaeyjar</option>
-<option value="902">902 Vestmannaeyjar</option>
-</select>'''
- self.assertEqual(f.render('foo', 'bar'), out)
-
- def test_ISIdNumberField(self):
- error_atleast = [u'Ensure this value has at least 10 characters (it has 9).']
- error_invalid = [u'Enter a valid Icelandic identification number. The format is XXXXXX-XXXX.']
- error_atmost = [u'Ensure this value has at most 11 characters (it has 12).']
- error_notvalid = [u'The Icelandic identification number is not valid.']
- valid = {
- '2308803449': '230880-3449',
- '230880-3449': '230880-3449',
- '230880 3449': '230880-3449',
- '2308803440': '230880-3440',
- }
- invalid = {
- '230880343': error_atleast + error_invalid,
- '230880343234': error_atmost + error_invalid,
- 'abcdefghijk': error_invalid,
- '2308803439': error_notvalid,
-
- }
- self.assertFieldOutput(ISIdNumberField, valid, invalid)
-
- def test_ISPhoneNumberField(self):
- error_invalid = [u'Enter a valid value.']
- error_atleast = [u'Ensure this value has at least 7 characters (it has 6).']
- error_atmost = [u'Ensure this value has at most 8 characters (it has 9).']
- valid = {
- '1234567': '1234567',
- '123 4567': '1234567',
- '123-4567': '1234567',
- }
- invalid = {
- '123-456': error_invalid,
- '123456': error_atleast + error_invalid,
- '123456555': error_atmost + error_invalid,
- 'abcdefg': error_invalid,
- ' 1234567 ': error_atmost + error_invalid,
- ' 12367 ': error_invalid
- }
- self.assertFieldOutput(ISPhoneNumberField, valid, invalid)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/it.py b/parts/django/tests/regressiontests/forms/localflavor/it.py
deleted file mode 100644
index 7181e25..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/it.py
+++ /dev/null
@@ -1,70 +0,0 @@
-from django.contrib.localflavor.it.forms import (ITZipCodeField, ITRegionSelect,
- ITSocialSecurityNumberField, ITVatNumberField)
-
-from utils import LocalFlavorTestCase
-
-
-class ITLocalFlavorTests(LocalFlavorTestCase):
- def test_ITRegionSelect(self):
- f = ITRegionSelect()
- out = u'''<select name="regions">
-<option value="ABR">Abruzzo</option>
-<option value="BAS">Basilicata</option>
-<option value="CAL">Calabria</option>
-<option value="CAM">Campania</option>
-<option value="EMR">Emilia-Romagna</option>
-<option value="FVG">Friuli-Venezia Giulia</option>
-<option value="LAZ">Lazio</option>
-<option value="LIG">Liguria</option>
-<option value="LOM">Lombardia</option>
-<option value="MAR">Marche</option>
-<option value="MOL">Molise</option>
-<option value="PMN" selected="selected">Piemonte</option>
-<option value="PUG">Puglia</option>
-<option value="SAR">Sardegna</option>
-<option value="SIC">Sicilia</option>
-<option value="TOS">Toscana</option>
-<option value="TAA">Trentino-Alto Adige</option>
-<option value="UMB">Umbria</option>
-<option value="VAO">Valle d\u2019Aosta</option>
-<option value="VEN">Veneto</option>
-</select>'''
- self.assertEqual(f.render('regions', 'PMN'), out)
-
- def test_ITZipCodeField(self):
- error_invalid = [u'Enter a valid zip code.']
- valid = {
- '00100': '00100',
- }
- invalid = {
- ' 00100': error_invalid,
- }
- self.assertFieldOutput(ITZipCodeField, valid, invalid)
-
- def test_ITSocialSecurityNumberField(self):
- error_invalid = [u'Enter a valid Social Security number.']
- valid = {
- 'LVSGDU99T71H501L': 'LVSGDU99T71H501L',
- 'LBRRME11A01L736W': 'LBRRME11A01L736W',
- 'lbrrme11a01l736w': 'LBRRME11A01L736W',
- 'LBR RME 11A01 L736W': 'LBRRME11A01L736W',
- }
- invalid = {
- 'LBRRME11A01L736A': error_invalid,
- '%BRRME11A01L736W': error_invalid,
- }
- self.assertFieldOutput(ITSocialSecurityNumberField, valid, invalid)
-
- def test_ITVatNumberField(self):
- error_invalid = [u'Enter a valid VAT number.']
- valid = {
- '07973780013': '07973780013',
- '7973780013': '07973780013',
- 7973780013: '07973780013',
- }
- invalid = {
- '07973780014': error_invalid,
- 'A7973780013': error_invalid,
- }
- self.assertFieldOutput(ITVatNumberField, valid, invalid)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/jp.py b/parts/django/tests/regressiontests/forms/localflavor/jp.py
deleted file mode 100644
index 1f8362a..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/jp.py
+++ /dev/null
@@ -1,73 +0,0 @@
-from django.contrib.localflavor.jp.forms import (JPPostalCodeField,
- JPPrefectureSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class JPLocalFlavorTests(LocalFlavorTestCase):
- def test_JPPrefectureSelect(self):
- f = JPPrefectureSelect()
- out = u'''<select name="prefecture">
-<option value="hokkaido">Hokkaido</option>
-<option value="aomori">Aomori</option>
-<option value="iwate">Iwate</option>
-<option value="miyagi">Miyagi</option>
-<option value="akita">Akita</option>
-<option value="yamagata">Yamagata</option>
-<option value="fukushima">Fukushima</option>
-<option value="ibaraki">Ibaraki</option>
-<option value="tochigi">Tochigi</option>
-<option value="gunma">Gunma</option>
-<option value="saitama">Saitama</option>
-<option value="chiba">Chiba</option>
-<option value="tokyo">Tokyo</option>
-<option value="kanagawa" selected="selected">Kanagawa</option>
-<option value="yamanashi">Yamanashi</option>
-<option value="nagano">Nagano</option>
-<option value="niigata">Niigata</option>
-<option value="toyama">Toyama</option>
-<option value="ishikawa">Ishikawa</option>
-<option value="fukui">Fukui</option>
-<option value="gifu">Gifu</option>
-<option value="shizuoka">Shizuoka</option>
-<option value="aichi">Aichi</option>
-<option value="mie">Mie</option>
-<option value="shiga">Shiga</option>
-<option value="kyoto">Kyoto</option>
-<option value="osaka">Osaka</option>
-<option value="hyogo">Hyogo</option>
-<option value="nara">Nara</option>
-<option value="wakayama">Wakayama</option>
-<option value="tottori">Tottori</option>
-<option value="shimane">Shimane</option>
-<option value="okayama">Okayama</option>
-<option value="hiroshima">Hiroshima</option>
-<option value="yamaguchi">Yamaguchi</option>
-<option value="tokushima">Tokushima</option>
-<option value="kagawa">Kagawa</option>
-<option value="ehime">Ehime</option>
-<option value="kochi">Kochi</option>
-<option value="fukuoka">Fukuoka</option>
-<option value="saga">Saga</option>
-<option value="nagasaki">Nagasaki</option>
-<option value="kumamoto">Kumamoto</option>
-<option value="oita">Oita</option>
-<option value="miyazaki">Miyazaki</option>
-<option value="kagoshima">Kagoshima</option>
-<option value="okinawa">Okinawa</option>
-</select>'''
- self.assertEqual(f.render('prefecture', 'kanagawa'), out)
-
- def test_JPPostalCodeField(self):
- error_format = [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.']
- valid = {
- '251-0032': '2510032',
- '2510032': '2510032',
- }
- invalid = {
- '2510-032': error_format,
- '251a0032': error_format,
- 'a51-0032': error_format,
- '25100321': error_format,
- }
- self.assertFieldOutput(JPPostalCodeField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/kw.py b/parts/django/tests/regressiontests/forms/localflavor/kw.py
deleted file mode 100644
index af998bd..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/kw.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.contrib.localflavor.kw.forms import KWCivilIDNumberField
-
-from utils import LocalFlavorTestCase
-
-
-class KWLocalFlavorTests(LocalFlavorTestCase):
- def test_KWCivilIDNumberField(self):
- error_invalid = [u'Enter a valid Kuwaiti Civil ID number']
- valid = {
- '282040701483': '282040701483',
- }
- invalid = {
- '289332013455': error_invalid,
- }
- self.assertFieldOutput(KWCivilIDNumberField, valid, invalid)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/nl.py b/parts/django/tests/regressiontests/forms/localflavor/nl.py
deleted file mode 100644
index 8ef0ae9..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/nl.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from django.contrib.localflavor.nl.forms import (NLPhoneNumberField,
- NLZipCodeField, NLSoFiNumberField, NLProvinceSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class NLLocalFlavorTests(LocalFlavorTestCase):
- def test_NLProvinceSelect(self):
- f = NLProvinceSelect()
- out = u'''<select name="provinces">
-<option value="DR">Drenthe</option>
-<option value="FL">Flevoland</option>
-<option value="FR">Friesland</option>
-<option value="GL">Gelderland</option>
-<option value="GR">Groningen</option>
-<option value="LB">Limburg</option>
-<option value="NB">Noord-Brabant</option>
-<option value="NH">Noord-Holland</option>
-<option value="OV" selected="selected">Overijssel</option>
-<option value="UT">Utrecht</option>
-<option value="ZE">Zeeland</option>
-<option value="ZH">Zuid-Holland</option>
-</select>'''
- self.assertEqual(f.render('provinces', 'OV'), out)
-
- def test_NLPhoneNumberField(self):
- error_invalid = [u'Enter a valid phone number']
- valid = {
- '012-3456789': '012-3456789',
- '0123456789': '0123456789',
- '+31-12-3456789': '+31-12-3456789',
- '(0123) 456789': '(0123) 456789',
- }
- invalid = {
- 'foo': error_invalid,
- }
- self.assertFieldOutput(NLPhoneNumberField, valid, invalid)
-
- def test_NLZipCodeField(self):
- error_invalid = [u'Enter a valid postal code']
- valid = {
- '1234ab': '1234 AB',
- '1234 ab': '1234 AB',
- '1234 AB': '1234 AB',
- }
- invalid = {
- '0123AB': error_invalid,
- 'foo': error_invalid,
- }
- self.assertFieldOutput(NLZipCodeField, valid, invalid)
-
- def test_NLSoFiNumberField(self):
- error_invalid = [u'Enter a valid SoFi number']
- valid = {
- '123456782': '123456782',
- }
- invalid = {
- '000000000': error_invalid,
- '123456789': error_invalid,
- 'foo': error_invalid,
- }
- self.assertFieldOutput(NLSoFiNumberField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/pl.py b/parts/django/tests/regressiontests/forms/localflavor/pl.py
deleted file mode 100644
index 51721f8..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/pl.py
+++ /dev/null
@@ -1,462 +0,0 @@
-from django.contrib.localflavor.pl.forms import (PLProvinceSelect,
- PLCountySelect, PLPostalCodeField, PLNIPField, PLPESELField, PLREGONField)
-
-from utils import LocalFlavorTestCase
-
-
-class PLLocalFlavorTests(LocalFlavorTestCase):
- def test_PLProvinceSelect(self):
- f = PLProvinceSelect()
- out = u'''<select name="voivodeships">
-<option value="lower_silesia">Lower Silesia</option>
-<option value="kuyavia-pomerania">Kuyavia-Pomerania</option>
-<option value="lublin">Lublin</option>
-<option value="lubusz">Lubusz</option>
-<option value="lodz">Lodz</option>
-<option value="lesser_poland">Lesser Poland</option>
-<option value="masovia">Masovia</option>
-<option value="opole">Opole</option>
-<option value="subcarpatia">Subcarpatia</option>
-<option value="podlasie">Podlasie</option>
-<option value="pomerania" selected="selected">Pomerania</option>
-<option value="silesia">Silesia</option>
-<option value="swietokrzyskie">Swietokrzyskie</option>
-<option value="warmia-masuria">Warmia-Masuria</option>
-<option value="greater_poland">Greater Poland</option>
-<option value="west_pomerania">West Pomerania</option>
-</select>'''
- self.assertEqual(f.render('voivodeships', 'pomerania'), out)
-
- def test_PLCountrySelect(self):
- f = PLCountySelect()
- out = u'''<select name="administrativeunit">
-<option value="wroclaw">Wroc\u0142aw</option>
-<option value="jeleniagora">Jelenia G\xf3ra</option>
-<option value="legnica">Legnica</option>
-<option value="boleslawiecki">boles\u0142awiecki</option>
-<option value="dzierzoniowski">dzier\u017coniowski</option>
-<option value="glogowski">g\u0142ogowski</option>
-<option value="gorowski">g\xf3rowski</option>
-<option value="jaworski">jaworski</option>
-<option value="jeleniogorski">jeleniog\xf3rski</option>
-<option value="kamiennogorski">kamiennog\xf3rski</option>
-<option value="klodzki">k\u0142odzki</option>
-<option value="legnicki">legnicki</option>
-<option value="lubanski">luba\u0144ski</option>
-<option value="lubinski">lubi\u0144ski</option>
-<option value="lwowecki">lw\xf3wecki</option>
-<option value="milicki">milicki</option>
-<option value="olesnicki">ole\u015bnicki</option>
-<option value="olawski">o\u0142awski</option>
-<option value="polkowicki">polkowicki</option>
-<option value="strzelinski">strzeli\u0144ski</option>
-<option value="sredzki">\u015bredzki</option>
-<option value="swidnicki">\u015bwidnicki</option>
-<option value="trzebnicki">trzebnicki</option>
-<option value="walbrzyski">wa\u0142brzyski</option>
-<option value="wolowski">wo\u0142owski</option>
-<option value="wroclawski">wroc\u0142awski</option>
-<option value="zabkowicki">z\u0105bkowicki</option>
-<option value="zgorzelecki">zgorzelecki</option>
-<option value="zlotoryjski">z\u0142otoryjski</option>
-<option value="bydgoszcz">Bydgoszcz</option>
-<option value="torun">Toru\u0144</option>
-<option value="wloclawek">W\u0142oc\u0142awek</option>
-<option value="grudziadz">Grudzi\u0105dz</option>
-<option value="aleksandrowski">aleksandrowski</option>
-<option value="brodnicki">brodnicki</option>
-<option value="bydgoski">bydgoski</option>
-<option value="chelminski">che\u0142mi\u0144ski</option>
-<option value="golubsko-dobrzynski">golubsko-dobrzy\u0144ski</option>
-<option value="grudziadzki">grudzi\u0105dzki</option>
-<option value="inowroclawski">inowroc\u0142awski</option>
-<option value="lipnowski">lipnowski</option>
-<option value="mogilenski">mogile\u0144ski</option>
-<option value="nakielski">nakielski</option>
-<option value="radziejowski">radziejowski</option>
-<option value="rypinski">rypi\u0144ski</option>
-<option value="sepolenski">s\u0119pole\u0144ski</option>
-<option value="swiecki">\u015bwiecki</option>
-<option value="torunski">toru\u0144ski</option>
-<option value="tucholski">tucholski</option>
-<option value="wabrzeski">w\u0105brzeski</option>
-<option value="wloclawski">wroc\u0142awski</option>
-<option value="zninski">\u017ani\u0144ski</option>
-<option value="lublin">Lublin</option>
-<option value="biala-podlaska">Bia\u0142a Podlaska</option>
-<option value="chelm">Che\u0142m</option>
-<option value="zamosc">Zamo\u015b\u0107</option>
-<option value="bialski">bialski</option>
-<option value="bilgorajski">bi\u0142gorajski</option>
-<option value="chelmski">che\u0142mski</option>
-<option value="hrubieszowski">hrubieszowski</option>
-<option value="janowski">janowski</option>
-<option value="krasnostawski">krasnostawski</option>
-<option value="krasnicki">kra\u015bnicki</option>
-<option value="lubartowski">lubartowski</option>
-<option value="lubelski">lubelski</option>
-<option value="leczynski">\u0142\u0119czy\u0144ski</option>
-<option value="lukowski">\u0142ukowski</option>
-<option value="opolski">opolski</option>
-<option value="parczewski">parczewski</option>
-<option value="pulawski">pu\u0142awski</option>
-<option value="radzynski">radzy\u0144ski</option>
-<option value="rycki">rycki</option>
-<option value="swidnicki">\u015bwidnicki</option>
-<option value="tomaszowski">tomaszowski</option>
-<option value="wlodawski">w\u0142odawski</option>
-<option value="zamojski">zamojski</option>
-<option value="gorzow-wielkopolski">Gorz\xf3w Wielkopolski</option>
-<option value="zielona-gora">Zielona G\xf3ra</option>
-<option value="gorzowski">gorzowski</option>
-<option value="krosnienski">kro\u015bnie\u0144ski</option>
-<option value="miedzyrzecki">mi\u0119dzyrzecki</option>
-<option value="nowosolski">nowosolski</option>
-<option value="slubicki">s\u0142ubicki</option>
-<option value="strzelecko-drezdenecki">strzelecko-drezdenecki</option>
-<option value="sulecinski">sule\u0144ci\u0144ski</option>
-<option value="swiebodzinski">\u015bwiebodzi\u0144ski</option>
-<option value="wschowski">wschowski</option>
-<option value="zielonogorski">zielonog\xf3rski</option>
-<option value="zaganski">\u017caga\u0144ski</option>
-<option value="zarski">\u017carski</option>
-<option value="lodz">\u0141\xf3d\u017a</option>
-<option value="piotrkow-trybunalski">Piotrk\xf3w Trybunalski</option>
-<option value="skierniewice">Skierniewice</option>
-<option value="belchatowski">be\u0142chatowski</option>
-<option value="brzezinski">brzezi\u0144ski</option>
-<option value="kutnowski">kutnowski</option>
-<option value="laski">\u0142aski</option>
-<option value="leczycki">\u0142\u0119czycki</option>
-<option value="lowicki">\u0142owicki</option>
-<option value="lodzki wschodni">\u0142\xf3dzki wschodni</option>
-<option value="opoczynski">opoczy\u0144ski</option>
-<option value="pabianicki">pabianicki</option>
-<option value="pajeczanski">paj\u0119cza\u0144ski</option>
-<option value="piotrkowski">piotrkowski</option>
-<option value="poddebicki">podd\u0119bicki</option>
-<option value="radomszczanski">radomszcza\u0144ski</option>
-<option value="rawski">rawski</option>
-<option value="sieradzki">sieradzki</option>
-<option value="skierniewicki">skierniewicki</option>
-<option value="tomaszowski">tomaszowski</option>
-<option value="wielunski">wielu\u0144ski</option>
-<option value="wieruszowski">wieruszowski</option>
-<option value="zdunskowolski">zdu\u0144skowolski</option>
-<option value="zgierski">zgierski</option>
-<option value="krakow">Krak\xf3w</option>
-<option value="tarnow">Tarn\xf3w</option>
-<option value="nowy-sacz">Nowy S\u0105cz</option>
-<option value="bochenski">boche\u0144ski</option>
-<option value="brzeski">brzeski</option>
-<option value="chrzanowski">chrzanowski</option>
-<option value="dabrowski">d\u0105browski</option>
-<option value="gorlicki">gorlicki</option>
-<option value="krakowski">krakowski</option>
-<option value="limanowski">limanowski</option>
-<option value="miechowski">miechowski</option>
-<option value="myslenicki">my\u015blenicki</option>
-<option value="nowosadecki">nowos\u0105decki</option>
-<option value="nowotarski">nowotarski</option>
-<option value="olkuski">olkuski</option>
-<option value="oswiecimski">o\u015bwi\u0119cimski</option>
-<option value="proszowicki">proszowicki</option>
-<option value="suski">suski</option>
-<option value="tarnowski">tarnowski</option>
-<option value="tatrzanski">tatrza\u0144ski</option>
-<option value="wadowicki">wadowicki</option>
-<option value="wielicki">wielicki</option>
-<option value="warszawa">Warszawa</option>
-<option value="ostroleka">Ostro\u0142\u0119ka</option>
-<option value="plock">P\u0142ock</option>
-<option value="radom">Radom</option>
-<option value="siedlce">Siedlce</option>
-<option value="bialobrzeski">bia\u0142obrzeski</option>
-<option value="ciechanowski">ciechanowski</option>
-<option value="garwolinski">garwoli\u0144ski</option>
-<option value="gostyninski">gostyni\u0144ski</option>
-<option value="grodziski">grodziski</option>
-<option value="grojecki">gr\xf3jecki</option>
-<option value="kozienicki">kozenicki</option>
-<option value="legionowski">legionowski</option>
-<option value="lipski">lipski</option>
-<option value="losicki">\u0142osicki</option>
-<option value="makowski">makowski</option>
-<option value="minski">mi\u0144ski</option>
-<option value="mlawski">m\u0142awski</option>
-<option value="nowodworski">nowodworski</option>
-<option value="ostrolecki">ostro\u0142\u0119cki</option>
-<option value="ostrowski">ostrowski</option>
-<option value="otwocki">otwocki</option>
-<option value="piaseczynski">piaseczy\u0144ski</option>
-<option value="plocki">p\u0142ocki</option>
-<option value="plonski">p\u0142o\u0144ski</option>
-<option value="pruszkowski">pruszkowski</option>
-<option value="przasnyski">przasnyski</option>
-<option value="przysuski">przysuski</option>
-<option value="pultuski">pu\u0142tuski</option>
-<option value="radomski">radomski</option>
-<option value="siedlecki">siedlecki</option>
-<option value="sierpecki">sierpecki</option>
-<option value="sochaczewski">sochaczewski</option>
-<option value="sokolowski">soko\u0142owski</option>
-<option value="szydlowiecki">szyd\u0142owiecki</option>
-<option value="warszawski-zachodni">warszawski zachodni</option>
-<option value="wegrowski">w\u0119growski</option>
-<option value="wolominski">wo\u0142omi\u0144ski</option>
-<option value="wyszkowski">wyszkowski</option>
-<option value="zwolenski">zwole\u0144ski</option>
-<option value="zurominski">\u017curomi\u0144ski</option>
-<option value="zyrardowski">\u017cyrardowski</option>
-<option value="opole">Opole</option>
-<option value="brzeski">brzeski</option>
-<option value="glubczycki">g\u0142ubczyski</option>
-<option value="kedzierzynsko-kozielski">k\u0119dzierzy\u0144ski-kozielski</option>
-<option value="kluczborski">kluczborski</option>
-<option value="krapkowicki">krapkowicki</option>
-<option value="namyslowski">namys\u0142owski</option>
-<option value="nyski">nyski</option>
-<option value="oleski">oleski</option>
-<option value="opolski">opolski</option>
-<option value="prudnicki">prudnicki</option>
-<option value="strzelecki">strzelecki</option>
-<option value="rzeszow">Rzesz\xf3w</option>
-<option value="krosno">Krosno</option>
-<option value="przemysl">Przemy\u015bl</option>
-<option value="tarnobrzeg">Tarnobrzeg</option>
-<option value="bieszczadzki">bieszczadzki</option>
-<option value="brzozowski">brzozowski</option>
-<option value="debicki">d\u0119bicki</option>
-<option value="jaroslawski">jaros\u0142awski</option>
-<option value="jasielski">jasielski</option>
-<option value="kolbuszowski">kolbuszowski</option>
-<option value="krosnienski">kro\u015bnie\u0144ski</option>
-<option value="leski">leski</option>
-<option value="lezajski">le\u017cajski</option>
-<option value="lubaczowski">lubaczowski</option>
-<option value="lancucki">\u0142a\u0144cucki</option>
-<option value="mielecki">mielecki</option>
-<option value="nizanski">ni\u017ca\u0144ski</option>
-<option value="przemyski">przemyski</option>
-<option value="przeworski">przeworski</option>
-<option value="ropczycko-sedziszowski">ropczycko-s\u0119dziszowski</option>
-<option value="rzeszowski">rzeszowski</option>
-<option value="sanocki">sanocki</option>
-<option value="stalowowolski">stalowowolski</option>
-<option value="strzyzowski">strzy\u017cowski</option>
-<option value="tarnobrzeski">tarnobrzeski</option>
-<option value="bialystok">Bia\u0142ystok</option>
-<option value="lomza">\u0141om\u017ca</option>
-<option value="suwalki">Suwa\u0142ki</option>
-<option value="augustowski">augustowski</option>
-<option value="bialostocki">bia\u0142ostocki</option>
-<option value="bielski">bielski</option>
-<option value="grajewski">grajewski</option>
-<option value="hajnowski">hajnowski</option>
-<option value="kolnenski">kolne\u0144ski</option>
-<option value="\u0142omzynski">\u0142om\u017cy\u0144ski</option>
-<option value="moniecki">moniecki</option>
-<option value="sejnenski">sejne\u0144ski</option>
-<option value="siemiatycki">siematycki</option>
-<option value="sokolski">sok\xf3lski</option>
-<option value="suwalski">suwalski</option>
-<option value="wysokomazowiecki">wysokomazowiecki</option>
-<option value="zambrowski">zambrowski</option>
-<option value="gdansk">Gda\u0144sk</option>
-<option value="gdynia">Gdynia</option>
-<option value="slupsk">S\u0142upsk</option>
-<option value="sopot">Sopot</option>
-<option value="bytowski">bytowski</option>
-<option value="chojnicki">chojnicki</option>
-<option value="czluchowski">cz\u0142uchowski</option>
-<option value="kartuski">kartuski</option>
-<option value="koscierski">ko\u015bcierski</option>
-<option value="kwidzynski">kwidzy\u0144ski</option>
-<option value="leborski">l\u0119borski</option>
-<option value="malborski">malborski</option>
-<option value="nowodworski">nowodworski</option>
-<option value="gdanski">gda\u0144ski</option>
-<option value="pucki">pucki</option>
-<option value="slupski">s\u0142upski</option>
-<option value="starogardzki">starogardzki</option>
-<option value="sztumski">sztumski</option>
-<option value="tczewski">tczewski</option>
-<option value="wejherowski">wejcherowski</option>
-<option value="katowice" selected="selected">Katowice</option>
-<option value="bielsko-biala">Bielsko-Bia\u0142a</option>
-<option value="bytom">Bytom</option>
-<option value="chorzow">Chorz\xf3w</option>
-<option value="czestochowa">Cz\u0119stochowa</option>
-<option value="dabrowa-gornicza">D\u0105browa G\xf3rnicza</option>
-<option value="gliwice">Gliwice</option>
-<option value="jastrzebie-zdroj">Jastrz\u0119bie Zdr\xf3j</option>
-<option value="jaworzno">Jaworzno</option>
-<option value="myslowice">Mys\u0142owice</option>
-<option value="piekary-slaskie">Piekary \u015al\u0105skie</option>
-<option value="ruda-slaska">Ruda \u015al\u0105ska</option>
-<option value="rybnik">Rybnik</option>
-<option value="siemianowice-slaskie">Siemianowice \u015al\u0105skie</option>
-<option value="sosnowiec">Sosnowiec</option>
-<option value="swietochlowice">\u015awi\u0119toch\u0142owice</option>
-<option value="tychy">Tychy</option>
-<option value="zabrze">Zabrze</option>
-<option value="zory">\u017bory</option>
-<option value="bedzinski">b\u0119dzi\u0144ski</option>
-<option value="bielski">bielski</option>
-<option value="bierunsko-ledzinski">bieru\u0144sko-l\u0119dzi\u0144ski</option>
-<option value="cieszynski">cieszy\u0144ski</option>
-<option value="czestochowski">cz\u0119stochowski</option>
-<option value="gliwicki">gliwicki</option>
-<option value="klobucki">k\u0142obucki</option>
-<option value="lubliniecki">lubliniecki</option>
-<option value="mikolowski">miko\u0142owski</option>
-<option value="myszkowski">myszkowski</option>
-<option value="pszczynski">pszczy\u0144ski</option>
-<option value="raciborski">raciborski</option>
-<option value="rybnicki">rybnicki</option>
-<option value="tarnogorski">tarnog\xf3rski</option>
-<option value="wodzislawski">wodzis\u0142awski</option>
-<option value="zawiercianski">zawiercia\u0144ski</option>
-<option value="zywiecki">\u017cywiecki</option>
-<option value="kielce">Kielce</option>
-<option value="buski">buski</option>
-<option value="jedrzejowski">j\u0119drzejowski</option>
-<option value="kazimierski">kazimierski</option>
-<option value="kielecki">kielecki</option>
-<option value="konecki">konecki</option>
-<option value="opatowski">opatowski</option>
-<option value="ostrowiecki">ostrowiecki</option>
-<option value="pinczowski">pi\u0144czowski</option>
-<option value="sandomierski">sandomierski</option>
-<option value="skarzyski">skar\u017cyski</option>
-<option value="starachowicki">starachowicki</option>
-<option value="staszowski">staszowski</option>
-<option value="wloszczowski">w\u0142oszczowski</option>
-<option value="olsztyn">Olsztyn</option>
-<option value="elblag">Elbl\u0105g</option>
-<option value="bartoszycki">bartoszycki</option>
-<option value="braniewski">braniewski</option>
-<option value="dzialdowski">dzia\u0142dowski</option>
-<option value="elblaski">elbl\u0105ski</option>
-<option value="elcki">e\u0142cki</option>
-<option value="gizycki">gi\u017cycki</option>
-<option value="goldapski">go\u0142dapski</option>
-<option value="ilawski">i\u0142awski</option>
-<option value="ketrzynski">k\u0119trzy\u0144ski</option>
-<option value="lidzbarski">lidzbarski</option>
-<option value="mragowski">mr\u0105gowski</option>
-<option value="nidzicki">nidzicki</option>
-<option value="nowomiejski">nowomiejski</option>
-<option value="olecki">olecki</option>
-<option value="olsztynski">olszty\u0144ski</option>
-<option value="ostrodzki">ostr\xf3dzki</option>
-<option value="piski">piski</option>
-<option value="szczycienski">szczycie\u0144ski</option>
-<option value="wegorzewski">w\u0119gorzewski</option>
-<option value="poznan">Pozna\u0144</option>
-<option value="kalisz">Kalisz</option>
-<option value="konin">Konin</option>
-<option value="leszno">Leszno</option>
-<option value="chodzieski">chodziejski</option>
-<option value="czarnkowsko-trzcianecki">czarnkowsko-trzcianecki</option>
-<option value="gnieznienski">gnie\u017anie\u0144ski</option>
-<option value="gostynski">gosty\u0144ski</option>
-<option value="grodziski">grodziski</option>
-<option value="jarocinski">jaroci\u0144ski</option>
-<option value="kaliski">kaliski</option>
-<option value="kepinski">k\u0119pi\u0144ski</option>
-<option value="kolski">kolski</option>
-<option value="koninski">koni\u0144ski</option>
-<option value="koscianski">ko\u015bcia\u0144ski</option>
-<option value="krotoszynski">krotoszy\u0144ski</option>
-<option value="leszczynski">leszczy\u0144ski</option>
-<option value="miedzychodzki">mi\u0119dzychodzki</option>
-<option value="nowotomyski">nowotomyski</option>
-<option value="obornicki">obornicki</option>
-<option value="ostrowski">ostrowski</option>
-<option value="ostrzeszowski">ostrzeszowski</option>
-<option value="pilski">pilski</option>
-<option value="pleszewski">pleszewski</option>
-<option value="poznanski">pozna\u0144ski</option>
-<option value="rawicki">rawicki</option>
-<option value="slupecki">s\u0142upecki</option>
-<option value="szamotulski">szamotulski</option>
-<option value="sredzki">\u015bredzki</option>
-<option value="sremski">\u015bremski</option>
-<option value="turecki">turecki</option>
-<option value="wagrowiecki">w\u0105growiecki</option>
-<option value="wolsztynski">wolszty\u0144ski</option>
-<option value="wrzesinski">wrzesi\u0144ski</option>
-<option value="zlotowski">z\u0142otowski</option>
-<option value="bialogardzki">bia\u0142ogardzki</option>
-<option value="choszczenski">choszcze\u0144ski</option>
-<option value="drawski">drawski</option>
-<option value="goleniowski">goleniowski</option>
-<option value="gryficki">gryficki</option>
-<option value="gryfinski">gryfi\u0144ski</option>
-<option value="kamienski">kamie\u0144ski</option>
-<option value="kolobrzeski">ko\u0142obrzeski</option>
-<option value="koszalinski">koszali\u0144ski</option>
-<option value="lobeski">\u0142obeski</option>
-<option value="mysliborski">my\u015bliborski</option>
-<option value="policki">policki</option>
-<option value="pyrzycki">pyrzycki</option>
-<option value="slawienski">s\u0142awie\u0144ski</option>
-<option value="stargardzki">stargardzki</option>
-<option value="szczecinecki">szczecinecki</option>
-<option value="swidwinski">\u015bwidwi\u0144ski</option>
-<option value="walecki">wa\u0142ecki</option>
-</select>'''
- self.assertEqual(f.render('administrativeunit', 'katowice'), out)
-
- def test_PLPostalCodeField(self):
- error_format = [u'Enter a postal code in the format XX-XXX.']
- valid = {
- '41-403': '41-403',
- }
- invalid = {
- '43--434': error_format,
- }
- self.assertFieldOutput(PLPostalCodeField, valid, invalid)
-
- def test_PLNIPField(self):
- error_format = [u'Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX.']
- error_checksum = [u'Wrong checksum for the Tax Number (NIP).']
- valid = {
- '64-62-414-124': '6462414124',
- '646-241-41-24': '6462414124',
- }
- invalid = {
- '43-343-234-323': error_format,
- '646-241-41-23': error_checksum,
- }
- self.assertFieldOutput(PLNIPField, valid, invalid)
-
- def test_PLPESELField(self):
- error_checksum = [u'Wrong checksum for the National Identification Number.']
- error_format = [u'National Identification Number consists of 11 digits.']
- valid = {
- '80071610614': '80071610614',
- }
- invalid = {
- '80071610610': error_checksum,
- '80': error_format,
- '800716106AA': error_format,
- }
- self.assertFieldOutput(PLPESELField, valid, invalid)
-
- def test_PLREGONField(self):
- error_checksum = [u'Wrong checksum for the National Business Register Number (REGON).']
- error_format = [u'National Business Register Number (REGON) consists of 9 or 14 digits.']
- valid = {
- '12345678512347': '12345678512347',
- '590096454': '590096454',
- }
- invalid = {
- '123456784': error_checksum,
- '12345678412342': error_checksum,
- '590096453': error_checksum,
- '590096': error_format,
- }
- self.assertFieldOutput(PLREGONField, valid, invalid)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/pt.py b/parts/django/tests/regressiontests/forms/localflavor/pt.py
deleted file mode 100644
index b8d784a..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/pt.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from django.contrib.localflavor.pt.forms import PTZipCodeField, PTPhoneNumberField
-
-from utils import LocalFlavorTestCase
-
-
-class PTLocalFlavorTests(LocalFlavorTestCase):
- def test_PTZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXX-XXX.']
- valid = {
- '3030-034': '3030-034',
- '1003456': '1003-456',
- }
- invalid = {
- '2A200': error_format,
- '980001': error_format,
- }
- self.assertFieldOutput(PTZipCodeField, valid, invalid)
-
- def test_PTPhoneNumberField(self):
- error_format = [u'Phone numbers must have 9 digits, or start by + or 00.']
- valid = {
- '917845189': '917845189',
- '91 784 5189': '917845189',
- '91 784 5189': '917845189',
- '+351 91 111': '+35191111',
- '00351873': '00351873',
- }
- invalid = {
- '91 784 51 8': error_format,
- '091 456 987 1': error_format,
- }
- self.assertFieldOutput(PTPhoneNumberField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/ro.py b/parts/django/tests/regressiontests/forms/localflavor/ro.py
deleted file mode 100644
index c3dd403..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/ro.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.contrib.localflavor.ro.forms import (ROCIFField, ROCNPField,
- ROCountyField, ROCountySelect, ROIBANField, ROPhoneNumberField,
- ROPostalCodeField)
-
-from utils import LocalFlavorTestCase
-
-
-class ROLocalFlavorTests(LocalFlavorTestCase):
- def test_ROCountySelect(self):
- f = ROCountySelect()
- out = u'''<select name="county">
-<option value="AB">Alba</option>
-<option value="AR">Arad</option>
-<option value="AG">Arge\u015f</option>
-<option value="BC">Bac\u0103u</option>
-<option value="BH">Bihor</option>
-<option value="BN">Bistri\u0163a-N\u0103s\u0103ud</option>
-<option value="BT">Boto\u015fani</option>
-<option value="BV">Bra\u015fov</option>
-<option value="BR">Br\u0103ila</option>
-<option value="B">Bucure\u015fti</option>
-<option value="BZ">Buz\u0103u</option>
-<option value="CS">Cara\u015f-Severin</option>
-<option value="CL">C\u0103l\u0103ra\u015fi</option>
-<option value="CJ" selected="selected">Cluj</option>
-<option value="CT">Constan\u0163a</option>
-<option value="CV">Covasna</option>
-<option value="DB">D\xe2mbovi\u0163a</option>
-<option value="DJ">Dolj</option>
-<option value="GL">Gala\u0163i</option>
-<option value="GR">Giurgiu</option>
-<option value="GJ">Gorj</option>
-<option value="HR">Harghita</option>
-<option value="HD">Hunedoara</option>
-<option value="IL">Ialomi\u0163a</option>
-<option value="IS">Ia\u015fi</option>
-<option value="IF">Ilfov</option>
-<option value="MM">Maramure\u015f</option>
-<option value="MH">Mehedin\u0163i</option>
-<option value="MS">Mure\u015f</option>
-<option value="NT">Neam\u0163</option>
-<option value="OT">Olt</option>
-<option value="PH">Prahova</option>
-<option value="SM">Satu Mare</option>
-<option value="SJ">S\u0103laj</option>
-<option value="SB">Sibiu</option>
-<option value="SV">Suceava</option>
-<option value="TR">Teleorman</option>
-<option value="TM">Timi\u015f</option>
-<option value="TL">Tulcea</option>
-<option value="VS">Vaslui</option>
-<option value="VL">V\xe2lcea</option>
-<option value="VN">Vrancea</option>
-</select>'''
- self.assertEqual(f.render('county', 'CJ'), out)
-
- def test_ROCIFField(self):
- error_invalid = [u'Enter a valid CIF.']
- error_atmost = [u'Ensure this value has at most 10 characters (it has 11).']
- error_atleast = [u'Ensure this value has at least 2 characters (it has 1).']
- valid = {
- '21694681': u'21694681',
- 'RO21694681': u'21694681',
- }
- invalid = {
- '21694680': error_invalid,
- '21694680000': error_atmost,
- '0': error_atleast + error_invalid,
- }
- self.assertFieldOutput(ROCIFField, valid, invalid)
-
- def test_ROCNPField(self):
- error_invalid = [u'Enter a valid CNP.']
- error_atleast = [u'Ensure this value has at least 13 characters (it has 10).']
- error_atmost = [u'Ensure this value has at most 13 characters (it has 14).']
- valid = {
- '1981211204489': '1981211204489',
- }
- invalid = {
- '1981211204487': error_invalid,
- '1981232204489': error_invalid,
- '9981211204489': error_invalid,
- '9981211209': error_atleast + error_invalid,
- '19812112044891': error_atmost,
- }
- self.assertFieldOutput(ROCNPField, valid, invalid)
-
- def test_ROCountyField(self):
- error_format = [u'Enter a Romanian county code or name.']
- valid = {
- 'CJ': 'CJ',
- 'cj': 'CJ',
- u'Argeş': 'AG',
- u'argeş': 'AG',
- }
- invalid = {
- 'Arges': error_format,
- }
- self.assertFieldOutput(ROCountyField, valid, invalid)
-
- def test_ROIBANField(self):
- error_invalid = [u'Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format']
- error_atleast = [u'Ensure this value has at least 24 characters (it has 23).']
- valid = {
- 'RO56RZBR0000060003291177': 'RO56RZBR0000060003291177',
- 'RO56-RZBR-0000-0600-0329-1177': 'RO56RZBR0000060003291177',
- }
- invalid = {
- 'RO56RZBR0000060003291176': error_invalid,
- 'AT61 1904 3002 3457 3201': error_invalid,
- 'RO56RZBR000006000329117': error_atleast + error_invalid,
- }
- self.assertFieldOutput(ROIBANField, valid, invalid)
-
- def test_ROPhoneNumberField(self):
- error_format = [u'Phone numbers must be in XXXX-XXXXXX format.']
- error_atleast = [u'Ensure this value has at least 10 characters (it has 9).']
- valid = {
- '0264485936': '0264485936',
- '(0264)-485936': '0264485936',
- }
- invalid = {
- '02644859368': error_format,
- '026448593': error_atleast + error_format
- ,
- }
- self.assertFieldOutput(ROPhoneNumberField, valid, invalid)
-
- def test_ROPostalCodeField(self):
- error_atleast = [u'Ensure this value has at least 6 characters (it has 5).']
- error_atmost = [u'Ensure this value has at most 6 characters (it has 7).']
- error_invalid = [u'Enter a valid postal code in the format XXXXXX']
-
- valid = {
- '400473': '400473',
- }
- invalid = {
- '40047': error_atleast + error_invalid,
- '4004731': error_atmost + error_invalid,
- }
- self.assertFieldOutput(ROPostalCodeField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/se.py b/parts/django/tests/regressiontests/forms/localflavor/se.py
deleted file mode 100644
index 316a612..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/se.py
+++ /dev/null
@@ -1,331 +0,0 @@
-# -*- coding: utf-8 -*-
-# Tests for the contrib/localflavor/se form fields.
-
-tests = r"""
-# Monkey-patch datetime.date
->>> import datetime
->>> class MockDate(datetime.date):
-... def today(cls):
-... return datetime.date(2008, 5, 14)
-... today = classmethod(today)
-...
->>> olddate = datetime.date
->>> datetime.date = MockDate
->>> datetime.date.today() == olddate(2008, 5, 14)
-True
-
-# SECountySelect #####################################################
->>> from django.contrib.localflavor.se.forms import SECountySelect
-
->>> w = SECountySelect()
->>> w.render('swedish_county', 'E')
-u'<select name="swedish_county">\n<option value="AB">Stockholm</option>\n<option value="AC">V\xe4sterbotten</option>\n<option value="BD">Norrbotten</option>\n<option value="C">Uppsala</option>\n<option value="D">S\xf6dermanland</option>\n<option value="E" selected="selected">\xd6sterg\xf6tland</option>\n<option value="F">J\xf6nk\xf6ping</option>\n<option value="G">Kronoberg</option>\n<option value="H">Kalmar</option>\n<option value="I">Gotland</option>\n<option value="K">Blekinge</option>\n<option value="M">Sk\xe5ne</option>\n<option value="N">Halland</option>\n<option value="O">V\xe4stra G\xf6taland</option>\n<option value="S">V\xe4rmland</option>\n<option value="T">\xd6rebro</option>\n<option value="U">V\xe4stmanland</option>\n<option value="W">Dalarna</option>\n<option value="X">G\xe4vleborg</option>\n<option value="Y">V\xe4sternorrland</option>\n<option value="Z">J\xe4mtland</option>\n</select>'
-
-# SEOrganisationNumberField #######################################
-
->>> from django.contrib.localflavor.se.forms import SEOrganisationNumberField
-
->>> f = SEOrganisationNumberField()
-
-# Ordinary personal identity numbers for sole proprietors
-# The same rules as for SEPersonalIdentityField applies here
->>> f.clean('870512-1989')
-u'198705121989'
->>> f.clean('19870512-1989')
-u'198705121989'
->>> f.clean('870512-2128')
-u'198705122128'
->>> f.clean('081015-6315')
-u'190810156315'
->>> f.clean('081015+6315')
-u'180810156315'
->>> f.clean('0810156315')
-u'190810156315'
-
->>> f.clean('081015 6315')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
->>> f.clean('950231-4496')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
->>> f.clean('6914104499')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
->>> f.clean('950d314496')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
->>> f.clean('invalid!!!')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
->>> f.clean('870514-1111')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
-
-
-# Empty values
->>> f.clean('')
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
-
->>> f.clean(None)
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
-
-# Co-ordination number checking
-# Co-ordination numbers are not valid organisation numbers
->>> f.clean('870574-1315')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
-
->>> f.clean('870573-1311')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
-
-# Test some different organisation numbers
->>> f.clean('556074-7569') # IKEA Linköping
-u'5560747569'
-
->>> f.clean('556074-3089') # Volvo Personvagnar
-u'5560743089'
-
->>> f.clean('822001-5476') # LJS (organisation)
-u'8220015476'
-
->>> f.clean('8220015476') # LJS (organisation)
-u'8220015476'
-
->>> f.clean('2120000449') # Katedralskolan Linköping (school)
-u'2120000449'
-
-# Faux organisation number, which tests that the checksum can be 0
->>> f.clean('232518-5060')
-u'2325185060'
-
->>> f.clean('556074+3089') # Volvo Personvagnar, bad format
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
-
-
-# Invalid checksum
->>> f.clean('2120000441')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
-
-# Valid checksum but invalid organisation type
-f.clean('1120000441')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish organisation number.']
-
-# Empty values with required=False
->>> f = SEOrganisationNumberField(required=False)
-
->>> f.clean(None)
-u''
-
->>> f.clean('')
-u''
-
-
-# SEPersonalIdentityNumberField #######################################
-
->>> from django.contrib.localflavor.se.forms import SEPersonalIdentityNumberField
-
->>> f = SEPersonalIdentityNumberField()
-
-# Valid id numbers
->>> f.clean('870512-1989')
-u'198705121989'
-
->>> f.clean('870512-2128')
-u'198705122128'
-
->>> f.clean('19870512-1989')
-u'198705121989'
-
->>> f.clean('198705121989')
-u'198705121989'
-
->>> f.clean('081015-6315')
-u'190810156315'
-
->>> f.clean('0810156315')
-u'190810156315'
-
-# This is a "special-case" in the checksum calculation,
-# where the sum is divisible by 10 (the checksum digit == 0)
->>> f.clean('8705141060')
-u'198705141060'
-
-# + means that the person is older than 100 years
->>> f.clean('081015+6315')
-u'180810156315'
-
-# Bogus values
->>> f.clean('081015 6315')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
->>> f.clean('950d314496')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
->>> f.clean('invalid!!!')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
-
-# Invalid dates
-
-# February 31st does not exist
->>> f.clean('950231-4496')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
-# Month 14 does not exist
->>> f.clean('6914104499')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
-# There are no Swedish personal id numbers where year < 1800
->>> f.clean('17430309-7135')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
-# Invalid checksum
->>> f.clean('870514-1111')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
-# Empty values
->>> f.clean('')
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
-
->>> f.clean(None)
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
-
-# Co-ordination number checking
->>> f.clean('870574-1315')
-u'198705741315'
-
->>> f.clean('870574+1315')
-u'188705741315'
-
->>> f.clean('198705741315')
-u'198705741315'
-
-# Co-ordination number with bad checksum
->>> f.clean('870573-1311')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
-
-# Check valid co-ordination numbers, that should not be accepted
-# because of coordination_number=False
->>> f = SEPersonalIdentityNumberField(coordination_number=False)
-
->>> f.clean('870574-1315')
-Traceback (most recent call last):
-...
-ValidationError: [u'Co-ordination numbers are not allowed.']
-
->>> f.clean('870574+1315')
-Traceback (most recent call last):
-...
-ValidationError: [u'Co-ordination numbers are not allowed.']
-
->>> f.clean('8705741315')
-Traceback (most recent call last):
-...
-ValidationError: [u'Co-ordination numbers are not allowed.']
-
-# Invalid co-ordination numbers should be treated as invalid, and not
-# as co-ordination numbers
->>> f.clean('870573-1311')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid Swedish personal identity number.']
-
-# Empty values with required=False
->>> f = SEPersonalIdentityNumberField(required=False)
-
->>> f.clean(None)
-u''
-
->>> f.clean('')
-u''
-
-# SEPostalCodeField ###############################################
->>> from django.contrib.localflavor.se.forms import SEPostalCodeField
->>> f = SEPostalCodeField()
->>>
-Postal codes can have spaces
->>> f.clean('589 37')
-u'58937'
-
-... but the dont have to
->>> f.clean('58937')
-u'58937'
->>> f.clean('abcasfassadf')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a Swedish postal code in the format XXXXX.']
-
-# Only one space is allowed for separation
->>> f.clean('589 37')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a Swedish postal code in the format XXXXX.']
-
-# The postal code must not start with 0
->>> f.clean('01234')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a Swedish postal code in the format XXXXX.']
-
-# Empty values
->>> f.clean('')
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
-
->>> f.clean(None)
-Traceback (most recent call last):
-...
-ValidationError: [u'This field is required.']
-
-# Empty values, required=False
->>> f = SEPostalCodeField(required=False)
->>> f.clean('')
-u''
->>> f.clean(None)
-u''
-
-# Revert the monkey patching
->>> datetime.date = olddate
-
-"""
diff --git a/parts/django/tests/regressiontests/forms/localflavor/sk.py b/parts/django/tests/regressiontests/forms/localflavor/sk.py
deleted file mode 100644
index a5bed6f..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/sk.py
+++ /dev/null
@@ -1,116 +0,0 @@
-from django.contrib.localflavor.sk.forms import (SKRegionSelect,
- SKPostalCodeField, SKDistrictSelect)
-
-from utils import LocalFlavorTestCase
-
-
-class SKLocalFlavorTests(LocalFlavorTestCase):
- def test_SKRegionSelect(self):
- f = SKRegionSelect()
- out = u'''<select name="regions">
-<option value="BB">Banska Bystrica region</option>
-<option value="BA">Bratislava region</option>
-<option value="KE">Kosice region</option>
-<option value="NR">Nitra region</option>
-<option value="PO">Presov region</option>
-<option value="TN">Trencin region</option>
-<option value="TT" selected="selected">Trnava region</option>
-<option value="ZA">Zilina region</option>
-</select>'''
- self.assertEqual(f.render('regions', 'TT'), out)
-
- def test_SKDistrictSelect(self):
- f = SKDistrictSelect()
- out = u'''<select name="Districts">
-<option value="BB">Banska Bystrica</option>
-<option value="BS">Banska Stiavnica</option>
-<option value="BJ">Bardejov</option>
-<option value="BN">Banovce nad Bebravou</option>
-<option value="BR">Brezno</option>
-<option value="BA1">Bratislava I</option>
-<option value="BA2">Bratislava II</option>
-<option value="BA3">Bratislava III</option>
-<option value="BA4">Bratislava IV</option>
-<option value="BA5">Bratislava V</option>
-<option value="BY">Bytca</option>
-<option value="CA">Cadca</option>
-<option value="DT">Detva</option>
-<option value="DK">Dolny Kubin</option>
-<option value="DS">Dunajska Streda</option>
-<option value="GA">Galanta</option>
-<option value="GL">Gelnica</option>
-<option value="HC">Hlohovec</option>
-<option value="HE">Humenne</option>
-<option value="IL">Ilava</option>
-<option value="KK">Kezmarok</option>
-<option value="KN">Komarno</option>
-<option value="KE1">Kosice I</option>
-<option value="KE2">Kosice II</option>
-<option value="KE3">Kosice III</option>
-<option value="KE4">Kosice IV</option>
-<option value="KEO">Kosice - okolie</option>
-<option value="KA">Krupina</option>
-<option value="KM">Kysucke Nove Mesto</option>
-<option value="LV">Levice</option>
-<option value="LE">Levoca</option>
-<option value="LM">Liptovsky Mikulas</option>
-<option value="LC">Lucenec</option>
-<option value="MA">Malacky</option>
-<option value="MT">Martin</option>
-<option value="ML">Medzilaborce</option>
-<option value="MI">Michalovce</option>
-<option value="MY">Myjava</option>
-<option value="NO">Namestovo</option>
-<option value="NR">Nitra</option>
-<option value="NM">Nove Mesto nad Vahom</option>
-<option value="NZ">Nove Zamky</option>
-<option value="PE">Partizanske</option>
-<option value="PK">Pezinok</option>
-<option value="PN">Piestany</option>
-<option value="PT">Poltar</option>
-<option value="PP">Poprad</option>
-<option value="PB">Povazska Bystrica</option>
-<option value="PO">Presov</option>
-<option value="PD">Prievidza</option>
-<option value="PU">Puchov</option>
-<option value="RA">Revuca</option>
-<option value="RS">Rimavska Sobota</option>
-<option value="RV">Roznava</option>
-<option value="RK" selected="selected">Ruzomberok</option>
-<option value="SB">Sabinov</option>
-<option value="SC">Senec</option>
-<option value="SE">Senica</option>
-<option value="SI">Skalica</option>
-<option value="SV">Snina</option>
-<option value="SO">Sobrance</option>
-<option value="SN">Spisska Nova Ves</option>
-<option value="SL">Stara Lubovna</option>
-<option value="SP">Stropkov</option>
-<option value="SK">Svidnik</option>
-<option value="SA">Sala</option>
-<option value="TO">Topolcany</option>
-<option value="TV">Trebisov</option>
-<option value="TN">Trencin</option>
-<option value="TT">Trnava</option>
-<option value="TR">Turcianske Teplice</option>
-<option value="TS">Tvrdosin</option>
-<option value="VK">Velky Krtis</option>
-<option value="VT">Vranov nad Toplou</option>
-<option value="ZM">Zlate Moravce</option>
-<option value="ZV">Zvolen</option>
-<option value="ZC">Zarnovica</option>
-<option value="ZH">Ziar nad Hronom</option>
-<option value="ZA">Zilina</option>
-</select>'''
- self.assertEqual(f.render('Districts', 'RK'), out)
-
- def test_SKPostalCodeField(self):
- error_format = [u'Enter a postal code in the format XXXXX or XXX XX.']
- valid = {
- '91909': '91909',
- '917 01': '91701',
- }
- invalid = {
- '84545x': error_format,
- }
- self.assertFieldOutput(SKPostalCodeField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/uk.py b/parts/django/tests/regressiontests/forms/localflavor/uk.py
deleted file mode 100644
index 6fd536f..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/uk.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from django.contrib.localflavor.uk.forms import UKPostcodeField
-
-from utils import LocalFlavorTestCase
-
-
-class UKLocalFlavorTests(LocalFlavorTestCase):
- def test_UKPostcodeField(self):
- error_invalid = [u'Enter a valid postcode.']
- valid = {
- 'BT32 4PX': 'BT32 4PX',
- 'GIR 0AA': 'GIR 0AA',
- 'BT324PX': 'BT32 4PX',
- ' so11aa ': 'SO1 1AA',
- ' so1 1aa ': 'SO1 1AA',
- 'G2 3wt': 'G2 3WT',
- 'EC1A 1BB': 'EC1A 1BB',
- 'Ec1a1BB': 'EC1A 1BB',
- }
- invalid = {
- '1NV 4L1D': error_invalid,
- '1NV4L1D': error_invalid,
- ' b0gUS': error_invalid,
- }
- self.assertFieldOutput(UKPostcodeField, valid, invalid)
- valid = {}
- invalid = {
- '1NV 4L1D': [u'Enter a bloody postcode!'],
- }
- kwargs = {'error_messages': {'invalid': 'Enter a bloody postcode!'}}
- self.assertFieldOutput(UKPostcodeField, valid, invalid, field_kwargs=kwargs)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/us.py b/parts/django/tests/regressiontests/forms/localflavor/us.py
deleted file mode 100644
index 65dd1bb..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/us.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from django.contrib.localflavor.us.forms import (USZipCodeField,
- USPhoneNumberField, USStateField, USStateSelect, USSocialSecurityNumberField)
-
-from utils import LocalFlavorTestCase
-
-
-class USLocalFlavorTests(LocalFlavorTestCase):
- def test_USStateSelect(self):
- f = USStateSelect()
- out = u'''<select name="state">
-<option value="AL">Alabama</option>
-<option value="AK">Alaska</option>
-<option value="AS">American Samoa</option>
-<option value="AZ">Arizona</option>
-<option value="AR">Arkansas</option>
-<option value="CA">California</option>
-<option value="CO">Colorado</option>
-<option value="CT">Connecticut</option>
-<option value="DE">Delaware</option>
-<option value="DC">District of Columbia</option>
-<option value="FL">Florida</option>
-<option value="GA">Georgia</option>
-<option value="GU">Guam</option>
-<option value="HI">Hawaii</option>
-<option value="ID">Idaho</option>
-<option value="IL" selected="selected">Illinois</option>
-<option value="IN">Indiana</option>
-<option value="IA">Iowa</option>
-<option value="KS">Kansas</option>
-<option value="KY">Kentucky</option>
-<option value="LA">Louisiana</option>
-<option value="ME">Maine</option>
-<option value="MD">Maryland</option>
-<option value="MA">Massachusetts</option>
-<option value="MI">Michigan</option>
-<option value="MN">Minnesota</option>
-<option value="MS">Mississippi</option>
-<option value="MO">Missouri</option>
-<option value="MT">Montana</option>
-<option value="NE">Nebraska</option>
-<option value="NV">Nevada</option>
-<option value="NH">New Hampshire</option>
-<option value="NJ">New Jersey</option>
-<option value="NM">New Mexico</option>
-<option value="NY">New York</option>
-<option value="NC">North Carolina</option>
-<option value="ND">North Dakota</option>
-<option value="MP">Northern Mariana Islands</option>
-<option value="OH">Ohio</option>
-<option value="OK">Oklahoma</option>
-<option value="OR">Oregon</option>
-<option value="PA">Pennsylvania</option>
-<option value="PR">Puerto Rico</option>
-<option value="RI">Rhode Island</option>
-<option value="SC">South Carolina</option>
-<option value="SD">South Dakota</option>
-<option value="TN">Tennessee</option>
-<option value="TX">Texas</option>
-<option value="UT">Utah</option>
-<option value="VT">Vermont</option>
-<option value="VI">Virgin Islands</option>
-<option value="VA">Virginia</option>
-<option value="WA">Washington</option>
-<option value="WV">West Virginia</option>
-<option value="WI">Wisconsin</option>
-<option value="WY">Wyoming</option>
-</select>'''
- self.assertEquals(f.render('state', 'IL'), out)
-
- def test_USZipCodeField(self):
- error_format = [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
- valid = {
- '60606': '60606',
- 60606: '60606',
- '04000': '04000',
- '60606-1234': '60606-1234',
- }
- invalid = {
- '4000': error_format,
- '6060-1234': error_format,
- '60606-': error_format,
- }
- self.assertFieldOutput(USZipCodeField, valid, invalid)
-
- def test_USPhoneNumberField(self):
- error_format = [u'Phone numbers must be in XXX-XXX-XXXX format.']
- valid = {
- '312-555-1212': '312-555-1212',
- '3125551212': '312-555-1212',
- '312 555-1212': '312-555-1212',
- '(312) 555-1212': '312-555-1212',
- '312 555 1212': '312-555-1212',
- '312.555.1212': '312-555-1212',
- '312.555-1212': '312-555-1212',
- ' (312) 555.1212 ': '312-555-1212',
- }
- invalid = {
- '555-1212': error_format,
- '312-55-1212': error_format,
- }
- self.assertFieldOutput(USPhoneNumberField, valid, invalid)
-
- def test_USStateField(self):
- error_invalid = [u'Enter a U.S. state or territory.']
- valid = {
- 'il': 'IL',
- 'IL': 'IL',
- 'illinois': 'IL',
- ' illinois ': 'IL',
- }
- invalid = {
- 60606: error_invalid,
- }
- self.assertFieldOutput(USStateField, valid, invalid)
-
- def test_USSocialSecurityNumberField(self):
- error_invalid = [u'Enter a valid U.S. Social Security number in XXX-XX-XXXX format.']
-
- valid = {
- '987-65-4330': '987-65-4330',
- '987654330': '987-65-4330',
- }
- invalid = {
- '078-05-1120': error_invalid,
- }
- self.assertFieldOutput(USSocialSecurityNumberField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/utils.py b/parts/django/tests/regressiontests/forms/localflavor/utils.py
deleted file mode 100644
index a10258f..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/utils.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from unittest import TestCase
-
-from django.core.exceptions import ValidationError
-from django.core.validators import EMPTY_VALUES
-
-
-class LocalFlavorTestCase(TestCase):
- def assertFieldOutput(self, fieldclass, valid, invalid, field_args=[],
- field_kwargs={}, empty_value=u''):
- """Asserts that a field behaves correctly with various inputs.
-
- Args:
- fieldclass: the class of the field to be tested.
- valid: a dictionary mapping valid inputs to their expected
- cleaned values.
- invalid: a dictionary mapping invalid inputs to one or more
- raised error messages.
- fieldargs: the args passed to instantiate the field
- fieldkwargs: the kwargs passed to instantiate the field
- emptyvalue: the expected clean output for inputs in EMPTY_VALUES
- """
- required = fieldclass(*field_args, **field_kwargs)
- optional = fieldclass(*field_args, **dict(field_kwargs, required=False))
- # test valid inputs
- for input, output in valid.items():
- self.assertEqual(required.clean(input), output)
- self.assertEqual(optional.clean(input), output)
- # test invalid inputs
- for input, errors in invalid.items():
- try:
- required.clean(input)
- except ValidationError, e:
- self.assertEqual(errors, e.messages)
- else:
- self.fail()
- try:
- optional.clean(input)
- except ValidationError, e:
- self.assertEqual(errors, e.messages)
- else:
- self.fail()
- # test required inputs
- error_required = [u'This field is required.']
- for val in EMPTY_VALUES:
- try:
- required.clean(val)
- except ValidationError, e:
- self.assertEqual(error_required, e.messages)
- else:
- self.fail()
- self.assertEqual(optional.clean(val), empty_value)
diff --git a/parts/django/tests/regressiontests/forms/localflavor/uy.py b/parts/django/tests/regressiontests/forms/localflavor/uy.py
deleted file mode 100644
index 2b9e134..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/uy.py
+++ /dev/null
@@ -1,52 +0,0 @@
-from django.contrib.localflavor.uy.forms import UYDepartamentSelect, UYCIField
-from django.contrib.localflavor.uy.util import get_validation_digit
-
-from utils import LocalFlavorTestCase
-
-
-class UYLocalFlavorTests(LocalFlavorTestCase):
- def test_UYDepartmentSelect(self):
- f = UYDepartamentSelect()
- out = u'''<select name="departamentos">
-<option value="G">Artigas</option>
-<option value="A">Canelones</option>
-<option value="E">Cerro Largo</option>
-<option value="L">Colonia</option>
-<option value="Q">Durazno</option>
-<option value="N">Flores</option>
-<option value="O">Florida</option>
-<option value="P">Lavalleja</option>
-<option value="B">Maldonado</option>
-<option value="S" selected="selected">Montevideo</option>
-<option value="I">Paysand\xfa</option>
-<option value="J">R\xedo Negro</option>
-<option value="F">Rivera</option>
-<option value="C">Rocha</option>
-<option value="H">Salto</option>
-<option value="M">San Jos\xe9</option>
-<option value="K">Soriano</option>
-<option value="R">Tacuaremb\xf3</option>
-<option value="D">Treinta y Tres</option>
-</select>'''
- self.assertEqual(f.render('departamentos', 'S'), out)
-
- def test_UYCIField(self):
- error_format = [u'Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format.']
- error_invalid = [u'Enter a valid CI number.']
- valid = {
- '4098053': '4098053',
- '409805-3': '409805-3',
- '409.805-3': '409.805-3',
- '10054112': '10054112',
- '1005411-2': '1005411-2',
- '1.005.411-2': '1.005.411-2',
- }
- invalid = {
- 'foo': [u'Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format.'],
- '409805-2': [u'Enter a valid CI number.'],
- '1.005.411-5': [u'Enter a valid CI number.'],
- }
- self.assertFieldOutput(UYCIField, valid, invalid)
- self.assertEqual(get_validation_digit(409805), 3)
- self.assertEqual(get_validation_digit(1005411), 2)
-
diff --git a/parts/django/tests/regressiontests/forms/localflavor/za.py b/parts/django/tests/regressiontests/forms/localflavor/za.py
deleted file mode 100644
index c912421..0000000
--- a/parts/django/tests/regressiontests/forms/localflavor/za.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from django.contrib.localflavor.za.forms import ZAIDField, ZAPostCodeField
-
-from utils import LocalFlavorTestCase
-
-
-class ZALocalFlavorTests(LocalFlavorTestCase):
- def test_ZAIDField(self):
- error_invalid = [u'Enter a valid South African ID number']
- valid = {
- '0002290001003': '0002290001003',
- '000229 0001 003': '0002290001003',
- }
- invalid = {
- '0102290001001': error_invalid,
- '811208': error_invalid,
- '0002290001004': error_invalid,
- }
- self.assertFieldOutput(ZAIDField, valid, invalid)
-
- def test_ZAPostCodeField(self):
- error_invalid = [u'Enter a valid South African postal code']
- valid = {
- '0000': '0000',
- }
- invalid = {
- 'abcd': error_invalid,
- ' 7530': error_invalid,
- }
- self.assertFieldOutput(ZAPostCodeField, valid, invalid)
diff --git a/parts/django/tests/regressiontests/forms/localflavortests.py b/parts/django/tests/regressiontests/forms/localflavortests.py
deleted file mode 100644
index 2582656..0000000
--- a/parts/django/tests/regressiontests/forms/localflavortests.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from localflavor.cz import tests as localflavor_cz_tests
-from localflavor.se import tests as localflavor_se_tests
-
-from localflavor.ar import ARLocalFlavorTests
-from localflavor.at import ATLocalFlavorTests
-from localflavor.au import AULocalFlavorTests
-from localflavor.at import ATLocalFlavorTests
-from localflavor.br import BRLocalFlavorTests
-from localflavor.ca import CALocalFlavorTests
-from localflavor.ch import CHLocalFlavorTests
-from localflavor.cl import CLLocalFlavorTests
-from localflavor.de import DELocalFlavorTests
-from localflavor.es import ESLocalFlavorTests
-from localflavor.fi import FILocalFlavorTests
-from localflavor.fr import FRLocalFlavorTests
-from localflavor.generic import GenericLocalFlavorTests
-from localflavor.id import IDLocalFlavorTests
-from localflavor.ie import IELocalFlavorTests
-from localflavor.is_ import ISLocalFlavorTests
-from localflavor.it import ITLocalFlavorTests
-from localflavor.jp import JPLocalFlavorTests
-from localflavor.kw import KWLocalFlavorTests
-from localflavor.nl import NLLocalFlavorTests
-from localflavor.pl import PLLocalFlavorTests
-from localflavor.pt import PTLocalFlavorTests
-from localflavor.ro import ROLocalFlavorTests
-from localflavor.sk import SKLocalFlavorTests
-from localflavor.uk import UKLocalFlavorTests
-from localflavor.us import USLocalFlavorTests
-from localflavor.uy import UYLocalFlavorTests
-from localflavor.za import ZALocalFlavorTests
-
-
-__test__ = {
- 'localflavor_cz_tests': localflavor_cz_tests,
- 'localflavor_se_tests': localflavor_se_tests,
-}
diff --git a/parts/django/tests/regressiontests/forms/models.py b/parts/django/tests/regressiontests/forms/models.py
deleted file mode 100644
index 203980c..0000000
--- a/parts/django/tests/regressiontests/forms/models.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-import tempfile
-
-from django.db import models
-from django.core.files.storage import FileSystemStorage
-
-
-temp_storage_location = tempfile.mkdtemp()
-temp_storage = FileSystemStorage(location=temp_storage_location)
-
-
-class BoundaryModel(models.Model):
- positive_integer = models.PositiveIntegerField(null=True, blank=True)
-
-
-callable_default_value = 0
-def callable_default():
- global callable_default_value
- callable_default_value = callable_default_value + 1
- return callable_default_value
-
-
-class Defaults(models.Model):
- name = models.CharField(max_length=255, default='class default value')
- def_date = models.DateField(default = datetime.date(1980, 1, 1))
- value = models.IntegerField(default=42)
- callable_default = models.IntegerField(default=callable_default)
-
-
-class ChoiceModel(models.Model):
- """For ModelChoiceField and ModelMultipleChoiceField tests."""
- name = models.CharField(max_length=10)
-
-
-class ChoiceOptionModel(models.Model):
- """Destination for ChoiceFieldModel's ForeignKey.
- Can't reuse ChoiceModel because error_message tests require that it have no instances."""
- name = models.CharField(max_length=10)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return u'ChoiceOption %d' % self.pk
-
-
-class ChoiceFieldModel(models.Model):
- """Model with ForeignKey to another model, for testing ModelForm
- generation with ModelChoiceField."""
- choice = models.ForeignKey(ChoiceOptionModel, blank=False,
- default=lambda: ChoiceOptionModel.objects.get(name='default'))
- choice_int = models.ForeignKey(ChoiceOptionModel, blank=False, related_name='choice_int',
- default=lambda: 1)
-
- multi_choice = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='multi_choice',
- default=lambda: ChoiceOptionModel.objects.filter(name='default'))
- multi_choice_int = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='multi_choice_int',
- default=lambda: [1])
-
-
-class FileModel(models.Model):
- file = models.FileField(storage=temp_storage, upload_to='tests')
-
-
-class Group(models.Model):
- name = models.CharField(max_length=10)
-
- def __unicode__(self):
- return u'%s' % self.name
-
-
-class Cheese(models.Model):
- name = models.CharField(max_length=100)
diff --git a/parts/django/tests/regressiontests/forms/tests/__init__.py b/parts/django/tests/regressiontests/forms/tests/__init__.py
deleted file mode 100644
index 95df6a1..0000000
--- a/parts/django/tests/regressiontests/forms/tests/__init__.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from error_messages import *
-from extra import *
-from fields import FieldsTests
-from forms import *
-from formsets import *
-from input_formats import *
-from media import *
-from models import *
-from regressions import *
-from util import *
-from validators import TestFieldWithValidators
-from widgets import *
-
-from regressiontests.forms.localflavortests import (
- __test__,
- ARLocalFlavorTests,
- ATLocalFlavorTests,
- AULocalFlavorTests,
- BRLocalFlavorTests,
- CALocalFlavorTests,
- CHLocalFlavorTests,
- CLLocalFlavorTests,
- DELocalFlavorTests,
- ESLocalFlavorTests,
- FILocalFlavorTests,
- FRLocalFlavorTests,
- GenericLocalFlavorTests,
- IDLocalFlavorTests,
- IELocalFlavorTests,
- ISLocalFlavorTests,
- ITLocalFlavorTests,
- JPLocalFlavorTests,
- KWLocalFlavorTests,
- NLLocalFlavorTests,
- PLLocalFlavorTests,
- PTLocalFlavorTests,
- ROLocalFlavorTests,
- SKLocalFlavorTests,
- UKLocalFlavorTests,
- USLocalFlavorTests,
- UYLocalFlavorTests,
- ZALocalFlavorTests,
-)
diff --git a/parts/django/tests/regressiontests/forms/tests/error_messages.py b/parts/django/tests/regressiontests/forms/tests/error_messages.py
deleted file mode 100644
index 39d88a6..0000000
--- a/parts/django/tests/regressiontests/forms/tests/error_messages.py
+++ /dev/null
@@ -1,253 +0,0 @@
-# -*- coding: utf-8 -*-
-import unittest
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.forms import *
-from django.test import TestCase
-from django.utils.safestring import mark_safe
-
-class AssertFormErrorsMixin(object):
- def assertFormErrors(self, expected, the_callable, *args, **kwargs):
- try:
- the_callable(*args, **kwargs)
- self.fail("Testing the 'clean' method on %s failed to raise a ValidationError.")
- except ValidationError, e:
- self.assertEqual(e.messages, expected)
-
-
-class FormsErrorMessagesTestCase(unittest.TestCase, AssertFormErrorsMixin):
- def test_charfield(self):
- e = {
- 'required': 'REQUIRED',
- 'min_length': 'LENGTH %(show_value)s, MIN LENGTH %(limit_value)s',
- 'max_length': 'LENGTH %(show_value)s, MAX LENGTH %(limit_value)s',
- }
- f = CharField(min_length=5, max_length=10, error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'LENGTH 4, MIN LENGTH 5'], f.clean, '1234')
- self.assertFormErrors([u'LENGTH 11, MAX LENGTH 10'], f.clean, '12345678901')
-
- def test_integerfield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- 'min_value': 'MIN VALUE IS %(limit_value)s',
- 'max_value': 'MAX VALUE IS %(limit_value)s',
- }
- f = IntegerField(min_value=5, max_value=10, error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc')
- self.assertFormErrors([u'MIN VALUE IS 5'], f.clean, '4')
- self.assertFormErrors([u'MAX VALUE IS 10'], f.clean, '11')
-
- def test_floatfield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- 'min_value': 'MIN VALUE IS %(limit_value)s',
- 'max_value': 'MAX VALUE IS %(limit_value)s',
- }
- f = FloatField(min_value=5, max_value=10, error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc')
- self.assertFormErrors([u'MIN VALUE IS 5'], f.clean, '4')
- self.assertFormErrors([u'MAX VALUE IS 10'], f.clean, '11')
-
- def test_decimalfield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- 'min_value': 'MIN VALUE IS %(limit_value)s',
- 'max_value': 'MAX VALUE IS %(limit_value)s',
- 'max_digits': 'MAX DIGITS IS %s',
- 'max_decimal_places': 'MAX DP IS %s',
- 'max_whole_digits': 'MAX DIGITS BEFORE DP IS %s',
- }
- f = DecimalField(min_value=5, max_value=10, error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc')
- self.assertFormErrors([u'MIN VALUE IS 5'], f.clean, '4')
- self.assertFormErrors([u'MAX VALUE IS 10'], f.clean, '11')
-
- f2 = DecimalField(max_digits=4, decimal_places=2, error_messages=e)
- self.assertFormErrors([u'MAX DIGITS IS 4'], f2.clean, '123.45')
- self.assertFormErrors([u'MAX DP IS 2'], f2.clean, '1.234')
- self.assertFormErrors([u'MAX DIGITS BEFORE DP IS 2'], f2.clean, '123.4')
-
- def test_datefield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- }
- f = DateField(error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc')
-
- def test_timefield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- }
- f = TimeField(error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc')
-
- def test_datetimefield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- }
- f = DateTimeField(error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc')
-
- def test_regexfield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- 'min_length': 'LENGTH %(show_value)s, MIN LENGTH %(limit_value)s',
- 'max_length': 'LENGTH %(show_value)s, MAX LENGTH %(limit_value)s',
- }
- f = RegexField(r'^\d+$', min_length=5, max_length=10, error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abcde')
- self.assertFormErrors([u'LENGTH 4, MIN LENGTH 5'], f.clean, '1234')
- self.assertFormErrors([u'LENGTH 11, MAX LENGTH 10'], f.clean, '12345678901')
-
- def test_emailfield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- 'min_length': 'LENGTH %(show_value)s, MIN LENGTH %(limit_value)s',
- 'max_length': 'LENGTH %(show_value)s, MAX LENGTH %(limit_value)s',
- }
- f = EmailField(min_length=8, max_length=10, error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abcdefgh')
- self.assertFormErrors([u'LENGTH 7, MIN LENGTH 8'], f.clean, 'a@b.com')
- self.assertFormErrors([u'LENGTH 11, MAX LENGTH 10'], f.clean, 'aye@bee.com')
-
- def test_filefield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- 'missing': 'MISSING',
- 'empty': 'EMPTY FILE',
- }
- f = FileField(error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc')
- self.assertFormErrors([u'EMPTY FILE'], f.clean, SimpleUploadedFile('name', None))
- self.assertFormErrors([u'EMPTY FILE'], f.clean, SimpleUploadedFile('name', ''))
-
- def test_urlfield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID',
- 'invalid_link': 'INVALID LINK',
- }
- f = URLField(verify_exists=True, error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID'], f.clean, 'abc.c')
- self.assertFormErrors([u'INVALID LINK'], f.clean, 'http://www.broken.djangoproject.com')
-
- def test_booleanfield(self):
- e = {
- 'required': 'REQUIRED',
- }
- f = BooleanField(error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
-
- def test_choicefield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid_choice': '%(value)s IS INVALID CHOICE',
- }
- f = ChoiceField(choices=[('a', 'aye')], error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'b IS INVALID CHOICE'], f.clean, 'b')
-
- def test_multiplechoicefield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid_choice': '%(value)s IS INVALID CHOICE',
- 'invalid_list': 'NOT A LIST',
- }
- f = MultipleChoiceField(choices=[('a', 'aye')], error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'NOT A LIST'], f.clean, 'b')
- self.assertFormErrors([u'b IS INVALID CHOICE'], f.clean, ['b'])
-
- def test_splitdatetimefield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid_date': 'INVALID DATE',
- 'invalid_time': 'INVALID TIME',
- }
- f = SplitDateTimeField(error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID DATE', u'INVALID TIME'], f.clean, ['a', 'b'])
-
- def test_ipaddressfield(self):
- e = {
- 'required': 'REQUIRED',
- 'invalid': 'INVALID IP ADDRESS',
- }
- f = IPAddressField(error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID IP ADDRESS'], f.clean, '127.0.0')
-
- def test_subclassing_errorlist(self):
- class TestForm(Form):
- first_name = CharField()
- last_name = CharField()
- birthday = DateField()
-
- def clean(self):
- raise ValidationError("I like to be awkward.")
-
- class CustomErrorList(util.ErrorList):
- def __unicode__(self):
- return self.as_divs()
-
- def as_divs(self):
- if not self: return u''
- return mark_safe(u'<div class="error">%s</div>' % ''.join([u'<p>%s</p>' % e for e in self]))
-
- # This form should print errors the default way.
- form1 = TestForm({'first_name': 'John'})
- self.assertEqual(str(form1['last_name'].errors), '<ul class="errorlist"><li>This field is required.</li></ul>')
- self.assertEqual(str(form1.errors['__all__']), '<ul class="errorlist"><li>I like to be awkward.</li></ul>')
-
- # This one should wrap error groups in the customized way.
- form2 = TestForm({'first_name': 'John'}, error_class=CustomErrorList)
- self.assertEqual(str(form2['last_name'].errors), '<div class="error"><p>This field is required.</p></div>')
- self.assertEqual(str(form2.errors['__all__']), '<div class="error"><p>I like to be awkward.</p></div>')
-
-
-class ModelChoiceFieldErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
- def test_modelchoicefield(self):
- # Create choices for the model choice field tests below.
- from regressiontests.forms.models import ChoiceModel
- c1 = ChoiceModel.objects.create(pk=1, name='a')
- c2 = ChoiceModel.objects.create(pk=2, name='b')
- c3 = ChoiceModel.objects.create(pk=3, name='c')
-
- # ModelChoiceField
- e = {
- 'required': 'REQUIRED',
- 'invalid_choice': 'INVALID CHOICE',
- }
- f = ModelChoiceField(queryset=ChoiceModel.objects.all(), error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'INVALID CHOICE'], f.clean, '4')
-
- # ModelMultipleChoiceField
- e = {
- 'required': 'REQUIRED',
- 'invalid_choice': '%s IS INVALID CHOICE',
- 'list': 'NOT A LIST OF VALUES',
- }
- f = ModelMultipleChoiceField(queryset=ChoiceModel.objects.all(), error_messages=e)
- self.assertFormErrors([u'REQUIRED'], f.clean, '')
- self.assertFormErrors([u'NOT A LIST OF VALUES'], f.clean, '3')
- self.assertFormErrors([u'4 IS INVALID CHOICE'], f.clean, ['4'])
diff --git a/parts/django/tests/regressiontests/forms/tests/extra.py b/parts/django/tests/regressiontests/forms/tests/extra.py
deleted file mode 100644
index bcdf4dd..0000000
--- a/parts/django/tests/regressiontests/forms/tests/extra.py
+++ /dev/null
@@ -1,610 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from decimal import Decimal
-import re
-import time
-import unittest
-from django.conf import settings
-from django.forms import *
-from django.forms.extras import SelectDateWidget
-from django.forms.util import ErrorList
-from django.test import TestCase
-from django.utils import translation
-from django.utils.encoding import force_unicode
-from django.utils.encoding import smart_unicode
-from error_messages import AssertFormErrorsMixin
-
-
-class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin):
- ###############
- # Extra stuff #
- ###############
-
- # The forms library comes with some extra, higher-level Field and Widget
- def test_selectdate(self):
- w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'))
- self.assertEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month">
-<option value="0">---</option>
-<option value="1">January</option>
-<option value="2">February</option>
-<option value="3">March</option>
-<option value="4">April</option>
-<option value="5">May</option>
-<option value="6">June</option>
-<option value="7">July</option>
-<option value="8">August</option>
-<option value="9">September</option>
-<option value="10">October</option>
-<option value="11">November</option>
-<option value="12">December</option>
-</select>
-<select name="mydate_day" id="id_mydate_day">
-<option value="0">---</option>
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-<option value="6">6</option>
-<option value="7">7</option>
-<option value="8">8</option>
-<option value="9">9</option>
-<option value="10">10</option>
-<option value="11">11</option>
-<option value="12">12</option>
-<option value="13">13</option>
-<option value="14">14</option>
-<option value="15">15</option>
-<option value="16">16</option>
-<option value="17">17</option>
-<option value="18">18</option>
-<option value="19">19</option>
-<option value="20">20</option>
-<option value="21">21</option>
-<option value="22">22</option>
-<option value="23">23</option>
-<option value="24">24</option>
-<option value="25">25</option>
-<option value="26">26</option>
-<option value="27">27</option>
-<option value="28">28</option>
-<option value="29">29</option>
-<option value="30">30</option>
-<option value="31">31</option>
-</select>
-<select name="mydate_year" id="id_mydate_year">
-<option value="0">---</option>
-<option value="2007">2007</option>
-<option value="2008">2008</option>
-<option value="2009">2009</option>
-<option value="2010">2010</option>
-<option value="2011">2011</option>
-<option value="2012">2012</option>
-<option value="2013">2013</option>
-<option value="2014">2014</option>
-<option value="2015">2015</option>
-<option value="2016">2016</option>
-</select>""")
- self.assertEqual(w.render('mydate', None), w.render('mydate', ''))
-
- self.assertEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month">
-<option value="1">January</option>
-<option value="2">February</option>
-<option value="3">March</option>
-<option value="4" selected="selected">April</option>
-<option value="5">May</option>
-<option value="6">June</option>
-<option value="7">July</option>
-<option value="8">August</option>
-<option value="9">September</option>
-<option value="10">October</option>
-<option value="11">November</option>
-<option value="12">December</option>
-</select>
-<select name="mydate_day" id="id_mydate_day">
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-<option value="6">6</option>
-<option value="7">7</option>
-<option value="8">8</option>
-<option value="9">9</option>
-<option value="10">10</option>
-<option value="11">11</option>
-<option value="12">12</option>
-<option value="13">13</option>
-<option value="14">14</option>
-<option value="15" selected="selected">15</option>
-<option value="16">16</option>
-<option value="17">17</option>
-<option value="18">18</option>
-<option value="19">19</option>
-<option value="20">20</option>
-<option value="21">21</option>
-<option value="22">22</option>
-<option value="23">23</option>
-<option value="24">24</option>
-<option value="25">25</option>
-<option value="26">26</option>
-<option value="27">27</option>
-<option value="28">28</option>
-<option value="29">29</option>
-<option value="30">30</option>
-<option value="31">31</option>
-</select>
-<select name="mydate_year" id="id_mydate_year">
-<option value="2007">2007</option>
-<option value="2008">2008</option>
-<option value="2009">2009</option>
-<option value="2010" selected="selected">2010</option>
-<option value="2011">2011</option>
-<option value="2012">2012</option>
-<option value="2013">2013</option>
-<option value="2014">2014</option>
-<option value="2015">2015</option>
-<option value="2016">2016</option>
-</select>""")
-
- # Accepts a datetime or a string:
- self.assertEqual(w.render('mydate', datetime.date(2010, 4, 15)), w.render('mydate', '2010-04-15'))
-
- # Invalid dates still render the failed date:
- self.assertEqual(w.render('mydate', '2010-02-31'), """<select name="mydate_month" id="id_mydate_month">
-<option value="1">January</option>
-<option value="2" selected="selected">February</option>
-<option value="3">March</option>
-<option value="4">April</option>
-<option value="5">May</option>
-<option value="6">June</option>
-<option value="7">July</option>
-<option value="8">August</option>
-<option value="9">September</option>
-<option value="10">October</option>
-<option value="11">November</option>
-<option value="12">December</option>
-</select>
-<select name="mydate_day" id="id_mydate_day">
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-<option value="6">6</option>
-<option value="7">7</option>
-<option value="8">8</option>
-<option value="9">9</option>
-<option value="10">10</option>
-<option value="11">11</option>
-<option value="12">12</option>
-<option value="13">13</option>
-<option value="14">14</option>
-<option value="15">15</option>
-<option value="16">16</option>
-<option value="17">17</option>
-<option value="18">18</option>
-<option value="19">19</option>
-<option value="20">20</option>
-<option value="21">21</option>
-<option value="22">22</option>
-<option value="23">23</option>
-<option value="24">24</option>
-<option value="25">25</option>
-<option value="26">26</option>
-<option value="27">27</option>
-<option value="28">28</option>
-<option value="29">29</option>
-<option value="30">30</option>
-<option value="31" selected="selected">31</option>
-</select>
-<select name="mydate_year" id="id_mydate_year">
-<option value="2007">2007</option>
-<option value="2008">2008</option>
-<option value="2009">2009</option>
-<option value="2010" selected="selected">2010</option>
-<option value="2011">2011</option>
-<option value="2012">2012</option>
-<option value="2013">2013</option>
-<option value="2014">2014</option>
-<option value="2015">2015</option>
-<option value="2016">2016</option>
-</select>""")
-
- # Using a SelectDateWidget in a form:
- w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'), required=False)
- self.assertEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month">
-<option value="0">---</option>
-<option value="1">January</option>
-<option value="2">February</option>
-<option value="3">March</option>
-<option value="4">April</option>
-<option value="5">May</option>
-<option value="6">June</option>
-<option value="7">July</option>
-<option value="8">August</option>
-<option value="9">September</option>
-<option value="10">October</option>
-<option value="11">November</option>
-<option value="12">December</option>
-</select>
-<select name="mydate_day" id="id_mydate_day">
-<option value="0">---</option>
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-<option value="6">6</option>
-<option value="7">7</option>
-<option value="8">8</option>
-<option value="9">9</option>
-<option value="10">10</option>
-<option value="11">11</option>
-<option value="12">12</option>
-<option value="13">13</option>
-<option value="14">14</option>
-<option value="15">15</option>
-<option value="16">16</option>
-<option value="17">17</option>
-<option value="18">18</option>
-<option value="19">19</option>
-<option value="20">20</option>
-<option value="21">21</option>
-<option value="22">22</option>
-<option value="23">23</option>
-<option value="24">24</option>
-<option value="25">25</option>
-<option value="26">26</option>
-<option value="27">27</option>
-<option value="28">28</option>
-<option value="29">29</option>
-<option value="30">30</option>
-<option value="31">31</option>
-</select>
-<select name="mydate_year" id="id_mydate_year">
-<option value="0">---</option>
-<option value="2007">2007</option>
-<option value="2008">2008</option>
-<option value="2009">2009</option>
-<option value="2010">2010</option>
-<option value="2011">2011</option>
-<option value="2012">2012</option>
-<option value="2013">2013</option>
-<option value="2014">2014</option>
-<option value="2015">2015</option>
-<option value="2016">2016</option>
-</select>""")
- self.assertEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month">
-<option value="0">---</option>
-<option value="1">January</option>
-<option value="2">February</option>
-<option value="3">March</option>
-<option value="4" selected="selected">April</option>
-<option value="5">May</option>
-<option value="6">June</option>
-<option value="7">July</option>
-<option value="8">August</option>
-<option value="9">September</option>
-<option value="10">October</option>
-<option value="11">November</option>
-<option value="12">December</option>
-</select>
-<select name="mydate_day" id="id_mydate_day">
-<option value="0">---</option>
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-<option value="6">6</option>
-<option value="7">7</option>
-<option value="8">8</option>
-<option value="9">9</option>
-<option value="10">10</option>
-<option value="11">11</option>
-<option value="12">12</option>
-<option value="13">13</option>
-<option value="14">14</option>
-<option value="15" selected="selected">15</option>
-<option value="16">16</option>
-<option value="17">17</option>
-<option value="18">18</option>
-<option value="19">19</option>
-<option value="20">20</option>
-<option value="21">21</option>
-<option value="22">22</option>
-<option value="23">23</option>
-<option value="24">24</option>
-<option value="25">25</option>
-<option value="26">26</option>
-<option value="27">27</option>
-<option value="28">28</option>
-<option value="29">29</option>
-<option value="30">30</option>
-<option value="31">31</option>
-</select>
-<select name="mydate_year" id="id_mydate_year">
-<option value="0">---</option>
-<option value="2007">2007</option>
-<option value="2008">2008</option>
-<option value="2009">2009</option>
-<option value="2010" selected="selected">2010</option>
-<option value="2011">2011</option>
-<option value="2012">2012</option>
-<option value="2013">2013</option>
-<option value="2014">2014</option>
-<option value="2015">2015</option>
-<option value="2016">2016</option>
-</select>""")
-
- class GetDate(Form):
- mydate = DateField(widget=SelectDateWidget)
-
- a = GetDate({'mydate_month':'4', 'mydate_day':'1', 'mydate_year':'2008'})
- self.assertTrue(a.is_valid())
- self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1))
-
- # As with any widget that implements get_value_from_datadict,
- # we must be prepared to accept the input from the "as_hidden"
- # rendering as well.
-
- self.assertEqual(a['mydate'].as_hidden(), '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />')
-
- b = GetDate({'mydate':'2008-4-1'})
- self.assertTrue(b.is_valid())
- self.assertEqual(b.cleaned_data['mydate'], datetime.date(2008, 4, 1))
-
- def test_multiwidget(self):
- # MultiWidget and MultiValueField #############################################
- # MultiWidgets are widgets composed of other widgets. They are usually
- # combined with MultiValueFields - a field that is composed of other fields.
- # MulitWidgets can themselved be composed of other MultiWidgets.
- # SplitDateTimeWidget is one example of a MultiWidget.
-
- class ComplexMultiWidget(MultiWidget):
- def __init__(self, attrs=None):
- widgets = (
- TextInput(),
- SelectMultiple(choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))),
- SplitDateTimeWidget(),
- )
- super(ComplexMultiWidget, self).__init__(widgets, attrs)
-
- def decompress(self, value):
- if value:
- data = value.split(',')
- return [data[0], data[1], datetime.datetime(*time.strptime(data[2], "%Y-%m-%d %H:%M:%S")[0:6])]
- return [None, None, None]
-
- def format_output(self, rendered_widgets):
- return u'\n'.join(rendered_widgets)
-
- w = ComplexMultiWidget()
- self.assertEqual(w.render('name', 'some text,JP,2007-04-25 06:24:00'), """<input type="text" name="name_0" value="some text" />
-<select multiple="multiple" name="name_1">
-<option value="J" selected="selected">John</option>
-<option value="P" selected="selected">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>
-<input type="text" name="name_2_0" value="2007-04-25" /><input type="text" name="name_2_1" value="06:24:00" />""")
-
- class ComplexField(MultiValueField):
- def __init__(self, required=True, widget=None, label=None, initial=None):
- fields = (
- CharField(),
- MultipleChoiceField(choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))),
- SplitDateTimeField()
- )
- super(ComplexField, self).__init__(fields, required, widget, label, initial)
-
- def compress(self, data_list):
- if data_list:
- return '%s,%s,%s' % (data_list[0],''.join(data_list[1]),data_list[2])
- return None
-
- f = ComplexField(widget=w)
- self.assertEqual(f.clean(['some text', ['J','P'], ['2007-04-25','6:24:00']]), u'some text,JP,2007-04-25 06:24:00')
- self.assertFormErrors([u'Select a valid choice. X is not one of the available choices.'], f.clean, ['some text',['X'], ['2007-04-25','6:24:00']])
-
- # If insufficient data is provided, None is substituted
- self.assertFormErrors([u'This field is required.'], f.clean, ['some text',['JP']])
-
- class ComplexFieldForm(Form):
- field1 = ComplexField(widget=w)
-
- f = ComplexFieldForm()
- self.assertEqual(f.as_table(), """<tr><th><label for="id_field1_0">Field1:</label></th><td><input type="text" name="field1_0" id="id_field1_0" />
-<select multiple="multiple" name="field1_1" id="id_field1_1">
-<option value="J">John</option>
-<option value="P">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>
-<input type="text" name="field1_2_0" id="id_field1_2_0" /><input type="text" name="field1_2_1" id="id_field1_2_1" /></td></tr>""")
-
- f = ComplexFieldForm({'field1_0':'some text','field1_1':['J','P'], 'field1_2_0':'2007-04-25', 'field1_2_1':'06:24:00'})
- self.assertEqual(f.as_table(), """<tr><th><label for="id_field1_0">Field1:</label></th><td><input type="text" name="field1_0" value="some text" id="id_field1_0" />
-<select multiple="multiple" name="field1_1" id="id_field1_1">
-<option value="J" selected="selected">John</option>
-<option value="P" selected="selected">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>
-<input type="text" name="field1_2_0" value="2007-04-25" id="id_field1_2_0" /><input type="text" name="field1_2_1" value="06:24:00" id="id_field1_2_1" /></td></tr>""")
-
- self.assertEqual(f.cleaned_data['field1'], u'some text,JP,2007-04-25 06:24:00')
-
- def test_ipaddress(self):
- f = IPAddressField()
- self.assertFormErrors([u'This field is required.'], f.clean, '')
- self.assertFormErrors([u'This field is required.'], f.clean, None)
- self.assertEqual(f.clean('127.0.0.1'), u'127.0.0.1')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, 'foo')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '127.0.0.')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
-
- f = IPAddressField(required=False)
- self.assertEqual(f.clean(''), u'')
- self.assertEqual(f.clean(None), u'')
- self.assertEqual(f.clean('127.0.0.1'), u'127.0.0.1')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, 'foo')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '127.0.0.')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
- self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
-
- def test_smart_unicode(self):
- class Test:
- def __str__(self):
- return 'ŠĐĆŽćžšđ'
-
- class TestU:
- def __str__(self):
- return 'Foo'
- def __unicode__(self):
- return u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'
-
- self.assertEqual(smart_unicode(Test()), u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
- self.assertEqual(smart_unicode(TestU()), u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
- self.assertEqual(smart_unicode(1), u'1')
- self.assertEqual(smart_unicode('foo'), u'foo')
-
- def test_accessing_clean(self):
- class UserForm(Form):
- username = CharField(max_length=10)
- password = CharField(widget=PasswordInput)
-
- def clean(self):
- data = self.cleaned_data
-
- if not self.errors:
- data['username'] = data['username'].lower()
-
- return data
-
- f = UserForm({'username': 'SirRobin', 'password': 'blue'})
- self.assertTrue(f.is_valid())
- self.assertEqual(f.cleaned_data['username'], u'sirrobin')
-
- def test_overriding_errorlist(self):
- class DivErrorList(ErrorList):
- def __unicode__(self):
- return self.as_divs()
-
- def as_divs(self):
- if not self: return u''
- return u'<div class="errorlist">%s</div>' % ''.join([u'<div class="error">%s</div>' % force_unicode(e) for e in self])
-
- class CommentForm(Form):
- name = CharField(max_length=50, required=False)
- email = EmailField()
- comment = CharField()
-
- data = dict(email='invalid')
- f = CommentForm(data, auto_id=False, error_class=DivErrorList)
- self.assertEqual(f.as_p(), """<p>Name: <input type="text" name="name" maxlength="50" /></p>
-<div class="errorlist"><div class="error">Enter a valid e-mail address.</div></div>
-<p>Email: <input type="text" name="email" value="invalid" /></p>
-<div class="errorlist"><div class="error">This field is required.</div></div>
-<p>Comment: <input type="text" name="comment" /></p>""")
-
- def test_multipart_encoded_form(self):
- class FormWithoutFile(Form):
- username = CharField()
-
- class FormWithFile(Form):
- username = CharField()
- file = FileField()
-
- class FormWithImage(Form):
- image = ImageField()
-
- self.assertFalse(FormWithoutFile().is_multipart())
- self.assertTrue(FormWithFile().is_multipart())
- self.assertTrue(FormWithImage().is_multipart())
-
-
-class FormsExtraL10NTestCase(unittest.TestCase):
- def setUp(self):
- super(FormsExtraL10NTestCase, self).setUp()
- self.old_use_l10n = getattr(settings, 'USE_L10N', False)
- settings.USE_L10N = True
- translation.activate('nl')
-
- def tearDown(self):
- translation.deactivate()
- settings.USE_L10N = self.old_use_l10n
- super(FormsExtraL10NTestCase, self).tearDown()
-
- def test_l10n(self):
- w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'), required=False)
- self.assertEqual(w.value_from_datadict({'date_year': '2010', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-2010')
-
- self.assertEqual(w.render('date', '13-08-2010'), """<select name="date_day" id="id_date_day">
-<option value="0">---</option>
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-<option value="6">6</option>
-<option value="7">7</option>
-<option value="8">8</option>
-<option value="9">9</option>
-<option value="10">10</option>
-<option value="11">11</option>
-<option value="12">12</option>
-<option value="13" selected="selected">13</option>
-<option value="14">14</option>
-<option value="15">15</option>
-<option value="16">16</option>
-<option value="17">17</option>
-<option value="18">18</option>
-<option value="19">19</option>
-<option value="20">20</option>
-<option value="21">21</option>
-<option value="22">22</option>
-<option value="23">23</option>
-<option value="24">24</option>
-<option value="25">25</option>
-<option value="26">26</option>
-<option value="27">27</option>
-<option value="28">28</option>
-<option value="29">29</option>
-<option value="30">30</option>
-<option value="31">31</option>
-</select>
-<select name="date_month" id="id_date_month">
-<option value="0">---</option>
-<option value="1">januari</option>
-<option value="2">februari</option>
-<option value="3">maart</option>
-<option value="4">april</option>
-<option value="5">mei</option>
-<option value="6">juni</option>
-<option value="7">juli</option>
-<option value="8" selected="selected">augustus</option>
-<option value="9">september</option>
-<option value="10">oktober</option>
-<option value="11">november</option>
-<option value="12">december</option>
-</select>
-<select name="date_year" id="id_date_year">
-<option value="0">---</option>
-<option value="2007">2007</option>
-<option value="2008">2008</option>
-<option value="2009">2009</option>
-<option value="2010" selected="selected">2010</option>
-<option value="2011">2011</option>
-<option value="2012">2012</option>
-<option value="2013">2013</option>
-<option value="2014">2014</option>
-<option value="2015">2015</option>
-<option value="2016">2016</option>
-</select>""")
-
- # Years before 1900 work
- w = SelectDateWidget(years=('1899',))
- self.assertEqual(w.value_from_datadict({'date_year': '1899', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-1899')
diff --git a/parts/django/tests/regressiontests/forms/tests/fields.py b/parts/django/tests/regressiontests/forms/tests/fields.py
deleted file mode 100644
index 133a183..0000000
--- a/parts/django/tests/regressiontests/forms/tests/fields.py
+++ /dev/null
@@ -1,862 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-##########
-# Fields #
-##########
-
-Each Field class does some sort of validation. Each Field has a clean() method,
-which either raises django.forms.ValidationError or returns the "clean"
-data -- usually a Unicode object, but, in some rare cases, a list.
-
-Each Field's __init__() takes at least these parameters:
- required -- Boolean that specifies whether the field is required.
- True by default.
- widget -- A Widget class, or instance of a Widget class, that should be
- used for this Field when displaying it. Each Field has a default
- Widget that it'll use if you don't specify this. In most cases,
- the default widget is TextInput.
- label -- A verbose name for this field, for use in displaying this field in
- a form. By default, Django will use a "pretty" version of the form
- field name, if the Field is part of a Form.
- initial -- A value to use in this Field's initial display. This value is
- *not* used as a fallback if data isn't given.
-
-Other than that, the Field subclasses have class-specific options for
-__init__(). For example, CharField has a max_length option.
-"""
-import datetime
-import time
-import re
-import os
-from decimal import Decimal
-
-from unittest import TestCase
-
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.forms import *
-from django.forms.widgets import RadioFieldRenderer
-
-
-def fix_os_paths(x):
- if isinstance(x, basestring):
- return x.replace('\\', '/')
- elif isinstance(x, tuple):
- return tuple(fix_os_paths(list(x)))
- elif isinstance(x, list):
- return [fix_os_paths(y) for y in x]
- else:
- return x
-
-
-class FieldsTests(TestCase):
-
- def assertRaisesErrorWithMessage(self, error, message, callable, *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
- # CharField ###################################################################
-
- def test_charfield_1(self):
- f = CharField()
- self.assertEqual(u'1', f.clean(1))
- self.assertEqual(u'hello', f.clean('hello'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertEqual(u'[1, 2, 3]', f.clean([1, 2, 3]))
-
- def test_charfield_2(self):
- f = CharField(required=False)
- self.assertEqual(u'1', f.clean(1))
- self.assertEqual(u'hello', f.clean('hello'))
- self.assertEqual(u'', f.clean(None))
- self.assertEqual(u'', f.clean(''))
- self.assertEqual(u'[1, 2, 3]', f.clean([1, 2, 3]))
-
- def test_charfield_3(self):
- f = CharField(max_length=10, required=False)
- self.assertEqual(u'12345', f.clean('12345'))
- self.assertEqual(u'1234567890', f.clean('1234567890'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at most 10 characters (it has 11).']", f.clean, '1234567890a')
-
- def test_charfield_4(self):
- f = CharField(min_length=10, required=False)
- self.assertEqual(u'', f.clean(''))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 5).']", f.clean, '12345')
- self.assertEqual(u'1234567890', f.clean('1234567890'))
- self.assertEqual(u'1234567890a', f.clean('1234567890a'))
-
- def test_charfield_5(self):
- f = CharField(min_length=10, required=True)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 5).']", f.clean, '12345')
- self.assertEqual(u'1234567890', f.clean('1234567890'))
- self.assertEqual(u'1234567890a', f.clean('1234567890a'))
-
- # IntegerField ################################################################
-
- def test_integerfield_1(self):
- f = IntegerField()
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(1, f.clean('1'))
- self.assertEqual(True, isinstance(f.clean('1'), int))
- self.assertEqual(23, f.clean('23'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a whole number.']", f.clean, 'a')
- self.assertEqual(42, f.clean(42))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a whole number.']", f.clean, 3.14)
- self.assertEqual(1, f.clean('1 '))
- self.assertEqual(1, f.clean(' 1'))
- self.assertEqual(1, f.clean(' 1 '))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a whole number.']", f.clean, '1a')
-
- def test_integerfield_2(self):
- f = IntegerField(required=False)
- self.assertEqual(None, f.clean(''))
- self.assertEqual('None', repr(f.clean('')))
- self.assertEqual(None, f.clean(None))
- self.assertEqual('None', repr(f.clean(None)))
- self.assertEqual(1, f.clean('1'))
- self.assertEqual(True, isinstance(f.clean('1'), int))
- self.assertEqual(23, f.clean('23'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a whole number.']", f.clean, 'a')
- self.assertEqual(1, f.clean('1 '))
- self.assertEqual(1, f.clean(' 1'))
- self.assertEqual(1, f.clean(' 1 '))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a whole number.']", f.clean, '1a')
-
- def test_integerfield_3(self):
- f = IntegerField(max_value=10)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(1, f.clean(1))
- self.assertEqual(10, f.clean(10))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 10.']", f.clean, 11)
- self.assertEqual(10, f.clean('10'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 10.']", f.clean, '11')
-
- def test_integerfield_4(self):
- f = IntegerField(min_value=10)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is greater than or equal to 10.']", f.clean, 1)
- self.assertEqual(10, f.clean(10))
- self.assertEqual(11, f.clean(11))
- self.assertEqual(10, f.clean('10'))
- self.assertEqual(11, f.clean('11'))
-
- def test_integerfield_5(self):
- f = IntegerField(min_value=10, max_value=20)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is greater than or equal to 10.']", f.clean, 1)
- self.assertEqual(10, f.clean(10))
- self.assertEqual(11, f.clean(11))
- self.assertEqual(10, f.clean('10'))
- self.assertEqual(11, f.clean('11'))
- self.assertEqual(20, f.clean(20))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 20.']", f.clean, 21)
-
- # FloatField ##################################################################
-
- def test_floatfield_1(self):
- f = FloatField()
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(1.0, f.clean('1'))
- self.assertEqual(True, isinstance(f.clean('1'), float))
- self.assertEqual(23.0, f.clean('23'))
- self.assertEqual(3.1400000000000001, f.clean('3.14'))
- self.assertEqual(3.1400000000000001, f.clean(3.14))
- self.assertEqual(42.0, f.clean(42))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, 'a')
- self.assertEqual(1.0, f.clean('1.0 '))
- self.assertEqual(1.0, f.clean(' 1.0'))
- self.assertEqual(1.0, f.clean(' 1.0 '))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, '1.0a')
-
- def test_floatfield_2(self):
- f = FloatField(required=False)
- self.assertEqual(None, f.clean(''))
- self.assertEqual(None, f.clean(None))
- self.assertEqual(1.0, f.clean('1'))
-
- def test_floatfield_3(self):
- f = FloatField(max_value=1.5, min_value=0.5)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 1.5.']", f.clean, '1.6')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is greater than or equal to 0.5.']", f.clean, '0.4')
- self.assertEqual(1.5, f.clean('1.5'))
- self.assertEqual(0.5, f.clean('0.5'))
-
- # DecimalField ################################################################
-
- def test_decimalfield_1(self):
- f = DecimalField(max_digits=4, decimal_places=2)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(f.clean('1'), Decimal("1"))
- self.assertEqual(True, isinstance(f.clean('1'), Decimal))
- self.assertEqual(f.clean('23'), Decimal("23"))
- self.assertEqual(f.clean('3.14'), Decimal("3.14"))
- self.assertEqual(f.clean(3.14), Decimal("3.14"))
- self.assertEqual(f.clean(Decimal('3.14')), Decimal("3.14"))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, 'NaN')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, 'Inf')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, '-Inf')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, 'a')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, u'łąść')
- self.assertEqual(f.clean('1.0 '), Decimal("1.0"))
- self.assertEqual(f.clean(' 1.0'), Decimal("1.0"))
- self.assertEqual(f.clean(' 1.0 '), Decimal("1.0"))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, '1.0a')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 4 digits in total.']", f.clean, '123.45')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 2 decimal places.']", f.clean, '1.234')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 2 digits before the decimal point.']", f.clean, '123.4')
- self.assertEqual(f.clean('-12.34'), Decimal("-12.34"))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 4 digits in total.']", f.clean, '-123.45')
- self.assertEqual(f.clean('-.12'), Decimal("-0.12"))
- self.assertEqual(f.clean('-00.12'), Decimal("-0.12"))
- self.assertEqual(f.clean('-000.12'), Decimal("-0.12"))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 2 decimal places.']", f.clean, '-000.123')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 4 digits in total.']", f.clean, '-000.12345')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a number.']", f.clean, '--0.12')
-
- def test_decimalfield_2(self):
- f = DecimalField(max_digits=4, decimal_places=2, required=False)
- self.assertEqual(None, f.clean(''))
- self.assertEqual(None, f.clean(None))
- self.assertEqual(f.clean('1'), Decimal("1"))
-
- def test_decimalfield_3(self):
- f = DecimalField(max_digits=4, decimal_places=2, max_value=Decimal('1.5'), min_value=Decimal('0.5'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is less than or equal to 1.5.']", f.clean, '1.6')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value is greater than or equal to 0.5.']", f.clean, '0.4')
- self.assertEqual(f.clean('1.5'), Decimal("1.5"))
- self.assertEqual(f.clean('0.5'), Decimal("0.5"))
- self.assertEqual(f.clean('.5'), Decimal("0.5"))
- self.assertEqual(f.clean('00.50'), Decimal("0.50"))
-
- def test_decimalfield_4(self):
- f = DecimalField(decimal_places=2)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 2 decimal places.']", f.clean, '0.00000001')
-
- def test_decimalfield_5(self):
- f = DecimalField(max_digits=3)
- # Leading whole zeros "collapse" to one digit.
- self.assertEqual(f.clean('0000000.10'), Decimal("0.1"))
- # But a leading 0 before the . doesn't count towards max_digits
- self.assertEqual(f.clean('0000000.100'), Decimal("0.100"))
- # Only leading whole zeros "collapse" to one digit.
- self.assertEqual(f.clean('000000.02'), Decimal('0.02'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 3 digits in total.']", f.clean, '000000.0002')
- self.assertEqual(f.clean('.002'), Decimal("0.002"))
-
- def test_decimalfield_6(self):
- f = DecimalField(max_digits=2, decimal_places=2)
- self.assertEqual(f.clean('.01'), Decimal(".01"))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure that there are no more than 0 digits before the decimal point.']", f.clean, '1.1')
-
- # DateField ###################################################################
-
- def test_datefield_1(self):
- f = DateField()
- self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.date(2006, 10, 25)))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.datetime(2006, 10, 25, 14, 30)))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59)))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200)))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('2006-10-25'))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('10/25/2006'))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('10/25/06'))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('Oct 25 2006'))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('October 25 2006'))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('October 25, 2006'))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('25 October 2006'))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('25 October, 2006'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '2006-4-31')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '200a-10-25')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '25/10/06')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
-
- def test_datefield_2(self):
- f = DateField(required=False)
- self.assertEqual(None, f.clean(None))
- self.assertEqual('None', repr(f.clean(None)))
- self.assertEqual(None, f.clean(''))
- self.assertEqual('None', repr(f.clean('')))
-
- def test_datefield_3(self):
- f = DateField(input_formats=['%Y %m %d'])
- self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.date(2006, 10, 25)))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.datetime(2006, 10, 25, 14, 30)))
- self.assertEqual(datetime.date(2006, 10, 25), f.clean('2006 10 25'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '2006-10-25')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '10/25/2006')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '10/25/06')
-
- # TimeField ###################################################################
-
- def test_timefield_1(self):
- f = TimeField()
- self.assertEqual(datetime.time(14, 25), f.clean(datetime.time(14, 25)))
- self.assertEqual(datetime.time(14, 25, 59), f.clean(datetime.time(14, 25, 59)))
- self.assertEqual(datetime.time(14, 25), f.clean('14:25'))
- self.assertEqual(datetime.time(14, 25, 59), f.clean('14:25:59'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid time.']", f.clean, 'hello')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid time.']", f.clean, '1:24 p.m.')
-
- def test_timefield_2(self):
- f = TimeField(input_formats=['%I:%M %p'])
- self.assertEqual(datetime.time(14, 25), f.clean(datetime.time(14, 25)))
- self.assertEqual(datetime.time(14, 25, 59), f.clean(datetime.time(14, 25, 59)))
- self.assertEqual(datetime.time(4, 25), f.clean('4:25 AM'))
- self.assertEqual(datetime.time(16, 25), f.clean('4:25 PM'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid time.']", f.clean, '14:30:45')
-
- # DateTimeField ###############################################################
-
- def test_datetimefield_1(self):
- f = DateTimeField()
- self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean(datetime.date(2006, 10, 25)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean(datetime.datetime(2006, 10, 25, 14, 30)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59, 200), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45), f.clean('2006-10-25 14:30:45'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('2006-10-25 14:30:00'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('2006-10-25 14:30'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean('2006-10-25'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45), f.clean('10/25/2006 14:30:45'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('10/25/2006 14:30:00'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('10/25/2006 14:30'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean('10/25/2006'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45), f.clean('10/25/06 14:30:45'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('10/25/06 14:30:00'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('10/25/06 14:30'))
- self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean('10/25/06'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date/time.']", f.clean, 'hello')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date/time.']", f.clean, '2006-10-25 4:30 p.m.')
-
- def test_datetimefield_2(self):
- f = DateTimeField(input_formats=['%Y %m %d %I:%M %p'])
- self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean(datetime.date(2006, 10, 25)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean(datetime.datetime(2006, 10, 25, 14, 30)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59, 200), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200)))
- self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('2006 10 25 2:30 PM'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date/time.']", f.clean, '2006-10-25 14:30:45')
-
- def test_datetimefield_3(self):
- f = DateTimeField(required=False)
- self.assertEqual(None, f.clean(None))
- self.assertEqual('None', repr(f.clean(None)))
- self.assertEqual(None, f.clean(''))
- self.assertEqual('None', repr(f.clean('')))
-
- # RegexField ##################################################################
-
- def test_regexfield_1(self):
- f = RegexField('^\d[A-F]\d$')
- self.assertEqual(u'2A2', f.clean('2A2'))
- self.assertEqual(u'3F3', f.clean('3F3'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '3G3')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, ' 2A2')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '2A2 ')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
-
- def test_regexfield_2(self):
- f = RegexField('^\d[A-F]\d$', required=False)
- self.assertEqual(u'2A2', f.clean('2A2'))
- self.assertEqual(u'3F3', f.clean('3F3'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '3G3')
- self.assertEqual(u'', f.clean(''))
-
- def test_regexfield_3(self):
- f = RegexField(re.compile('^\d[A-F]\d$'))
- self.assertEqual(u'2A2', f.clean('2A2'))
- self.assertEqual(u'3F3', f.clean('3F3'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '3G3')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, ' 2A2')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '2A2 ')
-
- def test_regexfield_4(self):
- f = RegexField('^\d\d\d\d$', error_message='Enter a four-digit number.')
- self.assertEqual(u'1234', f.clean('1234'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a four-digit number.']", f.clean, '123')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a four-digit number.']", f.clean, 'abcd')
-
- def test_regexfield_5(self):
- f = RegexField('^\d+$', min_length=5, max_length=10)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 5 characters (it has 3).']", f.clean, '123')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 5 characters (it has 3).', u'Enter a valid value.']", f.clean, 'abc')
- self.assertEqual(u'12345', f.clean('12345'))
- self.assertEqual(u'1234567890', f.clean('1234567890'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at most 10 characters (it has 11).']", f.clean, '12345678901')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '12345a')
-
- # EmailField ##################################################################
-
- def test_emailfield_1(self):
- f = EmailField()
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(u'person@example.com', f.clean('person@example.com'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@bar')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@invalid-.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@-invalid.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@inv-.alid-.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@inv-.-alid.com')
- self.assertEqual(u'example@valid-----hyphens.com', f.clean('example@valid-----hyphens.com'))
- self.assertEqual(u'example@valid-with-hyphens.com', f.clean('example@valid-with-hyphens.com'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@.com')
- self.assertEqual(u'local@domain.with.idn.xyz\xe4\xf6\xfc\xdfabc.part.com', f.clean('local@domain.with.idn.xyzäöüßabc.part.com'))
-
- def test_email_regexp_for_performance(self):
- f = EmailField()
- # Check for runaway regex security problem. This will take for-freeking-ever
- # if the security fix isn't in place.
- self.assertRaisesErrorWithMessage(
- ValidationError,
- "[u'Enter a valid e-mail address.']",
- f.clean,
- 'viewx3dtextx26qx3d@yahoo.comx26latlngx3d15854521645943074058'
- )
-
- def test_emailfield_2(self):
- f = EmailField(required=False)
- self.assertEqual(u'', f.clean(''))
- self.assertEqual(u'', f.clean(None))
- self.assertEqual(u'person@example.com', f.clean('person@example.com'))
- self.assertEqual(u'example@example.com', f.clean(' example@example.com \t \t '))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@bar')
-
- def test_emailfield_3(self):
- f = EmailField(min_length=10, max_length=15)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 9).']", f.clean, 'a@foo.com')
- self.assertEqual(u'alf@foo.com', f.clean('alf@foo.com'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at most 15 characters (it has 20).']", f.clean, 'alf123456788@foo.com')
-
- # FileField ##################################################################
-
- def test_filefield_1(self):
- f = FileField()
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '', '')
- self.assertEqual('files/test1.pdf', f.clean('', 'files/test1.pdf'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None, '')
- self.assertEqual('files/test2.pdf', f.clean(None, 'files/test2.pdf'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'No file was submitted. Check the encoding type on the form.']", f.clean, SimpleUploadedFile('', ''))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'No file was submitted. Check the encoding type on the form.']", f.clean, SimpleUploadedFile('', ''), '')
- self.assertEqual('files/test3.pdf', f.clean(None, 'files/test3.pdf'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'No file was submitted. Check the encoding type on the form.']", f.clean, 'some content that is not a file')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'The submitted file is empty.']", f.clean, SimpleUploadedFile('name', None))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'The submitted file is empty.']", f.clean, SimpleUploadedFile('name', ''))
- self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('name', 'Some File Content'))))
- self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', 'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह'))))
- self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('name', 'Some File Content'), 'files/test4.pdf')))
-
- def test_filefield_2(self):
- f = FileField(max_length = 5)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this filename has at most 5 characters (it has 18).']", f.clean, SimpleUploadedFile('test_maxlength.txt', 'hello world'))
- self.assertEqual('files/test1.pdf', f.clean('', 'files/test1.pdf'))
- self.assertEqual('files/test2.pdf', f.clean(None, 'files/test2.pdf'))
- self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('name', 'Some File Content'))))
-
- # URLField ##################################################################
-
- def test_urlfield_1(self):
- f = URLField()
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(u'http://localhost/', f.clean('http://localhost'))
- self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
- self.assertEqual(u'http://example.com./', f.clean('http://example.com.'))
- self.assertEqual(u'http://www.example.com/', f.clean('http://www.example.com'))
- self.assertEqual(u'http://www.example.com:8000/test', f.clean('http://www.example.com:8000/test'))
- self.assertEqual(u'http://valid-with-hyphens.com/', f.clean('valid-with-hyphens.com'))
- self.assertEqual(u'http://subdomain.domain.com/', f.clean('subdomain.domain.com'))
- self.assertEqual(u'http://200.8.9.10/', f.clean('http://200.8.9.10'))
- self.assertEqual(u'http://200.8.9.10:8000/test', f.clean('http://200.8.9.10:8000/test'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'foo')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example.')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'com.')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, '.')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://invalid-.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://-invalid.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://inv-.alid-.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://inv-.-alid.com')
- self.assertEqual(u'http://valid-----hyphens.com/', f.clean('http://valid-----hyphens.com'))
- self.assertEqual(u'http://some.idn.xyz\xe4\xf6\xfc\xdfabc.domain.com:123/blah', f.clean('http://some.idn.xyzäöüßabc.domain.com:123/blah'))
- self.assertEqual(u'http://www.example.com/s/http://code.djangoproject.com/ticket/13804', f.clean('www.example.com/s/http://code.djangoproject.com/ticket/13804'))
-
- def test_url_regex_ticket11198(self):
- f = URLField()
- # hangs "forever" if catastrophic backtracking in ticket:#11198 not fixed
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://%s' % ("X"*200,))
-
- # a second test, to make sure the problem is really addressed, even on
- # domains that don't fail the domain label length check in the regex
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://%s' % ("X"*60,))
-
- def test_urlfield_2(self):
- f = URLField(required=False)
- self.assertEqual(u'', f.clean(''))
- self.assertEqual(u'', f.clean(None))
- self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
- self.assertEqual(u'http://www.example.com/', f.clean('http://www.example.com'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'foo')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example.')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://.com')
-
- def test_urlfield_3(self):
- f = URLField(verify_exists=True)
- self.assertEqual(u'http://www.google.com/', f.clean('http://www.google.com')) # This will fail if there's no Internet connection
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example')
- self.assertRaises(ValidationError, f.clean, 'http://www.broken.djangoproject.com') # bad domain
- try:
- f.clean('http://www.broken.djangoproject.com') # bad domain
- except ValidationError, e:
- self.assertEqual("[u'This URL appears to be a broken link.']", str(e))
- self.assertRaises(ValidationError, f.clean, 'http://google.com/we-love-microsoft.html') # good domain, bad page
- try:
- f.clean('http://google.com/we-love-microsoft.html') # good domain, bad page
- except ValidationError, e:
- self.assertEqual("[u'This URL appears to be a broken link.']", str(e))
- # Valid and existent IDN
- self.assertEqual(u'http://\u05e2\u05d1\u05e8\u05d9\u05ea.idn.icann.org/', f.clean(u'http://עברית.idn.icann.org/'))
- # Valid but non-existent IDN
- try:
- f.clean(u'http://broken.עברית.idn.icann.org/')
- except ValidationError, e:
- self.assertEqual("[u'This URL appears to be a broken link.']", str(e))
-
- def test_urlfield_4(self):
- f = URLField(verify_exists=True, required=False)
- self.assertEqual(u'', f.clean(''))
- self.assertEqual(u'http://www.google.com/', f.clean('http://www.google.com')) # This will fail if there's no Internet connection
-
- def test_urlfield_5(self):
- f = URLField(min_length=15, max_length=20)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at least 15 characters (it has 13).']", f.clean, 'http://f.com')
- self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at most 20 characters (it has 38).']", f.clean, 'http://abcdefghijklmnopqrstuvwxyz.com')
-
- def test_urlfield_6(self):
- f = URLField(required=False)
- self.assertEqual(u'http://example.com/', f.clean('example.com'))
- self.assertEqual(u'', f.clean(''))
- self.assertEqual(u'https://example.com/', f.clean('https://example.com'))
-
- def test_urlfield_7(self):
- f = URLField()
- self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
- self.assertEqual(u'http://example.com/test', f.clean('http://example.com/test'))
-
- def test_urlfield_ticket11826(self):
- f = URLField()
- self.assertEqual(u'http://example.com/?some_param=some_value', f.clean('http://example.com?some_param=some_value'))
-
- # BooleanField ################################################################
-
- def test_booleanfield_1(self):
- f = BooleanField()
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(True, f.clean(True))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, False)
- self.assertEqual(True, f.clean(1))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, 0)
- self.assertEqual(True, f.clean('Django rocks'))
- self.assertEqual(True, f.clean('True'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, 'False')
-
- def test_booleanfield_2(self):
- f = BooleanField(required=False)
- self.assertEqual(False, f.clean(''))
- self.assertEqual(False, f.clean(None))
- self.assertEqual(True, f.clean(True))
- self.assertEqual(False, f.clean(False))
- self.assertEqual(True, f.clean(1))
- self.assertEqual(False, f.clean(0))
- self.assertEqual(True, f.clean('1'))
- self.assertEqual(False, f.clean('0'))
- self.assertEqual(True, f.clean('Django rocks'))
- self.assertEqual(False, f.clean('False'))
-
- # ChoiceField #################################################################
-
- def test_choicefield_1(self):
- f = ChoiceField(choices=[('1', 'One'), ('2', 'Two')])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual(u'1', f.clean(1))
- self.assertEqual(u'1', f.clean('1'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, '3')
-
- def test_choicefield_2(self):
- f = ChoiceField(choices=[('1', 'One'), ('2', 'Two')], required=False)
- self.assertEqual(u'', f.clean(''))
- self.assertEqual(u'', f.clean(None))
- self.assertEqual(u'1', f.clean(1))
- self.assertEqual(u'1', f.clean('1'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, '3')
-
- def test_choicefield_3(self):
- f = ChoiceField(choices=[('J', 'John'), ('P', 'Paul')])
- self.assertEqual(u'J', f.clean('J'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. John is not one of the available choices.']", f.clean, 'John')
-
- def test_choicefield_4(self):
- f = ChoiceField(choices=[('Numbers', (('1', 'One'), ('2', 'Two'))), ('Letters', (('3','A'),('4','B'))), ('5','Other')])
- self.assertEqual(u'1', f.clean(1))
- self.assertEqual(u'1', f.clean('1'))
- self.assertEqual(u'3', f.clean(3))
- self.assertEqual(u'3', f.clean('3'))
- self.assertEqual(u'5', f.clean(5))
- self.assertEqual(u'5', f.clean('5'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 6 is not one of the available choices.']", f.clean, '6')
-
- # TypedChoiceField ############################################################
- # TypedChoiceField is just like ChoiceField, except that coerced types will
- # be returned:
-
- def test_typedchoicefield_1(self):
- f = TypedChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=int)
- self.assertEqual(1, f.clean('1'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 2 is not one of the available choices.']", f.clean, '2')
-
- def test_typedchoicefield_2(self):
- # Different coercion, same validation.
- f = TypedChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=float)
- self.assertEqual(1.0, f.clean('1'))
-
- def test_typedchoicefield_3(self):
- # This can also cause weirdness: be careful (bool(-1) == True, remember)
- f = TypedChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=bool)
- self.assertEqual(True, f.clean('-1'))
-
- def test_typedchoicefield_4(self):
- # Even more weirdness: if you have a valid choice but your coercion function
- # can't coerce, you'll still get a validation error. Don't do this!
- f = TypedChoiceField(choices=[('A', 'A'), ('B', 'B')], coerce=int)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. B is not one of the available choices.']", f.clean, 'B')
- # Required fields require values
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
-
- def test_typedchoicefield_5(self):
- # Non-required fields aren't required
- f = TypedChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=int, required=False)
- self.assertEqual('', f.clean(''))
- # If you want cleaning an empty value to return a different type, tell the field
-
- def test_typedchoicefield_6(self):
- f = TypedChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=int, required=False, empty_value=None)
- self.assertEqual(None, f.clean(''))
-
- # NullBooleanField ############################################################
-
- def test_nullbooleanfield_1(self):
- f = NullBooleanField()
- self.assertEqual(None, f.clean(''))
- self.assertEqual(True, f.clean(True))
- self.assertEqual(False, f.clean(False))
- self.assertEqual(None, f.clean(None))
- self.assertEqual(False, f.clean('0'))
- self.assertEqual(True, f.clean('1'))
- self.assertEqual(None, f.clean('2'))
- self.assertEqual(None, f.clean('3'))
- self.assertEqual(None, f.clean('hello'))
-
-
- def test_nullbooleanfield_2(self):
- # Make sure that the internal value is preserved if using HiddenInput (#7753)
- class HiddenNullBooleanForm(Form):
- hidden_nullbool1 = NullBooleanField(widget=HiddenInput, initial=True)
- hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False)
- f = HiddenNullBooleanForm()
- self.assertEqual('<input type="hidden" name="hidden_nullbool1" value="True" id="id_hidden_nullbool1" /><input type="hidden" name="hidden_nullbool2" value="False" id="id_hidden_nullbool2" />', str(f))
-
- def test_nullbooleanfield_3(self):
- class HiddenNullBooleanForm(Form):
- hidden_nullbool1 = NullBooleanField(widget=HiddenInput, initial=True)
- hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False)
- f = HiddenNullBooleanForm({ 'hidden_nullbool1': 'True', 'hidden_nullbool2': 'False' })
- self.assertEqual(None, f.full_clean())
- self.assertEqual(True, f.cleaned_data['hidden_nullbool1'])
- self.assertEqual(False, f.cleaned_data['hidden_nullbool2'])
-
- def test_nullbooleanfield_4(self):
- # Make sure we're compatible with MySQL, which uses 0 and 1 for its boolean
- # values. (#9609)
- NULLBOOL_CHOICES = (('1', 'Yes'), ('0', 'No'), ('', 'Unknown'))
- class MySQLNullBooleanForm(Form):
- nullbool0 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES))
- nullbool1 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES))
- nullbool2 = NullBooleanField(widget=RadioSelect(choices=NULLBOOL_CHOICES))
- f = MySQLNullBooleanForm({ 'nullbool0': '1', 'nullbool1': '0', 'nullbool2': '' })
- self.assertEqual(None, f.full_clean())
- self.assertEqual(True, f.cleaned_data['nullbool0'])
- self.assertEqual(False, f.cleaned_data['nullbool1'])
- self.assertEqual(None, f.cleaned_data['nullbool2'])
-
- # MultipleChoiceField #########################################################
-
- def test_multiplechoicefield_1(self):
- f = MultipleChoiceField(choices=[('1', 'One'), ('2', 'Two')])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertEqual([u'1'], f.clean([1]))
- self.assertEqual([u'1'], f.clean(['1']))
- self.assertEqual([u'1', u'2'], f.clean(['1', '2']))
- self.assertEqual([u'1', u'2'], f.clean([1, '2']))
- self.assertEqual([u'1', u'2'], f.clean((1, '2')))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, [])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, ())
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, ['3'])
-
- def test_multiplechoicefield_2(self):
- f = MultipleChoiceField(choices=[('1', 'One'), ('2', 'Two')], required=False)
- self.assertEqual([], f.clean(''))
- self.assertEqual([], f.clean(None))
- self.assertEqual([u'1'], f.clean([1]))
- self.assertEqual([u'1'], f.clean(['1']))
- self.assertEqual([u'1', u'2'], f.clean(['1', '2']))
- self.assertEqual([u'1', u'2'], f.clean([1, '2']))
- self.assertEqual([u'1', u'2'], f.clean((1, '2')))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
- self.assertEqual([], f.clean([]))
- self.assertEqual([], f.clean(()))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, ['3'])
-
- def test_multiplechoicefield_3(self):
- f = MultipleChoiceField(choices=[('Numbers', (('1', 'One'), ('2', 'Two'))), ('Letters', (('3','A'),('4','B'))), ('5','Other')])
- self.assertEqual([u'1'], f.clean([1]))
- self.assertEqual([u'1'], f.clean(['1']))
- self.assertEqual([u'1', u'5'], f.clean([1, 5]))
- self.assertEqual([u'1', u'5'], f.clean([1, '5']))
- self.assertEqual([u'1', u'5'], f.clean(['1', 5]))
- self.assertEqual([u'1', u'5'], f.clean(['1', '5']))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 6 is not one of the available choices.']", f.clean, ['6'])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. 6 is not one of the available choices.']", f.clean, ['1','6'])
-
- # ComboField ##################################################################
-
- def test_combofield_1(self):
- f = ComboField(fields=[CharField(max_length=20), EmailField()])
- self.assertEqual(u'test@example.com', f.clean('test@example.com'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at most 20 characters (it has 28).']", f.clean, 'longemailaddress@example.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'not an e-mail')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
-
- def test_combofield_2(self):
- f = ComboField(fields=[CharField(max_length=20), EmailField()], required=False)
- self.assertEqual(u'test@example.com', f.clean('test@example.com'))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Ensure this value has at most 20 characters (it has 28).']", f.clean, 'longemailaddress@example.com')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'not an e-mail')
- self.assertEqual(u'', f.clean(''))
- self.assertEqual(u'', f.clean(None))
-
- # FilePathField ###############################################################
-
- def test_filepathfield_1(self):
- path = os.path.abspath(forms.__file__)
- path = os.path.dirname(path) + '/'
- self.assertTrue(fix_os_paths(path).endswith('/django/forms/'))
-
- def test_filepathfield_2(self):
- path = forms.__file__
- path = os.path.dirname(os.path.abspath(path)) + '/'
- f = FilePathField(path=path)
- f.choices = [p for p in f.choices if p[0].endswith('.py')]
- f.choices.sort()
- expected = [
- ('/django/forms/__init__.py', '__init__.py'),
- ('/django/forms/fields.py', 'fields.py'),
- ('/django/forms/forms.py', 'forms.py'),
- ('/django/forms/formsets.py', 'formsets.py'),
- ('/django/forms/models.py', 'models.py'),
- ('/django/forms/util.py', 'util.py'),
- ('/django/forms/widgets.py', 'widgets.py')
- ]
- for exp, got in zip(expected, fix_os_paths(f.choices)):
- self.assertEqual(exp[1], got[1])
- self.assertTrue(got[0].endswith(exp[0]))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Select a valid choice. fields.py is not one of the available choices.']", f.clean, 'fields.py')
- assert fix_os_paths(f.clean(path + 'fields.py')).endswith('/django/forms/fields.py')
-
- def test_filepathfield_3(self):
- path = forms.__file__
- path = os.path.dirname(os.path.abspath(path)) + '/'
- f = FilePathField(path=path, match='^.*?\.py$')
- f.choices.sort()
- expected = [
- ('/django/forms/__init__.py', '__init__.py'),
- ('/django/forms/fields.py', 'fields.py'),
- ('/django/forms/forms.py', 'forms.py'),
- ('/django/forms/formsets.py', 'formsets.py'),
- ('/django/forms/models.py', 'models.py'),
- ('/django/forms/util.py', 'util.py'),
- ('/django/forms/widgets.py', 'widgets.py')
- ]
- for exp, got in zip(expected, fix_os_paths(f.choices)):
- self.assertEqual(exp[1], got[1])
- self.assertTrue(got[0].endswith(exp[0]))
-
- def test_filepathfield_4(self):
- path = os.path.abspath(forms.__file__)
- path = os.path.dirname(path) + '/'
- f = FilePathField(path=path, recursive=True, match='^.*?\.py$')
- f.choices.sort()
- expected = [
- ('/django/forms/__init__.py', '__init__.py'),
- ('/django/forms/extras/__init__.py', 'extras/__init__.py'),
- ('/django/forms/extras/widgets.py', 'extras/widgets.py'),
- ('/django/forms/fields.py', 'fields.py'),
- ('/django/forms/forms.py', 'forms.py'),
- ('/django/forms/formsets.py', 'formsets.py'),
- ('/django/forms/models.py', 'models.py'),
- ('/django/forms/util.py', 'util.py'),
- ('/django/forms/widgets.py', 'widgets.py')
- ]
- for exp, got in zip(expected, fix_os_paths(f.choices)):
- self.assertEqual(exp[1], got[1])
- self.assertTrue(got[0].endswith(exp[0]))
-
- # SplitDateTimeField ##########################################################
-
- def test_splitdatetimefield_1(self):
- from django.forms.widgets import SplitDateTimeWidget
- f = SplitDateTimeField()
- assert isinstance(f.widget, SplitDateTimeWidget)
- self.assertEqual(datetime.datetime(2006, 1, 10, 7, 30), f.clean([datetime.date(2006, 1, 10), datetime.time(7, 30)]))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, None)
- self.assertRaisesErrorWithMessage(ValidationError, "[u'This field is required.']", f.clean, '')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.', u'Enter a valid time.']", f.clean, ['hello', 'there'])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10', 'there'])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, ['hello', '07:30'])
-
- def test_splitdatetimefield_2(self):
- f = SplitDateTimeField(required=False)
- self.assertEqual(datetime.datetime(2006, 1, 10, 7, 30), f.clean([datetime.date(2006, 1, 10), datetime.time(7, 30)]))
- self.assertEqual(datetime.datetime(2006, 1, 10, 7, 30), f.clean(['2006-01-10', '07:30']))
- self.assertEqual(None, f.clean(None))
- self.assertEqual(None, f.clean(''))
- self.assertEqual(None, f.clean(['']))
- self.assertEqual(None, f.clean(['', '']))
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.', u'Enter a valid time.']", f.clean, ['hello', 'there'])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10', 'there'])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, ['hello', '07:30'])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10', ''])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10'])
- self.assertRaisesErrorWithMessage(ValidationError, "[u'Enter a valid date.']", f.clean, ['', '07:30'])
diff --git a/parts/django/tests/regressiontests/forms/tests/forms.py b/parts/django/tests/regressiontests/forms/tests/forms.py
deleted file mode 100644
index e555a77..0000000
--- a/parts/django/tests/regressiontests/forms/tests/forms.py
+++ /dev/null
@@ -1,1700 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from decimal import Decimal
-import re
-import time
-from unittest import TestCase
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.forms import *
-from django.http import QueryDict
-from django.template import Template, Context
-from django.utils.datastructures import MultiValueDict, MergeDict
-from django.utils.safestring import mark_safe
-
-
-class Person(Form):
- first_name = CharField()
- last_name = CharField()
- birthday = DateField()
-
-
-class PersonNew(Form):
- first_name = CharField(widget=TextInput(attrs={'id': 'first_name_id'}))
- last_name = CharField()
- birthday = DateField()
-
-
-class FormsTestCase(TestCase):
- # A Form is a collection of Fields. It knows how to validate a set of data and it
- # knows how to render itself in a couple of default ways (e.g., an HTML table).
- # You can pass it data in __init__(), as a dictionary.
-
- def test_form(self):
- # Pass a dictionary to a Form's __init__().
- p = Person({'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9'})
-
- self.assertTrue(p.is_bound)
- self.assertEqual(p.errors, {})
- self.assertTrue(p.is_valid())
- self.assertEqual(p.errors.as_ul(), u'')
- self.assertEqual(p.errors.as_text(), u'')
- self.assertEqual(p.cleaned_data["first_name"], u'John')
- self.assertEqual(p.cleaned_data["last_name"], u'Lennon')
- self.assertEqual(p.cleaned_data["birthday"], datetime.date(1940, 10, 9))
- self.assertEqual(str(p['first_name']), '<input type="text" name="first_name" value="John" id="id_first_name" />')
- self.assertEqual(str(p['last_name']), '<input type="text" name="last_name" value="Lennon" id="id_last_name" />')
- self.assertEqual(str(p['birthday']), '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" />')
- try:
- p['nonexistentfield']
- self.fail('Attempts to access non-existent fields should fail.')
- except KeyError:
- pass
-
- form_output = []
-
- for boundfield in p:
- form_output.append(str(boundfield))
-
- self.assertEqual('\n'.join(form_output), """<input type="text" name="first_name" value="John" id="id_first_name" />
-<input type="text" name="last_name" value="Lennon" id="id_last_name" />
-<input type="text" name="birthday" value="1940-10-9" id="id_birthday" />""")
-
- form_output = []
-
- for boundfield in p:
- form_output.append([boundfield.label, boundfield.data])
-
- self.assertEqual(form_output, [
- ['First name', u'John'],
- ['Last name', u'Lennon'],
- ['Birthday', u'1940-10-9']
- ])
- self.assertEqual(str(p), """<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" value="John" id="id_first_name" /></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" value="Lennon" id="id_last_name" /></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></td></tr>""")
-
- def test_empty_dict(self):
- # Empty dictionaries are valid, too.
- p = Person({})
- self.assertTrue(p.is_bound)
- self.assertEqual(p.errors['first_name'], [u'This field is required.'])
- self.assertEqual(p.errors['last_name'], [u'This field is required.'])
- self.assertEqual(p.errors['birthday'], [u'This field is required.'])
- self.assertFalse(p.is_valid())
- try:
- p.cleaned_data
- self.fail('Attempts to access cleaned_data when validation fails should fail.')
- except AttributeError:
- pass
- self.assertEqual(str(p), """<tr><th><label for="id_first_name">First name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="first_name" id="id_first_name" /></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="last_name" id="id_last_name" /></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="birthday" id="id_birthday" /></td></tr>""")
- self.assertEqual(p.as_table(), """<tr><th><label for="id_first_name">First name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="first_name" id="id_first_name" /></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="last_name" id="id_last_name" /></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="birthday" id="id_birthday" /></td></tr>""")
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></li>""")
- self.assertEqual(p.as_p(), """<ul class="errorlist"><li>This field is required.</li></ul>
-<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></p>
-<ul class="errorlist"><li>This field is required.</li></ul>
-<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></p>
-<ul class="errorlist"><li>This field is required.</li></ul>
-<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></p>""")
-
- def test_unbound_form(self):
- # If you don't pass any values to the Form's __init__(), or if you pass None,
- # the Form will be considered unbound and won't do any validation. Form.errors
- # will be an empty dictionary *but* Form.is_valid() will return False.
- p = Person()
- self.assertFalse(p.is_bound)
- self.assertEqual(p.errors, {})
- self.assertFalse(p.is_valid())
- try:
- p.cleaned_data
- self.fail('Attempts to access cleaned_data when validation fails should fail.')
- except AttributeError:
- pass
- self.assertEqual(str(p), """<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" id="id_first_name" /></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" id="id_last_name" /></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" id="id_birthday" /></td></tr>""")
- self.assertEqual(p.as_table(), """<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" id="id_first_name" /></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" id="id_last_name" /></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" id="id_birthday" /></td></tr>""")
- self.assertEqual(p.as_ul(), """<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></li>
-<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></li>
-<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></li>""")
- self.assertEqual(p.as_p(), """<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></p>
-<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></p>
-<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></p>""")
-
- def test_unicode_values(self):
- # Unicode values are handled properly.
- p = Person({'first_name': u'John', 'last_name': u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111', 'birthday': '1940-10-9'})
- self.assertEqual(p.as_table(), u'<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" value="John" id="id_first_name" /></td></tr>\n<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></td></tr>\n<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></td></tr>')
- self.assertEqual(p.as_ul(), u'<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></li>\n<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></li>\n<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></li>')
- self.assertEqual(p.as_p(), u'<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></p>\n<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></p>\n<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></p>')
-
- p = Person({'last_name': u'Lennon'})
- self.assertEqual(p.errors['first_name'], [u'This field is required.'])
- self.assertEqual(p.errors['birthday'], [u'This field is required.'])
- self.assertFalse(p.is_valid())
- self.assertEqual(p.errors.as_ul(), u'<ul class="errorlist"><li>first_name<ul class="errorlist"><li>This field is required.</li></ul></li><li>birthday<ul class="errorlist"><li>This field is required.</li></ul></li></ul>')
- self.assertEqual(p.errors.as_text(), """* first_name
- * This field is required.
-* birthday
- * This field is required.""")
- try:
- p.cleaned_data
- self.fail('Attempts to access cleaned_data when validation fails should fail.')
- except AttributeError:
- pass
- self.assertEqual(p['first_name'].errors, [u'This field is required.'])
- self.assertEqual(p['first_name'].errors.as_ul(), u'<ul class="errorlist"><li>This field is required.</li></ul>')
- self.assertEqual(p['first_name'].errors.as_text(), u'* This field is required.')
-
- p = Person()
- self.assertEqual(str(p['first_name']), '<input type="text" name="first_name" id="id_first_name" />')
- self.assertEqual(str(p['last_name']), '<input type="text" name="last_name" id="id_last_name" />')
- self.assertEqual(str(p['birthday']), '<input type="text" name="birthday" id="id_birthday" />')
-
- def test_cleaned_data_only_fields(self):
- # cleaned_data will always *only* contain a key for fields defined in the
- # Form, even if you pass extra data when you define the Form. In this
- # example, we pass a bunch of extra fields to the form constructor,
- # but cleaned_data contains only the form's fields.
- data = {'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9', 'extra1': 'hello', 'extra2': 'hello'}
- p = Person(data)
- self.assertTrue(p.is_valid())
- self.assertEqual(p.cleaned_data['first_name'], u'John')
- self.assertEqual(p.cleaned_data['last_name'], u'Lennon')
- self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))
-
- def test_optional_data(self):
- # cleaned_data will include a key and value for *all* fields defined in the Form,
- # even if the Form's data didn't include a value for fields that are not
- # required. In this example, the data dictionary doesn't include a value for the
- # "nick_name" field, but cleaned_data includes it. For CharFields, it's set to the
- # empty string.
- class OptionalPersonForm(Form):
- first_name = CharField()
- last_name = CharField()
- nick_name = CharField(required=False)
-
- data = {'first_name': u'John', 'last_name': u'Lennon'}
- f = OptionalPersonForm(data)
- self.assertTrue(f.is_valid())
- self.assertEqual(f.cleaned_data['nick_name'], u'')
- self.assertEqual(f.cleaned_data['first_name'], u'John')
- self.assertEqual(f.cleaned_data['last_name'], u'Lennon')
-
- # For DateFields, it's set to None.
- class OptionalPersonForm(Form):
- first_name = CharField()
- last_name = CharField()
- birth_date = DateField(required=False)
-
- data = {'first_name': u'John', 'last_name': u'Lennon'}
- f = OptionalPersonForm(data)
- self.assertTrue(f.is_valid())
- self.assertEqual(f.cleaned_data['birth_date'], None)
- self.assertEqual(f.cleaned_data['first_name'], u'John')
- self.assertEqual(f.cleaned_data['last_name'], u'Lennon')
-
- def test_auto_id(self):
- # "auto_id" tells the Form to add an "id" attribute to each form element.
- # If it's a string that contains '%s', Django will use that as a format string
- # into which the field's name will be inserted. It will also put a <label> around
- # the human-readable labels for a field.
- p = Person(auto_id='%s_id')
- self.assertEqual(p.as_table(), """<tr><th><label for="first_name_id">First name:</label></th><td><input type="text" name="first_name" id="first_name_id" /></td></tr>
-<tr><th><label for="last_name_id">Last name:</label></th><td><input type="text" name="last_name" id="last_name_id" /></td></tr>
-<tr><th><label for="birthday_id">Birthday:</label></th><td><input type="text" name="birthday" id="birthday_id" /></td></tr>""")
- self.assertEqual(p.as_ul(), """<li><label for="first_name_id">First name:</label> <input type="text" name="first_name" id="first_name_id" /></li>
-<li><label for="last_name_id">Last name:</label> <input type="text" name="last_name" id="last_name_id" /></li>
-<li><label for="birthday_id">Birthday:</label> <input type="text" name="birthday" id="birthday_id" /></li>""")
- self.assertEqual(p.as_p(), """<p><label for="first_name_id">First name:</label> <input type="text" name="first_name" id="first_name_id" /></p>
-<p><label for="last_name_id">Last name:</label> <input type="text" name="last_name" id="last_name_id" /></p>
-<p><label for="birthday_id">Birthday:</label> <input type="text" name="birthday" id="birthday_id" /></p>""")
-
- def test_auto_id_true(self):
- # If auto_id is any True value whose str() does not contain '%s', the "id"
- # attribute will be the name of the field.
- p = Person(auto_id=True)
- self.assertEqual(p.as_ul(), """<li><label for="first_name">First name:</label> <input type="text" name="first_name" id="first_name" /></li>
-<li><label for="last_name">Last name:</label> <input type="text" name="last_name" id="last_name" /></li>
-<li><label for="birthday">Birthday:</label> <input type="text" name="birthday" id="birthday" /></li>""")
-
- def test_auto_id_false(self):
- # If auto_id is any False value, an "id" attribute won't be output unless it
- # was manually entered.
- p = Person(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>First name: <input type="text" name="first_name" /></li>
-<li>Last name: <input type="text" name="last_name" /></li>
-<li>Birthday: <input type="text" name="birthday" /></li>""")
-
- def test_id_on_field(self):
- # In this example, auto_id is False, but the "id" attribute for the "first_name"
- # field is given. Also note that field gets a <label>, while the others don't.
- p = PersonNew(auto_id=False)
- self.assertEqual(p.as_ul(), """<li><label for="first_name_id">First name:</label> <input type="text" id="first_name_id" name="first_name" /></li>
-<li>Last name: <input type="text" name="last_name" /></li>
-<li>Birthday: <input type="text" name="birthday" /></li>""")
-
- def test_auto_id_on_form_and_field(self):
- # If the "id" attribute is specified in the Form and auto_id is True, the "id"
- # attribute in the Form gets precedence.
- p = PersonNew(auto_id=True)
- self.assertEqual(p.as_ul(), """<li><label for="first_name_id">First name:</label> <input type="text" id="first_name_id" name="first_name" /></li>
-<li><label for="last_name">Last name:</label> <input type="text" name="last_name" id="last_name" /></li>
-<li><label for="birthday">Birthday:</label> <input type="text" name="birthday" id="birthday" /></li>""")
-
- def test_various_boolean_values(self):
- class SignupForm(Form):
- email = EmailField()
- get_spam = BooleanField()
-
- f = SignupForm(auto_id=False)
- self.assertEqual(str(f['email']), '<input type="text" name="email" />')
- self.assertEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" />')
-
- f = SignupForm({'email': 'test@example.com', 'get_spam': True}, auto_id=False)
- self.assertEqual(str(f['email']), '<input type="text" name="email" value="test@example.com" />')
- self.assertEqual(str(f['get_spam']), '<input checked="checked" type="checkbox" name="get_spam" />')
-
- # 'True' or 'true' should be rendered without a value attribute
- f = SignupForm({'email': 'test@example.com', 'get_spam': 'True'}, auto_id=False)
- self.assertEqual(str(f['get_spam']), '<input checked="checked" type="checkbox" name="get_spam" />')
-
- f = SignupForm({'email': 'test@example.com', 'get_spam': 'true'}, auto_id=False)
- self.assertEqual(str(f['get_spam']), '<input checked="checked" type="checkbox" name="get_spam" />')
-
- # A value of 'False' or 'false' should be rendered unchecked
- f = SignupForm({'email': 'test@example.com', 'get_spam': 'False'}, auto_id=False)
- self.assertEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" />')
-
- f = SignupForm({'email': 'test@example.com', 'get_spam': 'false'}, auto_id=False)
- self.assertEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" />')
-
- def test_widget_output(self):
- # Any Field can have a Widget class passed to its constructor:
- class ContactForm(Form):
- subject = CharField()
- message = CharField(widget=Textarea)
-
- f = ContactForm(auto_id=False)
- self.assertEqual(str(f['subject']), '<input type="text" name="subject" />')
- self.assertEqual(str(f['message']), '<textarea rows="10" cols="40" name="message"></textarea>')
-
- # as_textarea(), as_text() and as_hidden() are shortcuts for changing the output
- # widget type:
- self.assertEqual(f['subject'].as_textarea(), u'<textarea rows="10" cols="40" name="subject"></textarea>')
- self.assertEqual(f['message'].as_text(), u'<input type="text" name="message" />')
- self.assertEqual(f['message'].as_hidden(), u'<input type="hidden" name="message" />')
-
- # The 'widget' parameter to a Field can also be an instance:
- class ContactForm(Form):
- subject = CharField()
- message = CharField(widget=Textarea(attrs={'rows': 80, 'cols': 20}))
-
- f = ContactForm(auto_id=False)
- self.assertEqual(str(f['message']), '<textarea rows="80" cols="20" name="message"></textarea>')
-
- # Instance-level attrs are *not* carried over to as_textarea(), as_text() and
- # as_hidden():
- self.assertEqual(f['message'].as_text(), u'<input type="text" name="message" />')
- f = ContactForm({'subject': 'Hello', 'message': 'I love you.'}, auto_id=False)
- self.assertEqual(f['subject'].as_textarea(), u'<textarea rows="10" cols="40" name="subject">Hello</textarea>')
- self.assertEqual(f['message'].as_text(), u'<input type="text" name="message" value="I love you." />')
- self.assertEqual(f['message'].as_hidden(), u'<input type="hidden" name="message" value="I love you." />')
-
- def test_forms_with_choices(self):
- # For a form with a <select>, use ChoiceField:
- class FrameworkForm(Form):
- name = CharField()
- language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')])
-
- f = FrameworkForm(auto_id=False)
- self.assertEqual(str(f['language']), """<select name="language">
-<option value="P">Python</option>
-<option value="J">Java</option>
-</select>""")
- f = FrameworkForm({'name': 'Django', 'language': 'P'}, auto_id=False)
- self.assertEqual(str(f['language']), """<select name="language">
-<option value="P" selected="selected">Python</option>
-<option value="J">Java</option>
-</select>""")
-
- # A subtlety: If one of the choices' value is the empty string and the form is
- # unbound, then the <option> for the empty-string choice will get selected="selected".
- class FrameworkForm(Form):
- name = CharField()
- language = ChoiceField(choices=[('', '------'), ('P', 'Python'), ('J', 'Java')])
-
- f = FrameworkForm(auto_id=False)
- self.assertEqual(str(f['language']), """<select name="language">
-<option value="" selected="selected">------</option>
-<option value="P">Python</option>
-<option value="J">Java</option>
-</select>""")
-
- # You can specify widget attributes in the Widget constructor.
- class FrameworkForm(Form):
- name = CharField()
- language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')], widget=Select(attrs={'class': 'foo'}))
-
- f = FrameworkForm(auto_id=False)
- self.assertEqual(str(f['language']), """<select class="foo" name="language">
-<option value="P">Python</option>
-<option value="J">Java</option>
-</select>""")
- f = FrameworkForm({'name': 'Django', 'language': 'P'}, auto_id=False)
- self.assertEqual(str(f['language']), """<select class="foo" name="language">
-<option value="P" selected="selected">Python</option>
-<option value="J">Java</option>
-</select>""")
-
- # When passing a custom widget instance to ChoiceField, note that setting
- # 'choices' on the widget is meaningless. The widget will use the choices
- # defined on the Field, not the ones defined on the Widget.
- class FrameworkForm(Form):
- name = CharField()
- language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')], widget=Select(choices=[('R', 'Ruby'), ('P', 'Perl')], attrs={'class': 'foo'}))
-
- f = FrameworkForm(auto_id=False)
- self.assertEqual(str(f['language']), """<select class="foo" name="language">
-<option value="P">Python</option>
-<option value="J">Java</option>
-</select>""")
- f = FrameworkForm({'name': 'Django', 'language': 'P'}, auto_id=False)
- self.assertEqual(str(f['language']), """<select class="foo" name="language">
-<option value="P" selected="selected">Python</option>
-<option value="J">Java</option>
-</select>""")
-
- # You can set a ChoiceField's choices after the fact.
- class FrameworkForm(Form):
- name = CharField()
- language = ChoiceField()
-
- f = FrameworkForm(auto_id=False)
- self.assertEqual(str(f['language']), """<select name="language">
-</select>""")
- f.fields['language'].choices = [('P', 'Python'), ('J', 'Java')]
- self.assertEqual(str(f['language']), """<select name="language">
-<option value="P">Python</option>
-<option value="J">Java</option>
-</select>""")
-
- def test_forms_with_radio(self):
- # Add widget=RadioSelect to use that widget with a ChoiceField.
- class FrameworkForm(Form):
- name = CharField()
- language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')], widget=RadioSelect)
-
- f = FrameworkForm(auto_id=False)
- self.assertEqual(str(f['language']), """<ul>
-<li><label><input type="radio" name="language" value="P" /> Python</label></li>
-<li><label><input type="radio" name="language" value="J" /> Java</label></li>
-</ul>""")
- self.assertEqual(f.as_table(), """<tr><th>Name:</th><td><input type="text" name="name" /></td></tr>
-<tr><th>Language:</th><td><ul>
-<li><label><input type="radio" name="language" value="P" /> Python</label></li>
-<li><label><input type="radio" name="language" value="J" /> Java</label></li>
-</ul></td></tr>""")
- self.assertEqual(f.as_ul(), """<li>Name: <input type="text" name="name" /></li>
-<li>Language: <ul>
-<li><label><input type="radio" name="language" value="P" /> Python</label></li>
-<li><label><input type="radio" name="language" value="J" /> Java</label></li>
-</ul></li>""")
-
- # Regarding auto_id and <label>, RadioSelect is a special case. Each radio button
- # gets a distinct ID, formed by appending an underscore plus the button's
- # zero-based index.
- f = FrameworkForm(auto_id='id_%s')
- self.assertEqual(str(f['language']), """<ul>
-<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
-<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
-</ul>""")
-
- # When RadioSelect is used with auto_id, and the whole form is printed using
- # either as_table() or as_ul(), the label for the RadioSelect will point to the
- # ID of the *first* radio button.
- self.assertEqual(f.as_table(), """<tr><th><label for="id_name">Name:</label></th><td><input type="text" name="name" id="id_name" /></td></tr>
-<tr><th><label for="id_language_0">Language:</label></th><td><ul>
-<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
-<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
-</ul></td></tr>""")
- self.assertEqual(f.as_ul(), """<li><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" /></li>
-<li><label for="id_language_0">Language:</label> <ul>
-<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
-<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
-</ul></li>""")
- self.assertEqual(f.as_p(), """<p><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" /></p>
-<p><label for="id_language_0">Language:</label> <ul>
-<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
-<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
-</ul></p>""")
-
- def test_forms_wit_hmultiple_choice(self):
- # MultipleChoiceField is a special case, as its data is required to be a list:
- class SongForm(Form):
- name = CharField()
- composers = MultipleChoiceField()
-
- f = SongForm(auto_id=False)
- self.assertEqual(str(f['composers']), """<select multiple="multiple" name="composers">
-</select>""")
-
- class SongForm(Form):
- name = CharField()
- composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')])
-
- f = SongForm(auto_id=False)
- self.assertEqual(str(f['composers']), """<select multiple="multiple" name="composers">
-<option value="J">John Lennon</option>
-<option value="P">Paul McCartney</option>
-</select>""")
- f = SongForm({'name': 'Yesterday', 'composers': ['P']}, auto_id=False)
- self.assertEqual(str(f['name']), '<input type="text" name="name" value="Yesterday" />')
- self.assertEqual(str(f['composers']), """<select multiple="multiple" name="composers">
-<option value="J">John Lennon</option>
-<option value="P" selected="selected">Paul McCartney</option>
-</select>""")
-
- def test_hidden_data(self):
- class SongForm(Form):
- name = CharField()
- composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')])
-
- # MultipleChoiceField rendered as_hidden() is a special case. Because it can
- # have multiple values, its as_hidden() renders multiple <input type="hidden">
- # tags.
- f = SongForm({'name': 'Yesterday', 'composers': ['P']}, auto_id=False)
- self.assertEqual(f['composers'].as_hidden(), '<input type="hidden" name="composers" value="P" />')
- f = SongForm({'name': 'From Me To You', 'composers': ['P', 'J']}, auto_id=False)
- self.assertEqual(f['composers'].as_hidden(), """<input type="hidden" name="composers" value="P" />
-<input type="hidden" name="composers" value="J" />""")
-
- def test_mulitple_choice_checkbox(self):
- # MultipleChoiceField can also be used with the CheckboxSelectMultiple widget.
- class SongForm(Form):
- name = CharField()
- composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=CheckboxSelectMultiple)
-
- f = SongForm(auto_id=False)
- self.assertEqual(str(f['composers']), """<ul>
-<li><label><input type="checkbox" name="composers" value="J" /> John Lennon</label></li>
-<li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
-</ul>""")
- f = SongForm({'composers': ['J']}, auto_id=False)
- self.assertEqual(str(f['composers']), """<ul>
-<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li>
-<li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
-</ul>""")
- f = SongForm({'composers': ['J', 'P']}, auto_id=False)
- self.assertEqual(str(f['composers']), """<ul>
-<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li>
-<li><label><input checked="checked" type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
-</ul>""")
-
- def test_checkbox_auto_id(self):
- # Regarding auto_id, CheckboxSelectMultiple is a special case. Each checkbox
- # gets a distinct ID, formed by appending an underscore plus the checkbox's
- # zero-based index.
- class SongForm(Form):
- name = CharField()
- composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=CheckboxSelectMultiple)
-
- f = SongForm(auto_id='%s_id')
- self.assertEqual(str(f['composers']), """<ul>
-<li><label for="composers_id_0"><input type="checkbox" name="composers" value="J" id="composers_id_0" /> John Lennon</label></li>
-<li><label for="composers_id_1"><input type="checkbox" name="composers" value="P" id="composers_id_1" /> Paul McCartney</label></li>
-</ul>""")
-
- def test_multiple_choice_list_data(self):
- # Data for a MultipleChoiceField should be a list. QueryDict, MultiValueDict and
- # MergeDict (when created as a merge of MultiValueDicts) conveniently work with
- # this.
- class SongForm(Form):
- name = CharField()
- composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=CheckboxSelectMultiple)
-
- data = {'name': 'Yesterday', 'composers': ['J', 'P']}
- f = SongForm(data)
- self.assertEqual(f.errors, {})
-
- data = QueryDict('name=Yesterday&composers=J&composers=P')
- f = SongForm(data)
- self.assertEqual(f.errors, {})
-
- data = MultiValueDict(dict(name=['Yesterday'], composers=['J', 'P']))
- f = SongForm(data)
- self.assertEqual(f.errors, {})
-
- data = MergeDict(MultiValueDict(dict(name=['Yesterday'], composers=['J', 'P'])))
- f = SongForm(data)
- self.assertEqual(f.errors, {})
-
- def test_multiple_hidden(self):
- class SongForm(Form):
- name = CharField()
- composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=CheckboxSelectMultiple)
-
- # The MultipleHiddenInput widget renders multiple values as hidden fields.
- class SongFormHidden(Form):
- name = CharField()
- composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=MultipleHiddenInput)
-
- f = SongFormHidden(MultiValueDict(dict(name=['Yesterday'], composers=['J', 'P'])), auto_id=False)
- self.assertEqual(f.as_ul(), """<li>Name: <input type="text" name="name" value="Yesterday" /><input type="hidden" name="composers" value="J" />
-<input type="hidden" name="composers" value="P" /></li>""")
-
- # When using CheckboxSelectMultiple, the framework expects a list of input and
- # returns a list of input.
- f = SongForm({'name': 'Yesterday'}, auto_id=False)
- self.assertEqual(f.errors['composers'], [u'This field is required.'])
- f = SongForm({'name': 'Yesterday', 'composers': ['J']}, auto_id=False)
- self.assertEqual(f.errors, {})
- self.assertEqual(f.cleaned_data['composers'], [u'J'])
- self.assertEqual(f.cleaned_data['name'], u'Yesterday')
- f = SongForm({'name': 'Yesterday', 'composers': ['J', 'P']}, auto_id=False)
- self.assertEqual(f.errors, {})
- self.assertEqual(f.cleaned_data['composers'], [u'J', u'P'])
- self.assertEqual(f.cleaned_data['name'], u'Yesterday')
-
- def test_escaping(self):
- # Validation errors are HTML-escaped when output as HTML.
- class EscapingForm(Form):
- special_name = CharField(label="<em>Special</em> Field")
- special_safe_name = CharField(label=mark_safe("<em>Special</em> Field"))
-
- def clean_special_name(self):
- raise ValidationError("Something's wrong with '%s'" % self.cleaned_data['special_name'])
-
- def clean_special_safe_name(self):
- raise ValidationError(mark_safe("'<b>%s</b>' is a safe string" % self.cleaned_data['special_safe_name']))
-
- f = EscapingForm({'special_name': "Nothing to escape", 'special_safe_name': "Nothing to escape"}, auto_id=False)
- self.assertEqual(f.as_table(), """<tr><th>&lt;em&gt;Special&lt;/em&gt; Field:</th><td><ul class="errorlist"><li>Something&#39;s wrong with &#39;Nothing to escape&#39;</li></ul><input type="text" name="special_name" value="Nothing to escape" /></td></tr>
-<tr><th><em>Special</em> Field:</th><td><ul class="errorlist"><li>'<b>Nothing to escape</b>' is a safe string</li></ul><input type="text" name="special_safe_name" value="Nothing to escape" /></td></tr>""")
- f = EscapingForm({
- 'special_name': "Should escape < & > and <script>alert('xss')</script>",
- 'special_safe_name': "<i>Do not escape</i>"
- }, auto_id=False)
- self.assertEqual(f.as_table(), """<tr><th>&lt;em&gt;Special&lt;/em&gt; Field:</th><td><ul class="errorlist"><li>Something&#39;s wrong with &#39;Should escape &lt; &amp; &gt; and &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;&#39;</li></ul><input type="text" name="special_name" value="Should escape &lt; &amp; &gt; and &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;" /></td></tr>
-<tr><th><em>Special</em> Field:</th><td><ul class="errorlist"><li>'<b><i>Do not escape</i></b>' is a safe string</li></ul><input type="text" name="special_safe_name" value="&lt;i&gt;Do not escape&lt;/i&gt;" /></td></tr>""")
-
- def test_validating_multiple_fields(self):
- # There are a couple of ways to do multiple-field validation. If you want the
- # validation message to be associated with a particular field, implement the
- # clean_XXX() method on the Form, where XXX is the field name. As in
- # Field.clean(), the clean_XXX() method should return the cleaned value. In the
- # clean_XXX() method, you have access to self.cleaned_data, which is a dictionary
- # of all the data that has been cleaned *so far*, in order by the fields,
- # including the current field (e.g., the field XXX if you're in clean_XXX()).
- class UserRegistration(Form):
- username = CharField(max_length=10)
- password1 = CharField(widget=PasswordInput)
- password2 = CharField(widget=PasswordInput)
-
- def clean_password2(self):
- if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
- raise ValidationError(u'Please make sure your passwords match.')
-
- return self.cleaned_data['password2']
-
- f = UserRegistration(auto_id=False)
- self.assertEqual(f.errors, {})
- f = UserRegistration({}, auto_id=False)
- self.assertEqual(f.errors['username'], [u'This field is required.'])
- self.assertEqual(f.errors['password1'], [u'This field is required.'])
- self.assertEqual(f.errors['password2'], [u'This field is required.'])
- f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)
- self.assertEqual(f.errors['password2'], [u'Please make sure your passwords match.'])
- f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}, auto_id=False)
- self.assertEqual(f.errors, {})
- self.assertEqual(f.cleaned_data['username'], u'adrian')
- self.assertEqual(f.cleaned_data['password1'], u'foo')
- self.assertEqual(f.cleaned_data['password2'], u'foo')
-
- # Another way of doing multiple-field validation is by implementing the
- # Form's clean() method. If you do this, any ValidationError raised by that
- # method will not be associated with a particular field; it will have a
- # special-case association with the field named '__all__'.
- # Note that in Form.clean(), you have access to self.cleaned_data, a dictionary of
- # all the fields/values that have *not* raised a ValidationError. Also note
- # Form.clean() is required to return a dictionary of all clean data.
- class UserRegistration(Form):
- username = CharField(max_length=10)
- password1 = CharField(widget=PasswordInput)
- password2 = CharField(widget=PasswordInput)
-
- def clean(self):
- if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
- raise ValidationError(u'Please make sure your passwords match.')
-
- return self.cleaned_data
-
- f = UserRegistration(auto_id=False)
- self.assertEqual(f.errors, {})
- f = UserRegistration({}, auto_id=False)
- self.assertEqual(f.as_table(), """<tr><th>Username:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="username" maxlength="10" /></td></tr>
-<tr><th>Password1:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password1" /></td></tr>
-<tr><th>Password2:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password2" /></td></tr>""")
- self.assertEqual(f.errors['username'], [u'This field is required.'])
- self.assertEqual(f.errors['password1'], [u'This field is required.'])
- self.assertEqual(f.errors['password2'], [u'This field is required.'])
- f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)
- self.assertEqual(f.errors['__all__'], [u'Please make sure your passwords match.'])
- self.assertEqual(f.as_table(), """<tr><td colspan="2"><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></td></tr>
-<tr><th>Username:</th><td><input type="text" name="username" value="adrian" maxlength="10" /></td></tr>
-<tr><th>Password1:</th><td><input type="password" name="password1" value="foo" /></td></tr>
-<tr><th>Password2:</th><td><input type="password" name="password2" value="bar" /></td></tr>""")
- self.assertEqual(f.as_ul(), """<li><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></li>
-<li>Username: <input type="text" name="username" value="adrian" maxlength="10" /></li>
-<li>Password1: <input type="password" name="password1" value="foo" /></li>
-<li>Password2: <input type="password" name="password2" value="bar" /></li>""")
- f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}, auto_id=False)
- self.assertEqual(f.errors, {})
- self.assertEqual(f.cleaned_data['username'], u'adrian')
- self.assertEqual(f.cleaned_data['password1'], u'foo')
- self.assertEqual(f.cleaned_data['password2'], u'foo')
-
- def test_dynamic_construction(self):
- # It's possible to construct a Form dynamically by adding to the self.fields
- # dictionary in __init__(). Don't forget to call Form.__init__() within the
- # subclass' __init__().
- class Person(Form):
- first_name = CharField()
- last_name = CharField()
-
- def __init__(self, *args, **kwargs):
- super(Person, self).__init__(*args, **kwargs)
- self.fields['birthday'] = DateField()
-
- p = Person(auto_id=False)
- self.assertEqual(p.as_table(), """<tr><th>First name:</th><td><input type="text" name="first_name" /></td></tr>
-<tr><th>Last name:</th><td><input type="text" name="last_name" /></td></tr>
-<tr><th>Birthday:</th><td><input type="text" name="birthday" /></td></tr>""")
-
- # Instances of a dynamic Form do not persist fields from one Form instance to
- # the next.
- class MyForm(Form):
- def __init__(self, data=None, auto_id=False, field_list=[]):
- Form.__init__(self, data, auto_id=auto_id)
-
- for field in field_list:
- self.fields[field[0]] = field[1]
-
- field_list = [('field1', CharField()), ('field2', CharField())]
- my_form = MyForm(field_list=field_list)
- self.assertEqual(my_form.as_table(), """<tr><th>Field1:</th><td><input type="text" name="field1" /></td></tr>
-<tr><th>Field2:</th><td><input type="text" name="field2" /></td></tr>""")
- field_list = [('field3', CharField()), ('field4', CharField())]
- my_form = MyForm(field_list=field_list)
- self.assertEqual(my_form.as_table(), """<tr><th>Field3:</th><td><input type="text" name="field3" /></td></tr>
-<tr><th>Field4:</th><td><input type="text" name="field4" /></td></tr>""")
-
- class MyForm(Form):
- default_field_1 = CharField()
- default_field_2 = CharField()
-
- def __init__(self, data=None, auto_id=False, field_list=[]):
- Form.__init__(self, data, auto_id=auto_id)
-
- for field in field_list:
- self.fields[field[0]] = field[1]
-
- field_list = [('field1', CharField()), ('field2', CharField())]
- my_form = MyForm(field_list=field_list)
- self.assertEqual(my_form.as_table(), """<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" /></td></tr>
-<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" /></td></tr>
-<tr><th>Field1:</th><td><input type="text" name="field1" /></td></tr>
-<tr><th>Field2:</th><td><input type="text" name="field2" /></td></tr>""")
- field_list = [('field3', CharField()), ('field4', CharField())]
- my_form = MyForm(field_list=field_list)
- self.assertEqual(my_form.as_table(), """<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" /></td></tr>
-<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" /></td></tr>
-<tr><th>Field3:</th><td><input type="text" name="field3" /></td></tr>
-<tr><th>Field4:</th><td><input type="text" name="field4" /></td></tr>""")
-
- # Similarly, changes to field attributes do not persist from one Form instance
- # to the next.
- class Person(Form):
- first_name = CharField(required=False)
- last_name = CharField(required=False)
-
- def __init__(self, names_required=False, *args, **kwargs):
- super(Person, self).__init__(*args, **kwargs)
-
- if names_required:
- self.fields['first_name'].required = True
- self.fields['first_name'].widget.attrs['class'] = 'required'
- self.fields['last_name'].required = True
- self.fields['last_name'].widget.attrs['class'] = 'required'
-
- f = Person(names_required=False)
- self.assertEqual(f['first_name'].field.required, f['last_name'].field.required, (False, False))
- self.assertEqual(f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs, ({}, {}))
- f = Person(names_required=True)
- self.assertEqual(f['first_name'].field.required, f['last_name'].field.required, (True, True))
- self.assertEqual(f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs, ({'class': 'required'}, {'class': 'required'}))
- f = Person(names_required=False)
- self.assertEqual(f['first_name'].field.required, f['last_name'].field.required, (False, False))
- self.assertEqual(f['first_name'].field.widget.attrs, f['last_name'].field.widget.attrs, ({}, {}))
-
- class Person(Form):
- first_name = CharField(max_length=30)
- last_name = CharField(max_length=30)
-
- def __init__(self, name_max_length=None, *args, **kwargs):
- super(Person, self).__init__(*args, **kwargs)
-
- if name_max_length:
- self.fields['first_name'].max_length = name_max_length
- self.fields['last_name'].max_length = name_max_length
-
- f = Person(name_max_length=None)
- self.assertEqual(f['first_name'].field.max_length, f['last_name'].field.max_length, (30, 30))
- f = Person(name_max_length=20)
- self.assertEqual(f['first_name'].field.max_length, f['last_name'].field.max_length, (20, 20))
- f = Person(name_max_length=None)
- self.assertEqual(f['first_name'].field.max_length, f['last_name'].field.max_length, (30, 30))
-
- def test_hidden_widget(self):
- # HiddenInput widgets are displayed differently in the as_table(), as_ul())
- # and as_p() output of a Form -- their verbose names are not displayed, and a
- # separate row is not displayed. They're displayed in the last row of the
- # form, directly after that row's form element.
- class Person(Form):
- first_name = CharField()
- last_name = CharField()
- hidden_text = CharField(widget=HiddenInput)
- birthday = DateField()
-
- p = Person(auto_id=False)
- self.assertEqual(p.as_table(), """<tr><th>First name:</th><td><input type="text" name="first_name" /></td></tr>
-<tr><th>Last name:</th><td><input type="text" name="last_name" /></td></tr>
-<tr><th>Birthday:</th><td><input type="text" name="birthday" /><input type="hidden" name="hidden_text" /></td></tr>""")
- self.assertEqual(p.as_ul(), """<li>First name: <input type="text" name="first_name" /></li>
-<li>Last name: <input type="text" name="last_name" /></li>
-<li>Birthday: <input type="text" name="birthday" /><input type="hidden" name="hidden_text" /></li>""")
- self.assertEqual(p.as_p(), """<p>First name: <input type="text" name="first_name" /></p>
-<p>Last name: <input type="text" name="last_name" /></p>
-<p>Birthday: <input type="text" name="birthday" /><input type="hidden" name="hidden_text" /></p>""")
-
- # With auto_id set, a HiddenInput still gets an ID, but it doesn't get a label.
- p = Person(auto_id='id_%s')
- self.assertEqual(p.as_table(), """<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" id="id_first_name" /></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" id="id_last_name" /></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" id="id_birthday" /><input type="hidden" name="hidden_text" id="id_hidden_text" /></td></tr>""")
- self.assertEqual(p.as_ul(), """<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></li>
-<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></li>
-<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /><input type="hidden" name="hidden_text" id="id_hidden_text" /></li>""")
- self.assertEqual(p.as_p(), """<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></p>
-<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></p>
-<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /><input type="hidden" name="hidden_text" id="id_hidden_text" /></p>""")
-
- # If a field with a HiddenInput has errors, the as_table() and as_ul() output
- # will include the error message(s) with the text "(Hidden field [fieldname]) "
- # prepended. This message is displayed at the top of the output, regardless of
- # its field's order in the form.
- p = Person({'first_name': 'John', 'last_name': 'Lennon', 'birthday': '1940-10-9'}, auto_id=False)
- self.assertEqual(p.as_table(), """<tr><td colspan="2"><ul class="errorlist"><li>(Hidden field hidden_text) This field is required.</li></ul></td></tr>
-<tr><th>First name:</th><td><input type="text" name="first_name" value="John" /></td></tr>
-<tr><th>Last name:</th><td><input type="text" name="last_name" value="Lennon" /></td></tr>
-<tr><th>Birthday:</th><td><input type="text" name="birthday" value="1940-10-9" /><input type="hidden" name="hidden_text" /></td></tr>""")
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>(Hidden field hidden_text) This field is required.</li></ul></li>
-<li>First name: <input type="text" name="first_name" value="John" /></li>
-<li>Last name: <input type="text" name="last_name" value="Lennon" /></li>
-<li>Birthday: <input type="text" name="birthday" value="1940-10-9" /><input type="hidden" name="hidden_text" /></li>""")
- self.assertEqual(p.as_p(), """<ul class="errorlist"><li>(Hidden field hidden_text) This field is required.</li></ul>
-<p>First name: <input type="text" name="first_name" value="John" /></p>
-<p>Last name: <input type="text" name="last_name" value="Lennon" /></p>
-<p>Birthday: <input type="text" name="birthday" value="1940-10-9" /><input type="hidden" name="hidden_text" /></p>""")
-
- # A corner case: It's possible for a form to have only HiddenInputs.
- class TestForm(Form):
- foo = CharField(widget=HiddenInput)
- bar = CharField(widget=HiddenInput)
-
- p = TestForm(auto_id=False)
- self.assertEqual(p.as_table(), '<input type="hidden" name="foo" /><input type="hidden" name="bar" />')
- self.assertEqual(p.as_ul(), '<input type="hidden" name="foo" /><input type="hidden" name="bar" />')
- self.assertEqual(p.as_p(), '<input type="hidden" name="foo" /><input type="hidden" name="bar" />')
-
- def test_field_order(self):
- # A Form's fields are displayed in the same order in which they were defined.
- class TestForm(Form):
- field1 = CharField()
- field2 = CharField()
- field3 = CharField()
- field4 = CharField()
- field5 = CharField()
- field6 = CharField()
- field7 = CharField()
- field8 = CharField()
- field9 = CharField()
- field10 = CharField()
- field11 = CharField()
- field12 = CharField()
- field13 = CharField()
- field14 = CharField()
-
- p = TestForm(auto_id=False)
- self.assertEqual(p.as_table(), """<tr><th>Field1:</th><td><input type="text" name="field1" /></td></tr>
-<tr><th>Field2:</th><td><input type="text" name="field2" /></td></tr>
-<tr><th>Field3:</th><td><input type="text" name="field3" /></td></tr>
-<tr><th>Field4:</th><td><input type="text" name="field4" /></td></tr>
-<tr><th>Field5:</th><td><input type="text" name="field5" /></td></tr>
-<tr><th>Field6:</th><td><input type="text" name="field6" /></td></tr>
-<tr><th>Field7:</th><td><input type="text" name="field7" /></td></tr>
-<tr><th>Field8:</th><td><input type="text" name="field8" /></td></tr>
-<tr><th>Field9:</th><td><input type="text" name="field9" /></td></tr>
-<tr><th>Field10:</th><td><input type="text" name="field10" /></td></tr>
-<tr><th>Field11:</th><td><input type="text" name="field11" /></td></tr>
-<tr><th>Field12:</th><td><input type="text" name="field12" /></td></tr>
-<tr><th>Field13:</th><td><input type="text" name="field13" /></td></tr>
-<tr><th>Field14:</th><td><input type="text" name="field14" /></td></tr>""")
-
- def test_form_html_attributes(self):
- # Some Field classes have an effect on the HTML attributes of their associated
- # Widget. If you set max_length in a CharField and its associated widget is
- # either a TextInput or PasswordInput, then the widget's rendered HTML will
- # include the "maxlength" attribute.
- class UserRegistration(Form):
- username = CharField(max_length=10) # uses TextInput by default
- password = CharField(max_length=10, widget=PasswordInput)
- realname = CharField(max_length=10, widget=TextInput) # redundantly define widget, just to test
- address = CharField() # no max_length defined here
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" maxlength="10" /></li>
-<li>Realname: <input type="text" name="realname" maxlength="10" /></li>
-<li>Address: <input type="text" name="address" /></li>""")
-
- # If you specify a custom "attrs" that includes the "maxlength" attribute,
- # the Field's max_length attribute will override whatever "maxlength" you specify
- # in "attrs".
- class UserRegistration(Form):
- username = CharField(max_length=10, widget=TextInput(attrs={'maxlength': 20}))
- password = CharField(max_length=10, widget=PasswordInput)
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" maxlength="10" /></li>""")
-
- def test_specifying_labels(self):
- # You can specify the label for a field by using the 'label' argument to a Field
- # class. If you don't specify 'label', Django will use the field name with
- # underscores converted to spaces, and the initial letter capitalized.
- class UserRegistration(Form):
- username = CharField(max_length=10, label='Your username')
- password1 = CharField(widget=PasswordInput)
- password2 = CharField(widget=PasswordInput, label='Password (again)')
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Your username: <input type="text" name="username" maxlength="10" /></li>
-<li>Password1: <input type="password" name="password1" /></li>
-<li>Password (again): <input type="password" name="password2" /></li>""")
-
- # Labels for as_* methods will only end in a colon if they don't end in other
- # punctuation already.
- class Questions(Form):
- q1 = CharField(label='The first question')
- q2 = CharField(label='What is your name?')
- q3 = CharField(label='The answer to life is:')
- q4 = CharField(label='Answer this question!')
- q5 = CharField(label='The last question. Period.')
-
- self.assertEqual(Questions(auto_id=False).as_p(), """<p>The first question: <input type="text" name="q1" /></p>
-<p>What is your name? <input type="text" name="q2" /></p>
-<p>The answer to life is: <input type="text" name="q3" /></p>
-<p>Answer this question! <input type="text" name="q4" /></p>
-<p>The last question. Period. <input type="text" name="q5" /></p>""")
- self.assertEqual(Questions().as_p(), """<p><label for="id_q1">The first question:</label> <input type="text" name="q1" id="id_q1" /></p>
-<p><label for="id_q2">What is your name?</label> <input type="text" name="q2" id="id_q2" /></p>
-<p><label for="id_q3">The answer to life is:</label> <input type="text" name="q3" id="id_q3" /></p>
-<p><label for="id_q4">Answer this question!</label> <input type="text" name="q4" id="id_q4" /></p>
-<p><label for="id_q5">The last question. Period.</label> <input type="text" name="q5" id="id_q5" /></p>""")
-
- # A label can be a Unicode object or a bytestring with special characters.
- class UserRegistration(Form):
- username = CharField(max_length=10, label='ŠĐĆŽćžšđ')
- password = CharField(widget=PasswordInput, label=u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), u'<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="text" name="username" maxlength="10" /></li>\n<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="password" name="password" /></li>')
-
- # If a label is set to the empty string for a field, that field won't get a label.
- class UserRegistration(Form):
- username = CharField(max_length=10, label='')
- password = CharField(widget=PasswordInput)
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li> <input type="text" name="username" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>""")
- p = UserRegistration(auto_id='id_%s')
- self.assertEqual(p.as_ul(), """<li> <input id="id_username" type="text" name="username" maxlength="10" /></li>
-<li><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></li>""")
-
- # If label is None, Django will auto-create the label from the field name. This
- # is default behavior.
- class UserRegistration(Form):
- username = CharField(max_length=10, label=None)
- password = CharField(widget=PasswordInput)
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>""")
- p = UserRegistration(auto_id='id_%s')
- self.assertEqual(p.as_ul(), """<li><label for="id_username">Username:</label> <input id="id_username" type="text" name="username" maxlength="10" /></li>
-<li><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></li>""")
-
- def test_label_suffix(self):
- # You can specify the 'label_suffix' argument to a Form class to modify the
- # punctuation symbol used at the end of a label. By default, the colon (:) is
- # used, and is only appended to the label if the label doesn't already end with a
- # punctuation symbol: ., !, ? or :. If you specify a different suffix, it will
- # be appended regardless of the last character of the label.
- class FavoriteForm(Form):
- color = CharField(label='Favorite color?')
- animal = CharField(label='Favorite animal')
-
- f = FavoriteForm(auto_id=False)
- self.assertEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" /></li>
-<li>Favorite animal: <input type="text" name="animal" /></li>""")
- f = FavoriteForm(auto_id=False, label_suffix='?')
- self.assertEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" /></li>
-<li>Favorite animal? <input type="text" name="animal" /></li>""")
- f = FavoriteForm(auto_id=False, label_suffix='')
- self.assertEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" /></li>
-<li>Favorite animal <input type="text" name="animal" /></li>""")
- f = FavoriteForm(auto_id=False, label_suffix=u'\u2192')
- self.assertEqual(f.as_ul(), u'<li>Favorite color? <input type="text" name="color" /></li>\n<li>Favorite animal\u2192 <input type="text" name="animal" /></li>')
-
- def test_initial_data(self):
- # You can specify initial data for a field by using the 'initial' argument to a
- # Field class. This initial data is displayed when a Form is rendered with *no*
- # data. It is not displayed when a Form is rendered with any data (including an
- # empty dictionary). Also, the initial value is *not* used if data for a
- # particular required field isn't provided.
- class UserRegistration(Form):
- username = CharField(max_length=10, initial='django')
- password = CharField(widget=PasswordInput)
-
- # Here, we're not submitting any data, so the initial value will be displayed.)
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="django" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>""")
-
- # Here, we're submitting data, so the initial value will *not* be displayed.
- p = UserRegistration({}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
- p = UserRegistration({'username': u''}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
- p = UserRegistration({'username': u'foo'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
-
- # An 'initial' value is *not* used as a fallback if data is not provided. In this
- # example, we don't provide a value for 'username', and the form raises a
- # validation error rather than using the initial value for 'username'.
- p = UserRegistration({'password': 'secret'})
- self.assertEqual(p.errors['username'], [u'This field is required.'])
- self.assertFalse(p.is_valid())
-
- def test_dynamic_initial_data(self):
- # The previous technique dealt with "hard-coded" initial data, but it's also
- # possible to specify initial data after you've already created the Form class
- # (i.e., at runtime). Use the 'initial' parameter to the Form constructor. This
- # should be a dictionary containing initial values for one or more fields in the
- # form, keyed by field name.
- class UserRegistration(Form):
- username = CharField(max_length=10)
- password = CharField(widget=PasswordInput)
-
- # Here, we're not submitting any data, so the initial value will be displayed.)
- p = UserRegistration(initial={'username': 'django'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="django" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>""")
- p = UserRegistration(initial={'username': 'stephane'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="stephane" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>""")
-
- # The 'initial' parameter is meaningless if you pass data.
- p = UserRegistration({}, initial={'username': 'django'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
- p = UserRegistration({'username': u''}, initial={'username': 'django'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
- p = UserRegistration({'username': u'foo'}, initial={'username': 'django'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
-
- # A dynamic 'initial' value is *not* used as a fallback if data is not provided.
- # In this example, we don't provide a value for 'username', and the form raises a
- # validation error rather than using the initial value for 'username'.
- p = UserRegistration({'password': 'secret'}, initial={'username': 'django'})
- self.assertEqual(p.errors['username'], [u'This field is required.'])
- self.assertFalse(p.is_valid())
-
- # If a Form defines 'initial' *and* 'initial' is passed as a parameter to Form(),
- # then the latter will get precedence.
- class UserRegistration(Form):
- username = CharField(max_length=10, initial='django')
- password = CharField(widget=PasswordInput)
-
- p = UserRegistration(initial={'username': 'babik'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="babik" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>""")
-
- def test_callable_initial_data(self):
- # The previous technique dealt with raw values as initial data, but it's also
- # possible to specify callable data.
- class UserRegistration(Form):
- username = CharField(max_length=10)
- password = CharField(widget=PasswordInput)
- options = MultipleChoiceField(choices=[('f','foo'),('b','bar'),('w','whiz')])
-
- # We need to define functions that get called later.)
- def initial_django():
- return 'django'
-
- def initial_stephane():
- return 'stephane'
-
- def initial_options():
- return ['f','b']
-
- def initial_other_options():
- return ['b','w']
-
- # Here, we're not submitting any data, so the initial value will be displayed.)
- p = UserRegistration(initial={'username': initial_django, 'options': initial_options}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="django" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>
-<li>Options: <select multiple="multiple" name="options">
-<option value="f" selected="selected">foo</option>
-<option value="b" selected="selected">bar</option>
-<option value="w">whiz</option>
-</select></li>""")
-
- # The 'initial' parameter is meaningless if you pass data.
- p = UserRegistration({}, initial={'username': initial_django, 'options': initial_options}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Options: <select multiple="multiple" name="options">
-<option value="f">foo</option>
-<option value="b">bar</option>
-<option value="w">whiz</option>
-</select></li>""")
- p = UserRegistration({'username': u''}, initial={'username': initial_django}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Options: <select multiple="multiple" name="options">
-<option value="f">foo</option>
-<option value="b">bar</option>
-<option value="w">whiz</option>
-</select></li>""")
- p = UserRegistration({'username': u'foo', 'options':['f','b']}, initial={'username': initial_django}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
-<li>Options: <select multiple="multiple" name="options">
-<option value="f" selected="selected">foo</option>
-<option value="b" selected="selected">bar</option>
-<option value="w">whiz</option>
-</select></li>""")
-
- # A callable 'initial' value is *not* used as a fallback if data is not provided.
- # In this example, we don't provide a value for 'username', and the form raises a
- # validation error rather than using the initial value for 'username'.
- p = UserRegistration({'password': 'secret'}, initial={'username': initial_django, 'options': initial_options})
- self.assertEqual(p.errors['username'], [u'This field is required.'])
- self.assertFalse(p.is_valid())
-
- # If a Form defines 'initial' *and* 'initial' is passed as a parameter to Form(),
- # then the latter will get precedence.
- class UserRegistration(Form):
- username = CharField(max_length=10, initial=initial_django)
- password = CharField(widget=PasswordInput)
- options = MultipleChoiceField(choices=[('f','foo'),('b','bar'),('w','whiz')], initial=initial_other_options)
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="django" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>
-<li>Options: <select multiple="multiple" name="options">
-<option value="f">foo</option>
-<option value="b" selected="selected">bar</option>
-<option value="w" selected="selected">whiz</option>
-</select></li>""")
- p = UserRegistration(initial={'username': initial_stephane, 'options': initial_options}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="stephane" maxlength="10" /></li>
-<li>Password: <input type="password" name="password" /></li>
-<li>Options: <select multiple="multiple" name="options">
-<option value="f" selected="selected">foo</option>
-<option value="b" selected="selected">bar</option>
-<option value="w">whiz</option>
-</select></li>""")
-
- def test_help_text(self):
- # You can specify descriptive text for a field by using the 'help_text' argument)
- class UserRegistration(Form):
- username = CharField(max_length=10, help_text='e.g., user@example.com')
- password = CharField(widget=PasswordInput, help_text='Choose wisely.')
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /> e.g., user@example.com</li>
-<li>Password: <input type="password" name="password" /> Choose wisely.</li>""")
- self.assertEqual(p.as_p(), """<p>Username: <input type="text" name="username" maxlength="10" /> e.g., user@example.com</p>
-<p>Password: <input type="password" name="password" /> Choose wisely.</p>""")
- self.assertEqual(p.as_table(), """<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" /><br />e.g., user@example.com</td></tr>
-<tr><th>Password:</th><td><input type="password" name="password" /><br />Choose wisely.</td></tr>""")
-
- # The help text is displayed whether or not data is provided for the form.
- p = UserRegistration({'username': u'foo'}, auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /> e.g., user@example.com</li>
-<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /> Choose wisely.</li>""")
-
- # help_text is not displayed for hidden fields. It can be used for documentation
- # purposes, though.
- class UserRegistration(Form):
- username = CharField(max_length=10, help_text='e.g., user@example.com')
- password = CharField(widget=PasswordInput)
- next = CharField(widget=HiddenInput, initial='/', help_text='Redirect destination')
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /> e.g., user@example.com</li>
-<li>Password: <input type="password" name="password" /><input type="hidden" name="next" value="/" /></li>""")
-
- # Help text can include arbitrary Unicode characters.
- class UserRegistration(Form):
- username = CharField(max_length=10, help_text='ŠĐĆŽćžšđ')
-
- p = UserRegistration(auto_id=False)
- self.assertEqual(p.as_ul(), u'<li>Username: <input type="text" name="username" maxlength="10" /> \u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</li>')
-
- def test_subclassing_forms(self):
- # You can subclass a Form to add fields. The resulting form subclass will have
- # all of the fields of the parent Form, plus whichever fields you define in the
- # subclass.
- class Person(Form):
- first_name = CharField()
- last_name = CharField()
- birthday = DateField()
-
- class Musician(Person):
- instrument = CharField()
-
- p = Person(auto_id=False)
- self.assertEqual(p.as_ul(), """<li>First name: <input type="text" name="first_name" /></li>
-<li>Last name: <input type="text" name="last_name" /></li>
-<li>Birthday: <input type="text" name="birthday" /></li>""")
- m = Musician(auto_id=False)
- self.assertEqual(m.as_ul(), """<li>First name: <input type="text" name="first_name" /></li>
-<li>Last name: <input type="text" name="last_name" /></li>
-<li>Birthday: <input type="text" name="birthday" /></li>
-<li>Instrument: <input type="text" name="instrument" /></li>""")
-
- # Yes, you can subclass multiple forms. The fields are added in the order in
- # which the parent classes are listed.
- class Person(Form):
- first_name = CharField()
- last_name = CharField()
- birthday = DateField()
-
- class Instrument(Form):
- instrument = CharField()
-
- class Beatle(Person, Instrument):
- haircut_type = CharField()
-
- b = Beatle(auto_id=False)
- self.assertEqual(b.as_ul(), """<li>First name: <input type="text" name="first_name" /></li>
-<li>Last name: <input type="text" name="last_name" /></li>
-<li>Birthday: <input type="text" name="birthday" /></li>
-<li>Instrument: <input type="text" name="instrument" /></li>
-<li>Haircut type: <input type="text" name="haircut_type" /></li>""")
-
- def test_forms_with_prefixes(self):
- # Sometimes it's necessary to have multiple forms display on the same HTML page,
- # or multiple copies of the same form. We can accomplish this with form prefixes.
- # Pass the keyword argument 'prefix' to the Form constructor to use this feature.
- # This value will be prepended to each HTML form field name. One way to think
- # about this is "namespaces for HTML forms". Notice that in the data argument,
- # each field's key has the prefix, in this case 'person1', prepended to the
- # actual field name.
- class Person(Form):
- first_name = CharField()
- last_name = CharField()
- birthday = DateField()
-
- data = {
- 'person1-first_name': u'John',
- 'person1-last_name': u'Lennon',
- 'person1-birthday': u'1940-10-9'
- }
- p = Person(data, prefix='person1')
- self.assertEqual(p.as_ul(), """<li><label for="id_person1-first_name">First name:</label> <input type="text" name="person1-first_name" value="John" id="id_person1-first_name" /></li>
-<li><label for="id_person1-last_name">Last name:</label> <input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" /></li>
-<li><label for="id_person1-birthday">Birthday:</label> <input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" /></li>""")
- self.assertEqual(str(p['first_name']), '<input type="text" name="person1-first_name" value="John" id="id_person1-first_name" />')
- self.assertEqual(str(p['last_name']), '<input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" />')
- self.assertEqual(str(p['birthday']), '<input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" />')
- self.assertEqual(p.errors, {})
- self.assertTrue(p.is_valid())
- self.assertEqual(p.cleaned_data['first_name'], u'John')
- self.assertEqual(p.cleaned_data['last_name'], u'Lennon')
- self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))
-
- # Let's try submitting some bad data to make sure form.errors and field.errors
- # work as expected.
- data = {
- 'person1-first_name': u'',
- 'person1-last_name': u'',
- 'person1-birthday': u''
- }
- p = Person(data, prefix='person1')
- self.assertEqual(p.errors['first_name'], [u'This field is required.'])
- self.assertEqual(p.errors['last_name'], [u'This field is required.'])
- self.assertEqual(p.errors['birthday'], [u'This field is required.'])
- self.assertEqual(p['first_name'].errors, [u'This field is required.'])
- try:
- p['person1-first_name'].errors
- self.fail('Attempts to access non-existent fields should fail.')
- except KeyError:
- pass
-
- # In this example, the data doesn't have a prefix, but the form requires it, so
- # the form doesn't "see" the fields.
- data = {
- 'first_name': u'John',
- 'last_name': u'Lennon',
- 'birthday': u'1940-10-9'
- }
- p = Person(data, prefix='person1')
- self.assertEqual(p.errors['first_name'], [u'This field is required.'])
- self.assertEqual(p.errors['last_name'], [u'This field is required.'])
- self.assertEqual(p.errors['birthday'], [u'This field is required.'])
-
- # With prefixes, a single data dictionary can hold data for multiple instances
- # of the same form.
- data = {
- 'person1-first_name': u'John',
- 'person1-last_name': u'Lennon',
- 'person1-birthday': u'1940-10-9',
- 'person2-first_name': u'Jim',
- 'person2-last_name': u'Morrison',
- 'person2-birthday': u'1943-12-8'
- }
- p1 = Person(data, prefix='person1')
- self.assertTrue(p1.is_valid())
- self.assertEqual(p1.cleaned_data['first_name'], u'John')
- self.assertEqual(p1.cleaned_data['last_name'], u'Lennon')
- self.assertEqual(p1.cleaned_data['birthday'], datetime.date(1940, 10, 9))
- p2 = Person(data, prefix='person2')
- self.assertTrue(p2.is_valid())
- self.assertEqual(p2.cleaned_data['first_name'], u'Jim')
- self.assertEqual(p2.cleaned_data['last_name'], u'Morrison')
- self.assertEqual(p2.cleaned_data['birthday'], datetime.date(1943, 12, 8))
-
- # By default, forms append a hyphen between the prefix and the field name, but a
- # form can alter that behavior by implementing the add_prefix() method. This
- # method takes a field name and returns the prefixed field, according to
- # self.prefix.
- class Person(Form):
- first_name = CharField()
- last_name = CharField()
- birthday = DateField()
-
- def add_prefix(self, field_name):
- return self.prefix and '%s-prefix-%s' % (self.prefix, field_name) or field_name
-
- p = Person(prefix='foo')
- self.assertEqual(p.as_ul(), """<li><label for="id_foo-prefix-first_name">First name:</label> <input type="text" name="foo-prefix-first_name" id="id_foo-prefix-first_name" /></li>
-<li><label for="id_foo-prefix-last_name">Last name:</label> <input type="text" name="foo-prefix-last_name" id="id_foo-prefix-last_name" /></li>
-<li><label for="id_foo-prefix-birthday">Birthday:</label> <input type="text" name="foo-prefix-birthday" id="id_foo-prefix-birthday" /></li>""")
- data = {
- 'foo-prefix-first_name': u'John',
- 'foo-prefix-last_name': u'Lennon',
- 'foo-prefix-birthday': u'1940-10-9'
- }
- p = Person(data, prefix='foo')
- self.assertTrue(p.is_valid())
- self.assertEqual(p.cleaned_data['first_name'], u'John')
- self.assertEqual(p.cleaned_data['last_name'], u'Lennon')
- self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))
-
- def test_forms_with_null_boolean(self):
- # NullBooleanField is a bit of a special case because its presentation (widget)
- # is different than its data. This is handled transparently, though.
- class Person(Form):
- name = CharField()
- is_cool = NullBooleanField()
-
- p = Person({'name': u'Joe'}, auto_id=False)
- self.assertEqual(str(p['is_cool']), """<select name="is_cool">
-<option value="1" selected="selected">Unknown</option>
-<option value="2">Yes</option>
-<option value="3">No</option>
-</select>""")
- p = Person({'name': u'Joe', 'is_cool': u'1'}, auto_id=False)
- self.assertEqual(str(p['is_cool']), """<select name="is_cool">
-<option value="1" selected="selected">Unknown</option>
-<option value="2">Yes</option>
-<option value="3">No</option>
-</select>""")
- p = Person({'name': u'Joe', 'is_cool': u'2'}, auto_id=False)
- self.assertEqual(str(p['is_cool']), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2" selected="selected">Yes</option>
-<option value="3">No</option>
-</select>""")
- p = Person({'name': u'Joe', 'is_cool': u'3'}, auto_id=False)
- self.assertEqual(str(p['is_cool']), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2">Yes</option>
-<option value="3" selected="selected">No</option>
-</select>""")
- p = Person({'name': u'Joe', 'is_cool': True}, auto_id=False)
- self.assertEqual(str(p['is_cool']), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2" selected="selected">Yes</option>
-<option value="3">No</option>
-</select>""")
- p = Person({'name': u'Joe', 'is_cool': False}, auto_id=False)
- self.assertEqual(str(p['is_cool']), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2">Yes</option>
-<option value="3" selected="selected">No</option>
-</select>""")
-
- def test_forms_with_file_fields(self):
- # FileFields are a special case because they take their data from the request.FILES,
- # not request.POST.
- class FileForm(Form):
- file1 = FileField()
-
- f = FileForm(auto_id=False)
- self.assertEqual(f.as_table(), '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>')
-
- f = FileForm(data={}, files={}, auto_id=False)
- self.assertEqual(f.as_table(), '<tr><th>File1:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="file" name="file1" /></td></tr>')
-
- f = FileForm(data={}, files={'file1': SimpleUploadedFile('name', '')}, auto_id=False)
- self.assertEqual(f.as_table(), '<tr><th>File1:</th><td><ul class="errorlist"><li>The submitted file is empty.</li></ul><input type="file" name="file1" /></td></tr>')
-
- f = FileForm(data={}, files={'file1': 'something that is not a file'}, auto_id=False)
- self.assertEqual(f.as_table(), '<tr><th>File1:</th><td><ul class="errorlist"><li>No file was submitted. Check the encoding type on the form.</li></ul><input type="file" name="file1" /></td></tr>')
-
- f = FileForm(data={}, files={'file1': SimpleUploadedFile('name', 'some content')}, auto_id=False)
- self.assertEqual(f.as_table(), '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>')
- self.assertTrue(f.is_valid())
-
- f = FileForm(data={}, files={'file1': SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', 'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह')}, auto_id=False)
- self.assertEqual(f.as_table(), '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>')
-
- def test_basic_processing_in_view(self):
- class UserRegistration(Form):
- username = CharField(max_length=10)
- password1 = CharField(widget=PasswordInput)
- password2 = CharField(widget=PasswordInput)
-
- def clean(self):
- if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
- raise ValidationError(u'Please make sure your passwords match.')
-
- return self.cleaned_data
-
- def my_function(method, post_data):
- if method == 'POST':
- form = UserRegistration(post_data, auto_id=False)
- else:
- form = UserRegistration(auto_id=False)
-
- if form.is_valid():
- return 'VALID: %r' % form.cleaned_data
-
- t = Template('<form action="" method="post">\n<table>\n{{ form }}\n</table>\n<input type="submit" />\n</form>')
- return t.render(Context({'form': form}))
-
- # Case 1: GET (an empty form, with no errors).)
- self.assertEqual(my_function('GET', {}), """<form action="" method="post">
-<table>
-<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" /></td></tr>
-<tr><th>Password1:</th><td><input type="password" name="password1" /></td></tr>
-<tr><th>Password2:</th><td><input type="password" name="password2" /></td></tr>
-</table>
-<input type="submit" />
-</form>""")
- # Case 2: POST with erroneous data (a redisplayed form, with errors).)
- self.assertEqual(my_function('POST', {'username': 'this-is-a-long-username', 'password1': 'foo', 'password2': 'bar'}), """<form action="" method="post">
-<table>
-<tr><td colspan="2"><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></td></tr>
-<tr><th>Username:</th><td><ul class="errorlist"><li>Ensure this value has at most 10 characters (it has 23).</li></ul><input type="text" name="username" value="this-is-a-long-username" maxlength="10" /></td></tr>
-<tr><th>Password1:</th><td><input type="password" name="password1" value="foo" /></td></tr>
-<tr><th>Password2:</th><td><input type="password" name="password2" value="bar" /></td></tr>
-</table>
-<input type="submit" />
-</form>""")
- # Case 3: POST with valid data (the success message).)
- self.assertEqual(my_function('POST', {'username': 'adrian', 'password1': 'secret', 'password2': 'secret'}), "VALID: {'username': u'adrian', 'password1': u'secret', 'password2': u'secret'}")
-
- def test_templates_with_forms(self):
- class UserRegistration(Form):
- username = CharField(max_length=10, help_text="Good luck picking a username that doesn't already exist.")
- password1 = CharField(widget=PasswordInput)
- password2 = CharField(widget=PasswordInput)
-
- def clean(self):
- if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
- raise ValidationError(u'Please make sure your passwords match.')
-
- return self.cleaned_data
-
- # You have full flexibility in displaying form fields in a template. Just pass a
- # Form instance to the template, and use "dot" access to refer to individual
- # fields. Note, however, that this flexibility comes with the responsibility of
- # displaying all the errors, including any that might not be associated with a
- # particular field.
- t = Template('''<form action="">
-{{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p>
-{{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p>
-{{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p>
-<input type="submit" />
-</form>''')
- self.assertEqual(t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action="">
-<p><label>Your username: <input type="text" name="username" maxlength="10" /></label></p>
-<p><label>Password: <input type="password" name="password1" /></label></p>
-<p><label>Password (again): <input type="password" name="password2" /></label></p>
-<input type="submit" />
-</form>""")
- self.assertEqual(t.render(Context({'form': UserRegistration({'username': 'django'}, auto_id=False)})), """<form action="">
-<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" /></label></p>
-<ul class="errorlist"><li>This field is required.</li></ul><p><label>Password: <input type="password" name="password1" /></label></p>
-<ul class="errorlist"><li>This field is required.</li></ul><p><label>Password (again): <input type="password" name="password2" /></label></p>
-<input type="submit" />
-</form>""")
-
- # Use form.[field].label to output a field's label. You can specify the label for
- # a field by using the 'label' argument to a Field class. If you don't specify
- # 'label', Django will use the field name with underscores converted to spaces,
- # and the initial letter capitalized.
- t = Template('''<form action="">
-<p><label>{{ form.username.label }}: {{ form.username }}</label></p>
-<p><label>{{ form.password1.label }}: {{ form.password1 }}</label></p>
-<p><label>{{ form.password2.label }}: {{ form.password2 }}</label></p>
-<input type="submit" />
-</form>''')
- self.assertEqual(t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action="">
-<p><label>Username: <input type="text" name="username" maxlength="10" /></label></p>
-<p><label>Password1: <input type="password" name="password1" /></label></p>
-<p><label>Password2: <input type="password" name="password2" /></label></p>
-<input type="submit" />
-</form>""")
-
- # User form.[field].label_tag to output a field's label with a <label> tag
- # wrapped around it, but *only* if the given field has an "id" attribute.
- # Recall from above that passing the "auto_id" argument to a Form gives each
- # field an "id" attribute.
- t = Template('''<form action="">
-<p>{{ form.username.label_tag }}: {{ form.username }}</p>
-<p>{{ form.password1.label_tag }}: {{ form.password1 }}</p>
-<p>{{ form.password2.label_tag }}: {{ form.password2 }}</p>
-<input type="submit" />
-</form>''')
- self.assertEqual(t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action="">
-<p>Username: <input type="text" name="username" maxlength="10" /></p>
-<p>Password1: <input type="password" name="password1" /></p>
-<p>Password2: <input type="password" name="password2" /></p>
-<input type="submit" />
-</form>""")
- self.assertEqual(t.render(Context({'form': UserRegistration(auto_id='id_%s')})), """<form action="">
-<p><label for="id_username">Username</label>: <input id="id_username" type="text" name="username" maxlength="10" /></p>
-<p><label for="id_password1">Password1</label>: <input type="password" name="password1" id="id_password1" /></p>
-<p><label for="id_password2">Password2</label>: <input type="password" name="password2" id="id_password2" /></p>
-<input type="submit" />
-</form>""")
-
- # User form.[field].help_text to output a field's help text. If the given field
- # does not have help text, nothing will be output.
- t = Template('''<form action="">
-<p>{{ form.username.label_tag }}: {{ form.username }}<br />{{ form.username.help_text }}</p>
-<p>{{ form.password1.label_tag }}: {{ form.password1 }}</p>
-<p>{{ form.password2.label_tag }}: {{ form.password2 }}</p>
-<input type="submit" />
-</form>''')
- self.assertEqual(t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action="">
-<p>Username: <input type="text" name="username" maxlength="10" /><br />Good luck picking a username that doesn&#39;t already exist.</p>
-<p>Password1: <input type="password" name="password1" /></p>
-<p>Password2: <input type="password" name="password2" /></p>
-<input type="submit" />
-</form>""")
- self.assertEqual(Template('{{ form.password1.help_text }}').render(Context({'form': UserRegistration(auto_id=False)})), u'')
-
- # The label_tag() method takes an optional attrs argument: a dictionary of HTML
- # attributes to add to the <label> tag.
- f = UserRegistration(auto_id='id_%s')
- form_output = []
-
- for bf in f:
- form_output.append(bf.label_tag(attrs={'class': 'pretty'}))
-
- self.assertEqual(form_output, [
- '<label for="id_username" class="pretty">Username</label>',
- '<label for="id_password1" class="pretty">Password1</label>',
- '<label for="id_password2" class="pretty">Password2</label>',
- ])
-
- # To display the errors that aren't associated with a particular field -- e.g.,
- # the errors caused by Form.clean() -- use {{ form.non_field_errors }} in the
- # template. If used on its own, it is displayed as a <ul> (or an empty string, if
- # the list of errors is empty). You can also use it in {% if %} statements.
- t = Template('''<form action="">
-{{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p>
-{{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p>
-{{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p>
-<input type="submit" />
-</form>''')
- self.assertEqual(t.render(Context({'form': UserRegistration({'username': 'django', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)})), """<form action="">
-<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" /></label></p>
-<p><label>Password: <input type="password" name="password1" value="foo" /></label></p>
-<p><label>Password (again): <input type="password" name="password2" value="bar" /></label></p>
-<input type="submit" />
-</form>""")
- t = Template('''<form action="">
-{{ form.non_field_errors }}
-{{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p>
-{{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p>
-{{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p>
-<input type="submit" />
-</form>''')
- self.assertEqual(t.render(Context({'form': UserRegistration({'username': 'django', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)})), """<form action="">
-<ul class="errorlist"><li>Please make sure your passwords match.</li></ul>
-<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" /></label></p>
-<p><label>Password: <input type="password" name="password1" value="foo" /></label></p>
-<p><label>Password (again): <input type="password" name="password2" value="bar" /></label></p>
-<input type="submit" />
-</form>""")
-
- def test_empty_permitted(self):
- # Sometimes (pretty much in formsets) we want to allow a form to pass validation
- # if it is completely empty. We can accomplish this by using the empty_permitted
- # agrument to a form constructor.
- class SongForm(Form):
- artist = CharField()
- name = CharField()
-
- # First let's show what happens id empty_permitted=False (the default):
- data = {'artist': '', 'song': ''}
- form = SongForm(data, empty_permitted=False)
- self.assertFalse(form.is_valid())
- self.assertEqual(form.errors, {'name': [u'This field is required.'], 'artist': [u'This field is required.']})
- try:
- form.cleaned_data
- self.fail('Attempts to access cleaned_data when validation fails should fail.')
- except AttributeError:
- pass
-
- # Now let's show what happens when empty_permitted=True and the form is empty.
- form = SongForm(data, empty_permitted=True)
- self.assertTrue(form.is_valid())
- self.assertEqual(form.errors, {})
- self.assertEqual(form.cleaned_data, {})
-
- # But if we fill in data for one of the fields, the form is no longer empty and
- # the whole thing must pass validation.
- data = {'artist': 'The Doors', 'song': ''}
- form = SongForm(data, empty_permitted=False)
- self.assertFalse(form.is_valid())
- self.assertEqual(form.errors, {'name': [u'This field is required.']})
- try:
- form.cleaned_data
- self.fail('Attempts to access cleaned_data when validation fails should fail.')
- except AttributeError:
- pass
-
- # If a field is not given in the data then None is returned for its data. Lets
- # make sure that when checking for empty_permitted that None is treated
- # accordingly.
- data = {'artist': None, 'song': ''}
- form = SongForm(data, empty_permitted=True)
- self.assertTrue(form.is_valid())
-
- # However, we *really* need to be sure we are checking for None as any data in
- # initial that returns False on a boolean call needs to be treated literally.
- class PriceForm(Form):
- amount = FloatField()
- qty = IntegerField()
-
- data = {'amount': '0.0', 'qty': ''}
- form = PriceForm(data, initial={'amount': 0.0}, empty_permitted=True)
- self.assertTrue(form.is_valid())
-
- def test_extracting_hidden_and_visible(self):
- class SongForm(Form):
- token = CharField(widget=HiddenInput)
- artist = CharField()
- name = CharField()
-
- form = SongForm()
- self.assertEqual([f.name for f in form.hidden_fields()], ['token'])
- self.assertEqual([f.name for f in form.visible_fields()], ['artist', 'name'])
-
- def test_hidden_initial_gets_id(self):
- class MyForm(Form):
- field1 = CharField(max_length=50, show_hidden_initial=True)
-
- self.assertEqual(MyForm().as_table(), '<tr><th><label for="id_field1">Field1:</label></th><td><input id="id_field1" type="text" name="field1" maxlength="50" /><input type="hidden" name="initial-field1" id="initial-id_field1" /></td></tr>')
-
- def test_error_html_required_html_classes(self):
- class Person(Form):
- name = CharField()
- is_cool = NullBooleanField()
- email = EmailField(required=False)
- age = IntegerField()
-
- p = Person({})
- p.error_css_class = 'error'
- p.required_css_class = 'required'
-
- self.assertEqual(p.as_ul(), """<li class="required error"><ul class="errorlist"><li>This field is required.</li></ul><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" /></li>
-<li class="required"><label for="id_is_cool">Is cool:</label> <select name="is_cool" id="id_is_cool">
-<option value="1" selected="selected">Unknown</option>
-<option value="2">Yes</option>
-<option value="3">No</option>
-</select></li>
-<li><label for="id_email">Email:</label> <input type="text" name="email" id="id_email" /></li>
-<li class="required error"><ul class="errorlist"><li>This field is required.</li></ul><label for="id_age">Age:</label> <input type="text" name="age" id="id_age" /></li>""")
-
- self.assertEqual(p.as_p(), """<ul class="errorlist"><li>This field is required.</li></ul>
-<p class="required error"><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" /></p>
-<p class="required"><label for="id_is_cool">Is cool:</label> <select name="is_cool" id="id_is_cool">
-<option value="1" selected="selected">Unknown</option>
-<option value="2">Yes</option>
-<option value="3">No</option>
-</select></p>
-<p><label for="id_email">Email:</label> <input type="text" name="email" id="id_email" /></p>
-<ul class="errorlist"><li>This field is required.</li></ul>
-<p class="required error"><label for="id_age">Age:</label> <input type="text" name="age" id="id_age" /></p>""")
-
- self.assertEqual(p.as_table(), """<tr class="required error"><th><label for="id_name">Name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="name" id="id_name" /></td></tr>
-<tr class="required"><th><label for="id_is_cool">Is cool:</label></th><td><select name="is_cool" id="id_is_cool">
-<option value="1" selected="selected">Unknown</option>
-<option value="2">Yes</option>
-<option value="3">No</option>
-</select></td></tr>
-<tr><th><label for="id_email">Email:</label></th><td><input type="text" name="email" id="id_email" /></td></tr>
-<tr class="required error"><th><label for="id_age">Age:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="age" id="id_age" /></td></tr>""")
-
- def test_label_split_datetime_not_displayed(self):
- class EventForm(Form):
- happened_at = SplitDateTimeField(widget=widgets.SplitHiddenDateTimeWidget)
-
- form = EventForm()
- self.assertEqual(form.as_ul(), u'<input type="hidden" name="happened_at_0" id="id_happened_at_0" /><input type="hidden" name="happened_at_1" id="id_happened_at_1" />')
diff --git a/parts/django/tests/regressiontests/forms/tests/formsets.py b/parts/django/tests/regressiontests/forms/tests/formsets.py
deleted file mode 100644
index db94797..0000000
--- a/parts/django/tests/regressiontests/forms/tests/formsets.py
+++ /dev/null
@@ -1,763 +0,0 @@
-# -*- coding: utf-8 -*-
-from unittest import TestCase
-from django.forms import Form, CharField, IntegerField, ValidationError
-from django.forms.formsets import formset_factory, BaseFormSet
-
-
-class Choice(Form):
- choice = CharField()
- votes = IntegerField()
-
-
-# FormSet allows us to use multiple instance of the same form on 1 page. For now,
-# the best way to create a FormSet is by using the formset_factory function.
-ChoiceFormSet = formset_factory(Choice)
-
-
-class FavoriteDrinkForm(Form):
- name = CharField()
-
-
-class BaseFavoriteDrinksFormSet(BaseFormSet):
- def clean(self):
- seen_drinks = []
-
- for drink in self.cleaned_data:
- if drink['name'] in seen_drinks:
- raise ValidationError('You may only specify a drink once.')
-
- seen_drinks.append(drink['name'])
-
-
-# Let's define a FormSet that takes a list of favorite drinks, but raises an
-# error if there are any duplicates. Used in ``test_clean_hook``,
-# ``test_regression_6926`` & ``test_regression_12878``.
-FavoriteDrinksFormSet = formset_factory(FavoriteDrinkForm,
- formset=BaseFavoriteDrinksFormSet, extra=3)
-
-
-class FormsFormsetTestCase(TestCase):
- def test_basic_formset(self):
- # A FormSet constructor takes the same arguments as Form. Let's create a FormSet
- # for adding data. By default, it displays 1 blank form. It can display more,
- # but we'll look at how to do so later.
- formset = ChoiceFormSet(auto_id=False, prefix='choices')
- self.assertEqual(str(formset), """<input type="hidden" name="choices-TOTAL_FORMS" value="1" /><input type="hidden" name="choices-INITIAL_FORMS" value="0" /><input type="hidden" name="choices-MAX_NUM_FORMS" />
-<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" /></td></tr>
-<tr><th>Votes:</th><td><input type="text" name="choices-0-votes" /></td></tr>""")
-
- # On thing to note is that there needs to be a special value in the data. This
- # value tells the FormSet how many forms were displayed so it can tell how
- # many forms it needs to clean and validate. You could use javascript to create
- # new forms on the client side, but they won't get validated unless you increment
- # the TOTAL_FORMS field appropriately.
-
- data = {
- 'choices-TOTAL_FORMS': '1', # the number of forms rendered
- 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- }
- # We treat FormSet pretty much like we would treat a normal Form. FormSet has an
- # is_valid method, and a cleaned_data or errors attribute depending on whether all
- # the forms passed validation. However, unlike a Form instance, cleaned_data and
- # errors will be a list of dicts rather than just a single dict.
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}])
-
- # If a FormSet was not passed any data, its is_valid method should return False.
- formset = ChoiceFormSet()
- self.assertFalse(formset.is_valid())
-
- def test_formset_validation(self):
- # FormSet instances can also have an error attribute if validation failed for
- # any of the forms.
-
- data = {
- 'choices-TOTAL_FORMS': '1', # the number of forms rendered
- 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '',
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.errors, [{'votes': [u'This field is required.']}])
-
- def test_formset_initial_data(self):
- # We can also prefill a FormSet with existing data by providing an ``initial``
- # argument to the constructor. ``initial`` should be a list of dicts. By default,
- # an extra blank form is included.
-
- initial = [{'choice': u'Calexico', 'votes': 100}]
- formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
- form_output = []
-
- for form in formset.forms:
- form_output.append(form.as_ul())
-
- self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
-<li>Votes: <input type="text" name="choices-0-votes" value="100" /></li>
-<li>Choice: <input type="text" name="choices-1-choice" /></li>
-<li>Votes: <input type="text" name="choices-1-votes" /></li>""")
-
- # Let's simulate what would happen if we submitted this form.
-
- data = {
- 'choices-TOTAL_FORMS': '2', # the number of forms rendered
- 'choices-INITIAL_FORMS': '1', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-1-choice': '',
- 'choices-1-votes': '',
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}, {}])
-
- def test_second_form_partially_filled(self):
- # But the second form was blank! Shouldn't we get some errors? No. If we display
- # a form as blank, it's ok for it to be submitted as blank. If we fill out even
- # one of the fields of a blank form though, it will be validated. We may want to
- # required that at least x number of forms are completed, but we'll show how to
- # handle that later.
-
- data = {
- 'choices-TOTAL_FORMS': '2', # the number of forms rendered
- 'choices-INITIAL_FORMS': '1', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-1-choice': 'The Decemberists',
- 'choices-1-votes': '', # missing value
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.errors, [{}, {'votes': [u'This field is required.']}])
-
- def test_delete_prefilled_data(self):
- # If we delete data that was pre-filled, we should get an error. Simply removing
- # data from form fields isn't the proper way to delete it. We'll see how to
- # handle that case later.
-
- data = {
- 'choices-TOTAL_FORMS': '2', # the number of forms rendered
- 'choices-INITIAL_FORMS': '1', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': '', # deleted value
- 'choices-0-votes': '', # deleted value
- 'choices-1-choice': '',
- 'choices-1-votes': '',
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.errors, [{'votes': [u'This field is required.'], 'choice': [u'This field is required.']}, {}])
-
- def test_displaying_more_than_one_blank_form(self):
- # Displaying more than 1 blank form ###########################################
- # We can also display more than 1 empty form at a time. To do so, pass a
- # extra argument to formset_factory.
- ChoiceFormSet = formset_factory(Choice, extra=3)
-
- formset = ChoiceFormSet(auto_id=False, prefix='choices')
- form_output = []
-
- for form in formset.forms:
- form_output.append(form.as_ul())
-
- self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" /></li>
-<li>Votes: <input type="text" name="choices-0-votes" /></li>
-<li>Choice: <input type="text" name="choices-1-choice" /></li>
-<li>Votes: <input type="text" name="choices-1-votes" /></li>
-<li>Choice: <input type="text" name="choices-2-choice" /></li>
-<li>Votes: <input type="text" name="choices-2-votes" /></li>""")
-
- # Since we displayed every form as blank, we will also accept them back as blank.
- # This may seem a little strange, but later we will show how to require a minimum
- # number of forms to be completed.
-
- data = {
- 'choices-TOTAL_FORMS': '3', # the number of forms rendered
- 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': '',
- 'choices-0-votes': '',
- 'choices-1-choice': '',
- 'choices-1-votes': '',
- 'choices-2-choice': '',
- 'choices-2-votes': '',
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- self.assertEqual([form.cleaned_data for form in formset.forms], [{}, {}, {}])
-
- def test_single_form_completed(self):
- # We can just fill out one of the forms.
-
- data = {
- 'choices-TOTAL_FORMS': '3', # the number of forms rendered
- 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-1-choice': '',
- 'choices-1-votes': '',
- 'choices-2-choice': '',
- 'choices-2-votes': '',
- }
-
- ChoiceFormSet = formset_factory(Choice, extra=3)
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}, {}, {}])
-
- def test_second_form_partially_filled_2(self):
- # And once again, if we try to partially complete a form, validation will fail.
-
- data = {
- 'choices-TOTAL_FORMS': '3', # the number of forms rendered
- 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-1-choice': 'The Decemberists',
- 'choices-1-votes': '', # missing value
- 'choices-2-choice': '',
- 'choices-2-votes': '',
- }
-
- ChoiceFormSet = formset_factory(Choice, extra=3)
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.errors, [{}, {'votes': [u'This field is required.']}, {}])
-
- def test_more_initial_data(self):
- # The extra argument also works when the formset is pre-filled with initial
- # data.
-
- data = {
- 'choices-TOTAL_FORMS': '3', # the number of forms rendered
- 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-1-choice': '',
- 'choices-1-votes': '', # missing value
- 'choices-2-choice': '',
- 'choices-2-votes': '',
- }
-
- initial = [{'choice': u'Calexico', 'votes': 100}]
- ChoiceFormSet = formset_factory(Choice, extra=3)
- formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
- form_output = []
-
- for form in formset.forms:
- form_output.append(form.as_ul())
-
- self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
-<li>Votes: <input type="text" name="choices-0-votes" value="100" /></li>
-<li>Choice: <input type="text" name="choices-1-choice" /></li>
-<li>Votes: <input type="text" name="choices-1-votes" /></li>
-<li>Choice: <input type="text" name="choices-2-choice" /></li>
-<li>Votes: <input type="text" name="choices-2-votes" /></li>
-<li>Choice: <input type="text" name="choices-3-choice" /></li>
-<li>Votes: <input type="text" name="choices-3-votes" /></li>""")
-
- # Make sure retrieving an empty form works, and it shows up in the form list
-
- self.assertTrue(formset.empty_form.empty_permitted)
- self.assertEqual(formset.empty_form.as_ul(), """<li>Choice: <input type="text" name="choices-__prefix__-choice" /></li>
-<li>Votes: <input type="text" name="choices-__prefix__-votes" /></li>""")
-
- def test_formset_with_deletion(self):
- # FormSets with deletion ######################################################
- # We can easily add deletion ability to a FormSet with an argument to
- # formset_factory. This will add a boolean field to each form instance. When
- # that boolean field is True, the form will be in formset.deleted_forms
-
- ChoiceFormSet = formset_factory(Choice, can_delete=True)
-
- initial = [{'choice': u'Calexico', 'votes': 100}, {'choice': u'Fergie', 'votes': 900}]
- formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
- form_output = []
-
- for form in formset.forms:
- form_output.append(form.as_ul())
-
- self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
-<li>Votes: <input type="text" name="choices-0-votes" value="100" /></li>
-<li>Delete: <input type="checkbox" name="choices-0-DELETE" /></li>
-<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li>
-<li>Votes: <input type="text" name="choices-1-votes" value="900" /></li>
-<li>Delete: <input type="checkbox" name="choices-1-DELETE" /></li>
-<li>Choice: <input type="text" name="choices-2-choice" /></li>
-<li>Votes: <input type="text" name="choices-2-votes" /></li>
-<li>Delete: <input type="checkbox" name="choices-2-DELETE" /></li>""")
-
- # To delete something, we just need to set that form's special delete field to
- # 'on'. Let's go ahead and delete Fergie.
-
- data = {
- 'choices-TOTAL_FORMS': '3', # the number of forms rendered
- 'choices-INITIAL_FORMS': '2', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-0-DELETE': '',
- 'choices-1-choice': 'Fergie',
- 'choices-1-votes': '900',
- 'choices-1-DELETE': 'on',
- 'choices-2-choice': '',
- 'choices-2-votes': '',
- 'choices-2-DELETE': '',
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'DELETE': False, 'choice': u'Calexico'}, {'votes': 900, 'DELETE': True, 'choice': u'Fergie'}, {}])
- self.assertEqual([form.cleaned_data for form in formset.deleted_forms], [{'votes': 900, 'DELETE': True, 'choice': u'Fergie'}])
-
- # If we fill a form with something and then we check the can_delete checkbox for
- # that form, that form's errors should not make the entire formset invalid since
- # it's going to be deleted.
-
- class CheckForm(Form):
- field = IntegerField(min_value=100)
-
- data = {
- 'check-TOTAL_FORMS': '3', # the number of forms rendered
- 'check-INITIAL_FORMS': '2', # the number of forms with initial data
- 'check-MAX_NUM_FORMS': '0', # max number of forms
- 'check-0-field': '200',
- 'check-0-DELETE': '',
- 'check-1-field': '50',
- 'check-1-DELETE': 'on',
- 'check-2-field': '',
- 'check-2-DELETE': '',
- }
- CheckFormSet = formset_factory(CheckForm, can_delete=True)
- formset = CheckFormSet(data, prefix='check')
- self.assertTrue(formset.is_valid())
-
- # If we remove the deletion flag now we will have our validation back.
- data['check-1-DELETE'] = ''
- formset = CheckFormSet(data, prefix='check')
- self.assertFalse(formset.is_valid())
-
- # Should be able to get deleted_forms from a valid formset even if a
- # deleted form would have been invalid.
-
- class Person(Form):
- name = CharField()
-
- PeopleForm = formset_factory(
- form=Person,
- can_delete=True)
-
- p = PeopleForm(
- {'form-0-name': u'', 'form-0-DELETE': u'on', # no name!
- 'form-TOTAL_FORMS': 1, 'form-INITIAL_FORMS': 1,
- 'form-MAX_NUM_FORMS': 1})
-
- self.assertTrue(p.is_valid())
- self.assertEqual(len(p.deleted_forms), 1)
-
- def test_formsets_with_ordering(self):
- # FormSets with ordering ######################################################
- # We can also add ordering ability to a FormSet with an argument to
- # formset_factory. This will add a integer field to each form instance. When
- # form validation succeeds, [form.cleaned_data for form in formset.forms] will have the data in the correct
- # order specified by the ordering fields. If a number is duplicated in the set
- # of ordering fields, for instance form 0 and form 3 are both marked as 1, then
- # the form index used as a secondary ordering criteria. In order to put
- # something at the front of the list, you'd need to set it's order to 0.
-
- ChoiceFormSet = formset_factory(Choice, can_order=True)
-
- initial = [{'choice': u'Calexico', 'votes': 100}, {'choice': u'Fergie', 'votes': 900}]
- formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
- form_output = []
-
- for form in formset.forms:
- form_output.append(form.as_ul())
-
- self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
-<li>Votes: <input type="text" name="choices-0-votes" value="100" /></li>
-<li>Order: <input type="text" name="choices-0-ORDER" value="1" /></li>
-<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li>
-<li>Votes: <input type="text" name="choices-1-votes" value="900" /></li>
-<li>Order: <input type="text" name="choices-1-ORDER" value="2" /></li>
-<li>Choice: <input type="text" name="choices-2-choice" /></li>
-<li>Votes: <input type="text" name="choices-2-votes" /></li>
-<li>Order: <input type="text" name="choices-2-ORDER" /></li>""")
-
- data = {
- 'choices-TOTAL_FORMS': '3', # the number of forms rendered
- 'choices-INITIAL_FORMS': '2', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-0-ORDER': '1',
- 'choices-1-choice': 'Fergie',
- 'choices-1-votes': '900',
- 'choices-1-ORDER': '2',
- 'choices-2-choice': 'The Decemberists',
- 'choices-2-votes': '500',
- 'choices-2-ORDER': '0',
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- form_output = []
-
- for form in formset.ordered_forms:
- form_output.append(form.cleaned_data)
-
- self.assertEqual(form_output, [
- {'votes': 500, 'ORDER': 0, 'choice': u'The Decemberists'},
- {'votes': 100, 'ORDER': 1, 'choice': u'Calexico'},
- {'votes': 900, 'ORDER': 2, 'choice': u'Fergie'},
- ])
-
- def test_empty_ordered_fields(self):
- # Ordering fields are allowed to be left blank, and if they *are* left blank,
- # they will be sorted below everything else.
-
- data = {
- 'choices-TOTAL_FORMS': '4', # the number of forms rendered
- 'choices-INITIAL_FORMS': '3', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-0-ORDER': '1',
- 'choices-1-choice': 'Fergie',
- 'choices-1-votes': '900',
- 'choices-1-ORDER': '2',
- 'choices-2-choice': 'The Decemberists',
- 'choices-2-votes': '500',
- 'choices-2-ORDER': '',
- 'choices-3-choice': 'Basia Bulat',
- 'choices-3-votes': '50',
- 'choices-3-ORDER': '',
- }
-
- ChoiceFormSet = formset_factory(Choice, can_order=True)
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- form_output = []
-
- for form in formset.ordered_forms:
- form_output.append(form.cleaned_data)
-
- self.assertEqual(form_output, [
- {'votes': 100, 'ORDER': 1, 'choice': u'Calexico'},
- {'votes': 900, 'ORDER': 2, 'choice': u'Fergie'},
- {'votes': 500, 'ORDER': None, 'choice': u'The Decemberists'},
- {'votes': 50, 'ORDER': None, 'choice': u'Basia Bulat'},
- ])
-
- def test_ordering_blank_fieldsets(self):
- # Ordering should work with blank fieldsets.
-
- data = {
- 'choices-TOTAL_FORMS': '3', # the number of forms rendered
- 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- }
-
- ChoiceFormSet = formset_factory(Choice, can_order=True)
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- form_output = []
-
- for form in formset.ordered_forms:
- form_output.append(form.cleaned_data)
-
- self.assertEqual(form_output, [])
-
- def test_formset_with_ordering_and_deletion(self):
- # FormSets with ordering + deletion ###########################################
- # Let's try throwing ordering and deletion into the same form.
-
- ChoiceFormSet = formset_factory(Choice, can_order=True, can_delete=True)
-
- initial = [
- {'choice': u'Calexico', 'votes': 100},
- {'choice': u'Fergie', 'votes': 900},
- {'choice': u'The Decemberists', 'votes': 500},
- ]
- formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
- form_output = []
-
- for form in formset.forms:
- form_output.append(form.as_ul())
-
- self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
-<li>Votes: <input type="text" name="choices-0-votes" value="100" /></li>
-<li>Order: <input type="text" name="choices-0-ORDER" value="1" /></li>
-<li>Delete: <input type="checkbox" name="choices-0-DELETE" /></li>
-<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li>
-<li>Votes: <input type="text" name="choices-1-votes" value="900" /></li>
-<li>Order: <input type="text" name="choices-1-ORDER" value="2" /></li>
-<li>Delete: <input type="checkbox" name="choices-1-DELETE" /></li>
-<li>Choice: <input type="text" name="choices-2-choice" value="The Decemberists" /></li>
-<li>Votes: <input type="text" name="choices-2-votes" value="500" /></li>
-<li>Order: <input type="text" name="choices-2-ORDER" value="3" /></li>
-<li>Delete: <input type="checkbox" name="choices-2-DELETE" /></li>
-<li>Choice: <input type="text" name="choices-3-choice" /></li>
-<li>Votes: <input type="text" name="choices-3-votes" /></li>
-<li>Order: <input type="text" name="choices-3-ORDER" /></li>
-<li>Delete: <input type="checkbox" name="choices-3-DELETE" /></li>""")
-
- # Let's delete Fergie, and put The Decemberists ahead of Calexico.
-
- data = {
- 'choices-TOTAL_FORMS': '4', # the number of forms rendered
- 'choices-INITIAL_FORMS': '3', # the number of forms with initial data
- 'choices-MAX_NUM_FORMS': '0', # max number of forms
- 'choices-0-choice': 'Calexico',
- 'choices-0-votes': '100',
- 'choices-0-ORDER': '1',
- 'choices-0-DELETE': '',
- 'choices-1-choice': 'Fergie',
- 'choices-1-votes': '900',
- 'choices-1-ORDER': '2',
- 'choices-1-DELETE': 'on',
- 'choices-2-choice': 'The Decemberists',
- 'choices-2-votes': '500',
- 'choices-2-ORDER': '0',
- 'choices-2-DELETE': '',
- 'choices-3-choice': '',
- 'choices-3-votes': '',
- 'choices-3-ORDER': '',
- 'choices-3-DELETE': '',
- }
-
- formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
- self.assertTrue(formset.is_valid())
- form_output = []
-
- for form in formset.ordered_forms:
- form_output.append(form.cleaned_data)
-
- self.assertEqual(form_output, [
- {'votes': 500, 'DELETE': False, 'ORDER': 0, 'choice': u'The Decemberists'},
- {'votes': 100, 'DELETE': False, 'ORDER': 1, 'choice': u'Calexico'},
- ])
- self.assertEqual([form.cleaned_data for form in formset.deleted_forms], [{'votes': 900, 'DELETE': True, 'ORDER': 2, 'choice': u'Fergie'}])
-
- def test_invalid_deleted_form_with_ordering(self):
- # Should be able to get ordered forms from a valid formset even if a
- # deleted form would have been invalid.
-
- class Person(Form):
- name = CharField()
-
- PeopleForm = formset_factory(form=Person, can_delete=True, can_order=True)
-
- p = PeopleForm({
- 'form-0-name': u'',
- 'form-0-DELETE': u'on', # no name!
- 'form-TOTAL_FORMS': 1,
- 'form-INITIAL_FORMS': 1,
- 'form-MAX_NUM_FORMS': 1
- })
-
- self.assertTrue(p.is_valid())
- self.assertEqual(p.ordered_forms, [])
-
- def test_clean_hook(self):
- # FormSet clean hook ##########################################################
- # FormSets have a hook for doing extra validation that shouldn't be tied to any
- # particular form. It follows the same pattern as the clean hook on Forms.
-
- # We start out with a some duplicate data.
-
- data = {
- 'drinks-TOTAL_FORMS': '2', # the number of forms rendered
- 'drinks-INITIAL_FORMS': '0', # the number of forms with initial data
- 'drinks-MAX_NUM_FORMS': '0', # max number of forms
- 'drinks-0-name': 'Gin and Tonic',
- 'drinks-1-name': 'Gin and Tonic',
- }
-
- formset = FavoriteDrinksFormSet(data, prefix='drinks')
- self.assertFalse(formset.is_valid())
-
- # Any errors raised by formset.clean() are available via the
- # formset.non_form_errors() method.
-
- for error in formset.non_form_errors():
- self.assertEqual(str(error), 'You may only specify a drink once.')
-
- # Make sure we didn't break the valid case.
-
- data = {
- 'drinks-TOTAL_FORMS': '2', # the number of forms rendered
- 'drinks-INITIAL_FORMS': '0', # the number of forms with initial data
- 'drinks-MAX_NUM_FORMS': '0', # max number of forms
- 'drinks-0-name': 'Gin and Tonic',
- 'drinks-1-name': 'Bloody Mary',
- }
-
- formset = FavoriteDrinksFormSet(data, prefix='drinks')
- self.assertTrue(formset.is_valid())
- self.assertEqual(formset.non_form_errors(), [])
-
- def test_limiting_max_forms(self):
- # Limiting the maximum number of forms ########################################
- # Base case for max_num.
-
- # When not passed, max_num will take its default value of None, i.e. unlimited
- # number of forms, only controlled by the value of the extra parameter.
-
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=3)
- formset = LimitedFavoriteDrinkFormSet()
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>
-<tr><th><label for="id_form-1-name">Name:</label></th><td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>
-<tr><th><label for="id_form-2-name">Name:</label></th><td><input type="text" name="form-2-name" id="id_form-2-name" /></td></tr>""")
-
- # If max_num is 0 then no form is rendered at all.
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=3, max_num=0)
- formset = LimitedFavoriteDrinkFormSet()
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), "")
-
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=5, max_num=2)
- formset = LimitedFavoriteDrinkFormSet()
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>
-<tr><th><label for="id_form-1-name">Name:</label></th><td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>""")
-
- # Ensure that max_num has no effect when extra is less than max_num.
-
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=1, max_num=2)
- formset = LimitedFavoriteDrinkFormSet()
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>""")
-
- def test_max_num_with_initial_data(self):
- # max_num with initial data
-
- # When not passed, max_num will take its default value of None, i.e. unlimited
- # number of forms, only controlled by the values of the initial and extra
- # parameters.
-
- initial = [
- {'name': 'Fernet and Coke'},
- ]
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=1)
- formset = LimitedFavoriteDrinkFormSet(initial=initial)
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="Fernet and Coke" id="id_form-0-name" /></td></tr>
-<tr><th><label for="id_form-1-name">Name:</label></th><td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>""")
-
- def test_max_num_zero(self):
- # If max_num is 0 then no form is rendered at all, even if extra and initial
- # are specified.
-
- initial = [
- {'name': 'Fernet and Coke'},
- {'name': 'Bloody Mary'},
- ]
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=1, max_num=0)
- formset = LimitedFavoriteDrinkFormSet(initial=initial)
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), "")
-
- def test_more_initial_than_max_num(self):
- # More initial forms than max_num will result in only the first max_num of
- # them to be displayed with no extra forms.
-
- initial = [
- {'name': 'Gin Tonic'},
- {'name': 'Bloody Mary'},
- {'name': 'Jack and Coke'},
- ]
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=1, max_num=2)
- formset = LimitedFavoriteDrinkFormSet(initial=initial)
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name" /></td></tr>
-<tr><th><label for="id_form-1-name">Name:</label></th><td><input type="text" name="form-1-name" value="Bloody Mary" id="id_form-1-name" /></td></tr>""")
-
- # One form from initial and extra=3 with max_num=2 should result in the one
- # initial form and one extra.
- initial = [
- {'name': 'Gin Tonic'},
- ]
- LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=3, max_num=2)
- formset = LimitedFavoriteDrinkFormSet(initial=initial)
- form_output = []
-
- for form in formset.forms:
- form_output.append(str(form))
-
- self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name" /></td></tr>
-<tr><th><label for="id_form-1-name">Name:</label></th><td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>""")
-
- def test_regression_6926(self):
- # Regression test for #6926 ##################################################
- # Make sure the management form has the correct prefix.
-
- formset = FavoriteDrinksFormSet()
- self.assertEqual(formset.management_form.prefix, 'form')
-
- formset = FavoriteDrinksFormSet(data={})
- self.assertEqual(formset.management_form.prefix, 'form')
-
- formset = FavoriteDrinksFormSet(initial={})
- self.assertEqual(formset.management_form.prefix, 'form')
-
- def test_regression_12878(self):
- # Regression test for #12878 #################################################
-
- data = {
- 'drinks-TOTAL_FORMS': '2', # the number of forms rendered
- 'drinks-INITIAL_FORMS': '0', # the number of forms with initial data
- 'drinks-MAX_NUM_FORMS': '0', # max number of forms
- 'drinks-0-name': 'Gin and Tonic',
- 'drinks-1-name': 'Gin and Tonic',
- }
-
- formset = FavoriteDrinksFormSet(data, prefix='drinks')
- self.assertFalse(formset.is_valid())
- self.assertEqual(formset.non_form_errors(), [u'You may only specify a drink once.'])
diff --git a/parts/django/tests/regressiontests/forms/tests/input_formats.py b/parts/django/tests/regressiontests/forms/tests/input_formats.py
deleted file mode 100644
index 498c6de..0000000
--- a/parts/django/tests/regressiontests/forms/tests/input_formats.py
+++ /dev/null
@@ -1,894 +0,0 @@
-from datetime import time, date, datetime
-from unittest import TestCase
-
-from django import forms
-from django.conf import settings
-from django.utils.translation import activate, deactivate
-
-
-class LocalizedTimeTests(TestCase):
- def setUp(self):
- self.old_TIME_INPUT_FORMATS = settings.TIME_INPUT_FORMATS
- self.old_USE_L10N = settings.USE_L10N
-
- settings.TIME_INPUT_FORMATS = ["%I:%M:%S %p", "%I:%M %p"]
- settings.USE_L10N = True
-
- activate('de')
-
- def tearDown(self):
- settings.TIME_INPUT_FORMATS = self.old_TIME_INPUT_FORMATS
- settings.USE_L10N = self.old_USE_L10N
-
- deactivate()
-
- def test_timeField(self):
- "TimeFields can parse dates in the default format"
- f = forms.TimeField()
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13:30:05')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip
- text = f.widget._format_value(result)
- self.assertEqual(text, '13:30:05')
-
- # Parse a time in a valid, but non-default format, get a parsed result
- result = f.clean('13:30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
- def test_localized_timeField(self):
- "Localized TimeFields act as unlocalized widgets"
- f = forms.TimeField(localize=True)
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13:30:05')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13:30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
- def test_timeField_with_inputformat(self):
- "TimeFields with manually specified input formats can accept those formats"
- f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"])
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30.05')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:05")
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
- def test_localized_timeField_with_inputformat(self):
- "Localized TimeFields with manually specified input formats can accept those formats"
- f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"], localize=True)
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30.05')
- self.assertEqual(result, time(13,30,5))
-
- # # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:05")
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
-
-class CustomTimeInputFormatsTests(TestCase):
- def setUp(self):
- self.old_TIME_INPUT_FORMATS = settings.TIME_INPUT_FORMATS
- settings.TIME_INPUT_FORMATS = ["%I:%M:%S %p", "%I:%M %p"]
-
- def tearDown(self):
- settings.TIME_INPUT_FORMATS = self.old_TIME_INPUT_FORMATS
-
- def test_timeField(self):
- "TimeFields can parse dates in the default format"
- f = forms.TimeField()
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('1:30:05 PM')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip
- text = f.widget._format_value(result)
- self.assertEqual(text, '01:30:05 PM')
-
- # Parse a time in a valid, but non-default format, get a parsed result
- result = f.clean('1:30 PM')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM")
-
- def test_localized_timeField(self):
- "Localized TimeFields act as unlocalized widgets"
- f = forms.TimeField(localize=True)
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('1:30:05 PM')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, '01:30:05 PM')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('01:30 PM')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM")
-
- def test_timeField_with_inputformat(self):
- "TimeFields with manually specified input formats can accept those formats"
- f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"])
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30.05')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:05 PM")
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM")
-
- def test_localized_timeField_with_inputformat(self):
- "Localized TimeFields with manually specified input formats can accept those formats"
- f = forms.TimeField(input_formats=["%H.%M.%S", "%H.%M"], localize=True)
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30.05')
- self.assertEqual(result, time(13,30,5))
-
- # # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:05 PM")
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13.30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM")
-
-
-class SimpleTimeFormatTests(TestCase):
- def test_timeField(self):
- "TimeFields can parse dates in the default format"
- f = forms.TimeField()
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13:30:05')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:05")
-
- # Parse a time in a valid, but non-default format, get a parsed result
- result = f.clean('13:30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
- def test_localized_timeField(self):
- "Localized TimeFields in a non-localized environment act as unlocalized widgets"
- f = forms.TimeField()
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13:30:05')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:05")
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('13:30')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
- def test_timeField_with_inputformat(self):
- "TimeFields with manually specified input formats can accept those formats"
- f = forms.TimeField(input_formats=["%I:%M:%S %p", "%I:%M %p"])
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('1:30:05 PM')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:05")
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('1:30 PM')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
- def test_localized_timeField_with_inputformat(self):
- "Localized TimeFields with manually specified input formats can accept those formats"
- f = forms.TimeField(input_formats=["%I:%M:%S %p", "%I:%M %p"], localize=True)
- # Parse a time in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05')
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('1:30:05 PM')
- self.assertEqual(result, time(13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:05")
-
- # Parse a time in a valid format, get a parsed result
- result = f.clean('1:30 PM')
- self.assertEqual(result, time(13,30,0))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "13:30:00")
-
-
-class LocalizedDateTests(TestCase):
- def setUp(self):
- self.old_DATE_INPUT_FORMATS = settings.DATE_INPUT_FORMATS
- self.old_USE_L10N = settings.USE_L10N
-
- settings.DATE_INPUT_FORMATS = ["%d/%m/%Y", "%d-%m-%Y"]
- settings.USE_L10N = True
-
- activate('de')
-
- def tearDown(self):
- settings.DATE_INPUT_FORMATS = self.old_DATE_INPUT_FORMATS
- settings.USE_L10N = self.old_USE_L10N
-
- deactivate()
-
- def test_dateField(self):
- "DateFields can parse dates in the default format"
- f = forms.DateField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip
- text = f.widget._format_value(result)
- self.assertEqual(text, '21.12.2010')
-
- # Parse a date in a valid, but non-default format, get a parsed result
- result = f.clean('21.12.10')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- def test_localized_dateField(self):
- "Localized DateFields act as unlocalized widgets"
- f = forms.DateField(localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, '21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.10')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- def test_dateField_with_inputformat(self):
- "DateFields with manually specified input formats can accept those formats"
- f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"])
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
- self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
- self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12.21.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12-21-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- def test_localized_dateField_with_inputformat(self):
- "Localized DateFields with manually specified input formats can accept those formats"
- f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"], localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
- self.assertRaises(forms.ValidationError, f.clean, '21/12/2010')
- self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12.21.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12-21-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
-class CustomDateInputFormatsTests(TestCase):
- def setUp(self):
- self.old_DATE_INPUT_FORMATS = settings.DATE_INPUT_FORMATS
- settings.DATE_INPUT_FORMATS = ["%d.%m.%Y", "%d-%m-%Y"]
-
- def tearDown(self):
- settings.DATE_INPUT_FORMATS = self.old_DATE_INPUT_FORMATS
-
- def test_dateField(self):
- "DateFields can parse dates in the default format"
- f = forms.DateField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip
- text = f.widget._format_value(result)
- self.assertEqual(text, '21.12.2010')
-
- # Parse a date in a valid, but non-default format, get a parsed result
- result = f.clean('21-12-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- def test_localized_dateField(self):
- "Localized DateFields act as unlocalized widgets"
- f = forms.DateField(localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, '21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21-12-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- def test_dateField_with_inputformat(self):
- "DateFields with manually specified input formats can accept those formats"
- f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"])
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12.21.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12-21-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- def test_localized_dateField_with_inputformat(self):
- "Localized DateFields with manually specified input formats can accept those formats"
- f = forms.DateField(input_formats=["%m.%d.%Y", "%m-%d-%Y"], localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12.21.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12-21-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010")
-
-class SimpleDateFormatTests(TestCase):
- def test_dateField(self):
- "DateFields can parse dates in the default format"
- f = forms.DateField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('2010-12-21')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
- # Parse a date in a valid, but non-default format, get a parsed result
- result = f.clean('12/21/2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
- def test_localized_dateField(self):
- "Localized DateFields in a non-localized environment act as unlocalized widgets"
- f = forms.DateField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('2010-12-21')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12/21/2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
- def test_dateField_with_inputformat(self):
- "DateFields with manually specified input formats can accept those formats"
- f = forms.DateField(input_formats=["%d.%m.%Y", "%d-%m-%Y"])
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21-12-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
- def test_localized_dateField_with_inputformat(self):
- "Localized DateFields with manually specified input formats can accept those formats"
- f = forms.DateField(input_formats=["%d.%m.%Y", "%d-%m-%Y"], localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21-12-2010')
- self.assertEqual(result, date(2010,12,21))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21")
-
-class LocalizedDateTimeTests(TestCase):
- def setUp(self):
- self.old_DATETIME_INPUT_FORMATS = settings.DATETIME_INPUT_FORMATS
- self.old_USE_L10N = settings.USE_L10N
-
- settings.DATETIME_INPUT_FORMATS = ["%I:%M:%S %p %d/%m/%Y", "%I:%M %p %d-%m-%Y"]
- settings.USE_L10N = True
-
- activate('de')
-
- def tearDown(self):
- settings.DATETIME_INPUT_FORMATS = self.old_DATETIME_INPUT_FORMATS
- settings.USE_L10N = self.old_USE_L10N
-
- deactivate()
-
- def test_dateTimeField(self):
- "DateTimeFields can parse dates in the default format"
- f = forms.DateTimeField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip
- text = f.widget._format_value(result)
- self.assertEqual(text, '21.12.2010 13:30:05')
-
- # Parse a date in a valid, but non-default format, get a parsed result
- result = f.clean('21.12.2010 13:30')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010 13:30:00")
-
- def test_localized_dateTimeField(self):
- "Localized DateTimeFields act as unlocalized widgets"
- f = forms.DateTimeField(localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, '21.12.2010 13:30:05')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('21.12.2010 13:30')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010 13:30:00")
-
- def test_dateTimeField_with_inputformat(self):
- "DateTimeFields with manually specified input formats can accept those formats"
- f = forms.DateTimeField(input_formats=["%H.%M.%S %m.%d.%Y", "%H.%M %m-%d-%Y"])
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05 13:30:05')
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('13.30.05 12.21.2010')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010 13:30:05")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('13.30 12-21-2010')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010 13:30:00")
-
- def test_localized_dateTimeField_with_inputformat(self):
- "Localized DateTimeFields with manually specified input formats can accept those formats"
- f = forms.DateTimeField(input_formats=["%H.%M.%S %m.%d.%Y", "%H.%M %m-%d-%Y"], localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
- self.assertRaises(forms.ValidationError, f.clean, '1:30:05 PM 21/12/2010')
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('13.30.05 12.21.2010')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010 13:30:05")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('13.30 12-21-2010')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "21.12.2010 13:30:00")
-
-
-class CustomDateTimeInputFormatsTests(TestCase):
- def setUp(self):
- self.old_DATETIME_INPUT_FORMATS = settings.DATETIME_INPUT_FORMATS
- settings.DATETIME_INPUT_FORMATS = ["%I:%M:%S %p %d/%m/%Y", "%I:%M %p %d-%m-%Y"]
-
- def tearDown(self):
- settings.DATETIME_INPUT_FORMATS = self.old_DATETIME_INPUT_FORMATS
-
- def test_dateTimeField(self):
- "DateTimeFields can parse dates in the default format"
- f = forms.DateTimeField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('1:30:05 PM 21/12/2010')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip
- text = f.widget._format_value(result)
- self.assertEqual(text, '01:30:05 PM 21/12/2010')
-
- # Parse a date in a valid, but non-default format, get a parsed result
- result = f.clean('1:30 PM 21-12-2010')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM 21/12/2010")
-
- def test_localized_dateTimeField(self):
- "Localized DateTimeFields act as unlocalized widgets"
- f = forms.DateTimeField(localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('1:30:05 PM 21/12/2010')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, '01:30:05 PM 21/12/2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('1:30 PM 21-12-2010')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM 21/12/2010")
-
- def test_dateTimeField_with_inputformat(self):
- "DateTimeFields with manually specified input formats can accept those formats"
- f = forms.DateTimeField(input_formats=["%m.%d.%Y %H:%M:%S", "%m-%d-%Y %H:%M"])
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12.21.2010 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:05 PM 21/12/2010")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12-21-2010 13:30')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM 21/12/2010")
-
- def test_localized_dateTimeField_with_inputformat(self):
- "Localized DateTimeFields with manually specified input formats can accept those formats"
- f = forms.DateTimeField(input_formats=["%m.%d.%Y %H:%M:%S", "%m-%d-%Y %H:%M"], localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12.21.2010 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:05 PM 21/12/2010")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12-21-2010 13:30')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "01:30:00 PM 21/12/2010")
-
-class SimpleDateTimeFormatTests(TestCase):
- def test_dateTimeField(self):
- "DateTimeFields can parse dates in the default format"
- f = forms.DateTimeField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('2010-12-21 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:05")
-
- # Parse a date in a valid, but non-default format, get a parsed result
- result = f.clean('12/21/2010 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:05")
-
- def test_localized_dateTimeField(self):
- "Localized DateTimeFields in a non-localized environment act as unlocalized widgets"
- f = forms.DateTimeField()
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '13:30:05 21.12.2010')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('2010-12-21 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:05")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('12/21/2010 13:30:05')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:05")
-
- def test_dateTimeField_with_inputformat(self):
- "DateTimeFields with manually specified input formats can accept those formats"
- f = forms.DateTimeField(input_formats=["%I:%M:%S %p %d.%m.%Y", "%I:%M %p %d-%m-%Y"])
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('1:30:05 PM 21.12.2010')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:05")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('1:30 PM 21-12-2010')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:00")
-
- def test_localized_dateTimeField_with_inputformat(self):
- "Localized DateTimeFields with manually specified input formats can accept those formats"
- f = forms.DateTimeField(input_formats=["%I:%M:%S %p %d.%m.%Y", "%I:%M %p %d-%m-%Y"], localize=True)
- # Parse a date in an unaccepted format; get an error
- self.assertRaises(forms.ValidationError, f.clean, '2010-12-21 13:30:05')
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('1:30:05 PM 21.12.2010')
- self.assertEqual(result, datetime(2010,12,21,13,30,5))
-
- # Check that the parsed result does a round trip to the same format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:05")
-
- # Parse a date in a valid format, get a parsed result
- result = f.clean('1:30 PM 21-12-2010')
- self.assertEqual(result, datetime(2010,12,21,13,30))
-
- # Check that the parsed result does a round trip to default format
- text = f.widget._format_value(result)
- self.assertEqual(text, "2010-12-21 13:30:00")
diff --git a/parts/django/tests/regressiontests/forms/tests/media.py b/parts/django/tests/regressiontests/forms/tests/media.py
deleted file mode 100644
index eb59d13..0000000
--- a/parts/django/tests/regressiontests/forms/tests/media.py
+++ /dev/null
@@ -1,460 +0,0 @@
-# -*- coding: utf-8 -*-
-from unittest import TestCase
-from django.conf import settings
-from django.forms import TextInput, Media, TextInput, CharField, Form, MultiWidget
-
-
-class FormsMediaTestCase(TestCase):
- # Tests for the media handling on widgets and forms
- def setUp(self):
- super(FormsMediaTestCase, self).setUp()
- self.original_media_url = settings.MEDIA_URL
- settings.MEDIA_URL = 'http://media.example.com/media/'
-
- def tearDown(self):
- settings.MEDIA_URL = self.original_media_url
- super(FormsMediaTestCase, self).tearDown()
-
- def test_construction(self):
- # Check construction of media objects
- m = Media(css={'all': ('path/to/css1','/path/to/css2')}, js=('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3'))
- self.assertEqual(str(m), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""")
-
- class Foo:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- m3 = Media(Foo)
- self.assertEqual(str(m3), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""")
-
- # A widget can exist without a media definition
- class MyWidget(TextInput):
- pass
-
- w = MyWidget()
- self.assertEqual(str(w.media), '')
-
- def test_media_dsl(self):
- ###############################################################
- # DSL Class-based media definitions
- ###############################################################
-
- # A widget can define media if it needs to.
- # Any absolute path will be preserved; relative paths are combined
- # with the value of settings.MEDIA_URL
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- w1 = MyWidget1()
- self.assertEqual(str(w1.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""")
-
- # Media objects can be interrogated by media type
- self.assertEqual(str(w1.media['css']), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />""")
-
- self.assertEqual(str(w1.media['js']), """<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""")
-
- def test_combine_media(self):
- # Media objects can be combined. Any given media resource will appear only
- # once. Duplicated media definitions are ignored.
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget2(TextInput):
- class Media:
- css = {
- 'all': ('/path/to/css2','/path/to/css3')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- class MyWidget3(TextInput):
- class Media:
- css = {
- 'all': ('/path/to/css3','path/to/css1')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- w1 = MyWidget1()
- w2 = MyWidget2()
- w3 = MyWidget3()
- self.assertEqual(str(w1.media + w2.media + w3.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- # Check that media addition hasn't affected the original objects
- self.assertEqual(str(w1.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""")
-
- # Regression check for #12879: specifying the same CSS or JS file
- # multiple times in a single Media instance should result in that file
- # only being included once.
- class MyWidget4(TextInput):
- class Media:
- css = {'all': ('/path/to/css1', '/path/to/css1')}
- js = ('/path/to/js1', '/path/to/js1')
-
- w4 = MyWidget4()
- self.assertEqual(str(w4.media), """<link href="/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>""")
-
- def test_media_property(self):
- ###############################################################
- # Property-based media definitions
- ###############################################################
-
- # Widget media can be defined as a property
- class MyWidget4(TextInput):
- def _media(self):
- return Media(css={'all': ('/some/path',)}, js = ('/some/js',))
- media = property(_media)
-
- w4 = MyWidget4()
- self.assertEqual(str(w4.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/some/js"></script>""")
-
- # Media properties can reference the media of their parents
- class MyWidget5(MyWidget4):
- def _media(self):
- return super(MyWidget5, self).media + Media(css={'all': ('/other/path',)}, js = ('/other/js',))
- media = property(_media)
-
- w5 = MyWidget5()
- self.assertEqual(str(w5.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet" />
-<link href="/other/path" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/some/js"></script>
-<script type="text/javascript" src="/other/js"></script>""")
-
- def test_media_property_parent_references(self):
- # Media properties can reference the media of their parents,
- # even if the parent media was defined using a class
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget6(MyWidget1):
- def _media(self):
- return super(MyWidget6, self).media + Media(css={'all': ('/other/path',)}, js = ('/other/js',))
- media = property(_media)
-
- w6 = MyWidget6()
- self.assertEqual(str(w6.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/other/path" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/other/js"></script>""")
-
- def test_media_inheritance(self):
- ###############################################################
- # Inheritance of media
- ###############################################################
-
- # If a widget extends another but provides no media definition, it inherits the parent widget's media
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget7(MyWidget1):
- pass
-
- w7 = MyWidget7()
- self.assertEqual(str(w7.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""")
-
- # If a widget extends another but defines media, it extends the parent widget's media by default
- class MyWidget8(MyWidget1):
- class Media:
- css = {
- 'all': ('/path/to/css3','path/to/css1')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- w8 = MyWidget8()
- self.assertEqual(str(w8.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- def test_media_inheritance_from_property(self):
- # If a widget extends another but defines media, it extends the parents widget's media,
- # even if the parent defined media using a property.
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget4(TextInput):
- def _media(self):
- return Media(css={'all': ('/some/path',)}, js = ('/some/js',))
- media = property(_media)
-
- class MyWidget9(MyWidget4):
- class Media:
- css = {
- 'all': ('/other/path',)
- }
- js = ('/other/js',)
-
- w9 = MyWidget9()
- self.assertEqual(str(w9.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet" />
-<link href="/other/path" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/some/js"></script>
-<script type="text/javascript" src="/other/js"></script>""")
-
- # A widget can disable media inheritance by specifying 'extend=False'
- class MyWidget10(MyWidget1):
- class Media:
- extend = False
- css = {
- 'all': ('/path/to/css3','path/to/css1')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- w10 = MyWidget10()
- self.assertEqual(str(w10.media), """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- def test_media_inheritance_extends(self):
- # A widget can explicitly enable full media inheritance by specifying 'extend=True'
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget11(MyWidget1):
- class Media:
- extend = True
- css = {
- 'all': ('/path/to/css3','path/to/css1')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- w11 = MyWidget11()
- self.assertEqual(str(w11.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- def test_media_inheritance_single_type(self):
- # A widget can enable inheritance of one media type by specifying extend as a tuple
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget12(MyWidget1):
- class Media:
- extend = ('css',)
- css = {
- 'all': ('/path/to/css3','path/to/css1')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- w12 = MyWidget12()
- self.assertEqual(str(w12.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- def test_multi_media(self):
- ###############################################################
- # Multi-media handling for CSS
- ###############################################################
-
- # A widget can define CSS media for multiple output media types
- class MultimediaWidget(TextInput):
- class Media:
- css = {
- 'screen, print': ('/file1','/file2'),
- 'screen': ('/file3',),
- 'print': ('/file4',)
- }
- js = ('/path/to/js1','/path/to/js4')
-
- multimedia = MultimediaWidget()
- self.assertEqual(str(multimedia.media), """<link href="/file4" type="text/css" media="print" rel="stylesheet" />
-<link href="/file3" type="text/css" media="screen" rel="stylesheet" />
-<link href="/file1" type="text/css" media="screen, print" rel="stylesheet" />
-<link href="/file2" type="text/css" media="screen, print" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- def test_multi_widget(self):
- ###############################################################
- # Multiwidget media handling
- ###############################################################
-
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget2(TextInput):
- class Media:
- css = {
- 'all': ('/path/to/css2','/path/to/css3')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- class MyWidget3(TextInput):
- class Media:
- css = {
- 'all': ('/path/to/css3','path/to/css1')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- # MultiWidgets have a default media definition that gets all the
- # media from the component widgets
- class MyMultiWidget(MultiWidget):
- def __init__(self, attrs=None):
- widgets = [MyWidget1, MyWidget2, MyWidget3]
- super(MyMultiWidget, self).__init__(widgets, attrs)
-
- mymulti = MyMultiWidget()
- self.assertEqual(str(mymulti.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- def test_form_media(self):
- ###############################################################
- # Media processing for forms
- ###############################################################
-
- class MyWidget1(TextInput):
- class Media:
- css = {
- 'all': ('path/to/css1','/path/to/css2')
- }
- js = ('/path/to/js1','http://media.other.com/path/to/js2','https://secure.other.com/path/to/js3')
-
- class MyWidget2(TextInput):
- class Media:
- css = {
- 'all': ('/path/to/css2','/path/to/css3')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- class MyWidget3(TextInput):
- class Media:
- css = {
- 'all': ('/path/to/css3','path/to/css1')
- }
- js = ('/path/to/js1','/path/to/js4')
-
- # You can ask a form for the media required by its widgets.
- class MyForm(Form):
- field1 = CharField(max_length=20, widget=MyWidget1())
- field2 = CharField(max_length=20, widget=MyWidget2())
- f1 = MyForm()
- self.assertEqual(str(f1.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- # Form media can be combined to produce a single media definition.
- class AnotherForm(Form):
- field3 = CharField(max_length=20, widget=MyWidget3())
- f2 = AnotherForm()
- self.assertEqual(str(f1.media + f2.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>""")
-
- # Forms can also define media, following the same rules as widgets.
- class FormWithMedia(Form):
- field1 = CharField(max_length=20, widget=MyWidget1())
- field2 = CharField(max_length=20, widget=MyWidget2())
- class Media:
- js = ('/some/form/javascript',)
- css = {
- 'all': ('/some/form/css',)
- }
- f3 = FormWithMedia()
- self.assertEqual(str(f3.media), """<link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />
-<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>
-<script type="text/javascript" src="/some/form/javascript"></script>""")
-
- # Media works in templates
- from django.template import Template, Context
- self.assertEqual(Template("{{ form.media.js }}{{ form.media.css }}").render(Context({'form': f3})), """<script type="text/javascript" src="/path/to/js1"></script>
-<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
-<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
-<script type="text/javascript" src="/path/to/js4"></script>
-<script type="text/javascript" src="/some/form/javascript"></script><link href="http://media.example.com/media/path/to/css1" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
-<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
-<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />""")
diff --git a/parts/django/tests/regressiontests/forms/tests/models.py b/parts/django/tests/regressiontests/forms/tests/models.py
deleted file mode 100644
index af7473e..0000000
--- a/parts/django/tests/regressiontests/forms/tests/models.py
+++ /dev/null
@@ -1,169 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.conf import settings
-from django.db import connection
-from django.forms import Form, ModelForm, FileField, ModelChoiceField
-from django.test import TestCase
-from regressiontests.forms.models import ChoiceModel, ChoiceOptionModel, ChoiceFieldModel, FileModel, Group, BoundaryModel, Defaults
-
-
-class ChoiceFieldForm(ModelForm):
- class Meta:
- model = ChoiceFieldModel
-
-
-class FileForm(Form):
- file1 = FileField()
-
-
-class TestTicket12510(TestCase):
- ''' It is not necessary to generate choices for ModelChoiceField (regression test for #12510). '''
- def setUp(self):
- self.groups = [Group.objects.create(name=name) for name in 'abc']
- self.old_debug = settings.DEBUG
- # turn debug on to get access to connection.queries
- settings.DEBUG = True
-
- def tearDown(self):
- settings.DEBUG = self.old_debug
-
- def test_choices_not_fetched_when_not_rendering(self):
- initial_queries = len(connection.queries)
- field = ModelChoiceField(Group.objects.order_by('-name'))
- self.assertEqual('a', field.clean(self.groups[0].pk).name)
- # only one query is required to pull the model from DB
- self.assertEqual(initial_queries+1, len(connection.queries))
-
-class ModelFormCallableModelDefault(TestCase):
- def test_no_empty_option(self):
- "If a model's ForeignKey has blank=False and a default, no empty option is created (Refs #10792)."
- option = ChoiceOptionModel.objects.create(name='default')
-
- choices = list(ChoiceFieldForm().fields['choice'].choices)
- self.assertEquals(len(choices), 1)
- self.assertEquals(choices[0], (option.pk, unicode(option)))
-
- def test_callable_initial_value(self):
- "The initial value for a callable default returning a queryset is the pk (refs #13769)"
- obj1 = ChoiceOptionModel.objects.create(id=1, name='default')
- obj2 = ChoiceOptionModel.objects.create(id=2, name='option 2')
- obj3 = ChoiceOptionModel.objects.create(id=3, name='option 3')
- self.assertEquals(ChoiceFieldForm().as_p(), """<p><label for="id_choice">Choice:</label> <select name="choice" id="id_choice">
-<option value="1" selected="selected">ChoiceOption 1</option>
-<option value="2">ChoiceOption 2</option>
-<option value="3">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-choice" value="1" id="initial-id_choice" /></p>
-<p><label for="id_choice_int">Choice int:</label> <select name="choice_int" id="id_choice_int">
-<option value="1" selected="selected">ChoiceOption 1</option>
-<option value="2">ChoiceOption 2</option>
-<option value="3">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-choice_int" value="1" id="initial-id_choice_int" /></p>
-<p><label for="id_multi_choice">Multi choice:</label> <select multiple="multiple" name="multi_choice" id="id_multi_choice">
-<option value="1" selected="selected">ChoiceOption 1</option>
-<option value="2">ChoiceOption 2</option>
-<option value="3">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-multi_choice" value="1" id="initial-id_multi_choice_0" /> Hold down "Control", or "Command" on a Mac, to select more than one.</p>
-<p><label for="id_multi_choice_int">Multi choice int:</label> <select multiple="multiple" name="multi_choice_int" id="id_multi_choice_int">
-<option value="1" selected="selected">ChoiceOption 1</option>
-<option value="2">ChoiceOption 2</option>
-<option value="3">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-multi_choice_int" value="1" id="initial-id_multi_choice_int_0" /> Hold down "Control", or "Command" on a Mac, to select more than one.</p>""")
-
- def test_initial_instance_value(self):
- "Initial instances for model fields may also be instances (refs #7287)"
- obj1 = ChoiceOptionModel.objects.create(id=1, name='default')
- obj2 = ChoiceOptionModel.objects.create(id=2, name='option 2')
- obj3 = ChoiceOptionModel.objects.create(id=3, name='option 3')
- self.assertEquals(ChoiceFieldForm(initial={
- 'choice': obj2,
- 'choice_int': obj2,
- 'multi_choice': [obj2,obj3],
- 'multi_choice_int': ChoiceOptionModel.objects.exclude(name="default"),
- }).as_p(), """<p><label for="id_choice">Choice:</label> <select name="choice" id="id_choice">
-<option value="1">ChoiceOption 1</option>
-<option value="2" selected="selected">ChoiceOption 2</option>
-<option value="3">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-choice" value="2" id="initial-id_choice" /></p>
-<p><label for="id_choice_int">Choice int:</label> <select name="choice_int" id="id_choice_int">
-<option value="1">ChoiceOption 1</option>
-<option value="2" selected="selected">ChoiceOption 2</option>
-<option value="3">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-choice_int" value="2" id="initial-id_choice_int" /></p>
-<p><label for="id_multi_choice">Multi choice:</label> <select multiple="multiple" name="multi_choice" id="id_multi_choice">
-<option value="1">ChoiceOption 1</option>
-<option value="2" selected="selected">ChoiceOption 2</option>
-<option value="3" selected="selected">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-multi_choice" value="2" id="initial-id_multi_choice_0" />
-<input type="hidden" name="initial-multi_choice" value="3" id="initial-id_multi_choice_1" /> Hold down "Control", or "Command" on a Mac, to select more than one.</p>
-<p><label for="id_multi_choice_int">Multi choice int:</label> <select multiple="multiple" name="multi_choice_int" id="id_multi_choice_int">
-<option value="1">ChoiceOption 1</option>
-<option value="2" selected="selected">ChoiceOption 2</option>
-<option value="3" selected="selected">ChoiceOption 3</option>
-</select><input type="hidden" name="initial-multi_choice_int" value="2" id="initial-id_multi_choice_int_0" />
-<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1" /> Hold down "Control", or "Command" on a Mac, to select more than one.</p>""")
-
-
-
-class FormsModelTestCase(TestCase):
- def test_unicode_filename(self):
- # FileModel with unicode filename and data #########################
- f = FileForm(data={}, files={'file1': SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', 'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह')}, auto_id=False)
- self.assertTrue(f.is_valid())
- self.assertTrue('file1' in f.cleaned_data)
- m = FileModel.objects.create(file=f.cleaned_data['file1'])
- self.assertEqual(m.file.name, u'tests/\u6211\u96bb\u6c23\u588a\u8239\u88dd\u6eff\u6652\u9c54.txt')
- m.delete()
-
- def test_boundary_conditions(self):
- # Boundary conditions on a PostitiveIntegerField #########################
- class BoundaryForm(ModelForm):
- class Meta:
- model = BoundaryModel
-
- f = BoundaryForm({'positive_integer': 100})
- self.assertTrue(f.is_valid())
- f = BoundaryForm({'positive_integer': 0})
- self.assertTrue(f.is_valid())
- f = BoundaryForm({'positive_integer': -100})
- self.assertFalse(f.is_valid())
-
- def test_formfield_initial(self):
- # Formfield initial values ########
- # If the model has default values for some fields, they are used as the formfield
- # initial values.
- class DefaultsForm(ModelForm):
- class Meta:
- model = Defaults
-
- self.assertEqual(DefaultsForm().fields['name'].initial, u'class default value')
- self.assertEqual(DefaultsForm().fields['def_date'].initial, datetime.date(1980, 1, 1))
- self.assertEqual(DefaultsForm().fields['value'].initial, 42)
- r1 = DefaultsForm()['callable_default'].as_widget()
- r2 = DefaultsForm()['callable_default'].as_widget()
- self.assertNotEqual(r1, r2)
-
- # In a ModelForm that is passed an instance, the initial values come from the
- # instance's values, not the model's defaults.
- foo_instance = Defaults(name=u'instance value', def_date=datetime.date(1969, 4, 4), value=12)
- instance_form = DefaultsForm(instance=foo_instance)
- self.assertEqual(instance_form.initial['name'], u'instance value')
- self.assertEqual(instance_form.initial['def_date'], datetime.date(1969, 4, 4))
- self.assertEqual(instance_form.initial['value'], 12)
-
- from django.forms import CharField
-
- class ExcludingForm(ModelForm):
- name = CharField(max_length=255)
-
- class Meta:
- model = Defaults
- exclude = ['name', 'callable_default']
-
- f = ExcludingForm({'name': u'Hello', 'value': 99, 'def_date': datetime.date(1999, 3, 2)})
- self.assertTrue(f.is_valid())
- self.assertEqual(f.cleaned_data['name'], u'Hello')
- obj = f.save()
- self.assertEqual(obj.name, u'class default value')
- self.assertEqual(obj.value, 99)
- self.assertEqual(obj.def_date, datetime.date(1999, 3, 2))
diff --git a/parts/django/tests/regressiontests/forms/tests/regressions.py b/parts/django/tests/regressiontests/forms/tests/regressions.py
deleted file mode 100644
index ddec740..0000000
--- a/parts/django/tests/regressiontests/forms/tests/regressions.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# -*- coding: utf-8 -*-
-from unittest import TestCase
-from django.forms import *
-from django.utils.translation import ugettext_lazy, activate, deactivate
-
-from regressiontests.forms.models import Cheese
-
-
-class FormsRegressionsTestCase(TestCase):
- def test_class(self):
- # Tests to prevent against recurrences of earlier bugs.
- extra_attrs = {'class': 'special'}
-
- class TestForm(Form):
- f1 = CharField(max_length=10, widget=TextInput(attrs=extra_attrs))
- f2 = CharField(widget=TextInput(attrs=extra_attrs))
-
- self.assertEqual(TestForm(auto_id=False).as_p(), u'<p>F1: <input type="text" class="special" name="f1" maxlength="10" /></p>\n<p>F2: <input type="text" class="special" name="f2" /></p>')
-
- def test_regression_3600(self):
- # Tests for form i18n #
- # There were some problems with form translations in #3600
-
- class SomeForm(Form):
- username = CharField(max_length=10, label=ugettext_lazy('Username'))
-
- f = SomeForm()
- self.assertEqual(f.as_p(), '<p><label for="id_username">Username:</label> <input id="id_username" type="text" name="username" maxlength="10" /></p>')
-
- # Translations are done at rendering time, so multi-lingual apps can define forms)
- activate('de')
- self.assertEqual(f.as_p(), '<p><label for="id_username">Benutzername:</label> <input id="id_username" type="text" name="username" maxlength="10" /></p>')
- activate('pl')
- self.assertEqual(f.as_p(), u'<p><label for="id_username">Nazwa u\u017cytkownika:</label> <input id="id_username" type="text" name="username" maxlength="10" /></p>')
- deactivate()
-
- def test_regression_5216(self):
- # There was some problems with form translations in #5216
- class SomeForm(Form):
- field_1 = CharField(max_length=10, label=ugettext_lazy('field_1'))
- field_2 = CharField(max_length=10, label=ugettext_lazy('field_2'), widget=TextInput(attrs={'id': 'field_2_id'}))
-
- f = SomeForm()
- self.assertEqual(f['field_1'].label_tag(), '<label for="id_field_1">field_1</label>')
- self.assertEqual(f['field_2'].label_tag(), '<label for="field_2_id">field_2</label>')
-
- # Unicode decoding problems...
- GENDERS = ((u'\xc5', u'En tied\xe4'), (u'\xf8', u'Mies'), (u'\xdf', u'Nainen'))
-
- class SomeForm(Form):
- somechoice = ChoiceField(choices=GENDERS, widget=RadioSelect(), label=u'\xc5\xf8\xdf')
-
- f = SomeForm()
- self.assertEqual(f.as_p(), u'<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label> <ul>\n<li><label for="id_somechoice_0"><input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" /> En tied\xe4</label></li>\n<li><label for="id_somechoice_1"><input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" /> Mies</label></li>\n<li><label for="id_somechoice_2"><input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" /> Nainen</label></li>\n</ul></p>')
-
- # Testing choice validation with UTF-8 bytestrings as input (these are the
- # Russian abbreviations "мес." and "шт.".
- UNITS = (('\xd0\xbc\xd0\xb5\xd1\x81.', '\xd0\xbc\xd0\xb5\xd1\x81.'), ('\xd1\x88\xd1\x82.', '\xd1\x88\xd1\x82.'))
- f = ChoiceField(choices=UNITS)
- self.assertEqual(f.clean(u'\u0448\u0442.'), u'\u0448\u0442.')
- self.assertEqual(f.clean('\xd1\x88\xd1\x82.'), u'\u0448\u0442.')
-
- # Translated error messages used to be buggy.
- activate('ru')
- f = SomeForm({})
- self.assertEqual(f.as_p(), u'<ul class="errorlist"><li>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.</li></ul>\n<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label> <ul>\n<li><label for="id_somechoice_0"><input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" /> En tied\xe4</label></li>\n<li><label for="id_somechoice_1"><input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" /> Mies</label></li>\n<li><label for="id_somechoice_2"><input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" /> Nainen</label></li>\n</ul></p>')
- deactivate()
-
- # Deep copying translated text shouldn't raise an error)
- from django.utils.translation import gettext_lazy
-
- class CopyForm(Form):
- degree = IntegerField(widget=Select(choices=((1, gettext_lazy('test')),)))
-
- f = CopyForm()
-
- def test_misc(self):
- # There once was a problem with Form fields called "data". Let's make sure that
- # doesn't come back.
- class DataForm(Form):
- data = CharField(max_length=10)
-
- f = DataForm({'data': 'xyzzy'})
- self.assertTrue(f.is_valid())
- self.assertEqual(f.cleaned_data, {'data': u'xyzzy'})
-
- # A form with *only* hidden fields that has errors is going to be very unusual.
- class HiddenForm(Form):
- data = IntegerField(widget=HiddenInput)
-
- f = HiddenForm({})
- self.assertEqual(f.as_p(), u'<ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul>\n<p> <input type="hidden" name="data" id="id_data" /></p>')
- self.assertEqual(f.as_table(), u'<tr><td colspan="2"><ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul><input type="hidden" name="data" id="id_data" /></td></tr>')
-
- def test_xss_error_messages(self):
- ###################################################
- # Tests for XSS vulnerabilities in error messages #
- ###################################################
-
- # The forms layer doesn't escape input values directly because error messages
- # might be presented in non-HTML contexts. Instead, the message is just marked
- # for escaping by the template engine. So we'll need to construct a little
- # silly template to trigger the escaping.
- from django.template import Template, Context
- t = Template('{{ form.errors }}')
-
- class SomeForm(Form):
- field = ChoiceField(choices=[('one', 'One')])
-
- f = SomeForm({'field': '<script>'})
- self.assertEqual(t.render(Context({'form': f})), u'<ul class="errorlist"><li>field<ul class="errorlist"><li>Select a valid choice. &lt;script&gt; is not one of the available choices.</li></ul></li></ul>')
-
- class SomeForm(Form):
- field = MultipleChoiceField(choices=[('one', 'One')])
-
- f = SomeForm({'field': ['<script>']})
- self.assertEqual(t.render(Context({'form': f})), u'<ul class="errorlist"><li>field<ul class="errorlist"><li>Select a valid choice. &lt;script&gt; is not one of the available choices.</li></ul></li></ul>')
-
- from regressiontests.forms.models import ChoiceModel
-
- class SomeForm(Form):
- field = ModelMultipleChoiceField(ChoiceModel.objects.all())
-
- f = SomeForm({'field': ['<script>']})
- self.assertEqual(t.render(Context({'form': f})), u'<ul class="errorlist"><li>field<ul class="errorlist"><li>&quot;&lt;script&gt;&quot; is not a valid value for a primary key.</li></ul></li></ul>')
-
- def test_regression_14234(self):
- """
- Re-cleaning an instance that was added via a ModelForm should not raise
- a pk uniqueness error.
-
- """
- class CheeseForm(ModelForm):
- class Meta:
- model = Cheese
-
- form = CheeseForm({
- 'name': 'Brie',
- })
-
- self.assertTrue(form.is_valid())
-
- obj = form.save()
- obj.name = 'Camembert'
- obj.full_clean()
diff --git a/parts/django/tests/regressiontests/forms/tests/util.py b/parts/django/tests/regressiontests/forms/tests/util.py
deleted file mode 100644
index 8ea3bdd..0000000
--- a/parts/django/tests/regressiontests/forms/tests/util.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- coding: utf-8 -*-
-from unittest import TestCase
-from django.core.exceptions import ValidationError
-from django.forms.util import *
-from django.utils.translation import ugettext_lazy
-
-
-class FormsUtilTestCase(TestCase):
- # Tests for forms/util.py module.
-
- def test_flatatt(self):
- ###########
- # flatatt #
- ###########
-
- self.assertEqual(flatatt({'id': "header"}), u' id="header"')
- self.assertEqual(flatatt({'class': "news", 'title': "Read this"}), u' class="news" title="Read this"')
- self.assertEqual(flatatt({}), u'')
-
- def test_validation_error(self):
- ###################
- # ValidationError #
- ###################
-
- # Can take a string.
- self.assertEqual(str(ErrorList(ValidationError("There was an error.").messages)),
- '<ul class="errorlist"><li>There was an error.</li></ul>')
-
- # Can take a unicode string.
- self.assertEqual(str(ErrorList(ValidationError(u"Not \u03C0.").messages)),
- '<ul class="errorlist"><li>Not π.</li></ul>')
-
- # Can take a lazy string.
- self.assertEqual(str(ErrorList(ValidationError(ugettext_lazy("Error.")).messages)),
- '<ul class="errorlist"><li>Error.</li></ul>')
-
- # Can take a list.
- self.assertEqual(str(ErrorList(ValidationError(["Error one.", "Error two."]).messages)),
- '<ul class="errorlist"><li>Error one.</li><li>Error two.</li></ul>')
-
- # Can take a mixture in a list.
- self.assertEqual(str(ErrorList(ValidationError(["First error.", u"Not \u03C0.", ugettext_lazy("Error.")]).messages)),
- '<ul class="errorlist"><li>First error.</li><li>Not π.</li><li>Error.</li></ul>')
-
- class VeryBadError:
- def __unicode__(self): return u"A very bad error."
-
- # Can take a non-string.
- self.assertEqual(str(ErrorList(ValidationError(VeryBadError()).messages)),
- '<ul class="errorlist"><li>A very bad error.</li></ul>')
-
- # Escapes non-safe input but not input marked safe.
- example = 'Example of link: <a href="http://www.example.com/">example</a>'
- self.assertEqual(str(ErrorList([example])),
- '<ul class="errorlist"><li>Example of link: &lt;a href=&quot;http://www.example.com/&quot;&gt;example&lt;/a&gt;</li></ul>')
- self.assertEqual(str(ErrorList([mark_safe(example)])),
- '<ul class="errorlist"><li>Example of link: <a href="http://www.example.com/">example</a></li></ul>')
diff --git a/parts/django/tests/regressiontests/forms/tests/validators.py b/parts/django/tests/regressiontests/forms/tests/validators.py
deleted file mode 100644
index ed8e8fb..0000000
--- a/parts/django/tests/regressiontests/forms/tests/validators.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from unittest import TestCase
-
-from django import forms
-from django.core import validators
-from django.core.exceptions import ValidationError
-
-
-class TestFieldWithValidators(TestCase):
- def test_all_errors_get_reported(self):
- field = forms.CharField(
- validators=[validators.validate_integer, validators.validate_email]
- )
- self.assertRaises(ValidationError, field.clean, 'not int nor mail')
- try:
- field.clean('not int nor mail')
- except ValidationError, e:
- self.assertEqual(2, len(e.messages))
diff --git a/parts/django/tests/regressiontests/forms/tests/widgets.py b/parts/django/tests/regressiontests/forms/tests/widgets.py
deleted file mode 100644
index 9e7c6f6..0000000
--- a/parts/django/tests/regressiontests/forms/tests/widgets.py
+++ /dev/null
@@ -1,1070 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from decimal import Decimal
-import re
-import time
-from unittest import TestCase
-from django.conf import settings
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.forms import *
-from django.forms.widgets import RadioFieldRenderer
-from django.utils import copycompat as copy
-from django.utils import formats
-from django.utils.safestring import mark_safe
-from django.utils.translation import activate, deactivate
-
-
-
-class FormsWidgetTestCase(TestCase):
- # Each Widget class corresponds to an HTML form widget. A Widget knows how to
- # render itself, given a field name and some data. Widgets don't perform
- # validation.
- def test_textinput(self):
- w = TextInput()
- self.assertEqual(w.render('email', ''), u'<input type="text" name="email" />')
- self.assertEqual(w.render('email', None), u'<input type="text" name="email" />')
- self.assertEqual(w.render('email', 'test@example.com'), u'<input type="text" name="email" value="test@example.com" />')
- self.assertEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="text" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />')
- self.assertEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="text" name="email" value="test@example.com" class="fun" />')
-
- # Note that doctest in Python 2.4 (and maybe 2.5?) doesn't support non-ascii
- # characters in output, so we're displaying the repr() here.
- self.assertEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="text" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun" />')
-
- # You can also pass 'attrs' to the constructor:
- w = TextInput(attrs={'class': 'fun'})
- self.assertEqual(w.render('email', ''), u'<input type="text" class="fun" name="email" />')
- self.assertEqual(w.render('email', 'foo@example.com'), u'<input type="text" class="fun" value="foo@example.com" name="email" />')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = TextInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="text" class="special" name="email" />')
-
- # 'attrs' can be safe-strings if needed)
- w = TextInput(attrs={'onBlur': mark_safe("function('foo')")})
- self.assertEqual(w.render('email', ''), u'<input onBlur="function(\'foo\')" type="text" name="email" />')
-
- def test_passwordinput(self):
- w = PasswordInput()
- self.assertEqual(w.render('email', ''), u'<input type="password" name="email" />')
- self.assertEqual(w.render('email', None), u'<input type="password" name="email" />')
- self.assertEqual(w.render('email', 'test@example.com'), u'<input type="password" name="email" value="test@example.com" />')
- self.assertEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="password" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />')
- self.assertEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="password" name="email" value="test@example.com" class="fun" />')
-
- # You can also pass 'attrs' to the constructor:
- w = PasswordInput(attrs={'class': 'fun'})
- self.assertEqual(w.render('email', ''), u'<input type="password" class="fun" name="email" />')
- self.assertEqual(w.render('email', 'foo@example.com'), u'<input type="password" class="fun" value="foo@example.com" name="email" />')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = PasswordInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="password" class="special" name="email" />')
-
- self.assertEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="password" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
-
- # The render_value argument lets you specify whether the widget should render
- # its value. You may want to do this for security reasons.
- w = PasswordInput(render_value=True)
- self.assertEqual(w.render('email', 'secret'), u'<input type="password" name="email" value="secret" />')
-
- w = PasswordInput(render_value=False)
- self.assertEqual(w.render('email', ''), u'<input type="password" name="email" />')
- self.assertEqual(w.render('email', None), u'<input type="password" name="email" />')
- self.assertEqual(w.render('email', 'secret'), u'<input type="password" name="email" />')
-
- w = PasswordInput(attrs={'class': 'fun'}, render_value=False)
- self.assertEqual(w.render('email', 'secret'), u'<input type="password" class="fun" name="email" />')
-
- def test_hiddeninput(self):
- w = HiddenInput()
- self.assertEqual(w.render('email', ''), u'<input type="hidden" name="email" />')
- self.assertEqual(w.render('email', None), u'<input type="hidden" name="email" />')
- self.assertEqual(w.render('email', 'test@example.com'), u'<input type="hidden" name="email" value="test@example.com" />')
- self.assertEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="hidden" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />')
- self.assertEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="hidden" name="email" value="test@example.com" class="fun" />')
-
- # You can also pass 'attrs' to the constructor:
- w = HiddenInput(attrs={'class': 'fun'})
- self.assertEqual(w.render('email', ''), u'<input type="hidden" class="fun" name="email" />')
- self.assertEqual(w.render('email', 'foo@example.com'), u'<input type="hidden" class="fun" value="foo@example.com" name="email" />')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = HiddenInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="hidden" class="special" name="email" />')
-
- self.assertEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = HiddenInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="hidden" class="special" name="email" />')
-
- # Boolean values are rendered to their string forms ("True" and "False").
- w = HiddenInput()
- self.assertEqual(w.render('get_spam', False), u'<input type="hidden" name="get_spam" value="False" />')
- self.assertEqual(w.render('get_spam', True), u'<input type="hidden" name="get_spam" value="True" />')
-
- def test_multiplehiddeninput(self):
- w = MultipleHiddenInput()
- self.assertEqual(w.render('email', []), u'')
- self.assertEqual(w.render('email', None), u'')
- self.assertEqual(w.render('email', ['test@example.com']), u'<input type="hidden" name="email" value="test@example.com" />')
- self.assertEqual(w.render('email', ['some "quoted" & ampersanded value']), u'<input type="hidden" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />')
- self.assertEqual(w.render('email', ['test@example.com', 'foo@example.com']), u'<input type="hidden" name="email" value="test@example.com" />\n<input type="hidden" name="email" value="foo@example.com" />')
- self.assertEqual(w.render('email', ['test@example.com'], attrs={'class': 'fun'}), u'<input type="hidden" name="email" value="test@example.com" class="fun" />')
- self.assertEqual(w.render('email', ['test@example.com', 'foo@example.com'], attrs={'class': 'fun'}), u'<input type="hidden" name="email" value="test@example.com" class="fun" />\n<input type="hidden" name="email" value="foo@example.com" class="fun" />')
-
- # You can also pass 'attrs' to the constructor:
- w = MultipleHiddenInput(attrs={'class': 'fun'})
- self.assertEqual(w.render('email', []), u'')
- self.assertEqual(w.render('email', ['foo@example.com']), u'<input type="hidden" class="fun" value="foo@example.com" name="email" />')
- self.assertEqual(w.render('email', ['foo@example.com', 'test@example.com']), u'<input type="hidden" class="fun" value="foo@example.com" name="email" />\n<input type="hidden" class="fun" value="test@example.com" name="email" />')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = MultipleHiddenInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('email', ['foo@example.com'], attrs={'class': 'special'}), u'<input type="hidden" class="special" value="foo@example.com" name="email" />')
-
- self.assertEqual(w.render('email', ['ŠĐĆŽćžšđ'], attrs={'class': 'fun'}), u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = MultipleHiddenInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('email', ['foo@example.com'], attrs={'class': 'special'}), u'<input type="hidden" class="special" value="foo@example.com" name="email" />')
-
- # Each input gets a separate ID.
- w = MultipleHiddenInput()
- self.assertEqual(w.render('letters', list('abc'), attrs={'id': 'hideme'}), u'<input type="hidden" name="letters" value="a" id="hideme_0" />\n<input type="hidden" name="letters" value="b" id="hideme_1" />\n<input type="hidden" name="letters" value="c" id="hideme_2" />')
-
- def test_fileinput(self):
- # FileInput widgets don't ever show the value, because the old value is of no use
- # if you are updating the form or if the provided file generated an error.
- w = FileInput()
- self.assertEqual(w.render('email', ''), u'<input type="file" name="email" />')
- self.assertEqual(w.render('email', None), u'<input type="file" name="email" />')
- self.assertEqual(w.render('email', 'test@example.com'), u'<input type="file" name="email" />')
- self.assertEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="file" name="email" />')
- self.assertEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="file" name="email" class="fun" />')
-
- # You can also pass 'attrs' to the constructor:
- w = FileInput(attrs={'class': 'fun'})
- self.assertEqual(w.render('email', ''), u'<input type="file" class="fun" name="email" />')
- self.assertEqual(w.render('email', 'foo@example.com'), u'<input type="file" class="fun" name="email" />')
-
- self.assertEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="file" class="fun" name="email" />')
-
- # Test for the behavior of _has_changed for FileInput. The value of data will
- # more than likely come from request.FILES. The value of initial data will
- # likely be a filename stored in the database. Since its value is of no use to
- # a FileInput it is ignored.
- w = FileInput()
-
- # No file was uploaded and no initial data.
- self.assertFalse(w._has_changed(u'', None))
-
- # A file was uploaded and no initial data.
- self.assertTrue(w._has_changed(u'', {'filename': 'resume.txt', 'content': 'My resume'}))
-
- # A file was not uploaded, but there is initial data
- self.assertFalse(w._has_changed(u'resume.txt', None))
-
- # A file was uploaded and there is initial data (file identity is not dealt
- # with here)
- self.assertTrue(w._has_changed('resume.txt', {'filename': 'resume.txt', 'content': 'My resume'}))
-
- def test_textarea(self):
- w = Textarea()
- self.assertEqual(w.render('msg', ''), u'<textarea rows="10" cols="40" name="msg"></textarea>')
- self.assertEqual(w.render('msg', None), u'<textarea rows="10" cols="40" name="msg"></textarea>')
- self.assertEqual(w.render('msg', 'value'), u'<textarea rows="10" cols="40" name="msg">value</textarea>')
- self.assertEqual(w.render('msg', 'some "quoted" & ampersanded value'), u'<textarea rows="10" cols="40" name="msg">some &quot;quoted&quot; &amp; ampersanded value</textarea>')
- self.assertEqual(w.render('msg', mark_safe('pre &quot;quoted&quot; value')), u'<textarea rows="10" cols="40" name="msg">pre &quot;quoted&quot; value</textarea>')
- self.assertEqual(w.render('msg', 'value', attrs={'class': 'pretty', 'rows': 20}), u'<textarea class="pretty" rows="20" cols="40" name="msg">value</textarea>')
-
- # You can also pass 'attrs' to the constructor:
- w = Textarea(attrs={'class': 'pretty'})
- self.assertEqual(w.render('msg', ''), u'<textarea rows="10" cols="40" name="msg" class="pretty"></textarea>')
- self.assertEqual(w.render('msg', 'example'), u'<textarea rows="10" cols="40" name="msg" class="pretty">example</textarea>')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = Textarea(attrs={'class': 'pretty'})
- self.assertEqual(w.render('msg', '', attrs={'class': 'special'}), u'<textarea rows="10" cols="40" name="msg" class="special"></textarea>')
-
- self.assertEqual(w.render('msg', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<textarea rows="10" cols="40" name="msg" class="fun">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>')
-
- def test_checkboxinput(self):
- w = CheckboxInput()
- self.assertEqual(w.render('is_cool', ''), u'<input type="checkbox" name="is_cool" />')
- self.assertEqual(w.render('is_cool', None), u'<input type="checkbox" name="is_cool" />')
- self.assertEqual(w.render('is_cool', False), u'<input type="checkbox" name="is_cool" />')
- self.assertEqual(w.render('is_cool', True), u'<input checked="checked" type="checkbox" name="is_cool" />')
-
- # Using any value that's not in ('', None, False, True) will check the checkbox
- # and set the 'value' attribute.
- self.assertEqual(w.render('is_cool', 'foo'), u'<input checked="checked" type="checkbox" name="is_cool" value="foo" />')
-
- self.assertEqual(w.render('is_cool', False, attrs={'class': 'pretty'}), u'<input type="checkbox" name="is_cool" class="pretty" />')
-
- # You can also pass 'attrs' to the constructor:
- w = CheckboxInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('is_cool', ''), u'<input type="checkbox" class="pretty" name="is_cool" />')
-
- # 'attrs' passed to render() get precedence over those passed to the constructor:
- w = CheckboxInput(attrs={'class': 'pretty'})
- self.assertEqual(w.render('is_cool', '', attrs={'class': 'special'}), u'<input type="checkbox" class="special" name="is_cool" />')
-
- # You can pass 'check_test' to the constructor. This is a callable that takes the
- # value and returns True if the box should be checked.
- w = CheckboxInput(check_test=lambda value: value.startswith('hello'))
- self.assertEqual(w.render('greeting', ''), u'<input type="checkbox" name="greeting" />')
- self.assertEqual(w.render('greeting', 'hello'), u'<input checked="checked" type="checkbox" name="greeting" value="hello" />')
- self.assertEqual(w.render('greeting', 'hello there'), u'<input checked="checked" type="checkbox" name="greeting" value="hello there" />')
- self.assertEqual(w.render('greeting', 'hello & goodbye'), u'<input checked="checked" type="checkbox" name="greeting" value="hello &amp; goodbye" />')
-
- # A subtlety: If the 'check_test' argument cannot handle a value and raises any
- # exception during its __call__, then the exception will be swallowed and the box
- # will not be checked. In this example, the 'check_test' assumes the value has a
- # startswith() method, which fails for the values True, False and None.
- self.assertEqual(w.render('greeting', True), u'<input type="checkbox" name="greeting" />')
- self.assertEqual(w.render('greeting', False), u'<input type="checkbox" name="greeting" />')
- self.assertEqual(w.render('greeting', None), u'<input type="checkbox" name="greeting" />')
-
- # The CheckboxInput widget will return False if the key is not found in the data
- # dictionary (because HTML form submission doesn't send any result for unchecked
- # checkboxes).
- self.assertFalse(w.value_from_datadict({}, {}, 'testing'))
-
- self.assertFalse(w._has_changed(None, None))
- self.assertFalse(w._has_changed(None, u''))
- self.assertFalse(w._has_changed(u'', None))
- self.assertFalse(w._has_changed(u'', u''))
- self.assertTrue(w._has_changed(False, u'on'))
- self.assertFalse(w._has_changed(True, u'on'))
- self.assertTrue(w._has_changed(True, u''))
-
- def test_select(self):
- w = Select()
- self.assertEqual(w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select name="beatle">
-<option value="J" selected="selected">John</option>
-<option value="P">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>""")
-
- # If the value is None, none of the options are selected:
- self.assertEqual(w.render('beatle', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select name="beatle">
-<option value="J">John</option>
-<option value="P">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>""")
-
- # If the value corresponds to a label (but not to an option value), none of the options are selected:
- self.assertEqual(w.render('beatle', 'John', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select name="beatle">
-<option value="J">John</option>
-<option value="P">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>""")
-
- # The value is compared to its str():
- self.assertEqual(w.render('num', 2, choices=[('1', '1'), ('2', '2'), ('3', '3')]), """<select name="num">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
- self.assertEqual(w.render('num', '2', choices=[(1, 1), (2, 2), (3, 3)]), """<select name="num">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
- self.assertEqual(w.render('num', 2, choices=[(1, 1), (2, 2), (3, 3)]), """<select name="num">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
-
- # The 'choices' argument can be any iterable:
- from itertools import chain
- def get_choices():
- for i in range(5):
- yield (i, i)
- self.assertEqual(w.render('num', 2, choices=get_choices()), """<select name="num">
-<option value="0">0</option>
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-</select>""")
- things = ({'id': 1, 'name': 'And Boom'}, {'id': 2, 'name': 'One More Thing!'})
- class SomeForm(Form):
- somechoice = ChoiceField(choices=chain((('', '-'*9),), [(thing['id'], thing['name']) for thing in things]))
- f = SomeForm()
- self.assertEqual(f.as_table(), u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>')
- self.assertEqual(f.as_table(), u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>')
- f = SomeForm({'somechoice': 2})
- self.assertEqual(f.as_table(), u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="">---------</option>\n<option value="1">And Boom</option>\n<option value="2" selected="selected">One More Thing!</option>\n</select></td></tr>')
-
- # You can also pass 'choices' to the constructor:
- w = Select(choices=[(1, 1), (2, 2), (3, 3)])
- self.assertEqual(w.render('num', 2), """<select name="num">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
-
- # If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
- self.assertEqual(w.render('num', 2, choices=[(4, 4), (5, 5)]), """<select name="num">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-</select>""")
-
- # Choices are escaped correctly
- self.assertEqual(w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you &gt; me')))), """<select name="escape">
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="bad">you &amp; me</option>
-<option value="good">you &gt; me</option>
-</select>""")
-
- # Unicode choices are correctly rendered as HTML
- self.assertEqual(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), u'<select name="email">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>')
-
- # If choices is passed to the constructor and is a generator, it can be iterated
- # over multiple times without getting consumed:
- w = Select(choices=get_choices())
- self.assertEqual(w.render('num', 2), """<select name="num">
-<option value="0">0</option>
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-</select>""")
- self.assertEqual(w.render('num', 3), """<select name="num">
-<option value="0">0</option>
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3" selected="selected">3</option>
-<option value="4">4</option>
-</select>""")
-
- # Choices can be nested one level in order to create HTML optgroups:
- w.choices=(('outer1', 'Outer 1'), ('Group "1"', (('inner1', 'Inner 1'), ('inner2', 'Inner 2'))))
- self.assertEqual(w.render('nestchoice', None), """<select name="nestchoice">
-<option value="outer1">Outer 1</option>
-<optgroup label="Group &quot;1&quot;">
-<option value="inner1">Inner 1</option>
-<option value="inner2">Inner 2</option>
-</optgroup>
-</select>""")
-
- self.assertEqual(w.render('nestchoice', 'outer1'), """<select name="nestchoice">
-<option value="outer1" selected="selected">Outer 1</option>
-<optgroup label="Group &quot;1&quot;">
-<option value="inner1">Inner 1</option>
-<option value="inner2">Inner 2</option>
-</optgroup>
-</select>""")
-
- self.assertEqual(w.render('nestchoice', 'inner1'), """<select name="nestchoice">
-<option value="outer1">Outer 1</option>
-<optgroup label="Group &quot;1&quot;">
-<option value="inner1" selected="selected">Inner 1</option>
-<option value="inner2">Inner 2</option>
-</optgroup>
-</select>""")
-
- def test_nullbooleanselect(self):
- w = NullBooleanSelect()
- self.assertTrue(w.render('is_cool', True), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2" selected="selected">Yes</option>
-<option value="3">No</option>
-</select>""")
- self.assertEqual(w.render('is_cool', False), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2">Yes</option>
-<option value="3" selected="selected">No</option>
-</select>""")
- self.assertEqual(w.render('is_cool', None), """<select name="is_cool">
-<option value="1" selected="selected">Unknown</option>
-<option value="2">Yes</option>
-<option value="3">No</option>
-</select>""")
- self.assertEqual(w.render('is_cool', '2'), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2" selected="selected">Yes</option>
-<option value="3">No</option>
-</select>""")
- self.assertEqual(w.render('is_cool', '3'), """<select name="is_cool">
-<option value="1">Unknown</option>
-<option value="2">Yes</option>
-<option value="3" selected="selected">No</option>
-</select>""")
- self.assertTrue(w._has_changed(False, None))
- self.assertTrue(w._has_changed(None, False))
- self.assertFalse(w._has_changed(None, None))
- self.assertFalse(w._has_changed(False, False))
- self.assertTrue(w._has_changed(True, False))
- self.assertTrue(w._has_changed(True, None))
- self.assertTrue(w._has_changed(True, False))
-
- def test_selectmultiple(self):
- w = SelectMultiple()
- self.assertEqual(w.render('beatles', ['J'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select multiple="multiple" name="beatles">
-<option value="J" selected="selected">John</option>
-<option value="P">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>""")
- self.assertEqual(w.render('beatles', ['J', 'P'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select multiple="multiple" name="beatles">
-<option value="J" selected="selected">John</option>
-<option value="P" selected="selected">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>""")
- self.assertEqual(w.render('beatles', ['J', 'P', 'R'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select multiple="multiple" name="beatles">
-<option value="J" selected="selected">John</option>
-<option value="P" selected="selected">Paul</option>
-<option value="G">George</option>
-<option value="R" selected="selected">Ringo</option>
-</select>""")
-
- # If the value is None, none of the options are selected:
- self.assertEqual(w.render('beatles', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select multiple="multiple" name="beatles">
-<option value="J">John</option>
-<option value="P">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>""")
-
- # If the value corresponds to a label (but not to an option value), none of the options are selected:
- self.assertEqual(w.render('beatles', ['John'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select multiple="multiple" name="beatles">
-<option value="J">John</option>
-<option value="P">Paul</option>
-<option value="G">George</option>
-<option value="R">Ringo</option>
-</select>""")
-
- # If multiple values are given, but some of them are not valid, the valid ones are selected:
- self.assertEqual(w.render('beatles', ['J', 'G', 'foo'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<select multiple="multiple" name="beatles">
-<option value="J" selected="selected">John</option>
-<option value="P">Paul</option>
-<option value="G" selected="selected">George</option>
-<option value="R">Ringo</option>
-</select>""")
-
- # The value is compared to its str():
- self.assertEqual(w.render('nums', [2], choices=[('1', '1'), ('2', '2'), ('3', '3')]), """<select multiple="multiple" name="nums">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
- self.assertEqual(w.render('nums', ['2'], choices=[(1, 1), (2, 2), (3, 3)]), """<select multiple="multiple" name="nums">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
- self.assertEqual(w.render('nums', [2], choices=[(1, 1), (2, 2), (3, 3)]), """<select multiple="multiple" name="nums">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
-
- # The 'choices' argument can be any iterable:
- def get_choices():
- for i in range(5):
- yield (i, i)
- self.assertEqual(w.render('nums', [2], choices=get_choices()), """<select multiple="multiple" name="nums">
-<option value="0">0</option>
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-</select>""")
-
- # You can also pass 'choices' to the constructor:
- w = SelectMultiple(choices=[(1, 1), (2, 2), (3, 3)])
- self.assertEqual(w.render('nums', [2]), """<select multiple="multiple" name="nums">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-</select>""")
-
- # If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
- self.assertEqual(w.render('nums', [2], choices=[(4, 4), (5, 5)]), """<select multiple="multiple" name="nums">
-<option value="1">1</option>
-<option value="2" selected="selected">2</option>
-<option value="3">3</option>
-<option value="4">4</option>
-<option value="5">5</option>
-</select>""")
-
- # Choices are escaped correctly
- self.assertEqual(w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you &gt; me')))), """<select multiple="multiple" name="escape">
-<option value="1">1</option>
-<option value="2">2</option>
-<option value="3">3</option>
-<option value="bad">you &amp; me</option>
-<option value="good">you &gt; me</option>
-</select>""")
-
- # Unicode choices are correctly rendered as HTML
- self.assertEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), u'<select multiple="multiple" name="nums">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>')
-
- # Test the usage of _has_changed
- self.assertFalse(w._has_changed(None, None))
- self.assertFalse(w._has_changed([], None))
- self.assertTrue(w._has_changed(None, [u'1']))
- self.assertFalse(w._has_changed([1, 2], [u'1', u'2']))
- self.assertTrue(w._has_changed([1, 2], [u'1']))
- self.assertTrue(w._has_changed([1, 2], [u'1', u'3']))
-
- # Choices can be nested one level in order to create HTML optgroups:
- w.choices = (('outer1', 'Outer 1'), ('Group "1"', (('inner1', 'Inner 1'), ('inner2', 'Inner 2'))))
- self.assertEqual(w.render('nestchoice', None), """<select multiple="multiple" name="nestchoice">
-<option value="outer1">Outer 1</option>
-<optgroup label="Group &quot;1&quot;">
-<option value="inner1">Inner 1</option>
-<option value="inner2">Inner 2</option>
-</optgroup>
-</select>""")
-
- self.assertEqual(w.render('nestchoice', ['outer1']), """<select multiple="multiple" name="nestchoice">
-<option value="outer1" selected="selected">Outer 1</option>
-<optgroup label="Group &quot;1&quot;">
-<option value="inner1">Inner 1</option>
-<option value="inner2">Inner 2</option>
-</optgroup>
-</select>""")
-
- self.assertEqual(w.render('nestchoice', ['inner1']), """<select multiple="multiple" name="nestchoice">
-<option value="outer1">Outer 1</option>
-<optgroup label="Group &quot;1&quot;">
-<option value="inner1" selected="selected">Inner 1</option>
-<option value="inner2">Inner 2</option>
-</optgroup>
-</select>""")
-
- self.assertEqual(w.render('nestchoice', ['outer1', 'inner2']), """<select multiple="multiple" name="nestchoice">
-<option value="outer1" selected="selected">Outer 1</option>
-<optgroup label="Group &quot;1&quot;">
-<option value="inner1">Inner 1</option>
-<option value="inner2" selected="selected">Inner 2</option>
-</optgroup>
-</select>""")
-
- def test_radioselect(self):
- w = RadioSelect()
- self.assertEqual(w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input checked="checked" type="radio" name="beatle" value="J" /> John</label></li>
-<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
-<li><label><input type="radio" name="beatle" value="G" /> George</label></li>
-<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
-</ul>""")
-
- # If the value is None, none of the options are checked:
- self.assertEqual(w.render('beatle', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input type="radio" name="beatle" value="J" /> John</label></li>
-<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
-<li><label><input type="radio" name="beatle" value="G" /> George</label></li>
-<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
-</ul>""")
-
- # If the value corresponds to a label (but not to an option value), none of the options are checked:
- self.assertEqual(w.render('beatle', 'John', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input type="radio" name="beatle" value="J" /> John</label></li>
-<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
-<li><label><input type="radio" name="beatle" value="G" /> George</label></li>
-<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
-</ul>""")
-
- # The value is compared to its str():
- self.assertEqual(w.render('num', 2, choices=[('1', '1'), ('2', '2'), ('3', '3')]), """<ul>
-<li><label><input type="radio" name="num" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
-<li><label><input type="radio" name="num" value="3" /> 3</label></li>
-</ul>""")
- self.assertEqual(w.render('num', '2', choices=[(1, 1), (2, 2), (3, 3)]), """<ul>
-<li><label><input type="radio" name="num" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
-<li><label><input type="radio" name="num" value="3" /> 3</label></li>
-</ul>""")
- self.assertEqual(w.render('num', 2, choices=[(1, 1), (2, 2), (3, 3)]), """<ul>
-<li><label><input type="radio" name="num" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
-<li><label><input type="radio" name="num" value="3" /> 3</label></li>
-</ul>""")
-
- # The 'choices' argument can be any iterable:
- def get_choices():
- for i in range(5):
- yield (i, i)
- self.assertEqual(w.render('num', 2, choices=get_choices()), """<ul>
-<li><label><input type="radio" name="num" value="0" /> 0</label></li>
-<li><label><input type="radio" name="num" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
-<li><label><input type="radio" name="num" value="3" /> 3</label></li>
-<li><label><input type="radio" name="num" value="4" /> 4</label></li>
-</ul>""")
-
- # You can also pass 'choices' to the constructor:
- w = RadioSelect(choices=[(1, 1), (2, 2), (3, 3)])
- self.assertEqual(w.render('num', 2), """<ul>
-<li><label><input type="radio" name="num" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
-<li><label><input type="radio" name="num" value="3" /> 3</label></li>
-</ul>""")
-
- # If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
- self.assertEqual(w.render('num', 2, choices=[(4, 4), (5, 5)]), """<ul>
-<li><label><input type="radio" name="num" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
-<li><label><input type="radio" name="num" value="3" /> 3</label></li>
-<li><label><input type="radio" name="num" value="4" /> 4</label></li>
-<li><label><input type="radio" name="num" value="5" /> 5</label></li>
-</ul>""")
-
- # RadioSelect uses a RadioFieldRenderer to render the individual radio inputs.
- # You can manipulate that object directly to customize the way the RadioSelect
- # is rendered.
- w = RadioSelect()
- r = w.get_renderer('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
- inp_set1 = []
- inp_set2 = []
- inp_set3 = []
- inp_set4 = []
-
- for inp in r:
- inp_set1.append(str(inp))
- inp_set2.append('%s<br />' % inp)
- inp_set3.append('<p>%s %s</p>' % (inp.tag(), inp.choice_label))
- inp_set4.append('%s %s %s %s %s' % (inp.name, inp.value, inp.choice_value, inp.choice_label, inp.is_checked()))
-
- self.assertEqual('\n'.join(inp_set1), """<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label>
-<label><input type="radio" name="beatle" value="P" /> Paul</label>
-<label><input type="radio" name="beatle" value="G" /> George</label>
-<label><input type="radio" name="beatle" value="R" /> Ringo</label>""")
- self.assertEqual('\n'.join(inp_set2), """<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label><br />
-<label><input type="radio" name="beatle" value="P" /> Paul</label><br />
-<label><input type="radio" name="beatle" value="G" /> George</label><br />
-<label><input type="radio" name="beatle" value="R" /> Ringo</label><br />""")
- self.assertEqual('\n'.join(inp_set3), """<p><input checked="checked" type="radio" name="beatle" value="J" /> John</p>
-<p><input type="radio" name="beatle" value="P" /> Paul</p>
-<p><input type="radio" name="beatle" value="G" /> George</p>
-<p><input type="radio" name="beatle" value="R" /> Ringo</p>""")
- self.assertEqual('\n'.join(inp_set4), """beatle J J John True
-beatle J P Paul False
-beatle J G George False
-beatle J R Ringo False""")
-
- # You can create your own custom renderers for RadioSelect to use.
- class MyRenderer(RadioFieldRenderer):
- def render(self):
- return u'<br />\n'.join([unicode(choice) for choice in self])
- w = RadioSelect(renderer=MyRenderer)
- self.assertEqual(w.render('beatle', 'G', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<label><input type="radio" name="beatle" value="J" /> John</label><br />
-<label><input type="radio" name="beatle" value="P" /> Paul</label><br />
-<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br />
-<label><input type="radio" name="beatle" value="R" /> Ringo</label>""")
-
- # Or you can use custom RadioSelect fields that use your custom renderer.
- class CustomRadioSelect(RadioSelect):
- renderer = MyRenderer
- w = CustomRadioSelect()
- self.assertEqual(w.render('beatle', 'G', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<label><input type="radio" name="beatle" value="J" /> John</label><br />
-<label><input type="radio" name="beatle" value="P" /> Paul</label><br />
-<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br />
-<label><input type="radio" name="beatle" value="R" /> Ringo</label>""")
-
- # A RadioFieldRenderer object also allows index access to individual RadioInput
- w = RadioSelect()
- r = w.get_renderer('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
- self.assertEqual(str(r[1]), '<label><input type="radio" name="beatle" value="P" /> Paul</label>')
- self.assertEqual(str(r[0]), '<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label>')
- self.assertTrue(r[0].is_checked())
- self.assertFalse(r[1].is_checked())
- self.assertEqual((r[1].name, r[1].value, r[1].choice_value, r[1].choice_label), ('beatle', u'J', u'P', u'Paul'))
-
- try:
- r[10]
- self.fail("This offset should not exist.")
- except IndexError:
- pass
-
- # Choices are escaped correctly
- w = RadioSelect()
- self.assertEqual(w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you &gt; me')))), """<ul>
-<li><label><input type="radio" name="escape" value="bad" /> you &amp; me</label></li>
-<li><label><input type="radio" name="escape" value="good" /> you &gt; me</label></li>
-</ul>""")
-
- # Unicode choices are correctly rendered as HTML
- w = RadioSelect()
- self.assertEqual(unicode(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])), u'<ul>\n<li><label><input checked="checked" type="radio" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="radio" name="email" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>')
-
- # Attributes provided at instantiation are passed to the constituent inputs
- w = RadioSelect(attrs={'id':'foo'})
- self.assertEqual(w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label for="foo_0"><input checked="checked" type="radio" id="foo_0" value="J" name="beatle" /> John</label></li>
-<li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle" /> Paul</label></li>
-<li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle" /> George</label></li>
-<li><label for="foo_3"><input type="radio" id="foo_3" value="R" name="beatle" /> Ringo</label></li>
-</ul>""")
-
- # Attributes provided at render-time are passed to the constituent inputs
- w = RadioSelect()
- self.assertEqual(w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')), attrs={'id':'bar'}), """<ul>
-<li><label for="bar_0"><input checked="checked" type="radio" id="bar_0" value="J" name="beatle" /> John</label></li>
-<li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></li>
-<li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></li>
-<li><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle" /> Ringo</label></li>
-</ul>""")
-
- def test_checkboxselectmultiple(self):
- w = CheckboxSelectMultiple()
- self.assertEqual(w.render('beatles', ['J'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
-<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
-<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
-<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
-</ul>""")
- self.assertEqual(w.render('beatles', ['J', 'P'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="P" /> Paul</label></li>
-<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
-<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
-</ul>""")
- self.assertEqual(w.render('beatles', ['J', 'P', 'R'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="P" /> Paul</label></li>
-<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="R" /> Ringo</label></li>
-</ul>""")
-
- # If the value is None, none of the options are selected:
- self.assertEqual(w.render('beatles', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input type="checkbox" name="beatles" value="J" /> John</label></li>
-<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
-<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
-<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
-</ul>""")
-
- # If the value corresponds to a label (but not to an option value), none of the options are selected:
- self.assertEqual(w.render('beatles', ['John'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input type="checkbox" name="beatles" value="J" /> John</label></li>
-<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
-<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
-<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
-</ul>""")
-
- # If multiple values are given, but some of them are not valid, the valid ones are selected:
- self.assertEqual(w.render('beatles', ['J', 'G', 'foo'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
-<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
-<li><label><input checked="checked" type="checkbox" name="beatles" value="G" /> George</label></li>
-<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
-</ul>""")
-
- # The value is compared to its str():
- self.assertEqual(w.render('nums', [2], choices=[('1', '1'), ('2', '2'), ('3', '3')]), """<ul>
-<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
-<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
-</ul>""")
- self.assertEqual(w.render('nums', ['2'], choices=[(1, 1), (2, 2), (3, 3)]), """<ul>
-<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
-<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
-</ul>""")
- self.assertEqual(w.render('nums', [2], choices=[(1, 1), (2, 2), (3, 3)]), """<ul>
-<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
-<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
-</ul>""")
-
- # The 'choices' argument can be any iterable:
- def get_choices():
- for i in range(5):
- yield (i, i)
- self.assertEqual(w.render('nums', [2], choices=get_choices()), """<ul>
-<li><label><input type="checkbox" name="nums" value="0" /> 0</label></li>
-<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
-<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
-<li><label><input type="checkbox" name="nums" value="4" /> 4</label></li>
-</ul>""")
-
- # You can also pass 'choices' to the constructor:
- w = CheckboxSelectMultiple(choices=[(1, 1), (2, 2), (3, 3)])
- self.assertEqual(w.render('nums', [2]), """<ul>
-<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
-<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
-</ul>""")
-
- # If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
- self.assertEqual(w.render('nums', [2], choices=[(4, 4), (5, 5)]), """<ul>
-<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
-<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
-<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
-<li><label><input type="checkbox" name="nums" value="4" /> 4</label></li>
-<li><label><input type="checkbox" name="nums" value="5" /> 5</label></li>
-</ul>""")
-
- # Choices are escaped correctly
- self.assertEqual(w.render('escape', None, choices=(('bad', 'you & me'), ('good', mark_safe('you &gt; me')))), """<ul>
-<li><label><input type="checkbox" name="escape" value="1" /> 1</label></li>
-<li><label><input type="checkbox" name="escape" value="2" /> 2</label></li>
-<li><label><input type="checkbox" name="escape" value="3" /> 3</label></li>
-<li><label><input type="checkbox" name="escape" value="bad" /> you &amp; me</label></li>
-<li><label><input type="checkbox" name="escape" value="good" /> you &gt; me</label></li>
-</ul>""")
-
- # Test the usage of _has_changed
- self.assertFalse(w._has_changed(None, None))
- self.assertFalse(w._has_changed([], None))
- self.assertTrue(w._has_changed(None, [u'1']))
- self.assertFalse(w._has_changed([1, 2], [u'1', u'2']))
- self.assertTrue(w._has_changed([1, 2], [u'1']))
- self.assertTrue(w._has_changed([1, 2], [u'1', u'3']))
- self.assertFalse(w._has_changed([2, 1], [u'1', u'2']))
-
- # Unicode choices are correctly rendered as HTML
- self.assertEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), u'<ul>\n<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>\n<li><label><input type="checkbox" name="nums" value="2" /> 2</label></li>\n<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>\n<li><label><input checked="checked" type="checkbox" name="nums" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="checkbox" name="nums" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>')
-
- # Each input gets a separate ID
- self.assertEqual(CheckboxSelectMultiple().render('letters', list('ac'), choices=zip(list('abc'), list('ABC')), attrs={'id': 'abc'}), """<ul>
-<li><label for="abc_0"><input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> A</label></li>
-<li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li>
-<li><label for="abc_2"><input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" /> C</label></li>
-</ul>""")
-
- def test_multi(self):
- class MyMultiWidget(MultiWidget):
- def decompress(self, value):
- if value:
- return value.split('__')
- return ['', '']
- def format_output(self, rendered_widgets):
- return u'<br />'.join(rendered_widgets)
-
- w = MyMultiWidget(widgets=(TextInput(attrs={'class': 'big'}), TextInput(attrs={'class': 'small'})))
- self.assertEqual(w.render('name', ['john', 'lennon']), u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />')
- self.assertEqual(w.render('name', 'john__lennon'), u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />')
- self.assertEqual(w.render('name', 'john__lennon', attrs={'id':'foo'}), u'<input id="foo_0" type="text" class="big" value="john" name="name_0" /><br /><input id="foo_1" type="text" class="small" value="lennon" name="name_1" />')
- w = MyMultiWidget(widgets=(TextInput(attrs={'class': 'big'}), TextInput(attrs={'class': 'small'})), attrs={'id': 'bar'})
- self.assertEqual(w.render('name', ['john', 'lennon']), u'<input id="bar_0" type="text" class="big" value="john" name="name_0" /><br /><input id="bar_1" type="text" class="small" value="lennon" name="name_1" />')
-
- w = MyMultiWidget(widgets=(TextInput(), TextInput()))
-
- # test with no initial data
- self.assertTrue(w._has_changed(None, [u'john', u'lennon']))
-
- # test when the data is the same as initial
- self.assertFalse(w._has_changed(u'john__lennon', [u'john', u'lennon']))
-
- # test when the first widget's data has changed
- self.assertTrue(w._has_changed(u'john__lennon', [u'alfred', u'lennon']))
-
- # test when the last widget's data has changed. this ensures that it is not
- # short circuiting while testing the widgets.
- self.assertTrue(w._has_changed(u'john__lennon', [u'john', u'denver']))
-
- def test_splitdatetime(self):
- w = SplitDateTimeWidget()
- self.assertEqual(w.render('date', ''), u'<input type="text" name="date_0" /><input type="text" name="date_1" />')
- self.assertEqual(w.render('date', None), u'<input type="text" name="date_0" /><input type="text" name="date_1" />')
- self.assertEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />')
- self.assertEqual(w.render('date', [datetime.date(2006, 1, 10), datetime.time(7, 30)]), u'<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />')
-
- # You can also pass 'attrs' to the constructor. In this case, the attrs will be
- w = SplitDateTimeWidget(attrs={'class': 'pretty'})
- self.assertEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input type="text" class="pretty" value="07:30:00" name="date_1" />')
-
- # Use 'date_format' and 'time_format' to change the way a value is displayed.
- w = SplitDateTimeWidget(date_format='%d/%m/%Y', time_format='%H:%M')
- self.assertEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" name="date_0" value="10/01/2006" /><input type="text" name="date_1" value="07:30" />')
-
- self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'2008-05-06', u'12:40:00']))
- self.assertFalse(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06/05/2008', u'12:40']))
- self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06/05/2008', u'12:41']))
-
- def test_datetimeinput(self):
- w = DateTimeInput()
- self.assertEqual(w.render('date', None), u'<input type="text" name="date" />')
- d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548)
- self.assertEqual(str(d), '2007-09-17 12:51:34.482548')
-
- # The microseconds are trimmed on display, by default.
- self.assertEqual(w.render('date', d), u'<input type="text" name="date" value="2007-09-17 12:51:34" />')
- self.assertEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)), u'<input type="text" name="date" value="2007-09-17 12:51:34" />')
- self.assertEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), u'<input type="text" name="date" value="2007-09-17 12:51:00" />')
-
- # Use 'format' to change the way a value is displayed.
- w = DateTimeInput(format='%d/%m/%Y %H:%M')
- self.assertEqual(w.render('date', d), u'<input type="text" name="date" value="17/09/2007 12:51" />')
- self.assertFalse(w._has_changed(d, '17/09/2007 12:51'))
-
- # Make sure a custom format works with _has_changed. The hidden input will use
- data = datetime.datetime(2010, 3, 6, 12, 0, 0)
- custom_format = '%d.%m.%Y %H:%M'
- w = DateTimeInput(format=custom_format)
- self.assertFalse(w._has_changed(formats.localize_input(data), data.strftime(custom_format)))
-
- def test_dateinput(self):
- w = DateInput()
- self.assertEqual(w.render('date', None), u'<input type="text" name="date" />')
- d = datetime.date(2007, 9, 17)
- self.assertEqual(str(d), '2007-09-17')
-
- self.assertEqual(w.render('date', d), u'<input type="text" name="date" value="2007-09-17" />')
- self.assertEqual(w.render('date', datetime.date(2007, 9, 17)), u'<input type="text" name="date" value="2007-09-17" />')
-
- # We should be able to initialize from a unicode value.
- self.assertEqual(w.render('date', u'2007-09-17'), u'<input type="text" name="date" value="2007-09-17" />')
-
- # Use 'format' to change the way a value is displayed.
- w = DateInput(format='%d/%m/%Y')
- self.assertEqual(w.render('date', d), u'<input type="text" name="date" value="17/09/2007" />')
- self.assertFalse(w._has_changed(d, '17/09/2007'))
-
- # Make sure a custom format works with _has_changed. The hidden input will use
- data = datetime.date(2010, 3, 6)
- custom_format = '%d.%m.%Y'
- w = DateInput(format=custom_format)
- self.assertFalse(w._has_changed(formats.localize_input(data), data.strftime(custom_format)))
-
- def test_timeinput(self):
- w = TimeInput()
- self.assertEqual(w.render('time', None), u'<input type="text" name="time" />')
- t = datetime.time(12, 51, 34, 482548)
- self.assertEqual(str(t), '12:51:34.482548')
-
- # The microseconds are trimmed on display, by default.
- self.assertEqual(w.render('time', t), u'<input type="text" name="time" value="12:51:34" />')
- self.assertEqual(w.render('time', datetime.time(12, 51, 34)), u'<input type="text" name="time" value="12:51:34" />')
- self.assertEqual(w.render('time', datetime.time(12, 51)), u'<input type="text" name="time" value="12:51:00" />')
-
- # We should be able to initialize from a unicode value.
- self.assertEqual(w.render('time', u'13:12:11'), u'<input type="text" name="time" value="13:12:11" />')
-
- # Use 'format' to change the way a value is displayed.
- w = TimeInput(format='%H:%M')
- self.assertEqual(w.render('time', t), u'<input type="text" name="time" value="12:51" />')
- self.assertFalse(w._has_changed(t, '12:51'))
-
- # Make sure a custom format works with _has_changed. The hidden input will use
- data = datetime.time(13, 0)
- custom_format = '%I:%M %p'
- w = TimeInput(format=custom_format)
- self.assertFalse(w._has_changed(formats.localize_input(data), data.strftime(custom_format)))
-
- def test_splithiddendatetime(self):
- from django.forms.widgets import SplitHiddenDateTimeWidget
-
- w = SplitHiddenDateTimeWidget()
- self.assertEqual(w.render('date', ''), u'<input type="hidden" name="date_0" /><input type="hidden" name="date_1" />')
- d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548)
- self.assertEqual(str(d), '2007-09-17 12:51:34.482548')
- self.assertEqual(w.render('date', d), u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />')
- self.assertEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)), u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />')
- self.assertEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:00" />')
-
-
-class FormsI18NWidgetsTestCase(TestCase):
- def setUp(self):
- super(FormsI18NWidgetsTestCase, self).setUp()
- self.old_use_l10n = getattr(settings, 'USE_L10N', False)
- settings.USE_L10N = True
- activate('de-at')
-
- def tearDown(self):
- deactivate()
- settings.USE_L10N = self.old_use_l10n
- super(FormsI18NWidgetsTestCase, self).tearDown()
-
- def test_splitdatetime(self):
- w = SplitDateTimeWidget(date_format='%d/%m/%Y', time_format='%H:%M')
- self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06.05.2008', u'12:41']))
-
- def test_datetimeinput(self):
- w = DateTimeInput()
- d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548)
- w.is_localized = True
- self.assertEqual(w.render('date', d), u'<input type="text" name="date" value="17.09.2007 12:51:34" />')
-
- def test_dateinput(self):
- w = DateInput()
- d = datetime.date(2007, 9, 17)
- w.is_localized = True
- self.assertEqual(w.render('date', d), u'<input type="text" name="date" value="17.09.2007" />')
-
- def test_timeinput(self):
- w = TimeInput()
- t = datetime.time(12, 51, 34, 482548)
- w.is_localized = True
- self.assertEqual(w.render('time', t), u'<input type="text" name="time" value="12:51:34" />')
-
- def test_splithiddendatetime(self):
- from django.forms.widgets import SplitHiddenDateTimeWidget
-
- w = SplitHiddenDateTimeWidget()
- w.is_localized = True
- self.assertEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), u'<input type="hidden" name="date_0" value="17.09.2007" /><input type="hidden" name="date_1" value="12:51:00" />')
-
-
-class SelectAndTextWidget(MultiWidget):
- """
- MultiWidget subclass
- """
- def __init__(self, choices=[]):
- widgets = [
- RadioSelect(choices=choices),
- TextInput
- ]
- super(SelectAndTextWidget, self).__init__(widgets)
-
- def _set_choices(self, choices):
- """
- When choices are set for this widget, we want to pass those along to the Select widget
- """
- self.widgets[0].choices = choices
- def _get_choices(self):
- """
- The choices for this widget are the Select widget's choices
- """
- return self.widgets[0].choices
- choices = property(_get_choices, _set_choices)
-
-
-class WidgetTests(TestCase):
- def test_12048(self):
- # See ticket #12048.
- w1 = SelectAndTextWidget(choices=[1,2,3])
- w2 = copy.deepcopy(w1)
- w2.choices = [4,5,6]
- # w2 ought to be independent of w1, since MultiWidget ought
- # to make a copy of its sub-widgets when it is copied.
- self.assertEqual(w1.choices, [1,2,3])
-
- def test_13390(self):
- # See ticket #13390
- class SplitDateForm(Form):
- field = DateTimeField(widget=SplitDateTimeWidget, required=False)
-
- form = SplitDateForm({'field': ''})
- self.assertTrue(form.is_valid())
- form = SplitDateForm({'field': ['', '']})
- self.assertTrue(form.is_valid())
-
- class SplitDateRequiredForm(Form):
- field = DateTimeField(widget=SplitDateTimeWidget, required=True)
-
- form = SplitDateRequiredForm({'field': ''})
- self.assertFalse(form.is_valid())
- form = SplitDateRequiredForm({'field': ['', '']})
- self.assertFalse(form.is_valid())
-
diff --git a/parts/django/tests/regressiontests/formwizard/__init__.py b/parts/django/tests/regressiontests/formwizard/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/formwizard/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/formwizard/forms.py b/parts/django/tests/regressiontests/formwizard/forms.py
deleted file mode 100644
index f458eda..0000000
--- a/parts/django/tests/regressiontests/formwizard/forms.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from django import forms
-from django.contrib.formtools.wizard import FormWizard
-from django.http import HttpResponse
-
-class Page1(forms.Form):
- name = forms.CharField(max_length=100)
- thirsty = forms.NullBooleanField()
-
-class Page2(forms.Form):
- address1 = forms.CharField(max_length=100)
- address2 = forms.CharField(max_length=100)
-
-class Page3(forms.Form):
- random_crap = forms.CharField(max_length=100)
-
-class ContactWizard(FormWizard):
- def done(self, request, form_list):
- return HttpResponse("")
diff --git a/parts/django/tests/regressiontests/formwizard/models.py b/parts/django/tests/regressiontests/formwizard/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/formwizard/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/formwizard/templates/forms/wizard.html b/parts/django/tests/regressiontests/formwizard/templates/forms/wizard.html
deleted file mode 100644
index a31378f..0000000
--- a/parts/django/tests/regressiontests/formwizard/templates/forms/wizard.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
- <body>
- <p>Step {{ step }} of {{ step_count }}</p>
- <form action="." method="post">
- <table>
- {{ form }}
- </table>
- <input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
- {{ previous_fields|safe }}
- <input type="submit">
- </form>
- </body>
-</html> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/formwizard/tests.py b/parts/django/tests/regressiontests/formwizard/tests.py
deleted file mode 100644
index 0c94d2e..0000000
--- a/parts/django/tests/regressiontests/formwizard/tests.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import re
-from django import forms
-from django.test import TestCase
-
-class FormWizardWithNullBooleanField(TestCase):
- urls = 'regressiontests.formwizard.urls'
-
- input_re = re.compile('name="([^"]+)" value="([^"]+)"')
-
- wizard_url = '/wiz/'
- wizard_step_data = (
- {
- '0-name': 'Pony',
- '0-thirsty': '2',
- },
- {
- '1-address1': '123 Main St',
- '1-address2': 'Djangoland',
- },
- {
- '2-random_crap': 'blah blah',
- }
- )
-
- def grabFieldData(self, response):
- """
- Pull the appropriate field data from the context to pass to the next wizard step
- """
- previous_fields = response.context['previous_fields']
- fields = {'wizard_step': response.context['step0']}
-
- def grab(m):
- fields[m.group(1)] = m.group(2)
- return ''
-
- self.input_re.sub(grab, previous_fields)
- return fields
-
- def checkWizardStep(self, response, step_no):
- """
- Helper function to test each step of the wizard
- - Make sure the call succeeded
- - Make sure response is the proper step number
- - return the result from the post for the next step
- """
- step_count = len(self.wizard_step_data)
-
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, 'Step %d of %d' % (step_no, step_count))
-
- data = self.grabFieldData(response)
- data.update(self.wizard_step_data[step_no - 1])
-
- return self.client.post(self.wizard_url, data)
-
- def testWizard(self):
- response = self.client.get(self.wizard_url)
- for step_no in range(1, len(self.wizard_step_data) + 1):
- response = self.checkWizardStep(response, step_no)
diff --git a/parts/django/tests/regressiontests/formwizard/urls.py b/parts/django/tests/regressiontests/formwizard/urls.py
deleted file mode 100644
index d964bc6..0000000
--- a/parts/django/tests/regressiontests/formwizard/urls.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.conf.urls.defaults import *
-from forms import ContactWizard, Page1, Page2, Page3
-
-urlpatterns = patterns('',
- url(r'^wiz/$', ContactWizard([Page1, Page2, Page3])),
- )
diff --git a/parts/django/tests/regressiontests/generic_inline_admin/__init__.py b/parts/django/tests/regressiontests/generic_inline_admin/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/generic_inline_admin/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/generic_inline_admin/fixtures/users.xml b/parts/django/tests/regressiontests/generic_inline_admin/fixtures/users.xml
deleted file mode 100644
index 6cf441f..0000000
--- a/parts/django/tests/regressiontests/generic_inline_admin/fixtures/users.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/generic_inline_admin/models.py b/parts/django/tests/regressiontests/generic_inline_admin/models.py
deleted file mode 100644
index 329c487..0000000
--- a/parts/django/tests/regressiontests/generic_inline_admin/models.py
+++ /dev/null
@@ -1,108 +0,0 @@
-from django.db import models
-from django.contrib import admin
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-
-class Episode(models.Model):
- name = models.CharField(max_length=100)
-
-class Media(models.Model):
- """
- Media that can associated to any object.
- """
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey()
- url = models.URLField(verify_exists=False)
-
- def __unicode__(self):
- return self.url
-
-class MediaInline(generic.GenericTabularInline):
- model = Media
-
-class EpisodeAdmin(admin.ModelAdmin):
- inlines = [
- MediaInline,
- ]
-admin.site.register(Episode, EpisodeAdmin)
-
-#
-# These models let us test the different GenericInline settings at
-# different urls in the admin site.
-#
-
-#
-# Generic inline with extra = 0
-#
-
-class EpisodeExtra(Episode):
- pass
-
-class MediaExtraInline(generic.GenericTabularInline):
- model = Media
- extra = 0
-
-admin.site.register(EpisodeExtra, inlines=[MediaExtraInline])
-
-#
-# Generic inline with extra and max_num
-#
-
-class EpisodeMaxNum(Episode):
- pass
-
-class MediaMaxNumInline(generic.GenericTabularInline):
- model = Media
- extra = 5
- max_num = 2
-
-admin.site.register(EpisodeMaxNum, inlines=[MediaMaxNumInline])
-
-#
-# Generic inline with exclude
-#
-
-class EpisodeExclude(Episode):
- pass
-
-class MediaExcludeInline(generic.GenericTabularInline):
- model = Media
- exclude = ['url']
-
-admin.site.register(EpisodeExclude, inlines=[MediaExcludeInline])
-
-#
-# Generic inline with unique_together
-#
-
-class PhoneNumber(models.Model):
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey('content_type', 'object_id')
- phone_number = models.CharField(max_length=30)
-
- class Meta:
- unique_together = (('content_type', 'object_id', 'phone_number',),)
-
-class Contact(models.Model):
- name = models.CharField(max_length=50)
- phone_numbers = generic.GenericRelation(PhoneNumber)
-
-class PhoneNumberInline(generic.GenericTabularInline):
- model = PhoneNumber
-
-admin.site.register(Contact, inlines=[PhoneNumberInline])
-
-#
-# Generic inline with can_delete=False
-#
-
-class EpisodePermanent(Episode):
- pass
-
-class MediaPermanentInline(generic.GenericTabularInline):
- model = Media
- can_delete = False
-
-admin.site.register(EpisodePermanent, inlines=[MediaPermanentInline])
diff --git a/parts/django/tests/regressiontests/generic_inline_admin/tests.py b/parts/django/tests/regressiontests/generic_inline_admin/tests.py
deleted file mode 100644
index d5531f0..0000000
--- a/parts/django/tests/regressiontests/generic_inline_admin/tests.py
+++ /dev/null
@@ -1,214 +0,0 @@
-# coding: utf-8
-
-from django.conf import settings
-from django.contrib.contenttypes.generic import generic_inlineformset_factory
-from django.test import TestCase
-
-# local test models
-from models import Episode, EpisodeExtra, EpisodeMaxNum, EpisodeExclude, \
- Media, EpisodePermanent, MediaPermanentInline
-
-
-class GenericAdminViewTest(TestCase):
- fixtures = ['users.xml']
-
- def setUp(self):
- # set TEMPLATE_DEBUG to True to ensure {% include %} will raise
- # exceptions since that is how inlines are rendered and #9498 will
- # bubble up if it is an issue.
- self.original_template_debug = settings.TEMPLATE_DEBUG
- settings.TEMPLATE_DEBUG = True
- self.client.login(username='super', password='secret')
-
- # Can't load content via a fixture (since the GenericForeignKey
- # relies on content type IDs, which will vary depending on what
- # other tests have been run), thus we do it here.
- e = Episode.objects.create(name='This Week in Django')
- self.episode_pk = e.pk
- m = Media(content_object=e, url='http://example.com/podcast.mp3')
- m.save()
- self.mp3_media_pk = m.pk
-
- m = Media(content_object=e, url='http://example.com/logo.png')
- m.save()
- self.png_media_pk = m.pk
-
- def tearDown(self):
- self.client.logout()
- settings.TEMPLATE_DEBUG = self.original_template_debug
-
- def testBasicAddGet(self):
- """
- A smoke test to ensure GET on the add_view works.
- """
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/add/')
- self.assertEqual(response.status_code, 200)
-
- def testBasicEditGet(self):
- """
- A smoke test to ensure GET on the change_view works.
- """
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk)
- self.assertEqual(response.status_code, 200)
-
- def testBasicAddPost(self):
- """
- A smoke test to ensure POST on add_view works.
- """
- post_data = {
- "name": u"This Week in Django",
- # inline data
- "generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"1",
- "generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"0",
- "generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": u"0",
- }
- response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/episode/add/', post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
-
- def testBasicEditPost(self):
- """
- A smoke test to ensure POST on edit_view works.
- """
- post_data = {
- "name": u"This Week in Django",
- # inline data
- "generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"3",
- "generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"2",
- "generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": u"0",
- "generic_inline_admin-media-content_type-object_id-0-id": u"%d" % self.mp3_media_pk,
- "generic_inline_admin-media-content_type-object_id-0-url": u"http://example.com/podcast.mp3",
- "generic_inline_admin-media-content_type-object_id-1-id": u"%d" % self.png_media_pk,
- "generic_inline_admin-media-content_type-object_id-1-url": u"http://example.com/logo.png",
- "generic_inline_admin-media-content_type-object_id-2-id": u"",
- "generic_inline_admin-media-content_type-object_id-2-url": u"",
- }
- url = '/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk
- response = self.client.post(url, post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
-
- def testGenericInlineFormset(self):
- EpisodeMediaFormSet = generic_inlineformset_factory(Media, can_delete=False, extra=3)
- e = Episode.objects.get(name='This Week in Django')
-
- # Works with no queryset
- formset = EpisodeMediaFormSet(instance=e)
- self.assertEquals(len(formset.forms), 5)
- self.assertEquals(formset.forms[0].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-0-url" type="text" name="generic_inline_admin-media-content_type-object_id-0-url" value="http://example.com/podcast.mp3" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-0-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>' % self.mp3_media_pk)
- self.assertEquals(formset.forms[1].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-1-url" type="text" name="generic_inline_admin-media-content_type-object_id-1-url" value="http://example.com/logo.png" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-1-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>' % self.png_media_pk)
- self.assertEquals(formset.forms[2].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-2-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-2-url" type="text" name="generic_inline_admin-media-content_type-object_id-2-url" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-2-id" id="id_generic_inline_admin-media-content_type-object_id-2-id" /></p>')
-
- # A queryset can be used to alter display ordering
- formset = EpisodeMediaFormSet(instance=e, queryset=Media.objects.order_by('url'))
- self.assertEquals(len(formset.forms), 5)
- self.assertEquals(formset.forms[0].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-0-url" type="text" name="generic_inline_admin-media-content_type-object_id-0-url" value="http://example.com/logo.png" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-0-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>' % self.png_media_pk)
- self.assertEquals(formset.forms[1].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-1-url" type="text" name="generic_inline_admin-media-content_type-object_id-1-url" value="http://example.com/podcast.mp3" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-1-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>' % self.mp3_media_pk)
- self.assertEquals(formset.forms[2].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-2-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-2-url" type="text" name="generic_inline_admin-media-content_type-object_id-2-url" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-2-id" id="id_generic_inline_admin-media-content_type-object_id-2-id" /></p>')
-
-
- # Works with a queryset that omits items
- formset = EpisodeMediaFormSet(instance=e, queryset=Media.objects.filter(url__endswith=".png"))
- self.assertEquals(len(formset.forms), 4)
- self.assertEquals(formset.forms[0].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-0-url" type="text" name="generic_inline_admin-media-content_type-object_id-0-url" value="http://example.com/logo.png" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-0-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>' % self.png_media_pk)
- self.assertEquals(formset.forms[1].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-1-url" type="text" name="generic_inline_admin-media-content_type-object_id-1-url" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-1-id" id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>')
-
- def testGenericInlineFormsetFactory(self):
- # Regression test for #10522.
- inline_formset = generic_inlineformset_factory(Media,
- exclude=('url',))
-
- # Regression test for #12340.
- e = Episode.objects.get(name='This Week in Django')
- formset = inline_formset(instance=e)
- self.assertTrue(formset.get_queryset().ordered)
-
-class GenericInlineAdminParametersTest(TestCase):
- fixtures = ['users.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def _create_object(self, model):
- """
- Create a model with an attached Media object via GFK. We can't
- load content via a fixture (since the GenericForeignKey relies on
- content type IDs, which will vary depending on what other tests
- have been run), thus we do it here.
- """
- e = model.objects.create(name='This Week in Django')
- Media.objects.create(content_object=e, url='http://example.com/podcast.mp3')
- return e
-
- def testNoParam(self):
- """
- With one initial form, extra (default) at 3, there should be 4 forms.
- """
- e = self._create_object(Episode)
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/%s/' % e.pk)
- formset = response.context['inline_admin_formsets'][0].formset
- self.assertEqual(formset.total_form_count(), 4)
- self.assertEqual(formset.initial_form_count(), 1)
-
- def testExtraParam(self):
- """
- With extra=0, there should be one form.
- """
- e = self._create_object(EpisodeExtra)
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeextra/%s/' % e.pk)
- formset = response.context['inline_admin_formsets'][0].formset
- self.assertEqual(formset.total_form_count(), 1)
- self.assertEqual(formset.initial_form_count(), 1)
-
- def testMaxNumParam(self):
- """
- With extra=5 and max_num=2, there should be only 2 forms.
- """
- e = self._create_object(EpisodeMaxNum)
- inline_form_data = '<input type="hidden" name="generic_inline_admin-media-content_type-object_id-TOTAL_FORMS" value="2" id="id_generic_inline_admin-media-content_type-object_id-TOTAL_FORMS" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-INITIAL_FORMS" value="1" id="id_generic_inline_admin-media-content_type-object_id-INITIAL_FORMS" />'
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodemaxnum/%s/' % e.pk)
- formset = response.context['inline_admin_formsets'][0].formset
- self.assertEqual(formset.total_form_count(), 2)
- self.assertEqual(formset.initial_form_count(), 1)
-
- def testExcludeParam(self):
- """
- Generic inline formsets should respect include.
- """
- e = self._create_object(EpisodeExclude)
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeexclude/%s/' % e.pk)
- formset = response.context['inline_admin_formsets'][0].formset
- self.assertFalse('url' in formset.forms[0], 'The formset has excluded "url" field.')
-
-class GenericInlineAdminWithUniqueTogetherTest(TestCase):
- fixtures = ['users.xml']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
- def tearDown(self):
- self.client.logout()
-
- def testAdd(self):
- post_data = {
- "name": u"John Doe",
- # inline data
- "generic_inline_admin-phonenumber-content_type-object_id-TOTAL_FORMS": u"1",
- "generic_inline_admin-phonenumber-content_type-object_id-INITIAL_FORMS": u"0",
- "generic_inline_admin-phonenumber-content_type-object_id-MAX_NUM_FORMS": u"0",
- "generic_inline_admin-phonenumber-content_type-object_id-0-id": "",
- "generic_inline_admin-phonenumber-content_type-object_id-0-phone_number": "555-555-5555",
- }
- response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/contact/add/')
- self.assertEqual(response.status_code, 200)
- response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/contact/add/', post_data)
- self.assertEqual(response.status_code, 302) # redirect somewhere
-
-class NoInlineDeletionTest(TestCase):
- def test_no_deletion(self):
- fake_site = object()
- inline = MediaPermanentInline(EpisodePermanent, fake_site)
- fake_request = object()
- formset = inline.get_formset(fake_request)
- self.assertFalse(formset.can_delete)
diff --git a/parts/django/tests/regressiontests/generic_inline_admin/urls.py b/parts/django/tests/regressiontests/generic_inline_admin/urls.py
deleted file mode 100644
index c3e8af8..0000000
--- a/parts/django/tests/regressiontests/generic_inline_admin/urls.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.conf.urls.defaults import *
-from django.contrib import admin
-
-urlpatterns = patterns('',
- (r'^admin/', include(admin.site.urls)),
-)
diff --git a/parts/django/tests/regressiontests/generic_relations_regress/__init__.py b/parts/django/tests/regressiontests/generic_relations_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/generic_relations_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/generic_relations_regress/models.py b/parts/django/tests/regressiontests/generic_relations_regress/models.py
deleted file mode 100644
index d28385d..0000000
--- a/parts/django/tests/regressiontests/generic_relations_regress/models.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from django.db import models
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-
-__all__ = ('Link', 'Place', 'Restaurant', 'Person', 'Address',
- 'CharLink', 'TextLink', 'OddRelation1', 'OddRelation2',
- 'Contact', 'Organization', 'Note')
-
-class Link(models.Model):
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey()
-
- def __unicode__(self):
- return "Link to %s id=%s" % (self.content_type, self.object_id)
-
-class Place(models.Model):
- name = models.CharField(max_length=100)
- links = generic.GenericRelation(Link)
-
- def __unicode__(self):
- return "Place: %s" % self.name
-
-class Restaurant(Place):
- def __unicode__(self):
- return "Restaurant: %s" % self.name
-
-class Address(models.Model):
- street = models.CharField(max_length=80)
- city = models.CharField(max_length=50)
- state = models.CharField(max_length=2)
- zipcode = models.CharField(max_length=5)
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey()
-
- def __unicode__(self):
- return '%s %s, %s %s' % (self.street, self.city, self.state, self.zipcode)
-
-class Person(models.Model):
- account = models.IntegerField(primary_key=True)
- name = models.CharField(max_length=128)
- addresses = generic.GenericRelation(Address)
-
- def __unicode__(self):
- return self.name
-
-class CharLink(models.Model):
- content_type = models.ForeignKey(ContentType)
- object_id = models.CharField(max_length=100)
- content_object = generic.GenericForeignKey()
-
-class TextLink(models.Model):
- content_type = models.ForeignKey(ContentType)
- object_id = models.TextField()
- content_object = generic.GenericForeignKey()
-
-class OddRelation1(models.Model):
- name = models.CharField(max_length=100)
- clinks = generic.GenericRelation(CharLink)
-
-class OddRelation2(models.Model):
- name = models.CharField(max_length=100)
- tlinks = generic.GenericRelation(TextLink)
-
-# models for test_q_object_or:
-class Note(models.Model):
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey()
- note = models.TextField()
-
-class Contact(models.Model):
- notes = generic.GenericRelation(Note)
-
-class Organization(models.Model):
- name = models.CharField(max_length=255)
- contacts = models.ManyToManyField(Contact, related_name='organizations')
-
diff --git a/parts/django/tests/regressiontests/generic_relations_regress/tests.py b/parts/django/tests/regressiontests/generic_relations_regress/tests.py
deleted file mode 100644
index 45e8674..0000000
--- a/parts/django/tests/regressiontests/generic_relations_regress/tests.py
+++ /dev/null
@@ -1,74 +0,0 @@
-from django.test import TestCase
-from django.contrib.contenttypes.models import ContentType
-from django.db.models import Q
-from models import *
-
-class GenericRelationTests(TestCase):
-
- def test_inherited_models_content_type(self):
- """
- Test that GenericRelations on inherited classes use the correct content
- type.
- """
-
- p = Place.objects.create(name="South Park")
- r = Restaurant.objects.create(name="Chubby's")
- l1 = Link.objects.create(content_object=p)
- l2 = Link.objects.create(content_object=r)
- self.assertEqual(list(p.links.all()), [l1])
- self.assertEqual(list(r.links.all()), [l2])
-
- def test_reverse_relation_pk(self):
- """
- Test that the correct column name is used for the primary key on the
- originating model of a query. See #12664.
- """
- p = Person.objects.create(account=23, name='Chef')
- a = Address.objects.create(street='123 Anywhere Place',
- city='Conifer', state='CO',
- zipcode='80433', content_object=p)
-
- qs = Person.objects.filter(addresses__zipcode='80433')
- self.assertEqual(1, qs.count())
- self.assertEqual('Chef', qs[0].name)
-
- def test_charlink_delete(self):
- oddrel = OddRelation1.objects.create(name='clink')
- cl = CharLink.objects.create(content_object=oddrel)
- oddrel.delete()
-
- def test_textlink_delete(self):
- oddrel = OddRelation2.objects.create(name='tlink')
- tl = TextLink.objects.create(content_object=oddrel)
- oddrel.delete()
-
- def test_q_object_or(self):
- """
- Tests that SQL query parameters for generic relations are properly
- grouped when OR is used.
-
- Test for bug http://code.djangoproject.com/ticket/11535
-
- In this bug the first query (below) works while the second, with the
- query parameters the same but in reverse order, does not.
-
- The issue is that the generic relation conditions do not get properly
- grouped in parentheses.
- """
- note_contact = Contact.objects.create()
- org_contact = Contact.objects.create()
- note = Note.objects.create(note='note', content_object=note_contact)
- org = Organization.objects.create(name='org name')
- org.contacts.add(org_contact)
- # search with a non-matching note and a matching org name
- qs = Contact.objects.filter(Q(notes__note__icontains=r'other note') |
- Q(organizations__name__icontains=r'org name'))
- self.assertTrue(org_contact in qs)
- # search again, with the same query parameters, in reverse order
- qs = Contact.objects.filter(
- Q(organizations__name__icontains=r'org name') |
- Q(notes__note__icontains=r'other note'))
- self.assertTrue(org_contact in qs)
-
-
-
diff --git a/parts/django/tests/regressiontests/get_or_create_regress/__init__.py b/parts/django/tests/regressiontests/get_or_create_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/get_or_create_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/get_or_create_regress/models.py b/parts/django/tests/regressiontests/get_or_create_regress/models.py
deleted file mode 100644
index 292d96c..0000000
--- a/parts/django/tests/regressiontests/get_or_create_regress/models.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.db import models
-
-
-class Publisher(models.Model):
- name = models.CharField(max_length=100)
-
-class Author(models.Model):
- name = models.CharField(max_length=100)
-
-class Book(models.Model):
- name = models.CharField(max_length=100)
- authors = models.ManyToManyField(Author, related_name='books')
- publisher = models.ForeignKey(Publisher, related_name='books')
diff --git a/parts/django/tests/regressiontests/get_or_create_regress/tests.py b/parts/django/tests/regressiontests/get_or_create_regress/tests.py
deleted file mode 100644
index 87057da..0000000
--- a/parts/django/tests/regressiontests/get_or_create_regress/tests.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from django.test import TestCase
-
-from models import Author, Publisher
-
-
-class GetOrCreateTests(TestCase):
- def test_related(self):
- p = Publisher.objects.create(name="Acme Publishing")
- # Create a book through the publisher.
- book, created = p.books.get_or_create(name="The Book of Ed & Fred")
- self.assertTrue(created)
- # The publisher should have one book.
- self.assertEqual(p.books.count(), 1)
-
- # Try get_or_create again, this time nothing should be created.
- book, created = p.books.get_or_create(name="The Book of Ed & Fred")
- self.assertFalse(created)
- # And the publisher should still have one book.
- self.assertEqual(p.books.count(), 1)
-
- # Add an author to the book.
- ed, created = book.authors.get_or_create(name="Ed")
- self.assertTrue(created)
- # Book should have one author.
- self.assertEqual(book.authors.count(), 1)
-
- # Try get_or_create again, this time nothing should be created.
- ed, created = book.authors.get_or_create(name="Ed")
- self.assertFalse(created)
- # And the book should still have one author.
- self.assertEqual(book.authors.count(), 1)
-
- # Add a second author to the book.
- fred, created = book.authors.get_or_create(name="Fred")
- self.assertTrue(created)
-
- # The book should have two authors now.
- self.assertEqual(book.authors.count(), 2)
-
- # Create an Author not tied to any books.
- Author.objects.create(name="Ted")
-
- # There should be three Authors in total. The book object should have two.
- self.assertEqual(Author.objects.count(), 3)
- self.assertEqual(book.authors.count(), 2)
-
- # Try creating a book through an author.
- _, created = ed.books.get_or_create(name="Ed's Recipes", publisher=p)
- self.assertTrue(created)
-
- # Now Ed has two Books, Fred just one.
- self.assertEqual(ed.books.count(), 2)
- self.assertEqual(fred.books.count(), 1)
diff --git a/parts/django/tests/regressiontests/httpwrappers/__init__.py b/parts/django/tests/regressiontests/httpwrappers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/httpwrappers/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/httpwrappers/models.py b/parts/django/tests/regressiontests/httpwrappers/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/httpwrappers/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/httpwrappers/tests.py b/parts/django/tests/regressiontests/httpwrappers/tests.py
deleted file mode 100644
index 4e946a2..0000000
--- a/parts/django/tests/regressiontests/httpwrappers/tests.py
+++ /dev/null
@@ -1,266 +0,0 @@
-import copy
-import pickle
-import unittest
-
-from django.http import QueryDict, HttpResponse, CompatCookie, BadHeaderError
-
-
-class QueryDictTests(unittest.TestCase):
- def test_missing_key(self):
- q = QueryDict('')
- self.assertRaises(KeyError, q.__getitem__, 'foo')
-
- def test_immutability(self):
- q = QueryDict('')
- self.assertRaises(AttributeError, q.__setitem__, 'something', 'bar')
- self.assertRaises(AttributeError, q.setlist, 'foo', ['bar'])
- self.assertRaises(AttributeError, q.appendlist, 'foo', ['bar'])
- self.assertRaises(AttributeError, q.update, {'foo': 'bar'})
- self.assertRaises(AttributeError, q.pop, 'foo')
- self.assertRaises(AttributeError, q.popitem)
- self.assertRaises(AttributeError, q.clear)
-
- def test_immutable_get_with_default(self):
- q = QueryDict('')
- self.assertEqual(q.get('foo', 'default'), 'default')
-
- def test_immutable_basic_operations(self):
- q = QueryDict('')
- self.assertEqual(q.getlist('foo'), [])
- self.assertEqual(q.has_key('foo'), False)
- self.assertEqual('foo' in q, False)
- self.assertEqual(q.items(), [])
- self.assertEqual(q.lists(), [])
- self.assertEqual(q.items(), [])
- self.assertEqual(q.keys(), [])
- self.assertEqual(q.values(), [])
- self.assertEqual(len(q), 0)
- self.assertEqual(q.urlencode(), '')
-
- def test_single_key_value(self):
- """Test QueryDict with one key/value pair"""
-
- q = QueryDict('foo=bar')
- self.assertEqual(q['foo'], 'bar')
- self.assertRaises(KeyError, q.__getitem__, 'bar')
- self.assertRaises(AttributeError, q.__setitem__, 'something', 'bar')
-
- self.assertEqual(q.get('foo', 'default'), 'bar')
- self.assertEqual(q.get('bar', 'default'), 'default')
- self.assertEqual(q.getlist('foo'), ['bar'])
- self.assertEqual(q.getlist('bar'), [])
-
- self.assertRaises(AttributeError, q.setlist, 'foo', ['bar'])
- self.assertRaises(AttributeError, q.appendlist, 'foo', ['bar'])
-
- self.assertTrue(q.has_key('foo'))
- self.assertTrue('foo' in q)
- self.assertFalse(q.has_key('bar'))
- self.assertFalse('bar' in q)
-
- self.assertEqual(q.items(), [(u'foo', u'bar')])
- self.assertEqual(q.lists(), [(u'foo', [u'bar'])])
- self.assertEqual(q.keys(), ['foo'])
- self.assertEqual(q.values(), ['bar'])
- self.assertEqual(len(q), 1)
-
- self.assertRaises(AttributeError, q.update, {'foo': 'bar'})
- self.assertRaises(AttributeError, q.pop, 'foo')
- self.assertRaises(AttributeError, q.popitem)
- self.assertRaises(AttributeError, q.clear)
- self.assertRaises(AttributeError, q.setdefault, 'foo', 'bar')
-
- self.assertEqual(q.urlencode(), 'foo=bar')
-
- def test_mutable_copy(self):
- """A copy of a QueryDict is mutable."""
- q = QueryDict('').copy()
- self.assertRaises(KeyError, q.__getitem__, "foo")
- q['name'] = 'john'
- self.assertEqual(q['name'], 'john')
-
- def test_mutable_delete(self):
- q = QueryDict('').copy()
- q['name'] = 'john'
- del q['name']
- self.assertFalse('name' in q)
-
- def test_basic_mutable_operations(self):
- q = QueryDict('').copy()
- q['name'] = 'john'
- self.assertEqual(q.get('foo', 'default'), 'default')
- self.assertEqual(q.get('name', 'default'), 'john')
- self.assertEqual(q.getlist('name'), ['john'])
- self.assertEqual(q.getlist('foo'), [])
-
- q.setlist('foo', ['bar', 'baz'])
- self.assertEqual(q.get('foo', 'default'), 'baz')
- self.assertEqual(q.getlist('foo'), ['bar', 'baz'])
-
- q.appendlist('foo', 'another')
- self.assertEqual(q.getlist('foo'), ['bar', 'baz', 'another'])
- self.assertEqual(q['foo'], 'another')
- self.assertTrue(q.has_key('foo'))
- self.assertTrue('foo' in q)
-
- self.assertEqual(q.items(), [(u'foo', u'another'), (u'name', u'john')])
- self.assertEqual(q.lists(), [(u'foo', [u'bar', u'baz', u'another']), (u'name', [u'john'])])
- self.assertEqual(q.keys(), [u'foo', u'name'])
- self.assertEqual(q.values(), [u'another', u'john'])
- self.assertEqual(len(q), 2)
-
- q.update({'foo': 'hello'})
- self.assertEqual(q['foo'], 'hello')
- self.assertEqual(q.get('foo', 'not available'), 'hello')
- self.assertEqual(q.getlist('foo'), [u'bar', u'baz', u'another', u'hello'])
- self.assertEqual(q.pop('foo'), [u'bar', u'baz', u'another', u'hello'])
- self.assertEqual(q.pop('foo', 'not there'), 'not there')
- self.assertEqual(q.get('foo', 'not there'), 'not there')
- self.assertEqual(q.setdefault('foo', 'bar'), 'bar')
- self.assertEqual(q['foo'], 'bar')
- self.assertEqual(q.getlist('foo'), ['bar'])
- self.assertEqual(q.urlencode(), 'foo=bar&name=john')
-
- q.clear()
- self.assertEqual(len(q), 0)
-
- def test_multiple_keys(self):
- """Test QueryDict with two key/value pairs with same keys."""
-
- q = QueryDict('vote=yes&vote=no')
-
- self.assertEqual(q['vote'], u'no')
- self.assertRaises(AttributeError, q.__setitem__, 'something', 'bar')
-
- self.assertEqual(q.get('vote', 'default'), u'no')
- self.assertEqual(q.get('foo', 'default'), 'default')
- self.assertEqual(q.getlist('vote'), [u'yes', u'no'])
- self.assertEqual(q.getlist('foo'), [])
-
- self.assertRaises(AttributeError, q.setlist, 'foo', ['bar', 'baz'])
- self.assertRaises(AttributeError, q.setlist, 'foo', ['bar', 'baz'])
- self.assertRaises(AttributeError, q.appendlist, 'foo', ['bar'])
-
- self.assertEqual(q.has_key('vote'), True)
- self.assertEqual('vote' in q, True)
- self.assertEqual(q.has_key('foo'), False)
- self.assertEqual('foo' in q, False)
- self.assertEqual(q.items(), [(u'vote', u'no')])
- self.assertEqual(q.lists(), [(u'vote', [u'yes', u'no'])])
- self.assertEqual(q.keys(), [u'vote'])
- self.assertEqual(q.values(), [u'no'])
- self.assertEqual(len(q), 1)
-
- self.assertRaises(AttributeError, q.update, {'foo': 'bar'})
- self.assertRaises(AttributeError, q.pop, 'foo')
- self.assertRaises(AttributeError, q.popitem)
- self.assertRaises(AttributeError, q.clear)
- self.assertRaises(AttributeError, q.setdefault, 'foo', 'bar')
- self.assertRaises(AttributeError, q.__delitem__, 'vote')
-
- def test_invalid_input_encoding(self):
- """
- QueryDicts must be able to handle invalid input encoding (in this
- case, bad UTF-8 encoding).
- """
- q = QueryDict('foo=bar&foo=\xff')
- self.assertEqual(q['foo'], u'\ufffd')
- self.assertEqual(q.getlist('foo'), [u'bar', u'\ufffd'])
-
- def test_pickle(self):
- q = QueryDict('')
- q1 = pickle.loads(pickle.dumps(q, 2))
- self.assertEqual(q == q1, True)
- q = QueryDict('a=b&c=d')
- q1 = pickle.loads(pickle.dumps(q, 2))
- self.assertEqual(q == q1, True)
- q = QueryDict('a=b&c=d&a=1')
- q1 = pickle.loads(pickle.dumps(q, 2))
- self.assertEqual(q == q1 , True)
-
- def test_update_from_querydict(self):
- """Regression test for #8278: QueryDict.update(QueryDict)"""
- x = QueryDict("a=1&a=2", mutable=True)
- y = QueryDict("a=3&a=4")
- x.update(y)
- self.assertEqual(x.getlist('a'), [u'1', u'2', u'3', u'4'])
-
- def test_non_default_encoding(self):
- """#13572 - QueryDict with a non-default encoding"""
- q = QueryDict('sbb=one', encoding='rot_13')
- self.assertEqual(q.encoding , 'rot_13' )
- self.assertEqual(q.items() , [(u'foo', u'bar')] )
- self.assertEqual(q.urlencode() , 'sbb=one' )
- q = q.copy()
- self.assertEqual(q.encoding , 'rot_13' )
- self.assertEqual(q.items() , [(u'foo', u'bar')] )
- self.assertEqual(q.urlencode() , 'sbb=one' )
- self.assertEqual(copy.copy(q).encoding , 'rot_13' )
- self.assertEqual(copy.deepcopy(q).encoding , 'rot_13')
-
-class HttpResponseTests(unittest.TestCase):
- def test_unicode_headers(self):
- r = HttpResponse()
-
- # If we insert a unicode value it will be converted to an ascii
- r['value'] = u'test value'
- self.assertTrue(isinstance(r['value'], str))
- # An error is raised ~hen a unicode object with non-ascii is assigned.
- self.assertRaises(UnicodeEncodeError, r.__setitem__, 'value', u't\xebst value')
-
- # An error is raised when a unicode object with non-ASCII format is
- # passed as initial mimetype or content_type.
- self.assertRaises(UnicodeEncodeError, HttpResponse,
- mimetype=u't\xebst value')
-
- # HttpResponse headers must be convertible to ASCII.
- self.assertRaises(UnicodeEncodeError, HttpResponse,
- content_type=u't\xebst value')
-
- # The response also converts unicode keys to strings.)
- r[u'test'] = 'testing key'
- l = list(r.items())
- l.sort()
- self.assertEqual(l[1], ('test', 'testing key'))
-
- # It will also raise errors for keys with non-ascii data.
- self.assertRaises(UnicodeEncodeError, r.__setitem__, u't\xebst key', 'value')
-
- def test_newlines_in_headers(self):
- # Bug #10188: Do not allow newlines in headers (CR or LF)
- r = HttpResponse()
- self.assertRaises(BadHeaderError, r.__setitem__, 'test\rstr', 'test')
- self.assertRaises(BadHeaderError, r.__setitem__, 'test\nstr', 'test')
-
-class CookieTests(unittest.TestCase):
- def test_encode(self):
- """
- Test that we don't output tricky characters in encoded value
- """
- # Python 2.4 compatibility note: Python 2.4's cookie implementation
- # always returns Set-Cookie headers terminating in semi-colons.
- # That's not the bug this test is looking for, so ignore it.
- c = CompatCookie()
- c['test'] = "An,awkward;value"
- self.assert_(";" not in c.output().rstrip(';')) # IE compat
- self.assert_("," not in c.output().rstrip(';')) # Safari compat
-
- def test_decode(self):
- """
- Test that we can still preserve semi-colons and commas
- """
- c = CompatCookie()
- c['test'] = "An,awkward;value"
- c2 = CompatCookie()
- c2.load(c.output())
- self.assertEqual(c['test'].value, c2['test'].value)
-
- def test_decode_2(self):
- """
- Test that we haven't broken normal encoding
- """
- c = CompatCookie()
- c['test'] = "\xf0"
- c2 = CompatCookie()
- c2.load(c.output())
- self.assertEqual(c['test'].value, c2['test'].value)
diff --git a/parts/django/tests/regressiontests/humanize/__init__.py b/parts/django/tests/regressiontests/humanize/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/humanize/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/humanize/models.py b/parts/django/tests/regressiontests/humanize/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/humanize/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/humanize/tests.py b/parts/django/tests/regressiontests/humanize/tests.py
deleted file mode 100644
index 3536c6b..0000000
--- a/parts/django/tests/regressiontests/humanize/tests.py
+++ /dev/null
@@ -1,76 +0,0 @@
-import unittest
-from datetime import timedelta, date
-from django.template import Template, Context, add_to_builtins
-from django.utils.dateformat import DateFormat
-from django.utils.translation import ugettext as _
-from django.utils.html import escape
-
-add_to_builtins('django.contrib.humanize.templatetags.humanize')
-
-class HumanizeTests(unittest.TestCase):
-
- def humanize_tester(self, test_list, result_list, method):
- # Using max below ensures we go through both lists
- # However, if the lists are not equal length, this raises an exception
- for index in xrange(max(len(test_list), len(result_list))):
- test_content = test_list[index]
- t = Template('{{ test_content|%s }}' % method)
- rendered = t.render(Context(locals())).strip()
- self.assertEqual(rendered, escape(result_list[index]),
- msg="%s test failed, produced %s, should've produced %s" % (method, rendered, result_list[index]))
-
- def test_ordinal(self):
- test_list = ('1','2','3','4','11','12',
- '13','101','102','103','111',
- 'something else', None)
- result_list = ('1st', '2nd', '3rd', '4th', '11th',
- '12th', '13th', '101st', '102nd', '103rd',
- '111th', 'something else', None)
-
- self.humanize_tester(test_list, result_list, 'ordinal')
-
- def test_intcomma(self):
- test_list = (100, 1000, 10123, 10311, 1000000, 1234567.25,
- '100', '1000', '10123', '10311', '1000000', '1234567.1234567',
- None)
- result_list = ('100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.25',
- '100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567',
- None)
-
- self.humanize_tester(test_list, result_list, 'intcomma')
-
- def test_intword(self):
- test_list = ('100', '1000000', '1200000', '1290000',
- '1000000000','2000000000','6000000000000',
- None)
- result_list = ('100', '1.0 million', '1.2 million', '1.3 million',
- '1.0 billion', '2.0 billion', '6.0 trillion',
- None)
-
- self.humanize_tester(test_list, result_list, 'intword')
-
- def test_apnumber(self):
- test_list = [str(x) for x in range(1, 11)]
- test_list.append(None)
- result_list = (u'one', u'two', u'three', u'four', u'five', u'six',
- u'seven', u'eight', u'nine', u'10', None)
-
- self.humanize_tester(test_list, result_list, 'apnumber')
-
- def test_naturalday(self):
- from django.template import defaultfilters
- today = date.today()
- yesterday = today - timedelta(days=1)
- tomorrow = today + timedelta(days=1)
- someday = today - timedelta(days=10)
- notdate = u"I'm not a date value"
-
- test_list = (today, yesterday, tomorrow, someday, notdate, None)
- someday_result = defaultfilters.date(someday)
- result_list = (_(u'today'), _(u'yesterday'), _(u'tomorrow'),
- someday_result, u"I'm not a date value", None)
- self.humanize_tester(test_list, result_list, 'naturalday')
-
-if __name__ == '__main__':
- unittest.main()
-
diff --git a/parts/django/tests/regressiontests/i18n/__init__.py b/parts/django/tests/regressiontests/i18n/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/i18n/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/i18n/forms.py b/parts/django/tests/regressiontests/i18n/forms.py
deleted file mode 100644
index 156441c..0000000
--- a/parts/django/tests/regressiontests/i18n/forms.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from django import template, forms
-from django.forms.extras import SelectDateWidget
-from models import Company
-
-class I18nForm(forms.Form):
- decimal_field = forms.DecimalField(localize=True)
- float_field = forms.FloatField(localize=True)
- date_field = forms.DateField(localize=True)
- datetime_field = forms.DateTimeField(localize=True)
- time_field = forms.TimeField(localize=True)
- integer_field = forms.IntegerField(localize=True)
-
-class SelectDateForm(forms.Form):
- date_field = forms.DateField(widget=SelectDateWidget)
-
-class CompanyForm(forms.ModelForm):
- cents_payed = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)
- products_delivered = forms.IntegerField(localize=True)
- date_added = forms.DateTimeField(localize=True)
-
- class Meta:
- model = Company
diff --git a/parts/django/tests/regressiontests/i18n/models.py b/parts/django/tests/regressiontests/i18n/models.py
deleted file mode 100644
index 75cd996..0000000
--- a/parts/django/tests/regressiontests/i18n/models.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from datetime import datetime
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-
-class TestModel(models.Model):
- text = models.CharField(max_length=10, default=_('Anything'))
-
-class Company(models.Model):
- name = models.CharField(max_length=50)
- date_added = models.DateTimeField(default=datetime(1799,1,31,23,59,59,0))
- cents_payed = models.DecimalField(max_digits=4, decimal_places=2)
- products_delivered = models.IntegerField()
diff --git a/parts/django/tests/regressiontests/i18n/other/__init__.py b/parts/django/tests/regressiontests/i18n/other/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/i18n/other/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/i18n/other/locale/__init__.py b/parts/django/tests/regressiontests/i18n/other/locale/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/i18n/other/locale/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo b/parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo
deleted file mode 100644
index 2bc9343..0000000
--- a/parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po b/parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index 2fdcee5..0000000
--- a/parts/django/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,22 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 17:33+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: models.py:3
-msgid "Date/time"
-msgstr "Datum/Zeit (LOCALE_PATHS)"
diff --git a/parts/django/tests/regressiontests/i18n/other/locale/de/__init__.py b/parts/django/tests/regressiontests/i18n/other/locale/de/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/i18n/other/locale/de/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/i18n/other/locale/de/formats.py b/parts/django/tests/regressiontests/i18n/other/locale/de/formats.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/i18n/other/locale/de/formats.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/i18n/resolution/__init__.py b/parts/django/tests/regressiontests/i18n/resolution/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/i18n/resolution/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.mo b/parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.mo
deleted file mode 100644
index 1c37ac5..0000000
--- a/parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po b/parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index 11d2d5d..0000000
--- a/parts/django/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,22 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 17:33+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: models.py:3
-msgid "Date/time"
-msgstr "Datum/Zeit (APP)"
diff --git a/parts/django/tests/regressiontests/i18n/resolution/models.py b/parts/django/tests/regressiontests/i18n/resolution/models.py
deleted file mode 100644
index 4287ca8..0000000
--- a/parts/django/tests/regressiontests/i18n/resolution/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/i18n/tests.py b/parts/django/tests/regressiontests/i18n/tests.py
deleted file mode 100644
index 99f9fe1..0000000
--- a/parts/django/tests/regressiontests/i18n/tests.py
+++ /dev/null
@@ -1,667 +0,0 @@
-# -*- encoding: utf-8 -*-
-import datetime
-import decimal
-import os
-import sys
-import pickle
-
-from django.conf import settings
-from django.template import Template, Context
-from django.test import TestCase
-from django.utils.formats import get_format, date_format, time_format, localize, localize_input, iter_format_modules
-from django.utils.numberformat import format as nformat
-from django.utils.safestring import mark_safe, SafeString, SafeUnicode
-from django.utils.translation import ugettext, ugettext_lazy, activate, deactivate, gettext_lazy, to_locale
-from django.utils.importlib import import_module
-
-
-from forms import I18nForm, SelectDateForm, SelectDateWidget, CompanyForm
-from models import Company, TestModel
-
-
-class TranslationTests(TestCase):
-
- def test_lazy_objects(self):
- """
- Format string interpolation should work with *_lazy objects.
- """
- s = ugettext_lazy('Add %(name)s')
- d = {'name': 'Ringo'}
- self.assertEqual(u'Add Ringo', s % d)
- activate('de')
- try:
- self.assertEqual(u'Ringo hinzuf\xfcgen', s % d)
- activate('pl')
- self.assertEqual(u'Dodaj Ringo', s % d)
- finally:
- deactivate()
-
- # It should be possible to compare *_lazy objects.
- s1 = ugettext_lazy('Add %(name)s')
- self.assertEqual(True, s == s1)
- s2 = gettext_lazy('Add %(name)s')
- s3 = gettext_lazy('Add %(name)s')
- self.assertEqual(True, s2 == s3)
- self.assertEqual(True, s == s2)
- s4 = ugettext_lazy('Some other string')
- self.assertEqual(False, s == s4)
-
- def test_lazy_pickle(self):
- s1 = ugettext_lazy("test")
- self.assertEqual(unicode(s1), "test")
- s2 = pickle.loads(pickle.dumps(s1))
- self.assertEqual(unicode(s2), "test")
-
- def test_string_concat(self):
- """
- unicode(string_concat(...)) should not raise a TypeError - #4796
- """
- import django.utils.translation
- self.assertEqual(u'django', unicode(django.utils.translation.string_concat("dja", "ngo")))
-
- def test_safe_status(self):
- """
- Translating a string requiring no auto-escaping shouldn't change the "safe" status.
- """
- s = mark_safe('Password')
- self.assertEqual(SafeString, type(s))
- activate('de')
- try:
- self.assertEqual(SafeUnicode, type(ugettext(s)))
- finally:
- deactivate()
- self.assertEqual('aPassword', SafeString('a') + s)
- self.assertEqual('Passworda', s + SafeString('a'))
- self.assertEqual('Passworda', s + mark_safe('a'))
- self.assertEqual('aPassword', mark_safe('a') + s)
- self.assertEqual('as', mark_safe('a') + mark_safe('s'))
-
- def test_maclines(self):
- """
- Translations on files with mac or dos end of lines will be converted
- to unix eof in .po catalogs, and they have to match when retrieved
- """
- from django.utils.translation.trans_real import translation
- ca_translation = translation('ca')
- ca_translation._catalog[u'Mac\nEOF\n'] = u'Catalan Mac\nEOF\n'
- ca_translation._catalog[u'Win\nEOF\n'] = u'Catalan Win\nEOF\n'
- activate('ca')
- try:
- self.assertEqual(u'Catalan Mac\nEOF\n', ugettext(u'Mac\rEOF\r'))
- self.assertEqual(u'Catalan Win\nEOF\n', ugettext(u'Win\r\nEOF\r\n'))
- finally:
- deactivate()
-
- def test_to_locale(self):
- """
- Tests the to_locale function and the special case of Serbian Latin
- (refs #12230 and r11299)
- """
- self.assertEqual(to_locale('en-us'), 'en_US')
- self.assertEqual(to_locale('sr-lat'), 'sr_Lat')
-
- def test_to_language(self):
- """
- Test the to_language function
- """
- from django.utils.translation.trans_real import to_language
- self.assertEqual(to_language('en_US'), 'en-us')
- self.assertEqual(to_language('sr_Lat'), 'sr-lat')
-
-
-class FormattingTests(TestCase):
-
- def setUp(self):
- self.use_i18n = settings.USE_I18N
- self.use_l10n = settings.USE_L10N
- self.use_thousand_separator = settings.USE_THOUSAND_SEPARATOR
- self.thousand_separator = settings.THOUSAND_SEPARATOR
- self.number_grouping = settings.NUMBER_GROUPING
- self.n = decimal.Decimal('66666.666')
- self.f = 99999.999
- self.d = datetime.date(2009, 12, 31)
- self.dt = datetime.datetime(2009, 12, 31, 20, 50)
- self.t = datetime.time(10, 15, 48)
- self.l = 10000L
- self.ctxt = Context({
- 'n': self.n,
- 't': self.t,
- 'd': self.d,
- 'dt': self.dt,
- 'f': self.f,
- 'l': self.l,
- })
-
- def tearDown(self):
- # Restore defaults
- settings.USE_I18N = self.use_i18n
- settings.USE_L10N = self.use_l10n
- settings.USE_THOUSAND_SEPARATOR = self.use_thousand_separator
- settings.THOUSAND_SEPARATOR = self.thousand_separator
- settings.NUMBER_GROUPING = self.number_grouping
-
- def test_locale_independent(self):
- """
- Localization of numbers
- """
- settings.USE_L10N = True
- settings.USE_THOUSAND_SEPARATOR = False
- self.assertEqual(u'66666.66', nformat(self.n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=','))
- self.assertEqual(u'66666A6', nformat(self.n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B'))
-
- settings.USE_THOUSAND_SEPARATOR = True
- self.assertEqual(u'66,666.66', nformat(self.n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=','))
- self.assertEqual(u'6B6B6B6B6A6', nformat(self.n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B'))
- self.assertEqual(u'-66666.6', nformat(-66666.666, decimal_sep='.', decimal_pos=1))
- self.assertEqual(u'-66666.0', nformat(int('-66666'), decimal_sep='.', decimal_pos=1))
- self.assertEqual(u'10000.0', nformat(self.l, decimal_sep='.', decimal_pos=1))
-
- # date filter
- self.assertEqual(u'31.12.2009 в 20:50', Template('{{ dt|date:"d.m.Y в H:i" }}').render(self.ctxt))
- self.assertEqual(u'⌚ 10:15', Template('{{ t|time:"⌚ H:i" }}').render(self.ctxt))
-
- def test_l10n_disabled(self):
- """
- Catalan locale with format i18n disabled translations will be used,
- but not formats
- """
- settings.USE_L10N = False
- activate('ca')
- try:
- self.assertEqual(u'N j, Y', get_format('DATE_FORMAT'))
- self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK'))
- self.assertEqual(u'.', get_format('DECIMAL_SEPARATOR'))
- self.assertEqual(u'10:15 a.m.', time_format(self.t))
- self.assertEqual(u'des. 31, 2009', date_format(self.d))
- self.assertEqual(u'desembre 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
- self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
- self.assertEqual(u'No localizable', localize('No localizable'))
- self.assertEqual(u'66666.666', localize(self.n))
- self.assertEqual(u'99999.999', localize(self.f))
- self.assertEqual(u'10000', localize(self.l))
- self.assertEqual(u'des. 31, 2009', localize(self.d))
- self.assertEqual(u'des. 31, 2009, 8:50 p.m.', localize(self.dt))
- self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt))
- self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt))
- self.assertEqual(u'des. 31, 2009', Template('{{ d }}').render(self.ctxt))
- self.assertEqual(u'des. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt))
- self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
- self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
- self.assertEqual(u'10:15 a.m.', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt))
- self.assertEqual(u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
- self.assertEqual(u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
-
- 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',
- 'integer_field': u'1.234',
- })
- self.assertEqual(False, form.is_valid())
- self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['float_field'])
- self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['decimal_field'])
- self.assertEqual([u'Introdu\xefu una data v\xe0lida.'], form.errors['date_field'])
- self.assertEqual([u'Introdu\xefu una data/hora v\xe0lides.'], form.errors['datetime_field'])
- self.assertEqual([u'Introdu\xefu un n\xfamero sencer.'], form.errors['integer_field'])
-
- form2 = SelectDateForm({
- 'date_field_month': u'12',
- 'date_field_day': u'31',
- 'date_field_year': u'2009'
- })
- self.assertEqual(True, form2.is_valid())
- self.assertEqual(datetime.date(2009, 12, 31), form2.cleaned_data['date_field'])
- self.assertEqual(
- 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>',
- SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31))
- )
-
- # We shouldn't change the behavior of the floatformat filter re:
- # thousand separator and grouping when USE_L10N is False even
- # if the USE_THOUSAND_SEPARATOR, NUMBER_GROUPING and
- # THOUSAND_SEPARATOR settings are specified
- settings.USE_THOUSAND_SEPARATOR = True
- settings.NUMBER_GROUPING = 1
- settings.THOUSAND_SEPARATOR = '!'
- self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
- self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
- finally:
- deactivate()
-
- def test_l10n_enabled(self):
- """
- Catalan locale
- """
- settings.USE_L10N = True
- activate('ca')
- try:
- self.assertEqual('j \de F \de Y', get_format('DATE_FORMAT'))
- self.assertEqual(1, get_format('FIRST_DAY_OF_WEEK'))
- self.assertEqual(',', get_format('DECIMAL_SEPARATOR'))
- self.assertEqual(u'10:15:48', time_format(self.t))
- self.assertEqual(u'31 de desembre de 2009', date_format(self.d))
- self.assertEqual(u'desembre del 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
- self.assertEqual(u'31/12/2009 20:50', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
- self.assertEqual('No localizable', localize('No localizable'))
-
- settings.USE_THOUSAND_SEPARATOR = True
- self.assertEqual(u'66.666,666', localize(self.n))
- self.assertEqual(u'99.999,999', localize(self.f))
- self.assertEqual(u'10.000', localize(self.l))
- self.assertEqual(u'True', localize(True))
-
- settings.USE_THOUSAND_SEPARATOR = False
- self.assertEqual(u'66666,666', localize(self.n))
- self.assertEqual(u'99999,999', localize(self.f))
- self.assertEqual(u'10000', localize(self.l))
- self.assertEqual(u'31 de desembre de 2009', localize(self.d))
- self.assertEqual(u'31 de desembre de 2009 a les 20:50', localize(self.dt))
-
- settings.USE_THOUSAND_SEPARATOR = True
- self.assertEqual(u'66.666,666', Template('{{ n }}').render(self.ctxt))
- self.assertEqual(u'99.999,999', Template('{{ f }}').render(self.ctxt))
- self.assertEqual(u'10.000', Template('{{ l }}').render(self.ctxt))
-
- form3 = I18nForm({
- 'decimal_field': u'66.666,666',
- 'float_field': u'99.999,999',
- 'date_field': u'31/12/2009',
- 'datetime_field': u'31/12/2009 20:50',
- 'time_field': u'20:50',
- 'integer_field': u'1.234',
- })
- self.assertEqual(True, form3.is_valid())
- self.assertEqual(decimal.Decimal('66666.666'), form3.cleaned_data['decimal_field'])
- self.assertEqual(99999.999, form3.cleaned_data['float_field'])
- self.assertEqual(datetime.date(2009, 12, 31), form3.cleaned_data['date_field'])
- self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form3.cleaned_data['datetime_field'])
- self.assertEqual(datetime.time(20, 50), form3.cleaned_data['time_field'])
- self.assertEqual(1234, form3.cleaned_data['integer_field'])
-
- settings.USE_THOUSAND_SEPARATOR = False
- self.assertEqual(u'66666,666', Template('{{ n }}').render(self.ctxt))
- self.assertEqual(u'99999,999', Template('{{ f }}').render(self.ctxt))
- self.assertEqual(u'31 de desembre de 2009', Template('{{ d }}').render(self.ctxt))
- self.assertEqual(u'31 de desembre de 2009 a les 20:50', Template('{{ dt }}').render(self.ctxt))
- self.assertEqual(u'66666,67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
- self.assertEqual(u'100000,0', Template('{{ f|floatformat }}').render(self.ctxt))
- self.assertEqual(u'10:15:48', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt))
- self.assertEqual(u'31/12/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
- self.assertEqual(u'31/12/2009 20:50', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
-
- form4 = 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',
- 'integer_field': u'1234',
- })
- self.assertEqual(True, form4.is_valid())
- self.assertEqual(decimal.Decimal('66666.666'), form4.cleaned_data['decimal_field'])
- self.assertEqual(99999.999, form4.cleaned_data['float_field'])
- self.assertEqual(datetime.date(2009, 12, 31), form4.cleaned_data['date_field'])
- self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form4.cleaned_data['datetime_field'])
- self.assertEqual(datetime.time(20, 50), form4.cleaned_data['time_field'])
- self.assertEqual(1234, form4.cleaned_data['integer_field'])
-
- form5 = SelectDateForm({
- 'date_field_month': u'12',
- 'date_field_day': u'31',
- 'date_field_year': u'2009'
- })
- self.assertEqual(True, form5.is_valid())
- self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data['date_field'])
- self.assertEqual(
- 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>',
- SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31))
- )
- finally:
- deactivate()
-
- # English locale
-
- settings.USE_L10N = True
- activate('en')
- try:
- self.assertEqual('N j, Y', get_format('DATE_FORMAT'))
- self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK'))
- self.assertEqual('.', get_format('DECIMAL_SEPARATOR'))
- self.assertEqual(u'Dec. 31, 2009', date_format(self.d))
- self.assertEqual(u'December 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
- self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
- self.assertEqual(u'No localizable', localize('No localizable'))
-
- settings.USE_THOUSAND_SEPARATOR = True
- self.assertEqual(u'66,666.666', localize(self.n))
- self.assertEqual(u'99,999.999', localize(self.f))
- self.assertEqual(u'10,000', localize(self.l))
-
- settings.USE_THOUSAND_SEPARATOR = False
- self.assertEqual(u'66666.666', localize(self.n))
- self.assertEqual(u'99999.999', localize(self.f))
- self.assertEqual(u'10000', localize(self.l))
- self.assertEqual(u'Dec. 31, 2009', localize(self.d))
- self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', localize(self.dt))
-
- settings.USE_THOUSAND_SEPARATOR = True
- self.assertEqual(u'66,666.666', Template('{{ n }}').render(self.ctxt))
- self.assertEqual(u'99,999.999', Template('{{ f }}').render(self.ctxt))
- self.assertEqual(u'10,000', Template('{{ l }}').render(self.ctxt))
-
- settings.USE_THOUSAND_SEPARATOR = False
- self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt))
- self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt))
- self.assertEqual(u'Dec. 31, 2009', Template('{{ d }}').render(self.ctxt))
- self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt))
- self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
- self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
- self.assertEqual(u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
- self.assertEqual(u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
-
- form5 = 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',
- 'integer_field': u'1234',
- })
- self.assertEqual(True, form5.is_valid())
- self.assertEqual(decimal.Decimal('66666.666'), form5.cleaned_data['decimal_field'])
- self.assertEqual(99999.999, form5.cleaned_data['float_field'])
- self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data['date_field'])
- self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form5.cleaned_data['datetime_field'])
- self.assertEqual(datetime.time(20, 50), form5.cleaned_data['time_field'])
- self.assertEqual(1234, form5.cleaned_data['integer_field'])
-
- form6 = SelectDateForm({
- 'date_field_month': u'12',
- 'date_field_day': u'31',
- 'date_field_year': u'2009'
- })
- self.assertEqual(True, form6.is_valid())
- self.assertEqual(datetime.date(2009, 12, 31), form6.cleaned_data['date_field'])
- self.assertEqual(
- 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>',
- SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31))
- )
- finally:
- deactivate()
-
- def test_sub_locales(self):
- """
- Check if sublocales fall back to the main locale
- """
- settings.USE_L10N = True
- activate('de-at')
- settings.USE_THOUSAND_SEPARATOR = True
- try:
- self.assertEqual(u'66.666,666', Template('{{ n }}').render(self.ctxt))
- finally:
- deactivate()
-
- activate('es-us')
- try:
- self.assertEqual(u'31 de diciembre de 2009', date_format(self.d))
- finally:
- deactivate()
-
- def test_localized_input(self):
- """
- Tests if form input is correctly localized
- """
- settings.USE_L10N = True
- activate('de-at')
- try:
- form6 = CompanyForm({
- 'name': u'acme',
- 'date_added': datetime.datetime(2009, 12, 31, 6, 0, 0),
- 'cents_payed': decimal.Decimal('59.47'),
- 'products_delivered': 12000,
- })
- self.assertEqual(True, form6.is_valid())
- self.assertEqual(
- form6.as_ul(),
- u'<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" value="acme" maxlength="50" /></li>\n<li><label for="id_date_added">Date added:</label> <input type="text" name="date_added" value="31.12.2009 06:00:00" id="id_date_added" /></li>\n<li><label for="id_cents_payed">Cents payed:</label> <input type="text" name="cents_payed" value="59,47" id="id_cents_payed" /></li>\n<li><label for="id_products_delivered">Products delivered:</label> <input type="text" name="products_delivered" value="12000" id="id_products_delivered" /></li>'
- )
- self.assertEqual(localize_input(datetime.datetime(2009, 12, 31, 6, 0, 0)), '31.12.2009 06:00:00')
- self.assertEqual(datetime.datetime(2009, 12, 31, 6, 0, 0), form6.cleaned_data['date_added'])
- settings.USE_THOUSAND_SEPARATOR = True
- # Checking for the localized "products_delivered" field
- self.assert_(u'<input type="text" name="products_delivered" value="12.000" id="id_products_delivered" />' in form6.as_ul())
- finally:
- deactivate()
-
- def test_iter_format_modules(self):
- """
- Tests the iter_format_modules function.
- """
- activate('de-at')
- old_format_module_path = settings.FORMAT_MODULE_PATH
- try:
- settings.USE_L10N = True
- de_format_mod = import_module('django.conf.locale.de.formats')
- self.assertEqual(list(iter_format_modules('de')), [de_format_mod])
- settings.FORMAT_MODULE_PATH = 'regressiontests.i18n.other.locale'
- test_de_format_mod = import_module('regressiontests.i18n.other.locale.de.formats')
- self.assertEqual(list(iter_format_modules('de')), [test_de_format_mod, de_format_mod])
- finally:
- settings.FORMAT_MODULE_PATH = old_format_module_path
- deactivate()
-
-
-class MiscTests(TestCase):
-
- def test_parse_spec_http_header(self):
- """
- Testing HTTP header parsing. First, we test that we can parse the
- values according to the spec (and that we extract all the pieces in
- the right order).
- """
- from django.utils.translation.trans_real import parse_accept_lang_header
- p = parse_accept_lang_header
- # Good headers.
- self.assertEqual([('de', 1.0)], p('de'))
- self.assertEqual([('en-AU', 1.0)], p('en-AU'))
- self.assertEqual([('*', 1.0)], p('*;q=1.00'))
- self.assertEqual([('en-AU', 0.123)], p('en-AU;q=0.123'))
- self.assertEqual([('en-au', 0.5)], p('en-au;q=0.5'))
- self.assertEqual([('en-au', 1.0)], p('en-au;q=1.0'))
- self.assertEqual([('da', 1.0), ('en', 0.5), ('en-gb', 0.25)], p('da, en-gb;q=0.25, en;q=0.5'))
- self.assertEqual([('en-au-xx', 1.0)], p('en-au-xx'))
- self.assertEqual([('de', 1.0), ('en-au', 0.75), ('en-us', 0.5), ('en', 0.25), ('es', 0.125), ('fa', 0.125)], p('de,en-au;q=0.75,en-us;q=0.5,en;q=0.25,es;q=0.125,fa;q=0.125'))
- self.assertEqual([('*', 1.0)], p('*'))
- self.assertEqual([('de', 1.0)], p('de;q=0.'))
- self.assertEqual([], p(''))
-
- # Bad headers; should always return [].
- self.assertEqual([], p('en-gb;q=1.0000'))
- self.assertEqual([], p('en;q=0.1234'))
- self.assertEqual([], p('en;q=.2'))
- self.assertEqual([], p('abcdefghi-au'))
- self.assertEqual([], p('**'))
- self.assertEqual([], p('en,,gb'))
- self.assertEqual([], p('en-au;q=0.1.0'))
- self.assertEqual([], p('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZ,en'))
- self.assertEqual([], p('da, en-gb;q=0.8, en;q=0.7,#'))
- self.assertEqual([], p('de;q=2.0'))
- self.assertEqual([], p('de;q=0.a'))
- self.assertEqual([], p(''))
-
- def test_parse_literal_http_header(self):
- """
- Now test that we parse a literal HTTP header correctly.
- """
- from django.utils.translation.trans_real import get_language_from_request
- g = get_language_from_request
- from django.http import HttpRequest
- r = HttpRequest
- r.COOKIES = {}
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'pt-br'}
- self.assertEqual('pt-br', g(r))
-
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'pt'}
- self.assertEqual('pt', g(r))
-
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'es,de'}
- self.assertEqual('es', g(r))
-
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'es-ar,de'}
- self.assertEqual('es-ar', g(r))
-
- # Python 2.3 and 2.4 return slightly different results for completely
- # bogus locales, so we omit this test for that anything below 2.4.
- # It's relatively harmless in any cases (GIGO). This also means this
- # won't be executed on Jython currently, but life's like that
- # sometimes. (On those platforms, passing in a truly bogus locale
- # will get you the default locale back.)
- if sys.version_info >= (2, 5):
- # This test assumes there won't be a Django translation to a US
- # variation of the Spanish language, a safe assumption. When the
- # user sets it as the preferred language, the main 'es'
- # translation should be selected instead.
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'es-us'}
- self.assertEqual(g(r), 'es')
-
- # This tests the following scenario: there isn't a main language (zh)
- # translation of Django but there is a translation to variation (zh_CN)
- # the user sets zh-cn as the preferred language, it should be selected
- # by Django without falling back nor ignoring it.
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'zh-cn,de'}
- self.assertEqual(g(r), 'zh-cn')
-
- def test_parse_language_cookie(self):
- """
- Now test that we parse language preferences stored in a cookie correctly.
- """
- from django.utils.translation.trans_real import get_language_from_request
- g = get_language_from_request
- from django.http import HttpRequest
- r = HttpRequest
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'pt-br'}
- r.META = {}
- self.assertEqual('pt-br', g(r))
-
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'pt'}
- r.META = {}
- self.assertEqual('pt', g(r))
-
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'es'}
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
- self.assertEqual('es', g(r))
-
- # Python 2.3 and 2.4 return slightly different results for completely
- # bogus locales, so we omit this test for that anything below 2.4.
- # It's relatively harmless in any cases (GIGO). This also means this
- # won't be executed on Jython currently, but life's like that
- # sometimes. (On those platforms, passing in a truly bogus locale
- # will get you the default locale back.)
- if sys.version_info >= (2, 5):
- # This test assumes there won't be a Django translation to a US
- # variation of the Spanish language, a safe assumption. When the
- # user sets it as the preferred language, the main 'es'
- # translation should be selected instead.
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'es-us'}
- r.META = {}
- self.assertEqual(g(r), 'es')
-
- # This tests the following scenario: there isn't a main language (zh)
- # translation of Django but there is a translation to variation (zh_CN)
- # the user sets zh-cn as the preferred language, it should be selected
- # by Django without falling back nor ignoring it.
- r.COOKIES = {settings.LANGUAGE_COOKIE_NAME: 'zh-cn'}
- r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
- self.assertEqual(g(r), 'zh-cn')
-
-class ResolutionOrderI18NTests(TestCase):
-
- def setUp(self):
- from django.utils.translation import trans_real
- # Okay, this is brutal, but we have no other choice to fully reset
- # the translation framework
- trans_real._active = {}
- trans_real._translations = {}
- activate('de')
-
- def tearDown(self):
- deactivate()
-
- def assertUgettext(self, msgid, msgstr):
- result = ugettext(msgid)
- self.assert_(msgstr in result, ("The string '%s' isn't in the "
- "translation of '%s'; the actual result is '%s'." % (msgstr, msgid, result)))
-
-class AppResolutionOrderI18NTests(ResolutionOrderI18NTests):
-
- def setUp(self):
- self.old_installed_apps = settings.INSTALLED_APPS
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.i18n.resolution']
- super(AppResolutionOrderI18NTests, self).setUp()
-
- def tearDown(self):
- settings.INSTALLED_APPS = self.old_installed_apps
- super(AppResolutionOrderI18NTests, self).tearDown()
-
- def test_app_translation(self):
- self.assertUgettext('Date/time', 'APP')
-
-class LocalePathsResolutionOrderI18NTests(ResolutionOrderI18NTests):
-
- def setUp(self):
- self.old_locale_paths = settings.LOCALE_PATHS
- settings.LOCALE_PATHS += (os.path.join(os.path.dirname(os.path.abspath(__file__)), 'other', 'locale'),)
- super(LocalePathsResolutionOrderI18NTests, self).setUp()
-
- def tearDown(self):
- settings.LOCALE_PATHS = self.old_locale_paths
- super(LocalePathsResolutionOrderI18NTests, self).tearDown()
-
- def test_locale_paths_translation(self):
- self.assertUgettext('Date/time', 'LOCALE_PATHS')
-
-class ProjectResolutionOrderI18NTests(ResolutionOrderI18NTests):
-
- def setUp(self):
- self.old_settings_module = settings.SETTINGS_MODULE
- settings.SETTINGS_MODULE = 'regressiontests'
- super(ProjectResolutionOrderI18NTests, self).setUp()
-
- def tearDown(self):
- settings.SETTINGS_MODULE = self.old_settings_module
- super(ProjectResolutionOrderI18NTests, self).tearDown()
-
- def test_project_translation(self):
- self.assertUgettext('Date/time', 'PROJECT')
-
- def test_project_override_app_translation(self):
- old_installed_apps = settings.INSTALLED_APPS
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.i18n.resolution']
- self.assertUgettext('Date/time', 'PROJECT')
- settings.INSTALLED_APPS = old_installed_apps
-
- def test_project_override_locale_paths_translation(self):
- old_locale_paths = settings.LOCALE_PATHS
- settings.LOCALE_PATHS += (os.path.join(os.path.dirname(os.path.abspath(__file__)), 'other', 'locale'),)
- self.assertUgettext('Date/time', 'PROJECT')
- settings.LOCALE_PATHS = old_locale_paths
-
-class DjangoFallbackResolutionOrderI18NTests(ResolutionOrderI18NTests):
-
- def test_django_fallback(self):
- self.assertUgettext('Date/time', 'Datum/Zeit')
-
-
-class TestModels(TestCase):
- def test_lazy(self):
- tm = TestModel()
- tm.save()
-
- def test_safestr(self):
- c = Company(cents_payed=12, products_delivered=1)
- c.name = SafeUnicode(u'Iñtërnâtiônàlizætiøn1')
- c.save()
- c.name = SafeString(u'Iñtërnâtiônàlizætiøn1'.encode('utf-8'))
- c.save()
diff --git a/parts/django/tests/regressiontests/initial_sql_regress/__init__.py b/parts/django/tests/regressiontests/initial_sql_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/initial_sql_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/initial_sql_regress/models.py b/parts/django/tests/regressiontests/initial_sql_regress/models.py
deleted file mode 100644
index 9f91802..0000000
--- a/parts/django/tests/regressiontests/initial_sql_regress/models.py
+++ /dev/null
@@ -1,11 +0,0 @@
-"""
-Regression tests for initial SQL insertion.
-"""
-
-from django.db import models
-
-class Simple(models.Model):
- name = models.CharField(max_length = 50)
-
-# NOTE: The format of the included SQL file for this test suite is important.
-# It must end with a trailing newline in order to test the fix for #2161.
diff --git a/parts/django/tests/regressiontests/initial_sql_regress/sql/simple.sql b/parts/django/tests/regressiontests/initial_sql_regress/sql/simple.sql
deleted file mode 100644
index ca9bd40..0000000
--- a/parts/django/tests/regressiontests/initial_sql_regress/sql/simple.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-INSERT INTO initial_sql_regress_simple (name) VALUES ('John');
-INSERT INTO initial_sql_regress_simple (name) VALUES ('Paul');
-INSERT INTO initial_sql_regress_simple (name) VALUES ('Ringo');
-INSERT INTO initial_sql_regress_simple (name) VALUES ('George');
-INSERT INTO initial_sql_regress_simple (name) VALUES ('Miles O''Brien');
-INSERT INTO initial_sql_regress_simple (name) VALUES ('Semicolon;Man');
-INSERT INTO initial_sql_regress_simple (name) VALUES ('This line has a Windows line ending');
-
diff --git a/parts/django/tests/regressiontests/initial_sql_regress/tests.py b/parts/django/tests/regressiontests/initial_sql_regress/tests.py
deleted file mode 100644
index 2b3ca91..0000000
--- a/parts/django/tests/regressiontests/initial_sql_regress/tests.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.test import TestCase
-
-from models import Simple
-
-
-class InitialSQLTests(TestCase):
- def test_initial_sql(self):
- self.assertEqual(Simple.objects.count(), 7)
diff --git a/parts/django/tests/regressiontests/inline_formsets/__init__.py b/parts/django/tests/regressiontests/inline_formsets/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/inline_formsets/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/inline_formsets/models.py b/parts/django/tests/regressiontests/inline_formsets/models.py
deleted file mode 100644
index d76eea7..0000000
--- a/parts/django/tests/regressiontests/inline_formsets/models.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# coding: utf-8
-from django.db import models
-
-
-class School(models.Model):
- name = models.CharField(max_length=100)
-
-class Parent(models.Model):
- name = models.CharField(max_length=100)
-
-class Child(models.Model):
- mother = models.ForeignKey(Parent, related_name='mothers_children')
- father = models.ForeignKey(Parent, related_name='fathers_children')
- school = models.ForeignKey(School)
- name = models.CharField(max_length=100)
-
-class Poet(models.Model):
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
-class Poem(models.Model):
- poet = models.ForeignKey(Poet)
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/regressiontests/inline_formsets/tests.py b/parts/django/tests/regressiontests/inline_formsets/tests.py
deleted file mode 100644
index dd698ab..0000000
--- a/parts/django/tests/regressiontests/inline_formsets/tests.py
+++ /dev/null
@@ -1,163 +0,0 @@
-from django.forms.models import inlineformset_factory
-from django.test import TestCase
-
-from regressiontests.inline_formsets.models import Poet, Poem, School, Parent, Child
-
-
-class DeletionTests(TestCase):
-
- def test_deletion(self):
- PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True)
- poet = Poet.objects.create(name='test')
- poem = poet.poem_set.create(name='test poem')
- data = {
- 'poem_set-TOTAL_FORMS': u'1',
- 'poem_set-INITIAL_FORMS': u'1',
- 'poem_set-MAX_NUM_FORMS': u'0',
- 'poem_set-0-id': str(poem.pk),
- 'poem_set-0-poet': str(poet.pk),
- 'poem_set-0-name': u'test',
- 'poem_set-0-DELETE': u'on',
- }
- formset = PoemFormSet(data, instance=poet)
- formset.save()
- self.assertTrue(formset.is_valid())
- self.assertEqual(Poem.objects.count(), 0)
-
- def test_add_form_deletion_when_invalid(self):
- """
- Make sure that an add form that is filled out, but marked for deletion
- doesn't cause validation errors.
- """
- PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True)
- poet = Poet.objects.create(name='test')
- data = {
- 'poem_set-TOTAL_FORMS': u'1',
- 'poem_set-INITIAL_FORMS': u'0',
- 'poem_set-MAX_NUM_FORMS': u'0',
- 'poem_set-0-id': u'',
- 'poem_set-0-poem': u'1',
- 'poem_set-0-name': u'x' * 1000,
- }
- formset = PoemFormSet(data, instance=poet)
- # Make sure this form doesn't pass validation.
- self.assertEqual(formset.is_valid(), False)
- self.assertEqual(Poem.objects.count(), 0)
-
- # Then make sure that it *does* pass validation and delete the object,
- # even though the data isn't actually valid.
- data['poem_set-0-DELETE'] = 'on'
- formset = PoemFormSet(data, instance=poet)
- self.assertEqual(formset.is_valid(), True)
- formset.save()
- self.assertEqual(Poem.objects.count(), 0)
-
- def test_change_form_deletion_when_invalid(self):
- """
- Make sure that a change form that is filled out, but marked for deletion
- doesn't cause validation errors.
- """
- PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True)
- poet = Poet.objects.create(name='test')
- poet.poem_set.create(name='test poem')
- data = {
- 'poem_set-TOTAL_FORMS': u'1',
- 'poem_set-INITIAL_FORMS': u'1',
- 'poem_set-MAX_NUM_FORMS': u'0',
- 'poem_set-0-id': u'1',
- 'poem_set-0-poem': u'1',
- 'poem_set-0-name': u'x' * 1000,
- }
- formset = PoemFormSet(data, instance=poet)
- # Make sure this form doesn't pass validation.
- self.assertEqual(formset.is_valid(), False)
- self.assertEqual(Poem.objects.count(), 1)
-
- # Then make sure that it *does* pass validation and delete the object,
- # even though the data isn't actually valid.
- data['poem_set-0-DELETE'] = 'on'
- formset = PoemFormSet(data, instance=poet)
- self.assertEqual(formset.is_valid(), True)
- formset.save()
- self.assertEqual(Poem.objects.count(), 0)
-
- def test_save_new(self):
- """
- Make sure inlineformsets respect commit=False
- regression for #10750
- """
- # exclude some required field from the forms
- ChildFormSet = inlineformset_factory(School, Child, exclude=['father', 'mother'])
- school = School.objects.create(name=u'test')
- mother = Parent.objects.create(name=u'mother')
- father = Parent.objects.create(name=u'father')
- data = {
- 'child_set-TOTAL_FORMS': u'1',
- 'child_set-INITIAL_FORMS': u'0',
- 'child_set-MAX_NUM_FORMS': u'0',
- 'child_set-0-name': u'child',
- }
- formset = ChildFormSet(data, instance=school)
- self.assertEqual(formset.is_valid(), True)
- objects = formset.save(commit=False)
- for obj in objects:
- obj.mother = mother
- obj.father = father
- obj.save()
- self.assertEqual(school.child_set.count(), 1)
-
-
-class InlineFormsetFactoryTest(TestCase):
- def assertRaisesErrorWithMessage(self, error, message, callable, *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
- def test_inline_formset_factory(self):
- """
- These should both work without a problem.
- """
- inlineformset_factory(Parent, Child, fk_name='mother')
- inlineformset_factory(Parent, Child, fk_name='father')
-
- def test_exception_on_unspecified_foreign_key(self):
- """
- Child has two ForeignKeys to Parent, so if we don't specify which one
- to use for the inline formset, we should get an exception.
- """
- self.assertRaisesErrorWithMessage(Exception,
- "<class 'regressiontests.inline_formsets.models.Child'> has more than 1 ForeignKey to <class 'regressiontests.inline_formsets.models.Parent'>",
- inlineformset_factory, Parent, Child
- )
-
- def test_fk_name_not_foreign_key_field_from_child(self):
- """
- If we specify fk_name, but it isn't a ForeignKey from the child model
- to the parent model, we should get an exception.
- """
- self.assertRaisesErrorWithMessage(Exception,
- "fk_name 'school' is not a ForeignKey to <class 'regressiontests.inline_formsets.models.Parent'>",
- inlineformset_factory, Parent, Child, fk_name='school'
- )
-
- def test_non_foreign_key_field(self):
- """
- If the field specified in fk_name is not a ForeignKey, we should get an
- exception.
- """
- self.assertRaisesErrorWithMessage(Exception,
- "<class 'regressiontests.inline_formsets.models.Child'> has no field named 'test'",
- inlineformset_factory, Parent, Child, fk_name='test'
- )
-
- def test_any_iterable_allowed_as_argument_to_exclude(self):
- # Regression test for #9171.
- inlineformset_factory(
- Parent, Child, exclude=['school'], fk_name='mother'
- )
-
- inlineformset_factory(
- Parent, Child, exclude=('school',), fk_name='mother'
- )
diff --git a/parts/django/tests/regressiontests/introspection/__init__.py b/parts/django/tests/regressiontests/introspection/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/introspection/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/introspection/models.py b/parts/django/tests/regressiontests/introspection/models.py
deleted file mode 100644
index ef485e3..0000000
--- a/parts/django/tests/regressiontests/introspection/models.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from django.db import models
-
-class Reporter(models.Model):
- first_name = models.CharField(max_length=30)
- last_name = models.CharField(max_length=30)
- email = models.EmailField()
- facebook_user_id = models.BigIntegerField()
-
- def __unicode__(self):
- return u"%s %s" % (self.first_name, self.last_name)
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateField()
- reporter = models.ForeignKey(Reporter)
-
- def __unicode__(self):
- return self.headline
-
- class Meta:
- ordering = ('headline',) \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/introspection/tests.py b/parts/django/tests/regressiontests/introspection/tests.py
deleted file mode 100644
index 2a81aa8..0000000
--- a/parts/django/tests/regressiontests/introspection/tests.py
+++ /dev/null
@@ -1,111 +0,0 @@
-from django.conf import settings
-from django.db import connection, DEFAULT_DB_ALIAS
-from django.test import TestCase
-from django.utils import functional
-
-from models import Reporter, Article
-
-#
-# The introspection module is optional, so methods tested here might raise
-# NotImplementedError. This is perfectly acceptable behavior for the backend
-# in question, but the tests need to handle this without failing. Ideally we'd
-# skip these tests, but until #4788 is done we'll just ignore them.
-#
-# The easiest way to accomplish this is to decorate every test case with a
-# wrapper that ignores the exception.
-#
-# The metaclass is just for fun.
-#
-
-def ignore_not_implemented(func):
- def _inner(*args, **kwargs):
- try:
- return func(*args, **kwargs)
- except NotImplementedError:
- return None
- functional.update_wrapper(_inner, func)
- return _inner
-
-class IgnoreNotimplementedError(type):
- def __new__(cls, name, bases, attrs):
- for k,v in attrs.items():
- if k.startswith('test'):
- attrs[k] = ignore_not_implemented(v)
- return type.__new__(cls, name, bases, attrs)
-
-class IntrospectionTests(TestCase):
- __metaclass__ = IgnoreNotimplementedError
-
- def test_table_names(self):
- tl = connection.introspection.table_names()
- self.assert_(Reporter._meta.db_table in tl,
- "'%s' isn't in table_list()." % Reporter._meta.db_table)
- self.assert_(Article._meta.db_table in tl,
- "'%s' isn't in table_list()." % Article._meta.db_table)
-
- def test_django_table_names(self):
- cursor = connection.cursor()
- cursor.execute('CREATE TABLE django_ixn_test_table (id INTEGER);');
- tl = connection.introspection.django_table_names()
- cursor.execute("DROP TABLE django_ixn_test_table;")
- self.assert_('django_ixn_testcase_table' not in tl,
- "django_table_names() returned a non-Django table")
-
- def test_installed_models(self):
- tables = [Article._meta.db_table, Reporter._meta.db_table]
- models = connection.introspection.installed_models(tables)
- self.assertEqual(models, set([Article, Reporter]))
-
- def test_sequence_list(self):
- sequences = connection.introspection.sequence_list()
- expected = {'table': Reporter._meta.db_table, 'column': 'id'}
- self.assert_(expected in sequences,
- 'Reporter sequence not found in sequence_list()')
-
- def test_get_table_description_names(self):
- cursor = connection.cursor()
- desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table)
- self.assertEqual([r[0] for r in desc],
- [f.column for f in Reporter._meta.fields])
-
- def test_get_table_description_types(self):
- cursor = connection.cursor()
- desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table)
- self.assertEqual(
- [datatype(r[1], r) for r in desc],
- ['IntegerField', 'CharField', 'CharField', 'CharField', 'BigIntegerField']
- )
-
- # Regression test for #9991 - 'real' types in postgres
- if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'].startswith('django.db.backends.postgresql'):
- def test_postgresql_real_type(self):
- cursor = connection.cursor()
- cursor.execute("CREATE TABLE django_ixn_real_test_table (number REAL);")
- desc = connection.introspection.get_table_description(cursor, 'django_ixn_real_test_table')
- cursor.execute('DROP TABLE django_ixn_real_test_table;')
- self.assertEqual(datatype(desc[0][1], desc[0]), 'FloatField')
-
- def test_get_relations(self):
- cursor = connection.cursor()
- relations = connection.introspection.get_relations(cursor, Article._meta.db_table)
-
- # Older versions of MySQL don't have the chops to report on this stuff,
- # so just skip it if no relations come back. If they do, though, we
- # should test that the response is correct.
- if relations:
- # That's {field_index: (field_index_other_table, other_table)}
- self.assertEqual(relations, {3: (0, Reporter._meta.db_table)})
-
- def test_get_indexes(self):
- cursor = connection.cursor()
- indexes = connection.introspection.get_indexes(cursor, Article._meta.db_table)
- self.assertEqual(indexes['reporter_id'], {'unique': False, 'primary_key': False})
-
-
-def datatype(dbtype, description):
- """Helper to convert a data type into a string."""
- dt = connection.introspection.get_field_type(dbtype, description)
- if type(dt) is tuple:
- return dt[0]
- else:
- return dt
diff --git a/parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.mo b/parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.mo
deleted file mode 100644
index 2ee860a..0000000
--- a/parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.po b/parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index 356e3d3..0000000
--- a/parts/django/tests/regressiontests/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,22 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 17:33+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: models.py:3
-msgid "Date/time"
-msgstr "Datum/Zeit (PROJECT)"
diff --git a/parts/django/tests/regressiontests/localflavor/__init__.py b/parts/django/tests/regressiontests/localflavor/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/localflavor/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/localflavor/models.py b/parts/django/tests/regressiontests/localflavor/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/localflavor/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/localflavor/tests.py b/parts/django/tests/regressiontests/localflavor/tests.py
deleted file mode 100644
index 6968236..0000000
--- a/parts/django/tests/regressiontests/localflavor/tests.py
+++ /dev/null
@@ -1,5 +0,0 @@
-import unittest
-from django.test import TestCase
-
-# just import your tests here
-from us.tests import *
diff --git a/parts/django/tests/regressiontests/localflavor/us/__init__.py b/parts/django/tests/regressiontests/localflavor/us/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/localflavor/us/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/localflavor/us/forms.py b/parts/django/tests/regressiontests/localflavor/us/forms.py
deleted file mode 100644
index 9b77e10..0000000
--- a/parts/django/tests/regressiontests/localflavor/us/forms.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.forms import ModelForm
-from models import USPlace
-
-class USPlaceForm(ModelForm):
- """docstring for PlaceForm"""
- class Meta:
- model = USPlace
diff --git a/parts/django/tests/regressiontests/localflavor/us/models.py b/parts/django/tests/regressiontests/localflavor/us/models.py
deleted file mode 100644
index a8a4cf0..0000000
--- a/parts/django/tests/regressiontests/localflavor/us/models.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.db import models
-from django.contrib.localflavor.us.models import USStateField
-
-# When creating models you need to remember to add a app_label as
-# 'localflavor', so your model can be found
-
-class USPlace(models.Model):
- state = USStateField(blank=True)
- state_req = USStateField()
- state_default = USStateField(default="CA", blank=True)
- name = models.CharField(max_length=20)
- class Meta:
- app_label = 'localflavor'
diff --git a/parts/django/tests/regressiontests/localflavor/us/tests.py b/parts/django/tests/regressiontests/localflavor/us/tests.py
deleted file mode 100644
index 07fe057..0000000
--- a/parts/django/tests/regressiontests/localflavor/us/tests.py
+++ /dev/null
@@ -1,82 +0,0 @@
-from django.test import TestCase
-from forms import USPlaceForm
-
-class USLocalflavorTests(TestCase):
- def setUp(self):
- self.form = USPlaceForm({'state':'GA', 'state_req':'NC', 'name':'impossible'})
-
- def test_get_display_methods(self):
- """Test that the get_*_display() methods are added to the model instances."""
- place = self.form.save()
- self.assertEqual(place.get_state_display(), 'Georgia')
- self.assertEqual(place.get_state_req_display(), 'North Carolina')
-
- def test_required(self):
- """Test that required USStateFields throw appropriate errors."""
- form = USPlaceForm({'state':'GA', 'name':'Place in GA'})
- self.assertFalse(form.is_valid())
- self.assertEqual(form.errors['state_req'], [u'This field is required.'])
-
- def test_field_blank_option(self):
- """Test that the empty option is there."""
- state_select_html = """\
-<select name="state" id="id_state">
-<option value="">---------</option>
-<option value="AL">Alabama</option>
-<option value="AK">Alaska</option>
-<option value="AS">American Samoa</option>
-<option value="AZ">Arizona</option>
-<option value="AR">Arkansas</option>
-<option value="CA">California</option>
-<option value="CO">Colorado</option>
-<option value="CT">Connecticut</option>
-<option value="DE">Delaware</option>
-<option value="DC">District of Columbia</option>
-<option value="FL">Florida</option>
-<option value="GA" selected="selected">Georgia</option>
-<option value="GU">Guam</option>
-<option value="HI">Hawaii</option>
-<option value="ID">Idaho</option>
-<option value="IL">Illinois</option>
-<option value="IN">Indiana</option>
-<option value="IA">Iowa</option>
-<option value="KS">Kansas</option>
-<option value="KY">Kentucky</option>
-<option value="LA">Louisiana</option>
-<option value="ME">Maine</option>
-<option value="MD">Maryland</option>
-<option value="MA">Massachusetts</option>
-<option value="MI">Michigan</option>
-<option value="MN">Minnesota</option>
-<option value="MS">Mississippi</option>
-<option value="MO">Missouri</option>
-<option value="MT">Montana</option>
-<option value="NE">Nebraska</option>
-<option value="NV">Nevada</option>
-<option value="NH">New Hampshire</option>
-<option value="NJ">New Jersey</option>
-<option value="NM">New Mexico</option>
-<option value="NY">New York</option>
-<option value="NC">North Carolina</option>
-<option value="ND">North Dakota</option>
-<option value="MP">Northern Mariana Islands</option>
-<option value="OH">Ohio</option>
-<option value="OK">Oklahoma</option>
-<option value="OR">Oregon</option>
-<option value="PA">Pennsylvania</option>
-<option value="PR">Puerto Rico</option>
-<option value="RI">Rhode Island</option>
-<option value="SC">South Carolina</option>
-<option value="SD">South Dakota</option>
-<option value="TN">Tennessee</option>
-<option value="TX">Texas</option>
-<option value="UT">Utah</option>
-<option value="VT">Vermont</option>
-<option value="VI">Virgin Islands</option>
-<option value="VA">Virginia</option>
-<option value="WA">Washington</option>
-<option value="WV">West Virginia</option>
-<option value="WI">Wisconsin</option>
-<option value="WY">Wyoming</option>
-</select>"""
- self.assertEqual(str(self.form['state']), state_select_html)
diff --git a/parts/django/tests/regressiontests/m2m_regress/__init__.py b/parts/django/tests/regressiontests/m2m_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/m2m_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/m2m_regress/models.py b/parts/django/tests/regressiontests/m2m_regress/models.py
deleted file mode 100644
index 1c2126d..0000000
--- a/parts/django/tests/regressiontests/m2m_regress/models.py
+++ /dev/null
@@ -1,58 +0,0 @@
-from django.db import models
-from django.contrib.auth import models as auth
-
-# No related name is needed here, since symmetrical relations are not
-# explicitly reversible.
-class SelfRefer(models.Model):
- name = models.CharField(max_length=10)
- references = models.ManyToManyField('self')
- related = models.ManyToManyField('self')
-
- def __unicode__(self):
- return self.name
-
-class Tag(models.Model):
- name = models.CharField(max_length=10)
-
- def __unicode__(self):
- return self.name
-
-# Regression for #11956 -- a many to many to the base class
-class TagCollection(Tag):
- tags = models.ManyToManyField(Tag, related_name='tag_collections')
-
- def __unicode__(self):
- return self.name
-
-# A related_name is required on one of the ManyToManyField entries here because
-# they are both addressable as reverse relations from Tag.
-class Entry(models.Model):
- name = models.CharField(max_length=10)
- topics = models.ManyToManyField(Tag)
- related = models.ManyToManyField(Tag, related_name="similar")
-
- def __unicode__(self):
- return self.name
-
-# Two models both inheriting from a base model with a self-referential m2m field
-class SelfReferChild(SelfRefer):
- pass
-
-class SelfReferChildSibling(SelfRefer):
- pass
-
-# Many-to-Many relation between models, where one of the PK's isn't an Autofield
-class Line(models.Model):
- name = models.CharField(max_length=100)
-
-class Worksheet(models.Model):
- id = models.CharField(primary_key=True, max_length=100)
- lines = models.ManyToManyField(Line, blank=True, null=True)
-
-# Regression for #11226 -- A model with the same name that another one to
-# which it has a m2m relation. This shouldn't cause a name clash between
-# the automatically created m2m intermediary table FK field names when
-# running syncdb
-class User(models.Model):
- name = models.CharField(max_length=30)
- friends = models.ManyToManyField(auth.User)
diff --git a/parts/django/tests/regressiontests/m2m_regress/tests.py b/parts/django/tests/regressiontests/m2m_regress/tests.py
deleted file mode 100644
index 7e5e5c3..0000000
--- a/parts/django/tests/regressiontests/m2m_regress/tests.py
+++ /dev/null
@@ -1,82 +0,0 @@
-from django.core.exceptions import FieldError
-from django.test import TestCase
-
-from models import (SelfRefer, Tag, TagCollection, Entry, SelfReferChild,
- SelfReferChildSibling, Worksheet)
-
-
-class M2MRegressionTests(TestCase):
- def assertRaisesErrorWithMessage(self, error, message, callable, *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
- def test_multiple_m2m(self):
- # Multiple m2m references to model must be distinguished when
- # accessing the relations through an instance attribute.
-
- s1 = SelfRefer.objects.create(name='s1')
- s2 = SelfRefer.objects.create(name='s2')
- s3 = SelfRefer.objects.create(name='s3')
- s1.references.add(s2)
- s1.related.add(s3)
-
- e1 = Entry.objects.create(name='e1')
- t1 = Tag.objects.create(name='t1')
- t2 = Tag.objects.create(name='t2')
-
- e1.topics.add(t1)
- e1.related.add(t2)
-
- self.assertQuerysetEqual(s1.references.all(), ["<SelfRefer: s2>"])
- self.assertQuerysetEqual(s1.related.all(), ["<SelfRefer: s3>"])
-
- self.assertQuerysetEqual(e1.topics.all(), ["<Tag: t1>"])
- self.assertQuerysetEqual(e1.related.all(), ["<Tag: t2>"])
-
- def test_internal_related_name_not_in_error_msg(self):
- # The secret internal related names for self-referential many-to-many
- # fields shouldn't appear in the list when an error is made.
-
- self.assertRaisesErrorWithMessage(FieldError,
- "Cannot resolve keyword 'porcupine' into field. Choices are: id, name, references, related, selfreferchild, selfreferchildsibling",
- lambda: SelfRefer.objects.filter(porcupine='fred')
- )
-
- def test_m2m_inheritance_symmetry(self):
- # Test to ensure that the relationship between two inherited models
- # with a self-referential m2m field maintains symmetry
-
- sr_child = SelfReferChild(name="Hanna")
- sr_child.save()
-
- sr_sibling = SelfReferChildSibling(name="Beth")
- sr_sibling.save()
- sr_child.related.add(sr_sibling)
-
- self.assertQuerysetEqual(sr_child.related.all(), ["<SelfRefer: Beth>"])
- self.assertQuerysetEqual(sr_sibling.related.all(), ["<SelfRefer: Hanna>"])
-
- def test_m2m_pk_field_type(self):
- # Regression for #11311 - The primary key for models in a m2m relation
- # doesn't have to be an AutoField
-
- w = Worksheet(id='abc')
- w.save()
- w.delete()
-
- def test_add_m2m_with_base_class(self):
- # Regression for #11956 -- You can add an object to a m2m with the
- # base class without causing integrity errors
-
- t1 = Tag.objects.create(name='t1')
- t2 = Tag.objects.create(name='t2')
-
- c1 = TagCollection.objects.create(name='c1')
- c1.tags = [t1,t2]
- c1 = TagCollection.objects.get(name='c1')
-
- self.assertQuerysetEqual(c1.tags.all(), ["<Tag: t1>", "<Tag: t2>"])
- self.assertQuerysetEqual(t1.tag_collections.all(), ["<TagCollection: c1>"])
diff --git a/parts/django/tests/regressiontests/m2m_through_regress/__init__.py b/parts/django/tests/regressiontests/m2m_through_regress/__init__.py
deleted file mode 100644
index 139597f..0000000
--- a/parts/django/tests/regressiontests/m2m_through_regress/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/parts/django/tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json b/parts/django/tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json
deleted file mode 100644
index 6f24886..0000000
--- a/parts/django/tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- {
- "pk": "1",
- "model": "m2m_through_regress.person",
- "fields": {
- "name": "Guido"
- }
- },
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "Guido",
- "email": "bdfl@python.org",
- "password": "abcde"
- }
- },
- {
- "pk": "1",
- "model": "m2m_through_regress.group",
- "fields": {
- "name": "Python Core Group"
- }
- },
- {
- "pk": "1",
- "model": "m2m_through_regress.usermembership",
- "fields": {
- "user": "1",
- "group": "1",
- "price": "100"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/m2m_through_regress/models.py b/parts/django/tests/regressiontests/m2m_through_regress/models.py
deleted file mode 100644
index ec87985..0000000
--- a/parts/django/tests/regressiontests/m2m_through_regress/models.py
+++ /dev/null
@@ -1,55 +0,0 @@
-from datetime import datetime
-
-from django.contrib.auth.models import User
-from django.core import management
-from django.db import models
-
-
-# Forward declared intermediate model
-class Membership(models.Model):
- person = models.ForeignKey('Person')
- group = models.ForeignKey('Group')
- price = models.IntegerField(default=100)
-
- def __unicode__(self):
- return "%s is a member of %s" % (self.person.name, self.group.name)
-
-# using custom id column to test ticket #11107
-class UserMembership(models.Model):
- id = models.AutoField(db_column='usermembership_id', primary_key=True)
- user = models.ForeignKey(User)
- group = models.ForeignKey('Group')
- price = models.IntegerField(default=100)
-
- def __unicode__(self):
- return "%s is a user and member of %s" % (self.user.username, self.group.name)
-
-class Person(models.Model):
- name = models.CharField(max_length=128)
-
- def __unicode__(self):
- return self.name
-
-class Group(models.Model):
- name = models.CharField(max_length=128)
- # Membership object defined as a class
- members = models.ManyToManyField(Person, through=Membership)
- user_members = models.ManyToManyField(User, through='UserMembership')
-
- def __unicode__(self):
- return self.name
-
-# A set of models that use an non-abstract inherited model as the 'through' model.
-class A(models.Model):
- a_text = models.CharField(max_length=20)
-
-class ThroughBase(models.Model):
- a = models.ForeignKey(A)
- b = models.ForeignKey('B')
-
-class Through(ThroughBase):
- extra = models.CharField(max_length=20)
-
-class B(models.Model):
- b_text = models.CharField(max_length=20)
- a_list = models.ManyToManyField(A, through=Through)
diff --git a/parts/django/tests/regressiontests/m2m_through_regress/tests.py b/parts/django/tests/regressiontests/m2m_through_regress/tests.py
deleted file mode 100644
index 2eaf886..0000000
--- a/parts/django/tests/regressiontests/m2m_through_regress/tests.py
+++ /dev/null
@@ -1,128 +0,0 @@
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.core import management
-from django.contrib.auth.models import User
-from django.test import TestCase
-
-from models import Person, Group, Membership, UserMembership
-
-
-class M2MThroughTestCase(TestCase):
- def test_everything(self):
- bob = Person.objects.create(name="Bob")
- jim = Person.objects.create(name="Jim")
-
- rock = Group.objects.create(name="Rock")
- roll = Group.objects.create(name="Roll")
-
- frank = User.objects.create_user("frank", "frank@example.com", "password")
- jane = User.objects.create_user("jane", "jane@example.com", "password")
-
- Membership.objects.create(person=bob, group=rock)
- Membership.objects.create(person=bob, group=roll)
- Membership.objects.create(person=jim, group=rock)
-
- self.assertQuerysetEqual(
- bob.group_set.all(), [
- "<Group: Rock>",
- "<Group: Roll>",
- ]
- )
-
- self.assertQuerysetEqual(
- roll.members.all(), [
- "<Person: Bob>",
- ]
- )
-
- self.assertRaises(AttributeError, setattr, bob, "group_set", [])
- self.assertRaises(AttributeError, setattr, roll, "members", [])
-
- self.assertRaises(AttributeError, rock.members.create, name="Anne")
- self.assertRaises(AttributeError, bob.group_set.create, name="Funk")
-
- UserMembership.objects.create(user=frank, group=rock)
- UserMembership.objects.create(user=frank, group=roll)
- UserMembership.objects.create(user=jane, group=rock)
-
- self.assertQuerysetEqual(
- frank.group_set.all(), [
- "<Group: Rock>",
- "<Group: Roll>",
- ]
- )
-
- self.assertQuerysetEqual(
- roll.user_members.all(), [
- "<User: frank>",
- ]
- )
-
- def test_serialization(self):
- "m2m-through models aren't serialized as m2m fields. Refs #8134"
-
- p = Person.objects.create(name="Bob")
- g = Group.objects.create(name="Roll")
- m = Membership.objects.create(person=p, group=g)
-
- pks = {"p_pk": p.pk, "g_pk": g.pk, "m_pk": m.pk}
-
- out = StringIO()
- management.call_command("dumpdata", "m2m_through_regress", format="json", stdout=out)
- self.assertEqual(out.getvalue().strip(), """[{"pk": %(m_pk)s, "model": "m2m_through_regress.membership", "fields": {"person": %(p_pk)s, "price": 100, "group": %(g_pk)s}}, {"pk": %(p_pk)s, "model": "m2m_through_regress.person", "fields": {"name": "Bob"}}, {"pk": %(g_pk)s, "model": "m2m_through_regress.group", "fields": {"name": "Roll"}}]""" % pks)
-
- out = StringIO()
- management.call_command("dumpdata", "m2m_through_regress", format="xml",
- indent=2, stdout=out)
- self.assertEqual(out.getvalue().strip(), """
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="%(m_pk)s" model="m2m_through_regress.membership">
- <field to="m2m_through_regress.person" name="person" rel="ManyToOneRel">%(p_pk)s</field>
- <field to="m2m_through_regress.group" name="group" rel="ManyToOneRel">%(g_pk)s</field>
- <field type="IntegerField" name="price">100</field>
- </object>
- <object pk="%(p_pk)s" model="m2m_through_regress.person">
- <field type="CharField" name="name">Bob</field>
- </object>
- <object pk="%(g_pk)s" model="m2m_through_regress.group">
- <field type="CharField" name="name">Roll</field>
- </object>
-</django-objects>
- """.strip() % pks)
-
- def test_join_trimming(self):
- "Check that we don't involve too many copies of the intermediate table when doing a join. Refs #8046, #8254"
- bob = Person.objects.create(name="Bob")
- jim = Person.objects.create(name="Jim")
-
- rock = Group.objects.create(name="Rock")
- roll = Group.objects.create(name="Roll")
-
- Membership.objects.create(person=bob, group=rock)
- Membership.objects.create(person=jim, group=rock, price=50)
- Membership.objects.create(person=bob, group=roll, price=50)
-
- self.assertQuerysetEqual(
- rock.members.filter(membership__price=50), [
- "<Person: Jim>",
- ]
- )
-
- self.assertQuerysetEqual(
- bob.group_set.filter(membership__price=50), [
- "<Group: Roll>",
- ]
- )
-
-class ThroughLoadDataTestCase(TestCase):
- fixtures = ["m2m_through"]
-
- def test_sequence_creation(self):
- "Check that sequences on an m2m_through are created for the through model, not a phantom auto-generated m2m table. Refs #11107"
- out = StringIO()
- management.call_command("dumpdata", "m2m_through_regress", format="json", stdout=out)
- self.assertEqual(out.getvalue().strip(), """[{"pk": 1, "model": "m2m_through_regress.usermembership", "fields": {"price": 100, "group": 1, "user": 1}}, {"pk": 1, "model": "m2m_through_regress.person", "fields": {"name": "Guido"}}, {"pk": 1, "model": "m2m_through_regress.group", "fields": {"name": "Python Core Group"}}]""")
diff --git a/parts/django/tests/regressiontests/mail/__init__.py b/parts/django/tests/regressiontests/mail/__init__.py
deleted file mode 100644
index 139597f..0000000
--- a/parts/django/tests/regressiontests/mail/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/parts/django/tests/regressiontests/mail/custombackend.py b/parts/django/tests/regressiontests/mail/custombackend.py
deleted file mode 100644
index 6b0e15a..0000000
--- a/parts/django/tests/regressiontests/mail/custombackend.py
+++ /dev/null
@@ -1,15 +0,0 @@
-"""A custom backend for testing."""
-
-from django.core.mail.backends.base import BaseEmailBackend
-
-
-class EmailBackend(BaseEmailBackend):
-
- def __init__(self, *args, **kwargs):
- super(EmailBackend, self).__init__(*args, **kwargs)
- self.test_outbox = []
-
- def send_messages(self, email_messages):
- # Messages are stored in a instance variable for testing.
- self.test_outbox.extend(email_messages)
- return len(email_messages)
diff --git a/parts/django/tests/regressiontests/mail/models.py b/parts/django/tests/regressiontests/mail/models.py
deleted file mode 100644
index 7ff128f..0000000
--- a/parts/django/tests/regressiontests/mail/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# This file intentionally left blank \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/mail/tests.py b/parts/django/tests/regressiontests/mail/tests.py
deleted file mode 100644
index 877df1c..0000000
--- a/parts/django/tests/regressiontests/mail/tests.py
+++ /dev/null
@@ -1,375 +0,0 @@
-# coding: utf-8
-import email
-import os
-import shutil
-import sys
-import tempfile
-from StringIO import StringIO
-from django.conf import settings
-from django.core import mail
-from django.core.mail import EmailMessage, mail_admins, mail_managers, EmailMultiAlternatives
-from django.core.mail import send_mail, send_mass_mail
-from django.core.mail.backends.base import BaseEmailBackend
-from django.core.mail.backends import console, dummy, locmem, filebased, smtp
-from django.core.mail.message import BadHeaderError
-from django.test import TestCase
-from django.utils.translation import ugettext_lazy
-
-class MailTests(TestCase):
-
- def test_ascii(self):
- email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com'])
- message = email.message()
- self.assertEqual(message['Subject'].encode(), 'Subject')
- self.assertEqual(message.get_payload(), 'Content')
- self.assertEqual(message['From'], 'from@example.com')
- self.assertEqual(message['To'], 'to@example.com')
-
- def test_multiple_recipients(self):
- email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com','other@example.com'])
- message = email.message()
- self.assertEqual(message['Subject'].encode(), 'Subject')
- self.assertEqual(message.get_payload(), 'Content')
- self.assertEqual(message['From'], 'from@example.com')
- self.assertEqual(message['To'], 'to@example.com, other@example.com')
-
- def test_header_injection(self):
- email = EmailMessage('Subject\nInjection Test', 'Content', 'from@example.com', ['to@example.com'])
- self.assertRaises(BadHeaderError, email.message)
- email = EmailMessage(ugettext_lazy('Subject\nInjection Test'), 'Content', 'from@example.com', ['to@example.com'])
- self.assertRaises(BadHeaderError, email.message)
-
- def test_space_continuation(self):
- """
- Test for space continuation character in long (ascii) subject headers (#7747)
- """
- email = EmailMessage('Long subject lines that get wrapped should use a space continuation character to get expected behaviour in Outlook and Thunderbird', 'Content', 'from@example.com', ['to@example.com'])
- message = email.message()
- self.assertEqual(message['Subject'], 'Long subject lines that get wrapped should use a space continuation\n character to get expected behaviour in Outlook and Thunderbird')
-
- def test_message_header_overrides(self):
- """
- Specifying dates or message-ids in the extra headers overrides the
- default values (#9233)
- """
- headers = {"date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
- email = EmailMessage('subject', 'content', 'from@example.com', ['to@example.com'], headers=headers)
- self.assertEqual(email.message().as_string(), 'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: subject\nFrom: from@example.com\nTo: to@example.com\ndate: Fri, 09 Nov 2001 01:08:47 -0000\nMessage-ID: foo\n\ncontent')
-
- def test_empty_admins(self):
- """
- Test that mail_admins/mail_managers doesn't connect to the mail server
- if there are no recipients (#9383)
- """
- old_admins = settings.ADMINS
- old_managers = settings.MANAGERS
-
- settings.ADMINS = settings.MANAGERS = [('nobody','nobody@example.com')]
- mail.outbox = []
- mail_admins('hi', 'there')
- self.assertEqual(len(mail.outbox), 1)
- mail.outbox = []
- mail_managers('hi', 'there')
- self.assertEqual(len(mail.outbox), 1)
-
- settings.ADMINS = settings.MANAGERS = []
- mail.outbox = []
- mail_admins('hi', 'there')
- self.assertEqual(len(mail.outbox), 0)
- mail.outbox = []
- mail_managers('hi', 'there')
- self.assertEqual(len(mail.outbox), 0)
-
- settings.ADMINS = old_admins
- settings.MANAGERS = old_managers
-
- def test_from_header(self):
- """
- Make sure we can manually set the From header (#9214)
- """
- email = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- message = email.message()
- self.assertEqual(message['From'], 'from@example.com')
-
- def test_multiple_message_call(self):
- """
- Regression for #13259 - Make sure that headers are not changed when
- calling EmailMessage.message()
- """
- email = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- message = email.message()
- self.assertEqual(message['From'], 'from@example.com')
- message = email.message()
- self.assertEqual(message['From'], 'from@example.com')
-
- def test_unicode_header(self):
- """
- Regression for #11144 - When a to/from/cc header contains unicode,
- make sure the email addresses are parsed correctly (especially with
- regards to commas)
- """
- email = EmailMessage('Subject', 'Content', 'from@example.com', ['"Firstname Sürname" <to@example.com>','other@example.com'])
- self.assertEqual(email.message()['To'], '=?utf-8?q?Firstname_S=C3=BCrname?= <to@example.com>, other@example.com')
- email = EmailMessage('Subject', 'Content', 'from@example.com', ['"Sürname, Firstname" <to@example.com>','other@example.com'])
- self.assertEqual(email.message()['To'], '=?utf-8?q?S=C3=BCrname=2C_Firstname?= <to@example.com>, other@example.com')
-
- def test_safe_mime_multipart(self):
- """
- Make sure headers can be set with a different encoding than utf-8 in
- SafeMIMEMultipart as well
- """
- headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
- subject, from_email, to = 'hello', 'from@example.com', '"Sürname, Firstname" <to@example.com>'
- text_content = 'This is an important message.'
- html_content = '<p>This is an <strong>important</strong> message.</p>'
- msg = EmailMultiAlternatives('Message from Firstname Sürname', text_content, from_email, [to], headers=headers)
- msg.attach_alternative(html_content, "text/html")
- msg.encoding = 'iso-8859-1'
- self.assertEqual(msg.message()['To'], '=?iso-8859-1?q?S=FCrname=2C_Firstname?= <to@example.com>')
- self.assertEqual(msg.message()['Subject'].encode(), u'=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=')
-
- def test_encoding(self):
- """
- Regression for #12791 - Encode body correctly with other encodings
- than utf-8
- """
- email = EmailMessage('Subject', 'Firstname Sürname is a great guy.', 'from@example.com', ['other@example.com'])
- email.encoding = 'iso-8859-1'
- message = email.message()
- self.assertTrue(message.as_string().startswith('Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: from@example.com\nTo: other@example.com'))
- self.assertEqual(message.get_payload(), 'Firstname S=FCrname is a great guy.')
-
- # Make sure MIME attachments also works correctly with other encodings than utf-8
- text_content = 'Firstname Sürname is a great guy.'
- html_content = '<p>Firstname Sürname is a <strong>great</strong> guy.</p>'
- msg = EmailMultiAlternatives('Subject', text_content, 'from@example.com', ['to@example.com'])
- msg.encoding = 'iso-8859-1'
- msg.attach_alternative(html_content, "text/html")
- self.assertEqual(msg.message().get_payload(0).as_string(), 'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\nFirstname S=FCrname is a great guy.')
- self.assertEqual(msg.message().get_payload(1).as_string(), 'Content-Type: text/html; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\n<p>Firstname S=FCrname is a <strong>great</strong> guy.</p>')
-
- def test_attachments(self):
- """Regression test for #9367"""
- headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
- subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
- text_content = 'This is an important message.'
- html_content = '<p>This is an <strong>important</strong> message.</p>'
- msg = EmailMultiAlternatives(subject, text_content, from_email, [to], headers=headers)
- msg.attach_alternative(html_content, "text/html")
- msg.attach("an attachment.pdf", "%PDF-1.4.%...", mimetype="application/pdf")
- msg_str = msg.message().as_string()
- message = email.message_from_string(msg_str)
- self.assertTrue(message.is_multipart())
- self.assertEqual(message.get_content_type(), 'multipart/mixed')
- self.assertEqual(message.get_default_type(), 'text/plain')
- payload = message.get_payload()
- self.assertEqual(payload[0].get_content_type(), 'multipart/alternative')
- self.assertEqual(payload[1].get_content_type(), 'application/pdf')
-
- def test_arbitrary_stream(self):
- """
- Test that the console backend can be pointed at an arbitrary stream.
- """
- s = StringIO()
- connection = mail.get_connection('django.core.mail.backends.console.EmailBackend', stream=s)
- send_mail('Subject', 'Content', 'from@example.com', ['to@example.com'], connection=connection)
- self.assertTrue(s.getvalue().startswith('Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: from@example.com\nTo: to@example.com\nDate: '))
-
- def test_stdout(self):
- """Make sure that the console backend writes to stdout by default"""
- old_stdout = sys.stdout
- sys.stdout = StringIO()
- connection = console.EmailBackend()
- email = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- connection.send_messages([email])
- self.assertTrue(sys.stdout.getvalue().startswith('Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: from@example.com\nTo: to@example.com\nDate: '))
- sys.stdout = old_stdout
-
- def test_dummy(self):
- """
- Make sure that dummy backends returns correct number of sent messages
- """
- connection = dummy.EmailBackend()
- email = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- self.assertEqual(connection.send_messages([email, email, email]), 3)
-
- def test_locmem(self):
- """
- Make sure that the locmen backend populates the outbox.
- """
- mail.outbox = []
- connection = locmem.EmailBackend()
- email1 = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- email2 = EmailMessage('Subject 2', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- connection.send_messages([email1, email2])
- self.assertEqual(len(mail.outbox), 2)
- self.assertEqual(mail.outbox[0].subject, 'Subject')
- self.assertEqual(mail.outbox[1].subject, 'Subject 2')
-
- # Make sure that multiple locmem connections share mail.outbox
- mail.outbox = []
- connection2 = locmem.EmailBackend()
- email = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- connection.send_messages([email])
- connection2.send_messages([email])
- self.assertEqual(len(mail.outbox), 2)
-
- def test_file_backend(self):
- tmp_dir = tempfile.mkdtemp()
- connection = filebased.EmailBackend(file_path=tmp_dir)
- email1 = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- connection.send_messages([email1])
- self.assertEqual(len(os.listdir(tmp_dir)), 1)
- message = email.message_from_file(open(os.path.join(tmp_dir, os.listdir(tmp_dir)[0])))
- self.assertEqual(message.get_content_type(), 'text/plain')
- self.assertEqual(message.get('subject'), 'Subject')
- self.assertEqual(message.get('from'), 'from@example.com')
- self.assertEqual(message.get('to'), 'to@example.com')
- connection2 = filebased.EmailBackend(file_path=tmp_dir)
- connection2.send_messages([email1])
- self.assertEqual(len(os.listdir(tmp_dir)), 2)
- connection.send_messages([email1])
- self.assertEqual(len(os.listdir(tmp_dir)), 2)
- email1.connection = filebased.EmailBackend(file_path=tmp_dir)
- connection_created = connection.open()
- email1.send()
- self.assertEqual(len(os.listdir(tmp_dir)), 3)
- email1.send()
- self.assertEqual(len(os.listdir(tmp_dir)), 3)
- connection.close()
- shutil.rmtree(tmp_dir)
-
- def test_arbitrary_keyword(self):
- """
- Make sure that get_connection() accepts arbitrary keyword that might be
- used with custom backends.
- """
- c = mail.get_connection(fail_silently=True, foo='bar')
- self.assertTrue(c.fail_silently)
-
- def test_custom_backend(self):
- """Test custom backend defined in this suite."""
- conn = mail.get_connection('regressiontests.mail.custombackend.EmailBackend')
- self.assertTrue(hasattr(conn, 'test_outbox'))
- email = EmailMessage('Subject', 'Content', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- conn.send_messages([email])
- self.assertEqual(len(conn.test_outbox), 1)
-
- def test_backend_arg(self):
- """Test backend argument of mail.get_connection()"""
- self.assertTrue(isinstance(mail.get_connection('django.core.mail.backends.smtp.EmailBackend'), smtp.EmailBackend))
- self.assertTrue(isinstance(mail.get_connection('django.core.mail.backends.locmem.EmailBackend'), locmem.EmailBackend))
- self.assertTrue(isinstance(mail.get_connection('django.core.mail.backends.dummy.EmailBackend'), dummy.EmailBackend))
- self.assertTrue(isinstance(mail.get_connection('django.core.mail.backends.console.EmailBackend'), console.EmailBackend))
- tmp_dir = tempfile.mkdtemp()
- self.assertTrue(isinstance(mail.get_connection('django.core.mail.backends.filebased.EmailBackend', file_path=tmp_dir), filebased.EmailBackend))
- shutil.rmtree(tmp_dir)
- self.assertTrue(isinstance(mail.get_connection(), locmem.EmailBackend))
-
- def test_connection_arg(self):
- """Test connection argument to send_mail(), et. al."""
- connection = mail.get_connection('django.core.mail.backends.locmem.EmailBackend')
-
- mail.outbox = []
- send_mail('Subject', 'Content', 'from@example.com', ['to@example.com'], connection=connection)
- self.assertEqual(len(mail.outbox), 1)
- message = mail.outbox[0]
- self.assertEqual(message.subject, 'Subject')
- self.assertEqual(message.from_email, 'from@example.com')
- self.assertEqual(message.to, ['to@example.com'])
-
- mail.outbox = []
- send_mass_mail([
- ('Subject1', 'Content1', 'from1@example.com', ['to1@example.com']),
- ('Subject2', 'Content2', 'from2@example.com', ['to2@example.com'])
- ], connection=connection)
- self.assertEqual(len(mail.outbox), 2)
- message = mail.outbox[0]
- self.assertEqual(message.subject, 'Subject1')
- self.assertEqual(message.from_email, 'from1@example.com')
- self.assertEqual(message.to, ['to1@example.com'])
- message = mail.outbox[1]
- self.assertEqual(message.subject, 'Subject2')
- self.assertEqual(message.from_email, 'from2@example.com')
- self.assertEqual(message.to, ['to2@example.com'])
-
- old_admins = settings.ADMINS
- old_managers = settings.MANAGERS
- settings.ADMINS = settings.MANAGERS = [('nobody','nobody@example.com')]
-
- mail.outbox = []
- mail_admins('Subject', 'Content', connection=connection)
- self.assertEqual(len(mail.outbox), 1)
- message = mail.outbox[0]
- self.assertEqual(message.subject, '[Django] Subject')
- self.assertEqual(message.from_email, 'root@localhost')
- self.assertEqual(message.to, ['nobody@example.com'])
-
- mail.outbox = []
- mail_managers('Subject', 'Content', connection=connection)
- self.assertEqual(len(mail.outbox), 1)
- message = mail.outbox[0]
- self.assertEqual(message.subject, '[Django] Subject')
- self.assertEqual(message.from_email, 'root@localhost')
- self.assertEqual(message.to, ['nobody@example.com'])
-
- settings.ADMINS = old_admins
- settings.MANAGERS = old_managers
-
- def test_mail_prefix(self):
- """Test prefix argument in manager/admin mail."""
- # Regression for #13494.
- old_admins = settings.ADMINS
- old_managers = settings.MANAGERS
- settings.ADMINS = settings.MANAGERS = [('nobody','nobody@example.com')]
-
- mail_managers(ugettext_lazy('Subject'), 'Content')
- self.assertEqual(len(mail.outbox), 1)
- message = mail.outbox[0]
- self.assertEqual(message.subject, '[Django] Subject')
-
- mail.outbox = []
- mail_admins(ugettext_lazy('Subject'), 'Content')
- self.assertEqual(len(mail.outbox), 1)
- message = mail.outbox[0]
- self.assertEqual(message.subject, '[Django] Subject')
-
- settings.ADMINS = old_admins
- settings.MANAGERS = old_managers
-
- def test_idn_validation(self):
- """Test internationalized email adresses"""
- # Regression for #14301.
- mail.outbox = []
- from_email = u'fröm@öäü.com'
- to_email = u'tö@öäü.com'
- connection = mail.get_connection('django.core.mail.backends.locmem.EmailBackend')
- send_mail('Subject', 'Content', from_email, [to_email], connection=connection)
- self.assertEqual(len(mail.outbox), 1)
- message = mail.outbox[0]
- self.assertEqual(message.subject, 'Subject')
- self.assertEqual(message.from_email, from_email)
- self.assertEqual(message.to, [to_email])
- self.assertTrue(message.message().as_string().startswith('Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: =?utf-8?b?ZnLDtm1Aw7bDpMO8LmNvbQ==?=\nTo: =?utf-8?b?dMO2QMO2w6TDvC5jb20=?='))
-
- def test_idn_smtp_send(self):
- import smtplib
- smtplib.SMTP = MockSMTP
- from_email = u'fröm@öäü.com'
- to_email = u'tö@öäü.com'
- connection = mail.get_connection('django.core.mail.backends.smtp.EmailBackend')
- self.assertTrue(send_mail('Subject', 'Content', from_email, [to_email], connection=connection))
-
-class MockSMTP(object):
- def __init__(self, host='', port=0, local_hostname=None,
- timeout=1):
- pass
-
- def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
- rcpt_options=[]):
- for addr in to_addrs:
- str(addr.split('@', 1)[-1])
- return {}
-
- def quit(self):
- return 0
diff --git a/parts/django/tests/regressiontests/makemessages/__init__.py b/parts/django/tests/regressiontests/makemessages/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/makemessages/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/makemessages/extraction.py b/parts/django/tests/regressiontests/makemessages/extraction.py
deleted file mode 100644
index 6df6e90..0000000
--- a/parts/django/tests/regressiontests/makemessages/extraction.py
+++ /dev/null
@@ -1,109 +0,0 @@
-import os
-import re
-import shutil
-from django.test import TestCase
-from django.core import management
-
-LOCALE='de'
-
-class ExtractorTests(TestCase):
-
- PO_FILE='locale/%s/LC_MESSAGES/django.po' % LOCALE
-
- def setUp(self):
- self._cwd = os.getcwd()
- self.test_dir = os.path.abspath(os.path.dirname(__file__))
-
- def _rmrf(self, dname):
- if os.path.commonprefix([self.test_dir, os.path.abspath(dname)]) != self.test_dir:
- return
- shutil.rmtree(dname)
-
- def tearDown(self):
- os.chdir(self.test_dir)
- try:
- self._rmrf('locale/%s' % LOCALE)
- except OSError:
- pass
- os.chdir(self._cwd)
-
- def assertMsgId(self, msgid, s):
- return self.assert_(re.search('^msgid "%s"' % msgid, s, re.MULTILINE))
-
- def assertNotMsgId(self, msgid, s):
- return self.assert_(not re.search('^msgid "%s"' % msgid, s, re.MULTILINE))
-
-
-class TemplateExtractorTests(ExtractorTests):
-
- def test_templatize(self):
- os.chdir(self.test_dir)
- management.call_command('makemessages', locale=LOCALE, verbosity=0)
- self.assert_(os.path.exists(self.PO_FILE))
- po_contents = open(self.PO_FILE, 'r').read()
- self.assertMsgId('I think that 100%% is more that 50%% of anything.', po_contents)
- self.assertMsgId('I think that 100%% is more that 50%% of %\(obj\)s.', po_contents)
-
-
-class JavascriptExtractorTests(ExtractorTests):
-
- PO_FILE='locale/%s/LC_MESSAGES/djangojs.po' % LOCALE
-
- def test_javascript_literals(self):
- os.chdir(self.test_dir)
- management.call_command('makemessages', domain='djangojs', locale=LOCALE, verbosity=0)
- self.assert_(os.path.exists(self.PO_FILE))
- po_contents = open(self.PO_FILE, 'r').read()
- self.assertMsgId('This literal should be included.', po_contents)
- self.assertMsgId('This one as well.', po_contents)
-
-
-class IgnoredExtractorTests(ExtractorTests):
-
- def test_ignore_option(self):
- os.chdir(self.test_dir)
- management.call_command('makemessages', locale=LOCALE, verbosity=0, ignore_patterns=['ignore_dir/*'])
- self.assert_(os.path.exists(self.PO_FILE))
- po_contents = open(self.PO_FILE, 'r').read()
- self.assertMsgId('This literal should be included.', po_contents)
- self.assertNotMsgId('This should be ignored.', po_contents)
-
-
-class SymlinkExtractorTests(ExtractorTests):
-
- def setUp(self):
- self._cwd = os.getcwd()
- self.test_dir = os.path.abspath(os.path.dirname(__file__))
- self.symlinked_dir = os.path.join(self.test_dir, 'templates_symlinked')
-
- def tearDown(self):
- super(SymlinkExtractorTests, self).tearDown()
- os.chdir(self.test_dir)
- try:
- os.remove(self.symlinked_dir)
- except OSError:
- pass
- os.chdir(self._cwd)
-
- def test_symlink(self):
- if hasattr(os, 'symlink'):
- if os.path.exists(self.symlinked_dir):
- self.assert_(os.path.islink(self.symlinked_dir))
- else:
- os.symlink(os.path.join(self.test_dir, 'templates'), self.symlinked_dir)
- os.chdir(self.test_dir)
- management.call_command('makemessages', locale=LOCALE, verbosity=0, symlinks=True)
- self.assert_(os.path.exists(self.PO_FILE))
- po_contents = open(self.PO_FILE, 'r').read()
- self.assertMsgId('This literal should be included.', po_contents)
- self.assert_('templates_symlinked/test.html' in po_contents)
-
-
-class CopyPluralFormsExtractorTests(ExtractorTests):
-
- def test_copy_plural_forms(self):
- os.chdir(self.test_dir)
- management.call_command('makemessages', locale=LOCALE, verbosity=0)
- self.assert_(os.path.exists(self.PO_FILE))
- po_contents = open(self.PO_FILE, 'r').read()
- self.assert_('Plural-Forms: nplurals=2; plural=(n != 1)' in po_contents)
diff --git a/parts/django/tests/regressiontests/makemessages/ignore_dir/ignored.html b/parts/django/tests/regressiontests/makemessages/ignore_dir/ignored.html
deleted file mode 100644
index 6a29678..0000000
--- a/parts/django/tests/regressiontests/makemessages/ignore_dir/ignored.html
+++ /dev/null
@@ -1,2 +0,0 @@
-{% load i18n %}
-{% trans "This should be ignored." %}
diff --git a/parts/django/tests/regressiontests/makemessages/javascript.js b/parts/django/tests/regressiontests/makemessages/javascript.js
deleted file mode 100644
index bc5ec87..0000000
--- a/parts/django/tests/regressiontests/makemessages/javascript.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// '
-gettext('This literal should be included.')
-// '
-gettext('This one as well.')
diff --git a/parts/django/tests/regressiontests/makemessages/locale/dummy b/parts/django/tests/regressiontests/makemessages/locale/dummy
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/makemessages/locale/dummy
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/makemessages/models.py b/parts/django/tests/regressiontests/makemessages/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/makemessages/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/makemessages/templates/test.html b/parts/django/tests/regressiontests/makemessages/templates/test.html
deleted file mode 100644
index 96438e1..0000000
--- a/parts/django/tests/regressiontests/makemessages/templates/test.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{% load i18n %}
-{% trans "This literal should be included." %}
-{% blocktrans %}I think that 100% is more that 50% of anything.{% endblocktrans %}
-{% blocktrans with 'txt' as obj %}I think that 100% is more that 50% of {{ obj }}.{% endblocktrans %} \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/makemessages/tests.py b/parts/django/tests/regressiontests/makemessages/tests.py
deleted file mode 100644
index 5798e67..0000000
--- a/parts/django/tests/regressiontests/makemessages/tests.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import os
-import re
-from subprocess import Popen, PIPE
-
-def find_command(cmd, path=None, pathext=None):
- if path is None:
- path = os.environ.get('PATH', []).split(os.pathsep)
- if isinstance(path, basestring):
- path = [path]
- # check if there are funny path extensions for executables, e.g. Windows
- if pathext is None:
- pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD').split(os.pathsep)
- # don't use extensions if the command ends with one of them
- for ext in pathext:
- if cmd.endswith(ext):
- pathext = ['']
- break
- # check if we find the command on PATH
- for p in path:
- f = os.path.join(p, cmd)
- if os.path.isfile(f):
- return f
- for ext in pathext:
- fext = f + ext
- if os.path.isfile(fext):
- return fext
- return None
-
-# checks if it can find xgettext on the PATH and
-# imports the extraction tests if yes
-xgettext_cmd = find_command('xgettext')
-if xgettext_cmd:
- p = Popen('%s --version' % xgettext_cmd, shell=True, stdout=PIPE, stderr=PIPE, close_fds=os.name != 'nt', universal_newlines=True)
- output = p.communicate()[0]
- match = re.search(r'(?P<major>\d+)\.(?P<minor>\d+)', output)
- if match:
- xversion = (int(match.group('major')), int(match.group('minor')))
- if xversion >= (0, 15):
- from extraction import *
- del p
diff --git a/parts/django/tests/regressiontests/managers_regress/__init__.py b/parts/django/tests/regressiontests/managers_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/managers_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/managers_regress/models.py b/parts/django/tests/regressiontests/managers_regress/models.py
deleted file mode 100644
index 1e1b1c9..0000000
--- a/parts/django/tests/regressiontests/managers_regress/models.py
+++ /dev/null
@@ -1,100 +0,0 @@
-"""
-Various edge-cases for model managers.
-"""
-
-from django.db import models
-
-class OnlyFred(models.Manager):
- def get_query_set(self):
- return super(OnlyFred, self).get_query_set().filter(name='fred')
-
-class OnlyBarney(models.Manager):
- def get_query_set(self):
- return super(OnlyBarney, self).get_query_set().filter(name='barney')
-
-class Value42(models.Manager):
- def get_query_set(self):
- return super(Value42, self).get_query_set().filter(value=42)
-
-class AbstractBase1(models.Model):
- name = models.CharField(max_length=50)
-
- class Meta:
- abstract = True
-
- # Custom managers
- manager1 = OnlyFred()
- manager2 = OnlyBarney()
- objects = models.Manager()
-
-class AbstractBase2(models.Model):
- value = models.IntegerField()
-
- class Meta:
- abstract = True
-
- # Custom manager
- restricted = Value42()
-
-# No custom manager on this class to make sure the default case doesn't break.
-class AbstractBase3(models.Model):
- comment = models.CharField(max_length=50)
-
- class Meta:
- abstract = True
-
-class Parent(models.Model):
- name = models.CharField(max_length=50)
-
- manager = OnlyFred()
-
- def __unicode__(self):
- return self.name
-
-# Managers from base classes are inherited and, if no manager is specified
-# *and* the parent has a manager specified, the first one (in the MRO) will
-# become the default.
-class Child1(AbstractBase1):
- data = models.CharField(max_length=25)
-
- def __unicode__(self):
- return self.data
-
-class Child2(AbstractBase1, AbstractBase2):
- data = models.CharField(max_length=25)
-
- def __unicode__(self):
- return self.data
-
-class Child3(AbstractBase1, AbstractBase3):
- data = models.CharField(max_length=25)
-
- def __unicode__(self):
- return self.data
-
-class Child4(AbstractBase1):
- data = models.CharField(max_length=25)
-
- # Should be the default manager, although the parent managers are
- # inherited.
- default = models.Manager()
-
- def __unicode__(self):
- return self.data
-
-class Child5(AbstractBase3):
- name = models.CharField(max_length=25)
-
- default = OnlyFred()
- objects = models.Manager()
-
- def __unicode__(self):
- return self.name
-
-# Will inherit managers from AbstractBase1, but not Child4.
-class Child6(Child4):
- value = models.IntegerField()
-
-# Will not inherit default manager from parent.
-class Child7(Parent):
- pass
diff --git a/parts/django/tests/regressiontests/managers_regress/tests.py b/parts/django/tests/regressiontests/managers_regress/tests.py
deleted file mode 100644
index 9a6db61..0000000
--- a/parts/django/tests/regressiontests/managers_regress/tests.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from django.test import TestCase
-
-from models import Child1, Child2, Child3, Child4, Child5, Child6, Child7
-
-
-class ManagersRegressionTests(TestCase):
- def test_managers(self):
- a1 = Child1.objects.create(name='fred', data='a1')
- a2 = Child1.objects.create(name='barney', data='a2')
- b1 = Child2.objects.create(name='fred', data='b1', value=1)
- b2 = Child2.objects.create(name='barney', data='b2', value=42)
- c1 = Child3.objects.create(name='fred', data='c1', comment='yes')
- c2 = Child3.objects.create(name='barney', data='c2', comment='no')
- d1 = Child4.objects.create(name='fred', data='d1')
- d2 = Child4.objects.create(name='barney', data='d2')
- e1 = Child5.objects.create(name='fred', comment='yes')
- e2 = Child5.objects.create(name='barney', comment='no')
- f1 = Child6.objects.create(name='fred', data='f1', value=42)
- f2 = Child6.objects.create(name='barney', data='f2', value=42)
- g1 = Child7.objects.create(name='fred')
- g2 = Child7.objects.create(name='barney')
-
- self.assertQuerysetEqual(Child1.manager1.all(), ["<Child1: a1>"])
- self.assertQuerysetEqual(Child1.manager2.all(), ["<Child1: a2>"])
- self.assertQuerysetEqual(Child1._default_manager.all(), ["<Child1: a1>"])
-
- self.assertQuerysetEqual(Child2._default_manager.all(), ["<Child2: b1>"])
- self.assertQuerysetEqual(Child2.restricted.all(), ["<Child2: b2>"])
-
- self.assertQuerysetEqual(Child3._default_manager.all(), ["<Child3: c1>"])
- self.assertQuerysetEqual(Child3.manager1.all(), ["<Child3: c1>"])
- self.assertQuerysetEqual(Child3.manager2.all(), ["<Child3: c2>"])
-
- # Since Child6 inherits from Child4, the corresponding rows from f1 and
- # f2 also appear here. This is the expected result.
- self.assertQuerysetEqual(Child4._default_manager.order_by('data'), [
- "<Child4: d1>",
- "<Child4: d2>",
- "<Child4: f1>",
- "<Child4: f2>"
- ]
- )
- self.assertQuerysetEqual(Child4.manager1.all(), [
- "<Child4: d1>",
- "<Child4: f1>"
- ]
- )
- self.assertQuerysetEqual(Child5._default_manager.all(), ["<Child5: fred>"])
- self.assertQuerysetEqual(Child6._default_manager.all(), ["<Child6: f1>"])
- self.assertQuerysetEqual(Child7._default_manager.order_by('name'), [
- "<Child7: barney>",
- "<Child7: fred>"
- ]
- )
diff --git a/parts/django/tests/regressiontests/many_to_one_regress/__init__.py b/parts/django/tests/regressiontests/many_to_one_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/many_to_one_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/many_to_one_regress/models.py b/parts/django/tests/regressiontests/many_to_one_regress/models.py
deleted file mode 100644
index 53348a7..0000000
--- a/parts/django/tests/regressiontests/many_to_one_regress/models.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""
-Regression tests for a few ForeignKey bugs.
-"""
-
-from django.db import models
-
-# If ticket #1578 ever slips back in, these models will not be able to be
-# created (the field names being lower-cased versions of their opposite
-# classes is important here).
-
-class First(models.Model):
- second = models.IntegerField()
-
-class Second(models.Model):
- first = models.ForeignKey(First, related_name = 'the_first')
-
-# Protect against repetition of #1839, #2415 and #2536.
-class Third(models.Model):
- name = models.CharField(max_length=20)
- third = models.ForeignKey('self', null=True, related_name='child_set')
-
-class Parent(models.Model):
- name = models.CharField(max_length=20)
- bestchild = models.ForeignKey('Child', null=True, related_name='favored_by')
-
-class Child(models.Model):
- name = models.CharField(max_length=20)
- parent = models.ForeignKey(Parent)
-
-
-# Multiple paths to the same model (#7110, #7125)
-class Category(models.Model):
- name = models.CharField(max_length=20)
-
- def __unicode__(self):
- return self.name
-
-class Record(models.Model):
- category = models.ForeignKey(Category)
-
-class Relation(models.Model):
- left = models.ForeignKey(Record, related_name='left_set')
- right = models.ForeignKey(Record, related_name='right_set')
-
- def __unicode__(self):
- return u"%s - %s" % (self.left.category.name, self.right.category.name)
diff --git a/parts/django/tests/regressiontests/many_to_one_regress/tests.py b/parts/django/tests/regressiontests/many_to_one_regress/tests.py
deleted file mode 100644
index 7d2a49c..0000000
--- a/parts/django/tests/regressiontests/many_to_one_regress/tests.py
+++ /dev/null
@@ -1,105 +0,0 @@
-from django.db import models
-from django.test import TestCase
-
-from models import First, Second, Third, Parent, Child, Category, Record, Relation
-
-class ManyToOneRegressionTests(TestCase):
- def test_object_creation(self):
- Third.objects.create(id='3', name='An example')
- parent = Parent(name='fred')
- parent.save()
- Child.objects.create(name='bam-bam', parent=parent)
-
- def test_fk_assignment_and_related_object_cache(self):
- # Tests of ForeignKey assignment and the related-object cache (see #6886).
-
- p = Parent.objects.create(name="Parent")
- c = Child.objects.create(name="Child", parent=p)
-
- # Look up the object again so that we get a "fresh" object.
- c = Child.objects.get(name="Child")
- p = c.parent
-
- # Accessing the related object again returns the exactly same object.
- self.assertTrue(c.parent is p)
-
- # But if we kill the cache, we get a new object.
- del c._parent_cache
- self.assertFalse(c.parent is p)
-
- # Assigning a new object results in that object getting cached immediately.
- p2 = Parent.objects.create(name="Parent 2")
- c.parent = p2
- self.assertTrue(c.parent is p2)
-
- # Assigning None succeeds if field is null=True.
- p.bestchild = None
- self.assertTrue(p.bestchild is None)
-
- # bestchild should still be None after saving.
- p.save()
- self.assertTrue(p.bestchild is None)
-
- # bestchild should still be None after fetching the object again.
- p = Parent.objects.get(name="Parent")
- self.assertTrue(p.bestchild is None)
-
- # Assigning None fails: Child.parent is null=False.
- self.assertRaises(ValueError, setattr, c, "parent", None)
-
- # You also can't assign an object of the wrong type here
- self.assertRaises(ValueError, setattr, c, "parent", First(id=1, second=1))
-
- # Nor can you explicitly assign None to Child.parent during object
- # creation (regression for #9649).
- self.assertRaises(ValueError, Child, name='xyzzy', parent=None)
- self.assertRaises(ValueError, Child.objects.create, name='xyzzy', parent=None)
-
- # Creation using keyword argument should cache the related object.
- p = Parent.objects.get(name="Parent")
- c = Child(parent=p)
- self.assertTrue(c.parent is p)
-
- # Creation using keyword argument and unsaved related instance (#8070).
- p = Parent()
- c = Child(parent=p)
- self.assertTrue(c.parent is p)
-
- # Creation using attname keyword argument and an id will cause the
- # related object to be fetched.
- p = Parent.objects.get(name="Parent")
- c = Child(parent_id=p.id)
- self.assertFalse(c.parent is p)
- self.assertEqual(c.parent, p)
-
- def test_multiple_foreignkeys(self):
- # Test of multiple ForeignKeys to the same model (bug #7125).
- c1 = Category.objects.create(name='First')
- c2 = Category.objects.create(name='Second')
- c3 = Category.objects.create(name='Third')
- r1 = Record.objects.create(category=c1)
- r2 = Record.objects.create(category=c1)
- r3 = Record.objects.create(category=c2)
- r4 = Record.objects.create(category=c2)
- r5 = Record.objects.create(category=c3)
- r = Relation.objects.create(left=r1, right=r2)
- r = Relation.objects.create(left=r3, right=r4)
- r = Relation.objects.create(left=r1, right=r3)
- r = Relation.objects.create(left=r5, right=r2)
- r = Relation.objects.create(left=r3, right=r2)
-
- q1 = Relation.objects.filter(left__category__name__in=['First'], right__category__name__in=['Second'])
- self.assertQuerysetEqual(q1, ["<Relation: First - Second>"])
-
- q2 = Category.objects.filter(record__left_set__right__category__name='Second').order_by('name')
- self.assertQuerysetEqual(q2, ["<Category: First>", "<Category: Second>"])
-
- p = Parent.objects.create(name="Parent")
- c = Child.objects.create(name="Child", parent=p)
- self.assertRaises(ValueError, Child.objects.create, name="Grandchild", parent=c)
-
- def test_fk_instantiation_outside_model(self):
- # Regression for #12190 -- Should be able to instantiate a FK outside
- # of a model, and interrogate its related field.
- cat = models.ForeignKey(Category)
- self.assertEqual('id', cat.rel.get_related_field().name)
diff --git a/parts/django/tests/regressiontests/max_lengths/__init__.py b/parts/django/tests/regressiontests/max_lengths/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/parts/django/tests/regressiontests/max_lengths/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/parts/django/tests/regressiontests/max_lengths/models.py b/parts/django/tests/regressiontests/max_lengths/models.py
deleted file mode 100644
index 78eb30c..0000000
--- a/parts/django/tests/regressiontests/max_lengths/models.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.db import models
-
-class PersonWithDefaultMaxLengths(models.Model):
- email = models.EmailField()
- vcard = models.FileField(upload_to='/tmp')
- homepage = models.URLField()
- avatar = models.FilePathField()
-
-class PersonWithCustomMaxLengths(models.Model):
- email = models.EmailField(max_length=250)
- vcard = models.FileField(upload_to='/tmp', max_length=250)
- homepage = models.URLField(max_length=250)
- avatar = models.FilePathField(max_length=250)
diff --git a/parts/django/tests/regressiontests/max_lengths/tests.py b/parts/django/tests/regressiontests/max_lengths/tests.py
deleted file mode 100644
index 0fb2f30..0000000
--- a/parts/django/tests/regressiontests/max_lengths/tests.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from unittest import TestCase
-from django.db import DatabaseError
-from regressiontests.max_lengths.models import PersonWithDefaultMaxLengths, PersonWithCustomMaxLengths
-
-class MaxLengthArgumentsTests(TestCase):
-
- def verify_max_length(self, model,field,length):
- self.assertEquals(model._meta.get_field(field).max_length,length)
-
- def test_default_max_lengths(self):
- self.verify_max_length(PersonWithDefaultMaxLengths, 'email', 75)
- self.verify_max_length(PersonWithDefaultMaxLengths, 'vcard', 100)
- self.verify_max_length(PersonWithDefaultMaxLengths, 'homepage', 200)
- self.verify_max_length(PersonWithDefaultMaxLengths, 'avatar', 100)
-
- def test_custom_max_lengths(self):
- self.verify_max_length(PersonWithCustomMaxLengths, 'email', 250)
- self.verify_max_length(PersonWithCustomMaxLengths, 'vcard', 250)
- self.verify_max_length(PersonWithCustomMaxLengths, 'homepage', 250)
- self.verify_max_length(PersonWithCustomMaxLengths, 'avatar', 250)
-
-class MaxLengthORMTests(TestCase):
-
- def test_custom_max_lengths(self):
- args = {
- "email": "someone@example.com",
- "vcard": "vcard",
- "homepage": "http://example.com/",
- "avatar": "me.jpg"
- }
-
- for field in ("email", "vcard", "homepage", "avatar"):
- new_args = args.copy()
- new_args[field] = "X" * 250 # a value longer than any of the default fields could hold.
- p = PersonWithCustomMaxLengths.objects.create(**new_args)
- self.assertEqual(getattr(p, field), ("X" * 250)) \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/middleware/__init__.py b/parts/django/tests/regressiontests/middleware/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/middleware/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/middleware/extra_urls.py b/parts/django/tests/regressiontests/middleware/extra_urls.py
deleted file mode 100644
index b2a8902..0000000
--- a/parts/django/tests/regressiontests/middleware/extra_urls.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.conf.urls.defaults import patterns
-
-urlpatterns = patterns('',
- (r'^middleware/customurlconf/noslash$', 'view'),
- (r'^middleware/customurlconf/slash/$', 'view'),
- (r'^middleware/customurlconf/needsquoting#/$', 'view'),
-)
diff --git a/parts/django/tests/regressiontests/middleware/models.py b/parts/django/tests/regressiontests/middleware/models.py
deleted file mode 100644
index 71abcc5..0000000
--- a/parts/django/tests/regressiontests/middleware/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# models.py file for tests to run.
diff --git a/parts/django/tests/regressiontests/middleware/tests.py b/parts/django/tests/regressiontests/middleware/tests.py
deleted file mode 100644
index b77a2a3..0000000
--- a/parts/django/tests/regressiontests/middleware/tests.py
+++ /dev/null
@@ -1,249 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.conf import settings
-from django.http import HttpRequest
-from django.middleware.common import CommonMiddleware
-from django.test import TestCase
-
-
-class CommonMiddlewareTest(TestCase):
- def setUp(self):
- self.slash = settings.APPEND_SLASH
- self.www = settings.PREPEND_WWW
-
- def tearDown(self):
- settings.APPEND_SLASH = self.slash
- settings.PREPEND_WWW = self.www
-
- def _get_request(self, path):
- request = HttpRequest()
- request.META = {
- 'SERVER_NAME': 'testserver',
- 'SERVER_PORT': 80,
- }
- request.path = request.path_info = "/middleware/%s" % path
- return request
-
- def test_append_slash_have_slash(self):
- """
- Tests that URLs with slashes go unmolested.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('slash/')
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_slashless_resource(self):
- """
- Tests that matches to explicit slashless URLs go unmolested.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('noslash')
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_slashless_unknown(self):
- """
- Tests that APPEND_SLASH doesn't redirect to unknown resources.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('unknown')
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_redirect(self):
- """
- Tests that APPEND_SLASH redirects slashless URLs to a valid pattern.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('slash')
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(r['Location'], 'http://testserver/middleware/slash/')
-
- def test_append_slash_no_redirect_on_POST_in_DEBUG(self):
- """
- Tests that while in debug mode, an exception is raised with a warning
- when a failed attempt is made to POST to an URL which would normally be
- redirected to a slashed version.
- """
- settings.APPEND_SLASH = True
- settings.DEBUG = True
- request = self._get_request('slash')
- request.method = 'POST'
- self.assertRaises(
- RuntimeError,
- CommonMiddleware().process_request,
- request)
- try:
- CommonMiddleware().process_request(request)
- except RuntimeError, e:
- self.assertTrue('end in a slash' in str(e))
- settings.DEBUG = False
-
- def test_append_slash_disabled(self):
- """
- Tests disabling append slash functionality.
- """
- settings.APPEND_SLASH = False
- request = self._get_request('slash')
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_quoted(self):
- """
- Tests that URLs which require quoting are redirected to their slash
- version ok.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('needsquoting#')
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(
- r['Location'],
- 'http://testserver/middleware/needsquoting%23/')
-
- def test_prepend_www(self):
- settings.PREPEND_WWW = True
- settings.APPEND_SLASH = False
- request = self._get_request('path/')
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(
- r['Location'],
- 'http://www.testserver/middleware/path/')
-
- def test_prepend_www_append_slash_have_slash(self):
- settings.PREPEND_WWW = True
- settings.APPEND_SLASH = True
- request = self._get_request('slash/')
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(r['Location'],
- 'http://www.testserver/middleware/slash/')
-
- def test_prepend_www_append_slash_slashless(self):
- settings.PREPEND_WWW = True
- settings.APPEND_SLASH = True
- request = self._get_request('slash')
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(r['Location'],
- 'http://www.testserver/middleware/slash/')
-
-
- # The following tests examine expected behavior given a custom urlconf that
- # overrides the default one through the request object.
-
- def test_append_slash_have_slash_custom_urlconf(self):
- """
- Tests that URLs with slashes go unmolested.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('customurlconf/slash/')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_slashless_resource_custom_urlconf(self):
- """
- Tests that matches to explicit slashless URLs go unmolested.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('customurlconf/noslash')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_slashless_unknown_custom_urlconf(self):
- """
- Tests that APPEND_SLASH doesn't redirect to unknown resources.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('customurlconf/unknown')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_redirect_custom_urlconf(self):
- """
- Tests that APPEND_SLASH redirects slashless URLs to a valid pattern.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('customurlconf/slash')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- r = CommonMiddleware().process_request(request)
- self.assertFalse(r is None,
- "CommonMiddlware failed to return APPEND_SLASH redirect using request.urlconf")
- self.assertEquals(r.status_code, 301)
- self.assertEquals(r['Location'], 'http://testserver/middleware/customurlconf/slash/')
-
- def test_append_slash_no_redirect_on_POST_in_DEBUG_custom_urlconf(self):
- """
- Tests that while in debug mode, an exception is raised with a warning
- when a failed attempt is made to POST to an URL which would normally be
- redirected to a slashed version.
- """
- settings.APPEND_SLASH = True
- settings.DEBUG = True
- request = self._get_request('customurlconf/slash')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- request.method = 'POST'
- self.assertRaises(
- RuntimeError,
- CommonMiddleware().process_request,
- request)
- try:
- CommonMiddleware().process_request(request)
- except RuntimeError, e:
- self.assertTrue('end in a slash' in str(e))
- settings.DEBUG = False
-
- def test_append_slash_disabled_custom_urlconf(self):
- """
- Tests disabling append slash functionality.
- """
- settings.APPEND_SLASH = False
- request = self._get_request('customurlconf/slash')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- self.assertEquals(CommonMiddleware().process_request(request), None)
-
- def test_append_slash_quoted_custom_urlconf(self):
- """
- Tests that URLs which require quoting are redirected to their slash
- version ok.
- """
- settings.APPEND_SLASH = True
- request = self._get_request('customurlconf/needsquoting#')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- r = CommonMiddleware().process_request(request)
- self.assertFalse(r is None,
- "CommonMiddlware failed to return APPEND_SLASH redirect using request.urlconf")
- self.assertEquals(r.status_code, 301)
- self.assertEquals(
- r['Location'],
- 'http://testserver/middleware/customurlconf/needsquoting%23/')
-
- def test_prepend_www_custom_urlconf(self):
- settings.PREPEND_WWW = True
- settings.APPEND_SLASH = False
- request = self._get_request('customurlconf/path/')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(
- r['Location'],
- 'http://www.testserver/middleware/customurlconf/path/')
-
- def test_prepend_www_append_slash_have_slash_custom_urlconf(self):
- settings.PREPEND_WWW = True
- settings.APPEND_SLASH = True
- request = self._get_request('customurlconf/slash/')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(r['Location'],
- 'http://www.testserver/middleware/customurlconf/slash/')
-
- def test_prepend_www_append_slash_slashless_custom_urlconf(self):
- settings.PREPEND_WWW = True
- settings.APPEND_SLASH = True
- request = self._get_request('customurlconf/slash')
- request.urlconf = 'regressiontests.middleware.extra_urls'
- r = CommonMiddleware().process_request(request)
- self.assertEquals(r.status_code, 301)
- self.assertEquals(r['Location'],
- 'http://www.testserver/middleware/customurlconf/slash/')
diff --git a/parts/django/tests/regressiontests/middleware/urls.py b/parts/django/tests/regressiontests/middleware/urls.py
deleted file mode 100644
index 88a4b37..0000000
--- a/parts/django/tests/regressiontests/middleware/urls.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.conf.urls.defaults import patterns
-
-urlpatterns = patterns('',
- (r'^noslash$', 'view'),
- (r'^slash/$', 'view'),
- (r'^needsquoting#/$', 'view'),
-)
diff --git a/parts/django/tests/regressiontests/middleware_exceptions/__init__.py b/parts/django/tests/regressiontests/middleware_exceptions/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/middleware_exceptions/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/middleware_exceptions/models.py b/parts/django/tests/regressiontests/middleware_exceptions/models.py
deleted file mode 100644
index 137941f..0000000
--- a/parts/django/tests/regressiontests/middleware_exceptions/models.py
+++ /dev/null
@@ -1 +0,0 @@
-from django.db import models
diff --git a/parts/django/tests/regressiontests/middleware_exceptions/tests.py b/parts/django/tests/regressiontests/middleware_exceptions/tests.py
deleted file mode 100644
index 3d9c5f6..0000000
--- a/parts/django/tests/regressiontests/middleware_exceptions/tests.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import sys
-
-from django.test import TestCase
-from django.core.signals import got_request_exception
-
-class TestException(Exception):
- pass
-
-class TestMiddleware(object):
- def process_request(self, request):
- raise TestException('Test Exception')
-
-class MiddlewareExceptionTest(TestCase):
- def setUp(self):
- self.exceptions = []
- got_request_exception.connect(self._on_request_exception)
- self.client.handler.load_middleware()
-
- def tearDown(self):
- got_request_exception.disconnect(self._on_request_exception)
- self.exceptions = []
-
- def _on_request_exception(self, sender, request, **kwargs):
- self.exceptions.append(sys.exc_info())
-
- def test_process_request(self):
- self.client.handler._request_middleware.insert(0, TestMiddleware().process_request)
- try:
- response = self.client.get('/')
- except TestException, e:
- # Test client indefinitely re-raises any exceptions being raised
- # during request handling. Hence actual testing that exception was
- # properly handled is done by relying on got_request_exception
- # signal being sent.
- pass
- except Exception, e:
- self.fail("Unexpected exception: %s" % e)
- self.assertEquals(len(self.exceptions), 1)
- exception, value, tb = self.exceptions[0]
- self.assertEquals(value.args, ('Test Exception', ))
diff --git a/parts/django/tests/regressiontests/middleware_exceptions/urls.py b/parts/django/tests/regressiontests/middleware_exceptions/urls.py
deleted file mode 100644
index 63f3ba1..0000000
--- a/parts/django/tests/regressiontests/middleware_exceptions/urls.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# coding: utf-8
-from django.conf.urls.defaults import *
-
-import views
-
-urlpatterns = patterns('',
- (r'^$', views.index),
-)
diff --git a/parts/django/tests/regressiontests/middleware_exceptions/views.py b/parts/django/tests/regressiontests/middleware_exceptions/views.py
deleted file mode 100644
index e2d597d..0000000
--- a/parts/django/tests/regressiontests/middleware_exceptions/views.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from django import http
-
-def index(request):
- return http.HttpResponse('')
diff --git a/parts/django/tests/regressiontests/model_fields/4x8.png b/parts/django/tests/regressiontests/model_fields/4x8.png
deleted file mode 100644
index ffce444..0000000
--- a/parts/django/tests/regressiontests/model_fields/4x8.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/model_fields/8x4.png b/parts/django/tests/regressiontests/model_fields/8x4.png
deleted file mode 100644
index 60e6d69..0000000
--- a/parts/django/tests/regressiontests/model_fields/8x4.png
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/model_fields/__init__.py b/parts/django/tests/regressiontests/model_fields/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/model_fields/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/model_fields/imagefield.py b/parts/django/tests/regressiontests/model_fields/imagefield.py
deleted file mode 100644
index dd79e7a..0000000
--- a/parts/django/tests/regressiontests/model_fields/imagefield.py
+++ /dev/null
@@ -1,420 +0,0 @@
-import os
-import shutil
-
-from django.core.files import File
-from django.core.files.base import ContentFile
-from django.core.files.images import ImageFile
-from django.test import TestCase
-
-from models import Image, Person, PersonWithHeight, PersonWithHeightAndWidth, \
- PersonDimensionsFirst, PersonTwoImages, TestImageFieldFile
-
-
-# If PIL available, do these tests.
-if Image:
-
- from models import temp_storage_dir
-
-
- class ImageFieldTestMixin(object):
- """
- Mixin class to provide common functionality to ImageField test classes.
- """
-
- # Person model to use for tests.
- PersonModel = PersonWithHeightAndWidth
- # File class to use for file instances.
- File = ImageFile
-
- def setUp(self):
- """
- Creates a pristine temp directory (or deletes and recreates if it
- already exists) that the model uses as its storage directory.
-
- Sets up two ImageFile instances for use in tests.
- """
- if os.path.exists(temp_storage_dir):
- shutil.rmtree(temp_storage_dir)
- os.mkdir(temp_storage_dir)
-
- file_path1 = os.path.join(os.path.dirname(__file__), "4x8.png")
- self.file1 = self.File(open(file_path1, 'rb'))
-
- file_path2 = os.path.join(os.path.dirname(__file__), "8x4.png")
- self.file2 = self.File(open(file_path2, 'rb'))
-
- def tearDown(self):
- """
- Removes temp directory and all its contents.
- """
- shutil.rmtree(temp_storage_dir)
-
- def check_dimensions(self, instance, width, height,
- field_name='mugshot'):
- """
- Asserts that the given width and height values match both the
- field's height and width attributes and the height and width fields
- (if defined) the image field is caching to.
-
- Note, this method will check for dimension fields named by adding
- "_width" or "_height" to the name of the ImageField. So, the
- models used in these tests must have their fields named
- accordingly.
-
- By default, we check the field named "mugshot", but this can be
- specified by passing the field_name parameter.
- """
- field = getattr(instance, field_name)
- # Check height/width attributes of field.
- if width is None and height is None:
- self.assertRaises(ValueError, getattr, field, 'width')
- self.assertRaises(ValueError, getattr, field, 'height')
- else:
- self.assertEqual(field.width, width)
- self.assertEqual(field.height, height)
-
- # Check height/width fields of model, if defined.
- width_field_name = field_name + '_width'
- if hasattr(instance, width_field_name):
- self.assertEqual(getattr(instance, width_field_name), width)
- height_field_name = field_name + '_height'
- if hasattr(instance, height_field_name):
- self.assertEqual(getattr(instance, height_field_name), height)
-
-
- class ImageFieldTests(ImageFieldTestMixin, TestCase):
- """
- Tests for ImageField that don't need to be run with each of the
- different test model classes.
- """
-
- def test_equal_notequal_hash(self):
- """
- Bug #9786: Ensure '==' and '!=' work correctly.
- Bug #9508: make sure hash() works as expected (equal items must
- hash to the same value).
- """
- # Create two Persons with different mugshots.
- p1 = self.PersonModel(name="Joe")
- p1.mugshot.save("mug", self.file1)
- p2 = self.PersonModel(name="Bob")
- p2.mugshot.save("mug", self.file2)
- self.assertEqual(p1.mugshot == p2.mugshot, False)
- self.assertEqual(p1.mugshot != p2.mugshot, True)
-
- # Test again with an instance fetched from the db.
- p1_db = self.PersonModel.objects.get(name="Joe")
- self.assertEqual(p1_db.mugshot == p2.mugshot, False)
- self.assertEqual(p1_db.mugshot != p2.mugshot, True)
-
- # Instance from db should match the local instance.
- self.assertEqual(p1_db.mugshot == p1.mugshot, True)
- self.assertEqual(hash(p1_db.mugshot), hash(p1.mugshot))
- self.assertEqual(p1_db.mugshot != p1.mugshot, False)
-
- def test_instantiate_missing(self):
- """
- If the underlying file is unavailable, still create instantiate the
- object without error.
- """
- p = self.PersonModel(name="Joan")
- p.mugshot.save("shot", self.file1)
- p = self.PersonModel.objects.get(name="Joan")
- path = p.mugshot.path
- shutil.move(path, path + '.moved')
- p2 = self.PersonModel.objects.get(name="Joan")
-
- def test_delete_when_missing(self):
- """
- Bug #8175: correctly delete an object where the file no longer
- exists on the file system.
- """
- p = self.PersonModel(name="Fred")
- p.mugshot.save("shot", self.file1)
- os.remove(p.mugshot.path)
- p.delete()
-
- def test_size_method(self):
- """
- Bug #8534: FileField.size should not leave the file open.
- """
- p = self.PersonModel(name="Joan")
- p.mugshot.save("shot", self.file1)
-
- # Get a "clean" model instance
- p = self.PersonModel.objects.get(name="Joan")
- # It won't have an opened file.
- self.assertEqual(p.mugshot.closed, True)
-
- # After asking for the size, the file should still be closed.
- _ = p.mugshot.size
- self.assertEqual(p.mugshot.closed, True)
-
- def test_pickle(self):
- """
- Tests that ImageField can be pickled, unpickled, and that the
- image of the unpickled version is the same as the original.
- """
- import pickle
-
- p = Person(name="Joe")
- p.mugshot.save("mug", self.file1)
- dump = pickle.dumps(p)
-
- p2 = Person(name="Bob")
- p2.mugshot = self.file1
-
- loaded_p = pickle.loads(dump)
- self.assertEqual(p.mugshot, loaded_p.mugshot)
-
-
- class ImageFieldTwoDimensionsTests(ImageFieldTestMixin, TestCase):
- """
- Tests behavior of an ImageField and its dimensions fields.
- """
-
- def test_constructor(self):
- """
- Tests assigning an image field through the model's constructor.
- """
- p = self.PersonModel(name='Joe', mugshot=self.file1)
- self.check_dimensions(p, 4, 8)
- p.save()
- self.check_dimensions(p, 4, 8)
-
- def test_image_after_constructor(self):
- """
- Tests behavior when image is not passed in constructor.
- """
- p = self.PersonModel(name='Joe')
- # TestImageField value will default to being an instance of its
- # attr_class, a TestImageFieldFile, with name == None, which will
- # cause it to evaluate as False.
- self.assertEqual(isinstance(p.mugshot, TestImageFieldFile), True)
- self.assertEqual(bool(p.mugshot), False)
-
- # Test setting a fresh created model instance.
- p = self.PersonModel(name='Joe')
- p.mugshot = self.file1
- self.check_dimensions(p, 4, 8)
-
- def test_create(self):
- """
- Tests assigning an image in Manager.create().
- """
- p = self.PersonModel.objects.create(name='Joe', mugshot=self.file1)
- self.check_dimensions(p, 4, 8)
-
- def test_default_value(self):
- """
- Tests that the default value for an ImageField is an instance of
- the field's attr_class (TestImageFieldFile in this case) with no
- name (name set to None).
- """
- p = self.PersonModel()
- self.assertEqual(isinstance(p.mugshot, TestImageFieldFile), True)
- self.assertEqual(bool(p.mugshot), False)
-
- def test_assignment_to_None(self):
- """
- Tests that assigning ImageField to None clears dimensions.
- """
- p = self.PersonModel(name='Joe', mugshot=self.file1)
- self.check_dimensions(p, 4, 8)
-
- # If image assigned to None, dimension fields should be cleared.
- p.mugshot = None
- self.check_dimensions(p, None, None)
-
- p.mugshot = self.file2
- self.check_dimensions(p, 8, 4)
-
- def test_field_save_and_delete_methods(self):
- """
- Tests assignment using the field's save method and deletion using
- the field's delete method.
- """
- p = self.PersonModel(name='Joe')
- p.mugshot.save("mug", self.file1)
- self.check_dimensions(p, 4, 8)
-
- # A new file should update dimensions.
- p.mugshot.save("mug", self.file2)
- self.check_dimensions(p, 8, 4)
-
- # Field and dimensions should be cleared after a delete.
- p.mugshot.delete(save=False)
- self.assertEqual(p.mugshot, None)
- self.check_dimensions(p, None, None)
-
- def test_dimensions(self):
- """
- Checks that dimensions are updated correctly in various situations.
- """
- p = self.PersonModel(name='Joe')
-
- # Dimensions should get set if file is saved.
- p.mugshot.save("mug", self.file1)
- self.check_dimensions(p, 4, 8)
-
- # Test dimensions after fetching from database.
- p = self.PersonModel.objects.get(name='Joe')
- # Bug 11084: Dimensions should not get recalculated if file is
- # coming from the database. We test this by checking if the file
- # was opened.
- self.assertEqual(p.mugshot.was_opened, False)
- self.check_dimensions(p, 4, 8)
- # After checking dimensions on the image field, the file will have
- # opened.
- self.assertEqual(p.mugshot.was_opened, True)
- # Dimensions should now be cached, and if we reset was_opened and
- # check dimensions again, the file should not have opened.
- p.mugshot.was_opened = False
- self.check_dimensions(p, 4, 8)
- self.assertEqual(p.mugshot.was_opened, False)
-
- # If we assign a new image to the instance, the dimensions should
- # update.
- p.mugshot = self.file2
- self.check_dimensions(p, 8, 4)
- # Dimensions were recalculated, and hence file should have opened.
- self.assertEqual(p.mugshot.was_opened, True)
-
-
- class ImageFieldNoDimensionsTests(ImageFieldTwoDimensionsTests):
- """
- Tests behavior of an ImageField with no dimension fields.
- """
-
- PersonModel = Person
-
-
- class ImageFieldOneDimensionTests(ImageFieldTwoDimensionsTests):
- """
- Tests behavior of an ImageField with one dimensions field.
- """
-
- PersonModel = PersonWithHeight
-
-
- class ImageFieldDimensionsFirstTests(ImageFieldTwoDimensionsTests):
- """
- Tests behavior of an ImageField where the dimensions fields are
- defined before the ImageField.
- """
-
- PersonModel = PersonDimensionsFirst
-
-
- class ImageFieldUsingFileTests(ImageFieldTwoDimensionsTests):
- """
- Tests behavior of an ImageField when assigning it a File instance
- rather than an ImageFile instance.
- """
-
- PersonModel = PersonDimensionsFirst
- File = File
-
-
- class TwoImageFieldTests(ImageFieldTestMixin, TestCase):
- """
- Tests a model with two ImageFields.
- """
-
- PersonModel = PersonTwoImages
-
- def test_constructor(self):
- p = self.PersonModel(mugshot=self.file1, headshot=self.file2)
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
- p.save()
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
-
- def test_create(self):
- p = self.PersonModel.objects.create(mugshot=self.file1,
- headshot=self.file2)
- self.check_dimensions(p, 4, 8)
- self.check_dimensions(p, 8, 4, 'headshot')
-
- def test_assignment(self):
- p = self.PersonModel()
- self.check_dimensions(p, None, None, 'mugshot')
- self.check_dimensions(p, None, None, 'headshot')
-
- p.mugshot = self.file1
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, None, None, 'headshot')
- p.headshot = self.file2
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
-
- # Clear the ImageFields one at a time.
- p.mugshot = None
- self.check_dimensions(p, None, None, 'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
- p.headshot = None
- self.check_dimensions(p, None, None, 'mugshot')
- self.check_dimensions(p, None, None, 'headshot')
-
- def test_field_save_and_delete_methods(self):
- p = self.PersonModel(name='Joe')
- p.mugshot.save("mug", self.file1)
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, None, None, 'headshot')
- p.headshot.save("head", self.file2)
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
-
- # We can use save=True when deleting the image field with null=True
- # dimension fields and the other field has an image.
- p.headshot.delete(save=True)
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, None, None, 'headshot')
- p.mugshot.delete(save=False)
- self.check_dimensions(p, None, None, 'mugshot')
- self.check_dimensions(p, None, None, 'headshot')
-
- def test_dimensions(self):
- """
- Checks that dimensions are updated correctly in various situations.
- """
- p = self.PersonModel(name='Joe')
-
- # Dimensions should get set for the saved file.
- p.mugshot.save("mug", self.file1)
- p.headshot.save("head", self.file2)
- self.check_dimensions(p, 4, 8, 'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
-
- # Test dimensions after fetching from database.
- p = self.PersonModel.objects.get(name='Joe')
- # Bug 11084: Dimensions should not get recalculated if file is
- # coming from the database. We test this by checking if the file
- # was opened.
- self.assertEqual(p.mugshot.was_opened, False)
- self.assertEqual(p.headshot.was_opened, False)
- self.check_dimensions(p, 4, 8,'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
- # After checking dimensions on the image fields, the files will
- # have been opened.
- self.assertEqual(p.mugshot.was_opened, True)
- self.assertEqual(p.headshot.was_opened, True)
- # Dimensions should now be cached, and if we reset was_opened and
- # check dimensions again, the file should not have opened.
- p.mugshot.was_opened = False
- p.headshot.was_opened = False
- self.check_dimensions(p, 4, 8,'mugshot')
- self.check_dimensions(p, 8, 4, 'headshot')
- self.assertEqual(p.mugshot.was_opened, False)
- self.assertEqual(p.headshot.was_opened, False)
-
- # If we assign a new image to the instance, the dimensions should
- # update.
- p.mugshot = self.file2
- p.headshot = self.file1
- self.check_dimensions(p, 8, 4, 'mugshot')
- self.check_dimensions(p, 4, 8, 'headshot')
- # Dimensions were recalculated, and hence file should have opened.
- self.assertEqual(p.mugshot.was_opened, True)
- self.assertEqual(p.headshot.was_opened, True)
diff --git a/parts/django/tests/regressiontests/model_fields/models.py b/parts/django/tests/regressiontests/model_fields/models.py
deleted file mode 100644
index 45cd223..0000000
--- a/parts/django/tests/regressiontests/model_fields/models.py
+++ /dev/null
@@ -1,154 +0,0 @@
-import os
-import tempfile
-
-# Try to import PIL in either of the two ways it can end up installed.
-# Checking for the existence of Image is enough for CPython, but for PyPy,
-# you need to check for the underlying modules.
-
-try:
- from PIL import Image, _imaging
-except ImportError:
- try:
- import Image, _imaging
- except ImportError:
- Image = None
-
-from django.core.files.storage import FileSystemStorage
-from django.db import models
-from django.db.models.fields.files import ImageFieldFile, ImageField
-
-
-class Foo(models.Model):
- a = models.CharField(max_length=10)
- d = models.DecimalField(max_digits=5, decimal_places=3)
-
-def get_foo():
- return Foo.objects.get(id=1)
-
-class Bar(models.Model):
- b = models.CharField(max_length=10)
- a = models.ForeignKey(Foo, default=get_foo)
-
-class Whiz(models.Model):
- CHOICES = (
- ('Group 1', (
- (1,'First'),
- (2,'Second'),
- )
- ),
- ('Group 2', (
- (3,'Third'),
- (4,'Fourth'),
- )
- ),
- (0,'Other'),
- )
- c = models.IntegerField(choices=CHOICES, null=True)
-
-class BigD(models.Model):
- d = models.DecimalField(max_digits=38, decimal_places=30)
-
-class BigS(models.Model):
- s = models.SlugField(max_length=255)
-
-class BigInt(models.Model):
- value = models.BigIntegerField()
- null_value = models.BigIntegerField(null = True, blank = True)
-
-class Post(models.Model):
- title = models.CharField(max_length=100)
- body = models.TextField()
-
-class NullBooleanModel(models.Model):
- nbfield = models.NullBooleanField()
-
-class BooleanModel(models.Model):
- bfield = models.BooleanField()
- string = models.CharField(max_length=10, default='abc')
-
-###############################################################################
-# ImageField
-
-# If PIL available, do these tests.
-if Image:
- class TestImageFieldFile(ImageFieldFile):
- """
- Custom Field File class that records whether or not the underlying file
- was opened.
- """
- def __init__(self, *args, **kwargs):
- self.was_opened = False
- super(TestImageFieldFile, self).__init__(*args,**kwargs)
- def open(self):
- self.was_opened = True
- super(TestImageFieldFile, self).open()
-
- class TestImageField(ImageField):
- attr_class = TestImageFieldFile
-
- # Set up a temp directory for file storage.
- temp_storage_dir = tempfile.mkdtemp()
- temp_storage = FileSystemStorage(temp_storage_dir)
- temp_upload_to_dir = os.path.join(temp_storage.location, 'tests')
-
- class Person(models.Model):
- """
- Model that defines an ImageField with no dimension fields.
- """
- name = models.CharField(max_length=50)
- mugshot = TestImageField(storage=temp_storage, upload_to='tests')
-
- class PersonWithHeight(models.Model):
- """
- Model that defines an ImageField with only one dimension field.
- """
- name = models.CharField(max_length=50)
- mugshot = TestImageField(storage=temp_storage, upload_to='tests',
- height_field='mugshot_height')
- mugshot_height = models.PositiveSmallIntegerField()
-
- class PersonWithHeightAndWidth(models.Model):
- """
- Model that defines height and width fields after the ImageField.
- """
- name = models.CharField(max_length=50)
- mugshot = TestImageField(storage=temp_storage, upload_to='tests',
- height_field='mugshot_height',
- width_field='mugshot_width')
- mugshot_height = models.PositiveSmallIntegerField()
- mugshot_width = models.PositiveSmallIntegerField()
-
- class PersonDimensionsFirst(models.Model):
- """
- Model that defines height and width fields before the ImageField.
- """
- name = models.CharField(max_length=50)
- mugshot_height = models.PositiveSmallIntegerField()
- mugshot_width = models.PositiveSmallIntegerField()
- mugshot = TestImageField(storage=temp_storage, upload_to='tests',
- height_field='mugshot_height',
- width_field='mugshot_width')
-
- class PersonTwoImages(models.Model):
- """
- Model that:
- * Defines two ImageFields
- * Defines the height/width fields before the ImageFields
- * Has a nullalble ImageField
- """
- name = models.CharField(max_length=50)
- mugshot_height = models.PositiveSmallIntegerField()
- mugshot_width = models.PositiveSmallIntegerField()
- mugshot = TestImageField(storage=temp_storage, upload_to='tests',
- height_field='mugshot_height',
- width_field='mugshot_width')
- headshot_height = models.PositiveSmallIntegerField(
- blank=True, null=True)
- headshot_width = models.PositiveSmallIntegerField(
- blank=True, null=True)
- headshot = TestImageField(blank=True, null=True,
- storage=temp_storage, upload_to='tests',
- height_field='headshot_height',
- width_field='headshot_width')
-
-###############################################################################
diff --git a/parts/django/tests/regressiontests/model_fields/tests.py b/parts/django/tests/regressiontests/model_fields/tests.py
deleted file mode 100644
index 72a7d4d..0000000
--- a/parts/django/tests/regressiontests/model_fields/tests.py
+++ /dev/null
@@ -1,313 +0,0 @@
-import datetime
-import unittest
-from decimal import Decimal
-
-import django.test
-from django import forms
-from django.db import models
-from django.core.exceptions import ValidationError
-
-from models import Foo, Bar, Whiz, BigD, BigS, Image, BigInt, Post, NullBooleanModel, BooleanModel
-
-# If PIL available, do these tests.
-if Image:
- from imagefield import \
- ImageFieldTests, \
- ImageFieldTwoDimensionsTests, \
- ImageFieldNoDimensionsTests, \
- ImageFieldOneDimensionTests, \
- ImageFieldDimensionsFirstTests, \
- ImageFieldUsingFileTests, \
- TwoImageFieldTests
-
-
-class BasicFieldTests(django.test.TestCase):
- def test_show_hidden_initial(self):
- """
- Regression test for #12913. Make sure fields with choices respect
- show_hidden_initial as a kwarg to models.Field.formfield()
- """
- choices = [(0, 0), (1, 1)]
- model_field = models.Field(choices=choices)
- form_field = model_field.formfield(show_hidden_initial=True)
- self.assertTrue(form_field.show_hidden_initial)
-
- form_field = model_field.formfield(show_hidden_initial=False)
- self.assertFalse(form_field.show_hidden_initial)
-
- def test_nullbooleanfield_blank(self):
- """
- Regression test for #13071: NullBooleanField should not throw
- a validation error when given a value of None.
-
- """
- nullboolean = NullBooleanModel(nbfield=None)
- try:
- nullboolean.full_clean()
- except ValidationError, e:
- self.fail("NullBooleanField failed validation with value of None: %s" % e.messages)
-
-class DecimalFieldTests(django.test.TestCase):
- def test_to_python(self):
- f = models.DecimalField(max_digits=4, decimal_places=2)
- self.assertEqual(f.to_python(3), Decimal("3"))
- self.assertEqual(f.to_python("3.14"), Decimal("3.14"))
- self.assertRaises(ValidationError, f.to_python, "abc")
-
- def test_default(self):
- f = models.DecimalField(default=Decimal("0.00"))
- self.assertEqual(f.get_default(), Decimal("0.00"))
-
- def test_format(self):
- f = models.DecimalField(max_digits=5, decimal_places=1)
- self.assertEqual(f._format(f.to_python(2)), u'2.0')
- self.assertEqual(f._format(f.to_python('2.6')), u'2.6')
- self.assertEqual(f._format(None), None)
-
- def test_get_db_prep_lookup(self):
- from django.db import connection
- f = models.DecimalField(max_digits=5, decimal_places=1)
- self.assertEqual(f.get_db_prep_lookup('exact', None, connection=connection), [None])
-
- def test_filter_with_strings(self):
- """
- We should be able to filter decimal fields using strings (#8023)
- """
- Foo.objects.create(id=1, a='abc', d=Decimal("12.34"))
- self.assertEqual(list(Foo.objects.filter(d=u'1.23')), [])
-
- def test_save_without_float_conversion(self):
- """
- Ensure decimals don't go through a corrupting float conversion during
- save (#5079).
- """
- bd = BigD(d="12.9")
- bd.save()
- bd = BigD.objects.get(pk=bd.pk)
- self.assertEqual(bd.d, Decimal("12.9"))
-
- def test_lookup_really_big_value(self):
- """
- Ensure that really big values can be used in a filter statement, even
- with older Python versions.
- """
- # This should not crash. That counts as a win for our purposes.
- Foo.objects.filter(d__gte=100000000000)
-
-class ForeignKeyTests(django.test.TestCase):
- def test_callable_default(self):
- """Test the use of a lazy callable for ForeignKey.default"""
- a = Foo.objects.create(id=1, a='abc', d=Decimal("12.34"))
- b = Bar.objects.create(b="bcd")
- self.assertEqual(b.a, a)
-
-class DateTimeFieldTests(unittest.TestCase):
- def test_datetimefield_to_python_usecs(self):
- """DateTimeField.to_python should support usecs"""
- f = models.DateTimeField()
- self.assertEqual(f.to_python('2001-01-02 03:04:05.000006'),
- datetime.datetime(2001, 1, 2, 3, 4, 5, 6))
- self.assertEqual(f.to_python('2001-01-02 03:04:05.999999'),
- datetime.datetime(2001, 1, 2, 3, 4, 5, 999999))
-
- def test_timefield_to_python_usecs(self):
- """TimeField.to_python should support usecs"""
- f = models.TimeField()
- self.assertEqual(f.to_python('01:02:03.000004'),
- datetime.time(1, 2, 3, 4))
- self.assertEqual(f.to_python('01:02:03.999999'),
- datetime.time(1, 2, 3, 999999))
-
-class BooleanFieldTests(unittest.TestCase):
- def _test_get_db_prep_lookup(self, f):
- from django.db import connection
- self.assertEqual(f.get_db_prep_lookup('exact', True, connection=connection), [True])
- self.assertEqual(f.get_db_prep_lookup('exact', '1', connection=connection), [True])
- self.assertEqual(f.get_db_prep_lookup('exact', 1, connection=connection), [True])
- self.assertEqual(f.get_db_prep_lookup('exact', False, connection=connection), [False])
- self.assertEqual(f.get_db_prep_lookup('exact', '0', connection=connection), [False])
- self.assertEqual(f.get_db_prep_lookup('exact', 0, connection=connection), [False])
- self.assertEqual(f.get_db_prep_lookup('exact', None, connection=connection), [None])
-
- def _test_to_python(self, f):
- self.assertTrue(f.to_python(1) is True)
- self.assertTrue(f.to_python(0) is False)
-
- def test_booleanfield_get_db_prep_lookup(self):
- self._test_get_db_prep_lookup(models.BooleanField())
-
- def test_nullbooleanfield_get_db_prep_lookup(self):
- self._test_get_db_prep_lookup(models.NullBooleanField())
-
- def test_booleanfield_to_python(self):
- self._test_to_python(models.BooleanField())
-
- def test_nullbooleanfield_to_python(self):
- self._test_to_python(models.NullBooleanField())
-
- def test_booleanfield_choices_blank(self):
- """
- Test that BooleanField with choices and defaults doesn't generate a
- formfield with the blank option (#9640, #10549).
- """
- choices = [(1, u'Si'), (2, 'No')]
- f = models.BooleanField(choices=choices, default=1, null=True)
- self.assertEqual(f.formfield().choices, [('', '---------')] + choices)
-
- f = models.BooleanField(choices=choices, default=1, null=False)
- self.assertEqual(f.formfield().choices, choices)
-
- def test_return_type(self):
- b = BooleanModel()
- b.bfield = True
- b.save()
- b2 = BooleanModel.objects.get(pk=b.pk)
- self.assertTrue(isinstance(b2.bfield, bool))
- self.assertEqual(b2.bfield, True)
-
- b3 = BooleanModel()
- b3.bfield = False
- b3.save()
- b4 = BooleanModel.objects.get(pk=b3.pk)
- self.assertTrue(isinstance(b4.bfield, bool))
- self.assertEqual(b4.bfield, False)
-
- b = NullBooleanModel()
- b.nbfield = True
- b.save()
- b2 = NullBooleanModel.objects.get(pk=b.pk)
- self.assertTrue(isinstance(b2.nbfield, bool))
- self.assertEqual(b2.nbfield, True)
-
- b3 = NullBooleanModel()
- b3.nbfield = False
- b3.save()
- b4 = NullBooleanModel.objects.get(pk=b3.pk)
- self.assertTrue(isinstance(b4.nbfield, bool))
- self.assertEqual(b4.nbfield, False)
-
- # http://code.djangoproject.com/ticket/13293
- # Verify that when an extra clause exists, the boolean
- # conversions are applied with an offset
- b5 = BooleanModel.objects.all().extra(
- select={'string_length': 'LENGTH(string)'})[0]
- self.assertFalse(isinstance(b5.pk, bool))
-
-class ChoicesTests(django.test.TestCase):
- def test_choices_and_field_display(self):
- """
- Check that get_choices and get_flatchoices interact with
- get_FIELD_display to return the expected values (#7913).
- """
- self.assertEqual(Whiz(c=1).get_c_display(), 'First') # A nested value
- self.assertEqual(Whiz(c=0).get_c_display(), 'Other') # A top level value
- self.assertEqual(Whiz(c=9).get_c_display(), 9) # Invalid value
- self.assertEqual(Whiz(c=None).get_c_display(), None) # Blank value
- self.assertEqual(Whiz(c='').get_c_display(), '') # Empty value
-
-class SlugFieldTests(django.test.TestCase):
- def test_slugfield_max_length(self):
- """
- Make sure SlugField honors max_length (#9706)
- """
- bs = BigS.objects.create(s = 'slug'*50)
- bs = BigS.objects.get(pk=bs.pk)
- self.assertEqual(bs.s, 'slug'*50)
-
-
-class ValidationTest(django.test.TestCase):
- def test_charfield_raises_error_on_empty_string(self):
- f = models.CharField()
- self.assertRaises(ValidationError, f.clean, "", None)
-
- def test_charfield_cleans_empty_string_when_blank_true(self):
- f = models.CharField(blank=True)
- self.assertEqual('', f.clean('', None))
-
- def test_integerfield_cleans_valid_string(self):
- f = models.IntegerField()
- self.assertEqual(2, f.clean('2', None))
-
- def test_integerfield_raises_error_on_invalid_intput(self):
- f = models.IntegerField()
- self.assertRaises(ValidationError, f.clean, "a", None)
-
- def test_charfield_with_choices_cleans_valid_choice(self):
- f = models.CharField(max_length=1, choices=[('a','A'), ('b','B')])
- self.assertEqual('a', f.clean('a', None))
-
- def test_charfield_with_choices_raises_error_on_invalid_choice(self):
- f = models.CharField(choices=[('a','A'), ('b','B')])
- self.assertRaises(ValidationError, f.clean, "not a", None)
-
- def test_choices_validation_supports_named_groups(self):
- f = models.IntegerField(choices=(('group',((10,'A'),(20,'B'))),(30,'C')))
- self.assertEqual(10, f.clean(10, None))
-
- def test_nullable_integerfield_raises_error_with_blank_false(self):
- f = models.IntegerField(null=True, blank=False)
- self.assertRaises(ValidationError, f.clean, None, None)
-
- def test_nullable_integerfield_cleans_none_on_null_and_blank_true(self):
- f = models.IntegerField(null=True, blank=True)
- self.assertEqual(None, f.clean(None, None))
-
- def test_integerfield_raises_error_on_empty_input(self):
- f = models.IntegerField(null=False)
- self.assertRaises(ValidationError, f.clean, None, None)
- self.assertRaises(ValidationError, f.clean, '', None)
-
- def test_charfield_raises_error_on_empty_input(self):
- f = models.CharField(null=False)
- self.assertRaises(ValidationError, f.clean, None, None)
-
- def test_datefield_cleans_date(self):
- f = models.DateField()
- self.assertEqual(datetime.date(2008, 10, 10), f.clean('2008-10-10', None))
-
- def test_boolean_field_doesnt_accept_empty_input(self):
- f = models.BooleanField()
- self.assertRaises(ValidationError, f.clean, None, None)
-
-
-class BigIntegerFieldTests(django.test.TestCase):
- def test_limits(self):
- # Ensure that values that are right at the limits can be saved
- # and then retrieved without corruption.
- maxval = 9223372036854775807
- minval = -maxval - 1
- BigInt.objects.create(value=maxval)
- qs = BigInt.objects.filter(value__gte=maxval)
- self.assertEqual(qs.count(), 1)
- self.assertEqual(qs[0].value, maxval)
- BigInt.objects.create(value=minval)
- qs = BigInt.objects.filter(value__lte=minval)
- self.assertEqual(qs.count(), 1)
- self.assertEqual(qs[0].value, minval)
-
- def test_types(self):
- b = BigInt(value = 0)
- self.assertTrue(isinstance(b.value, (int, long)))
- b.save()
- self.assertTrue(isinstance(b.value, (int, long)))
- b = BigInt.objects.all()[0]
- self.assertTrue(isinstance(b.value, (int, long)))
-
- def test_coercing(self):
- BigInt.objects.create(value ='10')
- b = BigInt.objects.get(value = '10')
- self.assertEqual(b.value, 10)
-
-class TypeCoercionTests(django.test.TestCase):
- """
- Test that database lookups can accept the wrong types and convert
- them with no error: especially on Postgres 8.3+ which does not do
- automatic casting at the DB level. See #10015.
-
- """
- def test_lookup_integer_in_charfield(self):
- self.assertEquals(Post.objects.filter(title=9).count(), 0)
-
- def test_lookup_integer_in_textfield(self):
- self.assertEquals(Post.objects.filter(body=24).count(), 0)
-
diff --git a/parts/django/tests/regressiontests/model_forms_regress/__init__.py b/parts/django/tests/regressiontests/model_forms_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/model_forms_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/model_forms_regress/models.py b/parts/django/tests/regressiontests/model_forms_regress/models.py
deleted file mode 100644
index 4f9811a..0000000
--- a/parts/django/tests/regressiontests/model_forms_regress/models.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import os
-from django.db import models
-from django.core.exceptions import ValidationError
-
-
-class Person(models.Model):
- name = models.CharField(max_length=100)
-
-class Triple(models.Model):
- left = models.IntegerField()
- middle = models.IntegerField()
- right = models.IntegerField()
-
- class Meta:
- unique_together = (('left', 'middle'), (u'middle', u'right'))
-
-class FilePathModel(models.Model):
- path = models.FilePathField(path=os.path.dirname(__file__), match=".*\.py$", blank=True)
-
-class Publication(models.Model):
- title = models.CharField(max_length=30)
- date_published = models.DateField()
-
- def __unicode__(self):
- return self.title
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- publications = models.ManyToManyField(Publication)
-
- def __unicode__(self):
- return self.headline
-
-class CustomFileField(models.FileField):
- def save_form_data(self, instance, data):
- been_here = getattr(self, 'been_saved', False)
- assert not been_here, "save_form_data called more than once"
- setattr(self, 'been_saved', True)
-
-class CustomFF(models.Model):
- f = CustomFileField(upload_to='unused', blank=True)
-
-class RealPerson(models.Model):
- name = models.CharField(max_length=100)
-
- def clean(self):
- if self.name.lower() == 'anonymous':
- raise ValidationError("Please specify a real name.")
-
-class Author(models.Model):
- publication = models.OneToOneField(Publication, null=True, blank=True)
- full_name = models.CharField(max_length=255)
-
-class Author1(models.Model):
- publication = models.OneToOneField(Publication, null=False)
- full_name = models.CharField(max_length=255)
-
-class Homepage(models.Model):
- url = models.URLField(verify_exists=False)
diff --git a/parts/django/tests/regressiontests/model_forms_regress/tests.py b/parts/django/tests/regressiontests/model_forms_regress/tests.py
deleted file mode 100644
index 1d0d6ed..0000000
--- a/parts/django/tests/regressiontests/model_forms_regress/tests.py
+++ /dev/null
@@ -1,311 +0,0 @@
-from datetime import date
-
-from django import db, forms
-from django.conf import settings
-from django.forms.models import modelform_factory, ModelChoiceField
-from django.test import TestCase
-
-from models import Person, RealPerson, Triple, FilePathModel, Article, \
- Publication, CustomFF, Author, Author1, Homepage
-
-
-class ModelMultipleChoiceFieldTests(TestCase):
-
- def setUp(self):
- self.old_debug = settings.DEBUG
- settings.DEBUG = True
-
- def tearDown(self):
- settings.DEBUG = self.old_debug
-
- def test_model_multiple_choice_number_of_queries(self):
- """
- Test that ModelMultipleChoiceField does O(1) queries instead of
- O(n) (#10156).
- """
- for i in range(30):
- Person.objects.create(name="Person %s" % i)
-
- db.reset_queries()
- f = forms.ModelMultipleChoiceField(queryset=Person.objects.all())
- selected = f.clean([1, 3, 5, 7, 9])
- self.assertEquals(len(db.connection.queries), 1)
-
- def test_model_multiple_choice_run_validators(self):
- """
- Test that ModelMultipleChoiceField run given validators (#14144).
- """
- for i in range(30):
- Person.objects.create(name="Person %s" % i)
-
- self._validator_run = False
- def my_validator(value):
- self._validator_run = True
-
- f = forms.ModelMultipleChoiceField(queryset=Person.objects.all(),
- validators=[my_validator])
-
- f.clean([p.pk for p in Person.objects.all()[8:9]])
- self.assertTrue(self._validator_run)
-
-class TripleForm(forms.ModelForm):
- class Meta:
- model = Triple
-
-class UniqueTogetherTests(TestCase):
- def test_multiple_field_unique_together(self):
- """
- When the same field is involved in multiple unique_together
- constraints, we need to make sure we don't remove the data for it
- before doing all the validation checking (not just failing after
- the first one).
- """
- Triple.objects.create(left=1, middle=2, right=3)
-
- form = TripleForm({'left': '1', 'middle': '2', 'right': '3'})
- self.assertFalse(form.is_valid())
-
- form = TripleForm({'left': '1', 'middle': '3', 'right': '1'})
- self.assertTrue(form.is_valid())
-
-class TripleFormWithCleanOverride(forms.ModelForm):
- class Meta:
- model = Triple
-
- def clean(self):
- if not self.cleaned_data['left'] == self.cleaned_data['right']:
- raise forms.ValidationError('Left and right should be equal')
- return self.cleaned_data
-
-class OverrideCleanTests(TestCase):
- def test_override_clean(self):
- """
- Regression for #12596: Calling super from ModelForm.clean() should be
- optional.
- """
- form = TripleFormWithCleanOverride({'left': 1, 'middle': 2, 'right': 1})
- self.assertTrue(form.is_valid())
- # form.instance.left will be None if the instance was not constructed
- # by form.full_clean().
- self.assertEquals(form.instance.left, 1)
-
-# Regression test for #12960.
-# Make sure the cleaned_data returned from ModelForm.clean() is applied to the
-# model instance.
-
-class PublicationForm(forms.ModelForm):
- def clean(self):
- self.cleaned_data['title'] = self.cleaned_data['title'].upper()
- return self.cleaned_data
-
- class Meta:
- model = Publication
-
-class ModelFormCleanTest(TestCase):
- def test_model_form_clean_applies_to_model(self):
- data = {'title': 'test', 'date_published': '2010-2-25'}
- form = PublicationForm(data)
- publication = form.save()
- self.assertEqual(publication.title, 'TEST')
-
-class FPForm(forms.ModelForm):
- class Meta:
- model = FilePathModel
-
-class FilePathFieldTests(TestCase):
- def test_file_path_field_blank(self):
- """
- Regression test for #8842: FilePathField(blank=True)
- """
- form = FPForm()
- names = [p[1] for p in form['path'].field.choices]
- names.sort()
- self.assertEqual(names, ['---------', '__init__.py', 'models.py', 'tests.py'])
-
-class ManyToManyCallableInitialTests(TestCase):
- def test_callable(self):
- "Regression for #10349: A callable can be provided as the initial value for an m2m field"
-
- # Set up a callable initial value
- def formfield_for_dbfield(db_field, **kwargs):
- if db_field.name == 'publications':
- kwargs['initial'] = lambda: Publication.objects.all().order_by('date_published')[:2]
- return db_field.formfield(**kwargs)
-
- # Set up some Publications to use as data
- Publication(title="First Book", date_published=date(2007,1,1)).save()
- Publication(title="Second Book", date_published=date(2008,1,1)).save()
- Publication(title="Third Book", date_published=date(2009,1,1)).save()
-
- # Create a ModelForm, instantiate it, and check that the output is as expected
- ModelForm = modelform_factory(Article, formfield_callback=formfield_for_dbfield)
- form = ModelForm()
- self.assertEquals(form.as_ul(), u"""<li><label for="id_headline">Headline:</label> <input id="id_headline" type="text" name="headline" maxlength="100" /></li>
-<li><label for="id_publications">Publications:</label> <select multiple="multiple" name="publications" id="id_publications">
-<option value="1" selected="selected">First Book</option>
-<option value="2" selected="selected">Second Book</option>
-<option value="3">Third Book</option>
-</select> Hold down "Control", or "Command" on a Mac, to select more than one.</li>""")
-
-class CFFForm(forms.ModelForm):
- class Meta:
- model = CustomFF
-
-class CustomFieldSaveTests(TestCase):
- def test_save(self):
- "Regression for #11149: save_form_data should be called only once"
-
- # It's enough that the form saves without error -- the custom save routine will
- # generate an AssertionError if it is called more than once during save.
- form = CFFForm(data = {'f': None})
- form.save()
-
-class ModelChoiceIteratorTests(TestCase):
- def test_len(self):
- class Form(forms.ModelForm):
- class Meta:
- model = Article
- fields = ["publications"]
-
- Publication.objects.create(title="Pravda",
- date_published=date(1991, 8, 22))
- f = Form()
- self.assertEqual(len(f.fields["publications"].choices), 1)
-
-class RealPersonForm(forms.ModelForm):
- class Meta:
- model = RealPerson
-
-class CustomModelFormSaveMethod(TestCase):
- def test_string_message(self):
- data = {'name': 'anonymous'}
- form = RealPersonForm(data)
- self.assertEqual(form.is_valid(), False)
- self.assertEqual(form.errors['__all__'], ['Please specify a real name.'])
-
-class ModelClassTests(TestCase):
- def test_no_model_class(self):
- class NoModelModelForm(forms.ModelForm):
- pass
- self.assertRaises(ValueError, NoModelModelForm)
-
-class OneToOneFieldTests(TestCase):
- def test_assignment_of_none(self):
- class AuthorForm(forms.ModelForm):
- class Meta:
- model = Author
- fields = ['publication', 'full_name']
-
- publication = Publication.objects.create(title="Pravda",
- date_published=date(1991, 8, 22))
- author = Author.objects.create(publication=publication, full_name='John Doe')
- form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author)
- self.assert_(form.is_valid())
- self.assertEqual(form.cleaned_data['publication'], None)
- author = form.save()
- # author object returned from form still retains original publication object
- # that's why we need to retreive it from database again
- new_author = Author.objects.get(pk=author.pk)
- self.assertEqual(new_author.publication, None)
-
- def test_assignment_of_none_null_false(self):
- class AuthorForm(forms.ModelForm):
- class Meta:
- model = Author1
- fields = ['publication', 'full_name']
-
- publication = Publication.objects.create(title="Pravda",
- date_published=date(1991, 8, 22))
- author = Author1.objects.create(publication=publication, full_name='John Doe')
- form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author)
- self.assert_(not form.is_valid())
-
-
-class ModelChoiceForm(forms.Form):
- person = ModelChoiceField(Person.objects.all())
-
-
-class TestTicket11183(TestCase):
- def test_11183(self):
- form1 = ModelChoiceForm()
- field1 = form1.fields['person']
- # To allow the widget to change the queryset of field1.widget.choices correctly,
- # without affecting other forms, the following must hold:
- self.assert_(field1 is not ModelChoiceForm.base_fields['person'])
- self.assert_(field1.widget.choices.field is field1)
-
-class HomepageForm(forms.ModelForm):
- class Meta:
- model = Homepage
-
-class URLFieldTests(TestCase):
- def test_url_on_modelform(self):
- "Check basic URL field validation on model forms"
- self.assertFalse(HomepageForm({'url': 'foo'}).is_valid())
- self.assertFalse(HomepageForm({'url': 'http://'}).is_valid())
- self.assertFalse(HomepageForm({'url': 'http://example'}).is_valid())
- self.assertFalse(HomepageForm({'url': 'http://example.'}).is_valid())
- self.assertFalse(HomepageForm({'url': 'http://com.'}).is_valid())
-
- self.assertTrue(HomepageForm({'url': 'http://localhost'}).is_valid())
- self.assertTrue(HomepageForm({'url': 'http://example.com'}).is_valid())
- self.assertTrue(HomepageForm({'url': 'http://www.example.com'}).is_valid())
- self.assertTrue(HomepageForm({'url': 'http://www.example.com:8000'}).is_valid())
- self.assertTrue(HomepageForm({'url': 'http://www.example.com/test'}).is_valid())
- self.assertTrue(HomepageForm({'url': 'http://www.example.com:8000/test'}).is_valid())
- self.assertTrue(HomepageForm({'url': 'http://example.com/foo/bar'}).is_valid())
-
- def test_http_prefixing(self):
- "If the http:// prefix is omitted on form input, the field adds it again. (Refs #13613)"
- form = HomepageForm({'url': 'example.com'})
- form.is_valid()
- # self.assertTrue(form.is_valid())
- # self.assertEquals(form.cleaned_data['url'], 'http://example.com/')
-
- form = HomepageForm({'url': 'example.com/test'})
- form.is_valid()
- # self.assertTrue(form.is_valid())
- # self.assertEquals(form.cleaned_data['url'], 'http://example.com/test')
-
-
-class FormFieldCallbackTests(TestCase):
-
- def test_baseform_with_widgets_in_meta(self):
- """Regression for #13095: Using base forms with widgets defined in Meta should not raise errors."""
- widget = forms.Textarea()
-
- class BaseForm(forms.ModelForm):
- class Meta:
- model = Person
- widgets = {'name': widget}
-
- Form = modelform_factory(Person, form=BaseForm)
- self.assertTrue(Form.base_fields['name'].widget is widget)
-
- def test_custom_callback(self):
- """Test that a custom formfield_callback is used if provided"""
-
- callback_args = []
-
- def callback(db_field, **kwargs):
- callback_args.append((db_field, kwargs))
- return db_field.formfield(**kwargs)
-
- widget = forms.Textarea()
-
- class BaseForm(forms.ModelForm):
- class Meta:
- model = Person
- widgets = {'name': widget}
-
- _ = modelform_factory(Person, form=BaseForm,
- formfield_callback=callback)
- id_field, name_field = Person._meta.fields
-
- self.assertEqual(callback_args,
- [(id_field, {}), (name_field, {'widget': widget})])
-
- def test_bad_callback(self):
- # A bad callback provided by user still gives an error
- self.assertRaises(TypeError, modelform_factory, Person,
- formfield_callback='not a function or callable')
diff --git a/parts/django/tests/regressiontests/model_formsets_regress/__init__.py b/parts/django/tests/regressiontests/model_formsets_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/model_formsets_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/model_formsets_regress/models.py b/parts/django/tests/regressiontests/model_formsets_regress/models.py
deleted file mode 100644
index bd12dd6..0000000
--- a/parts/django/tests/regressiontests/model_formsets_regress/models.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from django.db import models
-
-class User(models.Model):
- username = models.CharField(max_length=12, unique=True)
- serial = models.IntegerField()
-
-class UserSite(models.Model):
- user = models.ForeignKey(User, to_field="username")
- data = models.IntegerField()
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
-
-class Restaurant(Place):
- pass
-
-class Manager(models.Model):
- retaurant = models.ForeignKey(Restaurant)
- name = models.CharField(max_length=50)
diff --git a/parts/django/tests/regressiontests/model_formsets_regress/tests.py b/parts/django/tests/regressiontests/model_formsets_regress/tests.py
deleted file mode 100644
index ee2a26f..0000000
--- a/parts/django/tests/regressiontests/model_formsets_regress/tests.py
+++ /dev/null
@@ -1,218 +0,0 @@
-from django import forms
-from django.forms.models import modelform_factory, inlineformset_factory, modelformset_factory
-from django.test import TestCase
-
-from models import User, UserSite, Restaurant, Manager
-
-
-class InlineFormsetTests(TestCase):
- def test_formset_over_to_field(self):
- "A formset over a ForeignKey with a to_field can be saved. Regression for #10243"
- Form = modelform_factory(User)
- FormSet = inlineformset_factory(User, UserSite)
-
- # Instantiate the Form and FormSet to prove
- # you can create a form with no data
- form = Form()
- form_set = FormSet(instance=User())
-
- # Now create a new User and UserSite instance
- data = {
- 'serial': u'1',
- 'username': u'apollo13',
- 'usersite_set-TOTAL_FORMS': u'1',
- 'usersite_set-INITIAL_FORMS': u'0',
- 'usersite_set-MAX_NUM_FORMS': u'0',
- 'usersite_set-0-data': u'10',
- 'usersite_set-0-user': u'apollo13'
- }
- user = User()
- form = Form(data)
- if form.is_valid():
- user = form.save()
- else:
- self.fail('Errors found on form:%s' % form_set)
-
- form_set = FormSet(data, instance=user)
- if form_set.is_valid():
- form_set.save()
- usersite = UserSite.objects.all().values()
- self.assertEqual(usersite[0]['data'], 10)
- self.assertEqual(usersite[0]['user_id'], u'apollo13')
- else:
- self.fail('Errors found on formset:%s' % form_set.errors)
-
- # Now update the UserSite instance
- data = {
- 'usersite_set-TOTAL_FORMS': u'1',
- 'usersite_set-INITIAL_FORMS': u'1',
- 'usersite_set-MAX_NUM_FORMS': u'0',
- 'usersite_set-0-id': unicode(usersite[0]['id']),
- 'usersite_set-0-data': u'11',
- 'usersite_set-0-user': u'apollo13'
- }
- form_set = FormSet(data, instance=user)
- if form_set.is_valid():
- form_set.save()
- usersite = UserSite.objects.all().values()
- self.assertEqual(usersite[0]['data'], 11)
- self.assertEqual(usersite[0]['user_id'], u'apollo13')
- else:
- self.fail('Errors found on formset:%s' % form_set.errors)
-
- # Now add a new UserSite instance
- data = {
- 'usersite_set-TOTAL_FORMS': u'2',
- 'usersite_set-INITIAL_FORMS': u'1',
- 'usersite_set-MAX_NUM_FORMS': u'0',
- 'usersite_set-0-id': unicode(usersite[0]['id']),
- 'usersite_set-0-data': u'11',
- 'usersite_set-0-user': u'apollo13',
- 'usersite_set-1-data': u'42',
- 'usersite_set-1-user': u'apollo13'
- }
- form_set = FormSet(data, instance=user)
- if form_set.is_valid():
- form_set.save()
- usersite = UserSite.objects.all().values().order_by('data')
- self.assertEqual(usersite[0]['data'], 11)
- self.assertEqual(usersite[0]['user_id'], u'apollo13')
- self.assertEqual(usersite[1]['data'], 42)
- self.assertEqual(usersite[1]['user_id'], u'apollo13')
- else:
- self.fail('Errors found on formset:%s' % form_set.errors)
-
- def test_formset_over_inherited_model(self):
- "A formset over a ForeignKey with a to_field can be saved. Regression for #11120"
- Form = modelform_factory(Restaurant)
- FormSet = inlineformset_factory(Restaurant, Manager)
-
- # Instantiate the Form and FormSet to prove
- # you can create a form with no data
- form = Form()
- form_set = FormSet(instance=Restaurant())
-
- # Now create a new Restaurant and Manager instance
- data = {
- 'name': u"Guido's House of Pasta",
- 'manager_set-TOTAL_FORMS': u'1',
- 'manager_set-INITIAL_FORMS': u'0',
- 'manager_set-MAX_NUM_FORMS': u'0',
- 'manager_set-0-name': u'Guido Van Rossum'
- }
- restaurant = User()
- form = Form(data)
- if form.is_valid():
- restaurant = form.save()
- else:
- self.fail('Errors found on form:%s' % form_set)
-
- form_set = FormSet(data, instance=restaurant)
- if form_set.is_valid():
- form_set.save()
- manager = Manager.objects.all().values()
- self.assertEqual(manager[0]['name'], 'Guido Van Rossum')
- else:
- self.fail('Errors found on formset:%s' % form_set.errors)
-
- # Now update the Manager instance
- data = {
- 'manager_set-TOTAL_FORMS': u'1',
- 'manager_set-INITIAL_FORMS': u'1',
- 'manager_set-MAX_NUM_FORMS': u'0',
- 'manager_set-0-id': unicode(manager[0]['id']),
- 'manager_set-0-name': u'Terry Gilliam'
- }
- form_set = FormSet(data, instance=restaurant)
- if form_set.is_valid():
- form_set.save()
- manager = Manager.objects.all().values()
- self.assertEqual(manager[0]['name'], 'Terry Gilliam')
- else:
- self.fail('Errors found on formset:%s' % form_set.errors)
-
- # Now add a new Manager instance
- data = {
- 'manager_set-TOTAL_FORMS': u'2',
- 'manager_set-INITIAL_FORMS': u'1',
- 'manager_set-MAX_NUM_FORMS': u'0',
- 'manager_set-0-id': unicode(manager[0]['id']),
- 'manager_set-0-name': u'Terry Gilliam',
- 'manager_set-1-name': u'John Cleese'
- }
- form_set = FormSet(data, instance=restaurant)
- if form_set.is_valid():
- form_set.save()
- manager = Manager.objects.all().values().order_by('name')
- self.assertEqual(manager[0]['name'], 'John Cleese')
- self.assertEqual(manager[1]['name'], 'Terry Gilliam')
- else:
- self.fail('Errors found on formset:%s' % form_set.errors)
-
- def test_formset_with_none_instance(self):
- "A formset with instance=None can be created. Regression for #11872"
- Form = modelform_factory(User)
- FormSet = inlineformset_factory(User, UserSite)
-
- # Instantiate the Form and FormSet to prove
- # you can create a formset with an instance of None
- form = Form(instance=None)
- formset = FormSet(instance=None)
-
-
-class CustomWidget(forms.CharField):
- pass
-
-
-class UserSiteForm(forms.ModelForm):
- class Meta:
- model = UserSite
- widgets = {'data': CustomWidget}
-
-
-class Callback(object):
-
- def __init__(self):
- self.log = []
-
- def __call__(self, db_field, **kwargs):
- self.log.append((db_field, kwargs))
- return db_field.formfield(**kwargs)
-
-
-class FormfieldCallbackTests(TestCase):
- """
- Regression for #13095: Using base forms with widgets
- defined in Meta should not raise errors.
- """
-
- def test_inlineformset_factory_default(self):
- Formset = inlineformset_factory(User, UserSite, form=UserSiteForm)
- form = Formset({}).forms[0]
- self.assertTrue(isinstance(form['data'].field.widget, CustomWidget))
-
- def test_modelformset_factory_default(self):
- Formset = modelformset_factory(UserSite, form=UserSiteForm)
- form = Formset({}).forms[0]
- self.assertTrue(isinstance(form['data'].field.widget, CustomWidget))
-
- def assertCallbackCalled(self, callback):
- id_field, user_field, data_field = UserSite._meta.fields
- expected_log = [
- (id_field, {}),
- (user_field, {}),
- (data_field, {'widget': CustomWidget}),
- ]
- self.assertEqual(callback.log, expected_log)
-
- def test_inlineformset_custom_callback(self):
- callback = Callback()
- inlineformset_factory(User, UserSite, form=UserSiteForm,
- formfield_callback=callback)
- self.assertCallbackCalled(callback)
-
- def test_modelformset_custom_callback(self):
- callback = Callback()
- modelformset_factory(UserSite, form=UserSiteForm,
- formfield_callback=callback)
- self.assertCallbackCalled(callback)
diff --git a/parts/django/tests/regressiontests/model_inheritance_regress/__init__.py b/parts/django/tests/regressiontests/model_inheritance_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/model_inheritance_regress/models.py b/parts/django/tests/regressiontests/model_inheritance_regress/models.py
deleted file mode 100644
index 787f163..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_regress/models.py
+++ /dev/null
@@ -1,148 +0,0 @@
-import datetime
-
-from django.db import models
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
- address = models.CharField(max_length=80)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return u"%s the place" % self.name
-
-class Restaurant(Place):
- serves_hot_dogs = models.BooleanField()
- serves_pizza = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the restaurant" % self.name
-
-class ItalianRestaurant(Restaurant):
- serves_gnocchi = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the italian restaurant" % self.name
-
-class ParkingLot(Place):
- # An explicit link to the parent (we can control the attribute name).
- parent = models.OneToOneField(Place, primary_key=True, parent_link=True)
- capacity = models.IntegerField()
-
- def __unicode__(self):
- return u"%s the parking lot" % self.name
-
-class ParkingLot2(Place):
- # In lieu of any other connector, an existing OneToOneField will be
- # promoted to the primary key.
- parent = models.OneToOneField(Place)
-
-class ParkingLot3(Place):
- # The parent_link connector need not be the pk on the model.
- primary_key = models.AutoField(primary_key=True)
- parent = models.OneToOneField(Place, parent_link=True)
-
-class Supplier(models.Model):
- restaurant = models.ForeignKey(Restaurant)
-
-class Wholesaler(Supplier):
- retailer = models.ForeignKey(Supplier,related_name='wholesale_supplier')
-
-class Parent(models.Model):
- created = models.DateTimeField(default=datetime.datetime.now)
-
-class Child(Parent):
- name = models.CharField(max_length=10)
-
-class SelfRefParent(models.Model):
- parent_data = models.IntegerField()
- self_data = models.ForeignKey('self', null=True)
-
-class SelfRefChild(SelfRefParent):
- child_data = models.IntegerField()
-
-class Article(models.Model):
- headline = models.CharField(max_length=100)
- pub_date = models.DateTimeField()
- class Meta:
- ordering = ('-pub_date', 'headline')
-
- def __unicode__(self):
- return self.headline
-
-class ArticleWithAuthor(Article):
- author = models.CharField(max_length=100)
-
-class M2MBase(models.Model):
- articles = models.ManyToManyField(Article)
-
-class M2MChild(M2MBase):
- name = models.CharField(max_length=50)
-
-class Evaluation(Article):
- quality = models.IntegerField()
-
- class Meta:
- abstract = True
-
-class QualityControl(Evaluation):
- assignee = models.CharField(max_length=50)
-
-class BaseM(models.Model):
- base_name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.base_name
-
-class DerivedM(BaseM):
- customPK = models.IntegerField(primary_key=True)
- derived_name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return "PK = %d, base_name = %s, derived_name = %s" \
- % (self.customPK, self.base_name, self.derived_name)
-
-class AuditBase(models.Model):
- planned_date = models.DateField()
-
- class Meta:
- abstract = True
- verbose_name_plural = u'Audits'
-
-class CertificationAudit(AuditBase):
- class Meta(AuditBase.Meta):
- abstract = True
-
-class InternalCertificationAudit(CertificationAudit):
- auditing_dept = models.CharField(max_length=20)
-
-# Check that abstract classes don't get m2m tables autocreated.
-class Person(models.Model):
- name = models.CharField(max_length=100)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class AbstractEvent(models.Model):
- name = models.CharField(max_length=100)
- attendees = models.ManyToManyField(Person, related_name="%(class)s_set")
-
- class Meta:
- abstract = True
- ordering = ('name',)
-
- def __unicode__(self):
- return self.name
-
-class BirthdayParty(AbstractEvent):
- pass
-
-class BachelorParty(AbstractEvent):
- pass
-
-class MessyBachelorParty(BachelorParty):
- pass
diff --git a/parts/django/tests/regressiontests/model_inheritance_regress/tests.py b/parts/django/tests/regressiontests/model_inheritance_regress/tests.py
deleted file mode 100644
index dac2cb5..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_regress/tests.py
+++ /dev/null
@@ -1,388 +0,0 @@
-"""
-Regression tests for Model inheritance behaviour.
-"""
-
-import datetime
-from operator import attrgetter
-
-from django.test import TestCase
-
-from models import (Place, Restaurant, ItalianRestaurant, ParkingLot,
- ParkingLot2, ParkingLot3, Supplier, Wholesaler, Child, SelfRefParent,
- SelfRefChild, ArticleWithAuthor, M2MChild, QualityControl, DerivedM,
- Person, BirthdayParty, BachelorParty, MessyBachelorParty,
- InternalCertificationAudit)
-
-
-class ModelInheritanceTest(TestCase):
- def test_model_inheritance(self):
- # Regression for #7350, #7202
- # Check that when you create a Parent object with a specific reference
- # to an existent child instance, saving the Parent doesn't duplicate
- # the child. This behaviour is only activated during a raw save - it
- # is mostly relevant to deserialization, but any sort of CORBA style
- # 'narrow()' API would require a similar approach.
-
- # Create a child-parent-grandparent chain
- place1 = Place(
- name="Guido's House of Pasta",
- address='944 W. Fullerton')
- place1.save_base(raw=True)
- restaurant = Restaurant(
- place_ptr=place1,
- serves_hot_dogs=True,
- serves_pizza=False)
- restaurant.save_base(raw=True)
- italian_restaurant = ItalianRestaurant(
- restaurant_ptr=restaurant,
- serves_gnocchi=True)
- italian_restaurant.save_base(raw=True)
-
- # Create a child-parent chain with an explicit parent link
- place2 = Place(name='Main St', address='111 Main St')
- place2.save_base(raw=True)
- park = ParkingLot(parent=place2, capacity=100)
- park.save_base(raw=True)
-
- # Check that no extra parent objects have been created.
- places = list(Place.objects.all())
- self.assertEqual(places, [place1, place2])
-
- dicts = list(Restaurant.objects.values('name','serves_hot_dogs'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's House of Pasta",
- 'serves_hot_dogs': True
- }])
-
- dicts = list(ItalianRestaurant.objects.values(
- 'name','serves_hot_dogs','serves_gnocchi'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's House of Pasta",
- 'serves_gnocchi': True,
- 'serves_hot_dogs': True,
- }])
-
- dicts = list(ParkingLot.objects.values('name','capacity'))
- self.assertEqual(dicts, [{
- 'capacity': 100,
- 'name': u'Main St',
- }])
-
- # You can also update objects when using a raw save.
- place1.name = "Guido's All New House of Pasta"
- place1.save_base(raw=True)
-
- restaurant.serves_hot_dogs = False
- restaurant.save_base(raw=True)
-
- italian_restaurant.serves_gnocchi = False
- italian_restaurant.save_base(raw=True)
-
- place2.name='Derelict lot'
- place2.save_base(raw=True)
-
- park.capacity = 50
- park.save_base(raw=True)
-
- # No extra parent objects after an update, either.
- places = list(Place.objects.all())
- self.assertEqual(places, [place2, place1])
- self.assertEqual(places[0].name, 'Derelict lot')
- self.assertEqual(places[1].name, "Guido's All New House of Pasta")
-
- dicts = list(Restaurant.objects.values('name','serves_hot_dogs'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's All New House of Pasta",
- 'serves_hot_dogs': False,
- }])
-
- dicts = list(ItalianRestaurant.objects.values(
- 'name', 'serves_hot_dogs', 'serves_gnocchi'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's All New House of Pasta",
- 'serves_gnocchi': False,
- 'serves_hot_dogs': False,
- }])
-
- dicts = list(ParkingLot.objects.values('name','capacity'))
- self.assertEqual(dicts, [{
- 'capacity': 50,
- 'name': u'Derelict lot',
- }])
-
- # If you try to raw_save a parent attribute onto a child object,
- # the attribute will be ignored.
-
- italian_restaurant.name = "Lorenzo's Pasta Hut"
- italian_restaurant.save_base(raw=True)
-
- # Note that the name has not changed
- # - name is an attribute of Place, not ItalianRestaurant
- dicts = list(ItalianRestaurant.objects.values(
- 'name','serves_hot_dogs','serves_gnocchi'))
- self.assertEqual(dicts, [{
- 'name': u"Guido's All New House of Pasta",
- 'serves_gnocchi': False,
- 'serves_hot_dogs': False,
- }])
-
- def test_issue_7105(self):
- # Regressions tests for #7105: dates() queries should be able to use
- # fields from the parent model as easily as the child.
- obj = Child.objects.create(
- name='child',
- created=datetime.datetime(2008, 6, 26, 17, 0, 0))
- dates = list(Child.objects.dates('created', 'month'))
- self.assertEqual(dates, [datetime.datetime(2008, 6, 1, 0, 0)])
-
- def test_issue_7276(self):
- # Regression test for #7276: calling delete() on a model with
- # multi-table inheritance should delete the associated rows from any
- # ancestor tables, as well as any descendent objects.
- place1 = Place(
- name="Guido's House of Pasta",
- address='944 W. Fullerton')
- place1.save_base(raw=True)
- restaurant = Restaurant(
- place_ptr=place1,
- serves_hot_dogs=True,
- serves_pizza=False)
- restaurant.save_base(raw=True)
- italian_restaurant = ItalianRestaurant(
- restaurant_ptr=restaurant,
- serves_gnocchi=True)
- italian_restaurant.save_base(raw=True)
-
- ident = ItalianRestaurant.objects.all()[0].id
- self.assertEqual(Place.objects.get(pk=ident), place1)
- xx = Restaurant.objects.create(
- name='a',
- address='xx',
- serves_hot_dogs=True,
- serves_pizza=False)
-
- # This should delete both Restuarants, plus the related places, plus
- # the ItalianRestaurant.
- Restaurant.objects.all().delete()
-
- self.assertRaises(
- Place.DoesNotExist,
- Place.objects.get,
- pk=ident)
- self.assertRaises(
- ItalianRestaurant.DoesNotExist,
- ItalianRestaurant.objects.get,
- pk=ident)
-
- def test_issue_6755(self):
- """
- Regression test for #6755
- """
- r = Restaurant(serves_pizza=False)
- r.save()
- self.assertEqual(r.id, r.place_ptr_id)
- orig_id = r.id
- r = Restaurant(place_ptr_id=orig_id, serves_pizza=True)
- r.save()
- self.assertEqual(r.id, orig_id)
- self.assertEqual(r.id, r.place_ptr_id)
-
- def test_issue_7488(self):
- # Regression test for #7488. This looks a little crazy, but it's the
- # equivalent of what the admin interface has to do for the edit-inline
- # case.
- suppliers = Supplier.objects.filter(
- restaurant=Restaurant(name='xx', address='yy'))
- suppliers = list(suppliers)
- self.assertEqual(suppliers, [])
-
- def test_issue_11764(self):
- """
- Regression test for #11764
- """
- wholesalers = list(Wholesaler.objects.all().select_related())
- self.assertEqual(wholesalers, [])
-
- def test_issue_7853(self):
- """
- Regression test for #7853
- If the parent class has a self-referential link, make sure that any
- updates to that link via the child update the right table.
- """
- obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
- obj.delete()
-
- def test_get_next_previous_by_date(self):
- """
- Regression tests for #8076
- get_(next/previous)_by_date should work
- """
- c1 = ArticleWithAuthor(
- headline='ArticleWithAuthor 1',
- author="Person 1",
- pub_date=datetime.datetime(2005, 8, 1, 3, 0))
- c1.save()
- c2 = ArticleWithAuthor(
- headline='ArticleWithAuthor 2',
- author="Person 2",
- pub_date=datetime.datetime(2005, 8, 1, 10, 0))
- c2.save()
- c3 = ArticleWithAuthor(
- headline='ArticleWithAuthor 3',
- author="Person 3",
- pub_date=datetime.datetime(2005, 8, 2))
- c3.save()
-
- self.assertEqual(c1.get_next_by_pub_date(), c2)
- self.assertEqual(c2.get_next_by_pub_date(), c3)
- self.assertRaises(
- ArticleWithAuthor.DoesNotExist,
- c3.get_next_by_pub_date)
- self.assertEqual(c3.get_previous_by_pub_date(), c2)
- self.assertEqual(c2.get_previous_by_pub_date(), c1)
- self.assertRaises(
- ArticleWithAuthor.DoesNotExist,
- c1.get_previous_by_pub_date)
-
- def test_inherited_fields(self):
- """
- Regression test for #8825 and #9390
- Make sure all inherited fields (esp. m2m fields, in this case) appear
- on the child class.
- """
- m2mchildren = list(M2MChild.objects.filter(articles__isnull=False))
- self.assertEqual(m2mchildren, [])
-
- # Ordering should not include any database column more than once (this
- # is most likely to ocurr naturally with model inheritance, so we
- # check it here). Regression test for #9390. This necessarily pokes at
- # the SQL string for the query, since the duplicate problems are only
- # apparent at that late stage.
- qs = ArticleWithAuthor.objects.order_by('pub_date', 'pk')
- sql = qs.query.get_compiler(qs.db).as_sql()[0]
- fragment = sql[sql.find('ORDER BY'):]
- pos = fragment.find('pub_date')
- self.assertEqual(fragment.find('pub_date', pos + 1), -1)
-
- def test_queryset_update_on_parent_model(self):
- """
- Regression test for #10362
- It is possible to call update() and only change a field in
- an ancestor model.
- """
- article = ArticleWithAuthor.objects.create(
- author="fred",
- headline="Hey there!",
- pub_date=datetime.datetime(2009, 3, 1, 8, 0, 0))
- update = ArticleWithAuthor.objects.filter(
- author="fred").update(headline="Oh, no!")
- self.assertEqual(update, 1)
- update = ArticleWithAuthor.objects.filter(
- pk=article.pk).update(headline="Oh, no!")
- self.assertEqual(update, 1)
-
- derivedm1 = DerivedM.objects.create(
- customPK=44,
- base_name="b1",
- derived_name="d1")
- self.assertEqual(derivedm1.customPK, 44)
- self.assertEqual(derivedm1.base_name, 'b1')
- self.assertEqual(derivedm1.derived_name, 'd1')
- derivedms = list(DerivedM.objects.all())
- self.assertEqual(derivedms, [derivedm1])
-
- def test_use_explicit_o2o_to_parent_as_pk(self):
- """
- Regression tests for #10406
- If there's a one-to-one link between a child model and the parent and
- no explicit pk declared, we can use the one-to-one link as the pk on
- the child.
- """
- self.assertEqual(ParkingLot2._meta.pk.name, "parent")
-
- # However, the connector from child to parent need not be the pk on
- # the child at all.
- self.assertEqual(ParkingLot3._meta.pk.name, "primary_key")
- # the child->parent link
- self.assertEqual(
- ParkingLot3._meta.get_ancestor_link(Place).name,
- "parent")
-
- def test_all_fields_from_abstract_base_class(self):
- """
- Regression tests for #7588
- """
- # All fields from an ABC, including those inherited non-abstractly
- # should be available on child classes (#7588). Creating this instance
- # should work without error.
- QualityControl.objects.create(
- headline="Problems in Django",
- pub_date=datetime.datetime.now(),
- quality=10,
- assignee="adrian")
-
- def test_abstract_base_class_m2m_relation_inheritance(self):
- # Check that many-to-many relations defined on an abstract base class
- # are correctly inherited (and created) on the child class.
- p1 = Person.objects.create(name='Alice')
- p2 = Person.objects.create(name='Bob')
- p3 = Person.objects.create(name='Carol')
- p4 = Person.objects.create(name='Dave')
-
- birthday = BirthdayParty.objects.create(
- name='Birthday party for Alice')
- birthday.attendees = [p1, p3]
-
- bachelor = BachelorParty.objects.create(name='Bachelor party for Bob')
- bachelor.attendees = [p2, p4]
-
- parties = list(p1.birthdayparty_set.all())
- self.assertEqual(parties, [birthday])
-
- parties = list(p1.bachelorparty_set.all())
- self.assertEqual(parties, [])
-
- parties = list(p2.bachelorparty_set.all())
- self.assertEqual(parties, [bachelor])
-
- # Check that a subclass of a subclass of an abstract model doesn't get
- # it's own accessor.
- self.assertFalse(hasattr(p2, 'messybachelorparty_set'))
-
- # ... but it does inherit the m2m from it's parent
- messy = MessyBachelorParty.objects.create(
- name='Bachelor party for Dave')
- messy.attendees = [p4]
- messy_parent = messy.bachelorparty_ptr
-
- parties = list(p4.bachelorparty_set.all())
- self.assertEqual(parties, [bachelor, messy_parent])
-
- def test_11369(self):
- """
- verbose_name_plural correctly inherited from ABC if inheritance chain
- includes an abstract model.
- """
- # Regression test for #11369: verbose_name_plural should be inherited
- # from an ABC even when there are one or more intermediate
- # abstract models in the inheritance chain, for consistency with
- # verbose_name.
- self.assertEquals(
- InternalCertificationAudit._meta.verbose_name_plural,
- u'Audits'
- )
-
- def test_inherited_nullable_exclude(self):
- obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
- self.assertQuerysetEqual(
- SelfRefParent.objects.exclude(self_data=72), [
- obj.pk
- ],
- attrgetter("pk")
- )
- self.assertQuerysetEqual(
- SelfRefChild.objects.exclude(self_data=72), [
- obj.pk
- ],
- attrgetter("pk")
- )
diff --git a/parts/django/tests/regressiontests/model_inheritance_select_related/__init__.py b/parts/django/tests/regressiontests/model_inheritance_select_related/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_select_related/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/model_inheritance_select_related/models.py b/parts/django/tests/regressiontests/model_inheritance_select_related/models.py
deleted file mode 100644
index 5851e46..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_select_related/models.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""
-Regression tests for the interaction between model inheritance and
-select_related().
-"""
-
-from django.db import models
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
-
- class Meta:
- ordering = ('name',)
-
- def __unicode__(self):
- return u"%s the place" % self.name
-
-class Restaurant(Place):
- serves_sushi = models.BooleanField()
- serves_steak = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the restaurant" % self.name
-
-class Person(models.Model):
- name = models.CharField(max_length=50)
- favorite_restaurant = models.ForeignKey(Restaurant)
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/regressiontests/model_inheritance_select_related/tests.py b/parts/django/tests/regressiontests/model_inheritance_select_related/tests.py
deleted file mode 100644
index e1ed609..0000000
--- a/parts/django/tests/regressiontests/model_inheritance_select_related/tests.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from operator import attrgetter
-
-from django.test import TestCase
-
-from models import Restaurant, Person
-
-
-class ModelInheritanceSelectRelatedTests(TestCase):
- def test_inherited_select_related(self):
- # Regression test for #7246
- r1 = Restaurant.objects.create(
- name="Nobu", serves_sushi=True, serves_steak=False
- )
- r2 = Restaurant.objects.create(
- name="Craft", serves_sushi=False, serves_steak=True
- )
- p1 = Person.objects.create(name="John", favorite_restaurant=r1)
- p2 = Person.objects.create(name="Jane", favorite_restaurant=r2)
-
- self.assertQuerysetEqual(
- Person.objects.order_by("name").select_related(), [
- "Jane",
- "John",
- ],
- attrgetter("name")
- )
-
- jane = Person.objects.order_by("name").select_related("favorite_restaurant")[0]
- self.assertEqual(jane.favorite_restaurant.name, "Craft")
diff --git a/parts/django/tests/regressiontests/model_regress/__init__.py b/parts/django/tests/regressiontests/model_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/model_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/model_regress/models.py b/parts/django/tests/regressiontests/model_regress/models.py
deleted file mode 100644
index f30b3ee..0000000
--- a/parts/django/tests/regressiontests/model_regress/models.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# coding: utf-8
-from django.db import models
-
-
-CHOICES = (
- (1, 'first'),
- (2, 'second'),
-)
-
-class Article(models.Model):
- headline = models.CharField(max_length=100, default='Default headline')
- pub_date = models.DateTimeField()
- status = models.IntegerField(blank=True, null=True, choices=CHOICES)
- misc_data = models.CharField(max_length=100, blank=True)
- article_text = models.TextField()
-
- class Meta:
- ordering = ('pub_date','headline')
- # A utf-8 verbose name (Ångström's Articles) to test they are valid.
- verbose_name = "\xc3\x85ngstr\xc3\xb6m's Articles"
-
- def __unicode__(self):
- return self.headline
-
-class Movie(models.Model):
- #5218: Test models with non-default primary keys / AutoFields
- movie_id = models.AutoField(primary_key=True)
- name = models.CharField(max_length=60)
-
-class Party(models.Model):
- when = models.DateField(null=True)
-
-class Event(models.Model):
- when = models.DateTimeField()
-
-class Department(models.Model):
- id = models.PositiveIntegerField(primary_key=True)
- name = models.CharField(max_length=200)
-
- def __unicode__(self):
- return self.name
-
-class Worker(models.Model):
- department = models.ForeignKey(Department)
- name = models.CharField(max_length=200)
-
- def __unicode__(self):
- return self.name
-
-class BrokenUnicodeMethod(models.Model):
- name = models.CharField(max_length=7)
-
- def __unicode__(self):
- # Intentionally broken (trying to insert a unicode value into a str
- # object).
- return 'Názov: %s' % self.name
-
-class NonAutoPK(models.Model):
- name = models.CharField(max_length=10, primary_key=True)
diff --git a/parts/django/tests/regressiontests/model_regress/tests.py b/parts/django/tests/regressiontests/model_regress/tests.py
deleted file mode 100644
index 8009839..0000000
--- a/parts/django/tests/regressiontests/model_regress/tests.py
+++ /dev/null
@@ -1,175 +0,0 @@
-import datetime
-from operator import attrgetter
-
-from django.conf import settings
-from django.core.exceptions import ValidationError
-from django.db import DEFAULT_DB_ALIAS
-from django.test import TestCase
-from django.utils import tzinfo
-
-from models import (Worker, Article, Party, Event, Department,
- BrokenUnicodeMethod, NonAutoPK)
-
-
-
-class ModelTests(TestCase):
- # The bug is that the following queries would raise:
- # "TypeError: Related Field has invalid lookup: gte"
- def test_related_gte_lookup(self):
- """
- Regression test for #10153: foreign key __gte lookups.
- """
- Worker.objects.filter(department__gte=0)
-
- def test_related_lte_lookup(self):
- """
- Regression test for #10153: foreign key __lte lookups.
- """
- Worker.objects.filter(department__lte=0)
-
- def test_empty_choice(self):
- # NOTE: Part of the regression test here is merely parsing the model
- # declaration. The verbose_name, in particular, did not always work.
- a = Article.objects.create(
- headline="Look at me!", pub_date=datetime.datetime.now()
- )
- # An empty choice field should return None for the display name.
- self.assertEqual(a.get_status_display(), None)
-
- # Empty strings should be returned as Unicode
- a = Article.objects.get(pk=a.pk)
- self.assertEqual(a.misc_data, u'')
- self.assertEqual(type(a.misc_data), unicode)
-
- def test_long_textfield(self):
- # TextFields can hold more than 4000 characters (this was broken in
- # Oracle).
- a = Article.objects.create(
- headline="Really, really big",
- pub_date=datetime.datetime.now(),
- article_text = "ABCDE" * 1000
- )
- a = Article.objects.get(pk=a.pk)
- self.assertEqual
- (len(a.article_text), 5000)
-
- def test_date_lookup(self):
- # Regression test for #659
- Party.objects.create(when=datetime.datetime(1999, 12, 31))
- Party.objects.create(when=datetime.datetime(1998, 12, 31))
- Party.objects.create(when=datetime.datetime(1999, 1, 1))
- self.assertQuerysetEqual(
- Party.objects.filter(when__month=2), []
- )
- self.assertQuerysetEqual(
- Party.objects.filter(when__month=1), [
- datetime.date(1999, 1, 1)
- ],
- attrgetter("when")
- )
- self.assertQuerysetEqual(
- Party.objects.filter(when__month=12), [
- datetime.date(1999, 12, 31),
- datetime.date(1998, 12, 31),
- ],
- attrgetter("when")
- )
- self.assertQuerysetEqual(
- Party.objects.filter(when__year=1998), [
- datetime.date(1998, 12, 31),
- ],
- attrgetter("when")
- )
- # Regression test for #8510
- self.assertQuerysetEqual(
- Party.objects.filter(when__day="31"), [
- datetime.date(1999, 12, 31),
- datetime.date(1998, 12, 31),
- ],
- attrgetter("when")
- )
- self.assertQuerysetEqual(
- Party.objects.filter(when__month="12"), [
- datetime.date(1999, 12, 31),
- datetime.date(1998, 12, 31),
- ],
- attrgetter("when")
- )
- self.assertQuerysetEqual(
- Party.objects.filter(when__year="1998"), [
- datetime.date(1998, 12, 31),
- ],
- attrgetter("when")
- )
-
- def test_date_filter_null(self):
- # Date filtering was failing with NULL date values in SQLite
- # (regression test for #3501, amongst other things).
- Party.objects.create(when=datetime.datetime(1999, 1, 1))
- Party.objects.create()
- p = Party.objects.filter(when__month=1)[0]
- self.assertEqual(p.when, datetime.date(1999, 1, 1))
- self.assertQuerysetEqual(
- Party.objects.filter(pk=p.pk).dates("when", "month"), [
- 1
- ],
- attrgetter("month")
- )
-
- def test_get_next_prev_by_field(self):
- # Check that get_next_by_FIELD and get_previous_by_FIELD don't crash
- # when we have usecs values stored on the database
- #
- # It crashed after the Field.get_db_prep_* refactor, because on most
- # backends DateTimeFields supports usecs, but DateTimeField.to_python
- # didn't recognize them. (Note that
- # Model._get_next_or_previous_by_FIELD coerces values to strings)
- Event.objects.create(when=datetime.datetime(2000, 1, 1, 16, 0, 0))
- Event.objects.create(when=datetime.datetime(2000, 1, 1, 6, 1, 1))
- Event.objects.create(when=datetime.datetime(2000, 1, 1, 13, 1, 1))
- e = Event.objects.create(when=datetime.datetime(2000, 1, 1, 12, 0, 20, 24))
-
- self.assertEqual(
- e.get_next_by_when().when, datetime.datetime(2000, 1, 1, 13, 1, 1)
- )
- self.assertEqual(
- e.get_previous_by_when().when, datetime.datetime(2000, 1, 1, 6, 1, 1)
- )
-
- def test_primary_key_foreign_key_types(self):
- # Check Department and Worker (non-default PK type)
- d = Department.objects.create(id=10, name="IT")
- w = Worker.objects.create(department=d, name="Full-time")
- self.assertEqual(unicode(w), "Full-time")
-
- def test_broken_unicode(self):
- # Models with broken unicode methods should still have a printable repr
- b = BrokenUnicodeMethod.objects.create(name="Jerry")
- self.assertEqual(repr(b), "<BrokenUnicodeMethod: [Bad Unicode data]>")
-
- if settings.DATABASES[DEFAULT_DB_ALIAS]["ENGINE"] not in [
- "django.db.backends.mysql",
- "django.db.backends.oracle"
- ]:
- def test_timezones(self):
- # Saving an updating with timezone-aware datetime Python objects.
- # Regression test for #10443.
- # The idea is that all these creations and saving should work
- # without crashing. It's not rocket science.
- dt1 = datetime.datetime(2008, 8, 31, 16, 20, tzinfo=tzinfo.FixedOffset(600))
- dt2 = datetime.datetime(2008, 8, 31, 17, 20, tzinfo=tzinfo.FixedOffset(600))
- obj = Article.objects.create(
- headline="A headline", pub_date=dt1, article_text="foo"
- )
- obj.pub_date = dt2
- obj.save()
- self.assertEqual(
- Article.objects.filter(headline="A headline").update(pub_date=dt1),
- 1
- )
-
-class ModelValidationTest(TestCase):
- def test_pk_validation(self):
- one = NonAutoPK.objects.create(name="one")
- again = NonAutoPK(name="one")
- self.assertRaises(ValidationError, again.validate_unique)
diff --git a/parts/django/tests/regressiontests/modeladmin/__init__.py b/parts/django/tests/regressiontests/modeladmin/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/modeladmin/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/modeladmin/models.py b/parts/django/tests/regressiontests/modeladmin/models.py
deleted file mode 100644
index 20dfe2c..0000000
--- a/parts/django/tests/regressiontests/modeladmin/models.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# coding: utf-8
-from datetime import date
-
-from django.db import models
-from django.contrib.auth.models import User
-
-class Band(models.Model):
- name = models.CharField(max_length=100)
- bio = models.TextField()
- sign_date = models.DateField()
-
- def __unicode__(self):
- return self.name
-
-class Concert(models.Model):
- main_band = models.ForeignKey(Band, related_name='main_concerts')
- opening_band = models.ForeignKey(Band, related_name='opening_concerts',
- blank=True)
- day = models.CharField(max_length=3, choices=((1, 'Fri'), (2, 'Sat')))
- transport = models.CharField(max_length=100, choices=(
- (1, 'Plane'),
- (2, 'Train'),
- (3, 'Bus')
- ), blank=True)
-
-class ValidationTestModel(models.Model):
- name = models.CharField(max_length=100)
- slug = models.SlugField()
- users = models.ManyToManyField(User)
- state = models.CharField(max_length=2, choices=(("CO", "Colorado"), ("WA", "Washington")))
- is_active = models.BooleanField()
- pub_date = models.DateTimeField()
- band = models.ForeignKey(Band)
-
-class ValidationTestInlineModel(models.Model):
- parent = models.ForeignKey(ValidationTestModel)
diff --git a/parts/django/tests/regressiontests/modeladmin/tests.py b/parts/django/tests/regressiontests/modeladmin/tests.py
deleted file mode 100644
index b13a0ec..0000000
--- a/parts/django/tests/regressiontests/modeladmin/tests.py
+++ /dev/null
@@ -1,1226 +0,0 @@
-from datetime import date
-import unittest
-
-from django import forms
-from django.conf import settings
-from django.contrib.admin.options import ModelAdmin, TabularInline, \
- HORIZONTAL, VERTICAL
-from django.contrib.admin.sites import AdminSite
-from django.contrib.admin.validation import validate
-from django.contrib.admin.widgets import AdminDateWidget, AdminRadioSelect
-from django.core.exceptions import ImproperlyConfigured
-from django.forms.models import BaseModelFormSet
-from django.forms.widgets import Select
-from django.test import TestCase
-
-from models import Band, Concert, ValidationTestModel, \
- ValidationTestInlineModel
-
-
-# None of the following tests really depend on the content of the request,
-# so we'll just pass in None.
-request = None
-
-
-class ModelAdminTests(TestCase):
-
- def setUp(self):
- self.band = Band.objects.create(
- name='The Doors',
- bio='',
- sign_date=date(1965, 1, 1),
- )
- self.site = AdminSite()
-
- # form/fields/fieldsets interaction ##############################
-
- def test_default_fields(self):
- ma = ModelAdmin(Band, self.site)
-
- self.assertEquals(ma.get_form(request).base_fields.keys(),
- ['name', 'bio', 'sign_date'])
-
- def test_default_fieldsets(self):
- # fieldsets_add and fieldsets_change should return a special data structure that
- # is used in the templates. They should generate the "right thing" whether we
- # have specified a custom form, the fields argument, or nothing at all.
- #
- # Here's the default case. There are no custom form_add/form_change methods,
- # no fields argument, and no fieldsets argument.
- ma = ModelAdmin(Band, self.site)
- self.assertEqual(ma.get_fieldsets(request),
- [(None, {'fields': ['name', 'bio', 'sign_date']})])
-
- self.assertEqual(ma.get_fieldsets(request, self.band),
- [(None, {'fields': ['name', 'bio', 'sign_date']})])
-
- def test_field_arguments(self):
- # If we specify the fields argument, fieldsets_add and fielsets_change should
- # just stick the fields into a formsets structure and return it.
- class BandAdmin(ModelAdmin):
- fields = ['name']
-
- ma = BandAdmin(Band, self.site)
-
- self.assertEqual( ma.get_fieldsets(request),
- [(None, {'fields': ['name']})])
-
- self.assertEqual(ma.get_fieldsets(request, self.band),
- [(None, {'fields': ['name']})])
-
- def test_field_arguments_restricted_on_form(self):
- # If we specify fields or fieldsets, it should exclude fields on the Form class
- # to the fields specified. This may cause errors to be raised in the db layer if
- # required model fields arent in fields/fieldsets, but that's preferable to
- # ghost errors where you have a field in your Form class that isn't being
- # displayed because you forgot to add it to fields/fieldsets
-
- # Using `fields`.
- class BandAdmin(ModelAdmin):
- fields = ['name']
-
- ma = BandAdmin(Band, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(), ['name'])
- self.assertEqual(ma.get_form(request, self.band).base_fields.keys(),
- ['name'])
-
- # Using `fieldsets`.
- class BandAdmin(ModelAdmin):
- fieldsets = [(None, {'fields': ['name']})]
-
- ma = BandAdmin(Band, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(), ['name'])
- self.assertEqual(ma.get_form(request, self.band).base_fields.keys(),
- ['name'])
-
- # Using `exclude`.
- class BandAdmin(ModelAdmin):
- exclude = ['bio']
-
- ma = BandAdmin(Band, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(),
- ['name', 'sign_date'])
-
- # You can also pass a tuple to `exclude`.
- class BandAdmin(ModelAdmin):
- exclude = ('bio',)
-
- ma = BandAdmin(Band, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(),
- ['name', 'sign_date'])
-
- # Using `fields` and `exclude`.
- class BandAdmin(ModelAdmin):
- fields = ['name', 'bio']
- exclude = ['bio']
-
- ma = BandAdmin(Band, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(),
- ['name'])
-
- def test_custom_form_validation(self):
- # If we specify a form, it should use it allowing custom validation to work
- # properly. This won't, however, break any of the admin widgets or media.
-
- class AdminBandForm(forms.ModelForm):
- delete = forms.BooleanField()
-
- class Meta:
- model = Band
-
- class BandAdmin(ModelAdmin):
- form = AdminBandForm
-
- ma = BandAdmin(Band, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(),
- ['name', 'bio', 'sign_date', 'delete'])
-
- self.assertEqual(
- type(ma.get_form(request).base_fields['sign_date'].widget),
- AdminDateWidget)
-
- def test_queryset_override(self):
- # If we need to override the queryset of a ModelChoiceField in our custom form
- # make sure that RelatedFieldWidgetWrapper doesn't mess that up.
-
- band2 = Band(name='The Beatles', bio='', sign_date=date(1962, 1, 1))
- band2.save()
-
- class ConcertAdmin(ModelAdmin):
- pass
- ma = ConcertAdmin(Concert, self.site)
- form = ma.get_form(request)()
-
- self.assertEqual(str(form["main_band"]),
- '<select name="main_band" id="id_main_band">\n'
- '<option value="" selected="selected">---------</option>\n'
- '<option value="%d">The Doors</option>\n'
- '<option value="%d">The Beatles</option>\n'
- '</select>' % (self.band.id, band2.id))
-
- class AdminConcertForm(forms.ModelForm):
- class Meta:
- model = Concert
-
- def __init__(self, *args, **kwargs):
- super(AdminConcertForm, self).__init__(*args, **kwargs)
- self.fields["main_band"].queryset = Band.objects.filter(name='The Doors')
-
- class ConcertAdmin(ModelAdmin):
- form = AdminConcertForm
-
- ma = ConcertAdmin(Concert, self.site)
- form = ma.get_form(request)()
-
- self.assertEqual(str(form["main_band"]),
- '<select name="main_band" id="id_main_band">\n'
- '<option value="" selected="selected">---------</option>\n'
- '<option value="%d">The Doors</option>\n'
- '</select>' % self.band.id)
-
- # radio_fields behavior ###########################################
-
- def test_default_foreign_key_widget(self):
- # First, without any radio_fields specified, the widgets for ForeignKey
- # and fields with choices specified ought to be a basic Select widget.
- # ForeignKey widgets in the admin are wrapped with RelatedFieldWidgetWrapper so
- # they need to be handled properly when type checking. For Select fields, all of
- # the choices lists have a first entry of dashes.
-
- cma = ModelAdmin(Concert, self.site)
- cmafa = cma.get_form(request)
-
- self.assertEqual(type(cmafa.base_fields['main_band'].widget.widget),
- Select)
- self.assertEqual(
- list(cmafa.base_fields['main_band'].widget.choices),
- [(u'', u'---------'), (self.band.id, u'The Doors')])
-
- self.assertEqual(
- type(cmafa.base_fields['opening_band'].widget.widget), Select)
- self.assertEqual(
- list(cmafa.base_fields['opening_band'].widget.choices),
- [(u'', u'---------'), (self.band.id, u'The Doors')])
-
- self.assertEqual(type(cmafa.base_fields['day'].widget), Select)
- self.assertEqual(list(cmafa.base_fields['day'].widget.choices),
- [('', '---------'), (1, 'Fri'), (2, 'Sat')])
-
- self.assertEqual(type(cmafa.base_fields['transport'].widget),
- Select)
- self.assertEqual(
- list(cmafa.base_fields['transport'].widget.choices),
- [('', '---------'), (1, 'Plane'), (2, 'Train'), (3, 'Bus')])
-
- def test_foreign_key_as_radio_field(self):
- # Now specify all the fields as radio_fields. Widgets should now be
- # RadioSelect, and the choices list should have a first entry of 'None' if
- # blank=True for the model field. Finally, the widget should have the
- # 'radiolist' attr, and 'inline' as well if the field is specified HORIZONTAL.
-
- class ConcertAdmin(ModelAdmin):
- radio_fields = {
- 'main_band': HORIZONTAL,
- 'opening_band': VERTICAL,
- 'day': VERTICAL,
- 'transport': HORIZONTAL,
- }
-
- cma = ConcertAdmin(Concert, self.site)
- cmafa = cma.get_form(request)
-
- self.assertEqual(type(cmafa.base_fields['main_band'].widget.widget),
- AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['main_band'].widget.attrs,
- {'class': 'radiolist inline'})
- self.assertEqual(list(cmafa.base_fields['main_band'].widget.choices),
- [(self.band.id, u'The Doors')])
-
- self.assertEqual(
- type(cmafa.base_fields['opening_band'].widget.widget),
- AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['opening_band'].widget.attrs,
- {'class': 'radiolist'})
- self.assertEqual(
- list(cmafa.base_fields['opening_band'].widget.choices),
- [(u'', u'None'), (self.band.id, u'The Doors')])
-
- self.assertEqual(type(cmafa.base_fields['day'].widget),
- AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['day'].widget.attrs,
- {'class': 'radiolist'})
- self.assertEqual(list(cmafa.base_fields['day'].widget.choices),
- [(1, 'Fri'), (2, 'Sat')])
-
- self.assertEqual(type(cmafa.base_fields['transport'].widget),
- AdminRadioSelect)
- self.assertEqual(cmafa.base_fields['transport'].widget.attrs,
- {'class': 'radiolist inline'})
- self.assertEqual(list(cmafa.base_fields['transport'].widget.choices),
- [('', u'None'), (1, 'Plane'), (2, 'Train'), (3, 'Bus')])
-
- class AdminConcertForm(forms.ModelForm):
- class Meta:
- model = Concert
- exclude = ('transport',)
-
- class ConcertAdmin(ModelAdmin):
- form = AdminConcertForm
-
- ma = ConcertAdmin(Concert, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(),
- ['main_band', 'opening_band', 'day'])
-
- class AdminConcertForm(forms.ModelForm):
- extra = forms.CharField()
-
- class Meta:
- model = Concert
- fields = ['extra', 'transport']
-
- class ConcertAdmin(ModelAdmin):
- form = AdminConcertForm
-
- ma = ConcertAdmin(Concert, self.site)
- self.assertEqual(ma.get_form(request).base_fields.keys(),
- ['extra', 'transport'])
-
- class ConcertInline(TabularInline):
- form = AdminConcertForm
- model = Concert
- fk_name = 'main_band'
- can_delete = True
-
- class BandAdmin(ModelAdmin):
- inlines = [
- ConcertInline
- ]
-
- ma = BandAdmin(Band, self.site)
- self.assertEqual(
- list(ma.get_formsets(request))[0]().forms[0].fields.keys(),
- ['extra', 'transport', 'id', 'DELETE', 'main_band'])
-
-
-class ValidationTests(unittest.TestCase):
- def assertRaisesErrorWithMessage(self, error, message, callable, *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
- def test_validation_only_runs_in_debug(self):
- # Ensure validation only runs when DEBUG = True
- try:
- settings.DEBUG = True
-
- class ValidationTestModelAdmin(ModelAdmin):
- raw_id_fields = 10
-
- site = AdminSite()
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.raw_id_fields' must be a list or tuple.",
- site.register,
- ValidationTestModel,
- ValidationTestModelAdmin,
- )
- finally:
- settings.DEBUG = False
-
- site = AdminSite()
- site.register(ValidationTestModel, ValidationTestModelAdmin)
-
- def test_raw_id_fields_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- raw_id_fields = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.raw_id_fields' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- raw_id_fields = ('non_existent_field',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.raw_id_fields' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- raw_id_fields = ('name',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.raw_id_fields[0]', 'name' must be either a ForeignKey or ManyToManyField.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- raw_id_fields = ('users',)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_fieldsets_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.fieldsets' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = ({},)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.fieldsets[0]' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = ((),)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.fieldsets[0]' does not have exactly two elements.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = (("General", ()),)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.fieldsets[0][1]' must be a dictionary.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = (("General", {}),)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'fields' key is required in ValidationTestModelAdmin.fieldsets[0][1] field options dict.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = (("General", {"fields": ("non_existent_field",)}),)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.fieldsets[0][1]['fields']' refers to field 'non_existent_field' that is missing from the form.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = (("General", {"fields": ("name",)}),)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = (("General", {"fields": ("name",)}),)
- fields = ["name",]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "Both fieldsets and fields are specified in ValidationTestModelAdmin.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fieldsets = [(None, {'fields': ['name', 'name']})]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "There are duplicate field(s) in ValidationTestModelAdmin.fieldsets",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- fields = ["name", "name"]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "There are duplicate field(s) in ValidationTestModelAdmin.fields",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- def test_form_validation(self):
-
- class FakeForm(object):
- pass
-
- class ValidationTestModelAdmin(ModelAdmin):
- form = FakeForm
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "ValidationTestModelAdmin.form does not inherit from BaseModelForm.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- def test_fieldsets_with_custom_form_validation(self):
-
- class BandAdmin(ModelAdmin):
-
- fieldsets = (
- ('Band', {
- 'fields': ('non_existent_field',)
- }),
- )
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'BandAdmin.fieldsets[0][1]['fields']' refers to field 'non_existent_field' that is missing from the form.",
- validate,
- BandAdmin,
- Band,
- )
-
- class BandAdmin(ModelAdmin):
- fieldsets = (
- ('Band', {
- 'fields': ('name',)
- }),
- )
-
- validate(BandAdmin, Band)
-
- class AdminBandForm(forms.ModelForm):
- class Meta:
- model = Band
-
- class BandAdmin(ModelAdmin):
- form = AdminBandForm
-
- fieldsets = (
- ('Band', {
- 'fields': ('non_existent_field',)
- }),
- )
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'BandAdmin.fieldsets[0][1]['fields']' refers to field 'non_existent_field' that is missing from the form.",
- validate,
- BandAdmin,
- Band,
- )
-
- class AdminBandForm(forms.ModelForm):
- delete = forms.BooleanField()
-
- class Meta:
- model = Band
-
- class BandAdmin(ModelAdmin):
- form = AdminBandForm
-
- fieldsets = (
- ('Band', {
- 'fields': ('name', 'bio', 'sign_date', 'delete')
- }),
- )
-
- validate(BandAdmin, Band)
-
- def test_filter_vertical_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_vertical = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.filter_vertical' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_vertical = ("non_existent_field",)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.filter_vertical' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_vertical = ("name",)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.filter_vertical[0]' must be a ManyToManyField.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_vertical = ("users",)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_filter_horizontal_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_horizontal = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.filter_horizontal' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_horizontal = ("non_existent_field",)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.filter_horizontal' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_horizontal = ("name",)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.filter_horizontal[0]' must be a ManyToManyField.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- filter_horizontal = ("users",)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_radio_fields_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- radio_fields = ()
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.radio_fields' must be a dictionary.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- radio_fields = {"non_existent_field": None}
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.radio_fields' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- radio_fields = {"name": None}
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.radio_fields['name']' is neither an instance of ForeignKey nor does have choices set.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- radio_fields = {"state": None}
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.radio_fields['state']' is neither admin.HORIZONTAL nor admin.VERTICAL.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- radio_fields = {"state": VERTICAL}
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_prepopulated_fields_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- prepopulated_fields = ()
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.prepopulated_fields' must be a dictionary.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- prepopulated_fields = {"non_existent_field": None}
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.prepopulated_fields' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- prepopulated_fields = {"slug": ("non_existent_field",)}
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.prepopulated_fields['slug'][0]' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- prepopulated_fields = {"users": ("name",)}
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.prepopulated_fields['users']' is either a DateTimeField, ForeignKey or ManyToManyField. This isn't allowed.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- prepopulated_fields = {"slug": ("name",)}
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_list_display_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_display' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display = ('non_existent_field',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "ValidationTestModelAdmin.list_display[0], 'non_existent_field' is not a callable or an attribute of 'ValidationTestModelAdmin' or found in the model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display = ('users',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_display[0]', 'users' is a ManyToManyField which is not supported.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display = ('name',)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_list_display_links_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display_links = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_display_links' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display_links = ('non_existent_field',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_display_links[0]' refers to 'non_existent_field' that is neither a field, method or property of model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display_links = ('name',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_display_links[0]'refers to 'name' which is not defined in 'list_display'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_display = ('name',)
- list_display_links = ('name',)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_list_filter_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_filter = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_filter' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_filter = ('non_existent_field',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_filter[0]' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_filter = ('is_active',)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_list_per_page_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_per_page = 'hello'
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_per_page' should be a integer.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_per_page = 100
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_search_fields_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- search_fields = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.search_fields' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- def test_date_hierarchy_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- date_hierarchy = 'non_existent_field'
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.date_hierarchy' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- date_hierarchy = 'name'
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.date_hierarchy is neither an instance of DateField nor DateTimeField.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- date_hierarchy = 'pub_date'
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_ordering_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- ordering = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.ordering' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- ordering = ('non_existent_field',)
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.ordering[0]' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- ordering = ('?', 'name')
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.ordering' has the random ordering marker '?', but contains other fields as well. Please either remove '?' or the other fields.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- ordering = ('?',)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- class ValidationTestModelAdmin(ModelAdmin):
- ordering = ('band__name',)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- class ValidationTestModelAdmin(ModelAdmin):
- ordering = ('name',)
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_list_select_related_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_select_related = 1
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.list_select_related' should be a boolean.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- list_select_related = False
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_save_as_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- save_as = 1
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.save_as' should be a boolean.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- save_as = True
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_save_on_top_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- save_on_top = 1
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.save_on_top' should be a boolean.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestModelAdmin(ModelAdmin):
- save_on_top = True
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_inlines_validation(self):
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = 10
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.inlines' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestInline(object):
- pass
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.inlines[0]' does not inherit from BaseModelAdmin.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestInline(TabularInline):
- pass
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'model' is a required attribute of 'ValidationTestModelAdmin.inlines[0]'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class SomethingBad(object):
- pass
-
- class ValidationTestInline(TabularInline):
- model = SomethingBad
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestModelAdmin.inlines[0].model' does not inherit from models.Model.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_fields_validation(self):
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- fields = 10
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestInline.fields' must be a list or tuple.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- fields = ("non_existent_field",)
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestInline.fields' refers to field 'non_existent_field' that is missing from the form.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- def test_fk_name_validation(self):
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- fk_name = "non_existent_field"
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestInline.fk_name' refers to field 'non_existent_field' that is missing from model 'ValidationTestInlineModel'.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- fk_name = "parent"
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_extra_validation(self):
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- extra = "hello"
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestInline.extra' should be a integer.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- extra = 2
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_max_num_validation(self):
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- max_num = "hello"
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestInline.max_num' should be an integer or None (default).",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- max_num = 2
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
-
- def test_formset_validation(self):
-
- class FakeFormSet(object):
- pass
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- formset = FakeFormSet
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- self.assertRaisesErrorWithMessage(
- ImproperlyConfigured,
- "'ValidationTestInline.formset' does not inherit from BaseModelFormSet.",
- validate,
- ValidationTestModelAdmin,
- ValidationTestModel,
- )
-
- class RealModelFormSet(BaseModelFormSet):
- pass
-
- class ValidationTestInline(TabularInline):
- model = ValidationTestInlineModel
- formset = RealModelFormSet
-
- class ValidationTestModelAdmin(ModelAdmin):
- inlines = [ValidationTestInline]
-
- validate(ValidationTestModelAdmin, ValidationTestModel)
diff --git a/parts/django/tests/regressiontests/multiple_database/__init__.py b/parts/django/tests/regressiontests/multiple_database/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/multiple_database/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/multiple_database/fixtures/multidb-common.json b/parts/django/tests/regressiontests/multiple_database/fixtures/multidb-common.json
deleted file mode 100644
index 3313417..0000000
--- a/parts/django/tests/regressiontests/multiple_database/fixtures/multidb-common.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "pk": 1,
- "model": "multiple_database.book",
- "fields": {
- "title": "The Definitive Guide to Django",
- "published": "2009-7-8"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/multiple_database/fixtures/multidb.default.json b/parts/django/tests/regressiontests/multiple_database/fixtures/multidb.default.json
deleted file mode 100644
index 379b18a..0000000
--- a/parts/django/tests/regressiontests/multiple_database/fixtures/multidb.default.json
+++ /dev/null
@@ -1,26 +0,0 @@
-[
- {
- "pk": 1,
- "model": "multiple_database.person",
- "fields": {
- "name": "Marty Alchin"
- }
- },
- {
- "pk": 2,
- "model": "multiple_database.person",
- "fields": {
- "name": "George Vilches"
- }
- },
- {
- "pk": 2,
- "model": "multiple_database.book",
- "fields": {
- "title": "Pro Django",
- "published": "2008-12-16",
- "authors": [["Marty Alchin"]],
- "editor": ["George Vilches"]
- }
- }
-]
diff --git a/parts/django/tests/regressiontests/multiple_database/fixtures/multidb.other.json b/parts/django/tests/regressiontests/multiple_database/fixtures/multidb.other.json
deleted file mode 100644
index c64f490..0000000
--- a/parts/django/tests/regressiontests/multiple_database/fixtures/multidb.other.json
+++ /dev/null
@@ -1,26 +0,0 @@
-[
- {
- "pk": 1,
- "model": "multiple_database.person",
- "fields": {
- "name": "Mark Pilgrim"
- }
- },
- {
- "pk": 2,
- "model": "multiple_database.person",
- "fields": {
- "name": "Chris Mills"
- }
- },
- {
- "pk": 2,
- "model": "multiple_database.book",
- "fields": {
- "title": "Dive into Python",
- "published": "2009-5-4",
- "authors": [["Mark Pilgrim"]],
- "editor": ["Chris Mills"]
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/multiple_database/fixtures/pets.json b/parts/django/tests/regressiontests/multiple_database/fixtures/pets.json
deleted file mode 100644
index 89756a3..0000000
--- a/parts/django/tests/regressiontests/multiple_database/fixtures/pets.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "pk": 1,
- "model": "multiple_database.pet",
- "fields": {
- "name": "Mr Bigglesworth",
- "owner": 1
- }
- },
- {
- "pk": 2,
- "model": "multiple_database.pet",
- "fields": {
- "name": "Spot",
- "owner": 2
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/multiple_database/models.py b/parts/django/tests/regressiontests/multiple_database/models.py
deleted file mode 100644
index ce71828..0000000
--- a/parts/django/tests/regressiontests/multiple_database/models.py
+++ /dev/null
@@ -1,76 +0,0 @@
-from django.conf import settings
-from django.contrib.auth.models import User
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.contenttypes import generic
-from django.db import models
-
-class Review(models.Model):
- source = models.CharField(max_length=100)
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey()
-
- def __unicode__(self):
- return self.source
-
- class Meta:
- ordering = ('source',)
-
-class PersonManager(models.Manager):
- def get_by_natural_key(self, name):
- return self.get(name=name)
-
-class Person(models.Model):
- objects = PersonManager()
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
- class Meta:
- ordering = ('name',)
-
-# This book manager doesn't do anything interesting; it just
-# exists to strip out the 'extra_arg' argument to certain
-# calls. This argument is used to establish that the BookManager
-# is actually getting used when it should be.
-class BookManager(models.Manager):
- def create(self, *args, **kwargs):
- kwargs.pop('extra_arg', None)
- return super(BookManager, self).create(*args, **kwargs)
-
- def get_or_create(self, *args, **kwargs):
- kwargs.pop('extra_arg', None)
- return super(BookManager, self).get_or_create(*args, **kwargs)
-
-class Book(models.Model):
- objects = BookManager()
- title = models.CharField(max_length=100)
- published = models.DateField()
- authors = models.ManyToManyField(Person)
- editor = models.ForeignKey(Person, null=True, related_name='edited')
- reviews = generic.GenericRelation(Review)
- pages = models.IntegerField(default=100)
-
- def __unicode__(self):
- return self.title
-
- class Meta:
- ordering = ('title',)
-
-class Pet(models.Model):
- name = models.CharField(max_length=100)
- owner = models.ForeignKey(Person)
-
- def __unicode__(self):
- return self.name
-
- class Meta:
- ordering = ('name',)
-
-class UserProfile(models.Model):
- user = models.OneToOneField(User, null=True)
- flavor = models.CharField(max_length=100)
-
- class Meta:
- ordering = ('flavor',)
diff --git a/parts/django/tests/regressiontests/multiple_database/tests.py b/parts/django/tests/regressiontests/multiple_database/tests.py
deleted file mode 100644
index 05dca26..0000000
--- a/parts/django/tests/regressiontests/multiple_database/tests.py
+++ /dev/null
@@ -1,1681 +0,0 @@
-import datetime
-import pickle
-import sys
-from StringIO import StringIO
-
-from django.conf import settings
-from django.contrib.auth.models import User
-from django.core import management
-from django.db import connections, router, DEFAULT_DB_ALIAS
-from django.db.utils import ConnectionRouter
-from django.test import TestCase
-
-from models import Book, Person, Pet, Review, UserProfile
-
-try:
- # we only have these models if the user is using multi-db, it's safe the
- # run the tests without them though.
- from models import Article, article_using
-except ImportError:
- pass
-
-class QueryTestCase(TestCase):
- multi_db = True
-
- def test_db_selection(self):
- "Check that querysets will use the default databse by default"
- self.assertEquals(Book.objects.db, DEFAULT_DB_ALIAS)
- self.assertEquals(Book.objects.all().db, DEFAULT_DB_ALIAS)
-
- self.assertEquals(Book.objects.using('other').db, 'other')
-
- self.assertEquals(Book.objects.db_manager('other').db, 'other')
- self.assertEquals(Book.objects.db_manager('other').all().db, 'other')
-
- def test_default_creation(self):
- "Objects created on the default database don't leak onto other databases"
- # Create a book on the default database using create()
- Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- # Create a book on the default database using a save
- dive = Book()
- dive.title="Dive into Python"
- dive.published = datetime.date(2009, 5, 4)
- dive.save()
-
- # Check that book exists on the default database, but not on other database
- try:
- Book.objects.get(title="Pro Django")
- Book.objects.using('default').get(title="Pro Django")
- except Book.DoesNotExist:
- self.fail('"Dive Into Python" should exist on default database')
-
- self.assertRaises(Book.DoesNotExist,
- Book.objects.using('other').get,
- title="Pro Django"
- )
-
- try:
- Book.objects.get(title="Dive into Python")
- Book.objects.using('default').get(title="Dive into Python")
- except Book.DoesNotExist:
- self.fail('"Dive into Python" should exist on default database')
-
- self.assertRaises(Book.DoesNotExist,
- Book.objects.using('other').get,
- title="Dive into Python"
- )
-
-
- def test_other_creation(self):
- "Objects created on another database don't leak onto the default database"
- # Create a book on the second database
- Book.objects.using('other').create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- # Create a book on the default database using a save
- dive = Book()
- dive.title="Dive into Python"
- dive.published = datetime.date(2009, 5, 4)
- dive.save(using='other')
-
- # Check that book exists on the default database, but not on other database
- try:
- Book.objects.using('other').get(title="Pro Django")
- except Book.DoesNotExist:
- self.fail('"Dive Into Python" should exist on other database')
-
- self.assertRaises(Book.DoesNotExist,
- Book.objects.get,
- title="Pro Django"
- )
- self.assertRaises(Book.DoesNotExist,
- Book.objects.using('default').get,
- title="Pro Django"
- )
-
- try:
- Book.objects.using('other').get(title="Dive into Python")
- except Book.DoesNotExist:
- self.fail('"Dive into Python" should exist on other database')
-
- self.assertRaises(Book.DoesNotExist,
- Book.objects.get,
- title="Dive into Python"
- )
- self.assertRaises(Book.DoesNotExist,
- Book.objects.using('default').get,
- title="Dive into Python"
- )
-
- def test_basic_queries(self):
- "Queries are constrained to a single database"
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- dive = Book.objects.using('other').get(published=datetime.date(2009, 5, 4))
- self.assertEqual(dive.title, "Dive into Python")
- self.assertRaises(Book.DoesNotExist, Book.objects.using('default').get, published=datetime.date(2009, 5, 4))
-
- dive = Book.objects.using('other').get(title__icontains="dive")
- self.assertEqual(dive.title, "Dive into Python")
- self.assertRaises(Book.DoesNotExist, Book.objects.using('default').get, title__icontains="dive")
-
- dive = Book.objects.using('other').get(title__iexact="dive INTO python")
- self.assertEqual(dive.title, "Dive into Python")
- self.assertRaises(Book.DoesNotExist, Book.objects.using('default').get, title__iexact="dive INTO python")
-
- dive = Book.objects.using('other').get(published__year=2009)
- self.assertEqual(dive.title, "Dive into Python")
- self.assertEqual(dive.published, datetime.date(2009, 5, 4))
- self.assertRaises(Book.DoesNotExist, Book.objects.using('default').get, published__year=2009)
-
- years = Book.objects.using('other').dates('published', 'year')
- self.assertEqual([o.year for o in years], [2009])
- years = Book.objects.using('default').dates('published', 'year')
- self.assertEqual([o.year for o in years], [])
-
- months = Book.objects.using('other').dates('published', 'month')
- self.assertEqual([o.month for o in months], [5])
- months = Book.objects.using('default').dates('published', 'month')
- self.assertEqual([o.month for o in months], [])
-
- def test_m2m_separation(self):
- "M2M fields are constrained to a single database"
- # Create a book and author on the default database
- pro = Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- marty = Person.objects.create(name="Marty Alchin")
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
-
- # Save the author relations
- pro.authors = [marty]
- dive.authors = [mark]
-
- # Inspect the m2m tables directly.
- # There should be 1 entry in each database
- self.assertEquals(Book.authors.through.objects.using('default').count(), 1)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 1)
-
- # Check that queries work across m2m joins
- self.assertEquals(list(Book.objects.using('default').filter(authors__name='Marty Alchin').values_list('title', flat=True)),
- [u'Pro Django'])
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='Marty Alchin').values_list('title', flat=True)),
- [])
-
- self.assertEquals(list(Book.objects.using('default').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)),
- [])
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)),
- [u'Dive into Python'])
-
- # Reget the objects to clear caches
- dive = Book.objects.using('other').get(title="Dive into Python")
- mark = Person.objects.using('other').get(name="Mark Pilgrim")
-
- # Retrive related object by descriptor. Related objects should be database-baound
- self.assertEquals(list(dive.authors.all().values_list('name', flat=True)),
- [u'Mark Pilgrim'])
-
- self.assertEquals(list(mark.book_set.all().values_list('title', flat=True)),
- [u'Dive into Python'])
-
- def test_m2m_forward_operations(self):
- "M2M forward manipulations are all constrained to a single DB"
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
-
- # Save the author relations
- dive.authors = [mark]
-
- # Add a second author
- john = Person.objects.using('other').create(name="John Smith")
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='John Smith').values_list('title', flat=True)),
- [])
-
-
- dive.authors.add(john)
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)),
- [u'Dive into Python'])
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='John Smith').values_list('title', flat=True)),
- [u'Dive into Python'])
-
- # Remove the second author
- dive.authors.remove(john)
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)),
- [u'Dive into Python'])
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='John Smith').values_list('title', flat=True)),
- [])
-
- # Clear all authors
- dive.authors.clear()
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)),
- [])
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='John Smith').values_list('title', flat=True)),
- [])
-
- # Create an author through the m2m interface
- dive.authors.create(name='Jane Brown')
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)),
- [])
- self.assertEquals(list(Book.objects.using('other').filter(authors__name='Jane Brown').values_list('title', flat=True)),
- [u'Dive into Python'])
-
- def test_m2m_reverse_operations(self):
- "M2M reverse manipulations are all constrained to a single DB"
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
-
- # Save the author relations
- dive.authors = [mark]
-
- # Create a second book on the other database
- grease = Book.objects.using('other').create(title="Greasemonkey Hacks",
- published=datetime.date(2005, 11, 1))
-
- # Add a books to the m2m
- mark.book_set.add(grease)
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Dive into Python').values_list('name', flat=True)),
- [u'Mark Pilgrim'])
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Greasemonkey Hacks').values_list('name', flat=True)),
- [u'Mark Pilgrim'])
-
- # Remove a book from the m2m
- mark.book_set.remove(grease)
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Dive into Python').values_list('name', flat=True)),
- [u'Mark Pilgrim'])
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Greasemonkey Hacks').values_list('name', flat=True)),
- [])
-
- # Clear the books associated with mark
- mark.book_set.clear()
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Dive into Python').values_list('name', flat=True)),
- [])
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Greasemonkey Hacks').values_list('name', flat=True)),
- [])
-
- # Create a book through the m2m interface
- mark.book_set.create(title="Dive into HTML5", published=datetime.date(2020, 1, 1))
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Dive into Python').values_list('name', flat=True)),
- [])
- self.assertEquals(list(Person.objects.using('other').filter(book__title='Dive into HTML5').values_list('name', flat=True)),
- [u'Mark Pilgrim'])
-
- def test_m2m_cross_database_protection(self):
- "Operations that involve sharing M2M objects across databases raise an error"
- # Create a book and author on the default database
- pro = Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- marty = Person.objects.create(name="Marty Alchin")
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
- # Set a foreign key set with an object from a different database
- try:
- marty.book_set = [pro, dive]
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # Add to an m2m with an object from a different database
- try:
- marty.book_set.add(dive)
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # Set a m2m with an object from a different database
- try:
- marty.book_set = [pro, dive]
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # Add to a reverse m2m with an object from a different database
- try:
- dive.authors.add(marty)
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # Set a reverse m2m with an object from a different database
- try:
- dive.authors = [mark, marty]
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- def test_m2m_deletion(self):
- "Cascaded deletions of m2m relations issue queries on the right database"
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
- dive.authors = [mark]
-
- # Check the initial state
- self.assertEquals(Person.objects.using('default').count(), 0)
- self.assertEquals(Book.objects.using('default').count(), 0)
- self.assertEquals(Book.authors.through.objects.using('default').count(), 0)
-
- self.assertEquals(Person.objects.using('other').count(), 1)
- self.assertEquals(Book.objects.using('other').count(), 1)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 1)
-
- # Delete the object on the other database
- dive.delete(using='other')
-
- self.assertEquals(Person.objects.using('default').count(), 0)
- self.assertEquals(Book.objects.using('default').count(), 0)
- self.assertEquals(Book.authors.through.objects.using('default').count(), 0)
-
- # The person still exists ...
- self.assertEquals(Person.objects.using('other').count(), 1)
- # ... but the book has been deleted
- self.assertEquals(Book.objects.using('other').count(), 0)
- # ... and the relationship object has also been deleted.
- self.assertEquals(Book.authors.through.objects.using('other').count(), 0)
-
- # Now try deletion in the reverse direction. Set up the relation again
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
- dive.authors = [mark]
-
- # Check the initial state
- self.assertEquals(Person.objects.using('default').count(), 0)
- self.assertEquals(Book.objects.using('default').count(), 0)
- self.assertEquals(Book.authors.through.objects.using('default').count(), 0)
-
- self.assertEquals(Person.objects.using('other').count(), 1)
- self.assertEquals(Book.objects.using('other').count(), 1)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 1)
-
- # Delete the object on the other database
- mark.delete(using='other')
-
- self.assertEquals(Person.objects.using('default').count(), 0)
- self.assertEquals(Book.objects.using('default').count(), 0)
- self.assertEquals(Book.authors.through.objects.using('default').count(), 0)
-
- # The person has been deleted ...
- self.assertEquals(Person.objects.using('other').count(), 0)
- # ... but the book still exists
- self.assertEquals(Book.objects.using('other').count(), 1)
- # ... and the relationship object has been deleted.
- self.assertEquals(Book.authors.through.objects.using('other').count(), 0)
-
- def test_foreign_key_separation(self):
- "FK fields are constrained to a single database"
- # Create a book and author on the default database
- pro = Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- marty = Person.objects.create(name="Marty Alchin")
- george = Person.objects.create(name="George Vilches")
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
- chris = Person.objects.using('other').create(name="Chris Mills")
-
- # Save the author's favourite books
- pro.editor = george
- pro.save()
-
- dive.editor = chris
- dive.save()
-
- pro = Book.objects.using('default').get(title="Pro Django")
- self.assertEquals(pro.editor.name, "George Vilches")
-
- dive = Book.objects.using('other').get(title="Dive into Python")
- self.assertEquals(dive.editor.name, "Chris Mills")
-
- # Check that queries work across foreign key joins
- self.assertEquals(list(Person.objects.using('default').filter(edited__title='Pro Django').values_list('name', flat=True)),
- [u'George Vilches'])
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Pro Django').values_list('name', flat=True)),
- [])
-
- self.assertEquals(list(Person.objects.using('default').filter(edited__title='Dive into Python').values_list('name', flat=True)),
- [])
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)),
- [u'Chris Mills'])
-
- # Reget the objects to clear caches
- chris = Person.objects.using('other').get(name="Chris Mills")
- dive = Book.objects.using('other').get(title="Dive into Python")
-
- # Retrive related object by descriptor. Related objects should be database-baound
- self.assertEquals(list(chris.edited.values_list('title', flat=True)),
- [u'Dive into Python'])
-
- def test_foreign_key_reverse_operations(self):
- "FK reverse manipulations are all constrained to a single DB"
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
- chris = Person.objects.using('other').create(name="Chris Mills")
-
- # Save the author relations
- dive.editor = chris
- dive.save()
-
- # Add a second book edited by chris
- html5 = Book.objects.using('other').create(title="Dive into HTML5", published=datetime.date(2010, 3, 15))
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)),
- [])
-
- chris.edited.add(html5)
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)),
- [u'Chris Mills'])
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)),
- [u'Chris Mills'])
-
- # Remove the second editor
- chris.edited.remove(html5)
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)),
- [])
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)),
- [u'Chris Mills'])
-
- # Clear all edited books
- chris.edited.clear()
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)),
- [])
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)),
- [])
-
- # Create an author through the m2m interface
- chris.edited.create(title='Dive into Water', published=datetime.date(2010, 3, 15))
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)),
- [])
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into Water').values_list('name', flat=True)),
- [u'Chris Mills'])
- self.assertEquals(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)),
- [])
-
- def test_foreign_key_cross_database_protection(self):
- "Operations that involve sharing FK objects across databases raise an error"
- # Create a book and author on the default database
- pro = Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- marty = Person.objects.create(name="Marty Alchin")
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
-
- # Set a foreign key with an object from a different database
- try:
- dive.editor = marty
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # Set a foreign key set with an object from a different database
- try:
- marty.edited = [pro, dive]
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # Add to a foreign key set with an object from a different database
- try:
- marty.edited.add(dive)
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # BUT! if you assign a FK object when the base object hasn't
- # been saved yet, you implicitly assign the database for the
- # base object.
- chris = Person(name="Chris Mills")
- html5 = Book(title="Dive into HTML5", published=datetime.date(2010, 3, 15))
- # initially, no db assigned
- self.assertEquals(chris._state.db, None)
- self.assertEquals(html5._state.db, None)
-
- # old object comes from 'other', so the new object is set to use 'other'...
- dive.editor = chris
- html5.editor = mark
- self.assertEquals(chris._state.db, 'other')
- self.assertEquals(html5._state.db, 'other')
- # ... but it isn't saved yet
- self.assertEquals(list(Person.objects.using('other').values_list('name',flat=True)),
- [u'Mark Pilgrim'])
- self.assertEquals(list(Book.objects.using('other').values_list('title',flat=True)),
- [u'Dive into Python'])
-
- # When saved (no using required), new objects goes to 'other'
- chris.save()
- html5.save()
- self.assertEquals(list(Person.objects.using('default').values_list('name',flat=True)),
- [u'Marty Alchin'])
- self.assertEquals(list(Person.objects.using('other').values_list('name',flat=True)),
- [u'Chris Mills', u'Mark Pilgrim'])
- self.assertEquals(list(Book.objects.using('default').values_list('title',flat=True)),
- [u'Pro Django'])
- self.assertEquals(list(Book.objects.using('other').values_list('title',flat=True)),
- [u'Dive into HTML5', u'Dive into Python'])
-
- # This also works if you assign the FK in the constructor
- water = Book(title="Dive into Water", published=datetime.date(2001, 1, 1), editor=mark)
- self.assertEquals(water._state.db, 'other')
- # ... but it isn't saved yet
- self.assertEquals(list(Book.objects.using('default').values_list('title',flat=True)),
- [u'Pro Django'])
- self.assertEquals(list(Book.objects.using('other').values_list('title',flat=True)),
- [u'Dive into HTML5', u'Dive into Python'])
-
- # When saved, the new book goes to 'other'
- water.save()
- self.assertEquals(list(Book.objects.using('default').values_list('title',flat=True)),
- [u'Pro Django'])
- self.assertEquals(list(Book.objects.using('other').values_list('title',flat=True)),
- [u'Dive into HTML5', u'Dive into Python', u'Dive into Water'])
-
- def test_foreign_key_deletion(self):
- "Cascaded deletions of Foreign Key relations issue queries on the right database"
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
- fido = Pet.objects.using('other').create(name="Fido", owner=mark)
-
- # Check the initial state
- self.assertEquals(Person.objects.using('default').count(), 0)
- self.assertEquals(Pet.objects.using('default').count(), 0)
-
- self.assertEquals(Person.objects.using('other').count(), 1)
- self.assertEquals(Pet.objects.using('other').count(), 1)
-
- # Delete the person object, which will cascade onto the pet
- mark.delete(using='other')
-
- self.assertEquals(Person.objects.using('default').count(), 0)
- self.assertEquals(Pet.objects.using('default').count(), 0)
-
- # Both the pet and the person have been deleted from the right database
- self.assertEquals(Person.objects.using('other').count(), 0)
- self.assertEquals(Pet.objects.using('other').count(), 0)
-
- def test_foreign_key_validation(self):
- "ForeignKey.validate() uses the correct database"
- mickey = Person.objects.using('other').create(name="Mickey")
- pluto = Pet.objects.using('other').create(name="Pluto", owner=mickey)
- self.assertEquals(None, pluto.full_clean())
-
- def test_o2o_separation(self):
- "OneToOne fields are constrained to a single database"
- # Create a user and profile on the default database
- alice = User.objects.db_manager('default').create_user('alice', 'alice@example.com')
- alice_profile = UserProfile.objects.using('default').create(user=alice, flavor='chocolate')
-
- # Create a user and profile on the other database
- bob = User.objects.db_manager('other').create_user('bob', 'bob@example.com')
- bob_profile = UserProfile.objects.using('other').create(user=bob, flavor='crunchy frog')
-
- # Retrieve related objects; queries should be database constrained
- alice = User.objects.using('default').get(username="alice")
- self.assertEquals(alice.userprofile.flavor, "chocolate")
-
- bob = User.objects.using('other').get(username="bob")
- self.assertEquals(bob.userprofile.flavor, "crunchy frog")
-
- # Check that queries work across joins
- self.assertEquals(list(User.objects.using('default').filter(userprofile__flavor='chocolate').values_list('username', flat=True)),
- [u'alice'])
- self.assertEquals(list(User.objects.using('other').filter(userprofile__flavor='chocolate').values_list('username', flat=True)),
- [])
-
- self.assertEquals(list(User.objects.using('default').filter(userprofile__flavor='crunchy frog').values_list('username', flat=True)),
- [])
- self.assertEquals(list(User.objects.using('other').filter(userprofile__flavor='crunchy frog').values_list('username', flat=True)),
- [u'bob'])
-
- # Reget the objects to clear caches
- alice_profile = UserProfile.objects.using('default').get(flavor='chocolate')
- bob_profile = UserProfile.objects.using('other').get(flavor='crunchy frog')
-
- # Retrive related object by descriptor. Related objects should be database-baound
- self.assertEquals(alice_profile.user.username, 'alice')
- self.assertEquals(bob_profile.user.username, 'bob')
-
- def test_o2o_cross_database_protection(self):
- "Operations that involve sharing FK objects across databases raise an error"
- # Create a user and profile on the default database
- alice = User.objects.db_manager('default').create_user('alice', 'alice@example.com')
-
- # Create a user and profile on the other database
- bob = User.objects.db_manager('other').create_user('bob', 'bob@example.com')
-
- # Set a one-to-one relation with an object from a different database
- alice_profile = UserProfile.objects.using('default').create(user=alice, flavor='chocolate')
- try:
- bob.userprofile = alice_profile
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # BUT! if you assign a FK object when the base object hasn't
- # been saved yet, you implicitly assign the database for the
- # base object.
- bob_profile = UserProfile.objects.using('other').create(user=bob, flavor='crunchy frog')
-
- new_bob_profile = UserProfile(flavor="spring surprise")
-
- charlie = User(username='charlie',email='charlie@example.com')
- charlie.set_unusable_password()
-
- # initially, no db assigned
- self.assertEquals(new_bob_profile._state.db, None)
- self.assertEquals(charlie._state.db, None)
-
- # old object comes from 'other', so the new object is set to use 'other'...
- new_bob_profile.user = bob
- charlie.userprofile = bob_profile
- self.assertEquals(new_bob_profile._state.db, 'other')
- self.assertEquals(charlie._state.db, 'other')
-
- # ... but it isn't saved yet
- self.assertEquals(list(User.objects.using('other').values_list('username',flat=True)),
- [u'bob'])
- self.assertEquals(list(UserProfile.objects.using('other').values_list('flavor',flat=True)),
- [u'crunchy frog'])
-
- # When saved (no using required), new objects goes to 'other'
- charlie.save()
- bob_profile.save()
- new_bob_profile.save()
- self.assertEquals(list(User.objects.using('default').values_list('username',flat=True)),
- [u'alice'])
- self.assertEquals(list(User.objects.using('other').values_list('username',flat=True)),
- [u'bob', u'charlie'])
- self.assertEquals(list(UserProfile.objects.using('default').values_list('flavor',flat=True)),
- [u'chocolate'])
- self.assertEquals(list(UserProfile.objects.using('other').values_list('flavor',flat=True)),
- [u'crunchy frog', u'spring surprise'])
-
- # This also works if you assign the O2O relation in the constructor
- denise = User.objects.db_manager('other').create_user('denise','denise@example.com')
- denise_profile = UserProfile(flavor="tofu", user=denise)
-
- self.assertEquals(denise_profile._state.db, 'other')
- # ... but it isn't saved yet
- self.assertEquals(list(UserProfile.objects.using('default').values_list('flavor',flat=True)),
- [u'chocolate'])
- self.assertEquals(list(UserProfile.objects.using('other').values_list('flavor',flat=True)),
- [u'crunchy frog', u'spring surprise'])
-
- # When saved, the new profile goes to 'other'
- denise_profile.save()
- self.assertEquals(list(UserProfile.objects.using('default').values_list('flavor',flat=True)),
- [u'chocolate'])
- self.assertEquals(list(UserProfile.objects.using('other').values_list('flavor',flat=True)),
- [u'crunchy frog', u'spring surprise', u'tofu'])
-
- def test_generic_key_separation(self):
- "Generic fields are constrained to a single database"
- # Create a book and author on the default database
- pro = Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- review1 = Review.objects.create(source="Python Monthly", content_object=pro)
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- review2 = Review.objects.using('other').create(source="Python Weekly", content_object=dive)
-
- review1 = Review.objects.using('default').get(source="Python Monthly")
- self.assertEquals(review1.content_object.title, "Pro Django")
-
- review2 = Review.objects.using('other').get(source="Python Weekly")
- self.assertEquals(review2.content_object.title, "Dive into Python")
-
- # Reget the objects to clear caches
- dive = Book.objects.using('other').get(title="Dive into Python")
-
- # Retrive related object by descriptor. Related objects should be database-bound
- self.assertEquals(list(dive.reviews.all().values_list('source', flat=True)),
- [u'Python Weekly'])
-
- def test_generic_key_reverse_operations(self):
- "Generic reverse manipulations are all constrained to a single DB"
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- temp = Book.objects.using('other').create(title="Temp",
- published=datetime.date(2009, 5, 4))
-
- review1 = Review.objects.using('other').create(source="Python Weekly", content_object=dive)
- review2 = Review.objects.using('other').create(source="Python Monthly", content_object=temp)
-
- self.assertEquals(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)),
- [])
- self.assertEquals(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)),
- [u'Python Weekly'])
-
- # Add a second review
- dive.reviews.add(review2)
- self.assertEquals(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)),
- [])
- self.assertEquals(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)),
- [u'Python Monthly', u'Python Weekly'])
-
- # Remove the second author
- dive.reviews.remove(review1)
- self.assertEquals(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)),
- [])
- self.assertEquals(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)),
- [u'Python Monthly'])
-
- # Clear all reviews
- dive.reviews.clear()
- self.assertEquals(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)),
- [])
- self.assertEquals(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)),
- [])
-
- # Create an author through the generic interface
- dive.reviews.create(source='Python Daily')
- self.assertEquals(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)),
- [])
- self.assertEquals(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)),
- [u'Python Daily'])
-
- def test_generic_key_cross_database_protection(self):
- "Operations that involve sharing generic key objects across databases raise an error"
- # Create a book and author on the default database
- pro = Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- review1 = Review.objects.create(source="Python Monthly", content_object=pro)
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- review2 = Review.objects.using('other').create(source="Python Weekly", content_object=dive)
-
- # Set a foreign key with an object from a different database
- try:
- review1.content_object = dive
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # Add to a foreign key set with an object from a different database
- try:
- dive.reviews.add(review1)
- self.fail("Shouldn't be able to assign across databases")
- except ValueError:
- pass
-
- # BUT! if you assign a FK object when the base object hasn't
- # been saved yet, you implicitly assign the database for the
- # base object.
- review3 = Review(source="Python Daily")
- # initially, no db assigned
- self.assertEquals(review3._state.db, None)
-
- # Dive comes from 'other', so review3 is set to use 'other'...
- review3.content_object = dive
- self.assertEquals(review3._state.db, 'other')
- # ... but it isn't saved yet
- self.assertEquals(list(Review.objects.using('default').filter(object_id=pro.pk).values_list('source', flat=True)),
- [u'Python Monthly'])
- self.assertEquals(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source',flat=True)),
- [u'Python Weekly'])
-
- # When saved, John goes to 'other'
- review3.save()
- self.assertEquals(list(Review.objects.using('default').filter(object_id=pro.pk).values_list('source', flat=True)),
- [u'Python Monthly'])
- self.assertEquals(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source',flat=True)),
- [u'Python Daily', u'Python Weekly'])
-
- def test_generic_key_deletion(self):
- "Cascaded deletions of Generic Key relations issue queries on the right database"
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
- review = Review.objects.using('other').create(source="Python Weekly", content_object=dive)
-
- # Check the initial state
- self.assertEquals(Book.objects.using('default').count(), 0)
- self.assertEquals(Review.objects.using('default').count(), 0)
-
- self.assertEquals(Book.objects.using('other').count(), 1)
- self.assertEquals(Review.objects.using('other').count(), 1)
-
- # Delete the Book object, which will cascade onto the pet
- dive.delete(using='other')
-
- self.assertEquals(Book.objects.using('default').count(), 0)
- self.assertEquals(Review.objects.using('default').count(), 0)
-
- # Both the pet and the person have been deleted from the right database
- self.assertEquals(Book.objects.using('other').count(), 0)
- self.assertEquals(Review.objects.using('other').count(), 0)
-
- def test_ordering(self):
- "get_next_by_XXX commands stick to a single database"
- pro = Book.objects.create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- learn = Book.objects.using('other').create(title="Learning Python",
- published=datetime.date(2008, 7, 16))
-
- self.assertEquals(learn.get_next_by_published().title, "Dive into Python")
- self.assertEquals(dive.get_previous_by_published().title, "Learning Python")
-
- def test_raw(self):
- "test the raw() method across databases"
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
- val = Book.objects.db_manager("other").raw('SELECT id FROM multiple_database_book')
- self.assertEqual(map(lambda o: o.pk, val), [dive.pk])
-
- val = Book.objects.raw('SELECT id FROM multiple_database_book').using('other')
- self.assertEqual(map(lambda o: o.pk, val), [dive.pk])
-
- def test_select_related(self):
- "Database assignment is retained if an object is retrieved with select_related()"
- # Create a book and author on the other database
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4),
- editor=mark)
-
- # Retrieve the Person using select_related()
- book = Book.objects.using('other').select_related('editor').get(title="Dive into Python")
-
- # The editor instance should have a db state
- self.assertEqual(book.editor._state.db, 'other')
-
- def test_subquery(self):
- """Make sure as_sql works with subqueries and master/slave."""
- sub = Person.objects.using('other').filter(name='fff')
- qs = Book.objects.filter(editor__in=sub)
-
- # When you call __str__ on the query object, it doesn't know about using
- # so it falls back to the default. If the subquery explicitly uses a
- # different database, an error should be raised.
- self.assertRaises(ValueError, str, qs.query)
-
- # Evaluating the query shouldn't work, either
- try:
- for obj in qs:
- pass
- self.fail('Iterating over query should raise ValueError')
- except ValueError:
- pass
-
- def test_related_manager(self):
- "Related managers return managers, not querysets"
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
-
- # extra_arg is removed by the BookManager's implementation of
- # create(); but the BookManager's implementation won't get called
- # unless edited returns a Manager, not a queryset
- mark.book_set.create(title="Dive into Python",
- published=datetime.date(2009, 5, 4),
- extra_arg=True)
-
- mark.book_set.get_or_create(title="Dive into Python",
- published=datetime.date(2009, 5, 4),
- extra_arg=True)
-
- mark.edited.create(title="Dive into Water",
- published=datetime.date(2009, 5, 4),
- extra_arg=True)
-
- mark.edited.get_or_create(title="Dive into Water",
- published=datetime.date(2009, 5, 4),
- extra_arg=True)
-
-class TestRouter(object):
- # A test router. The behaviour is vaguely master/slave, but the
- # databases aren't assumed to propagate changes.
- def db_for_read(self, model, instance=None, **hints):
- if instance:
- return instance._state.db or 'other'
- return 'other'
-
- def db_for_write(self, model, **hints):
- return DEFAULT_DB_ALIAS
-
- def allow_relation(self, obj1, obj2, **hints):
- return obj1._state.db in ('default', 'other') and obj2._state.db in ('default', 'other')
-
- def allow_syncdb(self, db, model):
- return True
-
-class AuthRouter(object):
- """A router to control all database operations on models in
- the contrib.auth application"""
-
- def db_for_read(self, model, **hints):
- "Point all read operations on auth models to 'default'"
- if model._meta.app_label == 'auth':
- # We use default here to ensure we can tell the difference
- # between a read request and a write request for Auth objects
- return 'default'
- return None
-
- def db_for_write(self, model, **hints):
- "Point all operations on auth models to 'other'"
- if model._meta.app_label == 'auth':
- return 'other'
- return None
-
- def allow_relation(self, obj1, obj2, **hints):
- "Allow any relation if a model in Auth is involved"
- if obj1._meta.app_label == 'auth' or obj2._meta.app_label == 'auth':
- return True
- return None
-
- def allow_syncdb(self, db, model):
- "Make sure the auth app only appears on the 'other' db"
- if db == 'other':
- return model._meta.app_label == 'auth'
- elif model._meta.app_label == 'auth':
- return False
- return None
-
-class WriteRouter(object):
- # A router that only expresses an opinion on writes
- def db_for_write(self, model, **hints):
- return 'writer'
-
-class RouterTestCase(TestCase):
- multi_db = True
-
- def setUp(self):
- # Make the 'other' database appear to be a slave of the 'default'
- self.old_routers = router.routers
- router.routers = [TestRouter()]
-
- def tearDown(self):
- # Restore the 'other' database as an independent database
- router.routers = self.old_routers
-
- def test_db_selection(self):
- "Check that querysets obey the router for db suggestions"
- self.assertEquals(Book.objects.db, 'other')
- self.assertEquals(Book.objects.all().db, 'other')
-
- self.assertEquals(Book.objects.using('default').db, 'default')
-
- self.assertEquals(Book.objects.db_manager('default').db, 'default')
- self.assertEquals(Book.objects.db_manager('default').all().db, 'default')
-
- def test_syncdb_selection(self):
- "Synchronization behaviour is predicatable"
-
- self.assertTrue(router.allow_syncdb('default', User))
- self.assertTrue(router.allow_syncdb('default', Book))
-
- self.assertTrue(router.allow_syncdb('other', User))
- self.assertTrue(router.allow_syncdb('other', Book))
-
- # Add the auth router to the chain.
- # TestRouter is a universal synchronizer, so it should have no effect.
- router.routers = [TestRouter(), AuthRouter()]
-
- self.assertTrue(router.allow_syncdb('default', User))
- self.assertTrue(router.allow_syncdb('default', Book))
-
- self.assertTrue(router.allow_syncdb('other', User))
- self.assertTrue(router.allow_syncdb('other', Book))
-
- # Now check what happens if the router order is the other way around
- router.routers = [AuthRouter(), TestRouter()]
-
- self.assertFalse(router.allow_syncdb('default', User))
- self.assertTrue(router.allow_syncdb('default', Book))
-
- self.assertTrue(router.allow_syncdb('other', User))
- self.assertFalse(router.allow_syncdb('other', Book))
-
- def test_partial_router(self):
- "A router can choose to implement a subset of methods"
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- # First check the baseline behaviour
-
- self.assertEquals(router.db_for_read(User), 'other')
- self.assertEquals(router.db_for_read(Book), 'other')
-
- self.assertEquals(router.db_for_write(User), 'default')
- self.assertEquals(router.db_for_write(Book), 'default')
-
- self.assertTrue(router.allow_relation(dive, dive))
-
- self.assertTrue(router.allow_syncdb('default', User))
- self.assertTrue(router.allow_syncdb('default', Book))
-
- router.routers = [WriteRouter(), AuthRouter(), TestRouter()]
-
- self.assertEquals(router.db_for_read(User), 'default')
- self.assertEquals(router.db_for_read(Book), 'other')
-
- self.assertEquals(router.db_for_write(User), 'writer')
- self.assertEquals(router.db_for_write(Book), 'writer')
-
- self.assertTrue(router.allow_relation(dive, dive))
-
- self.assertFalse(router.allow_syncdb('default', User))
- self.assertTrue(router.allow_syncdb('default', Book))
-
-
- def test_database_routing(self):
- marty = Person.objects.using('default').create(name="Marty Alchin")
- pro = Book.objects.using('default').create(title="Pro Django",
- published=datetime.date(2008, 12, 16),
- editor=marty)
- pro.authors = [marty]
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- # An update query will be routed to the default database
- Book.objects.filter(title='Pro Django').update(pages=200)
-
- try:
- # By default, the get query will be directed to 'other'
- Book.objects.get(title='Pro Django')
- self.fail("Shouldn't be able to find the book")
- except Book.DoesNotExist:
- pass
-
- # But the same query issued explicitly at a database will work.
- pro = Book.objects.using('default').get(title='Pro Django')
-
- # Check that the update worked.
- self.assertEquals(pro.pages, 200)
-
- # An update query with an explicit using clause will be routed
- # to the requested database.
- Book.objects.using('other').filter(title='Dive into Python').update(pages=300)
- self.assertEquals(Book.objects.get(title='Dive into Python').pages, 300)
-
- # Related object queries stick to the same database
- # as the original object, regardless of the router
- self.assertEquals(list(pro.authors.values_list('name', flat=True)), [u'Marty Alchin'])
- self.assertEquals(pro.editor.name, u'Marty Alchin')
-
- # get_or_create is a special case. The get needs to be targetted at
- # the write database in order to avoid potential transaction
- # consistency problems
- book, created = Book.objects.get_or_create(title="Pro Django")
- self.assertFalse(created)
-
- book, created = Book.objects.get_or_create(title="Dive Into Python",
- defaults={'published':datetime.date(2009, 5, 4)})
- self.assertTrue(created)
-
- # Check the head count of objects
- self.assertEquals(Book.objects.using('default').count(), 2)
- self.assertEquals(Book.objects.using('other').count(), 1)
- # If a database isn't specified, the read database is used
- self.assertEquals(Book.objects.count(), 1)
-
- # A delete query will also be routed to the default database
- Book.objects.filter(pages__gt=150).delete()
-
- # The default database has lost the book.
- self.assertEquals(Book.objects.using('default').count(), 1)
- self.assertEquals(Book.objects.using('other').count(), 1)
-
- def test_foreign_key_cross_database_protection(self):
- "Foreign keys can cross databases if they two databases have a common source"
- # Create a book and author on the default database
- pro = Book.objects.using('default').create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- marty = Person.objects.using('default').create(name="Marty Alchin")
-
- # Create a book and author on the other database
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
-
- # Set a foreign key with an object from a different database
- try:
- dive.editor = marty
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments of original objects haven't changed...
- self.assertEquals(marty._state.db, 'default')
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(mark._state.db, 'other')
-
- # ... but they will when the affected object is saved.
- dive.save()
- self.assertEquals(dive._state.db, 'default')
-
- # ...and the source database now has a copy of any object saved
- try:
- Book.objects.using('default').get(title='Dive into Python').delete()
- except Book.DoesNotExist:
- self.fail('Source database should have a copy of saved object')
-
- # This isn't a real master-slave database, so restore the original from other
- dive = Book.objects.using('other').get(title='Dive into Python')
- self.assertEquals(dive._state.db, 'other')
-
- # Set a foreign key set with an object from a different database
- try:
- marty.edited = [pro, dive]
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Assignment implies a save, so database assignments of original objects have changed...
- self.assertEquals(marty._state.db, 'default')
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(dive._state.db, 'default')
- self.assertEquals(mark._state.db, 'other')
-
- # ...and the source database now has a copy of any object saved
- try:
- Book.objects.using('default').get(title='Dive into Python').delete()
- except Book.DoesNotExist:
- self.fail('Source database should have a copy of saved object')
-
- # This isn't a real master-slave database, so restore the original from other
- dive = Book.objects.using('other').get(title='Dive into Python')
- self.assertEquals(dive._state.db, 'other')
-
- # Add to a foreign key set with an object from a different database
- try:
- marty.edited.add(dive)
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Add implies a save, so database assignments of original objects have changed...
- self.assertEquals(marty._state.db, 'default')
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(dive._state.db, 'default')
- self.assertEquals(mark._state.db, 'other')
-
- # ...and the source database now has a copy of any object saved
- try:
- Book.objects.using('default').get(title='Dive into Python').delete()
- except Book.DoesNotExist:
- self.fail('Source database should have a copy of saved object')
-
- # This isn't a real master-slave database, so restore the original from other
- dive = Book.objects.using('other').get(title='Dive into Python')
-
- # If you assign a FK object when the base object hasn't
- # been saved yet, you implicitly assign the database for the
- # base object.
- chris = Person(name="Chris Mills")
- html5 = Book(title="Dive into HTML5", published=datetime.date(2010, 3, 15))
- # initially, no db assigned
- self.assertEquals(chris._state.db, None)
- self.assertEquals(html5._state.db, None)
-
- # old object comes from 'other', so the new object is set to use the
- # source of 'other'...
- self.assertEquals(dive._state.db, 'other')
- dive.editor = chris
- html5.editor = mark
-
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(mark._state.db, 'other')
- self.assertEquals(chris._state.db, 'default')
- self.assertEquals(html5._state.db, 'default')
-
- # This also works if you assign the FK in the constructor
- water = Book(title="Dive into Water", published=datetime.date(2001, 1, 1), editor=mark)
- self.assertEquals(water._state.db, 'default')
-
- # If you create an object through a FK relation, it will be
- # written to the write database, even if the original object
- # was on the read database
- cheesecake = mark.edited.create(title='Dive into Cheesecake', published=datetime.date(2010, 3, 15))
- self.assertEquals(cheesecake._state.db, 'default')
-
- # Same goes for get_or_create, regardless of whether getting or creating
- cheesecake, created = mark.edited.get_or_create(title='Dive into Cheesecake', published=datetime.date(2010, 3, 15))
- self.assertEquals(cheesecake._state.db, 'default')
-
- puddles, created = mark.edited.get_or_create(title='Dive into Puddles', published=datetime.date(2010, 3, 15))
- self.assertEquals(puddles._state.db, 'default')
-
- def test_m2m_cross_database_protection(self):
- "M2M relations can cross databases if the database share a source"
- # Create books and authors on the inverse to the usual database
- pro = Book.objects.using('other').create(pk=1, title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- marty = Person.objects.using('other').create(pk=1, name="Marty Alchin")
-
- dive = Book.objects.using('default').create(pk=2, title="Dive into Python",
- published=datetime.date(2009, 5, 4))
-
- mark = Person.objects.using('default').create(pk=2, name="Mark Pilgrim")
-
- # Now save back onto the usual databse.
- # This simulates master/slave - the objects exist on both database,
- # but the _state.db is as it is for all other tests.
- pro.save(using='default')
- marty.save(using='default')
- dive.save(using='other')
- mark.save(using='other')
-
- # Check that we have 2 of both types of object on both databases
- self.assertEquals(Book.objects.using('default').count(), 2)
- self.assertEquals(Book.objects.using('other').count(), 2)
- self.assertEquals(Person.objects.using('default').count(), 2)
- self.assertEquals(Person.objects.using('other').count(), 2)
-
- # Set a m2m set with an object from a different database
- try:
- marty.book_set = [pro, dive]
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments don't change
- self.assertEquals(marty._state.db, 'default')
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(mark._state.db, 'other')
-
- # All m2m relations should be saved on the default database
- self.assertEquals(Book.authors.through.objects.using('default').count(), 2)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 0)
-
- # Reset relations
- Book.authors.through.objects.using('default').delete()
-
- # Add to an m2m with an object from a different database
- try:
- marty.book_set.add(dive)
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments don't change
- self.assertEquals(marty._state.db, 'default')
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(mark._state.db, 'other')
-
- # All m2m relations should be saved on the default database
- self.assertEquals(Book.authors.through.objects.using('default').count(), 1)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 0)
-
- # Reset relations
- Book.authors.through.objects.using('default').delete()
-
- # Set a reverse m2m with an object from a different database
- try:
- dive.authors = [mark, marty]
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments don't change
- self.assertEquals(marty._state.db, 'default')
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(mark._state.db, 'other')
-
- # All m2m relations should be saved on the default database
- self.assertEquals(Book.authors.through.objects.using('default').count(), 2)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 0)
-
- # Reset relations
- Book.authors.through.objects.using('default').delete()
-
- self.assertEquals(Book.authors.through.objects.using('default').count(), 0)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 0)
-
- # Add to a reverse m2m with an object from a different database
- try:
- dive.authors.add(marty)
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments don't change
- self.assertEquals(marty._state.db, 'default')
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(mark._state.db, 'other')
-
- # All m2m relations should be saved on the default database
- self.assertEquals(Book.authors.through.objects.using('default').count(), 1)
- self.assertEquals(Book.authors.through.objects.using('other').count(), 0)
-
- # If you create an object through a M2M relation, it will be
- # written to the write database, even if the original object
- # was on the read database
- alice = dive.authors.create(name='Alice')
- self.assertEquals(alice._state.db, 'default')
-
- # Same goes for get_or_create, regardless of whether getting or creating
- alice, created = dive.authors.get_or_create(name='Alice')
- self.assertEquals(alice._state.db, 'default')
-
- bob, created = dive.authors.get_or_create(name='Bob')
- self.assertEquals(bob._state.db, 'default')
-
- def test_o2o_cross_database_protection(self):
- "Operations that involve sharing FK objects across databases raise an error"
- # Create a user and profile on the default database
- alice = User.objects.db_manager('default').create_user('alice', 'alice@example.com')
-
- # Create a user and profile on the other database
- bob = User.objects.db_manager('other').create_user('bob', 'bob@example.com')
-
- # Set a one-to-one relation with an object from a different database
- alice_profile = UserProfile.objects.create(user=alice, flavor='chocolate')
- try:
- bob.userprofile = alice_profile
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments of original objects haven't changed...
- self.assertEquals(alice._state.db, 'default')
- self.assertEquals(alice_profile._state.db, 'default')
- self.assertEquals(bob._state.db, 'other')
-
- # ... but they will when the affected object is saved.
- bob.save()
- self.assertEquals(bob._state.db, 'default')
-
- def test_generic_key_cross_database_protection(self):
- "Generic Key operations can span databases if they share a source"
- # Create a book and author on the default database
- pro = Book.objects.using('default'
- ).create(title="Pro Django", published=datetime.date(2008, 12, 16))
-
- review1 = Review.objects.using('default'
- ).create(source="Python Monthly", content_object=pro)
-
- # Create a book and author on the other database
- dive = Book.objects.using('other'
- ).create(title="Dive into Python", published=datetime.date(2009, 5, 4))
-
- review2 = Review.objects.using('other'
- ).create(source="Python Weekly", content_object=dive)
-
- # Set a generic foreign key with an object from a different database
- try:
- review1.content_object = dive
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments of original objects haven't changed...
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(review1._state.db, 'default')
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(review2._state.db, 'other')
-
- # ... but they will when the affected object is saved.
- dive.save()
- self.assertEquals(review1._state.db, 'default')
- self.assertEquals(dive._state.db, 'default')
-
- # ...and the source database now has a copy of any object saved
- try:
- Book.objects.using('default').get(title='Dive into Python').delete()
- except Book.DoesNotExist:
- self.fail('Source database should have a copy of saved object')
-
- # This isn't a real master-slave database, so restore the original from other
- dive = Book.objects.using('other').get(title='Dive into Python')
- self.assertEquals(dive._state.db, 'other')
-
- # Add to a generic foreign key set with an object from a different database
- try:
- dive.reviews.add(review1)
- except ValueError:
- self.fail("Assignment across master/slave databases with a common source should be ok")
-
- # Database assignments of original objects haven't changed...
- self.assertEquals(pro._state.db, 'default')
- self.assertEquals(review1._state.db, 'default')
- self.assertEquals(dive._state.db, 'other')
- self.assertEquals(review2._state.db, 'other')
-
- # ... but they will when the affected object is saved.
- dive.save()
- self.assertEquals(dive._state.db, 'default')
-
- # ...and the source database now has a copy of any object saved
- try:
- Book.objects.using('default').get(title='Dive into Python').delete()
- except Book.DoesNotExist:
- self.fail('Source database should have a copy of saved object')
-
- # BUT! if you assign a FK object when the base object hasn't
- # been saved yet, you implicitly assign the database for the
- # base object.
- review3 = Review(source="Python Daily")
- # initially, no db assigned
- self.assertEquals(review3._state.db, None)
-
- # Dive comes from 'other', so review3 is set to use the source of 'other'...
- review3.content_object = dive
- self.assertEquals(review3._state.db, 'default')
-
- # If you create an object through a M2M relation, it will be
- # written to the write database, even if the original object
- # was on the read database
- dive = Book.objects.using('other').get(title='Dive into Python')
- nyt = dive.reviews.create(source="New York Times", content_object=dive)
- self.assertEquals(nyt._state.db, 'default')
-
- def test_m2m_managers(self):
- "M2M relations are represented by managers, and can be controlled like managers"
- pro = Book.objects.using('other').create(pk=1, title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- marty = Person.objects.using('other').create(pk=1, name="Marty Alchin")
- pro.authors = [marty]
-
- self.assertEquals(pro.authors.db, 'other')
- self.assertEquals(pro.authors.db_manager('default').db, 'default')
- self.assertEquals(pro.authors.db_manager('default').all().db, 'default')
-
- self.assertEquals(marty.book_set.db, 'other')
- self.assertEquals(marty.book_set.db_manager('default').db, 'default')
- self.assertEquals(marty.book_set.db_manager('default').all().db, 'default')
-
- def test_foreign_key_managers(self):
- "FK reverse relations are represented by managers, and can be controlled like managers"
- marty = Person.objects.using('other').create(pk=1, name="Marty Alchin")
- pro = Book.objects.using('other').create(pk=1, title="Pro Django",
- published=datetime.date(2008, 12, 16),
- editor=marty)
-
- self.assertEquals(marty.edited.db, 'other')
- self.assertEquals(marty.edited.db_manager('default').db, 'default')
- self.assertEquals(marty.edited.db_manager('default').all().db, 'default')
-
- def test_generic_key_managers(self):
- "Generic key relations are represented by managers, and can be controlled like managers"
- pro = Book.objects.using('other').create(title="Pro Django",
- published=datetime.date(2008, 12, 16))
-
- review1 = Review.objects.using('other').create(source="Python Monthly",
- content_object=pro)
-
- self.assertEquals(pro.reviews.db, 'other')
- self.assertEquals(pro.reviews.db_manager('default').db, 'default')
- self.assertEquals(pro.reviews.db_manager('default').all().db, 'default')
-
- def test_subquery(self):
- """Make sure as_sql works with subqueries and master/slave."""
- # Create a book and author on the other database
-
- mark = Person.objects.using('other').create(name="Mark Pilgrim")
- dive = Book.objects.using('other').create(title="Dive into Python",
- published=datetime.date(2009, 5, 4),
- editor=mark)
-
- sub = Person.objects.filter(name='Mark Pilgrim')
- qs = Book.objects.filter(editor__in=sub)
-
- # When you call __str__ on the query object, it doesn't know about using
- # so it falls back to the default. Don't let routing instructions
- # force the subquery to an incompatible database.
- str(qs.query)
-
- # If you evaluate the query, it should work, running on 'other'
- self.assertEquals(list(qs.values_list('title', flat=True)), [u'Dive into Python'])
-
-class AuthTestCase(TestCase):
- multi_db = True
-
- def setUp(self):
- # Make the 'other' database appear to be a slave of the 'default'
- self.old_routers = router.routers
- router.routers = [AuthRouter()]
-
- def tearDown(self):
- # Restore the 'other' database as an independent database
- router.routers = self.old_routers
-
- def test_auth_manager(self):
- "The methods on the auth manager obey database hints"
- # Create one user using default allocation policy
- User.objects.create_user('alice', 'alice@example.com')
-
- # Create another user, explicitly specifying the database
- User.objects.db_manager('default').create_user('bob', 'bob@example.com')
-
- # The second user only exists on the other database
- alice = User.objects.using('other').get(username='alice')
-
- self.assertEquals(alice.username, 'alice')
- self.assertEquals(alice._state.db, 'other')
-
- self.assertRaises(User.DoesNotExist, User.objects.using('default').get, username='alice')
-
- # The second user only exists on the default database
- bob = User.objects.using('default').get(username='bob')
-
- self.assertEquals(bob.username, 'bob')
- self.assertEquals(bob._state.db, 'default')
-
- self.assertRaises(User.DoesNotExist, User.objects.using('other').get, username='bob')
-
- # That is... there is one user on each database
- self.assertEquals(User.objects.using('default').count(), 1)
- self.assertEquals(User.objects.using('other').count(), 1)
-
- def test_dumpdata(self):
- "Check that dumpdata honors allow_syncdb restrictions on the router"
- User.objects.create_user('alice', 'alice@example.com')
- User.objects.db_manager('default').create_user('bob', 'bob@example.com')
-
- # Check that dumping the default database doesn't try to include auth
- # because allow_syncdb prohibits auth on default
- new_io = StringIO()
- management.call_command('dumpdata', 'auth', format='json', database='default', stdout=new_io)
- command_output = new_io.getvalue().strip()
- self.assertEqual(command_output, '[]')
-
- # Check that dumping the other database does include auth
- new_io = StringIO()
- management.call_command('dumpdata', 'auth', format='json', database='other', stdout=new_io)
- command_output = new_io.getvalue().strip()
- self.assertTrue('"email": "alice@example.com",' in command_output)
-
-_missing = object()
-class UserProfileTestCase(TestCase):
- def setUp(self):
- self.old_auth_profile_module = getattr(settings, 'AUTH_PROFILE_MODULE', _missing)
- settings.AUTH_PROFILE_MODULE = 'multiple_database.UserProfile'
-
- def tearDown(self):
- if self.old_auth_profile_module is _missing:
- del settings.AUTH_PROFILE_MODULE
- else:
- settings.AUTH_PROFILE_MODULE = self.old_auth_profile_module
-
- def test_user_profiles(self):
-
- alice = User.objects.create_user('alice', 'alice@example.com')
- bob = User.objects.db_manager('other').create_user('bob', 'bob@example.com')
-
- alice_profile = UserProfile(user=alice, flavor='chocolate')
- alice_profile.save()
-
- bob_profile = UserProfile(user=bob, flavor='crunchy frog')
- bob_profile.save()
-
- self.assertEquals(alice.get_profile().flavor, 'chocolate')
- self.assertEquals(bob.get_profile().flavor, 'crunchy frog')
-
-class AntiPetRouter(object):
- # A router that only expresses an opinion on syncdb,
- # passing pets to the 'other' database
-
- def allow_syncdb(self, db, model):
- "Make sure the auth app only appears on the 'other' db"
- if db == 'other':
- return model._meta.object_name == 'Pet'
- else:
- return model._meta.object_name != 'Pet'
- return None
-
-class FixtureTestCase(TestCase):
- multi_db = True
- fixtures = ['multidb-common', 'multidb']
-
- def setUp(self):
- # Install the anti-pet router
- self.old_routers = router.routers
- router.routers = [AntiPetRouter()]
-
- def tearDown(self):
- # Restore the 'other' database as an independent database
- router.routers = self.old_routers
-
- def test_fixture_loading(self):
- "Multi-db fixtures are loaded correctly"
- # Check that "Pro Django" exists on the default database, but not on other database
- try:
- Book.objects.get(title="Pro Django")
- Book.objects.using('default').get(title="Pro Django")
- except Book.DoesNotExist:
- self.fail('"Pro Django" should exist on default database')
-
- self.assertRaises(Book.DoesNotExist,
- Book.objects.using('other').get,
- title="Pro Django"
- )
-
- # Check that "Dive into Python" exists on the default database, but not on other database
- try:
- Book.objects.using('other').get(title="Dive into Python")
- except Book.DoesNotExist:
- self.fail('"Dive into Python" should exist on other database')
-
- self.assertRaises(Book.DoesNotExist,
- Book.objects.get,
- title="Dive into Python"
- )
- self.assertRaises(Book.DoesNotExist,
- Book.objects.using('default').get,
- title="Dive into Python"
- )
-
- # Check that "Definitive Guide" exists on the both databases
- try:
- Book.objects.get(title="The Definitive Guide to Django")
- Book.objects.using('default').get(title="The Definitive Guide to Django")
- Book.objects.using('other').get(title="The Definitive Guide to Django")
- except Book.DoesNotExist:
- self.fail('"The Definitive Guide to Django" should exist on both databases')
-
- def test_pseudo_empty_fixtures(self):
- "A fixture can contain entries, but lead to nothing in the database; this shouldn't raise an error (ref #14068)"
- new_io = StringIO()
- management.call_command('loaddata', 'pets', stdout=new_io, stderr=new_io)
- command_output = new_io.getvalue().strip()
- # No objects will actually be loaded
- self.assertTrue("Installed 0 object(s) (of 2) from 1 fixture(s)" in command_output)
-
-class PickleQuerySetTestCase(TestCase):
- multi_db = True
-
- def test_pickling(self):
- for db in connections:
- Book.objects.using(db).create(title='Dive into Python', published=datetime.date(2009, 5, 4))
- qs = Book.objects.all()
- self.assertEqual(qs.db, pickle.loads(pickle.dumps(qs)).db)
diff --git a/parts/django/tests/regressiontests/null_fk/__init__.py b/parts/django/tests/regressiontests/null_fk/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/null_fk/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/null_fk/models.py b/parts/django/tests/regressiontests/null_fk/models.py
deleted file mode 100644
index 3cce319..0000000
--- a/parts/django/tests/regressiontests/null_fk/models.py
+++ /dev/null
@@ -1,33 +0,0 @@
-"""
-Regression tests for proper working of ForeignKey(null=True).
-"""
-
-from django.db import models
-
-class SystemDetails(models.Model):
- details = models.TextField()
-
-class SystemInfo(models.Model):
- system_details = models.ForeignKey(SystemDetails)
- system_name = models.CharField(max_length=32)
-
-class Forum(models.Model):
- system_info = models.ForeignKey(SystemInfo)
- forum_name = models.CharField(max_length=32)
-
-class Post(models.Model):
- forum = models.ForeignKey(Forum, null=True)
- title = models.CharField(max_length=32)
-
- def __unicode__(self):
- return self.title
-
-class Comment(models.Model):
- post = models.ForeignKey(Post, null=True)
- comment_text = models.CharField(max_length=250)
-
- class Meta:
- ordering = ('comment_text',)
-
- def __unicode__(self):
- return self.comment_text
diff --git a/parts/django/tests/regressiontests/null_fk/tests.py b/parts/django/tests/regressiontests/null_fk/tests.py
deleted file mode 100644
index 449f343..0000000
--- a/parts/django/tests/regressiontests/null_fk/tests.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from django.test import TestCase
-
-from regressiontests.null_fk.models import *
-
-class NullFkTests(TestCase):
-
- def test_null_fk(self):
- d = SystemDetails.objects.create(details='First details')
- s = SystemInfo.objects.create(system_name='First forum', system_details=d)
- f = Forum.objects.create(system_info=s, forum_name='First forum')
- p = Post.objects.create(forum=f, title='First Post')
- c1 = Comment.objects.create(post=p, comment_text='My first comment')
- c2 = Comment.objects.create(comment_text='My second comment')
-
- # Starting from comment, make sure that a .select_related(...) with a specified
- # set of fields will properly LEFT JOIN multiple levels of NULLs (and the things
- # that come after the NULLs, or else data that should exist won't). Regression
- # test for #7369.
- c = Comment.objects.select_related().get(id=1)
- self.assertEquals(c.post, p)
- self.assertEquals(Comment.objects.select_related().get(id=2).post, None)
-
- self.assertQuerysetEqual(
- Comment.objects.select_related('post__forum__system_info').all(),
- [
- (1, u'My first comment', '<Post: First Post>'),
- (2, u'My second comment', 'None')
- ],
- transform = lambda c: (c.id, c.comment_text, repr(c.post))
- )
-
- # Regression test for #7530, #7716.
- self.assertTrue(Comment.objects.select_related('post').filter(post__isnull=True)[0].post is None)
-
- self.assertQuerysetEqual(
- Comment.objects.select_related('post__forum__system_info__system_details'),
- [
- (1, u'My first comment', '<Post: First Post>'),
- (2, u'My second comment', 'None')
- ],
- transform = lambda c: (c.id, c.comment_text, repr(c.post))
- )
diff --git a/parts/django/tests/regressiontests/null_fk_ordering/__init__.py b/parts/django/tests/regressiontests/null_fk_ordering/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/null_fk_ordering/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/null_fk_ordering/models.py b/parts/django/tests/regressiontests/null_fk_ordering/models.py
deleted file mode 100644
index d0635e8..0000000
--- a/parts/django/tests/regressiontests/null_fk_ordering/models.py
+++ /dev/null
@@ -1,49 +0,0 @@
-"""
-Regression tests for proper working of ForeignKey(null=True). Tests these bugs:
-
- * #7512: including a nullable foreign key reference in Meta ordering has un
-xpected results
-
-"""
-
-from django.db import models
-
-# The first two models represent a very simple null FK ordering case.
-class Author(models.Model):
- name = models.CharField(max_length=150)
-
-class Article(models.Model):
- title = models.CharField(max_length=150)
- author = models.ForeignKey(Author, null=True)
-
- def __unicode__(self):
- return u'Article titled: %s' % (self.title, )
-
- class Meta:
- ordering = ['author__name', ]
-
-
-# These following 4 models represent a far more complex ordering case.
-class SystemInfo(models.Model):
- system_name = models.CharField(max_length=32)
-
-class Forum(models.Model):
- system_info = models.ForeignKey(SystemInfo)
- forum_name = models.CharField(max_length=32)
-
-class Post(models.Model):
- forum = models.ForeignKey(Forum, null=True)
- title = models.CharField(max_length=32)
-
- def __unicode__(self):
- return self.title
-
-class Comment(models.Model):
- post = models.ForeignKey(Post, null=True)
- comment_text = models.CharField(max_length=250)
-
- class Meta:
- ordering = ['post__forum__system_info__system_name', 'comment_text']
-
- def __unicode__(self):
- return self.comment_text
diff --git a/parts/django/tests/regressiontests/null_fk_ordering/tests.py b/parts/django/tests/regressiontests/null_fk_ordering/tests.py
deleted file mode 100644
index c9ee4f7..0000000
--- a/parts/django/tests/regressiontests/null_fk_ordering/tests.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from django.test import TestCase
-
-from regressiontests.null_fk_ordering.models import *
-
-class NullFkOrderingTests(TestCase):
-
- def test_ordering_across_null_fk(self):
- """
- Regression test for #7512
-
- ordering across nullable Foreign Keys shouldn't exclude results
- """
- author_1 = Author.objects.create(name='Tom Jones')
- author_2 = Author.objects.create(name='Bob Smith')
- article_1 = Article.objects.create(title='No author on this article')
- article_2 = Article.objects.create(author=author_1, title='This article written by Tom Jones')
- article_3 = Article.objects.create(author=author_2, title='This article written by Bob Smith')
-
- # We can't compare results directly (since different databases sort NULLs to
- # different ends of the ordering), but we can check that all results are
- # returned.
- self.assertTrue(len(list(Article.objects.all())) == 3)
-
- s = SystemInfo.objects.create(system_name='System Info')
- f = Forum.objects.create(system_info=s, forum_name='First forum')
- p = Post.objects.create(forum=f, title='First Post')
- c1 = Comment.objects.create(post=p, comment_text='My first comment')
- c2 = Comment.objects.create(comment_text='My second comment')
- s2 = SystemInfo.objects.create(system_name='More System Info')
- f2 = Forum.objects.create(system_info=s2, forum_name='Second forum')
- p2 = Post.objects.create(forum=f2, title='Second Post')
- c3 = Comment.objects.create(comment_text='Another first comment')
- c4 = Comment.objects.create(post=p2, comment_text='Another second comment')
-
- # We have to test this carefully. Some databases sort NULL values before
- # everything else, some sort them afterwards. So we extract the ordered list
- # and check the length. Before the fix, this list was too short (some values
- # were omitted).
- self.assertTrue(len(list(Comment.objects.all())) == 4)
diff --git a/parts/django/tests/regressiontests/null_queries/__init__.py b/parts/django/tests/regressiontests/null_queries/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/null_queries/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/null_queries/models.py b/parts/django/tests/regressiontests/null_queries/models.py
deleted file mode 100644
index 442535c..0000000
--- a/parts/django/tests/regressiontests/null_queries/models.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from django.db import models
-
-class Poll(models.Model):
- question = models.CharField(max_length=200)
-
- def __unicode__(self):
- return u"Q: %s " % self.question
-
-class Choice(models.Model):
- poll = models.ForeignKey(Poll)
- choice = models.CharField(max_length=200)
-
- def __unicode__(self):
- return u"Choice: %s in poll %s" % (self.choice, self.poll)
-
-# A set of models with an inner one pointing to two outer ones.
-class OuterA(models.Model):
- pass
-
-class OuterB(models.Model):
- data = models.CharField(max_length=10)
-
-class Inner(models.Model):
- first = models.ForeignKey(OuterA)
- second = models.ForeignKey(OuterB, null=True)
diff --git a/parts/django/tests/regressiontests/null_queries/tests.py b/parts/django/tests/regressiontests/null_queries/tests.py
deleted file mode 100644
index 72dcd51..0000000
--- a/parts/django/tests/regressiontests/null_queries/tests.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from django.test import TestCase
-from django.core.exceptions import FieldError
-
-from regressiontests.null_queries.models import *
-
-
-class NullQueriesTests(TestCase):
-
- def test_none_as_null(self):
- """
- Regression test for the use of None as a query value.
-
- None is interpreted as an SQL NULL, but only in __exact queries.
- Set up some initial polls and choices
- """
- p1 = Poll(question='Why?')
- p1.save()
- c1 = Choice(poll=p1, choice='Because.')
- c1.save()
- c2 = Choice(poll=p1, choice='Why Not?')
- c2.save()
-
- # Exact query with value None returns nothing ("is NULL" in sql,
- # but every 'id' field has a value).
- self.assertQuerysetEqual(Choice.objects.filter(choice__exact=None), [])
-
- # Excluding the previous result returns everything.
- self.assertQuerysetEqual(
- Choice.objects.exclude(choice=None).order_by('id'),
- [
- '<Choice: Choice: Because. in poll Q: Why? >',
- '<Choice: Choice: Why Not? in poll Q: Why? >'
- ]
- )
-
- # Valid query, but fails because foo isn't a keyword
- self.assertRaises(FieldError, Choice.objects.filter, foo__exact=None)
-
- # Can't use None on anything other than __exact
- self.assertRaises(ValueError, Choice.objects.filter, id__gt=None)
-
- # Can't use None on anything other than __exact
- self.assertRaises(ValueError, Choice.objects.filter, foo__gt=None)
-
- # Related managers use __exact=None implicitly if the object hasn't been saved.
- p2 = Poll(question="How?")
- self.assertEquals(repr(p2.choice_set.all()), '[]')
-
- def test_reverse_relations(self):
- """
- Querying across reverse relations and then another relation should
- insert outer joins correctly so as not to exclude results.
- """
- obj = OuterA.objects.create()
- self.assertQuerysetEqual(
- OuterA.objects.filter(inner__second=None),
- ['<OuterA: OuterA object>']
- )
- self.assertQuerysetEqual(
- OuterA.objects.filter(inner__second__data=None),
- ['<OuterA: OuterA object>']
- )
-
- inner_obj = Inner.objects.create(first=obj)
- self.assertQuerysetEqual(
- Inner.objects.filter(first__inner__second=None),
- ['<Inner: Inner object>']
- )
-
diff --git a/parts/django/tests/regressiontests/one_to_one_regress/__init__.py b/parts/django/tests/regressiontests/one_to_one_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/one_to_one_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/one_to_one_regress/models.py b/parts/django/tests/regressiontests/one_to_one_regress/models.py
deleted file mode 100644
index a7edbc0..0000000
--- a/parts/django/tests/regressiontests/one_to_one_regress/models.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from django.db import models
-
-class Place(models.Model):
- name = models.CharField(max_length=50)
- address = models.CharField(max_length=80)
-
- def __unicode__(self):
- return u"%s the place" % self.name
-
-class Restaurant(models.Model):
- place = models.OneToOneField(Place)
- serves_hot_dogs = models.BooleanField()
- serves_pizza = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the restaurant" % self.place.name
-
-class Bar(models.Model):
- place = models.OneToOneField(Place)
- serves_cocktails = models.BooleanField()
-
- def __unicode__(self):
- return u"%s the bar" % self.place.name
-
-class UndergroundBar(models.Model):
- place = models.OneToOneField(Place, null=True)
- serves_cocktails = models.BooleanField()
-
-class Favorites(models.Model):
- name = models.CharField(max_length = 50)
- restaurants = models.ManyToManyField(Restaurant)
-
- def __unicode__(self):
- return u"Favorites for %s" % self.name
-
-class Target(models.Model):
- pass
-
-class Pointer(models.Model):
- other = models.OneToOneField(Target, primary_key=True)
-
-class Pointer2(models.Model):
- other = models.OneToOneField(Target)
diff --git a/parts/django/tests/regressiontests/one_to_one_regress/tests.py b/parts/django/tests/regressiontests/one_to_one_regress/tests.py
deleted file mode 100644
index 8787575..0000000
--- a/parts/django/tests/regressiontests/one_to_one_regress/tests.py
+++ /dev/null
@@ -1,130 +0,0 @@
-from django.test import TestCase
-from regressiontests.one_to_one_regress.models import *
-
-class OneToOneRegressionTests(TestCase):
-
- def setUp(self):
- self.p1 = Place(name='Demon Dogs', address='944 W. Fullerton')
- self.p1.save()
- self.r1 = Restaurant(place=self.p1, serves_hot_dogs=True, serves_pizza=False)
- self.r1.save()
- self.b1 = Bar(place=self.p1, serves_cocktails=False)
- self.b1.save()
-
- def test_reverse_relationship_cache_cascade(self):
- """
- Regression test for #9023: accessing the reverse relationship shouldn't
- result in a cascading delete().
- """
- bar = UndergroundBar.objects.create(place=self.p1, serves_cocktails=False)
-
- # The bug in #9023: if you access the one-to-one relation *before*
- # setting to None and deleting, the cascade happens anyway.
- self.p1.undergroundbar
- bar.place.name='foo'
- bar.place = None
- bar.save()
- self.p1.delete()
-
- self.assertEqual(Place.objects.all().count(), 0)
- self.assertEqual(UndergroundBar.objects.all().count(), 1)
-
- def test_create_models_m2m(self):
- """
- Regression test for #1064 and #1506
-
- Check that we create models via the m2m relation if the remote model
- has a OneToOneField.
- """
- f = Favorites(name = 'Fred')
- f.save()
- f.restaurants = [self.r1]
- self.assertQuerysetEqual(
- f.restaurants.all(),
- ['<Restaurant: Demon Dogs the restaurant>']
- )
-
- def test_reverse_object_cache(self):
- """
- Regression test for #7173
-
- Check that the name of the cache for the reverse object is correct.
- """
- self.assertEquals(self.p1.restaurant, self.r1)
- self.assertEquals(self.p1.bar, self.b1)
-
- def test_related_object_cache(self):
- """ Regression test for #6886 (the related-object cache) """
-
- # Look up the objects again so that we get "fresh" objects
- p = Place.objects.get(name="Demon Dogs")
- r = p.restaurant
-
- # Accessing the related object again returns the exactly same object
- self.assertTrue(p.restaurant is r)
-
- # But if we kill the cache, we get a new object
- del p._restaurant_cache
- self.assertFalse(p.restaurant is r)
-
- # Reassigning the Restaurant object results in an immediate cache update
- # We can't use a new Restaurant because that'll violate one-to-one, but
- # with a new *instance* the is test below will fail if #6886 regresses.
- r2 = Restaurant.objects.get(pk=r.pk)
- p.restaurant = r2
- self.assertTrue(p.restaurant is r2)
-
- # Assigning None succeeds if field is null=True.
- ug_bar = UndergroundBar.objects.create(place=p, serves_cocktails=False)
- ug_bar.place = None
- self.assertTrue(ug_bar.place is None)
-
- # Assigning None fails: Place.restaurant is null=False
- self.assertRaises(ValueError, setattr, p, 'restaurant', None)
-
- # You also can't assign an object of the wrong type here
- self.assertRaises(ValueError, setattr, p, 'restaurant', p)
-
- # Creation using keyword argument should cache the related object.
- p = Place.objects.get(name="Demon Dogs")
- r = Restaurant(place=p)
- self.assertTrue(r.place is p)
-
- # Creation using keyword argument and unsaved related instance (#8070).
- p = Place()
- r = Restaurant(place=p)
- self.assertTrue(r.place is p)
-
- # Creation using attname keyword argument and an id will cause the related
- # object to be fetched.
- p = Place.objects.get(name="Demon Dogs")
- r = Restaurant(place_id=p.id)
- self.assertFalse(r.place is p)
- self.assertEqual(r.place, p)
-
- def test_filter_one_to_one_relations(self):
- """
- Regression test for #9968
-
- filtering reverse one-to-one relations with primary_key=True was
- misbehaving. We test both (primary_key=True & False) cases here to
- prevent any reappearance of the problem.
- """
- t = Target.objects.create()
-
- self.assertQuerysetEqual(
- Target.objects.filter(pointer=None),
- ['<Target: Target object>']
- )
- self.assertQuerysetEqual(
- Target.objects.exclude(pointer=None),
- []
- )
- self.assertQuerysetEqual(
- Target.objects.filter(pointer2=None),
- ['<Target: Target object>']
- )
- self.assertQuerysetEqual(
- Target.objects.exclude(pointer2=None),
- []
- )
diff --git a/parts/django/tests/regressiontests/pagination_regress/__init__.py b/parts/django/tests/regressiontests/pagination_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/pagination_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/pagination_regress/models.py b/parts/django/tests/regressiontests/pagination_regress/models.py
deleted file mode 100644
index cde172d..0000000
--- a/parts/django/tests/regressiontests/pagination_regress/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# Models file for tests to run.
diff --git a/parts/django/tests/regressiontests/pagination_regress/tests.py b/parts/django/tests/regressiontests/pagination_regress/tests.py
deleted file mode 100644
index 08436df..0000000
--- a/parts/django/tests/regressiontests/pagination_regress/tests.py
+++ /dev/null
@@ -1,157 +0,0 @@
-from unittest import TestCase
-
-from django.core.paginator import Paginator, EmptyPage
-
-class PaginatorTests(TestCase):
- """
- Tests for the Paginator and Page classes.
- """
-
- def check_paginator(self, params, output):
- """
- Helper method that instantiates a Paginator object from the passed
- params and then checks that its attributes match the passed output.
- """
- count, num_pages, page_range = output
- paginator = Paginator(*params)
- self.check_attribute('count', paginator, count, params)
- self.check_attribute('num_pages', paginator, num_pages, params)
- self.check_attribute('page_range', paginator, page_range, params)
-
- def check_attribute(self, name, paginator, expected, params):
- """
- Helper method that checks a single attribute and gives a nice error
- message upon test failure.
- """
- got = getattr(paginator, name)
- self.assertEqual(expected, got,
- "For '%s', expected %s but got %s. Paginator parameters were: %s"
- % (name, expected, got, params))
-
- def test_paginator(self):
- """
- Tests the paginator attributes using varying inputs.
- """
- nine = [1, 2, 3, 4, 5, 6, 7, 8, 9]
- ten = nine + [10]
- eleven = ten + [11]
- tests = (
- # Each item is two tuples:
- # First tuple is Paginator parameters - object_list, per_page,
- # orphans, and allow_empty_first_page.
- # Second tuple is resulting Paginator attributes - count,
- # num_pages, and page_range.
- # Ten items, varying orphans, no empty first page.
- ((ten, 4, 0, False), (10, 3, [1, 2, 3])),
- ((ten, 4, 1, False), (10, 3, [1, 2, 3])),
- ((ten, 4, 2, False), (10, 2, [1, 2])),
- ((ten, 4, 5, False), (10, 2, [1, 2])),
- ((ten, 4, 6, False), (10, 1, [1])),
- # Ten items, varying orphans, allow empty first page.
- ((ten, 4, 0, True), (10, 3, [1, 2, 3])),
- ((ten, 4, 1, True), (10, 3, [1, 2, 3])),
- ((ten, 4, 2, True), (10, 2, [1, 2])),
- ((ten, 4, 5, True), (10, 2, [1, 2])),
- ((ten, 4, 6, True), (10, 1, [1])),
- # One item, varying orphans, no empty first page.
- (([1], 4, 0, False), (1, 1, [1])),
- (([1], 4, 1, False), (1, 1, [1])),
- (([1], 4, 2, False), (1, 1, [1])),
- # One item, varying orphans, allow empty first page.
- (([1], 4, 0, True), (1, 1, [1])),
- (([1], 4, 1, True), (1, 1, [1])),
- (([1], 4, 2, True), (1, 1, [1])),
- # Zero items, varying orphans, no empty first page.
- (([], 4, 0, False), (0, 0, [])),
- (([], 4, 1, False), (0, 0, [])),
- (([], 4, 2, False), (0, 0, [])),
- # Zero items, varying orphans, allow empty first page.
- (([], 4, 0, True), (0, 1, [1])),
- (([], 4, 1, True), (0, 1, [1])),
- (([], 4, 2, True), (0, 1, [1])),
- # Number if items one less than per_page.
- (([], 1, 0, True), (0, 1, [1])),
- (([], 1, 0, False), (0, 0, [])),
- (([1], 2, 0, True), (1, 1, [1])),
- ((nine, 10, 0, True), (9, 1, [1])),
- # Number if items equal to per_page.
- (([1], 1, 0, True), (1, 1, [1])),
- (([1, 2], 2, 0, True), (2, 1, [1])),
- ((ten, 10, 0, True), (10, 1, [1])),
- # Number if items one more than per_page.
- (([1, 2], 1, 0, True), (2, 2, [1, 2])),
- (([1, 2, 3], 2, 0, True), (3, 2, [1, 2])),
- ((eleven, 10, 0, True), (11, 2, [1, 2])),
- # Number if items one more than per_page with one orphan.
- (([1, 2], 1, 1, True), (2, 1, [1])),
- (([1, 2, 3], 2, 1, True), (3, 1, [1])),
- ((eleven, 10, 1, True), (11, 1, [1])),
- )
- for params, output in tests:
- self.check_paginator(params, output)
-
- def check_indexes(self, params, page_num, indexes):
- """
- Helper method that instantiates a Paginator object from the passed
- params and then checks that the start and end indexes of the passed
- page_num match those given as a 2-tuple in indexes.
- """
- paginator = Paginator(*params)
- if page_num == 'first':
- page_num = 1
- elif page_num == 'last':
- page_num = paginator.num_pages
- page = paginator.page(page_num)
- start, end = indexes
- msg = ("For %s of page %s, expected %s but got %s."
- " Paginator parameters were: %s")
- self.assertEqual(start, page.start_index(),
- msg % ('start index', page_num, start, page.start_index(), params))
- self.assertEqual(end, page.end_index(),
- msg % ('end index', page_num, end, page.end_index(), params))
-
- def test_page_indexes(self):
- """
- Tests that paginator pages have the correct start and end indexes.
- """
- ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- tests = (
- # Each item is three tuples:
- # First tuple is Paginator parameters - object_list, per_page,
- # orphans, and allow_empty_first_page.
- # Second tuple is the start and end indexes of the first page.
- # Third tuple is the start and end indexes of the last page.
- # Ten items, varying per_page, no orphans.
- ((ten, 1, 0, True), (1, 1), (10, 10)),
- ((ten, 2, 0, True), (1, 2), (9, 10)),
- ((ten, 3, 0, True), (1, 3), (10, 10)),
- ((ten, 5, 0, True), (1, 5), (6, 10)),
- # Ten items, varying per_page, with orphans.
- ((ten, 1, 1, True), (1, 1), (9, 10)),
- ((ten, 1, 2, True), (1, 1), (8, 10)),
- ((ten, 3, 1, True), (1, 3), (7, 10)),
- ((ten, 3, 2, True), (1, 3), (7, 10)),
- ((ten, 3, 4, True), (1, 3), (4, 10)),
- ((ten, 5, 1, True), (1, 5), (6, 10)),
- ((ten, 5, 2, True), (1, 5), (6, 10)),
- ((ten, 5, 5, True), (1, 10), (1, 10)),
- # One item, varying orphans, no empty first page.
- (([1], 4, 0, False), (1, 1), (1, 1)),
- (([1], 4, 1, False), (1, 1), (1, 1)),
- (([1], 4, 2, False), (1, 1), (1, 1)),
- # One item, varying orphans, allow empty first page.
- (([1], 4, 0, True), (1, 1), (1, 1)),
- (([1], 4, 1, True), (1, 1), (1, 1)),
- (([1], 4, 2, True), (1, 1), (1, 1)),
- # Zero items, varying orphans, allow empty first page.
- (([], 4, 0, True), (0, 0), (0, 0)),
- (([], 4, 1, True), (0, 0), (0, 0)),
- (([], 4, 2, True), (0, 0), (0, 0)),
- )
- for params, first, last in tests:
- self.check_indexes(params, 'first', first)
- self.check_indexes(params, 'last', last)
- # When no items and no empty first page, we should get EmptyPage error.
- self.assertRaises(EmptyPage, self.check_indexes, ([], 4, 0, False), 1, None)
- self.assertRaises(EmptyPage, self.check_indexes, ([], 4, 1, False), 1, None)
- self.assertRaises(EmptyPage, self.check_indexes, ([], 4, 2, False), 1, None)
diff --git a/parts/django/tests/regressiontests/queries/__init__.py b/parts/django/tests/regressiontests/queries/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/queries/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/queries/models.py b/parts/django/tests/regressiontests/queries/models.py
deleted file mode 100644
index 5247ef9..0000000
--- a/parts/django/tests/regressiontests/queries/models.py
+++ /dev/null
@@ -1,276 +0,0 @@
-"""
-Various complex queries that have been problematic in the past.
-"""
-
-import threading
-
-from django.db import models
-
-class DumbCategory(models.Model):
- pass
-
-class NamedCategory(DumbCategory):
- name = models.CharField(max_length=10)
-
-class Tag(models.Model):
- name = models.CharField(max_length=10)
- parent = models.ForeignKey('self', blank=True, null=True,
- related_name='children')
- category = models.ForeignKey(NamedCategory, null=True, default=None)
-
- class Meta:
- ordering = ['name']
-
- def __unicode__(self):
- return self.name
-
-class Note(models.Model):
- note = models.CharField(max_length=100)
- misc = models.CharField(max_length=10)
-
- class Meta:
- ordering = ['note']
-
- def __unicode__(self):
- return self.note
-
- def __init__(self, *args, **kwargs):
- super(Note, self).__init__(*args, **kwargs)
- # Regression for #13227 -- having an attribute that
- # is unpickleable doesn't stop you from cloning queries
- # that use objects of that type as an argument.
- self.lock = threading.Lock()
-
-class Annotation(models.Model):
- name = models.CharField(max_length=10)
- tag = models.ForeignKey(Tag)
- notes = models.ManyToManyField(Note)
-
- def __unicode__(self):
- return self.name
-
-class ExtraInfo(models.Model):
- info = models.CharField(max_length=100)
- note = models.ForeignKey(Note)
-
- class Meta:
- ordering = ['info']
-
- def __unicode__(self):
- return self.info
-
-class Author(models.Model):
- name = models.CharField(max_length=10)
- num = models.IntegerField(unique=True)
- extra = models.ForeignKey(ExtraInfo)
-
- class Meta:
- ordering = ['name']
-
- def __unicode__(self):
- return self.name
-
-class Item(models.Model):
- name = models.CharField(max_length=10)
- created = models.DateTimeField()
- modified = models.DateTimeField(blank=True, null=True)
- tags = models.ManyToManyField(Tag, blank=True, null=True)
- creator = models.ForeignKey(Author)
- note = models.ForeignKey(Note)
-
- class Meta:
- ordering = ['-note', 'name']
-
- def __unicode__(self):
- return self.name
-
-class Report(models.Model):
- name = models.CharField(max_length=10)
- creator = models.ForeignKey(Author, to_field='num', null=True)
-
- def __unicode__(self):
- return self.name
-
-class Ranking(models.Model):
- rank = models.IntegerField()
- author = models.ForeignKey(Author)
-
- class Meta:
- # A complex ordering specification. Should stress the system a bit.
- ordering = ('author__extra__note', 'author__name', 'rank')
-
- def __unicode__(self):
- return '%d: %s' % (self.rank, self.author.name)
-
-class Cover(models.Model):
- title = models.CharField(max_length=50)
- item = models.ForeignKey(Item)
-
- class Meta:
- ordering = ['item']
-
- def __unicode__(self):
- return self.title
-
-class Number(models.Model):
- num = models.IntegerField()
-
- def __unicode__(self):
- return unicode(self.num)
-
-# Symmetrical m2m field with a normal field using the reverse accesor name
-# ("valid").
-class Valid(models.Model):
- valid = models.CharField(max_length=10)
- parent = models.ManyToManyField('self')
-
- class Meta:
- ordering = ['valid']
-
-# Some funky cross-linked models for testing a couple of infinite recursion
-# cases.
-class X(models.Model):
- y = models.ForeignKey('Y')
-
-class Y(models.Model):
- x1 = models.ForeignKey(X, related_name='y1')
-
-# Some models with a cycle in the default ordering. This would be bad if we
-# didn't catch the infinite loop.
-class LoopX(models.Model):
- y = models.ForeignKey('LoopY')
-
- class Meta:
- ordering = ['y']
-
-class LoopY(models.Model):
- x = models.ForeignKey(LoopX)
-
- class Meta:
- ordering = ['x']
-
-class LoopZ(models.Model):
- z = models.ForeignKey('self')
-
- class Meta:
- ordering = ['z']
-
-# A model and custom default manager combination.
-class CustomManager(models.Manager):
- def get_query_set(self):
- qs = super(CustomManager, self).get_query_set()
- return qs.filter(public=True, tag__name='t1')
-
-class ManagedModel(models.Model):
- data = models.CharField(max_length=10)
- tag = models.ForeignKey(Tag)
- public = models.BooleanField(default=True)
-
- objects = CustomManager()
- normal_manager = models.Manager()
-
- def __unicode__(self):
- return self.data
-
-# An inter-related setup with multiple paths from Child to Detail.
-class Detail(models.Model):
- data = models.CharField(max_length=10)
-
-class MemberManager(models.Manager):
- def get_query_set(self):
- return super(MemberManager, self).get_query_set().select_related("details")
-
-class Member(models.Model):
- name = models.CharField(max_length=10)
- details = models.OneToOneField(Detail, primary_key=True)
-
- objects = MemberManager()
-
-class Child(models.Model):
- person = models.OneToOneField(Member, primary_key=True)
- parent = models.ForeignKey(Member, related_name="children")
-
-# Custom primary keys interfered with ordering in the past.
-class CustomPk(models.Model):
- name = models.CharField(max_length=10, primary_key=True)
- extra = models.CharField(max_length=10)
-
- class Meta:
- ordering = ['name', 'extra']
-
-class Related(models.Model):
- custom = models.ForeignKey(CustomPk)
-
-# An inter-related setup with a model subclass that has a nullable
-# path to another model, and a return path from that model.
-
-class Celebrity(models.Model):
- name = models.CharField("Name", max_length=20)
- greatest_fan = models.ForeignKey("Fan", null=True, unique=True)
-
-class TvChef(Celebrity):
- pass
-
-class Fan(models.Model):
- fan_of = models.ForeignKey(Celebrity)
-
-# Multiple foreign keys
-class LeafA(models.Model):
- data = models.CharField(max_length=10)
-
- def __unicode__(self):
- return self.data
-
-class LeafB(models.Model):
- data = models.CharField(max_length=10)
-
-class Join(models.Model):
- a = models.ForeignKey(LeafA)
- b = models.ForeignKey(LeafB)
-
-class ReservedName(models.Model):
- name = models.CharField(max_length=20)
- order = models.IntegerField()
-
- def __unicode__(self):
- return self.name
-
-# A simpler shared-foreign-key setup that can expose some problems.
-class SharedConnection(models.Model):
- data = models.CharField(max_length=10)
-
-class PointerA(models.Model):
- connection = models.ForeignKey(SharedConnection)
-
-class PointerB(models.Model):
- connection = models.ForeignKey(SharedConnection)
-
-# Multi-layer ordering
-class SingleObject(models.Model):
- name = models.CharField(max_length=10)
-
- class Meta:
- ordering = ['name']
-
- def __unicode__(self):
- return self.name
-
-class RelatedObject(models.Model):
- single = models.ForeignKey(SingleObject)
-
- class Meta:
- ordering = ['single']
-
-class Plaything(models.Model):
- name = models.CharField(max_length=10)
- others = models.ForeignKey(RelatedObject, null=True)
-
- class Meta:
- ordering = ['others']
-
- def __unicode__(self):
- return self.name
-
-class Article(models.Model):
- name = models.CharField(max_length=20)
- created = models.DateTimeField()
diff --git a/parts/django/tests/regressiontests/queries/tests.py b/parts/django/tests/regressiontests/queries/tests.py
deleted file mode 100644
index 741b33c..0000000
--- a/parts/django/tests/regressiontests/queries/tests.py
+++ /dev/null
@@ -1,1586 +0,0 @@
-import datetime
-import pickle
-import sys
-import unittest
-
-from django.conf import settings
-from django.core.exceptions import FieldError
-from django.db import DatabaseError, connection, connections, DEFAULT_DB_ALIAS
-from django.db.models import Count
-from django.db.models.query import Q, ITER_CHUNK_SIZE, EmptyQuerySet
-from django.test import TestCase
-from django.utils.datastructures import SortedDict
-
-from models import (Annotation, Article, Author, Celebrity, Child, Cover, Detail,
- DumbCategory, ExtraInfo, Fan, Item, LeafA, LoopX, LoopZ, ManagedModel,
- Member, NamedCategory, Note, Number, Plaything, PointerA, Ranking, Related,
- Report, ReservedName, Tag, TvChef, Valid, X)
-
-
-class BaseQuerysetTest(TestCase):
- def assertValueQuerysetEqual(self, qs, values):
- return self.assertQuerysetEqual(qs, values, transform=lambda x: x)
-
- def assertRaisesMessage(self, exc, msg, func, *args, **kwargs):
- try:
- func(*args, **kwargs)
- except Exception, e:
- self.assertEqual(msg, str(e))
- self.assertTrue(isinstance(e, exc), "Expected %s, got %s" % (exc, type(e)))
- else:
- if hasattr(exc, '__name__'):
- excName = exc.__name__
- else:
- excName = str(exc)
- raise AssertionError, "%s not raised" % excName
-
-
-class Queries1Tests(BaseQuerysetTest):
- def setUp(self):
- generic = NamedCategory.objects.create(name="Generic")
- self.t1 = Tag.objects.create(name='t1', category=generic)
- self.t2 = Tag.objects.create(name='t2', parent=self.t1, category=generic)
- self.t3 = Tag.objects.create(name='t3', parent=self.t1)
- t4 = Tag.objects.create(name='t4', parent=self.t3)
- self.t5 = Tag.objects.create(name='t5', parent=self.t3)
-
- self.n1 = Note.objects.create(note='n1', misc='foo', id=1)
- n2 = Note.objects.create(note='n2', misc='bar', id=2)
- self.n3 = Note.objects.create(note='n3', misc='foo', id=3)
-
- ann1 = Annotation.objects.create(name='a1', tag=self.t1)
- ann1.notes.add(self.n1)
- ann2 = Annotation.objects.create(name='a2', tag=t4)
- ann2.notes.add(n2, self.n3)
-
- # Create these out of order so that sorting by 'id' will be different to sorting
- # by 'info'. Helps detect some problems later.
- self.e2 = ExtraInfo.objects.create(info='e2', note=n2)
- e1 = ExtraInfo.objects.create(info='e1', note=self.n1)
-
- self.a1 = Author.objects.create(name='a1', num=1001, extra=e1)
- self.a2 = Author.objects.create(name='a2', num=2002, extra=e1)
- a3 = Author.objects.create(name='a3', num=3003, extra=self.e2)
- self.a4 = Author.objects.create(name='a4', num=4004, extra=self.e2)
-
- self.time1 = datetime.datetime(2007, 12, 19, 22, 25, 0)
- self.time2 = datetime.datetime(2007, 12, 19, 21, 0, 0)
- time3 = datetime.datetime(2007, 12, 20, 22, 25, 0)
- time4 = datetime.datetime(2007, 12, 20, 21, 0, 0)
- self.i1 = Item.objects.create(name='one', created=self.time1, modified=self.time1, creator=self.a1, note=self.n3)
- self.i1.tags = [self.t1, self.t2]
- self.i2 = Item.objects.create(name='two', created=self.time2, creator=self.a2, note=n2)
- self.i2.tags = [self.t1, self.t3]
- self.i3 = Item.objects.create(name='three', created=time3, creator=self.a2, note=self.n3)
- i4 = Item.objects.create(name='four', created=time4, creator=self.a4, note=self.n3)
- i4.tags = [t4]
-
- self.r1 = Report.objects.create(name='r1', creator=self.a1)
- Report.objects.create(name='r2', creator=a3)
- Report.objects.create(name='r3')
-
- # Ordering by 'rank' gives us rank2, rank1, rank3. Ordering by the Meta.ordering
- # will be rank3, rank2, rank1.
- self.rank1 = Ranking.objects.create(rank=2, author=self.a2)
-
- Cover.objects.create(title="first", item=i4)
- Cover.objects.create(title="second", item=self.i2)
-
- def test_ticket1050(self):
- self.assertQuerysetEqual(
- Item.objects.filter(tags__isnull=True),
- ['<Item: three>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(tags__id__isnull=True),
- ['<Item: three>']
- )
-
- def test_ticket1801(self):
- self.assertQuerysetEqual(
- Author.objects.filter(item=self.i2),
- ['<Author: a2>']
- )
- self.assertQuerysetEqual(
- Author.objects.filter(item=self.i3),
- ['<Author: a2>']
- )
- self.assertQuerysetEqual(
- Author.objects.filter(item=self.i2) & Author.objects.filter(item=self.i3),
- ['<Author: a2>']
- )
-
- def test_ticket2306(self):
- # Checking that no join types are "left outer" joins.
- query = Item.objects.filter(tags=self.t2).query
- self.assertTrue(query.LOUTER not in [x[2] for x in query.alias_map.values()])
-
- self.assertQuerysetEqual(
- Item.objects.filter(Q(tags=self.t1)).order_by('name'),
- ['<Item: one>', '<Item: two>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(Q(tags=self.t1)).filter(Q(tags=self.t2)),
- ['<Item: one>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(Q(tags=self.t1)).filter(Q(creator__name='fred')|Q(tags=self.t2)),
- ['<Item: one>']
- )
-
- # Each filter call is processed "at once" against a single table, so this is
- # different from the previous example as it tries to find tags that are two
- # things at once (rather than two tags).
- self.assertQuerysetEqual(
- Item.objects.filter(Q(tags=self.t1) & Q(tags=self.t2)),
- []
- )
- self.assertQuerysetEqual(
- Item.objects.filter(Q(tags=self.t1), Q(creator__name='fred')|Q(tags=self.t2)),
- []
- )
-
- qs = Author.objects.filter(ranking__rank=2, ranking__id=self.rank1.id)
- self.assertQuerysetEqual(list(qs), ['<Author: a2>'])
- self.assertEqual(2, qs.query.count_active_tables(), 2)
- qs = Author.objects.filter(ranking__rank=2).filter(ranking__id=self.rank1.id)
- self.assertEqual(qs.query.count_active_tables(), 3)
-
- def test_ticket4464(self):
- self.assertQuerysetEqual(
- Item.objects.filter(tags=self.t1).filter(tags=self.t2),
- ['<Item: one>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(tags__in=[self.t1, self.t2]).distinct().order_by('name'),
- ['<Item: one>', '<Item: two>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(tags__in=[self.t1, self.t2]).filter(tags=self.t3),
- ['<Item: two>']
- )
-
- # Make sure .distinct() works with slicing (this was broken in Oracle).
- self.assertQuerysetEqual(
- Item.objects.filter(tags__in=[self.t1, self.t2]).order_by('name')[:3],
- ['<Item: one>', '<Item: one>', '<Item: two>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(tags__in=[self.t1, self.t2]).distinct().order_by('name')[:3],
- ['<Item: one>', '<Item: two>']
- )
-
- def test_tickets_2080_3592(self):
- self.assertQuerysetEqual(
- Author.objects.filter(item__name='one') | Author.objects.filter(name='a3'),
- ['<Author: a1>', '<Author: a3>']
- )
- self.assertQuerysetEqual(
- Author.objects.filter(Q(item__name='one') | Q(name='a3')),
- ['<Author: a1>', '<Author: a3>']
- )
- self.assertQuerysetEqual(
- Author.objects.filter(Q(name='a3') | Q(item__name='one')),
- ['<Author: a1>', '<Author: a3>']
- )
- self.assertQuerysetEqual(
- Author.objects.filter(Q(item__name='three') | Q(report__name='r3')),
- ['<Author: a2>']
- )
-
- def test_ticket6074(self):
- # Merging two empty result sets shouldn't leave a queryset with no constraints
- # (which would match everything).
- self.assertQuerysetEqual(Author.objects.filter(Q(id__in=[])), [])
- self.assertQuerysetEqual(
- Author.objects.filter(Q(id__in=[])|Q(id__in=[])),
- []
- )
-
- def test_tickets_1878_2939(self):
- self.assertEqual(Item.objects.values('creator').distinct().count(), 3)
-
- # Create something with a duplicate 'name' so that we can test multi-column
- # cases (which require some tricky SQL transformations under the covers).
- xx = Item(name='four', created=self.time1, creator=self.a2, note=self.n1)
- xx.save()
- self.assertEqual(
- Item.objects.exclude(name='two').values('creator', 'name').distinct().count(),
- 4
- )
- self.assertEqual(
- Item.objects.exclude(name='two').extra(select={'foo': '%s'}, select_params=(1,)).values('creator', 'name', 'foo').distinct().count(),
- 4
- )
- self.assertEqual(
- Item.objects.exclude(name='two').extra(select={'foo': '%s'}, select_params=(1,)).values('creator', 'name').distinct().count(),
- 4
- )
- xx.delete()
-
- def test_ticket7323(self):
- self.assertEqual(Item.objects.values('creator', 'name').count(), 4)
-
- def test_ticket2253(self):
- q1 = Item.objects.order_by('name')
- q2 = Item.objects.filter(id=self.i1.id)
- self.assertQuerysetEqual(
- q1,
- ['<Item: four>', '<Item: one>', '<Item: three>', '<Item: two>']
- )
- self.assertQuerysetEqual(q2, ['<Item: one>'])
- self.assertQuerysetEqual(
- (q1 | q2).order_by('name'),
- ['<Item: four>', '<Item: one>', '<Item: three>', '<Item: two>']
- )
- self.assertQuerysetEqual((q1 & q2).order_by('name'), ['<Item: one>'])
-
- # FIXME: This is difficult to fix and very much an edge case, so punt for now.
- # This is related to the order_by() tests, below, but the old bug exhibited
- # itself here (q2 was pulling too many tables into the combined query with the
- # new ordering, but only because we have evaluated q2 already).
- #
- #self.assertEqual(len((q1 & q2).order_by('name').query.tables), 1)
-
- q1 = Item.objects.filter(tags=self.t1)
- q2 = Item.objects.filter(note=self.n3, tags=self.t2)
- q3 = Item.objects.filter(creator=self.a4)
- self.assertQuerysetEqual(
- ((q1 & q2) | q3).order_by('name'),
- ['<Item: four>', '<Item: one>']
- )
-
- def test_tickets_4088_4306(self):
- self.assertQuerysetEqual(
- Report.objects.filter(creator=1001),
- ['<Report: r1>']
- )
- self.assertQuerysetEqual(
- Report.objects.filter(creator__num=1001),
- ['<Report: r1>']
- )
- self.assertQuerysetEqual(Report.objects.filter(creator__id=1001), [])
- self.assertQuerysetEqual(
- Report.objects.filter(creator__id=self.a1.id),
- ['<Report: r1>']
- )
- self.assertQuerysetEqual(
- Report.objects.filter(creator__name='a1'),
- ['<Report: r1>']
- )
-
- def test_ticket4510(self):
- self.assertQuerysetEqual(
- Author.objects.filter(report__name='r1'),
- ['<Author: a1>']
- )
-
- def test_ticket7378(self):
- self.assertQuerysetEqual(self.a1.report_set.all(), ['<Report: r1>'])
-
- def test_tickets_5324_6704(self):
- self.assertQuerysetEqual(
- Item.objects.filter(tags__name='t4'),
- ['<Item: four>']
- )
- self.assertQuerysetEqual(
- Item.objects.exclude(tags__name='t4').order_by('name').distinct(),
- ['<Item: one>', '<Item: three>', '<Item: two>']
- )
- self.assertQuerysetEqual(
- Item.objects.exclude(tags__name='t4').order_by('name').distinct().reverse(),
- ['<Item: two>', '<Item: three>', '<Item: one>']
- )
- self.assertQuerysetEqual(
- Author.objects.exclude(item__name='one').distinct().order_by('name'),
- ['<Author: a2>', '<Author: a3>', '<Author: a4>']
- )
-
- # Excluding across a m2m relation when there is more than one related
- # object associated was problematic.
- self.assertQuerysetEqual(
- Item.objects.exclude(tags__name='t1').order_by('name'),
- ['<Item: four>', '<Item: three>']
- )
- self.assertQuerysetEqual(
- Item.objects.exclude(tags__name='t1').exclude(tags__name='t4'),
- ['<Item: three>']
- )
-
- # Excluding from a relation that cannot be NULL should not use outer joins.
- query = Item.objects.exclude(creator__in=[self.a1, self.a2]).query
- self.assertTrue(query.LOUTER not in [x[2] for x in query.alias_map.values()])
-
- # Similarly, when one of the joins cannot possibly, ever, involve NULL
- # values (Author -> ExtraInfo, in the following), it should never be
- # promoted to a left outer join. So the following query should only
- # involve one "left outer" join (Author -> Item is 0-to-many).
- qs = Author.objects.filter(id=self.a1.id).filter(Q(extra__note=self.n1)|Q(item__note=self.n3))
- self.assertEqual(
- len([x[2] for x in qs.query.alias_map.values() if x[2] == query.LOUTER and qs.query.alias_refcount[x[1]]]),
- 1
- )
-
- # The previous changes shouldn't affect nullable foreign key joins.
- self.assertQuerysetEqual(
- Tag.objects.filter(parent__isnull=True).order_by('name'),
- ['<Tag: t1>']
- )
- self.assertQuerysetEqual(
- Tag.objects.exclude(parent__isnull=True).order_by('name'),
- ['<Tag: t2>', '<Tag: t3>', '<Tag: t4>', '<Tag: t5>']
- )
- self.assertQuerysetEqual(
- Tag.objects.exclude(Q(parent__name='t1') | Q(parent__isnull=True)).order_by('name'),
- ['<Tag: t4>', '<Tag: t5>']
- )
- self.assertQuerysetEqual(
- Tag.objects.exclude(Q(parent__isnull=True) | Q(parent__name='t1')).order_by('name'),
- ['<Tag: t4>', '<Tag: t5>']
- )
- self.assertQuerysetEqual(
- Tag.objects.exclude(Q(parent__parent__isnull=True)).order_by('name'),
- ['<Tag: t4>', '<Tag: t5>']
- )
- self.assertQuerysetEqual(
- Tag.objects.filter(~Q(parent__parent__isnull=True)).order_by('name'),
- ['<Tag: t4>', '<Tag: t5>']
- )
-
- def test_ticket2091(self):
- t = Tag.objects.get(name='t4')
- self.assertQuerysetEqual(
- Item.objects.filter(tags__in=[t]),
- ['<Item: four>']
- )
-
- def test_heterogeneous_qs_combination(self):
- # Combining querysets built on different models should behave in a well-defined
- # fashion. We raise an error.
- self.assertRaisesMessage(
- AssertionError,
- 'Cannot combine queries on two different base models.',
- lambda: Author.objects.all() & Tag.objects.all()
- )
- self.assertRaisesMessage(
- AssertionError,
- 'Cannot combine queries on two different base models.',
- lambda: Author.objects.all() | Tag.objects.all()
- )
-
- def test_ticket3141(self):
- self.assertEqual(Author.objects.extra(select={'foo': '1'}).count(), 4)
- self.assertEqual(
- Author.objects.extra(select={'foo': '%s'}, select_params=(1,)).count(),
- 4
- )
-
- def test_ticket2400(self):
- self.assertQuerysetEqual(
- Author.objects.filter(item__isnull=True),
- ['<Author: a3>']
- )
- self.assertQuerysetEqual(
- Tag.objects.filter(item__isnull=True),
- ['<Tag: t5>']
- )
-
- def test_ticket2496(self):
- self.assertQuerysetEqual(
- Item.objects.extra(tables=['queries_author']).select_related().order_by('name')[:1],
- ['<Item: four>']
- )
-
- def test_tickets_2076_7256(self):
- # Ordering on related tables should be possible, even if the table is
- # not otherwise involved.
- self.assertQuerysetEqual(
- Item.objects.order_by('note__note', 'name'),
- ['<Item: two>', '<Item: four>', '<Item: one>', '<Item: three>']
- )
-
- # Ordering on a related field should use the remote model's default
- # ordering as a final step.
- self.assertQuerysetEqual(
- Author.objects.order_by('extra', '-name'),
- ['<Author: a2>', '<Author: a1>', '<Author: a4>', '<Author: a3>']
- )
-
- # Using remote model default ordering can span multiple models (in this
- # case, Cover is ordered by Item's default, which uses Note's default).
- self.assertQuerysetEqual(
- Cover.objects.all(),
- ['<Cover: first>', '<Cover: second>']
- )
-
- # If the remote model does not have a default ordering, we order by its 'id'
- # field.
- self.assertQuerysetEqual(
- Item.objects.order_by('creator', 'name'),
- ['<Item: one>', '<Item: three>', '<Item: two>', '<Item: four>']
- )
-
- # Ordering by a many-valued attribute (e.g. a many-to-many or reverse
- # ForeignKey) is legal, but the results might not make sense. That
- # isn't Django's problem. Garbage in, garbage out.
- self.assertQuerysetEqual(
- Item.objects.filter(tags__isnull=False).order_by('tags', 'id'),
- ['<Item: one>', '<Item: two>', '<Item: one>', '<Item: two>', '<Item: four>']
- )
-
- # If we replace the default ordering, Django adjusts the required
- # tables automatically. Item normally requires a join with Note to do
- # the default ordering, but that isn't needed here.
- qs = Item.objects.order_by('name')
- self.assertQuerysetEqual(
- qs,
- ['<Item: four>', '<Item: one>', '<Item: three>', '<Item: two>']
- )
- self.assertEqual(len(qs.query.tables), 1)
-
- def test_tickets_2874_3002(self):
- qs = Item.objects.select_related().order_by('note__note', 'name')
- self.assertQuerysetEqual(
- qs,
- ['<Item: two>', '<Item: four>', '<Item: one>', '<Item: three>']
- )
-
- # This is also a good select_related() test because there are multiple
- # Note entries in the SQL. The two Note items should be different.
- self.assertTrue(repr(qs[0].note), '<Note: n2>')
- self.assertEqual(repr(qs[0].creator.extra.note), '<Note: n1>')
-
- def test_ticket3037(self):
- self.assertQuerysetEqual(
- Item.objects.filter(Q(creator__name='a3', name='two')|Q(creator__name='a4', name='four')),
- ['<Item: four>']
- )
-
- def test_tickets_5321_7070(self):
- # Ordering columns must be included in the output columns. Note that
- # this means results that might otherwise be distinct are not (if there
- # are multiple values in the ordering cols), as in this example. This
- # isn't a bug; it's a warning to be careful with the selection of
- # ordering columns.
- self.assertValueQuerysetEqual(
- Note.objects.values('misc').distinct().order_by('note', '-misc'),
- [{'misc': u'foo'}, {'misc': u'bar'}, {'misc': u'foo'}]
- )
-
- def test_ticket4358(self):
- # If you don't pass any fields to values(), relation fields are
- # returned as "foo_id" keys, not "foo". For consistency, you should be
- # able to pass "foo_id" in the fields list and have it work, too. We
- # actually allow both "foo" and "foo_id".
-
- # The *_id version is returned by default.
- self.assertTrue('note_id' in ExtraInfo.objects.values()[0])
-
- # You can also pass it in explicitly.
- self.assertValueQuerysetEqual(
- ExtraInfo.objects.values('note_id'),
- [{'note_id': 1}, {'note_id': 2}]
- )
-
- # ...or use the field name.
- self.assertValueQuerysetEqual(
- ExtraInfo.objects.values('note'),
- [{'note': 1}, {'note': 2}]
- )
-
- def test_ticket2902(self):
- # Parameters can be given to extra_select, *if* you use a SortedDict.
-
- # (First we need to know which order the keys fall in "naturally" on
- # your system, so we can put things in the wrong way around from
- # normal. A normal dict would thus fail.)
- s = [('a', '%s'), ('b', '%s')]
- params = ['one', 'two']
- if {'a': 1, 'b': 2}.keys() == ['a', 'b']:
- s.reverse()
- params.reverse()
-
- # This slightly odd comparison works around the fact that PostgreSQL will
- # return 'one' and 'two' as strings, not Unicode objects. It's a side-effect of
- # using constants here and not a real concern.
- d = Item.objects.extra(select=SortedDict(s), select_params=params).values('a', 'b')[0]
- self.assertEqual(d, {'a': u'one', 'b': u'two'})
-
- # Order by the number of tags attached to an item.
- l = Item.objects.extra(select={'count': 'select count(*) from queries_item_tags where queries_item_tags.item_id = queries_item.id'}).order_by('-count')
- self.assertEqual([o.count for o in l], [2, 2, 1, 0])
-
- def test_ticket6154(self):
- # Multiple filter statements are joined using "AND" all the time.
-
- self.assertQuerysetEqual(
- Author.objects.filter(id=self.a1.id).filter(Q(extra__note=self.n1)|Q(item__note=self.n3)),
- ['<Author: a1>']
- )
- self.assertQuerysetEqual(
- Author.objects.filter(Q(extra__note=self.n1)|Q(item__note=self.n3)).filter(id=self.a1.id),
- ['<Author: a1>']
- )
-
- def test_ticket6981(self):
- self.assertQuerysetEqual(
- Tag.objects.select_related('parent').order_by('name'),
- ['<Tag: t1>', '<Tag: t2>', '<Tag: t3>', '<Tag: t4>', '<Tag: t5>']
- )
-
- def test_ticket9926(self):
- self.assertQuerysetEqual(
- Tag.objects.select_related("parent", "category").order_by('name'),
- ['<Tag: t1>', '<Tag: t2>', '<Tag: t3>', '<Tag: t4>', '<Tag: t5>']
- )
- self.assertQuerysetEqual(
- Tag.objects.select_related('parent', "parent__category").order_by('name'),
- ['<Tag: t1>', '<Tag: t2>', '<Tag: t3>', '<Tag: t4>', '<Tag: t5>']
- )
-
- def test_tickets_6180_6203(self):
- # Dates with limits and/or counts
- self.assertEqual(Item.objects.count(), 4)
- self.assertEqual(Item.objects.dates('created', 'month').count(), 1)
- self.assertEqual(Item.objects.dates('created', 'day').count(), 2)
- self.assertEqual(len(Item.objects.dates('created', 'day')), 2)
- self.assertEqual(Item.objects.dates('created', 'day')[0], datetime.datetime(2007, 12, 19, 0, 0))
-
- def test_tickets_7087_12242(self):
- # Dates with extra select columns
- self.assertQuerysetEqual(
- Item.objects.dates('created', 'day').extra(select={'a': 1}),
- ['datetime.datetime(2007, 12, 19, 0, 0)', 'datetime.datetime(2007, 12, 20, 0, 0)']
- )
- self.assertQuerysetEqual(
- Item.objects.extra(select={'a': 1}).dates('created', 'day'),
- ['datetime.datetime(2007, 12, 19, 0, 0)', 'datetime.datetime(2007, 12, 20, 0, 0)']
- )
-
- name="one"
- self.assertQuerysetEqual(
- Item.objects.dates('created', 'day').extra(where=['name=%s'], params=[name]),
- ['datetime.datetime(2007, 12, 19, 0, 0)']
- )
-
- self.assertQuerysetEqual(
- Item.objects.extra(where=['name=%s'], params=[name]).dates('created', 'day'),
- ['datetime.datetime(2007, 12, 19, 0, 0)']
- )
-
- def test_ticket7155(self):
- # Nullable dates
- self.assertQuerysetEqual(
- Item.objects.dates('modified', 'day'),
- ['datetime.datetime(2007, 12, 19, 0, 0)']
- )
-
- def test_ticket7098(self):
- # Make sure semi-deprecated ordering by related models syntax still
- # works.
- self.assertValueQuerysetEqual(
- Item.objects.values('note__note').order_by('queries_note.note', 'id'),
- [{'note__note': u'n2'}, {'note__note': u'n3'}, {'note__note': u'n3'}, {'note__note': u'n3'}]
- )
-
- def test_ticket7096(self):
- # Make sure exclude() with multiple conditions continues to work.
- self.assertQuerysetEqual(
- Tag.objects.filter(parent=self.t1, name='t3').order_by('name'),
- ['<Tag: t3>']
- )
- self.assertQuerysetEqual(
- Tag.objects.exclude(parent=self.t1, name='t3').order_by('name'),
- ['<Tag: t1>', '<Tag: t2>', '<Tag: t4>', '<Tag: t5>']
- )
- self.assertQuerysetEqual(
- Item.objects.exclude(tags__name='t1', name='one').order_by('name').distinct(),
- ['<Item: four>', '<Item: three>', '<Item: two>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(name__in=['three', 'four']).exclude(tags__name='t1').order_by('name'),
- ['<Item: four>', '<Item: three>']
- )
-
- # More twisted cases, involving nested negations.
- self.assertQuerysetEqual(
- Item.objects.exclude(~Q(tags__name='t1', name='one')),
- ['<Item: one>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(~Q(tags__name='t1', name='one'), name='two'),
- ['<Item: two>']
- )
- self.assertQuerysetEqual(
- Item.objects.exclude(~Q(tags__name='t1', name='one'), name='two'),
- ['<Item: four>', '<Item: one>', '<Item: three>']
- )
-
- def test_tickets_7204_7506(self):
- # Make sure querysets with related fields can be pickled. If this
- # doesn't crash, it's a Good Thing.
- pickle.dumps(Item.objects.all())
-
- def test_ticket7813(self):
- # We should also be able to pickle things that use select_related().
- # The only tricky thing here is to ensure that we do the related
- # selections properly after unpickling.
- qs = Item.objects.select_related()
- query = qs.query.get_compiler(qs.db).as_sql()[0]
- query2 = pickle.loads(pickle.dumps(qs.query))
- self.assertEqual(
- query2.get_compiler(qs.db).as_sql()[0],
- query
- )
-
- def test_deferred_load_qs_pickling(self):
- # Check pickling of deferred-loading querysets
- qs = Item.objects.defer('name', 'creator')
- q2 = pickle.loads(pickle.dumps(qs))
- self.assertEqual(list(qs), list(q2))
- q3 = pickle.loads(pickle.dumps(qs, pickle.HIGHEST_PROTOCOL))
- self.assertEqual(list(qs), list(q3))
-
- def test_ticket7277(self):
- self.assertQuerysetEqual(
- self.n1.annotation_set.filter(Q(tag=self.t5) | Q(tag__children=self.t5) | Q(tag__children__children=self.t5)),
- ['<Annotation: a1>']
- )
-
- def test_tickets_7448_7707(self):
- # Complex objects should be converted to strings before being used in
- # lookups.
- self.assertQuerysetEqual(
- Item.objects.filter(created__in=[self.time1, self.time2]),
- ['<Item: one>', '<Item: two>']
- )
-
- def test_ticket7235(self):
- # An EmptyQuerySet should not raise exceptions if it is filtered.
- q = EmptyQuerySet()
- self.assertQuerysetEqual(q.all(), [])
- self.assertQuerysetEqual(q.filter(x=10), [])
- self.assertQuerysetEqual(q.exclude(y=3), [])
- self.assertQuerysetEqual(q.complex_filter({'pk': 1}), [])
- self.assertQuerysetEqual(q.select_related('spam', 'eggs'), [])
- self.assertQuerysetEqual(q.annotate(Count('eggs')), [])
- self.assertQuerysetEqual(q.order_by('-pub_date', 'headline'), [])
- self.assertQuerysetEqual(q.distinct(), [])
- self.assertQuerysetEqual(
- q.extra(select={'is_recent': "pub_date > '2006-01-01'"}),
- []
- )
- q.query.low_mark = 1
- self.assertRaisesMessage(
- AssertionError,
- 'Cannot change a query once a slice has been taken',
- q.extra, select={'is_recent': "pub_date > '2006-01-01'"}
- )
- self.assertQuerysetEqual(q.reverse(), [])
- self.assertQuerysetEqual(q.defer('spam', 'eggs'), [])
- self.assertQuerysetEqual(q.only('spam', 'eggs'), [])
-
- def test_ticket7791(self):
- # There were "issues" when ordering and distinct-ing on fields related
- # via ForeignKeys.
- self.assertEqual(
- len(Note.objects.order_by('extrainfo__info').distinct()),
- 3
- )
-
- # Pickling of DateQuerySets used to fail
- qs = Item.objects.dates('created', 'month')
- _ = pickle.loads(pickle.dumps(qs))
-
- def test_ticket9997(self):
- # If a ValuesList or Values queryset is passed as an inner query, we
- # make sure it's only requesting a single value and use that as the
- # thing to select.
- self.assertQuerysetEqual(
- Tag.objects.filter(name__in=Tag.objects.filter(parent=self.t1).values('name')),
- ['<Tag: t2>', '<Tag: t3>']
- )
-
- # Multi-valued values() and values_list() querysets should raise errors.
- self.assertRaisesMessage(
- TypeError,
- 'Cannot use a multi-field ValuesQuerySet as a filter value.',
- lambda: Tag.objects.filter(name__in=Tag.objects.filter(parent=self.t1).values('name', 'id'))
- )
- self.assertRaisesMessage(
- TypeError,
- 'Cannot use a multi-field ValuesListQuerySet as a filter value.',
- lambda: Tag.objects.filter(name__in=Tag.objects.filter(parent=self.t1).values_list('name', 'id'))
- )
-
- def test_ticket9985(self):
- # qs.values_list(...).values(...) combinations should work.
- self.assertValueQuerysetEqual(
- Note.objects.values_list("note", flat=True).values("id").order_by("id"),
- [{'id': 1}, {'id': 2}, {'id': 3}]
- )
- self.assertQuerysetEqual(
- Annotation.objects.filter(notes__in=Note.objects.filter(note="n1").values_list('note').values('id')),
- ['<Annotation: a1>']
- )
-
- def test_ticket10205(self):
- # When bailing out early because of an empty "__in" filter, we need
- # to set things up correctly internally so that subqueries can continue properly.
- self.assertEqual(Tag.objects.filter(name__in=()).update(name="foo"), 0)
-
- def test_ticket10432(self):
- # Testing an empty "__in" filter with a generator as the value.
- def f():
- return iter([])
- n_obj = Note.objects.all()[0]
- def g():
- for i in [n_obj.pk]:
- yield i
- self.assertQuerysetEqual(Note.objects.filter(pk__in=f()), [])
- self.assertEqual(list(Note.objects.filter(pk__in=g())), [n_obj])
-
- def test_ticket10742(self):
- # Queries used in an __in clause don't execute subqueries
-
- subq = Author.objects.filter(num__lt=3000)
- qs = Author.objects.filter(pk__in=subq)
- self.assertQuerysetEqual(qs, ['<Author: a1>', '<Author: a2>'])
-
- # The subquery result cache should not be populated
- self.assertTrue(subq._result_cache is None)
-
- subq = Author.objects.filter(num__lt=3000)
- qs = Author.objects.exclude(pk__in=subq)
- self.assertQuerysetEqual(qs, ['<Author: a3>', '<Author: a4>'])
-
- # The subquery result cache should not be populated
- self.assertTrue(subq._result_cache is None)
-
- subq = Author.objects.filter(num__lt=3000)
- self.assertQuerysetEqual(
- Author.objects.filter(Q(pk__in=subq) & Q(name='a1')),
- ['<Author: a1>']
- )
-
- # The subquery result cache should not be populated
- self.assertTrue(subq._result_cache is None)
-
- def test_ticket7076(self):
- # Excluding shouldn't eliminate NULL entries.
- self.assertQuerysetEqual(
- Item.objects.exclude(modified=self.time1).order_by('name'),
- ['<Item: four>', '<Item: three>', '<Item: two>']
- )
- self.assertQuerysetEqual(
- Tag.objects.exclude(parent__name=self.t1.name),
- ['<Tag: t1>', '<Tag: t4>', '<Tag: t5>']
- )
-
- def test_ticket7181(self):
- # Ordering by related tables should accomodate nullable fields (this
- # test is a little tricky, since NULL ordering is database dependent.
- # Instead, we just count the number of results).
- self.assertEqual(len(Tag.objects.order_by('parent__name')), 5)
-
- # Empty querysets can be merged with others.
- self.assertQuerysetEqual(
- Note.objects.none() | Note.objects.all(),
- ['<Note: n1>', '<Note: n2>', '<Note: n3>']
- )
- self.assertQuerysetEqual(
- Note.objects.all() | Note.objects.none(),
- ['<Note: n1>', '<Note: n2>', '<Note: n3>']
- )
- self.assertQuerysetEqual(Note.objects.none() & Note.objects.all(), [])
- self.assertQuerysetEqual(Note.objects.all() & Note.objects.none(), [])
-
- def test_ticket9411(self):
- # Make sure bump_prefix() (an internal Query method) doesn't (re-)break. It's
- # sufficient that this query runs without error.
- qs = Tag.objects.values_list('id', flat=True).order_by('id')
- qs.query.bump_prefix()
- first = qs[0]
- self.assertEqual(list(qs), range(first, first+5))
-
- def test_ticket8439(self):
- # Complex combinations of conjunctions, disjunctions and nullable
- # relations.
- self.assertQuerysetEqual(
- Author.objects.filter(Q(item__note__extrainfo=self.e2)|Q(report=self.r1, name='xyz')),
- ['<Author: a2>']
- )
- self.assertQuerysetEqual(
- Author.objects.filter(Q(report=self.r1, name='xyz')|Q(item__note__extrainfo=self.e2)),
- ['<Author: a2>']
- )
- self.assertQuerysetEqual(
- Annotation.objects.filter(Q(tag__parent=self.t1)|Q(notes__note='n1', name='a1')),
- ['<Annotation: a1>']
- )
- xx = ExtraInfo.objects.create(info='xx', note=self.n3)
- self.assertQuerysetEqual(
- Note.objects.filter(Q(extrainfo__author=self.a1)|Q(extrainfo=xx)),
- ['<Note: n1>', '<Note: n3>']
- )
- xx.delete()
- q = Note.objects.filter(Q(extrainfo__author=self.a1)|Q(extrainfo=xx)).query
- self.assertEqual(
- len([x[2] for x in q.alias_map.values() if x[2] == q.LOUTER and q.alias_refcount[x[1]]]),
- 1
- )
-
-
-class Queries2Tests(TestCase):
- def setUp(self):
- Number.objects.create(num=4)
- Number.objects.create(num=8)
- Number.objects.create(num=12)
-
- def test_ticket4289(self):
- # A slight variation on the restricting the filtering choices by the
- # lookup constraints.
- self.assertQuerysetEqual(Number.objects.filter(num__lt=4), [])
- self.assertQuerysetEqual(Number.objects.filter(num__gt=8, num__lt=12), [])
- self.assertQuerysetEqual(
- Number.objects.filter(num__gt=8, num__lt=13),
- ['<Number: 12>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(Q(num__lt=4) | Q(num__gt=8, num__lt=12)),
- []
- )
- self.assertQuerysetEqual(
- Number.objects.filter(Q(num__gt=8, num__lt=12) | Q(num__lt=4)),
- []
- )
- self.assertQuerysetEqual(
- Number.objects.filter(Q(num__gt=8) & Q(num__lt=12) | Q(num__lt=4)),
- []
- )
- self.assertQuerysetEqual(
- Number.objects.filter(Q(num__gt=7) & Q(num__lt=12) | Q(num__lt=4)),
- ['<Number: 8>']
- )
-
- def test_ticket12239(self):
- # Float was being rounded to integer on gte queries on integer field. Tests
- # show that gt, lt, gte, and lte work as desired. Note that the fix changes
- # get_prep_lookup for gte and lt queries only.
- self.assertQuerysetEqual(
- Number.objects.filter(num__gt=11.9),
- ['<Number: 12>']
- )
- self.assertQuerysetEqual(Number.objects.filter(num__gt=12), [])
- self.assertQuerysetEqual(Number.objects.filter(num__gt=12.0), [])
- self.assertQuerysetEqual(Number.objects.filter(num__gt=12.1), [])
- self.assertQuerysetEqual(
- Number.objects.filter(num__lt=12),
- ['<Number: 4>', '<Number: 8>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__lt=12.0),
- ['<Number: 4>', '<Number: 8>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__lt=12.1),
- ['<Number: 4>', '<Number: 8>', '<Number: 12>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__gte=11.9),
- ['<Number: 12>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__gte=12),
- ['<Number: 12>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__gte=12.0),
- ['<Number: 12>']
- )
- self.assertQuerysetEqual(Number.objects.filter(num__gte=12.1), [])
- self.assertQuerysetEqual(Number.objects.filter(num__gte=12.9), [])
- self.assertQuerysetEqual(
- Number.objects.filter(num__lte=11.9),
- ['<Number: 4>', '<Number: 8>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__lte=12),
- ['<Number: 4>', '<Number: 8>', '<Number: 12>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__lte=12.0),
- ['<Number: 4>', '<Number: 8>', '<Number: 12>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__lte=12.1),
- ['<Number: 4>', '<Number: 8>', '<Number: 12>']
- )
- self.assertQuerysetEqual(
- Number.objects.filter(num__lte=12.9),
- ['<Number: 4>', '<Number: 8>', '<Number: 12>']
- )
-
- def test_ticket7411(self):
- # Saving to db must work even with partially read result set in another
- # cursor.
- for num in range(2 * ITER_CHUNK_SIZE + 1):
- _ = Number.objects.create(num=num)
-
- for i, obj in enumerate(Number.objects.all()):
- obj.save()
- if i > 10: break
-
- def test_ticket7759(self):
- # Count should work with a partially read result set.
- count = Number.objects.count()
- qs = Number.objects.all()
- def run():
- for obj in qs:
- return qs.count() == count
- self.assertTrue(run())
-
-
-class Queries3Tests(BaseQuerysetTest):
- def test_ticket7107(self):
- # This shouldn't create an infinite loop.
- self.assertQuerysetEqual(Valid.objects.all(), [])
-
- def test_ticket8683(self):
- # Raise proper error when a DateQuerySet gets passed a wrong type of
- # field
- self.assertRaisesMessage(
- AssertionError,
- "'name' isn't a DateField.",
- Item.objects.dates, 'name', 'month'
- )
-
-class Queries4Tests(BaseQuerysetTest):
- def setUp(self):
- generic = NamedCategory.objects.create(name="Generic")
- self.t1 = Tag.objects.create(name='t1', category=generic)
-
- n1 = Note.objects.create(note='n1', misc='foo', id=1)
- n2 = Note.objects.create(note='n2', misc='bar', id=2)
-
- e1 = ExtraInfo.objects.create(info='e1', note=n1)
- e2 = ExtraInfo.objects.create(info='e2', note=n2)
-
- a1 = Author.objects.create(name='a1', num=1001, extra=e1)
- a3 = Author.objects.create(name='a3', num=3003, extra=e2)
-
- Report.objects.create(name='r1', creator=a1)
- Report.objects.create(name='r2', creator=a3)
- Report.objects.create(name='r3')
-
- def test_ticket7095(self):
- # Updates that are filtered on the model being updated are somewhat
- # tricky in MySQL. This exercises that case.
- ManagedModel.objects.create(data='mm1', tag=self.t1, public=True)
- self.assertEqual(ManagedModel.objects.update(data='mm'), 1)
-
- # A values() or values_list() query across joined models must use outer
- # joins appropriately.
- # Note: In Oracle, we expect a null CharField to return u'' instead of
- # None.
- if connection.features.interprets_empty_strings_as_nulls:
- expected_null_charfield_repr = u''
- else:
- expected_null_charfield_repr = None
- self.assertValueQuerysetEqual(
- Report.objects.values_list("creator__extra__info", flat=True).order_by("name"),
- [u'e1', u'e2', expected_null_charfield_repr],
- )
-
- # Similarly for select_related(), joins beyond an initial nullable join
- # must use outer joins so that all results are included.
- self.assertQuerysetEqual(
- Report.objects.select_related("creator", "creator__extra").order_by("name"),
- ['<Report: r1>', '<Report: r2>', '<Report: r3>']
- )
-
- # When there are multiple paths to a table from another table, we have
- # to be careful not to accidentally reuse an inappropriate join when
- # using select_related(). We used to return the parent's Detail record
- # here by mistake.
-
- d1 = Detail.objects.create(data="d1")
- d2 = Detail.objects.create(data="d2")
- m1 = Member.objects.create(name="m1", details=d1)
- m2 = Member.objects.create(name="m2", details=d2)
- Child.objects.create(person=m2, parent=m1)
- obj = m1.children.select_related("person__details")[0]
- self.assertEqual(obj.person.details.data, u'd2')
-
- def test_order_by_resetting(self):
- # Calling order_by() with no parameters removes any existing ordering on the
- # model. But it should still be possible to add new ordering after that.
- qs = Author.objects.order_by().order_by('name')
- self.assertTrue('ORDER BY' in qs.query.get_compiler(qs.db).as_sql()[0])
-
- def test_ticket10181(self):
- # Avoid raising an EmptyResultSet if an inner query is probably
- # empty (and hence, not executed).
- self.assertQuerysetEqual(
- Tag.objects.filter(id__in=Tag.objects.filter(id__in=[])),
- []
- )
-
-
-class Queries5Tests(TestCase):
- def setUp(self):
- # Ordering by 'rank' gives us rank2, rank1, rank3. Ordering by the Meta.ordering
- # will be rank3, rank2, rank1.
- n1 = Note.objects.create(note='n1', misc='foo', id=1)
- n2 = Note.objects.create(note='n2', misc='bar', id=2)
- e1 = ExtraInfo.objects.create(info='e1', note=n1)
- e2 = ExtraInfo.objects.create(info='e2', note=n2)
- a1 = Author.objects.create(name='a1', num=1001, extra=e1)
- a2 = Author.objects.create(name='a2', num=2002, extra=e1)
- a3 = Author.objects.create(name='a3', num=3003, extra=e2)
- self.rank1 = Ranking.objects.create(rank=2, author=a2)
- Ranking.objects.create(rank=1, author=a3)
- Ranking.objects.create(rank=3, author=a1)
-
- def test_ordering(self):
- # Cross model ordering is possible in Meta, too.
- self.assertQuerysetEqual(
- Ranking.objects.all(),
- ['<Ranking: 3: a1>', '<Ranking: 2: a2>', '<Ranking: 1: a3>']
- )
- self.assertQuerysetEqual(
- Ranking.objects.all().order_by('rank'),
- ['<Ranking: 1: a3>', '<Ranking: 2: a2>', '<Ranking: 3: a1>']
- )
-
-
- # Ordering of extra() pieces is possible, too and you can mix extra
- # fields and model fields in the ordering.
- self.assertQuerysetEqual(
- Ranking.objects.extra(tables=['django_site'], order_by=['-django_site.id', 'rank']),
- ['<Ranking: 1: a3>', '<Ranking: 2: a2>', '<Ranking: 3: a1>']
- )
-
- qs = Ranking.objects.extra(select={'good': 'case when rank > 2 then 1 else 0 end'})
- self.assertEqual(
- [o.good for o in qs.extra(order_by=('-good',))],
- [True, False, False]
- )
- self.assertQuerysetEqual(
- qs.extra(order_by=('-good', 'id')),
- ['<Ranking: 3: a1>', '<Ranking: 2: a2>', '<Ranking: 1: a3>']
- )
-
- # Despite having some extra aliases in the query, we can still omit
- # them in a values() query.
- dicts = qs.values('id', 'rank').order_by('id')
- self.assertEqual(
- [d.items()[1] for d in dicts],
- [('rank', 2), ('rank', 1), ('rank', 3)]
- )
-
- def test_ticket7256(self):
- # An empty values() call includes all aliases, including those from an
- # extra()
- qs = Ranking.objects.extra(select={'good': 'case when rank > 2 then 1 else 0 end'})
- dicts = qs.values().order_by('id')
- for d in dicts: del d['id']; del d['author_id']
- self.assertEqual(
- [sorted(d.items()) for d in dicts],
- [[('good', 0), ('rank', 2)], [('good', 0), ('rank', 1)], [('good', 1), ('rank', 3)]]
- )
-
- def test_ticket7045(self):
- # Extra tables used to crash SQL construction on the second use.
- qs = Ranking.objects.extra(tables=['django_site'])
- qs.query.get_compiler(qs.db).as_sql()
- # test passes if this doesn't raise an exception.
- qs.query.get_compiler(qs.db).as_sql()
-
- def test_ticket9848(self):
- # Make sure that updates which only filter on sub-tables don't
- # inadvertently update the wrong records (bug #9848).
-
- # Make sure that the IDs from different tables don't happen to match.
- self.assertQuerysetEqual(
- Ranking.objects.filter(author__name='a1'),
- ['<Ranking: 3: a1>']
- )
- self.assertEqual(
- Ranking.objects.filter(author__name='a1').update(rank='4'),
- 1
- )
- r = Ranking.objects.filter(author__name='a1')[0]
- self.assertNotEqual(r.id, r.author.id)
- self.assertEqual(r.rank, 4)
- r.rank = 3
- r.save()
- self.assertQuerysetEqual(
- Ranking.objects.all(),
- ['<Ranking: 3: a1>', '<Ranking: 2: a2>', '<Ranking: 1: a3>']
- )
-
- def test_ticket5261(self):
- self.assertQuerysetEqual(
- Note.objects.exclude(Q()),
- ['<Note: n1>', '<Note: n2>']
- )
-
-
-class SelectRelatedTests(TestCase):
- def test_tickets_3045_3288(self):
- # Once upon a time, select_related() with circular relations would loop
- # infinitely if you forgot to specify "depth". Now we set an arbitrary
- # default upper bound.
- self.assertQuerysetEqual(X.objects.all(), [])
- self.assertQuerysetEqual(X.objects.select_related(), [])
-
-
-class SubclassFKTests(TestCase):
- def test_ticket7778(self):
- # Model subclasses could not be deleted if a nullable foreign key
- # relates to a model that relates back.
-
- num_celebs = Celebrity.objects.count()
- tvc = TvChef.objects.create(name="Huey")
- self.assertEqual(Celebrity.objects.count(), num_celebs + 1)
- Fan.objects.create(fan_of=tvc)
- Fan.objects.create(fan_of=tvc)
- tvc.delete()
-
- # The parent object should have been deleted as well.
- self.assertEqual(Celebrity.objects.count(), num_celebs)
-
-
-class CustomPkTests(TestCase):
- def test_ticket7371(self):
- self.assertQuerysetEqual(Related.objects.order_by('custom'), [])
-
-
-class NullableRelOrderingTests(TestCase):
- def test_ticket10028(self):
- # Ordering by model related to nullable relations(!) should use outer
- # joins, so that all results are included.
- _ = Plaything.objects.create(name="p1")
- self.assertQuerysetEqual(
- Plaything.objects.all(),
- ['<Plaything: p1>']
- )
-
-
-class DisjunctiveFilterTests(TestCase):
- def setUp(self):
- self.n1 = Note.objects.create(note='n1', misc='foo', id=1)
- ExtraInfo.objects.create(info='e1', note=self.n1)
-
- def test_ticket7872(self):
- # Another variation on the disjunctive filtering theme.
-
- # For the purposes of this regression test, it's important that there is no
- # Join object releated to the LeafA we create.
- LeafA.objects.create(data='first')
- self.assertQuerysetEqual(LeafA.objects.all(), ['<LeafA: first>'])
- self.assertQuerysetEqual(
- LeafA.objects.filter(Q(data='first')|Q(join__b__data='second')),
- ['<LeafA: first>']
- )
-
- def test_ticket8283(self):
- # Checking that applying filters after a disjunction works correctly.
- self.assertQuerysetEqual(
- (ExtraInfo.objects.filter(note=self.n1)|ExtraInfo.objects.filter(info='e2')).filter(note=self.n1),
- ['<ExtraInfo: e1>']
- )
- self.assertQuerysetEqual(
- (ExtraInfo.objects.filter(info='e2')|ExtraInfo.objects.filter(note=self.n1)).filter(note=self.n1),
- ['<ExtraInfo: e1>']
- )
-
-
-class Queries6Tests(TestCase):
- def setUp(self):
- generic = NamedCategory.objects.create(name="Generic")
- t1 = Tag.objects.create(name='t1', category=generic)
- t2 = Tag.objects.create(name='t2', parent=t1, category=generic)
- t3 = Tag.objects.create(name='t3', parent=t1)
- t4 = Tag.objects.create(name='t4', parent=t3)
- t5 = Tag.objects.create(name='t5', parent=t3)
- n1 = Note.objects.create(note='n1', misc='foo', id=1)
- ann1 = Annotation.objects.create(name='a1', tag=t1)
- ann1.notes.add(n1)
- ann2 = Annotation.objects.create(name='a2', tag=t4)
-
- # FIXME!! This next test causes really weird PostgreSQL behaviour, but it's
- # only apparent much later when the full test suite runs. I don't understand
- # what's going on here yet.
- ##def test_slicing_and_cache_interaction(self):
- ## # We can do slicing beyond what is currently in the result cache,
- ## # too.
- ##
- ## # We need to mess with the implementation internals a bit here to decrease the
- ## # cache fill size so that we don't read all the results at once.
- ## from django.db.models import query
- ## query.ITER_CHUNK_SIZE = 2
- ## qs = Tag.objects.all()
- ##
- ## # Fill the cache with the first chunk.
- ## self.assertTrue(bool(qs))
- ## self.assertEqual(len(qs._result_cache), 2)
- ##
- ## # Query beyond the end of the cache and check that it is filled out as required.
- ## self.assertEqual(repr(qs[4]), '<Tag: t5>')
- ## self.assertEqual(len(qs._result_cache), 5)
- ##
- ## # But querying beyond the end of the result set will fail.
- ## self.assertRaises(IndexError, lambda: qs[100])
-
- def test_parallel_iterators(self):
- # Test that parallel iterators work.
- qs = Tag.objects.all()
- i1, i2 = iter(qs), iter(qs)
- self.assertEqual(repr(i1.next()), '<Tag: t1>')
- self.assertEqual(repr(i1.next()), '<Tag: t2>')
- self.assertEqual(repr(i2.next()), '<Tag: t1>')
- self.assertEqual(repr(i2.next()), '<Tag: t2>')
- self.assertEqual(repr(i2.next()), '<Tag: t3>')
- self.assertEqual(repr(i1.next()), '<Tag: t3>')
-
- qs = X.objects.all()
- self.assertEqual(bool(qs), False)
- self.assertEqual(bool(qs), False)
-
- def test_nested_queries_sql(self):
- # Nested queries should not evaluate the inner query as part of constructing the
- # SQL (so we should see a nested query here, indicated by two "SELECT" calls).
- qs = Annotation.objects.filter(notes__in=Note.objects.filter(note="xyzzy"))
- self.assertEqual(
- qs.query.get_compiler(qs.db).as_sql()[0].count('SELECT'),
- 2
- )
-
- def test_tickets_8921_9188(self):
- # Incorrect SQL was being generated for certain types of exclude()
- # queries that crossed multi-valued relations (#8921, #9188 and some
- # pre-emptively discovered cases).
-
- self.assertQuerysetEqual(
- PointerA.objects.filter(connection__pointerb__id=1),
- []
- )
- self.assertQuerysetEqual(
- PointerA.objects.exclude(connection__pointerb__id=1),
- []
- )
-
- self.assertQuerysetEqual(
- Tag.objects.exclude(children=None),
- ['<Tag: t1>', '<Tag: t3>']
- )
-
- # This example is tricky because the parent could be NULL, so only checking
- # parents with annotations omits some results (tag t1, in this case).
- self.assertQuerysetEqual(
- Tag.objects.exclude(parent__annotation__name="a1"),
- ['<Tag: t1>', '<Tag: t4>', '<Tag: t5>']
- )
-
- # The annotation->tag link is single values and tag->children links is
- # multi-valued. So we have to split the exclude filter in the middle
- # and then optimise the inner query without losing results.
- self.assertQuerysetEqual(
- Annotation.objects.exclude(tag__children__name="t2"),
- ['<Annotation: a2>']
- )
-
- # Nested queries are possible (although should be used with care, since
- # they have performance problems on backends like MySQL.
-
- self.assertQuerysetEqual(
- Annotation.objects.filter(notes__in=Note.objects.filter(note="n1")),
- ['<Annotation: a1>']
- )
-
- def test_ticket3739(self):
- # The all() method on querysets returns a copy of the queryset.
- q1 = Tag.objects.order_by('name')
- self.assertTrue(q1 is not q1.all())
-
-
-class GeneratorExpressionTests(TestCase):
- def test_ticket10432(self):
- # Using an empty generator expression as the rvalue for an "__in"
- # lookup is legal.
- self.assertQuerysetEqual(
- Note.objects.filter(pk__in=(x for x in ())),
- []
- )
-
-
-class ComparisonTests(TestCase):
- def setUp(self):
- self.n1 = Note.objects.create(note='n1', misc='foo', id=1)
- e1 = ExtraInfo.objects.create(info='e1', note=self.n1)
- self.a2 = Author.objects.create(name='a2', num=2002, extra=e1)
-
- def test_ticket8597(self):
- # Regression tests for case-insensitive comparisons
- _ = Item.objects.create(name="a_b", created=datetime.datetime.now(), creator=self.a2, note=self.n1)
- _ = Item.objects.create(name="x%y", created=datetime.datetime.now(), creator=self.a2, note=self.n1)
- self.assertQuerysetEqual(
- Item.objects.filter(name__iexact="A_b"),
- ['<Item: a_b>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(name__iexact="x%Y"),
- ['<Item: x%y>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(name__istartswith="A_b"),
- ['<Item: a_b>']
- )
- self.assertQuerysetEqual(
- Item.objects.filter(name__iendswith="A_b"),
- ['<Item: a_b>']
- )
-
-
-class ExistsSql(TestCase):
- def setUp(self):
- settings.DEBUG = True
-
- def test_exists(self):
- self.assertFalse(Tag.objects.exists())
- # Ok - so the exist query worked - but did it include too many columns?
- self.assertTrue("id" not in connection.queries[-1]['sql'] and "name" not in connection.queries[-1]['sql'])
-
- def tearDown(self):
- settings.DEBUG = False
-
-
-class QuerysetOrderedTests(unittest.TestCase):
- """
- Tests for the Queryset.ordered attribute.
- """
-
- def test_no_default_or_explicit_ordering(self):
- self.assertEqual(Annotation.objects.all().ordered, False)
-
- def test_cleared_default_ordering(self):
- self.assertEqual(Tag.objects.all().ordered, True)
- self.assertEqual(Tag.objects.all().order_by().ordered, False)
-
- def test_explicit_ordering(self):
- self.assertEqual(Annotation.objects.all().order_by('id').ordered, True)
-
- def test_order_by_extra(self):
- self.assertEqual(Annotation.objects.all().extra(order_by=['id']).ordered, True)
-
- def test_annotated_ordering(self):
- qs = Annotation.objects.annotate(num_notes=Count('notes'))
- self.assertEqual(qs.ordered, False)
- self.assertEqual(qs.order_by('num_notes').ordered, True)
-
-
-class SubqueryTests(TestCase):
- def setUp(self):
- DumbCategory.objects.create(id=1)
- DumbCategory.objects.create(id=2)
- DumbCategory.objects.create(id=3)
-
- def test_ordered_subselect(self):
- "Subselects honor any manual ordering"
- try:
- query = DumbCategory.objects.filter(id__in=DumbCategory.objects.order_by('-id')[0:2])
- self.assertEquals(set(query.values_list('id', flat=True)), set([2,3]))
-
- query = DumbCategory.objects.filter(id__in=DumbCategory.objects.order_by('-id')[:2])
- self.assertEquals(set(query.values_list('id', flat=True)), set([2,3]))
-
- query = DumbCategory.objects.filter(id__in=DumbCategory.objects.order_by('-id')[2:])
- self.assertEquals(set(query.values_list('id', flat=True)), set([1]))
- except DatabaseError:
- # Oracle and MySQL both have problems with sliced subselects.
- # This prevents us from even evaluating this test case at all.
- # Refs #10099
- self.assertFalse(connections[DEFAULT_DB_ALIAS].features.allow_sliced_subqueries)
-
- def test_sliced_delete(self):
- "Delete queries can safely contain sliced subqueries"
- try:
- DumbCategory.objects.filter(id__in=DumbCategory.objects.order_by('-id')[0:1]).delete()
- self.assertEquals(set(DumbCategory.objects.values_list('id', flat=True)), set([1,2]))
- except DatabaseError:
- # Oracle and MySQL both have problems with sliced subselects.
- # This prevents us from even evaluating this test case at all.
- # Refs #10099
- self.assertFalse(connections[DEFAULT_DB_ALIAS].features.allow_sliced_subqueries)
-
-
-class CloneTests(TestCase):
- def test_evaluated_queryset_as_argument(self):
- "#13227 -- If a queryset is already evaluated, it can still be used as a query arg"
- n = Note(note='Test1', misc='misc')
- n.save()
- e = ExtraInfo(info='good', note=n)
- e.save()
-
- n_list = Note.objects.all()
- # Evaluate the Note queryset, populating the query cache
- list(n_list)
- # Use the note queryset in a query, and evalute
- # that query in a way that involves cloning.
- try:
- self.assertEquals(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')
- except:
- self.fail('Query should be clonable')
-
-
-class EmptyQuerySetTests(TestCase):
- def test_emptyqueryset_values(self):
- # #14366 -- Calling .values() on an EmptyQuerySet and then cloning that
- # should not cause an error"
- self.assertQuerysetEqual(
- Number.objects.none().values('num').order_by('num'), []
- )
-
- def test_values_subquery(self):
- self.assertQuerysetEqual(
- Number.objects.filter(pk__in=Number.objects.none().values("pk")),
- []
- )
- self.assertQuerysetEqual(
- Number.objects.filter(pk__in=Number.objects.none().values_list("pk")),
- []
- )
-
-
-class ValuesQuerysetTests(BaseQuerysetTest):
- def test_flat_values_lits(self):
- Number.objects.create(num=72)
- qs = Number.objects.values_list("num")
- qs = qs.values_list("num", flat=True)
- self.assertValueQuerysetEqual(
- qs, [72]
- )
-
-
-class WeirdQuerysetSlicingTests(BaseQuerysetTest):
- def setUp(self):
- Number.objects.create(num=1)
- Number.objects.create(num=2)
-
- Article.objects.create(name='one', created=datetime.datetime.now())
- Article.objects.create(name='two', created=datetime.datetime.now())
- Article.objects.create(name='three', created=datetime.datetime.now())
- Article.objects.create(name='four', created=datetime.datetime.now())
-
- def test_tickets_7698_10202(self):
- # People like to slice with '0' as the high-water mark.
- self.assertQuerysetEqual(Article.objects.all()[0:0], [])
- self.assertQuerysetEqual(Article.objects.all()[0:0][:10], [])
- self.assertEqual(Article.objects.all()[:0].count(), 0)
- self.assertRaisesMessage(
- AssertionError,
- 'Cannot change a query once a slice has been taken.',
- Article.objects.all()[:0].latest, 'created'
- )
-
-
-class EscapingTests(TestCase):
- def test_ticket_7302(self):
- # Reserved names are appropriately escaped
- _ = ReservedName.objects.create(name='a', order=42)
- ReservedName.objects.create(name='b', order=37)
- self.assertQuerysetEqual(
- ReservedName.objects.all().order_by('order'),
- ['<ReservedName: b>', '<ReservedName: a>']
- )
- self.assertQuerysetEqual(
- ReservedName.objects.extra(select={'stuff':'name'}, order_by=('order','stuff')),
- ['<ReservedName: b>', '<ReservedName: a>']
- )
-
-
-# In Python 2.6 beta releases, exceptions raised in __len__ are swallowed
-# (Python issue 1242657), so these cases return an empty list, rather than
-# raising an exception. Not a lot we can do about that, unfortunately, due to
-# the way Python handles list() calls internally. Thus, we skip the tests for
-# Python 2.6.
-if sys.version_info[:2] != (2, 6):
- class OrderingLoopTests(BaseQuerysetTest):
- def setUp(self):
- generic = NamedCategory.objects.create(name="Generic")
- t1 = Tag.objects.create(name='t1', category=generic)
- t2 = Tag.objects.create(name='t2', parent=t1, category=generic)
- t3 = Tag.objects.create(name='t3', parent=t1)
- t4 = Tag.objects.create(name='t4', parent=t3)
- t5 = Tag.objects.create(name='t5', parent=t3)
-
- def test_infinite_loop(self):
- # If you're not careful, it's possible to introduce infinite loops via
- # default ordering on foreign keys in a cycle. We detect that.
- self.assertRaisesMessage(
- FieldError,
- 'Infinite loop caused by ordering.',
- lambda: list(LoopX.objects.all()) # Force queryset evaluation with list()
- )
- self.assertRaisesMessage(
- FieldError,
- 'Infinite loop caused by ordering.',
- lambda: list(LoopZ.objects.all()) # Force queryset evaluation with list()
- )
-
- # Note that this doesn't cause an infinite loop, since the default
- # ordering on the Tag model is empty (and thus defaults to using "id"
- # for the related field).
- self.assertEqual(len(Tag.objects.order_by('parent')), 5)
-
- # ... but you can still order in a non-recursive fashion amongst linked
- # fields (the previous test failed because the default ordering was
- # recursive).
- self.assertQuerysetEqual(
- LoopX.objects.all().order_by('y__x__y__x__id'),
- []
- )
-
-
-# When grouping without specifying ordering, we add an explicit "ORDER BY NULL"
-# portion in MySQL to prevent unnecessary sorting.
-if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == "django.db.backends.mysql":
- class GroupingTests(TestCase):
- def test_null_ordering_added(self):
- query = Tag.objects.values_list('parent_id', flat=True).order_by().query
- query.group_by = ['parent_id']
- sql = query.get_compiler(DEFAULT_DB_ALIAS).as_sql()[0]
- fragment = "ORDER BY "
- pos = sql.find(fragment)
- self.assertEqual(sql.find(fragment, pos + 1), -1)
- self.assertEqual(sql.find("NULL", pos + len(fragment)), pos + len(fragment))
-
-
-# Sqlite 3 does not support passing in more than 1000 parameters except by
-# changing a parameter at compilation time.
-if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != "django.db.backends.sqlite3":
- class InLookupTests(TestCase):
- def test_ticket14244(self):
- # Test that the "in" lookup works with lists of 1000 items or more.
- Number.objects.all().delete()
- numbers = range(2500)
- for num in numbers:
- _ = Number.objects.create(num=num)
- self.assertEqual(
- Number.objects.filter(num__in=numbers[:1000]).count(),
- 1000
- )
- self.assertEqual(
- Number.objects.filter(num__in=numbers[:1001]).count(),
- 1001
- )
- self.assertEqual(
- Number.objects.filter(num__in=numbers[:2000]).count(),
- 2000
- )
- self.assertEqual(
- Number.objects.filter(num__in=numbers).count(),
- 2500
- )
diff --git a/parts/django/tests/regressiontests/queryset_pickle/__init__.py b/parts/django/tests/regressiontests/queryset_pickle/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/queryset_pickle/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/queryset_pickle/models.py b/parts/django/tests/regressiontests/queryset_pickle/models.py
deleted file mode 100644
index df0a6e6..0000000
--- a/parts/django/tests/regressiontests/queryset_pickle/models.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import datetime
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-
-def standalone_number(self):
- return 1
-
-class Numbers(object):
- @staticmethod
- def get_static_number(self):
- return 2
-
- @classmethod
- def get_class_number(self):
- return 3
-
- def get_member_number(self):
- return 4
-
-nn = Numbers()
-
-class Group(models.Model):
- name = models.CharField(_('name'), max_length=100)
-
-class Event(models.Model):
- group = models.ForeignKey(Group)
-
-class Happening(models.Model):
- when = models.DateTimeField(blank=True, default=datetime.datetime.now)
- name = models.CharField(blank=True, max_length=100, default=lambda:"test")
- number1 = models.IntegerField(blank=True, default=standalone_number)
- number2 = models.IntegerField(blank=True, default=Numbers.get_static_number)
- number3 = models.IntegerField(blank=True, default=Numbers.get_class_number)
- number4 = models.IntegerField(blank=True, default=nn.get_member_number)
diff --git a/parts/django/tests/regressiontests/queryset_pickle/tests.py b/parts/django/tests/regressiontests/queryset_pickle/tests.py
deleted file mode 100644
index 5c64687..0000000
--- a/parts/django/tests/regressiontests/queryset_pickle/tests.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import pickle
-import datetime
-
-from django.test import TestCase
-
-from models import Group, Event, Happening
-
-
-class PickleabilityTestCase(TestCase):
- def assert_pickles(self, qs):
- self.assertEqual(list(pickle.loads(pickle.dumps(qs))), list(qs))
-
- def test_related_field(self):
- g = Group.objects.create(name="Ponies Who Own Maybachs")
- self.assert_pickles(Event.objects.filter(group=g.id))
-
- def test_datetime_callable_default_all(self):
- self.assert_pickles(Happening.objects.all())
-
- def test_datetime_callable_default_filter(self):
- self.assert_pickles(Happening.objects.filter(when=datetime.datetime.now()))
-
- def test_lambda_as_default(self):
- self.assert_pickles(Happening.objects.filter(name="test"))
-
- def test_standalone_method_as_default(self):
- self.assert_pickles(Happening.objects.filter(number1=1))
-
- def test_staticmethod_as_default(self):
- self.assert_pickles(Happening.objects.filter(number2=1))
-
- def test_classmethod_as_default(self):
- self.assert_pickles(Happening.objects.filter(number3=1))
-
- def test_membermethod_as_default(self):
- self.assert_pickles(Happening.objects.filter(number4=1))
diff --git a/parts/django/tests/regressiontests/requests/__init__.py b/parts/django/tests/regressiontests/requests/__init__.py
deleted file mode 100644
index 3a32885..0000000
--- a/parts/django/tests/regressiontests/requests/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-"""
-Tests for Django's various Request objects.
-"""
diff --git a/parts/django/tests/regressiontests/requests/models.py b/parts/django/tests/regressiontests/requests/models.py
deleted file mode 100644
index 19f81d6..0000000
--- a/parts/django/tests/regressiontests/requests/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# Need a models module for the test runner.
diff --git a/parts/django/tests/regressiontests/requests/tests.py b/parts/django/tests/regressiontests/requests/tests.py
deleted file mode 100644
index 556d61e..0000000
--- a/parts/django/tests/regressiontests/requests/tests.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from datetime import datetime, timedelta
-import time
-import unittest
-
-from django.http import HttpRequest, HttpResponse, parse_cookie
-from django.core.handlers.wsgi import WSGIRequest
-from django.core.handlers.modpython import ModPythonRequest
-from django.utils.http import cookie_date
-
-class RequestsTests(unittest.TestCase):
-
- def test_httprequest(self):
- request = HttpRequest()
- self.assertEqual(request.GET.keys(), [])
- self.assertEqual(request.POST.keys(), [])
- self.assertEqual(request.COOKIES.keys(), [])
- self.assertEqual(request.META.keys(), [])
-
- def test_wsgirequest(self):
- request = WSGIRequest({'PATH_INFO': 'bogus', 'REQUEST_METHOD': 'bogus'})
- self.assertEqual(request.GET.keys(), [])
- self.assertEqual(request.POST.keys(), [])
- self.assertEqual(request.COOKIES.keys(), [])
- self.assertEqual(set(request.META.keys()), set(['PATH_INFO', 'REQUEST_METHOD', 'SCRIPT_NAME']))
- self.assertEqual(request.META['PATH_INFO'], 'bogus')
- self.assertEqual(request.META['REQUEST_METHOD'], 'bogus')
- self.assertEqual(request.META['SCRIPT_NAME'], '')
-
- def test_modpythonrequest(self):
- class FakeModPythonRequest(ModPythonRequest):
- def __init__(self, *args, **kwargs):
- super(FakeModPythonRequest, self).__init__(*args, **kwargs)
- self._get = self._post = self._meta = self._cookies = {}
-
- class Dummy:
- def get_options(self):
- return {}
-
- req = Dummy()
- req.uri = 'bogus'
- request = FakeModPythonRequest(req)
- self.assertEqual(request.path, 'bogus')
- self.assertEqual(request.GET.keys(), [])
- self.assertEqual(request.POST.keys(), [])
- self.assertEqual(request.COOKIES.keys(), [])
- self.assertEqual(request.META.keys(), [])
-
- def test_parse_cookie(self):
- self.assertEqual(parse_cookie('invalid:key=true'), {})
-
- def test_httprequest_location(self):
- request = HttpRequest()
- self.assertEqual(request.build_absolute_uri(location="https://www.example.com/asdf"),
- 'https://www.example.com/asdf')
-
- request.get_host = lambda: 'www.example.com'
- request.path = ''
- self.assertEqual(request.build_absolute_uri(location="/path/with:colons"),
- 'http://www.example.com/path/with:colons')
diff --git a/parts/django/tests/regressiontests/reverse_single_related/__init__.py b/parts/django/tests/regressiontests/reverse_single_related/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/reverse_single_related/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/reverse_single_related/models.py b/parts/django/tests/regressiontests/reverse_single_related/models.py
deleted file mode 100644
index a2d8fb0..0000000
--- a/parts/django/tests/regressiontests/reverse_single_related/models.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.db import models
-
-class SourceManager(models.Manager):
- def get_query_set(self):
- return super(SourceManager, self).get_query_set().filter(is_public=True)
-
-class Source(models.Model):
- is_public = models.BooleanField()
- objects = SourceManager()
-
-class Item(models.Model):
- source = models.ForeignKey(Source)
diff --git a/parts/django/tests/regressiontests/reverse_single_related/tests.py b/parts/django/tests/regressiontests/reverse_single_related/tests.py
deleted file mode 100644
index 14f3a66..0000000
--- a/parts/django/tests/regressiontests/reverse_single_related/tests.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from django.test import TestCase
-
-from regressiontests.reverse_single_related.models import *
-
-class ReverseSingleRelatedTests(TestCase):
- """
- Regression tests for an object that cannot access a single related
- object due to a restrictive default manager.
- """
-
- def test_reverse_single_related(self):
-
- public_source = Source.objects.create(is_public=True)
- public_item = Item.objects.create(source=public_source)
-
- private_source = Source.objects.create(is_public=False)
- private_item = Item.objects.create(source=private_source)
-
- # Only one source is available via all() due to the custom default manager.
- self.assertQuerysetEqual(
- Source.objects.all(),
- ["<Source: Source object>"]
- )
-
- self.assertEquals(public_item.source, public_source)
-
- # Make sure that an item can still access its related source even if the default
- # manager doesn't normally allow it.
- self.assertEquals(private_item.source, private_source)
-
- # If the manager is marked "use_for_related_fields", it'll get used instead
- # of the "bare" queryset. Usually you'd define this as a property on the class,
- # but this approximates that in a way that's easier in tests.
- Source.objects.use_for_related_fields = True
- private_item = Item.objects.get(pk=private_item.pk)
- self.assertRaises(Source.DoesNotExist, lambda: private_item.source)
diff --git a/parts/django/tests/regressiontests/select_related_onetoone/__init__.py b/parts/django/tests/regressiontests/select_related_onetoone/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/select_related_onetoone/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/select_related_onetoone/models.py b/parts/django/tests/regressiontests/select_related_onetoone/models.py
deleted file mode 100644
index 3d6da9b..0000000
--- a/parts/django/tests/regressiontests/select_related_onetoone/models.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from django.db import models
-
-
-class User(models.Model):
- username = models.CharField(max_length=100)
- email = models.EmailField()
-
- def __unicode__(self):
- return self.username
-
-
-class UserProfile(models.Model):
- user = models.OneToOneField(User)
- city = models.CharField(max_length=100)
- state = models.CharField(max_length=2)
-
- def __unicode__(self):
- return "%s, %s" % (self.city, self.state)
-
-
-class UserStatResult(models.Model):
- results = models.CharField(max_length=50)
-
- def __unicode__(self):
- return 'UserStatResults, results = %s' % (self.results,)
-
-
-class UserStat(models.Model):
- user = models.OneToOneField(User, primary_key=True)
- posts = models.IntegerField()
- results = models.ForeignKey(UserStatResult)
-
- def __unicode__(self):
- return 'UserStat, posts = %s' % (self.posts,)
-
-
-class StatDetails(models.Model):
- base_stats = models.OneToOneField(UserStat)
- comments = models.IntegerField()
-
- def __unicode__(self):
- return 'StatDetails, comments = %s' % (self.comments,)
-
-
-class AdvancedUserStat(UserStat):
- karma = models.IntegerField()
-
-class Image(models.Model):
- name = models.CharField(max_length=100)
-
-
-class Product(models.Model):
- name = models.CharField(max_length=100)
- image = models.OneToOneField(Image, null=True)
diff --git a/parts/django/tests/regressiontests/select_related_onetoone/tests.py b/parts/django/tests/regressiontests/select_related_onetoone/tests.py
deleted file mode 100644
index 4ccb584..0000000
--- a/parts/django/tests/regressiontests/select_related_onetoone/tests.py
+++ /dev/null
@@ -1,94 +0,0 @@
-from django import db
-from django.conf import settings
-from django.test import TestCase
-
-from models import (User, UserProfile, UserStat, UserStatResult, StatDetails,
- AdvancedUserStat, Image, Product)
-
-class ReverseSelectRelatedTestCase(TestCase):
- def setUp(self):
- # Explicitly enable debug for these tests - we need to count
- # the queries that have been issued.
- self.old_debug = settings.DEBUG
- settings.DEBUG = True
-
- user = User.objects.create(username="test")
- userprofile = UserProfile.objects.create(user=user, state="KS",
- city="Lawrence")
- results = UserStatResult.objects.create(results='first results')
- userstat = UserStat.objects.create(user=user, posts=150,
- results=results)
- details = StatDetails.objects.create(base_stats=userstat, comments=259)
-
- user2 = User.objects.create(username="bob")
- results2 = UserStatResult.objects.create(results='moar results')
- advstat = AdvancedUserStat.objects.create(user=user2, posts=200, karma=5,
- results=results2)
- StatDetails.objects.create(base_stats=advstat, comments=250)
-
- db.reset_queries()
-
- def assertQueries(self, queries):
- self.assertEqual(len(db.connection.queries), queries)
-
- def tearDown(self):
- settings.DEBUG = self.old_debug
-
- def test_basic(self):
- u = User.objects.select_related("userprofile").get(username="test")
- self.assertEqual(u.userprofile.state, "KS")
- self.assertQueries(1)
-
- def test_follow_next_level(self):
- u = User.objects.select_related("userstat__results").get(username="test")
- self.assertEqual(u.userstat.posts, 150)
- self.assertEqual(u.userstat.results.results, 'first results')
- self.assertQueries(1)
-
- def test_follow_two(self):
- u = User.objects.select_related("userprofile", "userstat").get(username="test")
- self.assertEqual(u.userprofile.state, "KS")
- self.assertEqual(u.userstat.posts, 150)
- self.assertQueries(1)
-
- def test_follow_two_next_level(self):
- u = User.objects.select_related("userstat__results", "userstat__statdetails").get(username="test")
- self.assertEqual(u.userstat.results.results, 'first results')
- self.assertEqual(u.userstat.statdetails.comments, 259)
- self.assertQueries(1)
-
- def test_forward_and_back(self):
- stat = UserStat.objects.select_related("user__userprofile").get(user__username="test")
- self.assertEqual(stat.user.userprofile.state, 'KS')
- self.assertEqual(stat.user.userstat.posts, 150)
- self.assertQueries(1)
-
- def test_back_and_forward(self):
- u = User.objects.select_related("userstat").get(username="test")
- self.assertEqual(u.userstat.user.username, 'test')
- self.assertQueries(1)
-
- def test_not_followed_by_default(self):
- u = User.objects.select_related().get(username="test")
- self.assertEqual(u.userstat.posts, 150)
- self.assertQueries(2)
-
- def test_follow_from_child_class(self):
- stat = AdvancedUserStat.objects.select_related('user', 'statdetails').get(posts=200)
- self.assertEqual(stat.statdetails.comments, 250)
- self.assertEqual(stat.user.username, 'bob')
- self.assertQueries(1)
-
- def test_follow_inheritance(self):
- stat = UserStat.objects.select_related('user', 'advanceduserstat').get(posts=200)
- self.assertEqual(stat.advanceduserstat.posts, 200)
- self.assertEqual(stat.user.username, 'bob')
- self.assertEqual(stat.advanceduserstat.user.username, 'bob')
- self.assertQueries(1)
-
- def test_nullable_relation(self):
- im = Image.objects.create(name="imag1")
- p1 = Product.objects.create(name="Django Plushie", image=im)
- p2 = Product.objects.create(name="Talking Django Plushie")
-
- self.assertEqual(len(Product.objects.select_related("image")), 2)
diff --git a/parts/django/tests/regressiontests/select_related_regress/__init__.py b/parts/django/tests/regressiontests/select_related_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/select_related_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/select_related_regress/models.py b/parts/django/tests/regressiontests/select_related_regress/models.py
deleted file mode 100644
index 3efb19e..0000000
--- a/parts/django/tests/regressiontests/select_related_regress/models.py
+++ /dev/null
@@ -1,86 +0,0 @@
-from django.db import models
-
-class Building(models.Model):
- name = models.CharField(max_length=10)
-
- def __unicode__(self):
- return u"Building: %s" % self.name
-
-class Device(models.Model):
- building = models.ForeignKey('Building')
- name = models.CharField(max_length=10)
-
- def __unicode__(self):
- return u"device '%s' in building %s" % (self.name, self.building)
-
-class Port(models.Model):
- device = models.ForeignKey('Device')
- port_number = models.CharField(max_length=10)
-
- def __unicode__(self):
- return u"%s/%s" % (self.device.name, self.port_number)
-
-class Connection(models.Model):
- start = models.ForeignKey(Port, related_name='connection_start',
- unique=True)
- end = models.ForeignKey(Port, related_name='connection_end', unique=True)
-
- def __unicode__(self):
- return u"%s to %s" % (self.start, self.end)
-
-# Another non-tree hierarchy that exercises code paths similar to the above
-# example, but in a slightly different configuration.
-class TUser(models.Model):
- name = models.CharField(max_length=200)
-
-class Person(models.Model):
- user = models.ForeignKey(TUser, unique=True)
-
-class Organizer(models.Model):
- person = models.ForeignKey(Person)
-
-class Student(models.Model):
- person = models.ForeignKey(Person)
-
-class Class(models.Model):
- org = models.ForeignKey(Organizer)
-
-class Enrollment(models.Model):
- std = models.ForeignKey(Student)
- cls = models.ForeignKey(Class)
-
-# Models for testing bug #8036.
-class Country(models.Model):
- name = models.CharField(max_length=50)
-
-class State(models.Model):
- name = models.CharField(max_length=50)
- country = models.ForeignKey(Country)
-
-class ClientStatus(models.Model):
- name = models.CharField(max_length=50)
-
-class Client(models.Model):
- name = models.CharField(max_length=50)
- state = models.ForeignKey(State, null=True)
- status = models.ForeignKey(ClientStatus)
-
-class SpecialClient(Client):
- value = models.IntegerField()
-
-# Some model inheritance exercises
-class Parent(models.Model):
- name = models.CharField(max_length=10)
-
- def __unicode__(self):
- return self.name
-
-class Child(Parent):
- value = models.IntegerField()
-
-class Item(models.Model):
- name = models.CharField(max_length=10)
- child = models.ForeignKey(Child, null=True)
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/regressiontests/select_related_regress/tests.py b/parts/django/tests/regressiontests/select_related_regress/tests.py
deleted file mode 100644
index bfa1e21..0000000
--- a/parts/django/tests/regressiontests/select_related_regress/tests.py
+++ /dev/null
@@ -1,134 +0,0 @@
-from django.test import TestCase
-from regressiontests.select_related_regress.models import *
-
-class SelectRelatedRegressTests(TestCase):
-
- def test_regression_7110(self):
- """
- Regression test for bug #7110.
-
- When using select_related(), we must query the
- Device and Building tables using two different aliases (each) in order to
- differentiate the start and end Connection fields. The net result is that
- both the "connections = ..." queries here should give the same results
- without pulling in more than the absolute minimum number of tables
- (history has shown that it's easy to make a mistake in the implementation
- and include some unnecessary bonus joins).
- """
-
- b=Building.objects.create(name='101')
- dev1=Device.objects.create(name="router", building=b)
- dev2=Device.objects.create(name="switch", building=b)
- dev3=Device.objects.create(name="server", building=b)
- port1=Port.objects.create(port_number='4',device=dev1)
- port2=Port.objects.create(port_number='7',device=dev2)
- port3=Port.objects.create(port_number='1',device=dev3)
- c1=Connection.objects.create(start=port1, end=port2)
- c2=Connection.objects.create(start=port2, end=port3)
-
- connections=Connection.objects.filter(start__device__building=b, end__device__building=b).order_by('id')
- self.assertEquals([(c.id, unicode(c.start), unicode(c.end)) for c in connections],
- [(1, u'router/4', u'switch/7'), (2, u'switch/7', u'server/1')])
-
- connections=Connection.objects.filter(start__device__building=b, end__device__building=b).select_related().order_by('id')
- self.assertEquals([(c.id, unicode(c.start), unicode(c.end)) for c in connections],
- [(1, u'router/4', u'switch/7'), (2, u'switch/7', u'server/1')])
-
- # This final query should only join seven tables (port, device and building
- # twice each, plus connection once).
- self.assertEquals(connections.query.count_active_tables(), 7)
-
-
- def test_regression_8106(self):
- """
- Regression test for bug #8106.
-
- Same sort of problem as the previous test, but this time there are
- more extra tables to pull in as part of the select_related() and some
- of them could potentially clash (so need to be kept separate).
- """
-
- us = TUser.objects.create(name="std")
- usp = Person.objects.create(user=us)
- uo = TUser.objects.create(name="org")
- uop = Person.objects.create(user=uo)
- s = Student.objects.create(person = usp)
- o = Organizer.objects.create(person = uop)
- c = Class.objects.create(org=o)
- e = Enrollment.objects.create(std=s, cls=c)
-
- e_related = Enrollment.objects.all().select_related()[0]
- self.assertEquals(e_related.std.person.user.name, u"std")
- self.assertEquals(e_related.cls.org.person.user.name, u"org")
-
- def test_regression_8036(self):
- """
- Regression test for bug #8036
-
- the first related model in the tests below
- ("state") is empty and we try to select the more remotely related
- state__country. The regression here was not skipping the empty column results
- for country before getting status.
- """
-
- australia = Country.objects.create(name='Australia')
- active = ClientStatus.objects.create(name='active')
- client = Client.objects.create(name='client', status=active)
-
- self.assertEquals(client.status, active)
- self.assertEquals(Client.objects.select_related()[0].status, active)
- self.assertEquals(Client.objects.select_related('state')[0].status, active)
- self.assertEquals(Client.objects.select_related('state', 'status')[0].status, active)
- self.assertEquals(Client.objects.select_related('state__country')[0].status, active)
- self.assertEquals(Client.objects.select_related('state__country', 'status')[0].status, active)
- self.assertEquals(Client.objects.select_related('status')[0].status, active)
-
- def test_multi_table_inheritance(self):
- """ Exercising select_related() with multi-table model inheritance. """
- c1 = Child.objects.create(name="child1", value=42)
- i1 = Item.objects.create(name="item1", child=c1)
- i2 = Item.objects.create(name="item2")
-
- self.assertQuerysetEqual(
- Item.objects.select_related("child").order_by("name"),
- ["<Item: item1>", "<Item: item2>"]
- )
-
- def test_regression_12851(self):
- """
- Regression for #12851
-
- Deferred fields are used correctly if you select_related a subset
- of fields.
- """
- australia = Country.objects.create(name='Australia')
- active = ClientStatus.objects.create(name='active')
-
- wa = State.objects.create(name="Western Australia", country=australia)
- c1 = Client.objects.create(name='Brian Burke', state=wa, status=active)
- burke = Client.objects.select_related('state').defer('state__name').get(name='Brian Burke')
-
- self.assertEquals(burke.name, u'Brian Burke')
- self.assertEquals(burke.state.name, u'Western Australia')
-
- # Still works if we're dealing with an inherited class
- sc1 = SpecialClient.objects.create(name='Troy Buswell', state=wa, status=active, value=42)
- troy = SpecialClient.objects.select_related('state').defer('state__name').get(name='Troy Buswell')
-
- self.assertEquals(troy.name, u'Troy Buswell')
- self.assertEquals(troy.value, 42)
- self.assertEquals(troy.state.name, u'Western Australia')
-
- # Still works if we defer an attribute on the inherited class
- troy = SpecialClient.objects.select_related('state').defer('value', 'state__name').get(name='Troy Buswell')
-
- self.assertEquals(troy.name, u'Troy Buswell')
- self.assertEquals(troy.value, 42)
- self.assertEquals(troy.state.name, u'Western Australia')
-
- # Also works if you use only, rather than defer
- troy = SpecialClient.objects.select_related('state').only('name').get(name='Troy Buswell')
-
- self.assertEquals(troy.name, u'Troy Buswell')
- self.assertEquals(troy.value, 42)
- self.assertEquals(troy.state.name, u'Western Australia')
diff --git a/parts/django/tests/regressiontests/serializers_regress/__init__.py b/parts/django/tests/regressiontests/serializers_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/serializers_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/serializers_regress/models.py b/parts/django/tests/regressiontests/serializers_regress/models.py
deleted file mode 100644
index bec0a98..0000000
--- a/parts/django/tests/regressiontests/serializers_regress/models.py
+++ /dev/null
@@ -1,266 +0,0 @@
-"""
-A test spanning all the capabilities of all the serializers.
-
-This class sets up a model for each model field type
-(except for image types, because of the PIL dependency).
-"""
-
-from django.db import models
-from django.contrib.contenttypes import generic
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.localflavor.us.models import USStateField, PhoneNumberField
-
-# The following classes are for testing basic data
-# marshalling, including NULL values, where allowed.
-
-class BooleanData(models.Model):
- data = models.BooleanField()
-
-class CharData(models.Model):
- data = models.CharField(max_length=30, null=True)
-
-class DateData(models.Model):
- data = models.DateField(null=True)
-
-class DateTimeData(models.Model):
- data = models.DateTimeField(null=True)
-
-class DecimalData(models.Model):
- data = models.DecimalField(null=True, decimal_places=3, max_digits=5)
-
-class EmailData(models.Model):
- data = models.EmailField(null=True)
-
-class FileData(models.Model):
- data = models.FileField(null=True, upload_to='/foo/bar')
-
-class FilePathData(models.Model):
- data = models.FilePathField(null=True)
-
-class FloatData(models.Model):
- data = models.FloatField(null=True)
-
-class IntegerData(models.Model):
- data = models.IntegerField(null=True)
-
-class BigIntegerData(models.Model):
- data = models.BigIntegerField(null=True)
-
-# class ImageData(models.Model):
-# data = models.ImageField(null=True)
-
-class IPAddressData(models.Model):
- data = models.IPAddressField(null=True)
-
-class NullBooleanData(models.Model):
- data = models.NullBooleanField(null=True)
-
-class PhoneData(models.Model):
- data = PhoneNumberField(null=True)
-
-class PositiveIntegerData(models.Model):
- data = models.PositiveIntegerField(null=True)
-
-class PositiveSmallIntegerData(models.Model):
- data = models.PositiveSmallIntegerField(null=True)
-
-class SlugData(models.Model):
- data = models.SlugField(null=True)
-
-class SmallData(models.Model):
- data = models.SmallIntegerField(null=True)
-
-class TextData(models.Model):
- data = models.TextField(null=True)
-
-class TimeData(models.Model):
- data = models.TimeField(null=True)
-
-class USStateData(models.Model):
- data = USStateField(null=True)
-
-class XMLData(models.Model):
- data = models.XMLField(null=True)
-
-class Tag(models.Model):
- """A tag on an item."""
- data = models.SlugField()
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
-
- content_object = generic.GenericForeignKey()
-
- class Meta:
- ordering = ["data"]
-
-class GenericData(models.Model):
- data = models.CharField(max_length=30)
-
- tags = generic.GenericRelation(Tag)
-
-# The following test classes are all for validation
-# of related objects; in particular, forward, backward,
-# and self references.
-
-class Anchor(models.Model):
- """This is a model that can be used as
- something for other models to point at"""
-
- data = models.CharField(max_length=30)
-
- class Meta:
- ordering = ('id',)
-
-class UniqueAnchor(models.Model):
- """This is a model that can be used as
- something for other models to point at"""
-
- data = models.CharField(unique=True, max_length=30)
-
-class FKData(models.Model):
- data = models.ForeignKey(Anchor, null=True)
-
-class M2MData(models.Model):
- data = models.ManyToManyField(Anchor, null=True)
-
-class O2OData(models.Model):
- # One to one field can't be null here, since it is a PK.
- data = models.OneToOneField(Anchor, primary_key=True)
-
-class FKSelfData(models.Model):
- data = models.ForeignKey('self', null=True)
-
-class M2MSelfData(models.Model):
- data = models.ManyToManyField('self', null=True, symmetrical=False)
-
-class FKDataToField(models.Model):
- data = models.ForeignKey(UniqueAnchor, null=True, to_field='data')
-
-class FKDataToO2O(models.Model):
- data = models.ForeignKey(O2OData, null=True)
-
-class M2MIntermediateData(models.Model):
- data = models.ManyToManyField(Anchor, null=True, through='Intermediate')
-
-class Intermediate(models.Model):
- left = models.ForeignKey(M2MIntermediateData)
- right = models.ForeignKey(Anchor)
- extra = models.CharField(max_length=30, blank=True, default="doesn't matter")
-
-# The following test classes are for validating the
-# deserialization of objects that use a user-defined
-# field as the primary key.
-# Some of these data types have been commented out
-# because they can't be used as a primary key on one
-# or all database backends.
-
-class BooleanPKData(models.Model):
- data = models.BooleanField(primary_key=True)
-
-class CharPKData(models.Model):
- data = models.CharField(max_length=30, primary_key=True)
-
-# class DatePKData(models.Model):
-# data = models.DateField(primary_key=True)
-
-# class DateTimePKData(models.Model):
-# data = models.DateTimeField(primary_key=True)
-
-class DecimalPKData(models.Model):
- data = models.DecimalField(primary_key=True, decimal_places=3, max_digits=5)
-
-class EmailPKData(models.Model):
- data = models.EmailField(primary_key=True)
-
-# class FilePKData(models.Model):
-# data = models.FileField(primary_key=True, upload_to='/foo/bar')
-
-class FilePathPKData(models.Model):
- data = models.FilePathField(primary_key=True)
-
-class FloatPKData(models.Model):
- data = models.FloatField(primary_key=True)
-
-class IntegerPKData(models.Model):
- data = models.IntegerField(primary_key=True)
-
-# class ImagePKData(models.Model):
-# data = models.ImageField(primary_key=True)
-
-class IPAddressPKData(models.Model):
- data = models.IPAddressField(primary_key=True)
-
-# This is just a Boolean field with null=True, and we can't test a PK value of NULL.
-# class NullBooleanPKData(models.Model):
-# data = models.NullBooleanField(primary_key=True)
-
-class PhonePKData(models.Model):
- data = PhoneNumberField(primary_key=True)
-
-class PositiveIntegerPKData(models.Model):
- data = models.PositiveIntegerField(primary_key=True)
-
-class PositiveSmallIntegerPKData(models.Model):
- data = models.PositiveSmallIntegerField(primary_key=True)
-
-class SlugPKData(models.Model):
- data = models.SlugField(primary_key=True)
-
-class SmallPKData(models.Model):
- data = models.SmallIntegerField(primary_key=True)
-
-# class TextPKData(models.Model):
-# data = models.TextField(primary_key=True)
-
-# class TimePKData(models.Model):
-# data = models.TimeField(primary_key=True)
-
-class USStatePKData(models.Model):
- data = USStateField(primary_key=True)
-
-# class XMLPKData(models.Model):
-# data = models.XMLField(primary_key=True)
-
-class ComplexModel(models.Model):
- field1 = models.CharField(max_length=10)
- field2 = models.CharField(max_length=10)
- field3 = models.CharField(max_length=10)
-
-# Tests for handling fields with pre_save functions, or
-# models with save functions that modify data
-class AutoNowDateTimeData(models.Model):
- data = models.DateTimeField(null=True, auto_now=True)
-
-class ModifyingSaveData(models.Model):
- data = models.IntegerField(null=True)
-
- def save(self):
- "A save method that modifies the data in the object"
- self.data = 666
- super(ModifyingSaveData, self).save(raw)
-
-# Tests for serialization of models using inheritance.
-# Regression for #7202, #7350
-class AbstractBaseModel(models.Model):
- parent_data = models.IntegerField()
- class Meta:
- abstract = True
-
-class InheritAbstractModel(AbstractBaseModel):
- child_data = models.IntegerField()
-
-class BaseModel(models.Model):
- parent_data = models.IntegerField()
-
-class InheritBaseModel(BaseModel):
- child_data = models.IntegerField()
-
-class ExplicitInheritBaseModel(BaseModel):
- parent = models.OneToOneField(BaseModel)
- child_data = models.IntegerField()
-
-class LengthModel(models.Model):
- data = models.IntegerField()
-
- def __len__(self):
- return self.data
diff --git a/parts/django/tests/regressiontests/serializers_regress/tests.py b/parts/django/tests/regressiontests/serializers_regress/tests.py
deleted file mode 100644
index be920c6..0000000
--- a/parts/django/tests/regressiontests/serializers_regress/tests.py
+++ /dev/null
@@ -1,421 +0,0 @@
-"""
-A test spanning all the capabilities of all the serializers.
-
-This class defines sample data and a dynamically generated
-test case that is capable of testing the capabilities of
-the serializers. This includes all valid data values, plus
-forward, backwards and self references.
-"""
-
-
-import datetime
-import decimal
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
-
-from django.conf import settings
-from django.core import serializers, management
-from django.db import transaction, DEFAULT_DB_ALIAS
-from django.test import TestCase
-from django.utils.functional import curry
-
-from models import *
-
-# A set of functions that can be used to recreate
-# test data objects of various kinds.
-# The save method is a raw base model save, to make
-# sure that the data in the database matches the
-# exact test case.
-def data_create(pk, klass, data):
- instance = klass(id=pk)
- instance.data = data
- models.Model.save_base(instance, raw=True)
- return [instance]
-
-def generic_create(pk, klass, data):
- instance = klass(id=pk)
- instance.data = data[0]
- models.Model.save_base(instance, raw=True)
- for tag in data[1:]:
- instance.tags.create(data=tag)
- return [instance]
-
-def fk_create(pk, klass, data):
- instance = klass(id=pk)
- setattr(instance, 'data_id', data)
- models.Model.save_base(instance, raw=True)
- return [instance]
-
-def m2m_create(pk, klass, data):
- instance = klass(id=pk)
- models.Model.save_base(instance, raw=True)
- instance.data = data
- return [instance]
-
-def im2m_create(pk, klass, data):
- instance = klass(id=pk)
- models.Model.save_base(instance, raw=True)
- return [instance]
-
-def im_create(pk, klass, data):
- instance = klass(id=pk)
- instance.right_id = data['right']
- instance.left_id = data['left']
- if 'extra' in data:
- instance.extra = data['extra']
- models.Model.save_base(instance, raw=True)
- return [instance]
-
-def o2o_create(pk, klass, data):
- instance = klass()
- instance.data_id = data
- models.Model.save_base(instance, raw=True)
- return [instance]
-
-def pk_create(pk, klass, data):
- instance = klass()
- instance.data = data
- models.Model.save_base(instance, raw=True)
- return [instance]
-
-def inherited_create(pk, klass, data):
- instance = klass(id=pk,**data)
- # This isn't a raw save because:
- # 1) we're testing inheritance, not field behaviour, so none
- # of the field values need to be protected.
- # 2) saving the child class and having the parent created
- # automatically is easier than manually creating both.
- models.Model.save(instance)
- created = [instance]
- for klass,field in instance._meta.parents.items():
- created.append(klass.objects.get(id=pk))
- return created
-
-# A set of functions that can be used to compare
-# test data objects of various kinds
-def data_compare(testcase, pk, klass, data):
- instance = klass.objects.get(id=pk)
- testcase.assertEqual(data, instance.data,
- "Objects with PK=%d not equal; expected '%s' (%s), got '%s' (%s)" % (
- pk, data, type(data), instance.data, type(instance.data))
- )
-
-def generic_compare(testcase, pk, klass, data):
- instance = klass.objects.get(id=pk)
- testcase.assertEqual(data[0], instance.data)
- testcase.assertEqual(data[1:], [t.data for t in instance.tags.order_by('id')])
-
-def fk_compare(testcase, pk, klass, data):
- instance = klass.objects.get(id=pk)
- testcase.assertEqual(data, instance.data_id)
-
-def m2m_compare(testcase, pk, klass, data):
- instance = klass.objects.get(id=pk)
- testcase.assertEqual(data, [obj.id for obj in instance.data.order_by('id')])
-
-def im2m_compare(testcase, pk, klass, data):
- instance = klass.objects.get(id=pk)
- #actually nothing else to check, the instance just should exist
-
-def im_compare(testcase, pk, klass, data):
- instance = klass.objects.get(id=pk)
- testcase.assertEqual(data['left'], instance.left_id)
- testcase.assertEqual(data['right'], instance.right_id)
- if 'extra' in data:
- testcase.assertEqual(data['extra'], instance.extra)
- else:
- testcase.assertEqual("doesn't matter", instance.extra)
-
-def o2o_compare(testcase, pk, klass, data):
- instance = klass.objects.get(data=data)
- testcase.assertEqual(data, instance.data_id)
-
-def pk_compare(testcase, pk, klass, data):
- instance = klass.objects.get(data=data)
- testcase.assertEqual(data, instance.data)
-
-def inherited_compare(testcase, pk, klass, data):
- instance = klass.objects.get(id=pk)
- for key,value in data.items():
- testcase.assertEqual(value, getattr(instance,key))
-
-# Define some data types. Each data type is
-# actually a pair of functions; one to create
-# and one to compare objects of that type
-data_obj = (data_create, data_compare)
-generic_obj = (generic_create, generic_compare)
-fk_obj = (fk_create, fk_compare)
-m2m_obj = (m2m_create, m2m_compare)
-im2m_obj = (im2m_create, im2m_compare)
-im_obj = (im_create, im_compare)
-o2o_obj = (o2o_create, o2o_compare)
-pk_obj = (pk_create, pk_compare)
-inherited_obj = (inherited_create, inherited_compare)
-
-test_data = [
- # Format: (data type, PK value, Model Class, data)
- (data_obj, 1, BooleanData, True),
- (data_obj, 2, BooleanData, False),
- (data_obj, 10, CharData, "Test Char Data"),
- (data_obj, 11, CharData, ""),
- (data_obj, 12, CharData, "None"),
- (data_obj, 13, CharData, "null"),
- (data_obj, 14, CharData, "NULL"),
- (data_obj, 15, CharData, None),
- # (We use something that will fit into a latin1 database encoding here,
- # because that is still the default used on many system setups.)
- (data_obj, 16, CharData, u'\xa5'),
- (data_obj, 20, DateData, datetime.date(2006,6,16)),
- (data_obj, 21, DateData, None),
- (data_obj, 30, DateTimeData, datetime.datetime(2006,6,16,10,42,37)),
- (data_obj, 31, DateTimeData, None),
- (data_obj, 40, EmailData, "hovercraft@example.com"),
- (data_obj, 41, EmailData, None),
- (data_obj, 42, EmailData, ""),
- (data_obj, 50, FileData, 'file:///foo/bar/whiz.txt'),
-# (data_obj, 51, FileData, None),
- (data_obj, 52, FileData, ""),
- (data_obj, 60, FilePathData, "/foo/bar/whiz.txt"),
- (data_obj, 61, FilePathData, None),
- (data_obj, 62, FilePathData, ""),
- (data_obj, 70, DecimalData, decimal.Decimal('12.345')),
- (data_obj, 71, DecimalData, decimal.Decimal('-12.345')),
- (data_obj, 72, DecimalData, decimal.Decimal('0.0')),
- (data_obj, 73, DecimalData, None),
- (data_obj, 74, FloatData, 12.345),
- (data_obj, 75, FloatData, -12.345),
- (data_obj, 76, FloatData, 0.0),
- (data_obj, 77, FloatData, None),
- (data_obj, 80, IntegerData, 123456789),
- (data_obj, 81, IntegerData, -123456789),
- (data_obj, 82, IntegerData, 0),
- (data_obj, 83, IntegerData, None),
- #(XX, ImageData
- (data_obj, 90, IPAddressData, "127.0.0.1"),
- (data_obj, 91, IPAddressData, None),
- (data_obj, 100, NullBooleanData, True),
- (data_obj, 101, NullBooleanData, False),
- (data_obj, 102, NullBooleanData, None),
- (data_obj, 110, PhoneData, "212-634-5789"),
- (data_obj, 111, PhoneData, None),
- (data_obj, 120, PositiveIntegerData, 123456789),
- (data_obj, 121, PositiveIntegerData, None),
- (data_obj, 130, PositiveSmallIntegerData, 12),
- (data_obj, 131, PositiveSmallIntegerData, None),
- (data_obj, 140, SlugData, "this-is-a-slug"),
- (data_obj, 141, SlugData, None),
- (data_obj, 142, SlugData, ""),
- (data_obj, 150, SmallData, 12),
- (data_obj, 151, SmallData, -12),
- (data_obj, 152, SmallData, 0),
- (data_obj, 153, SmallData, None),
- (data_obj, 160, TextData, """This is a long piece of text.
-It contains line breaks.
-Several of them.
-The end."""),
- (data_obj, 161, TextData, ""),
- (data_obj, 162, TextData, None),
- (data_obj, 170, TimeData, datetime.time(10,42,37)),
- (data_obj, 171, TimeData, None),
- (data_obj, 180, USStateData, "MA"),
- (data_obj, 181, USStateData, None),
- (data_obj, 182, USStateData, ""),
- (data_obj, 190, XMLData, "<foo></foo>"),
- (data_obj, 191, XMLData, None),
- (data_obj, 192, XMLData, ""),
-
- (generic_obj, 200, GenericData, ['Generic Object 1', 'tag1', 'tag2']),
- (generic_obj, 201, GenericData, ['Generic Object 2', 'tag2', 'tag3']),
-
- (data_obj, 300, Anchor, "Anchor 1"),
- (data_obj, 301, Anchor, "Anchor 2"),
- (data_obj, 302, UniqueAnchor, "UAnchor 1"),
-
- (fk_obj, 400, FKData, 300), # Post reference
- (fk_obj, 401, FKData, 500), # Pre reference
- (fk_obj, 402, FKData, None), # Empty reference
-
- (m2m_obj, 410, M2MData, []), # Empty set
- (m2m_obj, 411, M2MData, [300,301]), # Post reference
- (m2m_obj, 412, M2MData, [500,501]), # Pre reference
- (m2m_obj, 413, M2MData, [300,301,500,501]), # Pre and Post reference
-
- (o2o_obj, None, O2OData, 300), # Post reference
- (o2o_obj, None, O2OData, 500), # Pre reference
-
- (fk_obj, 430, FKSelfData, 431), # Pre reference
- (fk_obj, 431, FKSelfData, 430), # Post reference
- (fk_obj, 432, FKSelfData, None), # Empty reference
-
- (m2m_obj, 440, M2MSelfData, []),
- (m2m_obj, 441, M2MSelfData, []),
- (m2m_obj, 442, M2MSelfData, [440, 441]),
- (m2m_obj, 443, M2MSelfData, [445, 446]),
- (m2m_obj, 444, M2MSelfData, [440, 441, 445, 446]),
- (m2m_obj, 445, M2MSelfData, []),
- (m2m_obj, 446, M2MSelfData, []),
-
- (fk_obj, 450, FKDataToField, "UAnchor 1"),
- (fk_obj, 451, FKDataToField, "UAnchor 2"),
- (fk_obj, 452, FKDataToField, None),
-
- (fk_obj, 460, FKDataToO2O, 300),
-
- (im2m_obj, 470, M2MIntermediateData, None),
-
- #testing post- and prereferences and extra fields
- (im_obj, 480, Intermediate, {'right': 300, 'left': 470}),
- (im_obj, 481, Intermediate, {'right': 300, 'left': 490}),
- (im_obj, 482, Intermediate, {'right': 500, 'left': 470}),
- (im_obj, 483, Intermediate, {'right': 500, 'left': 490}),
- (im_obj, 484, Intermediate, {'right': 300, 'left': 470, 'extra': "extra"}),
- (im_obj, 485, Intermediate, {'right': 300, 'left': 490, 'extra': "extra"}),
- (im_obj, 486, Intermediate, {'right': 500, 'left': 470, 'extra': "extra"}),
- (im_obj, 487, Intermediate, {'right': 500, 'left': 490, 'extra': "extra"}),
-
- (im2m_obj, 490, M2MIntermediateData, []),
-
- (data_obj, 500, Anchor, "Anchor 3"),
- (data_obj, 501, Anchor, "Anchor 4"),
- (data_obj, 502, UniqueAnchor, "UAnchor 2"),
-
- (pk_obj, 601, BooleanPKData, True),
- (pk_obj, 602, BooleanPKData, False),
- (pk_obj, 610, CharPKData, "Test Char PKData"),
-# (pk_obj, 620, DatePKData, datetime.date(2006,6,16)),
-# (pk_obj, 630, DateTimePKData, datetime.datetime(2006,6,16,10,42,37)),
- (pk_obj, 640, EmailPKData, "hovercraft@example.com"),
-# (pk_obj, 650, FilePKData, 'file:///foo/bar/whiz.txt'),
- (pk_obj, 660, FilePathPKData, "/foo/bar/whiz.txt"),
- (pk_obj, 670, DecimalPKData, decimal.Decimal('12.345')),
- (pk_obj, 671, DecimalPKData, decimal.Decimal('-12.345')),
- (pk_obj, 672, DecimalPKData, decimal.Decimal('0.0')),
- (pk_obj, 673, FloatPKData, 12.345),
- (pk_obj, 674, FloatPKData, -12.345),
- (pk_obj, 675, FloatPKData, 0.0),
- (pk_obj, 680, IntegerPKData, 123456789),
- (pk_obj, 681, IntegerPKData, -123456789),
- (pk_obj, 682, IntegerPKData, 0),
-# (XX, ImagePKData
- (pk_obj, 690, IPAddressPKData, "127.0.0.1"),
- # (pk_obj, 700, NullBooleanPKData, True),
- # (pk_obj, 701, NullBooleanPKData, False),
- (pk_obj, 710, PhonePKData, "212-634-5789"),
- (pk_obj, 720, PositiveIntegerPKData, 123456789),
- (pk_obj, 730, PositiveSmallIntegerPKData, 12),
- (pk_obj, 740, SlugPKData, "this-is-a-slug"),
- (pk_obj, 750, SmallPKData, 12),
- (pk_obj, 751, SmallPKData, -12),
- (pk_obj, 752, SmallPKData, 0),
-# (pk_obj, 760, TextPKData, """This is a long piece of text.
-# It contains line breaks.
-# Several of them.
-# The end."""),
-# (pk_obj, 770, TimePKData, datetime.time(10,42,37)),
- (pk_obj, 780, USStatePKData, "MA"),
-# (pk_obj, 790, XMLPKData, "<foo></foo>"),
-
- (data_obj, 800, AutoNowDateTimeData, datetime.datetime(2006,6,16,10,42,37)),
- (data_obj, 810, ModifyingSaveData, 42),
-
- (inherited_obj, 900, InheritAbstractModel, {'child_data':37,'parent_data':42}),
- (inherited_obj, 910, ExplicitInheritBaseModel, {'child_data':37,'parent_data':42}),
- (inherited_obj, 920, InheritBaseModel, {'child_data':37,'parent_data':42}),
-
- (data_obj, 1000, BigIntegerData, 9223372036854775807),
- (data_obj, 1001, BigIntegerData, -9223372036854775808),
- (data_obj, 1002, BigIntegerData, 0),
- (data_obj, 1003, BigIntegerData, None),
- (data_obj, 1004, LengthModel, 0),
- (data_obj, 1005, LengthModel, 1),
-]
-
-# Because Oracle treats the empty string as NULL, Oracle is expected to fail
-# when field.empty_strings_allowed is True and the value is None; skip these
-# tests.
-if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
- test_data = [data for data in test_data
- if not (data[0] == data_obj and
- data[2]._meta.get_field('data').empty_strings_allowed and
- data[3] is None)]
-
-# Regression test for #8651 -- a FK to an object iwth PK of 0
-# This won't work on MySQL since it won't let you create an object
-# with a primary key of 0,
-if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.mysql':
- test_data.extend([
- (data_obj, 0, Anchor, "Anchor 0"),
- (fk_obj, 465, FKData, 0),
- ])
-
-# Dynamically create serializer tests to ensure that all
-# registered serializers are automatically tested.
-class SerializerTests(TestCase):
- pass
-
-def serializerTest(format, self):
-
- # Create all the objects defined in the test data
- objects = []
- instance_count = {}
- for (func, pk, klass, datum) in test_data:
- objects.extend(func[0](pk, klass, datum))
-
- # Get a count of the number of objects created for each class
- for klass in instance_count:
- instance_count[klass] = klass.objects.count()
-
- # Add the generic tagged objects to the object list
- objects.extend(Tag.objects.all())
-
- # Serialize the test database
- serialized_data = serializers.serialize(format, objects, indent=2)
-
- for obj in serializers.deserialize(format, serialized_data):
- obj.save()
-
- # Assert that the deserialized data is the same
- # as the original source
- for (func, pk, klass, datum) in test_data:
- func[1](self, pk, klass, datum)
-
- # Assert that the number of objects deserialized is the
- # same as the number that was serialized.
- for klass, count in instance_count.items():
- self.assertEquals(count, klass.objects.count())
-
-def fieldsTest(format, self):
- obj = ComplexModel(field1='first', field2='second', field3='third')
- obj.save_base(raw=True)
-
- # Serialize then deserialize the test database
- serialized_data = serializers.serialize(format, [obj], indent=2, fields=('field1','field3'))
- result = serializers.deserialize(format, serialized_data).next()
-
- # Check that the deserialized object contains data in only the serialized fields.
- self.assertEqual(result.object.field1, 'first')
- self.assertEqual(result.object.field2, '')
- self.assertEqual(result.object.field3, 'third')
-
-def streamTest(format, self):
- obj = ComplexModel(field1='first',field2='second',field3='third')
- obj.save_base(raw=True)
-
- # Serialize the test database to a stream
- stream = StringIO()
- serializers.serialize(format, [obj], indent=2, stream=stream)
-
- # Serialize normally for a comparison
- string_data = serializers.serialize(format, [obj], indent=2)
-
- # Check that the two are the same
- self.assertEqual(string_data, stream.getvalue())
- stream.close()
-
-for format in serializers.get_serializer_formats():
- setattr(SerializerTests, 'test_' + format + '_serializer', curry(serializerTest, format))
- setattr(SerializerTests, 'test_' + format + '_serializer_fields', curry(fieldsTest, format))
- if format != 'python':
- setattr(SerializerTests, 'test_' + format + '_serializer_stream', curry(streamTest, format))
diff --git a/parts/django/tests/regressiontests/servers/__init__.py b/parts/django/tests/regressiontests/servers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/servers/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/servers/models.py b/parts/django/tests/regressiontests/servers/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/servers/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/servers/tests.py b/parts/django/tests/regressiontests/servers/tests.py
deleted file mode 100644
index 4763982..0000000
--- a/parts/django/tests/regressiontests/servers/tests.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""
-Tests for django.core.servers.
-"""
-
-import os
-
-import django
-from django.test import TestCase
-from django.core.handlers.wsgi import WSGIHandler
-from django.core.servers.basehttp import AdminMediaHandler
-
-
-class AdminMediaHandlerTests(TestCase):
-
- def setUp(self):
- self.admin_media_file_path = os.path.abspath(
- os.path.join(django.__path__[0], 'contrib', 'admin', 'media')
- )
- self.handler = AdminMediaHandler(WSGIHandler())
-
- def test_media_urls(self):
- """
- Tests that URLs that look like absolute file paths after the
- settings.ADMIN_MEDIA_PREFIX don't turn into absolute file paths.
- """
- # Cases that should work on all platforms.
- data = (
- ('/media/css/base.css', ('css', 'base.css')),
- )
- # Cases that should raise an exception.
- bad_data = ()
-
- # Add platform-specific cases.
- if os.sep == '/':
- data += (
- # URL, tuple of relative path parts.
- ('/media/\\css/base.css', ('\\css', 'base.css')),
- )
- bad_data += (
- '/media//css/base.css',
- '/media////css/base.css',
- '/media/../css/base.css',
- )
- elif os.sep == '\\':
- bad_data += (
- '/media/C:\css/base.css',
- '/media//\\css/base.css',
- '/media/\\css/base.css',
- '/media/\\\\css/base.css'
- )
- for url, path_tuple in data:
- try:
- output = self.handler.file_path(url)
- except ValueError:
- self.fail("Got a ValueError exception, but wasn't expecting"
- " one. URL was: %s" % url)
- rel_path = os.path.join(*path_tuple)
- desired = os.path.normcase(
- os.path.join(self.admin_media_file_path, rel_path))
- self.assertEqual(output, desired,
- "Got: %s, Expected: %s, URL was: %s" % (output, desired, url))
- for url in bad_data:
- try:
- output = self.handler.file_path(url)
- except ValueError:
- continue
- self.fail('URL: %s should have caused a ValueError exception.'
- % url)
diff --git a/parts/django/tests/regressiontests/settings_tests/__init__.py b/parts/django/tests/regressiontests/settings_tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/settings_tests/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/settings_tests/models.py b/parts/django/tests/regressiontests/settings_tests/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/settings_tests/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/settings_tests/tests.py b/parts/django/tests/regressiontests/settings_tests/tests.py
deleted file mode 100644
index fa217b1..0000000
--- a/parts/django/tests/regressiontests/settings_tests/tests.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import unittest
-from django.conf import settings
-
-class SettingsTests(unittest.TestCase):
-
- #
- # Regression tests for #10130: deleting settings.
- #
-
- def test_settings_delete(self):
- settings.TEST = 'test'
- self.assertEqual('test', settings.TEST)
- del settings.TEST
- self.assertRaises(AttributeError, getattr, settings, 'TEST')
-
- def test_settings_delete_wrapped(self):
- self.assertRaises(TypeError, delattr, settings, '_wrapped')
diff --git a/parts/django/tests/regressiontests/signals_regress/__init__.py b/parts/django/tests/regressiontests/signals_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/signals_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/signals_regress/models.py b/parts/django/tests/regressiontests/signals_regress/models.py
deleted file mode 100644
index e7879d8..0000000
--- a/parts/django/tests/regressiontests/signals_regress/models.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.db import models
-
-class Author(models.Model):
- name = models.CharField(max_length=20)
-
- def __unicode__(self):
- return self.name
-
-class Book(models.Model):
- name = models.CharField(max_length=20)
- authors = models.ManyToManyField(Author)
-
- def __unicode__(self):
- return self.name
diff --git a/parts/django/tests/regressiontests/signals_regress/tests.py b/parts/django/tests/regressiontests/signals_regress/tests.py
deleted file mode 100644
index 234893f..0000000
--- a/parts/django/tests/regressiontests/signals_regress/tests.py
+++ /dev/null
@@ -1,96 +0,0 @@
-import sys
-from StringIO import StringIO
-from django.test import TestCase
-
-from django.db import models
-from regressiontests.signals_regress.models import Author, Book
-
-signal_output = []
-
-def pre_save_test(signal, sender, instance, **kwargs):
- signal_output.append('pre_save signal, %s' % instance)
- if kwargs.get('raw'):
- signal_output.append('Is raw')
-
-def post_save_test(signal, sender, instance, **kwargs):
- signal_output.append('post_save signal, %s' % instance)
- if 'created' in kwargs:
- if kwargs['created']:
- signal_output.append('Is created')
- else:
- signal_output.append('Is updated')
- if kwargs.get('raw'):
- signal_output.append('Is raw')
-
-def pre_delete_test(signal, sender, instance, **kwargs):
- signal_output.append('pre_save signal, %s' % instance)
- signal_output.append('instance.id is not None: %s' % (instance.id != None))
-
-def post_delete_test(signal, sender, instance, **kwargs):
- signal_output.append('post_delete signal, %s' % instance)
- signal_output.append('instance.id is not None: %s' % (instance.id != None))
-
-class SignalsRegressTests(TestCase):
- """
- Testing signals before/after saving and deleting.
- """
-
- def get_signal_output(self, fn, *args, **kwargs):
- # Flush any existing signal output
- global signal_output
- signal_output = []
- fn(*args, **kwargs)
- return signal_output
-
- def setUp(self):
- # Save up the number of connected signals so that we can check at the end
- # that all the signals we register get properly unregistered (#9989)
- self.pre_signals = (len(models.signals.pre_save.receivers),
- len(models.signals.post_save.receivers),
- len(models.signals.pre_delete.receivers),
- len(models.signals.post_delete.receivers))
-
- models.signals.pre_save.connect(pre_save_test)
- models.signals.post_save.connect(post_save_test)
- models.signals.pre_delete.connect(pre_delete_test)
- models.signals.post_delete.connect(post_delete_test)
-
- def tearDown(self):
- models.signals.post_delete.disconnect(post_delete_test)
- models.signals.pre_delete.disconnect(pre_delete_test)
- models.signals.post_save.disconnect(post_save_test)
- models.signals.pre_save.disconnect(pre_save_test)
-
- # Check that all our signals got disconnected properly.
- post_signals = (len(models.signals.pre_save.receivers),
- len(models.signals.post_save.receivers),
- len(models.signals.pre_delete.receivers),
- len(models.signals.post_delete.receivers))
-
- self.assertEquals(self.pre_signals, post_signals)
-
- def test_model_signals(self):
- """ Model saves should throw some signals. """
- a1 = Author(name='Neal Stephenson')
- self.assertEquals(self.get_signal_output(a1.save), [
- "pre_save signal, Neal Stephenson",
- "post_save signal, Neal Stephenson",
- "Is created"
- ])
-
- b1 = Book(name='Snow Crash')
- self.assertEquals(self.get_signal_output(b1.save), [
- "pre_save signal, Snow Crash",
- "post_save signal, Snow Crash",
- "Is created"
- ])
-
- def test_m2m_signals(self):
- """ Assigning and removing to/from m2m shouldn't generate an m2m signal """
-
- b1 = Book(name='Snow Crash')
- self.get_signal_output(b1.save)
- a1 = Author(name='Neal Stephenson')
- self.get_signal_output(a1.save)
- self.assertEquals(self.get_signal_output(setattr, b1, 'authors', [a1]), [])
- self.assertEquals(self.get_signal_output(setattr, b1, 'authors', []), [])
diff --git a/parts/django/tests/regressiontests/sites_framework/__init__.py b/parts/django/tests/regressiontests/sites_framework/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/sites_framework/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/sites_framework/models.py b/parts/django/tests/regressiontests/sites_framework/models.py
deleted file mode 100644
index 9ecc3e6..0000000
--- a/parts/django/tests/regressiontests/sites_framework/models.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from django.contrib.sites.managers import CurrentSiteManager
-from django.contrib.sites.models import Site
-from django.db import models
-
-class AbstractArticle(models.Model):
- title = models.CharField(max_length=50)
-
- objects = models.Manager()
- on_site = CurrentSiteManager()
-
- class Meta:
- abstract = True
-
- def __unicode__(self):
- return self.title
-
-class SyndicatedArticle(AbstractArticle):
- sites = models.ManyToManyField(Site)
-
-class ExclusiveArticle(AbstractArticle):
- site = models.ForeignKey(Site)
-
-class CustomArticle(AbstractArticle):
- places_this_article_should_appear = models.ForeignKey(Site)
-
- objects = models.Manager()
- on_site = CurrentSiteManager("places_this_article_should_appear")
-
-class InvalidArticle(AbstractArticle):
- site = models.ForeignKey(Site)
-
- objects = models.Manager()
- on_site = CurrentSiteManager("places_this_article_should_appear")
-
-class ConfusedArticle(AbstractArticle):
- site = models.IntegerField()
diff --git a/parts/django/tests/regressiontests/sites_framework/tests.py b/parts/django/tests/regressiontests/sites_framework/tests.py
deleted file mode 100644
index b737727..0000000
--- a/parts/django/tests/regressiontests/sites_framework/tests.py
+++ /dev/null
@@ -1,34 +0,0 @@
-from django.conf import settings
-from django.contrib.sites.models import Site
-from django.test import TestCase
-
-from models import SyndicatedArticle, ExclusiveArticle, CustomArticle, InvalidArticle, ConfusedArticle
-
-class SitesFrameworkTestCase(TestCase):
- def setUp(self):
- Site.objects.get_or_create(id=settings.SITE_ID, domain="example.com", name="example.com")
- Site.objects.create(id=settings.SITE_ID+1, domain="example2.com", name="example2.com")
-
- def test_site_fk(self):
- article = ExclusiveArticle.objects.create(title="Breaking News!", site_id=settings.SITE_ID)
- self.assertEqual(ExclusiveArticle.on_site.all().get(), article)
-
- def test_sites_m2m(self):
- article = SyndicatedArticle.objects.create(title="Fresh News!")
- article.sites.add(Site.objects.get(id=settings.SITE_ID))
- article.sites.add(Site.objects.get(id=settings.SITE_ID+1))
- article2 = SyndicatedArticle.objects.create(title="More News!")
- article2.sites.add(Site.objects.get(id=settings.SITE_ID+1))
- self.assertEqual(SyndicatedArticle.on_site.all().get(), article)
-
- def test_custom_named_field(self):
- article = CustomArticle.objects.create(title="Tantalizing News!", places_this_article_should_appear_id=settings.SITE_ID)
- self.assertEqual(CustomArticle.on_site.all().get(), article)
-
- def test_invalid_name(self):
- article = InvalidArticle.objects.create(title="Bad News!", site_id=settings.SITE_ID)
- self.assertRaises(ValueError, InvalidArticle.on_site.all)
-
- def test_invalid_field_type(self):
- article = ConfusedArticle.objects.create(title="More Bad News!", site=settings.SITE_ID)
- self.assertRaises(TypeError, ConfusedArticle.on_site.all)
diff --git a/parts/django/tests/regressiontests/special_headers/__init__.py b/parts/django/tests/regressiontests/special_headers/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/special_headers/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/special_headers/fixtures/data.xml b/parts/django/tests/regressiontests/special_headers/fixtures/data.xml
deleted file mode 100644
index 7e60d45..0000000
--- a/parts/django/tests/regressiontests/special_headers/fixtures/data.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="1" model="special_headers.article">
- <field type="TextField" name="text">text</field>
- </object>
-</django-objects>
diff --git a/parts/django/tests/regressiontests/special_headers/models.py b/parts/django/tests/regressiontests/special_headers/models.py
deleted file mode 100644
index 0c12675..0000000
--- a/parts/django/tests/regressiontests/special_headers/models.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from django.db import models
-
-class Article(models.Model):
- text = models.TextField()
diff --git a/parts/django/tests/regressiontests/special_headers/templates/special_headers/article_detail.html b/parts/django/tests/regressiontests/special_headers/templates/special_headers/article_detail.html
deleted file mode 100644
index 3cbd38c..0000000
--- a/parts/django/tests/regressiontests/special_headers/templates/special_headers/article_detail.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ object }}
diff --git a/parts/django/tests/regressiontests/special_headers/tests.py b/parts/django/tests/regressiontests/special_headers/tests.py
deleted file mode 100644
index f304bfa..0000000
--- a/parts/django/tests/regressiontests/special_headers/tests.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from django.test import TestCase
-from django.contrib.auth.models import User
-
-class SpecialHeadersTest(TestCase):
- fixtures = ['data.xml']
-
- def test_xheaders(self):
- user = User.objects.get(username='super')
- response = self.client.get('/special_headers/article/1/')
- # import pdb; pdb.set_trace()
- self.failUnless('X-Object-Type' not in response)
- self.client.login(username='super', password='secret')
- response = self.client.get('/special_headers/article/1/')
- self.failUnless('X-Object-Type' in response)
- user.is_staff = False
- user.save()
- response = self.client.get('/special_headers/article/1/')
- self.failUnless('X-Object-Type' not in response)
- user.is_staff = True
- user.is_active = False
- user.save()
- response = self.client.get('/special_headers/article/1/')
- self.failUnless('X-Object-Type' not in response)
-
- def test_xview(self):
- user = User.objects.get(username='super')
- response = self.client.head('/special_headers/xview/')
- self.failUnless('X-View' not in response)
- self.client.login(username='super', password='secret')
- response = self.client.head('/special_headers/xview/')
- self.failUnless('X-View' in response)
- user.is_staff = False
- user.save()
- response = self.client.head('/special_headers/xview/')
- self.failUnless('X-View' not in response)
- user.is_staff = True
- user.is_active = False
- user.save()
- response = self.client.head('/special_headers/xview/')
- self.failUnless('X-View' not in response)
diff --git a/parts/django/tests/regressiontests/special_headers/urls.py b/parts/django/tests/regressiontests/special_headers/urls.py
deleted file mode 100644
index 721f60a..0000000
--- a/parts/django/tests/regressiontests/special_headers/urls.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# coding: utf-8
-from django.conf.urls.defaults import *
-from django.views.generic.list_detail import object_detail
-from models import Article
-import views
-
-urlpatterns = patterns('',
- (r'^article/(?P<object_id>\d+)/$', object_detail, {'queryset': Article.objects.all()}),
- (r'^xview/$', views.xview),
-)
diff --git a/parts/django/tests/regressiontests/special_headers/views.py b/parts/django/tests/regressiontests/special_headers/views.py
deleted file mode 100644
index 7a01203..0000000
--- a/parts/django/tests/regressiontests/special_headers/views.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding:utf-8 -*-
-from django.http import HttpResponse
-from django.utils.decorators import decorator_from_middleware
-from django.middleware.doc import XViewMiddleware
-
-xview_dec = decorator_from_middleware(XViewMiddleware)
-
-def xview(request):
- return HttpResponse()
-xview = xview_dec(xview)
diff --git a/parts/django/tests/regressiontests/string_lookup/__init__.py b/parts/django/tests/regressiontests/string_lookup/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/string_lookup/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/string_lookup/models.py b/parts/django/tests/regressiontests/string_lookup/models.py
deleted file mode 100644
index 037854d..0000000
--- a/parts/django/tests/regressiontests/string_lookup/models.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.db import models
-
-class Foo(models.Model):
- name = models.CharField(max_length=50)
- friend = models.CharField(max_length=50, blank=True)
-
- def __unicode__(self):
- return "Foo %s" % self.name
-
-class Bar(models.Model):
- name = models.CharField(max_length=50)
- normal = models.ForeignKey(Foo, related_name='normal_foo')
- fwd = models.ForeignKey("Whiz")
- back = models.ForeignKey("Foo")
-
- def __unicode__(self):
- return "Bar %s" % self.place.name
-
-class Whiz(models.Model):
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return "Whiz %s" % self.name
-
-class Child(models.Model):
- parent = models.OneToOneField('Base')
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return "Child %s" % self.name
-
-class Base(models.Model):
- name = models.CharField(max_length=50)
-
- def __unicode__(self):
- return "Base %s" % self.name
-
-class Article(models.Model):
- name = models.CharField(max_length=50)
- text = models.TextField()
- submitted_from = models.IPAddressField(blank=True, null=True)
-
- def __str__(self):
- return "Article %s" % self.name
diff --git a/parts/django/tests/regressiontests/string_lookup/tests.py b/parts/django/tests/regressiontests/string_lookup/tests.py
deleted file mode 100644
index ddf7a8a..0000000
--- a/parts/django/tests/regressiontests/string_lookup/tests.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.test import TestCase
-from regressiontests.string_lookup.models import Foo, Whiz, Bar, Article, Base, Child
-
-class StringLookupTests(TestCase):
-
- def test_string_form_referencing(self):
- """
- Regression test for #1661 and #1662
-
- Check that string form referencing of
- models works, both as pre and post reference, on all RelatedField types.
- """
-
- f1 = Foo(name="Foo1")
- f1.save()
- f2 = Foo(name="Foo2")
- f2.save()
-
- w1 = Whiz(name="Whiz1")
- w1.save()
-
- b1 = Bar(name="Bar1", normal=f1, fwd=w1, back=f2)
- b1.save()
-
- self.assertEquals(b1.normal, f1)
-
- self.assertEquals(b1.fwd, w1)
-
- self.assertEquals(b1.back, f2)
-
- base1 = Base(name="Base1")
- base1.save()
-
- child1 = Child(name="Child1", parent=base1)
- child1.save()
-
- self.assertEquals(child1.parent, base1)
-
- def test_unicode_chars_in_queries(self):
- """
- Regression tests for #3937
-
- make sure we can use unicode characters in queries.
- If these tests fail on MySQL, it's a problem with the test setup.
- A properly configured UTF-8 database can handle this.
- """
-
- fx = Foo(name='Bjorn', friend=u'François')
- fx.save()
- self.assertEquals(Foo.objects.get(friend__contains=u'\xe7'), fx)
-
- # We can also do the above query using UTF-8 strings.
- self.assertEquals(Foo.objects.get(friend__contains='\xc3\xa7'), fx)
-
- def test_queries_on_textfields(self):
- """
- Regression tests for #5087
-
- make sure we can perform queries on TextFields.
- """
-
- a = Article(name='Test', text='The quick brown fox jumps over the lazy dog.')
- a.save()
- self.assertEquals(Article.objects.get(text__exact='The quick brown fox jumps over the lazy dog.'), a)
-
- self.assertEquals(Article.objects.get(text__contains='quick brown fox'), a)
-
- def test_ipaddress_on_postgresql(self):
- """
- Regression test for #708
-
- "like" queries on IP address fields require casting to text (on PostgreSQL).
- """
- a = Article(name='IP test', text='The body', submitted_from='192.0.2.100')
- a.save()
- self.assertEquals(repr(Article.objects.filter(submitted_from__contains='192.0.2')),
- repr([a]))
diff --git a/parts/django/tests/regressiontests/syndication/__init__.py b/parts/django/tests/regressiontests/syndication/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/syndication/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/syndication/feeds.py b/parts/django/tests/regressiontests/syndication/feeds.py
deleted file mode 100644
index 5563170..0000000
--- a/parts/django/tests/regressiontests/syndication/feeds.py
+++ /dev/null
@@ -1,142 +0,0 @@
-from django.contrib.syndication import feeds, views
-from django.core.exceptions import ObjectDoesNotExist
-from django.utils import feedgenerator, tzinfo
-from models import Article, Entry
-
-
-class ComplexFeed(views.Feed):
- def get_object(self, request, foo=None):
- if foo is not None:
- raise ObjectDoesNotExist
- return None
-
-
-class TestRss2Feed(views.Feed):
- title = 'My blog'
- description = 'A more thorough description of my blog.'
- link = '/blog/'
- feed_guid = '/foo/bar/1234'
- author_name = 'Sally Smith'
- author_email = 'test@example.com'
- author_link = 'http://www.example.com/'
- categories = ('python', 'django')
- feed_copyright = 'Copyright (c) 2007, Sally Smith'
- ttl = 600
-
- def items(self):
- return Entry.objects.all()
-
- def item_description(self, item):
- return "Overridden description: %s" % item
-
- def item_pubdate(self, item):
- return item.date
-
- item_author_name = 'Sally Smith'
- item_author_email = 'test@example.com'
- item_author_link = 'http://www.example.com/'
- item_categories = ('python', 'testing')
- item_copyright = 'Copyright (c) 2007, Sally Smith'
-
-
-class TestRss091Feed(TestRss2Feed):
- feed_type = feedgenerator.RssUserland091Feed
-
-
-class TestAtomFeed(TestRss2Feed):
- feed_type = feedgenerator.Atom1Feed
- subtitle = TestRss2Feed.description
-
-
-class ArticlesFeed(TestRss2Feed):
- """
- A feed to test no link being defined. Articles have no get_absolute_url()
- method, and item_link() is not defined.
- """
- def items(self):
- return Article.objects.all()
-
-
-class TestEnclosureFeed(TestRss2Feed):
- pass
-
-
-class TemplateFeed(TestRss2Feed):
- """
- A feed to test defining item titles and descriptions with templates.
- """
- title_template = 'syndication/title.html'
- description_template = 'syndication/description.html'
-
- # Defining a template overrides any item_title definition
- def item_title(self):
- return "Not in a template"
-
-
-class NaiveDatesFeed(TestAtomFeed):
- """
- A feed with naive (non-timezone-aware) dates.
- """
- def item_pubdate(self, item):
- return item.date
-
-
-class TZAwareDatesFeed(TestAtomFeed):
- """
- A feed with timezone-aware dates.
- """
- def item_pubdate(self, item):
- # Provide a weird offset so that the test can know it's getting this
- # specific offset and not accidentally getting on from
- # settings.TIME_ZONE.
- return item.date.replace(tzinfo=tzinfo.FixedOffset(42))
-
-
-class TestFeedUrlFeed(TestAtomFeed):
- feed_url = 'http://example.com/customfeedurl/'
-
-
-class MyCustomAtom1Feed(feedgenerator.Atom1Feed):
- """
- Test of a custom feed generator class.
- """
- def root_attributes(self):
- attrs = super(MyCustomAtom1Feed, self).root_attributes()
- attrs[u'django'] = u'rocks'
- return attrs
-
- def add_root_elements(self, handler):
- super(MyCustomAtom1Feed, self).add_root_elements(handler)
- handler.addQuickElement(u'spam', u'eggs')
-
- def item_attributes(self, item):
- attrs = super(MyCustomAtom1Feed, self).item_attributes(item)
- attrs[u'bacon'] = u'yum'
- return attrs
-
- def add_item_elements(self, handler, item):
- super(MyCustomAtom1Feed, self).add_item_elements(handler, item)
- handler.addQuickElement(u'ministry', u'silly walks')
-
-
-class TestCustomFeed(TestAtomFeed):
- feed_type = MyCustomAtom1Feed
-
-
-class DeprecatedComplexFeed(feeds.Feed):
- def get_object(self, bits):
- if len(bits) != 1:
- raise ObjectDoesNotExist
- return None
-
-
-class DeprecatedRssFeed(feeds.Feed):
- link = "/blog/"
- title = 'My blog'
-
- def items(self):
- return Entry.objects.all()
-
- def item_link(self, item):
- return "/blog/%s/" % item.pk
-
diff --git a/parts/django/tests/regressiontests/syndication/fixtures/feeddata.json b/parts/django/tests/regressiontests/syndication/fixtures/feeddata.json
deleted file mode 100644
index 4a5c022..0000000
--- a/parts/django/tests/regressiontests/syndication/fixtures/feeddata.json
+++ /dev/null
@@ -1,42 +0,0 @@
-[
- {
- "model": "syndication.entry",
- "pk": 1,
- "fields": {
- "title": "My first entry",
- "date": "2008-01-01 12:30:00"
- }
- },
- {
- "model": "syndication.entry",
- "pk": 2,
- "fields": {
- "title": "My second entry",
- "date": "2008-01-02 12:30:00"
- }
- },
- {
- "model": "syndication.entry",
- "pk": 3,
- "fields": {
- "title": "My third entry",
- "date": "2008-01-02 13:30:00"
- }
- },
- {
- "model": "syndication.entry",
- "pk": 4,
- "fields": {
- "title": "A & B < C > D",
- "date": "2008-01-03 13:30:00"
- }
- },
- {
- "model": "syndication.article",
- "pk": 1,
- "fields": {
- "title": "My first article",
- "entry": "1"
- }
- }
-]
diff --git a/parts/django/tests/regressiontests/syndication/models.py b/parts/django/tests/regressiontests/syndication/models.py
deleted file mode 100644
index 54230b9..0000000
--- a/parts/django/tests/regressiontests/syndication/models.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from django.db import models
-
-class Entry(models.Model):
- title = models.CharField(max_length=200)
- date = models.DateTimeField()
-
- class Meta:
- ordering = ('date',)
-
- def __unicode__(self):
- return self.title
-
- def get_absolute_url(self):
- return "/blog/%s/" % self.pk
-
-
-class Article(models.Model):
- title = models.CharField(max_length=200)
- entry = models.ForeignKey(Entry)
-
- def __unicode__(self):
- return self.title
-
diff --git a/parts/django/tests/regressiontests/syndication/templates/syndication/description.html b/parts/django/tests/regressiontests/syndication/templates/syndication/description.html
deleted file mode 100644
index 85ec82c..0000000
--- a/parts/django/tests/regressiontests/syndication/templates/syndication/description.html
+++ /dev/null
@@ -1 +0,0 @@
-Description in your templates: {{ obj }} \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/syndication/templates/syndication/title.html b/parts/django/tests/regressiontests/syndication/templates/syndication/title.html
deleted file mode 100644
index eb17969..0000000
--- a/parts/django/tests/regressiontests/syndication/templates/syndication/title.html
+++ /dev/null
@@ -1 +0,0 @@
-Title in your templates: {{ obj }} \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/syndication/tests.py b/parts/django/tests/regressiontests/syndication/tests.py
deleted file mode 100644
index 76a6c88..0000000
--- a/parts/django/tests/regressiontests/syndication/tests.py
+++ /dev/null
@@ -1,356 +0,0 @@
-import datetime
-from django.contrib.syndication import feeds, views
-from django.core.exceptions import ImproperlyConfigured
-from django.test import TestCase
-from django.utils import tzinfo
-from django.utils.feedgenerator import rfc2822_date, rfc3339_date
-from models import Entry
-from xml.dom import minidom
-
-try:
- set
-except NameError:
- from sets import Set as set
-
-class FeedTestCase(TestCase):
- fixtures = ['feeddata.json']
-
- def assertChildNodes(self, elem, expected):
- actual = set([n.nodeName for n in elem.childNodes])
- expected = set(expected)
- self.assertEqual(actual, expected)
-
- def assertChildNodeContent(self, elem, expected):
- for k, v in expected.items():
- self.assertEqual(
- elem.getElementsByTagName(k)[0].firstChild.wholeText, v)
-
- def assertCategories(self, elem, expected):
- self.assertEqual(set(i.firstChild.wholeText for i in elem.childNodes if i.nodeName == 'category'), set(expected));
-
-######################################
-# Feed view
-######################################
-
-class SyndicationFeedTest(FeedTestCase):
- """
- Tests for the high-level syndication feed framework.
- """
-
- def test_rss2_feed(self):
- """
- Test the structure and content of feeds generated by Rss201rev2Feed.
- """
- response = self.client.get('/syndication/rss2/')
- doc = minidom.parseString(response.content)
-
- # Making sure there's only 1 `rss` element and that the correct
- # RSS version was specified.
- feed_elem = doc.getElementsByTagName('rss')
- self.assertEqual(len(feed_elem), 1)
- feed = feed_elem[0]
- self.assertEqual(feed.getAttribute('version'), '2.0')
-
- # Making sure there's only one `channel` element w/in the
- # `rss` element.
- chan_elem = feed.getElementsByTagName('channel')
- self.assertEqual(len(chan_elem), 1)
- chan = chan_elem[0]
-
- # Find the last build date
- d = Entry.objects.latest('date').date
- ltz = tzinfo.LocalTimezone(d)
- last_build_date = rfc2822_date(d.replace(tzinfo=ltz))
-
- self.assertChildNodes(chan, ['title', 'link', 'description', 'language', 'lastBuildDate', 'item', 'atom:link', 'ttl', 'copyright', 'category'])
- self.assertChildNodeContent(chan, {
- 'title': 'My blog',
- 'description': 'A more thorough description of my blog.',
- 'link': 'http://example.com/blog/',
- 'language': 'en',
- 'lastBuildDate': last_build_date,
- #'atom:link': '',
- 'ttl': '600',
- 'copyright': 'Copyright (c) 2007, Sally Smith',
- })
- self.assertCategories(chan, ['python', 'django']);
-
- # Ensure the content of the channel is correct
- self.assertChildNodeContent(chan, {
- 'title': 'My blog',
- 'link': 'http://example.com/blog/',
- })
-
- # Check feed_url is passed
- self.assertEqual(
- chan.getElementsByTagName('atom:link')[0].getAttribute('href'),
- 'http://example.com/syndication/rss2/'
- )
-
- # Find the pubdate of the first feed item
- d = Entry.objects.get(pk=1).date
- ltz = tzinfo.LocalTimezone(d)
- pub_date = rfc2822_date(d.replace(tzinfo=ltz))
-
- items = chan.getElementsByTagName('item')
- self.assertEqual(len(items), Entry.objects.count())
- self.assertChildNodeContent(items[0], {
- 'title': 'My first entry',
- 'description': 'Overridden description: My first entry',
- 'link': 'http://example.com/blog/1/',
- 'guid': 'http://example.com/blog/1/',
- 'pubDate': pub_date,
- 'author': 'test@example.com (Sally Smith)',
- })
- self.assertCategories(items[0], ['python', 'testing']);
-
- for item in items:
- self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'category', 'pubDate', 'author'])
-
- def test_rss091_feed(self):
- """
- Test the structure and content of feeds generated by RssUserland091Feed.
- """
- response = self.client.get('/syndication/rss091/')
- doc = minidom.parseString(response.content)
-
- # Making sure there's only 1 `rss` element and that the correct
- # RSS version was specified.
- feed_elem = doc.getElementsByTagName('rss')
- self.assertEqual(len(feed_elem), 1)
- feed = feed_elem[0]
- self.assertEqual(feed.getAttribute('version'), '0.91')
-
- # Making sure there's only one `channel` element w/in the
- # `rss` element.
- chan_elem = feed.getElementsByTagName('channel')
- self.assertEqual(len(chan_elem), 1)
- chan = chan_elem[0]
- self.assertChildNodes(chan, ['title', 'link', 'description', 'language', 'lastBuildDate', 'item', 'atom:link', 'ttl', 'copyright', 'category'])
-
- # Ensure the content of the channel is correct
- self.assertChildNodeContent(chan, {
- 'title': 'My blog',
- 'link': 'http://example.com/blog/',
- })
- self.assertCategories(chan, ['python', 'django'])
-
- # Check feed_url is passed
- self.assertEqual(
- chan.getElementsByTagName('atom:link')[0].getAttribute('href'),
- 'http://example.com/syndication/rss091/'
- )
-
- items = chan.getElementsByTagName('item')
- self.assertEqual(len(items), Entry.objects.count())
- self.assertChildNodeContent(items[0], {
- 'title': 'My first entry',
- 'description': 'Overridden description: My first entry',
- 'link': 'http://example.com/blog/1/',
- })
- for item in items:
- self.assertChildNodes(item, ['title', 'link', 'description'])
- self.assertCategories(item, [])
-
- def test_atom_feed(self):
- """
- Test the structure and content of feeds generated by Atom1Feed.
- """
- response = self.client.get('/syndication/atom/')
- feed = minidom.parseString(response.content).firstChild
-
- self.assertEqual(feed.nodeName, 'feed')
- self.assertEqual(feed.getAttribute('xmlns'), 'http://www.w3.org/2005/Atom')
- self.assertChildNodes(feed, ['title', 'subtitle', 'link', 'id', 'updated', 'entry', 'rights', 'category', 'author'])
- for link in feed.getElementsByTagName('link'):
- if link.getAttribute('rel') == 'self':
- self.assertEqual(link.getAttribute('href'), 'http://example.com/syndication/atom/')
-
- entries = feed.getElementsByTagName('entry')
- self.assertEqual(len(entries), Entry.objects.count())
- for entry in entries:
- self.assertChildNodes(entry, ['title', 'link', 'id', 'summary', 'category', 'updated', 'rights', 'author'])
- summary = entry.getElementsByTagName('summary')[0]
- self.assertEqual(summary.getAttribute('type'), 'html')
-
- def test_custom_feed_generator(self):
- response = self.client.get('/syndication/custom/')
- feed = minidom.parseString(response.content).firstChild
-
- self.assertEqual(feed.nodeName, 'feed')
- self.assertEqual(feed.getAttribute('django'), 'rocks')
- self.assertChildNodes(feed, ['title', 'subtitle', 'link', 'id', 'updated', 'entry', 'spam', 'rights', 'category', 'author'])
-
- entries = feed.getElementsByTagName('entry')
- self.assertEqual(len(entries), Entry.objects.count())
- for entry in entries:
- self.assertEqual(entry.getAttribute('bacon'), 'yum')
- self.assertChildNodes(entry, ['title', 'link', 'id', 'summary', 'ministry', 'rights', 'author', 'updated', 'category'])
- summary = entry.getElementsByTagName('summary')[0]
- self.assertEqual(summary.getAttribute('type'), 'html')
-
- def test_title_escaping(self):
- """
- Tests that titles are escaped correctly in RSS feeds.
- """
- response = self.client.get('/syndication/rss2/')
- doc = minidom.parseString(response.content)
- for item in doc.getElementsByTagName('item'):
- link = item.getElementsByTagName('link')[0]
- if link.firstChild.wholeText == 'http://example.com/blog/4/':
- title = item.getElementsByTagName('title')[0]
- self.assertEquals(title.firstChild.wholeText, u'A &amp; B &lt; C &gt; D')
-
- def test_naive_datetime_conversion(self):
- """
- Test that datetimes are correctly converted to the local time zone.
- """
- # Naive date times passed in get converted to the local time zone, so
- # check the recived zone offset against the local offset.
- response = self.client.get('/syndication/naive-dates/')
- doc = minidom.parseString(response.content)
- updated = doc.getElementsByTagName('updated')[0].firstChild.wholeText
-
- d = Entry.objects.latest('date').date
- ltz = tzinfo.LocalTimezone(d)
- latest = rfc3339_date(d.replace(tzinfo=ltz))
-
- self.assertEqual(updated, latest)
-
- def test_aware_datetime_conversion(self):
- """
- Test that datetimes with timezones don't get trodden on.
- """
- response = self.client.get('/syndication/aware-dates/')
- doc = minidom.parseString(response.content)
- updated = doc.getElementsByTagName('updated')[0].firstChild.wholeText
- self.assertEqual(updated[-6:], '+00:42')
-
- def test_feed_url(self):
- """
- Test that the feed_url can be overridden.
- """
- response = self.client.get('/syndication/feedurl/')
- doc = minidom.parseString(response.content)
- for link in doc.getElementsByTagName('link'):
- if link.getAttribute('rel') == 'self':
- self.assertEqual(link.getAttribute('href'), 'http://example.com/customfeedurl/')
-
- def test_secure_urls(self):
- """
- Test URLs are prefixed with https:// when feed is requested over HTTPS.
- """
- response = self.client.get('/syndication/rss2/', **{
- 'wsgi.url_scheme': 'https',
- })
- doc = minidom.parseString(response.content)
- chan = doc.getElementsByTagName('channel')[0]
- self.assertEqual(
- chan.getElementsByTagName('link')[0].firstChild.wholeText[0:5],
- 'https'
- )
- atom_link = chan.getElementsByTagName('atom:link')[0]
- self.assertEqual(atom_link.getAttribute('href')[0:5], 'https')
- for link in doc.getElementsByTagName('link'):
- if link.getAttribute('rel') == 'self':
- self.assertEqual(link.getAttribute('href')[0:5], 'https')
-
- def test_item_link_error(self):
- """
- Test that a ImproperlyConfigured is raised if no link could be found
- for the item(s).
- """
- self.assertRaises(ImproperlyConfigured,
- self.client.get,
- '/syndication/articles/')
-
- def test_template_feed(self):
- """
- Test that the item title and description can be overridden with
- templates.
- """
- response = self.client.get('/syndication/template/')
- doc = minidom.parseString(response.content)
- feed = doc.getElementsByTagName('rss')[0]
- chan = feed.getElementsByTagName('channel')[0]
- items = chan.getElementsByTagName('item')
-
- self.assertChildNodeContent(items[0], {
- 'title': 'Title in your templates: My first entry',
- 'description': 'Description in your templates: My first entry',
- 'link': 'http://example.com/blog/1/',
- })
-
- def test_add_domain(self):
- """
- Test add_domain() prefixes domains onto the correct URLs.
- """
- self.assertEqual(
- views.add_domain('example.com', '/foo/?arg=value'),
- 'http://example.com/foo/?arg=value'
- )
- self.assertEqual(
- views.add_domain('example.com', '/foo/?arg=value', True),
- 'https://example.com/foo/?arg=value'
- )
- self.assertEqual(
- views.add_domain('example.com', 'http://djangoproject.com/doc/'),
- 'http://djangoproject.com/doc/'
- )
- self.assertEqual(
- views.add_domain('example.com', 'https://djangoproject.com/doc/'),
- 'https://djangoproject.com/doc/'
- )
- self.assertEqual(
- views.add_domain('example.com', 'mailto:uhoh@djangoproject.com'),
- 'mailto:uhoh@djangoproject.com'
- )
-
-
-######################################
-# Deprecated feeds
-######################################
-
-class DeprecatedSyndicationFeedTest(FeedTestCase):
- """
- Tests for the deprecated API (feed() view and the feed_dict etc).
- """
-
- def test_empty_feed_dict(self):
- """
- Test that an empty feed_dict raises a 404.
- """
- response = self.client.get('/syndication/depr-feeds-empty/aware-dates/')
- self.assertEquals(response.status_code, 404)
-
- def test_nonexistent_slug(self):
- """
- Test that a non-existent slug raises a 404.
- """
- response = self.client.get('/syndication/depr-feeds/foobar/')
- self.assertEquals(response.status_code, 404)
-
- def test_rss_feed(self):
- """
- A simple test for Rss201rev2Feed feeds generated by the deprecated
- system.
- """
- response = self.client.get('/syndication/depr-feeds/rss/')
- doc = minidom.parseString(response.content)
- feed = doc.getElementsByTagName('rss')[0]
- self.assertEqual(feed.getAttribute('version'), '2.0')
-
- chan = feed.getElementsByTagName('channel')[0]
- self.assertChildNodes(chan, ['title', 'link', 'description', 'language', 'lastBuildDate', 'item', 'atom:link'])
-
- items = chan.getElementsByTagName('item')
- self.assertEqual(len(items), Entry.objects.count())
-
- def test_complex_base_url(self):
- """
- Tests that the base url for a complex feed doesn't raise a 500
- exception.
- """
- response = self.client.get('/syndication/depr-feeds/complex/')
- self.assertEquals(response.status_code, 404)
-
diff --git a/parts/django/tests/regressiontests/syndication/urls.py b/parts/django/tests/regressiontests/syndication/urls.py
deleted file mode 100644
index 881fa48..0000000
--- a/parts/django/tests/regressiontests/syndication/urls.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from django.conf.urls.defaults import *
-
-import feeds
-
-feed_dict = {
- 'complex': feeds.DeprecatedComplexFeed,
- 'rss': feeds.DeprecatedRssFeed,
-}
-
-urlpatterns = patterns('django.contrib.syndication.views',
- (r'^complex/(?P<foo>.*)/$', feeds.ComplexFeed()),
- (r'^rss2/$', feeds.TestRss2Feed()),
- (r'^rss091/$', feeds.TestRss091Feed()),
- (r'^atom/$', feeds.TestAtomFeed()),
- (r'^custom/$', feeds.TestCustomFeed()),
- (r'^naive-dates/$', feeds.NaiveDatesFeed()),
- (r'^aware-dates/$', feeds.TZAwareDatesFeed()),
- (r'^feedurl/$', feeds.TestFeedUrlFeed()),
- (r'^articles/$', feeds.ArticlesFeed()),
- (r'^template/$', feeds.TemplateFeed()),
-
- (r'^depr-feeds/(?P<url>.*)/$', 'feed', {'feed_dict': feed_dict}),
- (r'^depr-feeds-empty/(?P<url>.*)/$', 'feed', {'feed_dict': None}),
-)
diff --git a/parts/django/tests/regressiontests/templates/__init__.py b/parts/django/tests/regressiontests/templates/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/templates/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/templates/context.py b/parts/django/tests/regressiontests/templates/context.py
deleted file mode 100644
index 394de94..0000000
--- a/parts/django/tests/regressiontests/templates/context.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# coding: utf-8
-from unittest import TestCase
-
-from django.template import Context
-
-
-class ContextTests(TestCase):
- def test_context(self):
- c = Context({"a": 1, "b": "xyzzy"})
- self.assertEqual(c["a"], 1)
- self.assertEqual(c.push(), {})
- c["a"] = 2
- self.assertEqual(c["a"], 2)
- self.assertEqual(c.get("a"), 2)
- self.assertEqual(c.pop(), {"a": 2})
- self.assertEqual(c["a"], 1)
- self.assertEqual(c.get("foo", 42), 42)
diff --git a/parts/django/tests/regressiontests/templates/custom.py b/parts/django/tests/regressiontests/templates/custom.py
deleted file mode 100644
index b346198..0000000
--- a/parts/django/tests/regressiontests/templates/custom.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from unittest import TestCase
-
-from django import template
-
-
-class CustomTests(TestCase):
- def test_filter(self):
- t = template.Template("{% load custom %}{{ string|trim:5 }}")
- self.assertEqual(
- t.render(template.Context({"string": "abcdefghijklmnopqrstuvwxyz"})),
- u"abcde"
- )
diff --git a/parts/django/tests/regressiontests/templates/eggs/tagsegg.egg b/parts/django/tests/regressiontests/templates/eggs/tagsegg.egg
deleted file mode 100755
index 3941914..0000000
--- a/parts/django/tests/regressiontests/templates/eggs/tagsegg.egg
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/templates/filters.py b/parts/django/tests/regressiontests/templates/filters.py
deleted file mode 100644
index af34c58..0000000
--- a/parts/django/tests/regressiontests/templates/filters.py
+++ /dev/null
@@ -1,350 +0,0 @@
-# coding: utf-8
-"""
-Tests for template filters (as opposed to template tags).
-
-The tests are hidden inside a function so that things like timestamps and
-timezones are only evaluated at the moment of execution and will therefore be
-consistent.
-"""
-
-from datetime import date, datetime, timedelta
-
-from django.utils.tzinfo import LocalTimezone, FixedOffset
-from django.utils.safestring import mark_safe
-
-# These two classes are used to test auto-escaping of __unicode__ output.
-class UnsafeClass:
- def __unicode__(self):
- return u'you & me'
-
-class SafeClass:
- def __unicode__(self):
- return mark_safe(u'you &gt; me')
-
-# RESULT SYNTAX --
-# 'template_name': ('template contents', 'context dict',
-# 'expected string output' or Exception class)
-def get_filter_tests():
- now = datetime.now()
- now_tz = datetime.now(LocalTimezone(now))
- now_tz_i = datetime.now(FixedOffset((3 * 60) + 15)) # imaginary time zone
- today = date.today()
-
- return {
- # Default compare with datetime.now()
- 'filter-timesince01' : ('{{ a|timesince }}', {'a': datetime.now() + timedelta(minutes=-1, seconds = -10)}, '1 minute'),
- 'filter-timesince02' : ('{{ a|timesince }}', {'a': datetime.now() - timedelta(days=1, minutes = 1)}, '1 day'),
- 'filter-timesince03' : ('{{ a|timesince }}', {'a': datetime.now() - timedelta(hours=1, minutes=25, seconds = 10)}, '1 hour, 25 minutes'),
-
- # Compare to a given parameter
- 'filter-timesince04' : ('{{ a|timesince:b }}', {'a':now - timedelta(days=2), 'b':now - timedelta(days=1)}, '1 day'),
- 'filter-timesince05' : ('{{ a|timesince:b }}', {'a':now - timedelta(days=2, minutes=1), 'b':now - timedelta(days=2)}, '1 minute'),
-
- # Check that timezone is respected
- 'filter-timesince06' : ('{{ a|timesince:b }}', {'a':now_tz - timedelta(hours=8), 'b':now_tz}, '8 hours'),
-
- # Regression for #7443
- 'filter-timesince07': ('{{ earlier|timesince }}', { 'earlier': now - timedelta(days=7) }, '1 week'),
- 'filter-timesince08': ('{{ earlier|timesince:now }}', { 'now': now, 'earlier': now - timedelta(days=7) }, '1 week'),
- 'filter-timesince09': ('{{ later|timesince }}', { 'later': now + timedelta(days=7) }, '0 minutes'),
- 'filter-timesince10': ('{{ later|timesince:now }}', { 'now': now, 'later': now + timedelta(days=7) }, '0 minutes'),
-
- # Ensures that differing timezones are calculated correctly
- 'filter-timesince11' : ('{{ a|timesince }}', {'a': now}, '0 minutes'),
- 'filter-timesince12' : ('{{ a|timesince }}', {'a': now_tz}, '0 minutes'),
- 'filter-timesince13' : ('{{ a|timesince }}', {'a': now_tz_i}, '0 minutes'),
- 'filter-timesince14' : ('{{ a|timesince:b }}', {'a': now_tz, 'b': now_tz_i}, '0 minutes'),
- 'filter-timesince15' : ('{{ a|timesince:b }}', {'a': now, 'b': now_tz_i}, ''),
- 'filter-timesince16' : ('{{ a|timesince:b }}', {'a': now_tz_i, 'b': now}, ''),
-
- # Regression for #9065 (two date objects).
- 'filter-timesince17' : ('{{ a|timesince:b }}', {'a': today, 'b': today}, '0 minutes'),
- 'filter-timesince18' : ('{{ a|timesince:b }}', {'a': today, 'b': today + timedelta(hours=24)}, '1 day'),
-
- # Default compare with datetime.now()
- 'filter-timeuntil01' : ('{{ a|timeuntil }}', {'a':datetime.now() + timedelta(minutes=2, seconds = 10)}, '2 minutes'),
- 'filter-timeuntil02' : ('{{ a|timeuntil }}', {'a':(datetime.now() + timedelta(days=1, seconds = 10))}, '1 day'),
- 'filter-timeuntil03' : ('{{ a|timeuntil }}', {'a':(datetime.now() + timedelta(hours=8, minutes=10, seconds = 10))}, '8 hours, 10 minutes'),
-
- # Compare to a given parameter
- 'filter-timeuntil04' : ('{{ a|timeuntil:b }}', {'a':now - timedelta(days=1), 'b':now - timedelta(days=2)}, '1 day'),
- 'filter-timeuntil05' : ('{{ a|timeuntil:b }}', {'a':now - timedelta(days=2), 'b':now - timedelta(days=2, minutes=1)}, '1 minute'),
-
- # Regression for #7443
- 'filter-timeuntil06': ('{{ earlier|timeuntil }}', { 'earlier': now - timedelta(days=7) }, '0 minutes'),
- 'filter-timeuntil07': ('{{ earlier|timeuntil:now }}', { 'now': now, 'earlier': now - timedelta(days=7) }, '0 minutes'),
- 'filter-timeuntil08': ('{{ later|timeuntil }}', { 'later': now + timedelta(days=7, hours=1) }, '1 week'),
- 'filter-timeuntil09': ('{{ later|timeuntil:now }}', { 'now': now, 'later': now + timedelta(days=7) }, '1 week'),
-
- # Ensures that differing timezones are calculated correctly
- 'filter-timeuntil10' : ('{{ a|timeuntil }}', {'a': now_tz_i}, '0 minutes'),
- 'filter-timeuntil11' : ('{{ a|timeuntil:b }}', {'a': now_tz_i, 'b': now_tz}, '0 minutes'),
-
- # Regression for #9065 (two date objects).
- 'filter-timeuntil12' : ('{{ a|timeuntil:b }}', {'a': today, 'b': today}, '0 minutes'),
- 'filter-timeuntil13' : ('{{ a|timeuntil:b }}', {'a': today, 'b': today - timedelta(hours=24)}, '1 day'),
-
- 'filter-addslash01': ("{% autoescape off %}{{ a|addslashes }} {{ b|addslashes }}{% endautoescape %}", {"a": "<a>'", "b": mark_safe("<a>'")}, ur"<a>\' <a>\'"),
- 'filter-addslash02': ("{{ a|addslashes }} {{ b|addslashes }}", {"a": "<a>'", "b": mark_safe("<a>'")}, ur"&lt;a&gt;\&#39; <a>\'"),
-
- 'filter-capfirst01': ("{% autoescape off %}{{ a|capfirst }} {{ b|capfirst }}{% endautoescape %}", {"a": "fred>", "b": mark_safe("fred&gt;")}, u"Fred> Fred&gt;"),
- 'filter-capfirst02': ("{{ a|capfirst }} {{ b|capfirst }}", {"a": "fred>", "b": mark_safe("fred&gt;")}, u"Fred&gt; Fred&gt;"),
-
- # Note that applying fix_ampsersands in autoescape mode leads to
- # double escaping.
- 'filter-fix_ampersands01': ("{% autoescape off %}{{ a|fix_ampersands }} {{ b|fix_ampersands }}{% endautoescape %}", {"a": "a&b", "b": mark_safe("a&b")}, u"a&amp;b a&amp;b"),
- 'filter-fix_ampersands02': ("{{ a|fix_ampersands }} {{ b|fix_ampersands }}", {"a": "a&b", "b": mark_safe("a&b")}, u"a&amp;amp;b a&amp;b"),
-
- 'filter-floatformat01': ("{% autoescape off %}{{ a|floatformat }} {{ b|floatformat }}{% endautoescape %}", {"a": "1.42", "b": mark_safe("1.42")}, u"1.4 1.4"),
- 'filter-floatformat02': ("{{ a|floatformat }} {{ b|floatformat }}", {"a": "1.42", "b": mark_safe("1.42")}, u"1.4 1.4"),
-
- # The contents of "linenumbers" is escaped according to the current
- # autoescape setting.
- 'filter-linenumbers01': ("{{ a|linenumbers }} {{ b|linenumbers }}", {"a": "one\n<two>\nthree", "b": mark_safe("one\n&lt;two&gt;\nthree")}, u"1. one\n2. &lt;two&gt;\n3. three 1. one\n2. &lt;two&gt;\n3. three"),
- 'filter-linenumbers02': ("{% autoescape off %}{{ a|linenumbers }} {{ b|linenumbers }}{% endautoescape %}", {"a": "one\n<two>\nthree", "b": mark_safe("one\n&lt;two&gt;\nthree")}, u"1. one\n2. <two>\n3. three 1. one\n2. &lt;two&gt;\n3. three"),
-
- 'filter-lower01': ("{% autoescape off %}{{ a|lower }} {{ b|lower }}{% endautoescape %}", {"a": "Apple & banana", "b": mark_safe("Apple &amp; banana")}, u"apple & banana apple &amp; banana"),
- 'filter-lower02': ("{{ a|lower }} {{ b|lower }}", {"a": "Apple & banana", "b": mark_safe("Apple &amp; banana")}, u"apple &amp; banana apple &amp; banana"),
-
- # The make_list filter can destroy existing escaping, so the results are
- # escaped.
- 'filter-make_list01': ("{% autoescape off %}{{ a|make_list }}{% endautoescape %}", {"a": mark_safe("&")}, u"[u'&']"),
- 'filter-make_list02': ("{{ a|make_list }}", {"a": mark_safe("&")}, u"[u&#39;&amp;&#39;]"),
- 'filter-make_list03': ('{% autoescape off %}{{ a|make_list|stringformat:"s"|safe }}{% endautoescape %}', {"a": mark_safe("&")}, u"[u'&']"),
- 'filter-make_list04': ('{{ a|make_list|stringformat:"s"|safe }}', {"a": mark_safe("&")}, u"[u'&']"),
-
- # Running slugify on a pre-escaped string leads to odd behaviour,
- # but the result is still safe.
- 'filter-slugify01': ("{% autoescape off %}{{ a|slugify }} {{ b|slugify }}{% endautoescape %}", {"a": "a & b", "b": mark_safe("a &amp; b")}, u"a-b a-amp-b"),
- 'filter-slugify02': ("{{ a|slugify }} {{ b|slugify }}", {"a": "a & b", "b": mark_safe("a &amp; b")}, u"a-b a-amp-b"),
-
- # Notice that escaping is applied *after* any filters, so the string
- # formatting here only needs to deal with pre-escaped characters.
- 'filter-stringformat01': ('{% autoescape off %}.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.{% endautoescape %}',
- {"a": "a<b", "b": mark_safe("a<b")}, u". a<b. . a<b."),
- 'filter-stringformat02': ('.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.', {"a": "a<b", "b": mark_safe("a<b")},
- u". a&lt;b. . a<b."),
-
- # Test the title filter
- 'filter-title1' : ('{{ a|title }}', {'a' : 'JOE\'S CRAB SHACK'}, u'Joe&#39;s Crab Shack'),
- 'filter-title2' : ('{{ a|title }}', {'a' : '555 WEST 53RD STREET'}, u'555 West 53rd Street'),
-
- 'filter-truncatewords01': ('{% autoescape off %}{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}{% endautoescape %}',
- {"a": "alpha & bravo", "b": mark_safe("alpha &amp; bravo")}, u"alpha & ... alpha &amp; ..."),
- 'filter-truncatewords02': ('{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}',
- {"a": "alpha & bravo", "b": mark_safe("alpha &amp; bravo")}, u"alpha &amp; ... alpha &amp; ..."),
-
- # The "upper" filter messes up entities (which are case-sensitive),
- # so it's not safe for non-escaping purposes.
- 'filter-upper01': ('{% autoescape off %}{{ a|upper }} {{ b|upper }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a &amp; b")}, u"A & B A &AMP; B"),
- 'filter-upper02': ('{{ a|upper }} {{ b|upper }}', {"a": "a & b", "b": mark_safe("a &amp; b")}, u"A &amp; B A &amp;AMP; B"),
-
- 'filter-urlize01': ('{% autoescape off %}{{ a|urlize }} {{ b|urlize }}{% endautoescape %}', {"a": "http://example.com/?x=&y=", "b": mark_safe("http://example.com?x=&amp;y=")}, u'<a href="http://example.com/?x=&y=" rel="nofollow">http://example.com/?x=&y=</a> <a href="http://example.com?x=&amp;y=" rel="nofollow">http://example.com?x=&amp;y=</a>'),
- 'filter-urlize02': ('{{ a|urlize }} {{ b|urlize }}', {"a": "http://example.com/?x=&y=", "b": mark_safe("http://example.com?x=&amp;y=")}, u'<a href="http://example.com/?x=&amp;y=" rel="nofollow">http://example.com/?x=&amp;y=</a> <a href="http://example.com?x=&amp;y=" rel="nofollow">http://example.com?x=&amp;y=</a>'),
- 'filter-urlize03': ('{% autoescape off %}{{ a|urlize }}{% endautoescape %}', {"a": mark_safe("a &amp; b")}, 'a &amp; b'),
- 'filter-urlize04': ('{{ a|urlize }}', {"a": mark_safe("a &amp; b")}, 'a &amp; b'),
-
- # This will lead to a nonsense result, but at least it won't be
- # exploitable for XSS purposes when auto-escaping is on.
- 'filter-urlize05': ('{% autoescape off %}{{ a|urlize }}{% endautoescape %}', {"a": "<script>alert('foo')</script>"}, "<script>alert('foo')</script>"),
- 'filter-urlize06': ('{{ a|urlize }}', {"a": "<script>alert('foo')</script>"}, '&lt;script&gt;alert(&#39;foo&#39;)&lt;/script&gt;'),
-
- # mailto: testing for urlize
- 'filter-urlize07': ('{{ a|urlize }}', {"a": "Email me at me@example.com"}, 'Email me at <a href="mailto:me@example.com">me@example.com</a>'),
- 'filter-urlize08': ('{{ a|urlize }}', {"a": "Email me at <me@example.com>"}, 'Email me at &lt;<a href="mailto:me@example.com">me@example.com</a>&gt;'),
-
- 'filter-urlizetrunc01': ('{% autoescape off %}{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}{% endautoescape %}', {"a": '"Unsafe" http://example.com/x=&y=', "b": mark_safe('&quot;Safe&quot; http://example.com?x=&amp;y=')}, u'"Unsafe" <a href="http://example.com/x=&y=" rel="nofollow">http:...</a> &quot;Safe&quot; <a href="http://example.com?x=&amp;y=" rel="nofollow">http:...</a>'),
- 'filter-urlizetrunc02': ('{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}', {"a": '"Unsafe" http://example.com/x=&y=', "b": mark_safe('&quot;Safe&quot; http://example.com?x=&amp;y=')}, u'&quot;Unsafe&quot; <a href="http://example.com/x=&amp;y=" rel="nofollow">http:...</a> &quot;Safe&quot; <a href="http://example.com?x=&amp;y=" rel="nofollow">http:...</a>'),
-
- 'filter-wordcount01': ('{% autoescape off %}{{ a|wordcount }} {{ b|wordcount }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a &amp; b")}, "3 3"),
- 'filter-wordcount02': ('{{ a|wordcount }} {{ b|wordcount }}', {"a": "a & b", "b": mark_safe("a &amp; b")}, "3 3"),
-
- 'filter-wordwrap01': ('{% autoescape off %}{{ a|wordwrap:"3" }} {{ b|wordwrap:"3" }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a & b")}, u"a &\nb a &\nb"),
- 'filter-wordwrap02': ('{{ a|wordwrap:"3" }} {{ b|wordwrap:"3" }}', {"a": "a & b", "b": mark_safe("a & b")}, u"a &amp;\nb a &\nb"),
-
- 'filter-ljust01': ('{% autoescape off %}.{{ a|ljust:"5" }}. .{{ b|ljust:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, u".a&b . .a&b ."),
- 'filter-ljust02': ('.{{ a|ljust:"5" }}. .{{ b|ljust:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, u".a&amp;b . .a&b ."),
-
- 'filter-rjust01': ('{% autoescape off %}.{{ a|rjust:"5" }}. .{{ b|rjust:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, u". a&b. . a&b."),
- 'filter-rjust02': ('.{{ a|rjust:"5" }}. .{{ b|rjust:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, u". a&amp;b. . a&b."),
-
- 'filter-center01': ('{% autoescape off %}.{{ a|center:"5" }}. .{{ b|center:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, u". a&b . . a&b ."),
- 'filter-center02': ('.{{ a|center:"5" }}. .{{ b|center:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, u". a&amp;b . . a&b ."),
-
- 'filter-cut01': ('{% autoescape off %}{{ a|cut:"x" }} {{ b|cut:"x" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&amp;y")}, u"&y &amp;y"),
- 'filter-cut02': ('{{ a|cut:"x" }} {{ b|cut:"x" }}', {"a": "x&y", "b": mark_safe("x&amp;y")}, u"&amp;y &amp;y"),
- 'filter-cut03': ('{% autoescape off %}{{ a|cut:"&" }} {{ b|cut:"&" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&amp;y")}, u"xy xamp;y"),
- 'filter-cut04': ('{{ a|cut:"&" }} {{ b|cut:"&" }}', {"a": "x&y", "b": mark_safe("x&amp;y")}, u"xy xamp;y"),
- # Passing ';' to cut can break existing HTML entities, so those strings
- # are auto-escaped.
- 'filter-cut05': ('{% autoescape off %}{{ a|cut:";" }} {{ b|cut:";" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&amp;y")}, u"x&y x&ampy"),
- 'filter-cut06': ('{{ a|cut:";" }} {{ b|cut:";" }}', {"a": "x&y", "b": mark_safe("x&amp;y")}, u"x&amp;y x&amp;ampy"),
-
- # The "escape" filter works the same whether autoescape is on or off,
- # but it has no effect on strings already marked as safe.
- 'filter-escape01': ('{{ a|escape }} {{ b|escape }}', {"a": "x&y", "b": mark_safe("x&y")}, u"x&amp;y x&y"),
- 'filter-escape02': ('{% autoescape off %}{{ a|escape }} {{ b|escape }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, "x&amp;y x&y"),
-
- # It is only applied once, regardless of the number of times it
- # appears in a chain.
- 'filter-escape03': ('{% autoescape off %}{{ a|escape|escape }}{% endautoescape %}', {"a": "x&y"}, u"x&amp;y"),
- 'filter-escape04': ('{{ a|escape|escape }}', {"a": "x&y"}, u"x&amp;y"),
-
- # Force_escape is applied immediately. It can be used to provide
- # double-escaping, for example.
- 'filter-force-escape01': ('{% autoescape off %}{{ a|force_escape }}{% endautoescape %}', {"a": "x&y"}, u"x&amp;y"),
- 'filter-force-escape02': ('{{ a|force_escape }}', {"a": "x&y"}, u"x&amp;y"),
- 'filter-force-escape03': ('{% autoescape off %}{{ a|force_escape|force_escape }}{% endautoescape %}', {"a": "x&y"}, u"x&amp;amp;y"),
- 'filter-force-escape04': ('{{ a|force_escape|force_escape }}', {"a": "x&y"}, u"x&amp;amp;y"),
-
- # Because the result of force_escape is "safe", an additional
- # escape filter has no effect.
- 'filter-force-escape05': ('{% autoescape off %}{{ a|force_escape|escape }}{% endautoescape %}', {"a": "x&y"}, u"x&amp;y"),
- 'filter-force-escape06': ('{{ a|force_escape|escape }}', {"a": "x&y"}, u"x&amp;y"),
- 'filter-force-escape07': ('{% autoescape off %}{{ a|escape|force_escape }}{% endautoescape %}', {"a": "x&y"}, u"x&amp;y"),
- 'filter-force-escape08': ('{{ a|escape|force_escape }}', {"a": "x&y"}, u"x&amp;y"),
-
- # The contents in "linebreaks" and "linebreaksbr" are escaped
- # according to the current autoescape setting.
- 'filter-linebreaks01': ('{{ a|linebreaks }} {{ b|linebreaks }}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"<p>x&amp;<br />y</p> <p>x&<br />y</p>"),
- 'filter-linebreaks02': ('{% autoescape off %}{{ a|linebreaks }} {{ b|linebreaks }}{% endautoescape %}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"<p>x&<br />y</p> <p>x&<br />y</p>"),
-
- 'filter-linebreaksbr01': ('{{ a|linebreaksbr }} {{ b|linebreaksbr }}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"x&amp;<br />y x&<br />y"),
- 'filter-linebreaksbr02': ('{% autoescape off %}{{ a|linebreaksbr }} {{ b|linebreaksbr }}{% endautoescape %}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"x&<br />y x&<br />y"),
-
- 'filter-safe01': ("{{ a }} -- {{ a|safe }}", {"a": u"<b>hello</b>"}, "&lt;b&gt;hello&lt;/b&gt; -- <b>hello</b>"),
- 'filter-safe02': ("{% autoescape off %}{{ a }} -- {{ a|safe }}{% endautoescape %}", {"a": "<b>hello</b>"}, u"<b>hello</b> -- <b>hello</b>"),
-
- 'filter-safeseq01': ('{{ a|join:", " }} -- {{ a|safeseq|join:", " }}', {"a": ["&", "<"]}, "&amp;, &lt; -- &, <"),
- 'filter-safeseq02': ('{% autoescape off %}{{ a|join:", " }} -- {{ a|safeseq|join:", " }}{% endautoescape %}', {"a": ["&", "<"]}, "&, < -- &, <"),
-
- 'filter-removetags01': ('{{ a|removetags:"a b" }} {{ b|removetags:"a b" }}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, u"x &lt;p&gt;y&lt;/p&gt; x <p>y</p>"),
- 'filter-removetags02': ('{% autoescape off %}{{ a|removetags:"a b" }} {{ b|removetags:"a b" }}{% endautoescape %}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, u"x <p>y</p> x <p>y</p>"),
-
- 'filter-striptags01': ('{{ a|striptags }} {{ b|striptags }}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, "x y x y"),
- 'filter-striptags02': ('{% autoescape off %}{{ a|striptags }} {{ b|striptags }}{% endautoescape %}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, "x y x y"),
-
- 'filter-first01': ('{{ a|first }} {{ b|first }}', {"a": ["a&b", "x"], "b": [mark_safe("a&b"), "x"]}, "a&amp;b a&b"),
- 'filter-first02': ('{% autoescape off %}{{ a|first }} {{ b|first }}{% endautoescape %}', {"a": ["a&b", "x"], "b": [mark_safe("a&b"), "x"]}, "a&b a&b"),
-
- 'filter-last01': ('{{ a|last }} {{ b|last }}', {"a": ["x", "a&b"], "b": ["x", mark_safe("a&b")]}, "a&amp;b a&b"),
- 'filter-last02': ('{% autoescape off %}{{ a|last }} {{ b|last }}{% endautoescape %}', {"a": ["x", "a&b"], "b": ["x", mark_safe("a&b")]}, "a&b a&b"),
-
- 'filter-random01': ('{{ a|random }} {{ b|random }}', {"a": ["a&b", "a&b"], "b": [mark_safe("a&b"), mark_safe("a&b")]}, "a&amp;b a&b"),
- 'filter-random02': ('{% autoescape off %}{{ a|random }} {{ b|random }}{% endautoescape %}', {"a": ["a&b", "a&b"], "b": [mark_safe("a&b"), mark_safe("a&b")]}, "a&b a&b"),
-
- 'filter-slice01': ('{{ a|slice:"1:3" }} {{ b|slice:"1:3" }}', {"a": "a&b", "b": mark_safe("a&b")}, "&amp;b &b"),
- 'filter-slice02': ('{% autoescape off %}{{ a|slice:"1:3" }} {{ b|slice:"1:3" }}{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, "&b &b"),
-
- 'filter-unordered_list01': ('{{ a|unordered_list }}', {"a": ["x>", [["<y", []]]]}, "\t<li>x&gt;\n\t<ul>\n\t\t<li>&lt;y</li>\n\t</ul>\n\t</li>"),
- 'filter-unordered_list02': ('{% autoescape off %}{{ a|unordered_list }}{% endautoescape %}', {"a": ["x>", [["<y", []]]]}, "\t<li>x>\n\t<ul>\n\t\t<li><y</li>\n\t</ul>\n\t</li>"),
- 'filter-unordered_list03': ('{{ a|unordered_list }}', {"a": ["x>", [[mark_safe("<y"), []]]]}, "\t<li>x&gt;\n\t<ul>\n\t\t<li><y</li>\n\t</ul>\n\t</li>"),
- 'filter-unordered_list04': ('{% autoescape off %}{{ a|unordered_list }}{% endautoescape %}', {"a": ["x>", [[mark_safe("<y"), []]]]}, "\t<li>x>\n\t<ul>\n\t\t<li><y</li>\n\t</ul>\n\t</li>"),
- 'filter-unordered_list05': ('{% autoescape off %}{{ a|unordered_list }}{% endautoescape %}', {"a": ["x>", [["<y", []]]]}, "\t<li>x>\n\t<ul>\n\t\t<li><y</li>\n\t</ul>\n\t</li>"),
-
- # Literal string arguments to the default filter are always treated as
- # safe strings, regardless of the auto-escaping state.
- #
- # Note: we have to use {"a": ""} here, otherwise the invalid template
- # variable string interferes with the test result.
- 'filter-default01': ('{{ a|default:"x<" }}', {"a": ""}, "x<"),
- 'filter-default02': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": ""}, "x<"),
- 'filter-default03': ('{{ a|default:"x<" }}', {"a": mark_safe("x>")}, "x>"),
- 'filter-default04': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": mark_safe("x>")}, "x>"),
-
- 'filter-default_if_none01': ('{{ a|default:"x<" }}', {"a": None}, "x<"),
- 'filter-default_if_none02': ('{% autoescape off %}{{ a|default:"x<" }}{% endautoescape %}', {"a": None}, "x<"),
-
- 'filter-phone2numeric01': ('{{ a|phone2numeric }} {{ b|phone2numeric }}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>") }, "&lt;1-800-2255-63&gt; <1-800-2255-63>"),
- 'filter-phone2numeric02': ('{% autoescape off %}{{ a|phone2numeric }} {{ b|phone2numeric }}{% endautoescape %}', {"a": "<1-800-call-me>", "b": mark_safe("<1-800-call-me>") }, "<1-800-2255-63> <1-800-2255-63>"),
- 'filter-phone2numeric03': ('{{ a|phone2numeric }}', {"a": "How razorback-jumping frogs can level six piqued gymnasts!"}, "469 729672225-5867464 37647 226 53835 749 747833 49662787!"),
-
- # Ensure iriencode keeps safe strings:
- 'filter-iriencode01': ('{{ url|iriencode }}', {'url': '?test=1&me=2'}, '?test=1&amp;me=2'),
- 'filter-iriencode02': ('{% autoescape off %}{{ url|iriencode }}{% endautoescape %}', {'url': '?test=1&me=2'}, '?test=1&me=2'),
- 'filter-iriencode03': ('{{ url|iriencode }}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'),
- 'filter-iriencode04': ('{% autoescape off %}{{ url|iriencode }}{% endautoescape %}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'),
-
- # Chaining a bunch of safeness-preserving filters should not alter
- # the safe status either way.
- 'chaining01': ('{{ a|capfirst|center:"7" }}.{{ b|capfirst|center:"7" }}', {"a": "a < b", "b": mark_safe("a < b")}, " A &lt; b . A < b "),
- 'chaining02': ('{% autoescape off %}{{ a|capfirst|center:"7" }}.{{ b|capfirst|center:"7" }}{% endautoescape %}', {"a": "a < b", "b": mark_safe("a < b")}, " A < b . A < b "),
-
- # Using a filter that forces a string back to unsafe:
- 'chaining03': ('{{ a|cut:"b"|capfirst }}.{{ b|cut:"b"|capfirst }}', {"a": "a < b", "b": mark_safe("a < b")}, "A &lt; .A < "),
- 'chaining04': ('{% autoescape off %}{{ a|cut:"b"|capfirst }}.{{ b|cut:"b"|capfirst }}{% endautoescape %}', {"a": "a < b", "b": mark_safe("a < b")}, "A < .A < "),
-
- # Using a filter that forces safeness does not lead to double-escaping
- 'chaining05': ('{{ a|escape|capfirst }}', {"a": "a < b"}, "A &lt; b"),
- 'chaining06': ('{% autoescape off %}{{ a|escape|capfirst }}{% endautoescape %}', {"a": "a < b"}, "A &lt; b"),
-
- # Force to safe, then back (also showing why using force_escape too
- # early in a chain can lead to unexpected results).
- 'chaining07': ('{{ a|force_escape|cut:";" }}', {"a": "a < b"}, "a &amp;lt b"),
- 'chaining08': ('{% autoescape off %}{{ a|force_escape|cut:";" }}{% endautoescape %}', {"a": "a < b"}, "a &lt b"),
- 'chaining09': ('{{ a|cut:";"|force_escape }}', {"a": "a < b"}, "a &lt; b"),
- 'chaining10': ('{% autoescape off %}{{ a|cut:";"|force_escape }}{% endautoescape %}', {"a": "a < b"}, "a &lt; b"),
- 'chaining11': ('{{ a|cut:"b"|safe }}', {"a": "a < b"}, "a < "),
- 'chaining12': ('{% autoescape off %}{{ a|cut:"b"|safe }}{% endautoescape %}', {"a": "a < b"}, "a < "),
- 'chaining13': ('{{ a|safe|force_escape }}', {"a": "a < b"}, "a &lt; b"),
- 'chaining14': ('{% autoescape off %}{{ a|safe|force_escape }}{% endautoescape %}', {"a": "a < b"}, "a &lt; b"),
-
- # Filters decorated with stringfilter still respect is_safe.
- 'autoescape-stringfilter01': (r'{{ unsafe|capfirst }}', {'unsafe': UnsafeClass()}, 'You &amp; me'),
- 'autoescape-stringfilter02': (r'{% autoescape off %}{{ unsafe|capfirst }}{% endautoescape %}', {'unsafe': UnsafeClass()}, 'You & me'),
- 'autoescape-stringfilter03': (r'{{ safe|capfirst }}', {'safe': SafeClass()}, 'You &gt; me'),
- 'autoescape-stringfilter04': (r'{% autoescape off %}{{ safe|capfirst }}{% endautoescape %}', {'safe': SafeClass()}, 'You &gt; me'),
-
- 'escapejs01': (r'{{ a|escapejs }}', {'a': 'testing\r\njavascript \'string" <b>escaping</b>'}, 'testing\\u000D\\u000Ajavascript \\u0027string\\u0022 \\u003Cb\\u003Eescaping\\u003C/b\\u003E'),
- 'escapejs02': (r'{% autoescape off %}{{ a|escapejs }}{% endautoescape %}', {'a': 'testing\r\njavascript \'string" <b>escaping</b>'}, 'testing\\u000D\\u000Ajavascript \\u0027string\\u0022 \\u003Cb\\u003Eescaping\\u003C/b\\u003E'),
-
-
- # length filter.
- 'length01': ('{{ list|length }}', {'list': ['4', None, True, {}]}, '4'),
- 'length02': ('{{ list|length }}', {'list': []}, '0'),
- 'length03': ('{{ string|length }}', {'string': ''}, '0'),
- 'length04': ('{{ string|length }}', {'string': 'django'}, '6'),
- # Invalid uses that should fail silently.
- 'length05': ('{{ int|length }}', {'int': 7}, ''),
- 'length06': ('{{ None|length }}', {'None': None}, ''),
-
- # length_is filter.
- 'length_is01': ('{% if some_list|length_is:"4" %}Four{% endif %}', {'some_list': ['4', None, True, {}]}, 'Four'),
- 'length_is02': ('{% if some_list|length_is:"4" %}Four{% else %}Not Four{% endif %}', {'some_list': ['4', None, True, {}, 17]}, 'Not Four'),
- 'length_is03': ('{% if mystring|length_is:"4" %}Four{% endif %}', {'mystring': 'word'}, 'Four'),
- 'length_is04': ('{% if mystring|length_is:"4" %}Four{% else %}Not Four{% endif %}', {'mystring': 'Python'}, 'Not Four'),
- 'length_is05': ('{% if mystring|length_is:"4" %}Four{% else %}Not Four{% endif %}', {'mystring': ''}, 'Not Four'),
- 'length_is06': ('{% with var|length as my_length %}{{ my_length }}{% endwith %}', {'var': 'django'}, '6'),
- # Boolean return value from length_is should not be coerced to a string
- 'length_is07': (r'{% if "X"|length_is:0 %}Length is 0{% else %}Length not 0{% endif %}', {}, 'Length not 0'),
- 'length_is08': (r'{% if "X"|length_is:1 %}Length is 1{% else %}Length not 1{% endif %}', {}, 'Length is 1'),
- # Invalid uses that should fail silently.
- 'length_is09': ('{{ var|length_is:"fish" }}', {'var': 'django'}, ''),
- 'length_is10': ('{{ int|length_is:"1" }}', {'int': 7}, ''),
- 'length_is11': ('{{ none|length_is:"1" }}', {'none': None}, ''),
-
- 'join01': (r'{{ a|join:", " }}', {'a': ['alpha', 'beta & me']}, 'alpha, beta &amp; me'),
- 'join02': (r'{% autoescape off %}{{ a|join:", " }}{% endautoescape %}', {'a': ['alpha', 'beta & me']}, 'alpha, beta & me'),
- 'join03': (r'{{ a|join:" &amp; " }}', {'a': ['alpha', 'beta & me']}, 'alpha &amp; beta &amp; me'),
- 'join04': (r'{% autoescape off %}{{ a|join:" &amp; " }}{% endautoescape %}', {'a': ['alpha', 'beta & me']}, 'alpha &amp; beta & me'),
-
- # Test that joining with unsafe joiners don't result in unsafe strings (#11377)
- 'join05': (r'{{ a|join:var }}', {'a': ['alpha', 'beta & me'], 'var': ' & '}, 'alpha &amp; beta &amp; me'),
- 'join06': (r'{{ a|join:var }}', {'a': ['alpha', 'beta & me'], 'var': mark_safe(' & ')}, 'alpha & beta &amp; me'),
- 'join07': (r'{{ a|join:var|lower }}', {'a': ['Alpha', 'Beta & me'], 'var': ' & ' }, 'alpha &amp; beta &amp; me'),
- 'join08': (r'{{ a|join:var|lower }}', {'a': ['Alpha', 'Beta & me'], 'var': mark_safe(' & ')}, 'alpha & beta &amp; me'),
-
- 'date01': (r'{{ d|date:"m" }}', {'d': datetime(2008, 1, 1)}, '01'),
- 'date02': (r'{{ d|date }}', {'d': datetime(2008, 1, 1)}, 'Jan. 1, 2008'),
- #Ticket 9520: Make sure |date doesn't blow up on non-dates
- 'date03': (r'{{ d|date:"m" }}', {'d': 'fail_string'}, ''),
-
- # Tests for #11687
- 'add01': (r'{{ i|add:"5" }}', {'i': 2000}, '2005'),
- 'add02': (r'{{ i|add:"napis" }}', {'i': 2000}, '2000'),
- 'add03': (r'{{ i|add:16 }}', {'i': 'not_an_int'}, 'not_an_int'),
- 'add04': (r'{{ i|add:"16" }}', {'i': 'not_an_int'}, 'not_an_int16'),
- 'add05': (r'{{ l1|add:l2 }}', {'l1': [1, 2], 'l2': [3, 4]}, '[1, 2, 3, 4]'),
- 'add06': (r'{{ t1|add:t2 }}', {'t1': (3, 4), 't2': (1, 2)}, '(3, 4, 1, 2)'),
- 'add07': (r'{{ d|add:t }}', {'d': date(2000, 1, 1), 't': timedelta(10)}, 'Jan. 11, 2000'),
- }
diff --git a/parts/django/tests/regressiontests/templates/loaders.py b/parts/django/tests/regressiontests/templates/loaders.py
deleted file mode 100644
index 47cd18a..0000000
--- a/parts/django/tests/regressiontests/templates/loaders.py
+++ /dev/null
@@ -1,150 +0,0 @@
-"""
-Test cases for the template loaders
-
-Note: This test requires setuptools!
-"""
-
-from django.conf import settings
-
-if __name__ == '__main__':
- settings.configure()
-
-import unittest
-import sys
-import pkg_resources
-import imp
-import StringIO
-import os.path
-import warnings
-
-from django.template import TemplateDoesNotExist, Context
-from django.template.loaders.eggs import load_template_source as lts_egg
-from django.template.loaders.eggs import Loader as EggLoader
-from django.template import loader
-from django.test.utils import get_warnings_state, restore_warnings_state
-
-# Mock classes and objects for pkg_resources functions.
-class MockProvider(pkg_resources.NullProvider):
- def __init__(self, module):
- pkg_resources.NullProvider.__init__(self, module)
- self.module = module
-
- def _has(self, path):
- return path in self.module._resources
-
- def _isdir(self,path):
- return False
-
- def get_resource_stream(self, manager, resource_name):
- return self.module._resources[resource_name]
-
- def _get(self, path):
- return self.module._resources[path].read()
-
-class MockLoader(object):
- pass
-
-def create_egg(name, resources):
- """
- Creates a mock egg with a list of resources.
-
- name: The name of the module.
- resources: A dictionary of resources. Keys are the names and values the data.
- """
- egg = imp.new_module(name)
- egg.__loader__ = MockLoader()
- egg._resources = resources
- sys.modules[name] = egg
-
-class DeprecatedEggLoaderTest(unittest.TestCase):
- "Test the deprecated load_template_source interface to the egg loader"
- def setUp(self):
- pkg_resources._provider_factories[MockLoader] = MockProvider
-
- self.empty_egg = create_egg("egg_empty", {})
- self.egg_1 = create_egg("egg_1", {
- os.path.normcase('templates/y.html') : StringIO.StringIO("y"),
- os.path.normcase('templates/x.txt') : StringIO.StringIO("x"),
- })
- self._old_installed_apps = settings.INSTALLED_APPS
- settings.INSTALLED_APPS = []
- self._warnings_state = get_warnings_state()
- warnings.simplefilter("ignore", PendingDeprecationWarning)
-
- def tearDown(self):
- settings.INSTALLED_APPS = self._old_installed_apps
- restore_warnings_state(self._warnings_state)
-
- def test_existing(self):
- "A template can be loaded from an egg"
- settings.INSTALLED_APPS = ['egg_1']
- contents, template_name = lts_egg("y.html")
- self.assertEqual(contents, "y")
- self.assertEqual(template_name, "egg:egg_1:templates/y.html")
-
-
-class EggLoaderTest(unittest.TestCase):
- def setUp(self):
- pkg_resources._provider_factories[MockLoader] = MockProvider
-
- self.empty_egg = create_egg("egg_empty", {})
- self.egg_1 = create_egg("egg_1", {
- os.path.normcase('templates/y.html') : StringIO.StringIO("y"),
- os.path.normcase('templates/x.txt') : StringIO.StringIO("x"),
- })
- self._old_installed_apps = settings.INSTALLED_APPS
- settings.INSTALLED_APPS = []
-
- def tearDown(self):
- settings.INSTALLED_APPS = self._old_installed_apps
-
- def test_empty(self):
- "Loading any template on an empty egg should fail"
- settings.INSTALLED_APPS = ['egg_empty']
- egg_loader = EggLoader()
- self.assertRaises(TemplateDoesNotExist, egg_loader.load_template_source, "not-existing.html")
-
- def test_non_existing(self):
- "Template loading fails if the template is not in the egg"
- settings.INSTALLED_APPS = ['egg_1']
- egg_loader = EggLoader()
- self.assertRaises(TemplateDoesNotExist, egg_loader.load_template_source, "not-existing.html")
-
- def test_existing(self):
- "A template can be loaded from an egg"
- settings.INSTALLED_APPS = ['egg_1']
- egg_loader = EggLoader()
- contents, template_name = egg_loader.load_template_source("y.html")
- self.assertEqual(contents, "y")
- self.assertEqual(template_name, "egg:egg_1:templates/y.html")
-
- def test_not_installed(self):
- "Loading an existent template from an egg not included in INSTALLED_APPS should fail"
- settings.INSTALLED_APPS = []
- egg_loader = EggLoader()
- self.assertRaises(TemplateDoesNotExist, egg_loader.load_template_source, "y.html")
-
-class CachedLoader(unittest.TestCase):
- def setUp(self):
- self.old_TEMPLATE_LOADERS = settings.TEMPLATE_LOADERS
- settings.TEMPLATE_LOADERS = (
- ('django.template.loaders.cached.Loader', (
- 'django.template.loaders.filesystem.Loader',
- )
- ),
- )
- def tearDown(self):
- settings.TEMPLATE_LOADERS = self.old_TEMPLATE_LOADERS
-
- def test_templatedir_caching(self):
- "Check that the template directories form part of the template cache key. Refs #13573"
- # Retrive a template specifying a template directory to check
- t1, name = loader.find_template('test.html', (os.path.join(os.path.dirname(__file__), 'templates', 'first'),))
- # Now retrieve the same template name, but from a different directory
- t2, name = loader.find_template('test.html', (os.path.join(os.path.dirname(__file__), 'templates', 'second'),))
-
- # The two templates should not have the same content
- self.assertNotEqual(t1.render(Context({})), t2.render(Context({})))
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/parts/django/tests/regressiontests/templates/models.py b/parts/django/tests/regressiontests/templates/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/templates/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/templates/nodelist.py b/parts/django/tests/regressiontests/templates/nodelist.py
deleted file mode 100644
index 89fac97..0000000
--- a/parts/django/tests/regressiontests/templates/nodelist.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from unittest import TestCase
-from django.template.loader import get_template_from_string
-from django.template import VariableNode
-
-
-class NodelistTest(TestCase):
-
- def test_for(self):
- source = '{% for i in 1 %}{{ a }}{% endfor %}'
- template = get_template_from_string(source)
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
-
- def test_if(self):
- source = '{% if x %}{{ a }}{% endif %}'
- template = get_template_from_string(source)
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
-
- def test_ifequal(self):
- source = '{% ifequal x y %}{{ a }}{% endifequal %}'
- template = get_template_from_string(source)
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
-
- def test_ifchanged(self):
- source = '{% ifchanged x %}{{ a }}{% endifchanged %}'
- template = get_template_from_string(source)
- vars = template.nodelist.get_nodes_by_type(VariableNode)
- self.assertEqual(len(vars), 1)
diff --git a/parts/django/tests/regressiontests/templates/parser.py b/parts/django/tests/regressiontests/templates/parser.py
deleted file mode 100644
index 93e8118..0000000
--- a/parts/django/tests/regressiontests/templates/parser.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-Testing some internals of the template processing. These are *not* examples to be copied in user code.
-"""
-from unittest import TestCase
-
-from django.template import (TokenParser, FilterExpression, Parser, Variable,
- TemplateSyntaxError)
-
-
-class ParserTests(TestCase):
- def test_token_parsing(self):
- # Tests for TokenParser behavior in the face of quoted strings with
- # spaces.
-
- p = TokenParser("tag thevar|filter sometag")
- self.assertEqual(p.tagname, "tag")
- self.assertEqual(p.value(), "thevar|filter")
- self.assertTrue(p.more())
- self.assertEqual(p.tag(), "sometag")
- self.assertFalse(p.more())
-
- p = TokenParser('tag "a value"|filter sometag')
- self.assertEqual(p.tagname, "tag")
- self.assertEqual(p.value(), '"a value"|filter')
- self.assertTrue(p.more())
- self.assertEqual(p.tag(), "sometag")
- self.assertFalse(p.more())
-
- p = TokenParser("tag 'a value'|filter sometag")
- self.assertEqual(p.tagname, "tag")
- self.assertEqual(p.value(), "'a value'|filter")
- self.assertTrue(p.more())
- self.assertEqual(p.tag(), "sometag")
- self.assertFalse(p.more())
-
- def test_filter_parsing(self):
- c = {"article": {"section": u"News"}}
- p = Parser("")
-
- def fe_test(s, val):
- self.assertEqual(FilterExpression(s, p).resolve(c), val)
-
- fe_test("article.section", u"News")
- fe_test("article.section|upper", u"NEWS")
- fe_test(u'"News"', u"News")
- fe_test(u"'News'", u"News")
- fe_test(ur'"Some \"Good\" News"', u'Some "Good" News')
- fe_test(ur'"Some \"Good\" News"', u'Some "Good" News')
- fe_test(ur"'Some \'Bad\' News'", u"Some 'Bad' News")
-
- fe = FilterExpression(ur'"Some \"Good\" News"', p)
- self.assertEqual(fe.filters, [])
- self.assertEqual(fe.var, u'Some "Good" News')
-
- # Filtered variables should reject access of attributes beginning with
- # underscores.
- self.assertRaises(TemplateSyntaxError,
- FilterExpression, "article._hidden|upper", p
- )
-
- def test_variable_parsing(self):
- c = {"article": {"section": u"News"}}
- self.assertEqual(Variable("article.section").resolve(c), "News")
- self.assertEqual(Variable(u'"News"').resolve(c), "News")
- self.assertEqual(Variable(u"'News'").resolve(c), "News")
-
- # Translated strings are handled correctly.
- self.assertEqual(Variable("_(article.section)").resolve(c), "News")
- self.assertEqual(Variable('_("Good News")').resolve(c), "Good News")
- self.assertEqual(Variable("_('Better News')").resolve(c), "Better News")
-
- # Escaped quotes work correctly as well.
- self.assertEqual(
- Variable(ur'"Some \"Good\" News"').resolve(c), 'Some "Good" News'
- )
- self.assertEqual(
- Variable(ur"'Some \'Better\' News'").resolve(c), "Some 'Better' News"
- )
-
- # Variables should reject access of attributes beginning with
- # underscores.
- self.assertRaises(TemplateSyntaxError,
- Variable, "article._hidden"
- )
diff --git a/parts/django/tests/regressiontests/templates/smartif.py b/parts/django/tests/regressiontests/templates/smartif.py
deleted file mode 100644
index 5e5d770..0000000
--- a/parts/django/tests/regressiontests/templates/smartif.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import unittest
-from django.template.smartif import IfParser, Literal
-
-class SmartIfTests(unittest.TestCase):
-
- def assertCalcEqual(self, expected, tokens):
- self.assertEqual(expected, IfParser(tokens).parse().eval({}))
-
- # We only test things here that are difficult to test elsewhere
- # Many other tests are found in the main tests for builtin template tags
- # Test parsing via the printed parse tree
- def test_not(self):
- var = IfParser(["not", False]).parse()
- self.assertEqual("(not (literal False))", repr(var))
- self.assert_(var.eval({}))
-
- self.assertFalse(IfParser(["not", True]).parse().eval({}))
-
- def test_or(self):
- var = IfParser([True, "or", False]).parse()
- self.assertEqual("(or (literal True) (literal False))", repr(var))
- self.assert_(var.eval({}))
-
- def test_in(self):
- list_ = [1,2,3]
- self.assertCalcEqual(True, [1, 'in', list_])
- self.assertCalcEqual(False, [1, 'in', None])
- self.assertCalcEqual(False, [None, 'in', list_])
-
- def test_not_in(self):
- list_ = [1,2,3]
- self.assertCalcEqual(False, [1, 'not', 'in', list_])
- self.assertCalcEqual(True, [4, 'not', 'in', list_])
- self.assertCalcEqual(False, [1, 'not', 'in', None])
- self.assertCalcEqual(True, [None, 'not', 'in', list_])
-
- def test_precedence(self):
- # (False and False) or True == True <- we want this one, like Python
- # False and (False or True) == False
- self.assertCalcEqual(True, [False, 'and', False, 'or', True])
-
- # True or (False and False) == True <- we want this one, like Python
- # (True or False) and False == False
- self.assertCalcEqual(True, [True, 'or', False, 'and', False])
-
- # (1 or 1) == 2 -> False
- # 1 or (1 == 2) -> True <- we want this one
- self.assertCalcEqual(True, [1, 'or', 1, '==', 2])
-
- self.assertCalcEqual(True, [True, '==', True, 'or', True, '==', False])
-
- self.assertEqual("(or (and (== (literal 1) (literal 2)) (literal 3)) (literal 4))",
- repr(IfParser([1, '==', 2, 'and', 3, 'or', 4]).parse()))
diff --git a/parts/django/tests/regressiontests/templates/templates/broken_base.html b/parts/django/tests/regressiontests/templates/templates/broken_base.html
deleted file mode 100644
index aa41f44..0000000
--- a/parts/django/tests/regressiontests/templates/templates/broken_base.html
+++ /dev/null
@@ -1 +0,0 @@
-{% include "missing.html" %}
diff --git a/parts/django/tests/regressiontests/templates/templates/first/test.html b/parts/django/tests/regressiontests/templates/templates/first/test.html
deleted file mode 100644
index 6029fe5..0000000
--- a/parts/django/tests/regressiontests/templates/templates/first/test.html
+++ /dev/null
@@ -1 +0,0 @@
-First template
diff --git a/parts/django/tests/regressiontests/templates/templates/second/test.html b/parts/django/tests/regressiontests/templates/templates/second/test.html
deleted file mode 100644
index d9b316f..0000000
--- a/parts/django/tests/regressiontests/templates/templates/second/test.html
+++ /dev/null
@@ -1 +0,0 @@
-Second template
diff --git a/parts/django/tests/regressiontests/templates/templates/test_extends_error.html b/parts/django/tests/regressiontests/templates/templates/test_extends_error.html
deleted file mode 100755
index fc74690..0000000
--- a/parts/django/tests/regressiontests/templates/templates/test_extends_error.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "broken_base.html" %}
diff --git a/parts/django/tests/regressiontests/templates/templatetags/__init__.py b/parts/django/tests/regressiontests/templates/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/templates/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/templates/templatetags/broken_tag.py b/parts/django/tests/regressiontests/templates/templatetags/broken_tag.py
deleted file mode 100644
index c70e183..0000000
--- a/parts/django/tests/regressiontests/templates/templatetags/broken_tag.py
+++ /dev/null
@@ -1 +0,0 @@
-from django import Xtemplate
diff --git a/parts/django/tests/regressiontests/templates/templatetags/custom.py b/parts/django/tests/regressiontests/templates/templatetags/custom.py
deleted file mode 100644
index fdf8d10..0000000
--- a/parts/django/tests/regressiontests/templates/templatetags/custom.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django import template
-from django.template.defaultfilters import stringfilter
-
-register = template.Library()
-
-def trim(value, num):
- return value[:num]
-trim = stringfilter(trim)
-
-register.filter(trim)
-
diff --git a/parts/django/tests/regressiontests/templates/tests.py b/parts/django/tests/regressiontests/templates/tests.py
deleted file mode 100644
index 62b2237..0000000
--- a/parts/django/tests/regressiontests/templates/tests.py
+++ /dev/null
@@ -1,1389 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.conf import settings
-
-if __name__ == '__main__':
- # When running this file in isolation, we need to set up the configuration
- # before importing 'template'.
- settings.configure()
-
-from datetime import datetime, timedelta
-import time
-import os
-import sys
-import traceback
-import unittest
-
-from django import template
-from django.core import urlresolvers
-from django.template import loader
-from django.template.loaders import app_directories, filesystem, cached
-from django.utils.translation import activate, deactivate, ugettext as _
-from django.utils.safestring import mark_safe
-from django.utils.tzinfo import LocalTimezone
-
-from context import ContextTests
-from custom import CustomTests
-from parser import ParserTests
-from unicode import UnicodeTests
-from nodelist import NodelistTest
-from smartif import *
-
-try:
- from loaders import *
-except ImportError:
- pass # If setuptools isn't installed, that's fine. Just move on.
-
-import filters
-
-#################################
-# Custom template tag for tests #
-#################################
-
-register = template.Library()
-
-class EchoNode(template.Node):
- def __init__(self, contents):
- self.contents = contents
-
- def render(self, context):
- return " ".join(self.contents)
-
-def do_echo(parser, token):
- return EchoNode(token.contents.split()[1:])
-
-register.tag("echo", do_echo)
-
-template.libraries['testtags'] = register
-
-#####################################
-# Helper objects for template tests #
-#####################################
-
-class SomeException(Exception):
- silent_variable_failure = True
-
-class SomeOtherException(Exception):
- pass
-
-class ContextStackException(Exception):
- pass
-
-class SomeClass:
- def __init__(self):
- self.otherclass = OtherClass()
-
- def method(self):
- return "SomeClass.method"
-
- def method2(self, o):
- return o
-
- def method3(self):
- raise SomeException
-
- def method4(self):
- raise SomeOtherException
-
-class OtherClass:
- def method(self):
- return "OtherClass.method"
-
-class TestObj(object):
- def is_true(self):
- return True
-
- def is_false(self):
- return False
-
- def is_bad(self):
- time.sleep(0.3)
- return True
-
-class SilentGetItemClass(object):
- def __getitem__(self, key):
- raise SomeException
-
-class SilentAttrClass(object):
- def b(self):
- raise SomeException
- b = property(b)
-
-class UTF8Class:
- "Class whose __str__ returns non-ASCII data"
- def __str__(self):
- return u'ŠĐĆŽćžšđ'.encode('utf-8')
-
-class Templates(unittest.TestCase):
- def test_loaders_security(self):
- ad_loader = app_directories.Loader()
- fs_loader = filesystem.Loader()
- def test_template_sources(path, template_dirs, expected_sources):
- if isinstance(expected_sources, list):
- # Fix expected sources so they are normcased and abspathed
- expected_sources = [os.path.normcase(os.path.abspath(s)) for s in expected_sources]
- # Test the two loaders (app_directores and filesystem).
- func1 = lambda p, t: list(ad_loader.get_template_sources(p, t))
- func2 = lambda p, t: list(fs_loader.get_template_sources(p, t))
- for func in (func1, func2):
- if isinstance(expected_sources, list):
- self.assertEqual(func(path, template_dirs), expected_sources)
- else:
- self.assertRaises(expected_sources, func, path, template_dirs)
-
- template_dirs = ['/dir1', '/dir2']
- test_template_sources('index.html', template_dirs,
- ['/dir1/index.html', '/dir2/index.html'])
- test_template_sources('/etc/passwd', template_dirs, [])
- test_template_sources('etc/passwd', template_dirs,
- ['/dir1/etc/passwd', '/dir2/etc/passwd'])
- test_template_sources('../etc/passwd', template_dirs, [])
- test_template_sources('../../../etc/passwd', template_dirs, [])
- test_template_sources('/dir1/index.html', template_dirs,
- ['/dir1/index.html'])
- test_template_sources('../dir2/index.html', template_dirs,
- ['/dir2/index.html'])
- test_template_sources('/dir1blah', template_dirs, [])
- test_template_sources('../dir1blah', template_dirs, [])
-
- # UTF-8 bytestrings are permitted.
- test_template_sources('\xc3\x85ngstr\xc3\xb6m', template_dirs,
- [u'/dir1/Ångström', u'/dir2/Ångström'])
- # Unicode strings are permitted.
- test_template_sources(u'Ångström', template_dirs,
- [u'/dir1/Ångström', u'/dir2/Ångström'])
- test_template_sources(u'Ångström', ['/Straße'], [u'/Straße/Ångström'])
- test_template_sources('\xc3\x85ngstr\xc3\xb6m', ['/Straße'],
- [u'/Straße/Ångström'])
- # Invalid UTF-8 encoding in bytestrings is not. Should raise a
- # semi-useful error message.
- test_template_sources('\xc3\xc3', template_dirs, UnicodeDecodeError)
-
- # Case insensitive tests (for win32). Not run unless we're on
- # a case insensitive operating system.
- if os.path.normcase('/TEST') == os.path.normpath('/test'):
- template_dirs = ['/dir1', '/DIR2']
- test_template_sources('index.html', template_dirs,
- ['/dir1/index.html', '/dir2/index.html'])
- test_template_sources('/DIR1/index.HTML', template_dirs,
- ['/dir1/index.html'])
-
- def test_loader_debug_origin(self):
- # Turn TEMPLATE_DEBUG on, so that the origin file name will be kept with
- # the compiled templates.
- old_td, settings.TEMPLATE_DEBUG = settings.TEMPLATE_DEBUG, True
- old_loaders = loader.template_source_loaders
-
- try:
- loader.template_source_loaders = (filesystem.Loader(),)
-
- # We rely on the fact that runtests.py sets up TEMPLATE_DIRS to
- # point to a directory containing a 404.html file. Also that
- # the file system and app directories loaders both inherit the
- # load_template method from the BaseLoader class, so we only need
- # to test one of them.
- load_name = '404.html'
- template = loader.get_template(load_name)
- template_name = template.nodelist[0].source[0].name
- self.assertTrue(template_name.endswith(load_name),
- 'Template loaded by filesystem loader has incorrect name for debug page: %s' % template_name)
-
- # Aso test the cached loader, since it overrides load_template
- cache_loader = cached.Loader(('',))
- cache_loader._cached_loaders = loader.template_source_loaders
- loader.template_source_loaders = (cache_loader,)
-
- template = loader.get_template(load_name)
- template_name = template.nodelist[0].source[0].name
- self.assertTrue(template_name.endswith(load_name),
- 'Template loaded through cached loader has incorrect name for debug page: %s' % template_name)
-
- template = loader.get_template(load_name)
- template_name = template.nodelist[0].source[0].name
- self.assertTrue(template_name.endswith(load_name),
- 'Cached template loaded through cached loader has incorrect name for debug page: %s' % template_name)
- finally:
- loader.template_source_loaders = old_loaders
- settings.TEMPLATE_DEBUG = old_td
-
- def test_extends_include_missing_baseloader(self):
- """
- Tests that the correct template is identified as not existing
- when {% extends %} specifies a template that does exist, but
- that template has an {% include %} of something that does not
- exist. See #12787.
- """
-
- # TEMPLATE_DEBUG must be true, otherwise the exception raised
- # during {% include %} processing will be suppressed.
- old_td, settings.TEMPLATE_DEBUG = settings.TEMPLATE_DEBUG, True
- old_loaders = loader.template_source_loaders
-
- try:
- # Test the base loader class via the app loader. load_template
- # from base is used by all shipped loaders excepting cached,
- # which has its own test.
- loader.template_source_loaders = (app_directories.Loader(),)
-
- load_name = 'test_extends_error.html'
- tmpl = loader.get_template(load_name)
- r = None
- try:
- r = tmpl.render(template.Context({}))
- except template.TemplateSyntaxError, e:
- settings.TEMPLATE_DEBUG = old_td
- self.assertEqual(e.args[0], 'Caught TemplateDoesNotExist while rendering: missing.html')
- self.assertEqual(r, None, 'Template rendering unexpectedly succeeded, produced: ->%r<-' % r)
- finally:
- loader.template_source_loaders = old_loaders
- settings.TEMPLATE_DEBUG = old_td
-
- def test_extends_include_missing_cachedloader(self):
- """
- Same as test_extends_include_missing_baseloader, only tests
- behavior of the cached loader instead of BaseLoader.
- """
-
- old_td, settings.TEMPLATE_DEBUG = settings.TEMPLATE_DEBUG, True
- old_loaders = loader.template_source_loaders
-
- try:
- cache_loader = cached.Loader(('',))
- cache_loader._cached_loaders = (app_directories.Loader(),)
- loader.template_source_loaders = (cache_loader,)
-
- load_name = 'test_extends_error.html'
- tmpl = loader.get_template(load_name)
- r = None
- try:
- r = tmpl.render(template.Context({}))
- except template.TemplateSyntaxError, e:
- self.assertEqual(e.args[0], 'Caught TemplateDoesNotExist while rendering: missing.html')
- self.assertEqual(r, None, 'Template rendering unexpectedly succeeded, produced: ->%r<-' % r)
-
- # For the cached loader, repeat the test, to ensure the first attempt did not cache a
- # result that behaves incorrectly on subsequent attempts.
- tmpl = loader.get_template(load_name)
- try:
- tmpl.render(template.Context({}))
- except template.TemplateSyntaxError, e:
- self.assertEqual(e.args[0], 'Caught TemplateDoesNotExist while rendering: missing.html')
- self.assertEqual(r, None, 'Template rendering unexpectedly succeeded, produced: ->%r<-' % r)
- finally:
- loader.template_source_loaders = old_loaders
- settings.TEMPLATE_DEBUG = old_td
-
- def test_token_smart_split(self):
- # Regression test for #7027
- token = template.Token(template.TOKEN_BLOCK, 'sometag _("Page not found") value|yesno:_("yes,no")')
- split = token.split_contents()
- self.assertEqual(split, ["sometag", '_("Page not found")', 'value|yesno:_("yes,no")'])
-
- def test_url_reverse_no_settings_module(self):
- # Regression test for #9005
- from django.template import Template, Context, TemplateSyntaxError
-
- old_settings_module = settings.SETTINGS_MODULE
- old_template_debug = settings.TEMPLATE_DEBUG
-
- settings.SETTINGS_MODULE = None
- settings.TEMPLATE_DEBUG = True
-
- t = Template('{% url will_not_match %}')
- c = Context()
- try:
- rendered = t.render(c)
- except TemplateSyntaxError, e:
- # Assert that we are getting the template syntax error and not the
- # string encoding error.
- self.assertEquals(e.args[0], "Caught NoReverseMatch while rendering: Reverse for 'will_not_match' with arguments '()' and keyword arguments '{}' not found.")
-
- settings.SETTINGS_MODULE = old_settings_module
- settings.TEMPLATE_DEBUG = old_template_debug
-
- def test_invalid_block_suggestion(self):
- # See #7876
- from django.template import Template, TemplateSyntaxError
- try:
- t = Template("{% if 1 %}lala{% endblock %}{% endif %}")
- except TemplateSyntaxError, e:
- self.assertEquals(e.args[0], "Invalid block tag: 'endblock', expected 'else' or 'endif'")
-
- def test_templates(self):
- template_tests = self.get_template_tests()
- filter_tests = filters.get_filter_tests()
-
- # Quickly check that we aren't accidentally using a name in both
- # template and filter tests.
- overlapping_names = [name for name in filter_tests if name in template_tests]
- assert not overlapping_names, 'Duplicate test name(s): %s' % ', '.join(overlapping_names)
-
- template_tests.update(filter_tests)
-
- # Register our custom template loader.
- def test_template_loader(template_name, template_dirs=None):
- "A custom template loader that loads the unit-test templates."
- try:
- return (template_tests[template_name][0] , "test:%s" % template_name)
- except KeyError:
- raise template.TemplateDoesNotExist, template_name
-
- cache_loader = cached.Loader(('test_template_loader',))
- cache_loader._cached_loaders = (test_template_loader,)
-
- old_template_loaders = loader.template_source_loaders
- loader.template_source_loaders = [cache_loader]
-
- failures = []
- tests = template_tests.items()
- tests.sort()
-
- # Turn TEMPLATE_DEBUG off, because tests assume that.
- old_td, settings.TEMPLATE_DEBUG = settings.TEMPLATE_DEBUG, False
-
- # Set TEMPLATE_STRING_IF_INVALID to a known string.
- old_invalid = settings.TEMPLATE_STRING_IF_INVALID
- expected_invalid_str = 'INVALID'
-
- # Warm the URL reversing cache. This ensures we don't pay the cost
- # warming the cache during one of the tests.
- urlresolvers.reverse('regressiontests.templates.views.client_action',
- kwargs={'id':0,'action':"update"})
-
- for name, vals in tests:
- if isinstance(vals[2], tuple):
- normal_string_result = vals[2][0]
- invalid_string_result = vals[2][1]
- if isinstance(invalid_string_result, basestring) and '%s' in invalid_string_result:
- expected_invalid_str = 'INVALID %s'
- invalid_string_result = invalid_string_result % vals[2][2]
- template.invalid_var_format_string = True
- else:
- normal_string_result = vals[2]
- invalid_string_result = vals[2]
-
- if 'LANGUAGE_CODE' in vals[1]:
- activate(vals[1]['LANGUAGE_CODE'])
- else:
- activate('en-us')
-
- for invalid_str, result in [('', normal_string_result),
- (expected_invalid_str, invalid_string_result)]:
- settings.TEMPLATE_STRING_IF_INVALID = invalid_str
- for is_cached in (False, True):
- try:
- start = datetime.now()
- test_template = loader.get_template(name)
- end = datetime.now()
- if end-start > timedelta(seconds=0.2):
- failures.append("Template test (Cached='%s', TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Took too long to parse test" % (is_cached, invalid_str, name))
-
- start = datetime.now()
- output = self.render(test_template, vals)
- end = datetime.now()
- if end-start > timedelta(seconds=0.2):
- failures.append("Template test (Cached='%s', TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Took too long to render test" % (is_cached, invalid_str, name))
- except ContextStackException:
- failures.append("Template test (Cached='%s', TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Context stack was left imbalanced" % (is_cached, invalid_str, name))
- continue
- except Exception:
- exc_type, exc_value, exc_tb = sys.exc_info()
- if exc_type != result:
- tb = '\n'.join(traceback.format_exception(exc_type, exc_value, exc_tb))
- failures.append("Template test (Cached='%s', TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Got %s, exception: %s\n%s" % (is_cached, invalid_str, name, exc_type, exc_value, tb))
- continue
- if output != result:
- failures.append("Template test (Cached='%s', TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Expected %r, got %r" % (is_cached, invalid_str, name, result, output))
- cache_loader.reset()
-
- if 'LANGUAGE_CODE' in vals[1]:
- deactivate()
-
- if template.invalid_var_format_string:
- expected_invalid_str = 'INVALID'
- template.invalid_var_format_string = False
-
- loader.template_source_loaders = old_template_loaders
- deactivate()
- settings.TEMPLATE_DEBUG = old_td
- settings.TEMPLATE_STRING_IF_INVALID = old_invalid
-
- self.assertEqual(failures, [], "Tests failed:\n%s\n%s" %
- ('-'*70, ("\n%s\n" % ('-'*70)).join(failures)))
-
- def render(self, test_template, vals):
- context = template.Context(vals[1])
- before_stack_size = len(context.dicts)
- output = test_template.render(context)
- if len(context.dicts) != before_stack_size:
- raise ContextStackException
- return output
-
- def get_template_tests(self):
- # SYNTAX --
- # 'template_name': ('template contents', 'context dict', 'expected string output' or Exception class)
- return {
- ### BASIC SYNTAX ################################################
-
- # Plain text should go through the template parser untouched
- 'basic-syntax01': ("something cool", {}, "something cool"),
-
- # Variables should be replaced with their value in the current
- # context
- 'basic-syntax02': ("{{ headline }}", {'headline':'Success'}, "Success"),
-
- # More than one replacement variable is allowed in a template
- 'basic-syntax03': ("{{ first }} --- {{ second }}", {"first" : 1, "second" : 2}, "1 --- 2"),
-
- # Fail silently when a variable is not found in the current context
- 'basic-syntax04': ("as{{ missing }}df", {}, ("asdf","asINVALIDdf")),
-
- # A variable may not contain more than one word
- 'basic-syntax06': ("{{ multi word variable }}", {}, template.TemplateSyntaxError),
-
- # Raise TemplateSyntaxError for empty variable tags
- 'basic-syntax07': ("{{ }}", {}, template.TemplateSyntaxError),
- 'basic-syntax08': ("{{ }}", {}, template.TemplateSyntaxError),
-
- # Attribute syntax allows a template to call an object's attribute
- 'basic-syntax09': ("{{ var.method }}", {"var": SomeClass()}, "SomeClass.method"),
-
- # Multiple levels of attribute access are allowed
- 'basic-syntax10': ("{{ var.otherclass.method }}", {"var": SomeClass()}, "OtherClass.method"),
-
- # Fail silently when a variable's attribute isn't found
- 'basic-syntax11': ("{{ var.blech }}", {"var": SomeClass()}, ("","INVALID")),
-
- # Raise TemplateSyntaxError when trying to access a variable beginning with an underscore
- 'basic-syntax12': ("{{ var.__dict__ }}", {"var": SomeClass()}, template.TemplateSyntaxError),
-
- # Raise TemplateSyntaxError when trying to access a variable containing an illegal character
- 'basic-syntax13': ("{{ va>r }}", {}, template.TemplateSyntaxError),
- 'basic-syntax14': ("{{ (var.r) }}", {}, template.TemplateSyntaxError),
- 'basic-syntax15': ("{{ sp%am }}", {}, template.TemplateSyntaxError),
- 'basic-syntax16': ("{{ eggs! }}", {}, template.TemplateSyntaxError),
- 'basic-syntax17': ("{{ moo? }}", {}, template.TemplateSyntaxError),
-
- # Attribute syntax allows a template to call a dictionary key's value
- 'basic-syntax18': ("{{ foo.bar }}", {"foo" : {"bar" : "baz"}}, "baz"),
-
- # Fail silently when a variable's dictionary key isn't found
- 'basic-syntax19': ("{{ foo.spam }}", {"foo" : {"bar" : "baz"}}, ("","INVALID")),
-
- # Fail silently when accessing a non-simple method
- 'basic-syntax20': ("{{ var.method2 }}", {"var": SomeClass()}, ("","INVALID")),
-
- # Don't get confused when parsing something that is almost, but not
- # quite, a template tag.
- 'basic-syntax21': ("a {{ moo %} b", {}, "a {{ moo %} b"),
- 'basic-syntax22': ("{{ moo #}", {}, "{{ moo #}"),
-
- # Will try to treat "moo #} {{ cow" as the variable. Not ideal, but
- # costly to work around, so this triggers an error.
- 'basic-syntax23': ("{{ moo #} {{ cow }}", {"cow": "cow"}, template.TemplateSyntaxError),
-
- # Embedded newlines make it not-a-tag.
- 'basic-syntax24': ("{{ moo\n }}", {}, "{{ moo\n }}"),
-
- # Literal strings are permitted inside variables, mostly for i18n
- # purposes.
- 'basic-syntax25': ('{{ "fred" }}', {}, "fred"),
- 'basic-syntax26': (r'{{ "\"fred\"" }}', {}, "\"fred\""),
- 'basic-syntax27': (r'{{ _("\"fred\"") }}', {}, "\"fred\""),
-
- # regression test for ticket #12554
- # make sure a silent_variable_failure Exception is supressed
- # on dictionary and attribute lookup
- 'basic-syntax28': ("{{ a.b }}", {'a': SilentGetItemClass()}, ('', 'INVALID')),
- 'basic-syntax29': ("{{ a.b }}", {'a': SilentAttrClass()}, ('', 'INVALID')),
-
- # Something that starts like a number but has an extra lookup works as a lookup.
- 'basic-syntax30': ("{{ 1.2.3 }}", {"1": {"2": {"3": "d"}}}, "d"),
- 'basic-syntax31': ("{{ 1.2.3 }}", {"1": {"2": ("a", "b", "c", "d")}}, "d"),
- 'basic-syntax32': ("{{ 1.2.3 }}", {"1": (("x", "x", "x", "x"), ("y", "y", "y", "y"), ("a", "b", "c", "d"))}, "d"),
- 'basic-syntax33': ("{{ 1.2.3 }}", {"1": ("xxxx", "yyyy", "abcd")}, "d"),
- 'basic-syntax34': ("{{ 1.2.3 }}", {"1": ({"x": "x"}, {"y": "y"}, {"z": "z", "3": "d"})}, "d"),
-
- # Numbers are numbers even if their digits are in the context.
- 'basic-syntax35': ("{{ 1 }}", {"1": "abc"}, "1"),
- 'basic-syntax36': ("{{ 1.2 }}", {"1": "abc"}, "1.2"),
-
- # List-index syntax allows a template to access a certain item of a subscriptable object.
- 'list-index01': ("{{ var.1 }}", {"var": ["first item", "second item"]}, "second item"),
-
- # Fail silently when the list index is out of range.
- 'list-index02': ("{{ var.5 }}", {"var": ["first item", "second item"]}, ("", "INVALID")),
-
- # Fail silently when the variable is not a subscriptable object.
- 'list-index03': ("{{ var.1 }}", {"var": None}, ("", "INVALID")),
-
- # Fail silently when variable is a dict without the specified key.
- 'list-index04': ("{{ var.1 }}", {"var": {}}, ("", "INVALID")),
-
- # Dictionary lookup wins out when dict's key is a string.
- 'list-index05': ("{{ var.1 }}", {"var": {'1': "hello"}}, "hello"),
-
- # But list-index lookup wins out when dict's key is an int, which
- # behind the scenes is really a dictionary lookup (for a dict)
- # after converting the key to an int.
- 'list-index06': ("{{ var.1 }}", {"var": {1: "hello"}}, "hello"),
-
- # Dictionary lookup wins out when there is a string and int version of the key.
- 'list-index07': ("{{ var.1 }}", {"var": {'1': "hello", 1: "world"}}, "hello"),
-
- # Basic filter usage
- 'filter-syntax01': ("{{ var|upper }}", {"var": "Django is the greatest!"}, "DJANGO IS THE GREATEST!"),
-
- # Chained filters
- 'filter-syntax02': ("{{ var|upper|lower }}", {"var": "Django is the greatest!"}, "django is the greatest!"),
-
- # Raise TemplateSyntaxError for space between a variable and filter pipe
- 'filter-syntax03': ("{{ var |upper }}", {}, template.TemplateSyntaxError),
-
- # Raise TemplateSyntaxError for space after a filter pipe
- 'filter-syntax04': ("{{ var| upper }}", {}, template.TemplateSyntaxError),
-
- # Raise TemplateSyntaxError for a nonexistent filter
- 'filter-syntax05': ("{{ var|does_not_exist }}", {}, template.TemplateSyntaxError),
-
- # Raise TemplateSyntaxError when trying to access a filter containing an illegal character
- 'filter-syntax06': ("{{ var|fil(ter) }}", {}, template.TemplateSyntaxError),
-
- # Raise TemplateSyntaxError for invalid block tags
- 'filter-syntax07': ("{% nothing_to_see_here %}", {}, template.TemplateSyntaxError),
-
- # Raise TemplateSyntaxError for empty block tags
- 'filter-syntax08': ("{% %}", {}, template.TemplateSyntaxError),
-
- # Chained filters, with an argument to the first one
- 'filter-syntax09': ('{{ var|removetags:"b i"|upper|lower }}', {"var": "<b><i>Yes</i></b>"}, "yes"),
-
- # Literal string as argument is always "safe" from auto-escaping..
- 'filter-syntax10': (r'{{ var|default_if_none:" endquote\" hah" }}',
- {"var": None}, ' endquote" hah'),
-
- # Variable as argument
- 'filter-syntax11': (r'{{ var|default_if_none:var2 }}', {"var": None, "var2": "happy"}, 'happy'),
-
- # Default argument testing
- 'filter-syntax12': (r'{{ var|yesno:"yup,nup,mup" }} {{ var|yesno }}', {"var": True}, 'yup yes'),
-
- # Fail silently for methods that raise an exception with a
- # "silent_variable_failure" attribute
- 'filter-syntax13': (r'1{{ var.method3 }}2', {"var": SomeClass()}, ("12", "1INVALID2")),
-
- # In methods that raise an exception without a
- # "silent_variable_attribute" set to True, the exception propagates
- 'filter-syntax14': (r'1{{ var.method4 }}2', {"var": SomeClass()}, SomeOtherException),
-
- # Escaped backslash in argument
- 'filter-syntax15': (r'{{ var|default_if_none:"foo\bar" }}', {"var": None}, r'foo\bar'),
-
- # Escaped backslash using known escape char
- 'filter-syntax16': (r'{{ var|default_if_none:"foo\now" }}', {"var": None}, r'foo\now'),
-
- # Empty strings can be passed as arguments to filters
- 'filter-syntax17': (r'{{ var|join:"" }}', {'var': ['a', 'b', 'c']}, 'abc'),
-
- # Make sure that any unicode strings are converted to bytestrings
- # in the final output.
- 'filter-syntax18': (r'{{ var }}', {'var': UTF8Class()}, u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'),
-
- # Numbers as filter arguments should work
- 'filter-syntax19': ('{{ var|truncatewords:1 }}', {"var": "hello world"}, "hello ..."),
-
- #filters should accept empty string constants
- 'filter-syntax20': ('{{ ""|default_if_none:"was none" }}', {}, ""),
-
- ### COMMENT SYNTAX ########################################################
- 'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
- 'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"),
-
- # Comments can contain invalid stuff.
- 'comment-syntax03': ("foo{# {% if %} #}", {}, "foo"),
- 'comment-syntax04': ("foo{# {% endblock %} #}", {}, "foo"),
- 'comment-syntax05': ("foo{# {% somerandomtag %} #}", {}, "foo"),
- 'comment-syntax06': ("foo{# {% #}", {}, "foo"),
- 'comment-syntax07': ("foo{# %} #}", {}, "foo"),
- 'comment-syntax08': ("foo{# %} #}bar", {}, "foobar"),
- 'comment-syntax09': ("foo{# {{ #}", {}, "foo"),
- 'comment-syntax10': ("foo{# }} #}", {}, "foo"),
- 'comment-syntax11': ("foo{# { #}", {}, "foo"),
- 'comment-syntax12': ("foo{# } #}", {}, "foo"),
-
- ### COMMENT TAG ###########################################################
- 'comment-tag01': ("{% comment %}this is hidden{% endcomment %}hello", {}, "hello"),
- 'comment-tag02': ("{% comment %}this is hidden{% endcomment %}hello{% comment %}foo{% endcomment %}", {}, "hello"),
-
- # Comment tag can contain invalid stuff.
- 'comment-tag03': ("foo{% comment %} {% if %} {% endcomment %}", {}, "foo"),
- 'comment-tag04': ("foo{% comment %} {% endblock %} {% endcomment %}", {}, "foo"),
- 'comment-tag05': ("foo{% comment %} {% somerandomtag %} {% endcomment %}", {}, "foo"),
-
- ### CYCLE TAG #############################################################
- 'cycle01': ('{% cycle a %}', {}, template.TemplateSyntaxError),
- 'cycle02': ('{% cycle a,b,c as abc %}{% cycle abc %}', {}, 'ab'),
- 'cycle03': ('{% cycle a,b,c as abc %}{% cycle abc %}{% cycle abc %}', {}, 'abc'),
- 'cycle04': ('{% cycle a,b,c as abc %}{% cycle abc %}{% cycle abc %}{% cycle abc %}', {}, 'abca'),
- 'cycle05': ('{% cycle %}', {}, template.TemplateSyntaxError),
- 'cycle06': ('{% cycle a %}', {}, template.TemplateSyntaxError),
- 'cycle07': ('{% cycle a,b,c as foo %}{% cycle bar %}', {}, template.TemplateSyntaxError),
- 'cycle08': ('{% cycle a,b,c as foo %}{% cycle foo %}{{ foo }}{{ foo }}{% cycle foo %}{{ foo }}', {}, 'abbbcc'),
- 'cycle09': ("{% for i in test %}{% cycle a,b %}{{ i }},{% endfor %}", {'test': range(5)}, 'a0,b1,a2,b3,a4,'),
- 'cycle10': ("{% cycle 'a' 'b' 'c' as abc %}{% cycle abc %}", {}, 'ab'),
- 'cycle11': ("{% cycle 'a' 'b' 'c' as abc %}{% cycle abc %}{% cycle abc %}", {}, 'abc'),
- 'cycle12': ("{% cycle 'a' 'b' 'c' as abc %}{% cycle abc %}{% cycle abc %}{% cycle abc %}", {}, 'abca'),
- 'cycle13': ("{% for i in test %}{% cycle 'a' 'b' %}{{ i }},{% endfor %}", {'test': range(5)}, 'a0,b1,a2,b3,a4,'),
- 'cycle14': ("{% cycle one two as foo %}{% cycle foo %}", {'one': '1','two': '2'}, '12'),
- 'cycle15': ("{% for i in test %}{% cycle aye bee %}{{ i }},{% endfor %}", {'test': range(5), 'aye': 'a', 'bee': 'b'}, 'a0,b1,a2,b3,a4,'),
- 'cycle16': ("{% cycle one|lower two as foo %}{% cycle foo %}", {'one': 'A','two': '2'}, 'a2'),
-
- ### EXCEPTIONS ############################################################
-
- # Raise exception for invalid template name
- 'exception01': ("{% extends 'nonexistent' %}", {}, template.TemplateDoesNotExist),
-
- # Raise exception for invalid template name (in variable)
- 'exception02': ("{% extends nonexistent %}", {}, (template.TemplateSyntaxError, template.TemplateDoesNotExist)),
-
- # Raise exception for extra {% extends %} tags
- 'exception03': ("{% extends 'inheritance01' %}{% block first %}2{% endblock %}{% extends 'inheritance16' %}", {}, template.TemplateSyntaxError),
-
- # Raise exception for custom tags used in child with {% load %} tag in parent, not in child
- 'exception04': ("{% extends 'inheritance17' %}{% block first %}{% echo 400 %}5678{% endblock %}", {}, template.TemplateSyntaxError),
-
- ### FILTER TAG ############################################################
- 'filter01': ('{% filter upper %}{% endfilter %}', {}, ''),
- 'filter02': ('{% filter upper %}django{% endfilter %}', {}, 'DJANGO'),
- 'filter03': ('{% filter upper|lower %}django{% endfilter %}', {}, 'django'),
- 'filter04': ('{% filter cut:remove %}djangospam{% endfilter %}', {'remove': 'spam'}, 'django'),
-
- ### FIRSTOF TAG ###########################################################
- 'firstof01': ('{% firstof a b c %}', {'a':0,'b':0,'c':0}, ''),
- 'firstof02': ('{% firstof a b c %}', {'a':1,'b':0,'c':0}, '1'),
- 'firstof03': ('{% firstof a b c %}', {'a':0,'b':2,'c':0}, '2'),
- 'firstof04': ('{% firstof a b c %}', {'a':0,'b':0,'c':3}, '3'),
- 'firstof05': ('{% firstof a b c %}', {'a':1,'b':2,'c':3}, '1'),
- 'firstof06': ('{% firstof a b c %}', {'b':0,'c':3}, '3'),
- 'firstof07': ('{% firstof a b "c" %}', {'a':0}, 'c'),
- 'firstof08': ('{% firstof a b "c and d" %}', {'a':0,'b':0}, 'c and d'),
- 'firstof09': ('{% firstof %}', {}, template.TemplateSyntaxError),
-
- ### FOR TAG ###############################################################
- 'for-tag01': ("{% for val in values %}{{ val }}{% endfor %}", {"values": [1, 2, 3]}, "123"),
- 'for-tag02': ("{% for val in values reversed %}{{ val }}{% endfor %}", {"values": [1, 2, 3]}, "321"),
- 'for-tag-vars01': ("{% for val in values %}{{ forloop.counter }}{% endfor %}", {"values": [6, 6, 6]}, "123"),
- 'for-tag-vars02': ("{% for val in values %}{{ forloop.counter0 }}{% endfor %}", {"values": [6, 6, 6]}, "012"),
- 'for-tag-vars03': ("{% for val in values %}{{ forloop.revcounter }}{% endfor %}", {"values": [6, 6, 6]}, "321"),
- 'for-tag-vars04': ("{% for val in values %}{{ forloop.revcounter0 }}{% endfor %}", {"values": [6, 6, 6]}, "210"),
- 'for-tag-vars05': ("{% for val in values %}{% if forloop.first %}f{% else %}x{% endif %}{% endfor %}", {"values": [6, 6, 6]}, "fxx"),
- 'for-tag-vars06': ("{% for val in values %}{% if forloop.last %}l{% else %}x{% endif %}{% endfor %}", {"values": [6, 6, 6]}, "xxl"),
- 'for-tag-unpack01': ("{% for key,value in items %}{{ key }}:{{ value }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, "one:1/two:2/"),
- 'for-tag-unpack03': ("{% for key, value in items %}{{ key }}:{{ value }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, "one:1/two:2/"),
- 'for-tag-unpack04': ("{% for key , value in items %}{{ key }}:{{ value }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, "one:1/two:2/"),
- 'for-tag-unpack05': ("{% for key ,value in items %}{{ key }}:{{ value }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, "one:1/two:2/"),
- 'for-tag-unpack06': ("{% for key value in items %}{{ key }}:{{ value }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, template.TemplateSyntaxError),
- 'for-tag-unpack07': ("{% for key,,value in items %}{{ key }}:{{ value }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, template.TemplateSyntaxError),
- 'for-tag-unpack08': ("{% for key,value, in items %}{{ key }}:{{ value }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, template.TemplateSyntaxError),
- # Ensure that a single loopvar doesn't truncate the list in val.
- 'for-tag-unpack09': ("{% for val in items %}{{ val.0 }}:{{ val.1 }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, "one:1/two:2/"),
- # Otherwise, silently truncate if the length of loopvars differs to the length of each set of items.
- 'for-tag-unpack10': ("{% for x,y in items %}{{ x }}:{{ y }}/{% endfor %}", {"items": (('one', 1, 'carrot'), ('two', 2, 'orange'))}, "one:1/two:2/"),
- 'for-tag-unpack11': ("{% for x,y,z in items %}{{ x }}:{{ y }},{{ z }}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, ("one:1,/two:2,/", "one:1,INVALID/two:2,INVALID/")),
- 'for-tag-unpack12': ("{% for x,y,z in items %}{{ x }}:{{ y }},{{ z }}/{% endfor %}", {"items": (('one', 1, 'carrot'), ('two', 2))}, ("one:1,carrot/two:2,/", "one:1,carrot/two:2,INVALID/")),
- 'for-tag-unpack13': ("{% for x,y,z in items %}{{ x }}:{{ y }},{{ z }}/{% endfor %}", {"items": (('one', 1, 'carrot'), ('two', 2, 'cheese'))}, ("one:1,carrot/two:2,cheese/", "one:1,carrot/two:2,cheese/")),
- 'for-tag-unpack14': ("{% for x,y in items %}{{ x }}:{{ y }}/{% endfor %}", {"items": (1, 2)}, (":/:/", "INVALID:INVALID/INVALID:INVALID/")),
- 'for-tag-empty01': ("{% for val in values %}{{ val }}{% empty %}empty text{% endfor %}", {"values": [1, 2, 3]}, "123"),
- 'for-tag-empty02': ("{% for val in values %}{{ val }}{% empty %}values array empty{% endfor %}", {"values": []}, "values array empty"),
- 'for-tag-empty03': ("{% for val in values %}{{ val }}{% empty %}values array not found{% endfor %}", {}, "values array not found"),
-
- ### IF TAG ################################################################
- 'if-tag01': ("{% if foo %}yes{% else %}no{% endif %}", {"foo": True}, "yes"),
- 'if-tag02': ("{% if foo %}yes{% else %}no{% endif %}", {"foo": False}, "no"),
- 'if-tag03': ("{% if foo %}yes{% else %}no{% endif %}", {}, "no"),
-
- # Filters
- 'if-tag-filter01': ("{% if foo|length == 5 %}yes{% else %}no{% endif %}", {'foo': 'abcde'}, "yes"),
- 'if-tag-filter02': ("{% if foo|upper == 'ABC' %}yes{% else %}no{% endif %}", {}, "no"),
-
- # Equality
- 'if-tag-eq01': ("{% if foo == bar %}yes{% else %}no{% endif %}", {}, "yes"),
- 'if-tag-eq02': ("{% if foo == bar %}yes{% else %}no{% endif %}", {'foo': 1}, "no"),
- 'if-tag-eq03': ("{% if foo == bar %}yes{% else %}no{% endif %}", {'foo': 1, 'bar': 1}, "yes"),
- 'if-tag-eq04': ("{% if foo == bar %}yes{% else %}no{% endif %}", {'foo': 1, 'bar': 2}, "no"),
- 'if-tag-eq05': ("{% if foo == '' %}yes{% else %}no{% endif %}", {}, "no"),
-
- # Comparison
- 'if-tag-gt-01': ("{% if 2 > 1 %}yes{% else %}no{% endif %}", {}, "yes"),
- 'if-tag-gt-02': ("{% if 1 > 1 %}yes{% else %}no{% endif %}", {}, "no"),
- 'if-tag-gte-01': ("{% if 1 >= 1 %}yes{% else %}no{% endif %}", {}, "yes"),
- 'if-tag-gte-02': ("{% if 1 >= 2 %}yes{% else %}no{% endif %}", {}, "no"),
- 'if-tag-lt-01': ("{% if 1 < 2 %}yes{% else %}no{% endif %}", {}, "yes"),
- 'if-tag-lt-02': ("{% if 1 < 1 %}yes{% else %}no{% endif %}", {}, "no"),
- 'if-tag-lte-01': ("{% if 1 <= 1 %}yes{% else %}no{% endif %}", {}, "yes"),
- 'if-tag-lte-02': ("{% if 2 <= 1 %}yes{% else %}no{% endif %}", {}, "no"),
-
- # Contains
- 'if-tag-in-01': ("{% if 1 in x %}yes{% else %}no{% endif %}", {'x':[1]}, "yes"),
- 'if-tag-in-02': ("{% if 2 in x %}yes{% else %}no{% endif %}", {'x':[1]}, "no"),
- 'if-tag-not-in-01': ("{% if 1 not in x %}yes{% else %}no{% endif %}", {'x':[1]}, "no"),
- 'if-tag-not-in-02': ("{% if 2 not in x %}yes{% else %}no{% endif %}", {'x':[1]}, "yes"),
-
- # AND
- 'if-tag-and01': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
- 'if-tag-and02': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
- 'if-tag-and03': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
- 'if-tag-and04': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
- 'if-tag-and05': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False}, 'no'),
- 'if-tag-and06': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'bar': False}, 'no'),
- 'if-tag-and07': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True}, 'no'),
- 'if-tag-and08': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'bar': True}, 'no'),
-
- # OR
- 'if-tag-or01': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
- 'if-tag-or02': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
- 'if-tag-or03': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
- 'if-tag-or04': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
- 'if-tag-or05': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False}, 'no'),
- 'if-tag-or06': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'bar': False}, 'no'),
- 'if-tag-or07': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True}, 'yes'),
- 'if-tag-or08': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'bar': True}, 'yes'),
-
- # multiple ORs
- 'if-tag-or09': ("{% if foo or bar or baz %}yes{% else %}no{% endif %}", {'baz': True}, 'yes'),
-
- # NOT
- 'if-tag-not01': ("{% if not foo %}no{% else %}yes{% endif %}", {'foo': True}, 'yes'),
- 'if-tag-not02': ("{% if not not foo %}no{% else %}yes{% endif %}", {'foo': True}, 'no'),
- # not03 to not05 removed, now TemplateSyntaxErrors
-
- 'if-tag-not06': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {}, 'no'),
- 'if-tag-not07': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
- 'if-tag-not08': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
- 'if-tag-not09': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
- 'if-tag-not10': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
-
- 'if-tag-not11': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {}, 'no'),
- 'if-tag-not12': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
- 'if-tag-not13': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
- 'if-tag-not14': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
- 'if-tag-not15': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
-
- 'if-tag-not16': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
- 'if-tag-not17': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
- 'if-tag-not18': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
- 'if-tag-not19': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
- 'if-tag-not20': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
-
- 'if-tag-not21': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {}, 'yes'),
- 'if-tag-not22': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
- 'if-tag-not23': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
- 'if-tag-not24': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
- 'if-tag-not25': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
-
- 'if-tag-not26': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
- 'if-tag-not27': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
- 'if-tag-not28': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
- 'if-tag-not29': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
- 'if-tag-not30': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
-
- 'if-tag-not31': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
- 'if-tag-not32': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
- 'if-tag-not33': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
- 'if-tag-not34': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
- 'if-tag-not35': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
-
- # Various syntax errors
- 'if-tag-error01': ("{% if %}yes{% endif %}", {}, template.TemplateSyntaxError),
- 'if-tag-error02': ("{% if foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
- 'if-tag-error03': ("{% if foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
- 'if-tag-error04': ("{% if not foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
- 'if-tag-error05': ("{% if not foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
- 'if-tag-error06': ("{% if abc def %}yes{% endif %}", {}, template.TemplateSyntaxError),
- 'if-tag-error07': ("{% if not %}yes{% endif %}", {}, template.TemplateSyntaxError),
- 'if-tag-error08': ("{% if and %}yes{% endif %}", {}, template.TemplateSyntaxError),
- 'if-tag-error09': ("{% if or %}yes{% endif %}", {}, template.TemplateSyntaxError),
- 'if-tag-error10': ("{% if == %}yes{% endif %}", {}, template.TemplateSyntaxError),
- 'if-tag-error11': ("{% if 1 == %}yes{% endif %}", {}, template.TemplateSyntaxError),
- 'if-tag-error12': ("{% if a not b %}yes{% endif %}", {}, template.TemplateSyntaxError),
-
- # If evaluations are shortcircuited where possible
- # These tests will fail by taking too long to run. When the if clause
- # is shortcircuiting correctly, the is_bad() function shouldn't be
- # evaluated, and the deliberate sleep won't happen.
- 'if-tag-shortcircuit01': ('{% if x.is_true or x.is_bad %}yes{% else %}no{% endif %}', {'x': TestObj()}, "yes"),
- 'if-tag-shortcircuit02': ('{% if x.is_false and x.is_bad %}yes{% else %}no{% endif %}', {'x': TestObj()}, "no"),
-
- # Non-existent args
- 'if-tag-badarg01':("{% if x|default_if_none:y %}yes{% endif %}", {}, ''),
- 'if-tag-badarg02':("{% if x|default_if_none:y %}yes{% endif %}", {'y': 0}, ''),
- 'if-tag-badarg03':("{% if x|default_if_none:y %}yes{% endif %}", {'y': 1}, 'yes'),
- 'if-tag-badarg04':("{% if x|default_if_none:y %}yes{% else %}no{% endif %}", {}, 'no'),
-
- # Additional, more precise parsing tests are in SmartIfTests
-
- ### IFCHANGED TAG #########################################################
- 'ifchanged01': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', {'num': (1,2,3)}, '123'),
- 'ifchanged02': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', {'num': (1,1,3)}, '13'),
- 'ifchanged03': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', {'num': (1,1,1)}, '1'),
- 'ifchanged04': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', {'num': (1, 2, 3), 'numx': (2, 2, 2)}, '122232'),
- 'ifchanged05': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', {'num': (1, 1, 1), 'numx': (1, 2, 3)}, '1123123123'),
- 'ifchanged06': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', {'num': (1, 1, 1), 'numx': (2, 2, 2)}, '1222'),
- 'ifchanged07': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% for y in numy %}{% ifchanged %}{{ y }}{% endifchanged %}{% endfor %}{% endfor %}{% endfor %}', {'num': (1, 1, 1), 'numx': (2, 2, 2), 'numy': (3, 3, 3)}, '1233323332333'),
- 'ifchanged08': ('{% for data in datalist %}{% for c,d in data %}{% if c %}{% ifchanged %}{{ d }}{% endifchanged %}{% endif %}{% endfor %}{% endfor %}', {'datalist': [[(1, 'a'), (1, 'a'), (0, 'b'), (1, 'c')], [(0, 'a'), (1, 'c'), (1, 'd'), (1, 'd'), (0, 'e')]]}, 'accd'),
-
- # Test one parameter given to ifchanged.
- 'ifchanged-param01': ('{% for n in num %}{% ifchanged n %}..{% endifchanged %}{{ n }}{% endfor %}', { 'num': (1,2,3) }, '..1..2..3'),
- 'ifchanged-param02': ('{% for n in num %}{% for x in numx %}{% ifchanged n %}..{% endifchanged %}{{ x }}{% endfor %}{% endfor %}', { 'num': (1,2,3), 'numx': (5,6,7) }, '..567..567..567'),
-
- # Test multiple parameters to ifchanged.
- 'ifchanged-param03': ('{% for n in num %}{{ n }}{% for x in numx %}{% ifchanged x n %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1,1,2), 'numx': (5,6,6) }, '156156256'),
-
- # Test a date+hour like construct, where the hour of the last day
- # is the same but the date had changed, so print the hour anyway.
- 'ifchanged-param04': ('{% for d in days %}{% ifchanged %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},] }, '112323'),
-
- # Logically the same as above, just written with explicit
- # ifchanged for the day.
- 'ifchanged-param05': ('{% for d in days %}{% ifchanged d.day %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d.day h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},] }, '112323'),
-
- # Test the else clause of ifchanged.
- 'ifchanged-else01': ('{% for id in ids %}{{ id }}{% ifchanged id %}-first{% else %}-other{% endifchanged %},{% endfor %}', {'ids': [1,1,2,2,2,3]}, '1-first,1-other,2-first,2-other,2-other,3-first,'),
-
- 'ifchanged-else02': ('{% for id in ids %}{{ id }}-{% ifchanged id %}{% cycle red,blue %}{% else %}grey{% endifchanged %},{% endfor %}', {'ids': [1,1,2,2,2,3]}, '1-red,1-grey,2-blue,2-grey,2-grey,3-red,'),
- 'ifchanged-else03': ('{% for id in ids %}{{ id }}{% ifchanged id %}-{% cycle red,blue %}{% else %}{% endifchanged %},{% endfor %}', {'ids': [1,1,2,2,2,3]}, '1-red,1,2-blue,2,2,3-red,'),
-
- 'ifchanged-else04': ('{% for id in ids %}{% ifchanged %}***{{ id }}*{% else %}...{% endifchanged %}{{ forloop.counter }}{% endfor %}', {'ids': [1,1,2,2,2,3,4]}, '***1*1...2***2*3...4...5***3*6***4*7'),
-
- ### IFEQUAL TAG ###########################################################
- 'ifequal01': ("{% ifequal a b %}yes{% endifequal %}", {"a": 1, "b": 2}, ""),
- 'ifequal02': ("{% ifequal a b %}yes{% endifequal %}", {"a": 1, "b": 1}, "yes"),
- 'ifequal03': ("{% ifequal a b %}yes{% else %}no{% endifequal %}", {"a": 1, "b": 2}, "no"),
- 'ifequal04': ("{% ifequal a b %}yes{% else %}no{% endifequal %}", {"a": 1, "b": 1}, "yes"),
- 'ifequal05': ("{% ifequal a 'test' %}yes{% else %}no{% endifequal %}", {"a": "test"}, "yes"),
- 'ifequal06': ("{% ifequal a 'test' %}yes{% else %}no{% endifequal %}", {"a": "no"}, "no"),
- 'ifequal07': ('{% ifequal a "test" %}yes{% else %}no{% endifequal %}', {"a": "test"}, "yes"),
- 'ifequal08': ('{% ifequal a "test" %}yes{% else %}no{% endifequal %}', {"a": "no"}, "no"),
- 'ifequal09': ('{% ifequal a "test" %}yes{% else %}no{% endifequal %}', {}, "no"),
- 'ifequal10': ('{% ifequal a b %}yes{% else %}no{% endifequal %}', {}, "yes"),
-
- # SMART SPLITTING
- 'ifequal-split01': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {}, "no"),
- 'ifequal-split02': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {'a': 'foo'}, "no"),
- 'ifequal-split03': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {'a': 'test man'}, "yes"),
- 'ifequal-split04': ("{% ifequal a 'test man' %}yes{% else %}no{% endifequal %}", {'a': 'test man'}, "yes"),
- 'ifequal-split05': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': ''}, "no"),
- 'ifequal-split06': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': 'i "love" you'}, "yes"),
- 'ifequal-split07': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': 'i love you'}, "no"),
- 'ifequal-split08': (r"{% ifequal a 'I\'m happy' %}yes{% else %}no{% endifequal %}", {'a': "I'm happy"}, "yes"),
- 'ifequal-split09': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slash\man"}, "yes"),
- 'ifequal-split10': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slashman"}, "no"),
-
- # NUMERIC RESOLUTION
- 'ifequal-numeric01': ('{% ifequal x 5 %}yes{% endifequal %}', {'x': '5'}, ''),
- 'ifequal-numeric02': ('{% ifequal x 5 %}yes{% endifequal %}', {'x': 5}, 'yes'),
- 'ifequal-numeric03': ('{% ifequal x 5.2 %}yes{% endifequal %}', {'x': 5}, ''),
- 'ifequal-numeric04': ('{% ifequal x 5.2 %}yes{% endifequal %}', {'x': 5.2}, 'yes'),
- 'ifequal-numeric05': ('{% ifequal x 0.2 %}yes{% endifequal %}', {'x': .2}, 'yes'),
- 'ifequal-numeric06': ('{% ifequal x .2 %}yes{% endifequal %}', {'x': .2}, 'yes'),
- 'ifequal-numeric07': ('{% ifequal x 2. %}yes{% endifequal %}', {'x': 2}, ''),
- 'ifequal-numeric08': ('{% ifequal x "5" %}yes{% endifequal %}', {'x': 5}, ''),
- 'ifequal-numeric09': ('{% ifequal x "5" %}yes{% endifequal %}', {'x': '5'}, 'yes'),
- 'ifequal-numeric10': ('{% ifequal x -5 %}yes{% endifequal %}', {'x': -5}, 'yes'),
- 'ifequal-numeric11': ('{% ifequal x -5.2 %}yes{% endifequal %}', {'x': -5.2}, 'yes'),
- 'ifequal-numeric12': ('{% ifequal x +5 %}yes{% endifequal %}', {'x': 5}, 'yes'),
-
- # FILTER EXPRESSIONS AS ARGUMENTS
- 'ifequal-filter01': ('{% ifequal a|upper "A" %}x{% endifequal %}', {'a': 'a'}, 'x'),
- 'ifequal-filter02': ('{% ifequal "A" a|upper %}x{% endifequal %}', {'a': 'a'}, 'x'),
- 'ifequal-filter03': ('{% ifequal a|upper b|upper %}x{% endifequal %}', {'a': 'x', 'b': 'X'}, 'x'),
- 'ifequal-filter04': ('{% ifequal x|slice:"1" "a" %}x{% endifequal %}', {'x': 'aaa'}, 'x'),
- 'ifequal-filter05': ('{% ifequal x|slice:"1"|upper "A" %}x{% endifequal %}', {'x': 'aaa'}, 'x'),
-
- ### IFNOTEQUAL TAG ########################################################
- 'ifnotequal01': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 2}, "yes"),
- 'ifnotequal02': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 1}, ""),
- 'ifnotequal03': ("{% ifnotequal a b %}yes{% else %}no{% endifnotequal %}", {"a": 1, "b": 2}, "yes"),
- 'ifnotequal04': ("{% ifnotequal a b %}yes{% else %}no{% endifnotequal %}", {"a": 1, "b": 1}, "no"),
-
- ### INCLUDE TAG ###########################################################
- 'include01': ('{% include "basic-syntax01" %}', {}, "something cool"),
- 'include02': ('{% include "basic-syntax02" %}', {'headline': 'Included'}, "Included"),
- 'include03': ('{% include template_name %}', {'template_name': 'basic-syntax02', 'headline': 'Included'}, "Included"),
- 'include04': ('a{% include "nonexistent" %}b', {}, "ab"),
- 'include 05': ('template with a space', {}, 'template with a space'),
- 'include06': ('{% include "include 05"%}', {}, 'template with a space'),
-
- ### NAMED ENDBLOCKS #######################################################
-
- # Basic test
- 'namedendblocks01': ("1{% block first %}_{% block second %}2{% endblock second %}_{% endblock first %}3", {}, '1_2_3'),
-
- # Unbalanced blocks
- 'namedendblocks02': ("1{% block first %}_{% block second %}2{% endblock first %}_{% endblock second %}3", {}, template.TemplateSyntaxError),
- 'namedendblocks03': ("1{% block first %}_{% block second %}2{% endblock %}_{% endblock second %}3", {}, template.TemplateSyntaxError),
- 'namedendblocks04': ("1{% block first %}_{% block second %}2{% endblock second %}_{% endblock third %}3", {}, template.TemplateSyntaxError),
- 'namedendblocks05': ("1{% block first %}_{% block second %}2{% endblock first %}", {}, template.TemplateSyntaxError),
-
- # Mixed named and unnamed endblocks
- 'namedendblocks06': ("1{% block first %}_{% block second %}2{% endblock %}_{% endblock first %}3", {}, '1_2_3'),
- 'namedendblocks07': ("1{% block first %}_{% block second %}2{% endblock second %}_{% endblock %}3", {}, '1_2_3'),
-
- ### INHERITANCE ###########################################################
-
- # Standard template with no inheritance
- 'inheritance01': ("1{% block first %}&{% endblock %}3{% block second %}_{% endblock %}", {}, '1&3_'),
-
- # Standard two-level inheritance
- 'inheritance02': ("{% extends 'inheritance01' %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {}, '1234'),
-
- # Three-level with no redefinitions on third level
- 'inheritance03': ("{% extends 'inheritance02' %}", {}, '1234'),
-
- # Two-level with no redefinitions on second level
- 'inheritance04': ("{% extends 'inheritance01' %}", {}, '1&3_'),
-
- # Two-level with double quotes instead of single quotes
- 'inheritance05': ('{% extends "inheritance02" %}', {}, '1234'),
-
- # Three-level with variable parent-template name
- 'inheritance06': ("{% extends foo %}", {'foo': 'inheritance02'}, '1234'),
-
- # Two-level with one block defined, one block not defined
- 'inheritance07': ("{% extends 'inheritance01' %}{% block second %}5{% endblock %}", {}, '1&35'),
-
- # Three-level with one block defined on this level, two blocks defined next level
- 'inheritance08': ("{% extends 'inheritance02' %}{% block second %}5{% endblock %}", {}, '1235'),
-
- # Three-level with second and third levels blank
- 'inheritance09': ("{% extends 'inheritance04' %}", {}, '1&3_'),
-
- # Three-level with space NOT in a block -- should be ignored
- 'inheritance10': ("{% extends 'inheritance04' %} ", {}, '1&3_'),
-
- # Three-level with both blocks defined on this level, but none on second level
- 'inheritance11': ("{% extends 'inheritance04' %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {}, '1234'),
-
- # Three-level with this level providing one and second level providing the other
- 'inheritance12': ("{% extends 'inheritance07' %}{% block first %}2{% endblock %}", {}, '1235'),
-
- # Three-level with this level overriding second level
- 'inheritance13': ("{% extends 'inheritance02' %}{% block first %}a{% endblock %}{% block second %}b{% endblock %}", {}, '1a3b'),
-
- # A block defined only in a child template shouldn't be displayed
- 'inheritance14': ("{% extends 'inheritance01' %}{% block newblock %}NO DISPLAY{% endblock %}", {}, '1&3_'),
-
- # A block within another block
- 'inheritance15': ("{% extends 'inheritance01' %}{% block first %}2{% block inner %}inner{% endblock %}{% endblock %}", {}, '12inner3_'),
-
- # A block within another block (level 2)
- 'inheritance16': ("{% extends 'inheritance15' %}{% block inner %}out{% endblock %}", {}, '12out3_'),
-
- # {% load %} tag (parent -- setup for exception04)
- 'inheritance17': ("{% load testtags %}{% block first %}1234{% endblock %}", {}, '1234'),
-
- # {% load %} tag (standard usage, without inheritance)
- 'inheritance18': ("{% load testtags %}{% echo this that theother %}5678", {}, 'this that theother5678'),
-
- # {% load %} tag (within a child template)
- 'inheritance19': ("{% extends 'inheritance01' %}{% block first %}{% load testtags %}{% echo 400 %}5678{% endblock %}", {}, '140056783_'),
-
- # Two-level inheritance with {{ block.super }}
- 'inheritance20': ("{% extends 'inheritance01' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '1&a3_'),
-
- # Three-level inheritance with {{ block.super }} from parent
- 'inheritance21': ("{% extends 'inheritance02' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '12a34'),
-
- # Three-level inheritance with {{ block.super }} from grandparent
- 'inheritance22': ("{% extends 'inheritance04' %}{% block first %}{{ block.super }}a{% endblock %}", {}, '1&a3_'),
-
- # Three-level inheritance with {{ block.super }} from parent and grandparent
- 'inheritance23': ("{% extends 'inheritance20' %}{% block first %}{{ block.super }}b{% endblock %}", {}, '1&ab3_'),
-
- # Inheritance from local context without use of template loader
- 'inheritance24': ("{% extends context_template %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {'context_template': template.Template("1{% block first %}_{% endblock %}3{% block second %}_{% endblock %}")}, '1234'),
-
- # Inheritance from local context with variable parent template
- 'inheritance25': ("{% extends context_template.1 %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {'context_template': [template.Template("Wrong"), template.Template("1{% block first %}_{% endblock %}3{% block second %}_{% endblock %}")]}, '1234'),
-
- # Set up a base template to extend
- 'inheritance26': ("no tags", {}, 'no tags'),
-
- # Inheritance from a template that doesn't have any blocks
- 'inheritance27': ("{% extends 'inheritance26' %}", {}, 'no tags'),
-
- # Set up a base template with a space in it.
- 'inheritance 28': ("{% block first %}!{% endblock %}", {}, '!'),
-
- # Inheritance from a template with a space in its name should work.
- 'inheritance29': ("{% extends 'inheritance 28' %}", {}, '!'),
-
- # Base template, putting block in a conditional {% if %} tag
- 'inheritance30': ("1{% if optional %}{% block opt %}2{% endblock %}{% endif %}3", {'optional': True}, '123'),
-
- # Inherit from a template with block wrapped in an {% if %} tag (in parent), still gets overridden
- 'inheritance31': ("{% extends 'inheritance30' %}{% block opt %}two{% endblock %}", {'optional': True}, '1two3'),
- 'inheritance32': ("{% extends 'inheritance30' %}{% block opt %}two{% endblock %}", {}, '13'),
-
- # Base template, putting block in a conditional {% ifequal %} tag
- 'inheritance33': ("1{% ifequal optional 1 %}{% block opt %}2{% endblock %}{% endifequal %}3", {'optional': 1}, '123'),
-
- # Inherit from a template with block wrapped in an {% ifequal %} tag (in parent), still gets overridden
- 'inheritance34': ("{% extends 'inheritance33' %}{% block opt %}two{% endblock %}", {'optional': 1}, '1two3'),
- 'inheritance35': ("{% extends 'inheritance33' %}{% block opt %}two{% endblock %}", {'optional': 2}, '13'),
-
- # Base template, putting block in a {% for %} tag
- 'inheritance36': ("{% for n in numbers %}_{% block opt %}{{ n }}{% endblock %}{% endfor %}_", {'numbers': '123'}, '_1_2_3_'),
-
- # Inherit from a template with block wrapped in an {% for %} tag (in parent), still gets overridden
- 'inheritance37': ("{% extends 'inheritance36' %}{% block opt %}X{% endblock %}", {'numbers': '123'}, '_X_X_X_'),
- 'inheritance38': ("{% extends 'inheritance36' %}{% block opt %}X{% endblock %}", {}, '_'),
-
- # The super block will still be found.
- 'inheritance39': ("{% extends 'inheritance30' %}{% block opt %}new{{ block.super }}{% endblock %}", {'optional': True}, '1new23'),
- 'inheritance40': ("{% extends 'inheritance33' %}{% block opt %}new{{ block.super }}{% endblock %}", {'optional': 1}, '1new23'),
- 'inheritance41': ("{% extends 'inheritance36' %}{% block opt %}new{{ block.super }}{% endblock %}", {'numbers': '123'}, '_new1_new2_new3_'),
-
- ### I18N ##################################################################
-
- # {% spaceless %} tag
- 'spaceless01': ("{% spaceless %} <b> <i> text </i> </b> {% endspaceless %}", {}, "<b><i> text </i></b>"),
- 'spaceless02': ("{% spaceless %} <b> \n <i> text </i> \n </b> {% endspaceless %}", {}, "<b><i> text </i></b>"),
- 'spaceless03': ("{% spaceless %}<b><i>text</i></b>{% endspaceless %}", {}, "<b><i>text</i></b>"),
-
- # simple translation of a string delimited by '
- 'i18n01': ("{% load i18n %}{% trans 'xxxyyyxxx' %}", {}, "xxxyyyxxx"),
-
- # simple translation of a string delimited by "
- 'i18n02': ('{% load i18n %}{% trans "xxxyyyxxx" %}', {}, "xxxyyyxxx"),
-
- # simple translation of a variable
- 'i18n03': ('{% load i18n %}{% blocktrans %}{{ anton }}{% endblocktrans %}', {'anton': '\xc3\x85'}, u"Å"),
-
- # simple translation of a variable and filter
- 'i18n04': ('{% load i18n %}{% blocktrans with anton|lower as berta %}{{ berta }}{% endblocktrans %}', {'anton': '\xc3\x85'}, u'å'),
-
- # simple translation of a string with interpolation
- 'i18n05': ('{% load i18n %}{% blocktrans %}xxx{{ anton }}xxx{% endblocktrans %}', {'anton': 'yyy'}, "xxxyyyxxx"),
-
- # simple translation of a string to german
- 'i18n06': ('{% load i18n %}{% trans "Page not found" %}', {'LANGUAGE_CODE': 'de'}, "Seite nicht gefunden"),
-
- # translation of singular form
- 'i18n07': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}{{ counter }} plural{% endblocktrans %}', {'number': 1}, "singular"),
-
- # translation of plural form
- 'i18n08': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}{{ counter }} plural{% endblocktrans %}', {'number': 2}, "2 plural"),
-
- # simple non-translation (only marking) of a string to german
- 'i18n09': ('{% load i18n %}{% trans "Page not found" noop %}', {'LANGUAGE_CODE': 'de'}, "Page not found"),
-
- # translation of a variable with a translated filter
- 'i18n10': ('{{ bool|yesno:_("yes,no,maybe") }}', {'bool': True, 'LANGUAGE_CODE': 'de'}, 'Ja'),
-
- # translation of a variable with a non-translated filter
- 'i18n11': ('{{ bool|yesno:"ja,nein" }}', {'bool': True}, 'ja'),
-
- # usage of the get_available_languages tag
- 'i18n12': ('{% load i18n %}{% get_available_languages as langs %}{% for lang in langs %}{% ifequal lang.0 "de" %}{{ lang.0 }}{% endifequal %}{% endfor %}', {}, 'de'),
-
- # translation of constant strings
- 'i18n13': ('{{ _("Password") }}', {'LANGUAGE_CODE': 'de'}, 'Passwort'),
- 'i18n14': ('{% cycle "foo" _("Password") _(\'Password\') as c %} {% cycle c %} {% cycle c %}', {'LANGUAGE_CODE': 'de'}, 'foo Passwort Passwort'),
- 'i18n15': ('{{ absent|default:_("Password") }}', {'LANGUAGE_CODE': 'de', 'absent': ""}, 'Passwort'),
- 'i18n16': ('{{ _("<") }}', {'LANGUAGE_CODE': 'de'}, '<'),
-
- # Escaping inside blocktrans and trans works as if it was directly in the
- # template.
- 'i18n17': ('{% load i18n %}{% blocktrans with anton|escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α &amp; β'),
- 'i18n18': ('{% load i18n %}{% blocktrans with anton|force_escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α &amp; β'),
- 'i18n19': ('{% load i18n %}{% blocktrans %}{{ andrew }}{% endblocktrans %}', {'andrew': 'a & b'}, u'a &amp; b'),
- 'i18n20': ('{% load i18n %}{% trans andrew %}', {'andrew': 'a & b'}, u'a &amp; b'),
- 'i18n21': ('{% load i18n %}{% blocktrans %}{{ andrew }}{% endblocktrans %}', {'andrew': mark_safe('a & b')}, u'a & b'),
- 'i18n22': ('{% load i18n %}{% trans andrew %}', {'andrew': mark_safe('a & b')}, u'a & b'),
-
- # Use filters with the {% trans %} tag, #5972
- 'i18n23': ('{% load i18n %}{% trans "Page not found"|capfirst|slice:"6:" %}', {'LANGUAGE_CODE': 'de'}, u'nicht gefunden'),
- 'i18n24': ("{% load i18n %}{% trans 'Page not found'|upper %}", {'LANGUAGE_CODE': 'de'}, u'SEITE NICHT GEFUNDEN'),
- 'i18n25': ('{% load i18n %}{% trans somevar|upper %}', {'somevar': 'Page not found', 'LANGUAGE_CODE': 'de'}, u'SEITE NICHT GEFUNDEN'),
-
- # translation of plural form with extra field in singular form (#13568)
- 'i18n26': ('{% load i18n %}{% blocktrans with myextra_field as extra_field count number as counter %}singular {{ extra_field }}{% plural %}plural{% endblocktrans %}', {'number': 1, 'myextra_field': 'test'}, "singular test"),
-
- # translation of singular form in russian (#14126)
- 'i18n27': ('{% load i18n %}{% blocktrans count number as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %}', {'number': 1, 'LANGUAGE_CODE': 'ru'}, u'1 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'),
-
- ### HANDLING OF TEMPLATE_STRING_IF_INVALID ###################################
-
- 'invalidstr01': ('{{ var|default:"Foo" }}', {}, ('Foo','INVALID')),
- 'invalidstr02': ('{{ var|default_if_none:"Foo" }}', {}, ('','INVALID')),
- 'invalidstr03': ('{% for v in var %}({{ v }}){% endfor %}', {}, ''),
- 'invalidstr04': ('{% if var %}Yes{% else %}No{% endif %}', {}, 'No'),
- 'invalidstr04': ('{% if var|default:"Foo" %}Yes{% else %}No{% endif %}', {}, 'Yes'),
- 'invalidstr05': ('{{ var }}', {}, ('', 'INVALID %s', 'var')),
- 'invalidstr06': ('{{ var.prop }}', {'var': {}}, ('', 'INVALID %s', 'var.prop')),
-
- ### MULTILINE #############################################################
-
- 'multiline01': ("""
- Hello,
- boys.
- How
- are
- you
- gentlemen.
- """,
- {},
- """
- Hello,
- boys.
- How
- are
- you
- gentlemen.
- """),
-
- ### REGROUP TAG ###########################################################
- 'regroup01': ('{% regroup data by bar as grouped %}' + \
- '{% for group in grouped %}' + \
- '{{ group.grouper }}:' + \
- '{% for item in group.list %}' + \
- '{{ item.foo }}' + \
- '{% endfor %},' + \
- '{% endfor %}',
- {'data': [ {'foo':'c', 'bar':1},
- {'foo':'d', 'bar':1},
- {'foo':'a', 'bar':2},
- {'foo':'b', 'bar':2},
- {'foo':'x', 'bar':3} ]},
- '1:cd,2:ab,3:x,'),
-
- # Test for silent failure when target variable isn't found
- 'regroup02': ('{% regroup data by bar as grouped %}' + \
- '{% for group in grouped %}' + \
- '{{ group.grouper }}:' + \
- '{% for item in group.list %}' + \
- '{{ item.foo }}' + \
- '{% endfor %},' + \
- '{% endfor %}',
- {}, ''),
-
- ### TEMPLATETAG TAG #######################################################
- 'templatetag01': ('{% templatetag openblock %}', {}, '{%'),
- 'templatetag02': ('{% templatetag closeblock %}', {}, '%}'),
- 'templatetag03': ('{% templatetag openvariable %}', {}, '{{'),
- 'templatetag04': ('{% templatetag closevariable %}', {}, '}}'),
- 'templatetag05': ('{% templatetag %}', {}, template.TemplateSyntaxError),
- 'templatetag06': ('{% templatetag foo %}', {}, template.TemplateSyntaxError),
- 'templatetag07': ('{% templatetag openbrace %}', {}, '{'),
- 'templatetag08': ('{% templatetag closebrace %}', {}, '}'),
- 'templatetag09': ('{% templatetag openbrace %}{% templatetag openbrace %}', {}, '{{'),
- 'templatetag10': ('{% templatetag closebrace %}{% templatetag closebrace %}', {}, '}}'),
- 'templatetag11': ('{% templatetag opencomment %}', {}, '{#'),
- 'templatetag12': ('{% templatetag closecomment %}', {}, '#}'),
-
- ### WIDTHRATIO TAG ########################################################
- 'widthratio01': ('{% widthratio a b 0 %}', {'a':50,'b':100}, '0'),
- 'widthratio02': ('{% widthratio a b 100 %}', {'a':0,'b':0}, ''),
- 'widthratio03': ('{% widthratio a b 100 %}', {'a':0,'b':100}, '0'),
- 'widthratio04': ('{% widthratio a b 100 %}', {'a':50,'b':100}, '50'),
- 'widthratio05': ('{% widthratio a b 100 %}', {'a':100,'b':100}, '100'),
-
- # 62.5 should round to 63
- 'widthratio06': ('{% widthratio a b 100 %}', {'a':50,'b':80}, '63'),
-
- # 71.4 should round to 71
- 'widthratio07': ('{% widthratio a b 100 %}', {'a':50,'b':70}, '71'),
-
- # Raise exception if we don't have 3 args, last one an integer
- 'widthratio08': ('{% widthratio %}', {}, template.TemplateSyntaxError),
- 'widthratio09': ('{% widthratio a b %}', {'a':50,'b':100}, template.TemplateSyntaxError),
- 'widthratio10': ('{% widthratio a b 100.0 %}', {'a':50,'b':100}, '50'),
-
- # #10043: widthratio should allow max_width to be a variable
- 'widthratio11': ('{% widthratio a b c %}', {'a':50,'b':100, 'c': 100}, '50'),
-
- ### WITH TAG ########################################################
- 'with01': ('{% with dict.key as key %}{{ key }}{% endwith %}', {'dict': {'key':50}}, '50'),
- 'with02': ('{{ key }}{% with dict.key as key %}{{ key }}-{{ dict.key }}-{{ key }}{% endwith %}{{ key }}', {'dict': {'key':50}}, ('50-50-50', 'INVALID50-50-50INVALID')),
-
- 'with-error01': ('{% with dict.key xx key %}{{ key }}{% endwith %}', {'dict': {'key':50}}, template.TemplateSyntaxError),
- 'with-error02': ('{% with dict.key as %}{{ key }}{% endwith %}', {'dict': {'key':50}}, template.TemplateSyntaxError),
-
- ### NOW TAG ########################################################
- # Simple case
- 'now01': ('{% now "j n Y"%}', {}, str(datetime.now().day) + ' ' + str(datetime.now().month) + ' ' + str(datetime.now().year)),
-
- # Check parsing of escaped and special characters
- 'now02': ('{% now "j "n" Y"%}', {}, template.TemplateSyntaxError),
- # 'now03': ('{% now "j \"n\" Y"%}', {}, str(datetime.now().day) + '"' + str(datetime.now().month) + '"' + str(datetime.now().year)),
- # 'now04': ('{% now "j \nn\n Y"%}', {}, str(datetime.now().day) + '\n' + str(datetime.now().month) + '\n' + str(datetime.now().year))
-
- ### URL TAG ########################################################
- # Successes
- 'legacyurl02': ('{% url regressiontests.templates.views.client_action id=client.id,action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'legacyurl02a': ('{% url regressiontests.templates.views.client_action client.id,"update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'legacyurl02b': ("{% url regressiontests.templates.views.client_action id=client.id,action='update' %}", {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'legacyurl02c': ("{% url regressiontests.templates.views.client_action client.id,'update' %}", {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'legacyurl10': ('{% url regressiontests.templates.views.client_action id=client.id,action="two words" %}', {'client': {'id': 1}}, '/url_tag/client/1/two%20words/'),
- 'legacyurl13': ('{% url regressiontests.templates.views.client_action id=client.id, action=arg|join:"-" %}', {'client': {'id': 1}, 'arg':['a','b']}, '/url_tag/client/1/a-b/'),
- 'legacyurl14': ('{% url regressiontests.templates.views.client_action client.id, arg|join:"-" %}', {'client': {'id': 1}, 'arg':['a','b']}, '/url_tag/client/1/a-b/'),
- 'legacyurl16': ('{% url regressiontests.templates.views.client_action action="update",id="1" %}', {}, '/url_tag/client/1/update/'),
- 'legacyurl16a': ("{% url regressiontests.templates.views.client_action action='update',id='1' %}", {}, '/url_tag/client/1/update/'),
- 'legacyurl17': ('{% url regressiontests.templates.views.client_action client_id=client.my_id,action=action %}', {'client': {'my_id': 1}, 'action': 'update'}, '/url_tag/client/1/update/'),
-
- 'url01': ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'),
- 'url02': ('{% url regressiontests.templates.views.client_action id=client.id action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'url02a': ('{% url regressiontests.templates.views.client_action client.id "update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'url02b': ("{% url regressiontests.templates.views.client_action id=client.id action='update' %}", {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'url02c': ("{% url regressiontests.templates.views.client_action client.id 'update' %}", {'client': {'id': 1}}, '/url_tag/client/1/update/'),
- 'url03': ('{% url regressiontests.templates.views.index %}', {}, '/url_tag/'),
- 'url04': ('{% url named.client client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'),
- 'url05': (u'{% url метка_оператора v %}', {'v': u'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
- 'url06': (u'{% url метка_оператора_2 tag=v %}', {'v': u'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
- 'url07': (u'{% url regressiontests.templates.views.client2 tag=v %}', {'v': u'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
- 'url08': (u'{% url метка_оператора v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
- 'url09': (u'{% url метка_оператора_2 tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
- 'url10': ('{% url regressiontests.templates.views.client_action id=client.id action="two words" %}', {'client': {'id': 1}}, '/url_tag/client/1/two%20words/'),
- 'url11': ('{% url regressiontests.templates.views.client_action id=client.id action="==" %}', {'client': {'id': 1}}, '/url_tag/client/1/==/'),
- 'url12': ('{% url regressiontests.templates.views.client_action id=client.id action="," %}', {'client': {'id': 1}}, '/url_tag/client/1/,/'),
- 'url13': ('{% url regressiontests.templates.views.client_action id=client.id action=arg|join:"-" %}', {'client': {'id': 1}, 'arg':['a','b']}, '/url_tag/client/1/a-b/'),
- 'url14': ('{% url regressiontests.templates.views.client_action client.id arg|join:"-" %}', {'client': {'id': 1}, 'arg':['a','b']}, '/url_tag/client/1/a-b/'),
- 'url15': ('{% url regressiontests.templates.views.client_action 12 "test" %}', {}, '/url_tag/client/12/test/'),
- 'url18': ('{% url regressiontests.templates.views.client "1,2" %}', {}, '/url_tag/client/1,2/'),
-
- # Failures
- 'url-fail01': ('{% url %}', {}, template.TemplateSyntaxError),
- 'url-fail02': ('{% url no_such_view %}', {}, urlresolvers.NoReverseMatch),
- 'url-fail03': ('{% url regressiontests.templates.views.client %}', {}, urlresolvers.NoReverseMatch),
- 'url-fail04': ('{% url view id, %}', {}, template.TemplateSyntaxError),
- 'url-fail05': ('{% url view id= %}', {}, template.TemplateSyntaxError),
- 'url-fail06': ('{% url view a.id=id %}', {}, template.TemplateSyntaxError),
- 'url-fail07': ('{% url view a.id!id %}', {}, template.TemplateSyntaxError),
- 'url-fail08': ('{% url view id="unterminatedstring %}', {}, template.TemplateSyntaxError),
- 'url-fail09': ('{% url view id=", %}', {}, template.TemplateSyntaxError),
-
- # {% url ... as var %}
- 'url-asvar01': ('{% url regressiontests.templates.views.index as url %}', {}, ''),
- 'url-asvar02': ('{% url regressiontests.templates.views.index as url %}{{ url }}', {}, '/url_tag/'),
- 'url-asvar03': ('{% url no_such_view as url %}{{ url }}', {}, ''),
-
- ### CACHE TAG ######################################################
- 'cache01': ('{% load cache %}{% cache -1 test %}cache01{% endcache %}', {}, 'cache01'),
- 'cache02': ('{% load cache %}{% cache -1 test %}cache02{% endcache %}', {}, 'cache02'),
- 'cache03': ('{% load cache %}{% cache 2 test %}cache03{% endcache %}', {}, 'cache03'),
- 'cache04': ('{% load cache %}{% cache 2 test %}cache04{% endcache %}', {}, 'cache03'),
- 'cache05': ('{% load cache %}{% cache 2 test foo %}cache05{% endcache %}', {'foo': 1}, 'cache05'),
- 'cache06': ('{% load cache %}{% cache 2 test foo %}cache06{% endcache %}', {'foo': 2}, 'cache06'),
- 'cache07': ('{% load cache %}{% cache 2 test foo %}cache07{% endcache %}', {'foo': 1}, 'cache05'),
-
- # Allow first argument to be a variable.
- 'cache08': ('{% load cache %}{% cache time test foo %}cache08{% endcache %}', {'foo': 2, 'time': 2}, 'cache06'),
- 'cache09': ('{% load cache %}{% cache time test foo %}cache09{% endcache %}', {'foo': 3, 'time': -1}, 'cache09'),
- 'cache10': ('{% load cache %}{% cache time test foo %}cache10{% endcache %}', {'foo': 3, 'time': -1}, 'cache10'),
-
- # Raise exception if we don't have at least 2 args, first one integer.
- 'cache11': ('{% load cache %}{% cache %}{% endcache %}', {}, template.TemplateSyntaxError),
- 'cache12': ('{% load cache %}{% cache 1 %}{% endcache %}', {}, template.TemplateSyntaxError),
- 'cache13': ('{% load cache %}{% cache foo bar %}{% endcache %}', {}, template.TemplateSyntaxError),
- 'cache14': ('{% load cache %}{% cache foo bar %}{% endcache %}', {'foo': 'fail'}, template.TemplateSyntaxError),
- 'cache15': ('{% load cache %}{% cache foo bar %}{% endcache %}', {'foo': []}, template.TemplateSyntaxError),
-
- # Regression test for #7460.
- 'cache16': ('{% load cache %}{% cache 1 foo bar %}{% endcache %}', {'foo': 'foo', 'bar': 'with spaces'}, ''),
-
- # Regression test for #11270.
- 'cache17': ('{% load cache %}{% cache 10 long_cache_key poem %}Some Content{% endcache %}', {'poem': 'Oh freddled gruntbuggly/Thy micturations are to me/As plurdled gabbleblotchits/On a lurgid bee/That mordiously hath bitled out/Its earted jurtles/Into a rancid festering/Or else I shall rend thee in the gobberwarts with my blurglecruncheon/See if I dont.'}, 'Some Content'),
-
-
- ### AUTOESCAPE TAG ##############################################
- 'autoescape-tag01': ("{% autoescape off %}hello{% endautoescape %}", {}, "hello"),
- 'autoescape-tag02': ("{% autoescape off %}{{ first }}{% endautoescape %}", {"first": "<b>hello</b>"}, "<b>hello</b>"),
- 'autoescape-tag03': ("{% autoescape on %}{{ first }}{% endautoescape %}", {"first": "<b>hello</b>"}, "&lt;b&gt;hello&lt;/b&gt;"),
-
- # Autoescape disabling and enabling nest in a predictable way.
- 'autoescape-tag04': ("{% autoescape off %}{{ first }} {% autoescape on%}{{ first }}{% endautoescape %}{% endautoescape %}", {"first": "<a>"}, "<a> &lt;a&gt;"),
-
- 'autoescape-tag05': ("{% autoescape on %}{{ first }}{% endautoescape %}", {"first": "<b>first</b>"}, "&lt;b&gt;first&lt;/b&gt;"),
-
- # Strings (ASCII or unicode) already marked as "safe" are not
- # auto-escaped
- 'autoescape-tag06': ("{{ first }}", {"first": mark_safe("<b>first</b>")}, "<b>first</b>"),
- 'autoescape-tag07': ("{% autoescape on %}{{ first }}{% endautoescape %}", {"first": mark_safe(u"<b>Apple</b>")}, u"<b>Apple</b>"),
-
- # Literal string arguments to filters, if used in the result, are
- # safe.
- 'autoescape-tag08': (r'{% autoescape on %}{{ var|default_if_none:" endquote\" hah" }}{% endautoescape %}', {"var": None}, ' endquote" hah'),
-
- # Objects which return safe strings as their __unicode__ method
- # won't get double-escaped.
- 'autoescape-tag09': (r'{{ unsafe }}', {'unsafe': filters.UnsafeClass()}, 'you &amp; me'),
- 'autoescape-tag10': (r'{{ safe }}', {'safe': filters.SafeClass()}, 'you &gt; me'),
-
- # The "safe" and "escape" filters cannot work due to internal
- # implementation details (fortunately, the (no)autoescape block
- # tags can be used in those cases)
- 'autoescape-filtertag01': ("{{ first }}{% filter safe %}{{ first }} x<y{% endfilter %}", {"first": "<a>"}, template.TemplateSyntaxError),
-
- # ifqeual compares unescaped vales.
- 'autoescape-ifequal01': ('{% ifequal var "this & that" %}yes{% endifequal %}', { "var": "this & that" }, "yes" ),
-
- # Arguments to filters are 'safe' and manipulate their input unescaped.
- 'autoescape-filters01': ('{{ var|cut:"&" }}', { "var": "this & that" }, "this that" ),
- 'autoescape-filters02': ('{{ var|join:" & \" }}', { "var": ("Tom", "Dick", "Harry") }, "Tom & Dick & Harry" ),
-
- # Literal strings are safe.
- 'autoescape-literals01': ('{{ "this & that" }}',{}, "this & that" ),
-
- # Iterating over strings outputs safe characters.
- 'autoescape-stringiterations01': ('{% for l in var %}{{ l }},{% endfor %}', {'var': 'K&R'}, "K,&amp;,R," ),
-
- # Escape requirement survives lookup.
- 'autoescape-lookup01': ('{{ var.key }}', { "var": {"key": "this & that" }}, "this &amp; that" ),
-
- }
-
-
-class TemplateTagLoading(unittest.TestCase):
-
- def setUp(self):
- self.old_path = sys.path[:]
- self.old_apps = settings.INSTALLED_APPS
- self.egg_dir = '%s/eggs' % os.path.dirname(__file__)
- self.old_tag_modules = template.templatetags_modules
- template.templatetags_modules = []
-
- def tearDown(self):
- settings.INSTALLED_APPS = self.old_apps
- sys.path = self.old_path
- template.templatetags_modules = self.old_tag_modules
-
- def test_load_error(self):
- ttext = "{% load broken_tag %}"
- self.assertRaises(template.TemplateSyntaxError, template.Template, ttext)
- try:
- template.Template(ttext)
- except template.TemplateSyntaxError, e:
- self.assertTrue('ImportError' in e.args[0])
- self.assertTrue('Xtemplate' in e.args[0])
-
- def test_load_error_egg(self):
- ttext = "{% load broken_egg %}"
- egg_name = '%s/tagsegg.egg' % self.egg_dir
- sys.path.append(egg_name)
- settings.INSTALLED_APPS = ('tagsegg',)
- self.assertRaises(template.TemplateSyntaxError, template.Template, ttext)
- try:
- template.Template(ttext)
- except template.TemplateSyntaxError, e:
- self.assertTrue('ImportError' in e.args[0])
- self.assertTrue('Xtemplate' in e.args[0])
-
- def test_load_working_egg(self):
- ttext = "{% load working_egg %}"
- egg_name = '%s/tagsegg.egg' % self.egg_dir
- sys.path.append(egg_name)
- settings.INSTALLED_APPS = ('tagsegg',)
- t = template.Template(ttext)
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/parts/django/tests/regressiontests/templates/unicode.py b/parts/django/tests/regressiontests/templates/unicode.py
deleted file mode 100644
index 05b0e22..0000000
--- a/parts/django/tests/regressiontests/templates/unicode.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-from unittest import TestCase
-
-from django.template import Template, TemplateEncodingError, Context
-from django.utils.safestring import SafeData
-
-
-class UnicodeTests(TestCase):
- def test_template(self):
- # Templates can be created from unicode strings.
- t1 = Template(u'ŠĐĆŽćžšđ {{ var }}')
- # Templates can also be created from bytestrings. These are assumed to
- # be encoded using UTF-8.
- s = '\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91 {{ var }}'
- t2 = Template(s)
- s = '\x80\xc5\xc0'
- self.assertRaises(TemplateEncodingError, Template, s)
-
- # Contexts can be constructed from unicode or UTF-8 bytestrings.
- c1 = Context({"var": "foo"})
- c2 = Context({u"var": "foo"})
- c3 = Context({"var": u"Đđ"})
- c4 = Context({u"var": "\xc4\x90\xc4\x91"})
-
- # Since both templates and all four contexts represent the same thing,
- # they all render the same (and are returned as unicode objects and
- # "safe" objects as well, for auto-escaping purposes).
- self.assertEqual(t1.render(c3), t2.render(c3))
- self.assertTrue(isinstance(t1.render(c3), unicode))
- self.assertTrue(isinstance(t1.render(c3), SafeData))
diff --git a/parts/django/tests/regressiontests/templates/urls.py b/parts/django/tests/regressiontests/templates/urls.py
deleted file mode 100644
index 28d4133..0000000
--- a/parts/django/tests/regressiontests/templates/urls.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# coding: utf-8
-from django.conf.urls.defaults import *
-from regressiontests.templates import views
-
-urlpatterns = patterns('',
-
- # Test urls for testing reverse lookups
- (r'^$', views.index),
- (r'^client/([\d,]+)/$', views.client),
- (r'^client/(?P<id>\d+)/(?P<action>[^/]+)/$', views.client_action),
- (r'^client/(?P<client_id>\d+)/(?P<action>[^/]+)/$', views.client_action),
- url(r'^named-client/(\d+)/$', views.client2, name="named.client"),
-
- # Unicode strings are permitted everywhere.
- url(ur'^Юникод/(\w+)/$', views.client2, name=u"метка_оператора"),
- url(ur'^Юникод/(?P<tag>\S+)/$', 'regressiontests.templates.views.client2', name=u"метка_оператора_2"),
-)
diff --git a/parts/django/tests/regressiontests/templates/views.py b/parts/django/tests/regressiontests/templates/views.py
deleted file mode 100644
index ca3cecd..0000000
--- a/parts/django/tests/regressiontests/templates/views.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Fake views for testing url reverse lookup
-
-def index(request):
- pass
-
-def client(request, id):
- pass
-
-def client_action(request, id, action):
- pass
-
-def client2(request, tag):
- pass
diff --git a/parts/django/tests/regressiontests/test_client_regress/__init__.py b/parts/django/tests/regressiontests/test_client_regress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/test_client_regress/bad_templates/404.html b/parts/django/tests/regressiontests/test_client_regress/bad_templates/404.html
deleted file mode 100644
index 816bcb9..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/bad_templates/404.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{% block foo %}
-
-This template is deliberately bad - we want it to raise an exception when it is used.
diff --git a/parts/django/tests/regressiontests/test_client_regress/fixtures/testdata.json b/parts/django/tests/regressiontests/test_client_regress/fixtures/testdata.json
deleted file mode 100644
index 0dcf625..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/fixtures/testdata.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "2",
- "model": "auth.user",
- "fields": {
- "username": "inactive",
- "first_name": "Inactive",
- "last_name": "User",
- "is_active": false,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "3",
- "model": "auth.user",
- "fields": {
- "username": "staff",
- "first_name": "Staff",
- "last_name": "Member",
- "is_active": true,
- "is_superuser": false,
- "is_staff": true,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- }
-] \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/test_client_regress/models.py b/parts/django/tests/regressiontests/test_client_regress/models.py
deleted file mode 100644
index 40c7623..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/models.py
+++ /dev/null
@@ -1,864 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Regression tests for the Test Client, especially the customized assertions.
-"""
-import os
-
-from django.conf import settings
-from django.core.exceptions import SuspiciousOperation
-from django.core.urlresolvers import reverse
-from django.template import (TemplateDoesNotExist, TemplateSyntaxError,
- Context, loader)
-from django.test import TestCase, Client
-from django.test.client import encode_file
-from django.test.utils import ContextList
-
-
-class AssertContainsTests(TestCase):
- def setUp(self):
- self.old_templates = settings.TEMPLATE_DIRS
- settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates'),)
-
- def tearDown(self):
- settings.TEMPLATE_DIRS = self.old_templates
-
- def test_contains(self):
- "Responses can be inspected for content, including counting repeated substrings"
- response = self.client.get('/test_client_regress/no_template_view/')
-
- self.assertNotContains(response, 'never')
- self.assertContains(response, 'never', 0)
- self.assertContains(response, 'once')
- self.assertContains(response, 'once', 1)
- self.assertContains(response, 'twice')
- self.assertContains(response, 'twice', 2)
-
- try:
- self.assertContains(response, 'text', status_code=999)
- except AssertionError, e:
- self.assertEquals(str(e), "Couldn't retrieve page: Response code was 200 (expected 999)")
- try:
- self.assertContains(response, 'text', status_code=999, msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Couldn't retrieve page: Response code was 200 (expected 999)")
-
- try:
- self.assertNotContains(response, 'text', status_code=999)
- except AssertionError, e:
- self.assertEquals(str(e), "Couldn't retrieve page: Response code was 200 (expected 999)")
- try:
- self.assertNotContains(response, 'text', status_code=999, msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Couldn't retrieve page: Response code was 200 (expected 999)")
-
- try:
- self.assertNotContains(response, 'once')
- except AssertionError, e:
- self.assertEquals(str(e), "Response should not contain 'once'")
- try:
- self.assertNotContains(response, 'once', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Response should not contain 'once'")
-
- try:
- self.assertContains(response, 'never', 1)
- except AssertionError, e:
- self.assertEquals(str(e), "Found 0 instances of 'never' in response (expected 1)")
- try:
- self.assertContains(response, 'never', 1, msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Found 0 instances of 'never' in response (expected 1)")
-
- try:
- self.assertContains(response, 'once', 0)
- except AssertionError, e:
- self.assertEquals(str(e), "Found 1 instances of 'once' in response (expected 0)")
- try:
- self.assertContains(response, 'once', 0, msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Found 1 instances of 'once' in response (expected 0)")
-
- try:
- self.assertContains(response, 'once', 2)
- except AssertionError, e:
- self.assertEquals(str(e), "Found 1 instances of 'once' in response (expected 2)")
- try:
- self.assertContains(response, 'once', 2, msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Found 1 instances of 'once' in response (expected 2)")
-
- try:
- self.assertContains(response, 'twice', 1)
- except AssertionError, e:
- self.assertEquals(str(e), "Found 2 instances of 'twice' in response (expected 1)")
- try:
- self.assertContains(response, 'twice', 1, msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Found 2 instances of 'twice' in response (expected 1)")
-
- try:
- self.assertContains(response, 'thrice')
- except AssertionError, e:
- self.assertEquals(str(e), "Couldn't find 'thrice' in response")
- try:
- self.assertContains(response, 'thrice', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Couldn't find 'thrice' in response")
-
- try:
- self.assertContains(response, 'thrice', 3)
- except AssertionError, e:
- self.assertEquals(str(e), "Found 0 instances of 'thrice' in response (expected 3)")
- try:
- self.assertContains(response, 'thrice', 3, msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Found 0 instances of 'thrice' in response (expected 3)")
-
- def test_unicode_contains(self):
- "Unicode characters can be found in template context"
- #Regression test for #10183
- r = self.client.get('/test_client_regress/check_unicode/')
- self.assertContains(r, u'さかき')
- self.assertContains(r, '\xe5\xb3\xa0'.decode('utf-8'))
-
- def test_unicode_not_contains(self):
- "Unicode characters can be searched for, and not found in template context"
- #Regression test for #10183
- r = self.client.get('/test_client_regress/check_unicode/')
- self.assertNotContains(r, u'はたけ')
- self.assertNotContains(r, '\xe3\x81\xaf\xe3\x81\x9f\xe3\x81\x91'.decode('utf-8'))
-
-
-class AssertTemplateUsedTests(TestCase):
- fixtures = ['testdata.json']
-
- def test_no_context(self):
- "Template usage assertions work then templates aren't in use"
- response = self.client.get('/test_client_regress/no_template_view/')
-
- # Check that the no template case doesn't mess with the template assertions
- self.assertTemplateNotUsed(response, 'GET Template')
-
- try:
- self.assertTemplateUsed(response, 'GET Template')
- except AssertionError, e:
- self.assertEquals(str(e), "No templates used to render the response")
-
- try:
- self.assertTemplateUsed(response, 'GET Template', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: No templates used to render the response")
-
- def test_single_context(self):
- "Template assertions work when there is a single context"
- response = self.client.get('/test_client/post_view/', {})
-
- try:
- self.assertTemplateNotUsed(response, 'Empty GET Template')
- except AssertionError, e:
- self.assertEquals(str(e), "Template 'Empty GET Template' was used unexpectedly in rendering the response")
-
- try:
- self.assertTemplateNotUsed(response, 'Empty GET Template', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Template 'Empty GET Template' was used unexpectedly in rendering the response")
-
- try:
- self.assertTemplateUsed(response, 'Empty POST Template')
- except AssertionError, e:
- self.assertEquals(str(e), "Template 'Empty POST Template' was not a template used to render the response. Actual template(s) used: Empty GET Template")
-
- try:
- self.assertTemplateUsed(response, 'Empty POST Template', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Template 'Empty POST Template' was not a template used to render the response. Actual template(s) used: Empty GET Template")
-
- def test_multiple_context(self):
- "Template assertions work when there are multiple contexts"
- post_data = {
- 'text': 'Hello World',
- 'email': 'foo@example.com',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view_with_template/', post_data)
- self.assertContains(response, 'POST data OK')
- try:
- self.assertTemplateNotUsed(response, "form_view.html")
- except AssertionError, e:
- self.assertEquals(str(e), "Template 'form_view.html' was used unexpectedly in rendering the response")
-
- try:
- self.assertTemplateNotUsed(response, 'base.html')
- except AssertionError, e:
- self.assertEquals(str(e), "Template 'base.html' was used unexpectedly in rendering the response")
-
- try:
- self.assertTemplateUsed(response, "Valid POST Template")
- except AssertionError, e:
- self.assertEquals(str(e), "Template 'Valid POST Template' was not a template used to render the response. Actual template(s) used: form_view.html, base.html")
-
-class AssertRedirectsTests(TestCase):
- def test_redirect_page(self):
- "An assertion is raised if the original page couldn't be retrieved as expected"
- # This page will redirect with code 301, not 302
- response = self.client.get('/test_client/permanent_redirect_view/')
- try:
- self.assertRedirects(response, '/test_client/get_view/')
- except AssertionError, e:
- self.assertEquals(str(e), "Response didn't redirect as expected: Response code was 301 (expected 302)")
-
- try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Response didn't redirect as expected: Response code was 301 (expected 302)")
-
- def test_lost_query(self):
- "An assertion is raised if the redirect location doesn't preserve GET parameters"
- response = self.client.get('/test_client/redirect_view/', {'var': 'value'})
- try:
- self.assertRedirects(response, '/test_client/get_view/')
- except AssertionError, e:
- self.assertEquals(str(e), "Response redirected to 'http://testserver/test_client/get_view/?var=value', expected 'http://testserver/test_client/get_view/'")
-
- try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Response redirected to 'http://testserver/test_client/get_view/?var=value', expected 'http://testserver/test_client/get_view/'")
-
- def test_incorrect_target(self):
- "An assertion is raised if the response redirects to another target"
- response = self.client.get('/test_client/permanent_redirect_view/')
- try:
- # Should redirect to get_view
- self.assertRedirects(response, '/test_client/some_view/')
- except AssertionError, e:
- self.assertEquals(str(e), "Response didn't redirect as expected: Response code was 301 (expected 302)")
-
- def test_target_page(self):
- "An assertion is raised if the response redirect target cannot be retrieved as expected"
- response = self.client.get('/test_client/double_redirect_view/')
- try:
- # The redirect target responds with a 301 code, not 200
- self.assertRedirects(response, 'http://testserver/test_client/permanent_redirect_view/')
- except AssertionError, e:
- self.assertEquals(str(e), "Couldn't retrieve redirection page '/test_client/permanent_redirect_view/': response code was 301 (expected 200)")
-
- try:
- # The redirect target responds with a 301 code, not 200
- self.assertRedirects(response, 'http://testserver/test_client/permanent_redirect_view/', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Couldn't retrieve redirection page '/test_client/permanent_redirect_view/': response code was 301 (expected 200)")
-
- def test_redirect_chain(self):
- "You can follow a redirect chain of multiple redirects"
- response = self.client.get('/test_client_regress/redirects/further/more/', {}, follow=True)
- self.assertRedirects(response, '/test_client_regress/no_template_view/',
- status_code=301, target_status_code=200)
-
- self.assertEquals(len(response.redirect_chain), 1)
- self.assertEquals(response.redirect_chain[0], ('http://testserver/test_client_regress/no_template_view/', 301))
-
- def test_multiple_redirect_chain(self):
- "You can follow a redirect chain of multiple redirects"
- response = self.client.get('/test_client_regress/redirects/', {}, follow=True)
- self.assertRedirects(response, '/test_client_regress/no_template_view/',
- status_code=301, target_status_code=200)
-
- self.assertEquals(len(response.redirect_chain), 3)
- self.assertEquals(response.redirect_chain[0], ('http://testserver/test_client_regress/redirects/further/', 301))
- self.assertEquals(response.redirect_chain[1], ('http://testserver/test_client_regress/redirects/further/more/', 301))
- self.assertEquals(response.redirect_chain[2], ('http://testserver/test_client_regress/no_template_view/', 301))
-
- def test_redirect_chain_to_non_existent(self):
- "You can follow a chain to a non-existent view"
- response = self.client.get('/test_client_regress/redirect_to_non_existent_view2/', {}, follow=True)
- self.assertRedirects(response, '/test_client_regress/non_existent_view/',
- status_code=301, target_status_code=404)
-
- def test_redirect_chain_to_self(self):
- "Redirections to self are caught and escaped"
- response = self.client.get('/test_client_regress/redirect_to_self/', {}, follow=True)
- # The chain of redirects stops once the cycle is detected.
- self.assertRedirects(response, '/test_client_regress/redirect_to_self/',
- status_code=301, target_status_code=301)
- self.assertEquals(len(response.redirect_chain), 2)
-
- def test_circular_redirect(self):
- "Circular redirect chains are caught and escaped"
- response = self.client.get('/test_client_regress/circular_redirect_1/', {}, follow=True)
- # The chain of redirects will get back to the starting point, but stop there.
- self.assertRedirects(response, '/test_client_regress/circular_redirect_2/',
- status_code=301, target_status_code=301)
- self.assertEquals(len(response.redirect_chain), 4)
-
- def test_redirect_chain_post(self):
- "A redirect chain will be followed from an initial POST post"
- response = self.client.post('/test_client_regress/redirects/',
- {'nothing': 'to_send'}, follow=True)
- self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
- self.assertEquals(len(response.redirect_chain), 3)
-
- def test_redirect_chain_head(self):
- "A redirect chain will be followed from an initial HEAD request"
- response = self.client.head('/test_client_regress/redirects/',
- {'nothing': 'to_send'}, follow=True)
- self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
- self.assertEquals(len(response.redirect_chain), 3)
-
- def test_redirect_chain_options(self):
- "A redirect chain will be followed from an initial OPTIONS request"
- response = self.client.options('/test_client_regress/redirects/',
- {'nothing': 'to_send'}, follow=True)
- self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
- self.assertEquals(len(response.redirect_chain), 3)
-
- def test_redirect_chain_put(self):
- "A redirect chain will be followed from an initial PUT request"
- response = self.client.put('/test_client_regress/redirects/',
- {'nothing': 'to_send'}, follow=True)
- self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
- self.assertEquals(len(response.redirect_chain), 3)
-
- def test_redirect_chain_delete(self):
- "A redirect chain will be followed from an initial DELETE request"
- response = self.client.delete('/test_client_regress/redirects/',
- {'nothing': 'to_send'}, follow=True)
- self.assertRedirects(response,
- '/test_client_regress/no_template_view/', 301, 200)
- self.assertEquals(len(response.redirect_chain), 3)
-
- def test_redirect_chain_on_non_redirect_page(self):
- "An assertion is raised if the original page couldn't be retrieved as expected"
- # This page will redirect with code 301, not 302
- response = self.client.get('/test_client/get_view/', follow=True)
- try:
- self.assertRedirects(response, '/test_client/get_view/')
- except AssertionError, e:
- self.assertEquals(str(e), "Response didn't redirect as expected: Response code was 200 (expected 302)")
-
- try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Response didn't redirect as expected: Response code was 200 (expected 302)")
-
- def test_redirect_on_non_redirect_page(self):
- "An assertion is raised if the original page couldn't be retrieved as expected"
- # This page will redirect with code 301, not 302
- response = self.client.get('/test_client/get_view/')
- try:
- self.assertRedirects(response, '/test_client/get_view/')
- except AssertionError, e:
- self.assertEquals(str(e), "Response didn't redirect as expected: Response code was 200 (expected 302)")
-
- try:
- self.assertRedirects(response, '/test_client/get_view/', msg_prefix='abc')
- except AssertionError, e:
- self.assertEquals(str(e), "abc: Response didn't redirect as expected: Response code was 200 (expected 302)")
-
-
-class AssertFormErrorTests(TestCase):
- def test_unknown_form(self):
- "An assertion is raised if the form name is unknown"
- post_data = {
- 'text': 'Hello World',
- 'email': 'not an email address',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- try:
- self.assertFormError(response, 'wrong_form', 'some_field', 'Some error.')
- except AssertionError, e:
- self.assertEqual(str(e), "The form 'wrong_form' was not used to render the response")
- try:
- self.assertFormError(response, 'wrong_form', 'some_field', 'Some error.', msg_prefix='abc')
- except AssertionError, e:
- self.assertEqual(str(e), "abc: The form 'wrong_form' was not used to render the response")
-
- def test_unknown_field(self):
- "An assertion is raised if the field name is unknown"
- post_data = {
- 'text': 'Hello World',
- 'email': 'not an email address',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- try:
- self.assertFormError(response, 'form', 'some_field', 'Some error.')
- except AssertionError, e:
- self.assertEqual(str(e), "The form 'form' in context 0 does not contain the field 'some_field'")
- try:
- self.assertFormError(response, 'form', 'some_field', 'Some error.', msg_prefix='abc')
- except AssertionError, e:
- self.assertEqual(str(e), "abc: The form 'form' in context 0 does not contain the field 'some_field'")
-
- def test_noerror_field(self):
- "An assertion is raised if the field doesn't have any errors"
- post_data = {
- 'text': 'Hello World',
- 'email': 'not an email address',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- try:
- self.assertFormError(response, 'form', 'value', 'Some error.')
- except AssertionError, e:
- self.assertEqual(str(e), "The field 'value' on form 'form' in context 0 contains no errors")
- try:
- self.assertFormError(response, 'form', 'value', 'Some error.', msg_prefix='abc')
- except AssertionError, e:
- self.assertEqual(str(e), "abc: The field 'value' on form 'form' in context 0 contains no errors")
-
- def test_unknown_error(self):
- "An assertion is raised if the field doesn't contain the provided error"
- post_data = {
- 'text': 'Hello World',
- 'email': 'not an email address',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- try:
- self.assertFormError(response, 'form', 'email', 'Some error.')
- except AssertionError, e:
- self.assertEqual(str(e), "The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [u'Enter a valid e-mail address.'])")
- try:
- self.assertFormError(response, 'form', 'email', 'Some error.', msg_prefix='abc')
- except AssertionError, e:
- self.assertEqual(str(e), "abc: The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [u'Enter a valid e-mail address.'])")
-
- def test_unknown_nonfield_error(self):
- """
- Checks that an assertion is raised if the form's non field errors
- doesn't contain the provided error.
- """
- post_data = {
- 'text': 'Hello World',
- 'email': 'not an email address',
- 'value': 37,
- 'single': 'b',
- 'multi': ('b','c','e')
- }
- response = self.client.post('/test_client/form_view/', post_data)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "Invalid POST Template")
-
- try:
- self.assertFormError(response, 'form', None, 'Some error.')
- except AssertionError, e:
- self.assertEqual(str(e), "The form 'form' in context 0 does not contain the non-field error 'Some error.' (actual errors: )")
- try:
- self.assertFormError(response, 'form', None, 'Some error.', msg_prefix='abc')
- except AssertionError, e:
- self.assertEqual(str(e), "abc: The form 'form' in context 0 does not contain the non-field error 'Some error.' (actual errors: )")
-
-class LoginTests(TestCase):
- fixtures = ['testdata']
-
- def test_login_different_client(self):
- "Check that using a different test client doesn't violate authentication"
-
- # Create a second client, and log in.
- c = Client()
- login = c.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Get a redirection page with the second client.
- response = c.get("/test_client_regress/login_protected_redirect_view/")
-
- # At this points, the self.client isn't logged in.
- # Check that assertRedirects uses the original client, not the
- # default client.
- self.assertRedirects(response, "http://testserver/test_client_regress/get_view/")
-
-
-class SessionEngineTests(TestCase):
- fixtures = ['testdata']
-
- def setUp(self):
- self.old_SESSION_ENGINE = settings.SESSION_ENGINE
- settings.SESSION_ENGINE = 'regressiontests.test_client_regress.session'
-
- def tearDown(self):
- settings.SESSION_ENGINE = self.old_SESSION_ENGINE
-
- def test_login(self):
- "A session engine that modifies the session key can be used to log in"
- login = self.client.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Try to access a login protected page.
- response = self.client.get("/test_client/login_protected_view/")
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['user'].username, 'testclient')
-
-class URLEscapingTests(TestCase):
- def test_simple_argument_get(self):
- "Get a view that has a simple string argument"
- response = self.client.get(reverse('arg_view', args=['Slartibartfast']))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'Howdy, Slartibartfast')
-
- def test_argument_with_space_get(self):
- "Get a view that has a string argument that requires escaping"
- response = self.client.get(reverse('arg_view', args=['Arthur Dent']))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'Hi, Arthur')
-
- def test_simple_argument_post(self):
- "Post for a view that has a simple string argument"
- response = self.client.post(reverse('arg_view', args=['Slartibartfast']))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'Howdy, Slartibartfast')
-
- def test_argument_with_space_post(self):
- "Post for a view that has a string argument that requires escaping"
- response = self.client.post(reverse('arg_view', args=['Arthur Dent']))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'Hi, Arthur')
-
-class ExceptionTests(TestCase):
- fixtures = ['testdata.json']
-
- def test_exception_cleared(self):
- "#5836 - A stale user exception isn't re-raised by the test client."
-
- login = self.client.login(username='testclient',password='password')
- self.assertTrue(login, 'Could not log in')
- try:
- response = self.client.get("/test_client_regress/staff_only/")
- self.fail("General users should not be able to visit this page")
- except SuspiciousOperation:
- pass
-
- # At this point, an exception has been raised, and should be cleared.
-
- # This next operation should be successful; if it isn't we have a problem.
- login = self.client.login(username='staff', password='password')
- self.assertTrue(login, 'Could not log in')
- try:
- self.client.get("/test_client_regress/staff_only/")
- except SuspiciousOperation:
- self.fail("Staff should be able to visit this page")
-
-class TemplateExceptionTests(TestCase):
- def setUp(self):
- # Reset the loaders so they don't try to render cached templates.
- if loader.template_source_loaders is not None:
- for template_loader in loader.template_source_loaders:
- if hasattr(template_loader, 'reset'):
- template_loader.reset()
- self.old_templates = settings.TEMPLATE_DIRS
- settings.TEMPLATE_DIRS = ()
-
- def tearDown(self):
- settings.TEMPLATE_DIRS = self.old_templates
-
- def test_no_404_template(self):
- "Missing templates are correctly reported by test client"
- try:
- response = self.client.get("/no_such_view/")
- self.fail("Should get error about missing template")
- except TemplateDoesNotExist:
- pass
-
- def test_bad_404_template(self):
- "Errors found when rendering 404 error templates are re-raised"
- settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'bad_templates'),)
- try:
- response = self.client.get("/no_such_view/")
- self.fail("Should get error about syntax error in template")
- except TemplateSyntaxError:
- pass
-
-# We need two different tests to check URLconf substitution - one to check
-# it was changed, and another one (without self.urls) to check it was reverted on
-# teardown. This pair of tests relies upon the alphabetical ordering of test execution.
-class UrlconfSubstitutionTests(TestCase):
- urls = 'regressiontests.test_client_regress.urls'
-
- def test_urlconf_was_changed(self):
- "TestCase can enforce a custom URLconf on a per-test basis"
- url = reverse('arg_view', args=['somename'])
- self.assertEquals(url, '/arg_view/somename/')
-
-# This test needs to run *after* UrlconfSubstitutionTests; the zz prefix in the
-# name is to ensure alphabetical ordering.
-class zzUrlconfSubstitutionTests(TestCase):
- def test_urlconf_was_reverted(self):
- "URLconf is reverted to original value after modification in a TestCase"
- url = reverse('arg_view', args=['somename'])
- self.assertEquals(url, '/test_client_regress/arg_view/somename/')
-
-class ContextTests(TestCase):
- fixtures = ['testdata']
-
- def test_single_context(self):
- "Context variables can be retrieved from a single context"
- response = self.client.get("/test_client_regress/request_data/", data={'foo':'whiz'})
- self.assertEqual(response.context.__class__, Context)
- self.assertTrue('get-foo' in response.context)
- self.assertEqual(response.context['get-foo'], 'whiz')
- self.assertEqual(response.context['request-foo'], 'whiz')
- self.assertEqual(response.context['data'], 'sausage')
-
- try:
- response.context['does-not-exist']
- self.fail('Should not be able to retrieve non-existent key')
- except KeyError, e:
- self.assertEquals(e.args[0], 'does-not-exist')
-
- def test_inherited_context(self):
- "Context variables can be retrieved from a list of contexts"
- response = self.client.get("/test_client_regress/request_data_extended/", data={'foo':'whiz'})
- self.assertEqual(response.context.__class__, ContextList)
- self.assertEqual(len(response.context), 2)
- self.assertTrue('get-foo' in response.context)
- self.assertEqual(response.context['get-foo'], 'whiz')
- self.assertEqual(response.context['request-foo'], 'whiz')
- self.assertEqual(response.context['data'], 'bacon')
-
- try:
- response.context['does-not-exist']
- self.fail('Should not be able to retrieve non-existent key')
- except KeyError, e:
- self.assertEquals(e.args[0], 'does-not-exist')
-
-
-class SessionTests(TestCase):
- fixtures = ['testdata.json']
-
- def test_session(self):
- "The session isn't lost if a user logs in"
- # The session doesn't exist to start.
- response = self.client.get('/test_client_regress/check_session/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'NO')
-
- # This request sets a session variable.
- response = self.client.get('/test_client_regress/set_session/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'set_session')
-
- # Check that the session has been modified
- response = self.client.get('/test_client_regress/check_session/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'YES')
-
- # Log in
- login = self.client.login(username='testclient',password='password')
- self.assertTrue(login, 'Could not log in')
-
- # Session should still contain the modified value
- response = self.client.get('/test_client_regress/check_session/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'YES')
-
- def test_logout(self):
- """Logout should work whether the user is logged in or not (#9978)."""
- self.client.logout()
- login = self.client.login(username='testclient',password='password')
- self.assertTrue(login, 'Could not log in')
- self.client.logout()
- self.client.logout()
-
-class RequestMethodTests(TestCase):
- def test_get(self):
- "Request a view via request method GET"
- response = self.client.get('/test_client_regress/request_methods/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'request method: GET')
-
- def test_post(self):
- "Request a view via request method POST"
- response = self.client.post('/test_client_regress/request_methods/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'request method: POST')
-
- def test_head(self):
- "Request a view via request method HEAD"
- response = self.client.head('/test_client_regress/request_methods/')
- self.assertEqual(response.status_code, 200)
- # A HEAD request doesn't return any content.
- self.assertNotEqual(response.content, 'request method: HEAD')
- self.assertEqual(response.content, '')
-
- def test_options(self):
- "Request a view via request method OPTIONS"
- response = self.client.options('/test_client_regress/request_methods/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'request method: OPTIONS')
-
- def test_put(self):
- "Request a view via request method PUT"
- response = self.client.put('/test_client_regress/request_methods/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'request method: PUT')
-
- def test_delete(self):
- "Request a view via request method DELETE"
- response = self.client.delete('/test_client_regress/request_methods/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'request method: DELETE')
-
-class RequestMethodStringDataTests(TestCase):
- def test_post(self):
- "Request a view with string data via request method POST"
- # Regression test for #11371
- data = u'{"test": "json"}'
- response = self.client.post('/test_client_regress/request_methods/', data=data, content_type='application/json')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'request method: POST')
-
- def test_put(self):
- "Request a view with string data via request method PUT"
- # Regression test for #11371
- data = u'{"test": "json"}'
- response = self.client.put('/test_client_regress/request_methods/', data=data, content_type='application/json')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'request method: PUT')
-
-class QueryStringTests(TestCase):
- def test_get_like_requests(self):
- for method_name in ('get','head','options','put','delete'):
- # A GET-like request can pass a query string as data
- method = getattr(self.client, method_name)
- response = method("/test_client_regress/request_data/", data={'foo':'whiz'})
- self.assertEqual(response.context['get-foo'], 'whiz')
- self.assertEqual(response.context['request-foo'], 'whiz')
-
- # A GET-like request can pass a query string as part of the URL
- response = method("/test_client_regress/request_data/?foo=whiz")
- self.assertEqual(response.context['get-foo'], 'whiz')
- self.assertEqual(response.context['request-foo'], 'whiz')
-
- # Data provided in the URL to a GET-like request is overridden by actual form data
- response = method("/test_client_regress/request_data/?foo=whiz", data={'foo':'bang'})
- self.assertEqual(response.context['get-foo'], 'bang')
- self.assertEqual(response.context['request-foo'], 'bang')
-
- response = method("/test_client_regress/request_data/?foo=whiz", data={'bar':'bang'})
- self.assertEqual(response.context['get-foo'], None)
- self.assertEqual(response.context['get-bar'], 'bang')
- self.assertEqual(response.context['request-foo'], None)
- self.assertEqual(response.context['request-bar'], 'bang')
-
- def test_post_like_requests(self):
- # A POST-like request can pass a query string as data
- response = self.client.post("/test_client_regress/request_data/", data={'foo':'whiz'})
- self.assertEqual(response.context['get-foo'], None)
- self.assertEqual(response.context['post-foo'], 'whiz')
-
- # A POST-like request can pass a query string as part of the URL
- response = self.client.post("/test_client_regress/request_data/?foo=whiz")
- self.assertEqual(response.context['get-foo'], 'whiz')
- self.assertEqual(response.context['post-foo'], None)
- self.assertEqual(response.context['request-foo'], 'whiz')
-
- # POST data provided in the URL augments actual form data
- response = self.client.post("/test_client_regress/request_data/?foo=whiz", data={'foo':'bang'})
- self.assertEqual(response.context['get-foo'], 'whiz')
- self.assertEqual(response.context['post-foo'], 'bang')
- self.assertEqual(response.context['request-foo'], 'bang')
-
- response = self.client.post("/test_client_regress/request_data/?foo=whiz", data={'bar':'bang'})
- self.assertEqual(response.context['get-foo'], 'whiz')
- self.assertEqual(response.context['get-bar'], None)
- self.assertEqual(response.context['post-foo'], None)
- self.assertEqual(response.context['post-bar'], 'bang')
- self.assertEqual(response.context['request-foo'], 'whiz')
- self.assertEqual(response.context['request-bar'], 'bang')
-
-class UnicodePayloadTests(TestCase):
- def test_simple_unicode_payload(self):
- "A simple ASCII-only unicode JSON document can be POSTed"
- # Regression test for #10571
- json = u'{"english": "mountain pass"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
- content_type="application/json")
- self.assertEqual(response.content, json)
-
- def test_unicode_payload_utf8(self):
- "A non-ASCII unicode data encoded as UTF-8 can be POSTed"
- # Regression test for #10571
- json = u'{"dog": "собака"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
- content_type="application/json; charset=utf-8")
- self.assertEqual(response.content, json.encode('utf-8'))
-
- def test_unicode_payload_utf16(self):
- "A non-ASCII unicode data encoded as UTF-16 can be POSTed"
- # Regression test for #10571
- json = u'{"dog": "собака"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
- content_type="application/json; charset=utf-16")
- self.assertEqual(response.content, json.encode('utf-16'))
-
- def test_unicode_payload_non_utf(self):
- "A non-ASCII unicode data as a non-UTF based encoding can be POSTed"
- #Regression test for #10571
- json = u'{"dog": "собака"}'
- response = self.client.post("/test_client_regress/parse_unicode_json/", json,
- content_type="application/json; charset=koi8-r")
- self.assertEqual(response.content, json.encode('koi8-r'))
-
-class DummyFile(object):
- def __init__(self, filename):
- self.name = filename
- def read(self):
- return 'TEST_FILE_CONTENT'
-
-class UploadedFileEncodingTest(TestCase):
- def test_file_encoding(self):
- encoded_file = encode_file('TEST_BOUNDARY', 'TEST_KEY', DummyFile('test_name.bin'))
- self.assertEqual('--TEST_BOUNDARY', encoded_file[0])
- self.assertEqual('Content-Disposition: form-data; name="TEST_KEY"; filename="test_name.bin"', encoded_file[1])
- self.assertEqual('TEST_FILE_CONTENT', encoded_file[-1])
-
- def test_guesses_content_type_on_file_encoding(self):
- self.assertEqual('Content-Type: application/octet-stream',
- encode_file('IGNORE', 'IGNORE', DummyFile("file.bin"))[2])
- self.assertEqual('Content-Type: text/plain',
- encode_file('IGNORE', 'IGNORE', DummyFile("file.txt"))[2])
- self.assertEqual('Content-Type: application/zip',
- encode_file('IGNORE', 'IGNORE', DummyFile("file.zip"))[2])
- self.assertEqual('Content-Type: application/octet-stream',
- encode_file('IGNORE', 'IGNORE', DummyFile("file.unknown"))[2])
-
-class RequestHeadersTest(TestCase):
- def test_client_headers(self):
- "A test client can receive custom headers"
- response = self.client.get("/test_client_regress/check_headers/", HTTP_X_ARG_CHECK='Testing 123')
- self.assertEquals(response.content, "HTTP_X_ARG_CHECK: Testing 123")
- self.assertEquals(response.status_code, 200)
-
- def test_client_headers_redirect(self):
- "Test client headers are preserved through redirects"
- response = self.client.get("/test_client_regress/check_headers_redirect/", follow=True, HTTP_X_ARG_CHECK='Testing 123')
- self.assertEquals(response.content, "HTTP_X_ARG_CHECK: Testing 123")
- self.assertRedirects(response, '/test_client_regress/check_headers/',
- status_code=301, target_status_code=200)
diff --git a/parts/django/tests/regressiontests/test_client_regress/session.py b/parts/django/tests/regressiontests/test_client_regress/session.py
deleted file mode 100644
index 74ae3b6..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/session.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from django.contrib.sessions.backends.base import SessionBase
-
-class SessionStore(SessionBase):
- """
- A simple cookie-based session storage implemenation.
-
- The session key is actually the session data, pickled and encoded.
- This means that saving the session will change the session key.
- """
- def __init__(self, session_key=None):
- super(SessionStore, self).__init__(session_key)
-
- def exists(self, session_key):
- return False
-
- def create(self):
- self.session_key = self.encode({})
-
- def save(self, must_create=False):
- self.session_key = self.encode(self._session)
-
- def delete(self, session_key=None):
- self.session_key = self.encode({})
-
- def load(self):
- try:
- return self.decode(self.session_key)
- except:
- self.modified = True
- return {} \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/test_client_regress/templates/unicode.html b/parts/django/tests/regressiontests/test_client_regress/templates/unicode.html
deleted file mode 100644
index bdb6c91..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/templates/unicode.html
+++ /dev/null
@@ -1,5 +0,0 @@
-* 峠 (とうげ tōge "mountain pass")
-* 榊 (さかき sakaki "tree, genus Cleyera")
-* 辻 (つじ tsuji "crossroads, street")
-* 働 (どう dō, はたら hatara(ku) "work")
-* 腺 (せん sen, "gland")
diff --git a/parts/django/tests/regressiontests/test_client_regress/urls.py b/parts/django/tests/regressiontests/test_client_regress/urls.py
deleted file mode 100644
index 650d80b..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/urls.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from django.conf.urls.defaults import *
-from django.views.generic.simple import redirect_to
-import views
-
-urlpatterns = patterns('',
- (r'^no_template_view/$', views.no_template_view),
- (r'^staff_only/$', views.staff_only_view),
- (r'^get_view/$', views.get_view),
- (r'^request_data/$', views.request_data),
- (r'^request_data_extended/$', views.request_data, {'template':'extended.html', 'data':'bacon'}),
- url(r'^arg_view/(?P<name>.+)/$', views.view_with_argument, name='arg_view'),
- (r'^login_protected_redirect_view/$', views.login_protected_redirect_view),
- (r'^redirects/$', redirect_to, {'url': '/test_client_regress/redirects/further/'}),
- (r'^redirects/further/$', redirect_to, {'url': '/test_client_regress/redirects/further/more/'}),
- (r'^redirects/further/more/$', redirect_to, {'url': '/test_client_regress/no_template_view/'}),
- (r'^redirect_to_non_existent_view/$', redirect_to, {'url': '/test_client_regress/non_existent_view/'}),
- (r'^redirect_to_non_existent_view2/$', redirect_to, {'url': '/test_client_regress/redirect_to_non_existent_view/'}),
- (r'^redirect_to_self/$', redirect_to, {'url': '/test_client_regress/redirect_to_self/'}),
- (r'^circular_redirect_1/$', redirect_to, {'url': '/test_client_regress/circular_redirect_2/'}),
- (r'^circular_redirect_2/$', redirect_to, {'url': '/test_client_regress/circular_redirect_3/'}),
- (r'^circular_redirect_3/$', redirect_to, {'url': '/test_client_regress/circular_redirect_1/'}),
- (r'^set_session/$', views.set_session_view),
- (r'^check_session/$', views.check_session_view),
- (r'^request_methods/$', views.request_methods_view),
- (r'^check_unicode/$', views.return_unicode),
- (r'^parse_unicode_json/$', views.return_json_file),
- (r'^check_headers/$', views.check_headers),
- (r'^check_headers_redirect/$', redirect_to, {'url': '/test_client_regress/check_headers/'}),
-)
diff --git a/parts/django/tests/regressiontests/test_client_regress/views.py b/parts/django/tests/regressiontests/test_client_regress/views.py
deleted file mode 100644
index 40aa61f..0000000
--- a/parts/django/tests/regressiontests/test_client_regress/views.py
+++ /dev/null
@@ -1,93 +0,0 @@
-from django.conf import settings
-from django.contrib.auth.decorators import login_required
-from django.http import HttpResponse, HttpResponseRedirect
-from django.core.exceptions import SuspiciousOperation
-from django.shortcuts import render_to_response
-from django.utils import simplejson
-from django.utils.encoding import smart_str
-from django.core.serializers.json import DjangoJSONEncoder
-from django.test.client import CONTENT_TYPE_RE
-
-def no_template_view(request):
- "A simple view that expects a GET request, and returns a rendered template"
- return HttpResponse("No template used. Sample content: twice once twice. Content ends.")
-
-def staff_only_view(request):
- "A view that can only be visited by staff. Non staff members get an exception"
- if request.user.is_staff:
- return HttpResponse('')
- else:
- raise SuspiciousOperation()
-
-def get_view(request):
- "A simple login protected view"
- return HttpResponse("Hello world")
-get_view = login_required(get_view)
-
-def request_data(request, template='base.html', data='sausage'):
- "A simple view that returns the request data in the context"
- return render_to_response(template, {
- 'get-foo':request.GET.get('foo',None),
- 'get-bar':request.GET.get('bar',None),
- 'post-foo':request.POST.get('foo',None),
- 'post-bar':request.POST.get('bar',None),
- 'request-foo':request.REQUEST.get('foo',None),
- 'request-bar':request.REQUEST.get('bar',None),
- 'data': data,
- })
-
-def view_with_argument(request, name):
- """A view that takes a string argument
-
- The purpose of this view is to check that if a space is provided in
- the argument, the test framework unescapes the %20 before passing
- the value to the view.
- """
- if name == 'Arthur Dent':
- return HttpResponse('Hi, Arthur')
- else:
- return HttpResponse('Howdy, %s' % name)
-
-def login_protected_redirect_view(request):
- "A view that redirects all requests to the GET view"
- return HttpResponseRedirect('/test_client_regress/get_view/')
-login_protected_redirect_view = login_required(login_protected_redirect_view)
-
-def set_session_view(request):
- "A view that sets a session variable"
- request.session['session_var'] = 'YES'
- return HttpResponse('set_session')
-
-def check_session_view(request):
- "A view that reads a session variable"
- return HttpResponse(request.session.get('session_var', 'NO'))
-
-def request_methods_view(request):
- "A view that responds with the request method"
- return HttpResponse('request method: %s' % request.method)
-
-def return_unicode(request):
- return render_to_response('unicode.html')
-
-def return_json_file(request):
- "A view that parses and returns a JSON string as a file."
- match = CONTENT_TYPE_RE.match(request.META['CONTENT_TYPE'])
- if match:
- charset = match.group(1)
- else:
- charset = settings.DEFAULT_CHARSET
-
- # This just checks that the uploaded data is JSON
- obj_dict = simplejson.loads(request.raw_post_data.decode(charset))
- obj_json = simplejson.dumps(obj_dict, encoding=charset,
- cls=DjangoJSONEncoder,
- ensure_ascii=False)
- response = HttpResponse(smart_str(obj_json, encoding=charset), status=200,
- mimetype='application/json; charset=' + charset)
- response['Content-Disposition'] = 'attachment; filename=testfile.json'
- return response
-
-def check_headers(request):
- "A view that responds with value of the X-ARG-CHECK header"
- return HttpResponse('HTTP_X_ARG_CHECK: %s' % request.META.get('HTTP_X_ARG_CHECK', 'Undefined'))
-
diff --git a/parts/django/tests/regressiontests/test_runner/__init__.py b/parts/django/tests/regressiontests/test_runner/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/test_runner/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/test_runner/models.py b/parts/django/tests/regressiontests/test_runner/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/test_runner/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/test_runner/tests.py b/parts/django/tests/regressiontests/test_runner/tests.py
deleted file mode 100644
index 3387d65..0000000
--- a/parts/django/tests/regressiontests/test_runner/tests.py
+++ /dev/null
@@ -1,120 +0,0 @@
-"""
-Tests for django test runner
-"""
-import StringIO
-import unittest
-import django
-from django.core.exceptions import ImproperlyConfigured
-from django.test import simple
-
-class DjangoTestRunnerTests(unittest.TestCase):
-
- def test_failfast(self):
- class MockTestOne(unittest.TestCase):
- def runTest(self):
- assert False
- class MockTestTwo(unittest.TestCase):
- def runTest(self):
- assert False
-
- suite = unittest.TestSuite([MockTestOne(), MockTestTwo()])
- mock_stream = StringIO.StringIO()
- dtr = simple.DjangoTestRunner(verbosity=0, failfast=False, stream=mock_stream)
- result = dtr.run(suite)
- self.assertEqual(2, result.testsRun)
- self.assertEqual(2, len(result.failures))
-
- dtr = simple.DjangoTestRunner(verbosity=0, failfast=True, stream=mock_stream)
- result = dtr.run(suite)
- self.assertEqual(1, result.testsRun)
- self.assertEqual(1, len(result.failures))
-
-class DependencyOrderingTests(unittest.TestCase):
-
- def test_simple_dependencies(self):
- raw = [
- ('s1', ['alpha']),
- ('s2', ['bravo']),
- ('s3', ['charlie']),
- ]
- dependencies = {
- 'alpha': ['charlie'],
- 'bravo': ['charlie'],
- }
-
- ordered = simple.dependency_ordered(raw, dependencies=dependencies)
- ordered_sigs = [sig for sig,aliases in ordered]
-
- self.assertTrue('s1' in ordered_sigs)
- self.assertTrue('s2' in ordered_sigs)
- self.assertTrue('s3' in ordered_sigs)
- self.assertTrue(ordered_sigs.index('s3') < ordered_sigs.index('s1'))
- self.assertTrue(ordered_sigs.index('s3') < ordered_sigs.index('s2'))
-
- def test_chained_dependencies(self):
- raw = [
- ('s1', ['alpha']),
- ('s2', ['bravo']),
- ('s3', ['charlie']),
- ]
- dependencies = {
- 'alpha': ['bravo'],
- 'bravo': ['charlie'],
- }
-
- ordered = simple.dependency_ordered(raw, dependencies=dependencies)
- ordered_sigs = [sig for sig,aliases in ordered]
-
- self.assertTrue('s1' in ordered_sigs)
- self.assertTrue('s2' in ordered_sigs)
- self.assertTrue('s3' in ordered_sigs)
-
- # Explicit dependencies
- self.assertTrue(ordered_sigs.index('s2') < ordered_sigs.index('s1'))
- self.assertTrue(ordered_sigs.index('s3') < ordered_sigs.index('s2'))
-
- # Implied dependencies
- self.assertTrue(ordered_sigs.index('s3') < ordered_sigs.index('s1'))
-
- def test_multiple_dependencies(self):
- raw = [
- ('s1', ['alpha']),
- ('s2', ['bravo']),
- ('s3', ['charlie']),
- ('s4', ['delta']),
- ]
- dependencies = {
- 'alpha': ['bravo','delta'],
- 'bravo': ['charlie'],
- 'delta': ['charlie'],
- }
-
- ordered = simple.dependency_ordered(raw, dependencies=dependencies)
- ordered_sigs = [sig for sig,aliases in ordered]
-
- self.assertTrue('s1' in ordered_sigs)
- self.assertTrue('s2' in ordered_sigs)
- self.assertTrue('s3' in ordered_sigs)
- self.assertTrue('s4' in ordered_sigs)
-
- # Explicit dependencies
- self.assertTrue(ordered_sigs.index('s2') < ordered_sigs.index('s1'))
- self.assertTrue(ordered_sigs.index('s4') < ordered_sigs.index('s1'))
- self.assertTrue(ordered_sigs.index('s3') < ordered_sigs.index('s2'))
- self.assertTrue(ordered_sigs.index('s3') < ordered_sigs.index('s4'))
-
- # Implicit dependencies
- self.assertTrue(ordered_sigs.index('s3') < ordered_sigs.index('s1'))
-
- def test_circular_dependencies(self):
- raw = [
- ('s1', ['alpha']),
- ('s2', ['bravo']),
- ]
- dependencies = {
- 'bravo': ['alpha'],
- 'alpha': ['bravo'],
- }
-
- self.assertRaises(ImproperlyConfigured, simple.dependency_ordered, raw, dependencies=dependencies)
-
diff --git a/parts/django/tests/regressiontests/test_utils/__init__.py b/parts/django/tests/regressiontests/test_utils/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/test_utils/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/test_utils/models.py b/parts/django/tests/regressiontests/test_utils/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/test_utils/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/test_utils/tests.py b/parts/django/tests/regressiontests/test_utils/tests.py
deleted file mode 100644
index a2539bf..0000000
--- a/parts/django/tests/regressiontests/test_utils/tests.py
+++ /dev/null
@@ -1,72 +0,0 @@
-r"""
-# Some checks of the doctest output normalizer.
-# Standard doctests do fairly
->>> from django.utils import simplejson
->>> from django.utils.xmlutils import SimplerXMLGenerator
->>> from StringIO import StringIO
-
->>> def produce_long():
-... return 42L
-
->>> def produce_int():
-... return 42
-
->>> def produce_json():
-... return simplejson.dumps(['foo', {'bar': ('baz', None, 1.0, 2), 'whiz': 42}])
-
->>> def produce_xml():
-... stream = StringIO()
-... xml = SimplerXMLGenerator(stream, encoding='utf-8')
-... xml.startDocument()
-... xml.startElement("foo", {"aaa" : "1.0", "bbb": "2.0"})
-... xml.startElement("bar", {"ccc" : "3.0"})
-... xml.characters("Hello")
-... xml.endElement("bar")
-... xml.startElement("whiz", {})
-... xml.characters("Goodbye")
-... xml.endElement("whiz")
-... xml.endElement("foo")
-... xml.endDocument()
-... return stream.getvalue()
-
->>> def produce_xml_fragment():
-... stream = StringIO()
-... xml = SimplerXMLGenerator(stream, encoding='utf-8')
-... xml.startElement("foo", {"aaa": "1.0", "bbb": "2.0"})
-... xml.characters("Hello")
-... xml.endElement("foo")
-... xml.startElement("bar", {"ccc": "3.0", "ddd": "4.0"})
-... xml.endElement("bar")
-... return stream.getvalue()
-
-# Long values are normalized and are comparable to normal integers ...
->>> produce_long()
-42
-
-# ... and vice versa
->>> produce_int()
-42L
-
-# JSON output is normalized for field order, so it doesn't matter
-# which order json dictionary attributes are listed in output
->>> produce_json()
-'["foo", {"bar": ["baz", null, 1.0, 2], "whiz": 42}]'
-
->>> produce_json()
-'["foo", {"whiz": 42, "bar": ["baz", null, 1.0, 2]}]'
-
-# XML output is normalized for attribute order, so it doesn't matter
-# which order XML element attributes are listed in output
->>> produce_xml()
-'<?xml version="1.0" encoding="UTF-8"?>\n<foo aaa="1.0" bbb="2.0"><bar ccc="3.0">Hello</bar><whiz>Goodbye</whiz></foo>'
-
->>> produce_xml()
-'<?xml version="1.0" encoding="UTF-8"?>\n<foo bbb="2.0" aaa="1.0"><bar ccc="3.0">Hello</bar><whiz>Goodbye</whiz></foo>'
-
->>> produce_xml_fragment()
-'<foo aaa="1.0" bbb="2.0">Hello</foo><bar ccc="3.0" ddd="4.0"></bar>'
-
->>> produce_xml_fragment()
-'<foo bbb="2.0" aaa="1.0">Hello</foo><bar ddd="4.0" ccc="3.0"></bar>'
-
-""" \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/text/__init__.py b/parts/django/tests/regressiontests/text/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/text/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/text/models.py b/parts/django/tests/regressiontests/text/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/text/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/text/tests.py b/parts/django/tests/regressiontests/text/tests.py
deleted file mode 100644
index fd02036..0000000
--- a/parts/django/tests/regressiontests/text/tests.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# coding: utf-8
-from django.test import TestCase
-
-from django.utils.text import *
-from django.utils.http import urlquote, urlquote_plus, cookie_date, http_date
-from django.utils.encoding import iri_to_uri
-
-class TextTests(TestCase):
- """
- Tests for stuff in django.utils.text and other text munging util functions.
- """
-
- def test_smart_split(self):
-
- self.assertEquals(list(smart_split(r'''This is "a person" test.''')),
- [u'This', u'is', u'"a person"', u'test.'])
-
- self.assertEquals(list(smart_split(r'''This is "a person's" test.'''))[2],
- u'"a person\'s"')
-
- self.assertEquals(list(smart_split(r'''This is "a person\"s" test.'''))[2],
- u'"a person\\"s"')
-
- self.assertEquals(list(smart_split('''"a 'one''')), [u'"a', u"'one"])
-
- self.assertEquals(list(smart_split(r'''all friends' tests'''))[1],
- "friends'")
-
- self.assertEquals(list(smart_split(u'url search_page words="something else"')),
- [u'url', u'search_page', u'words="something else"'])
-
- self.assertEquals(list(smart_split(u"url search_page words='something else'")),
- [u'url', u'search_page', u"words='something else'"])
-
- self.assertEquals(list(smart_split(u'url search_page words "something else"')),
- [u'url', u'search_page', u'words', u'"something else"'])
-
- self.assertEquals(list(smart_split(u'url search_page words-"something else"')),
- [u'url', u'search_page', u'words-"something else"'])
-
- self.assertEquals(list(smart_split(u'url search_page words=hello')),
- [u'url', u'search_page', u'words=hello'])
-
- self.assertEquals(list(smart_split(u'url search_page words="something else')),
- [u'url', u'search_page', u'words="something', u'else'])
-
- self.assertEquals(list(smart_split("cut:','|cut:' '")),
- [u"cut:','|cut:' '"])
-
- def test_urlquote(self):
-
- self.assertEquals(urlquote(u'Paris & Orl\xe9ans'),
- u'Paris%20%26%20Orl%C3%A9ans')
- self.assertEquals(urlquote(u'Paris & Orl\xe9ans', safe="&"),
- u'Paris%20&%20Orl%C3%A9ans')
- self.assertEquals(urlquote_plus(u'Paris & Orl\xe9ans'),
- u'Paris+%26+Orl%C3%A9ans')
- self.assertEquals(urlquote_plus(u'Paris & Orl\xe9ans', safe="&"),
- u'Paris+&+Orl%C3%A9ans')
-
- def test_cookie_date(self):
- t = 1167616461.0
- self.assertEquals(cookie_date(t), 'Mon, 01-Jan-2007 01:54:21 GMT')
-
- def test_http_date(self):
- t = 1167616461.0
- self.assertEquals(http_date(t), 'Mon, 01 Jan 2007 01:54:21 GMT')
-
- def test_iri_to_uri(self):
- self.assertEquals(iri_to_uri(u'red%09ros\xe9#red'),
- 'red%09ros%C3%A9#red')
-
- self.assertEquals(iri_to_uri(u'/blog/for/J\xfcrgen M\xfcnster/'),
- '/blog/for/J%C3%BCrgen%20M%C3%BCnster/')
-
- self.assertEquals(iri_to_uri(u'locations/%s' % urlquote_plus(u'Paris & Orl\xe9ans')),
- 'locations/Paris+%26+Orl%C3%A9ans')
-
- def test_iri_to_uri_idempotent(self):
- self.assertEquals(iri_to_uri(iri_to_uri(u'red%09ros\xe9#red')),
- 'red%09ros%C3%A9#red')
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/__init__.py b/parts/django/tests/regressiontests/urlpatterns_reverse/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/extra_urls.py b/parts/django/tests/regressiontests/urlpatterns_reverse/extra_urls.py
deleted file mode 100644
index c171f6d..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/extra_urls.py
+++ /dev/null
@@ -1,13 +0,0 @@
-"""
-Some extra URL patterns that are included at the top level.
-"""
-
-from django.conf.urls.defaults import *
-from views import empty_view
-
-urlpatterns = patterns('',
- url(r'^e-places/(\d+)/$', empty_view, name='extra-places'),
- url(r'^e-people/(?P<name>\w+)/$', empty_view, name="extra-people"),
- url('', include('regressiontests.urlpatterns_reverse.included_urls2')),
- url(r'^prefix/(?P<prefix>\w+)/', include('regressiontests.urlpatterns_reverse.included_urls2')),
-)
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/included_namespace_urls.py b/parts/django/tests/regressiontests/urlpatterns_reverse/included_namespace_urls.py
deleted file mode 100644
index 0731906..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/included_namespace_urls.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.conf.urls.defaults import *
-from namespace_urls import URLObject
-
-testobj3 = URLObject('testapp', 'test-ns3')
-
-urlpatterns = patterns('regressiontests.urlpatterns_reverse.views',
- url(r'^normal/$', 'empty_view', name='inc-normal-view'),
- url(r'^normal/(?P<arg1>\d+)/(?P<arg2>\d+)/$', 'empty_view', name='inc-normal-view'),
-
- (r'^test3/', include(testobj3.urls)),
- (r'^ns-included3/', include('regressiontests.urlpatterns_reverse.included_urls', namespace='inc-ns3')),
-)
-
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/included_urls.py b/parts/django/tests/regressiontests/urlpatterns_reverse/included_urls.py
deleted file mode 100644
index f8acf34..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/included_urls.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.conf.urls.defaults import *
-from views import empty_view
-
-urlpatterns = patterns('',
- url(r'^$', empty_view, name="inner-nothing"),
- url(r'^extra/(?P<extra>\w+)/$', empty_view, name="inner-extra"),
- url(r'^(?P<one>\d+)|(?P<two>\d+)/$', empty_view, name="inner-disjunction"),
-)
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/included_urls2.py b/parts/django/tests/regressiontests/urlpatterns_reverse/included_urls2.py
deleted file mode 100644
index f414ca6..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/included_urls2.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""
-These URL patterns are included in two different ways in the main urls.py, with
-an extra argument present in one case. Thus, there are two different ways for
-each name to resolve and Django must distinguish the possibilities based on the
-argument list.
-"""
-
-from django.conf.urls.defaults import *
-from views import empty_view
-
-urlpatterns = patterns('',
- url(r'^part/(?P<value>\w+)/$', empty_view, name="part"),
- url(r'^part2/(?:(?P<value>\w+)/)?$', empty_view, name="part2"),
-)
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/middleware.py b/parts/django/tests/regressiontests/urlpatterns_reverse/middleware.py
deleted file mode 100644
index cd3c045..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/middleware.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.core.urlresolvers import set_urlconf
-
-import urlconf_inner
-
-class ChangeURLconfMiddleware(object):
- def process_request(self, request):
- request.urlconf = urlconf_inner.__name__
-
-class NullChangeURLconfMiddleware(object):
- def process_request(self, request):
- request.urlconf = None
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/models.py b/parts/django/tests/regressiontests/urlpatterns_reverse/models.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/models.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/namespace_urls.py b/parts/django/tests/regressiontests/urlpatterns_reverse/namespace_urls.py
deleted file mode 100644
index 27cc7f7..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/namespace_urls.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from django.conf.urls.defaults import *
-
-class URLObject(object):
- def __init__(self, app_name, namespace):
- self.app_name = app_name
- self.namespace = namespace
-
- def urls(self):
- return patterns('',
- url(r'^inner/$', 'empty_view', name='urlobject-view'),
- url(r'^inner/(?P<arg1>\d+)/(?P<arg2>\d+)/$', 'empty_view', name='urlobject-view'),
- ), self.app_name, self.namespace
- urls = property(urls)
-
-testobj1 = URLObject('testapp', 'test-ns1')
-testobj2 = URLObject('testapp', 'test-ns2')
-default_testobj = URLObject('testapp', 'testapp')
-
-otherobj1 = URLObject('nodefault', 'other-ns1')
-otherobj2 = URLObject('nodefault', 'other-ns2')
-
-urlpatterns = patterns('regressiontests.urlpatterns_reverse.views',
- url(r'^normal/$', 'empty_view', name='normal-view'),
- url(r'^normal/(?P<arg1>\d+)/(?P<arg2>\d+)/$', 'empty_view', name='normal-view'),
-
- (r'^test1/', include(testobj1.urls)),
- (r'^test2/', include(testobj2.urls)),
- (r'^default/', include(default_testobj.urls)),
-
- (r'^other1/', include(otherobj1.urls)),
- (r'^other2/', include(otherobj2.urls)),
-
- (r'^ns-included1/', include('regressiontests.urlpatterns_reverse.included_namespace_urls', namespace='inc-ns1')),
- (r'^ns-included2/', include('regressiontests.urlpatterns_reverse.included_namespace_urls', namespace='inc-ns2')),
-
- (r'^included/', include('regressiontests.urlpatterns_reverse.included_namespace_urls')),
-
-)
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/no_urls.py b/parts/django/tests/regressiontests/urlpatterns_reverse/no_urls.py
deleted file mode 100644
index c9b9efe..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/no_urls.py
+++ /dev/null
@@ -1,2 +0,0 @@
-#from django.conf.urls.defaults import *
-
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/tests.py b/parts/django/tests/regressiontests/urlpatterns_reverse/tests.py
deleted file mode 100644
index d0b7146..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/tests.py
+++ /dev/null
@@ -1,330 +0,0 @@
-"""
-Unit tests for reverse URL lookups.
-"""
-import unittest
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.core.urlresolvers import reverse, resolve, NoReverseMatch, Resolver404, RegexURLResolver
-from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
-from django.shortcuts import redirect
-from django.test import TestCase
-
-import urlconf_outer
-import urlconf_inner
-import middleware
-
-test_data = (
- ('places', '/places/3/', [3], {}),
- ('places', '/places/3/', ['3'], {}),
- ('places', NoReverseMatch, ['a'], {}),
- ('places', NoReverseMatch, [], {}),
- ('places?', '/place/', [], {}),
- ('places+', '/places/', [], {}),
- ('places*', '/place/', [], {}),
- ('places2?', '/', [], {}),
- ('places2+', '/places/', [], {}),
- ('places2*', '/', [], {}),
- ('places3', '/places/4/', [4], {}),
- ('places3', '/places/harlem/', ['harlem'], {}),
- ('places3', NoReverseMatch, ['harlem64'], {}),
- ('places4', '/places/3/', [], {'id': 3}),
- ('people', NoReverseMatch, [], {}),
- ('people', '/people/adrian/', ['adrian'], {}),
- ('people', '/people/adrian/', [], {'name': 'adrian'}),
- ('people', NoReverseMatch, ['name with spaces'], {}),
- ('people', NoReverseMatch, [], {'name': 'name with spaces'}),
- ('people2', '/people/name/', [], {}),
- ('people2a', '/people/name/fred/', ['fred'], {}),
- ('optional', '/optional/fred/', [], {'name': 'fred'}),
- ('optional', '/optional/fred/', ['fred'], {}),
- ('hardcoded', '/hardcoded/', [], {}),
- ('hardcoded2', '/hardcoded/doc.pdf', [], {}),
- ('people3', '/people/il/adrian/', [], {'state': 'il', 'name': 'adrian'}),
- ('people3', NoReverseMatch, [], {'state': 'il'}),
- ('people3', NoReverseMatch, [], {'name': 'adrian'}),
- ('people4', NoReverseMatch, [], {'state': 'il', 'name': 'adrian'}),
- ('people6', '/people/il/test/adrian/', ['il/test', 'adrian'], {}),
- ('people6', '/people//adrian/', ['adrian'], {}),
- ('range', '/character_set/a/', [], {}),
- ('range2', '/character_set/x/', [], {}),
- ('price', '/price/$10/', ['10'], {}),
- ('price2', '/price/$10/', ['10'], {}),
- ('price3', '/price/$10/', ['10'], {}),
- ('product', '/product/chocolate+($2.00)/', [], {'price': '2.00', 'product': 'chocolate'}),
- ('headlines', '/headlines/2007.5.21/', [], dict(year=2007, month=5, day=21)),
- ('windows', r'/windows_path/C:%5CDocuments%20and%20Settings%5Cspam/', [], dict(drive_name='C', path=r'Documents and Settings\spam')),
- ('special', r'/special_chars/+%5C$*/', [r'+\$*'], {}),
- ('special', NoReverseMatch, [''], {}),
- ('mixed', '/john/0/', [], {'name': 'john'}),
- ('repeats', '/repeats/a/', [], {}),
- ('repeats2', '/repeats/aa/', [], {}),
- ('repeats3', '/repeats/aa/', [], {}),
- ('insensitive', '/CaseInsensitive/fred', ['fred'], {}),
- ('test', '/test/1', [], {}),
- ('test2', '/test/2', [], {}),
- ('inner-nothing', '/outer/42/', [], {'outer': '42'}),
- ('inner-nothing', '/outer/42/', ['42'], {}),
- ('inner-nothing', NoReverseMatch, ['foo'], {}),
- ('inner-extra', '/outer/42/extra/inner/', [], {'extra': 'inner', 'outer': '42'}),
- ('inner-extra', '/outer/42/extra/inner/', ['42', 'inner'], {}),
- ('inner-extra', NoReverseMatch, ['fred', 'inner'], {}),
- ('disjunction', NoReverseMatch, ['foo'], {}),
- ('inner-disjunction', NoReverseMatch, ['10', '11'], {}),
- ('extra-places', '/e-places/10/', ['10'], {}),
- ('extra-people', '/e-people/fred/', ['fred'], {}),
- ('extra-people', '/e-people/fred/', [], {'name': 'fred'}),
- ('part', '/part/one/', [], {'value': 'one'}),
- ('part', '/prefix/xx/part/one/', [], {'value': 'one', 'prefix': 'xx'}),
- ('part2', '/part2/one/', [], {'value': 'one'}),
- ('part2', '/part2/', [], {}),
- ('part2', '/prefix/xx/part2/one/', [], {'value': 'one', 'prefix': 'xx'}),
- ('part2', '/prefix/xx/part2/', [], {'prefix': 'xx'}),
-
- # Regression for #9038
- # These views are resolved by method name. Each method is deployed twice -
- # once with an explicit argument, and once using the default value on
- # the method. This is potentially ambiguous, as you have to pick the
- # correct view for the arguments provided.
- ('kwargs_view', '/arg_view/', [], {}),
- ('kwargs_view', '/arg_view/10/', [], {'arg1':10}),
- ('regressiontests.urlpatterns_reverse.views.absolute_kwargs_view', '/absolute_arg_view/', [], {}),
- ('regressiontests.urlpatterns_reverse.views.absolute_kwargs_view', '/absolute_arg_view/10/', [], {'arg1':10}),
- ('non_path_include', '/includes/non_path_include/', [], {})
-
-)
-
-class NoURLPatternsTests(TestCase):
- urls = 'regressiontests.urlpatterns_reverse.no_urls'
-
- def assertRaisesErrorWithMessage(self, error, message, callable,
- *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
- def test_no_urls_exception(self):
- """
- RegexURLResolver should raise an exception when no urlpatterns exist.
- """
- resolver = RegexURLResolver(r'^$', self.urls)
-
- self.assertRaisesErrorWithMessage(ImproperlyConfigured,
- "The included urlconf regressiontests.urlpatterns_reverse.no_urls "\
- "doesn't have any patterns in it", getattr, resolver, 'url_patterns')
-
-class URLPatternReverse(TestCase):
- urls = 'regressiontests.urlpatterns_reverse.urls'
-
- def test_urlpattern_reverse(self):
- for name, expected, args, kwargs in test_data:
- try:
- got = reverse(name, args=args, kwargs=kwargs)
- except NoReverseMatch, e:
- self.assertEqual(expected, NoReverseMatch)
- else:
- self.assertEquals(got, expected)
-
- def test_reverse_none(self):
- # Reversing None should raise an error, not return the last un-named view.
- self.assertRaises(NoReverseMatch, reverse, None)
-
-class ResolverTests(unittest.TestCase):
- def test_non_regex(self):
- """
- Verifies that we raise a Resolver404 if what we are resolving doesn't
- meet the basic requirements of a path to match - i.e., at the very
- least, it matches the root pattern '^/'. We must never return None
- from resolve, or we will get a TypeError further down the line.
-
- Regression for #10834.
- """
- self.assertRaises(Resolver404, resolve, '')
- self.assertRaises(Resolver404, resolve, 'a')
- self.assertRaises(Resolver404, resolve, '\\')
- self.assertRaises(Resolver404, resolve, '.')
-
-class ReverseShortcutTests(TestCase):
- urls = 'regressiontests.urlpatterns_reverse.urls'
-
- def test_redirect_to_object(self):
- # We don't really need a model; just something with a get_absolute_url
- class FakeObj(object):
- def get_absolute_url(self):
- return "/hi-there/"
-
- res = redirect(FakeObj())
- self.assert_(isinstance(res, HttpResponseRedirect))
- self.assertEqual(res['Location'], '/hi-there/')
-
- res = redirect(FakeObj(), permanent=True)
- self.assert_(isinstance(res, HttpResponsePermanentRedirect))
- self.assertEqual(res['Location'], '/hi-there/')
-
- def test_redirect_to_view_name(self):
- res = redirect('hardcoded2')
- self.assertEqual(res['Location'], '/hardcoded/doc.pdf')
- res = redirect('places', 1)
- self.assertEqual(res['Location'], '/places/1/')
- res = redirect('headlines', year='2008', month='02', day='17')
- self.assertEqual(res['Location'], '/headlines/2008.02.17/')
- self.assertRaises(NoReverseMatch, redirect, 'not-a-view')
-
- def test_redirect_to_url(self):
- res = redirect('/foo/')
- self.assertEqual(res['Location'], '/foo/')
- res = redirect('http://example.com/')
- self.assertEqual(res['Location'], 'http://example.com/')
-
- def test_redirect_view_object(self):
- from views import absolute_kwargs_view
- res = redirect(absolute_kwargs_view)
- self.assertEqual(res['Location'], '/absolute_arg_view/')
- self.assertRaises(NoReverseMatch, redirect, absolute_kwargs_view, wrong_argument=None)
-
-
-class NamespaceTests(TestCase):
- urls = 'regressiontests.urlpatterns_reverse.namespace_urls'
-
- def test_ambiguous_object(self):
- "Names deployed via dynamic URL objects that require namespaces can't be resolved"
- self.assertRaises(NoReverseMatch, reverse, 'urlobject-view')
- self.assertRaises(NoReverseMatch, reverse, 'urlobject-view', args=[37,42])
- self.assertRaises(NoReverseMatch, reverse, 'urlobject-view', kwargs={'arg1':42, 'arg2':37})
-
- def test_ambiguous_urlpattern(self):
- "Names deployed via dynamic URL objects that require namespaces can't be resolved"
- self.assertRaises(NoReverseMatch, reverse, 'inner-nothing')
- self.assertRaises(NoReverseMatch, reverse, 'inner-nothing', args=[37,42])
- self.assertRaises(NoReverseMatch, reverse, 'inner-nothing', kwargs={'arg1':42, 'arg2':37})
-
- def test_non_existent_namespace(self):
- "Non-existent namespaces raise errors"
- self.assertRaises(NoReverseMatch, reverse, 'blahblah:urlobject-view')
- self.assertRaises(NoReverseMatch, reverse, 'test-ns1:blahblah:urlobject-view')
-
- def test_normal_name(self):
- "Normal lookups work as expected"
- self.assertEquals('/normal/', reverse('normal-view'))
- self.assertEquals('/normal/37/42/', reverse('normal-view', args=[37,42]))
- self.assertEquals('/normal/42/37/', reverse('normal-view', kwargs={'arg1':42, 'arg2':37}))
-
- def test_simple_included_name(self):
- "Normal lookups work on names included from other patterns"
- self.assertEquals('/included/normal/', reverse('inc-normal-view'))
- self.assertEquals('/included/normal/37/42/', reverse('inc-normal-view', args=[37,42]))
- self.assertEquals('/included/normal/42/37/', reverse('inc-normal-view', kwargs={'arg1':42, 'arg2':37}))
-
- def test_namespace_object(self):
- "Dynamic URL objects can be found using a namespace"
- self.assertEquals('/test1/inner/', reverse('test-ns1:urlobject-view'))
- self.assertEquals('/test1/inner/37/42/', reverse('test-ns1:urlobject-view', args=[37,42]))
- self.assertEquals('/test1/inner/42/37/', reverse('test-ns1:urlobject-view', kwargs={'arg1':42, 'arg2':37}))
-
- def test_embedded_namespace_object(self):
- "Namespaces can be installed anywhere in the URL pattern tree"
- self.assertEquals('/included/test3/inner/', reverse('test-ns3:urlobject-view'))
- self.assertEquals('/included/test3/inner/37/42/', reverse('test-ns3:urlobject-view', args=[37,42]))
- self.assertEquals('/included/test3/inner/42/37/', reverse('test-ns3:urlobject-view', kwargs={'arg1':42, 'arg2':37}))
-
- def test_namespace_pattern(self):
- "Namespaces can be applied to include()'d urlpatterns"
- self.assertEquals('/ns-included1/normal/', reverse('inc-ns1:inc-normal-view'))
- self.assertEquals('/ns-included1/normal/37/42/', reverse('inc-ns1:inc-normal-view', args=[37,42]))
- self.assertEquals('/ns-included1/normal/42/37/', reverse('inc-ns1:inc-normal-view', kwargs={'arg1':42, 'arg2':37}))
-
- def test_multiple_namespace_pattern(self):
- "Namespaces can be embedded"
- self.assertEquals('/ns-included1/test3/inner/', reverse('inc-ns1:test-ns3:urlobject-view'))
- self.assertEquals('/ns-included1/test3/inner/37/42/', reverse('inc-ns1:test-ns3:urlobject-view', args=[37,42]))
- self.assertEquals('/ns-included1/test3/inner/42/37/', reverse('inc-ns1:test-ns3:urlobject-view', kwargs={'arg1':42, 'arg2':37}))
-
- def test_app_lookup_object(self):
- "A default application namespace can be used for lookup"
- self.assertEquals('/default/inner/', reverse('testapp:urlobject-view'))
- self.assertEquals('/default/inner/37/42/', reverse('testapp:urlobject-view', args=[37,42]))
- self.assertEquals('/default/inner/42/37/', reverse('testapp:urlobject-view', kwargs={'arg1':42, 'arg2':37}))
-
- def test_app_lookup_object_with_default(self):
- "A default application namespace is sensitive to the 'current' app can be used for lookup"
- self.assertEquals('/included/test3/inner/', reverse('testapp:urlobject-view', current_app='test-ns3'))
- self.assertEquals('/included/test3/inner/37/42/', reverse('testapp:urlobject-view', args=[37,42], current_app='test-ns3'))
- self.assertEquals('/included/test3/inner/42/37/', reverse('testapp:urlobject-view', kwargs={'arg1':42, 'arg2':37}, current_app='test-ns3'))
-
- def test_app_lookup_object_without_default(self):
- "An application namespace without a default is sensitive to the 'current' app can be used for lookup"
- self.assertEquals('/other2/inner/', reverse('nodefault:urlobject-view'))
- self.assertEquals('/other2/inner/37/42/', reverse('nodefault:urlobject-view', args=[37,42]))
- self.assertEquals('/other2/inner/42/37/', reverse('nodefault:urlobject-view', kwargs={'arg1':42, 'arg2':37}))
-
- self.assertEquals('/other1/inner/', reverse('nodefault:urlobject-view', current_app='other-ns1'))
- self.assertEquals('/other1/inner/37/42/', reverse('nodefault:urlobject-view', args=[37,42], current_app='other-ns1'))
- self.assertEquals('/other1/inner/42/37/', reverse('nodefault:urlobject-view', kwargs={'arg1':42, 'arg2':37}, current_app='other-ns1'))
-
-class RequestURLconfTests(TestCase):
- def setUp(self):
- self.root_urlconf = settings.ROOT_URLCONF
- self.middleware_classes = settings.MIDDLEWARE_CLASSES
- settings.ROOT_URLCONF = urlconf_outer.__name__
-
- def tearDown(self):
- settings.ROOT_URLCONF = self.root_urlconf
- settings.MIDDLEWARE_CLASSES = self.middleware_classes
-
- def test_urlconf(self):
- response = self.client.get('/test/me/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'outer:/test/me/,'
- 'inner:/inner_urlconf/second_test/')
- response = self.client.get('/inner_urlconf/second_test/')
- self.assertEqual(response.status_code, 200)
- response = self.client.get('/second_test/')
- self.assertEqual(response.status_code, 404)
-
- def test_urlconf_overridden(self):
- settings.MIDDLEWARE_CLASSES += (
- '%s.ChangeURLconfMiddleware' % middleware.__name__,
- )
- response = self.client.get('/test/me/')
- self.assertEqual(response.status_code, 404)
- response = self.client.get('/inner_urlconf/second_test/')
- self.assertEqual(response.status_code, 404)
- response = self.client.get('/second_test/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.content, 'outer:,inner:/second_test/')
-
- def test_urlconf_overridden_with_null(self):
- settings.MIDDLEWARE_CLASSES += (
- '%s.NullChangeURLconfMiddleware' % middleware.__name__,
- )
- self.assertRaises(ImproperlyConfigured, self.client.get, '/test/me/')
-
-class ErrorHandlerResolutionTests(TestCase):
- """Tests for handler404 and handler500"""
-
- def setUp(self):
- urlconf = 'regressiontests.urlpatterns_reverse.urls_error_handlers'
- urlconf_callables = 'regressiontests.urlpatterns_reverse.urls_error_handlers_callables'
- self.resolver = RegexURLResolver(r'^$', urlconf)
- self.callable_resolver = RegexURLResolver(r'^$', urlconf_callables)
-
- def test_named_handlers(self):
- from views import empty_view
- handler = (empty_view, {})
- self.assertEqual(self.resolver.resolve404(), handler)
- self.assertEqual(self.resolver.resolve500(), handler)
-
- def test_callable_handers(self):
- from views import empty_view
- handler = (empty_view, {})
- self.assertEqual(self.callable_resolver.resolve404(), handler)
- self.assertEqual(self.callable_resolver.resolve500(), handler)
-
-class NoRootUrlConfTests(TestCase):
- """Tests for handler404 and handler500 if urlconf is None"""
- urls = None
-
- def test_no_handler_exception(self):
- self.assertRaises(ImproperlyConfigured, self.client.get, '/test/me/')
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_inner.py b/parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_inner.py
deleted file mode 100644
index d188e06..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_inner.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.conf.urls.defaults import *
-from django.template import Template, Context
-from django.http import HttpResponse
-
-def inner_view(request):
- content = Template('{% url outer as outer_url %}outer:{{ outer_url }},'
- '{% url inner as inner_url %}inner:{{ inner_url }}').render(Context())
- return HttpResponse(content)
-
-urlpatterns = patterns('',
- url(r'^second_test/$', inner_view, name='inner'),
-) \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_outer.py b/parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_outer.py
deleted file mode 100644
index 506e036..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/urlconf_outer.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.conf.urls.defaults import *
-
-import urlconf_inner
-
-
-urlpatterns = patterns('',
- url(r'^test/me/$', urlconf_inner.inner_view, name='outer'),
- url(r'^inner_urlconf/', include(urlconf_inner.__name__))
-) \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/urls.py b/parts/django/tests/regressiontests/urlpatterns_reverse/urls.py
deleted file mode 100644
index c603c02..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/urls.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from django.conf.urls.defaults import *
-from views import empty_view, absolute_kwargs_view
-
-other_patterns = patterns('',
- url(r'non_path_include/$', empty_view, name='non_path_include'),
-)
-
-urlpatterns = patterns('',
- url(r'^places/(\d+)/$', empty_view, name='places'),
- url(r'^places?/$', empty_view, name="places?"),
- url(r'^places+/$', empty_view, name="places+"),
- url(r'^places*/$', empty_view, name="places*"),
- url(r'^(?:places/)?$', empty_view, name="places2?"),
- url(r'^(?:places/)+$', empty_view, name="places2+"),
- url(r'^(?:places/)*$', empty_view, name="places2*"),
- url(r'^places/(\d+|[a-z_]+)/', empty_view, name="places3"),
- url(r'^places/(?P<id>\d+)/$', empty_view, name="places4"),
- url(r'^people/(?P<name>\w+)/$', empty_view, name="people"),
- url(r'^people/(?:name/)', empty_view, name="people2"),
- url(r'^people/(?:name/(\w+)/)?', empty_view, name="people2a"),
- url(r'^optional/(?P<name>.*)/(?:.+/)?', empty_view, name="optional"),
- url(r'^hardcoded/$', 'hardcoded/', empty_view, name="hardcoded"),
- url(r'^hardcoded/doc\.pdf$', empty_view, name="hardcoded2"),
- url(r'^people/(?P<state>\w\w)/(?P<name>\w+)/$', empty_view, name="people3"),
- url(r'^people/(?P<state>\w\w)/(?P<name>\d)/$', empty_view, name="people4"),
- url(r'^people/((?P<state>\w\w)/test)?/(\w+)/$', empty_view, name="people6"),
- url(r'^character_set/[abcdef0-9]/$', empty_view, name="range"),
- url(r'^character_set/[\w]/$', empty_view, name="range2"),
- url(r'^price/\$(\d+)/$', empty_view, name="price"),
- url(r'^price/[$](\d+)/$', empty_view, name="price2"),
- url(r'^price/[\$](\d+)/$', empty_view, name="price3"),
- url(r'^product/(?P<product>\w+)\+\(\$(?P<price>\d+(\.\d+)?)\)/$',
- empty_view, name="product"),
- url(r'^headlines/(?P<year>\d+)\.(?P<month>\d+)\.(?P<day>\d+)/$', empty_view,
- name="headlines"),
- url(r'^windows_path/(?P<drive_name>[A-Z]):\\(?P<path>.+)/$', empty_view,
- name="windows"),
- url(r'^special_chars/(.+)/$', empty_view, name="special"),
- url(r'^(?P<name>.+)/\d+/$', empty_view, name="mixed"),
- url(r'^repeats/a{1,2}/$', empty_view, name="repeats"),
- url(r'^repeats/a{2,4}/$', empty_view, name="repeats2"),
- url(r'^repeats/a{2}/$', empty_view, name="repeats3"),
- url(r'^(?i)CaseInsensitive/(\w+)', empty_view, name="insensitive"),
- url(r'^test/1/?', empty_view, name="test"),
- url(r'^(?i)test/2/?$', empty_view, name="test2"),
- url(r'^outer/(?P<outer>\d+)/',
- include('regressiontests.urlpatterns_reverse.included_urls')),
- url('', include('regressiontests.urlpatterns_reverse.extra_urls')),
-
- # This is non-reversible, but we shouldn't blow up when parsing it.
- url(r'^(?:foo|bar)(\w+)/$', empty_view, name="disjunction"),
-
- # Regression views for #9038. See tests for more details
- url(r'arg_view/$', 'kwargs_view'),
- url(r'arg_view/(?P<arg1>\d+)/$', 'kwargs_view'),
- url(r'absolute_arg_view/(?P<arg1>\d+)/$', absolute_kwargs_view),
- url(r'absolute_arg_view/$', absolute_kwargs_view),
-
- url('^includes/', include(other_patterns)),
-
-)
-
-
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers.py b/parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers.py
deleted file mode 100644
index c2e0d32..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Used by the ErrorHandlerResolutionTests test case.
-
-from django.conf.urls.defaults import patterns
-
-urlpatterns = patterns('')
-
-handler404 = 'regressiontests.urlpatterns_reverse.views.empty_view'
-handler500 = 'regressiontests.urlpatterns_reverse.views.empty_view'
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers_callables.py b/parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers_callables.py
deleted file mode 100644
index 00f25a7..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/urls_error_handlers_callables.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Used by the ErrorHandlerResolutionTests test case.
-
-from django.conf.urls.defaults import patterns
-from views import empty_view
-
-urlpatterns = patterns('')
-
-handler404 = empty_view
-handler500 = empty_view
diff --git a/parts/django/tests/regressiontests/urlpatterns_reverse/views.py b/parts/django/tests/regressiontests/urlpatterns_reverse/views.py
deleted file mode 100644
index 99c00bd..0000000
--- a/parts/django/tests/regressiontests/urlpatterns_reverse/views.py
+++ /dev/null
@@ -1,8 +0,0 @@
-def empty_view(request, *args, **kwargs):
- pass
-
-def kwargs_view(request, arg1=1, arg2=2):
- pass
-
-def absolute_kwargs_view(request, arg1=1, arg2=2):
- pass
diff --git a/parts/django/tests/regressiontests/utils/__init__.py b/parts/django/tests/regressiontests/utils/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/utils/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/utils/checksums.py b/parts/django/tests/regressiontests/utils/checksums.py
deleted file mode 100644
index cee6dca..0000000
--- a/parts/django/tests/regressiontests/utils/checksums.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import unittest
-
-from django.utils import checksums
-
-class TestUtilsChecksums(unittest.TestCase):
-
- def check_output(self, function, value, output=None):
- """
- Check that function(value) equals output. If output is None,
- check that function(value) equals value.
- """
- if output is None:
- output = value
- self.assertEqual(function(value), output)
-
- def test_luhn(self):
- f = checksums.luhn
- items = (
- (4111111111111111, True), ('4111111111111111', True),
- (4222222222222, True), (378734493671000, True),
- (5424000000000015, True), (5555555555554444, True),
- (1008, True), ('0000001008', True), ('000000001008', True),
- (4012888888881881, True), (1234567890123456789012345678909, True),
- (4111111111211111, False), (42222222222224, False),
- (100, False), ('100', False), ('0000100', False),
- ('abc', False), (None, False), (object(), False),
- )
- for value, output in items:
- self.check_output(f, value, output)
diff --git a/parts/django/tests/regressiontests/utils/datastructures.py b/parts/django/tests/regressiontests/utils/datastructures.py
deleted file mode 100644
index a41281c..0000000
--- a/parts/django/tests/regressiontests/utils/datastructures.py
+++ /dev/null
@@ -1,256 +0,0 @@
-"""
-Tests for stuff in django.utils.datastructures.
-"""
-import pickle
-import unittest
-
-from django.utils.datastructures import *
-
-
-class DatastructuresTestCase(unittest.TestCase):
- def assertRaisesErrorWithMessage(self, error, message, callable,
- *args, **kwargs):
- self.assertRaises(error, callable, *args, **kwargs)
- try:
- callable(*args, **kwargs)
- except error, e:
- self.assertEqual(message, str(e))
-
-
-class SortedDictTests(DatastructuresTestCase):
- def setUp(self):
- self.d1 = SortedDict()
- self.d1[7] = 'seven'
- self.d1[1] = 'one'
- self.d1[9] = 'nine'
-
- self.d2 = SortedDict()
- self.d2[1] = 'one'
- self.d2[9] = 'nine'
- self.d2[0] = 'nil'
- self.d2[7] = 'seven'
-
- def test_basic_methods(self):
- self.assertEquals(self.d1.keys(), [7, 1, 9])
- self.assertEquals(self.d1.values(), ['seven', 'one', 'nine'])
- self.assertEquals(self.d1.items(), [(7, 'seven'), (1, 'one'), (9, 'nine')])
-
- def test_overwrite_ordering(self):
- """ Overwriting an item keeps it's place. """
- self.d1[1] = 'ONE'
- self.assertEquals(self.d1.values(), ['seven', 'ONE', 'nine'])
-
- def test_append_items(self):
- """ New items go to the end. """
- self.d1[0] = 'nil'
- self.assertEquals(self.d1.keys(), [7, 1, 9, 0])
-
- def test_delete_and_insert(self):
- """
- Deleting an item, then inserting the same key again will place it
- at the end.
- """
- del self.d2[7]
- self.assertEquals(self.d2.keys(), [1, 9, 0])
- self.d2[7] = 'lucky number 7'
- self.assertEquals(self.d2.keys(), [1, 9, 0, 7])
-
- def test_change_keys(self):
- """
- Changing the keys won't do anything, it's only a copy of the
- keys dict.
- """
- k = self.d2.keys()
- k.remove(9)
- self.assertEquals(self.d2.keys(), [1, 9, 0, 7])
-
- def test_init_keys(self):
- """
- Initialising a SortedDict with two keys will just take the first one.
-
- A real dict will actually take the second value so we will too, but
- we'll keep the ordering from the first key found.
- """
- tuples = ((2, 'two'), (1, 'one'), (2, 'second-two'))
- d = SortedDict(tuples)
-
- self.assertEquals(d.keys(), [2, 1])
-
- real_dict = dict(tuples)
- self.assertEquals(sorted(real_dict.values()), ['one', 'second-two'])
-
- # Here the order of SortedDict values *is* what we are testing
- self.assertEquals(d.values(), ['second-two', 'one'])
-
- def test_overwrite(self):
- self.d1[1] = 'not one'
- self.assertEqual(self.d1[1], 'not one')
- self.assertEqual(self.d1.keys(), self.d1.copy().keys())
-
- def test_append(self):
- self.d1[13] = 'thirteen'
- self.assertEquals(
- repr(self.d1),
- "{7: 'seven', 1: 'one', 9: 'nine', 13: 'thirteen'}"
- )
-
- def test_pop(self):
- self.assertEquals(self.d1.pop(1, 'missing'), 'one')
- self.assertEquals(self.d1.pop(1, 'missing'), 'missing')
-
- # We don't know which item will be popped in popitem(), so we'll
- # just check that the number of keys has decreased.
- l = len(self.d1)
- self.d1.popitem()
- self.assertEquals(l - len(self.d1), 1)
-
- def test_dict_equality(self):
- d = SortedDict((i, i) for i in xrange(3))
- self.assertEquals(d, {0: 0, 1: 1, 2: 2})
-
- def test_tuple_init(self):
- d = SortedDict(((1, "one"), (0, "zero"), (2, "two")))
- self.assertEquals(repr(d), "{1: 'one', 0: 'zero', 2: 'two'}")
-
- def test_pickle(self):
- self.assertEquals(
- pickle.loads(pickle.dumps(self.d1, 2)),
- {7: 'seven', 1: 'one', 9: 'nine'}
- )
-
- def test_clear(self):
- self.d1.clear()
- self.assertEquals(self.d1, {})
- self.assertEquals(self.d1.keyOrder, [])
-
-class MergeDictTests(DatastructuresTestCase):
-
- def test_simple_mergedict(self):
- d1 = {'chris':'cool', 'camri':'cute', 'cotton':'adorable',
- 'tulip':'snuggable', 'twoofme':'firstone'}
-
- d2 = {'chris2':'cool2', 'camri2':'cute2', 'cotton2':'adorable2',
- 'tulip2':'snuggable2'}
-
- d3 = {'chris3':'cool3', 'camri3':'cute3', 'cotton3':'adorable3',
- 'tulip3':'snuggable3'}
-
- d4 = {'twoofme': 'secondone'}
-
- md = MergeDict(d1, d2, d3)
-
- self.assertEquals(md['chris'], 'cool')
- self.assertEquals(md['camri'], 'cute')
- self.assertEquals(md['twoofme'], 'firstone')
-
- md2 = md.copy()
- self.assertEquals(md2['chris'], 'cool')
-
- def test_mergedict_merges_multivaluedict(self):
- """ MergeDict can merge MultiValueDicts """
-
- multi1 = MultiValueDict({'key1': ['value1'],
- 'key2': ['value2', 'value3']})
-
- multi2 = MultiValueDict({'key2': ['value4'],
- 'key4': ['value5', 'value6']})
-
- mm = MergeDict(multi1, multi2)
-
- # Although 'key2' appears in both dictionaries,
- # only the first value is used.
- self.assertEquals(mm.getlist('key2'), ['value2', 'value3'])
- self.assertEquals(mm.getlist('key4'), ['value5', 'value6'])
- self.assertEquals(mm.getlist('undefined'), [])
-
- self.assertEquals(sorted(mm.keys()), ['key1', 'key2', 'key4'])
- self.assertEquals(len(mm.values()), 3)
-
- self.assertTrue('value1' in mm.values())
-
- self.assertEquals(sorted(mm.items(), key=lambda k: k[0]),
- [('key1', 'value1'), ('key2', 'value3'),
- ('key4', 'value6')])
-
- self.assertEquals([(k,mm.getlist(k)) for k in sorted(mm)],
- [('key1', ['value1']),
- ('key2', ['value2', 'value3']),
- ('key4', ['value5', 'value6'])])
-
-class MultiValueDictTests(DatastructuresTestCase):
-
- def test_multivaluedict(self):
- d = MultiValueDict({'name': ['Adrian', 'Simon'],
- 'position': ['Developer']})
-
- self.assertEquals(d['name'], 'Simon')
- self.assertEquals(d.get('name'), 'Simon')
- self.assertEquals(d.getlist('name'), ['Adrian', 'Simon'])
- self.assertEquals(list(d.iteritems()),
- [('position', 'Developer'), ('name', 'Simon')])
-
- self.assertEquals(list(d.iterlists()),
- [('position', ['Developer']),
- ('name', ['Adrian', 'Simon'])])
-
- # MultiValueDictKeyError: "Key 'lastname' not found in
- # <MultiValueDict: {'position': ['Developer'],
- # 'name': ['Adrian', 'Simon']}>"
- self.assertRaisesErrorWithMessage(MultiValueDictKeyError,
- '"Key \'lastname\' not found in <MultiValueDict: {\'position\':'\
- ' [\'Developer\'], \'name\': [\'Adrian\', \'Simon\']}>"',
- d.__getitem__, 'lastname')
-
- self.assertEquals(d.get('lastname'), None)
- self.assertEquals(d.get('lastname', 'nonexistent'), 'nonexistent')
- self.assertEquals(d.getlist('lastname'), [])
-
- d.setlist('lastname', ['Holovaty', 'Willison'])
- self.assertEquals(d.getlist('lastname'), ['Holovaty', 'Willison'])
- self.assertEquals(d.values(), ['Developer', 'Simon', 'Willison'])
- self.assertEquals(list(d.itervalues()),
- ['Developer', 'Simon', 'Willison'])
-
-
-class DotExpandedDictTests(DatastructuresTestCase):
-
- def test_dotexpandeddict(self):
-
- d = DotExpandedDict({'person.1.firstname': ['Simon'],
- 'person.1.lastname': ['Willison'],
- 'person.2.firstname': ['Adrian'],
- 'person.2.lastname': ['Holovaty']})
-
- self.assertEquals(d['person']['1']['lastname'], ['Willison'])
- self.assertEquals(d['person']['2']['lastname'], ['Holovaty'])
- self.assertEquals(d['person']['2']['firstname'], ['Adrian'])
-
-
-class ImmutableListTests(DatastructuresTestCase):
-
- def test_sort(self):
- d = ImmutableList(range(10))
-
- # AttributeError: ImmutableList object is immutable.
- self.assertRaisesErrorWithMessage(AttributeError,
- 'ImmutableList object is immutable.', d.sort)
-
- self.assertEquals(repr(d), '(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)')
-
- def test_custom_warning(self):
- d = ImmutableList(range(10), warning="Object is immutable!")
-
- self.assertEquals(d[1], 1)
-
- # AttributeError: Object is immutable!
- self.assertRaisesErrorWithMessage(AttributeError,
- 'Object is immutable!', d.__setitem__, 1, 'test')
-
-
-class DictWrapperTests(DatastructuresTestCase):
-
- def test_dictwrapper(self):
- f = lambda x: "*%s" % x
- d = DictWrapper({'a': 'a'}, f, 'xx_')
- self.assertEquals("Normal: %(a)s. Modified: %(xx_a)s" % d,
- 'Normal: a. Modified: *a')
diff --git a/parts/django/tests/regressiontests/utils/dateformat.py b/parts/django/tests/regressiontests/utils/dateformat.py
deleted file mode 100644
index b312c8d..0000000
--- a/parts/django/tests/regressiontests/utils/dateformat.py
+++ /dev/null
@@ -1,129 +0,0 @@
-from datetime import datetime, date
-import os
-import time
-import unittest
-
-from django.utils.dateformat import format
-from django.utils import dateformat, translation
-from django.utils.tzinfo import FixedOffset, LocalTimezone
-
-class DateFormatTests(unittest.TestCase):
- def setUp(self):
- self.old_TZ = os.environ.get('TZ')
- os.environ['TZ'] = 'Europe/Copenhagen'
- translation.activate('en-us')
-
- try:
- # Check if a timezone has been set
- time.tzset()
- self.tz_tests = True
- except AttributeError:
- # No timezone available. Don't run the tests that require a TZ
- self.tz_tests = False
-
- def tearDown(self):
- if self.old_TZ is None:
- del os.environ['TZ']
- else:
- os.environ['TZ'] = self.old_TZ
-
- # Cleanup - force re-evaluation of TZ environment variable.
- if self.tz_tests:
- time.tzset()
-
- def test_date(self):
- d = date(2009, 5, 16)
- self.assertEquals(date.fromtimestamp(int(format(d, 'U'))), d)
-
- def test_naive_datetime(self):
- dt = datetime(2009, 5, 16, 5, 30, 30)
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U'))), dt)
-
- def test_datetime_with_local_tzinfo(self):
- ltz = LocalTimezone(datetime.now())
- dt = datetime(2009, 5, 16, 5, 30, 30, tzinfo=ltz)
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U')), ltz), dt)
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U'))), dt.replace(tzinfo=None))
-
- def test_datetime_with_tzinfo(self):
- tz = FixedOffset(-510)
- ltz = LocalTimezone(datetime.now())
- dt = datetime(2009, 5, 16, 5, 30, 30, tzinfo=tz)
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U')), tz), dt)
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U')), ltz), dt)
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U'))), dt.astimezone(ltz).replace(tzinfo=None))
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U')), tz).utctimetuple(), dt.utctimetuple())
- self.assertEquals(datetime.fromtimestamp(int(format(dt, 'U')), ltz).utctimetuple(), dt.utctimetuple())
-
- def test_epoch(self):
- utc = FixedOffset(0)
- udt = datetime(1970, 1, 1, tzinfo=utc)
- self.assertEquals(format(udt, 'U'), u'0')
-
- def test_empty_format(self):
- my_birthday = datetime(1979, 7, 8, 22, 00)
-
- self.assertEquals(dateformat.format(my_birthday, ''), u'')
-
- def test_am_pm(self):
- my_birthday = datetime(1979, 7, 8, 22, 00)
-
- self.assertEquals(dateformat.format(my_birthday, 'a'), u'p.m.')
-
- def test_date_formats(self):
- my_birthday = datetime(1979, 7, 8, 22, 00)
- timestamp = datetime(2008, 5, 19, 11, 45, 23, 123456)
-
- self.assertEquals(dateformat.format(my_birthday, 'A'), u'PM')
- self.assertEquals(dateformat.format(timestamp, 'c'), u'2008-05-19T11:45:23.123456')
- self.assertEquals(dateformat.format(my_birthday, 'd'), u'08')
- self.assertEquals(dateformat.format(my_birthday, 'j'), u'8')
- self.assertEquals(dateformat.format(my_birthday, 'l'), u'Sunday')
- self.assertEquals(dateformat.format(my_birthday, 'L'), u'False')
- self.assertEquals(dateformat.format(my_birthday, 'm'), u'07')
- self.assertEquals(dateformat.format(my_birthday, 'M'), u'Jul')
- self.assertEquals(dateformat.format(my_birthday, 'b'), u'jul')
- self.assertEquals(dateformat.format(my_birthday, 'n'), u'7')
- self.assertEquals(dateformat.format(my_birthday, 'N'), u'July')
-
- def test_time_formats(self):
- my_birthday = datetime(1979, 7, 8, 22, 00)
-
- self.assertEquals(dateformat.format(my_birthday, 'P'), u'10 p.m.')
- self.assertEquals(dateformat.format(my_birthday, 's'), u'00')
- self.assertEquals(dateformat.format(my_birthday, 'S'), u'th')
- self.assertEquals(dateformat.format(my_birthday, 't'), u'31')
- self.assertEquals(dateformat.format(my_birthday, 'w'), u'0')
- self.assertEquals(dateformat.format(my_birthday, 'W'), u'27')
- self.assertEquals(dateformat.format(my_birthday, 'y'), u'79')
- self.assertEquals(dateformat.format(my_birthday, 'Y'), u'1979')
- self.assertEquals(dateformat.format(my_birthday, 'z'), u'189')
-
- def test_dateformat(self):
- my_birthday = datetime(1979, 7, 8, 22, 00)
-
- self.assertEquals(dateformat.format(my_birthday, r'Y z \C\E\T'), u'1979 189 CET')
-
- self.assertEquals(dateformat.format(my_birthday, r'jS o\f F'), u'8th of July')
-
- def test_futuredates(self):
- the_future = datetime(2100, 10, 25, 0, 00)
- self.assertEquals(dateformat.format(the_future, r'Y'), u'2100')
-
- def test_timezones(self):
- my_birthday = datetime(1979, 7, 8, 22, 00)
- summertime = datetime(2005, 10, 30, 1, 00)
- wintertime = datetime(2005, 10, 30, 4, 00)
- timestamp = datetime(2008, 5, 19, 11, 45, 23, 123456)
-
- if self.tz_tests:
- self.assertEquals(dateformat.format(my_birthday, 'O'), u'+0100')
- self.assertEquals(dateformat.format(my_birthday, 'r'), u'Sun, 8 Jul 1979 22:00:00 +0100')
- self.assertEquals(dateformat.format(my_birthday, 'T'), u'CET')
- self.assertEquals(dateformat.format(my_birthday, 'U'), u'300315600')
- self.assertEquals(dateformat.format(timestamp, 'u'), u'123456')
- self.assertEquals(dateformat.format(my_birthday, 'Z'), u'3600')
- self.assertEquals(dateformat.format(summertime, 'I'), u'1')
- self.assertEquals(dateformat.format(summertime, 'O'), u'+0200')
- self.assertEquals(dateformat.format(wintertime, 'I'), u'0')
- self.assertEquals(dateformat.format(wintertime, 'O'), u'+0100')
diff --git a/parts/django/tests/regressiontests/utils/datetime_safe.py b/parts/django/tests/regressiontests/utils/datetime_safe.py
deleted file mode 100644
index 458a6b7..0000000
--- a/parts/django/tests/regressiontests/utils/datetime_safe.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import unittest
-
-from datetime import date as original_date, datetime as original_datetime
-from django.utils.datetime_safe import date, datetime
-
-class DatetimeTests(unittest.TestCase):
-
- def setUp(self):
- self.just_safe = (1900, 1, 1)
- self.just_unsafe = (1899, 12, 31, 23, 59, 59)
- self.really_old = (20, 1, 1)
- self.more_recent = (2006, 1, 1)
-
- def test_compare_datetimes(self):
- self.assertEqual(original_datetime(*self.more_recent), datetime(*self.more_recent))
- self.assertEqual(original_datetime(*self.really_old), datetime(*self.really_old))
- self.assertEqual(original_date(*self.more_recent), date(*self.more_recent))
- self.assertEqual(original_date(*self.really_old), date(*self.really_old))
-
- self.assertEqual(original_date(*self.just_safe).strftime('%Y-%m-%d'), date(*self.just_safe).strftime('%Y-%m-%d'))
- self.assertEqual(original_datetime(*self.just_safe).strftime('%Y-%m-%d'), datetime(*self.just_safe).strftime('%Y-%m-%d'))
-
- def test_safe_strftime(self):
- self.assertEquals(date(*self.just_unsafe[:3]).strftime('%Y-%m-%d (weekday %w)'), '1899-12-31 (weekday 0)')
- self.assertEquals(date(*self.just_safe).strftime('%Y-%m-%d (weekday %w)'), '1900-01-01 (weekday 1)')
-
- self.assertEquals(datetime(*self.just_unsafe).strftime('%Y-%m-%d %H:%M:%S (weekday %w)'), '1899-12-31 23:59:59 (weekday 0)')
- self.assertEquals(datetime(*self.just_safe).strftime('%Y-%m-%d %H:%M:%S (weekday %w)'), '1900-01-01 00:00:00 (weekday 1)')
-
- # %y will error before this date
- self.assertEquals(date(*self.just_safe).strftime('%y'), '00')
- self.assertEquals(datetime(*self.just_safe).strftime('%y'), '00')
-
- self.assertEquals(date(1850, 8, 2).strftime("%Y/%m/%d was a %A"), '1850/08/02 was a Friday')
-
- def test_zero_padding(self):
- """
- Regression for #12524
-
- Check that pre-1000AD dates are padded with zeros if necessary
- """
- self.assertEquals(date(1, 1, 1).strftime("%Y/%m/%d was a %A"), '0001/01/01 was a Monday')
diff --git a/parts/django/tests/regressiontests/utils/decorators.py b/parts/django/tests/regressiontests/utils/decorators.py
deleted file mode 100644
index ca9214f..0000000
--- a/parts/django/tests/regressiontests/utils/decorators.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from django.test import TestCase
-
-class DecoratorFromMiddlewareTests(TestCase):
- """
- Tests for view decorators created using
- ``django.utils.decorators.decorator_from_middleware``.
- """
-
- def test_process_view_middleware(self):
- """
- Test a middleware that implements process_view.
- """
- self.client.get('/utils/xview/')
-
- def test_callable_process_view_middleware(self):
- """
- Test a middleware that implements process_view, operating on a callable class.
- """
- self.client.get('/utils/class_xview/')
diff --git a/parts/django/tests/regressiontests/utils/eggs/test_egg.egg b/parts/django/tests/regressiontests/utils/eggs/test_egg.egg
deleted file mode 100644
index 9b08cc1..0000000
--- a/parts/django/tests/regressiontests/utils/eggs/test_egg.egg
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/utils/feedgenerator.py b/parts/django/tests/regressiontests/utils/feedgenerator.py
deleted file mode 100644
index 9085d41..0000000
--- a/parts/django/tests/regressiontests/utils/feedgenerator.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import datetime
-import unittest
-
-from django.utils import feedgenerator, tzinfo
-
-class FeedgeneratorTest(unittest.TestCase):
- """
- Tests for the low-level syndication feed framework.
- """
-
- def test_get_tag_uri(self):
- """
- Test get_tag_uri() correctly generates TagURIs.
- """
- self.assertEqual(
- feedgenerator.get_tag_uri('http://example.org/foo/bar#headline', datetime.date(2004, 10, 25)),
- u'tag:example.org,2004-10-25:/foo/bar/headline')
-
- def test_get_tag_uri_with_port(self):
- """
- Test that get_tag_uri() correctly generates TagURIs from URLs with port
- numbers.
- """
- self.assertEqual(
- feedgenerator.get_tag_uri('http://www.example.org:8000/2008/11/14/django#headline', datetime.datetime(2008, 11, 14, 13, 37, 0)),
- u'tag:www.example.org,2008-11-14:/2008/11/14/django/headline')
-
- def test_rfc2822_date(self):
- """
- Test rfc2822_date() correctly formats datetime objects.
- """
- self.assertEqual(
- feedgenerator.rfc2822_date(datetime.datetime(2008, 11, 14, 13, 37, 0)),
- "Fri, 14 Nov 2008 13:37:00 -0000"
- )
-
- def test_rfc2822_date_with_timezone(self):
- """
- Test rfc2822_date() correctly formats datetime objects with tzinfo.
- """
- self.assertEqual(
- feedgenerator.rfc2822_date(datetime.datetime(2008, 11, 14, 13, 37, 0, tzinfo=tzinfo.FixedOffset(datetime.timedelta(minutes=60)))),
- "Fri, 14 Nov 2008 13:37:00 +0100"
- )
-
- def test_rfc3339_date(self):
- """
- Test rfc3339_date() correctly formats datetime objects.
- """
- self.assertEqual(
- feedgenerator.rfc3339_date(datetime.datetime(2008, 11, 14, 13, 37, 0)),
- "2008-11-14T13:37:00Z"
- )
-
- def test_rfc3339_date_with_timezone(self):
- """
- Test rfc3339_date() correctly formats datetime objects with tzinfo.
- """
- self.assertEqual(
- feedgenerator.rfc3339_date(datetime.datetime(2008, 11, 14, 13, 37, 0, tzinfo=tzinfo.FixedOffset(datetime.timedelta(minutes=120)))),
- "2008-11-14T13:37:00+02:00"
- )
-
diff --git a/parts/django/tests/regressiontests/utils/functional.py b/parts/django/tests/regressiontests/utils/functional.py
deleted file mode 100644
index 206a583..0000000
--- a/parts/django/tests/regressiontests/utils/functional.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import unittest
-
-from django.utils.functional import lazy
-
-
-class FunctionalTestCase(unittest.TestCase):
- def test_lazy(self):
- t = lazy(lambda: tuple(range(3)), list, tuple)
- for a, b in zip(t(), range(3)):
- self.assertEqual(a, b)
diff --git a/parts/django/tests/regressiontests/utils/html.py b/parts/django/tests/regressiontests/utils/html.py
deleted file mode 100644
index a9b0d33..0000000
--- a/parts/django/tests/regressiontests/utils/html.py
+++ /dev/null
@@ -1,111 +0,0 @@
-import unittest
-
-from django.utils import html
-
-class TestUtilsHtml(unittest.TestCase):
-
- def check_output(self, function, value, output=None):
- """
- Check that function(value) equals output. If output is None,
- check that function(value) equals value.
- """
- if output is None:
- output = value
- self.assertEqual(function(value), output)
-
- def test_escape(self):
- f = html.escape
- items = (
- ('&','&amp;'),
- ('<', '&lt;'),
- ('>', '&gt;'),
- ('"', '&quot;'),
- ("'", '&#39;'),
- )
- # Substitution patterns for testing the above items.
- patterns = ("%s", "asdf%sfdsa", "%s1", "1%sb")
- for value, output in items:
- for pattern in patterns:
- self.check_output(f, pattern % value, pattern % output)
- # Check repeated values.
- self.check_output(f, value * 2, output * 2)
- # Verify it doesn't double replace &.
- self.check_output(f, '<&', '&lt;&amp;')
-
- def test_linebreaks(self):
- f = html.linebreaks
- items = (
- ("para1\n\npara2\r\rpara3", "<p>para1</p>\n\n<p>para2</p>\n\n<p>para3</p>"),
- ("para1\nsub1\rsub2\n\npara2", "<p>para1<br />sub1<br />sub2</p>\n\n<p>para2</p>"),
- ("para1\r\n\r\npara2\rsub1\r\rpara4", "<p>para1</p>\n\n<p>para2<br />sub1</p>\n\n<p>para4</p>"),
- ("para1\tmore\n\npara2", "<p>para1\tmore</p>\n\n<p>para2</p>"),
- )
- for value, output in items:
- self.check_output(f, value, output)
-
- def test_strip_tags(self):
- f = html.strip_tags
- items = (
- ('<adf>a', 'a'),
- ('</adf>a', 'a'),
- ('<asdf><asdf>e', 'e'),
- ('<f', '<f'),
- ('</fe', '</fe'),
- ('<x>b<y>', 'b'),
- )
- for value, output in items:
- self.check_output(f, value, output)
-
- def test_strip_spaces_between_tags(self):
- f = html.strip_spaces_between_tags
- # Strings that should come out untouched.
- items = (' <adf>', '<adf> ', ' </adf> ', ' <f> x</f>')
- for value in items:
- self.check_output(f, value)
- # Strings that have spaces to strip.
- items = (
- ('<d> </d>', '<d></d>'),
- ('<p>hello </p>\n<p> world</p>', '<p>hello </p><p> world</p>'),
- ('\n<p>\t</p>\n<p> </p>\n', '\n<p></p><p></p>\n'),
- )
- for value, output in items:
- self.check_output(f, value, output)
-
- def test_strip_entities(self):
- f = html.strip_entities
- # Strings that should come out untouched.
- values = ("&", "&a", "&a", "a&#a")
- for value in values:
- self.check_output(f, value)
- # Valid entities that should be stripped from the patterns.
- entities = ("&#1;", "&#12;", "&a;", "&fdasdfasdfasdf;")
- patterns = (
- ("asdf %(entity)s ", "asdf "),
- ("%(entity)s%(entity)s", ""),
- ("&%(entity)s%(entity)s", "&"),
- ("%(entity)s3", "3"),
- )
- for entity in entities:
- for in_pattern, output in patterns:
- self.check_output(f, in_pattern % {'entity': entity}, output)
-
- def test_fix_ampersands(self):
- f = html.fix_ampersands
- # Strings without ampersands or with ampersands already encoded.
- values = ("a&#1;", "b", "&a;", "&amp; &x; ", "asdf")
- patterns = (
- ("%s", "%s"),
- ("&%s", "&amp;%s"),
- ("&%s&", "&amp;%s&amp;"),
- )
- for value in values:
- for in_pattern, out_pattern in patterns:
- self.check_output(f, in_pattern % value, out_pattern % value)
- # Strings with ampersands that need encoding.
- items = (
- ("&#;", "&amp;#;"),
- ("&#875 ;", "&amp;#875 ;"),
- ("&#4abc;", "&amp;#4abc;"),
- )
- for value, output in items:
- self.check_output(f, value, output)
diff --git a/parts/django/tests/regressiontests/utils/models.py b/parts/django/tests/regressiontests/utils/models.py
deleted file mode 100644
index 97a72ba..0000000
--- a/parts/django/tests/regressiontests/utils/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# Test runner needs a models.py file.
diff --git a/parts/django/tests/regressiontests/utils/module_loading.py b/parts/django/tests/regressiontests/utils/module_loading.py
deleted file mode 100644
index 8cbefbb..0000000
--- a/parts/django/tests/regressiontests/utils/module_loading.py
+++ /dev/null
@@ -1,114 +0,0 @@
-import os
-import sys
-import unittest
-from zipimport import zipimporter
-
-from django.utils.importlib import import_module
-from django.utils.module_loading import module_has_submodule
-
-class DefaultLoader(unittest.TestCase):
- def test_loader(self):
- "Normal module existence can be tested"
- test_module = import_module('regressiontests.utils.test_module')
-
- # An importable child
- self.assertTrue(module_has_submodule(test_module, 'good_module'))
- mod = import_module('regressiontests.utils.test_module.good_module')
- self.assertEqual(mod.content, 'Good Module')
-
- # A child that exists, but will generate an import error if loaded
- self.assertTrue(module_has_submodule(test_module, 'bad_module'))
- self.assertRaises(ImportError, import_module, 'regressiontests.utils.test_module.bad_module')
-
- # A child that doesn't exist
- self.assertFalse(module_has_submodule(test_module, 'no_such_module'))
- self.assertRaises(ImportError, import_module, 'regressiontests.utils.test_module.no_such_module')
-
-class EggLoader(unittest.TestCase):
- def setUp(self):
- self.old_path = sys.path[:]
- self.egg_dir = '%s/eggs' % os.path.dirname(__file__)
-
- def tearDown(self):
- sys.path = self.old_path
- sys.path_importer_cache.clear()
-
- sys.modules.pop('egg_module.sub1.sub2.bad_module', None)
- sys.modules.pop('egg_module.sub1.sub2.good_module', None)
- sys.modules.pop('egg_module.sub1.sub2', None)
- sys.modules.pop('egg_module.sub1', None)
- sys.modules.pop('egg_module.bad_module', None)
- sys.modules.pop('egg_module.good_module', None)
- sys.modules.pop('egg_module', None)
-
- def test_shallow_loader(self):
- "Module existence can be tested inside eggs"
- egg_name = '%s/test_egg.egg' % self.egg_dir
- sys.path.append(egg_name)
- egg_module = import_module('egg_module')
-
- # An importable child
- self.assertTrue(module_has_submodule(egg_module, 'good_module'))
- mod = import_module('egg_module.good_module')
- self.assertEqual(mod.content, 'Good Module')
-
- # A child that exists, but will generate an import error if loaded
- self.assertTrue(module_has_submodule(egg_module, 'bad_module'))
- self.assertRaises(ImportError, import_module, 'egg_module.bad_module')
-
- # A child that doesn't exist
- self.assertFalse(module_has_submodule(egg_module, 'no_such_module'))
- self.assertRaises(ImportError, import_module, 'egg_module.no_such_module')
-
- def test_deep_loader(self):
- "Modules deep inside an egg can still be tested for existence"
- egg_name = '%s/test_egg.egg' % self.egg_dir
- sys.path.append(egg_name)
- egg_module = import_module('egg_module.sub1.sub2')
-
- # An importable child
- self.assertTrue(module_has_submodule(egg_module, 'good_module'))
- mod = import_module('egg_module.sub1.sub2.good_module')
- self.assertEqual(mod.content, 'Deep Good Module')
-
- # A child that exists, but will generate an import error if loaded
- self.assertTrue(module_has_submodule(egg_module, 'bad_module'))
- self.assertRaises(ImportError, import_module, 'egg_module.sub1.sub2.bad_module')
-
- # A child that doesn't exist
- self.assertFalse(module_has_submodule(egg_module, 'no_such_module'))
- self.assertRaises(ImportError, import_module, 'egg_module.sub1.sub2.no_such_module')
-
-class TestFinder(object):
- def __init__(self, *args, **kwargs):
- self.importer = zipimporter(*args, **kwargs)
-
- def find_module(self, path):
- importer = self.importer.find_module(path)
- if importer is None:
- return
- return TestLoader(importer)
-
-class TestLoader(object):
- def __init__(self, importer):
- self.importer = importer
-
- def load_module(self, name):
- mod = self.importer.load_module(name)
- mod.__loader__ = self
- return mod
-
-class CustomLoader(EggLoader):
- """The Custom Loader test is exactly the same as the EggLoader, but
- it uses a custom defined Loader and Finder that is intentionally
- split into two classes. Although the EggLoader combines both functions
- into one class, this isn't required.
- """
- def setUp(self):
- super(CustomLoader, self).setUp()
- sys.path_hooks.insert(0, TestFinder)
- sys.path_importer_cache.clear()
-
- def tearDown(self):
- super(CustomLoader, self).tearDown()
- sys.path_hooks.pop(0)
diff --git a/parts/django/tests/regressiontests/utils/simplelazyobject.py b/parts/django/tests/regressiontests/utils/simplelazyobject.py
deleted file mode 100644
index 4a930dd..0000000
--- a/parts/django/tests/regressiontests/utils/simplelazyobject.py
+++ /dev/null
@@ -1,77 +0,0 @@
-import unittest
-
-import django.utils.copycompat as copy
-from django.utils.functional import SimpleLazyObject
-
-class _ComplexObject(object):
- def __init__(self, name):
- self.name = name
-
- def __eq__(self, other):
- return self.name == other.name
-
- def __hash__(self):
- return hash(self.name)
-
- def __str__(self):
- return "I am _ComplexObject(%r)" % self.name
-
- def __unicode__(self):
- return unicode(self.name)
-
- def __repr__(self):
- return "_ComplexObject(%r)" % self.name
-
-complex_object = lambda: _ComplexObject("joe")
-
-class TestUtilsSimpleLazyObject(unittest.TestCase):
- """
- Tests for SimpleLazyObject
- """
- # Note that concrete use cases for SimpleLazyObject are also found in the
- # auth context processor tests (unless the implementation of that function
- # is changed).
-
- def test_equality(self):
- self.assertEqual(complex_object(), SimpleLazyObject(complex_object))
- self.assertEqual(SimpleLazyObject(complex_object), complex_object())
-
- def test_hash(self):
- # hash() equality would not be true for many objects, but it should be
- # for _ComplexObject
- self.assertEqual(hash(complex_object()),
- hash(SimpleLazyObject(complex_object)))
-
- def test_repr(self):
- # For debugging, it will really confuse things if there is no clue that
- # SimpleLazyObject is actually a proxy object. So we don't
- # proxy __repr__
- self.assert_("SimpleLazyObject" in repr(SimpleLazyObject(complex_object)))
-
- def test_str(self):
- self.assertEqual("I am _ComplexObject('joe')", str(SimpleLazyObject(complex_object)))
-
- def test_unicode(self):
- self.assertEqual(u"joe", unicode(SimpleLazyObject(complex_object)))
-
- def test_class(self):
- # This is important for classes that use __class__ in things like
- # equality tests.
- self.assertEqual(_ComplexObject, SimpleLazyObject(complex_object).__class__)
-
- def test_deepcopy(self):
- # Check that we *can* do deep copy, and that it returns the right
- # objects.
-
- # First, for an unevaluated SimpleLazyObject
- s = SimpleLazyObject(complex_object)
- assert s._wrapped is None
- s2 = copy.deepcopy(s)
- assert s._wrapped is None # something has gone wrong is s is evaluated
- self.assertEqual(s2, complex_object())
-
- # Second, for an evaluated SimpleLazyObject
- name = s.name # evaluate
- assert s._wrapped is not None
- s3 = copy.deepcopy(s)
- self.assertEqual(s3, complex_object())
diff --git a/parts/django/tests/regressiontests/utils/termcolors.py b/parts/django/tests/regressiontests/utils/termcolors.py
deleted file mode 100644
index ccae32c..0000000
--- a/parts/django/tests/regressiontests/utils/termcolors.py
+++ /dev/null
@@ -1,149 +0,0 @@
-import unittest
-
-from django.utils.termcolors import parse_color_setting, PALETTES, DEFAULT_PALETTE, LIGHT_PALETTE, DARK_PALETTE, NOCOLOR_PALETTE
-
-class TermColorTests(unittest.TestCase):
-
- def test_empty_string(self):
- self.assertEquals(parse_color_setting(''), PALETTES[DEFAULT_PALETTE])
-
- def test_simple_palette(self):
- self.assertEquals(parse_color_setting('light'), PALETTES[LIGHT_PALETTE])
- self.assertEquals(parse_color_setting('dark'), PALETTES[DARK_PALETTE])
- self.assertEquals(parse_color_setting('nocolor'), None)
-
- def test_fg(self):
- self.assertEquals(parse_color_setting('error=green'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
-
- def test_fg_bg(self):
- self.assertEquals(parse_color_setting('error=green/blue'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'bg':'blue'}))
-
- def test_fg_opts(self):
- self.assertEquals(parse_color_setting('error=green,blink'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'opts': ('blink',)}))
- self.assertEquals(parse_color_setting('error=green,bold,blink'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'opts': ('blink','bold')}))
-
- def test_fg_bg_opts(self):
- self.assertEquals(parse_color_setting('error=green/blue,blink'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'bg':'blue', 'opts': ('blink',)}))
- self.assertEquals(parse_color_setting('error=green/blue,bold,blink'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'bg':'blue', 'opts': ('blink','bold')}))
-
- def test_override_palette(self):
- self.assertEquals(parse_color_setting('light;error=green'),
- dict(PALETTES[LIGHT_PALETTE],
- ERROR={'fg':'green'}))
-
- def test_override_nocolor(self):
- self.assertEquals(parse_color_setting('nocolor;error=green'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg': 'green'}))
-
- def test_reverse_override(self):
- self.assertEquals(parse_color_setting('error=green;light'), PALETTES[LIGHT_PALETTE])
-
- def test_multiple_roles(self):
- self.assertEquals(parse_color_setting('error=green;sql_field=blue'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'},
- SQL_FIELD={'fg':'blue'}))
-
- def test_override_with_multiple_roles(self):
- self.assertEquals(parse_color_setting('light;error=green;sql_field=blue'),
- dict(PALETTES[LIGHT_PALETTE],
- ERROR={'fg':'green'},
- SQL_FIELD={'fg':'blue'}))
-
- def test_empty_definition(self):
- self.assertEquals(parse_color_setting(';'), None)
- self.assertEquals(parse_color_setting('light;'), PALETTES[LIGHT_PALETTE])
- self.assertEquals(parse_color_setting(';;;'), None)
-
- def test_empty_options(self):
- self.assertEquals(parse_color_setting('error=green,'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
- self.assertEquals(parse_color_setting('error=green,,,'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
- self.assertEquals(parse_color_setting('error=green,,blink,,'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'opts': ('blink',)}))
-
- def test_bad_palette(self):
- self.assertEquals(parse_color_setting('unknown'), None)
-
- def test_bad_role(self):
- self.assertEquals(parse_color_setting('unknown='), None)
- self.assertEquals(parse_color_setting('unknown=green'), None)
- self.assertEquals(parse_color_setting('unknown=green;sql_field=blue'),
- dict(PALETTES[NOCOLOR_PALETTE],
- SQL_FIELD={'fg':'blue'}))
-
- def test_bad_color(self):
- self.assertEquals(parse_color_setting('error='), None)
- self.assertEquals(parse_color_setting('error=;sql_field=blue'),
- dict(PALETTES[NOCOLOR_PALETTE],
- SQL_FIELD={'fg':'blue'}))
- self.assertEquals(parse_color_setting('error=unknown'), None)
- self.assertEquals(parse_color_setting('error=unknown;sql_field=blue'),
- dict(PALETTES[NOCOLOR_PALETTE],
- SQL_FIELD={'fg':'blue'}))
- self.assertEquals(parse_color_setting('error=green/unknown'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
- self.assertEquals(parse_color_setting('error=green/blue/something'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'bg': 'blue'}))
- self.assertEquals(parse_color_setting('error=green/blue/something,blink'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'bg': 'blue', 'opts': ('blink',)}))
-
- def test_bad_option(self):
- self.assertEquals(parse_color_setting('error=green,unknown'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
- self.assertEquals(parse_color_setting('error=green,unknown,blink'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'opts': ('blink',)}))
-
- def test_role_case(self):
- self.assertEquals(parse_color_setting('ERROR=green'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
- self.assertEquals(parse_color_setting('eRrOr=green'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
-
- def test_color_case(self):
- self.assertEquals(parse_color_setting('error=GREEN'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
- self.assertEquals(parse_color_setting('error=GREEN/BLUE'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'bg':'blue'}))
-
- self.assertEquals(parse_color_setting('error=gReEn'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green'}))
- self.assertEquals(parse_color_setting('error=gReEn/bLuE'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'bg':'blue'}))
-
- def test_opts_case(self):
- self.assertEquals(parse_color_setting('error=green,BLINK'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'opts': ('blink',)}))
-
- self.assertEquals(parse_color_setting('error=green,bLiNk'),
- dict(PALETTES[NOCOLOR_PALETTE],
- ERROR={'fg':'green', 'opts': ('blink',)}))
diff --git a/parts/django/tests/regressiontests/utils/test_module/__init__.py b/parts/django/tests/regressiontests/utils/test_module/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/utils/test_module/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/utils/test_module/bad_module.py b/parts/django/tests/regressiontests/utils/test_module/bad_module.py
deleted file mode 100644
index cc0cd16..0000000
--- a/parts/django/tests/regressiontests/utils/test_module/bad_module.py
+++ /dev/null
@@ -1,3 +0,0 @@
-import a_package_name_that_does_not_exist
-
-content = 'Bad Module' \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/utils/test_module/good_module.py b/parts/django/tests/regressiontests/utils/test_module/good_module.py
deleted file mode 100644
index 0ca6898..0000000
--- a/parts/django/tests/regressiontests/utils/test_module/good_module.py
+++ /dev/null
@@ -1 +0,0 @@
-content = 'Good Module' \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/utils/tests.py b/parts/django/tests/regressiontests/utils/tests.py
deleted file mode 100644
index 6d3bbfa..0000000
--- a/parts/django/tests/regressiontests/utils/tests.py
+++ /dev/null
@@ -1,18 +0,0 @@
-"""
-Tests for django.utils.
-"""
-
-from dateformat import *
-from feedgenerator import *
-from module_loading import *
-from termcolors import *
-from html import *
-from checksums import *
-from text import *
-from simplelazyobject import *
-from decorators import *
-from functional import *
-from timesince import *
-from datastructures import *
-from tzinfo import *
-from datetime_safe import *
diff --git a/parts/django/tests/regressiontests/utils/text.py b/parts/django/tests/regressiontests/utils/text.py
deleted file mode 100644
index e7d2d38..0000000
--- a/parts/django/tests/regressiontests/utils/text.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import unittest
-
-from django.utils import text
-
-class TestUtilsText(unittest.TestCase):
- def test_truncate_words(self):
- self.assertEqual(u'The quick brown fox jumped over the lazy dog.',
- text.truncate_words(u'The quick brown fox jumped over the lazy dog.', 10))
- self.assertEqual(u'The quick brown fox ...',
- text.truncate_words('The quick brown fox jumped over the lazy dog.', 4))
- self.assertEqual(u'The quick brown fox ....',
- text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....'))
- self.assertEqual(u'<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>',
- text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 10))
- self.assertEqual(u'<p><strong><em>The quick brown fox ...</em></strong></p>',
- text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4))
- self.assertEqual(u'<p><strong><em>The quick brown fox ....</em></strong></p>',
- text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4, '....'))
- self.assertEqual(u'<p><strong><em>The quick brown fox</em></strong></p>',
- text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4, None))
diff --git a/parts/django/tests/regressiontests/utils/timesince.py b/parts/django/tests/regressiontests/utils/timesince.py
deleted file mode 100644
index 774aa3f..0000000
--- a/parts/django/tests/regressiontests/utils/timesince.py
+++ /dev/null
@@ -1,107 +0,0 @@
-import datetime
-import unittest
-
-from django.utils.timesince import timesince, timeuntil
-from django.utils.tzinfo import LocalTimezone, FixedOffset
-
-class TimesinceTests(unittest.TestCase):
-
- def setUp(self):
- self.t = datetime.datetime(2007, 8, 14, 13, 46, 0)
- self.onemicrosecond = datetime.timedelta(microseconds=1)
- self.onesecond = datetime.timedelta(seconds=1)
- self.oneminute = datetime.timedelta(minutes=1)
- self.onehour = datetime.timedelta(hours=1)
- self.oneday = datetime.timedelta(days=1)
- self.oneweek = datetime.timedelta(days=7)
- self.onemonth = datetime.timedelta(days=30)
- self.oneyear = datetime.timedelta(days=365)
-
- def test_equal_datetimes(self):
- """ equal datetimes. """
- self.assertEquals(timesince(self.t, self.t), u'0 minutes')
-
- def test_ignore_microseconds_and_seconds(self):
- """ Microseconds and seconds are ignored. """
- self.assertEquals(timesince(self.t, self.t+self.onemicrosecond),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t+self.onesecond),
- u'0 minutes')
-
- def test_other_units(self):
- """ Test other units. """
- self.assertEquals(timesince(self.t, self.t+self.oneminute),
- u'1 minute')
- self.assertEquals(timesince(self.t, self.t+self.onehour), u'1 hour')
- self.assertEquals(timesince(self.t, self.t+self.oneday), u'1 day')
- self.assertEquals(timesince(self.t, self.t+self.oneweek), u'1 week')
- self.assertEquals(timesince(self.t, self.t+self.onemonth),
- u'1 month')
- self.assertEquals(timesince(self.t, self.t+self.oneyear), u'1 year')
-
- def test_multiple_units(self):
- """ Test multiple units. """
- self.assertEquals(timesince(self.t,
- self.t+2*self.oneday+6*self.onehour), u'2 days, 6 hours')
- self.assertEquals(timesince(self.t,
- self.t+2*self.oneweek+2*self.oneday), u'2 weeks, 2 days')
-
- def test_display_first_unit(self):
- """
- If the two differing units aren't adjacent, only the first unit is
- displayed.
- """
- self.assertEquals(timesince(self.t,
- self.t+2*self.oneweek+3*self.onehour+4*self.oneminute),
- u'2 weeks')
-
- self.assertEquals(timesince(self.t,
- self.t+4*self.oneday+5*self.oneminute), u'4 days')
-
- def test_display_second_before_first(self):
- """
- When the second date occurs before the first, we should always
- get 0 minutes.
- """
- self.assertEquals(timesince(self.t, self.t-self.onemicrosecond),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t-self.onesecond),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t-self.oneminute),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t-self.onehour),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t-self.oneday),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t-self.oneweek),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t-self.onemonth),
- u'0 minutes')
- self.assertEquals(timesince(self.t, self.t-self.oneyear),
- u'0 minutes')
- self.assertEquals(timesince(self.t,
- self.t-2*self.oneday-6*self.onehour), u'0 minutes')
- self.assertEquals(timesince(self.t,
- self.t-2*self.oneweek-2*self.oneday), u'0 minutes')
- self.assertEquals(timesince(self.t,
- self.t-2*self.oneweek-3*self.onehour-4*self.oneminute),
- u'0 minutes')
- self.assertEquals(timesince(self.t,
- self.t-4*self.oneday-5*self.oneminute), u'0 minutes')
-
- def test_different_timezones(self):
- """ When using two different timezones. """
- now = datetime.datetime.now()
- now_tz = datetime.datetime.now(LocalTimezone(now))
- now_tz_i = datetime.datetime.now(FixedOffset((3 * 60) + 15))
-
- self.assertEquals(timesince(now), u'0 minutes')
- self.assertEquals(timesince(now_tz), u'0 minutes')
- self.assertEquals(timeuntil(now_tz, now_tz_i), u'0 minutes')
-
- def test_both_date_objects(self):
- """ Timesince should work with both date objects (#9672) """
- today = datetime.date.today()
- self.assertEquals(timeuntil(today+self.oneday, today), u'1 day')
- self.assertEquals(timeuntil(today-self.oneday, today), u'0 minutes')
- self.assertEquals(timeuntil(today+self.oneweek, today), u'1 week')
diff --git a/parts/django/tests/regressiontests/utils/tzinfo.py b/parts/django/tests/regressiontests/utils/tzinfo.py
deleted file mode 100644
index edbb9a7..0000000
--- a/parts/django/tests/regressiontests/utils/tzinfo.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import unittest
-
-from django.utils.tzinfo import FixedOffset
-
-class TzinfoTests(unittest.TestCase):
-
- def test_fixedoffset(self):
- self.assertEquals(repr(FixedOffset(0)), '+0000')
- self.assertEquals(repr(FixedOffset(60)), '+0100')
- self.assertEquals(repr(FixedOffset(-60)), '-0100')
- self.assertEquals(repr(FixedOffset(280)), '+0440')
- self.assertEquals(repr(FixedOffset(-280)), '-0440')
- self.assertEquals(repr(FixedOffset(-78.4)), '-0118')
- self.assertEquals(repr(FixedOffset(78.4)), '+0118')
- self.assertEquals(repr(FixedOffset(-5.5*60)), '-0530')
- self.assertEquals(repr(FixedOffset(5.5*60)), '+0530')
- self.assertEquals(repr(FixedOffset(-.5*60)), '-0030')
- self.assertEquals(repr(FixedOffset(.5*60)), '+0030')
diff --git a/parts/django/tests/regressiontests/utils/urls.py b/parts/django/tests/regressiontests/utils/urls.py
deleted file mode 100644
index ba09d14..0000000
--- a/parts/django/tests/regressiontests/utils/urls.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.conf.urls.defaults import *
-
-import views
-
-urlpatterns = patterns('',
- (r'^xview/$', views.xview),
- (r'^class_xview/$', views.class_xview),
-)
diff --git a/parts/django/tests/regressiontests/utils/views.py b/parts/django/tests/regressiontests/utils/views.py
deleted file mode 100644
index ef97c65..0000000
--- a/parts/django/tests/regressiontests/utils/views.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from django.http import HttpResponse
-from django.utils.decorators import decorator_from_middleware
-from django.middleware.doc import XViewMiddleware
-
-
-xview_dec = decorator_from_middleware(XViewMiddleware)
-
-def xview(request):
- return HttpResponse()
-xview = xview_dec(xview)
-
-
-class ClassXView(object):
- def __call__(self, request):
- return HttpResponse()
-
-class_xview = xview_dec(ClassXView())
diff --git a/parts/django/tests/regressiontests/views/__init__.py b/parts/django/tests/regressiontests/views/__init__.py
deleted file mode 100644
index d1c6e08..0000000
--- a/parts/django/tests/regressiontests/views/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf8 -*-
-
-class BrokenException(Exception):
- pass
-
-except_args = ('Broken!', # plain exception with ASCII text
- u'¡Broken!', # non-ASCII unicode data
- '¡Broken!', # non-ASCII, utf-8 encoded bytestring
- '\xa1Broken!', ) # non-ASCII, latin1 bytestring
-
diff --git a/parts/django/tests/regressiontests/views/app0/__init__.py b/parts/django/tests/regressiontests/views/app0/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/parts/django/tests/regressiontests/views/app0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 662204a..0000000
--- a/parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.po
deleted file mode 100644
index a458935..0000000
--- a/parts/django/tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,20 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 19:15+0200\n"
-"PO-Revision-Date: 2010-05-12 12:41-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "il faut traduire cette chaîne de caractères de app0"
-msgstr "this app0 string is to be translated"
diff --git a/parts/django/tests/regressiontests/views/app1/__init__.py b/parts/django/tests/regressiontests/views/app1/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/parts/django/tests/regressiontests/views/app1/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 5d6aecb..0000000
--- a/parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.po
deleted file mode 100644
index a4627db..0000000
--- a/parts/django/tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,20 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 19:15+0200\n"
-"PO-Revision-Date: 2010-05-12 12:41-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "this app1 string is to be translated"
-msgstr "il faut traduire cette chaîne de caractères de app1"
diff --git a/parts/django/tests/regressiontests/views/app2/__init__.py b/parts/django/tests/regressiontests/views/app2/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/parts/django/tests/regressiontests/views/app2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 17e1863..0000000
--- a/parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 637b9e6..0000000
--- a/parts/django/tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,20 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 19:15+0200\n"
-"PO-Revision-Date: 2010-05-12 22:05-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "this app2 string is to be translated"
-msgstr "il faut traduire cette chaîne de caractères de app2"
diff --git a/parts/django/tests/regressiontests/views/app3/__init__.py b/parts/django/tests/regressiontests/views/app3/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/parts/django/tests/regressiontests/views/app3/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 0c485a9..0000000
--- a/parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 1e3be0b..0000000
--- a/parts/django/tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,20 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 19:15+0200\n"
-"PO-Revision-Date: 2010-05-12 12:41-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "il faut traduire cette chaîne de caractères de app3"
-msgstr "este texto de app3 debe ser traducido"
diff --git a/parts/django/tests/regressiontests/views/app4/__init__.py b/parts/django/tests/regressiontests/views/app4/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/parts/django/tests/regressiontests/views/app4/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 581fbb0..0000000
--- a/parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 27403c0..0000000
--- a/parts/django/tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,20 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 19:15+0200\n"
-"PO-Revision-Date: 2010-05-12 12:41-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "il faut traduire cette chaîne de caractères de app4"
-msgstr "este texto de app4 debe ser traducido"
diff --git a/parts/django/tests/regressiontests/views/fixtures/testdata.json b/parts/django/tests/regressiontests/views/fixtures/testdata.json
deleted file mode 100644
index ab68407..0000000
--- a/parts/django/tests/regressiontests/views/fixtures/testdata.json
+++ /dev/null
@@ -1,75 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": 1,
- "model": "views.author",
- "fields": {
- "name": "Boris"
- }
- },
- {
- "pk": 1,
- "model": "views.article",
- "fields": {
- "author": 1,
- "title": "Old Article",
- "slug": "old_article",
- "date_created": "2001-01-01 21:22:23"
- }
- },
- {
- "pk": 2,
- "model": "views.article",
- "fields": {
- "author": 1,
- "title": "Current Article",
- "slug": "current_article",
- "date_created": "2007-09-17 21:22:23"
- }
- },
- {
- "pk": 3,
- "model": "views.article",
- "fields": {
- "author": 1,
- "title": "Future Article",
- "slug": "future_article",
- "date_created": "3000-01-01 21:22:23"
- }
- },
- {
- "pk": 1,
- "model": "views.urlarticle",
- "fields": {
- "author": 1,
- "title": "Old Article",
- "slug": "old_article",
- "date_created": "2001-01-01 21:22:23"
- }
- },
- {
- "pk": 1,
- "model": "sites.site",
- "fields": {
- "domain": "testserver",
- "name": "testserver"
- }
- }
-]
diff --git a/parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index b6b0887..0000000
--- a/parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 669af4b..0000000
--- a/parts/django/tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,25 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 16:45+0200\n"
-"PO-Revision-Date: 2010-05-12 12:57-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: media/js/translate.js:1
-msgid "this is to be translated"
-msgstr "esto tiene que ser traducido"
-
-
-msgid "Choose a time"
-msgstr "Elige una hora"
diff --git a/parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 356147c..0000000
--- a/parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 0d03f95..0000000
--- a/parts/django/tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,24 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 19:15+0200\n"
-"PO-Revision-Date: 2010-05-12 12:41-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "this is to be translated"
-msgstr "il faut le traduire"
-
-
-msgid "Choose a time"
-msgstr "Choisir une heure"
diff --git a/parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.mo b/parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 21659a9..0000000
--- a/parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.po b/parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.po
deleted file mode 100644
index 4ea193a..0000000
--- a/parts/django/tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.po
+++ /dev/null
@@ -1,24 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-15 16:45+0200\n"
-"PO-Revision-Date: 2010-05-12 12:57-0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "this is to be translated"
-msgstr "перевод"
-
-
-msgid "Choose a time"
-msgstr "Выберите время"
diff --git a/parts/django/tests/regressiontests/views/media/file.txt b/parts/django/tests/regressiontests/views/media/file.txt
deleted file mode 100644
index f1fc82c..0000000
--- a/parts/django/tests/regressiontests/views/media/file.txt
+++ /dev/null
@@ -1 +0,0 @@
-An example media file. \ No newline at end of file
diff --git a/parts/django/tests/regressiontests/views/media/file.txt.gz b/parts/django/tests/regressiontests/views/media/file.txt.gz
deleted file mode 100644
index 0ee7d18..0000000
--- a/parts/django/tests/regressiontests/views/media/file.txt.gz
+++ /dev/null
Binary files differ
diff --git a/parts/django/tests/regressiontests/views/media/file.unknown b/parts/django/tests/regressiontests/views/media/file.unknown
deleted file mode 100644
index 77dcda8..0000000
--- a/parts/django/tests/regressiontests/views/media/file.unknown
+++ /dev/null
@@ -1 +0,0 @@
-An unknown file extension.
diff --git a/parts/django/tests/regressiontests/views/models.py b/parts/django/tests/regressiontests/views/models.py
deleted file mode 100644
index 54f5c1c..0000000
--- a/parts/django/tests/regressiontests/views/models.py
+++ /dev/null
@@ -1,49 +0,0 @@
-"""
-Regression tests for Django built-in views.
-"""
-
-from django.db import models
-
-class Author(models.Model):
- name = models.CharField(max_length=100)
-
- def __unicode__(self):
- return self.name
-
- def get_absolute_url(self):
- return '/views/authors/%s/' % self.id
-
-class BaseArticle(models.Model):
- """
- An abstract article Model so that we can create article models with and
- without a get_absolute_url method (for create_update generic views tests).
- """
- title = models.CharField(max_length=100)
- slug = models.SlugField()
- author = models.ForeignKey(Author)
-
- class Meta:
- abstract = True
-
- def __unicode__(self):
- return self.title
-
-class Article(BaseArticle):
- date_created = models.DateTimeField()
-
-class UrlArticle(BaseArticle):
- """
- An Article class with a get_absolute_url defined.
- """
- date_created = models.DateTimeField()
-
- def get_absolute_url(self):
- return '/urlarticles/%s/' % self.slug
- get_absolute_url.purge = True
-
-class DateArticle(BaseArticle):
- """
- An article Model with a DateField instead of DateTimeField,
- for testing #7602
- """
- date_created = models.DateField()
diff --git a/parts/django/tests/regressiontests/views/templates/debug/template_exception.html b/parts/django/tests/regressiontests/views/templates/debug/template_exception.html
deleted file mode 100644
index c6b34a8..0000000
--- a/parts/django/tests/regressiontests/views/templates/debug/template_exception.html
+++ /dev/null
@@ -1,2 +0,0 @@
-{% load debugtags %}
-{% go_boom arg %}
diff --git a/parts/django/tests/regressiontests/views/templatetags/__init__.py b/parts/django/tests/regressiontests/views/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/views/templatetags/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/views/templatetags/debugtags.py b/parts/django/tests/regressiontests/views/templatetags/debugtags.py
deleted file mode 100644
index 9b2c661..0000000
--- a/parts/django/tests/regressiontests/views/templatetags/debugtags.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from django import template
-
-from regressiontests.views import BrokenException
-
-register = template.Library()
-
-@register.simple_tag
-def go_boom(arg):
- raise BrokenException(arg)
-
diff --git a/parts/django/tests/regressiontests/views/tests/__init__.py b/parts/django/tests/regressiontests/views/tests/__init__.py
deleted file mode 100644
index 697968e..0000000
--- a/parts/django/tests/regressiontests/views/tests/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from debug import *
-from defaults import *
-from generic.create_update import *
-from generic.date_based import *
-from i18n import *
-from specials import *
-from static import *
diff --git a/parts/django/tests/regressiontests/views/tests/debug.py b/parts/django/tests/regressiontests/views/tests/debug.py
deleted file mode 100644
index 4ebe37f..0000000
--- a/parts/django/tests/regressiontests/views/tests/debug.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import inspect
-
-from django.conf import settings
-from django.core.files.uploadedfile import SimpleUploadedFile
-from django.test import TestCase
-from django.core.urlresolvers import reverse
-from django.template import TemplateSyntaxError
-
-from regressiontests.views import BrokenException, except_args
-
-class DebugViewTests(TestCase):
- def setUp(self):
- self.old_debug = settings.DEBUG
- settings.DEBUG = True
- self.old_template_debug = settings.TEMPLATE_DEBUG
- settings.TEMPLATE_DEBUG = True
-
- def tearDown(self):
- settings.DEBUG = self.old_debug
- settings.TEMPLATE_DEBUG = self.old_template_debug
-
- def test_files(self):
- response = self.client.get('/views/raises/')
- self.assertEquals(response.status_code, 500)
-
- data = {
- 'file_data.txt': SimpleUploadedFile('file_data.txt', 'haha'),
- }
- response = self.client.post('/views/raises/', data)
- self.assertTrue('file_data.txt' in response.content)
- self.assertFalse('haha' in response.content)
-
- def test_404(self):
- response = self.client.get('/views/raises404/')
- self.assertEquals(response.status_code, 404)
-
- def test_view_exceptions(self):
- for n in range(len(except_args)):
- self.assertRaises(BrokenException, self.client.get,
- reverse('view_exception', args=(n,)))
-
- def test_template_exceptions(self):
- for n in range(len(except_args)):
- try:
- self.client.get(reverse('template_exception', args=(n,)))
- except TemplateSyntaxError, e:
- raising_loc = inspect.trace()[-1][-2][0].strip()
- self.assertFalse(raising_loc.find('raise BrokenException') == -1,
- "Failed to find 'raise BrokenException' in last frame of traceback, instead found: %s" %
- raising_loc)
diff --git a/parts/django/tests/regressiontests/views/tests/defaults.py b/parts/django/tests/regressiontests/views/tests/defaults.py
deleted file mode 100644
index ffc3471..0000000
--- a/parts/django/tests/regressiontests/views/tests/defaults.py
+++ /dev/null
@@ -1,85 +0,0 @@
-from os import path
-
-from django.conf import settings
-from django.test import TestCase
-from django.contrib.contenttypes.models import ContentType
-
-from regressiontests.views.models import Author, Article, UrlArticle
-
-class DefaultsTests(TestCase):
- """Test django views in django/views/defaults.py"""
- fixtures = ['testdata.json']
- non_existing_urls = ['/views/non_existing_url/', # this is in urls.py
- '/views/other_non_existing_url/'] # this NOT in urls.py
-
- def test_shortcut_with_absolute_url(self):
- "Can view a shortcut for an Author object that has a get_absolute_url method"
- for obj in Author.objects.all():
- short_url = '/views/shortcut/%s/%s/' % (ContentType.objects.get_for_model(Author).id, obj.pk)
- response = self.client.get(short_url)
- self.assertRedirects(response, 'http://testserver%s' % obj.get_absolute_url(),
- status_code=302, target_status_code=404)
-
- def test_shortcut_no_absolute_url(self):
- "Shortcuts for an object that has no get_absolute_url method raises 404"
- for obj in Article.objects.all():
- short_url = '/views/shortcut/%s/%s/' % (ContentType.objects.get_for_model(Article).id, obj.pk)
- response = self.client.get(short_url)
- self.assertEquals(response.status_code, 404)
-
- def test_wrong_type_pk(self):
- short_url = '/views/shortcut/%s/%s/' % (ContentType.objects.get_for_model(Author).id, 'nobody/expects')
- response = self.client.get(short_url)
- self.assertEquals(response.status_code, 404)
-
- def test_shortcut_bad_pk(self):
- short_url = '/views/shortcut/%s/%s/' % (ContentType.objects.get_for_model(Author).id, '42424242')
- response = self.client.get(short_url)
- self.assertEquals(response.status_code, 404)
-
- def test_nonint_content_type(self):
- an_author = Author.objects.all()[0]
- short_url = '/views/shortcut/%s/%s/' % ('spam', an_author.pk)
- response = self.client.get(short_url)
- self.assertEquals(response.status_code, 404)
-
- def test_bad_content_type(self):
- an_author = Author.objects.all()[0]
- short_url = '/views/shortcut/%s/%s/' % (42424242, an_author.pk)
- response = self.client.get(short_url)
- self.assertEquals(response.status_code, 404)
-
- def test_page_not_found(self):
- "A 404 status is returned by the page_not_found view"
- for url in self.non_existing_urls:
- response = self.client.get(url)
- self.assertEquals(response.status_code, 404)
-
- def test_csrf_token_in_404(self):
- """
- The 404 page should have the csrf_token available in the context
- """
- # See ticket #14565
- old_DEBUG = settings.DEBUG
- try:
- settings.DEBUG = False # so we get real 404, not technical
- for url in self.non_existing_urls:
- response = self.client.get(url)
- csrf_token = response.context['csrf_token']
- self.assertNotEqual(str(csrf_token), 'NOTPROVIDED')
- self.assertNotEqual(str(csrf_token), '')
- finally:
- settings.DEBUG = old_DEBUG
-
- def test_server_error(self):
- "The server_error view raises a 500 status"
- response = self.client.get('/views/server_error/')
- self.assertEquals(response.status_code, 500)
-
- def test_get_absolute_url_attributes(self):
- "A model can set attributes on the get_absolute_url method"
- self.assertTrue(getattr(UrlArticle.get_absolute_url, 'purge', False),
- 'The attributes of the original get_absolute_url must be added.')
- article = UrlArticle.objects.get(pk=1)
- self.assertTrue(getattr(article.get_absolute_url, 'purge', False),
- 'The attributes of the original get_absolute_url must be added.')
diff --git a/parts/django/tests/regressiontests/views/tests/generic/__init__.py b/parts/django/tests/regressiontests/views/tests/generic/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/parts/django/tests/regressiontests/views/tests/generic/__init__.py
+++ /dev/null
diff --git a/parts/django/tests/regressiontests/views/tests/generic/create_update.py b/parts/django/tests/regressiontests/views/tests/generic/create_update.py
deleted file mode 100644
index 4ba1c35..0000000
--- a/parts/django/tests/regressiontests/views/tests/generic/create_update.py
+++ /dev/null
@@ -1,211 +0,0 @@
-import datetime
-
-from django.test import TestCase
-from django.core.exceptions import ImproperlyConfigured
-from regressiontests.views.models import Article, UrlArticle
-
-class CreateObjectTest(TestCase):
-
- fixtures = ['testdata.json']
-
- def test_login_required_view(self):
- """
- Verifies that an unauthenticated user attempting to access a
- login_required view gets redirected to the login page and that
- an authenticated user is let through.
- """
- view_url = '/views/create_update/member/create/article/'
- response = self.client.get(view_url)
- self.assertRedirects(response, '/accounts/login/?next=%s' % view_url)
- # Now login and try again.
- login = self.client.login(username='testclient', password='password')
- self.assertTrue(login, 'Could not log in')
- response = self.client.get(view_url)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, 'views/article_form.html')
-
- def test_create_article_display_page(self):
- """
- Ensures the generic view returned the page and contains a form.
- """
- view_url = '/views/create_update/create/article/'
- response = self.client.get(view_url)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, 'views/article_form.html')
- if not response.context.get('form'):
- self.fail('No form found in the response.')
-
- def test_create_article_with_errors(self):
- """
- POSTs a form that contains validation errors.
- """
- view_url = '/views/create_update/create/article/'
- num_articles = Article.objects.count()
- response = self.client.post(view_url, {
- 'title': 'My First Article',
- })
- self.assertFormError(response, 'form', 'slug', [u'This field is required.'])
- self.assertTemplateUsed(response, 'views/article_form.html')
- self.assertEqual(num_articles, Article.objects.count(),
- "Number of Articles should not have changed.")
-
- def test_create_custom_save_article(self):
- """
- Creates a new article using a custom form class with a save method
- that alters the slug entered.
- """
- view_url = '/views/create_update/create_custom/article/'
- response = self.client.post(view_url, {
- 'title': 'Test Article',
- 'slug': 'this-should-get-replaced',
- 'author': 1,
- 'date_created': datetime.datetime(2007, 6, 25),
- })
- self.assertRedirects(response,
- '/views/create_update/view/article/some-other-slug/',
- target_status_code=404)
-
-class UpdateDeleteObjectTest(TestCase):
-
- fixtures = ['testdata.json']
-
- def test_update_object_form_display(self):
- """
- Verifies that the form was created properly and with initial values.
- """
- response = self.client.get('/views/create_update/update/article/old_article/')
- self.assertTemplateUsed(response, 'views/article_form.html')
- self.assertEquals(unicode(response.context['form']['title']),
- u'<input id="id_title" type="text" name="title" value="Old Article" maxlength="100" />')
-
- def test_update_object(self):
- """
- Verifies the updating of an Article.
- """
- response = self.client.post('/views/create_update/update/article/old_article/', {
- 'title': 'Another Article',
- 'slug': 'another-article-slug',
- 'author': 1,
- 'date_created': datetime.datetime(2007, 6, 25),
- })
- article = Article.objects.get(pk=1)
- self.assertEquals(article.title, "Another Article")
-
- def test_delete_object_confirm(self):
- """
- Verifies the confirm deletion page is displayed using a GET.
- """
- response = self.client.get('/views/create_update/delete/article/old_article/')
- self.assertTemplateUsed(response, 'views/article_confirm_delete.html')
-
- def test_delete_object(self):
- """
- Verifies the object actually gets deleted on a POST.
- """
- view_url = '/views/create_update/delete/article/old_article/'
- response = self.client.post(view_url)
- try:
- Article.objects.get(slug='old_article')
- except Article.DoesNotExist:
- pass
- else:
- self.fail('Object was not deleted.')
-
-class PostSaveRedirectTests(TestCase):
- """
- Verifies that the views redirect to the correct locations depending on
- if a post_save_redirect was passed and a get_absolute_url method exists
- on the Model.
- """
-
- fixtures = ['testdata.json']
- article_model = Article
-
- create_url = '/views/create_update/create/article/'
- update_url = '/views/create_update/update/article/old_article/'
- delete_url = '/views/create_update/delete/article/old_article/'
-
- create_redirect = '/views/create_update/view/article/my-first-article/'
- update_redirect = '/views/create_update/view/article/another-article-slug/'
- delete_redirect = '/views/create_update/'
-
- def test_create_article(self):
- num_articles = self.article_model.objects.count()
- response = self.client.post(self.create_url, {
- 'title': 'My First Article',
- 'slug': 'my-first-article',
- 'author': '1',
- 'date_created': datetime.datetime(2007, 6, 25),
- })
- self.assertRedirects(response, self.create_redirect,
- target_status_code=404)
- self.assertEqual(num_articles + 1, self.article_model.objects.count(),
- "A new Article should have been created.")
-
- def test_update_article(self):
- num_articles = self.article_model.objects.count()
- response = self.client.post(self.update_url, {
- 'title': 'Another Article',
- 'slug': 'another-article-slug',
- 'author': 1,
- 'date_created': datetime.datetime(2007, 6, 25),
- })
- self.assertRedirects(response, self.update_redirect,
- target_status_code=404)
- self.assertEqual(num_articles, self.article_model.objects.count(),
- "A new Article should not have been created.")
-
- def test_delete_article(self):
- num_articles = self.article_model.objects.count()
- response = self.client.post(self.delete_url)
- self.assertRedirects(response, self.delete_redirect,
- target_status_code=404)
- self.assertEqual(num_articles - 1, self.article_model.objects.count(),
- "An Article should have been deleted.")
-
-class NoPostSaveNoAbsoluteUrl(PostSaveRedirectTests):
- """
- Tests that when no post_save_redirect is passed and no get_absolute_url
- method exists on the Model that the view raises an ImproperlyConfigured
- error.
- """
-
- create_url = '/views/create_update/no_redirect/create/article/'
- update_url = '/views/create_update/no_redirect/update/article/old_article/'
-
- def test_create_article(self):
- self.assertRaises(ImproperlyConfigured,
- super(NoPostSaveNoAbsoluteUrl, self).test_create_article)
-
- def test_update_article(self):
- self.assertRaises(ImproperlyConfigured,
- super(NoPostSaveNoAbsoluteUrl, self).test_update_article)
-
- def test_delete_article(self):
- """
- The delete_object view requires a post_delete_redirect, so skip testing
- here.
- """
- pass
-
-class AbsoluteUrlNoPostSave(PostSaveRedirectTests):
- """
- Tests that the views redirect to the Model's get_absolute_url when no
- post_save_redirect is passed.
- """
-
- # Article model with get_absolute_url method.
- article_model = UrlArticle
-
- create_url = '/views/create_update/no_url/create/article/'
- update_url = '/views/create_update/no_url/update/article/old_article/'
-
- create_redirect = '/urlarticles/my-first-article/'
- update_redirect = '/urlarticles/another-article-slug/'
-
- def test_delete_article(self):
- """
- The delete_object view requires a post_delete_redirect, so skip testing
- here.
- """
- pass
diff --git a/parts/django/tests/regressiontests/views/tests/generic/date_based.py b/parts/django/tests/regressiontests/views/tests/generic/date_based.py
deleted file mode 100644
index c6ba562..0000000
--- a/parts/django/tests/regressiontests/views/tests/generic/date_based.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# coding: utf-8
-from django.test import TestCase
-from datetime import datetime, date
-from datetime import timedelta
-from regressiontests.views.models import Article, Author, DateArticle
-
-class ObjectDetailTest(TestCase):
- fixtures = ['testdata.json']
- def setUp(self):
- # Correct the date for the current article
- current_article = Article.objects.get(title="Current Article")
- current_article.date_created = datetime.now()
- current_article.save()
-
- def test_finds_past(self):
- "date_based.object_detail can view a page in the past"
- response = self.client.get('/views/date_based/object_detail/2001/01/01/old_article/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['object'].title, "Old Article")
-
- def test_object_detail_finds_today(self):
- "date_based.object_detail can view a page from today"
- today_url = datetime.now().strftime('%Y/%m/%d')
- response = self.client.get('/views/date_based/object_detail/%s/current_article/' % today_url)
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['object'].title, "Current Article")
-
- def test_object_detail_ignores_future(self):
- "date_based.object_detail can view a page from the future, but only if allowed."
- response = self.client.get('/views/date_based/object_detail/3000/01/01/future_article/')
- self.assertEqual(response.status_code, 404)
-
- def test_object_detail_allowed_future_if_enabled(self):
- "date_based.object_detail can view a page from the future if explicitly allowed."
- response = self.client.get('/views/date_based/object_detail/3000/01/01/future_article/allow_future/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['object'].title, "Future Article")
-
-class MonthArchiveTest(TestCase):
- def test_archive_month_includes_only_month(self):
- "Regression for #3031: Archives around Feburary include only one month"
- author = Author(name="John Smith")
- author.save()
-
- # 2004 was a leap year, so it should be weird enough to not cheat
- first_second_of_feb = datetime(2004, 2, 1, 0, 0, 1)
- first_second_of_mar = datetime(2004, 3, 1, 0, 0, 1)
- two_seconds = timedelta(0, 2, 0)
- article = Article(title="example", author=author)
-
- article.date_created = first_second_of_feb
- article.save()
- response = self.client.get('/views/date_based/archive_month/2004/02/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['next_month'], date(2004, 3, 1))
- self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
-
- article.date_created = first_second_of_feb-two_seconds
- article.save()
- response = self.client.get('/views/date_based/archive_month/2004/02/')
- self.assertEqual(response.status_code, 404)
-
- article.date_created = first_second_of_mar-two_seconds
- article.save()
- response = self.client.get('/views/date_based/archive_month/2004/02/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['next_month'], date(2004, 3, 1))
- self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
-
- article.date_created = first_second_of_mar
- article.save()
- response = self.client.get('/views/date_based/archive_month/2004/02/')
- self.assertEqual(response.status_code, 404)
-
- article2 = DateArticle(title="example", author=author)
-
- article2.date_created = first_second_of_feb.date()
- article2.save()
- response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['next_month'], date(2004, 3, 1))
- self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
-
- article2.date_created = (first_second_of_feb-two_seconds).date()
- article2.save()
- response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
- self.assertEqual(response.status_code, 404)
-
- article2.date_created = (first_second_of_mar-two_seconds).date()
- article2.save()
- response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['next_month'], date(2004, 3, 1))
- self.assertEqual(response.context['previous_month'], date(2004, 1, 1))
-
- article2.date_created = first_second_of_mar.date()
- article2.save()
- response = self.client.get('/views/date_based/datefield/archive_month/2004/02/')
- self.assertEqual(response.status_code, 404)
-
- now = datetime.now()
- prev_month = now.date().replace(day=1)
- if prev_month.month == 1:
- prev_month = prev_month.replace(year=prev_month.year-1, month=12)
- else:
- prev_month = prev_month.replace(month=prev_month.month-1)
- article2.date_created = now
- article2.save()
- response = self.client.get('/views/date_based/datefield/archive_month/%s/' % now.strftime('%Y/%m'))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['next_month'], None)
- self.assertEqual(response.context['previous_month'], prev_month)
-
- def test_archive_month_date_list(self):
- author = Author(name="John Smith")
- author.save()
- date1 = datetime(2010, 1, 1, 0, 0, 0)
- date2 = datetime(2010, 1, 2, 0, 0, 0)
- Article.objects.create(title='example1', author=author, date_created=date1)
- Article.objects.create(title='example2', author=author, date_created=date2)
- response = self.client.get('/views/date_based/archive_month/2010/1/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(len(response.context['date_list']), 2)
- self.assertEqual(response.context['date_list'][0], date1)
- # Checks that the same date is not included more than once in the list
- Article.objects.create(title='example2', author=author, date_created=date2)
- response = self.client.get('/views/date_based/archive_month/2010/1/')
- self.assertEqual(len(response.context['date_list']), 2)
-
-class DayArchiveTests(TestCase):
-
- def test_year_month_day_format(self):
- """
- Make sure day views don't get confused with numeric month formats (#7944)
- """
- author = Author.objects.create(name="John Smith")
- article = Article.objects.create(title="example", author=author, date_created=datetime(2004, 1, 21, 0, 0, 1))
- response = self.client.get('/views/date_based/archive_day/2004/1/21/')
- self.assertEqual(response.status_code, 200)
- self.assertEqual(response.context['object_list'][0], article)
diff --git a/parts/django/tests/regressiontests/views/tests/i18n.py b/parts/django/tests/regressiontests/views/tests/i18n.py
deleted file mode 100644
index 24aa933..0000000
--- a/parts/django/tests/regressiontests/views/tests/i18n.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# -*- coding:utf-8 -*-
-import gettext
-
-from django.conf import settings
-from django.test import TestCase
-from django.utils.translation import activate, deactivate
-from django.utils.text import javascript_quote
-
-from regressiontests.views.urls import locale_dir
-
-class I18NTests(TestCase):
- """ Tests django views in django/views/i18n.py """
-
- def test_setlang(self):
- """The set_language view can be used to change the session language"""
- for lang_code, lang_name in settings.LANGUAGES:
- post_data = dict(language=lang_code, next='/views/')
- response = self.client.post('/views/i18n/setlang/', data=post_data)
- self.assertRedirects(response, 'http://testserver/views/')
- self.assertEquals(self.client.session['django_language'], lang_code)
-
- def test_jsi18n(self):
- """The javascript_catalog can be deployed with language settings"""
- for lang_code in ['es', 'fr', 'ru']:
- activate(lang_code)
- catalog = gettext.translation('djangojs', locale_dir, [lang_code])
- trans_txt = catalog.ugettext('this is to be translated')
- response = self.client.get('/views/jsi18n/')
- # in response content must to be a line like that:
- # catalog['this is to be translated'] = 'same_that_trans_txt'
- # javascript_quote is used to be able to check unicode strings
- self.assertContains(response, javascript_quote(trans_txt), 1)
-
-
-class JsI18NTests(TestCase):
- """
- Tests django views in django/views/i18n.py that need to change
- settings.LANGUAGE_CODE.
- """
-
- def setUp(self):
- self.old_language_code = settings.LANGUAGE_CODE
- self.old_installed_apps = settings.INSTALLED_APPS
-
- def tearDown(self):
- deactivate()
- settings.LANGUAGE_CODE = self.old_language_code
- settings.INSTALLED_APPS = self.old_installed_apps
-
- def test_jsi18n_with_missing_en_files(self):
- """
- The javascript_catalog shouldn't load the fallback language in the
- case that the current selected language is actually the one translated
- from, and hence missing translation files completely.
-
- This happens easily when you're translating from English to other
- languages and you've set settings.LANGUAGE_CODE to some other language
- than English.
- """
- settings.LANGUAGE_CODE = 'es'
- activate('en-us')
- response = self.client.get('/views/jsi18n/')
- self.assertNotContains(response, 'esto tiene que ser traducido')
-
- def test_jsi18n_fallback_language(self):
- """
- Let's make sure that the fallback language is still working properly
- in cases where the selected language cannot be found.
- """
- settings.LANGUAGE_CODE = 'fr'
- activate('fi')
- response = self.client.get('/views/jsi18n/')
- self.assertContains(response, 'il faut le traduire')
-
- def testI18NLanguageNonEnglishDefault(self):
- """
- Check if the Javascript i18n view returns an empty language catalog
- if the default language is non-English, the selected language
- is English and there is not 'en' translation available. See #13388,
- #3594 and #13726 for more details.
- """
- settings.LANGUAGE_CODE = 'fr'
- activate('en-us')
- response = self.client.get('/views/jsi18n/')
- self.assertNotContains(response, 'Choisir une heure')
-
- def test_nonenglish_default_english_userpref(self):
- """
- Same as above with the difference that there IS an 'en' translation
- available. The Javascript i18n view must return a NON empty language catalog
- with the proper English translations. See #13726 for more details.
- """
- settings.LANGUAGE_CODE = 'fr'
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.views.app0']
- activate('en-us')
- response = self.client.get('/views/jsi18n_english_translation/')
- self.assertContains(response, javascript_quote('this app0 string is to be translated'))
-
- def testI18NLanguageNonEnglishFallback(self):
- """
- Makes sure that the fallback language is still working properly
- in cases where the selected language cannot be found.
- """
- settings.LANGUAGE_CODE = 'fr'
- activate('none')
- response = self.client.get('/views/jsi18n/')
- self.assertContains(response, 'Choisir une heure')
-
-
-class JsI18NTestsMultiPackage(TestCase):
- """
- Tests for django views in django/views/i18n.py that need to change
- settings.LANGUAGE_CODE and merge JS translation from several packages.
- """
-
- def setUp(self):
- self.old_language_code = settings.LANGUAGE_CODE
- self.old_installed_apps = settings.INSTALLED_APPS
-
- def tearDown(self):
- settings.LANGUAGE_CODE = self.old_language_code
- settings.INSTALLED_APPS = self.old_installed_apps
-
- def testI18NLanguageEnglishDefault(self):
- """
- Check if the JavaScript i18n view returns a complete language catalog
- if the default language is en-us, the selected language has a
- translation available and a catalog composed by djangojs domain
- translations of multiple Python packages is requested. See #13388,
- #3594 and #13514 for more details.
- """
- settings.LANGUAGE_CODE = 'en-us'
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.views.app1', 'regressiontests.views.app2']
- activate('fr')
- response = self.client.get('/views/jsi18n_multi_packages1/')
- self.assertContains(response, javascript_quote('il faut traduire cette chaîne de caractères de app1'))
- deactivate()
-
- def testI18NDifferentNonEnLangs(self):
- """
- Similar to above but with neither default or requested language being
- English.
- """
- settings.LANGUAGE_CODE = 'fr'
- settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.views.app3', 'regressiontests.views.app4']
- activate('es-ar')
- response = self.client.get('/views/jsi18n_multi_packages2/')
- self.assertContains(response, javascript_quote('este texto de app3 debe ser traducido'))
- deactivate()
diff --git a/parts/django/tests/regressiontests/views/tests/specials.py b/parts/django/tests/regressiontests/views/tests/specials.py
deleted file mode 100644
index bcdffca..0000000
--- a/parts/django/tests/regressiontests/views/tests/specials.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# coding: utf-8
-from django.test import TestCase
-
-class URLHandling(TestCase):
- """
- Tests for URL handling in views and responses.
- """
- redirect_target = "/views/%E4%B8%AD%E6%96%87/target/"
-
- def test_combining_redirect(self):
- """
- Tests that redirecting to an IRI, requiring encoding before we use it
- in an HTTP response, is handled correctly. In this case the arg to
- HttpRedirect is ASCII but the current request path contains non-ASCII
- characters so this test ensures the creation of the full path with a
- base non-ASCII part is handled correctly.
- """
- response = self.client.get(u'/views/中文/')
- self.assertRedirects(response, self.redirect_target)
-
- def test_nonascii_redirect(self):
- """
- Tests that a non-ASCII argument to HttpRedirect is handled properly.
- """
- response = self.client.get('/views/nonascii_redirect/')
- self.assertRedirects(response, self.redirect_target)
-
- def test_permanent_nonascii_redirect(self):
- """
- Tests that a non-ASCII argument to HttpPermanentRedirect is handled
- properly.
- """
- response = self.client.get('/views/permanent_nonascii_redirect/')
- self.assertRedirects(response, self.redirect_target, status_code=301)
-
diff --git a/parts/django/tests/regressiontests/views/tests/static.py b/parts/django/tests/regressiontests/views/tests/static.py
deleted file mode 100644
index de0bd51..0000000
--- a/parts/django/tests/regressiontests/views/tests/static.py
+++ /dev/null
@@ -1,77 +0,0 @@
-import mimetypes
-from os import path
-
-from django.test import TestCase
-from django.http import HttpResponseNotModified
-from regressiontests.views.urls import media_dir
-
-class StaticTests(TestCase):
- """Tests django views in django/views/static.py"""
-
- def test_serve(self):
- "The static view can serve static media"
- media_files = ['file.txt', 'file.txt.gz']
- for filename in media_files:
- response = self.client.get('/views/site_media/%s' % filename)
- file_path = path.join(media_dir, filename)
- self.assertEquals(open(file_path).read(), response.content)
- self.assertEquals(len(response.content), int(response['Content-Length']))
- self.assertEquals(mimetypes.guess_type(file_path)[1], response.get('Content-Encoding', None))
-
- def test_unknown_mime_type(self):
- response = self.client.get('/views/site_media/file.unknown')
- self.assertEquals('application/octet-stream', response['Content-Type'])
-
- def test_copes_with_empty_path_component(self):
- file_name = 'file.txt'
- response = self.client.get('/views/site_media//%s' % file_name)
- file = open(path.join(media_dir, file_name))
- self.assertEquals(file.read(), response.content)
-
- def test_is_modified_since(self):
- file_name = 'file.txt'
- response = self.client.get(
- '/views/site_media/%s' % file_name,
- HTTP_IF_MODIFIED_SINCE='Thu, 1 Jan 1970 00:00:00 GMT')
- file = open(path.join(media_dir, file_name))
- self.assertEquals(file.read(), response.content)
-
- def test_not_modified_since(self):
- file_name = 'file.txt'
- response = self.client.get(
- '/views/site_media/%s' % file_name,
- HTTP_IF_MODIFIED_SINCE='Mon, 18 Jan 2038 05:14:07 UTC'
- # This is 24h before max Unix time. Remember to fix Django and
- # update this test well before 2038 :)
- )
- self.assertTrue(isinstance(response, HttpResponseNotModified))
-
- def test_invalid_if_modified_since(self):
- """Handle bogus If-Modified-Since values gracefully
-
- Assume that a file is modified since an invalid timestamp as per RFC
- 2616, section 14.25.
- """
- file_name = 'file.txt'
- invalid_date = 'Mon, 28 May 999999999999 28:25:26 GMT'
- response = self.client.get('/views/site_media/%s' % file_name,
- HTTP_IF_MODIFIED_SINCE=invalid_date)
- file = open(path.join(media_dir, file_name))
- self.assertEquals(file.read(), response.content)
- self.assertEquals(len(response.content),
- int(response['Content-Length']))
-
- def test_invalid_if_modified_since2(self):
- """Handle even more bogus If-Modified-Since values gracefully
-
- Assume that a file is modified since an invalid timestamp as per RFC
- 2616, section 14.25.
- """
- file_name = 'file.txt'
- invalid_date = ': 1291108438, Wed, 20 Oct 2010 14:05:00 GMT'
- response = self.client.get('/views/site_media/%s' % file_name,
- HTTP_IF_MODIFIED_SINCE=invalid_date)
- file = open(path.join(media_dir, file_name))
- self.assertEquals(file.read(), response.content)
- self.assertEquals(len(response.content),
- int(response['Content-Length']))
diff --git a/parts/django/tests/regressiontests/views/urls.py b/parts/django/tests/regressiontests/views/urls.py
deleted file mode 100644
index 0ccb988..0000000
--- a/parts/django/tests/regressiontests/views/urls.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# coding: utf-8
-from os import path
-
-from django.conf.urls.defaults import *
-
-from models import *
-import views
-
-
-base_dir = path.dirname(path.abspath(__file__))
-media_dir = path.join(base_dir, 'media')
-locale_dir = path.join(base_dir, 'locale')
-
-js_info_dict = {
- 'domain': 'djangojs',
- 'packages': ('regressiontests.views',),
-}
-
-js_info_dict_english_translation = {
- 'domain': 'djangojs',
- 'packages': ('regressiontests.views.app0',),
-}
-
-js_info_dict_multi_packages1 = {
- 'domain': 'djangojs',
- 'packages': ('regressiontests.views.app1', 'regressiontests.views.app2'),
-}
-
-js_info_dict_multi_packages2 = {
- 'domain': 'djangojs',
- 'packages': ('regressiontests.views.app3', 'regressiontests.views.app4'),
-}
-
-date_based_info_dict = {
- 'queryset': Article.objects.all(),
- 'date_field': 'date_created',
- 'month_format': '%m',
-}
-numeric_days_info_dict = dict(date_based_info_dict, day_format='%d')
-
-date_based_datefield_info_dict = dict(date_based_info_dict, queryset=DateArticle.objects.all())
-
-urlpatterns = patterns('',
- (r'^$', views.index_page),
-
- # Default views
- (r'^shortcut/(\d+)/(.*)/$', 'django.views.defaults.shortcut'),
- (r'^non_existing_url/', 'django.views.defaults.page_not_found'),
- (r'^server_error/', 'django.views.defaults.server_error'),
-
- # i18n views
- (r'^i18n/', include('django.conf.urls.i18n')),
- (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
- (r'^jsi18n_english_translation/$', 'django.views.i18n.javascript_catalog', js_info_dict_english_translation),
- (r'^jsi18n_multi_packages1/$', 'django.views.i18n.javascript_catalog', js_info_dict_multi_packages1),
- (r'^jsi18n_multi_packages2/$', 'django.views.i18n.javascript_catalog', js_info_dict_multi_packages2),
-
- # Static views
- (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': media_dir}),
-
- # Special URLs for particular regression cases.
- url(u'^中文/$', 'regressiontests.views.views.redirect'),
- url(u'^中文/target/$', 'regressiontests.views.views.index_page'),
-)
-
-# Date-based generic views.
-urlpatterns += patterns('django.views.generic.date_based',
- (r'^date_based/object_detail/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$',
- 'object_detail',
- dict(slug_field='slug', **date_based_info_dict)),
- (r'^date_based/object_detail/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/allow_future/$',
- 'object_detail',
- dict(allow_future=True, slug_field='slug', **date_based_info_dict)),
- (r'^date_based/archive_day/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$',
- 'archive_day',
- numeric_days_info_dict),
- (r'^date_based/archive_month/(?P<year>\d{4})/(?P<month>\d{1,2})/$',
- 'archive_month',
- date_based_info_dict),
- (r'^date_based/datefield/archive_month/(?P<year>\d{4})/(?P<month>\d{1,2})/$',
- 'archive_month',
- date_based_datefield_info_dict),
-)
-
-# crud generic views.
-
-urlpatterns += patterns('django.views.generic.create_update',
- (r'^create_update/member/create/article/$', 'create_object',
- dict(login_required=True, model=Article)),
- (r'^create_update/create/article/$', 'create_object',
- dict(post_save_redirect='/views/create_update/view/article/%(slug)s/',
- model=Article)),
- (r'^create_update/update/article/(?P<slug>[-\w]+)/$', 'update_object',
- dict(post_save_redirect='/views/create_update/view/article/%(slug)s/',
- slug_field='slug', model=Article)),
- (r'^create_update/create_custom/article/$', views.custom_create),
- (r'^create_update/delete/article/(?P<slug>[-\w]+)/$', 'delete_object',
- dict(post_delete_redirect='/views/create_update/', slug_field='slug',
- model=Article)),
-
- # No post_save_redirect and no get_absolute_url on model.
- (r'^create_update/no_redirect/create/article/$', 'create_object',
- dict(model=Article)),
- (r'^create_update/no_redirect/update/article/(?P<slug>[-\w]+)/$',
- 'update_object', dict(slug_field='slug', model=Article)),
-
- # get_absolute_url on model, but no passed post_save_redirect.
- (r'^create_update/no_url/create/article/$', 'create_object',
- dict(model=UrlArticle)),
- (r'^create_update/no_url/update/article/(?P<slug>[-\w]+)/$',
- 'update_object', dict(slug_field='slug', model=UrlArticle)),
-)
-
-# a view that raises an exception for the debug view
-urlpatterns += patterns('',
- (r'^raises/$', views.raises),
- (r'^raises404/$', views.raises404),
-)
-
-# rediriects, both temporary and permanent, with non-ASCII targets
-urlpatterns += patterns('django.views.generic.simple',
- ('^nonascii_redirect/$', 'redirect_to',
- {'url': u'/views/中文/target/', 'permanent': False}),
- ('^permanent_nonascii_redirect/$', 'redirect_to',
- {'url': u'/views/中文/target/', 'permanent': True}),
-)
-
-urlpatterns += patterns('regressiontests.views.views',
- url(r'view_exception/(?P<n>\d+)/$', 'view_exception', name='view_exception'),
- url(r'template_exception/(?P<n>\d+)/$', 'template_exception', name='template_exception'),
-)
diff --git a/parts/django/tests/regressiontests/views/views.py b/parts/django/tests/regressiontests/views/views.py
deleted file mode 100644
index 445b4ed..0000000
--- a/parts/django/tests/regressiontests/views/views.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import sys
-
-from django.http import HttpResponse, HttpResponseRedirect
-from django import forms
-from django.views.debug import technical_500_response
-from django.views.generic.create_update import create_object
-from django.core.urlresolvers import get_resolver
-from django.shortcuts import render_to_response
-
-from regressiontests.views import BrokenException, except_args
-
-from models import Article
-
-
-def index_page(request):
- """Dummy index page"""
- return HttpResponse('<html><body>Dummy page</body></html>')
-
-def custom_create(request):
- """
- Calls create_object generic view with a custom form class.
- """
- class SlugChangingArticleForm(forms.ModelForm):
- """Custom form class to overwrite the slug."""
-
- class Meta:
- model = Article
-
- def save(self, *args, **kwargs):
- self.instance.slug = 'some-other-slug'
- return super(SlugChangingArticleForm, self).save(*args, **kwargs)
-
- return create_object(request,
- post_save_redirect='/views/create_update/view/article/%(slug)s/',
- form_class=SlugChangingArticleForm)
-
-def raises(request):
- try:
- raise Exception
- except Exception:
- return technical_500_response(request, *sys.exc_info())
-
-def raises404(request):
- resolver = get_resolver(None)
- resolver.resolve('')
-
-def redirect(request):
- """
- Forces an HTTP redirect.
- """
- return HttpResponseRedirect("target/")
-
-def view_exception(request, n):
- raise BrokenException(except_args[int(n)])
-
-def template_exception(request, n):
- return render_to_response('debug/template_exception.html',
- {'arg': except_args[int(n)]})
-
diff --git a/parts/django/tests/runtests.py b/parts/django/tests/runtests.py
deleted file mode 100755
index 3dde214..0000000
--- a/parts/django/tests/runtests.py
+++ /dev/null
@@ -1,336 +0,0 @@
-#!/usr/bin/env python
-
-import os, subprocess, sys, traceback
-import unittest
-
-import django.contrib as contrib
-
-CONTRIB_DIR_NAME = 'django.contrib'
-MODEL_TESTS_DIR_NAME = 'modeltests'
-REGRESSION_TESTS_DIR_NAME = 'regressiontests'
-
-TEST_TEMPLATE_DIR = 'templates'
-
-CONTRIB_DIR = os.path.dirname(contrib.__file__)
-MODEL_TEST_DIR = os.path.join(os.path.dirname(__file__), MODEL_TESTS_DIR_NAME)
-REGRESSION_TEST_DIR = os.path.join(os.path.dirname(__file__), REGRESSION_TESTS_DIR_NAME)
-
-REGRESSION_SUBDIRS_TO_SKIP = ['locale']
-
-ALWAYS_INSTALLED_APPS = [
- 'django.contrib.contenttypes',
- 'django.contrib.auth',
- 'django.contrib.sites',
- 'django.contrib.flatpages',
- 'django.contrib.redirects',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.comments',
- 'django.contrib.admin',
- 'django.contrib.admindocs',
-]
-
-def geodjango(settings):
- # All databases must have spatial backends to run GeoDjango tests.
- spatial_dbs = [name for name, db_dict in settings.DATABASES.items()
- if db_dict['ENGINE'].startswith('django.contrib.gis')]
- return len(spatial_dbs) == len(settings.DATABASES)
-
-def get_test_models():
- models = []
- for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR), (CONTRIB_DIR_NAME, CONTRIB_DIR):
- for f in os.listdir(dirpath):
- if f.startswith('__init__') or f.startswith('.') or \
- f.startswith('sql') or f.startswith('invalid') or \
- os.path.basename(f) in REGRESSION_SUBDIRS_TO_SKIP:
- continue
- models.append((loc, f))
- return models
-
-def get_invalid_models():
- models = []
- for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR), (CONTRIB_DIR_NAME, CONTRIB_DIR):
- for f in os.listdir(dirpath):
- if f.startswith('__init__') or f.startswith('.') or f.startswith('sql'):
- continue
- if f.startswith('invalid'):
- models.append((loc, f))
- return models
-
-class InvalidModelTestCase(unittest.TestCase):
- def __init__(self, model_label):
- unittest.TestCase.__init__(self)
- self.model_label = model_label
-
- def runTest(self):
- from django.core.management.validation import get_validation_errors
- from django.db.models.loading import load_app
- from cStringIO import StringIO
-
- try:
- module = load_app(self.model_label)
- except Exception, e:
- self.fail('Unable to load invalid model module')
-
- # Make sure sys.stdout is not a tty so that we get errors without
- # coloring attached (makes matching the results easier). We restore
- # sys.stderr afterwards.
- orig_stdout = sys.stdout
- s = StringIO()
- sys.stdout = s
- count = get_validation_errors(s, module)
- sys.stdout = orig_stdout
- s.seek(0)
- error_log = s.read()
- actual = error_log.split('\n')
- expected = module.model_errors.split('\n')
-
- unexpected = [err for err in actual if err not in expected]
- missing = [err for err in expected if err not in actual]
-
- self.assert_(not unexpected, "Unexpected Errors: " + '\n'.join(unexpected))
- self.assert_(not missing, "Missing Errors: " + '\n'.join(missing))
-
-def setup(verbosity, test_labels):
- from django.conf import settings
- state = {
- 'INSTALLED_APPS': settings.INSTALLED_APPS,
- 'ROOT_URLCONF': getattr(settings, "ROOT_URLCONF", ""),
- 'TEMPLATE_DIRS': settings.TEMPLATE_DIRS,
- 'USE_I18N': settings.USE_I18N,
- 'LOGIN_URL': settings.LOGIN_URL,
- 'LANGUAGE_CODE': settings.LANGUAGE_CODE,
- 'MIDDLEWARE_CLASSES': settings.MIDDLEWARE_CLASSES,
- }
-
- # Redirect some settings for the duration of these tests.
- settings.INSTALLED_APPS = ALWAYS_INSTALLED_APPS
- settings.ROOT_URLCONF = 'urls'
- settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), TEST_TEMPLATE_DIR),)
- settings.USE_I18N = True
- settings.LANGUAGE_CODE = 'en'
- settings.LOGIN_URL = '/accounts/login/'
- settings.MIDDLEWARE_CLASSES = (
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.common.CommonMiddleware',
- )
- settings.SITE_ID = 1
- # For testing comment-utils, we require the MANAGERS attribute
- # to be set, so that a test email is sent out which we catch
- # in our tests.
- settings.MANAGERS = ("admin@djangoproject.com",)
-
- # Load all the ALWAYS_INSTALLED_APPS.
- # (This import statement is intentionally delayed until after we
- # access settings because of the USE_I18N dependency.)
- from django.db.models.loading import get_apps, load_app
- get_apps()
-
- # Load all the test model apps.
- test_labels_set = set([label.split('.')[0] for label in test_labels])
- test_models = get_test_models()
-
- # If GeoDjango, then we'll want to add in the test applications
- # that are a part of its test suite.
- if geodjango(settings):
- from django.contrib.gis.tests import geo_apps
- test_models.extend(geo_apps(runtests=True))
-
- for model_dir, model_name in test_models:
- model_label = '.'.join([model_dir, model_name])
- # if the model was named on the command line, or
- # no models were named (i.e., run all), import
- # this model and add it to the list to test.
- if not test_labels or model_name in test_labels_set:
- if verbosity >= 1:
- print "Importing model %s" % model_name
- mod = load_app(model_label)
- if mod:
- if model_label not in settings.INSTALLED_APPS:
- settings.INSTALLED_APPS.append(model_label)
-
- return state
-
-def teardown(state):
- from django.conf import settings
- # Restore the old settings.
- for key, value in state.items():
- setattr(settings, key, value)
-
-def django_tests(verbosity, interactive, failfast, test_labels):
- from django.conf import settings
- state = setup(verbosity, test_labels)
-
- # Add tests for invalid models.
- extra_tests = []
- for model_dir, model_name in get_invalid_models():
- model_label = '.'.join([model_dir, model_name])
- if not test_labels or model_name in test_labels:
- extra_tests.append(InvalidModelTestCase(model_label))
- try:
- # Invalid models are not working apps, so we cannot pass them into
- # the test runner with the other test_labels
- test_labels.remove(model_name)
- except ValueError:
- pass
-
- # If GeoDjango is used, add it's tests that aren't a part of
- # an application (e.g., GEOS, GDAL, Distance objects).
- if geodjango(settings):
- from django.contrib.gis.tests import geodjango_suite
- extra_tests.append(geodjango_suite(apps=False))
-
- # Run the test suite, including the extra validation tests.
- from django.test.utils import get_runner
- if not hasattr(settings, 'TEST_RUNNER'):
- settings.TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
- TestRunner = get_runner(settings)
-
- if hasattr(TestRunner, 'func_name'):
- # Pre 1.2 test runners were just functions,
- # and did not support the 'failfast' option.
- import warnings
- warnings.warn(
- 'Function-based test runners are deprecated. Test runners should be classes with a run_tests() method.',
- PendingDeprecationWarning
- )
- failures = TestRunner(test_labels, verbosity=verbosity, interactive=interactive,
- extra_tests=extra_tests)
- else:
- test_runner = TestRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
- failures = test_runner.run_tests(test_labels, extra_tests=extra_tests)
-
- teardown(state)
- return failures
-
-
-def bisect_tests(bisection_label, options, test_labels):
- state = setup(int(options.verbosity), test_labels)
-
- if not test_labels:
- # Get the full list of test labels to use for bisection
- from django.db.models.loading import get_apps
- test_labels = [app.__name__.split('.')[-2] for app in get_apps()]
-
- print '***** Bisecting test suite:',' '.join(test_labels)
-
- # Make sure the bisection point isn't in the test list
- # Also remove tests that need to be run in specific combinations
- for label in [bisection_label, 'model_inheritance_same_model_name']:
- try:
- test_labels.remove(label)
- except ValueError:
- pass
-
- subprocess_args = ['python','runtests.py', '--settings=%s' % options.settings]
- if options.failfast:
- subprocess_args.append('--failfast')
- if options.verbosity:
- subprocess_args.append('--verbosity=%s' % options.verbosity)
- if not options.interactive:
- subprocess_args.append('--noinput')
-
- iteration = 1
- while len(test_labels) > 1:
- midpoint = len(test_labels)/2
- test_labels_a = test_labels[:midpoint] + [bisection_label]
- test_labels_b = test_labels[midpoint:] + [bisection_label]
- print '***** Pass %da: Running the first half of the test suite' % iteration
- print '***** Test labels:',' '.join(test_labels_a)
- failures_a = subprocess.call(subprocess_args + test_labels_a)
-
- print '***** Pass %db: Running the second half of the test suite' % iteration
- print '***** Test labels:',' '.join(test_labels_b)
- print
- failures_b = subprocess.call(subprocess_args + test_labels_b)
-
- if failures_a and not failures_b:
- print "***** Problem found in first half. Bisecting again..."
- iteration = iteration + 1
- test_labels = test_labels_a[:-1]
- elif failures_b and not failures_a:
- print "***** Problem found in second half. Bisecting again..."
- iteration = iteration + 1
- test_labels = test_labels_b[:-1]
- elif failures_a and failures_b:
- print "***** Multiple sources of failure found"
- break
- else:
- print "***** No source of failure found... try pair execution (--pair)"
- break
-
- if len(test_labels) == 1:
- print "***** Source of error:",test_labels[0]
- teardown(state)
-
-def paired_tests(paired_test, options, test_labels):
- state = setup(int(options.verbosity), test_labels)
-
- if not test_labels:
- print ""
- # Get the full list of test labels to use for bisection
- from django.db.models.loading import get_apps
- test_labels = [app.__name__.split('.')[-2] for app in get_apps()]
-
- print '***** Trying paired execution'
-
- # Make sure the bisection point isn't in the test list
- # Also remove tests that need to be run in specific combinations
- for label in [paired_test, 'model_inheritance_same_model_name']:
- try:
- test_labels.remove(label)
- except ValueError:
- pass
-
- subprocess_args = ['python','runtests.py', '--settings=%s' % options.settings]
- if options.failfast:
- subprocess_args.append('--failfast')
- if options.verbosity:
- subprocess_args.append('--verbosity=%s' % options.verbosity)
- if not options.interactive:
- subprocess_args.append('--noinput')
-
- for i, label in enumerate(test_labels):
- print '***** %d of %d: Check test pairing with %s' % (i+1, len(test_labels), label)
- failures = subprocess.call(subprocess_args + [label, paired_test])
- if failures:
- print '***** Found problem pair with',label
- return
-
- print '***** No problem pair found'
- teardown(state)
-
-if __name__ == "__main__":
- from optparse import OptionParser
- usage = "%prog [options] [model model model ...]"
- parser = OptionParser(usage=usage)
- parser.add_option('-v','--verbosity', action='store', dest='verbosity', default='0',
- type='choice', choices=['0', '1', '2'],
- help='Verbosity level; 0=minimal output, 1=normal output, 2=all output')
- parser.add_option('--noinput', action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.')
- parser.add_option('--failfast', action='store_true', dest='failfast', default=False,
- help='Tells Django to stop running the test suite after first failed test.')
- parser.add_option('--settings',
- help='Python path to settings module, e.g. "myproject.settings". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.')
- parser.add_option('--bisect', action='store', dest='bisect', default=None,
- help="Bisect the test suite to discover a test that causes a test failure when combined with the named test.")
- parser.add_option('--pair', action='store', dest='pair', default=None,
- help="Run the test suite in pairs with the named test to find problem pairs.")
- options, args = parser.parse_args()
- if options.settings:
- os.environ['DJANGO_SETTINGS_MODULE'] = options.settings
- elif "DJANGO_SETTINGS_MODULE" not in os.environ:
- parser.error("DJANGO_SETTINGS_MODULE is not set in the environment. "
- "Set it or use --settings.")
-
- if options.bisect:
- bisect_tests(options.bisect, options, args)
- elif options.pair:
- paired_tests(options.pair, options, args)
- else:
- failures = django_tests(int(options.verbosity), options.interactive, options.failfast, args)
- if failures:
- sys.exit(bool(failures))
diff --git a/parts/django/tests/templates/404.html b/parts/django/tests/templates/404.html
deleted file mode 100644
index da627e2..0000000
--- a/parts/django/tests/templates/404.html
+++ /dev/null
@@ -1 +0,0 @@
-Django Internal Tests: 404 Error \ No newline at end of file
diff --git a/parts/django/tests/templates/500.html b/parts/django/tests/templates/500.html
deleted file mode 100644
index ff028cb..0000000
--- a/parts/django/tests/templates/500.html
+++ /dev/null
@@ -1 +0,0 @@
-Django Internal Tests: 500 Error \ No newline at end of file
diff --git a/parts/django/tests/templates/base.html b/parts/django/tests/templates/base.html
deleted file mode 100644
index 611bc09..0000000
--- a/parts/django/tests/templates/base.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head></head>
-<body>
-<h1>Django Internal Tests: {% block title %}{% endblock %}</h1>
-{% block content %}
-{% endblock %}
-</body>
-</html> \ No newline at end of file
diff --git a/parts/django/tests/templates/comments/comment_notification_email.txt b/parts/django/tests/templates/comments/comment_notification_email.txt
deleted file mode 100644
index 63f1493..0000000
--- a/parts/django/tests/templates/comments/comment_notification_email.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-A comment has been posted on {{ content_object }}.
-The comment reads as follows:
-{{ comment }}
diff --git a/parts/django/tests/templates/custom_admin/add_form.html b/parts/django/tests/templates/custom_admin/add_form.html
deleted file mode 100644
index f42ba4b..0000000
--- a/parts/django/tests/templates/custom_admin/add_form.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "admin/change_form.html" %}
diff --git a/parts/django/tests/templates/custom_admin/change_form.html b/parts/django/tests/templates/custom_admin/change_form.html
deleted file mode 100644
index f42ba4b..0000000
--- a/parts/django/tests/templates/custom_admin/change_form.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "admin/change_form.html" %}
diff --git a/parts/django/tests/templates/custom_admin/change_list.html b/parts/django/tests/templates/custom_admin/change_list.html
deleted file mode 100644
index eebc9c7..0000000
--- a/parts/django/tests/templates/custom_admin/change_list.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% extends "admin/change_list.html" %}
-
-{% block extrahead %}
-<script type="text/javascript">
-var hello = '{{ extra_var }}';
-</script>
-{% endblock %}
diff --git a/parts/django/tests/templates/custom_admin/delete_confirmation.html b/parts/django/tests/templates/custom_admin/delete_confirmation.html
deleted file mode 100644
index 9353c5b..0000000
--- a/parts/django/tests/templates/custom_admin/delete_confirmation.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "admin/delete_confirmation.html" %}
diff --git a/parts/django/tests/templates/custom_admin/delete_selected_confirmation.html b/parts/django/tests/templates/custom_admin/delete_selected_confirmation.html
deleted file mode 100644
index 9268536..0000000
--- a/parts/django/tests/templates/custom_admin/delete_selected_confirmation.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "admin/delete_selected_confirmation.html" %}
diff --git a/parts/django/tests/templates/custom_admin/index.html b/parts/django/tests/templates/custom_admin/index.html
deleted file mode 100644
index 75b6ca3..0000000
--- a/parts/django/tests/templates/custom_admin/index.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{% extends "admin/index.html" %}
-
-{% block content %}
-Hello from a custom index template {{ foo }}
-{{ block.super }}
-{% endblock %}
diff --git a/parts/django/tests/templates/custom_admin/login.html b/parts/django/tests/templates/custom_admin/login.html
deleted file mode 100644
index e10a269..0000000
--- a/parts/django/tests/templates/custom_admin/login.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{% extends "admin/login.html" %}
-
-{% block content %}
-Hello from a custom login template
-{{ block.super }}
-{% endblock %}
diff --git a/parts/django/tests/templates/custom_admin/logout.html b/parts/django/tests/templates/custom_admin/logout.html
deleted file mode 100644
index 3a9301b..0000000
--- a/parts/django/tests/templates/custom_admin/logout.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{% extends "registration/logged_out.html" %}
-
-{% block content %}
-Hello from a custom logout template
-{{ block.super }}
-{% endblock %}
diff --git a/parts/django/tests/templates/custom_admin/object_history.html b/parts/django/tests/templates/custom_admin/object_history.html
deleted file mode 100644
index aee3b5b..0000000
--- a/parts/django/tests/templates/custom_admin/object_history.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "admin/object_history.html" %}
diff --git a/parts/django/tests/templates/custom_admin/password_change_done.html b/parts/django/tests/templates/custom_admin/password_change_done.html
deleted file mode 100644
index 0e4a7f2..0000000
--- a/parts/django/tests/templates/custom_admin/password_change_done.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{% extends "registration/password_change_done.html" %}
-
-{% block content %}
-Hello from a custom password change done template
-{{ block.super }}
-{% endblock %}
diff --git a/parts/django/tests/templates/custom_admin/password_change_form.html b/parts/django/tests/templates/custom_admin/password_change_form.html
deleted file mode 100644
index 1c42493..0000000
--- a/parts/django/tests/templates/custom_admin/password_change_form.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{% extends "registration/password_change_form.html" %}
-
-{% block content %}
-Hello from a custom password change form template
-{{ block.super }}
-{% endblock %}
diff --git a/parts/django/tests/templates/extended.html b/parts/django/tests/templates/extended.html
deleted file mode 100644
index e0d8a13..0000000
--- a/parts/django/tests/templates/extended.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{% extends "base.html" %}
-{% block title %}Extended template{% endblock %}
-{% block content %}
-This is just a template extending the base.
-{% endblock %} \ No newline at end of file
diff --git a/parts/django/tests/templates/form_view.html b/parts/django/tests/templates/form_view.html
deleted file mode 100644
index 1487217..0000000
--- a/parts/django/tests/templates/form_view.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "base.html" %}
-{% block title %}Submit data{% endblock %}
-{% block content %}
-<h1>{{ message }}</h1>
-<form method='post' action='.'>
-{% if form.errors %}
-<p class='warning'>Please correct the errors below:</p>
-{% endif %}
-<ul class='form'>
-{{ form }}
-<li><input type='submit' value='Submit'></li>
-</ul>
-</form>
-
-{% endblock %} \ No newline at end of file
diff --git a/parts/django/tests/templates/login.html b/parts/django/tests/templates/login.html
deleted file mode 100644
index d55e9dd..0000000
--- a/parts/django/tests/templates/login.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends "base.html" %}
-{% block title %}Login{% endblock %}
-{% block content %}
-{% if form.has_errors %}
-<p>Your username and password didn't match. Please try again.</p>
-{% endif %}
-
-<form method="post" action=".">
-<table>
-<tr><td><label for="id_username">Username:</label></td><td>{{ form.username }}</td></tr>
-<tr><td><label for="id_password">Password:</label></td><td>{{ form.password }}</td></tr>
-</table>
-
-<input type="submit" value="login" />
-<input type="hidden" name="next" value="{{ next }}" />
-</form>
-{% endblock %} \ No newline at end of file
diff --git a/parts/django/tests/templates/views/article_archive_day.html b/parts/django/tests/templates/views/article_archive_day.html
deleted file mode 100644
index bd2d67f..0000000
--- a/parts/django/tests/templates/views/article_archive_day.html
+++ /dev/null
@@ -1 +0,0 @@
-This template intentionally left blank
diff --git a/parts/django/tests/templates/views/article_archive_month.html b/parts/django/tests/templates/views/article_archive_month.html
deleted file mode 100644
index 3f8ff55..0000000
--- a/parts/django/tests/templates/views/article_archive_month.html
+++ /dev/null
@@ -1 +0,0 @@
-This template intentionally left blank \ No newline at end of file
diff --git a/parts/django/tests/templates/views/article_confirm_delete.html b/parts/django/tests/templates/views/article_confirm_delete.html
deleted file mode 100644
index 3f8ff55..0000000
--- a/parts/django/tests/templates/views/article_confirm_delete.html
+++ /dev/null
@@ -1 +0,0 @@
-This template intentionally left blank \ No newline at end of file
diff --git a/parts/django/tests/templates/views/article_detail.html b/parts/django/tests/templates/views/article_detail.html
deleted file mode 100644
index 952299d..0000000
--- a/parts/django/tests/templates/views/article_detail.html
+++ /dev/null
@@ -1 +0,0 @@
-Article detail template.
diff --git a/parts/django/tests/templates/views/article_form.html b/parts/django/tests/templates/views/article_form.html
deleted file mode 100644
index e2aa1f9..0000000
--- a/parts/django/tests/templates/views/article_form.html
+++ /dev/null
@@ -1,3 +0,0 @@
-Article form template.
-
-{{ form.errors }}
diff --git a/parts/django/tests/templates/views/datearticle_archive_month.html b/parts/django/tests/templates/views/datearticle_archive_month.html
deleted file mode 100644
index 3f8ff55..0000000
--- a/parts/django/tests/templates/views/datearticle_archive_month.html
+++ /dev/null
@@ -1 +0,0 @@
-This template intentionally left blank \ No newline at end of file
diff --git a/parts/django/tests/templates/views/urlarticle_detail.html b/parts/django/tests/templates/views/urlarticle_detail.html
deleted file mode 100644
index 924f310..0000000
--- a/parts/django/tests/templates/views/urlarticle_detail.html
+++ /dev/null
@@ -1 +0,0 @@
-UrlArticle detail template.
diff --git a/parts/django/tests/templates/views/urlarticle_form.html b/parts/django/tests/templates/views/urlarticle_form.html
deleted file mode 100644
index 578dd98..0000000
--- a/parts/django/tests/templates/views/urlarticle_form.html
+++ /dev/null
@@ -1,3 +0,0 @@
-UrlArticle form template.
-
-{{ form.errors }}
diff --git a/parts/django/tests/test_sqlite.py b/parts/django/tests/test_sqlite.py
deleted file mode 100644
index de8bf93..0000000
--- a/parts/django/tests/test_sqlite.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# This is an example test settings file for use with the Django test suite.
-#
-# The 'sqlite3' backend requires only the ENGINE setting (an in-
-# memory database will be used). All other backends will require a
-# NAME and potentially authentication information. See the
-# following section in the docs for more information:
-#
-# http://docs.djangoproject.com/en/dev/internals/contributing/#unit-tests
-#
-# The different databases that Django supports behave differently in certain
-# situations, so it is recommended to run the test suite against as many
-# database backends as possible. You may want to create a separate settings
-# file for each of the backends you test against.
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3'
- },
- 'other': {
- 'ENGINE': 'django.db.backends.sqlite3',
- }
-}
diff --git a/parts/django/tests/urls.py b/parts/django/tests/urls.py
deleted file mode 100644
index 01d6408..0000000
--- a/parts/django/tests/urls.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('',
- # test_client modeltest urls
- (r'^test_client/', include('modeltests.test_client.urls')),
- (r'^test_client_regress/', include('regressiontests.test_client_regress.urls')),
-
- # File upload test views
- (r'^file_uploads/', include('regressiontests.file_uploads.urls')),
-
- # Always provide the auth system login and logout views
- (r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
- (r'^accounts/logout/$', 'django.contrib.auth.views.logout'),
-
- # test urlconf for {% url %} template tag
- (r'^url_tag/', include('regressiontests.templates.urls')),
-
- # django built-in views
- (r'^views/', include('regressiontests.views.urls')),
-
- # test urlconf for middleware tests
- (r'^middleware/', include('regressiontests.middleware.urls')),
-
- # admin view tests
- (r'^test_admin/', include('regressiontests.admin_views.urls')),
- (r'^generic_inline_admin/', include('regressiontests.generic_inline_admin.urls')),
-
- # admin widget tests
- (r'widget_admin/', include('regressiontests.admin_widgets.urls')),
-
- (r'^utils/', include('regressiontests.utils.urls')),
-
- # test urlconf for syndication tests
- (r'^syndication/', include('regressiontests.syndication.urls')),
-
- # conditional get views
- (r'condition/', include('regressiontests.conditional_processing.urls')),
-
- # middleware exceptions tests
- (r'middleware_exceptions/', include('regressiontests.middleware_exceptions.urls')),
-
- # special headers views
- (r'special_headers/', include('regressiontests.special_headers.urls')),
-)